Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Eagar <joeedh@gmail.com>2010-09-04 09:31:25 +0400
committerJoseph Eagar <joeedh@gmail.com>2010-09-04 09:31:25 +0400
commitbb7339a7aec37bdb2ee8a21599e6c65b37ef1277 (patch)
tree6fb8da94c6e43098c606f768e722484b04b8645c
parent37f2c8a64c3277f100ab084ef1bb3846bc7b2c62 (diff)
parent8a320974f1b3e6004db3b3ad64f97742f878cbee (diff)
merge with trunk at r31523
-rw-r--r--CMakeLists.txt94
-rw-r--r--Makefile2
-rw-r--r--SConstruct144
-rwxr-xr-xbuild_files/cmake/example_scripts/cmake_linux_install.sh37
-rw-r--r--build_files/cmake/macros.cmake42
-rw-r--r--build_files/make/nan_compile.mk4
-rw-r--r--build_files/make/nan_definitions.mk16
-rw-r--r--build_files/make/nan_link.mk4
-rw-r--r--build_files/scons/config/freebsd7-config.py213
-rw-r--r--build_files/scons/config/freebsd8-config.py213
-rw-r--r--build_files/scons/config/freebsd9-config.py213
-rw-r--r--build_files/scons/config/win32-vc-config.py2
-rw-r--r--build_files/scons/config/win64-vc-config.py2
-rw-r--r--build_files/scons/tools/Blender.py22
-rw-r--r--build_files/scons/tools/btools.py16
-rw-r--r--doc/blender.1.py4
-rw-r--r--extern/CMakeLists.txt4
-rw-r--r--extern/bullet2/src/BulletDynamics/ConstraintSolver/btConeTwistConstraint.cpp2
-rw-r--r--intern/CMakeLists.txt4
-rw-r--r--intern/ghost/CMakeLists.txt3
-rw-r--r--intern/ghost/SConscript4
-rw-r--r--intern/ghost/intern/GHOST_SystemCocoa.mm5
-rw-r--r--intern/guardedalloc/MEM_guardedalloc.h2
-rw-r--r--intern/iksolver/intern/TNT/vec.h2
-rw-r--r--intern/itasc/MovingFrame.cpp2
-rw-r--r--intern/smoke/extern/smoke_API.h6
-rw-r--r--intern/smoke/intern/FLUID_3D.cpp197
-rw-r--r--intern/smoke/intern/FLUID_3D.h24
-rw-r--r--intern/smoke/intern/WTURBULENCE.cpp17
-rw-r--r--intern/smoke/intern/smoke_API.cpp44
-rw-r--r--intern/string/intern/STR_String.cpp8
-rw-r--r--po/Makefile2
-rw-r--r--projectfiles_vc9/blender/BPY_python/BPY_python.vcproj16
-rw-r--r--projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj24
-rw-r--r--projectfiles_vc9/blender/editors/ED_editors.vcproj122
-rw-r--r--projectfiles_vc9/blender/gpu/BL_gpu.vcproj2
-rw-r--r--projectfiles_vc9/blender/makesrna/RNA_makesrna.vcproj12
-rw-r--r--projectfiles_vc9/blender/makesrna/RNA_rna.vcproj4
-rw-r--r--release/Makefile6
-rw-r--r--release/VERSION2
-rw-r--r--release/bin/.blender/.Blanguages (renamed from bin/.blender/.Blanguages)0
-rw-r--r--release/bin/.blender/.bfont.ttf (renamed from bin/.blender/.bfont.ttf)bin65932 -> 65932 bytes
-rwxr-xr-xrelease/bin/blender-thumbnailer.py131
-rw-r--r--release/datafiles/brushicons/add.pngbin0 -> 10948 bytes
-rw-r--r--release/datafiles/brushicons/blob.pngbin0 -> 10703 bytes
-rw-r--r--release/datafiles/brushicons/blur.pngbin0 -> 9327 bytes
-rw-r--r--release/datafiles/brushicons/clay.pngbin0 -> 11181 bytes
-rw-r--r--release/datafiles/brushicons/clone.pngbin0 -> 10774 bytes
-rw-r--r--release/datafiles/brushicons/crease.pngbin0 -> 8638 bytes
-rw-r--r--release/datafiles/brushicons/darken.pngbin0 -> 9653 bytes
-rw-r--r--release/datafiles/brushicons/draw.pngbin0 -> 11349 bytes
-rw-r--r--release/datafiles/brushicons/fill.pngbin0 -> 16892 bytes
-rw-r--r--release/datafiles/brushicons/flatten.pngbin0 -> 9114 bytes
-rw-r--r--release/datafiles/brushicons/grab.pngbin0 -> 8045 bytes
-rw-r--r--release/datafiles/brushicons/inflate.pngbin0 -> 8840 bytes
-rw-r--r--release/datafiles/brushicons/layer.pngbin0 -> 11004 bytes
-rw-r--r--release/datafiles/brushicons/lighten.pngbin0 -> 9437 bytes
-rw-r--r--release/datafiles/brushicons/mix.pngbin0 -> 10448 bytes
-rw-r--r--release/datafiles/brushicons/multiply.pngbin0 -> 10039 bytes
-rw-r--r--release/datafiles/brushicons/nudge.pngbin0 -> 18012 bytes
-rw-r--r--release/datafiles/brushicons/pinch.pngbin0 -> 9880 bytes
-rw-r--r--release/datafiles/brushicons/scrape.pngbin0 -> 13055 bytes
-rw-r--r--release/datafiles/brushicons/smear.pngbin0 -> 9358 bytes
-rw-r--r--release/datafiles/brushicons/smooth.pngbin0 -> 16428 bytes
-rw-r--r--release/datafiles/brushicons/snake_hook.pngbin0 -> 9710 bytes
-rw-r--r--release/datafiles/brushicons/soften.pngbin0 -> 9219 bytes
-rw-r--r--release/datafiles/brushicons/subtract.pngbin0 -> 10173 bytes
-rw-r--r--release/datafiles/brushicons/texdraw.pngbin0 -> 9462 bytes
-rw-r--r--release/datafiles/brushicons/thumb.pngbin0 -> 9098 bytes
-rw-r--r--release/datafiles/brushicons/twist.pngbin0 -> 10889 bytes
-rw-r--r--release/datafiles/brushicons/vertexdraw.pngbin0 -> 10253 bytes
-rw-r--r--release/datafiles/splash.pngbin204235 -> 185087 bytes
-rw-r--r--release/plugins/Makefile2
-rw-r--r--release/plugins/bmake2
-rw-r--r--release/plugins/sequence/Makefile2
-rw-r--r--release/plugins/texture/Makefile2
-rw-r--r--release/scripts/io/engine_render_pov.py1001
-rw-r--r--release/scripts/io/export_3ds.py55
-rw-r--r--release/scripts/io/export_fbx.py154
-rw-r--r--release/scripts/io/export_mdd.py41
-rw-r--r--release/scripts/io/export_obj.py467
-rw-r--r--release/scripts/io/export_ply.py33
-rw-r--r--release/scripts/io/export_x3d.py124
-rw-r--r--release/scripts/io/import_anim_bvh.py14
-rw-r--r--release/scripts/io/import_scene_3ds.py252
-rw-r--r--release/scripts/io/import_scene_obj.py196
-rw-r--r--release/scripts/io/import_shape_mdd.py11
-rw-r--r--release/scripts/io/netrender/__init__.py42
-rw-r--r--release/scripts/io/netrender/client.py29
-rw-r--r--release/scripts/io/netrender/master.py21
-rw-r--r--release/scripts/io/netrender/master_html.py7
-rw-r--r--release/scripts/io/netrender/operators.py93
-rw-r--r--[-rwxr-xr-x]release/scripts/io/netrender/repath.py25
-rw-r--r--release/scripts/io/netrender/slave.py43
-rw-r--r--release/scripts/io/netrender/ui.py344
-rw-r--r--release/scripts/io/netrender/utils.py17
-rw-r--r--release/scripts/keyingsets/keyingsets_utils.py16
-rw-r--r--release/scripts/modules/add_object_utils.py12
-rw-r--r--release/scripts/modules/bpy/__init__.py4
-rw-r--r--release/scripts/modules/bpy/utils.py170
-rw-r--r--release/scripts/modules/bpy_types.py118
-rw-r--r--release/scripts/modules/graphviz_export.py4
-rw-r--r--release/scripts/modules/rigify/__init__.py56
-rw-r--r--release/scripts/modules/rigify/arm_biped.py64
-rw-r--r--release/scripts/modules/rigify/copy.py4
-rw-r--r--release/scripts/modules/rigify/delta.py8
-rw-r--r--release/scripts/modules/rigify/eye_balls.py24
-rw-r--r--release/scripts/modules/rigify/eye_lid.py78
-rw-r--r--release/scripts/modules/rigify/finger_curl.py40
-rw-r--r--release/scripts/modules/rigify/leg_biped.py70
-rw-r--r--release/scripts/modules/rigify/leg_quadruped.py44
-rw-r--r--release/scripts/modules/rigify/mouth.py68
-rw-r--r--release/scripts/modules/rigify/neck.py24
-rw-r--r--release/scripts/modules/rigify/neck_flex.py34
-rw-r--r--release/scripts/modules/rigify/palm_curl.py16
-rw-r--r--release/scripts/modules/rigify/shape_key_control.py2
-rw-r--r--release/scripts/modules/rigify/shape_key_distance.py2
-rw-r--r--release/scripts/modules/rigify/shape_key_rotdiff.py2
-rw-r--r--release/scripts/modules/rigify/spine_pivot_flex.py52
-rw-r--r--release/scripts/modules/rigify/stretch.py6
-rw-r--r--release/scripts/modules/rigify/stretch_twist.py155
-rw-r--r--release/scripts/modules/rigify/tail_control.py10
-rw-r--r--release/scripts/modules/rigify/tongue.py34
-rw-r--r--release/scripts/modules/rigify/track_dual.py6
-rw-r--r--release/scripts/modules/rigify/track_reverse.py4
-rw-r--r--release/scripts/modules/rigify_utils.py8
-rw-r--r--release/scripts/modules/rna_info.py29
-rw-r--r--release/scripts/modules/rna_prop_ui.py133
-rw-r--r--release/scripts/op/add_armature_human.py152
-rw-r--r--release/scripts/op/add_mesh_torus.py6
-rw-r--r--release/scripts/op/fcurve_euler_filter.py15
-rw-r--r--release/scripts/op/image.py37
-rw-r--r--release/scripts/op/mesh.py38
-rw-r--r--release/scripts/op/nla.py8
-rw-r--r--release/scripts/op/object.py138
-rw-r--r--release/scripts/op/object_align.py5
-rw-r--r--release/scripts/op/object_randomize_transform.py2
-rw-r--r--release/scripts/op/presets.py87
-rw-r--r--release/scripts/op/screen_play_rendered_anim.py8
-rw-r--r--release/scripts/op/sequencer.py35
-rw-r--r--release/scripts/op/uv.py15
-rw-r--r--release/scripts/op/uvcalc_follow_active.py21
-rw-r--r--release/scripts/op/uvcalc_smart_project.py29
-rw-r--r--release/scripts/op/vertexpaint_dirt.py22
-rw-r--r--release/scripts/op/wm.py191
-rw-r--r--release/scripts/presets/interaction/blender.py18
-rw-r--r--release/scripts/presets/interaction/maya.py38
-rw-r--r--release/scripts/templates/gamelogic.py2
-rw-r--r--release/scripts/templates/operator.py6
-rw-r--r--release/scripts/templates/operator_modal.py2
-rw-r--r--release/scripts/templates/operator_modal_draw.py12
-rw-r--r--release/scripts/templates/operator_modal_view3d.py3
-rw-r--r--release/scripts/templates/operator_simple.py10
-rw-r--r--release/scripts/templates/operator_uv.py13
-rw-r--r--release/scripts/templates/panel_simple.py2
-rw-r--r--release/scripts/ui/properties_animviz.py145
-rw-r--r--release/scripts/ui/properties_data_armature.py194
-rw-r--r--release/scripts/ui/properties_data_armature_rigify.py63
-rw-r--r--release/scripts/ui/properties_data_bone.py280
-rw-r--r--release/scripts/ui/properties_data_camera.py84
-rw-r--r--release/scripts/ui/properties_data_curve.py194
-rw-r--r--release/scripts/ui/properties_data_empty.py26
-rw-r--r--release/scripts/ui/properties_data_lamp.py272
-rw-r--r--release/scripts/ui/properties_data_lattice.py68
-rw-r--r--release/scripts/ui/properties_data_mesh.py159
-rw-r--r--release/scripts/ui/properties_data_metaball.py84
-rw-r--r--release/scripts/ui/properties_data_modifier.py439
-rw-r--r--release/scripts/ui/properties_game.py313
-rw-r--r--release/scripts/ui/properties_material.py900
-rw-r--r--release/scripts/ui/properties_object.py205
-rw-r--r--release/scripts/ui/properties_object_constraint.py503
-rw-r--r--release/scripts/ui/properties_particle.py460
-rw-r--r--release/scripts/ui/properties_physics_cloth.py88
-rw-r--r--release/scripts/ui/properties_physics_common.py65
-rw-r--r--release/scripts/ui/properties_physics_field.py101
-rw-r--r--release/scripts/ui/properties_physics_fluid.py137
-rw-r--r--release/scripts/ui/properties_physics_smoke.py138
-rw-r--r--release/scripts/ui/properties_physics_softbody.py116
-rw-r--r--release/scripts/ui/properties_render.py357
-rw-r--r--release/scripts/ui/properties_scene.py129
-rw-r--r--release/scripts/ui/properties_texture.py555
-rw-r--r--release/scripts/ui/properties_world.py255
-rw-r--r--release/scripts/ui/space_buttons.py72
-rw-r--r--release/scripts/ui/space_console.py28
-rw-r--r--release/scripts/ui/space_dopesheet.py27
-rw-r--r--release/scripts/ui/space_filebrowser.py38
-rw-r--r--release/scripts/ui/space_graph.py29
-rw-r--r--release/scripts/ui/space_image.py241
-rw-r--r--release/scripts/ui/space_info.py41
-rw-r--r--release/scripts/ui/space_logic.py43
-rw-r--r--release/scripts/ui/space_nla.py25
-rw-r--r--release/scripts/ui/space_node.py27
-rw-r--r--release/scripts/ui/space_outliner.py23
-rw-r--r--release/scripts/ui/space_sequencer.py368
-rw-r--r--release/scripts/ui/space_text.py90
-rw-r--r--release/scripts/ui/space_time.py63
-rw-r--r--release/scripts/ui/space_userpref.py353
-rw-r--r--release/scripts/ui/space_userpref_keymap.py189
-rw-r--r--release/scripts/ui/space_view3d.py347
-rw-r--r--release/scripts/ui/space_view3d_toolbar.py442
-rw-r--r--release/text/copyright.txt33
-rw-r--r--release/text/readme.html10
-rw-r--r--source/Makefile33
-rw-r--r--source/blender/CMakeLists.txt13
-rw-r--r--source/blender/Makefile2
-rw-r--r--source/blender/SConscript4
-rw-r--r--source/blender/avi/AVI_avi.h2
-rw-r--r--source/blender/avi/CMakeLists.txt1
-rw-r--r--source/blender/avi/Makefile2
-rw-r--r--source/blender/avi/intern/Makefile2
-rw-r--r--source/blender/avi/intern/avi.c2
-rw-r--r--source/blender/avi/intern/avi_intern.h2
-rw-r--r--source/blender/blenfont/Makefile2
-rw-r--r--source/blender/blenfont/intern/Makefile2
-rw-r--r--source/blender/blenfont/intern/blf_font.c2
-rw-r--r--source/blender/blenfont/intern/blf_lang.c1
-rw-r--r--source/blender/blenkernel/BKE_anim.h6
-rw-r--r--source/blender/blenkernel/BKE_armature.h1
-rw-r--r--source/blender/blenkernel/BKE_blender.h4
-rw-r--r--source/blender/blenkernel/BKE_bmesh.h2
-rw-r--r--source/blender/blenkernel/BKE_brush.h32
-rw-r--r--source/blender/blenkernel/BKE_cloth.h54
-rw-r--r--source/blender/blenkernel/BKE_collision.h18
-rw-r--r--source/blender/blenkernel/BKE_colortools.h4
-rw-r--r--source/blender/blenkernel/BKE_curve.h12
-rw-r--r--source/blender/blenkernel/BKE_deform.h2
-rw-r--r--source/blender/blenkernel/BKE_depsgraph.h12
-rw-r--r--source/blender/blenkernel/BKE_displist.h2
-rw-r--r--source/blender/blenkernel/BKE_effect.h1
-rw-r--r--source/blender/blenkernel/BKE_fcurve.h2
-rw-r--r--source/blender/blenkernel/BKE_image.h2
-rw-r--r--source/blender/blenkernel/BKE_library.h6
-rw-r--r--source/blender/blenkernel/BKE_main.h1
-rw-r--r--source/blender/blenkernel/BKE_material.h5
-rw-r--r--source/blender/blenkernel/BKE_mesh.h15
-rw-r--r--source/blender/blenkernel/BKE_node.h23
-rw-r--r--source/blender/blenkernel/BKE_object.h1
-rw-r--r--source/blender/blenkernel/BKE_paint.h4
-rw-r--r--source/blender/blenkernel/BKE_particle.h2
-rw-r--r--source/blender/blenkernel/BKE_pointcache.h20
-rw-r--r--source/blender/blenkernel/BKE_sca.h6
-rw-r--r--source/blender/blenkernel/BKE_scene.h20
-rw-r--r--source/blender/blenkernel/BKE_sequencer.h66
-rw-r--r--source/blender/blenkernel/BKE_sound.h2
-rw-r--r--source/blender/blenkernel/BKE_text.h2
-rw-r--r--source/blender/blenkernel/BKE_texture.h3
-rw-r--r--source/blender/blenkernel/CMakeLists.txt28
-rw-r--r--source/blender/blenkernel/Makefile2
-rw-r--r--source/blender/blenkernel/SConscript6
-rw-r--r--source/blender/blenkernel/intern/BME_Customdata.c2
-rw-r--r--source/blender/blenkernel/intern/BME_conversions.c11
-rw-r--r--source/blender/blenkernel/intern/DerivedMesh.c998
-rw-r--r--source/blender/blenkernel/intern/Makefile15
-rw-r--r--source/blender/blenkernel/intern/action.c13
-rw-r--r--source/blender/blenkernel/intern/anim.c19
-rw-r--r--source/blender/blenkernel/intern/armature.c117
-rw-r--r--source/blender/blenkernel/intern/blender.c15
-rw-r--r--source/blender/blenkernel/intern/boids.c13
-rw-r--r--source/blender/blenkernel/intern/booleanops_mesh.c1
-rw-r--r--source/blender/blenkernel/intern/brush.c612
-rw-r--r--source/blender/blenkernel/intern/cdderivedmesh.c12
-rw-r--r--source/blender/blenkernel/intern/cloth.c11
-rw-r--r--source/blender/blenkernel/intern/collision.c10
-rw-r--r--source/blender/blenkernel/intern/colortools.c79
-rw-r--r--source/blender/blenkernel/intern/constraint.c220
-rw-r--r--source/blender/blenkernel/intern/context.c12
-rw-r--r--source/blender/blenkernel/intern/curve.c154
-rw-r--r--source/blender/blenkernel/intern/deform.c2
-rw-r--r--source/blender/blenkernel/intern/depsgraph.c54
-rw-r--r--source/blender/blenkernel/intern/displist.c30
-rw-r--r--source/blender/blenkernel/intern/effect.c11
-rw-r--r--source/blender/blenkernel/intern/fluidsim.c1
-rw-r--r--source/blender/blenkernel/intern/fmodifier.c6
-rw-r--r--source/blender/blenkernel/intern/font.c17
-rw-r--r--source/blender/blenkernel/intern/group.c9
-rw-r--r--source/blender/blenkernel/intern/icons.c7
-rw-r--r--source/blender/blenkernel/intern/idprop.c53
-rw-r--r--source/blender/blenkernel/intern/image.c55
-rw-r--r--source/blender/blenkernel/intern/implicit.c18
-rw-r--r--source/blender/blenkernel/intern/ipo.c3
-rw-r--r--source/blender/blenkernel/intern/key.c177
-rw-r--r--source/blender/blenkernel/intern/lattice.c164
-rw-r--r--source/blender/blenkernel/intern/library.c125
-rw-r--r--source/blender/blenkernel/intern/material.c31
-rw-r--r--source/blender/blenkernel/intern/mesh.c107
-rw-r--r--source/blender/blenkernel/intern/modifier.c24
-rw-r--r--source/blender/blenkernel/intern/nla.c4
-rw-r--r--source/blender/blenkernel/intern/node.c32
-rw-r--r--source/blender/blenkernel/intern/object.c130
-rw-r--r--source/blender/blenkernel/intern/paint.c101
-rw-r--r--source/blender/blenkernel/intern/particle.c163
-rw-r--r--source/blender/blenkernel/intern/particle_system.c114
-rw-r--r--source/blender/blenkernel/intern/pointcache.c27
-rw-r--r--source/blender/blenkernel/intern/property.c10
-rw-r--r--source/blender/blenkernel/intern/sca.c2
-rw-r--r--source/blender/blenkernel/intern/scene.c67
-rw-r--r--source/blender/blenkernel/intern/screen.c4
-rw-r--r--source/blender/blenkernel/intern/seqeffects.c353
-rw-r--r--source/blender/blenkernel/intern/sequencer.c1810
-rw-r--r--source/blender/blenkernel/intern/shrinkwrap.c1
-rw-r--r--source/blender/blenkernel/intern/sketch.c3
-rw-r--r--source/blender/blenkernel/intern/smoke.c230
-rw-r--r--source/blender/blenkernel/intern/softbody.c14
-rw-r--r--source/blender/blenkernel/intern/sound.c30
-rw-r--r--source/blender/blenkernel/intern/subsurf_ccg.c4
-rw-r--r--source/blender/blenkernel/intern/text.c33
-rw-r--r--source/blender/blenkernel/intern/texture.c102
-rw-r--r--source/blender/blenkernel/intern/world.c13
-rw-r--r--source/blender/blenkernel/intern/writeframeserver.c1
-rw-r--r--source/blender/blenlib/BLI_cellalloc.h3
-rw-r--r--source/blender/blenlib/BLI_ghash.h6
-rw-r--r--source/blender/blenlib/BLI_listbase.h1
-rw-r--r--source/blender/blenlib/BLI_math_rotation.h12
-rw-r--r--source/blender/blenlib/BLI_math_vector.h1
-rw-r--r--source/blender/blenlib/BLI_path_util.h31
-rw-r--r--source/blender/blenlib/BLI_storage_types.h2
-rw-r--r--source/blender/blenlib/CMakeLists.txt4
-rw-r--r--source/blender/blenlib/Makefile2
-rw-r--r--source/blender/blenlib/intern/BLI_ghash.c2
-rw-r--r--source/blender/blenlib/intern/Makefile2
-rw-r--r--source/blender/blenlib/intern/bpath.c2
-rw-r--r--source/blender/blenlib/intern/fileops.c2
-rw-r--r--source/blender/blenlib/intern/listbase.c21
-rw-r--r--source/blender/blenlib/intern/math_color.c7
-rw-r--r--source/blender/blenlib/intern/math_geom.c30
-rw-r--r--source/blender/blenlib/intern/math_geom_inline.c2
-rw-r--r--source/blender/blenlib/intern/math_matrix.c9
-rw-r--r--source/blender/blenlib/intern/math_rotation.c46
-rw-r--r--source/blender/blenlib/intern/math_vector.c6
-rw-r--r--source/blender/blenlib/intern/math_vector_inline.c5
-rw-r--r--source/blender/blenlib/intern/path_util.c329
-rw-r--r--source/blender/blenlib/intern/pbvh.c2
-rw-r--r--source/blender/blenlib/intern/scanfill.c2
-rw-r--r--source/blender/blenlib/intern/storage.c28
-rw-r--r--source/blender/blenlib/intern/winstuff.c1
-rw-r--r--source/blender/blenloader/BLO_readfile.h32
-rw-r--r--source/blender/blenloader/Makefile2
-rw-r--r--source/blender/blenloader/intern/Makefile2
-rw-r--r--source/blender/blenloader/intern/readblenentry.c114
-rw-r--r--source/blender/blenloader/intern/readfile.c157
-rw-r--r--source/blender/blenloader/intern/undofile.c3
-rw-r--r--source/blender/blenloader/intern/writefile.c36
-rw-r--r--source/blender/blenpluginapi/CMakeLists.txt1
-rw-r--r--source/blender/blenpluginapi/Makefile2
-rw-r--r--source/blender/blenpluginapi/intern/Makefile2
-rw-r--r--source/blender/collada/DocumentExporter.cpp3
-rw-r--r--source/blender/collada/DocumentImporter.cpp14
-rw-r--r--source/blender/collada/SConscript2
-rw-r--r--source/blender/editors/Makefile2
-rw-r--r--source/blender/editors/animation/Makefile2
-rw-r--r--source/blender/editors/animation/anim_channels_edit.c2
-rw-r--r--source/blender/editors/animation/anim_filter.c4
-rw-r--r--source/blender/editors/animation/anim_markers.c1
-rw-r--r--source/blender/editors/animation/anim_ops.c2
-rw-r--r--source/blender/editors/animation/drivers.c4
-rw-r--r--source/blender/editors/animation/fmodifier_ui.c44
-rw-r--r--source/blender/editors/animation/keyframes_draw.c7
-rw-r--r--source/blender/editors/animation/keyframes_edit.c1
-rw-r--r--source/blender/editors/animation/keyframes_general.c2
-rw-r--r--source/blender/editors/animation/keyframing.c18
-rw-r--r--source/blender/editors/animation/keyingsets.c36
-rw-r--r--source/blender/editors/armature/Makefile2
-rw-r--r--source/blender/editors/armature/armature_ops.c6
-rw-r--r--source/blender/editors/armature/editarmature.c212
-rw-r--r--source/blender/editors/armature/editarmature_generate.c3
-rw-r--r--source/blender/editors/armature/editarmature_retarget.c3
-rw-r--r--source/blender/editors/armature/editarmature_sketch.c6
-rw-r--r--source/blender/editors/armature/meshlaplacian.c1
-rw-r--r--source/blender/editors/armature/poseSlide.c8
-rw-r--r--source/blender/editors/armature/poseUtils.c7
-rw-r--r--source/blender/editors/armature/poselib.c10
-rw-r--r--source/blender/editors/armature/poseobject.c49
-rw-r--r--source/blender/editors/armature/reeb.c9
-rw-r--r--source/blender/editors/curve/Makefile2
-rw-r--r--source/blender/editors/curve/curve_ops.c7
-rw-r--r--source/blender/editors/curve/editcurve.c1043
-rw-r--r--source/blender/editors/curve/editfont.c12
-rw-r--r--source/blender/editors/datafiles/Makefile2
-rw-r--r--source/blender/editors/datafiles/SConscript2
-rw-r--r--source/blender/editors/datafiles/add.png.c349
-rw-r--r--source/blender/editors/datafiles/blob.png.c341
-rw-r--r--source/blender/editors/datafiles/blur.png.c298
-rw-r--r--source/blender/editors/datafiles/clay.png.c356
-rw-r--r--source/blender/editors/datafiles/clone.png.c343
-rw-r--r--source/blender/editors/datafiles/crease.png.c276
-rw-r--r--source/blender/editors/datafiles/darken.png.c308
-rw-r--r--source/blender/editors/datafiles/draw.png.c361
-rw-r--r--source/blender/editors/datafiles/fill.png.c534
-rw-r--r--source/blender/editors/datafiles/flatten.png.c291
-rw-r--r--source/blender/editors/datafiles/grab.png.c258
-rw-r--r--source/blender/editors/datafiles/inflate.png.c283
-rw-r--r--source/blender/editors/datafiles/layer.png.c350
-rw-r--r--source/blender/editors/datafiles/lighten.png.c301
-rw-r--r--source/blender/editors/datafiles/mix.png.c333
-rw-r--r--source/blender/editors/datafiles/multiply.png.c320
-rw-r--r--source/blender/editors/datafiles/nudge.png.c569
-rw-r--r--source/blender/editors/datafiles/pinch.png.c315
-rw-r--r--source/blender/editors/datafiles/scrape.png.c414
-rw-r--r--source/blender/editors/datafiles/smear.png.c299
-rw-r--r--source/blender/editors/datafiles/smooth.png.c520
-rw-r--r--source/blender/editors/datafiles/snake_hook.png.c310
-rw-r--r--source/blender/editors/datafiles/soften.png.c295
-rw-r--r--source/blender/editors/datafiles/splash.png.c12169
-rw-r--r--source/blender/editors/datafiles/startup.blend.c13099
-rw-r--r--source/blender/editors/datafiles/subtract.png.c324
-rw-r--r--source/blender/editors/datafiles/texdraw.png.c302
-rw-r--r--source/blender/editors/datafiles/thumb.png.c291
-rw-r--r--source/blender/editors/datafiles/twist.png.c347
-rw-r--r--source/blender/editors/datafiles/vertexdraw.png.c327
-rw-r--r--source/blender/editors/gpencil/Makefile2
-rw-r--r--source/blender/editors/gpencil/drawgpencil.c3
-rw-r--r--source/blender/editors/gpencil/editaction_gpencil.c14
-rw-r--r--source/blender/editors/gpencil/gpencil_buttons.c16
-rw-r--r--source/blender/editors/gpencil/gpencil_edit.c8
-rw-r--r--source/blender/editors/gpencil/gpencil_paint.c2
-rw-r--r--source/blender/editors/include/ED_armature.h2
-rw-r--r--source/blender/editors/include/ED_curve.h10
-rw-r--r--source/blender/editors/include/ED_datafiles.h88
-rw-r--r--source/blender/editors/include/ED_lattice.h (renamed from source/blender/makesdna/DNA_wave_types.h)35
-rw-r--r--source/blender/editors/include/ED_mesh.h1
-rw-r--r--source/blender/editors/include/ED_object.h43
-rw-r--r--source/blender/editors/include/ED_sculpt.h2
-rw-r--r--source/blender/editors/include/ED_view3d.h4
-rw-r--r--source/blender/editors/include/UI_icons.h35
-rw-r--r--source/blender/editors/include/UI_interface.h10
-rw-r--r--source/blender/editors/interface/Makefile2
-rw-r--r--source/blender/editors/interface/interface.c13
-rw-r--r--source/blender/editors/interface/interface_anim.c2
-rw-r--r--source/blender/editors/interface/interface_draw.c19
-rw-r--r--source/blender/editors/interface/interface_handlers.c42
-rw-r--r--source/blender/editors/interface/interface_icons.c105
-rw-r--r--source/blender/editors/interface/interface_layout.c50
-rw-r--r--source/blender/editors/interface/interface_ops.c1
-rw-r--r--source/blender/editors/interface/interface_panel.c1
-rw-r--r--source/blender/editors/interface/interface_regions.c26
-rw-r--r--source/blender/editors/interface/interface_style.c6
-rw-r--r--source/blender/editors/interface/interface_templates.c332
-rw-r--r--source/blender/editors/interface/interface_widgets.c9
-rw-r--r--source/blender/editors/interface/resources.c72
-rw-r--r--source/blender/editors/interface/view2d.c1
-rw-r--r--source/blender/editors/interface/view2d_ops.c2
-rw-r--r--source/blender/editors/mesh/Makefile2
-rw-r--r--source/blender/editors/mesh/editface.c9
-rw-r--r--source/blender/editors/mesh/loopcut.c2
-rw-r--r--source/blender/editors/mesh/mesh_data.c2
-rw-r--r--source/blender/editors/mesh/mesh_intern.h3
-rw-r--r--source/blender/editors/mesh/mesh_ops.c7
-rw-r--r--source/blender/editors/mesh/meshtools.c24
-rw-r--r--source/blender/editors/metaball/Makefile2
-rw-r--r--source/blender/editors/metaball/mball_edit.c7
-rw-r--r--source/blender/editors/metaball/mball_ops.c1
-rw-r--r--source/blender/editors/object/Makefile2
-rw-r--r--source/blender/editors/object/object_add.c93
-rw-r--r--source/blender/editors/object/object_bake.c13
-rw-r--r--source/blender/editors/object/object_constraint.c27
-rw-r--r--source/blender/editors/object/object_edit.c247
-rw-r--r--source/blender/editors/object/object_group.c19
-rw-r--r--source/blender/editors/object/object_hook.c24
-rw-r--r--source/blender/editors/object/object_intern.h13
-rw-r--r--source/blender/editors/object/object_lattice.c117
-rw-r--r--source/blender/editors/object/object_modifier.c28
-rw-r--r--source/blender/editors/object/object_ops.c62
-rw-r--r--source/blender/editors/object/object_relations.c96
-rw-r--r--source/blender/editors/object/object_select.c128
-rw-r--r--source/blender/editors/object/object_shapekey.c8
-rw-r--r--source/blender/editors/object/object_transform.c480
-rw-r--r--source/blender/editors/object/object_vgroup.c25
-rw-r--r--source/blender/editors/physics/CMakeLists.txt4
-rw-r--r--source/blender/editors/physics/Makefile2
-rw-r--r--source/blender/editors/physics/particle_boids.c7
-rw-r--r--source/blender/editors/physics/particle_edit.c35
-rw-r--r--source/blender/editors/physics/particle_object.c8
-rw-r--r--source/blender/editors/physics/physics_fluid.c2
-rw-r--r--source/blender/editors/physics/physics_ops.c3
-rw-r--r--source/blender/editors/physics/physics_pointcache.c13
-rw-r--r--source/blender/editors/render/Makefile2
-rw-r--r--source/blender/editors/render/render_internal.c48
-rw-r--r--source/blender/editors/render/render_opengl.c16
-rw-r--r--source/blender/editors/render/render_preview.c85
-rw-r--r--source/blender/editors/render/render_shading.c29
-rw-r--r--source/blender/editors/screen/Makefile2
-rw-r--r--source/blender/editors/screen/area.c12
-rw-r--r--source/blender/editors/screen/screen_context.c1
-rw-r--r--source/blender/editors/screen/screen_edit.c14
-rw-r--r--source/blender/editors/screen/screen_intern.h3
-rw-r--r--source/blender/editors/screen/screen_ops.c153
-rw-r--r--source/blender/editors/screen/screendump.c1
-rw-r--r--source/blender/editors/sculpt_paint/Makefile2
-rw-r--r--source/blender/editors/sculpt_paint/paint_image.c117
-rw-r--r--source/blender/editors/sculpt_paint/paint_intern.h2
-rw-r--r--source/blender/editors/sculpt_paint/paint_ops.c151
-rw-r--r--source/blender/editors/sculpt_paint/paint_stroke.c70
-rw-r--r--source/blender/editors/sculpt_paint/paint_undo.c36
-rw-r--r--source/blender/editors/sculpt_paint/paint_utils.c7
-rw-r--r--source/blender/editors/sculpt_paint/paint_vertex.c76
-rw-r--r--source/blender/editors/sculpt_paint/sculpt.c377
-rw-r--r--source/blender/editors/sculpt_paint/sculpt_intern.h2
-rw-r--r--source/blender/editors/sculpt_paint/sculpt_undo.c4
-rw-r--r--source/blender/editors/sound/Makefile4
-rw-r--r--source/blender/editors/sound/sound_ops.c3
-rw-r--r--source/blender/editors/space_action/Makefile2
-rw-r--r--source/blender/editors/space_action/action_draw.c8
-rw-r--r--source/blender/editors/space_action/action_edit.c6
-rw-r--r--source/blender/editors/space_action/action_ops.c4
-rw-r--r--source/blender/editors/space_action/action_select.c9
-rw-r--r--source/blender/editors/space_action/space_action.c2
-rw-r--r--source/blender/editors/space_api/Makefile2
-rw-r--r--source/blender/editors/space_api/space.c3
-rw-r--r--source/blender/editors/space_api/spacetypes.c1
-rw-r--r--source/blender/editors/space_buttons/Makefile2
-rw-r--r--source/blender/editors/space_buttons/buttons_context.c5
-rw-r--r--source/blender/editors/space_buttons/buttons_header.c5
-rw-r--r--source/blender/editors/space_buttons/buttons_ops.c1
-rw-r--r--source/blender/editors/space_buttons/space_buttons.c17
-rw-r--r--source/blender/editors/space_console/Makefile2
-rw-r--r--source/blender/editors/space_console/console_draw.c4
-rw-r--r--source/blender/editors/space_console/console_ops.c6
-rw-r--r--source/blender/editors/space_console/console_report.c6
-rw-r--r--source/blender/editors/space_console/space_console.c6
-rw-r--r--source/blender/editors/space_file/CMakeLists.txt24
-rw-r--r--source/blender/editors/space_file/Makefile9
-rw-r--r--source/blender/editors/space_file/file_draw.c17
-rw-r--r--source/blender/editors/space_file/file_ops.c4
-rw-r--r--source/blender/editors/space_file/filelist.c147
-rw-r--r--source/blender/editors/space_file/filesel.c12
-rw-r--r--source/blender/editors/space_file/fsmenu.c5
-rw-r--r--source/blender/editors/space_file/space_file.c4
-rw-r--r--source/blender/editors/space_file/writeimage.c9
-rw-r--r--source/blender/editors/space_graph/Makefile4
-rw-r--r--source/blender/editors/space_graph/graph_buttons.c26
-rw-r--r--source/blender/editors/space_graph/graph_draw.c7
-rw-r--r--source/blender/editors/space_graph/graph_edit.c10
-rw-r--r--source/blender/editors/space_graph/graph_ops.c5
-rw-r--r--source/blender/editors/space_graph/graph_select.c6
-rw-r--r--source/blender/editors/space_graph/graph_utils.c11
-rw-r--r--source/blender/editors/space_graph/space_graph.c1
-rw-r--r--source/blender/editors/space_image/CMakeLists.txt8
-rw-r--r--source/blender/editors/space_image/Makefile17
-rw-r--r--source/blender/editors/space_image/image_buttons.c26
-rw-r--r--source/blender/editors/space_image/image_draw.c30
-rw-r--r--source/blender/editors/space_image/image_header.c8
-rw-r--r--source/blender/editors/space_image/image_ops.c99
-rw-r--r--source/blender/editors/space_image/image_render.c2
-rw-r--r--source/blender/editors/space_image/space_image.c5
-rw-r--r--source/blender/editors/space_info/Makefile2
-rw-r--r--source/blender/editors/space_info/info_ops.c3
-rw-r--r--source/blender/editors/space_info/info_stats.c7
-rw-r--r--source/blender/editors/space_info/space_info.c3
-rw-r--r--source/blender/editors/space_logic/Makefile2
-rw-r--r--source/blender/editors/space_logic/logic_buttons.c10
-rw-r--r--source/blender/editors/space_logic/logic_header.c120
-rw-r--r--source/blender/editors/space_logic/logic_intern.h3
-rw-r--r--source/blender/editors/space_logic/logic_ops.c1
-rw-r--r--source/blender/editors/space_logic/logic_window.c326
-rw-r--r--source/blender/editors/space_logic/space_logic.c14
-rw-r--r--source/blender/editors/space_nla/Makefile2
-rw-r--r--source/blender/editors/space_nla/nla_buttons.c41
-rw-r--r--source/blender/editors/space_nla/nla_channels.c44
-rw-r--r--source/blender/editors/space_nla/nla_draw.c5
-rw-r--r--source/blender/editors/space_nla/nla_edit.c3
-rw-r--r--source/blender/editors/space_nla/nla_ops.c8
-rw-r--r--source/blender/editors/space_nla/nla_select.c2
-rw-r--r--source/blender/editors/space_nla/space_nla.c5
-rw-r--r--source/blender/editors/space_node/Makefile2
-rw-r--r--source/blender/editors/space_node/drawnode.c162
-rw-r--r--source/blender/editors/space_node/node_buttons.c7
-rw-r--r--source/blender/editors/space_node/node_draw.c10
-rw-r--r--source/blender/editors/space_node/node_edit.c9
-rw-r--r--source/blender/editors/space_node/node_header.c3
-rw-r--r--source/blender/editors/space_node/node_ops.c2
-rw-r--r--source/blender/editors/space_node/node_select.c5
-rw-r--r--source/blender/editors/space_node/node_state.c10
-rw-r--r--source/blender/editors/space_node/space_node.c3
-rw-r--r--source/blender/editors/space_outliner/Makefile2
-rw-r--r--source/blender/editors/space_outliner/outliner.c76
-rw-r--r--source/blender/editors/space_outliner/space_outliner.c4
-rw-r--r--source/blender/editors/space_script/Makefile2
-rw-r--r--source/blender/editors/space_script/script_edit.c15
-rw-r--r--source/blender/editors/space_script/script_header.c4
-rw-r--r--source/blender/editors/space_script/script_ops.c3
-rw-r--r--source/blender/editors/space_script/space_script.c1
-rw-r--r--source/blender/editors/space_sequencer/Makefile3
-rw-r--r--source/blender/editors/space_sequencer/sequencer_add.c28
-rw-r--r--source/blender/editors/space_sequencer/sequencer_buttons.c3
-rw-r--r--source/blender/editors/space_sequencer/sequencer_draw.c127
-rw-r--r--source/blender/editors/space_sequencer/sequencer_edit.c48
-rw-r--r--source/blender/editors/space_sequencer/sequencer_ops.c26
-rw-r--r--source/blender/editors/space_sequencer/sequencer_select.c8
-rw-r--r--source/blender/editors/space_sequencer/space_sequencer.c16
-rw-r--r--source/blender/editors/space_sound/Makefile4
-rw-r--r--source/blender/editors/space_sound/sound_header.c1
-rw-r--r--source/blender/editors/space_sound/space_sound.c2
-rw-r--r--source/blender/editors/space_text/Makefile2
-rw-r--r--source/blender/editors/space_text/space_text.c5
-rw-r--r--source/blender/editors/space_text/text_draw.c99
-rw-r--r--source/blender/editors/space_text/text_header.c9
-rw-r--r--source/blender/editors/space_text/text_ops.c40
-rw-r--r--source/blender/editors/space_time/Makefile2
-rw-r--r--source/blender/editors/space_time/space_time.c2
-rw-r--r--source/blender/editors/space_time/time_ops.c2
-rw-r--r--source/blender/editors/space_userpref/Makefile2
-rw-r--r--source/blender/editors/space_userpref/space_userpref.c1
-rw-r--r--source/blender/editors/space_view3d/Makefile2
-rw-r--r--source/blender/editors/space_view3d/drawanimviz.c15
-rw-r--r--source/blender/editors/space_view3d/drawarmature.c19
-rw-r--r--source/blender/editors/space_view3d/drawmesh.c7
-rw-r--r--source/blender/editors/space_view3d/drawobject.c416
-rw-r--r--source/blender/editors/space_view3d/drawvolume.c5
-rw-r--r--source/blender/editors/space_view3d/space_view3d.c5
-rw-r--r--source/blender/editors/space_view3d/view3d_buttons.c32
-rw-r--r--source/blender/editors/space_view3d/view3d_draw.c122
-rw-r--r--source/blender/editors/space_view3d/view3d_edit.c248
-rw-r--r--source/blender/editors/space_view3d/view3d_header.c25
-rw-r--r--source/blender/editors/space_view3d/view3d_intern.h16
-rw-r--r--source/blender/editors/space_view3d/view3d_ops.c12
-rw-r--r--source/blender/editors/space_view3d/view3d_select.c25
-rw-r--r--source/blender/editors/space_view3d/view3d_snap.c58
-rw-r--r--source/blender/editors/space_view3d/view3d_toolbar.c10
-rw-r--r--source/blender/editors/space_view3d/view3d_view.c151
-rw-r--r--source/blender/editors/transform/Makefile2
-rw-r--r--source/blender/editors/transform/transform.c38
-rw-r--r--source/blender/editors/transform/transform_constraints.c13
-rw-r--r--source/blender/editors/transform/transform_conversions.c60
-rw-r--r--source/blender/editors/transform/transform_generics.c127
-rw-r--r--source/blender/editors/transform/transform_input.c8
-rw-r--r--source/blender/editors/transform/transform_manipulator.c14
-rw-r--r--source/blender/editors/transform/transform_ops.c12
-rw-r--r--source/blender/editors/transform/transform_orientations.c7
-rw-r--r--source/blender/editors/transform/transform_snap.c8
-rw-r--r--source/blender/editors/util/Makefile2
-rw-r--r--source/blender/editors/util/ed_util.c7
-rw-r--r--source/blender/editors/util/editmode_undo.c2
-rw-r--r--source/blender/editors/util/numinput.c2
-rw-r--r--source/blender/editors/util/undo.c21
-rw-r--r--source/blender/editors/uvedit/Makefile2
-rw-r--r--source/blender/editors/uvedit/uvedit_draw.c2
-rw-r--r--source/blender/editors/uvedit/uvedit_ops.c3
-rw-r--r--source/blender/editors/uvedit/uvedit_unwrap_ops.c2
-rw-r--r--source/blender/gpu/GPU_material.h2
-rw-r--r--source/blender/gpu/Makefile2
-rw-r--r--source/blender/gpu/intern/Makefile2
-rw-r--r--source/blender/gpu/intern/gpu_buffers.c1
-rw-r--r--source/blender/gpu/intern/gpu_codegen.c3
-rw-r--r--source/blender/gpu/intern/gpu_draw.c2
-rw-r--r--source/blender/gpu/intern/gpu_extensions.c5
-rw-r--r--source/blender/gpu/intern/gpu_material.c20
-rw-r--r--source/blender/gpu/intern/gpu_shader_material.glsl32
-rw-r--r--source/blender/gpu/intern/gpu_shader_material.glsl.c308
-rw-r--r--source/blender/ikplugin/Makefile2
-rw-r--r--source/blender/ikplugin/intern/Makefile2
-rw-r--r--source/blender/ikplugin/intern/ikplugin_api.c1
-rw-r--r--source/blender/imbuf/CMakeLists.txt25
-rw-r--r--source/blender/imbuf/IMB_imbuf_types.h12
-rw-r--r--source/blender/imbuf/Makefile2
-rw-r--r--source/blender/imbuf/SConscript6
-rw-r--r--source/blender/imbuf/intern/Makefile13
-rw-r--r--source/blender/imbuf/intern/allocimbuf.c3
-rw-r--r--source/blender/imbuf/intern/anim.c292
-rw-r--r--source/blender/imbuf/intern/cache.c2
-rw-r--r--source/blender/imbuf/intern/cineon/CMakeLists.txt1
-rw-r--r--source/blender/imbuf/intern/cineon/Makefile2
-rw-r--r--source/blender/imbuf/intern/dds/CMakeLists.txt5
-rw-r--r--source/blender/imbuf/intern/dds/Makefile2
-rw-r--r--source/blender/imbuf/intern/filetype.c4
-rw-r--r--source/blender/imbuf/intern/filter.c1
-rw-r--r--source/blender/imbuf/intern/imageprocess.c8
-rw-r--r--source/blender/imbuf/intern/imbuf.h2
-rw-r--r--source/blender/imbuf/intern/iris.c3
-rw-r--r--source/blender/imbuf/intern/jp2.c4
-rw-r--r--source/blender/imbuf/intern/jpeg.c5
-rw-r--r--source/blender/imbuf/intern/openexr/CMakeLists.txt5
-rw-r--r--source/blender/imbuf/intern/openexr/Makefile2
-rw-r--r--source/blender/imbuf/intern/openexr/openexr_api.cpp4
-rw-r--r--source/blender/imbuf/intern/png.c10
-rw-r--r--source/blender/imbuf/intern/radiance_hdr.c6
-rw-r--r--source/blender/imbuf/intern/rotate.c3
-rw-r--r--source/blender/imbuf/intern/scaling.c1
-rw-r--r--source/blender/imbuf/intern/targa.c1
-rw-r--r--source/blender/imbuf/intern/thumbs.c13
-rw-r--r--source/blender/imbuf/intern/thumbs_blend.c92
-rw-r--r--source/blender/imbuf/intern/tiff.c125
-rw-r--r--source/blender/imbuf/intern/util.c154
-rw-r--r--source/blender/makesdna/DNA_ID.h1
-rw-r--r--source/blender/makesdna/DNA_action_types.h3
-rw-r--r--source/blender/makesdna/DNA_actuator_types.h22
-rw-r--r--source/blender/makesdna/DNA_brush_types.h11
-rw-r--r--source/blender/makesdna/DNA_color_types.h2
-rw-r--r--source/blender/makesdna/DNA_constraint_types.h49
-rw-r--r--source/blender/makesdna/DNA_curve_types.h24
-rw-r--r--source/blender/makesdna/DNA_image_types.h4
-rw-r--r--source/blender/makesdna/DNA_lattice_types.h10
-rw-r--r--source/blender/makesdna/DNA_mesh_types.h4
-rw-r--r--source/blender/makesdna/DNA_modifier_types.h3
-rw-r--r--source/blender/makesdna/DNA_node_types.h1
-rw-r--r--source/blender/makesdna/DNA_object_types.h6
-rw-r--r--source/blender/makesdna/DNA_scene_types.h30
-rw-r--r--source/blender/makesdna/DNA_sdna_types.h2
-rw-r--r--source/blender/makesdna/DNA_sequence_types.h19
-rw-r--r--source/blender/makesdna/DNA_smoke_types.h24
-rw-r--r--source/blender/makesdna/DNA_sound_types.h28
-rw-r--r--source/blender/makesdna/DNA_space_types.h21
-rw-r--r--source/blender/makesdna/DNA_texture_types.h2
-rw-r--r--source/blender/makesdna/DNA_userdef_types.h15
-rw-r--r--source/blender/makesdna/DNA_world_types.h10
-rw-r--r--source/blender/makesdna/Makefile2
-rw-r--r--source/blender/makesdna/intern/Makefile2
-rw-r--r--source/blender/makesdna/intern/SConscript2
-rw-r--r--source/blender/makesdna/intern/dna_genfile.c6
-rw-r--r--source/blender/makesdna/intern/makesdna.c10
-rw-r--r--source/blender/makesrna/Makefile2
-rw-r--r--source/blender/makesrna/RNA_access.h13
-rw-r--r--source/blender/makesrna/RNA_define.h4
-rw-r--r--source/blender/makesrna/RNA_enum_types.h4
-rw-r--r--source/blender/makesrna/RNA_types.h3
-rw-r--r--source/blender/makesrna/SConscript11
-rw-r--r--source/blender/makesrna/intern/CMakeLists.txt29
-rw-r--r--source/blender/makesrna/intern/Makefile17
-rw-r--r--source/blender/makesrna/intern/SConscript12
-rw-r--r--source/blender/makesrna/intern/makesrna.c10
-rw-r--r--source/blender/makesrna/intern/rna_ID.c10
-rw-r--r--source/blender/makesrna/intern/rna_access.c121
-rw-r--r--source/blender/makesrna/intern/rna_action.c65
-rw-r--r--source/blender/makesrna/intern/rna_actuator.c212
-rw-r--r--source/blender/makesrna/intern/rna_animation.c31
-rw-r--r--source/blender/makesrna/intern/rna_animviz.c28
-rw-r--r--source/blender/makesrna/intern/rna_armature.c91
-rw-r--r--source/blender/makesrna/intern/rna_boid.c61
-rw-r--r--source/blender/makesrna/intern/rna_brush.c456
-rw-r--r--source/blender/makesrna/intern/rna_camera.c10
-rw-r--r--source/blender/makesrna/intern/rna_cloth.c14
-rw-r--r--source/blender/makesrna/intern/rna_color.c90
-rw-r--r--source/blender/makesrna/intern/rna_constraint.c163
-rw-r--r--source/blender/makesrna/intern/rna_context.c42
-rw-r--r--source/blender/makesrna/intern/rna_controller.c13
-rw-r--r--source/blender/makesrna/intern/rna_curve.c219
-rw-r--r--source/blender/makesrna/intern/rna_define.c109
-rw-r--r--source/blender/makesrna/intern/rna_fcurve.c124
-rw-r--r--source/blender/makesrna/intern/rna_fluidsim.c35
-rw-r--r--source/blender/makesrna/intern/rna_gpencil.c20
-rw-r--r--source/blender/makesrna/intern/rna_group.c2
-rw-r--r--source/blender/makesrna/intern/rna_image.c47
-rw-r--r--source/blender/makesrna/intern/rna_image_api.c6
-rw-r--r--source/blender/makesrna/intern/rna_internal.h13
-rw-r--r--source/blender/makesrna/intern/rna_internal_types.h2
-rw-r--r--source/blender/makesrna/intern/rna_key.c8
-rw-r--r--source/blender/makesrna/intern/rna_lamp.c38
-rw-r--r--source/blender/makesrna/intern/rna_lattice.c52
-rw-r--r--source/blender/makesrna/intern/rna_main.c12
-rw-r--r--source/blender/makesrna/intern/rna_material.c200
-rw-r--r--source/blender/makesrna/intern/rna_material_api.c9
-rw-r--r--source/blender/makesrna/intern/rna_mesh.c184
-rw-r--r--source/blender/makesrna/intern/rna_mesh_api.c2
-rw-r--r--source/blender/makesrna/intern/rna_meta.c15
-rw-r--r--source/blender/makesrna/intern/rna_modifier.c267
-rw-r--r--source/blender/makesrna/intern/rna_nla.c28
-rw-r--r--source/blender/makesrna/intern/rna_nodetree.c143
-rw-r--r--source/blender/makesrna/intern/rna_object.c217
-rw-r--r--source/blender/makesrna/intern/rna_object_force.c144
-rw-r--r--source/blender/makesrna/intern/rna_particle.c238
-rw-r--r--source/blender/makesrna/intern/rna_pose.c75
-rw-r--r--source/blender/makesrna/intern/rna_property.c2
-rw-r--r--source/blender/makesrna/intern/rna_render.c4
-rw-r--r--source/blender/makesrna/intern/rna_rna.c41
-rw-r--r--source/blender/makesrna/intern/rna_scene.c313
-rw-r--r--source/blender/makesrna/intern/rna_scene_api.c23
-rw-r--r--source/blender/makesrna/intern/rna_screen.c10
-rw-r--r--source/blender/makesrna/intern/rna_sculpt_paint.c159
-rw-r--r--source/blender/makesrna/intern/rna_sensor.c35
-rw-r--r--source/blender/makesrna/intern/rna_sequencer.c163
-rw-r--r--source/blender/makesrna/intern/rna_smoke.c84
-rw-r--r--source/blender/makesrna/intern/rna_sound.c2
-rw-r--r--source/blender/makesrna/intern/rna_space.c297
-rw-r--r--source/blender/makesrna/intern/rna_text.c40
-rw-r--r--source/blender/makesrna/intern/rna_texture.c101
-rw-r--r--source/blender/makesrna/intern/rna_timeline.c4
-rw-r--r--source/blender/makesrna/intern/rna_ui.c61
-rw-r--r--source/blender/makesrna/intern/rna_ui_api.c28
-rw-r--r--source/blender/makesrna/intern/rna_userdef.c233
-rw-r--r--source/blender/makesrna/intern/rna_vfont.c2
-rw-r--r--source/blender/makesrna/intern/rna_wm.c44
-rw-r--r--source/blender/makesrna/intern/rna_wm_api.c4
-rw-r--r--source/blender/makesrna/intern/rna_world.c57
-rw-r--r--source/blender/makesrna/rna_cleanup/rna_booleans.txt1371
-rwxr-xr-xsource/blender/makesrna/rna_cleanup/rna_cleaner.py91
-rw-r--r--source/blender/makesrna/rna_cleanup/rna_properties.txt7802
-rw-r--r--source/blender/modifiers/CMakeLists.txt4
-rw-r--r--source/blender/modifiers/MOD_modifiertypes.h2
-rw-r--r--source/blender/modifiers/Makefile2
-rw-r--r--source/blender/modifiers/intern/MOD_armature.c3
-rw-r--r--source/blender/modifiers/intern/MOD_array.c7
-rw-r--r--source/blender/modifiers/intern/MOD_bevel.c1
-rw-r--r--source/blender/modifiers/intern/MOD_boolean.c1
-rw-r--r--source/blender/modifiers/intern/MOD_boolean_util.c2
-rw-r--r--source/blender/modifiers/intern/MOD_build.c2
-rw-r--r--source/blender/modifiers/intern/MOD_cast.c1
-rw-r--r--source/blender/modifiers/intern/MOD_cloth.c6
-rw-r--r--source/blender/modifiers/intern/MOD_collision.c4
-rw-r--r--source/blender/modifiers/intern/MOD_curve.c3
-rw-r--r--source/blender/modifiers/intern/MOD_displace.c1
-rw-r--r--source/blender/modifiers/intern/MOD_fluidsim.c1
-rw-r--r--source/blender/modifiers/intern/MOD_hook.c1
-rw-r--r--source/blender/modifiers/intern/MOD_lattice.c4
-rw-r--r--source/blender/modifiers/intern/MOD_mask.c7
-rw-r--r--source/blender/modifiers/intern/MOD_meshdeform.c5
-rw-r--r--source/blender/modifiers/intern/MOD_mirror.c2
-rw-r--r--source/blender/modifiers/intern/MOD_multires.c11
-rw-r--r--source/blender/modifiers/intern/MOD_none.c2
-rw-r--r--source/blender/modifiers/intern/MOD_particleinstance.c2
-rw-r--r--source/blender/modifiers/intern/MOD_screw.c239
-rw-r--r--source/blender/modifiers/intern/MOD_shrinkwrap.c4
-rw-r--r--source/blender/modifiers/intern/MOD_simpledeform.c1
-rw-r--r--source/blender/modifiers/intern/MOD_smoke.c2
-rw-r--r--source/blender/modifiers/intern/MOD_util.c4
-rw-r--r--source/blender/modifiers/intern/MOD_util.h2
-rw-r--r--source/blender/modifiers/intern/MOD_uvproject.c1
-rw-r--r--source/blender/modifiers/intern/MOD_wave.c1
-rw-r--r--source/blender/modifiers/intern/Makefile2
-rw-r--r--source/blender/nodes/Makefile2
-rw-r--r--source/blender/nodes/intern/CMP_nodes/CMP_chromaMatte.c86
-rw-r--r--source/blender/nodes/intern/CMP_nodes/CMP_colorSpill.c174
-rw-r--r--source/blender/nodes/intern/CMP_nodes/CMP_colorbalance.c38
-rw-r--r--source/blender/nodes/intern/CMP_nodes/CMP_huecorrect.c2
-rw-r--r--source/blender/nodes/intern/CMP_nodes/CMP_sepcombHSVA.c2
-rw-r--r--source/blender/nodes/intern/CMP_nodes/CMP_value.c2
-rw-r--r--source/blender/nodes/intern/CMP_nodes/Makefile2
-rw-r--r--source/blender/nodes/intern/CMP_util.c14
-rw-r--r--source/blender/nodes/intern/Makefile2
-rw-r--r--source/blender/nodes/intern/SHD_nodes/Makefile2
-rw-r--r--source/blender/nodes/intern/SHD_nodes/SHD_value.c2
-rw-r--r--source/blender/nodes/intern/TEX_nodes/Makefile2
-rw-r--r--source/blender/python/CMakeLists.txt1
-rw-r--r--source/blender/python/Makefile4
-rw-r--r--source/blender/python/SConscript5
-rw-r--r--source/blender/python/doc/epy/Geometry.py2
-rw-r--r--source/blender/python/doc/examples/mathutils.py4
-rw-r--r--source/blender/python/doc/sphinx_doc_gen.py40
-rw-r--r--source/blender/python/generic/Makefile2
-rw-r--r--source/blender/python/generic/bgl.c8
-rw-r--r--source/blender/python/generic/blf_api.c8
-rw-r--r--source/blender/python/generic/bpy_internal_import.c27
-rw-r--r--source/blender/python/generic/bpy_internal_import.h2
-rw-r--r--source/blender/python/generic/geometry.c4
-rw-r--r--source/blender/python/generic/mathutils.c514
-rw-r--r--source/blender/python/generic/mathutils.h16
-rw-r--r--source/blender/python/generic/mathutils_color.c16
-rw-r--r--source/blender/python/generic/mathutils_euler.c10
-rw-r--r--source/blender/python/generic/mathutils_matrix.c449
-rw-r--r--source/blender/python/generic/mathutils_quat.c134
-rw-r--r--source/blender/python/generic/mathutils_vector.c35
-rw-r--r--source/blender/python/intern/Makefile3
-rw-r--r--source/blender/python/intern/bpy.c39
-rw-r--r--source/blender/python/intern/bpy_app.c2
-rw-r--r--source/blender/python/intern/bpy_interface.c74
-rw-r--r--source/blender/python/intern/bpy_operator.c4
-rw-r--r--source/blender/python/intern/bpy_operator_wrap.c23
-rw-r--r--source/blender/python/intern/bpy_props.c2
-rw-r--r--source/blender/python/intern/bpy_rna.c488
-rw-r--r--source/blender/python/intern/bpy_rna.h6
-rw-r--r--source/blender/python/intern/bpy_rna_callback.c29
-rw-r--r--source/blender/python/intern/bpy_util.c26
-rw-r--r--source/blender/python/intern/bpy_util.h2
-rw-r--r--source/blender/quicktime/CMakeLists.txt8
-rw-r--r--source/blender/quicktime/Makefile2
-rw-r--r--source/blender/quicktime/apple/Makefile4
-rw-r--r--source/blender/readblenfile/CMakeLists.txt1
-rw-r--r--source/blender/readblenfile/Makefile2
-rw-r--r--source/blender/readblenfile/intern/Makefile2
-rw-r--r--source/blender/readblenfile/stub/Makefile2
-rw-r--r--source/blender/readblenfile/test/Makefile2
-rw-r--r--source/blender/render/CMakeLists.txt9
-rw-r--r--source/blender/render/Makefile2
-rw-r--r--source/blender/render/SConscript33
-rw-r--r--source/blender/render/extern/include/RE_pipeline.h13
-rw-r--r--source/blender/render/intern/Makefile2
-rw-r--r--source/blender/render/intern/include/render_types.h22
-rw-r--r--source/blender/render/intern/include/renderdatabase.h5
-rw-r--r--source/blender/render/intern/include/texture.h2
-rw-r--r--source/blender/render/intern/include/volume_precache.h6
-rw-r--r--source/blender/render/intern/raytrace/Makefile4
-rw-r--r--source/blender/render/intern/raytrace/bvh.h1
-rw-r--r--source/blender/render/intern/raytrace/rayobject_qbvh.cpp1
-rw-r--r--source/blender/render/intern/raytrace/rayobject_svbvh.cpp2
-rw-r--r--source/blender/render/intern/raytrace/reorganize.h4
-rw-r--r--source/blender/render/intern/source/convertblender.c84
-rw-r--r--source/blender/render/intern/source/envmap.c3
-rw-r--r--source/blender/render/intern/source/gammaCorrectionTables.c2
-rw-r--r--source/blender/render/intern/source/occlusion.c3
-rw-r--r--source/blender/render/intern/source/pipeline.c45
-rw-r--r--source/blender/render/intern/source/pointdensity.c7
-rw-r--r--source/blender/render/intern/source/rayshade.c18
-rw-r--r--source/blender/render/intern/source/renderdatabase.c28
-rw-r--r--source/blender/render/intern/source/shadeinput.c40
-rw-r--r--source/blender/render/intern/source/shadeoutput.c2
-rw-r--r--source/blender/render/intern/source/sss.c3
-rw-r--r--source/blender/render/intern/source/texture.c19
-rw-r--r--source/blender/render/intern/source/volume_precache.c94
-rw-r--r--source/blender/render/intern/source/volumetric.c43
-rw-r--r--source/blender/render/intern/source/voxeldata.c3
-rw-r--r--source/blender/verify/Makefile2
-rw-r--r--source/blender/verify/intern/Makefile2
-rw-r--r--source/blender/windowmanager/Makefile2
-rw-r--r--source/blender/windowmanager/WM_api.h5
-rw-r--r--source/blender/windowmanager/intern/Makefile2
-rw-r--r--source/blender/windowmanager/intern/wm.c9
-rw-r--r--source/blender/windowmanager/intern/wm_dragdrop.c2
-rw-r--r--source/blender/windowmanager/intern/wm_draw.c35
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c22
-rw-r--r--source/blender/windowmanager/intern/wm_files.c85
-rw-r--r--source/blender/windowmanager/intern/wm_init_exit.c119
-rw-r--r--source/blender/windowmanager/intern/wm_jobs.c13
-rw-r--r--source/blender/windowmanager/intern/wm_operators.c105
-rw-r--r--source/blender/windowmanager/intern/wm_window.c4
-rw-r--r--source/blender/windowmanager/wm_window.h2
-rw-r--r--source/blenderplayer/CMakeLists.txt2
-rw-r--r--source/blenderplayer/bad_level_call_stubs/Makefile2
-rw-r--r--source/blenderplayer/bad_level_call_stubs/stubs.c12
-rw-r--r--source/creator/CMakeLists.txt124
-rw-r--r--source/creator/Makefile10
-rw-r--r--source/creator/SConscript3
-rw-r--r--source/creator/creator.c56
-rw-r--r--source/darwin/Makefile8
-rw-r--r--source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp13
-rw-r--r--source/gameengine/BlenderRoutines/CMakeLists.txt1
-rw-r--r--source/gameengine/BlenderRoutines/Makefile2
-rw-r--r--source/gameengine/Converter/BL_ArmatureChannel.cpp24
-rw-r--r--source/gameengine/Converter/BL_ArmatureConstraint.cpp4
-rw-r--r--source/gameengine/Converter/BL_ArmatureObject.cpp6
-rw-r--r--source/gameengine/Converter/CMakeLists.txt1
-rw-r--r--source/gameengine/Converter/KX_BlenderSceneConverter.cpp3
-rw-r--r--source/gameengine/Converter/KX_ConvertControllers.cpp8
-rw-r--r--source/gameengine/Converter/Makefile2
-rw-r--r--source/gameengine/Expressions/CMakeLists.txt1
-rw-r--r--source/gameengine/Expressions/Makefile2
-rw-r--r--source/gameengine/Expressions/PyObjectPlus.cpp4
-rw-r--r--source/gameengine/Expressions/PyObjectPlus.h3
-rw-r--r--source/gameengine/GameLogic/CMakeLists.txt1
-rw-r--r--source/gameengine/GameLogic/Joystick/Makefile2
-rw-r--r--source/gameengine/GameLogic/Makefile2
-rw-r--r--source/gameengine/GameLogic/SCA_ISensor.cpp17
-rw-r--r--source/gameengine/GameLogic/SCA_ISensor.h15
-rw-r--r--source/gameengine/GameLogic/SCA_JoystickSensor.cpp1
-rw-r--r--source/gameengine/GameLogic/SCA_PythonController.cpp70
-rw-r--r--source/gameengine/GamePlayer/Makefile2
-rw-r--r--source/gameengine/GamePlayer/common/CMakeLists.txt1
-rw-r--r--source/gameengine/GamePlayer/common/Makefile2
-rw-r--r--source/gameengine/GamePlayer/common/unix/Makefile2
-rw-r--r--source/gameengine/GamePlayer/common/windows/Makefile2
-rw-r--r--source/gameengine/GamePlayer/ghost/CMakeLists.txt1
-rw-r--r--source/gameengine/GamePlayer/ghost/GPG_ghost.cpp4
-rw-r--r--source/gameengine/GamePlayer/ghost/Makefile2
-rw-r--r--source/gameengine/Ketsji/CMakeLists.txt1
-rw-r--r--source/gameengine/Ketsji/KXNetwork/CMakeLists.txt1
-rw-r--r--source/gameengine/Ketsji/KXNetwork/Makefile2
-rw-r--r--source/gameengine/Ketsji/KX_BlenderMaterial.cpp39
-rw-r--r--source/gameengine/Ketsji/KX_BlenderMaterial.h8
-rw-r--r--source/gameengine/Ketsji/KX_Camera.cpp14
-rw-r--r--source/gameengine/Ketsji/KX_Camera.h2
-rw-r--r--source/gameengine/Ketsji/KX_ConstraintWrapper.cpp8
-rw-r--r--source/gameengine/Ketsji/KX_ConstraintWrapper.h2
-rw-r--r--source/gameengine/Ketsji/KX_Dome.cpp2
-rw-r--r--source/gameengine/Ketsji/KX_GameObject.cpp2
-rw-r--r--source/gameengine/Ketsji/KX_KetsjiEngine.cpp43
-rw-r--r--source/gameengine/Ketsji/KX_KetsjiEngine.h1
-rw-r--r--source/gameengine/Ketsji/KX_Light.cpp4
-rw-r--r--source/gameengine/Ketsji/KX_PolyProxy.cpp161
-rw-r--r--source/gameengine/Ketsji/KX_PolyProxy.h10
-rw-r--r--source/gameengine/Ketsji/KX_PolygonMaterial.cpp2
-rw-r--r--source/gameengine/Ketsji/KX_PythonInit.cpp78
-rw-r--r--source/gameengine/Ketsji/KX_PythonSeq.cpp2
-rw-r--r--source/gameengine/Ketsji/KX_Scene.cpp3
-rw-r--r--source/gameengine/Ketsji/KX_SoundActuator.cpp223
-rw-r--r--source/gameengine/Ketsji/KX_SoundActuator.h4
-rw-r--r--source/gameengine/Ketsji/KX_VertexProxy.cpp454
-rw-r--r--source/gameengine/Ketsji/KX_VertexProxy.h31
-rw-r--r--source/gameengine/Ketsji/Makefile6
-rw-r--r--source/gameengine/Makefile2
-rw-r--r--source/gameengine/Network/CMakeLists.txt1
-rw-r--r--source/gameengine/Network/LoopBackNetwork/CMakeLists.txt1
-rw-r--r--source/gameengine/Network/LoopBackNetwork/Makefile2
-rw-r--r--source/gameengine/Network/Makefile2
-rw-r--r--source/gameengine/Network/NG_NetworkScene.cpp2
-rw-r--r--source/gameengine/Network/TerraplayNetwork/Makefile2
-rw-r--r--source/gameengine/Physics/Bullet/CMakeLists.txt1
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsController.cpp2
-rw-r--r--source/gameengine/Physics/Bullet/Makefile2
-rw-r--r--source/gameengine/Physics/Dummy/CMakeLists.txt1
-rw-r--r--source/gameengine/Physics/Dummy/Makefile2
-rw-r--r--source/gameengine/Physics/Makefile2
-rw-r--r--source/gameengine/Physics/common/CMakeLists.txt1
-rw-r--r--source/gameengine/Physics/common/Makefile2
-rw-r--r--source/gameengine/PyDoc/SConscript34
-rw-r--r--source/gameengine/PyDoc/bge.logic.rst62
-rw-r--r--source/gameengine/PyDoc/bge.render.rst4
-rw-r--r--source/gameengine/PyDoc/bge.types.rst4
-rw-r--r--source/gameengine/Rasterizer/CMakeLists.txt1
-rw-r--r--source/gameengine/Rasterizer/Makefile2
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/CMakeLists.txt1
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/Makefile2
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp4
-rw-r--r--source/gameengine/SceneGraph/CMakeLists.txt1
-rw-r--r--source/gameengine/SceneGraph/Makefile2
-rw-r--r--source/gameengine/VideoTexture/CMakeLists.txt1
-rw-r--r--source/gameengine/VideoTexture/Makefile2
-rw-r--r--source/icons/Makefile2
-rw-r--r--source/kernel/CMakeLists.txt1
-rw-r--r--source/kernel/Makefile2
-rw-r--r--source/kernel/gen_messaging/Makefile2
-rw-r--r--source/kernel/gen_messaging/intern/Makefile2
-rw-r--r--source/kernel/gen_system/Makefile2
1009 files changed, 50369 insertions, 38092 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index bec1353a8cf..cb131c6e5e1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -69,7 +69,7 @@ OPTION(WITH_INTERNATIONAL "Enable I18N (International fonts and text)" ON)
OPTION(WITH_LCMS "Enable color correction with lcms" OFF)
OPTION(WITH_PYTHON "Enable Embedded Python API" ON)
OPTION(WITH_BUILDINFO "Include extra build details" ON)
-OPTION(WITH_ELBEEM "Enable Elbeem (Fluid Simulation)" ON)
+OPTION(WITH_FLUID "Enable Elbeem (Fluid Simulation)" ON)
OPTION(WITH_FFTW3 "Enable FFTW3 support (Used for smoke and audio effects)" OFF)
OPTION(WITH_BULLET "Enable Bullet (Physics Engine)" ON)
OPTION(WITH_GAMEENGINE "Enable Game Engine" ON)
@@ -82,10 +82,12 @@ ELSE()
ENDIF()
# Image format support
-OPTION(WITH_OPENEXR "Enable OpenEXR Support (http://www.openexr.com)" ON)
-OPTION(WITH_OPENJPEG "Enable OpenJpeg Support (http://www.openjpeg.org/)" OFF)
-OPTION(WITH_TIFF "Enable LibTIFF Support" ON)
-OPTION(WITH_DDS "Enable DDS Support" ON)
+OPTION(WITH_IMAGE_OPENEXR "Enable OpenEXR Support (http://www.openexr.com)" ON)
+OPTION(WITH_IMAGE_OPENJPEG "Enable OpenJpeg Support (http://www.openjpeg.org/)" OFF)
+OPTION(WITH_IMAGE_TIFF "Enable LibTIFF Support" ON)
+OPTION(WITH_IMAGE_DDS "Enable DDS Image Support" ON)
+OPTION(WITH_IMAGE_CINEON "Enable CINEON and DPX Image Support" ON)
+OPTION(WITH_IMAGE_HDR "Enable HDR Image Support" ON)
# Audio format support
OPTION(WITH_FFMPEG "Enable FFMPeg Support (http://ffmpeg.mplayerhq.hu/)" OFF)
@@ -115,6 +117,7 @@ OPTION(WITH_LZMA "Enable best LZMA compression, (used for pointcache)"
OPTION(WITH_RAYOPTIMIZATION "Enable use of SIMD (SSE) optimizations for the raytracer" ON)
OPTION(WITH_CXX_GUARDEDALLOC "Enable GuardedAlloc for C++ memory allocation tracking" OFF)
OPTION(WITH_INSTALL "Install accompanying scripts and language files needed to run blender" ON)
+OPTION(WITH_PYTHON_INSTALL "Copy system python into the blender install folder" ON)
IF(APPLE)
OPTION(WITH_COCOA "Use Cocoa framework instead of deprecated Carbon" ON)
@@ -130,6 +133,10 @@ IF(NOT WITH_GAMEENGINE AND WITH_PLAYER)
MESSAGE("WARNING: WITH_PLAYER needs WITH_GAMEENGINE")
ENDIF(NOT WITH_GAMEENGINE AND WITH_PLAYER)
+IF(NOT WITH_INSTALL AND WITH_PYTHON_INSTALL)
+ MESSAGE("WARNING: WITH_PYTHON_INSTALL needs WITH_INSTALL")
+ENDIF(NOT WITH_INSTALL AND WITH_PYTHON_INSTALL)
+
TEST_SSE_SUPPORT()
# disabled for now, not supported
@@ -215,7 +222,7 @@ IF(UNIX AND NOT APPLE)
ENDIF(NOT SDL_FOUND)
ENDIF(WITH_SDL)
- IF(WITH_OPENEXR)
+ IF(WITH_IMAGE_OPENEXR)
SET(OPENEXR /usr CACHE FILEPATH "OPENEXR Directory")
FIND_PATH(OPENEXR_INC
ImfXdr.h
@@ -230,16 +237,16 @@ IF(UNIX AND NOT APPLE)
SET(OPENEXR_LIB Half IlmImf Iex Imath)
IF(NOT OPENEXR_INC)
- SET(WITH_OPENEXR OFF)
+ SET(WITH_IMAGE_OPENEXR OFF)
ENDIF(NOT OPENEXR_INC)
- ENDIF(WITH_OPENEXR)
+ ENDIF(WITH_IMAGE_OPENEXR)
- IF(WITH_TIFF)
+ IF(WITH_IMAGE_TIFF)
FIND_PACKAGE(TIFF)
IF(NOT TIFF_FOUND)
- SET(WITH_TIFF OFF)
+ SET(WITH_IMAGE_TIFF OFF)
ENDIF(NOT TIFF_FOUND)
- ENDIF(WITH_TIFF)
+ ENDIF(WITH_IMAGE_TIFF)
FIND_PACKAGE(JPEG REQUIRED)
@@ -309,12 +316,6 @@ IF(UNIX AND NOT APPLE)
SET(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing -Wno-char-subscripts")
- IF(WITH_RAYOPTIMIZATION AND SUPPORT_SSE_BUILD)
- SET(PLATFORM_CFLAGS " -msse -msse2 ${PLATFORM_CFLAGS}")
- ADD_DEFINITIONS(-D__SSE__)
- ADD_DEFINITIONS(-D__MMX__)
- ENDIF(WITH_RAYOPTIMIZATION AND SUPPORT_SSE_BUILD)
-
SET(PLATFORM_LINKFLAGS "-pthread")
# Better warnings
@@ -492,7 +493,7 @@ IF(WIN32)
SET(FFMPEG_LIBPATH ${FFMPEG}/lib)
ENDIF(WITH_FFMPEG)
- IF(WITH_OPENEXR)
+ IF(WITH_IMAGE_OPENEXR)
SET(OPENEXR ${LIBDIR}/openexr)
SET(OPENEXR_INC ${OPENEXR}/include ${OPENEXR}/include/IlmImf ${OPENEXR}/include/Iex ${OPENEXR}/include/Imath)
SET(OPENEXR_LIB Iex Half IlmImf Imath IlmThread)
@@ -504,14 +505,14 @@ IF(WIN32)
IF (MSVC90)
SET(OPENEXR_LIBPATH ${OPENEXR}/lib_vs2008)
ENDIF(MSVC90)
- ENDIF(WITH_OPENEXR)
+ ENDIF(WITH_IMAGE_OPENEXR)
- IF(WITH_TIFF)
+ IF(WITH_IMAGE_TIFF)
SET(TIFF ${LIBDIR}/tiff)
SET(TIFF_LIBRARY libtiff)
SET(TIFF_INCLUDE_DIR ${TIFF}/include)
SET(TIFF_LIBPATH ${TIFF}/lib)
- ENDIF(WITH_TIFF)
+ ENDIF(WITH_IMAGE_TIFF)
IF(WITH_JACK)
SET(JACK ${LIBDIR}/jack)
@@ -602,19 +603,19 @@ IF(WIN32)
SET(FFMPEG_LIBPATH ${FFMPEG}/lib)
ENDIF(WITH_FFMPEG)
- IF(WITH_OPENEXR)
+ IF(WITH_IMAGE_OPENEXR)
SET(OPENEXR ${LIBDIR}/gcc/openexr)
SET(OPENEXR_INC ${OPENEXR}/include ${OPENEXR}/include/OpenEXR)
SET(OPENEXR_LIB Half IlmImf Imath IlmThread)
SET(OPENEXR_LIBPATH ${OPENEXR}/lib)
- ENDIF(WITH_OPENEXR)
+ ENDIF(WITH_IMAGE_OPENEXR)
- IF(WITH_TIFF)
+ IF(WITH_IMAGE_TIFF)
SET(TIFF ${LIBDIR}/gcc/tiff)
SET(TIFF_LIBRARY tiff)
SET(TIFF_INCLUDE_DIR ${TIFF}/include)
SET(TIFF_LIBPATH ${TIFF}/lib)
- ENDIF(WITH_TIFF)
+ ENDIF(WITH_IMAGE_TIFF)
IF(WITH_JACK)
SET(JACK ${LIBDIR}/jack)
@@ -626,12 +627,6 @@ IF(WIN32)
SET(WITH_JACK OFF)
ENDIF(WITH_JACK)
- IF(WITH_RAYOPTIMIZATION AND SUPPORT_SSE_BUILD)
- SET(PLATFORM_CFLAGS " -msse -msse2 ${PLATFORM_CFLAGS}")
- ADD_DEFINITIONS(-D__SSE__)
- ADD_DEFINITIONS(-D__MMX__)
- ENDIF(WITH_RAYOPTIMIZATION AND SUPPORT_SSE_BUILD)
-
ENDIF(MSVC)
ENDIF(WIN32)
@@ -722,12 +717,12 @@ IF(APPLE)
SET(FREETYPE_LIBPATH ${FREETYPE}/lib)
SET(FREETYPE_LIBRARY freetype)
- IF(WITH_OPENEXR)
+ IF(WITH_IMAGE_OPENEXR)
SET(OPENEXR ${LIBDIR}/openexr)
SET(OPENEXR_INC ${OPENEXR}/include/OpenEXR ${OPENEXR}/include)
SET(OPENEXR_LIB Iex Half IlmImf Imath IlmThread)
SET(OPENEXR_LIBPATH ${OPENEXR}/lib)
- ENDIF(WITH_OPENEXR)
+ ENDIF(WITH_IMAGE_OPENEXR)
IF(WITH_LCMS)
SET(LCMS ${LIBDIR}/lcms)
@@ -805,18 +800,12 @@ IF(APPLE)
SET(JPEG_INC "${JPEG}/include")
SET(JPEG_LIBPATH ${JPEG}/lib)
- IF(WITH_TIFF)
+ IF(WITH_IMAGE_TIFF)
SET(TIFF ${LIBDIR}/tiff)
SET(TIFF_INCLUDE_DIR ${TIFF}/include)
SET(TIFF_LIBRARY tiff)
SET(TIFF_LIBPATH ${TIFF}/lib)
- ENDIF(WITH_TIFF)
-
- IF(WITH_RAYOPTIMIZATION AND SUPPORT_SSE_BUILD)
- SET(PLATFORM_CFLAGS " -msse -msse2 ${PLATFORM_CFLAGS}")
- ADD_DEFINITIONS(-D__SSE__)
- ADD_DEFINITIONS(-D__MMX__)
- ENDIF(WITH_RAYOPTIMIZATION AND SUPPORT_SSE_BUILD)
+ ENDIF(WITH_IMAGE_TIFF)
SET(EXETYPE MACOSX_BUNDLE)
@@ -861,14 +850,31 @@ IF(WITH_BUILDINFO)
ENDIF(BUILD_REV_RETURN)
ENDIF(WIN32)
ENDIF(WITH_BUILDINFO)
-
#-----------------------------------------------------------------------------
# Common.
-IF(WITH_OPENJPEG)
+
+IF(WITH_RAYOPTIMIZATION)
+ IF(CMAKE_COMPILER_IS_GNUCC)
+ IF(SUPPORT_SSE_BUILD)
+ SET(PLATFORM_CFLAGS " -msse ${PLATFORM_CFLAGS}")
+ ADD_DEFINITIONS(-D__SSE__)
+ ADD_DEFINITIONS(-D__MMX__)
+ ENDIF(SUPPORT_SSE_BUILD)
+ IF(SUPPORT_SSE2_BUILD)
+ SET(PLATFORM_CFLAGS " -msse2 ${PLATFORM_CFLAGS}")
+ ADD_DEFINITIONS(-D__SSE2__)
+ IF(NOT SUPPORT_SSE_BUILD) # dont double up
+ ADD_DEFINITIONS(-D__MMX__)
+ ENDIF(NOT SUPPORT_SSE_BUILD)
+ ENDIF(SUPPORT_SSE2_BUILD)
+ ENDIF(CMAKE_COMPILER_IS_GNUCC)
+ENDIF(WITH_RAYOPTIMIZATION)
+
+IF(WITH_IMAGE_OPENJPEG)
set(OPENJPEG ${CMAKE_SOURCE_DIR}/extern/libopenjpeg)
set(OPENJPEG_INC ${OPENJPEG})
set(OPENJPEG_LIb extern_libopenjpeg)
-ENDIF(WITH_OPENJPEG)
+ENDIF(WITH_IMAGE_OPENJPEG)
#-----------------------------------------------------------------------------
# Blender WebPlugin
diff --git a/Makefile b/Makefile
index b16e046d5e8..d92edf2c02c 100644
--- a/Makefile
+++ b/Makefile
@@ -45,7 +45,7 @@ MAKEFLAGS=-I$(NANBLENDERHOME)/build_files/make --no-print-directory
SOURCEDIR =
ifeq ($(FREE_WINDOWS),true)
- DIRS ?= dlltool extern intern source po
+ DIRS ?= $(NANBLENDERHOME)/build_files/make/dlltool extern intern source po
else
DIRS ?= extern intern source po
endif
diff --git a/SConstruct b/SConstruct
index 3aaafe0f648..28f54252bfb 100644
--- a/SConstruct
+++ b/SConstruct
@@ -46,8 +46,11 @@ import glob
import re
from tempfile import mkdtemp
+# store path to tools
+toolpath=os.path.join(".", "build_files", "scons", "tools")
+
# needed for importing tools
-sys.path.append(os.path.join(".", "build_files", "scons", "tools"))
+sys.path.append(toolpath)
import Blender
import btools
@@ -121,7 +124,7 @@ if toolset:
print "Using " + toolset
if toolset=='mstoolkit':
env = BlenderEnvironment(ENV = os.environ)
- env.Tool('mstoolkit', ['tools'])
+ env.Tool('mstoolkit', [toolpath])
else:
env = BlenderEnvironment(tools=[toolset], ENV = os.environ)
# xxx commented out, as was supressing warnings under mingw..
@@ -170,7 +173,7 @@ else:
if crossbuild and env['PLATFORM'] != 'win32':
print B.bc.HEADER+"Preparing for crossbuild"+B.bc.ENDC
- env.Tool('crossmingw', ['tools'])
+ env.Tool('crossmingw', [toolpath])
# todo: determine proper libs/includes etc.
# Needed for gui programs, console programs should do without it
@@ -207,14 +210,36 @@ SetOption('num_jobs', int(env['BF_NUMJOBS']))
print B.bc.OKGREEN + "Build with parallel jobs%s: %s" % (B.bc.ENDC, GetOption('num_jobs'))
print B.bc.OKGREEN + "Build with debug symbols%s: %s" % (B.bc.ENDC, env['BF_DEBUG'])
-# BLENDERPATH is a unix only option to enable typical style paths this is
-# spesifically a data-dir, which is used a lot but cant replace BF_INSTALLDIR
-# because the blender binary is installed in $BF_INSTALLDIR/bin/blender
+if 'blenderlite' in B.targets:
+ target_env_defs = {}
+ target_env_defs['WITH_BF_GAMEENGINE'] = False
+ target_env_defs['WITH_BF_OPENAL'] = False
+ target_env_defs['WITH_BF_OPENEXR'] = False
+ target_env_defs['WITH_BF_OPENMP'] = False
+ target_env_defs['WITH_BF_ICONV'] = False
+ target_env_defs['WITH_BF_INTERNATIONAL'] = False
+ target_env_defs['WITH_BF_OPENJPEG'] = False
+ target_env_defs['WITH_BF_FFMPEG'] = False
+ target_env_defs['WITH_BF_QUICKTIME'] = False
+ target_env_defs['WITH_BF_REDCODE'] = False
+ target_env_defs['WITH_BF_DDS'] = False
+ target_env_defs['WITH_BF_CINEON'] = False
+ target_env_defs['WITH_BF_HDR'] = False
+ target_env_defs['WITH_BF_ZLIB'] = False
+ target_env_defs['WITH_BF_SDL'] = False
+ target_env_defs['WITH_BF_JPEG'] = False
+ target_env_defs['WITH_BF_PNG'] = False
+ target_env_defs['WITH_BF_BULLET'] = False
+ target_env_defs['WITH_BF_BINRELOC'] = False
+ target_env_defs['BF_BUILDINFO'] = False
+ target_env_defs['BF_NO_ELBEEM'] = True
+ target_env_defs['WITH_BF_PYTHON'] = False
+
+ # Merge blenderlite, let command line to override
+ for k,v in target_env_defs.iteritems():
+ if k not in B.arguments:
+ env[k] = v
-if env['WITH_BF_FHS']:
- BLENDERPATH = os.path.join(env['BF_INSTALLDIR'], 'share', 'blender', env['BF_VERSION'])
-else:
- BLENDERPATH = env['BF_INSTALLDIR']
if env['WITH_BF_OPENMP'] == 1:
if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'):
@@ -268,34 +293,6 @@ if 'blenderplayer' in B.targets:
if 'blendernogame' in B.targets:
env['WITH_BF_GAMEENGINE'] = False
-if 'blenderlite' in B.targets:
- target_env_defs = {}
- target_env_defs['WITH_BF_GAMEENGINE'] = False
- target_env_defs['WITH_BF_OPENAL'] = False
- target_env_defs['WITH_BF_OPENEXR'] = False
- target_env_defs['WITH_BF_OPENMP'] = False
- target_env_defs['WITH_BF_ICONV'] = False
- target_env_defs['WITH_BF_INTERNATIONAL'] = False
- target_env_defs['WITH_BF_OPENJPEG'] = False
- target_env_defs['WITH_BF_FFMPEG'] = False
- target_env_defs['WITH_BF_QUICKTIME'] = False
- target_env_defs['WITH_BF_REDCODE'] = False
- target_env_defs['WITH_BF_DDS'] = False
- target_env_defs['WITH_BF_ZLIB'] = False
- target_env_defs['WITH_BF_SDL'] = False
- target_env_defs['WITH_BF_JPEG'] = False
- target_env_defs['WITH_BF_PNG'] = False
- target_env_defs['WITH_BF_BULLET'] = False
- target_env_defs['WITH_BF_BINRELOC'] = False
- target_env_defs['BF_BUILDINFO'] = False
- target_env_defs['BF_NO_ELBEEM'] = True
- target_env_defs['WITH_BF_PYTHON'] = False
-
- # Merge blenderlite, let command line to override
- for k,v in target_env_defs.iteritems():
- if k not in B.arguments:
- env[k] = v
-
# disable elbeem (fluidsim) compilation?
if env['BF_NO_ELBEEM'] == 1:
env['CPPFLAGS'].append('-DDISABLE_ELBEEM')
@@ -308,7 +305,7 @@ if env['WITH_BF_SDL'] == False and env['OURPLATFORM'] in ('win32-vc', 'win32-min
# lastly we check for root_build_dir ( we should not do before, otherwise we might do wrong builddir
B.root_build_dir = env['BF_BUILDDIR']
-B.doc_build_dir = os.path.join(BLENDERPATH, 'doc')
+B.doc_build_dir = os.path.join(env['BF_INSTALLDIR'], 'doc')
if not B.root_build_dir[-1]==os.sep:
B.root_build_dir += os.sep
if not B.doc_build_dir[-1]==os.sep:
@@ -363,8 +360,9 @@ if not os.path.isdir ( B.root_build_dir):
os.makedirs ( B.root_build_dir + 'extern' )
os.makedirs ( B.root_build_dir + 'lib' )
os.makedirs ( B.root_build_dir + 'bin' )
-if not os.path.isdir(B.doc_build_dir) and env['WITH_BF_DOCS']:
- os.makedirs ( B.doc_build_dir )
+# # Docs not working with epy anymore
+# if not os.path.isdir(B.doc_build_dir) and env['WITH_BF_DOCS']:
+# os.makedirs ( B.doc_build_dir )
Help(opts.GenerateHelpText(env))
@@ -429,14 +427,13 @@ if env['OURPLATFORM']=='darwin':
for dp, dn, df in os.walk(bundle):
if '.svn' in dn:
dn.remove('.svn')
+ if '_svn' in dn:
+ dn.remove('_svn')
dir=env['BF_INSTALLDIR']+dp[len(bundledir):]
source=[dp+os.sep+f for f in df]
blenderinstall.append(env.Install(dir=dir,source=source))
else:
- if env['WITH_BF_FHS']: dir= os.path.join(env['BF_INSTALLDIR'], 'bin')
- else: dir= env['BF_INSTALLDIR']
-
- blenderinstall = env.Install(dir=dir, source=B.program_list)
+ blenderinstall = env.Install(dir=env['BF_INSTALLDIR'], source=B.program_list)
#-- local path = config files in install dir: installdir\VERSION
#- dont do config and scripts for darwin, it is already in the bundle
@@ -450,6 +447,8 @@ if env['OURPLATFORM']!='darwin':
for dp, dn, df in os.walk('bin/.blender'):
if '.svn' in dn:
dn.remove('.svn')
+ if '_svn' in dn:
+ dn.remove('_svn')
for f in df:
if not env['WITH_BF_INTERNATIONAL']:
@@ -463,15 +462,12 @@ if env['OURPLATFORM']!='darwin':
if 'locale' in dp:
datafileslist.append(os.path.join(dp,f))
- if env['WITH_BF_FHS']: dir= os.path.join(*([BLENDERPATH] + ['datafiles'] + dp.split(os.sep)[2:])) # skip bin/.blender
- else: dir= os.path.join(*([BLENDERPATH] + [VERSION] + ['datafiles'] + dp.split(os.sep)[1:])) # skip bin
+ dir= os.path.join(*([env['BF_INSTALLDIR']] + [VERSION] + ['datafiles'] + dp.split(os.sep)[1:])) # skip bin
datafilestargetlist.append(dir + os.sep + f)
else:
dotblendlist.append(os.path.join(dp, f))
- if env['WITH_BF_FHS']: dir= os.path.join(*([BLENDERPATH] + ['config'] + dp.split(os.sep)[2:])) # skip bin/.blender
- else: dir= os.path.join(*([BLENDERPATH] + [VERSION] + ['config'] + dp.split(os.sep)[1:])) # skip bin
-
+ dir= os.path.join(*([env['BF_INSTALLDIR']] + [VERSION] + ['config'] + dp.split(os.sep)[1:])) # skip bin
dottargetlist.append(dir + os.sep + f)
dotblenderinstall = []
@@ -489,9 +485,10 @@ if env['OURPLATFORM']!='darwin':
for dp, dn, df in os.walk(scriptpath):
if '.svn' in dn:
dn.remove('.svn')
+ if '_svn' in dn:
+ dn.remove('_svn')
- if env['WITH_BF_FHS']: dir = BLENDERPATH
- else: dir = os.path.join(env['BF_INSTALLDIR'], VERSION)
+ dir = os.path.join(env['BF_INSTALLDIR'], VERSION)
dir += os.sep + os.path.basename(scriptpath) + dp[len(scriptpath):]
source=[os.path.join(dp, f) for f in df if f[-3:]!='pyc']
@@ -505,9 +502,11 @@ if env['OURPLATFORM']=='linux2':
for tp, tn, tf in os.walk('release/freedesktop/icons'):
if '.svn' in tn:
tn.remove('.svn')
+ if '_svn' in tn:
+ tn.remove('_svn')
for f in tf:
iconlist.append(os.path.join(tp, f))
- icontargetlist.append( os.path.join(*([BLENDERPATH] + tp.split(os.sep)[2:] + [f])) )
+ icontargetlist.append( os.path.join(*([env['BF_INSTALLDIR']] + tp.split(os.sep)[2:] + [f])) )
iconinstall = []
for targetdir,srcfile in zip(icontargetlist, iconlist):
@@ -531,27 +530,29 @@ plugtargetlist = []
for tp, tn, tf in os.walk('release/plugins'):
if '.svn' in tn:
tn.remove('.svn')
+ if '_svn' in tn:
+ tn.remove('_svn')
df = tp[8:] # remove 'release/'
for f in tf:
pluglist.append(os.path.join(tp, f))
- plugtargetlist.append( os.path.join(BLENDERPATH, df, f) )
+ plugtargetlist.append( os.path.join(env['BF_INSTALLDIR'], df, f) )
# header files for plugins
pluglist.append('source/blender/blenpluginapi/documentation.h')
-plugtargetlist.append(os.path.join(BLENDERPATH, 'plugins', 'include', 'documentation.h'))
+plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], 'plugins', 'include', 'documentation.h'))
pluglist.append('source/blender/blenpluginapi/externdef.h')
-plugtargetlist.append(os.path.join(BLENDERPATH, 'plugins', 'include', 'externdef.h'))
+plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], 'plugins', 'include', 'externdef.h'))
pluglist.append('source/blender/blenpluginapi/floatpatch.h')
-plugtargetlist.append(os.path.join(BLENDERPATH, 'plugins', 'include', 'floatpatch.h'))
+plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], 'plugins', 'include', 'floatpatch.h'))
pluglist.append('source/blender/blenpluginapi/iff.h')
-plugtargetlist.append(os.path.join(BLENDERPATH, 'plugins', 'include', 'iff.h'))
+plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], 'plugins', 'include', 'iff.h'))
pluglist.append('source/blender/blenpluginapi/plugin.h')
-plugtargetlist.append(os.path.join(BLENDERPATH, 'plugins', 'include', 'plugin.h'))
+plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], 'plugins', 'include', 'plugin.h'))
pluglist.append('source/blender/blenpluginapi/util.h')
-plugtargetlist.append(os.path.join(BLENDERPATH, 'plugins', 'include', 'util.h'))
+plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], 'plugins', 'include', 'util.h'))
pluglist.append('source/blender/blenpluginapi/plugin.DEF')
-plugtargetlist.append(os.path.join(BLENDERPATH, 'plugins', 'include', 'plugin.def'))
+plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], 'plugins', 'include', 'plugin.def'))
plugininstall = []
for targetdir,srcfile in zip(plugtargetlist, pluglist):
@@ -563,10 +564,12 @@ texttargetlist = []
for tp, tn, tf in os.walk('release/text'):
if '.svn' in tn:
tn.remove('.svn')
+ if '_svn' in tn:
+ tn.remove('_svn')
for f in tf:
textlist.append(tp+os.sep+f)
-textinstall = env.Install(dir=BLENDERPATH, source=textlist)
+textinstall = env.Install(dir=env['BF_INSTALLDIR'], source=textlist)
if env['OURPLATFORM']=='darwin':
allinstall = [blenderinstall, plugininstall, textinstall]
@@ -627,9 +630,6 @@ if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'win64-vc', 'linuxcross'):
'${BF_FFMPEG_LIBPATH}/avdevice-52.dll',
'${BF_FFMPEG_LIBPATH}/avutil-50.dll',
'${BF_FFMPEG_LIBPATH}/swscale-0.dll']
-
- if env['WITH_BF_JACK']:
- dllsources += ['${LCGDIR}/jack/lib/libjack.dll']
windlls = env.Install(dir=env['BF_INSTALLDIR'], source = dllsources)
allinstall += windlls
@@ -662,17 +662,3 @@ Default(B.program_list)
if not env['WITHOUT_BF_INSTALL']:
Default(installtarget)
-
-#------------ EPYDOC
-if env['WITH_BF_DOCS']:
- try:
- import epydoc
- except ImportError:
- epydoc = None
-
- if epydoc:
- SConscript('source/gameengine/PyDoc/SConscript')
- else:
- print "No epydoc install detected, Python API and Gameengine API Docs will not be generated "
-
-
diff --git a/build_files/cmake/example_scripts/cmake_linux_install.sh b/build_files/cmake/example_scripts/cmake_linux_install.sh
new file mode 100755
index 00000000000..7770efcf392
--- /dev/null
+++ b/build_files/cmake/example_scripts/cmake_linux_install.sh
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+# This shell script checks out and compiles blender, tested on ubuntu 10.04
+# assumes you have dependancies installed alredy
+
+# See this page for more info:
+# http://wiki.blender.org/index.php/Dev:2.5/Doc/Building_Blender/Linux/Generic_Distro/CMake
+
+# grab blender
+mkdir ~/blender-svn
+cd ~/blender-svn
+svn co https://svn.blender.org/svnroot/bf-blender/trunk/blender
+
+# create cmake dir
+mkdir ~/blender-svn/build-cmake
+cd ~/blender-svn/build-cmake
+
+# cmake without copying files for fast rebuilds
+# the files from svn will be used in place
+cmake ../blender -DWITH_INSTALL:BOOL=FALSE
+
+# make blender, will take some time
+make
+
+# link the binary to blenders source directory to run quickly
+ln -s ~/blender-svn/build-cmake/bin/blender ~/blender-svn/blender/blender.bin
+
+# useful info
+echo ""
+echo "* Useful Commands *"
+echo " Run Blender: ~/blender-svn/blender/blender.bin"
+echo " Update Blender: svn up ~/blender-svn/blender"
+echo " Reconfigure Blender: cd ~/blender-svn/build-cmake ; cmake ."
+echo " Build Blender: cd ~/blender-svn/build-cmake ; make"
+echo ""
+
+
diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake
index 84e6b788dc0..0957ace301c 100644
--- a/build_files/cmake/macros.cmake
+++ b/build_files/cmake/macros.cmake
@@ -58,12 +58,12 @@ MACRO(SETUP_LIBDIRS)
IF(WITH_FFMPEG)
LINK_DIRECTORIES(${FFMPEG_LIBPATH})
ENDIF(WITH_FFMPEG)
- IF(WITH_OPENEXR)
+ IF(WITH_IMAGE_OPENEXR)
LINK_DIRECTORIES(${OPENEXR_LIBPATH})
- ENDIF(WITH_OPENEXR)
- IF(WITH_TIFF)
+ ENDIF(WITH_IMAGE_OPENEXR)
+ IF(WITH_IMAGE_TIFF)
LINK_DIRECTORIES(${TIFF_LIBPATH})
- ENDIF(WITH_TIFF)
+ ENDIF(WITH_IMAGE_TIFF)
IF(WITH_LCMS)
LINK_DIRECTORIES(${LCMS_LIBPATH})
ENDIF(WITH_LCMS)
@@ -140,10 +140,10 @@ MACRO(SETUP_LIBLINKS
IF(WITH_QUICKTIME)
TARGET_LINK_LIBRARIES(${target} ${QUICKTIME_LIB})
ENDIF(WITH_QUICKTIME)
- IF(WITH_TIFF)
+ IF(WITH_IMAGE_TIFF)
TARGET_LINK_LIBRARIES(${target} ${TIFF_LIBRARY})
- ENDIF(WITH_TIFF)
- IF(WITH_OPENEXR)
+ ENDIF(WITH_IMAGE_TIFF)
+ IF(WITH_IMAGE_OPENEXR)
IF(WIN32)
FOREACH(loop_var ${OPENEXR_LIB})
TARGET_LINK_LIBRARIES(${target} debug ${loop_var}_d)
@@ -152,7 +152,7 @@ MACRO(SETUP_LIBLINKS
ELSE(WIN32)
TARGET_LINK_LIBRARIES(${target} ${OPENEXR_LIB})
ENDIF(WIN32)
- ENDIF(WITH_OPENEXR)
+ ENDIF(WITH_IMAGE_OPENEXR)
IF(WITH_LCMS)
TARGET_LINK_LIBRARIES(${target} ${LCMS_LIBRARY})
ENDIF(WITH_LCMS)
@@ -183,21 +183,41 @@ MACRO(SETUP_LIBLINKS
ENDMACRO(SETUP_LIBLINKS)
MACRO(TEST_SSE_SUPPORT)
- INCLUDE(CheckCXXSourceCompiles)
+ INCLUDE(CheckCSourceRuns)
MESSAGE(STATUS "Detecting SSE support")
IF(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
SET(CMAKE_REQUIRED_FLAGS "-msse -msse2")
ELSEIF(MSVC)
- SET(CMAKE_REQUIRED_FLAGS "/arch:SSE2")
+ SET(CMAKE_REQUIRED_FLAGS "/arch:SSE2") # TODO, SSE 1 ?
ENDIF()
- CHECK_CXX_SOURCE_COMPILES("
+ CHECK_C_SOURCE_RUNS("
#include <xmmintrin.h>
int main() { __m128 v = _mm_setzero_ps(); return 0; }"
SUPPORT_SSE_BUILD)
+
+ CHECK_C_SOURCE_RUNS("
+ #include <emmintrin.h>
+ int main() { __m128d v = _mm_setzero_pd(); return 0; }"
+ SUPPORT_SSE2_BUILD)
+ MESSAGE(STATUS "Detecting SSE support")
+
+ IF(SUPPORT_SSE_BUILD)
+ MESSAGE(STATUS " ...SSE support found.")
+ ELSE(SUPPORT_SSE_BUILD)
+ MESSAGE(STATUS " ...SSE support missing.")
+ ENDIF(SUPPORT_SSE_BUILD)
+
+ IF(SUPPORT_SSE2_BUILD)
+ MESSAGE(STATUS " ...SSE2 support found.")
+ ELSE(SUPPORT_SSE2_BUILD)
+ MESSAGE(STATUS " ...SSE2 support missing.")
+ ENDIF(SUPPORT_SSE2_BUILD)
+
ENDMACRO(TEST_SSE_SUPPORT)
+
MACRO(GET_BLENDER_VERSION)
FILE(READ ${CMAKE_SOURCE_DIR}/source/blender/blenkernel/BKE_blender.h CONTENT)
STRING(REGEX REPLACE "\n" ";" CONTENT "${CONTENT}")
diff --git a/build_files/make/nan_compile.mk b/build_files/make/nan_compile.mk
index 36c315a8e11..4107bb1820d 100644
--- a/build_files/make/nan_compile.mk
+++ b/build_files/make/nan_compile.mk
@@ -89,7 +89,6 @@ ifeq ($(OS),darwin)
CCFLAGS += -pipe -fPIC -funsigned-char
endif
-
CFLAGS += -arch $(MACOSX_ARCHITECTURE) #-isysroot $(MACOSX_SDK) -mmacosx-version-min=$(MACOSX_MIN_VERS)
CCFLAGS += -arch $(MACOSX_ARCHITECTURE) #-isysroot $(MACOSX_SDK) -mmacosx-version-min=$(MACOSX_MIN_VERS)
@@ -177,6 +176,9 @@ ifeq ($(OS),linux)
REL_CFLAGS += -O2
REL_CCFLAGS += -O2
NAN_DEPEND = true
+ ifeq ($(WITH_BF_RAYOPTIMIZATION), true)
+ CCFLAGS += -msse
+ endif
ifeq ($(CPU),alpha)
CFLAGS += -mieee
endif
diff --git a/build_files/make/nan_definitions.mk b/build_files/make/nan_definitions.mk
index d14bdb0a13c..d8da2189e6d 100644
--- a/build_files/make/nan_definitions.mk
+++ b/build_files/make/nan_definitions.mk
@@ -159,6 +159,17 @@ ifndef CONFIG_GUESS
endif
export WITH_TIFF ?= true
+
+ #enable raytracing optimization (currently only for i386 and x86_64)
+ ifeq ($(CPU),powerpc)
+ export WITH_BF_RAYOPTIMIZATION ?= false
+ else
+ export WITH_BF_RAYOPTIMIZATION ?= true
+ endif
+
+ export WITH_LCMS ?= false
+ export WITH_CINEON ?= true
+ export WITH_HDR ?= true
# Compare recreated .mo files with committed ones
export BF_VERIFY_MO_FILES ?= true
@@ -622,6 +633,11 @@ ifndef CONFIG_GUESS
# default tiff libs
export NAN_TIFF_LIBS ?= $(NAN_TIFF)/lib/libtiff.a
+ # default path to lcms, may be overidden in platform sections above or in user-def.mk
+ export BF_LCMS ?= $(LCGDIR)/lcms
+ export BF_LCMS_INC ?= $(BF_LCMS)/include
+ export BF_LCMS_LIBS ?= $(BF_LCMS)/lib/liblcms.a
+
endif # CONFIG_GUESS
# Don't want to build the gameengine?
diff --git a/build_files/make/nan_link.mk b/build_files/make/nan_link.mk
index bbf4053b14c..43fba13f45b 100644
--- a/build_files/make/nan_link.mk
+++ b/build_files/make/nan_link.mk
@@ -195,4 +195,8 @@ ifeq ($(WITH_TIFF),true)
LLIBS += $(NAN_TIFF_LIBS)
endif
+ifeq ($(WITH_LCMS),true)
+ LLIBS += $(BF_LCMS_LIBS)
+endif
+
LLIBS += $(NAN_PYTHON_LIB)
diff --git a/build_files/scons/config/freebsd7-config.py b/build_files/scons/config/freebsd7-config.py
new file mode 100644
index 00000000000..7d66a69a2dc
--- /dev/null
+++ b/build_files/scons/config/freebsd7-config.py
@@ -0,0 +1,213 @@
+CC = 'gcc44'
+CXX = 'g++44'
+
+LCGDIR = '../lib/freebsd7'
+LIBDIR = "${LCGDIR}"
+
+BF_PYTHON = '/usr/local'
+BF_PYTHON_LIBPATH = '${BF_PYTHON}/lib'
+BF_PYTHON_VERSION = '3.1'
+WITH_BF_STATICPYTHON = False
+BF_PYTHON_INC = '${BF_PYTHON}/include/python${BF_PYTHON_VERSION}'
+BF_PYTHON_BINARY = '${BF_PYTHON}/bin/python${BF_PYTHON_VERSION}'
+BF_PYTHON_LIB = 'python${BF_PYTHON_VERSION}'
+BF_PYTHON_LIB_STATIC = '${BF_PYTHON}/lib/libpython${BF_PYTHON_VERSION}.a'
+
+WITH_BF_OPENAL = True
+WITH_BF_STATICOPENAL = False
+BF_OPENAL = '/usr/local'
+BF_OPENAL_INC = '${BF_OPENAL}/include'
+BF_OPENAL_LIB = 'openal'
+BF_OPENAL_LIB_STATIC = '${BF_OPENAL}/lib/libopenal.a'
+
+BF_CXX = '/usr/local'
+WITH_BF_STATICCXX = False
+BF_CXX_LIB_STATIC = '${BF_CXX}/lib/libstdc++.a'
+
+BF_LIBSAMPLERATE = '/usr/local'
+BF_LIBSAMPLERATE_INC = '${BF_LIBSAMPLERATE}/include'
+BF_LIBSAMPLERATE_LIB = 'samplerate'
+BF_LIBSAMPLERATE_LIBPATH = '${BF_LIBSAMPLERATE}/lib'
+
+WITH_BF_JACK = True
+BF_JACK = '/usr/local'
+BF_JACK_INC = '${BF_JACK}/include/jack'
+BF_JACK_LIB = 'jack'
+BF_JACK_LIBPATH = '${BF_JACK}/lib'
+
+WITH_BF_SNDFILE = True
+BF_SNDFILE = '/usr/local'
+BF_SNDFILE_INC = '${BF_SNDFILE}/include/sndfile'
+BF_SNDFILE_LIB = 'sndfile'
+BF_SNDFILE_LIBPATH = '${BF_SNDFILE}/lib'
+
+WITH_BF_SDL = True
+BF_SDL = '/usr/local' #$(shell sdl-config --prefix)
+BF_SDL_INC = '${BF_SDL}/include/SDL' #$(shell $(BF_SDL)/bin/sdl-config --cflags)
+BF_SDL_LIB = 'SDL' #BF_SDL #$(shell $(BF_SDL)/bin/sdl-config --libs) -lSDL_mixer
+
+WITH_BF_OPENEXR = True
+WITH_BF_STATICOPENEXR = False
+BF_OPENEXR = '/usr/local'
+# when compiling with your own openexr lib you might need to set...
+# BF_OPENEXR_INC = '${BF_OPENEXR}/include/OpenEXR ${BF_OPENEXR}/include'
+
+BF_OPENEXR_INC = '${BF_OPENEXR}/include/OpenEXR'
+BF_OPENEXR_LIB = 'Half IlmImf Iex Imath '
+BF_OPENEXR_LIB_STATIC = '${BF_OPENEXR}/lib/libHalf.a ${BF_OPENEXR}/lib/libIlmImf.a ${BF_OPENEXR}/lib/libIex.a ${BF_OPENEXR}/lib/libImath.a ${BF_OPENEXR}/lib/libIlmThread.a'
+# BF_OPENEXR_LIBPATH = '${BF_OPENEXR}/lib'
+
+
+WITH_BF_DDS = True
+
+WITH_BF_JPEG = True
+BF_JPEG = '/usr/local'
+BF_JPEG_INC = '${BF_JPEG}/include'
+BF_JPEG_LIB = 'jpeg'
+
+WITH_BF_PNG = True
+BF_PNG = '/usr/local'
+BF_PNG_INC = '${BF_PNG}/include'
+BF_PNG_LIB = 'png'
+
+WITH_BF_TIFF = True
+BF_TIFF = '/usr/local'
+BF_TIFF_INC = '${BF_TIFF}/include'
+BF_TIFF_LIB = 'tiff'
+
+WITH_BF_ZLIB = True
+BF_ZLIB = '/usr'
+BF_ZLIB_INC = '${BF_ZLIB}/include'
+BF_ZLIB_LIB = 'z'
+
+WITH_BF_INTERNATIONAL = True
+
+BF_GETTEXT = '/usr/local'
+BF_GETTEXT_INC = '${BF_GETTEXT}/include'
+BF_GETTEXT_LIB = 'gettextlib'
+BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib'
+
+WITH_BF_GAMEENGINE = True
+WITH_BF_PLAYER = True
+
+WITH_BF_BULLET = True
+BF_BULLET = '#extern/bullet2/src'
+BF_BULLET_INC = '${BF_BULLET}'
+BF_BULLET_LIB = 'extern_bullet'
+
+# enable freetype2 support for text objects
+BF_FREETYPE = '/usr/local'
+BF_FREETYPE_INC = '${BF_FREETYPE}/include ${BF_FREETYPE}/include/freetype2'
+BF_FREETYPE_LIB = 'freetype'
+
+WITH_BF_QUICKTIME = True # -DWITH_QUICKTIME
+BF_QUICKTIME = '/usr/local'
+BF_QUICKTIME_INC = '${BF_QUICKTIME}/include'
+
+WITH_BF_ICONV = True
+BF_ICONV = LIBDIR + "/iconv"
+BF_ICONV_INC = '${BF_ICONV}/include'
+BF_ICONV_LIB = 'iconv'
+BF_ICONV_LIBPATH = '${BF_ICONV}/lib'
+
+WITH_BF_BINRELOC = True
+
+# enable ffmpeg support
+WITH_BF_FFMPEG = True # -DWITH_FFMPEG
+BF_FFMPEG = '/usr/local'
+BF_FFMPEG_LIB = 'avformat avcodec swscale avutil avdevice'
+BF_FFMPEG_INC = '${BF_FFMPEG}/include'
+BF_FFMPEG_LIBPATH='${BF_FFMPEG}/lib'
+
+# enable ogg, vorbis and theora in ffmpeg
+WITH_BF_OGG = True # -DWITH_OGG
+BF_OGG = '/usr/local'
+BF_OGG_INC = '${BF_OGG}/include'
+BF_OGG_LIB = 'ogg vorbis vorbisenc theoraenc theoradec'
+
+WITH_BF_OPENJPEG = True
+BF_OPENJPEG = '#extern/libopenjpeg'
+BF_OPENJPEG_LIB = ''
+BF_OPENJPEG_INC = '${BF_OPENJPEG}'
+BF_OPENJPEG_LIBPATH='${BF_OPENJPEG}/lib'
+
+WITH_BF_FFTW3 = True
+BF_FFTW3 = LIBDIR + '/usr/local'
+BF_FFTW3_INC = '${BF_FFTW3}/include'
+BF_FFTW3_LIB = 'fftw3'
+BF_FFTW3_LIBPATH = '${BF_FFTW3}/lib'
+
+WITH_BF_REDCODE = True
+BF_REDCODE = '#extern/libredcode'
+BF_REDCODE_LIB = ''
+# BF_REDCODE_INC = '${BF_REDCODE}/include'
+BF_REDCODE_INC = '${BF_REDCODE}/../' #C files request "libredcode/format.h" which is in "#extern/libredcode/format.h", stupid but compiles for now.
+BF_REDCODE_LIBPATH='${BF_REDCODE}/lib'
+
+# Mesa Libs should go here if your using them as well....
+WITH_BF_STATICOPENGL = False
+BF_OPENGL = '/usr/local'
+BF_OPENGL_INC = '${BF_OPENGL}/include'
+BF_OPENGL_LIB = 'GL GLU X11 Xi'
+BF_OPENGL_LIBPATH = '/usr/X11R6/lib'
+BF_OPENGL_LIB_STATIC = '${BF_OPENGL_LIBPATH}/libGL.a ${BF_OPENGL_LIBPATH}/libGLU.a ${BF_OPENGL_LIBPATH}/libXxf86vm.a ${BF_OPENGL_LIBPATH}/libX11.a ${BF_OPENGL_LIBPATH}/libXi.a ${BF_OPENGL_LIBPATH}/libXext.a ${BF_OPENGL_LIBPATH}/libXxf86vm.a'
+
+WITH_BF_COLLADA = False
+BF_COLLADA = '#source/blender/collada'
+BF_COLLADA_INC = '${BF_COLLADA}'
+BF_COLLADA_LIB = 'bf_collada'
+BF_OPENCOLLADA = '/usr'
+BF_OPENCOLLADA_INC = '${BF_OPENCOLLADA}'
+BF_OPENCOLLADA_LIB = 'OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver pcre buffer ftoa'
+BF_OPENCOLLADA_LIBPATH = '${BF_OPENCOLLADA}/lib'
+BF_PCRE = '/usr/local'
+BF_PCRE_LIB = 'pcre'
+BF_PCRE_LIBPATH = '${BF_PCRE}/lib'
+BF_EXPAT = '/usr/local'
+BF_EXPAT_LIB = 'expat'
+BF_EXPAT_LIBPATH = '${BF_EXPAT}/lib'
+
+WITH_BF_OPENMP = True
+
+#Ray trace optimization
+WITH_BF_RAYOPTIMIZATION = True
+BF_RAYOPTIMIZATION_SSE_FLAGS = ['-msse','-pthread']
+
+CCFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64']
+
+CPPFLAGS = []
+CXXFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64']
+if WITH_BF_FFMPEG:
+ # libavutil needs UINT64_C()
+ CXXFLAGS += ['-D__STDC_CONSTANT_MACROS', ]
+REL_CFLAGS = ['-O2']
+REL_CCFLAGS = ['-O2']
+##BF_DEPEND = True
+##
+##AR = ar
+##ARFLAGS = ruv
+##ARFLAGSQUIET = ru
+##
+C_WARN = ['-Wno-char-subscripts', '-Wdeclaration-after-statement']
+CC_WARN = ['-Wall']
+CXX_WARN = ['-Wno-invalid-offsetof', '-Wno-sign-compare']
+
+
+##FIX_STUBS_WARNINGS = -Wno-unused
+
+LLIBS = ['util', 'c', 'm', 'dl', 'pthread', 'stdc++']
+##LOPTS = --dynamic
+##DYNLDFLAGS = -shared $(LDFLAGS)
+
+BF_PROFILE = False
+BF_PROFILE_CCFLAGS = ['-pg','-g']
+BF_PROFILE_LINKFLAGS = ['-pg']
+
+BF_DEBUG = False
+BF_DEBUG_CCFLAGS = ['-g']
+
+BF_BUILDDIR = '../build/freebsd7'
+BF_INSTALLDIR='../install/freebsd7'
+
+#Link against pthread
+PLATFORM_LINKFLAGS = ['-pthread']
diff --git a/build_files/scons/config/freebsd8-config.py b/build_files/scons/config/freebsd8-config.py
new file mode 100644
index 00000000000..c0df29df335
--- /dev/null
+++ b/build_files/scons/config/freebsd8-config.py
@@ -0,0 +1,213 @@
+CC = 'gcc44'
+CXX = 'g++44'
+
+LCGDIR = '../lib/freebsd8'
+LIBDIR = "${LCGDIR}"
+
+BF_PYTHON = '/usr/local'
+BF_PYTHON_LIBPATH = '${BF_PYTHON}/lib'
+BF_PYTHON_VERSION = '3.1'
+WITH_BF_STATICPYTHON = False
+BF_PYTHON_INC = '${BF_PYTHON}/include/python${BF_PYTHON_VERSION}'
+BF_PYTHON_BINARY = '${BF_PYTHON}/bin/python${BF_PYTHON_VERSION}'
+BF_PYTHON_LIB = 'python${BF_PYTHON_VERSION}'
+BF_PYTHON_LIB_STATIC = '${BF_PYTHON}/lib/libpython${BF_PYTHON_VERSION}.a'
+
+WITH_BF_OPENAL = True
+WITH_BF_STATICOPENAL = False
+BF_OPENAL = '/usr/local'
+BF_OPENAL_INC = '${BF_OPENAL}/include'
+BF_OPENAL_LIB = 'openal'
+BF_OPENAL_LIB_STATIC = '${BF_OPENAL}/lib/libopenal.a'
+
+BF_CXX = '/usr/local'
+WITH_BF_STATICCXX = False
+BF_CXX_LIB_STATIC = '${BF_CXX}/lib/libstdc++.a'
+
+BF_LIBSAMPLERATE = '/usr/local'
+BF_LIBSAMPLERATE_INC = '${BF_LIBSAMPLERATE}/include'
+BF_LIBSAMPLERATE_LIB = 'samplerate'
+BF_LIBSAMPLERATE_LIBPATH = '${BF_LIBSAMPLERATE}/lib'
+
+WITH_BF_JACK = True
+BF_JACK = '/usr/local'
+BF_JACK_INC = '${BF_JACK}/include/jack'
+BF_JACK_LIB = 'jack'
+BF_JACK_LIBPATH = '${BF_JACK}/lib'
+
+WITH_BF_SNDFILE = True
+BF_SNDFILE = '/usr/local'
+BF_SNDFILE_INC = '${BF_SNDFILE}/include/sndfile'
+BF_SNDFILE_LIB = 'sndfile'
+BF_SNDFILE_LIBPATH = '${BF_SNDFILE}/lib'
+
+WITH_BF_SDL = True
+BF_SDL = '/usr/local' #$(shell sdl-config --prefix)
+BF_SDL_INC = '${BF_SDL}/include/SDL' #$(shell $(BF_SDL)/bin/sdl-config --cflags)
+BF_SDL_LIB = 'SDL' #BF_SDL #$(shell $(BF_SDL)/bin/sdl-config --libs) -lSDL_mixer
+
+WITH_BF_OPENEXR = True
+WITH_BF_STATICOPENEXR = False
+BF_OPENEXR = '/usr/local'
+# when compiling with your own openexr lib you might need to set...
+# BF_OPENEXR_INC = '${BF_OPENEXR}/include/OpenEXR ${BF_OPENEXR}/include'
+
+BF_OPENEXR_INC = '${BF_OPENEXR}/include/OpenEXR'
+BF_OPENEXR_LIB = 'Half IlmImf Iex Imath '
+BF_OPENEXR_LIB_STATIC = '${BF_OPENEXR}/lib/libHalf.a ${BF_OPENEXR}/lib/libIlmImf.a ${BF_OPENEXR}/lib/libIex.a ${BF_OPENEXR}/lib/libImath.a ${BF_OPENEXR}/lib/libIlmThread.a'
+# BF_OPENEXR_LIBPATH = '${BF_OPENEXR}/lib'
+
+
+WITH_BF_DDS = True
+
+WITH_BF_JPEG = True
+BF_JPEG = '/usr/local'
+BF_JPEG_INC = '${BF_JPEG}/include'
+BF_JPEG_LIB = 'jpeg'
+
+WITH_BF_PNG = True
+BF_PNG = '/usr/local'
+BF_PNG_INC = '${BF_PNG}/include'
+BF_PNG_LIB = 'png'
+
+WITH_BF_TIFF = True
+BF_TIFF = '/usr/local'
+BF_TIFF_INC = '${BF_TIFF}/include'
+BF_TIFF_LIB = 'tiff'
+
+WITH_BF_ZLIB = True
+BF_ZLIB = '/usr'
+BF_ZLIB_INC = '${BF_ZLIB}/include'
+BF_ZLIB_LIB = 'z'
+
+WITH_BF_INTERNATIONAL = True
+
+BF_GETTEXT = '/usr/local'
+BF_GETTEXT_INC = '${BF_GETTEXT}/include'
+BF_GETTEXT_LIB = 'gettextlib'
+BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib'
+
+WITH_BF_GAMEENGINE = True
+WITH_BF_PLAYER = True
+
+WITH_BF_BULLET = True
+BF_BULLET = '#extern/bullet2/src'
+BF_BULLET_INC = '${BF_BULLET}'
+BF_BULLET_LIB = 'extern_bullet'
+
+# enable freetype2 support for text objects
+BF_FREETYPE = '/usr/local'
+BF_FREETYPE_INC = '${BF_FREETYPE}/include ${BF_FREETYPE}/include/freetype2'
+BF_FREETYPE_LIB = 'freetype'
+
+WITH_BF_QUICKTIME = True # -DWITH_QUICKTIME
+BF_QUICKTIME = '/usr/local'
+BF_QUICKTIME_INC = '${BF_QUICKTIME}/include'
+
+WITH_BF_ICONV = True
+BF_ICONV = LIBDIR + "/iconv"
+BF_ICONV_INC = '${BF_ICONV}/include'
+BF_ICONV_LIB = 'iconv'
+BF_ICONV_LIBPATH = '${BF_ICONV}/lib'
+
+WITH_BF_BINRELOC = True
+
+# enable ffmpeg support
+WITH_BF_FFMPEG = True # -DWITH_FFMPEG
+BF_FFMPEG = '/usr/local'
+BF_FFMPEG_LIB = 'avformat avcodec swscale avutil avdevice'
+BF_FFMPEG_INC = '${BF_FFMPEG}/include'
+BF_FFMPEG_LIBPATH='${BF_FFMPEG}/lib'
+
+# enable ogg, vorbis and theora in ffmpeg
+WITH_BF_OGG = True # -DWITH_OGG
+BF_OGG = '/usr/local'
+BF_OGG_INC = '${BF_OGG}/include'
+BF_OGG_LIB = 'ogg vorbis vorbisenc theoraenc theoradec'
+
+WITH_BF_OPENJPEG = True
+BF_OPENJPEG = '#extern/libopenjpeg'
+BF_OPENJPEG_LIB = ''
+BF_OPENJPEG_INC = '${BF_OPENJPEG}'
+BF_OPENJPEG_LIBPATH='${BF_OPENJPEG}/lib'
+
+WITH_BF_FFTW3 = True
+BF_FFTW3 = LIBDIR + '/usr/local'
+BF_FFTW3_INC = '${BF_FFTW3}/include'
+BF_FFTW3_LIB = 'fftw3'
+BF_FFTW3_LIBPATH = '${BF_FFTW3}/lib'
+
+WITH_BF_REDCODE = True
+BF_REDCODE = '#extern/libredcode'
+BF_REDCODE_LIB = ''
+# BF_REDCODE_INC = '${BF_REDCODE}/include'
+BF_REDCODE_INC = '${BF_REDCODE}/../' #C files request "libredcode/format.h" which is in "#extern/libredcode/format.h", stupid but compiles for now.
+BF_REDCODE_LIBPATH='${BF_REDCODE}/lib'
+
+# Mesa Libs should go here if your using them as well....
+WITH_BF_STATICOPENGL = False
+BF_OPENGL = '/usr/local'
+BF_OPENGL_INC = '${BF_OPENGL}/include'
+BF_OPENGL_LIB = 'GL GLU X11 Xi'
+BF_OPENGL_LIBPATH = '/usr/X11R6/lib'
+BF_OPENGL_LIB_STATIC = '${BF_OPENGL_LIBPATH}/libGL.a ${BF_OPENGL_LIBPATH}/libGLU.a ${BF_OPENGL_LIBPATH}/libXxf86vm.a ${BF_OPENGL_LIBPATH}/libX11.a ${BF_OPENGL_LIBPATH}/libXi.a ${BF_OPENGL_LIBPATH}/libXext.a ${BF_OPENGL_LIBPATH}/libXxf86vm.a'
+
+WITH_BF_COLLADA = False
+BF_COLLADA = '#source/blender/collada'
+BF_COLLADA_INC = '${BF_COLLADA}'
+BF_COLLADA_LIB = 'bf_collada'
+BF_OPENCOLLADA = '/usr'
+BF_OPENCOLLADA_INC = '${BF_OPENCOLLADA}'
+BF_OPENCOLLADA_LIB = 'OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver pcre buffer ftoa'
+BF_OPENCOLLADA_LIBPATH = '${BF_OPENCOLLADA}/lib'
+BF_PCRE = '/usr/local'
+BF_PCRE_LIB = 'pcre'
+BF_PCRE_LIBPATH = '${BF_PCRE}/lib'
+BF_EXPAT = '/usr/local'
+BF_EXPAT_LIB = 'expat'
+BF_EXPAT_LIBPATH = '${BF_EXPAT}/lib'
+
+WITH_BF_OPENMP = True
+
+#Ray trace optimization
+WITH_BF_RAYOPTIMIZATION = True
+BF_RAYOPTIMIZATION_SSE_FLAGS = ['-msse','-pthread']
+
+CCFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64']
+
+CPPFLAGS = []
+CXXFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64']
+if WITH_BF_FFMPEG:
+ # libavutil needs UINT64_C()
+ CXXFLAGS += ['-D__STDC_CONSTANT_MACROS', ]
+REL_CFLAGS = ['-O2']
+REL_CCFLAGS = ['-O2']
+##BF_DEPEND = True
+##
+##AR = ar
+##ARFLAGS = ruv
+##ARFLAGSQUIET = ru
+##
+C_WARN = ['-Wno-char-subscripts', '-Wdeclaration-after-statement']
+CC_WARN = ['-Wall']
+CXX_WARN = ['-Wno-invalid-offsetof', '-Wno-sign-compare']
+
+
+##FIX_STUBS_WARNINGS = -Wno-unused
+
+LLIBS = ['util', 'c', 'm', 'dl', 'pthread', 'stdc++']
+##LOPTS = --dynamic
+##DYNLDFLAGS = -shared $(LDFLAGS)
+
+BF_PROFILE = False
+BF_PROFILE_CCFLAGS = ['-pg','-g']
+BF_PROFILE_LINKFLAGS = ['-pg']
+
+BF_DEBUG = False
+BF_DEBUG_CCFLAGS = ['-g']
+
+BF_BUILDDIR = '../build/freebsd8'
+BF_INSTALLDIR='../install/freebsd8'
+
+#Link against pthread
+PLATFORM_LINKFLAGS = ['-pthread']
diff --git a/build_files/scons/config/freebsd9-config.py b/build_files/scons/config/freebsd9-config.py
new file mode 100644
index 00000000000..c344046d8cc
--- /dev/null
+++ b/build_files/scons/config/freebsd9-config.py
@@ -0,0 +1,213 @@
+CC = 'gcc44'
+CXX = 'g++44'
+
+LCGDIR = '../lib/freebsd9'
+LIBDIR = "${LCGDIR}"
+
+BF_PYTHON = '/usr/local'
+BF_PYTHON_LIBPATH = '${BF_PYTHON}/lib'
+BF_PYTHON_VERSION = '3.1'
+WITH_BF_STATICPYTHON = False
+BF_PYTHON_INC = '${BF_PYTHON}/include/python${BF_PYTHON_VERSION}'
+BF_PYTHON_BINARY = '${BF_PYTHON}/bin/python${BF_PYTHON_VERSION}'
+BF_PYTHON_LIB = 'python${BF_PYTHON_VERSION}'
+BF_PYTHON_LIB_STATIC = '${BF_PYTHON}/lib/libpython${BF_PYTHON_VERSION}.a'
+
+WITH_BF_OPENAL = True
+WITH_BF_STATICOPENAL = False
+BF_OPENAL = '/usr/local'
+BF_OPENAL_INC = '${BF_OPENAL}/include'
+BF_OPENAL_LIB = 'openal'
+BF_OPENAL_LIB_STATIC = '${BF_OPENAL}/lib/libopenal.a'
+
+BF_CXX = '/usr/local'
+WITH_BF_STATICCXX = False
+BF_CXX_LIB_STATIC = '${BF_CXX}/lib/libstdc++.a'
+
+BF_LIBSAMPLERATE = '/usr/local'
+BF_LIBSAMPLERATE_INC = '${BF_LIBSAMPLERATE}/include'
+BF_LIBSAMPLERATE_LIB = 'samplerate'
+BF_LIBSAMPLERATE_LIBPATH = '${BF_LIBSAMPLERATE}/lib'
+
+WITH_BF_JACK = True
+BF_JACK = '/usr/local'
+BF_JACK_INC = '${BF_JACK}/include/jack'
+BF_JACK_LIB = 'jack'
+BF_JACK_LIBPATH = '${BF_JACK}/lib'
+
+WITH_BF_SNDFILE = True
+BF_SNDFILE = '/usr/local'
+BF_SNDFILE_INC = '${BF_SNDFILE}/include/sndfile'
+BF_SNDFILE_LIB = 'sndfile'
+BF_SNDFILE_LIBPATH = '${BF_SNDFILE}/lib'
+
+WITH_BF_SDL = True
+BF_SDL = '/usr/local' #$(shell sdl-config --prefix)
+BF_SDL_INC = '${BF_SDL}/include/SDL' #$(shell $(BF_SDL)/bin/sdl-config --cflags)
+BF_SDL_LIB = 'SDL' #BF_SDL #$(shell $(BF_SDL)/bin/sdl-config --libs) -lSDL_mixer
+
+WITH_BF_OPENEXR = True
+WITH_BF_STATICOPENEXR = False
+BF_OPENEXR = '/usr/local'
+# when compiling with your own openexr lib you might need to set...
+# BF_OPENEXR_INC = '${BF_OPENEXR}/include/OpenEXR ${BF_OPENEXR}/include'
+
+BF_OPENEXR_INC = '${BF_OPENEXR}/include/OpenEXR'
+BF_OPENEXR_LIB = 'Half IlmImf Iex Imath '
+BF_OPENEXR_LIB_STATIC = '${BF_OPENEXR}/lib/libHalf.a ${BF_OPENEXR}/lib/libIlmImf.a ${BF_OPENEXR}/lib/libIex.a ${BF_OPENEXR}/lib/libImath.a ${BF_OPENEXR}/lib/libIlmThread.a'
+# BF_OPENEXR_LIBPATH = '${BF_OPENEXR}/lib'
+
+
+WITH_BF_DDS = True
+
+WITH_BF_JPEG = True
+BF_JPEG = '/usr/local'
+BF_JPEG_INC = '${BF_JPEG}/include'
+BF_JPEG_LIB = 'jpeg'
+
+WITH_BF_PNG = True
+BF_PNG = '/usr/local'
+BF_PNG_INC = '${BF_PNG}/include'
+BF_PNG_LIB = 'png'
+
+WITH_BF_TIFF = True
+BF_TIFF = '/usr/local'
+BF_TIFF_INC = '${BF_TIFF}/include'
+BF_TIFF_LIB = 'tiff'
+
+WITH_BF_ZLIB = True
+BF_ZLIB = '/usr'
+BF_ZLIB_INC = '${BF_ZLIB}/include'
+BF_ZLIB_LIB = 'z'
+
+WITH_BF_INTERNATIONAL = True
+
+BF_GETTEXT = '/usr/local'
+BF_GETTEXT_INC = '${BF_GETTEXT}/include'
+BF_GETTEXT_LIB = 'gettextlib'
+BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib'
+
+WITH_BF_GAMEENGINE = True
+WITH_BF_PLAYER = True
+
+WITH_BF_BULLET = True
+BF_BULLET = '#extern/bullet2/src'
+BF_BULLET_INC = '${BF_BULLET}'
+BF_BULLET_LIB = 'extern_bullet'
+
+# enable freetype2 support for text objects
+BF_FREETYPE = '/usr/local'
+BF_FREETYPE_INC = '${BF_FREETYPE}/include ${BF_FREETYPE}/include/freetype2'
+BF_FREETYPE_LIB = 'freetype'
+
+WITH_BF_QUICKTIME = True # -DWITH_QUICKTIME
+BF_QUICKTIME = '/usr/local'
+BF_QUICKTIME_INC = '${BF_QUICKTIME}/include'
+
+WITH_BF_ICONV = True
+BF_ICONV = LIBDIR + "/iconv"
+BF_ICONV_INC = '${BF_ICONV}/include'
+BF_ICONV_LIB = 'iconv'
+BF_ICONV_LIBPATH = '${BF_ICONV}/lib'
+
+WITH_BF_BINRELOC = True
+
+# enable ffmpeg support
+WITH_BF_FFMPEG = True # -DWITH_FFMPEG
+BF_FFMPEG = '/usr/local'
+BF_FFMPEG_LIB = 'avformat avcodec swscale avutil avdevice'
+BF_FFMPEG_INC = '${BF_FFMPEG}/include'
+BF_FFMPEG_LIBPATH='${BF_FFMPEG}/lib'
+
+# enable ogg, vorbis and theora in ffmpeg
+WITH_BF_OGG = True # -DWITH_OGG
+BF_OGG = '/usr/local'
+BF_OGG_INC = '${BF_OGG}/include'
+BF_OGG_LIB = 'ogg vorbis vorbisenc theoraenc theoradec'
+
+WITH_BF_OPENJPEG = True
+BF_OPENJPEG = '#extern/libopenjpeg'
+BF_OPENJPEG_LIB = ''
+BF_OPENJPEG_INC = '${BF_OPENJPEG}'
+BF_OPENJPEG_LIBPATH='${BF_OPENJPEG}/lib'
+
+WITH_BF_FFTW3 = True
+BF_FFTW3 = LIBDIR + '/usr/local'
+BF_FFTW3_INC = '${BF_FFTW3}/include'
+BF_FFTW3_LIB = 'fftw3'
+BF_FFTW3_LIBPATH = '${BF_FFTW3}/lib'
+
+WITH_BF_REDCODE = True
+BF_REDCODE = '#extern/libredcode'
+BF_REDCODE_LIB = ''
+# BF_REDCODE_INC = '${BF_REDCODE}/include'
+BF_REDCODE_INC = '${BF_REDCODE}/../' #C files request "libredcode/format.h" which is in "#extern/libredcode/format.h", stupid but compiles for now.
+BF_REDCODE_LIBPATH='${BF_REDCODE}/lib'
+
+# Mesa Libs should go here if your using them as well....
+WITH_BF_STATICOPENGL = False
+BF_OPENGL = '/usr/local'
+BF_OPENGL_INC = '${BF_OPENGL}/include'
+BF_OPENGL_LIB = 'GL GLU X11 Xi'
+BF_OPENGL_LIBPATH = '/usr/X11R6/lib'
+BF_OPENGL_LIB_STATIC = '${BF_OPENGL_LIBPATH}/libGL.a ${BF_OPENGL_LIBPATH}/libGLU.a ${BF_OPENGL_LIBPATH}/libXxf86vm.a ${BF_OPENGL_LIBPATH}/libX11.a ${BF_OPENGL_LIBPATH}/libXi.a ${BF_OPENGL_LIBPATH}/libXext.a ${BF_OPENGL_LIBPATH}/libXxf86vm.a'
+
+WITH_BF_COLLADA = False
+BF_COLLADA = '#source/blender/collada'
+BF_COLLADA_INC = '${BF_COLLADA}'
+BF_COLLADA_LIB = 'bf_collada'
+BF_OPENCOLLADA = '/usr'
+BF_OPENCOLLADA_INC = '${BF_OPENCOLLADA}'
+BF_OPENCOLLADA_LIB = 'OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver pcre buffer ftoa'
+BF_OPENCOLLADA_LIBPATH = '${BF_OPENCOLLADA}/lib'
+BF_PCRE = '/usr/local'
+BF_PCRE_LIB = 'pcre'
+BF_PCRE_LIBPATH = '${BF_PCRE}/lib'
+BF_EXPAT = '/usr/local'
+BF_EXPAT_LIB = 'expat'
+BF_EXPAT_LIBPATH = '${BF_EXPAT}/lib'
+
+WITH_BF_OPENMP = True
+
+#Ray trace optimization
+WITH_BF_RAYOPTIMIZATION = True
+BF_RAYOPTIMIZATION_SSE_FLAGS = ['-msse','-pthread']
+
+CCFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64']
+
+CPPFLAGS = []
+CXXFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64']
+if WITH_BF_FFMPEG:
+ # libavutil needs UINT64_C()
+ CXXFLAGS += ['-D__STDC_CONSTANT_MACROS', ]
+REL_CFLAGS = ['-O2']
+REL_CCFLAGS = ['-O2']
+##BF_DEPEND = True
+##
+##AR = ar
+##ARFLAGS = ruv
+##ARFLAGSQUIET = ru
+##
+C_WARN = ['-Wno-char-subscripts', '-Wdeclaration-after-statement']
+CC_WARN = ['-Wall']
+CXX_WARN = ['-Wno-invalid-offsetof', '-Wno-sign-compare']
+
+
+##FIX_STUBS_WARNINGS = -Wno-unused
+
+LLIBS = ['util', 'c', 'm', 'dl', 'pthread', 'stdc++']
+##LOPTS = --dynamic
+##DYNLDFLAGS = -shared $(LDFLAGS)
+
+BF_PROFILE = False
+BF_PROFILE_CCFLAGS = ['-pg','-g']
+BF_PROFILE_LINKFLAGS = ['-pg']
+
+BF_DEBUG = False
+BF_DEBUG_CCFLAGS = ['-g']
+
+BF_BUILDDIR = '../build/freebsd9'
+BF_INSTALLDIR='../install/freebsd9'
+
+#Link against pthread
+PLATFORM_LINKFLAGS = ['-pthread']
diff --git a/build_files/scons/config/win32-vc-config.py b/build_files/scons/config/win32-vc-config.py
index ce34737fd49..3572dd113bf 100644
--- a/build_files/scons/config/win32-vc-config.py
+++ b/build_files/scons/config/win32-vc-config.py
@@ -130,7 +130,7 @@ BF_OPENJPEG_LIB = ''
BF_OPENJPEG_INC = '${BF_OPENJPEG}'
BF_OPENJPEG_LIBPATH='${BF_OPENJPEG}/lib'
-WITH_BF_FFTW3 = False
+WITH_BF_FFTW3 = True
BF_FFTW3 = LIBDIR + '/fftw3'
BF_FFTW3_INC = '${BF_FFTW3}/include'
BF_FFTW3_LIB = 'libfftw'
diff --git a/build_files/scons/config/win64-vc-config.py b/build_files/scons/config/win64-vc-config.py
index 46b9034823c..0a4b05a28bf 100644
--- a/build_files/scons/config/win64-vc-config.py
+++ b/build_files/scons/config/win64-vc-config.py
@@ -194,8 +194,6 @@ CXX_WARN = []
LLIBS = ['ws2_32', 'vfw32', 'winmm', 'kernel32', 'user32', 'gdi32', 'comdlg32', 'advapi32', 'shfolder', 'shell32', 'ole32', 'oleaut32', 'uuid']
-WITH_BF_DOCS=False
-
BF_DEBUG=False
BF_BSC=False
diff --git a/build_files/scons/tools/Blender.py b/build_files/scons/tools/Blender.py
index 7f5ce4767e3..89c4ef9cac9 100644
--- a/build_files/scons/tools/Blender.py
+++ b/build_files/scons/tools/Blender.py
@@ -501,10 +501,7 @@ def AppIt(target=None, source=None, env=None):
installdir = env['BF_INSTALLDIR']
print("compiled architecture: %s"%(osxarch))
print("Installing to %s"%(installdir))
- if libdir == '../lib/darwin-9.x.universal':
- python_zip = 'python_' + osxarch + '.zip' # set specific python_arch.zip
- else:
- python_zip = 'python.zip' # compatibility for darwin8 python.zip
+ python_zip = 'python_' + osxarch + '.zip' # set specific python_arch.zip
print("unzipping to app-bundle: %s"%(python_zip))
bldroot = env.Dir('.').abspath
binary = env['BINARYKIND']
@@ -529,13 +526,13 @@ def AppIt(target=None, source=None, env=None):
# print cmd
commands.getoutput(cmd)
cmd = installdir + '/%s.app/Contents/MacOS/%s'%(binary,VERSION)
- shutil.copy(bldroot + '/bin/.blender/.bfont.ttf', cmd)
- shutil.copy(bldroot + '/bin/.blender/.Blanguages', cmd)
- cmd = 'cp -R %s/bin/%s/locale %s/%s.app/Contents/Resources/'%(bldroot,VERSION,installdir,binary)
+ shutil.copy(bldroot + '/release/bin/.blender/.bfont.ttf', cmd)
+ shutil.copy(bldroot + '/release/bin/.blender/.Blanguages', cmd)
+ cmd = 'cp -R %s/release/bin/%s/locale %s/%s.app/Contents/Resources/'%(bldroot,VERSION,installdir,binary)
commands.getoutput(cmd)
- cmd = 'cp -R %s/bin/%s/locale %s/%s.app/Contents/MacOS/%s/'%(bldroot,VERSION,installdir,binary,VERSION)
+ cmd = 'cp -R %s/release/bin/%s/locale %s/%s.app/Contents/MacOS/%s/'%(bldroot,VERSION,installdir,binary,VERSION)
commands.getoutput(cmd)
- cmd = 'cp %s/bin/%s/.Blanguages %s/%s.app/Contents/Resources/'%(bldroot,VERSION,installdir,binary)
+ cmd = 'cp %s/release/bin/%s/.Blanguages %s/%s.app/Contents/Resources/'%(bldroot,VERSION,installdir,binary)
commands.getoutput(cmd)
cmd = 'mkdir %s/%s.app/Contents/MacOS/%s/python/'%(installdir,binary, VERSION)
commands.getoutput(cmd)
@@ -570,10 +567,9 @@ def UnixPyBundle(target=None, source=None, env=None):
def run(cmd):
print 'Install command:', cmd
commands.getoutput(cmd)
-
- if env['WITH_BF_FHS']: dir = os.path.join(env['BF_INSTALLDIR'], 'share', 'blender', env['BF_VERSION']) # BLENDERPATH
- else: dir = os.path.join(env['BF_INSTALLDIR'], VERSION)
-
+
+ dir = os.path.join(env['BF_INSTALLDIR'], VERSION)
+
py_src = env.subst( env['BF_PYTHON_LIBPATH'] + '/python'+env['BF_PYTHON_VERSION'] )
py_target = env.subst( dir + '/python/lib/python'+env['BF_PYTHON_VERSION'] )
diff --git a/build_files/scons/tools/btools.py b/build_files/scons/tools/btools.py
index 03a1a0f0b7a..c930c150cb6 100644
--- a/build_files/scons/tools/btools.py
+++ b/build_files/scons/tools/btools.py
@@ -15,7 +15,7 @@ import sys
Variables = SCons.Variables
BoolVariable = SCons.Variables.BoolVariable
-VERSION = '2.52' # This is used in creating the local config directories
+VERSION = '2.53' # This is used in creating the local config directories
def print_arguments(args, bc):
if len(args):
@@ -36,7 +36,7 @@ def validate_arguments(args, bc):
'WITH_BF_SNDFILE', 'BF_SNDFILE', 'BF_SNDFILE_INC', 'BF_SNDFILE_LIB', 'BF_SNDFILE_LIBPATH',
'BF_PTHREADS', 'BF_PTHREADS_INC', 'BF_PTHREADS_LIB', 'BF_PTHREADS_LIBPATH',
'WITH_BF_OPENEXR', 'BF_OPENEXR', 'BF_OPENEXR_INC', 'BF_OPENEXR_LIB', 'BF_OPENEXR_LIBPATH', 'WITH_BF_STATICOPENEXR', 'BF_OPENEXR_LIB_STATIC',
- 'WITH_BF_DDS',
+ 'WITH_BF_DDS', 'WITH_BF_CINEON', 'WITH_BF_HDR',
'WITH_BF_FFMPEG', 'BF_FFMPEG_LIB','BF_FFMPEG_EXTRA', 'BF_FFMPEG', 'BF_FFMPEG_INC',
'WITH_BF_OGG', 'BF_OGG', 'BF_OGG_LIB',
'WITH_BF_JPEG', 'BF_JPEG', 'BF_JPEG_INC', 'BF_JPEG_LIB', 'BF_JPEG_LIBPATH',
@@ -78,7 +78,6 @@ def validate_arguments(args, bc):
'WITH_BF_DOCS',
'BF_NUMJOBS',
'BF_MSVS',
- 'WITH_BF_FHS',
'BF_VERSION',
'BF_GHOST_DEBUG',
'WITH_BF_RAYOPTIMIZATION',
@@ -224,7 +223,11 @@ def read_opts(env, cfg, args):
('BF_OPENEXR_LIBPATH', 'OPENEXR library path', ''),
('BF_OPENEXR_LIB_STATIC', 'OPENEXR static library', ''),
- (BoolVariable('WITH_BF_DDS', 'Use DDS if true', True)),
+ (BoolVariable('WITH_BF_DDS', 'Support DDS image format if true', True)),
+
+ (BoolVariable('WITH_BF_CINEON', 'Support CINEON and DPX image formats if true', True)),
+
+ (BoolVariable('WITH_BF_HDR', 'Support HDR image formats if true', True)),
(BoolVariable('WITH_BF_FFMPEG', 'Use FFMPEG if true', False)),
('BF_FFMPEG', 'FFMPEG base path', ''),
@@ -428,13 +431,12 @@ def read_opts(env, cfg, args):
('BF_X264_CONFIG', 'configuration flags for x264', ''),
('BF_XVIDCORE_CONFIG', 'configuration flags for xvidcore', ''),
- (BoolVariable('WITH_BF_DOCS', 'Generate API documentation', False)),
+# (BoolVariable('WITH_BF_DOCS', 'Generate API documentation', False)),
('BF_CONFIG', 'SCons python config file used to set default options', 'user_config.py'),
('BF_NUMJOBS', 'Number of build processes to spawn', '1'),
('BF_MSVS', 'Generate MSVS project files and solution', False),
-
- (BoolVariable('WITH_BF_FHS', 'Use the Unix "Filesystem Hierarchy Standard" rather then a redistributable directory layout', False)),
+
('BF_VERSION', 'The root path for Unix (non-apple)', '2.5'),
(BoolVariable('BF_UNIT_TEST', 'Build with unit test support.', False)),
diff --git a/doc/blender.1.py b/doc/blender.1.py
index 05b491cf21e..7c7fc987c64 100644
--- a/doc/blender.1.py
+++ b/doc/blender.1.py
@@ -53,7 +53,7 @@ blender_version = blender_version.split("Build")[0]
date_string = datetime.date.fromtimestamp(time.time()).strftime("%B %d, %Y")
-filepath = os.path.splitext(__file__)[0] + ".1"
+filepath = os.path.splitext(__file__)[0]
file = open(filepath, "w")
@@ -132,3 +132,5 @@ This manpage was written for a Debian GNU/Linux system by Daniel Mester
<mester@uni-bremen.de> and updated by Cyril Brulebois
<cyril.brulebois@enst-bretagne.fr> and Dan Eicher <dan@trollwerks.org>.
''')
+
+print("written:", filepath)
diff --git a/extern/CMakeLists.txt b/extern/CMakeLists.txt
index 35271d24a2d..b15c8a31c73 100644
--- a/extern/CMakeLists.txt
+++ b/extern/CMakeLists.txt
@@ -34,9 +34,9 @@ ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux")
ADD_SUBDIRECTORY(glew)
-IF(WITH_OPENJPEG)
+IF(WITH_IMAGE_OPENJPEG)
ADD_SUBDIRECTORY(libopenjpeg)
-ENDIF(WITH_OPENJPEG)
+ENDIF(WITH_IMAGE_OPENJPEG)
IF(WITH_LZO)
ADD_SUBDIRECTORY(lzo)
diff --git a/extern/bullet2/src/BulletDynamics/ConstraintSolver/btConeTwistConstraint.cpp b/extern/bullet2/src/BulletDynamics/ConstraintSolver/btConeTwistConstraint.cpp
index 50a79451f5d..07262b95b73 100644
--- a/extern/bullet2/src/BulletDynamics/ConstraintSolver/btConeTwistConstraint.cpp
+++ b/extern/bullet2/src/BulletDynamics/ConstraintSolver/btConeTwistConstraint.cpp
@@ -601,7 +601,7 @@ void btConeTwistConstraint::calcAngleInfo2()
m_solveSwingLimit = false;
// compute rotation of A wrt B (in constraint space)
if (m_bMotorEnabled && (!m_useSolveConstraintObsolete))
- { // it is assumed that setMotorTarget() was alredy called
+ { // it is assumed that setMotorTarget() was already called
// and motor target m_qTarget is within constraint limits
// TODO : split rotation to pure swing and pure twist
// compute desired transforms in world
diff --git a/intern/CMakeLists.txt b/intern/CMakeLists.txt
index a370118f061..d64029a6671 100644
--- a/intern/CMakeLists.txt
+++ b/intern/CMakeLists.txt
@@ -38,8 +38,8 @@ ADD_SUBDIRECTORY(boolop)
ADD_SUBDIRECTORY(opennl)
ADD_SUBDIRECTORY(smoke)
-IF(WITH_ELBEEM)
+IF(WITH_FLUID)
ADD_SUBDIRECTORY(elbeem)
-ENDIF(WITH_ELBEEM)
+ENDIF(WITH_FLUID)
ADD_SUBDIRECTORY(bsp)
diff --git a/intern/ghost/CMakeLists.txt b/intern/ghost/CMakeLists.txt
index 1a7627c9099..c262ea8aadd 100644
--- a/intern/ghost/CMakeLists.txt
+++ b/intern/ghost/CMakeLists.txt
@@ -85,6 +85,9 @@ ELSEIF(UNIX)
${CMAKE_CURRENT_SOURCE_DIR}/intern/GHOST_SystemX11.cpp
${CMAKE_CURRENT_SOURCE_DIR}/intern/GHOST_WindowX11.cpp
)
+
+ ADD_DEFINITIONS(-DPREFIX="${CMAKE_INSTALL_PREFIX}")
+
ENDIF(APPLE)
BLENDERLIB(bf_ghost "${SRC}" "${INC}")
diff --git a/intern/ghost/SConscript b/intern/ghost/SConscript
index 65c00b16373..9ecd61857ce 100644
--- a/intern/ghost/SConscript
+++ b/intern/ghost/SConscript
@@ -14,7 +14,7 @@ if window_system == 'darwin':
pf = ['GHOST_DisplayManager', 'GHOST_System', 'GHOST_Window', 'GHOST_DropTarget']
defs=['_USE_MATH_DEFINES']
-if window_system in ('linux2', 'openbsd3', 'sunos5', 'freebsd6', 'irix6', 'aix4', 'aix5'):
+if window_system in ('linux2', 'openbsd3', 'sunos5', 'freebsd7', 'freebsd8', 'freebsd9', 'irix6', 'aix4', 'aix5'):
for f in pf:
try:
sources.remove('intern' + os.sep + f + 'Win32.cpp')
@@ -60,4 +60,4 @@ if env['BF_GHOST_DEBUG']:
incs = '. ../string #extern/glew/include #source/blender/imbuf #source/blender/makesdna ' + env['BF_OPENGL_INC']
if window_system in ('win32-vc', 'win32-mingw', 'cygwin', 'linuxcross', 'win64-vc'):
incs = env['BF_WINTAB_INC'] + ' ' + incs
-env.BlenderLib ('bf_ghost', sources, Split(incs), defines=defs, libtype=['intern','player'], priority = [40,15] )
+env.BlenderLib ('bf_ghost', sources, Split(incs), defines=defs, libtype=['intern','player'], priority = [40,15] ) \ No newline at end of file
diff --git a/intern/ghost/intern/GHOST_SystemCocoa.mm b/intern/ghost/intern/GHOST_SystemCocoa.mm
index a763309a09a..7e99c369f6a 100644
--- a/intern/ghost/intern/GHOST_SystemCocoa.mm
+++ b/intern/ghost/intern/GHOST_SystemCocoa.mm
@@ -1299,6 +1299,11 @@ GHOST_TUns8 GHOST_SystemCocoa::handleQuitRequest()
NSArray *windowsList = [NSApp orderedWindows];
if ([windowsList count]) {
[[windowsList objectAtIndex:0] makeKeyAndOrderFront:nil];
+ //Handle the modifiers keyes changed state issue
+ //as recovering from the quit dialog is like application
+ //gaining focus back.
+ //Main issue fixed is Cmd modifier not being cleared
+ handleApplicationBecomeActiveEvent();
}
}
diff --git a/intern/guardedalloc/MEM_guardedalloc.h b/intern/guardedalloc/MEM_guardedalloc.h
index 8c5caa6f359..b909ac9e051 100644
--- a/intern/guardedalloc/MEM_guardedalloc.h
+++ b/intern/guardedalloc/MEM_guardedalloc.h
@@ -63,7 +63,7 @@
extern "C" {
#endif
- /** Returns the lenght of the allocated memory segment pointed at
+ /** Returns the length of the allocated memory segment pointed at
* by vmemh. If the pointer was not previously allocated by this
* module, the result is undefined.*/
size_t MEM_allocN_len(void *vmemh);
diff --git a/intern/iksolver/intern/TNT/vec.h b/intern/iksolver/intern/TNT/vec.h
index 1729d83ca10..040097afbd9 100644
--- a/intern/iksolver/intern/TNT/vec.h
+++ b/intern/iksolver/intern/TNT/vec.h
@@ -416,7 +416,7 @@ void vectoradd(
A[i] += B[i];
}
-// same with seperate output vector
+// same with separate output vector
template <class T>
void vectoradd(
diff --git a/intern/itasc/MovingFrame.cpp b/intern/itasc/MovingFrame.cpp
index e923b1fab27..914f950e436 100644
--- a/intern/itasc/MovingFrame.cpp
+++ b/intern/itasc/MovingFrame.cpp
@@ -52,7 +52,7 @@ void MovingFrame::pushInternalFrame(CacheTS timestamp)
}
}
-// load pose just preceeding timestamp
+// load pose just preceding timestamp
// return false if no cache position was found
bool MovingFrame::popInternalFrame(CacheTS timestamp)
{
diff --git a/intern/smoke/extern/smoke_API.h b/intern/smoke/extern/smoke_API.h
index 3e296fd7c90..b340c914519 100644
--- a/intern/smoke/extern/smoke_API.h
+++ b/intern/smoke/extern/smoke_API.h
@@ -38,11 +38,11 @@ struct FLUID_3D;
void smoke_export(struct FLUID_3D *fluid, float *dt, float *dx, float **dens, float **densold, float **heat, float **heatold, float **vx, float **vy, float **vz, float **vxold, float **vyold, float **vzold, unsigned char **obstacles);
// low res
-struct FLUID_3D *smoke_init(int *res, float *p0, float dt);
+struct FLUID_3D *smoke_init(int *res, float *p0);
void smoke_free(struct FLUID_3D *fluid);
-void smoke_initBlenderRNA(struct FLUID_3D *fluid, float *alpha, float *beta);
-void smoke_step(struct FLUID_3D *fluid, size_t framenr);
+void smoke_initBlenderRNA(struct FLUID_3D *fluid, float *alpha, float *beta, float *dt_factor, float *vorticity, int *border_colli);
+void smoke_step(struct FLUID_3D *fluid, size_t framenr, float fps);
float *smoke_get_density(struct FLUID_3D *fluid);
float *smoke_get_heat(struct FLUID_3D *fluid);
diff --git a/intern/smoke/intern/FLUID_3D.cpp b/intern/smoke/intern/FLUID_3D.cpp
index 4ac960b5ef0..05fbb918d24 100644
--- a/intern/smoke/intern/FLUID_3D.cpp
+++ b/intern/smoke/intern/FLUID_3D.cpp
@@ -35,23 +35,15 @@
#include <omp.h>
#endif // PARALLEL
-// boundary conditions of the fluid domain
-#define DOMAIN_BC_FRONT 0 // z
-#define DOMAIN_BC_TOP 1 // y
-#define DOMAIN_BC_LEFT 1 // x
-#define DOMAIN_BC_BACK DOMAIN_BC_FRONT
-#define DOMAIN_BC_BOTTOM DOMAIN_BC_TOP
-#define DOMAIN_BC_RIGHT DOMAIN_BC_LEFT
-
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
-FLUID_3D::FLUID_3D(int *res, float *p0, float dt) :
- _xRes(res[0]), _yRes(res[1]), _zRes(res[2]), _res(0.0f), _dt(dt)
+FLUID_3D::FLUID_3D(int *res, float *p0) :
+ _xRes(res[0]), _yRes(res[1]), _zRes(res[2]), _res(0.0f)
{
// set simulation consts
- // _dt = dt; // 0.10
+ _dt = DT_DEFAULT; // just in case. set in step from a RNA factor
// start point of array
_p0[0] = p0[0];
@@ -61,7 +53,6 @@ FLUID_3D::FLUID_3D(int *res, float *p0, float dt) :
_iterations = 100;
_tempAmb = 0;
_heatDiffusion = 1e-3;
- _vorticityEps = 2.0;
_totalTime = 0.0f;
_totalSteps = 0;
_res = Vec3Int(_xRes,_yRes,_zRes);
@@ -77,9 +68,9 @@ FLUID_3D::FLUID_3D(int *res, float *p0, float dt) :
// scale the constants according to the refinement of the grid
_dx = 1.0f / (float)_maxRes;
- float scaling = 64.0f / _maxRes;
- scaling = (scaling < 1.0f) ? 1.0f : scaling;
- _vorticityEps /= scaling;
+ _constantScaling = 64.0f / _maxRes;
+ _constantScaling = (_constantScaling < 1.0f) ? 1.0f : _constantScaling;
+ _vorticityEps = 2.0f / _constantScaling; // Just in case set a default value
// allocate arrays
_totalCells = _xRes * _yRes * _zRes;
@@ -126,30 +117,42 @@ FLUID_3D::FLUID_3D(int *res, float *p0, float dt) :
_obstacles[x] = false;
}
+ // boundary conditions of the fluid domain
+ // set default values -> vertically non-colliding
+ _domainBcFront = true;
+ _domainBcTop = false;
+ _domainBcLeft = true;
+ _domainBcBack = _domainBcFront;
+ _domainBcBottom = _domainBcTop;
+ _domainBcRight = _domainBcLeft;
+
+ _colloPrev = 1; // default value
+
+
// set side obstacles
int index;
for (int y = 0; y < _yRes; y++)
for (int x = 0; x < _xRes; x++)
{
- // front slab
+ // bottom slab
index = x + y * _xRes;
- if(DOMAIN_BC_FRONT==1) _obstacles[index] = 1;
+ if(_domainBcBottom==1) _obstacles[index] = 1;
- // back slab
+ // top slab
index += _totalCells - _slabSize;
- if(DOMAIN_BC_BACK==1) _obstacles[index] = 1;
+ if(_domainBcTop==1) _obstacles[index] = 1;
}
for (int z = 0; z < _zRes; z++)
for (int x = 0; x < _xRes; x++)
{
- // bottom slab
+ // front slab
index = x + z * _slabSize;
- if(DOMAIN_BC_BOTTOM==1) _obstacles[index] = 1;
+ if(_domainBcFront==1) _obstacles[index] = 1;
- // top slab
+ // back slab
index += _slabSize - _xRes;
- if(DOMAIN_BC_TOP==1) _obstacles[index] = 1;
+ if(_domainBcBack==1) _obstacles[index] = 1;
}
for (int z = 0; z < _zRes; z++)
@@ -157,12 +160,13 @@ FLUID_3D::FLUID_3D(int *res, float *p0, float dt) :
{
// left slab
index = y * _xRes + z * _slabSize;
- if(DOMAIN_BC_LEFT==1) _obstacles[index] = 1;
+ if(_domainBcLeft==1) _obstacles[index] = 1;
// right slab
index += _xRes - 1;
- if(DOMAIN_BC_RIGHT==1) _obstacles[index] = 1;
+ if(_domainBcRight==1) _obstacles[index] = 1;
}
+
}
FLUID_3D::~FLUID_3D()
@@ -193,17 +197,32 @@ FLUID_3D::~FLUID_3D()
}
// init direct access functions from blender
-void FLUID_3D::initBlenderRNA(float *alpha, float *beta)
+void FLUID_3D::initBlenderRNA(float *alpha, float *beta, float *dt_factor, float *vorticity, int *borderCollision)
{
_alpha = alpha;
_beta = beta;
+ _dtFactor = dt_factor;
+ _vorticityRNA = vorticity;
+ _borderColli = borderCollision;
}
//////////////////////////////////////////////////////////////////////
// step simulation once
//////////////////////////////////////////////////////////////////////
-void FLUID_3D::step()
+void FLUID_3D::step(float dt)
{
+ // If border rules have been changed
+ if (_colloPrev != *_borderColli) {
+ setBorderCollisions();
+ }
+
+
+ // set delta time by dt_factor
+ _dt = (*_dtFactor) * dt;
+ // set vorticity from RNA value
+ _vorticityEps = (*_vorticityRNA)/_constantScaling;
+
+
#if PARALLEL==1
int threadval = 1;
threadval = omp_get_max_threads();
@@ -246,6 +265,13 @@ void FLUID_3D::step()
#pragma omp single
{
#endif
+ /*
+ * addForce() changed Temp values to preserve thread safety
+ * (previous functions in per thread loop still needed
+ * original velocity data)
+ *
+ * So swap temp values to velocity
+ */
SWAP_POINTERS(_xVelocity, _xVelocityTemp);
SWAP_POINTERS(_yVelocity, _yVelocityTemp);
SWAP_POINTERS(_zVelocity, _zVelocityTemp);
@@ -276,6 +302,10 @@ void FLUID_3D::step()
#pragma omp single
{
#endif
+ /*
+ * For thread safety use "Old" to read
+ * "current" values but still allow changing values.
+ */
SWAP_POINTERS(_xVelocity, _xVelocityOld);
SWAP_POINTERS(_yVelocity, _yVelocityOld);
SWAP_POINTERS(_zVelocity, _zVelocityOld);
@@ -334,6 +364,10 @@ void FLUID_3D::step()
}
#endif
+ /*
+ * swap final velocity back to Velocity array
+ * from temp xForce storage
+ */
SWAP_POINTERS(_xVelocity, _xForce);
SWAP_POINTERS(_yVelocity, _yForce);
SWAP_POINTERS(_zVelocity, _zForce);
@@ -351,6 +385,88 @@ void FLUID_3D::step()
}
+
+// Set border collision model from RNA setting
+
+void FLUID_3D::setBorderCollisions() {
+
+
+ _colloPrev = *_borderColli; // saving the current value
+
+ // boundary conditions of the fluid domain
+ if (_colloPrev == 0)
+ {
+ // No collisions
+ _domainBcFront = false;
+ _domainBcTop = false;
+ _domainBcLeft = false;
+ }
+ else if (_colloPrev == 2)
+ {
+ // Collide with all sides
+ _domainBcFront = true;
+ _domainBcTop = true;
+ _domainBcLeft = true;
+ }
+ else
+ {
+ // Default values: Collide with "walls", but not top and bottom
+ _domainBcFront = true;
+ _domainBcTop = false;
+ _domainBcLeft = true;
+ }
+
+ _domainBcBack = _domainBcFront;
+ _domainBcBottom = _domainBcTop;
+ _domainBcRight = _domainBcLeft;
+
+
+
+ // set side obstacles
+ int index;
+ for (int y = 0; y < _yRes; y++)
+ for (int x = 0; x < _xRes; x++)
+ {
+ // front slab
+ index = x + y * _xRes;
+ if(_domainBcBottom==1) _obstacles[index] = 1;
+ else _obstacles[index] = 0;
+
+ // back slab
+ index += _totalCells - _slabSize;
+ if(_domainBcTop==1) _obstacles[index] = 1;
+ else _obstacles[index] = 0;
+ }
+
+ for (int z = 0; z < _zRes; z++)
+ for (int x = 0; x < _xRes; x++)
+ {
+ // bottom slab
+ index = x + z * _slabSize;
+ if(_domainBcFront==1) _obstacles[index] = 1;
+ else _obstacles[index] = 0;
+
+ // top slab
+ index += _slabSize - _xRes;
+ if(_domainBcBack==1) _obstacles[index] = 1;
+ else _obstacles[index] = 0;
+ }
+
+ for (int z = 0; z < _zRes; z++)
+ for (int y = 0; y < _yRes; y++)
+ {
+ // left slab
+ index = y * _xRes + z * _slabSize;
+ if(_domainBcLeft==1) _obstacles[index] = 1;
+ else _obstacles[index] = 0;
+
+ // right slab
+ index += _xRes - 1;
+ if(_domainBcRight==1) _obstacles[index] = 1;
+ else _obstacles[index] = 0;
+ }
+}
+
//////////////////////////////////////////////////////////////////////
// helper function to dampen co-located grid artifacts of given arrays in intervals
// (only needed for velocity, strength (w) depends on testcase...
@@ -428,6 +544,10 @@ void FLUID_3D::artificialDampingExactSL(int pos) {
for (y = 1; y < _res[1]-1; y++)
for (x = 1+(y+z)%2; x < _res[0]-1; x+=2) {
index = x + y*_res[0] + posslab;
+ /*
+ * Uses xForce as temporary storage to allow other threads to read
+ * old values from xVelocityTemp
+ */
_xForce[index] = (1-w)*_xVelocityTemp[index] + 1./6. * w*(
_xVelocityTemp[index+1] + _xVelocityTemp[index-1] +
_xVelocityTemp[index+_res[0]] + _xVelocityTemp[index-_res[0]] +
@@ -450,6 +570,11 @@ void FLUID_3D::artificialDampingExactSL(int pos) {
for (y = 1; y < _res[1]-1; y++)
for (x = 1+(y+z+1)%2; x < _res[0]-1; x+=2) {
index = x + y*_res[0] + posslab;
+
+ /*
+ * Uses xForce as temporary storage to allow other threads to read
+ * old values from xVelocityTemp
+ */
_xForce[index] = (1-w)*_xVelocityTemp[index] + 1./6. * w*(
_xVelocityTemp[index+1] + _xVelocityTemp[index-1] +
_xVelocityTemp[index+_res[0]] + _xVelocityTemp[index-_res[0]] +
@@ -661,13 +786,13 @@ void FLUID_3D::project()
setObstacleBoundaries(_pressure, 0, _zRes);
// copy out the boundaries
- if(DOMAIN_BC_LEFT == 0) setNeumannX(_xVelocity, _res, 0, _zRes);
+ if(_domainBcLeft == 0) setNeumannX(_xVelocity, _res, 0, _zRes);
else setZeroX(_xVelocity, _res, 0, _zRes);
- if(DOMAIN_BC_TOP == 0) setNeumannY(_yVelocity, _res, 0, _zRes);
+ if(_domainBcFront == 0) setNeumannY(_yVelocity, _res, 0, _zRes);
else setZeroY(_yVelocity, _res, 0, _zRes);
- if(DOMAIN_BC_FRONT == 0) setNeumannZ(_zVelocity, _res, 0, _zRes);
+ if(_domainBcTop == 0) setNeumannZ(_zVelocity, _res, 0, _zRes);
else setZeroZ(_zVelocity, _res, 0, _zRes);
// calculate divergence
@@ -1060,13 +1185,13 @@ void FLUID_3D::advectMacCormackBegin(int zBegin, int zEnd)
{
Vec3Int res = Vec3Int(_xRes,_yRes,_zRes);
- if(DOMAIN_BC_LEFT == 0) copyBorderX(_xVelocityOld, res, zBegin, zEnd);
+ if(_domainBcLeft == 0) copyBorderX(_xVelocityOld, res, zBegin, zEnd);
else setZeroX(_xVelocityOld, res, zBegin, zEnd);
- if(DOMAIN_BC_TOP == 0) copyBorderY(_yVelocityOld, res, zBegin, zEnd);
+ if(_domainBcFront == 0) copyBorderY(_yVelocityOld, res, zBegin, zEnd);
else setZeroY(_yVelocityOld, res, zBegin, zEnd);
- if(DOMAIN_BC_FRONT == 0) copyBorderZ(_zVelocityOld, res, zBegin, zEnd);
+ if(_domainBcTop == 0) copyBorderZ(_zVelocityOld, res, zBegin, zEnd);
else setZeroZ(_zVelocityOld, res, zBegin, zEnd);
}
@@ -1114,13 +1239,13 @@ void FLUID_3D::advectMacCormackEnd2(int zBegin, int zEnd)
advectFieldMacCormack2(dt0, _xVelocityOld, _yVelocityOld, _zVelocityOld, _yVelocityOld, _yVelocityTemp, _yVelocity, t1, res, _obstacles, zBegin, zEnd);
advectFieldMacCormack2(dt0, _xVelocityOld, _yVelocityOld, _zVelocityOld, _zVelocityOld, _zVelocityTemp, _zVelocity, t1, res, _obstacles, zBegin, zEnd);
- if(DOMAIN_BC_LEFT == 0) copyBorderX(_xVelocityTemp, res, zBegin, zEnd);
+ if(_domainBcLeft == 0) copyBorderX(_xVelocityTemp, res, zBegin, zEnd);
else setZeroX(_xVelocityTemp, res, zBegin, zEnd);
- if(DOMAIN_BC_TOP == 0) copyBorderY(_yVelocityTemp, res, zBegin, zEnd);
+ if(_domainBcFront == 0) copyBorderY(_yVelocityTemp, res, zBegin, zEnd);
else setZeroY(_yVelocityTemp, res, zBegin, zEnd);
- if(DOMAIN_BC_FRONT == 0) copyBorderZ(_zVelocityTemp, res, zBegin, zEnd);
+ if(_domainBcTop == 0) copyBorderZ(_zVelocityTemp, res, zBegin, zEnd);
else setZeroZ(_zVelocityTemp, res, zBegin, zEnd);
setZeroBorder(_density, res, zBegin, zEnd);
diff --git a/intern/smoke/intern/FLUID_3D.h b/intern/smoke/intern/FLUID_3D.h
index ab121ef506e..c244180ee57 100644
--- a/intern/smoke/intern/FLUID_3D.h
+++ b/intern/smoke/intern/FLUID_3D.h
@@ -30,11 +30,15 @@
#include <cstdlib>
#include <cmath>
+#include <cstring>
#include <iostream>
#include "OBSTACLE.h"
// #include "WTURBULENCE.h"
#include "VEC3.h"
+// timestep default value for nice appearance
+#define DT_DEFAULT 0.1f;
+
using namespace std;
using namespace BasicVector;
class WTURBULENCE;
@@ -42,11 +46,11 @@ class WTURBULENCE;
class FLUID_3D
{
public:
- FLUID_3D(int *res, /* int amplify, */ float *p0, float dt);
+ FLUID_3D(int *res, /* int amplify, */ float *p0);
FLUID_3D() {};
virtual ~FLUID_3D();
- void initBlenderRNA(float *alpha, float *beta);
+ void initBlenderRNA(float *alpha, float *beta, float *dt_factor, float *vorticity, int *border_colli);
// create & allocate vector noise advection
void initVectorNoise(int amplify);
@@ -54,7 +58,7 @@ class FLUID_3D
void addSmokeColumn();
static void addSmokeTestCase(float* field, Vec3Int res);
- void step();
+ void step(float dt);
void addObstacle(OBSTACLE* obstacle);
const float* xVelocity() { return _xVelocity; };
@@ -110,11 +114,25 @@ class FLUID_3D
// simulation constants
float _dt;
+ float *_dtFactor;
float _vorticityEps;
float _heatDiffusion;
+ float *_vorticityRNA; // RNA-pointer.
float *_alpha; // for the buoyancy density term <-- as pointer to get blender RNA in here
float *_beta; // was _buoyancy <-- as pointer to get blender RNA in here
float _tempAmb; /* ambient temperature */
+ float _constantScaling;
+
+ bool _domainBcFront; // z
+ bool _domainBcTop; // y
+ bool _domainBcLeft; // x
+ bool _domainBcBack; // DOMAIN_BC_FRONT
+ bool _domainBcBottom; // DOMAIN_BC_TOP
+ bool _domainBcRight; // DOMAIN_BC_LEFT
+ int *_borderColli; // border collision rules <-- as pointer to get blender RNA in here
+ int _colloPrev; // To track whether value has been changed (to not
+ // have to recalibrate borders if nothing has changed
+ void setBorderCollisions();
// WTURBULENCE object, if active
// WTURBULENCE* _wTurbulence;
diff --git a/intern/smoke/intern/WTURBULENCE.cpp b/intern/smoke/intern/WTURBULENCE.cpp
index 6d43bc95471..917c510348a 100644
--- a/intern/smoke/intern/WTURBULENCE.cpp
+++ b/intern/smoke/intern/WTURBULENCE.cpp
@@ -825,13 +825,18 @@ void WTURBULENCE::stepTurbulenceFull(float dtOrg, float* xvel, float* yvel, floa
// get LU factorization of texture jacobian and apply
// it to unit vectors
sLU LU = computeLU(jacobian);
- float xUnwarped[] = {1.0f, 0.0f, 0.0f};
- float yUnwarped[] = {0.0f, 1.0f, 0.0f};
- float zUnwarped[] = {0.0f, 0.0f, 1.0f};
- float xWarped[] = {1.0f, 0.0f, 0.0f};
- float yWarped[] = {0.0f, 1.0f, 0.0f};
- float zWarped[] = {0.0f, 0.0f, 1.0f};
+ float xUnwarped[3], yUnwarped[3], zUnwarped[3];
+ float xWarped[3], yWarped[3], zWarped[3];
bool nonSingular = isNonsingular(LU);
+
+ xUnwarped[0] = 1.0f; xUnwarped[1] = 0.0f; xUnwarped[2] = 0.0f;
+ yUnwarped[0] = 0.0f; yUnwarped[1] = 1.0f; yUnwarped[2] = 0.0f;
+ zUnwarped[0] = 0.0f; zUnwarped[1] = 0.0f; zUnwarped[2] = 1.0f;
+
+ xWarped[0] = 1.0f; xWarped[1] = 0.0f; xWarped[2] = 0.0f;
+ yWarped[0] = 0.0f; yWarped[1] = 1.0f; yWarped[2] = 0.0f;
+ zWarped[0] = 0.0f; zWarped[1] = 0.0f; zWarped[2] = 1.0f;
+
#if 0
// UNUSED
float eigMax = 10.0f;
diff --git a/intern/smoke/intern/smoke_API.cpp b/intern/smoke/intern/smoke_API.cpp
index 427f4d53171..168395f370d 100644
--- a/intern/smoke/intern/smoke_API.cpp
+++ b/intern/smoke/intern/smoke_API.cpp
@@ -33,10 +33,10 @@
#include <math.h>
// y in smoke is z in blender
-extern "C" FLUID_3D *smoke_init(int *res, float *p0, float dt)
+extern "C" FLUID_3D *smoke_init(int *res, float *p0)
{
// smoke lib uses y as top-bottom/vertical axis where blender uses z
- FLUID_3D *fluid = new FLUID_3D(res, p0, dt);
+ FLUID_3D *fluid = new FLUID_3D(res, p0);
// printf("xres: %d, yres: %d, zres: %d\n", res[0], res[1], res[2]);
@@ -75,9 +75,41 @@ extern "C" size_t smoke_get_index2d(int x, int max_x, int y /*, int max_y, int z
return x + y * max_x;
}
-extern "C" void smoke_step(FLUID_3D *fluid, size_t framenr)
+extern "C" void smoke_step(FLUID_3D *fluid, size_t framenr, float fps)
{
- fluid->step();
+ /* stability values copied from wturbulence.cpp */
+ const int maxSubSteps = 25;
+ const float maxVel = 0.5f; /* TODO: maybe 0.5 is still too high, please confirm! -dg */
+
+ float dt = DT_DEFAULT;
+ float maxVelMag = 0.0f;
+ int totalSubsteps;
+ int substep = 0;
+ float dtSubdiv;
+
+ /* get max velocity and lower the dt value if it is too high */
+ size_t size= fluid->_xRes * fluid->_yRes * fluid->_zRes;
+
+ for(size_t i = 0; i < size; i++)
+ {
+ float vtemp = (fluid->_xVelocity[i]*fluid->_xVelocity[i]+fluid->_yVelocity[i]*fluid->_yVelocity[i]+fluid->_zVelocity[i]*fluid->_zVelocity[i]);
+ if(vtemp > maxVelMag)
+ maxVelMag = vtemp;
+ }
+
+ /* adapt timestep for different framerates, dt = 0.1 is at 25fps */
+ dt *= (25.0f / fps);
+
+ maxVelMag = sqrt(maxVelMag) * dt * (*(fluid->_dtFactor));
+ totalSubsteps = (int)((maxVelMag / maxVel) + 1.0f); /* always round up */
+ totalSubsteps = (totalSubsteps < 1) ? 1 : totalSubsteps;
+ totalSubsteps = (totalSubsteps > maxSubSteps) ? maxSubSteps : totalSubsteps;
+ dtSubdiv = (float)dt / (float)totalSubsteps;
+
+ // printf("totalSubsteps: %d, maxVelMag: %f, dt: %f\n", totalSubsteps, maxVelMag, dt);
+
+ for(substep = 0; substep < totalSubsteps; substep++)
+ fluid->step(dtSubdiv);
}
extern "C" void smoke_turbulence_step(WTURBULENCE *wt, FLUID_3D *fluid)
@@ -85,9 +117,9 @@ extern "C" void smoke_turbulence_step(WTURBULENCE *wt, FLUID_3D *fluid)
wt->stepTurbulenceFull(fluid->_dt/fluid->_dx, fluid->_xVelocity, fluid->_yVelocity, fluid->_zVelocity, fluid->_obstacles);
}
-extern "C" void smoke_initBlenderRNA(FLUID_3D *fluid, float *alpha, float *beta)
+extern "C" void smoke_initBlenderRNA(FLUID_3D *fluid, float *alpha, float *beta, float *dt_factor, float *vorticity, int *border_colli)
{
- fluid->initBlenderRNA(alpha, beta);
+ fluid->initBlenderRNA(alpha, beta, dt_factor, vorticity, border_colli);
}
extern "C" void smoke_dissolve(FLUID_3D *fluid, int speed, int log)
diff --git a/intern/string/intern/STR_String.cpp b/intern/string/intern/STR_String.cpp
index d468cd4bdbd..3e035fd7905 100644
--- a/intern/string/intern/STR_String.cpp
+++ b/intern/string/intern/STR_String.cpp
@@ -359,7 +359,7 @@ int STR_String::Find(char c, int pos) const
//
-// Find the first occurence of <str> in the string
+// Find the first occurrence of <str> in the string
//
int STR_String::Find(const char *str, int pos) const
{
@@ -373,7 +373,7 @@ int STR_String::Find(const char *str, int pos) const
//
-// Find the first occurence of <str> in the string
+// Find the first occurrence of <str> in the string
//
int STR_String::Find(rcSTR_String str, int pos) const
{
@@ -387,7 +387,7 @@ int STR_String::Find(rcSTR_String str, int pos) const
//
-// Find the last occurence of <c> in the string
+// Find the last occurrence of <c> in the string
//
int STR_String::RFind(char c) const
{
@@ -399,7 +399,7 @@ int STR_String::RFind(char c) const
//
-// Find the first occurence of any character in character set <set> in the string
+// Find the first occurrence of any character in character set <set> in the string
//
int STR_String::FindOneOf(const char *set, int pos) const
{
diff --git a/po/Makefile b/po/Makefile
index b656a00fb38..bbd1caa68ad 100644
--- a/po/Makefile
+++ b/po/Makefile
@@ -51,7 +51,7 @@ $(DIR)%/LC_MESSAGES/blender.mo: %.po
mkdir -p $(@D)
msgfmt -o $@ $<
ifeq ($(BF_VERIFY_MO_FILES), true)
- @cmp $@ $(NANBLENDERHOME)/bin/.blender/locale/$(basename $<)/LC_MESSAGES/blender.mo \
+ @cmp $@ $(NANBLENDERHOME)/release/bin/.blender/locale/$(basename $<)/LC_MESSAGES/blender.mo \
|| ( echo Mismatch between generated and commited $(basename $<).mo catalog && \
rm -f $@ && false )
endif
diff --git a/projectfiles_vc9/blender/BPY_python/BPY_python.vcproj b/projectfiles_vc9/blender/BPY_python/BPY_python.vcproj
index 29a297d6f6a..4a79d9dbbd0 100644
--- a/projectfiles_vc9/blender/BPY_python/BPY_python.vcproj
+++ b/projectfiles_vc9/blender/BPY_python/BPY_python.vcproj
@@ -43,7 +43,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\bsp\include;..\..\..\..\build\msvc_9\intern\bmfont\include;..\..\..\..\build\msvc_9\intern\iksolver\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\lib\windows\python\include\python3.1;..\..\..\..\lib\windows\ffmpeg\include;..\..\..\source\blender;..\..\..\source\blender\avi;..\..\..\source\blender\img;..\..\..\source\blender\imbuf;..\..\..\source\blender\blenlib;..\..\..\source\blender\python;..\..\..\source\blender\include;..\..\..\source\blender\blenkernel;..\..\..\source\blender\makesrna;..\..\..\source\blender\makesdna;..\..\..\source\blender\blenloader;..\..\..\source\blender\renderconverter;..\..\..\source\blender\render\extern\include;..\..\..\source\blender\radiosity\extern\include;..\..\..\source\kernel\gen_system;..\..\..\source\gameengine\SoundSystem;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\blender\gpu;..\..\..\source\blender\windowmanager;..\..\..\source\blender\editors\include"
+ AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\bsp\include;..\..\..\..\build\msvc_9\intern\bmfont\include;..\..\..\..\build\msvc_9\intern\iksolver\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\lib\windows\python\include\python3.1;..\..\..\..\lib\windows\ffmpeg\include;..\..\..\source\blender;..\..\..\source\blender\avi;..\..\..\source\blender\img;..\..\..\source\blender\imbuf;..\..\..\source\blender\blenlib;..\..\..\source\blender\python;..\..\..\source\blender\include;..\..\..\source\blender\blenkernel;..\..\..\source\blender\makesrna;..\..\..\source\blender\makesdna;..\..\..\source\blender\blenloader;..\..\..\source\blender\renderconverter;..\..\..\source\blender\render\extern\include;..\..\..\source\blender\radiosity\extern\include;..\..\..\source\kernel\gen_system;..\..\..\source\gameengine\SoundSystem;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\blender\gpu;..\..\..\source\blender\windowmanager;..\..\..\source\blender\editors\include;..\..\..\intern\audaspace\intern"
PreprocessorDefinitions="_DEBUG,WIN32,_LIB;WITH_FFMPEG"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
@@ -121,7 +121,7 @@
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\bsp\include;..\..\..\..\build\msvc_9\intern\bmfont\include;..\..\..\..\build\msvc_9\intern\iksolver\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\lib\windows\python\include\python3.1;..\..\..\..\lib\windows\ffmpeg\include;..\..\..\source\blender;..\..\..\source\blender\avi;..\..\..\source\blender\img;..\..\..\source\blender\imbuf;..\..\..\source\blender\blenlib;..\..\..\source\blender\python;..\..\..\source\blender\include;..\..\..\source\blender\blenkernel;..\..\..\source\blender\makesrna;..\..\..\source\blender\makesdna;..\..\..\source\blender\blenloader;..\..\..\source\blender\renderconverter;..\..\..\source\blender\render\extern\include;..\..\..\source\blender\radiosity\extern\include;..\..\..\source\kernel\gen_system;..\..\..\source\gameengine\SoundSystem;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\blender\gpu;..\..\..\source\blender\windowmanager;..\..\..\source\blender\editors\include"
+ AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\bsp\include;..\..\..\..\build\msvc_9\intern\bmfont\include;..\..\..\..\build\msvc_9\intern\iksolver\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\lib\windows\python\include\python3.1;..\..\..\..\lib\windows\ffmpeg\include;..\..\..\source\blender;..\..\..\source\blender\avi;..\..\..\source\blender\img;..\..\..\source\blender\imbuf;..\..\..\source\blender\blenlib;..\..\..\source\blender\python;..\..\..\source\blender\include;..\..\..\source\blender\blenkernel;..\..\..\source\blender\makesrna;..\..\..\source\blender\makesdna;..\..\..\source\blender\blenloader;..\..\..\source\blender\renderconverter;..\..\..\source\blender\render\extern\include;..\..\..\source\blender\radiosity\extern\include;..\..\..\source\kernel\gen_system;..\..\..\source\gameengine\SoundSystem;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\blender\gpu;..\..\..\source\blender\windowmanager;..\..\..\source\blender\editors\include;..\..\..\intern\audaspace\intern"
PreprocessorDefinitions="WIN32,NDEBUG,_LIB"
StringPooling="true"
RuntimeLibrary="0"
@@ -198,7 +198,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\bsp\include;..\..\..\..\build\msvc_9\intern\bmfont\include;..\..\..\..\build\msvc_9\intern\iksolver\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\lib\windows\python\include\python3.1;..\..\..\..\lib\windows\ffmpeg\include;..\..\..\source\blender;..\..\..\source\blender\avi;..\..\..\source\blender\img;..\..\..\source\blender\imbuf;..\..\..\source\blender\blenlib;..\..\..\source\blender\python;..\..\..\source\blender\include;..\..\..\source\blender\blenkernel;..\..\..\source\blender\makesrna;..\..\..\source\blender\makesdna;..\..\..\source\blender\blenloader;..\..\..\source\blender\renderconverter;..\..\..\source\blender\render\extern\include;..\..\..\source\blender\radiosity\extern\include;..\..\..\source\kernel\gen_system;..\..\..\source\gameengine\SoundSystem;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\blender\gpu;..\..\..\source\blender\windowmanager;..\..\..\source\blender\editors\include"
+ AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\bsp\include;..\..\..\..\build\msvc_9\intern\bmfont\include;..\..\..\..\build\msvc_9\intern\iksolver\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\lib\windows\python\include\python3.1;..\..\..\..\lib\windows\ffmpeg\include;..\..\..\source\blender;..\..\..\source\blender\avi;..\..\..\source\blender\img;..\..\..\source\blender\imbuf;..\..\..\source\blender\blenlib;..\..\..\source\blender\python;..\..\..\source\blender\include;..\..\..\source\blender\blenkernel;..\..\..\source\blender\makesrna;..\..\..\source\blender\makesdna;..\..\..\source\blender\blenloader;..\..\..\source\blender\renderconverter;..\..\..\source\blender\render\extern\include;..\..\..\source\blender\radiosity\extern\include;..\..\..\source\kernel\gen_system;..\..\..\source\gameengine\SoundSystem;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\blender\gpu;..\..\..\source\blender\windowmanager;..\..\..\source\blender\editors\include;..\..\..\intern\audaspace\intern"
PreprocessorDefinitions="_DEBUG,WIN32,_LIB;WITH_FFMPEG"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
@@ -275,7 +275,7 @@
<Tool
Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\bsp\include;..\..\..\..\build\msvc_9\intern\bmfont\include;..\..\..\..\build\msvc_9\intern\iksolver\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\lib\windows\python\include\python3.1;..\..\..\..\lib\windows\ffmpeg\include;..\..\..\source\blender;..\..\..\source\blender\avi;..\..\..\source\blender\img;..\..\..\source\blender\imbuf;..\..\..\source\blender\blenlib;..\..\..\source\blender\python;..\..\..\source\blender\include;..\..\..\source\blender\blenkernel;..\..\..\source\blender\makesrna;..\..\..\source\blender\makesdna;..\..\..\source\blender\blenloader;..\..\..\source\blender\renderconverter;..\..\..\source\blender\render\extern\include;..\..\..\source\blender\radiosity\extern\include;..\..\..\source\kernel\gen_system;..\..\..\source\gameengine\SoundSystem;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\blender\gpu;..\..\..\source\blender\windowmanager;..\..\..\source\blender\editors\include"
+ AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\bsp\include;..\..\..\..\build\msvc_9\intern\bmfont\include;..\..\..\..\build\msvc_9\intern\iksolver\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\lib\windows\python\include\python3.1;..\..\..\..\lib\windows\ffmpeg\include;..\..\..\source\blender;..\..\..\source\blender\avi;..\..\..\source\blender\img;..\..\..\source\blender\imbuf;..\..\..\source\blender\blenlib;..\..\..\source\blender\python;..\..\..\source\blender\include;..\..\..\source\blender\blenkernel;..\..\..\source\blender\makesrna;..\..\..\source\blender\makesdna;..\..\..\source\blender\blenloader;..\..\..\source\blender\renderconverter;..\..\..\source\blender\render\extern\include;..\..\..\source\blender\radiosity\extern\include;..\..\..\source\kernel\gen_system;..\..\..\source\gameengine\SoundSystem;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\blender\gpu;..\..\..\source\blender\windowmanager;..\..\..\source\blender\editors\include;..\..\..\intern\audaspace\intern"
PreprocessorDefinitions="WIN32,NDEBUG,_LIB"
StringPooling="true"
RuntimeLibrary="0"
@@ -422,6 +422,10 @@
RelativePath="..\..\..\source\blender\python\generic\mathutils_vector.c"
>
</File>
+ <File
+ RelativePath="..\..\..\source\blender\python\generic\noise.c"
+ >
+ </File>
</Filter>
</Filter>
<Filter
@@ -464,6 +468,10 @@
>
</File>
<File
+ RelativePath="..\..\..\source\blender\python\intern\bpy_rna_callback.h"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\blender\python\intern\bpy_util.h"
>
</File>
diff --git a/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj b/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj
index f656fb49388..a3910a2c810 100644
--- a/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj
+++ b/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj
@@ -655,6 +655,10 @@
>
</File>
<File
+ RelativePath="..\..\..\source\blender\blenkernel\intern\idcode.c"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\blender\blenkernel\intern\idprop.c"
>
</File>
@@ -767,6 +771,10 @@
>
</File>
<File
+ RelativePath="..\..\..\source\blender\blenkernel\intern\seqcache.c"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\blender\blenkernel\intern\seqeffects.c"
>
</File>
@@ -980,6 +988,10 @@
>
</File>
<File
+ RelativePath="..\..\..\source\blender\blenkernel\BKE_gpencil.h"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\blender\blenkernel\BKE_group.h"
>
</File>
@@ -988,6 +1000,14 @@
>
</File>
<File
+ RelativePath="..\..\..\source\blender\blenkernel\BKE_idcode.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\blenkernel\BKE_idprop.h"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\blender\blenkernel\BKE_image.h"
>
</File>
@@ -1180,10 +1200,6 @@
>
</File>
<File
- RelativePath="..\..\..\source\blender\blenkernel\Makefile"
- >
- </File>
- <File
RelativePath="..\..\..\source\blender\blenkernel\nla_private.h"
>
</File>
diff --git a/projectfiles_vc9/blender/editors/ED_editors.vcproj b/projectfiles_vc9/blender/editors/ED_editors.vcproj
index ae7fc04b766..60a24a6d0b2 100644
--- a/projectfiles_vc9/blender/editors/ED_editors.vcproj
+++ b/projectfiles_vc9/blender/editors/ED_editors.vcproj
@@ -356,7 +356,7 @@
Filter="c"
>
<File
- RelativePath="..\..\..\source\blender\editors\datafiles\B.blend.c"
+ RelativePath="..\..\..\source\blender\editors\datafiles\add.png.c"
>
</File>
<File
@@ -372,10 +372,78 @@
>
</File>
<File
+ RelativePath="..\..\..\source\blender\editors\datafiles\blob.png.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\datafiles\blur.png.c"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\blender\editors\datafiles\bmonofont.ttf.c"
>
</File>
<File
+ RelativePath="..\..\..\source\blender\editors\datafiles\clay.png.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\datafiles\clone.png.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\datafiles\crease.png.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\datafiles\darken.png.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\datafiles\draw.png.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\datafiles\fill.png.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\datafiles\flatten.png.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\datafiles\grab.png.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\datafiles\inflate.png.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\datafiles\layer.png.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\datafiles\lighten.png.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\datafiles\mix.png.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\datafiles\multiply.png.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\datafiles\nudge.png.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\datafiles\pinch.png.c"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\blender\editors\datafiles\preview.blend.c"
>
</File>
@@ -384,9 +452,53 @@
>
</File>
<File
+ RelativePath="..\..\..\source\blender\editors\datafiles\scrape.png.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\datafiles\smear.png.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\datafiles\smooth.png.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\datafiles\snake_hook.png.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\datafiles\soften.png.c"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\blender\editors\datafiles\splash.png.c"
>
</File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\datafiles\startup.blend.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\datafiles\subtract.png.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\datafiles\texdraw.png.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\datafiles\thumb.png.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\datafiles\twist.png.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\datafiles\vertexdraw.png.c"
+ >
+ </File>
</Filter>
<Filter
Name="interface"
@@ -1343,6 +1455,10 @@
RelativePath="..\..\..\source\blender\editors\sculpt_paint\sculpt_intern.h"
>
</File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\sculpt_paint\sculpt_undo.c"
+ >
+ </File>
</Filter>
<Filter
Name="uvedit"
@@ -1468,10 +1584,6 @@
>
</File>
<File
- RelativePath="..\..\..\source\blender\editors\space_logic\logic_header.c"
- >
- </File>
- <File
RelativePath="..\..\..\source\blender\editors\space_logic\logic_intern.h"
>
</File>
diff --git a/projectfiles_vc9/blender/gpu/BL_gpu.vcproj b/projectfiles_vc9/blender/gpu/BL_gpu.vcproj
index d92121aacf6..f69af190044 100644
--- a/projectfiles_vc9/blender/gpu/BL_gpu.vcproj
+++ b/projectfiles_vc9/blender/gpu/BL_gpu.vcproj
@@ -508,7 +508,7 @@
Filter="h;hpp;hxx;hm;inl"
>
<File
- RelativePath="..\..\..\source\blender\gpu\gpu_buffers.h"
+ RelativePath="..\..\..\source\blender\gpu\GPU_buffers.h"
>
</File>
<File
diff --git a/projectfiles_vc9/blender/makesrna/RNA_makesrna.vcproj b/projectfiles_vc9/blender/makesrna/RNA_makesrna.vcproj
index c9a0f00f0f2..a1028e9d83d 100644
--- a/projectfiles_vc9/blender/makesrna/RNA_makesrna.vcproj
+++ b/projectfiles_vc9/blender/makesrna/RNA_makesrna.vcproj
@@ -953,7 +953,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender;..\..\..\source\blender\blenlib;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\editors\include;..\..\..\source\blender\blenkernel;..\..\..\..\lib\windows\pthreads\include;..\..\..\source\blender\render\extern\include;..\..\..\source\blender\gpu;..\..\..\source\blender\windowmanager;..\..\..\source\blender\imbuf;..\..\..\source\blender\makesrna\internal"
+ AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\build\msvc_9\intern\memutil\include;..\..\..\source\blender;..\..\..\source\blender\blenlib;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\editors\include;..\..\..\source\blender\blenkernel;..\..\..\..\lib\windows\pthreads\include;..\..\..\source\blender\render\extern\include;..\..\..\source\blender\gpu;..\..\..\source\blender\windowmanager;..\..\..\source\blender\imbuf;..\..\..\source\blender\makesrna\internal"
PreprocessorDefinitions="_DEBUG,WIN32,_CONSOLE"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
@@ -1048,7 +1048,7 @@
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender;..\..\..\source\blender\blenlib;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\editors\include;..\..\..\source\blender\blenkernel;..\..\..\..\lib\windows\pthreads\include;..\..\..\source\blender\render\extern\include;..\..\..\source\blender\gpu;..\..\..\source\blender\windowmanager;..\..\..\source\blender\imbuf;..\..\..\source\blender\makesrna\internal"
+ AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\build\msvc_9\intern\memutil\include;..\..\..\source\blender;..\..\..\source\blender\blenlib;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\editors\include;..\..\..\source\blender\blenkernel;..\..\..\..\lib\windows\pthreads\include;..\..\..\source\blender\render\extern\include;..\..\..\source\blender\gpu;..\..\..\source\blender\windowmanager;..\..\..\source\blender\imbuf;..\..\..\source\blender\makesrna\internal"
PreprocessorDefinitions="NDEBUG,WIN32,_CONSOLE;GAMEBLENDER=1;WITH_SDL;WITH_OPENAL;WITH_JACK"
StringPooling="true"
RuntimeLibrary="0"
@@ -1141,7 +1141,7 @@
<Tool
Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender;..\..\..\source\blender\blenlib;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\editors\include;..\..\..\source\blender\blenkernel;..\..\..\..\lib\windows\pthreads\include;..\..\..\source\blender\render\extern\include;..\..\..\source\blender\gpu;..\..\..\source\blender\windowmanager;..\..\..\source\blender\imbuf;..\..\..\source\blender\makesrna\internal"
+ AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\build\msvc_9\intern\memutil\include;..\..\..\source\blender;..\..\..\source\blender\blenlib;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\editors\include;..\..\..\source\blender\blenkernel;..\..\..\..\lib\windows\pthreads\include;..\..\..\source\blender\render\extern\include;..\..\..\source\blender\gpu;..\..\..\source\blender\windowmanager;..\..\..\source\blender\imbuf;..\..\..\source\blender\makesrna\internal"
PreprocessorDefinitions="NDEBUG,WIN32,_CONSOLE"
StringPooling="true"
RuntimeLibrary="2"
@@ -1234,7 +1234,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender;..\..\..\source\blender\blenlib;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\editors\include;..\..\..\source\blender\blenkernel;..\..\..\..\lib\windows\pthreads\include;..\..\..\source\blender\render\extern\include;..\..\..\source\blender\gpu;..\..\..\source\blender\windowmanager;..\..\..\source\blender\imbuf;..\..\..\source\blender\makesrna\internal"
+ AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\build\msvc_9\intern\memutil\include;..\..\..\source\blender;..\..\..\source\blender\blenlib;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\editors\include;..\..\..\source\blender\blenkernel;..\..\..\..\lib\windows\pthreads\include;..\..\..\source\blender\render\extern\include;..\..\..\source\blender\gpu;..\..\..\source\blender\windowmanager;..\..\..\source\blender\imbuf;..\..\..\source\blender\makesrna\internal"
PreprocessorDefinitions="_DEBUG;WIN32;_CONSOLE;GAMEBLENDER=1;WITH_SDL;WITH_OPENAL;WITH_JACK"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
@@ -1330,7 +1330,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender;..\..\..\source\blender\blenlib;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\editors\include;..\..\..\source\blender\blenkernel;..\..\..\..\lib\windows\pthreads\include;..\..\..\source\blender\render\extern\include;..\..\..\source\blender\gpu;..\..\..\source\blender\windowmanager;..\..\..\source\blender\imbuf;..\..\..\source\blender\makesrna\internal"
+ AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\build\msvc_9\intern\memutil\include;..\..\..\source\blender;..\..\..\source\blender\blenlib;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\editors\include;..\..\..\source\blender\blenkernel;..\..\..\..\lib\windows\pthreads\include;..\..\..\source\blender\render\extern\include;..\..\..\source\blender\gpu;..\..\..\source\blender\windowmanager;..\..\..\source\blender\imbuf;..\..\..\source\blender\makesrna\internal"
PreprocessorDefinitions="_DEBUG,WIN32,_CONSOLE;GAMEBLENDER=1;WITH_SDL;WITH_OPENAL;WITH_JACK"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
@@ -1426,7 +1426,7 @@
<Tool
Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender;..\..\..\source\blender\blenlib;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\editors\include;..\..\..\source\blender\blenkernel;..\..\..\..\lib\windows\pthreads\include;..\..\..\source\blender\render\extern\include;..\..\..\source\blender\gpu;..\..\..\source\blender\windowmanager;..\..\..\source\blender\imbuf;..\..\..\source\blender\makesrna\internal"
+ AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\build\msvc_9\intern\memutil\include;..\..\..\source\blender;..\..\..\source\blender\blenlib;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\editors\include;..\..\..\source\blender\blenkernel;..\..\..\..\lib\windows\pthreads\include;..\..\..\source\blender\render\extern\include;..\..\..\source\blender\gpu;..\..\..\source\blender\windowmanager;..\..\..\source\blender\imbuf;..\..\..\source\blender\makesrna\internal"
PreprocessorDefinitions="NDEBUG,WIN32,_CONSOLE;GAMEBLENDER=1;WITH_SDL;WITH_OPENAL;WITH_JACK"
StringPooling="true"
RuntimeLibrary="0"
diff --git a/projectfiles_vc9/blender/makesrna/RNA_rna.vcproj b/projectfiles_vc9/blender/makesrna/RNA_rna.vcproj
index ae04b3e4f57..2a957c9cfe0 100644
--- a/projectfiles_vc9/blender/makesrna/RNA_rna.vcproj
+++ b/projectfiles_vc9/blender/makesrna/RNA_rna.vcproj
@@ -463,7 +463,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\lib\windows\pthreads\include;..\..\..\source\blender\imbuf;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\makesrna\intern;..\..\..\source\blender\blenlib;..\..\..\source\blender\blenkernel;..\..\..\source\blender\ikplugin;..\..\..\source\blender\windowmanager;..\..\..\source\blender\editors\include;..\..\..\source\blender\gpu;..\..\..\source\blender\render\extern\include"
+ AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\build\msvc_9\intern\memutil\include;..\..\..\..\lib\windows\pthreads\include;..\..\..\source\blender\imbuf;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\makesrna\intern;..\..\..\source\blender\blenlib;..\..\..\source\blender\blenkernel;..\..\..\source\blender\ikplugin;..\..\..\source\blender\windowmanager;..\..\..\source\blender\editors\include;..\..\..\source\blender\gpu;..\..\..\source\blender\render\extern\include"
PreprocessorDefinitions="WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;GAMEBLENDER=1"
MinimalRebuild="true"
BasicRuntimeChecks="3"
@@ -534,7 +534,7 @@
Name="VCCLCompilerTool"
Optimization="2"
EnableIntrinsicFunctions="true"
- AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\lib\windows\pthreads\include;..\..\..\source\blender\imbuf;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\makesrna\intern;..\..\..\source\blender\blenlib;..\..\..\source\blender\blenkernel;..\..\..\source\blender\ikplugin;..\..\..\source\blender\windowmanager;..\..\..\source\blender\editors\include;..\..\..\source\blender\gpu;..\..\..\source\blender\render\extern\include"
+ AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\build\msvc_9\intern\memutil\include;..\..\..\..\lib\windows\pthreads\include;..\..\..\source\blender\imbuf;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\makesrna\intern;..\..\..\source\blender\blenlib;..\..\..\source\blender\blenkernel;..\..\..\source\blender\ikplugin;..\..\..\source\blender\windowmanager;..\..\..\source\blender\editors\include;..\..\..\source\blender\gpu;..\..\..\source\blender\render\extern\include"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;GAMEBLENDER=1"
MinimalRebuild="true"
RuntimeLibrary="0"
diff --git a/release/Makefile b/release/Makefile
index 809ac548724..bef76b349b2 100644
--- a/release/Makefile
+++ b/release/Makefile
@@ -16,7 +16,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
@@ -114,8 +114,8 @@ install: package
ifneq ($(OS), darwin)
@[ ! -d $(OCGDIR)/bin/.blender ] || \
cp -r $(OCGDIR)/bin/.blender $(DISTDIR)
- @cp $(NANBLENDERHOME)/bin/.blender/.Blanguages $(CONFDIR)
- @cp $(NANBLENDERHOME)/bin/.blender/.bfont.ttf $(CONFDIR)
+ @cp $(NANBLENDERHOME)/release/bin/.blender/.Blanguages $(CONFDIR)
+ @cp $(NANBLENDERHOME)/release/bin/.blender/.bfont.ttf $(CONFDIR)
endif
@echo "----> Copy blender$(EXT0) executable"
ifeq ($(TYPE),-static)
diff --git a/release/VERSION b/release/VERSION
index 49d0a5da421..c43732bd65a 100644
--- a/release/VERSION
+++ b/release/VERSION
@@ -1 +1 @@
-2.5-alpha2
+2.5-beta
diff --git a/bin/.blender/.Blanguages b/release/bin/.blender/.Blanguages
index 9f3b3ef80dc..9f3b3ef80dc 100644
--- a/bin/.blender/.Blanguages
+++ b/release/bin/.blender/.Blanguages
diff --git a/bin/.blender/.bfont.ttf b/release/bin/.blender/.bfont.ttf
index 58cd6b5e61e..58cd6b5e61e 100644
--- a/bin/.blender/.bfont.ttf
+++ b/release/bin/.blender/.bfont.ttf
Binary files differ
diff --git a/release/bin/blender-thumbnailer.py b/release/bin/blender-thumbnailer.py
new file mode 100755
index 00000000000..27d6259d172
--- /dev/null
+++ b/release/bin/blender-thumbnailer.py
@@ -0,0 +1,131 @@
+#!/usr/bin/python
+
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+"""
+Thumbnailer runs with python 2.6 and 3.x.
+To run automatically with nautilus:
+ gconftool --type boolean --set /desktop/gnome/thumbnailers/application@x-blender/enable true
+ gconftool --type string --set /desktop/gnome/thumbnailers/application@x-blender/command "blender-thumbnailer.py %i %o"
+"""
+
+import struct
+
+def blend_extract_thumb(path):
+ import os
+
+ # def MAKE_ID(tag): ord(tag[0])<<24 | ord(tag[1])<<16 | ord(tag[2])<<8 | ord(tag[3])
+ REND = 1145980242 # MAKE_ID(b'REND')
+ TEST = 1414743380 # MAKE_ID(b'TEST')
+
+ blendfile = open(path, 'rb')
+
+ head = blendfile.read(12)
+
+ if head[0:2] == b'\x1f\x8b': # gzip magic
+ import gzip
+ blendfile.close()
+ blendfile = gzip.open(path, 'rb')
+ head = blendfile.read(12)
+
+ if not head.startswith(b'BLENDER'):
+ blendfile.close()
+ return None, 0, 0
+
+ is_64_bit = (head[7] == b'-')
+
+ # true for PPC, false for X86
+ is_big_endian = (head[8] == b'V')
+
+ # blender pre 2.5 had no thumbs
+ if head[9:11] <= b'24':
+ return None, 0, 0
+
+ sizeof_bhead = 24 if is_64_bit else 20
+ int_endian_pair = '>ii' if is_big_endian else '<ii'
+
+ while True:
+ bhead = blendfile.read(sizeof_bhead)
+
+ if len(bhead) < sizeof_bhead:
+ return None, 0, 0
+
+ code, length = struct.unpack(int_endian_pair, bhead[0:8]) # 8 == sizeof(int) * 2
+
+ if code == REND:
+ blendfile.seek(length, os.SEEK_CUR)
+ else:
+ break
+
+
+ if code != TEST:
+ return None, 0, 0
+
+ try:
+ x, y = struct.unpack(int_endian_pair, blendfile.read(8)) # 8 == sizeof(int) * 2
+ except struct.error:
+ return None, 0, 0
+
+ length -= 8 # sizeof(int) * 2
+
+ if length != x * y * 4:
+ return None, 0, 0
+
+ image_buffer = blendfile.read(length)
+
+ if len(image_buffer) != length:
+ return None, 0, 0
+
+ return image_buffer, x, y
+
+
+def write_png(buf, width, height):
+ import zlib
+
+ # reverse the vertical line order and add null bytes at the start
+ width_byte_4 = width * 4
+ raw_data = b"".join([b'\x00' + buf[span:span + width_byte_4] for span in range((height - 1) * width * 4, -1, - width_byte_4)])
+
+ def png_pack(png_tag, data):
+ chunk_head = png_tag + data
+ return struct.pack("!I", len(data)) + chunk_head + struct.pack("!I", 0xFFFFFFFF & zlib.crc32(chunk_head))
+
+ return b"".join([
+ b'\x89PNG\r\n\x1a\n',
+ png_pack(b'IHDR', struct.pack("!2I5B", width, height, 8, 6, 0, 0, 0)),
+ png_pack(b'IDAT', zlib.compress(raw_data, 9)),
+ png_pack(b'IEND', b'')])
+
+
+if __name__ == '__main__':
+ import sys
+
+ if len(sys.argv) < 2:
+ print("Expected 2 arguments <input.blend> <output.png>")
+ else:
+ file_in = sys.argv[-2]
+
+ buf, width, height = blend_extract_thumb(file_in)
+
+ if buf:
+ file_out = sys.argv[-1]
+
+ f = open(file_out, "wb")
+ f.write(write_png(buf, width, height))
+ f.close()
diff --git a/release/datafiles/brushicons/add.png b/release/datafiles/brushicons/add.png
new file mode 100644
index 00000000000..ad041bed130
--- /dev/null
+++ b/release/datafiles/brushicons/add.png
Binary files differ
diff --git a/release/datafiles/brushicons/blob.png b/release/datafiles/brushicons/blob.png
new file mode 100644
index 00000000000..1d63d1e873c
--- /dev/null
+++ b/release/datafiles/brushicons/blob.png
Binary files differ
diff --git a/release/datafiles/brushicons/blur.png b/release/datafiles/brushicons/blur.png
new file mode 100644
index 00000000000..6b8fc4b6053
--- /dev/null
+++ b/release/datafiles/brushicons/blur.png
Binary files differ
diff --git a/release/datafiles/brushicons/clay.png b/release/datafiles/brushicons/clay.png
new file mode 100644
index 00000000000..dab73b7cbdd
--- /dev/null
+++ b/release/datafiles/brushicons/clay.png
Binary files differ
diff --git a/release/datafiles/brushicons/clone.png b/release/datafiles/brushicons/clone.png
new file mode 100644
index 00000000000..89677961d81
--- /dev/null
+++ b/release/datafiles/brushicons/clone.png
Binary files differ
diff --git a/release/datafiles/brushicons/crease.png b/release/datafiles/brushicons/crease.png
new file mode 100644
index 00000000000..ac057e081c1
--- /dev/null
+++ b/release/datafiles/brushicons/crease.png
Binary files differ
diff --git a/release/datafiles/brushicons/darken.png b/release/datafiles/brushicons/darken.png
new file mode 100644
index 00000000000..ee312c7a04f
--- /dev/null
+++ b/release/datafiles/brushicons/darken.png
Binary files differ
diff --git a/release/datafiles/brushicons/draw.png b/release/datafiles/brushicons/draw.png
new file mode 100644
index 00000000000..2cbc8052312
--- /dev/null
+++ b/release/datafiles/brushicons/draw.png
Binary files differ
diff --git a/release/datafiles/brushicons/fill.png b/release/datafiles/brushicons/fill.png
new file mode 100644
index 00000000000..654ec7b66fc
--- /dev/null
+++ b/release/datafiles/brushicons/fill.png
Binary files differ
diff --git a/release/datafiles/brushicons/flatten.png b/release/datafiles/brushicons/flatten.png
new file mode 100644
index 00000000000..401226be862
--- /dev/null
+++ b/release/datafiles/brushicons/flatten.png
Binary files differ
diff --git a/release/datafiles/brushicons/grab.png b/release/datafiles/brushicons/grab.png
new file mode 100644
index 00000000000..d3ebbef31ad
--- /dev/null
+++ b/release/datafiles/brushicons/grab.png
Binary files differ
diff --git a/release/datafiles/brushicons/inflate.png b/release/datafiles/brushicons/inflate.png
new file mode 100644
index 00000000000..f3ad313add8
--- /dev/null
+++ b/release/datafiles/brushicons/inflate.png
Binary files differ
diff --git a/release/datafiles/brushicons/layer.png b/release/datafiles/brushicons/layer.png
new file mode 100644
index 00000000000..df3b02fb766
--- /dev/null
+++ b/release/datafiles/brushicons/layer.png
Binary files differ
diff --git a/release/datafiles/brushicons/lighten.png b/release/datafiles/brushicons/lighten.png
new file mode 100644
index 00000000000..6dacf6dcc75
--- /dev/null
+++ b/release/datafiles/brushicons/lighten.png
Binary files differ
diff --git a/release/datafiles/brushicons/mix.png b/release/datafiles/brushicons/mix.png
new file mode 100644
index 00000000000..d871d241769
--- /dev/null
+++ b/release/datafiles/brushicons/mix.png
Binary files differ
diff --git a/release/datafiles/brushicons/multiply.png b/release/datafiles/brushicons/multiply.png
new file mode 100644
index 00000000000..2dd32463627
--- /dev/null
+++ b/release/datafiles/brushicons/multiply.png
Binary files differ
diff --git a/release/datafiles/brushicons/nudge.png b/release/datafiles/brushicons/nudge.png
new file mode 100644
index 00000000000..84964e91f30
--- /dev/null
+++ b/release/datafiles/brushicons/nudge.png
Binary files differ
diff --git a/release/datafiles/brushicons/pinch.png b/release/datafiles/brushicons/pinch.png
new file mode 100644
index 00000000000..b60bcd66a36
--- /dev/null
+++ b/release/datafiles/brushicons/pinch.png
Binary files differ
diff --git a/release/datafiles/brushicons/scrape.png b/release/datafiles/brushicons/scrape.png
new file mode 100644
index 00000000000..9b7a57c1b9f
--- /dev/null
+++ b/release/datafiles/brushicons/scrape.png
Binary files differ
diff --git a/release/datafiles/brushicons/smear.png b/release/datafiles/brushicons/smear.png
new file mode 100644
index 00000000000..4cdc2205c46
--- /dev/null
+++ b/release/datafiles/brushicons/smear.png
Binary files differ
diff --git a/release/datafiles/brushicons/smooth.png b/release/datafiles/brushicons/smooth.png
new file mode 100644
index 00000000000..052e2452d13
--- /dev/null
+++ b/release/datafiles/brushicons/smooth.png
Binary files differ
diff --git a/release/datafiles/brushicons/snake_hook.png b/release/datafiles/brushicons/snake_hook.png
new file mode 100644
index 00000000000..f8351d909ee
--- /dev/null
+++ b/release/datafiles/brushicons/snake_hook.png
Binary files differ
diff --git a/release/datafiles/brushicons/soften.png b/release/datafiles/brushicons/soften.png
new file mode 100644
index 00000000000..2b2e9116f30
--- /dev/null
+++ b/release/datafiles/brushicons/soften.png
Binary files differ
diff --git a/release/datafiles/brushicons/subtract.png b/release/datafiles/brushicons/subtract.png
new file mode 100644
index 00000000000..c28975ecf20
--- /dev/null
+++ b/release/datafiles/brushicons/subtract.png
Binary files differ
diff --git a/release/datafiles/brushicons/texdraw.png b/release/datafiles/brushicons/texdraw.png
new file mode 100644
index 00000000000..1241349a15e
--- /dev/null
+++ b/release/datafiles/brushicons/texdraw.png
Binary files differ
diff --git a/release/datafiles/brushicons/thumb.png b/release/datafiles/brushicons/thumb.png
new file mode 100644
index 00000000000..8c39075fc8a
--- /dev/null
+++ b/release/datafiles/brushicons/thumb.png
Binary files differ
diff --git a/release/datafiles/brushicons/twist.png b/release/datafiles/brushicons/twist.png
new file mode 100644
index 00000000000..53904427660
--- /dev/null
+++ b/release/datafiles/brushicons/twist.png
Binary files differ
diff --git a/release/datafiles/brushicons/vertexdraw.png b/release/datafiles/brushicons/vertexdraw.png
new file mode 100644
index 00000000000..8bd2dc1be8a
--- /dev/null
+++ b/release/datafiles/brushicons/vertexdraw.png
Binary files differ
diff --git a/release/datafiles/splash.png b/release/datafiles/splash.png
index 78a44ba9cb5..89e195937bc 100644
--- a/release/datafiles/splash.png
+++ b/release/datafiles/splash.png
Binary files differ
diff --git a/release/plugins/Makefile b/release/plugins/Makefile
index 3ed2ee2161e..ee7086b331d 100644
--- a/release/plugins/Makefile
+++ b/release/plugins/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/release/plugins/bmake b/release/plugins/bmake
index f03e9270011..9740bfa716a 100644
--- a/release/plugins/bmake
+++ b/release/plugins/bmake
@@ -16,7 +16,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/release/plugins/sequence/Makefile b/release/plugins/sequence/Makefile
index 0e1463fae7f..ab847adf5fe 100644
--- a/release/plugins/sequence/Makefile
+++ b/release/plugins/sequence/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/release/plugins/texture/Makefile b/release/plugins/texture/Makefile
index 0e1463fae7f..ab847adf5fe 100644
--- a/release/plugins/texture/Makefile
+++ b/release/plugins/texture/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/release/scripts/io/engine_render_pov.py b/release/scripts/io/engine_render_pov.py
deleted file mode 100644
index 9cda4375ecc..00000000000
--- a/release/scripts/io/engine_render_pov.py
+++ /dev/null
@@ -1,1001 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-# <pep8 compliant>
-
-import bpy
-
-from math import atan, pi, degrees
-import subprocess
-import os
-import sys
-import time
-
-import platform as pltfrm
-
-if pltfrm.architecture()[0] == '64bit':
- bitness = 64
-else:
- bitness = 32
-
-
-def write_pov(filename, scene=None, info_callback=None):
- file = open(filename, 'w')
-
- # Only for testing
- if not scene:
- scene = bpy.data.scenes[0]
-
- render = scene.render
- world = scene.world
-
- def uniqueName(name, nameSeq):
-
- if name not in nameSeq:
- return name
-
- name_orig = name
- i = 1
- while name in nameSeq:
- name = '%s_%.3d' % (name_orig, i)
- i += 1
-
- return name
-
- def writeMatrix(matrix):
- file.write('\tmatrix <%.6f, %.6f, %.6f, %.6f, %.6f, %.6f, %.6f, %.6f, %.6f, %.6f, %.6f, %.6f>\n' %\
- (matrix[0][0], matrix[0][1], matrix[0][2], matrix[1][0], matrix[1][1], matrix[1][2], matrix[2][0], matrix[2][1], matrix[2][2], matrix[3][0], matrix[3][1], matrix[3][2]))
-
- def writeObjectMaterial(material):
- if material and material.transparency_method == 'RAYTRACE':
- file.write('\tinterior { ior %.6f }\n' % material.raytrace_transparency.ior)
-
- # Other interior args
- # fade_distance 2
- # fade_power [Value]
- # fade_color
-
- # dispersion
- # dispersion_samples
-
- materialNames = {}
- DEF_MAT_NAME = 'Default'
-
- def writeMaterial(material):
- # Assumes only called once on each material
-
- if material:
- name_orig = material.name
- else:
- name_orig = DEF_MAT_NAME
-
- name = materialNames[name_orig] = uniqueName(bpy.utils.clean_name(name_orig), materialNames)
-
- file.write('#declare %s = finish {\n' % name)
-
- if material:
- file.write('\tdiffuse %.3g\n' % material.diffuse_intensity)
- file.write('\tspecular %.3g\n' % material.specular_intensity)
-
- file.write('\tambient %.3g\n' % material.ambient)
- #file.write('\tambient rgb <%.3g, %.3g, %.3g>\n' % tuple([c*material.ambient for c in world.ambient_color])) # povray blends the global value
-
- # map hardness between 0.0 and 1.0
- roughness = ((1.0 - ((material.specular_hardness - 1.0) / 510.0)))
- # scale from 0.0 to 0.1
- roughness *= 0.1
- # add a small value because 0.0 is invalid
- roughness += (1 / 511.0)
-
- file.write('\troughness %.3g\n' % roughness)
-
- # 'phong 70.0 '
-
- if material.raytrace_mirror.enabled:
- raytrace_mirror = material.raytrace_mirror
- if raytrace_mirror.reflect_factor:
- file.write('\treflection {\n')
- file.write('\t\trgb <%.3g, %.3g, %.3g>' % tuple(material.mirror_color))
- file.write('\t\tfresnel 1 falloff %.3g exponent %.3g metallic %.3g} ' % (raytrace_mirror.fresnel, raytrace_mirror.fresnel_factor, raytrace_mirror.reflect_factor))
-
- else:
- file.write('\tdiffuse 0.8\n')
- file.write('\tspecular 0.2\n')
-
-
- # This is written into the object
- '''
- if material and material.transparency_method=='RAYTRACE':
- 'interior { ior %.3g} ' % material.raytrace_transparency.ior
- '''
-
- #file.write('\t\t\tcrand 1.0\n') # Sand granyness
- #file.write('\t\t\tmetallic %.6f\n' % material.spec)
- #file.write('\t\t\tphong %.6f\n' % material.spec)
- #file.write('\t\t\tphong_size %.6f\n' % material.spec)
- #file.write('\t\t\tbrilliance %.6f ' % (material.specular_hardness/256.0) # Like hardness
-
- file.write('}\n')
-
- def exportCamera():
- camera = scene.camera
- matrix = camera.matrix_world
-
- # compute resolution
- Qsize = float(render.resolution_x) / float(render.resolution_y)
-
- file.write('camera {\n')
- file.write('\tlocation <0, 0, 0>\n')
- file.write('\tlook_at <0, 0, -1>\n')
- file.write('\tright <%s, 0, 0>\n' % - Qsize)
- file.write('\tup <0, 1, 0>\n')
- file.write('\tangle %f \n' % (360.0 * atan(16.0 / camera.data.lens) / pi))
-
- file.write('\trotate <%.6f, %.6f, %.6f>\n' % tuple([degrees(e) for e in matrix.rotation_part().to_euler()]))
- file.write('\ttranslate <%.6f, %.6f, %.6f>\n' % (matrix[3][0], matrix[3][1], matrix[3][2]))
- file.write('}\n')
-
- def exportLamps(lamps):
- # Get all lamps
- for ob in lamps:
- lamp = ob.data
-
- matrix = ob.matrix_world
-
- color = tuple([c * lamp.energy for c in lamp.color]) # Colour is modified by energy
-
- file.write('light_source {\n')
- file.write('\t< 0,0,0 >\n')
- file.write('\tcolor rgb<%.3g, %.3g, %.3g>\n' % color)
-
- if lamp.type == 'POINT': # Point Lamp
- pass
- elif lamp.type == 'SPOT': # Spot
- file.write('\tspotlight\n')
-
- # Falloff is the main radius from the centre line
- file.write('\tfalloff %.2f\n' % (degrees(lamp.spot_size) / 2.0)) # 1 TO 179 FOR BOTH
- file.write('\tradius %.6f\n' % ((degrees(lamp.spot_size) / 2.0) * (1.0 - lamp.spot_blend)))
-
- # Blender does not have a tightness equivilent, 0 is most like blender default.
- file.write('\ttightness 0\n') # 0:10f
-
- file.write('\tpoint_at <0, 0, -1>\n')
- elif lamp.type == 'SUN':
- file.write('\tparallel\n')
- file.write('\tpoint_at <0, 0, -1>\n') # *must* be after 'parallel'
-
- elif lamp.type == 'AREA':
-
- size_x = lamp.size
- samples_x = lamp.shadow_ray_samples_x
- if lamp.shape == 'SQUARE':
- size_y = size_x
- samples_y = samples_x
- else:
- size_y = lamp.size_y
- samples_y = lamp.shadow_ray_samples_y
-
- file.write('\tarea_light <%d,0,0>,<0,0,%d> %d, %d\n' % (size_x, size_y, samples_x, samples_y))
- if lamp.shadow_ray_sampling_method == 'CONSTANT_JITTERED':
- if lamp.jitter:
- file.write('\tjitter\n')
- else:
- file.write('\tadaptive 1\n')
- file.write('\tjitter\n')
-
- if lamp.shadow_method == 'NOSHADOW':
- file.write('\tshadowless\n')
-
- file.write('\tfade_distance %.6f\n' % lamp.distance)
- file.write('\tfade_power %d\n' % 1) # Could use blenders lamp quad?
- writeMatrix(matrix)
-
- file.write('}\n')
-
- def exportMeta(metas):
-
- # TODO - blenders 'motherball' naming is not supported.
-
- for ob in metas:
- meta = ob.data
-
- file.write('blob {\n')
- file.write('\t\tthreshold %.4g\n' % meta.threshold)
-
- try:
- material = meta.materials[0] # lame! - blender cant do enything else.
- except:
- material = None
-
- for elem in meta.elements:
-
- if elem.type not in ('BALL', 'ELLIPSOID'):
- continue # Not supported
-
- loc = elem.location
-
- stiffness = elem.stiffness
- if elem.negative:
- stiffness = - stiffness
-
- if elem.type == 'BALL':
-
- file.write('\tsphere { <%.6g, %.6g, %.6g>, %.4g, %.4g ' % (loc.x, loc.y, loc.z, elem.radius, stiffness))
-
- # After this wecould do something simple like...
- # "pigment {Blue} }"
- # except we'll write the color
-
- elif elem.type == 'ELLIPSOID':
- # location is modified by scale
- file.write('\tsphere { <%.6g, %.6g, %.6g>, %.4g, %.4g ' % (loc.x / elem.size_x, loc.y / elem.size_y, loc.z / elem.size_z, elem.radius, stiffness))
- file.write('scale <%.6g, %.6g, %.6g> ' % (elem.size_x, elem.size_y, elem.size_z))
-
- if material:
- diffuse_color = material.diffuse_color
-
- if material.transparency and material.transparency_method == 'RAYTRACE':
- trans = 1.0 - material.raytrace_transparency.filter
- else:
- trans = 0.0
-
- file.write('pigment {rgbft<%.3g, %.3g, %.3g, %.3g, %.3g>} finish {%s} }\n' % \
- (diffuse_color[0], diffuse_color[1], diffuse_color[2], 1.0 - material.alpha, trans, materialNames[material.name]))
-
- else:
- file.write('pigment {rgb<1 1 1>} finish {%s} }\n' % DEF_MAT_NAME) # Write the finish last.
-
- writeObjectMaterial(material)
-
- writeMatrix(ob.matrix_world)
-
- file.write('}\n')
-
- def exportMeshs(scene, sel):
-
- ob_num = 0
-
- for ob in sel:
- ob_num += 1
-
- if ob.type in ('LAMP', 'CAMERA', 'EMPTY', 'META', 'ARMATURE'):
- continue
-
- me = ob.data
- me_materials = me.materials
-
- me = ob.create_mesh(scene, True, 'RENDER')
-
- if not me:
- continue
-
- if info_callback:
- info_callback('Object %2.d of %2.d (%s)' % (ob_num, len(sel), ob.name))
-
- #if ob.type!='MESH':
- # continue
- # me = ob.data
-
- matrix = ob.matrix_world
- try:
- uv_layer = me.active_uv_texture.data
- except:
- uv_layer = None
-
- try:
- vcol_layer = me.active_vertex_color.data
- except:
- vcol_layer = None
-
- faces_verts = [f.verts for f in me.faces]
- faces_normals = [tuple(f.normal) for f in me.faces]
- verts_normals = [tuple(v.normal) for v in me.verts]
-
- # quads incur an extra face
- quadCount = len([f for f in faces_verts if len(f) == 4])
-
- file.write('mesh2 {\n')
- file.write('\tvertex_vectors {\n')
- file.write('\t\t%s' % (len(me.verts))) # vert count
- for v in me.verts:
- file.write(',\n\t\t<%.6f, %.6f, %.6f>' % tuple(v.co)) # vert count
- file.write('\n }\n')
-
-
- # Build unique Normal list
- uniqueNormals = {}
- for fi, f in enumerate(me.faces):
- fv = faces_verts[fi]
- # [-1] is a dummy index, use a list so we can modify in place
- if f.smooth: # Use vertex normals
- for v in fv:
- key = verts_normals[v]
- uniqueNormals[key] = [-1]
- else: # Use face normal
- key = faces_normals[fi]
- uniqueNormals[key] = [-1]
-
- file.write('\tnormal_vectors {\n')
- file.write('\t\t%d' % len(uniqueNormals)) # vert count
- idx = 0
- for no, index in uniqueNormals.items():
- file.write(',\n\t\t<%.6f, %.6f, %.6f>' % no) # vert count
- index[0] = idx
- idx += 1
- file.write('\n }\n')
-
-
- # Vertex colours
- vertCols = {} # Use for material colours also.
-
- if uv_layer:
- # Generate unique UV's
- uniqueUVs = {}
-
- for fi, uv in enumerate(uv_layer):
-
- if len(faces_verts[fi]) == 4:
- uvs = uv.uv1, uv.uv2, uv.uv3, uv.uv4
- else:
- uvs = uv.uv1, uv.uv2, uv.uv3
-
- for uv in uvs:
- uniqueUVs[tuple(uv)] = [-1]
-
- file.write('\tuv_vectors {\n')
- #print unique_uvs
- file.write('\t\t%s' % (len(uniqueUVs))) # vert count
- idx = 0
- for uv, index in uniqueUVs.items():
- file.write(',\n\t\t<%.6f, %.6f>' % uv)
- index[0] = idx
- idx += 1
- '''
- else:
- # Just add 1 dummy vector, no real UV's
- file.write('\t\t1') # vert count
- file.write(',\n\t\t<0.0, 0.0>')
- '''
- file.write('\n }\n')
-
-
- if me.vertex_colors:
-
- for fi, f in enumerate(me.faces):
- material_index = f.material_index
- material = me_materials[material_index]
-
- if material and material.vertex_color_paint:
-
- col = vcol_layer[fi]
-
- if len(faces_verts[fi]) == 4:
- cols = col.color1, col.color2, col.color3, col.color4
- else:
- cols = col.color1, col.color2, col.color3
-
- for col in cols:
- key = col[0], col[1], col[2], material_index # Material index!
- vertCols[key] = [-1]
-
- else:
- if material:
- diffuse_color = tuple(material.diffuse_color)
- key = diffuse_color[0], diffuse_color[1], diffuse_color[2], material_index
- vertCols[key] = [-1]
-
-
- else:
- # No vertex colours, so write material colours as vertex colours
- for i, material in enumerate(me_materials):
-
- if material:
- diffuse_color = tuple(material.diffuse_color)
- key = diffuse_color[0], diffuse_color[1], diffuse_color[2], i # i == f.mat
- vertCols[key] = [-1]
-
-
- # Vert Colours
- file.write('\ttexture_list {\n')
- file.write('\t\t%s' % (len(vertCols))) # vert count
- idx = 0
- for col, index in vertCols.items():
-
- if me_materials:
- material = me_materials[col[3]]
- material_finish = materialNames[material.name]
-
- if material.transparency and material.transparency_method == 'RAYTRACE':
- trans = 1.0 - material.raytrace_transparency.filter
- else:
- trans = 0.0
-
- else:
- material_finish = DEF_MAT_NAME # not working properly,
- trans = 0.0
-
- #print material.apl
- file.write(',\n\t\ttexture { pigment {rgbft<%.3g, %.3g, %.3g, %.3g, %.3g>} finish {%s}}' %
- (col[0], col[1], col[2], 1.0 - material.alpha, trans, material_finish))
-
- index[0] = idx
- idx += 1
-
- file.write('\n }\n')
-
- # Face indicies
- file.write('\tface_indices {\n')
- file.write('\t\t%d' % (len(me.faces) + quadCount)) # faces count
- for fi, f in enumerate(me.faces):
- fv = faces_verts[fi]
- material_index = f.material_index
- if len(fv) == 4:
- indicies = (0, 1, 2), (0, 2, 3)
- else:
- indicies = ((0, 1, 2),)
-
- if vcol_layer:
- col = vcol_layer[fi]
-
- if len(fv) == 4:
- cols = col.color1, col.color2, col.color3, col.color4
- else:
- cols = col.color1, col.color2, col.color3
-
-
- if not me_materials or me_materials[material_index] == None: # No materials
- for i1, i2, i3 in indicies:
- file.write(',\n\t\t<%d,%d,%d>' % (fv[i1], fv[i2], fv[i3])) # vert count
- else:
- material = me_materials[material_index]
- for i1, i2, i3 in indicies:
- if me.vertex_colors and material.vertex_color_paint:
- # Colour per vertex - vertex colour
-
- col1 = cols[i1]
- col2 = cols[i2]
- col3 = cols[i3]
-
- ci1 = vertCols[col1[0], col1[1], col1[2], material_index][0]
- ci2 = vertCols[col2[0], col2[1], col2[2], material_index][0]
- ci3 = vertCols[col3[0], col3[1], col3[2], material_index][0]
- else:
- # Colour per material - flat material colour
- diffuse_color = material.diffuse_color
- ci1 = ci2 = ci3 = vertCols[diffuse_color[0], diffuse_color[1], diffuse_color[2], f.material_index][0]
-
- file.write(',\n\t\t<%d,%d,%d>, %d,%d,%d' % (fv[i1], fv[i2], fv[i3], ci1, ci2, ci3)) # vert count
-
-
- file.write('\n }\n')
-
- # normal_indices indicies
- file.write('\tnormal_indices {\n')
- file.write('\t\t%d' % (len(me.faces) + quadCount)) # faces count
- for fi, fv in enumerate(faces_verts):
-
- if len(fv) == 4:
- indicies = (0, 1, 2), (0, 2, 3)
- else:
- indicies = ((0, 1, 2),)
-
- for i1, i2, i3 in indicies:
- if f.smooth:
- file.write(',\n\t\t<%d,%d,%d>' %\
- (uniqueNormals[verts_normals[fv[i1]]][0],\
- uniqueNormals[verts_normals[fv[i2]]][0],\
- uniqueNormals[verts_normals[fv[i3]]][0])) # vert count
- else:
- idx = uniqueNormals[faces_normals[fi]][0]
- file.write(',\n\t\t<%d,%d,%d>' % (idx, idx, idx)) # vert count
-
- file.write('\n }\n')
-
- if uv_layer:
- file.write('\tuv_indices {\n')
- file.write('\t\t%d' % (len(me.faces) + quadCount)) # faces count
- for fi, fv in enumerate(faces_verts):
-
- if len(fv) == 4:
- indicies = (0, 1, 2), (0, 2, 3)
- else:
- indicies = ((0, 1, 2),)
-
- uv = uv_layer[fi]
- if len(faces_verts[fi]) == 4:
- uvs = tuple(uv.uv1), tuple(uv.uv2), tuple(uv.uv3), tuple(uv.uv4)
- else:
- uvs = tuple(uv.uv1), tuple(uv.uv2), tuple(uv.uv3)
-
- for i1, i2, i3 in indicies:
- file.write(',\n\t\t<%d,%d,%d>' %\
- (uniqueUVs[uvs[i1]][0],\
- uniqueUVs[uvs[i2]][0],\
- uniqueUVs[uvs[i2]][0])) # vert count
- file.write('\n }\n')
-
- if me.materials:
- material = me.materials[0] # dodgy
- writeObjectMaterial(material)
-
- writeMatrix(matrix)
- file.write('}\n')
-
- bpy.data.meshes.remove(me)
-
- def exportWorld(world):
- if not world:
- return
-
- mist = world.mist
-
- if mist.use_mist:
- file.write('fog {\n')
- file.write('\tdistance %.6f\n' % mist.depth)
- file.write('\tcolor rgbt<%.3g, %.3g, %.3g, %.3g>\n' % (tuple(world.horizon_color) + (1 - mist.intensity,)))
- #file.write('\tfog_offset %.6f\n' % mist.start)
- #file.write('\tfog_alt 5\n')
- #file.write('\tturbulence 0.2\n')
- #file.write('\tturb_depth 0.3\n')
- file.write('\tfog_type 1\n')
- file.write('}\n')
-
- def exportGlobalSettings(scene):
-
- file.write('global_settings {\n')
-
- if scene.pov_radio_enable:
- file.write('\tradiosity {\n')
- file.write("\t\tadc_bailout %.4g\n" % scene.pov_radio_adc_bailout)
- file.write("\t\talways_sample %d\n" % scene.pov_radio_always_sample)
- file.write("\t\tbrightness %.4g\n" % scene.pov_radio_brightness)
- file.write("\t\tcount %d\n" % scene.pov_radio_count)
- file.write("\t\terror_bound %.4g\n" % scene.pov_radio_error_bound)
- file.write("\t\tgray_threshold %.4g\n" % scene.pov_radio_gray_threshold)
- file.write("\t\tlow_error_factor %.4g\n" % scene.pov_radio_low_error_factor)
- file.write("\t\tmedia %d\n" % scene.pov_radio_media)
- file.write("\t\tminimum_reuse %.4g\n" % scene.pov_radio_minimum_reuse)
- file.write("\t\tnearest_count %d\n" % scene.pov_radio_nearest_count)
- file.write("\t\tnormal %d\n" % scene.pov_radio_normal)
- file.write("\t\trecursion_limit %d\n" % scene.pov_radio_recursion_limit)
- file.write('\t}\n')
-
- if world:
- file.write("\tambient_light rgb<%.3g, %.3g, %.3g>\n" % tuple(world.ambient_color))
-
- file.write('}\n')
-
-
- # Convert all materials to strings we can access directly per vertex.
- writeMaterial(None) # default material
-
- for material in bpy.data.materials:
- writeMaterial(material)
-
- exportCamera()
- #exportMaterials()
- sel = scene.objects
- exportLamps([l for l in sel if l.type == 'LAMP'])
- exportMeta([l for l in sel if l.type == 'META'])
- exportMeshs(scene, sel)
- exportWorld(scene.world)
- exportGlobalSettings(scene)
-
- file.close()
-
-
-def write_pov_ini(filename_ini, filename_pov, filename_image):
- scene = bpy.data.scenes[0]
- render = scene.render
-
- x = int(render.resolution_x * render.resolution_percentage * 0.01)
- y = int(render.resolution_y * render.resolution_percentage * 0.01)
-
- file = open(filename_ini, 'w')
-
- file.write('Input_File_Name="%s"\n' % filename_pov)
- file.write('Output_File_Name="%s"\n' % filename_image)
-
- file.write('Width=%d\n' % x)
- file.write('Height=%d\n' % y)
-
- # Needed for border render.
- '''
- file.write('Start_Column=%d\n' % part.x)
- file.write('End_Column=%d\n' % (part.x+part.w))
-
- file.write('Start_Row=%d\n' % (part.y))
- file.write('End_Row=%d\n' % (part.y+part.h))
- '''
-
- file.write('Display=0\n')
- file.write('Pause_When_Done=0\n')
- file.write('Output_File_Type=T\n') # TGA, best progressive loading
- file.write('Output_Alpha=1\n')
-
- if render.render_antialiasing:
- aa_mapping = {'5': 2, '8': 3, '11': 4, '16': 5} # method 1 assumed
- file.write('Antialias=1\n')
- file.write('Antialias_Depth=%d\n' % aa_mapping[render.antialiasing_samples])
- else:
- file.write('Antialias=0\n')
-
- file.close()
-
-# Radiosity panel, use in the scene for now.
-FloatProperty = bpy.types.Scene.FloatProperty
-IntProperty = bpy.types.Scene.IntProperty
-BoolProperty = bpy.types.Scene.BoolProperty
-
-# Not a real pov option, just to know if we should write
-BoolProperty(attr="pov_radio_enable",
- name="Enable Radiosity",
- description="Enable povrays radiosity calculation",
- default=False)
-BoolProperty(attr="pov_radio_display_advanced",
- name="Advanced Options",
- description="Show advanced options",
- default=False)
-
-# Real pov options
-FloatProperty(attr="pov_radio_adc_bailout",
- name="ADC Bailout",
- description="The adc_bailout for radiosity rays. Use adc_bailout = 0.01 / brightest_ambient_object for good results",
- min=0.0, max=1000.0, soft_min=0.0, soft_max=1.0, default=0.01)
-
-BoolProperty(attr="pov_radio_always_sample",
- name="Always Sample",
- description="Only use the data from the pretrace step and not gather any new samples during the final radiosity pass",
- default=True)
-
-FloatProperty(attr="pov_radio_brightness",
- name="Brightness",
- description="Amount objects are brightened before being returned upwards to the rest of the system",
- min=0.0, max=1000.0, soft_min=0.0, soft_max=10.0, default=1.0)
-
-IntProperty(attr="pov_radio_count",
- name="Ray Count",
- description="Number of rays that are sent out whenever a new radiosity value has to be calculated",
- min=1, max=1600, default=35)
-
-FloatProperty(attr="pov_radio_error_bound",
- name="Error Bound",
- description="One of the two main speed/quality tuning values, lower values are more accurate",
- min=0.0, max=1000.0, soft_min=0.1, soft_max=10.0, default=1.8)
-
-FloatProperty(attr="pov_radio_gray_threshold",
- name="Gray Threshold",
- description="One of the two main speed/quality tuning values, lower values are more accurate",
- min=0.0, max=1.0, soft_min=0, soft_max=1, default=0.0)
-
-FloatProperty(attr="pov_radio_low_error_factor",
- name="Low Error Factor",
- description="If you calculate just enough samples, but no more, you will get an image which has slightly blotchy lighting",
- min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, default=0.5)
-
-# max_sample - not available yet
-BoolProperty(attr="pov_radio_media",
- name="Media",
- description="Radiosity estimation can be affected by media",
- default=False)
-
-FloatProperty(attr="pov_radio_minimum_reuse",
- name="Minimum Reuse",
- description="Fraction of the screen width which sets the minimum radius of reuse for each sample point (At values higher than 2% expect errors)",
- min=0.0, max=1.0, soft_min=0.1, soft_max=0.1, default=0.015)
-
-IntProperty(attr="pov_radio_nearest_count",
- name="Nearest Count",
- description="Number of old ambient values blended together to create a new interpolated value",
- min=1, max=20, default=5)
-
-BoolProperty(attr="pov_radio_normal",
- name="Normals",
- description="Radiosity estimation can be affected by normals",
- default=False)
-
-IntProperty(attr="pov_radio_recursion_limit",
- name="Recursion Limit",
- description="how many recursion levels are used to calculate the diffuse inter-reflection",
- min=1, max=20, default=3)
-
-
-class PovrayRender(bpy.types.RenderEngine):
- bl_idname = 'POVRAY_RENDER'
- bl_label = "Povray"
- DELAY = 0.02
-
- def _export(self, scene):
- import tempfile
-
- self._temp_file_in = tempfile.mktemp(suffix='.pov')
- self._temp_file_out = tempfile.mktemp(suffix='.tga')
- self._temp_file_ini = tempfile.mktemp(suffix='.ini')
- '''
- self._temp_file_in = '/test.pov'
- self._temp_file_out = '/test.tga'
- self._temp_file_ini = '/test.ini'
- '''
-
- def info_callback(txt):
- self.update_stats("", "POVRAY: " + txt)
-
- write_pov(self._temp_file_in, scene, info_callback)
-
- def _render(self):
-
- try:
- os.remove(self._temp_file_out) # so as not to load the old file
- except:
- pass
-
- write_pov_ini(self._temp_file_ini, self._temp_file_in, self._temp_file_out)
-
- print ("***-STARTING-***")
-
- pov_binary = "povray"
-
- if sys.platform == 'win32':
- import winreg
- regKey = winreg.OpenKey(winreg.HKEY_CURRENT_USER, 'Software\\POV-Ray\\v3.6\\Windows')
-
- if bitness == 64:
- pov_binary = winreg.QueryValueEx(regKey, 'Home')[0] + '\\bin\\pvengine64'
- else:
- pov_binary = winreg.QueryValueEx(regKey, 'Home')[0] + '\\bin\\pvengine'
-
- if 1:
- # TODO, when povray isnt found this gives a cryptic error, would be nice to be able to detect if it exists
- try:
- self._process = subprocess.Popen([pov_binary, self._temp_file_ini]) # stdout=subprocess.PIPE, stderr=subprocess.PIPE
- except OSError:
- # TODO, report api
- print("POVRAY: could not execute '%s', possibly povray isn't installed" % pov_binary)
- import traceback
- traceback.print_exc()
- print ("***-DONE-***")
- return False
-
- else:
- # This works too but means we have to wait until its done
- os.system('%s %s' % (pov_binary, self._temp_file_ini))
-
- print ("***-DONE-***")
- return True
-
- def _cleanup(self):
- for f in (self._temp_file_in, self._temp_file_ini, self._temp_file_out):
- try:
- os.remove(f)
- except:
- pass
-
- self.update_stats("", "")
-
- def render(self, scene):
-
- self.update_stats("", "POVRAY: Exporting data from Blender")
- self._export(scene)
- self.update_stats("", "POVRAY: Parsing File")
-
- if not self._render():
- self.update_stats("", "POVRAY: Not found")
- return
-
- r = scene.render
-
- # compute resolution
- x = int(r.resolution_x * r.resolution_percentage * 0.01)
- y = int(r.resolution_y * r.resolution_percentage * 0.01)
-
- # Wait for the file to be created
- while not os.path.exists(self._temp_file_out):
- if self.test_break():
- try:
- self._process.terminate()
- except:
- pass
- break
-
- if self._process.poll() != None:
- self.update_stats("", "POVRAY: Failed")
- break
-
- time.sleep(self.DELAY)
-
- if os.path.exists(self._temp_file_out):
-
- self.update_stats("", "POVRAY: Rendering")
-
- prev_size = -1
-
- def update_image():
- result = self.begin_result(0, 0, x, y)
- lay = result.layers[0]
- # possible the image wont load early on.
- try:
- lay.load_from_file(self._temp_file_out)
- except:
- pass
- self.end_result(result)
-
- # Update while povray renders
- while True:
-
- # test if povray exists
- if self._process.poll() is not None:
- update_image()
- break
-
- # user exit
- if self.test_break():
- try:
- self._process.terminate()
- except:
- pass
-
- break
-
- # Would be nice to redirect the output
- # stdout_value, stderr_value = self._process.communicate() # locks
-
-
- # check if the file updated
- new_size = os.path.getsize(self._temp_file_out)
-
- if new_size != prev_size:
- update_image()
- prev_size = new_size
-
- time.sleep(self.DELAY)
-
- self._cleanup()
-
-
-# Use some of the existing buttons.
-import properties_render
-properties_render.RENDER_PT_render.COMPAT_ENGINES.add('POVRAY_RENDER')
-properties_render.RENDER_PT_dimensions.COMPAT_ENGINES.add('POVRAY_RENDER')
-properties_render.RENDER_PT_antialiasing.COMPAT_ENGINES.add('POVRAY_RENDER')
-properties_render.RENDER_PT_output.COMPAT_ENGINES.add('POVRAY_RENDER')
-del properties_render
-
-# Use only a subset of the world panels
-import properties_world
-properties_world.WORLD_PT_preview.COMPAT_ENGINES.add('POVRAY_RENDER')
-properties_world.WORLD_PT_context_world.COMPAT_ENGINES.add('POVRAY_RENDER')
-properties_world.WORLD_PT_world.COMPAT_ENGINES.add('POVRAY_RENDER')
-properties_world.WORLD_PT_mist.COMPAT_ENGINES.add('POVRAY_RENDER')
-del properties_world
-
-# Example of wrapping every class 'as is'
-import properties_material
-for member in dir(properties_material):
- subclass = getattr(properties_material, member)
- try:
- subclass.COMPAT_ENGINES.add('POVRAY_RENDER')
- except:
- pass
-del properties_material
-import properties_data_mesh
-for member in dir(properties_data_mesh):
- subclass = getattr(properties_data_mesh, member)
- try:
- subclass.COMPAT_ENGINES.add('POVRAY_RENDER')
- except:
- pass
-del properties_data_mesh
-import properties_texture
-for member in dir(properties_texture):
- subclass = getattr(properties_texture, member)
- try:
- subclass.COMPAT_ENGINES.add('POVRAY_RENDER')
- except:
- pass
-del properties_texture
-import properties_data_camera
-for member in dir(properties_data_camera):
- subclass = getattr(properties_data_camera, member)
- try:
- subclass.COMPAT_ENGINES.add('POVRAY_RENDER')
- except:
- pass
-del properties_data_camera
-
-
-class RenderButtonsPanel(bpy.types.Panel):
- bl_space_type = 'PROPERTIES'
- bl_region_type = 'WINDOW'
- bl_context = "render"
- # COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here
-
- def poll(self, context):
- rd = context.scene.render
- return (rd.use_game_engine == False) and (rd.engine in self.COMPAT_ENGINES)
-
-
-class RENDER_PT_povray_radiosity(RenderButtonsPanel):
- bl_label = "Radiosity"
- COMPAT_ENGINES = {'POVRAY_RENDER'}
-
- def draw_header(self, context):
- scene = context.scene
-
- self.layout.prop(scene, "pov_radio_enable", text="")
-
- def draw(self, context):
- layout = self.layout
-
- scene = context.scene
- rd = scene.render
-
- layout.active = scene.pov_radio_enable
-
- split = layout.split()
-
- col = split.column()
- col.prop(scene, "pov_radio_count", text="Rays")
- col.prop(scene, "pov_radio_recursion_limit", text="Recursions")
- col = split.column()
- col.prop(scene, "pov_radio_error_bound", text="Error")
-
- layout.prop(scene, "pov_radio_display_advanced")
-
- if scene.pov_radio_display_advanced:
- split = layout.split()
-
- col = split.column()
- col.prop(scene, "pov_radio_adc_bailout", slider=True)
- col.prop(scene, "pov_radio_gray_threshold", slider=True)
- col.prop(scene, "pov_radio_low_error_factor", slider=True)
-
- col = split.column()
- col.prop(scene, "pov_radio_brightness")
- col.prop(scene, "pov_radio_minimum_reuse", text="Min Reuse")
- col.prop(scene, "pov_radio_nearest_count")
-
- split = layout.split()
-
- col = split.column()
- col.label(text="Estimation Influence:")
- col.prop(scene, "pov_radio_media")
- col.prop(scene, "pov_radio_normal")
-
- col = split.column()
- col.prop(scene, "pov_radio_always_sample")
-
-
-classes = [
- PovrayRender,
- RENDER_PT_povray_radiosity]
-
-
-def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
-
-
-def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
-
-if __name__ == "__main__":
- register()
diff --git a/release/scripts/io/export_3ds.py b/release/scripts/io/export_3ds.py
index 4fd889c75c6..4a5521bd9e9 100644
--- a/release/scripts/io/export_3ds.py
+++ b/release/scripts/io/export_3ds.py
@@ -564,14 +564,14 @@ def extract_triangles(mesh):
img = None
for i, face in enumerate(mesh.faces):
- f_v = face.verts
+ f_v = face.vertices
# f_v = face.v
uf = mesh.active_uv_texture.data[i] if do_uv else None
if do_uv:
f_uv = uf.uv
- # f_uv = (uf.uv1, uf.uv2, uf.uv3, uf.uv4) if face.verts[3] else (uf.uv1, uf.uv2, uf.uv3)
+ # f_uv = (uf.uv1, uf.uv2, uf.uv3, uf.uv4) if face.vertices[3] else (uf.uv1, uf.uv2, uf.uv3)
# f_uv = face.uv
img = uf.image if uf else None
# img = face.image
@@ -761,18 +761,18 @@ def make_mesh_chunk(mesh, materialDict):
if len(mesh.uv_textures):
# if mesh.faceUV:
# Remove the face UVs and convert it to vertex UV:
- vert_array, uv_array, tri_list = remove_face_uv(mesh.verts, tri_list)
+ vert_array, uv_array, tri_list = remove_face_uv(mesh.vertices, tri_list)
else:
# Add the vertices to the vertex array:
vert_array = _3ds_array()
- for vert in mesh.verts:
+ for vert in mesh.vertices:
vert_array.add(_3ds_point_3d(vert.co))
# If the mesh has vertex UVs, create an array of UVs:
if len(mesh.sticky):
# if mesh.vertexUV:
uv_array = _3ds_array()
for uv in mesh.sticky:
-# for vert in mesh.verts:
+# for vert in mesh.vertices:
uv_array.add(_3ds_point_uv(uv.co))
# uv_array.add(_3ds_point_uv(vert.uvco))
else:
@@ -922,7 +922,7 @@ def make_kf_obj_node(obj, name_to_id):
"""
# import BPyMessages
-def save_3ds(filename, context):
+def write(filename, context):
'''Save the Blender scene to a 3ds file.'''
# Time the export
@@ -941,7 +941,8 @@ def save_3ds(filename, context):
sce = context.scene
# sce= bpy.data.scenes.active
- bpy.ops.object.mode_set(mode='OBJECT')
+ if context.object:
+ bpy.ops.object.mode_set(mode='OBJECT')
# Initialize the main chunk (primary):
primary = _3ds_chunk(PRIMARY)
@@ -1006,7 +1007,7 @@ def save_3ds(filename, context):
mat = mat_ls[mat_index]
if mat: mat_name = mat.name
else: mat_name = None
- # else there alredy set to none
+ # else there already set to none
img = uf.image
# img = f.image
@@ -1064,7 +1065,7 @@ def save_3ds(filename, context):
'''
if not blender_mesh.users:
bpy.data.meshes.remove(blender_mesh)
-# blender_mesh.verts = None
+# blender_mesh.vertices = None
i+=i
@@ -1106,50 +1107,46 @@ def save_3ds(filename, context):
#primary.dump()
-# if __name__=='__main__':
-# if struct:
-# Blender.Window.FileSelector(save_3ds, "Export 3DS", Blender.sys.makename(ext='.3ds'))
-# else:
-# Blender.Draw.PupMenu("Error%t|This script requires a full python installation")
-# # save_3ds('/test_b.3ds')
+# # write('/test_b.3ds')
from bpy.props import *
class Export3DS(bpy.types.Operator):
'''Export to 3DS file format (.3ds)'''
bl_idname = "export.autodesk_3ds"
bl_label = 'Export 3DS'
- # List of operator properties, the attributes will be assigned
- # to the class instance from the operator settings before calling.
-
-
filepath = StringProperty(name="File Path", description="Filepath used for exporting the 3DS file", maxlen= 1024, default= "")
check_existing = BoolProperty(name="Check Existing", description="Check and warn on overwriting existing files", default=True, options={'HIDDEN'})
+ @classmethod
+ def poll(cls, context): # Poll isnt working yet
+ return context.active_object != None
+
def execute(self, context):
- save_3ds(self.properties.filepath, context)
+ filepath = self.properties.filepath
+ filepath = bpy.path.ensure_ext(filepath, ".3ds")
+
+ write(filepath, context)
return {'FINISHED'}
def invoke(self, context, event):
- wm = context.manager
- wm.add_fileselect(self)
- return {'RUNNING_MODAL'}
+ import os
+ if not self.properties.is_property_set("filepath"):
+ self.properties.filepath = os.path.splitext(bpy.data.filepath)[0] + ".3ds"
- def poll(self, context): # Poll isnt working yet
- return context.active_object != None
+ context.manager.add_fileselect(self)
+ return {'RUNNING_MODAL'}
# Add to a menu
def menu_func(self, context):
- default_path = os.path.splitext(bpy.data.filepath)[0] + ".3ds"
- self.layout.operator(Export3DS.bl_idname, text="3D Studio (.3ds)").filepath = default_path
+ self.layout.operator(Export3DS.bl_idname, text="3D Studio (.3ds)")
def register():
- bpy.types.register(Export3DS)
bpy.types.INFO_MT_file_export.append(menu_func)
+
def unregister():
- bpy.types.unregister(Export3DS)
bpy.types.INFO_MT_file_export.remove(menu_func)
if __name__ == "__main__":
diff --git a/release/scripts/io/export_fbx.py b/release/scripts/io/export_fbx.py
index 4505b56b41c..60e9e90e11b 100644
--- a/release/scripts/io/export_fbx.py
+++ b/release/scripts/io/export_fbx.py
@@ -55,7 +55,7 @@ import math # math.pi
import shutil # for file copying
import bpy
-from mathutils import Vector, Euler, Matrix, RotationMatrix
+from mathutils import Vector, Euler, Matrix
def copy_file(source, dest):
# XXX - remove, can use shutil
@@ -75,7 +75,7 @@ def copy_images(dest_dir, textures):
image_paths = set()
for tex in textures:
- image_paths.add(bpy.utils.expandpath(tex.filepath))
+ image_paths.add(bpy.path.abspath(tex.filepath))
# Now copy images
copyCount = 0
@@ -83,7 +83,7 @@ def copy_images(dest_dir, textures):
if Blender.sys.exists(image_path):
# Make a name for the target path.
dest_image_path = dest_dir + image_path.split('\\')[-1].split('/')[-1]
- if not Blender.sys.exists(dest_image_path): # Image isnt alredy there
+ if not Blender.sys.exists(dest_image_path): # Image isnt already there
print('\tCopying "%s" > "%s"' % (image_path, dest_image_path))
try:
copy_file(image_path, dest_image_path)
@@ -107,19 +107,19 @@ def eulerRadToDeg(eul):
mtx4_identity = Matrix()
# testing
-mtx_x90 = RotationMatrix( math.pi/2, 3, 'X') # used
-#mtx_x90n = RotationMatrix(-90, 3, 'x')
-#mtx_y90 = RotationMatrix( 90, 3, 'y')
-#mtx_y90n = RotationMatrix(-90, 3, 'y')
-#mtx_z90 = RotationMatrix( 90, 3, 'z')
-#mtx_z90n = RotationMatrix(-90, 3, 'z')
-
-#mtx4_x90 = RotationMatrix( 90, 4, 'x')
-mtx4_x90n = RotationMatrix(-math.pi/2, 4, 'X') # used
-#mtx4_y90 = RotationMatrix( 90, 4, 'y')
-mtx4_y90n = RotationMatrix(-math.pi/2, 4, 'Y') # used
-mtx4_z90 = RotationMatrix( math.pi/2, 4, 'Z') # used
-mtx4_z90n = RotationMatrix(-math.pi/2, 4, 'Z') # used
+mtx_x90 = Matrix.Rotation( math.pi/2, 3, 'X') # used
+#mtx_x90n = Matrix.Rotation(-90, 3, 'x')
+#mtx_y90 = Matrix.Rotation( 90, 3, 'y')
+#mtx_y90n = Matrix.Rotation(-90, 3, 'y')
+#mtx_z90 = Matrix.Rotation( 90, 3, 'z')
+#mtx_z90n = Matrix.Rotation(-90, 3, 'z')
+
+#mtx4_x90 = Matrix.Rotation( 90, 4, 'x')
+mtx4_x90n = Matrix.Rotation(-math.pi/2, 4, 'X') # used
+#mtx4_y90 = Matrix.Rotation( 90, 4, 'y')
+mtx4_y90n = Matrix.Rotation(-math.pi/2, 4, 'Y') # used
+mtx4_z90 = Matrix.Rotation( math.pi/2, 4, 'Z') # used
+mtx4_z90n = Matrix.Rotation(-math.pi/2, 4, 'Z') # used
# def strip_path(p):
# return p.split('\\')[-1].split('/')[-1]
@@ -176,7 +176,7 @@ def sane_name(data, dct):
name = 'unnamed' # blank string, ASKING FOR TROUBLE!
else:
- name = bpy.utils.clean_name(name) # use our own
+ name = bpy.path.clean_name(name) # use our own
while name in iter(dct.values()): name = increment_string(name)
@@ -200,14 +200,14 @@ def sane_groupname(data): return sane_name(data, sane_name_mapping_group)
# FORCE_CWD - dont use the basepath, just add a ./ to the filename.
# use when we know the file will be in the basepath.
# '''
-# fname = bpy.utils.expandpath(fname_orig)
+# fname = bpy.path.abspath(fname_orig)
# # fname = Blender.sys.expandpath(fname_orig)
# fname_strip = os.path.basename(fname)
# # fname_strip = strip_path(fname)
# if FORCE_CWD:
# fname_rel = '.' + os.sep + fname_strip
# else:
-# fname_rel = bpy.utils.relpath(fname, basepath)
+# fname_rel = bpy.path.relpath(fname, basepath)
# # fname_rel = Blender.sys.relpath(fname, basepath)
# if fname_rel.startswith('//'): fname_rel = '.' + os.sep + fname_rel[2:]
# return fname, fname_strip, fname_rel
@@ -221,7 +221,7 @@ def mat4x4str(mat):
def getVertsFromGroup(me, group_index):
ret = []
- for i, v in enumerate(me.verts):
+ for i, v in enumerate(me.vertices):
for g in v.groups:
if g.group == group_index:
ret.append((i, g.weight))
@@ -243,11 +243,11 @@ def BPyMesh_meshWeight2List(ob):
if not len_groupNames:
# no verts? return a vert aligned empty list
- return [[] for i in range(len(me.verts))], []
+ return [[] for i in range(len(me.vertices))], []
else:
- vWeightList= [[0.0]*len_groupNames for i in range(len(me.verts))]
+ vWeightList= [[0.0]*len_groupNames for i in range(len(me.vertices))]
- for i, v in enumerate(me.verts):
+ for i, v in enumerate(me.vertices):
for g in v.groups:
vWeightList[i][g.group] = g.weight
@@ -305,7 +305,8 @@ def write(filename, batch_objects = None, \
BATCH_OWN_DIR = False
):
- bpy.ops.object.mode_set(mode='OBJECT')
+ if bpy.context.object:
+ bpy.ops.object.mode_set(mode='OBJECT')
# ----------------- Batch support!
if BATCH_ENABLE:
@@ -353,13 +354,13 @@ def write(filename, batch_objects = None, \
new_fbxpath = fbxpath # own dir option modifies, we need to keep an original
for data in data_seq: # scene or group
- newname = BATCH_FILE_PREFIX + bpy.utils.clean_name(data.name)
-# newname = BATCH_FILE_PREFIX + BPySys.bpy.utils.clean_name(data.name)
+ newname = BATCH_FILE_PREFIX + bpy.path.clean_name(data.name)
+# newname = BATCH_FILE_PREFIX + BPySys.bpy.path.clean_name(data.name)
if BATCH_OWN_DIR:
new_fbxpath = fbxpath + newname + os.sep
- # path may alredy exist
+ # path may already exist
# TODO - might exist but be a file. unlikely but should probably account for it.
if bpy.utils.exists(new_fbxpath) == 0:
@@ -391,7 +392,7 @@ def write(filename, batch_objects = None, \
# Call self with modified args
- # Dont pass batch options since we alredy usedt them
+ # Dont pass batch options since we already usedt them
write(filename, data.objects,
context,
False,
@@ -561,7 +562,7 @@ def write(filename, batch_objects = None, \
elif type =='CAMERA':
# elif ob and type =='Camera':
y = matrix_rot * Vector((0.0, 1.0, 0.0))
- matrix_rot = RotationMatrix(math.pi/2, 3, y) * matrix_rot
+ matrix_rot = Matrix.Rotation(math.pi/2, 3, y) * matrix_rot
return matrix_rot
@@ -663,7 +664,7 @@ def write(filename, batch_objects = None, \
rot = tuple(matrix_rot.to_euler())
elif ob and ob.type =='Camera':
y = matrix_rot * Vector((0.0, 1.0, 0.0))
- matrix_rot = RotationMatrix(math.pi/2, 3, y) * matrix_rot
+ matrix_rot = Matrix.Rotation(math.pi/2, 3, y) * matrix_rot
rot = tuple(matrix_rot.to_euler())
else:
rot = tuple(matrix_rot.to_euler())
@@ -947,10 +948,7 @@ def write(filename, batch_objects = None, \
render = scene.render
width = render.resolution_x
height = render.resolution_y
-# render = scene.render
-# width = render.sizeX
-# height = render.sizeY
- aspect = float(width)/height
+ aspect = width / height
data = my_cam.blenObject.data
@@ -962,11 +960,9 @@ def write(filename, batch_objects = None, \
file.write('\n\t\t\tProperty: "FieldOfView", "FieldOfView", "A+",%.6f' % math.degrees(data.angle))
file.write('\n\t\t\tProperty: "FieldOfViewX", "FieldOfView", "A+",1')
file.write('\n\t\t\tProperty: "FieldOfViewY", "FieldOfView", "A+",1')
- file.write('\n\t\t\tProperty: "FocalLength", "Real", "A+",14.0323972702026')
+ # file.write('\n\t\t\tProperty: "FocalLength", "Real", "A+",14.0323972702026')
file.write('\n\t\t\tProperty: "OpticalCenterX", "Real", "A+",%.6f' % data.shift_x) # not sure if this is in the correct units?
-# file.write('\n\t\t\tProperty: "OpticalCenterX", "Real", "A+",%.6f' % data.shiftX) # not sure if this is in the correct units?
file.write('\n\t\t\tProperty: "OpticalCenterY", "Real", "A+",%.6f' % data.shift_y) # ditto
-# file.write('\n\t\t\tProperty: "OpticalCenterY", "Real", "A+",%.6f' % data.shiftY) # ditto
file.write('\n\t\t\tProperty: "BackgroundColor", "Color", "A+",0,0,0')
file.write('\n\t\t\tProperty: "TurnTable", "Real", "A+",0')
file.write('\n\t\t\tProperty: "DisplayTurnTableIcon", "bool", "",1')
@@ -975,7 +971,7 @@ def write(filename, batch_objects = None, \
file.write('\n\t\t\tProperty: "UseRealTimeMotionBlur", "bool", "",1')
file.write('\n\t\t\tProperty: "ResolutionMode", "enum", "",0')
file.write('\n\t\t\tProperty: "ApertureMode", "enum", "",2')
- file.write('\n\t\t\tProperty: "GateFit", "enum", "",0')
+ file.write('\n\t\t\tProperty: "GateFit", "enum", "",2')
file.write('\n\t\t\tProperty: "CameraFormat", "enum", "",0')
file.write('\n\t\t\tProperty: "AspectW", "double", "",%i' % width)
file.write('\n\t\t\tProperty: "AspectH", "double", "",%i' % height)
@@ -1086,7 +1082,7 @@ def write(filename, batch_objects = None, \
else:
do_shadow = 0
- if light.only_shadow or (not light.diffuse and not light.specular):
+ if light.use_only_shadow or (not light.diffuse and not light.specular):
# if mode & Blender.Lamp.Modes.OnlyShadow or (mode & Blender.Lamp.Modes.NoDiffuse and mode & Blender.Lamp.Modes.NoSpecular):
do_light = 0
else:
@@ -1194,7 +1190,7 @@ def write(filename, batch_objects = None, \
# mat_spec = mat.spec/2.0
mat_alpha = mat.alpha
mat_emit = mat.emit
- mat_shadeless = mat.shadeless
+ mat_shadeless = mat.use_shadeless
# mat_shadeless = mat.mode & Blender.Material.Modes.SHADELESS
if mat_shadeless:
mat_shader = 'Lambert'
@@ -1254,7 +1250,7 @@ def write(filename, batch_objects = None, \
file.write('\n\t}')
def copy_image(image):
- fn = bpy.utils.expandpath(image.filepath)
+ fn = bpy.path.abspath(image.filepath)
fn_strip = os.path.basename(fn)
if EXP_IMAGE_COPY:
@@ -1331,9 +1327,9 @@ def write(filename, batch_objects = None, \
Property: "CurrentMappingType", "enum", "",0
Property: "UVSwap", "bool", "",0''')
- file.write('\n\t\t\tProperty: "WrapModeU", "enum", "",%i' % tex.clamp_x)
+ file.write('\n\t\t\tProperty: "WrapModeU", "enum", "",%i' % tex.use_clamp_x)
# file.write('\n\t\t\tProperty: "WrapModeU", "enum", "",%i' % tex.clampX)
- file.write('\n\t\t\tProperty: "WrapModeV", "enum", "",%i' % tex.clamp_y)
+ file.write('\n\t\t\tProperty: "WrapModeV", "enum", "",%i' % tex.use_clamp_y)
# file.write('\n\t\t\tProperty: "WrapModeV", "enum", "",%i' % tex.clampY)
file.write('''
@@ -1402,7 +1398,7 @@ def write(filename, batch_objects = None, \
# TODO - this is a bit lazy, we could have a simple write loop
# for this case because all weights are 1.0 but for now this is ok
# Parent Bones arent used all that much anyway.
- vgroup_data = [(j, 1.0) for j in range(len(my_mesh.blenData.verts))]
+ vgroup_data = [(j, 1.0) for j in range(len(my_mesh.blenData.vertices))]
else:
# This bone is not a parent of this mesh object, no weights
vgroup_data = []
@@ -1491,7 +1487,7 @@ def write(filename, batch_objects = None, \
file.write('\n\t\tVertices: ')
i=-1
- for v in me.verts:
+ for v in me.vertices:
if i==-1:
file.write('%.6f,%.6f,%.6f' % tuple(v.co)); i=0
else:
@@ -1503,7 +1499,7 @@ def write(filename, batch_objects = None, \
file.write('\n\t\tPolygonVertexIndex: ')
i=-1
for f in me.faces:
- fi = f.verts[:]
+ fi = f.vertices[:]
# last index XORd w. -1 indicates end of face
fi[-1] = fi[-1] ^ -1
@@ -1523,8 +1519,8 @@ def write(filename, batch_objects = None, \
# write loose edges as faces.
for ed in me.edges:
- if ed.loose:
- ed_val = ed.verts[:]
+ if ed.is_loose:
+ ed_val = ed.vertices[:]
ed_val = ed_val[0], ed_val[-1] ^ -1
if i==-1:
@@ -1542,14 +1538,14 @@ def write(filename, batch_objects = None, \
i=-1
for ed in me.edges:
if i==-1:
- file.write('%i,%i' % (ed.verts[0], ed.verts[1]))
+ file.write('%i,%i' % (ed.vertices[0], ed.vertices[1]))
# file.write('%i,%i' % (ed.v1.index, ed.v2.index))
i=0
else:
if i==13:
file.write('\n\t\t')
i=0
- file.write(',%i,%i' % (ed.verts[0], ed.verts[1]))
+ file.write(',%i,%i' % (ed.vertices[0], ed.vertices[1]))
# file.write(',%i,%i' % (ed.v1.index, ed.v2.index))
i+=1
@@ -1564,7 +1560,7 @@ def write(filename, batch_objects = None, \
Normals: ''')
i=-1
- for v in me.verts:
+ for v in me.vertices:
if i==-1:
file.write('%.15f,%.15f,%.15f' % tuple(v.normal)); i=0
# file.write('%.15f,%.15f,%.15f' % tuple(v.no)); i=0
@@ -1588,11 +1584,11 @@ def write(filename, batch_objects = None, \
i=-1
for f in me.faces:
if i==-1:
- file.write('%i' % f.smooth); i=0
+ file.write('%i' % f.use_smooth); i=0
else:
if i==54:
file.write('\n '); i=0
- file.write(',%i' % f.smooth)
+ file.write(',%i' % f.use_smooth)
i+=1
file.write('\n\t\t}')
@@ -1606,27 +1602,23 @@ def write(filename, batch_objects = None, \
ReferenceInformationType: "Direct"
Smoothing: ''')
-# SHARP = Blender.Mesh.EdgeFlags.SHARP
i=-1
for ed in me.edges:
if i==-1:
- file.write('%i' % (ed.sharp)); i=0
-# file.write('%i' % ((ed.flag&SHARP)!=0)); i=0
+ file.write('%i' % (ed.use_edge_sharp)); i=0
else:
if i==54:
file.write('\n '); i=0
- file.write(',%i' % (ed.sharp))
-# file.write(',%i' % ((ed.flag&SHARP)!=0))
+ file.write(',%i' % (ed.use_edge_sharp))
i+=1
file.write('\n\t\t}')
-# del SHARP
# small utility function
# returns a slice of data depending on number of face verts
# data is either a MeshTextureFace or MeshColor
def face_data(data, face):
- totvert = len(f.verts)
+ totvert = len(f.vertices)
return data[:totvert]
@@ -2076,7 +2068,7 @@ def write(filename, batch_objects = None, \
# ob.copy().link(me)
# # If new mesh has no vgroups we can try add if verts are teh same
# if not me.getVertGroupNames(): # vgroups were not kept by the modifier
-# if len(me.verts) == len(orig_mesh.verts):
+# if len(me.vertices) == len(orig_mesh.vertices):
# groupNames, vWeightDict = BPyMesh.meshWeight2Dict(orig_mesh)
# BPyMesh.dict2MeshWeight(me, groupNames, vWeightDict)
@@ -2763,7 +2755,7 @@ Takes: {''')
act_end = end
else:
# use existing name
- if blenAction == blenActionDefault: # have we alredy got the name
+ if blenAction == blenActionDefault: # have we already got the name
file.write('\n\tTake: "%s" {' % sane_name_mapping_take[blenAction.name])
else:
file.write('\n\tTake: "%s" {' % sane_takename(blenAction))
@@ -2782,7 +2774,7 @@ Takes: {''')
# Set the action active
for my_bone in ob_arms:
- if blenAction in my_bone.blenActionList:
+ if ob.animation_data and blenAction in my_bone.blenActionList:
ob.animation_data.action = blenAction
# print '\t\tSetting Action!', blenAction
# scene.update(1)
@@ -2918,7 +2910,7 @@ Takes: {''')
for val, frame in context_bone_anim_keys:
if frame != context_bone_anim_keys[0][1]: # not the first
file.write(',')
- # frame is alredy one less then blenders frame
+ # frame is already one less then blenders frame
file.write('\n\t\t\t\t\t\t\t%i,%.15f,L' % (fbx_time(frame), val ))
if i==0: file.write('\n\t\t\t\t\t\tColor: 1,0,0')
@@ -2940,7 +2932,8 @@ Takes: {''')
# end action loop. set original actions
# do this after every loop incase actions effect eachother.
for my_bone in ob_arms:
- my_bone.blenObject.animation_data.action = my_bone.blenAction
+ if my_bone.blenObject.animation_data:
+ my_bone.blenObject.animation_data.action = my_bone.blenAction
file.write('\n}')
@@ -2964,7 +2957,7 @@ Takes: {''')
# Clear mesh data Only when writing with modifiers applied
for me in meshes_to_clear:
bpy.data.meshes.remove(me)
-# me.verts = None
+# me.vertices = None
# --------------------------- Footer
if world:
@@ -3037,7 +3030,7 @@ Takes: {''')
# --------------------------------------------
# UI Function - not a part of the exporter.
-# this is to seperate the user interface from the rest of the exporter.
+# this is to separate the user interface from the rest of the exporter.
# from Blender import Draw, Window
EVENT_NONE = 0
EVENT_EXIT = 1
@@ -3364,20 +3357,24 @@ class ExportFBX(bpy.types.Operator):
BATCH_FILE_PREFIX = StringProperty(name="Prefix", description="Prefix each file with this name", maxlen=1024, default="")
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return context.active_object
def execute(self, context):
if not self.properties.filepath:
raise Exception("filepath not set")
+ filepath = self.properties.filepath
+ filepath = bpy.path.ensure_ext(filepath, ".fbx")
+
GLOBAL_MATRIX = mtx4_identity
GLOBAL_MATRIX[0][0] = GLOBAL_MATRIX[1][1] = GLOBAL_MATRIX[2][2] = self.properties.TX_SCALE
if self.properties.TX_XROT90: GLOBAL_MATRIX = mtx4_x90n * GLOBAL_MATRIX
if self.properties.TX_YROT90: GLOBAL_MATRIX = mtx4_y90n * GLOBAL_MATRIX
if self.properties.TX_ZROT90: GLOBAL_MATRIX = mtx4_z90n * GLOBAL_MATRIX
- write(self.properties.filepath,
+ write(filepath,
None, # XXX
context,
self.properties.EXP_OBS_SELECTED,
@@ -3397,13 +3394,17 @@ class ExportFBX(bpy.types.Operator):
self.properties.BATCH_ENABLE,
self.properties.BATCH_GROUP,
self.properties.BATCH_FILE_PREFIX,
- self.properties.BATCH_OWN_DIR)
+ self.properties.BATCH_OWN_DIR,
+ )
return {'FINISHED'}
def invoke(self, context, event):
- wm = context.manager
- wm.add_fileselect(self)
+ import os
+ if not self.properties.is_property_set("filepath"):
+ self.properties.filepath = os.path.splitext(bpy.data.filepath)[0] + ".fbx"
+
+ context.manager.add_fileselect(self)
return {'RUNNING_MODAL'}
@@ -3415,7 +3416,7 @@ class ExportFBX(bpy.types.Operator):
# NOTES (all line numbers correspond to original export_fbx.py (under release/scripts)
# - Draw.PupMenu alternative in 2.5?, temporarily replaced PupMenu with print
-# - get rid of bpy.utils.clean_name somehow
+# - get rid of bpy.path.clean_name somehow
# + fixed: isinstance(inst, bpy.types.*) doesn't work on RNA objects: line 565
# + get rid of BPyObject_getObjectArmature, move it in RNA?
# - BATCH_ENABLE and BATCH_GROUP options: line 327
@@ -3430,24 +3431,21 @@ class ExportFBX(bpy.types.Operator):
# - bpy.data.remove_scene: line 366
# - bpy.sys.time move to bpy.sys.util?
# - new scene creation, activation: lines 327-342, 368
-# - uses bpy.utils.expandpath, *.relpath - replace at least relpath
+# - uses bpy.path.abspath, *.relpath - replace at least relpath
# SMALL or COSMETICAL
# - find a way to get blender version, and put it in bpy.util?, old was Blender.Get('version')
def menu_func(self, context):
- default_path = os.path.splitext(bpy.data.filepath)[0] + ".fbx"
- self.layout.operator(ExportFBX.bl_idname, text="Autodesk FBX (.fbx)").filepath = default_path
+ self.layout.operator(ExportFBX.bl_idname, text="Autodesk FBX (.fbx)")
def register():
- bpy.types.register(ExportFBX)
bpy.types.INFO_MT_file_export.append(menu_func)
def unregister():
- bpy.types.unregister(ExportFBX)
bpy.types.INFO_MT_file_export.remove(menu_func)
if __name__ == "__main__":
diff --git a/release/scripts/io/export_mdd.py b/release/scripts/io/export_mdd.py
index d2e53070910..b2eda13fc8f 100644
--- a/release/scripts/io/export_mdd.py
+++ b/release/scripts/io/export_mdd.py
@@ -65,7 +65,7 @@ def check_vertcount(mesh, vertcount):
'''
check and make sure the vertcount is consistent throughout the frame range
'''
- if len(mesh.verts) != vertcount:
+ if len(mesh.vertices) != vertcount:
raise Exception('Error, number of verts has changed during animation, cannot export')
f.close()
zero_file(filepath)
@@ -94,7 +94,7 @@ def write(filename, sce, ob, PREF_STARTFRAME, PREF_ENDFRAME, PREF_FPS):
[0.0, 0.0, 0.0, 1.0],\
)
- numverts = len(me.verts)
+ numverts = len(me.vertices)
numframes = PREF_ENDFRAME - PREF_STARTFRAME + 1
PREF_FPS = float(PREF_FPS)
@@ -114,7 +114,7 @@ def write(filename, sce, ob, PREF_STARTFRAME, PREF_ENDFRAME, PREF_FPS):
check_vertcount(me, numverts)
me.transform(mat_flip * ob.matrix_world)
- f.write(pack(">%df" % (numverts * 3), *[axis for v in me.verts for axis in v.co]))
+ f.write(pack(">%df" % (numverts * 3), *[axis for v in me.vertices for axis in v.co]))
for frame in range(PREF_STARTFRAME, PREF_ENDFRAME + 1):#in order to start at desired frame
"""
@@ -128,10 +128,10 @@ def write(filename, sce, ob, PREF_STARTFRAME, PREF_ENDFRAME, PREF_FPS):
me.transform(mat_flip * ob.matrix_world)
# Write the vertex data
- f.write(pack(">%df" % (numverts * 3), *[axis for v in me.verts for axis in v.co]))
+ f.write(pack(">%df" % (numverts * 3), *[axis for v in me.vertices for axis in v.co]))
"""
- me_tmp.verts= None
+ me_tmp.vertices= None
"""
f.close()
@@ -165,36 +165,43 @@ class ExportMDD(bpy.types.Operator):
frame_start = IntProperty(name="Start Frame", description="Start frame for baking", min=minframe, max=maxframe, default=1)
frame_end = IntProperty(name="End Frame", description="End frame for baking", min=minframe, max=maxframe, default=250)
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
ob = context.active_object
return (ob and ob.type == 'MESH')
def execute(self, context):
- if not self.properties.filepath:
- raise Exception("filename not set")
- write(self.properties.filepath, context.scene, context.active_object,
- self.properties.frame_start, self.properties.frame_end, self.properties.fps)
+ filepath = self.properties.filepath
+ filepath = bpy.path.ensure_ext(filepath, ".mdd")
+
+ write(filepath,
+ context.scene,
+ context.active_object,
+ self.properties.frame_start,
+ self.properties.frame_end,
+ self.properties.fps,
+ )
+
return {'FINISHED'}
def invoke(self, context, event):
- wm = context.manager
- wm.add_fileselect(self)
+ import os
+ if not self.properties.is_property_set("filepath"):
+ self.properties.filepath = os.path.splitext(bpy.data.filepath)[0] + ".mdd"
+
+ context.manager.add_fileselect(self)
return {'RUNNING_MODAL'}
def menu_func(self, context):
- import os
- default_path = os.path.splitext(bpy.data.filepath)[0] + ".mdd"
- self.layout.operator(ExportMDD.bl_idname, text="Lightwave Point Cache (.mdd)").filepath = default_path
+ self.layout.operator(ExportMDD.bl_idname, text="Lightwave Point Cache (.mdd)")
def register():
- bpy.types.register(ExportMDD)
bpy.types.INFO_MT_file_export.append(menu_func)
def unregister():
- bpy.types.unregister(ExportMDD)
bpy.types.INFO_MT_file_export.remove(menu_func)
if __name__ == "__main__":
diff --git a/release/scripts/io/export_obj.py b/release/scripts/io/export_obj.py
index 626b92c3591..53c4a324ed1 100644
--- a/release/scripts/io/export_obj.py
+++ b/release/scripts/io/export_obj.py
@@ -18,13 +18,6 @@
# <pep8 compliant>
-"""
-Name: 'Wavefront (.obj)...'
-Blender: 248
-Group: 'Export'
-Tooltip: 'Save a Wavefront OBJ File'
-"""
-
__author__ = "Campbell Barton, Jiri Hnidek, Paolo Ciccone"
__url__ = ['http://wiki.blender.org/index.php/Scripts/Manual/Export/wavefront_obj', 'www.blender.org', 'blenderartists.org']
__version__ = "1.21"
@@ -49,16 +42,6 @@ import shutil
import bpy
import mathutils
-
-# Returns a tuple - path,extension.
-# 'hello.obj' > ('hello', '.obj')
-def splitExt(path):
- dotidx = path.rfind('.')
- if dotidx == -1:
- return path, ''
- else:
- return path[:dotidx], path[dotidx:]
-
def fixName(name):
if name == None:
return 'None'
@@ -73,7 +56,7 @@ def write_mtl(scene, filepath, copy_images, mtl_dict):
dest_dir = os.path.dirname(filepath)
def copy_image(image):
- fn = bpy.utils.expandpath(image.filepath)
+ fn = bpy.path.abspath(image.filepath)
fn_strip = os.path.basename(fn)
if copy_images:
rel = fn_strip
@@ -88,7 +71,7 @@ def write_mtl(scene, filepath, copy_images, mtl_dict):
file = open(filepath, "w")
# XXX
-# file.write('# Blender MTL File: %s\n' % Blender.Get('filepath').split('\\')[-1].split('/')[-1])
+# file.write('# Blender MTL File: %s\n' % Blender.Get('filepath').split('\\')[-1].split('/')[-1])
file.write('# Material Count: %i\n' % len(mtl_dict))
# Write material/image combinations we have used.
for key, (mtl_mat_name, mat, img) in mtl_dict.items():
@@ -100,7 +83,7 @@ def write_mtl(scene, filepath, copy_images, mtl_dict):
if mat:
file.write('Ns %.6f\n' % ((mat.specular_hardness-1) * 1.9607843137254901) ) # Hardness, convert blenders 1-511 to MTL's
- file.write('Ka %.6f %.6f %.6f\n' % tuple([c*mat.ambient for c in worldAmb]) ) # Ambient, uses mirror colour,
+ file.write('Ka %.6f %.6f %.6f\n' % tuple([c*mat.ambient for c in worldAmb]) ) # Ambient, uses mirror colour,
file.write('Kd %.6f %.6f %.6f\n' % tuple([c*mat.diffuse_intensity for c in mat.diffuse_color]) ) # Diffuse
file.write('Ks %.6f %.6f %.6f\n' % tuple([c*mat.specular_intensity for c in mat.specular_color]) ) # Specular
if hasattr(mat, "ior"):
@@ -110,7 +93,7 @@ def write_mtl(scene, filepath, copy_images, mtl_dict):
file.write('d %.6f\n' % mat.alpha) # Alpha (obj uses 'd' for dissolve)
# 0 to disable lighting, 1 for ambient & diffuse only (specular color set to black), 2 for full lighting.
- if mat.shadeless:
+ if mat.use_shadeless:
file.write('illum 0\n') # ignore lighting
elif mat.specular_intensity == 0:
file.write('illum 1\n') # no specular.
@@ -120,25 +103,25 @@ def write_mtl(scene, filepath, copy_images, mtl_dict):
else:
#write a dummy material here?
file.write('Ns 0\n')
- file.write('Ka %.6f %.6f %.6f\n' % tuple([c for c in worldAmb]) ) # Ambient, uses mirror colour,
+ file.write('Ka %.6f %.6f %.6f\n' % tuple([c for c in worldAmb]) ) # Ambient, uses mirror colour,
file.write('Kd 0.8 0.8 0.8\n')
file.write('Ks 0.8 0.8 0.8\n')
file.write('d 1\n') # No alpha
file.write('illum 2\n') # light normaly
# Write images!
- if img: # We have an image on the face!
+ if img: # We have an image on the face!
# write relative image path
rel = copy_image(img)
file.write('map_Kd %s\n' % rel) # Diffuse mapping image
-# file.write('map_Kd %s\n' % img.filepath.split('\\')[-1].split('/')[-1]) # Diffuse mapping image
+# file.write('map_Kd %s\n' % img.filepath.split('\\')[-1].split('/')[-1]) # Diffuse mapping image
elif mat: # No face image. if we havea material search for MTex image.
for mtex in mat.texture_slots:
if mtex and mtex.texture.type == 'IMAGE':
try:
filepath = copy_image(mtex.texture.image)
-# filepath = mtex.texture.image.filepath.split('\\')[-1].split('/')[-1]
+# filepath = mtex.texture.image.filepath.split('\\')[-1].split('/')[-1]
file.write('map_Kd %s\n' % filepath) # Diffuse mapping image
break
except:
@@ -164,8 +147,8 @@ def copy_file(source, dest):
def copy_images(dest_dir):
if dest_dir[-1] != os.sep:
dest_dir += os.sep
-# if dest_dir[-1] != sys.sep:
-# dest_dir += sys.sep
+# if dest_dir[-1] != sys.sep:
+# dest_dir += sys.sep
# Get unique image names
uniqueImages = {}
@@ -188,20 +171,20 @@ def copy_images(dest_dir):
# Now copy images
copyCount = 0
-# for bImage in uniqueImages.values():
-# image_path = bpy.utils.expandpath(bImage.filepath)
-# if bpy.sys.exists(image_path):
-# # Make a name for the target path.
-# dest_image_path = dest_dir + image_path.split('\\')[-1].split('/')[-1]
-# if not bpy.utils.exists(dest_image_path): # Image isnt alredy there
-# print('\tCopying "%s" > "%s"' % (image_path, dest_image_path))
-# copy_file(image_path, dest_image_path)
-# copyCount+=1
+# for bImage in uniqueImages.values():
+# image_path = bpy.path.abspath(bImage.filepath)
+# if bpy.sys.exists(image_path):
+# # Make a name for the target path.
+# dest_image_path = dest_dir + image_path.split('\\')[-1].split('/')[-1]
+# if not bpy.utils.exists(dest_image_path): # Image isnt already there
+# print('\tCopying "%s" > "%s"' % (image_path, dest_image_path))
+# copy_file(image_path, dest_image_path)
+# copyCount+=1
-# paths= bpy.util.copy_images(uniqueImages.values(), dest_dir)
+# paths= bpy.util.copy_images(uniqueImages.values(), dest_dir)
print('\tCopied %d images' % copyCount)
-# print('\tCopied %d images' % copyCount)
+# print('\tCopied %d images' % copyCount)
# XXX not converted
def test_nurbs_compat(ob):
@@ -224,8 +207,8 @@ def write_nurb(file, ob, ob_mat):
Vector = Blender.mathutils.Vector
for nu in cu:
- if nu.type==0: DEG_ORDER_U = 1
- else: DEG_ORDER_U = nu.orderU-1 # Tested to be correct
+ if nu.type==0: DEG_ORDER_U = 1
+ else: DEG_ORDER_U = nu.orderU-1 # Tested to be correct
if nu.type==1:
print("\tWarning, bezier curve:", ob.name, "only poly and nurbs curves supported")
@@ -282,7 +265,7 @@ def write_nurb(file, ob, ob_mat):
return tot_verts
-def write(filepath, objects, scene,
+def write_file(filepath, objects, scene,
EXPORT_TRI=False,
EXPORT_EDGES=False,
EXPORT_NORMALS=False,
@@ -299,7 +282,7 @@ def write(filepath, objects, scene,
EXPORT_POLYGROUPS=False,
EXPORT_CURVE_AS_NURBS=True):
'''
- Basic write function. The context and options must be alredy set
+ Basic write function. The context and options must be already set
This can be accessed externaly
eg.
write( 'c:\\test\\foobar.obj', Blender.Object.GetSelected() ) # Using default options.
@@ -325,10 +308,10 @@ def write(filepath, objects, scene,
of vertices is the face's group
"""
weightDict = {}
- for vert_index in face.verts:
-# for vert in face:
+ for vert_index in face.vertices:
+# for vert in face:
vWeights = vWeightMap[vert_index]
-# vWeights = vWeightMap[vert]
+# vWeights = vWeightMap[vert]
for vGroupName, weight in vWeights:
weightDict[vGroupName] = weightDict.get(vGroupName, 0) + weight
@@ -343,7 +326,7 @@ def write(filepath, objects, scene,
def getVertsFromGroup(me, group_index):
ret = []
- for i, v in enumerate(me.verts):
+ for i, v in enumerate(me.vertices):
for g in v.groups:
if g.group == group_index:
ret.append((i, g.weight))
@@ -355,8 +338,8 @@ def write(filepath, objects, scene,
temp_mesh_name = '~tmp-mesh'
time1 = time.clock()
-# time1 = sys.time()
-# scn = Scene.GetCurrent()
+# time1 = sys.time()
+# scn = Scene.GetCurrent()
file = open(filepath, "w")
@@ -370,7 +353,7 @@ def write(filepath, objects, scene,
file.write('mtllib %s\n' % ( mtlfilepath.split('\\')[-1].split('/')[-1] ))
if EXPORT_ROTX90:
- mat_xrot90= mathutils.RotationMatrix(-math.pi/2, 4, 'X')
+ mat_xrot90= mathutils.Matrix.Rotation(-math.pi/2, 4, 'X')
# Initialize totals, these are updated each object
totverts = totuvco = totno = 1
@@ -408,15 +391,15 @@ def write(filepath, objects, scene,
for ob, ob_mat in obs:
# XXX postponed
-# # Nurbs curve support
-# if EXPORT_CURVE_AS_NURBS and test_nurbs_compat(ob):
-# if EXPORT_ROTX90:
-# ob_mat = ob_mat * mat_xrot90
+# # Nurbs curve support
+# if EXPORT_CURVE_AS_NURBS and test_nurbs_compat(ob):
+# if EXPORT_ROTX90:
+# ob_mat = ob_mat * mat_xrot90
-# totverts += write_nurb(file, ob, ob_mat)
+# totverts += write_nurb(file, ob, ob_mat)
-# continue
-# end nurbs
+# continue
+# end nurbs
if ob.type != 'MESH':
continue
@@ -428,16 +411,19 @@ def write(filepath, objects, scene,
else:
me.transform(ob_mat)
-# # Will work for non meshes now! :)
-# me= BPyMesh.getMeshFromObject(ob, containerMesh, EXPORT_APPLY_MODIFIERS, EXPORT_POLYGROUPS, scn)
-# if not me:
-# continue
+# # Will work for non meshes now! :)
+# me= BPyMesh.getMeshFromObject(ob, containerMesh, EXPORT_APPLY_MODIFIERS, EXPORT_POLYGROUPS, scn)
+# if not me:
+# continue
if EXPORT_UV:
faceuv = len(me.uv_textures) > 0
+ uv_layer = me.active_uv_texture.data[:]
else:
faceuv = False
+ me_verts = me.vertices[:]
+
# XXX - todo, find a better way to do triangulation
# ...removed convert_to_triface because it relies on editmesh
'''
@@ -446,7 +432,7 @@ def write(filepath, objects, scene,
# Add a dummy object to it.
has_quads = False
for f in me.faces:
- if f.verts[3] != 0:
+ if f.vertices[3] != 0:
has_quads = True
break
@@ -468,7 +454,7 @@ def write(filepath, objects, scene,
else:
edges = []
- if not (len(face_index_pairs)+len(edges)+len(me.verts)): # Make sure there is somthing to write
+ if not (len(face_index_pairs)+len(edges)+len(me.vertices)): # Make sure there is somthing to write
# clean up
bpy.data.meshes.remove(me)
@@ -479,13 +465,13 @@ def write(filepath, objects, scene,
# High Quality Normals
if EXPORT_NORMALS and face_index_pairs:
me.calc_normals()
-# if EXPORT_NORMALS_HQ:
-# BPyMesh.meshCalcNormals(me)
-# else:
-# # transforming normals is incorrect
-# # when the matrix is scaled,
-# # better to recalculate them
-# me.calcNormals()
+# if EXPORT_NORMALS_HQ:
+# BPyMesh.meshCalcNormals(me)
+# else:
+# # transforming normals is incorrect
+# # when the matrix is scaled,
+# # better to recalculate them
+# me.calcNormals()
materials = me.materials
@@ -510,29 +496,24 @@ def write(filepath, objects, scene,
if EXPORT_KEEP_VERT_ORDER:
pass
elif faceuv:
- # XXX update
- tface = me.active_uv_texture.data
-
- face_index_pairs.sort(key=lambda a: (a[0].material_index, hash(tface[a[1]].image), a[0].smooth))
+ face_index_pairs.sort(key=lambda a: (a[0].material_index, hash(uv_layer[a[1]].image), a[0].use_smooth))
elif len(materials) > 1:
- face_index_pairs.sort(key = lambda a: (a[0].material_index, a[0].smooth))
+ face_index_pairs.sort(key = lambda a: (a[0].material_index, a[0].use_smooth))
else:
# no materials
- face_index_pairs.sort(key = lambda a: a[0].smooth)
-# if EXPORT_KEEP_VERT_ORDER:
-# pass
-# elif faceuv:
-# try: faces.sort(key = lambda a: (a.mat, a.image, a.smooth))
-# except: faces.sort(lambda a,b: cmp((a.mat, a.image, a.smooth), (b.mat, b.image, b.smooth)))
-# elif len(materials) > 1:
-# try: faces.sort(key = lambda a: (a.mat, a.smooth))
-# except: faces.sort(lambda a,b: cmp((a.mat, a.smooth), (b.mat, b.smooth)))
-# else:
-# # no materials
-# try: faces.sort(key = lambda a: a.smooth)
-# except: faces.sort(lambda a,b: cmp(a.smooth, b.smooth))
-
- faces = [pair[0] for pair in face_index_pairs]
+ face_index_pairs.sort(key = lambda a: a[0].use_smooth)
+# if EXPORT_KEEP_VERT_ORDER:
+# pass
+# elif faceuv:
+# try: faces.sort(key = lambda a: (a.mat, a.image, a.use_smooth))
+# except: faces.sort(lambda a,b: cmp((a.mat, a.image, a.use_smooth), (b.mat, b.image, b.use_smooth)))
+# elif len(materials) > 1:
+# try: faces.sort(key = lambda a: (a.mat, a.use_smooth))
+# except: faces.sort(lambda a,b: cmp((a.mat, a.use_smooth), (b.mat, b.use_smooth)))
+# else:
+# # no materials
+# try: faces.sort(key = lambda a: a.use_smooth)
+# except: faces.sort(lambda a,b: cmp(a.use_smooth, b.use_smooth))
# Set the default mat to no material and no image.
contextMat = (0, 0) # Can never be this, so we will label a new material teh first chance we get.
@@ -553,28 +534,17 @@ def write(filepath, objects, scene,
# Vert
- for v in me.verts:
+ for v in me_verts:
file.write('v %.6f %.6f %.6f\n' % tuple(v.co))
# UV
if faceuv:
- uv_face_mapping = [[0,0,0,0] for f in faces] # a bit of a waste for tri's :/
+ uv_face_mapping = [[0,0,0,0] for i in range(len(face_index_pairs))] # a bit of a waste for tri's :/
uv_dict = {} # could use a set() here
- uv_layer = me.active_uv_texture
+ uv_layer = me.active_uv_texture.data
for f, f_index in face_index_pairs:
-
- tface = uv_layer.data[f_index]
-
- # workaround, since tface.uv iteration is wrong atm
- uvs = tface.uv
- # uvs = [tface.uv1, tface.uv2, tface.uv3]
-
- # # add another UV if it's a quad
- # if len(f.verts) == 4:
- # uvs.append(tface.uv4)
-
- for uv_index, uv in enumerate(uvs):
+ for uv_index, uv in enumerate(uv_layer[f_index].uv):
uvkey = veckey2d(uv)
try:
uv_face_mapping[f_index][uv_index] = uv_dict[uvkey]
@@ -582,27 +552,16 @@ def write(filepath, objects, scene,
uv_face_mapping[f_index][uv_index] = uv_dict[uvkey] = len(uv_dict)
file.write('vt %.6f %.6f\n' % tuple(uv))
-# uv_dict = {} # could use a set() here
-# for f_index, f in enumerate(faces):
-
-# for uv_index, uv in enumerate(f.uv):
-# uvkey = veckey2d(uv)
-# try:
-# uv_face_mapping[f_index][uv_index] = uv_dict[uvkey]
-# except:
-# uv_face_mapping[f_index][uv_index] = uv_dict[uvkey] = len(uv_dict)
-# file.write('vt %.6f %.6f\n' % tuple(uv))
-
uv_unique_count = len(uv_dict)
-# del uv, uvkey, uv_dict, f_index, uv_index
+# del uv, uvkey, uv_dict, f_index, uv_index
# Only need uv_unique_count and uv_face_mapping
# NORMAL, Smooth/Non smoothed.
if EXPORT_NORMALS:
- for f in faces:
- if f.smooth:
- for vIdx in f.verts:
- v = me.verts[vIdx]
+ for f, f_index in face_index_pairs:
+ if f.use_smooth:
+ for v_idx in f.vertices:
+ v = me_verts[v_idx]
noKey = veckey3d(v.normal)
if noKey not in globalNormals:
globalNormals[noKey] = totno
@@ -622,66 +581,66 @@ def write(filepath, objects, scene,
# XXX
if EXPORT_POLYGROUPS:
# Retrieve the list of vertex groups
-# vertGroupNames = me.getVertGroupNames()
+# vertGroupNames = me.getVertGroupNames()
currentVGroup = ''
# Create a dictionary keyed by face id and listing, for each vertex, the vertex groups it belongs to
- vgroupsMap = [[] for _i in range(len(me.verts))]
-# vgroupsMap = [[] for _i in xrange(len(me.verts))]
+ vgroupsMap = [[] for _i in range(len(me_verts))]
+# vgroupsMap = [[] for _i in xrange(len(me_verts))]
for g in ob.vertex_groups:
-# for vertexGroupName in vertGroupNames:
- for vIdx, vWeight in getVertsFromGroup(me, g.index):
-# for vIdx, vWeight in me.getVertsFromGroup(vertexGroupName, 1):
- vgroupsMap[vIdx].append((g.name, vWeight))
+# for vertexGroupName in vertGroupNames:
+ for v_idx, vWeight in getVertsFromGroup(me, g.index):
+# for v_idx, vWeight in me.getVertsFromGroup(vertexGroupName, 1):
+ vgroupsMap[v_idx].append((g.name, vWeight))
- for f_index, f in enumerate(faces):
- f_v = [{"index": index, "vertex": me.verts[index]} for index in f.verts]
+ for f, f_index in face_index_pairs:
+ f_v = [me_verts[v_idx] for v_idx in f.vertices]
- # if f.verts[3] == 0:
- # f_v.pop()
+ # if f.vertices[3] == 0:
+ # f_v.pop()
-# f_v= f.v
- f_smooth= f.smooth
+# f_v= f.v
+ f_smooth= f.use_smooth
f_mat = min(f.material_index, len(materialNames)-1)
-# f_mat = min(f.mat, len(materialNames)-1)
+# f_mat = min(f.mat, len(materialNames)-1)
if faceuv:
- tface = me.active_uv_texture.data[face_index_pairs[f_index][1]]
+ tface = uv_layer[f_index]
f_image = tface.image
f_uv = tface.uv
# f_uv= [tface.uv1, tface.uv2, tface.uv3]
- # if len(f.verts) == 4:
- # f_uv.append(tface.uv4)
-# f_image = f.image
-# f_uv= f.uv
+ # if len(f.vertices) == 4:
+ # f_uv.append(tface.uv4)
+# f_image = f.image
+# f_uv= f.uv
# MAKE KEY
if faceuv and f_image: # Object is always true.
- key = materialNames[f_mat], f_image.name
+ key = materialNames[f_mat], f_image.name
else:
- key = materialNames[f_mat], None # No image, use None instead.
+ key = materialNames[f_mat], None # No image, use None instead.
# Write the vertex group
if EXPORT_POLYGROUPS:
if len(ob.vertex_groups):
# find what vertext group the face belongs to
theVGroup = findVertexGroupName(f,vgroupsMap)
- if theVGroup != currentVGroup:
+ if theVGroup != currentVGroup:
currentVGroup = theVGroup
file.write('g %s\n' % theVGroup)
-# # Write the vertex group
-# if EXPORT_POLYGROUPS:
-# if vertGroupNames:
-# # find what vertext group the face belongs to
-# theVGroup = findVertexGroupName(f,vgroupsMap)
-# if theVGroup != currentVGroup:
-# currentVGroup = theVGroup
-# file.write('g %s\n' % theVGroup)
+# # Write the vertex group
+# if EXPORT_POLYGROUPS:
+# if vertGroupNames:
+# # find what vertext group the face belongs to
+# theVGroup = findVertexGroupName(f,vgroupsMap)
+# if theVGroup != currentVGroup:
+# currentVGroup = theVGroup
+# file.write('g %s\n' % theVGroup)
# CHECK FOR CONTEXT SWITCH
if key == contextMat:
- pass # Context alredy switched, dont do anything
+ pass # Context already switched, dont do anything
else:
if key[0] == None and key[1] == None:
# Write a null material, since we know the context has changed.
@@ -725,21 +684,21 @@ def write(filepath, objects, scene,
if f_smooth: # Smoothed, use vertex normals
for vi, v in enumerate(f_v):
file.write( ' %d/%d/%d' % \
- (v["index"] + totverts,
+ (v.index + totverts,
totuvco + uv_face_mapping[f_index][vi],
- globalNormals[ veckey3d(v["vertex"].normal) ]) ) # vert, uv, normal
+ globalNormals[ veckey3d(v.normal) ]) ) # vert, uv, normal
else: # No smoothing, face normals
no = globalNormals[ veckey3d(f.normal) ]
for vi, v in enumerate(f_v):
file.write( ' %d/%d/%d' % \
- (v["index"] + totverts,
+ (v.index + totverts,
totuvco + uv_face_mapping[f_index][vi],
no) ) # vert, uv, normal
else: # No Normals
for vi, v in enumerate(f_v):
file.write( ' %d/%d' % (\
- v["index"] + totverts,\
+ v.index + totverts,\
totuvco + uv_face_mapping[f_index][vi])) # vert, uv
face_vert_index += len(f_v)
@@ -749,25 +708,25 @@ def write(filepath, objects, scene,
if f_smooth: # Smoothed, use vertex normals
for v in f_v:
file.write( ' %d//%d' %
- (v["index"] + totverts, globalNormals[ veckey3d(v["vertex"].normal) ]) )
+ (v.index + totverts, globalNormals[ veckey3d(v.normal) ]) )
else: # No smoothing, face normals
no = globalNormals[ veckey3d(f.normal) ]
for v in f_v:
- file.write( ' %d//%d' % (v["index"] + totverts, no) )
+ file.write( ' %d//%d' % (v.index + totverts, no) )
else: # No Normals
for v in f_v:
- file.write( ' %d' % (v["index"] + totverts) )
+ file.write( ' %d' % (v.index + totverts) )
file.write('\n')
# Write edges.
if EXPORT_EDGES:
for ed in edges:
- if ed.loose:
- file.write('f %d %d\n' % (ed.verts[0] + totverts, ed.verts[1] + totverts))
+ if ed.is_loose:
+ file.write('f %d %d\n' % (ed.vertices[0] + totverts, ed.vertices[1] + totverts))
# Make the indicies global rather then per mesh
- totverts += len(me.verts)
+ totverts += len(me_verts)
if faceuv:
totuvco += uv_unique_count
@@ -783,52 +742,52 @@ def write(filepath, objects, scene,
# Now we have all our materials, save them
if EXPORT_MTL:
write_mtl(scene, mtlfilepath, EXPORT_COPY_IMAGES, mtl_dict)
-# if EXPORT_COPY_IMAGES:
-# dest_dir = os.path.basename(filepath)
-# # dest_dir = filepath
-# # # Remove chars until we are just the path.
-# # while dest_dir and dest_dir[-1] not in '\\/':
-# # dest_dir = dest_dir[:-1]
-# if dest_dir:
-# copy_images(dest_dir, mtl_dict)
-# else:
-# print('\tError: "%s" could not be used as a base for an image path.' % filepath)
+# if EXPORT_COPY_IMAGES:
+# dest_dir = os.path.basename(filepath)
+# # dest_dir = filepath
+# # # Remove chars until we are just the path.
+# # while dest_dir and dest_dir[-1] not in '\\/':
+# # dest_dir = dest_dir[:-1]
+# if dest_dir:
+# copy_images(dest_dir, mtl_dict)
+# else:
+# print('\tError: "%s" could not be used as a base for an image path.' % filepath)
print("OBJ Export time: %.2f" % (time.clock() - time1))
-# print "OBJ Export time: %.2f" % (sys.time() - time1)
-
-def do_export(filepath, context,
- EXPORT_APPLY_MODIFIERS = True, # not used
- EXPORT_ROTX90 = True, # wrong
- EXPORT_TRI = False, # ok
- EXPORT_EDGES = False,
- EXPORT_NORMALS = False, # not yet
- EXPORT_NORMALS_HQ = False, # not yet
- EXPORT_UV = True, # ok
- EXPORT_MTL = True,
- EXPORT_SEL_ONLY = True, # ok
- EXPORT_ALL_SCENES = False, # XXX not working atm
- EXPORT_ANIMATION = False,
- EXPORT_COPY_IMAGES = False,
- EXPORT_BLEN_OBS = True,
- EXPORT_GROUP_BY_OB = False,
- EXPORT_GROUP_BY_MAT = False,
- EXPORT_KEEP_VERT_ORDER = False,
- EXPORT_POLYGROUPS = False,
- EXPORT_CURVE_AS_NURBS = True):
+
+def write(filepath, context,
+ EXPORT_TRI, # ok
+ EXPORT_EDGES,
+ EXPORT_NORMALS, # not yet
+ EXPORT_NORMALS_HQ, # not yet
+ EXPORT_UV, # ok
+ EXPORT_MTL,
+ EXPORT_COPY_IMAGES,
+ EXPORT_APPLY_MODIFIERS, # ok
+ EXPORT_ROTX90, # wrong
+ EXPORT_BLEN_OBS,
+ EXPORT_GROUP_BY_OB,
+ EXPORT_GROUP_BY_MAT,
+ EXPORT_KEEP_VERT_ORDER,
+ EXPORT_POLYGROUPS,
+ EXPORT_CURVE_AS_NURBS,
+ EXPORT_SEL_ONLY, # ok
+ EXPORT_ALL_SCENES, # XXX not working atm
+ EXPORT_ANIMATION): # Not used
- base_name, ext = splitExt(filepath)
+ base_name, ext = os.path.splitext(filepath)
context_name = [base_name, '', '', ext] # Base name, scene name, frame number, extension
orig_scene = context.scene
# Exit edit mode before exporting, so current object states are exported properly.
- bpy.ops.object.mode_set(mode='OBJECT')
+ if context.object:
+ bpy.ops.object.mode_set(mode='OBJECT')
-# if EXPORT_ALL_SCENES:
-# export_scenes = bpy.data.scenes
-# else:
-# export_scenes = [orig_scene]
+# if EXPORT_ALL_SCENES:
+# export_scenes = bpy.data.scenes
+# else:
+# export_scenes = [orig_scene]
# XXX only exporting one scene atm since changing
# current scene is not possible.
@@ -837,17 +796,17 @@ def do_export(filepath, context,
export_scenes = [orig_scene]
# Export all scenes.
- for scn in export_scenes:
- # scn.makeCurrent() # If already current, this is not slow.
- # context = scn.getRenderingContext()
- orig_frame = scn.frame_current
+ for scene in export_scenes:
+ # scene.makeCurrent() # If already current, this is not slow.
+ # context = scene.getRenderingContext()
+ orig_frame = scene.frame_current
if EXPORT_ALL_SCENES: # Add scene name into the context_name
- context_name[1] = '_%s' % bpy.utils.clean_name(scn.name) # WARNING, its possible that this could cause a collision. we could fix if were feeling parranoied.
+ context_name[1] = '_%s' % bpy.path.clean_name(scene.name) # WARNING, its possible that this could cause a collision. we could fix if were feeling parranoied.
# Export an animation?
if EXPORT_ANIMATION:
- scene_frames = range(scn.frame_start, context.frame_end + 1) # Up to and including the end frame.
+ scene_frames = range(scene.frame_start, context.frame_end + 1) # Up to and including the end frame.
else:
scene_frames = [orig_frame] # Dont export an animation.
@@ -856,30 +815,39 @@ def do_export(filepath, context,
if EXPORT_ANIMATION: # Add frame to the filepath.
context_name[2] = '_%.6d' % frame
- scn.frame_current = frame
+ scene.frame_current = frame
if EXPORT_SEL_ONLY:
- export_objects = context.selected_objects
+ objects = context.selected_objects
else:
- export_objects = scn.objects
+ objects = scene.objects
full_path= ''.join(context_name)
# erm... bit of a problem here, this can overwrite files when exporting frames. not too bad.
# EXPORT THE FILE.
- write(full_path, export_objects, scn,
- EXPORT_TRI, EXPORT_EDGES, EXPORT_NORMALS,
- EXPORT_NORMALS_HQ, EXPORT_UV, EXPORT_MTL,
- EXPORT_COPY_IMAGES, EXPORT_APPLY_MODIFIERS,
- EXPORT_ROTX90, EXPORT_BLEN_OBS,
- EXPORT_GROUP_BY_OB, EXPORT_GROUP_BY_MAT, EXPORT_KEEP_VERT_ORDER,
- EXPORT_POLYGROUPS, EXPORT_CURVE_AS_NURBS)
-
-
- scn.frame_current = orig_frame
+ write_file(full_path, objects, scene,
+ EXPORT_TRI,
+ EXPORT_EDGES,
+ EXPORT_NORMALS,
+ EXPORT_NORMALS_HQ,
+ EXPORT_UV,
+ EXPORT_MTL,
+ EXPORT_COPY_IMAGES,
+ EXPORT_APPLY_MODIFIERS,
+ EXPORT_ROTX90,
+ EXPORT_BLEN_OBS,
+ EXPORT_GROUP_BY_OB,
+ EXPORT_GROUP_BY_MAT,
+ EXPORT_KEEP_VERT_ORDER,
+ EXPORT_POLYGROUPS,
+ EXPORT_CURVE_AS_NURBS)
+
+
+ scene.frame_current = orig_frame
# Restore old active scene.
-# orig_scene.makeCurrent()
-# Window.WaitCursor(0)
+# orig_scene.makeCurrent()
+# Window.WaitCursor(0)
'''
@@ -904,12 +872,12 @@ class ExportOBJ(bpy.types.Operator):
check_existing = BoolProperty(name="Check Existing", description="Check and warn on overwriting existing files", default=True, options={'HIDDEN'})
# context group
- use_selection = BoolProperty(name="Selection Only", description="", default= False)
+ use_selection = BoolProperty(name="Selection Only", description="Export selected objects only", default= False)
use_all_scenes = BoolProperty(name="All Scenes", description="", default= False)
- use_animation = BoolProperty(name="All Animation", description="", default= False)
+ use_animation = BoolProperty(name="Animation", description="", default= False)
# object group
- use_modifiers = BoolProperty(name="Apply Modifiers", description="", default= True)
+ use_modifiers = BoolProperty(name="Apply Modifiers", description="Apply modifiers (preview resolution)", default= True)
use_rotate90 = BoolProperty(name="Rotate X90", description="", default= True)
# extra data group
@@ -933,47 +901,47 @@ class ExportOBJ(bpy.types.Operator):
def execute(self, context):
filepath = self.properties.filepath
- if not filepath.lower().endswith(".obj"):
- filepath += ".obj"
-
- do_export(filepath, context,
- EXPORT_TRI=self.properties.use_triangles,
- EXPORT_EDGES=self.properties.use_edges,
- EXPORT_NORMALS=self.properties.use_normals,
- EXPORT_NORMALS_HQ=self.properties.use_hq_normals,
- EXPORT_UV=self.properties.use_uvs,
- EXPORT_MTL=self.properties.use_materials,
- EXPORT_COPY_IMAGES=self.properties.copy_images,
- EXPORT_APPLY_MODIFIERS=self.properties.use_modifiers,
- EXPORT_ROTX90=self.properties.use_rotate90,
- EXPORT_BLEN_OBS=self.properties.use_blen_objects,
- EXPORT_GROUP_BY_OB=self.properties.group_by_object,
- EXPORT_GROUP_BY_MAT=self.properties.group_by_material,
- EXPORT_KEEP_VERT_ORDER=self.properties.keep_vertex_order,
- EXPORT_POLYGROUPS=self.properties.use_vertex_groups,
- EXPORT_CURVE_AS_NURBS=self.properties.use_nurbs,
- EXPORT_SEL_ONLY=self.properties.use_selection,
- EXPORT_ALL_SCENES=self.properties.use_all_scenes)
+ filepath = bpy.path.ensure_ext(filepath, ".obj")
+
+ write(filepath, context,
+ EXPORT_TRI=self.properties.use_triangles,
+ EXPORT_EDGES=self.properties.use_edges,
+ EXPORT_NORMALS=self.properties.use_normals,
+ EXPORT_NORMALS_HQ=self.properties.use_hq_normals,
+ EXPORT_UV=self.properties.use_uvs,
+ EXPORT_MTL=self.properties.use_materials,
+ EXPORT_COPY_IMAGES=self.properties.copy_images,
+ EXPORT_APPLY_MODIFIERS=self.properties.use_modifiers,
+ EXPORT_ROTX90=self.properties.use_rotate90,
+ EXPORT_BLEN_OBS=self.properties.use_blen_objects,
+ EXPORT_GROUP_BY_OB=self.properties.group_by_object,
+ EXPORT_GROUP_BY_MAT=self.properties.group_by_material,
+ EXPORT_KEEP_VERT_ORDER=self.properties.keep_vertex_order,
+ EXPORT_POLYGROUPS=self.properties.use_vertex_groups,
+ EXPORT_CURVE_AS_NURBS=self.properties.use_nurbs,
+ EXPORT_SEL_ONLY=self.properties.use_selection,
+ EXPORT_ALL_SCENES=self.properties.use_all_scenes,
+ EXPORT_ANIMATION=self.properties.use_animation)
return {'FINISHED'}
def invoke(self, context, event):
- wm = context.manager
- wm.add_fileselect(self)
+ import os
+ if not self.properties.is_property_set("filepath"):
+ self.properties.filepath = os.path.splitext(bpy.data.filepath)[0] + ".obj"
+
+ context.manager.add_fileselect(self)
return {'RUNNING_MODAL'}
def menu_func(self, context):
- default_path = os.path.splitext(bpy.data.filepath)[0] + ".obj"
- self.layout.operator(ExportOBJ.bl_idname, text="Wavefront (.obj)").filepath = default_path
+ self.layout.operator(ExportOBJ.bl_idname, text="Wavefront (.obj)")
def register():
- bpy.types.register(ExportOBJ)
bpy.types.INFO_MT_file_export.append(menu_func)
def unregister():
- bpy.types.unregister(ExportOBJ)
bpy.types.INFO_MT_file_export.remove(menu_func)
@@ -986,4 +954,3 @@ def unregister():
if __name__ == "__main__":
register()
-
diff --git a/release/scripts/io/export_ply.py b/release/scripts/io/export_ply.py
index 0b936bdceb2..1a4fd7a6ff9 100644
--- a/release/scripts/io/export_ply.py
+++ b/release/scripts/io/export_ply.py
@@ -99,7 +99,8 @@ def write(filename, scene, ob, \
Window.WaitCursor(1)
"""
- bpy.ops.object.mode_set(mode='OBJECT')
+ if scene.objects.active:
+ bpy.ops.object.mode_set(mode='OBJECT')
#mesh = BPyMesh.getMeshFromObject(ob, None, EXPORT_APPLY_MODIFIERS, False, scn) # XXX
if EXPORT_APPLY_MODIFIERS:
@@ -146,7 +147,7 @@ def write(filename, scene, ob, \
# incase
color = uvcoord = uvcoord_key = normal = normal_key = None
- mesh_verts = mesh.verts # save a lookup
+ mesh_verts = mesh.vertices # save a lookup
ply_verts = [] # list of dictionaries
# vdict = {} # (index, normal, uv) -> new index
vdict = [{} for i in range(len(mesh_verts))]
@@ -155,7 +156,7 @@ def write(filename, scene, ob, \
for i, f in enumerate(mesh.faces):
- smooth = f.smooth
+ smooth = f.use_smooth
if not smooth:
normal = tuple(f.normal)
normal_key = rvec3d(normal)
@@ -167,7 +168,7 @@ def write(filename, scene, ob, \
col = active_col_layer[i]
col = col.color1, col.color2, col.color3, col.color4
- f_verts = f.verts
+ f_verts = f.vertices
pf = ply_faces[i]
for j, vidx in enumerate(f_verts):
@@ -274,16 +275,15 @@ class ExportPLY(bpy.types.Operator):
use_uvs = BoolProperty(name="UVs", description="Exort the active UV layer", default=True)
use_colors = BoolProperty(name="Vertex Colors", description="Exort the active vertex color layer", default=True)
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return context.active_object != None
def execute(self, context):
- # print("Selected: " + context.active_object.name)
+ filepath = self.properties.filepath
+ filepath = bpy.path.ensure_ext(filepath, ".ply")
- if not self.properties.filepath:
- raise Exception("filename not set")
-
- write(self.properties.filepath, context.scene, context.active_object,\
+ write(filepath, context.scene, context.active_object,\
EXPORT_APPLY_MODIFIERS=self.properties.use_modifiers,
EXPORT_NORMALS=self.properties.use_normals,
EXPORT_UV=self.properties.use_uvs,
@@ -293,8 +293,11 @@ class ExportPLY(bpy.types.Operator):
return {'FINISHED'}
def invoke(self, context, event):
- wm = context.manager
- wm.add_fileselect(self)
+ import os
+ if not self.properties.is_property_set("filepath"):
+ self.properties.filepath = os.path.splitext(bpy.data.filepath)[0] + ".ply"
+
+ context.manager.add_fileselect(self)
return {'RUNNING_MODAL'}
def draw(self, context):
@@ -310,18 +313,14 @@ class ExportPLY(bpy.types.Operator):
def menu_func(self, context):
- import os
- default_path = os.path.splitext(bpy.data.filepath)[0] + ".ply"
- self.layout.operator(ExportPLY.bl_idname, text="Stanford (.ply)").filepath = default_path
+ self.layout.operator(ExportPLY.bl_idname, text="Stanford (.ply)")
def register():
- bpy.types.register(ExportPLY)
bpy.types.INFO_MT_file_export.append(menu_func)
def unregister():
- bpy.types.unregister(ExportPLY)
bpy.types.INFO_MT_file_export.remove(menu_func)
if __name__ == "__main__":
diff --git a/release/scripts/io/export_x3d.py b/release/scripts/io/export_x3d.py
index 1bad80f6d8e..aafb7c922a1 100644
--- a/release/scripts/io/export_x3d.py
+++ b/release/scripts/io/export_x3d.py
@@ -81,7 +81,7 @@ from export_3ds import create_derived_objects, free_derived_objects
#
DEG2RAD=0.017453292519943295
-MATWORLD= mathutils.RotationMatrix(-90, 4, 'X')
+MATWORLD= mathutils.Matrix.Rotation(-90, 4, 'X')
####################################
# Global Variables
@@ -406,13 +406,13 @@ class x3d_class:
# if mesh.faceUV:
for face in mesh.active_uv_texture.data:
# for face in mesh.faces:
- if face.halo and 'HALO' not in mode:
+ if face.use_halo and 'HALO' not in mode:
mode += ['HALO']
- if face.billboard and 'BILLBOARD' not in mode:
+ if face.use_billboard and 'BILLBOARD' not in mode:
mode += ['BILLBOARD']
- if face.object_color and 'OBJECT_COLOR' not in mode:
+ if face.use_object_color and 'OBJECT_COLOR' not in mode:
mode += ['OBJECT_COLOR']
- if face.collision and 'COLLISION' not in mode:
+ if face.use_collision and 'COLLISION' not in mode:
mode += ['COLLISION']
# mode |= face.mode
@@ -461,7 +461,7 @@ class x3d_class:
self.writeIndented("<Shape>\n",1)
maters=mesh.materials
hasImageTexture=0
- issmooth=0
+ is_smooth = False
if len(maters) > 0 or mesh.active_uv_texture:
# if len(maters) > 0 or mesh.faceUV:
@@ -470,7 +470,7 @@ class x3d_class:
if len(maters) >= 1:
mat=maters[0]
# matFlags = mat.getMode()
- if not mat.face_texture:
+ if not mat.use_face_texture:
# if not matFlags & Blender.Material.Modes['TEXFACE']:
self.writeMaterial(mat, self.cleanStr(mat.name,''), world)
# self.writeMaterial(mat, self.cleanStr(maters[0].name,''), world)
@@ -516,11 +516,11 @@ class x3d_class:
self.file.write("solid=\"true\" ")
for face in mesh.faces:
- if face.smooth:
- issmooth=1
- break
- if issmooth==1:
- creaseAngle=(mesh.autosmooth_angle)*(math.pi/180.0)
+ if face.use_smooth:
+ is_smooth = True
+ break
+ if is_smooth == True:
+ creaseAngle=(mesh.auto_smooth_angle)*(math.pi/180.0)
# creaseAngle=(mesh.degr)*(math.pi/180.0)
self.file.write("creaseAngle=\"%s\" " % (round(creaseAngle,self.cp)))
@@ -581,7 +581,7 @@ class x3d_class:
if self.writingcoords == 0:
self.file.write('coordIndex="')
for face in mesh.faces:
- fv = face.verts
+ fv = face.vertices
# fv = face.v
if len(fv)==3:
@@ -604,7 +604,7 @@ class x3d_class:
# mesh.transform(ob.matrix_world)
self.writeIndented("<Coordinate DEF=\"%s%s\" \n" % ("coord_",meshName), 1)
self.file.write("\t\t\t\tpoint=\"")
- for v in mesh.verts:
+ for v in mesh.vertices:
self.file.write("%.6f %.6f %.6f, " % tuple(v.co))
self.file.write("\" />")
self.writeIndented("\n", -1)
@@ -618,7 +618,7 @@ class x3d_class:
# for face in mesh.faces:
# workaround, since tface.uv iteration is wrong atm
uvs = face.uv
- # uvs = [face.uv1, face.uv2, face.uv3, face.uv4] if face.verts[3] else [face.uv1, face.uv2, face.uv3]
+ # uvs = [face.uv1, face.uv2, face.uv3, face.uv4] if face.vertices[3] else [face.uv1, face.uv2, face.uv3]
for uv in uvs:
# for uv in face.uv:
@@ -699,7 +699,7 @@ class x3d_class:
# specB = (mat.specCol[2]+0.001)/(1.25/(mat.spec+0.001))
transp = 1-mat.alpha
# matFlags = mat.getMode()
- if mat.shadeless:
+ if mat.use_shadeless:
# if matFlags & Blender.Material.Modes['SHADELESS']:
ambient = 1
shine = 1
@@ -731,7 +731,7 @@ class x3d_class:
def writeBackground(self, world, alltextures):
if world: worldname = world.name
else: return
- blending = (world.blend_sky, world.paper_sky, world.real_sky)
+ blending = (world.blend_sky, world.paper_sky, world.use_sky_real)
# blending = world.getSkytype()
grd = world.horizon_color
# grd = world.getHor()
@@ -794,7 +794,7 @@ class x3d_class:
pic = tex.image
# using .expandpath just in case, os.path may not expect //
- basename = os.path.basename(bpy.utils.expandpath(pic.filepath))
+ basename = os.path.basename(bpy.path.abspath(pic.filepath))
pic = alltextures[i].image
# pic = alltextures[i].getImage()
@@ -912,7 +912,7 @@ class x3d_class:
# if EXPORT_APPLY_MODIFIERS:
# if containerMesh:
- # containerMesh.verts = None
+ # containerMesh.vertices = None
self.cleanup()
@@ -964,13 +964,8 @@ class x3d_class:
if mesh.active_uv_texture:
# if mesh.faceUV:
for face in mesh.active_uv_texture.data:
- # for face in mesh.faces:
- sidename='';
- if face.twoside:
- # if face.mode & Mesh.FaceModes.TWOSIDE:
- sidename='two'
- else:
- sidename='one'
+ # for face in mesh.faces
+ sidename = "two" if face.use_twoside else "one"
if sidename in sided:
sided[sidename]+=1
@@ -1003,8 +998,8 @@ class x3d_class:
if face.mode & Mesh.FaceModes.TWOSIDE:
print("Debug: face.mode twosided")
- print("Debug: face.transp=0x%x (enum)" % face.transp)
- if face.transp == Mesh.FaceTranspModes.SOLID:
+ print("Debug: face.transp=0x%x (enum)" % face.blend_type)
+ if face.blend_type == Mesh.FaceTranspModes.SOLID:
print("Debug: face.transp.SOLID")
if face.image:
@@ -1030,7 +1025,7 @@ class x3d_class:
# print("Debug: mesh.faceUV=%d" % mesh.faceUV)
print("Debug: mesh.hasVertexColours=%d" % (len(mesh.vertex_colors) > 0))
# print("Debug: mesh.hasVertexColours=%d" % mesh.hasVertexColours())
- print("Debug: mesh.verts=%d" % len(mesh.verts))
+ print("Debug: mesh.vertices=%d" % len(mesh.vertices))
print("Debug: mesh.faces=%d" % len(mesh.faces))
print("Debug: mesh.materials=%d" % len(mesh.materials))
@@ -1140,7 +1135,7 @@ class x3d_class:
# Callbacks, needed before Main
##########################################################
-def x3d_export(filename,
+def write(filename,
context,
EXPORT_APPLY_MODIFIERS=False,
EXPORT_TRI=False,
@@ -1156,8 +1151,9 @@ def x3d_export(filename,
scene = context.scene
world = scene.world
-
- bpy.ops.object.mode_set(mode='OBJECT')
+
+ if scene.objects.active:
+ bpy.ops.object.mode_set(mode='OBJECT')
# XXX these are global textures while .Get() returned only scene's?
alltextures = bpy.data.textures
@@ -1174,47 +1170,6 @@ def x3d_export(filename,
)
-def x3d_export_ui(filename):
- if not filename.endswith(extension):
- filename += extension
- #if _safeOverwrite and sys.exists(filename):
- # result = Draw.PupMenu("File Already Exists, Overwrite?%t|Yes%x1|No%x0")
- #if(result != 1):
- # return
-
- # Get user options
- EXPORT_APPLY_MODIFIERS = Draw.Create(1)
- EXPORT_TRI = Draw.Create(0)
- EXPORT_GZIP = Draw.Create( filename.lower().endswith('.x3dz') )
-
- # Get USER Options
- pup_block = [\
- ('Apply Modifiers', EXPORT_APPLY_MODIFIERS, 'Use transformed mesh data from each object.'),\
- ('Triangulate', EXPORT_TRI, 'Triangulate quads.'),\
- ('Compress', EXPORT_GZIP, 'GZip the resulting file, requires a full python install'),\
- ]
-
- if not Draw.PupBlock('Export...', pup_block):
- return
-
- Blender.Window.EditMode(0)
- Blender.Window.WaitCursor(1)
-
- x3d_export(filename,\
- EXPORT_APPLY_MODIFIERS = EXPORT_APPLY_MODIFIERS.val,\
- EXPORT_TRI = EXPORT_TRI.val,\
- EXPORT_GZIP = EXPORT_GZIP.val\
- )
-
- Blender.Window.WaitCursor(0)
-
-
-
-#########################################################
-# main routine
-#########################################################
-
-
from bpy.props import *
class ExportX3D(bpy.types.Operator):
@@ -1232,26 +1187,35 @@ class ExportX3D(bpy.types.Operator):
compress = BoolProperty(name="Compress", description="GZip the resulting file, requires a full python install", default=False)
def execute(self, context):
- x3d_export(self.properties.filepath, context, self.properties.apply_modifiers, self.properties.triangulate, self.properties.compress)
+ filepath = self.properties.filepath
+ filepath = bpy.path.ensure_ext(filepath, ".x3d")
+
+ write(filepath,
+ context,
+ self.properties.apply_modifiers,
+ self.properties.triangulate,
+ self.properties.compress,
+ )
+
return {'FINISHED'}
def invoke(self, context, event):
- wm = context.manager
- wm.add_fileselect(self)
+ import os
+ if not self.properties.is_property_set("filepath"):
+ self.properties.filepath = os.path.splitext(bpy.data.filepath)[0] + ".x3d"
+
+ context.manager.add_fileselect(self)
return {'RUNNING_MODAL'}
def menu_func(self, context):
- default_path = os.path.splitext(bpy.data.filepath)[0] + ".x3d"
- self.layout.operator(ExportX3D.bl_idname, text="X3D Extensible 3D (.x3d)").filepath = default_path
+ self.layout.operator(ExportX3D.bl_idname, text="X3D Extensible 3D (.x3d)")
def register():
- bpy.types.register(ExportX3D)
bpy.types.INFO_MT_file_export.append(menu_func)
def unregister():
- bpy.types.unregister(ExportX3D)
bpy.types.INFO_MT_file_export.remove(menu_func)
# NOTES
diff --git a/release/scripts/io/import_anim_bvh.py b/release/scripts/io/import_anim_bvh.py
index d497ac47065..04cae915a49 100644
--- a/release/scripts/io/import_anim_bvh.py
+++ b/release/scripts/io/import_anim_bvh.py
@@ -23,7 +23,7 @@ from math import radians
import bpy
import mathutils
-from mathutils import Vector, Euler, Matrix, RotationMatrix, TranslationMatrix
+from mathutils import Vector, Euler, Matrix
class bvh_node_class(object):
@@ -78,7 +78,7 @@ MATRIX_IDENTITY_4x4 = Matrix([1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0,
def eulerRotate(x, y, z, rot_order):
# Clamp all values between 0 and 360, values outside this raise an error.
- mats = [RotationMatrix(x, 3, 'X'), RotationMatrix(y, 3, 'Y'), RotationMatrix(z, 3, 'Z')]
+ mats = [Matrix.Rotation(x, 3, 'X'), Matrix.Rotation(y, 3, 'Y'), Matrix.Rotation(z, 3, 'Z')]
return (MATRIX_IDENTITY_3x3 * mats[rot_order[0]] * (mats[rot_order[1]] * (mats[rot_order[2]]))).to_euler()
# Should work but doesnt!
@@ -347,7 +347,7 @@ def bvh_node_dict2armature(context, bvh_nodes, ROT_MODE='XYZ', IMPORT_START_FRAM
scn = context.scene
#XXX scn.objects.selected = []
for ob in scn.objects:
- ob.selected = False
+ ob.select = False
scn.set_frame(IMPORT_START_FRAME)
@@ -356,7 +356,7 @@ def bvh_node_dict2armature(context, bvh_nodes, ROT_MODE='XYZ', IMPORT_START_FRAM
scn.objects.link(arm_ob)
- arm_ob.selected = True
+ arm_ob.select = True
scn.objects.active = arm_ob
print(scn.objects.active)
@@ -426,7 +426,7 @@ def bvh_node_dict2armature(context, bvh_nodes, ROT_MODE='XYZ', IMPORT_START_FRAM
bvh_node.parent and\
bvh_node.parent.temp.name not in ZERO_AREA_BONES and\
bvh_node.parent.rest_tail_local == bvh_node.rest_head_local:
- bvh_node.temp.connected = True
+ bvh_node.temp.use_connect = True
# Replace the editbone with the editbone name,
# to avoid memory errors accessing the editbone outside editmode
@@ -529,7 +529,7 @@ def bvh_node_dict2armature(context, bvh_nodes, ROT_MODE='XYZ', IMPORT_START_FRAM
prev_euler[i] = euler
if bvh_node.has_loc:
- pose_bone.location = (bone_rest_matrix_inv * TranslationMatrix(Vector((lx, ly, lz)) - bvh_node.rest_head_local)).translation_part()
+ pose_bone.location = (bone_rest_matrix_inv * Matrix.Translation(Vector((lx, ly, lz)) - bvh_node.rest_head_local)).translation_part()
if bvh_node.has_loc:
pose_bone.keyframe_insert("location")
@@ -612,12 +612,10 @@ def menu_func(self, context):
def register():
- bpy.types.register(BvhImporter)
bpy.types.INFO_MT_file_import.append(menu_func)
def unregister():
- bpy.types.unregister(BvhImporter)
bpy.types.INFO_MT_file_import.remove(menu_func)
if __name__ == "__main__":
diff --git a/release/scripts/io/import_scene_3ds.py b/release/scripts/io/import_scene_3ds.py
index 7b3004d4f52..6378d93df62 100644
--- a/release/scripts/io/import_scene_3ds.py
+++ b/release/scripts/io/import_scene_3ds.py
@@ -141,7 +141,7 @@ import os
import time
import struct
-from import_scene_obj import unpack_face_list, load_image
+from import_scene_obj import load_image
import bpy
import mathutils
@@ -312,10 +312,10 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH):
contextMaterial = None
contextMatrix_rot = None # Blender.mathutils.Matrix(); contextMatrix.identity()
#contextMatrix_tx = None # Blender.mathutils.Matrix(); contextMatrix.identity()
- contextMesh_vertls = None
+ contextMesh_vertls = None # flat array: (verts * 3)
contextMesh_facels = None
contextMeshMaterials = {} # matname:[face_idxs]
- contextMeshUV = None
+ contextMeshUV = None # flat array (verts * 2)
TEXTURE_DICT = {}
MATDICT = {}
@@ -333,113 +333,69 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH):
# print STRUCT_SIZE_4x3MAT, ' STRUCT_SIZE_4x3MAT'
def putContextMesh(myContextMesh_vertls, myContextMesh_facels, myContextMeshMaterials):
-
- materialFaces = set() # faces that have a material. Can optimize?
-
- # Now make copies with assigned materils.
-
- def makeMeshMaterialCopy(matName, faces):
- '''
- Make a new mesh with only face the faces that use this material.
- faces can be any iterable object - containing ints.
- '''
-
- faceVertUsers = [False] * len(myContextMesh_vertls)
- ok = 0
- for fIdx in faces:
- for vindex in myContextMesh_facels[fIdx]:
- faceVertUsers[vindex] = True
- if matName != None: # if matName is none then this is a set(), meaning we are using the untextured faces and do not need to store textured faces.
- materialFaces.add(fIdx)
- ok = 1
-
- if not ok:
- return
-
- myVertMapping = {}
- vertMappingIndex = 0
-
- vertsToUse = [i for i in range(len(myContextMesh_vertls)) if faceVertUsers[i]]
- myVertMapping = {ii: i for i, ii in enumerate(vertsToUse)}
-
- tempName= '%s_%s' % (contextObName, matName) # matName may be None.
- bmesh = bpy.data.meshes.new(tempName)
-
- if matName == None:
- img = None
+
+ bmesh = bpy.data.meshes.new(contextObName)
+ if myContextMesh_vertls:
+
+ bmesh.add_geometry(len(myContextMesh_vertls)//3, 0, len(myContextMesh_facels))
+ bmesh.vertices.foreach_set("co", myContextMesh_vertls)
+
+ eekadoodle_faces = []
+ for v1, v2, v3 in myContextMesh_facels:
+ eekadoodle_faces.extend([v3, v1, v2, 0] if v3 == 0 else [v1, v2, v3, 0])
+ bmesh.faces.foreach_set("vertices_raw", eekadoodle_faces)
+
+ if bmesh.faces and contextMeshUV:
+ bmesh.add_uv_texture()
+ uv_faces = bmesh.active_uv_texture.data[:]
else:
- bmat = MATDICT[matName][1]
- bmesh.add_material(bmat)
-# bmesh.materials = [bmat]
- try: img = TEXTURE_DICT[bmat.name]
- except: img = None
-
-# bmesh_verts = bmesh.verts
- if len(vertsToUse):
- bmesh.add_geometry(len(vertsToUse), 0, len(faces))
-
- # XXX why add extra vertex?
-# bmesh_verts.extend( [Vector()] )
- bmesh.verts.foreach_set("co", [x for tup in [myContextMesh_vertls[i] for i in vertsToUse] for x in tup])
-# bmesh_verts.extend( [myContextMesh_vertls[i] for i in vertsToUse] )
-
- # +1 because of DUMMYVERT
- bmesh.faces.foreach_set("verts_raw", unpack_face_list([[myVertMapping[vindex] for vindex in myContextMesh_facels[fIdx]] for fIdx in faces]))
-# face_mapping = bmesh.faces.extend( [ [ bmesh_verts[ myVertMapping[vindex]+1] for vindex in myContextMesh_facels[fIdx]] for fIdx in faces ], indexList=True )
-
- if bmesh.faces and (contextMeshUV or img):
- bmesh.add_uv_texture()
- for ii, i in enumerate(faces):
-
- # Mapped index- faces may have not been added- if so, then map to the correct index
- # BUGGY API - face_mapping is not always the right length
-# map_index = face_mapping[ii]
-
- if 1:
-# if map_index != None:
- targetFace = bmesh.faces[ii]
-# targetFace = bmesh.faces[map_index]
-
- uf = bmesh.active_uv_texture.data[ii]
-
- if contextMeshUV:
- # v.index-1 because of the DUMMYVERT
- uvs = [contextMeshUV[vindex] for vindex in myContextMesh_facels[i]]
-
- if len(myContextMesh_facels[i]) == 3:
- uf.uv1, uf.uv2, uf.uv3, uf.uv4 = uvs + [(0.0, 0.0)]
- else:
- uf.uv1, uf.uv2, uf.uv3, uf.uv4 = uvs
-# targetFace.uv = [contextMeshUV[vindex] for vindex in myContextMesh_facels[i]]
- if img:
- uf.image = img
-
- # to get this image to show up in 'Textured' shading mode
- uf.tex = True
-
- # bmesh.transform(contextMatrix)
- ob = bpy.data.objects.new(tempName, bmesh)
- SCN.objects.link(ob)
-# ob = SCN_OBJECTS.new(bmesh, tempName)
- '''
- if contextMatrix_tx:
- ob.setMatrix(contextMatrix_tx)
- '''
-
- if contextMatrix_rot:
- ob.matrix_world = contextMatrix_rot
-
- importedObjects.append(ob)
- bmesh.update()
-# bmesh.calcNormals()
-
- for matName, faces in myContextMeshMaterials.items():
- makeMeshMaterialCopy(matName, faces)
-
- if len(materialFaces) != len(myContextMesh_facels):
- # Invert material faces.
- makeMeshMaterialCopy(None, set(range(len( myContextMesh_facels ))) - materialFaces)
- #raise 'Some UnMaterialed faces', len(contextMesh.faces)
+ uv_faces = None
+
+ for mat_idx, (matName, faces) in enumerate(myContextMeshMaterials.items()):
+ if matName is None:
+ bmesh.add_material(None)
+ else:
+ bmat = MATDICT[matName][1]
+ bmesh.add_material(bmat) # can be None
+ img = TEXTURE_DICT.get(bmat.name)
+
+ if uv_faces and img:
+ for fidx in faces:
+ bmesh.faces[fidx].material_index = mat_idx
+ uf = uv_faces[fidx]
+ uf.image = img
+ uf.use_image = True
+ else:
+ for fidx in faces:
+ bmesh.faces[fidx].material_index = mat_idx
+
+ if uv_faces:
+ for fidx, uf in enumerate(uv_faces):
+ face = myContextMesh_facels[fidx]
+ v1, v2, v3 = face
+
+ # eekadoodle
+ if v3 == 0:
+ v1, v2, v3 = v3, v1, v2
+
+ uf.uv1 = contextMeshUV[v1 * 2:(v1 * 2) + 2]
+ uf.uv2 = contextMeshUV[v2 * 2:(v2 * 2) + 2]
+ uf.uv3 = contextMeshUV[v3 * 2:(v3 * 2) + 2]
+ # always a tri
+
+ ob = bpy.data.objects.new(tempName, bmesh)
+ SCN.objects.link(ob)
+
+ '''
+ if contextMatrix_tx:
+ ob.setMatrix(contextMatrix_tx)
+ '''
+
+ if contextMatrix_rot:
+ ob.matrix_world = contextMatrix_rot
+
+ importedObjects.append(ob)
+ bmesh.update()
#a spare chunk
new_chunk = chunk()
@@ -667,14 +623,10 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH):
new_chunk.bytes_read += 2
# print 'number of verts: ', num_verts
- def getvert():
- temp_data = struct.unpack('<3f', file.read(STRUCT_SIZE_3FLOAT))
- new_chunk.bytes_read += STRUCT_SIZE_3FLOAT #12: 3 floats x 4 bytes each
- return temp_data
-
- #contextMesh.verts.extend( [Vector(),] ) # DUMMYVERT! - remove when blenders internals are fixed.
- contextMesh_vertls = [getvert() for i in range(num_verts)]
-
+ contextMesh_vertls = struct.unpack('<%df' % (num_verts * 3), file.read(STRUCT_SIZE_3FLOAT * num_verts))
+ new_chunk.bytes_read += STRUCT_SIZE_3FLOAT * num_verts
+ # dummyvert is not used atm!
+
#print 'object verts: bytes read: ', new_chunk.bytes_read
elif (new_chunk.ID == OBJECT_FACES):
@@ -684,15 +636,11 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH):
new_chunk.bytes_read += 2
#print 'number of faces: ', num_faces
- def getface():
- # print '\ngetting a face'
- temp_data = file.read(STRUCT_SIZE_4UNSIGNED_SHORT)
- new_chunk.bytes_read += STRUCT_SIZE_4UNSIGNED_SHORT #4 short ints x 2 bytes each
- v1,v2,v3,dummy = struct.unpack('<4H', temp_data)
- return v1, v2, v3
-
- contextMesh_facels = [ getface() for i in range(num_faces) ]
-
+ # print '\ngetting a face'
+ temp_data = file.read(STRUCT_SIZE_4UNSIGNED_SHORT * num_faces)
+ new_chunk.bytes_read += STRUCT_SIZE_4UNSIGNED_SHORT * num_faces #4 short ints x 2 bytes each
+ contextMesh_facels = struct.unpack('<%dH' % (num_faces * 4), temp_data)
+ contextMesh_facels = [contextMesh_facels[i - 3:i] for i in range(3, (num_faces * 4) + 3, 4)]
elif (new_chunk.ID == OBJECT_MATERIAL):
# print 'elif (new_chunk.ID == OBJECT_MATERIAL):'
@@ -703,12 +651,11 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH):
num_faces_using_mat = struct.unpack('<H', temp_data)[0]
new_chunk.bytes_read += STRUCT_SIZE_UNSIGNED_SHORT
- def getmat():
- temp_data = file.read(STRUCT_SIZE_UNSIGNED_SHORT)
- new_chunk.bytes_read += STRUCT_SIZE_UNSIGNED_SHORT
- return struct.unpack('<H', temp_data)[0]
+
+ temp_data = file.read(STRUCT_SIZE_UNSIGNED_SHORT * num_faces_using_mat)
+ new_chunk.bytes_read += STRUCT_SIZE_UNSIGNED_SHORT * num_faces_using_mat
- contextMeshMaterials[material_name]= [ getmat() for i in range(num_faces_using_mat) ]
+ contextMeshMaterials[material_name]= struct.unpack("<%dH" % (num_faces_using_mat), temp_data)
#look up the material in all the materials
@@ -717,12 +664,9 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH):
num_uv = struct.unpack('<H', temp_data)[0]
new_chunk.bytes_read += 2
- def getuv():
- temp_data = file.read(STRUCT_SIZE_2FLOAT)
- new_chunk.bytes_read += STRUCT_SIZE_2FLOAT #2 float x 4 bytes each
- return mathutils.Vector( struct.unpack('<2f', temp_data) )
-
- contextMeshUV = [ getuv() for i in range(num_uv) ]
+ temp_data = file.read(STRUCT_SIZE_2FLOAT * num_uv)
+ new_chunk.bytes_read += STRUCT_SIZE_2FLOAT * num_uv
+ contextMeshUV = struct.unpack('<%df' % (num_uv * 2), temp_data)
elif (new_chunk.ID == OBJECT_TRANS_MATRIX):
# How do we know the matrix size? 54 == 4x4 48 == 4x3
@@ -771,7 +715,7 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH):
#print contextMatrix_rot
contextMatrix_rot.invert()
#print contextMatrix_rot
- #contextMatrix_tx = Blender.mathutils.TranslationMatrix(0.5 * Blender.mathutils.Vector(data[9:]))
+ #contextMatrix_tx = mathutils.Matrix.Translation(0.5 * Blender.mathutils.Vector(data[9:]))
#contextMatrix_tx.invert()
#tx.invert()
@@ -806,7 +750,7 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH):
# FINISHED LOOP
# There will be a number of objects still not added
- if contextMesh_facels != None:
+ if CreateBlenderObject:
putContextMesh(contextMesh_vertls, contextMesh_facels, contextMeshMaterials)
def load_3ds(filename, context, IMPORT_CONSTRAIN_BOUNDS=10.0, IMAGE_SEARCH=True, APPLY_MATRIX=False):
@@ -883,14 +827,12 @@ def load_3ds(filename, context, IMPORT_CONSTRAIN_BOUNDS=10.0, IMAGE_SEARCH=True,
# REMOVE DUMMYVERT, - remove this in the next release when blenders internal are fixed.
-
-# for ob in importedObjects:
-# if ob.type == 'MESH':
-# # if ob.type=='Mesh':
-# me = ob.getData(mesh=1)
-# me.verts.delete([me.verts[0],])
-# if not APPLY_MATRIX:
-# me.transform(ob.matrix_world.copy().invert())
+ for ob in importedObjects:
+ if ob.type == 'MESH':
+ me = ob.data
+# me.vertices.delete([me.vertices[0],]) # XXX, todo
+ if not APPLY_MATRIX:
+ me.transform(ob.matrix_world.copy().invert())
# Done DUMMYVERT
"""
@@ -1009,15 +951,19 @@ class IMPORT_OT_autodesk_3ds(bpy.types.Operator):
# List of operator properties, the attributes will be assigned
# to the class instance from the operator settings before calling.
-
filepath = StringProperty(name="File Path", description="Filepath used for importing the 3DS file", maxlen= 1024, default= "")
-# size_constraint = FloatProperty(name="Size Constraint", description="Scale the model by 10 until it reacehs the size constraint. Zero Disables.", min=0.0, max=1000.0, soft_min=0.0, soft_max=1000.0, default=10.0),
-# search_images = BoolProperty(name="Image Search", description="Search subdirectories for any assosiated images (Warning, may be slow)", default=True),
-# apply_matrix = BoolProperty(name="Transform Fix", description="Workaround for object transformations importing incorrectly", default=False),
+ constrain_size = FloatProperty(name="Size Constraint", description="Scale the model by 10 until it reacehs the size constraint. Zero Disables.", min=0.0, max=1000.0, soft_min=0.0, soft_max=1000.0, default=10.0)
+ search_images = BoolProperty(name="Image Search", description="Search subdirectories for any assosiated images (Warning, may be slow)", default=True)
+ apply_transform = BoolProperty(name="Apply Transform", description="Workaround for object transformations importing incorrectly", default=False)
def execute(self, context):
- load_3ds(self.properties.filepath, context, 0.0, False, False)
+ load_3ds(self.properties.filepath,
+ context,
+ IMPORT_CONSTRAIN_BOUNDS=self.properties.constrain_size,
+ IMAGE_SEARCH=self.properties.search_images,
+ APPLY_MATRIX=self.properties.apply_transform)
+
return {'FINISHED'}
def invoke(self, context, event):
@@ -1030,11 +976,9 @@ def menu_func(self, context):
self.layout.operator(IMPORT_OT_autodesk_3ds.bl_idname, text="3D Studio (.3ds)")
def register():
- bpy.types.register(IMPORT_OT_autodesk_3ds)
bpy.types.INFO_MT_file_import.append(menu_func)
def unregister():
- bpy.types.unregister(IMPORT_OT_autodesk_3ds)
bpy.types.INFO_MT_file_import.remove(menu_func)
# NOTES:
diff --git a/release/scripts/io/import_scene_obj.py b/release/scripts/io/import_scene_obj.py
index afe82410557..655f797750e 100644
--- a/release/scripts/io/import_scene_obj.py
+++ b/release/scripts/io/import_scene_obj.py
@@ -82,23 +82,21 @@ def unpack_list(list_of_tuples):
# same as above except that it adds 0 for triangle faces
def unpack_face_list(list_of_tuples):
- l = []
- for t in list_of_tuples:
- face = [i for i in t]
-
- if len(face) != 3 and len(face) != 4:
- raise RuntimeError("{0} vertices in face.".format(len(face)))
-
- # rotate indices if the 4th is 0
- if len(face) == 4 and face[3] == 0:
- face = [face[3], face[0], face[1], face[2]]
+ # allocate the entire list
+ flat_ls = [0] * (len(list_of_tuples) * 4)
+ i = 0
- if len(face) == 3:
- face.append(0)
-
- l.extend(face)
+ for t in list_of_tuples:
+ if len(t) == 3:
+ if t[2] == 0:
+ t = t[1], t[2], t[0]
+ else: # assuem quad
+ if t[3] == 0 or t[2] == 0:
+ t = t[2], t[3], t[0], t[1]
- return l
+ flat_ls[i:i + len(t)] = t
+ i += 4
+ return flat_ls
def BPyMesh_ngon(from_data, indices, PREF_FIX_LOOPS= True):
'''
@@ -139,7 +137,7 @@ def BPyMesh_ngon(from_data, indices, PREF_FIX_LOOPS= True):
if type(from_data) in (tuple, list):
verts= [Vector(from_data[i]) for ii, i in enumerate(indices)]
else:
- verts= [from_data.verts[i].co for ii, i in enumerate(indices)]
+ verts= [from_data.vertices[i].co for ii, i in enumerate(indices)]
for i in range(len(verts)-1, 0, -1): # same as reversed(xrange(1, len(verts))):
if verts[i][1]==verts[i-1][0]:
@@ -156,7 +154,7 @@ def BPyMesh_ngon(from_data, indices, PREF_FIX_LOOPS= True):
if type(from_data) in (tuple, list):
verts= [vert_treplet(Vector(from_data[i]), ii) for ii, i in enumerate(indices)]
else:
- verts= [vert_treplet(from_data.verts[i].co, ii) for ii, i in enumerate(indices)]
+ verts= [vert_treplet(from_data.vertices[i].co, ii) for ii, i in enumerate(indices)]
edges= [(i, i-1) for i in range(len(verts))]
if edges:
@@ -305,24 +303,28 @@ def load_image(imagepath, dirname):
if os.path.exists(imagepath):
return bpy.data.images.load(imagepath)
- variants = [os.path.join(dirname, imagepath), os.path.join(dirname, os.path.basename(imagepath))]
+ variants = [imagepath, os.path.join(dirname, imagepath), os.path.join(dirname, os.path.basename(imagepath))]
- for path in variants:
- if os.path.exists(path):
- return bpy.data.images.load(path)
- else:
- print(path, "doesn't exist")
+ for filepath in variants:
+ for nfilepath in (filepath, bpy.path.resolve_ncase(filepath)):
+ if os.path.exists(nfilepath):
+ return bpy.data.images.load(nfilepath)
# TODO comprehensiveImageLoad also searched in bpy.config.textureDir
return None
def obj_image_load(imagepath, DIR, IMAGE_SEARCH):
-
if '_' in imagepath:
image= load_image(imagepath.replace('_', ' '), DIR)
- if image: return image
+ if image:
+ return image
- return load_image(imagepath, DIR)
+ image = load_image(imagepath, DIR)
+ if image:
+ return image
+
+ print("failed to load '%s' doesn't exist", imagepath)
+ return None
# def obj_image_load(imagepath, DIR, IMAGE_SEARCH):
# '''
@@ -373,38 +375,32 @@ def create_materials(filepath, material_libs, unique_materials, unique_material_
# Image has alpha
# XXX bitmask won't work?
- blender_material.add_texture(texture, "UV", ("COLOR", "ALPHA"))
+ blender_material.add_texture(texture, 'UV', {'COLOR', 'ALPHA'})
texture.mipmap = True
texture.interpolation = True
texture.use_alpha = True
- blender_material.z_transparency = True
+ blender_material.use_transparency = True
blender_material.alpha = 0.0
-
-# blender_material.setTexture(0, texture, Texture.TexCo.UV, Texture.MapTo.COL | Texture.MapTo.ALPHA)
-# texture.setImageFlags('MipMap', 'InterPol', 'UseAlpha')
-# blender_material.mode |= Material.Modes.ZTRANSP
-# blender_material.alpha = 0.0
else:
- blender_material.add_texture(texture, "UV", "COLOR")
-# blender_material.setTexture(0, texture, Texture.TexCo.UV, Texture.MapTo.COL)
+ blender_material.add_texture(texture, 'UV', 'COLOR')
# adds textures to faces (Textured/Alt-Z mode)
# Only apply the diffuse texture to the face if the image has not been set with the inline usemat func.
unique_material_images[context_material_name]= image, has_data # set the texface image
elif type == 'Ka':
- blender_material.add_texture(texture, "UV", "AMBIENT")
+ blender_material.add_texture(texture, 'UV', 'AMBIENT')
# blender_material.setTexture(1, texture, Texture.TexCo.UV, Texture.MapTo.CMIR) # TODO- Add AMB to BPY API
elif type == 'Ks':
- blender_material.add_texture(texture, "UV", "SPECULARITY")
+ blender_material.add_texture(texture, 'UV', 'SPECULARITY')
# blender_material.setTexture(2, texture, Texture.TexCo.UV, Texture.MapTo.SPEC)
elif type == 'Bump':
- blender_material.add_texture(texture, "UV", "NORMAL")
+ blender_material.add_texture(texture, 'UV', 'NORMAL')
# blender_material.setTexture(3, texture, Texture.TexCo.UV, Texture.MapTo.NOR)
elif type == 'D':
- blender_material.add_texture(texture, "UV", "ALPHA")
+ blender_material.add_texture(texture, 'UV', 'ALPHA')
blender_material.z_transparency = True
blender_material.alpha = 0.0
# blender_material.setTexture(4, texture, Texture.TexCo.UV, Texture.MapTo.ALPHA)
@@ -413,15 +409,14 @@ def create_materials(filepath, material_libs, unique_materials, unique_material_
# Todo, unset deffuse material alpha if it has an alpha channel
elif type == 'refl':
- blender_material.add_texture(texture, "UV", "REFLECTION")
+ blender_material.add_texture(texture, 'UV', 'REFLECTION')
# blender_material.setTexture(5, texture, Texture.TexCo.UV, Texture.MapTo.REF)
# Add an MTL with the same name as the obj if no MTLs are spesified.
temp_mtl = os.path.splitext((os.path.basename(filepath)))[0] + '.mtl'
- if os.path.exists(DIR + temp_mtl) and temp_mtl not in material_libs:
-# if sys.exists(DIR + temp_mtl) and temp_mtl not in material_libs:
+ if os.path.exists(os.path.join(DIR, temp_mtl)) and temp_mtl not in material_libs:
material_libs.append( temp_mtl )
del temp_mtl
@@ -435,11 +430,9 @@ def create_materials(filepath, material_libs, unique_materials, unique_material_
unique_material_images[None]= None, False
for libname in material_libs:
- mtlpath= DIR + libname
+ mtlpath= os.path.join(DIR, libname)
if not os.path.exists(mtlpath):
-# if not sys.exists(mtlpath):
- #print '\tError Missing MTL: "%s"' % mtlpath
- pass
+ print ("\tError Missing MTL: '%s'" % mtlpath)
else:
#print '\t\tloading mtl: "%s"' % mtlpath
context_material= None
@@ -504,49 +497,32 @@ def create_materials(filepath, material_libs, unique_materials, unique_material_
-def split_mesh(verts_loc, faces, unique_materials, filepath, SPLIT_OB_OR_GROUP, SPLIT_MATERIALS):
+def split_mesh(verts_loc, faces, unique_materials, filepath, SPLIT_OB_OR_GROUP):
'''
- Takes vert_loc and faces, and seperates into multiple sets of
+ Takes vert_loc and faces, and separates into multiple sets of
(verts_loc, faces, unique_materials, dataname)
'''
filename = os.path.splitext((os.path.basename(filepath)))[0]
- if not SPLIT_OB_OR_GROUP and not SPLIT_MATERIALS:
+ if not SPLIT_OB_OR_GROUP:
# use the filename for the object name since we arnt chopping up the mesh.
return [(verts_loc, faces, unique_materials, filename)]
-
def key_to_name(key):
# if the key is a tuple, join it to make a string
- if type(key) == tuple:
- return '%s_%s' % key
- elif not key:
+ if not key:
return filename # assume its a string. make sure this is true if the splitting code is changed
else:
return key
# Return a key that makes the faces unique.
- if SPLIT_OB_OR_GROUP and not SPLIT_MATERIALS:
- def face_key(face):
- return face[4] # object
-
- elif not SPLIT_OB_OR_GROUP and SPLIT_MATERIALS:
- def face_key(face):
- return face[2] # material
-
- else: # Both
- def face_key(face):
- return face[4], face[2] # object,material
-
-
face_split_dict= {}
oldkey= -1 # initialize to a value that will never match the key
for face in faces:
-
- key= face_key(face)
+ key= face[4]
if oldkey != key:
# Check the key has changed.
@@ -571,7 +547,6 @@ def split_mesh(verts_loc, faces, unique_materials, filepath, SPLIT_OB_OR_GROUP,
vert_remap[i]= new_index # set the new remapped index so we only add once and can reference next time.
face_vert_loc_indicies[enum] = new_index # remap to the local index
verts_split.append( verts_loc[i] ) # add the vert to the local verts
-
else:
face_vert_loc_indicies[enum] = vert_remap[i] # remap to the local index
@@ -581,12 +556,11 @@ def split_mesh(verts_loc, faces, unique_materials, filepath, SPLIT_OB_OR_GROUP,
faces_split.append(face)
-
# remove one of the itemas and reorder
return [(value[0], value[1], value[2], key_to_name(key)) for key, value in list(face_split_dict.items())]
-def create_mesh(scn, new_objects, has_ngons, CREATE_FGONS, CREATE_EDGES, verts_loc, verts_tex, faces, unique_materials, unique_material_images, unique_smooth_groups, vertex_groups, dataname):
+def create_mesh(new_objects, has_ngons, CREATE_FGONS, CREATE_EDGES, verts_loc, verts_tex, faces, unique_materials, unique_material_images, unique_smooth_groups, vertex_groups, dataname):
'''
Takes all the data gathered and generates a mesh, adding the new object to new_objects
deals with fgons, sharp edges and assigning materials
@@ -703,18 +677,18 @@ def create_mesh(scn, new_objects, has_ngons, CREATE_FGONS, CREATE_EDGES, verts_l
# make sure the list isnt too big
for material in materials:
me.add_material(material)
- #me.verts.extend([(0,0,0)]) # dummy vert
+ #me.vertices.extend([(0,0,0)]) # dummy vert
me.add_geometry(len(verts_loc), 0, len(faces))
# verts_loc is a list of (x, y, z) tuples
- me.verts.foreach_set("co", unpack_list(verts_loc))
-# me.verts.extend(verts_loc)
+ me.vertices.foreach_set("co", unpack_list(verts_loc))
+# me.vertices.extend(verts_loc)
# faces is a list of (vert_indices, texco_indices, ...) tuples
# XXX faces should contain either 3 or 4 verts
# XXX no check for valid face indices
- me.faces.foreach_set("verts_raw", unpack_face_list([f[0] for f in faces]))
+ me.faces.foreach_set("vertices_raw", unpack_face_list([f[0] for f in faces]))
# face_mapping= me.faces.extend([f[0] for f in faces], indexList=True)
if verts_tex and me.faces:
@@ -752,7 +726,7 @@ def create_mesh(scn, new_objects, has_ngons, CREATE_FGONS, CREATE_EDGES, verts_l
if context_smooth_group:
- blender_face.smooth= True
+ blender_face.use_smooth = True
if context_material:
if context_material_old is not context_material:
@@ -768,14 +742,12 @@ def create_mesh(scn, new_objects, has_ngons, CREATE_FGONS, CREATE_EDGES, verts_l
blender_tface= me.uv_textures[0].data[i]
if context_material:
- image, has_data= unique_material_images[context_material]
+ image, has_data = unique_material_images[context_material]
if image: # Can be none if the material dosnt have an image.
- blender_tface.image= image
-# blender_face.image= image
- if has_data:
-# if has_data and image.depth == 32:
- blender_tface.transp = 'ALPHA'
-# blender_face.transp |= ALPHA
+ blender_tface.image = image
+ blender_tface.use_image = True
+ if has_data and image.depth == 32:
+ blender_tface.blend_type = 'ALPHA'
# BUG - Evil eekadoodle problem where faces that have vert index 0 location at 3 or 4 are shuffled.
if len(face_vert_loc_indicies)==4:
@@ -804,7 +776,7 @@ def create_mesh(scn, new_objects, has_ngons, CREATE_FGONS, CREATE_EDGES, verts_l
me.add_geometry(0, len(edges), 0)
# edges should be a list of (a, b) tuples
- me.edges.foreach_set("verts", unpack_list(edges))
+ me.edges.foreach_set("vertices", unpack_list(edges))
# me_edges.extend( edges )
# del me_edges
@@ -819,8 +791,8 @@ def create_mesh(scn, new_objects, has_ngons, CREATE_FGONS, CREATE_EDGES, verts_l
# if CREATE_FGONS and fgon_edges:
# for fgon_edge in fgon_edges.keys():
# for ed in me.edges:
-# if edges_match(fgon_edge, ed.verts):
-# ed.fgon = True
+# if edges_match(fgon_edge, ed.vertices):
+# ed.is_fgon = True
# if CREATE_FGONS and fgon_edges:
# FGON= Mesh.EdgeFlags.FGON
@@ -833,8 +805,8 @@ def create_mesh(scn, new_objects, has_ngons, CREATE_FGONS, CREATE_EDGES, verts_l
# if unique_smooth_groups and sharp_edges:
# for sharp_edge in sharp_edges.keys():
# for ed in me.edges:
-# if edges_match(sharp_edge, ed.verts):
-# ed.sharp = True
+# if edges_match(sharp_edge, ed.vertices):
+# ed.use_edge_sharp = True
# if unique_smooth_groups and sharp_edges:
# SHARP= Mesh.EdgeFlags.SHARP
@@ -847,7 +819,6 @@ def create_mesh(scn, new_objects, has_ngons, CREATE_FGONS, CREATE_EDGES, verts_l
# me.calcNormals()
ob= bpy.data.objects.new("Mesh", me)
- scn.objects.link(ob)
new_objects.append(ob)
# Create the vertex groups. No need to have the flag passed here since we test for the
@@ -861,7 +832,7 @@ def create_mesh(scn, new_objects, has_ngons, CREATE_FGONS, CREATE_EDGES, verts_l
# me.assignVertsToGroup(group_name, group_indicies, 1.00, Mesh.AssignModes.REPLACE)
-def create_nurbs(scn, context_nurbs, vert_loc, new_objects):
+def create_nurbs(context_nurbs, vert_loc, new_objects):
'''
Add nurbs object to blender, only support one type at the moment
'''
@@ -936,8 +907,9 @@ def create_nurbs(scn, context_nurbs, vert_loc, new_objects):
if do_closed:
nu.flagU |= 1
'''
+
+ ob= bpy.data.objects.new("Mesh", me)
- ob = scn.objects.new(cu)
new_objects.append(ob)
@@ -1262,7 +1234,6 @@ def load_obj(filepath,
# bpy.ops.OBJECT_OT_select_all()
scene = context.scene
-# scn = bpy.data.scenes.active
# scn.objects.selected = []
new_objects= [] # put new objects here
@@ -1271,14 +1242,20 @@ def load_obj(filepath,
if SPLIT_OBJECTS or SPLIT_GROUPS: SPLIT_OB_OR_GROUP = True
else: SPLIT_OB_OR_GROUP = False
- for verts_loc_split, faces_split, unique_materials_split, dataname in split_mesh(verts_loc, faces, unique_materials, filepath, SPLIT_OB_OR_GROUP, SPLIT_MATERIALS):
+ for verts_loc_split, faces_split, unique_materials_split, dataname in split_mesh(verts_loc, faces, unique_materials, filepath, SPLIT_OB_OR_GROUP):
# Create meshes from the data, warning 'vertex_groups' wont support splitting
- create_mesh(scene, new_objects, has_ngons, CREATE_FGONS, CREATE_EDGES, verts_loc_split, verts_tex, faces_split, unique_materials_split, unique_material_images, unique_smooth_groups, vertex_groups, dataname)
+ create_mesh(new_objects, has_ngons, CREATE_FGONS, CREATE_EDGES, verts_loc_split, verts_tex, faces_split, unique_materials_split, unique_material_images, unique_smooth_groups, vertex_groups, dataname)
# nurbs support
# for context_nurbs in nurbs:
# create_nurbs(scn, context_nurbs, verts_loc, new_objects)
+ # Create new obj
+ for obj in new_objects:
+ scene.objects.link(obj)
+
+ scene.update()
+
axis_min= [ 1000000000]*3
axis_max= [-1000000000]*3
@@ -1320,14 +1297,13 @@ def load_obj_ui(filepath, BATCH_LOAD= False):
if BPyMessages.Error_NoFile(filepath):
return
- global CREATE_SMOOTH_GROUPS, CREATE_FGONS, CREATE_EDGES, SPLIT_OBJECTS, SPLIT_GROUPS, SPLIT_MATERIALS, CLAMP_SIZE, IMAGE_SEARCH, POLYGROUPS, KEEP_VERT_ORDER, ROTATE_X90
+ global CREATE_SMOOTH_GROUPS, CREATE_FGONS, CREATE_EDGES, SPLIT_OBJECTS, SPLIT_GROUPS, CLAMP_SIZE, IMAGE_SEARCH, POLYGROUPS, KEEP_VERT_ORDER, ROTATE_X90
CREATE_SMOOTH_GROUPS= Draw.Create(0)
CREATE_FGONS= Draw.Create(1)
CREATE_EDGES= Draw.Create(1)
SPLIT_OBJECTS= Draw.Create(0)
SPLIT_GROUPS= Draw.Create(0)
- SPLIT_MATERIALS= Draw.Create(0)
CLAMP_SIZE= Draw.Create(10.0)
IMAGE_SEARCH= Draw.Create(1)
POLYGROUPS= Draw.Create(0)
@@ -1346,7 +1322,6 @@ def load_obj_ui(filepath, BATCH_LOAD= False):
'Separate objects from obj...',\
('Object', SPLIT_OBJECTS, 'Import OBJ Objects into Blender Objects'),\
('Group', SPLIT_GROUPS, 'Import OBJ Groups into Blender Objects'),\
- ('Split Materials', SPLIT_MATERIALS, 'Import each material into a seperate mesh'),\
'Options...',\
('Keep Vert Order', KEEP_VERT_ORDER, 'Keep vert and face order, disables some other options.'),\
('Clamp Scale:', CLAMP_SIZE, 0.0, 1000.0, 'Clamp the size to this maximum (Zero to Disable)'),\
@@ -1359,7 +1334,6 @@ def load_obj_ui(filepath, BATCH_LOAD= False):
if KEEP_VERT_ORDER.val:
SPLIT_OBJECTS.val = False
SPLIT_GROUPS.val = False
- SPLIT_MATERIALS.val = False
'''
@@ -1381,25 +1355,25 @@ def load_obj_ui(filepath, BATCH_LOAD= False):
GLOBALS['EVENT'] = e
def do_split(e,v):
- global SPLIT_OBJECTS, SPLIT_GROUPS, SPLIT_MATERIALS, KEEP_VERT_ORDER, POLYGROUPS
- if SPLIT_OBJECTS.val or SPLIT_GROUPS.val or SPLIT_MATERIALS.val:
+ global SPLIT_OBJECTS, SPLIT_GROUPS, KEEP_VERT_ORDER, POLYGROUPS
+ if SPLIT_OBJECTS.val or SPLIT_GROUPS.val:
KEEP_VERT_ORDER.val = 0
POLYGROUPS.val = 0
else:
KEEP_VERT_ORDER.val = 1
def do_vertorder(e,v):
- global SPLIT_OBJECTS, SPLIT_GROUPS, SPLIT_MATERIALS, KEEP_VERT_ORDER
+ global SPLIT_OBJECTS, SPLIT_GROUPS, KEEP_VERT_ORDER
if KEEP_VERT_ORDER.val:
- SPLIT_OBJECTS.val = SPLIT_GROUPS.val = SPLIT_MATERIALS.val = 0
+ SPLIT_OBJECTS.val = SPLIT_GROUPS.val = 0
else:
- if not (SPLIT_OBJECTS.val or SPLIT_GROUPS.val or SPLIT_MATERIALS.val):
+ if not (SPLIT_OBJECTS.val or SPLIT_GROUPS.val):
KEEP_VERT_ORDER.val = 1
def do_polygroups(e,v):
- global SPLIT_OBJECTS, SPLIT_GROUPS, SPLIT_MATERIALS, KEEP_VERT_ORDER, POLYGROUPS
+ global SPLIT_OBJECTS, SPLIT_GROUPS, KEEP_VERT_ORDER, POLYGROUPS
if POLYGROUPS.val:
- SPLIT_OBJECTS.val = SPLIT_GROUPS.val = SPLIT_MATERIALS.val = 0
+ SPLIT_OBJECTS.val = SPLIT_GROUPS.val = 0
def do_help(e,v):
url = __url__[0]
@@ -1419,7 +1393,7 @@ def load_obj_ui(filepath, BATCH_LOAD= False):
ui_x -= 165
ui_y -= 90
- global CREATE_SMOOTH_GROUPS, CREATE_FGONS, CREATE_EDGES, SPLIT_OBJECTS, SPLIT_GROUPS, SPLIT_MATERIALS, CLAMP_SIZE, IMAGE_SEARCH, POLYGROUPS, KEEP_VERT_ORDER, ROTATE_X90
+ global CREATE_SMOOTH_GROUPS, CREATE_FGONS, CREATE_EDGES, SPLIT_OBJECTS, SPLIT_GROUPS, CLAMP_SIZE, IMAGE_SEARCH, POLYGROUPS, KEEP_VERT_ORDER, ROTATE_X90
Draw.Label('Import...', ui_x+9, ui_y+159, 220, 21)
Draw.BeginAlign()
@@ -1432,7 +1406,6 @@ def load_obj_ui(filepath, BATCH_LOAD= False):
Draw.BeginAlign()
SPLIT_OBJECTS = Draw.Toggle('Object', EVENT_REDRAW, ui_x+9, ui_y+89, 55, 21, SPLIT_OBJECTS.val, 'Import OBJ Objects into Blender Objects', do_split)
SPLIT_GROUPS = Draw.Toggle('Group', EVENT_REDRAW, ui_x+64, ui_y+89, 55, 21, SPLIT_GROUPS.val, 'Import OBJ Groups into Blender Objects', do_split)
- SPLIT_MATERIALS = Draw.Toggle('Split Materials', EVENT_REDRAW, ui_x+119, ui_y+89, 60, 21, SPLIT_MATERIALS.val, 'Import each material into a seperate mesh', do_split)
Draw.EndAlign()
# Only used for user feedback
@@ -1492,7 +1465,6 @@ def load_obj_ui(filepath, BATCH_LOAD= False):
CREATE_EDGES.val,\
SPLIT_OBJECTS.val,\
SPLIT_GROUPS.val,\
- SPLIT_MATERIALS.val,\
ROTATE_X90.val,\
IMAGE_SEARCH.val,\
POLYGROUPS.val
@@ -1506,7 +1478,6 @@ def load_obj_ui(filepath, BATCH_LOAD= False):
CREATE_EDGES.val,\
SPLIT_OBJECTS.val,\
SPLIT_GROUPS.val,\
- SPLIT_MATERIALS.val,\
ROTATE_X90.val,\
IMAGE_SEARCH.val,\
POLYGROUPS.val
@@ -1570,7 +1541,6 @@ class IMPORT_OT_obj(bpy.types.Operator):
CREATE_EDGES = BoolProperty(name="Lines as Edges", description="Import lines and faces with 2 verts as edge", default= True)
SPLIT_OBJECTS = BoolProperty(name="Object", description="Import OBJ Objects into Blender Objects", default= True)
SPLIT_GROUPS = BoolProperty(name="Group", description="Import OBJ Groups into Blender Objects", default= True)
- SPLIT_MATERIALS = BoolProperty(name="Split Materials", description="Import each material into a seperate mesh", default= False)
# old comment: only used for user feedback
# disabled this option because in old code a handler for it disabled SPLIT* params, it's not passed to load_obj
# KEEP_VERT_ORDER = BoolProperty(name="Keep Vert Order", description="Keep vert and face order, disables split options, enable for morph targets", default= True)
@@ -1591,7 +1561,6 @@ class IMPORT_OT_obj(bpy.types.Operator):
self.properties.CREATE_EDGES,
self.properties.SPLIT_OBJECTS,
self.properties.SPLIT_GROUPS,
- self.properties.SPLIT_MATERIALS,
self.properties.ROTATE_X90,
self.properties.IMAGE_SEARCH,
self.properties.POLYGROUPS)
@@ -1599,8 +1568,7 @@ class IMPORT_OT_obj(bpy.types.Operator):
return {'FINISHED'}
def invoke(self, context, event):
- wm = context.manager
- wm.add_fileselect(self)
+ context.manager.add_fileselect(self)
return {'RUNNING_MODAL'}
@@ -1609,11 +1577,9 @@ def menu_func(self, context):
def register():
- bpy.types.register(IMPORT_OT_obj)
bpy.types.INFO_MT_file_import.append(menu_func)
def unregister():
- bpy.types.unregister(IMPORT_OT_obj)
bpy.types.INFO_MT_file_import.remove(menu_func)
diff --git a/release/scripts/io/import_shape_mdd.py b/release/scripts/io/import_shape_mdd.py
index ec0e7696630..c7b199918a2 100644
--- a/release/scripts/io/import_shape_mdd.py
+++ b/release/scripts/io/import_shape_mdd.py
@@ -12,7 +12,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ***** END GPL LICENCE BLOCK *****
@@ -66,7 +66,7 @@ def mdd_import(filepath, ob, scene, PREF_START_FRAME=0, PREF_JUMP=1):
ob.active_shape_key_index = len(ob.data.shape_keys.keys)-1
index = len(ob.data.shape_keys.keys)-1
- ob.shape_key_lock = True
+ ob.show_shape_key = True
verts = ob.data.shape_keys.keys[len(ob.data.shape_keys.keys)-1].data
@@ -74,7 +74,7 @@ def mdd_import(filepath, ob, scene, PREF_START_FRAME=0, PREF_JUMP=1):
for v in verts: # 12 is the size of 3 floats
v.co[:] = unpack('>3f', file.read(12))
#me.update()
- ob.shape_key_lock = False
+ ob.show_shape_key = False
# insert keyframes
@@ -120,7 +120,8 @@ class importMDD(bpy.types.Operator):
#fps = IntProperty(name="Frames Per Second", description="Number of frames/second", min=minfps, max=maxfps, default=25)
frame_start = IntProperty(name="Start Frame", description="Start frame for inserting animation", min=minframe, max=maxframe, default=0)
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
ob = context.active_object
return (ob and ob.type == 'MESH')
@@ -143,12 +144,10 @@ def menu_func(self, context):
def register():
- bpy.types.register(importMDD)
bpy.types.INFO_MT_file_import.append(menu_func)
def unregister():
- bpy.types.unregister(importMDD)
bpy.types.INFO_MT_file_import.remove(menu_func)
if __name__ == "__main__":
diff --git a/release/scripts/io/netrender/__init__.py b/release/scripts/io/netrender/__init__.py
index f5f104d6d92..5a705e95aa8 100644
--- a/release/scripts/io/netrender/__init__.py
+++ b/release/scripts/io/netrender/__init__.py
@@ -18,16 +18,31 @@
# This directory is a Python package.
-from netrender import model
-from netrender import operators
-from netrender import client
-from netrender import slave
-from netrender import master
-from netrender import master_html
-from netrender import utils
-from netrender import balancing
-from netrender import ui
-from netrender import repath
+# To support reload properly, try to access a package var, if it's there, reload everything
+try:
+ init_data
+
+ reload(model)
+ reload(operators)
+ reload(client)
+ reload(slave)
+ reload(master)
+ reload(master_html)
+ reload(utils)
+ reload(balancing)
+ reload(ui)
+ reload(repath)
+except:
+ from netrender import model
+ from netrender import operators
+ from netrender import client
+ from netrender import slave
+ from netrender import master
+ from netrender import master_html
+ from netrender import utils
+ from netrender import balancing
+ from netrender import ui
+ from netrender import repath
jobs = []
slaves = []
@@ -38,11 +53,10 @@ init_data = True
init_address = True
def register():
- pass # TODO
+ ui.addProperties()
+
def unregister():
import bpy
- bpy.types.unregister(ui.NetRenderJob)
- bpy.types.unregister(ui.NetRenderSettings)
- bpy.types.unregister(ui.NetRenderSlave)
+ bpy.types.Scene.RemoveProperty("network_render")
diff --git a/release/scripts/io/netrender/client.py b/release/scripts/io/netrender/client.py
index 9f6d1a7639e..6f0f6460ae1 100644
--- a/release/scripts/io/netrender/client.py
+++ b/release/scripts/io/netrender/client.py
@@ -41,7 +41,7 @@ def addFluidFiles(job, path):
job.addFile(path + fluid_file, current_frame, current_frame)
def addPointCache(job, ob, point_cache, default_path):
- if not point_cache.disk_cache:
+ if not point_cache.use_disk_cache:
return
@@ -49,7 +49,7 @@ def addPointCache(job, ob, point_cache, default_path):
if name == "":
name = "".join(["%02X" % ord(c) for c in ob.name])
- cache_path = bpy.utils.expandpath(point_cache.filepath) if point_cache.external else default_path
+ cache_path = bpy.path.abspath(point_cache.filepath) if point_cache.use_external else default_path
index = "%02i" % point_cache.index
@@ -113,7 +113,7 @@ def clientSendJob(conn, scene, anim = False):
# LIBRARIES
###########################
for lib in bpy.data.libraries:
- file_path = bpy.utils.expandpath(lib.filepath)
+ file_path = bpy.path.abspath(lib.filepath)
if os.path.exists(file_path):
job.addFile(file_path)
@@ -122,7 +122,7 @@ def clientSendJob(conn, scene, anim = False):
###########################
for image in bpy.data.images:
if image.source == "FILE" and not image.packed_file:
- file_path = bpy.utils.expandpath(image.filepath)
+ file_path = bpy.path.abspath(image.filepath)
if os.path.exists(file_path):
job.addFile(file_path)
@@ -139,17 +139,17 @@ def clientSendJob(conn, scene, anim = False):
for object in bpy.data.objects:
for modifier in object.modifiers:
if modifier.type == 'FLUID_SIMULATION' and modifier.settings.type == "DOMAIN":
- addFluidFiles(job, bpy.utils.expandpath(modifier.settings.path))
+ addFluidFiles(job, bpy.path.abspath(modifier.settings.path))
elif modifier.type == "CLOTH":
addPointCache(job, object, modifier.point_cache, default_path)
elif modifier.type == "SOFT_BODY":
addPointCache(job, object, modifier.point_cache, default_path)
elif modifier.type == "SMOKE" and modifier.smoke_type == "TYPE_DOMAIN":
addPointCache(job, object, modifier.domain_settings.point_cache_low, default_path)
- if modifier.domain_settings.highres:
+ if modifier.domain_settings.use_high_resolution:
addPointCache(job, object, modifier.domain_settings.point_cache_high, default_path)
- elif modifier.type == "MULTIRES" and modifier.external:
- file_path = bpy.utils.expandpath(modifier.filepath)
+ elif modifier.type == "MULTIRES" and modifier.is_external:
+ file_path = bpy.path.abspath(modifier.filepath)
job.addFile(file_path)
# particles modifier are stupid and don't contain data
@@ -171,6 +171,7 @@ def clientSendJob(conn, scene, anim = False):
# try to send path first
conn.request("POST", "/job", repr(job.serialize()))
response = conn.getresponse()
+ response.read()
job_id = response.getheader("job-id")
@@ -181,6 +182,7 @@ def clientSendJob(conn, scene, anim = False):
conn.request("PUT", fileURL(job_id, rfile.index), f)
f.close()
response = conn.getresponse()
+ response.read()
# server will reply with ACCEPTED until all files are found
@@ -189,7 +191,6 @@ def clientSendJob(conn, scene, anim = False):
def requestResult(conn, job_id, frame):
conn.request("GET", renderURL(job_id, frame))
-@rnaType
class NetworkRenderEngine(bpy.types.RenderEngine):
bl_idname = 'NET_RENDER'
bl_label = "Network Render"
@@ -209,7 +210,7 @@ class NetworkRenderEngine(bpy.types.RenderEngine):
address = "" if netsettings.server_address == "[default]" else netsettings.server_address
- master.runMaster((address, netsettings.server_port), netsettings.master_broadcast, netsettings.master_clear, netsettings.path, self.update_stats, self.test_break)
+ master.runMaster((address, netsettings.server_port), netsettings.master_broadcast, netsettings.use_master_clear, netsettings.path, self.update_stats, self.test_break)
def render_slave(self, scene):
@@ -237,6 +238,7 @@ class NetworkRenderEngine(bpy.types.RenderEngine):
requestResult(conn, job_id, scene.frame_current)
response = conn.getresponse()
+ response.read()
if response.status == http.client.NO_CONTENT:
new_job = True
@@ -245,16 +247,19 @@ class NetworkRenderEngine(bpy.types.RenderEngine):
requestResult(conn, job_id, scene.frame_current)
response = conn.getresponse()
+ response.read()
while response.status == http.client.ACCEPTED and not self.test_break():
time.sleep(1)
requestResult(conn, job_id, scene.frame_current)
response = conn.getresponse()
+ response.read()
# cancel new jobs (animate on network) on break
if self.test_break() and new_job:
conn.request("POST", cancelURL(job_id))
response = conn.getresponse()
+ response.read()
print( response.status, response.reason )
netsettings.job_id = 0
@@ -266,7 +271,7 @@ class NetworkRenderEngine(bpy.types.RenderEngine):
x= int(r.resolution_x*r.resolution_percentage*0.01)
y= int(r.resolution_y*r.resolution_percentage*0.01)
- f = open(netsettings.path + "output.exr", "wb")
+ f = open(os.path.join(netsettings.path, "output.exr"), "wb")
buf = response.read(1024)
while buf:
@@ -276,7 +281,7 @@ class NetworkRenderEngine(bpy.types.RenderEngine):
f.close()
result = self.begin_result(0, 0, x, y)
- result.load_from_file(netsettings.path + "output.exr")
+ result.load_from_file(os.path.join(netsettings.path, "output.exr"))
self.end_result(result)
conn.close()
diff --git a/release/scripts/io/netrender/master.py b/release/scripts/io/netrender/master.py
index f227f61a536..6deb925420b 100644
--- a/release/scripts/io/netrender/master.py
+++ b/release/scripts/io/netrender/master.py
@@ -89,7 +89,7 @@ class MRenderJob(netrender.model.RenderJob):
def save(self):
if self.save_path:
- f = open(self.save_path + "job.txt", "w")
+ f = open(os.path.join(self.save_path, "job.txt"), "w")
f.write(repr(self.serialize()))
f.close()
@@ -134,8 +134,8 @@ class MRenderJob(netrender.model.RenderJob):
self.status = JOB_QUEUED
def addLog(self, frames):
- log_name = "_".join(("%04d" % f for f in frames)) + ".log"
- log_path = self.save_path + log_name
+ log_name = "_".join(("%06d" % f for f in frames)) + ".log"
+ log_path = os.path.join(self.save_path, log_name)
for number in frames:
frame = self[number]
@@ -260,7 +260,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
elif frame.status == DONE:
self.server.stats("", "Sending result to client")
- filename = job.save_path + "%04d" % frame_number + ".exr"
+ filename = os.path.join(job.save_path, "%06d.exr" % frame_number)
f = open(filename, 'rb')
self.send_head(content = "image/x-exr")
@@ -294,7 +294,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
if frame.status in (QUEUED, DISPATCHED):
self.send_head(http.client.ACCEPTED)
elif frame.status == DONE:
- filename = job.save_path + "%04d" % frame_number + ".exr"
+ filename = os.path.join(job.save_path, "%06d.exr" % frame_number)
thumbname = thumbnail(filename)
@@ -716,7 +716,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
if file_index > 0:
file_path = prefixPath(job.save_path, render_file.filepath, main_path)
else:
- file_path = job.save_path + main_name
+ file_path = os.path.join(job.save_path, main_name)
buf = self.rfile.read(length)
@@ -772,7 +772,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
if job_result == DONE:
length = int(self.headers['content-length'])
buf = self.rfile.read(length)
- f = open(job.save_path + "%04d" % job_frame + ".exr", 'wb')
+ f = open(os.path.join(job.save_path, "%06d.exr" % job_frame), 'wb')
f.write(buf)
f.close()
@@ -822,13 +822,12 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
if job.type == netrender.model.JOB_BLENDER:
length = int(self.headers['content-length'])
buf = self.rfile.read(length)
- f = open(job.save_path + "%04d" % job_frame + ".jpg", 'wb')
+ f = open(os.path.join(job.save_path, "%06d.jpg" % job_frame), 'wb')
f.write(buf)
f.close()
del buf
- self.send_head()
else: # frame not found
self.send_head(http.client.NO_CONTENT)
else: # job not found
@@ -880,7 +879,7 @@ class RenderMasterServer(socketserver.ThreadingMixIn, http.server.HTTPServer):
self.job_id = 0
if subdir:
- self.path = path + "master_" + str(os.getpid()) + os.sep
+ self.path = os.path.join(path, "master_" + str(os.getpid()))
else:
self.path = path
@@ -1007,7 +1006,7 @@ class RenderMasterServer(socketserver.ThreadingMixIn, http.server.HTTPServer):
self.jobs_map[job.id] = job
# create job directory
- job.save_path = self.path + "job_" + job.id + os.sep
+ job.save_path = os.path.join(self.path, "job_" + job.id)
if not os.path.exists(job.save_path):
os.mkdir(job.save_path)
diff --git a/release/scripts/io/netrender/master_html.py b/release/scripts/io/netrender/master_html.py
index c3695cd4f0f..74155f6bd66 100644
--- a/release/scripts/io/netrender/master_html.py
+++ b/release/scripts/io/netrender/master_html.py
@@ -27,9 +27,10 @@ def get(handler):
def output(text):
handler.wfile.write(bytes(text, encoding='utf8'))
- def head(title):
+ def head(title, refresh = False):
output("<html><head>")
- output("<meta http-equiv='refresh' content=5>")
+ if refresh:
+ output("<meta http-equiv='refresh' content=5>")
output("<script src='/html/netrender.js' type='text/javascript'></script>")
# output("<script src='/html/json2.js' type='text/javascript'></script>")
output("<title>")
@@ -104,7 +105,7 @@ def get(handler):
f.close()
elif handler.path == "/html" or handler.path == "/":
handler.send_head(content = "text/html")
- head("NetRender")
+ head("NetRender", refresh = True)
output("<h2>Jobs</h2>")
diff --git a/release/scripts/io/netrender/operators.py b/release/scripts/io/netrender/operators.py
index 858ec800dbc..252b1146b67 100644
--- a/release/scripts/io/netrender/operators.py
+++ b/release/scripts/io/netrender/operators.py
@@ -26,13 +26,13 @@ from netrender.utils import *
import netrender.client as client
import netrender.model
-@rnaType
class RENDER_OT_netslave_bake(bpy.types.Operator):
'''NEED DESCRIPTION'''
bl_idname = "render.netslavebake"
bl_label = "Bake all in file"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return True
def execute(self, context):
@@ -52,27 +52,27 @@ class RENDER_OT_netslave_bake(bpy.types.Operator):
modifier.settings.path = relative_path
bpy.ops.fluid.bake({"active_object": object, "scene": scene})
elif modifier.type == "CLOTH":
- modifier.point_cache.step = 1
- modifier.point_cache.disk_cache = True
- modifier.point_cache.external = False
+ modifier.point_cache.frame_step = 1
+ modifier.point_cache.use_disk_cache = True
+ modifier.point_cache.use_external = False
elif modifier.type == "SOFT_BODY":
- modifier.point_cache.step = 1
- modifier.point_cache.disk_cache = True
- modifier.point_cache.external = False
+ modifier.point_cache.frame_step = 1
+ modifier.point_cache.use_disk_cache = True
+ modifier.point_cache.use_external = False
elif modifier.type == "SMOKE" and modifier.smoke_type == "TYPE_DOMAIN":
- modifier.domain_settings.point_cache_low.step = 1
- modifier.domain_settings.point_cache_low.disk_cache = True
- modifier.domain_settings.point_cache_low.external = False
- modifier.domain_settings.point_cache_high.step = 1
- modifier.domain_settings.point_cache_high.disk_cache = True
- modifier.domain_settings.point_cache_high.external = False
+ modifier.domain_settings.point_cache_low.use_step = 1
+ modifier.domain_settings.point_cache_low.use_disk_cache = True
+ modifier.domain_settings.point_cache_low.use_external = False
+ modifier.domain_settings.point_cache_high.use_step = 1
+ modifier.domain_settings.point_cache_high.use_disk_cache = True
+ modifier.domain_settings.point_cache_high.use_external = False
# particles modifier are stupid and don't contain data
# we have to go through the object property
for psys in object.particle_systems:
- psys.point_cache.step = 1
- psys.point_cache.disk_cache = True
- psys.point_cache.external = False
+ psys.point_cache.use_step = 1
+ psys.point_cache.use_disk_cache = True
+ psys.point_cache.use_external = False
psys.point_cache.filepath = relative_path
bpy.ops.ptcache.bake_all()
@@ -84,13 +84,13 @@ class RENDER_OT_netslave_bake(bpy.types.Operator):
def invoke(self, context, event):
return self.execute(context)
-@rnaType
class RENDER_OT_netclientanim(bpy.types.Operator):
'''Start rendering an animation on network'''
bl_idname = "render.netclientanim"
bl_label = "Animation on network"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return True
def execute(self, context):
@@ -111,13 +111,13 @@ class RENDER_OT_netclientanim(bpy.types.Operator):
def invoke(self, context, event):
return self.execute(context)
-@rnaType
class RENDER_OT_netclientrun(bpy.types.Operator):
'''Start network rendering service'''
bl_idname = "render.netclientstart"
bl_label = "Start Service"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return True
def execute(self, context):
@@ -128,13 +128,13 @@ class RENDER_OT_netclientrun(bpy.types.Operator):
def invoke(self, context, event):
return self.execute(context)
-@rnaType
class RENDER_OT_netclientsend(bpy.types.Operator):
'''Send Render Job to the Network'''
bl_idname = "render.netclientsend"
bl_label = "Send job"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return True
def execute(self, context):
@@ -158,13 +158,13 @@ class RENDER_OT_netclientsend(bpy.types.Operator):
def invoke(self, context, event):
return self.execute(context)
-@rnaType
class RENDER_OT_netclientsendframe(bpy.types.Operator):
'''Send Render Job with current frame to the Network'''
bl_idname = "render.netclientsendframe"
bl_label = "Send current frame job"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return True
def execute(self, context):
@@ -188,13 +188,13 @@ class RENDER_OT_netclientsendframe(bpy.types.Operator):
def invoke(self, context, event):
return self.execute(context)
-@rnaType
class RENDER_OT_netclientstatus(bpy.types.Operator):
'''Refresh the status of the current jobs'''
bl_idname = "render.netclientstatus"
bl_label = "Client Status"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return True
def execute(self, context):
@@ -205,6 +205,7 @@ class RENDER_OT_netclientstatus(bpy.types.Operator):
conn.request("GET", "/status")
response = conn.getresponse()
+ response.read()
print( response.status, response.reason )
jobs = (netrender.model.RenderJob.materialize(j) for j in eval(str(response.read(), encoding='utf8')))
@@ -228,13 +229,13 @@ class RENDER_OT_netclientstatus(bpy.types.Operator):
def invoke(self, context, event):
return self.execute(context)
-@rnaType
class RENDER_OT_netclientblacklistslave(bpy.types.Operator):
'''Operator documentation text, will be used for the operator tooltip and python docs.'''
bl_idname = "render.netclientblacklistslave"
bl_label = "Client Blacklist Slave"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return True
def execute(self, context):
@@ -258,13 +259,13 @@ class RENDER_OT_netclientblacklistslave(bpy.types.Operator):
def invoke(self, context, event):
return self.execute(context)
-@rnaType
class RENDER_OT_netclientwhitelistslave(bpy.types.Operator):
'''Operator documentation text, will be used for the operator tooltip and python docs.'''
bl_idname = "render.netclientwhitelistslave"
bl_label = "Client Whitelist Slave"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return True
def execute(self, context):
@@ -289,13 +290,13 @@ class RENDER_OT_netclientwhitelistslave(bpy.types.Operator):
return self.execute(context)
-@rnaType
class RENDER_OT_netclientslaves(bpy.types.Operator):
'''Refresh status about available Render slaves'''
bl_idname = "render.netclientslaves"
bl_label = "Client Slaves"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return True
def execute(self, context):
@@ -306,6 +307,7 @@ class RENDER_OT_netclientslaves(bpy.types.Operator):
conn.request("GET", "/slaves")
response = conn.getresponse()
+ response.read()
print( response.status, response.reason )
slaves = (netrender.model.RenderSlave.materialize(s) for s in eval(str(response.read(), encoding='utf8')))
@@ -334,13 +336,13 @@ class RENDER_OT_netclientslaves(bpy.types.Operator):
def invoke(self, context, event):
return self.execute(context)
-@rnaType
class RENDER_OT_netclientcancel(bpy.types.Operator):
'''Cancel the selected network rendering job.'''
bl_idname = "render.netclientcancel"
bl_label = "Client Cancel"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
netsettings = context.scene.network_render
return netsettings.active_job_index >= 0 and len(netsettings.jobs) > 0
@@ -354,6 +356,7 @@ class RENDER_OT_netclientcancel(bpy.types.Operator):
conn.request("POST", cancelURL(job.id))
response = conn.getresponse()
+ response.read()
print( response.status, response.reason )
netsettings.jobs.remove(netsettings.active_job_index)
@@ -363,13 +366,13 @@ class RENDER_OT_netclientcancel(bpy.types.Operator):
def invoke(self, context, event):
return self.execute(context)
-@rnaType
class RENDER_OT_netclientcancelall(bpy.types.Operator):
'''Cancel all running network rendering jobs.'''
bl_idname = "render.netclientcancelall"
bl_label = "Client Cancel All"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return True
def execute(self, context):
@@ -380,6 +383,7 @@ class RENDER_OT_netclientcancelall(bpy.types.Operator):
conn.request("POST", "/clear")
response = conn.getresponse()
+ response.read()
print( response.status, response.reason )
while(len(netsettings.jobs) > 0):
@@ -390,13 +394,13 @@ class RENDER_OT_netclientcancelall(bpy.types.Operator):
def invoke(self, context, event):
return self.execute(context)
-@rnaType
class netclientdownload(bpy.types.Operator):
'''Download render results from the network'''
bl_idname = "render.netclientdownload"
bl_label = "Client Download"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
netsettings = context.scene.network_render
return netsettings.active_job_index >= 0 and len(netsettings.jobs) > 0
@@ -412,6 +416,7 @@ class netclientdownload(bpy.types.Operator):
for frame in job.frames:
client.requestResult(conn, job.id, frame.number)
response = conn.getresponse()
+ response.read()
if response.status != http.client.OK:
print("missing", frame.number)
@@ -419,7 +424,7 @@ class netclientdownload(bpy.types.Operator):
print("got back", frame.number)
- f = open(netsettings.path + "%06d" % frame.number + ".exr", "wb")
+ f = open(os.path.join(netsettings.path, "%06d.exr" % frame.number), "wb")
buf = response.read(1024)
while buf:
@@ -435,13 +440,13 @@ class netclientdownload(bpy.types.Operator):
def invoke(self, context, event):
return self.execute(context)
-@rnaType
class netclientscan(bpy.types.Operator):
'''Listen on network for master server broadcasting its address and port.'''
bl_idname = "render.netclientscan"
bl_label = "Client Scan"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return True
def execute(self, context):
@@ -458,13 +463,13 @@ class netclientscan(bpy.types.Operator):
def invoke(self, context, event):
return self.execute(context)
-@rnaType
class netclientweb(bpy.types.Operator):
'''Open new window with information about running rendering jobs'''
bl_idname = "render.netclientweb"
bl_label = "Open Master Monitor"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
netsettings = context.scene.network_render
return netsettings.server_address != "[default]"
diff --git a/release/scripts/io/netrender/repath.py b/release/scripts/io/netrender/repath.py
index 7f9befd34fb..3ac9636b628 100755..100644
--- a/release/scripts/io/netrender/repath.py
+++ b/release/scripts/io/netrender/repath.py
@@ -66,10 +66,10 @@ def update(job):
def process(paths):
def processPointCache(point_cache):
- point_cache.external = False
+ point_cache.use_external = False
def processFluid(fluid):
- new_path = path_map.get(fluid.path, None)
+ new_path = path_map.get(fluid.filepath, None)
if new_path:
fluid.path = new_path
@@ -83,14 +83,17 @@ def process(paths):
elif paths[i].endswith(".bobj.gz"):
path_map[os.path.split(paths[i])[0]] = os.path.split(paths[i+1])[0]
else:
- path_map[paths[i]] = paths[i+1]
+ path_map[os.path.split(paths[i])[1]] = paths[i+1]
+
+ # TODO original paths aren't really the orignal path (they are the normalized path
+ # so we repath using the filenames only.
###########################
# LIBRARIES
###########################
for lib in bpy.data.libraries:
- file_path = bpy.utils.expandpath(lib.filepath)
- new_path = path_map.get(file_path, None)
+ file_path = bpy.path.abspath(lib.filepath)
+ new_path = path_map.get(os.path.split(file_path)[1], None)
if new_path:
lib.filepath = new_path
@@ -99,8 +102,8 @@ def process(paths):
###########################
for image in bpy.data.images:
if image.source == "FILE" and not image.packed_file:
- file_path = bpy.utils.expandpath(image.filepath)
- new_path = path_map.get(file_path, None)
+ file_path = bpy.path.abspath(image.filepath)
+ new_path = path_map.get(os.path.split(file_path)[1], None)
if new_path:
image.filepath = new_path
@@ -118,10 +121,10 @@ def process(paths):
processPointCache(modifier.point_cache)
elif modifier.type == "SMOKE" and modifier.smoke_type == "TYPE_DOMAIN":
processPointCache(modifier.domain_settings.point_cache_low)
- if modifier.domain_settings.highres:
+ if modifier.domain_settings.use_high_resolution:
processPointCache(modifier.domain_settings.point_cache_high)
- elif modifier.type == "MULTIRES" and modifier.external:
- file_path = bpy.utils.expandpath(modifier.filepath)
+ elif modifier.type == "MULTIRES" and modifier.is_external:
+ file_path = bpy.path.abspath(modifier.filepath)
new_path = path_map.get(file_path, None)
if new_path:
modifier.filepath = new_path
@@ -144,4 +147,4 @@ if __name__ == "__main__":
process(args)
- bpy.ops.wm.save_as_mainfile(path=new_path, check_existing=False)
+ bpy.ops.wm.save_as_mainfile(filepath=new_path, check_existing=False)
diff --git a/release/scripts/io/netrender/slave.py b/release/scripts/io/netrender/slave.py
index 9fd00152dc1..b383481824b 100644
--- a/release/scripts/io/netrender/slave.py
+++ b/release/scripts/io/netrender/slave.py
@@ -59,8 +59,8 @@ def slave_Info():
def testCancel(conn, job_id, frame_number):
conn.request("HEAD", "/status", headers={"job-id":job_id, "job-frame": str(frame_number)})
- # cancelled if job isn't found anymore
- if conn.getresponse().status == http.client.NO_CONTENT:
+ # canceled if job isn't found anymore
+ if responseStatus(conn) == http.client.NO_CONTENT:
return True
else:
return False
@@ -79,7 +79,9 @@ def testFile(conn, job_id, slave_id, rfile, JOB_PREFIX, main_path = None):
job_full_path = prefixPath(JOB_PREFIX, rfile.filepath, main_path, force = True)
if not found:
- temp_path = JOB_PREFIX + "slave.temp"
+ # Force prefix path if not found
+ job_full_path = prefixPath(JOB_PREFIX, rfile.filepath, main_path, force = True)
+ temp_path = os.path.join(JOB_PREFIX, "slave.temp")
conn.request("GET", fileURL(job_id, rfile.index), headers={"slave-id":slave_id})
response = conn.getresponse()
@@ -111,10 +113,11 @@ def render_slave(engine, netsettings, threads):
if conn:
conn.request("POST", "/slave", repr(slave_Info().serialize()))
response = conn.getresponse()
+ response.read()
slave_id = response.getheader("slave-id")
- NODE_PREFIX = netsettings.path + "slave_" + slave_id + os.sep
+ NODE_PREFIX = os.path.join(netsettings.path, "slave_" + slave_id)
if not os.path.exists(NODE_PREFIX):
os.mkdir(NODE_PREFIX)
@@ -130,7 +133,7 @@ def render_slave(engine, netsettings, threads):
job = netrender.model.RenderJob.materialize(eval(str(response.read(), encoding='utf8')))
engine.update_stats("", "Network render processing job from master")
- JOB_PREFIX = NODE_PREFIX + "job_" + job.id + os.sep
+ JOB_PREFIX = os.path.join(NODE_PREFIX, "job_" + job.id)
if not os.path.exists(JOB_PREFIX):
os.mkdir(JOB_PREFIX)
@@ -155,6 +158,7 @@ def render_slave(engine, netsettings, threads):
logfile = netrender.model.LogFile(job.id, slave_id, [frame.number for frame in job.frames])
conn.request("POST", "/log", bytes(repr(logfile.serialize()), encoding='utf8'))
response = conn.getresponse()
+ response.read()
first_frame = job.frames[0].number
@@ -170,7 +174,7 @@ def render_slave(engine, netsettings, threads):
frame_args += ["-f", str(frame.number)]
val = SetErrorMode()
- process = subprocess.Popen([BLENDER_PATH, "-b", "-noaudio", job_full_path, "-t", str(threads), "-o", JOB_PREFIX + "######", "-E", "BLENDER_RENDER", "-F", "MULTILAYER"] + frame_args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+ process = subprocess.Popen([BLENDER_PATH, "-b", "-noaudio", job_full_path, "-t", str(threads), "-o", os.path.join(JOB_PREFIX, "######"), "-E", "BLENDER_RENDER", "-F", "MULTILAYER"] + frame_args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
RestoreErrorMode(val)
elif job.type == netrender.model.JOB_PROCESS:
command = job.frames[0].command
@@ -194,9 +198,10 @@ def render_slave(engine, netsettings, threads):
# (only need to update on one frame, they are linked
conn.request("PUT", logURL(job.id, first_frame), stdout, headers=headers)
response = conn.getresponse()
+ response.read()
# Also output on console
- if netsettings.slave_thumb:
+ if netsettings.use_slave_output_log:
print(str(stdout, encoding='utf8'), end="")
stdout = bytes()
@@ -214,18 +219,21 @@ def render_slave(engine, netsettings, threads):
if cancelled:
# kill process if needed
if process.poll() == None:
- process.terminate()
+ try:
+ process.terminate()
+ except OSError:
+ pass
continue # to next frame
# flush the rest of the logs
if stdout:
# Also output on console
- if netsettings.slave_thumb:
+ if netsettings.use_slave_thumb:
print(str(stdout, encoding='utf8'), end="")
# (only need to update on one frame, they are linked
conn.request("PUT", logURL(job.id, first_frame), stdout, headers=headers)
- if conn.getresponse().status == http.client.NO_CONTENT:
+ if responseStatus(conn) == http.client.NO_CONTENT:
continue
total_t = time.time() - start_t
@@ -246,26 +254,27 @@ def render_slave(engine, netsettings, threads):
if job.type == netrender.model.JOB_BLENDER:
# send image back to server
- filename = JOB_PREFIX + "%06d" % frame.number + ".exr"
+ filename = os.path.join(JOB_PREFIX, "%06d.exr" % frame.number)
# thumbnail first
- if netsettings.slave_thumb:
+ if netsettings.use_slave_thumb:
thumbname = thumbnail(filename)
f = open(thumbname, 'rb')
conn.request("PUT", "/thumb", f, headers=headers)
f.close()
- conn.getresponse()
+ responseStatus(conn)
+
f = open(filename, 'rb')
conn.request("PUT", "/render", f, headers=headers)
f.close()
- if conn.getresponse().status == http.client.NO_CONTENT:
+ if responseStatus(conn) == http.client.NO_CONTENT:
continue
elif job.type == netrender.model.JOB_PROCESS:
conn.request("PUT", "/render", headers=headers)
- if conn.getresponse().status == http.client.NO_CONTENT:
+ if responseStatus(conn) == http.client.NO_CONTENT:
continue
else:
headers["job-result"] = str(ERROR)
@@ -273,7 +282,7 @@ def render_slave(engine, netsettings, threads):
headers["job-frame"] = str(frame.number)
# send error result back to server
conn.request("PUT", "/render", headers=headers)
- if conn.getresponse().status == http.client.NO_CONTENT:
+ if responseStatus(conn) == http.client.NO_CONTENT:
continue
engine.update_stats("", "Network render connected to master, waiting for jobs")
@@ -288,7 +297,7 @@ def render_slave(engine, netsettings, threads):
conn.close()
- if netsettings.slave_clear:
+ if netsettings.use_slave_clear:
clearSlave(NODE_PREFIX)
if __name__ == "__main__":
diff --git a/release/scripts/io/netrender/ui.py b/release/scripts/io/netrender/ui.py
index c60b10c484a..c2d943f63f8 100644
--- a/release/scripts/io/netrender/ui.py
+++ b/release/scripts/io/netrender/ui.py
@@ -36,6 +36,11 @@ DISPATCHED = 1
DONE = 2
ERROR = 3
+def base_poll(cls, context):
+ rd = context.scene.render
+ return (rd.use_game_engine==False) and (rd.engine in cls.COMPAT_ENGINES)
+
+
def init_file():
if netrender.init_file != bpy.data.filepath:
netrender.init_file = bpy.data.filepath
@@ -81,17 +86,21 @@ class RenderButtonsPanel():
bl_region_type = "WINDOW"
bl_context = "render"
# COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here
-
- def poll(self, context):
+
+ @classmethod
+ def poll(cls, context):
rd = context.scene.render
- return (rd.use_game_engine==False) and (rd.engine in self.COMPAT_ENGINES)
+ return (rd.use_game_engine==False) and (rd.engine in cls.COMPAT_ENGINES)
# Setting panel, use in the scene for now.
-@rnaType
class RENDER_PT_network_settings(bpy.types.Panel, RenderButtonsPanel):
bl_label = "Network Settings"
COMPAT_ENGINES = {'NET_RENDER'}
+ @classmethod
+ def poll(cls, context):
+ return super(RENDER_PT_network_settings, cls).poll(context)
+
def draw(self, context):
layout = self.layout
@@ -122,15 +131,14 @@ class RENDER_PT_network_settings(bpy.types.Panel, RenderButtonsPanel):
layout.operator("render.netclientweb", icon='QUESTION')
-@rnaType
class RENDER_PT_network_slave_settings(bpy.types.Panel, RenderButtonsPanel):
bl_label = "Slave Settings"
COMPAT_ENGINES = {'NET_RENDER'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
scene = context.scene
- return (super().poll(context)
- and scene.network_render.mode == "RENDER_SLAVE")
+ return super(RENDER_PT_network_slave_settings, cls).poll(context) and scene.network_render.mode == "RENDER_SLAVE"
def draw(self, context):
layout = self.layout
@@ -139,23 +147,23 @@ class RENDER_PT_network_slave_settings(bpy.types.Panel, RenderButtonsPanel):
rd = scene.render
netsettings = scene.network_render
- layout.prop(netsettings, "slave_clear")
- layout.prop(netsettings, "slave_thumb")
- layout.prop(netsettings, "slave_outputlog")
+ layout.prop(netsettings, "use_slave_clear")
+ layout.prop(netsettings, "use_slave_thumb")
+ layout.prop(netsettings, "use_slave_output_log")
layout.label(text="Threads:")
layout.prop(rd, "threads_mode", expand=True)
sub = layout.column()
sub.enabled = rd.threads_mode == 'FIXED'
sub.prop(rd, "threads")
-@rnaType
+
class RENDER_PT_network_master_settings(bpy.types.Panel, RenderButtonsPanel):
bl_label = "Master Settings"
COMPAT_ENGINES = {'NET_RENDER'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
scene = context.scene
- return (super().poll(context)
- and scene.network_render.mode == "RENDER_MASTER")
+ return super(RENDER_PT_network_master_settings, cls).poll(context) and scene.network_render.mode == "RENDER_MASTER"
def draw(self, context):
layout = self.layout
@@ -163,18 +171,17 @@ class RENDER_PT_network_master_settings(bpy.types.Panel, RenderButtonsPanel):
scene = context.scene
netsettings = scene.network_render
- layout.prop(netsettings, "master_broadcast")
- layout.prop(netsettings, "master_clear")
+ layout.prop(netsettings, "use_master_broadcast")
+ layout.prop(netsettings, "use_master_clear")
-@rnaType
class RENDER_PT_network_job(bpy.types.Panel, RenderButtonsPanel):
bl_label = "Job Settings"
COMPAT_ENGINES = {'NET_RENDER'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
scene = context.scene
- return (super().poll(context)
- and scene.network_render.mode == "RENDER_CLIENT")
+ return super(RENDER_PT_network_job, cls).poll(context) and scene.network_render.mode == "RENDER_CLIENT"
def draw(self, context):
layout = self.layout
@@ -207,19 +214,18 @@ class RENDER_PT_network_job(bpy.types.Panel, RenderButtonsPanel):
row.prop(netsettings, "priority")
row.prop(netsettings, "chunks")
-@rnaType
class RENDER_PT_network_slaves(bpy.types.Panel, RenderButtonsPanel):
bl_label = "Slaves Status"
COMPAT_ENGINES = {'NET_RENDER'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
scene = context.scene
netsettings = scene.network_render
if netsettings.mode != "RENDER_CLIENT":
return False
verify_address(netsettings)
- return (super().poll(context)
- and netsettings.server_address != "[default]")
+ return super(RENDER_PT_network_slaves, cls).poll(context) and netsettings.server_address != "[default]"
def draw(self, context):
layout = self.layout
@@ -246,19 +252,18 @@ class RENDER_PT_network_slaves(bpy.types.Panel, RenderButtonsPanel):
layout.label(text="Seen: " + time.ctime(slave.last_seen))
layout.label(text="Stats: " + slave.stats)
-@rnaType
class RENDER_PT_network_slaves_blacklist(bpy.types.Panel, RenderButtonsPanel):
bl_label = "Slaves Blacklist"
COMPAT_ENGINES = {'NET_RENDER'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
scene = context.scene
netsettings = scene.network_render
if netsettings.mode != "RENDER_CLIENT":
return False
verify_address(netsettings)
- return (super().poll(context)
- and netsettings.server_address != "[default]")
+ return super(RENDER_PT_network_slaves_blacklist, cls).poll(context) and netsettings.server_address != "[default]"
def draw(self, context):
layout = self.layout
@@ -284,19 +289,18 @@ class RENDER_PT_network_slaves_blacklist(bpy.types.Panel, RenderButtonsPanel):
layout.label(text="Seen: " + time.ctime(slave.last_seen))
layout.label(text="Stats: " + slave.stats)
-@rnaType
class RENDER_PT_network_jobs(bpy.types.Panel, RenderButtonsPanel):
bl_label = "Jobs"
COMPAT_ENGINES = {'NET_RENDER'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
scene = context.scene
netsettings = scene.network_render
if netsettings.mode != "RENDER_CLIENT":
return False
verify_address(netsettings)
- return (super().poll(context)
- and netsettings.server_address != "[default]")
+ return super(RENDER_PT_network_jobs, cls).poll(context) and netsettings.server_address != "[default]"
def draw(self, context):
layout = self.layout
@@ -325,150 +329,148 @@ class RENDER_PT_network_jobs(bpy.types.Panel, RenderButtonsPanel):
layout.label(text="Done: %04i" % job.results[DONE])
layout.label(text="Error: %04i" % job.results[ERROR])
-@rnaType
class NetRenderSettings(bpy.types.IDPropertyGroup):
pass
-@rnaType
class NetRenderSlave(bpy.types.IDPropertyGroup):
pass
-@rnaType
class NetRenderJob(bpy.types.IDPropertyGroup):
pass
-bpy.types.Scene.PointerProperty(attr="network_render", type=NetRenderSettings, name="Network Render", description="Network Render Settings")
-
-NetRenderSettings.StringProperty( attr="server_address",
- name="Server address",
- description="IP or name of the master render server",
- maxlen = 128,
- default = "[default]")
-
-NetRenderSettings.IntProperty( attr="server_port",
- name="Server port",
- description="port of the master render server",
- default = 8000,
- min=1,
- max=65535)
-
-NetRenderSettings.BoolProperty( attr="master_broadcast",
- name="Broadcast",
- description="broadcast master server address on local network",
- default = True)
-
-NetRenderSettings.BoolProperty( attr="slave_clear",
- name="Clear on exit",
- description="delete downloaded files on exit",
- default = True)
-
-NetRenderSettings.BoolProperty( attr="slave_thumb",
- name="Generate thumbnails",
- description="Generate thumbnails on slaves instead of master",
- default = False)
-
-NetRenderSettings.BoolProperty( attr="slave_outputlog",
- name="Output render log on console",
- description="Output render text log to console as well as sending it to the master",
- default = True)
-
-NetRenderSettings.BoolProperty( attr="master_clear",
- name="Clear on exit",
- description="delete saved files on exit",
- default = False)
-
-default_path = os.environ.get("TEMP")
-
-if not default_path:
- if os.name == 'nt':
- default_path = "c:/tmp/"
- else:
- default_path = "/tmp/"
-elif not default_path.endswith(os.sep):
- default_path += os.sep
-
-NetRenderSettings.StringProperty( attr="path",
- name="Path",
- description="Path for temporary files",
- maxlen = 128,
- default = default_path,
- subtype='FILE_PATH')
-
-NetRenderSettings.StringProperty( attr="job_name",
- name="Job name",
- description="Name of the job",
- maxlen = 128,
- default = "[default]")
-
-NetRenderSettings.StringProperty( attr="job_category",
- name="Job category",
- description="Category of the job",
- maxlen = 128,
- default = "")
-
-NetRenderSettings.IntProperty( attr="chunks",
- name="Chunks",
- description="Number of frame to dispatch to each slave in one chunk",
- default = 5,
- min=1,
- max=65535)
-
-NetRenderSettings.IntProperty( attr="priority",
- name="Priority",
- description="Priority of the job",
- default = 1,
- min=1,
- max=10)
-
-NetRenderSettings.StringProperty( attr="job_id",
- name="Network job id",
- description="id of the last sent render job",
- maxlen = 64,
- default = "")
-
-NetRenderSettings.IntProperty( attr="active_slave_index",
- name="Index of the active slave",
- description="",
- default = -1,
- min= -1,
- max=65535)
-
-NetRenderSettings.IntProperty( attr="active_blacklisted_slave_index",
- name="Index of the active slave",
- description="",
- default = -1,
- min= -1,
- max=65535)
-
-NetRenderSettings.IntProperty( attr="active_job_index",
- name="Index of the active job",
- description="",
- default = -1,
- min= -1,
- max=65535)
-
-NetRenderSettings.EnumProperty(attr="mode",
- items=(
- ("RENDER_CLIENT", "Client", "Act as render client"),
- ("RENDER_MASTER", "Master", "Act as render master"),
- ("RENDER_SLAVE", "Slave", "Act as render slave"),
- ),
- name="Network mode",
- description="Mode of operation of this instance",
- default="RENDER_CLIENT")
-
-NetRenderSettings.CollectionProperty(attr="slaves", type=NetRenderSlave, name="Slaves", description="")
-NetRenderSettings.CollectionProperty(attr="slaves_blacklist", type=NetRenderSlave, name="Slaves Blacklist", description="")
-NetRenderSettings.CollectionProperty(attr="jobs", type=NetRenderJob, name="Job List", description="")
-
-NetRenderSlave.StringProperty( attr="name",
- name="Name of the slave",
- description="",
- maxlen = 64,
- default = "")
-
-NetRenderJob.StringProperty( attr="name",
- name="Name of the job",
- description="",
- maxlen = 128,
- default = "")
+def addProperties():
+ bpy.types.Scene.PointerProperty(attr="network_render", type=NetRenderSettings, name="Network Render", description="Network Render Settings")
+
+ NetRenderSettings.StringProperty( attr="server_address",
+ name="Server address",
+ description="IP or name of the master render server",
+ maxlen = 128,
+ default = "[default]")
+
+ NetRenderSettings.IntProperty( attr="server_port",
+ name="Server port",
+ description="port of the master render server",
+ default = 8000,
+ min=1,
+ max=65535)
+
+ NetRenderSettings.BoolProperty( attr="use_master_broadcast",
+ name="Broadcast",
+ description="broadcast master server address on local network",
+ default = True)
+
+ NetRenderSettings.BoolProperty( attr="use_slave_clear",
+ name="Clear on exit",
+ description="delete downloaded files on exit",
+ default = True)
+
+ NetRenderSettings.BoolProperty( attr="use_slave_thumb",
+ name="Generate thumbnails",
+ description="Generate thumbnails on slaves instead of master",
+ default = False)
+
+ NetRenderSettings.BoolProperty( attr="use_slave_output_log",
+ name="Output render log on console",
+ description="Output render text log to console as well as sending it to the master",
+ default = True)
+
+ NetRenderSettings.BoolProperty( attr="use_master_clear",
+ name="Clear on exit",
+ description="delete saved files on exit",
+ default = False)
+
+ default_path = os.environ.get("TEMP")
+
+ if not default_path:
+ if os.name == 'nt':
+ default_path = "c:/tmp/"
+ else:
+ default_path = "/tmp/"
+ elif not default_path.endswith(os.sep):
+ default_path += os.sep
+
+ NetRenderSettings.StringProperty( attr="path",
+ name="Path",
+ description="Path for temporary files",
+ maxlen = 128,
+ default = default_path,
+ subtype='FILE_PATH')
+
+ NetRenderSettings.StringProperty( attr="job_name",
+ name="Job name",
+ description="Name of the job",
+ maxlen = 128,
+ default = "[default]")
+
+ NetRenderSettings.StringProperty( attr="job_category",
+ name="Job category",
+ description="Category of the job",
+ maxlen = 128,
+ default = "")
+
+ NetRenderSettings.IntProperty( attr="chunks",
+ name="Chunks",
+ description="Number of frame to dispatch to each slave in one chunk",
+ default = 5,
+ min=1,
+ max=65535)
+
+ NetRenderSettings.IntProperty( attr="priority",
+ name="Priority",
+ description="Priority of the job",
+ default = 1,
+ min=1,
+ max=10)
+
+ NetRenderSettings.StringProperty( attr="job_id",
+ name="Network job id",
+ description="id of the last sent render job",
+ maxlen = 64,
+ default = "")
+
+ NetRenderSettings.IntProperty( attr="active_slave_index",
+ name="Index of the active slave",
+ description="",
+ default = -1,
+ min= -1,
+ max=65535)
+
+ NetRenderSettings.IntProperty( attr="active_blacklisted_slave_index",
+ name="Index of the active slave",
+ description="",
+ default = -1,
+ min= -1,
+ max=65535)
+
+ NetRenderSettings.IntProperty( attr="active_job_index",
+ name="Index of the active job",
+ description="",
+ default = -1,
+ min= -1,
+ max=65535)
+
+ NetRenderSettings.EnumProperty(attr="mode",
+ items=(
+ ("RENDER_CLIENT", "Client", "Act as render client"),
+ ("RENDER_MASTER", "Master", "Act as render master"),
+ ("RENDER_SLAVE", "Slave", "Act as render slave"),
+ ),
+ name="Network mode",
+ description="Mode of operation of this instance",
+ default="RENDER_CLIENT")
+
+ NetRenderSettings.CollectionProperty(attr="slaves", type=NetRenderSlave, name="Slaves", description="")
+ NetRenderSettings.CollectionProperty(attr="slaves_blacklist", type=NetRenderSlave, name="Slaves Blacklist", description="")
+ NetRenderSettings.CollectionProperty(attr="jobs", type=NetRenderJob, name="Job List", description="")
+
+ NetRenderSlave.StringProperty( attr="name",
+ name="Name of the slave",
+ description="",
+ maxlen = 64,
+ default = "")
+
+ NetRenderJob.StringProperty( attr="name",
+ name="Name of the job",
+ description="",
+ maxlen = 128,
+ default = "")
diff --git a/release/scripts/io/netrender/utils.py b/release/scripts/io/netrender/utils.py
index 6288b9747c0..81617ac0d30 100644
--- a/release/scripts/io/netrender/utils.py
+++ b/release/scripts/io/netrender/utils.py
@@ -57,9 +57,10 @@ FRAME_STATUS_TEXT = {
ERROR: "Error"
}
-def rnaType(rna_type):
- if bpy: bpy.types.register(rna_type)
- return rna_type
+def responseStatus(conn):
+ response = conn.getresponse()
+ response.read()
+ return response.status
def reporting(report, message, errorType = None):
if errorType:
@@ -171,20 +172,20 @@ def prefixPath(prefix_directory, file_path, prefix_path, force = False):
# if an absolute path, make sure path exists, if it doesn't, use relative local path
full_path = file_path
if force or not os.path.exists(full_path):
- p, n = os.path.split(full_path)
+ p, n = os.path.split(os.path.normpath(full_path))
if prefix_path and p.startswith(prefix_path):
if len(prefix_path) < len(p):
- directory = prefix_directory + p[len(prefix_path)+1:] + os.sep # +1 to remove separator
+ directory = os.path.join(prefix_directory, p[len(prefix_path)+1:]) # +1 to remove separator
if not os.path.exists(directory):
os.mkdir(directory)
else:
directory = prefix_directory
- full_path = directory + n
+ full_path = os.path.join(directory, n)
else:
- full_path = prefix_directory + n
+ full_path = os.path.join(prefix_directory, n)
else:
- full_path = prefix_directory + file_path
+ full_path = (prefix_directory, file_path)
return full_path
diff --git a/release/scripts/keyingsets/keyingsets_utils.py b/release/scripts/keyingsets/keyingsets_utils.py
index 77b0f3ebacd..a26483e57ce 100644
--- a/release/scripts/keyingsets/keyingsets_utils.py
+++ b/release/scripts/keyingsets/keyingsets_utils.py
@@ -96,14 +96,14 @@ def get_transform_generators_base_info(data):
# Location
def RKS_GEN_location(ksi, context, ks, data):
# get id-block and path info
- id_block, base_path, grouping= get_transform_generators_base_info(data)
+ id_block, base_path, grouping = get_transform_generators_base_info(data)
# add the property name to the base path
path = path_add_property(base_path, "location")
# add Keying Set entry for this...
if grouping:
- ks.paths.add(id_block, path, grouping_method='NAMED', group_name=grouping)
+ ks.paths.add(id_block, path, group_method='NAMED', group_name=grouping)
else:
ks.paths.add(id_block, path)
@@ -123,7 +123,7 @@ def RKS_GEN_rotation(ksi, context, ks, data):
# add Keying Set entry for this...
if grouping:
- ks.paths.add(id_block, path, grouping_method='NAMED', group_name=grouping)
+ ks.paths.add(id_block, path, group_method='NAMED', group_name=grouping)
else:
ks.paths.add(id_block, path)
@@ -137,7 +137,7 @@ def RKS_GEN_scaling(ksi, context, ks, data):
# add Keying Set entry for this...
if grouping:
- ks.paths.add(id_block, path, grouping_method='NAMED', group_name=grouping)
+ ks.paths.add(id_block, path, group_method='NAMED', group_name=grouping)
else:
ks.paths.add(id_block, path)
@@ -147,15 +147,11 @@ def RKS_GEN_scaling(ksi, context, ks, data):
classes = []
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/modules/add_object_utils.py b/release/scripts/modules/add_object_utils.py
index cef368c529d..eaa97512f89 100644
--- a/release/scripts/modules/add_object_utils.py
+++ b/release/scripts/modules/add_object_utils.py
@@ -25,11 +25,11 @@ import mathutils
def add_object_align_init(context, operator):
if operator and operator.properties.is_property_set("location") and operator.properties.is_property_set("rotation"):
- location = mathutils.TranslationMatrix(mathutils.Vector(operator.properties.location))
+ location = mathutils.Matrix.Translation(mathutils.Vector(operator.properties.location))
rotation = mathutils.Euler(operator.properties.rotation).to_matrix().resize4x4()
else:
# TODO, local view cursor!
- location = mathutils.TranslationMatrix(context.scene.cursor_location)
+ location = mathutils.Matrix.Translation(context.scene.cursor_location)
if context.user_preferences.edit.object_align == 'VIEW' and context.space_data.type == 'VIEW_3D':
rotation = context.space_data.region_3d.view_matrix.rotation_part().invert().resize4x4()
@@ -50,12 +50,12 @@ def add_object_data(context, obdata, operator=None):
# ugh, could be made nicer
for ob in scene.objects:
- ob.selected = False
+ ob.select = False
obj_new = bpy.data.objects.new(obdata.name, obdata)
base = scene.objects.link(obj_new)
- base.selected = True
+ base.select = True
if context.space_data and context.space_data.type == 'VIEW_3D':
base.layers_from_view(context.space_data)
@@ -68,7 +68,7 @@ def add_object_data(context, obdata, operator=None):
if obj_act and obj_act.mode == 'EDIT' and obj_act.type == obj_new.type:
bpy.ops.object.mode_set(mode='OBJECT')
- obj_act.selected = True
+ obj_act.select = True
scene.update() # apply location
#scene.objects.active = obj_new
@@ -77,7 +77,7 @@ def add_object_data(context, obdata, operator=None):
bpy.ops.object.mode_set(mode='EDIT')
else:
scene.objects.active = obj_new
- if context.user_preferences.edit.enter_edit_mode:
+ if context.user_preferences.edit.use_enter_edit_mode:
bpy.ops.object.mode_set(mode='EDIT')
return base
diff --git a/release/scripts/modules/bpy/__init__.py b/release/scripts/modules/bpy/__init__.py
index 1e6db441599..5b7d5a76336 100644
--- a/release/scripts/modules/bpy/__init__.py
+++ b/release/scripts/modules/bpy/__init__.py
@@ -26,7 +26,7 @@ data = _bpy.data
context = _bpy.context
# python modules
-from bpy import utils
+from bpy import utils, path
from bpy import ops as _ops_module
@@ -48,7 +48,7 @@ def _main():
import pydoc
pydoc.getpager = lambda: pydoc.plainpager
pydoc.Helper.getline = lambda self, prompt: None
- pydoc.TextDoc.bold = lambda self, text: text
+ pydoc.TextDoc.use_bold = lambda self, text: text
# if "-d" in sys.argv: # Enable this to measure startup speed
diff --git a/release/scripts/modules/bpy/utils.py b/release/scripts/modules/bpy/utils.py
index 5cde7091257..7cfe476c2e7 100644
--- a/release/scripts/modules/bpy/utils.py
+++ b/release/scripts/modules/bpy/utils.py
@@ -19,7 +19,7 @@
# <pep8 compliant>
"""
-This module contains utility functions spesific to blender but
+This module contains utility functions specific to blender but
not assosiated with blenders internal data.
"""
@@ -27,8 +27,8 @@ import bpy as _bpy
import os as _os
import sys as _sys
-from _bpy import home_paths, blend_paths
-
+from _bpy import blend_paths
+from _bpy import script_paths as _bpy_script_paths
def _test_import(module_name, loaded_modules):
import traceback
@@ -59,7 +59,7 @@ def modules_from_path(path, loaded_modules):
:arg path: this path is scanned for scripts and packages.
:type path: string
- :arg loaded_modules: alredy loaded module names, files matching these names will be ignored.
+ :arg loaded_modules: already loaded module names, files matching these names will be ignored.
:type loaded_modules: set
:return: all loaded modules.
:rtype: list
@@ -83,9 +83,9 @@ def modules_from_path(path, loaded_modules):
modules.append(mod)
return modules
-
-_loaded = [] # store loaded modules for reloading.
-_bpy_types = __import__("bpy_types") # keep for comparisons, never ever reload this.
+
+_global_loaded_modules = [] # store loaded module names for reloading.
+import bpy_types as _bpy_types # keep for comparisons, never ever reload this.
def load_scripts(reload_scripts=False, refresh_scripts=False):
@@ -100,12 +100,39 @@ def load_scripts(reload_scripts=False, refresh_scripts=False):
import traceback
import time
+ # must be set back to True on exits
+ _bpy_types._register_immediate = False
+
t_main = time.time()
loaded_modules = set()
if refresh_scripts:
original_modules = _sys.modules.values()
+
+ if reload_scripts:
+ _bpy_types.TypeMap.clear()
+ _bpy_types.PropertiesMap.clear()
+
+ def register_module_call(mod):
+ _bpy_types._register_module(mod.__name__)
+ register = getattr(mod, "register", None)
+ if register:
+ try:
+ register()
+ except:
+ traceback.print_exc()
+ else:
+ print("\nWarning! '%s' has no register function, this is now a requirement for registerable scripts." % mod.__file__)
+
+ def unregister_module_call(mod):
+ _bpy_types._unregister_module(mod.__name__)
+ unregister = getattr(mod, "unregister", None)
+ if unregister:
+ try:
+ unregister()
+ except:
+ traceback.print_exc()
def sys_path_ensure(path):
if path not in _sys.path: # reloading would add twice
@@ -133,48 +160,23 @@ def load_scripts(reload_scripts=False, refresh_scripts=False):
mod = test_reload(mod)
if mod:
- register = getattr(mod, "register", None)
- if register:
- try:
- register()
- except:
- traceback.print_exc()
- else:
- print("\nWarning! '%s' has no register function, this is now a requirement for registerable scripts." % mod.__file__)
- _loaded.append(mod)
+ register_module_call(mod)
+ _global_loaded_modules.append(mod.__name__)
if reload_scripts:
- # TODO, this is broken but should work, needs looking into
- '''
- # reload modules that may not be directly included
- for type_class_name in dir(_bpy.types):
- type_class = getattr(_bpy.types, type_class_name)
- module_name = getattr(type_class, "__module__", "")
-
- if module_name and module_name != "bpy.types": # hard coded for C types
- loaded_modules.add(module_name)
-
- # sorting isnt needed but rather it be pradictable
- for module_name in sorted(loaded_modules):
- print("Reloading:", module_name)
- test_reload(_sys.modules[module_name])
- '''
+ # module names -> modules
+ _global_loaded_modules[:] = [_sys.modules[mod_name] for mod_name in _global_loaded_modules]
# loop over and unload all scripts
- _loaded.reverse()
- for mod in _loaded:
- unregister = getattr(mod, "unregister", None)
- if unregister:
- try:
- unregister()
- except:
- traceback.print_exc()
+ _global_loaded_modules.reverse()
+ for mod in _global_loaded_modules:
+ unregister_module_call(mod)
- for mod in _loaded:
- reload(mod)
+ for mod in _global_loaded_modules:
+ test_reload(mod)
- _loaded[:] = []
+ _global_loaded_modules[:] = []
user_path = user_script_path()
@@ -196,7 +198,7 @@ def load_scripts(reload_scripts=False, refresh_scripts=False):
# load addons
used_ext = {ext.module for ext in _bpy.context.user_preferences.addons}
- paths = script_paths("addons")
+ paths = script_paths("addons") + script_paths("addons_contrib")
for path in paths:
sys_path_ensure(path)
@@ -209,79 +211,11 @@ def load_scripts(reload_scripts=False, refresh_scripts=False):
print("gc.collect() -> %d" % gc.collect())
if _bpy.app.debug:
- print("Time %.4f" % (time.time() - t_main))
-
-
-def expandpath(path):
- """
- Returns the absolute path relative to the current blend file using the "//" prefix.
- """
- if path.startswith("//"):
- return _os.path.join(_os.path.dirname(_bpy.data.filepath), path[2:])
-
- return path
-
-
-def relpath(path, start=None):
- """
- Returns the path relative to the current blend file using the "//" prefix.
+ print("Python Script Load Time %.4f" % (time.time() - t_main))
+
+ _bpy_types._register_immediate = True
- :arg start: Relative to this path, when not set the current filename is used.
- :type start: string
- """
- if not path.startswith("//"):
- if start is None:
- start = _os.path.dirname(_bpy.data.filepath)
- return "//" + _os.path.relpath(path, start)
-
- return path
-
-
-_unclean_chars = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, \
- 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, \
- 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 46, 47, 58, 59, 60, 61, 62, 63, \
- 64, 91, 92, 93, 94, 96, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, \
- 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, \
- 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, \
- 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, \
- 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, \
- 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, \
- 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, \
- 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, \
- 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, \
- 245, 246, 247, 248, 249, 250, 251, 252, 253, 254]
-
-_unclean_chars = ''.join([chr(i) for i in _unclean_chars])
-
-
-def clean_name(name, replace="_"):
- """
- Returns a name with characters replaced that may cause problems under various circumstances, such as writing to a file.
- All characters besides A-Z/a-z, 0-9 are replaced with "_"
- or the replace argument if defined.
- """
- for ch in _unclean_chars:
- name = name.replace(ch, replace)
- return name
-
-
-def display_name(name):
- """
- Creates a display string from name to be used menus and the user interface.
- Capitalize the first letter in all lowercase names, mixed case names are kept as is.
- Intended for use with filenames and module names.
- """
- name_base = _os.path.splitext(name)[0]
-
- # string replacements
- name_base = name_base.replace("_colon_", ":")
- name_base = name_base.replace("_", " ")
-
- if name_base.islower():
- return name_base.capitalize()
- else:
- return name_base
# base scripts
@@ -290,7 +224,7 @@ _scripts = (_os.path.normpath(_scripts), )
def user_script_path():
- path = _bpy.context.user_preferences.filepaths.python_scripts_directory
+ path = _bpy.context.user_preferences.filepaths.script_directory
if path:
path = _os.path.normpath(path)
@@ -309,11 +243,11 @@ def script_paths(subdir=None, user=True):
# add user scripts dir
if user:
- user_script_path = _bpy.context.user_preferences.filepaths.python_scripts_directory
+ user_script_path = _bpy.context.user_preferences.filepaths.script_directory
else:
user_script_path = None
- for path in home_paths("scripts") + (user_script_path, ):
+ for path in _bpy_script_paths() + (user_script_path, ):
if path:
path = _os.path.normpath(path)
if path not in scripts and _os.path.isdir(path):
@@ -336,7 +270,7 @@ _presets = _os.path.join(_scripts[0], "presets") # FIXME - multiple paths
def preset_paths(subdir):
'''
- Returns a list of paths for a spesific preset.
+ Returns a list of paths for a specific preset.
'''
return (_os.path.join(_presets, subdir), )
diff --git a/release/scripts/modules/bpy_types.py b/release/scripts/modules/bpy_types.py
index 9d6f5ce7b2f..5030e9f4868 100644
--- a/release/scripts/modules/bpy_types.py
+++ b/release/scripts/modules/bpy_types.py
@@ -19,6 +19,7 @@
# <pep8 compliant>
from _bpy import types as bpy_types
+import _bpy
from mathutils import Vector
StructRNA = bpy_types.Struct.__bases__[0]
@@ -51,7 +52,7 @@ class Library(bpy_types.ID):
# See: readblenentry.c, IDTYPE_FLAGS_ISLINKABLE, we could make this an attribute in rna.
attr_links = "actions", "armatures", "brushes", "cameras", \
- "curves", "gpencil", "groups", "images", \
+ "curves", "grease_pencil", "groups", "images", \
"lamps", "lattices", "materials", "metaballs", \
"meshes", "node_groups", "objects", "scenes", \
"sounds", "textures", "texts", "fonts", "worlds"
@@ -308,11 +309,11 @@ class Mesh(bpy_types.ID):
self.add_geometry(len(verts), len(edges), len(faces))
verts_flat = [f for v in verts for f in v]
- self.verts.foreach_set("co", verts_flat)
+ self.vertices.foreach_set("co", verts_flat)
del verts_flat
edges_flat = [i for e in edges for i in e]
- self.edges.foreach_set("verts", edges_flat)
+ self.edges.foreach_set("vertices", edges_flat)
del edges_flat
def treat_face(f):
@@ -323,7 +324,7 @@ class Mesh(bpy_types.ID):
return f
faces_flat = [v for f in faces for v in treat_face(f)]
- self.faces.foreach_set("verts_raw", faces_flat)
+ self.faces.foreach_set("vertices_raw", faces_flat)
del faces_flat
@property
@@ -371,7 +372,7 @@ class Mesh(bpy_types.ID):
for f in faces:
# if len(f) == 4:
- if f.verts_raw[3] != 0:
+ if f.vertices_raw[3] != 0:
edge_keys = f.edge_keys
for i, edkey in enumerate(f.edge_keys):
edges.setdefault(edkey, []).append(edge_keys[OTHER_INDEX[i]])
@@ -444,11 +445,11 @@ class Mesh(bpy_types.ID):
if not hasattr(edges, "pop"):
edges = edges[:]
- edge_dict = {ed.key: ed for ed in self.edges if ed.selected}
+ edge_dict = {ed.key: ed for ed in self.edges if ed.select}
while edges:
current_edge = edges.pop()
- vert_end, vert_start = current_edge.verts[:]
+ vert_end, vert_start = current_edge.vertices[:]
line_poly = [vert_start, vert_end]
ok = True
@@ -459,7 +460,7 @@ class Mesh(bpy_types.ID):
while i:
i -= 1
ed = edges[i]
- v1, v2 = ed.verts
+ v1, v2 = ed.vertices
if v1 == vert_end:
line_poly.append(v2)
vert_end = line_poly[-1]
@@ -494,7 +495,7 @@ class MeshEdge(StructRNA):
@property
def key(self):
- return ord_ind(*tuple(self.verts))
+ return ord_ind(*tuple(self.vertices))
class MeshFace(StructRNA):
@@ -503,8 +504,8 @@ class MeshFace(StructRNA):
@property
def center(self):
"""The midpoint of the face."""
- face_verts = self.verts[:]
- mesh_verts = self.id_data.verts
+ face_verts = self.vertices[:]
+ mesh_verts = self.id_data.vertices
if len(face_verts) == 3:
return (mesh_verts[face_verts[0]].co + mesh_verts[face_verts[1]].co + mesh_verts[face_verts[2]].co) / 3.0
else:
@@ -512,7 +513,7 @@ class MeshFace(StructRNA):
@property
def edge_keys(self):
- verts = self.verts[:]
+ verts = self.vertices[:]
if len(verts) == 3:
return ord_ind(verts[0], verts[1]), ord_ind(verts[1], verts[2]), ord_ind(verts[2], verts[0])
@@ -524,7 +525,7 @@ class Text(bpy_types.ID):
def as_string(self):
"""Return the text as a string."""
- return "\n".join(line.line for line in self.lines)
+ return "\n".join(line.body for line in self.lines)
def from_string(self, string):
"""Replace text with this string."""
@@ -539,8 +540,83 @@ class Text(bpy_types.ID):
import collections
+TypeMap = {}
+# Properties (IDPropertyGroup) are different from types because they need to be registered
+# before adding sub properties to them, so they are registered on definition
+# and unregistered on unload
+PropertiesMap = {}
-class OrderedMeta(type):
+# Using our own loading function we set this to false
+# so when running a script directly in the text editor
+# registers moduals instantly.
+_register_immediate = True
+
+def _unregister_module(module, free=True):
+ for t in TypeMap.get(module, ()):
+ try:
+ bpy_types.unregister(t)
+ except:
+ import traceback
+ print("bpy.utils._unregister_module(): Module '%s' failed to unregister class '%s.%s'" % (module, t.__module__, t.__name__))
+ traceback.print_exc()
+
+ if free == True and module in TypeMap:
+ del TypeMap[module]
+
+
+ for t in PropertiesMap.get(module, ()):
+ try:
+ bpy_types.unregister(t)
+ except:
+ import traceback
+ print("bpy.utils._unload_module(): Module '%s' failed to unregister class '%s.%s'" % (module, t.__module__, t.__name__))
+ traceback.print_exc()
+
+ if free == True and module in PropertiesMap:
+ del PropertiesMap[module]
+
+
+def _register_module(module):
+ for t in TypeMap.get(module, ()):
+ try:
+ bpy_types.register(t)
+ except:
+ import traceback
+ print("bpy.utils._register_module(): Module '%s' failed to register class '%s.%s'" % (module, t.__module__, t.__name__))
+ traceback.print_exc()
+
+
+class RNAMeta(type):
+ @classmethod
+ def _register_immediate(cls):
+ return _register_immediate
+
+ def __new__(cls, name, bases, classdict, **args):
+ result = type.__new__(cls, name, bases, classdict)
+ if bases and bases[0] != StructRNA:
+ module = result.__module__
+
+ ClassMap = TypeMap
+
+ # Register right away if needed
+ if cls._register_immediate():
+ bpy_types.register(result)
+ ClassMap = PropertiesMap
+
+ # first part of packages only
+ if "." in module:
+ module = module[:module.index(".")]
+
+ ClassMap.setdefault(module, []).append(result)
+
+ return result
+
+class RNAMetaRegister(RNAMeta):
+ @classmethod
+ def _register_immediate(cls):
+ return True
+
+class OrderedMeta(RNAMeta):
def __init__(cls, name, bases, attributes):
super(OrderedMeta, cls).__init__(name, bases, attributes)
@@ -549,7 +625,6 @@ class OrderedMeta(type):
def __prepare__(name, bases, **kwargs):
return collections.OrderedDict()
-
# Only defined so operators members can be used by accessing self.order
class Operator(StructRNA, metaclass=OrderedMeta):
__slots__ = ()
@@ -564,7 +639,12 @@ class Macro(StructRNA, metaclass=OrderedMeta):
def define(self, opname):
from _bpy import ops
return ops.macro_define(self, opname)
+
+class IDPropertyGroup(StructRNA, metaclass=RNAMetaRegister):
+ __slots__ = ()
+class RenderEngine(StructRNA, metaclass=RNAMeta):
+ __slots__ = ()
class _GenericUI:
__slots__ = ()
@@ -606,15 +686,15 @@ class _GenericUI:
pass
-class Panel(StructRNA, _GenericUI):
+class Panel(StructRNA, _GenericUI, metaclass=RNAMeta):
__slots__ = ()
-class Header(StructRNA, _GenericUI):
+class Header(StructRNA, _GenericUI, metaclass=RNAMeta):
__slots__ = ()
-class Menu(StructRNA, _GenericUI):
+class Menu(StructRNA, _GenericUI, metaclass=RNAMeta):
__slots__ = ()
def path_menu(self, searchpaths, operator, props_default={}):
@@ -638,7 +718,7 @@ class Menu(StructRNA, _GenericUI):
if f.startswith("."):
continue
- preset_name = bpy.utils.display_name(f)
+ preset_name = bpy.path.display_name(f)
props = layout.operator(operator, text=preset_name)
for attr, value in props_default.items():
diff --git a/release/scripts/modules/graphviz_export.py b/release/scripts/modules/graphviz_export.py
index 900d69670d5..2389e1f9020 100644
--- a/release/scripts/modules/graphviz_export.py
+++ b/release/scripts/modules/graphviz_export.py
@@ -66,7 +66,7 @@ def graph_armature(obj, filepath, FAKE_PARENT=True, CONSTRAINTS=True, DRIVERS=Tr
print("")
for bone in bones:
b = arm.bones[bone]
- print(">>", bone, ["*>", "->"][b.connected], getattr(getattr(b, "parent", ""), "name", ""))
+ print(">>", bone, ["*>", "->"][b.use_connect], getattr(getattr(b, "parent", ""), "name", ""))
label = [bone]
bone = arm.bones[bone]
@@ -103,7 +103,7 @@ def graph_armature(obj, filepath, FAKE_PARENT=True, CONSTRAINTS=True, DRIVERS=Tr
parent = bone.parent
if parent:
parent_name = parent.name
- connected = bone.connected
+ connected = bone.use_connect
elif FAKE_PARENT:
parent_name = 'Object::%s' % obj.name
connected = False
diff --git a/release/scripts/modules/rigify/__init__.py b/release/scripts/modules/rigify/__init__.py
index ef8f62ad058..98d9bb235a2 100644
--- a/release/scripts/modules/rigify/__init__.py
+++ b/release/scripts/modules/rigify/__init__.py
@@ -159,8 +159,8 @@ def generate_rig(context, obj_orig, prefix="ORG-", META_DEF=True):
# Not needed but catches any errors before duplicating
validate_rig(context, obj_orig)
- global_undo = context.user_preferences.edit.global_undo
- context.user_preferences.edit.global_undo = False
+ use_global_undo = context.user_preferences.edit.use_global_undo
+ context.user_preferences.edit.use_global_undo = False
mode_orig = context.mode
rest_backup = obj_orig.data.pose_position
obj_orig.data.pose_position = 'REST'
@@ -191,8 +191,8 @@ def generate_rig(context, obj_orig, prefix="ORG-", META_DEF=True):
obj.animation_data_clear()
# Select generated rig object
- obj_orig.selected = False
- obj.selected = True
+ obj_orig.select = False
+ obj.select = True
scene.objects.active = obj
# Remove all bones from the generated rig armature.
@@ -212,9 +212,9 @@ def generate_rig(context, obj_orig, prefix="ORG-", META_DEF=True):
# Select the temp rigs for merging
for objt in scene.objects:
- objt.selected = False # deselect all objects
- temp_rig_1.selected = True
- temp_rig_2.selected = True
+ objt.select = False # deselect all objects
+ temp_rig_1.select = True
+ temp_rig_2.select = True
scene.objects.active = temp_rig_2
# Merge the temporary rigs
@@ -225,8 +225,8 @@ def generate_rig(context, obj_orig, prefix="ORG-", META_DEF=True):
# Select the generated rig
for objt in scene.objects:
- objt.selected = False # deselect all objects
- obj.selected = True
+ objt.select = False # deselect all objects
+ obj.select = True
scene.objects.active = obj
# Copy over the pose_bone properties
@@ -282,7 +282,7 @@ def generate_rig(context, obj_orig, prefix="ORG-", META_DEF=True):
edit_bone.head = (0.0, 0.0, 0.0)
edit_bone.tail = (0.0, 1.0, 0.0)
edit_bone.roll = 0.0
- edit_bone.layer = ROOT_LAYERS
+ edit_bone.layers = ROOT_LAYERS
bpy.ops.object.mode_set(mode='OBJECT')
# key: bone name
@@ -412,7 +412,7 @@ def generate_rig(context, obj_orig, prefix="ORG-", META_DEF=True):
else:
root_ebone_tmp = root_ebone
- ebone.connected = False
+ ebone.use_connect = False
ebone.parent = root_ebone_tmp
'''
@@ -429,7 +429,7 @@ def generate_rig(context, obj_orig, prefix="ORG-", META_DEF=True):
con.target = obj
con.subtarget = bone_name
- if not pbone.bone.connected:
+ if not pbone.bone.use_connect:
con = pbone.constraints.new('COPY_LOCATION')
con.target = obj
con.subtarget = bone_name
@@ -445,33 +445,33 @@ def generate_rig(context, obj_orig, prefix="ORG-", META_DEF=True):
layer_second_last[30] = True
for bone_name, bone in arm.bones.items():
- bone.deform = False # Non DEF bones shouldn't deform
+ bone.use_deform = False # Non DEF bones shouldn't deform
if bone_name.startswith(ORG_PREFIX):
- bone.layer = ORG_LAYERS
+ bone.layers = ORG_LAYERS
elif bone_name.startswith(MCH_PREFIX): # XXX fixme
- bone.layer = MCH_LAYERS
+ bone.layers = MCH_LAYERS
elif bone_name.startswith(DEF_PREFIX): # XXX fixme
- bone.layer = DEF_LAYERS
- bone.deform = True
+ bone.layers = DEF_LAYERS
+ bone.use_deform = True
else:
# Assign bone appearance if there is a widget for it
obj.pose.bones[bone_name].custom_shape = context.scene.objects.get(WGT_PREFIX + bone_name)
- layer_tot[:] = [max(lay) for lay in zip(layer_tot, bone.layer)]
+ layer_tot[:] = [max(lay) for lay in zip(layer_tot, bone.layers)]
# Only for demo'ing
layer_show = [a and not (b or c or d) for a, b, c, d in zip(layer_tot, ORG_LAYERS, MCH_LAYERS, DEF_LAYERS)]
- arm.layer = layer_show
+ arm.layers = layer_show
- # obj.restrict_view = True
- obj.data.draw_axes = False
+ # obj.hide = True
+ obj.data.show_axes = False
bpy.ops.object.mode_set(mode=mode_orig)
obj_orig.data.pose_position = rest_backup
obj.data.pose_position = 'POSE'
obj_orig.data.pose_position = 'POSE'
- context.user_preferences.edit.global_undo = global_undo
+ context.user_preferences.edit.use_global_undo = use_global_undo
print("Done.\n")
@@ -490,8 +490,8 @@ def generate_test(context, metarig_type="", GENERATE_FINAL=True):
scene.objects.link(obj_new)
scene.objects.active = obj_new
for obj in scene.objects:
- obj.selected = False
- obj_new.selected = True
+ obj.select = False
+ obj_new.select = True
for module_name in get_submodule_types():
if (metarig_type and module_name != metarig_type):
@@ -537,7 +537,7 @@ def generate_test_all(context, GRAPH=False):
base_name = os.path.splitext(bpy.data.filepath)[0]
for obj, obj_new in new_objects:
for obj in (obj, obj_new):
- fn = base_name + "-" + bpy.utils.clean_name(obj.name)
+ fn = base_name + "-" + bpy.path.clean_name(obj.name)
path_dot = fn + ".dot"
path_png = fn + ".png"
@@ -548,11 +548,11 @@ def generate_test_all(context, GRAPH=False):
i = 0
for obj, obj_new in new_objects:
- obj.data.drawtype = 'STICK'
+ obj.data.draw_type = 'STICK'
obj.location[1] += i
obj_new.location[1] += i
- obj_new.selected = False
- obj.selected = True
+ obj_new.select = False
+ obj.select = True
i += 4
diff --git a/release/scripts/modules/rigify/arm_biped.py b/release/scripts/modules/rigify/arm_biped.py
index 7a99eb5d80a..ac878c3c076 100644
--- a/release/scripts/modules/rigify/arm_biped.py
+++ b/release/scripts/modules/rigify/arm_biped.py
@@ -37,24 +37,24 @@ def metarig_template():
bone.head[:] = 0.0000, -0.0425, 0.0000
bone.tail[:] = 0.0942, -0.0075, 0.0333
bone.roll = -0.2227
- bone.connected = False
+ bone.use_connect = False
bone = arm.edit_bones.new('upper_arm')
bone.head[:] = 0.1066, -0.0076, -0.0010
bone.tail[:] = 0.2855, 0.0206, -0.0104
bone.roll = 1.6152
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['shoulder']
bone = arm.edit_bones.new('forearm')
bone.head[:] = 0.2855, 0.0206, -0.0104
bone.tail[:] = 0.4550, -0.0076, -0.0023
bone.roll = 1.5153
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['upper_arm']
bone = arm.edit_bones.new('hand')
bone.head[:] = 0.4550, -0.0076, -0.0023
bone.tail[:] = 0.5423, -0.0146, -0.0131
bone.roll = -3.0083
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['forearm']
bpy.ops.object.mode_set(mode='OBJECT')
@@ -78,7 +78,7 @@ def metarig_definition(obj, orig_bone_name):
hands = []
for pbone in obj.pose.bones:
index = pbone.parent_index(mt.arm_p)
- if index == 2 and pbone.bone.connected and pbone.bone.parent.connected:
+ if index == 2 and pbone.bone.use_connect and pbone.bone.parent.use_connect:
hands.append(pbone)
if len(hands) != 1:
@@ -106,12 +106,12 @@ def ik(obj, definitions, base_names, options):
ik_chain = mt.copy(to_fmt="MCH-%s_ik", base_names=base_names, exclude_attrs=["shoulder"])
# IK needs no parent_index
- ik_chain.hand_e.connected = False
+ ik_chain.hand_e.use_connect = False
ik_chain.hand_e.parent = None
- ik_chain.hand_e.local_location = False
+ ik_chain.hand_e.use_local_location = False
ik_chain.rename("hand", get_base_name(base_names[mt.hand]) + "_ik" + get_side_name(mt.hand))
- ik_chain.arm_e.connected = False
+ ik_chain.arm_e.use_connect = False
ik_chain.arm_e.parent = mt.shoulder_e
# Add the bone used for the arms poll target
@@ -119,7 +119,7 @@ def ik(obj, definitions, base_names, options):
ik.pole = add_pole_target_bone(obj, mt.forearm, "elbow_target" + get_side_name(mt.forearm), mode='ZAVERAGE')
ik.update()
- ik.pole_e.local_location = False
+ ik.pole_e.use_local_location = False
# option: elbow_parent
elbow_parent_name = options.get("elbow_parent", "")
@@ -137,8 +137,8 @@ def ik(obj, definitions, base_names, options):
ik.pole_vis = add_stretch_to(obj, mt.forearm, ik.pole, "VIS-%s_ik" % base_names[mt.forearm])
ik.update()
- ik.hand_vis_e.restrict_select = True
- ik.pole_vis_e.restrict_select = True
+ ik.hand_vis_e.hide_select = True
+ ik.pole_vis_e.hide_select = True
bpy.ops.object.mode_set(mode='OBJECT')
@@ -147,9 +147,9 @@ def ik(obj, definitions, base_names, options):
ik_chain.update()
# Set IK dof
- ik_chain.forearm_p.ik_dof_x = True
- ik_chain.forearm_p.ik_dof_y = False
- ik_chain.forearm_p.ik_dof_z = False
+ ik_chain.forearm_p.lock_ik_x = False
+ ik_chain.forearm_p.lock_ik_y = True
+ ik_chain.forearm_p.lock_ik_z = True
con = ik_chain.forearm_p.constraints.new('IK')
con.target = obj
@@ -161,18 +161,18 @@ def ik(obj, definitions, base_names, options):
con.use_stretch = True
con.use_target = True
con.use_rotation = False
- con.chain_length = 2
+ con.chain_count = 2
con.pole_angle = -pi/2
# last step setup layers
if "ik_layer" in options:
layer = [n==options["ik_layer"] for n in range(0,32)]
else:
- layer = list(mt.arm_b.layer)
- ik_chain.hand_b.layer = layer
- ik.hand_vis_b.layer = layer
- ik.pole_b.layer = layer
- ik.pole_vis_b.layer = layer
+ layer = list(mt.arm_b.layers)
+ ik_chain.hand_b.layers = layer
+ ik.hand_vis_b.layers = layer
+ ik.pole_b.layers = layer
+ ik.pole_vis_b.layers = layer
bpy.ops.object.mode_set(mode='EDIT')
# don't blend the shoulder
@@ -197,7 +197,7 @@ def fk(obj, definitions, base_names, options):
# upper arm constrains to this.
ex.socket_e = copy_bone_simple(arm, mt.arm, "MCH-%s_socket" % base_names[mt.arm])
ex.socket = ex.socket_e.name
- ex.socket_e.connected = False
+ ex.socket_e.use_connect = False
ex.socket_e.parent = mt.shoulder_e
ex.socket_e.length *= 0.5
@@ -206,11 +206,11 @@ def fk(obj, definitions, base_names, options):
ex.hand_delta_e = copy_bone_simple(arm, fk_chain.hand, "MCH-delta_%s" % base_names[mt.hand], parent=True)
ex.hand_delta = ex.hand_delta_e.name
ex.hand_delta_e.length *= 0.5
- ex.hand_delta_e.connected = False
+ ex.hand_delta_e.use_connect = False
if "hand_roll" in options:
ex.hand_delta_e.roll += radians(options["hand_roll"])
- fk_chain.hand_e.connected = False
+ fk_chain.hand_e.use_connect = False
fk_chain.hand_e.parent = ex.hand_delta_e
bpy.ops.object.mode_set(mode='OBJECT')
@@ -273,10 +273,10 @@ def fk(obj, definitions, base_names, options):
if "fk_layer" in options:
layer = [n==options["fk_layer"] for n in range(0,32)]
else:
- layer = list(mt.arm_b.layer)
- fk_chain.arm_b.layer = layer
- fk_chain.forearm_b.layer = layer
- fk_chain.hand_b.layer = layer
+ layer = list(mt.arm_b.layers)
+ fk_chain.arm_b.layers = layer
+ fk_chain.forearm_b.layers = layer
+ fk_chain.hand_b.layers = layer
# Forearm was getting wrong roll somehow. Hack to fix that.
bpy.ops.object.mode_set(mode='EDIT')
@@ -295,8 +295,8 @@ def deform(obj, definitions, base_names, options):
# Create upper arm bones: two bones, each half of the upper arm.
uarm1 = copy_bone_simple(obj.data, definitions[1], "DEF-%s.01" % base_names[definitions[1]], parent=True)
uarm2 = copy_bone_simple(obj.data, definitions[1], "DEF-%s.02" % base_names[definitions[1]], parent=True)
- uarm1.connected = False
- uarm2.connected = False
+ uarm1.use_connect = False
+ uarm2.use_connect = False
uarm2.parent = uarm1
center = uarm1.center
uarm1.tail = center
@@ -305,8 +305,8 @@ def deform(obj, definitions, base_names, options):
# Create forearm bones: two bones, each half of the forearm.
farm1 = copy_bone_simple(obj.data, definitions[2], "DEF-%s.01" % base_names[definitions[2]], parent=True)
farm2 = copy_bone_simple(obj.data, definitions[2], "DEF-%s.02" % base_names[definitions[2]], parent=True)
- farm1.connected = False
- farm2.connected = False
+ farm1.use_connect = False
+ farm2.use_connect = False
farm2.parent = farm1
center = farm1.center
farm1.tail = center
@@ -314,7 +314,7 @@ def deform(obj, definitions, base_names, options):
# Create twist bone
twist = copy_bone_simple(obj.data, definitions[2], "MCH-arm_twist")
- twist.connected = False
+ twist.use_connect = False
twist.parent = obj.data.edit_bones[definitions[3]]
twist.length /= 2
diff --git a/release/scripts/modules/rigify/copy.py b/release/scripts/modules/rigify/copy.py
index e0bff555a9b..c051e5bb7f6 100644
--- a/release/scripts/modules/rigify/copy.py
+++ b/release/scripts/modules/rigify/copy.py
@@ -33,7 +33,7 @@ def metarig_template():
bone.head[:] = 0.0000, 0.0000, 0.0000
bone.tail[:] = 0.0000, 0.0000, 1.0000
bone.roll = 0.0000
- bone.connected = False
+ bone.use_connect = False
bpy.ops.object.mode_set(mode='OBJECT')
pbone = obj.pose.bones['Bone']
@@ -98,7 +98,7 @@ def control(obj, definitions, base_names, options):
cp.cpy_p.lock_scale = tuple(mt.cpy_p.lock_scale)
# Layers
- cp.cpy_b.layer = list(mt.cpy_b.layer)
+ cp.cpy_b.layers = list(mt.cpy_b.layers)
return (mt.cpy,)
diff --git a/release/scripts/modules/rigify/delta.py b/release/scripts/modules/rigify/delta.py
index dce03b5f412..d0b4fbccce9 100644
--- a/release/scripts/modules/rigify/delta.py
+++ b/release/scripts/modules/rigify/delta.py
@@ -34,18 +34,18 @@ def metarig_template():
bone.head[:] = 0.0000, 0.0000, 0.0000
bone.tail[:] = -0.0000, 0.7382, 0.1895
bone.roll = -0.0000
- bone.connected = False
+ bone.use_connect = False
bone = arm.edit_bones.new('delta')
bone.head[:] = -0.0497, 0.8414, 0.3530
bone.tail[:] = -0.2511, 1.1588, 0.9653
bone.roll = 2.6044
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['bonesker']
bone = arm.edit_bones.new('boney')
bone.head[:] = 0.7940, 2.5592, 0.4134
bone.tail[:] = 0.7940, 3.3975, 0.4890
bone.roll = 3.1416
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['delta']
bpy.ops.object.mode_set(mode='OBJECT')
@@ -67,7 +67,7 @@ def metarig_definition(obj, orig_bone_name):
if len(children) != 1:
raise RigifyError("only 1 child supported for delta on bone '%s'" % delta.name)
- if delta.connected:
+ if delta.use_connect:
raise RigifyError("bone cannot be connected to its parent '%s'" % delta.name)
bone_definition = [delta.name, children[0].name]
diff --git a/release/scripts/modules/rigify/eye_balls.py b/release/scripts/modules/rigify/eye_balls.py
index 48f0448dfb3..f65d56b9f2b 100644
--- a/release/scripts/modules/rigify/eye_balls.py
+++ b/release/scripts/modules/rigify/eye_balls.py
@@ -134,7 +134,7 @@ def metarig_template():
bone.head[:] = 0.0000, 0.0000, 0.0000
bone.tail[:] = 0.0000, 0.0000, 1.0000
bone.roll = 0.0000
- bone.connected = False
+ bone.use_connect = False
bpy.ops.object.mode_set(mode='OBJECT')
pbone = obj.pose.bones['Bone']
@@ -328,8 +328,8 @@ def control(obj, definitions, base_names, options):
con.transform_channel = 'SCALE_X'
con.frame_start = -20
con.frame_end = 20
- con.minimum = 0.0
- con.maximum = 2.0
+ con.min = 0.0
+ con.max = 2.0
con.target_space = 'LOCAL'
@@ -379,15 +379,15 @@ def control(obj, definitions, base_names, options):
# Set layers
- #layer = list(bb[definitions[2]].layer)
- #bb[lid1].layer = layer
- #bb[lid2].layer = layer
- #bb[lid3].layer = layer
- #bb[lid4].layer = layer
- #bb[lid5].layer = layer
- #bb[lid6].layer = layer
- #bb[lid7].layer = layer
- #bb[lid8].layer = layer
+ #layer = list(bb[definitions[2]].layers)
+ #bb[lid1].layers = layer
+ #bb[lid2].layers = layer
+ #bb[lid3].layers = layer
+ #bb[lid4].layers = layer
+ #bb[lid5].layers = layer
+ #bb[lid6].layers = layer
+ #bb[lid7].layers = layer
+ #bb[lid8].layers = layer
return (None,)
diff --git a/release/scripts/modules/rigify/eye_lid.py b/release/scripts/modules/rigify/eye_lid.py
index bb9749011c2..3f336e268c6 100644
--- a/release/scripts/modules/rigify/eye_lid.py
+++ b/release/scripts/modules/rigify/eye_lid.py
@@ -56,7 +56,7 @@ def metarig_template():
bone.head[:] = 0.0000, 0.0000, 0.0000
bone.tail[:] = 0.0000, 0.0000, 1.0000
bone.roll = 0.0000
- bone.connected = False
+ bone.use_connect = False
bpy.ops.object.mode_set(mode='OBJECT')
pbone = obj.pose.bones['Bone']
@@ -148,10 +148,10 @@ def deform(obj, definitions, base_names, options):
eb[dlid3].parent = eb[dlid4]
eb[dlid33].parent = eb[dlid3]
- eb[dlid2].connected = True
- eb[dlid22].connected = True
- eb[dlid3].connected = True
- eb[dlid33].connected = True
+ eb[dlid2].use_connect = True
+ eb[dlid22].use_connect = True
+ eb[dlid3].use_connect = True
+ eb[dlid33].use_connect = True
eb[dlid1].bbone_segments = 8
eb[dlid2].bbone_segments = 8
@@ -170,10 +170,10 @@ def deform(obj, definitions, base_names, options):
eb[dlid7].parent = eb[dlid8]
eb[dlid77].parent = eb[dlid7]
- eb[dlid6].connected = True
- eb[dlid66].connected = True
- eb[dlid7].connected = True
- eb[dlid77].connected = True
+ eb[dlid6].use_connect = True
+ eb[dlid66].use_connect = True
+ eb[dlid7].use_connect = True
+ eb[dlid77].use_connect = True
eb[dlid5].bbone_segments = 8
eb[dlid6].bbone_segments = 8
@@ -436,8 +436,8 @@ def control(obj, definitions, base_names, options):
con.transform_channel = 'LOCATION_Y'
con.frame_start = -30
con.frame_end = 30
- con.minimum = -distance*2
- con.maximum = distance
+ con.min = -distance*2
+ con.max = distance
con.target_space = 'LOCAL'
fcurve = con.driver_add("influence")
driver = fcurve.driver
@@ -455,8 +455,8 @@ def control(obj, definitions, base_names, options):
con.transform_channel = 'LOCATION_Y'
con.frame_start = -30
con.frame_end = 30
- con.minimum = -distance*2
- con.maximum = distance
+ con.min = -distance*2
+ con.max = distance
con.target_space = 'LOCAL'
fcurve = con.driver_add("influence")
driver = fcurve.driver
@@ -473,8 +473,8 @@ def control(obj, definitions, base_names, options):
con.transform_channel = 'LOCATION_Y'
con.frame_start = -30
con.frame_end = 30
- con.minimum = -distance*2
- con.maximum = distance
+ con.min = -distance*2
+ con.max = distance
con.target_space = 'LOCAL'
fcurve = con.driver_add("influence")
driver = fcurve.driver
@@ -491,8 +491,8 @@ def control(obj, definitions, base_names, options):
con.transform_channel = 'LOCATION_Y'
con.frame_start = -30
con.frame_end = 30
- con.minimum = -distance*2
- con.maximum = distance
+ con.min = -distance*2
+ con.max = distance
con.target_space = 'LOCAL'
fcurve = con.driver_add("influence")
driver = fcurve.driver
@@ -509,8 +509,8 @@ def control(obj, definitions, base_names, options):
con.transform_channel = 'LOCATION_Y'
con.frame_start = -30
con.frame_end = 30
- con.minimum = -distance*2
- con.maximum = distance
+ con.min = -distance*2
+ con.max = distance
con.target_space = 'LOCAL'
fcurve = con.driver_add("influence")
driver = fcurve.driver
@@ -528,8 +528,8 @@ def control(obj, definitions, base_names, options):
con.transform_channel = 'LOCATION_Y'
con.frame_start = -30
con.frame_end = 30
- con.minimum = -distance
- con.maximum = distance*2
+ con.min = -distance
+ con.max = distance*2
con.target_space = 'LOCAL'
fcurve = con.driver_add("influence")
driver = fcurve.driver
@@ -546,8 +546,8 @@ def control(obj, definitions, base_names, options):
con.transform_channel = 'LOCATION_Y'
con.frame_start = -30
con.frame_end = 30
- con.minimum = -distance
- con.maximum = distance*2
+ con.min = -distance
+ con.max = distance*2
con.target_space = 'LOCAL'
fcurve = con.driver_add("influence")
driver = fcurve.driver
@@ -564,8 +564,8 @@ def control(obj, definitions, base_names, options):
con.transform_channel = 'LOCATION_Y'
con.frame_start = -30
con.frame_end = 30
- con.minimum = -distance
- con.maximum = distance*2
+ con.min = -distance
+ con.max = distance*2
con.target_space = 'LOCAL'
fcurve = con.driver_add("influence")
driver = fcurve.driver
@@ -582,8 +582,8 @@ def control(obj, definitions, base_names, options):
con.transform_channel = 'LOCATION_Y'
con.frame_start = -30
con.frame_end = 30
- con.minimum = -distance
- con.maximum = distance*2
+ con.min = -distance
+ con.max = distance*2
con.target_space = 'LOCAL'
fcurve = con.driver_add("influence")
driver = fcurve.driver
@@ -600,8 +600,8 @@ def control(obj, definitions, base_names, options):
con.transform_channel = 'LOCATION_Y'
con.frame_start = -30
con.frame_end = 30
- con.minimum = -distance
- con.maximum = distance*2
+ con.min = -distance
+ con.max = distance*2
con.target_space = 'LOCAL'
fcurve = con.driver_add("influence")
driver = fcurve.driver
@@ -615,15 +615,15 @@ def control(obj, definitions, base_names, options):
# Set layers
- layer = list(bb[definitions[2]].layer)
- bb[lid1].layer = layer
- bb[lid2].layer = layer
- bb[lid3].layer = layer
- bb[lid4].layer = layer
- bb[lid5].layer = layer
- bb[lid6].layer = layer
- bb[lid7].layer = layer
- bb[lid8].layer = layer
+ layer = list(bb[definitions[2]].layers)
+ bb[lid1].layers = layer
+ bb[lid2].layers = layer
+ bb[lid3].layers = layer
+ bb[lid4].layers = layer
+ bb[lid5].layers = layer
+ bb[lid6].layers = layer
+ bb[lid7].layers = layer
+ bb[lid8].layers = layer
return (None,)
@@ -648,7 +648,7 @@ def make_lid_stretch_bone(obj, name, bone1, bone2, roll_alpha):
# Create the bone, pointing from bone1 to bone2
bone_e = copy_bone_simple(obj.data, bone1, name, parent=True)
- bone_e.connected = False
+ bone_e.use_connect = False
bone_e.tail = eb[bone2].head
bone = bone_e.name
diff --git a/release/scripts/modules/rigify/finger_curl.py b/release/scripts/modules/rigify/finger_curl.py
index 63f1816012b..947ec75c9f8 100644
--- a/release/scripts/modules/rigify/finger_curl.py
+++ b/release/scripts/modules/rigify/finger_curl.py
@@ -35,18 +35,18 @@ def metarig_template():
bone.head[:] = 0.0000, 0.0000, 0.0000
bone.tail[:] = 0.0353, -0.0184, -0.0053
bone.roll = -2.8722
- bone.connected = False
+ bone.use_connect = False
bone = arm.edit_bones.new('finger.02')
bone.head[:] = 0.0353, -0.0184, -0.0053
bone.tail[:] = 0.0702, -0.0364, -0.0146
bone.roll = -2.7099
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['finger.01']
bone = arm.edit_bones.new('finger.03')
bone.head[:] = 0.0702, -0.0364, -0.0146
bone.tail[:] = 0.0903, -0.0461, -0.0298
bone.roll = -2.1709
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['finger.02']
bpy.ops.object.mode_set(mode='OBJECT')
@@ -84,8 +84,8 @@ def deform(obj, definitions, base_names, options):
# Create base digit bones: two bones, each half of the base digit.
f1a = copy_bone_simple(obj.data, definitions[0], "DEF-%s.01" % base_names[definitions[0]], parent=True)
f1b = copy_bone_simple(obj.data, definitions[0], "DEF-%s.02" % base_names[definitions[0]], parent=True)
- f1a.connected = False
- f1b.connected = False
+ f1a.use_connect = False
+ f1b.use_connect = False
f1b.parent = f1a
center = f1a.center
f1a.tail = center
@@ -182,7 +182,7 @@ def main(obj, bone_definition, base_names, options):
else:
tot_len = eb[org_f1].length + eb[org_f2].length
control = copy_bone_simple(arm, bone_definition[0], base_name + get_side_name(base_names[bone_definition[0]]), parent=True).name
- eb[control].connected = eb[org_f1].connected
+ eb[control].use_connect = eb[org_f1].use_connect
eb[control].parent = eb[org_f1].parent
eb[control].length = tot_len
@@ -203,12 +203,12 @@ def main(obj, bone_definition, base_names, options):
# Set parents of the bones, interleaving the driver bones with the secondary control bones
if three_digits:
- eb[f3].connected = False
- eb[df3].connected = False
- eb[f2].connected = False
- eb[df2].connected = False
- eb[f1].connected = False
- eb[df1].connected = eb[org_f1].connected
+ eb[f3].use_connect = False
+ eb[df3].use_connect = False
+ eb[f2].use_connect = False
+ eb[df2].use_connect = False
+ eb[f1].use_connect = False
+ eb[df1].use_connect = eb[org_f1].use_connect
if three_digits:
eb[f3].parent = eb[df3]
@@ -223,7 +223,7 @@ def main(obj, bone_definition, base_names, options):
socket = copy_bone_simple(arm, org_f1, "MCH-socket_"+control, parent=True).name
hinge = copy_bone_simple(arm, eb[org_f1].parent.name, "MCH-hinge_"+control).name
- eb[control].connected = False
+ eb[control].use_connect = False
eb[control].parent = eb[hinge]
# Create the deform rig while we're still in edit mode
@@ -362,16 +362,16 @@ def main(obj, bone_definition, base_names, options):
if "ex_layer" in options:
layer = [n==options["ex_layer"] for n in range(0,32)]
else:
- layer = list(arm.bones[bone_definition[0]].layer)
+ layer = list(arm.bones[bone_definition[0]].layers)
#for bone_name in [f1, f2, f3]:
- # arm.bones[bone_name].layer = layer
- arm.bones[f1].layer = layer
- arm.bones[f2].layer = layer
+ # arm.bones[bone_name].layers = layer
+ arm.bones[f1].layers = layer
+ arm.bones[f2].layers = layer
if three_digits:
- arm.bones[f3].layer = layer
+ arm.bones[f3].layers = layer
- layer = list(arm.bones[bone_definition[0]].layer)
- bb[control].layer = layer
+ layer = list(arm.bones[bone_definition[0]].layers)
+ bb[control].layers = layer
# no blending the result of this
return None
diff --git a/release/scripts/modules/rigify/leg_biped.py b/release/scripts/modules/rigify/leg_biped.py
index 53028986873..d2ddba9f549 100644
--- a/release/scripts/modules/rigify/leg_biped.py
+++ b/release/scripts/modules/rigify/leg_biped.py
@@ -36,36 +36,36 @@ def metarig_template():
bone.head[:] = 0.0000, 0.0000, 0.0000
bone.tail[:] = 0.0000, 0.0000, 0.2506
bone.roll = 0.0000
- bone.connected = False
+ bone.use_connect = False
bone = arm.edit_bones.new('thigh')
bone.head[:] = 0.1253, 0.0000, -0.0000
bone.tail[:] = 0.0752, -0.0251, -0.4260
bone.roll = 0.1171
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['hips']
bone = arm.edit_bones.new('shin')
bone.head[:] = 0.0752, -0.0251, -0.4260
bone.tail[:] = 0.0752, 0.0000, -0.8771
bone.roll = 0.0000
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['thigh']
bone = arm.edit_bones.new('foot')
bone.head[:] = 0.0752, 0.0000, -0.8771
bone.tail[:] = 0.1013, -0.1481, -0.9773
bone.roll = -0.4662
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['shin']
bone = arm.edit_bones.new('toe')
bone.head[:] = 0.1013, -0.1481, -0.9773
bone.tail[:] = 0.1100, -0.2479, -0.9773
bone.roll = 3.1416
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['foot']
bone = arm.edit_bones.new('heel')
bone.head[:] = 0.0652, 0.0501, -1.0024
bone.tail[:] = 0.0927, -0.1002, -1.0024
bone.roll = 0.0000
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['foot']
bpy.ops.object.mode_set(mode='OBJECT')
@@ -109,11 +109,11 @@ def metarig_definition(obj, orig_bone_name):
if len(children) != 2:
raise RigifyError("expected the foot bone:'%s' to have 2 children" % bone.name)
- if children[0].connected == children[1].connected:
+ if children[0].use_connect == children[1].use_connect:
raise RigifyError("expected one bone to be connected")
toe, heel = children
- if heel.connected:
+ if heel.use_connect:
toe, heel = heel, toe
@@ -154,7 +154,7 @@ def ik(obj, bone_definition, base_names, options):
ik.foot_e = copy_bone_simple(arm, mt.heel, base_foot_name + "_ik" + get_side_name(base_names[mt_chain.foot]))
ik.foot = ik.foot_e.name
ik.foot_e.translate(mt_chain.foot_e.head - ik.foot_e.head)
- ik.foot_e.local_location = False
+ ik.foot_e.use_local_location = False
# foot roll: heel pointing backwards, half length
ik.foot_roll_e = copy_bone_simple(arm, mt.heel, base_foot_name + "_roll" + get_side_name(base_names[mt_chain.foot]))
@@ -180,11 +180,11 @@ def ik(obj, bone_definition, base_names, options):
# rename 'MCH-toe' --> to 'toe_ik' and make the child of ik.foot_roll_01
# ------------------ FK or IK?
ik_chain.rename("toe", get_base_name(base_names[mt_chain.toe]) + "_ik" + get_side_name(base_names[mt_chain.toe]))
- ik_chain.toe_e.connected = False
+ ik_chain.toe_e.use_connect = False
ik_chain.toe_e.parent = ik.foot_roll_01_e
# re-parent ik_chain.foot to the
- ik_chain.foot_e.connected = False
+ ik_chain.foot_e.use_connect = False
ik_chain.foot_e.parent = ik.foot_roll_02_e
@@ -198,7 +198,7 @@ def ik(obj, bone_definition, base_names, options):
ik.knee_target_e.translate(offset)
ik.knee_target_e.length *= 0.5
ik.knee_target_e.parent = ik.foot_e
- ik.knee_target_e.local_location = False
+ ik.knee_target_e.use_local_location = False
# roll the bone to point up... could also point in the same direction as ik.foot_roll
# ik.foot_roll_02_e.matrix * Vector((0.0, 0.0, 1.0)) # ACK!, no rest matrix in editmode
@@ -211,9 +211,9 @@ def ik(obj, bone_definition, base_names, options):
ik_chain.update()
# Set IK dof
- ik_chain.shin_p.ik_dof_x = True
- ik_chain.shin_p.ik_dof_y = False
- ik_chain.shin_p.ik_dof_z = False
+ ik_chain.shin_p.lock_ik_x = False
+ ik_chain.shin_p.lock_ik_y = True
+ ik_chain.shin_p.lock_ik_z = True
# Set rotation modes and axis locks
ik.foot_roll_p.rotation_mode = 'XYZ'
@@ -225,7 +225,7 @@ def ik(obj, bone_definition, base_names, options):
# IK
con = ik_chain.shin_p.constraints.new('IK')
- con.chain_length = 2
+ con.chain_count = 2
con.iterations = 500
con.pole_angle = -pi / 2.0
con.use_tail = True
@@ -256,22 +256,22 @@ def ik(obj, bone_definition, base_names, options):
con.owner_space = 'LOCAL'
if con_l is cons[-1][-1]:
- con.minimum_x = 0.0
- con.maximum_x = 180.0 # XXX -deg
+ con.min_x = 0.0
+ con.max_x = 180.0 # XXX -deg
else:
- con.minimum_x = -180.0 # XXX -deg
- con.maximum_x = 0.0
+ con.min_x = -180.0 # XXX -deg
+ con.max_x = 0.0
# last step setup layers
if "ik_layer" in options:
layer = [n == options["ik_layer"] for n in range(0, 32)]
else:
- layer = list(mt_chain.thigh_b.layer)
+ layer = list(mt_chain.thigh_b.layers)
for attr in ik_chain.attr_names:
- getattr(ik_chain, attr + "_b").layer = layer
+ getattr(ik_chain, attr + "_b").layers = layer
for attr in ik.attr_names:
- getattr(ik, attr + "_b").layer = layer
+ getattr(ik, attr + "_b").layers = layer
bpy.ops.object.mode_set(mode='EDIT')
@@ -312,11 +312,11 @@ def fk(obj, bone_definition, base_names, options):
foot = foot_e.name
foot_e.translate(mt_chain.foot_e.head - foot_e.head)
foot_e.parent = fk_chain.shin_e
- foot_e.connected = fk_chain.foot_e.connected
- fk_chain.foot_e.connected = False
+ foot_e.use_connect = fk_chain.foot_e.use_connect
+ fk_chain.foot_e.use_connect = False
fk_chain.foot_e.parent = foot_e
- fk_chain.thigh_e.connected = False
+ fk_chain.thigh_e.use_connect = False
fk_chain.thigh_e.parent = ex.thigh_hinge_e
bpy.ops.object.mode_set(mode='OBJECT')
@@ -370,12 +370,12 @@ def fk(obj, bone_definition, base_names, options):
if "fk_layer" in options:
layer = [n == options["fk_layer"] for n in range(0, 32)]
else:
- layer = list(mt_chain.thigh_b.layer)
+ layer = list(mt_chain.thigh_b.layers)
for attr in fk_chain.attr_names:
- getattr(fk_chain, attr + "_b").layer = layer
+ getattr(fk_chain, attr + "_b").layers = layer
for attr in ex.attr_names:
- getattr(ex, attr + "_b").layer = layer
- arm.bones[foot].layer = layer
+ getattr(ex, attr + "_b").layers = layer
+ arm.bones[foot].layers = layer
bpy.ops.object.mode_set(mode='EDIT')
@@ -390,8 +390,8 @@ def deform(obj, definitions, base_names, options):
# Create upper leg bones: two bones, each half of the upper leg.
uleg1 = copy_bone_simple(obj.data, definitions[1], "DEF-%s.01" % base_names[definitions[1]], parent=True)
uleg2 = copy_bone_simple(obj.data, definitions[1], "DEF-%s.02" % base_names[definitions[1]], parent=True)
- uleg1.connected = False
- uleg2.connected = False
+ uleg1.use_connect = False
+ uleg2.use_connect = False
uleg2.parent = uleg1
center = uleg1.center
uleg1.tail = center
@@ -400,8 +400,8 @@ def deform(obj, definitions, base_names, options):
# Create lower leg bones: two bones, each half of the lower leg.
lleg1 = copy_bone_simple(obj.data, definitions[2], "DEF-%s.01" % base_names[definitions[2]], parent=True)
lleg2 = copy_bone_simple(obj.data, definitions[2], "DEF-%s.02" % base_names[definitions[2]], parent=True)
- lleg1.connected = False
- lleg2.connected = False
+ lleg1.use_connect = False
+ lleg2.use_connect = False
lleg2.parent = lleg1
center = lleg1.center
lleg1.tail = center
@@ -410,7 +410,7 @@ def deform(obj, definitions, base_names, options):
# Create a bone for the second lower leg deform bone to twist with
twist = copy_bone_simple(obj.data, lleg2.name, "MCH-leg_twist")
twist.length /= 4
- twist.connected = False
+ twist.use_connect = False
twist.parent = obj.data.edit_bones[definitions[3]]
# Create foot bone
diff --git a/release/scripts/modules/rigify/leg_quadruped.py b/release/scripts/modules/rigify/leg_quadruped.py
index 688387bbd53..739a6402c4b 100644
--- a/release/scripts/modules/rigify/leg_quadruped.py
+++ b/release/scripts/modules/rigify/leg_quadruped.py
@@ -37,30 +37,30 @@ def metarig_template():
bone.head[:] = -0.0728, -0.2427, 0.0000
bone.tail[:] = -0.0728, -0.2427, 0.2427
bone.roll = 0.0000
- bone.connected = False
+ bone.use_connect = False
bone = arm.edit_bones.new('thigh')
bone.head[:] = 0.0000, 0.0000, -0.0000
bone.tail[:] = 0.0813, -0.2109, -0.3374
bone.roll = -0.4656
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['body']
bone = arm.edit_bones.new('shin')
bone.head[:] = 0.0813, -0.2109, -0.3374
bone.tail[:] = 0.0714, -0.0043, -0.5830
bone.roll = -0.2024
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['thigh']
bone = arm.edit_bones.new('foot')
bone.head[:] = 0.0714, -0.0043, -0.5830
bone.tail[:] = 0.0929, -0.0484, -0.7652
bone.roll = -0.3766
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['shin']
bone = arm.edit_bones.new('toe')
bone.head[:] = 0.0929, -0.0484, -0.7652
bone.tail[:] = 0.1146, -0.1244, -0.7652
bone.roll = -0.0000
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['foot']
bpy.ops.object.mode_set(mode='OBJECT')
@@ -120,7 +120,7 @@ def ik(obj, bone_definition, base_names, options):
ik_chain = mt_chain.copy(to_fmt="MCH-%s.ik", base_names=base_names)
- ik_chain.thigh_e.connected = False
+ ik_chain.thigh_e.use_connect = False
ik_chain.thigh_e.parent = mt.hips_e
ik_chain.foot_e.parent = None
@@ -128,10 +128,10 @@ def ik(obj, bone_definition, base_names, options):
ik_chain.rename("toe", get_base_name(base_names[bone_definition[4]]) + "_ik" + get_side_name(base_names[bone_definition[4]]))
# keep the foot_ik as the parent
- ik_chain.toe_e.connected = False
+ ik_chain.toe_e.use_connect = False
# Foot uses pose space, not local space, for translation
- ik_chain.foot_e.local_location = False
+ ik_chain.foot_e.use_local_location = False
# must be after disconnecting the toe
ik_chain.foot_e.align_orientation(mt_chain.toe_e)
@@ -141,7 +141,7 @@ def ik(obj, bone_definition, base_names, options):
# knee rotator
knee_rotator = copy_bone_simple(arm, mt_chain.toe, "knee_rotator" + get_side_name(base_names[mt_chain.foot]), parent=True).name
- eb[knee_rotator].connected = False
+ eb[knee_rotator].use_connect = False
eb[knee_rotator].parent = eb[mt.hips]
eb[knee_rotator].head = eb[ik_chain.thigh].head
eb[knee_rotator].tail = eb[knee_rotator].head + eb[mt_chain.toe].vector
@@ -156,7 +156,7 @@ def ik(obj, bone_definition, base_names, options):
# then align it with the foot but reverse direction.
ik.foot_roll_e = copy_bone_simple(arm, mt_chain.toe, get_base_name(base_names[mt_chain.foot]) + "_roll" + get_side_name(base_names[mt_chain.foot]))
ik.foot_roll = ik.foot_roll_e.name
- ik.foot_roll_e.connected = False
+ ik.foot_roll_e.use_connect = False
ik.foot_roll_e.parent = ik_chain.foot_e
ik.foot_roll_e.head -= mt_chain.toe_e.vector.normalize() * mt_chain.foot_e.length
ik.foot_roll_e.tail = ik.foot_roll_e.head - (mt_chain.foot_e.vector.normalize() * mt_chain.toe_e.length)
@@ -175,7 +175,7 @@ def ik(obj, bone_definition, base_names, options):
ik.foot_target_e.parent = ik.foot_roll_01_e
ik.foot_target_e.align_orientation(ik_chain.foot_e)
ik.foot_target_e.length = ik_chain.foot_e.length / 2.0
- ik.foot_target_e.connected = True
+ ik.foot_target_e.use_connect = True
# MCH-foot.02 child of MCH-foot
ik.foot_roll_02_e = copy_bone_simple(arm, mt_chain.foot, "MCH-%s_02" % base_names[mt_chain.foot])
@@ -268,7 +268,7 @@ def ik(obj, bone_definition, base_names, options):
# IK
con = ik_chain.shin_p.constraints.new('IK')
- con.chain_length = 2
+ con.chain_count = 2
con.iterations = 500
con.pole_angle = -90.0 # XXX - in deg!
con.use_tail = True
@@ -289,12 +289,12 @@ def ik(obj, bone_definition, base_names, options):
if "ik_layer" in options:
layer = [n==options["ik_layer"] for n in range(0,32)]
else:
- layer = list(mt_chain.thigh_b.layer)
+ layer = list(mt_chain.thigh_b.layers)
for attr in ik_chain.attr_names:
- obj.data.bones[getattr(ik_chain, attr)].layer = layer
+ obj.data.bones[getattr(ik_chain, attr)].layers = layer
for attr in ik.attr_names:
- obj.data.bones[getattr(ik, attr)].layer = layer
- obj.data.bones[knee_rotator].layer = layer
+ obj.data.bones[getattr(ik, attr)].layers = layer
+ obj.data.bones[knee_rotator].layers = layer
return None, ik_chain.thigh, ik_chain.shin, ik_chain.foot, ik_chain.toe
@@ -325,7 +325,7 @@ def fk(obj, bone_definition, base_names, options):
eb[hinge].length = eb[mt.hips].length / 2
# Make leg child of hinge
- eb[fk_chain.thigh].connected = False
+ eb[fk_chain.thigh].use_connect = False
eb[fk_chain.thigh].parent = eb[hinge]
@@ -396,8 +396,8 @@ def deform(obj, definitions, base_names, options):
# Create upper leg bones: two bones, each half of the upper leg.
uleg1 = copy_bone_simple(obj.data, definitions[1], "DEF-%s.01" % base_names[definitions[1]], parent=True)
uleg2 = copy_bone_simple(obj.data, definitions[1], "DEF-%s.02" % base_names[definitions[1]], parent=True)
- uleg1.connected = False
- uleg2.connected = False
+ uleg1.use_connect = False
+ uleg2.use_connect = False
uleg2.parent = uleg1
center = uleg1.center
uleg1.tail = center
@@ -406,8 +406,8 @@ def deform(obj, definitions, base_names, options):
# Create lower leg bones: two bones, each half of the lower leg.
lleg1 = copy_bone_simple(obj.data, definitions[2], "DEF-%s.01" % base_names[definitions[2]], parent=True)
lleg2 = copy_bone_simple(obj.data, definitions[2], "DEF-%s.02" % base_names[definitions[2]], parent=True)
- lleg1.connected = False
- lleg2.connected = False
+ lleg1.use_connect = False
+ lleg2.use_connect = False
lleg2.parent = lleg1
center = lleg1.center
lleg1.tail = center
@@ -416,7 +416,7 @@ def deform(obj, definitions, base_names, options):
# Create a bone for the second lower leg deform bone to twist with
twist = copy_bone_simple(obj.data, lleg2.name, "MCH-leg_twist")
twist.length /= 4
- twist.connected = False
+ twist.use_connect = False
twist.parent = obj.data.edit_bones[definitions[3]]
# Create foot bone
diff --git a/release/scripts/modules/rigify/mouth.py b/release/scripts/modules/rigify/mouth.py
index d516a48ec95..ce232b91e7b 100644
--- a/release/scripts/modules/rigify/mouth.py
+++ b/release/scripts/modules/rigify/mouth.py
@@ -93,7 +93,7 @@ def metarig_template():
bone.head[:] = 0.0000, 0.0000, 0.0000
bone.tail[:] = 0.0000, 0.0000, 1.0000
bone.roll = 0.0000
- bone.connected = False
+ bone.use_connect = False
bpy.ops.object.mode_set(mode='OBJECT')
pbone = obj.pose.bones['Bone']
@@ -151,8 +151,8 @@ def deform(obj, definitions, base_names, options):
eb[spread_l_2].tail = eb[definitions[5]].head
eb[spread_l_1].roll = 0
eb[spread_l_2].roll = 0
- eb[spread_l_1].connected = False
- eb[spread_l_2].connected = False
+ eb[spread_l_1].use_connect = False
+ eb[spread_l_2].use_connect = False
eb[spread_l_1].parent = eb[definitions[6]]
eb[spread_l_2].parent = eb[definitions[6]]
@@ -162,8 +162,8 @@ def deform(obj, definitions, base_names, options):
eb[spread_r_2].tail = eb[definitions[3]].head
eb[spread_r_1].roll = 0
eb[spread_r_2].roll = 0
- eb[spread_r_1].connected = False
- eb[spread_r_2].connected = False
+ eb[spread_r_1].use_connect = False
+ eb[spread_r_2].use_connect = False
eb[spread_r_1].parent = eb[definitions[2]]
eb[spread_r_2].parent = eb[definitions[2]]
@@ -171,7 +171,7 @@ def deform(obj, definitions, base_names, options):
# Jaw open bones (for driving corrective shape keys)
jopen1 = copy_bone_simple(obj.data, jaw, "MCH-"+base_names[jaw]+".track1", parent=True).name
- eb[jopen1].connected = False
+ eb[jopen1].use_connect = False
eb[jopen1].head = eb[jaw].tail
eb[jopen1].tail = eb[jopen1].head + Vector((0, 0, eb[jaw].length/4))
@@ -426,7 +426,7 @@ def control(obj, definitions, base_names, options):
# Jaw open tracker
jopent = copy_bone_simple(obj.data, jaw_e.name, "MCH-"+base_names[jaw_e.name]+".track", parent=True).name
- eb[jopent].connected = False
+ eb[jopent].use_connect = False
eb[jopent].tail = jaw_e.tail + Vector((0.0, 0.0, jaw_e.length))
eb[jopent].head = jaw_e.tail
@@ -458,7 +458,7 @@ def control(obj, definitions, base_names, options):
con.target = obj
con.subtarget = jaw
con.head_tail = 1.0
- con.original_length = bb[jopent].length
+ con.rest_length = bb[jopent].length
con.volume = 'NO_VOLUME'
# Head lips to jaw lips
@@ -545,8 +545,8 @@ def control(obj, definitions, base_names, options):
con.transform_channel = 'SCALE_Y'
con.frame_start = 0
con.frame_end = 60
- con.minimum = 0.0
- con.maximum = 1.0
+ con.min = 0.0
+ con.max = 1.0
con.target_space = 'LOCAL'
fcurve = con.driver_add("influence")
driver = fcurve.driver
@@ -563,8 +563,8 @@ def control(obj, definitions, base_names, options):
con.transform_channel = 'SCALE_Y'
con.frame_start = 0
con.frame_end = 60
- con.minimum = 0.0
- con.maximum = 1.0
+ con.min = 0.0
+ con.max = 1.0
con.target_space = 'LOCAL'
fcurve = con.driver_add("influence")
driver = fcurve.driver
@@ -581,8 +581,8 @@ def control(obj, definitions, base_names, options):
con.transform_channel = 'SCALE_Y'
con.frame_start = 0
con.frame_end = 60
- con.minimum = 0.0
- con.maximum = 1.0
+ con.min = 0.0
+ con.max = 1.0
con.target_space = 'LOCAL'
fcurve = con.driver_add("influence")
driver = fcurve.driver
@@ -599,8 +599,8 @@ def control(obj, definitions, base_names, options):
con.transform_channel = 'SCALE_Y'
con.frame_start = 0
con.frame_end = 60
- con.minimum = 0.0
- con.maximum = 1.0
+ con.min = 0.0
+ con.max = 1.0
con.target_space = 'LOCAL'
fcurve = con.driver_add("influence")
driver = fcurve.driver
@@ -617,8 +617,8 @@ def control(obj, definitions, base_names, options):
con.transform_channel = 'SCALE_Y'
con.frame_start = 0
con.frame_end = 60
- con.minimum = 0.0
- con.maximum = 1.0
+ con.min = 0.0
+ con.max = 1.0
con.target_space = 'LOCAL'
fcurve = con.driver_add("influence")
driver = fcurve.driver
@@ -635,8 +635,8 @@ def control(obj, definitions, base_names, options):
con.transform_channel = 'SCALE_Y'
con.frame_start = 0
con.frame_end = 60
- con.minimum = 0.0
- con.maximum = 1.0
+ con.min = 0.0
+ con.max = 1.0
con.target_space = 'LOCAL'
fcurve = con.driver_add("influence")
driver = fcurve.driver
@@ -653,8 +653,8 @@ def control(obj, definitions, base_names, options):
con.transform_channel = 'SCALE_Y'
con.frame_start = 0
con.frame_end = 60
- con.minimum = 0.0
- con.maximum = 1.0
+ con.min = 0.0
+ con.max = 1.0
con.target_space = 'LOCAL'
fcurve = con.driver_add("influence")
driver = fcurve.driver
@@ -671,8 +671,8 @@ def control(obj, definitions, base_names, options):
con.transform_channel = 'SCALE_Y'
con.frame_start = 0
con.frame_end = 60
- con.minimum = 0.0
- con.maximum = 1.0
+ con.min = 0.0
+ con.max = 1.0
con.target_space = 'LOCAL'
fcurve = con.driver_add("influence")
driver = fcurve.driver
@@ -684,15 +684,15 @@ def control(obj, definitions, base_names, options):
# Set layers
- layer = list(bb[definitions[2]].layer)
- bb[lip1].layer = layer
- bb[lip2].layer = layer
- bb[lip3].layer = layer
- bb[lip4].layer = layer
- bb[lip5].layer = layer
- bb[lip6].layer = layer
- bb[lip7].layer = layer
- bb[lip8].layer = layer
+ layer = list(bb[definitions[2]].layers)
+ bb[lip1].layers = layer
+ bb[lip2].layers = layer
+ bb[lip3].layers = layer
+ bb[lip4].layers = layer
+ bb[lip5].layers = layer
+ bb[lip6].layers = layer
+ bb[lip7].layers = layer
+ bb[lip8].layers = layer
return (None,)
@@ -717,7 +717,7 @@ def make_lip_stretch_bone(obj, name, bone1, bone2, roll_alpha):
# Create the bone, pointing from bone1 to bone2
bone_e = copy_bone_simple(obj.data, bone1, name, parent=True)
- bone_e.connected = False
+ bone_e.use_connect = False
bone_e.tail = eb[bone2].head
bone = bone_e.name
diff --git a/release/scripts/modules/rigify/neck.py b/release/scripts/modules/rigify/neck.py
index 0d2ab25bcc9..56717f0ebb0 100644
--- a/release/scripts/modules/rigify/neck.py
+++ b/release/scripts/modules/rigify/neck.py
@@ -35,42 +35,42 @@ def metarig_template():
#bone.head[:] = 0.0000, -0.0276, -0.1328
#bone.tail[:] = 0.0000, -0.0170, -0.0197
#bone.roll = 0.0000
- #bone.connected = False
+ #bone.use_connect = False
#bone = arm.edit_bones.new('head')
#bone.head[:] = 0.0000, -0.0170, -0.0197
#bone.tail[:] = 0.0000, 0.0726, 0.1354
#bone.roll = 0.0000
- #bone.connected = True
+ #bone.use_connect = True
#bone.parent = arm.edit_bones['body']
#bone = arm.edit_bones.new('neck.01')
#bone.head[:] = 0.0000, -0.0170, -0.0197
#bone.tail[:] = 0.0000, -0.0099, 0.0146
#bone.roll = 0.0000
- #bone.connected = False
+ #bone.use_connect = False
#bone.parent = arm.edit_bones['head']
#bone = arm.edit_bones.new('neck.02')
#bone.head[:] = 0.0000, -0.0099, 0.0146
#bone.tail[:] = 0.0000, -0.0242, 0.0514
#bone.roll = 0.0000
- #bone.connected = True
+ #bone.use_connect = True
#bone.parent = arm.edit_bones['neck.01']
#bone = arm.edit_bones.new('neck.03')
#bone.head[:] = 0.0000, -0.0242, 0.0514
#bone.tail[:] = 0.0000, -0.0417, 0.0868
#bone.roll = 0.0000
- #bone.connected = True
+ #bone.use_connect = True
#bone.parent = arm.edit_bones['neck.02']
#bone = arm.edit_bones.new('neck.04')
#bone.head[:] = 0.0000, -0.0417, 0.0868
#bone.tail[:] = 0.0000, -0.0509, 0.1190
#bone.roll = 0.0000
- #bone.connected = True
+ #bone.use_connect = True
#bone.parent = arm.edit_bones['neck.03']
#bone = arm.edit_bones.new('neck.05')
#bone.head[:] = 0.0000, -0.0509, 0.1190
#bone.tail[:] = 0.0000, -0.0537, 0.1600
#bone.roll = 0.0000
- #bone.connected = True
+ #bone.use_connect = True
#bone.parent = arm.edit_bones['neck.04']
#
#bpy.ops.object.mode_set(mode='OBJECT')
@@ -330,13 +330,13 @@ def main(obj, bone_definition, base_names, options):
if "ex_layer" in options:
layer = [n==options["ex_layer"] for n in range(0,32)]
else:
- layer = list(arm.bones[bone_definition[1]].layer)
+ layer = list(arm.bones[bone_definition[1]].layers)
for bone in neck:
- bb[bone].layer = layer
+ bb[bone].layers = layer
- layer = list(arm.bones[bone_definition[1]].layer)
- bb[neck_ctrl].layer = layer
- bb[head_ctrl].layer = layer
+ layer = list(arm.bones[bone_definition[1]].layers)
+ bb[neck_ctrl].layers = layer
+ bb[head_ctrl].layers = layer
# no blending the result of this
diff --git a/release/scripts/modules/rigify/neck_flex.py b/release/scripts/modules/rigify/neck_flex.py
index 08f963434d1..1ab14e281b9 100644
--- a/release/scripts/modules/rigify/neck_flex.py
+++ b/release/scripts/modules/rigify/neck_flex.py
@@ -36,42 +36,42 @@ def metarig_template():
bone.head[:] = 0.0000, -0.0276, -0.1328
bone.tail[:] = 0.0000, -0.0170, -0.0197
bone.roll = 0.0000
- bone.connected = False
+ bone.use_connect = False
bone = arm.edit_bones.new('head')
bone.head[:] = 0.0000, -0.0170, -0.0197
bone.tail[:] = 0.0000, 0.0726, 0.1354
bone.roll = 0.0000
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['body']
bone = arm.edit_bones.new('neck.01')
bone.head[:] = 0.0000, -0.0170, -0.0197
bone.tail[:] = 0.0000, -0.0099, 0.0146
bone.roll = 0.0000
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['head']
bone = arm.edit_bones.new('neck.02')
bone.head[:] = 0.0000, -0.0099, 0.0146
bone.tail[:] = 0.0000, -0.0242, 0.0514
bone.roll = 0.0000
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['neck.01']
bone = arm.edit_bones.new('neck.03')
bone.head[:] = 0.0000, -0.0242, 0.0514
bone.tail[:] = 0.0000, -0.0417, 0.0868
bone.roll = 0.0000
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['neck.02']
bone = arm.edit_bones.new('neck.04')
bone.head[:] = 0.0000, -0.0417, 0.0868
bone.tail[:] = 0.0000, -0.0509, 0.1190
bone.roll = 0.0000
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['neck.03']
bone = arm.edit_bones.new('neck.05')
bone.head[:] = 0.0000, -0.0509, 0.1190
bone.tail[:] = 0.0000, -0.0537, 0.1600
bone.roll = 0.0000
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['neck.04']
bpy.ops.object.mode_set(mode='OBJECT')
@@ -156,7 +156,7 @@ def main(obj, bone_definition, base_names, options):
# Copy the head bone and offset
ex.head_e = copy_bone_simple(arm, mt.head, "MCH-%s" % base_names[mt.head], parent=True)
- ex.head_e.connected = False
+ ex.head_e.use_connect = False
ex.head = ex.head_e.name
# offset
head_length = ex.head_e.length
@@ -165,7 +165,7 @@ def main(obj, bone_definition, base_names, options):
# Yes, use the body bone but call it a head hinge
ex.head_hinge_e = copy_bone_simple(arm, mt.body, "MCH-%s_hinge" % base_names[mt.head], parent=False)
- ex.head_hinge_e.connected = False
+ ex.head_hinge_e.use_connect = False
ex.head_hinge = ex.head_hinge_e.name
ex.head_hinge_e.head.y += head_length / 4.0
ex.head_hinge_e.tail.y += head_length / 4.0
@@ -173,7 +173,7 @@ def main(obj, bone_definition, base_names, options):
# Insert the neck socket, the head copys this loation
ex.neck_socket_e = arm.edit_bones.new("MCH-%s_socked" % neck_chain_basename)
ex.neck_socket = ex.neck_socket_e.name
- ex.neck_socket_e.connected = False
+ ex.neck_socket_e.use_connect = False
ex.neck_socket_e.parent = mt.body_e
ex.neck_socket_e.head = mt.head_e.head
ex.neck_socket_e.tail = mt.head_e.head - Vector((0.0, neck_chain_segment_length / 2.0, 0.0))
@@ -195,9 +195,9 @@ def main(obj, bone_definition, base_names, options):
neck_e_parent.roll = mt.head_e.roll
orig_parent = neck_e.parent
- neck_e.connected = False
+ neck_e.use_connect = False
neck_e.parent = neck_e_parent
- neck_e_parent.connected = False
+ neck_e_parent.use_connect = False
if i == 0:
neck_e_parent.parent = mt.body_e
@@ -334,14 +334,14 @@ def main(obj, bone_definition, base_names, options):
if "ex_layer" in options:
layer = [n == options["ex_layer"] for n in range(0, 32)]
else:
- layer = list(arm.bones[bone_definition[1]].layer)
+ layer = list(arm.bones[bone_definition[1]].layers)
for attr in ex_chain.attr_names:
- getattr(ex_chain, attr + "_b").layer = layer
+ getattr(ex_chain, attr + "_b").layers = layer
for attr in ex.attr_names:
- getattr(ex, attr + "_b").layer = layer
+ getattr(ex, attr + "_b").layers = layer
- layer = list(arm.bones[bone_definition[1]].layer)
- ex.head_ctrl_b.layer = layer
+ layer = list(arm.bones[bone_definition[1]].layers)
+ ex.head_ctrl_b.layers = layer
# no blending the result of this
diff --git a/release/scripts/modules/rigify/palm_curl.py b/release/scripts/modules/rigify/palm_curl.py
index 2bdd28a348a..369d6928e45 100644
--- a/release/scripts/modules/rigify/palm_curl.py
+++ b/release/scripts/modules/rigify/palm_curl.py
@@ -35,42 +35,42 @@ def metarig_template():
bone.head[:] = 0.0004, -0.0629, 0.0000
bone.tail[:] = 0.0021, -0.0209, 0.0000
bone.roll = 0.0000
- bone.connected = False
+ bone.use_connect = False
bone = arm.edit_bones.new('palm.03')
bone.head[:] = -0.0000, 0.0000, 0.0000
bone.tail[:] = 0.0025, 0.0644, -0.0065
bone.roll = -3.1396
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['hand']
bone = arm.edit_bones.new('palm.02')
bone.head[:] = 0.0252, -0.0000, 0.0000
bone.tail[:] = 0.0324, 0.0627, -0.0065
bone.roll = -3.1357
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['hand']
bone = arm.edit_bones.new('palm.01')
bone.head[:] = 0.0504, 0.0000, 0.0000
bone.tail[:] = 0.0703, 0.0508, -0.0065
bone.roll = -3.1190
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['hand']
bone = arm.edit_bones.new('palm.04')
bone.head[:] = -0.0252, 0.0000, 0.0000
bone.tail[:] = -0.0286, 0.0606, -0.0065
bone.roll = 3.1386
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['hand']
bone = arm.edit_bones.new('palm.05')
bone.head[:] = -0.0504, 0.0000, 0.0000
bone.tail[:] = -0.0669, 0.0534, -0.0065
bone.roll = 3.1239
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['hand']
bone = arm.edit_bones.new('thumb')
bone.head[:] = 0.0682, -0.0148, 0.0000
bone.tail[:] = 0.1063, 0.0242, -0.0065
bone.roll = -3.0929
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['hand']
bpy.ops.object.mode_set(mode='OBJECT')
@@ -263,7 +263,7 @@ def main(obj, bone_definition, base_names, options):
# last step setup layers
- arm.bones[control_name].layer = list(arm.bones[bone_definition[1]].layer)
+ arm.bones[control_name].layers = list(arm.bones[bone_definition[1]].layers)
# no blending the result of this
diff --git a/release/scripts/modules/rigify/shape_key_control.py b/release/scripts/modules/rigify/shape_key_control.py
index ac3987ca7e1..1bfca60255d 100644
--- a/release/scripts/modules/rigify/shape_key_control.py
+++ b/release/scripts/modules/rigify/shape_key_control.py
@@ -74,7 +74,7 @@ def metarig_template():
#bone.head[:] = 0.0000, 0.0000, 0.0000
#bone.tail[:] = 0.0000, 0.0000, 1.0000
#bone.roll = 0.0000
- #bone.connected = False
+ #bone.use_connect = False
#
#bpy.ops.object.mode_set(mode='OBJECT')
#pbone = obj.pose.bones['Bone']
diff --git a/release/scripts/modules/rigify/shape_key_distance.py b/release/scripts/modules/rigify/shape_key_distance.py
index 06dd3d67d4b..7d69517216f 100644
--- a/release/scripts/modules/rigify/shape_key_distance.py
+++ b/release/scripts/modules/rigify/shape_key_distance.py
@@ -71,7 +71,7 @@ def metarig_template():
bone.head[:] = 0.0000, 0.0000, 0.0000
bone.tail[:] = 0.0000, 0.0000, 1.0000
bone.roll = 0.0000
- bone.connected = False
+ bone.use_connect = False
bpy.ops.object.mode_set(mode='OBJECT')
pbone = obj.pose.bones['Bone']
diff --git a/release/scripts/modules/rigify/shape_key_rotdiff.py b/release/scripts/modules/rigify/shape_key_rotdiff.py
index 7049bcf74bb..dfc3b914a6a 100644
--- a/release/scripts/modules/rigify/shape_key_rotdiff.py
+++ b/release/scripts/modules/rigify/shape_key_rotdiff.py
@@ -71,7 +71,7 @@ def metarig_template():
bone.head[:] = 0.0000, 0.0000, 0.0000
bone.tail[:] = 0.0000, 0.0000, 1.0000
bone.roll = 0.0000
- bone.connected = False
+ bone.use_connect = False
bpy.ops.object.mode_set(mode='OBJECT')
pbone = obj.pose.bones['Bone']
diff --git a/release/scripts/modules/rigify/spine_pivot_flex.py b/release/scripts/modules/rigify/spine_pivot_flex.py
index d3bab72d9a1..645ee4045cc 100644
--- a/release/scripts/modules/rigify/spine_pivot_flex.py
+++ b/release/scripts/modules/rigify/spine_pivot_flex.py
@@ -36,54 +36,54 @@ def metarig_template():
bone.head[:] = 0.0000, -0.0306, 0.1039
bone.tail[:] = 0.0000, -0.0306, -0.0159
bone.roll = 0.0000
- bone.connected = False
+ bone.use_connect = False
bone = arm.edit_bones.new('rib_cage')
bone.head[:] = 0.0000, -0.0306, 0.1039
bone.tail[:] = 0.0000, -0.0306, 0.2236
bone.roll = -0.0000
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['pelvis']
bone = arm.edit_bones.new('spine.01')
bone.head[:] = 0.0000, 0.0000, -0.0000
bone.tail[:] = 0.0000, -0.0306, 0.1039
bone.roll = -0.0000
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['rib_cage']
bone = arm.edit_bones.new('spine.02')
bone.head[:] = 0.0000, -0.0306, 0.1039
bone.tail[:] = -0.0000, -0.0398, 0.2045
bone.roll = -0.0000
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['spine.01']
bone = arm.edit_bones.new('spine.03')
bone.head[:] = -0.0000, -0.0398, 0.2045
bone.tail[:] = -0.0000, -0.0094, 0.2893
bone.roll = -0.0000
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['spine.02']
bone = arm.edit_bones.new('spine.04')
bone.head[:] = -0.0000, -0.0094, 0.2893
bone.tail[:] = -0.0000, 0.0335, 0.3595
bone.roll = -0.0000
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['spine.03']
bone = arm.edit_bones.new('spine.05')
bone.head[:] = -0.0000, 0.0335, 0.3595
bone.tail[:] = -0.0000, 0.0555, 0.4327
bone.roll = -0.0000
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['spine.04']
bone = arm.edit_bones.new('spine.06')
bone.head[:] = -0.0000, 0.0555, 0.4327
bone.tail[:] = -0.0000, 0.0440, 0.5207
bone.roll = -0.0000
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['spine.05']
bone = arm.edit_bones.new('spine.07')
bone.head[:] = -0.0000, 0.0440, 0.5207
bone.tail[:] = -0.0000, 0.0021, 0.5992
bone.roll = -0.0000
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['spine.06']
bpy.ops.object.mode_set(mode='OBJECT')
@@ -147,7 +147,7 @@ def deform(obj, definitions, base_names, options):
def main(obj, bone_definition, base_names, options):
- from mathutils import Vector, RotationMatrix
+ from mathutils import Vector, Matrix
from math import radians, pi
arm = obj.data
@@ -172,7 +172,7 @@ def main(obj, bone_definition, base_names, options):
ex.pelvis_copy_e = copy_bone_simple(arm, mt.pelvis, base_names[mt.pelvis]) # no parent
ex.pelvis_copy = ex.pelvis_copy_e.name
- ex.pelvis_copy_e.local_location = False
+ ex.pelvis_copy_e.use_local_location = False
# copy the pelvis, offset to make MCH-spine_rotate and MCH-ribcage_hinge
ex.ribcage_hinge_e = copy_bone_simple(arm, mt.pelvis, "MCH-%s_hinge" % base_names[mt.ribcage])
@@ -182,7 +182,7 @@ def main(obj, bone_definition, base_names, options):
ex.spine_rotate_e = copy_bone_simple(arm, mt.ribcage, "MCH-%s_rotate" % spine_chain_basename)
ex.spine_rotate = ex.spine_rotate_e.name
ex.spine_rotate_e.translate(Vector((0.0, spine_chain_segment_length / 2.0, 0.0)))
- ex.spine_rotate_e.connected = False
+ ex.spine_rotate_e.use_connect = False
ex.spine_rotate_e.parent = ex.pelvis_copy_e
@@ -191,7 +191,7 @@ def main(obj, bone_definition, base_names, options):
ex.ribcage_copy_e = copy_bone_simple(arm, mt.ribcage, base_names[mt.ribcage])
ex.ribcage_copy = ex.ribcage_copy_e.name
- ex.ribcage_copy_e.connected = False
+ ex.ribcage_copy_e.use_connect = False
ex.ribcage_copy_e.parent = ex.ribcage_hinge_e
spine_chain = [child.name for child in spine_chain]
@@ -219,7 +219,7 @@ def main(obj, bone_definition, base_names, options):
ebone = copy_bone_simple(arm, child_name, "MCH-rev_%s" % child_name_orig)
setattr(rv_chain, attr, ebone.name)
- ebone.connected = False
+ ebone.use_connect = False
mt_chain.update()
ex_chain.update()
@@ -230,13 +230,13 @@ def main(obj, bone_definition, base_names, options):
attr = ex_chain.attr_names[i] + "_e"
ebone = getattr(ex_chain, attr)
if i == 0:
- ebone.connected = False
+ ebone.use_connect = False
ebone.parent = ex.pelvis_copy_e
else:
attr_parent = ex_chain.attr_names[i - 1] + "_e"
ebone.parent = getattr(ex_chain, attr_parent)
- # intentional! get the parent from the other paralelle chain member
+ # intentional! get the parent from the other parallel chain member
getattr(rv_chain, attr).parent = ebone
@@ -255,16 +255,16 @@ def main(obj, bone_definition, base_names, options):
spine_e = getattr(ex_chain, ex_chain.attr_names[i] + "_e")
orig_parent = spine_e.parent
- spine_e.connected = False
+ spine_e.use_connect = False
spine_e.parent = spine_e_parent
- spine_e_parent.connected = False
+ spine_e_parent.use_connect = False
spine_e_parent.parent = orig_parent
# Rotate the rev chain 180 about the by the first bones center point
pivot = (rv_chain.spine_01_e.head + rv_chain.spine_01_e.tail) * 0.5
- matrix = RotationMatrix(radians(180), 3, 'X')
+ matrix = Matrix.Rotation(radians(180), 3, 'X')
for i, attr in enumerate(rv_chain.attr_names): # similar to neck
spine_e = getattr(rv_chain, attr + "_e")
# use the first bone as the pivot
@@ -465,17 +465,17 @@ def main(obj, bone_definition, base_names, options):
if "ex_layer" in options:
layer = [n == options["ex_layer"] for n in range(0, 32)]
else:
- layer = list(arm.bones[bone_definition[1]].layer)
+ layer = list(arm.bones[bone_definition[1]].layers)
for attr in ex.attr_names:
- getattr(ex, attr + "_b").layer = layer
+ getattr(ex, attr + "_b").layers = layer
for attr in ex_chain.attr_names:
- getattr(ex_chain, attr + "_b").layer = layer
+ getattr(ex_chain, attr + "_b").layers = layer
for attr in rv_chain.attr_names:
- getattr(rv_chain, attr + "_b").layer = layer
+ getattr(rv_chain, attr + "_b").layers = layer
- layer = list(arm.bones[bone_definition[1]].layer)
- arm.bones[ex.pelvis_copy].layer = layer
- arm.bones[ex.ribcage_copy].layer = layer
+ layer = list(arm.bones[bone_definition[1]].layers)
+ arm.bones[ex.pelvis_copy].layers = layer
+ arm.bones[ex.ribcage_copy].layers = layer
# no support for blending chains
return None
diff --git a/release/scripts/modules/rigify/stretch.py b/release/scripts/modules/rigify/stretch.py
index 1c3d317b4b1..6a498e5aa29 100644
--- a/release/scripts/modules/rigify/stretch.py
+++ b/release/scripts/modules/rigify/stretch.py
@@ -35,7 +35,7 @@ RIG_TYPE = "stretch"
# bone.head[:] = 0.0000, 0.0000, 0.0000
# bone.tail[:] = 0.0000, 0.0000, 1.0000
# bone.roll = 0.0000
-# bone.connected = False
+# bone.use_connect = False
#
# bpy.ops.object.mode_set(mode='OBJECT')
# pbone = obj.pose.bones['Bone']
@@ -84,7 +84,7 @@ def main(obj, bone_definition, base_names, options):
mbone2 = "ORG-" + options["to"]
bone_e = copy_bone_simple(obj.data, mbone1, "DEF-%s" % base_names[bone_definition[0]])
- bone_e.connected = False
+ bone_e.use_connect = False
bone_e.parent = eb[mbone1]
bone_e.tail = eb[mbone2].head
bone = bone_e.name
@@ -100,7 +100,7 @@ def main(obj, bone_definition, base_names, options):
con = pb[bone].constraints.new('STRETCH_TO')
con.target = obj
con.subtarget = mbone2
- con.original_length = bb[bone].length
+ con.rest_length = bb[bone].length
if preserve_volume:
con.volume = 'VOLUME_XZX'
else:
diff --git a/release/scripts/modules/rigify/stretch_twist.py b/release/scripts/modules/rigify/stretch_twist.py
index 66719d80d42..ac64d4369cd 100644
--- a/release/scripts/modules/rigify/stretch_twist.py
+++ b/release/scripts/modules/rigify/stretch_twist.py
@@ -1,3 +1,4 @@
+<<<<<<< .working
# ##### BEGIN GPL LICENSE BLOCK #####
#
# This program is free software; you can redistribute it and/or
@@ -150,3 +151,157 @@ def main(obj, bone_definition, base_names, options):
return tuple()
+=======
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8 compliant>
+
+import bpy
+from rigify import RigifyError
+from rigify_utils import copy_bone_simple
+
+METARIG_NAMES = tuple()
+RIG_TYPE = "stretch_twist"
+
+# TODO
+#def metarig_template():
+# # generated by rigify.write_meta_rig
+# bpy.ops.object.mode_set(mode='EDIT')
+# obj = bpy.context.active_object
+# arm = obj.data
+# bone = arm.edit_bones.new('Bone')
+# bone.head[:] = 0.0000, 0.0000, 0.0000
+# bone.tail[:] = 0.0000, 0.0000, 1.0000
+# bone.roll = 0.0000
+# bone.use_connect = False
+#
+# bpy.ops.object.mode_set(mode='OBJECT')
+# pbone = obj.pose.bones['Bone']
+# pbone['type'] = 'copy'
+
+bool_map = {0:False, 1:True,
+ 0.0:False, 1.0:True,
+ "false":False, "true":True,
+ "False":False, "True":True,
+ "no":False, "yes":True,
+ "No":False, "Yes":True}
+
+def metarig_definition(obj, orig_bone_name):
+ return (orig_bone_name,)
+
+
+
+
+def main(obj, bone_definition, base_names, options):
+ """ A dual-bone stretchy bone setup. Each half follows the twist of the
+ bone on its side.
+ Deformation only (no controls).
+ """
+ # Verify required parameter
+ if "to" not in options:
+ raise RigifyError("'%s' rig type requires a 'to' parameter (bone: %s)" % (RIG_TYPE, base_names[0]))
+ if type(options["to"]) is not str:
+ raise RigifyError("'%s' rig type 'to' parameter must be a string (bone: %s)" % (RIG_TYPE, base_names[0]))
+ if ("ORG-" + options["to"]) not in obj.data.bones:
+ raise RigifyError("'%s' rig type 'to' parameter must name a bone in the metarig (bone: %s)" % (RIG_TYPE, base_names[0]))
+
+ preserve_volume = None
+ # Check optional parameter
+ if "preserve_volume" in options:
+ try:
+ preserve_volume = bool_map[options["preserve_volume"]]
+ except KeyError:
+ preserve_volume = False
+
+ eb = obj.data.edit_bones
+ bb = obj.data.bones
+ pb = obj.pose.bones
+
+ bpy.ops.object.mode_set(mode='EDIT')
+ arm = obj.data
+
+ mbone1 = bone_definition[0]
+ mbone2 = "ORG-" + options["to"]
+
+ bone_e = copy_bone_simple(obj.data, mbone1, "MCH-%s" % base_names[bone_definition[0]])
+ bone_e.use_connect = False
+ bone_e.parent = None
+ bone_e.head = (eb[mbone1].head + eb[mbone2].head) / 2
+ bone_e.tail = (bone_e.head[0], bone_e.head[1], bone_e.head[2]+0.1)
+ mid_bone = bone_e.name
+
+ bone_e = copy_bone_simple(obj.data, mbone1, "DEF-%s.01" % base_names[bone_definition[0]])
+ bone_e.use_connect = False
+ bone_e.parent = eb[mbone1]
+ bone_e.tail = eb[mid_bone].head
+ bone1 = bone_e.name
+
+ bone_e = copy_bone_simple(obj.data, mbone2, "DEF-%s.02" % base_names[bone_definition[0]])
+ bone_e.use_connect = False
+ bone_e.parent = eb[mbone2]
+ bone_e.tail = eb[mid_bone].head
+ bone2 = bone_e.name
+
+
+
+ bpy.ops.object.mode_set(mode='OBJECT')
+
+ # Constraints
+
+ # Mid bone
+ con = pb[mid_bone].constraints.new('COPY_LOCATION')
+ con.target = obj
+ con.subtarget = mbone1
+
+ con = pb[mid_bone].constraints.new('COPY_LOCATION')
+ con.target = obj
+ con.subtarget = mbone2
+ con.influence = 0.5
+
+ # Bone 1
+ con = pb[bone1].constraints.new('DAMPED_TRACK')
+ con.target = obj
+ con.subtarget = mid_bone
+
+ con = pb[bone1].constraints.new('STRETCH_TO')
+ con.target = obj
+ con.subtarget = mid_bone
+ con.rest_length = bb[bone1].length
+ if preserve_volume:
+ con.volume = 'VOLUME_XZX'
+ else:
+ con.volume = 'NO_VOLUME'
+
+ # Bone 2
+ con = pb[bone2].constraints.new('DAMPED_TRACK')
+ con.target = obj
+ con.subtarget = mid_bone
+
+ con = pb[bone2].constraints.new('STRETCH_TO')
+ con.target = obj
+ con.subtarget = mid_bone
+ con.rest_length = bb[bone2].length
+ if preserve_volume:
+ con.volume = 'VOLUME_XZX'
+ else:
+ con.volume = 'NO_VOLUME'
+
+ return tuple()
+
+>>>>>>> .merge-right.r31523
diff --git a/release/scripts/modules/rigify/tail_control.py b/release/scripts/modules/rigify/tail_control.py
index 47da9778913..50a9bb236da 100644
--- a/release/scripts/modules/rigify/tail_control.py
+++ b/release/scripts/modules/rigify/tail_control.py
@@ -12,7 +12,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ##### END GPL LICENSE BLOCK #####
@@ -22,7 +22,7 @@ import bpy
from rigify import RigifyError
from rigify_utils import bone_class_instance, copy_bone_simple
from rna_prop_ui import rna_idprop_ui_prop_get
-from mathutils import Vector, RotationMatrix
+from mathutils import Vector, Matrix
from math import radians, pi
# not used, defined for completeness
@@ -40,7 +40,7 @@ def metarig_template():
#bone.head[:] = 0.0000, -0.0306, 0.1039
#bone.tail[:] = 0.0000, -0.0306, -0.0159
#bone.roll = 0.0000
- #bone.connected = False
+ #bone.use_connect = False
#bpy.ops.object.mode_set(mode='OBJECT')
#pbone = obj.pose.bones['tail.01']
@@ -85,9 +85,9 @@ def main(obj, bone_definitions, base_names, options):
for bone_def in bone_definitions:
bone = copy_bone_simple(arm, bone_def, base_names[bone_def], parent=True).name
if i == 1: # Don't change parent of first tail bone
- eb[bone].connected = False
+ eb[bone].use_connect = False
eb[bone].parent = eb[hinge2]
- eb[bone].local_location = False
+ eb[bone].use_local_location = False
i = 1
bones += [bone]
diff --git a/release/scripts/modules/rigify/tongue.py b/release/scripts/modules/rigify/tongue.py
index b6dfe756b71..fd32f3d0556 100644
--- a/release/scripts/modules/rigify/tongue.py
+++ b/release/scripts/modules/rigify/tongue.py
@@ -37,42 +37,42 @@ def metarig_template():
#bone.head[:] = 0.0000, -0.0276, -0.1328
#bone.tail[:] = 0.0000, -0.0170, -0.0197
#bone.roll = 0.0000
- #bone.connected = False
+ #bone.use_connect = False
#bone = arm.edit_bones.new('head')
#bone.head[:] = 0.0000, -0.0170, -0.0197
#bone.tail[:] = 0.0000, 0.0726, 0.1354
#bone.roll = 0.0000
- #bone.connected = True
+ #bone.use_connect = True
#bone.parent = arm.edit_bones['body']
#bone = arm.edit_bones.new('neck.01')
#bone.head[:] = 0.0000, -0.0170, -0.0197
#bone.tail[:] = 0.0000, -0.0099, 0.0146
#bone.roll = 0.0000
- #bone.connected = False
+ #bone.use_connect = False
#bone.parent = arm.edit_bones['head']
#bone = arm.edit_bones.new('neck.02')
#bone.head[:] = 0.0000, -0.0099, 0.0146
#bone.tail[:] = 0.0000, -0.0242, 0.0514
#bone.roll = 0.0000
- #bone.connected = True
+ #bone.use_connect = True
#bone.parent = arm.edit_bones['neck.01']
#bone = arm.edit_bones.new('neck.03')
#bone.head[:] = 0.0000, -0.0242, 0.0514
#bone.tail[:] = 0.0000, -0.0417, 0.0868
#bone.roll = 0.0000
- #bone.connected = True
+ #bone.use_connect = True
#bone.parent = arm.edit_bones['neck.02']
#bone = arm.edit_bones.new('neck.04')
#bone.head[:] = 0.0000, -0.0417, 0.0868
#bone.tail[:] = 0.0000, -0.0509, 0.1190
#bone.roll = 0.0000
- #bone.connected = True
+ #bone.use_connect = True
#bone.parent = arm.edit_bones['neck.03']
#bone = arm.edit_bones.new('neck.05')
#bone.head[:] = 0.0000, -0.0509, 0.1190
#bone.tail[:] = 0.0000, -0.0537, 0.1600
#bone.roll = 0.0000
- #bone.connected = True
+ #bone.use_connect = True
#bone.parent = arm.edit_bones['neck.04']
#
#bpy.ops.object.mode_set(mode='OBJECT')
@@ -159,7 +159,7 @@ def main(obj, bone_definition, base_names, options):
# Copy the head bone and offset
ex.head_e = copy_bone_simple(arm, mt.head, "MCH-%s" % base_names[mt.head], parent=True)
- ex.head_e.connected = False
+ ex.head_e.use_connect = False
ex.head = ex.head_e.name
# offset
head_length = ex.head_e.length
@@ -168,7 +168,7 @@ def main(obj, bone_definition, base_names, options):
# Yes, use the body bone but call it a head hinge
ex.head_hinge_e = copy_bone_simple(arm, mt.body, "MCH-%s_hinge" % base_names[mt.head], parent=False)
- ex.head_hinge_e.connected = False
+ ex.head_hinge_e.use_connect = False
ex.head_hinge = ex.head_hinge_e.name
ex.head_hinge_e.head.y += head_length / 4.0
ex.head_hinge_e.tail.y += head_length / 4.0
@@ -176,7 +176,7 @@ def main(obj, bone_definition, base_names, options):
# Insert the neck socket, the head copys this loation
ex.neck_socket_e = arm.edit_bones.new("MCH-%s_socked" % neck_chain_basename)
ex.neck_socket = ex.neck_socket_e.name
- ex.neck_socket_e.connected = False
+ ex.neck_socket_e.use_connect = False
ex.neck_socket_e.parent = mt.body_e
ex.neck_socket_e.head = mt.head_e.head
ex.neck_socket_e.tail = mt.head_e.head - Vector((0.0, neck_chain_segment_length / 2.0, 0.0))
@@ -198,9 +198,9 @@ def main(obj, bone_definition, base_names, options):
neck_e_parent.roll = mt.head_e.roll
orig_parent = neck_e.parent
- neck_e.connected = False
+ neck_e.use_connect = False
neck_e.parent = neck_e_parent
- neck_e_parent.connected = False
+ neck_e_parent.use_connect = False
if i == 0:
neck_e_parent.parent = mt.body_e
@@ -346,14 +346,14 @@ def main(obj, bone_definition, base_names, options):
if "ex_layer" in options:
layer = [n==options["ex_layer"] for n in range(0,32)]
else:
- layer = list(arm.bones[bone_definition[1]].layer)
+ layer = list(arm.bones[bone_definition[1]].layers)
for attr in ex_chain.attr_names:
- getattr(ex_chain, attr + "_b").layer = layer
+ getattr(ex_chain, attr + "_b").layers = layer
for attr in ex.attr_names:
- getattr(ex, attr + "_b").layer = layer
+ getattr(ex, attr + "_b").layers = layer
- layer = list(arm.bones[bone_definition[1]].layer)
- ex.head_ctrl_b.layer = layer
+ layer = list(arm.bones[bone_definition[1]].layers)
+ ex.head_ctrl_b.layers = layer
# no blending the result of this
diff --git a/release/scripts/modules/rigify/track_dual.py b/release/scripts/modules/rigify/track_dual.py
index 38c2a86ab32..f9c48a3bfcb 100644
--- a/release/scripts/modules/rigify/track_dual.py
+++ b/release/scripts/modules/rigify/track_dual.py
@@ -35,7 +35,7 @@ RIG_TYPE = "track_dual"
# bone.head[:] = 0.0000, 0.0000, 0.0000
# bone.tail[:] = 0.0000, 0.0000, 1.0000
# bone.roll = 0.0000
-# bone.connected = False
+# bone.use_connect = False
#
# bpy.ops.object.mode_set(mode='OBJECT')
# pbone = obj.pose.bones['Bone']
@@ -76,13 +76,13 @@ def main(obj, bone_definition, base_names, options):
mbone2 = "ORG-" + options["to"]
bone_e = copy_bone_simple(obj.data, mbone1, "DEF-%s.01" % base_names[bone_definition[0]])
- bone_e.connected = False
+ bone_e.use_connect = False
bone_e.parent = eb[mbone1]
bone_e.tail = (eb[mbone1].head + eb[mbone2].head) / 2
bone1 = bone_e.name
bone_e = copy_bone_simple(obj.data, mbone2, "DEF-%s.02" % base_names[bone_definition[0]])
- bone_e.connected = False
+ bone_e.use_connect = False
bone_e.parent = eb[mbone1]
bone_e.tail = (eb[mbone1].head + eb[mbone2].head) / 2
bone2 = bone_e.name
diff --git a/release/scripts/modules/rigify/track_reverse.py b/release/scripts/modules/rigify/track_reverse.py
index 21d38c28920..a65ac0e9416 100644
--- a/release/scripts/modules/rigify/track_reverse.py
+++ b/release/scripts/modules/rigify/track_reverse.py
@@ -35,7 +35,7 @@ RIG_TYPE = "track_reverse"
# bone.head[:] = 0.0000, 0.0000, 0.0000
# bone.tail[:] = 0.0000, 0.0000, 1.0000
# bone.roll = 0.0000
-# bone.connected = False
+# bone.use_connect = False
#
# bpy.ops.object.mode_set(mode='OBJECT')
# pbone = obj.pose.bones['Bone']
@@ -78,7 +78,7 @@ def main(obj, bone_definition, base_names, options):
mbone2 = "ORG-" + options["to"]
bone_e = copy_bone_simple(obj.data, mbone2, "DEF-%s.02" % base_names[bone_definition[0]])
- bone_e.connected = False
+ bone_e.use_connect = False
bone_e.parent = eb[mbone1]
bone_e.tail = eb[mbone1].head
bone = bone_e.name
diff --git a/release/scripts/modules/rigify_utils.py b/release/scripts/modules/rigify_utils.py
index 25ab6bebf48..a270af949da 100644
--- a/release/scripts/modules/rigify_utils.py
+++ b/release/scripts/modules/rigify_utils.py
@@ -67,7 +67,7 @@ def add_stretch_to(obj, from_name, to_name, name):
con = stretch_pbone.constraints.new('STRETCH_TO')
con.target = obj
con.subtarget = to_name
- con.original_length = (head - tail).length
+ con.rest_length = (head - tail).length
con.keep_axis = 'PLANE_X'
con.volume = 'NO_VOLUME'
@@ -81,13 +81,13 @@ def copy_bone_simple(arm, from_bone, name, parent=False):
ebone_new = arm.edit_bones.new(name)
if parent:
- ebone_new.connected = ebone.connected
+ ebone_new.use_connect = ebone.use_connect
ebone_new.parent = ebone.parent
ebone_new.head = ebone.head
ebone_new.tail = ebone.tail
ebone_new.roll = ebone.roll
- ebone_new.layer = list(ebone.layer)
+ ebone_new.layers = list(ebone.layers)
return ebone_new
@@ -276,7 +276,7 @@ def write_meta_rig(obj, func_name="metarig_template"):
code.append(" bone.head[:] = %.4f, %.4f, %.4f" % bone.head.to_tuple(4))
code.append(" bone.tail[:] = %.4f, %.4f, %.4f" % bone.tail.to_tuple(4))
code.append(" bone.roll = %.4f" % bone.roll)
- code.append(" bone.connected = %s" % str(bone.connected))
+ code.append(" bone.use_connect = %s" % str(bone.use_connect))
if bone.parent:
code.append(" bone.parent = arm.edit_bones['%s']" % bone.parent.name)
diff --git a/release/scripts/modules/rna_info.py b/release/scripts/modules/rna_info.py
index 3fd70fedd8c..0a93121c559 100644
--- a/release/scripts/modules/rna_info.py
+++ b/release/scripts/modules/rna_info.py
@@ -302,6 +302,7 @@ class InfoFunctionRNA:
self.identifier = rna_func.identifier
# self.name = rna_func.name # functions have no name!
self.description = rna_func.description.strip()
+ self.is_classmethod = not rna_func.use_self
self.args = []
self.return_values = ()
@@ -313,7 +314,7 @@ class InfoFunctionRNA:
for rna_prop in rna_func.parameters.values():
prop = GetInfoPropertyRNA(rna_prop, parent_id)
- if rna_prop.use_output:
+ if rna_prop.is_output:
self.return_values.append(prop)
else:
self.args.append(prop)
@@ -594,7 +595,7 @@ def BuildRNAInfo():
op_mods = dir(bpy.ops)
for op_mod_name in sorted(op_mods):
- if op_mod_name.startswith('__') or op_mod_name in ("add", "remove"):
+ if op_mod_name.startswith('__'):
continue
op_mod = getattr(bpy.ops, op_mod_name)
@@ -625,18 +626,28 @@ def BuildRNAInfo():
if __name__ == "__main__":
import rna_info
struct = rna_info.BuildRNAInfo()[0]
- data = ""
+ data = []
for struct_id, v in sorted(struct.items()):
- struct_id_str = "".join(sid for sid in struct_id if struct_id)
- props = [(prop.identifier, prop) for prop in v.properties]
+ struct_id_str = v.identifier # "".join(sid for sid in struct_id if struct_id)
+
+ for base in v.get_bases():
+ struct_id_str = base.identifier + "|" + struct_id_str
+ props = [(prop.identifier, prop) for prop in v.properties]
for prop_id, prop in sorted(props):
- if prop.type == 'boolean':
- continue
- data += "%s.%s -> %s: %s%s %s\n" % (struct_id_str, prop.identifier, prop.identifier, prop.type, ", (read-only)" if prop.is_readonly else "", prop.description)
+ # if prop.type == 'boolean':
+ # continue
+ prop_type = prop.type
+ if prop.array_length > 0:
+ prop_type += "[%d]" % prop.array_length
+
+ data.append("%s.%s -> %s: %s%s %s" % (struct_id_str, prop.identifier, prop.identifier, prop_type, ", (read-only)" if prop.is_readonly else "", prop.description))
+ data.sort()
if bpy.app.background:
- print(data)
+ import sys
+ sys.stderr.write("\n".join(data))
+ sys.stderr.write("\n\nEOF\n")
else:
text = bpy.data.texts.new(name="api.py")
text.from_string(data)
diff --git a/release/scripts/modules/rna_prop_ui.py b/release/scripts/modules/rna_prop_ui.py
index 3e8662c275f..63762855737 100644
--- a/release/scripts/modules/rna_prop_ui.py
+++ b/release/scripts/modules/rna_prop_ui.py
@@ -124,7 +124,7 @@ def draw(layout, context, context_member, use_edit=True):
assign_props(prop, val_draw, key)
-class PropertyPanel(bpy.types.Panel):
+class PropertyPanel():
"""
The subclass should have its own poll function
and the variable '_context_path' MUST be set.
@@ -132,133 +132,10 @@ class PropertyPanel(bpy.types.Panel):
bl_label = "Custom Properties"
bl_default_closed = True
+ @classmethod
+ def poll(cls, context):
+ bool(eval("context.%s" % cls._context_path))
+
def draw(self, context):
draw(self.layout, context, self._context_path)
-
-from bpy.props import *
-
-
-rna_path = StringProperty(name="Property Edit",
- description="Property data_path edit", maxlen=1024, default="", options={'HIDDEN'})
-
-rna_value = StringProperty(name="Property Value",
- description="Property value edit", maxlen=1024, default="")
-
-rna_property = StringProperty(name="Property Name",
- description="Property name edit", maxlen=1024, default="")
-
-rna_min = FloatProperty(name="Min", default=0.0, precision=3)
-rna_max = FloatProperty(name="Max", default=1.0, precision=3)
-
-
-class WM_OT_properties_edit(bpy.types.Operator):
- '''Internal use (edit a property data_path)'''
- bl_idname = "wm.properties_edit"
- bl_label = "Edit Property"
-
- data_path = rna_path
- property = rna_property
- value = rna_value
- min = rna_min
- max = rna_max
- description = StringProperty(name="Tip", default="")
-
- def execute(self, context):
- data_path = self.properties.data_path
- value = self.properties.value
- prop = self.properties.property
- prop_old = self._last_prop[0]
-
- try:
- value_eval = eval(value)
- except:
- value_eval = value
-
- # First remove
- item = eval("context.%s" % data_path)
-
- rna_idprop_ui_prop_clear(item, prop_old)
- exec_str = "del item['%s']" % prop_old
- # print(exec_str)
- exec(exec_str)
-
-
- # Reassign
- exec_str = "item['%s'] = %s" % (prop, repr(value_eval))
- # print(exec_str)
- exec(exec_str)
- self._last_prop[:] = [prop]
-
- prop_type = type(item[prop])
-
- prop_ui = rna_idprop_ui_prop_get(item, prop)
-
- if prop_type in (float, int):
-
- prop_ui['soft_min'] = prop_ui['min'] = prop_type(self.properties.min)
- prop_ui['soft_max'] = prop_ui['max'] = prop_type(self.properties.max)
-
- prop_ui['description'] = self.properties.description
-
- return {'FINISHED'}
-
- def invoke(self, context, event):
-
- self._last_prop = [self.properties.property]
-
- item = eval("context.%s" % self.properties.data_path)
-
- # setup defaults
- prop_ui = rna_idprop_ui_prop_get(item, self.properties.property, False) # dont create
- if prop_ui:
- self.properties.min = prop_ui.get("min", -1000000000)
- self.properties.max = prop_ui.get("max", 1000000000)
- self.properties.description = prop_ui.get("description", "")
-
- wm = context.manager
- # This crashes, TODO - fix
- #return wm.invoke_props_popup(self, event)
-
- wm.invoke_props_popup(self, event)
- return {'RUNNING_MODAL'}
-
-
-class WM_OT_properties_add(bpy.types.Operator):
- '''Internal use (edit a property data_path)'''
- bl_idname = "wm.properties_add"
- bl_label = "Add Property"
-
- data_path = rna_path
-
- def execute(self, context):
- item = eval("context.%s" % self.properties.data_path)
-
- def unique_name(names):
- prop = 'prop'
- prop_new = prop
- i = 1
- while prop_new in names:
- prop_new = prop + str(i)
- i += 1
-
- return prop_new
-
- property = unique_name(item.keys())
-
- item[property] = 1.0
- return {'FINISHED'}
-
-
-class WM_OT_properties_remove(bpy.types.Operator):
- '''Internal use (edit a property data_path)'''
- bl_idname = "wm.properties_remove"
- bl_label = "Remove Property"
-
- data_path = rna_path
- property = rna_property
-
- def execute(self, context):
- item = eval("context.%s" % self.properties.data_path)
- del item[self.properties.property]
- return {'FINISHED'}
diff --git a/release/scripts/op/add_armature_human.py b/release/scripts/op/add_armature_human.py
index 164bbfb100b..e0558e84315 100644
--- a/release/scripts/op/add_armature_human.py
+++ b/release/scripts/op/add_armature_human.py
@@ -33,426 +33,426 @@ def metarig_template():
bone.head[:] = -0.0000, -0.0145, 1.1263
bone.tail[:] = -0.0000, -0.0145, 0.9563
bone.roll = 3.1416
- bone.connected = False
+ bone.use_connect = False
bone = arm.edit_bones.new('torso')
bone.head[:] = -0.0000, -0.0145, 1.1263
bone.tail[:] = -0.0000, -0.0145, 1.2863
bone.roll = 3.1416
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['pelvis']
bone = arm.edit_bones.new('spine.01')
bone.head[:] = 0.0000, 0.0394, 0.9688
bone.tail[:] = -0.0000, -0.0145, 1.1263
bone.roll = 0.0000
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['torso']
bone = arm.edit_bones.new('spine.02')
bone.head[:] = -0.0000, -0.0145, 1.1263
bone.tail[:] = -0.0000, -0.0213, 1.2884
bone.roll = -0.0000
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['spine.01']
bone = arm.edit_bones.new('thigh.L')
bone.head[:] = 0.0933, -0.0421, 1.0434
bone.tail[:] = 0.0933, -0.0516, 0.5848
bone.roll = 0.0000
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['spine.01']
bone = arm.edit_bones.new('thigh.R')
bone.head[:] = -0.0933, -0.0421, 1.0434
bone.tail[:] = -0.0933, -0.0516, 0.5848
bone.roll = -0.0000
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['spine.01']
bone = arm.edit_bones.new('spine.03')
bone.head[:] = -0.0000, -0.0213, 1.2884
bone.tail[:] = -0.0000, 0.0160, 1.3705
bone.roll = -0.0000
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['spine.02']
bone = arm.edit_bones.new('shin.L')
bone.head[:] = 0.0933, -0.0516, 0.5848
bone.tail[:] = 0.0915, 0.0100, 0.1374
bone.roll = 0.0034
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['thigh.L']
bone = arm.edit_bones.new('shin.R')
bone.head[:] = -0.0933, -0.0516, 0.5848
bone.tail[:] = -0.0915, 0.0100, 0.1374
bone.roll = -0.0034
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['thigh.R']
bone = arm.edit_bones.new('spine.04')
bone.head[:] = -0.0000, 0.0160, 1.3705
bone.tail[:] = -0.0000, 0.0590, 1.4497
bone.roll = -0.0000
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['spine.03']
bone = arm.edit_bones.new('foot.L')
bone.head[:] = 0.0915, 0.0100, 0.1374
bone.tail[:] = 0.1033, -0.0968, 0.0510
bone.roll = 2.8964
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['shin.L']
bone = arm.edit_bones.new('foot.R')
bone.head[:] = -0.0915, 0.0100, 0.1374
bone.tail[:] = -0.1033, -0.0968, 0.0510
bone.roll = -2.8793
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['shin.R']
bone = arm.edit_bones.new('neck_base')
bone.head[:] = -0.0000, 0.0590, 1.4497
bone.tail[:] = -0.0000, 0.0401, 1.5389
bone.roll = -0.0000
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['spine.04']
bone = arm.edit_bones.new('toe.L')
bone.head[:] = 0.1033, -0.0968, 0.0510
bone.tail[:] = 0.1136, -0.1848, 0.0510
bone.roll = 0.0001
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['foot.L']
bone = arm.edit_bones.new('heel.L')
bone.head[:] = 0.0809, 0.0969, -0.0000
bone.tail[:] = 0.1020, -0.0846, -0.0000
bone.roll = -0.0001
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['foot.L']
bone = arm.edit_bones.new('toe.R')
bone.head[:] = -0.1033, -0.0968, 0.0510
bone.tail[:] = -0.1136, -0.1848, 0.0510
bone.roll = -0.0002
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['foot.R']
bone = arm.edit_bones.new('heel.R')
bone.head[:] = -0.0809, 0.0969, -0.0000
bone.tail[:] = -0.1020, -0.0846, -0.0000
bone.roll = -0.0000
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['foot.R']
bone = arm.edit_bones.new('head')
bone.head[:] = -0.0000, 0.0401, 1.5389
bone.tail[:] = -0.0000, 0.0401, 1.5979
bone.roll = 3.1416
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['neck_base']
bone = arm.edit_bones.new('DLT-shoulder.L')
bone.head[:] = 0.0141, -0.0346, 1.4991
bone.tail[:] = 0.1226, 0.0054, 1.4991
bone.roll = 0.0005
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['neck_base']
bone = arm.edit_bones.new('DLT-shoulder.R')
bone.head[:] = -0.0141, -0.0346, 1.4991
bone.tail[:] = -0.1226, 0.0054, 1.4991
bone.roll = -0.0005
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['neck_base']
bone = arm.edit_bones.new('neck.01')
bone.head[:] = -0.0000, 0.0401, 1.5389
bone.tail[:] = -0.0000, 0.0176, 1.5916
bone.roll = 0.0000
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['head']
bone = arm.edit_bones.new('shoulder.L')
bone.head[:] = 0.0141, -0.0346, 1.4991
bone.tail[:] = 0.1226, 0.0216, 1.5270
bone.roll = -0.1225
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['DLT-shoulder.L']
bone = arm.edit_bones.new('shoulder.R')
bone.head[:] = -0.0141, -0.0346, 1.4991
bone.tail[:] = -0.1226, 0.0216, 1.5270
bone.roll = 0.0849
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['DLT-shoulder.R']
bone = arm.edit_bones.new('neck.02')
bone.head[:] = -0.0000, 0.0176, 1.5916
bone.tail[:] = -0.0000, 0.0001, 1.6499
bone.roll = 0.0000
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['neck.01']
bone = arm.edit_bones.new('DLT-upper_arm.L')
bone.head[:] = 0.1482, 0.0483, 1.4943
bone.tail[:] = 0.2586, 0.1057, 1.5124
bone.roll = 1.4969
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['shoulder.L']
bone = arm.edit_bones.new('DLT-upper_arm.R')
bone.head[:] = -0.1482, 0.0483, 1.4943
bone.tail[:] = -0.2586, 0.1057, 1.5124
bone.roll = -1.4482
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['shoulder.R']
bone = arm.edit_bones.new('neck.03')
bone.head[:] = -0.0000, 0.0001, 1.6499
bone.tail[:] = -0.0000, 0.0001, 1.8522
bone.roll = 0.0000
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['neck.02']
bone = arm.edit_bones.new('upper_arm.L')
bone.head[:] = 0.1482, 0.0483, 1.4943
bone.tail[:] = 0.3929, 0.0522, 1.4801
bone.roll = 1.6281
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['DLT-upper_arm.L']
bone = arm.edit_bones.new('upper_arm.R')
bone.head[:] = -0.1482, 0.0483, 1.4943
bone.tail[:] = -0.3929, 0.0522, 1.4801
bone.roll = -1.6281
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['DLT-upper_arm.R']
bone = arm.edit_bones.new('forearm.L')
bone.head[:] = 0.3929, 0.0522, 1.4801
bone.tail[:] = 0.6198, 0.0364, 1.4906
bone.roll = 1.5240
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['upper_arm.L']
bone = arm.edit_bones.new('forearm.R')
bone.head[:] = -0.3929, 0.0522, 1.4801
bone.tail[:] = -0.6198, 0.0364, 1.4906
bone.roll = -1.5219
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['upper_arm.R']
bone = arm.edit_bones.new('hand.L')
bone.head[:] = 0.6198, 0.0364, 1.4906
bone.tail[:] = 0.6592, 0.0364, 1.4853
bone.roll = -3.0065
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['forearm.L']
bone = arm.edit_bones.new('hand.R')
bone.head[:] = -0.6198, 0.0364, 1.4906
bone.tail[:] = -0.6592, 0.0364, 1.4853
bone.roll = 3.0065
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['forearm.R']
bone = arm.edit_bones.new('palm.04.L')
bone.head[:] = 0.6514, 0.0658, 1.4906
bone.tail[:] = 0.7287, 0.0810, 1.4747
bone.roll = -3.0715
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['hand.L']
bone = arm.edit_bones.new('palm.03.L')
bone.head[:] = 0.6533, 0.0481, 1.4943
bone.tail[:] = 0.7386, 0.0553, 1.4781
bone.roll = -3.0290
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['hand.L']
bone = arm.edit_bones.new('palm.02.L')
bone.head[:] = 0.6539, 0.0305, 1.4967
bone.tail[:] = 0.7420, 0.0250, 1.4835
bone.roll = -3.0669
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['hand.L']
bone = arm.edit_bones.new('palm.01.L')
bone.head[:] = 0.6514, 0.0116, 1.4961
bone.tail[:] = 0.7361, -0.0074, 1.4823
bone.roll = -2.9422
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['hand.L']
bone = arm.edit_bones.new('thumb.01.L')
bone.head[:] = 0.6380, -0.0005, 1.4848
bone.tail[:] = 0.6757, -0.0408, 1.4538
bone.roll = -0.7041
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['hand.L']
bone = arm.edit_bones.new('palm.04.R')
bone.head[:] = -0.6514, 0.0658, 1.4906
bone.tail[:] = -0.7287, 0.0810, 1.4747
bone.roll = 3.0715
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['hand.R']
bone = arm.edit_bones.new('palm.03.R')
bone.head[:] = -0.6533, 0.0481, 1.4943
bone.tail[:] = -0.7386, 0.0553, 1.4781
bone.roll = 3.0290
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['hand.R']
bone = arm.edit_bones.new('palm.02.R')
bone.head[:] = -0.6539, 0.0305, 1.4967
bone.tail[:] = -0.7420, 0.0250, 1.4835
bone.roll = 3.0669
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['hand.R']
bone = arm.edit_bones.new('thumb.01.R')
bone.head[:] = -0.6380, -0.0005, 1.4848
bone.tail[:] = -0.6757, -0.0408, 1.4538
bone.roll = 0.7041
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['hand.R']
bone = arm.edit_bones.new('palm.01.R')
bone.head[:] = -0.6514, 0.0116, 1.4961
bone.tail[:] = -0.7361, -0.0074, 1.4823
bone.roll = 2.9332
- bone.connected = False
+ bone.use_connect = False
bone.parent = arm.edit_bones['hand.R']
bone = arm.edit_bones.new('finger_pinky.01.L')
bone.head[:] = 0.7287, 0.0810, 1.4747
bone.tail[:] = 0.7698, 0.0947, 1.4635
bone.roll = -3.0949
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['palm.04.L']
bone = arm.edit_bones.new('finger_ring.01.L')
bone.head[:] = 0.7386, 0.0553, 1.4781
bone.tail[:] = 0.7890, 0.0615, 1.4667
bone.roll = -3.0081
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['palm.03.L']
bone = arm.edit_bones.new('finger_middle.01.L')
bone.head[:] = 0.7420, 0.0250, 1.4835
bone.tail[:] = 0.7975, 0.0221, 1.4712
bone.roll = -2.9982
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['palm.02.L']
bone = arm.edit_bones.new('finger_index.01.L')
bone.head[:] = 0.7361, -0.0074, 1.4823
bone.tail[:] = 0.7843, -0.0204, 1.4718
bone.roll = -3.0021
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['palm.01.L']
bone = arm.edit_bones.new('thumb.02.L')
bone.head[:] = 0.6757, -0.0408, 1.4538
bone.tail[:] = 0.6958, -0.0568, 1.4376
bone.roll = -0.6963
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['thumb.01.L']
bone = arm.edit_bones.new('finger_pinky.01.R')
bone.head[:] = -0.7287, 0.0810, 1.4747
bone.tail[:] = -0.7698, 0.0947, 1.4635
bone.roll = 3.0949
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['palm.04.R']
bone = arm.edit_bones.new('finger_ring.01.R')
bone.head[:] = -0.7386, 0.0553, 1.4781
bone.tail[:] = -0.7890, 0.0615, 1.4667
bone.roll = 2.9892
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['palm.03.R']
bone = arm.edit_bones.new('finger_middle.01.R')
bone.head[:] = -0.7420, 0.0250, 1.4835
bone.tail[:] = -0.7975, 0.0221, 1.4712
bone.roll = 2.9816
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['palm.02.R']
bone = arm.edit_bones.new('thumb.02.R')
bone.head[:] = -0.6757, -0.0408, 1.4538
bone.tail[:] = -0.6958, -0.0568, 1.4376
bone.roll = 0.6963
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['thumb.01.R']
bone = arm.edit_bones.new('finger_index.01.R')
bone.head[:] = -0.7361, -0.0074, 1.4823
bone.tail[:] = -0.7843, -0.0204, 1.4718
bone.roll = 2.9498
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['palm.01.R']
bone = arm.edit_bones.new('finger_pinky.02.L')
bone.head[:] = 0.7698, 0.0947, 1.4635
bone.tail[:] = 0.7910, 0.1018, 1.4577
bone.roll = -3.0949
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['finger_pinky.01.L']
bone = arm.edit_bones.new('finger_ring.02.L')
bone.head[:] = 0.7890, 0.0615, 1.4667
bone.tail[:] = 0.8177, 0.0650, 1.4600
bone.roll = -3.0006
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['finger_ring.01.L']
bone = arm.edit_bones.new('finger_middle.02.L')
bone.head[:] = 0.7975, 0.0221, 1.4712
bone.tail[:] = 0.8289, 0.0206, 1.4643
bone.roll = -2.9995
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['finger_middle.01.L']
bone = arm.edit_bones.new('finger_index.02.L')
bone.head[:] = 0.7843, -0.0204, 1.4718
bone.tail[:] = 0.8117, -0.0275, 1.4660
bone.roll = -3.0064
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['finger_index.01.L']
bone = arm.edit_bones.new('thumb.03.L')
bone.head[:] = 0.6958, -0.0568, 1.4376
bone.tail[:] = 0.7196, -0.0671, 1.4210
bone.roll = -0.8072
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['thumb.02.L']
bone = arm.edit_bones.new('finger_pinky.02.R')
bone.head[:] = -0.7698, 0.0947, 1.4635
bone.tail[:] = -0.7910, 0.1018, 1.4577
bone.roll = 3.0949
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['finger_pinky.01.R']
bone = arm.edit_bones.new('finger_ring.02.R')
bone.head[:] = -0.7890, 0.0615, 1.4667
bone.tail[:] = -0.8177, 0.0650, 1.4600
bone.roll = 3.0341
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['finger_ring.01.R']
bone = arm.edit_bones.new('finger_middle.02.R')
bone.head[:] = -0.7975, 0.0221, 1.4712
bone.tail[:] = -0.8289, 0.0206, 1.4643
bone.roll = 3.0291
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['finger_middle.01.R']
bone = arm.edit_bones.new('thumb.03.R')
bone.head[:] = -0.6958, -0.0568, 1.4376
bone.tail[:] = -0.7196, -0.0671, 1.4210
bone.roll = 0.8072
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['thumb.02.R']
bone = arm.edit_bones.new('finger_index.02.R')
bone.head[:] = -0.7843, -0.0204, 1.4718
bone.tail[:] = -0.8117, -0.0275, 1.4660
bone.roll = 3.0705
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['finger_index.01.R']
bone = arm.edit_bones.new('finger_pinky.03.L')
bone.head[:] = 0.7910, 0.1018, 1.4577
bone.tail[:] = 0.8109, 0.1085, 1.4523
bone.roll = -3.0949
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['finger_pinky.02.L']
bone = arm.edit_bones.new('finger_ring.03.L')
bone.head[:] = 0.8177, 0.0650, 1.4600
bone.tail[:] = 0.8396, 0.0677, 1.4544
bone.roll = -2.9819
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['finger_ring.02.L']
bone = arm.edit_bones.new('finger_middle.03.L')
bone.head[:] = 0.8289, 0.0206, 1.4643
bone.tail[:] = 0.8534, 0.0193, 1.4589
bone.roll = -3.0004
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['finger_middle.02.L']
bone = arm.edit_bones.new('finger_index.03.L')
bone.head[:] = 0.8117, -0.0275, 1.4660
bone.tail[:] = 0.8331, -0.0333, 1.4615
bone.roll = -3.0103
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['finger_index.02.L']
bone = arm.edit_bones.new('finger_pinky.03.R')
bone.head[:] = -0.7910, 0.1018, 1.4577
bone.tail[:] = -0.8109, 0.1085, 1.4523
bone.roll = 3.0949
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['finger_pinky.02.R']
bone = arm.edit_bones.new('finger_ring.03.R')
bone.head[:] = -0.8177, 0.0650, 1.4600
bone.tail[:] = -0.8396, 0.0677, 1.4544
bone.roll = 2.9819
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['finger_ring.02.R']
bone = arm.edit_bones.new('finger_middle.03.R')
bone.head[:] = -0.8289, 0.0206, 1.4643
bone.tail[:] = -0.8534, 0.0193, 1.4589
bone.roll = 3.0004
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['finger_middle.02.R']
bone = arm.edit_bones.new('finger_index.03.R')
bone.head[:] = -0.8117, -0.0275, 1.4660
bone.tail[:] = -0.8331, -0.0333, 1.4615
bone.roll = 2.9917
- bone.connected = True
+ bone.use_connect = True
bone.parent = arm.edit_bones['finger_index.02.R']
bpy.ops.object.mode_set(mode='OBJECT')
@@ -487,11 +487,11 @@ def metarig_template():
pbone = obj.pose.bones['shoulder.L']
pbone['type'] = 'copy'
pbone = obj.pose.bones['shoulder.L']
- pbone['copy.layer'] = 1
+ pbone['copy.layers'] = 1
pbone = obj.pose.bones['shoulder.R']
pbone['type'] = 'copy'
pbone = obj.pose.bones['shoulder.R']
- pbone['copy.layer'] = 1
+ pbone['copy.layers'] = 1
pbone = obj.pose.bones['DLT-upper_arm.L']
pbone['type'] = 'delta'
pbone = obj.pose.bones['DLT-upper_arm.R']
@@ -515,7 +515,7 @@ def metarig_template():
pbone = obj.pose.bones['palm.01.L']
pbone['type'] = 'palm_curl'
pbone = obj.pose.bones['palm.01.L']
- pbone['palm_curl.layer'] = 5
+ pbone['palm_curl.layers'] = 5
pbone = obj.pose.bones['thumb.01.L']
pbone['type'] = 'finger_curl'
pbone = obj.pose.bones['thumb.01.L']
@@ -531,7 +531,7 @@ def metarig_template():
pbone = obj.pose.bones['palm.01.R']
pbone['type'] = 'palm_curl'
pbone = obj.pose.bones['palm.01.R']
- pbone['palm_curl.layer'] = 5
+ pbone['palm_curl.layers'] = 5
pbone = obj.pose.bones['finger_pinky.01.L']
pbone['type'] = 'finger_curl'
pbone = obj.pose.bones['finger_pinky.01.L']
@@ -606,12 +606,10 @@ menu_func = (lambda self, context: self.layout.operator(AddHuman.bl_idname,
def register():
- bpy.types.register(AddHuman)
bpy.types.INFO_MT_armature_add.append(menu_func)
def unregister():
- bpy.types.unregister(AddHuman)
bpy.types.INFO_MT_armature_add.remove(menu_func)
if __name__ == "__main__":
diff --git a/release/scripts/op/add_mesh_torus.py b/release/scripts/op/add_mesh_torus.py
index 16bf4e1c92c..e19f2b4e18c 100644
--- a/release/scripts/op/add_mesh_torus.py
+++ b/release/scripts/op/add_mesh_torus.py
@@ -122,8 +122,8 @@ class AddTorus(bpy.types.Operator):
mesh = bpy.data.meshes.new("Torus")
mesh.add_geometry(int(len(verts_loc) / 3), 0, int(len(faces) / 4))
- mesh.verts.foreach_set("co", verts_loc)
- mesh.faces.foreach_set("verts_raw", faces)
+ mesh.vertices.foreach_set("co", verts_loc)
+ mesh.faces.foreach_set("vertices_raw", faces)
mesh.update()
import add_object_utils
@@ -137,12 +137,10 @@ def menu_func(self, context):
def register():
- bpy.types.register(AddTorus)
bpy.types.INFO_MT_mesh_add.append(menu_func)
def unregister():
- bpy.types.unregister(AddTorus)
bpy.types.INFO_MT_mesh_add.remove(menu_func)
if __name__ == "__main__":
diff --git a/release/scripts/op/fcurve_euler_filter.py b/release/scripts/op/fcurve_euler_filter.py
index bba4576ef73..a2730e16843 100644
--- a/release/scripts/op/fcurve_euler_filter.py
+++ b/release/scripts/op/fcurve_euler_filter.py
@@ -7,7 +7,7 @@ def main(context):
keys = []
for k in fcv.keyframe_points:
- keys.append([k.handle1.copy(), k.co.copy(), k.handle2.copy()])
+ keys.append([k.handle_left.copy(), k.co.copy(), k.handle_right.copy()])
print(keys)
for i in range(len(keys)):
@@ -34,13 +34,13 @@ def main(context):
for i in range(len(keys)):
for x in range(2):
- fcv.keyframe_points[i].handle1[x] = keys[i][0][x]
+ fcv.keyframe_points[i].handle_left[x] = keys[i][0][x]
fcv.keyframe_points[i].co[x] = keys[i][1][x]
- fcv.keyframe_points[i].handle2[x] = keys[i][2][x]
+ fcv.keyframe_points[i].handle_right[x] = keys[i][2][x]
flist = bpy.context.active_object.animation_data.action.fcurves
for f in flist:
- if f.selected and f.data_path.endswith("rotation_euler"):
+ if f.select and f.data_path.endswith("rotation_euler"):
cleanupEulCurve(f)
class DiscontFilterOp(bpy.types.Operator):
@@ -48,7 +48,8 @@ class DiscontFilterOp(bpy.types.Operator):
bl_idname = "graph.euler_filter"
bl_label = "Filter out discontinuities in the active fcurves"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return context.active_object != None
def execute(self, context):
@@ -56,10 +57,10 @@ class DiscontFilterOp(bpy.types.Operator):
return {'FINISHED'}
def register():
- bpy.types.register(DiscontFilterOp)
+ pass
def unregister():
- bpy.types.unregister(DiscontFilterOp)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/op/image.py b/release/scripts/op/image.py
index be583012d7a..c8160ded9a4 100644
--- a/release/scripts/op/image.py
+++ b/release/scripts/op/image.py
@@ -56,13 +56,15 @@ class EditExternally(bpy.types.Operator):
return image_editor
def execute(self, context):
+ import os
import subprocess
- filepath = self.properties.filepath
- image_editor = self._editor_guess(context)
+ filepath = bpy.path.abspath(self.properties.filepath)
+
+ if not os.path.exists(filepath):
+ self.report('ERROR', "Image path '%s' not found." % filepath)
+ return {'CANCELLED'}
- cmd = []
- cmd.extend(image_editor)
- cmd.append(bpy.utils.expandpath(filepath))
+ cmd = self._editor_guess(context) + [filepath]
subprocess.Popen(cmd)
@@ -90,8 +92,8 @@ class SaveDirty(bpy.types.Operator):
def execute(self, context):
unique_paths = set()
for image in bpy.data.images:
- if image.dirty:
- filepath = bpy.utils.expandpath(image.filepath)
+ if image.is_dirty:
+ filepath = bpy.path.abspath(image.filepath)
if "\\" not in filepath and "/" not in filepath:
self.report({'WARNING'}, "Invalid path: " + filepath)
elif filepath in unique_paths:
@@ -133,7 +135,7 @@ class ProjectEdit(bpy.types.Operator):
filepath = os.path.basename(bpy.data.filepath)
filepath = os.path.splitext(filepath)[0]
- # filepath = bpy.utils.clean_name(filepath) # fixes <memory> rubbish, needs checking
+ # filepath = bpy.path.clean_name(filepath) # fixes <memory> rubbish, needs checking
if filepath.startswith(".") or filepath == "":
# TODO, have a way to check if the file is saved, assume .B25.blend
@@ -145,12 +147,12 @@ class ProjectEdit(bpy.types.Operator):
obj = context.object
if obj:
- filepath += "_" + bpy.utils.clean_name(obj.name)
+ filepath += "_" + bpy.path.clean_name(obj.name)
filepath_final = filepath + "." + EXT
i = 0
- while os.path.exists(bpy.utils.expandpath(filepath_final)):
+ while os.path.exists(bpy.path.abspath(filepath_final)):
filepath_final = filepath + ("%.3d.%s" % (i, EXT))
i += 1
@@ -186,23 +188,12 @@ class ProjectApply(bpy.types.Operator):
return {'FINISHED'}
-classes = [
- EditExternally,
- SaveDirty,
- ProjectEdit,
- ProjectApply]
-
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
-
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/op/mesh.py b/release/scripts/op/mesh.py
index 78ca9a18cdc..9e684cea9c2 100644
--- a/release/scripts/op/mesh.py
+++ b/release/scripts/op/mesh.py
@@ -28,7 +28,8 @@ class MeshSelectInteriorFaces(bpy.types.Operator):
bl_label = "Select Interior Faces"
bl_options = {'REGISTER', 'UNDO'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
ob = context.active_object
return (ob and ob.type == 'MESH')
@@ -54,9 +55,9 @@ class MeshSelectInteriorFaces(bpy.types.Operator):
for index, face in enumerate(face_list):
if(test_interior(index)):
- face.selected = True
+ face.select = True
else:
- face.selected = False
+ face.select = False
if is_editmode:
bpy.ops.object.mode_set(mode='EDIT', toggle=False)
@@ -69,7 +70,8 @@ class MeshMirrorUV(bpy.types.Operator):
bl_label = "Copy Mirrored UV coords"
bl_options = {'REGISTER', 'UNDO'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
ob = context.active_object
return (ob and ob.type == 'MESH')
@@ -89,7 +91,7 @@ class MeshMirrorUV(bpy.types.Operator):
mirror_gt = {}
mirror_lt = {}
- vcos = [v.co.to_tuple(5) for v in mesh.verts]
+ vcos = [v.co.to_tuple(5) for v in mesh.vertices]
for i, co in enumerate(vcos):
if co[0] > 0.0:
@@ -100,7 +102,7 @@ class MeshMirrorUV(bpy.types.Operator):
mirror_gt[co] = i
mirror_lt[co] = i
- #for i, v in enumerate(mesh.verts):
+ #for i, v in enumerate(mesh.vertices):
vmap = {}
for mirror_a, mirror_b in (mirror_gt, mirror_lt), (mirror_lt, mirror_gt):
for co, i in mirror_a.items():
@@ -122,20 +124,20 @@ class MeshMirrorUV(bpy.types.Operator):
# as a list
faces = mesh.faces[:]
- fuvsel = [(False not in uv.uv_selected) for uv in active_uv_layer]
+ fuvsel = [(False not in uv.select_uv) for uv in active_uv_layer]
fcents = [f.center for f in faces]
# find mirror faces
mirror_fm = {}
for i, f in enumerate(faces):
- verts = f.verts[:]
+ verts = f.vertices[:]
verts.sort()
verts = tuple(verts)
mirror_fm[verts] = i
fmap = {}
for i, f in enumerate(faces):
- verts = [vmap.get(j) for j in f.verts]
+ verts = [vmap.get(j) for j in f.vertices]
if None not in verts:
verts.sort()
j = mirror_fm.get(tuple(verts))
@@ -157,8 +159,8 @@ class MeshMirrorUV(bpy.types.Operator):
uv2 = fuvs_cpy[j]
# get the correct rotation
- v1 = faces[j].verts[:]
- v2 = [vmap[k] for k in faces[i].verts[:]]
+ v1 = faces[j].vertices[:]
+ v2 = [vmap[k] for k in faces[i].vertices[:]]
for k in range(len(uv1)):
@@ -172,22 +174,12 @@ class MeshMirrorUV(bpy.types.Operator):
return {'FINISHED'}
-# Register the operator
-classes = [
- MeshSelectInteriorFaces,
- MeshMirrorUV]
-
-
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/op/nla.py b/release/scripts/op/nla.py
index d0c53758ba9..44bd5d91e32 100644
--- a/release/scripts/op/nla.py
+++ b/release/scripts/op/nla.py
@@ -100,7 +100,7 @@ def bake(frame_start, frame_end, step=1, only_selected=False):
pose_items = pose.bones.items()
for name, pbone in pose_items:
- if only_selected and not pbone.selected:
+ if only_selected and not pbone.select:
continue
for f in frame_range:
@@ -150,7 +150,7 @@ class BakeAction(bpy.types.Operator):
def execute(self, context):
props = self.properties
- action = bake(props.frame_start, props.frame_end, props.step, props.only_selected)
+ action = bake(props.frame_start, props.frame_end, props.step, props.show_only_selected)
# basic cleanup, could move elsewhere
for fcu in action.fcurves:
@@ -178,12 +178,12 @@ class BakeAction(bpy.types.Operator):
def register():
- bpy.types.register(BakeAction)
+ pass
# bpy.types.INFO_MT_mesh_add.append(menu_func)
def unregister():
- bpy.types.unregister(BakeAction)
+ pass
# bpy.types.INFO_MT_mesh_add.remove(menu_func)
if __name__ == "__main__":
diff --git a/release/scripts/op/object.py b/release/scripts/op/object.py
index b16d2b0dcf2..56c43c0728c 100644
--- a/release/scripts/op/object.py
+++ b/release/scripts/op/object.py
@@ -52,9 +52,9 @@ class SelectPattern(bpy.types.Operator):
# Can be pose bones or objects
for item in items:
if pattern_match(item.name, self.properties.pattern):
- item.selected = True
+ item.select = True
elif not self.properties.extend:
- item.selected = False
+ item.select = False
return {'FINISHED'}
@@ -80,7 +80,8 @@ class SelectCamera(bpy.types.Operator):
bl_label = "Select Camera"
bl_options = {'REGISTER', 'UNDO'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return context.scene.camera is not None
def execute(self, context):
@@ -90,7 +91,7 @@ class SelectCamera(bpy.types.Operator):
self.report({'WARNING'}, "Active camera is not in this scene")
context.scene.objects.active = camera
- camera.selected = True
+ camera.select = True
return {'FINISHED'}
@@ -109,48 +110,51 @@ class SelectHierarchy(bpy.types.Operator):
extend = BoolProperty(name="Extend", description="Extend the existing selection", default=False)
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return context.object
def execute(self, context):
- objs = context.selected_objects
+ select_new = []
+ act_new = None
+
+
+ selected_objects = context.selected_objects
obj_act = context.object
- if context.object not in objs:
- objs.append(context.object)
-
- if not self.properties.extend:
- # for obj in objs:
- # obj.selected = False
- bpy.ops.object.select_all(action='DESELECT')
+ if context.object not in selected_objects:
+ selected_objects.append(context.object)
if self.properties.direction == 'PARENT':
- parents = []
- for obj in objs:
+ for obj in selected_objects:
parent = obj.parent
if parent:
- parents.append(parent)
-
if obj_act == obj:
- context.scene.objects.active = parent
+ act_new = parent
- parent.selected = True
-
- if parents:
- return {'CANCELLED'}
+ select_new.append(parent)
else:
- children = []
- for obj in objs:
- children += list(obj.children)
- for obj_iter in children:
- obj_iter.selected = True
+ for obj in selected_objects:
+ select_new.extend(obj.children)
- children.sort(key=lambda obj_iter: obj_iter.name)
- context.scene.objects.active = children[0]
+ if select_new:
+ select_new.sort(key=lambda obj_iter: obj_iter.name)
+ act_new = select_new[0]
- return {'FINISHED'}
+ # dont edit any object settings above this
+ if select_new:
+ if not self.properties.extend:
+ bpy.ops.object.select_all(action='DESELECT')
+
+ for obj in select_new:
+ obj.select = True
+
+ context.scene.objects.active = act_new
+ return {'FINISHED'}
+
+ return {'CANCELLED'}
class SubdivisionSet(bpy.types.Operator):
@@ -165,7 +169,8 @@ class SubdivisionSet(bpy.types.Operator):
relative = BoolProperty(name="Relative", description="Apply the subsurf level as an offset relative to the current level", default=False)
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
obs = context.selected_editable_objects
return (obs is not None)
@@ -251,7 +256,7 @@ class ShapeTransfer(bpy.types.Operator):
key = ob.add_shape_key(from_mix=False) # we need a rest
key.name = name
ob.active_shape_key_index = len(me.shape_keys.keys) - 1
- ob.shape_key_lock = True
+ ob.show_shape_key = True
from geometry import BarycentricTransform
from mathutils import Vector
@@ -264,28 +269,28 @@ class ShapeTransfer(bpy.types.Operator):
orig_shape_coords = me_cos(ob_act.active_shape_key.data)
- orig_normals = me_nos(me.verts)
- # orig_coords = me_cos(me.verts) # the actual mverts location isnt as relyable as the base shape :S
+ orig_normals = me_nos(me.vertices)
+ # orig_coords = me_cos(me.vertices) # the actual mverts location isnt as relyable as the base shape :S
orig_coords = me_cos(me.shape_keys.keys[0].data)
for ob_other in objects:
me_other = ob_other.data
- if len(me_other.verts) != len(me.verts):
+ if len(me_other.vertices) != len(me.vertices):
self.report({'WARNING'}, "Skipping '%s', vertex count differs" % ob_other.name)
continue
- target_normals = me_nos(me_other.verts)
+ target_normals = me_nos(me_other.vertices)
if me_other.shape_keys:
target_coords = me_cos(me_other.shape_keys.keys[0].data)
else:
- target_coords = me_cos(me_other.verts)
+ target_coords = me_cos(me_other.vertices)
ob_add_shape(ob_other, orig_key_name)
# editing the final coords, only list that stores wrapped coords
target_shape_coords = [v.co for v in ob_other.active_shape_key.data]
- median_coords = [[] for i in range(len(me.verts))]
+ median_coords = [[] for i in range(len(me.vertices))]
# Method 1, edge
if mode == 'OFFSET':
@@ -294,7 +299,7 @@ class ShapeTransfer(bpy.types.Operator):
elif mode == 'RELATIVE_FACE':
for face in me.faces:
- i1, i2, i3, i4 = face.verts_raw
+ i1, i2, i3, i4 = face.vertices_raw
if i4 != 0:
pt = BarycentricTransform(orig_shape_coords[i1],
orig_coords[i4], orig_coords[i1], orig_coords[i2],
@@ -334,7 +339,7 @@ class ShapeTransfer(bpy.types.Operator):
elif mode == 'RELATIVE_EDGE':
for ed in me.edges:
- i1, i2 = ed.verts
+ i1, i2 = ed.vertices
v1, v2 = orig_coords[i1], orig_coords[i2]
edge_length = (v1 - v2).length
n1loc = v1 + orig_normals[i1] * edge_length
@@ -377,7 +382,8 @@ class ShapeTransfer(bpy.types.Operator):
return {'FINISHED'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
obj = context.active_object
return (obj and obj.mode != 'EDIT')
@@ -407,7 +413,8 @@ class JoinUVs(bpy.types.Operator):
bl_idname = "object.join_uvs"
bl_label = "Join as UVs"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
obj = context.active_object
return (obj and obj.type == 'MESH')
@@ -465,7 +472,8 @@ class MakeDupliFace(bpy.types.Operator):
bl_idname = "object.make_dupli_face"
bl_label = "Make DupliFace"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
obj = context.active_object
return (obj and obj.type == 'MESH')
@@ -497,8 +505,8 @@ class MakeDupliFace(bpy.types.Operator):
mesh = bpy.data.meshes.new(data.name + "_dupli")
mesh.add_geometry(int(len(face_verts) / 3), 0, int(len(face_verts) / (4 * 3)))
- mesh.verts.foreach_set("co", face_verts)
- mesh.faces.foreach_set("verts_raw", faces)
+ mesh.vertices.foreach_set("co", face_verts)
+ mesh.faces.foreach_set("vertices_raw", faces)
mesh.update() # generates edge data
# pick an object to use
@@ -526,9 +534,9 @@ class MakeDupliFace(bpy.types.Operator):
class IsolateTypeRender(bpy.types.Operator):
- '''Select object matching a naming pattern'''
+ '''Hide unselected render objects of same type as active by setting the hide render flag'''
bl_idname = "object.isolate_type_render"
- bl_label = "Isolate Render Selection"
+ bl_label = "Restrict Render Unselected"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
@@ -536,36 +544,32 @@ class IsolateTypeRender(bpy.types.Operator):
for obj in context.visible_objects:
- if obj.selected:
- obj.restrict_render = False
+ if obj.select:
+ obj.hide_render = False
else:
if obj.type == act_type:
- obj.restrict_render = True
+ obj.hide_render = True
return {'FINISHED'}
+
+class ClearAllRestrictRender(bpy.types.Operator):
+ '''Reveal all render objects by setting the hide render flag'''
+ bl_idname = "object.hide_render_clear_all"
+ bl_label = "Clear All Restrict Render"
+ bl_options = {'REGISTER', 'UNDO'}
-
-classes = [
- SelectPattern,
- SelectCamera,
- SelectHierarchy,
- SubdivisionSet,
- ShapeTransfer,
- JoinUVs,
- IsolateTypeRender,
- MakeDupliFace]
+ def execute(self, context):
+ for obj in context.scene.objects:
+ obj.hide_render = False
+ return {'FINISHED'}
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
- register()
+ register() \ No newline at end of file
diff --git a/release/scripts/op/object_align.py b/release/scripts/op/object_align.py
index 6e5eef0fbc2..dc9b7c34523 100644
--- a/release/scripts/op/object_align.py
+++ b/release/scripts/op/object_align.py
@@ -263,7 +263,8 @@ class AlignObjects(bpy.types.Operator):
align_z = BoolProperty(name="Align Z",
description="Align in the Z axis", default=False)
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return context.mode == 'OBJECT'
def execute(self, context):
@@ -286,12 +287,10 @@ def menu_func(self, context):
def register():
- bpy.types.register(AlignObjects)
bpy.types.VIEW3D_MT_transform.append(menu_func)
def unregister():
- bpy.types.unregister(AlignObjects)
bpy.types.VIEW3D_MT_transform.remove(menu_func)
if __name__ == "__main__":
diff --git a/release/scripts/op/object_randomize_transform.py b/release/scripts/op/object_randomize_transform.py
index 89884b1767f..8c3f4eb6dfd 100644
--- a/release/scripts/op/object_randomize_transform.py
+++ b/release/scripts/op/object_randomize_transform.py
@@ -140,12 +140,10 @@ def menu_func(self, context):
def register():
- bpy.types.register(RandomizeLocRotSize)
bpy.types.VIEW3D_MT_transform.append(menu_func)
def unregister():
- bpy.types.unregister(RandomizeLocRotSize)
bpy.types.VIEW3D_MT_transform.remove(menu_func)
if __name__ == "__main__":
diff --git a/release/scripts/op/presets.py b/release/scripts/op/presets.py
index f80c5e69ddd..43e2cda5d53 100644
--- a/release/scripts/op/presets.py
+++ b/release/scripts/op/presets.py
@@ -22,7 +22,7 @@ import bpy
import os
-class AddPresetBase(bpy.types.Operator):
+class AddPresetBase():
'''Base preset class, only for subclassing
subclasses must define
- preset_values
@@ -91,29 +91,29 @@ class ExecutePreset(bpy.types.Operator):
return {'FINISHED'}
-class AddPresetRender(AddPresetBase):
+class AddPresetRender(AddPresetBase, bpy.types.Operator):
'''Add a Render Preset'''
bl_idname = "render.preset_add"
bl_label = "Add Render Preset"
name = AddPresetBase.name
preset_values = [
- "bpy.context.scene.render.resolution_x",
- "bpy.context.scene.render.resolution_y",
- "bpy.context.scene.render.pixel_aspect_x",
- "bpy.context.scene.render.pixel_aspect_y",
+ "bpy.context.scene.render.field_order",
"bpy.context.scene.render.fps",
"bpy.context.scene.render.fps_base",
+ "bpy.context.scene.render.pixel_aspect_x",
+ "bpy.context.scene.render.pixel_aspect_y",
"bpy.context.scene.render.resolution_percentage",
- "bpy.context.scene.render.fields",
- "bpy.context.scene.render.field_order",
- "bpy.context.scene.render.fields_still",
+ "bpy.context.scene.render.resolution_x",
+ "bpy.context.scene.render.resolution_y",
+ "bpy.context.scene.render.use_fields",
+ "bpy.context.scene.render.use_fields_still",
]
preset_subdir = "render"
-class AddPresetSSS(AddPresetBase):
+class AddPresetSSS(AddPresetBase, bpy.types.Operator):
'''Add a Subsurface Scattering Preset'''
bl_idname = "material.sss_preset_add"
bl_label = "Add SSS Preset"
@@ -125,7 +125,7 @@ class AddPresetSSS(AddPresetBase):
"bpy.context.material.subsurface_scattering.color[1]",
"bpy.context.material.subsurface_scattering.color[2]",
"bpy.context.material.subsurface_scattering.color_factor",
- "bpy.context.material.subsurface_scattering.error_tolerance",
+ "bpy.context.material.subsurface_scattering.error_threshold",
"bpy.context.material.subsurface_scattering.front",
"bpy.context.material.subsurface_scattering.ior",
"bpy.context.material.subsurface_scattering.radius[0]",
@@ -138,50 +138,50 @@ class AddPresetSSS(AddPresetBase):
preset_subdir = "sss"
-class AddPresetCloth(AddPresetBase):
+class AddPresetCloth(AddPresetBase, bpy.types.Operator):
'''Add a Cloth Preset'''
bl_idname = "cloth.preset_add"
bl_label = "Add Cloth Preset"
name = AddPresetBase.name
preset_values = [
- "bpy.context.cloth.settings.quality",
- "bpy.context.cloth.settings.mass",
- "bpy.context.cloth.settings.structural_stiffness",
+ "bpy.context.cloth.settings.air_damping",
"bpy.context.cloth.settings.bending_stiffness",
+ "bpy.context.cloth.settings.mass",
+ "bpy.context.cloth.settings.quality",
"bpy.context.cloth.settings.spring_damping",
- "bpy.context.cloth.settings.air_damping",
+ "bpy.context.cloth.settings.structural_stiffness",
]
preset_subdir = "cloth"
-class AddPresetSunSky(AddPresetBase):
+class AddPresetSunSky(AddPresetBase, bpy.types.Operator):
'''Add a Sky & Atmosphere Preset'''
bl_idname = "lamp.sunsky_preset_add"
bl_label = "Add Sunsky Preset"
name = AddPresetBase.name
preset_values = [
+ "bpy.context.object.data.sky.atmosphere_extinction",
+ "bpy.context.object.data.sky.atmosphere_inscattering",
"bpy.context.object.data.sky.atmosphere_turbidity",
- "bpy.context.object.data.sky.sky_blend_type",
- "bpy.context.object.data.sky.sky_blend",
+ "bpy.context.object.data.sky.backscattered_light",
"bpy.context.object.data.sky.horizon_brightness",
"bpy.context.object.data.sky.spread",
- "bpy.context.object.data.sky.sky_color_space",
- "bpy.context.object.data.sky.sky_exposure",
"bpy.context.object.data.sky.sun_brightness",
- "bpy.context.object.data.sky.sun_size",
- "bpy.context.object.data.sky.backscattered_light",
"bpy.context.object.data.sky.sun_intensity",
- "bpy.context.object.data.sky.atmosphere_inscattering",
- "bpy.context.object.data.sky.atmosphere_extinction",
+ "bpy.context.object.data.sky.sun_size",
+ "bpy.context.object.data.sky.use_sky_blend",
+ "bpy.context.object.data.sky.use_sky_blend_type",
+ "bpy.context.object.data.sky.use_sky_color_space",
+ "bpy.context.object.data.sky.use_sky_exposure",
]
preset_subdir = "sunsky"
-class AddPresetInteraction(AddPresetBase):
+class AddPresetInteraction(AddPresetBase, bpy.types.Operator):
'''Add an Application Interaction Preset'''
bl_idname = "wm.interaction_preset_add"
bl_label = "Add Interaction Preset"
@@ -189,39 +189,26 @@ class AddPresetInteraction(AddPresetBase):
save_keyconfig = True
preset_values = [
- "bpy.context.user_preferences.edit.drag_immediately",
- "bpy.context.user_preferences.edit.insertkey_xyz_to_rgb",
+ "bpy.context.user_preferences.edit.use_drag_immediately",
+ "bpy.context.user_preferences.edit.use_insertkey_xyz_to_rgb",
+ "bpy.context.user_preferences.inputs.invert_mouse_wheel_zoom",
"bpy.context.user_preferences.inputs.select_mouse",
- "bpy.context.user_preferences.inputs.zoom_style",
- "bpy.context.user_preferences.inputs.zoom_axis",
- "bpy.context.user_preferences.inputs.view_rotation",
- "bpy.context.user_preferences.inputs.invert_zoom_direction",
- "bpy.context.user_preferences.inputs.emulate_numpad",
- "bpy.context.user_preferences.inputs.emulate_3_button_mouse",
- "bpy.context.user_preferences.inputs.continuous_mouse",
+ "bpy.context.user_preferences.inputs.use_emulate_numpad",
+ "bpy.context.user_preferences.inputs.use_mouse_continuous",
+ "bpy.context.user_preferences.inputs.use_mouse_emulate_3_button",
+ "bpy.context.user_preferences.inputs.view_rotate_method",
+ "bpy.context.user_preferences.inputs.view_zoom_axis",
+ "bpy.context.user_preferences.inputs.view_zoom_method",
]
preset_subdir = "interaction"
-classes = [
- ExecutePreset,
- AddPresetRender,
- AddPresetSSS,
- AddPresetCloth,
- AddPresetSunSky,
- AddPresetInteraction]
-
-
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/op/screen_play_rendered_anim.py b/release/scripts/op/screen_play_rendered_anim.py
index 2ecd445df1d..80260755714 100644
--- a/release/scripts/op/screen_play_rendered_anim.py
+++ b/release/scripts/op/screen_play_rendered_anim.py
@@ -79,7 +79,7 @@ class PlayRenderedAnim(bpy.types.Operator):
preset = prefs.filepaths.animation_player_preset
player_path = prefs.filepaths.animation_player
- file_path = bpy.utils.expandpath(rd.output_path)
+ file_path = bpy.path.abspath(rd.filepath)
is_movie = rd.is_movie_format
# try and guess a command line if it doesn't exist
@@ -105,7 +105,7 @@ class PlayRenderedAnim(bpy.types.Operator):
# works for movies and images
file = rd.frame_path(frame=scene.frame_start)
- file = bpy.utils.expandpath(file) # expand '//'
+ file = bpy.path.abspath(file) # expand '//'
cmd = [player_path]
# extra options, fps controls etc.
@@ -144,11 +144,11 @@ class PlayRenderedAnim(bpy.types.Operator):
def register():
- bpy.types.register(PlayRenderedAnim)
+ pass
def unregister():
- bpy.types.unregister(PlayRenderedAnim)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/op/sequencer.py b/release/scripts/op/sequencer.py
index 13668498aae..feedb5cb4a8 100644
--- a/release/scripts/op/sequencer.py
+++ b/release/scripts/op/sequencer.py
@@ -30,7 +30,8 @@ class SequencerCrossfadeSounds(bpy.types.Operator):
bl_label = "Crossfade sounds"
bl_options = {'REGISTER', 'UNDO'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
if context.scene and context.scene.sequence_editor and context.scene.sequence_editor.active_strip:
return context.scene.sequence_editor.active_strip.type == 'SOUND'
else:
@@ -40,7 +41,7 @@ class SequencerCrossfadeSounds(bpy.types.Operator):
seq1 = None
seq2 = None
for s in context.scene.sequence_editor.sequences:
- if s.selected and s.type == 'SOUND':
+ if s.select and s.type == 'SOUND':
if seq1 == None:
seq1 = s
elif seq2 == None:
@@ -83,7 +84,8 @@ class SequencerCutMulticam(bpy.types.Operator):
camera = IntProperty(name="Camera",
default=1, min=1, max=32, soft_min=1, soft_max=32)
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
if context.scene and context.scene.sequence_editor and context.scene.sequence_editor.active_strip:
return context.scene.sequence_editor.active_strip.type == 'MULTICAM'
else:
@@ -94,16 +96,16 @@ class SequencerCutMulticam(bpy.types.Operator):
s = context.scene.sequence_editor.active_strip
- if s.multicam_source == camera:
+ if s.multicam_source == camera or camera >= s.channel:
return {'FINISHED'}
- if not s.selected:
- s.selected = True
+ if not s.select:
+ s.select = True
cfra = context.scene.frame_current
bpy.ops.sequencer.cut(frame=cfra, type='SOFT', side='RIGHT')
for s in context.scene.sequence_editor.sequences_all:
- if s.selected and s.type == 'MULTICAM' and s.frame_final_start <= cfra and cfra < s.frame_final_end:
+ if s.select and s.type == 'MULTICAM' and s.frame_final_start <= cfra and cfra < s.frame_final_end:
context.scene.sequence_editor.active_strip = s
context.scene.sequence_editor.active_strip.multicam_source = camera
@@ -117,7 +119,8 @@ class SequencerDeinterlaceSelectedMovies(bpy.types.Operator):
bl_label = "Deinterlace Movies"
bl_options = {'REGISTER', 'UNDO'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
if context.scene and context.scene.sequence_editor:
return True
else:
@@ -125,26 +128,18 @@ class SequencerDeinterlaceSelectedMovies(bpy.types.Operator):
def execute(self, context):
for s in context.scene.sequence_editor.sequences_all:
- if s.selected and s.type == 'MOVIE':
- s.de_interlace = True
+ if s.select and s.type == 'MOVIE':
+ s.use_deinterlace = True
return {'FINISHED'}
def register():
- register = bpy.types.register
-
- register(SequencerCrossfadeSounds)
- register(SequencerCutMulticam)
- register(SequencerDeinterlaceSelectedMovies)
+ pass
def unregister():
- unregister = bpy.types.unregister
-
- unregister(SequencerCrossfadeSounds)
- unregister(SequencerCutMulticam)
- unregister(SequencerDeinterlaceSelectedMovies)
+ pass
if __name__ == "__main__":
diff --git a/release/scripts/op/uv.py b/release/scripts/op/uv.py
index 51c1695677b..cf3d68787c0 100644
--- a/release/scripts/op/uv.py
+++ b/release/scripts/op/uv.py
@@ -39,7 +39,8 @@ class ExportUVLayout(bpy.types.Operator):
description="File format to export the UV layout to",
default='SVG')
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
obj = context.active_object
return (obj and obj.type == 'MESH')
@@ -75,7 +76,7 @@ class ExportUVLayout(bpy.types.Operator):
local_image = Ellipsis
- if context.tool_settings.uv_local_view:
+ if context.tool_settings.show_uv_local_view:
space_data = self._space_image(context)
if space_data:
local_image = space_data.image
@@ -85,9 +86,9 @@ class ExportUVLayout(bpy.types.Operator):
for i in range(uv_layer_len):
uv_elem = uv_layer[i]
# context checks
- if faces[i].selected and (local_image is Ellipsis or local_image == uv_elem.image):
+ if faces[i].select and (local_image is Ellipsis or local_image == uv_elem.image):
#~ uv = uv_elem.uv
- #~ if False not in uv_elem.uv_selected[:len(uv)]:
+ #~ if False not in uv_elem.select_uv[:len(uv)]:
#~ yield (i, uv)
# just write what we see.
@@ -113,7 +114,9 @@ class ExportUVLayout(bpy.types.Operator):
mode = self.properties.mode
- file = open(self.properties.filepath, "w")
+ filepath = self.properties.filepath
+ filepath = bpy.path.ensure_ext(filepath, "." + mode.lower())
+ file = open(filepath, "w")
fw = file.write
if mode == 'SVG':
@@ -216,12 +219,10 @@ def menu_func(self, context):
def register():
- bpy.types.register(ExportUVLayout)
bpy.types.IMAGE_MT_uvs.append(menu_func)
def unregister():
- bpy.types.unregister(ExportUVLayout)
bpy.types.IMAGE_MT_uvs.remove(menu_func)
if __name__ == "__main__":
diff --git a/release/scripts/op/uvcalc_follow_active.py b/release/scripts/op/uvcalc_follow_active.py
index 61c149c8735..1f80e704f93 100644
--- a/release/scripts/op/uvcalc_follow_active.py
+++ b/release/scripts/op/uvcalc_follow_active.py
@@ -26,7 +26,7 @@ import bpy
def extend(obj, operator, EXTEND_MODE):
me = obj.data
- me_verts = me.verts
+ me_verts = me.vertices
# script will fail without UVs
if not me.active_uv_texture:
me.add_uv_texture()
@@ -54,8 +54,8 @@ def extend(obj, operator, EXTEND_MODE):
# assume a quad
return [(vi[0], vi[1]), (vi[1], vi[2]), (vi[2], vi[3]), (vi[3], vi[0])]
- vidx_source = face_source.verts
- vidx_target = face_target.verts
+ vidx_source = face_source.vertices
+ vidx_target = face_target.vertices
faceUVsource = me.active_uv_texture.data[face_source.index]
uvs_source = [faceUVsource.uv1, faceUVsource.uv2, faceUVsource.uv3, faceUVsource.uv4]
@@ -146,7 +146,7 @@ def extend(obj, operator, EXTEND_MODE):
operator.report({'ERROR'}, "No active face.")
return
- face_sel = [f for f in me.faces if len(f.verts) == 4 and f.selected]
+ face_sel = [f for f in me.faces if len(f.vertices) == 4 and f.select]
face_act_local_index = -1
for i, f in enumerate(face_sel):
@@ -177,11 +177,9 @@ def extend(obj, operator, EXTEND_MODE):
except:
edge_faces[edkey] = [i]
- #SEAM = me.edges.seam
-
if EXTEND_MODE == 'LENGTH':
- edge_loops = me.edge_loops_from_faces(face_sel, [ed.key for ed in me.edges if ed.seam])
- me_verts = me.verts
+ edge_loops = me.edge_loops_from_faces(face_sel, [ed.key for ed in me.edges if ed.use_seam])
+ me_verts = me.vertices
for loop in edge_loops:
looplen = [0.0]
for ed in loop:
@@ -192,7 +190,7 @@ def extend(obj, operator, EXTEND_MODE):
# remove seams, so we dont map accross seams.
for ed in me.edges:
- if ed.seam:
+ if ed.use_seam:
# remove the edge pair if we can
try:
del edge_faces[ed.key]
@@ -249,7 +247,8 @@ class FollowActiveQuads(bpy.types.Operator):
description="Method to space UV edge loops",
default="LENGTH")
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
obj = context.active_object
return (obj is not None and obj.type == 'MESH')
@@ -263,12 +262,10 @@ menu_func = (lambda self, context: self.layout.operator(FollowActiveQuads.bl_idn
def register():
- bpy.types.register(FollowActiveQuads)
bpy.types.VIEW3D_MT_uv_map.append(menu_func)
def unregister():
- bpy.types.unregister(FollowActiveQuads)
bpy.types.VIEW3D_MT_uv_map.remove(menu_func)
if __name__ == "__main__":
diff --git a/release/scripts/op/uvcalc_smart_project.py b/release/scripts/op/uvcalc_smart_project.py
index 13bf6244f4d..0589b7e861a 100644
--- a/release/scripts/op/uvcalc_smart_project.py
+++ b/release/scripts/op/uvcalc_smart_project.py
@@ -22,7 +22,7 @@
# <pep8 compliant>
-from mathutils import Matrix, Vector, RotationMatrix
+from mathutils import Matrix, Vector
import time
import geometry
import bpy
@@ -275,15 +275,15 @@ def testNewVecLs2DRotIsBetter(vecs, mat=-1, bestAreaSoFar = -1):
# Takes a list of faces that make up a UV island and rotate
# until they optimally fit inside a square.
-ROTMAT_2D_POS_90D = RotationMatrix( radians(90.0), 2)
-ROTMAT_2D_POS_45D = RotationMatrix( radians(45.0), 2)
+ROTMAT_2D_POS_90D = Matrix.Rotation( radians(90.0), 2)
+ROTMAT_2D_POS_45D = Matrix.Rotation( radians(45.0), 2)
RotMatStepRotation = []
rot_angle = 22.5 #45.0/2
while rot_angle > 0.1:
RotMatStepRotation.append([\
- RotationMatrix( radians(rot_angle), 2),\
- RotationMatrix( radians(-rot_angle), 2)])
+ Matrix.Rotation( radians(rot_angle), 2),\
+ Matrix.Rotation( radians(-rot_angle), 2)])
rot_angle = rot_angle/2.0
@@ -524,7 +524,7 @@ def mergeUvIslands(islandList):
then move us 1 whole width accross,
Its possible this is a bad idea since 2 skinny Angular faces
could join without 1 whole move, but its a lot more optimal to speed this up
- since we have alredy tested for it.
+ since we have already tested for it.
It gives about 10% speedup with minimal errors.
'''
@@ -604,7 +604,7 @@ def getUvIslands(faceGroups, me):
# Get seams so we dont cross over seams
edge_seams = {} # shoudl be a set
for ed in me.edges:
- if ed.seam:
+ if ed.use_seam:
edge_seams[ed.key] = None # dummy var- use sets!
# Done finding seams
@@ -792,7 +792,7 @@ def VectoMat(vec):
class thickface(object):
__slost__= 'v', 'uv', 'no', 'area', 'edge_keys'
def __init__(self, face, uvface, mesh_verts):
- self.v = [mesh_verts[i] for i in face.verts]
+ self.v = [mesh_verts[i] for i in face.vertices]
if len(self.v)==4:
self.uv = uvface.uv1, uvface.uv2, uvface.uv3, uvface.uv4
else:
@@ -821,7 +821,7 @@ def main(context, island_margin, projection_limit):
#XXX ob = objects.active
ob= objects[0]
- if ob and ob.selected == 0 and ob.type == 'MESH':
+ if ob and (not ob.select) and ob.type == 'MESH':
# Add to the list
obList =[ob]
del objects
@@ -896,10 +896,10 @@ def main(context, island_margin, projection_limit):
me.add_uv_texture()
uv_layer = me.active_uv_texture.data
- me_verts = list(me.verts)
+ me_verts = list(me.vertices)
if USER_ONLY_SELECTED_FACES:
- meshFaces = [thickface(f, uv_layer[i], me_verts) for i, f in enumerate(me.faces) if f.selected]
+ meshFaces = [thickface(f, uv_layer[i], me_verts) for i, f in enumerate(me.faces) if f.select]
#else:
# meshFaces = map(thickface, me.faces)
@@ -1027,7 +1027,7 @@ def main(context, island_margin, projection_limit):
bestAng = fvec.dot(projectVecs[0])
bestAngIdx = 0
- # Cycle through the remaining, first alredy done
+ # Cycle through the remaining, first already done
while i-1:
i-=1
@@ -1124,7 +1124,8 @@ class SmartProject(bpy.types.Operator):
description="Margin to reduce bleed from adjacent islands.",
default=0.0, min=0.0, max=1.0)
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return context.active_object != None
def execute(self, context):
@@ -1138,12 +1139,10 @@ menu_func = (lambda self, context: self.layout.operator(SmartProject.bl_idname,
def register():
- bpy.types.register(SmartProject)
bpy.types.VIEW3D_MT_uv_map.append(menu_func)
def unregister():
- bpy.types.unregister(SmartProject)
bpy.types.VIEW3D_MT_uv_map.remove(menu_func)
if __name__ == "__main__":
diff --git a/release/scripts/op/vertexpaint_dirt.py b/release/scripts/op/vertexpaint_dirt.py
index c1521866a56..72317cf8c11 100644
--- a/release/scripts/op/vertexpaint_dirt.py
+++ b/release/scripts/op/vertexpaint_dirt.py
@@ -43,7 +43,7 @@ def applyVertexDirt(me, blur_iterations, blur_strength, clamp_dirt, clamp_clean,
#BPyMesh.meshCalcNormals(me)
- vert_tone = [0.0] * len(me.verts)
+ vert_tone = [0.0] * len(me.vertices)
min_tone = 180.0
max_tone = 0.0
@@ -51,21 +51,21 @@ def applyVertexDirt(me, blur_iterations, blur_strength, clamp_dirt, clamp_clean,
# create lookup table for each vertex's connected vertices (via edges)
con = []
- con = [[] for i in range(len(me.verts))]
+ con = [[] for i in range(len(me.vertices))]
# add connected verts
for e in me.edges:
- con[e.verts[0]].append(e.verts[1])
- con[e.verts[1]].append(e.verts[0])
+ con[e.vertices[0]].append(e.vertices[1])
+ con[e.vertices[1]].append(e.vertices[0])
- for i, v in enumerate(me.verts):
+ for i, v in enumerate(me.vertices):
vec = Vector()
no = v.normal
co = v.co
# get the direction of the vectors between the vertex and it's connected vertices
for c in con[i]:
- vec += (me.verts[c].co - co).normalize()
+ vec += (me.vertices[c].co - co).normalize()
# normalize the vector by dividing by the number of connected verts
tot_con = len(con[i])
@@ -127,15 +127,15 @@ def applyVertexDirt(me, blur_iterations, blur_strength, clamp_dirt, clamp_clean,
return('CANCELLED', )
for i, f in enumerate(me.faces):
- if not me.use_paint_mask or f.selected:
+ if not me.use_paint_mask or f.select:
f_col = active_col_layer[i]
f_col = [f_col.color1, f_col.color2, f_col.color3, f_col.color4]
- for j, v in enumerate(f.verts):
+ for j, v in enumerate(f.vertices):
col = f_col[j]
- tone = vert_tone[me.verts[v].index]
+ tone = vert_tone[me.vertices[v].index]
tone = (tone - min_tone) / tone_range
if dirt_only:
@@ -180,11 +180,11 @@ class VertexPaintDirt(bpy.types.Operator):
def register():
- bpy.types.register(VertexPaintDirt)
+ pass
def unregister():
- bpy.types.unregister(VertexPaintDirt)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/op/wm.py b/release/scripts/op/wm.py
index ed77f32ff6d..cc35a0ab3dd 100644
--- a/release/scripts/op/wm.py
+++ b/release/scripts/op/wm.py
@@ -21,7 +21,7 @@
import bpy
from bpy.props import *
-
+from rna_prop_ui import rna_idprop_ui_prop_get, rna_idprop_ui_prop_clear
class MESH_OT_delete_edgeloop(bpy.types.Operator):
'''Delete an edge loop by merging the faces on each side to a single face loop'''
@@ -325,6 +325,42 @@ class WM_OT_context_cycle_enum(bpy.types.Operator):
exec("context.%s=advance_enum" % self.properties.data_path)
return {'FINISHED'}
+
+class WM_OT_context_set_id(bpy.types.Operator):
+ '''Toggle a context value.'''
+ bl_idname = "wm.context_set_id"
+ bl_label = "Set Library ID"
+ bl_options = {'UNDO'}
+
+ data_path = rna_path_prop
+ value = StringProperty(name="Value",
+ description="Assign value", maxlen=1024, default="")
+
+ def execute(self, context):
+ value = self.properties.value
+ data_path = self.properties.data_path
+
+ # match the pointer type from the target property to bpy.data.*
+ # so we lookup the correct list.
+ data_path_base, data_path_prop = data_path.rsplit(".", 1)
+ data_prop_rna = eval("context.%s" % data_path_base).rna_type.properties[data_path_prop]
+ data_prop_rna_type = data_prop_rna.fixed_type
+
+ id_iter = None
+
+ for prop in bpy.data.rna_type.properties:
+ if prop.rna_type.identifier == "CollectionProperty":
+ if prop.fixed_type == data_prop_rna_type:
+ id_iter = prop.identifier
+ break
+
+ if id_iter:
+ value_id = getattr(bpy.data, id_iter).get(value)
+ exec("context.%s=value_id" % data_path)
+
+ return {'FINISHED'}
+
+
doc_id = StringProperty(name="Doc ID",
description="", maxlen=1024, default="", options={'HIDDEN'})
@@ -442,7 +478,7 @@ class WM_OT_path_open(bpy.types.Operator):
import os
import subprocess
- filepath = bpy.utils.expandpath(self.properties.filepath)
+ filepath = bpy.path.abspath(self.properties.filepath)
filepath = os.path.normpath(filepath)
if not os.path.exists(filepath):
@@ -576,46 +612,139 @@ class WM_OT_doc_edit(bpy.types.Operator):
return wm.invoke_props_dialog(self, width=600)
-import rna_prop_ui
+from bpy.props import *
+
+
+rna_path = StringProperty(name="Property Edit",
+ description="Property data_path edit", maxlen=1024, default="", options={'HIDDEN'})
+
+rna_value = StringProperty(name="Property Value",
+ description="Property value edit", maxlen=1024, default="")
+
+rna_property = StringProperty(name="Property Name",
+ description="Property name edit", maxlen=1024, default="")
+
+rna_min = FloatProperty(name="Min", default=0.0, precision=3)
+rna_max = FloatProperty(name="Max", default=1.0, precision=3)
+
+
+class WM_OT_properties_edit(bpy.types.Operator):
+ '''Internal use (edit a property data_path)'''
+ bl_idname = "wm.properties_edit"
+ bl_label = "Edit Property"
+
+ data_path = rna_path
+ property = rna_property
+ value = rna_value
+ min = rna_min
+ max = rna_max
+ description = StringProperty(name="Tip", default="")
+
+ def execute(self, context):
+ data_path = self.properties.data_path
+ value = self.properties.value
+ prop = self.properties.property
+ prop_old = self._last_prop[0]
+
+ try:
+ value_eval = eval(value)
+ except:
+ value_eval = value
+
+ # First remove
+ item = eval("context.%s" % data_path)
+
+ rna_idprop_ui_prop_clear(item, prop_old)
+ exec_str = "del item['%s']" % prop_old
+ # print(exec_str)
+ exec(exec_str)
+
+
+ # Reassign
+ exec_str = "item['%s'] = %s" % (prop, repr(value_eval))
+ # print(exec_str)
+ exec(exec_str)
+ self._last_prop[:] = [prop]
+
+ prop_type = type(item[prop])
+
+ prop_ui = rna_idprop_ui_prop_get(item, prop)
+
+ if prop_type in (float, int):
+
+ prop_ui['soft_min'] = prop_ui['min'] = prop_type(self.properties.min)
+ prop_ui['soft_max'] = prop_ui['max'] = prop_type(self.properties.max)
+
+ prop_ui['description'] = self.properties.description
+
+ return {'FINISHED'}
+
+ def invoke(self, context, event):
+
+ self._last_prop = [self.properties.property]
+
+ item = eval("context.%s" % self.properties.data_path)
+
+ # setup defaults
+ prop_ui = rna_idprop_ui_prop_get(item, self.properties.property, False) # dont create
+ if prop_ui:
+ self.properties.min = prop_ui.get("min", -1000000000)
+ self.properties.max = prop_ui.get("max", 1000000000)
+ self.properties.description = prop_ui.get("description", "")
+
+ wm = context.manager
+ # This crashes, TODO - fix
+ #return wm.invoke_props_popup(self, event)
+
+ wm.invoke_props_popup(self, event)
+ return {'RUNNING_MODAL'}
+
+
+class WM_OT_properties_add(bpy.types.Operator):
+ '''Internal use (edit a property data_path)'''
+ bl_idname = "wm.properties_add"
+ bl_label = "Add Property"
-classes = [
- MESH_OT_delete_edgeloop,
+ data_path = rna_path
- WM_OT_context_set_boolean,
- WM_OT_context_set_int,
- WM_OT_context_scale_int,
- WM_OT_context_set_float,
- WM_OT_context_set_string,
- WM_OT_context_set_enum,
- WM_OT_context_set_value,
- WM_OT_context_toggle,
- WM_OT_context_toggle_enum,
- WM_OT_context_cycle_enum,
- WM_OT_context_cycle_int,
- WM_OT_context_modal_mouse,
+ def execute(self, context):
+ item = eval("context.%s" % self.properties.data_path)
+
+ def unique_name(names):
+ prop = 'prop'
+ prop_new = prop
+ i = 1
+ while prop_new in names:
+ prop_new = prop + str(i)
+ i += 1
+
+ return prop_new
+
+ property = unique_name(item.keys())
+
+ item[property] = 1.0
+ return {'FINISHED'}
- WM_OT_url_open,
- WM_OT_path_open,
- WM_OT_doc_view,
- WM_OT_doc_edit,
+class WM_OT_properties_remove(bpy.types.Operator):
+ '''Internal use (edit a property data_path)'''
+ bl_idname = "wm.properties_remove"
+ bl_label = "Remove Property"
- # experemental!
- rna_prop_ui.WM_OT_properties_edit,
- rna_prop_ui.WM_OT_properties_add,
- rna_prop_ui.WM_OT_properties_remove]
+ data_path = rna_path
+ property = rna_property
+ def execute(self, context):
+ item = eval("context.%s" % self.properties.data_path)
+ del item[self.properties.property]
+ return {'FINISHED'}
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/presets/interaction/blender.py b/release/scripts/presets/interaction/blender.py
index 63006b2008d..229aa657b2f 100644
--- a/release/scripts/presets/interaction/blender.py
+++ b/release/scripts/presets/interaction/blender.py
@@ -4,13 +4,13 @@ import bpy
wm = bpy.context.manager
wm.active_keyconfig = wm.keyconfigs['Blender']
-bpy.context.user_preferences.view.auto_depth = False
-bpy.context.user_preferences.view.zoom_to_mouse = False
-bpy.context.user_preferences.view.rotate_around_selection = False
-bpy.context.user_preferences.edit.drag_immediately = False
-bpy.context.user_preferences.edit.insertkey_xyz_to_rgb = False
+bpy.context.user_preferences.view.use_mouse_auto_depth = False
+bpy.context.user_preferences.view.use_zoom_to_mouse = False
+bpy.context.user_preferences.view.use_rotate_around_active = False
+bpy.context.user_preferences.edit.use_drag_immediately = False
+bpy.context.user_preferences.edit.use_insertkey_xyz_to_rgb = False
bpy.context.user_preferences.inputs.select_mouse = 'RIGHT'
-bpy.context.user_preferences.inputs.zoom_style = 'DOLLY'
-bpy.context.user_preferences.inputs.zoom_axis = 'VERTICAL'
-bpy.context.user_preferences.inputs.view_rotation = 'TRACKBALL'
-bpy.context.user_preferences.inputs.invert_zoom_direction = False
+bpy.context.user_preferences.inputs.view_zoom_method = 'DOLLY'
+bpy.context.user_preferences.inputs.view_zoom_axis = 'VERTICAL'
+bpy.context.user_preferences.inputs.view_rotate_method = 'TRACKBALL'
+bpy.context.user_preferences.inputs.invert_mouse_wheel_zoom = False
diff --git a/release/scripts/presets/interaction/maya.py b/release/scripts/presets/interaction/maya.py
index 31652035dff..ccd95abf75e 100644
--- a/release/scripts/presets/interaction/maya.py
+++ b/release/scripts/presets/interaction/maya.py
@@ -7,7 +7,7 @@ kc = wm.add_keyconfig('Maya')
# Map 3D View
km = kc.add_keymap('3D View', space_type='VIEW_3D', region_type='WINDOW', modal=False)
-kmi = km.items.add('view3d.manipulator', 'LEFTMOUSE', 'PRESS', any=True)
+kmi = km.items.add('view3d.show_manipulator', 'LEFTMOUSE', 'PRESS', any=True)
kmi.properties.release_confirm = True
kmi = km.items.add('view3d.cursor3d', 'ACTIONMOUSE', 'PRESS')
kmi = km.items.add('view3d.rotate', 'LEFTMOUSE', 'PRESS', alt=True)
@@ -126,11 +126,11 @@ kmi.properties.nr = 9
kmi = km.items.add('view3d.layers', 'ZERO', 'PRESS', any=True)
kmi.properties.nr = 10
kmi = km.items.add('wm.context_toggle_enum', 'Z', 'PRESS')
-kmi.properties.data_path = 'space_data.viewport_shading'
+kmi.properties.data_path = 'space_data.viewport_shade'
kmi.properties.value_1 = 'SOLID'
kmi.properties.value_2 = 'WIREFRAME'
kmi = km.items.add('wm.context_toggle_enum', 'Z', 'PRESS', alt=True)
-kmi.properties.data_path = 'space_data.viewport_shading'
+kmi.properties.data_path = 'space_data.viewport_shade'
kmi.properties.value_1 = 'TEXTURED'
kmi.properties.value_2 = 'SOLID'
kmi = km.items.add('view3d.select', 'SELECTMOUSE', 'PRESS')
@@ -173,9 +173,9 @@ kmi = km.items.add('wm.context_set_enum', 'COMMA', 'PRESS', ctrl=True)
kmi.properties.data_path = 'space_data.pivot_point'
kmi.properties.value = 'MEDIAN_POINT'
kmi = km.items.add('wm.context_toggle', 'COMMA', 'PRESS', alt=True)
-kmi.properties.data_path = 'space_data.pivot_point_align'
+kmi.properties.data_path = 'space_data.use_pivot_point_align'
kmi = km.items.add('wm.context_toggle', 'Q', 'PRESS')
-kmi.properties.data_path = 'space_data.manipulator'
+kmi.properties.data_path = 'space_data.show_manipulator'
kmi = km.items.add('wm.context_set_enum', 'PERIOD', 'PRESS')
kmi.properties.data_path = 'space_data.pivot_point'
kmi.properties.value = 'CURSOR'
@@ -212,9 +212,9 @@ kmi.properties.extend = True
km = kc.add_keymap('Object Mode', space_type='EMPTY', region_type='WINDOW', modal=False)
kmi = km.items.add('wm.context_cycle_enum', 'O', 'PRESS', shift=True)
-kmi.properties.data_path = 'tool_settings.proportional_editing_falloff'
+kmi.properties.data_path = 'tool_settings.proportional_edit_falloff'
kmi = km.items.add('wm.context_toggle_enum', 'O', 'PRESS')
-kmi.properties.data_path = 'tool_settings.proportional_editing'
+kmi.properties.data_path = 'tool_settings.proportional_edit'
kmi.properties.value_1 = 'DISABLED'
kmi.properties.value_2 = 'ENABLED'
kmi = km.items.add('view3d.game_start', 'P', 'PRESS')
@@ -244,9 +244,9 @@ kmi = km.items.add('object.location_clear', 'G', 'PRESS', alt=True)
kmi = km.items.add('object.rotation_clear', 'R', 'PRESS', alt=True)
kmi = km.items.add('object.scale_clear', 'S', 'PRESS', alt=True)
kmi = km.items.add('object.origin_clear', 'O', 'PRESS', alt=True)
-kmi = km.items.add('object.restrictview_clear', 'H', 'PRESS', alt=True)
-kmi = km.items.add('object.restrictview_set', 'H', 'PRESS')
-kmi = km.items.add('object.restrictview_set', 'H', 'PRESS', shift=True)
+kmi = km.items.add('object.hide_view_clear', 'H', 'PRESS', alt=True)
+kmi = km.items.add('object.hide_view_set', 'H', 'PRESS')
+kmi = km.items.add('object.hide_view_set', 'H', 'PRESS', shift=True)
kmi.properties.unselected = True
kmi = km.items.add('object.move_to_layer', 'M', 'PRESS')
kmi = km.items.add('object.delete', 'X', 'PRESS')
@@ -363,13 +363,13 @@ kmi.properties.name = 'VIEW3D_MT_uv_map'
kmi = km.items.add('wm.call_menu', 'G', 'PRESS', ctrl=True)
kmi.properties.name = 'VIEW3D_MT_vertex_group'
kmi = km.items.add('wm.context_cycle_enum', 'O', 'PRESS', shift=True)
-kmi.properties.data_path = 'tool_settings.proportional_editing_falloff'
+kmi.properties.data_path = 'tool_settings.proportional_edit_falloff'
kmi = km.items.add('wm.context_toggle_enum', 'O', 'PRESS')
-kmi.properties.data_path = 'tool_settings.proportional_editing'
+kmi.properties.data_path = 'tool_settings.proportional_edit'
kmi.properties.value_1 = 'DISABLED'
kmi.properties.value_2 = 'ENABLED'
kmi = km.items.add('wm.context_toggle_enum', 'O', 'PRESS', alt=True)
-kmi.properties.data_path = 'tool_settings.proportional_editing'
+kmi.properties.data_path = 'tool_settings.proportional_edit'
kmi.properties.value_1 = 'DISABLED'
kmi.properties.value_2 = 'CONNECTED'
kmi = km.items.add('mesh.select_all', 'SELECTMOUSE', 'CLICK')
@@ -377,10 +377,10 @@ kmi.properties.action = 'DESELECT'
wm.active_keyconfig = kc
-bpy.context.user_preferences.edit.drag_immediately = True
-bpy.context.user_preferences.edit.insertkey_xyz_to_rgb = False
+bpy.context.user_preferences.edit.use_drag_immediately = True
+bpy.context.user_preferences.edit.use_insertkey_xyz_to_rgb = False
bpy.context.user_preferences.inputs.select_mouse = 'LEFT'
-bpy.context.user_preferences.inputs.zoom_style = 'DOLLY'
-bpy.context.user_preferences.inputs.zoom_axis = 'HORIZONTAL'
-bpy.context.user_preferences.inputs.view_rotation = 'TURNTABLE'
-bpy.context.user_preferences.inputs.invert_zoom_direction = True
+bpy.context.user_preferences.inputs.view_zoom_method = 'DOLLY'
+bpy.context.user_preferences.inputs.view_zoom_axis = 'HORIZONTAL'
+bpy.context.user_preferences.inputs.view_rotate_method = 'TURNTABLE'
+bpy.context.user_preferences.inputs.invert_mouse_wheel_zoom = True
diff --git a/release/scripts/templates/gamelogic.py b/release/scripts/templates/gamelogic.py
index b31d5d95987..21a901c091b 100644
--- a/release/scripts/templates/gamelogic.py
+++ b/release/scripts/templates/gamelogic.py
@@ -6,7 +6,7 @@
# for keyboard event comparison
# import GameKeys
-# support for Vector(), Matrix() types and advanced functions like ScaleMatrix(...) and RotationMatrix(...)
+# support for Vector(), Matrix() types and advanced functions like Matrix.Scale(...) and Matrix.Rotation(...)
# import mathutils
# for functions like getWindowWidth(), getWindowHeight()
diff --git a/release/scripts/templates/operator.py b/release/scripts/templates/operator.py
index e20b92c9b6a..5a525784b51 100644
--- a/release/scripts/templates/operator.py
+++ b/release/scripts/templates/operator.py
@@ -23,7 +23,8 @@ class ExportSomeData(bpy.types.Operator):
description="Choose between two items",
default='OPT_A')
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return context.active_object != None
def execute(self, context):
@@ -54,9 +55,6 @@ class ExportSomeData(bpy.types.Operator):
return self.execute(context)
-
-bpy.types.register(ExportSomeData)
-
# Only needed if you want to add into a dynamic menu
menu_func = lambda self, context: self.layout.operator("export.some_data", text="Example Exporter...")
bpy.types.INFO_MT_file_export.append(menu_func)
diff --git a/release/scripts/templates/operator_modal.py b/release/scripts/templates/operator_modal.py
index e029d91a7fa..0c5db47674b 100644
--- a/release/scripts/templates/operator_modal.py
+++ b/release/scripts/templates/operator_modal.py
@@ -34,7 +34,5 @@ class ModalOperator(bpy.types.Operator):
return {'CANCELLED'}
-bpy.types.register(ModalOperator)
-
if __name__ == "__main__":
bpy.ops.object.modal_operator()
diff --git a/release/scripts/templates/operator_modal_draw.py b/release/scripts/templates/operator_modal_draw.py
index 1f24672346b..56ffb95f555 100644
--- a/release/scripts/templates/operator_modal_draw.py
+++ b/release/scripts/templates/operator_modal_draw.py
@@ -64,15 +64,3 @@ class ModalDrawOperator(bpy.types.Operator):
else:
self.report({'WARNING'}, "View3D not found, cannot run operator")
return {'CANCELLED'}
-
-
-def register():
- bpy.types.register(ModalDrawOperator)
-
-
-def unregister():
- bpy.types.unregister(ModalDrawOperator)
-
-
-if __name__ == "__main__":
- register()
diff --git a/release/scripts/templates/operator_modal_view3d.py b/release/scripts/templates/operator_modal_view3d.py
index da019c2b653..9b49fd947ad 100644
--- a/release/scripts/templates/operator_modal_view3d.py
+++ b/release/scripts/templates/operator_modal_view3d.py
@@ -51,6 +51,3 @@ class ViewOperator(bpy.types.Operator):
else:
self.report({'WARNING'}, "Active space must be a View3d")
return {'CANCELLED'}
-
-
-bpy.types.register(ViewOperator)
diff --git a/release/scripts/templates/operator_simple.py b/release/scripts/templates/operator_simple.py
index 985a628c2d0..853bfa666eb 100644
--- a/release/scripts/templates/operator_simple.py
+++ b/release/scripts/templates/operator_simple.py
@@ -9,18 +9,14 @@ class SimpleOperator(bpy.types.Operator):
bl_idname = "object.simple_operator"
bl_label = "Simple Object Operator"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return context.active_object != None
def execute(self, context):
main(context)
return {'FINISHED'}
-def register():
- bpy.types.register(SimpleOperator)
-
-def unregister():
- bpy.types.unregister(SimpleOperator)
if __name__ == "__main__":
- register()
+ bpy.ops.object.simple_operator()
diff --git a/release/scripts/templates/operator_uv.py b/release/scripts/templates/operator_uv.py
index 1003bd6c58b..a18aaf358c8 100644
--- a/release/scripts/templates/operator_uv.py
+++ b/release/scripts/templates/operator_uv.py
@@ -15,21 +15,23 @@ def main(context):
# adjust UVs
for i, uv in enumerate(mesh.active_uv_texture.data):
uvs = uv.uv1, uv.uv2, uv.uv3, uv.uv4
- for j, v_idx in enumerate(mesh.faces[i].verts):
- if uv.uv_selected[j]:
+ for j, v_idx in enumerate(mesh.faces[i].vertices):
+ if uv.select_uv[j]:
# apply the location of the vertex as a UV
- uvs[j][:] = mesh.verts[v_idx].co.xy
+ uvs[j][:] = mesh.vertices[v_idx].co.xy
if is_editmode:
bpy.ops.object.mode_set(mode='EDIT', toggle=False)
+
class UvOperator(bpy.types.Operator):
- ''''''
+ '''UV Operator description'''
bl_idname = "uv.simple_operator"
bl_label = "Simple UV Operator"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
obj = context.active_object
return (obj and obj.type == 'MESH')
@@ -37,7 +39,6 @@ class UvOperator(bpy.types.Operator):
main(context)
return {'FINISHED'}
-bpy.types.register(UvOperator)
if __name__ == "__main__":
bpy.ops.uv.simple_operator()
diff --git a/release/scripts/templates/panel_simple.py b/release/scripts/templates/panel_simple.py
index aac4b6e715e..7c73e58a3e5 100644
--- a/release/scripts/templates/panel_simple.py
+++ b/release/scripts/templates/panel_simple.py
@@ -18,5 +18,3 @@ class OBJECT_PT_hello(bpy.types.Panel):
row.label(text="Active object is: " + obj.name)
row = layout.row()
row.prop(obj, "name")
-
-bpy.types.register(OBJECT_PT_hello)
diff --git a/release/scripts/ui/properties_animviz.py b/release/scripts/ui/properties_animviz.py
index 9eb046cc2c8..9b605d02215 100644
--- a/release/scripts/ui/properties_animviz.py
+++ b/release/scripts/ui/properties_animviz.py
@@ -19,35 +19,30 @@
# <pep8 compliant>
import bpy
-narrowui = bpy.context.user_preferences.view.properties_width_check
-################################################
# Generic Panels (Independent of DataType)
-class MotionPathButtonsPanel(bpy.types.Panel):
+class MotionPathButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_label = "Motion Paths"
bl_default_closed = True
- def draw_settings(self, context, avs, wide_ui, bones=False):
+ def draw_settings(self, context, avs, bones=False):
layout = self.layout
- mps = avs.motion_paths
+ mps = avs.motion_path
- if wide_ui:
- layout.prop(mps, "type", expand=True)
- else:
- layout.prop(mps, "type", text="")
+ layout.prop(mps, "type", expand=True)
split = layout.split()
col = split.column()
sub = col.column(align=True)
if (mps.type == 'CURRENT_FRAME'):
- sub.prop(mps, "before_current", text="Before")
- sub.prop(mps, "after_current", text="After")
+ sub.prop(mps, "frame_before", text="Before")
+ sub.prop(mps, "frame_after", text="After")
elif (mps.type == 'RANGE'):
sub.prop(mps, "frame_start", text="Start")
sub.prop(mps, "frame_end", text="End")
@@ -56,18 +51,17 @@ class MotionPathButtonsPanel(bpy.types.Panel):
if bones:
col.row().prop(mps, "bake_location", expand=True)
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Display:")
col.prop(mps, "show_frame_numbers", text="Frame Numbers")
- col.prop(mps, "highlight_keyframes", text="Keyframes")
+ col.prop(mps, "show_keyframe_highlight", text="Keyframes")
if bones:
- col.prop(mps, "search_all_action_keyframes", text="+ Non-Grouped Keyframes")
+ col.prop(mps, "show_keyframe_action_all", text="+ Non-Grouped Keyframes")
col.prop(mps, "show_keyframe_numbers", text="Keyframe Numbers")
# FIXME: this panel still needs to be ported so that it will work correctly with animviz
-class OnionSkinButtonsPanel(bpy.types.Panel):
+class OnionSkinButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_label = "Onion Skinning"
@@ -77,12 +71,8 @@ class OnionSkinButtonsPanel(bpy.types.Panel):
layout = self.layout
arm = context.armature
- wide_ui = context.region.width > narrowui
- if wide_ui:
- layout.prop(arm, "ghost_type", expand=True)
- else:
- layout.prop(arm, "ghost_type", text="")
+ layout.prop(arm, "ghost_type", expand=True)
split = layout.split()
@@ -97,124 +87,23 @@ class OnionSkinButtonsPanel(bpy.types.Panel):
sub.prop(arm, "ghost_step", text="Range")
sub.prop(arm, "ghost_size", text="Step")
- if wide_ui:
- col = split.column()
- col.label(text="Display:")
- col.prop(arm, "ghost_only_selected", text="Selected Only")
-
-################################################
-# Specific Panels for DataTypes
-
-
-class OBJECT_PT_motion_paths(MotionPathButtonsPanel):
- #bl_label = "Object Motion Paths"
- bl_context = "object"
-
- def poll(self, context):
- return (context.object)
-
- def draw(self, context):
- layout = self.layout
-
- ob = context.object
- wide_ui = context.region.width > narrowui
-
- self.draw_settings(context, ob.animation_visualisation, wide_ui)
-
- layout.separator()
-
- split = layout.split()
-
col = split.column()
- col.operator("object.paths_calculate", text="Calculate Paths")
-
- if wide_ui:
- col = split.column()
- col.operator("object.paths_clear", text="Clear Paths")
-
-
-class OBJECT_PT_onion_skinning(OnionSkinButtonsPanel):
- #bl_label = "Object Onion Skinning"
- bl_context = "object"
-
- def poll(self, context):
- return (context.object)
-
- def draw(self, context):
- layout = self.layout
-
- ob = context.object
- wide_ui = context.region.width > narrowui
-
- self.draw_settings(context, ob.animation_visualisation, wide_ui)
-
-
-class DATA_PT_motion_paths(MotionPathButtonsPanel):
- #bl_label = "Bones Motion Paths"
- bl_context = "data"
-
- def poll(self, context):
- # XXX: include posemode check?
- return (context.object) and (context.armature)
-
- def draw(self, context):
- layout = self.layout
-
- ob = context.object
- wide_ui = context.region.width > narrowui
-
- self.draw_settings(context, ob.pose.animation_visualisation, wide_ui, bones=True)
-
- layout.separator()
-
- split = layout.split()
-
- col = split.column()
- col.operator("pose.paths_calculate", text="Calculate Paths")
-
- if wide_ui:
- col = split.column()
- col.operator("pose.paths_clear", text="Clear Paths")
-
-
-class DATA_PT_onion_skinning(OnionSkinButtonsPanel):
- #bl_label = "Bones Onion Skinning"
- bl_context = "data"
-
- def poll(self, context):
- # XXX: include posemode check?
- return (context.object) and (context.armature)
-
- def draw(self, context):
- layout = self.layout
+ col.label(text="Display:")
+ col.prop(arm, "show_only_ghost_selected", text="Selected Only")
- ob = context.object
- wide_ui = context.region.width > narrowui
- self.draw_settings(context, ob.pose.animation_visualisation, wide_ui, bones=True)
# NOTE:
-# The specialised panel types defined here (i.e. OBJECT_PT_*, etc.)
-# aren't registered here, but are rather imported to (and registered)
-# in the files defining the contexts where they reside. Otherwise,
-# these panels appear at the top of the lists by default.
-#
-# However, we keep these empty register funcs here just in case
-# something will need them again one day, and also to make
-# it easier to maintain these scripts.
-classes = []
+# The specialised panel types are derived in their respective UI modules
+
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/properties_data_armature.py b/release/scripts/ui/properties_data_armature.py
index 38903cc1f27..7de06554751 100644
--- a/release/scripts/ui/properties_data_armature.py
+++ b/release/scripts/ui/properties_data_armature.py
@@ -20,19 +20,18 @@
import bpy
from rna_prop_ui import PropertyPanel
-narrowui = bpy.context.user_preferences.view.properties_width_check
-
-class DataButtonsPanel(bpy.types.Panel):
+class ArmatureButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "data"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return context.armature
-class DATA_PT_context_arm(DataButtonsPanel):
+class DATA_PT_context_arm(ArmatureButtonsPanel, bpy.types.Panel):
bl_label = ""
bl_show_header = False
@@ -42,60 +41,47 @@ class DATA_PT_context_arm(DataButtonsPanel):
ob = context.object
arm = context.armature
space = context.space_data
- wide_ui = context.region.width > narrowui
-
- if wide_ui:
- split = layout.split(percentage=0.65)
- if ob:
- split.template_ID(ob, "data")
- split.separator()
- elif arm:
- split.template_ID(space, "pin_id")
- split.separator()
- else:
- layout.template_ID(ob, "data")
+ split = layout.split(percentage=0.65)
+ if ob:
+ split.template_ID(ob, "data")
+ split.separator()
+ elif arm:
+ split.template_ID(space, "pin_id")
+ split.separator()
-class DATA_PT_custom_props_arm(DataButtonsPanel, PropertyPanel):
- _context_path = "object.data"
-
-class DATA_PT_skeleton(DataButtonsPanel):
+class DATA_PT_skeleton(ArmatureButtonsPanel, bpy.types.Panel):
bl_label = "Skeleton"
def draw(self, context):
layout = self.layout
arm = context.armature
- wide_ui = context.region.width > narrowui
- if wide_ui:
- layout.prop(arm, "pose_position", expand=True)
- else:
- layout.prop(arm, "pose_position", text="")
+ layout.prop(arm, "pose_position", expand=True)
split = layout.split()
col = split.column()
col.label(text="Layers:")
- col.prop(arm, "layer", text="")
+ col.prop(arm, "layers", text="")
col.label(text="Protected Layers:")
- col.prop(arm, "layer_protection", text="")
+ col.prop(arm, "layers_protected", text="")
col.label(text="Deform:")
split = layout.split()
col = split.column()
- col.prop(arm, "deform_vertexgroups", text="Vertex Groups")
- col.prop(arm, "deform_envelope", text="Envelopes")
+ col.prop(arm, "use_deform_vertex_groups", text="Vertex Groups")
+ col.prop(arm, "use_deform_envelopes", text="Envelopes")
- if wide_ui:
- col = split.column()
- col.prop(arm, "deform_quaternion", text="Quaternion")
+ col = split.column()
+ col.prop(arm, "use_deform_preserve_volume", text="Quaternion")
-class DATA_PT_display(DataButtonsPanel):
+class DATA_PT_display(ArmatureButtonsPanel, bpy.types.Panel):
bl_label = "Display"
def draw(self, context):
@@ -103,30 +89,27 @@ class DATA_PT_display(DataButtonsPanel):
ob = context.object
arm = context.armature
- wide_ui = context.region.width > narrowui
- if wide_ui:
- layout.row().prop(arm, "drawtype", expand=True)
- else:
- layout.row().prop(arm, "drawtype", text="")
+ layout.row().prop(arm, "draw_type", expand=True)
split = layout.split()
col = split.column()
- col.prop(arm, "draw_names", text="Names")
- col.prop(arm, "draw_axes", text="Axes")
- col.prop(arm, "draw_custom_bone_shapes", text="Shapes")
+ col.prop(arm, "show_names", text="Names")
+ col.prop(arm, "show_axes", text="Axes")
+ col.prop(arm, "show_bone_custom_shapes", text="Shapes")
- if wide_ui:
- col = split.column()
- col.prop(arm, "draw_group_colors", text="Colors")
- col.prop(arm, "delay_deform", text="Delay Refresh")
+ col = split.column()
+ col.prop(arm, "show_group_colors", text="Colors")
+ col.prop(ob, "show_x_ray", text="X-Ray")
+ col.prop(arm, "use_deform_delay", text="Delay Refresh")
-class DATA_PT_bone_groups(DataButtonsPanel):
+class DATA_PT_bone_groups(ArmatureButtonsPanel, bpy.types.Panel):
bl_label = "Bone Groups"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return (context.object and context.object.type == 'ARMATURE' and context.object.pose)
def draw(self, context):
@@ -134,7 +117,6 @@ class DATA_PT_bone_groups(DataButtonsPanel):
ob = context.object
pose = ob.pose
- wide_ui = context.region.width > narrowui
row = layout.row()
row.template_list(pose, "bone_groups", pose, "active_bone_group_index", rows=2)
@@ -156,8 +138,7 @@ class DATA_PT_bone_groups(DataButtonsPanel):
col = split.column()
col.prop(group, "color_set")
if group.color_set:
- if wide_ui:
- col = split.column()
+ col = split.column()
col.template_triColorSet(group, "colors")
row = layout.row()
@@ -173,21 +154,15 @@ class DATA_PT_bone_groups(DataButtonsPanel):
# TODO: this panel will soon be depreceated too
-
-
-class DATA_PT_ghost(DataButtonsPanel):
+class DATA_PT_ghost(ArmatureButtonsPanel, bpy.types.Panel):
bl_label = "Ghost"
def draw(self, context):
layout = self.layout
arm = context.armature
- wide_ui = context.region.width > narrowui
- if wide_ui:
- layout.prop(arm, "ghost_type", expand=True)
- else:
- layout.prop(arm, "ghost_type", text="")
+ layout.prop(arm, "ghost_type", expand=True)
split = layout.split()
@@ -202,17 +177,17 @@ class DATA_PT_ghost(DataButtonsPanel):
sub.prop(arm, "ghost_step", text="Range")
sub.prop(arm, "ghost_size", text="Step")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Display:")
- col.prop(arm, "ghost_only_selected", text="Selected Only")
+ col.prop(arm, "show_only_ghost_selected", text="Selected Only")
-class DATA_PT_iksolver_itasc(DataButtonsPanel):
+class DATA_PT_iksolver_itasc(ArmatureButtonsPanel, bpy.types.Panel):
bl_label = "iTaSC parameters"
bl_default_closed = True
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
ob = context.object
return (ob and ob.pose)
@@ -222,7 +197,6 @@ class DATA_PT_iksolver_itasc(DataButtonsPanel):
ob = context.object
itasc = ob.pose.ik_param
- wide_ui = (context.region.width > narrowui)
row = layout.row()
row.prop(ob.pose, "ik_solver")
@@ -232,63 +206,91 @@ class DATA_PT_iksolver_itasc(DataButtonsPanel):
simulation = (itasc.mode == 'SIMULATION')
if simulation:
layout.label(text="Reiteration:")
- layout.prop(itasc, "reiteration", expand=True)
+ layout.prop(itasc, "reiteration_method", expand=True)
split = layout.split()
- split.active = not simulation or itasc.reiteration != 'NEVER'
+ split.active = not simulation or itasc.reiteration_method != 'NEVER'
col = split.column()
col.prop(itasc, "precision")
- if wide_ui:
- col = split.column()
- col.prop(itasc, "num_iter")
+ col = split.column()
+ col.prop(itasc, "iterations")
if simulation:
- layout.prop(itasc, "auto_step")
+ layout.prop(itasc, "use_auto_step")
row = layout.row()
- if itasc.auto_step:
- row.prop(itasc, "min_step", text="Min")
- row.prop(itasc, "max_step", text="Max")
+ if itasc.use_auto_step:
+ row.prop(itasc, "step_min", text="Min")
+ row.prop(itasc, "step_max", text="Max")
else:
- row.prop(itasc, "num_step")
+ row.prop(itasc, "step_count")
layout.prop(itasc, "solver")
if simulation:
layout.prop(itasc, "feedback")
- layout.prop(itasc, "max_velocity")
+ layout.prop(itasc, "velocity_max")
if itasc.solver == 'DLS':
row = layout.row()
- row.prop(itasc, "dampmax", text="Damp", slider=True)
- row.prop(itasc, "dampeps", text="Eps", slider=True)
+ row.prop(itasc, "damping_max", text="Damp", slider=True)
+ row.prop(itasc, "damping_epsilon", text="Eps", slider=True)
+
+from properties_animviz import MotionPathButtonsPanel, OnionSkinButtonsPanel
+
+class DATA_PT_motion_paths(MotionPathButtonsPanel, bpy.types.Panel):
+ #bl_label = "Bones Motion Paths"
+ bl_context = "data"
+
+ @classmethod
+ def poll(cls, context):
+ # XXX: include posemode check?
+ return (context.object) and (context.armature)
+
+ def draw(self, context):
+ layout = self.layout
+
+ ob = context.object
+
+ self.draw_settings(context, ob.pose.animation_visualisation, bones=True)
+
+ layout.separator()
+
+ split = layout.split()
+
+ col = split.column()
+ col.operator("pose.paths_calculate", text="Calculate Paths")
-# import generic panels from other files
-from properties_animviz import DATA_PT_motion_paths, DATA_PT_onion_skinning
+ col = split.column()
+ col.operator("pose.paths_clear", text="Clear Paths")
+
+
+class DATA_PT_onion_skinning(OnionSkinButtonsPanel): #, bpy.types.Panel): # inherit from panel when ready
+ #bl_label = "Bones Onion Skinning"
+ bl_context = "data"
+
+ @classmethod
+ def poll(cls, context):
+ # XXX: include posemode check?
+ return (context.object) and (context.armature)
-classes = [
- DATA_PT_context_arm,
- DATA_PT_skeleton,
- DATA_PT_display,
- DATA_PT_bone_groups,
- DATA_PT_ghost,
- DATA_PT_iksolver_itasc,
+ def draw(self, context):
+ layout = self.layout
- DATA_PT_motion_paths,
- #DATA_PT_onion_skinning,
+ ob = context.object
- DATA_PT_custom_props_arm]
+ self.draw_settings(context, ob.pose.animation_visualisation, bones=True)
+class DATA_PT_custom_props_arm(ArmatureButtonsPanel, PropertyPanel, bpy.types.Panel):
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ _context_path = "object.data"
+
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/properties_data_armature_rigify.py b/release/scripts/ui/properties_data_armature_rigify.py
index 43021858f9f..1c2370cbb28 100644
--- a/release/scripts/ui/properties_data_armature_rigify.py
+++ b/release/scripts/ui/properties_data_armature_rigify.py
@@ -19,8 +19,6 @@
# <pep8 compliant>
import bpy
-narrowui = bpy.context.user_preferences.view.properties_width_check
-
class PoseTemplateSettings(bpy.types.IDPropertyGroup):
pass
@@ -44,7 +42,8 @@ class DATA_PT_template(bpy.types.Panel):
templates = []
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
if not context.armature:
return False
obj = context.object
@@ -85,7 +84,7 @@ class DATA_PT_template(bpy.types.Panel):
row.operator("pose.metarig_validate", text="Check")
row.operator("pose.metarig_graph", text="Graph")
row = layout.row()
- row.prop(pose_templates, "generate_def_rig")
+ row.prop(pose_templates, "use_generate_deform_rig")
row = layout.row()
col = row.column()
@@ -96,12 +95,13 @@ class DATA_PT_template(bpy.types.Panel):
subsubrow.operator("pose.metarig_assign", text="Assign")
subsubrow.operator("pose.metarig_clear", text="Clear")
- subsubrow = subrow.split(percentage=0.8)
- subsubrow.operator("pose.metarig_sample_add", text="Sample").metarig_type = self.templates[pose_templates.active_template_index]
- subsubrow.operator("pose.metarig_sample_add", text="All").metarig_type = "" # self.templates[pose_templates.active_template_index]
+ if self.templates:
+ subsubrow = subrow.split(percentage=0.8)
+ subsubrow.operator("pose.metarig_sample_add", text="Sample").metarig_type = self.templates[pose_templates.active_template_index]
+ subsubrow.operator("pose.metarig_sample_add", text="All").metarig_type = "" # self.templates[pose_templates.active_template_index]
- sub = row.column(align=True)
- sub.operator("pose.metarig_reload", icon="FILE_REFRESH", text="")
+ sub = row.column(align=True)
+ sub.operator("pose.metarig_reload", icon="FILE_REFRESH", text="")
# operators
@@ -151,7 +151,7 @@ class Generate(bpy.types.Operator):
import rigify
reload(rigify)
- meta_def = context.scene.pose_templates.generate_def_rig
+ meta_def = context.scene.pose_templates.use_generate_deform_rig
try:
rigify.generate_rig(context, context.object, META_DEF=meta_def)
@@ -212,7 +212,7 @@ class Graph(bpy.types.Operator):
import bpy
reload(graphviz_export)
obj = bpy.context.object
- path = os.path.splitext(bpy.data.filepath)[0] + "-" + bpy.utils.clean_name(obj.name)
+ path = os.path.splitext(bpy.data.filepath)[0] + "-" + bpy.path.clean_name(obj.name)
path_dot = path + ".dot"
path_png = path + ".png"
saved = graphviz_export.graph_armature(bpy.context.object, path_dot, CONSTRAINTS=False, DRIVERS=False)
@@ -249,7 +249,7 @@ class AsScript(bpy.types.Operator):
def invoke(self, context, event):
import os
obj = context.object
- self.properties.filepath = os.path.splitext(bpy.data.filepath)[0] + "-" + bpy.utils.clean_name(obj.name) + ".py"
+ self.properties.filepath = os.path.splitext(bpy.data.filepath)[0] + "-" + bpy.path.clean_name(obj.name) + ".py"
wm = context.manager
wm.add_fileselect(self)
return {'RUNNING_MODAL'}
@@ -262,7 +262,8 @@ class ActiveAssign(bpy.types.Operator):
bl_idname = "pose.metarig_assign"
bl_label = "Assign to the active posebone"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
bone = context.active_pose_bone
return bool(bone and bone.id_data.mode == 'POSE')
@@ -280,7 +281,8 @@ class ActiveClear(bpy.types.Operator):
bl_idname = "pose.metarig_clear"
bl_label = "Metarig Clear Type"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
bone = context.active_pose_bone
return bool(bone and bone.id_data.mode == 'POSE')
@@ -304,36 +306,14 @@ class INFO_MT_armature_metarig_add(bpy.types.Menu):
layout.operator_context = 'INVOKE_REGION_WIN'
for submodule_type in rigify.get_submodule_types():
- text = bpy.utils.display_name(submodule_type)
+ text = bpy.path.display_name(submodule_type)
layout.operator("pose.metarig_sample_add", text=text, icon='OUTLINER_OB_ARMATURE').metarig_type = submodule_type
-classes = [
- DATA_PT_template,
-
- PoseTemplateSettings,
- PoseTemplate,
-
- Reload,
- Generate,
- Validate,
- Sample,
- Graph,
- AsScript,
-
- ActiveAssign,
- ActiveClear,
-
- INFO_MT_armature_metarig_add]
-
menu_func = (lambda self, context: self.layout.menu("INFO_MT_armature_metarig_add", icon='OUTLINER_OB_ARMATURE'))
import space_info # ensure the menu is loaded first
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
-
PoseTemplate.StringProperty(attr="name",
name="Name of the slave",
description="",
@@ -349,7 +329,7 @@ def register():
min=-1,
max=65535)
- PoseTemplateSettings.BoolProperty(attr="generate_def_rig",
+ PoseTemplateSettings.BoolProperty(attr="use_generate_deform_rig",
name="Create Deform Rig",
description="Create a copy of the metarig, constrainted by the generated rig",
default=False)
@@ -360,11 +340,8 @@ def register():
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
-
- bpy.types.INFO_MT_armature_add.remove(menu_func)
+ bpy.types.Scene.RemoveProperty("pose_templates")
+ space_info.INFO_MT_armature_add.remove(menu_func)
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/properties_data_bone.py b/release/scripts/ui/properties_data_bone.py
index b6b638ef380..663d576a9c0 100644
--- a/release/scripts/ui/properties_data_bone.py
+++ b/release/scripts/ui/properties_data_bone.py
@@ -20,19 +20,18 @@
import bpy
from rna_prop_ui import PropertyPanel
-narrowui = bpy.context.user_preferences.view.properties_width_check
-
-class BoneButtonsPanel(bpy.types.Panel):
+class BoneButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "bone"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return (context.bone or context.edit_bone)
-class BONE_PT_context_bone(BoneButtonsPanel):
+class BONE_PT_context_bone(BoneButtonsPanel, bpy.types.Panel):
bl_label = ""
bl_show_header = False
@@ -48,18 +47,7 @@ class BONE_PT_context_bone(BoneButtonsPanel):
row.prop(bone, "name", text="")
-class BONE_PT_custom_props(BoneButtonsPanel, PropertyPanel):
-
- @property
- def _context_path(self):
- obj = bpy.context.object
- if obj and obj.mode == 'POSE':
- return "active_pose_bone"
- else:
- return "active_bone"
-
-
-class BONE_PT_transform(BoneButtonsPanel):
+class BONE_PT_transform(BoneButtonsPanel, bpy.types.Panel):
bl_label = "Transform"
def draw(self, context):
@@ -67,72 +55,50 @@ class BONE_PT_transform(BoneButtonsPanel):
ob = context.object
bone = context.bone
- wide_ui = context.region.width > narrowui
if not bone:
bone = context.edit_bone
- if wide_ui:
- row = layout.row()
- row.column().prop(bone, "head")
- row.column().prop(bone, "tail")
-
- col = row.column()
- sub = col.column(align=True)
- sub.label(text="Roll:")
- sub.prop(bone, "roll", text="")
- sub.label()
- sub.prop(bone, "locked")
- else:
- col = layout.column()
- col.prop(bone, "head")
- col.prop(bone, "tail")
- col.prop(bone, "roll")
- col.prop(bone, "locked")
+ row = layout.row()
+ row.column().prop(bone, "head")
+ row.column().prop(bone, "tail")
+
+ col = row.column()
+ sub = col.column(align=True)
+ sub.label(text="Roll:")
+ sub.prop(bone, "roll", text="")
+ sub.label()
+ sub.prop(bone, "lock")
else:
pchan = ob.pose.bones[context.bone.name]
- if wide_ui:
- row = layout.row()
- col = row.column()
- col.prop(pchan, "location")
- col.active = not (bone.parent and bone.connected)
-
- col = row.column()
- if pchan.rotation_mode == 'QUATERNION':
- col.prop(pchan, "rotation_quaternion", text="Rotation")
- elif pchan.rotation_mode == 'AXIS_ANGLE':
- #col.label(text="Rotation")
- #col.prop(pchan, "rotation_angle", text="Angle")
- #col.prop(pchan, "rotation_axis", text="Axis")
- col.prop(pchan, "rotation_axis_angle", text="Rotation")
- else:
- col.prop(pchan, "rotation_euler", text="Rotation")
-
- row.column().prop(pchan, "scale")
-
- layout.prop(pchan, "rotation_mode")
+ row = layout.row()
+ col = row.column()
+ col.prop(pchan, "location")
+ col.active = not (bone.parent and bone.use_connect)
+
+ col = row.column()
+ if pchan.rotation_mode == 'QUATERNION':
+ col.prop(pchan, "rotation_quaternion", text="Rotation")
+ elif pchan.rotation_mode == 'AXIS_ANGLE':
+ #col.label(text="Rotation")
+ #col.prop(pchan, "rotation_angle", text="Angle")
+ #col.prop(pchan, "rotation_axis", text="Axis")
+ col.prop(pchan, "rotation_axis_angle", text="Rotation")
else:
- col = layout.column()
- sub = col.column()
- sub.active = not (bone.parent and bone.connected)
- sub.prop(pchan, "location")
- col.label(text="Rotation:")
- col.prop(pchan, "rotation_mode", text="")
- if pchan.rotation_mode == 'QUATERNION':
- col.prop(pchan, "rotation_quaternion", text="")
- elif pchan.rotation_mode == 'AXIS_ANGLE':
- col.prop(pchan, "rotation_axis_angle", text="")
- else:
- col.prop(pchan, "rotation_euler", text="")
- col.prop(pchan, "scale")
-
-
-class BONE_PT_transform_locks(BoneButtonsPanel):
+ col.prop(pchan, "rotation_euler", text="Rotation")
+
+ row.column().prop(pchan, "scale")
+
+ layout.prop(pchan, "rotation_mode")
+
+
+class BONE_PT_transform_locks(BoneButtonsPanel, bpy.types.Panel):
bl_label = "Transform Locks"
bl_default_closed = True
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return context.bone
def draw(self, context):
@@ -145,7 +111,7 @@ class BONE_PT_transform_locks(BoneButtonsPanel):
row = layout.row()
col = row.column()
col.prop(pchan, "lock_location")
- col.active = not (bone.parent and bone.connected)
+ col.active = not (bone.parent and bone.use_connect)
col = row.column()
if pchan.rotation_mode in ('QUATERNION', 'AXIS_ANGLE'):
@@ -159,7 +125,7 @@ class BONE_PT_transform_locks(BoneButtonsPanel):
row.column().prop(pchan, "lock_scale")
-class BONE_PT_relations(BoneButtonsPanel):
+class BONE_PT_relations(BoneButtonsPanel, bpy.types.Panel):
bl_label = "Relations"
def draw(self, context):
@@ -168,7 +134,6 @@ class BONE_PT_relations(BoneButtonsPanel):
ob = context.object
bone = context.bone
arm = context.armature
- wide_ui = context.region.width > narrowui
if not bone:
bone = context.edit_bone
@@ -180,7 +145,7 @@ class BONE_PT_relations(BoneButtonsPanel):
col = split.column()
col.label(text="Layers:")
- col.prop(bone, "layer", text="")
+ col.prop(bone, "layers", text="")
col.separator()
@@ -188,8 +153,7 @@ class BONE_PT_relations(BoneButtonsPanel):
col.label(text="Bone Group:")
col.prop_object(pchan, "bone_group", ob.pose, "bone_groups", text="")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Parent:")
if context.bone:
col.prop(bone, "parent", text="")
@@ -198,18 +162,19 @@ class BONE_PT_relations(BoneButtonsPanel):
sub = col.column()
sub.active = (bone.parent is not None)
- sub.prop(bone, "connected")
- sub.prop(bone, "hinge", text="Inherit Rotation")
- sub.prop(bone, "inherit_scale", text="Inherit Scale")
+ sub.prop(bone, "use_connect")
+ sub.prop(bone, "use_hinge", text="Inherit Rotation")
+ sub.prop(bone, "use_inherit_scale", text="Inherit Scale")
sub = col.column()
- sub.active = (not bone.parent or not bone.connected)
- sub.prop(bone, "local_location", text="Local Location")
+ sub.active = (not bone.parent or not bone.use_connect)
+ sub.prop(bone, "use_local_location", text="Local Location")
-class BONE_PT_display(BoneButtonsPanel):
+class BONE_PT_display(BoneButtonsPanel, bpy.types.Panel):
bl_label = "Display"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return context.bone
def draw(self, context):
@@ -217,7 +182,6 @@ class BONE_PT_display(BoneButtonsPanel):
ob = context.object
bone = context.bone
- wide_ui = context.region.width > narrowui
if not bone:
bone = context.edit_bone
@@ -230,11 +194,10 @@ class BONE_PT_display(BoneButtonsPanel):
split = layout.split()
col = split.column()
- col.prop(bone, "draw_wire", text="Wireframe")
- col.prop(bone, "hidden", text="Hide")
+ col.prop(bone, "show_wire", text="Wireframe")
+ col.prop(bone, "hide", text="Hide")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Custom Shape:")
col.prop(pchan, "custom_shape", text="")
@@ -242,11 +205,12 @@ class BONE_PT_display(BoneButtonsPanel):
col.prop_object(pchan, "custom_shape_transform", ob.pose, "bones", text="At")
-class BONE_PT_inverse_kinematics(BoneButtonsPanel):
+class BONE_PT_inverse_kinematics(BoneButtonsPanel, bpy.types.Panel):
bl_label = "Inverse Kinematics"
bl_default_closed = True
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return context.active_pose_bone
def draw(self, context):
@@ -255,92 +219,81 @@ class BONE_PT_inverse_kinematics(BoneButtonsPanel):
ob = context.object
bone = context.bone
pchan = ob.pose.bones[bone.name]
- wide_ui = context.region.width > narrowui
row = layout.row()
row.prop(ob.pose, "ik_solver")
split = layout.split(percentage=0.25)
- split.prop(pchan, "ik_dof_x", text="X")
- split.active = pchan.has_ik
+ split.prop(pchan, "lock_ik_x", text="Lock X")
+ split.active = pchan.is_in_ik_chain
row = split.row()
row.prop(pchan, "ik_stiffness_x", text="Stiffness", slider=True)
- row.active = pchan.ik_dof_x and pchan.has_ik
+ row.active = pchan.lock_ik_x == False and pchan.is_in_ik_chain
- if wide_ui:
- split = layout.split(percentage=0.25)
- sub = split.row()
- else:
- sub = layout.column(align=True)
- sub.prop(pchan, "ik_limit_x", text="Limit")
- sub.active = pchan.ik_dof_x and pchan.has_ik
- if wide_ui:
- sub = split.row(align=True)
+ split = layout.split(percentage=0.25)
+ sub = split.row()
+
+ sub.prop(pchan, "use_ik_limit_x", text="Limit")
+ sub.active = pchan.lock_ik_x == False and pchan.is_in_ik_chain
+ sub = split.row(align=True)
sub.prop(pchan, "ik_min_x", text="")
sub.prop(pchan, "ik_max_x", text="")
- sub.active = pchan.ik_dof_x and pchan.ik_limit_x and pchan.has_ik
+ sub.active = pchan.lock_ik_x == False and pchan.use_ik_limit_x and pchan.is_in_ik_chain
split = layout.split(percentage=0.25)
- split.prop(pchan, "ik_dof_y", text="Y")
- split.active = pchan.has_ik and pchan.has_ik
+ split.prop(pchan, "lock_ik_y", text="Y")
+ split.active = pchan.is_in_ik_chain and pchan.is_in_ik_chain
row = split.row()
row.prop(pchan, "ik_stiffness_y", text="Stiffness", slider=True)
- row.active = pchan.ik_dof_y and pchan.has_ik
+ row.active = pchan.lock_ik_y == False and pchan.is_in_ik_chain
- if wide_ui:
- split = layout.split(percentage=0.25)
- sub = split.row()
- else:
- sub = layout.column(align=True)
- sub.prop(pchan, "ik_limit_y", text="Limit")
- sub.active = pchan.ik_dof_y and pchan.has_ik
- if wide_ui:
- sub = split.row(align=True)
+ split = layout.split(percentage=0.25)
+ sub = split.row()
+
+ sub.prop(pchan, "use_ik_limit_y", text="Limit")
+ sub.active = pchan.lock_ik_y == False and pchan.is_in_ik_chain
+
+ sub = split.row(align=True)
sub.prop(pchan, "ik_min_y", text="")
sub.prop(pchan, "ik_max_y", text="")
- sub.active = pchan.ik_dof_y and pchan.ik_limit_y and pchan.has_ik
+ sub.active = pchan.lock_ik_y == False and pchan.use_ik_limit_y and pchan.is_in_ik_chain
split = layout.split(percentage=0.25)
- split.prop(pchan, "ik_dof_z", text="Z")
- split.active = pchan.has_ik and pchan.has_ik
+ split.prop(pchan, "lock_ik_z", text="Z")
+ split.active = pchan.is_in_ik_chain and pchan.is_in_ik_chain
sub = split.row()
sub.prop(pchan, "ik_stiffness_z", text="Stiffness", slider=True)
- sub.active = pchan.ik_dof_z and pchan.has_ik
+ sub.active = pchan.lock_ik_z == False and pchan.is_in_ik_chain
- if wide_ui:
- split = layout.split(percentage=0.25)
- sub = split.row()
- else:
- sub = layout.column(align=True)
- sub.prop(pchan, "ik_limit_z", text="Limit")
- sub.active = pchan.ik_dof_z and pchan.has_ik
- if wide_ui:
- sub = split.row(align=True)
+ split = layout.split(percentage=0.25)
+ sub = split.row()
+
+ sub.prop(pchan, "use_ik_limit_z", text="Limit")
+ sub.active = pchan.lock_ik_z == False and pchan.is_in_ik_chain
+ sub = split.row(align=True)
sub.prop(pchan, "ik_min_z", text="")
sub.prop(pchan, "ik_max_z", text="")
- sub.active = pchan.ik_dof_z and pchan.ik_limit_z and pchan.has_ik
+ sub.active = pchan.lock_ik_z == False and pchan.use_ik_limit_z and pchan.is_in_ik_chain
split = layout.split()
split.prop(pchan, "ik_stretch", text="Stretch", slider=True)
- if wide_ui:
- split.label()
- split.active = pchan.has_ik
+ split.label()
+ split.active = pchan.is_in_ik_chain
if ob.pose.ik_solver == 'ITASC':
split = layout.split()
col = split.column()
- col.prop(pchan, "ik_rot_control", text="Control Rotation")
- col.active = pchan.has_ik
- if wide_ui:
- col = split.column()
- col.prop(pchan, "ik_rot_weight", text="Weight", slider=True)
- col.active = pchan.has_ik
+ col.prop(pchan, "use_ik_rotation_control", text="Control Rotation")
+ col.active = pchan.is_in_ik_chain
+ col = split.column()
+ col.prop(pchan, "ik_rotation_weight", text="Weight", slider=True)
+ col.active = pchan.is_in_ik_chain
# not supported yet
#row = layout.row()
- #row.prop(pchan, "ik_lin_control", text="Joint Size")
- #row.prop(pchan, "ik_lin_weight", text="Weight", slider=True)
+ #row.prop(pchan, "use_ik_linear_control", text="Joint Size")
+ #row.prop(pchan, "ik_linear_weight", text="Weight", slider=True)
-class BONE_PT_deform(BoneButtonsPanel):
+class BONE_PT_deform(BoneButtonsPanel, bpy.types.Panel):
bl_label = "Deform"
bl_default_closed = True
@@ -350,18 +303,17 @@ class BONE_PT_deform(BoneButtonsPanel):
if not bone:
bone = context.edit_bone
- self.layout.prop(bone, "deform", text="")
+ self.layout.prop(bone, "use_deform", text="")
def draw(self, context):
layout = self.layout
bone = context.bone
- wide_ui = context.region.width > narrowui
if not bone:
bone = context.edit_bone
- layout.active = bone.deform
+ layout.active = bone.use_deform
split = layout.split()
@@ -371,15 +323,14 @@ class BONE_PT_deform(BoneButtonsPanel):
sub = col.column(align=True)
sub.prop(bone, "envelope_distance", text="Distance")
sub.prop(bone, "envelope_weight", text="Weight")
- col.prop(bone, "multiply_vertexgroup_with_envelope", text="Multiply")
+ col.prop(bone, "use_envelope_multiply", text="Multiply")
sub = col.column(align=True)
sub.label(text="Radius:")
sub.prop(bone, "head_radius", text="Head")
sub.prop(bone, "tail_radius", text="Tail")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Curved Bones:")
sub = col.column(align=True)
@@ -388,30 +339,27 @@ class BONE_PT_deform(BoneButtonsPanel):
sub.prop(bone, "bbone_out", text="Ease Out")
col.label(text="Offset:")
- col.prop(bone, "cyclic_offset")
+ col.prop(bone, "use_cyclic_offset")
-classes = [
- BONE_PT_context_bone,
- BONE_PT_transform,
- BONE_PT_transform_locks,
- BONE_PT_relations,
- BONE_PT_display,
- BONE_PT_inverse_kinematics,
- BONE_PT_deform,
- BONE_PT_custom_props]
+class BONE_PT_custom_props(BoneButtonsPanel, PropertyPanel, bpy.types.Panel):
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+
+ @property
+ def _context_path(self):
+ obj = bpy.context.object
+ if obj and obj.mode == 'POSE':
+ return "active_pose_bone"
+ else:
+ return "active_bone"
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/properties_data_camera.py b/release/scripts/ui/properties_data_camera.py
index 3abd460c427..1e4ec6deb18 100644
--- a/release/scripts/ui/properties_data_camera.py
+++ b/release/scripts/ui/properties_data_camera.py
@@ -20,20 +20,19 @@
import bpy
from rna_prop_ui import PropertyPanel
-narrowui = bpy.context.user_preferences.view.properties_width_check
-
-class DataButtonsPanel(bpy.types.Panel):
+class CameraButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "data"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
engine = context.scene.render.engine
- return context.camera and (engine in self.COMPAT_ENGINES)
+ return context.camera and (engine in cls.COMPAT_ENGINES)
-class DATA_PT_context_camera(DataButtonsPanel):
+class DATA_PT_context_camera(CameraButtonsPanel, bpy.types.Panel):
bl_label = ""
bl_show_header = False
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
@@ -44,29 +43,17 @@ class DATA_PT_context_camera(DataButtonsPanel):
ob = context.object
cam = context.camera
space = context.space_data
- wide_ui = context.region.width > narrowui
-
- if wide_ui:
- split = layout.split(percentage=0.65)
- if ob:
- split.template_ID(ob, "data")
- split.separator()
- elif cam:
- split.template_ID(space, "pin_id")
- split.separator()
- else:
- if ob:
- layout.template_ID(ob, "data")
- elif cam:
- layout.template_ID(space, "pin_id")
-
-
-class DATA_PT_custom_props_camera(DataButtonsPanel, PropertyPanel):
- _context_path = "object.data"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+
+ split = layout.split(percentage=0.65)
+ if ob:
+ split.template_ID(ob, "data")
+ split.separator()
+ elif cam:
+ split.template_ID(space, "pin_id")
+ split.separator()
-class DATA_PT_camera(DataButtonsPanel):
+class DATA_PT_camera(CameraButtonsPanel, bpy.types.Panel):
bl_label = "Lens"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
@@ -74,12 +61,8 @@ class DATA_PT_camera(DataButtonsPanel):
layout = self.layout
cam = context.camera
- wide_ui = context.region.width > narrowui
- if wide_ui:
- layout.prop(cam, "type", expand=True)
- else:
- layout.prop(cam, "type", text="")
+ layout.prop(cam, "type", expand=True)
split = layout.split()
@@ -89,14 +72,13 @@ class DATA_PT_camera(DataButtonsPanel):
col.prop(cam, "lens", text="Angle")
elif cam.lens_unit == 'DEGREES':
col.prop(cam, "angle")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(cam, "lens_unit", text="")
elif cam.type == 'ORTHO':
col.prop(cam, "ortho_scale")
- layout.prop(cam, "panorama")
+ layout.prop(cam, "use_panorama")
split = layout.split()
@@ -105,8 +87,7 @@ class DATA_PT_camera(DataButtonsPanel):
col.prop(cam, "shift_x", text="X")
col.prop(cam, "shift_y", text="Y")
- if wide_ui:
- col = split.column(align=True)
+ col = split.column(align=True)
col.label(text="Clipping:")
col.prop(cam, "clip_start", text="Start")
col.prop(cam, "clip_end", text="End")
@@ -118,16 +99,14 @@ class DATA_PT_camera(DataButtonsPanel):
col = split.column()
col.prop(cam, "dof_object", text="")
- if wide_ui:
- col = split.column()
- else:
- col = col.column()
+ col = split.column()
+
if cam.dof_object != None:
col.enabled = False
col.prop(cam, "dof_distance", text="Distance")
-class DATA_PT_camera_display(DataButtonsPanel):
+class DATA_PT_camera_display(CameraButtonsPanel, bpy.types.Panel):
bl_label = "Display"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
@@ -135,7 +114,6 @@ class DATA_PT_camera_display(DataButtonsPanel):
layout = self.layout
cam = context.camera
- wide_ui = context.region.width > narrowui
split = layout.split()
@@ -145,8 +123,7 @@ class DATA_PT_camera_display(DataButtonsPanel):
col.prop(cam, "show_title_safe", text="Title Safe")
col.prop(cam, "show_name", text="Name")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(cam, "draw_size", text="Size")
col.separator()
col.prop(cam, "show_passepartout", text="Passepartout")
@@ -155,24 +132,17 @@ class DATA_PT_camera_display(DataButtonsPanel):
sub.prop(cam, "passepartout_alpha", text="Alpha", slider=True)
-classes = [
- DATA_PT_context_camera,
- DATA_PT_camera,
- DATA_PT_camera_display,
-
- DATA_PT_custom_props_camera]
+class DATA_PT_custom_props_camera(CameraButtonsPanel, PropertyPanel, bpy.types.Panel):
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ _context_path = "object.data"
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/properties_data_curve.py b/release/scripts/ui/properties_data_curve.py
index fd836f5e5d4..3008db11b36 100644
--- a/release/scripts/ui/properties_data_curve.py
+++ b/release/scripts/ui/properties_data_curve.py
@@ -20,34 +20,35 @@
import bpy
from rna_prop_ui import PropertyPanel
-narrowui = bpy.context.user_preferences.view.properties_width_check
-
-class DataButtonsPanel(bpy.types.Panel):
+class CurveButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "data"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return (context.object and context.object.type in ('CURVE', 'SURFACE', 'TEXT') and context.curve)
-class DataButtonsPanelCurve(DataButtonsPanel):
+class CurveButtonsPanelCurve(CurveButtonsPanel):
'''Same as above but for curves only'''
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return (context.object and context.object.type == 'CURVE' and context.curve)
-class DataButtonsPanelActive(DataButtonsPanel):
+class CurveButtonsPanelActive(CurveButtonsPanel):
'''Same as above but for curves only'''
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
curve = context.curve
return (curve and type(curve) is not bpy.types.TextCurve and curve.splines.active)
-class DATA_PT_context_curve(DataButtonsPanel):
+class DATA_PT_context_curve(CurveButtonsPanel, bpy.types.Panel):
bl_label = ""
bl_show_header = False
@@ -57,27 +58,18 @@ class DATA_PT_context_curve(DataButtonsPanel):
ob = context.object
curve = context.curve
space = context.space_data
- wide_ui = context.region.width > narrowui
-
- if wide_ui:
- split = layout.split(percentage=0.65)
+ split = layout.split(percentage=0.65)
- if ob:
- split.template_ID(ob, "data")
- split.separator()
- elif curve:
- split.template_ID(space, "pin_id")
- split.separator()
- else:
- layout.template_ID(ob, "data")
+ if ob:
+ split.template_ID(ob, "data")
+ split.separator()
+ elif curve:
+ split.template_ID(space, "pin_id")
+ split.separator()
-class DATA_PT_custom_props_curve(DataButtonsPanel, PropertyPanel):
- _context_path = "object.data"
-
-
-class DATA_PT_shape_curve(DataButtonsPanel):
+class DATA_PT_shape_curve(CurveButtonsPanel, bpy.types.Panel):
bl_label = "Shape"
def draw(self, context):
@@ -85,7 +77,6 @@ class DATA_PT_shape_curve(DataButtonsPanel):
ob = context.object
curve = context.curve
- wide_ui = context.region.width > narrowui
is_surf = (ob.type == 'SURFACE')
is_curve = (ob.type == 'CURVE')
is_text = (ob.type == 'TEXT')
@@ -107,10 +98,9 @@ class DATA_PT_shape_curve(DataButtonsPanel):
col.prop(curve, "twist_smooth", text="Smooth")
if is_text:
col.label(text="Display:")
- col.prop(curve, "fast", text="Fast Editing")
+ col.prop(curve, "use_fast_edit", text="Fast Editing")
- if wide_ui:
- col = split.column()
+ col = split.column()
if is_surf:
sub = col.column(align=True)
@@ -121,19 +111,20 @@ class DATA_PT_shape_curve(DataButtonsPanel):
if is_curve or is_text:
sub = col.column()
sub.label(text="Caps:")
- sub.prop(curve, "front")
- sub.prop(curve, "back")
- sub.prop(curve, "use_deform_fill")
+ sub.prop(curve, "use_fill_front")
+ sub.prop(curve, "use_fill_back")
+ sub.prop(curve, "use_fill_deform")
col.label(text="Textures:")
- col.prop(curve, "map_along_length")
- col.prop(curve, "auto_texspace")
+ col.prop(curve, "use_map_on_length")
+ col.prop(curve, "use_auto_texspace")
-class DATA_PT_geometry_curve(DataButtonsPanel):
+class DATA_PT_geometry_curve(CurveButtonsPanel, bpy.types.Panel):
bl_label = "Geometry"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
obj = context.object
if obj and obj.type == 'SURFACE':
return False
@@ -144,19 +135,17 @@ class DATA_PT_geometry_curve(DataButtonsPanel):
layout = self.layout
curve = context.curve
- wide_ui = context.region.width > narrowui
split = layout.split()
col = split.column()
col.label(text="Modification:")
- col.prop(curve, "width")
+ col.prop(curve, "offset")
col.prop(curve, "extrude")
col.label(text="Taper Object:")
col.prop(curve, "taper_object", text="")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Bevel:")
col.prop(curve, "bevel_depth", text="Depth")
col.prop(curve, "bevel_resolution", text="Resolution")
@@ -164,7 +153,7 @@ class DATA_PT_geometry_curve(DataButtonsPanel):
col.prop(curve, "bevel_object", text="")
-class DATA_PT_pathanim(DataButtonsPanelCurve):
+class DATA_PT_pathanim(CurveButtonsPanelCurve, bpy.types.Panel):
bl_label = "Path Animation"
def draw_header(self, context):
@@ -176,12 +165,11 @@ class DATA_PT_pathanim(DataButtonsPanelCurve):
layout = self.layout
curve = context.curve
- wide_ui = context.region.width > narrowui
layout.active = curve.use_path
col = layout.column()
- layout.prop(curve, "path_length", text="Frames")
+ layout.prop(curve, "path_duration", text="Frames")
layout.prop(curve, "eval_time")
split = layout.split()
@@ -189,14 +177,14 @@ class DATA_PT_pathanim(DataButtonsPanelCurve):
col = split.column()
col.prop(curve, "use_path_follow")
col.prop(curve, "use_stretch")
+ col.prop(curve, "use_deform_bounds")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(curve, "use_radius")
col.prop(curve, "use_time_offset", text="Offset Children")
-class DATA_PT_active_spline(DataButtonsPanelActive):
+class DATA_PT_active_spline(CurveButtonsPanelActive, bpy.types.Panel):
bl_label = "Active Spline"
def draw(self, context):
@@ -215,9 +203,9 @@ class DATA_PT_active_spline(DataButtonsPanelActive):
# poly's set aside since they use so few settings
col = split.column()
col.label(text="Cyclic:")
- col.prop(act_spline, "smooth")
+ col.prop(act_spline, "use_smooth")
col = split.column()
- col.prop(act_spline, "cyclic_u", text="U")
+ col.prop(act_spline, "use_cyclic_u", text="U")
else:
col = split.column()
@@ -230,13 +218,13 @@ class DATA_PT_active_spline(DataButtonsPanelActive):
col.label(text="Resolution:")
col = split.column()
- col.prop(act_spline, "cyclic_u", text="U")
+ col.prop(act_spline, "use_cyclic_u", text="U")
if act_spline.type == 'NURBS':
sub = col.column()
- # sub.active = (not act_spline.cyclic_u)
- sub.prop(act_spline, "bezier_u", text="U")
- sub.prop(act_spline, "endpoint_u", text="U")
+ # sub.active = (not act_spline.use_cyclic_u)
+ sub.prop(act_spline, "use_bezier_u", text="U")
+ sub.prop(act_spline, "use_endpoint_u", text="U")
sub = col.column()
sub.prop(act_spline, "order_u", text="U")
@@ -244,13 +232,13 @@ class DATA_PT_active_spline(DataButtonsPanelActive):
if is_surf:
col = split.column()
- col.prop(act_spline, "cyclic_v", text="V")
+ col.prop(act_spline, "use_cyclic_v", text="V")
# its a surface, assume its a nurb.
sub = col.column()
- sub.active = (not act_spline.cyclic_v)
- sub.prop(act_spline, "bezier_v", text="V")
- sub.prop(act_spline, "endpoint_v", text="V")
+ sub.active = (not act_spline.use_cyclic_v)
+ sub.prop(act_spline, "use_bezier_v", text="V")
+ sub.prop(act_spline, "use_endpoint_v", text="V")
sub = col.column()
sub.prop(act_spline, "order_v", text="V")
sub.prop(act_spline, "resolution_v", text="V")
@@ -264,13 +252,14 @@ class DATA_PT_active_spline(DataButtonsPanelActive):
col.prop(act_spline, "tilt_interpolation", text="Tilt")
col.prop(act_spline, "radius_interpolation", text="Radius")
- layout.prop(act_spline, "smooth")
+ layout.prop(act_spline, "use_smooth")
-class DATA_PT_font(DataButtonsPanel):
+class DATA_PT_font(CurveButtonsPanel, bpy.types.Panel):
bl_label = "Font"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return (context.object and context.object.type == 'TEXT' and context.curve)
def draw(self, context):
@@ -278,21 +267,16 @@ class DATA_PT_font(DataButtonsPanel):
text = context.curve
char = context.curve.edit_format
- wide_ui = context.region.width > narrowui
layout.template_ID(text, "font", open="font.open", unlink="font.unlink")
- #if wide_ui:
- # layout.prop(text, "font")
- #else:
- # layout.prop(text, "font", text="")
+ #layout.prop(text, "font")
split = layout.split()
col = split.column()
- col.prop(text, "text_size", text="Size")
- if wide_ui:
- col = split.column()
+ col.prop(text, "size", text="Size")
+ col = split.column()
col.prop(text, "shear")
split = layout.split()
@@ -301,25 +285,23 @@ class DATA_PT_font(DataButtonsPanel):
col.label(text="Object Font:")
col.prop(text, "family", text="")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Text on Curve:")
- col.prop(text, "text_on_curve", text="")
+ col.prop(text, "follow_curve", text="")
split = layout.split()
col = split.column()
colsub = col.column(align=True)
colsub.label(text="Underline:")
- colsub.prop(text, "ul_position", text="Position")
- colsub.prop(text, "ul_height", text="Thickness")
+ colsub.prop(text, "underline_position", text="Position")
+ colsub.prop(text, "underline_height", text="Thickness")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Character:")
- col.prop(char, "bold")
- col.prop(char, "italic")
- col.prop(char, "underline")
+ col.prop(char, "use_bold")
+ col.prop(char, "use_italic")
+ col.prop(char, "use_underline")
split = layout.split()
col = split.column()
@@ -329,58 +311,53 @@ class DATA_PT_font(DataButtonsPanel):
col.prop(char, "use_small_caps")
-class DATA_PT_paragraph(DataButtonsPanel):
+class DATA_PT_paragraph(CurveButtonsPanel, bpy.types.Panel):
bl_label = "Paragraph"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return (context.object and context.object.type == 'TEXT' and context.curve)
def draw(self, context):
layout = self.layout
text = context.curve
- wide_ui = context.region.width > narrowui
layout.label(text="Align:")
- if wide_ui:
- layout.prop(text, "spacemode", expand=True)
- else:
- layout.prop(text, "spacemode", text="")
+ layout.prop(text, "align", expand=True)
split = layout.split()
col = split.column(align=True)
col.label(text="Spacing:")
- col.prop(text, "spacing", text="Character")
- col.prop(text, "word_spacing", text="Word")
- col.prop(text, "line_dist", text="Line")
+ col.prop(text, "space_character", text="Character")
+ col.prop(text, "space_word", text="Word")
+ col.prop(text, "space_line", text="Line")
- if wide_ui:
- col = split.column(align=True)
+ col = split.column(align=True)
col.label(text="Offset:")
col.prop(text, "offset_x", text="X")
col.prop(text, "offset_y", text="Y")
-class DATA_PT_textboxes(DataButtonsPanel):
+class DATA_PT_textboxes(CurveButtonsPanel, bpy.types.Panel):
bl_label = "Text Boxes"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return (context.object and context.object.type == 'TEXT' and context.curve)
def draw(self, context):
layout = self.layout
text = context.curve
- wide_ui = context.region.width > narrowui
split = layout.split()
col = split.column()
col.operator("font.textbox_add", icon='ZOOMIN')
- if wide_ui:
- col = split.column()
+ col = split.column()
- for i, box in enumerate(text.textboxes):
+ for i, box in enumerate(text.text_boxes):
boxy = layout.box()
@@ -394,8 +371,7 @@ class DATA_PT_textboxes(DataButtonsPanel):
col.prop(box, "width", text="Width")
col.prop(box, "height", text="Height")
- if wide_ui:
- col = split.column(align=True)
+ col = split.column(align=True)
col.label(text="Offset:")
col.prop(box, "x", text="X")
@@ -404,29 +380,17 @@ class DATA_PT_textboxes(DataButtonsPanel):
row.operator("font.textbox_remove", text='', icon='X', emboss=False).index = i
-classes = [
- DATA_PT_context_curve,
- DATA_PT_shape_curve,
- DATA_PT_geometry_curve,
- DATA_PT_pathanim,
- DATA_PT_active_spline,
- DATA_PT_font,
- DATA_PT_paragraph,
- DATA_PT_textboxes,
-
- DATA_PT_custom_props_curve]
+class DATA_PT_custom_props_curve(CurveButtonsPanel, PropertyPanel, bpy.types.Panel):
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ _context_path = "object.data"
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/properties_data_empty.py b/release/scripts/ui/properties_data_empty.py
index 577e32ed840..bf2f3b3d0ba 100644
--- a/release/scripts/ui/properties_data_empty.py
+++ b/release/scripts/ui/properties_data_empty.py
@@ -19,49 +19,37 @@
# <pep8 compliant>
import bpy
-narrowui = bpy.context.user_preferences.view.properties_width_check
-
-class DataButtonsPanel(bpy.types.Panel):
+class DataButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "data"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return (context.object and context.object.type == 'EMPTY')
-class DATA_PT_empty(DataButtonsPanel):
+class DATA_PT_empty(DataButtonsPanel, bpy.types.Panel):
bl_label = "Empty"
def draw(self, context):
layout = self.layout
ob = context.object
- wide_ui = context.region.width > narrowui
- if wide_ui:
- layout.prop(ob, "empty_draw_type", text="Display")
- else:
- layout.prop(ob, "empty_draw_type", text="")
+ layout.prop(ob, "empty_draw_type", text="Display")
layout.prop(ob, "empty_draw_size", text="Size")
-classes = [
- DATA_PT_empty]
-
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/properties_data_lamp.py b/release/scripts/ui/properties_data_lamp.py
index 14493301b1e..ce0d404434d 100644
--- a/release/scripts/ui/properties_data_lamp.py
+++ b/release/scripts/ui/properties_data_lamp.py
@@ -20,8 +20,6 @@
import bpy
from rna_prop_ui import PropertyPanel
-narrowui = bpy.context.user_preferences.view.properties_width_check
-
class LAMP_MT_sunsky_presets(bpy.types.Menu):
bl_label = "Sun & Sky Presets"
@@ -31,25 +29,18 @@ class LAMP_MT_sunsky_presets(bpy.types.Menu):
draw = bpy.types.Menu.draw_preset
-class DataButtonsPanel(bpy.types.Panel):
+class DataButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "data"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
engine = context.scene.render.engine
- return context.lamp and (engine in self.COMPAT_ENGINES)
-
-
-class DATA_PT_preview(DataButtonsPanel):
- bl_label = "Preview"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
-
- def draw(self, context):
- self.layout.template_preview(context.lamp)
+ return context.lamp and (engine in cls.COMPAT_ENGINES)
-class DATA_PT_context_lamp(DataButtonsPanel):
+class DATA_PT_context_lamp(DataButtonsPanel, bpy.types.Panel):
bl_label = ""
bl_show_header = False
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
@@ -60,29 +51,26 @@ class DATA_PT_context_lamp(DataButtonsPanel):
ob = context.object
lamp = context.lamp
space = context.space_data
- wide_ui = context.region.width > narrowui
-
- if wide_ui:
- split = layout.split(percentage=0.65)
- if ob:
- split.template_ID(ob, "data")
- split.separator()
- elif lamp:
- split.template_ID(space, "pin_id")
- split.separator()
- else:
- if ob:
- layout.template_ID(ob, "data")
- elif lamp:
- layout.template_ID(space, "pin_id")
-
-
-class DATA_PT_custom_props_lamp(DataButtonsPanel, PropertyPanel):
- _context_path = "object.data"
+
+ split = layout.split(percentage=0.65)
+
+ if ob:
+ split.template_ID(ob, "data")
+ split.separator()
+ elif lamp:
+ split.template_ID(space, "pin_id")
+ split.separator()
+
+
+class DATA_PT_preview(DataButtonsPanel, bpy.types.Panel):
+ bl_label = "Preview"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ def draw(self, context):
+ self.layout.template_preview(context.lamp)
-class DATA_PT_lamp(DataButtonsPanel):
+
+class DATA_PT_lamp(DataButtonsPanel, bpy.types.Panel):
bl_label = "Lamp"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
@@ -90,12 +78,8 @@ class DATA_PT_lamp(DataButtonsPanel):
layout = self.layout
lamp = context.lamp
- wide_ui = context.region.width > narrowui
- if wide_ui:
- layout.prop(lamp, "type", expand=True)
- else:
- layout.prop(lamp, "type", text="")
+ layout.prop(lamp, "type", expand=True)
split = layout.split()
@@ -115,34 +99,33 @@ class DATA_PT_lamp(DataButtonsPanel):
sub.prop(lamp, "linear_attenuation", slider=True, text="Linear")
sub.prop(lamp, "quadratic_attenuation", slider=True, text="Quadratic")
- col.prop(lamp, "sphere")
+ col.prop(lamp, "use_sphere")
if lamp.type == 'AREA':
col.prop(lamp, "distance")
col.prop(lamp, "gamma")
- if wide_ui:
- col = split.column()
- col.prop(lamp, "negative")
- col.prop(lamp, "layer", text="This Layer Only")
- col.prop(lamp, "specular")
- col.prop(lamp, "diffuse")
+ col = split.column()
+ col.prop(lamp, "use_negative")
+ col.prop(lamp, "use_own_layer", text="This Layer Only")
+ col.prop(lamp, "use_specular")
+ col.prop(lamp, "use_diffuse")
-class DATA_PT_sunsky(DataButtonsPanel):
+class DATA_PT_sunsky(DataButtonsPanel, bpy.types.Panel):
bl_label = "Sky & Atmosphere"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
lamp = context.lamp
engine = context.scene.render.engine
- return (lamp and lamp.type == 'SUN') and (engine in self.COMPAT_ENGINES)
+ return (lamp and lamp.type == 'SUN') and (engine in cls.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
lamp = context.lamp.sky
- wide_ui = context.region.width > narrowui
row = layout.row(align=True)
row.prop(lamp, "use_sky")
@@ -167,8 +150,7 @@ class DATA_PT_sunsky(DataButtonsPanel):
sub.row().prop(lamp, "sky_color_space", expand=True)
sub.prop(lamp, "sky_exposure", text="Exposure")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.active = lamp.use_sky
col.label(text="Horizon:")
sub = col.column()
@@ -193,8 +175,7 @@ class DATA_PT_sunsky(DataButtonsPanel):
col.prop(lamp, "sun_intensity", text="Sun")
col.prop(lamp, "atmosphere_distance_factor", text="Distance")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.active = lamp.use_atmosphere
col.label(text="Scattering:")
sub = col.column(align=True)
@@ -202,25 +183,36 @@ class DATA_PT_sunsky(DataButtonsPanel):
sub.prop(lamp, "atmosphere_extinction", slider=True, text="Extinction")
-class DATA_PT_shadow(DataButtonsPanel):
+class DATA_PT_shadow(DataButtonsPanel, bpy.types.Panel):
bl_label = "Shadow"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
lamp = context.lamp
engine = context.scene.render.engine
- return (lamp and lamp.type in ('POINT', 'SUN', 'SPOT', 'AREA')) and (engine in self.COMPAT_ENGINES)
+ return (lamp and lamp.type in ('POINT', 'SUN', 'SPOT', 'AREA')) and (engine in cls.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
lamp = context.lamp
- wide_ui = context.region.width > narrowui
- if wide_ui:
- layout.prop(lamp, "shadow_method", expand=True)
- else:
- layout.prop(lamp, "shadow_method", text="")
+ layout.prop(lamp, "shadow_method", expand=True)
+
+ if lamp.shadow_method == 'NOSHADOW' and lamp.type == 'AREA':
+ split = layout.split()
+
+ col= split.column()
+ col.label(text="Form factor sampling:")
+
+ sub=col.row(align=True)
+
+ if lamp.shape == 'SQUARE':
+ sub.prop(lamp, "shadow_ray_samples_x", text="Samples")
+ elif lamp.shape == 'RECTANGLE':
+ sub.prop(lamp, "shadow_ray_samples_x", text="Samples X")
+ sub.prop(lamp, "shadow_ray_samples_y", text="Samples Y")
if lamp.shadow_method != 'NOSHADOW':
split = layout.split()
@@ -228,65 +220,51 @@ class DATA_PT_shadow(DataButtonsPanel):
col = split.column()
col.prop(lamp, "shadow_color", text="")
- if wide_ui:
- col = split.column()
- col.prop(lamp, "shadow_layer", text="This Layer Only")
- col.prop(lamp, "only_shadow")
+ col = split.column()
+ col.prop(lamp, "use_shadow_layer", text="This Layer Only")
+ col.prop(lamp, "use_only_shadow")
if lamp.shadow_method == 'RAY_SHADOW':
- col = layout.column()
+ split = layout.split()
+
+ col = split.column()
col.label(text="Sampling:")
- if wide_ui:
- col.row().prop(lamp, "shadow_ray_sampling_method", expand=True)
- else:
- col.prop(lamp, "shadow_ray_sampling_method", text="")
-
+
if lamp.type in ('POINT', 'SUN', 'SPOT'):
- split = layout.split()
-
- col = split.column()
- col.prop(lamp, "shadow_soft_size", text="Soft Size")
-
- col.prop(lamp, "shadow_ray_samples", text="Samples")
- if lamp.shadow_ray_sampling_method == 'ADAPTIVE_QMC':
- col.prop(lamp, "shadow_adaptive_threshold", text="Threshold")
- if wide_ui:
- col = split.column()
-
+ sub = col.row()
+
+ sub.prop(lamp, "shadow_ray_samples", text="Samples")
+ sub.prop(lamp, "shadow_soft_size", text="Soft Size")
+
elif lamp.type == 'AREA':
- split = layout.split()
-
- col = split.column()
-
+ sub = col.row(align=True)
+
if lamp.shape == 'SQUARE':
- col.prop(lamp, "shadow_ray_samples_x", text="Samples")
+ sub.prop(lamp, "shadow_ray_samples_x", text="Samples")
elif lamp.shape == 'RECTANGLE':
- col.prop(lamp, "shadow_ray_samples_x", text="Samples X")
- col.prop(lamp, "shadow_ray_samples_y", text="Samples Y")
-
- if lamp.shadow_ray_sampling_method == 'ADAPTIVE_QMC':
- col.prop(lamp, "shadow_adaptive_threshold", text="Threshold")
- if wide_ui:
- col = split.column()
+ sub.prop(lamp, "shadow_ray_samples_x", text="Samples X")
+ sub.prop(lamp, "shadow_ray_samples_y", text="Samples Y")
- elif lamp.shadow_ray_sampling_method == 'CONSTANT_JITTERED':
- if wide_ui:
- col = split.column()
- col.prop(lamp, "umbra")
- col.prop(lamp, "dither")
- col.prop(lamp, "jitter")
- else:
- if wide_ui:
- col = split.column()
+ col.row().prop(lamp, "shadow_ray_sample_method", expand=True)
+ split = layout.split()
+ col = split.column()
+
+ if lamp.shadow_ray_sample_method == 'ADAPTIVE_QMC':
+ col.prop(lamp, "shadow_adaptive_threshold", text="Threshold")
+ col = split.column()
+
+ if lamp.type == 'AREA' and lamp.shadow_ray_sample_method == 'CONSTANT_JITTERED':
+ col = split.column()
+ col = split.column()
+ col.prop(lamp, "use_umbra")
+ col.prop(lamp, "use_dither")
+ col.prop(lamp, "use_jitter")
elif lamp.shadow_method == 'BUFFER_SHADOW':
col = layout.column()
col.label(text="Buffer Type:")
- if wide_ui:
- col.row().prop(lamp, "shadow_buffer_type", expand=True)
- else:
- col.row().prop(lamp, "shadow_buffer_type", text="")
+ col.row().prop(lamp, "shadow_buffer_type", expand=True)
if lamp.shadow_buffer_type in ('REGULAR', 'HALFWAY', 'DEEP'):
split = layout.split()
@@ -298,8 +276,7 @@ class DATA_PT_shadow(DataButtonsPanel):
sub.prop(lamp, "shadow_buffer_soft", text="Soft")
sub.prop(lamp, "shadow_buffer_bias", text="Bias")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Sample Buffers:")
col.prop(lamp, "shadow_sample_buffers", text="")
sub = col.column(align=True)
@@ -314,39 +291,39 @@ class DATA_PT_shadow(DataButtonsPanel):
split = layout.split()
col = split.column()
- col.prop(lamp, "auto_clip_start", text="Autoclip Start")
+ col.prop(lamp, "use_auto_clip_start", text="Autoclip Start")
sub = col.column()
- sub.active = not lamp.auto_clip_start
+ sub.active = not lamp.use_auto_clip_start
sub.prop(lamp, "shadow_buffer_clip_start", text="Clip Start")
- if wide_ui:
- col = split.column()
- col.prop(lamp, "auto_clip_end", text="Autoclip End")
+ col = split.column()
+ col.prop(lamp, "use_auto_clip_end", text="Autoclip End")
sub = col.column()
- sub.active = not lamp.auto_clip_end
+ sub.active = not lamp.use_auto_clip_end
sub.prop(lamp, "shadow_buffer_clip_end", text=" Clip End")
-class DATA_PT_area(DataButtonsPanel):
+class DATA_PT_area(DataButtonsPanel, bpy.types.Panel):
bl_label = "Area Shape"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
lamp = context.lamp
engine = context.scene.render.engine
- return (lamp and lamp.type == 'AREA') and (engine in self.COMPAT_ENGINES)
+ return (lamp and lamp.type == 'AREA') and (engine in cls.COMPAT_ENGINES)
def draw(self, context):
- layout = self.layout
-
lamp = context.lamp
+ layout = self.layout
split = layout.split()
col = split.column()
+
col.row().prop(lamp, "shape", expand=True)
+ sub = col.row(align=True)
- sub = col.column(align=True)
if (lamp.shape == 'SQUARE'):
sub.prop(lamp, "size")
elif (lamp.shape == 'RECTANGLE'):
@@ -354,20 +331,20 @@ class DATA_PT_area(DataButtonsPanel):
sub.prop(lamp, "size_y", text="Size Y")
-class DATA_PT_spot(DataButtonsPanel):
+class DATA_PT_spot(DataButtonsPanel, bpy.types.Panel):
bl_label = "Spot Shape"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
lamp = context.lamp
engine = context.scene.render.engine
- return (lamp and lamp.type == 'SPOT') and (engine in self.COMPAT_ENGINES)
+ return (lamp and lamp.type == 'SPOT') and (engine in cls.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
lamp = context.lamp
- wide_ui = context.region.width > narrowui
split = layout.split()
@@ -375,31 +352,30 @@ class DATA_PT_spot(DataButtonsPanel):
sub = col.column()
sub.prop(lamp, "spot_size", text="Size")
sub.prop(lamp, "spot_blend", text="Blend", slider=True)
- col.prop(lamp, "square")
+ col.prop(lamp, "use_square")
col.prop(lamp, "show_cone")
- if wide_ui:
- col = split.column()
- else:
- col.separator()
- col.prop(lamp, "halo")
+ col = split.column()
+
+ col.prop(lamp, "use_halo")
sub = col.column(align=True)
- sub.active = lamp.halo
+ sub.active = lamp.use_halo
sub.prop(lamp, "halo_intensity", text="Intensity")
if lamp.shadow_method == 'BUFFER_SHADOW':
sub.prop(lamp, "halo_step", text="Step")
-class DATA_PT_falloff_curve(DataButtonsPanel):
+class DATA_PT_falloff_curve(DataButtonsPanel, bpy.types.Panel):
bl_label = "Falloff Curve"
bl_default_closed = True
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
lamp = context.lamp
engine = context.scene.render.engine
- return (lamp and lamp.type in ('POINT', 'SPOT') and lamp.falloff_type == 'CUSTOM_CURVE') and (engine in self.COMPAT_ENGINES)
+ return (lamp and lamp.type in ('POINT', 'SPOT') and lamp.falloff_type == 'CUSTOM_CURVE') and (engine in cls.COMPAT_ENGINES)
def draw(self, context):
lamp = context.lamp
@@ -407,31 +383,17 @@ class DATA_PT_falloff_curve(DataButtonsPanel):
self.layout.template_curve_mapping(lamp, "falloff_curve")
-classes = [
- LAMP_MT_sunsky_presets,
-
- DATA_PT_context_lamp,
- DATA_PT_preview,
- DATA_PT_lamp,
- DATA_PT_falloff_curve,
- DATA_PT_area,
- DATA_PT_spot,
- DATA_PT_shadow,
- DATA_PT_sunsky,
-
- DATA_PT_custom_props_lamp]
+class DATA_PT_custom_props_lamp(DataButtonsPanel, PropertyPanel, bpy.types.Panel):
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ _context_path = "object.data"
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/properties_data_lattice.py b/release/scripts/ui/properties_data_lattice.py
index 2aa719437a7..9abdb23ea23 100644
--- a/release/scripts/ui/properties_data_lattice.py
+++ b/release/scripts/ui/properties_data_lattice.py
@@ -20,19 +20,18 @@
import bpy
from rna_prop_ui import PropertyPanel
-narrowui = bpy.context.user_preferences.view.properties_width_check
-
-class DataButtonsPanel(bpy.types.Panel):
+class DataButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "data"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return context.lattice
-class DATA_PT_context_lattice(DataButtonsPanel):
+class DATA_PT_context_lattice(DataButtonsPanel, bpy.types.Panel):
bl_label = ""
bl_show_header = False
@@ -42,79 +41,58 @@ class DATA_PT_context_lattice(DataButtonsPanel):
ob = context.object
lat = context.lattice
space = context.space_data
- wide_ui = context.region.width > narrowui
-
- if wide_ui:
- split = layout.split(percentage=0.65)
- if ob:
- split.template_ID(ob, "data")
- split.separator()
- elif lat:
- split.template_ID(space, "pin_id")
- split.separator()
- else:
- if ob:
- layout.template_ID(ob, "data")
- elif lat:
- layout.template_ID(space, "pin_id")
-
-
-class DATA_PT_custom_props_lattice(DataButtonsPanel, PropertyPanel):
- _context_path = "object.data"
+
+ split = layout.split(percentage=0.65)
+ if ob:
+ split.template_ID(ob, "data")
+ split.separator()
+ elif lat:
+ split.template_ID(space, "pin_id")
+ split.separator()
-class DATA_PT_lattice(DataButtonsPanel):
+class DATA_PT_lattice(DataButtonsPanel, bpy.types.Panel):
bl_label = "Lattice"
def draw(self, context):
layout = self.layout
lat = context.lattice
- wide_ui = context.region.width > narrowui
split = layout.split()
col = split.column()
col.prop(lat, "points_u")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(lat, "interpolation_type_u", text="")
split = layout.split()
col = split.column()
col.prop(lat, "points_v")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(lat, "interpolation_type_v", text="")
split = layout.split()
col = split.column()
col.prop(lat, "points_w")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(lat, "interpolation_type_w", text="")
row = layout.row()
- row.prop(lat, "outside")
+ row.prop(lat, "use_outside")
row.prop_object(lat, "vertex_group", context.object, "vertex_groups", text="")
+
-
-classes = [
- DATA_PT_context_lattice,
- DATA_PT_lattice,
-
- DATA_PT_custom_props_lattice]
+class DATA_PT_custom_props_lattice(DataButtonsPanel, PropertyPanel, bpy.types.Panel):
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ _context_path = "object.data"
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/properties_data_mesh.py b/release/scripts/ui/properties_data_mesh.py
index 44d3d19e793..aaf70692681 100644
--- a/release/scripts/ui/properties_data_mesh.py
+++ b/release/scripts/ui/properties_data_mesh.py
@@ -20,8 +20,6 @@
import bpy
from rna_prop_ui import PropertyPanel
-narrowui = bpy.context.user_preferences.view.properties_width_check
-
class MESH_MT_vertex_group_specials(bpy.types.Menu):
bl_label = "Vertex Group Specials"
@@ -49,17 +47,18 @@ class MESH_MT_shape_key_specials(bpy.types.Menu):
layout.operator("object.shape_key_mirror", icon='ARROW_LEFTRIGHT')
-class DataButtonsPanel(bpy.types.Panel):
+class MeshButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "data"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
engine = context.scene.render.engine
- return context.mesh and (engine in self.COMPAT_ENGINES)
+ return context.mesh and (engine in cls.COMPAT_ENGINES)
-class DATA_PT_context_mesh(DataButtonsPanel):
+class DATA_PT_context_mesh(MeshButtonsPanel, bpy.types.Panel):
bl_label = ""
bl_show_header = False
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
@@ -70,29 +69,17 @@ class DATA_PT_context_mesh(DataButtonsPanel):
ob = context.object
mesh = context.mesh
space = context.space_data
- wide_ui = context.region.width > narrowui
-
- if wide_ui:
- split = layout.split(percentage=0.65)
- if ob:
- split.template_ID(ob, "data")
- split.separator()
- elif mesh:
- split.template_ID(space, "pin_id")
- split.separator()
- else:
- if ob:
- layout.template_ID(ob, "data")
- elif mesh:
- layout.template_ID(space, "pin_id")
-
-class DATA_PT_custom_props_mesh(DataButtonsPanel, PropertyPanel):
- _context_path = "object.data"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ split = layout.split(percentage=0.65)
+ if ob:
+ split.template_ID(ob, "data")
+ split.separator()
+ elif mesh:
+ split.template_ID(space, "pin_id")
+ split.separator()
-class DATA_PT_normals(DataButtonsPanel):
+class DATA_PT_normals(MeshButtonsPanel, bpy.types.Panel):
bl_label = "Normals"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
@@ -100,25 +87,21 @@ class DATA_PT_normals(DataButtonsPanel):
layout = self.layout
mesh = context.mesh
- wide_ui = context.region.width > narrowui
split = layout.split()
col = split.column()
- col.prop(mesh, "autosmooth")
+ col.prop(mesh, "use_auto_smooth")
sub = col.column()
- sub.active = mesh.autosmooth
- sub.prop(mesh, "autosmooth_angle", text="Angle")
+ sub.active = mesh.use_auto_smooth
+ sub.prop(mesh, "auto_smooth_angle", text="Angle")
- if wide_ui:
- col = split.column()
- else:
- col.separator()
- col.prop(mesh, "vertex_normal_flip")
- col.prop(mesh, "double_sided")
+ col = split.column()
+
+ col.prop(mesh, "show_double_sided")
-class DATA_PT_settings(DataButtonsPanel):
+class DATA_PT_settings(MeshButtonsPanel, bpy.types.Panel):
bl_label = "Settings"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
@@ -130,13 +113,15 @@ class DATA_PT_settings(DataButtonsPanel):
layout.prop(mesh, "texture_mesh")
-class DATA_PT_vertex_groups(DataButtonsPanel):
+class DATA_PT_vertex_groups(MeshButtonsPanel, bpy.types.Panel):
bl_label = "Vertex Groups"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
engine = context.scene.render.engine
- return (context.object and context.object.type in ('MESH', 'LATTICE') and (engine in self.COMPAT_ENGINES))
+ obj = context.object
+ return (obj and obj.type in ('MESH', 'LATTICE') and (engine in cls.COMPAT_ENGINES))
def draw(self, context):
layout = self.layout
@@ -177,13 +162,15 @@ class DATA_PT_vertex_groups(DataButtonsPanel):
layout.prop(context.tool_settings, "vertex_group_weight", text="Weight")
-class DATA_PT_shape_keys(DataButtonsPanel):
+class DATA_PT_shape_keys(MeshButtonsPanel, bpy.types.Panel):
bl_label = "Shape Keys"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
engine = context.scene.render.engine
- return (context.object and context.object.type in ('MESH', 'LATTICE', 'CURVE', 'SURFACE') and (engine in self.COMPAT_ENGINES))
+ obj = context.object
+ return (obj and obj.type in ('MESH', 'LATTICE', 'CURVE', 'SURFACE') and (engine in cls.COMPAT_ENGINES))
def draw(self, context):
layout = self.layout
@@ -191,13 +178,12 @@ class DATA_PT_shape_keys(DataButtonsPanel):
ob = context.object
key = ob.data.shape_keys
kb = ob.active_shape_key
- wide_ui = context.region.width > narrowui
enable_edit = ob.mode != 'EDIT'
enable_edit_value = False
- if ob.shape_key_lock is False:
- if enable_edit or (ob.type == 'MESH' and ob.shape_key_edit_mode):
+ if ob.show_shape_key is False:
+ if enable_edit or (ob.type == 'MESH' and ob.use_shape_key_edit_mode):
enable_edit_value = True
row = layout.row()
@@ -224,23 +210,17 @@ class DATA_PT_shape_keys(DataButtonsPanel):
split = layout.split(percentage=0.4)
row = split.row()
row.enabled = enable_edit
- if wide_ui:
- row.prop(key, "relative")
+ row.prop(key, "use_relative")
row = split.row()
row.alignment = 'RIGHT'
- if not wide_ui:
- layout.prop(key, "relative")
- row = layout.row()
-
-
sub = row.row(align=True)
subsub = sub.row(align=True)
subsub.active = enable_edit_value
- subsub.prop(ob, "shape_key_lock", text="")
+ subsub.prop(ob, "show_shape_key", text="")
subsub.prop(kb, "mute", text="")
- sub.prop(ob, "shape_key_edit_mode", text="")
+ sub.prop(ob, "use_shape_key_edit_mode", text="")
sub = row.row()
sub.operator("object.shape_key_clear", icon='X', text="")
@@ -248,7 +228,7 @@ class DATA_PT_shape_keys(DataButtonsPanel):
row = layout.row()
row.prop(kb, "name")
- if key.relative:
+ if key.use_relative:
if ob.active_shape_key_index != 0:
row = layout.row()
row.active = enable_edit_value
@@ -262,8 +242,7 @@ class DATA_PT_shape_keys(DataButtonsPanel):
col.prop(kb, "slider_min", text="Min")
col.prop(kb, "slider_max", text="Max")
- if wide_ui:
- col = split.column(align=True)
+ col = split.column(align=True)
col.active = enable_edit_value
col.label(text="Blend:")
col.prop_object(kb, "vertex_group", ob, "vertex_groups", text="")
@@ -275,7 +254,7 @@ class DATA_PT_shape_keys(DataButtonsPanel):
row.prop(key, "slurph")
-class DATA_PT_uv_texture(DataButtonsPanel):
+class DATA_PT_uv_texture(MeshButtonsPanel, bpy.types.Panel):
bl_label = "UV Texture"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
@@ -298,11 +277,12 @@ class DATA_PT_uv_texture(DataButtonsPanel):
layout.prop(lay, "name")
-class DATA_PT_texface(DataButtonsPanel):
+class DATA_PT_texface(MeshButtonsPanel, bpy.types.Panel):
bl_label = "Texture Face"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
ob = context.active_object
rd = context.scene.render
@@ -312,7 +292,6 @@ class DATA_PT_texface(DataButtonsPanel):
layout = self.layout
col = layout.column()
- wide_ui = context.region.width > narrowui
me = context.mesh
tf = me.faces.active_tface
@@ -321,31 +300,30 @@ class DATA_PT_texface(DataButtonsPanel):
split = layout.split()
col = split.column()
- col.prop(tf, "tex")
- col.prop(tf, "light")
- col.prop(tf, "invisible")
- col.prop(tf, "collision")
+ col.prop(tf, "use_bitmap_text")
+ col.prop(tf, "use_light")
+ col.prop(tf, "hide")
+ col.prop(tf, "use_collision")
- col.prop(tf, "shared")
- col.prop(tf, "twoside")
- col.prop(tf, "object_color")
+ col.prop(tf, "use_blend_shared")
+ col.prop(tf, "use_twoside")
+ col.prop(tf, "use_object_color")
- if wide_ui:
- col = split.column()
+ col = split.column()
- col.prop(tf, "halo")
- col.prop(tf, "billboard")
- col.prop(tf, "shadow")
- col.prop(tf, "text")
- col.prop(tf, "alpha_sort")
+ col.prop(tf, "use_halo")
+ col.prop(tf, "use_billboard")
+ col.prop(tf, "use_shadow_cast")
+ col.prop(tf, "use_bitmap_text")
+ col.prop(tf, "use_alpha_sort")
col = layout.column()
- col.prop(tf, "transp")
+ col.prop(tf, "blend_type")
else:
col.label(text="No UV Texture")
-class DATA_PT_vertex_colors(DataButtonsPanel):
+class DATA_PT_vertex_colors(MeshButtonsPanel, bpy.types.Panel):
bl_label = "Vertex Colors"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
@@ -368,32 +346,17 @@ class DATA_PT_vertex_colors(DataButtonsPanel):
layout.prop(lay, "name")
-classes = [
- MESH_MT_vertex_group_specials,
- MESH_MT_shape_key_specials,
-
- DATA_PT_context_mesh,
- DATA_PT_normals,
- DATA_PT_settings,
- DATA_PT_vertex_groups,
- DATA_PT_shape_keys,
- DATA_PT_uv_texture,
- DATA_PT_texface,
- DATA_PT_vertex_colors,
-
- DATA_PT_custom_props_mesh]
+class DATA_PT_custom_props_mesh(MeshButtonsPanel, PropertyPanel, bpy.types.Panel):
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ _context_path = "object.data"
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/properties_data_metaball.py b/release/scripts/ui/properties_data_metaball.py
index e0155059b98..83e5e642d0e 100644
--- a/release/scripts/ui/properties_data_metaball.py
+++ b/release/scripts/ui/properties_data_metaball.py
@@ -20,19 +20,18 @@
import bpy
from rna_prop_ui import PropertyPanel
-narrowui = bpy.context.user_preferences.view.properties_width_check
-
-class DataButtonsPanel(bpy.types.Panel):
+class DataButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "data"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return context.meta_ball
-class DATA_PT_context_metaball(DataButtonsPanel):
+class DATA_PT_context_metaball(DataButtonsPanel, bpy.types.Panel):
bl_label = ""
bl_show_header = False
@@ -42,83 +41,63 @@ class DATA_PT_context_metaball(DataButtonsPanel):
ob = context.object
mball = context.meta_ball
space = context.space_data
- wide_ui = context.region.width > narrowui
-
- if wide_ui:
- split = layout.split(percentage=0.65)
- if ob:
- split.template_ID(ob, "data")
- split.separator()
- elif mball:
- split.template_ID(space, "pin_id")
- split.separator()
- else:
- if ob:
- layout.template_ID(ob, "data")
- elif mball:
- layout.template_ID(space, "pin_id")
-
-
-class DATA_PT_custom_props_metaball(DataButtonsPanel, PropertyPanel):
- _context_path = "object.data"
+ split = layout.split(percentage=0.65)
+ if ob:
+ split.template_ID(ob, "data")
+ split.separator()
+ elif mball:
+ split.template_ID(space, "pin_id")
+ split.separator()
-class DATA_PT_metaball(DataButtonsPanel):
+
+class DATA_PT_metaball(DataButtonsPanel, bpy.types.Panel):
bl_label = "Metaball"
def draw(self, context):
layout = self.layout
mball = context.meta_ball
- wide_ui = context.region.width > narrowui
split = layout.split()
col = split.column()
col.label(text="Resolution:")
sub = col.column(align=True)
- sub.prop(mball, "wire_size", text="View")
- sub.prop(mball, "render_size", text="Render")
+ sub.prop(mball, "resolution", text="View")
+ sub.prop(mball, "render_resolution", text="Render")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Settings:")
col.prop(mball, "threshold", text="Threshold")
layout.label(text="Update:")
- if wide_ui:
- layout.prop(mball, "flag", expand=True)
- else:
- layout.prop(mball, "flag", text="")
+ layout.prop(mball, "update_method", expand=True)
-class DATA_PT_metaball_element(DataButtonsPanel):
+class DATA_PT_metaball_element(DataButtonsPanel, bpy.types.Panel):
bl_label = "Active Element"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return (context.meta_ball and context.meta_ball.active_element)
def draw(self, context):
layout = self.layout
metaelem = context.meta_ball.active_element
- wide_ui = context.region.width > narrowui
- if wide_ui:
- layout.prop(metaelem, "type")
- else:
- layout.prop(metaelem, "type", text="")
+ layout.prop(metaelem, "type")
split = layout.split()
col = split.column(align=True)
col.label(text="Settings:")
col.prop(metaelem, "stiffness", text="Stiffness")
- col.prop(metaelem, "negative", text="Negative")
+ col.prop(metaelem, "use_negative", text="Negative")
col.prop(metaelem, "hide", text="Hide")
- if wide_ui:
- col = split.column(align=True)
+ col = split.column(align=True)
if metaelem.type in ('CUBE', 'ELLIPSOID'):
col.label(text="Size:")
@@ -136,24 +115,17 @@ class DATA_PT_metaball_element(DataButtonsPanel):
col.prop(metaelem, "size_y", text="Y")
-classes = [
- DATA_PT_context_metaball,
- DATA_PT_metaball,
- DATA_PT_metaball_element,
-
- DATA_PT_custom_props_metaball]
+class DATA_PT_custom_props_metaball(DataButtonsPanel, PropertyPanel, bpy.types.Panel):
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ _context_path = "object.data"
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/properties_data_modifier.py b/release/scripts/ui/properties_data_modifier.py
index dfa0d8029b2..46ac5ae570f 100644
--- a/release/scripts/ui/properties_data_modifier.py
+++ b/release/scripts/ui/properties_data_modifier.py
@@ -19,52 +19,46 @@
# <pep8 compliant>
import bpy
-narrowui = bpy.context.user_preferences.view.properties_width_check
-narrowmod = 260
-
-class DataButtonsPanel(bpy.types.Panel):
+class ModifierButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "modifier"
-class DATA_PT_modifiers(DataButtonsPanel):
+class DATA_PT_modifiers(ModifierButtonsPanel, bpy.types.Panel):
bl_label = "Modifiers"
def draw(self, context):
layout = self.layout
ob = context.object
- wide_ui = context.region.width > narrowui
- compact_mod = context.region.width < narrowmod
layout.operator_menu_enum("object.modifier_add", "type")
for md in ob.modifiers:
- box = layout.template_modifier(md, compact=compact_mod)
+ box = layout.template_modifier(md)
if box:
# match enum type to our functions, avoids a lookup table.
- getattr(self, md.type)(box, ob, md, wide_ui)
+ getattr(self, md.type)(box, ob, md)
# the mt.type enum is (ab)used for a lookup on function names
# ...to avoid lengthy if statements
# so each type must have a function here.
- def ARMATURE(self, layout, ob, md, wide_ui):
+ def ARMATURE(self, layout, ob, md):
split = layout.split()
col = split.column()
col.label(text="Object:")
col.prop(md, "object", text="")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Vertex Group::")
col.prop_object(md, "vertex_group", ob, "vertex_groups", text="")
sub = col.column()
sub.active = bool(md.vertex_group)
- sub.prop(md, "invert")
+ sub.prop(md, "invert_vertex_group")
split = layout.split()
@@ -73,23 +67,18 @@ class DATA_PT_modifiers(DataButtonsPanel):
col.prop(md, "use_vertex_groups", text="Vertex Groups")
col.prop(md, "use_bone_envelopes", text="Bone Envelopes")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Deformation:")
- col.prop(md, "quaternion")
- col.prop(md, "multi_modifier")
-
- def ARRAY(self, layout, ob, md, wide_ui):
- if wide_ui:
- layout.prop(md, "fit_type")
- else:
- layout.prop(md, "fit_type", text="")
+ col.prop(md, "use_deform_preserve_volume")
+ col.prop(md, "use_multi_modifier")
+ def ARRAY(self, layout, ob, md):
+ layout.prop(md, "fit_type")
if md.fit_type == 'FIXED_COUNT':
layout.prop(md, "count")
elif md.fit_type == 'FIT_LENGTH':
- layout.prop(md, "length")
+ layout.prop(md, "fit_length")
elif md.fit_type == 'FIT_CURVE':
layout.prop(md, "curve")
@@ -98,31 +87,30 @@ class DATA_PT_modifiers(DataButtonsPanel):
split = layout.split()
col = split.column()
- col.prop(md, "constant_offset")
+ col.prop(md, "use_constant_offset")
sub = col.column()
- sub.active = md.constant_offset
- sub.prop(md, "constant_offset_displacement", text="")
+ sub.active = md.use_constant_offset
+ sub.prop(md, "constant_offset_displace", text="")
col.separator()
- col.prop(md, "merge_adjacent_vertices", text="Merge")
+ col.prop(md, "use_merge_vertices", text="Merge")
sub = col.column()
- sub.active = md.merge_adjacent_vertices
- sub.prop(md, "merge_end_vertices", text="First Last")
- sub.prop(md, "merge_distance", text="Distance")
+ sub.active = md.use_merge_vertices
+ sub.prop(md, "use_merge_vertices_cap", text="First Last")
+ sub.prop(md, "merge_threshold", text="Distance")
- if wide_ui:
- col = split.column()
- col.prop(md, "relative_offset")
+ col = split.column()
+ col.prop(md, "use_relative_offset")
sub = col.column()
- sub.active = md.relative_offset
- sub.prop(md, "relative_offset_displacement", text="")
+ sub.active = md.use_relative_offset
+ sub.prop(md, "relative_offset_displace", text="")
col.separator()
- col.prop(md, "add_offset_object")
+ col.prop(md, "use_object_offset")
sub = col.column()
- sub.active = md.add_offset_object
+ sub.active = md.use_object_offset
sub.prop(md, "offset_object", text="")
layout.separator()
@@ -131,107 +119,99 @@ class DATA_PT_modifiers(DataButtonsPanel):
col.prop(md, "start_cap")
col.prop(md, "end_cap")
- def BEVEL(self, layout, ob, md, wide_ui):
+ def BEVEL(self, layout, ob, md):
split = layout.split()
col = split.column()
col.prop(md, "width")
- if wide_ui:
- col = split.column()
- col.prop(md, "only_vertices")
+ col = split.column()
+ col.prop(md, "use_only_vertices")
layout.label(text="Limit Method:")
layout.row().prop(md, "limit_method", expand=True)
if md.limit_method == 'ANGLE':
- layout.prop(md, "angle")
+ layout.prop(md, "angle_limit")
elif md.limit_method == 'WEIGHT':
layout.row().prop(md, "edge_weight_method", expand=True)
- def BOOLEAN(self, layout, ob, md, wide_ui):
+ def BOOLEAN(self, layout, ob, md):
split = layout.split()
col = split.column()
col.label(text="Operation:")
col.prop(md, "operation", text="")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Object:")
col.prop(md, "object", text="")
- def BUILD(self, layout, ob, md, wide_ui):
+ def BUILD(self, layout, ob, md):
split = layout.split()
col = split.column()
col.prop(md, "frame_start")
- col.prop(md, "length")
+ col.prop(md, "frame_duration")
- if wide_ui:
- col = split.column()
- col.prop(md, "randomize")
+ col = split.column()
+ col.prop(md, "use_random_order")
sub = col.column()
- sub.active = md.randomize
+ sub.active = md.use_random_order
sub.prop(md, "seed")
- def CAST(self, layout, ob, md, wide_ui):
+ def CAST(self, layout, ob, md):
split = layout.split(percentage=0.25)
- if wide_ui:
- split.label(text="Cast Type:")
- split.prop(md, "cast_type", text="")
- else:
- layout.prop(md, "cast_type", text="")
+ split.label(text="Cast Type:")
+ split.prop(md, "cast_type", text="")
split = layout.split(percentage=0.25)
col = split.column()
- col.prop(md, "x")
- col.prop(md, "y")
- col.prop(md, "z")
+ col.prop(md, "use_x")
+ col.prop(md, "use_y")
+ col.prop(md, "use_z")
col = split.column()
col.prop(md, "factor")
col.prop(md, "radius")
col.prop(md, "size")
- col.prop(md, "from_radius")
+ col.prop(md, "use_radius_as_size")
split = layout.split()
col = split.column()
col.label(text="Vertex Group:")
col.prop_object(md, "vertex_group", ob, "vertex_groups", text="")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Control Object:")
col.prop(md, "object", text="")
if md.object:
col.prop(md, "use_transform")
- def CLOTH(self, layout, ob, md, wide_ui):
+ def CLOTH(self, layout, ob, md):
layout.label(text="See Cloth panel.")
- def COLLISION(self, layout, ob, md, wide_ui):
+ def COLLISION(self, layout, ob, md):
layout.label(text="See Collision panel.")
- def CURVE(self, layout, ob, md, wide_ui):
+ def CURVE(self, layout, ob, md):
split = layout.split()
col = split.column()
col.label(text="Object:")
col.prop(md, "object", text="")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Vertex Group:")
col.prop_object(md, "vertex_group", ob, "vertex_groups", text="")
layout.label(text="Deformation Axis:")
layout.row().prop(md, "deform_axis", expand=True)
- def DECIMATE(self, layout, ob, md, wide_ui):
+ def DECIMATE(self, layout, ob, md):
layout.prop(md, "ratio")
layout.label(text="Face Count: %s" % str(md.face_count))
- def DISPLACE(self, layout, ob, md, wide_ui):
+ def DISPLACE(self, layout, ob, md):
split = layout.split()
col = split.column()
@@ -240,15 +220,14 @@ class DATA_PT_modifiers(DataButtonsPanel):
col.label(text="Vertex Group:")
col.prop_object(md, "vertex_group", ob, "vertex_groups", text="")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Direction:")
col.prop(md, "direction", text="")
col.label(text="Texture Coordinates:")
- col.prop(md, "texture_coordinates", text="")
- if md.texture_coordinates == 'OBJECT':
+ col.prop(md, "texture_coords", text="")
+ if md.texture_coords == 'OBJECT':
layout.prop(md, "texture_coordinate_object", text="Object")
- elif md.texture_coordinates == 'UV' and ob.type == 'MESH':
+ elif md.texture_coords == 'UV' and ob.type == 'MESH':
layout.prop_object(md, "uv_layer", ob.data, "uv_textures")
layout.separator()
@@ -256,13 +235,12 @@ class DATA_PT_modifiers(DataButtonsPanel):
split = layout.split()
col = split.column()
- col.prop(md, "midlevel")
+ col.prop(md, "mid_level")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(md, "strength")
- def EDGE_SPLIT(self, layout, ob, md, wide_ui):
+ def EDGE_SPLIT(self, layout, ob, md):
split = layout.split()
col = split.column()
@@ -271,11 +249,10 @@ class DATA_PT_modifiers(DataButtonsPanel):
sub.active = md.use_edge_angle
sub.prop(md, "split_angle")
- if wide_ui:
- col = split.column()
- col.prop(md, "use_sharp", text="Sharp Edges")
+ col = split.column()
+ col.prop(md, "use_edge_sharp", text="Sharp Edges")
- def EXPLODE(self, layout, ob, md, wide_ui):
+ def EXPLODE(self, layout, ob, md):
split = layout.split()
col = split.column()
@@ -285,20 +262,19 @@ class DATA_PT_modifiers(DataButtonsPanel):
sub.active = bool(md.vertex_group)
sub.prop(md, "protect")
- if wide_ui:
- col = split.column()
- col.prop(md, "split_edges")
- col.prop(md, "unborn")
- col.prop(md, "alive")
- col.prop(md, "dead")
- col.prop(md, "size")
+ col = split.column()
+ col.prop(md, "use_edge_split")
+ col.prop(md, "show_unborn")
+ col.prop(md, "show_alive")
+ col.prop(md, "show_dead")
+ col.prop(md, "use_size")
layout.operator("object.explode_refresh", text="Refresh")
- def FLUID_SIMULATION(self, layout, ob, md, wide_ui):
+ def FLUID_SIMULATION(self, layout, ob, md):
layout.label(text="See Fluid panel.")
- def HOOK(self, layout, ob, md, wide_ui):
+ def HOOK(self, layout, ob, md):
split = layout.split()
col = split.column()
@@ -307,8 +283,7 @@ class DATA_PT_modifiers(DataButtonsPanel):
if md.object and md.object.type == 'ARMATURE':
col.label(text="Bone:")
col.prop_object(md, "subtarget", md.object.data, "bones", text="")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Vertex Group:")
col.prop_object(md, "vertex_group", ob, "vertex_groups", text="")
@@ -319,10 +294,8 @@ class DATA_PT_modifiers(DataButtonsPanel):
col = split.column()
col.prop(md, "falloff")
col.prop(md, "force", slider=True)
- if wide_ui:
- col = split.column()
- else:
- col.separator()
+
+ col = split.column()
col.operator("object.hook_reset", text="Reset")
col.operator("object.hook_recenter", text="Recenter")
@@ -332,26 +305,24 @@ class DATA_PT_modifiers(DataButtonsPanel):
row.operator("object.hook_select", text="Select")
row.operator("object.hook_assign", text="Assign")
- def LATTICE(self, layout, ob, md, wide_ui):
+ def LATTICE(self, layout, ob, md):
split = layout.split()
col = split.column()
col.label(text="Object:")
col.prop(md, "object", text="")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Vertex Group:")
col.prop_object(md, "vertex_group", ob, "vertex_groups", text="")
- def MASK(self, layout, ob, md, wide_ui):
+ def MASK(self, layout, ob, md):
split = layout.split()
col = split.column()
col.label(text="Mode:")
col.prop(md, "mode", text="")
- if wide_ui:
- col = split.column()
+ col = split.column()
if md.mode == 'ARMATURE':
col.label(text="Armature:")
col.prop(md, "armature", text="")
@@ -361,23 +332,22 @@ class DATA_PT_modifiers(DataButtonsPanel):
sub = col.column()
sub.active = bool(md.vertex_group)
- sub.prop(md, "invert")
+ sub.prop(md, "invert_vertex_group")
- def MESH_DEFORM(self, layout, ob, md, wide_ui):
+ def MESH_DEFORM(self, layout, ob, md):
split = layout.split()
col = split.column()
sub = col.column()
sub.label(text="Object:")
sub.prop(md, "object", text="")
sub.active = not md.is_bound
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Vertex Group:")
col.prop_object(md, "vertex_group", ob, "vertex_groups", text="")
sub = col.column()
sub.active = bool(md.vertex_group)
- sub.prop(md, "invert")
+ sub.prop(md, "invert_vertex_group")
layout.separator()
@@ -391,68 +361,55 @@ class DATA_PT_modifiers(DataButtonsPanel):
col = split.column()
col.prop(md, "precision")
- if wide_ui:
- col = split.column()
- col.prop(md, "dynamic")
+ col = split.column()
+ col.prop(md, "use_dynamic_bind")
- def MIRROR(self, layout, ob, md, wide_ui):
- layout.prop(md, "merge_limit")
- if wide_ui:
- split = layout.split(percentage=0.25)
- else:
- split = layout.split(percentage=0.4)
+ def MIRROR(self, layout, ob, md):
+ layout.prop(md, "merge_threshold")
+ split = layout.split(percentage=0.25)
col = split.column()
col.label(text="Axis:")
- col.prop(md, "x")
- col.prop(md, "y")
- col.prop(md, "z")
+ col.prop(md, "use_x")
+ col.prop(md, "use_y")
+ col.prop(md, "use_z")
- if wide_ui:
- col = split.column()
- else:
- subsplit = layout.split()
- col = subsplit.column()
+ col = split.column()
col.label(text="Options:")
- col.prop(md, "clip", text="Clipping")
- col.prop(md, "mirror_vertex_groups", text="Vertex Groups")
+ col.prop(md, "use_clip", text="Clipping")
+ col.prop(md, "use_mirror_vertex_groups", text="Vertex Groups")
col = split.column()
col.label(text="Textures:")
- col.prop(md, "mirror_u", text="U")
- col.prop(md, "mirror_v", text="V")
+ col.prop(md, "use_mirror_u", text="U")
+ col.prop(md, "use_mirror_v", text="V")
col = layout.column()
col.label(text="Mirror Object:")
col.prop(md, "mirror_object", text="")
- def MULTIRES(self, layout, ob, md, wide_ui):
- if wide_ui:
- layout.row().prop(md, "subdivision_type", expand=True)
- else:
- layout.row().prop(md, "subdivision_type", text="")
+ def MULTIRES(self, layout, ob, md):
+ layout.row().prop(md, "subdivision_type", expand=True)
split = layout.split()
col = split.column()
col.prop(md, "levels", text="Preview")
col.prop(md, "sculpt_levels", text="Sculpt")
col.prop(md, "render_levels", text="Render")
- col.prop(bpy.context.tool_settings.sculpt, "fast_navigate")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.enabled = ob.mode != 'EDIT'
col.operator("object.multires_subdivide", text="Subdivide")
col.operator("object.multires_higher_levels_delete", text="Delete Higher")
col.operator("object.multires_reshape", text="Reshape")
- col.prop(md, "optimal_display")
+ col.prop(md, "show_only_control_edges")
layout.separator()
col = layout.column()
row = col.row()
- if md.external:
+ if md.is_external:
row.operator("object.multires_external_pack", text="Pack External")
row.label()
row = col.row()
@@ -461,23 +418,22 @@ class DATA_PT_modifiers(DataButtonsPanel):
row.operator("object.multires_external_save", text="Save External...")
row.label()
- def PARTICLE_INSTANCE(self, layout, ob, md, wide_ui):
+ def PARTICLE_INSTANCE(self, layout, ob, md):
layout.prop(md, "object")
- layout.prop(md, "particle_system_number", text="Particle System")
+ layout.prop(md, "particle_system_index", text="Particle System")
split = layout.split()
col = split.column()
col.label(text="Create From:")
- col.prop(md, "normal")
- col.prop(md, "children")
- col.prop(md, "size")
+ col.prop(md, "use_normal")
+ col.prop(md, "use_children")
+ col.prop(md, "use_size")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Show Particles When:")
- col.prop(md, "alive")
- col.prop(md, "unborn")
- col.prop(md, "dead")
+ col.prop(md, "show_alive")
+ col.prop(md, "show_unborn")
+ col.prop(md, "show_dead")
layout.separator()
@@ -487,17 +443,16 @@ class DATA_PT_modifiers(DataButtonsPanel):
split.active = md.use_path
col = split.column()
col.row().prop(md, "axis", expand=True)
- col.prop(md, "keep_shape")
+ col.prop(md, "use_preserve_shape")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(md, "position", slider=True)
col.prop(md, "random_position", text="Random", slider=True)
- def PARTICLE_SYSTEM(self, layout, ob, md, wide_ui):
+ def PARTICLE_SYSTEM(self, layout, ob, md):
layout.label(text="See Particle panel.")
- def SCREW(self, layout, ob, md, wide_ui):
+ def SCREW(self, layout, ob, md):
split = layout.split()
col = split.column()
@@ -507,8 +462,7 @@ class DATA_PT_modifiers(DataButtonsPanel):
col.prop(md, "steps")
col.prop(md, "render_steps")
- if wide_ui:
- col = split.column()
+ col = split.column()
row = col.row()
row.active = (md.object is None or md.use_object_screw_offset == False)
row.prop(md, "screw_offset")
@@ -519,13 +473,12 @@ class DATA_PT_modifiers(DataButtonsPanel):
col.prop(md, "use_normal_flip")
col.prop(md, "iterations")
- def SHRINKWRAP(self, layout, ob, md, wide_ui):
+ def SHRINKWRAP(self, layout, ob, md):
split = layout.split()
col = split.column()
col.label(text="Target:")
col.prop(md, "target", text="")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Vertex Group:")
col.prop_object(md, "vertex_group", ob, "vertex_groups", text="")
@@ -535,52 +488,45 @@ class DATA_PT_modifiers(DataButtonsPanel):
col.prop(md, "offset")
col.prop(md, "subsurf_levels")
- if wide_ui:
- col = split.column()
- col.label(text="Mode:")
- col.prop(md, "mode", text="")
+ col = split.column()
+ col.label(text="Mode:")
+ col.prop(md, "wrap_method", text="")
+
+ split = layout.split(percentage=0.25)
- if wide_ui:
- split = layout.split(percentage=0.25)
- else:
- split = layout.split(percentage=0.35)
col = split.column()
- if md.mode == 'PROJECT':
+ if md.wrap_method == 'PROJECT':
col.label(text="Axis:")
- col.prop(md, "x")
- col.prop(md, "y")
- col.prop(md, "z")
+ col.prop(md, "use_project_x")
+ col.prop(md, "use_project_y")
+ col.prop(md, "use_project_z")
col = split.column()
col.label(text="Direction:")
- col.prop(md, "negative")
- col.prop(md, "positive")
-
- if wide_ui:
- col = split.column()
- else:
- subsplit = layout.split()
- col = subsplit.column()
+ col.prop(md, "use_negative_direction")
+ col.prop(md, "use_positive_direction")
+
+ col = split.column()
+
col.label(text="Cull Faces:")
- col.prop(md, "cull_front_faces", text="Front")
- col.prop(md, "cull_back_faces", text="Back")
+ col.prop(md, "use_cull_front_faces", text="Front")
+ col.prop(md, "use_cull_back_faces", text="Back")
layout.label(text="Auxiliary Target:")
layout.prop(md, "auxiliary_target", text="")
- elif md.mode == 'NEAREST_SURFACEPOINT':
- layout.prop(md, "keep_above_surface")
+ elif md.wrap_method == 'NEAREST_SURFACEPOINT':
+ layout.prop(md, "use_keep_above_surface")
- def SIMPLE_DEFORM(self, layout, ob, md, wide_ui):
+ def SIMPLE_DEFORM(self, layout, ob, md):
split = layout.split()
col = split.column()
col.label(text="Mode:")
- col.prop(md, "mode", text="")
+ col.prop(md, "deform_method", text="")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Vertex Group:")
col.prop_object(md, "vertex_group", ob, "vertex_groups", text="")
@@ -590,40 +536,39 @@ class DATA_PT_modifiers(DataButtonsPanel):
col.label(text="Origin:")
col.prop(md, "origin", text="")
sub = col.column()
- sub.active = (md.origin != "")
- sub.prop(md, "relative")
+ sub.active = (md.origin is not None)
+ sub.prop(md, "use_relative")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Deform:")
col.prop(md, "factor")
col.prop(md, "limits", slider=True)
- if md.mode in ('TAPER', 'STRETCH'):
- col.prop(md, "lock_x_axis")
- col.prop(md, "lock_y_axis")
+ if md.deform_method in ('TAPER', 'STRETCH'):
+ col.prop(md, "lock_x")
+ col.prop(md, "lock_y")
- def SMOKE(self, layout, ob, md, wide_ui):
+ def SMOKE(self, layout, ob, md):
layout.label(text="See Smoke panel.")
- def SMOOTH(self, layout, ob, md, wide_ui):
+ def SMOOTH(self, layout, ob, md):
split = layout.split(percentage=0.25)
col = split.column()
col.label(text="Axis:")
- col.prop(md, "x")
- col.prop(md, "y")
- col.prop(md, "z")
+ col.prop(md, "use_x")
+ col.prop(md, "use_y")
+ col.prop(md, "use_z")
col = split.column()
col.prop(md, "factor")
- col.prop(md, "repeat")
+ col.prop(md, "iterations")
col.label(text="Vertex Group:")
col.prop_object(md, "vertex_group", ob, "vertex_groups", text="")
- def SOFT_BODY(self, layout, ob, md, wide_ui):
+ def SOFT_BODY(self, layout, ob, md):
layout.label(text="See Soft Body panel.")
- def SOLIDIFY(self, layout, ob, md, wide_ui):
+ def SOLIDIFY(self, layout, ob, md):
split = layout.split()
@@ -636,13 +581,12 @@ class DATA_PT_modifiers(DataButtonsPanel):
col.prop(md, "edge_crease_outer", text="Outer")
col.prop(md, "edge_crease_rim", text="Rim")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(md, "offset")
colsub = col.column()
- colsub.active = (md.vertex_group is not "")
- colsub.prop(md, "invert", text="Invert")
+ colsub.active = bool(md.vertex_group)
+ colsub.prop(md, "invert_vertex_group", text="Invert")
col.prop(md, "use_even_offset")
col.prop(md, "use_quality_normals")
@@ -652,15 +596,8 @@ class DATA_PT_modifiers(DataButtonsPanel):
colsub.active = md.use_rim
colsub.prop(md, "use_rim_material")
- # col = layout.column()
- # col.label(text="Vertex Group:")
- # col.prop_object(md, "vertex_group", ob, "vertex_groups", text="")
-
- def SUBSURF(self, layout, ob, md, wide_ui):
- if wide_ui:
- layout.row().prop(md, "subdivision_type", expand=True)
- else:
- layout.row().prop(md, "subdivision_type", text="")
+ def SUBSURF(self, layout, ob, md):
+ layout.row().prop(md, "subdivision_type", expand=True)
split = layout.split()
col = split.column()
@@ -668,16 +605,15 @@ class DATA_PT_modifiers(DataButtonsPanel):
col.prop(md, "levels", text="View")
col.prop(md, "render_levels", text="Render")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Options:")
- col.prop(md, "subsurf_uv")
- col.prop(md, "optimal_display")
+ col.prop(md, "use_subsurf_uv")
+ col.prop(md, "show_only_control_edges")
- def SURFACE(self, layout, ob, md, wide_ui):
+ def SURFACE(self, layout, ob, md):
layout.label(text="See Fields panel.")
- def UV_PROJECT(self, layout, ob, md, wide_ui):
+ def UV_PROJECT(self, layout, ob, md):
if ob.type == 'MESH':
split = layout.split()
@@ -685,20 +621,18 @@ class DATA_PT_modifiers(DataButtonsPanel):
col.label(text="Image:")
col.prop(md, "image", text="")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="UV Layer:")
col.prop_object(md, "uv_layer", ob.data, "uv_textures", text="")
split = layout.split()
col = split.column()
- col.prop(md, "override_image")
- col.prop(md, "num_projectors", text="Projectors")
+ col.prop(md, "use_image_override")
+ col.prop(md, "projector_count", text="Projectors")
for proj in md.projectors:
col.prop(proj, "object", text="")
- if wide_ui:
- col = split.column()
+ col = split.column()
sub = col.column(align=True)
sub.prop(md, "aspect_x", text="Aspect X")
sub.prop(md, "aspect_y", text="Aspect Y")
@@ -707,23 +641,22 @@ class DATA_PT_modifiers(DataButtonsPanel):
sub.prop(md, "scale_x", text="Scale X")
sub.prop(md, "scale_y", text="Scale Y")
- def WAVE(self, layout, ob, md, wide_ui):
+ def WAVE(self, layout, ob, md):
split = layout.split()
col = split.column()
col.label(text="Motion:")
- col.prop(md, "x")
- col.prop(md, "y")
- col.prop(md, "cyclic")
+ col.prop(md, "use_x")
+ col.prop(md, "use_y")
+ col.prop(md, "use_cyclic")
- if wide_ui:
- col = split.column()
- col.prop(md, "normals")
+ col = split.column()
+ col.prop(md, "use_normal")
sub = col.column()
- sub.active = md.normals
- sub.prop(md, "x_normal", text="X")
- sub.prop(md, "y_normal", text="Y")
- sub.prop(md, "z_normal", text="Z")
+ sub.active = md.use_normal
+ sub.prop(md, "use_normal_x", text="X")
+ sub.prop(md, "use_normal_y", text="Y")
+ sub.prop(md, "use_normal_z", text="Z")
split = layout.split()
@@ -734,8 +667,7 @@ class DATA_PT_modifiers(DataButtonsPanel):
sub.prop(md, "lifetime", text="Life")
col.prop(md, "damping_time", text="Damping")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Position:")
sub = col.column(align=True)
sub.prop(md, "start_position_x", text="X")
@@ -747,11 +679,11 @@ class DATA_PT_modifiers(DataButtonsPanel):
layout.prop(md, "start_position_object")
layout.prop_object(md, "vertex_group", ob, "vertex_groups")
layout.prop(md, "texture")
- layout.prop(md, "texture_coordinates")
- if md.texture_coordinates == 'MAP_UV' and ob.type == 'MESH':
+ layout.prop(md, "texture_coords")
+ if md.texture_coords == 'MAP_UV' and ob.type == 'MESH':
layout.prop_object(md, "uv_layer", ob.data, "uv_textures")
- elif md.texture_coordinates == 'OBJECT':
- layout.prop(md, "texture_coordinates_object")
+ elif md.texture_coords == 'OBJECT':
+ layout.prop(md, "texture_coords_object")
layout.separator()
@@ -761,26 +693,17 @@ class DATA_PT_modifiers(DataButtonsPanel):
col.prop(md, "speed", slider=True)
col.prop(md, "height", slider=True)
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(md, "width", slider=True)
col.prop(md, "narrowness", slider=True)
-classes = [
- DATA_PT_modifiers]
-
-
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/properties_game.py b/release/scripts/ui/properties_game.py
index 9ec7168f834..8d2f075fce0 100644
--- a/release/scripts/ui/properties_game.py
+++ b/release/scripts/ui/properties_game.py
@@ -19,36 +19,31 @@
# <pep8 compliant>
import bpy
-narrowui = bpy.context.user_preferences.view.properties_width_check
-
-class PhysicsButtonsPanel(bpy.types.Panel):
+class PhysicsButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "physics"
- def poll(self, context):
- ob = context.active_object
- rd = context.scene.render
- return ob and ob.game and (rd.engine in self.COMPAT_ENGINES)
-
-class PHYSICS_PT_game_physics(PhysicsButtonsPanel):
+class PHYSICS_PT_game_physics(PhysicsButtonsPanel, bpy.types.Panel):
bl_label = "Physics"
COMPAT_ENGINES = {'BLENDER_GAME'}
+ @classmethod
+ def poll(cls, context):
+ ob = context.active_object
+ rd = context.scene.render
+ return ob and ob.game and (rd.engine in cls.COMPAT_ENGINES)
+
def draw(self, context):
layout = self.layout
ob = context.active_object
game = ob.game
soft = ob.game.soft_body
- wide_ui = context.region.width > narrowui
- if wide_ui:
- layout.prop(game, "physics_type")
- else:
- layout.prop(game, "physics_type", text="")
+ layout.prop(game, "physics_type")
layout.separator()
#if game.physics_type == 'DYNAMIC':
@@ -56,15 +51,14 @@ class PHYSICS_PT_game_physics(PhysicsButtonsPanel):
split = layout.split()
col = split.column()
- col.prop(game, "actor")
- col.prop(game, "ghost")
- col.prop(ob, "restrict_render", text="Invisible") # out of place but useful
+ col.prop(game, "use_actor")
+ col.prop(game, "use_ghost")
+ col.prop(ob, "hide_render", text="Invisible") # out of place but useful
- if wide_ui:
- col = split.column()
- col.prop(game, "material_physics")
- col.prop(game, "rotate_from_normal")
- col.prop(game, "no_sleeping")
+ col = split.column()
+ col.prop(game, "use_material_physics")
+ col.prop(game, "use_rotate_from_normal")
+ col.prop(game, "use_sleep")
layout.separator()
@@ -76,13 +70,12 @@ class PHYSICS_PT_game_physics(PhysicsButtonsPanel):
col.prop(game, "radius")
col.prop(game, "form_factor")
- if wide_ui:
- col = split.column()
+ col = split.column()
sub = col.column()
sub.active = (game.physics_type == 'RIGID_BODY')
- sub.prop(game, "anisotropic_friction")
+ sub.prop(game, "use_anisotropic_friction")
subsub = sub.column()
- subsub.active = game.anisotropic_friction
+ subsub.active = game.use_anisotropic_friction
subsub.prop(game, "friction_coefficients", text="", slider=True)
split = layout.split()
@@ -90,11 +83,10 @@ class PHYSICS_PT_game_physics(PhysicsButtonsPanel):
col = split.column()
col.label(text="Velocity:")
sub = col.column(align=True)
- sub.prop(game, "minimum_velocity", text="Minimum")
- sub.prop(game, "maximum_velocity", text="Maximum")
+ sub.prop(game, "velocity_min", text="Minimum")
+ sub.prop(game, "velocity_max", text="Maximum")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Damping:")
sub = col.column(align=True)
sub.prop(game, "damping", text="Translation", slider=True)
@@ -106,21 +98,21 @@ class PHYSICS_PT_game_physics(PhysicsButtonsPanel):
col = split.column()
col.label(text="Lock Translation:")
- col.prop(game, "lock_x_axis", text="X")
- col.prop(game, "lock_y_axis", text="Y")
- col.prop(game, "lock_z_axis", text="Z")
+ col.prop(game, "lock_location_x", text="X")
+ col.prop(game, "lock_location_y", text="Y")
+ col.prop(game, "lock_location_z", text="Z")
col = split.column()
col.label(text="Lock Rotation:")
- col.prop(game, "lock_x_rot_axis", text="X")
- col.prop(game, "lock_y_rot_axis", text="Y")
- col.prop(game, "lock_z_rot_axis", text="Z")
+ col.prop(game, "lock_rotation_x", text="X")
+ col.prop(game, "lock_rotation_y", text="Y")
+ col.prop(game, "lock_rotation_z", text="Z")
elif game.physics_type == 'SOFT_BODY':
col = layout.column()
- col.prop(game, "actor")
- col.prop(game, "ghost")
- col.prop(ob, "restrict_render", text="Invisible")
+ col.prop(game, "use_actor")
+ col.prop(game, "use_ghost")
+ col.prop(ob, "hide_render", text="Invisible")
layout.separator()
@@ -129,47 +121,47 @@ class PHYSICS_PT_game_physics(PhysicsButtonsPanel):
col = split.column()
col.label(text="Attributes:")
col.prop(game, "mass")
- col.prop(soft, "welding")
- col.prop(soft, "position_iterations")
- col.prop(soft, "linstiff", slider=True)
+ col.prop(soft, "weld_threshold")
+ col.prop(soft, "location_iterations")
+ col.prop(soft, "linear_stiffness", slider=True)
col.prop(soft, "dynamic_friction", slider=True)
- col.prop(soft, "margin", slider=True)
- col.prop(soft, "bending_const", text="Bending Constraints")
+ col.prop(soft, "collision_margin", slider=True)
+ col.prop(soft, "use_bending_constraints", text="Bending Constraints")
- if wide_ui:
- col = split.column()
- col.prop(soft, "shape_match")
+ col = split.column()
+ col.prop(soft, "use_shape_match")
sub = col.column()
- sub.active = soft.shape_match
- sub.prop(soft, "threshold", slider=True)
+ sub.active = soft.use_shape_match
+ sub.prop(soft, "shape_threshold", slider=True)
col.separator()
col.label(text="Cluster Collision:")
- col.prop(soft, "cluster_rigid_to_softbody")
- col.prop(soft, "cluster_soft_to_softbody")
+ col.prop(soft, "use_cluster_rigid_to_softbody")
+ col.prop(soft, "use_cluster_soft_to_softbody")
sub = col.column()
- sub.active = (soft.cluster_rigid_to_softbody or soft.cluster_soft_to_softbody)
+ sub.active = (soft.use_cluster_rigid_to_softbody or soft.use_cluster_soft_to_softbody)
sub.prop(soft, "cluster_iterations", text="Iterations")
elif game.physics_type == 'STATIC':
col = layout.column()
- col.prop(game, "actor")
- col.prop(game, "ghost")
- col.prop(ob, "restrict_render", text="Invisible")
+ col.prop(game, "use_actor")
+ col.prop(game, "use_ghost")
+ col.prop(ob, "hide_render", text="Invisible")
elif game.physics_type in ('SENSOR', 'INVISIBLE', 'NO_COLLISION', 'OCCLUDE'):
- layout.prop(ob, "restrict_render", text="Invisible")
+ layout.prop(ob, "hide_render", text="Invisible")
-class PHYSICS_PT_game_collision_bounds(PhysicsButtonsPanel):
+class PHYSICS_PT_game_collision_bounds(PhysicsButtonsPanel, bpy.types.Panel):
bl_label = "Collision Bounds"
COMPAT_ENGINES = {'BLENDER_GAME'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
game = context.object.game
rd = context.scene.render
- return (game.physics_type in ('DYNAMIC', 'RIGID_BODY', 'SENSOR', 'SOFT_BODY', 'STATIC')) and (rd.engine in self.COMPAT_ENGINES)
+ return (game.physics_type in ('DYNAMIC', 'RIGID_BODY', 'SENSOR', 'SOFT_BODY', 'STATIC')) and (rd.engine in cls.COMPAT_ENGINES)
def draw_header(self, context):
game = context.active_object.game
@@ -180,35 +172,31 @@ class PHYSICS_PT_game_collision_bounds(PhysicsButtonsPanel):
layout = self.layout
game = context.active_object.game
- wide_ui = context.region.width > narrowui
layout.active = game.use_collision_bounds
- if wide_ui:
- layout.prop(game, "collision_bounds", text="Bounds")
- else:
- layout.prop(game, "collision_bounds", text="")
+ layout.prop(game, "collision_bounds_type", text="Bounds")
split = layout.split()
col = split.column()
col.prop(game, "collision_margin", text="Margin", slider=True)
- if wide_ui:
- col = split.column()
- col.prop(game, "collision_compound", text="Compound")
+ col = split.column()
+ col.prop(game, "use_collision_compound", text="Compound")
-class RenderButtonsPanel(bpy.types.Panel):
+class RenderButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "render"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
rd = context.scene.render
- return (rd.engine in self.COMPAT_ENGINES)
+ return (rd.engine in cls.COMPAT_ENGINES)
-class RENDER_PT_game(RenderButtonsPanel):
+class RENDER_PT_game(RenderButtonsPanel, bpy.types.Panel):
bl_label = "Game"
COMPAT_ENGINES = {'BLENDER_GAME'}
@@ -220,17 +208,16 @@ class RENDER_PT_game(RenderButtonsPanel):
row.label()
-class RENDER_PT_game_player(RenderButtonsPanel):
+class RENDER_PT_game_player(RenderButtonsPanel, bpy.types.Panel):
bl_label = "Standalone Player"
COMPAT_ENGINES = {'BLENDER_GAME'}
def draw(self, context):
layout = self.layout
- gs = context.scene.game_data
- wide_ui = context.region.width > narrowui
+ gs = context.scene.game_settings
- layout.prop(gs, "fullscreen")
+ layout.prop(gs, "show_fullscreen")
split = layout.split()
@@ -240,8 +227,7 @@ class RENDER_PT_game_player(RenderButtonsPanel):
sub.prop(gs, "resolution_x", slider=False, text="X")
sub.prop(gs, "resolution_y", slider=False, text="Y")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Quality:")
sub = col.column(align=True)
sub.prop(gs, "depth", text="Bit Depth", slider=False)
@@ -250,24 +236,20 @@ class RENDER_PT_game_player(RenderButtonsPanel):
# framing:
col = layout.column()
col.label(text="Framing:")
- if wide_ui:
- col.row().prop(gs, "framing_type", expand=True)
- else:
- col.prop(gs, "framing_type", text="")
- if gs.framing_type == 'LETTERBOX':
- col.prop(gs, "framing_color", text="")
+ col.row().prop(gs, "frame_type", expand=True)
+ if gs.frame_type == 'LETTERBOX':
+ col.prop(gs, "frame_color", text="")
-class RENDER_PT_game_stereo(RenderButtonsPanel):
+class RENDER_PT_game_stereo(RenderButtonsPanel, bpy.types.Panel):
bl_label = "Stereo"
COMPAT_ENGINES = {'BLENDER_GAME'}
def draw(self, context):
layout = self.layout
- gs = context.scene.game_data
+ gs = context.scene.game_settings
stereo_mode = gs.stereo
- wide_ui = context.region.width > narrowui
# stereo options:
layout.prop(gs, "stereo", expand=True)
@@ -275,14 +257,11 @@ class RENDER_PT_game_stereo(RenderButtonsPanel):
# stereo:
if stereo_mode == 'STEREO':
layout.prop(gs, "stereo_mode")
- layout.prop(gs, "eye_separation")
+ layout.prop(gs, "stereo_eye_separation")
# dome:
elif stereo_mode == 'DOME':
- if wide_ui:
- layout.prop(gs, "dome_mode", text="Dome Type")
- else:
- layout.prop(gs, "dome_mode", text="")
+ layout.prop(gs, "dome_mode", text="Dome Type")
dome_type = gs.dome_mode
@@ -296,8 +275,7 @@ class RENDER_PT_game_stereo(RenderButtonsPanel):
col.prop(gs, "dome_buffer_resolution", text="Resolution", slider=True)
col.prop(gs, "dome_angle", slider=True)
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(gs, "dome_tesselation", text="Tesselation")
col.prop(gs, "dome_tilt")
@@ -305,57 +283,51 @@ class RENDER_PT_game_stereo(RenderButtonsPanel):
col = split.column()
col.prop(gs, "dome_buffer_resolution", text="Resolution", slider=True)
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(gs, "dome_tesselation", text="Tesselation")
else: # cube map
col = split.column()
col.prop(gs, "dome_buffer_resolution", text="Resolution", slider=True)
- if wide_ui:
- col = split.column()
+
+ col = split.column()
layout.prop(gs, "dome_text")
-class RENDER_PT_game_shading(RenderButtonsPanel):
+class RENDER_PT_game_shading(RenderButtonsPanel, bpy.types.Panel):
bl_label = "Shading"
COMPAT_ENGINES = {'BLENDER_GAME'}
def draw(self, context):
layout = self.layout
- gs = context.scene.game_data
- wide_ui = context.region.width > narrowui
+ gs = context.scene.game_settings
- if wide_ui:
- layout.prop(gs, "material_mode", expand=True)
- else:
- layout.prop(gs, "material_mode", text="")
+ layout.prop(gs, "material_mode", expand=True)
if gs.material_mode == 'GLSL':
split = layout.split()
col = split.column()
- col.prop(gs, "glsl_lights", text="Lights")
- col.prop(gs, "glsl_shaders", text="Shaders")
- col.prop(gs, "glsl_shadows", text="Shadows")
+ col.prop(gs, "use_glsl_lights", text="Lights")
+ col.prop(gs, "use_glsl_shaders", text="Shaders")
+ col.prop(gs, "use_glsl_shadows", text="Shadows")
col = split.column()
- col.prop(gs, "glsl_ramps", text="Ramps")
- col.prop(gs, "glsl_nodes", text="Nodes")
- col.prop(gs, "glsl_extra_textures", text="Extra Textures")
+ col.prop(gs, "use_glsl_ramps", text="Ramps")
+ col.prop(gs, "use_glsl_nodes", text="Nodes")
+ col.prop(gs, "use_glsl_extra_textures", text="Extra Textures")
-class RENDER_PT_game_performance(RenderButtonsPanel):
+class RENDER_PT_game_performance(RenderButtonsPanel, bpy.types.Panel):
bl_label = "Performance"
COMPAT_ENGINES = {'BLENDER_GAME'}
def draw(self, context):
layout = self.layout
- gs = context.scene.game_data
- wide_ui = context.region.width > narrowui
+ gs = context.scene.game_settings
split = layout.split()
@@ -366,14 +338,14 @@ class RENDER_PT_game_performance(RenderButtonsPanel):
col.prop(gs, "show_physics_visualization", text="Physics Visualization")
col.prop(gs, "use_deprecation_warnings")
- if wide_ui:
- col = split.column()
+ col = split.column()
+
col.label(text="Render:")
col.prop(gs, "use_frame_rate")
col.prop(gs, "use_display_lists")
-class RENDER_PT_game_sound(RenderButtonsPanel):
+class RENDER_PT_game_sound(RenderButtonsPanel, bpy.types.Panel):
bl_label = "Sound"
COMPAT_ENGINES = {'BLENDER_GAME'}
@@ -381,32 +353,26 @@ class RENDER_PT_game_sound(RenderButtonsPanel):
layout = self.layout
scene = context.scene
- wide_ui = context.region.width > narrowui
- if wide_ui:
- layout.prop(scene, "distance_model")
- else:
- layout.prop(scene, "distance_model", text="")
- layout.prop(scene, "speed_of_sound", text="Speed")
- layout.prop(scene, "doppler_factor")
+ layout.prop(scene, "audio_distance_model")
+
+ layout.prop(scene, "audio_doppler_speed", text="Speed")
+ layout.prop(scene, "audio_doppler_factor")
-class WorldButtonsPanel(bpy.types.Panel):
+class WorldButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "world"
- def poll(self, context):
- scene = context.scene
- return (scene.render.engine in self.COMPAT_ENGINES) and (scene.world is not None)
-
-class WORLD_PT_game_context_world(WorldButtonsPanel):
+class WORLD_PT_game_context_world(WorldButtonsPanel, bpy.types.Panel):
bl_label = ""
bl_show_header = False
COMPAT_ENGINES = {'BLENDER_GAME'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
rd = context.scene.render
return (context.scene) and (rd.use_game_engine)
@@ -416,76 +382,79 @@ class WORLD_PT_game_context_world(WorldButtonsPanel):
scene = context.scene
world = context.world
space = context.space_data
- wide_ui = context.region.width > narrowui
-
- if wide_ui:
- split = layout.split(percentage=0.65)
- if scene:
- split.template_ID(scene, "world", new="world.new")
- elif world:
- split.template_ID(space, "pin_id")
- else:
- if scene:
- layout.template_ID(scene, "world", new="world.new")
- elif world:
- layout.template_ID(space, "pin_id")
+
+ split = layout.split(percentage=0.65)
+ if scene:
+ split.template_ID(scene, "world", new="world.new")
+ elif world:
+ split.template_ID(space, "pin_id")
-class WORLD_PT_game_world(WorldButtonsPanel):
+class WORLD_PT_game_world(WorldButtonsPanel, bpy.types.Panel):
bl_label = "World"
COMPAT_ENGINES = {'BLENDER_GAME'}
+ @classmethod
+ def poll(cls, context):
+ scene = context.scene
+ return (scene.world and scene.render.engine in cls.COMPAT_ENGINES)
+
def draw(self, context):
layout = self.layout
world = context.world
- wide_ui = context.region.width > narrowui
split = layout.split()
col = split.column()
col.prop(world, "horizon_color")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(world, "ambient_color")
-class WORLD_PT_game_mist(WorldButtonsPanel):
+class WORLD_PT_game_mist(WorldButtonsPanel, bpy.types.Panel):
bl_label = "Mist"
COMPAT_ENGINES = {'BLENDER_GAME'}
+ @classmethod
+ def poll(cls, context):
+ scene = context.scene
+ return (scene.world and scene.render.engine in cls.COMPAT_ENGINES)
+
def draw_header(self, context):
world = context.world
- self.layout.prop(world.mist, "use_mist", text="")
+ self.layout.prop(world.mist_settings, "use_mist", text="")
def draw(self, context):
layout = self.layout
world = context.world
- wide_ui = context.region.width > narrowui
- layout.active = world.mist.use_mist
+ layout.active = world.mist_settings.use_mist
split = layout.split()
col = split.column()
- col.prop(world.mist, "start")
+ col.prop(world.mist_settings, "start")
- if wide_ui:
- col = split.column()
- col.prop(world.mist, "depth")
+ col = split.column()
+ col.prop(world.mist_settings, "depth")
-class WORLD_PT_game_physics(WorldButtonsPanel):
+class WORLD_PT_game_physics(WorldButtonsPanel, bpy.types.Panel):
bl_label = "Physics"
COMPAT_ENGINES = {'BLENDER_GAME'}
+ @classmethod
+ def poll(cls, context):
+ scene = context.scene
+ return (scene.world and scene.render.engine in cls.COMPAT_ENGINES)
+
def draw(self, context):
layout = self.layout
- gs = context.scene.game_data
- wide_ui = context.region.width > narrowui
+ gs = context.scene.game_settings
layout.prop(gs, "physics_engine")
if gs.physics_engine != 'NONE':
@@ -500,8 +469,7 @@ class WORLD_PT_game_physics(WorldButtonsPanel):
sub.prop(gs, "physics_step_sub", text="Substeps")
col.prop(gs, "fps", text="FPS")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Logic Steps:")
col.prop(gs, "logic_step_max", text="Max")
@@ -523,33 +491,12 @@ class WORLD_PT_game_physics(WorldButtonsPanel):
col.prop(gs, "logic_step_max", text="Max")
-classes = [
- PHYSICS_PT_game_physics,
- PHYSICS_PT_game_collision_bounds,
-
- RENDER_PT_game,
- RENDER_PT_game_player,
- RENDER_PT_game_stereo,
- RENDER_PT_game_shading,
- RENDER_PT_game_performance,
- RENDER_PT_game_sound,
-
- WORLD_PT_game_context_world,
- WORLD_PT_game_world,
- WORLD_PT_game_mist,
- WORLD_PT_game_physics]
-
-
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/properties_material.py b/release/scripts/ui/properties_material.py
index 1526bd004a0..265f7e08d3a 100644
--- a/release/scripts/ui/properties_material.py
+++ b/release/scripts/ui/properties_material.py
@@ -20,13 +20,11 @@
import bpy
from rna_prop_ui import PropertyPanel
-narrowui = bpy.context.user_preferences.view.properties_width_check
-
def active_node_mat(mat):
# TODO, 2.4x has a pipeline section, for 2.5 we need to communicate
# which settings from node-materials are used
- if mat:
+ if mat is not None:
mat_node = mat.active_node_material
if mat_node:
return mat_node
@@ -54,37 +52,29 @@ class MATERIAL_MT_specials(bpy.types.Menu):
layout.operator("material.paste", icon='PASTEDOWN')
-class MaterialButtonsPanel(bpy.types.Panel):
+class MaterialButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "material"
# COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here
- def poll(self, context):
- mat = context.material
- engine = context.scene.render.engine
- return mat and (engine in self.COMPAT_ENGINES)
-
+ @classmethod
+ def poll(cls, context):
+ return context.material and (context.scene.render.engine in cls.COMPAT_ENGINES)
-class MATERIAL_PT_preview(MaterialButtonsPanel):
- bl_label = "Preview"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
- def draw(self, context):
- self.layout.template_preview(context.material)
-
-
-class MATERIAL_PT_context_material(MaterialButtonsPanel):
+class MATERIAL_PT_context_material(MaterialButtonsPanel, bpy.types.Panel):
bl_label = ""
bl_show_header = False
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
# An exception, dont call the parent poll func because
# this manages materials for all engine types
engine = context.scene.render.engine
- return (context.material or context.object) and (engine in self.COMPAT_ENGINES)
+ return (context.material or context.object) and (engine in cls.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
@@ -93,7 +83,6 @@ class MATERIAL_PT_context_material(MaterialButtonsPanel):
ob = context.object
slot = context.material_slot
space = context.space_data
- wide_ui = context.region.width > narrowui
if ob:
row = layout.row()
@@ -112,262 +101,64 @@ class MATERIAL_PT_context_material(MaterialButtonsPanel):
row.operator("object.material_slot_select", text="Select")
row.operator("object.material_slot_deselect", text="Deselect")
- if wide_ui:
- split = layout.split(percentage=0.65)
-
- if ob:
- split.template_ID(ob, "active_material", new="material.new")
- row = split.row()
- if slot:
- row.prop(slot, "link", text="")
- else:
- row.label()
- elif mat:
- split.template_ID(space, "pin_id")
- split.separator()
- else:
- if ob:
- layout.template_ID(ob, "active_material", new="material.new")
- elif mat:
- layout.template_ID(space, "pin_id")
-
- if mat:
- if wide_ui:
- layout.prop(mat, "type", expand=True)
- else:
- layout.prop(mat, "type", text="")
-
-
-class MATERIAL_PT_custom_props(MaterialButtonsPanel, PropertyPanel):
- COMPAT_ENGINES = {'BLENDER_RENDER'}
- _context_path = "material"
-
-
-class MATERIAL_PT_shading(MaterialButtonsPanel):
- bl_label = "Shading"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
-
- def poll(self, context):
- mat = active_node_mat(context.material)
- engine = context.scene.render.engine
- return mat and (mat.type in ('SURFACE', 'WIRE', 'HALO')) and (engine in self.COMPAT_ENGINES)
-
- def draw(self, context):
- layout = self.layout
-
- mat = active_node_mat(context.material)
- wide_ui = context.region.width > narrowui
-
- if mat.type in ('SURFACE', 'WIRE'):
- split = layout.split()
-
- col = split.column()
- sub = col.column()
- sub.active = not mat.shadeless
- sub.prop(mat, "emit")
- sub.prop(mat, "ambient")
- sub = col.column()
- sub.prop(mat, "translucency")
-
- if wide_ui:
- col = split.column()
- col.prop(mat, "shadeless")
- sub = col.column()
- sub.active = not mat.shadeless
- sub.prop(mat, "tangent_shading")
- sub.prop(mat, "cubic")
-
- elif mat.type == 'HALO':
- layout.prop(mat, "alpha")
-
-
-class MATERIAL_PT_strand(MaterialButtonsPanel):
- bl_label = "Strand"
- bl_default_closed = True
- COMPAT_ENGINES = {'BLENDER_RENDER'}
-
- def poll(self, context):
- mat = context.material
- engine = context.scene.render.engine
- return mat and (mat.type in ('SURFACE', 'WIRE', 'HALO')) and (engine in self.COMPAT_ENGINES)
-
- def draw(self, context):
- layout = self.layout
-
- mat = context.material # dont use node material
- tan = mat.strand
- wide_ui = context.region.width > narrowui
-
- split = layout.split()
-
- col = split.column()
- sub = col.column(align=True)
- sub.label(text="Size:")
- sub.prop(tan, "root_size", text="Root")
- sub.prop(tan, "tip_size", text="Tip")
- sub.prop(tan, "min_size", text="Minimum")
- sub.prop(tan, "blender_units")
- sub = col.column()
- sub.active = (not mat.shadeless)
- sub.prop(tan, "tangent_shading")
- col.prop(tan, "shape")
-
- if wide_ui:
- col = split.column()
- col.label(text="Shading:")
- col.prop(tan, "width_fade")
- ob = context.object
- if ob and ob.type == 'MESH':
- col.prop_object(tan, "uv_layer", ob.data, "uv_textures", text="")
- else:
- col.prop(tan, "uv_layer", text="")
- col.separator()
- sub = col.column()
- sub.active = (not mat.shadeless)
- sub.prop(tan, "surface_diffuse")
- sub = col.column()
- sub.active = tan.surface_diffuse
- sub.prop(tan, "blend_distance", text="Distance")
-
-
-class MATERIAL_PT_physics(MaterialButtonsPanel):
- bl_label = "Physics"
- COMPAT_ENGINES = {'BLENDER_GAME'}
-
- def draw(self, context):
- layout = self.layout
-
- phys = context.material.physics # dont use node material
- wide_ui = context.region.width > narrowui
-
- split = layout.split()
-
- col = split.column()
- col.prop(phys, "distance")
- col.prop(phys, "friction")
- col.prop(phys, "align_to_normal")
-
- if wide_ui:
- col = split.column()
- col.prop(phys, "force", slider=True)
- col.prop(phys, "elasticity", slider=True)
- col.prop(phys, "damp", slider=True)
-
+ split = layout.split(percentage=0.65)
-class MATERIAL_PT_options(MaterialButtonsPanel):
- bl_label = "Options"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
-
- def poll(self, context):
- mat = active_node_mat(context.material)
- engine = context.scene.render.engine
- return mat and (mat.type in ('SURFACE', 'WIRE', 'HALO')) and (engine in self.COMPAT_ENGINES)
-
- def draw(self, context):
- layout = self.layout
-
- mat = active_node_mat(context.material)
- wide_ui = context.region.width > narrowui
-
- split = layout.split()
-
- col = split.column()
- col.prop(mat, "traceable")
- col.prop(mat, "full_oversampling")
- col.prop(mat, "use_sky")
- col.prop(mat, "exclude_mist")
- col.prop(mat, "invert_z")
- sub = col.row()
- sub.prop(mat, "z_offset")
- sub.active = mat.transparency and mat.transparency_method == 'Z_TRANSPARENCY'
- sub = col.column(align=True)
- sub.label(text="Light Group:")
- sub.prop(mat, "light_group", text="")
- row = sub.row()
- row.active = bool(mat.light_group)
- row.prop(mat, "light_group_exclusive", text="Exclusive")
+ if ob:
+ split.template_ID(ob, "active_material", new="material.new")
+ row = split.row()
+ if mat:
+ row.prop(mat, "use_nodes", icon="NODETREE", text="")
- if wide_ui:
- col = split.column()
- col.prop(mat, "face_texture")
- sub = col.column()
- sub.active = mat.face_texture
- sub.prop(mat, "face_texture_alpha")
- col.separator()
- col.prop(mat, "vertex_color_paint")
- col.prop(mat, "vertex_color_light")
- col.prop(mat, "object_color")
+ if slot:
+ row.prop(slot, "link", text="")
+ else:
+ row.label()
+ elif mat:
+ split.template_ID(space, "pin_id")
+ split.separator()
+ if mat:
+ layout.prop(mat, "type", expand=True)
+
-class MATERIAL_PT_shadow(MaterialButtonsPanel):
- bl_label = "Shadow"
- bl_default_closed = True
+class MATERIAL_PT_preview(MaterialButtonsPanel, bpy.types.Panel):
+ bl_label = "Preview"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
- def poll(self, context):
- mat = active_node_mat(context.material)
- engine = context.scene.render.engine
- return mat and (mat.type in ('SURFACE', 'WIRE')) and (engine in self.COMPAT_ENGINES)
-
def draw(self, context):
- layout = self.layout
-
- mat = active_node_mat(context.material)
- wide_ui = context.region.width > narrowui
-
- split = layout.split()
-
- col = split.column()
- col.prop(mat, "shadows", text="Receive")
- col.prop(mat, "receive_transparent_shadows", text="Receive Transparent")
- col.prop(mat, "only_shadow", text="Shadows Only")
- col.prop(mat, "cast_shadows_only", text="Cast Only")
- col.prop(mat, "shadow_casting_alpha", text="Casting Alpha")
-
- if wide_ui:
- col = split.column()
- col.prop(mat, "cast_buffer_shadows")
- sub = col.column()
- sub.active = mat.cast_buffer_shadows
- sub.prop(mat, "shadow_buffer_bias", text="Buffer Bias")
- col.prop(mat, "ray_shadow_bias", text="Auto Ray Bias")
- sub = col.column()
- sub.active = (not mat.ray_shadow_bias)
- sub.prop(mat, "shadow_ray_bias", text="Ray Bias")
- col.prop(mat, "cast_approximate")
+ self.layout.template_preview(context.material)
-class MATERIAL_PT_diffuse(MaterialButtonsPanel):
+class MATERIAL_PT_diffuse(MaterialButtonsPanel, bpy.types.Panel):
bl_label = "Diffuse"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
mat = active_node_mat(context.material)
engine = context.scene.render.engine
- return mat and (mat.type in ('SURFACE', 'WIRE')) and (engine in self.COMPAT_ENGINES)
+ return mat and (mat.type in ('SURFACE', 'WIRE')) and (engine in cls.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
mat = active_node_mat(context.material)
- wide_ui = context.region.width > narrowui
split = layout.split()
col = split.column()
col.prop(mat, "diffuse_color", text="")
sub = col.column()
- sub.active = (not mat.shadeless)
+ sub.active = (not mat.use_shadeless)
sub.prop(mat, "diffuse_intensity", text="Intensity")
- if wide_ui:
- col = split.column()
- col.active = (not mat.shadeless)
+ col = split.column()
+ col.active = (not mat.use_shadeless)
col.prop(mat, "diffuse_shader", text="")
col.prop(mat, "use_diffuse_ramp", text="Ramp")
col = layout.column()
- col.active = (not mat.shadeless)
+ col.active = (not mat.use_shadeless)
if mat.diffuse_shader == 'OREN_NAYAR':
col.prop(mat, "roughness")
elif mat.diffuse_shader == 'MINNAERT':
@@ -378,8 +169,7 @@ class MATERIAL_PT_diffuse(MaterialButtonsPanel):
col = split.column()
col.prop(mat, "diffuse_toon_size", text="Size")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(mat, "diffuse_toon_smooth", text="Smooth")
elif mat.diffuse_shader == 'FRESNEL':
split = col.split()
@@ -387,8 +177,7 @@ class MATERIAL_PT_diffuse(MaterialButtonsPanel):
col = split.column()
col.prop(mat, "diffuse_fresnel", text="Fresnel")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(mat, "diffuse_fresnel_factor", text="Factor")
if mat.use_diffuse_ramp:
@@ -401,29 +190,28 @@ class MATERIAL_PT_diffuse(MaterialButtonsPanel):
col = split.column()
col.prop(mat, "diffuse_ramp_input", text="Input")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(mat, "diffuse_ramp_blend", text="Blend")
row = layout.row()
row.prop(mat, "diffuse_ramp_factor", text="Factor")
-class MATERIAL_PT_specular(MaterialButtonsPanel):
+class MATERIAL_PT_specular(MaterialButtonsPanel, bpy.types.Panel):
bl_label = "Specular"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
mat = active_node_mat(context.material)
engine = context.scene.render.engine
- return mat and (mat.type in ('SURFACE', 'WIRE')) and (engine in self.COMPAT_ENGINES)
+ return mat and (mat.type in ('SURFACE', 'WIRE')) and (engine in cls.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
mat = active_node_mat(context.material)
- wide_ui = context.region.width > narrowui
- layout.active = (not mat.shadeless)
+ layout.active = (not mat.use_shadeless)
split = layout.split()
@@ -431,8 +219,7 @@ class MATERIAL_PT_specular(MaterialButtonsPanel):
col.prop(mat, "specular_color", text="")
col.prop(mat, "specular_intensity", text="Intensity")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(mat, "specular_shader", text="")
col.prop(mat, "use_specular_ramp", text="Ramp")
@@ -445,8 +232,7 @@ class MATERIAL_PT_specular(MaterialButtonsPanel):
col = split.column()
col.prop(mat, "specular_hardness", text="Hardness")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(mat, "specular_ior", text="IOR")
elif mat.specular_shader == 'WARDISO':
col.prop(mat, "specular_slope", text="Slope")
@@ -456,8 +242,7 @@ class MATERIAL_PT_specular(MaterialButtonsPanel):
col = split.column()
col.prop(mat, "specular_toon_size", text="Size")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(mat, "specular_toon_smooth", text="Smooth")
if mat.use_specular_ramp:
@@ -469,89 +254,135 @@ class MATERIAL_PT_specular(MaterialButtonsPanel):
col = split.column()
col.prop(mat, "specular_ramp_input", text="Input")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(mat, "specular_ramp_blend", text="Blend")
row = layout.row()
row.prop(mat, "specular_ramp_factor", text="Factor")
-class MATERIAL_PT_sss(MaterialButtonsPanel):
- bl_label = "Subsurface Scattering"
+class MATERIAL_PT_shading(MaterialButtonsPanel, bpy.types.Panel):
+ bl_label = "Shading"
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+
+ @classmethod
+ def poll(cls, context):
+ mat = active_node_mat(context.material)
+ engine = context.scene.render.engine
+ return mat and (mat.type in ('SURFACE', 'WIRE', 'HALO')) and (engine in cls.COMPAT_ENGINES)
+
+ def draw(self, context):
+ layout = self.layout
+
+ mat = active_node_mat(context.material)
+
+ if mat.type in ('SURFACE', 'WIRE'):
+ split = layout.split()
+
+ col = split.column()
+ sub = col.column()
+ sub.active = not mat.use_shadeless
+ sub.prop(mat, "emit")
+ sub.prop(mat, "ambient")
+ sub = col.column()
+ sub.prop(mat, "translucency")
+
+ col = split.column()
+ col.prop(mat, "use_shadeless")
+ sub = col.column()
+ sub.active = not mat.use_shadeless
+ sub.prop(mat, "use_tangent_shading")
+ sub.prop(mat, "use_cubic")
+
+ elif mat.type == 'HALO':
+ layout.prop(mat, "alpha")
+
+
+class MATERIAL_PT_transp(MaterialButtonsPanel, bpy.types.Panel):
+ bl_label = "Transparency"
bl_default_closed = True
COMPAT_ENGINES = {'BLENDER_RENDER'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
mat = active_node_mat(context.material)
engine = context.scene.render.engine
- return mat and (mat.type in ('SURFACE', 'WIRE')) and (engine in self.COMPAT_ENGINES)
+ return mat and (mat.type in ('SURFACE', 'WIRE')) and (engine in cls.COMPAT_ENGINES)
def draw_header(self, context):
mat = active_node_mat(context.material)
- sss = mat.subsurface_scattering
- self.layout.active = (not mat.shadeless)
- self.layout.prop(sss, "enabled", text="")
+ self.layout.prop(mat, "use_transparency", text="")
def draw(self, context):
layout = self.layout
mat = active_node_mat(context.material)
- sss = mat.subsurface_scattering
- wide_ui = context.region.width > narrowui
-
- layout.active = (sss.enabled) and (not mat.shadeless)
+ rayt = mat.raytrace_transparency
- row = layout.row().split()
- sub = row.row(align=True).split(percentage=0.75)
- sub.menu("MATERIAL_MT_sss_presets", text=bpy.types.MATERIAL_MT_sss_presets.bl_label)
- sub.operator("material.sss_preset_add", text="", icon="ZOOMIN")
+ row = layout.row()
+ row.active = mat.use_transparency and (not mat.use_shadeless)
+ row.prop(mat, "transparency_method", expand=True)
split = layout.split()
col = split.column()
- col.prop(sss, "ior")
- col.prop(sss, "scale")
- col.prop(sss, "color", text="")
- col.prop(sss, "radius", text="RGB Radius", expand=True)
+ col.prop(mat, "alpha")
+ row = col.row()
+ row.active = mat.use_transparency and (not mat.use_shadeless)
+ row.prop(mat, "specular_alpha", text="Specular")
+
+ col = split.column()
+ col.active = (not mat.use_shadeless)
+ col.prop(rayt, "fresnel")
+ sub = col.column()
+ sub.active = rayt.fresnel > 0
+ sub.prop(rayt, "fresnel_factor", text="Blend")
+
+ if mat.transparency_method == 'RAYTRACE':
+ layout.separator()
+ split = layout.split()
+ split.active = mat.use_transparency
- if wide_ui:
col = split.column()
- sub = col.column(align=True)
- sub.label(text="Blend:")
- sub.prop(sss, "color_factor", text="Color")
- sub.prop(sss, "texture_factor", text="Texture")
- sub.label(text="Scattering Weight:")
- sub.prop(sss, "front")
- sub.prop(sss, "back")
- col.separator()
- col.prop(sss, "error_tolerance", text="Error")
+ col.prop(rayt, "ior")
+ col.prop(rayt, "filter")
+ col.prop(rayt, "falloff")
+ col.prop(rayt, "depth_max")
+ col.prop(rayt, "depth")
+ col = split.column()
+ col.label(text="Gloss:")
+ col.prop(rayt, "gloss_factor", text="Amount")
+ sub = col.column()
+ sub.active = rayt.gloss_factor < 1.0
+ sub.prop(rayt, "gloss_threshold", text="Threshold")
+ sub.prop(rayt, "gloss_samples", text="Samples")
-class MATERIAL_PT_mirror(MaterialButtonsPanel):
+
+class MATERIAL_PT_mirror(MaterialButtonsPanel, bpy.types.Panel):
bl_label = "Mirror"
bl_default_closed = True
COMPAT_ENGINES = {'BLENDER_RENDER'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
mat = active_node_mat(context.material)
engine = context.scene.render.engine
- return mat and (mat.type in ('SURFACE', 'WIRE')) and (engine in self.COMPAT_ENGINES)
+ return mat and (mat.type in ('SURFACE', 'WIRE')) and (engine in cls.COMPAT_ENGINES)
def draw_header(self, context):
raym = active_node_mat(context.material).raytrace_mirror
- self.layout.prop(raym, "enabled", text="")
+ self.layout.prop(raym, "use", text="")
def draw(self, context):
layout = self.layout
mat = active_node_mat(context.material)
raym = mat.raytrace_mirror
- wide_ui = context.region.width > narrowui
- layout.active = raym.enabled
+ layout.active = raym.use
split = layout.split()
@@ -559,8 +390,7 @@ class MATERIAL_PT_mirror(MaterialButtonsPanel):
col.prop(raym, "reflect_factor")
col.prop(mat, "mirror_color", text="")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(raym, "fresnel")
sub = col.column()
sub.active = raym.fresnel > 0
@@ -578,8 +408,7 @@ class MATERIAL_PT_mirror(MaterialButtonsPanel):
sub.label(text="Fade To:")
sub.prop(raym, "fade_to", text="")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Gloss:")
col.prop(raym, "gloss_factor", text="Amount")
sub = col.column()
@@ -589,123 +418,72 @@ class MATERIAL_PT_mirror(MaterialButtonsPanel):
sub.prop(raym, "gloss_anisotropic", text="Anisotropic")
-class MATERIAL_PT_transp(MaterialButtonsPanel):
- bl_label = "Transparency"
+class MATERIAL_PT_sss(MaterialButtonsPanel, bpy.types.Panel):
+ bl_label = "Subsurface Scattering"
bl_default_closed = True
COMPAT_ENGINES = {'BLENDER_RENDER'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
mat = active_node_mat(context.material)
engine = context.scene.render.engine
- return mat and (mat.type in ('SURFACE', 'WIRE')) and (engine in self.COMPAT_ENGINES)
+ return mat and (mat.type in ('SURFACE', 'WIRE')) and (engine in cls.COMPAT_ENGINES)
def draw_header(self, context):
mat = active_node_mat(context.material)
+ sss = mat.subsurface_scattering
- self.layout.prop(mat, "transparency", text="")
+ self.layout.active = (not mat.use_shadeless)
+ self.layout.prop(sss, "use", text="")
def draw(self, context):
layout = self.layout
mat = active_node_mat(context.material)
- rayt = mat.raytrace_transparency
- wide_ui = context.region.width > narrowui
+ sss = mat.subsurface_scattering
- row = layout.row()
- row.active = mat.transparency and (not mat.shadeless)
- if wide_ui:
- row.prop(mat, "transparency_method", expand=True)
- else:
- row.prop(mat, "transparency_method", text="")
+ layout.active = (sss.use) and (not mat.use_shadeless)
+
+ row = layout.row().split()
+ sub = row.row(align=True).split(percentage=0.75)
+ sub.menu("MATERIAL_MT_sss_presets", text=bpy.types.MATERIAL_MT_sss_presets.bl_label)
+ sub.operator("material.sss_preset_add", text="", icon="ZOOMIN")
split = layout.split()
col = split.column()
- col.prop(mat, "alpha")
- row = col.row()
- row.active = mat.transparency and (not mat.shadeless)
- row.prop(mat, "specular_alpha", text="Specular")
-
- if wide_ui:
- col = split.column()
- col.active = (not mat.shadeless)
- col.prop(rayt, "fresnel")
- sub = col.column()
- sub.active = rayt.fresnel > 0
- sub.prop(rayt, "fresnel_factor", text="Blend")
-
- if mat.transparency_method == 'RAYTRACE':
- layout.separator()
- split = layout.split()
- split.active = mat.transparency
-
- col = split.column()
- col.prop(rayt, "ior")
- col.prop(rayt, "filter")
- col.prop(rayt, "falloff")
- col.prop(rayt, "limit")
- col.prop(rayt, "depth")
-
- if wide_ui:
- col = split.column()
- col.label(text="Gloss:")
- col.prop(rayt, "gloss_factor", text="Amount")
- sub = col.column()
- sub.active = rayt.gloss_factor < 1.0
- sub.prop(rayt, "gloss_threshold", text="Threshold")
- sub.prop(rayt, "gloss_samples", text="Samples")
-
-
-class MATERIAL_PT_transp_game(MaterialButtonsPanel):
- bl_label = "Transparency"
- bl_default_closed = True
- COMPAT_ENGINES = {'BLENDER_GAME'}
-
- def poll(self, context):
- mat = active_node_mat(context.material)
- engine = context.scene.render.engine
- return mat and (engine in self.COMPAT_ENGINES)
-
- def draw_header(self, context):
- mat = active_node_mat(context.material)
-
- self.layout.prop(mat, "transparency", text="")
-
- def draw(self, context):
- layout = self.layout
-
- mat = active_node_mat(context.material)
- rayt = mat.raytrace_transparency
- wide_ui = context.region.width > narrowui
-
- row = layout.row()
- row.active = mat.transparency and (not mat.shadeless)
- if wide_ui:
- row.prop(mat, "transparency_method", expand=True)
- else:
- row.prop(mat, "transparency_method", text="")
-
- split = layout.split()
+ col.prop(sss, "ior")
+ col.prop(sss, "scale")
+ col.prop(sss, "color", text="")
+ col.prop(sss, "radius", text="RGB Radius", expand=True)
col = split.column()
- col.prop(mat, "alpha")
+ sub = col.column(align=True)
+ sub.label(text="Blend:")
+ sub.prop(sss, "color_factor", text="Color")
+ sub.prop(sss, "texture_factor", text="Texture")
+ sub.label(text="Scattering Weight:")
+ sub.prop(sss, "front")
+ sub.prop(sss, "back")
+ col.separator()
+ col.prop(sss, "error_threshold", text="Error")
-class MATERIAL_PT_halo(MaterialButtonsPanel):
+class MATERIAL_PT_halo(MaterialButtonsPanel, bpy.types.Panel):
bl_label = "Halo"
COMPAT_ENGINES = {'BLENDER_RENDER'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
mat = context.material
engine = context.scene.render.engine
- return mat and (mat.type == 'HALO') and (engine in self.COMPAT_ENGINES)
+ return mat and (mat.type == 'HALO') and (engine in cls.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
mat = context.material # dont use node material
halo = mat.halo
- wide_ui = context.region.width > narrowui
split = layout.split()
@@ -715,54 +493,53 @@ class MATERIAL_PT_halo(MaterialButtonsPanel):
col.prop(halo, "hardness")
col.prop(halo, "add")
col.label(text="Options:")
- col.prop(halo, "texture")
- col.prop(halo, "vertex_normal")
- col.prop(halo, "xalpha")
- col.prop(halo, "shaded")
- col.prop(halo, "soft")
+ col.prop(halo, "use_texture")
+ col.prop(halo, "use_vertex_normal")
+ col.prop(halo, "use_extreme_alpha")
+ col.prop(halo, "use_shaded")
+ col.prop(halo, "use_soft")
- if wide_ui:
- col = split.column()
- col.prop(halo, "ring")
+ col = split.column()
+ col.prop(halo, "use_ring")
sub = col.column()
- sub.active = halo.ring
- sub.prop(halo, "rings")
+ sub.active = halo.use_ring
+ sub.prop(halo, "ring_count")
sub.prop(mat, "mirror_color", text="")
col.separator()
- col.prop(halo, "lines")
+ col.prop(halo, "use_lines")
sub = col.column()
- sub.active = halo.lines
- sub.prop(halo, "line_number", text="Lines")
+ sub.active = halo.use_lines
+ sub.prop(halo, "line_count", text="Lines")
sub.prop(mat, "specular_color", text="")
col.separator()
- col.prop(halo, "star")
+ col.prop(halo, "use_star")
sub = col.column()
- sub.active = halo.star
- sub.prop(halo, "star_tips")
+ sub.active = halo.use_star
+ sub.prop(halo, "star_tip_count")
-class MATERIAL_PT_flare(MaterialButtonsPanel):
+class MATERIAL_PT_flare(MaterialButtonsPanel, bpy.types.Panel):
bl_label = "Flare"
COMPAT_ENGINES = {'BLENDER_RENDER'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
mat = context.material
engine = context.scene.render.engine
- return mat and (mat.type == 'HALO') and (engine in self.COMPAT_ENGINES)
+ return mat and (mat.type == 'HALO') and (engine in cls.COMPAT_ENGINES)
def draw_header(self, context):
halo = context.material.halo
- self.layout.prop(halo, "flare_mode", text="")
+ self.layout.prop(halo, "use_flare_mode", text="")
def draw(self, context):
layout = self.layout
mat = context.material # dont use node material
halo = mat.halo
- wide_ui = context.region.width > narrowui
- layout.active = halo.flare_mode
+ layout.active = halo.use_flare_mode
split = layout.split()
@@ -770,24 +547,213 @@ class MATERIAL_PT_flare(MaterialButtonsPanel):
col.prop(halo, "flare_size", text="Size")
col.prop(halo, "flare_boost", text="Boost")
col.prop(halo, "flare_seed", text="Seed")
- if wide_ui:
- col = split.column()
- col.prop(halo, "flares_sub", text="Subflares")
- col.prop(halo, "flare_subsize", text="Subsize")
+ col = split.column()
+ col.prop(halo, "flare_subflare_count", text="Subflares")
+ col.prop(halo, "flare_subflare_size", text="Subsize")
+
+
+class MATERIAL_PT_physics(MaterialButtonsPanel, bpy.types.Panel):
+ bl_label = "Physics"
+ COMPAT_ENGINES = {'BLENDER_GAME'}
+
+ @classmethod
+ def poll(cls, context):
+ return context.material and (context.scene.render.engine in cls.COMPAT_ENGINES)
+
+ def draw(self, context):
+ layout = self.layout
+
+ phys = context.material.physics # dont use node material
+
+ split = layout.split()
-class VolumeButtonsPanel(bpy.types.Panel):
+ col = split.column()
+ col.prop(phys, "distance")
+ col.prop(phys, "friction")
+ col.prop(phys, "use_normal_align")
+
+ col = split.column()
+ col.prop(phys, "force", slider=True)
+ col.prop(phys, "elasticity", slider=True)
+ col.prop(phys, "damping", slider=True)
+
+
+class MATERIAL_PT_strand(MaterialButtonsPanel, bpy.types.Panel):
+ bl_label = "Strand"
+ bl_default_closed = True
+ COMPAT_ENGINES = {'BLENDER_RENDER'}
+
+ @classmethod
+ def poll(cls, context):
+ mat = context.material
+ engine = context.scene.render.engine
+ return mat and (mat.type in ('SURFACE', 'WIRE', 'HALO')) and (engine in cls.COMPAT_ENGINES)
+
+ def draw(self, context):
+ layout = self.layout
+
+ mat = context.material # dont use node material
+ tan = mat.strand
+
+ split = layout.split()
+
+ col = split.column()
+ sub = col.column(align=True)
+ sub.label(text="Size:")
+ sub.prop(tan, "root_size", text="Root")
+ sub.prop(tan, "tip_size", text="Tip")
+ sub.prop(tan, "size_min", text="Minimum")
+ sub.prop(tan, "use_blender_units")
+ sub = col.column()
+ sub.active = (not mat.use_shadeless)
+ sub.prop(tan, "use_tangent_shading")
+ col.prop(tan, "shape")
+
+ col = split.column()
+ col.label(text="Shading:")
+ col.prop(tan, "width_fade")
+ ob = context.object
+ if ob and ob.type == 'MESH':
+ col.prop_object(tan, "uv_layer", ob.data, "uv_textures", text="")
+ else:
+ col.prop(tan, "uv_layer", text="")
+ col.separator()
+ sub = col.column()
+ sub.active = (not mat.use_shadeless)
+ sub.prop(tan, "use_surface_diffuse")
+ sub = col.column()
+ sub.active = tan.use_surface_diffuse
+ sub.prop(tan, "blend_distance", text="Distance")
+
+
+class MATERIAL_PT_options(MaterialButtonsPanel, bpy.types.Panel):
+ bl_label = "Options"
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+
+ @classmethod
+ def poll(cls, context):
+ mat = active_node_mat(context.material)
+ engine = context.scene.render.engine
+ return mat and (mat.type in ('SURFACE', 'WIRE')) and (engine in cls.COMPAT_ENGINES)
+
+ def draw(self, context):
+ layout = self.layout
+
+ mat = active_node_mat(context.material)
+
+ split = layout.split()
+
+ col = split.column()
+ col.prop(mat, "use_raytrace")
+ col.prop(mat, "use_full_oversampling")
+ col.prop(mat, "use_sky")
+ col.prop(mat, "use_mist")
+ col.prop(mat, "invert_z")
+ sub = col.row()
+ sub.prop(mat, "offset_z")
+ sub.active = mat.use_transparency and mat.transparency_method == 'Z_TRANSPARENCY'
+ sub = col.column(align=True)
+ sub.label(text="Light Group:")
+ sub.prop(mat, "light_group", text="")
+ row = sub.row()
+ row.active = bool(mat.light_group)
+ row.prop(mat, "use_light_group_exclusive", text="Exclusive")
+
+ col = split.column()
+ col.prop(mat, "use_face_texture")
+ sub = col.column()
+ sub.active = mat.use_face_texture
+ sub.prop(mat, "use_face_texture_alpha")
+ col.separator()
+ col.prop(mat, "use_vertex_color_paint")
+ col.prop(mat, "use_vertex_color_light")
+ col.prop(mat, "use_object_color")
+
+
+class MATERIAL_PT_shadow(MaterialButtonsPanel, bpy.types.Panel):
+ bl_label = "Shadow"
+ bl_default_closed = True
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+
+ @classmethod
+ def poll(cls, context):
+ mat = active_node_mat(context.material)
+ engine = context.scene.render.engine
+ return mat and (mat.type in ('SURFACE', 'WIRE')) and (engine in cls.COMPAT_ENGINES)
+
+ def draw(self, context):
+ layout = self.layout
+
+ mat = active_node_mat(context.material)
+
+ split = layout.split()
+
+ col = split.column()
+ col.prop(mat, "use_shadows", text="Receive")
+ col.prop(mat, "use_transparent_shadows", text="Receive Transparent")
+ col.prop(mat, "use_only_shadow", text="Shadows Only")
+ col.prop(mat, "use_cast_shadows_only", text="Cast Only")
+ col.prop(mat, "shadow_cast_alpha", text="Casting Alpha")
+
+ col = split.column()
+ col.prop(mat, "use_cast_buffer_shadows")
+ sub = col.column()
+ sub.active = mat.use_cast_buffer_shadows
+ sub.prop(mat, "shadow_buffer_bias", text="Buffer Bias")
+ col.prop(mat, "use_ray_shadow_bias", text="Auto Ray Bias")
+ sub = col.column()
+ sub.active = (not mat.use_ray_shadow_bias)
+ sub.prop(mat, "shadow_ray_bias", text="Ray Bias")
+ col.prop(mat, "use_cast_approximate")
+
+
+class MATERIAL_PT_transp_game(MaterialButtonsPanel, bpy.types.Panel):
+ bl_label = "Transparency"
+ bl_default_closed = True
+ COMPAT_ENGINES = {'BLENDER_GAME'}
+
+ @classmethod
+ def poll(cls, context):
+ mat = active_node_mat(context.material)
+ engine = context.scene.render.engine
+ return mat and (engine in cls.COMPAT_ENGINES)
+
+ def draw_header(self, context):
+ mat = active_node_mat(context.material)
+
+ self.layout.prop(mat, "use_transparency", text="")
+
+ def draw(self, context):
+ layout = self.layout
+
+ mat = active_node_mat(context.material)
+ rayt = mat.raytrace_transparency
+
+ row = layout.row()
+ row.active = mat.use_transparency and (not mat.use_shadeless)
+ row.prop(mat, "transparency_method", expand=True)
+
+ split = layout.split()
+
+ col = split.column()
+ col.prop(mat, "alpha")
+
+
+class VolumeButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "material"
+ COMPAT_ENGINES = {'BLENDER_RENDER'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
mat = context.material
engine = context.scene.render.engine
- return mat and (mat.type == 'VOLUME') and (engine in self.COMPAT_ENGINES)
+ return mat and (mat.type == 'VOLUME') and (engine in cls.COMPAT_ENGINES)
-class MATERIAL_PT_volume_density(VolumeButtonsPanel):
+class MATERIAL_PT_volume_density(VolumeButtonsPanel, bpy.types.Panel):
bl_label = "Density"
bl_default_closed = False
COMPAT_ENGINES = {'BLENDER_RENDER'}
@@ -796,18 +762,16 @@ class MATERIAL_PT_volume_density(VolumeButtonsPanel):
layout = self.layout
vol = context.material.volume # dont use node material
- wide_ui = context.region.width > narrowui
split = layout.split()
col = split.column()
col.prop(vol, "density")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(vol, "density_scale")
-class MATERIAL_PT_volume_shading(VolumeButtonsPanel):
+class MATERIAL_PT_volume_shading(VolumeButtonsPanel, bpy.types.Panel):
bl_label = "Shading"
bl_default_closed = False
COMPAT_ENGINES = {'BLENDER_RENDER'}
@@ -816,7 +780,6 @@ class MATERIAL_PT_volume_shading(VolumeButtonsPanel):
layout = self.layout
vol = context.material.volume # dont use node material
- wide_ui = context.region.width > narrowui
split = layout.split()
@@ -825,8 +788,7 @@ class MATERIAL_PT_volume_shading(VolumeButtonsPanel):
col.prop(vol, "asymmetry")
col.prop(vol, "transmission_color")
- if wide_ui:
- col = split.column()
+ col = split.column()
sub = col.column(align=True)
sub.prop(vol, "emission")
sub.prop(vol, "emission_color", text="")
@@ -835,7 +797,7 @@ class MATERIAL_PT_volume_shading(VolumeButtonsPanel):
sub.prop(vol, "reflection_color", text="")
-class MATERIAL_PT_volume_lighting(VolumeButtonsPanel):
+class MATERIAL_PT_volume_lighting(VolumeButtonsPanel, bpy.types.Panel):
bl_label = "Lighting"
bl_default_closed = False
COMPAT_ENGINES = {'BLENDER_RENDER'}
@@ -844,27 +806,25 @@ class MATERIAL_PT_volume_lighting(VolumeButtonsPanel):
layout = self.layout
vol = context.material.volume # dont use node material
- wide_ui = context.region.width > narrowui
split = layout.split()
col = split.column()
- col.prop(vol, "lighting_mode", text="")
+ col.prop(vol, "light_method", text="")
- if wide_ui:
- col = split.column()
+ col = split.column()
- if vol.lighting_mode == 'SHADED':
- col.prop(vol, "external_shadows")
- col.prop(vol, "light_cache")
+ if vol.light_method == 'SHADED':
+ col.prop(vol, "use_external_shadows")
+ col.prop(vol, "use_light_cache")
sub = col.column()
- sub.active = vol.light_cache
+ sub.active = vol.use_light_cache
sub.prop(vol, "cache_resolution")
- elif vol.lighting_mode in ('MULTIPLE_SCATTERING', 'SHADED_PLUS_MULTIPLE_SCATTERING'):
+ elif vol.light_method in ('MULTIPLE_SCATTERING', 'SHADED_PLUS_MULTIPLE_SCATTERING'):
sub = col.column()
sub.enabled = True
sub.active = False
- sub.prop(vol, "light_cache")
+ sub.prop(vol, "use_light_cache")
col.prop(vol, "cache_resolution")
sub = col.column(align=True)
@@ -873,7 +833,7 @@ class MATERIAL_PT_volume_lighting(VolumeButtonsPanel):
sub.prop(vol, "ms_intensity")
-class MATERIAL_PT_volume_transp(VolumeButtonsPanel):
+class MATERIAL_PT_volume_transp(VolumeButtonsPanel, bpy.types.Panel):
bl_label = "Transparency"
COMPAT_ENGINES = {'BLENDER_RENDER'}
@@ -881,15 +841,11 @@ class MATERIAL_PT_volume_transp(VolumeButtonsPanel):
layout = self.layout
mat = context.material # dont use node material
- wide_ui = context.region.width > narrowui
- if wide_ui:
- layout.prop(mat, "transparency_method", expand=True)
- else:
- layout.prop(mat, "transparency_method", text="")
+ layout.prop(mat, "transparency_method", expand=True)
-class MATERIAL_PT_volume_integration(VolumeButtonsPanel):
+class MATERIAL_PT_volume_integration(VolumeButtonsPanel, bpy.types.Panel):
bl_label = "Integration"
bl_default_closed = False
COMPAT_ENGINES = {'BLENDER_RENDER'}
@@ -898,23 +854,21 @@ class MATERIAL_PT_volume_integration(VolumeButtonsPanel):
layout = self.layout
vol = context.material.volume # dont use node material
- wide_ui = context.region.width > narrowui
split = layout.split()
col = split.column()
col.label(text="Step Calculation:")
- col.prop(vol, "step_calculation", text="")
+ col.prop(vol, "step_method", text="")
col = col.column(align=True)
col.prop(vol, "step_size")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label()
- col.prop(vol, "depth_cutoff")
+ col.prop(vol, "depth_threshold")
-class MATERIAL_PT_volume_options(VolumeButtonsPanel):
+class MATERIAL_PT_volume_options(VolumeButtonsPanel, bpy.types.Panel):
bl_label = "Options"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
bl_default_closed = True
@@ -923,63 +877,33 @@ class MATERIAL_PT_volume_options(VolumeButtonsPanel):
layout = self.layout
mat = active_node_mat(context.material)
- wide_ui = context.region.width > narrowui
split = layout.split()
col = split.column()
- col.prop(mat, "traceable")
- col.prop(mat, "full_oversampling")
- col.prop(mat, "exclude_mist")
+ col.prop(mat, "use_raytrace")
+ col.prop(mat, "use_full_oversampling")
+ col.prop(mat, "use_mist")
col = split.column()
col.label(text="Light Group:")
col.prop(mat, "light_group", text="")
row = col.row()
row.active = bool(mat.light_group)
- row.prop(mat, "light_group_exclusive", text="Exclusive")
-
-
-classes = [
- MATERIAL_PT_context_material,
- MATERIAL_PT_preview,
- MATERIAL_PT_diffuse,
- MATERIAL_PT_specular,
- MATERIAL_PT_shading,
- MATERIAL_PT_transp,
- MATERIAL_PT_mirror,
- MATERIAL_PT_sss,
- MATERIAL_PT_halo,
- MATERIAL_PT_flare,
- MATERIAL_PT_physics,
- MATERIAL_PT_strand,
- MATERIAL_PT_options,
- MATERIAL_PT_shadow,
- MATERIAL_PT_transp_game,
-
- MATERIAL_MT_sss_presets,
- MATERIAL_MT_specials,
-
- MATERIAL_PT_volume_density,
- MATERIAL_PT_volume_shading,
- MATERIAL_PT_volume_lighting,
- MATERIAL_PT_volume_transp,
- MATERIAL_PT_volume_integration,
- MATERIAL_PT_volume_options,
-
- MATERIAL_PT_custom_props]
+ row.prop(mat, "use_light_group_exclusive", text="Exclusive")
+
+
+class MATERIAL_PT_custom_props(MaterialButtonsPanel, PropertyPanel, bpy.types.Panel):
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ _context_path = "material"
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/properties_object.py b/release/scripts/ui/properties_object.py
index 4e60879d665..a87a43a7998 100644
--- a/release/scripts/ui/properties_object.py
+++ b/release/scripts/ui/properties_object.py
@@ -20,16 +20,14 @@
import bpy
from rna_prop_ui import PropertyPanel
-narrowui = bpy.context.user_preferences.view.properties_width_check
-
-class ObjectButtonsPanel(bpy.types.Panel):
+class ObjectButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "object"
-class OBJECT_PT_context_object(ObjectButtonsPanel):
+class OBJECT_PT_context_object(ObjectButtonsPanel, bpy.types.Panel):
bl_label = ""
bl_show_header = False
@@ -46,51 +44,33 @@ class OBJECT_PT_context_object(ObjectButtonsPanel):
row.prop(ob, "name", text="")
-class OBJECT_PT_custom_props(ObjectButtonsPanel, PropertyPanel):
- _context_path = "object"
-
-
-class OBJECT_PT_transform(ObjectButtonsPanel):
+class OBJECT_PT_transform(ObjectButtonsPanel, bpy.types.Panel):
bl_label = "Transform"
def draw(self, context):
layout = self.layout
ob = context.object
- wide_ui = context.region.width > narrowui
- if wide_ui:
- row = layout.row()
+ row = layout.row()
- row.column().prop(ob, "location")
- if ob.rotation_mode == 'QUATERNION':
- row.column().prop(ob, "rotation_quaternion", text="Rotation")
- elif ob.rotation_mode == 'AXIS_ANGLE':
- #row.column().label(text="Rotation")
- #row.column().prop(pchan, "rotation_angle", text="Angle")
- #row.column().prop(pchan, "rotation_axis", text="Axis")
- row.column().prop(ob, "rotation_axis_angle", text="Rotation")
- else:
- row.column().prop(ob, "rotation_euler", text="Rotation")
+ row.column().prop(ob, "location")
+ if ob.rotation_mode == 'QUATERNION':
+ row.column().prop(ob, "rotation_quaternion", text="Rotation")
+ elif ob.rotation_mode == 'AXIS_ANGLE':
+ #row.column().label(text="Rotation")
+ #row.column().prop(pchan, "rotation_angle", text="Angle")
+ #row.column().prop(pchan, "rotation_axis", text="Axis")
+ row.column().prop(ob, "rotation_axis_angle", text="Rotation")
+ else:
+ row.column().prop(ob, "rotation_euler", text="Rotation")
- row.column().prop(ob, "scale")
+ row.column().prop(ob, "scale")
- layout.prop(ob, "rotation_mode")
- else:
- col = layout.column()
- col.prop(ob, "location")
- col.label(text="Rotation:")
- col.prop(ob, "rotation_mode", text="")
- if ob.rotation_mode == 'QUATERNION':
- col.prop(ob, "rotation_quaternion", text="")
- elif ob.rotation_mode == 'AXIS_ANGLE':
- col.prop(ob, "rotation_axis_angle", text="")
- else:
- col.prop(ob, "rotation_euler", text="")
- col.prop(ob, "scale")
-
-
-class OBJECT_PT_transform_locks(ObjectButtonsPanel):
+ layout.prop(ob, "rotation_mode")
+
+
+class OBJECT_PT_transform_locks(ObjectButtonsPanel, bpy.types.Panel):
bl_label = "Transform Locks"
bl_default_closed = True
@@ -98,7 +78,6 @@ class OBJECT_PT_transform_locks(ObjectButtonsPanel):
layout = self.layout
ob = context.object
- # wide_ui = context.region.width > narrowui
row = layout.row()
@@ -117,14 +96,13 @@ class OBJECT_PT_transform_locks(ObjectButtonsPanel):
row.column().prop(ob, "lock_scale", text="Scale")
-class OBJECT_PT_relations(ObjectButtonsPanel):
+class OBJECT_PT_relations(ObjectButtonsPanel, bpy.types.Panel):
bl_label = "Relations"
def draw(self, context):
layout = self.layout
ob = context.object
- wide_ui = context.region.width > narrowui
split = layout.split()
@@ -133,8 +111,7 @@ class OBJECT_PT_relations(ObjectButtonsPanel):
col.separator()
col.prop(ob, "pass_index")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Parent:")
col.prop(ob, "parent", text="")
@@ -146,14 +123,13 @@ class OBJECT_PT_relations(ObjectButtonsPanel):
sub.active = (parent is not None)
-class OBJECT_PT_groups(ObjectButtonsPanel):
+class OBJECT_PT_groups(ObjectButtonsPanel, bpy.types.Panel):
bl_label = "Groups"
def draw(self, context):
layout = self.layout
ob = context.object
- wide_ui = context.region.width > narrowui
row = layout.row(align=True)
row.operator("object.group_link", text="Add to Group")
@@ -175,10 +151,9 @@ class OBJECT_PT_groups(ObjectButtonsPanel):
split = col.box().split()
col = split.column()
- col.prop(group, "layer", text="Dupli")
+ col.prop(group, "layers", text="Dupli")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(group, "dupli_offset", text="")
prop = col.operator("wm.context_set_value", text="From Cursor")
@@ -187,55 +162,48 @@ class OBJECT_PT_groups(ObjectButtonsPanel):
index += 1
-class OBJECT_PT_display(ObjectButtonsPanel):
+class OBJECT_PT_display(ObjectButtonsPanel, bpy.types.Panel):
bl_label = "Display"
def draw(self, context):
layout = self.layout
ob = context.object
- wide_ui = context.region.width > narrowui
split = layout.split()
col = split.column()
- col.prop(ob, "max_draw_type", text="Type")
+ col.prop(ob, "draw_type", text="Type")
- if wide_ui:
- col = split.column()
+ col = split.column()
row = col.row()
- row.prop(ob, "draw_bounds", text="Bounds")
+ row.prop(ob, "show_bounds", text="Bounds")
sub = row.row()
- sub.active = ob.draw_bounds
+ sub.active = ob.show_bounds
sub.prop(ob, "draw_bounds_type", text="")
split = layout.split()
col = split.column()
- col.prop(ob, "draw_name", text="Name")
- col.prop(ob, "draw_axis", text="Axis")
- col.prop(ob, "draw_wire", text="Wire")
+ col.prop(ob, "show_name", text="Name")
+ col.prop(ob, "show_axis", text="Axis")
+ col.prop(ob, "show_wire", text="Wire")
col.prop(ob, "color", text="Object Color")
- if wide_ui:
- col = split.column()
- col.prop(ob, "draw_texture_space", text="Texture Space")
- col.prop(ob, "x_ray", text="X-Ray")
- col.prop(ob, "draw_transparent", text="Transparency")
+ col = split.column()
+ col.prop(ob, "show_texture_space", text="Texture Space")
+ col.prop(ob, "show_x_ray", text="X-Ray")
+ col.prop(ob, "show_transparent", text="Transparency")
-class OBJECT_PT_duplication(ObjectButtonsPanel):
+class OBJECT_PT_duplication(ObjectButtonsPanel, bpy.types.Panel):
bl_label = "Duplication"
def draw(self, context):
layout = self.layout
ob = context.object
- wide_ui = context.region.width > narrowui
- if wide_ui:
- layout.prop(ob, "dupli_type", expand=True)
- else:
- layout.prop(ob, "dupli_type", text="")
+ layout.prop(ob, "dupli_type", expand=True)
if ob.dupli_type == 'FRAMES':
split = layout.split()
@@ -244,15 +212,14 @@ class OBJECT_PT_duplication(ObjectButtonsPanel):
col.prop(ob, "dupli_frames_start", text="Start")
col.prop(ob, "dupli_frames_end", text="End")
- if wide_ui:
- col = split.column(align=True)
+ col = split.column(align=True)
col.prop(ob, "dupli_frames_on", text="On")
col.prop(ob, "dupli_frames_off", text="Off")
layout.prop(ob, "use_dupli_frames_speed", text="Speed")
elif ob.dupli_type == 'VERTS':
- layout.prop(ob, "use_dupli_verts_rotation", text="Rotation")
+ layout.prop(ob, "use_dupli_vertices_rotation", text="Rotation")
elif ob.dupli_type == 'FACES':
split = layout.split()
@@ -260,20 +227,16 @@ class OBJECT_PT_duplication(ObjectButtonsPanel):
col = split.column()
col.prop(ob, "use_dupli_faces_scale", text="Scale")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(ob, "dupli_faces_scale", text="Inherit Scale")
elif ob.dupli_type == 'GROUP':
- if wide_ui:
- layout.prop(ob, "dupli_group", text="Group")
- else:
- layout.prop(ob, "dupli_group", text="")
+ layout.prop(ob, "dupli_group", text="Group")
-# XXX: the following options are all quite buggy, ancient hacks that should be dropped
+# XXX: the following options are all quite buggy, ancient hacks that should be dropped
-class OBJECT_PT_animation(ObjectButtonsPanel):
+class OBJECT_PT_animation(ObjectButtonsPanel, bpy.types.Panel):
bl_label = "Animation Hacks"
bl_default_closed = True
@@ -281,61 +244,85 @@ class OBJECT_PT_animation(ObjectButtonsPanel):
layout = self.layout
ob = context.object
- wide_ui = context.region.width > narrowui
split = layout.split()
col = split.column()
col.label(text="Time Offset:")
- col.prop(ob, "time_offset_edit", text="Edit")
+ col.prop(ob, "use_time_offset_edit", text="Edit")
row = col.row()
- row.prop(ob, "time_offset_particle", text="Particle")
- row.active = len(ob.particle_systems) != 0
+ row.prop(ob, "use_time_offset_particle", text="Particle")
+ row.active = bool(ob.particle_systems)
row = col.row()
- row.prop(ob, "time_offset_parent", text="Parent")
+ row.prop(ob, "use_time_offset_parent", text="Parent")
row.active = (ob.parent is not None)
row = col.row()
- row.prop(ob, "slow_parent")
+ row.prop(ob, "use_slow_parent")
row.active = (ob.parent is not None)
col.prop(ob, "time_offset", text="Offset")
# XXX: these are still used for a few curve-related tracking features
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Tracking Axes:")
col.prop(ob, "track_axis", text="Axis")
col.prop(ob, "up_axis", text="Up Axis")
+from properties_animviz import MotionPathButtonsPanel, OnionSkinButtonsPanel
+
-# import generic panels from other files
-from properties_animviz import OBJECT_PT_motion_paths, OBJECT_PT_onion_skinning
+class OBJECT_PT_motion_paths(MotionPathButtonsPanel, bpy.types.Panel):
+ #bl_label = "Object Motion Paths"
+ bl_context = "object"
+
+ @classmethod
+ def poll(cls, context):
+ return (context.object)
+
+ def draw(self, context):
+ layout = self.layout
+
+ ob = context.object
-classes = [
- OBJECT_PT_context_object,
- OBJECT_PT_transform,
- OBJECT_PT_transform_locks,
- OBJECT_PT_relations,
- OBJECT_PT_groups,
- OBJECT_PT_display,
- OBJECT_PT_duplication,
- OBJECT_PT_animation, # XXX: panel of old hacks pending to be removed...
+ self.draw_settings(context, ob.animation_visualisation)
- OBJECT_PT_motion_paths,
- #OBJECT_PT_onion_skinning,
+ layout.separator()
+
+ split = layout.split()
+
+ col = split.column()
+ col.operator("object.paths_calculate", text="Calculate Paths")
+
+ col = split.column()
+ col.operator("object.paths_clear", text="Clear Paths")
- OBJECT_PT_custom_props]
+
+class OBJECT_PT_onion_skinning(OnionSkinButtonsPanel): #, bpy.types.Panel): # inherit from panel when ready
+ #bl_label = "Object Onion Skinning"
+ bl_context = "object"
+
+ @classmethod
+ def poll(cls, context):
+ return (context.object)
+
+ def draw(self, context):
+ layout = self.layout
+
+ ob = context.object
+
+ self.draw_settings(context, ob.animation_visualisation)
+
+
+class OBJECT_PT_custom_props(ObjectButtonsPanel, PropertyPanel, bpy.types.Panel):
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ _context_path = "object"
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/properties_object_constraint.py b/release/scripts/ui/properties_object_constraint.py
index 335bd25b501..8a8142a790f 100644
--- a/release/scripts/ui/properties_object_constraint.py
+++ b/release/scripts/ui/properties_object_constraint.py
@@ -19,11 +19,8 @@
# <pep8 compliant>
import bpy
-narrowui = bpy.context.user_preferences.view.properties_width_check
-narrowcon = 260
-
-class ConstraintButtonsPanel(bpy.types.Panel):
+class ConstraintButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "constraint"
@@ -31,52 +28,38 @@ class ConstraintButtonsPanel(bpy.types.Panel):
def draw_constraint(self, context, con):
layout = self.layout
- wide_ui = context.region.width > narrowui
- compact_con = context.region.width < narrowcon
- box = layout.template_constraint(con, compact=compact_con)
+ box = layout.template_constraint(con)
if box:
# match enum type to our functions, avoids a lookup table.
- getattr(self, con.type)(context, box, con, wide_ui)
+ getattr(self, con.type)(context, box, con)
if con.type not in ('RIGID_BODY_JOINT', 'NULL'):
box.prop(con, "influence")
- def space_template(self, layout, con, wide_ui, target=True, owner=True):
+ def space_template(self, layout, con, target=True, owner=True):
if target or owner:
split = layout.split(percentage=0.2)
- if wide_ui:
- split.label(text="Space:")
- row = split.row()
- else:
- row = layout.row()
-
+ split.label(text="Space:")
+ row = split.row()
if target:
row.prop(con, "target_space", text="")
- if wide_ui:
- if target and owner:
- row.label(icon='ARROW_LEFTRIGHT')
- else:
- row = layout.row()
+ if target and owner:
+ row.label(icon='ARROW_LEFTRIGHT')
+
if owner:
row.prop(con, "owner_space", text="")
- def target_template(self, layout, con, wide_ui, subtargets=True):
- if wide_ui:
- layout.prop(con, "target") # XXX limiting settings for only 'curves' or some type of object
- else:
- layout.prop(con, "target", text="")
+ def target_template(self, layout, con, subtargets=True):
+ layout.prop(con, "target") # XXX limiting settings for only 'curves' or some type of object
if con.target and subtargets:
if con.target.type == 'ARMATURE':
- if wide_ui:
- layout.prop_object(con, "subtarget", con.target.data, "bones", text="Bone")
- else:
- layout.prop_object(con, "subtarget", con.target.data, "bones", text="")
+ layout.prop_object(con, "subtarget", con.target.data, "bones", text="Bone")
if con.type in ('COPY_LOCATION', 'STRETCH_TO', 'TRACK_TO', 'PIVOT'):
row = layout.row()
@@ -85,7 +68,7 @@ class ConstraintButtonsPanel(bpy.types.Panel):
elif con.target.type in ('MESH', 'LATTICE'):
layout.prop_object(con, "subtarget", con.target, "vertex_groups", text="Vertex Group")
- def ik_template(self, layout, con, wide_ui):
+ def ik_template(self, layout, con):
# only used for iTaSC
layout.prop(con, "pole_target")
@@ -103,11 +86,11 @@ class ConstraintButtonsPanel(bpy.types.Panel):
col.prop(con, "use_stretch")
col = split.column()
- col.prop(con, "chain_length")
+ col.prop(con, "chain_count")
col.prop(con, "use_target")
- def CHILD_OF(self, context, layout, con, wide_ui):
- self.target_template(layout, con, wide_ui)
+ def CHILD_OF(self, context, layout, con):
+ self.target_template(layout, con)
split = layout.split()
@@ -134,56 +117,47 @@ class ConstraintButtonsPanel(bpy.types.Panel):
col = split.column()
col.operator("constraint.childof_set_inverse")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.operator("constraint.childof_clear_inverse")
- def TRACK_TO(self, context, layout, con, wide_ui):
- self.target_template(layout, con, wide_ui)
+ def TRACK_TO(self, context, layout, con):
+ self.target_template(layout, con)
row = layout.row()
- if wide_ui:
- row.label(text="To:")
- row.prop(con, "track", expand=True)
+ row.label(text="To:")
+ row.prop(con, "track_axis", expand=True)
split = layout.split()
col = split.column()
- col.prop(con, "up", text="Up")
+ col.prop(con, "up_axis", text="Up")
- if wide_ui:
- col = split.column()
- col.prop(con, "target_z")
+ col = split.column()
+ col.prop(con, "use_target_z")
- self.space_template(layout, con, wide_ui)
+ self.space_template(layout, con)
- def IK(self, context, layout, con, wide_ui):
+ def IK(self, context, layout, con):
if context.object.pose.ik_solver == "ITASC":
layout.prop(con, "ik_type")
- getattr(self, 'IK_' + con.ik_type)(context, layout, con, wide_ui)
+ getattr(self, 'IK_' + con.ik_type)(context, layout, con)
else:
# Legacy IK constraint
- self.target_template(layout, con, wide_ui)
- if wide_ui:
- layout.prop(con, "pole_target")
- else:
- layout.prop(con, "pole_target", text="")
+ self.target_template(layout, con)
+ layout.prop(con, "pole_target")
+
if con.pole_target and con.pole_target.type == 'ARMATURE':
- if wide_ui:
- layout.prop_object(con, "pole_subtarget", con.pole_target.data, "bones", text="Bone")
- else:
- layout.prop_object(con, "pole_subtarget", con.pole_target.data, "bones", text="")
+ layout.prop_object(con, "pole_subtarget", con.pole_target.data, "bones", text="Bone")
if con.pole_target:
row = layout.row()
row.prop(con, "pole_angle")
- if wide_ui:
- row.label()
+ row.label()
split = layout.split()
col = split.column()
col.prop(con, "iterations")
- col.prop(con, "chain_length")
+ col.prop(con, "chain_count")
col.label(text="Weight:")
col.prop(con, "weight", text="Position", slider=True)
@@ -191,34 +165,33 @@ class ConstraintButtonsPanel(bpy.types.Panel):
sub.active = con.use_rotation
sub.prop(con, "orient_weight", text="Rotation", slider=True)
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(con, "use_tail")
col.prop(con, "use_stretch")
col.separator()
col.prop(con, "use_target")
col.prop(con, "use_rotation")
- def IK_COPY_POSE(self, context, layout, con, wide_ui):
- self.target_template(layout, con, wide_ui)
- self.ik_template(layout, con, wide_ui)
+ def IK_COPY_POSE(self, context, layout, con):
+ self.target_template(layout, con)
+ self.ik_template(layout, con)
row = layout.row()
row.label(text="Axis Ref:")
- row.prop(con, "axis_reference", expand=True)
+ row.prop(con, "reference_axis", expand=True)
split = layout.split(percentage=0.33)
- split.row().prop(con, "use_position")
+ split.row().prop(con, "use_location")
row = split.row()
row.prop(con, "weight", text="Weight", slider=True)
- row.active = con.use_position
+ row.active = con.use_location
split = layout.split(percentage=0.33)
row = split.row()
row.label(text="Lock:")
row = split.row()
- row.prop(con, "pos_lock_x", text="X")
- row.prop(con, "pos_lock_y", text="Y")
- row.prop(con, "pos_lock_z", text="Z")
- split.active = con.use_position
+ row.prop(con, "lock_location_x", text="X")
+ row.prop(con, "lock_location_y", text="Y")
+ row.prop(con, "lock_location_z", text="Z")
+ split.active = con.use_location
split = layout.split(percentage=0.33)
split.row().prop(con, "use_rotation")
@@ -229,22 +202,22 @@ class ConstraintButtonsPanel(bpy.types.Panel):
row = split.row()
row.label(text="Lock:")
row = split.row()
- row.prop(con, "rot_lock_x", text="X")
- row.prop(con, "rot_lock_y", text="Y")
- row.prop(con, "rot_lock_z", text="Z")
+ row.prop(con, "lock_rotation_x", text="X")
+ row.prop(con, "lock_rotation_y", text="Y")
+ row.prop(con, "lock_rotation_z", text="Z")
split.active = con.use_rotation
- def IK_DISTANCE(self, context, layout, con, wide_ui):
- self.target_template(layout, con, wide_ui)
- self.ik_template(layout, con, wide_ui)
+ def IK_DISTANCE(self, context, layout, con):
+ self.target_template(layout, con)
+ self.ik_template(layout, con)
layout.prop(con, "limit_mode")
row = layout.row()
row.prop(con, "weight", text="Weight", slider=True)
row.prop(con, "distance", text="Distance", slider=True)
- def FOLLOW_PATH(self, context, layout, con, wide_ui):
- self.target_template(layout, con, wide_ui)
+ def FOLLOW_PATH(self, context, layout, con):
+ self.target_template(layout, con)
split = layout.split()
@@ -252,25 +225,22 @@ class ConstraintButtonsPanel(bpy.types.Panel):
col.prop(con, "use_curve_follow")
col.prop(con, "use_curve_radius")
- if wide_ui:
- col = split.column()
- col.prop(con, "use_fixed_position")
- if con.use_fixed_position:
+ col = split.column()
+ col.prop(con, "use_fixed_location")
+ if con.use_fixed_location:
col.prop(con, "offset_factor", text="Offset")
else:
col.prop(con, "offset")
row = layout.row()
- if wide_ui:
- row.label(text="Forward:")
- row.prop(con, "forward", expand=True)
+ row.label(text="Forward:")
+ row.prop(con, "forward_axis", expand=True)
row = layout.row()
- row.prop(con, "up", text="Up")
- if wide_ui:
- row.label()
+ row.prop(con, "up_axis", text="Up")
+ row.label()
- def LIMIT_ROTATION(self, context, layout, con, wide_ui):
+ def LIMIT_ROTATION(self, context, layout, con):
split = layout.split()
@@ -278,127 +248,115 @@ class ConstraintButtonsPanel(bpy.types.Panel):
col.prop(con, "use_limit_x")
sub = col.column()
sub.active = con.use_limit_x
- sub.prop(con, "minimum_x", text="Min")
- sub.prop(con, "maximum_x", text="Max")
+ sub.prop(con, "min_x", text="Min")
+ sub.prop(con, "max_x", text="Max")
- if wide_ui:
- col = split.column(align=True)
+ col = split.column(align=True)
col.prop(con, "use_limit_y")
sub = col.column()
sub.active = con.use_limit_y
- sub.prop(con, "minimum_y", text="Min")
- sub.prop(con, "maximum_y", text="Max")
+ sub.prop(con, "min_y", text="Min")
+ sub.prop(con, "max_y", text="Max")
- if wide_ui:
- col = split.column(align=True)
+ col = split.column(align=True)
col.prop(con, "use_limit_z")
sub = col.column()
sub.active = con.use_limit_z
- sub.prop(con, "minimum_z", text="Min")
- sub.prop(con, "maximum_z", text="Max")
+ sub.prop(con, "min_z", text="Min")
+ sub.prop(con, "max_z", text="Max")
row = layout.row()
- row.prop(con, "limit_transform")
- if wide_ui:
- row.label()
+ row.prop(con, "use_transform_limit")
+ row.label()
row = layout.row()
- if wide_ui:
- row.label(text="Convert:")
+ row.label(text="Convert:")
row.prop(con, "owner_space", text="")
- def LIMIT_LOCATION(self, context, layout, con, wide_ui):
+ def LIMIT_LOCATION(self, context, layout, con):
split = layout.split()
col = split.column()
- col.prop(con, "use_minimum_x")
+ col.prop(con, "use_min_x")
sub = col.column()
- sub.active = con.use_minimum_x
- sub.prop(con, "minimum_x", text="")
- col.prop(con, "use_maximum_x")
+ sub.active = con.use_min_x
+ sub.prop(con, "min_x", text="")
+ col.prop(con, "use_max_x")
sub = col.column()
- sub.active = con.use_maximum_x
- sub.prop(con, "maximum_x", text="")
+ sub.active = con.use_max_x
+ sub.prop(con, "max_x", text="")
- if wide_ui:
- col = split.column()
- col.prop(con, "use_minimum_y")
+ col = split.column()
+ col.prop(con, "use_min_y")
sub = col.column()
- sub.active = con.use_minimum_y
- sub.prop(con, "minimum_y", text="")
- col.prop(con, "use_maximum_y")
+ sub.active = con.use_min_y
+ sub.prop(con, "min_y", text="")
+ col.prop(con, "use_max_y")
sub = col.column()
- sub.active = con.use_maximum_y
- sub.prop(con, "maximum_y", text="")
+ sub.active = con.use_max_y
+ sub.prop(con, "max_y", text="")
- if wide_ui:
- col = split.column()
- col.prop(con, "use_minimum_z")
+ col = split.column()
+ col.prop(con, "use_min_z")
sub = col.column()
- sub.active = con.use_minimum_z
- sub.prop(con, "minimum_z", text="")
- col.prop(con, "use_maximum_z")
+ sub.active = con.use_min_z
+ sub.prop(con, "min_z", text="")
+ col.prop(con, "use_max_z")
sub = col.column()
- sub.active = con.use_maximum_z
- sub.prop(con, "maximum_z", text="")
+ sub.active = con.use_max_z
+ sub.prop(con, "max_z", text="")
row = layout.row()
- row.prop(con, "limit_transform")
- if wide_ui:
- row.label()
+ row.prop(con, "use_transform_limit")
+ row.label()
row = layout.row()
- if wide_ui:
- row.label(text="Convert:")
+ row.label(text="Convert:")
row.prop(con, "owner_space", text="")
- def LIMIT_SCALE(self, context, layout, con, wide_ui):
+ def LIMIT_SCALE(self, context, layout, con):
split = layout.split()
col = split.column()
- col.prop(con, "use_minimum_x")
+ col.prop(con, "use_min_x")
sub = col.column()
- sub.active = con.use_minimum_x
- sub.prop(con, "minimum_x", text="")
- col.prop(con, "use_maximum_x")
+ sub.active = con.use_min_x
+ sub.prop(con, "min_x", text="")
+ col.prop(con, "use_max_x")
sub = col.column()
- sub.active = con.use_maximum_x
- sub.prop(con, "maximum_x", text="")
+ sub.active = con.use_max_x
+ sub.prop(con, "max_x", text="")
- if wide_ui:
- col = split.column()
- col.prop(con, "use_minimum_y")
+ col = split.column()
+ col.prop(con, "use_min_y")
sub = col.column()
- sub.active = con.use_minimum_y
- sub.prop(con, "minimum_y", text="")
- col.prop(con, "use_maximum_y")
+ sub.active = con.use_min_y
+ sub.prop(con, "min_y", text="")
+ col.prop(con, "use_max_y")
sub = col.column()
- sub.active = con.use_maximum_y
- sub.prop(con, "maximum_y", text="")
+ sub.active = con.use_max_y
+ sub.prop(con, "max_y", text="")
- if wide_ui:
- col = split.column()
- col.prop(con, "use_minimum_z")
+ col = split.column()
+ col.prop(con, "use_min_z")
sub = col.column()
- sub.active = con.use_minimum_z
- sub.prop(con, "minimum_z", text="")
- col.prop(con, "use_maximum_z")
+ sub.active = con.use_min_z
+ sub.prop(con, "min_z", text="")
+ col.prop(con, "use_max_z")
sub = col.column()
- sub.active = con.use_maximum_z
- sub.prop(con, "maximum_z", text="")
+ sub.active = con.use_max_z
+ sub.prop(con, "max_z", text="")
row = layout.row()
- row.prop(con, "limit_transform")
- if wide_ui:
- row.label()
+ row.prop(con, "use_transform_limit")
+ row.label()
row = layout.row()
- if wide_ui:
- row.label(text="Convert:")
+ row.label(text="Convert:")
row.prop(con, "owner_space", text="")
- def COPY_ROTATION(self, context, layout, con, wide_ui):
- self.target_template(layout, con, wide_ui)
+ def COPY_ROTATION(self, context, layout, con):
+ self.target_template(layout, con)
split = layout.split()
@@ -422,10 +380,10 @@ class ConstraintButtonsPanel(bpy.types.Panel):
layout.prop(con, "use_offset")
- self.space_template(layout, con, wide_ui)
+ self.space_template(layout, con)
- def COPY_LOCATION(self, context, layout, con, wide_ui):
- self.target_template(layout, con, wide_ui)
+ def COPY_LOCATION(self, context, layout, con):
+ self.target_template(layout, con)
split = layout.split()
@@ -449,10 +407,10 @@ class ConstraintButtonsPanel(bpy.types.Panel):
layout.prop(con, "use_offset")
- self.space_template(layout, con, wide_ui)
+ self.space_template(layout, con)
- def COPY_SCALE(self, context, layout, con, wide_ui):
- self.target_template(layout, con, wide_ui)
+ def COPY_SCALE(self, context, layout, con):
+ self.target_template(layout, con)
row = layout.row(align=True)
row.prop(con, "use_x", text="X")
@@ -461,38 +419,31 @@ class ConstraintButtonsPanel(bpy.types.Panel):
layout.prop(con, "use_offset")
- self.space_template(layout, con, wide_ui)
+ self.space_template(layout, con)
- def MAINTAIN_VOLUME(self, context, layout, con, wide_ui):
+ def MAINTAIN_VOLUME(self, context, layout, con):
row = layout.row()
- if wide_ui:
- row.label(text="Free:")
- row.prop(con, "axis", expand=True)
+ row.label(text="Free:")
+ row.prop(con, "free_axis", expand=True)
layout.prop(con, "volume")
- self.space_template(layout, con, wide_ui)
+ self.space_template(layout, con)
- def COPY_TRANSFORMS(self, context, layout, con, wide_ui):
- self.target_template(layout, con, wide_ui)
+ def COPY_TRANSFORMS(self, context, layout, con):
+ self.target_template(layout, con)
- self.space_template(layout, con, wide_ui)
+ self.space_template(layout, con)
#def SCRIPT(self, context, layout, con):
- def ACTION(self, context, layout, con, wide_ui):
- self.target_template(layout, con, wide_ui)
+ def ACTION(self, context, layout, con):
+ self.target_template(layout, con)
- if wide_ui:
- layout.prop(con, "action")
- else:
- layout.prop(con, "action", text="")
+ layout.prop(con, "action")
- if wide_ui:
- layout.prop(con, "transform_channel")
- else:
- layout.prop(con, "transform_channel", text="")
+ layout.prop(con, "transform_channel")
split = layout.split()
@@ -501,32 +452,28 @@ class ConstraintButtonsPanel(bpy.types.Panel):
col.prop(con, "frame_start", text="Start")
col.prop(con, "frame_end", text="End")
- if wide_ui:
- col = split.column(align=True)
+ col = split.column(align=True)
col.label(text="Target Range:")
- col.prop(con, "minimum", text="Min")
- col.prop(con, "maximum", text="Max")
+ col.prop(con, "min", text="Min")
+ col.prop(con, "max", text="Max")
row = layout.row()
- if wide_ui:
- row.label(text="Convert:")
+ row.label(text="Convert:")
row.prop(con, "target_space", text="")
- def LOCKED_TRACK(self, context, layout, con, wide_ui):
- self.target_template(layout, con, wide_ui)
+ def LOCKED_TRACK(self, context, layout, con):
+ self.target_template(layout, con)
row = layout.row()
- if wide_ui:
- row.label(text="To:")
- row.prop(con, "track", expand=True)
+ row.label(text="To:")
+ row.prop(con, "track_axis", expand=True)
row = layout.row()
- if wide_ui:
- row.label(text="Lock:")
- row.prop(con, "locked", expand=True)
+ row.label(text="Lock:")
+ row.prop(con, "lock_axis", expand=True)
- def LIMIT_DISTANCE(self, context, layout, con, wide_ui):
- self.target_template(layout, con, wide_ui)
+ def LIMIT_DISTANCE(self, context, layout, con):
+ self.target_template(layout, con)
col = layout.column(align=True)
col.prop(con, "distance")
@@ -536,71 +483,59 @@ class ConstraintButtonsPanel(bpy.types.Panel):
row.label(text="Clamp Region:")
row.prop(con, "limit_mode", text="")
- def STRETCH_TO(self, context, layout, con, wide_ui):
- self.target_template(layout, con, wide_ui)
+ def STRETCH_TO(self, context, layout, con):
+ self.target_template(layout, con)
split = layout.split()
col = split.column()
- col.prop(con, "original_length", text="Rest Length")
+ col.prop(con, "rest_length", text="Rest Length")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.operator("constraint.stretchto_reset", text="Reset")
col = layout.column()
col.prop(con, "bulge", text="Volume Variation")
row = layout.row()
- if wide_ui:
- row.label(text="Volume:")
+ row.label(text="Volume:")
row.prop(con, "volume", expand=True)
- if not wide_ui:
- row = layout.row()
+
row.label(text="Plane:")
row.prop(con, "keep_axis", expand=True)
- def FLOOR(self, context, layout, con, wide_ui):
- self.target_template(layout, con, wide_ui)
+ def FLOOR(self, context, layout, con):
+ self.target_template(layout, con)
split = layout.split()
col = split.column()
- col.prop(con, "sticky")
+ col.prop(con, "use_sticky")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(con, "use_rotation")
layout.prop(con, "offset")
row = layout.row()
- if wide_ui:
- row.label(text="Min/Max:")
+ row.label(text="Min/Max:")
row.prop(con, "floor_location", expand=True)
- self.space_template(layout, con, wide_ui)
+ self.space_template(layout, con)
- def RIGID_BODY_JOINT(self, context, layout, con, wide_ui):
- self.target_template(layout, con, wide_ui)
+ def RIGID_BODY_JOINT(self, context, layout, con):
+ self.target_template(layout, con, subtargets=False)
- if wide_ui:
- layout.prop(con, "pivot_type")
- else:
- layout.prop(con, "pivot_type", text="")
- if wide_ui:
- layout.prop(con, "child")
- else:
- layout.prop(con, "child", text="")
+ layout.prop(con, "pivot_type")
+ layout.prop(con, "child")
split = layout.split()
col = split.column()
- col.prop(con, "disable_linked_collision", text="No Collision")
+ col.prop(con, "use_linked_collision", text="Linked Collision")
- if wide_ui:
- col = split.column()
- col.prop(con, "draw_pivot", text="Display Pivot")
+ col = split.column()
+ col.prop(con, "show_pivot", text="Display Pivot")
split = layout.split()
@@ -610,8 +545,7 @@ class ConstraintButtonsPanel(bpy.types.Panel):
col.prop(con, "pivot_y", text="Y")
col.prop(con, "pivot_z", text="Z")
- if wide_ui:
- col = split.column(align=True)
+ col = split.column(align=True)
col.label(text="Axis:")
col.prop(con, "axis_x", text="X")
col.prop(con, "axis_y", text="Y")
@@ -619,21 +553,20 @@ class ConstraintButtonsPanel(bpy.types.Panel):
#Missing: Limit arrays (not wrapped in RNA yet)
- def CLAMP_TO(self, context, layout, con, wide_ui):
- self.target_template(layout, con, wide_ui)
+ def CLAMP_TO(self, context, layout, con):
+ self.target_template(layout, con)
row = layout.row()
- if wide_ui:
- row.label(text="Main Axis:")
+ row.label(text="Main Axis:")
row.prop(con, "main_axis", expand=True)
row = layout.row()
- row.prop(con, "cyclic")
+ row.prop(con, "use_cyclic")
- def TRANSFORM(self, context, layout, con, wide_ui):
- self.target_template(layout, con, wide_ui)
+ def TRANSFORM(self, context, layout, con):
+ self.target_template(layout, con)
- layout.prop(con, "extrapolate_motion", text="Extrapolate")
+ layout.prop(con, "use_motion_extrapolate", text="Extrapolate")
col = layout.column()
col.row().label(text="Source:")
@@ -646,14 +579,12 @@ class ConstraintButtonsPanel(bpy.types.Panel):
sub.prop(con, "from_min_x", text="Min")
sub.prop(con, "from_max_x", text="Max")
- if wide_ui:
- sub = split.column(align=True)
+ sub = split.column(align=True)
sub.label(text="Y:")
sub.prop(con, "from_min_y", text="Min")
sub.prop(con, "from_max_y", text="Max")
- if wide_ui:
- sub = split.column(align=True)
+ sub = split.column(align=True)
sub.label(text="Z:")
sub.prop(con, "from_min_z", text="Min")
sub.prop(con, "from_max_z", text="Max")
@@ -674,8 +605,7 @@ class ConstraintButtonsPanel(bpy.types.Panel):
sub.prop(con, "to_min_x", text="Min")
sub.prop(con, "to_max_x", text="Max")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Y:")
col.row().prop(con, "map_to_y_from", expand=True)
@@ -683,8 +613,7 @@ class ConstraintButtonsPanel(bpy.types.Panel):
sub.prop(con, "to_min_y", text="Min")
sub.prop(con, "to_max_y", text="Max")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Z:")
col.row().prop(con, "map_to_z_from", expand=True)
@@ -692,10 +621,10 @@ class ConstraintButtonsPanel(bpy.types.Panel):
sub.prop(con, "to_min_z", text="Min")
sub.prop(con, "to_max_z", text="Max")
- self.space_template(layout, con, wide_ui)
+ self.space_template(layout, con)
- def SHRINKWRAP(self, context, layout, con, wide_ui):
- self.target_template(layout, con, wide_ui)
+ def SHRINKWRAP(self, context, layout, con):
+ self.target_template(layout, con)
layout.prop(con, "distance")
layout.prop(con, "shrinkwrap_type")
@@ -706,55 +635,55 @@ class ConstraintButtonsPanel(bpy.types.Panel):
row.prop(con, "use_y")
row.prop(con, "use_z")
- def DAMPED_TRACK(self, context, layout, con, wide_ui):
- self.target_template(layout, con, wide_ui)
+ def DAMPED_TRACK(self, context, layout, con):
+ self.target_template(layout, con)
row = layout.row()
- if wide_ui:
- row.label(text="To:")
- row.prop(con, "track", expand=True)
+ row.label(text="To:")
+ row.prop(con, "track_axis", expand=True)
- def SPLINE_IK(self, context, layout, con, wide_ui):
- self.target_template(layout, con, wide_ui)
+ def SPLINE_IK(self, context, layout, con):
+ self.target_template(layout, con)
col = layout.column()
col.label(text="Spline Fitting:")
- col.prop(con, "chain_length")
- col.prop(con, "even_divisions")
- col.prop(con, "chain_offset")
+ col.prop(con, "chain_count")
+ col.prop(con, "use_even_divisions")
+ col.prop(con, "use_chain_offset")
col = layout.column()
col.label(text="Chain Scaling:")
- col.prop(con, "y_stretch")
- if wide_ui:
- col.prop(con, "xz_scaling_mode")
- else:
- col.prop(con, "xz_scaling_mode", text="")
+ col.prop(con, "use_y_stretch")
+ col.prop(con, "xz_scale_mode")
col.prop(con, "use_curve_radius")
- def PIVOT(self, context, layout, con, wide_ui):
- self.target_template(layout, con, wide_ui)
+ def PIVOT(self, context, layout, con):
+ self.target_template(layout, con)
if con.target:
col = layout.column()
col.prop(con, "offset", text="Pivot Offset")
else:
col = layout.column()
- col.prop(con, "use_relative_position")
- if con.use_relative_position:
+ col.prop(con, "use_relative_location")
+ if con.use_relative_location:
col.prop(con, "offset", text="Relative Pivot Point")
else:
col.prop(con, "offset", text="Absolute Pivot Point")
col = layout.column()
- col.prop(con, "enabled_rotation_range", text="Pivot When")
+ col.prop(con, "rotation_range", text="Pivot When")
+ def SCRIPT(self, context, layout, con):
+ layout.label("blender 2.5 has no py-constraints")
-class OBJECT_PT_constraints(ConstraintButtonsPanel):
+
+class OBJECT_PT_constraints(ConstraintButtonsPanel, bpy.types.Panel):
bl_label = "Object Constraints"
bl_context = "constraint"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return (context.object)
def draw(self, context):
@@ -768,11 +697,12 @@ class OBJECT_PT_constraints(ConstraintButtonsPanel):
self.draw_constraint(context, con)
-class BONE_PT_constraints(ConstraintButtonsPanel):
+class BONE_PT_constraints(ConstraintButtonsPanel, bpy.types.Panel):
bl_label = "Bone Constraints"
bl_context = "bone_constraint"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return (context.pose_bone)
def draw(self, context):
@@ -784,21 +714,12 @@ class BONE_PT_constraints(ConstraintButtonsPanel):
self.draw_constraint(context, con)
-classes = [
- OBJECT_PT_constraints,
- BONE_PT_constraints]
-
-
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/properties_particle.py b/release/scripts/ui/properties_particle.py
index 58e602dd1e2..27d02ac97cd 100644
--- a/release/scripts/ui/properties_particle.py
+++ b/release/scripts/ui/properties_particle.py
@@ -25,40 +25,40 @@ from properties_physics_common import effector_weights_ui
from properties_physics_common import basic_force_field_settings_ui
from properties_physics_common import basic_force_field_falloff_ui
-narrowui = bpy.context.user_preferences.view.properties_width_check
-
def particle_panel_enabled(context, psys):
- return (psys.point_cache.baked is False) and (not psys.edited) and (not context.particle_system_editable)
+ return (psys.point_cache.is_baked is False) and (not psys.is_edited) and (not context.particle_system_editable)
-def particle_panel_poll(panel, context):
+def particle_panel_poll(cls, context):
psys = context.particle_system
engine = context.scene.render.engine
if psys is None:
return False
if psys.settings is None:
return False
- return psys.settings.type in ('EMITTER', 'REACTOR', 'HAIR') and (engine in panel.COMPAT_ENGINES)
+ return psys.settings.type in ('EMITTER', 'REACTOR', 'HAIR') and (engine in cls.COMPAT_ENGINES)
-class ParticleButtonsPanel(bpy.types.Panel):
+class ParticleButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "particle"
- def poll(self, context):
- return particle_panel_poll(self, context)
+ @classmethod
+ def poll(cls, context):
+ return particle_panel_poll(cls, context)
-class PARTICLE_PT_context_particles(ParticleButtonsPanel):
+class PARTICLE_PT_context_particles(ParticleButtonsPanel, bpy.types.Panel):
bl_label = ""
bl_show_header = False
COMPAT_ENGINES = {'BLENDER_RENDER'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
engine = context.scene.render.engine
- return (context.particle_system or context.object) and (engine in self.COMPAT_ENGINES)
+ return (context.particle_system or context.object) and (engine in cls.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
@@ -116,15 +116,15 @@ class PARTICLE_PT_context_particles(ParticleButtonsPanel):
split = layout.split(percentage=0.65)
if part.type == 'HAIR':
- if psys.edited:
+ if psys.is_edited:
split.operator("particle.edited_clear", text="Free Edit")
else:
split.label(text="")
row = split.row()
row.enabled = particle_panel_enabled(context, psys)
row.prop(part, "hair_step")
- if psys.edited:
- if psys.global_hair:
+ if psys.is_edited:
+ if psys.is_global_hair:
layout.operator("particle.connect_hair")
layout.label(text="Hair is disconnected.")
else:
@@ -136,18 +136,14 @@ class PARTICLE_PT_context_particles(ParticleButtonsPanel):
split.prop(psys, "reactor_target_particle_system", text="Particle System")
-class PARTICLE_PT_custom_props(ParticleButtonsPanel, PropertyPanel):
- COMPAT_ENGINES = {'BLENDER_RENDER'}
- _context_path = "particle_system.settings"
-
-
-class PARTICLE_PT_emission(ParticleButtonsPanel):
+class PARTICLE_PT_emission(ParticleButtonsPanel, bpy.types.Panel):
bl_label = "Emission"
COMPAT_ENGINES = {'BLENDER_RENDER'}
- def poll(self, context):
- if particle_panel_poll(self, context):
- return not context.particle_system.point_cache.external
+ @classmethod
+ def poll(cls, context):
+ if particle_panel_poll(PARTICLE_PT_emission, context):
+ return not context.particle_system.point_cache.use_external
else:
return False
@@ -156,13 +152,12 @@ class PARTICLE_PT_emission(ParticleButtonsPanel):
psys = context.particle_system
part = psys.settings
- wide_ui = context.region.width > narrowui
- layout.enabled = particle_panel_enabled(context, psys) and not psys.multiple_caches
+ layout.enabled = particle_panel_enabled(context, psys) and not psys.has_multiple_caches
row = layout.row()
row.active = part.distribution != 'GRID'
- row.prop(part, "amount")
+ row.prop(part, "count")
if part.type != 'HAIR':
split = layout.split()
@@ -173,26 +168,22 @@ class PARTICLE_PT_emission(ParticleButtonsPanel):
col = split.column(align=True)
col.prop(part, "lifetime")
- col.prop(part, "random_lifetime", slider=True)
+ col.prop(part, "lifetime_random", slider=True)
layout.row().label(text="Emit From:")
row = layout.row()
- if wide_ui:
- row.prop(part, "emit_from", expand=True)
- else:
- row.prop(part, "emit_from", text="")
+ row.prop(part, "emit_from", expand=True)
+
row = layout.row()
- row.prop(part, "trand")
+ row.prop(part, "use_emit_random")
if part.distribution != 'GRID':
- row.prop(part, "even_distribution")
+ row.prop(part, "use_even_distribution")
if part.emit_from == 'FACE' or part.emit_from == 'VOLUME':
row = layout.row()
- if wide_ui:
- row.prop(part, "distribution", expand=True)
- else:
- row.prop(part, "distribution", text="")
+
+ row.prop(part, "distribution", expand=True)
row = layout.row()
@@ -203,27 +194,28 @@ class PARTICLE_PT_emission(ParticleButtonsPanel):
row.prop(part, "grid_resolution")
-class PARTICLE_PT_hair_dynamics(ParticleButtonsPanel):
+class PARTICLE_PT_hair_dynamics(ParticleButtonsPanel, bpy.types.Panel):
bl_label = "Hair dynamics"
bl_default_closed = True
COMPAT_ENGINES = {'BLENDER_RENDER'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
psys = context.particle_system
engine = context.scene.render.engine
if psys is None:
return False
if psys.settings is None:
return False
- return psys.settings.type == 'HAIR' and (engine in self.COMPAT_ENGINES)
+ return psys.settings.type == 'HAIR' and (engine in cls.COMPAT_ENGINES)
def draw_header(self, context):
#cloth = context.cloth.collision_settings
#self.layout.active = cloth_panel_enabled(context.cloth)
- #self.layout.prop(cloth, "enable_collision", text="")
+ #self.layout.prop(cloth, "use_collision", text="")
psys = context.particle_system
- self.layout.prop(psys, "hair_dynamics", text="")
+ self.layout.prop(psys, "use_hair_dynamics", text="")
def draw(self, context):
layout = self.layout
@@ -236,7 +228,7 @@ class PARTICLE_PT_hair_dynamics(ParticleButtonsPanel):
#part = psys.settings
cloth = psys.cloth.settings
- layout.enabled = psys.hair_dynamics
+ layout.enabled = psys.use_hair_dynamics
split = layout.split()
@@ -260,12 +252,13 @@ class PARTICLE_PT_hair_dynamics(ParticleButtonsPanel):
col.prop(cloth, "quality", text="Steps", slider=True)
-class PARTICLE_PT_cache(ParticleButtonsPanel):
+class PARTICLE_PT_cache(ParticleButtonsPanel, bpy.types.Panel):
bl_label = "Cache"
bl_default_closed = True
COMPAT_ENGINES = {'BLENDER_RENDER'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
psys = context.particle_system
engine = context.scene.render.engine
if psys is None:
@@ -275,22 +268,23 @@ class PARTICLE_PT_cache(ParticleButtonsPanel):
phystype = psys.settings.physics_type
if phystype == 'NO' or phystype == 'KEYED':
return False
- return (psys.settings.type in ('EMITTER', 'REACTOR') or (psys.settings.type == 'HAIR' and psys.hair_dynamics)) and engine in self.COMPAT_ENGINES
+ return (psys.settings.type in ('EMITTER', 'REACTOR') or (psys.settings.type == 'HAIR' and psys.use_hair_dynamics)) and engine in cls.COMPAT_ENGINES
def draw(self, context):
psys = context.particle_system
- point_cache_ui(self, context, psys.point_cache, True, 'HAIR' if psys.hair_dynamics else 'PSYS')
+ point_cache_ui(self, context, psys.point_cache, True, 'HAIR' if psys.use_hair_dynamics else 'PSYS')
-class PARTICLE_PT_velocity(ParticleButtonsPanel):
+class PARTICLE_PT_velocity(ParticleButtonsPanel, bpy.types.Panel):
bl_label = "Velocity"
COMPAT_ENGINES = {'BLENDER_RENDER'}
- def poll(self, context):
- if particle_panel_poll(self, context):
+ @classmethod
+ def poll(cls, context):
+ if particle_panel_poll(PARTICLE_PT_velocity, context):
psys = context.particle_system
- return psys.settings.physics_type != 'BOIDS' and not psys.point_cache.external
+ return psys.settings.physics_type != 'BOIDS' and not psys.point_cache.use_external
else:
return False
@@ -313,7 +307,7 @@ class PARTICLE_PT_velocity(ParticleButtonsPanel):
sub = split.column()
sub.label(text="Emitter Object")
- sub.prop(part, "object_aligned_factor", text="")
+ sub.prop(part, "object_align_factor", text="")
layout.row().label(text="Other:")
split = layout.split()
@@ -323,21 +317,22 @@ class PARTICLE_PT_velocity(ParticleButtonsPanel):
else:
sub.prop(part, "object_factor", slider=True)
sub = split.column()
- sub.prop(part, "random_factor")
+ sub.prop(part, "factor_random")
#if part.type=='REACTOR':
# sub.prop(part, "reactor_factor")
# sub.prop(part, "reaction_shape", slider=True)
-class PARTICLE_PT_rotation(ParticleButtonsPanel):
+class PARTICLE_PT_rotation(ParticleButtonsPanel, bpy.types.Panel):
bl_label = "Rotation"
COMPAT_ENGINES = {'BLENDER_RENDER'}
- def poll(self, context):
- if particle_panel_poll(self, context):
+ @classmethod
+ def poll(cls, context):
+ if particle_panel_poll(PARTICLE_PT_rotation, context):
psys = context.particle_system
- return psys.settings.physics_type != 'BOIDS' and not psys.point_cache.external
+ return psys.settings.physics_type != 'BOIDS' and not psys.point_cache.use_external
else:
return False
@@ -346,28 +341,24 @@ class PARTICLE_PT_rotation(ParticleButtonsPanel):
psys = context.particle_system
part = psys.settings
- wide_ui = context.region.width > narrowui
layout.enabled = particle_panel_enabled(context, psys)
split = layout.split()
split.label(text="Initial Rotation:")
- split.prop(part, "rotation_dynamic")
+ split.prop(part, "use_dynamic_rotation")
split = layout.split()
sub = split.column(align=True)
sub.prop(part, "rotation_mode", text="")
- sub.prop(part, "random_rotation_factor", slider=True, text="Random")
+ sub.prop(part, "rotation_factor_random", slider=True, text="Random")
sub = split.column(align=True)
sub.prop(part, "phase_factor", slider=True)
- sub.prop(part, "random_phase_factor", text="Random", slider=True)
+ sub.prop(part, "phase_factor_random", text="Random", slider=True)
layout.row().label(text="Angular Velocity:")
- if wide_ui:
- layout.row().prop(part, "angular_velocity_mode", expand=True)
- else:
- layout.row().prop(part, "angular_velocity_mode", text="")
+ layout.row().prop(part, "angular_velocity_mode", expand=True)
split = layout.split()
sub = split.column()
@@ -376,13 +367,14 @@ class PARTICLE_PT_rotation(ParticleButtonsPanel):
sub.prop(part, "angular_velocity_factor", text="")
-class PARTICLE_PT_physics(ParticleButtonsPanel):
+class PARTICLE_PT_physics(ParticleButtonsPanel, bpy.types.Panel):
bl_label = "Physics"
COMPAT_ENGINES = {'BLENDER_RENDER'}
- def poll(self, context):
- if particle_panel_poll(self, context):
- return not context.particle_system.point_cache.external
+ @classmethod
+ def poll(cls, context):
+ if particle_panel_poll(PARTICLE_PT_physics, context):
+ return not context.particle_system.point_cache.use_external
else:
return False
@@ -391,24 +383,21 @@ class PARTICLE_PT_physics(ParticleButtonsPanel):
psys = context.particle_system
part = psys.settings
- wide_ui = context.region.width > narrowui
layout.enabled = particle_panel_enabled(context, psys)
row = layout.row()
- if wide_ui:
- row.prop(part, "physics_type", expand=True)
- else:
- row.prop(part, "physics_type", text="")
+ row.prop(part, "physics_type", expand=True)
+
+ row = layout.row()
+ col = row.column(align=True)
+ col.prop(part, "particle_size")
+ col.prop(part, "size_random", slider=True)
if part.physics_type != 'NO':
- row = layout.row()
- col = row.column(align=True)
- col.prop(part, "particle_size")
- col.prop(part, "random_size", slider=True)
col = row.column(align=True)
col.prop(part, "mass")
- col.prop(part, "sizemass", text="Multiply mass with size")
+ col.prop(part, "use_multiply_size_mass", text="Multiply mass with size")
if part.physics_type == 'NEWTON':
split = layout.split()
@@ -417,15 +406,15 @@ class PARTICLE_PT_physics(ParticleButtonsPanel):
sub.label(text="Forces:")
sub.prop(part, "brownian_factor")
sub.prop(part, "drag_factor", slider=True)
- sub.prop(part, "damp_factor", slider=True)
+ sub.prop(part, "damping", slider=True)
sub = split.column()
sub.label(text="Integration:")
sub.prop(part, "integrator", text="")
sub.prop(part, "time_tweak")
sub.prop(part, "subframes")
sub = layout.row()
- sub.prop(part, "size_deflect")
- sub.prop(part, "die_on_collision")
+ sub.prop(part, "use_size_deflect")
+ sub.prop(part, "use_die_on_collision")
elif part.physics_type == 'FLUID':
fluid = part.fluid
@@ -435,22 +424,22 @@ class PARTICLE_PT_physics(ParticleButtonsPanel):
sub.label(text="Forces:")
sub.prop(part, "brownian_factor")
sub.prop(part, "drag_factor", slider=True)
- sub.prop(part, "damp_factor", slider=True)
+ sub.prop(part, "damping", slider=True)
sub = split.column()
sub.label(text="Integration:")
sub.prop(part, "integrator", text="")
sub.prop(part, "time_tweak")
sub.prop(part, "subframes")
sub = layout.row()
- sub.prop(part, "size_deflect")
- sub.prop(part, "die_on_collision")
+ sub.prop(part, "use_size_deflect")
+ sub.prop(part, "use_die_on_collision")
split = layout.split()
sub = split.column()
sub.label(text="Fluid Interaction:")
sub.prop(fluid, "fluid_radius", slider=True)
- sub.prop(fluid, "stiffness_k")
- sub.prop(fluid, "stiffness_knear")
+ sub.prop(fluid, "stiffness")
+ sub.prop(fluid, "stiffness_near")
sub.prop(fluid, "rest_density")
sub.label(text="Viscosity:")
@@ -460,7 +449,7 @@ class PARTICLE_PT_physics(ParticleButtonsPanel):
sub = split.column()
sub.label(text="Springs:")
- sub.prop(fluid, "spring_k", text="Force", slider=True)
+ sub.prop(fluid, "spring_force", text="Force", slider=True)
sub.prop(fluid, "rest_length", slider=True)
layout.label(text="Multiple fluids interactions:")
@@ -473,9 +462,9 @@ class PARTICLE_PT_physics(ParticleButtonsPanel):
row = layout.row()
col = row.column()
- col.active = not psys.keyed_timing
+ col.active = not psys.use_keyed_timing
col.prop(part, "keyed_loops", text="Loops")
- row.prop(psys, "keyed_timing", text="Use Timing")
+ row.prop(psys, "use_keyed_timing", text="Use Timing")
layout.label(text="Keys:")
elif part.physics_type == 'BOIDS':
@@ -483,31 +472,31 @@ class PARTICLE_PT_physics(ParticleButtonsPanel):
row = layout.row()
- row.prop(boids, "allow_flight")
- row.prop(boids, "allow_land")
- row.prop(boids, "allow_climb")
+ row.prop(boids, "use_flight")
+ row.prop(boids, "use_land")
+ row.prop(boids, "use_climb")
split = layout.split()
sub = split.column()
col = sub.column(align=True)
- col.active = boids.allow_flight
- col.prop(boids, "air_max_speed")
- col.prop(boids, "air_min_speed", slider=True)
- col.prop(boids, "air_max_acc", slider=True)
- col.prop(boids, "air_max_ave", slider=True)
+ col.active = boids.use_flight
+ col.prop(boids, "air_speed_max")
+ col.prop(boids, "air_speed_min", slider=True)
+ col.prop(boids, "air_acc_max", slider=True)
+ col.prop(boids, "air_ave_max", slider=True)
col.prop(boids, "air_personal_space")
row = col.row()
- row.active = (boids.allow_land or boids.allow_climb) and boids.allow_flight
- row.prop(boids, "landing_smoothness")
+ row.active = (boids.use_land or boids.allow_climb) and boids.allow_flight
+ row.prop(boids, "land_smooth")
sub = split.column()
col = sub.column(align=True)
- col.active = boids.allow_land or boids.allow_climb
- col.prop(boids, "land_max_speed")
+ col.active = boids.use_land or boids.allow_climb
+ col.prop(boids, "land_speed_max")
col.prop(boids, "land_jump_speed")
- col.prop(boids, "land_max_acc", slider=True)
- col.prop(boids, "land_max_ave", slider=True)
+ col.prop(boids, "land_acc_max", slider=True)
+ col.prop(boids, "land_ave_max", slider=True)
col.prop(boids, "land_personal_space")
col.prop(boids, "land_stick_force")
@@ -523,7 +512,7 @@ class PARTICLE_PT_physics(ParticleButtonsPanel):
col = row.column()
col.label(text="Misc:")
- col.prop(boids, "banking", slider=True)
+ col.prop(boids, "bank", slider=True)
col.prop(boids, "height", slider=True)
if part.physics_type == 'KEYED' or part.physics_type == 'BOIDS' or part.physics_type == 'FLUID':
@@ -553,7 +542,7 @@ class PARTICLE_PT_physics(ParticleButtonsPanel):
col.prop(key, "object", text="")
col.prop(key, "system", text="System")
col = row.column()
- col.active = psys.keyed_timing
+ col.active = psys.use_keyed_timing
col.prop(key, "time")
col.prop(key, "duration")
elif part.physics_type == 'BOIDS':
@@ -563,7 +552,7 @@ class PARTICLE_PT_physics(ParticleButtonsPanel):
sub.prop(key, "object", text="")
sub.prop(key, "system", text="System")
- layout.prop(key, "mode", expand=True)
+ layout.prop(key, "alliance", expand=True)
elif part.physics_type == 'FLUID':
sub = row.row()
#doesn't work yet
@@ -572,20 +561,21 @@ class PARTICLE_PT_physics(ParticleButtonsPanel):
sub.prop(key, "system", text="System")
-class PARTICLE_PT_boidbrain(ParticleButtonsPanel):
+class PARTICLE_PT_boidbrain(ParticleButtonsPanel, bpy.types.Panel):
bl_label = "Boid Brain"
COMPAT_ENGINES = {'BLENDER_RENDER'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
psys = context.particle_system
engine = context.scene.render.engine
if psys is None:
return False
if psys.settings is None:
return False
- if psys.point_cache.external:
+ if psys.point_cache.use_external:
return False
- return psys.settings.physics_type == 'BOIDS' and engine in self.COMPAT_ENGINES
+ return psys.settings.physics_type == 'BOIDS' and engine in cls.COMPAT_ENGINES
def draw(self, context):
layout = self.layout
@@ -612,7 +602,7 @@ class PARTICLE_PT_boidbrain(ParticleButtonsPanel):
row = layout.row()
row.prop(state, "ruleset_type")
if state.ruleset_type == 'FUZZY':
- row.prop(state, "rule_fuzziness", slider=True)
+ row.prop(state, "rule_fuzzy", slider=True)
else:
row.label(text="")
@@ -635,34 +625,34 @@ class PARTICLE_PT_boidbrain(ParticleButtonsPanel):
row = layout.row()
row.prop(rule, "name", text="")
#somebody make nice icons for boids here please! -jahka
- row.prop(rule, "in_air", icon='MOVE_UP_VEC', text="")
- row.prop(rule, "on_land", icon='MOVE_DOWN_VEC', text="")
+ row.prop(rule, "use_in_air", icon='MOVE_UP_VEC', text="")
+ row.prop(rule, "use_on_land", icon='MOVE_DOWN_VEC', text="")
row = layout.row()
if rule.type == 'GOAL':
row.prop(rule, "object")
row = layout.row()
- row.prop(rule, "predict")
+ row.prop(rule, "use_predict")
elif rule.type == 'AVOID':
row.prop(rule, "object")
row = layout.row()
- row.prop(rule, "predict")
+ row.prop(rule, "use_predict")
row.prop(rule, "fear_factor")
elif rule.type == 'FOLLOW_PATH':
row.label(text="Not yet functional.")
elif rule.type == 'AVOID_COLLISION':
- row.prop(rule, "boids")
- row.prop(rule, "deflectors")
+ row.prop(rule, "use_avoid")
+ row.prop(rule, "use_avoid_collision")
row.prop(rule, "look_ahead")
elif rule.type == 'FOLLOW_LEADER':
row.prop(rule, "object", text="")
row.prop(rule, "distance")
row = layout.row()
- row.prop(rule, "line")
+ row.prop(rule, "use_line")
sub = row.row()
sub.active = rule.line
- sub.prop(rule, "queue_size")
+ sub.prop(rule, "queue_count")
elif rule.type == 'AVERAGE_SPEED':
row.prop(rule, "speed", slider=True)
row.prop(rule, "wander", slider=True)
@@ -672,25 +662,25 @@ class PARTICLE_PT_boidbrain(ParticleButtonsPanel):
row.prop(rule, "flee_distance")
-class PARTICLE_PT_render(ParticleButtonsPanel):
+class PARTICLE_PT_render(ParticleButtonsPanel, bpy.types.Panel):
bl_label = "Render"
COMPAT_ENGINES = {'BLENDER_RENDER'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
psys = context.particle_system
engine = context.scene.render.engine
if psys is None:
return False
if psys.settings is None:
return False
- return engine in self.COMPAT_ENGINES
+ return engine in cls.COMPAT_ENGINES
def draw(self, context):
layout = self.layout
psys = context.particle_system
part = psys.settings
- wide_ui = context.region.width > narrowui
row = layout.row()
row.prop(part, "material")
@@ -699,85 +689,82 @@ class PARTICLE_PT_render(ParticleButtonsPanel):
split = layout.split()
sub = split.column()
- sub.prop(part, "emitter")
- sub.prop(part, "parent")
+ sub.prop(part, "use_render_emitter")
+ sub.prop(part, "use_parent_particles")
sub = split.column()
- sub.prop(part, "unborn")
- sub.prop(part, "died")
+ sub.prop(part, "show_unborn")
+ sub.prop(part, "use_dead")
row = layout.row()
- if wide_ui:
- row.prop(part, "ren_as", expand=True)
- else:
- row.prop(part, "ren_as", text="")
+ row.prop(part, "render_type", expand=True)
split = layout.split()
sub = split.column()
- if part.ren_as == 'LINE':
+ if part.render_type == 'LINE':
sub.prop(part, "line_length_tail")
sub.prop(part, "line_length_head")
sub = split.column()
- sub.prop(part, "velocity_length")
- elif part.ren_as == 'PATH':
- sub.prop(part, "render_strand")
+ sub.prop(part, "use_velocity_length")
+ elif part.render_type == 'PATH':
+ sub.prop(part, "use_strand_primitive")
subsub = sub.column()
- subsub.active = (part.render_strand is False)
- subsub.prop(part, "render_adaptive")
+ subsub.active = (part.use_strand_primitive is False)
+ subsub.prop(part, "use_render_adaptive")
subsub = sub.column()
- subsub.active = part.render_adaptive or part.render_strand == True
+ subsub.active = part.use_render_adaptive or part.use_strand_primitive == True
subsub.prop(part, "adaptive_angle")
subsub = sub.column()
- subsub.active = (part.render_adaptive is True and part.render_strand is False)
- subsub.prop(part, "adaptive_pix")
- sub.prop(part, "hair_bspline")
+ subsub.active = (part.use_render_adaptive is True and part.use_strand_primitive is False)
+ subsub.prop(part, "adaptive_pixel")
+ sub.prop(part, "use_hair_bspline")
sub.prop(part, "render_step", text="Steps")
sub = split.column()
sub.label(text="Timing:")
- sub.prop(part, "abs_path_time")
- sub.prop(part, "path_start", text="Start", slider=not part.abs_path_time)
- sub.prop(part, "path_end", text="End", slider=not part.abs_path_time)
- sub.prop(part, "random_length", text="Random", slider=True)
+ sub.prop(part, "use_absolute_path_time")
+ sub.prop(part, "path_start", text="Start", slider=not part.use_absolute_path_time)
+ sub.prop(part, "path_end", text="End", slider=not part.use_absolute_path_time)
+ sub.prop(part, "length_random", text="Random", slider=True)
row = layout.row()
col = row.column()
- if part.type == 'HAIR' and part.render_strand == True and part.child_type == 'FACES':
- layout.prop(part, "enable_simplify")
- if part.enable_simplify == True:
+ if part.type == 'HAIR' and part.use_strand_primitive == True and part.child_type == 'FACES':
+ layout.prop(part, "use_simplify")
+ if part.use_simplify == True:
row = layout.row()
row.prop(part, "simplify_refsize")
row.prop(part, "simplify_rate")
row.prop(part, "simplify_transition")
row = layout.row()
- row.prop(part, "viewport")
+ row.prop(part, "use_simplify_viewport")
sub = row.row()
sub.active = part.viewport == True
sub.prop(part, "simplify_viewport")
- elif part.ren_as == 'OBJECT':
+ elif part.render_type == 'OBJECT':
sub.prop(part, "dupli_object")
sub.prop(part, "use_global_dupli")
- elif part.ren_as == 'GROUP':
+ elif part.render_type == 'GROUP':
sub.prop(part, "dupli_group")
split = layout.split()
sub = split.column()
- sub.prop(part, "whole_group")
+ sub.prop(part, "use_whole_group")
subsub = sub.column()
- subsub.active = (part.whole_group is False)
+ subsub.active = (part.use_whole_group is False)
subsub.prop(part, "use_group_count")
sub = split.column()
subsub = sub.column()
- subsub.active = (part.whole_group is False)
+ subsub.active = (part.use_whole_group is False)
subsub.prop(part, "use_global_dupli")
- subsub.prop(part, "rand_group")
+ subsub.prop(part, "use_group_pick_random")
- if part.use_group_count and not part.whole_group:
+ if part.use_group_count and not part.use_whole_group:
row = layout.row()
- row.template_list(part, "dupliweights", part, "active_dupliweight_index")
+ row.template_list(part, "dupli_weights", part, "active_dupliweight_index")
col = row.column()
sub = col.row()
@@ -792,15 +779,12 @@ class PARTICLE_PT_render(ParticleButtonsPanel):
row = layout.row()
row.prop(weight, "count")
- elif part.ren_as == 'BILLBOARD':
+ elif part.render_type == 'BILLBOARD':
sub.label(text="Align:")
row = layout.row()
- if wide_ui:
- row.prop(part, "billboard_align", expand=True)
- else:
- row.prop(part, "billboard_align", text="")
- row.prop(part, "billboard_lock", text="Lock")
+ row.prop(part, "billboard_align", expand=True)
+ row.prop(part, "lock_billboard", text="Lock")
row = layout.row()
row.prop(part, "billboard_object")
@@ -808,7 +792,7 @@ class PARTICLE_PT_render(ParticleButtonsPanel):
col = row.column(align=True)
col.label(text="Tilt:")
col.prop(part, "billboard_tilt", text="Angle", slider=True)
- col.prop(part, "billboard_random_tilt", slider=True)
+ col.prop(part, "billboard_tilt_random", slider=True)
col = row.column()
col.prop(part, "billboard_offset")
@@ -826,57 +810,54 @@ class PARTICLE_PT_render(ParticleButtonsPanel):
row.label(text="Animate:")
row.prop(part, "billboard_animation", text="")
row.label(text="Offset:")
- row.prop(part, "billboard_split_offset", text="")
+ row.prop(part, "billboard_offset_split", text="")
- if part.ren_as == 'HALO' or part.ren_as == 'LINE' or part.ren_as == 'BILLBOARD':
+ if part.render_type == 'HALO' or part.render_type == 'LINE' or part.render_type == 'BILLBOARD':
row = layout.row()
col = row.column()
col.prop(part, "trail_count")
if part.trail_count > 1:
- col.prop(part, "abs_path_time", text="Length in frames")
+ col.prop(part, "use_absolute_path_time", text="Length in frames")
col = row.column()
- col.prop(part, "path_end", text="Length", slider=not part.abs_path_time)
- col.prop(part, "random_length", text="Random", slider=True)
+ col.prop(part, "path_end", text="Length", slider=not part.use_absolute_path_time)
+ col.prop(part, "length_random", text="Random", slider=True)
else:
col = row.column()
col.label(text="")
-class PARTICLE_PT_draw(ParticleButtonsPanel):
+class PARTICLE_PT_draw(ParticleButtonsPanel, bpy.types.Panel):
bl_label = "Display"
bl_default_closed = True
COMPAT_ENGINES = {'BLENDER_RENDER'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
psys = context.particle_system
engine = context.scene.render.engine
if psys is None:
return False
if psys.settings is None:
return False
- return engine in self.COMPAT_ENGINES
+ return engine in cls.COMPAT_ENGINES
def draw(self, context):
layout = self.layout
psys = context.particle_system
part = psys.settings
- wide_ui = context.region.width > narrowui
row = layout.row()
- if wide_ui:
- row.prop(part, "draw_as", expand=True)
- else:
- row.prop(part, "draw_as", text="")
+ row.prop(part, "draw_method", expand=True)
- if part.draw_as == 'NONE' or (part.ren_as == 'NONE' and part.draw_as == 'RENDER'):
+ if part.draw_method == 'NONE' or (part.render_type == 'NONE' and part.draw_method == 'RENDER'):
return
- path = (part.ren_as == 'PATH' and part.draw_as == 'RENDER') or part.draw_as == 'PATH'
+ path = (part.render_type == 'PATH' and part.draw_method == 'RENDER') or part.draw_method == 'PATH'
row = layout.row()
- row.prop(part, "display", slider=True)
- if part.draw_as != 'RENDER' or part.ren_as == 'HALO':
+ row.prop(part, "draw_percentage", slider=True)
+ if part.draw_method != 'RENDER' or part.render_type == 'HALO':
row.prop(part, "draw_size")
else:
row.label(text="")
@@ -884,39 +865,39 @@ class PARTICLE_PT_draw(ParticleButtonsPanel):
row = layout.row()
col = row.column()
col.prop(part, "show_size")
- col.prop(part, "velocity")
- col.prop(part, "num")
+ col.prop(part, "show_velocity")
+ col.prop(part, "show_number")
if part.physics_type == 'BOIDS':
- col.prop(part, "draw_health")
+ col.prop(part, "show_health")
col = row.column()
- col.prop(part, "material_color", text="Use material color")
+ col.prop(part, "show_material_color", text="Use material color")
if (path):
col.prop(part, "draw_step")
else:
sub = col.column()
- sub.active = (part.material_color is False)
+ sub.active = (part.show_material_color is False)
#sub.label(text="color")
#sub.label(text="Override material color")
-class PARTICLE_PT_children(ParticleButtonsPanel):
+class PARTICLE_PT_children(ParticleButtonsPanel, bpy.types.Panel):
bl_label = "Children"
bl_default_closed = True
COMPAT_ENGINES = {'BLENDER_RENDER'}
+ @classmethod
+ def poll(cls, context):
+ return particle_panel_poll(cls, context)
+
def draw(self, context):
layout = self.layout
psys = context.particle_system
part = psys.settings
- wide_ui = context.region.width > narrowui
- if wide_ui:
- layout.row().prop(part, "child_type", expand=True)
- else:
- layout.row().prop(part, "child_type", text="")
+ layout.row().prop(part, "child_type", expand=True)
if part.child_type == 'NONE':
return
@@ -925,7 +906,7 @@ class PARTICLE_PT_children(ParticleButtonsPanel):
col = row.column(align=True)
col.prop(part, "child_nbr", text="Display")
- col.prop(part, "rendered_child_nbr", text="Render")
+ col.prop(part, "rendered_child_count", text="Render")
col = row.column(align=True)
@@ -937,7 +918,7 @@ class PARTICLE_PT_children(ParticleButtonsPanel):
col = row.column(align=True)
col.prop(part, "child_size", text="Size")
- col.prop(part, "child_random_size", text="Random")
+ col.prop(part, "child_size_random", text="Random")
layout.row().label(text="Effects:")
@@ -945,37 +926,34 @@ class PARTICLE_PT_children(ParticleButtonsPanel):
col = row.column(align=True)
col.prop(part, "clump_factor", slider=True)
- col.prop(part, "clumppow", slider=True)
+ col.prop(part, "clump_shape", slider=True)
col = row.column(align=True)
- col.prop(part, "rough_endpoint")
- col.prop(part, "rough_end_shape")
+ col.prop(part, "roughness_endpoint")
+ col.prop(part, "roughness_end_shape")
row = layout.row()
col = row.column(align=True)
- col.prop(part, "rough1")
- col.prop(part, "rough1_size")
+ col.prop(part, "roughness_1")
+ col.prop(part, "roughness_1_size")
col = row.column(align=True)
- col.prop(part, "rough2")
- col.prop(part, "rough2_size")
- col.prop(part, "rough2_thres", slider=True)
+ col.prop(part, "roughness_2")
+ col.prop(part, "roughness_2_size")
+ col.prop(part, "roughness_2_threshold", slider=True)
row = layout.row()
col = row.column(align=True)
col.prop(part, "child_length", slider=True)
- col.prop(part, "child_length_thres", slider=True)
+ col.prop(part, "child_length_threshold", slider=True)
col = row.column(align=True)
col.label(text="Space reserved for")
col.label(text="hair parting controls")
layout.row().label(text="Kink:")
- if wide_ui:
- layout.row().prop(part, "kink", expand=True)
- else:
- layout.row().prop(part, "kink", text="")
+ layout.row().prop(part, "kink", expand=True)
split = layout.split()
@@ -986,7 +964,7 @@ class PARTICLE_PT_children(ParticleButtonsPanel):
col.prop(part, "kink_shape", slider=True)
-class PARTICLE_PT_field_weights(ParticleButtonsPanel):
+class PARTICLE_PT_field_weights(ParticleButtonsPanel, bpy.types.Panel):
bl_label = "Field Weights"
bl_default_closed = True
COMPAT_ENGINES = {'BLENDER_RENDER'}
@@ -996,10 +974,10 @@ class PARTICLE_PT_field_weights(ParticleButtonsPanel):
effector_weights_ui(self, context, part.effector_weights)
if part.type == 'HAIR':
- self.layout.prop(part.effector_weights, "do_growing_hair")
+ self.layout.prop(part.effector_weights, "apply_to_hair_growing")
-class PARTICLE_PT_force_fields(ParticleButtonsPanel):
+class PARTICLE_PT_force_fields(ParticleButtonsPanel, bpy.types.Panel):
bl_label = "Force Field Settings"
bl_default_closed = True
COMPAT_ENGINES = {'BLENDER_RENDER'}
@@ -1009,7 +987,7 @@ class PARTICLE_PT_force_fields(ParticleButtonsPanel):
part = context.particle_system.settings
- layout.prop(part, "self_effect")
+ layout.prop(part, "use_self_effect")
split = layout.split(percentage=0.2)
split.label(text="Type 1:")
@@ -1027,7 +1005,7 @@ class PARTICLE_PT_force_fields(ParticleButtonsPanel):
basic_force_field_falloff_ui(self, context, part.force_field_2)
-class PARTICLE_PT_vertexgroups(ParticleButtonsPanel):
+class PARTICLE_PT_vertexgroups(ParticleButtonsPanel, bpy.types.Panel):
bl_label = "Vertexgroups"
bl_default_closed = True
COMPAT_ENGINES = {'BLENDER_RENDER'}
@@ -1048,82 +1026,64 @@ class PARTICLE_PT_vertexgroups(ParticleButtonsPanel):
row = layout.row()
row.prop_object(psys, "vertex_group_density", ob, "vertex_groups", text="Density")
- row.prop(psys, "vertex_group_density_negate", text="")
+ row.prop(psys, "invert_vertex_group_density", text="")
row = layout.row()
row.prop_object(psys, "vertex_group_velocity", ob, "vertex_groups", text="Velocity")
- row.prop(psys, "vertex_group_velocity_negate", text="")
+ row.prop(psys, "invert_vertex_group_velocity", text="")
row = layout.row()
row.prop_object(psys, "vertex_group_length", ob, "vertex_groups", text="Length")
- row.prop(psys, "vertex_group_length_negate", text="")
+ row.prop(psys, "invert_vertex_group_length", text="")
row = layout.row()
row.prop_object(psys, "vertex_group_clump", ob, "vertex_groups", text="Clump")
- row.prop(psys, "vertex_group_clump_negate", text="")
+ row.prop(psys, "invert_vertex_group_clump", text="")
row = layout.row()
row.prop_object(psys, "vertex_group_kink", ob, "vertex_groups", text="Kink")
- row.prop(psys, "vertex_group_kink_negate", text="")
+ row.prop(psys, "invert_vertex_group_kink", text="")
row = layout.row()
- row.prop_object(psys, "vertex_group_roughness1", ob, "vertex_groups", text="Roughness 1")
- row.prop(psys, "vertex_group_roughness1_negate", text="")
+ row.prop_object(psys, "vertex_group_roughness_1", ob, "vertex_groups", text="Roughness 1")
+ row.prop(psys, "invert_vertex_group_roughness_1", text="")
row = layout.row()
- row.prop_object(psys, "vertex_group_roughness2", ob, "vertex_groups", text="Roughness 2")
- row.prop(psys, "vertex_group_roughness2_negate", text="")
+ row.prop_object(psys, "vertex_group_roughness_2", ob, "vertex_groups", text="Roughness 2")
+ row.prop(psys, "invert_vertex_group_roughness_2", text="")
row = layout.row()
row.prop_object(psys, "vertex_group_roughness_end", ob, "vertex_groups", text="Roughness End")
- row.prop(psys, "vertex_group_roughness_end_negate", text="")
+ row.prop(psys, "invert_vertex_group_roughness_end", text="")
row = layout.row()
row.prop_object(psys, "vertex_group_size", ob, "vertex_groups", text="Size")
- row.prop(psys, "vertex_group_size_negate", text="")
+ row.prop(psys, "invert_vertex_group_size", text="")
row = layout.row()
row.prop_object(psys, "vertex_group_tangent", ob, "vertex_groups", text="Tangent")
- row.prop(psys, "vertex_group_tangent_negate", text="")
+ row.prop(psys, "invert_vertex_group_tangent", text="")
row = layout.row()
row.prop_object(psys, "vertex_group_rotation", ob, "vertex_groups", text="Rotation")
- row.prop(psys, "vertex_group_rotation_negate", text="")
+ row.prop(psys, "invert_vertex_group_rotation", text="")
row = layout.row()
row.prop_object(psys, "vertex_group_field", ob, "vertex_groups", text="Field")
- row.prop(psys, "vertex_group_field_negate", text="")
+ row.prop(psys, "invert_vertex_group_field", text="")
-classes = [
- PARTICLE_PT_context_particles,
- PARTICLE_PT_hair_dynamics,
- PARTICLE_PT_cache,
- PARTICLE_PT_emission,
- PARTICLE_PT_velocity,
- PARTICLE_PT_rotation,
- PARTICLE_PT_physics,
- PARTICLE_PT_boidbrain,
- PARTICLE_PT_render,
- PARTICLE_PT_draw,
- PARTICLE_PT_children,
- PARTICLE_PT_field_weights,
- PARTICLE_PT_force_fields,
- PARTICLE_PT_vertexgroups,
-
- PARTICLE_PT_custom_props]
+class PARTICLE_PT_custom_props(ParticleButtonsPanel, PropertyPanel, bpy.types.Panel):
+ COMPAT_ENGINES = {'BLENDER_RENDER'}
+ _context_path = "particle_system.settings"
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/properties_physics_cloth.py b/release/scripts/ui/properties_physics_cloth.py
index 61e1fe81812..30619de5814 100644
--- a/release/scripts/ui/properties_physics_cloth.py
+++ b/release/scripts/ui/properties_physics_cloth.py
@@ -19,15 +19,13 @@
# <pep8 compliant>
import bpy
-narrowui = bpy.context.user_preferences.view.properties_width_check
-
from properties_physics_common import point_cache_ui
from properties_physics_common import effector_weights_ui
def cloth_panel_enabled(md):
- return md.point_cache.baked is False
+ return md.point_cache.is_baked is False
class CLOTH_MT_presets(bpy.types.Menu):
@@ -40,18 +38,19 @@ class CLOTH_MT_presets(bpy.types.Menu):
draw = bpy.types.Menu.draw_preset
-class PhysicButtonsPanel(bpy.types.Panel):
+class PhysicButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "physics"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
ob = context.object
rd = context.scene.render
return (ob and ob.type == 'MESH') and (not rd.use_game_engine)
-class PHYSICS_PT_cloth(PhysicButtonsPanel):
+class PHYSICS_PT_cloth(PhysicButtonsPanel, bpy.types.Panel):
bl_label = "Cloth"
def draw(self, context):
@@ -59,7 +58,6 @@ class PHYSICS_PT_cloth(PhysicButtonsPanel):
md = context.cloth
ob = context.object
- wide_ui = context.region.width > narrowui
split = layout.split()
@@ -69,13 +67,12 @@ class PHYSICS_PT_cloth(PhysicButtonsPanel):
split.operator("object.modifier_remove", text="Remove")
row = split.row(align=True)
- row.prop(md, "render", text="")
- row.prop(md, "realtime", text="")
+ row.prop(md, "show_render", text="")
+ row.prop(md, "show_viewport", text="")
else:
# add modifier
split.operator("object.modifier_add", text="Add").type = 'CLOTH'
- if wide_ui:
- split.label()
+ split.label()
if md:
cloth = md.settings
@@ -99,16 +96,15 @@ class PHYSICS_PT_cloth(PhysicButtonsPanel):
col.prop(cloth, "structural_stiffness", text="Structural")
col.prop(cloth, "bending_stiffness", text="Bending")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Damping:")
col.prop(cloth, "spring_damping", text="Spring")
col.prop(cloth, "air_damping", text="Air")
- col.prop(cloth, "pin_cloth", text="Pinning")
+ col.prop(cloth, "use_pin_cloth", text="Pinning")
sub = col.column()
- sub.active = cloth.pin_cloth
+ sub.active = cloth.use_pin_cloth
sub.prop_object(cloth, "mass_vertex_group", ob, "vertex_groups", text="")
sub.prop(cloth, "pin_stiffness", text="Stiffness")
@@ -133,11 +129,12 @@ class PHYSICS_PT_cloth(PhysicButtonsPanel):
col.prop_object(cloth, "rest_shape_key", key, "keys", text="")
-class PHYSICS_PT_cloth_cache(PhysicButtonsPanel):
+class PHYSICS_PT_cloth_cache(PhysicButtonsPanel, bpy.types.Panel):
bl_label = "Cloth Cache"
bl_default_closed = True
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return context.cloth
def draw(self, context):
@@ -145,58 +142,58 @@ class PHYSICS_PT_cloth_cache(PhysicButtonsPanel):
point_cache_ui(self, context, md.point_cache, cloth_panel_enabled(md), 'CLOTH')
-class PHYSICS_PT_cloth_collision(PhysicButtonsPanel):
+class PHYSICS_PT_cloth_collision(PhysicButtonsPanel, bpy.types.Panel):
bl_label = "Cloth Collision"
bl_default_closed = True
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return context.cloth
def draw_header(self, context):
cloth = context.cloth.collision_settings
self.layout.active = cloth_panel_enabled(context.cloth)
- self.layout.prop(cloth, "enable_collision", text="")
+ self.layout.prop(cloth, "use_collision", text="")
def draw(self, context):
layout = self.layout
cloth = context.cloth.collision_settings
md = context.cloth
- wide_ui = context.region.width > narrowui
- layout.active = cloth.enable_collision and cloth_panel_enabled(md)
+ layout.active = cloth.use_collision and cloth_panel_enabled(md)
split = layout.split()
col = split.column()
col.prop(cloth, "collision_quality", slider=True, text="Quality")
- col.prop(cloth, "min_distance", slider=True, text="Distance")
+ col.prop(cloth, "distance_min", slider=True, text="Distance")
col.prop(cloth, "friction")
- if wide_ui:
- col = split.column()
- col.prop(cloth, "enable_self_collision", text="Self Collision")
+ col = split.column()
+ col.prop(cloth, "use_self_collision", text="Self Collision")
sub = col.column()
- sub.active = cloth.enable_self_collision
+ sub.active = cloth.use_self_collision
sub.prop(cloth, "self_collision_quality", slider=True, text="Quality")
- sub.prop(cloth, "self_min_distance", slider=True, text="Distance")
+ sub.prop(cloth, "self_distance_min", slider=True, text="Distance")
layout.prop(cloth, "group")
-class PHYSICS_PT_cloth_stiffness(PhysicButtonsPanel):
+class PHYSICS_PT_cloth_stiffness(PhysicButtonsPanel, bpy.types.Panel):
bl_label = "Cloth Stiffness Scaling"
bl_default_closed = True
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return context.cloth
def draw_header(self, context):
cloth = context.cloth.settings
self.layout.active = cloth_panel_enabled(context.cloth)
- self.layout.prop(cloth, "stiffness_scaling", text="")
+ self.layout.prop(cloth, "use_stiffness_scale", text="")
def draw(self, context):
layout = self.layout
@@ -204,9 +201,8 @@ class PHYSICS_PT_cloth_stiffness(PhysicButtonsPanel):
md = context.cloth
ob = context.object
cloth = context.cloth.settings
- wide_ui = context.region.width > narrowui
- layout.active = cloth.stiffness_scaling and cloth_panel_enabled(md)
+ layout.active = cloth.use_stiffness_scale and cloth_panel_enabled(md)
split = layout.split()
@@ -215,18 +211,18 @@ class PHYSICS_PT_cloth_stiffness(PhysicButtonsPanel):
col.prop_object(cloth, "structural_stiffness_vertex_group", ob, "vertex_groups", text="")
col.prop(cloth, "structural_stiffness_max", text="Max")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Bending Stiffness:")
col.prop_object(cloth, "bending_vertex_group", ob, "vertex_groups", text="")
col.prop(cloth, "bending_stiffness_max", text="Max")
-class PHYSICS_PT_cloth_field_weights(PhysicButtonsPanel):
+class PHYSICS_PT_cloth_field_weights(PhysicButtonsPanel, bpy.types.Panel):
bl_label = "Cloth Field Weights"
bl_default_closed = True
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return (context.cloth)
def draw(self, context):
@@ -234,26 +230,12 @@ class PHYSICS_PT_cloth_field_weights(PhysicButtonsPanel):
effector_weights_ui(self, context, cloth.effector_weights)
-classes = [
- CLOTH_MT_presets,
-
- PHYSICS_PT_cloth,
- PHYSICS_PT_cloth_cache,
- PHYSICS_PT_cloth_collision,
- PHYSICS_PT_cloth_stiffness,
- PHYSICS_PT_cloth_field_weights]
-
-
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/properties_physics_common.py b/release/scripts/ui/properties_physics_common.py
index be8972e4fe6..fb9f2f981ae 100644
--- a/release/scripts/ui/properties_physics_common.py
+++ b/release/scripts/ui/properties_physics_common.py
@@ -20,28 +20,25 @@
import bpy
-narrowui = bpy.context.user_preferences.view.properties_width_check
-
#cachetype can be 'PSYS' 'HAIR' 'SMOKE' etc
def point_cache_ui(self, context, cache, enabled, cachetype):
layout = self.layout
- wide_ui = context.region.width > narrowui
layout.set_context_pointer("point_cache", cache)
row = layout.row()
- row.template_list(cache, "point_cache_list", cache, "active_point_cache_index", rows=2)
+ row.template_list(cache, "point_caches", cache, "active_point_cache_index", rows=2)
col = row.column(align=True)
col.operator("ptcache.add", icon='ZOOMIN', text="")
col.operator("ptcache.remove", icon='ZOOMOUT', text="")
row = layout.row()
if cachetype in ('PSYS', 'HAIR', 'SMOKE'):
- row.prop(cache, "external")
+ row.prop(cache, "use_external")
- if cache.external:
+ if cache.use_external:
split = layout.split(percentage=0.80)
split.prop(cache, "name", text="File Name")
split.prop(cache, "index", text="")
@@ -64,19 +61,18 @@ def point_cache_ui(self, context, cache, enabled, cachetype):
col.prop(cache, "frame_start")
col.prop(cache, "frame_end")
if cachetype != 'SMOKE':
- col.prop(cache, "step")
+ col.prop(cache, "frame_step")
- if wide_ui:
- col = split.column()
+ col = split.column()
if cachetype != 'SMOKE':
sub = col.column()
sub.enabled = enabled
- sub.prop(cache, "quick_cache")
+ sub.prop(cache, "use_quick_cache")
sub = col.column()
- sub.enabled = bpy.data.file_is_saved
- sub.prop(cache, "disk_cache")
+ sub.enabled = (not bpy.data.is_dirty)
+ sub.prop(cache, "use_disk_cache")
col.label(text=cache.info)
sub = col.column()
@@ -88,13 +84,13 @@ def point_cache_ui(self, context, cache, enabled, cachetype):
col = split.column()
- if cache.baked == True:
+ if cache.is_baked == True:
col.operator("ptcache.free_bake", text="Free Bake")
else:
col.operator("ptcache.bake", text="Bake").bake = True
sub = col.row()
- sub.enabled = (cache.frames_skipped or cache.outdated) and enabled
+ sub.enabled = (cache.frames_skipped or cache.is_outdated) and enabled
sub.operator("ptcache.bake", text="Calculate To Frame").bake = False
sub = col.column()
@@ -102,8 +98,7 @@ def point_cache_ui(self, context, cache, enabled, cachetype):
sub.operator("ptcache.bake_from_cache", text="Current Cache to Bake")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.operator("ptcache.bake_all", text="Bake All Dynamics").bake = True
col.operator("ptcache.free_bake_all", text="Free All Bakes")
col.operator("ptcache.bake_all", text="Update All To Frame").bake = False
@@ -112,7 +107,6 @@ def point_cache_ui(self, context, cache, enabled, cachetype):
def effector_weights_ui(self, context, weights):
layout = self.layout
- wide_ui = context.region.width > narrowui
layout.prop(weights, "group")
@@ -121,8 +115,7 @@ def effector_weights_ui(self, context, weights):
col = split.column()
col.prop(weights, "gravity", slider=True)
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(weights, "all", slider=True)
layout.separator()
@@ -134,11 +127,10 @@ def effector_weights_ui(self, context, weights):
col.prop(weights, "vortex", slider=True)
col.prop(weights, "magnetic", slider=True)
col.prop(weights, "wind", slider=True)
- col.prop(weights, "curveguide", slider=True)
+ col.prop(weights, "curve_guide", slider=True)
col.prop(weights, "texture", slider=True)
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(weights, "harmonic", slider=True)
col.prop(weights, "charge", slider=True)
col.prop(weights, "lennardjones", slider=True)
@@ -150,7 +142,6 @@ def effector_weights_ui(self, context, weights):
def basic_force_field_settings_ui(self, context, field):
layout = self.layout
- wide_ui = context.region.width > narrowui
split = layout.split()
@@ -177,37 +168,32 @@ def basic_force_field_settings_ui(self, context, field):
else:
col.prop(field, "flow")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(field, "noise")
col.prop(field, "seed")
if field.type == 'TURBULENCE':
- col.prop(field, "global_coordinates", text="Global")
+ col.prop(field, "use_global_coords", text="Global")
elif field.type == 'HARMONIC':
- col.prop(field, "multiple_springs")
+ col.prop(field, "use_multiple_springs")
split = layout.split()
col = split.column()
col.label(text="Effect point:")
- col.prop(field, "do_location")
- col.prop(field, "do_rotation")
+ col.prop(field, "apply_to_location")
+ col.prop(field, "apply_to_rotation")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Collision:")
- col.prop(field, "do_absorption")
+ col.prop(field, "use_absorption")
def basic_force_field_falloff_ui(self, context, field):
layout = self.layout
- wide_ui = context.region.width > narrowui
# XXX: This doesn't update for some reason.
- #if wide_ui:
- # split = layout.split()
- #else:
+ #split = layout.split()
split = layout.split(percentage=0.35)
if not field or field.type == 'NONE':
@@ -218,17 +204,16 @@ def basic_force_field_falloff_ui(self, context, field):
col.prop(field, "use_min_distance", text="Use Minimum")
col.prop(field, "use_max_distance", text="Use Maximum")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(field, "falloff_power", text="Power")
sub = col.column()
sub.active = field.use_min_distance
- sub.prop(field, "minimum_distance", text="Distance")
+ sub.prop(field, "distance_min", text="Distance")
sub = col.column()
sub.active = field.use_max_distance
- sub.prop(field, "maximum_distance", text="Distance")
+ sub.prop(field, "distance_max", text="Distance")
def register():
diff --git a/release/scripts/ui/properties_physics_field.py b/release/scripts/ui/properties_physics_field.py
index 57fa40e4c5d..80ea999eedb 100644
--- a/release/scripts/ui/properties_physics_field.py
+++ b/release/scripts/ui/properties_physics_field.py
@@ -19,24 +19,23 @@
# <pep8 compliant>
import bpy
-narrowui = bpy.context.user_preferences.view.properties_width_check
-
from properties_physics_common import basic_force_field_settings_ui
from properties_physics_common import basic_force_field_falloff_ui
-class PhysicButtonsPanel(bpy.types.Panel):
+class PhysicButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "physics"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
rd = context.scene.render
return (context.object) and (not rd.use_game_engine)
-class PHYSICS_PT_field(PhysicButtonsPanel):
+class PHYSICS_PT_field(PhysicButtonsPanel, bpy.types.Panel):
bl_label = "Force Fields"
def draw(self, context):
@@ -44,22 +43,15 @@ class PHYSICS_PT_field(PhysicButtonsPanel):
ob = context.object
field = ob.field
- wide_ui = context.region.width > narrowui
- if wide_ui:
- split = layout.split(percentage=0.2)
- split.label(text="Type:")
- else:
- split = layout.split()
+ split = layout.split(percentage=0.2)
+ split.label(text="Type:")
split.prop(field, "type", text="")
if field.type not in ('NONE', 'GUIDE', 'TEXTURE'):
- if wide_ui:
- split = layout.split(percentage=0.2)
- split.label(text="Shape:")
- else:
- split = layout.split()
+ split = layout.split(percentage=0.2)
+ split.label(text="Shape:")
split.prop(field, "shape", text="")
split = layout.split()
@@ -71,11 +63,10 @@ class PHYSICS_PT_field(PhysicButtonsPanel):
col.prop(field, "guide_minimum")
col.prop(field, "guide_free")
col.prop(field, "falloff_power")
- col.prop(field, "guide_path_add")
+ col.prop(field, "use_guide_path_add")
col.prop(field, "use_guide_path_weight")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Clumping:")
col.prop(field, "guide_clump_amount")
col.prop(field, "guide_clump_shape")
@@ -84,7 +75,7 @@ class PHYSICS_PT_field(PhysicButtonsPanel):
row.prop(field, "use_max_distance")
sub = row.row()
sub.active = field.use_max_distance
- sub.prop(field, "maximum_distance")
+ sub.prop(field, "distance_max")
layout.separator()
@@ -98,8 +89,7 @@ class PHYSICS_PT_field(PhysicButtonsPanel):
col.prop(field, "guide_kink_frequency")
col.prop(field, "guide_kink_shape")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(field, "guide_kink_amplitude")
elif field.type == 'TEXTURE':
@@ -109,11 +99,10 @@ class PHYSICS_PT_field(PhysicButtonsPanel):
col.prop(field, "texture_mode", text="")
col.prop(field, "texture_nabla")
- if wide_ui:
- col = split.column()
- col.prop(field, "use_coordinates")
- col.prop(field, "root_coordinates")
- col.prop(field, "force_2d")
+ col = split.column()
+ col.prop(field, "use_object_coords")
+ col.prop(field, "use_root_coords")
+ col.prop(field, "use_2d_force")
else:
basic_force_field_settings_ui(self, context, field)
@@ -134,17 +123,16 @@ class PHYSICS_PT_field(PhysicButtonsPanel):
col.prop(field, "use_radial_min", text="Use Minimum")
col.prop(field, "use_radial_max", text="Use Maximum")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(field, "radial_falloff", text="Power")
sub = col.column()
sub.active = field.use_radial_min
- sub.prop(field, "radial_minimum", text="Angle")
+ sub.prop(field, "radial_min", text="Angle")
sub = col.column()
sub.active = field.use_radial_max
- sub.prop(field, "radial_maximum", text="Angle")
+ sub.prop(field, "radial_max", text="Angle")
elif field.falloff_type == 'TUBE':
layout.separator()
@@ -156,24 +144,24 @@ class PHYSICS_PT_field(PhysicButtonsPanel):
col.prop(field, "use_radial_min", text="Use Minimum")
col.prop(field, "use_radial_max", text="Use Maximum")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(field, "radial_falloff", text="Power")
sub = col.column()
sub.active = field.use_radial_min
- sub.prop(field, "radial_minimum", text="Distance")
+ sub.prop(field, "radial_min", text="Distance")
sub = col.column()
sub.active = field.use_radial_max
- sub.prop(field, "radial_maximum", text="Distance")
+ sub.prop(field, "radial_max", text="Distance")
-class PHYSICS_PT_collision(PhysicButtonsPanel):
+class PHYSICS_PT_collision(PhysicButtonsPanel, bpy.types.Panel):
bl_label = "Collision"
#bl_default_closed = True
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
ob = context.object
rd = context.scene.render
return (ob and ob.type == 'MESH') and (not rd.use_game_engine)
@@ -182,7 +170,6 @@ class PHYSICS_PT_collision(PhysicButtonsPanel):
layout = self.layout
md = context.collision
- wide_ui = context.region.width > narrowui
split = layout.split()
@@ -190,27 +177,25 @@ class PHYSICS_PT_collision(PhysicButtonsPanel):
# remove modifier + settings
split.set_context_pointer("modifier", md)
split.operator("object.modifier_remove", text="Remove")
- if wide_ui:
- col = split.column()
+ col = split.column()
#row = split.row(align=True)
- #row.prop(md, "render", text="")
- #row.prop(md, "realtime", text="")
+ #row.prop(md, "show_render", text="")
+ #row.prop(md, "show_viewport", text="")
coll = md.settings
else:
# add modifier
split.operator("object.modifier_add", text="Add").type = 'COLLISION'
- if wide_ui:
- split.label()
+ split.label()
coll = None
if coll:
settings = context.object.collision
- layout.active = settings.enabled
+ layout.active = settings.use
split = layout.split()
@@ -218,23 +203,22 @@ class PHYSICS_PT_collision(PhysicButtonsPanel):
col.label(text="Particle:")
col.prop(settings, "permeability", slider=True)
col.prop(settings, "stickness")
- col.prop(settings, "kill_particles")
+ col.prop(settings, "use_particle_kill")
col.label(text="Particle Damping:")
sub = col.column(align=True)
sub.prop(settings, "damping_factor", text="Factor", slider=True)
- sub.prop(settings, "random_damping", text="Random", slider=True)
+ sub.prop(settings, "damping_random", text="Random", slider=True)
col.label(text="Particle Friction:")
sub = col.column(align=True)
sub.prop(settings, "friction_factor", text="Factor", slider=True)
- sub.prop(settings, "random_friction", text="Random", slider=True)
+ sub.prop(settings, "friction_random", text="Random", slider=True)
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Soft Body and Cloth:")
sub = col.column(align=True)
- sub.prop(settings, "outer_thickness", text="Outer", slider=True)
- sub.prop(settings, "inner_thickness", text="Inner", slider=True)
+ sub.prop(settings, "thickness_outer", text="Outer", slider=True)
+ sub.prop(settings, "thickness_inner", text="Inner", slider=True)
col.label(text="Soft Body Damping:")
col.prop(settings, "damping", text="Factor", slider=True)
@@ -243,21 +227,12 @@ class PHYSICS_PT_collision(PhysicButtonsPanel):
col.prop(settings, "absorption", text="Absorption")
-classes = [
- PHYSICS_PT_field,
- PHYSICS_PT_collision]
-
-
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/properties_physics_fluid.py b/release/scripts/ui/properties_physics_fluid.py
index 32acd88654d..035eefe6c2a 100644
--- a/release/scripts/ui/properties_physics_fluid.py
+++ b/release/scripts/ui/properties_physics_fluid.py
@@ -19,28 +19,26 @@
# <pep8 compliant>
import bpy
-narrowui = bpy.context.user_preferences.view.properties_width_check
-
-class PhysicButtonsPanel(bpy.types.Panel):
+class PhysicButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "physics"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
ob = context.object
rd = context.scene.render
return (ob and ob.type == 'MESH') and (not rd.use_game_engine)
-class PHYSICS_PT_fluid(PhysicButtonsPanel):
+class PHYSICS_PT_fluid(PhysicButtonsPanel, bpy.types.Panel):
bl_label = "Fluid"
def draw(self, context):
layout = self.layout
md = context.fluid
- wide_ui = context.region.width > narrowui
split = layout.split()
@@ -50,34 +48,28 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel):
split.operator("object.modifier_remove", text="Remove")
row = split.row(align=True)
- row.prop(md, "render", text="")
- row.prop(md, "realtime", text="")
+ row.prop(md, "show_render", text="")
+ row.prop(md, "show_viewport", text="")
fluid = md.settings
else:
# add modifier
split.operator("object.modifier_add", text="Add").type = 'FLUID_SIMULATION'
- if wide_ui:
- split.label()
+ split.label()
fluid = None
if fluid:
- if wide_ui:
- row = layout.row()
- row.prop(fluid, "type")
- if fluid.type not in ('NONE', 'DOMAIN', 'PARTICLE'):
- row.prop(fluid, "active", text="")
- else:
- layout.prop(fluid, "type", text="")
- if fluid.type not in ('NONE', 'DOMAIN', 'PARTICLE'):
- layout.prop(fluid, "active", text="")
+ row = layout.row()
+ row.prop(fluid, "type")
+ if fluid.type not in ('NONE', 'DOMAIN', 'PARTICLE'):
+ row.prop(fluid, "use", text="")
layout = layout.column()
if fluid.type not in ('NONE', 'DOMAIN', 'PARTICLE'):
- layout.active = fluid.active
+ layout.active = fluid.use
if fluid.type == 'DOMAIN':
layout.operator("fluid.bake", text="Bake Fluid Simulation", icon='MOD_FLUIDSIM')
@@ -89,8 +81,7 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel):
col.label(text="Render Display:")
col.prop(fluid, "render_display_mode", text="")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Required Memory: " + fluid.memory_estimate)
col.prop(fluid, "preview_resolution", text="Preview")
col.label(text="Viewport Display:")
@@ -104,13 +95,12 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel):
sub.prop(fluid, "start_time", text="Start")
sub.prop(fluid, "end_time", text="End")
- if wide_ui:
- col = split.column()
- col.label()
- col.prop(fluid, "generate_speed_vectors")
- col.prop(fluid, "reverse_frames")
+ col = split.column()
+ col.label()
+ col.prop(fluid, "use_speed_vectors")
+ col.prop(fluid, "use_reverse_frames")
- layout.prop(fluid, "path", text="")
+ layout.prop(fluid, "filepath", text="")
elif fluid.type == 'FLUID':
split = layout.split()
@@ -118,10 +108,9 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel):
col = split.column()
col.label(text="Volume Initialization:")
col.prop(fluid, "volume_initialization", text="")
- col.prop(fluid, "export_animated_mesh")
+ col.prop(fluid, "use_animated_mesh")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Initial Velocity:")
col.prop(fluid, "initial_velocity", text="")
@@ -131,10 +120,9 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel):
col = split.column()
col.label(text="Volume Initialization:")
col.prop(fluid, "volume_initialization", text="")
- col.prop(fluid, "export_animated_mesh")
+ col.prop(fluid, "use_animated_mesh")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Slip Type:")
col.prop(fluid, "slip_type", text="")
if fluid.slip_type == 'PARTIALSLIP':
@@ -149,11 +137,10 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel):
col = split.column()
col.label(text="Volume Initialization:")
col.prop(fluid, "volume_initialization", text="")
- col.prop(fluid, "export_animated_mesh")
- col.prop(fluid, "local_coordinates")
+ col.prop(fluid, "use_animated_mesh")
+ col.prop(fluid, "use_local_coords")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Inflow Velocity:")
col.prop(fluid, "inflow_velocity", text="")
@@ -163,10 +150,9 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel):
col = split.column()
col.label(text="Volume Initialization:")
col.prop(fluid, "volume_initialization", text="")
- col.prop(fluid, "export_animated_mesh")
+ col.prop(fluid, "use_animated_mesh")
- if wide_ui:
- split.column()
+ split.column()
elif fluid.type == 'PARTICLE':
split = layout.split()
@@ -176,14 +162,13 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel):
col.prop(fluid, "particle_influence", text="Size")
col.prop(fluid, "alpha_influence", text="Alpha")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Type:")
- col.prop(fluid, "drops")
- col.prop(fluid, "floats")
- col.prop(fluid, "tracer")
+ col.prop(fluid, "use_drops")
+ col.prop(fluid, "use_floats")
+ col.prop(fluid, "show_tracer")
- layout.prop(fluid, "path", text="")
+ layout.prop(fluid, "filepath", text="")
elif fluid.type == 'CONTROL':
split = layout.split()
@@ -191,10 +176,9 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel):
col = split.column()
col.label(text="")
col.prop(fluid, "quality", slider=True)
- col.prop(fluid, "reverse_frames")
+ col.prop(fluid, "use_reverse_frames")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Time:")
sub = col.column(align=True)
sub.prop(fluid, "start_time", text="Start")
@@ -208,28 +192,27 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel):
sub.prop(fluid, "attraction_strength", text="Strength")
sub.prop(fluid, "attraction_radius", text="Radius")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Velocity Force:")
sub = col.column(align=True)
sub.prop(fluid, "velocity_strength", text="Strength")
sub.prop(fluid, "velocity_radius", text="Radius")
-class PHYSICS_PT_domain_gravity(PhysicButtonsPanel):
+class PHYSICS_PT_domain_gravity(PhysicButtonsPanel, bpy.types.Panel):
bl_label = "Domain World"
bl_default_closed = True
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
md = context.fluid
- return md and (md.settings.type == 'DOMAIN')
+ return md and md.settings and (md.settings.type == 'DOMAIN')
def draw(self, context):
layout = self.layout
fluid = context.fluid.settings
scene = context.scene
- wide_ui = context.region.width > narrowui
split = layout.split()
@@ -247,13 +230,12 @@ class PHYSICS_PT_domain_gravity(PhysicButtonsPanel):
col.label(text="Using Scene Size Units", icon="SCENE_DATA")
sub = col.column()
sub.enabled = False
- sub.prop(fluid, "real_world_size", text="Metres")
+ sub.prop(fluid, "simulation_scale", text="Metres")
else:
col.label(text="Real World Size:")
- col.prop(fluid, "real_world_size", text="Metres")
+ col.prop(fluid, "simulation_scale", text="Metres")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Viscosity Presets:")
sub = col.column(align=True)
sub.prop(fluid, "viscosity_preset", text="")
@@ -267,19 +249,19 @@ class PHYSICS_PT_domain_gravity(PhysicButtonsPanel):
col.prop(fluid, "compressibility", slider=True)
-class PHYSICS_PT_domain_boundary(PhysicButtonsPanel):
+class PHYSICS_PT_domain_boundary(PhysicButtonsPanel, bpy.types.Panel):
bl_label = "Domain Boundary"
bl_default_closed = True
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
md = context.fluid
- return md and (md.settings.type == 'DOMAIN')
+ return md and md.settings and (md.settings.type == 'DOMAIN')
def draw(self, context):
layout = self.layout
fluid = context.fluid.settings
- wide_ui = context.region.width > narrowui
split = layout.split()
@@ -289,20 +271,20 @@ class PHYSICS_PT_domain_boundary(PhysicButtonsPanel):
if fluid.slip_type == 'PARTIALSLIP':
col.prop(fluid, "partial_slip_factor", slider=True, text="Amount")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Surface:")
- col.prop(fluid, "surface_smoothing", text="Smoothing")
+ col.prop(fluid, "surface_smooth", text="Smoothing")
col.prop(fluid, "surface_subdivisions", text="Subdivisions")
-class PHYSICS_PT_domain_particles(PhysicButtonsPanel):
+class PHYSICS_PT_domain_particles(PhysicButtonsPanel, bpy.types.Panel):
bl_label = "Domain Particles"
bl_default_closed = True
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
md = context.fluid
- return md and (md.settings.type == 'DOMAIN')
+ return md and md.settings and (md.settings.type == 'DOMAIN')
def draw(self, context):
layout = self.layout
@@ -314,23 +296,12 @@ class PHYSICS_PT_domain_particles(PhysicButtonsPanel):
col.prop(fluid, "generate_particles")
-classes = [
- PHYSICS_PT_fluid,
- PHYSICS_PT_domain_gravity,
- PHYSICS_PT_domain_boundary,
- PHYSICS_PT_domain_particles]
-
-
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/properties_physics_smoke.py b/release/scripts/ui/properties_physics_smoke.py
index c5357c515de..d2e37ef29fb 100644
--- a/release/scripts/ui/properties_physics_smoke.py
+++ b/release/scripts/ui/properties_physics_smoke.py
@@ -19,25 +19,24 @@
# <pep8 compliant>
import bpy
-narrowui = bpy.context.user_preferences.view.properties_width_check
-
from properties_physics_common import point_cache_ui
from properties_physics_common import effector_weights_ui
-class PhysicButtonsPanel(bpy.types.Panel):
+class PhysicButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "physics"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
ob = context.object
rd = context.scene.render
return (ob and ob.type == 'MESH') and (not rd.use_game_engine)
-class PHYSICS_PT_smoke(PhysicButtonsPanel):
+class PHYSICS_PT_smoke(PhysicButtonsPanel, bpy.types.Panel):
bl_label = "Smoke"
def draw(self, context):
@@ -45,7 +44,6 @@ class PHYSICS_PT_smoke(PhysicButtonsPanel):
md = context.smoke
ob = context.object
- wide_ui = context.region.width > narrowui
split = layout.split()
@@ -55,20 +53,16 @@ class PHYSICS_PT_smoke(PhysicButtonsPanel):
split.operator("object.modifier_remove", text="Remove")
row = split.row(align=True)
- row.prop(md, "render", text="")
- row.prop(md, "realtime", text="")
+ row.prop(md, "show_render", text="")
+ row.prop(md, "show_viewport", text="")
else:
# add modifier
split.operator("object.modifier_add", text="Add").type = 'SMOKE'
- if wide_ui:
- split.label()
+ split.label()
if md:
- if wide_ui:
- layout.prop(md, "smoke_type", expand=True)
- else:
- layout.prop(md, "smoke_type", text="")
+ layout.prop(md, "smoke_type", expand=True)
if md.smoke_type == 'DOMAIN':
domain = md.domain_settings
@@ -77,50 +71,60 @@ class PHYSICS_PT_smoke(PhysicButtonsPanel):
col = split.column()
col.label(text="Resolution:")
- col.prop(domain, "maxres", text="Divisions")
- col.label(text="Particle:")
- col.prop(domain, "initial_velocity", text="Initial Velocity")
+ col.prop(domain, "resolution_max", text="Divisions")
+ col.label(text="Time:")
+ col.prop(domain, "time_scale", text="Scale")
+ col.label(text="Border Collisions:")
+ col.prop(domain, "collision_extents", text="")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Behavior:")
col.prop(domain, "alpha")
col.prop(domain, "beta")
- col.prop(domain, "dissolve_smoke", text="Dissolve")
+ col.prop(domain, "vorticity")
+ col.prop(domain, "use_dissolve_smoke", text="Dissolve")
sub = col.column()
- sub.active = domain.dissolve_smoke
+ sub.active = domain.use_dissolve_smoke
sub.prop(domain, "dissolve_speed", text="Time")
- sub.prop(domain, "dissolve_smoke_log", text="Slow")
+ sub.prop(domain, "use_dissolve_smoke_log", text="Slow")
elif md.smoke_type == 'FLOW':
+
flow = md.flow_settings
split = layout.split()
col = split.column()
- col.prop(flow, "outflow")
+ col.prop(flow, "use_outflow")
col.label(text="Particle System:")
col.prop_object(flow, "psys", ob, "particle_systems", text="")
- if md.flow_settings.outflow:
- if wide_ui:
- col = split.column()
- else:
- if wide_ui:
- col = split.column()
- col.label(text="Behavior:")
- col.prop(flow, "temperature")
- col.prop(flow, "density")
+ sub = col.column()
+ sub.active = not md.flow_settings.outflow
+
+ sub.prop(flow, "initial_velocity", text="Initial Velocity")
+ sub = sub.column()
+ sub.active = flow.initial_velocity
+ sub.prop(flow, "velocity_factor", text="Multiplier")
+
+
+ sub = split.column()
+ sub.active = not md.flow_settings.outflow
+ sub.label(text="Behavior:")
+ sub.prop(flow, "temperature")
+ sub.prop(flow, "density")
+ sub.prop(flow, "use_absolute")
#elif md.smoke_type == 'COLLISION':
# layout.separator()
-class PHYSICS_PT_smoke_groups(PhysicButtonsPanel):
+class PHYSICS_PT_smoke_groups(PhysicButtonsPanel, bpy.types.Panel):
bl_label = "Smoke Groups"
bl_default_closed = True
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
md = context.smoke
return md and (md.smoke_type == 'DOMAIN')
@@ -128,7 +132,6 @@ class PHYSICS_PT_smoke_groups(PhysicButtonsPanel):
layout = self.layout
group = context.smoke.domain_settings
- wide_ui = context.region.width > narrowui
split = layout.split()
@@ -137,19 +140,19 @@ class PHYSICS_PT_smoke_groups(PhysicButtonsPanel):
col.prop(group, "fluid_group", text="")
#col.label(text="Effector Group:")
- #col.prop(group, "eff_group", text="")
+ #col.prop(group, "effector_group", text="")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Collision Group:")
- col.prop(group, "coll_group", text="")
+ col.prop(group, "collision_group", text="")
-class PHYSICS_PT_smoke_cache(PhysicButtonsPanel):
+class PHYSICS_PT_smoke_cache(PhysicButtonsPanel, bpy.types.Panel):
bl_label = "Smoke Cache"
bl_default_closed = True
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
md = context.smoke
return md and (md.smoke_type == 'DOMAIN')
@@ -160,53 +163,54 @@ class PHYSICS_PT_smoke_cache(PhysicButtonsPanel):
cache = md.point_cache_low
layout.label(text="Compression:")
- layout.prop(md, "smoke_cache_comp", expand=True)
+ layout.prop(md, "point_cache_compress_type", expand=True)
- point_cache_ui(self, context, cache, (cache.baked is False), 'SMOKE')
+ point_cache_ui(self, context, cache, (cache.is_baked is False), 'SMOKE')
-class PHYSICS_PT_smoke_highres(PhysicButtonsPanel):
+class PHYSICS_PT_smoke_highres(PhysicButtonsPanel, bpy.types.Panel):
bl_label = "Smoke High Resolution"
bl_default_closed = True
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
md = context.smoke
return md and (md.smoke_type == 'DOMAIN')
def draw_header(self, context):
md = context.smoke.domain_settings
- self.layout.prop(md, "highres", text="")
+ self.layout.prop(md, "use_high_resolution", text="")
def draw(self, context):
layout = self.layout
md = context.smoke.domain_settings
- wide_ui = context.region.width > narrowui
- layout.active = md.highres
+ layout.active = md.use_high_resolution
split = layout.split()
col = split.column()
col.label(text="Resolution:")
col.prop(md, "amplify", text="Divisions")
- col.prop(md, "viewhighres")
+ col.prop(md, "smooth_emitter")
+ col.prop(md, "show_high_resolution")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Noise Method:")
col.row().prop(md, "noise_type", text="")
col.prop(md, "strength")
-class PHYSICS_PT_smoke_cache_highres(PhysicButtonsPanel):
+class PHYSICS_PT_smoke_cache_highres(PhysicButtonsPanel, bpy.types.Panel):
bl_label = "Smoke High Resolution Cache"
bl_default_closed = True
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
md = context.smoke
- return md and (md.smoke_type == 'DOMAIN') and md.domain_settings.highres
+ return md and (md.smoke_type == 'DOMAIN') and md.domain_settings.use_high_resolution
def draw(self, context):
layout = self.layout
@@ -215,16 +219,17 @@ class PHYSICS_PT_smoke_cache_highres(PhysicButtonsPanel):
cache = md.point_cache_high
layout.label(text="Compression:")
- layout.prop(md, "smoke_cache_high_comp", expand=True)
+ layout.prop(md, "point_cache_compress_high_type", expand=True)
- point_cache_ui(self, context, cache, (cache.baked is False), 'SMOKE')
+ point_cache_ui(self, context, cache, (cache.is_baked is False), 'SMOKE')
-class PHYSICS_PT_smoke_field_weights(PhysicButtonsPanel):
+class PHYSICS_PT_smoke_field_weights(PhysicButtonsPanel, bpy.types.Panel):
bl_label = "Smoke Field Weights"
bl_default_closed = True
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
smoke = context.smoke
return (smoke and smoke.smoke_type == 'DOMAIN')
@@ -233,25 +238,12 @@ class PHYSICS_PT_smoke_field_weights(PhysicButtonsPanel):
effector_weights_ui(self, context, domain.effector_weights)
-classes = [
- PHYSICS_PT_smoke,
- PHYSICS_PT_smoke_field_weights,
- PHYSICS_PT_smoke_cache,
- PHYSICS_PT_smoke_highres,
- PHYSICS_PT_smoke_groups,
- PHYSICS_PT_smoke_cache_highres]
-
-
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/properties_physics_softbody.py b/release/scripts/ui/properties_physics_softbody.py
index 60149cf533b..3722182caa1 100644
--- a/release/scripts/ui/properties_physics_softbody.py
+++ b/release/scripts/ui/properties_physics_softbody.py
@@ -19,23 +19,22 @@
# <pep8 compliant>
import bpy
-narrowui = bpy.context.user_preferences.view.properties_width_check
-
from properties_physics_common import point_cache_ui
from properties_physics_common import effector_weights_ui
def softbody_panel_enabled(md):
- return (md.point_cache.baked is False)
+ return (md.point_cache.is_baked is False)
-class PhysicButtonsPanel(bpy.types.Panel):
+class PhysicButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "physics"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
ob = context.object
rd = context.scene.render
# return (ob and ob.type == 'MESH') and (not rd.use_game_engine)
@@ -43,7 +42,7 @@ class PhysicButtonsPanel(bpy.types.Panel):
return (ob and (ob.type == 'MESH' or ob.type == 'LATTICE'or ob.type == 'CURVE')) and (not rd.use_game_engine)
-class PHYSICS_PT_softbody(PhysicButtonsPanel):
+class PHYSICS_PT_softbody(PhysicButtonsPanel, bpy.types.Panel):
bl_label = "Soft Body"
def draw(self, context):
@@ -51,7 +50,6 @@ class PHYSICS_PT_softbody(PhysicButtonsPanel):
md = context.soft_body
ob = context.object
- wide_ui = context.region.width > narrowui
split = layout.split()
@@ -61,13 +59,12 @@ class PHYSICS_PT_softbody(PhysicButtonsPanel):
split.operator("object.modifier_remove", text="Remove")
row = split.row(align=True)
- row.prop(md, "render", text="")
- row.prop(md, "realtime", text="")
+ row.prop(md, "show_render", text="")
+ row.prop(md, "show_viewport", text="")
else:
# add modifier
split.operator("object.modifier_add", text="Add").type = 'SOFT_BODY'
- if wide_ui:
- split.column()
+ split.column()
if md:
softbody = md.settings
@@ -82,17 +79,17 @@ class PHYSICS_PT_softbody(PhysicButtonsPanel):
col.prop(softbody, "mass")
col.prop_object(softbody, "mass_vertex_group", ob, "vertex_groups", text="Mass:")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Simulation:")
col.prop(softbody, "speed")
-class PHYSICS_PT_softbody_cache(PhysicButtonsPanel):
+class PHYSICS_PT_softbody_cache(PhysicButtonsPanel, bpy.types.Panel):
bl_label = "Soft Body Cache"
bl_default_closed = True
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return context.soft_body
def draw(self, context):
@@ -100,11 +97,12 @@ class PHYSICS_PT_softbody_cache(PhysicButtonsPanel):
point_cache_ui(self, context, md.point_cache, softbody_panel_enabled(md), 'SOFTBODY')
-class PHYSICS_PT_softbody_goal(PhysicButtonsPanel):
+class PHYSICS_PT_softbody_goal(PhysicButtonsPanel, bpy.types.Panel):
bl_label = "Soft Body Goal"
bl_default_closed = True
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return context.soft_body
def draw_header(self, context):
@@ -119,7 +117,6 @@ class PHYSICS_PT_softbody_goal(PhysicButtonsPanel):
md = context.soft_body
softbody = md.settings
ob = context.object
- wide_ui = context.region.width > narrowui
layout.active = softbody.use_goal and softbody_panel_enabled(md)
@@ -135,8 +132,7 @@ class PHYSICS_PT_softbody_goal(PhysicButtonsPanel):
sub.prop(softbody, "goal_min", text="Minimum")
sub.prop(softbody, "goal_max", text="Maximum")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Goal Settings:")
col.prop(softbody, "goal_spring", text="Stiffness")
col.prop(softbody, "goal_friction", text="Damping")
@@ -144,11 +140,12 @@ class PHYSICS_PT_softbody_goal(PhysicButtonsPanel):
layout.prop_object(softbody, "goal_vertex_group", ob, "vertex_groups", text="Vertex Group")
-class PHYSICS_PT_softbody_edge(PhysicButtonsPanel):
+class PHYSICS_PT_softbody_edge(PhysicButtonsPanel, bpy.types.Panel):
bl_label = "Soft Body Edges"
bl_default_closed = True
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return context.soft_body
def draw_header(self, context):
@@ -163,7 +160,6 @@ class PHYSICS_PT_softbody_edge(PhysicButtonsPanel):
md = context.soft_body
softbody = md.settings
ob = context.object
- wide_ui = context.region.width > narrowui
layout.active = softbody.use_edges and softbody_panel_enabled(md)
@@ -173,17 +169,16 @@ class PHYSICS_PT_softbody_edge(PhysicButtonsPanel):
col.label(text="Springs:")
col.prop(softbody, "pull")
col.prop(softbody, "push")
- col.prop(softbody, "damp")
+ col.prop(softbody, "damping")
col.prop(softbody, "plastic")
- col.prop(softbody, "bending")
+ col.prop(softbody, "bend")
col.prop(softbody, "spring_length", text="Length")
col.prop_object(softbody, "spring_vertex_group", ob, "vertex_groups", text="Springs:")
- if wide_ui:
- col = split.column()
- col.prop(softbody, "stiff_quads")
+ col = split.column()
+ col.prop(softbody, "use_stiff_quads")
sub = col.column()
- sub.active = softbody.stiff_quads
+ sub.active = softbody.use_stiff_quads
sub.prop(softbody, "shear")
col.label(text="Aerodynamics:")
@@ -195,37 +190,34 @@ class PHYSICS_PT_softbody_edge(PhysicButtonsPanel):
col.label(text="Collision:")
- col.prop(softbody, "edge_collision", text="Edge")
- col.prop(softbody, "face_collision", text="Face")
+ col.prop(softbody, "use_edge_collision", text="Edge")
+ col.prop(softbody, "use_face_collision", text="Face")
-class PHYSICS_PT_softbody_collision(PhysicButtonsPanel):
+class PHYSICS_PT_softbody_collision(PhysicButtonsPanel, bpy.types.Panel):
bl_label = "Soft Body Self Collision"
bl_default_closed = True
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return context.soft_body
def draw_header(self, context):
softbody = context.soft_body.settings
self.layout.active = softbody_panel_enabled(context.soft_body)
- self.layout.prop(softbody, "self_collision", text="")
+ self.layout.prop(softbody, "use_self_collision", text="")
def draw(self, context):
layout = self.layout
md = context.soft_body
softbody = md.settings
- wide_ui = context.region.width > narrowui
- layout.active = softbody.self_collision and softbody_panel_enabled(md)
+ layout.active = softbody.use_self_collision and softbody_panel_enabled(md)
layout.label(text="Collision Ball Size Calculation:")
- if wide_ui:
- layout.prop(softbody, "collision_type", expand=True)
- else:
- layout.prop(softbody, "collision_type", text="")
+ layout.prop(softbody, "collision_type", expand=True)
col = layout.column(align=True)
col.label(text="Ball:")
@@ -234,11 +226,12 @@ class PHYSICS_PT_softbody_collision(PhysicButtonsPanel):
col.prop(softbody, "ball_damp", text="Dampening")
-class PHYSICS_PT_softbody_solver(PhysicButtonsPanel):
+class PHYSICS_PT_softbody_solver(PhysicButtonsPanel, bpy.types.Panel):
bl_label = "Soft Body Solver"
bl_default_closed = True
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return context.soft_body
def draw(self, context):
@@ -246,7 +239,6 @@ class PHYSICS_PT_softbody_solver(PhysicButtonsPanel):
md = context.soft_body
softbody = md.settings
- wide_ui = context.region.width > narrowui
layout.active = softbody_panel_enabled(md)
@@ -255,27 +247,27 @@ class PHYSICS_PT_softbody_solver(PhysicButtonsPanel):
col = split.column(align=True)
col.label(text="Step Size:")
- col.prop(softbody, "minstep")
- col.prop(softbody, "maxstep")
- col.prop(softbody, "auto_step", text="Auto-Step")
+ col.prop(softbody, "step_min")
+ col.prop(softbody, "step_max")
+ col.prop(softbody, "use_auto_step", text="Auto-Step")
- if wide_ui:
- col = split.column()
- col.prop(softbody, "error_limit")
+ col = split.column()
+ col.prop(softbody, "error_threshold")
col.label(text="Helpers:")
col.prop(softbody, "choke")
col.prop(softbody, "fuzzy")
layout.label(text="Diagnostics:")
- layout.prop(softbody, "diagnose")
- layout.prop(softbody, "estimate_matrix")
+ layout.prop(softbody, "use_diagnose")
+ layout.prop(softbody, "use_estimate_matrix")
-class PHYSICS_PT_softbody_field_weights(PhysicButtonsPanel):
+class PHYSICS_PT_softbody_field_weights(PhysicButtonsPanel, bpy.types.Panel):
bl_label = "Soft Body Field Weights"
bl_default_closed = True
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return (context.soft_body)
def draw(self, context):
@@ -285,26 +277,12 @@ class PHYSICS_PT_softbody_field_weights(PhysicButtonsPanel):
effector_weights_ui(self, context, softbody.effector_weights)
-classes = [
- PHYSICS_PT_softbody,
- PHYSICS_PT_softbody_cache,
- PHYSICS_PT_softbody_goal,
- PHYSICS_PT_softbody_edge,
- PHYSICS_PT_softbody_collision,
- PHYSICS_PT_softbody_solver,
- PHYSICS_PT_softbody_field_weights]
-
-
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/properties_render.py b/release/scripts/ui/properties_render.py
index 829416b86d3..2072aa00b76 100644
--- a/release/scripts/ui/properties_render.py
+++ b/release/scripts/ui/properties_render.py
@@ -19,8 +19,6 @@
# <pep8 compliant>
import bpy
-narrowui = bpy.context.user_preferences.view.properties_width_check
-
class RENDER_MT_presets(bpy.types.Menu):
bl_label = "Render Presets"
@@ -36,18 +34,19 @@ class RENDER_MT_ffmpeg_presets(bpy.types.Menu):
draw = bpy.types.Menu.draw_preset
-class RenderButtonsPanel(bpy.types.Panel):
+class RenderButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "render"
# COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
rd = context.scene.render
- return (context.scene and rd.use_game_engine is False) and (rd.engine in self.COMPAT_ENGINES)
+ return (context.scene and rd.use_game_engine is False) and (rd.engine in cls.COMPAT_ENGINES)
-class RENDER_PT_render(RenderButtonsPanel):
+class RENDER_PT_render(RenderButtonsPanel, bpy.types.Panel):
bl_label = "Render"
COMPAT_ENGINES = {'BLENDER_RENDER'}
@@ -55,21 +54,19 @@ class RENDER_PT_render(RenderButtonsPanel):
layout = self.layout
rd = context.scene.render
- wide_ui = context.region.width > narrowui
split = layout.split()
col = split.column()
col.operator("render.render", text="Image", icon='RENDER_STILL')
- if wide_ui:
- col = split.column()
+ col = split.column()
col.operator("render.render", text="Animation", icon='RENDER_ANIMATION').animation = True
layout.prop(rd, "display_mode", text="Display")
-class RENDER_PT_layers(RenderButtonsPanel):
+class RENDER_PT_layers(RenderButtonsPanel, bpy.types.Panel):
bl_label = "Layers"
bl_default_closed = True
COMPAT_ENGINES = {'BLENDER_RENDER'}
@@ -79,7 +76,6 @@ class RENDER_PT_layers(RenderButtonsPanel):
scene = context.scene
rd = scene.render
- wide_ui = context.region.width > narrowui
row = layout.row()
row.template_list(rd, "layers", rd, "active_layer_index", rows=2)
@@ -100,11 +96,11 @@ class RENDER_PT_layers(RenderButtonsPanel):
col.label(text="")
col.prop(rl, "light_override", text="Light")
col.prop(rl, "material_override", text="Material")
- if wide_ui:
- col = split.column()
- col.prop(rl, "visible_layers", text="Layer")
+
+ col = split.column()
+ col.prop(rl, "layers", text="Layer")
col.label(text="Mask Layers:")
- col.prop(rl, "zmask_layers", text="")
+ col.prop(rl, "layers_zmask", text="")
layout.separator()
@@ -113,21 +109,21 @@ class RENDER_PT_layers(RenderButtonsPanel):
split = layout.split()
col = split.column()
- col.prop(rl, "zmask")
+ col.prop(rl, "use_zmask")
row = col.row()
- row.prop(rl, "zmask_negate", text="Negate")
- row.active = rl.zmask
- col.prop(rl, "all_z")
+ row.prop(rl, "invert_zmask", text="Negate")
+ row.active = rl.use_zmask
+ col.prop(rl, "use_all_z")
col = split.column()
- col.prop(rl, "solid")
- col.prop(rl, "halo")
- col.prop(rl, "ztransp")
+ col.prop(rl, "use_solid")
+ col.prop(rl, "use_halo")
+ col.prop(rl, "use_ztransp")
col = split.column()
- col.prop(rl, "sky")
- col.prop(rl, "edge")
- col.prop(rl, "strand")
+ col.prop(rl, "use_sky")
+ col.prop(rl, "use_edge_enhance")
+ col.prop(rl, "use_strand")
layout.separator()
@@ -135,46 +131,45 @@ class RENDER_PT_layers(RenderButtonsPanel):
col = split.column()
col.label(text="Passes:")
- col.prop(rl, "pass_combined")
- col.prop(rl, "pass_z")
- col.prop(rl, "pass_vector")
- col.prop(rl, "pass_normal")
- col.prop(rl, "pass_uv")
- col.prop(rl, "pass_mist")
- col.prop(rl, "pass_object_index")
- col.prop(rl, "pass_color")
-
- if wide_ui:
- col = split.column()
+ col.prop(rl, "use_pass_combined")
+ col.prop(rl, "use_pass_z")
+ col.prop(rl, "use_pass_vector")
+ col.prop(rl, "use_pass_normal")
+ col.prop(rl, "use_pass_uv")
+ col.prop(rl, "use_pass_mist")
+ col.prop(rl, "use_pass_object_index")
+ col.prop(rl, "use_pass_color")
+
+ col = split.column()
col.label()
- col.prop(rl, "pass_diffuse")
+ col.prop(rl, "use_pass_diffuse")
row = col.row()
- row.prop(rl, "pass_specular")
- row.prop(rl, "pass_specular_exclude", text="")
+ row.prop(rl, "use_pass_specular")
+ row.prop(rl, "exclude_specular", text="")
row = col.row()
- row.prop(rl, "pass_shadow")
- row.prop(rl, "pass_shadow_exclude", text="")
+ row.prop(rl, "use_pass_shadow")
+ row.prop(rl, "exclude_shadow", text="")
row = col.row()
- row.prop(rl, "pass_emit")
- row.prop(rl, "pass_emit_exclude", text="")
+ row.prop(rl, "use_pass_emit")
+ row.prop(rl, "exclude_emit", text="")
row = col.row()
- row.prop(rl, "pass_ao")
- row.prop(rl, "pass_ao_exclude", text="")
+ row.prop(rl, "use_pass_ambient_occlusion")
+ row.prop(rl, "exclude_ambient_occlusion", text="")
row = col.row()
- row.prop(rl, "pass_environment")
- row.prop(rl, "pass_environment_exclude", text="")
+ row.prop(rl, "use_pass_environment")
+ row.prop(rl, "exclude_environment", text="")
row = col.row()
- row.prop(rl, "pass_indirect")
- row.prop(rl, "pass_indirect_exclude", text="")
+ row.prop(rl, "use_pass_indirect")
+ row.prop(rl, "exclude_indirect", text="")
row = col.row()
- row.prop(rl, "pass_reflection")
- row.prop(rl, "pass_reflection_exclude", text="")
+ row.prop(rl, "use_pass_reflection")
+ row.prop(rl, "exclude_reflection", text="")
row = col.row()
- row.prop(rl, "pass_refraction")
- row.prop(rl, "pass_refraction_exclude", text="")
+ row.prop(rl, "use_pass_refraction")
+ row.prop(rl, "exclude_refraction", text="")
-class RENDER_PT_shading(RenderButtonsPanel):
+class RENDER_PT_shading(RenderButtonsPanel, bpy.types.Panel):
bl_label = "Shading"
COMPAT_ENGINES = {'BLENDER_RENDER'}
@@ -182,7 +177,6 @@ class RENDER_PT_shading(RenderButtonsPanel):
layout = self.layout
rd = context.scene.render
- wide_ui = context.region.width > narrowui
split = layout.split()
@@ -192,14 +186,13 @@ class RENDER_PT_shading(RenderButtonsPanel):
col.prop(rd, "use_sss", text="Subsurface Scattering")
col.prop(rd, "use_envmaps", text="Environment Map")
- if wide_ui:
- col = split.column()
- col.prop(rd, "use_raytracing", text="Ray Tracing")
- col.prop(rd, "color_management")
+ col = split.column()
+ col.prop(rd, "use_raytrace", text="Ray Tracing")
+ col.prop(rd, "use_color_management")
col.prop(rd, "alpha_mode", text="Alpha")
-class RENDER_PT_performance(RenderButtonsPanel):
+class RENDER_PT_performance(RenderButtonsPanel, bpy.types.Panel):
bl_label = "Performance"
bl_default_closed = True
COMPAT_ENGINES = {'BLENDER_RENDER'}
@@ -208,7 +201,6 @@ class RENDER_PT_performance(RenderButtonsPanel):
layout = self.layout
rd = context.scene.render
- wide_ui = context.region.width > narrowui
split = layout.split()
@@ -223,27 +215,26 @@ class RENDER_PT_performance(RenderButtonsPanel):
sub.prop(rd, "parts_x", text="X")
sub.prop(rd, "parts_y", text="Y")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Memory:")
sub = col.column()
- sub.enabled = not (rd.use_border or rd.full_sample)
- sub.prop(rd, "save_buffers")
+ sub.enabled = not (rd.use_border or rd.use_full_sample)
+ sub.prop(rd, "use_save_buffers")
sub = col.column()
sub.active = rd.use_compositing
- sub.prop(rd, "free_image_textures")
+ sub.prop(rd, "use_free_image_textures")
sub = col.column()
- sub.active = rd.use_raytracing
+ sub.active = rd.use_raytrace
sub.label(text="Acceleration structure:")
- sub.prop(rd, "raytrace_structure", text="")
- if rd.raytrace_structure == 'OCTREE':
+ sub.prop(rd, "raytrace_method", text="")
+ if rd.raytrace_method == 'OCTREE':
sub.prop(rd, "octree_resolution", text="Resolution")
else:
sub.prop(rd, "use_instances", text="Instances")
sub.prop(rd, "use_local_coords", text="Local Coordinates")
-class RENDER_PT_post_processing(RenderButtonsPanel):
+class RENDER_PT_post_processing(RenderButtonsPanel, bpy.types.Panel):
bl_label = "Post Processing"
bl_default_closed = True
COMPAT_ENGINES = {'BLENDER_RENDER'}
@@ -252,7 +243,6 @@ class RENDER_PT_post_processing(RenderButtonsPanel):
layout = self.layout
rd = context.scene.render
- wide_ui = context.region.width > narrowui
split = layout.split()
@@ -260,8 +250,7 @@ class RENDER_PT_post_processing(RenderButtonsPanel):
col.prop(rd, "use_compositing")
col.prop(rd, "use_sequencer")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(rd, "dither_intensity", text="Dither", slider=True)
layout.separator()
@@ -269,25 +258,22 @@ class RENDER_PT_post_processing(RenderButtonsPanel):
split = layout.split()
col = split.column()
- col.prop(rd, "fields", text="Fields")
+ col.prop(rd, "use_fields", text="Fields")
sub = col.column()
- sub.active = rd.fields
+ sub.active = rd.use_fields
sub.row().prop(rd, "field_order", expand=True)
- sub.prop(rd, "fields_still", text="Still")
+ sub.prop(rd, "use_fields_still", text="Still")
- if wide_ui:
- col = split.column()
- else:
- col.separator()
- col.prop(rd, "edge")
+ col = split.column()
+ col.prop(rd, "use_edge_enhance")
sub = col.column()
- sub.active = rd.edge
+ sub.active = rd.use_edge_enhance
sub.prop(rd, "edge_threshold", text="Threshold", slider=True)
sub.prop(rd, "edge_color", text="")
-class RENDER_PT_output(RenderButtonsPanel):
+class RENDER_PT_output(RenderButtonsPanel, bpy.types.Panel):
bl_label = "Output"
COMPAT_ENGINES = {'BLENDER_RENDER'}
@@ -295,83 +281,81 @@ class RENDER_PT_output(RenderButtonsPanel):
layout = self.layout
rd = context.scene.render
- wide_ui = context.region.width > narrowui
+ file_format = rd.file_format
- layout.prop(rd, "output_path", text="")
+ layout.prop(rd, "filepath", text="")
split = layout.split()
col = split.column()
col.prop(rd, "file_format", text="")
col.row().prop(rd, "color_mode", text="Color", expand=True)
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(rd, "use_file_extension")
col.prop(rd, "use_overwrite")
col.prop(rd, "use_placeholder")
- if rd.file_format in ('AVI_JPEG', 'JPEG'):
+ if file_format in ('AVI_JPEG', 'JPEG'):
split = layout.split()
split.prop(rd, "file_quality", slider=True)
+
+ if file_format == 'PNG':
+ split = layout.split()
+ split.prop(rd, "file_quality", slider=True, text="Compression")
- elif rd.file_format == 'MULTILAYER':
+ elif file_format == 'MULTILAYER':
split = layout.split()
col = split.column()
col.label(text="Codec:")
col.prop(rd, "exr_codec", text="")
- if wide_ui:
- col = split.column()
+ col = split.column()
- elif rd.file_format == 'OPEN_EXR':
+ elif file_format == 'OPEN_EXR':
split = layout.split()
col = split.column()
col.label(text="Codec:")
col.prop(rd, "exr_codec", text="")
- if wide_ui:
- subsplit = split.split()
- col = subsplit.column()
- col.prop(rd, "exr_half")
+ subsplit = split.split()
+ col = subsplit.column()
+ col.prop(rd, "use_exr_half")
col.prop(rd, "exr_zbuf")
- if wide_ui:
- col = subsplit.column()
+ col = subsplit.column()
col.prop(rd, "exr_preview")
- elif rd.file_format == 'JPEG2000':
+ elif file_format == 'JPEG2000':
split = layout.split()
col = split.column()
col.label(text="Depth:")
col.row().prop(rd, "jpeg2k_depth", expand=True)
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(rd, "jpeg2k_preset", text="")
col.prop(rd, "jpeg2k_ycc")
- elif rd.file_format in ('CINEON', 'DPX'):
+ elif file_format in ('CINEON', 'DPX'):
split = layout.split()
col = split.column()
- col.prop(rd, "cineon_log", text="Convert to Log")
+ col.prop(rd, "use_cineon_log", text="Convert to Log")
- if wide_ui:
- col = split.column(align=True)
- col.active = rd.cineon_log
+ col = split.column(align=True)
+ col.active = rd.use_cineon_log
col.prop(rd, "cineon_black", text="Black")
col.prop(rd, "cineon_white", text="White")
col.prop(rd, "cineon_gamma", text="Gamma")
- elif rd.file_format == 'TIFF':
+ elif file_format == 'TIFF':
split = layout.split()
- split.prop(rd, "tiff_bit")
+ split.prop(rd, "use_tiff_16bit")
- elif rd.file_format == 'QUICKTIME_CARBON':
+ elif file_format == 'QUICKTIME_CARBON':
split = layout.split()
split.operator("scene.render_data_set_quicktime_codec")
- elif rd.file_format == 'QUICKTIME_QTKIT':
+ elif file_format == 'QUICKTIME_QTKIT':
split = layout.split()
col = split.column()
col.prop(rd, "quicktime_codec_type", text="Video Codec")
@@ -384,30 +368,32 @@ class RENDER_PT_output(RenderButtonsPanel):
col = split.column()
if rd.quicktime_audiocodec_type == 'LPCM':
col.prop(rd, "quicktime_audio_bitdepth", text="")
- if wide_ui:
- col = split.column()
+
+ col = split.column()
col.prop(rd, "quicktime_audio_samplerate", text="")
split = layout.split()
col = split.column()
if rd.quicktime_audiocodec_type == 'AAC':
col.prop(rd, "quicktime_audio_bitrate")
- if wide_ui:
- subsplit = split.split()
- col = subsplit.column()
+
+ subsplit = split.split()
+ col = subsplit.column()
+
if rd.quicktime_audiocodec_type == 'AAC':
col.prop(rd, "quicktime_audio_codec_isvbr")
- if wide_ui:
- col = subsplit.column()
+
+ col = subsplit.column()
col.prop(rd, "quicktime_audio_resampling_hq")
-class RENDER_PT_encoding(RenderButtonsPanel):
+class RENDER_PT_encoding(RenderButtonsPanel, bpy.types.Panel):
bl_label = "Encoding"
bl_default_closed = True
COMPAT_ENGINES = {'BLENDER_RENDER'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
rd = context.scene.render
return rd.file_format in ('FFMPEG', 'XVID', 'H264', 'THEORA')
@@ -415,7 +401,6 @@ class RENDER_PT_encoding(RenderButtonsPanel):
layout = self.layout
rd = context.scene.render
- wide_ui = context.region.width > narrowui
layout.menu("RENDER_MT_ffmpeg_presets", text="Presets")
@@ -424,19 +409,17 @@ class RENDER_PT_encoding(RenderButtonsPanel):
col = split.column()
col.prop(rd, "ffmpeg_format")
if rd.ffmpeg_format in ('AVI', 'QUICKTIME', 'MKV', 'OGG'):
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(rd, "ffmpeg_codec")
else:
- if wide_ui:
- split.label()
+ split.label()
split = layout.split()
col = split.column()
col.prop(rd, "ffmpeg_video_bitrate")
- if wide_ui:
- col = split.column()
+
+ col = split.column()
col.prop(rd, "ffmpeg_gopsize")
split = layout.split()
@@ -447,8 +430,7 @@ class RENDER_PT_encoding(RenderButtonsPanel):
col.prop(rd, "ffmpeg_maxrate", text="Maximum")
col.prop(rd, "ffmpeg_buffersize", text="Buffer")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(rd, "ffmpeg_autosplit")
col.label(text="Mux:")
@@ -458,7 +440,7 @@ class RENDER_PT_encoding(RenderButtonsPanel):
# Audio:
sub = layout.column()
- if rd.ffmpeg_format not in ('MP3'):
+ if rd.ffmpeg_format not in ('MP3', ):
sub.prop(rd, "ffmpeg_audio_codec", text="Audio Codec")
sub.separator()
@@ -469,26 +451,24 @@ class RENDER_PT_encoding(RenderButtonsPanel):
col.prop(rd, "ffmpeg_audio_bitrate")
col.prop(rd, "ffmpeg_audio_mixrate")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(rd, "ffmpeg_audio_volume", slider=True)
-class RENDER_PT_antialiasing(RenderButtonsPanel):
+class RENDER_PT_antialiasing(RenderButtonsPanel, bpy.types.Panel):
bl_label = "Anti-Aliasing"
COMPAT_ENGINES = {'BLENDER_RENDER'}
def draw_header(self, context):
rd = context.scene.render
- self.layout.prop(rd, "render_antialiasing", text="")
+ self.layout.prop(rd, "use_antialiasing", text="")
def draw(self, context):
layout = self.layout
rd = context.scene.render
- wide_ui = context.region.width > narrowui
- layout.active = rd.render_antialiasing
+ layout.active = rd.use_antialiasing
split = layout.split()
@@ -496,15 +476,14 @@ class RENDER_PT_antialiasing(RenderButtonsPanel):
col.row().prop(rd, "antialiasing_samples", expand=True)
sub = col.row()
sub.enabled = not rd.use_border
- sub.prop(rd, "full_sample")
+ sub.prop(rd, "use_full_sample")
- if wide_ui:
- col = split.column()
- col.prop(rd, "pixel_filter", text="")
+ col = split.column()
+ col.prop(rd, "pixel_filter_type", text="")
col.prop(rd, "filter_size", text="Size")
-class RENDER_PT_motion_blur(RenderButtonsPanel):
+class RENDER_PT_motion_blur(RenderButtonsPanel, bpy.types.Panel):
bl_label = "Full Sample Motion Blur"
bl_default_closed = True
COMPAT_ENGINES = {'BLENDER_RENDER'}
@@ -512,20 +491,19 @@ class RENDER_PT_motion_blur(RenderButtonsPanel):
def draw_header(self, context):
rd = context.scene.render
- self.layout.prop(rd, "motion_blur", text="")
+ self.layout.prop(rd, "use_motion_blur", text="")
def draw(self, context):
layout = self.layout
rd = context.scene.render
- layout.active = rd.motion_blur
+ layout.active = rd.use_motion_blur
row = layout.row()
row.prop(rd, "motion_blur_samples")
row.prop(rd, "motion_blur_shutter")
-
-class RENDER_PT_dimensions(RenderButtonsPanel):
+class RENDER_PT_dimensions(RenderButtonsPanel, bpy.types.Panel):
bl_label = "Dimensions"
COMPAT_ENGINES = {'BLENDER_RENDER'}
@@ -534,7 +512,6 @@ class RENDER_PT_dimensions(RenderButtonsPanel):
scene = context.scene
rd = scene.render
- wide_ui = context.region.width > narrowui
row = layout.row(align=True)
row.menu("RENDER_MT_presets", text=bpy.types.RENDER_MT_presets.bl_label)
@@ -557,10 +534,9 @@ class RENDER_PT_dimensions(RenderButtonsPanel):
row.prop(rd, "use_border", text="Border")
sub = row.row()
sub.active = rd.use_border
- sub.prop(rd, "crop_to_border", text="Crop")
+ sub.prop(rd, "use_crop_to_border", text="Crop")
- if wide_ui:
- col = split.column()
+ col = split.column()
sub = col.column(align=True)
sub.label(text="Frame Range:")
sub.prop(scene, "frame_start", text="Start")
@@ -572,7 +548,7 @@ class RENDER_PT_dimensions(RenderButtonsPanel):
sub.prop(rd, "fps_base", text="/")
-class RENDER_PT_stamp(RenderButtonsPanel):
+class RENDER_PT_stamp(RenderButtonsPanel, bpy.types.Panel):
bl_label = "Stamp"
bl_default_closed = True
COMPAT_ENGINES = {'BLENDER_RENDER'}
@@ -580,45 +556,43 @@ class RENDER_PT_stamp(RenderButtonsPanel):
def draw_header(self, context):
rd = context.scene.render
- self.layout.prop(rd, "render_stamp", text="")
+ self.layout.prop(rd, "use_stamp", text="")
def draw(self, context):
layout = self.layout
rd = context.scene.render
- wide_ui = context.region.width > narrowui
- layout.active = rd.render_stamp
+ layout.active = rd.use_stamp
split = layout.split()
col = split.column()
- col.prop(rd, "stamp_time", text="Time")
- col.prop(rd, "stamp_date", text="Date")
- col.prop(rd, "stamp_render_time", text="RenderTime")
- col.prop(rd, "stamp_frame", text="Frame")
- col.prop(rd, "stamp_scene", text="Scene")
- col.prop(rd, "stamp_camera", text="Camera")
- col.prop(rd, "stamp_filename", text="Filename")
- col.prop(rd, "stamp_marker", text="Marker")
- col.prop(rd, "stamp_sequencer_strip", text="Seq. Strip")
+ col.prop(rd, "use_stamp_time", text="Time")
+ col.prop(rd, "use_stamp_date", text="Date")
+ col.prop(rd, "use_stamp_render_time", text="RenderTime")
+ col.prop(rd, "use_stamp_frame", text="Frame")
+ col.prop(rd, "use_stamp_scene", text="Scene")
+ col.prop(rd, "use_stamp_camera", text="Camera")
+ col.prop(rd, "use_stamp_filename", text="Filename")
+ col.prop(rd, "use_stamp_marker", text="Marker")
+ col.prop(rd, "use_stamp_sequencer_strip", text="Seq. Strip")
- if wide_ui:
- col = split.column()
- col.active = rd.render_stamp
+ col = split.column()
+ col.active = rd.use_stamp
col.prop(rd, "stamp_foreground", slider=True)
col.prop(rd, "stamp_background", slider=True)
col.separator()
col.prop(rd, "stamp_font_size", text="Font Size")
row = layout.split(percentage=0.2)
- row.prop(rd, "stamp_note", text="Note")
+ row.prop(rd, "use_stamp_note", text="Note")
sub = row.row()
- sub.active = rd.stamp_note
+ sub.active = rd.use_stamp_note
sub.prop(rd, "stamp_note_text", text="")
-class RENDER_PT_bake(RenderButtonsPanel):
+class RENDER_PT_bake(RenderButtonsPanel, bpy.types.Panel):
bl_label = "Bake"
bl_default_closed = True
COMPAT_ENGINES = {'BLENDER_RENDER'}
@@ -627,71 +601,42 @@ class RENDER_PT_bake(RenderButtonsPanel):
layout = self.layout
rd = context.scene.render
- wide_ui = context.region.width > narrowui
layout.operator("object.bake_image", icon='RENDER_STILL')
- if wide_ui:
- layout.prop(rd, "bake_type")
- else:
- layout.prop(rd, "bake_type", text="")
+ layout.prop(rd, "bake_type")
if rd.bake_type == 'NORMALS':
- if wide_ui:
- layout.prop(rd, "bake_normal_space")
- else:
- layout.prop(rd, "bake_normal_space", text="")
+ layout.prop(rd, "bake_normal_space")
elif rd.bake_type in ('DISPLACEMENT', 'AO'):
- layout.prop(rd, "bake_normalized")
+ layout.prop(rd, "use_bake_normalize")
# col.prop(rd, "bake_aa_mode")
- # col.prop(rd, "bake_enable_aa")
+ # col.prop(rd, "use_bake_antialiasing")
layout.separator()
split = layout.split()
col = split.column()
- col.prop(rd, "bake_clear")
+ col.prop(rd, "use_bake_clear")
col.prop(rd, "bake_margin")
col.prop(rd, "bake_quad_split", text="Split")
- if wide_ui:
- col = split.column()
- col.prop(rd, "bake_active")
+ col = split.column()
+ col.prop(rd, "use_bake_selected_to_active")
sub = col.column()
- sub.active = rd.bake_active
+ sub.active = rd.use_bake_selected_to_active
sub.prop(rd, "bake_distance")
sub.prop(rd, "bake_bias")
-classes = [
- RENDER_MT_presets,
- RENDER_MT_ffmpeg_presets,
- RENDER_PT_render,
- RENDER_PT_layers,
- RENDER_PT_dimensions,
- RENDER_PT_antialiasing,
- RENDER_PT_motion_blur,
- RENDER_PT_shading,
- RENDER_PT_output,
- RENDER_PT_encoding,
- RENDER_PT_performance,
- RENDER_PT_post_processing,
- RENDER_PT_stamp,
- RENDER_PT_bake]
-
-
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/properties_scene.py b/release/scripts/ui/properties_scene.py
index 06ad1eda835..c6b9d7522e0 100644
--- a/release/scripts/ui/properties_scene.py
+++ b/release/scripts/ui/properties_scene.py
@@ -20,46 +20,35 @@
import bpy
from rna_prop_ui import PropertyPanel
-narrowui = bpy.context.user_preferences.view.properties_width_check
-
-class SceneButtonsPanel(bpy.types.Panel):
+class SceneButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "scene"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return context.scene
-class SCENE_PT_scene(SceneButtonsPanel):
+class SCENE_PT_scene(SceneButtonsPanel, bpy.types.Panel):
bl_label = "Scene"
COMPAT_ENGINES = {'BLENDER_RENDER'}
def draw(self, context):
layout = self.layout
- wide_ui = context.region.width > narrowui
scene = context.scene
- if wide_ui:
- layout.prop(scene, "camera")
- layout.prop(scene, "set", text="Background")
- else:
- layout.prop(scene, "camera", text="")
- layout.prop(scene, "set", text="")
-
-
-class SCENE_PT_custom_props(SceneButtonsPanel, PropertyPanel):
- _context_path = "scene"
+ layout.prop(scene, "camera")
+ layout.prop(scene, "background_set", text="Background")
-class SCENE_PT_unit(SceneButtonsPanel):
+class SCENE_PT_unit(SceneButtonsPanel, bpy.types.Panel):
bl_label = "Units"
COMPAT_ENGINES = {'BLENDER_RENDER'}
def draw(self, context):
layout = self.layout
- wide_ui = context.region.width > narrowui
unit = context.scene.unit_settings
col = layout.column()
@@ -71,21 +60,19 @@ class SCENE_PT_unit(SceneButtonsPanel):
col = split.column()
col.prop(unit, "scale_length", text="Scale")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(unit, "use_separate")
layout.column().prop(unit, "rotation_units")
-class SCENE_PT_keying_sets(SceneButtonsPanel):
+class SCENE_PT_keying_sets(SceneButtonsPanel, bpy.types.Panel):
bl_label = "Keying Sets"
def draw(self, context):
layout = self.layout
scene = context.scene
- wide_ui = context.region.width > narrowui
row = layout.row()
col = row.column()
@@ -96,7 +83,7 @@ class SCENE_PT_keying_sets(SceneButtonsPanel):
col.operator("anim.keying_set_remove", icon='ZOOMOUT', text="")
ks = scene.active_keying_set
- if ks and ks.absolute:
+ if ks and ks.is_path_absolute:
row = layout.row()
col = row.column()
@@ -107,26 +94,25 @@ class SCENE_PT_keying_sets(SceneButtonsPanel):
op = subcol.operator("anim.keying_set_export", text="Export to File")
op.filepath = "keyingset.py"
- if wide_ui:
- col = row.column()
+ col = row.column()
col.label(text="Keyframing Settings:")
- col.prop(ks, "insertkey_needed", text="Needed")
- col.prop(ks, "insertkey_visual", text="Visual")
- col.prop(ks, "insertkey_xyz_to_rgb", text="XYZ to RGB")
+ col.prop(ks, "use_insertkey_needed", text="Needed")
+ col.prop(ks, "use_insertkey_visual", text="Visual")
+ col.prop(ks, "use_insertkey_xyz_to_rgb", text="XYZ to RGB")
-class SCENE_PT_keying_set_paths(SceneButtonsPanel):
+class SCENE_PT_keying_set_paths(SceneButtonsPanel, bpy.types.Panel):
bl_label = "Active Keying Set"
- def poll(self, context):
- return (context.scene.active_keying_set and context.scene.active_keying_set.absolute)
+ @classmethod
+ def poll(cls, context):
+ return (context.scene.active_keying_set and context.scene.active_keying_set.is_path_absolute)
def draw(self, context):
layout = self.layout
scene = context.scene
ks = scene.active_keying_set
- wide_ui = context.region.width > narrowui
row = layout.row()
row.label(text="Paths:")
@@ -152,24 +138,23 @@ class SCENE_PT_keying_set_paths(SceneButtonsPanel):
col = row.column()
col.label(text="Array Target:")
- col.prop(ksp, "entire_array")
- if ksp.entire_array is False:
+ col.prop(ksp, "use_entire_array")
+ if ksp.use_entire_array is False:
col.prop(ksp, "array_index")
- if wide_ui:
- col = row.column()
+ col = row.column()
col.label(text="F-Curve Grouping:")
- col.prop(ksp, "grouping")
- if ksp.grouping == 'NAMED':
+ col.prop(ksp, "group_method")
+ if ksp.group_method == 'NAMED':
col.prop(ksp, "group")
col.label(text="Keyframing Settings:")
- col.prop(ksp, "insertkey_needed", text="Needed")
- col.prop(ksp, "insertkey_visual", text="Visual")
- col.prop(ksp, "insertkey_xyz_to_rgb", text="XYZ to RGB")
+ col.prop(ksp, "use_insertkey_needed", text="Needed")
+ col.prop(ksp, "use_insertkey_visual", text="Visual")
+ col.prop(ksp, "use_insertkey_xyz_to_rgb", text="XYZ to RGB")
-class SCENE_PT_physics(SceneButtonsPanel):
+class SCENE_PT_physics(SceneButtonsPanel, bpy.types.Panel):
bl_label = "Gravity"
COMPAT_ENGINES = {'BLENDER_RENDER'}
@@ -180,17 +165,13 @@ class SCENE_PT_physics(SceneButtonsPanel):
layout = self.layout
scene = context.scene
- wide_ui = context.region.width > narrowui
layout.active = scene.use_gravity
- if wide_ui:
- layout.prop(scene, "gravity", text="")
- else:
- layout.column().prop(scene, "gravity", text="")
+ layout.prop(scene, "gravity", text="")
-class SCENE_PT_simplify(SceneButtonsPanel):
+class SCENE_PT_simplify(SceneButtonsPanel, bpy.types.Panel):
bl_label = "Simplify"
COMPAT_ENGINES = {'BLENDER_RENDER'}
@@ -203,7 +184,6 @@ class SCENE_PT_simplify(SceneButtonsPanel):
layout = self.layout
scene = context.scene
rd = scene.render
- wide_ui = context.region.width > narrowui
layout.active = rd.use_simplify
@@ -213,14 +193,18 @@ class SCENE_PT_simplify(SceneButtonsPanel):
col.prop(rd, "simplify_subdivision", text="Subdivision")
col.prop(rd, "simplify_child_particles", text="Child Particles")
- col.prop(rd, "simplify_triangulate")
+ col.prop(rd, "use_simplify_triangulate")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(rd, "simplify_shadow_samples", text="Shadow Samples")
col.prop(rd, "simplify_ao_sss", text="AO and SSS")
+class SCENE_PT_custom_props(SceneButtonsPanel, PropertyPanel, bpy.types.Panel):
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ _context_path = "scene"
+
+
from bpy.props import *
@@ -255,13 +239,13 @@ class ANIM_OT_keying_set_export(bpy.types.Operator):
f.write("# Keying Set Level declarations\n")
f.write("ks= scene.add_keying_set(name=\"%s\")\n" % ks.name)
- if ks.absolute is False:
- f.write("ks.absolute = False\n")
+ if not ks.is_path_absolute:
+ f.write("ks.is_path_absolute = False\n")
f.write("\n")
- f.write("ks.insertkey_needed = %s\n" % ks.insertkey_needed)
- f.write("ks.insertkey_visual = %s\n" % ks.insertkey_visual)
- f.write("ks.insertkey_xyz_to_rgb = %s\n" % ks.insertkey_xyz_to_rgb)
+ f.write("ks.use_insertkey_needed = %s\n" % ks.use_insertkey_needed)
+ f.write("ks.use_insertkey_visual = %s\n" % ks.use_insertkey_visual)
+ f.write("ks.use_insertkey_xyz_to_rgb = %s\n" % ks.use_insertkey_xyz_to_rgb)
f.write("\n")
@@ -308,17 +292,17 @@ class ANIM_OT_keying_set_export(bpy.types.Operator):
f.write("%s, '%s'" % (id_bpy_path, ksp.data_path))
# array index settings (if applicable)
- if ksp.entire_array:
+ if ksp.use_entire_array:
f.write(", index=-1")
else:
f.write(", index=%d" % ksp.array_index)
# grouping settings (if applicable)
# NOTE: the current default is KEYINGSET, but if this changes, change this code too
- if ksp.grouping == 'NAMED':
- f.write(", grouping_method='%s', group_name=\"%s\"" % (ksp.grouping, ksp.group))
- elif ksp.grouping != 'KEYINGSET':
- f.write(", grouping_method='%s'" % ksp.grouping)
+ if ksp.group_method == 'NAMED':
+ f.write(", group_method='%s', group_name=\"%s\"" % (ksp.group_method, ksp.group))
+ elif ksp.group_method != 'KEYINGSET':
+ f.write(", group_method='%s'" % ksp.group_method)
# finish off
f.write(")\n")
@@ -334,29 +318,12 @@ class ANIM_OT_keying_set_export(bpy.types.Operator):
return {'RUNNING_MODAL'}
-classes = [
- SCENE_PT_scene,
- SCENE_PT_unit,
- SCENE_PT_keying_sets,
- SCENE_PT_keying_set_paths,
- SCENE_PT_physics,
- SCENE_PT_simplify,
-
- SCENE_PT_custom_props,
-
- ANIM_OT_keying_set_export]
-
-
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/properties_texture.py b/release/scripts/ui/properties_texture.py
index 2bfbe188c9e..5163ae884ed 100644
--- a/release/scripts/ui/properties_texture.py
+++ b/release/scripts/ui/properties_texture.py
@@ -20,8 +20,6 @@
import bpy
from rna_prop_ui import PropertyPanel
-narrowui = bpy.context.user_preferences.view.properties_width_check
-
class TEXTURE_MT_specials(bpy.types.Menu):
bl_label = "Texture Specials"
@@ -65,47 +63,29 @@ def context_tex_datablock(context):
return idblock
-class TextureButtonsPanel(bpy.types.Panel):
+class TextureButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "texture"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
tex = context.texture
- if not tex:
- return False
- engine = context.scene.render.engine
- return (tex.type != 'NONE' or tex.use_nodes) and (engine in self.COMPAT_ENGINES)
-
+ return tex and (tex.type != 'NONE' or tex.use_nodes) and (context.scene.render.engine in cls.COMPAT_ENGINES)
-class TEXTURE_PT_preview(TextureButtonsPanel):
- bl_label = "Preview"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
- def draw(self, context):
- layout = self.layout
-
- tex = context.texture
- slot = getattr(context, "texture_slot", None)
- idblock = context_tex_datablock(context)
-
- if idblock:
- layout.template_preview(tex, parent=idblock, slot=slot)
- else:
- layout.template_preview(tex, slot=slot)
-
-
-class TEXTURE_PT_context_texture(TextureButtonsPanel):
+class TEXTURE_PT_context_texture(TextureButtonsPanel, bpy.types.Panel):
bl_label = ""
bl_show_header = False
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
engine = context.scene.render.engine
if not hasattr(context, "texture_slot"):
return False
return ((context.material or context.world or context.lamp or context.brush or context.texture)
- and (engine in self.COMPAT_ENGINES))
+ and (engine in cls.COMPAT_ENGINES))
def draw(self, context):
layout = self.layout
@@ -113,7 +93,6 @@ class TEXTURE_PT_context_texture(TextureButtonsPanel):
node = context.texture_node
space = context.space_data
tex = context.texture
- wide_ui = context.region.width > narrowui
idblock = context_tex_datablock(context)
tex_collection = space.pin_id == None and type(idblock) != bpy.types.Brush and not node
@@ -127,11 +106,8 @@ class TEXTURE_PT_context_texture(TextureButtonsPanel):
col.operator("texture.slot_move", text="", icon='TRIA_DOWN').type = 'DOWN'
col.menu("TEXTURE_MT_specials", icon='DOWNARROW_HLT', text="")
- if wide_ui:
- split = layout.split(percentage=0.65)
- col = split.column()
- else:
- col = layout.column()
+ split = layout.split(percentage=0.65)
+ col = split.column()
if tex_collection:
col.template_ID(idblock, "active_texture", new="texture.new")
@@ -143,11 +119,10 @@ class TEXTURE_PT_context_texture(TextureButtonsPanel):
if space.pin_id:
col.template_ID(space, "pin_id")
- if wide_ui:
- col = split.column()
+ col = split.column()
if not space.pin_id:
- col.prop(space, "brush_texture", text="Brush", toggle=True)
+ col.prop(space, "show_brush_texture", text="Brush", toggle=True)
if tex:
split = layout.split(percentage=0.2)
@@ -159,23 +134,28 @@ class TEXTURE_PT_context_texture(TextureButtonsPanel):
split.prop(slot, "output_node", text="")
else:
- if wide_ui:
- split.label(text="Type:")
- split.prop(tex, "type", text="")
- else:
- layout.prop(tex, "type", text="")
+ split.label(text="Type:")
+ split.prop(tex, "type", text="")
-class TEXTURE_PT_custom_props(TextureButtonsPanel, PropertyPanel):
- _context_path = "texture"
+class TEXTURE_PT_preview(TextureButtonsPanel, bpy.types.Panel):
+ bl_label = "Preview"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
- def poll(self, context): # use alternate poll since NONE texture type is ok
- engine = context.scene.render.engine
- return context.texture and (engine in self.COMPAT_ENGINES)
+ def draw(self, context):
+ layout = self.layout
+
+ tex = context.texture
+ slot = getattr(context, "texture_slot", None)
+ idblock = context_tex_datablock(context)
+
+ if idblock:
+ layout.template_preview(tex, parent=idblock, slot=slot)
+ else:
+ layout.template_preview(tex, slot=slot)
-class TEXTURE_PT_colors(TextureButtonsPanel):
+class TEXTURE_PT_colors(TextureButtonsPanel, bpy.types.Panel):
bl_label = "Colors"
bl_default_closed = True
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
@@ -184,7 +164,6 @@ class TEXTURE_PT_colors(TextureButtonsPanel):
layout = self.layout
tex = context.texture
- wide_ui = context.region.width > narrowui
layout.prop(tex, "use_color_ramp", text="Ramp")
if tex.use_color_ramp:
@@ -199,10 +178,9 @@ class TEXTURE_PT_colors(TextureButtonsPanel):
sub.prop(tex, "factor_green", text="G")
sub.prop(tex, "factor_blue", text="B")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Adjust:")
- col.prop(tex, "brightness")
+ col.prop(tex, "intensity")
col.prop(tex, "contrast")
col.prop(tex, "saturation")
@@ -212,19 +190,21 @@ class TEXTURE_PT_colors(TextureButtonsPanel):
class TextureSlotPanel(TextureButtonsPanel):
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
if not hasattr(context, "texture_slot"):
return False
engine = context.scene.render.engine
- return TextureButtonsPanel.poll(self, context) and (engine in self.COMPAT_ENGINES)
+ return TextureButtonsPanel.poll(self, context) and (engine in cls.COMPAT_ENGINES)
-class TEXTURE_PT_mapping(TextureSlotPanel):
+class TEXTURE_PT_mapping(TextureSlotPanel, bpy.types.Panel):
bl_label = "Mapping"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
idblock = context_tex_datablock(context)
if type(idblock) == bpy.types.Brush and not context.sculpt_object:
return False
@@ -233,7 +213,7 @@ class TEXTURE_PT_mapping(TextureSlotPanel):
return False
engine = context.scene.render.engine
- return (engine in self.COMPAT_ENGINES)
+ return (engine in cls.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
@@ -242,16 +222,15 @@ class TEXTURE_PT_mapping(TextureSlotPanel):
tex = context.texture_slot
# textype = context.texture
- wide_ui = context.region.width > narrowui
if type(idblock) != bpy.types.Brush:
split = layout.split(percentage=0.3)
col = split.column()
col.label(text="Coordinates:")
col = split.column()
- col.prop(tex, "texture_coordinates", text="")
+ col.prop(tex, "texture_coords", text="")
- if tex.texture_coordinates == 'ORCO':
+ if tex.texture_coords == 'ORCO':
"""
ob = context.object
if ob and ob.type == 'MESH':
@@ -259,7 +238,7 @@ class TEXTURE_PT_mapping(TextureSlotPanel):
split.label(text="Mesh:")
split.prop(ob.data, "texco_mesh", text="")
"""
- elif tex.texture_coordinates == 'UV':
+ elif tex.texture_coords == 'UV':
split = layout.split(percentage=0.3)
split.label(text="Layer:")
ob = context.object
@@ -268,7 +247,7 @@ class TEXTURE_PT_mapping(TextureSlotPanel):
else:
split.prop(tex, "uv_layer", text="")
- elif tex.texture_coordinates == 'OBJECT':
+ elif tex.texture_coords == 'OBJECT':
split = layout.split(percentage=0.3)
split.label(text="Object:")
split.prop(tex, "object", text="")
@@ -290,38 +269,35 @@ class TEXTURE_PT_mapping(TextureSlotPanel):
split = layout.split()
col = split.column()
- if tex.texture_coordinates in ('ORCO', 'UV'):
- col.prop(tex, "from_dupli")
- elif tex.texture_coordinates == 'OBJECT':
- col.prop(tex, "from_original")
- elif wide_ui:
+ if tex.texture_coords in ('ORCO', 'UV'):
+ col.prop(tex, "use_from_dupli")
+ elif tex.texture_coords == 'OBJECT':
+ col.prop(tex, "use_from_original")
+ else:
col.label()
- if wide_ui:
- col = split.column()
+ col = split.column()
row = col.row()
- row.prop(tex, "x_mapping", text="")
- row.prop(tex, "y_mapping", text="")
- row.prop(tex, "z_mapping", text="")
+ row.prop(tex, "mapping_x", text="")
+ row.prop(tex, "mapping_y", text="")
+ row.prop(tex, "mapping_z", text="")
split = layout.split()
col = split.column()
col.prop(tex, "offset")
- if wide_ui:
- col = split.column()
- else:
- col.separator()
+ col = split.column()
- col.prop(tex, "size")
+ col.prop(tex, "scale")
-class TEXTURE_PT_influence(TextureSlotPanel):
+class TEXTURE_PT_influence(TextureSlotPanel, bpy.types.Panel):
bl_label = "Influence"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
idblock = context_tex_datablock(context)
if type(idblock) == bpy.types.Brush:
return False
@@ -330,7 +306,7 @@ class TEXTURE_PT_influence(TextureSlotPanel):
return False
engine = context.scene.render.engine
- return (engine in self.COMPAT_ENGINES)
+ return (engine in cls.COMPAT_ENGINES)
def draw(self, context):
@@ -340,7 +316,6 @@ class TEXTURE_PT_influence(TextureSlotPanel):
# textype = context.texture
tex = context.texture_slot
- wide_ui = context.region.width > narrowui
def factor_but(layout, active, toggle, factor, name):
row = layout.row(align=True)
@@ -355,70 +330,66 @@ class TEXTURE_PT_influence(TextureSlotPanel):
col = split.column()
col.label(text="Diffuse:")
- factor_but(col, tex.map_diffuse, "map_diffuse", "diffuse_factor", "Intensity")
- factor_but(col, tex.map_colordiff, "map_colordiff", "colordiff_factor", "Color")
- factor_but(col, tex.map_alpha, "map_alpha", "alpha_factor", "Alpha")
- factor_but(col, tex.map_translucency, "map_translucency", "translucency_factor", "Translucency")
+ factor_but(col, tex.use_map_diffuse, "use_map_diffuse", "diffuse_factor", "Intensity")
+ factor_but(col, tex.use_map_color_diffuse, "use_map_color_diffuse", "diffuse_color_factor", "Color")
+ factor_but(col, tex.use_map_alpha, "use_map_alpha", "alpha_factor", "Alpha")
+ factor_but(col, tex.use_map_translucency, "use_map_translucency", "translucency_factor", "Translucency")
col.label(text="Specular:")
- factor_but(col, tex.map_specular, "map_specular", "specular_factor", "Intensity")
- factor_but(col, tex.map_colorspec, "map_colorspec", "colorspec_factor", "Color")
- factor_but(col, tex.map_hardness, "map_hardness", "hardness_factor", "Hardness")
+ factor_but(col, tex.use_map_specular, "use_map_specular", "specular_factor", "Intensity")
+ factor_but(col, tex.use_map_color_spec, "use_map_color_spec", "specular_color_factor", "Color")
+ factor_but(col, tex.use_map_hardness, "use_map_hardness", "hardness_factor", "Hardness")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Shading:")
- factor_but(col, tex.map_ambient, "map_ambient", "ambient_factor", "Ambient")
- factor_but(col, tex.map_emit, "map_emit", "emit_factor", "Emit")
- factor_but(col, tex.map_mirror, "map_mirror", "mirror_factor", "Mirror")
- factor_but(col, tex.map_raymir, "map_raymir", "raymir_factor", "Ray Mirror")
+ factor_but(col, tex.use_map_ambient, "use_map_ambient", "ambient_factor", "Ambient")
+ factor_but(col, tex.use_map_emit, "use_map_emit", "emit_factor", "Emit")
+ factor_but(col, tex.use_map_mirror, "use_map_mirror", "mirror_factor", "Mirror")
+ factor_but(col, tex.use_map_raymir, "use_map_raymir", "raymir_factor", "Ray Mirror")
col.label(text="Geometry:")
# XXX replace 'or' when displacement is fixed to not rely on normal influence value.
- factor_but(col, (tex.map_normal or tex.map_displacement), "map_normal", "normal_factor", "Normal")
- factor_but(col, tex.map_warp, "map_warp", "warp_factor", "Warp")
- factor_but(col, tex.map_displacement, "map_displacement", "displacement_factor", "Displace")
+ factor_but(col, (tex.use_map_normal or tex.use_map_displacement), "use_map_normal", "normal_factor", "Normal")
+ factor_but(col, tex.use_map_warp, "use_map_warp", "warp_factor", "Warp")
+ factor_but(col, tex.use_map_displacement, "use_map_displacement", "displacement_factor", "Displace")
#sub = col.column()
- #sub.active = tex.map_translucency or tex.map_emit or tex.map_alpha or tex.map_raymir or tex.map_hardness or tex.map_ambient or tex.map_specularity or tex.map_reflection or tex.map_mirror
+ #sub.active = tex.use_map_translucency or tex.map_emit or tex.map_alpha or tex.map_raymir or tex.map_hardness or tex.map_ambient or tex.map_specularity or tex.map_reflection or tex.map_mirror
#sub.prop(tex, "default_value", text="Amount", slider=True)
elif idblock.type == 'VOLUME':
split = layout.split()
col = split.column()
- factor_but(col, tex.map_density, "map_density", "density_factor", "Density")
- factor_but(col, tex.map_emission, "map_emission", "emission_factor", "Emission")
- factor_but(col, tex.map_scattering, "map_scattering", "scattering_factor", "Scattering")
- factor_but(col, tex.map_reflection, "map_reflection", "reflection_factor", "Reflection")
-
- if wide_ui:
- col = split.column()
- col.label(text=" ")
- factor_but(col, tex.map_coloremission, "map_coloremission", "coloremission_factor", "Emission Color")
- factor_but(col, tex.map_colortransmission, "map_colortransmission", "colortransmission_factor", "Transmission Color")
- factor_but(col, tex.map_colorreflection, "map_colorreflection", "colorreflection_factor", "Reflection Color")
+ factor_but(col, tex.use_map_density, "use_map_density", "density_factor", "Density")
+ factor_but(col, tex.use_map_emission, "use_map_emission", "emission_factor", "Emission")
+ factor_but(col, tex.use_map_scatter, "use_map_scattering", "scattering_factor", "Scattering")
+ factor_but(col, tex.use_map_reflect, "use_map_reflection", "reflection_factor", "Reflection")
+
+ col = split.column()
+ col.label(text=" ")
+ factor_but(col, tex.use_map_color_emission, "use_map_color_emission", "emission_color_factor", "Emission Color")
+ factor_but(col, tex.use_map_color_transmission, "use_map_color_transmission", "transmission_color_factor", "Transmission Color")
+ factor_but(col, tex.use_map_color_reflection, "use_map_color_reflection", "reflection_color_factor", "Reflection Color")
elif type(idblock) == bpy.types.Lamp:
split = layout.split()
col = split.column()
- factor_but(col, tex.map_color, "map_color", "color_factor", "Color")
+ factor_but(col, tex.use_map_color, "map_color", "color_factor", "Color")
- if wide_ui:
- col = split.column()
- factor_but(col, tex.map_shadow, "map_shadow", "shadow_factor", "Shadow")
+ col = split.column()
+ factor_but(col, tex.use_map_shadow, "map_shadow", "shadow_factor", "Shadow")
elif type(idblock) == bpy.types.World:
split = layout.split()
col = split.column()
- factor_but(col, tex.map_blend, "map_blend", "blend_factor", "Blend")
- factor_but(col, tex.map_horizon, "map_horizon", "horizon_factor", "Horizon")
+ factor_but(col, tex.use_map_blend, "use_map_blend", "blend_factor", "Blend")
+ factor_but(col, tex.use_map_horizon, "use_map_horizon", "horizon_factor", "Horizon")
- if wide_ui:
- col = split.column()
- factor_but(col, tex.map_zenith_up, "map_zenith_up", "zenith_up_factor", "Zenith Up")
- factor_but(col, tex.map_zenith_down, "map_zenith_down", "zenith_down_factor", "Zenith Down")
+ col = split.column()
+ factor_but(col, tex.use_map_zenith_up, "use_map_zenith_up", "zenith_up_factor", "Zenith Up")
+ factor_but(col, tex.use_map_zenith_down, "use_map_zenith_down", "zenith_down_factor", "Zenith Down")
layout.separator()
@@ -426,15 +397,14 @@ class TEXTURE_PT_influence(TextureSlotPanel):
col = split.column()
col.prop(tex, "blend_type", text="Blend")
- col.prop(tex, "rgb_to_intensity")
+ col.prop(tex, "use_rgb_to_intensity")
sub = col.column()
- sub.active = tex.rgb_to_intensity
+ sub.active = tex.use_rgb_to_intensity
sub.prop(tex, "color", text="")
- if wide_ui:
- col = split.column()
- col.prop(tex, "negate", text="Negative")
- col.prop(tex, "stencil")
+ col = split.column()
+ col.prop(tex, "invert", text="Negative")
+ col.prop(tex, "use_stencil")
if type(idblock) in (bpy.types.Material, bpy.types.World):
col.prop(tex, "default_value", text="DVar", slider=True)
@@ -443,15 +413,15 @@ class TEXTURE_PT_influence(TextureSlotPanel):
class TextureTypePanel(TextureButtonsPanel):
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
tex = context.texture
engine = context.scene.render.engine
- return ((tex and tex.type == self.tex_type and not tex.use_nodes) and (engine in self.COMPAT_ENGINES))
+ return tex and ((tex.type == cls.tex_type and not tex.use_nodes) and (engine in cls.COMPAT_ENGINES))
-class TEXTURE_PT_clouds(TextureTypePanel):
+class TEXTURE_PT_clouds(TextureTypePanel, bpy.types.Panel):
bl_label = "Clouds"
tex_type = 'CLOUDS'
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
@@ -460,28 +430,23 @@ class TEXTURE_PT_clouds(TextureTypePanel):
layout = self.layout
tex = context.texture
- wide_ui = context.region.width > narrowui
- layout.prop(tex, "stype", expand=True)
+ layout.prop(tex, "cloud_type", expand=True)
layout.label(text="Noise:")
layout.prop(tex, "noise_type", text="Type", expand=True)
- if wide_ui:
- layout.prop(tex, "noise_basis", text="Basis")
- else:
- layout.prop(tex, "noise_basis", text="")
+ layout.prop(tex, "noise_basis", text="Basis")
split = layout.split()
col = split.column()
- col.prop(tex, "noise_size", text="Size")
+ col.prop(tex, "noise_scale", text="Size")
col.prop(tex, "noise_depth", text="Depth")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(tex, "nabla", text="Nabla")
-class TEXTURE_PT_wood(TextureTypePanel):
+class TEXTURE_PT_wood(TextureTypePanel, bpy.types.Panel):
bl_label = "Wood"
tex_type = 'WOOD'
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
@@ -490,35 +455,28 @@ class TEXTURE_PT_wood(TextureTypePanel):
layout = self.layout
tex = context.texture
- wide_ui = context.region.width > narrowui
- layout.prop(tex, "noisebasis2", expand=True)
- if wide_ui:
- layout.prop(tex, "stype", expand=True)
- else:
- layout.prop(tex, "stype", text="")
+ layout.prop(tex, "noisebasis_2", expand=True)
+ layout.prop(tex, "wood_type", expand=True)
col = layout.column()
- col.active = tex.stype in ('RINGNOISE', 'BANDNOISE')
+ col.active = tex.wood_type in ('RINGNOISE', 'BANDNOISE')
col.label(text="Noise:")
col.row().prop(tex, "noise_type", text="Type", expand=True)
- if wide_ui:
- layout.prop(tex, "noise_basis", text="Basis")
- else:
- layout.prop(tex, "noise_basis", text="")
+ layout.prop(tex, "noise_basis", text="Basis")
split = layout.split()
- split.active = tex.stype in ('RINGNOISE', 'BANDNOISE')
+ split.active = tex.wood_type in ('RINGNOISE', 'BANDNOISE')
col = split.column()
- col.prop(tex, "noise_size", text="Size")
+ col.prop(tex, "noise_scale", text="Size")
col.prop(tex, "turbulence")
col = split.column()
col.prop(tex, "nabla")
-class TEXTURE_PT_marble(TextureTypePanel):
+class TEXTURE_PT_marble(TextureTypePanel, bpy.types.Panel):
bl_label = "Marble"
tex_type = 'MARBLE'
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
@@ -527,30 +485,25 @@ class TEXTURE_PT_marble(TextureTypePanel):
layout = self.layout
tex = context.texture
- wide_ui = context.region.width > narrowui
- layout.prop(tex, "stype", expand=True)
- layout.prop(tex, "noisebasis2", expand=True)
+ layout.prop(tex, "marble_type", expand=True)
+ layout.prop(tex, "noisebasis_2", expand=True)
layout.label(text="Noise:")
layout.prop(tex, "noise_type", text="Type", expand=True)
- if wide_ui:
- layout.prop(tex, "noise_basis", text="Basis")
- else:
- layout.prop(tex, "noise_basis", text="")
+ layout.prop(tex, "noise_basis", text="Basis")
split = layout.split()
col = split.column()
- col.prop(tex, "noise_size", text="Size")
+ col.prop(tex, "noise_scale", text="Size")
col.prop(tex, "noise_depth", text="Depth")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(tex, "turbulence")
col.prop(tex, "nabla")
-class TEXTURE_PT_magic(TextureTypePanel):
+class TEXTURE_PT_magic(TextureTypePanel, bpy.types.Panel):
bl_label = "Magic"
tex_type = 'MAGIC'
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
@@ -559,19 +512,17 @@ class TEXTURE_PT_magic(TextureTypePanel):
layout = self.layout
tex = context.texture
- wide_ui = context.region.width > narrowui
split = layout.split()
col = split.column()
col.prop(tex, "noise_depth", text="Depth")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(tex, "turbulence")
-class TEXTURE_PT_blend(TextureTypePanel):
+class TEXTURE_PT_blend(TextureTypePanel, bpy.types.Panel):
bl_label = "Blend"
tex_type = 'BLEND'
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
@@ -580,20 +531,16 @@ class TEXTURE_PT_blend(TextureTypePanel):
layout = self.layout
tex = context.texture
- wide_ui = context.region.width > narrowui
- if wide_ui:
- layout.prop(tex, "progression")
- else:
- layout.prop(tex, "progression", text="")
+ layout.prop(tex, "progression")
sub = layout.row()
sub.active = (tex.progression in ('LINEAR', 'QUADRATIC', 'EASING', 'RADIAL'))
- sub.prop(tex, "flip_axis", expand=True)
+ sub.prop(tex, "use_flip_axis", expand=True)
-class TEXTURE_PT_stucci(TextureTypePanel):
+class TEXTURE_PT_stucci(TextureTypePanel, bpy.types.Panel):
bl_label = "Stucci"
tex_type = 'STUCCI'
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
@@ -602,27 +549,22 @@ class TEXTURE_PT_stucci(TextureTypePanel):
layout = self.layout
tex = context.texture
- wide_ui = context.region.width > narrowui
- layout.prop(tex, "stype", expand=True)
+ layout.prop(tex, "stucci_type", expand=True)
layout.label(text="Noise:")
layout.prop(tex, "noise_type", text="Type", expand=True)
- if wide_ui:
- layout.prop(tex, "noise_basis", text="Basis")
- else:
- layout.prop(tex, "noise_basis", text="")
+ layout.prop(tex, "noise_basis", text="Basis")
split = layout.split()
col = split.column()
- col.prop(tex, "noise_size", text="Size")
+ col.prop(tex, "noise_scale", text="Size")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(tex, "turbulence")
-class TEXTURE_PT_image(TextureTypePanel):
+class TEXTURE_PT_image(TextureTypePanel, bpy.types.Panel):
bl_label = "Image"
tex_type = 'IMAGE'
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
@@ -637,18 +579,18 @@ class TEXTURE_PT_image(TextureTypePanel):
def texture_filter_common(tex, layout):
layout.label(text="Filter:")
- layout.prop(tex, "filter", text="")
- if tex.mipmap and tex.filter in ('AREA', 'EWA', 'FELINE'):
- if tex.filter == 'FELINE':
+ layout.prop(tex, "filter_type", text="")
+ if tex.use_mipmap and tex.filter_type in ('AREA', 'EWA', 'FELINE'):
+ if tex.filter_type == 'FELINE':
layout.prop(tex, "filter_probes", text="Probes")
else:
layout.prop(tex, "filter_eccentricity", text="Eccentricity")
layout.prop(tex, "filter_size")
- layout.prop(tex, "filter_size_minimum")
+ layout.prop(tex, "use_filter_size_min")
-class TEXTURE_PT_image_sampling(TextureTypePanel):
+class TEXTURE_PT_image_sampling(TextureTypePanel, bpy.types.Panel):
bl_label = "Image Sampling"
bl_default_closed = True
tex_type = 'IMAGE'
@@ -659,37 +601,34 @@ class TEXTURE_PT_image_sampling(TextureTypePanel):
tex = context.texture
# slot = context.texture_slot
- wide_ui = context.region.width > narrowui
split = layout.split()
col = split.column()
col.label(text="Alpha:")
col.prop(tex, "use_alpha", text="Use")
- col.prop(tex, "calculate_alpha", text="Calculate")
+ col.prop(tex, "use_calculate_alpha", text="Calculate")
col.prop(tex, "invert_alpha", text="Invert")
col.separator()
- col.prop(tex, "flip_axis", text="Flip X/Y Axis")
+ col.prop(tex, "use_flip_axis", text="Flip X/Y Axis")
- if wide_ui:
- col = split.column()
- else:
- col.separator()
- col.prop(tex, "normal_map")
+ col = split.column()
+
+ col.prop(tex, "use_normal_map")
row = col.row()
- row.active = tex.normal_map
+ row.active = tex.use_normal_map
row.prop(tex, "normal_space", text="")
- col.prop(tex, "mipmap")
+ col.prop(tex, "use_mipmap")
row = col.row()
- row.active = tex.mipmap
- row.prop(tex, "mipmap_gauss")
- col.prop(tex, "interpolation")
+ row.active = tex.use_mipmap
+ row.prop(tex, "use_mipmap_gauss")
+ col.prop(tex, "use_interpolation")
texture_filter_common(tex, col)
-class TEXTURE_PT_image_mapping(TextureTypePanel):
+class TEXTURE_PT_image_mapping(TextureTypePanel, bpy.types.Panel):
bl_label = "Image Mapping"
bl_default_closed = True
tex_type = 'IMAGE'
@@ -699,12 +638,8 @@ class TEXTURE_PT_image_mapping(TextureTypePanel):
layout = self.layout
tex = context.texture
- wide_ui = context.region.width > narrowui
- if wide_ui:
- layout.prop(tex, "extension")
- else:
- layout.prop(tex, "extension", text="")
+ layout.prop(tex, "extension")
split = layout.split()
@@ -714,21 +649,19 @@ class TEXTURE_PT_image_mapping(TextureTypePanel):
col.prop(tex, "repeat_x", text="X")
col.prop(tex, "repeat_y", text="Y")
- if wide_ui:
- col = split.column(align=True)
+ col = split.column(align=True)
col.label(text="Mirror:")
- col.prop(tex, "mirror_x", text="X")
- col.prop(tex, "mirror_y", text="Y")
+ col.prop(tex, "use_mirror_x", text="X")
+ col.prop(tex, "use_mirror_y", text="Y")
layout.separator()
elif tex.extension == 'CHECKER':
col = split.column(align=True)
row = col.row()
- row.prop(tex, "checker_even", text="Even")
- row.prop(tex, "checker_odd", text="Odd")
+ row.prop(tex, "use_checker_even", text="Even")
+ row.prop(tex, "use_checker_odd", text="Odd")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(tex, "checker_distance", text="Distance")
layout.separator()
@@ -741,27 +674,13 @@ class TEXTURE_PT_image_mapping(TextureTypePanel):
col.prop(tex, "crop_min_x", text="X")
col.prop(tex, "crop_min_y", text="Y")
- if wide_ui:
- col = split.column(align=True)
+ col = split.column(align=True)
col.label(text="Crop Maximum:")
col.prop(tex, "crop_max_x", text="X")
col.prop(tex, "crop_max_y", text="Y")
-class TEXTURE_PT_plugin(TextureTypePanel):
- bl_label = "Plugin"
- tex_type = 'PLUGIN'
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
-
- def draw(self, context):
- layout = self.layout
-
- # tex = context.texture
-
- layout.label(text="Nothing yet")
-
-
-class TEXTURE_PT_envmap(TextureTypePanel):
+class TEXTURE_PT_envmap(TextureTypePanel, bpy.types.Panel):
bl_label = "Environment Map"
tex_type = 'ENVIRONMENT_MAP'
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
@@ -772,7 +691,6 @@ class TEXTURE_PT_envmap(TextureTypePanel):
tex = context.texture
env = tex.environment_map
- wide_ui = context.region.width > narrowui
row = layout.row()
row.prop(env, "source", expand=True)
@@ -790,19 +708,18 @@ class TEXTURE_PT_envmap(TextureTypePanel):
split = layout.split()
col = split.column()
- col.prop(env, "ignore_layers")
+ col.prop(env, "layers_ignore")
col.prop(env, "resolution")
col.prop(env, "depth")
- if wide_ui:
- col = split.column(align=True)
+ col = split.column(align=True)
col.label(text="Clipping:")
col.prop(env, "clip_start", text="Start")
col.prop(env, "clip_end", text="End")
-class TEXTURE_PT_envmap_sampling(TextureTypePanel):
+class TEXTURE_PT_envmap_sampling(TextureTypePanel, bpy.types.Panel):
bl_label = "Environment Map Sampling"
bl_default_closed = True
tex_type = 'ENVIRONMENT_MAP'
@@ -816,7 +733,7 @@ class TEXTURE_PT_envmap_sampling(TextureTypePanel):
texture_filter_common(tex, layout)
-class TEXTURE_PT_musgrave(TextureTypePanel):
+class TEXTURE_PT_musgrave(TextureTypePanel, bpy.types.Panel):
bl_label = "Musgrave"
tex_type = 'MUSGRAVE'
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
@@ -825,22 +742,17 @@ class TEXTURE_PT_musgrave(TextureTypePanel):
layout = self.layout
tex = context.texture
- wide_ui = context.region.width > narrowui
- if wide_ui:
- layout.prop(tex, "musgrave_type")
- else:
- layout.prop(tex, "musgrave_type", text="")
+ layout.prop(tex, "musgrave_type")
split = layout.split()
col = split.column()
- col.prop(tex, "highest_dimension", text="Dimension")
+ col.prop(tex, "dimension_max", text="Dimension")
col.prop(tex, "lacunarity")
col.prop(tex, "octaves")
- if wide_ui:
- col = split.column()
+ col = split.column()
if (tex.musgrave_type in ('HETERO_TERRAIN', 'RIDGED_MULTIFRACTAL', 'HYBRID_MULTIFRACTAL')):
col.prop(tex, "offset")
if (tex.musgrave_type in ('RIDGED_MULTIFRACTAL', 'HYBRID_MULTIFRACTAL')):
@@ -849,22 +761,18 @@ class TEXTURE_PT_musgrave(TextureTypePanel):
layout.label(text="Noise:")
- if wide_ui:
- layout.prop(tex, "noise_basis", text="Basis")
- else:
- layout.prop(tex, "noise_basis", text="")
+ layout.prop(tex, "noise_basis", text="Basis")
split = layout.split()
col = split.column()
- col.prop(tex, "noise_size", text="Size")
+ col.prop(tex, "noise_scale", text="Size")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(tex, "nabla")
-class TEXTURE_PT_voronoi(TextureTypePanel):
+class TEXTURE_PT_voronoi(TextureTypePanel, bpy.types.Panel):
bl_label = "Voronoi"
tex_type = 'VORONOI'
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
@@ -873,7 +781,6 @@ class TEXTURE_PT_voronoi(TextureTypePanel):
layout = self.layout
tex = context.texture
- wide_ui = context.region.width > narrowui
split = layout.split()
@@ -884,11 +791,10 @@ class TEXTURE_PT_voronoi(TextureTypePanel):
sub.active = tex.distance_metric == 'MINKOVSKY'
sub.prop(tex, "minkovsky_exponent", text="Exponent")
col.label(text="Coloring:")
- col.prop(tex, "coloring", text="")
+ col.prop(tex, "color_mode", text="")
col.prop(tex, "noise_intensity", text="Intensity")
- if wide_ui:
- col = split.column()
+ col = split.column()
sub = col.column(align=True)
sub.label(text="Feature Weights:")
sub.prop(tex, "weight_1", text="1", slider=True)
@@ -901,14 +807,13 @@ class TEXTURE_PT_voronoi(TextureTypePanel):
split = layout.split()
col = split.column()
- col.prop(tex, "noise_size", text="Size")
+ col.prop(tex, "noise_scale", text="Size")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(tex, "nabla")
-class TEXTURE_PT_distortednoise(TextureTypePanel):
+class TEXTURE_PT_distortednoise(TextureTypePanel, bpy.types.Panel):
bl_label = "Distorted Noise"
tex_type = 'DISTORTED_NOISE'
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
@@ -917,44 +822,39 @@ class TEXTURE_PT_distortednoise(TextureTypePanel):
layout = self.layout
tex = context.texture
- wide_ui = context.region.width > narrowui
- if wide_ui:
- layout.prop(tex, "noise_distortion")
- layout.prop(tex, "noise_basis", text="Basis")
- else:
- layout.prop(tex, "noise_distortion", text="")
- layout.prop(tex, "noise_basis", text="")
+ layout.prop(tex, "noise_distortion")
+ layout.prop(tex, "noise_basis", text="Basis")
split = layout.split()
col = split.column()
col.prop(tex, "distortion", text="Distortion")
- col.prop(tex, "noise_size", text="Size")
+ col.prop(tex, "noise_scale", text="Size")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.prop(tex, "nabla")
-class TEXTURE_PT_voxeldata(TextureButtonsPanel):
+class TEXTURE_PT_voxeldata(TextureButtonsPanel, bpy.types.Panel):
bl_label = "Voxel Data"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
tex = context.texture
engine = context.scene.render.engine
- return (tex and tex.type == 'VOXEL_DATA' and (engine in self.COMPAT_ENGINES))
+ return tex and (tex.type == 'VOXEL_DATA' and (engine in cls.COMPAT_ENGINES))
def draw(self, context):
layout = self.layout
tex = context.texture
- vd = tex.voxeldata
+ vd = tex.voxel_data
layout.prop(vd, "file_format")
- if vd.file_format in ['BLENDER_VOXEL', 'RAW_8BIT']:
- layout.prop(vd, "source_path")
+ if vd.file_format in ('BLENDER_VOXEL', 'RAW_8BIT'):
+ layout.prop(vd, "filepath")
if vd.file_format == 'RAW_8BIT':
layout.prop(vd, "resolution")
elif vd.file_format == 'SMOKE':
@@ -963,38 +863,35 @@ class TEXTURE_PT_voxeldata(TextureButtonsPanel):
elif vd.file_format == 'IMAGE_SEQUENCE':
layout.template_ID(tex, "image", open="image.open")
layout.template_image(tex, "image", tex.image_user, compact=True)
- #layout.prop(vd, "frames")
+ #layout.prop(vd, "frame_duration")
- layout.prop(vd, "still")
+ layout.prop(vd, "use_still_frame")
row = layout.row()
- row.active = vd.still
- row.prop(vd, "still_frame_number")
+ row.active = vd.use_still_frame
+ row.prop(vd, "still_frame")
layout.prop(vd, "interpolation")
layout.prop(vd, "extension")
layout.prop(vd, "intensity")
-class TEXTURE_PT_pointdensity(TextureButtonsPanel):
+class TEXTURE_PT_pointdensity(TextureButtonsPanel, bpy.types.Panel):
bl_label = "Point Density"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
tex = context.texture
engine = context.scene.render.engine
- return (tex and tex.type == 'POINT_DENSITY' and (engine in self.COMPAT_ENGINES))
+ return tex and (tex.type == 'POINT_DENSITY' and (engine in cls.COMPAT_ENGINES))
def draw(self, context):
layout = self.layout
tex = context.texture
- pd = tex.pointdensity
- wide_ui = context.region.width > narrowui
+ pd = tex.point_density
- if wide_ui:
- layout.prop(pd, "point_source", expand=True)
- else:
- layout.prop(pd, "point_source", text="")
+ layout.prop(pd, "point_source", expand=True)
split = layout.split()
@@ -1009,12 +906,12 @@ class TEXTURE_PT_pointdensity(TextureButtonsPanel):
sub.label(text="System:")
sub.prop_object(pd, "particle_system", pd.object, "particle_systems", text="")
sub.label(text="Cache:")
- sub.prop(pd, "particle_cache", text="")
+ sub.prop(pd, "particle_cache_space", text="")
else:
col.label(text="Object:")
col.prop(pd, "object", text="")
col.label(text="Cache:")
- col.prop(pd, "vertices_cache", text="")
+ col.prop(pd, "vertex_cache_space", text="")
col.separator()
@@ -1025,40 +922,39 @@ class TEXTURE_PT_pointdensity(TextureButtonsPanel):
if pd.color_source in ('PARTICLE_SPEED', 'PARTICLE_AGE'):
layout.template_color_ramp(pd, "color_ramp", expand=True)
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label()
col.prop(pd, "radius")
col.label(text="Falloff:")
col.prop(pd, "falloff", text="")
if pd.falloff == 'SOFT':
- col.prop(pd, "falloff_softness")
+ col.prop(pd, "falloff_soft")
-class TEXTURE_PT_pointdensity_turbulence(TextureButtonsPanel):
+class TEXTURE_PT_pointdensity_turbulence(TextureButtonsPanel, bpy.types.Panel):
bl_label = "Turbulence"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
tex = context.texture
engine = context.scene.render.engine
- return (tex and tex.type == 'POINT_DENSITY' and (engine in self.COMPAT_ENGINES))
+ return tex and (tex.type == 'POINT_DENSITY' and (engine in cls.COMPAT_ENGINES))
def draw_header(self, context):
layout = self.layout
tex = context.texture
- pd = tex.pointdensity
+ pd = tex.point_density
- layout.prop(pd, "turbulence", text="")
+ layout.prop(pd, "use_turbulence", text="")
def draw(self, context):
layout = self.layout
tex = context.texture
- pd = tex.pointdensity
- layout.active = pd.turbulence
- wide_ui = context.region.width > narrowui
+ pd = tex.point_density
+ layout.active = pd.use_turbulence
split = layout.split()
@@ -1068,57 +964,24 @@ class TEXTURE_PT_pointdensity_turbulence(TextureButtonsPanel):
col.label(text="Noise Basis:")
col.prop(pd, "noise_basis", text="")
- if wide_ui:
- col = split.column()
- col.label()
- col.prop(pd, "turbulence_size")
+ col = split.column()
+ col.label()
+ col.prop(pd, "turbulence_scale")
col.prop(pd, "turbulence_depth")
col.prop(pd, "turbulence_strength")
-classes = [
- TEXTURE_MT_specials,
- TEXTURE_MT_envmap_specials,
-
- TEXTURE_PT_context_texture,
- TEXTURE_PT_preview,
-
- TEXTURE_PT_clouds, # Texture Type Panels
- TEXTURE_PT_wood,
- TEXTURE_PT_marble,
- TEXTURE_PT_magic,
- TEXTURE_PT_blend,
- TEXTURE_PT_stucci,
- TEXTURE_PT_image,
- TEXTURE_PT_image_sampling,
- TEXTURE_PT_image_mapping,
- TEXTURE_PT_plugin,
- TEXTURE_PT_envmap,
- TEXTURE_PT_envmap_sampling,
- TEXTURE_PT_musgrave,
- TEXTURE_PT_voronoi,
- TEXTURE_PT_distortednoise,
- TEXTURE_PT_voxeldata,
- TEXTURE_PT_pointdensity,
- TEXTURE_PT_pointdensity_turbulence,
-
- TEXTURE_PT_colors,
- TEXTURE_PT_mapping,
- TEXTURE_PT_influence,
-
- TEXTURE_PT_custom_props]
+class TEXTURE_PT_custom_props(TextureButtonsPanel, PropertyPanel, bpy.types.Panel):
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ _context_path = "texture"
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/properties_world.py b/release/scripts/ui/properties_world.py
index e63d513a4b5..a42516a63b4 100644
--- a/release/scripts/ui/properties_world.py
+++ b/release/scripts/ui/properties_world.py
@@ -20,36 +20,29 @@
import bpy
from rna_prop_ui import PropertyPanel
-narrowui = bpy.context.user_preferences.view.properties_width_check
+# TODO, "color_range" not in the UI
-class WorldButtonsPanel(bpy.types.Panel):
+class WorldButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "world"
# COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here
- def poll(self, context):
- rd = context.scene.render
- return (context.world) and (not rd.use_game_engine) and (rd.engine in self.COMPAT_ENGINES)
-
+ @classmethod
+ def poll(cls, context):
+ return (context.world and context.scene.render.engine in cls.COMPAT_ENGINES)
-class WORLD_PT_preview(WorldButtonsPanel):
- bl_label = "Preview"
- COMPAT_ENGINES = {'BLENDER_RENDER'}
-
- def draw(self, context):
- self.layout.template_preview(context.world)
-
-class WORLD_PT_context_world(WorldButtonsPanel):
+class WORLD_PT_context_world(WorldButtonsPanel, bpy.types.Panel):
bl_label = ""
bl_show_header = False
COMPAT_ENGINES = {'BLENDER_RENDER'}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
rd = context.scene.render
- return (not rd.use_game_engine) and (rd.engine in self.COMPAT_ENGINES)
+ return (not rd.use_game_engine) and (rd.engine in cls.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
@@ -57,178 +50,119 @@ class WORLD_PT_context_world(WorldButtonsPanel):
scene = context.scene
world = context.world
space = context.space_data
- wide_ui = context.region.width > narrowui
-
- if wide_ui:
- split = layout.split(percentage=0.65)
- if scene:
- split.template_ID(scene, "world", new="world.new")
- elif world:
- split.template_ID(space, "pin_id")
- else:
- layout.template_ID(scene, "world", new="world.new")
+ split = layout.split(percentage=0.65)
+ if scene:
+ split.template_ID(scene, "world", new="world.new")
+ elif world:
+ split.template_ID(space, "pin_id")
-class WORLD_PT_custom_props(WorldButtonsPanel, PropertyPanel):
+class WORLD_PT_preview(WorldButtonsPanel, bpy.types.Panel):
+ bl_label = "Preview"
COMPAT_ENGINES = {'BLENDER_RENDER'}
- _context_path = "world"
+ @classmethod
+ def poll(cls, context):
+ rd = context.scene.render
+ return (context.world) and (not rd.use_game_engine) and (rd.engine in cls.COMPAT_ENGINES)
-class WORLD_PT_world(WorldButtonsPanel):
+ def draw(self, context):
+ self.layout.template_preview(context.world)
+
+
+class WORLD_PT_world(WorldButtonsPanel, bpy.types.Panel):
bl_label = "World"
COMPAT_ENGINES = {'BLENDER_RENDER'}
def draw(self, context):
layout = self.layout
- wide_ui = context.region.width > narrowui
world = context.world
- if wide_ui:
- row = layout.row()
- row.prop(world, "paper_sky")
- row.prop(world, "blend_sky")
- row.prop(world, "real_sky")
- else:
- col = layout.column()
- col.prop(world, "paper_sky")
- col.prop(world, "blend_sky")
- col.prop(world, "real_sky")
+ row = layout.row()
+ row.prop(world, "use_sky_paper")
+ row.prop(world, "use_sky_blend")
+ row.prop(world, "use_sky_real")
row = layout.row()
row.column().prop(world, "horizon_color")
col = row.column()
col.prop(world, "zenith_color")
- col.active = world.blend_sky
+ col.active = world.use_sky_blend
row.column().prop(world, "ambient_color")
-class WORLD_PT_mist(WorldButtonsPanel):
- bl_label = "Mist"
- bl_default_closed = True
- COMPAT_ENGINES = {'BLENDER_RENDER'}
-
- def draw_header(self, context):
- world = context.world
-
- self.layout.prop(world.mist, "use_mist", text="")
-
- def draw(self, context):
- layout = self.layout
- wide_ui = context.region.width > narrowui
- world = context.world
-
- layout.active = world.mist.use_mist
-
- split = layout.split()
-
- col = split.column()
- col.prop(world.mist, "intensity", slider=True)
- col.prop(world.mist, "start")
-
- if wide_ui:
- col = split.column()
- col.prop(world.mist, "depth")
- col.prop(world.mist, "height")
-
- layout.prop(world.mist, "falloff")
-
-
-class WORLD_PT_stars(WorldButtonsPanel):
- bl_label = "Stars"
- bl_default_closed = True
- COMPAT_ENGINES = {'BLENDER_RENDER'}
-
- def draw_header(self, context):
- world = context.world
-
- self.layout.prop(world.stars, "use_stars", text="")
-
- def draw(self, context):
- layout = self.layout
- wide_ui = context.region.width > narrowui
- world = context.world
-
- layout.active = world.stars.use_stars
-
- split = layout.split()
-
- col = split.column()
- col.prop(world.stars, "size")
- col.prop(world.stars, "color_randomization", text="Colors")
-
- if wide_ui:
- col = split.column()
- col.prop(world.stars, "min_distance", text="Min. Dist")
- col.prop(world.stars, "average_separation", text="Separation")
-
-
-class WORLD_PT_ambient_occlusion(WorldButtonsPanel):
+class WORLD_PT_ambient_occlusion(WorldButtonsPanel, bpy.types.Panel):
bl_label = "Ambient Occlusion"
COMPAT_ENGINES = {'BLENDER_RENDER'}
def draw_header(self, context):
- light = context.world.lighting
+ light = context.world.light_settings
self.layout.prop(light, "use_ambient_occlusion", text="")
def draw(self, context):
layout = self.layout
- light = context.world.lighting
+ light = context.world.light_settings
layout.active = light.use_ambient_occlusion
split = layout.split()
split.prop(light, "ao_factor", text="Factor")
- split.prop(light, "ao_blend_mode", text="")
+ split.prop(light, "ao_blend_type", text="")
-class WORLD_PT_environment_lighting(WorldButtonsPanel):
+class WORLD_PT_environment_lighting(WorldButtonsPanel, bpy.types.Panel):
bl_label = "Environment Lighting"
COMPAT_ENGINES = {'BLENDER_RENDER'}
def draw_header(self, context):
- light = context.world.lighting
- self.layout.prop(light, "use_environment_lighting", text="")
+ light = context.world.light_settings
+ self.layout.prop(light, "use_environment_light", text="")
def draw(self, context):
layout = self.layout
- light = context.world.lighting
+ light = context.world.light_settings
- layout.active = light.use_environment_lighting
+ layout.active = light.use_environment_light
split = layout.split()
split.prop(light, "environment_energy", text="Energy")
split.prop(light, "environment_color", text="")
-class WORLD_PT_indirect_lighting(WorldButtonsPanel):
+class WORLD_PT_indirect_lighting(WorldButtonsPanel, bpy.types.Panel):
bl_label = "Indirect Lighting"
COMPAT_ENGINES = {'BLENDER_RENDER'}
+ @classmethod
+ def poll(cls, context):
+ light = getattr(context.world, "light_settings", None)
+ return light and light.gather_method == 'APPROXIMATE'
+
def draw_header(self, context):
- light = context.world.lighting
- self.layout.prop(light, "use_indirect_lighting", text="")
+ light = context.world.light_settings
+ self.layout.prop(light, "use_indirect_light", text="")
def draw(self, context):
layout = self.layout
- light = context.world.lighting
+ light = context.world.light_settings
- layout.active = light.use_indirect_lighting
+ layout.active = light.use_indirect_light
split = layout.split()
split.prop(light, "indirect_factor", text="Factor")
split.prop(light, "indirect_bounces", text="Bounces")
-class WORLD_PT_gather(WorldButtonsPanel):
+class WORLD_PT_gather(WorldButtonsPanel, bpy.types.Panel):
bl_label = "Gather"
COMPAT_ENGINES = {'BLENDER_RENDER'}
def draw(self, context):
layout = self.layout
- light = context.world.lighting
+ light = context.world.light_settings
- layout.active = light.use_ambient_occlusion or light.use_environment_lighting or light.use_indirect_lighting
+ layout.active = light.use_ambient_occlusion or light.use_environment_light or light.use_indirect_light
layout.prop(light, "gather_method", expand=True)
@@ -238,9 +172,9 @@ class WORLD_PT_gather(WorldButtonsPanel):
col.label(text="Attenuation:")
if light.gather_method == 'RAYTRACE':
col.prop(light, "distance")
- col.prop(light, "falloff")
+ col.prop(light, "use_falloff")
sub = col.row()
- sub.active = light.falloff
+ sub.active = light.use_falloff
sub.prop(light, "falloff_strength", text="Strength")
if light.gather_method == 'RAYTRACE':
@@ -263,35 +197,78 @@ class WORLD_PT_gather(WorldButtonsPanel):
col.label(text="Sampling:")
col.prop(light, "passes")
- col.prop(light, "error_tolerance", text="Error")
- col.prop(light, "pixel_cache")
+ col.prop(light, "error_threshold", text="Error")
+ col.prop(light, "use_cache")
col.prop(light, "correction")
-classes = [
- WORLD_PT_context_world,
- WORLD_PT_preview,
- WORLD_PT_world,
- WORLD_PT_ambient_occlusion,
- WORLD_PT_environment_lighting,
- WORLD_PT_indirect_lighting,
- WORLD_PT_gather,
- WORLD_PT_mist,
- WORLD_PT_stars,
+class WORLD_PT_mist(WorldButtonsPanel, bpy.types.Panel):
+ bl_label = "Mist"
+ bl_default_closed = True
+ COMPAT_ENGINES = {'BLENDER_RENDER'}
+
+ def draw_header(self, context):
+ world = context.world
+
+ self.layout.prop(world.mist_settings, "use_mist", text="")
+
+ def draw(self, context):
+ layout = self.layout
+ world = context.world
+
+ layout.active = world.mist_settings.use_mist
+
+ split = layout.split()
+
+ col = split.column()
+ col.prop(world.mist_settings, "intensity", slider=True)
+ col.prop(world.mist_settings, "start")
+
+ col = split.column()
+ col.prop(world.mist_settings, "depth")
+ col.prop(world.mist_settings, "height")
+
+ layout.prop(world.mist_settings, "falloff")
+
- WORLD_PT_custom_props]
+class WORLD_PT_stars(WorldButtonsPanel, bpy.types.Panel):
+ bl_label = "Stars"
+ bl_default_closed = True
+ COMPAT_ENGINES = {'BLENDER_RENDER'}
+
+ def draw_header(self, context):
+ world = context.world
+
+ self.layout.prop(world.star_settings, "use_stars", text="")
+
+ def draw(self, context):
+ layout = self.layout
+ world = context.world
+
+ layout.active = world.star_settings.use_stars
+
+ split = layout.split()
+
+ col = split.column()
+ col.prop(world.star_settings, "size")
+ col.prop(world.star_settings, "color_random", text="Colors")
+
+ col = split.column()
+ col.prop(world.star_settings, "distance_min", text="Min. Dist")
+ col.prop(world.star_settings, "average_separation", text="Separation")
+
+
+class WORLD_PT_custom_props(WorldButtonsPanel, PropertyPanel, bpy.types.Panel):
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ _context_path = "world"
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/space_buttons.py b/release/scripts/ui/space_buttons.py
deleted file mode 100644
index 9fc30a8189b..00000000000
--- a/release/scripts/ui/space_buttons.py
+++ /dev/null
@@ -1,72 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-# <pep8 compliant>
-import bpy
-
-
-class Buttons_HT_header(bpy.types.Header):
- bl_space_type = 'PROPERTIES'
-
- def draw(self, context):
- layout = self.layout
-
- so = context.space_data
- scene = context.scene
-
- row = layout.row(align=True)
- row.template_header()
-
- if context.area.show_menus:
- sub = row.row(align=True)
- sub.menu("Buttons_MT_view", text="View")
-
- row = layout.row()
- row.prop(so, "buttons_context", expand=True, text="")
- row.prop(scene, "frame_current")
-
-
-class Buttons_MT_view(bpy.types.Menu):
- bl_label = "View"
-
- def draw(self, context):
- layout = self.layout
- so = context.space_data
-
- col = layout.column()
- col.prop(so, "panel_alignment", expand=True)
-
-
-classes = [
- Buttons_HT_header,
- Buttons_MT_view]
-
-
-def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
-
-
-def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
-
-if __name__ == "__main__":
- register()
diff --git a/release/scripts/ui/space_console.py b/release/scripts/ui/space_console.py
index 512af350a47..f2264a5c926 100644
--- a/release/scripts/ui/space_console.py
+++ b/release/scripts/ui/space_console.py
@@ -48,7 +48,7 @@ class CONSOLE_HT_header(bpy.types.Header):
row.prop(sc, "show_report_debug", text="Debug")
row.prop(sc, "show_report_info", text="Info")
row.prop(sc, "show_report_operator", text="Operators")
- row.prop(sc, "show_report_warn", text="Warnings")
+ row.prop(sc, "show_report_warning", text="Warnings")
row.prop(sc, "show_report_error", text="Errors")
row = layout.row()
@@ -138,7 +138,8 @@ class ConsoleAutocomplete(bpy.types.Operator):
bl_idname = "console.autocomplete"
bl_label = "Console Autocomplete"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return context.space_data.console_type != 'REPORT'
def execute(self, context):
@@ -196,31 +197,12 @@ class ConsoleLanguage(bpy.types.Operator):
return {'FINISHED'}
-classes = [
- CONSOLE_HT_header,
- CONSOLE_MT_console,
- CONSOLE_MT_report,
- CONSOLE_MT_language,
-
- # Stubs that call the language operators
- ConsoleExec,
- ConsoleAutocomplete,
- ConsoleBanner,
-
- # Set the language and call the banner
- ConsoleLanguage]
-
-
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/space_dopesheet.py b/release/scripts/ui/space_dopesheet.py
index 41917acd997..110ddd9606b 100644
--- a/release/scripts/ui/space_dopesheet.py
+++ b/release/scripts/ui/space_dopesheet.py
@@ -48,7 +48,7 @@ class DOPESHEET_HT_header(bpy.types.Header):
sub.menu("DOPESHEET_MT_key")
layout.prop(st, "mode", text="")
- layout.prop(st.dopesheet, "display_summary", text="Summary")
+ layout.prop(st.dopesheet, "show_summary", text="Summary")
if st.mode == 'DOPESHEET':
layout.template_dopesheet_filter(st.dopesheet)
@@ -56,7 +56,7 @@ class DOPESHEET_HT_header(bpy.types.Header):
layout.template_ID(st, "action", new="action.new")
if st.mode != 'GPENCIL':
- layout.prop(st, "autosnap", text="")
+ layout.prop(st, "auto_snap", text="")
row = layout.row(align=True)
row.operator("action.copy", text="", icon='COPYDOWN')
@@ -73,10 +73,10 @@ class DOPESHEET_MT_view(bpy.types.Menu):
layout.column()
- layout.prop(st, "realtime_updates")
- layout.prop(st, "show_cframe_indicator")
+ layout.prop(st, "use_realtime_update")
+ layout.prop(st, "show_frame_indicator")
layout.prop(st, "show_sliders")
- layout.prop(st, "automerge_keyframes")
+ layout.prop(st, "use_auto_merge_keyframes")
layout.prop(st, "use_marker_sync")
if st.show_seconds:
@@ -196,25 +196,12 @@ class DOPESHEET_MT_key_transform(bpy.types.Menu):
layout.operator("transform.transform", text="Scale").mode = 'TIME_SCALE'
-classes = [
- DOPESHEET_HT_header, # header/menu classes
- DOPESHEET_MT_view,
- DOPESHEET_MT_select,
- DOPESHEET_MT_channel,
- DOPESHEET_MT_key,
- DOPESHEET_MT_key_transform]
-
-
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/space_filebrowser.py b/release/scripts/ui/space_filebrowser.py
index 39bae6ca59b..cb95ac87eef 100644
--- a/release/scripts/ui/space_filebrowser.py
+++ b/release/scripts/ui/space_filebrowser.py
@@ -46,39 +46,31 @@ class FILEBROWSER_HT_header(bpy.types.Header):
row = layout.row(align=True)
row.operator("file.directory_new", text="", icon='NEWFOLDER')
- layout.prop(params, "display", expand=True, text="")
- layout.prop(params, "sort", expand=True, text="")
+ layout.prop(params, "display_type", expand=True, text="")
+ layout.prop(params, "sort_method", expand=True, text="")
- layout.prop(params, "hide_dot", text="Hide Invisible")
- layout.prop(params, "do_filter", text="", icon='FILTER')
+ layout.prop(params, "show_hidden", text="Hide Invisible")
+ layout.prop(params, "use_filter", text="", icon='FILTER')
row = layout.row(align=True)
- row.active = params.do_filter
+ row.active = params.use_filter
- row.prop(params, "filter_folder", text="")
- row.prop(params, "filter_blender", text="")
- row.prop(params, "filter_image", text="")
- row.prop(params, "filter_movie", text="")
- row.prop(params, "filter_script", text="")
- row.prop(params, "filter_font", text="")
- row.prop(params, "filter_sound", text="")
- row.prop(params, "filter_text", text="")
-
-
-classes = [
- FILEBROWSER_HT_header]
+ row.prop(params, "use_filter_folder", text="")
+ row.prop(params, "use_filter_blender", text="")
+ row.prop(params, "use_filter_image", text="")
+ row.prop(params, "use_filter_movie", text="")
+ row.prop(params, "use_filter_script", text="")
+ row.prop(params, "use_filter_font", text="")
+ row.prop(params, "use_filter_sound", text="")
+ row.prop(params, "use_filter_text", text="")
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/space_graph.py b/release/scripts/ui/space_graph.py
index 1533b891202..e5ba894f8ad 100644
--- a/release/scripts/ui/space_graph.py
+++ b/release/scripts/ui/space_graph.py
@@ -44,7 +44,7 @@ class GRAPH_HT_header(bpy.types.Header):
layout.template_dopesheet_filter(st.dopesheet)
- layout.prop(st, "autosnap", text="")
+ layout.prop(st, "auto_snap", text="")
layout.prop(st, "pivot_point", text="", icon_only=True)
row = layout.row(align=True)
@@ -71,19 +71,19 @@ class GRAPH_MT_view(bpy.types.Menu):
layout.operator("graph.properties", icon='MENU_PANEL')
layout.separator()
- layout.prop(st, "realtime_updates")
- layout.prop(st, "show_cframe_indicator")
+ layout.prop(st, "use_realtime_update")
+ layout.prop(st, "show_frame_indicator")
layout.prop(st, "show_cursor")
layout.prop(st, "show_sliders")
- layout.prop(st, "automerge_keyframes")
+ layout.prop(st, "use_auto_merge_keyframes")
layout.separator()
if st.show_handles:
layout.operator("graph.handles_view_toggle", icon='CHECKBOX_HLT', text="Show All Handles")
else:
layout.operator("graph.handles_view_toggle", icon='CHECKBOX_DEHLT', text="Show All Handles")
- layout.prop(st, "only_selected_curves_handles")
- layout.prop(st, "only_selected_keyframe_handles")
+ layout.prop(st, "use_only_selected_curves_handles")
+ layout.prop(st, "use_only_selected_keyframe_handles")
layout.operator("anim.time_toggle")
layout.separator()
@@ -204,25 +204,12 @@ class GRAPH_MT_key_transform(bpy.types.Menu):
layout.operator("transform.resize", text="Scale")
-classes = [
- GRAPH_HT_header, # header/menu classes
- GRAPH_MT_view,
- GRAPH_MT_select,
- GRAPH_MT_channel,
- GRAPH_MT_key,
- GRAPH_MT_key_transform]
-
-
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/space_image.py b/release/scripts/ui/space_image.py
index e9c963db7b3..11324b59b3b 100644
--- a/release/scripts/ui/space_image.py
+++ b/release/scripts/ui/space_image.py
@@ -19,7 +19,16 @@
# <pep8 compliant>
import bpy
-narrowui = bpy.context.user_preferences.view.properties_width_check
+
+class BrushButtonsPanel():
+ bl_space_type = 'IMAGE_EDITOR'
+ bl_region_type = 'UI'
+
+ @classmethod
+ def poll(cls, context):
+ sima = context.space_data
+ toolsettings = context.tool_settings.image_paint
+ return sima.show_paint and toolsettings.brush
class IMAGE_MT_view(bpy.types.Menu):
@@ -39,10 +48,10 @@ class IMAGE_MT_view(bpy.types.Menu):
layout.separator()
- layout.prop(sima, "update_automatically")
+ layout.prop(sima, "use_realtime_update")
if show_uvedit:
- layout.prop(toolsettings, "uv_local_view") # Numpad /
- layout.prop(uv, "draw_other_objects")
+ layout.prop(toolsettings, "show_uv_local_view") # Numpad /
+ layout.prop(uv, "show_other_objects")
layout.separator()
@@ -129,13 +138,13 @@ class IMAGE_MT_image(bpy.types.Menu):
# only for dirty && specific image types, perhaps
# this could be done in operator poll too
- if ima.dirty:
+ if ima.is_dirty:
if ima.source in ('FILE', 'GENERATED') and ima.type != 'MULTILAYER':
layout.operator("image.pack", text="Pack As PNG").as_png = True
layout.separator()
- layout.prop(sima, "image_painting")
+ layout.prop(sima, "use_image_paint")
class IMAGE_MT_uvs_showhide(bpy.types.Menu):
@@ -208,12 +217,12 @@ class IMAGE_MT_uvs(bpy.types.Menu):
uv = sima.uv_editor
toolsettings = context.tool_settings
- layout.prop(uv, "snap_to_pixels")
- layout.prop(uv, "constrain_to_image_bounds")
+ layout.prop(uv, "use_snap_to_pixels")
+ layout.prop(uv, "lock_bounds")
layout.separator()
- layout.prop(uv, "live_unwrap")
+ layout.prop(uv, "use_live_unwrap")
layout.operator("uv.unwrap")
layout.operator("uv.pin", text="Unpin").clear = True
layout.operator("uv.pin")
@@ -235,8 +244,8 @@ class IMAGE_MT_uvs(bpy.types.Menu):
layout.separator()
- layout.prop_menu_enum(toolsettings, "proportional_editing")
- layout.prop_menu_enum(toolsettings, "proportional_editing_falloff")
+ layout.prop_menu_enum(toolsettings, "proportional_edit")
+ layout.prop_menu_enum(toolsettings, "proportional_edit_falloff")
layout.separator()
@@ -269,7 +278,7 @@ class IMAGE_HT_header(bpy.types.Header):
if show_uvedit:
sub.menu("IMAGE_MT_select")
- if ima and ima.dirty:
+ if ima and ima.is_dirty:
sub.menu("IMAGE_MT_image", text="Image*")
else:
sub.menu("IMAGE_MT_image", text="Image")
@@ -279,31 +288,31 @@ class IMAGE_HT_header(bpy.types.Header):
layout.template_ID(sima, "image", new="image.new")
if not show_render:
- layout.prop(sima, "image_pin", text="")
+ layout.prop(sima, "use_image_pin", text="")
# uv editing
if show_uvedit:
uvedit = sima.uv_editor
- layout.prop(uvedit, "pivot", text="", icon_only=True)
- layout.prop(toolsettings, "uv_sync_selection", text="")
+ layout.prop(uvedit, "pivot_point", text="", icon_only=True)
+ layout.prop(toolsettings, "use_uv_select_sync", text="")
- if toolsettings.uv_sync_selection:
+ if toolsettings.use_uv_select_sync:
row = layout.row(align=True)
- row.prop(toolsettings, "mesh_selection_mode", text="", index=0, icon='VERTEXSEL')
- row.prop(toolsettings, "mesh_selection_mode", text="", index=1, icon='EDGESEL')
- row.prop(toolsettings, "mesh_selection_mode", text="", index=2, icon='FACESEL')
+ row.prop(toolsettings, "mesh_select_mode", text="", index=0, icon='VERTEXSEL')
+ row.prop(toolsettings, "mesh_select_mode", text="", index=1, icon='EDGESEL')
+ row.prop(toolsettings, "mesh_select_mode", text="", index=2, icon='FACESEL')
else:
- layout.prop(toolsettings, "uv_selection_mode", text="", expand=True)
- layout.prop(uvedit, "sticky_selection_mode", text="", icon_only=True)
+ layout.prop(toolsettings, "uv_select_mode", text="", expand=True)
+ layout.prop(uvedit, "sticky_select_mode", text="", icon_only=True)
row = layout.row(align=True)
- row.prop(toolsettings, "proportional_editing", text="", icon_only=True)
- if toolsettings.proportional_editing != 'DISABLED':
- row.prop(toolsettings, "proportional_editing_falloff", text="", icon_only=True)
+ row.prop(toolsettings, "proportional_edit", text="", icon_only=True)
+ if toolsettings.proportional_edit != 'DISABLED':
+ row.prop(toolsettings, "proportional_edit_falloff", text="", icon_only=True)
row = layout.row(align=True)
- row.prop(toolsettings, "snap", text="")
+ row.prop(toolsettings, "use_snap", text="")
row.prop(toolsettings, "snap_element", text="", icon_only=True)
# mesh = context.edit_object.data
@@ -314,7 +323,7 @@ class IMAGE_HT_header(bpy.types.Header):
layout.template_image_layers(ima, iuser)
# painting
- layout.prop(sima, "image_painting", text="")
+ layout.prop(sima, "use_image_paint", text="")
# draw options
row = layout.row(align=True)
@@ -326,8 +335,8 @@ class IMAGE_HT_header(bpy.types.Header):
if ima.type == 'COMPOSITE' and ima.source in ('MOVIE', 'SEQUENCE'):
row.operator("image.play_composite", icon='PLAY')
- if show_uvedit or sima.image_painting:
- layout.prop(sima, "update_automatically", text="", icon_only=True, icon='LOCKED')
+ if show_uvedit or sima.use_image_paint:
+ layout.prop(sima, "use_realtime_update", text="", icon_only=True, icon='LOCKED')
class IMAGE_PT_image_properties(bpy.types.Panel):
@@ -335,7 +344,8 @@ class IMAGE_PT_image_properties(bpy.types.Panel):
bl_region_type = 'UI'
bl_label = "Image"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
sima = context.space_data
return (sima.image)
@@ -354,7 +364,8 @@ class IMAGE_PT_game_properties(bpy.types.Panel):
bl_region_type = 'UI'
bl_label = "Game Properties"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
rd = context.scene.render
sima = context.space_data
return (sima and sima.image) and (rd.engine == 'BLENDER_GAME')
@@ -364,32 +375,30 @@ class IMAGE_PT_game_properties(bpy.types.Panel):
sima = context.space_data
ima = sima.image
- wide_ui = context.region.width > narrowui
split = layout.split()
col = split.column()
sub = col.column(align=True)
- sub.prop(ima, "animated")
+ sub.prop(ima, "use_animation")
subsub = sub.column()
- subsub.active = ima.animated
- subsub.prop(ima, "animation_start", text="Start")
- subsub.prop(ima, "animation_end", text="End")
- subsub.prop(ima, "animation_speed", text="Speed")
+ subsub.active = ima.use_animation
+ subsub.prop(ima, "frame_start", text="Start")
+ subsub.prop(ima, "frame_end", text="End")
+ subsub.prop(ima, "fps", text="Speed")
- col.prop(ima, "tiles")
+ col.prop(ima, "use_tiles")
sub = col.column(align=True)
- sub.active = ima.tiles or ima.animated
+ sub.active = ima.tiles or ima.use_animation
sub.prop(ima, "tiles_x", text="X")
sub.prop(ima, "tiles_y", text="Y")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Clamp:")
- col.prop(ima, "clamp_x", text="X")
- col.prop(ima, "clamp_y", text="Y")
+ col.prop(ima, "use_clamp_x", text="X")
+ col.prop(ima, "use_clamp_y", text="Y")
col.separator()
col.prop(ima, "mapping", expand=True)
@@ -399,7 +408,8 @@ class IMAGE_PT_view_histogram(bpy.types.Panel):
bl_region_type = 'PREVIEW'
bl_label = "Histogram"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
sima = context.space_data
return (sima and sima.image)
@@ -417,7 +427,8 @@ class IMAGE_PT_view_waveform(bpy.types.Panel):
bl_region_type = 'PREVIEW'
bl_label = "Waveform"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
sima = context.space_data
return (sima and sima.image)
@@ -436,7 +447,8 @@ class IMAGE_PT_view_vectorscope(bpy.types.Panel):
bl_region_type = 'PREVIEW'
bl_label = "Vectorscope"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
sima = context.space_data
return (sima and sima.image)
@@ -453,7 +465,8 @@ class IMAGE_PT_sample_line(bpy.types.Panel):
bl_region_type = 'PREVIEW'
bl_label = "Sample Line"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
sima = context.space_data
return (sima and sima.image)
@@ -470,7 +483,8 @@ class IMAGE_PT_scope_sample(bpy.types.Panel):
bl_region_type = 'PREVIEW'
bl_label = "Scope Samples"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
sima = context.space_data
return sima
@@ -490,7 +504,8 @@ class IMAGE_PT_view_properties(bpy.types.Panel):
bl_region_type = 'UI'
bl_label = "Display"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
sima = context.space_data
return (sima and (sima.image or sima.show_uvedit))
@@ -501,7 +516,6 @@ class IMAGE_PT_view_properties(bpy.types.Panel):
ima = sima.image
show_uvedit = sima.show_uvedit
uvedit = sima.uv_editor
- wide_ui = context.region.width > narrowui
split = layout.split()
@@ -509,16 +523,15 @@ class IMAGE_PT_view_properties(bpy.types.Panel):
if ima:
col.prop(ima, "display_aspect", text="Aspect Ratio")
- if wide_ui:
- col = split.column()
+ col = split.column()
col.label(text="Coordinates:")
- col.prop(sima, "draw_repeated", text="Repeat")
+ col.prop(sima, "show_repeat", text="Repeat")
if show_uvedit:
- col.prop(uvedit, "normalized_coordinates", text="Normalized")
+ col.prop(uvedit, "show_normalized_coords", text="Normalized")
elif show_uvedit:
col.label(text="Coordinates:")
- col.prop(uvedit, "normalized_coordinates", text="Normalized")
+ col.prop(uvedit, "show_normalized_coords", text="Normalized")
if show_uvedit:
@@ -528,23 +541,19 @@ class IMAGE_PT_view_properties(bpy.types.Panel):
col = layout.column()
col.label(text="UVs:")
row = col.row()
- if wide_ui:
- row.prop(uvedit, "edge_draw_type", expand=True)
- else:
- row.prop(uvedit, "edge_draw_type", text="")
+ row.prop(uvedit, "edge_draw_type", expand=True)
split = layout.split()
col = split.column()
- col.prop(uvedit, "draw_smooth_edges", text="Smooth")
- col.prop(uvedit, "draw_modified_edges", text="Modified")
- #col.prop(uvedit, "draw_edges")
- #col.prop(uvedit, "draw_faces")
-
- if wide_ui:
- col = split.column()
- col.prop(uvedit, "draw_stretch", text="Stretch")
+ col.prop(uvedit, "show_smooth_edges", text="Smooth")
+ col.prop(uvedit, "show_modified_edges", text="Modified")
+ #col.prop(uvedit, "show_edges")
+ #col.prop(uvedit, "show_faces")
+
+ col = split.column()
+ col.prop(uvedit, "show_stretch", text="Stretch")
sub = col.column()
- sub.active = uvedit.draw_stretch
+ sub.active = uvedit.show_stretch
sub.row().prop(uvedit, "draw_stretch_type", expand=True)
@@ -553,7 +562,8 @@ class IMAGE_PT_paint(bpy.types.Panel):
bl_region_type = 'UI'
bl_label = "Paint"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
sima = context.space_data
return sima.show_paint
@@ -562,22 +572,10 @@ class IMAGE_PT_paint(bpy.types.Panel):
toolsettings = context.tool_settings.image_paint
brush = toolsettings.brush
- wide_ui = context.region.width > narrowui
col = layout.split().column()
row = col.row()
- row.template_list(toolsettings, "brushes", toolsettings, "active_brush_index", rows=2)
-
- col.template_ID(toolsettings, "brush", new="brush.add")
-
- if wide_ui:
- sub = layout.row(align=True)
- else:
- sub = layout.column(align=True)
- sub.prop_enum(brush, "imagepaint_tool", 'DRAW')
- sub.prop_enum(brush, "imagepaint_tool", 'SOFTEN')
- sub.prop_enum(brush, "imagepaint_tool", 'CLONE')
- sub.prop_enum(brush, "imagepaint_tool", 'SMEAR')
+ col.template_ID_preview(toolsettings, "brush", new="brush.add", rows=3, cols=8)
if brush:
col = layout.column()
@@ -586,15 +584,15 @@ class IMAGE_PT_paint(bpy.types.Panel):
row = col.row(align=True)
row.prop(brush, "size", slider=True)
- row.prop(brush, "use_size_pressure", toggle=True, text="")
+ row.prop(brush, "use_pressure_size", toggle=True, text="")
row = col.row(align=True)
row.prop(brush, "strength", slider=True)
- row.prop(brush, "use_strength_pressure", toggle=True, text="")
+ row.prop(brush, "use_pressure_strength", toggle=True, text="")
row = col.row(align=True)
row.prop(brush, "jitter", slider=True)
- row.prop(brush, "use_jitter_pressure", toggle=True, text="")
+ row.prop(brush, "use_pressure_jitter", toggle=True, text="")
col.prop(brush, "blend", text="Blend")
@@ -604,16 +602,26 @@ class IMAGE_PT_paint(bpy.types.Panel):
col.prop(brush, "clone_alpha", text="Alpha")
-class IMAGE_PT_paint_stroke(bpy.types.Panel):
- bl_space_type = 'IMAGE_EDITOR'
- bl_region_type = 'UI'
- bl_label = "Paint Stroke"
+class IMAGE_PT_tools_brush_texture(BrushButtonsPanel, bpy.types.Panel):
+ bl_label = "Texture"
bl_default_closed = True
- def poll(self, context):
- sima = context.space_data
+ def draw(self, context):
+ layout = self.layout
+
toolsettings = context.tool_settings.image_paint
- return sima.show_paint and toolsettings.brush
+ brush = toolsettings.brush
+
+# tex_slot = brush.texture_slot
+
+ col = layout.column()
+
+ col.template_ID_preview(brush, "texture", new="texture.new", rows=3, cols=8)
+
+
+class IMAGE_PT_paint_stroke(BrushButtonsPanel, bpy.types.Panel):
+ bl_label = "Paint Stroke"
+ bl_default_closed = True
def draw(self, context):
layout = self.layout
@@ -630,22 +638,15 @@ class IMAGE_PT_paint_stroke(bpy.types.Panel):
row = layout.row(align=True)
row.active = brush.use_space
row.prop(brush, "spacing", text="Distance", slider=True)
- row.prop(brush, "use_spacing_pressure", toggle=True, text="")
+ row.prop(brush, "use_pressure_spacing", toggle=True, text="")
layout.prop(brush, "use_wrap")
-class IMAGE_PT_paint_curve(bpy.types.Panel):
- bl_space_type = 'IMAGE_EDITOR'
- bl_region_type = 'UI'
+class IMAGE_PT_paint_curve(BrushButtonsPanel, bpy.types.Panel):
bl_label = "Paint Curve"
bl_default_closed = True
- def poll(self, context):
- sima = context.space_data
- toolsettings = context.tool_settings.image_paint
- return sima.show_paint and toolsettings.brush
-
def draw(self, context):
layout = self.layout
@@ -653,43 +654,21 @@ class IMAGE_PT_paint_curve(bpy.types.Panel):
brush = toolsettings.brush
layout.template_curve_mapping(brush, "curve")
- layout.operator_menu_enum("brush.curve_preset", "shape")
-
-
-classes = [
- IMAGE_MT_view,
- IMAGE_MT_select,
- IMAGE_MT_image,
- IMAGE_MT_uvs_showhide,
- IMAGE_MT_uvs_transform,
- IMAGE_MT_uvs_snap,
- IMAGE_MT_uvs_mirror,
- IMAGE_MT_uvs_weldalign,
- IMAGE_MT_uvs,
- IMAGE_HT_header,
- IMAGE_PT_image_properties,
- IMAGE_PT_paint,
- IMAGE_PT_paint_stroke,
- IMAGE_PT_paint_curve,
- IMAGE_PT_game_properties,
- IMAGE_PT_view_properties,
- IMAGE_PT_view_histogram,
- IMAGE_PT_view_waveform,
- IMAGE_PT_view_vectorscope,
- IMAGE_PT_sample_line,
- IMAGE_PT_scope_sample]
+ row = layout.row(align=True)
+ row.operator("brush.curve_preset", icon="SMOOTHCURVE", text="").shape = 'SMOOTH'
+ row.operator("brush.curve_preset", icon="SPHERECURVE", text="").shape = 'ROUND'
+ row.operator("brush.curve_preset", icon="ROOTCURVE", text="").shape = 'ROOT'
+ row.operator("brush.curve_preset", icon="SHARPCURVE", text="").shape = 'SHARP'
+ row.operator("brush.curve_preset", icon="LINCURVE", text="").shape = 'LINE'
+ row.operator("brush.curve_preset", icon="NOCURVE", text="").shape = 'MAX'
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/space_info.py b/release/scripts/ui/space_info.py
index ca8371b85fe..500e80fe120 100644
--- a/release/scripts/ui/space_info.py
+++ b/release/scripts/ui/space_info.py
@@ -27,7 +27,7 @@ class INFO_HT_header(bpy.types.Header):
layout = self.layout
wm = context.manager
- if wm and len(wm.operators):
+ if wm and wm.operators:
last_op = wm.operators[-1]
else:
last_op = None
@@ -48,7 +48,7 @@ class INFO_HT_header(bpy.types.Header):
sub.menu("INFO_MT_render")
sub.menu("INFO_MT_help")
- if window.screen.fullscreen:
+ if window.screen.show_fullscreen:
layout.operator("screen.back_to_previous", icon='SCREEN_BACK', text="Back to Previous")
layout.separator()
else:
@@ -58,7 +58,7 @@ class INFO_HT_header(bpy.types.Header):
layout.separator()
- if rd.multiple_engines:
+ if rd.has_multiple_engines:
layout.prop(rd, "engine", text="")
layout.separator()
@@ -93,6 +93,8 @@ class INFO_MT_file(bpy.types.Menu):
layout.operator("wm.save_mainfile", text="Save", icon='FILE_TICK').check_existing = False
layout.operator_context = 'INVOKE_AREA'
layout.operator("wm.save_as_mainfile", text="Save As...")
+ layout.operator_context = 'INVOKE_AREA'
+ layout.operator("wm.save_as_mainfile", text="Save Copy...").copy = True
layout.separator()
@@ -129,7 +131,7 @@ class INFO_MT_file_import(bpy.types.Menu):
bl_label = "Import"
def draw(self, context):
- if "collada_import" in dir(bpy.ops.wm):
+ if hasattr(bpy.types, "WM_OT_collada_import"):
self.layout.operator("wm.collada_import", text="COLLADA (.dae)")
@@ -138,7 +140,7 @@ class INFO_MT_file_export(bpy.types.Menu):
bl_label = "Export"
def draw(self, context):
- if "collada_export" in dir(bpy.ops.wm):
+ if hasattr(bpy.types, "WM_OT_collada_export"):
self.layout.operator("wm.collada_export", text="COLLADA (.dae)")
@@ -263,7 +265,7 @@ class INFO_MT_game(bpy.types.Menu):
def draw(self, context):
layout = self.layout
- gs = context.scene.game_data
+ gs = context.scene.game_settings
layout.operator("view3d.game_start")
@@ -275,7 +277,7 @@ class INFO_MT_game(bpy.types.Menu):
layout.prop(gs, "use_deprecation_warnings")
layout.prop(gs, "use_animation_record")
layout.separator()
- layout.prop(gs, "auto_start")
+ layout.prop(gs, "use_auto_start")
class INFO_MT_render(bpy.types.Menu):
@@ -352,34 +354,13 @@ class HELP_OT_operator_cheat_sheet(bpy.types.Operator):
return {'FINISHED'}
-classes = [
- INFO_HT_header,
- INFO_MT_file,
- INFO_MT_file_import,
- INFO_MT_file_export,
- INFO_MT_file_external_data,
- INFO_MT_add,
- INFO_MT_mesh_add,
- INFO_MT_curve_add,
- INFO_MT_surface_add,
- INFO_MT_armature_add,
- INFO_MT_game,
- INFO_MT_render,
- INFO_MT_help,
-
- HELP_OT_operator_cheat_sheet]
-
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/space_logic.py b/release/scripts/ui/space_logic.py
index a01a5ce6305..1272a5db9d1 100644
--- a/release/scripts/ui/space_logic.py
+++ b/release/scripts/ui/space_logic.py
@@ -25,7 +25,8 @@ class LOGIC_PT_properties(bpy.types.Panel):
bl_region_type = 'UI'
bl_label = "Properties"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
ob = context.active_object
return ob and ob.game
@@ -44,7 +45,7 @@ class LOGIC_PT_properties(bpy.types.Panel):
row.prop(prop, "name", text="")
row.prop(prop, "type", text="")
row.prop(prop, "value", text="", toggle=True) # we dont care about the type. rna will display correctly
- row.prop(prop, "debug", text="", toggle=True, icon='INFO')
+ row.prop(prop, "show_debug", text="", toggle=True, icon='INFO')
row.operator("object.game_property_remove", text="", icon='X', emboss=False).index = i
@@ -57,21 +58,43 @@ class LOGIC_MT_logicbricks_add(bpy.types.Menu):
layout.operator_menu_enum("logic.sensor_add", "type", text="Sensor")
layout.operator_menu_enum("logic.controller_add", "type", text="Controller")
layout.operator_menu_enum("logic.actuator_add", "type", text="Actuator")
+
-classes = [
- LOGIC_PT_properties, LOGIC_MT_logicbricks_add]
+class LOGIC_HT_header(bpy.types.Header):
+ bl_space_type = 'LOGIC_EDITOR'
+
+ def draw(self, context):
+ layout = self.layout
+
+ st = context.space_data
+
+ row = layout.row(align=True)
+ row.template_header()
+
+ if context.area.show_menus:
+ sub = row.row(align=True)
+ sub.menu("LOGIC_MT_view")
+ #sub.menu("LOGIC_MT_select")
+ #sub.menu("LOGIC_MT_add")
+
+
+class LOGIC_MT_view(bpy.types.Menu):
+ bl_label = "View"
+
+ def draw(self, context):
+ layout = self.layout
+
+ layout.column()
+
+ layout.operator("logic.properties", icon='MENU_PANEL')
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/space_nla.py b/release/scripts/ui/space_nla.py
index 0eb342d4b15..bb979e0573e 100644
--- a/release/scripts/ui/space_nla.py
+++ b/release/scripts/ui/space_nla.py
@@ -42,7 +42,7 @@ class NLA_HT_header(bpy.types.Header):
layout.template_dopesheet_filter(st.dopesheet)
- layout.prop(st, "autosnap", text="")
+ layout.prop(st, "auto_snap", text="")
class NLA_MT_view(bpy.types.Menu):
@@ -59,8 +59,8 @@ class NLA_MT_view(bpy.types.Menu):
layout.separator()
- layout.prop(st, "realtime_updates")
- layout.prop(st, "show_cframe_indicator")
+ layout.prop(st, "use_realtime_update")
+ layout.prop(st, "show_frame_indicator")
layout.operator("anim.time_toggle", text="Show Frames" if st.show_seconds else "Show Seconds")
@@ -122,7 +122,7 @@ class NLA_MT_edit(bpy.types.Menu):
layout.separator()
# TODO: names of these tools for 'tweakmode' need changing?
- if scene.nla_tweakmode_on:
+ if scene.is_nla_tweakmode:
layout.operator("nla.tweakmode_exit", text="Stop Tweaking Strip Actions")
else:
layout.operator("nla.tweakmode_enter", text="Start Tweaking Strip Actions")
@@ -159,25 +159,12 @@ class NLA_MT_edit_transform(bpy.types.Menu):
layout.operator("transform.resize", text="Scale")
-classes = [
- NLA_HT_header, # header/menu classes
- NLA_MT_view,
- NLA_MT_select,
- NLA_MT_edit,
- NLA_MT_add,
- NLA_MT_edit_transform]
-
-
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/space_node.py b/release/scripts/ui/space_node.py
index 365835009ba..cd1425ee122 100644
--- a/release/scripts/ui/space_node.py
+++ b/release/scripts/ui/space_node.py
@@ -66,8 +66,8 @@ class NODE_HT_header(bpy.types.Header):
scene = snode.id
layout.prop(scene, "use_nodes")
- layout.prop(scene.render, "free_unused_nodes", text="Free Unused")
- layout.prop(snode, "backdrop")
+ layout.prop(scene.render, "use_free_unused_nodes", text="Free Unused")
+ layout.prop(snode, "show_backdrop")
layout.separator()
@@ -90,6 +90,13 @@ class NODE_MT_view(bpy.types.Menu):
layout.operator("node.view_all")
+ if context.space_data.show_backdrop:
+ layout.separator()
+
+ layout.operator("node.backimage_move",text = "Backdrop move")
+ layout.operator("node.backimage_zoom",text = "Backdrop zoom in").factor = 1.2
+ layout.operator("node.backimage_zoom",text = "Backdrop zoom out").factor = 0.833
+
layout.separator()
layout.operator("screen.area_dupli")
@@ -131,6 +138,7 @@ class NODE_MT_node(bpy.types.Menu):
layout.separator()
layout.operator("node.link_make")
layout.operator("node.link_make", text="Make and Replace Links").replace = True
+ layout.operator("node.links_cut")
layout.separator()
layout.operator("node.group_edit")
@@ -152,23 +160,12 @@ class NODE_MT_node(bpy.types.Menu):
layout.operator("node.show_cyclic_dependencies")
-classes = [
- NODE_HT_header,
- NODE_MT_view,
- NODE_MT_select,
- NODE_MT_node]
-
-
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/space_outliner.py b/release/scripts/ui/space_outliner.py
index ec3c430feaa..e170dc0322c 100644
--- a/release/scripts/ui/space_outliner.py
+++ b/release/scripts/ui/space_outliner.py
@@ -42,7 +42,7 @@ class OUTLINER_HT_header(bpy.types.Header):
layout.prop(space, "display_mode", text="")
- layout.prop(space, "display_filter", icon='VIEWZOOM', text="")
+ layout.prop(space, "filter_text", icon='VIEWZOOM', text="")
layout.separator()
@@ -73,7 +73,7 @@ class OUTLINER_MT_view(bpy.types.Menu):
col = layout.column()
if space.display_mode not in ('DATABLOCKS', 'USER_PREFERENCES', 'KEYMAPS'):
- col.prop(space, "show_restriction_columns")
+ col.prop(space, "show_restrict_columns")
col.separator()
col.operator("outliner.show_active")
@@ -96,8 +96,8 @@ class OUTLINER_MT_search(bpy.types.Menu):
col = layout.column()
- col.prop(space, "match_case_sensitive")
- col.prop(space, "match_complete")
+ col.prop(space, "use_filter_case_sensitive")
+ col.prop(space, "use_filter_complete")
class OUTLINER_MT_edit_datablocks(bpy.types.Menu):
@@ -117,23 +117,12 @@ class OUTLINER_MT_edit_datablocks(bpy.types.Menu):
col.operator("outliner.drivers_delete_selected")
-classes = [
- OUTLINER_HT_header,
- OUTLINER_MT_view,
- OUTLINER_MT_search,
- OUTLINER_MT_edit_datablocks]
-
-
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/space_sequencer.py b/release/scripts/ui/space_sequencer.py
index 97d84b77e18..ec607629757 100644
--- a/release/scripts/ui/space_sequencer.py
+++ b/release/scripts/ui/space_sequencer.py
@@ -98,6 +98,10 @@ class SEQUENCER_MT_view(bpy.types.Menu):
st = context.space_data
layout.column()
+
+ layout.operator("sequencer.properties", icon='MENU_PANEL')
+
+ layout.separator()
"""
uiBlock *block= uiBeginBlock(C, ar, "seq_viewmenu", UI_EMBOSSP);
@@ -127,7 +131,6 @@ class SEQUENCER_MT_view(bpy.types.Menu):
menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
"""
- layout.separator()
if (st.view_type == 'SEQUENCER') or (st.view_type == 'SEQUENCER_PREVIEW'):
layout.operator("sequencer.view_all", text='View all Sequences')
if (st.view_type == 'PREVIEW') or (st.view_type == 'SEQUENCER_PREVIEW'):
@@ -140,12 +143,12 @@ class SEQUENCER_MT_view(bpy.types.Menu):
layout.operator("sequencer.view_selected")
- layout.prop(st, "draw_frames")
- layout.prop(st, "show_cframe_indicator")
+ layout.prop(st, "show_frames")
+ layout.prop(st, "show_frame_indicator")
if st.display_mode == 'IMAGE':
- layout.prop(st, "draw_safe_margin")
+ layout.prop(st, "show_safe_margin")
if st.display_mode == 'WAVEFORM':
- layout.prop(st, "separate_color_preview")
+ layout.prop(st, "show_separate_color")
layout.separator()
layout.prop(st, "use_marker_sync")
@@ -309,29 +312,33 @@ class SEQUENCER_MT_strip(bpy.types.Menu):
layout.operator("sequencer.swap_data")
-class SequencerButtonsPanel(bpy.types.Panel):
+class SequencerButtonsPanel():
bl_space_type = 'SEQUENCE_EDITOR'
bl_region_type = 'UI'
- def has_sequencer(self, context):
+ @staticmethod
+ def has_sequencer(context):
return (context.space_data.view_type == 'SEQUENCER') or (context.space_data.view_type == 'SEQUENCER_PREVIEW')
- def poll(self, context):
- return self.has_sequencer(context) and (act_strip(context) is not None)
+ @classmethod
+ def poll(cls, context):
+ return cls.has_sequencer(context) and (act_strip(context) is not None)
-class SequencerButtonsPanel_Output(bpy.types.Panel):
+class SequencerButtonsPanel_Output():
bl_space_type = 'SEQUENCE_EDITOR'
bl_region_type = 'UI'
- def has_preview(self, context):
+ @staticmethod
+ def has_preview(context):
return (context.space_data.view_type == 'PREVIEW') or (context.space_data.view_type == 'SEQUENCER_PREVIEW')
- def poll(self, context):
- return self.has_preview(context)
+ @classmethod
+ def poll(cls, context):
+ return cls.has_preview(context)
-class SEQUENCER_PT_edit(SequencerButtonsPanel):
+class SEQUENCER_PT_edit(SequencerButtonsPanel, bpy.types.Panel):
bl_label = "Edit Strip"
def draw(self, context):
@@ -351,13 +358,12 @@ class SEQUENCER_PT_edit(SequencerButtonsPanel):
split = layout.split(percentage=0.3)
split.label(text="Blend:")
- split.prop(strip, "blend_mode", text="")
+ split.prop(strip, "blend_type", text="")
row = layout.row(align=True)
sub = row.row()
sub.active = (not strip.mute)
- sub.prop(strip, "blend_opacity", text="Opacity", slider=True)
- sub = row.row()
+ sub.prop(strip, "blend_alpha", text="Opacity", slider=True)
row.prop(strip, "mute", toggle=True, icon='RESTRICT_VIEW_ON' if strip.mute else 'RESTRICT_VIEW_OFF', text="")
row.prop(strip, "lock", toggle=True, icon='LOCKED' if strip.lock else 'UNLOCKED', text="")
@@ -366,48 +372,25 @@ class SEQUENCER_PT_edit(SequencerButtonsPanel):
sub.enabled = not strip.lock
sub.prop(strip, "channel")
sub.prop(strip, "frame_start")
- sub.prop(strip, "frame_final_length")
+ sub.prop(strip, "frame_final_duration")
col = layout.column(align=True)
row = col.row()
- row.label(text="Final Length: %s" % bpy.utils.smpte_from_frame(strip.frame_final_length))
+ row.label(text="Final Length: %s" % bpy.utils.smpte_from_frame(strip.frame_final_duration))
row = col.row()
- row.active = (frame_current >= strip.frame_start and frame_current <= strip.frame_start + strip.frame_length)
+ row.active = (frame_current >= strip.frame_start and frame_current <= strip.frame_start + strip.frame_duration)
row.label(text="Playhead: %d" % (frame_current - strip.frame_start))
col.label(text="Frame Offset %d:%d" % (strip.frame_offset_start, strip.frame_offset_end))
col.label(text="Frame Still %d:%d" % (strip.frame_still_start, strip.frame_still_end))
-class SEQUENCER_PT_preview(bpy.types.Panel):
- bl_label = "Scene Preview/Render"
- bl_space_type = 'SEQUENCE_EDITOR'
- bl_region_type = 'UI'
-
- def draw(self, context):
- layout = self.layout
- render = context.scene.render
-
- col = layout.column()
- col.prop(render, "use_sequencer_gl_preview", text="Open GL Preview")
- col = layout.column()
- col.active = render.use_sequencer_gl_preview
- col.prop(render, "sequencer_gl_preview", text="")
-
- '''
- col = layout.column()
- col.prop(render, "use_sequencer_gl_render", text="Open GL Render")
- col = layout.column()
- col.active = render.use_sequencer_gl_render
- col.prop(render, "sequencer_gl_render", text="")
- '''
-
-
-class SEQUENCER_PT_effect(SequencerButtonsPanel):
+class SEQUENCER_PT_effect(SequencerButtonsPanel, bpy.types.Panel):
bl_label = "Effect Strip"
- def poll(self, context):
- if not self.has_sequencer(context):
+ @classmethod
+ def poll(cls, context):
+ if not cls.has_sequencer(context):
return False
strip = act_strip(context)
@@ -445,19 +428,19 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel):
flow.prop(strip, "threshold", slider=True)
flow.prop(strip, "clamp", slider=True)
flow.prop(strip, "boost_factor")
- flow.prop(strip, "blur_distance")
+ flow.prop(strip, "blur_radius")
row = layout.row()
row.prop(strip, "quality", slider=True)
- row.prop(strip, "only_boost")
+ row.prop(strip, "use_only_boost")
elif strip.type == 'SPEED':
layout.prop(strip, "global_speed")
flow = layout.column_flow()
- flow.prop(strip, "curve_velocity")
- flow.prop(strip, "curve_compress_y")
- flow.prop(strip, "frame_blending")
+ flow.prop(strip, "use_curve_velocity")
+ flow.prop(strip, "use_curve_compress_y")
+ flow.prop(strip, "use_frame_blend")
elif strip.type == 'TRANSFORM':
self.draw_panel_transform(strip)
@@ -469,10 +452,7 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel):
sub = row.row()
sub.scale_x = 2.0
- if not context.screen.animation_playing:
- sub.operator("screen.animation_play", text="", icon='PLAY')
- else:
- sub.operator("screen.animation_play", text="", icon='PAUSE')
+ sub.operator("screen.animation_play", text="", icon='PAUSE' if context.screen.is_animation_playing else 'PLAY')
row.label("Cut To")
for i in range(1, strip.channel):
@@ -483,9 +463,23 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel):
if strip.type == 'SPEED':
col.prop(strip, "speed_fader", text="Speed fader")
elif strip.type in ('CROSS', 'GAMMA_CROSS', 'PLUGIN', 'WIPE'):
- col.prop(strip, "use_effect_default_fade", "Default fade")
- if not strip.use_effect_default_fade:
+ col.prop(strip, "use_default_fade", "Default fade")
+ if not strip.use_default_fade:
col.prop(strip, "effect_fader", text="Effect fader")
+
+ layout.prop(strip, "use_translation", text="Image Offset:")
+ if strip.use_translation:
+ col = layout.column(align=True)
+ col.prop(strip.transform, "offset_x", text="X")
+ col.prop(strip.transform, "offset_y", text="Y")
+
+ layout.prop(strip, "use_crop", text="Image Crop:")
+ if strip.use_crop:
+ col = layout.column(align=True)
+ col.prop(strip.crop, "max_y")
+ col.prop(strip.crop, "min_x")
+ col.prop(strip.crop, "min_y")
+ col.prop(strip.crop, "max_x")
def draw_panel_transform(self, strip):
layout = self.layout
@@ -501,8 +495,8 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel):
layout.separator()
col = layout.column(align=True)
- col.prop(strip, "uniform_scale")
- if (strip.uniform_scale):
+ col.prop(strip, "use_uniform_scale")
+ if (strip.use_uniform_scale):
col = layout.column(align=True)
col.prop(strip, "scale_start_x", text="Scale")
else:
@@ -518,11 +512,12 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel):
col.prop(strip, "rotation_start", text="Rotation")
-class SEQUENCER_PT_input(SequencerButtonsPanel):
+class SEQUENCER_PT_input(SequencerButtonsPanel, bpy.types.Panel):
bl_label = "Strip Input"
- def poll(self, context):
- if not self.has_sequencer(context):
+ @classmethod
+ def poll(cls, context):
+ if not cls.has_sequencer(context):
return False
strip = act_strip(context)
@@ -536,15 +531,41 @@ class SEQUENCER_PT_input(SequencerButtonsPanel):
'WIPE', 'GLOW', 'TRANSFORM', 'COLOR',
'MULTICAM', 'SPEED')
- def draw_filename(self, context):
- pass
-
def draw(self, context):
layout = self.layout
strip = act_strip(context)
- self.draw_filename(context)
+ seq_type = strip.type
+
+ # draw a filename if we have one
+ if seq_type == 'IMAGE':
+ split = layout.split(percentage=0.2)
+ col = split.column()
+ col.label(text="Path:")
+ col = split.column()
+ col.prop(strip, "directory", text="")
+
+ # Current element for the filename
+
+ elem = strip.getStripElem(context.scene.frame_current)
+ if elem:
+ split = layout.split(percentage=0.2)
+ col = split.column()
+ col.label(text="File:")
+ col = split.column()
+ col.prop(elem, "filename", text="") # strip.elements[0] could be a fallback
+
+ elif seq_type == 'MOVIE':
+ split = layout.split(percentage=0.2)
+ col = split.column()
+ col.label(text="Path:")
+ col = split.column()
+ col.prop(strip, "filepath", text="")
+ col.prop(strip, "mpeg_preseek", text="MPEG Preseek")
+ # TODO, sound???
+ # end drawing filename
+
layout.prop(strip, "use_translation", text="Image Offset:")
if strip.use_translation:
@@ -555,99 +576,23 @@ class SEQUENCER_PT_input(SequencerButtonsPanel):
layout.prop(strip, "use_crop", text="Image Crop:")
if strip.use_crop:
col = layout.column(align=True)
- col.prop(strip.crop, "top")
- col.prop(strip.crop, "left")
- col.prop(strip.crop, "bottom")
- col.prop(strip.crop, "right")
+ col.prop(strip.crop, "max_y")
+ col.prop(strip.crop, "min_x")
+ col.prop(strip.crop, "min_y")
+ col.prop(strip.crop, "max_x")
col = layout.column(align=True)
col.label(text="Trim Duration:")
- col.prop(strip, "animation_start_offset", text="Start")
- col.prop(strip, "animation_end_offset", text="End")
-
-
-class SEQUENCER_PT_input_movie(SEQUENCER_PT_input):
- bl_label = "Strip Input"
-
- def poll(self, context):
- if not self.has_sequencer(context):
- return False
-
- strip = act_strip(context)
- if not strip:
- return False
-
- return strip.type == 'MOVIE'
-
- def draw_filename(self, context):
- layout = self.layout
-
- strip = act_strip(context)
-
- split = layout.split(percentage=0.2)
- col = split.column()
- col.label(text="Path:")
- col = split.column()
- col.prop(strip, "filepath", text="")
-
-
-class SEQUENCER_PT_input_image(SEQUENCER_PT_input):
- bl_label = "Strip Input"
-
- def poll(self, context):
- if not self.has_sequencer(context):
- return False
-
- strip = act_strip(context)
- if not strip:
- return False
-
- return strip.type == 'IMAGE'
-
- def draw_filename(self, context):
- layout = self.layout
-
- strip = act_strip(context)
-
- split = layout.split(percentage=0.2)
- col = split.column()
- col.label(text="Path:")
- col = split.column()
- col.prop(strip, "directory", text="")
-
- # Current element for the filename
-
- elem = strip.getStripElem(context.scene.frame_current)
- if elem:
- split = layout.split(percentage=0.2)
- col = split.column()
- col.label(text="File:")
- col = split.column()
- col.prop(elem, "filename", text="") # strip.elements[0] could be a fallback
+ col.prop(strip, "frame_offset_start", text="Start")
+ col.prop(strip, "frame_offset_end", text="End")
-class SEQUENCER_PT_input_secondary(SEQUENCER_PT_input):
- bl_label = "Strip Input"
-
- def poll(self, context):
- if not self.has_sequencer(context):
- return False
-
- strip = act_strip(context)
- if not strip:
- return False
-
- return strip.type in ('SCENE', 'META')
-
- def draw_filename(self, context):
- pass
-
-
-class SEQUENCER_PT_sound(SequencerButtonsPanel):
+class SEQUENCER_PT_sound(SequencerButtonsPanel, bpy.types.Panel):
bl_label = "Sound"
- def poll(self, context):
- if not self.has_sequencer(context):
+ @classmethod
+ def poll(cls, context):
+ if not cls.has_sequencer(context):
return False
strip = act_strip(context)
@@ -672,22 +617,23 @@ class SEQUENCER_PT_sound(SequencerButtonsPanel):
else:
row.operator("sound.pack", icon='UGLYPACKAGE', text="Pack")
- row.prop(strip.sound, "caching")
+ row.prop(strip.sound, "use_memory_cache")
layout.prop(strip, "volume")
layout.prop(strip, "attenuation")
col = layout.column(align=True)
col.label(text="Trim Duration:")
- col.prop(strip, "animation_start_offset", text="Start")
- col.prop(strip, "animation_end_offset", text="End")
+ col.prop(strip, "animation_offset_start", text="Start")
+ col.prop(strip, "animation_offset_end", text="End")
-class SEQUENCER_PT_scene(SequencerButtonsPanel):
+class SEQUENCER_PT_scene(SequencerButtonsPanel, bpy.types.Panel):
bl_label = "Scene"
- def poll(self, context):
- if not self.has_sequencer(context):
+ @classmethod
+ def poll(cls, context):
+ if not cls.has_sequencer(context):
return False
strip = act_strip(context)
@@ -707,11 +653,12 @@ class SEQUENCER_PT_scene(SequencerButtonsPanel):
layout.template_ID(strip, "scene_camera")
-class SEQUENCER_PT_filter(SequencerButtonsPanel):
+class SEQUENCER_PT_filter(SequencerButtonsPanel, bpy.types.Panel):
bl_label = "Filter"
- def poll(self, context):
- if not self.has_sequencer(context):
+ @classmethod
+ def poll(cls, context):
+ if not cls.has_sequencer(context):
return False
strip = act_strip(context)
@@ -736,19 +683,19 @@ class SEQUENCER_PT_filter(SequencerButtonsPanel):
row = layout.row()
row.label(text="Flip:")
- row.prop(strip, "flip_x", text="X")
- row.prop(strip, "flip_y", text="Y")
+ row.prop(strip, "use_flip_x", text="X")
+ row.prop(strip, "use_flip_y", text="Y")
col = layout.column()
- col.prop(strip, "reverse_frames", text="Backwards")
- col.prop(strip, "de_interlace")
+ col.prop(strip, "use_reverse_frames", text="Backwards")
+ col.prop(strip, "use_deinterlace")
col = layout.column()
col.label(text="Colors:")
col.prop(strip, "color_saturation", text="Saturation")
- col.prop(strip, "multiply_colors", text="Multiply")
- col.prop(strip, "premultiply")
- col.prop(strip, "convert_float")
+ col.prop(strip, "color_multiply", text="Multiply")
+ col.prop(strip, "use_premultiply")
+ col.prop(strip, "use_float")
layout.prop(strip, "use_color_balance")
if strip.use_color_balance and strip.color_balance: # TODO - need to add this somehow
@@ -757,22 +704,23 @@ class SEQUENCER_PT_filter(SequencerButtonsPanel):
col = row.column()
col.template_color_wheel(strip.color_balance, "lift", value_slider=False, cubic=True)
col.row().prop(strip.color_balance, "lift")
- col.prop(strip.color_balance, "inverse_lift", text="Inverse")
+ col.prop(strip.color_balance, "invert_lift", text="Inverse")
col = row.column()
col.template_color_wheel(strip.color_balance, "gamma", value_slider=False, lock_luminosity=True, cubic=True)
col.row().prop(strip.color_balance, "gamma")
- col.prop(strip.color_balance, "inverse_gamma", text="Inverse")
+ col.prop(strip.color_balance, "invert_gamma", text="Inverse")
col = row.column()
col.template_color_wheel(strip.color_balance, "gain", value_slider=False, lock_luminosity=True, cubic=True)
col.row().prop(strip.color_balance, "gain")
- col.prop(strip.color_balance, "inverse_gain", text="Inverse")
+ col.prop(strip.color_balance, "invert_gain", text="Inverse")
-class SEQUENCER_PT_proxy(SequencerButtonsPanel):
+class SEQUENCER_PT_proxy(SequencerButtonsPanel, bpy.types.Panel):
bl_label = "Proxy"
- def poll(self, context):
- if not self.has_sequencer(context):
+ @classmethod
+ def poll(cls, context):
+ if not cls.has_sequencer(context):
return False
strip = act_strip(context)
@@ -792,16 +740,40 @@ class SEQUENCER_PT_proxy(SequencerButtonsPanel):
strip = act_strip(context)
flow = layout.column_flow()
- flow.prop(strip, "proxy_custom_directory")
- flow.prop(strip, "proxy_custom_file")
+ flow.prop(strip, "use_proxy_custom_directory")
+ flow.prop(strip, "use_proxy_custom_file")
if strip.proxy: # TODO - need to add this somehow
- if strip.proxy_custom_directory and not strip.proxy_custom_file:
+ if strip.proxy_custom_directory and not strip.use_proxy_custom_file:
flow.prop(strip.proxy, "directory")
- if strip.proxy_custom_file:
+ if strip.use_proxy_custom_file:
flow.prop(strip.proxy, "filepath")
-class SEQUENCER_PT_view(SequencerButtonsPanel_Output):
+class SEQUENCER_PT_preview(SequencerButtonsPanel_Output, bpy.types.Panel):
+ bl_label = "Scene Preview/Render"
+ bl_space_type = 'SEQUENCE_EDITOR'
+ bl_region_type = 'UI'
+
+ def draw(self, context):
+ layout = self.layout
+ render = context.scene.render
+
+ col = layout.column()
+ col.prop(render, "use_sequencer_gl_preview", text="Open GL Preview")
+ col = layout.column()
+ col.active = render.use_sequencer_gl_preview
+ col.prop(render, "sequencer_gl_preview", text="")
+
+ '''
+ col = layout.column()
+ col.prop(render, "use_sequencer_gl_render", text="Open GL Render")
+ col = layout.column()
+ col.active = render.use_sequencer_gl_render
+ col.prop(render, "sequencer_gl_render", text="")
+ '''
+
+
+class SEQUENCER_PT_view(SequencerButtonsPanel_Output, bpy.types.Panel):
bl_label = "View Settings"
def draw(self, context):
@@ -812,45 +784,17 @@ class SEQUENCER_PT_view(SequencerButtonsPanel_Output):
col = layout.column()
if st.display_mode == 'IMAGE':
col.prop(st, "draw_overexposed") # text="Zebra"
- col.prop(st, "draw_safe_margin")
+ col.prop(st, "show_safe_margin")
if st.display_mode == 'WAVEFORM':
- col.prop(st, "separate_color_preview")
+ col.prop(st, "show_separate_color")
col.prop(st, "proxy_render_size")
-classes = [
- SEQUENCER_HT_header, # header/menu classes
- SEQUENCER_MT_view,
- SEQUENCER_MT_view_toggle,
- SEQUENCER_MT_select,
- SEQUENCER_MT_marker,
- SEQUENCER_MT_add,
- SEQUENCER_MT_add_effect,
- SEQUENCER_MT_strip,
-
- SEQUENCER_PT_edit, # sequencer panels
- SEQUENCER_PT_preview,
- SEQUENCER_PT_effect,
- SEQUENCER_PT_input_movie,
- SEQUENCER_PT_input_image,
- SEQUENCER_PT_input_secondary,
- SEQUENCER_PT_sound,
- SEQUENCER_PT_scene,
- SEQUENCER_PT_filter,
- SEQUENCER_PT_proxy,
-
- SEQUENCER_PT_view] # view panels
-
-
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/space_text.py b/release/scripts/ui/space_text.py
index 692f1581bd6..0b7e215dc37 100644
--- a/release/scripts/ui/space_text.py
+++ b/release/scripts/ui/space_text.py
@@ -34,12 +34,13 @@ class TEXT_HT_header(bpy.types.Header):
if context.area.show_menus:
sub = row.row(align=True)
+ sub.menu("TEXT_MT_view")
sub.menu("TEXT_MT_text")
if text:
sub.menu("TEXT_MT_edit")
sub.menu("TEXT_MT_format")
- if text and text.modified:
+ if text and text.is_modified:
row = layout.row()
# row.color(redalert)
row.operator("text.resolve_conflict", text="", icon='HELP')
@@ -47,9 +48,9 @@ class TEXT_HT_header(bpy.types.Header):
layout.template_ID(st, "text", new="text.new", unlink="text.unlink")
row = layout.row(align=True)
- row.prop(st, "line_numbers", text="")
- row.prop(st, "word_wrap", text="")
- row.prop(st, "syntax_highlight", text="")
+ row.prop(st, "show_line_numbers", text="")
+ row.prop(st, "show_word_wrap", text="")
+ row.prop(st, "show_syntax_highlight", text="")
if text:
row = layout.row()
@@ -61,7 +62,7 @@ class TEXT_HT_header(bpy.types.Header):
row = layout.row()
if text.filepath:
- if text.dirty:
+ if text.is_dirty:
row.label(text="File: *%s (unsaved)" % text.filepath)
else:
row.label(text="File: %s" % text.filepath)
@@ -80,10 +81,11 @@ class TEXT_PT_properties(bpy.types.Panel):
st = context.space_data
flow = layout.column_flow()
- flow.prop(st, "line_numbers")
- flow.prop(st, "word_wrap")
- flow.prop(st, "syntax_highlight")
- flow.prop(st, "live_edit")
+ flow.prop(st, "show_line_numbers")
+ flow.prop(st, "show_word_wrap")
+ flow.prop(st, "show_syntax_highlight")
+ flow.prop(st, "show_line_highlight")
+ flow.prop(st, "use_live_edit")
flow = layout.column_flow()
flow.prop(st, "font_size")
@@ -91,7 +93,7 @@ class TEXT_PT_properties(bpy.types.Panel):
text = st.text
if text:
- flow.prop(text, "tabs_as_spaces")
+ flow.prop(text, "use_tabs_as_spaces")
class TEXT_PT_find(bpy.types.Panel):
@@ -123,10 +125,29 @@ class TEXT_PT_find(bpy.types.Panel):
# settings
row = layout.row()
- row.prop(st, "find_wrap", text="Wrap")
- row.prop(st, "find_all", text="All")
+ row.prop(st, "use_find_wrap", text="Wrap")
+ row.prop(st, "use_find_all", text="All")
+class TEXT_MT_view(bpy.types.Menu):
+ bl_label = "View"
+
+ def draw(self, context):
+ layout = self.layout
+
+ layout.operator("text.properties", icon='MENU_PANEL')
+
+ layout.separator()
+
+ layout.operator("screen.area_dupli")
+ layout.operator("screen.screen_full_area")
+
+ layout.separator()
+
+ layout.operator("text.move", text="Top of File").type = 'FILE_TOP'
+ layout.operator("text.move", text="Bottom of File").type = 'FILE_BOTTOM'
+
+
class TEXT_MT_text(bpy.types.Menu):
bl_label = "Text"
@@ -160,15 +181,8 @@ class TEXT_MT_text(bpy.types.Menu):
layout.separator()
- layout.operator("text.properties", icon='MENU_PANEL')
-
layout.menu("TEXT_MT_templates")
- layout.separator()
-
- layout.operator("screen.area_dupli")
- layout.operator("screen.screen_full_area")
-
class TEXT_MT_templates(bpy.types.Menu):
'''
@@ -180,16 +194,6 @@ class TEXT_MT_templates(bpy.types.Menu):
self.path_menu(bpy.utils.script_paths("templates"), "text.open", {"internal": True})
-class TEXT_MT_edit_view(bpy.types.Menu):
- bl_label = "View"
-
- def draw(self, context):
- layout = self.layout
-
- layout.operator("text.move", text="Top of File").type = 'FILE_TOP'
- layout.operator("text.move", text="Bottom of File").type = 'FILE_BOTTOM'
-
-
class TEXT_MT_edit_select(bpy.types.Menu):
bl_label = "Select"
@@ -243,7 +247,8 @@ class TEXT_MT_edit_to3d(bpy.types.Menu):
class TEXT_MT_edit(bpy.types.Menu):
bl_label = "Edit"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return (context.space_data.text)
def draw(self, context):
@@ -260,7 +265,6 @@ class TEXT_MT_edit(bpy.types.Menu):
layout.separator()
- layout.menu("TEXT_MT_edit_view")
layout.menu("TEXT_MT_edit_select")
layout.menu("TEXT_MT_edit_markers")
@@ -289,32 +293,12 @@ class TEXT_MT_toolbox(bpy.types.Menu):
layout.operator("text.run_script")
-
-classes = [
- TEXT_HT_header,
- TEXT_PT_properties,
- TEXT_PT_find,
- TEXT_MT_text,
- TEXT_MT_templates,
- TEXT_MT_format,
- TEXT_MT_edit,
- TEXT_MT_edit_view,
- TEXT_MT_edit_select,
- TEXT_MT_edit_markers,
- TEXT_MT_edit_to3d,
- TEXT_MT_toolbox]
-
-
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/space_time.py b/release/scripts/ui/space_time.py
index 042e4dbc015..cfd8401b46b 100644
--- a/release/scripts/ui/space_time.py
+++ b/release/scripts/ui/space_time.py
@@ -46,8 +46,8 @@ class TIME_HT_header(bpy.types.Header):
row.prop(scene, "frame_start", text="Start")
row.prop(scene, "frame_end", text="End")
else:
- row.prop(scene, "preview_range_frame_start", text="Start")
- row.prop(scene, "preview_range_frame_end", text="End")
+ row.prop(scene, "frame_preview_start", text="Start")
+ row.prop(scene, "frame_preview_end", text="End")
layout.prop(scene, "frame_current", text="")
@@ -56,7 +56,7 @@ class TIME_HT_header(bpy.types.Header):
row = layout.row(align=True)
row.operator("screen.frame_jump", text="", icon='REW').end = False
row.operator("screen.keyframe_jump", text="", icon='PREV_KEYFRAME').next = False
- if not screen.animation_playing:
+ if not screen.is_animation_playing:
row.operator("screen.animation_play", text="", icon='PLAY_REVERSE').reverse = True
row.operator("screen.animation_play", text="", icon='PLAY')
else:
@@ -67,17 +67,17 @@ class TIME_HT_header(bpy.types.Header):
row.operator("screen.frame_jump", text="", icon='FF').end = True
row = layout.row(align=True)
- row.prop(tools, "use_auto_keying", text="", toggle=True)
- if screen.animation_playing and tools.use_auto_keying:
+ row.prop(tools, "use_keyframe_insert_auto", text="", toggle=True)
+ if screen.is_animation_playing and tools.use_keyframe_insert_auto:
subsub = row.row()
- subsub.prop(tools, "record_with_nla", toggle=True)
+ subsub.prop(tools, "use_record_with_nla", toggle=True)
layout.prop(scene, "sync_mode", text="")
layout.separator()
row = layout.row(align=True)
- row.prop_object(scene, "active_keying_set", scene, "all_keying_sets", text="")
+ row.prop_object(scene, "active_keying_set", scene, "keying_sets_all", text="")
row.operator("anim.keyframe_insert", text="", icon='KEY_HLT')
row.operator("anim.keyframe_delete", text="", icon='KEY_DEHLT')
@@ -95,8 +95,8 @@ class TIME_MT_view(bpy.types.Menu):
layout.separator()
- layout.prop(st, "show_cframe_indicator")
- layout.prop(st, "only_selected")
+ layout.prop(st, "show_frame_indicator")
+ layout.prop(st, "show_only_selected")
layout.separator()
@@ -141,7 +141,7 @@ class TIME_MT_frame(bpy.types.Menu):
# it was ok for riscos... ok TODO, operator
for marker in context.scene.timeline_markers:
- if marker.selected:
+ if marker.select:
layout.separator()
layout.prop(marker, "name", text="", icon='MARKER_HLT')
break
@@ -166,20 +166,20 @@ class TIME_MT_playback(bpy.types.Menu):
st = context.space_data
scene = context.scene
- layout.prop(st, "play_top_left")
- layout.prop(st, "play_all_3d")
- layout.prop(st, "play_anim")
- layout.prop(st, "play_buttons")
- layout.prop(st, "play_image")
- layout.prop(st, "play_sequencer")
- layout.prop(st, "play_nodes")
+ layout.prop(st, "use_play_top_left_3d_editor")
+ layout.prop(st, "use_play_3d_editors")
+ layout.prop(st, "use_play_animation_editors")
+ layout.prop(st, "use_play_properties_editors")
+ layout.prop(st, "use_play_image_editors")
+ layout.prop(st, "use_play_sequence_editors")
+ layout.prop(st, "use_play_node_editors")
layout.separator()
- layout.prop(scene, "frame_drop", text="Frame Dropping")
- layout.prop(scene, "sync_audio", text="AV-sync", icon='SPEAKER')
- layout.prop(scene, "mute_audio")
- layout.prop(scene, "scrub_audio")
+ layout.prop(scene, "use_frame_drop", text="Frame Dropping")
+ layout.prop(scene, "use_audio_sync", text="AV-sync", icon='SPEAKER')
+ layout.prop(scene, "use_audio")
+ layout.prop(scene, "use_audio_scrub")
class TIME_MT_autokey(bpy.types.Menu):
@@ -189,28 +189,15 @@ class TIME_MT_autokey(bpy.types.Menu):
layout = self.layout
tools = context.tool_settings
- layout.prop_enum(tools, "autokey_mode", 'ADD_REPLACE_KEYS')
- layout.prop_enum(tools, "autokey_mode", 'REPLACE_KEYS')
-
-classes = [
- TIME_HT_header,
- TIME_MT_view,
- TIME_MT_cache,
- TIME_MT_frame,
- TIME_MT_autokey,
- TIME_MT_playback]
-
+ layout.prop_enum(tools, "auto_keying_mode", 'ADD_REPLACE_KEYS')
+ layout.prop_enum(tools, "auto_keying_mode", 'REPLACE_KEYS')
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/space_userpref.py b/release/scripts/ui/space_userpref.py
index 61f759a1d83..feeae5d3f9b 100644
--- a/release/scripts/ui/space_userpref.py
+++ b/release/scripts/ui/space_userpref.py
@@ -45,9 +45,9 @@ def ui_items_general(col, context):
colsub = padding.column()
colsub.row().prop(context, "text")
colsub.row().prop(context, "text_sel")
- colsub.prop(context, "shaded")
+ colsub.prop(context, "show_shaded")
subsub = colsub.column(align=True)
- subsub.active = context.shaded
+ subsub.active = context.show_shaded
subsub.prop(context, "shadetop")
subsub.prop(context, "shadedown")
@@ -57,13 +57,10 @@ def ui_items_general(col, context):
def opengl_lamp_buttons(column, lamp):
split = column.split(percentage=0.1)
- if lamp.enabled == True:
- split.prop(lamp, "enabled", text="", icon='OUTLINER_OB_LAMP')
- else:
- split.prop(lamp, "enabled", text="", icon='LAMP_DATA')
+ split.prop(lamp, "use", text="", icon='OUTLINER_OB_LAMP' if lamp.use else 'LAMP_DATA')
col = split.column()
- col.active = lamp.enabled
+ col.active = lamp.use
row = col.row()
row.label(text="Diffuse:")
row.prop(lamp, "diffuse_color", text="")
@@ -72,7 +69,7 @@ def opengl_lamp_buttons(column, lamp):
row.prop(lamp, "specular_color", text="")
col = split.column()
- col.active = lamp.enabled
+ col.active = lamp.use
col.prop(lamp, "direction", text="")
@@ -91,15 +88,12 @@ class USERPREF_HT_header(bpy.types.Header):
layout.operator_context = 'INVOKE_DEFAULT'
if userpref.active_section == 'INPUT':
- op = layout.operator("wm.keyconfig_export")
- op.filepath = "keymap.py"
- op = layout.operator("wm.keyconfig_import")
- op.filepath = "keymap.py"
+ layout.operator("wm.keyconfig_export")
+ layout.operator("wm.keyconfig_import")
elif userpref.active_section == 'ADDONS':
- op = layout.operator("wm.addon_install")
- op.filepath = "*.py"
+ layout.operator("wm.addon_install")
elif userpref.active_section == 'THEMES':
- op = layout.operator("ui.reset_default_theme")
+ layout.operator("ui.reset_default_theme")
class USERPREF_PT_tabs(bpy.types.Panel):
@@ -142,7 +136,8 @@ class USERPREF_PT_interface(bpy.types.Panel):
bl_region_type = 'WINDOW'
bl_show_header = False
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
userpref = context.user_preferences
return (userpref.active_section == 'INTERFACE')
@@ -156,12 +151,12 @@ class USERPREF_PT_interface(bpy.types.Panel):
col = row.column()
col.label(text="Display:")
- col.prop(view, "tooltips")
- col.prop(view, "display_object_info", text="Object Info")
- col.prop(view, "use_large_cursors")
+ col.prop(view, "show_tooltips")
+ col.prop(view, "show_object_info", text="Object Info")
+ col.prop(view, "show_large_cursors")
col.prop(view, "show_view_name", text="View Name")
col.prop(view, "show_playback_fps", text="Playback FPS")
- col.prop(view, "global_scene")
+ col.prop(view, "use_global_scene")
col.prop(view, "object_origin_size")
col.separator()
@@ -170,30 +165,24 @@ class USERPREF_PT_interface(bpy.types.Panel):
col.prop(view, "show_mini_axis", text="Display Mini Axis")
sub = col.column()
- sub.enabled = view.show_mini_axis
+ sub.active = view.show_mini_axis
sub.prop(view, "mini_axis_size", text="Size")
sub.prop(view, "mini_axis_brightness", text="Brightness")
col.separator()
- col.separator()
- col.separator()
-
- col.label(text="Properties Window:")
- col.prop(view, "properties_width_check")
-
row.separator()
row.separator()
col = row.column()
col.label(text="View Manipulation:")
- col.prop(view, "auto_depth")
- col.prop(view, "zoom_to_mouse")
- col.prop(view, "rotate_around_selection")
- col.prop(view, "global_pivot")
+ col.prop(view, "use_mouse_auto_depth")
+ col.prop(view, "use_zoom_to_mouse")
+ col.prop(view, "use_rotate_around_active")
+ col.prop(view, "use_global_pivot")
col.separator()
- col.prop(view, "auto_perspective")
+ col.prop(view, "use_auto_perspective")
col.prop(view, "smooth_view")
col.prop(view, "rotation_angle")
@@ -201,7 +190,7 @@ class USERPREF_PT_interface(bpy.types.Panel):
col.separator()
col.label(text="2D Viewports:")
- col.prop(view, "view2d_grid_minimum_spacing", text="Minimum Grid Spacing")
+ col.prop(view, "view2d_grid_spacing_min", text="Minimum Grid Spacing")
col.prop(view, "timecode_style")
row.separator()
@@ -210,13 +199,13 @@ class USERPREF_PT_interface(bpy.types.Panel):
col = row.column()
#Toolbox doesn't exist yet
#col.label(text="Toolbox:")
- #col.prop(view, "use_column_layout")
+ #col.prop(view, "show_column_layout")
#col.label(text="Open Toolbox Delay:")
#col.prop(view, "open_left_mouse_delay", text="Hold LMB")
#col.prop(view, "open_right_mouse_delay", text="Hold RMB")
- col.prop(view, "use_manipulator")
+ col.prop(view, "show_manipulator")
sub = col.column()
- sub.enabled = view.use_manipulator
+ sub.active = view.show_manipulator
sub.prop(view, "manipulator_size", text="Size")
sub.prop(view, "manipulator_handle_size", text="Handle Size")
sub.prop(view, "manipulator_hotspot", text="Hotspot")
@@ -226,7 +215,7 @@ class USERPREF_PT_interface(bpy.types.Panel):
col.separator()
col.label(text="Menus:")
- col.prop(view, "open_mouse_over")
+ col.prop(view, "use_mouse_over_open")
col.label(text="Menu Open Delay:")
col.prop(view, "open_toplevel_delay", text="Top Level")
col.prop(view, "open_sublevel_delay", text="Sub Level")
@@ -242,7 +231,8 @@ class USERPREF_PT_edit(bpy.types.Panel):
bl_region_type = 'WINDOW'
bl_show_header = False
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
userpref = context.user_preferences
return (userpref.active_section == 'EDITING')
@@ -263,7 +253,7 @@ class USERPREF_PT_edit(bpy.types.Panel):
col.separator()
col.label(text="New Objects:")
- col.prop(edit, "enter_edit_mode")
+ col.prop(edit, "use_enter_edit_mode")
col.label(text="Align To:")
col.prop(edit, "object_align", text="")
@@ -272,7 +262,7 @@ class USERPREF_PT_edit(bpy.types.Panel):
col.separator()
col.label(text="Undo:")
- col.prop(edit, "global_undo")
+ col.prop(edit, "use_global_undo")
col.prop(edit, "undo_steps", text="Steps")
col.prop(edit, "undo_memory_limit", text="Memory Limit")
@@ -283,9 +273,9 @@ class USERPREF_PT_edit(bpy.types.Panel):
col.label(text="Grease Pencil:")
col.prop(edit, "grease_pencil_manhattan_distance", text="Manhattan Distance")
col.prop(edit, "grease_pencil_euclidean_distance", text="Euclidean Distance")
- #col.prop(edit, "grease_pencil_simplify_stroke", text="Simplify Stroke")
+ #col.prop(edit, "use_grease_pencil_simplify_stroke", text="Simplify Stroke")
col.prop(edit, "grease_pencil_eraser_radius", text="Eraser Radius")
- col.prop(edit, "grease_pencil_smooth_stroke", text="Smooth Stroke")
+ col.prop(edit, "use_grease_pencil_smooth_stroke", text="Smooth Stroke")
col.separator()
col.separator()
col.separator()
@@ -298,7 +288,7 @@ class USERPREF_PT_edit(bpy.types.Panel):
col = row.column()
col.label(text="Keyframing:")
col.prop(edit, "use_visual_keying")
- col.prop(edit, "keyframe_insert_needed", text="Only Insert Needed")
+ col.prop(edit, "use_keyframe_insert_needed", text="Only Insert Needed")
col.separator()
@@ -306,55 +296,48 @@ class USERPREF_PT_edit(bpy.types.Panel):
sub = col.column()
- # sub.active = edit.use_auto_keying # incorrect, timeline can enable
- sub.prop(edit, "auto_keyframe_insert_keyingset", text="Only Insert for Keying Set")
- sub.prop(edit, "auto_keyframe_insert_available", text="Only Insert Available")
+ # sub.active = edit.use_keyframe_insert_auto # incorrect, timeline can enable
+ sub.prop(edit, "use_keyframe_insert_keyingset", text="Only Insert for Keying Set")
+ sub.prop(edit, "use_keyframe_insert_available", text="Only Insert Available")
col.separator()
col.label(text="New F-Curve Defaults:")
col.prop(edit, "keyframe_new_interpolation_type", text="Interpolation")
col.prop(edit, "keyframe_new_handle_type", text="Handles")
- col.prop(edit, "insertkey_xyz_to_rgb", text="XYZ to RGB")
+ col.prop(edit, "use_insertkey_xyz_to_rgb", text="XYZ to RGB")
col.separator()
col.separator()
col.separator()
col.label(text="Transform:")
- col.prop(edit, "drag_immediately")
+ col.prop(edit, "use_drag_immediately")
row.separator()
row.separator()
- sculpt = context.tool_settings.sculpt
col = row.column()
- col.label(text="Paint and Sculpt:")
- col.prop(edit, "sculpt_paint_use_unified_size", text="Unify Size")
- col.prop(edit, "sculpt_paint_use_unified_strength", text="Unify Strength")
row = col.row(align=True)
- row.label("Overlay Color:")
- row.prop(edit, "sculpt_paint_overlay_col", text="")
- col.prop(sculpt, "use_openmp", text="Threaded Sculpt")
- col.prop(sculpt, "show_brush")
+ row.prop(edit, "sculpt_paint_overlay_color", text="Sculpt Overlay Color")
col.separator()
col.separator()
col.separator()
col.label(text="Duplicate Data:")
- col.prop(edit, "duplicate_mesh", text="Mesh")
- col.prop(edit, "duplicate_surface", text="Surface")
- col.prop(edit, "duplicate_curve", text="Curve")
- col.prop(edit, "duplicate_text", text="Text")
- col.prop(edit, "duplicate_metaball", text="Metaball")
- col.prop(edit, "duplicate_armature", text="Armature")
- col.prop(edit, "duplicate_lamp", text="Lamp")
- col.prop(edit, "duplicate_material", text="Material")
- col.prop(edit, "duplicate_texture", text="Texture")
- col.prop(edit, "duplicate_fcurve", text="F-Curve")
- col.prop(edit, "duplicate_action", text="Action")
- col.prop(edit, "duplicate_particle", text="Particle")
+ col.prop(edit, "use_duplicate_mesh", text="Mesh")
+ col.prop(edit, "use_duplicate_surface", text="Surface")
+ col.prop(edit, "use_duplicate_curve", text="Curve")
+ col.prop(edit, "use_duplicate_text", text="Text")
+ col.prop(edit, "use_duplicate_metaball", text="Metaball")
+ col.prop(edit, "use_duplicate_armature", text="Armature")
+ col.prop(edit, "use_duplicate_lamp", text="Lamp")
+ col.prop(edit, "use_duplicate_material", text="Material")
+ col.prop(edit, "use_duplicate_texture", text="Texture")
+ #col.prop(edit, "use_duplicate_fcurve", text="F-Curve")
+ col.prop(edit, "use_duplicate_action", text="Action")
+ col.prop(edit, "use_duplicate_particle", text="Particle")
class USERPREF_PT_system(bpy.types.Panel):
@@ -363,7 +346,8 @@ class USERPREF_PT_system(bpy.types.Panel):
bl_region_type = 'WINDOW'
bl_show_header = False
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
userpref = context.user_preferences
return (userpref.active_section == 'SYSTEM')
@@ -385,8 +369,8 @@ class USERPREF_PT_system(bpy.types.Panel):
col.prop(system, "dpi")
col.prop(system, "frame_server_port")
col.prop(system, "scrollback", text="Console Scrollback")
- col.prop(system, "auto_execute_scripts")
- col.prop(system, "tabs_as_spaces")
+ col.prop(system, "use_scripts_auto_execute")
+ col.prop(system, "use_tabs_as_spaces")
col.separator()
col.separator()
@@ -396,7 +380,7 @@ class USERPREF_PT_system(bpy.types.Panel):
col.row().prop(system, "audio_device", expand=True)
sub = col.column()
sub.active = system.audio_device != 'NONE'
- #sub.prop(system, "enable_all_codecs")
+ #sub.prop(system, "use_preview_images")
sub.prop(system, "audio_channels", text="Channels")
sub.prop(system, "audio_mixing_buffer", text="Mixing Buffer")
sub.prop(system, "audio_sample_rate", text="Sample Rate")
@@ -419,9 +403,9 @@ class USERPREF_PT_system(bpy.types.Panel):
# No translation in 2.5 yet
#col.prop(system, "language")
#col.label(text="Translate:")
- #col.prop(system, "translate_tooltips", text="Tooltips")
- #col.prop(system, "translate_buttons", text="Labels")
- #col.prop(system, "translate_toolbox", text="Toolbox")
+ #col.prop(system, "use_translate_tooltips", text="Tooltips")
+ #col.prop(system, "use_translate_buttons", text="Labels")
+ #col.prop(system, "use_translate_toolbox", text="Toolbox")
#col.separator()
@@ -434,9 +418,9 @@ class USERPREF_PT_system(bpy.types.Panel):
col = colsplit.column()
col.label(text="OpenGL:")
- col.prop(system, "clip_alpha", slider=True)
+ col.prop(system, "gl_clip_alpha", slider=True)
col.prop(system, "use_mipmaps")
- col.prop(system, "use_vbos")
+ col.prop(system, "use_vertex_buffer_objects")
#Anti-aliasing is disabled as it breaks broder/lasso select
#col.prop(system, "use_antialiasing")
col.label(text="Window Draw Method:")
@@ -527,7 +511,8 @@ class USERPREF_PT_theme(bpy.types.Panel):
for i, attr in enumerate(props_ls):
colsub_pair[i % 2].row().prop(themedata, attr)
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
userpref = context.user_preferences
return (userpref.active_section == 'THEMES')
@@ -659,7 +644,8 @@ class USERPREF_PT_file(bpy.types.Panel):
bl_region_type = 'WINDOW'
bl_show_header = False
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
userpref = context.user_preferences
return (userpref.active_section == 'FILES')
@@ -690,13 +676,13 @@ class USERPREF_PT_file(bpy.types.Panel):
sub.label(text="Animation Player:")
sub = col1.column()
- sub.prop(paths, "fonts_directory", text="")
- sub.prop(paths, "textures_directory", text="")
+ sub.prop(paths, "font_directory", text="")
+ sub.prop(paths, "texture_directory", text="")
sub.prop(paths, "texture_plugin_directory", text="")
sub.prop(paths, "sequence_plugin_directory", text="")
sub.prop(paths, "render_output_directory", text="")
- sub.prop(paths, "python_scripts_directory", text="")
- sub.prop(paths, "sounds_directory", text="")
+ sub.prop(paths, "script_directory", text="")
+ sub.prop(paths, "sound_directory", text="")
sub.prop(paths, "temporary_directory", text="")
sub.prop(paths, "image_editor", text="")
subsplit = sub.split(percentage=0.3)
@@ -706,10 +692,10 @@ class USERPREF_PT_file(bpy.types.Panel):
col = split.column()
col.label(text="Save & Load:")
col.prop(paths, "use_relative_paths")
- col.prop(paths, "compress_file")
- col.prop(paths, "load_ui")
- col.prop(paths, "filter_file_extensions")
- col.prop(paths, "hide_dot_files_datablocks")
+ col.prop(paths, "use_file_compression")
+ col.prop(paths, "use_load_ui")
+ col.prop(paths, "use_filter_files")
+ col.prop(paths, "show_hidden_files_datablocks")
col.separator()
col.separator()
@@ -717,10 +703,10 @@ class USERPREF_PT_file(bpy.types.Panel):
col.label(text="Auto Save:")
col.prop(paths, "save_version")
col.prop(paths, "recent_files")
- col.prop(paths, "save_preview_images")
- col.prop(paths, "auto_save_temporary_files")
+ col.prop(paths, "use_save_preview_images")
+ col.prop(paths, "use_auto_save_temporary_files")
sub = col.column()
- sub.enabled = paths.auto_save_temporary_files
+ sub.active = paths.use_auto_save_temporary_files
sub.prop(paths, "auto_save_time", text="Timer (mins)")
from space_userpref_keymap import InputKeyMapPanel
@@ -730,7 +716,8 @@ class USERPREF_PT_input(InputKeyMapPanel):
bl_space_type = 'USER_PREFERENCES'
bl_label = "Input"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
userpref = context.user_preferences
return (userpref.active_section == 'INPUT')
@@ -748,38 +735,39 @@ class USERPREF_PT_input(InputKeyMapPanel):
sub.label(text="Mouse:")
sub1 = sub.column()
- sub1.enabled = (inputs.select_mouse == 'RIGHT')
- sub1.prop(inputs, "emulate_3_button_mouse")
- sub.prop(inputs, "continuous_mouse")
+ sub1.active = (inputs.select_mouse == 'RIGHT')
+ sub1.prop(inputs, "use_mouse_emulate_3_button")
+ sub.prop(inputs, "use_mouse_continuous")
sub.label(text="Select With:")
sub.row().prop(inputs, "select_mouse", expand=True)
sub = col.column()
sub.label(text="Double Click:")
- sub.prop(inputs, "double_click_time", text="Speed")
+ sub.prop(inputs, "mouse_double_click_time", text="Speed")
sub.separator()
- sub.prop(inputs, "emulate_numpad")
+ sub.prop(inputs, "use_emulate_numpad")
sub.separator()
sub.label(text="Orbit Style:")
- sub.row().prop(inputs, "view_rotation", expand=True)
+ sub.row().prop(inputs, "view_rotate_method", expand=True)
sub.label(text="Zoom Style:")
- sub.row().prop(inputs, "zoom_style", text="")
- if inputs.zoom_style == 'DOLLY':
- sub.row().prop(inputs, "zoom_axis", expand=True)
- sub.prop(inputs, "invert_zoom_direction")
+ sub.row().prop(inputs, "view_zoom_method", text="")
+ if inputs.view_zoom_method == 'DOLLY':
+ sub.row().prop(inputs, "view_zoom_axis", expand=True)
+ sub.prop(inputs, "invert_mouse_wheel_zoom")
- #sub.prop(inputs, "use_middle_mouse_paste")
+ #sub.prop(inputs, "use_mouse_mmb_paste")
#col.separator()
- #sub = col.column()
- #sub.label(text="Mouse Wheel:")
+ sub = col.column()
+ sub.label(text="Mouse Wheel:")
+ sub.prop(inputs, "invert_zoom_wheel", text="Invert Wheel Zoom Direction")
#sub.prop(view, "wheel_scroll_lines", text="Scroll Lines")
col.separator()
@@ -820,24 +808,112 @@ class USERPREF_PT_addons(bpy.types.Panel):
bl_label = "Addons"
bl_region_type = 'WINDOW'
bl_show_header = False
+
+ _addons_fake_modules = {}
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
userpref = context.user_preferences
return (userpref.active_section == 'ADDONS')
@staticmethod
+ def module_get(mod_name):
+ return USERPREF_PT_addons._addons_fake_modules[mod_name]
+
+ @staticmethod
def _addon_list():
+ import os
import sys
+ import time
+
modules = []
loaded_modules = set()
paths = bpy.utils.script_paths("addons")
- # sys.path.insert(0, None)
- for path in paths:
- # sys.path[0] = path
- modules.extend(bpy.utils.modules_from_path(path, loaded_modules))
+ # if folder addons_contrib/ exists, scripts in there will be loaded
+ paths += bpy.utils.script_paths("addons_contrib")
+
+ if bpy.app.debug:
+ t_main = time.time()
+
+ # fake module importing
+ def fake_module(mod_name, mod_path, speedy=True):
+ if bpy.app.debug:
+ print("fake_module", mod_name, mod_path)
+ import ast
+ ModuleType = type(ast)
+ if speedy:
+ lines = []
+ line_iter = iter(open(mod_path, "r"))
+ l = ""
+ while not l.startswith("bl_addon_info"):
+ l = line_iter.readline()
+ if len(l) == 0:
+ break
+ while l.rstrip():
+ lines.append(l)
+ l = line_iter.readline()
+ del line_iter
+ data = "".join(lines)
+
+ else:
+ data = open(mod_path, "r").read()
+
+ ast_data = ast.parse(data, filename=mod_path)
+ body_info = None
+ for body in ast_data.body:
+ if body.__class__ == ast.Assign:
+ if len(body.targets) == 1:
+ if getattr(body.targets[0], "id", "") == "bl_addon_info":
+ body_info = body
+ break
+
+ if body_info:
+ mod = ModuleType(mod_name)
+ mod.bl_addon_info = ast.literal_eval(body.value)
+ mod.__file__ = mod_path
+ mod.__time__ = os.path.getmtime(mod_path)
+ return mod
+ else:
+ return None
+
+ modules_stale = set(USERPREF_PT_addons._addons_fake_modules.keys())
- # del sys.path[0]
- return modules
+ for path in paths:
+ for f in sorted(os.listdir(path)):
+ if f.endswith(".py"):
+ mod_name = f[0:-3]
+ mod_path = os.path.join(path, f)
+ elif ("." not in f) and (os.path.isfile(os.path.join(path, f, "__init__.py"))):
+ mod_name = f
+ mod_path = os.path.join(path, f, "__init__.py")
+ else:
+ mod_name = ""
+ mod_path = ""
+
+ if mod_name:
+ if mod_name in modules_stale:
+ modules_stale.remove(mod_name)
+ mod = USERPREF_PT_addons._addons_fake_modules.get(mod_name)
+ if mod:
+ if mod.__time__ != os.path.getmtime(mod_path):
+ print("Reloading", mod_name)
+ del USERPREF_PT_addons._addons_fake_modules[mod_name]
+ mod = None
+
+ if mod is None:
+ mod = fake_module(mod_name, mod_path)
+ if mod:
+ USERPREF_PT_addons._addons_fake_modules[mod_name] = mod
+
+
+ # just incase we get stale modules, not likely
+ for mod_stale in modules_stale:
+ del USERPREF_PT_addons._addons_fake_modules[mod_stale]
+ del modules_stale
+
+ mod_list = list(USERPREF_PT_addons._addons_fake_modules.values())
+ mod_list.sort(key=lambda mod: (mod.bl_addon_info['category'], mod.bl_addon_info['name']))
+ return mod_list
def draw(self, context):
layout = self.layout
@@ -892,7 +968,7 @@ class USERPREF_PT_addons(bpy.types.Panel):
colsub = box.column()
row = colsub.row()
- row.operator("wm.addon_expand", icon='TRIA_DOWN' if info["expanded"] else 'TRIA_RIGHT', emboss=False).module = module_name
+ row.operator("wm.addon_expand", icon='TRIA_DOWN' if info["show_expanded"] else 'TRIA_RIGHT', emboss=False).module = module_name
rowsub = row.row()
rowsub.active = is_enabled
@@ -904,7 +980,7 @@ class USERPREF_PT_addons(bpy.types.Panel):
row.operator("wm.addon_enable", icon='CHECKBOX_DEHLT', text="", emboss=False).module = module_name
# Expanded UI (only if additional infos are available)
- if info["expanded"]:
+ if info["show_expanded"]:
if info["description"]:
split = colsub.row().split(percentage=0.15)
split.label(text='Description:')
@@ -961,7 +1037,7 @@ class USERPREF_PT_addons(bpy.types.Panel):
from bpy.props import *
-def addon_info_get(mod, info_basis={"name": "", "author": "", "version": "", "blender": "", "location": "", "description": "", "wiki_url": "", "tracker_url": "", "category": "", "warning": "", "expanded": False}):
+def addon_info_get(mod, info_basis={"name": "", "author": "", "version": "", "blender": "", "location": "", "description": "", "wiki_url": "", "tracker_url": "", "category": "", "warning": "", "show_expanded": False}):
addon_info = getattr(mod, "bl_addon_info", {})
# avoid re-initializing
@@ -991,8 +1067,13 @@ class WM_OT_addon_enable(bpy.types.Operator):
def execute(self, context):
module_name = self.properties.module
+ # note, this still gets added to _bpy_types.TypeMap
+ import bpy_types as _bpy_types
+ _bpy_types._register_immediate = False
+
try:
mod = __import__(module_name)
+ _bpy_types._register_module(module_name)
mod.register()
except:
import traceback
@@ -1007,7 +1088,9 @@ class WM_OT_addon_enable(bpy.types.Operator):
if info.get("blender", (0, 0, 0)) > bpy.app.version:
self.report("WARNING','This script was written for a newer version of Blender and might not function (correctly).\nThe script is enabled though.")
-
+
+ _bpy_types._register_immediate = True
+
return {'FINISHED'}
@@ -1019,13 +1102,15 @@ class WM_OT_addon_disable(bpy.types.Operator):
module = StringProperty(name="Module", description="Module name of the addon to disable")
def execute(self, context):
- import traceback
+ import bpy_types as _bpy_types
module_name = self.properties.module
try:
mod = __import__(module_name)
+ _bpy_types._unregister_module(module_name, free=False) # dont free because we may want to enable again.
mod.unregister()
except:
+ import traceback
traceback.print_exc()
addons = context.user_preferences.addons
@@ -1111,49 +1196,25 @@ class WM_OT_addon_expand(bpy.types.Operator):
def execute(self, context):
module_name = self.properties.module
- # unlikely to fail, module should have alredy been imported
+ # unlikely to fail, module should have already been imported
try:
- mod = __import__(module_name)
+ # mod = __import__(module_name)
+ mod = USERPREF_PT_addons.module_get(module_name)
except:
import traceback
traceback.print_exc()
return {'CANCELLED'}
info = addon_info_get(mod)
- info["expanded"] = not info["expanded"]
+ info["show_expanded"] = not info["show_expanded"]
return {'FINISHED'}
-classes = [
- USERPREF_HT_header,
- USERPREF_PT_tabs,
- USERPREF_PT_interface,
- USERPREF_PT_theme,
- USERPREF_PT_edit,
- USERPREF_PT_system,
- USERPREF_PT_file,
- USERPREF_PT_input,
- USERPREF_PT_addons,
-
- USERPREF_MT_interaction_presets,
- USERPREF_MT_splash,
-
- WM_OT_addon_enable,
- WM_OT_addon_disable,
- WM_OT_addon_install,
- WM_OT_addon_expand]
-
-
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
-
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/space_userpref_keymap.py b/release/scripts/ui/space_userpref_keymap.py
index c93b24d5cb2..f966f8a7e8b 100644
--- a/release/scripts/ui/space_userpref_keymap.py
+++ b/release/scripts/ui/space_userpref_keymap.py
@@ -19,8 +19,8 @@
# <pep8 compliant>
import bpy
import os
-import re
-import shutil
+
+KM_MOD_PREFIX = "keyconfig_"
KM_HIERARCHY = [
('Window', 'EMPTY', 'WINDOW', []), # file save, window change, exit
@@ -167,39 +167,39 @@ class InputKeyMapPanel(bpy.types.Panel):
col = self.indented_layout(layout, level)
row = col.row()
- row.prop(km, "children_expanded", text="", emboss=False)
+ row.prop(km, "show_expanded_children", text="", emboss=False)
row.label(text=km.name)
row.label()
row.label()
- if km.modal:
+ if km.is_modal:
row.label(text="", icon='LINKED')
- if km.user_defined:
+ if km.is_user_defined:
op = row.operator("wm.keymap_restore", text="Restore")
else:
op = row.operator("wm.keymap_edit", text="Edit")
- if km.children_expanded:
+ if km.show_expanded_children:
if children:
# Put the Parent key map's entries in a 'global' sub-category
# equal in hierarchy to the other children categories
subcol = self.indented_layout(col, level + 1)
subrow = subcol.row()
- subrow.prop(km, "items_expanded", text="", emboss=False)
+ subrow.prop(km, "show_expanded_items", text="", emboss=False)
subrow.label(text="%s (Global)" % km.name)
else:
- km.items_expanded = True
+ km.show_expanded_items = True
# Key Map items
- if km.items_expanded:
+ if km.show_expanded_items:
for kmi in km.items:
self.draw_kmi(display_keymaps, kc, km, kmi, col, level + 1)
# "Add New" at end of keymap item list
col = self.indented_layout(col, level + 1)
subcol = col.split(percentage=0.2).column()
- subcol.enabled = km.user_defined
+ subcol.enabled = km.is_user_defined
op = subcol.operator("wm.keyitem_add", text="Add New", icon='ZOOMIN')
col.separator()
@@ -217,7 +217,7 @@ class InputKeyMapPanel(bpy.types.Panel):
col = self.indented_layout(layout, level)
- if km.user_defined:
+ if km.is_user_defined:
col = col.column(align=True)
box = col.box()
else:
@@ -227,19 +227,19 @@ class InputKeyMapPanel(bpy.types.Panel):
# header bar
row = split.row()
- row.prop(kmi, "expanded", text="", emboss=False)
+ row.prop(kmi, "show_expanded", text="", emboss=False)
row = split.row()
- row.enabled = km.user_defined
+ row.enabled = km.is_user_defined
row.prop(kmi, "active", text="", emboss=False)
- if km.modal:
+ if km.is_modal:
row.prop(kmi, "propvalue", text="")
else:
row.label(text=kmi.name)
row = split.row()
- row.enabled = km.user_defined
+ row.enabled = km.is_user_defined
row.prop(kmi, "map_type", text="")
if map_type == 'KEYBOARD':
row.prop(kmi, "type", text="", full_event=True)
@@ -261,16 +261,16 @@ class InputKeyMapPanel(bpy.types.Panel):
op.item_id = kmi.id
# Expanded, additional event settings
- if kmi.expanded:
+ if kmi.show_expanded:
box = col.box()
- box.enabled = km.user_defined
+ box.enabled = km.is_user_defined
if map_type not in ('TEXTINPUT', 'TIMER'):
split = box.split(percentage=0.4)
sub = split.row()
- if km.modal:
+ if km.is_modal:
sub.prop(kmi, "propvalue", text="")
else:
sub.prop(kmi, "idname", text="")
@@ -299,9 +299,8 @@ class InputKeyMapPanel(bpy.types.Panel):
if title:
box.label(text=title)
flow = box.column_flow(columns=2)
- for pname in dir(properties):
+ for pname, value in properties.items():
if not properties.is_property_hidden(pname):
- value = eval("properties." + pname)
if isinstance(value, bpy.types.OperatorProperties):
display_properties(value, title=pname)
else:
@@ -313,7 +312,7 @@ class InputKeyMapPanel(bpy.types.Panel):
display_properties(props)
# Modal key maps attached to this operator
- if not km.modal:
+ if not km.is_modal:
kmm = kc.find_keymap_modal(kmi.idname)
if kmm:
self.draw_km(display_keymaps, kc, kmm, None, layout, level + 1)
@@ -335,7 +334,7 @@ class InputKeyMapPanel(bpy.types.Panel):
row.label()
row.label()
- if km.user_defined:
+ if km.is_user_defined:
op = row.operator("wm.keymap_restore", text="Restore")
else:
op = row.operator("wm.keymap_edit", text="Edit")
@@ -346,7 +345,7 @@ class InputKeyMapPanel(bpy.types.Panel):
# "Add New" at end of keymap item list
col = self.indented_layout(layout, 1)
subcol = col.split(percentage=0.2).column()
- subcol.enabled = km.user_defined
+ subcol.enabled = km.is_user_defined
op = subcol.operator("wm.keyitem_add", text="Add New", icon='ZOOMIN')
def draw_hierarchy(self, display_keymaps, layout):
@@ -369,13 +368,13 @@ class InputKeyMapPanel(bpy.types.Panel):
layout.set_context_pointer("keyconfig", wm.active_keyconfig)
row.operator("wm.keyconfig_remove", text="", icon='X')
- row.prop(context.space_data, "filter", icon="VIEWZOOM")
+ row.prop(context.space_data, "filter_text", icon="VIEWZOOM")
col.separator()
display_keymaps = _merge_keymaps(kc, defkc)
- if context.space_data.filter != "":
- filter = context.space_data.filter.lower()
+ if context.space_data.filter_text != "":
+ filter_text = context.space_data.filter_text.lower()
self.draw_filtered(display_keymaps, filter, col)
else:
self.draw_hierarchy(display_keymaps, col)
@@ -384,6 +383,21 @@ class InputKeyMapPanel(bpy.types.Panel):
from bpy.props import *
+def export_properties(prefix, properties, lines=None):
+ if lines is None:
+ lines = []
+
+ for value, pname in properties.items():
+ if not properties.is_property_hidden(pname):
+ if isinstance(value, bpy.types.OperatorProperties):
+ export_properties(prefix + "." + pname, value, lines)
+ elif properties.is_property_set(pname):
+ value = _string_value(value)
+ if value != "":
+ lines.append("%s.%s = %s\n" % (prefix, pname, value))
+ return lines
+
+
class WM_OT_keyconfig_test(bpy.types.Operator):
"Test keyconfig for conflicts"
bl_idname = "wm.keyconfig_test"
@@ -393,7 +407,7 @@ class WM_OT_keyconfig_test(bpy.types.Operator):
result = False
def kmistr(kmi):
- if km.modal:
+ if km.is_modal:
s = ["kmi = km.items.add_modal(\'%s\', \'%s\', \'%s\'" % (kmi.propvalue, kmi.type, kmi.value)]
else:
s = ["kmi = km.items.add(\'%s\', \'%s\', \'%s\'" % (kmi.idname, kmi.type, kmi.value)]
@@ -414,21 +428,10 @@ class WM_OT_keyconfig_test(bpy.types.Operator):
s.append(")\n")
- def export_properties(prefix, properties):
- for pname in dir(properties):
- if not properties.is_property_hidden(pname):
- value = eval("properties.%s" % pname)
- if isinstance(value, bpy.types.OperatorProperties):
- export_properties(prefix + "." + pname, value)
- elif properties.is_property_set(pname):
- value = _string_value(value)
- if value != "":
- s.append(prefix + ".%s = %s\n" % (pname, value))
-
props = kmi.properties
if props is not None:
- export_properties("kmi.properties", props)
+ export_properties("kmi.properties", props, s)
return "".join(s).strip()
@@ -508,7 +511,7 @@ class WM_OT_keyconfig_import(bpy.types.Operator):
bl_idname = "wm.keyconfig_import"
bl_label = "Import Key Configuration..."
- filepath = StringProperty(name="File Path", description="Filepath to write file to")
+ filepath = StringProperty(name="File Path", description="Filepath to write file to", default="keymap.py")
filter_folder = BoolProperty(name="Filter folders", description="", default=True, options={'HIDDEN'})
filter_text = BoolProperty(name="Filter text", description="", default=True, options={'HIDDEN'})
filter_python = BoolProperty(name="Filter python", description="", default=True, options={'HIDDEN'})
@@ -516,25 +519,26 @@ class WM_OT_keyconfig_import(bpy.types.Operator):
keep_original = BoolProperty(name="Keep original", description="Keep original file after copying to configuration folder", default=True)
def execute(self, context):
- if not self.properties.filepath:
+ import shutil
+ if not self.properties.is_property_set("filepath"):
raise Exception("Filepath not set")
f = open(self.properties.filepath, "r")
if not f:
raise Exception("Could not open file")
- name_pattern = re.compile("^kc = wm.add_keyconfig\('(.*)'\)$")
-
- for line in f.readlines():
- match = name_pattern.match(line)
-
- if match:
- config_name = match.groups()[0]
+ config_name = None
+ for line in f:
+ if line.startswith("kc = wm.add_keyconfig("):
+ config_name = line[23:-3]
+ break
- f.close()
+ if config_name is None:
+ raise Exception("config name not found")
- path = os.path.split(os.path.split(__file__)[0])[0] # remove ui/space_userpref.py
- path = os.path.join(path, "cfg")
+ path = os.path.join(__file__, "..", "..", "cfg") # remove ui/space_userpref.py
+ path = os.path.normpath(path)
+ print(path)
# create config folder if needed
if not os.path.exists(path):
@@ -547,7 +551,16 @@ class WM_OT_keyconfig_import(bpy.types.Operator):
else:
shutil.move(self.properties.filepath, path)
- exec("import " + config_name)
+ # sneaky way to check we're actually running the code.
+ wm = context.manager
+ while config_name in wm.keyconfigs:
+ wm.remove_keyconfig(wm.keyconfigs[config_name])
+
+ wm = context.manager
+ totmap = len(wm.keyconfigs)
+ mod = __import__(config_name)
+ if totmap == len(wm.keyconfigs):
+ reload(mod)
wm = bpy.context.manager
wm.active_keyconfig = wm.keyconfigs[config_name]
@@ -567,14 +580,14 @@ class WM_OT_keyconfig_export(bpy.types.Operator):
bl_idname = "wm.keyconfig_export"
bl_label = "Export Key Configuration..."
- filepath = StringProperty(name="File Path", description="Filepath to write file to")
+ filepath = StringProperty(name="File Path", description="Filepath to write file to", default="keymap.py")
filter_folder = BoolProperty(name="Filter folders", description="", default=True, options={'HIDDEN'})
filter_text = BoolProperty(name="Filter text", description="", default=True, options={'HIDDEN'})
filter_python = BoolProperty(name="Filter python", description="", default=True, options={'HIDDEN'})
kc_name = StringProperty(name="KeyConfig Name", description="Name to save the key config as")
def execute(self, context):
- if not self.properties.filepath:
+ if not self.properties.is_property_set("filepath"):
raise Exception("Filepath not set")
f = open(self.properties.filepath, "w")
@@ -621,9 +634,9 @@ class WM_OT_keyconfig_export(bpy.types.Operator):
km = km.active()
f.write("# Map %s\n" % km.name)
- f.write("km = kc.add_keymap('%s', space_type='%s', region_type='%s', modal=%s)\n\n" % (km.name, km.space_type, km.region_type, km.modal))
+ f.write("km = kc.add_keymap('%s', space_type='%s', region_type='%s', modal=%s)\n\n" % (km.name, km.space_type, km.region_type, km.is_modal))
for kmi in km.items:
- if km.modal:
+ if km.is_modal:
f.write("kmi = km.items.add_modal('%s', '%s', '%s'" % (kmi.propvalue, kmi.type, kmi.value))
else:
f.write("kmi = km.items.add('%s', '%s', '%s'" % (kmi.idname, kmi.type, kmi.value))
@@ -642,21 +655,10 @@ class WM_OT_keyconfig_export(bpy.types.Operator):
f.write(", key_modifier='%s'" % kmi.key_modifier)
f.write(")\n")
- def export_properties(prefix, properties):
- for pname in dir(properties):
- if not properties.is_property_hidden(pname):
- value = eval("properties.%s" % pname)
- if isinstance(value, bpy.types.OperatorProperties):
- export_properties(prefix + "." + pname, value)
- elif properties.is_property_set(pname):
- value = _string_value(value)
- if value != "":
- f.write(prefix + ".%s = %s\n" % (pname, value))
-
props = kmi.properties
if props is not None:
- export_properties("kmi.properties", props)
+ f.write("".join(export_properties("kmi.properties", props)))
f.write("\n")
@@ -729,16 +731,16 @@ class WM_OT_keyitem_add(bpy.types.Operator):
km = context.keymap
kc = wm.default_keyconfig
- if km.modal:
+ if km.is_modal:
km.items.add_modal("", 'A', 'PRESS') # kmi
else:
km.items.add("none", 'A', 'PRESS') # kmi
# clear filter and expand keymap so we can see the newly added item
- if context.space_data.filter != '':
- context.space_data.filter = ''
- km.items_expanded = True
- km.children_expanded = True
+ if context.space_data.filter_text != "":
+ context.space_data.filter_text = ""
+ km.show_expanded_items = True
+ km.show_expanded_children = True
return {'FINISHED'}
@@ -763,50 +765,37 @@ class WM_OT_keyconfig_remove(bpy.types.Operator):
bl_idname = "wm.keyconfig_remove"
bl_label = "Remove Key Config"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
wm = context.manager
- return wm.active_keyconfig.user_defined
+ return wm.active_keyconfig.is_user_defined
def execute(self, context):
+ import sys
wm = context.manager
keyconfig = wm.active_keyconfig
- module = __import__(keyconfig.name)
+ module = sys.modules.get(keyconfig.name)
- os.remove(module.__file__)
+ if module:
+ path = module.__file__
+ if os.path.exists(path):
+ os.remove(path)
- compiled_path = module.__file__ + "c" # for .pyc
+ path = module.__file__ + "c" # for .pyc
- if os.path.exists(compiled_path):
- os.remove(compiled_path)
+ if os.path.exists(path):
+ os.remove(path)
wm.remove_keyconfig(keyconfig)
return {'FINISHED'}
-
-classes = [
- WM_OT_keyconfig_export,
- WM_OT_keyconfig_import,
- WM_OT_keyconfig_test,
- WM_OT_keyconfig_remove,
- WM_OT_keymap_edit,
- WM_OT_keymap_restore,
- WM_OT_keyitem_add,
- WM_OT_keyitem_remove,
- WM_OT_keyitem_restore]
-
-
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
-
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/space_view3d.py b/release/scripts/ui/space_view3d.py
index bab3695a0b6..b8b220cad0c 100644
--- a/release/scripts/ui/space_view3d.py
+++ b/release/scripts/ui/space_view3d.py
@@ -60,39 +60,44 @@ class VIEW3D_HT_header(bpy.types.Header):
'''
if obj and obj.mode == 'EDIT' and obj.type == 'MESH':
row_sub = row.row(align=True)
- row_sub.prop(toolsettings, "mesh_selection_mode", text="", index=0, icon='VERTEXSEL')
- row_sub.prop(toolsettings, "mesh_selection_mode", text="", index=1, icon='EDGESEL')
- row_sub.prop(toolsettings, "mesh_selection_mode", text="", index=2, icon='FACESEL')
+ row_sub.prop(toolsettings, "mesh_select_mode", text="", index=0, icon='VERTEXSEL')
+ row_sub.prop(toolsettings, "mesh_select_mode", text="", index=1, icon='EDGESEL')
+ row_sub.prop(toolsettings, "mesh_select_mode", text="", index=2, icon='FACESEL')
'''
if obj:
# Particle edit
if obj.mode == 'PARTICLE_EDIT':
- row.prop(toolsettings.particle_edit, "selection_mode", text="", expand=True, toggle=True)
+ row.prop(toolsettings.particle_edit, "select_mode", text="", expand=True, toggle=True)
# Occlude geometry
- if view.viewport_shading in ('SOLID', 'SHADED', 'TEXTURED') and (obj.mode == 'PARTICLE_EDIT' or (obj.mode == 'EDIT' and obj.type == 'MESH')):
- row.prop(view, "occlude_geometry", text="")
+ if view.viewport_shade in ('SOLID', 'SHADED', 'TEXTURED') and (obj.mode == 'PARTICLE_EDIT' or (obj.mode == 'EDIT' and obj.type == 'MESH')):
+ row.prop(view, "use_occlude_geometry", text="")
# Proportional editing
- if obj.mode in ('OBJECT', 'EDIT', 'PARTICLE_EDIT'):
+ if obj.mode in ('EDIT', 'PARTICLE_EDIT'):
row = layout.row(align=True)
- row.prop(toolsettings, "proportional_editing", text="", icon_only=True)
- if toolsettings.proportional_editing != 'DISABLED':
- row.prop(toolsettings, "proportional_editing_falloff", text="", icon_only=True)
+ row.prop(toolsettings, "proportional_edit", text="", icon_only=True)
+ if toolsettings.proportional_edit != 'DISABLED':
+ row.prop(toolsettings, "proportional_edit_falloff", text="", icon_only=True)
+ elif obj.mode == 'OBJECT':
+ row = layout.row(align=True)
+ row.prop(toolsettings, "use_proportional_edit_objects", text="", icon_only=True)
+ if toolsettings.use_proportional_edit_objects:
+ row.prop(toolsettings, "proportional_edit_falloff", text="", icon_only=True)
# Snap
row = layout.row(align=True)
- row.prop(toolsettings, "snap", text="")
+ row.prop(toolsettings, "use_snap", text="")
row.prop(toolsettings, "snap_element", text="", icon_only=True)
if toolsettings.snap_element != 'INCREMENT':
row.prop(toolsettings, "snap_target", text="")
if obj and obj.mode == 'OBJECT':
- row.prop(toolsettings, "snap_align_rotation", text="")
+ row.prop(toolsettings, "use_snap_align_rotation", text="")
if toolsettings.snap_element == 'VOLUME':
- row.prop(toolsettings, "snap_peel_object", text="")
+ row.prop(toolsettings, "use_snap_peel_object", text="")
elif toolsettings.snap_element == 'FACE':
- row.prop(toolsettings, "snap_project", text="")
+ row.prop(toolsettings, "use_snap_project", text="")
# OpenGL render
row = layout.row(align=True)
@@ -114,7 +119,7 @@ class VIEW3D_HT_header(bpy.types.Header):
# ********** Utilities **********
-class VIEW3D_MT_showhide(bpy.types.Menu):
+class ShowHideMenu():
bl_label = "Show/Hide"
_operator_name = ""
@@ -484,7 +489,7 @@ class VIEW3D_MT_select_edit_mesh(bpy.types.Menu):
layout.operator("mesh.select_by_number_vertices", text="Triangles").type = 'TRIANGLES'
layout.operator("mesh.select_by_number_vertices", text="Quads").type = 'QUADS'
- if context.scene.tool_settings.mesh_selection_mode[2] == False:
+ if context.scene.tool_settings.mesh_select_mode[2] == False:
layout.operator("mesh.select_non_manifold", text="Non Manifold")
layout.operator("mesh.select_by_number_vertices", text="Loose Verts/Edges").type = 'OTHER'
layout.operator("mesh.select_similar", text="Similar")
@@ -709,7 +714,8 @@ class VIEW3D_MT_object_clear(bpy.types.Menu):
class VIEW3D_MT_object_specials(bpy.types.Menu):
bl_label = "Specials"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
# add more special types
return context.object
@@ -742,7 +748,7 @@ class VIEW3D_MT_object_specials(bpy.types.Menu):
props = layout.operator("wm.context_modal_mouse", text="Width Size")
props.data_path_iter = "selected_editable_objects"
- props.data_path_item = "data.width"
+ props.data_path_item = "data.offset"
props.input_scale = 0.01
if obj.type == 'EMPTY':
@@ -791,7 +797,7 @@ class VIEW3D_MT_object_specials(bpy.types.Menu):
layout.separator()
props = layout.operator("object.isolate_type_render")
-
+ props = layout.operator("object.hide_render_clear_all")
class VIEW3D_MT_object_apply(bpy.types.Menu):
bl_label = "Apply"
@@ -859,9 +865,9 @@ class VIEW3D_MT_object_showhide(bpy.types.Menu):
def draw(self, context):
layout = self.layout
- layout.operator("object.restrictview_clear", text="Show Hidden")
- layout.operator("object.restrictview_set", text="Hide Selected")
- layout.operator("object.restrictview_set", text="Hide Unselected").unselected = True
+ layout.operator("object.hide_view_clear", text="Show Hidden")
+ layout.operator("object.hide_view_set", text="Hide Selected")
+ layout.operator("object.hide_view_set", text="Hide Unselected").unselected = True
class VIEW3D_MT_make_single_user(bpy.types.Menu):
@@ -1001,12 +1007,13 @@ class VIEW3D_MT_sculpt(bpy.types.Menu):
def draw(self, context):
layout = self.layout
- sculpt = context.tool_settings.sculpt
- brush = context.tool_settings.sculpt.brush
+ tool_settings = context.tool_settings
+ sculpt = tool_settings.sculpt
+ brush = tool_settings.sculpt.brush
- layout.prop(sculpt, "symmetry_x")
- layout.prop(sculpt, "symmetry_y")
- layout.prop(sculpt, "symmetry_z")
+ layout.prop(sculpt, "use_symmetry_x")
+ layout.prop(sculpt, "use_symmetry_y")
+ layout.prop(sculpt, "use_symmetry_z")
layout.separator()
layout.prop(sculpt, "lock_x")
layout.prop(sculpt, "lock_y")
@@ -1024,12 +1031,20 @@ class VIEW3D_MT_sculpt(bpy.types.Menu):
layout.prop(brush, "use_anchor")
if sculpt_tool in ('DRAW', 'PINCH', 'INFLATE', 'LAYER', 'CLAY'):
- layout.prop(brush, "flip_direction")
+ layout.prop_menu_enum(brush, "direction")
if sculpt_tool == 'LAYER':
layout.prop(brush, "use_persistent")
layout.operator("sculpt.set_persistent_base")
+ layout.separator()
+ layout.prop(sculpt, "use_threaded", text="Threaded Sculpt")
+ layout.prop(sculpt, "show_brush")
+
+ # TODO, make availabel from paint menu!
+ layout.prop(tool_settings, "sculpt_paint_use_unified_size", text="Unify Size")
+ layout.prop(tool_settings, "sculpt_paint_use_unified_strength", text="Unify Strength")
+
# ********** Particle menu **********
@@ -1048,7 +1063,7 @@ class VIEW3D_MT_particle(bpy.types.Menu):
layout.operator("particle.remove_doubles")
layout.operator("particle.delete")
- if particle_edit.selection_mode == 'POINT':
+ if particle_edit.select_mode == 'POINT':
layout.operator("particle.subdivide")
layout.operator("particle.rekey")
@@ -1069,7 +1084,7 @@ class VIEW3D_MT_particle_specials(bpy.types.Menu):
layout.operator("particle.rekey")
layout.separator()
- if particle_edit.selection_mode == 'POINT':
+ if particle_edit.select_mode == 'POINT':
layout.operator("particle.subdivide")
layout.operator("particle.select_roots")
layout.operator("particle.select_tips")
@@ -1077,7 +1092,7 @@ class VIEW3D_MT_particle_specials(bpy.types.Menu):
layout.operator("particle.remove_doubles")
-class VIEW3D_MT_particle_showhide(VIEW3D_MT_showhide):
+class VIEW3D_MT_particle_showhide(ShowHideMenu, bpy.types.Menu):
_operator_name = "particle"
# ********** Pose Menu **********
@@ -1093,7 +1108,7 @@ class VIEW3D_MT_pose(bpy.types.Menu):
layout.menu("VIEW3D_MT_transform")
layout.menu("VIEW3D_MT_snap")
- if arm.drawtype in ('BBONE', 'ENVELOPE'):
+ if arm.draw_type in ('BBONE', 'ENVELOPE'):
layout.operator("transform.transform", text="Scale Envelope Distance").mode = 'BONESIZE'
layout.menu("VIEW3D_MT_pose_transform")
@@ -1227,7 +1242,7 @@ class VIEW3D_MT_pose_constraints(bpy.types.Menu):
layout.operator("pose.constraints_clear")
-class VIEW3D_MT_pose_showhide(VIEW3D_MT_showhide):
+class VIEW3D_MT_pose_showhide(ShowHideMenu, bpy.types.Menu):
_operator_name = "pose"
@@ -1281,9 +1296,9 @@ class VIEW3D_MT_edit_mesh(bpy.types.Menu):
layout.separator()
- layout.prop(settings, "automerge_editing")
- layout.prop_menu_enum(settings, "proportional_editing")
- layout.prop_menu_enum(settings, "proportional_editing_falloff")
+ layout.prop(settings, "use_mesh_automerge")
+ layout.prop_menu_enum(settings, "proportional_edit")
+ layout.prop_menu_enum(settings, "proportional_edit_falloff")
layout.separator()
@@ -1325,15 +1340,15 @@ class VIEW3D_MT_edit_mesh_selection_mode(bpy.types.Menu):
prop = layout.operator("wm.context_set_value", text="Vertex", icon='VERTEXSEL')
prop.value = "(True, False, False)"
- prop.data_path = "tool_settings.mesh_selection_mode"
+ prop.data_path = "tool_settings.mesh_select_mode"
prop = layout.operator("wm.context_set_value", text="Edge", icon='EDGESEL')
prop.value = "(False, True, False)"
- prop.data_path = "tool_settings.mesh_selection_mode"
+ prop.data_path = "tool_settings.mesh_select_mode"
prop = layout.operator("wm.context_set_value", text="Face", icon='FACESEL')
prop.value = "(False, False, True)"
- prop.data_path = "tool_settings.mesh_selection_mode"
+ prop.data_path = "tool_settings.mesh_select_mode"
class VIEW3D_MT_edit_mesh_extrude(bpy.types.Menu):
@@ -1342,7 +1357,7 @@ class VIEW3D_MT_edit_mesh_extrude(bpy.types.Menu):
@staticmethod
def extrude_options(context):
mesh = context.object.data
- selection_mode = context.tool_settings.mesh_selection_mode
+ selection_mode = context.tool_settings.mesh_select_mode
totface = mesh.total_face_sel
totedge = mesh.total_edge_sel
@@ -1424,7 +1439,7 @@ class VIEW3D_OT_edit_mesh_extrude_individual_move(bpy.types.Operator):
def execute(self, context):
mesh = context.object.data
- selection_mode = context.tool_settings.mesh_selection_mode
+ selection_mode = context.tool_settings.mesh_select_mode
totface = mesh.total_face_sel
totedge = mesh.total_edge_sel
@@ -1593,7 +1608,7 @@ class VIEW3D_MT_edit_mesh_normals(bpy.types.Menu):
layout.operator("mesh.flip_normals")
-class VIEW3D_MT_edit_mesh_showhide(VIEW3D_MT_showhide):
+class VIEW3D_MT_edit_mesh_showhide(ShowHideMenu, bpy.types.Menu):
_operator_name = "mesh"
# Edit Curve
@@ -1625,8 +1640,8 @@ def draw_curve(self, context):
layout.separator()
- layout.prop_menu_enum(settings, "proportional_editing")
- layout.prop_menu_enum(settings, "proportional_editing_falloff")
+ layout.prop_menu_enum(settings, "proportional_edit")
+ layout.prop_menu_enum(settings, "proportional_edit_falloff")
layout.separator()
@@ -1685,7 +1700,7 @@ class VIEW3D_MT_edit_curve_specials(bpy.types.Menu):
layout.operator("curve.smooth_radius")
-class VIEW3D_MT_edit_curve_showhide(VIEW3D_MT_showhide):
+class VIEW3D_MT_edit_curve_showhide(ShowHideMenu, bpy.types.Menu):
_operator_name = "curve"
@@ -1773,8 +1788,8 @@ class VIEW3D_MT_edit_meta(bpy.types.Menu):
layout.separator()
- layout.prop_menu_enum(settings, "proportional_editing")
- layout.prop_menu_enum(settings, "proportional_editing_falloff")
+ layout.prop_menu_enum(settings, "proportional_edit")
+ layout.prop_menu_enum(settings, "proportional_edit_falloff")
layout.separator()
@@ -1810,8 +1825,8 @@ class VIEW3D_MT_edit_lattice(bpy.types.Menu):
layout.separator()
- layout.prop_menu_enum(settings, "proportional_editing")
- layout.prop_menu_enum(settings, "proportional_editing_falloff")
+ layout.prop_menu_enum(settings, "proportional_edit")
+ layout.prop_menu_enum(settings, "proportional_edit_falloff")
class VIEW3D_MT_edit_armature(bpy.types.Menu):
@@ -1828,7 +1843,7 @@ class VIEW3D_MT_edit_armature(bpy.types.Menu):
layout.menu("VIEW3D_MT_snap")
layout.menu("VIEW3D_MT_edit_armature_roll")
- if arm.drawtype == 'ENVELOPE':
+ if arm.draw_type == 'ENVELOPE':
layout.operator("transform.transform", text="Scale Envelope Distance").mode = 'BONESIZE'
else:
layout.operator("transform.transform", text="Scale B-Bone Width").mode = 'BONESIZE'
@@ -1837,7 +1852,7 @@ class VIEW3D_MT_edit_armature(bpy.types.Menu):
layout.operator("armature.extrude_move")
- if arm.x_axis_mirror:
+ if arm.use_mirror_x:
layout.operator("armature.extrude_forked")
layout.operator("armature.duplicate_move")
@@ -1910,8 +1925,8 @@ class VIEW3D_MT_edit_armature_roll(bpy.types.Menu):
def draw(self, context):
layout = self.layout
- layout.operator("armature.calculate_roll", text="Clear Roll (Z-Axis Up)").type = 'GLOBALUP'
- layout.operator("armature.calculate_roll", text="Roll to Cursor").type = 'CURSOR'
+ layout.operator("armature.calculate_roll", text="Recalculate with Z-Axis Up").type = 'GLOBALUP'
+ layout.operator("armature.calculate_roll", text="Recalculate with Z-Axis to Cursor").type = 'CURSOR'
layout.separator()
@@ -1925,7 +1940,8 @@ class VIEW3D_PT_view3d_properties(bpy.types.Panel):
bl_region_type = 'UI'
bl_label = "View"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
view = context.space_data
return (view)
@@ -1961,7 +1977,8 @@ class VIEW3D_PT_view3d_name(bpy.types.Panel):
bl_region_type = 'UI'
bl_label = "Item"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return (context.space_data and context.active_object)
def draw(self, context):
@@ -1986,7 +2003,8 @@ class VIEW3D_PT_view3d_display(bpy.types.Panel):
bl_label = "Display"
bl_default_closed = True
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
view = context.space_data
return (view)
@@ -1994,34 +2012,34 @@ class VIEW3D_PT_view3d_display(bpy.types.Panel):
layout = self.layout
view = context.space_data
- gs = context.scene.game_data
+ gs = context.scene.game_settings
ob = context.object
col = layout.column()
- col.prop(view, "display_render_override")
+ col.prop(view, "show_only_render")
col = layout.column()
- display_all = not view.display_render_override
+ display_all = not view.show_only_render
col.active = display_all
- col.prop(view, "outline_selected")
- col.prop(view, "all_object_origins")
- col.prop(view, "relationship_lines")
+ col.prop(view, "show_outline_selected")
+ col.prop(view, "show_all_objects_origin")
+ col.prop(view, "show_relationship_lines")
if ob and ob.type == 'MESH':
mesh = ob.data
- col.prop(mesh, "all_edges")
+ col.prop(mesh, "show_all_edges")
col = layout.column()
col.active = display_all
split = col.split(percentage=0.55)
- split.prop(view, "display_floor", text="Grid Floor")
+ split.prop(view, "show_floor", text="Grid Floor")
row = split.row(align=True)
- row.prop(view, "display_x_axis", text="X", toggle=True)
- row.prop(view, "display_y_axis", text="Y", toggle=True)
- row.prop(view, "display_z_axis", text="Z", toggle=True)
+ row.prop(view, "show_axis_x", text="X", toggle=True)
+ row.prop(view, "show_axis_y", text="Y", toggle=True)
+ row.prop(view, "show_axis_z", text="Z", toggle=True)
sub = col.column(align=True)
- sub.active = (display_all and view.display_floor)
+ sub.active = (display_all and view.show_floor)
sub.prop(view, "grid_lines", text="Lines")
sub.prop(view, "grid_spacing", text="Spacing")
sub.prop(view, "grid_subdivisions", text="Subdivisions")
@@ -2029,7 +2047,7 @@ class VIEW3D_PT_view3d_display(bpy.types.Panel):
col = layout.column()
col.label(text="Shading:")
col.prop(gs, "material_mode", text="")
- col.prop(view, "textured_solid")
+ col.prop(view, "show_textured_solid")
layout.separator()
@@ -2042,10 +2060,10 @@ class VIEW3D_PT_view3d_display(bpy.types.Panel):
col.prop(region, "lock_rotation")
row = col.row()
row.enabled = region.lock_rotation
- row.prop(region, "box_preview")
+ row.prop(region, "show_sync_view")
row = col.row()
- row.enabled = region.lock_rotation and region.box_preview
- row.prop(region, "box_clip")
+ row.enabled = region.lock_rotation and region.show_sync_view
+ row.prop(region, "use_box_clip")
class VIEW3D_PT_view3d_meshdisplay(bpy.types.Panel):
@@ -2053,7 +2071,8 @@ class VIEW3D_PT_view3d_meshdisplay(bpy.types.Panel):
bl_region_type = 'UI'
bl_label = "Mesh Display"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
# The active object check is needed because of localmode
return (context.active_object and (context.mode == 'EDIT_MESH'))
@@ -2064,24 +2083,24 @@ class VIEW3D_PT_view3d_meshdisplay(bpy.types.Panel):
col = layout.column()
col.label(text="Overlays:")
- col.prop(mesh, "draw_edges", text="Edges")
- col.prop(mesh, "draw_faces", text="Faces")
- col.prop(mesh, "draw_creases", text="Creases")
- col.prop(mesh, "draw_bevel_weights", text="Bevel Weights")
- col.prop(mesh, "draw_seams", text="Seams")
- col.prop(mesh, "draw_sharp", text="Sharp")
+ col.prop(mesh, "show_edges", text="Edges")
+ col.prop(mesh, "show_faces", text="Faces")
+ col.prop(mesh, "show_edge_crease", text="Creases")
+ col.prop(mesh, "show_edge_bevel_weight", text="Bevel Weights")
+ col.prop(mesh, "show_edge_seams", text="Seams")
+ col.prop(mesh, "show_edge_sharp", text="Sharp")
col.separator()
col.label(text="Normals:")
- col.prop(mesh, "draw_normals", text="Face")
- col.prop(mesh, "draw_vertex_normals", text="Vertex")
+ col.prop(mesh, "show_normal_face", text="Face")
+ col.prop(mesh, "show_normal_vertex", text="Vertex")
col.prop(context.scene.tool_settings, "normal_size", text="Normal Size")
col.separator()
col.label(text="Numerics:")
- col.prop(mesh, "draw_edge_lenght")
- col.prop(mesh, "draw_edge_angle")
- col.prop(mesh, "draw_face_area")
+ col.prop(mesh, "show_extra_edge_length")
+ col.prop(mesh, "show_extra_edge_angle")
+ col.prop(mesh, "show_extra_face_area")
class VIEW3D_PT_view3d_curvedisplay(bpy.types.Panel):
@@ -2089,7 +2108,8 @@ class VIEW3D_PT_view3d_curvedisplay(bpy.types.Panel):
bl_region_type = 'UI'
bl_label = "Curve Display"
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
editmesh = context.mode == 'EDIT_CURVE'
return (editmesh)
@@ -2100,8 +2120,8 @@ class VIEW3D_PT_view3d_curvedisplay(bpy.types.Panel):
col = layout.column()
col.label(text="Overlays:")
- col.prop(curve, "draw_handles", text="Handles")
- col.prop(curve, "draw_normals", text="Normals")
+ col.prop(curve, "show_handles", text="Handles")
+ col.prop(curve, "show_normal_face", text="Normals")
col.prop(context.scene.tool_settings, "normal_size", text="Normal Size")
@@ -2111,7 +2131,8 @@ class VIEW3D_PT_background_image(bpy.types.Panel):
bl_label = "Background Images"
bl_default_closed = True
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
view = context.space_data
# bg = context.space_data.background_image
return (view)
@@ -2120,7 +2141,7 @@ class VIEW3D_PT_background_image(bpy.types.Panel):
layout = self.layout
view = context.space_data
- layout.prop(view, "display_background_images", text="")
+ layout.prop(view, "show_background_images", text="")
def draw(self, context):
layout = self.layout
@@ -2131,7 +2152,7 @@ class VIEW3D_PT_background_image(bpy.types.Panel):
col.operator("view3d.add_background_image", text="Add Image")
for i, bg in enumerate(view.background_images):
- layout.active = view.display_background_images
+ layout.active = view.show_background_images
box = layout.box()
row = box.row(align=True)
row.prop(bg, "show_expanded", text="", emboss=False)
@@ -2147,10 +2168,11 @@ class VIEW3D_PT_background_image(bpy.types.Panel):
box.template_image(bg, "image", bg.image_user, compact=True)
box.prop(bg, "transparency", slider=True)
- box.prop(bg, "size")
- row = box.row(align=True)
- row.prop(bg, "offset_x", text="X")
- row.prop(bg, "offset_y", text="Y")
+ if bg.view_axis != 'CAMERA':
+ box.prop(bg, "size")
+ row = box.row(align=True)
+ row.prop(bg, "offset_x", text="X")
+ row.prop(bg, "offset_y", text="Y")
class VIEW3D_PT_transform_orientations(bpy.types.Panel):
@@ -2159,7 +2181,8 @@ class VIEW3D_PT_transform_orientations(bpy.types.Panel):
bl_label = "Transform Orientations"
bl_default_closed = True
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
view = context.space_data
return (view)
@@ -2186,7 +2209,8 @@ class VIEW3D_PT_etch_a_ton(bpy.types.Panel):
bl_label = "Skeleton Sketching"
bl_default_closed = True
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
scene = context.space_data
ob = context.active_object
return scene and ob and ob.type == 'ARMATURE' and ob.mode == 'EDIT'
@@ -2195,7 +2219,7 @@ class VIEW3D_PT_etch_a_ton(bpy.types.Panel):
layout = self.layout
toolsettings = context.scene.tool_settings
- layout.prop(toolsettings, "bone_sketching", text="")
+ layout.prop(toolsettings, "use_bone_sketching", text="")
def draw(self, context):
layout = self.layout
@@ -2203,8 +2227,8 @@ class VIEW3D_PT_etch_a_ton(bpy.types.Panel):
col = layout.column()
- col.prop(toolsettings, "etch_quick")
- col.prop(toolsettings, "etch_overdraw")
+ col.prop(toolsettings, "use_etch_quick")
+ col.prop(toolsettings, "use_etch_overdraw")
col.prop(toolsettings, "etch_convert_mode")
@@ -2217,7 +2241,7 @@ class VIEW3D_PT_etch_a_ton(bpy.types.Panel):
elif toolsettings.etch_convert_mode == 'RETARGET':
col.prop(toolsettings, "etch_template")
col.prop(toolsettings, "etch_roll_mode")
- col.prop(toolsettings, "etch_autoname")
+ col.prop(toolsettings, "use_etch_autoname")
col.prop(toolsettings, "etch_number")
col.prop(toolsettings, "etch_side")
col.operator("sketch.convert", text="Convert")
@@ -2229,7 +2253,7 @@ class VIEW3D_PT_context_properties(bpy.types.Panel):
bl_label = "Properties"
bl_default_closed = True
- def _active_context_member(self, context):
+ def _active_context_member(context):
obj = context.object
if obj:
mode = obj.mode
@@ -2242,8 +2266,9 @@ class VIEW3D_PT_context_properties(bpy.types.Panel):
return ""
- def poll(self, context):
- member = self._active_context_member(context)
+ @classmethod
+ def poll(cls, context):
+ member = cls._active_context_member(context)
if member:
context_member = getattr(context, member)
return context_member and context_member.keys()
@@ -2253,129 +2278,19 @@ class VIEW3D_PT_context_properties(bpy.types.Panel):
def draw(self, context):
import rna_prop_ui
# reload(rna_prop_ui)
- member = self._active_context_member(context)
+ member = __class__._active_context_member(context)
if member:
# Draw with no edit button
rna_prop_ui.draw(self.layout, context, member, False)
-classes = [
- VIEW3D_OT_edit_mesh_extrude_move, # detects constraints setup and extrude region
- VIEW3D_OT_edit_mesh_extrude_individual_move,
-
- VIEW3D_HT_header, # Header
-
- VIEW3D_MT_view, #View Menus
- VIEW3D_MT_view_navigation,
- VIEW3D_MT_view_align,
- VIEW3D_MT_view_align_selected,
- VIEW3D_MT_view_cameras,
-
- VIEW3D_MT_select_object, # Select Menus
- VIEW3D_MT_select_pose,
- VIEW3D_MT_select_particle,
- VIEW3D_MT_select_edit_mesh,
- VIEW3D_MT_select_edit_curve,
- VIEW3D_MT_select_edit_surface,
- VIEW3D_MT_select_edit_metaball,
- VIEW3D_MT_select_edit_lattice,
- VIEW3D_MT_select_edit_armature,
- VIEW3D_MT_select_face, # XXX todo
-
- VIEW3D_MT_transform, # Object/Edit Menus
- VIEW3D_MT_mirror, # Object/Edit Menus
- VIEW3D_MT_snap, # Object/Edit Menus
- VIEW3D_MT_uv_map, # Edit Menus
-
- VIEW3D_MT_object, # Object Menu
- VIEW3D_MT_object_specials,
- VIEW3D_MT_object_apply,
- VIEW3D_MT_object_clear,
- VIEW3D_MT_object_parent,
- VIEW3D_MT_object_track,
- VIEW3D_MT_object_group,
- VIEW3D_MT_object_constraints,
- VIEW3D_MT_object_showhide,
- VIEW3D_MT_make_single_user,
- VIEW3D_MT_make_links,
- VIEW3D_MT_object_game_properties,
- VIEW3D_MT_object_game_logicbricks,
-
- VIEW3D_MT_hook,
- VIEW3D_MT_vertex_group,
-
- VIEW3D_MT_sculpt, # Sculpt Menu
- VIEW3D_MT_paint_vertex,
- VIEW3D_MT_paint_weight,
-
- VIEW3D_MT_particle, # Particle Menu
- VIEW3D_MT_particle_specials,
- VIEW3D_MT_particle_showhide,
-
- VIEW3D_MT_pose, # POSE Menu
- VIEW3D_MT_pose_transform,
- VIEW3D_MT_pose_pose,
- VIEW3D_MT_pose_motion,
- VIEW3D_MT_pose_group,
- VIEW3D_MT_pose_ik,
- VIEW3D_MT_pose_constraints,
- VIEW3D_MT_pose_showhide,
- VIEW3D_MT_pose_apply,
-
- VIEW3D_MT_edit_mesh,
- VIEW3D_MT_edit_mesh_specials, # Only as a menu for keybindings
- VIEW3D_MT_edit_mesh_selection_mode, # Only as a menu for keybindings
- VIEW3D_MT_edit_mesh_vertices,
- VIEW3D_MT_edit_mesh_edges,
- VIEW3D_MT_edit_mesh_faces,
- VIEW3D_MT_edit_mesh_normals,
- VIEW3D_MT_edit_mesh_showhide,
- VIEW3D_MT_edit_mesh_extrude, # use with VIEW3D_OT_edit_mesh_extrude_menu
-
- VIEW3D_MT_edit_curve,
- VIEW3D_MT_edit_curve_ctrlpoints,
- VIEW3D_MT_edit_curve_segments,
- VIEW3D_MT_edit_curve_specials,
- VIEW3D_MT_edit_curve_showhide,
-
- VIEW3D_MT_edit_surface,
-
- VIEW3D_MT_edit_text,
- VIEW3D_MT_edit_text_chars,
-
- VIEW3D_MT_edit_meta,
- VIEW3D_MT_edit_meta_showhide,
-
- VIEW3D_MT_edit_lattice,
-
- VIEW3D_MT_edit_armature,
- VIEW3D_MT_edit_armature_parent,
- VIEW3D_MT_edit_armature_roll,
-
- VIEW3D_MT_armature_specials, # Only as a menu for keybindings
-
- # Panels
- VIEW3D_PT_view3d_properties,
- VIEW3D_PT_view3d_display,
- VIEW3D_PT_view3d_name,
- VIEW3D_PT_view3d_meshdisplay,
- VIEW3D_PT_view3d_curvedisplay,
- VIEW3D_PT_background_image,
- VIEW3D_PT_transform_orientations,
- VIEW3D_PT_etch_a_ton,
- VIEW3D_PT_context_properties]
-
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/scripts/ui/space_view3d_toolbar.py b/release/scripts/ui/space_view3d_toolbar.py
index 515fa236fc0..9769107a5c9 100644
--- a/release/scripts/ui/space_view3d_toolbar.py
+++ b/release/scripts/ui/space_view3d_toolbar.py
@@ -19,9 +19,8 @@
# <pep8 compliant>
import bpy
-narrowui = bpy.context.user_preferences.view.properties_width_check
-class View3DPanel(bpy.types.Panel):
+class View3DPanel():
bl_space_type = 'VIEW_3D'
bl_region_type = 'TOOLS'
@@ -29,7 +28,7 @@ class View3DPanel(bpy.types.Panel):
# ********** default tools for objectmode ****************
-class VIEW3D_PT_tools_objectmode(View3DPanel):
+class VIEW3D_PT_tools_objectmode(View3DPanel, bpy.types.Panel):
bl_context = "objectmode"
bl_label = "Object Tools"
@@ -79,7 +78,7 @@ class VIEW3D_PT_tools_objectmode(View3DPanel):
# ********** default tools for editmode_mesh ****************
-class VIEW3D_PT_tools_meshedit(View3DPanel):
+class VIEW3D_PT_tools_meshedit(View3DPanel, bpy.types.Panel):
bl_context = "mesh_edit"
bl_label = "Mesh Tools"
@@ -147,7 +146,7 @@ class VIEW3D_PT_tools_meshedit(View3DPanel):
row.operator("gpencil.draw", text="Erase").mode = 'ERASER'
-class VIEW3D_PT_tools_meshedit_options(View3DPanel):
+class VIEW3D_PT_tools_meshedit_options(View3DPanel, bpy.types.Panel):
bl_context = "mesh_edit"
bl_label = "Mesh Options"
@@ -166,7 +165,7 @@ class VIEW3D_PT_tools_meshedit_options(View3DPanel):
# ********** default tools for editmode_curve ****************
-class VIEW3D_PT_tools_curveedit(View3DPanel):
+class VIEW3D_PT_tools_curveedit(View3DPanel, bpy.types.Panel):
bl_context = "curve_edit"
bl_label = "Curve Tools"
@@ -220,7 +219,7 @@ class VIEW3D_PT_tools_curveedit(View3DPanel):
# ********** default tools for editmode_surface ****************
-class VIEW3D_PT_tools_surfaceedit(View3DPanel):
+class VIEW3D_PT_tools_surfaceedit(View3DPanel, bpy.types.Panel):
bl_context = "surface_edit"
bl_label = "Surface Tools"
@@ -260,7 +259,7 @@ class VIEW3D_PT_tools_surfaceedit(View3DPanel):
# ********** default tools for editmode_text ****************
-class VIEW3D_PT_tools_textedit(View3DPanel):
+class VIEW3D_PT_tools_textedit(View3DPanel, bpy.types.Panel):
bl_context = "text_edit"
bl_label = "Text Tools"
@@ -293,7 +292,7 @@ class VIEW3D_PT_tools_textedit(View3DPanel):
# ********** default tools for editmode_armature ****************
-class VIEW3D_PT_tools_armatureedit(View3DPanel):
+class VIEW3D_PT_tools_armatureedit(View3DPanel, bpy.types.Panel):
bl_context = "armature_edit"
bl_label = "Armature Tools"
@@ -330,7 +329,7 @@ class VIEW3D_PT_tools_armatureedit(View3DPanel):
row.operator("gpencil.draw", text="Erase").mode = 'ERASER'
-class VIEW3D_PT_tools_armatureedit_options(View3DPanel):
+class VIEW3D_PT_tools_armatureedit_options(View3DPanel, bpy.types.Panel):
bl_context = "armature_edit"
bl_label = "Armature Options"
@@ -340,12 +339,12 @@ class VIEW3D_PT_tools_armatureedit_options(View3DPanel):
arm = context.active_object.data
col = layout.column(align=True)
- col.prop(arm, "x_axis_mirror")
+ col.prop(arm, "use_mirror_x")
# ********** default tools for editmode_mball ****************
-class VIEW3D_PT_tools_mballedit(View3DPanel):
+class VIEW3D_PT_tools_mballedit(View3DPanel, bpy.types.Panel):
bl_context = "mball_edit"
bl_label = "Meta Tools"
@@ -373,7 +372,7 @@ class VIEW3D_PT_tools_mballedit(View3DPanel):
# ********** default tools for editmode_lattice ****************
-class VIEW3D_PT_tools_latticeedit(View3DPanel):
+class VIEW3D_PT_tools_latticeedit(View3DPanel, bpy.types.Panel):
bl_context = "lattice_edit"
bl_label = "Lattice Tools"
@@ -405,7 +404,7 @@ class VIEW3D_PT_tools_latticeedit(View3DPanel):
# ********** default tools for posemode ****************
-class VIEW3D_PT_tools_posemode(View3DPanel):
+class VIEW3D_PT_tools_posemode(View3DPanel, bpy.types.Panel):
bl_context = "posemode"
bl_label = "Pose Tools"
@@ -453,7 +452,7 @@ class VIEW3D_PT_tools_posemode(View3DPanel):
row.operator("gpencil.draw", text="Erase").mode = 'ERASER'
-class VIEW3D_PT_tools_posemode_options(View3DPanel):
+class VIEW3D_PT_tools_posemode_options(View3DPanel, bpy.types.Panel):
bl_context = "posemode"
bl_label = "Pose Options"
@@ -463,17 +462,18 @@ class VIEW3D_PT_tools_posemode_options(View3DPanel):
arm = context.active_object.data
col = layout.column(align=True)
- col.prop(arm, "x_axis_mirror")
- col.prop(arm, "auto_ik")
+ col.prop(arm, "use_mirror_x")
+ col.prop(arm, "use_auto_ik")
# ********** default tools for paint modes ****************
-class PaintPanel(bpy.types.Panel):
+class PaintPanel():
bl_space_type = 'VIEW_3D'
bl_region_type = 'TOOLS'
- def paint_settings(self, context):
+ @staticmethod
+ def paint_settings(context):
ts = context.tool_settings
if context.sculpt_object:
@@ -487,43 +487,25 @@ class PaintPanel(bpy.types.Panel):
elif context.particle_edit_object:
return ts.particle_edit
- return False
+ return None
-class VIEW3D_PT_tools_brush(PaintPanel):
+class VIEW3D_PT_tools_brush(PaintPanel, bpy.types.Panel):
bl_label = "Brush"
- def poll(self, context):
- return self.paint_settings(context)
+ @classmethod
+ def poll(cls, context):
+ return cls.paint_settings(context)
def draw(self, context):
layout = self.layout
- settings = self.paint_settings(context)
+ settings = __class__.paint_settings(context)
brush = settings.brush
if not context.particle_edit_object:
col = layout.split().column()
-
- if context.sculpt_object and context.tool_settings.sculpt:
- col.template_ID_preview(settings, "brush", new="brush.add", filter="is_sculpt_brush", rows=3, cols=8)
- elif context.texture_paint_object and context.tool_settings.image_paint:
- col.template_ID_preview(settings, "brush", new="brush.add", filter="is_imapaint_brush", rows=3, cols=8)
- elif context.vertex_paint_object and context.tool_settings.vertex_paint:
- col.template_ID_preview(settings, "brush", new="brush.add", filter="is_vpaint_brush", rows=3, cols=8)
- elif context.weight_paint_object and context.tool_settings.weight_paint:
- col.template_ID_preview(settings, "brush", new="brush.add", filter="is_wpaint_brush", rows=3, cols=8)
- else:
- row = col.row()
-
- if context.sculpt_object and brush:
- defaultbrushes = 8
- elif context.texture_paint_object and brush:
- defaultbrushes = 4
- else:
- defaultbrushes = 7
-
- row.template_list(settings, "brushes", settings, "active_brush_index", rows=2, maxrows=defaultbrushes)
+ col.template_ID_preview(settings, "brush", new="brush.add", rows=3, cols=8)
# Particle Mode #
@@ -541,11 +523,11 @@ class VIEW3D_PT_tools_brush(PaintPanel):
if settings.tool == 'ADD':
col.prop(brush, "count")
col = layout.column()
- col.prop(settings, "add_interpolate")
+ col.prop(settings, "use_default_interpolate")
sub = col.column(align=True)
- sub.active = settings.add_interpolate
+ sub.active = settings.use_default_interpolate
sub.prop(brush, "steps", slider=True)
- sub.prop(settings, "add_keys", slider=True)
+ sub.prop(settings, "default_key_count", slider=True)
elif settings.tool == 'LENGTH':
layout.prop(brush, "length_mode", expand=True)
elif settings.tool == 'PUFF':
@@ -555,7 +537,6 @@ class VIEW3D_PT_tools_brush(PaintPanel):
# Sculpt Mode #
elif context.sculpt_object and brush:
- edit = context.user_preferences.edit
col = layout.column()
@@ -564,23 +545,14 @@ class VIEW3D_PT_tools_brush(PaintPanel):
row = col.row(align=True)
- if edit.sculpt_paint_use_unified_size:
- if edit.sculpt_paint_unified_lock_brush_size:
- row.prop(edit, "sculpt_paint_unified_lock_brush_size", toggle=True, text="", icon='LOCKED')
- row.prop(edit, "sculpt_paint_unified_unprojected_radius", text="Unified Radius", slider=True)
- else:
- row.prop(edit, "sculpt_paint_unified_lock_brush_size", toggle=True, text="", icon='UNLOCKED')
- row.prop(edit, "sculpt_paint_unified_size", text="Unified Radius", slider=True)
-
+ if brush.use_locked_size:
+ row.prop(brush, "use_locked_size", toggle=True, text="", icon='LOCKED')
+ row.prop(brush, "unprojected_radius", text="Radius", slider=True)
else:
- if brush.lock_brush_size:
- row.prop(brush, "lock_brush_size", toggle=True, text="", icon='LOCKED')
- row.prop(brush, "unprojected_radius", text="Radius", slider=True)
- else:
- row.prop(brush, "lock_brush_size", toggle=True, text="", icon='UNLOCKED')
- row.prop(brush, "size", text="Radius", slider=True)
+ row.prop(brush, "use_locked_size", toggle=True, text="", icon='UNLOCKED')
+ row.prop(brush, "size", text="Radius", slider=True)
- row.prop(brush, "use_size_pressure", toggle=True, text="")
+ row.prop(brush, "use_pressure_size", toggle=True, text="")
if brush.sculpt_tool not in ('SNAKE_HOOK', 'GRAB', 'ROTATE'):
@@ -594,12 +566,8 @@ class VIEW3D_PT_tools_brush(PaintPanel):
else:
row.prop(brush, "use_space_atten", toggle=True, text="", icon='UNLOCKED')
- if edit.sculpt_paint_use_unified_strength:
- row.prop(edit, "sculpt_paint_unified_strength", text="Unified Strength", slider=True)
- else:
- row.prop(brush, "strength", text="Strength", slider=True)
-
- row.prop(brush, "use_strength_pressure", text="")
+ row.prop(brush, "strength", text="Strength", slider=True)
+ row.prop(brush, "use_pressure_strength", text="")
@@ -607,7 +575,7 @@ class VIEW3D_PT_tools_brush(PaintPanel):
col.separator()
row = col.row(align=True)
- row.prop(brush, "autosmooth_factor", slider=True)
+ row.prop(brush, "auto_smooth_factor", slider=True)
row.prop(brush, "use_inverse_smooth_pressure", toggle=True, text="")
@@ -657,29 +625,9 @@ class VIEW3D_PT_tools_brush(PaintPanel):
row= col.row()
row.prop(brush, "use_frontface", text="Front Faces Only")
- #if brush.sculpt_tool in ('DRAW', 'CREASE', 'BLOB', 'LAYER', 'CLAY', 'CLAY_TUBES'):
- if brush.sculpt_tool in ('DRAW', 'CREASE', 'BLOB', 'LAYER', 'CLAY'):
- col.separator()
- col.row().prop(brush, "direction", expand=True)
- elif brush.sculpt_tool in ('FLATTEN'):
- col.separator()
- col.row().prop(brush, "flatten_contrast", expand=True)
- elif brush.sculpt_tool in ('FILL'):
- col.separator()
- col.row().prop(brush, "fill_deepen", expand=True)
- elif brush.sculpt_tool in ('SCRAPE'):
- col.separator()
- col.row().prop(brush, "scrape_peaks", expand=True)
- elif brush.sculpt_tool in ('INFLATE'):
- col.separator()
- col.row().prop(brush, "inflate_deflate", expand=True)
- elif brush.sculpt_tool in ('PINCH'):
- col.separator()
- col.row().prop(brush, "pinch_magnify", expand=True)
-
-
+ col.separator()
+ col.row().prop(brush, "direction", expand=True)
- #if brush.sculpt_tool in ('DRAW', 'CREASE', 'BLOB', 'INFLATE', 'LAYER', 'CLAY', 'CLAY_TUBES'):
if brush.sculpt_tool in ('DRAW', 'CREASE', 'BLOB', 'INFLATE', 'LAYER', 'CLAY'):
col.separator()
@@ -710,16 +658,16 @@ class VIEW3D_PT_tools_brush(PaintPanel):
col.prop(brush, "color", text="")
row = col.row(align=True)
- row.prop(brush, "size", slider=True)
- row.prop(brush, "use_size_pressure", toggle=True, text="")
+ row.prop(brush, "size", text="Radius", slider=True)
+ row.prop(brush, "use_pressure_size", toggle=True, text="")
row = col.row(align=True)
- row.prop(brush, "strength", slider=True)
- row.prop(brush, "use_strength_pressure", toggle=True, text="")
+ row.prop(brush, "strength", text="Strength", slider=True)
+ row.prop(brush, "use_pressure_strength", toggle=True, text="")
row = col.row(align=True)
row.prop(brush, "jitter", slider=True)
- row.prop(brush, "use_jitter_pressure", toggle=True, text="")
+ row.prop(brush, "use_pressure_jitter", toggle=True, text="")
col.prop(brush, "blend", text="Blend")
@@ -732,20 +680,21 @@ class VIEW3D_PT_tools_brush(PaintPanel):
elif context.weight_paint_object and brush:
layout.prop(context.tool_settings, "vertex_group_weight", text="Weight", slider=True)
- layout.prop(context.tool_settings, "auto_normalize", text="Auto Normalize")
+ layout.prop(context.tool_settings, "use_auto_normalize", text="Auto Normalize")
col = layout.column()
+
row = col.row(align=True)
- row.prop(brush, "size", slider=True)
- row.prop(brush, "use_size_pressure", toggle=True, text="")
+ row.prop(brush, "size", text="Radius", slider=True)
+ row.prop(brush, "use_pressure_size", toggle=True, text="")
row = col.row(align=True)
- row.prop(brush, "strength", slider=True)
- row.prop(brush, "use_strength_pressure", toggle=True, text="")
+ row.prop(brush, "strength", text="Strength", slider=True)
+ row.prop(brush, "use_pressure_strength", toggle=True, text="")
row = col.row(align=True)
row.prop(brush, "jitter", slider=True)
- row.prop(brush, "use_jitter_pressure", toggle=True, text="")
+ row.prop(brush, "use_pressure_jitter", toggle=True, text="")
# Vertex Paint Mode #
@@ -755,32 +704,33 @@ class VIEW3D_PT_tools_brush(PaintPanel):
col.prop(brush, "color", text="")
row = col.row(align=True)
- row.prop(brush, "size", slider=True)
- row.prop(brush, "use_size_pressure", toggle=True, text="")
+ row.prop(brush, "size", text="Radius", slider=True)
+ row.prop(brush, "use_pressure_size", toggle=True, text="")
row = col.row(align=True)
- row.prop(brush, "strength", slider=True)
- row.prop(brush, "use_strength_pressure", toggle=True, text="")
+ row.prop(brush, "strength", text="Strength", slider=True)
+ row.prop(brush, "use_pressure_strength", toggle=True, text="")
# XXX - TODO
#row = col.row(align=True)
#row.prop(brush, "jitter", slider=True)
- #row.prop(brush, "use_jitter_pressure", toggle=True, text="")
+ #row.prop(brush, "use_pressure_jitter", toggle=True, text="")
-class VIEW3D_PT_tools_brush_texture(PaintPanel):
+class VIEW3D_PT_tools_brush_texture(PaintPanel, bpy.types.Panel):
bl_label = "Texture"
bl_default_closed = True
- def poll(self, context):
- settings = self.paint_settings(context)
+ @classmethod
+ def poll(cls, context):
+ settings = cls.paint_settings(context)
return (settings and settings.brush and (context.sculpt_object or
context.texture_paint_object))
def draw(self, context):
layout = self.layout
- settings = self.paint_settings(context)
+ settings = __class__.paint_settings(context)
brush = settings.brush
tex_slot = brush.texture_slot
@@ -791,7 +741,6 @@ class VIEW3D_PT_tools_brush_texture(PaintPanel):
if context.sculpt_object:
#XXX duplicated from properties_texture.py
- wide_ui = context.region.width > narrowui
col.separator()
@@ -804,12 +753,12 @@ class VIEW3D_PT_tools_brush_texture(PaintPanel):
col.separator()
col = layout.column()
- col.active = tex_slot.map_mode in ('FIXED')
+ col.active = tex_slot.map_mode in ('FIXED', )
col.label(text="Angle:")
col = layout.column()
if not brush.use_anchor and brush.sculpt_tool not in ('GRAB', 'SNAKE_HOOK', 'THUMB', 'ROTATE') and tex_slot.map_mode in ('FIXED'):
- col.prop(brush, "texture_angle_source", text="")
+ col.prop(brush, "texture_angle_source_random", text="")
else:
col.prop(brush, "texture_angle_source_no_random", text="")
@@ -836,10 +785,7 @@ class VIEW3D_PT_tools_brush_texture(PaintPanel):
col = split.column()
col.prop(tex_slot, "offset")
- if wide_ui:
- col = split.column()
- else:
- col.separator()
+ col = split.column()
col.prop(tex_slot, "size")
@@ -870,12 +816,13 @@ class VIEW3D_PT_tools_brush_texture(PaintPanel):
col.active = tex_slot.map_mode in ('FIXED', 'TILED') and brush.use_texture_overlay
-class VIEW3D_PT_tools_brush_tool(PaintPanel):
+class VIEW3D_PT_tools_brush_tool(PaintPanel, bpy.types.Panel):
bl_label = "Tool"
bl_default_closed = True
- def poll(self, context):
- settings = self.paint_settings(context)
+ @classmethod
+ def poll(cls, context):
+ settings = cls.paint_settings(context)
return (settings and settings.brush and
(context.sculpt_object or context.texture_paint_object or
context.vertex_paint_object or context.weight_paint_object))
@@ -883,7 +830,7 @@ class VIEW3D_PT_tools_brush_tool(PaintPanel):
def draw(self, context):
layout = self.layout
- settings = self.paint_settings(context)
+ settings = __class__.paint_settings(context)
brush = settings.brush
texture_paint = context.texture_paint_object
sculpt = context.sculpt_object
@@ -892,18 +839,26 @@ class VIEW3D_PT_tools_brush_tool(PaintPanel):
if context.sculpt_object:
col.prop(brush, "sculpt_tool", expand=False, text="")
+ col.operator("brush.reset")
elif context.texture_paint_object:
col.prop(brush, "imagepaint_tool", expand=False, text="")
elif context.vertex_paint_object or context.weight_paint_object:
col.prop(brush, "vertexpaint_tool", expand=False, text="")
+ row = layout.row(align=True)
+ row.prop(brush, "use_paint_sculpt", text="", icon='SCULPTMODE_HLT')
+ row.prop(brush, "use_paint_vertex", text="", icon='VPAINT_HLT')
+ row.prop(brush, "use_paint_weight", text="", icon='WPAINT_HLT')
+ row.prop(brush, "use_paint_texture", text="", icon='TPAINT_HLT')
-class VIEW3D_PT_tools_brush_stroke(PaintPanel):
+
+class VIEW3D_PT_tools_brush_stroke(PaintPanel, bpy.types.Panel):
bl_label = "Stroke"
bl_default_closed = True
- def poll(self, context):
- settings = self.paint_settings(context)
+ @classmethod
+ def poll(cls, context):
+ settings = cls.paint_settings(context)
return (settings and settings.brush and (context.sculpt_object or
context.vertex_paint_object or
context.weight_paint_object or
@@ -912,7 +867,7 @@ class VIEW3D_PT_tools_brush_stroke(PaintPanel):
def draw(self, context):
layout = self.layout
- settings = self.paint_settings(context)
+ settings = __class__.paint_settings(context)
brush = settings.brush
texture_paint = context.texture_paint_object
@@ -925,7 +880,7 @@ class VIEW3D_PT_tools_brush_stroke(PaintPanel):
if brush.use_anchor:
col.separator()
row = col.row()
- row.prop(brush, "edge_to_edge", "Edge To Edge")
+ row.prop(brush, "use_edge_to_edge", "Edge To Edge")
if brush.use_airbrush:
col.separator()
@@ -938,7 +893,7 @@ class VIEW3D_PT_tools_brush_stroke(PaintPanel):
row.active = brush.use_space
row.prop(brush, "spacing", text="Spacing")
- if brush.sculpt_tool not in ('GRAB', 'THUMB', 'SNAKE_HOOK', 'ROTATE') and (not brush.use_anchor) and (not brush.restore_mesh):
+ if brush.sculpt_tool not in ('GRAB', 'THUMB', 'SNAKE_HOOK', 'ROTATE') and (not brush.use_anchor) and (not brush.use_restore_mesh):
col = layout.column()
col.separator()
@@ -953,7 +908,7 @@ class VIEW3D_PT_tools_brush_stroke(PaintPanel):
row = col.row(align=True)
row.prop(brush, "jitter", slider=True)
- row.prop(brush, "use_jitter_pressure", toggle=True, text="")
+ row.prop(brush, "use_pressure_jitter", toggle=True, text="")
else:
row = col.row()
@@ -992,21 +947,23 @@ class VIEW3D_PT_tools_brush_stroke(PaintPanel):
#col.separator()
#if texture_paint:
- # row.prop(brush, "use_spacing_pressure", toggle=True, text="")
+ # row.prop(brush, "use_pressure_spacing", toggle=True, text="")
-class VIEW3D_PT_tools_brush_curve(PaintPanel):
+class VIEW3D_PT_tools_brush_curve(PaintPanel, bpy.types.Panel):
bl_label = "Curve"
bl_default_closed = True
- def poll(self, context):
- settings = self.paint_settings(context)
+ @classmethod
+ def poll(cls, context):
+ settings = cls.paint_settings(context)
return (settings and settings.brush and settings.brush.curve)
def draw(self, context):
layout = self.layout
settings = self.paint_settings(context)
+
brush = settings.brush
layout.template_curve_mapping(brush, "curve", brush=True)
@@ -1018,37 +975,38 @@ class VIEW3D_PT_tools_brush_curve(PaintPanel):
row.operator("brush.curve_preset", icon="SHARPCURVE", text="").shape = 'SHARP'
row.operator("brush.curve_preset", icon="LINCURVE", text="").shape = 'LINE'
row.operator("brush.curve_preset", icon="NOCURVE", text="").shape = 'MAX'
- row.operator("brush.curve_preset", icon="RNDCURVE", text="").shape = 'MID9'
-class VIEW3D_PT_sculpt_options(PaintPanel):
+
+class VIEW3D_PT_sculpt_options(PaintPanel, bpy.types.Panel):
bl_label = "Options"
bl_default_closed = True
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return (context.sculpt_object and context.tool_settings.sculpt)
def draw(self, context):
layout = self.layout
- wide_ui = context.region.width > narrowui
- sculpt = context.tool_settings.sculpt
- settings = self.paint_settings(context)
+ tool_settings = context.tool_settings
+ sculpt = tool_settings.sculpt
+ settings = __class__.paint_settings(context)
brush = settings.brush
split = layout.split()
col = split.column()
- edit = context.user_preferences.edit
+ col.prop(sculpt, "use_threaded", text="Threaded Sculpt")
+ col.prop(sculpt, "show_low_resolution")
+ col.prop(sculpt, "show_brush")
+
col.label(text="Unified Settings:")
- col.prop(edit, "sculpt_paint_use_unified_size", text="Size")
- col.prop(edit, "sculpt_paint_use_unified_strength", text="Strength")
+ col.prop(tool_settings, "sculpt_paint_use_unified_size", text="Size")
+ col.prop(tool_settings, "sculpt_paint_use_unified_strength", text="Strength")
- if wide_ui:
- col = split.column()
- else:
- col.separator()
+ col = split.column()
col.label(text="Lock:")
row = col.row(align=True)
@@ -1056,20 +1014,22 @@ class VIEW3D_PT_sculpt_options(PaintPanel):
row.prop(sculpt, "lock_y", text="Y", toggle=True)
row.prop(sculpt, "lock_z", text="Z", toggle=True)
-class VIEW3D_PT_sculpt_symmetry(PaintPanel):
+
+
+class VIEW3D_PT_sculpt_symmetry(PaintPanel, bpy.types.Panel):
bl_label = "Symmetry"
bl_default_closed = True
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return (context.sculpt_object and context.tool_settings.sculpt)
def draw(self, context):
- wide_ui = context.region.width > narrowui
layout = self.layout
sculpt = context.tool_settings.sculpt
- settings = self.paint_settings(context)
+ settings = __class__.paint_settings(context)
brush = settings.brush
split = layout.split()
@@ -1077,16 +1037,13 @@ class VIEW3D_PT_sculpt_symmetry(PaintPanel):
col = split.column()
col.label(text="Mirror:")
- col.prop(sculpt, "symmetry_x", text="X")
- col.prop(sculpt, "symmetry_y", text="Y")
- col.prop(sculpt, "symmetry_z", text="Z")
+ col.prop(sculpt, "use_symmetry_x", text="X")
+ col.prop(sculpt, "use_symmetry_y", text="Y")
+ col.prop(sculpt, "use_symmetry_z", text="Z")
- if wide_ui:
- col = split.column()
- else:
- col.separator()
+ col = split.column()
- col.prop(sculpt, "radial_symm", text="Radial")
+ col.prop(sculpt, "radial_symmetry", text="Radial")
col = layout.column()
@@ -1094,41 +1051,46 @@ class VIEW3D_PT_sculpt_symmetry(PaintPanel):
col.prop(sculpt, "use_symmetry_feather", text="Feather")
-class VIEW3D_PT_tools_brush_appearance(PaintPanel):
+class VIEW3D_PT_tools_brush_appearance(PaintPanel, bpy.types.Panel):
bl_label = "Appearance"
bl_default_closed = True
- def poll(self, context):
+ @classmethod
+ def poll(cls, context):
return (context.sculpt_object and context.tool_settings.sculpt) or (context.vertex_paint_object and context.tool_settings.vertex_paint) or (context.weight_paint_object and context.tool_settings.weight_paint) or (context.texture_paint_object and context.tool_settings.image_paint)
def draw(self, context):
layout = self.layout
sculpt = context.tool_settings.sculpt
- settings = self.paint_settings(context)
+ settings = __class__.paint_settings(context)
brush = settings.brush
col = layout.column();
if context.sculpt_object and context.tool_settings.sculpt:
- #if brush.sculpt_tool in ('DRAW', 'INFLATE', 'CLAY', 'CLAY_TUBES', 'PINCH', 'CREASE', 'BLOB', 'FLATTEN'):
- if brush.sculpt_tool in ('DRAW', 'INFLATE', 'CLAY', 'PINCH', 'CREASE', 'BLOB', 'FLATTEN'):
- col.prop(brush, "add_col", text="Add Color")
- col.prop(brush, "sub_col", text="Substract Color")
+ #if brush.sculpt_tool in ('DRAW', 'INFLATE', 'CLAY', 'PINCH', 'CREASE', 'BLOB', 'FLATTEN', 'FILL', 'SCRAPE', 'CLAY_TUBES'):
+ if brush.sculpt_tool in ('DRAW', 'INFLATE', 'CLAY', 'PINCH', 'CREASE', 'BLOB', 'FLATTEN', 'FILL', 'SCRAPE'):
+ col.prop(brush, "cursor_color_add", text="Add Color")
+ col.prop(brush, "cursor_color_subtract", text="Subtract Color")
else:
- col.prop(brush, "add_col", text="Color")
-
- col.separator()
+ col.prop(brush, "cursor_color_add", text="Color")
+ else:
+ col.prop(brush, "cursor_color_add", text="Color")
col = layout.column()
col.label(text="Icon:")
- #col.template_ID_preview(brush, "image_icon", open="image.open", filter="is_image_icon", rows=3, cols=8)
- col.template_ID_preview(brush, "image_icon", open="image.open", rows=3, cols=8)
+
+ row = col.row(align=True)
+ row.prop(brush, "use_custom_icon")
+ if brush.use_custom_icon:
+ row = col.row(align=True)
+ row.prop(brush, "icon_filepath", text="")
# ********** default tools for weightpaint ****************
-class VIEW3D_PT_tools_weightpaint(View3DPanel):
+class VIEW3D_PT_tools_weightpaint(View3DPanel, bpy.types.Panel):
bl_context = "weightpaint"
bl_label = "Weight Tools"
@@ -1143,19 +1105,20 @@ class VIEW3D_PT_tools_weightpaint(View3DPanel):
col.operator("object.vertex_group_levels", text="Levels")
-class VIEW3D_PT_tools_weightpaint_options(View3DPanel):
+class VIEW3D_PT_tools_weightpaint_options(View3DPanel, bpy.types.Panel):
bl_context = "weightpaint"
bl_label = "Options"
def draw(self, context):
layout = self.layout
- wpaint = context.tool_settings.weight_paint
+ tool_settings = context.tool_settings
+ wpaint = tool_settings.weight_paint
col = layout.column()
- col.prop(wpaint, "all_faces")
- col.prop(wpaint, "normals")
- col.prop(wpaint, "spray")
+ col.prop(wpaint, "use_all_faces")
+ col.prop(wpaint, "use_normal")
+ col.prop(wpaint, "use_spray")
obj = context.weight_paint_object
if obj.type == 'MESH':
@@ -1163,6 +1126,10 @@ class VIEW3D_PT_tools_weightpaint_options(View3DPanel):
col.prop(mesh, "use_mirror_x")
col.prop(mesh, "use_mirror_topology")
+ col.label(text="Unified Settings:")
+ col.prop(tool_settings, "sculpt_paint_use_unified_size", text="Size")
+ col.prop(tool_settings, "sculpt_paint_use_unified_strength", text="Strength")
+
# Commented out because the Apply button isn't an operator yet, making these settings useless
# col.label(text="Gamma:")
# col.prop(wpaint, "gamma", text="")
@@ -1175,20 +1142,25 @@ class VIEW3D_PT_tools_weightpaint_options(View3DPanel):
# ********** default tools for vertexpaint ****************
-class VIEW3D_PT_tools_vertexpaint(View3DPanel):
+class VIEW3D_PT_tools_vertexpaint(View3DPanel, bpy.types.Panel):
bl_context = "vertexpaint"
bl_label = "Options"
def draw(self, context):
layout = self.layout
- vpaint = context.tool_settings.vertex_paint
+ tool_settings = context.tool_settings
+ vpaint = tool_settings.vertex_paint
col = layout.column()
#col.prop(vpaint, "mode", text="")
- col.prop(vpaint, "all_faces")
- col.prop(vpaint, "normals")
- col.prop(vpaint, "spray")
+ col.prop(vpaint, "use_all_faces")
+ col.prop(vpaint, "use_normal")
+ col.prop(vpaint, "use_spray")
+
+ col.label(text="Unified Settings:")
+ col.prop(tool_settings, "sculpt_paint_use_unified_size", text="Size")
+ col.prop(tool_settings, "sculpt_paint_use_unified_strength", text="Strength")
# Commented out because the Apply button isn't an operator yet, making these settings useless
# col.label(text="Gamma:")
@@ -1199,12 +1171,14 @@ class VIEW3D_PT_tools_vertexpaint(View3DPanel):
# ********** default tools for texturepaint ****************
-class VIEW3D_PT_tools_projectpaint(View3DPanel):
+class VIEW3D_PT_tools_projectpaint(View3DPanel, bpy.types.Panel):
bl_context = "texturepaint"
bl_label = "Project Paint"
- def poll(self, context):
- return context.tool_settings.image_paint.brush.imagepaint_tool != 'SMEAR'
+ @classmethod
+ def poll(cls, context):
+ brush = context.tool_settings.image_paint.brush
+ return (brush and brush.imagepaint_tool != 'SMEAR')
def draw_header(self, context):
ipaint = context.tool_settings.image_paint
@@ -1222,7 +1196,7 @@ class VIEW3D_PT_tools_projectpaint(View3DPanel):
sub = col.column()
sub.active = use_projection
sub.prop(ipaint, "use_occlude")
- sub.prop(ipaint, "use_backface_cull")
+ sub.prop(ipaint, "use_backface_culling")
split = layout.split()
@@ -1268,6 +1242,24 @@ class VIEW3D_PT_tools_projectpaint(View3DPanel):
sub.operator("image.save_dirty", text="Save All Edited")
+class VIEW3D_PT_imagepaint_options(PaintPanel):
+ bl_label = "Options"
+ bl_default_closed = True
+
+ @classmethod
+ def poll(cls, context):
+ return (context.texture_paint_object and context.tool_settings.image_paint)
+
+ def draw(self, context):
+ layout = self.layout
+
+ col = layout.column()
+
+ tool_settings = context.tool_settings
+ col.label(text="Unified Settings:")
+ col.prop(tool_settings, "sculpt_paint_use_unified_size", text="Size")
+ col.prop(tool_settings, "sculpt_paint_use_unified_strength", text="Strength")
+
class VIEW3D_MT_tools_projectpaint_clone(bpy.types.Menu):
bl_label = "Clone Layer"
@@ -1290,7 +1282,7 @@ class VIEW3D_MT_tools_projectpaint_stencil(bpy.types.Menu):
prop.value = i
-class VIEW3D_PT_tools_particlemode(View3DPanel):
+class VIEW3D_PT_tools_particlemode(View3DPanel, bpy.types.Panel):
'''default tools for particle mode'''
bl_context = "particlemode"
bl_label = "Options"
@@ -1316,89 +1308,53 @@ class VIEW3D_PT_tools_particlemode(View3DPanel):
if md.type == pe.type:
ptcache = md.point_cache
- if ptcache and len(ptcache.point_cache_list) > 1:
- layout.template_list(ptcache, "point_cache_list", ptcache, "active_point_cache_index", type='ICONS')
+ if ptcache and len(ptcache.point_caches) > 1:
+ layout.template_list(ptcache, "point_caches", ptcache, "active_point_cache_index", type='ICONS')
- if not pe.editable:
+ if not pe.is_editable:
layout.label(text="Point cache must be baked")
layout.label(text="to enable editing!")
col = layout.column(align=True)
- if pe.hair:
- col.active = pe.editable
- col.prop(pe, "emitter_deflect", text="Deflect emitter")
+ if pe.is_hair:
+ col.active = pe.is_editable
+ col.prop(pe, "use_emitter_deflect", text="Deflect emitter")
sub = col.row()
- sub.active = pe.emitter_deflect
+ sub.active = pe.use_emitter_deflect
sub.prop(pe, "emitter_distance", text="Distance")
col = layout.column(align=True)
- col.active = pe.editable
+ col.active = pe.is_editable
col.label(text="Keep:")
- col.prop(pe, "keep_lengths", text="Lenghts")
- col.prop(pe, "keep_root", text="Root")
- if not pe.hair:
+ col.prop(pe, "use_preserve_length", text="Lengths")
+ col.prop(pe, "use_preserve_root", text="Root")
+ if not pe.is_hair:
col.label(text="Correct:")
- col.prop(pe, "auto_velocity", text="Velocity")
+ col.prop(pe, "use_auto_velocity", text="Velocity")
col.prop(ob.data, "use_mirror_x")
col = layout.column(align=True)
- col.active = pe.editable
+ col.active = pe.is_editable
col.label(text="Draw:")
col.prop(pe, "draw_step", text="Path Steps")
- if pe.hair:
- col.prop(pe, "draw_particles", text="Children")
+ if pe.is_hair:
+ col.prop(pe, "show_particles", text="Children")
else:
if pe.type == 'PARTICLES':
- col.prop(pe, "draw_particles", text="Particles")
- col.prop(pe, "fade_time")
+ col.prop(pe, "show_particles", text="Particles")
+ col.prop(pe, "use_fade_time")
sub = col.row()
- sub.active = pe.fade_time
+ sub.active = pe.use_fade_time
sub.prop(pe, "fade_frames", slider=True)
-classes = [
- VIEW3D_PT_tools_weightpaint,
- VIEW3D_PT_tools_objectmode,
- VIEW3D_PT_tools_meshedit,
- VIEW3D_PT_tools_meshedit_options,
- VIEW3D_PT_tools_curveedit,
- VIEW3D_PT_tools_surfaceedit,
- VIEW3D_PT_tools_textedit,
- VIEW3D_PT_tools_armatureedit,
- VIEW3D_PT_tools_armatureedit_options,
- VIEW3D_PT_tools_mballedit,
- VIEW3D_PT_tools_latticeedit,
- VIEW3D_PT_tools_posemode,
- VIEW3D_PT_tools_posemode_options,
- VIEW3D_PT_tools_brush,
- VIEW3D_PT_tools_brush_texture,
- VIEW3D_PT_tools_brush_stroke,
- VIEW3D_PT_tools_brush_curve,
- VIEW3D_PT_tools_brush_appearance,
- VIEW3D_PT_tools_brush_tool,
- VIEW3D_PT_sculpt_symmetry,
- VIEW3D_PT_sculpt_options,
- VIEW3D_PT_tools_vertexpaint,
- VIEW3D_PT_tools_weightpaint_options,
-
- VIEW3D_PT_tools_projectpaint,
- VIEW3D_MT_tools_projectpaint_clone,
- VIEW3D_MT_tools_projectpaint_stencil,
-
- VIEW3D_PT_tools_particlemode]
-
-
def register():
- register = bpy.types.register
- for cls in classes:
- register(cls)
+ pass
def unregister():
- unregister = bpy.types.unregister
- for cls in classes:
- unregister(cls)
+ pass
if __name__ == "__main__":
register()
diff --git a/release/text/copyright.txt b/release/text/copyright.txt
index 9f49dd4587a..207d6f54ea8 100644
--- a/release/text/copyright.txt
+++ b/release/text/copyright.txt
@@ -1,6 +1,6 @@
This version of Blender has been originally released at www.blender.org.
- It is subject to the GPL license, which is part of this download.
+ It is subject to the GNU GPL license, which is part of this download.
For more information please review the Blender source code distribution,
which should be available at the same location as where you obtained
this version.
@@ -14,14 +14,12 @@
License Agreement accompanies (the "Software").
By installing, copying or otherwise using the Software, You agree to be
- bound by the terms of this License Agreement. If You do not agree to the
- terms of this License Agreement do not install or use the Software.
+ bound by the terms of this License Agreement.
1. Grant of License
- Subject to the provisions of this License Agreement, BF grants You a
- limited, non-exclusive, personal, non-sublicenseable, non-transferable
- license to use the Software at any computer You own or use.
+ Subject to the provisions of the GNU GPL license, BF grants You a
+ non-exclusive right to use the Software at any computer You own or use.
Artwork you create with the Software - whether it is images, movies,
scripts, exported 3d files or the .blend files themselves - is your sole
property, and can be licensed or sold under any conditions you prefer.
@@ -76,25 +74,8 @@
out of or in connection with (i) the use of the Software by You and (ii)
the use of any Works created with the Software by You or any third
parties.
-
- 6. Term and Termination
-
- This License Agreement and the license granted hereunder is effective
- until terminated. This License Agreement shall terminate automatically
- and forthwith if You fail to comply with the terms of this License
- Agreement. Upon termination, You shall cease the use of the Software,
- remove the Software from (the memory of) your computer and destroy all
- copies of the Software.
-
- 7. Entire Agreement
-
- This License Agreement is the entire agreement between BF and You in
- respect of the subject matter of the License Agreement. This License
- Agreement supersedes all prior written or oral agreements, proposals or
- understandings, and any other communications between BF and You
- relating to the subject matter of this License Agreement.
-
- 8. Enforceability
+
+ 6. Enforceability
If any provision of this License Agreement is held to be unenforceable
by a court of competent jurisdiction for any reason, such provision
@@ -102,7 +83,7 @@
enforceable, and the remainder of the License Agreement shall remain in
effect.
- 9. Governing law and disputes
+ 7. Governing law and disputes
This License Agreement and all disputes arising from it will be governed
by the laws of The Netherlands. All disputes arising in connection with
diff --git a/release/text/readme.html b/release/text/readme.html
index 1da4b62a73e..1b14c63e14a 100644
--- a/release/text/readme.html
+++ b/release/text/readme.html
@@ -12,23 +12,23 @@
</style>
</head>
<body>
-<p class="title"><b>Blender 2.5 Alpha 2</b></p>
+<p class="title"><b>Blender 2.5 Beta</b></p>
<p><br></p>
<p class="header"><b>About</b></p>
<p class="body">Welcome to Blender, the free, open source 3D application for modeling, animation, rendering, compositing, video editing and game creation. Blender is available for Linux, Mac OS X, Windows, Solaris and Irix and has a large world-wide community.</p>
<p class="body">Blender can be used freely for any purpose, including commercial use and distribution. It's free and open-source software, released under the GNU GPL licence. The entire source code is available on our website.</p>
<p class="body">For more information, visit <a href="http://www.blender.org">blender.org</a>.</p>
<p><br></p>
-<p class="header"><b>2.5 Alpha 2</b></p>
-<p class="body">The Blender Foundation and online developer community is proud to present Blender 2.5 Alpha 2. This release is the third official testing release of the Blender 2.5 series, and represents the culmination of many years of redesign and development work. <a href="http://www.blender.org/development/release-logs/blender-250/">More information about this release</a>.</p>
+<p class="header"><b>2.5 Beta</b></p>
+<p class="body">The Blender Foundation and online developer community is proud to present Blender 2.5 Beta. This release is the third official testing release of the Blender 2.5 series, and represents the culmination of many years of redesign and development work. <a href="http://www.blender.org/development/release-logs/blender-250/">More information about this release</a>.</p>
<p class="body">What to Expect:</p>
<p class="body"> • Big improvements - This is our most exciting version to date, already a significant improvement in many ways over 2.49</p>
<p class="body"> • Missing/Incomplete Features - Although most of it is there, not all functionality from pre-2.5 versions has been restored yet. Some functionality may be re-implemented a different way.</p>
-<p class="body"> • Bugs - We've fixed a lot lately, but there are still quite a few bugs. This is alpha software, we're still working on it!</p>
+<p class="body"> • Bugs - We've fixed a lot lately, but there are still quite a few bugs. This is beta software, we're still working on it!</p>
<p class="body"> • Changes - If you're used to the old Blenders, Blender 2.5 may seem quite different at first, but it won't be long before it grows on you even more than before.</p>
<p><br></p>
<p class="header"><b>Bugs</b></p>
-<p class="body">Blender 2.5 Alpha 2 is unfinished software. If you encounter a bug, please help us by posting it in the bug tracker or using Help → Report a Bug from inside Blender 2.5. If it wasn’t reported yet, please log in (or register) and fill in detailed information about the error. Please post detailed instructions on how to reproduce it or post a .blend file showcasing the bug.</p>
+<p class="body">Blender 2.5 Beta is unfinished software. If you encounter a bug, please help us by posting it in the bug tracker or using Help → Report a Bug from inside Blender 2.5. If it wasn’t reported yet, please log in (or register) and fill in detailed information about the error. Please post detailed instructions on how to reproduce it or post a .blend file showcasing the bug.</p>
<p><br></p>
<p class="header"><b>Package Contents</b></p>
<p class="body">The downloaded Blender package includes:</p>
diff --git a/source/Makefile b/source/Makefile
index 12e47ba5863..1055c2a94e9 100644
--- a/source/Makefile
+++ b/source/Makefile
@@ -17,7 +17,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
@@ -109,38 +109,37 @@ COMLIB += $(NAN_JPEG)/lib/libjpeg.a
COMLIB += $(OCGDIR)/blender/gpu/$(DEBUG_DIR)libgpu.a
COMLIB += $(NAN_GLEW)/lib/$(DEBUG_DIR)libglew.a
COMLIB += $(OCGDIR)/blender/blenfont/$(DEBUG_DIR)libblenfont.a
+COMLIB += $(OCGDIR)/blender/python/$(DEBUG_DIR)libpython.a
+COMLIB += $(NAN_AUDASPACE)/lib/$(DEBUG_DIR)libaudaspace.a
+COMLIB += $(NAN_AUDASPACE)/lib/$(DEBUG_DIR)libaud_python.a
COMLIB += $(NAN_AUDASPACE)/lib/$(DEBUG_DIR)libaudaspace.a
COMLIB += $(NAN_AUDASPACE)/lib/$(DEBUG_DIR)libaud_src.a
COMLIB += $(NAN_AUDASPACE)/lib/$(DEBUG_DIR)libaud_fx.a
COMLIB += $(NAN_AUDASPACE)/lib/$(DEBUG_DIR)libaud_sdl.a
-COMLIB += $(NAN_SAMPLERATE)/lib/$(DEBUG_DIR)libsamplerate.a
-COMLIB += $(NAN_LZO)/lib/$(DEBUG_DIR)libminilzo.a
-COMLIB += $(NAN_LZMA)/lib/$(DEBUG_DIR)liblzma.a
-COMLIB += $(NAN_BSP)/lib/$(DEBUG_DIR)libbsp.a
-COMLIB += $(NAN_BOOLOP)/lib/$(DEBUG_DIR)libboolop.a
-COMLIB += $(NAN_MOTO)/lib/$(DEBUG_DIR)libmoto.a
-COMLIB += $(NAN_DECIMATION)/lib/$(DEBUG_DIR)libdecimation.a
-COMLIB += $(NAN_GHOST)/lib/$(DEBUG_DIR)libghost.a
-
ifeq ($(WITH_FFMPEG),true)
COMLIB += $(NAN_AUDASPACE)/lib/$(DEBUG_DIR)libaud_ffmpeg.a
endif
-
ifeq ($(WITH_OPENAL),true)
COMLIB += $(NAN_AUDASPACE)/lib/$(DEBUG_DIR)libaud_openal.a
endif
-
ifeq ($(WITH_JACK),true)
COMLIB += $(NAN_AUDASPACE)/lib/$(DEBUG_DIR)libaud_jack.a
endif
-
ifeq ($(WITH_SNDFILE),true)
COMLIB += $(NAN_AUDASPACE)/lib/$(DEBUG_DIR)libaud_sndfile.a
endif
-
ifeq ($(WITH_FFTW3),true)
COMLIB += $(NAN_AUDASPACE)/lib/$(DEBUG_DIR)libaud_fftw.a
endif
+COMLIB += $(NAN_SAMPLERATE)/lib/$(DEBUG_DIR)libsamplerate.a
+COMLIB += $(NAN_LZO)/lib/$(DEBUG_DIR)libminilzo.a
+COMLIB += $(NAN_LZMA)/lib/$(DEBUG_DIR)liblzma.a
+COMLIB += $(NAN_BSP)/lib/$(DEBUG_DIR)libbsp.a
+COMLIB += $(NAN_BOOLOP)/lib/$(DEBUG_DIR)libboolop.a
+COMLIB += $(NAN_MOTO)/lib/$(DEBUG_DIR)libmoto.a
+COMLIB += $(NAN_DECIMATION)/lib/$(DEBUG_DIR)libdecimation.a
+COMLIB += $(NAN_GHOST)/lib/$(DEBUG_DIR)libghost.a
+
ifneq ($(NAN_NO_KETSJI),true)
COMLIB += $(OCGDIR)/gameengine/bloutines/$(DEBUG_DIR)libbloutines.a
@@ -204,7 +203,9 @@ ifeq ($(WITH_OPENJPEG), true)
endif
endif
-COMLIB += $(OCGDIR)/blender/imbuf/cineon/$(DEBUG_DIR)libcineon.a
+ifeq ($(WITH_CINEON), true)
+ COMLIB += $(OCGDIR)/blender/imbuf/cineon/$(DEBUG_DIR)libcineon.a
+endif
ifeq ($(WITH_DDS), true)
COMLIB += $(OCGDIR)/blender/imbuf/dds/$(DEBUG_DIR)libdds.a
@@ -418,7 +419,7 @@ ifeq ($(WITH_JACK),true)
endif
ifeq ($(WITH_SNDFILE),true)
- ifeq ($(OS),$(findstring $(OS), "linux"))
+ ifeq ($(OS),$(findstring $(OS), "linux darwin"))
NAN_SND_LIBS += $(NAN_SNDFILELIBS)
endif
endif
diff --git a/source/blender/CMakeLists.txt b/source/blender/CMakeLists.txt
index 2af347a82a7..29dc113e075 100644
--- a/source/blender/CMakeLists.txt
+++ b/source/blender/CMakeLists.txt
@@ -35,7 +35,6 @@ ADD_SUBDIRECTORY(bmesh)
ADD_SUBDIRECTORY(blenloader)
ADD_SUBDIRECTORY(blenpluginapi)
ADD_SUBDIRECTORY(imbuf)
-ADD_SUBDIRECTORY(imbuf/intern/cineon)
ADD_SUBDIRECTORY(gpu)
ADD_SUBDIRECTORY(makesdna)
ADD_SUBDIRECTORY(makesrna)
@@ -44,13 +43,17 @@ ADD_SUBDIRECTORY(render)
ADD_SUBDIRECTORY(blenfont)
ADD_SUBDIRECTORY(ikplugin)
-IF(WITH_OPENEXR)
+IF(WITH_IMAGE_OPENEXR)
ADD_SUBDIRECTORY(imbuf/intern/openexr)
-ENDIF(WITH_OPENEXR)
+ENDIF(WITH_IMAGE_OPENEXR)
-IF(WITH_DDS)
+IF(WITH_IMAGE_DDS)
ADD_SUBDIRECTORY(imbuf/intern/dds)
-ENDIF(WITH_DDS)
+ENDIF(WITH_IMAGE_DDS)
+
+IF(WITH_IMAGE_CINEON)
+ ADD_SUBDIRECTORY(imbuf/intern/cineon)
+ENDIF(WITH_IMAGE_CINEON)
IF(WITH_QUICKTIME)
ADD_SUBDIRECTORY(quicktime)
diff --git a/source/blender/Makefile b/source/blender/Makefile
index 1149e1c4be2..8052c175f8e 100644
--- a/source/blender/Makefile
+++ b/source/blender/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/SConscript b/source/blender/SConscript
index c4990dc765b..24514f1660c 100644
--- a/source/blender/SConscript
+++ b/source/blender/SConscript
@@ -11,7 +11,6 @@ SConscript(['avi/SConscript',
'gpu/SConscript',
'editors/SConscript',
'imbuf/SConscript',
- 'imbuf/intern/cineon/SConscript',
'makesdna/SConscript',
'makesrna/SConscript',
'readblenfile/SConscript',
@@ -30,6 +29,9 @@ if env['WITH_BF_PYTHON']:
if env['WITH_BF_DDS']:
SConscript (['imbuf/intern/dds/SConscript'])
+if env['WITH_BF_CINEON']:
+ SConscript (['imbuf/intern/cineon/SConscript'])
+
if env['WITH_BF_OPENEXR']:
SConscript (['imbuf/intern/openexr/SConscript'])
diff --git a/source/blender/avi/AVI_avi.h b/source/blender/avi/AVI_avi.h
index a3115e0543b..2e71bd98309 100644
--- a/source/blender/avi/AVI_avi.h
+++ b/source/blender/avi/AVI_avi.h
@@ -163,7 +163,7 @@ typedef struct _AviIndex {
typedef enum {
AVI_FORMAT_RGB24, /* The most basic of forms, 3 bytes per pixel, 1 per r, g, b */
AVI_FORMAT_RGB32, /* The second most basic of forms, 4 bytes per pixel, 1 per r, g, b, alpha */
- AVI_FORMAT_AVI_RGB, /* Same as above, but is in the wierd AVI order (bottom to top, left to right) */
+ AVI_FORMAT_AVI_RGB, /* Same as above, but is in the weird AVI order (bottom to top, left to right) */
AVI_FORMAT_MJPEG /* Motion-JPEG */
} AviFormat;
diff --git a/source/blender/avi/CMakeLists.txt b/source/blender/avi/CMakeLists.txt
index 0e5e152e5c1..5ef37f5951b 100644
--- a/source/blender/avi/CMakeLists.txt
+++ b/source/blender/avi/CMakeLists.txt
@@ -32,4 +32,3 @@ SET(INC
)
BLENDERLIB(bf_avi "${SRC}" "${INC}")
-#env.BlenderLib ('bf_avi', sources, Split(incs), [], libtype=['core','player'], priority = [90, 50] )
diff --git a/source/blender/avi/Makefile b/source/blender/avi/Makefile
index c8ab5fe0aca..96a6573cc67 100644
--- a/source/blender/avi/Makefile
+++ b/source/blender/avi/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/avi/intern/Makefile b/source/blender/avi/intern/Makefile
index 30f225c8031..8d1af9adb28 100644
--- a/source/blender/avi/intern/Makefile
+++ b/source/blender/avi/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/avi/intern/avi.c b/source/blender/avi/intern/avi.c
index a73dec57a55..5f0d36e17e2 100644
--- a/source/blender/avi/intern/avi.c
+++ b/source/blender/avi/intern/avi.c
@@ -38,6 +38,8 @@
#include <stdio.h>
#include <ctype.h>
+#include "MEM_guardedalloc.h"
+
#include "AVI_avi.h"
#include "avi_intern.h"
diff --git a/source/blender/avi/intern/avi_intern.h b/source/blender/avi/intern/avi_intern.h
index 1ea304213ca..20de67530fd 100644
--- a/source/blender/avi/intern/avi_intern.h
+++ b/source/blender/avi/intern/avi_intern.h
@@ -31,8 +31,6 @@
#include <stdio.h> /* for FILE */
-#include "MEM_guardedalloc.h"
-
unsigned int GET_FCC (FILE *fp);
unsigned int GET_TCC (FILE *fp);
diff --git a/source/blender/blenfont/Makefile b/source/blender/blenfont/Makefile
index 9f34d458126..df1bbb72110 100644
--- a/source/blender/blenfont/Makefile
+++ b/source/blender/blenfont/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2009 Blender Foundation
# All rights reserved.
diff --git a/source/blender/blenfont/intern/Makefile b/source/blender/blenfont/intern/Makefile
index 77e87c27a02..d3a6e656028 100644
--- a/source/blender/blenfont/intern/Makefile
+++ b/source/blender/blenfont/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2008 Blender Foundation.
# All rights reserved.
diff --git a/source/blender/blenfont/intern/blf_font.c b/source/blender/blenfont/intern/blf_font.c
index f7c5531f0ac..a932682b027 100644
--- a/source/blender/blenfont/intern/blf_font.c
+++ b/source/blender/blenfont/intern/blf_font.c
@@ -38,10 +38,8 @@
#include "MEM_guardedalloc.h"
-#include "DNA_listBase.h"
#include "DNA_vec_types.h"
-#include "BKE_utildefines.h"
#include "BLI_blenlib.h"
#include "BLI_linklist.h" /* linknode */
diff --git a/source/blender/blenfont/intern/blf_lang.c b/source/blender/blenfont/intern/blf_lang.c
index 1baf2c82ef7..7054d955faf 100644
--- a/source/blender/blenfont/intern/blf_lang.c
+++ b/source/blender/blenfont/intern/blf_lang.c
@@ -34,7 +34,6 @@
#include <locale.h>
#include "libintl.h"
-#include "MEM_guardedalloc.h"
#include "DNA_listBase.h"
#include "DNA_vec_types.h"
diff --git a/source/blender/blenkernel/BKE_anim.h b/source/blender/blenkernel/BKE_anim.h
index aae2be14f1f..e82eb0ed0c9 100644
--- a/source/blender/blenkernel/BKE_anim.h
+++ b/source/blender/blenkernel/BKE_anim.h
@@ -31,8 +31,6 @@
#ifndef BKE_ANIM_H
#define BKE_ANIM_H
-#define MAX_DUPLI_RECUR 8
-
struct Path;
struct Object;
struct PartEff;
@@ -42,8 +40,6 @@ struct bAnimVizSettings;
struct bMotionPath;
struct bPoseChannel;
-#include "DNA_object_types.h"
-
/* ---------------------------------------------------- */
/* Animation Visualisation */
@@ -54,7 +50,7 @@ void animviz_free_motionpath(struct bMotionPath *mpath);
struct bMotionPath *animviz_verify_motionpaths(struct Scene *scene, struct Object *ob, struct bPoseChannel *pchan);
-void animviz_get_object_motionpaths(Object *ob, ListBase *targets);
+void animviz_get_object_motionpaths(struct Object *ob, ListBase *targets);
void animviz_calc_motionpaths(struct Scene *scene, ListBase *targets);
/* ---------------------------------------------------- */
diff --git a/source/blender/blenkernel/BKE_armature.h b/source/blender/blenkernel/BKE_armature.h
index 2c661a74573..242de4d788b 100644
--- a/source/blender/blenkernel/BKE_armature.h
+++ b/source/blender/blenkernel/BKE_armature.h
@@ -80,7 +80,6 @@ void free_armature(struct bArmature *arm);
void make_local_armature(struct bArmature *arm);
struct bArmature *copy_armature(struct bArmature *arm);
-void bone_flip_name (char *name, int strip_number);
int bone_autoside_name (char *name, int strip_number, short axis, float head, float tail);
struct Bone *get_named_bone (struct bArmature *arm, const char *name);
diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h
index 34e8fb420c9..8820edc3adf 100644
--- a/source/blender/blenkernel/BKE_blender.h
+++ b/source/blender/blenkernel/BKE_blender.h
@@ -44,8 +44,8 @@ struct ReportList;
struct Scene;
struct Main;
-#define BLENDER_VERSION 252
-#define BLENDER_SUBVERSION 5
+#define BLENDER_VERSION 253
+#define BLENDER_SUBVERSION 1
#define BLENDER_MINVERSION 250
#define BLENDER_MINSUBVERSION 0
diff --git a/source/blender/blenkernel/BKE_bmesh.h b/source/blender/blenkernel/BKE_bmesh.h
index b6c39697428..c05a940b0f5 100644
--- a/source/blender/blenkernel/BKE_bmesh.h
+++ b/source/blender/blenkernel/BKE_bmesh.h
@@ -59,7 +59,7 @@ struct BME_Loop;
-Remove the eflags completely, they are mostly not used
-Remove the selection/vis/bevel weight flag/values ect and move them to custom data
-Remove EID member and move to custom data
- -Add a radial cycle length, disk cycle length and loop cycle lenght attributes to custom data and have eulers maintain/use them if present.
+ -Add a radial cycle length, disk cycle length and loop cycle length attributes to custom data and have eulers maintain/use them if present.
-Move data such as vertex coordinates/normals to custom data and leave pointers in structures to active layer data.
-Remove BME_CycleNode structure?
*/
diff --git a/source/blender/blenkernel/BKE_brush.h b/source/blender/blenkernel/BKE_brush.h
index 6a209167f93..0e406a16d0c 100644
--- a/source/blender/blenkernel/BKE_brush.h
+++ b/source/blender/blenkernel/BKE_brush.h
@@ -44,11 +44,13 @@ struct Brush *copy_brush(struct Brush *brush);
void make_local_brush(struct Brush *brush);
void free_brush(struct Brush *brush);
+void brush_reset_sculpt(struct Brush *brush);
+
+/* image icon function */
+struct ImBuf *get_brush_icon(struct Brush *brush);
+
/* brush library operations used by different paint panels */
-int brush_set_nr(struct Brush **current_brush, int nr, const char *name);
int brush_delete(struct Brush **current_brush);
-void brush_check_exists(struct Brush **brush, const char *name);
-void brush_toggled_fake_user(struct Brush *brush);
int brush_texture_set_nr(struct Brush *brush, int nr);
int brush_texture_delete(struct Brush *brush);
int brush_clone_image_set_nr(struct Brush *brush, int nr);
@@ -85,14 +87,24 @@ void brush_radial_control_invoke(struct wmOperator *op, struct Brush *br, float
int brush_radial_control_exec(struct wmOperator *op, struct Brush *br, float size_weight);
/* unified strength and size */
-int sculpt_get_brush_size(struct Brush *brush);
-void sculpt_set_brush_size(struct Brush *brush, int size);
-int sculpt_get_lock_brush_size(struct Brush *brush);
-float sculpt_get_brush_unprojected_radius(struct Brush *brush);
-void sculpt_set_brush_unprojected_radius(struct Brush *brush, float unprojected_radius);
-float sculpt_get_brush_alpha(struct Brush *brush);
-void sculpt_set_brush_alpha(struct Brush *brush, float alpha);
+int brush_size(struct Brush *brush);
+void brush_set_size(struct Brush *brush, int value);
+
+int brush_use_locked_size(struct Brush *brush);
+void brush_set_use_locked_size(struct Brush *brush, int value);
+
+int brush_use_alpha_pressure(struct Brush *brush);
+void brush_set_use_alpha_pressure(struct Brush *brush, int value);
+
+int brush_use_size_pressure(struct Brush *brush);
+void brush_set_use_size_pressure(struct Brush *brush, int value);
+
+float brush_unprojected_radius(struct Brush *brush);
+void brush_set_unprojected_radius(struct Brush *brush, float value);
+
+float brush_alpha(struct Brush *brush);
+void brush_set_alpha(struct Brush *brush, float value);
#endif
diff --git a/source/blender/blenkernel/BKE_cloth.h b/source/blender/blenkernel/BKE_cloth.h
index d8b3fcfd0bb..034bedbb07d 100644
--- a/source/blender/blenkernel/BKE_cloth.h
+++ b/source/blender/blenkernel/BKE_cloth.h
@@ -33,24 +33,8 @@
#include <float.h>
-#include "BLI_linklist.h"
-#include "BKE_customdata.h"
-#include "BKE_DerivedMesh.h"
-
-#include "BLI_blenlib.h"
-#include "BLI_math.h"
-#include "BLI_edgehash.h"
-
-#include "DNA_cloth_types.h"
-#include "DNA_customdata_types.h"
-#include "DNA_meshdata_types.h"
-#include "DNA_modifier_types.h"
-#include "DNA_object_types.h"
-#include "DNA_scene_types.h"
-
-#include "BKE_collision.h"
-
struct Object;
+struct ListBase;
struct Scene;
struct MFace;
struct DerivedMesh;
@@ -210,7 +194,7 @@ typedef enum
////////////////////////////////////////////////
// needed for implicit.c
-int cloth_bvh_objcollision (Object *ob, ClothModifierData * clmd, float step, float dt );
+int cloth_bvh_objcollision (struct Object *ob, struct ClothModifierData * clmd, float step, float dt );
////////////////////////////////////////////////
@@ -220,10 +204,10 @@ int cloth_bvh_objcollision (Object *ob, ClothModifierData * clmd, float step, fl
////////////////////////////////////////////////
// needed for cloth.c
-int implicit_init ( Object *ob, ClothModifierData *clmd );
-int implicit_free ( ClothModifierData *clmd );
-int implicit_solver ( Object *ob, float frame, ClothModifierData *clmd, ListBase *effectors );
-void implicit_set_positions ( ClothModifierData *clmd );
+int implicit_init ( struct Object *ob, struct ClothModifierData *clmd );
+int implicit_free ( struct ClothModifierData *clmd );
+int implicit_solver ( struct Object *ob, float frame, struct ClothModifierData *clmd, struct ListBase *effectors );
+void implicit_set_positions ( struct ClothModifierData *clmd );
// globally needed
void clmdSetInterruptCallBack ( int ( *f ) ( void ) );
@@ -235,23 +219,23 @@ void clmdSetInterruptCallBack ( int ( *f ) ( void ) );
////////////////////////////////////////////////
// needed for modifier.c
-void cloth_free_modifier_extern ( ClothModifierData *clmd );
-void cloth_free_modifier ( Object *ob, ClothModifierData *clmd );
-void cloth_init ( ClothModifierData *clmd );
-DerivedMesh *clothModifier_do ( ClothModifierData *clmd, struct Scene *scene, Object *ob, DerivedMesh *dm, int useRenderParams, int isFinalCalc );
+void cloth_free_modifier_extern ( struct ClothModifierData *clmd );
+void cloth_free_modifier ( struct Object *ob, struct ClothModifierData *clmd );
+void cloth_init ( struct ClothModifierData *clmd );
+struct DerivedMesh *clothModifier_do ( struct ClothModifierData *clmd, struct Scene *scene, struct Object *ob, struct DerivedMesh *dm, int useRenderParams, int isFinalCalc );
-void cloth_update_normals ( ClothVertex *verts, int nVerts, MFace *face, int totface );
-int cloth_uses_vgroup(ClothModifierData *clmd);
+void cloth_update_normals ( ClothVertex *verts, int nVerts, struct MFace *face, int totface );
+int cloth_uses_vgroup(struct ClothModifierData *clmd);
// needed for collision.c
-void bvhtree_update_from_cloth ( ClothModifierData *clmd, int moving );
-void bvhselftree_update_from_cloth ( ClothModifierData *clmd, int moving );
+void bvhtree_update_from_cloth ( struct ClothModifierData *clmd, int moving );
+void bvhselftree_update_from_cloth ( struct ClothModifierData *clmd, int moving );
// needed for button_object.c
-void cloth_clear_cache ( Object *ob, ClothModifierData *clmd, float framenr );
+void cloth_clear_cache ( struct Object *ob, struct ClothModifierData *clmd, float framenr );
// needed for cloth.c
-int cloth_add_spring ( ClothModifierData *clmd, unsigned int indexA, unsigned int indexB, float restlength, int spring_type);
+int cloth_add_spring ( struct ClothModifierData *clmd, unsigned int indexA, unsigned int indexB, float restlength, int spring_type);
////////////////////////////////////////////////
@@ -270,9 +254,9 @@ typedef struct
{
char *name;
CM_SOLVER_ID id;
- int ( *init ) ( Object *ob, ClothModifierData *clmd );
- int ( *solver ) ( Object *ob, float framenr, ClothModifierData *clmd, ListBase *effectors );
- int ( *free ) ( ClothModifierData *clmd );
+ int ( *init ) ( struct Object *ob, struct ClothModifierData *clmd );
+ int ( *solver ) ( struct Object *ob, float framenr, struct ClothModifierData *clmd, struct ListBase *effectors );
+ int ( *free ) ( struct ClothModifierData *clmd );
}
CM_SOLVER_DEF;
diff --git a/source/blender/blenkernel/BKE_collision.h b/source/blender/blenkernel/BKE_collision.h
index 91c5eb4afee..d7ae7df9342 100644
--- a/source/blender/blenkernel/BKE_collision.h
+++ b/source/blender/blenkernel/BKE_collision.h
@@ -37,25 +37,21 @@
#include <string.h>
/* types */
-#include "BLI_linklist.h"
#include "BKE_collision.h"
-#include "BKE_customdata.h"
-#include "BKE_DerivedMesh.h"
#include "DNA_cloth_types.h"
-#include "DNA_customdata_types.h"
-#include "DNA_meshdata_types.h"
-#include "DNA_modifier_types.h"
-#include "DNA_object_types.h"
#include "BLI_kdopbvh.h"
struct Cloth;
struct ClothModifierData;
+struct CollisionModifierData;
struct DerivedMesh;
struct Group;
struct MFace;
+struct MVert;
struct Object;
struct Scene;
+struct LinkNode;
////////////////////////////////////////
// used for collisions in collision.c
@@ -122,16 +118,16 @@ FaceCollPair;
// used in modifier.c from collision.c
/////////////////////////////////////////////////
-BVHTree *bvhtree_build_from_mvert ( MFace *mfaces, unsigned int numfaces, MVert *x, unsigned int numverts, float epsilon );
-void bvhtree_update_from_mvert ( BVHTree * bvhtree, MFace *faces, int numfaces, MVert *x, MVert *xnew, int numverts, int moving );
+BVHTree *bvhtree_build_from_mvert ( struct MFace *mfaces, unsigned int numfaces, struct MVert *x, unsigned int numverts, float epsilon );
+void bvhtree_update_from_mvert ( BVHTree * bvhtree, struct MFace *faces, int numfaces, struct MVert *x, struct MVert *xnew, int numverts, int moving );
/////////////////////////////////////////////////
-LinkNode *BLI_linklist_append_fast ( LinkNode **listp, void *ptr );
+struct LinkNode *BLI_linklist_append_fast ( struct LinkNode **listp, void *ptr );
// move Collision modifier object inter-frame with step = [0,1]
// defined in collisions.c
-void collision_move_object ( CollisionModifierData *collmd, float step, float prevstep );
+void collision_move_object ( struct CollisionModifierData *collmd, float step, float prevstep );
// interface for collision functions
void collisions_compute_barycentric ( float pv[3], float p1[3], float p2[3], float p3[3], float *w1, float *w2, float *w3 );
diff --git a/source/blender/blenkernel/BKE_colortools.h b/source/blender/blenkernel/BKE_colortools.h
index 1f2dee6dcfc..e0ebedb320b 100644
--- a/source/blender/blenkernel/BKE_colortools.h
+++ b/source/blender/blenkernel/BKE_colortools.h
@@ -53,9 +53,11 @@ void curvemapping_free(struct CurveMapping *cumap);
struct CurveMapping *curvemapping_copy(struct CurveMapping *cumap);
void curvemapping_set_black_white(struct CurveMapping *cumap, float *black, float *white);
+#define CURVEMAP_SLOPE_NEGATIVE 0
+#define CURVEMAP_SLOPE_POSITIVE 1
+void curvemap_reset(struct CurveMap *cuma, struct rctf *clipr, int preset, int slope);
void curvemap_remove(struct CurveMap *cuma, int flag);
void curvemap_insert(struct CurveMap *cuma, float x, float y);
-void curvemap_reset(struct CurveMap *cuma, struct rctf *clipr, int preset);
void curvemap_sethandle(struct CurveMap *cuma, int type);
void curvemapping_changed(struct CurveMapping *cumap, int rem_doubles);
diff --git a/source/blender/blenkernel/BKE_curve.h b/source/blender/blenkernel/BKE_curve.h
index ca45c2f318c..db6d995aa74 100644
--- a/source/blender/blenkernel/BKE_curve.h
+++ b/source/blender/blenkernel/BKE_curve.h
@@ -40,15 +40,15 @@ struct ListBase;
struct BezTriple;
struct BevList;
-#define KNOTSU(nu) ( (nu)->orderu+ (nu)->pntsu+ (((nu)->flagu & CU_NURB_CYCLIC) ? (nu->orderu-1) : 0) )
-#define KNOTSV(nu) ( (nu)->orderv+ (nu)->pntsv+ (((nu)->flagv & CU_NURB_CYCLIC) ? (nu->orderv-1) : 0) )
+#define KNOTSU(nu) ( (nu)->orderu+ (nu)->pntsu+ (((nu)->flagu & CU_NURB_CYCLIC) ? ((nu)->orderu-1) : 0) )
+#define KNOTSV(nu) ( (nu)->orderv+ (nu)->pntsv+ (((nu)->flagv & CU_NURB_CYCLIC) ? ((nu)->orderv-1) : 0) )
/* Non cyclic nurbs have 1 less segment */
#define SEGMENTSU(nu) ( ((nu)->flagu & CU_NURB_CYCLIC) ? (nu)->pntsu : (nu)->pntsu-1 )
#define SEGMENTSV(nu) ( ((nu)->flagv & CU_NURB_CYCLIC) ? (nu)->pntsv : (nu)->pntsv-1 )
#define CU_DO_TILT(cu, nu) (((nu->flag & CU_2D) && (cu->flag & CU_3D)==0) ? 0 : 1)
-#define CU_DO_RADIUS(cu, nu) ((CU_DO_TILT(cu, nu) || cu->bevobj || cu->ext1!=0.0 || cu->ext2!=0.0) ? 1:0)
+#define CU_DO_RADIUS(cu, nu) ((CU_DO_TILT(cu, nu) || ((cu)->flag & CU_PATH_RADIUS) || (cu)->bevobj || (cu)->ext1!=0.0 || (cu)->ext2!=0.0) ? 1:0)
void unlink_curve( struct Curve *cu);
@@ -105,5 +105,11 @@ int check_valid_nurb_v( struct Nurb *nu);
int clamp_nurb_order_u( struct Nurb *nu);
int clamp_nurb_order_v( struct Nurb *nu);
+ListBase *BKE_curve_nurbs(struct Curve *cu);
+
+int minmax_curve(struct Curve *cu, float min[3], float max[3]);
+int curve_center_median(struct Curve *cu, float cent[3]);
+int curve_center_bounds(struct Curve *cu, float cent[3]);
+void curve_translate(struct Curve *cu, float offset[3], int do_keys);
#endif
diff --git a/source/blender/blenkernel/BKE_deform.h b/source/blender/blenkernel/BKE_deform.h
index 702cb100e18..53f474aa972 100644
--- a/source/blender/blenkernel/BKE_deform.h
+++ b/source/blender/blenkernel/BKE_deform.h
@@ -42,7 +42,7 @@ struct MDeformVert;
void defgroup_copy_list(struct ListBase *lb1, struct ListBase *lb2);
struct bDeformGroup *defgroup_duplicate(struct bDeformGroup *ingroup);
-struct bDeformGroup *defgroup_find_name(struct Object *ob, char *name);
+struct bDeformGroup *defgroup_find_name(struct Object *ob, const char *name);
int defgroup_find_index(struct Object *ob, struct bDeformGroup *dg);
int *defgroup_flip_map(struct Object *ob, int use_default);
int defgroup_flip_index(struct Object *ob, int index, int use_default);
diff --git a/source/blender/blenkernel/BKE_depsgraph.h b/source/blender/blenkernel/BKE_depsgraph.h
index 6a44051806e..0b78a1206fe 100644
--- a/source/blender/blenkernel/BKE_depsgraph.h
+++ b/source/blender/blenkernel/BKE_depsgraph.h
@@ -70,7 +70,7 @@ int queue_count(struct DagNodeQueue *queue);
void queue_delete(struct DagNodeQueue *queue);
// queries
-struct DagForest *build_dag(struct Scene *sce, short mask);
+struct DagForest *build_dag(struct Main *bmain, struct Scene *sce, short mask);
void free_forest(struct DagForest *Dag);
// note :
@@ -97,14 +97,14 @@ void draw_all_deps(void);
/* Note that the DAG never executes changes in Objects, only sets flags in Objects */
/* (re)-create dependency graph for scene */
-void DAG_scene_sort(struct Scene *sce);
+void DAG_scene_sort(struct Main *bmain, struct Scene *sce);
/* flag all objects that need recalc because they're animated */
-void DAG_scene_update_flags(struct Scene *sce, unsigned int lay);
+void DAG_scene_update_flags(struct Main *bmain, struct Scene *sce, unsigned int lay);
/* flushes all recalc flags in objects down the dependency tree */
-void DAG_scene_flush_update(struct Scene *sce, unsigned int lay, int time);
+void DAG_scene_flush_update(struct Main *bmain, struct Scene *sce, unsigned int lay, int time);
/* tag objects for update on file load */
-void DAG_on_load_update(void);
+void DAG_on_load_update(struct Main *bmain);
/* flag all IDs that need recalc because they're animated, influencing
this ID only. only for objects currently */
@@ -113,7 +113,7 @@ void DAG_id_update_flags(struct ID *id);
but note the DAG only supports objects and object data currently */
void DAG_id_flush_update(struct ID *id, short flag);
/* when setting manual RECALC flags, call this afterwards */
-void DAG_ids_flush_update(int time);
+void DAG_ids_flush_update(struct Main *bmain, int time);
/* (re)-create dependency graph for armature pose */
void DAG_pose_sort(struct Object *ob);
diff --git a/source/blender/blenkernel/BKE_displist.h b/source/blender/blenkernel/BKE_displist.h
index df0627f61ba..01d3de1b94f 100644
--- a/source/blender/blenkernel/BKE_displist.h
+++ b/source/blender/blenkernel/BKE_displist.h
@@ -83,7 +83,7 @@ extern void copy_displist(struct ListBase *lbn, struct ListBase *lb);
extern void free_disp_elem(DispList *dl);
extern DispList *find_displist_create(struct ListBase *lb, int type);
extern DispList *find_displist(struct ListBase *lb, int type);
-extern void addnormalsDispList(struct Object *ob, struct ListBase *lb);
+extern void addnormalsDispList(struct ListBase *lb);
extern void count_displist(struct ListBase *lb, int *totvert, int *totface);
extern void freedisplist(struct ListBase *lb);
extern int displist_has_faces(struct ListBase *lb);
diff --git a/source/blender/blenkernel/BKE_effect.h b/source/blender/blenkernel/BKE_effect.h
index 837fede3c8a..99f55200eac 100644
--- a/source/blender/blenkernel/BKE_effect.h
+++ b/source/blender/blenkernel/BKE_effect.h
@@ -31,7 +31,6 @@
#ifndef BKE_EFFECT_H
#define BKE_EFFECT_H
-#include "DNA_object_types.h"
#include "DNA_modifier_types.h"
struct Object;
diff --git a/source/blender/blenkernel/BKE_fcurve.h b/source/blender/blenkernel/BKE_fcurve.h
index 835e2ed80c8..6de0c55af3b 100644
--- a/source/blender/blenkernel/BKE_fcurve.h
+++ b/source/blender/blenkernel/BKE_fcurve.h
@@ -143,7 +143,7 @@ typedef enum eFMI_Action_Types {
typedef enum eFMI_Requirement_Flags {
/* modifier requires original data-points (kindof beats the purpose of a modifier stack?) */
FMI_REQUIRES_ORIGINAL_DATA = (1<<0),
- /* modifier doesn't require on any preceeding data (i.e. it will generate a curve).
+ /* modifier doesn't require on any preceding data (i.e. it will generate a curve).
* Use in conjunction with FMI_TYPE_GENRATE_CURVE
*/
FMI_REQUIRES_NOTHING = (1<<1),
diff --git a/source/blender/blenkernel/BKE_image.h b/source/blender/blenkernel/BKE_image.h
index d7eb5fe8246..c842efaa3b2 100644
--- a/source/blender/blenkernel/BKE_image.h
+++ b/source/blender/blenkernel/BKE_image.h
@@ -159,7 +159,7 @@ void BKE_image_memorypack(struct Image *ima);
void BKE_image_print_memlist(void);
/* empty image block, of similar type and filename */
-struct Image *BKE_image_copy(struct Image *ima);
+struct Image *copy_image(struct Image *ima);
/* merge source into dest, and free source */
void BKE_image_merge(struct Image *dest, struct Image *source);
diff --git a/source/blender/blenkernel/BKE_library.h b/source/blender/blenkernel/BKE_library.h
index cb61a08f3ba..e25c379ded1 100644
--- a/source/blender/blenkernel/BKE_library.h
+++ b/source/blender/blenkernel/BKE_library.h
@@ -55,7 +55,7 @@ int new_id(struct ListBase *lb, struct ID *id, const char *name);
struct ListBase *which_libbase(struct Main *mainlib, short type);
-#define MAX_LIBARRAY 40
+#define MAX_LIBARRAY 39
int set_listbasepointers(struct Main *main, struct ListBase **lb);
void free_libblock(struct ListBase *lb, void *idv);
@@ -63,8 +63,9 @@ void free_libblock_us(struct ListBase *lb, void *idv);
void free_main(struct Main *mainvar);
void tag_main(struct Main *mainvar, int tag);
-void splitIDname(char *name, char *left, int *nr);
+int splitIDname(char *name, char *left, int *nr);
void rename_id(struct ID *id, char *name);
+void name_uiprefix_id(char *name, struct ID *id);
void test_idbutton(char *name);
void text_idbutton(struct ID *id, char *text);
void all_local(struct Library *lib, int untagged_only);
@@ -85,4 +86,3 @@ void set_free_windowmanager_cb(void (*func)(struct bContext *, struct wmWindowMa
#define ID_FALLBACK_NAME "Untitled"
#endif
-
diff --git a/source/blender/blenkernel/BKE_main.h b/source/blender/blenkernel/BKE_main.h
index d4d76b2e6e1..60c2d51571f 100644
--- a/source/blender/blenkernel/BKE_main.h
+++ b/source/blender/blenkernel/BKE_main.h
@@ -58,7 +58,6 @@ typedef struct Main {
ListBase mat;
ListBase tex;
ListBase image;
- ListBase wave;
ListBase latt;
ListBase lamp;
ListBase camera;
diff --git a/source/blender/blenkernel/BKE_material.h b/source/blender/blenkernel/BKE_material.h
index 07ca5a1c0ee..a220153523e 100644
--- a/source/blender/blenkernel/BKE_material.h
+++ b/source/blender/blenkernel/BKE_material.h
@@ -35,6 +35,7 @@
extern "C" {
#endif
+struct Main;
struct Material;
struct ID;
struct Object;
@@ -69,9 +70,9 @@ int object_remove_material_slot(struct Object *ob);
/* rendering */
void init_render_material(struct Material *, int, float *);
-void init_render_materials(int, float *);
+void init_render_materials(struct Main *, int, float *);
void end_render_material(struct Material *);
-void end_render_materials(void);
+void end_render_materials(struct Main *);
int material_in_material(struct Material *parmat, struct Material *mat);
diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h
index 20291611986..c51ba36c93c 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -36,14 +36,16 @@
struct BoundBox;
struct DispList;
struct ListBase;
-struct EditMesh;
-struct MDeformVert;
+struct BMEditMesh;
+struct BMesh;
struct Mesh;
+struct MPoly;
+struct MLoop;
struct MFace;
struct MEdge;
struct MVert;
+struct MDeformVert;
struct MCol;
-struct BMesh;
struct Object;
struct MTFace;
struct VecNor;
@@ -168,6 +170,13 @@ int mesh_layers_menu_charlen(struct CustomData *data, int type); /* use this to
void mesh_layers_menu_concat(struct CustomData *data, int type, char *str);
int mesh_layers_menu(struct CustomData *data, int type);
+/* vertex level transformations & checks (no derived mesh) */
+
+int minmax_mesh(struct Mesh *me, float min[3], float max[3]);
+int mesh_center_median(struct Mesh *me, float cent[3]);
+int mesh_center_bounds(struct Mesh *me, float cent[3]);
+void mesh_translate(struct Mesh *me, float offset[3], int do_keys);
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index 4c7dcff0cd2..4bd4cc3792f 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -36,24 +36,26 @@
/* not very important, but the stack solver likes to know a maximum */
#define MAX_SOCKET 64
-struct ID;
-struct bNodeTree;
+struct bContext;
struct bNode;
struct bNodeLink;
struct bNodeSocket;
struct bNodeStack;
-struct uiLayout;
-struct rctf;
-struct ListBase;
-struct RenderData;
-struct Scene;
-struct Main;
-struct Tex;
+struct bNodeTree;
struct GPUMaterial;
struct GPUNode;
struct GPUNodeStack;
+struct ID;
+struct ListBase;
+struct Main;
+struct MTex;
struct PointerRNA;
-struct bContext;
+struct rctf;
+struct RenderData;
+struct Scene;
+struct Tex;
+struct uiLayout;
+
/* ************** NODE TYPE DEFINITIONS ***** */
@@ -134,6 +136,7 @@ void ntreeMakeOwnType(struct bNodeTree *ntree);
void ntreeUpdateType(struct bNodeTree *ntree, struct bNodeType *ntype);
void ntreeFreeTree(struct bNodeTree *ntree);
struct bNodeTree *ntreeCopyTree(struct bNodeTree *ntree, int internal_select);
+void ntreeSwitchID(struct bNodeTree *ntree, struct ID *sce_from, struct ID *sce_to);
void ntreeMakeLocal(struct bNodeTree *ntree);
void ntreeSocketUseFlags(struct bNodeTree *ntree);
diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index 07c3da48792..2a7ba4f98c9 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -83,7 +83,6 @@ struct Lamp *copy_lamp(struct Lamp *la);
void make_local_lamp(struct Lamp *la);
void free_camera(struct Camera *ca);
void free_lamp(struct Lamp *la);
-void *add_wave(void);
struct Object *add_only_object(int type, char *name);
struct Object *add_object(struct Scene *scene, int type);
diff --git a/source/blender/blenkernel/BKE_paint.h b/source/blender/blenkernel/BKE_paint.h
index 91fa664bde5..e2d48baba37 100644
--- a/source/blender/blenkernel/BKE_paint.h
+++ b/source/blender/blenkernel/BKE_paint.h
@@ -47,13 +47,11 @@ extern const char PAINT_CURSOR_TEXTURE_PAINT[3];
void paint_init(struct Paint *p, const char col[3]);
void free_paint(struct Paint *p);
-void copy_paint(struct Paint *orig, struct Paint *new);
+void copy_paint(struct Paint *src, struct Paint *tar);
struct Paint *paint_get_active(struct Scene *sce);
struct Brush *paint_brush(struct Paint *paint);
void paint_brush_set(struct Paint *paint, struct Brush *br);
-void paint_brush_slot_add(struct Paint *p);
-void paint_brush_slot_remove(struct Paint *p);
/* testing face select mode
* Texture paint could be removed since selected faces are not used
diff --git a/source/blender/blenkernel/BKE_particle.h b/source/blender/blenkernel/BKE_particle.h
index 33a41821fe2..fcef00ae9b3 100644
--- a/source/blender/blenkernel/BKE_particle.h
+++ b/source/blender/blenkernel/BKE_particle.h
@@ -255,11 +255,9 @@ void psys_threads_free(ParticleThread *threads);
void psys_make_billboard(ParticleBillboardData *bb, float xvec[3], float yvec[3], float zvec[3], float center[3]);
/* particle_system.c */
-void psys_update_path_cache(struct ParticleSimulationData *sim, float cfra);
struct ParticleSystem *psys_get_target_system(struct Object *ob, struct ParticleTarget *pt);
void psys_count_keyed_targets(struct ParticleSimulationData *sim);
void psys_update_particle_tree(struct ParticleSystem *psys, float cfra);
-void psys_update_children(struct ParticleSimulationData *sim);
void psys_make_temp_pointcache(struct Object *ob, struct ParticleSystem *psys);
void psys_get_pointcache_start_end(struct Scene *scene, ParticleSystem *psys, int *sfra, int *efra);
diff --git a/source/blender/blenkernel/BKE_pointcache.h b/source/blender/blenkernel/BKE_pointcache.h
index 03a86b6566a..52536e10e56 100644
--- a/source/blender/blenkernel/BKE_pointcache.h
+++ b/source/blender/blenkernel/BKE_pointcache.h
@@ -33,8 +33,6 @@
#include "DNA_object_force.h"
#include "DNA_boid_types.h"
-#include "MEM_guardedalloc.h"
-
/* Point cache clearing option, for BKE_ptcache_id_clear, before
* and after are non inclusive (they wont remove the cfra) */
#define PTCACHE_CLEAR_ALL 0
@@ -70,15 +68,16 @@
#define PTCACHE_READ_OLD 3
/* Structs */
+struct ClothModifierData;
+struct ListBase;
+struct Main;
struct Object;
-struct Scene;
-struct SoftBody;
-struct ParticleSystem;
struct ParticleKey;
-struct ClothModifierData;
-struct SmokeModifierData;
+struct ParticleSystem;
struct PointCache;
-struct ListBase;
+struct Scene;
+struct SmokeModifierData;
+struct SoftBody;
/* temp structure for read/write */
typedef struct PTCacheData {
@@ -143,6 +142,7 @@ typedef struct PTCacheID {
} PTCacheID;
typedef struct PTCacheBaker {
+ struct Main *main;
struct Scene *scene;
int bake;
int render;
@@ -273,7 +273,7 @@ int BKE_ptcache_read_cache(PTCacheID *pid, float cfra, float frs_sec);
int BKE_ptcache_write_cache(PTCacheID *pid, int cfra);
/****************** Continue physics ***************/
-void BKE_ptcache_set_continue_physics(struct Scene *scene, int enable);
+void BKE_ptcache_set_continue_physics(struct Main *bmain, struct Scene *scene, int enable);
int BKE_ptcache_get_continue_physics(void);
/******************* Allocate & free ***************/
@@ -286,7 +286,7 @@ struct PointCache *BKE_ptcache_copy_list(struct ListBase *ptcaches_new, struct L
/********************** Baking *********************/
/* Bakes cache with cache_step sized jumps in time, not accurate but very fast. */
-void BKE_ptcache_quick_cache_all(struct Scene *scene);
+void BKE_ptcache_quick_cache_all(struct Main *bmain, struct Scene *scene);
/* Bake cache or simulate to current frame with settings defined in the baker. */
void BKE_ptcache_make_cache(struct PTCacheBaker* baker);
diff --git a/source/blender/blenkernel/BKE_sca.h b/source/blender/blenkernel/BKE_sca.h
index 7adbfd9b48d..6cafb7ef104 100644
--- a/source/blender/blenkernel/BKE_sca.h
+++ b/source/blender/blenkernel/BKE_sca.h
@@ -70,9 +70,9 @@ void set_sca_new_poins_ob(struct Object *ob);
void set_sca_new_poins(void);
void sca_remove_ob_poin(struct Object *obt, struct Object *ob);
-void sca_move_sensor(struct bSensor *sens_to_move, Object *ob, int move_up);
-void sca_move_controller(struct bController *cont_to_move, Object *ob, int move_up);
-void sca_move_actuator(struct bActuator *act_to_move, Object *ob, int move_up);
+void sca_move_sensor(struct bSensor *sens_to_move, struct Object *ob, int move_up);
+void sca_move_controller(struct bController *cont_to_move, struct Object *ob, int move_up);
+void sca_move_actuator(struct bActuator *act_to_move, struct Object *ob, int move_up);
#endif
diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h
index f0fb2a65673..96ef8d44cf4 100644
--- a/source/blender/blenkernel/BKE_scene.h
+++ b/source/blender/blenkernel/BKE_scene.h
@@ -31,16 +31,16 @@
#ifndef BKE_SCENE_H
#define BKE_SCENE_H
+struct AviCodecData;
+struct Base;
struct bglMats;
-struct Scene;
+struct Main;
struct Object;
-struct Base;
-struct Text;
-struct AviCodecData;
struct QuicktimeCodecData;
struct RenderData;
+struct Scene;
+struct Text;
struct Text;
-struct Main;
#define SCE_COPY_EMPTY 0
#define SCE_COPY_LINK_OB 1
@@ -57,8 +57,8 @@ void free_scene(struct Scene *sce);
struct Scene *add_scene(char *name);
struct Base *object_in_scene(struct Object *ob, struct Scene *sce);
-void set_scene_bg(struct Scene *sce);
-struct Scene *set_scene_name(char *name);
+void set_scene_bg(struct Main *bmain, struct Scene *sce);
+struct Scene *set_scene_name(struct Main *bmain, char *name);
struct Scene *copy_scene(struct Main *bmain, struct Scene *sce, int type);
void unlink_scene(struct Main *bmain, struct Scene *sce, struct Scene *newsce);
@@ -78,12 +78,12 @@ void scene_deselect_all(struct Scene *sce);
void scene_select_base(struct Scene *sce, struct Base *selbase);
/* checks for cycle, returns 1 if it's all OK */
-int scene_check_setscene(struct Scene *sce);
+int scene_check_setscene(struct Main *bmain, struct Scene *sce);
float BKE_curframe(struct Scene *scene);
-void scene_update_tagged(struct Scene *sce);
-void scene_update_for_newframe(struct Scene *sce, unsigned int lay);
+void scene_update_tagged(struct Main *bmain, struct Scene *sce);
+void scene_update_for_newframe(struct Main *bmain, struct Scene *sce, unsigned int lay);
void scene_add_render_layer(struct Scene *sce);
diff --git a/source/blender/blenkernel/BKE_sequencer.h b/source/blender/blenkernel/BKE_sequencer.h
index 002a1958a13..a9fb45c6e14 100644
--- a/source/blender/blenkernel/BKE_sequencer.h
+++ b/source/blender/blenkernel/BKE_sequencer.h
@@ -31,13 +31,14 @@
#ifndef BKE_SEQUENCER_H
#define BKE_SEQUENCER_H
+struct bContext;
struct Editing;
+struct ImBuf;
+struct Main;
+struct Scene;
struct Sequence;
struct Strip;
struct StripElem;
-struct ImBuf;
-struct Scene;
-struct bContext;
#define MAXSEQ 32
@@ -107,15 +108,14 @@ struct SeqEffectHandle {
0: no early out,
1: out = ibuf1,
2: out = ibuf2 */
- int (*early_out)(struct Sequence *seq,
- float facf0, float facf1);
+ int (*early_out)(struct Sequence *seq, float facf0, float facf1);
/* stores the y-range of the effect IPO */
void (*store_icu_yrange)(struct Sequence * seq,
short adrcode, float *ymin, float *ymax);
/* stores the default facf0 and facf1 if no IPO is present */
- void (*get_default_fac)(struct Sequence *seq, int cfra,
+ void (*get_default_fac)(struct Sequence *seq, float cfra,
float * facf0, float * facf1);
/* execute the effect
@@ -123,11 +123,13 @@ struct SeqEffectHandle {
float-rects or byte-rects
(mixed cases are handled one layer up...) */
- void (*execute)(struct Scene *scene, struct Sequence *seq, int cfra,
- float facf0, float facf1,
- int x, int y, int preview_render_size,
- struct ImBuf *ibuf1, struct ImBuf *ibuf2,
- struct ImBuf *ibuf3, struct ImBuf *out);
+ struct ImBuf* (*execute)(
+ struct Main *bmain,
+ struct Scene *scene, struct Sequence *seq, float cfra,
+ float facf0, float facf1,
+ int x, int y, int preview_render_size,
+ struct ImBuf *ibuf1, struct ImBuf *ibuf2,
+ struct ImBuf *ibuf3);
};
/* ********************* prototypes *************** */
@@ -146,15 +148,15 @@ void seq_free_editing(struct Scene *scene);
void seq_free_clipboard(void);
struct Editing *seq_give_editing(struct Scene *scene, int alloc);
char *give_seqname(struct Sequence *seq);
-struct ImBuf *give_ibuf_seq(struct Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size);
-struct ImBuf *give_ibuf_seq_threaded(struct Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size);
-struct ImBuf *give_ibuf_seq_direct(struct Scene *scene, int rectx, int recty, int cfra, int render_size, struct Sequence *seq);
-struct ImBuf *give_ibuf_seqbase(struct Scene *scene, int rectx, int recty, int cfra, int chan_shown, int render_size, struct ListBase *seqbasep);
+struct ImBuf *give_ibuf_seq(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size);
+struct ImBuf *give_ibuf_seq_threaded(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size);
+struct ImBuf *give_ibuf_seq_direct(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int render_size, struct Sequence *seq);
+struct ImBuf *give_ibuf_seqbase(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int chan_shown, int render_size, struct ListBase *seqbasep);
void give_ibuf_prefetch_request(int rectx, int recty, int cfra, int chanshown, int render_size);
void calc_sequence(struct Scene *scene, struct Sequence *seq);
void calc_sequence_disp(struct Scene *scene, struct Sequence *seq);
void new_tstripdata(struct Sequence *seq);
-void reload_sequence_new_file(struct Scene *scene, struct Sequence * seq, int lock_range);
+void reload_sequence_new_file(struct Main *bmain, struct Scene *scene, struct Sequence * seq, int lock_range);
void sort_seq(struct Scene *scene);
void build_seqar_cb(struct ListBase *seqbase, struct Sequence ***seqar, int *totseq,
int (*test_func)(struct Sequence * seq));
@@ -164,6 +166,32 @@ struct StripElem *give_stripelem(struct Sequence *seq, int cfra);
// intern?
void update_changed_seq_and_deps(struct Scene *scene, struct Sequence *changed_seq, int len_change, int ibuf_change);
+int input_have_to_preprocess(
+ struct Scene *scene, struct Sequence * seq,
+ float cfra, int seqrectx, int seqrecty);
+
+/* seqcache.c */
+
+typedef enum {
+ SEQ_STRIPELEM_IBUF,
+ SEQ_STRIPELEM_IBUF_COMP,
+ SEQ_STRIPELEM_IBUF_STARTSTILL,
+ SEQ_STRIPELEM_IBUF_ENDSTILL
+} seq_stripelem_ibuf_t;
+
+void seq_stripelem_cache_init();
+void seq_stripelem_cache_destruct();
+
+void seq_stripelem_cache_cleanup();
+
+struct ImBuf * seq_stripelem_cache_get(
+ struct Sequence * seq, int rectx, int recty,
+ float cfra, seq_stripelem_ibuf_t type);
+void seq_stripelem_cache_put(
+ struct Sequence * seq, int rectx, int recty,
+ float cfra, seq_stripelem_ibuf_t type, struct ImBuf * nval);
+
+
/* seqeffects.c */
// intern?
struct SeqEffectHandle get_sequence_blend(struct Sequence *seq);
@@ -191,17 +219,17 @@ void seq_dupe_animdata(struct Scene *scene, char *name_from, char *name_to);
int shuffle_seq(struct ListBase * seqbasep, struct Sequence *test, struct Scene *evil_scene);
int shuffle_seq_time(ListBase * seqbasep, struct Scene *evil_scene);
int seqbase_isolated_sel_check(struct ListBase *seqbase);
-void free_imbuf_seq(struct Scene *scene, struct ListBase * seqbasep, int check_mem_usage);
+void free_imbuf_seq(struct Scene *scene, struct ListBase * seqbasep, int check_mem_usage, int keep_file_handles);
struct Sequence *seq_dupli_recursive(struct Scene *scene, struct Sequence * seq, int dupe_flag);
int seq_swap(struct Sequence *seq_a, struct Sequence *seq_b);
void seq_update_sound(struct Scene* scene, struct Sequence *seq);
void seq_update_muting(struct Scene* scene, struct Editing *ed);
-void seqbase_sound_reload(Scene *scene, ListBase *seqbase);
+void seqbase_sound_reload(struct Scene *scene, ListBase *seqbase);
void seqbase_unique_name_recursive(ListBase *seqbasep, struct Sequence *seq);
void seqbase_dupli_recursive(struct Scene *scene, ListBase *nseqbase, ListBase *seqbase, int dupe_flag);
-void clear_scene_in_allseqs(struct Scene *sce);
+void clear_scene_in_allseqs(struct Main *bmain, struct Scene *sce);
struct Sequence *get_seq_by_name(struct ListBase *seqbase, const char *name, int recursive);
diff --git a/source/blender/blenkernel/BKE_sound.h b/source/blender/blenkernel/BKE_sound.h
index 50c86e80b08..190b0400aff 100644
--- a/source/blender/blenkernel/BKE_sound.h
+++ b/source/blender/blenkernel/BKE_sound.h
@@ -94,6 +94,6 @@ float sound_sync_scene(struct Scene *scene);
int sound_scene_playing(struct Scene *scene);
-int sound_read_sound_buffer(struct bSound* sound, float* buffer, int length);
+int sound_read_sound_buffer(struct bSound* sound, float* buffer, int length, float start, float end);
#endif
diff --git a/source/blender/blenkernel/BKE_text.h b/source/blender/blenkernel/BKE_text.h
index 244fffa06ea..bcda86fdae4 100644
--- a/source/blender/blenkernel/BKE_text.h
+++ b/source/blender/blenkernel/BKE_text.h
@@ -92,7 +92,7 @@ void unindent (struct Text *text);
void comment (struct Text *text);
void indent (struct Text *text);
void uncomment (struct Text *text);
-int setcurr_tab (struct Text *text);
+int setcurr_tab_spaces (struct Text *text, int space);
void txt_add_marker (struct Text *text, struct TextLine *line, int start, int end, char color[4], int group, int flags);
short txt_clear_marker_region (struct Text *text, struct TextLine *line, int start, int end, int group, int flags);
diff --git a/source/blender/blenkernel/BKE_texture.h b/source/blender/blenkernel/BKE_texture.h
index 39c12a2bfd8..380672dae04 100644
--- a/source/blender/blenkernel/BKE_texture.h
+++ b/source/blender/blenkernel/BKE_texture.h
@@ -61,6 +61,9 @@ void init_colorband(struct ColorBand *coba, int rangetype);
struct ColorBand *add_colorband(int rangetype);
int do_colorband(struct ColorBand *coba, float in, float out[4]);
void colorband_table_RGBA(struct ColorBand *coba, float **array, int *size);
+int vergcband(const void *a1, const void *a2);
+struct CBData *colorband_element_add(struct ColorBand *coba, float position);
+int colorband_element_remove(struct ColorBand *coba, int index);
void default_tex(struct Tex *tex);
struct Tex *add_texture(const char *name);
diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt
index 09707ba5c91..b196ddc8509 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -46,21 +46,29 @@ IF(WITH_BULLET)
ADD_DEFINITIONS(-DUSE_BULLET)
ENDIF(WITH_BULLET)
-IF(WITH_OPENEXR)
+IF(WITH_IMAGE_OPENEXR)
ADD_DEFINITIONS(-DWITH_OPENEXR)
-ENDIF(WITH_OPENEXR)
+ENDIF(WITH_IMAGE_OPENEXR)
-IF(WITH_TIFF)
+IF(WITH_IMAGE_TIFF)
ADD_DEFINITIONS(-DWITH_TIFF)
-ENDIF(WITH_TIFF)
+ENDIF(WITH_IMAGE_TIFF)
-IF(WITH_OPENJPEG)
+IF(WITH_IMAGE_OPENJPEG)
ADD_DEFINITIONS(-DWITH_OPENJPEG)
-ENDIF(WITH_OPENJPEG)
+ENDIF(WITH_IMAGE_OPENJPEG)
-IF(WITH_DDS)
+IF(WITH_IMAGE_DDS)
ADD_DEFINITIONS(-DWITH_DDS)
-ENDIF(WITH_DDS)
+ENDIF(WITH_IMAGE_DDS)
+
+IF(WITH_IMAGE_CINEON)
+ ADD_DEFINITIONS(-DWITH_CINEON)
+ENDIF(WITH_IMAGE_CINEON)
+
+IF(WITH_IMAGE_HDR)
+ ADD_DEFINITIONS(-DWITH_HDR)
+ENDIF(WITH_IMAGE_HDR)
IF(WITH_QUICKTIME)
SET(INC ${INC} ../quicktime ${QUICKTIME_INC})
@@ -87,9 +95,9 @@ IF(WITH_OPENMP)
ADD_DEFINITIONS(-DPARALLEL=1)
ENDIF(WITH_OPENMP)
-IF(NOT WITH_ELBEEM)
+IF(NOT WITH_FLUID)
ADD_DEFINITIONS(-DDISABLE_ELBEEM)
-ENDIF(NOT WITH_ELBEEM)
+ENDIF(NOT WITH_FLUID)
IF(WITH_LZO)
SET(INC ${INC} ../../../extern/lzo/minilzo)
diff --git a/source/blender/blenkernel/Makefile b/source/blender/blenkernel/Makefile
index f0476bbf026..dc5f0a91da6 100644
--- a/source/blender/blenkernel/Makefile
+++ b/source/blender/blenkernel/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/blenkernel/SConscript b/source/blender/blenkernel/SConscript
index 88a45ee9302..51c42bf4c7d 100644
--- a/source/blender/blenkernel/SConscript
+++ b/source/blender/blenkernel/SConscript
@@ -48,6 +48,12 @@ if env['WITH_BF_OPENJPEG']:
if env['WITH_BF_DDS']:
defs.append('WITH_DDS')
+if env['WITH_BF_CINEON']:
+ defs.append('WITH_CINEON')
+
+if env['WITH_BF_HDR']:
+ defs.append('WITH_HDR')
+
if env['WITH_BF_FFMPEG']:
defs.append('WITH_FFMPEG')
incs += ' ' + env['BF_FFMPEG_INC']
diff --git a/source/blender/blenkernel/intern/BME_Customdata.c b/source/blender/blenkernel/intern/BME_Customdata.c
index 913225a2f73..139f07c3902 100644
--- a/source/blender/blenkernel/intern/BME_Customdata.c
+++ b/source/blender/blenkernel/intern/BME_Customdata.c
@@ -37,9 +37,9 @@
#include <string.h>
+#include "MEM_guardedalloc.h"
#include "BKE_bmeshCustomData.h"
#include "bmesh_private.h"
-#include "MEM_guardedalloc.h"
/********************* Layer type information **********************/
typedef struct BME_LayerTypeInfo {
diff --git a/source/blender/blenkernel/intern/BME_conversions.c b/source/blender/blenkernel/intern/BME_conversions.c
index aab0c0011a0..439b77db9a6 100644
--- a/source/blender/blenkernel/intern/BME_conversions.c
+++ b/source/blender/blenkernel/intern/BME_conversions.c
@@ -392,9 +392,9 @@ void BME_bmesh_to_editmesh(BME_Mesh *bm, BME_TransData_Head *td, EditMesh *em) {
if(e->flag & SELECT) eed->f |= SELECT;
//XXX if(e->flag & ME_FGON) eed->h= EM_FGON; // 2 different defines!
if(e->flag & ME_HIDE) eed->h |= 1;
- if(em->selectmode==SCE_SELECT_EDGE)
+ if(em->selectmode==SCE_SELECT_EDGE) {
; //XXX EM_select_edge(eed, eed->f & SELECT);
-
+ }
CustomData_em_copy_data(&bm->edata, &em->edata, e->data, &eed->data);
}
}
@@ -532,6 +532,7 @@ DerivedMesh *BME_bmesh_to_derivedmesh(BME_Mesh *bm, DerivedMesh *dm)
MFace *mface, *mf;
MEdge *medge, *me;
MVert *mvert, *mv;
+ int *origindex;
int totface,totedge,totvert,i,bmeshok,len, numTex, numCol;
BME_Vert *v1=NULL;
@@ -579,13 +580,16 @@ DerivedMesh *BME_bmesh_to_derivedmesh(BME_Mesh *bm, DerivedMesh *dm)
/*Make Verts*/
mvert = CDDM_get_verts(result);
+ origindex = result->getVertDataArray(result, CD_ORIGINDEX);
for(i=0,v1=bm->verts.first,mv=mvert;v1;v1=v1->next,i++,mv++){
VECCOPY(mv->co,v1->co);
mv->flag = (unsigned char)v1->flag;
mv->bweight = (char)(255.0*v1->bweight);
CustomData_from_bmesh_block(&bm->vdata, &result->vertData, &v1->data, i);
+ origindex[i] = ORIGINDEX_NONE;
}
medge = CDDM_get_edges(result);
+ origindex = result->getEdgeDataArray(result, CD_ORIGINDEX);
i=0;
for(e=bm->edges.first,me=medge;e;e=e->next){
if(e->tflag2){
@@ -602,12 +606,14 @@ DerivedMesh *BME_bmesh_to_derivedmesh(BME_Mesh *bm, DerivedMesh *dm)
me->bweight = (char)(255.0*e->bweight);
me->flag = e->flag;
CustomData_from_bmesh_block(&bm->edata, &result->edgeData, &e->data, i);
+ origindex[i] = ORIGINDEX_NONE;
me++;
i++;
}
}
if(totface){
mface = CDDM_get_tessfaces(result);
+ origindex = result->getFaceDataArray(result, CD_ORIGINDEX);
/*make faces*/
for(i=0,f=bm->polys.first;f;f=f->next){
mf = &mface[i];
@@ -627,6 +633,7 @@ DerivedMesh *BME_bmesh_to_derivedmesh(BME_Mesh *bm, DerivedMesh *dm)
mf->flag = (unsigned char)f->flag;
CustomData_from_bmesh_block(&bm->pdata, &result->faceData, &f->data, i);
BME_DMloops_to_corners(bm, &result->faceData, i, f,numCol,numTex);
+ origindex[i] = ORIGINDEX_NONE;
i++;
}
}
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index 56b0a3bfb68..950ac6f3f4f 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -652,987 +652,6 @@ static DerivedMesh *getMeshDerivedMesh(Mesh *me, Object *ob, float (*vertCos)[3]
return dm;
}
-///
-
-typedef struct {
- DerivedMesh dm;
-
- EditMesh *em;
- float (*vertexCos)[3];
- float (*vertexNos)[3];
- float (*faceNos)[3];
-} EditMeshDerivedMesh;
-
-static void emDM_foreachMappedVert(void *dm, void (*func)(void *userData, int index, float *co, float *no_f, short *no_s), void *userData)
-{
- EditMeshDerivedMesh *emdm= dm;
- EditVert *eve;
- int i;
-
- for (i=0,eve= emdm->em->verts.first; eve; i++,eve=eve->next) {
- if (emdm->vertexCos) {
- func(userData, i, emdm->vertexCos[i], emdm->vertexNos[i], NULL);
- } else {
- func(userData, i, eve->co, eve->no, NULL);
- }
- }
-}
-static void emDM_foreachMappedEdge(void *dm, void (*func)(void *userData, int index, float *v0co, float *v1co), void *userData)
-{
- EditMeshDerivedMesh *emdm= dm;
- EditEdge *eed;
- int i;
-
- if (emdm->vertexCos) {
- EditVert *eve;
-
- for (i=0,eve=emdm->em->verts.first; eve; eve= eve->next)
- eve->tmp.l = (intptr_t) i++;
- for(i=0,eed= emdm->em->edges.first; eed; i++,eed= eed->next)
- func(userData, i, emdm->vertexCos[(int) eed->v1->tmp.l], emdm->vertexCos[(int) eed->v2->tmp.l]);
- } else {
- for(i=0,eed= emdm->em->edges.first; eed; i++,eed= eed->next)
- func(userData, i, eed->v1->co, eed->v2->co);
- }
-}
-static void emDM_drawMappedEdges(void *dm, int (*setDrawOptions)(void *userData, int index), void *userData)
-{
- EditMeshDerivedMesh *emdm= dm;
- EditEdge *eed;
- int i;
-
- if (emdm->vertexCos) {
- EditVert *eve;
-
- for (i=0,eve=emdm->em->verts.first; eve; eve= eve->next)
- eve->tmp.l = (intptr_t) i++;
-
- glBegin(GL_LINES);
- for(i=0,eed= emdm->em->edges.first; eed; i++,eed= eed->next) {
- if(!setDrawOptions || setDrawOptions(userData, i)) {
- glVertex3fv(emdm->vertexCos[(int) eed->v1->tmp.l]);
- glVertex3fv(emdm->vertexCos[(int) eed->v2->tmp.l]);
- }
- }
- glEnd();
- } else {
- glBegin(GL_LINES);
- for(i=0,eed= emdm->em->edges.first; eed; i++,eed= eed->next) {
- if(!setDrawOptions || setDrawOptions(userData, i)) {
- glVertex3fv(eed->v1->co);
- glVertex3fv(eed->v2->co);
- }
- }
- glEnd();
- }
-}
-static void emDM_drawEdges(DerivedMesh *dm, int drawLooseEdges, int drawAllEdges)
-{
- emDM_drawMappedEdges(dm, NULL, NULL);
-}
-static void emDM_drawMappedEdgesInterp(void *dm, int (*setDrawOptions)(void *userData, int index), void (*setDrawInterpOptions)(void *userData, int index, float t), void *userData)
-{
- EditMeshDerivedMesh *emdm= dm;
- EditEdge *eed;
- int i;
-
- if (emdm->vertexCos) {
- EditVert *eve;
-
- for (i=0,eve=emdm->em->verts.first; eve; eve= eve->next)
- eve->tmp.l = (intptr_t) i++;
-
- glBegin(GL_LINES);
- for (i=0,eed= emdm->em->edges.first; eed; i++,eed= eed->next) {
- if(!setDrawOptions || setDrawOptions(userData, i)) {
- setDrawInterpOptions(userData, i, 0.0);
- glVertex3fv(emdm->vertexCos[(int) eed->v1->tmp.l]);
- setDrawInterpOptions(userData, i, 1.0);
- glVertex3fv(emdm->vertexCos[(int) eed->v2->tmp.l]);
- }
- }
- glEnd();
- } else {
- glBegin(GL_LINES);
- for (i=0,eed= emdm->em->edges.first; eed; i++,eed= eed->next) {
- if(!setDrawOptions || setDrawOptions(userData, i)) {
- setDrawInterpOptions(userData, i, 0.0);
- glVertex3fv(eed->v1->co);
- setDrawInterpOptions(userData, i, 1.0);
- glVertex3fv(eed->v2->co);
- }
- }
- glEnd();
- }
-}
-
-static void emDM_drawUVEdges(void *dm)
-{
- EditMeshDerivedMesh *emdm= dm;
- EditFace *efa;
- MTFace *tf;
-
- glBegin(GL_LINES);
- for(efa= emdm->em->faces.first; efa; efa= efa->next) {
- tf = CustomData_em_get(&emdm->em->fdata, efa->data, CD_MTFACE);
-
- if(tf && !(efa->h)) {
- glVertex2fv(tf->uv[0]);
- glVertex2fv(tf->uv[1]);
-
- glVertex2fv(tf->uv[1]);
- glVertex2fv(tf->uv[2]);
-
- if (!efa->v4) {
- glVertex2fv(tf->uv[2]);
- glVertex2fv(tf->uv[0]);
- } else {
- glVertex2fv(tf->uv[2]);
- glVertex2fv(tf->uv[3]);
- glVertex2fv(tf->uv[3]);
- glVertex2fv(tf->uv[0]);
- }
- }
- }
- glEnd();
-}
-
-static void emDM__calcFaceCent(EditFace *efa, float cent[3], float (*vertexCos)[3])
-{
- if (vertexCos) {
- VECCOPY(cent, vertexCos[(int) efa->v1->tmp.l]);
- add_v3_v3(cent, vertexCos[(int) efa->v2->tmp.l]);
- add_v3_v3(cent, vertexCos[(int) efa->v3->tmp.l]);
- if (efa->v4) add_v3_v3(cent, vertexCos[(int) efa->v4->tmp.l]);
- } else {
- VECCOPY(cent, efa->v1->co);
- add_v3_v3(cent, efa->v2->co);
- add_v3_v3(cent, efa->v3->co);
- if (efa->v4) add_v3_v3(cent, efa->v4->co);
- }
-
- if (efa->v4) {
- mul_v3_fl(cent, 0.25f);
- } else {
- mul_v3_fl(cent, 0.33333333333f);
- }
-}
-static void emDM_foreachMappedFaceCenter(void *dm, void (*func)(void *userData, int index, float *co, float *no), void *userData)
-{
- EditMeshDerivedMesh *emdm= dm;
- EditVert *eve;
- EditFace *efa;
- float cent[3];
- int i;
-
- if (emdm->vertexCos) {
- for (i=0,eve=emdm->em->verts.first; eve; eve= eve->next)
- eve->tmp.l = (intptr_t) i++;
- }
-
- for(i=0,efa= emdm->em->faces.first; efa; i++,efa= efa->next) {
- emDM__calcFaceCent(efa, cent, emdm->vertexCos);
- func(userData, i, cent, emdm->vertexCos?emdm->faceNos[i]:efa->n);
- }
-}
-static void emDM_drawMappedFaces(void *dm, int (*setDrawOptions)(void *userData, int index, int *drawSmooth_r), void *userData, int useColors)
-{
- EditMeshDerivedMesh *emdm= dm;
- EditFace *efa;
- int i, draw;
-
- if (emdm->vertexCos) {
- EditVert *eve;
-
- for (i=0,eve=emdm->em->verts.first; eve; eve= eve->next)
- eve->tmp.l = (intptr_t) i++;
-
- for (i=0,efa= emdm->em->faces.first; efa; i++,efa= efa->next) {
- int drawSmooth = (efa->flag & ME_SMOOTH);
- draw = setDrawOptions==NULL ? 1 : setDrawOptions(userData, i, &drawSmooth);
- if(draw) {
- if (draw==2) { /* enabled with stipple */
- glEnable(GL_POLYGON_STIPPLE);
- glPolygonStipple(stipple_quarttone);
- }
-
- glShadeModel(drawSmooth?GL_SMOOTH:GL_FLAT);
-
- glBegin(efa->v4?GL_QUADS:GL_TRIANGLES);
- if (!drawSmooth) {
- glNormal3fv(emdm->faceNos[i]);
- glVertex3fv(emdm->vertexCos[(int) efa->v1->tmp.l]);
- glVertex3fv(emdm->vertexCos[(int) efa->v2->tmp.l]);
- glVertex3fv(emdm->vertexCos[(int) efa->v3->tmp.l]);
- if(efa->v4) glVertex3fv(emdm->vertexCos[(int) efa->v4->tmp.l]);
- } else {
- glNormal3fv(emdm->vertexNos[(int) efa->v1->tmp.l]);
- glVertex3fv(emdm->vertexCos[(int) efa->v1->tmp.l]);
- glNormal3fv(emdm->vertexNos[(int) efa->v2->tmp.l]);
- glVertex3fv(emdm->vertexCos[(int) efa->v2->tmp.l]);
- glNormal3fv(emdm->vertexNos[(int) efa->v3->tmp.l]);
- glVertex3fv(emdm->vertexCos[(int) efa->v3->tmp.l]);
- if(efa->v4) {
- glNormal3fv(emdm->vertexNos[(int) efa->v4->tmp.l]);
- glVertex3fv(emdm->vertexCos[(int) efa->v4->tmp.l]);
- }
- }
- glEnd();
-
- if (draw==2)
- glDisable(GL_POLYGON_STIPPLE);
- }
- }
- } else {
- for (i=0,efa= emdm->em->faces.first; efa; i++,efa= efa->next) {
- int drawSmooth = (efa->flag & ME_SMOOTH);
- draw = setDrawOptions==NULL ? 1 : setDrawOptions(userData, i, &drawSmooth);
- if(draw) {
- if (draw==2) { /* enabled with stipple */
- glEnable(GL_POLYGON_STIPPLE);
- glPolygonStipple(stipple_quarttone);
- }
- glShadeModel(drawSmooth?GL_SMOOTH:GL_FLAT);
-
- glBegin(efa->v4?GL_QUADS:GL_TRIANGLES);
- if (!drawSmooth) {
- glNormal3fv(efa->n);
- glVertex3fv(efa->v1->co);
- glVertex3fv(efa->v2->co);
- glVertex3fv(efa->v3->co);
- if(efa->v4) glVertex3fv(efa->v4->co);
- } else {
- glNormal3fv(efa->v1->no);
- glVertex3fv(efa->v1->co);
- glNormal3fv(efa->v2->no);
- glVertex3fv(efa->v2->co);
- glNormal3fv(efa->v3->no);
- glVertex3fv(efa->v3->co);
- if(efa->v4) {
- glNormal3fv(efa->v4->no);
- glVertex3fv(efa->v4->co);
- }
- }
- glEnd();
-
- if (draw==2)
- glDisable(GL_POLYGON_STIPPLE);
- }
- }
- }
-}
-
-static void emDM_drawFacesTex_common(void *dm,
- int (*drawParams)(MTFace *tface, MCol *mcol, int matnr),
- int (*drawParamsMapped)(void *userData, int index),
- void *userData)
-{
- EditMeshDerivedMesh *emdm= dm;
- EditMesh *em= emdm->em;
- float (*vertexCos)[3]= emdm->vertexCos;
- float (*vertexNos)[3]= emdm->vertexNos;
- EditFace *efa;
- int i;
-
- /* always use smooth shading even for flat faces, else vertex colors wont interpolate */
- glShadeModel(GL_SMOOTH);
-
- if (vertexCos) {
- EditVert *eve;
-
- for (i=0,eve=em->verts.first; eve; eve= eve->next)
- eve->tmp.l = (intptr_t) i++;
-
- for (i=0,efa= em->faces.first; efa; i++,efa= efa->next) {
- MTFace *tf= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
- MCol *mcol= CustomData_em_get(&em->fdata, efa->data, CD_MCOL);
- unsigned char *cp= NULL;
- int drawSmooth= (efa->flag & ME_SMOOTH);
- int flag;
-
- if(drawParams)
- flag= drawParams(tf, mcol, efa->mat_nr);
- else if(drawParamsMapped)
- flag= drawParamsMapped(userData, i);
- else
- flag= 1;
-
- if(flag != 0) { /* flag 0 == the face is hidden or invisible */
-
- /* we always want smooth here since otherwise vertex colors dont interpolate */
- if (mcol) {
- if (flag==1) {
- cp= (unsigned char*)mcol;
- }
- } else {
- glShadeModel(drawSmooth?GL_SMOOTH:GL_FLAT);
- }
-
- glBegin(efa->v4?GL_QUADS:GL_TRIANGLES);
- if (!drawSmooth) {
- glNormal3fv(emdm->faceNos[i]);
-
- if(tf) glTexCoord2fv(tf->uv[0]);
- if(cp) glColor3ub(cp[3], cp[2], cp[1]);
- glVertex3fv(vertexCos[(int) efa->v1->tmp.l]);
-
- if(tf) glTexCoord2fv(tf->uv[1]);
- if(cp) glColor3ub(cp[7], cp[6], cp[5]);
- glVertex3fv(vertexCos[(int) efa->v2->tmp.l]);
-
- if(tf) glTexCoord2fv(tf->uv[2]);
- if(cp) glColor3ub(cp[11], cp[10], cp[9]);
- glVertex3fv(vertexCos[(int) efa->v3->tmp.l]);
-
- if(efa->v4) {
- if(tf) glTexCoord2fv(tf->uv[3]);
- if(cp) glColor3ub(cp[15], cp[14], cp[13]);
- glVertex3fv(vertexCos[(int) efa->v4->tmp.l]);
- }
- } else {
- if(tf) glTexCoord2fv(tf->uv[0]);
- if(cp) glColor3ub(cp[3], cp[2], cp[1]);
- glNormal3fv(vertexNos[(int) efa->v1->tmp.l]);
- glVertex3fv(vertexCos[(int) efa->v1->tmp.l]);
-
- if(tf) glTexCoord2fv(tf->uv[1]);
- if(cp) glColor3ub(cp[7], cp[6], cp[5]);
- glNormal3fv(vertexNos[(int) efa->v2->tmp.l]);
- glVertex3fv(vertexCos[(int) efa->v2->tmp.l]);
-
- if(tf) glTexCoord2fv(tf->uv[2]);
- if(cp) glColor3ub(cp[11], cp[10], cp[9]);
- glNormal3fv(vertexNos[(int) efa->v3->tmp.l]);
- glVertex3fv(vertexCos[(int) efa->v3->tmp.l]);
-
- if(efa->v4) {
- if(tf) glTexCoord2fv(tf->uv[3]);
- if(cp) glColor3ub(cp[15], cp[14], cp[13]);
- glNormal3fv(vertexNos[(int) efa->v4->tmp.l]);
- glVertex3fv(vertexCos[(int) efa->v4->tmp.l]);
- }
- }
- glEnd();
- }
- }
- } else {
- for (i=0,efa= em->faces.first; efa; i++,efa= efa->next) {
- MTFace *tf= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
- MCol *mcol= CustomData_em_get(&em->fdata, efa->data, CD_MCOL);
- unsigned char *cp= NULL;
- int drawSmooth= (efa->flag & ME_SMOOTH);
- int flag;
-
- if(drawParams)
- flag= drawParams(tf, mcol, efa->mat_nr);
- else if(drawParamsMapped)
- flag= drawParamsMapped(userData, i);
- else
- flag= 1;
-
- if(flag != 0) { /* flag 0 == the face is hidden or invisible */
- /* we always want smooth here since otherwise vertex colors dont interpolate */
- if (mcol) {
- if (flag==1) {
- cp= (unsigned char*)mcol;
- }
- } else {
- glShadeModel(drawSmooth?GL_SMOOTH:GL_FLAT);
- }
-
- glBegin(efa->v4?GL_QUADS:GL_TRIANGLES);
- if (!drawSmooth) {
- glNormal3fv(efa->n);
-
- if(tf) glTexCoord2fv(tf->uv[0]);
- if(cp) glColor3ub(cp[3], cp[2], cp[1]);
- glVertex3fv(efa->v1->co);
-
- if(tf) glTexCoord2fv(tf->uv[1]);
- if(cp) glColor3ub(cp[7], cp[6], cp[5]);
- glVertex3fv(efa->v2->co);
-
- if(tf) glTexCoord2fv(tf->uv[2]);
- if(cp) glColor3ub(cp[11], cp[10], cp[9]);
- glVertex3fv(efa->v3->co);
-
- if(efa->v4) {
- if(tf) glTexCoord2fv(tf->uv[3]);
- if(cp) glColor3ub(cp[15], cp[14], cp[13]);
- glVertex3fv(efa->v4->co);
- }
- } else {
- if(tf) glTexCoord2fv(tf->uv[0]);
- if(cp) glColor3ub(cp[3], cp[2], cp[1]);
- glNormal3fv(efa->v1->no);
- glVertex3fv(efa->v1->co);
-
- if(tf) glTexCoord2fv(tf->uv[1]);
- if(cp) glColor3ub(cp[7], cp[6], cp[5]);
- glNormal3fv(efa->v2->no);
- glVertex3fv(efa->v2->co);
-
- if(tf) glTexCoord2fv(tf->uv[2]);
- if(cp) glColor3ub(cp[11], cp[10], cp[9]);
- glNormal3fv(efa->v3->no);
- glVertex3fv(efa->v3->co);
-
- if(efa->v4) {
- if(tf) glTexCoord2fv(tf->uv[3]);
- if(cp) glColor3ub(cp[15], cp[14], cp[13]);
- glNormal3fv(efa->v4->no);
- glVertex3fv(efa->v4->co);
- }
- }
- glEnd();
- }
- }
- }
-}
-
-static void emDM_drawFacesTex(void *dm, int (*setDrawOptions)(MTFace *tface, int has_vcol, int matnr))
-{
- emDM_drawFacesTex_common(dm, (int (*)(struct MTFace *, struct MCol *, int))setDrawOptions, NULL, NULL);
-}
-
-static void emDM_drawMappedFacesTex(void *dm, int (*setDrawOptions)(void *userData, int index), void *userData)
-{
- emDM_drawFacesTex_common(dm, NULL, setDrawOptions, userData);
-}
-
-static void emDM_drawMappedFacesGLSL(void *dm,
- int (*setMaterial)(int, void *attribs),
- int (*setDrawOptions)(void *userData, int index), void *userData)
-{
- EditMeshDerivedMesh *emdm= dm;
- EditMesh *em= emdm->em;
- float (*vertexCos)[3]= emdm->vertexCos;
- float (*vertexNos)[3]= emdm->vertexNos;
- EditVert *eve;
- EditFace *efa;
- DMVertexAttribs attribs;
- GPUVertexAttribs gattribs;
- MTFace *tf;
- int transp, new_transp, orig_transp, tfoffset;
- int i, b, matnr, new_matnr, dodraw, layer;
-
- dodraw = 0;
- matnr = -1;
-
- transp = GPU_get_material_blend_mode();
- orig_transp = transp;
- layer = CustomData_get_layer_index(&em->fdata, CD_MTFACE);
- tfoffset = (layer == -1)? -1: em->fdata.layers[layer].offset;
-
- memset(&attribs, 0, sizeof(attribs));
-
- /* always use smooth shading even for flat faces, else vertex colors wont interpolate */
- glShadeModel(GL_SMOOTH);
-
- for (i=0,eve=em->verts.first; eve; eve= eve->next)
- eve->tmp.l = (intptr_t) i++;
-
-#define PASSATTRIB(efa, eve, vert) { \
- if(attribs.totorco) { \
- float *orco = attribs.orco.array[eve->tmp.l]; \
- glVertexAttrib3fvARB(attribs.orco.glIndex, orco); \
- } \
- for(b = 0; b < attribs.tottface; b++) { \
- MTFace *_tf = (MTFace*)((char*)efa->data + attribs.tface[b].emOffset); \
- glVertexAttrib2fvARB(attribs.tface[b].glIndex, _tf->uv[vert]); \
- } \
- for(b = 0; b < attribs.totmcol; b++) { \
- MCol *cp = (MCol*)((char*)efa->data + attribs.mcol[b].emOffset); \
- GLubyte col[4]; \
- col[0]= cp->b; col[1]= cp->g; col[2]= cp->r; col[3]= cp->a; \
- glVertexAttrib4ubvARB(attribs.mcol[b].glIndex, col); \
- } \
- if(attribs.tottang) { \
- float *tang = attribs.tang.array[i*4 + vert]; \
- glVertexAttrib3fvARB(attribs.tang.glIndex, tang); \
- } \
-}
-
- for (i=0,efa= em->faces.first; efa; i++,efa= efa->next) {
- int drawSmooth= (efa->flag & ME_SMOOTH);
-
- if(setDrawOptions && !setDrawOptions(userData, i))
- continue;
-
- new_matnr = efa->mat_nr + 1;
- if(new_matnr != matnr) {
- dodraw = setMaterial(matnr = new_matnr, &gattribs);
- if(dodraw)
- DM_vertex_attributes_from_gpu(dm, &gattribs, &attribs);
- }
-
- if(tfoffset != -1) {
- tf = (MTFace*)((char*)efa->data)+tfoffset;
- new_transp = tf->transp;
-
- if(new_transp != transp) {
- if(new_transp == GPU_BLEND_SOLID && orig_transp != GPU_BLEND_SOLID)
- GPU_set_material_blend_mode(orig_transp);
- else
- GPU_set_material_blend_mode(new_transp);
- transp = new_transp;
- }
- }
-
- if(dodraw) {
- glBegin(efa->v4?GL_QUADS:GL_TRIANGLES);
- if (!drawSmooth) {
- if(vertexCos) glNormal3fv(emdm->faceNos[i]);
- else glNormal3fv(efa->n);
-
- PASSATTRIB(efa, efa->v1, 0);
- if(vertexCos) glVertex3fv(vertexCos[(int) efa->v1->tmp.l]);
- else glVertex3fv(efa->v1->co);
-
- PASSATTRIB(efa, efa->v2, 1);
- if(vertexCos) glVertex3fv(vertexCos[(int) efa->v2->tmp.l]);
- else glVertex3fv(efa->v2->co);
-
- PASSATTRIB(efa, efa->v3, 2);
- if(vertexCos) glVertex3fv(vertexCos[(int) efa->v3->tmp.l]);
- else glVertex3fv(efa->v3->co);
-
- if(efa->v4) {
- PASSATTRIB(efa, efa->v4, 3);
- if(vertexCos) glVertex3fv(vertexCos[(int) efa->v4->tmp.l]);
- else glVertex3fv(efa->v4->co);
- }
- } else {
- PASSATTRIB(efa, efa->v1, 0);
- if(vertexCos) {
- glNormal3fv(vertexNos[(int) efa->v1->tmp.l]);
- glVertex3fv(vertexCos[(int) efa->v1->tmp.l]);
- }
- else {
- glNormal3fv(efa->v1->no);
- glVertex3fv(efa->v1->co);
- }
-
- PASSATTRIB(efa, efa->v2, 1);
- if(vertexCos) {
- glNormal3fv(vertexNos[(int) efa->v2->tmp.l]);
- glVertex3fv(vertexCos[(int) efa->v2->tmp.l]);
- }
- else {
- glNormal3fv(efa->v2->no);
- glVertex3fv(efa->v2->co);
- }
-
- PASSATTRIB(efa, efa->v3, 2);
- if(vertexCos) {
- glNormal3fv(vertexNos[(int) efa->v3->tmp.l]);
- glVertex3fv(vertexCos[(int) efa->v3->tmp.l]);
- }
- else {
- glNormal3fv(efa->v3->no);
- glVertex3fv(efa->v3->co);
- }
-
- if(efa->v4) {
- PASSATTRIB(efa, efa->v4, 3);
- if(vertexCos) {
- glNormal3fv(vertexNos[(int) efa->v4->tmp.l]);
- glVertex3fv(vertexCos[(int) efa->v4->tmp.l]);
- }
- else {
- glNormal3fv(efa->v4->no);
- glVertex3fv(efa->v4->co);
- }
- }
- }
- glEnd();
- }
- }
-}
-
-static void emDM_drawFacesGLSL(void *dm,
- int (*setMaterial)(int, void *attribs))
-{
- ((DerivedMesh*)dm)->drawMappedFacesGLSL(dm, setMaterial, NULL, NULL);
-}
-
-static void emDM_getMinMax(void *dm, float min_r[3], float max_r[3])
-{
- EditMeshDerivedMesh *emdm= dm;
- EditVert *eve;
- int i;
-
- if (emdm->em->verts.first) {
- for (i=0,eve= emdm->em->verts.first; eve; i++,eve= eve->next) {
- if (emdm->vertexCos) {
- DO_MINMAX(emdm->vertexCos[i], min_r, max_r);
- } else {
- DO_MINMAX(eve->co, min_r, max_r);
- }
- }
- } else {
- min_r[0] = min_r[1] = min_r[2] = max_r[0] = max_r[1] = max_r[2] = 0.0;
- }
-}
-static int emDM_getNumVerts(void *dm)
-{
- EditMeshDerivedMesh *emdm= dm;
-
- return BLI_countlist(&emdm->em->verts);
-}
-
-static int emDM_getNumEdges(void *dm)
-{
- EditMeshDerivedMesh *emdm= dm;
-
- return BLI_countlist(&emdm->em->edges);
-}
-
-static int emDM_getNumTessFaces(void *dm)
-{
- EditMeshDerivedMesh *emdm= dm;
-
- return BLI_countlist(&emdm->em->faces);
-}
-
-static void emDM_getVertCos(DerivedMesh *dm, float (*cos_r)[3])
-{
- EditMeshDerivedMesh *emdm= (EditMeshDerivedMesh*) dm;
- EditVert *eve;
- int i;
-
- for (i=0,eve= emdm->em->verts.first; eve; i++,eve=eve->next) {
- if (emdm->vertexCos) {
- copy_v3_v3(cos_r[i], emdm->vertexCos[i]);
- } else {
- copy_v3_v3(cos_r[i], eve->co);
- }
- }
-}
-
-static void emDM_getVert(DerivedMesh *dm, int index, MVert *vert_r)
-{
- EditVert *ev = ((EditMeshDerivedMesh *)dm)->em->verts.first;
- int i;
-
- for(i = 0; i < index; ++i) ev = ev->next;
-
- VECCOPY(vert_r->co, ev->co);
-
- vert_r->no[0] = ev->no[0] * 32767.0;
- vert_r->no[1] = ev->no[1] * 32767.0;
- vert_r->no[2] = ev->no[2] * 32767.0;
-
- /* TODO what to do with vert_r->flag and vert_r->mat_nr? */
- vert_r->mat_nr = 0;
- vert_r->bweight = (unsigned char) (ev->bweight*255.0f);
-}
-
-static void emDM_getEdge(void *dm, int index, MEdge *edge_r)
-{
- EditMesh *em = ((EditMeshDerivedMesh *)dm)->em;
- EditEdge *ee = em->edges.first;
- EditVert *ev, *v1, *v2;
- int i;
-
- for(i = 0; i < index; ++i) ee = ee->next;
-
- edge_r->crease = (unsigned char) (ee->crease*255.0f);
- edge_r->bweight = (unsigned char) (ee->bweight*255.0f);
- /* TODO what to do with edge_r->flag? */
- edge_r->flag = ME_EDGEDRAW|ME_EDGERENDER;
- if (ee->seam) edge_r->flag |= ME_SEAM;
- if (ee->sharp) edge_r->flag |= ME_SHARP;
-#if 0
- /* this needs setup of f2 field */
- if (!ee->f2) edge_r->flag |= ME_LOOSEEDGE;
-#endif
-
- /* goddamn, we have to search all verts to find indices */
- v1 = ee->v1;
- v2 = ee->v2;
- for(i = 0, ev = em->verts.first; v1 || v2; i++, ev = ev->next) {
- if(ev == v1) {
- edge_r->v1 = i;
- v1 = NULL;
- }
- if(ev == v2) {
- edge_r->v2 = i;
- v2 = NULL;
- }
- }
-}
-
-static void emDM_getFace(void *dm, int index, MFace *face_r)
-{
- EditMesh *em = ((EditMeshDerivedMesh *)dm)->em;
- EditFace *ef = em->faces.first;
- EditVert *ev, *v1, *v2, *v3, *v4;
- int i;
-
- for(i = 0; i < index; ++i) ef = ef->next;
-
- face_r->mat_nr = ef->mat_nr;
- face_r->flag = ef->flag;
-
- /* goddamn, we have to search all verts to find indices */
- v1 = ef->v1;
- v2 = ef->v2;
- v3 = ef->v3;
- v4 = ef->v4;
- if(!v4) face_r->v4 = 0;
-
- for(i = 0, ev = em->verts.first; v1 || v2 || v3 || v4;
- i++, ev = ev->next) {
- if(ev == v1) {
- face_r->v1 = i;
- v1 = NULL;
- }
- if(ev == v2) {
- face_r->v2 = i;
- v2 = NULL;
- }
- if(ev == v3) {
- face_r->v3 = i;
- v3 = NULL;
- }
- if(ev == v4) {
- face_r->v4 = i;
- v4 = NULL;
- }
- }
-
- test_index_face(face_r, NULL, 0, ef->v4?4:3);
-}
-
-static void emDM_copyVertArray(void *dm, MVert *vert_r)
-{
- EditVert *ev = ((EditMeshDerivedMesh *)dm)->em->verts.first;
-
- for( ; ev; ev = ev->next, ++vert_r) {
- VECCOPY(vert_r->co, ev->co);
-
- vert_r->no[0] = ev->no[0] * 32767.0;
- vert_r->no[1] = ev->no[1] * 32767.0;
- vert_r->no[2] = ev->no[2] * 32767.0;
-
- /* TODO what to do with vert_r->flag and vert_r->mat_nr? */
- vert_r->mat_nr = 0;
- vert_r->flag = 0;
- vert_r->bweight = (unsigned char) (ev->bweight*255.0f);
- }
-}
-
-static void emDM_copyEdgeArray(void *dm, MEdge *edge_r)
-{
- EditMesh *em = ((EditMeshDerivedMesh *)dm)->em;
- EditEdge *ee = em->edges.first;
- EditVert *ev;
- int i;
-
- /* store vertex indices in tmp union */
- for(ev = em->verts.first, i = 0; ev; ev = ev->next, ++i)
- ev->tmp.l = (intptr_t) i;
-
- for( ; ee; ee = ee->next, ++edge_r) {
- edge_r->crease = (unsigned char) (ee->crease*255.0f);
- edge_r->bweight = (unsigned char) (ee->bweight*255.0f);
- /* TODO what to do with edge_r->flag? */
- edge_r->flag = ME_EDGEDRAW|ME_EDGERENDER;
- if (ee->seam) edge_r->flag |= ME_SEAM;
- if (ee->sharp) edge_r->flag |= ME_SHARP;
-#if 0
- /* this needs setup of f2 field */
- if (!ee->f2) edge_r->flag |= ME_LOOSEEDGE;
-#endif
-
- edge_r->v1 = (int)ee->v1->tmp.l;
- edge_r->v2 = (int)ee->v2->tmp.l;
- }
-}
-
-static void emDM_copyFaceArray(void *dm, MFace *face_r)
-{
- EditMesh *em = ((EditMeshDerivedMesh *)dm)->em;
- EditFace *ef = em->faces.first;
- EditVert *ev;
- int i;
-
- /* store vertexes indices in tmp union */
- for(ev = em->verts.first, i = 0; ev; ev = ev->next, ++i)
- ev->tmp.l = (intptr_t) i;
-
- for( ; ef; ef = ef->next, ++face_r) {
- face_r->mat_nr = ef->mat_nr;
- face_r->flag = ef->flag;
-
- face_r->v1 = (int)ef->v1->tmp.l;
- face_r->v2 = (int)ef->v2->tmp.l;
- face_r->v3 = (int)ef->v3->tmp.l;
- if(ef->v4) face_r->v4 = (int)ef->v4->tmp.l;
- else face_r->v4 = 0;
-
- test_index_face(face_r, NULL, 0, ef->v4?4:3);
- }
-}
-
-static void *emDM_getFaceDataArray(void *dm, int type)
-{
- EditMeshDerivedMesh *emdm= dm;
- EditMesh *em= emdm->em;
- EditFace *efa;
- char *data, *emdata;
- void *datalayer;
- int index, offset, size;
-
- datalayer = DM_get_tessface_data_layer(dm, type);
- if(datalayer)
- return datalayer;
-
- /* layers are store per face for editmesh, we convert to a temporary
- * data layer array in the derivedmesh when these are requested */
- if(type == CD_MTFACE || type == CD_MCOL) {
- index = CustomData_get_layer_index(&em->fdata, type);
-
- if(index != -1) {
- offset = em->fdata.layers[index].offset;
- size = CustomData_sizeof(type);
-
- DM_add_tessface_layer(dm, type, CD_CALLOC, NULL);
- index = CustomData_get_layer_index(&emdm->dm.faceData, type);
- emdm->dm.faceData.layers[index].flag |= CD_FLAG_TEMPORARY;
-
- data = datalayer = DM_get_tessface_data_layer(dm, type);
- for(efa=em->faces.first; efa; efa=efa->next, data+=size) {
- emdata = CustomData_em_get(&em->fdata, efa->data, type);
- memcpy(data, emdata, size);
- }
- }
- }
-
- return datalayer;
-}
-
-static void emDM_release(void *dm)
-{
- EditMeshDerivedMesh *emdm= dm;
-
- if (DM_release(dm)) {
- if (emdm->vertexCos) {
- MEM_freeN(emdm->vertexCos);
- MEM_freeN(emdm->vertexNos);
- MEM_freeN(emdm->faceNos);
- }
-
- MEM_freeN(emdm);
- }
-}
-
-static DerivedMesh *getEditMeshDerivedMesh(EditMesh *em, Object *ob,
- float (*vertexCos)[3])
-{
-#if 0
- EditMeshDerivedMesh *emdm = MEM_callocN(sizeof(*emdm), "emdm");
-
- DM_init(&emdm->dm, DM_TYPE_EDITMESH, BLI_countlist(&em->verts),
- BLI_countlist(&em->edges), BLI_countlist(&em->faces),
- 0, 0);
-
- emdm->dm.getMinMax = emDM_getMinMax;
-
- emdm->dm.getNumVerts = emDM_getNumVerts;
- emdm->dm.getNumEdges = emDM_getNumEdges;
- emdm->dm.getNumTessFaces = emDM_getNumTessFaces;
-
- emdm->dm.getVertCos = emDM_getVertCos;
-
- emdm->dm.getVert = emDM_getVert;
- emdm->dm.getEdge = emDM_getEdge;
- emdm->dm.getTessFace = emDM_getFace;
- emdm->dm.copyVertArray = emDM_copyVertArray;
- emdm->dm.copyEdgeArray = emDM_copyEdgeArray;
- emdm->dm.copyTessFaceArray = emDM_copyFaceArray;
- emdm->dm.getTessFaceDataArray = emDM_getFaceDataArray;
-
- emdm->dm.foreachMappedVert = emDM_foreachMappedVert;
- emdm->dm.foreachMappedEdge = emDM_foreachMappedEdge;
- emdm->dm.foreachMappedFaceCenter = emDM_foreachMappedFaceCenter;
-
- emdm->dm.drawEdges = emDM_drawEdges;
- emdm->dm.drawMappedEdges = emDM_drawMappedEdges;
- emdm->dm.drawMappedEdgesInterp = emDM_drawMappedEdgesInterp;
- emdm->dm.drawMappedFaces = emDM_drawMappedFaces;
- emdm->dm.drawMappedFacesTex = emDM_drawMappedFacesTex;
- emdm->dm.drawMappedFacesGLSL = emDM_drawMappedFacesGLSL;
- emdm->dm.drawFacesTex = emDM_drawFacesTex;
- emdm->dm.drawFacesGLSL = emDM_drawFacesGLSL;
- emdm->dm.drawUVEdges = emDM_drawUVEdges;
-
- emdm->dm.release = emDM_release;
-
- emdm->em = em;
- emdm->vertexCos = vertexCos;
-
- if(CustomData_has_layer(&em->vdata, CD_MDEFORMVERT)) {
- EditVert *eve;
- int i;
-
- DM_add_vert_layer(&emdm->dm, CD_MDEFORMVERT, CD_CALLOC, NULL);
-
- for(eve = em->verts.first, i = 0; eve; eve = eve->next, ++i)
- DM_set_vert_data(&emdm->dm, i, CD_MDEFORMVERT,
- CustomData_em_get(&em->vdata, eve->data, CD_MDEFORMVERT));
- }
-
- if(vertexCos) {
- EditVert *eve;
- EditFace *efa;
- int totface = BLI_countlist(&em->faces);
- int i;
-
- for (i=0,eve=em->verts.first; eve; eve= eve->next)
- eve->tmp.l = (intptr_t) i++;
-
- emdm->vertexNos = MEM_callocN(sizeof(*emdm->vertexNos)*i, "emdm_vno");
- emdm->faceNos = MEM_mallocN(sizeof(*emdm->faceNos)*totface, "emdm_vno");
-
- for(i=0, efa= em->faces.first; efa; i++, efa=efa->next) {
- float *v1 = vertexCos[(int) efa->v1->tmp.l];
- float *v2 = vertexCos[(int) efa->v2->tmp.l];
- float *v3 = vertexCos[(int) efa->v3->tmp.l];
- float *no = emdm->faceNos[i];
-
- if(efa->v4) {
- float *v4 = vertexCos[(int) efa->v4->tmp.l];
-
- normal_quad_v3( no,v1, v2, v3, v4);
- add_v3_v3(emdm->vertexNos[(int) efa->v4->tmp.l], no);
- }
- else {
- normal_tri_v3( no,v1, v2, v3);
- }
-
- add_v3_v3(emdm->vertexNos[(int) efa->v1->tmp.l], no);
- add_v3_v3(emdm->vertexNos[(int) efa->v2->tmp.l], no);
- add_v3_v3(emdm->vertexNos[(int) efa->v3->tmp.l], no);
- }
-
- for(i=0, eve= em->verts.first; eve; i++, eve=eve->next) {
- float *no = emdm->vertexNos[i];
- /* following Mesh convention; we use vertex coordinate itself
- * for normal in this case */
- if (normalize_v3(no)==0.0) {
- VECCOPY(no, vertexCos[i]);
- normalize_v3(no);
- }
- }
- }
-
- return (DerivedMesh*) emdm;
-#endif
- return NULL;
-}
-
/***/
DerivedMesh *mesh_create_derived_for_modifier(Scene *scene, Object *ob, ModifierData *md)
@@ -1716,7 +735,7 @@ static void *get_orco_coords_dm(Object *ob, BMEditMesh *em, int layer, int *free
return NULL;
}
-static DerivedMesh *create_orco_dm(Object *ob, Mesh *me, EditMesh *em, int layer)
+static DerivedMesh *create_orco_dm(Object *ob, Mesh *me, BMEditMesh *em, int layer)
{
DerivedMesh *dm;
float (*orco)[3];
@@ -2832,9 +1851,7 @@ void DM_add_tangent_layer(DerivedMesh *dm)
for(j=0; j<len; j++) {
vtang= find_vertex_tangent(vtangents[mf_vi[j]], mtface ? tf->uv[j] : uv[j]);
-
- VECCOPY(tangent[j], vtang);
- normalize_v3(tangent[j]);
+ normalize_v3_v3(tangent[j], vtang);
}
}
@@ -2853,15 +1870,8 @@ void DM_vertex_attributes_from_gpu(DerivedMesh *dm, GPUVertexAttribs *gattribs,
memset(attribs, 0, sizeof(DMVertexAttribs));
vdata = &dm->vertData;
- fdata = &dm->faceData;
-
- /* ugly hack, editmesh derivedmesh doesn't copy face data, this way we
- * can use offsets instead */
- if(dm->release == emDM_release)
- tfdata = &((EditMeshDerivedMesh*)dm)->em->fdata;
- else
- tfdata = fdata;
-
+ fdata = tfdata = dm->getTessFaceDataLayout(dm);
+
/* add a tangent layer if necessary */
for(b = 0; b < gattribs->totlayer; b++)
if(gattribs->layer[b].type == CD_TANGENT)
diff --git a/source/blender/blenkernel/intern/Makefile b/source/blender/blenkernel/intern/Makefile
index 15c022592f9..53a9999758c 100644
--- a/source/blender/blenkernel/intern/Makefile
+++ b/source/blender/blenkernel/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
@@ -136,8 +136,21 @@ ifeq ($(WITH_TIFF), true)
CPPFLAGS += -DWITH_TIFF
endif
+ifeq ($(WITH_CINEON), true)
+ CPPFLAGS += -DWITH_CINEON
+endif
+
+ifeq ($(WITH_HDR), true)
+ CPPFLAGS += -DWITH_HDR
+endif
+
ifeq ($(OS), darwin)
ifeq ($(WITH_BF_OPENMP), true)
CPPFLAGS += -DPARALLEL=1
endif
endif
+
+ifeq ($(WITH_LCMS), true)
+ CPPFLAGS += -DWITH_LCMS
+ CPPFLAGS += -I$(BF_LCMS_INC)
+endif
diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c
index 6c8e5c48745..90a3a6ce664 100644
--- a/source/blender/blenkernel/intern/action.c
+++ b/source/blender/blenkernel/intern/action.c
@@ -37,6 +37,7 @@
#include "DNA_armature_types.h"
#include "DNA_constraint_types.h"
#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
#include "BKE_animsys.h"
#include "BKE_action.h"
@@ -301,7 +302,7 @@ void action_groups_add_channel (bAction *act, bActionGroup *agrp, FCurve *fcurve
/* firstly, link this F-Curve to the group */
agrp->channels.first = agrp->channels.last = fcurve;
- /* step through the groups preceeding this one, finding the F-Curve there to attach this one after */
+ /* step through the groups preceding this one, finding the F-Curve there to attach this one after */
for (grp= agrp->prev; grp; grp= grp->prev) {
/* if this group has F-Curves, we want weave the given one in right after the last channel there,
* but via the Action's list not this group's list
@@ -367,20 +368,12 @@ void action_groups_remove_channel (bAction *act, FCurve *fcu)
/* Find a group with the given name */
bActionGroup *action_groups_find_named (bAction *act, const char name[])
{
- bActionGroup *grp;
-
/* sanity checks */
if (ELEM3(NULL, act, act->groups.first, name) || (name[0] == 0))
return NULL;
/* do string comparisons */
- for (grp= act->groups.first; grp; grp= grp->next) {
- if (strcmp(grp->name, name) == 0)
- return grp;
- }
-
- /* not found */
- return NULL;
+ return BLI_findstring(&act->groups, name, offsetof(bActionGroup, name));
}
/* *************** Pose channels *************** */
diff --git a/source/blender/blenkernel/intern/anim.c b/source/blender/blenkernel/intern/anim.c
index 8c8567fdec9..5d8a57f46f5 100644
--- a/source/blender/blenkernel/intern/anim.c
+++ b/source/blender/blenkernel/intern/anim.c
@@ -40,7 +40,6 @@
#include "BLI_math.h"
#include "BLI_rand.h"
-
#include "DNA_anim_types.h"
#include "DNA_armature_types.h"
#include "DNA_group_types.h"
@@ -51,7 +50,6 @@
#include "DNA_view3d_types.h"
#include "DNA_vfont_types.h"
-#include "BKE_anim.h"
#include "BKE_curve.h"
#include "BKE_DerivedMesh.h"
#include "BKE_depsgraph.h"
@@ -69,6 +67,7 @@
#include "BKE_tessmesh.h"
#include "BKE_depsgraph.h"
+
// XXX bad level call...
/* --------------------- */
@@ -290,7 +289,7 @@ static void motionpaths_calc_optimise_depsgraph(Scene *scene, ListBase *targets)
}
/* "brew me a list that's sorted a bit faster now depsy" */
- DAG_scene_sort(scene);
+ DAG_scene_sort(G.main, scene);
}
/* update scene for current frame */
@@ -300,7 +299,7 @@ static void motionpaths_calc_update_scene(Scene *scene)
Base *base, *last=NULL;
/* only stuff that moves or needs display still */
- DAG_scene_update_flags(scene, scene->lay);
+ DAG_scene_update_flags(G.main, scene, scene->lay);
/* find the last object with the tag
* - all those afterwards are assumed to not be relevant for our calculations
@@ -328,7 +327,7 @@ static void motionpaths_calc_update_scene(Scene *scene)
* that doesn't force complete update, but for now, this is the
* most accurate way!
*/
- scene_update_for_newframe(scene, scene->lay); // XXX this is the best way we can get anything moving
+ scene_update_for_newframe(G.main, scene, scene->lay); // XXX this is the best way we can get anything moving
#endif
}
@@ -461,17 +460,17 @@ void calc_curvepath(Object *ob)
float *fp, *dist, *maxdist, xyz[3];
float fac, d=0, fac1, fac2;
int a, tot, cycl=0;
+ ListBase *nurbs;
/* in a path vertices are with equal differences: path->len = number of verts */
/* NOW WITH BEVELCURVE!!! */
if(ob==NULL || ob->type != OB_CURVE) return;
cu= ob->data;
- if(cu->editnurb)
- nu= cu->editnurb->first;
- else
- nu= cu->nurb.first;
-
+
+ nurbs= BKE_curve_nurbs(cu);
+ nu= nurbs->first;
+
if(cu->path) free_path(cu->path);
cu->path= NULL;
diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c
index c44406b5ed4..a482e4051d4 100644
--- a/source/blender/blenkernel/intern/armature.c
+++ b/source/blender/blenkernel/intern/armature.c
@@ -46,6 +46,7 @@
#include "DNA_meshdata_types.h"
#include "DNA_nla_types.h"
#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
#include "BKE_animsys.h"
#include "BKE_armature.h"
@@ -246,117 +247,6 @@ Bone *get_named_bone (bArmature *arm, const char *name)
return bone;
}
-
-#define IS_SEPARATOR(a) (a=='.' || a==' ' || a=='-' || a=='_')
-
-/* finds the best possible flipped name. For renaming; check for unique names afterwards */
-/* if strip_number: removes number extensions */
-void bone_flip_name (char *name, int strip_number)
-{
- int len;
- char prefix[128]={""}; /* The part before the facing */
- char suffix[128]={""}; /* The part after the facing */
- char replace[128]={""}; /* The replacement string */
- char number[128]={""}; /* The number extension string */
- char *index=NULL;
-
- len= strlen(name);
- if(len<3) return; // we don't do names like .R or .L
-
- /* We first check the case with a .### extension, let's find the last period */
- if(isdigit(name[len-1])) {
- index= strrchr(name, '.'); // last occurrence
- if (index && isdigit(index[1]) ) { // doesnt handle case bone.1abc2 correct..., whatever!
- if(strip_number==0)
- strcpy(number, index);
- *index= 0;
- len= strlen(name);
- }
- }
-
- strcpy (prefix, name);
-
- /* first case; separator . - _ with extensions r R l L */
- if( IS_SEPARATOR(name[len-2]) ) {
- switch(name[len-1]) {
- case 'l':
- prefix[len-1]= 0;
- strcpy(replace, "r");
- break;
- case 'r':
- prefix[len-1]= 0;
- strcpy(replace, "l");
- break;
- case 'L':
- prefix[len-1]= 0;
- strcpy(replace, "R");
- break;
- case 'R':
- prefix[len-1]= 0;
- strcpy(replace, "L");
- break;
- }
- }
- /* case; beginning with r R l L , with separator after it */
- else if( IS_SEPARATOR(name[1]) ) {
- switch(name[0]) {
- case 'l':
- strcpy(replace, "r");
- strcpy(suffix, name+1);
- prefix[0]= 0;
- break;
- case 'r':
- strcpy(replace, "l");
- strcpy(suffix, name+1);
- prefix[0]= 0;
- break;
- case 'L':
- strcpy(replace, "R");
- strcpy(suffix, name+1);
- prefix[0]= 0;
- break;
- case 'R':
- strcpy(replace, "L");
- strcpy(suffix, name+1);
- prefix[0]= 0;
- break;
- }
- }
- else if(len > 5) {
- /* hrms, why test for a separator? lets do the rule 'ultimate left or right' */
- index = BLI_strcasestr(prefix, "right");
- if (index==prefix || index==prefix+len-5) {
- if(index[0]=='r')
- strcpy (replace, "left");
- else {
- if(index[1]=='I')
- strcpy (replace, "LEFT");
- else
- strcpy (replace, "Left");
- }
- *index= 0;
- strcpy (suffix, index+5);
- }
- else {
- index = BLI_strcasestr(prefix, "left");
- if (index==prefix || index==prefix+len-4) {
- if(index[0]=='l')
- strcpy (replace, "right");
- else {
- if(index[1]=='E')
- strcpy (replace, "RIGHT");
- else
- strcpy (replace, "Right");
- }
- *index= 0;
- strcpy (suffix, index+4);
- }
- }
- }
-
- sprintf (name, "%s%s%s%s", prefix, replace, suffix, number);
-}
-
/* Finds the best possible extension to the name on a particular axis. (For renaming, check for unique names afterwards)
* This assumes that bone names are at most 32 chars long!
* strip_number: removes number extensions (TODO: not used)
@@ -1394,9 +1284,8 @@ void vec_roll_to_mat3(float *vec, float roll, float mat[][3])
float nor[3], axis[3], target[3]={0,1,0};
float theta;
float rMatrix[3][3], bMatrix[3][3];
-
- VECCOPY (nor, vec);
- normalize_v3(nor);
+
+ normalize_v3_v3(nor, vec);
/* Find Axis & Amount for bone matrix*/
cross_v3_v3v3(axis,target,nor);
diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c
index 590b9f7e476..95e9d419f44 100644
--- a/source/blender/blenkernel/intern/blender.c
+++ b/source/blender/blenkernel/intern/blender.c
@@ -43,6 +43,7 @@
#include <stdlib.h>
#include <stdio.h>
+#include <stddef.h>
#include <string.h>
#include <fcntl.h> // for open
@@ -52,6 +53,7 @@
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
#include "DNA_sequence_types.h"
+#include "DNA_sound_types.h"
#include "BLI_blenlib.h"
#include "BLI_dynstr.h"
@@ -102,6 +104,7 @@ void free_blender(void)
BKE_spacetypes_free(); /* after free main, it uses space callbacks */
IMB_exit();
+ seq_stripelem_cache_destruct();
free_nodesystem();
}
@@ -312,7 +315,7 @@ static void setup_app_data(bContext *C, BlendFileData *bfd, char *filename)
BLI_strncpy(G.main->name, filename, FILE_MAX); /* is guaranteed current file */
/* baseflags, groups, make depsgraph, etc */
- set_scene_bg(CTX_data_scene(C));
+ set_scene_bg(G.main, CTX_data_scene(C));
MEM_freeN(bfd);
}
@@ -477,7 +480,7 @@ static int read_undosave(bContext *C, UndoElem *uel)
G.fileflags= fileflags;
if(success)
- DAG_on_load_update();
+ DAG_on_load_update(G.main);
return success;
}
@@ -638,12 +641,8 @@ void BKE_undo_number(bContext *C, int nr)
/* go back to the last occurance of name in stack */
void BKE_undo_name(bContext *C, const char *name)
{
- UndoElem *uel;
-
- for(uel= undobase.last; uel; uel= uel->prev) {
- if(strcmp(name, uel->name)==0)
- break;
- }
+ UndoElem *uel= BLI_findstring(&undobase, name, offsetof(UndoElem, name));
+
if(uel && uel->prev) {
curundo= uel->prev;
BKE_undo_step(C, 0);
diff --git a/source/blender/blenkernel/intern/boids.c b/source/blender/blenkernel/intern/boids.c
index 82602a6951d..7ae65d0113a 100644
--- a/source/blender/blenkernel/intern/boids.c
+++ b/source/blender/blenkernel/intern/boids.c
@@ -659,9 +659,9 @@ static int rule_fight(BoidRule *rule, BoidBrainData *bbd, BoidValues *val, Parti
/* attack if in range */
if(closest_dist <= bbd->part->boids->range + pa->size + enemy_pa->size) {
float damage = BLI_frand();
- float enemy_dir[3] = {bbd->wanted_co[0],bbd->wanted_co[1],bbd->wanted_co[2]};
+ float enemy_dir[3];
- normalize_v3(enemy_dir);
+ normalize_v3_v3(enemy_dir, bbd->wanted_co);
/* fight mode */
bbd->wanted_speed = 0.0f;
@@ -786,8 +786,7 @@ static Object *boid_find_ground(BoidBrainData *bbd, ParticleData *pa, float *gro
if(hit.index>=0) {
t = hit.dist/col.ray_len;
interp_v3_v3v3(ground_co, col.co1, col.co2, t);
- VECCOPY(ground_nor, col.nor);
- normalize_v3(ground_nor);
+ normalize_v3_v3(ground_nor, col.nor);
return col.hit_ob;
}
else {
@@ -1115,8 +1114,7 @@ void boid_body(BoidBrainData *bbd, ParticleData *pa)
}
VECCOPY(old_dir, pa->prev_state.ave);
- VECCOPY(wanted_dir, bbd->wanted_co);
- new_speed = normalize_v3(wanted_dir);
+ new_speed = normalize_v3_v3(wanted_dir, bbd->wanted_co);
/* first check if we have valid direction we want to go towards */
if(new_speed == 0.0f) {
@@ -1356,8 +1354,7 @@ void boid_body(BoidBrainData *bbd, ParticleData *pa)
/* save direction to state.ave unless the boid is falling */
/* (boids can't effect their direction when falling) */
if(bpa->data.mode!=eBoidMode_Falling && len_v3(pa->state.vel) > 0.1*pa->size) {
- VECCOPY(pa->state.ave, pa->state.vel);
- normalize_v3(pa->state.ave);
+ normalize_v3_v3(pa->state.ave, pa->state.vel);
}
/* apply damping */
diff --git a/source/blender/blenkernel/intern/booleanops_mesh.c b/source/blender/blenkernel/intern/booleanops_mesh.c
index 431e51cf149..dd595fc98b6 100644
--- a/source/blender/blenkernel/intern/booleanops_mesh.c
+++ b/source/blender/blenkernel/intern/booleanops_mesh.c
@@ -30,7 +30,6 @@
*/
#include "CSG_BooleanOps.h"
-#include "MEM_guardedalloc.h"
diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c
index c423d426e32..71a43994363 100644
--- a/source/blender/blenkernel/intern/brush.c
+++ b/source/blender/blenkernel/intern/brush.c
@@ -35,6 +35,7 @@
#include "DNA_brush_types.h"
#include "DNA_color_types.h"
#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
#include "DNA_windowmanager_types.h"
#include "WM_types.h"
@@ -61,25 +62,24 @@
#include "RE_render_ext.h" /* externtex */
#include "RE_shader_ext.h"
-/* Datablock add/copy/free/make_local */
-
-Brush *add_brush(const char *name)
+static void brush_set_defaults(Brush *brush)
{
- Brush *brush;
+ brush->blend = 0;
+ brush->flag = 0;
- brush= alloc_libblock(&G.main->brush, ID_BR, name);
+ brush->ob_mode = (OB_MODE_SCULPT|OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT);
/* BRUSH SCULPT TOOL SETTINGS */
- brush->sculpt_tool = SCULPT_TOOL_DRAW; /* sculpting defaults to the draw tool for new brushes */
brush->size= 35; /* radius of the brush in pixels */
brush->alpha= 0.5f; /* brush strength/intensity probably variable should be renamed? */
brush->autosmooth_factor= 0.0f;
brush->crease_pinch_factor= 0.5f;
- brush->sculpt_plane = SCULPT_DISP_DIR_VIEW;
+ brush->sculpt_plane = SCULPT_DISP_DIR_AREA;
brush->plane_offset= 0.0f; /* how far above or below the plane that is found by averaging the faces */
brush->plane_trim= 0.5f;
brush->clone.alpha= 0.5f;
brush->normal_weight= 0.0f;
+ brush->flag |= BRUSH_ALPHA_PRESSURE;
/* BRUSH PAINT TOOL SETTINGS */
brush->rgb[0]= 1.0f; /* default rgb color of the brush when painting - white */
@@ -101,11 +101,10 @@ Brush *add_brush(const char *name)
default_mtex(&brush->mtex);
brush->texture_sample_bias= 0; /* value to added to texture samples */
+ brush->texture_overlay_alpha= 33;
/* brush appearance */
- brush->image_icon= NULL;
-
brush->add_col[0]= 1.00; /* add mode color is light red */
brush->add_col[1]= 0.39;
brush->add_col[2]= 0.39;
@@ -113,13 +112,25 @@ Brush *add_brush(const char *name)
brush->sub_col[0]= 0.39; /* subtract mode color is light blue */
brush->sub_col[1]= 0.39;
brush->sub_col[2]= 1.00;
+}
- /* the default alpha falloff curve */
- brush_curve_preset(brush, CURVE_PRESET_SMOOTH);
+/* Datablock add/copy/free/make_local */
+
+Brush *add_brush(const char *name)
+{
+ Brush *brush;
+
+ brush= alloc_libblock(&G.main->brush, ID_BR, name);
/* enable fake user by default */
brush->id.flag |= LIB_FAKEUSER;
- brush_toggled_fake_user(brush);
+
+ brush_set_defaults(brush);
+
+ brush->sculpt_tool = SCULPT_TOOL_DRAW; /* sculpting defaults to the draw tool for new brushes */
+
+ /* the default alpha falloff curve */
+ brush_curve_preset(brush, CURVE_PRESET_SMOOTH);
return brush;
}
@@ -130,14 +141,18 @@ Brush *copy_brush(Brush *brush)
brushn= copy_libblock(brush);
- if(brush->mtex.tex) id_us_plus((ID*)brush->mtex.tex);
-
+ if (brush->mtex.tex)
+ id_us_plus((ID*)brush->mtex.tex);
+
+ if (brush->icon_imbuf)
+ brushn->icon_imbuf= IMB_dupImBuf(brush->icon_imbuf);
+
brushn->curve= curvemapping_copy(brush->curve);
/* enable fake user by default */
if (!(brushn->id.flag & LIB_FAKEUSER)) {
brushn->id.flag |= LIB_FAKEUSER;
- brush_toggled_fake_user(brushn);
+ brushn->id.us++;
}
return brushn;
@@ -146,7 +161,13 @@ Brush *copy_brush(Brush *brush)
/* not brush itself */
void free_brush(Brush *brush)
{
- if(brush->mtex.tex) brush->mtex.tex->id.us--;
+ if (brush->mtex.tex)
+ brush->mtex.tex->id.us--;
+
+ if (brush->icon_imbuf)
+ IMB_freeImBuf(brush->icon_imbuf);
+
+ BKE_previewimg_free(&(brush->preview));
curvemapping_free(brush->curve);
}
@@ -176,7 +197,7 @@ void make_local_brush(Brush *brush)
if(scene->id.lib) lib= 1;
else local= 1;
}
-
+
if(local && lib==0) {
brush->id.lib= 0;
brush->id.flag= LIB_LOCAL;
@@ -185,7 +206,7 @@ void make_local_brush(Brush *brush)
/* enable fake user by default */
if (!(brush->id.flag & LIB_FAKEUSER)) {
brush->id.flag |= LIB_FAKEUSER;
- brush_toggled_fake_user(brush);
+ brush->id.us++;
}
}
else if(local && lib) {
@@ -203,55 +224,176 @@ void make_local_brush(Brush *brush)
}
}
-/* Library Operations */
-
-int brush_set_nr(Brush **current_brush, int nr, const char *name)
+void brush_debug_print_state(Brush *br)
{
- ID *idtest, *id;
+ Brush def;
+
+ /* create a fake brush and set it to the defaults */
+ memset(&def, 0, sizeof(Brush));
+ brush_set_defaults(&def);
- id= (ID*)(*current_brush);
- idtest= (ID*)BLI_findlink(&G.main->brush, nr-1);
+#define BR_TEST(field, t) \
+ if(br->field != def.field) \
+ printf("br->" #field " = %" #t ";\n", br->field)
+
+#define BR_TEST_FLAG(_f) \
+ if((br->flag & _f) && !(def.flag & _f)) \
+ printf("br->flag |= " #_f ";\n"); \
+ else if(!(br->flag & _f) && (def.flag & _f)) \
+ printf("br->flag &= ~" #_f ";\n")
- if(idtest==0) { /* new brush */
- if(id) idtest= (ID *)copy_brush((Brush *)id);
- else idtest= (ID *)add_brush(name);
- idtest->us--;
- }
- if(idtest!=id) {
- brush_delete(current_brush);
- *current_brush= (Brush *)idtest;
- id_us_plus(idtest);
-
- return 1;
- }
- return 0;
-}
-
-int brush_delete(Brush **current_brush)
-{
- if (*current_brush) {
- (*current_brush)->id.us--;
- *current_brush= NULL;
-
- return 1;
- }
-
- return 0;
+ /* print out any non-default brush state */
+ BR_TEST(normal_weight, f);
+
+ BR_TEST(blend, d);
+ BR_TEST(size, d);
+
+ /* br->flag */
+ BR_TEST_FLAG(BRUSH_AIRBRUSH);
+ BR_TEST_FLAG(BRUSH_TORUS);
+ BR_TEST_FLAG(BRUSH_ALPHA_PRESSURE);
+ BR_TEST_FLAG(BRUSH_SIZE_PRESSURE);
+ BR_TEST_FLAG(BRUSH_JITTER_PRESSURE);
+ BR_TEST_FLAG(BRUSH_SPACING_PRESSURE);
+ BR_TEST_FLAG(BRUSH_FIXED_TEX);
+ BR_TEST_FLAG(BRUSH_RAKE);
+ BR_TEST_FLAG(BRUSH_ANCHORED);
+ BR_TEST_FLAG(BRUSH_DIR_IN);
+ BR_TEST_FLAG(BRUSH_SPACE);
+ BR_TEST_FLAG(BRUSH_SMOOTH_STROKE);
+ BR_TEST_FLAG(BRUSH_PERSISTENT);
+ BR_TEST_FLAG(BRUSH_ACCUMULATE);
+ BR_TEST_FLAG(BRUSH_LOCK_ALPHA);
+ BR_TEST_FLAG(BRUSH_ORIGINAL_NORMAL);
+ BR_TEST_FLAG(BRUSH_OFFSET_PRESSURE);
+ BR_TEST_FLAG(BRUSH_SPACE_ATTEN);
+ BR_TEST_FLAG(BRUSH_ADAPTIVE_SPACE);
+ BR_TEST_FLAG(BRUSH_LOCK_SIZE);
+ BR_TEST_FLAG(BRUSH_TEXTURE_OVERLAY);
+ BR_TEST_FLAG(BRUSH_EDGE_TO_EDGE);
+ BR_TEST_FLAG(BRUSH_RESTORE_MESH);
+ BR_TEST_FLAG(BRUSH_INVERSE_SMOOTH_PRESSURE);
+ BR_TEST_FLAG(BRUSH_RANDOM_ROTATION);
+ BR_TEST_FLAG(BRUSH_PLANE_TRIM);
+ BR_TEST_FLAG(BRUSH_FRONTFACE);
+ BR_TEST_FLAG(BRUSH_CUSTOM_ICON);
+
+ BR_TEST(jitter, f);
+ BR_TEST(spacing, d);
+ BR_TEST(smooth_stroke_radius, d);
+ BR_TEST(smooth_stroke_factor, f);
+ BR_TEST(rate, f);
+
+ BR_TEST(alpha, f);
+
+ BR_TEST(sculpt_plane, d);
+
+ BR_TEST(plane_offset, f);
+
+ BR_TEST(autosmooth_factor, f);
+
+ BR_TEST(crease_pinch_factor, f);
+
+ BR_TEST(plane_trim, f);
+
+ BR_TEST(texture_sample_bias, f);
+ BR_TEST(texture_overlay_alpha, d);
+
+ BR_TEST(add_col[0], f);
+ BR_TEST(add_col[1], f);
+ BR_TEST(add_col[2], f);
+ BR_TEST(sub_col[0], f);
+ BR_TEST(sub_col[1], f);
+ BR_TEST(sub_col[2], f);
+
+ printf("\n");
+
+#undef BR_TEST
+#undef BR_TEST_FLAG
}
-void brush_toggled_fake_user(Brush *brush)
+void brush_reset_sculpt(Brush *br)
{
- ID *id= (ID*)brush;
- if(id) {
- if(id->flag & LIB_FAKEUSER) {
- id_us_plus(id);
- } else {
- id->us--;
- }
+ /* enable this to see any non-default
+ settings used by a brush:
+
+ brush_debug_print_state(br);
+ */
+
+ brush_set_defaults(br);
+ brush_curve_preset(br, CURVE_PRESET_SMOOTH);
+
+ switch(br->sculpt_tool) {
+ case SCULPT_TOOL_CLAY:
+ br->flag |= BRUSH_FRONTFACE;
+ break;
+ case SCULPT_TOOL_CREASE:
+ br->flag |= BRUSH_DIR_IN;
+ br->alpha = 0.25;
+ break;
+ case SCULPT_TOOL_FILL:
+ br->add_col[1] = 1;
+ br->sub_col[0] = 0.25;
+ br->sub_col[1] = 1;
+ break;
+ case SCULPT_TOOL_FLATTEN:
+ br->add_col[1] = 1;
+ br->sub_col[0] = 0.25;
+ br->sub_col[1] = 1;
+ break;
+ case SCULPT_TOOL_INFLATE:
+ br->add_col[0] = 0.750000;
+ br->add_col[1] = 0.750000;
+ br->add_col[2] = 0.750000;
+ br->sub_col[0] = 0.250000;
+ br->sub_col[1] = 0.250000;
+ br->sub_col[2] = 0.250000;
+ break;
+ case SCULPT_TOOL_NUDGE:
+ br->add_col[0] = 0.250000;
+ br->add_col[1] = 1.000000;
+ br->add_col[2] = 0.250000;
+ break;
+ case SCULPT_TOOL_PINCH:
+ br->add_col[0] = 0.750000;
+ br->add_col[1] = 0.750000;
+ br->add_col[2] = 0.750000;
+ br->sub_col[0] = 0.250000;
+ br->sub_col[1] = 0.250000;
+ br->sub_col[2] = 0.250000;
+ break;
+ case SCULPT_TOOL_SCRAPE:
+ br->add_col[1] = 1.000000;
+ br->sub_col[0] = 0.250000;
+ br->sub_col[1] = 1.000000;
+ break;
+ case SCULPT_TOOL_ROTATE:
+ break;
+ case SCULPT_TOOL_SMOOTH:
+ br->flag &= ~BRUSH_SPACE_ATTEN;
+ br->spacing = 5;
+ br->add_col[0] = 0.750000;
+ br->add_col[1] = 0.750000;
+ br->add_col[2] = 0.750000;
+ break;
+ case SCULPT_TOOL_GRAB:
+ case SCULPT_TOOL_SNAKE_HOOK:
+ case SCULPT_TOOL_THUMB:
+ br->size = 75;
+ br->flag &= ~BRUSH_ALPHA_PRESSURE;
+ br->flag &= ~BRUSH_SPACE;
+ br->flag &= ~BRUSH_SPACE_ATTEN;
+ br->add_col[0] = 0.250000;
+ br->add_col[1] = 1.000000;
+ br->add_col[2] = 0.250000;
+ break;
+ default:
+ break;
}
}
+/* Library Operations */
void brush_curve_preset(Brush *b, /*CurveMappingPreset*/int preset)
{
CurveMap *cm = NULL;
@@ -263,7 +405,7 @@ void brush_curve_preset(Brush *b, /*CurveMappingPreset*/int preset)
cm->flag &= ~CUMA_EXTEND_EXTRAPOLATE;
b->curve->preset = preset;
- curvemap_reset(cm, &b->curve->clipr, b->curve->preset);
+ curvemap_reset(cm, &b->curve->clipr, b->curve->preset, CURVEMAP_SLOPE_NEGATIVE);
curvemapping_changed(b->curve, 0);
}
@@ -335,12 +477,6 @@ int brush_clone_image_delete(Brush *brush)
return 0;
}
-void brush_check_exists(Brush **brush, const char *name)
-{
- if(*brush==NULL)
- brush_set_nr(brush, 1, name);
-}
-
/* Brush Sampling */
void brush_sample_tex(Brush *brush, float *xy, float *rgba)
{
@@ -349,9 +485,10 @@ void brush_sample_tex(Brush *brush, float *xy, float *rgba)
if (mtex && mtex->tex) {
float co[3], tin, tr, tg, tb, ta;
int hasrgb;
-
- co[0]= xy[0]/(brush->size >> 1);
- co[1]= xy[1]/(brush->size >> 1);
+ const int radius= brush_size(brush);
+
+ co[0]= xy[0]/radius;
+ co[1]= xy[1]/radius;
co[2]= 0.0f;
hasrgb= externtex(mtex, co, &tin, &tr, &tg, &tb, &ta);
@@ -374,23 +511,24 @@ void brush_sample_tex(Brush *brush, float *xy, float *rgba)
}
-void brush_imbuf_new(Brush *brush, short flt, short texfall, int size, ImBuf **outbuf)
+void brush_imbuf_new(Brush *brush, short flt, short texfall, int bufsize, ImBuf **outbuf)
{
ImBuf *ibuf;
float xy[2], dist, rgba[4], *dstf;
int x, y, rowbytes, xoff, yoff, imbflag;
- int maxsize = brush->size >> 1;
+ const int radius= brush_size(brush);
char *dst, crgb[3];
+ const float alpha= brush_alpha(brush);
imbflag= (flt)? IB_rectfloat: IB_rect;
- xoff = -size/2.0f + 0.5f;
- yoff = -size/2.0f + 0.5f;
- rowbytes= size*4;
+ xoff = -bufsize/2.0f + 0.5f;
+ yoff = -bufsize/2.0f + 0.5f;
+ rowbytes= bufsize*4;
if (*outbuf)
ibuf= *outbuf;
else
- ibuf= IMB_allocImBuf(size, size, 32, imbflag, 0);
+ ibuf= IMB_allocImBuf(bufsize, bufsize, 32, imbflag, 0);
if (flt) {
for (y=0; y < ibuf->y; y++) {
@@ -404,7 +542,7 @@ void brush_imbuf_new(Brush *brush, short flt, short texfall, int size, ImBuf **o
dist = sqrt(xy[0]*xy[0] + xy[1]*xy[1]);
VECCOPY(dstf, brush->rgb);
- dstf[3]= brush->alpha*brush_curve_strength_clamp(brush, dist, maxsize);
+ dstf[3]= alpha*brush_curve_strength_clamp(brush, dist, radius);
}
else if (texfall == 1) {
brush_sample_tex(brush, xy, dstf);
@@ -417,7 +555,7 @@ void brush_imbuf_new(Brush *brush, short flt, short texfall, int size, ImBuf **o
dstf[0] = rgba[0]*brush->rgb[0];
dstf[1] = rgba[1]*brush->rgb[1];
dstf[2] = rgba[2]*brush->rgb[2];
- dstf[3] = rgba[3]*brush->alpha*brush_curve_strength_clamp(brush, dist, maxsize);
+ dstf[3] = rgba[3]*alpha*brush_curve_strength_clamp(brush, dist, radius);
}
}
}
@@ -440,7 +578,7 @@ void brush_imbuf_new(Brush *brush, short flt, short texfall, int size, ImBuf **o
dst[0]= crgb[0];
dst[1]= crgb[1];
dst[2]= crgb[2];
- dst[3]= FTOCHAR(brush->alpha*brush_curve_strength(brush, dist, maxsize));
+ dst[3]= FTOCHAR(alpha*brush_curve_strength(brush, dist, radius));
}
else if (texfall == 1) {
brush_sample_tex(brush, xy, rgba);
@@ -456,7 +594,7 @@ void brush_imbuf_new(Brush *brush, short flt, short texfall, int size, ImBuf **o
dst[0] = FTOCHAR(rgba[0]*brush->rgb[0]);
dst[1] = FTOCHAR(rgba[1]*brush->rgb[1]);
dst[2] = FTOCHAR(rgba[2]*brush->rgb[2]);
- dst[3] = FTOCHAR(rgba[3]*brush->alpha*brush_curve_strength_clamp(brush, dist, maxsize));
+ dst[3] = FTOCHAR(rgba[3]*alpha*brush_curve_strength_clamp(brush, dist, radius));
}
}
}
@@ -470,7 +608,7 @@ void brush_imbuf_new(Brush *brush, short flt, short texfall, int size, ImBuf **o
typedef struct BrushPainterCache {
short enabled;
- int size; /* size override, if 0 uses brush->size */
+ int size; /* size override, if 0 uses 2*brush_size(brush) */
short flt; /* need float imbuf? */
short texonly; /* no alpha, color or fallof, only texture in imbuf */
@@ -515,8 +653,8 @@ BrushPainter *brush_painter_new(Brush *brush)
painter->firsttouch= 1;
painter->cache.lastsize= -1; /* force ibuf create in refresh */
- painter->startsize = brush->size;
- painter->startalpha = brush->alpha;
+ painter->startsize = brush_size(brush);
+ painter->startalpha = brush_alpha(brush);
painter->startjitter = brush->jitter;
painter->startspacing = brush->spacing;
@@ -549,8 +687,8 @@ void brush_painter_free(BrushPainter *painter)
{
Brush *brush = painter->brush;
- brush->size = painter->startsize;
- brush->alpha = painter->startalpha;
+ brush_set_size(brush, painter->startsize);
+ brush_set_alpha(brush, painter->startalpha);
brush->jitter = painter->startjitter;
brush->spacing = painter->startspacing;
@@ -567,9 +705,10 @@ static void brush_painter_do_partial(BrushPainter *painter, ImBuf *oldtexibuf, i
float *bf, *mf, *tf, *otf=NULL, xoff, yoff, xy[2], rgba[4];
char *b, *m, *t, *ot= NULL;
int dotexold, origx= x, origy= y;
+ const int radius= brush_size(brush);
- xoff = -brush->size/2.0f + 0.5f;
- yoff = -brush->size/2.0f + 0.5f;
+ xoff = -radius + 0.5f;
+ yoff = -radius + 0.5f;
xoff += (int)pos[0] - (int)painter->startpaintpos[0];
yoff += (int)pos[1] - (int)painter->startpaintpos[1];
@@ -651,14 +790,15 @@ static void brush_painter_fixed_tex_partial_update(BrushPainter *painter, float
BrushPainterCache *cache= &painter->cache;
ImBuf *oldtexibuf, *ibuf;
int imbflag, destx, desty, srcx, srcy, w, h, x1, y1, x2, y2;
+ const int diameter= 2*brush_size(brush);
imbflag= (cache->flt)? IB_rectfloat: IB_rect;
if (!cache->ibuf)
- cache->ibuf= IMB_allocImBuf(brush->size, brush->size, 32, imbflag, 0);
+ cache->ibuf= IMB_allocImBuf(diameter, diameter, 32, imbflag, 0);
ibuf= cache->ibuf;
oldtexibuf= cache->texibuf;
- cache->texibuf= IMB_allocImBuf(brush->size, brush->size, 32, imbflag, 0);
+ cache->texibuf= IMB_allocImBuf(diameter, diameter, 32, imbflag, 0);
if (oldtexibuf) {
srcx= srcy= 0;
@@ -705,9 +845,13 @@ static void brush_painter_refresh_cache(BrushPainter *painter, float *pos)
MTex *mtex= &brush->mtex;
int size;
short flt;
+ const int diameter= 2*brush_size(brush);
+ const float alpha= brush_alpha(brush);
- if ((brush->size != cache->lastsize) || (brush->alpha != cache->lastalpha)
- || (brush->jitter != cache->lastjitter)) {
+ if (diameter != cache->lastsize ||
+ alpha != cache->lastalpha ||
+ brush->jitter != cache->lastjitter)
+ {
if (cache->ibuf) {
IMB_freeImBuf(cache->ibuf);
cache->ibuf= NULL;
@@ -718,7 +862,7 @@ static void brush_painter_refresh_cache(BrushPainter *painter, float *pos)
}
flt= cache->flt;
- size= (cache->size)? cache->size: brush->size;
+ size= (cache->size)? cache->size: diameter;
if (!(mtex && mtex->tex) || (mtex->tex->type==0)) {
brush_imbuf_new(brush, flt, 0, size, &cache->ibuf);
@@ -730,8 +874,8 @@ static void brush_painter_refresh_cache(BrushPainter *painter, float *pos)
else
brush_imbuf_new(brush, flt, 2, size, &cache->ibuf);
- cache->lastsize= brush->size;
- cache->lastalpha= brush->alpha;
+ cache->lastsize= diameter;
+ cache->lastalpha= alpha;
cache->lastjitter= brush->jitter;
}
else if ((brush->flag & BRUSH_FIXED_TEX) && mtex && mtex->tex) {
@@ -750,10 +894,10 @@ void brush_painter_break_stroke(BrushPainter *painter)
static void brush_apply_pressure(BrushPainter *painter, Brush *brush, float pressure)
{
- if (brush->flag & BRUSH_ALPHA_PRESSURE)
- brush->alpha = MAX2(0.0, painter->startalpha*pressure);
- if (brush->flag & BRUSH_SIZE_PRESSURE)
- brush->size = MAX2(1.0, painter->startsize*pressure);
+ if (brush_use_alpha_pressure(brush))
+ brush_set_alpha(brush, MAX2(0.0, painter->startalpha*pressure));
+ if (brush_use_size_pressure(brush))
+ brush_set_size(brush, MAX2(1.0, painter->startsize*pressure));
if (brush->flag & BRUSH_JITTER_PRESSURE)
brush->jitter = MAX2(0.0, painter->startjitter*pressure);
if (brush->flag & BRUSH_SPACING_PRESSURE)
@@ -764,6 +908,8 @@ void brush_jitter_pos(Brush *brush, float *pos, float *jitterpos)
{
if(brush->jitter){
float rand_pos[2];
+ const int radius= brush_size(brush);
+ const int diameter= 2*radius;
// find random position within a circle of diameter 1
do {
@@ -771,8 +917,8 @@ void brush_jitter_pos(Brush *brush, float *pos, float *jitterpos)
rand_pos[1] = BLI_frand()-0.5f;
} while (len_v2(rand_pos) > 0.5f);
- jitterpos[0] = pos[0] + 2*rand_pos[0]*brush->size*brush->jitter;
- jitterpos[1] = pos[1] + 2*rand_pos[1]*brush->size*brush->jitter;
+ jitterpos[0] = pos[0] + 2*rand_pos[0]*diameter*brush->jitter;
+ jitterpos[1] = pos[1] + 2*rand_pos[1]*diameter*brush->jitter;
}
else {
VECCOPY2D(jitterpos, pos);
@@ -811,7 +957,7 @@ int brush_painter_paint(BrushPainter *painter, BrushFunc func, float *pos, doubl
double starttime, curtime= time;
/* compute brush spacing adapted to brush size */
- spacing= brush->rate; //brush->size*brush->spacing*0.01f;
+ spacing= brush->rate; //radius*brush->spacing*0.01f;
/* setup starting time, direction vector and accumulated time */
starttime= painter->accumtime;
@@ -842,11 +988,12 @@ int brush_painter_paint(BrushPainter *painter, BrushFunc func, float *pos, doubl
else {
float startdistance, spacing, step, paintpos[2], dmousepos[2], finalpos[2];
float t, len, press;
+ const int radius= brush_size(brush);
- /* compute brush spacing adapted to brush size, spacing may depend
+ /* compute brush spacing adapted to brush radius, spacing may depend
on pressure, so update it */
brush_apply_pressure(painter, brush, painter->lastpressure);
- spacing= MAX2(1.0f, brush->size)*brush->spacing*0.01f;
+ spacing= MAX2(1.0f, radius)*brush->spacing*0.01f;
/* setup starting distance, direction vector and accumulated distance */
startdistance= painter->accumdistance;
@@ -863,7 +1010,7 @@ int brush_painter_paint(BrushPainter *painter, BrushFunc func, float *pos, doubl
t = step/len;
press= (1.0f-t)*painter->lastpressure + t*pressure;
brush_apply_pressure(painter, brush, press);
- spacing= MAX2(1.0f, brush->size)*brush->spacing*0.01f;
+ spacing= MAX2(1.0f, radius)*brush->spacing*0.01f;
brush_jitter_pos(brush, paintpos, finalpos);
@@ -913,8 +1060,8 @@ int brush_painter_paint(BrushPainter *painter, BrushFunc func, float *pos, doubl
painter->lastmousepos[1]= pos[1];
painter->lastpressure= pressure;
- brush->alpha = painter->startalpha;
- brush->size = painter->startsize;
+ brush_set_alpha(brush, painter->startalpha);
+ brush_set_size(brush, painter->startsize);
brush->jitter = painter->startjitter;
brush->spacing = painter->startspacing;
@@ -1033,9 +1180,9 @@ void brush_radial_control_invoke(wmOperator *op, Brush *br, float size_weight)
float original_value= 0;
if(mode == WM_RADIALCONTROL_SIZE)
- original_value = sculpt_get_brush_size(br) * size_weight;
+ original_value = brush_size(br) * size_weight;
else if(mode == WM_RADIALCONTROL_STRENGTH)
- original_value = sculpt_get_brush_alpha(br);
+ original_value = brush_alpha(br);
else if(mode == WM_RADIALCONTROL_ANGLE) {
MTex *mtex = brush_active_texture(br);
if(mtex)
@@ -1053,15 +1200,15 @@ int brush_radial_control_exec(wmOperator *op, Brush *br, float size_weight)
const float conv = 0.017453293;
if(mode == WM_RADIALCONTROL_SIZE)
- if (sculpt_get_lock_brush_size(br)) {
+ if (brush_use_locked_size(br)) {
float initial_value = RNA_float_get(op->ptr, "initial_value");
- const float unprojected_radius = sculpt_get_brush_unprojected_radius(br);
- sculpt_set_brush_unprojected_radius(br, unprojected_radius * new_value/initial_value * size_weight);
+ const float unprojected_radius = brush_unprojected_radius(br);
+ brush_set_unprojected_radius(br, unprojected_radius * new_value/initial_value * size_weight);
}
else
- sculpt_set_brush_size(br, new_value * size_weight);
+ brush_set_size(br, new_value * size_weight);
else if(mode == WM_RADIALCONTROL_STRENGTH)
- sculpt_set_brush_alpha(br, new_value);
+ brush_set_alpha(br, new_value);
else if(mode == WM_RADIALCONTROL_ANGLE) {
MTex *mtex = brush_active_texture(br);
if(mtex)
@@ -1070,3 +1217,248 @@ int brush_radial_control_exec(wmOperator *op, Brush *br, float size_weight)
return OPERATOR_FINISHED;
}
+
+/* Unified Size and Strength */
+
+static void set_unified_settings(Brush *brush, short flag, int value)
+{
+ Scene *sce;
+ for (sce= G.main->scene.first; sce; sce= sce->id.next) {
+ if (sce->toolsettings &&
+ ELEM4(brush,
+ paint_brush(&(sce->toolsettings->imapaint.paint)),
+ paint_brush(&(sce->toolsettings->vpaint->paint)),
+ paint_brush(&(sce->toolsettings->wpaint->paint)),
+ paint_brush(&(sce->toolsettings->sculpt->paint))))
+ {
+ if (value)
+ sce->toolsettings->sculpt_paint_settings |= flag;
+ else
+ sce->toolsettings->sculpt_paint_settings &= ~flag;
+ }
+ }
+}
+
+static short unified_settings(Brush *brush)
+{
+ Scene *sce;
+ for (sce= G.main->scene.first; sce; sce= sce->id.next) {
+ if (sce->toolsettings &&
+ ELEM4(brush,
+ paint_brush(&(sce->toolsettings->imapaint.paint)),
+ paint_brush(&(sce->toolsettings->vpaint->paint)),
+ paint_brush(&(sce->toolsettings->wpaint->paint)),
+ paint_brush(&(sce->toolsettings->sculpt->paint))))
+ {
+ return sce->toolsettings->sculpt_paint_settings;
+ }
+ }
+
+ return 0;
+}
+
+static void set_unified_size(Brush *brush, int value)
+{
+ Scene *sce;
+ for (sce= G.main->scene.first; sce; sce= sce->id.next) {
+ if (sce->toolsettings &&
+ ELEM4(brush,
+ paint_brush(&(sce->toolsettings->imapaint.paint)),
+ paint_brush(&(sce->toolsettings->vpaint->paint)),
+ paint_brush(&(sce->toolsettings->wpaint->paint)),
+ paint_brush(&(sce->toolsettings->sculpt->paint))))
+ {
+ sce->toolsettings->sculpt_paint_unified_size= value;
+ }
+ }
+}
+
+static int unified_size(Brush *brush)
+{
+ Scene *sce;
+ for (sce= G.main->scene.first; sce; sce= sce->id.next) {
+ if (sce->toolsettings &&
+ ELEM4(brush,
+ paint_brush(&(sce->toolsettings->imapaint.paint)),
+ paint_brush(&(sce->toolsettings->vpaint->paint)),
+ paint_brush(&(sce->toolsettings->wpaint->paint)),
+ paint_brush(&(sce->toolsettings->sculpt->paint))))
+ {
+ return sce->toolsettings->sculpt_paint_unified_size;
+ }
+ }
+
+ return 35; // XXX magic number
+}
+
+static void set_unified_alpha(Brush *brush, float value)
+{
+ Scene *sce;
+ for (sce= G.main->scene.first; sce; sce= sce->id.next) {
+ if (sce->toolsettings &&
+ ELEM4(brush,
+ paint_brush(&(sce->toolsettings->imapaint.paint)),
+ paint_brush(&(sce->toolsettings->vpaint->paint)),
+ paint_brush(&(sce->toolsettings->wpaint->paint)),
+ paint_brush(&(sce->toolsettings->sculpt->paint))))
+ {
+ sce->toolsettings->sculpt_paint_unified_alpha= value;
+ }
+ }
+}
+
+static float unified_alpha(Brush *brush)
+{
+ Scene *sce;
+ for (sce= G.main->scene.first; sce; sce= sce->id.next) {
+ if (sce->toolsettings &&
+ ELEM4(brush,
+ paint_brush(&(sce->toolsettings->imapaint.paint)),
+ paint_brush(&(sce->toolsettings->vpaint->paint)),
+ paint_brush(&(sce->toolsettings->wpaint->paint)),
+ paint_brush(&(sce->toolsettings->sculpt->paint))))
+ {
+ return sce->toolsettings->sculpt_paint_unified_alpha;
+ }
+ }
+
+ return 0.5f; // XXX magic number
+}
+
+static void set_unified_unprojected_radius(Brush *brush, float value)
+{
+ Scene *sce;
+ for (sce= G.main->scene.first; sce; sce= sce->id.next) {
+ if (sce->toolsettings &&
+ ELEM4(brush,
+ paint_brush(&(sce->toolsettings->imapaint.paint)),
+ paint_brush(&(sce->toolsettings->vpaint->paint)),
+ paint_brush(&(sce->toolsettings->wpaint->paint)),
+ paint_brush(&(sce->toolsettings->sculpt->paint))))
+ {
+ sce->toolsettings->sculpt_paint_unified_unprojected_radius= value;
+ }
+ }
+}
+
+static float unified_unprojected_radius(Brush *brush)
+{
+ Scene *sce;
+ for (sce= G.main->scene.first; sce; sce= sce->id.next) {
+ if (sce->toolsettings &&
+ ELEM4(brush,
+ paint_brush(&(sce->toolsettings->imapaint.paint)),
+ paint_brush(&(sce->toolsettings->vpaint->paint)),
+ paint_brush(&(sce->toolsettings->wpaint->paint)),
+ paint_brush(&(sce->toolsettings->sculpt->paint))))
+ {
+ return sce->toolsettings->sculpt_paint_unified_unprojected_radius;
+ }
+ }
+
+ return 0.125f; // XXX magic number
+}
+void brush_set_size(Brush *brush, int size)
+{
+ if (unified_settings(brush) & SCULPT_PAINT_USE_UNIFIED_SIZE)
+ set_unified_size(brush, size);
+ else
+ brush->size= size;
+
+ //WM_main_add_notifier(NC_BRUSH|NA_EDITED, brush);
+}
+
+int brush_size(Brush *brush)
+{
+ return (unified_settings(brush) & SCULPT_PAINT_USE_UNIFIED_SIZE) ? unified_size(brush) : brush->size;
+}
+
+void brush_set_use_locked_size(Brush *brush, int value)
+{
+ if (unified_settings(brush) & SCULPT_PAINT_USE_UNIFIED_SIZE) {
+ set_unified_settings(brush, SCULPT_PAINT_UNIFIED_LOCK_BRUSH_SIZE, value);
+ }
+ else {
+ if (value)
+ brush->flag |= BRUSH_LOCK_SIZE;
+ else
+ brush->flag &= ~BRUSH_LOCK_SIZE;
+ }
+
+ //WM_main_add_notifier(NC_BRUSH|NA_EDITED, brush);
+}
+
+int brush_use_locked_size(Brush *brush)
+{
+ return (unified_settings(brush) & SCULPT_PAINT_USE_UNIFIED_SIZE) ? (unified_settings(brush) & SCULPT_PAINT_UNIFIED_LOCK_BRUSH_SIZE) : (brush->flag & BRUSH_LOCK_SIZE);
+}
+
+void brush_set_use_size_pressure(Brush *brush, int value)
+{
+ if (unified_settings(brush) & SCULPT_PAINT_USE_UNIFIED_SIZE) {
+ set_unified_settings(brush, SCULPT_PAINT_UNIFIED_SIZE_PRESSURE, value);
+ }
+ else {
+ if (value)
+ brush->flag |= BRUSH_SIZE_PRESSURE;
+ else
+ brush->flag &= ~BRUSH_SIZE_PRESSURE;
+ }
+
+ //WM_main_add_notifier(NC_BRUSH|NA_EDITED, brush);
+}
+
+int brush_use_size_pressure(Brush *brush)
+{
+ return (unified_settings(brush) & SCULPT_PAINT_USE_UNIFIED_SIZE) ? (unified_settings(brush) & SCULPT_PAINT_UNIFIED_SIZE_PRESSURE) : (brush->flag & BRUSH_SIZE_PRESSURE);
+}
+
+void brush_set_use_alpha_pressure(Brush *brush, int value)
+{
+ if (unified_settings(brush) & SCULPT_PAINT_USE_UNIFIED_ALPHA) {
+ set_unified_settings(brush, SCULPT_PAINT_UNIFIED_ALPHA_PRESSURE, value);
+ }
+ else {
+ if (value)
+ brush->flag |= BRUSH_ALPHA_PRESSURE;
+ else
+ brush->flag &= ~BRUSH_ALPHA_PRESSURE;
+ }
+
+ //WM_main_add_notifier(NC_BRUSH|NA_EDITED, brush);
+}
+
+int brush_use_alpha_pressure(Brush *brush)
+{
+ return (unified_settings(brush) & SCULPT_PAINT_USE_UNIFIED_ALPHA) ? (unified_settings(brush) & SCULPT_PAINT_UNIFIED_ALPHA_PRESSURE) : (brush->flag & BRUSH_ALPHA_PRESSURE);
+}
+
+void brush_set_unprojected_radius(Brush *brush, float unprojected_radius)
+{
+ if (unified_settings(brush) & SCULPT_PAINT_USE_UNIFIED_SIZE)
+ set_unified_unprojected_radius(brush, unprojected_radius);
+ else
+ brush->unprojected_radius= unprojected_radius;
+
+ //WM_main_add_notifier(NC_BRUSH|NA_EDITED, brush);
+}
+
+float brush_unprojected_radius(Brush *brush)
+{
+ return (unified_settings(brush) & SCULPT_PAINT_USE_UNIFIED_SIZE) ? unified_unprojected_radius(brush) : brush->unprojected_radius;
+}
+
+void brush_set_alpha(Brush *brush, float alpha)
+{
+ if (unified_settings(brush) & SCULPT_PAINT_USE_UNIFIED_ALPHA)
+ set_unified_alpha(brush, alpha);
+ else
+ brush->alpha= alpha;
+
+ //WM_main_add_notifier(NC_BRUSH|NA_EDITED, brush);
+}
+
+float brush_alpha(Brush *brush)
+{
+ return (unified_settings(brush) & SCULPT_PAINT_USE_UNIFIED_ALPHA) ? unified_alpha(brush) : brush->alpha;
+}
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index 7b6da4dd811..6ad43d72177 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -254,7 +254,8 @@ static void cdDM_drawVerts(DerivedMesh *dm)
else { /* use OpenGL VBOs or Vertex Arrays instead for better, faster rendering */
GPU_vertex_setup(dm);
if( !GPU_buffer_legacy(dm) ) {
- glDrawArrays(GL_POINTS,0,dm->drawObject->nelements);
+ if(dm->drawObject->nelements) glDrawArrays(GL_POINTS,0, dm->drawObject->nelements);
+ else glDrawArrays(GL_POINTS,0, dm->drawObject->nlooseverts);
}
GPU_buffer_unbind();
}
@@ -2082,6 +2083,11 @@ DerivedMesh *CDDM_from_template(DerivedMesh *source,
CDDerivedMesh *cddm = cdDM_create("CDDM_from_template dest");
DerivedMesh *dm = &cddm->dm;
+ /* ensure these are created if they are made on demand */
+ source->getVertDataArray(source, CD_ORIGINDEX);
+ source->getEdgeDataArray(source, CD_ORIGINDEX);
+ source->getTessFaceDataArray(source, CD_ORIGINDEX);
+
/* this does a copy of all non mvert/medge/mface layers */
DM_from_template(dm, source, DM_TYPE_CDDM, numVerts, numEdges, numFaces, numLoops, numPolys);
@@ -2199,9 +2205,7 @@ void CDDM_calc_normals(DerivedMesh *dm)
}
}
- mv->no[0] = (short)(no[0] * 32767.0f);
- mv->no[1] = (short)(no[1] * 32767.0f);
- mv->no[2] = (short)(no[2] * 32767.0f);
+ normal_float_to_short_v3(mv->no, no);
}
MEM_freeN(temp_nors);
diff --git a/source/blender/blenkernel/intern/cloth.c b/source/blender/blenkernel/intern/cloth.c
index 44b17265807..8d4bacb977f 100644
--- a/source/blender/blenkernel/intern/cloth.c
+++ b/source/blender/blenkernel/intern/cloth.c
@@ -27,6 +27,14 @@
#include "MEM_guardedalloc.h"
+#include "DNA_cloth_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
+#include "DNA_meshdata_types.h"
+
+#include "BLI_math.h"
+#include "BLI_edgehash.h"
+
#include "BKE_cdderivedmesh.h"
#include "BKE_cloth.h"
#include "BKE_effect.h"
@@ -149,6 +157,9 @@ void cloth_init ( ClothModifierData *clmd )
if(!clmd->sim_parms->effector_weights)
clmd->sim_parms->effector_weights = BKE_add_effector_weights(NULL);
+
+ if(clmd->point_cache)
+ clmd->point_cache->step = 1;
}
static BVHTree *bvhselftree_build_from_cloth (ClothModifierData *clmd, float epsilon)
diff --git a/source/blender/blenkernel/intern/collision.c b/source/blender/blenkernel/intern/collision.c
index 9b49ac9c6ff..af12d23b2c2 100644
--- a/source/blender/blenkernel/intern/collision.c
+++ b/source/blender/blenkernel/intern/collision.c
@@ -37,6 +37,11 @@
#include "DNA_object_types.h"
#include "DNA_object_force.h"
#include "DNA_scene_types.h"
+#include "DNA_meshdata_types.h"
+
+#include "BLI_blenlib.h"
+#include "BLI_math.h"
+#include "BLI_edgehash.h"
#include "BKE_DerivedMesh.h"
#include "BKE_global.h"
@@ -591,7 +596,7 @@ int cloth_collision_response_static ( ClothModifierData *clmd, CollisionModifier
return result;
}
-//Determines collisions on overlap, collisions are writen to collpair[i] and collision+number_collision_found is returned
+//Determines collisions on overlap, collisions are written to collpair[i] and collision+number_collision_found is returned
CollPair* cloth_collision ( ModifierData *md1, ModifierData *md2, BVHTreeOverlap *overlap, CollPair *collpair )
{
ClothModifierData *clmd = ( ClothModifierData * ) md1;
@@ -686,8 +691,7 @@ CollPair* cloth_collision ( ModifierData *md1, ModifierData *md2, BVHTreeOverlap
if ( distance <= ( epsilon1 + epsilon2 + ALMOST_ZERO ) )
{
- VECCOPY ( collpair->normal, collpair->vector );
- normalize_v3( collpair->normal );
+ normalize_v3_v3( collpair->normal, collpair->vector );
collpair->distance = distance;
collpair->flag = 0;
diff --git a/source/blender/blenkernel/intern/colortools.c b/source/blender/blenkernel/intern/colortools.c
index a07c18f42f3..90ffa39c88f 100644
--- a/source/blender/blenkernel/intern/colortools.c
+++ b/source/blender/blenkernel/intern/colortools.c
@@ -236,7 +236,7 @@ void curvemap_insert(CurveMap *cuma, float x, float y)
cuma->curve= cmp;
}
-void curvemap_reset(CurveMap *cuma, rctf *clipr, int preset)
+void curvemap_reset(CurveMap *cuma, rctf *clipr, int preset, int slope)
{
if(cuma->curve)
MEM_freeN(cuma->curve);
@@ -320,6 +320,20 @@ void curvemap_reset(CurveMap *cuma, rctf *clipr, int preset)
break;
}
+ /* mirror curve in x direction to have positive slope
+ * rather than default negative slope */
+ if (slope == CURVEMAP_SLOPE_POSITIVE) {
+ int i, last=cuma->totpoint-1;
+ CurveMapPoint *newpoints= MEM_dupallocN(cuma->curve);
+
+ for (i=0; i<cuma->totpoint; i++) {
+ newpoints[i].y = cuma->curve[last-i].y;
+ }
+
+ MEM_freeN(cuma->curve);
+ cuma->curve = newpoints;
+ }
+
if(cuma->table) {
MEM_freeN(cuma->table);
cuma->table= NULL;
@@ -768,36 +782,55 @@ void curvemapping_evaluate_premulRGBF(CurveMapping *cumap, float *vecout, const
vecout[2]= curvemap_evaluateF(cumap->cm+2, fac);
}
+
+#ifdef WITH_LCMS
+/* basic error handler, if we dont do this blender will exit */
+static int ErrorReportingFunction(int ErrorCode, const char *ErrorText)
+{
+ fprintf(stderr, "%s:%d\n", ErrorText, ErrorCode);
+ return 1;
+}
+#endif
+
void colorcorrection_do_ibuf(ImBuf *ibuf, const char *profile)
{
+#ifdef WITH_LCMS
if (ibuf->crect == NULL)
{
-#ifdef WITH_LCMS
- cmsHPROFILE imageProfile, proofingProfile;
- cmsHTRANSFORM hTransform;
+ cmsHPROFILE proofingProfile;
- ibuf->crect = MEM_mallocN(ibuf->x*ibuf->y*sizeof(int), "imbuf crect");
-
- imageProfile = cmsCreate_sRGBProfile();
- proofingProfile = cmsOpenProfileFromFile(profile, "r");
+ /* TODO, move to initialization area of code */
+ //cmsSetLogErrorHandler(ErrorReportingFunction);
+ cmsSetErrorHandler(ErrorReportingFunction);
+ /* will return NULL if the file isn't fount */
+ proofingProfile = cmsOpenProfileFromFile(profile, "r");
+
cmsErrorAction(LCMS_ERROR_SHOW);
-
- hTransform = cmsCreateProofingTransform(imageProfile, TYPE_RGBA_8, imageProfile, TYPE_RGBA_8,
- proofingProfile,
- INTENT_ABSOLUTE_COLORIMETRIC,
- INTENT_ABSOLUTE_COLORIMETRIC,
- cmsFLAGS_SOFTPROOFING);
-
- cmsDoTransform(hTransform, ibuf->rect, ibuf->crect, ibuf->x * ibuf->y);
-
- cmsDeleteTransform(hTransform);
- cmsCloseProfile(imageProfile);
- cmsCloseProfile(proofingProfile);
-#else
- ibuf->crect = ibuf->rect;
-#endif
+
+ if(proofingProfile) {
+ cmsHPROFILE imageProfile;
+ cmsHTRANSFORM hTransform;
+
+ ibuf->crect = MEM_mallocN(ibuf->x*ibuf->y*sizeof(int), "imbuf crect");
+
+ imageProfile = cmsCreate_sRGBProfile();
+
+
+ hTransform = cmsCreateProofingTransform(imageProfile, TYPE_RGBA_8, imageProfile, TYPE_RGBA_8,
+ proofingProfile,
+ INTENT_ABSOLUTE_COLORIMETRIC,
+ INTENT_ABSOLUTE_COLORIMETRIC,
+ cmsFLAGS_SOFTPROOFING);
+
+ cmsDoTransform(hTransform, ibuf->rect, ibuf->crect, ibuf->x * ibuf->y);
+
+ cmsDeleteTransform(hTransform);
+ cmsCloseProfile(imageProfile);
+ cmsCloseProfile(proofingProfile);
+ }
}
+#endif
}
/* only used for image editor curves */
diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c
index 673b3c6d482..dbf32c4224f 100644
--- a/source/blender/blenkernel/intern/constraint.c
+++ b/source/blender/blenkernel/intern/constraint.c
@@ -260,7 +260,7 @@ void constraint_mat_convertspace (Object *ob, bPoseChannel *pchan, float mat[][4
/* construct offs_bone the same way it is done in armature.c */
copy_m4_m3(offs_bone, pchan->bone->bone_mat);
- VECCOPY(offs_bone[3], pchan->bone->head);
+ copy_v3_v3(offs_bone[3], pchan->bone->head);
offs_bone[3][1]+= pchan->bone->parent->length;
if (pchan->bone->flag & BONE_HINGE) {
@@ -271,7 +271,7 @@ void constraint_mat_convertspace (Object *ob, bPoseChannel *pchan, float mat[][4
copy_m4_m4(tmat, pchan->bone->parent->arm_mat);
/* the location of actual parent transform */
- VECCOPY(tmat[3], offs_bone[3]);
+ copy_v3_v3(tmat[3], offs_bone[3]);
offs_bone[3][0]= offs_bone[3][1]= offs_bone[3][2]= 0.0f;
mul_m4_v3(pchan->parent->pose_mat, tmat[3]);
@@ -313,7 +313,7 @@ void constraint_mat_convertspace (Object *ob, bPoseChannel *pchan, float mat[][4
/* construct offs_bone the same way it is done in armature.c */
copy_m4_m3(offs_bone, pchan->bone->bone_mat);
- VECCOPY(offs_bone[3], pchan->bone->head);
+ copy_v3_v3(offs_bone[3], pchan->bone->head);
offs_bone[3][1]+= pchan->bone->parent->length;
if (pchan->bone->flag & BONE_HINGE) {
@@ -324,8 +324,8 @@ void constraint_mat_convertspace (Object *ob, bPoseChannel *pchan, float mat[][4
copy_m4_m4(tmat, pchan->bone->parent->arm_mat);
/* the location of actual parent transform */
- VECCOPY(tmat[3], offs_bone[3]);
- offs_bone[3][0]= offs_bone[3][1]= offs_bone[3][2]= 0.0f;
+ copy_v3_v3(tmat[3], offs_bone[3]);
+ zero_v3(offs_bone[3]);
mul_m4_v3(pchan->parent->pose_mat, tmat[3]);
mul_m4_m4m4(diff_mat, offs_bone, tmat);
@@ -404,7 +404,7 @@ static void contarget_get_mesh_mat (Scene *scene, Object *ob, char *substring, f
DerivedMesh *dm = NULL;
Mesh *me= ob->data;
BMEditMesh *em = me->edit_btmesh;
- float vec[3] = {0.0f, 0.0f, 0.0f}, tvec[3];
+ float vec[3] = {0.0f, 0.0f, 0.0f};
float normal[3] = {0.0f, 0.0f, 0.0f}, plane[3];
float imat[3][3], tmat[3][3];
int dgroup;
@@ -481,9 +481,9 @@ static void contarget_get_mesh_mat (Scene *scene, Object *ob, char *substring, f
mul_m3_v3(tmat, normal);
normalize_v3(normal);
- VECCOPY(plane, tmat[1]);
+ copy_v3_v3(plane, tmat[1]);
- VECCOPY(tmat[2], normal);
+ copy_v3_v3(tmat[2], normal);
cross_v3_v3v3(tmat[0], normal, plane);
cross_v3_v3v3(tmat[1], tmat[2], tmat[0]);
@@ -492,8 +492,7 @@ static void contarget_get_mesh_mat (Scene *scene, Object *ob, char *substring, f
/* apply the average coordinate as the new location */
- mul_v3_m4v3(tvec, ob->obmat, vec);
- VECCOPY(mat[3], tvec);
+ mul_v3_m4v3(mat[3], ob->obmat, vec);
}
}
@@ -556,7 +555,7 @@ static void contarget_get_lattice_mat (Object *ob, char *substring, float mat[][
mul_v3_m4v3(tvec, ob->obmat, vec);
/* copy new location to matrix */
- VECCOPY(mat[3], tvec);
+ copy_v3_v3(mat[3], tvec);
}
/* generic function to get the appropriate matrix for most target cases */
@@ -821,11 +820,11 @@ static void childof_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *ta
copy_m4_m4(invmat, data->invmat);
/* extract components of both matrices */
- VECCOPY(loc, ct->matrix[3]);
+ copy_v3_v3(loc, ct->matrix[3]);
mat4_to_eulO(eul, ct->rotOrder, ct->matrix);
mat4_to_size(size, ct->matrix);
- VECCOPY(loco, invmat[3]);
+ copy_v3_v3(loco, invmat[3]);
mat4_to_eulO(eulo, cob->rotOrder, invmat);
mat4_to_size(sizo, invmat);
@@ -942,9 +941,8 @@ static void vectomat (float *vec, float *target_up, short axis, short upflag, sh
float right[3];
float neg = -1;
int right_index;
-
- copy_v3_v3(n, vec);
- if (normalize_v3(n) == 0.0) {
+
+ if (normalize_v3_v3(n, vec) == 0.0) {
n[0] = 0.0;
n[1] = 0.0;
n[2] = 1.0;
@@ -955,9 +953,7 @@ static void vectomat (float *vec, float *target_up, short axis, short upflag, sh
/* n specifies the transformation of the track axis */
if (flags & TARGET_Z_UP) {
/* target Z axis is the global up axis */
- u[0] = target_up[0];
- u[1] = target_up[1];
- u[2] = target_up[2];
+ copy_v3_v3(u, target_up);
}
else {
/* world Z axis is the global up axis */
@@ -990,20 +986,13 @@ static void vectomat (float *vec, float *target_up, short axis, short upflag, sh
m[right_index][1] = neg * right[1];
m[right_index][2] = neg * right[2];
- m[upflag][0] = proj[0];
- m[upflag][1] = proj[1];
- m[upflag][2] = proj[2];
+ copy_v3_v3(m[upflag], proj);
- m[axis][0] = n[0];
- m[axis][1] = n[1];
- m[axis][2] = n[2];
+ copy_v3_v3(m[axis], n);
}
/* identity matrix - don't do anything if the two axes are the same */
else {
- m[0][0]= m[1][1]= m[2][2]= 1.0;
- m[0][1]= m[0][2]= 0.0;
- m[1][0]= m[1][2]= 0.0;
- m[2][0]= m[2][1]= 0.0;
+ unit_m3(m);
}
}
@@ -1129,10 +1118,9 @@ static void kinematic_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstra
else {
float vec[3];
/* move grabtarget into world space */
- VECCOPY(vec, data->grabtarget);
- mul_m4_v3(ob->obmat, vec);
+ mul_v3_m4v3(vec, ob->obmat, data->grabtarget);
copy_m4_m4(ct->matrix, ob->obmat);
- VECCOPY(ct->matrix[3], vec);
+ copy_v3_v3(ct->matrix[3], vec);
}
}
else
@@ -1267,7 +1255,7 @@ static void followpath_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstr
copy_m4_m4(totmat, rmat);
}
- VECCOPY(totmat[3], vec);
+ copy_v3_v3(totmat[3], vec);
mul_serie_m4(ct->matrix, ct->tar->obmat, totmat, NULL, NULL, NULL, NULL, NULL, NULL);
}
@@ -1386,7 +1374,7 @@ static void rotlimit_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *t
float eul[3];
float size[3];
- VECCOPY(loc, cob->matrix[3]);
+ copy_v3_v3(loc, cob->matrix[3]);
mat4_to_size(size, cob->matrix);
mat4_to_eulO(eul, cob->rotOrder, cob->matrix);
@@ -1547,7 +1535,7 @@ static void loclike_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *ta
float offset[3] = {0.0f, 0.0f, 0.0f};
if (data->flag & LOCLIKE_OFFSET)
- VECCOPY(offset, cob->matrix[3]);
+ copy_v3_v3(offset, cob->matrix[3]);
if (data->flag & LOCLIKE_X) {
cob->matrix[3][0] = ct->matrix[3][0];
@@ -1639,7 +1627,7 @@ static void rotlike_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *ta
float eul[3], obeul[3];
float size[3];
- VECCOPY(loc, cob->matrix[3]);
+ copy_v3_v3(loc, cob->matrix[3]);
mat4_to_size(size, cob->matrix);
/* to allow compatible rotations, must get both rotations in the order of the owner... */
@@ -2141,7 +2129,7 @@ static void actcon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraint
}
else {
/* extract location */
- VECCOPY(vec, tempmat[3]);
+ copy_v3_v3(vec, tempmat[3]);
axis= data->type - 20;
}
@@ -2297,10 +2285,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
normalize_v3(totmat[1]);
/* the x axis is fixed */
- totmat[0][0] = cob->matrix[0][0];
- totmat[0][1] = cob->matrix[0][1];
- totmat[0][2] = cob->matrix[0][2];
- normalize_v3(totmat[0]);
+ normalize_v3_v3(totmat[0], cob->matrix[0]);
/* the z axis gets mapped onto a third orthogonal vector */
cross_v3_v3v3(totmat[2], totmat[0], totmat[1]);
@@ -2314,10 +2299,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
normalize_v3(totmat[2]);
/* the x axis is fixed */
- totmat[0][0] = cob->matrix[0][0];
- totmat[0][1] = cob->matrix[0][1];
- totmat[0][2] = cob->matrix[0][2];
- normalize_v3(totmat[0]);
+ normalize_v3_v3(totmat[0], cob->matrix[0]);
/* the z axis gets mapped onto a third orthogonal vector */
cross_v3_v3v3(totmat[1], totmat[2], totmat[0]);
@@ -2332,10 +2314,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
negate_v3(totmat[1]);
/* the x axis is fixed */
- totmat[0][0] = cob->matrix[0][0];
- totmat[0][1] = cob->matrix[0][1];
- totmat[0][2] = cob->matrix[0][2];
- normalize_v3(totmat[0]);
+ normalize_v3_v3(totmat[0], cob->matrix[0]);
/* the z axis gets mapped onto a third orthogonal vector */
cross_v3_v3v3(totmat[2], totmat[0], totmat[1]);
@@ -2350,10 +2329,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
negate_v3(totmat[2]);
/* the x axis is fixed */
- totmat[0][0] = cob->matrix[0][0];
- totmat[0][1] = cob->matrix[0][1];
- totmat[0][2] = cob->matrix[0][2];
- normalize_v3(totmat[0]);
+ normalize_v3_v3(totmat[0], cob->matrix[0]);
/* the z axis gets mapped onto a third orthogonal vector */
cross_v3_v3v3(totmat[1], totmat[2], totmat[0]);
@@ -2361,9 +2337,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
break;
default:
{
- totmat[0][0] = 1;totmat[0][1] = 0;totmat[0][2] = 0;
- totmat[1][0] = 0;totmat[1][1] = 1;totmat[1][2] = 0;
- totmat[2][0] = 0;totmat[2][1] = 0;totmat[2][2] = 1;
+ unit_m3(totmat);
}
break;
}
@@ -2380,11 +2354,8 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
normalize_v3(totmat[0]);
/* the y axis is fixed */
- totmat[1][0] = cob->matrix[1][0];
- totmat[1][1] = cob->matrix[1][1];
- totmat[1][2] = cob->matrix[1][2];
- normalize_v3(totmat[1]);
-
+ normalize_v3_v3(totmat[1], cob->matrix[1]);
+
/* the z axis gets mapped onto a third orthogonal vector */
cross_v3_v3v3(totmat[2], totmat[0], totmat[1]);
}
@@ -2397,10 +2368,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
normalize_v3(totmat[2]);
/* the y axis is fixed */
- totmat[1][0] = cob->matrix[1][0];
- totmat[1][1] = cob->matrix[1][1];
- totmat[1][2] = cob->matrix[1][2];
- normalize_v3(totmat[1]);
+ normalize_v3_v3(totmat[1], cob->matrix[1]);
/* the z axis gets mapped onto a third orthogonal vector */
cross_v3_v3v3(totmat[0], totmat[1], totmat[2]);
@@ -2415,10 +2383,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
negate_v3(totmat[0]);
/* the y axis is fixed */
- totmat[1][0] = cob->matrix[1][0];
- totmat[1][1] = cob->matrix[1][1];
- totmat[1][2] = cob->matrix[1][2];
- normalize_v3(totmat[1]);
+ normalize_v3_v3(totmat[1], cob->matrix[1]);
/* the z axis gets mapped onto a third orthogonal vector */
cross_v3_v3v3(totmat[2], totmat[0], totmat[1]);
@@ -2433,10 +2398,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
negate_v3(totmat[2]);
/* the y axis is fixed */
- totmat[1][0] = cob->matrix[1][0];
- totmat[1][1] = cob->matrix[1][1];
- totmat[1][2] = cob->matrix[1][2];
- normalize_v3(totmat[1]);
+ normalize_v3_v3(totmat[1], cob->matrix[1]);
/* the z axis gets mapped onto a third orthogonal vector */
cross_v3_v3v3(totmat[0], totmat[1], totmat[2]);
@@ -2444,9 +2406,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
break;
default:
{
- totmat[0][0] = 1;totmat[0][1] = 0;totmat[0][2] = 0;
- totmat[1][0] = 0;totmat[1][1] = 1;totmat[1][2] = 0;
- totmat[2][0] = 0;totmat[2][1] = 0;totmat[2][2] = 1;
+ unit_m3(totmat);
}
break;
}
@@ -2463,10 +2423,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
normalize_v3(totmat[0]);
/* the z axis is fixed */
- totmat[2][0] = cob->matrix[2][0];
- totmat[2][1] = cob->matrix[2][1];
- totmat[2][2] = cob->matrix[2][2];
- normalize_v3(totmat[2]);
+ normalize_v3_v3(totmat[2], cob->matrix[2]);
/* the x axis gets mapped onto a third orthogonal vector */
cross_v3_v3v3(totmat[1], totmat[2], totmat[0]);
@@ -2480,10 +2437,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
normalize_v3(totmat[1]);
/* the z axis is fixed */
- totmat[2][0] = cob->matrix[2][0];
- totmat[2][1] = cob->matrix[2][1];
- totmat[2][2] = cob->matrix[2][2];
- normalize_v3(totmat[2]);
+ normalize_v3_v3(totmat[2], cob->matrix[2]);
/* the x axis gets mapped onto a third orthogonal vector */
cross_v3_v3v3(totmat[0], totmat[1], totmat[2]);
@@ -2498,10 +2452,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
negate_v3(totmat[0]);
/* the z axis is fixed */
- totmat[2][0] = cob->matrix[2][0];
- totmat[2][1] = cob->matrix[2][1];
- totmat[2][2] = cob->matrix[2][2];
- normalize_v3(totmat[2]);
+ normalize_v3_v3(totmat[2], cob->matrix[2]);
/* the x axis gets mapped onto a third orthogonal vector */
cross_v3_v3v3(totmat[1], totmat[2], totmat[0]);
@@ -2516,10 +2467,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
negate_v3(totmat[1]);
/* the z axis is fixed */
- totmat[2][0] = cob->matrix[2][0];
- totmat[2][1] = cob->matrix[2][1];
- totmat[2][2] = cob->matrix[2][2];
- normalize_v3(totmat[2]);
+ normalize_v3_v3(totmat[2], cob->matrix[2]);
/* the x axis gets mapped onto a third orthogonal vector */
cross_v3_v3v3(totmat[0], totmat[1], totmat[2]);
@@ -2527,9 +2475,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
break;
default:
{
- totmat[0][0] = 1;totmat[0][1] = 0;totmat[0][2] = 0;
- totmat[1][0] = 0;totmat[1][1] = 1;totmat[1][2] = 0;
- totmat[2][0] = 0;totmat[2][1] = 0;totmat[2][2] = 1;
+ unit_m3(totmat);
}
break;
}
@@ -2537,19 +2483,13 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
break;
default:
{
- totmat[0][0] = 1;totmat[0][1] = 0;totmat[0][2] = 0;
- totmat[1][0] = 0;totmat[1][1] = 1;totmat[1][2] = 0;
- totmat[2][0] = 0;totmat[2][1] = 0;totmat[2][2] = 1;
+ unit_m3(totmat);
}
break;
}
/* Block to keep matrix heading */
- tmpmat[0][0] = cob->matrix[0][0];tmpmat[0][1] = cob->matrix[0][1];tmpmat[0][2] = cob->matrix[0][2];
- tmpmat[1][0] = cob->matrix[1][0];tmpmat[1][1] = cob->matrix[1][1];tmpmat[1][2] = cob->matrix[1][2];
- tmpmat[2][0] = cob->matrix[2][0];tmpmat[2][1] = cob->matrix[2][1];tmpmat[2][2] = cob->matrix[2][2];
- normalize_v3(tmpmat[0]);
- normalize_v3(tmpmat[1]);
- normalize_v3(tmpmat[2]);
+ copy_m3_m4(tmpmat, cob->matrix);
+ normalize_m3(tmpmat);
invert_m3_m3(invmat, tmpmat);
mul_m3_m3m3(tmpmat, totmat, invmat);
totmat[0][0] = tmpmat[0][0];totmat[0][1] = tmpmat[0][1];totmat[0][2] = tmpmat[0][2];
@@ -2562,9 +2502,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
totmat[1][0],totmat[1][1],totmat[1][2],
totmat[2][0],totmat[2][1],totmat[2][2]);
if (mdet==0) {
- totmat[0][0] = 1;totmat[0][1] = 0;totmat[0][2] = 0;
- totmat[1][0] = 0;totmat[1][1] = 1;totmat[1][2] = 0;
- totmat[2][0] = 0;totmat[2][1] = 0;totmat[2][2] = 1;
+ unit_m3(totmat);
}
/* apply out transformaton to the object */
@@ -2692,7 +2630,7 @@ static void distlimit_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
interp_v3_v3v3(dvec, ct->matrix[3], cob->matrix[3], sfac);
/* copy new vector onto owner */
- VECCOPY(cob->matrix[3], dvec);
+ copy_v3_v3(cob->matrix[3], dvec);
}
}
}
@@ -2775,16 +2713,10 @@ static void stretchto_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
mat4_to_size(size, cob->matrix);
/* store X orientation before destroying obmat */
- xx[0] = cob->matrix[0][0];
- xx[1] = cob->matrix[0][1];
- xx[2] = cob->matrix[0][2];
- normalize_v3(xx);
+ normalize_v3_v3(xx, cob->matrix[0]);
/* store Z orientation before destroying obmat */
- zz[0] = cob->matrix[2][0];
- zz[1] = cob->matrix[2][1];
- zz[2] = cob->matrix[2][2];
- normalize_v3(zz);
+ normalize_v3_v3(zz, cob->matrix[2]);
sub_v3_v3v3(vec, cob->matrix[3], ct->matrix[3]);
vec[0] /= size[0];
@@ -2839,9 +2771,7 @@ static void stretchto_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
normalize_v3(vec);
/* new Y aligns object target connection*/
- totmat[1][0] = -vec[0];
- totmat[1][1] = -vec[1];
- totmat[1][2] = -vec[2];
+ negate_v3_v3(totmat[1], vec);
switch (data->plane) {
case PLANE_X:
/* build new Z vector */
@@ -2850,16 +2780,11 @@ static void stretchto_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
normalize_v3(orth);
/* new Z*/
- totmat[2][0] = orth[0];
- totmat[2][1] = orth[1];
- totmat[2][2] = orth[2];
+ copy_v3_v3(totmat[2], orth);
/* we decided to keep X plane*/
cross_v3_v3v3(xx, orth, vec);
- normalize_v3(xx);
- totmat[0][0] = xx[0];
- totmat[0][1] = xx[1];
- totmat[0][2] = xx[2];
+ normalize_v3_v3(totmat[0], xx);
break;
case PLANE_Z:
/* build new X vector */
@@ -2868,16 +2793,11 @@ static void stretchto_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
normalize_v3(orth);
/* new X */
- totmat[0][0] = -orth[0];
- totmat[0][1] = -orth[1];
- totmat[0][2] = -orth[2];
+ negate_v3_v3(totmat[0], orth);
/* we decided to keep Z */
cross_v3_v3v3(zz, orth, vec);
- normalize_v3(zz);
- totmat[2][0] = zz[0];
- totmat[2][1] = zz[1];
- totmat[2][2] = zz[2];
+ normalize_v3_v3(totmat[2], zz);
break;
} /* switch (data->plane) */
@@ -3009,10 +2929,10 @@ static void minmax_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *tar
obmat[3][index] = tarmat[3][index] + data->offset;
if (data->flag & MINMAX_STICKY) {
if (data->flag & MINMAX_STUCK) {
- VECCOPY(obmat[3], data->cache);
+ copy_v3_v3(obmat[3], data->cache);
}
else {
- VECCOPY(data->cache, obmat[3]);
+ copy_v3_v3(data->cache, obmat[3]);
data->flag |= MINMAX_STUCK;
}
}
@@ -3022,7 +2942,7 @@ static void minmax_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *tar
copy_m4_m4(cob->matrix, tmat);
}
else {
- VECCOPY(cob->matrix[3], obmat[3]);
+ copy_v3_v3(cob->matrix[3], obmat[3]);
}
}
else {
@@ -3177,7 +3097,7 @@ static void clampto_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *ta
copy_m4_m4(obmat, cob->matrix);
unit_m4(targetMatrix);
- VECCOPY(ownLoc, obmat[3]);
+ copy_v3_v3(ownLoc, obmat[3]);
INIT_MINMAX(curveMin, curveMax)
minmax_object(ct->tar, curveMin, curveMax);
@@ -3266,14 +3186,14 @@ static void clampto_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *ta
/* 3. position on curve */
if (where_on_path(ct->tar, curvetime, vec, dir, NULL, NULL, NULL) ) {
unit_m4(totmat);
- VECCOPY(totmat[3], vec);
+ copy_v3_v3(totmat[3], vec);
mul_serie_m4(targetMatrix, ct->tar->obmat, totmat, NULL, NULL, NULL, NULL, NULL, NULL);
}
}
/* obtain final object position */
- VECCOPY(cob->matrix[3], targetMatrix[3]);
+ copy_v3_v3(cob->matrix[3], targetMatrix[3]);
}
}
@@ -3365,7 +3285,7 @@ static void transform_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
}
/* extract components of owner's matrix */
- VECCOPY(loc, cob->matrix[3]);
+ copy_v3_v3(loc, cob->matrix[3]);
mat4_to_eulO(eul, cob->rotOrder, cob->matrix);
mat4_to_size(size, cob->matrix);
@@ -3559,7 +3479,7 @@ static void shrinkwrap_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstr
fail = TRUE;
break;
}
- VECCOPY(co, hit.co);
+ copy_v3_v3(co, hit.co);
break;
}
@@ -3575,7 +3495,7 @@ static void shrinkwrap_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstr
/* co is in local object coordinates, change it to global and update target position */
mul_m4_v3(cob->matrix, co);
- VECCOPY(ct->matrix[3], co);
+ copy_v3_v3(ct->matrix[3], co);
}
}
}
@@ -3587,7 +3507,7 @@ static void shrinkwrap_evaluate (bConstraint *con, bConstraintOb *cob, ListBase
/* only evaluate if there is a target */
if (VALID_CONS_TARGET(ct))
{
- VECCOPY(cob->matrix[3], ct->matrix[3]);
+ copy_v3_v3(cob->matrix[3], ct->matrix[3]);
}
}
@@ -3671,23 +3591,23 @@ static void damptrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
* - the normalisation step at the end should take care of any unwanted scaling
* left over in the 3x3 matrix we used
*/
- VECCOPY(obvec, track_dir_vecs[data->trackflag]);
+ copy_v3_v3(obvec, track_dir_vecs[data->trackflag]);
mul_mat3_m4_v3(cob->matrix, obvec);
if (normalize_v3(obvec) == 0.0f) {
/* exceptional case - just use the track vector as appropriate */
- VECCOPY(obvec, track_dir_vecs[data->trackflag]);
+ copy_v3_v3(obvec, track_dir_vecs[data->trackflag]);
}
/* find the (unit) direction vector going from the owner to the target */
- VECCOPY(obloc, cob->matrix[3]);
+ copy_v3_v3(obloc, cob->matrix[3]);
sub_v3_v3v3(tarvec, ct->matrix[3], obloc);
if (normalize_v3(tarvec) == 0.0f) {
/* the target is sitting on the owner, so just make them use the same direction vectors */
// FIXME: or would it be better to use the pure direction vector?
- VECCOPY(tarvec, obvec);
- //VECCOPY(tarvec, track_dir_vecs[data->trackflag]);
+ copy_v3_v3(tarvec, obvec);
+ //copy_v3_v3(tarvec, track_dir_vecs[data->trackflag]);
}
/* determine the axis-angle rotation, which represents the smallest possible rotation
@@ -3715,7 +3635,7 @@ static void damptrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
mul_m4_m3m4(tmat, rmat, cob->matrix); // m1, m3, m2
copy_m4_m4(cob->matrix, tmat);
- VECCOPY(cob->matrix[3], obloc);
+ copy_v3_v3(cob->matrix[3], obloc);
}
}
@@ -3910,7 +3830,7 @@ static void pivotcon_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *t
}
else {
/* directly use the 'offset' specified as an absolute position instead */
- VECCOPY(pivot, data->offset);
+ copy_v3_v3(pivot, data->offset);
}
}
diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c
index 9520df71b60..24dcb4c5846 100644
--- a/source/blender/blenkernel/intern/context.c
+++ b/source/blender/blenkernel/intern/context.c
@@ -25,6 +25,9 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#include <string.h>
+#include <stddef.h>
+
#include "MEM_guardedalloc.h"
#include "DNA_scene_types.h"
@@ -47,8 +50,6 @@
#include "BPY_extern.h"
#endif
-#include <string.h>
-
/* struct */
struct bContext {
@@ -571,13 +572,12 @@ int CTX_data_get(const bContext *C, const char *member, PointerRNA *r_ptr, ListB
static void data_dir_add(ListBase *lb, const char *member)
{
LinkData *link;
-
+
if(strcmp(member, "scene") == 0) /* exception */
return;
- for(link=lb->first; link; link=link->next)
- if(strcmp(link->data, member) == 0)
- return;
+ if(BLI_findstring(lb, member, offsetof(LinkData, data)))
+ return;
link= MEM_callocN(sizeof(LinkData), "LinkData");
link->data= (void*)member;
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c
index 2f0c83507f0..5f5958f8893 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -46,6 +46,7 @@
#include "DNA_scene_types.h"
#include "DNA_vfont_types.h"
#include "DNA_meshdata_types.h"
+#include "DNA_object_types.h"
#include "BKE_animsys.h"
#include "BKE_anim.h"
@@ -59,6 +60,8 @@
#include "BKE_object.h"
#include "BKE_utildefines.h" // VECCOPY
+#include "ED_curve.h"
+
/* globals */
/* local */
@@ -105,13 +108,8 @@ void free_curve(Curve *cu)
BLI_freelistN(&cu->bev);
freedisplist(&cu->disp);
BKE_free_editfont(cu);
-
- if(cu->editnurb) {
- freeNurblist(cu->editnurb);
- MEM_freeN(cu->editnurb);
- cu->editnurb= NULL;
- }
+ free_curve_editNurb(cu);
unlink_curve(cu);
BKE_free_animdata((ID *)cu);
@@ -130,7 +128,7 @@ Curve *add_curve(char *name, int type)
cu= alloc_libblock(&G.main->curve, ID_CU, name);
cu->size[0]= cu->size[1]= cu->size[2]= 1.0;
- cu->flag= CU_FRONT|CU_BACK|CU_PATH_RADIUS;
+ cu->flag= CU_FRONT|CU_BACK|CU_DEFORM_BOUNDS_OFF|CU_PATH_RADIUS;
cu->pathlen= 100;
cu->resolu= cu->resolv= 12;
cu->width= 1.0;
@@ -149,7 +147,7 @@ Curve *add_curve(char *name, int type)
cu->vfont->id.us+=4;
cu->str= MEM_mallocN(12, "str");
strcpy(cu->str, "Text");
- cu->pos= 4;
+ cu->len= cu->pos= 4;
cu->strinfo= MEM_callocN(12*sizeof(CharInfo), "strinfo new");
cu->totbox= cu->actbox= 1;
cu->tb= MEM_callocN(MAXTEXTBOX*sizeof(TextBox), "textbox");
@@ -280,7 +278,7 @@ void tex_space_curve(Curve *cu)
{
DispList *dl;
BoundBox *bb;
- float *fp, min[3], max[3], loc[3], size[3];
+ float *fp, min[3], max[3];
int tot, doit= 0;
if(cu->bb==NULL) cu->bb= MEM_callocN(sizeof(BoundBox), "boundbox");
@@ -307,20 +305,15 @@ void tex_space_curve(Curve *cu)
min[0] = min[1] = min[2] = -1.0f;
max[0] = max[1] = max[2] = 1.0f;
}
-
- loc[0]= (min[0]+max[0])/2.0f;
- loc[1]= (min[1]+max[1])/2.0f;
- loc[2]= (min[2]+max[2])/2.0f;
-
- size[0]= (max[0]-min[0])/2.0f;
- size[1]= (max[1]-min[1])/2.0f;
- size[2]= (max[2]-min[2])/2.0f;
boundbox_set_from_min_max(bb, min, max);
if(cu->texflag & CU_AUTOSPACE) {
- VECCOPY(cu->loc, loc);
- VECCOPY(cu->size, size);
+ mid_v3_v3v3(cu->loc, min, max);
+ cu->size[0]= (max[0]-min[0])/2.0f;
+ cu->size[1]= (max[1]-min[1])/2.0f;
+ cu->size[2]= (max[2]-min[2])/2.0f;
+
cu->rot[0]= cu->rot[1]= cu->rot[2]= 0.0;
if(cu->size[0]==0.0) cu->size[0]= 1.0;
@@ -1230,6 +1223,8 @@ void makebevelcurve(Scene *scene, Object *ob, ListBase *disp, int forRender)
// XXX if( ob == obedit && ob->type == OB_FONT ) return;
if(cu->bevobj) {
+ if (cu->bevobj->type!=OB_CURVE) return;
+
bevcu= cu->bevobj->data;
if(bevcu->ext1==0.0 && bevcu->ext2==0.0) {
ListBase bevdisp= {NULL, NULL};
@@ -1579,7 +1574,7 @@ static void alfa_bezpart(BezTriple *prevbezt, BezTriple *bezt, Nurb *nu, float *
for(a=0; a<resolu; a++, fac+= dfac) {
if (tilt_array) {
- if (nu->tilt_interp==3) { /* May as well support for tilt also 2.47 ease interp */
+ if (nu->tilt_interp==KEY_CU_EASE) { /* May as well support for tilt also 2.47 ease interp */
*tilt_array = prevbezt->alfa + (bezt->alfa - prevbezt->alfa)*(3.0f*fac*fac - 2.0f*fac*fac*fac);
} else {
key_curve_position_weights(fac, t, nu->tilt_interp);
@@ -1590,7 +1585,7 @@ static void alfa_bezpart(BezTriple *prevbezt, BezTriple *bezt, Nurb *nu, float *
}
if (radius_array) {
- if (nu->radius_interp==3) {
+ if (nu->radius_interp==KEY_CU_EASE) {
/* Support 2.47 ease interp
* Note! - this only takes the 2 points into account,
* giving much more localized results to changes in radius, sometimes you want that */
@@ -2009,8 +2004,10 @@ void makeBevelList(Object *ob)
/* STEP 1: MAKE POLYS */
BLI_freelistN(&(cu->bev));
- if(cu->editnurb && ob->type!=OB_FONT) nu= cu->editnurb->first;
- else nu= cu->nurb.first;
+ if(cu->editnurb && ob->type!=OB_FONT) {
+ ListBase *nurbs= ED_curve_editnurbs(cu);
+ nu= nurbs->first;
+ } else nu= cu->nurb.first;
while(nu) {
@@ -3000,7 +2997,7 @@ float (*curve_getKeyVertexCos(Curve *cu, ListBase *lb, float *key))[3]
VECCOPY(co, key); co+=3; key+=3;
VECCOPY(co, key); co+=3; key+=3;
VECCOPY(co, key); co+=3; key+=3;
- key++; /* skip tilt */
+ key+=3; /* skip tilt */
}
}
else {
@@ -3079,7 +3076,7 @@ int clamp_nurb_order_u( struct Nurb *nu )
nu->orderu= nu->pntsu;
change= 1;
}
- if(((nu->flag & CU_NURB_CYCLIC)==0) && (nu->flagu & CU_NURB_BEZIER)) {
+ if(((nu->flagu & CU_NURB_CYCLIC)==0) && (nu->flagu & CU_NURB_BEZIER)) {
CLAMP(nu->orderu, 3,4);
change= 1;
}
@@ -3093,12 +3090,117 @@ int clamp_nurb_order_v( struct Nurb *nu)
nu->orderv= nu->pntsv;
change= 1;
}
- if(((nu->flag & CU_NURB_CYCLIC)==0) && (nu->flagv & CU_NURB_BEZIER)) {
+ if(((nu->flagv & CU_NURB_CYCLIC)==0) && (nu->flagv & CU_NURB_BEZIER)) {
CLAMP(nu->orderv, 3,4);
change= 1;
}
return change;
}
+/* Get edit nurbs or normal nurbs list */
+ListBase *BKE_curve_nurbs(Curve *cu)
+{
+ if (cu->editnurb) {
+ return ED_curve_editnurbs(cu);
+ }
+
+ return &cu->nurb;
+}
+
+
+/* basic vertex data functions */
+int minmax_curve(Curve *cu, float min[3], float max[3])
+{
+ ListBase *nurb_lb= BKE_curve_nurbs(cu);
+ Nurb *nu;
+
+ for(nu= nurb_lb->first; nu; nu= nu->next)
+ minmaxNurb(nu, min, max);
+
+ return (nurb_lb->first != NULL);
+}
+
+int curve_center_median(Curve *cu, float cent[3])
+{
+ ListBase *nurb_lb= BKE_curve_nurbs(cu);
+ Nurb *nu;
+ int total= 0;
+ zero_v3(cent);
+ for(nu= nurb_lb->first; nu; nu= nu->next) {
+ int i;
+
+ if(nu->type == CU_BEZIER) {
+ BezTriple *bezt;
+ i= nu->pntsu;
+ total += i * 3;
+ for(bezt= nu->bezt; i--; bezt++) {
+ add_v3_v3(cent, bezt->vec[0]);
+ add_v3_v3(cent, bezt->vec[1]);
+ add_v3_v3(cent, bezt->vec[2]);
+ }
+ }
+ else {
+ BPoint *bp;
+ i= nu->pntsu*nu->pntsv;
+ total += i;
+ for(bp= nu->bp; i--; bp++) {
+ add_v3_v3(cent, bp->vec);
+ }
+ }
+ }
+
+ mul_v3_fl(cent, 1.0f/(float)total);
+
+ return (total != 0);
+}
+
+int curve_center_bounds(Curve *cu, float cent[3])
+{
+ float min[3], max[3];
+ INIT_MINMAX(min, max);
+ if(minmax_curve(cu, min, max)) {
+ mid_v3_v3v3(cent, min, max);
+ return 1;
+ }
+
+ return 0;
+}
+
+void curve_translate(Curve *cu, float offset[3], int do_keys)
+{
+ ListBase *nurb_lb= BKE_curve_nurbs(cu);
+ Nurb *nu;
+ int i;
+
+ for(nu= nurb_lb->first; nu; nu= nu->next) {
+ BezTriple *bezt;
+ BPoint *bp;
+
+ if(nu->type == CU_BEZIER) {
+ i= nu->pntsu;
+ for(bezt= nu->bezt; i--; bezt++) {
+ add_v3_v3(bezt->vec[0], offset);
+ add_v3_v3(bezt->vec[1], offset);
+ add_v3_v3(bezt->vec[2], offset);
+ }
+ }
+ else {
+ i= nu->pntsu*nu->pntsv;
+ for(bp= nu->bp; i--; bp++) {
+ add_v3_v3(bp->vec, offset);
+ }
+ }
+ }
+
+ if (do_keys && cu->key) {
+ KeyBlock *kb;
+ for (kb=cu->key->block.first; kb; kb=kb->next) {
+ float *fp= kb->data;
+ for (i= kb->totelem; i--; fp+=3) {
+ add_v3_v3(fp, offset);
+ }
+ }
+ }
+}
diff --git a/source/blender/blenkernel/intern/deform.c b/source/blender/blenkernel/intern/deform.c
index 1ab0cb8d29d..be28553f347 100644
--- a/source/blender/blenkernel/intern/deform.c
+++ b/source/blender/blenkernel/intern/deform.c
@@ -177,7 +177,7 @@ void defvert_flip (MDeformVert *dvert, int *flip_map)
}
-bDeformGroup *defgroup_find_name (Object *ob, char *name)
+bDeformGroup *defgroup_find_name (Object *ob, const char *name)
{
/* return a pointer to the deform group with this name
* or return NULL otherwise.
diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c
index 142f80a350e..382c0690ae3 100644
--- a/source/blender/blenkernel/intern/depsgraph.c
+++ b/source/blender/blenkernel/intern/depsgraph.c
@@ -41,6 +41,8 @@
#include "DNA_screen_types.h"
#include "DNA_windowmanager_types.h"
+#include "MEM_guardedalloc.h"
+
#include "BLI_ghash.h"
#include "BKE_animsys.h"
@@ -59,13 +61,7 @@
#include "BKE_scene.h"
#include "BKE_screen.h"
-#include "MEM_guardedalloc.h"
-
-#ifndef DISABLE_PYTHON
-#include "BPY_extern.h"
-#endif
-
- #include "depsgraph_private.h"
+#include "depsgraph_private.h"
/* Queue and stack operations for dag traversal
*
@@ -658,7 +654,7 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Scene *scene, O
dag_add_relation(dag,scenenode,node,DAG_RL_SCENE, "Scene Relation");
}
-struct DagForest *build_dag(struct Scene *sce, short mask)
+struct DagForest *build_dag(Main *bmain, Scene *sce, short mask)
{
Base *base;
Object *ob;
@@ -695,7 +691,7 @@ struct DagForest *build_dag(struct Scene *sce, short mask)
}
/* add groups used in current scene objects */
- for(group= G.main->group.first; group; group= group->id.next) {
+ for(group= bmain->group.first; group; group= group->id.next) {
if(group->id.flag & LIB_DOIT) {
for(go= group->gobject.first; go; go= go->next) {
build_dag_object(dag, scenenode, sce, go->ob, mask);
@@ -1605,7 +1601,7 @@ static void dag_editors_update(Main *bmain, ID *id)
}
/* groups with objects in this scene need to be put in the right order as well */
-static void scene_sort_groups(Scene *sce)
+static void scene_sort_groups(Main *bmain, Scene *sce)
{
Base *base;
Group *group;
@@ -1613,14 +1609,14 @@ static void scene_sort_groups(Scene *sce)
Object *ob;
/* test; are group objects all in this scene? */
- for(ob= G.main->object.first; ob; ob= ob->id.next) {
+ for(ob= bmain->object.first; ob; ob= ob->id.next) {
ob->id.flag &= ~LIB_DOIT;
ob->id.newid= NULL; /* newid abuse for GroupObject */
}
for(base = sce->base.first; base; base= base->next)
base->object->id.flag |= LIB_DOIT;
- for(group= G.main->group.first; group; group= group->id.next) {
+ for(group= bmain->group.first; group; group= group->id.next) {
for(go= group->gobject.first; go; go= go->next) {
if((go->ob->id.flag & LIB_DOIT)==0)
break;
@@ -1649,7 +1645,7 @@ static void scene_sort_groups(Scene *sce)
}
/* sort the base list on dependency order */
-void DAG_scene_sort(struct Scene *sce)
+void DAG_scene_sort(Main *bmain, Scene *sce)
{
DagNode *node;
DagNodeQueue *nqueue;
@@ -1661,7 +1657,7 @@ void DAG_scene_sort(struct Scene *sce)
tempbase.first= tempbase.last= NULL;
- build_dag(sce, DAG_RL_ALL_BUT_DATA);
+ build_dag(bmain, sce, DAG_RL_ALL_BUT_DATA);
dag_check_cycle(sce->theDag);
@@ -1731,7 +1727,7 @@ void DAG_scene_sort(struct Scene *sce)
queue_delete(nqueue);
/* all groups with objects in this scene gets resorted too */
- scene_sort_groups(sce);
+ scene_sort_groups(bmain, sce);
if(G.f & G_DEBUG) {
printf("\nordered\n");
@@ -1926,7 +1922,7 @@ static void dag_scene_flush_layers(Scene *sce, int lay)
}
/* flushes all recalc flags in objects down the dependency tree */
-void DAG_scene_flush_update(Scene *sce, unsigned int lay, int time)
+void DAG_scene_flush_update(Main *bmain, Scene *sce, unsigned int lay, int time)
{
DagNode *firstnode;
DagAdjList *itA;
@@ -1935,7 +1931,7 @@ void DAG_scene_flush_update(Scene *sce, unsigned int lay, int time)
if(sce->theDag==NULL) {
printf("DAG zero... not allowed to happen!\n");
- DAG_scene_sort(sce);
+ DAG_scene_sort(bmain, sce);
}
firstnode= sce->theDag->DagNode.first; // always scene node
@@ -2135,7 +2131,7 @@ static void dag_object_time_update_flags(Object *ob)
}
}
/* flag all objects that need recalc, for changes in time for example */
-void DAG_scene_update_flags(Scene *scene, unsigned int lay)
+void DAG_scene_update_flags(Main *bmain, Scene *scene, unsigned int lay)
{
Base *base;
Object *ob;
@@ -2157,7 +2153,7 @@ void DAG_scene_update_flags(Scene *scene, unsigned int lay)
}
/* we do groups each once */
- for(group= G.main->group.first; group; group= group->id.next) {
+ for(group= bmain->group.first; group; group= group->id.next) {
if(group->id.flag & LIB_DOIT) {
for(go= group->gobject.first; go; go= go->next) {
dag_object_time_update_flags(go->ob);
@@ -2166,7 +2162,7 @@ void DAG_scene_update_flags(Scene *scene, unsigned int lay)
}
for(sce= scene; sce; sce= sce->set)
- DAG_scene_flush_update(sce, lay, 1);
+ DAG_scene_flush_update(bmain, sce, lay, 1);
/* test: set time flag, to disable baked systems to update */
for(SETLOOPER(scene, base)) {
@@ -2180,7 +2176,7 @@ void DAG_scene_update_flags(Scene *scene, unsigned int lay)
dag_object_time_update_flags(scene->camera);
/* and store the info in groupobject */
- for(group= G.main->group.first; group; group= group->id.next) {
+ for(group= bmain->group.first; group; group= group->id.next) {
if(group->id.flag & LIB_DOIT) {
for(go= group->gobject.first; go; go= go->next) {
go->recalc= go->ob->recalc;
@@ -2223,21 +2219,19 @@ static void dag_current_scene_layers(Main *bmain, Scene **sce, unsigned int *lay
}
}
-void DAG_ids_flush_update(int time)
+void DAG_ids_flush_update(Main *bmain, int time)
{
- Main *bmain= G.main;
Scene *sce;
unsigned int lay;
dag_current_scene_layers(bmain, &sce, &lay);
if(sce)
- DAG_scene_flush_update(sce, lay, time);
+ DAG_scene_flush_update(bmain, sce, lay, time);
}
-void DAG_on_load_update(void)
+void DAG_on_load_update(Main *bmain)
{
- Main *bmain= G.main;
Scene *scene, *sce;
Base *base;
Object *ob;
@@ -2268,7 +2262,7 @@ void DAG_on_load_update(void)
}
}
- for(group= G.main->group.first; group; group= group->id.next) {
+ for(group= bmain->group.first; group; group= group->id.next) {
if(group->id.flag & LIB_DOIT) {
for(go= group->gobject.first; go; go= go->next) {
if(ELEM5(go->ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL))
@@ -2282,7 +2276,7 @@ void DAG_on_load_update(void)
}
/* now tag update flags, to ensure deformers get calculated on redraw */
- DAG_scene_update_flags(scene, lay);
+ DAG_scene_update_flags(bmain, scene, lay);
}
}
@@ -2394,7 +2388,7 @@ void DAG_id_flush_update(ID *id, short flag)
}
/* flush to other objects that depend on this one */
- DAG_scene_flush_update(sce, lay, 0);
+ DAG_scene_flush_update(bmain, sce, lay, 0);
}
/* recursively descends tree, each node only checked once */
@@ -2477,7 +2471,7 @@ void DAG_id_update_flags(ID *id)
}
/* set recalcs and flushes */
- DAG_scene_update_flags(sce, lay);
+ DAG_scene_update_flags(bmain, sce, lay);
/* now we clear recalcs, unless color is set */
for(node = sce->theDag->DagNode.first; node; node= node->next) {
diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c
index 15e561cfc45..666a62d96de 100644
--- a/source/blender/blenkernel/intern/displist.c
+++ b/source/blender/blenkernel/intern/displist.c
@@ -39,6 +39,7 @@
#include "DNA_curve_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
#include "DNA_material_types.h"
#include "BLI_blenlib.h"
@@ -63,6 +64,7 @@
#include "BLO_sys_types.h" // for intptr_t support
+#include "ED_curve.h" /* for BKE_curve_nurbs */
static void boundbox_displist(Object *ob);
@@ -152,7 +154,7 @@ void copy_displist(ListBase *lbn, ListBase *lb)
}
}
-void addnormalsDispList(Object *ob, ListBase *lb)
+void addnormalsDispList(ListBase *lb)
{
DispList *dl = NULL;
float *vdata, *ndata, nor[3];
@@ -1127,7 +1129,7 @@ float calc_taper(Scene *scene, Object *taperobj, int cur, int tot)
Curve *cu;
DispList *dl;
- if(taperobj==NULL) return 1.0;
+ if(taperobj==NULL || taperobj->type!=OB_CURVE) return 1.0;
cu= taperobj->data;
dl= cu->disp.first;
@@ -1221,7 +1223,7 @@ static void curve_calc_modifiers_pre(Scene *scene, Object *ob, int forRender, fl
ModifierData *md = modifiers_getVirtualModifierList(ob);
ModifierData *preTesselatePoint;
Curve *cu= ob->data;
- ListBase *nurb= cu->editnurb?cu->editnurb:&cu->nurb;
+ ListBase *nurb= BKE_curve_nurbs(cu);
int numVerts = 0;
int editmode = (!forRender && cu->editnurb);
float (*originalVerts)[3] = NULL;
@@ -1324,8 +1326,8 @@ static void curve_calc_modifiers_post(Scene *scene, Object *ob, ListBase *dispba
ModifierData *md = modifiers_getVirtualModifierList(ob);
ModifierData *preTesselatePoint;
Curve *cu= ob->data;
- ListBase *nurb= cu->editnurb?cu->editnurb:&cu->nurb;
- int required_mode, totvert = 0;
+ ListBase *nurb= BKE_curve_nurbs(cu);
+ int required_mode = 0, totvert = 0;
int editmode = (!forRender && cu->editnurb);
DerivedMesh *dm= NULL, *ndm;
float (*vertCos)[3] = NULL;
@@ -1590,9 +1592,9 @@ void makeDispListSurf(Scene *scene, Object *ob, ListBase *dispbase,
int numVerts;
float (*originalVerts)[3];
float (*deformedVerts)[3];
-
+
if(!forRender && cu->editnurb)
- nubase= cu->editnurb;
+ nubase= ED_curve_editnurbs(cu);
else
nubase= &cu->nurb;
@@ -1680,19 +1682,7 @@ static void do_makeDispListCurveTypes(Scene *scene, Object *ob, ListBase *dispba
float (*deformedVerts)[3];
int numVerts;
- /* Bevel and taper objects should always be curves */
- if (cu->bevobj && cu->bevobj->type != OB_CURVE) {
- cu->bevobj = NULL;
- }
-
- if (cu->taperobj && cu->taperobj->type != OB_CURVE) {
- cu->taperobj = NULL;
- }
-
- if(cu->editnurb)
- nubase= cu->editnurb;
- else
- nubase= &cu->nurb;
+ nubase= BKE_curve_nurbs(cu);
BLI_freelistN(&(cu->bev));
diff --git a/source/blender/blenkernel/intern/effect.c b/source/blender/blenkernel/intern/effect.c
index b1182cfcec3..fba96d2fd8f 100644
--- a/source/blender/blenkernel/intern/effect.c
+++ b/source/blender/blenkernel/intern/effect.c
@@ -433,9 +433,8 @@ static float eff_calc_visibility(ListBase *colliders, EffectorCache *eff, Effect
if(!colls)
return visibility;
-
- VECCOPY(norm, efd->vec_to_point);
- negate_v3(norm);
+
+ negate_v3_v3(norm, efd->vec_to_point);
len = normalize_v3(norm);
// check all collision objects
@@ -663,8 +662,7 @@ int get_effector_data(EffectorCache *eff, EffectorData *efd, EffectedPoint *poin
where_is_object_time(eff->scene, ob, cfra);
/* use z-axis as normal*/
- VECCOPY(efd->nor, ob->obmat[2]);
- normalize_v3(efd->nor);
+ normalize_v3_v3(efd->nor, ob->obmat[2]);
/* for vortex the shape chooses between old / new force */
if(eff->pd && eff->pd->shape == PFIELD_SHAPE_PLANE) {
@@ -708,8 +706,7 @@ int get_effector_data(EffectorCache *eff, EffectorData *efd, EffectedPoint *poin
else {
/* for some effectors we need the object center every time */
sub_v3_v3v3(efd->vec_to_point2, point->loc, eff->ob->obmat[3]);
- VECCOPY(efd->nor2, eff->ob->obmat[2]);
- normalize_v3(efd->nor2);
+ normalize_v3_v3(efd->nor2, eff->ob->obmat[2]);
}
}
diff --git a/source/blender/blenkernel/intern/fluidsim.c b/source/blender/blenkernel/intern/fluidsim.c
index a0906a67be0..834fd09aac2 100644
--- a/source/blender/blenkernel/intern/fluidsim.c
+++ b/source/blender/blenkernel/intern/fluidsim.c
@@ -50,7 +50,6 @@
#include "BKE_global.h"
#include "BKE_modifier.h"
#include "BKE_mesh.h"
-#include "BKE_pointcache.h"
#include "BKE_utildefines.h"
// headers for fluidsim bobj meshes
diff --git a/source/blender/blenkernel/intern/fmodifier.c b/source/blender/blenkernel/intern/fmodifier.c
index 5829d462011..f054f2e8738 100644
--- a/source/blender/blenkernel/intern/fmodifier.c
+++ b/source/blender/blenkernel/intern/fmodifier.c
@@ -43,10 +43,6 @@
#include "BKE_idprop.h"
#include "BKE_utildefines.h"
-#ifndef DISABLE_PYTHON
-#include "BPY_extern.h" /* for BPY_eval_driver() */
-#endif
-
#define SMALL -1.0e-10
#define SELECT 1
@@ -1193,7 +1189,7 @@ short list_has_suitable_fmodifier (ListBase *modifiers, int mtype, short acttype
* - this step acts as an optimisation to prevent the F-Curve stack being evaluated
* several times by modifiers requesting the time be modified, as the final result
* would have required using the modified time
- * - modifiers only ever recieve the unmodified time, as subsequent modifiers should be
+ * - modifiers only ever receive the unmodified time, as subsequent modifiers should be
* working on the 'global' result of the modified curve, not some localised segment,
* so nevaltime gets set to whatever the last time-modifying modifier likes...
* - we start from the end of the stack, as only the last one matters for now
diff --git a/source/blender/blenkernel/intern/font.c b/source/blender/blenkernel/intern/font.c
index a99f2599f66..39b74be3d40 100644
--- a/source/blender/blenkernel/intern/font.c
+++ b/source/blender/blenkernel/intern/font.c
@@ -46,6 +46,7 @@
#include "DNA_curve_types.h"
#include "DNA_vfont_types.h"
#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
#include "BKE_utildefines.h"
@@ -122,8 +123,8 @@ wcsleninu8(wchar_t *src)
return len;
}
-int
-static utf8slen(char *src)
+static int
+utf8slen(char *src)
{
int size = 0, index = 0;
unsigned char c;
@@ -814,7 +815,7 @@ struct chartrans *BKE_text_to_curve(Scene *scene, Object *ob, int mode)
twidth = char_width(cu, che, info);
// Calculate positions
- if((tb->w != 0.0) && (ct->dobreak==0) && ((xof-(tb->x/cu->fsize)+twidth)*cu->fsize) > tb->w) {
+ if((tb->w != 0.0) && (ct->dobreak==0) && ((xof-(tb->x/cu->fsize)+twidth)*cu->fsize) > tb->w + cu->xof*cu->fsize) {
// fprintf(stderr, "linewidth exceeded: %c%c%c...\n", mem[i], mem[i+1], mem[i+2]);
for (j=i; j && (mem[j] != '\n') && (mem[j] != '\r') && (chartransdata[j].dobreak==0); j--) {
if (mem[j]==' ' || mem[j]=='-') {
@@ -855,7 +856,7 @@ struct chartrans *BKE_text_to_curve(Scene *scene, Object *ob, int mode)
linedata4[lnr]= wsnr;
if ( (tb->h != 0.0) &&
- ((-(yof-(tb->y/cu->fsize))) > ((tb->h/cu->fsize)-(linedist*cu->fsize))) &&
+ ((-(yof-(tb->y/cu->fsize))) > ((tb->h/cu->fsize)-(linedist*cu->fsize)) - cu->yof) &&
(cu->totbox > (curbox+1)) ) {
maxlen= 0;
tb++;
@@ -1194,18 +1195,14 @@ struct chartrans *BKE_text_to_curve(Scene *scene, Object *ob, int mode)
ascii = mem[i];
info = &(custrinfo[i]);
if (cu->sepchar == (i+1)) {
- float vecyo[3];
+ float vecyo[3]= {ct->xof, ct->yof, 0.0f};
mem[0] = ascii;
mem[1] = 0;
custrinfo[0]= *info;
cu->pos = 1;
cu->len = 1;
- vecyo[0] = ct->xof;
- vecyo[1] = ct->yof;
- vecyo[2] = 0;
- mul_m4_v3(ob->obmat, vecyo);
- VECCOPY(ob->loc, vecyo);
+ mul_v3_m4v3(ob->loc, ob->obmat, vecyo);
outta = 1;
cu->sepchar = 0;
}
diff --git a/source/blender/blenkernel/intern/group.c b/source/blender/blenkernel/intern/group.c
index 6377a6f6ccd..bdf203119c3 100644
--- a/source/blender/blenkernel/intern/group.c
+++ b/source/blender/blenkernel/intern/group.c
@@ -69,21 +69,22 @@ void free_group_objects(Group *group)
void unlink_group(Group *group)
{
+ Main *bmain= G.main;
Material *ma;
Object *ob;
Scene *sce;
SceneRenderLayer *srl;
ParticleSystem *psys;
- for(ma= G.main->mat.first; ma; ma= ma->id.next) {
+ for(ma= bmain->mat.first; ma; ma= ma->id.next) {
if(ma->group==group)
ma->group= NULL;
}
- for(ma= G.main->mat.first; ma; ma= ma->id.next) {
+ for(ma= bmain->mat.first; ma; ma= ma->id.next) {
if(ma->group==group)
ma->group= NULL;
}
- for (sce= G.main->scene.first; sce; sce= sce->id.next) {
+ for (sce= bmain->scene.first; sce; sce= sce->id.next) {
Base *base= sce->base.first;
/* ensure objects are not in this group */
@@ -100,7 +101,7 @@ void unlink_group(Group *group)
}
}
- for(ob= G.main->object.first; ob; ob= ob->id.next) {
+ for(ob= bmain->object.first; ob; ob= ob->id.next) {
bActionStrip *strip;
if(ob->dup_group==group) {
diff --git a/source/blender/blenkernel/intern/icons.c b/source/blender/blenkernel/intern/icons.c
index ad2c857be75..78306705d6b 100644
--- a/source/blender/blenkernel/intern/icons.c
+++ b/source/blender/blenkernel/intern/icons.c
@@ -177,6 +177,9 @@ void BKE_previewimg_free_id(ID *id)
} else if (GS(id->name) == ID_IM) {
Image *img = (Image*)id;
BKE_previewimg_free(&img->preview);
+ } else if (GS(id->name) == ID_BR) {
+ Brush *br = (Brush*)id;
+ BKE_previewimg_free(&br->preview);
}
}
@@ -204,6 +207,10 @@ PreviewImage* BKE_previewimg_get(ID *id)
Image *img = (Image*)id;
if (!img->preview) img->preview = BKE_previewimg_create();
prv_img = img->preview;
+ } else if (GS(id->name) == ID_BR) {
+ Brush *br = (Brush*)id;
+ if (!br->preview) br->preview = BKE_previewimg_create();
+ prv_img = br->preview;
}
return prv_img;
diff --git a/source/blender/blenkernel/intern/idprop.c b/source/blender/blenkernel/intern/idprop.c
index 2ccb33b088a..a0df73d6c42 100644
--- a/source/blender/blenkernel/intern/idprop.c
+++ b/source/blender/blenkernel/intern/idprop.c
@@ -27,6 +27,7 @@
#include <stdio.h>
#include <stdlib.h>
+#include <stddef.h>
#include <string.h>
#include "BKE_idprop.h"
@@ -491,47 +492,41 @@ void IDP_ReplaceGroupInGroup(IDProperty *dest, IDProperty *src)
void IDP_ReplaceInGroup(IDProperty *group, IDProperty *prop)
{
IDProperty *loop;
- for (loop=group->data.group.first; loop; loop=loop->next) {
- if (BSTR_EQ(loop->name, prop->name)) {
- BLI_insertlink(&group->data.group, loop, prop);
-
- BLI_remlink(&group->data.group, loop);
- IDP_FreeProperty(loop);
- MEM_freeN(loop);
- return;
- }
+ if((loop= IDP_GetPropertyFromGroup(group, prop->name))) {
+ BLI_insertlink(&group->data.group, loop, prop);
+
+ BLI_remlink(&group->data.group, loop);
+ IDP_FreeProperty(loop);
+ MEM_freeN(loop);
+ }
+ else {
+ group->len++;
+ BLI_addtail(&group->data.group, prop);
}
-
- group->len++;
- BLI_addtail(&group->data.group, prop);
}
/*returns 0 if an id property with the same name exists and it failed,
or 1 if it succeeded in adding to the group.*/
int IDP_AddToGroup(IDProperty *group, IDProperty *prop)
{
- IDProperty *loop;
- for (loop=group->data.group.first; loop; loop=loop->next) {
- if (BSTR_EQ(loop->name, prop->name)) return 0;
+ if(IDP_GetPropertyFromGroup(group, prop->name) == NULL) {
+ group->len++;
+ BLI_addtail(&group->data.group, prop);
+ return 1;
}
- group->len++;
- BLI_addtail(&group->data.group, prop);
-
- return 1;
+ return 0;
}
int IDP_InsertToGroup(IDProperty *group, IDProperty *previous, IDProperty *pnew)
{
- IDProperty *loop;
- for (loop=group->data.group.first; loop; loop=loop->next) {
- if (BSTR_EQ(loop->name, pnew->name)) return 0;
+ if(IDP_GetPropertyFromGroup(group, pnew->name) == NULL) {
+ group->len++;
+ BLI_insertlink(&group->data.group, previous, pnew);
+ return 1;
}
-
- group->len++;
- BLI_insertlink(&group->data.group, previous, pnew);
- return 1;
+ return 0;
}
void IDP_RemFromGroup(IDProperty *group, IDProperty *prop)
@@ -542,11 +537,7 @@ void IDP_RemFromGroup(IDProperty *group, IDProperty *prop)
IDProperty *IDP_GetPropertyFromGroup(IDProperty *prop, const char *name)
{
- IDProperty *loop;
- for (loop=prop->data.group.first; loop; loop=loop->next) {
- if (strcmp(loop->name, name)==0) return loop;
- }
- return NULL;
+ return (IDProperty *)BLI_findstring(&prop->data.group, name, offsetof(IDProperty, name));
}
typedef struct IDPIter {
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index b66b5c60916..d2612e90945 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -287,17 +287,25 @@ static void image_assign_ibuf(Image *ima, ImBuf *ibuf, int index, int frame)
}
/* empty image block, of similar type and filename */
-Image *BKE_image_copy(Image *ima)
+Image *copy_image(Image *ima)
{
- Image *new= image_alloc(ima->id.name+2, ima->source, ima->type);
+ Image *nima= image_alloc(ima->id.name+2, ima->source, ima->type);
- BLI_strncpy(new->name, ima->name, sizeof(ima->name));
-
- new->gen_x= ima->gen_x;
- new->gen_y= ima->gen_y;
- new->gen_type= ima->gen_type;
+ BLI_strncpy(nima->name, ima->name, sizeof(ima->name));
+
+ nima->flag= ima->flag;
+ nima->tpageflag= ima->tpageflag;
- return new;
+ nima->gen_x= ima->gen_x;
+ nima->gen_y= ima->gen_y;
+ nima->gen_type= ima->gen_type;
+
+ nima->animspeed= ima->animspeed;
+
+ nima->aspx= ima->aspx;
+ nima->aspy= ima->aspy;
+
+ return nima;
}
void BKE_image_merge(Image *dest, Image *source)
@@ -652,8 +660,10 @@ int BKE_imtype_to_ftype(int imtype)
return TGA;
else if(imtype== R_IRIS)
return IMAGIC;
+#ifdef WITH_HDR
else if (imtype==R_RADHDR)
return RADHDR;
+#endif
else if (imtype==R_PNG)
return PNG;
#ifdef WITH_DDS
@@ -662,14 +672,18 @@ int BKE_imtype_to_ftype(int imtype)
#endif
else if (imtype==R_BMP)
return BMP;
+#ifdef WITH_TIFF
else if (imtype==R_TIFF)
return TIF;
+#endif
else if (imtype==R_OPENEXR || imtype==R_MULTILAYER)
return OPENEXR;
+#ifdef WITH_CINEON
else if (imtype==R_CINEON)
return CINEON;
else if (imtype==R_DPX)
return DPX;
+#endif
else if (imtype==R_TARGA)
return TGA;
else if(imtype==R_RAWTGA)
@@ -688,8 +702,10 @@ int BKE_ftype_to_imtype(int ftype)
return TGA;
else if(ftype == IMAGIC)
return R_IRIS;
+#ifdef WITH_HDR
else if (ftype & RADHDR)
return R_RADHDR;
+#endif
else if (ftype & PNG)
return R_PNG;
#ifdef WITH_DDS
@@ -698,14 +714,18 @@ int BKE_ftype_to_imtype(int ftype)
#endif
else if (ftype & BMP)
return R_BMP;
+#ifdef WITH_TIFF
else if (ftype & TIF)
return R_TIFF;
+#endif
else if (ftype & OPENEXR)
return R_OPENEXR;
+#ifdef WITH_CINEON
else if (ftype & CINEON)
return R_CINEON;
else if (ftype & DPX)
return R_DPX;
+#endif
else if (ftype & TGA)
return R_TARGA;
else if(ftype & RAWTGA)
@@ -748,10 +768,12 @@ void BKE_add_image_extension(char *string, int imtype)
if(!BLI_testextensie(string, ".rgb"))
extension= ".rgb";
}
+#ifdef WITH_HDR
else if(imtype==R_RADHDR) {
if(!BLI_testextensie(string, ".hdr"))
extension= ".hdr";
}
+#endif
else if (ELEM5(imtype, R_PNG, R_FFMPEG, R_H264, R_THEORA, R_XVID)) {
if(!BLI_testextensie(string, ".png"))
extension= ".png";
@@ -782,6 +804,7 @@ void BKE_add_image_extension(char *string, int imtype)
extension= ".exr";
}
#endif
+#ifdef WITH_CINEON
else if(imtype==R_CINEON){
if (!BLI_testextensie(string, ".cin"))
extension= ".cin";
@@ -790,6 +813,7 @@ void BKE_add_image_extension(char *string, int imtype)
if (!BLI_testextensie(string, ".dpx"))
extension= ".dpx";
}
+#endif
else if(imtype==R_TARGA) {
if(!BLI_testextensie(string, ".tga"))
extension= ".tga";
@@ -1172,14 +1196,23 @@ int BKE_write_ibuf(Scene *scene, ImBuf *ibuf, char *name, int imtype, int subimt
{
int ok;
- if(imtype==0);
- else if(imtype== R_IRIS)
+ if(imtype==0) {
+ /* pass */
+ }
+ else if(imtype== R_IRIS) {
ibuf->ftype= IMAGIC;
+ }
+#ifdef WITH_HDR
else if ((imtype==R_RADHDR)) {
ibuf->ftype= RADHDR;
}
+#endif
else if (ELEM5(imtype, R_PNG, R_FFMPEG, R_H264, R_THEORA, R_XVID)) {
ibuf->ftype= PNG;
+
+ if(imtype==R_PNG)
+ ibuf->ftype |= quality; /* quality is actually compression 0-100 --> 0-9 */
+
}
#ifdef WITH_DDS
else if ((imtype==R_DDS)) {
@@ -1209,12 +1242,14 @@ int BKE_write_ibuf(Scene *scene, ImBuf *ibuf, char *name, int imtype, int subimt
}
#endif
+#ifdef WITH_CINEON
else if (imtype==R_CINEON) {
ibuf->ftype = CINEON;
}
else if (imtype==R_DPX) {
ibuf->ftype = DPX;
}
+#endif
else if (imtype==R_TARGA) {
ibuf->ftype= TGA;
}
diff --git a/source/blender/blenkernel/intern/implicit.c b/source/blender/blenkernel/intern/implicit.c
index 902965bd2f6..158f964a846 100644
--- a/source/blender/blenkernel/intern/implicit.c
+++ b/source/blender/blenkernel/intern/implicit.c
@@ -29,16 +29,21 @@
#include "MEM_guardedalloc.h"
-#include "BKE_cloth.h"
-
+#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
#include "DNA_object_force.h"
+#include "DNA_meshdata_types.h"
+#include "BLI_threads.h"
+#include "BLI_math.h"
+#include "BLI_linklist.h"
+
+#include "BKE_cloth.h"
+#include "BKE_collision.h"
#include "BKE_effect.h"
#include "BKE_global.h"
#include "BKE_utildefines.h"
-#include "BLI_threads.h"
-
#define CLOTH_OPENMP_LIMIT 25
#ifdef _WIN32
@@ -1621,9 +1626,8 @@ static void cloth_calc_force(ClothModifierData *clmd, float frame, lfVector *lF,
CalcFloat4(lX[mfaces[i].v1],lX[mfaces[i].v2],lX[mfaces[i].v3],lX[mfaces[i].v4],triunnormal);
else
CalcFloat(lX[mfaces[i].v1],lX[mfaces[i].v2],lX[mfaces[i].v3],triunnormal);
-
- VECCOPY(trinormal, triunnormal);
- normalize_v3(trinormal);
+
+ normalize_v3_v3(trinormal, triunnormal);
// add wind from v1
VECCOPY(tmp, trinormal);
diff --git a/source/blender/blenkernel/intern/ipo.c b/source/blender/blenkernel/intern/ipo.c
index cd8ab8290e5..a24f37bf73a 100644
--- a/source/blender/blenkernel/intern/ipo.c
+++ b/source/blender/blenkernel/intern/ipo.c
@@ -54,6 +54,7 @@
#include "DNA_sequence_types.h"
#include "DNA_scene_types.h"
#include "DNA_world_types.h"
+#include "DNA_object_types.h"
#include "BLI_math.h" /* windows needs for M_PI */
#include "BLI_blenlib.h"
@@ -906,7 +907,7 @@ static char *get_rna_access (int blocktype, int adrcode, char actname[], char co
*array_index= dummy_index;
}
- /* append preceeding bits to path */
+ /* append preceding bits to path */
if ((actname && actname[0]) && (constname && constname[0])) {
/* Constraint in Pose-Channel */
sprintf(buf, "pose.bones[\"%s\"].constraints[\"%s\"]", actname, constname);
diff --git a/source/blender/blenkernel/intern/key.c b/source/blender/blenkernel/intern/key.c
index efbc09692a9..f6f4226bf57 100644
--- a/source/blender/blenkernel/intern/key.c
+++ b/source/blender/blenkernel/intern/key.c
@@ -50,6 +50,7 @@
#include "BKE_animsys.h"
#include "BKE_curve.h"
#include "BKE_customdata.h"
+#include "BKE_deform.h"
#include "BKE_global.h"
#include "BKE_key.h"
#include "BKE_lattice.h"
@@ -589,11 +590,15 @@ static void cp_key(int start, int end, int tot, char *poin, Key *key, KeyBlock *
poinsize= ofs[0];
}
else if( GS(key->from->name)==ID_CU ) {
- if(mode==KEY_BPOINT) ofs[0]= sizeof(float)*4;
- else ofs[0]= sizeof(float)*10;
-
+ if(mode==KEY_BPOINT) {
+ ofs[0]= sizeof(float)*4;
+ poinsize= ofs[0];
+ }else {
+ ofs[0]= sizeof(float)*12;
+ poinsize= ofs[0]/3;
+ }
+
ofs[1]= 0;
- poinsize= ofs[0];
}
if(end>tot) end= tot;
@@ -659,7 +664,7 @@ static void cp_key(int start, int end, int tot, char *poin, Key *key, KeyBlock *
memcpy(poin, k1, sizeof(float)*4);
break;
case IPO_BEZTRIPLE:
- memcpy(poin, k1, sizeof(float)*10);
+ memcpy(poin, k1, sizeof(float)*12);
break;
}
@@ -691,28 +696,25 @@ static void cp_key(int start, int end, int tot, char *poin, Key *key, KeyBlock *
static void cp_cu_key(Curve *cu, Key *key, KeyBlock *actkb, KeyBlock *kb, int start, int end, char *out, int tot)
{
Nurb *nu;
- char *poin;
int a, step, a1, a2;
for(a=0, nu=cu->nurb.first; nu; nu=nu->next, a+=step) {
if(nu->bp) {
step= nu->pntsu*nu->pntsv;
-
- /* exception because keys prefer to work with complete blocks */
- poin= out - a*sizeof(float)*4;
+
a1= MAX2(a, start);
a2= MIN2(a+step, end);
-
- if(a1<a2) cp_key(a1, a2, tot, poin, key, actkb, kb, NULL, KEY_BPOINT);
+
+ if(a1<a2) cp_key(a1, a2, tot, out, key, actkb, kb, NULL, KEY_BPOINT);
}
else if(nu->bezt) {
step= 3*nu->pntsu;
-
- poin= out - a*sizeof(float)*10;
+
+ /* exception because keys prefer to work with complete blocks */
a1= MAX2(a, start);
a2= MIN2(a+step, end);
- if(a1<a2) cp_key(a1, a2, tot, poin, key, actkb, kb, NULL, KEY_BEZTRIPLE);
+ if(a1<a2) cp_key(a1, a2, tot, out, key, actkb, kb, NULL, KEY_BEZTRIPLE);
}
else
step= 0;
@@ -726,26 +728,34 @@ void do_rel_key(int start, int end, int tot, char *basispoin, Key *key, KeyBlock
int *ofsp, ofs[3], elemsize, b;
char *cp, *poin, *reffrom, *from, elemstr[8];
char *freefrom, *freereffrom;
-
+ int poinsize= 0;
+
if(key->from==NULL) return;
-
+
if( GS(key->from->name)==ID_ME ) {
ofs[0]= sizeof(float)*3;
ofs[1]= 0;
+ poinsize= ofs[0];
}
else if( GS(key->from->name)==ID_LT ) {
ofs[0]= sizeof(float)*3;
ofs[1]= 0;
+ poinsize= ofs[0];
}
else if( GS(key->from->name)==ID_CU ) {
- if(mode==KEY_BPOINT) ofs[0]= sizeof(float)*4;
- else ofs[0]= sizeof(float)*10;
-
+ if(mode==KEY_BPOINT) {
+ ofs[0]= sizeof(float)*4;
+ poinsize= ofs[0];
+ } else {
+ ofs[0]= sizeof(float)*12;
+ poinsize= ofs[0] / 3;
+ }
+
ofs[1]= 0;
}
-
+
if(end>tot) end= tot;
-
+
/* in case of beztriple */
elemstr[0]= 1; /* nr of ipofloats */
elemstr[1]= IPO_BEZTRIPLE;
@@ -777,7 +787,7 @@ void do_rel_key(int start, int end, int tot, char *basispoin, Key *key, KeyBlock
from= key_block_get_data(key, actkb, kb, &freefrom);
reffrom= key_block_get_data(key, actkb, refb, &freereffrom);
- poin+= start*ofs[0];
+ poin+= start*poinsize;
reffrom+= key->elemsize*start; // key elemsize yes!
from+= key->elemsize*start;
@@ -803,7 +813,7 @@ void do_rel_key(int start, int end, int tot, char *basispoin, Key *key, KeyBlock
rel_flerp(4, (float *)poin, (float *)reffrom, (float *)from, weight);
break;
case IPO_BEZTRIPLE:
- rel_flerp(10, (float *)poin, (float *)reffrom, (float *)from, weight);
+ rel_flerp(12, (float *)poin, (float *)reffrom, (float *)from, weight);
break;
}
@@ -850,11 +860,15 @@ static void do_key(int start, int end, int tot, char *poin, Key *key, KeyBlock *
poinsize= ofs[0];
}
else if( GS(key->from->name)==ID_CU ) {
- if(mode==KEY_BPOINT) ofs[0]= sizeof(float)*4;
- else ofs[0]= sizeof(float)*10;
-
+ if(mode==KEY_BPOINT) {
+ ofs[0]= sizeof(float)*4;
+ poinsize= ofs[0];
+ } else {
+ ofs[0]= sizeof(float)*12;
+ poinsize= ofs[0] / 3;
+ }
+
ofs[1]= 0;
- poinsize= ofs[0];
}
if(end>tot) end= tot;
@@ -976,7 +990,7 @@ static void do_key(int start, int end, int tot, char *poin, Key *key, KeyBlock *
flerp(4, (float *)poin, (float *)k1, (float *)k2, (float *)k3, (float *)k4, t);
break;
case IPO_BEZTRIPLE:
- flerp(10, (void *)poin, (void *)k1, (void *)k2, (void *)k3, (void *)k4, t);
+ flerp(12, (void *)poin, (void *)k1, (void *)k2, (void *)k3, (void *)k4, t);
break;
}
@@ -1037,7 +1051,6 @@ static void do_key(int start, int end, int tot, char *poin, Key *key, KeyBlock *
static float *get_weights_array(Object *ob, char *vgroup)
{
- bDeformGroup *curdef;
MDeformVert *dvert= NULL;
BMEditMesh *em= NULL;
BMIter iter;
@@ -1065,11 +1078,8 @@ static float *get_weights_array(Object *ob, char *vgroup)
if(dvert==NULL) return NULL;
/* find the group (weak loop-in-loop) */
- for (curdef = ob->defbase.first; curdef; curdef=curdef->next, index++)
- if (!strcmp(curdef->name, vgroup))
- break;
-
- if(curdef) {
+ index= defgroup_name_index(ob, vgroup);
+ if(index >= 0) {
float *weights;
int i, j;
@@ -1186,19 +1196,16 @@ static void do_mesh_key(Scene *scene, Object *ob, Key *key, char *out, int tot)
static void do_cu_key(Curve *cu, Key *key, KeyBlock *actkb, KeyBlock **k, float *t, char *out, int tot)
{
Nurb *nu;
- char *poin;
int a, step;
for(a=0, nu=cu->nurb.first; nu; nu=nu->next, a+=step) {
if(nu->bp) {
step= nu->pntsu*nu->pntsv;
- poin= out - a*sizeof(float)*4;
- do_key(a, a+step, tot, poin, key, actkb, k, t, KEY_BPOINT);
+ do_key(a, a+step, tot, out, key, actkb, k, t, KEY_BPOINT);
}
else if(nu->bezt) {
step= 3*nu->pntsu;
- poin= out - a*sizeof(float)*10;
- do_key(a, a+step, tot, poin, key, actkb, k, t, KEY_BEZTRIPLE);
+ do_key(a, a+step, tot, out, key, actkb, k, t, KEY_BEZTRIPLE);
}
else
step= 0;
@@ -1208,19 +1215,16 @@ static void do_cu_key(Curve *cu, Key *key, KeyBlock *actkb, KeyBlock **k, float
static void do_rel_cu_key(Curve *cu, Key *key, KeyBlock *actkb, float ctime, char *out, int tot)
{
Nurb *nu;
- char *poin;
int a, step;
for(a=0, nu=cu->nurb.first; nu; nu=nu->next, a+=step) {
if(nu->bp) {
step= nu->pntsu*nu->pntsv;
- poin= out - a*sizeof(float)*3;
do_rel_key(a, a+step, tot, out, key, actkb, KEY_BPOINT);
}
else if(nu->bezt) {
step= 3*nu->pntsu;
- poin= out - a*sizeof(float)*10;
- do_rel_key(a, a+step, tot, poin, key, actkb, KEY_BEZTRIPLE);
+ do_rel_key(a, a+step, tot, out, key, actkb, KEY_BEZTRIPLE);
}
else
step= 0;
@@ -1233,35 +1237,61 @@ static void do_curve_key(Scene *scene, Object *ob, Key *key, char *out, int tot)
KeyBlock *k[4], *actkb= ob_get_keyblock(ob);
float cfra, ctime, t[4], delta;
int a, flag = 0, step = 0;
-
- if(key->slurph) {
- delta= key->slurph;
- delta/= tot;
-
+
+ if(key->slurph && key->type!=KEY_RELATIVE) {
+ Nurb *nu;
+ int mode, i= 0, remain= 0, estep, count;
+
+ delta= (float)key->slurph / tot;
+
step= 1;
if(tot>100 && slurph_opt) {
step= tot/50;
delta*= step;
/* in do_key and cp_key the case a>tot has been handled */
}
-
+
cfra= (float)scene->r.cfra;
-
- for(a=0; a<tot; a+=step, cfra+= delta) {
- ctime= bsystem_time(scene, 0, cfra, 0.0f); // XXX old cruft
-#if 0 // XXX old animation system
- if(calc_ipo_spec(key->ipo, KEY_SPEED, &ctime)==0) {
- ctime /= 100.0;
- CLAMP(ctime, 0.0, 1.0);
+
+ for(nu=cu->nurb.first; nu; nu=nu->next) {
+ if(nu->bp) {
+ mode= KEY_BPOINT;
+ estep= nu->pntsu*nu->pntsv;
+ }
+ else if(nu->bezt) {
+ mode= KEY_BEZTRIPLE;
+ estep= 3*nu->pntsu;
}
-#endif // XXX old animation system
-
- flag= setkeys(ctime, &key->block, k, t, 0);
-
- if(flag==0)
- do_key(a, a+step, tot, (char *)out, key, actkb, k, t, 0);
else
- cp_key(a, a+step, tot, (char *)out, key, actkb, k[2], NULL, 0);
+ step= 0;
+
+ a= 0;
+ while (a < estep) {
+ if (remain <= 0) {
+ cfra+= delta;
+ ctime= bsystem_time(scene, 0, cfra, 0.0f); // XXX old cruft
+
+ ctime /= 100.0f;
+ CLAMP(ctime, 0.0f, 1.0f); // XXX for compat, we use this, but this clamping was confusing
+ flag= setkeys(ctime, &key->block, k, t, 0);
+
+ remain= step;
+ }
+
+ count= MIN2(remain, estep);
+ if (mode == KEY_BEZTRIPLE) {
+ count += 3 - count % 3;
+ }
+
+ if(flag==0)
+ do_key(i, i+count, tot, (char *)out, key, actkb, k, t, mode);
+ else
+ cp_key(i, i+count, tot, (char *)out, key, actkb, k[2], NULL, mode);
+
+ a += count;
+ i += count;
+ remain -= count;
+ }
}
}
else {
@@ -1385,11 +1415,11 @@ float *do_ob_key(Scene *scene, Object *ob)
for(nu=cu->nurb.first; nu; nu=nu->next) {
if(nu->bezt) {
tot += 3*nu->pntsu;
- size += nu->pntsu*10*sizeof(float);
+ size += nu->pntsu*12*sizeof(float);
}
else if(nu->bp) {
tot += nu->pntsu*nu->pntsv;
- size += nu->pntsu*nu->pntsv*10*sizeof(float);
+ size += nu->pntsu*nu->pntsv*12*sizeof(float);
}
}
}
@@ -1556,14 +1586,8 @@ KeyBlock *key_get_keyblock(Key *key, int index)
/* get the appropriate KeyBlock given a name to search for */
KeyBlock *key_get_named_keyblock(Key *key, const char name[])
{
- KeyBlock *kb;
-
- if (key && name) {
- for (kb= key->block.first; kb; kb= kb->next) {
- if (strcmp(name, kb->name)==0)
- return kb;
- }
- }
+ if (key && name)
+ return BLI_findstring(&key->block, name, offsetof(KeyBlock, name));
return NULL;
}
@@ -1867,9 +1891,12 @@ void vertcos_to_key(Object *ob, KeyBlock *kb, float (*vertCos)[3])
tot= count_curveverts(&cu->nurb);
}
- fp= kb->data= MEM_callocN(tot*elemsize, "key_to_vertcos vertCos");
+ if (tot == 0) {
+ kb->data= NULL;
+ return;
+ }
- if (tot == 0) return;
+ fp= kb->data= MEM_callocN(tot*elemsize, "key_to_vertcos vertCos");
/* Copy coords to keyblock */
diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c
index 55934c0af5c..725f9a34b25 100644
--- a/source/blender/blenkernel/intern/lattice.c
+++ b/source/blender/blenkernel/intern/lattice.c
@@ -45,6 +45,7 @@
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
#include "DNA_lattice_types.h"
#include "DNA_curve_types.h"
#include "DNA_key_types.h"
@@ -175,7 +176,7 @@ void resizelattice(Lattice *lt, int uNew, int vNew, int wNew, Object *ltOb)
bp= lt->def;
for (i=0; i<lt->pntsu*lt->pntsv*lt->pntsw; i++,bp++) {
- VECCOPY(bp->vec, vertexCos[i]);
+ copy_v3_v3(bp->vec, vertexCos[i]);
}
MEM_freeN(vertexCos);
@@ -225,8 +226,12 @@ void free_lattice(Lattice *lt)
if(lt->def) MEM_freeN(lt->def);
if(lt->dvert) free_dverts(lt->dvert, lt->pntsu*lt->pntsv*lt->pntsw);
if(lt->editlatt) {
- if(lt->editlatt->def) MEM_freeN(lt->editlatt->def);
- if(lt->editlatt->dvert) free_dverts(lt->editlatt->dvert, lt->pntsu*lt->pntsv*lt->pntsw);
+ Lattice *editlt= lt->editlatt->latt;
+
+ if(editlt->def) MEM_freeN(editlt->def);
+ if(editlt->dvert) free_dverts(editlt->dvert, lt->pntsu*lt->pntsv*lt->pntsw);
+
+ MEM_freeN(editlt);
MEM_freeN(lt->editlatt);
}
}
@@ -295,7 +300,7 @@ void init_latt_deform(Object *oblatt, Object *ob)
float fu, fv, fw;
int u, v, w;
- if(lt->editlatt) lt= lt->editlatt;
+ if(lt->editlatt) lt= lt->editlatt->latt;
bp = lt->def;
fp= lt->latticedata= MEM_mallocN(sizeof(float)*3*lt->pntsu*lt->pntsv*lt->pntsw, "latticedata");
@@ -350,7 +355,7 @@ void calc_latt_deform(Object *ob, float *co, float weight)
MDeformVert *dvert= lattice_get_deform_verts(ob);
- if(lt->editlatt) lt= lt->editlatt;
+ if(lt->editlatt) lt= lt->editlatt->latt;
if(lt->latticedata==NULL) return;
if(lt->vgroup[0] && dvert) {
@@ -446,7 +451,7 @@ void end_latt_deform(Object *ob)
{
Lattice *lt= ob->data;
- if(lt->editlatt) lt= lt->editlatt;
+ if(lt->editlatt) lt= lt->editlatt->latt;
if(lt->latticedata)
MEM_freeN(lt->latticedata);
@@ -474,7 +479,9 @@ static void init_curve_deform(Object *par, Object *ob, CurveDeform *cd, int dloc
invert_m4_m4(par->imat, par->obmat);
mul_v3_m4v3(cd->dloc, par->imat, ob->obmat[3]);
}
- else cd->dloc[0]=cd->dloc[1]=cd->dloc[2]= 0.0f;
+ else {
+ cd->dloc[0]=cd->dloc[1]=cd->dloc[2]= 0.0f;
+ }
cd->no_rot_axis= 0;
}
@@ -507,15 +514,15 @@ static int where_on_path_deform(Object *ob, float ctime, float *vec, float *dir,
if(ctime < 0.0) {
sub_v3_v3v3(dvec, path->data[1].vec, path->data[0].vec);
mul_v3_fl(dvec, ctime*(float)path->len);
- VECADD(vec, vec, dvec);
- if(quat) QUATCOPY(quat, path->data[0].quat);
+ add_v3_v3(vec, dvec);
+ if(quat) copy_qt_qt(quat, path->data[0].quat);
if(radius) *radius= path->data[0].radius;
}
else if(ctime > 1.0) {
sub_v3_v3v3(dvec, path->data[path->len-1].vec, path->data[path->len-2].vec);
mul_v3_fl(dvec, (ctime-1.0)*(float)path->len);
- VECADD(vec, vec, dvec);
- if(quat) QUATCOPY(quat, path->data[path->len-1].quat);
+ add_v3_v3(vec, dvec);
+ if(quat) copy_qt_qt(quat, path->data[path->len-1].quat);
if(radius) *radius= path->data[path->len-1].radius;
/* weight - not used but could be added */
}
@@ -608,7 +615,7 @@ static int calc_curve_deform(Scene *scene, Object *par, float *co, short axis, C
/* this is not exactly the same as 2.4x, since the axis is having rotation removed rather then
* changing the axis before calculating the tilt but serves much the same purpose */
float dir_flat[3]={0,0,0}, q[4];
- VECCOPY(dir_flat, dir);
+ copy_v3_v3(dir_flat, dir);
dir_flat[cd->no_rot_axis-1]= 0.0f;
normalize_v3(dir);
@@ -686,11 +693,11 @@ static int calc_curve_deform(Scene *scene, Object *par, float *co, short axis, C
mul_qt_v3(quat, cent);
/* translation */
- VECADD(co, cent, loc);
+ add_v3_v3v3(co, cent, loc);
if(quatp)
- QUATCOPY(quatp, quat);
-
+ copy_qt_qt(quatp, quat);
+
return 1;
}
return 0;
@@ -711,7 +718,18 @@ void curve_deform_verts(Scene *scene, Object *cuOb, Object *target, DerivedMesh
cu->flag |= (CU_PATH|CU_FOLLOW); // needed for path & bevlist
init_curve_deform(cuOb, target, &cd, (cu->flag & CU_STRETCH)==0);
-
+
+ /* dummy bounds, keep if CU_DEFORM_BOUNDS_OFF is set */
+ if(defaxis < 3) {
+ cd.dmin[0]= cd.dmin[1]= cd.dmin[2]= 0.0f;
+ cd.dmax[0]= cd.dmax[1]= cd.dmax[2]= 1.0f;
+ }
+ else {
+ /* negative, these bounds give a good rest position */
+ cd.dmin[0]= cd.dmin[1]= cd.dmin[2]= -1.0f;
+ cd.dmax[0]= cd.dmax[1]= cd.dmax[2]= 0.0f;
+ }
+
/* check whether to use vertex groups (only possible if target is a Mesh)
* we want either a Mesh with no derived data, or derived data with
* deformverts
@@ -726,62 +744,84 @@ void curve_deform_verts(Scene *scene, Object *cuOb, Object *target, DerivedMesh
use_vgroups = 0;
if(vgroup && vgroup[0] && use_vgroups) {
- bDeformGroup *curdef;
Mesh *me= target->data;
- int index;
-
- /* find the group (weak loop-in-loop) */
- for(index = 0, curdef = target->defbase.first; curdef;
- curdef = curdef->next, index++)
- if (!strcmp(curdef->name, vgroup))
- break;
+ int index= defgroup_name_index(target, vgroup);
- if(curdef && (me->dvert || dm)) {
+ if(index != -1 && (me->dvert || dm)) {
MDeformVert *dvert = me->dvert;
float vec[3];
- int j;
-
- INIT_MINMAX(cd.dmin, cd.dmax);
-
- for(a = 0; a < numVerts; a++, dvert++) {
- if(dm) dvert = dm->getVertData(dm, a, CD_MDEFORMVERT);
+ float weight;
+
- for(j = 0; j < dvert->totweight; j++) {
- if(dvert->dw[j].def_nr == index) {
+ if(cu->flag & CU_DEFORM_BOUNDS_OFF) {
+ /* dummy bounds */
+ cd.dmin[0]= cd.dmin[1]= cd.dmin[2]= 0.0f;
+ cd.dmax[0]= cd.dmax[1]= cd.dmax[2]= 1.0f;
+
+ dvert = me->dvert;
+ for(a = 0; a < numVerts; a++, dvert++) {
+ if(dm) dvert = dm->getVertData(dm, a, CD_MDEFORMVERT);
+ weight= defvert_find_weight(dvert, index);
+
+ if(weight > 0.0f) {
mul_m4_v3(cd.curvespace, vertexCos[a]);
- DO_MINMAX(vertexCos[a], cd.dmin, cd.dmax);
- break;
+ copy_v3_v3(vec, vertexCos[a]);
+ calc_curve_deform(scene, cuOb, vec, defaxis, &cd, NULL);
+ interp_v3_v3v3(vertexCos[a], vertexCos[a], vec, weight);
+ mul_m4_v3(cd.objectspace, vertexCos[a]);
}
}
}
-
- dvert = me->dvert;
- for(a = 0; a < numVerts; a++, dvert++) {
- if(dm) dvert = dm->getVertData(dm, a, CD_MDEFORMVERT);
-
- for(j = 0; j < dvert->totweight; j++) {
- if(dvert->dw[j].def_nr == index) {
- VECCOPY(vec, vertexCos[a]);
+ else {
+ /* set mesh min/max bounds */
+ INIT_MINMAX(cd.dmin, cd.dmax);
+
+ for(a = 0; a < numVerts; a++, dvert++) {
+ if(dm) dvert = dm->getVertData(dm, a, CD_MDEFORMVERT);
+
+ if(defvert_find_weight(dvert, index) > 0.0f) {
+ mul_m4_v3(cd.curvespace, vertexCos[a]);
+ DO_MINMAX(vertexCos[a], cd.dmin, cd.dmax);
+ }
+ }
+
+ dvert = me->dvert;
+ for(a = 0; a < numVerts; a++, dvert++) {
+ if(dm) dvert = dm->getVertData(dm, a, CD_MDEFORMVERT);
+
+ weight= defvert_find_weight(dvert, index);
+
+ if(weight > 0.0f) {
+ copy_v3_v3(vec, vertexCos[a]);
calc_curve_deform(scene, cuOb, vec, defaxis, &cd, NULL);
- interp_v3_v3v3(vertexCos[a], vertexCos[a], vec,
- dvert->dw[j].weight);
+ interp_v3_v3v3(vertexCos[a], vertexCos[a], vec, weight);
mul_m4_v3(cd.objectspace, vertexCos[a]);
- break;
}
}
}
}
- } else {
- INIT_MINMAX(cd.dmin, cd.dmax);
-
- for(a = 0; a < numVerts; a++) {
- mul_m4_v3(cd.curvespace, vertexCos[a]);
- DO_MINMAX(vertexCos[a], cd.dmin, cd.dmax);
+ }
+ else {
+ if(cu->flag & CU_DEFORM_BOUNDS_OFF) {
+ for(a = 0; a < numVerts; a++) {
+ mul_m4_v3(cd.curvespace, vertexCos[a]);
+ calc_curve_deform(scene, cuOb, vertexCos[a], defaxis, &cd, NULL);
+ mul_m4_v3(cd.objectspace, vertexCos[a]);
+ }
}
-
- for(a = 0; a < numVerts; a++) {
- calc_curve_deform(scene, cuOb, vertexCos[a], defaxis, &cd, NULL);
- mul_m4_v3(cd.objectspace, vertexCos[a]);
+ else {
+ /* set mesh min max bounds */
+ INIT_MINMAX(cd.dmin, cd.dmax);
+
+ for(a = 0; a < numVerts; a++) {
+ mul_m4_v3(cd.curvespace, vertexCos[a]);
+ DO_MINMAX(vertexCos[a], cd.dmin, cd.dmax);
+ }
+
+ for(a = 0; a < numVerts; a++) {
+ calc_curve_deform(scene, cuOb, vertexCos[a], defaxis, &cd, NULL);
+ mul_m4_v3(cd.objectspace, vertexCos[a]);
+ }
}
}
cu->flag = flag;
@@ -803,8 +843,8 @@ void curve_deform_vector(Scene *scene, Object *cuOb, Object *target, float *orco
init_curve_deform(cuOb, target, &cd, 0); /* 0 no dloc */
cd.no_rot_axis= no_rot_axis; /* option to only rotate for XY, for example */
- VECCOPY(cd.dmin, orco);
- VECCOPY(cd.dmax, orco);
+ copy_v3_v3(cd.dmin, orco);
+ copy_v3_v3(cd.dmax, orco);
mul_m4_v3(cd.curvespace, vec);
@@ -967,13 +1007,13 @@ float (*lattice_getVertexCos(struct Object *ob, int *numVerts_r))[3]
int i, numVerts;
float (*vertexCos)[3];
- if(lt->editlatt) lt= lt->editlatt;
+ if(lt->editlatt) lt= lt->editlatt->latt;
numVerts = *numVerts_r = lt->pntsu*lt->pntsv*lt->pntsw;
vertexCos = MEM_mallocN(sizeof(*vertexCos)*numVerts,"lt_vcos");
for (i=0; i<numVerts; i++) {
- VECCOPY(vertexCos[i], lt->def[i].vec);
+ copy_v3_v3(vertexCos[i], lt->def[i].vec);
}
return vertexCos;
@@ -985,7 +1025,7 @@ void lattice_applyVertexCos(struct Object *ob, float (*vertexCos)[3])
int i, numVerts = lt->pntsu*lt->pntsv*lt->pntsw;
for (i=0; i<numVerts; i++) {
- VECCOPY(lt->def[i].vec, vertexCos[i]);
+ copy_v3_v3(lt->def[i].vec, vertexCos[i]);
}
}
@@ -1031,7 +1071,7 @@ struct MDeformVert* lattice_get_deform_verts(struct Object *oblatt)
if(oblatt->type == OB_LATTICE)
{
Lattice *lt = (Lattice*)oblatt->data;
- if(lt->editlatt) lt= lt->editlatt;
+ if(lt->editlatt) lt= lt->editlatt->latt;
return lt->dvert;
}
diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c
index d6a3dc8d983..26be4114db0 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -43,27 +43,29 @@
#include "MEM_guardedalloc.h"
/* all types are needed here, in order to do memory operations */
-#include "DNA_scene_types.h"
-#include "DNA_mesh_types.h"
-#include "DNA_lattice_types.h"
-#include "DNA_meta_types.h"
-#include "DNA_material_types.h"
-#include "DNA_wave_types.h"
-#include "DNA_lamp_types.h"
+#include "DNA_anim_types.h"
+#include "DNA_armature_types.h"
+#include "DNA_brush_types.h"
#include "DNA_camera_types.h"
+#include "DNA_group_types.h"
#include "DNA_ipo_types.h"
#include "DNA_key_types.h"
-#include "DNA_world_types.h"
+#include "DNA_lamp_types.h"
+#include "DNA_lattice_types.h"
+#include "DNA_material_types.h"
+#include "DNA_mesh_types.h"
+#include "DNA_meta_types.h"
+#include "DNA_nla_types.h"
+#include "DNA_node_types.h"
+#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
-#include "DNA_vfont_types.h"
-#include "DNA_text_types.h"
#include "DNA_sound_types.h"
-#include "DNA_group_types.h"
-#include "DNA_armature_types.h"
-#include "DNA_node_types.h"
-#include "DNA_nla_types.h"
+#include "DNA_text_types.h"
+#include "DNA_vfont_types.h"
#include "DNA_windowmanager_types.h"
-#include "DNA_anim_types.h"
+#include "DNA_world_types.h"
+#include "DNA_gpencil_types.h"
+
#include "BLI_blenlib.h"
#include "BLI_dynstr.h"
@@ -174,8 +176,6 @@ int id_make_local(ID *id, int test)
return 1;
case ID_IM:
return 0; /* not implemented */
- case ID_WV:
- return 0; /* deprecated */
case ID_LT:
if(!test) {
make_local_lattice((Lattice*)id);
@@ -262,9 +262,8 @@ int id_copy(ID *id, ID **newid, int test)
if(!test) *newid= (ID*)copy_texture((Tex*)id);
return 1;
case ID_IM:
- return 0; /* not implemented */
- case ID_WV:
- return 0; /* deprecated */
+ if(!test) *newid= (ID*)copy_image((Image*)id);
+ return 1;
case ID_LT:
if(!test) *newid= (ID*)copy_lattice((Lattice*)id);
return 1;
@@ -373,8 +372,6 @@ ListBase *which_libbase(Main *mainlib, short type)
return &(mainlib->tex);
case ID_IM:
return &(mainlib->image);
- case ID_WV:
- return &(mainlib->wave);
case ID_LT:
return &(mainlib->latt);
case ID_LA:
@@ -474,7 +471,6 @@ int set_listbasepointers(Main *main, ListBase **lb)
lb[a++]= &(main->curve);
lb[a++]= &(main->mball);
- lb[a++]= &(main->wave);
lb[a++]= &(main->latt);
lb[a++]= &(main->lamp);
lb[a++]= &(main->camera);
@@ -541,9 +537,6 @@ static ID *alloc_libblock_notest(short type)
case ID_IM:
id= MEM_callocN(sizeof(Image), "image");
break;
- case ID_WV:
- id= MEM_callocN(sizeof(Wave), "wave");
- break;
case ID_LT:
id= MEM_callocN(sizeof(Lattice), "latt");
break;
@@ -745,9 +738,6 @@ void free_libblock(ListBase *lb, void *idv)
case ID_IM:
free_image((Image *)id);
break;
- case ID_WV:
- /* free_wave(id); */
- break;
case ID_LT:
free_lattice((Lattice *)id);
break;
@@ -995,7 +985,7 @@ void IMAnames_to_pupstring(char **str, char *title, char *extraops, ListBase *lb
/* used by buttons.c library.c mball.c */
-void splitIDname(char *name, char *left, int *nr)
+int splitIDname(char *name, char *left, int *nr)
{
int a;
@@ -1003,19 +993,23 @@ void splitIDname(char *name, char *left, int *nr)
strncpy(left, name, 21);
a= strlen(name);
- if(a>1 && name[a-1]=='.') return;
+ if(a>1 && name[a-1]=='.') return a;
while(a--) {
if( name[a]=='.' ) {
left[a]= 0;
*nr= atol(name+a+1);
- return;
+ return a;
}
if( isdigit(name[a])==0 ) break;
left[a]= 0;
}
- strcpy(left, name);
+
+ for(a= 0; name[a]; a++)
+ left[a]= name[a];
+
+ return a;
}
static void sort_alpha_id(ListBase *lb, ID *id)
@@ -1077,8 +1071,7 @@ static ID *is_dupid(ListBase *lb, ID *id, char *name)
static int check_for_dupid(ListBase *lb, ID *id, char *name)
{
ID *idtest;
- int nr= 0, nrtest, a;
- const int maxtest=32;
+ int nr= 0, nrtest, a, left_len;
char left[32], leftest[32], in_use[32];
/* make sure input name is terminated properly */
@@ -1095,31 +1088,37 @@ static int check_for_dupid(ListBase *lb, ID *id, char *name)
/* we have a dup; need to make a new name */
/* quick check so we can reuse one of first 32 ids if vacant */
- memset(in_use, 0, maxtest);
+ memset(in_use, 0, sizeof(in_use));
/* get name portion, number portion ("name.number") */
- splitIDname( name, left, &nr);
+ left_len= splitIDname(name, left, &nr);
/* if new name will be too long, truncate it */
- if(nr>999 && strlen(left)>16) left[16]= 0;
- else if(strlen(left)>17) left[17]= 0;
-
- for( idtest = lb->first; idtest; idtest = idtest->next ) {
- if( id != idtest && idtest->lib == NULL ) {
- splitIDname(idtest->name+2, leftest, &nrtest);
- /* if base names match... */
- /* optimized */
- if( *left == *leftest && strcmp(left, leftest)==0 ) {
- if(nrtest < maxtest)
- in_use[nrtest]= 1; /* mark as used */
- if(nr <= nrtest)
- nr= nrtest+1; /* track largest unused */
- }
+ if(nr > 999 && left_len > 16) {
+ left[16]= 0;
+ left_len= 16;
+ }
+ else if(left_len > 17) {
+ left[17]= 0;
+ left_len= 17;
+ }
+
+ for(idtest= lb->first; idtest; idtest= idtest->next) {
+ if( (id != idtest) &&
+ (idtest->lib == NULL) &&
+ (*name == *(idtest->name+2)) &&
+ (strncmp(name, idtest->name+2, left_len)==0) &&
+ (splitIDname(idtest->name+2, leftest, &nrtest) == left_len)
+ ) {
+ if(nrtest < sizeof(in_use))
+ in_use[nrtest]= 1; /* mark as used */
+ if(nr <= nrtest)
+ nr= nrtest+1; /* track largest unused */
}
}
/* decide which value of nr to use */
- for(a=0; a<maxtest; a++) {
+ for(a=0; a < sizeof(in_use); a++) {
if(a>=nr) break; /* stop when we've check up to biggest */
if( in_use[a]==0 ) { /* found an unused value */
nr = a;
@@ -1129,9 +1128,10 @@ static int check_for_dupid(ListBase *lb, ID *id, char *name)
/* If the original name has no numeric suffix,
* rather than just chopping and adding numbers,
- * shave off the end chars until we have a unique name */
- if (nr==0) {
- int len = strlen(name)-1;
+ * shave off the end chars until we have a unique name.
+ * Check the null terminators match as well so we dont get Cube.000 -> Cube.00 */
+ if (nr==0 && name[left_len]== '\0') {
+ int len = left_len-1;
idtest= is_dupid(lb, id, name);
while (idtest && len> 1) {
@@ -1142,10 +1142,11 @@ static int check_for_dupid(ListBase *lb, ID *id, char *name)
/* otherwise just continue and use a number suffix */
}
- if(nr > 999 && strlen(left) > 16) {
+ if(nr > 999 && left_len > 16) {
/* this would overflow name buffer */
left[16] = 0;
- strcpy( name, left );
+ /* left_len = 16; */ /* for now this isnt used again */
+ memcpy(name, left, sizeof(char) * 16);
continue;
}
/* this format specifier is from hell... */
@@ -1303,7 +1304,7 @@ void all_local(Library *lib, int untagged_only)
/* The check on the second line (LIB_PRE_EXISTING) is done so its
* possible to tag data you dont want to be made local, used for
- * appending data, so any libdata alredy linked wont become local
+ * appending data, so any libdata already linked wont become local
* (very nasty to discover all your links are lost after appending)
* */
if(id->flag & (LIB_EXTERN|LIB_INDIRECT|LIB_NEW) &&
@@ -1390,3 +1391,11 @@ void rename_id(ID *id, char *name)
new_id(lb, id, name);
}
+void name_uiprefix_id(char *name, ID *id)
+{
+ name[0] = id->lib ? 'L':' ';
+ name[1] = id->flag & LIB_FAKEUSER ? 'F':' ';
+ name[2] = ' ';
+
+ strcpy(name+3, id->name+2);
+}
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index 11c96e9a347..9774e97f69b 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -56,10 +56,6 @@
#include "BKE_node.h"
#include "BKE_utildefines.h"
-#ifndef DISABLE_PYTHON
-#include "BPY_extern.h"
-#endif
-
#include "GPU_material.h"
/* used in UI and render */
@@ -236,6 +232,7 @@ Material *copy_material(Material *ma)
void make_local_material(Material *ma)
{
+ Main *bmain= G.main;
Object *ob;
Mesh *me;
Curve *cu;
@@ -261,7 +258,7 @@ void make_local_material(Material *ma)
}
/* test objects */
- ob= G.main->object.first;
+ ob= bmain->object.first;
while(ob) {
if(ob->mat) {
for(a=0; a<ob->totcol; a++) {
@@ -274,7 +271,7 @@ void make_local_material(Material *ma)
ob= ob->id.next;
}
/* test meshes */
- me= G.main->mesh.first;
+ me= bmain->mesh.first;
while(me) {
if(me->mat) {
for(a=0; a<me->totcol; a++) {
@@ -287,7 +284,7 @@ void make_local_material(Material *ma)
me= me->id.next;
}
/* test curves */
- cu= G.main->curve.first;
+ cu= bmain->curve.first;
while(cu) {
if(cu->mat) {
for(a=0; a<cu->totcol; a++) {
@@ -300,7 +297,7 @@ void make_local_material(Material *ma)
cu= cu->id.next;
}
/* test mballs */
- mb= G.main->mball.first;
+ mb= bmain->mball.first;
while(mb) {
if(mb->mat) {
for(a=0; a<mb->totcol; a++) {
@@ -329,7 +326,7 @@ void make_local_material(Material *ma)
man->id.us= 0;
/* do objects */
- ob= G.main->object.first;
+ ob= bmain->object.first;
while(ob) {
if(ob->mat) {
for(a=0; a<ob->totcol; a++) {
@@ -345,7 +342,7 @@ void make_local_material(Material *ma)
ob= ob->id.next;
}
/* do meshes */
- me= G.main->mesh.first;
+ me= bmain->mesh.first;
while(me) {
if(me->mat) {
for(a=0; a<me->totcol; a++) {
@@ -361,7 +358,7 @@ void make_local_material(Material *ma)
me= me->id.next;
}
/* do curves */
- cu= G.main->curve.first;
+ cu= bmain->curve.first;
while(cu) {
if(cu->mat) {
for(a=0; a<cu->totcol; a++) {
@@ -377,7 +374,7 @@ void make_local_material(Material *ma)
cu= cu->id.next;
}
/* do mballs */
- mb= G.main->mball.first;
+ mb= bmain->mball.first;
while(mb) {
if(mb->mat) {
for(a=0; a<mb->totcol; a++) {
@@ -783,14 +780,14 @@ void init_render_material(Material *mat, int r_mode, float *amb)
}
}
-void init_render_materials(int r_mode, float *amb)
+void init_render_materials(Main *bmain, int r_mode, float *amb)
{
Material *ma;
/* clear these flags before going over materials, to make sure they
* are cleared only once, otherwise node materials contained in other
* node materials can go wrong */
- for(ma= G.main->mat.first; ma; ma= ma->id.next) {
+ for(ma= bmain->mat.first; ma; ma= ma->id.next) {
if(ma->id.us) {
ma->texco= 0;
ma->mapto= 0;
@@ -798,7 +795,7 @@ void init_render_materials(int r_mode, float *amb)
}
/* two steps, first initialize, then or the flags for layers */
- for(ma= G.main->mat.first; ma; ma= ma->id.next) {
+ for(ma= bmain->mat.first; ma; ma= ma->id.next) {
/* is_used flag comes back in convertblender.c */
ma->flag &= ~MA_IS_USED;
if(ma->id.us)
@@ -815,10 +812,10 @@ void end_render_material(Material *mat)
ntreeEndExecTree(mat->nodetree); /* has internal flag to detect it only does it once */
}
-void end_render_materials(void)
+void end_render_materials(Main *bmain)
{
Material *ma;
- for(ma= G.main->mat.first; ma; ma= ma->id.next)
+ for(ma= bmain->mat.first; ma; ma= ma->id.next)
if(ma->id.us)
end_render_material(ma);
}
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index 956fe10ee4b..71abab93989 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -384,6 +384,7 @@ void make_local_tface(Mesh *me)
void make_local_mesh(Mesh *me)
{
+ Main *bmain= G.main;
Object *ob;
Mesh *men;
int local=0, lib=0;
@@ -404,7 +405,7 @@ void make_local_mesh(Mesh *me)
return;
}
- ob= G.main->object.first;
+ ob= bmain->object.first;
while(ob) {
if( me==get_mesh(ob) ) {
if(ob->id.lib) lib= 1;
@@ -425,7 +426,7 @@ void make_local_mesh(Mesh *me)
men= copy_mesh(me);
men->id.us= 0;
- ob= G.main->object.first;
+ ob= bmain->object.first;
while(ob) {
if( me==get_mesh(ob) ) {
if(ob->id.lib==0) {
@@ -439,33 +440,23 @@ void make_local_mesh(Mesh *me)
void boundbox_mesh(Mesh *me, float *loc, float *size)
{
- MVert *mvert;
BoundBox *bb;
float min[3], max[3];
float mloc[3], msize[3];
- int a;
if(me->bb==0) me->bb= MEM_callocN(sizeof(BoundBox), "boundbox");
bb= me->bb;
-
- INIT_MINMAX(min, max);
if (!loc) loc= mloc;
if (!size) size= msize;
- mvert= me->mvert;
- for(a=0; a<me->totvert; a++, mvert++) {
- DO_MINMAX(mvert->co, min, max);
- }
-
- if(!me->totvert) {
+ INIT_MINMAX(min, max);
+ if(!minmax_mesh(me, min, max)) {
min[0] = min[1] = min[2] = -1.0f;
max[0] = max[1] = max[2] = 1.0f;
}
- loc[0]= (min[0]+max[0])/2.0f;
- loc[1]= (min[1]+max[1])/2.0f;
- loc[2]= (min[2]+max[2])/2.0f;
+ mid_v3_v3v3(loc, min, max);
size[0]= (max[0]-min[0])/2.0f;
size[1]= (max[1]-min[1])/2.0f;
@@ -488,9 +479,9 @@ void tex_space_mesh(Mesh *me)
else if(size[a]<0.0 && size[a]> -0.00001) size[a]= -0.00001;
}
- VECCOPY(me->loc, loc);
- VECCOPY(me->size, size);
- me->rot[0]= me->rot[1]= me->rot[2]= 0.0;
+ copy_v3_v3(me->loc, loc);
+ copy_v3_v3(me->size, size);
+ zero_v3(me->rot);
}
}
@@ -532,9 +523,7 @@ float *get_mesh_orco_verts(Object *ob)
totvert = MIN2(tme->totvert, me->totvert);
for(a=0; a<totvert; a++, mvert++) {
- vcos[a][0]= mvert->co[0];
- vcos[a][1]= mvert->co[1];
- vcos[a][2]= mvert->co[2];
+ copy_v3_v3(vcos[a], mvert->co);
}
return (float*)vcos;
@@ -550,9 +539,7 @@ void transform_mesh_orco_verts(Mesh *me, float (*orco)[3], int totvert, int inve
if(invert) {
for(a=0; a<totvert; a++) {
float *co = orco[a];
- co[0] = co[0]*size[0] + loc[0];
- co[1] = co[1]*size[1] + loc[1];
- co[2] = co[2]*size[2] + loc[2];
+ madd_v3_v3v3v3(co, loc, co, size);
}
}
else {
@@ -816,7 +803,6 @@ void mball_to_mesh(ListBase *lb, Mesh *me)
if(dl==0) return;
if(dl->type==DL_INDEX4) {
- me->flag= ME_NOPUNOFLIP;
me->totvert= dl->nr;
me->totface= dl->parts;
@@ -1059,6 +1045,7 @@ int nurbs_to_mdata_customdb(Object *ob, ListBase *dispbase, MVert **allvert, int
/* this may fail replacing ob->data, be sure to check ob->type */
void nurbs_to_mesh(Object *ob)
{
+ Main *bmain= G.main;
Object *ob1;
DerivedMesh *dm= ob->derivedFinal;
Mesh *me;
@@ -1101,13 +1088,13 @@ void nurbs_to_mesh(Object *ob)
cu->totcol= 0;
if(ob->data) {
- free_libblock(&G.main->curve, ob->data);
+ free_libblock(&bmain->curve, ob->data);
}
ob->data= me;
ob->type= OB_MESH;
/* other users */
- ob1= G.main->object.first;
+ ob1= bmain->object.first;
while(ob1) {
if(ob1->data==cu) {
ob1->type= OB_MESH;
@@ -1368,14 +1355,10 @@ void mesh_calc_normals(MVert *mverts, int numVerts, MFace *mfaces, int numFaces,
MVert *mv= &mverts[i];
float *no= tnorms[i];
- if (normalize_v3(no)==0.0) {
- VECCOPY(no, mv->co);
- normalize_v3(no);
- }
+ if (normalize_v3(no)==0.0)
+ normalize_v3_v3(no, mv->co);
- mv->no[0]= (short)(no[0]*32767.0);
- mv->no[1]= (short)(no[1]*32767.0);
- mv->no[2]= (short)(no[2]*32767.0);
+ normal_float_to_short_v3(mv->no, no);
}
MEM_freeN(tnorms);
@@ -1889,3 +1872,59 @@ void mesh_calc_poly_normal(MPoly *mpoly, MLoop *loopstart,
no[2] = 1.0;
}
}
+
+/* basic vertex data functions */
+int minmax_mesh(Mesh *me, float min[3], float max[3])
+{
+ int i= me->totvert;
+ MVert *mvert;
+ for(mvert= me->mvert; i--; mvert++) {
+ DO_MINMAX(mvert->co, min, max);
+ }
+
+ return (me->totvert != 0);
+}
+
+int mesh_center_median(Mesh *me, float cent[3])
+{
+ int i= me->totvert;
+ MVert *mvert;
+ zero_v3(cent);
+ for(mvert= me->mvert; i--; mvert++) {
+ add_v3_v3(cent, mvert->co);
+ }
+ mul_v3_fl(cent, 1.0f/(float)me->totvert);
+
+ return (me->totvert != 0);
+}
+
+int mesh_center_bounds(Mesh *me, float cent[3])
+{
+ float min[3], max[3];
+ INIT_MINMAX(min, max);
+ if(minmax_mesh(me, min, max)) {
+ mid_v3_v3v3(cent, min, max);
+ return 1;
+ }
+
+ return 0;
+}
+
+void mesh_translate(Mesh *me, float offset[3], int do_keys)
+{
+ int i= me->totvert;
+ MVert *mvert;
+ for(mvert= me->mvert; i--; mvert++) {
+ add_v3_v3(mvert->co, offset);
+ }
+
+ if (do_keys && me->key) {
+ KeyBlock *kb;
+ for (kb=me->key->block.first; kb; kb=kb->next) {
+ float *fp= kb->data;
+ for (i= kb->totelem; i--; fp+=3) {
+ add_v3_v3(fp, offset);
+ }
+ }
+ }
+}
diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c
index 858e9d6c6d9..63f0f1fa091 100644
--- a/source/blender/blenkernel/intern/modifier.c
+++ b/source/blender/blenkernel/intern/modifier.c
@@ -34,13 +34,17 @@
*
*/
-#include "stddef.h"
-#include "string.h"
-#include "stdarg.h"
-#include "math.h"
-#include "float.h"
+#include <stddef.h>
+#include <string.h>
+#include <stdarg.h>
+#include <math.h>
+#include <float.h>
#include "DNA_armature_types.h"
+#include "DNA_object_types.h"
+#include "DNA_meshdata_types.h"
+
+#include "MEM_guardedalloc.h"
#include "BKE_bmesh.h"
#include "BKE_cloth.h"
@@ -193,7 +197,7 @@ void modifier_copyData(ModifierData *md, ModifierData *target)
mti->copyData(md, target);
}
-int modifier_couldBeCage(Scene *scene, ModifierData *md)
+int modifier_couldBeCage(struct Scene *scene, ModifierData *md)
{
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
@@ -233,7 +237,7 @@ void modifier_setError(ModifierData *md, char *format, ...)
* also used in transform_conversion.c, to detect CrazySpace [tm] (2nd arg
* then is NULL)
*/
-int modifiers_getCageIndex(Scene *scene, Object *ob, int *lastPossibleCageIndex_r, int virtual_)
+int modifiers_getCageIndex(struct Scene *scene, Object *ob, int *lastPossibleCageIndex_r, int virtual_)
{
ModifierData *md = (virtual_)? modifiers_getVirtualModifierList(ob): ob->modifiers.first;
int i, cageIndex = -1;
@@ -283,7 +287,7 @@ int modifiers_isParticleEnabled(Object *ob)
return (md && md->mode & (eModifierMode_Realtime | eModifierMode_Render));
}
-int modifier_isEnabled(Scene *scene, ModifierData *md, int required_mode)
+int modifier_isEnabled(struct Scene *scene, ModifierData *md, int required_mode)
{
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
@@ -298,7 +302,7 @@ int modifier_isEnabled(Scene *scene, ModifierData *md, int required_mode)
return 1;
}
-LinkNode *modifiers_calcDataMasks(Scene *scene, Object *ob, ModifierData *md, CustomDataMask dataMask, int required_mode)
+LinkNode *modifiers_calcDataMasks(struct Scene *scene, Object *ob, ModifierData *md, CustomDataMask dataMask, int required_mode)
{
LinkNode *dataMasks = NULL;
LinkNode *curr, *prev;
@@ -487,7 +491,7 @@ int modifier_isCorrectableDeformed(ModifierData *md)
return 0;
}
-int modifiers_isCorrectableDeformed(Scene *scene, Object *ob)
+int modifiers_isCorrectableDeformed(struct Scene *scene, Object *ob)
{
ModifierData *md = modifiers_getVirtualModifierList(ob);
diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c
index 8d2ad49e7bf..b053d615756 100644
--- a/source/blender/blenkernel/intern/nla.c
+++ b/source/blender/blenkernel/intern/nla.c
@@ -1265,13 +1265,13 @@ void BKE_nlastrip_validate_name (AnimData *adt, NlaStrip *strip)
char *dot;
/* Strip off the suffix */
- dot = strchr(strip->name, '.');
+ dot = strrchr(strip->name, '.');
if (dot) *dot=0;
/* Try different possibilities */
for (number = 1; number <= 999; number++) {
/* assemble alternative name */
- BLI_snprintf(tempname, 128, "%s%c%03d", strip->name, ".", number);
+ BLI_snprintf(tempname, 128, "%s.%03d", strip->name, number);
/* if hash doesn't have this, set it */
if (BLI_ghash_haskey(gh, tempname) == 0) {
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index 838ec24391c..eb09ecf2e6e 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -45,7 +45,6 @@
#include "PIL_time.h"
-#include "MEM_guardedalloc.h"
#include "CMP_node.h"
#include "intern/CMP_util.h" /* stupid include path... */
@@ -735,13 +734,7 @@ void nodeGroupSocketUseFlags(bNodeTree *ngroup)
/* finds a node based on its name */
bNode *nodeFindNodebyName(bNodeTree *ntree, const char *name)
{
- bNode *node=NULL;
-
- for(node= ntree->nodes.first; node; node= node->next) {
- if (strcmp(name, node->name) == 0)
- break;
- }
- return node;
+ return BLI_findstring(&ntree->nodes, name, offsetof(bNode, name));
}
/* finds a node based on given socket */
@@ -1064,6 +1057,7 @@ bNodeTree *ntreeAddTree(int type)
* - internal_select is only 1 when used for duplicating selected nodes (i.e. Shift-D duplicate operator)
* - this gets called when executing compositing updates (for threaded previews)
* - when the nodetree datablock needs to be copied (i.e. when users get copied)
+ * - for scene duplication use ntreeSwapID() after so we dont have stale pointers.
*/
bNodeTree *ntreeCopyTree(bNodeTree *ntree, int internal_select)
{
@@ -1142,6 +1136,18 @@ bNodeTree *ntreeCopyTree(bNodeTree *ntree, int internal_select)
return newtree;
}
+/* use when duplicating scenes */
+void ntreeSwitchID(bNodeTree *ntree, ID *id_from, ID *id_to)
+{
+ bNode *node;
+ /* for scene duplication only */
+ for(node= ntree->nodes.first; node; node= node->next) {
+ if(node->id==id_from) {
+ node->id= id_to;
+ }
+ }
+}
+
/* *************** preview *********** */
/* if node->preview, then we assume the rect to exist */
@@ -1842,9 +1848,8 @@ static void node_group_execute(bNodeStack *stack, void *data, bNode *gnode, bNod
/* for groups, only execute outputs for edited group */
if(node->typeinfo->nclass==NODE_CLASS_OUTPUT) {
- if(gnode->flag & NODE_GROUP_EDIT)
- if(node->flag & NODE_DO_OUTPUT)
- node->typeinfo->execfunc(data, node, nsin, nsout);
+ if(node->type==CMP_NODE_OUTPUT_FILE || (gnode->flag & NODE_GROUP_EDIT))
+ node->typeinfo->execfunc(data, node, nsin, nsout);
}
else
node->typeinfo->execfunc(data, node, nsin, nsout);
@@ -2565,7 +2570,7 @@ bNodeTree *ntreeLocalize(bNodeTree *ntree)
if(ELEM(node->type, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER)) {
if(node->id) {
if(node->flag & NODE_DO_OUTPUT)
- node->new_node->id= (ID *)BKE_image_copy((Image *)node->id);
+ node->new_node->id= (ID *)copy_image((Image *)node->id);
else
node->new_node->id= NULL;
}
@@ -2651,8 +2656,9 @@ void ntreeLocalMerge(bNodeTree *localtree, bNodeTree *ntree)
for(lsock= lnode->outputs.first; lsock; lsock= lsock->next) {
if(outsocket_exists(lnode->new_node, lsock->new_sock)) {
lsock->new_sock->ns.data= lsock->ns.data;
+ compbuf_set_node(lsock->new_sock->ns.data, lnode->new_node);
lsock->ns.data= NULL;
- lsock->new_sock= NULL;
+ lsock->new_sock= NULL;
}
}
}
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index a6565ade028..2649d95dd88 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -284,7 +284,7 @@ void free_object(Object *ob)
ob->path= 0;
if(ob->adt) BKE_free_animdata((ID *)ob);
if(ob->poselib) ob->poselib->id.us--;
- if(ob->gpd) ob->gpd->id.us--;
+ if(ob->gpd) ((ID *)ob->gpd)->us--;
if(ob->defbase.first)
BLI_freelistN(&ob->defbase);
if(ob->pose)
@@ -323,6 +323,7 @@ static void unlink_object__unlinkModifierLinks(void *userData, Object *ob, Objec
void unlink_object(Scene *scene, Object *ob)
{
+ Main *bmain= G.main;
Object *obt;
Material *mat;
World *wrld;
@@ -344,7 +345,7 @@ void unlink_object(Scene *scene, Object *ob)
/* check all objects: parents en bevels and fields, also from libraries */
// FIXME: need to check all animation blocks (drivers)
- obt= G.main->object.first;
+ obt= bmain->object.first;
while(obt) {
if(obt->proxy==ob)
obt->proxy= NULL;
@@ -518,7 +519,7 @@ void unlink_object(Scene *scene, Object *ob)
}
/* materials */
- mat= G.main->mat.first;
+ mat= bmain->mat.first;
while(mat) {
for(a=0; a<MAX_MTEX; a++) {
@@ -532,7 +533,7 @@ void unlink_object(Scene *scene, Object *ob)
}
/* textures */
- tex= G.main->tex.first;
+ tex= bmain->tex.first;
while(tex) {
if(tex->env) {
if(tex->env->object == ob) tex->env->object= NULL;
@@ -541,7 +542,7 @@ void unlink_object(Scene *scene, Object *ob)
}
/* worlds */
- wrld= G.main->world.first;
+ wrld= bmain->world.first;
while(wrld) {
if(wrld->id.lib==NULL) {
for(a=0; a<MAX_MTEX; a++) {
@@ -554,7 +555,7 @@ void unlink_object(Scene *scene, Object *ob)
}
/* scenes */
- sce= G.main->scene.first;
+ sce= bmain->scene.first;
while(sce) {
if(sce->id.lib==NULL) {
if(sce->camera==ob) sce->camera= NULL;
@@ -586,7 +587,7 @@ void unlink_object(Scene *scene, Object *ob)
#if 0 // XXX old animation system
/* ipos */
- ipo= G.main->ipo.first;
+ ipo= bmain->ipo.first;
while(ipo) {
if(ipo->id.lib==NULL) {
IpoCurve *icu;
@@ -600,7 +601,7 @@ void unlink_object(Scene *scene, Object *ob)
#endif // XXX old animation system
/* screens */
- sc= G.main->screen.first;
+ sc= bmain->screen.first;
while(sc) {
ScrArea *sa= sc->areabase.first;
while(sa) {
@@ -665,14 +666,14 @@ void unlink_object(Scene *scene, Object *ob)
}
/* groups */
- group= G.main->group.first;
+ group= bmain->group.first;
while(group) {
rem_from_group(group, ob, NULL, NULL);
group= group->id.next;
}
/* cameras */
- camera= G.main->camera.first;
+ camera= bmain->camera.first;
while(camera) {
if (camera->dof_ob==ob) {
camera->dof_ob = NULL;
@@ -726,6 +727,7 @@ Camera *copy_camera(Camera *cam)
void make_local_camera(Camera *cam)
{
+ Main *bmain= G.main;
Object *ob;
Camera *camn;
int local=0, lib=0;
@@ -743,7 +745,7 @@ void make_local_camera(Camera *cam)
return;
}
- ob= G.main->object.first;
+ ob= bmain->object.first;
while(ob) {
if(ob->data==cam) {
if(ob->id.lib) lib= 1;
@@ -761,7 +763,7 @@ void make_local_camera(Camera *cam)
camn= copy_camera(cam);
camn->id.us= 0;
- ob= G.main->object.first;
+ ob= bmain->object.first;
while(ob) {
if(ob->data==cam) {
@@ -874,6 +876,7 @@ Lamp *copy_lamp(Lamp *la)
void make_local_lamp(Lamp *la)
{
+ Main *bmain= G.main;
Object *ob;
Lamp *lan;
int local=0, lib=0;
@@ -891,7 +894,7 @@ void make_local_lamp(Lamp *la)
return;
}
- ob= G.main->object.first;
+ ob= bmain->object.first;
while(ob) {
if(ob->data==la) {
if(ob->id.lib) lib= 1;
@@ -909,7 +912,7 @@ void make_local_lamp(Lamp *la)
lan= copy_lamp(la);
lan->id.us= 0;
- ob= G.main->object.first;
+ ob= bmain->object.first;
while(ob) {
if(ob->data==la) {
@@ -949,12 +952,6 @@ void free_lamp(Lamp *la)
la->id.icon_id = 0;
}
-void *add_wave()
-{
- return 0;
-}
-
-
/* *************************************************** */
static void *add_obdata_from_type(int type)
@@ -968,7 +965,6 @@ static void *add_obdata_from_type(int type)
case OB_CAMERA: return add_camera("Camera");
case OB_LAMP: return add_lamp("Lamp");
case OB_LATTICE: return add_lattice("Lattice");
- case OB_WAVE: return add_wave();
case OB_ARMATURE: return add_armature("Armature");
case OB_EMPTY: return NULL;
default:
@@ -988,7 +984,6 @@ static char *get_obdata_defname(int type)
case OB_CAMERA: return "Camera";
case OB_LAMP: return "Lamp";
case OB_LATTICE: return "Lattice";
- case OB_WAVE: return "Wave";
case OB_ARMATURE: return "Armature";
case OB_EMPTY: return "Empty";
default:
@@ -1375,6 +1370,7 @@ void expand_local_object(Object *ob)
void make_local_object(Object *ob)
{
+ Main *bmain= G.main;
Object *obn;
Scene *sce;
Base *base;
@@ -1396,7 +1392,7 @@ void make_local_object(Object *ob)
}
else {
- sce= G.main->scene.first;
+ sce= bmain->scene.first;
while(sce) {
base= sce->base.first;
while(base) {
@@ -1419,7 +1415,7 @@ void make_local_object(Object *ob)
obn= copy_object(ob);
obn->id.us= 0;
- sce= G.main->scene.first;
+ sce= bmain->scene.first;
while(sce) {
if(sce->id.lib==0) {
base= sce->base.first;
@@ -1636,10 +1632,7 @@ float bsystem_time(struct Scene *scene, Object *ob, float cfra, float ofs)
void object_scale_to_mat3(Object *ob, float mat[][3])
{
float vec[3];
-
- vec[0]= ob->size[0]+ob->dsize[0];
- vec[1]= ob->size[1]+ob->dsize[1];
- vec[2]= ob->size[2]+ob->dsize[2];
+ add_v3_v3v3(vec, ob->size, ob->dsize);
size_to_mat3( mat,vec);
}
@@ -1697,7 +1690,7 @@ void object_mat3_to_rot(Object *ob, float mat[][3], int use_compat)
void object_apply_mat4(Object *ob, float mat[][4])
{
float mat3[3][3];
- VECCOPY(ob->loc, mat[3]);
+ copy_v3_v3(ob->loc, mat[3]);
mat4_to_size(ob->size, mat);
copy_m3_m4(mat3, mat);
object_mat3_to_rot(ob, mat3, 0);
@@ -1805,7 +1798,7 @@ static void ob_parcurve(Scene *scene, Object *ob, Object *par, float mat[][4])
copy_m4_m4(mat, rmat);
}
- VECCOPY(mat[3], vec);
+ copy_v3_v3(mat[3], vec);
}
}
@@ -1832,7 +1825,7 @@ static void ob_parbone(Object *ob, Object *par, float mat[][4])
copy_m4_m4(mat, pchan->pose_mat);
/* but for backwards compatibility, the child has to move to the tail */
- VECCOPY(vec, mat[1]);
+ copy_v3_v3(vec, mat[1]);
mul_v3_fl(vec, pchan->bone->length);
add_v3_v3(mat[3], vec);
}
@@ -1847,6 +1840,7 @@ static void give_parvert(Object *par, int nr, float *vec)
if(par->type==OB_MESH) {
Mesh *me= par->data;
em = me->edit_btmesh;
+ DerivedMesh *dm;
if(em) {
BMVert *eve;
@@ -1861,33 +1855,32 @@ static void give_parvert(Object *par, int nr, float *vec)
}
}
}
- else {
- DerivedMesh *dm = par->derivedFinal;
+
+ dm = (em)? em->derivedFinal: par->derivedFinal;
- if(dm) {
- MVert *mvert= dm->getVertArray(dm);
- int *index = (int *)dm->getVertDataArray(dm, CD_ORIGINDEX);
- int i, count = 0, vindex, numVerts = dm->getNumVerts(dm);
-
- /* get the average of all verts with (original index == nr) */
- for(i = 0; i < numVerts; i++) {
- vindex= (index)? index[i]: i;
-
- if(vindex == nr) {
- add_v3_v3(vec, mvert[i].co);
- count++;
- }
- }
+ if(dm) {
+ MVert *mvert= dm->getVertArray(dm);
+ int *index = (int *)dm->getVertDataArray(dm, CD_ORIGINDEX);
+ int i, count = 0, vindex, numVerts = dm->getNumVerts(dm);
+
+ /* get the average of all verts with (original index == nr) */
+ for(i = 0; i < numVerts; i++) {
+ vindex= (index)? index[i]: i;
- if (count==0) {
- /* keep as 0,0,0 */
- } else if(count > 0) {
- mul_v3_fl(vec, 1.0f / count);
- } else {
- /* use first index if its out of range */
- dm->getVertCo(dm, 0, vec);
+ if(vindex == nr) {
+ add_v3_v3(vec, mvert[i].co);
+ count++;
}
}
+
+ if (count==0) {
+ /* keep as 0,0,0 */
+ } else if(count > 0) {
+ mul_v3_fl(vec, 1.0f / count);
+ } else {
+ /* use first index if its out of range */
+ dm->getVertCo(dm, 0, vec);
+ }
}
}
else if (ELEM(par->type, OB_CURVE, OB_SURF)) {
@@ -1896,13 +1889,12 @@ static void give_parvert(Object *par, int nr, float *vec)
BPoint *bp;
BezTriple *bezt;
int found= 0;
-
+ ListBase *nurbs;
+
cu= par->data;
- if(cu->editnurb)
- nu= cu->editnurb->first;
- else
- nu= cu->nurb.first;
-
+ nurbs= BKE_curve_nurbs(cu);
+ nu= nurbs->first;
+
count= 0;
while(nu && !found) {
if(nu->type == CU_BEZIER) {
@@ -1941,7 +1933,7 @@ static void give_parvert(Object *par, int nr, float *vec)
DispList *dl = find_displist(&par->disp, DL_VERTS);
float *co = dl?dl->verts:NULL;
- if(latt->editlatt) latt= latt->editlatt;
+ if(latt->editlatt) latt= latt->editlatt->latt;
a= latt->pntsu*latt->pntsv*latt->pntsw;
count= 0;
@@ -2336,11 +2328,9 @@ void minmax_object(Object *ob, float *min, float *max)
if(ob->pose) {
bPoseChannel *pchan;
for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) {
- VECCOPY(vec, pchan->pose_head);
- mul_m4_v3(ob->obmat, vec);
+ mul_v3_m4v3(vec, ob->obmat, pchan->pose_head);
DO_MINMAX(vec, min, max);
- VECCOPY(vec, pchan->pose_tail);
- mul_m4_v3(ob->obmat, vec);
+ mul_v3_m4v3(vec, ob->obmat, pchan->pose_tail);
DO_MINMAX(vec, min, max);
}
break;
@@ -2527,7 +2517,7 @@ void object_handle_update(Scene *scene, Object *ob)
/* includes all keys and modifiers */
if(ob->type==OB_MESH) {
- BMEditMesh *em = ((Mesh*)ob->data)->edit_btmesh;
+ BMEditMesh *em = (ob == scene->obedit)? ((Mesh*)ob->data)->edit_btmesh : NULL;
/* evaluate drivers */
// XXX: should we push this to derivedmesh instead?
@@ -2956,7 +2946,7 @@ static KeyBlock *insert_curvekey(Scene *scene, Object *ob, char *name, int from_
Curve *cu= ob->data;
Key *key= cu->key;
KeyBlock *kb;
- ListBase *lb= (cu->editnurb)? cu->editnurb: &cu->nurb;
+ ListBase *lb= BKE_curve_nurbs(cu);
int newkey= 0;
if(key==NULL) {
@@ -2968,7 +2958,11 @@ static KeyBlock *insert_curvekey(Scene *scene, Object *ob, char *name, int from_
if(newkey || from_mix==FALSE) {
/* create from curve */
kb= add_keyblock(key, name);
- curve_to_key(cu, kb, lb);
+ if (!newkey) {
+ KeyBlock *basekb= (KeyBlock *)key->block.first;
+ kb->data= MEM_dupallocN(basekb->data);
+ kb->totelem= basekb->totelem;
+ } else curve_to_key(cu, kb, lb);
}
else {
/* copy from current values */
diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c
index cf5deb95258..ffb99c10c40 100644
--- a/source/blender/blenkernel/intern/paint.c
+++ b/source/blender/blenkernel/intern/paint.c
@@ -25,11 +25,11 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#include "MEM_guardedalloc.h"
#include "DNA_object_types.h"
#include "DNA_mesh_types.h"
#include "DNA_scene_types.h"
+#include "DNA_brush_types.h"
#include "BKE_brush.h"
#include "BKE_library.h"
@@ -70,91 +70,13 @@ Paint *paint_get_active(Scene *sce)
Brush *paint_brush(Paint *p)
{
- return p && p->brushes ? p->brushes[p->active_brush_index] : NULL;
+ return p ? p->brush : NULL;
}
void paint_brush_set(Paint *p, Brush *br)
{
- if(p && !br) {
- /* Setting to NULL removes the current slot */
- paint_brush_slot_remove(p);
- }
- else if(p) {
- int found = 0;
-
- if(p->brushes) {
- int i;
-
- /* See if there's already a slot with the brush */
- for(i = 0; i < p->brush_count; ++i) {
- if(p->brushes[i] == br) {
- p->active_brush_index = i;
- found = 1;
- break;
- }
- }
-
- }
-
- if(!found) {
- paint_brush_slot_add(p);
- id_us_plus(&br->id);
- }
-
- /* Make sure the current slot is the new brush */
- p->brushes[p->active_brush_index] = br;
- }
-}
-
-static void paint_brush_slots_alloc(Paint *p, const int count)
-{
- p->brush_count = count;
- if(count == 0)
- p->brushes = NULL;
- else
- p->brushes = MEM_callocN(sizeof(Brush*) * count, "Brush slots");
-}
-
-void paint_brush_slot_add(Paint *p)
-{
- if(p) {
- Brush **orig = p->brushes;
- int orig_count = p->brushes ? p->brush_count : 0;
-
- /* Increase size of brush slot array */
- paint_brush_slots_alloc(p, orig_count + 1);
- if(orig) {
- memcpy(p->brushes, orig, sizeof(Brush*) * orig_count);
- MEM_freeN(orig);
- }
-
- p->active_brush_index = orig_count;
- }
-}
-
-void paint_brush_slot_remove(Paint *p)
-{
- if(p && p->brushes) {
- Brush **orig = p->brushes;
- int src, dst;
-
- /* Decrease size of brush slot array */
- paint_brush_slots_alloc(p, p->brush_count - 1);
- if(p->brushes) {
- for(src = 0, dst = 0; dst < p->brush_count; ++src) {
- if(src != p->active_brush_index) {
- p->brushes[dst] = orig[src];
- ++dst;
- }
- }
- }
- MEM_freeN(orig);
-
- if(p->active_brush_index >= p->brush_count)
- p->active_brush_index = p->brush_count - 1;
- if(p->active_brush_index < 0)
- p->active_brush_index = 0;
- }
+ if(p)
+ p->brush= br;
}
int paint_facesel_test(Object *ob)
@@ -168,7 +90,8 @@ void paint_init(Paint *p, const char col[3])
/* If there's no brush, create one */
brush = paint_brush(p);
- brush_check_exists(&brush, "Brush");
+ if(brush == NULL)
+ brush= add_brush("Brush");
paint_brush_set(p, brush);
memcpy(p->paint_cursor_col, col, 3);
@@ -179,16 +102,10 @@ void paint_init(Paint *p, const char col[3])
void free_paint(Paint *paint)
{
- if(paint->brushes)
- MEM_freeN(paint->brushes);
+ /* nothing */
}
-void copy_paint(Paint *orig, Paint *new)
+void copy_paint(Paint *src, Paint *tar)
{
- if(orig->brushes) {
- int i;
- new->brushes = MEM_dupallocN(orig->brushes);
- for(i = 0; i < orig->brush_count; ++i)
- id_us_plus((ID *)new->brushes[i]);
- }
+ tar->brush= src->brush;
}
diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c
index 4c68c5487c8..993eefcb6f9 100644
--- a/source/blender/blenkernel/intern/particle.c
+++ b/source/blender/blenkernel/intern/particle.c
@@ -40,13 +40,17 @@
#include "DNA_key_types.h"
#include "DNA_material_types.h"
#include "DNA_mesh_types.h"
+#include "DNA_meshdata_types.h"
#include "DNA_particle_types.h"
#include "DNA_smoke_types.h"
+#include "DNA_scene_types.h"
+#include "BLI_blenlib.h"
#include "BLI_kdtree.h"
#include "BLI_rand.h"
#include "BLI_threads.h"
#include "BLI_cellalloc.h"
+#include "BLI_math.h"
#include "BKE_anim.h"
#include "BKE_animsys.h"
@@ -434,7 +438,7 @@ void free_keyed_keys(ParticleSystem *psys)
}
}
}
-void psys_free_child_path_cache(ParticleSystem *psys)
+static void free_child_path_cache(ParticleSystem *psys)
{
psys_free_path_cache_buffers(psys->childcache, &psys->childcachebufs);
psys->childcache = NULL;
@@ -452,7 +456,7 @@ void psys_free_path_cache(ParticleSystem *psys, PTCacheEdit *edit)
psys->pathcache= NULL;
psys->totcached= 0;
- psys_free_child_path_cache(psys);
+ free_child_path_cache(psys);
}
}
void psys_free_children(ParticleSystem *psys)
@@ -463,7 +467,7 @@ void psys_free_children(ParticleSystem *psys)
psys->totchild=0;
}
- psys_free_child_path_cache(psys);
+ free_child_path_cache(psys);
}
void psys_free_particles(ParticleSystem *psys)
{
@@ -621,8 +625,7 @@ static float psys_render_projected_area(ParticleSystem *psys, float *center, flo
mul_m4_v4(data->viewmat, co);
/* compute two vectors orthogonal to view vector */
- VECCOPY(view, co);
- normalize_v3(view);
+ normalize_v3_v3(view, co);
ortho_basis_v3v3_v3( ortho1, ortho2,view);
/* compute on screen minification */
@@ -1920,8 +1923,7 @@ static void do_prekink(ParticleKey *state, ParticleKey *par, float *par_rot, flo
mul_qt_v3(q2,z_vec);
VECSUB(vec_from_par,state->co,par->co);
- VECCOPY(vec_one,vec_from_par);
- radius=normalize_v3(vec_one);
+ radius= normalize_v3_v3(vec_one, vec_from_par);
inp_y=dot_v3v3(y_vec,vec_one);
inp_z=dot_v3v3(z_vec,vec_one);
@@ -2722,7 +2724,7 @@ void psys_cache_child_paths(ParticleSimulationData *sim, float cfra, int editupd
}
else {
/* clear out old and create new empty path cache */
- psys_free_child_path_cache(sim->psys);
+ free_child_path_cache(sim->psys);
sim->psys->childcache= psys_alloc_path_cache_buffers(&sim->psys->childcachebufs, totchild, ctx->steps+1);
sim->psys->totchildcache = totchild;
}
@@ -2788,7 +2790,7 @@ void psys_cache_paths(ParticleSimulationData *sim, float cfra)
int steps = (int)pow(2.0, (double)(psys->renderdata ? part->ren_step : part->draw_step));
int totpart = psys->totpart;
float length, vec[3];
- float *vg_effector= NULL, effector=0.0f;
+ float *vg_effector= NULL;
float *vg_length= NULL, pa_length=1.0f;
int keyed, baked;
@@ -2890,85 +2892,83 @@ void psys_cache_paths(ParticleSimulationData *sim, float cfra)
/*--modify paths and calculate rotation & velocity--*/
- sub_v3_v3v3(vec,(cache[p]+1)->co,cache[p]->co);
- length = len_v3(vec);
+ if(!(psys->flag & PSYS_GLOBAL_HAIR)) {
+ /* apply effectors */
+ if((psys->part->flag & PART_CHILD_EFFECT) == 0) {
+ float effector= 1.0f;
+ if(vg_effector)
+ effector*= psys_particle_value_from_verts(psmd->dm,psys->part->from,pa,vg_effector);
- effector= 1.0f;
- if(vg_effector)
- effector*= psys_particle_value_from_verts(psmd->dm,psys->part->from,pa,vg_effector);
+ sub_v3_v3v3(vec,(cache[p]+1)->co,cache[p]->co);
+ length = len_v3(vec);
- for(k=0, ca=cache[p]; k<=steps; k++, ca++) {
- if(!(psys->flag & PSYS_GLOBAL_HAIR)) {
- /* apply effectors */
- if(!(psys->part->flag & PART_CHILD_EFFECT) && k)
+ for(k=1, ca=cache[p]+1; k<=steps; k++, ca++)
do_path_effectors(sim, p, ca, k, steps, cache[p]->co, effector, dfra, cfra, &length, vec);
+ }
- /* apply guide curves to path data */
- if(sim->psys->effectors && (psys->part->flag & PART_CHILD_EFFECT)==0)
+ /* apply guide curves to path data */
+ if(sim->psys->effectors && (psys->part->flag & PART_CHILD_EFFECT)==0) {
+ for(k=0, ca=cache[p]; k<=steps; k++, ca++)
/* ca is safe to cast, since only co and vel are used */
do_guides(sim->psys->effectors, (ParticleKey*)ca, p, (float)k/(float)steps);
+ }
- /* apply lattice */
- if(psys->lattice)
+ /* lattices have to be calculated separately to avoid mixups between effector calculations */
+ if(psys->lattice) {
+ for(k=0, ca=cache[p]; k<=steps; k++, ca++)
calc_latt_deform(psys->lattice, ca->co, 1.0f);
+ }
+ }
- /* figure out rotation */
-
- if(k) {
- float cosangle, angle, tangent[3], normal[3], q[4];
-
- if(k == 1) {
- /* calculate initial tangent for incremental rotations */
- VECSUB(tangent, ca->co, (ca - 1)->co);
- VECCOPY(prev_tangent, tangent);
- normalize_v3(prev_tangent);
-
- /* First rotation is based on emitting face orientation. */
- /* This is way better than having flipping rotations resulting */
- /* from using a global axis as a rotation pole (vec_to_quat()). */
- /* It's not an ideal solution though since it disregards the */
- /* initial tangent, but taking that in to account will allow */
- /* the possibility of flipping again. -jahka */
- mat3_to_quat_is_ok( (ca-1)->rot,rotmat);
- }
- else {
- VECSUB(tangent, ca->co, (ca - 1)->co);
- normalize_v3(tangent);
-
- cosangle= dot_v3v3(tangent, prev_tangent);
-
- /* note we do the comparison on cosangle instead of
- * angle, since floating point accuracy makes it give
- * different results across platforms */
- if(cosangle > 0.999999f) {
- QUATCOPY((ca - 1)->rot, (ca - 2)->rot);
- }
- else {
- angle= saacos(cosangle);
- cross_v3_v3v3(normal, prev_tangent, tangent);
- axis_angle_to_quat( q,normal, angle);
- mul_qt_qtqt((ca - 1)->rot, q, (ca - 2)->rot);
- }
+ /* finally do rotation & velocity */
+ for(k=1, ca=cache[p]+1; k<=steps; k++, ca++) {
+ /* figure out rotation */
+ float cosangle, angle, tangent[3], normal[3], q[4];
+
+ if(k == 1) {
+ /* calculate initial tangent for incremental rotations */
+ VECSUB(tangent, ca->co, (ca - 1)->co);
+ normalize_v3_v3(prev_tangent, tangent);
+
+ /* First rotation is based on emitting face orientation. */
+ /* This is way better than having flipping rotations resulting */
+ /* from using a global axis as a rotation pole (vec_to_quat()). */
+ /* It's not an ideal solution though since it disregards the */
+ /* initial tangent, but taking that in to account will allow */
+ /* the possibility of flipping again. -jahka */
+ mat3_to_quat_is_ok( (ca-1)->rot,rotmat);
+ }
+ else {
+ VECSUB(tangent, ca->co, (ca - 1)->co);
+ normalize_v3(tangent);
- VECCOPY(prev_tangent, tangent);
- }
+ cosangle= dot_v3v3(tangent, prev_tangent);
- if(k == steps)
- QUATCOPY(ca->rot, (ca - 1)->rot);
+ /* note we do the comparison on cosangle instead of
+ * angle, since floating point accuracy makes it give
+ * different results across platforms */
+ if(cosangle > 0.999999f) {
+ QUATCOPY((ca - 1)->rot, (ca - 2)->rot);
+ }
+ else {
+ angle= saacos(cosangle);
+ cross_v3_v3v3(normal, prev_tangent, tangent);
+ axis_angle_to_quat( q,normal, angle);
+ mul_qt_qtqt((ca - 1)->rot, q, (ca - 2)->rot);
}
+ VECCOPY(prev_tangent, tangent);
}
-
- /* set velocity */
- if(k){
- VECSUB(ca->vel, ca->co, (ca-1)->co);
+ if(k == steps)
+ QUATCOPY(ca->rot, (ca - 1)->rot);
+
- if(k==1) {
- VECCOPY((ca-1)->vel, ca->vel);
- }
+ /* set velocity */
+ VECSUB(ca->vel, ca->co, (ca-1)->co);
- }
+ if(k==1)
+ VECCOPY((ca-1)->vel, ca->vel);
}
}
@@ -3104,8 +3104,7 @@ void psys_cache_edit_paths(Scene *scene, Object *ob, PTCacheEdit *edit, float cf
if(k == 1) {
/* calculate initial tangent for incremental rotations */
VECSUB(tangent, ca->co, (ca - 1)->co);
- VECCOPY(prev_tangent, tangent);
- normalize_v3(prev_tangent);
+ normalize_v3_v3(prev_tangent, tangent);
/* First rotation is based on emitting face orientation. */
/* This is way better than having flipping rotations resulting */
@@ -3397,7 +3396,7 @@ ModifierData *object_add_particle_system(Scene *scene, Object *ob, char *name)
psys->flag = PSYS_ENABLED|PSYS_CURRENT;
psys->cfra=bsystem_time(scene,ob,scene->r.cfra+1,0.0);
- DAG_scene_sort(scene);
+ DAG_scene_sort(G.main, scene);
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
return md;
@@ -3434,7 +3433,7 @@ void object_remove_particle_system(Scene *scene, Object *ob)
else
ob->mode &= ~OB_MODE_PARTICLE_EDIT;
- DAG_scene_sort(scene);
+ DAG_scene_sort(G.main, scene);
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
}
static void default_particle_settings(ParticleSettings *part)
@@ -4369,20 +4368,14 @@ void psys_make_billboard(ParticleBillboardData *bb, float xvec[3], float yvec[3]
onevec[bb->align]=1.0f;
if(bb->lock && (bb->align == PART_BB_VIEW)) {
- VECCOPY(xvec, bb->ob->obmat[0]);
- normalize_v3(xvec);
-
- VECCOPY(yvec, bb->ob->obmat[1]);
- normalize_v3(yvec);
-
- VECCOPY(zvec, bb->ob->obmat[2]);
- normalize_v3(zvec);
+ normalize_v3_v3(xvec, bb->ob->obmat[0]);
+ normalize_v3_v3(yvec, bb->ob->obmat[1]);
+ normalize_v3_v3(zvec, bb->ob->obmat[2]);
}
else if(bb->align == PART_BB_VEL) {
float temp[3];
- VECCOPY(temp, bb->vel);
- normalize_v3(temp);
+ normalize_v3_v3(temp, bb->vel);
VECSUB(zvec, bb->ob->obmat[3], bb->vec);
diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c
index a128cfaedf9..2b43ce1ea36 100644
--- a/source/blender/blenkernel/intern/particle_system.c
+++ b/source/blender/blenkernel/intern/particle_system.c
@@ -62,7 +62,6 @@
#include "BLI_listbase.h"
#include "BLI_threads.h"
-#include "BKE_anim.h"
#include "BKE_animsys.h"
#include "BKE_boids.h"
#include "BKE_cdderivedmesh.h"
@@ -182,7 +181,7 @@ static void realloc_particles(ParticleSimulationData *sim, int new_totpart)
else
totpart=new_totpart;
- if(totpart && totpart != psys->totpart) {
+ if(totpart != psys->totpart) {
if(psys->edit && psys->free_edit) {
psys->free_edit(psys->edit);
psys->edit = NULL;
@@ -727,7 +726,7 @@ static void psys_thread_distribute_particle(ParticleThread *thread, ParticleData
pa->foffset=0.0;
else switch(distr){
case PART_DISTR_JIT:
- pa->foffset*= ctx->jit[2*(int)ctx->jitoff[i]];
+ pa->foffset*= ctx->jit[p%(2*ctx->jitlevel)];
break;
case PART_DISTR_RAND:
pa->foffset*=BLI_frand();
@@ -1730,8 +1729,7 @@ void reset_particle(ParticleSimulationData *sim, ParticleData *pa, float dtime,
mul_qt_v3(rot, vtan);
mul_qt_v3(rot, utan);
- VECCOPY(p_vel, state.vel);
- speed=normalize_v3(p_vel);
+ speed= normalize_v3_v3(p_vel, state.vel);
mul_v3_fl(p_vel, dot_v3v3(r_vel, p_vel));
VECSUB(p_vel, r_vel, p_vel);
normalize_v3(p_vel);
@@ -1872,18 +1870,15 @@ void reset_particle(ParticleSimulationData *sim, ParticleData *pa, float dtime,
/* *emitter object orientation */
if(part->ob_vel[0]!=0.0) {
- VECCOPY(vec, ob->obmat[0]);
- normalize_v3(vec);
+ normalize_v3_v3(vec, ob->obmat[0]);
VECADDFAC(vel, vel, vec, part->ob_vel[0]);
}
if(part->ob_vel[1]!=0.0) {
- VECCOPY(vec, ob->obmat[1]);
- normalize_v3(vec);
+ normalize_v3_v3(vec, ob->obmat[1]);
VECADDFAC(vel, vel, vec, part->ob_vel[1]);
}
if(part->ob_vel[2]!=0.0) {
- VECCOPY(vec, ob->obmat[2]);
- normalize_v3(vec);
+ normalize_v3_v3(vec, ob->obmat[2]);
VECADDFAC(vel, vel, vec, part->ob_vel[2]);
}
@@ -3075,18 +3070,66 @@ static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, flo
/* Hair */
/************************************************/
/* check if path cache or children need updating and do it if needed */
-void psys_update_path_cache(ParticleSimulationData *sim, float cfra)
+static void psys_update_path_cache(ParticleSimulationData *sim, float cfra)
{
ParticleSystem *psys = sim->psys;
ParticleSettings *part = psys->part;
-
- /* only hair, keyed and baked stuff can have paths */
- if(part->type==PART_HAIR || psys->flag&PSYS_KEYED || psys->pointcache->mem_cache.first) {
+ ParticleEditSettings *pset = &sim->scene->toolsettings->particle;
+ int distr=0, alloc=0, skip=0;
+
+ if((psys->part->childtype && psys->totchild != get_psys_tot_child(sim->scene, psys)) || psys->recalc&PSYS_RECALC_RESET)
+ alloc=1;
+
+ if(alloc || psys->recalc&PSYS_RECALC_CHILD || (psys->vgroup[PSYS_VG_DENSITY] && (sim->ob && sim->ob->mode & OB_MODE_WEIGHT_PAINT)))
+ distr=1;
+
+ if(distr){
+ if(alloc)
+ realloc_particles(sim, sim->psys->totpart);
+
+ if(get_psys_tot_child(sim->scene, psys)) {
+ /* don't generate children while computing the hair keys */
+ if(!(psys->part->type == PART_HAIR) || (psys->flag & PSYS_HAIR_DONE)) {
+ distribute_particles(sim, PART_FROM_CHILD);
+
+ if(part->from!=PART_FROM_PARTICLE && part->childtype==PART_CHILD_FACES && part->parents!=0.0)
+ psys_find_parents(sim);
+ }
+ }
+ else
+ psys_free_children(psys);
+ }
+
+ if((part->type==PART_HAIR || psys->flag&PSYS_KEYED || psys->pointcache->flag & PTCACHE_BAKED)==0)
+ skip = 1; /* only hair, keyed and baked stuff can have paths */
+ else if(part->ren_as != PART_DRAW_PATH && !(part->type==PART_HAIR && ELEM(part->ren_as, PART_DRAW_OB, PART_DRAW_GR)))
+ skip = 1; /* particle visualization must be set as path */
+ else if(!psys->renderdata) {
+ if(part->draw_as != PART_DRAW_REND)
+ skip = 1; /* draw visualization */
+ else if(psys->pointcache->flag & PTCACHE_BAKING)
+ skip = 1; /* no need to cache paths while baking dynamics */
+ else if(psys_in_edit_mode(sim->scene, psys)) {
+ if((pset->flag & PE_DRAW_PART)==0)
+ skip = 1;
+ else if(part->childtype==0 && (psys->flag & PSYS_HAIR_DYNAMICS && psys->pointcache->flag & PTCACHE_BAKED)==0)
+ skip = 1; /* in edit mode paths are needed for child particles and dynamic hair */
+ }
+ }
+
+ if(!skip) {
psys_cache_paths(sim, cfra);
/* for render, child particle paths are computed on the fly */
- if(part->childtype && psys->totchild)
- psys_cache_child_paths(sim, cfra, 0);
+ if(part->childtype) {
+ if(!psys->totchild)
+ skip = 1;
+ else if(psys->part->type == PART_HAIR && (psys->flag & PSYS_HAIR_DONE)==0)
+ skip = 1;
+
+ if(!skip)
+ psys_cache_child_paths(sim, cfra, 0);
+ }
}
else if(psys->pathcache)
psys_free_path_cache(psys, NULL);
@@ -3201,8 +3244,6 @@ static void do_hair_dynamics(ParticleSimulationData *sim)
psys->hair_out_dm = clothModifier_do(psys->clmd, sim->scene, sim->ob, dm, 0, 0);
psys->clmd->sim_parms->effector_weights = NULL;
-
- psys_free_path_cache(psys, NULL);
}
static void hair_step(ParticleSimulationData *sim, float cfra)
{
@@ -3454,19 +3495,14 @@ static void dynamics_step(ParticleSimulationData *sim, float cfra)
}
free_collider_cache(&sim->colliders);
-
- if(psys->pathcache)
- psys_free_path_cache(psys, NULL);
}
-void psys_update_children(ParticleSimulationData *sim)
+static void update_children(ParticleSimulationData *sim)
{
if((sim->psys->part->type == PART_HAIR) && (sim->psys->flag & PSYS_HAIR_DONE)==0)
/* don't generate children while growing hair - waste of time */
psys_free_children(sim->psys);
- else if(sim->psys->part->childtype) {
- if(sim->psys->totchild != get_psys_tot_child(sim->scene, sim->psys))
- distribute_particles(sim, PART_FROM_CHILD);
- }
+ else if(sim->psys->part->childtype && sim->psys->totchild != get_psys_tot_child(sim->scene, sim->psys))
+ distribute_particles(sim, PART_FROM_CHILD);
else
psys_free_children(sim->psys);
}
@@ -3721,6 +3757,8 @@ static void system_step(ParticleSimulationData *sim, float cfra)
if(ELEM(cache_result, PTCACHE_READ_EXACT, PTCACHE_READ_INTERPOLATED)) {
cached_step(sim, cfra);
+ update_children(sim);
+ psys_update_path_cache(sim, cfra);
BKE_ptcache_validate(cache, framenr);
@@ -3784,6 +3822,9 @@ static void system_step(ParticleSimulationData *sim, float cfra)
BKE_ptcache_write_cache(use_cache, framenr);
}
+ if(init)
+ update_children(sim);
+
/* cleanup */
if(psys->lattice){
end_latt_deform(psys->lattice);
@@ -3946,13 +3987,6 @@ void particle_system_update(Scene *scene, Object *ob, ParticleSystem *psys)
/* execute drivers only, as animation has already been done */
BKE_animsys_evaluate_animdata(&part->id, part->adt, cfra, ADT_RECALC_DRIVERS);
- /* TODO: only free child paths in case of PSYS_RECALC_CHILD */
- if(psys->recalc & PSYS_RECALC || ob->recalc & OB_RECALC_ALL)
- psys_free_path_cache(psys, NULL);
-
- if(psys->recalc & PSYS_RECALC_CHILD)
- psys_free_children(psys);
-
if(psys->recalc & PSYS_RECALC_TYPE)
psys_changed_type(&sim);
else if(psys->recalc & PSYS_RECALC_PHYS)
@@ -3999,16 +4033,26 @@ void particle_system_update(Scene *scene, Object *ob, ParticleSystem *psys)
case PART_PHYS_NO:
case PART_PHYS_KEYED:
{
+ PARTICLE_P;
+
if(emit_particles(&sim, NULL, cfra)) {
free_keyed_keys(psys);
distribute_particles(&sim, part->from);
initialize_all_particles(&sim);
}
- reset_all_particles(&sim, 0.0, cfra, 0);
+
+ LOOP_EXISTING_PARTICLES {
+ pa->size = part->size;
+ if(part->randsize > 0.0)
+ pa->size *= 1.0f - part->randsize * PSYS_FRAND(p + 1);
+
+ reset_particle(&sim, pa, 0.0, cfra);
+ }
if(part->phystype == PART_PHYS_KEYED) {
psys_count_keyed_targets(&sim);
set_keyed_keys(&sim);
+ psys_update_path_cache(&sim,(int)cfra);
}
break;
}
diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c
index 5295a496d2b..a35e40d7cf7 100644
--- a/source/blender/blenkernel/intern/pointcache.c
+++ b/source/blender/blenkernel/intern/pointcache.c
@@ -43,6 +43,7 @@
#include "BLI_blenlib.h"
#include "BLI_threads.h"
+#include "BLI_math.h"
#include "PIL_time.h"
@@ -1041,11 +1042,13 @@ void BKE_ptcache_ids_from_object(ListBase *lb, Object *ob, Scene *scene, int dup
if((lb_dupli_ob=object_duplilist(scene, ob))) {
DupliObject *dob;
for(dob= lb_dupli_ob->first; dob; dob= dob->next) {
- ListBase lb_dupli_pid;
- BKE_ptcache_ids_from_object(&lb_dupli_pid, dob->ob, scene, duplis);
- addlisttolist(lb, &lb_dupli_pid);
- if(lb_dupli_pid.first)
- printf("Adding Dupli\n");
+ if(dob->ob != ob) { /* avoids recursive loops with dupliframes: bug 22988 */
+ ListBase lb_dupli_pid;
+ BKE_ptcache_ids_from_object(&lb_dupli_pid, dob->ob, scene, duplis);
+ addlisttolist(lb, &lb_dupli_pid);
+ if(lb_dupli_pid.first)
+ printf("Adding Dupli\n");
+ }
}
free_object_duplilist(lb_dupli_ob); /* does restore */
@@ -2237,7 +2240,7 @@ void BKE_ptcache_remove(void)
static int CONTINUE_PHYSICS = 0;
-void BKE_ptcache_set_continue_physics(Scene *scene, int enable)
+void BKE_ptcache_set_continue_physics(Main *bmain, Scene *scene, int enable)
{
Object *ob;
@@ -2245,7 +2248,7 @@ void BKE_ptcache_set_continue_physics(Scene *scene, int enable)
CONTINUE_PHYSICS = enable;
if(CONTINUE_PHYSICS == 0) {
- for(ob=G.main->object.first; ob; ob=ob->id.next)
+ for(ob=bmain->object.first; ob; ob=ob->id.next)
if(BKE_ptcache_object_reset(scene, ob, PTCACHE_RESET_OUTDATED))
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
}
@@ -2333,7 +2336,7 @@ PointCache *BKE_ptcache_copy_list(ListBase *ptcaches_new, ListBase *ptcaches_old
/* Baking */
-void BKE_ptcache_quick_cache_all(Scene *scene)
+void BKE_ptcache_quick_cache_all(Main *bmain, Scene *scene)
{
PTCacheBaker baker;
@@ -2346,6 +2349,7 @@ void BKE_ptcache_quick_cache_all(Scene *scene)
baker.progresscontext=NULL;
baker.render=0;
baker.anim_init = 0;
+ baker.main=bmain;
baker.scene=scene;
baker.quick_step=scene->physics_settings.quick_cache_step;
@@ -2360,6 +2364,7 @@ typedef struct {
int endframe;
int step;
int *cfra_ptr;
+ Main *main;
Scene *scene;
} ptcache_make_cache_data;
@@ -2367,7 +2372,7 @@ static void *ptcache_make_cache_thread(void *ptr) {
ptcache_make_cache_data *data = (ptcache_make_cache_data*)ptr;
for(; (*data->cfra_ptr <= data->endframe) && !data->break_operation; *data->cfra_ptr+=data->step) {
- scene_update_for_newframe(data->scene, data->scene->lay);
+ scene_update_for_newframe(data->main, data->scene, data->scene->lay);
if(G.background) {
printf("bake: frame %d :: %d\n", (int)*data->cfra_ptr, data->endframe);
}
@@ -2380,6 +2385,7 @@ static void *ptcache_make_cache_thread(void *ptr) {
/* if bake is not given run simulations to current frame */
void BKE_ptcache_make_cache(PTCacheBaker* baker)
{
+ Main *bmain = baker->main;
Scene *scene = baker->scene;
Scene *sce; /* SETLOOPER macro only */
Base *base;
@@ -2399,6 +2405,7 @@ void BKE_ptcache_make_cache(PTCacheBaker* baker)
thread_data.step = baker->quick_step;
thread_data.cfra_ptr = &CFRA;
thread_data.scene = baker->scene;
+ thread_data.main = baker->main;
G.afbreek = 0;
@@ -2568,7 +2575,7 @@ void BKE_ptcache_make_cache(PTCacheBaker* baker)
CFRA = cfrao;
if(bake) /* already on cfra unless baking */
- scene_update_for_newframe(scene, scene->lay);
+ scene_update_for_newframe(bmain, scene, scene->lay);
if (thread_data.break_operation)
WM_cursor_wait(0);
diff --git a/source/blender/blenkernel/intern/property.c b/source/blender/blenkernel/intern/property.c
index a2ba7c69b93..d8001572b4f 100644
--- a/source/blender/blenkernel/intern/property.c
+++ b/source/blender/blenkernel/intern/property.c
@@ -32,6 +32,7 @@
#include <stdio.h>
#include <stdlib.h>
+#include <stddef.h>
#include <string.h>
#include <ctype.h>
@@ -180,14 +181,7 @@ void unique_property(bProperty *first, bProperty *prop, int force)
bProperty *get_ob_property(Object *ob, char *name)
{
- bProperty *prop;
-
- prop= ob->prop.first;
- while(prop) {
- if( strcmp(prop->name, name)==0 ) return prop;
- prop= prop->next;
- }
- return NULL;
+ return BLI_findstring(&ob->prop, name, offsetof(bProperty, name));
}
void set_ob_property(Object *ob, bProperty *propc)
diff --git a/source/blender/blenkernel/intern/sca.c b/source/blender/blenkernel/intern/sca.c
index 61e98ce9d45..f5ca7ee3cef 100644
--- a/source/blender/blenkernel/intern/sca.c
+++ b/source/blender/blenkernel/intern/sca.c
@@ -800,7 +800,7 @@ void link_logicbricks(void **poin, void ***ppoin, short *tot, short size)
(*tot) ++;
*ppoin = MEM_callocN((*tot)*size, "new link");
- for (ibrick=0; ibrick < *tot - 1; ibrick++) {
+ for (ibrick=0; ibrick < *(tot) - 1; ibrick++) {
(*ppoin)[ibrick] = old_links[ibrick];
}
(*ppoin)[ibrick] = *poin;
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index fe52375617b..8793c412d7d 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -38,14 +38,16 @@
#else
#include <io.h>
#endif
-#include "MEM_guardedalloc.h"
#include "DNA_anim_types.h"
#include "DNA_group_types.h"
+#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
#include "DNA_sequence_types.h"
+#include "MEM_guardedalloc.h"
+
#include "BKE_anim.h"
#include "BKE_animsys.h"
#include "BKE_depsgraph.h"
@@ -67,10 +69,6 @@
//XXX #include "BIF_previewrender.h"
//XXX #include "BIF_editseq.h"
-#ifndef DISABLE_PYTHON
-#include "BPY_extern.h"
-#endif
-
#include "BLI_math.h"
#include "BLI_blenlib.h"
@@ -171,9 +169,12 @@ Scene *copy_scene(Main *bmain, Scene *sce, int type)
BLI_duplicatelist(&(scen->transform_spaces), &(sce->transform_spaces));
BLI_duplicatelist(&(scen->r.layers), &(sce->r.layers));
BKE_keyingsets_copy(&(scen->keyingsets), &(sce->keyingsets));
-
- scen->nodetree= ntreeCopyTree(sce->nodetree, 0);
-
+
+ if(sce->nodetree) {
+ scen->nodetree= ntreeCopyTree(sce->nodetree, 0);
+ ntreeSwitchID(scen->nodetree, &sce->id, &scen->id);
+ }
+
obase= sce->base.first;
base= scen->base.first;
while(base) {
@@ -316,11 +317,12 @@ void free_scene(Scene *sce)
Scene *add_scene(char *name)
{
+ Main *bmain= G.main;
Scene *sce;
ParticleEditSettings *pset;
int a;
- sce= alloc_libblock(&G.main->scene, ID_SCE, name);
+ sce= alloc_libblock(&bmain->scene, ID_SCE, name);
sce->lay= sce->layact= 1;
sce->r.mode= R_GAMMA|R_OSA|R_SHADOW|R_SSS|R_ENVMAP|R_RAYTRACE;
@@ -395,6 +397,7 @@ Scene *add_scene(char *name)
sce->toolsettings->jointrilimit = 0.8f;
sce->toolsettings->selectmode= SCE_SELECT_VERTEX;
+ sce->toolsettings->uv_selectmode= UV_SELECT_VERTEX;
sce->toolsettings->normalsize= 0.1;
sce->toolsettings->autokey_mode= U.autokey_mode;
@@ -500,7 +503,7 @@ Base *object_in_scene(Object *ob, Scene *sce)
return NULL;
}
-void set_scene_bg(Scene *scene)
+void set_scene_bg(Main *bmain, Scene *scene)
{
Scene *sce;
Base *base;
@@ -510,14 +513,18 @@ void set_scene_bg(Scene *scene)
int flag;
/* check for cyclic sets, for reading old files but also for definite security (py?) */
- scene_check_setscene(scene);
+ scene_check_setscene(bmain, scene);
+ /* can happen when switching modes in other scenes */
+ if(scene->obedit && !(scene->obedit->mode & OB_MODE_EDIT))
+ scene->obedit= NULL;
+
/* deselect objects (for dataselect) */
- for(ob= G.main->object.first; ob; ob= ob->id.next)
+ for(ob= bmain->object.first; ob; ob= ob->id.next)
ob->flag &= ~(SELECT|OB_FROMGROUP);
/* group flags again */
- for(group= G.main->group.first; group; group= group->id.next) {
+ for(group= bmain->group.first; group; group= group->id.next) {
go= group->gobject.first;
while(go) {
if(go->ob) go->ob->flag |= OB_FROMGROUP;
@@ -526,12 +533,12 @@ void set_scene_bg(Scene *scene)
}
/* sort baselist */
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
/* ensure dags are built for sets */
for(sce= scene->set; sce; sce= sce->set)
if(sce->theDag==NULL)
- DAG_scene_sort(sce);
+ DAG_scene_sort(bmain, sce);
/* copy layers and flags from bases to objects */
for(base= scene->base.first; base; base= base->next) {
@@ -553,11 +560,11 @@ void set_scene_bg(Scene *scene)
}
/* called from creator.c */
-Scene *set_scene_name(char *name)
+Scene *set_scene_name(Main *bmain, char *name)
{
Scene *sce= (Scene *)find_id("SC", name);
if(sce) {
- set_scene_bg(sce);
+ set_scene_bg(bmain, sce);
printf("Scene switch: '%s' in file: '%s'\n", name, G.sce);
return sce;
}
@@ -577,7 +584,7 @@ void unlink_scene(Main *bmain, Scene *sce, Scene *newsce)
sce1->set= NULL;
/* check all sequences */
- clear_scene_in_allseqs(sce);
+ clear_scene_in_allseqs(bmain, sce);
/* check render layer nodes in other scenes */
clear_scene_in_nodes(bmain, sce);
@@ -866,7 +873,7 @@ void scene_select_base(Scene *sce, Base *selbase)
}
/* checks for cycle, returns 1 if it's all OK */
-int scene_check_setscene(Scene *sce)
+int scene_check_setscene(Main *bmain, Scene *sce)
{
Scene *scene;
int a, totscene;
@@ -874,7 +881,7 @@ int scene_check_setscene(Scene *sce)
if(sce->set==NULL) return 1;
totscene= 0;
- for(scene= G.main->scene.first; scene; scene= scene->id.next)
+ for(scene= bmain->scene.first; scene; scene= scene->id.next)
totscene++;
for(a=0, scene=sce; scene->set; scene=scene->set, a++) {
@@ -902,14 +909,14 @@ float BKE_curframe(Scene *scene)
return ctime;
}
-static void scene_update_tagged_recursive(Scene *scene, Scene *scene_parent)
+static void scene_update_tagged_recursive(Main *bmain, Scene *scene, Scene *scene_parent)
{
Base *base;
/* sets first, we allow per definition current scene to have
dependencies on sets, but not the other way around. */
if(scene->set)
- scene_update_tagged_recursive(scene->set, scene_parent);
+ scene_update_tagged_recursive(bmain, scene->set, scene_parent);
for(base= scene->base.first; base; base= base->next) {
Object *ob= base->object;
@@ -925,14 +932,14 @@ static void scene_update_tagged_recursive(Scene *scene, Scene *scene_parent)
}
/* this is called in main loop, doing tagged updates before redraw */
-void scene_update_tagged(Scene *scene)
+void scene_update_tagged(Main *bmain, Scene *scene)
{
scene->physics_settings.quick_cache_step= 0;
/* update all objects: drivers, matrices, displists, etc. flags set
by depgraph or manual, no layer check here, gets correct flushed */
- scene_update_tagged_recursive(scene, scene);
+ scene_update_tagged_recursive(bmain, scene, scene);
/* recalc scene animation data here (for sequencer) */
{
@@ -944,14 +951,14 @@ void scene_update_tagged(Scene *scene)
}
if(scene->physics_settings.quick_cache_step)
- BKE_ptcache_quick_cache_all(scene);
+ BKE_ptcache_quick_cache_all(bmain, scene);
/* in the future this should handle updates for all datablocks, not
only objects and scenes. - brecht */
}
/* applies changes right away, does all sets too */
-void scene_update_for_newframe(Scene *sce, unsigned int lay)
+void scene_update_for_newframe(Main *bmain, Scene *sce, unsigned int lay)
{
float ctime = BKE_curframe(sce);
Scene *sce_iter;
@@ -961,13 +968,13 @@ void scene_update_for_newframe(Scene *sce, unsigned int lay)
for(sce_iter= sce; sce_iter; sce_iter= sce_iter->set) {
if(sce_iter->theDag==NULL)
- DAG_scene_sort(sce_iter);
+ DAG_scene_sort(bmain, sce_iter);
}
/* Following 2 functions are recursive
* so dont call within 'scene_update_tagged_recursive' */
- DAG_scene_update_flags(sce, lay); // only stuff that moves or needs display still
+ DAG_scene_update_flags(bmain, sce, lay); // only stuff that moves or needs display still
/* All 'standard' (i.e. without any dependencies) animation is handled here,
* with an 'local' to 'macro' order of evaluation. This should ensure that
@@ -975,11 +982,11 @@ void scene_update_for_newframe(Scene *sce, unsigned int lay)
* can be overridden by settings from Scene, which owns the Texture through a hierarchy
* such as Scene->World->MTex/Texture) can still get correctly overridden.
*/
- BKE_animsys_evaluate_all_animation(G.main, ctime);
+ BKE_animsys_evaluate_all_animation(bmain, ctime);
/*...done with recusrive funcs */
/* object_handle_update() on all objects, groups and sets */
- scene_update_tagged_recursive(sce, sce);
+ scene_update_tagged_recursive(bmain, sce, sce);
}
/* return default layer, also used to patch old files */
diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c
index a8140cb815d..6f1d32898f9 100644
--- a/source/blender/blenkernel/intern/screen.c
+++ b/source/blender/blenkernel/intern/screen.c
@@ -42,10 +42,6 @@
#include "BKE_screen.h"
-#ifndef DISABLE_PYTHON
-#include "BPY_extern.h"
-#endif
-
/* ************ Spacetype/regiontype handling ************** */
/* keep global; this has to be accessible outside of windowmanager */
diff --git a/source/blender/blenkernel/intern/seqeffects.c b/source/blender/blenkernel/intern/seqeffects.c
index 73c19772c69..461cb075bb0 100644
--- a/source/blender/blenkernel/intern/seqeffects.c
+++ b/source/blender/blenkernel/intern/seqeffects.c
@@ -41,6 +41,7 @@
#include "DNA_anim_types.h"
#include "BKE_fcurve.h"
+#include "BKE_main.h"
#include "BKE_plugin_types.h"
#include "BKE_sequencer.h"
#include "BKE_texture.h"
@@ -67,6 +68,48 @@ enum {
GlowA=3
};
+static struct ImBuf * prepare_effect_imbufs(
+ int x, int y,
+ struct ImBuf *ibuf1, struct ImBuf *ibuf2,
+ struct ImBuf *ibuf3)
+{
+ struct ImBuf * out;
+
+ if (!ibuf1 && !ibuf2 && !ibuf3) {
+ /* hmmm, global float option ? */
+ out = IMB_allocImBuf((short)x, (short)y, 32, IB_rect, 0);
+ } else if ((ibuf1 && ibuf1->rect_float) ||
+ (ibuf2 && ibuf2->rect_float) ||
+ (ibuf3 && ibuf3->rect_float)) {
+ /* if any inputs are rectfloat, output is float too */
+
+ out = IMB_allocImBuf((short)x, (short)y, 32, IB_rectfloat, 0);
+ } else {
+ out = IMB_allocImBuf((short)x, (short)y, 32, IB_rect, 0);
+ }
+
+ if (ibuf1 && !ibuf1->rect_float && out->rect_float) {
+ IMB_float_from_rect_simple(ibuf1);
+ }
+ if (ibuf2 && !ibuf2->rect_float && out->rect_float) {
+ IMB_float_from_rect_simple(ibuf2);
+ }
+ if (ibuf3 && !ibuf3->rect_float && out->rect_float) {
+ IMB_float_from_rect_simple(ibuf3);
+ }
+
+ if (ibuf1 && !ibuf1->rect && !out->rect_float) {
+ IMB_rect_from_float(ibuf1);
+ }
+ if (ibuf2 && !ibuf2->rect && !out->rect_float) {
+ IMB_rect_from_float(ibuf2);
+ }
+ if (ibuf3 && !ibuf3->rect && !out->rect_float) {
+ IMB_rect_from_float(ibuf3);
+ }
+
+ return out;
+}
/* **********************************************************************
PLUGINS
@@ -229,11 +272,12 @@ static ImBuf * IMB_cast_away_list(ImBuf * i)
return (ImBuf*) (((void**) i) + 2);
}
-static void do_plugin_effect(Scene *scene, Sequence *seq, int cfra,
- float facf0, float facf1, int x, int y,
- int preview_render_size,
- struct ImBuf *ibuf1, struct ImBuf *ibuf2,
- struct ImBuf *ibuf3, struct ImBuf *out)
+static struct ImBuf * do_plugin_effect(
+ Main *bmain, Scene *scene, Sequence *seq, float cfra,
+ float facf0, float facf1, int x, int y,
+ int preview_render_size,
+ struct ImBuf *ibuf1, struct ImBuf *ibuf2,
+ struct ImBuf *ibuf3)
{
char *cp;
int float_rendering;
@@ -241,6 +285,8 @@ static void do_plugin_effect(Scene *scene, Sequence *seq, int cfra,
old plugins) do very bad stuff
with imbuf-internals */
+ struct ImBuf * out = prepare_effect_imbufs(x, y, ibuf1, ibuf2, ibuf3);
+
if(seq->plugin && seq->plugin->doit) {
if(seq->plugin->cfra)
@@ -321,6 +367,7 @@ static void do_plugin_effect(Scene *scene, Sequence *seq, int cfra,
if (ibuf3) IMB_freeImBuf(ibuf3);
}
}
+ return out;
}
static int do_plugin_early_out(struct Sequence *seq,
@@ -476,12 +523,15 @@ static void do_alphaover_effect_float(float facf0, float facf1, int x, int y,
}
}
-static void do_alphaover_effect(Scene *scene, Sequence *seq, int cfra,
- float facf0, float facf1, int x, int y,
- int preview_render_size,
- struct ImBuf *ibuf1, struct ImBuf *ibuf2,
- struct ImBuf *ibuf3, struct ImBuf *out)
+static struct ImBuf * do_alphaover_effect(
+ Main *bmain, Scene *scene, Sequence *seq, float cfra,
+ float facf0, float facf1, int x, int y,
+ int preview_render_size,
+ struct ImBuf *ibuf1, struct ImBuf *ibuf2,
+ struct ImBuf *ibuf3)
{
+ struct ImBuf * out = prepare_effect_imbufs(x, y, ibuf1, ibuf2, ibuf3);
+
if (out->rect_float) {
do_alphaover_effect_float(
facf0, facf1, x, y,
@@ -493,6 +543,7 @@ static void do_alphaover_effect(Scene *scene, Sequence *seq, int cfra,
(char*) ibuf1->rect, (char*) ibuf2->rect,
(char*) out->rect);
}
+ return out;
}
@@ -644,12 +695,15 @@ static void do_alphaunder_effect_float(float facf0, float facf1, int x, int y,
}
}
-static void do_alphaunder_effect(Scene *scene, Sequence *seq, int cfra,
- float facf0, float facf1, int x, int y,
- int preview_render_size,
- struct ImBuf *ibuf1, struct ImBuf *ibuf2,
- struct ImBuf *ibuf3, struct ImBuf *out)
+static struct ImBuf* do_alphaunder_effect(
+ Main *bmain, Scene *scene, Sequence *seq, float cfra,
+ float facf0, float facf1, int x, int y,
+ int preview_render_size,
+ struct ImBuf *ibuf1, struct ImBuf *ibuf2,
+ struct ImBuf *ibuf3)
{
+ struct ImBuf * out = prepare_effect_imbufs(x, y, ibuf1, ibuf2, ibuf3);
+
if (out->rect_float) {
do_alphaunder_effect_float(
facf0, facf1, x, y,
@@ -661,6 +715,7 @@ static void do_alphaunder_effect(Scene *scene, Sequence *seq, int cfra,
(char*) ibuf1->rect, (char*) ibuf2->rect,
(char*) out->rect);
}
+ return out;
}
@@ -765,12 +820,15 @@ void do_cross_effect_float(float facf0, float facf1, int x, int y,
/* carefull: also used by speed effect! */
-static void do_cross_effect(Scene *scene, Sequence *seq, int cfra,
- float facf0, float facf1, int x, int y,
- int preview_render_size,
- struct ImBuf *ibuf1, struct ImBuf *ibuf2,
- struct ImBuf *ibuf3, struct ImBuf *out)
+static struct ImBuf* do_cross_effect(
+ Main *bmain, Scene *scene, Sequence *seq, float cfra,
+ float facf0, float facf1, int x, int y,
+ int preview_render_size,
+ struct ImBuf *ibuf1, struct ImBuf *ibuf2,
+ struct ImBuf *ibuf3)
{
+ struct ImBuf * out = prepare_effect_imbufs(x, y, ibuf1, ibuf2, ibuf3);
+
if (out->rect_float) {
do_cross_effect_float(
facf0, facf1, x, y,
@@ -782,6 +840,7 @@ static void do_cross_effect(Scene *scene, Sequence *seq, int cfra,
(char*) ibuf1->rect, (char*) ibuf2->rect,
(char*) out->rect);
}
+ return out;
}
@@ -827,7 +886,7 @@ static void makeGammaTables(float gamma)
/* The end of the table should match 1.0 carefully. In order to avoid */
/* rounding errors, we just set this explicitly. The last segment may */
- /* have a different lenght than the other segments, but our */
+ /* have a different length than the other segments, but our */
/* interpolation is insensitive to that. */
color_domain_table[RE_GAMMA_TABLE_SIZE] = 1.0;
gamma_range_table[RE_GAMMA_TABLE_SIZE] = 1.0;
@@ -1028,12 +1087,15 @@ static void do_gammacross_effect_float(float facf0, float facf1,
}
}
-static void do_gammacross_effect(Scene *scene, Sequence *seq, int cfra,
- float facf0, float facf1, int x, int y,
- int preview_render_size,
- struct ImBuf *ibuf1, struct ImBuf *ibuf2,
- struct ImBuf *ibuf3, struct ImBuf *out)
+static struct ImBuf * do_gammacross_effect(
+ Main *bmain, Scene *scene, Sequence *seq, float cfra,
+ float facf0, float facf1, int x, int y,
+ int preview_render_size,
+ struct ImBuf *ibuf1, struct ImBuf *ibuf2,
+ struct ImBuf *ibuf3)
{
+ struct ImBuf * out = prepare_effect_imbufs(x, y, ibuf1, ibuf2, ibuf3);
+
build_gammatabs();
if (out->rect_float) {
@@ -1047,6 +1109,7 @@ static void do_gammacross_effect(Scene *scene, Sequence *seq, int cfra,
(unsigned char*) ibuf1->rect, (unsigned char*) ibuf2->rect,
(unsigned char*) out->rect);
}
+ return out;
}
@@ -1143,12 +1206,14 @@ static void do_add_effect_float(float facf0, float facf1, int x, int y,
}
}
-static void do_add_effect(Scene *scene, Sequence *seq, int cfra,
- float facf0, float facf1, int x, int y,
- int preview_render_size,
- struct ImBuf *ibuf1, struct ImBuf *ibuf2,
- struct ImBuf *ibuf3, struct ImBuf *out)
+static struct ImBuf * do_add_effect(Main *bmain, Scene *scene, Sequence *seq, float cfra,
+ float facf0, float facf1, int x, int y,
+ int preview_render_size,
+ struct ImBuf *ibuf1, struct ImBuf *ibuf2,
+ struct ImBuf *ibuf3)
{
+ struct ImBuf * out = prepare_effect_imbufs(x, y, ibuf1, ibuf2, ibuf3);
+
if (out->rect_float) {
do_add_effect_float(
facf0, facf1, x, y,
@@ -1160,6 +1225,7 @@ static void do_add_effect(Scene *scene, Sequence *seq, int cfra,
(unsigned char*) ibuf1->rect, (unsigned char*) ibuf2->rect,
(unsigned char*) out->rect);
}
+ return out;
}
@@ -1256,12 +1322,15 @@ static void do_sub_effect_float(float facf0, float facf1, int x, int y,
}
}
-static void do_sub_effect(Scene *scene, Sequence *seq, int cfra,
- float facf0, float facf1, int x, int y,
- int preview_render_size,
- struct ImBuf *ibuf1, struct ImBuf *ibuf2,
- struct ImBuf *ibuf3, struct ImBuf *out)
+static struct ImBuf * do_sub_effect(
+ Main *bmain, Scene *scene, Sequence *seq, float cfra,
+ float facf0, float facf1, int x, int y,
+ int preview_render_size,
+ struct ImBuf *ibuf1, struct ImBuf *ibuf2,
+ struct ImBuf *ibuf3)
{
+ struct ImBuf * out = prepare_effect_imbufs(x, y, ibuf1, ibuf2, ibuf3);
+
if (out->rect_float) {
do_sub_effect_float(
facf0, facf1, x, y,
@@ -1273,6 +1342,7 @@ static void do_sub_effect(Scene *scene, Sequence *seq, int cfra,
(char*) ibuf1->rect, (char*) ibuf2->rect,
(char*) out->rect);
}
+ return out;
}
/* **********************************************************************
@@ -1284,8 +1354,8 @@ static void do_sub_effect(Scene *scene, Sequence *seq, int cfra,
#define YOFF 8
static void do_drop_effect_byte(float facf0, float facf1, int x, int y,
- unsigned char *rect2i, unsigned char *rect1i,
- unsigned char *outi)
+ char *rect2i, char *rect1i,
+ char *outi)
{
int height, width, temp, fac, fac1, fac2;
char *rt1, *rt2, *out;
@@ -1364,27 +1434,6 @@ static void do_drop_effect_float(float facf0, float facf1, int x, int y,
memcpy(out, rt1, 4 * sizeof(float)*YOFF*width);
}
-
-static void do_drop_effect(Scene *scene, Sequence *seq, int cfra,
- float facf0, float facf1, int x, int y,
- int preview_render_size,
- struct ImBuf *ibuf1, struct ImBuf *ibuf2,
- struct ImBuf * ibuf3,
- struct ImBuf *out)
-{
- if (out->rect_float) {
- do_drop_effect_float(
- facf0, facf1, x, y,
- ibuf1->rect_float, ibuf2->rect_float,
- out->rect_float);
- } else {
- do_drop_effect_byte(
- facf0, facf1, x, y,
- (unsigned char*) ibuf1->rect, (unsigned char*) ibuf2->rect,
- (unsigned char*) out->rect);
- }
-}
-
/* **********************************************************************
MUL
********************************************************************** */
@@ -1487,12 +1536,15 @@ static void do_mul_effect_float(float facf0, float facf1, int x, int y,
}
}
-static void do_mul_effect(Scene *scene, Sequence *seq, int cfra,
- float facf0, float facf1, int x, int y,
- int preview_render_size,
- struct ImBuf *ibuf1, struct ImBuf *ibuf2,
- struct ImBuf *ibuf3, struct ImBuf *out)
+static struct ImBuf * do_mul_effect(
+ Main *bmain, Scene *scene, Sequence *seq, float cfra,
+ float facf0, float facf1, int x, int y,
+ int preview_render_size,
+ struct ImBuf *ibuf1, struct ImBuf *ibuf2,
+ struct ImBuf *ibuf3)
{
+ struct ImBuf * out = prepare_effect_imbufs(x, y, ibuf1, ibuf2, ibuf3);
+
if (out->rect_float) {
do_mul_effect_float(
facf0, facf1, x, y,
@@ -1504,6 +1556,8 @@ static void do_mul_effect(Scene *scene, Sequence *seq, int cfra,
(unsigned char*) ibuf1->rect, (unsigned char*) ibuf2->rect,
(unsigned char*) out->rect);
}
+
+ return out;
}
/* **********************************************************************
@@ -1938,12 +1992,15 @@ static void do_wipe_effect_float(Sequence *seq, float facf0, float facf1,
}
}
-static void do_wipe_effect(Scene *scene, Sequence *seq, int cfra,
- float facf0, float facf1, int x, int y,
- int preview_render_size,
- struct ImBuf *ibuf1, struct ImBuf *ibuf2,
- struct ImBuf *ibuf3, struct ImBuf *out)
+static struct ImBuf * do_wipe_effect(
+ Main *bmain, Scene *scene, Sequence *seq, float cfra,
+ float facf0, float facf1, int x, int y,
+ int preview_render_size,
+ struct ImBuf *ibuf1, struct ImBuf *ibuf2,
+ struct ImBuf *ibuf3)
{
+ struct ImBuf * out = prepare_effect_imbufs(x, y, ibuf1, ibuf2, ibuf3);
+
if (out->rect_float) {
do_wipe_effect_float(seq,
facf0, facf1, x, y,
@@ -1955,6 +2012,8 @@ static void do_wipe_effect(Scene *scene, Sequence *seq, int cfra,
(unsigned char*) ibuf1->rect, (unsigned char*) ibuf2->rect,
(unsigned char*) out->rect);
}
+
+ return out;
}
/* **********************************************************************
TRANSFORM
@@ -2084,13 +2143,18 @@ static void do_transform(Scene *scene, Sequence *seq, float facf0, int x, int y,
}
-static void do_transform_effect(Scene *scene, Sequence *seq,int cfra,
- float facf0, float facf1, int x, int y,
- int preview_render_size,
- struct ImBuf *ibuf1, struct ImBuf *ibuf2,
- struct ImBuf *ibuf3, struct ImBuf *out)
+static struct ImBuf * do_transform_effect(
+ Main *bmain, Scene *scene, Sequence *seq,float cfra,
+ float facf0, float facf1, int x, int y,
+ int preview_render_size,
+ struct ImBuf *ibuf1, struct ImBuf *ibuf2,
+ struct ImBuf *ibuf3)
{
+ struct ImBuf * out = prepare_effect_imbufs(x, y, ibuf1, ibuf2, ibuf3);
+
do_transform(scene, seq, facf0, x, y, ibuf1, out);
+
+ return out;
}
@@ -2597,12 +2661,15 @@ static void do_glow_effect_float(Sequence *seq, float facf0, float facf1,
RVAddBitmaps_float (inbuf , outbuf, outbuf, x, y);
}
-static void do_glow_effect(Scene *scene, Sequence *seq, int cfra,
- float facf0, float facf1, int x, int y,
- int preview_render_size,
- struct ImBuf *ibuf1, struct ImBuf *ibuf2,
- struct ImBuf *ibuf3, struct ImBuf *out)
+static struct ImBuf * do_glow_effect(
+ Main *bmain, Scene *scene, Sequence *seq, float cfra,
+ float facf0, float facf1, int x, int y,
+ int preview_render_size,
+ struct ImBuf *ibuf1, struct ImBuf *ibuf2,
+ struct ImBuf *ibuf3)
{
+ struct ImBuf * out = prepare_effect_imbufs(x, y, ibuf1, ibuf2, ibuf3);
+
if (out->rect_float) {
do_glow_effect_float(seq,
facf0, facf1, x, y,
@@ -2614,6 +2681,8 @@ static void do_glow_effect(Scene *scene, Sequence *seq, int cfra,
(char*) ibuf1->rect, (char*) ibuf2->rect,
(char*) out->rect);
}
+
+ return out;
}
/* **********************************************************************
@@ -2653,12 +2722,15 @@ static int early_out_color(struct Sequence *seq,
return -1;
}
-static void do_solid_color(Scene *scene, Sequence *seq, int cfra,
- float facf0, float facf1, int x, int y,
- int preview_render_size,
- struct ImBuf *ibuf1, struct ImBuf *ibuf2,
- struct ImBuf *ibuf3, struct ImBuf *out)
+static struct ImBuf * do_solid_color(
+ Main *bmain, Scene *scene, Sequence *seq, float cfra,
+ float facf0, float facf1, int x, int y,
+ int preview_render_size,
+ struct ImBuf *ibuf1, struct ImBuf *ibuf2,
+ struct ImBuf *ibuf3)
{
+ struct ImBuf * out = prepare_effect_imbufs(x, y, ibuf1, ibuf2, ibuf3);
+
SolidColorVars *cv = (SolidColorVars *)seq->effectdata;
unsigned char *rect;
@@ -2728,6 +2800,7 @@ static void do_solid_color(Scene *scene, Sequence *seq, int cfra,
}
}
}
+ return out;
}
/* **********************************************************************
@@ -2745,47 +2818,45 @@ static int early_out_multicam(struct Sequence *seq, float facf0, float facf1)
return -1;
}
-static void do_multicam(Scene *scene, Sequence *seq, int cfra,
- float facf0, float facf1, int x, int y,
- int preview_render_size,
- struct ImBuf *ibuf1, struct ImBuf *ibuf2,
- struct ImBuf *ibuf3, struct ImBuf *out)
+static struct ImBuf * do_multicam(
+ Main *bmain, Scene *scene, Sequence *seq, float cfra,
+ float facf0, float facf1, int x, int y,
+ int preview_render_size,
+ struct ImBuf *ibuf1, struct ImBuf *ibuf2,
+ struct ImBuf *ibuf3)
{
struct ImBuf * i;
+ struct ImBuf * out;
Editing * ed;
ListBase * seqbasep;
if (seq->multicam_source == 0 || seq->multicam_source >= seq->machine) {
- return;
+ return 0;
}
ed = scene->ed;
if (!ed) {
- return;
+ return 0;
}
seqbasep = seq_seqbase(&ed->seqbase, seq);
if (!seqbasep) {
- return;
+ return 0;
}
- i = give_ibuf_seqbase(scene,
- out->x, out->y, cfra, seq->multicam_source,
+ i = give_ibuf_seqbase(bmain, scene, x, y, cfra, seq->multicam_source,
preview_render_size, seqbasep);
if (!i) {
- return;
+ return 0;
}
- if (out->rect && i->rect) {
- memcpy(out->rect, i->rect, out->x * out->y * 4);
- } else if (out->rect_float && i->rect_float) {
- memcpy(out->rect_float, i->rect_float, out->x * out->y *4*sizeof(float));
- } else if (out->rect && i->rect_float) {
- IMB_rect_from_float(i);
- memcpy(out->rect, i->rect, out->x * out->y * 4);
- } else if (out->rect_float && i->rect) {
- IMB_float_from_rect_simple(i);
- memcpy(out->rect_float, i->rect_float, out->x * out->y *4*sizeof(float));
+ if (input_have_to_preprocess(scene, seq, cfra, x, y)) {
+ out = IMB_dupImBuf(i);
+ IMB_freeImBuf(i);
+ } else {
+ out = i;
}
+
+ return out;
}
/* **********************************************************************
@@ -2898,22 +2969,11 @@ void sequence_effect_speed_rebuild_map(Scene *scene, Sequence * seq, int force)
fallback_fac = 1.0;
- /* if there is no IPO, try to make retiming easy by stretching the
+ /* if there is no fcurve, try to make retiming easy by stretching the
strip */
- // XXX old animation system - seq
if (!fcu && seq->seq1->enddisp != seq->seq1->start && seq->seq1->len != 0) {
fallback_fac = (float) seq->seq1->len /
(float) (seq->seq1->enddisp - seq->seq1->start);
- /* FIXME: this strip stretching gets screwed by stripdata
- handling one layer up.
-
- So it currently works by enlarging, never by shrinking!
-
- (IPOs still work, if used correctly)
- */
- if (fallback_fac > 1.0) {
- fallback_fac = 1.0;
- }
}
if ((v->flags & SEQ_SPEED_INTEGRATE) != 0) {
@@ -2936,8 +2996,8 @@ void sequence_effect_speed_rebuild_map(Scene *scene, Sequence * seq, int force)
cursor += facf;
- if (cursor >= v->length) {
- v->frameMap[cfra] = v->length - 1;
+ if (cursor >= seq->seq1->len) {
+ v->frameMap[cfra] = seq->seq1->len - 1;
} else {
v->frameMap[cfra] = cursor;
v->lastValidFrame = cfra;
@@ -2963,8 +3023,8 @@ void sequence_effect_speed_rebuild_map(Scene *scene, Sequence * seq, int force)
facf = (float) cfra * fallback_fac;
}
facf *= v->globalSpeed;
- if (facf >= v->length) {
- facf = v->length - 1;
+ if (facf >= seq->seq1->len) {
+ facf = seq->seq1->len - 1;
} else {
v->lastValidFrame = cfra;
}
@@ -3048,13 +3108,13 @@ static void store_icu_yrange_noop(struct Sequence * seq,
/* defaults are fine */
}
-static void get_default_fac_noop(struct Sequence *seq, int cfra,
+static void get_default_fac_noop(struct Sequence *seq, float cfra,
float * facf0, float * facf1)
{
*facf0 = *facf1 = 1.0;
}
-static void get_default_fac_fade(struct Sequence *seq, int cfra,
+static void get_default_fac_fade(struct Sequence *seq, float cfra,
float * facf0, float * facf1)
{
*facf0 = (float)(cfra - seq->startdisp);
@@ -3063,21 +3123,38 @@ static void get_default_fac_fade(struct Sequence *seq, int cfra,
*facf1 /= seq->len;
}
-static void do_overdrop_effect(Scene *scene, Sequence *seq, int cfra,
- float fac, float facf,
- int x, int y,
- int preview_render_size,
- struct ImBuf * ibuf1,
- struct ImBuf * ibuf2,
- struct ImBuf * ibuf3,
- struct ImBuf * out)
-{
- do_drop_effect(scene, seq, cfra, fac, facf, x, y,
- preview_render_size,
- ibuf1, ibuf2, ibuf3, out);
- do_alphaover_effect(scene, seq, cfra, fac, facf, x, y,
- preview_render_size,
- ibuf1, ibuf2, ibuf3, out);
+static struct ImBuf * do_overdrop_effect(Main *bmain, Scene *scene, Sequence *seq, float cfra,
+ float facf0, float facf1,
+ int x, int y,
+ int preview_render_size,
+ struct ImBuf * ibuf1,
+ struct ImBuf * ibuf2,
+ struct ImBuf * ibuf3)
+{
+ struct ImBuf * out = prepare_effect_imbufs(x, y, ibuf1, ibuf2, ibuf3);
+
+ if (out->rect_float) {
+ do_drop_effect_float(
+ facf0, facf1, x, y,
+ ibuf1->rect_float, ibuf2->rect_float,
+ out->rect_float);
+ do_alphaover_effect_float(
+ facf0, facf1, x, y,
+ ibuf1->rect_float, ibuf2->rect_float,
+ out->rect_float);
+ } else {
+ do_drop_effect_byte(
+ facf0, facf1, x, y,
+ (char*) ibuf1->rect,
+ (char*) ibuf2->rect,
+ (char*) out->rect);
+ do_alphaover_effect_byte(
+ facf0, facf1, x, y,
+ (char*) ibuf1->rect, (char*) ibuf2->rect,
+ (char*) out->rect);
+ }
+
+ return out;
}
static struct SeqEffectHandle get_sequence_effect_impl(int seq_type)
diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c
index d97e6151a13..b20bb111cb4 100644
--- a/source/blender/blenkernel/intern/sequencer.c
+++ b/source/blender/blenkernel/intern/sequencer.c
@@ -39,6 +39,7 @@
#include "DNA_scene_types.h"
#include "DNA_anim_types.h"
#include "DNA_object_types.h"
+#include "DNA_sound_types.h"
#include "BKE_animsys.h"
#include "BKE_global.h"
@@ -55,6 +56,7 @@
#include "BLI_listbase.h"
#include "BLI_path_util.h"
#include "BLI_string.h"
+#include "BLI_threads.h"
#include <pthread.h>
#include "IMB_imbuf.h"
@@ -115,53 +117,11 @@ int seq_recursive_apply(Sequence *seq, int (*apply_func)(Sequence *, void *), vo
alloc / free functions
********************************************************************** */
-static void free_tstripdata(int len, TStripElem *se)
-{
- TStripElem *seo;
- int a;
-
- seo= se;
- if (!se)
- return;
-
- for(a=0; a<len; a++, se++) {
- if(se->ibuf) {
- IMB_freeImBuf(se->ibuf);
- se->ibuf = 0;
- }
- if(se->ibuf_comp) {
- IMB_freeImBuf(se->ibuf_comp);
- se->ibuf_comp = 0;
- }
- }
-
- MEM_freeN(seo);
-}
void new_tstripdata(Sequence *seq)
{
if(seq->strip) {
- free_tstripdata(seq->strip->len, seq->strip->tstripdata);
- free_tstripdata(seq->strip->endstill,
- seq->strip->tstripdata_endstill);
- free_tstripdata(seq->strip->startstill,
- seq->strip->tstripdata_startstill);
-
- seq->strip->tstripdata= 0;
- seq->strip->tstripdata_endstill= 0;
- seq->strip->tstripdata_startstill= 0;
-
- if(seq->strip->ibuf_startstill) {
- IMB_freeImBuf(seq->strip->ibuf_startstill);
- seq->strip->ibuf_startstill = 0;
- }
-
- if(seq->strip->ibuf_endstill) {
- IMB_freeImBuf(seq->strip->ibuf_endstill);
- seq->strip->ibuf_endstill = 0;
- }
-
seq->strip->len= seq->len;
}
}
@@ -207,20 +167,6 @@ void seq_free_strip(Strip *strip)
MEM_freeN(strip->color_balance);
}
- free_tstripdata(strip->len, strip->tstripdata);
- free_tstripdata(strip->endstill, strip->tstripdata_endstill);
- free_tstripdata(strip->startstill, strip->tstripdata_startstill);
-
- if(strip->ibuf_startstill) {
- IMB_freeImBuf(strip->ibuf_startstill);
- strip->ibuf_startstill = 0;
- }
-
- if(strip->ibuf_endstill) {
- IMB_freeImBuf(strip->ibuf_endstill);
- strip->ibuf_endstill = 0;
- }
-
MEM_freeN(strip);
}
@@ -608,7 +554,7 @@ void calc_sequence(Scene *scene, Sequence *seq)
}
/* note: caller should run calc_sequence(scene, seq) after */
-void reload_sequence_new_file(Scene *scene, Sequence * seq, int lock_range)
+void reload_sequence_new_file(Main *bmain, Scene *scene, Sequence * seq, int lock_range)
{
char str[FILE_MAXDIR+FILE_MAXFILE];
int prev_startdisp, prev_enddisp;
@@ -675,7 +621,7 @@ void reload_sequence_new_file(Scene *scene, Sequence * seq, int lock_range)
seq->strip->len = seq->len;
} else if (seq->type == SEQ_SCENE) {
/* 'seq->scenenr' should be replaced with something more reliable */
- Scene * sce = G.main->scene.first;
+ Scene * sce = bmain->scene.first;
int nr = 1;
while(sce) {
@@ -764,12 +710,12 @@ static int clear_scene_in_allseqs_cb(Sequence *seq, void *arg_pt)
return 1;
}
-void clear_scene_in_allseqs(Scene *scene)
+void clear_scene_in_allseqs(Main *bmain, Scene *scene)
{
Scene *scene_iter;
/* when a scene is deleted: test all seqs */
- for(scene_iter= G.main->scene.first; scene_iter; scene_iter= scene_iter->id.next) {
+ for(scene_iter= bmain->scene.first; scene_iter; scene_iter= scene_iter->id.next) {
if(scene_iter != scene && scene_iter->ed) {
seqbase_recursive_apply(&scene_iter->ed->seqbase, clear_scene_in_allseqs_cb, scene);
}
@@ -949,139 +895,10 @@ static void multibuf(ImBuf *ibuf, float fmul)
}
}
-static void do_effect(Scene *scene, int cfra, Sequence *seq, TStripElem * se,
- int render_size)
-{
- TStripElem *se1, *se2, *se3;
- float fac, facf;
- int x, y;
- int early_out;
- struct SeqEffectHandle sh = get_sequence_effect(seq);
- FCurve *fcu= NULL;
-
- if (!sh.execute) { /* effect not supported in this version... */
- make_black_ibuf(se->ibuf);
- return;
- }
-
- if ((seq->flag & SEQ_USE_EFFECT_DEFAULT_FADE) != 0) {
- sh.get_default_fac(seq, cfra, &fac, &facf);
- if( scene->r.mode & R_FIELDS ); else facf= fac;
- } else {
- fcu = id_data_find_fcurve(&scene->id, seq, &RNA_Sequence,
- "effect_fader", 0);
- if (fcu) {
- fac = facf = evaluate_fcurve(fcu, cfra);
- if( scene->r.mode & R_FIELDS ) {
- facf = evaluate_fcurve(fcu, cfra + 0.5);
- }
- } else {
- fac = facf = seq->effect_fader;
- }
- }
-
- early_out = sh.early_out(seq, fac, facf);
-
- if (early_out == -1) { /* no input needed */
- sh.execute(scene, seq, cfra, fac, facf,
- se->ibuf->x, se->ibuf->y, render_size,
- 0, 0, 0, se->ibuf);
- return;
- }
-
- switch (early_out) {
- case 0:
- if (se->se1==0 || se->se2==0 || se->se3==0) {
- make_black_ibuf(se->ibuf);
- return;
- }
-
- se1= se->se1;
- se2= se->se2;
- se3= se->se3;
-
- if ( (se1==0 || se2==0 || se3==0)
- || (se1->ibuf==0 || se2->ibuf==0 || se3->ibuf==0)) {
- make_black_ibuf(se->ibuf);
- return;
- }
-
- break;
- case 1:
- if (se->se1 == 0) {
- make_black_ibuf(se->ibuf);
- return;
- }
-
- se1= se->se1;
-
- if (se1 == 0 || se1->ibuf == 0) {
- make_black_ibuf(se->ibuf);
- return;
- }
-
- if (se->ibuf != se1->ibuf) {
- IMB_freeImBuf(se->ibuf);
- se->ibuf = se1->ibuf;
- IMB_refImBuf(se->ibuf);
- }
- return;
- case 2:
- if (se->se2 == 0) {
- make_black_ibuf(se->ibuf);
- return;
- }
-
- se2= se->se2;
-
- if (se2 == 0 || se2->ibuf == 0) {
- make_black_ibuf(se->ibuf);
- return;
- }
- if (se->ibuf != se2->ibuf) {
- IMB_freeImBuf(se->ibuf);
- se->ibuf = se2->ibuf;
- IMB_refImBuf(se->ibuf);
- }
- return;
- default:
- make_black_ibuf(se->ibuf);
- return;
- }
-
- x= se2->ibuf->x;
- y= se2->ibuf->y;
-
- if (!se1->ibuf->rect_float && se->ibuf->rect_float) {
- IMB_float_from_rect_simple(se1->ibuf);
- }
- if (!se2->ibuf->rect_float && se->ibuf->rect_float) {
- IMB_float_from_rect_simple(se2->ibuf);
- }
- if (!se3->ibuf->rect_float && se->ibuf->rect_float) {
- IMB_float_from_rect_simple(se3->ibuf);
- }
-
- if (!se1->ibuf->rect && !se->ibuf->rect_float) {
- IMB_rect_from_float(se1->ibuf);
- }
- if (!se2->ibuf->rect && !se->ibuf->rect_float) {
- IMB_rect_from_float(se2->ibuf);
- }
- if (!se3->ibuf->rect && !se->ibuf->rect_float) {
- IMB_rect_from_float(se3->ibuf);
- }
-
- sh.execute(scene, seq, cfra, fac, facf, x, y, render_size,
- se1->ibuf, se2->ibuf, se3->ibuf,
- se->ibuf);
-}
-
-static int give_stripelem_index(Sequence *seq, int cfra)
+static float give_stripelem_index(Sequence *seq, float cfra)
{
- int nr;
+ float nr;
- if(seq->startdisp >cfra || seq->enddisp <= cfra) return -1;
if(seq->len == 0) return -1;
if(seq->flag&SEQ_REVERSE_FRAMES) {
/*reverse frame in this sequence */
@@ -1095,93 +912,12 @@ static int give_stripelem_index(Sequence *seq, int cfra)
}
if (seq->strobe < 1.0) seq->strobe = 1.0;
if (seq->strobe > 1.0) {
- nr -= (int)fmod((double)nr, (double)seq->strobe);
+ nr -= fmod((double)nr, (double)seq->strobe);
}
return nr;
}
-static TStripElem* alloc_tstripdata(int len, const char * name)
-{
- int i;
- TStripElem *se = MEM_callocN(len * sizeof(TStripElem), name);
- for (i = 0; i < len; i++) {
- se[i].ok = STRIPELEM_OK;
- }
- return se;
-}
-
-static TStripElem *give_tstripelem(Sequence *seq, int cfra)
-{
- TStripElem *se;
- int nr;
-
- se = seq->strip->tstripdata;
- if (se == 0 && seq->len > 0) {
- se = seq->strip->tstripdata = alloc_tstripdata(seq->len,
- "tstripelems");
- }
- nr = give_stripelem_index(seq, cfra);
-
- if (nr == -1) return 0;
- if (se == 0) return 0;
-
- se += nr;
-
- /* if there are IPOs with blend modes active, one has to watch out
- for startstill + endstill area: we can't use the same tstripelem
- here for all ibufs, since then, blending with IPOs won't work!
-
- Rather common case, if you use a single image and try to fade
- it in and out... or want to use your strip as a watermark in
- alpha over mode...
- */
- if (seq->blend_mode != SEQ_BLEND_REPLACE ||
- (/*seq->ipo && seq->ipo->curve.first &&*/
- (!(seq->type & SEQ_EFFECT) || !seq->seq1))) {
- Strip * s = seq->strip;
- if (cfra < seq->start) {
- se = s->tstripdata_startstill;
- if (seq->startstill > s->startstill) {
- free_tstripdata(s->startstill,
- s->tstripdata_startstill);
- se = 0;
- }
-
- if (se == 0) {
- s->startstill = seq->startstill;
- se = seq->strip->tstripdata_startstill
- = alloc_tstripdata(
- s->startstill,
- "tstripelems_startstill");
- }
- se += seq->start - cfra - 1;
-
- } else if (cfra > seq->start + seq->len-1) {
- se = s->tstripdata_endstill;
- if (seq->endstill > s->endstill) {
- free_tstripdata(s->endstill,
- s->tstripdata_endstill);
- se = 0;
- }
-
- if (se == 0) {
- s->endstill = seq->endstill;
- se = seq->strip->tstripdata_endstill
- = alloc_tstripdata(
- s->endstill,
- "tstripelems_endstill");
- }
- se += cfra - (seq->start + seq->len-1) - 1;
- }
- }
-
-
- se->nr= nr;
-
- return se;
-}
-
StripElem *give_stripelem(Sequence *seq, int cfra)
{
StripElem *se= seq->strip->stripdata;
@@ -1190,7 +926,7 @@ StripElem *give_stripelem(Sequence *seq, int cfra)
/* use the first */
}
else {
- int nr = give_stripelem_index(seq, cfra);
+ int nr = (int) give_stripelem_index(seq, cfra);
if (nr == -1) return 0;
if (se == 0) return 0;
@@ -1321,17 +1057,15 @@ static int seq_proxy_get_fname(Scene *scene, Sequence * seq, int cfra, char * na
dir, render_size, se->name);
frameno = 1;
} else if (seq->type == SEQ_MOVIE) {
- TStripElem * tse = give_tstripelem(seq, cfra);
-
- frameno = tse->nr + seq->anim_startofs;
+ frameno = (int) give_stripelem_index(seq, cfra)
+ + seq->anim_startofs;
snprintf(name, PROXY_MAXFILE, "%s/%s/%d/####", dir,
seq->strip->stripdata->name,
render_size);
} else {
- TStripElem * tse = give_tstripelem(seq, cfra);
-
- frameno = tse->nr + seq->anim_startofs;
+ frameno = (int) give_stripelem_index(seq, cfra)
+ + seq->anim_startofs;
snprintf(name, PROXY_MAXFILE, "%s/proxy_misc/%d/####", dir,
render_size);
@@ -1360,10 +1094,11 @@ static struct ImBuf * seq_proxy_fetch(Scene *scene, Sequence * seq, int cfra, in
}
if (seq->flag & SEQ_USE_PROXY_CUSTOM_FILE) {
- TStripElem * tse = give_tstripelem(seq, cfra);
- int frameno = tse->nr + seq->anim_startofs;
+ int frameno = (int) give_stripelem_index(seq, cfra)
+ + seq->anim_startofs;
if (!seq->strip->proxy->anim) {
- if (!seq_proxy_get_fname(scene, seq, cfra, name, render_size)) {
+ if (!seq_proxy_get_fname(
+ scene, seq, cfra, name, render_size)) {
return 0;
}
@@ -1606,12 +1341,12 @@ static void make_cb_table_float(float lift, float gain, float gamma,
}
}
-static void color_balance_byte_byte(Sequence * seq, TStripElem* se, float mul)
+static void color_balance_byte_byte(Sequence * seq, ImBuf* ibuf, float mul)
{
unsigned char cb_tab[3][256];
int c;
- unsigned char * p = (unsigned char*) se->ibuf->rect;
- unsigned char * e = p + se->ibuf->x * 4 * se->ibuf->y;
+ unsigned char * p = (unsigned char*) ibuf->rect;
+ unsigned char * e = p + ibuf->x * 4 * ibuf->y;
StripColorBalance cb = calc_cb(seq->strip->color_balance);
@@ -1629,24 +1364,24 @@ static void color_balance_byte_byte(Sequence * seq, TStripElem* se, float mul)
}
}
-static void color_balance_byte_float(Sequence * seq, TStripElem* se, float mul)
+static void color_balance_byte_float(Sequence * seq, ImBuf* ibuf, float mul)
{
float cb_tab[4][256];
int c,i;
- unsigned char * p = (unsigned char*) se->ibuf->rect;
- unsigned char * e = p + se->ibuf->x * 4 * se->ibuf->y;
+ unsigned char * p = (unsigned char*) ibuf->rect;
+ unsigned char * e = p + ibuf->x * 4 * ibuf->y;
float * o;
StripColorBalance cb;
- imb_addrectfloatImBuf(se->ibuf);
+ imb_addrectfloatImBuf(ibuf);
- o = se->ibuf->rect_float;
+ o = ibuf->rect_float;
cb = calc_cb(seq->strip->color_balance);
for (c = 0; c < 3; c++) {
make_cb_table_float(cb.lift[c], cb.gain[c], cb.gamma[c],
- cb_tab[c], mul);
+ cb_tab[c], mul);
}
for (i = 0; i < 256; i++) {
@@ -1663,10 +1398,10 @@ static void color_balance_byte_float(Sequence * seq, TStripElem* se, float mul)
}
}
-static void color_balance_float_float(Sequence * seq, TStripElem* se, float mul)
+static void color_balance_float_float(Sequence * seq, ImBuf* ibuf, float mul)
{
- float * p = se->ibuf->rect_float;
- float * e = se->ibuf->rect_float + se->ibuf->x * 4* se->ibuf->y;
+ float * p = ibuf->rect_float;
+ float * e = ibuf->rect_float + ibuf->x * 4* ibuf->y;
StripColorBalance cb = calc_cb(seq->strip->color_balance);
while (p < e) {
@@ -1678,14 +1413,14 @@ static void color_balance_float_float(Sequence * seq, TStripElem* se, float mul)
}
}
-static void color_balance(Sequence * seq, TStripElem* se, float mul)
+static void color_balance(Sequence * seq, ImBuf* ibuf, float mul)
{
- if (se->ibuf->rect_float) {
- color_balance_float_float(seq, se, mul);
+ if (ibuf->rect_float) {
+ color_balance_float_float(seq, ibuf, mul);
} else if(seq->flag & SEQ_MAKE_FLOAT) {
- color_balance_byte_float(seq, se, mul);
+ color_balance_byte_float(seq, ibuf, mul);
} else {
- color_balance_byte_byte(seq, se, mul);
+ color_balance_byte_byte(seq, ibuf, mul);
}
}
@@ -1708,44 +1443,49 @@ static void color_balance(Sequence * seq, TStripElem* se, float mul)
*/
-static int input_have_to_preprocess(Scene *scene, Sequence * seq, TStripElem* se, int cfra, int seqrectx, int seqrecty)
+int input_have_to_preprocess(
+ Scene *scene, Sequence * seq, float cfra, int seqrectx, int seqrecty)
{
float mul;
if ((seq->flag & SEQ_FILTERY) ||
- (seq->flag & SEQ_USE_CROP) ||
- (seq->flag & SEQ_USE_TRANSFORM) ||
- (seq->flag & SEQ_FLIPX) ||
- (seq->flag & SEQ_FLIPY) ||
- (seq->flag & SEQ_USE_COLOR_BALANCE) ||
- (seq->flag & SEQ_MAKE_PREMUL) ||
- (se->ibuf->x != seqrectx || se->ibuf->y != seqrecty)) {
+ (seq->flag & SEQ_USE_CROP) ||
+ (seq->flag & SEQ_USE_TRANSFORM) ||
+ (seq->flag & SEQ_FLIPX) ||
+ (seq->flag & SEQ_FLIPY) ||
+ (seq->flag & SEQ_USE_COLOR_BALANCE) ||
+ (seq->flag & SEQ_MAKE_PREMUL)) {
return TRUE;
}
mul = seq->mul;
- if(seq->blend_mode == SEQ_BLEND_REPLACE &&
- !(seq->type & SEQ_EFFECT)) {
+ if(seq->blend_mode == SEQ_BLEND_REPLACE) {
mul *= seq->blend_opacity / 100.0;
}
if (mul != 1.0) {
return TRUE;
}
+
+ if (seq->sat != 1.0) {
+ return TRUE;
+ }
return FALSE;
}
-static void input_preprocess(Scene *scene, Sequence *seq, TStripElem *se, int cfra, int seqrectx, int seqrecty)
+static ImBuf * input_preprocess(
+ Scene *scene, Sequence *seq, float cfra, int seqrectx, int seqrecty,
+ ImBuf * ibuf)
{
float mul;
- seq->strip->orx= se->ibuf->x;
- seq->strip->ory= se->ibuf->y;
+ seq->strip->orx= ibuf->x;
+ seq->strip->ory= ibuf->y;
if((seq->flag & SEQ_FILTERY) && seq->type != SEQ_MOVIE) {
- IMB_filtery(se->ibuf);
+ IMB_filtery(ibuf);
}
if(seq->flag & SEQ_USE_CROP || seq->flag & SEQ_USE_TRANSFORM) {
@@ -1763,8 +1503,8 @@ static void input_preprocess(Scene *scene, Sequence *seq, TStripElem *se, int cf
t = *seq->strip->transform;
}
- sx = se->ibuf->x - c.left - c.right;
- sy = se->ibuf->y - c.top - c.bottom;
+ sx = ibuf->x - c.left - c.right;
+ sy = ibuf->y - c.top - c.bottom;
dx = sx;
dy = sy;
@@ -1773,45 +1513,49 @@ static void input_preprocess(Scene *scene, Sequence *seq, TStripElem *se, int cf
dy = scene->r.ysch;
}
- if (c.top + c.bottom >= se->ibuf->y ||
- c.left + c.right >= se->ibuf->x ||
+ if (c.top + c.bottom >= ibuf->y ||
+ c.left + c.right >= ibuf->x ||
t.xofs >= dx || t.yofs >= dy) {
- make_black_ibuf(se->ibuf);
+ make_black_ibuf(ibuf);
} else {
ImBuf * i;
- if (se->ibuf->rect_float) {
+ if (ibuf->rect_float) {
i = IMB_allocImBuf(dx, dy,32, IB_rectfloat, 0);
} else {
i = IMB_allocImBuf(dx, dy,32, IB_rect, 0);
}
- IMB_rectcpy(i, se->ibuf,
- t.xofs, t.yofs,
- c.left, c.bottom,
- sx, sy);
-
- IMB_freeImBuf(se->ibuf);
+ IMB_rectcpy(i, ibuf,
+ t.xofs, t.yofs,
+ c.left, c.bottom,
+ sx, sy);
+
+ IMB_freeImBuf(ibuf);
- se->ibuf = i;
+ ibuf = i;
}
}
if(seq->flag & SEQ_FLIPX) {
- IMB_flipx(se->ibuf);
+ IMB_flipx(ibuf);
+ }
+
+ if(seq->flag & SEQ_FLIPY) {
+ IMB_flipy(ibuf);
}
if(seq->sat != 1.0f) {
/* inline for now, could become an imbuf function */
int i;
- char *rct= (char *)se->ibuf->rect;
- float *rctf= se->ibuf->rect_float;
+ char *rct= (char *)ibuf->rect;
+ float *rctf= ibuf->rect_float;
const float sat= seq->sat;
float hsv[3];
if(rct) {
float rgb[3];
- for (i = se->ibuf->x * se->ibuf->y; i > 0; i--, rct+=4) {
+ for (i = ibuf->x * ibuf->y; i > 0; i--, rct+=4) {
rgb_byte_to_float(rct, rgb);
rgb_to_hsv(rgb[0], rgb[1], rgb[2], hsv, hsv+1, hsv+2);
hsv_to_rgb(hsv[0], hsv[1] * sat, hsv[2], rgb, rgb+1, rgb+2);
@@ -1820,7 +1564,7 @@ static void input_preprocess(Scene *scene, Sequence *seq, TStripElem *se, int cf
}
if(rctf) {
- for (i = se->ibuf->x * se->ibuf->y; i > 0; i--, rctf+=4) {
+ for (i = ibuf->x * ibuf->y; i > 0; i--, rctf+=4) {
rgb_to_hsv(rctf[0], rctf[1], rctf[2], hsv, hsv+1, hsv+2);
hsv_to_rgb(hsv[0], hsv[1] * sat, hsv[2], rctf, rctf+1, rctf+2);
}
@@ -1834,718 +1578,520 @@ static void input_preprocess(Scene *scene, Sequence *seq, TStripElem *se, int cf
}
if(seq->flag & SEQ_USE_COLOR_BALANCE && seq->strip->color_balance) {
- color_balance(seq, se, mul);
+ color_balance(seq, ibuf, mul);
mul = 1.0;
}
if(seq->flag & SEQ_MAKE_FLOAT) {
- if (!se->ibuf->rect_float)
- IMB_float_from_rect_simple(se->ibuf);
+ if (!ibuf->rect_float)
+ IMB_float_from_rect_simple(ibuf);
- if (se->ibuf->rect) {
- imb_freerectImBuf(se->ibuf);
+ if (ibuf->rect) {
+ imb_freerectImBuf(ibuf);
}
}
if(mul != 1.0) {
- multibuf(se->ibuf, mul);
+ multibuf(ibuf, mul);
}
if(seq->flag & SEQ_MAKE_PREMUL) {
- if(se->ibuf->depth == 32 && se->ibuf->zbuf == 0) {
- IMB_premultiply_alpha(se->ibuf);
+ if(ibuf->depth == 32 && ibuf->zbuf == 0) {
+ IMB_premultiply_alpha(ibuf);
}
}
- if(se->ibuf->x != seqrectx || se->ibuf->y != seqrecty ) {
+ if(ibuf->x != seqrectx || ibuf->y != seqrecty ) {
if(scene->r.mode & R_OSA) {
- IMB_scaleImBuf(se->ibuf,
- (short)seqrectx, (short)seqrecty);
+ IMB_scaleImBuf(ibuf,
+ (short)seqrectx, (short)seqrecty);
} else {
- IMB_scalefastImBuf(se->ibuf,
+ IMB_scalefastImBuf(ibuf,
(short)seqrectx, (short)seqrecty);
}
}
+ return ibuf;
}
-/* test if image too small or discarded from cache: reload */
-
-static void test_and_auto_discard_ibuf(TStripElem * se,
- int seqrectx, int seqrecty)
+static ImBuf * copy_from_ibuf_still(Sequence * seq, float nr,
+ int seqrectx, int seqrecty)
{
- if (se->ibuf) {
- if(se->ibuf->x != seqrectx || se->ibuf->y != seqrecty
- || !(se->ibuf->rect || se->ibuf->rect_float)) {
- IMB_freeImBuf(se->ibuf);
+ ImBuf * rval = 0;
+ ImBuf * ibuf = 0;
- se->ibuf= 0;
- se->ok= STRIPELEM_OK;
- }
+ if (nr == 0) {
+ ibuf = seq_stripelem_cache_get(
+ seq, seqrectx, seqrecty, seq->start,
+ SEQ_STRIPELEM_IBUF_STARTSTILL);
+ }
+ if (nr == seq->len - 1) {
+ ibuf = seq_stripelem_cache_get(
+ seq, seqrectx, seqrecty, seq->start,
+ SEQ_STRIPELEM_IBUF_ENDSTILL);
}
- if (se->ibuf_comp) {
- if(se->ibuf_comp->x != seqrectx || se->ibuf_comp->y != seqrecty
- || !(se->ibuf_comp->rect || se->ibuf_comp->rect_float)) {
- IMB_freeImBuf(se->ibuf_comp);
- se->ibuf_comp = 0;
- }
+ if (ibuf) {
+ rval = IMB_dupImBuf(ibuf);
+ IMB_freeImBuf(ibuf);
}
+
+ return rval;
}
-static void test_and_auto_discard_ibuf_stills(Strip * strip)
+static void copy_to_ibuf_still(Sequence * seq, float nr,
+ ImBuf * ibuf)
{
- if (strip->ibuf_startstill) {
- if (!strip->ibuf_startstill->rect &&
- !strip->ibuf_startstill->rect_float) {
- IMB_freeImBuf(strip->ibuf_startstill);
- strip->ibuf_startstill = 0;
- }
+ if (nr == 0) {
+ seq_stripelem_cache_put(
+ seq, 0, 0, seq->start,
+ SEQ_STRIPELEM_IBUF_STARTSTILL, ibuf);
}
- if (strip->ibuf_endstill) {
- if (!strip->ibuf_endstill->rect &&
- !strip->ibuf_endstill->rect_float) {
- IMB_freeImBuf(strip->ibuf_endstill);
- strip->ibuf_endstill = 0;
- }
+ if (nr == seq->len - 1) {
+ seq_stripelem_cache_put(
+ seq, 0, 0, seq->start,
+ SEQ_STRIPELEM_IBUF_ENDSTILL, ibuf);
}
}
-static void copy_from_ibuf_still(Sequence * seq, TStripElem * se)
-{
- if (!se->ibuf) {
- if (se->nr == 0 && seq->strip->ibuf_startstill) {
- IMB_cache_limiter_touch(seq->strip->ibuf_startstill);
-
- se->ibuf = IMB_dupImBuf(seq->strip->ibuf_startstill);
- }
- if (se->nr == seq->len - 1
- && (seq->len != 1)
- && seq->strip->ibuf_endstill) {
- IMB_cache_limiter_touch(seq->strip->ibuf_endstill);
+/* **********************************************************************
+ strip rendering functions
+ ********************************************************************** */
- se->ibuf = IMB_dupImBuf(seq->strip->ibuf_endstill);
- }
- }
-}
+static ImBuf* seq_render_strip_stack(
+ Main *bmain, Scene *scene,
+ ListBase *seqbasep, float cfra, int chanshown, int render_size,
+ int seqrectx, int seqrecty);
-static void copy_to_ibuf_still(Sequence * seq, TStripElem * se)
-{
- if (se->ibuf) {
- if (se->nr == 0) {
- seq->strip->ibuf_startstill = IMB_dupImBuf(se->ibuf);
+static ImBuf * seq_render_strip(Main *bmain, Scene *scene, Sequence * seq, float cfra,
+ int render_size,
+ int seqrectx, int seqrecty);
- IMB_cache_limiter_insert(seq->strip->ibuf_startstill);
- IMB_cache_limiter_touch(seq->strip->ibuf_startstill);
- }
- if (se->nr == seq->len - 1 && seq->len != 1) {
- seq->strip->ibuf_endstill = IMB_dupImBuf(se->ibuf);
- IMB_cache_limiter_insert(seq->strip->ibuf_endstill);
- IMB_cache_limiter_touch(seq->strip->ibuf_endstill);
- }
- }
-}
-
-static void free_metastrip_imbufs(ListBase *seqbasep, int cfra, int chanshown)
+static ImBuf* seq_render_effect_strip_impl(
+ Main *bmain, Scene *scene, float cfra, Sequence *seq, int render_size,
+ int seqrectx, int seqrecty)
{
- Sequence* seq_arr[MAXSEQ+1];
+ float fac, facf;
+ int early_out;
int i;
- TStripElem* se = 0;
-
- evaluate_seq_frame_gen(seq_arr, seqbasep, cfra);
+ int must_preprocess = FALSE;
- for (i = 0; i < MAXSEQ; i++) {
- if (!video_seq_is_rendered(seq_arr[i])) {
- continue;
- }
- se = give_tstripelem(seq_arr[i], cfra);
- if (se) {
- if (se->ibuf) {
- IMB_freeImBuf(se->ibuf);
-
- se->ibuf= 0;
- se->ok= STRIPELEM_OK;
- }
+ struct SeqEffectHandle sh = get_sequence_effect(seq);
+ FCurve *fcu= NULL;
+ ImBuf * ibuf[3];
+ ImBuf * out = 0;
- if (se->ibuf_comp) {
- IMB_freeImBuf(se->ibuf_comp);
+ ibuf[0] = ibuf[1] = ibuf[2] = 0;
- se->ibuf_comp = 0;
- }
- }
+ if (!sh.execute) { /* effect not supported in this version... */
+ goto finish;
}
-
-}
-static void check_limiter_refcount(const char * func, TStripElem *se)
-{
- if (se && se->ibuf) {
- int refcount = IMB_cache_limiter_get_refcount(se->ibuf);
- if (refcount != 1) {
- /* can happen on complex pipelines */
- if (refcount > 1 && (G.f & G_DEBUG) == 0) {
- return;
- }
-
- fprintf(stderr,
- "sequencer: (ibuf) %s: "
- "suspicious memcache "
- "limiter refcount: %d\n", func, refcount);
- }
- }
-}
-
-static void check_limiter_refcount_comp(const char * func, TStripElem *se)
-{
- if (se && se->ibuf_comp) {
- int refcount = IMB_cache_limiter_get_refcount(se->ibuf_comp);
- if (refcount != 1) {
- /* can happen on complex pipelines */
- if (refcount > 1 && (G.f & G_DEBUG) == 0) {
- return;
+ if ((seq->flag & SEQ_USE_EFFECT_DEFAULT_FADE) != 0) {
+ sh.get_default_fac(seq, cfra, &fac, &facf);
+ if( scene->r.mode & R_FIELDS ); else facf= fac;
+ } else {
+ fcu = id_data_find_fcurve(&scene->id, seq, &RNA_Sequence,
+ "effect_fader", 0);
+ if (fcu) {
+ fac = facf = evaluate_fcurve(fcu, cfra);
+ if( scene->r.mode & R_FIELDS ) {
+ facf = evaluate_fcurve(fcu, cfra + 0.5);
}
- fprintf(stderr,
- "sequencer: (ibuf comp) %s: "
- "suspicious memcache "
- "limiter refcount: %d\n", func, refcount);
+ } else {
+ fac = facf = seq->effect_fader;
}
}
-}
-
-static TStripElem* do_build_seq_array_recursively(
- Scene *scene,
- ListBase *seqbasep, int cfra, int chanshown, int render_size,
- int seqrectx, int seqrecty);
-
-static void do_build_seq_ibuf(Scene *scene, Sequence * seq, TStripElem *se, int cfra,
- int build_proxy_run, int render_size, int seqrectx, int seqrecty)
-{
- char name[FILE_MAXDIR+FILE_MAXFILE];
- int use_limiter = TRUE;
-
- test_and_auto_discard_ibuf(se, seqrectx, seqrecty);
- test_and_auto_discard_ibuf_stills(seq->strip);
-
- if(seq->type == SEQ_META) {
- TStripElem * meta_se = 0;
- int use_preprocess = FALSE;
- use_limiter = FALSE;
-
- if (!build_proxy_run && se->ibuf == 0) {
- se->ibuf = seq_proxy_fetch(scene, seq, cfra, render_size);
- if (se->ibuf) {
- use_limiter = TRUE;
- use_preprocess = TRUE;
- }
- }
-
- if(!se->ibuf && seq->seqbase.first) {
- meta_se = do_build_seq_array_recursively(scene,
- &seq->seqbase, seq->start + se->nr, 0,
- render_size, seqrectx, seqrecty);
-
- check_limiter_refcount("do_build_seq_ibuf: for META", meta_se);
- }
- se->ok = STRIPELEM_OK;
-
- if(!se->ibuf && meta_se) {
- se->ibuf = meta_se->ibuf_comp;
- if(se->ibuf &&
- (!input_have_to_preprocess(scene, seq, se, cfra,
- seqrectx, seqrecty) ||
- build_proxy_run)) {
- IMB_refImBuf(se->ibuf);
- if (build_proxy_run) {
- IMB_cache_limiter_unref(se->ibuf);
- }
- } else if (se->ibuf) {
- struct ImBuf * i = IMB_dupImBuf(se->ibuf);
+ early_out = sh.early_out(seq, fac, facf);
- IMB_cache_limiter_unref(se->ibuf);
+ if (early_out == -1) { /* no input needed */
+ out = sh.execute(bmain, scene, seq, cfra, fac, facf,
+ seqrectx, seqrecty, render_size,
+ 0, 0, 0);
+ goto finish;
+ }
- se->ibuf = i;
- use_limiter = TRUE;
- use_preprocess = TRUE;
- }
- } else if (se->ibuf) {
- use_limiter = TRUE;
- }
- if (meta_se) {
- free_metastrip_imbufs(
- &seq->seqbase, seq->start + se->nr, 0);
- }
+ must_preprocess = input_have_to_preprocess(
+ scene, seq, cfra, seqrectx, seqrecty);
- if (use_preprocess) {
- input_preprocess(scene, seq, se, cfra, seqrectx,
- seqrecty);
- }
- } else if(seq->type & SEQ_EFFECT) {
- int use_preprocess = FALSE;
- /* should the effect be recalculated? */
-
- if (!build_proxy_run && se->ibuf == 0) {
- se->ibuf = seq_proxy_fetch(scene, seq, cfra, render_size);
- if (se->ibuf) {
- use_preprocess = TRUE;
- }
+ switch (early_out) {
+ case 0:
+ break;
+ case 1:
+ if (seq->seq1) {
+ ibuf[0] = seq_render_strip(bmain, scene, seq->seq1, cfra,
+ render_size,
+ seqrectx, seqrecty);
}
-
- if(se->ibuf == 0) {
- /* if any inputs are rectfloat, output is float too */
- if((se->se1 && se->se1->ibuf && se->se1->ibuf->rect_float) ||
- (se->se2 && se->se2->ibuf && se->se2->ibuf->rect_float) ||
- (se->se3 && se->se3->ibuf && se->se3->ibuf->rect_float))
- se->ibuf= IMB_allocImBuf((short)seqrectx, (short)seqrecty, 32, IB_rectfloat, 0);
- else
- se->ibuf= IMB_allocImBuf((short)seqrectx, (short)seqrecty, 32, IB_rect, 0);
-
- do_effect(scene, cfra, seq, se, render_size);
- if (input_have_to_preprocess(scene, seq, se, cfra,
- seqrectx, seqrecty) &&
- !build_proxy_run) {
- if ((se->se1 && (se->ibuf == se->se1->ibuf)) ||
- (se->se2 && (se->ibuf == se->se2->ibuf))) {
- struct ImBuf * i
- = IMB_dupImBuf(se->ibuf);
-
- IMB_freeImBuf(se->ibuf);
-
- se->ibuf = i;
- }
- use_preprocess = TRUE;
+ if (ibuf[0]) {
+ if (must_preprocess) {
+ out = IMB_dupImBuf(ibuf[0]);
+ } else {
+ out = ibuf[0];
+ IMB_refImBuf(out);
}
}
- if (use_preprocess) {
- input_preprocess(scene, seq, se, cfra, seqrectx,
- seqrecty);
- }
- } else if(seq->type == SEQ_IMAGE) {
- if(se->ok == STRIPELEM_OK && se->ibuf == 0) {
- StripElem * s_elem = give_stripelem(seq, cfra);
- BLI_join_dirfile(name, seq->strip->dir, s_elem->name);
- BLI_path_abs(name, G.sce);
- if (!build_proxy_run) {
- se->ibuf = seq_proxy_fetch(scene, seq, cfra, render_size);
- }
- copy_from_ibuf_still(seq, se);
-
- if (se->ibuf==NULL && (se->ibuf= IMB_loadiffname(name, IB_rect))) {
- /* we don't need both (speed reasons)! */
- if (se->ibuf->rect_float && se->ibuf->rect)
- imb_freerectImBuf(se->ibuf);
-
- /* all sequencer color is done in SRGB space, linear gives odd crossfades */
- if(se->ibuf->profile == IB_PROFILE_LINEAR_RGB)
- IMB_convert_profile(se->ibuf, IB_PROFILE_NONE);
-
- copy_to_ibuf_still(seq, se);
- }
-
- if(se->ibuf == 0) {
- se->ok = STRIPELEM_FAILED;
- } else if (!build_proxy_run) {
- input_preprocess(scene, seq, se, cfra,
- seqrectx, seqrecty);
+ goto finish;
+ case 2:
+ if (seq->seq2) {
+ ibuf[1] = seq_render_strip(bmain, scene, seq->seq2, cfra,
+ render_size,
+ seqrectx, seqrecty);
+ }
+ if (ibuf[1]) {
+ if (must_preprocess) {
+ out = IMB_dupImBuf(ibuf[1]);
+ } else {
+ out = ibuf[1];
+ IMB_refImBuf(out);
}
}
- } else if(seq->type == SEQ_MOVIE) {
- if(se->ok == STRIPELEM_OK && se->ibuf==0) {
- if(!build_proxy_run) {
- se->ibuf = seq_proxy_fetch(scene, seq, cfra, render_size);
- }
- copy_from_ibuf_still(seq, se);
+ goto finish;
+ default:
+ goto finish;
+ }
- if (se->ibuf == 0) {
- if(seq->anim==0) {
- BLI_join_dirfile(name, seq->strip->dir, seq->strip->stripdata->name);
- BLI_path_abs(name, G.sce);
-
- seq->anim = openanim(
- name, IB_rect |
- ((seq->flag & SEQ_FILTERY)
- ? IB_animdeinterlace : 0));
- }
- if(seq->anim) {
- IMB_anim_set_preseek(seq->anim, seq->anim_preseek);
- se->ibuf = IMB_anim_absolute(seq->anim, se->nr + seq->anim_startofs);
- /* we don't need both (speed reasons)! */
- if (se->ibuf
- && se->ibuf->rect_float
- && se->ibuf->rect) {
- imb_freerectImBuf(se->ibuf);
- }
+ if (seq->seq1) {
+ ibuf[0] = seq_render_strip(bmain, scene, seq->seq1, cfra,
+ render_size,
+ seqrectx, seqrecty);
+ }
- }
- copy_to_ibuf_still(seq, se);
- }
-
- if(se->ibuf == 0) {
- se->ok = STRIPELEM_FAILED;
- } else if (!build_proxy_run) {
- input_preprocess(scene, seq, se, cfra,
- seqrectx, seqrecty);
- }
- }
- } else if(seq->type == SEQ_SCENE) { // scene can be NULL after deletions
- Scene *sce= seq->scene;// *oldsce= scene;
- int have_seq= FALSE;
- int sce_valid= FALSE;
+ if (seq->seq2) {
+ ibuf[1] = seq_render_strip(bmain, scene, seq->seq2, cfra,
+ render_size,
+ seqrectx, seqrecty);
+ }
- if(sce) {
- have_seq= (sce->r.scemode & R_DOSEQ) && sce->ed && sce->ed->seqbase.first;
- sce_valid= (sce->camera || have_seq);
- }
+ if (seq->seq3) {
+ ibuf[2] = seq_render_strip(bmain, scene, seq->seq3, cfra,
+ render_size,
+ seqrectx, seqrecty);
+ }
- if (se->ibuf == NULL && sce_valid && !build_proxy_run) {
- se->ibuf = seq_proxy_fetch(scene, seq, cfra, render_size);
- if (se->ibuf) {
- input_preprocess(scene, seq, se, cfra,
- seqrectx, seqrecty);
- }
- }
+ if (!ibuf[0] || !ibuf[1]) {
+ goto finish;
+ }
- if (se->ibuf == NULL && sce_valid) {
- copy_from_ibuf_still(seq, se);
- if (se->ibuf) {
- input_preprocess(scene, seq, se, cfra,
- seqrectx, seqrecty);
- }
- }
-
- if (!sce_valid) {
- se->ok = STRIPELEM_FAILED;
- }
- else if (se->ibuf==NULL && sce_valid) {
- int frame= seq->sfra + se->nr + seq->anim_startofs;
- int oldcfra = seq->scene->r.cfra;
- Object *oldcamera= seq->scene->camera;
- ListBase oldmarkers;
-
- /* Hack! This function can be called from do_render_seq(), in that case
- the seq->scene can already have a Render initialized with same name,
- so we have to use a default name. (compositor uses scene name to
- find render).
- However, when called from within the UI (image preview in sequencer)
- we do want to use scene Render, that way the render result is defined
- for display in render/imagewindow
-
- Hmm, don't see, why we can't do that all the time,
- and since G.rendering is uhm, gone... (Peter)
- */
-
- int rendering = G.rendering;
- int doseq;
- int doseq_gl= G.rendering ? /*(scene->r.seq_flag & R_SEQ_GL_REND)*/ 0 : (scene->r.seq_flag & R_SEQ_GL_PREV);
-
- /* prevent eternal loop */
- doseq= scene->r.scemode & R_DOSEQ;
- scene->r.scemode &= ~R_DOSEQ;
-
- seq->scene->r.cfra= frame;
- if(seq->scene_camera) seq->scene->camera= seq->scene_camera;
- else scene_camera_switch_update(seq->scene);
+ out = sh.execute(bmain, scene, seq, cfra, fac, facf, seqrectx, seqrecty,
+ render_size,
+ ibuf[0], ibuf[1], ibuf[2]);
-#ifdef DURIAN_CAMERA_SWITCH
- /* stooping to new low's in hackyness :( */
- oldmarkers= seq->scene->markers;
- seq->scene->markers.first= seq->scene->markers.last= NULL;
-#endif
+finish:
+ for (i = 0; i < 3; i++) {
+ IMB_freeImBuf(ibuf[i]);
+ }
- if(sequencer_view3d_cb && doseq_gl && (seq->scene == scene || have_seq==0) && seq->scene->camera) {
- /* opengl offscreen render */
- scene_update_for_newframe(seq->scene, seq->scene->lay);
- se->ibuf= sequencer_view3d_cb(seq->scene, seqrectx, seqrecty, scene->r.seq_prev_type);
- }
- else {
- Render *re;
- RenderResult rres;
+ if (!out) {
+ out = IMB_allocImBuf(
+ (short)seqrectx, (short)seqrecty, 32, IB_rect, 0);
+ }
- if(rendering)
- re= RE_NewRender(" do_build_seq_ibuf");
- else
- re= RE_NewRender(sce->id.name);
+ return out;
+}
- RE_BlenderFrame(re, sce, NULL, sce->lay, frame);
- RE_AcquireResultImage(re, &rres);
+static ImBuf * seq_render_scene_strip_impl(
+ Main *bmain, Scene * scene, Sequence * seq, float nr, int seqrectx, int seqrecty)
+{
+ ImBuf * ibuf = 0;
+ float frame= seq->sfra + nr + seq->anim_startofs;
+ float oldcfra;
+ Object *oldcamera;
+ ListBase oldmarkers;
+
+ /* Hack! This function can be called from do_render_seq(), in that case
+ the seq->scene can already have a Render initialized with same name,
+ so we have to use a default name. (compositor uses scene name to
+ find render).
+ However, when called from within the UI (image preview in sequencer)
+ we do want to use scene Render, that way the render result is defined
+ for display in render/imagewindow
+
+ Hmm, don't see, why we can't do that all the time,
+ and since G.rendering is uhm, gone... (Peter)
+ */
- if(rres.rectf) {
- se->ibuf= IMB_allocImBuf(rres.rectx, rres.recty, 32, IB_rectfloat, 0);
- memcpy(se->ibuf->rect_float, rres.rectf, 4*sizeof(float)*rres.rectx*rres.recty);
- if(rres.rectz) {
- addzbuffloatImBuf(se->ibuf);
- memcpy(se->ibuf->zbuf_float, rres.rectz, sizeof(float)*rres.rectx*rres.recty);
- }
- } else if (rres.rect32) {
- se->ibuf= IMB_allocImBuf(rres.rectx, rres.recty, 32, IB_rect, 0);
- memcpy(se->ibuf->rect, rres.rect32, 4*rres.rectx*rres.recty);
- }
+ int rendering = G.rendering;
+ int doseq;
+ int doseq_gl= G.rendering ? /*(scene->r.seq_flag & R_SEQ_GL_REND)*/ 0 : (scene->r.seq_flag & R_SEQ_GL_PREV);
+ int have_seq= FALSE;
+ Scene *sce= seq->scene; /* dont refer to seq->scene above this point!, it can be NULL */
+ int sce_valid= FALSE;
- RE_ReleaseResultImage(re);
+ if(sce) {
+ have_seq= (sce->r.scemode & R_DOSEQ) && sce->ed && sce->ed->seqbase.first;
+ sce_valid= (sce->camera || have_seq);
+ }
- // BIF_end_render_callbacks();
- }
-
- /* restore */
- scene->r.scemode |= doseq;
+ if (!sce_valid)
+ return NULL;
- seq->scene->r.cfra = oldcfra;
- seq->scene->camera= oldcamera;
+ oldcfra= seq->scene->r.cfra;
+ oldcamera= seq->scene->camera;
+ /* prevent eternal loop */
+ doseq= scene->r.scemode & R_DOSEQ;
+ scene->r.scemode &= ~R_DOSEQ;
+
+ seq->scene->r.cfra= frame;
+ if(seq->scene_camera)
+ seq->scene->camera= seq->scene_camera;
+ else
+ scene_camera_switch_update(seq->scene);
+
#ifdef DURIAN_CAMERA_SWITCH
- /* stooping to new low's in hackyness :( */
- seq->scene->markers= oldmarkers;
+ /* stooping to new low's in hackyness :( */
+ oldmarkers= seq->scene->markers;
+ seq->scene->markers.first= seq->scene->markers.last= NULL;
#endif
-
- copy_to_ibuf_still(seq, se);
-
- if (!build_proxy_run) {
- if(se->ibuf == NULL) {
- se->ok = STRIPELEM_FAILED;
- } else {
- input_preprocess(scene, seq, se, cfra,
- seqrectx, seqrecty);
- }
+
+ if(sequencer_view3d_cb && BLI_thread_is_main() && doseq_gl && (seq->scene == scene || have_seq==0) && seq->scene->camera) {
+ /* opengl offscreen render */
+ scene_update_for_newframe(bmain, seq->scene, seq->scene->lay);
+ ibuf= sequencer_view3d_cb(seq->scene, seqrectx, seqrecty,
+ scene->r.seq_prev_type);
+ }
+ else {
+ Render *re;
+ RenderResult rres;
+
+ if(rendering)
+ re= RE_NewRender(" do_build_seq_ibuf");
+ else
+ re= RE_NewRender(sce->id.name);
+
+ RE_BlenderFrame(re, bmain, sce, NULL, sce->lay, frame);
+
+ RE_AcquireResultImage(re, &rres);
+
+ if(rres.rectf) {
+ ibuf= IMB_allocImBuf(rres.rectx, rres.recty, 32, IB_rectfloat, 0);
+ memcpy(ibuf->rect_float, rres.rectf, 4*sizeof(float)*rres.rectx*rres.recty);
+ if(rres.rectz) {
+ addzbuffloatImBuf(ibuf);
+ memcpy(ibuf->zbuf_float, rres.rectz, sizeof(float)*rres.rectx*rres.recty);
}
+ /* float buffers in the sequencer are not linear */
+ ibuf->profile= IB_PROFILE_LINEAR_RGB;
+ IMB_convert_profile(ibuf, IB_PROFILE_SRGB);
}
- }
- if (!build_proxy_run) {
- if (se->ibuf && use_limiter) {
- IMB_cache_limiter_insert(se->ibuf);
- IMB_cache_limiter_ref(se->ibuf);
- IMB_cache_limiter_touch(se->ibuf);
+ else if (rres.rect32) {
+ ibuf= IMB_allocImBuf(rres.rectx, rres.recty, 32, IB_rect, 0);
+ memcpy(ibuf->rect, rres.rect32, 4*rres.rectx*rres.recty);
}
+
+ RE_ReleaseResultImage(re);
+
+ // BIF_end_render_callbacks();
}
-}
+
+ /* restore */
+ scene->r.scemode |= doseq;
+
+ seq->scene->r.cfra = oldcfra;
+ seq->scene->camera= oldcamera;
+
+#ifdef DURIAN_CAMERA_SWITCH
+ /* stooping to new low's in hackyness :( */
+ seq->scene->markers= oldmarkers;
+#endif
-static TStripElem* do_build_seq_recursively(Scene *scene, Sequence *seq, int cfra, int render_size, int seqrectx, int seqrecty);
+ return ibuf;
+}
-static void do_effect_seq_recursively(Scene *scene, Sequence *seq, TStripElem *se, int cfra, int render_size, int seqrectx, int seqrecty)
+static ImBuf * seq_render_strip(Main *bmain, Scene *scene, Sequence * seq, float cfra,
+ int render_size,
+ int seqrectx, int seqrecty)
{
- float fac, facf;
- struct SeqEffectHandle sh = get_sequence_effect(seq);
- int early_out;
- FCurve *fcu= NULL;
+ char name[FILE_MAXDIR+FILE_MAXFILE];
+ int use_preprocess = input_have_to_preprocess(
+ scene, seq, cfra, seqrectx, seqrecty);
+ ImBuf * ibuf = seq_stripelem_cache_get(
+ seq, seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF);
+ float nr = give_stripelem_index(seq, cfra);
- se->se1 = 0;
- se->se2 = 0;
- se->se3 = 0;
+ /* currently, we cache preprocessed images */
+ if (ibuf) {
+ use_preprocess = FALSE;
+ }
- if ((seq->flag & SEQ_USE_EFFECT_DEFAULT_FADE) != 0) {
- sh.get_default_fac(seq, cfra, &fac, &facf);
- if( scene->r.mode & R_FIELDS ); else facf= fac;
- } else {
- fcu = id_data_find_fcurve(&scene->id, seq, &RNA_Sequence,
- "effect_fader", 0);
- if (fcu) {
- fac = facf = evaluate_fcurve(fcu, cfra);
- if( scene->r.mode & R_FIELDS ) {
- facf = evaluate_fcurve(fcu, cfra + 0.5);
- }
- } else {
- fac = facf = seq->effect_fader;
+ if(seq->type == SEQ_META) {
+ ImBuf * meta_ibuf = 0;
+
+ if (ibuf == 0) {
+ ibuf = seq_proxy_fetch(scene, seq, cfra, render_size);
}
- }
- early_out = sh.early_out(seq, fac, facf);
- switch (early_out) {
- case -1:
- /* no input needed */
- break;
- case 0:
- se->se1 = do_build_seq_recursively(scene, seq->seq1, cfra, render_size, seqrectx, seqrecty);
- se->se2 = do_build_seq_recursively(scene, seq->seq2, cfra, render_size, seqrectx, seqrecty);
- if (seq->seq3) {
- se->se3 = do_build_seq_recursively(scene, seq->seq3, cfra, render_size, seqrectx, seqrecty);
+ if(!ibuf && seq->seqbase.first) {
+ meta_ibuf = seq_render_strip_stack(
+ bmain, scene,
+ &seq->seqbase, seq->start + nr, 0,
+ render_size, seqrectx, seqrecty);
}
- break;
- case 1:
- se->se1 = do_build_seq_recursively(scene, seq->seq1, cfra, render_size, seqrectx, seqrecty);
- break;
- case 2:
- se->se2 = do_build_seq_recursively(scene, seq->seq2, cfra, render_size, seqrectx, seqrecty);
- break;
- }
+ if(!ibuf && meta_ibuf) {
+ ibuf = meta_ibuf;
+ if(ibuf && use_preprocess) {
+ struct ImBuf * i = IMB_dupImBuf(ibuf);
- do_build_seq_ibuf(scene, seq, se, cfra, FALSE, render_size, seqrectx, seqrecty);
+ IMB_freeImBuf(ibuf);
- /* children are not needed anymore ... */
+ ibuf = i;
+ }
+ }
+ } else if(seq->type == SEQ_SPEED) {
+ ImBuf * child_ibuf = 0;
- if (se->se1 && se->se1->ibuf) {
- IMB_cache_limiter_unref(se->se1->ibuf);
- }
- if (se->se2 && se->se2->ibuf) {
- IMB_cache_limiter_unref(se->se2->ibuf);
- }
- if (se->se3 && se->se3->ibuf) {
- IMB_cache_limiter_unref(se->se3->ibuf);
- }
- check_limiter_refcount("do_effect_seq_recursively", se);
-}
+ if (ibuf == 0) {
+ ibuf = seq_proxy_fetch(scene, seq, cfra, render_size);
+ }
-static TStripElem* do_build_seq_recursively_impl(Scene *scene, Sequence * seq, int cfra, int render_size, int seqrectx, int seqrecty)
-{
- TStripElem *se;
+ if (ibuf == 0) {
+ float f_cfra;
+ SpeedControlVars * s
+ = (SpeedControlVars *)seq->effectdata;
- se = give_tstripelem(seq, cfra);
+ sequence_effect_speed_rebuild_map(scene, seq, 0);
- if(se) {
- if (seq->type & SEQ_EFFECT) {
- do_effect_seq_recursively(scene, seq, se, cfra, render_size, seqrectx, seqrecty);
- } else {
- do_build_seq_ibuf(scene, seq, se, cfra, FALSE, render_size, seqrectx, seqrecty);
+ /* weeek! */
+ f_cfra = seq->start + s->frameMap[(int) nr];
+
+ child_ibuf = seq_render_strip(bmain, scene, seq->seq1, f_cfra,
+ render_size,
+ seqrectx, seqrecty);
}
- }
- return se;
-}
-/* FIXME:
-
-If cfra was float throughout blender (especially in the render
-pipeline) one could even _render_ with subframe precision
-instead of faking using the blend code below...
+ if (!ibuf && child_ibuf) {
+ ibuf = child_ibuf;
+ if(ibuf && use_preprocess) {
+ struct ImBuf * i = IMB_dupImBuf(ibuf);
-*/
+ IMB_freeImBuf(ibuf);
-static TStripElem* do_handle_speed_effect(Scene *scene, Sequence * seq, int cfra, int render_size, int seqrectx, int seqrecty)
-{
- SpeedControlVars * s = (SpeedControlVars *)seq->effectdata;
- int nr = cfra - seq->start;
- float f_cfra;
- int cfra_left;
- int cfra_right;
- TStripElem * se = 0;
- TStripElem * se1 = 0;
- TStripElem * se2 = 0;
-
- sequence_effect_speed_rebuild_map(scene, seq, 0);
-
- f_cfra = seq->start + s->frameMap[nr];
-
- cfra_left = (int) floor(f_cfra);
- cfra_right = (int) ceil(f_cfra);
+ ibuf = i;
+ }
+ }
+ } else if(seq->type & SEQ_EFFECT) {
+ /* should the effect be recalculated? */
+
+ if (ibuf == 0) {
+ ibuf = seq_proxy_fetch(scene, seq, cfra, render_size);
+ }
- se = give_tstripelem(seq, cfra);
+ if(ibuf == 0) {
+ ibuf = seq_render_effect_strip_impl(
+ bmain, scene, cfra, seq, render_size,
+ seqrectx, seqrecty);
+ }
+ } else if(seq->type == SEQ_IMAGE) {
+ StripElem * s_elem = give_stripelem(seq, cfra);
- if (!se) {
- return se;
- }
+ if(ibuf == 0 && s_elem) {
+ BLI_join_dirfile(name, seq->strip->dir, s_elem->name);
+ BLI_path_abs(name, G.sce);
- if (cfra_left == cfra_right ||
- (s->flags & SEQ_SPEED_BLEND) == 0) {
- test_and_auto_discard_ibuf(se, seqrectx, seqrecty);
+ ibuf = seq_proxy_fetch(scene, seq, cfra, render_size);
+ }
- if (se->ibuf == NULL) {
- se1 = do_build_seq_recursively(scene, seq->seq1, cfra_left, render_size, seqrectx, seqrecty);
+ if (ibuf == 0) {
+ ibuf = copy_from_ibuf_still(seq,nr,seqrectx,seqrecty);
+ }
- if((se1 && se1->ibuf && se1->ibuf->rect_float))
- se->ibuf= IMB_allocImBuf((short)seqrectx, (short)seqrecty, 32, IB_rectfloat, 0);
- else
- se->ibuf= IMB_allocImBuf((short)seqrectx, (short)seqrecty, 32, IB_rect, 0);
+ if (ibuf == 0 && s_elem &&
+ (ibuf = IMB_loadiffname(name, IB_rect))) {
+ /* we don't need both (speed reasons)! */
+ if (ibuf->rect_float && ibuf->rect)
+ imb_freerectImBuf(ibuf);
- if (se1 == 0 || se1->ibuf == 0) {
- make_black_ibuf(se->ibuf);
- } else {
- if (se->ibuf != se1->ibuf) {
- if (se->ibuf) {
- IMB_freeImBuf(se->ibuf);
- }
+ /* all sequencer color is done in SRGB space, linear gives odd crossfades */
+ if(ibuf->profile == IB_PROFILE_LINEAR_RGB)
+ IMB_convert_profile(ibuf, IB_PROFILE_NONE);
- se->ibuf = se1->ibuf;
- IMB_refImBuf(se->ibuf);
- }
- }
+ copy_to_ibuf_still(seq, nr, ibuf);
}
- } else {
- struct SeqEffectHandle sh;
-
- if(se->ibuf) {
- if(se->ibuf->x < seqrectx || se->ibuf->y < seqrecty
- || !(se->ibuf->rect || se->ibuf->rect_float)) {
- IMB_freeImBuf(se->ibuf);
- se->ibuf= 0;
- }
+ } else if(seq->type == SEQ_MOVIE) {
+ if(ibuf == 0) {
+ ibuf = seq_proxy_fetch(scene, seq, cfra, render_size);
+
+ }
+
+ if (ibuf == 0) {
+ ibuf = copy_from_ibuf_still(seq, nr,seqrectx,seqrecty);
}
- if (se->ibuf == NULL) {
- se1 = do_build_seq_recursively(scene, seq->seq1, cfra_left, render_size, seqrectx, seqrecty);
- se2 = do_build_seq_recursively(scene, seq->seq1, cfra_right, render_size, seqrectx, seqrecty);
+ if (ibuf == 0) {
+ if(seq->anim==0) {
+ BLI_join_dirfile(name,
+ seq->strip->dir,
+ seq->strip->stripdata->name);
+ BLI_path_abs(name, G.sce);
+
+ seq->anim = openanim(
+ name, IB_rect |
+ ((seq->flag & SEQ_FILTERY)
+ ? IB_animdeinterlace : 0));
+ }
+ if(seq->anim) {
+ IMB_anim_set_preseek(seq->anim,
+ seq->anim_preseek);
+ ibuf = IMB_anim_absolute(seq->anim,
+ nr
+ + seq->anim_startofs);
+ /* we don't need both (speed reasons)! */
+ if (ibuf && ibuf->rect_float
+ && ibuf->rect) {
+ imb_freerectImBuf(ibuf);
+ }
- if((se1 && se1->ibuf && se1->ibuf->rect_float))
- se->ibuf= IMB_allocImBuf((short)seqrectx, (short)seqrecty, 32, IB_rectfloat, 0);
- else
- se->ibuf= IMB_allocImBuf((short)seqrectx, (short)seqrecty, 32, IB_rect, 0);
-
- if (!se1 || !se2) {
- make_black_ibuf(se->ibuf);
- } else {
- sh = get_sequence_effect(seq);
-
- sh.execute(scene, seq, cfra,
- f_cfra - (float) cfra_left,
- f_cfra - (float) cfra_left,
- se->ibuf->x, se->ibuf->y,
- render_size,
- se1->ibuf, se2->ibuf, 0, se->ibuf);
}
+ copy_to_ibuf_still(seq, nr, ibuf);
}
+
+ } else if(seq->type == SEQ_SCENE) { // scene can be NULL after deletions
+ if (ibuf == 0) {
+ ibuf = seq_proxy_fetch(scene, seq, cfra, render_size);
+ }
+ if (ibuf == 0) {
+ ibuf = copy_from_ibuf_still(seq, nr,seqrectx,seqrecty);
+ }
+
+ if (ibuf == 0) {
+ ibuf = seq_render_scene_strip_impl(bmain, scene, seq, nr,
+ seqrectx, seqrecty);
+ copy_to_ibuf_still(seq, nr, ibuf);
+ }
}
- /* caller expects this to be referenced, so do it! */
- if (se->ibuf) {
- IMB_cache_limiter_insert(se->ibuf);
- IMB_cache_limiter_ref(se->ibuf);
- IMB_cache_limiter_touch(se->ibuf);
+ if (!ibuf) {
+ ibuf = IMB_allocImBuf(
+ (short)seqrectx, (short)seqrecty, 32, IB_rect, 0);
}
- /* children are no longer needed */
- if (se1 && se1->ibuf)
- IMB_cache_limiter_unref(se1->ibuf);
- if (se2 && se2->ibuf)
- IMB_cache_limiter_unref(se2->ibuf);
-
- check_limiter_refcount("do_handle_speed_effect", se);
-
- return se;
-}
-
-/*
- * build all ibufs recursively
- *
- * if successfull, the returned TStripElem contains the (referenced!) imbuf
- * that means: you _must_ call
- *
- * IMB_cache_limiter_unref(rval);
- *
- * if rval != 0
- *
- */
-
-static TStripElem* do_build_seq_recursively(Scene *scene, Sequence * seq, int cfra, int render_size, int seqrectx, int seqrecty)
-{
- TStripElem *se;
+ if (ibuf->x != seqrectx || ibuf->y != seqrecty) {
+ use_preprocess = TRUE;
+ }
- /* BAD HACK! Seperate handling for speed effects needed, since
- a) you can't just fetch a different cfra within an effect strip
- b) we have to blend two frames, and CFRA is not float...
- */
- if (seq->type == SEQ_SPEED) {
- se = do_handle_speed_effect(scene, seq, cfra, render_size, seqrectx, seqrecty);
- } else {
- se = do_build_seq_recursively_impl(scene, seq, cfra, render_size, seqrectx, seqrecty);
+ if (use_preprocess) {
+ ibuf = input_preprocess(scene, seq, cfra, seqrectx,
+ seqrecty, ibuf);
}
- check_limiter_refcount("do_build_seq_recursively", se);
+ seq_stripelem_cache_put(
+ seq, seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF, ibuf);
- return se;
+ return ibuf;
}
+/* **********************************************************************
+ strip stack rendering functions
+ ********************************************************************** */
+
static int seq_must_swap_input_in_blend_mode(Sequence * seq)
{
int swap_input = FALSE;
@@ -2582,28 +2128,22 @@ static int seq_get_early_out_for_blend_mode(Sequence * seq)
return early_out;
}
-static TStripElem* do_build_seq_array_recursively(
- Scene *scene, ListBase *seqbasep, int cfra, int chanshown,
+static ImBuf* seq_render_strip_stack(
+ Main *bmain, Scene *scene, ListBase *seqbasep, float cfra, int chanshown,
int render_size, int seqrectx, int seqrecty)
{
Sequence* seq_arr[MAXSEQ+1];
int count;
int i;
- TStripElem* se = 0;
+ ImBuf* out = 0;
count = get_shown_sequences(seqbasep, cfra, chanshown,
- (Sequence **)&seq_arr);
+ (Sequence **)&seq_arr);
if (!count) {
return 0;
}
- se = give_tstripelem(seq_arr[count - 1], cfra);
-
- if (!se) {
- return 0;
- }
-
#if 0 /* commentind since this breaks keyframing, since it resets the value on draw */
if(scene->r.cfra != cfra) {
// XXX for prefetch and overlay offset!..., very bad!!!
@@ -2612,25 +2152,24 @@ static TStripElem* do_build_seq_array_recursively(
}
#endif
- test_and_auto_discard_ibuf(se, seqrectx, seqrecty);
+ out = seq_stripelem_cache_get(
+ seq_arr[count - 1],
+ seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF_COMP);
- if (se->ibuf_comp != 0) {
- IMB_cache_limiter_insert(se->ibuf_comp);
- IMB_cache_limiter_ref(se->ibuf_comp);
- IMB_cache_limiter_touch(se->ibuf_comp);
- return se;
+ if (out) {
+ return out;
}
-
if(count == 1) {
- se = do_build_seq_recursively(scene, seq_arr[0],
- cfra, render_size,
- seqrectx, seqrecty);
- if (se->ibuf) {
- se->ibuf_comp = se->ibuf;
- IMB_refImBuf(se->ibuf_comp);
- }
- return se;
+ out = seq_render_strip(bmain, scene, seq_arr[0],
+ cfra, render_size,
+ seqrectx, seqrecty);
+ seq_stripelem_cache_put(
+ seq_arr[0],
+ seqrectx, seqrecty, cfra,
+ SEQ_STRIPELEM_IBUF_COMP, out);
+
+ return out;
}
@@ -2638,29 +2177,17 @@ static TStripElem* do_build_seq_array_recursively(
int early_out;
Sequence * seq = seq_arr[i];
- se = give_tstripelem(seq, cfra);
-
- test_and_auto_discard_ibuf(se, seqrectx, seqrecty);
+ out = seq_stripelem_cache_get(
+ seq,
+ seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF_COMP);
- if (se->ibuf_comp != 0) {
+ if (out) {
break;
}
if (seq->blend_mode == SEQ_BLEND_REPLACE) {
- do_build_seq_recursively(
- scene, seq, cfra, render_size,
- seqrectx, seqrecty);
-
- if (se->ibuf) {
- se->ibuf_comp = se->ibuf;
- IMB_refImBuf(se->ibuf);
- } else {
- se->ibuf_comp = IMB_allocImBuf(
- (short)seqrectx, (short)seqrecty,
- 32, IB_rect, 0);
- IMB_cache_limiter_insert(se->ibuf_comp);
- IMB_cache_limiter_ref(se->ibuf_comp);
- IMB_cache_limiter_touch(se->ibuf_comp);
- }
+ out = seq_render_strip(bmain, scene, seq, cfra,
+ render_size,
+ seqrectx, seqrecty);
break;
}
@@ -2669,154 +2196,87 @@ static TStripElem* do_build_seq_array_recursively(
switch (early_out) {
case -1:
case 2:
- do_build_seq_recursively(
- scene, seq, cfra, render_size,
- seqrectx, seqrecty);
-
- if (se->ibuf) {
- se->ibuf_comp = se->ibuf;
- IMB_refImBuf(se->ibuf_comp);
- } else {
- se->ibuf_comp = IMB_allocImBuf(
- (short)seqrectx, (short)seqrecty,
- 32, IB_rect, 0);
- IMB_cache_limiter_insert(se->ibuf_comp);
- IMB_cache_limiter_ref(se->ibuf_comp);
- IMB_cache_limiter_touch(se->ibuf_comp);
- }
+ out = seq_render_strip(bmain, scene, seq, cfra,
+ render_size,
+ seqrectx, seqrecty);
break;
case 1:
if (i == 0) {
- se->ibuf_comp = IMB_allocImBuf(
+ out = IMB_allocImBuf(
(short)seqrectx, (short)seqrecty,
32, IB_rect, 0);
- IMB_cache_limiter_insert(se->ibuf_comp);
- IMB_cache_limiter_ref(se->ibuf_comp);
- IMB_cache_limiter_touch(se->ibuf_comp);
}
break;
case 0:
- do_build_seq_recursively(
- scene, seq, cfra, render_size,
- seqrectx, seqrecty);
-
- if (!se->ibuf) {
- se->ibuf = IMB_allocImBuf(
- (short)seqrectx, (short)seqrecty,
- 32, IB_rect, 0);
- IMB_cache_limiter_insert(se->ibuf);
- IMB_cache_limiter_ref(se->ibuf);
- IMB_cache_limiter_touch(se->ibuf);
- }
if (i == 0) {
- se->ibuf_comp = se->ibuf;
- IMB_refImBuf(se->ibuf_comp);
+ out = seq_render_strip(bmain, scene, seq, cfra,
+ render_size,
+ seqrectx, seqrecty);
}
+
break;
}
-
- if (se->ibuf_comp) {
+ if (out) {
break;
}
}
+ seq_stripelem_cache_put(
+ seq_arr[i], seqrectx, seqrecty, cfra,
+ SEQ_STRIPELEM_IBUF_COMP, out);
+
+
i++;
for (; i < count; i++) {
Sequence * seq = seq_arr[i];
- struct SeqEffectHandle sh = get_sequence_blend(seq);
- TStripElem* se1 = give_tstripelem(seq_arr[i-1], cfra);
- TStripElem* se2 = give_tstripelem(seq_arr[i], cfra);
-
- float facf = seq->blend_opacity / 100.0;
- int swap_input = seq_must_swap_input_in_blend_mode(seq);
- int early_out = seq_get_early_out_for_blend_mode(seq);
- switch (early_out) {
- case 0: {
- int x= se2->ibuf->x;
- int y= se2->ibuf->y;
-
- if(se1->ibuf_comp == NULL)
- continue;
-
- if (se1->ibuf_comp->rect_float ||
- se2->ibuf->rect_float) {
- se2->ibuf_comp = IMB_allocImBuf(
- (short)seqrectx, (short)seqrecty,
- 32, IB_rectfloat, 0);
- } else {
- se2->ibuf_comp = IMB_allocImBuf(
- (short)seqrectx, (short)seqrecty,
- 32, IB_rect, 0);
- }
+ if (seq_get_early_out_for_blend_mode(seq) == 0) {
+ struct SeqEffectHandle sh = get_sequence_blend(seq);
+ ImBuf * ibuf1 = out;
+ ImBuf * ibuf2 = seq_render_strip(bmain, scene, seq, cfra,
+ render_size,
+ seqrectx, seqrecty);
+ float facf = seq->blend_opacity / 100.0;
+ int swap_input
+ = seq_must_swap_input_in_blend_mode(seq);
- if (!se1->ibuf_comp->rect_float &&
- se2->ibuf_comp->rect_float) {
- IMB_float_from_rect_simple(se1->ibuf_comp);
- }
- if (!se2->ibuf->rect_float &&
- se2->ibuf_comp->rect_float) {
- IMB_float_from_rect_simple(se2->ibuf);
- }
+ int x= seqrectx;
+ int y= seqrecty;
- if (!se1->ibuf_comp->rect &&
- !se2->ibuf_comp->rect_float) {
- IMB_rect_from_float(se1->ibuf_comp);
- }
- if (!se2->ibuf->rect &&
- !se2->ibuf_comp->rect_float) {
- IMB_rect_from_float(se2->ibuf);
- }
-
if (swap_input) {
- sh.execute(scene, seq, cfra,
- facf, facf, x, y, render_size,
- se2->ibuf, se1->ibuf_comp, 0,
- se2->ibuf_comp);
+ out = sh.execute(bmain, scene, seq, cfra,
+ facf, facf, x, y, render_size,
+ ibuf2, ibuf1, 0);
} else {
- sh.execute(scene, seq, cfra,
- facf, facf, x, y, render_size,
- se1->ibuf_comp, se2->ibuf, 0,
- se2->ibuf_comp);
+ out = sh.execute(bmain, scene, seq, cfra,
+ facf, facf, x, y, render_size,
+ ibuf1, ibuf2, 0);
}
-
- IMB_cache_limiter_insert(se2->ibuf_comp);
- IMB_cache_limiter_ref(se2->ibuf_comp);
- IMB_cache_limiter_touch(se2->ibuf_comp);
-
- IMB_cache_limiter_unref(se1->ibuf_comp);
- IMB_cache_limiter_unref(se2->ibuf);
-
- break;
+
+ IMB_freeImBuf(ibuf1);
+ IMB_freeImBuf(ibuf2);
}
- case 1: {
- se2->ibuf_comp = se1->ibuf_comp;
- if(se2->ibuf_comp)
- IMB_refImBuf(se2->ibuf_comp);
- break;
- }
- }
- se = se2;
+ seq_stripelem_cache_put(
+ seq_arr[i], seqrectx, seqrecty, cfra,
+ SEQ_STRIPELEM_IBUF_COMP, out);
}
- return se;
+ return out;
}
/*
* returned ImBuf is refed!
- * you have to unref after usage!
+ * you have to free after usage!
*/
-static ImBuf *give_ibuf_seq_impl(Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size)
+ImBuf *give_ibuf_seq(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size)
{
Editing *ed= seq_give_editing(scene, FALSE);
int count;
ListBase *seqbasep;
- TStripElem *se;
-
if(ed==NULL) return NULL;
@@ -2828,64 +2288,19 @@ static ImBuf *give_ibuf_seq_impl(Scene *scene, int rectx, int recty, int cfra, i
seqbasep= ed->seqbasep;
}
- se = do_build_seq_array_recursively(scene, seqbasep, cfra, chanshown, render_size, rectx, recty);
-
- if(!se) {
- return 0;
- }
-
- check_limiter_refcount_comp("give_ibuf_seq_impl", se);
-
- return se->ibuf_comp;
+ return seq_render_strip_stack(
+ bmain, scene, seqbasep, cfra, chanshown, render_size, rectx, recty);
}
-ImBuf *give_ibuf_seqbase(struct Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size, ListBase *seqbasep)
+ImBuf *give_ibuf_seqbase(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size, ListBase *seqbasep)
{
- TStripElem *se;
-
- se = do_build_seq_array_recursively(scene, seqbasep, cfra, chanshown, render_size, rectx, recty);
-
- if(!se) {
- return 0;
- }
-
- check_limiter_refcount_comp("give_ibuf_seqbase", se);
-
- if (se->ibuf_comp) {
- IMB_cache_limiter_unref(se->ibuf_comp);
- }
-
- return se->ibuf_comp;
+ return seq_render_strip_stack(bmain, scene, seqbasep, cfra, chanshown, render_size, rectx, recty);
}
-ImBuf *give_ibuf_seq_direct(Scene *scene, int rectx, int recty, int cfra, int render_size, Sequence *seq)
+ImBuf *give_ibuf_seq_direct(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int render_size, Sequence *seq)
{
- TStripElem* se;
-
- se = do_build_seq_recursively(scene, seq, cfra, render_size, rectx, recty);
-
- if(!se) {
- return 0;
- }
-
- check_limiter_refcount("give_ibuf_seq_direct", se);
-
- if (se->ibuf) {
- IMB_cache_limiter_unref(se->ibuf);
- }
-
- return se->ibuf;
-}
-
-ImBuf *give_ibuf_seq(Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size)
-{
- ImBuf* i = give_ibuf_seq_impl(scene, rectx, recty, cfra, chanshown, render_size);
-
- if (i) {
- IMB_cache_limiter_unref(i);
- }
- return i;
+ return seq_render_strip(bmain, scene, seq, cfra, render_size, rectx, recty);
}
#if 0
@@ -3151,13 +2566,13 @@ static void seq_wait_for_prefetch_ready()
}
#endif
-ImBuf *give_ibuf_seq_threaded(Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size)
+ImBuf *give_ibuf_seq_threaded(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size)
{
PrefetchQueueElem *e = NULL;
int found_something = FALSE;
if (seq_thread_shutdown) {
- return give_ibuf_seq(scene, rectx, recty, cfra, chanshown, render_size);
+ return give_ibuf_seq(bmain, scene, rectx, recty, cfra, chanshown, render_size);
}
while (!e) {
@@ -3234,20 +2649,6 @@ ImBuf *give_ibuf_seq_threaded(Scene *scene, int rectx, int recty, int cfra, int
/* Functions to free imbuf and anim data on changes */
-static void free_imbuf_strip_elem(TStripElem *se)
-{
- if(se->ibuf) {
- IMB_freeImBuf(se->ibuf);
- }
- if(se->ibuf_comp) {
- IMB_freeImBuf(se->ibuf_comp);
- }
- se->ibuf_comp = 0;
- se->ibuf= 0;
- se->ok= STRIPELEM_OK;
- se->se1= se->se2= se->se3= 0;
-}
-
static void free_anim_seq(Sequence *seq)
{
if(seq->anim) {
@@ -3256,63 +2657,10 @@ static void free_anim_seq(Sequence *seq)
}
}
-#if 0
-static void free_imbuf_seq_except(Scene *scene, int cfra)
+void free_imbuf_seq(Scene *scene, ListBase * seqbase, int check_mem_usage,
+ int keep_file_handles)
{
- Editing *ed= seq_give_editing(scene, FALSE);
Sequence *seq;
- TStripElem *se;
- int a;
-
- if(ed==NULL) return;
-
- SEQ_BEGIN(ed, seq) {
- if(seq->strip) {
- TStripElem * curelem = give_tstripelem(seq, cfra);
-
- for(a = 0, se = seq->strip->tstripdata;
- a < seq->strip->len && se; a++, se++) {
- if(se != curelem) {
- free_imbuf_strip_elem(se);
- }
- }
- for(a = 0, se = seq->strip->tstripdata_startstill;
- a < seq->strip->startstill && se; a++, se++) {
- if(se != curelem) {
- free_imbuf_strip_elem(se);
- }
- }
- for(a = 0, se = seq->strip->tstripdata_endstill;
- a < seq->strip->endstill && se; a++, se++) {
- if(se != curelem) {
- free_imbuf_strip_elem(se);
- }
- }
- if(seq->strip->ibuf_startstill) {
- IMB_freeImBuf(seq->strip->ibuf_startstill);
- seq->strip->ibuf_startstill = 0;
- }
-
- if(seq->strip->ibuf_endstill) {
- IMB_freeImBuf(seq->strip->ibuf_endstill);
- seq->strip->ibuf_endstill = 0;
- }
-
- if(seq->type==SEQ_MOVIE)
- if(seq->startdisp > cfra || seq->enddisp < cfra)
- free_anim_seq(seq);
- free_proxy_seq(seq);
- }
- }
- SEQ_END
-}
-#endif
-
-void free_imbuf_seq(Scene *scene, ListBase * seqbase, int check_mem_usage)
-{
- Sequence *seq;
- TStripElem *se;
- int a;
if (check_mem_usage) {
/* Let the cache limitor take care of this (schlaile) */
@@ -3338,39 +2686,19 @@ void free_imbuf_seq(Scene *scene, ListBase * seqbase, int check_mem_usage)
}
}
+ seq_stripelem_cache_cleanup();
for(seq= seqbase->first; seq; seq= seq->next) {
if(seq->strip) {
- for(a = 0, se = seq->strip->tstripdata;
- a < seq->strip->len && se; a++, se++) {
- free_imbuf_strip_elem(se);
- }
- for(a = 0, se = seq->strip->tstripdata_startstill;
- a < seq->strip->startstill && se; a++, se++) {
- free_imbuf_strip_elem(se);
- }
- for(a = 0, se = seq->strip->tstripdata_endstill;
- a < seq->strip->endstill && se; a++, se++) {
- free_imbuf_strip_elem(se);
- }
- if(seq->strip->ibuf_startstill) {
- IMB_freeImBuf(seq->strip->ibuf_startstill);
- seq->strip->ibuf_startstill = 0;
- }
-
- if(seq->strip->ibuf_endstill) {
- IMB_freeImBuf(seq->strip->ibuf_endstill);
- seq->strip->ibuf_endstill = 0;
- }
-
- if(seq->type==SEQ_MOVIE)
+ if(seq->type==SEQ_MOVIE && !keep_file_handles)
free_anim_seq(seq);
if(seq->type==SEQ_SPEED) {
sequence_effect_speed_rebuild_map(scene, seq, 1);
}
}
if(seq->type==SEQ_META) {
- free_imbuf_seq(scene, &seq->seqbase, FALSE);
+ free_imbuf_seq(scene, &seq->seqbase, FALSE,
+ keep_file_handles);
}
if(seq->type==SEQ_SCENE) {
/* FIXME: recurs downwards,
@@ -3383,8 +2711,7 @@ void free_imbuf_seq(Scene *scene, ListBase * seqbase, int check_mem_usage)
static int update_changed_seq_recurs(Scene *scene, Sequence *seq, Sequence *changed_seq, int len_change, int ibuf_change)
{
Sequence *subseq;
- int a, free_imbuf = 0;
- TStripElem *se;
+ int free_imbuf = 0;
/* recurs downwards to see if this seq depends on the changed seq */
@@ -3410,12 +2737,6 @@ static int update_changed_seq_recurs(Scene *scene, Sequence *seq, Sequence *chan
if(free_imbuf) {
if(ibuf_change) {
- se= seq->strip->tstripdata;
- if (se) {
- for(a=0; a<seq->len; a++, se++)
- free_imbuf_strip_elem(se);
- }
-
if(seq->type == SEQ_MOVIE)
free_anim_seq(seq);
if(seq->type == SEQ_SPEED) {
@@ -3441,39 +2762,6 @@ void update_changed_seq_and_deps(Scene *scene, Sequence *changed_seq, int len_ch
update_changed_seq_recurs(scene, seq, changed_seq, len_change, ibuf_change);
}
-#if 0 // XXX from 2.4x, needs updating
-void free_imbuf_seq()
-{
- Scene * sce = G.main->scene.first;
- while(sce) {
- free_imbuf_seq_editing(sce->ed);
- sce= sce->id.next;
- }
-}
-#endif
-
-#if 0 // XXX old animation system
-static void free_imbuf_seq_with_ipo(Scene *scene, struct Ipo *ipo)
-{
- /* force update of all sequences with this ipo, on ipo changes */
- Editing *ed= seq_give_editing(scene, FALSE);
- Sequence *seq;
-
- if(ed==NULL) return;
-
- SEQ_BEGIN(ed, seq) {
- if(seq->ipo == ipo) {
- update_changed_seq_and_deps(scene, seq, 0, 1);
- if(seq->type == SEQ_SPEED) {
- sequence_effect_speed_rebuild_map(seq, 1);
- }
- free_proxy_seq(seq);
- }
- }
- SEQ_END
-}
-#endif
-
/* seq funcs's for transforming internally
notice the difference between start/end and left/right.
@@ -4252,12 +3540,6 @@ static Sequence *seq_dupli(struct Scene *scene, Sequence *seq, int dupe_flag)
// XXX: add F-Curve duplication stuff?
- seqn->strip->tstripdata = 0;
- seqn->strip->tstripdata_startstill = 0;
- seqn->strip->tstripdata_endstill = 0;
- seqn->strip->ibuf_startstill = 0;
- seqn->strip->ibuf_endstill = 0;
-
if (seq->strip->crop) {
seqn->strip->crop = MEM_dupallocN(seq->strip->crop);
}
diff --git a/source/blender/blenkernel/intern/shrinkwrap.c b/source/blender/blenkernel/intern/shrinkwrap.c
index b9c033f1809..454a82c2ad3 100644
--- a/source/blender/blenkernel/intern/shrinkwrap.c
+++ b/source/blender/blenkernel/intern/shrinkwrap.c
@@ -54,7 +54,6 @@
#include "BLI_math.h"
#include "BLI_editVert.h"
-#include "MEM_guardedalloc.h"
/* Util macros */
diff --git a/source/blender/blenkernel/intern/sketch.c b/source/blender/blenkernel/intern/sketch.c
index 33871f78864..7e39cdd1196 100644
--- a/source/blender/blenkernel/intern/sketch.c
+++ b/source/blender/blenkernel/intern/sketch.c
@@ -72,8 +72,7 @@ void sk_initPoint(SK_Point *pt, SK_DrawData *dd, float *no)
{
if (no)
{
- VECCOPY(pt->no, no);
- normalize_v3(pt->no);
+ normalize_v3_v3(pt->no, no);
}
else
{
diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c
index 5fa9f3897c2..c6993e933c2 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -37,8 +37,8 @@
#include <float.h>
#include <math.h>
-#include "stdio.h"
-#include "string.h" /* memset */
+#include <stdio.h>
+#include <string.h> /* memset */
#include "BLI_linklist.h"
#include "BLI_rand.h"
@@ -220,7 +220,7 @@ int smokeModifier_init (SmokeModifierData *smd, Object *ob, Scene *scene, Derive
// printf("res[0]: %d, res[1]: %d, res[2]: %d\n", smd->domain->res[0], smd->domain->res[1], smd->domain->res[2]);
// dt max is 0.1
- smd->domain->fluid = smoke_init(smd->domain->res, smd->domain->p0, 0.1);
+ smd->domain->fluid = smoke_init(smd->domain->res, smd->domain->p0);
smd->time = scene->r.cfra;
if(smd->domain->flags & MOD_SMOKE_HIGHRES)
@@ -237,7 +237,7 @@ int smokeModifier_init (SmokeModifierData *smd, Object *ob, Scene *scene, Derive
if(!smd->domain->shadow)
smd->domain->shadow = MEM_callocN(sizeof(float) * smd->domain->res[0] * smd->domain->res[1] * smd->domain->res[2], "SmokeDomainShadow");
- smoke_initBlenderRNA(smd->domain->fluid, &(smd->domain->alpha), &(smd->domain->beta));
+ smoke_initBlenderRNA(smd->domain->fluid, &(smd->domain->alpha), &(smd->domain->beta), &(smd->domain->time_scale), &(smd->domain->vorticity), &(smd->domain->border_collisions));
if(smd->domain->wt)
{
@@ -296,7 +296,7 @@ int smokeModifier_init (SmokeModifierData *smd, Object *ob, Scene *scene, Derive
return 1;
}
- return 1;
+ return 2;
}
static void fill_scs_points(Object *ob, DerivedMesh *dm, SmokeCollSettings *scs)
@@ -713,12 +713,16 @@ void smokeModifier_createType(struct SmokeModifierData *smd)
smd->domain->omega = 1.0;
smd->domain->alpha = -0.001;
smd->domain->beta = 0.1;
- smd->domain->flags = MOD_SMOKE_DISSOLVE_LOG;
+ smd->domain->time_scale = 1.0;
+ smd->domain->vorticity = 2.0;
+ smd->domain->border_collisions = 1; // vertically non-colliding
+ smd->domain->flags = MOD_SMOKE_DISSOLVE_LOG | MOD_SMOKE_HIGH_SMOOTH;
smd->domain->strength = 2.0;
smd->domain->noise = MOD_SMOKE_NOISEWAVE;
smd->domain->diss_speed = 5;
- // init view3d buffer
- smd->domain->viewsettings = 0;
+ // init 3dview buffer
+
+ smd->domain->viewsettings = MOD_SMOKE_VIEW_SHOWBIG;
smd->domain->effector_weights = BKE_add_effector_weights(NULL);
}
else if(smd->type & MOD_SMOKE_TYPE_FLOW)
@@ -733,6 +737,8 @@ void smokeModifier_createType(struct SmokeModifierData *smd)
/* set some standard values */
smd->flow->density = 1.0;
smd->flow->temp = 1.0;
+ smd->flow->flags = MOD_SMOKE_FLOW_ABSOLUTE;
+ smd->flow->vel_multi = 1.0;
smd->flow->psys = NULL;
@@ -862,7 +868,7 @@ static void smoke_calc_domain(Scene *scene, Object *ob, SmokeModifierData *smd)
{
ParticleSystem *psys = sfs->psys;
ParticleSettings *part=psys->part;
- ParticleData *pa = NULL;
+ ParticleData *pa = NULL;
int p = 0;
float *density = smoke_get_density(sds->fluid);
float *bigdensity = smoke_turbulence_get_density(sds->wt);
@@ -871,7 +877,27 @@ static void smoke_calc_domain(Scene *scene, Object *ob, SmokeModifierData *smd)
float *velocity_y = smoke_get_velocity_y(sds->fluid);
float *velocity_z = smoke_get_velocity_z(sds->fluid);
unsigned char *obstacle = smoke_get_obstacle(sds->fluid);
- int bigres[3];
+ int bigres[3];
+ short absolute_flow = (sfs->flags & MOD_SMOKE_FLOW_ABSOLUTE);
+ short high_emission_smoothing = bigdensity ? (smd->domain->flags & MOD_SMOKE_HIGH_SMOOTH) : 0;
+
+ /*
+ * A temporary volume map used to store whole emissive
+ * area to be added to smoke density and interpolated
+ * for high resolution smoke.
+ */
+ float *temp_emission_map = NULL;
+
+ // initialize temp emission map
+ if(!(sfs->type & MOD_SMOKE_FLOW_TYPE_OUTFLOW))
+ {
+ int i;
+ temp_emission_map = MEM_callocN(sizeof(float) * sds->res[0]*sds->res[1]*sds->res[2], "SmokeTempEmission");
+ // set whole volume to 0.0f
+ for (i=0; i<sds->res[0]*sds->res[1]*sds->res[2]; i++) {
+ temp_emission_map[i] = 0.0f;
+ }
+ }
// mostly copied from particle code
for(p=0, pa=psys->particles; p<psys->totpart; p++, pa++)
@@ -905,33 +931,17 @@ static void smoke_calc_domain(Scene *scene, Object *ob, SmokeModifierData *smd)
// heat[index] += sfs->temp * 0.1;
// density[index] += sfs->density * 0.1;
heat[index] = sfs->temp;
- density[index] = sfs->density;
-
+
+ // Add emitter density to temp emission map
+ temp_emission_map[index] = sfs->density;
// Uses particle velocity as initial velocity for smoke
- if(smd->domain->flags & MOD_SMOKE_INITVELOCITY) {
- velocity_x[index] = pa->state.vel[0];
- velocity_y[index] = pa->state.vel[1];
- velocity_z[index] = pa->state.vel[2];
- }
-
- // obstacle[index] |= 2;
- // we need different handling for the high-res feature
- if(bigdensity)
+ if(sfs->flags & MOD_SMOKE_FLOW_INITVELOCITY && (psys->part->phystype != PART_PHYS_NO))
{
- // init all surrounding cells according to amplification, too
- int i, j, k;
-
- smoke_turbulence_get_res(smd->domain->wt, bigres);
-
- for(i = 0; i < smd->domain->amplify + 1; i++)
- for(j = 0; j < smd->domain->amplify + 1; j++)
- for(k = 0; k < smd->domain->amplify + 1; k++)
- {
- index = smoke_get_index((smd->domain->amplify + 1)* cell[0] + i, bigres[0], (smd->domain->amplify + 1)* cell[1] + j, bigres[1], (smd->domain->amplify + 1)* cell[2] + k);
- bigdensity[index] = sfs->density;
- }
- }
+ velocity_x[index] = pa->state.vel[0]*sfs->vel_multi;
+ velocity_y[index] = pa->state.vel[1]*sfs->vel_multi;
+ velocity_z[index] = pa->state.vel[2]*sfs->vel_multi;
+ }
}
else if(sfs->type & MOD_SMOKE_FLOW_TYPE_OUTFLOW) // outflow
{
@@ -954,9 +964,136 @@ static void smoke_calc_domain(Scene *scene, Object *ob, SmokeModifierData *smd)
index = smoke_get_index((smd->domain->amplify + 1)* cell[0] + i, bigres[0], (smd->domain->amplify + 1)* cell[1] + j, bigres[1], (smd->domain->amplify + 1)* cell[2] + k);
bigdensity[index] = 0.f;
}
- }
- } // particles loop
- }
+ }
+ }
+ } // particles loop
+
+
+ // apply emission values
+ if(!(sfs->type & MOD_SMOKE_FLOW_TYPE_OUTFLOW)) {
+
+ // initialize variables
+ int ii, jj, kk, x, y, z, block_size;
+ size_t index, index_big;
+
+ smoke_turbulence_get_res(smd->domain->wt, bigres);
+ block_size = smd->domain->amplify + 1; // high res block size
+
+
+ // loop through every low res cell
+ for(x = 0; x < sds->res[0]; x++)
+ for(y = 0; y < sds->res[1]; y++)
+ for(z = 0; z < sds->res[2]; z++)
+ {
+
+ // neighbour cell emission densities (for high resolution smoke smooth interpolation)
+ float c000, c001, c010, c011, c100, c101, c110, c111;
+
+ c000 = (x>0 && y>0 && z>0) ? temp_emission_map[smoke_get_index(x-1, sds->res[0], y-1, sds->res[1], z-1)] : 0;
+ c001 = (x>0 && y>0) ? temp_emission_map[smoke_get_index(x-1, sds->res[0], y-1, sds->res[1], z)] : 0;
+ c010 = (x>0 && z>0) ? temp_emission_map[smoke_get_index(x-1, sds->res[0], y, sds->res[1], z-1)] : 0;
+ c011 = (x>0) ? temp_emission_map[smoke_get_index(x-1, sds->res[0], y, sds->res[1], z)] : 0;
+
+ c100 = (y>0 && z>0) ? temp_emission_map[smoke_get_index(x, sds->res[0], y-1, sds->res[1], z-1)] : 0;
+ c101 = (y>0) ? temp_emission_map[smoke_get_index(x, sds->res[0], y-1, sds->res[1], z)] : 0;
+ c110 = (z>0) ? temp_emission_map[smoke_get_index(x, sds->res[0], y, sds->res[1], z-1)] : 0;
+ c111 = temp_emission_map[smoke_get_index(x, sds->res[0], y, sds->res[1], z)]; // this cell
+
+
+
+ // get cell index
+ index = smoke_get_index(x, sds->res[0], y, sds->res[1], z);
+
+ // add emission to low resolution density
+ if (absolute_flow) {if (temp_emission_map[index]>0) density[index] = temp_emission_map[index];}
+ else {
+ density[index] += temp_emission_map[index];
+ if (density[index]>1) density[index]=1.0f;
+ }
+
+ smoke_turbulence_get_res(smd->domain->wt, bigres);
+
+
+
+ /*
+ loop through high res blocks if high res enabled
+ */
+ if (bigdensity)
+ for(ii = 0; ii < block_size; ii++)
+ for(jj = 0; jj < block_size; jj++)
+ for(kk = 0; kk < block_size; kk++)
+ {
+
+ float fx,fy,fz, interpolated_value;
+ int shift_x, shift_y, shift_z;
+
+
+ /*
+ * Do volume interpolation if emitter smoothing
+ * is enabled
+ */
+ if (high_emission_smoothing) {
+ // convert block position to relative
+ // for interpolation smoothing
+ fx = (float)ii/block_size + 0.5f/block_size;
+ fy = (float)jj/block_size + 0.5f/block_size;
+ fz = (float)kk/block_size + 0.5f/block_size;
+
+ // calculate trilinear interpolation
+ interpolated_value = c000 * (1-fx) * (1-fy) * (1-fz) +
+ c100 * fx * (1-fy) * (1-fz) +
+ c010 * (1-fx) * fy * (1-fz) +
+ c001 * (1-fx) * (1-fy) * fz +
+ c101 * fx * (1-fy) * fz +
+ c011 * (1-fx) * fy * fz +
+ c110 * fx * fy * (1-fz) +
+ c111 * fx * fy * fz;
+
+
+ // add some contrast / sharpness
+ // depending on hi-res block size
+
+ interpolated_value = (interpolated_value-0.4f*sfs->density)*(block_size/2) + 0.4f*sfs->density;
+ if (interpolated_value<0.0f) interpolated_value = 0.0f;
+ if (interpolated_value>1.0f) interpolated_value = 1.0f;
+
+ // shift smoke block index
+ // (because pixel center is actually
+ // in halfway of the low res block)
+ shift_x = (x < 1) ? 0 : block_size/2;
+ shift_y = (y < 1) ? 0 : block_size/2;
+ shift_z = (z < 1) ? 0 : block_size/2;
+ }
+ else {
+ // without interpolation use same low resolution
+ // block value for all hi-res blocks
+ interpolated_value = c111;
+ shift_x = 0;
+ shift_y = 0;
+ shift_z = 0;
+ }
+
+ // get shifted index for current high resolution block
+ index_big = smoke_get_index(block_size * x + ii - shift_x, bigres[0], block_size * y + jj - shift_y, bigres[1], block_size * z + kk - shift_z);
+
+ // add emission data to high resolution density
+ if (absolute_flow) {if (interpolated_value > 0) bigdensity[index_big] = interpolated_value;}
+ else {
+ bigdensity[index_big] += interpolated_value;
+ if (bigdensity[index_big]>1) bigdensity[index_big]=1.0f;
+ }
+
+ } // end of hires loop
+
+ } // end of low res loop
+
+ // free temporary emission map
+ if (temp_emission_map) MEM_freeN(temp_emission_map);
+
+ } // end emission
+
+
+
}
else
{
@@ -970,7 +1107,7 @@ static void smoke_calc_domain(Scene *scene, Object *ob, SmokeModifierData *smd)
BLI_bvhtree_find_nearest(sfs->bvh->tree, pco, &nearest, sfs->bvh->nearest_callback, sfs->bvh);
}*/
- }
+ }
}
}
if(sds->fluid_group)
@@ -1188,6 +1325,7 @@ void smokeModifier_do(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedM
int startframe, endframe, framenr;
float timescale;
int cache_result = 0, cache_result_wt = 0;
+ int did_init = 0;
framenr = scene->r.cfra;
@@ -1217,7 +1355,7 @@ void smokeModifier_do(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedM
// printf("startframe: %d, framenr: %d\n", startframe, framenr);
- if(!smokeModifier_init(smd, ob, scene, dm))
+ if(!(did_init = smokeModifier_init(smd, ob, scene, dm)))
{
printf("bad smokeModifier_init\n");
return;
@@ -1272,10 +1410,20 @@ void smokeModifier_do(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedM
{
if(sds->flags & MOD_SMOKE_DISSOLVE)
smoke_dissolve(sds->fluid, sds->diss_speed, sds->flags & MOD_SMOKE_DISSOLVE_LOG);
- smoke_step(sds->fluid, smd->time);
+ smoke_step(sds->fluid, smd->time, scene->r.frs_sec / scene->r.frs_sec_base);
+ }
+ else
+ {
+ /* Smoke did not load cache and was not reset but we're on startframe */
+ /* So now reinit the smoke since it was not done yet */
+ if(did_init == 2)
+ {
+ smokeModifier_reset(smd);
+ smokeModifier_init(smd, ob, scene, dm);
+ }
}
- // create shadows before writing cache so we get nice shadows for sstartframe, too
+ // create shadows before writing cache so we get nice shadows for startframe, too
if(get_lamp(scene, light))
smoke_calc_transparency(sds->shadow, smoke_get_density(sds->fluid), sds->p0, sds->p1, sds->res, sds->dx, light, calc_voxel_transp, -7.0*sds->dx);
diff --git a/source/blender/blenkernel/intern/softbody.c b/source/blender/blenkernel/intern/softbody.c
index 70834746027..d9cb03be37f 100644
--- a/source/blender/blenkernel/intern/softbody.c
+++ b/source/blender/blenkernel/intern/softbody.c
@@ -55,11 +55,12 @@ variables on the UI for now
#include "MEM_guardedalloc.h"
/* types */
+#include "DNA_object_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_lattice_types.h"
#include "DNA_curve_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
-#include "DNA_lattice_types.h"
-#include "DNA_scene_types.h"
#include "BLI_math.h"
#include "BLI_ghash.h"
@@ -252,7 +253,7 @@ static float _final_mass(Object *ob,BodyPoint *bp)
/********************
for each target object/face the axis aligned bounding box (AABB) is stored
-faces paralell to global axes
+faces parallel to global axes
so only simple "value" in [min,max] ckecks are used
float operations still
*/
@@ -2032,8 +2033,7 @@ static int sb_detect_vertex_collisionCached(float opco[3], float facenormal[3],
VECCOPY(vel,avel);
if (ci) *intrusion /= ci;
if (deflected){
- VECCOPY(facenormal,force);
- normalize_v3(facenormal);
+ normalize_v3_v3(facenormal, force);
}
return deflected;
}
@@ -3227,7 +3227,7 @@ static void get_scalar_from_vertexgroup(Object *ob, int vertID, short groupindex
}
/* Resetting a Mesh SB object's springs */
-/* Spring lenght are caculted from'raw' mesh vertices that are NOT altered by modifier stack. */
+/* Spring length are caculted from'raw' mesh vertices that are NOT altered by modifier stack. */
static void springs_from_mesh(Object *ob)
{
SoftBody *sb;
@@ -3363,7 +3363,7 @@ static void mesh_to_softbody(Scene *scene, Object *ob)
add_2nd_order_springs(ob,sb->secondspring); /* exploits the the first run of build_bps_springlist(ob);*/
build_bps_springlist(ob); /* yes we need to do it again*/
}
- springs_from_mesh(ob); /* write the 'rest'-lenght of the springs */
+ springs_from_mesh(ob); /* write the 'rest'-length of the springs */
if (ob->softflag & OB_SB_SELF) {calculate_collision_balls(ob);}
}
diff --git a/source/blender/blenkernel/intern/sound.c b/source/blender/blenkernel/intern/sound.c
index 6402f908422..dd0135cfefc 100644
--- a/source/blender/blenkernel/intern/sound.c
+++ b/source/blender/blenkernel/intern/sound.c
@@ -16,6 +16,7 @@
#include "DNA_sequence_types.h"
#include "DNA_packedFile_types.h"
#include "DNA_screen_types.h"
+#include "DNA_sound_types.h"
#include "AUD_C-API.h"
@@ -122,10 +123,15 @@ struct bSound* sound_new_file(struct Main *bmain, char* filename)
bSound* sound = NULL;
char str[FILE_MAX];
+ char *path;
+
int len;
strcpy(str, filename);
- BLI_path_abs(str, bmain->name);
+
+ path = /*bmain ? bmain->name :*/ G.sce;
+
+ BLI_path_abs(str, path);
len = strlen(filename);
while(len > 0 && filename[len-1] != '/' && filename[len-1] != '\\')
@@ -258,7 +264,7 @@ void sound_load(struct Main *bmain, struct bSound* sound)
if(sound->id.lib)
path = sound->id.lib->filepath;
else
- path = bmain ? bmain->name : G.sce;
+ path = /*bmain ? bmain->name :*/ G.sce;
BLI_path_abs(fullpath, path);
@@ -376,10 +382,8 @@ void sound_move_scene_sound(struct Scene *scene, void* handle, int startframe, i
void sound_start_play_scene(struct Scene *scene)
{
- AUD_Sound* sound;
- sound = AUD_loopSound(scene->sound_scene);
- scene->sound_scene_handle = AUD_play(sound, 1);
- AUD_unload(sound);
+ scene->sound_scene_handle = AUD_play(scene->sound_scene, 1);
+ AUD_setLoop(scene->sound_scene_handle, -1, 0);
}
void sound_play_scene(struct Scene *scene)
@@ -392,8 +396,6 @@ void sound_play_scene(struct Scene *scene)
if(status == AUD_STATUS_INVALID)
sound_start_play_scene(scene);
- AUD_setLoop(scene->sound_scene_handle, -1, -1);
-
if(status != AUD_STATUS_PLAYING)
{
AUD_seek(scene->sound_scene_handle, CFRA / FPS);
@@ -431,12 +433,16 @@ void sound_seek_scene(struct bContext *C)
if(scene->audio.flag & AUDIO_SCRUB && !CTX_wm_screen(C)->animtimer)
{
- AUD_setLoop(scene->sound_scene_handle, -1, 1 / FPS);
+ // AUD_XXX TODO: fix scrubbing, it currently doesn't stop playing
if(scene->audio.flag & AUDIO_SYNC)
AUD_seekSequencer(scene->sound_scene_handle, CFRA / FPS);
else
AUD_seek(scene->sound_scene_handle, CFRA / FPS);
AUD_resume(scene->sound_scene_handle);
+ if(AUD_getStatus(scene->sound_scrub_handle) != AUD_STATUS_INVALID)
+ AUD_seek(scene->sound_scrub_handle, 0);
+ //XXX merge EEK! else
+ //scene->sound_scrub_handle = AUD_pauseAfter(scene->sound_scene_handle, 1 / FPS);
}
else
{
@@ -468,7 +474,9 @@ int sound_scene_playing(struct Scene *scene)
return -1;
}
-int sound_read_sound_buffer(struct bSound* sound, float* buffer, int length)
+int sound_read_sound_buffer(struct bSound* sound, float* buffer, int length, float start, float end)
{
- return AUD_readSound(sound->cache, buffer, length);
+ AUD_Sound* limiter = AUD_limitSound(sound->cache, start, end);
+ return AUD_readSound(limiter, buffer, length);
+ AUD_unload(limiter);
}
diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c
index 6eaac8525bc..7e3b5691177 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -73,6 +73,8 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss,
int useSubsurfUv,
DerivedMesh *dm);
+static int ccgDM_use_grid_pbvh(CCGDerivedMesh *ccgdm);
+
///
static void *arena_alloc(CCGAllocatorHDL a, int numBytes) {
@@ -1897,7 +1899,7 @@ void ccgDM_glNormalFast(float *a, float *b, float *c, float *d)
static void ccgdm_pbvh_update(CCGDerivedMesh *ccgdm)
{
- if(ccgdm->pbvh && ccgdm->multires.mmd) {
+ if(ccgdm->pbvh && ccgDM_use_grid_pbvh(ccgdm)) {
CCGFace **faces;
int totface;
diff --git a/source/blender/blenkernel/intern/text.c b/source/blender/blenkernel/intern/text.c
index e8328d0e622..19bc853276a 100644
--- a/source/blender/blenkernel/intern/text.c
+++ b/source/blender/blenkernel/intern/text.c
@@ -43,6 +43,8 @@
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
#include "DNA_text_types.h"
+#include "DNA_userdef_types.h"
+#include "DNA_object_types.h"
#include "BKE_depsgraph.h"
#include "BKE_global.h"
@@ -172,10 +174,11 @@ void free_text(Text *text)
Text *add_empty_text(char *name)
{
+ Main *bmain= G.main;
Text *ta;
TextLine *tmp;
- ta= alloc_libblock(&G.main->text, ID_TXT, name);
+ ta= alloc_libblock(&bmain->text, ID_TXT, name);
ta->id.us= 1;
ta->name= NULL;
@@ -324,6 +327,7 @@ int reopen_text(Text *text)
Text *add_text(char *file, const char *relpath)
{
+ Main *bmain= G.main;
FILE *fp;
int i, llen, len, res;
unsigned char *buffer;
@@ -339,7 +343,7 @@ Text *add_text(char *file, const char *relpath)
fp= fopen(str, "r");
if(fp==NULL) return NULL;
- ta= alloc_libblock(&G.main->text, ID_TXT, BLI_path_basename(str));
+ ta= alloc_libblock(&bmain->text, ID_TXT, BLI_path_basename(str));
ta->id.us= 1;
ta->lines.first= ta->lines.last= NULL;
@@ -479,7 +483,7 @@ void unlink_text(Main *bmain, Text *text)
for(scene=bmain->scene.first; scene; scene=scene->id.next)
if(scene->r.dometext == text)
scene->r.dometext = NULL;
-
+
for(ob=bmain->object.first; ob; ob=ob->id.next) {
/* game controllers */
for(cont=ob->controllers.first; cont; cont=cont->next) {
@@ -2683,19 +2687,20 @@ void uncomment(Text *text)
}
}
-int setcurr_tab (Text *text)
+int setcurr_tab_spaces (Text *text, int space)
{
int i = 0;
int test = 0;
- char *word = ":";
- char *comm = "#";
- char back_words[4][7] = {"return", "break", "pass", "yield"};
+ const char *word = ":";
+ const char *comm = "#";
+ const char indent= (text->flags & TXT_TABSTOSPACES) ? ' ' : '\t';
+ static char *back_words[]= {"return", "break", "continue", "pass", "yield", NULL};
if (!text) return 0;
if (!text->curl) return 0;
-
- while (text->curl->line[i] == '\t')
+
+ while (text->curl->line[i] == indent)
{
- //we only count thos tabs that are before any text or before the curs;
+ //we only count those tabs/spaces that are before any text or before the curs;
if (i == text->curc)
{
return i;
@@ -2718,18 +2723,18 @@ int setcurr_tab (Text *text)
}
}
if (indent) {
- i++;
+ i += space;
}
}
- for(test=0; test < 4; test++)
+ for(test=0; back_words[test]; test++)
{
- //if there are these 4 key words then remove a tab because we are done with the block
+ /* if there are these key words then remove a tab because we are done with the block */
if(strstr(text->curl->line, back_words[test]) && i > 0)
{
if(strcspn(text->curl->line, back_words[test]) < strcspn(text->curl->line, comm))
{
- i--;
+ i -= space;
}
}
}
diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c
index 57816b7e470..9075c64d286 100644
--- a/source/blender/blenkernel/intern/texture.c
+++ b/source/blender/blenkernel/intern/texture.c
@@ -169,8 +169,8 @@ PluginTex *add_plugin_tex(char *str)
open_plugin_tex(pit);
if(pit->doit==0) {
- if(pit->handle==0); //XXX error("no plugin: %s", str);
- else ; //XXX error("in plugin: %s", str);
+ if(pit->handle==0) {;} //XXX error("no plugin: %s", str);
+ else {;} //XXX error("in plugin: %s", str);
MEM_freeN(pit);
return NULL;
}
@@ -403,6 +403,73 @@ void colorband_table_RGBA(ColorBand *coba, float **array, int *size)
do_colorband(coba, (float)a/(float)CM_TABLE, &(*array)[a*4]);
}
+int vergcband(const void *a1, const void *a2)
+{
+ const CBData *x1=a1, *x2=a2;
+
+ if( x1->pos > x2->pos ) return 1;
+ else if( x1->pos < x2->pos) return -1;
+ return 0;
+}
+
+CBData *colorband_element_add(struct ColorBand *coba, float position)
+{
+ int a;
+
+ if(coba->tot==MAXCOLORBAND) {
+ return NULL;
+ }
+ else if(coba->tot > 0) {
+ CBData *xnew;
+ float col[4];
+
+ do_colorband(coba, position, col);
+
+ xnew = &coba->data[coba->tot];
+ xnew->pos = position;
+
+ xnew->r = col[0];
+ xnew->g = col[1];
+ xnew->b = col[2];
+ xnew->a = col[3];
+ }
+
+ coba->tot++;
+ coba->cur = coba->tot-1;
+
+ for(a = 0; a < coba->tot; a++)
+ coba->data[a].cur = a;
+
+ qsort(coba->data, coba->tot, sizeof(CBData), vergcband);
+
+ for(a = 0; a < coba->tot; a++) {
+ if(coba->data[a].cur == coba->cur) {
+ coba->cur = a;
+ break;
+ }
+ }
+
+ return coba->data + coba->cur;
+}
+
+int colorband_element_remove(struct ColorBand *coba, int index)
+{
+ int a;
+
+ if(coba->tot < 2)
+ return 0;
+
+ if(index < 0 || index >= coba->tot)
+ return 0;
+
+ for(a = index; a < coba->tot; a++) {
+ coba->data[a] = coba->data[a + 1];
+ }
+ if(coba->cur) coba->cur--;
+ coba->tot--;
+ return 1;
+}
+
/* ******************* TEX ************************ */
void free_texture(Tex *tex)
@@ -535,9 +602,10 @@ void tex_set_type(Tex *tex, int type)
Tex *add_texture(const char *name)
{
+ Main *bmain= G.main;
Tex *tex;
- tex= alloc_libblock(&G.main->tex, ID_TE, name);
+ tex= alloc_libblock(&bmain->tex, ID_TE, name);
default_tex(tex);
@@ -659,6 +727,7 @@ Tex *copy_texture(Tex *tex)
void make_local_texture(Tex *tex)
{
+ Main *bmain= G.main;
Tex *texn;
Material *ma;
World *wrld;
@@ -688,7 +757,7 @@ void make_local_texture(Tex *tex)
return;
}
- ma= G.main->mat.first;
+ ma= bmain->mat.first;
while(ma) {
for(a=0; a<MAX_MTEX; a++) {
if(ma->mtex[a] && ma->mtex[a]->tex==tex) {
@@ -698,7 +767,7 @@ void make_local_texture(Tex *tex)
}
ma= ma->id.next;
}
- la= G.main->lamp.first;
+ la= bmain->lamp.first;
while(la) {
for(a=0; a<MAX_MTEX; a++) {
if(la->mtex[a] && la->mtex[a]->tex==tex) {
@@ -708,7 +777,7 @@ void make_local_texture(Tex *tex)
}
la= la->id.next;
}
- wrld= G.main->world.first;
+ wrld= bmain->world.first;
while(wrld) {
for(a=0; a<MAX_MTEX; a++) {
if(wrld->mtex[a] && wrld->mtex[a]->tex==tex) {
@@ -718,7 +787,7 @@ void make_local_texture(Tex *tex)
}
wrld= wrld->id.next;
}
- br= G.main->brush.first;
+ br= bmain->brush.first;
while(br) {
if(br->mtex.tex==tex) {
if(br->id.lib) lib= 1;
@@ -736,7 +805,7 @@ void make_local_texture(Tex *tex)
texn= copy_texture(tex);
texn->id.us= 0;
- ma= G.main->mat.first;
+ ma= bmain->mat.first;
while(ma) {
for(a=0; a<MAX_MTEX; a++) {
if(ma->mtex[a] && ma->mtex[a]->tex==tex) {
@@ -749,7 +818,7 @@ void make_local_texture(Tex *tex)
}
ma= ma->id.next;
}
- la= G.main->lamp.first;
+ la= bmain->lamp.first;
while(la) {
for(a=0; a<MAX_MTEX; a++) {
if(la->mtex[a] && la->mtex[a]->tex==tex) {
@@ -762,7 +831,7 @@ void make_local_texture(Tex *tex)
}
la= la->id.next;
}
- wrld= G.main->world.first;
+ wrld= bmain->world.first;
while(wrld) {
for(a=0; a<MAX_MTEX; a++) {
if(wrld->mtex[a] && wrld->mtex[a]->tex==tex) {
@@ -775,7 +844,7 @@ void make_local_texture(Tex *tex)
}
wrld= wrld->id.next;
}
- br= G.main->brush.first;
+ br= bmain->brush.first;
while(br) {
if(br->mtex.tex==tex) {
if(br->id.lib==0) {
@@ -793,6 +862,7 @@ void make_local_texture(Tex *tex)
void autotexname(Tex *tex)
{
+ Main *bmain= G.main;
char texstr[20][15]= {"None" , "Clouds" , "Wood", "Marble", "Magic" , "Blend",
"Stucci", "Noise" , "Image", "Plugin", "EnvMap" , "Musgrave",
"Voronoi", "DistNoise", "Point Density", "Voxel Data", "", "", "", ""};
@@ -801,7 +871,7 @@ void autotexname(Tex *tex)
if(tex) {
if(tex->use_nodes) {
- new_id(&G.main->tex, (ID *)tex, "Noddy");
+ new_id(&bmain->tex, (ID *)tex, "Noddy");
}
else
if(tex->type==TEX_IMAGE) {
@@ -811,12 +881,12 @@ void autotexname(Tex *tex)
BLI_splitdirstring(di, fi);
strcpy(di, "I.");
strcat(di, fi);
- new_id(&G.main->tex, (ID *)tex, di);
+ new_id(&bmain->tex, (ID *)tex, di);
}
- else new_id(&G.main->tex, (ID *)tex, texstr[tex->type]);
+ else new_id(&bmain->tex, (ID *)tex, texstr[tex->type]);
}
- else if(tex->type==TEX_PLUGIN && tex->plugin) new_id(&G.main->tex, (ID *)tex, tex->plugin->pname);
- else new_id(&G.main->tex, (ID *)tex, texstr[tex->type]);
+ else if(tex->type==TEX_PLUGIN && tex->plugin) new_id(&bmain->tex, (ID *)tex, tex->plugin->pname);
+ else new_id(&bmain->tex, (ID *)tex, texstr[tex->type]);
}
}
diff --git a/source/blender/blenkernel/intern/world.c b/source/blender/blenkernel/intern/world.c
index 6fb1c5ff70c..42df92443f3 100644
--- a/source/blender/blenkernel/intern/world.c
+++ b/source/blender/blenkernel/intern/world.c
@@ -36,6 +36,7 @@
#include "DNA_world_types.h"
#include "DNA_scene_types.h"
+#include "DNA_texture_types.h"
#include "BKE_library.h"
#include "BKE_animsys.h"
@@ -43,10 +44,6 @@
#include "BKE_main.h"
#include "BKE_icons.h"
-#ifndef DISABLE_PYTHON
-#include "BPY_extern.h"
-#endif
-
void free_world(World *wrld)
{
MTex *mtex;
@@ -68,9 +65,10 @@ void free_world(World *wrld)
World *add_world(char *name)
{
+ Main *bmain= G.main;
World *wrld;
- wrld= alloc_libblock(&G.main->world, ID_WO, name);
+ wrld= alloc_libblock(&bmain->world, ID_WO, name);
wrld->horr= 0.05f;
wrld->horg= 0.05f;
@@ -128,6 +126,7 @@ World *copy_world(World *wrld)
void make_local_world(World *wrld)
{
+ Main *bmain= G.main;
Scene *sce;
World *wrldn;
int local=0, lib=0;
@@ -145,7 +144,7 @@ void make_local_world(World *wrld)
return;
}
- sce= G.main->scene.first;
+ sce= bmain->scene.first;
while(sce) {
if(sce->world==wrld) {
if(sce->id.lib) lib= 1;
@@ -163,7 +162,7 @@ void make_local_world(World *wrld)
wrldn= copy_world(wrld);
wrldn->id.us= 0;
- sce= G.main->scene.first;
+ sce= bmain->scene.first;
while(sce) {
if(sce->world==wrld) {
if(sce->id.lib==0) {
diff --git a/source/blender/blenkernel/intern/writeframeserver.c b/source/blender/blenkernel/intern/writeframeserver.c
index 0ec8837c0e7..b0c05c31fa1 100644
--- a/source/blender/blenkernel/intern/writeframeserver.c
+++ b/source/blender/blenkernel/intern/writeframeserver.c
@@ -45,7 +45,6 @@
#include <stdlib.h>
-#include "MEM_guardedalloc.h"
#include "DNA_userdef_types.h"
#include "BKE_global.h"
diff --git a/source/blender/blenlib/BLI_cellalloc.h b/source/blender/blenlib/BLI_cellalloc.h
index c5cba0c4f00..d2aa7f9ed55 100644
--- a/source/blender/blenlib/BLI_cellalloc.h
+++ b/source/blender/blenlib/BLI_cellalloc.h
@@ -41,10 +41,11 @@
*/
//BMESH_TODO: kill this library before merging with trunk. it's evil! -joeedh
+
void *BLI_cellalloc_malloc(long size, char *tag);
void *BLI_cellalloc_calloc(long size, char *tag);
void BLI_cellalloc_free(void *mem);
void BLI_cellalloc_printleaks(void);
int BLI_cellalloc_get_totblock(void);
void BLI_cellalloc_destroy(void);
-void *BLI_cellalloc_dupalloc(void *mem); \ No newline at end of file
+void *BLI_cellalloc_dupalloc(void *mem);
diff --git a/source/blender/blenlib/BLI_ghash.h b/source/blender/blenlib/BLI_ghash.h
index 08330c6d3f4..d1600868d9b 100644
--- a/source/blender/blenlib/BLI_ghash.h
+++ b/source/blender/blenlib/BLI_ghash.h
@@ -32,9 +32,9 @@
#ifndef BLI_GHASH_H
#define BLI_GHASH_H
-#include "stdio.h"
-#include "stdlib.h"
-#include "string.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
#ifdef __cplusplus
extern "C" {
diff --git a/source/blender/blenlib/BLI_listbase.h b/source/blender/blenlib/BLI_listbase.h
index 599487354c3..c4dc0894f80 100644
--- a/source/blender/blenlib/BLI_listbase.h
+++ b/source/blender/blenlib/BLI_listbase.h
@@ -45,6 +45,7 @@ void BLI_insertlink(struct ListBase *listbase, void *vprevlink, void *vnewlink);
void *BLI_findlink(struct ListBase *listbase, int number);
int BLI_findindex(struct ListBase *listbase, void *vlink);
void *BLI_findstring(struct ListBase *listbase, const char *id, int offset);
+void *BLI_findstring_ptr(struct ListBase *listbase, const char *id, int offset);
int BLI_findstringindex(struct ListBase *listbase, const char *id, int offset);
void BLI_freelistN(struct ListBase *listbase);
void BLI_addtail(struct ListBase *listbase, void *vlink);
diff --git a/source/blender/blenlib/BLI_math_rotation.h b/source/blender/blenlib/BLI_math_rotation.h
index 388a9176d53..ac8ed041ebc 100644
--- a/source/blender/blenlib/BLI_math_rotation.h
+++ b/source/blender/blenlib/BLI_math_rotation.h
@@ -40,17 +40,18 @@ extern "C" {
/* init */
void unit_qt(float q[4]);
-void copy_qt_qt(float q[4], float a[4]);
+void copy_qt_qt(float q[4], const float a[4]);
/* arithmetic */
-void mul_qt_qtqt(float q[4], float a[4], float b[4]);
-void mul_qt_v3(float q[4], float r[3]);
-void mul_qt_fl(float q[4], float f);
-void mul_fac_qt_fl(float q[4], float f);
+void mul_qt_qtqt(float q[4], const float a[4], const float b[4]);
+void mul_qt_v3(const float q[4], float r[3]);
+void mul_qt_fl(float q[4], const float f);
+void mul_fac_qt_fl(float q[4], const float f);
void sub_qt_qtqt(float q[4], float a[4], float b[4]);
void invert_qt(float q[4]);
+void invert_qt_qt(float *q1, const float *q2);
void conjugate_qt(float q[4]);
float dot_qtqt(float a[4], float b[4]);
void normalize_qt(float q[4]);
@@ -72,6 +73,7 @@ void tri_to_quat(float q[4], float a[3], float b[3], float c[3]);
void vec_to_quat(float q[4], float vec[3], short axis, short upflag);
/* note: v1 and v2 must be normalized */
void rotation_between_vecs_to_quat(float q[4], const float v1[3], const float v2[3]);
+void rotation_between_quats_to_quat(float q[4], const float q1[4], const float q2[4]);
/* TODO: don't what this is, but it's not the same as mat3_to_quat */
void mat3_to_quat_is_ok(float q[4], float mat[3][3]);
diff --git a/source/blender/blenlib/BLI_math_vector.h b/source/blender/blenlib/BLI_math_vector.h
index d06c0d1410b..2030ea63855 100644
--- a/source/blender/blenlib/BLI_math_vector.h
+++ b/source/blender/blenlib/BLI_math_vector.h
@@ -128,6 +128,7 @@ MINLINE int compare_v3v3(float a[3], float b[3], float limit);
MINLINE int compare_len_v3v3(float a[3], float b[3], float limit);
MINLINE int compare_v4v4(float a[4], float b[4], float limit);
+MINLINE int equals_v4v4(float a[4], float b[4]);
/********************************** Angles ***********************************/
/* - angle with 2 arguments is angle between vector */
diff --git a/source/blender/blenlib/BLI_path_util.h b/source/blender/blenlib/BLI_path_util.h
index 316b850805d..b8c886d95a9 100644
--- a/source/blender/blenlib/BLI_path_util.h
+++ b/source/blender/blenlib/BLI_path_util.h
@@ -40,39 +40,14 @@ extern "C" {
struct ListBase;
struct direntry;
-char *BLI_gethome(void);
-char *BLI_gethome_folder(char *folder_name, int flag);
-
-/* BLI_gethome_folder flag */
-#define BLI_GETHOME_LOCAL 1<<1 /* relative location for portable binaries */
-#define BLI_GETHOME_SYSTEM 1<<2 /* system location, or set from the BLENDERPATH env variable (UNIX only) */
-#define BLI_GETHOME_USER 1<<3 /* home folder ~/.blender */
-#define BLI_GETHOME_ALL (BLI_GETHOME_SYSTEM|BLI_GETHOME_LOCAL|BLI_GETHOME_USER)
-
-
-#ifdef __APPLE__
-typedef enum {
- BasePath_Temporary = 1,
- BasePath_BlenderShared,
- BasePath_BlenderUser,
- BasePath_ApplicationBundle
-} basePathesTypes;
-
-/**
- * Gets the base path. The path may not exist.
- * Note that return string must be copied as its persistence is not guaranteed
- *
- * @return base path of pathType
- */
-const char* BLI_osx_getBasePath(basePathesTypes pathType);
-#endif
+char *BLI_getDefaultDocumentFolder(void);
char *BLI_get_folder(int folder_id, char *subfolder);
char *BLI_get_folder_create(int folder_id, char *subfolder);
/* folder_id */
-/* general, will find baserd on user/local/system priority */
+/* general, will find based on user/local/system priority */
#define BLENDER_CONFIG 1
#define BLENDER_DATAFILES 2
#define BLENDER_SCRIPTS 3
@@ -84,6 +59,7 @@ char *BLI_get_folder_create(int folder_id, char *subfolder);
#define BLENDER_USER_DATAFILES 32
#define BLENDER_USER_SCRIPTS 33
#define BLENDER_USER_PLUGINS 34
+#define BLENDER_USER_AUTOSAVE 35
/* system */
#define BLENDER_SYSTEM_CONFIG 51 /* optional */
@@ -123,6 +99,7 @@ char *BLI_path_basename(char *path);
int BKE_rebase_path(char *abs, int abs_size, char *rel, int rel_size, const char *base_dir, const char *src_dir, const char *dest_dir);
void BLI_getlastdir(const char* dir, char *last, int maxlen);
int BLI_testextensie(const char *str, const char *ext);
+int BLI_testextensie_array(const char *str, const char **ext_array);
int BLI_replace_extension(char *path, int maxlen, const char *ext);
void BLI_uniquename(struct ListBase *list, void *vlink, const char defname[], char delim, short name_offs, short len);
void BLI_newname(char * name, int add);
diff --git a/source/blender/blenlib/BLI_storage_types.h b/source/blender/blenlib/BLI_storage_types.h
index f8ebc3938a1..bc3584db03e 100644
--- a/source/blender/blenlib/BLI_storage_types.h
+++ b/source/blender/blenlib/BLI_storage_types.h
@@ -58,6 +58,8 @@ struct direntry{
char *path;
#if (defined(WIN32) || defined(WIN64)) && (_MSC_VER>=1500)
struct _stat64 s;
+#elif defined(__MINGW32__)
+ struct _stati64 s;
#else
struct stat s;
#endif
diff --git a/source/blender/blenlib/CMakeLists.txt b/source/blender/blenlib/CMakeLists.txt
index 75e36895abe..ae3057acc84 100644
--- a/source/blender/blenlib/CMakeLists.txt
+++ b/source/blender/blenlib/CMakeLists.txt
@@ -49,7 +49,3 @@ IF(WITH_OPENMP)
ENDIF(WITH_OPENMP)
BLENDERLIB(bf_blenlib "${SRC}" "${INC}")
-#if env['OURPLATFORM'] == 'linux2':
-# cflags='-pthread'
-#
-#env.BlenderLib ( 'bf_blenlib', sources, Split(incs), Split(defs), libtype=['core','player'], priority = [85,195], compileflags =cflags )
diff --git a/source/blender/blenlib/Makefile b/source/blender/blenlib/Makefile
index ae8a5afd0ba..d4dcfaeeabf 100644
--- a/source/blender/blenlib/Makefile
+++ b/source/blender/blenlib/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/blenlib/intern/BLI_ghash.c b/source/blender/blenlib/intern/BLI_ghash.c
index 456872d6612..32818505e5c 100644
--- a/source/blender/blenlib/intern/BLI_ghash.c
+++ b/source/blender/blenlib/intern/BLI_ghash.c
@@ -28,10 +28,10 @@
* A general (pointer -> pointer) hash table ADT
*/
+#include "MEM_guardedalloc.h"
#include "BLI_ghash.h"
#include "BLO_sys_types.h" // for intptr_t support
-
/***/
unsigned int hashsizes[]= {
diff --git a/source/blender/blenlib/intern/Makefile b/source/blender/blenlib/intern/Makefile
index 7ef44aff881..018fd3477df 100644
--- a/source/blender/blenlib/intern/Makefile
+++ b/source/blender/blenlib/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/blenlib/intern/bpath.c b/source/blender/blenlib/intern/bpath.c
index fbe71019379..d1a8de14181 100644
--- a/source/blender/blenlib/intern/bpath.c
+++ b/source/blender/blenlib/intern/bpath.c
@@ -43,6 +43,8 @@
#include "DNA_mesh_types.h"
#include "DNA_scene_types.h" /* to get the current frame */
+#include "DNA_image_types.h"
+#include "DNA_sound_types.h"
#include "DNA_sequence_types.h"
#include "DNA_vfont_types.h"
#include "DNA_windowmanager_types.h"
diff --git a/source/blender/blenlib/intern/fileops.c b/source/blender/blenlib/intern/fileops.c
index 7a24d9b36b1..fde770c238c 100644
--- a/source/blender/blenlib/intern/fileops.c
+++ b/source/blender/blenlib/intern/fileops.c
@@ -80,7 +80,7 @@ char *BLI_last_slash(const char *string) {
else return lfslash;
}
-/* adds a slash if there isnt one there alredy */
+/* adds a slash if there isnt one there already */
int BLI_add_slash(char *string) {
int len = strlen(string);
#ifdef WIN32
diff --git a/source/blender/blenlib/intern/listbase.c b/source/blender/blenlib/intern/listbase.c
index 0a6831558d1..776f2d085df 100644
--- a/source/blender/blenlib/intern/listbase.c
+++ b/source/blender/blenlib/intern/listbase.c
@@ -374,6 +374,27 @@ void *BLI_findstring(ListBase *listbase, const char *id, int offset)
return NULL;
}
+void *BLI_findstring_ptr(ListBase *listbase, const char *id, int offset)
+{
+ Link *link= NULL;
+ const char *id_iter;
+
+ if (listbase == NULL) return NULL;
+
+ link= listbase->first;
+ while (link) {
+ /* exact copy of BLI_findstring(), except for this line */
+ id_iter= *((const char **)(((const char *)link) + offset));
+
+ if(id[0] == id_iter[0] && strcmp(id, id_iter)==0)
+ return link;
+
+ link= link->next;
+ }
+
+ return NULL;
+}
+
int BLI_findstringindex(ListBase *listbase, const char *id, int offset)
{
Link *link= NULL;
diff --git a/source/blender/blenlib/intern/math_color.c b/source/blender/blenlib/intern/math_color.c
index 6637d74dbb1..396f2c52058 100644
--- a/source/blender/blenlib/intern/math_color.c
+++ b/source/blender/blenlib/intern/math_color.c
@@ -33,17 +33,14 @@ void hsv_to_rgb(float h, float s, float v, float *r, float *g, float *b)
int i;
float f, p, q, t;
- h *= 360.0f;
-
if(s==0.0f) {
*r = v;
*g = v;
*b = v;
}
else {
- if(h== 360.0f) h = 0.0f;
-
- h /= 60.0f;
+ h= (h - floor(h))*6.0f;
+
i = (int)floor(h);
f = h - i;
p = v*(1.0f-s);
diff --git a/source/blender/blenlib/intern/math_geom.c b/source/blender/blenlib/intern/math_geom.c
index e8fb922ce4d..68b1feea632 100644
--- a/source/blender/blenlib/intern/math_geom.c
+++ b/source/blender/blenlib/intern/math_geom.c
@@ -317,7 +317,7 @@ static short IsectLLPt2Df(float x0,float y0,float x1,float y1,
return -1; /*m2 = (float) 1e+10;*/ // close enough to infinity
if (fabs(m1-m2) < 0.000001)
- return -1; /* paralelle lines */
+ return -1; /* parallel lines */
// compute constants
@@ -841,10 +841,8 @@ int isect_line_line_v3(float v1[3], float v2[3], float v3[3], float v4[3], float
sub_v3_v3v3(a, v2, v1);
sub_v3_v3v3(b, v4, v3);
- copy_v3_v3(dir1, a);
- normalize_v3(dir1);
- copy_v3_v3(dir2, b);
- normalize_v3(dir2);
+ normalize_v3_v3(dir1, a);
+ normalize_v3_v3(dir2, b);
d = dot_v3v3(dir1, dir2);
if (d == 1.0f || d == -1.0f) {
/* colinear */
@@ -908,10 +906,8 @@ int isect_line_line_strict_v3(float v1[3], float v2[3], float v3[3], float v4[3]
sub_v3_v3v3(a, v2, v1);
sub_v3_v3v3(b, v4, v3);
- copy_v3_v3(dir1, a);
- normalize_v3(dir1);
- copy_v3_v3(dir2, b);
- normalize_v3(dir2);
+ normalize_v3_v3(dir1, a);
+ normalize_v3_v3(dir2, b);
d = dot_v3v3(dir1, dir2);
if (d == 1.0f || d == -1.0f || d == 0) {
/* colinear or one vector is zero-length*/
@@ -993,14 +989,14 @@ void isect_point_quad_uv_v2(float v0[2], float v1[2], float v2[2], float v3[2],
{
float x0,y0, x1,y1, wtot, v2d[2], w1, w2;
- /* used for paralelle lines */
+ /* used for parallel lines */
float pt3d[3], l1[3], l2[3], pt_on_line[3];
/* compute 2 edges of the quad intersection point */
if (IsectLLPt2Df(v0[0],v0[1],v1[0],v1[1], v2[0],v2[1],v3[0],v3[1], &x0,&y0) == 1) {
/* the intersection point between the quad-edge intersection and the point in the quad we want the uv's for */
/* should never be paralle !! */
- /*printf("\tnot paralelle 1\n");*/
+ /*printf("\tnot parallel 1\n");*/
IsectLLPt2Df(pt[0],pt[1],x0,y0, v0[0],v0[1],v3[0],v3[1], &x1,&y1);
/* Get the weights from the new intersection point, to each edge */
@@ -1016,8 +1012,8 @@ void isect_point_quad_uv_v2(float v0[2], float v1[2], float v2[2], float v3[2],
/*w2 = w2/wtot;*/
uv[0] = w1/wtot;
} else {
- /* lines are paralelle, lambda_cp_line_ex is 3d grrr */
- /*printf("\tparalelle1\n");*/
+ /* lines are parallel, lambda_cp_line_ex is 3d grrr */
+ /*printf("\tparallel1\n");*/
pt3d[0] = pt[0];
pt3d[1] = pt[1];
pt3d[2] = l1[2] = l2[2] = 0.0f;
@@ -1043,7 +1039,7 @@ void isect_point_quad_uv_v2(float v0[2], float v1[2], float v2[2], float v3[2],
if (IsectLLPt2Df(v0[0],v0[1],v3[0],v3[1], v1[0],v1[1],v2[0],v2[1], &x0,&y0) == 1) { /* was v0,v1 v2,v3 now v0,v3 v1,v2*/
/* never paralle if above was not */
- /*printf("\tnot paralelle2\n");*/
+ /*printf("\tnot parallel2\n");*/
IsectLLPt2Df(pt[0],pt[1],x0,y0, v0[0],v0[1],v1[0],v1[1], &x1,&y1);/* was v0,v3 now v0,v1*/
v2d[0] = x1-v0[0];
@@ -1056,8 +1052,8 @@ void isect_point_quad_uv_v2(float v0[2], float v1[2], float v2[2], float v3[2],
wtot = w1+w2;
uv[1] = w1/wtot;
} else {
- /* lines are paralelle, lambda_cp_line_ex is 3d grrr */
- /*printf("\tparalelle2\n");*/
+ /* lines are parallel, lambda_cp_line_ex is 3d grrr */
+ /*printf("\tparallel2\n");*/
pt3d[0] = pt[0];
pt3d[1] = pt[1];
pt3d[2] = l1[2] = l2[2] = 0.0f;
@@ -1225,7 +1221,7 @@ static int point_in_slice_as(float p[3],float origin[3],float normal[3])
return 1;
}
-/*mama (knowing the squared lenght of the normal)*/
+/*mama (knowing the squared length of the normal)*/
static int point_in_slice_m(float p[3],float origin[3],float normal[3],float lns)
{
float h,rp[3];
diff --git a/source/blender/blenlib/intern/math_geom_inline.c b/source/blender/blenlib/intern/math_geom_inline.c
index 697ac8dc782..f2d8e27cbd5 100644
--- a/source/blender/blenlib/intern/math_geom_inline.c
+++ b/source/blender/blenlib/intern/math_geom_inline.c
@@ -15,7 +15,7 @@
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
* All rights reserved.
diff --git a/source/blender/blenlib/intern/math_matrix.c b/source/blender/blenlib/intern/math_matrix.c
index 6e8f4622488..64c3e746982 100644
--- a/source/blender/blenlib/intern/math_matrix.c
+++ b/source/blender/blenlib/intern/math_matrix.c
@@ -309,6 +309,7 @@ void mul_v3_m4v3(float *in, float mat[][4], float *vec)
in[2]= x*mat[0][2] + y*mat[1][2] + mat[2][2]*vec[2] + mat[3][2];
}
+/* same as mul_m4_v3() but doesnt apply translation component */
void mul_mat3_m4_v3(float mat[][4], float *vec)
{
float x,y;
@@ -594,9 +595,7 @@ void transpose_m4(float mat[][4])
void orthogonalize_m3(float mat[][3], int axis)
{
float size[3];
- size[0] = len_v3(mat[0]);
- size[1] = len_v3(mat[1]);
- size[2] = len_v3(mat[2]);
+ mat3_to_size(size, mat);
normalize_v3(mat[axis]);
switch(axis)
{
@@ -657,9 +656,7 @@ void orthogonalize_m3(float mat[][3], int axis)
void orthogonalize_m4(float mat[][4], int axis)
{
float size[3];
- size[0] = len_v3(mat[0]);
- size[1] = len_v3(mat[1]);
- size[2] = len_v3(mat[2]);
+ mat4_to_size(size, mat);
normalize_v3(mat[axis]);
switch(axis)
{
diff --git a/source/blender/blenlib/intern/math_rotation.c b/source/blender/blenlib/intern/math_rotation.c
index 6b5bf7743ef..f72269f6d7b 100644
--- a/source/blender/blenlib/intern/math_rotation.c
+++ b/source/blender/blenlib/intern/math_rotation.c
@@ -36,7 +36,7 @@ void unit_qt(float *q)
q[1]= q[2]= q[3]= 0.0f;
}
-void copy_qt_qt(float *q1, float *q2)
+void copy_qt_qt(float *q1, const float *q2)
{
q1[0]= q2[0];
q1[1]= q2[1];
@@ -49,7 +49,7 @@ int is_zero_qt(float *q)
return (q[0] == 0 && q[1] == 0 && q[2] == 0 && q[3] == 0);
}
-void mul_qt_qtqt(float *q, float *q1, float *q2)
+void mul_qt_qtqt(float *q, const float *q1, const float *q2)
{
float t0,t1,t2;
@@ -63,7 +63,7 @@ void mul_qt_qtqt(float *q, float *q1, float *q2)
}
/* Assumes a unit quaternion */
-void mul_qt_v3(float *q, float *v)
+void mul_qt_v3(const float *q, float *v)
{
float t0, t1, t2;
@@ -104,8 +104,14 @@ void invert_qt(float *q)
mul_qt_fl(q, 1.0f/f);
}
+void invert_qt_qt(float *q1, const float *q2)
+{
+ copy_qt_qt(q1, q2);
+ invert_qt(q1);
+}
+
/* simple mult */
-void mul_qt_fl(float *q, float f)
+void mul_qt_fl(float *q, const float f)
{
q[0] *= f;
q[1] *= f;
@@ -121,7 +127,7 @@ void sub_qt_qtqt(float *q, float *q1, float *q2)
}
/* angular mult factor */
-void mul_fac_qt_fl(float *q, float fac)
+void mul_fac_qt_fl(float *q, const float fac)
{
float angle= fac*saacos(q[0]); /* quat[0]= cos(0.5*angle), but now the 0.5 and 2.0 rule out */
@@ -129,10 +135,7 @@ void mul_fac_qt_fl(float *q, float fac)
float si= (float)sin(angle);
q[0]= co;
normalize_v3(q+1);
- q[1]*= si;
- q[2]*= si;
- q[3]*= si;
-
+ mul_v3_fl(q+1, si);
}
void quat_to_mat3(float m[][3], float *q)
@@ -336,6 +339,23 @@ void rotation_between_vecs_to_quat(float *q, const float v1[3], const float v2[3
axis_angle_to_quat(q, axis, angle);
}
+void rotation_between_quats_to_quat(float *q, const float q1[4], const float q2[4])
+{
+ float tquat[4];
+ double dot = 0.0f;
+ int x;
+
+ copy_qt_qt(tquat, q1);
+ conjugate_qt(tquat);
+ dot = 1.0f / dot_qtqt(tquat, tquat);
+
+ for(x = 0; x < 4; x++)
+ tquat[x] *= dot;
+
+ mul_qt_qtqt(q, tquat, q2);
+}
+
+
void vec_to_quat(float *q,float *vec, short axis, short upflag)
{
float q2[4], nor[3], *fp, mat[3][3], angle, si, co, x2, y2, z2, len1;
@@ -572,9 +592,8 @@ void axis_angle_to_quat(float q[4], float axis[3], float angle)
{
float nor[3];
float si;
-
- copy_v3_v3(nor, axis);
- normalize_v3(nor);
+
+ normalize_v3_v3(nor, axis);
angle /= 2;
si = (float)sin(angle);
@@ -631,8 +650,7 @@ void axis_angle_to_mat3(float mat[3][3],float axis[3], float angle)
float nor[3], nsi[3], co, si, ico;
/* normalise the axis first (to remove unwanted scaling) */
- copy_v3_v3(nor, axis);
- normalize_v3(nor);
+ normalize_v3_v3(nor, axis);
/* now convert this to a 3x3 matrix */
co= (float)cos(angle);
diff --git a/source/blender/blenlib/intern/math_vector.c b/source/blender/blenlib/intern/math_vector.c
index 9baf897c830..b1cea9ab3c4 100644
--- a/source/blender/blenlib/intern/math_vector.c
+++ b/source/blender/blenlib/intern/math_vector.c
@@ -120,10 +120,8 @@ float angle_v3v3(float *v1, float *v2)
{
float vec1[3], vec2[3];
- copy_v3_v3(vec1, v1);
- copy_v3_v3(vec2, v2);
- normalize_v3(vec1);
- normalize_v3(vec2);
+ normalize_v3_v3(vec1, v1);
+ normalize_v3_v3(vec2, v2);
return angle_normalized_v3v3(vec1, vec2);
}
diff --git a/source/blender/blenlib/intern/math_vector_inline.c b/source/blender/blenlib/intern/math_vector_inline.c
index 33d7f7cdd6d..76173312b67 100644
--- a/source/blender/blenlib/intern/math_vector_inline.c
+++ b/source/blender/blenlib/intern/math_vector_inline.c
@@ -432,6 +432,11 @@ MINLINE int equals_v3v3(float *v1, float *v2)
return ((v1[0]==v2[0]) && (v1[1]==v2[1]) && (v1[2]==v2[2]));
}
+MINLINE int equals_v4v4(float *v1, float *v2)
+{
+ return ((v1[0]==v2[0]) && (v1[1]==v2[1]) && (v1[2]==v2[2]) && (v1[3]==v2[3]));
+}
+
MINLINE int compare_v3v3(float *v1, float *v2, float limit)
{
if(fabs(v1[0]-v2[0])<limit)
diff --git a/source/blender/blenlib/intern/path_util.c b/source/blender/blenlib/intern/path_util.c
index 423bf452a4d..cf773d575e5 100644
--- a/source/blender/blenlib/intern/path_util.c
+++ b/source/blender/blenlib/intern/path_util.c
@@ -364,7 +364,7 @@ void BLI_path_rel(char *file, const char *relfile)
if (strlen(relfile) > 2 && relfile[1] != ':') {
char* ptemp;
/* fix missing volume name in relative base,
- can happen with old .Blog files */
+ can happen with old recent-files.txt files */
get_default_root(temp);
ptemp = &temp[2];
if (relfile[0] != '\\' && relfile[0] != '/') {
@@ -586,7 +586,7 @@ int BLI_path_abs(char *path, const char *basepath)
BLI_strncpy(tmp, path, FILE_MAX);
}
#else
- BLI_strncpy(tmp, path, FILE_MAX);
+ BLI_strncpy(tmp, path, sizeof(tmp));
/* Check for loading a windows path on a posix system
* in this case, there is no use in trying C:/ since it
@@ -603,7 +603,7 @@ int BLI_path_abs(char *path, const char *basepath)
#endif
- BLI_strncpy(base, basepath, FILE_MAX);
+ BLI_strncpy(base, basepath, sizeof(base));
BLI_cleanup_file(NULL, base);
@@ -626,17 +626,19 @@ int BLI_path_abs(char *path, const char *basepath)
BLI_strncpy(path, tmp+2, FILE_MAX);
memcpy(tmp, base, baselen);
- strcpy(tmp+baselen, path);
- strcpy(path, tmp);
+ BLI_strncpy(tmp+baselen, path, sizeof(tmp)-baselen);
+ BLI_strncpy(path, tmp, FILE_MAX);
} else {
- strcpy(path, tmp+2);
+ BLI_strncpy(path, tmp+2, FILE_MAX);
}
} else {
- strcpy(path, tmp);
+ BLI_strncpy(path, tmp, FILE_MAX);
}
if (path[0]!='\0') {
if ( path[strlen(path)-1]=='/') {
+ /* remove the '/' so we avoid BLI_cleanup_dir adding an extra \ in WIN32 */
+ path[strlen(path)-1] = '\0';
BLI_cleanup_dir(NULL, path);
} else {
BLI_cleanup_file(NULL, path);
@@ -732,184 +734,41 @@ void BLI_getlastdir(const char* dir, char *last, int maxlen)
}
}
-char *BLI_gethome(void) {
+/* This is now only used to really get the user's default document folder */
+/* On Windows I chose the 'Users/<MyUserName>/Documents' since it's used
+ as default location to save documents */
+char *BLI_getDefaultDocumentFolder(void) {
#if !defined(WIN32)
return getenv("HOME");
#else /* Windows */
char * ret;
- static char dir[512];
- static char appdatapath[MAXPATHLEN];
+ static char documentfolder[MAXPATHLEN];
HRESULT hResult;
/* Check for %HOME% env var */
ret = getenv("HOME");
if(ret) {
- sprintf(dir, "%s\\%s", ret, blender_version_decimal());
- if (BLI_is_dir(dir)) return dir;
- }
-
- /* else, check install dir (path containing blender.exe) */
-
- if(BLI_getInstallationDir(dir))
- {
- sprintf(dir, "%s", dir, blender_version_decimal());
- if (BLI_is_dir(dir)) return(dir);
+ if (BLI_is_dir(ret)) return ret;
}
-
/* add user profile support for WIN 2K / NT.
* This is %APPDATA%, which translates to either
* %USERPROFILE%\Application Data or since Vista
* to %USERPROFILE%\AppData\Roaming
*/
- hResult = SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, SHGFP_TYPE_CURRENT, appdatapath);
+ hResult = SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL, SHGFP_TYPE_CURRENT, documentfolder);
if (hResult == S_OK)
{
- if (BLI_is_dir(appdatapath)) { /* from fop, also below... */
- sprintf(dir, "%s\\Blender Foundation\\Blender", appdatapath);
- BLI_recurdir_fileops(dir);
- if (BLI_is_dir(dir)) {
- sprintf(dir,"%s\\%s", dir, blender_version_decimal());
- if(BLI_is_dir(dir)) return(dir);
- }
- }
- hResult = SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL, SHGFP_TYPE_CURRENT, appdatapath);
- if (hResult == S_OK)
- {
- if (BLI_is_dir(appdatapath))
- { /* from fop, also below... */
- sprintf(dir, "%s\\Blender Foundation\\Blender", appdatapath);
- BLI_recurdir_fileops(dir);
- if (BLI_is_dir(dir)) {
- sprintf(dir,"%s\\%s", dir, blender_version_decimal());
- if(BLI_is_dir(dir)) return(dir);
- }
- }
- }
+ if (BLI_is_dir(documentfolder)) return documentfolder;
}
- return "C:\\Temp"; /* sheesh! bad, bad, bad! (aphex) */
+ return NULL;
#endif
}
-/* this function returns the path to a blender folder, if it exists
- * utility functions for BLI_gethome_folder */
-
-// #define PATH_DEBUG /* for testing paths that are checked */
-
-static int test_data_path(char *targetpath, char *path_base, char *path_sep, char *folder_name)
-{
- char tmppath[FILE_MAXDIR];
-
- if(path_sep) BLI_join_dirfile(tmppath, path_base, path_sep);
- else BLI_strncpy(tmppath, path_base, sizeof(tmppath));
-
- BLI_make_file_string("/", targetpath, tmppath, folder_name);
-
- if (BLI_is_dir(targetpath)) {
-#ifdef PATH_DEBUG
- printf("\tpath found: %s\n", targetpath);
-#endif
- return 1;
- }
- else {
-#ifdef PATH_DEBUG
- printf("\tpath missing: %s\n", targetpath);
-#endif
- targetpath[0] = '\0';
- return 0;
- }
-}
-
-static int gethome_path_local(char *targetpath, char *folder_name)
-{
- extern char bprogname[]; /* argv[0] from creator.c */
- char bprogdir[FILE_MAXDIR];
- char cwd[FILE_MAXDIR];
- char *s;
- int i;
-
-#ifdef PATH_DEBUG
- printf("gethome_path_local...\n");
-#endif
-
- /* try release/folder_name (binary relative) */
- /* use argv[0] (bprogname) to get the path to the executable */
- s = BLI_last_slash(bprogname);
- i = s - bprogname + 1;
- BLI_strncpy(bprogdir, bprogname, i);
-
- /* try release/folder_name (BIN relative) */
- if(test_data_path(targetpath, bprogdir, "release", folder_name))
- return 1;
-
- /* try release/folder_name (CWD relative) */
- if(test_data_path(targetpath, BLI_getwdN(cwd), "release", folder_name))
- return 1;
-
- /* try ./.blender/folder_name */
- if(test_data_path(targetpath, bprogdir, ".blender", folder_name))
- return 1;
-
- return 0;
-}
-
-static int gethome_path_user(char *targetpath, char *folder_name)
-{
- char *home_path= BLI_gethome();
-
-#ifdef PATH_DEBUG
- printf("gethome_path_user...\n");
-#endif
-
- /* try $HOME/folder_name */
- return test_data_path(targetpath, home_path, ".blender", folder_name);
-}
-
-static int gethome_path_system(char *targetpath, char *folder_name)
-{
- extern char blender_path[]; /* unix prefix eg. /usr/share/blender/2.5 creator.c */
-
- if(!blender_path[0])
- return 0;
-
-#ifdef PATH_DEBUG
- printf("gethome_path_system...\n");
-#endif
-
- /* try $BLENDERPATH/folder_name */
- return test_data_path(targetpath, blender_path, NULL, folder_name);
-}
-
-char *BLI_gethome_folder(char *folder_name, int flag)
-{
- static char fulldir[FILE_MAXDIR] = "";
-
- /* first check if this is a redistributable bundle */
- if(flag & BLI_GETHOME_LOCAL) {
- if (gethome_path_local(fulldir, folder_name))
- return fulldir;
- }
-
- /* then check if the OS has blender data files installed in a global location */
- if(flag & BLI_GETHOME_SYSTEM) {
- if (gethome_path_system(fulldir, folder_name))
- return fulldir;
- }
-
- /* now check the users home dir for data files */
- if(flag & BLI_GETHOME_USER) {
- if (gethome_path_user(fulldir, folder_name))
- return fulldir;
- }
-
- return NULL;
-}
-
-
/* NEW stuff, to be cleaned up when fully migrated */
/* ************************************************************* */
/* ************************************************************* */
@@ -961,10 +820,11 @@ static int test_env_path(char *path, char *envvar)
}
}
-static int get_path_local(char *targetpath, char *folder_name)
+static int get_path_local(char *targetpath, char *folder_name, char *subfolder_name)
{
extern char bprogname[]; /* argv[0] from creator.c */
char bprogdir[FILE_MAX];
+ char relfolder[FILE_MAX];
char cwd[FILE_MAX];
char *s;
int i;
@@ -973,6 +833,11 @@ static int get_path_local(char *targetpath, char *folder_name)
printf("get_path_local...\n");
#endif
+ if (subfolder_name) {
+ BLI_join_dirfile(relfolder, folder_name, subfolder_name);
+ } else {
+ BLI_strncpy(relfolder, folder_name, FILE_MAX);
+ }
/* use argv[0] (bprogname) to get the path to the executable */
s = BLI_last_slash(bprogname);
@@ -980,38 +845,44 @@ static int get_path_local(char *targetpath, char *folder_name)
BLI_strncpy(bprogdir, bprogname, i);
/* try EXECUTABLE_DIR/folder_name */
- if(test_path(targetpath, bprogdir, "", folder_name))
+ if(test_path(targetpath, bprogdir, "", relfolder))
return 1;
/* try CWD/release/folder_name */
- if(test_path(targetpath, BLI_getwdN(cwd), "release", folder_name))
+ if(test_path(targetpath, BLI_getwdN(cwd), "release", relfolder))
return 1;
/* try EXECUTABLE_DIR/release/folder_name */
- if(test_path(targetpath, bprogdir, "release", folder_name))
+ if(test_path(targetpath, bprogdir, "release", relfolder))
return 1;
/* try EXECUTABLE_DIR/2.5/folder_name - new default directory for local blender installed files */
- if(test_path(targetpath, bprogdir, blender_version_decimal(), folder_name))
+ if(test_path(targetpath, bprogdir, blender_version_decimal(), relfolder))
return 1;
/* try ./.blender/folder_name -- DEPRECATED, need to update build systems */
- if(test_path(targetpath, bprogdir, ".blender", folder_name))
+ if(test_path(targetpath, bprogdir, ".blender", relfolder))
return 1;
return 0;
}
-static int get_path_user(char *targetpath, char *folder_name, char *envvar)
+static int get_path_user(char *targetpath, char *folder_name, char *subfolder_name, char *envvar)
{
char user_path[FILE_MAX];
const char *user_base_path;
user_path[0] = '\0';
- if (test_env_path(targetpath, envvar))
- return 1;
-
+ if (test_env_path(user_path, envvar)) {
+ if (subfolder_name) {
+ return test_path(targetpath, user_path, NULL, subfolder_name);
+ } else {
+ BLI_strncpy(targetpath, user_path, FILE_MAX);
+ return 1;
+ }
+ }
+
user_base_path = (const char *)GHOST_getUserDir();
if (user_base_path) {
BLI_snprintf(user_path, FILE_MAX, BLENDER_USER_FORMAT, user_base_path, blender_version_decimal());
@@ -1024,19 +895,30 @@ static int get_path_user(char *targetpath, char *folder_name, char *envvar)
printf("get_path_user: %s\n", user_path);
#endif
- /* try $HOME/folder_name */
- return test_path(targetpath, user_path, NULL, folder_name);
+ if (subfolder_name) {
+ /* try $HOME/folder_name/subfolder_name */
+ return test_path(targetpath, user_path, folder_name, subfolder_name);
+ } else {
+ /* try $HOME/folder_name */
+ return test_path(targetpath, user_path, NULL, folder_name);
+ }
}
-static int get_path_system(char *targetpath, char *folder_name, char *envvar)
+static int get_path_system(char *targetpath, char *folder_name, char *subfolder_name, char *envvar)
{
char system_path[FILE_MAX];
const char *system_base_path;
system_path[0] = '\0';
- if (test_env_path(targetpath, envvar))
- return 1;
+ if (test_env_path(system_path, envvar)) {
+ if (subfolder_name) {
+ return test_path(targetpath, system_path, NULL, subfolder_name);
+ } else {
+ BLI_strncpy(targetpath, system_path, FILE_MAX);
+ return 1;
+ }
+ }
system_base_path = (const char *)GHOST_getSystemDir();
if (system_base_path) {
@@ -1050,8 +932,13 @@ static int get_path_system(char *targetpath, char *folder_name, char *envvar)
printf("get_path_system: %s\n", system_path);
#endif
- /* try $BLENDERPATH/folder_name */
- return test_path(targetpath, system_path, NULL, folder_name);
+ if (subfolder_name) {
+ /* try $BLENDERPATH/folder_name/subfolder_name */
+ return test_path(targetpath, system_path, folder_name, subfolder_name);
+ } else {
+ /* try $BLENDERPATH/folder_name */
+ return test_path(targetpath, system_path, NULL, folder_name);
+ }
}
/* get a folder out of the 'folder_id' presets for paths */
@@ -1059,72 +946,69 @@ static int get_path_system(char *targetpath, char *folder_name, char *envvar)
char *BLI_get_folder(int folder_id, char *subfolder)
{
static char path[FILE_MAX] = "";
- char search_path[FILE_MAX];
switch (folder_id) {
case BLENDER_DATAFILES: /* general case */
- BLI_join_dirfile(search_path, "datafiles", subfolder);
- if (get_path_local(path, search_path)) break;
- if (get_path_user(path, search_path, "BLENDER_USER_DATAFILES")) break;
- if (get_path_system(path, search_path, "BLENDER_SYSTEM_DATAFILES")) break;
+ if (get_path_local(path, "datafiles", subfolder)) break;
+ if (get_path_user(path, "datafiles", subfolder, "BLENDER_USER_DATAFILES")) break;
+ if (get_path_system(path, "datafiles", subfolder, "BLENDER_SYSTEM_DATAFILES")) break;
return NULL;
case BLENDER_USER_DATAFILES:
- BLI_join_dirfile(search_path, "datafiles", subfolder);
- if (get_path_local(path, search_path)) break;
- if (get_path_user(path, search_path, "BLENDER_USER_DATAFILES")) break;
+ if (get_path_local(path, "datafiles", subfolder)) break;
+ if (get_path_user(path, "datafiles", subfolder, "BLENDER_USER_DATAFILES")) break;
return NULL;
case BLENDER_SYSTEM_DATAFILES:
- BLI_join_dirfile(search_path, "datafiles", subfolder);
- if (get_path_system(path, search_path, "BLENDER_SYSTEM_DATAFILES")) break;
+ if (get_path_local(path, "datafiles", subfolder)) break;
+ if (get_path_system(path, "datafiles", subfolder, "BLENDER_SYSTEM_DATAFILES")) break;
return NULL;
+ case BLENDER_USER_AUTOSAVE:
+ if (get_path_local(path, "autosave", subfolder)) break;
+ if (get_path_user(path, "autosave", subfolder, "BLENDER_USER_DATAFILES")) break;
+ return NULL;
+
case BLENDER_CONFIG: /* general case */
- BLI_join_dirfile(search_path, "config", subfolder);
- if (get_path_local(path, search_path)) break;
- if (get_path_user(path, search_path, "BLENDER_USER_CONFIG")) break;
- if (get_path_system(path, search_path, "BLENDER_SYSTEM_CONFIG")) break;
+ if (get_path_local(path, "config", subfolder)) break;
+ if (get_path_user(path, "config", subfolder, "BLENDER_USER_CONFIG")) break;
+ if (get_path_system(path, "config", subfolder, "BLENDER_SYSTEM_CONFIG")) break;
return NULL;
case BLENDER_USER_CONFIG:
- BLI_join_dirfile(search_path, "config", subfolder);
- if (get_path_local(path, search_path)) break;
- if (get_path_user(path, search_path, "BLENDER_USER_CONFIG")) break;
+ if (get_path_local(path, "config", subfolder)) break;
+ if (get_path_user(path, "config", subfolder, "BLENDER_USER_CONFIG")) break;
return NULL;
case BLENDER_SYSTEM_CONFIG:
- BLI_join_dirfile(search_path, "config", subfolder);
- if (get_path_system(path, search_path, "BLENDER_SYSTEM_CONFIG")) break;
+ if (get_path_local(path, "config", subfolder)) break;
+ if (get_path_system(path, "config", subfolder, "BLENDER_SYSTEM_CONFIG")) break;
return NULL;
case BLENDER_SCRIPTS: /* general case */
- BLI_join_dirfile(search_path, "scripts", subfolder);
- if (get_path_local(path, search_path)) break;
- if (get_path_user(path, search_path, "BLENDER_USER_SCRIPTS")) break;
- if (get_path_system(path, search_path, "BLENDER_SYSTEM_SCRIPTS")) break;
+ if (get_path_local(path, "scripts", subfolder)) break;
+ if (get_path_user(path, "scripts", subfolder, "BLENDER_USER_SCRIPTS")) break;
+ if (get_path_system(path, "scripts", subfolder, "BLENDER_SYSTEM_SCRIPTS")) break;
return NULL;
case BLENDER_USER_SCRIPTS:
- BLI_join_dirfile(search_path, "scripts", subfolder);
- if (get_path_local(path, search_path)) break;
- if (get_path_user(path, search_path, "BLENDER_USER_SCRIPTS")) break;
+ if (get_path_local(path, "scripts", subfolder)) break;
+ if (get_path_user(path, "scripts", subfolder, "BLENDER_USER_SCRIPTS")) break;
return NULL;
case BLENDER_SYSTEM_SCRIPTS:
- BLI_join_dirfile(search_path, "scripts", subfolder);
- if (get_path_system(path, search_path, "BLENDER_SYSTEM_SCRIPTS")) break;
+ if (get_path_local(path, "scripts", subfolder)) break;
+ if (get_path_system(path, "scripts", subfolder, "BLENDER_SYSTEM_SCRIPTS")) break;
return NULL;
case BLENDER_PYTHON: /* general case */
- BLI_join_dirfile(search_path, "python", subfolder);
- if (get_path_local(path, search_path)) break;
- if (get_path_system(path, search_path, "BLENDER_SYSTEM_PYTHON")) break;
+ if (get_path_local(path, "python", subfolder)) break;
+ if (get_path_system(path, "python", subfolder, "BLENDER_SYSTEM_PYTHON")) break;
return NULL;
case BLENDER_SYSTEM_PYTHON:
- BLI_join_dirfile(search_path, "python", subfolder);
- if (get_path_system(path, search_path, "BLENDER_SYSTEM_PYTHON")) break;
+ if (get_path_local(path, "python", subfolder)) break;
+ if (get_path_system(path, "python", subfolder, "BLENDER_SYSTEM_PYTHON")) break;
return NULL;
}
@@ -1134,16 +1018,16 @@ char *BLI_get_folder(int folder_id, char *subfolder)
static char *BLI_get_user_folder_notest(int folder_id, char *subfolder)
{
static char path[FILE_MAX] = "";
- char search_path[FILE_MAX];
switch (folder_id) {
case BLENDER_USER_DATAFILES:
- BLI_join_dirfile(search_path, "datafiles", subfolder);
- get_path_user(path, search_path, "BLENDER_USER_DATAFILES");
+ get_path_user(path, "datafiles", subfolder, "BLENDER_USER_DATAFILES");
break;
case BLENDER_USER_CONFIG:
- BLI_join_dirfile(search_path, "config", subfolder);
- get_path_user(path, search_path, "BLENDER_USER_CONFIG");
+ get_path_user(path, "config", subfolder, "BLENDER_USER_CONFIG");
+ break;
+ case BLENDER_USER_AUTOSAVE:
+ get_path_user(path, "autosave", subfolder, "BLENDER_USER_AUTOSAVE");
break;
}
if ('\0' == path[0]) {
@@ -1157,7 +1041,7 @@ char *BLI_get_folder_create(int folder_id, char *subfolder)
char *path;
/* only for user folders */
- if (!ELEM(folder_id, BLENDER_USER_DATAFILES, BLENDER_USER_CONFIG))
+ if (!ELEM3(folder_id, BLENDER_USER_DATAFILES, BLENDER_USER_CONFIG, BLENDER_USER_AUTOSAVE))
return NULL;
path = BLI_get_folder(folder_id, subfolder);
@@ -1278,7 +1162,7 @@ void BLI_make_existing_file(char *name)
{
char di[FILE_MAXDIR+FILE_MAXFILE], fi[FILE_MAXFILE];
- strcpy(di, name);
+ BLI_strncpy(di, name, sizeof(di));
BLI_splitdirstring(di, fi);
/* test exist */
@@ -1381,6 +1265,19 @@ int BLI_testextensie(const char *str, const char *ext)
return (retval);
}
+int BLI_testextensie_array(const char *str, const char **ext_array)
+{
+ int i=0;
+ while(ext_array[i]) {
+ if(BLI_testextensie(str, ext_array[i])) {
+ return 1;
+ }
+
+ i++;
+ }
+ return 0;
+}
+
int BLI_replace_extension(char *path, int maxlen, const char *ext)
{
int a;
diff --git a/source/blender/blenlib/intern/pbvh.c b/source/blender/blenlib/intern/pbvh.c
index 4c5177a403e..9bce8bb4e37 100644
--- a/source/blender/blenlib/intern/pbvh.c
+++ b/source/blender/blenlib/intern/pbvh.c
@@ -24,6 +24,8 @@
#include "DNA_meshdata_types.h"
+#include "MEM_guardedalloc.h"
+
#include "BLI_math.h"
#include "BLI_ghash.h"
#include "BLI_pbvh.h"
diff --git a/source/blender/blenlib/intern/scanfill.c b/source/blender/blenlib/intern/scanfill.c
index d1150748dff..7ca7dba2746 100644
--- a/source/blender/blenlib/intern/scanfill.c
+++ b/source/blender/blenlib/intern/scanfill.c
@@ -145,7 +145,7 @@ struct mem_elements {
static void *new_mem_element(int size)
{
int blocksize= 16384;
- static int offs= 0; /* the current free adress */
+ static int offs= 0; /* the current free address */
static struct mem_elements *cur= 0, *first;
static ListBase lb= {0, 0};
void *adr;
diff --git a/source/blender/blenlib/intern/storage.c b/source/blender/blenlib/intern/storage.c
index 3315e9645d4..80310b1ef8a 100644
--- a/source/blender/blenlib/intern/storage.c
+++ b/source/blender/blenlib/intern/storage.c
@@ -237,8 +237,19 @@ void BLI_builddir(char *dirname, char *relname)
if (newnum){
- if (files) files=(struct direntry *)realloc(files,(totnum+newnum) * sizeof(struct direntry));
- else files=(struct direntry *)malloc(newnum * sizeof(struct direntry));
+ if(files) {
+ void *tmp= realloc(files, (totnum+newnum) * sizeof(struct direntry));
+ if(tmp) {
+ files= (struct direntry *)tmp;
+ }
+ else { /* realloc fail */
+ free(files);
+ files= NULL;
+ }
+ }
+
+ if(files==NULL)
+ files=(struct direntry *)malloc(newnum * sizeof(struct direntry));
if (files){
dlink = (struct dirlink *) dirbase->first;
@@ -250,6 +261,8 @@ void BLI_builddir(char *dirname, char *relname)
// Excluding other than current MSVC compiler until able to test.
#if (defined(WIN32) || defined(WIN64)) && (_MSC_VER>=1500)
_stat64(dlink->name,&files[actnum].s);
+#elif defined(__MINGW32__)
+ _stati64(dlink->name,&files[actnum].s);
#else
stat(dlink->name,&files[actnum].s);
#endif
@@ -432,7 +445,7 @@ int BLI_filepathsize(const char *path)
int BLI_exist(char *name)
{
-#ifdef WIN32
+#if defined(WIN32) && !defined(__MINGW32__)
struct _stat64i32 st;
/* in Windows stat doesn't recognize dir ending on a slash
To not break code where the ending slash is expected we
@@ -444,6 +457,15 @@ int BLI_exist(char *name)
if (len > 3 && ( tmp[len-1]=='\\' || tmp[len-1]=='/') ) tmp[len-1] = '\0';
res = _stat(tmp, &st);
if (res == -1) return(0);
+#elif defined(__MINGW32__)
+ struct _stati64 st;
+ char tmp[FILE_MAXDIR+FILE_MAXFILE];
+ int len, res;
+ BLI_strncpy(tmp, name, FILE_MAXDIR+FILE_MAXFILE);
+ len = strlen(tmp);
+ if (len > 3 && ( tmp[len-1]=='\\' || tmp[len-1]=='/') ) tmp[len-1] = '\0';
+ res = _stati64(tmp, &st);
+ if (res) return(0);
#else
struct stat st;
if (stat(name,&st)) return(0);
diff --git a/source/blender/blenlib/intern/winstuff.c b/source/blender/blenlib/intern/winstuff.c
index f2261546f5c..81a635205f9 100644
--- a/source/blender/blenlib/intern/winstuff.c
+++ b/source/blender/blenlib/intern/winstuff.c
@@ -33,7 +33,6 @@
#include <stdlib.h>
#include <stdio.h>
-#include "MEM_guardedalloc.h"
#include "BLI_path_util.h"
#include "BLI_string.h"
diff --git a/source/blender/blenloader/BLO_readfile.h b/source/blender/blenloader/BLO_readfile.h
index d6418f426c8..eeced13b57b 100644
--- a/source/blender/blenloader/BLO_readfile.h
+++ b/source/blender/blenloader/BLO_readfile.h
@@ -111,38 +111,6 @@ BlendFileData *BLO_read_from_memfile(struct Main *oldmain, const char *filename,
void
BLO_blendfiledata_free(
BlendFileData *bfd);
-
-/**
- * Convert an idcode into a name.
- *
- * @param code The code to convert.
- * @return A static string representing the name of
- * the code.
- */
- char*
-BLO_idcode_to_name(
- int code);
-
-/**
- * Convert an idcode into a name (plural).
- *
- * @param code The code to convert.
- * @return A static string representing the name of
- * the code.
- */
- char*
-BLO_idcode_to_name_plural(
- int code);
-
-/**
- * Convert a name into an idcode (ie. ID_SCE)
- *
- * @param name The name to convert.
- * @return The code for the name, or 0 if invalid.
- */
- int
-BLO_idcode_from_name(
- char *name);
/**
* Open a blendhandle from a file path.
diff --git a/source/blender/blenloader/Makefile b/source/blender/blenloader/Makefile
index 4ffc558f889..069bad4d371 100644
--- a/source/blender/blenloader/Makefile
+++ b/source/blender/blenloader/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/blenloader/intern/Makefile b/source/blender/blenloader/intern/Makefile
index f4690fcc066..fe178ea2610 100644
--- a/source/blender/blenloader/intern/Makefile
+++ b/source/blender/blenloader/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/blenloader/intern/readblenentry.c b/source/blender/blenloader/intern/readblenentry.c
index 38e9a584952..d66d802c8ee 100644
--- a/source/blender/blenloader/intern/readblenentry.c
+++ b/source/blender/blenloader/intern/readblenentry.c
@@ -46,6 +46,7 @@
#include "BKE_main.h"
#include "BKE_library.h" // for free_main
+#include "BKE_idcode.h"
#include "BKE_report.h"
#include "BLO_readfile.h"
@@ -61,112 +62,9 @@
#include "BLI_winstuff.h"
#endif
- /**
- * IDType stuff, I plan to move this
- * out into its own file + prefix, and
- * make sure all IDType handling goes through
- * these routines.
- */
-
-typedef struct {
- unsigned short code;
- char *name, *plural;
-
- int flags;
-#define IDTYPE_FLAGS_ISLINKABLE (1<<0)
-} IDType;
-
-/* plural need to match rna_main.c's MainCollectionDef */
-static IDType idtypes[]= {
- { ID_AC, "Action", "actions", IDTYPE_FLAGS_ISLINKABLE},
- { ID_AR, "Armature", "armatures", IDTYPE_FLAGS_ISLINKABLE},
- { ID_BR, "Brush", "brushes", IDTYPE_FLAGS_ISLINKABLE},
- { ID_CA, "Camera", "cameras", IDTYPE_FLAGS_ISLINKABLE},
- { ID_CU, "Curve", "curves", IDTYPE_FLAGS_ISLINKABLE},
- { ID_GD, "GPencil", "gpencil", IDTYPE_FLAGS_ISLINKABLE}, /* rename gpencil */
- { ID_GR, "Group", "groups", IDTYPE_FLAGS_ISLINKABLE},
- { ID_ID, "ID", "ids", 0}, /* plural is fake */
- { ID_IM, "Image", "images", IDTYPE_FLAGS_ISLINKABLE},
- { ID_IP, "Ipo", "ipos", IDTYPE_FLAGS_ISLINKABLE}, /* deprecated */
- { ID_KE, "Key", "keys", 0},
- { ID_LA, "Lamp", "lamps", IDTYPE_FLAGS_ISLINKABLE},
- { ID_LI, "Library", "libraries", 0},
- { ID_LT, "Lattice", "lattices", IDTYPE_FLAGS_ISLINKABLE},
- { ID_MA, "Material", "materials", IDTYPE_FLAGS_ISLINKABLE},
- { ID_MB, "Metaball", "metaballs", IDTYPE_FLAGS_ISLINKABLE},
- { ID_ME, "Mesh", "meshes", IDTYPE_FLAGS_ISLINKABLE},
- { ID_NT, "NodeTree", "node_groups", IDTYPE_FLAGS_ISLINKABLE},
- { ID_OB, "Object", "objects", IDTYPE_FLAGS_ISLINKABLE},
- { ID_PA, "ParticleSettings", "particles", 0},
- { ID_SCE, "Scene", "scenes", IDTYPE_FLAGS_ISLINKABLE},
- { ID_SCR, "Screen", "screens", 0},
- { ID_SEQ, "Sequence", "sequences", 0}, /* not actually ID data */
- { ID_SO, "Sound", "sounds", IDTYPE_FLAGS_ISLINKABLE},
- { ID_TE, "Texture", "textures", IDTYPE_FLAGS_ISLINKABLE},
- { ID_TXT, "Text", "texts", IDTYPE_FLAGS_ISLINKABLE},
- { ID_VF, "VFont", "fonts", IDTYPE_FLAGS_ISLINKABLE},
- { ID_WO, "World", "worlds", IDTYPE_FLAGS_ISLINKABLE},
- { ID_WM, "WindowManager", "window_managers", 0},
- { ID_WV, "Wave", "waves", 0}, /* deprecated */
-};
-static int nidtypes= sizeof(idtypes)/sizeof(idtypes[0]);
-
/* local prototypes --------------------- */
void BLO_blendhandle_print_sizes(BlendHandle *, void *);
-
-static IDType *idtype_from_name(char *str)
-{
- int i= nidtypes;
-
- while (i--)
- if (BLI_streq(str, idtypes[i].name))
- return &idtypes[i];
-
- return NULL;
-}
-static IDType *idtype_from_code(int code)
-{
- int i= nidtypes;
-
- while (i--)
- if (code==idtypes[i].code)
- return &idtypes[i];
-
- return NULL;
-}
-
-static int bheadcode_is_idcode(int code)
-{
- return idtype_from_code(code)?1:0;
-}
-
-static int idcode_is_linkable(int code) {
- IDType *idt= idtype_from_code(code);
- return idt?(idt->flags&IDTYPE_FLAGS_ISLINKABLE):0;
-}
-
-char *BLO_idcode_to_name(int code)
-{
- IDType *idt= idtype_from_code(code);
-
- return idt?idt->name:NULL;
-}
-
-int BLO_idcode_from_name(char *name)
-{
- IDType *idt= idtype_from_name(name);
-
- return idt?idt->code:0;
-}
-
-char *BLO_idcode_to_name_plural(int code)
-{
- IDType *idt= idtype_from_code(code);
-
- return idt?idt->plural:NULL;
-}
-
/* Access routines used by filesel. */
BlendHandle *BLO_blendhandle_from_file(char *file)
@@ -309,13 +207,13 @@ LinkNode *BLO_blendhandle_get_linkable_groups(BlendHandle *bh)
for (bhead= blo_firstbhead(fd); bhead; bhead= blo_nextbhead(fd, bhead)) {
if (bhead->code==ENDB) {
break;
- } else if (bheadcode_is_idcode(bhead->code)) {
- if (idcode_is_linkable(bhead->code)) {
- char *str= BLO_idcode_to_name(bhead->code);
+ } else if (BKE_idcode_is_valid(bhead->code)) {
+ if (BKE_idcode_is_linkable(bhead->code)) {
+ const char *str= BKE_idcode_to_name(bhead->code);
- if (!BLI_ghash_haskey(gathered, str)) {
+ if (!BLI_ghash_haskey(gathered, (void *)str)) {
BLI_linklist_prepend(&names, strdup(str));
- BLI_ghash_insert(gathered, str, NULL);
+ BLI_ghash_insert(gathered, (void *)str, NULL);
}
}
}
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 96bb83df11b..44cc6b5c1d9 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -47,26 +47,19 @@
#endif
#include "DNA_anim_types.h"
-#include "DNA_action_types.h"
#include "DNA_armature_types.h"
-#include "DNA_ID.h"
#include "DNA_actuator_types.h"
-#include "DNA_boid_types.h"
#include "DNA_brush_types.h"
#include "DNA_camera_types.h"
#include "DNA_cloth_types.h"
-#include "DNA_color_types.h"
#include "DNA_controller_types.h"
#include "DNA_constraint_types.h"
-#include "DNA_curve_types.h"
-#include "DNA_customdata_types.h"
#include "DNA_effect_types.h"
#include "DNA_fileglobal_types.h"
#include "DNA_genfile.h"
#include "DNA_group_types.h"
#include "DNA_gpencil_types.h"
#include "DNA_ipo_types.h"
-#include "DNA_image_types.h"
#include "DNA_key_types.h"
#include "DNA_lattice_types.h"
#include "DNA_lamp_types.h"
@@ -74,16 +67,10 @@
#include "DNA_material_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
-#include "DNA_modifier_types.h"
#include "DNA_nla_types.h"
#include "DNA_node_types.h"
-#include "DNA_object_types.h"
-#include "DNA_object_force.h"
#include "DNA_object_fluidsim.h" // NT
-#include "DNA_outliner_types.h"
-#include "DNA_object_force.h"
#include "DNA_packedFile_types.h"
-#include "DNA_particle_types.h"
#include "DNA_property_types.h"
#include "DNA_text_types.h"
#include "DNA_view3d_types.h"
@@ -95,13 +82,11 @@
#include "DNA_smoke_types.h"
#include "DNA_sound_types.h"
#include "DNA_space_types.h"
-#include "DNA_texture_types.h"
-#include "DNA_userdef_types.h"
#include "DNA_vfont_types.h"
#include "DNA_world_types.h"
-#include "DNA_windowmanager_types.h"
#include "MEM_guardedalloc.h"
+
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BLI_cellalloc.h"
@@ -123,6 +108,7 @@
#include "BKE_image.h"
#include "BKE_lattice.h"
#include "BKE_library.h" // for which_libbase
+#include "BKE_idcode.h"
#include "BKE_main.h" // for Main
#include "BKE_mesh.h" // for ME_ defines (patching)
#include "BKE_modifier.h"
@@ -140,7 +126,6 @@
#include "BKE_sequencer.h"
#include "BKE_texture.h" // for open_plugin_tex
#include "BKE_utildefines.h" // SWITCH_INT DATA ENDB DNA1 O_BINARY GLOB USER TEST REND
-#include "BKE_ipo.h"
#include "BKE_sound.h"
//XXX #include "BIF_butspace.h" // badlevel, for do_versions, patching event codes
@@ -157,7 +142,7 @@
#include <errno.h>
/*
- Remark: still a weak point is the newadress() function, that doesnt solve reading from
+ Remark: still a weak point is the newaddress() function, that doesnt solve reading from
multiple files at the same time
(added remark: oh, i thought that was solved? will look at that... (ton)
@@ -176,7 +161,7 @@ READ
- read associated 'direct data'
- link direct data (internal and to LibBlock)
- read FileGlobal
-- read USER data, only when indicated (file is ~/.B.blend or .B25.blend)
+- read USER data, only when indicated (file is ~/X.XX/startup.blend)
- free file
- per Library (per Main)
- read file
@@ -1541,7 +1526,6 @@ static void lib_link_brush(FileData *fd, Main *main)
brush->id.flag -= LIB_NEEDLINK;
brush->mtex.tex= newlibadr_us(fd, brush->id.lib, brush->mtex.tex);
- brush->image_icon= newlibadr_us(fd, brush->id.lib, brush->image_icon);
brush->clone.image= newlibadr_us(fd, brush->id.lib, brush->clone.image);
}
}
@@ -1557,6 +1541,9 @@ static void direct_link_brush(FileData *fd, Brush *brush)
direct_link_curvemapping(fd, brush->curve);
else
brush_curve_preset(brush, CURVE_PRESET_SHARP);
+
+ brush->preview= NULL;
+ brush->icon_imbuf= NULL;
}
static void direct_link_script(FileData *fd, Script *script)
@@ -3468,6 +3455,7 @@ static void direct_link_mesh(FileData *fd, Mesh *mesh)
mesh->mloopuv= newdataadr(fd, mesh->mloopuv);
mesh->mtpoly= newdataadr(fd, mesh->mtpoly);
+ /* animdata */
mesh->adt= newdataadr(fd, mesh->adt);
direct_link_animdata(fd, mesh->adt);
@@ -4299,10 +4287,9 @@ static void composite_patch(bNodeTree *ntree, Scene *scene)
static void link_paint(FileData *fd, Scene *sce, Paint *p)
{
- if(p && p->brushes) {
- int i;
- for(i = 0; i < p->brush_count; ++i)
- p->brushes[i]= newlibadr_us(fd, sce->id.lib, p->brushes[i]);
+ if(p) {
+ p->brush= newlibadr_us(fd, sce->id.lib, p->brush);
+ p->paint_cursor= NULL;
}
}
@@ -4418,13 +4405,8 @@ static void link_recurs_seq(FileData *fd, ListBase *lb)
static void direct_link_paint(FileData *fd, Paint **paint)
{
Paint *p;
-
+/* TODO. is this needed */
p= (*paint)= newdataadr(fd, (*paint));
- if(p) {
- p->paint_cursor= NULL;
- p->brushes= newdataadr(fd, p->brushes);
- test_pointer_array(fd, (void**)&p->brushes);
- }
}
static void direct_link_scene(FileData *fd, Scene *sce)
@@ -4460,9 +4442,6 @@ static void direct_link_scene(FileData *fd, Scene *sce)
direct_link_paint(fd, (Paint**)&sce->toolsettings->vpaint);
direct_link_paint(fd, (Paint**)&sce->toolsettings->wpaint);
- sce->toolsettings->imapaint.paint.brushes= newdataadr(fd, sce->toolsettings->imapaint.paint.brushes);
- test_pointer_array(fd, (void**)&sce->toolsettings->imapaint.paint.brushes);
-
sce->toolsettings->imapaint.paintcursor= NULL;
sce->toolsettings->particle.paintcursor= NULL;
}
@@ -4498,11 +4477,6 @@ static void direct_link_scene(FileData *fd, Scene *sce)
seq->strip= newdataadr(fd, seq->strip);
if(seq->strip && seq->strip->done==0) {
seq->strip->done= 1;
- seq->strip->tstripdata = 0;
- seq->strip->tstripdata_startstill = 0;
- seq->strip->tstripdata_endstill = 0;
- seq->strip->ibuf_startstill = 0;
- seq->strip->ibuf_endstill = 0;
if(seq->type == SEQ_IMAGE ||
seq->type == SEQ_MOVIE ||
@@ -9465,7 +9439,6 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
idproperties_fix_group_lengths(main->mat);
idproperties_fix_group_lengths(main->tex);
idproperties_fix_group_lengths(main->image);
- idproperties_fix_group_lengths(main->wave);
idproperties_fix_group_lengths(main->latt);
idproperties_fix_group_lengths(main->lamp);
idproperties_fix_group_lengths(main->camera);
@@ -11030,12 +11003,13 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
}
- /* put 2.50 compatibility code here until next subversion bump */
+ if (main->versionfile < 253)
{
Object *ob;
Scene *scene;
bScreen *sc;
Tex *tex;
+ Brush *brush;
for (sc= main->screen.first; sc; sc= sc->id.next) {
ScrArea *sa;
@@ -11144,17 +11118,16 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
if(scene) {
Sequence *seq;
SEQ_BEGIN(scene->ed, seq) {
- seq->sat= 1.0f;
+ if(seq->sat==0.0f) {
+ seq->sat= 1.0f;
+ }
}
SEQ_END
}
}
- }
- {
/* GSOC 2010 Sculpt - New settings for Brush */
- Brush *brush;
for (brush= main->brush.first; brush; brush= brush->id.next) {
/* Sanity Check */
@@ -11227,6 +11200,81 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
}
}
+ /* GSOC Sculpt 2010 - Sanity check on Sculpt/Paint settings */
+ if (main->versionfile < 253) {
+ Scene *sce;
+ for (sce= main->scene.first; sce; sce= sce->id.next) {
+ if (sce->toolsettings->sculpt_paint_unified_alpha == 0)
+ sce->toolsettings->sculpt_paint_unified_alpha = 0.5f;
+
+ if (sce->toolsettings->sculpt_paint_unified_unprojected_radius == 0)
+ sce->toolsettings->sculpt_paint_unified_unprojected_radius = 0.125f;
+
+ if (sce->toolsettings->sculpt_paint_unified_size == 0)
+ sce->toolsettings->sculpt_paint_unified_size = 35;
+ }
+ }
+
+ if (main->versionfile < 253 || (main->versionfile == 253 && main->subversionfile < 1))
+ {
+ Object *ob;
+
+ for(ob = main->object.first; ob; ob = ob->id.next) {
+ ModifierData *md;
+ for(md= ob->modifiers.first; md; md= md->next) {
+ if (md->type == eModifierType_Smoke) {
+ SmokeModifierData *smd = (SmokeModifierData *)md;
+
+ if((smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain)
+ {
+ smd->domain->vorticity = 2.0f;
+ smd->domain->time_scale = 1.0f;
+
+ if(!(smd->domain->flags & (1<<4)))
+ continue;
+
+ /* delete old MOD_SMOKE_INITVELOCITY flag */
+ smd->domain->flags &= ~(1<<4);
+
+ /* for now just add it to all flow objects in the scene */
+ {
+ Object *ob2;
+ for(ob2 = main->object.first; ob2; ob2 = ob2->id.next) {
+ ModifierData *md2;
+ for(md2= ob2->modifiers.first; md2; md2= md2->next) {
+ if (md2->type == eModifierType_Smoke) {
+ SmokeModifierData *smd2 = (SmokeModifierData *)md2;
+
+ if((smd2->type & MOD_SMOKE_TYPE_FLOW) && smd2->flow)
+ {
+ smd2->flow->flags |= MOD_SMOKE_FLOW_INITVELOCITY;
+ }
+ }
+ }
+ }
+ }
+
+ }
+ else if((smd->type & MOD_SMOKE_TYPE_FLOW) && smd->flow)
+ {
+ smd->flow->vel_multi = 1.0f;
+ }
+
+ }
+ }
+ }
+ }
+
+ /* put compatibility code here until next subversion bump */
+ {
+ Brush *br;
+ for(br= main->brush.first; br; br= br->id.next) {
+ if(br->ob_mode==0)
+ br->ob_mode= (OB_MODE_SCULPT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT|OB_MODE_VERTEX_PAINT);
+ }
+
+ }
+
/* WATCH IT!!!: pointers from libdata have not been converted yet here! */
/* WATCH IT 2!: Userdef struct init has to be in editors/interface/resources.c! */
@@ -11517,7 +11565,7 @@ static void expand_doit(FileData *fd, Main *mainvar, void *old)
else {
/* The line below was commented by Ton (I assume), when Hos did the merge from the orange branch. rev 6568
* This line is NEEDED, the case is that you have 3 blend files...
- * user.blend, lib.blend and lib_indirect.blend - if user.blend alredy references a "tree" from
+ * user.blend, lib.blend and lib_indirect.blend - if user.blend already references a "tree" from
* lib_indirect.blend but lib.blend does too, linking in a Scene or Group from lib.blend can result in an
* empty without the dupli group referenced. Once you save and reload the group would appier. - Campbell */
/* This crashes files, must look further into it */
@@ -11839,6 +11887,9 @@ static void expand_mesh(FileData *fd, Main *mainvar, Mesh *me)
TFace *tf;
int a, i;
+ if(me->adt)
+ expand_animdata(fd, mainvar, me->adt);
+
for(a=0; a<me->totcol; a++) {
expand_doit(fd, mainvar, me->mat[a]);
}
@@ -12301,7 +12352,7 @@ static void give_base_to_objects(Main *mainvar, Scene *sce, Library *lib, int is
/* IF below is quite confusing!
if we are appending, but this object wasnt just added allong with a group,
- then this is alredy used indirectly in the scene somewhere else and we didnt just append it.
+ then this is already used indirectly in the scene somewhere else and we didnt just append it.
(ob->id.flag & LIB_PRE_EXISTING)==0 means that this is a newly appended object - Campbell */
if (is_group_append==0 || (ob->id.flag & LIB_PRE_EXISTING)==0) {
@@ -12510,9 +12561,7 @@ static void append_do_cursor(Scene *scene, Library *curlib, short flag)
return;
/* move from the center of the appended objects to cursor */
- centerloc[0]= (min[0]+max[0])/2;
- centerloc[1]= (min[1]+max[1])/2;
- centerloc[2]= (min[2]+max[2])/2;
+ mid_v3_v3v3(centerloc, min, max);
curs = scene->cursor;
VECSUB(centerloc,curs,centerloc);
@@ -12615,7 +12664,7 @@ void BLO_script_library_append(BlendHandle **bh, char *dir, char *name,
/* do we need to do this? */
if(scene)
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
*bh= (BlendHandle*)fd;
}
@@ -12725,8 +12774,8 @@ static void read_libraries(FileData *basefd, ListBase *mainlist)
append_id_part(fd, mainptr, id, &realid);
if (!realid) {
- BKE_reportf(fd->reports, RPT_ERROR, "LIB ERROR: %s:'%s' missing from '%s'\n", BLO_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath);
- if(!G.background && basefd->reports) printf("LIB ERROR: %s:'%s' missing from '%s'\n", BLO_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath);
+ BKE_reportf(fd->reports, RPT_ERROR, "LIB ERROR: %s:'%s' missing from '%s'\n", BKE_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath);
+ if(!G.background && basefd->reports) printf("LIB ERROR: %s:'%s' missing from '%s'\n", BKE_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath);
}
change_idid_adr(mainlist, basefd, id, realid);
@@ -12761,8 +12810,8 @@ static void read_libraries(FileData *basefd, ListBase *mainlist)
ID *idn= id->next;
if(id->flag & LIB_READ) {
BLI_remlink(lbarray[a], id);
- BKE_reportf(basefd->reports, RPT_ERROR, "LIB ERROR: %s:'%s' unread libblock missing from '%s'\n", BLO_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath);
- if(!G.background && basefd->reports)printf("LIB ERROR: %s:'%s' unread libblock missing from '%s'\n", BLO_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath);
+ BKE_reportf(basefd->reports, RPT_ERROR, "LIB ERROR: %s:'%s' unread libblock missing from '%s'\n", BKE_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath);
+ if(!G.background && basefd->reports)printf("LIB ERROR: %s:'%s' unread libblock missing from '%s'\n", BKE_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath);
change_idid_adr(mainlist, basefd, id, NULL);
MEM_freeN(id);
diff --git a/source/blender/blenloader/intern/undofile.c b/source/blender/blenloader/intern/undofile.c
index 40b03a78f34..9cdf8613011 100644
--- a/source/blender/blenloader/intern/undofile.c
+++ b/source/blender/blenloader/intern/undofile.c
@@ -36,10 +36,7 @@
#include "MEM_guardedalloc.h"
#include "DNA_listBase.h"
-#include "DNA_userdef_types.h"
-#include "BKE_utildefines.h"
-#include "BKE_global.h"
#include "BLO_undofile.h"
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 590a331c426..cd5e31cc1d4 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -65,7 +65,7 @@ Any case: direct data is ALWAYS after the lib block
- write TEST (128x128, blend file preview, optional)
- write FileGlobal (some global vars)
- write SDNA
-- write USER if filename is ~/.B.blend
+- write USER if filename is ~/X.XX/config/startup.blend
*/
@@ -88,38 +88,26 @@ Any case: direct data is ALWAYS after the lib block
#include "DNA_anim_types.h"
#include "DNA_armature_types.h"
-#include "DNA_action_types.h"
#include "DNA_actuator_types.h"
-#include "DNA_boid_types.h"
#include "DNA_brush_types.h"
#include "DNA_camera_types.h"
#include "DNA_cloth_types.h"
-#include "DNA_color_types.h"
#include "DNA_constraint_types.h"
#include "DNA_controller_types.h"
-#include "DNA_curve_types.h"
-#include "DNA_customdata_types.h"
-#include "DNA_effect_types.h"
#include "DNA_genfile.h"
#include "DNA_group_types.h"
#include "DNA_gpencil_types.h"
-#include "DNA_image_types.h"
-#include "DNA_ipo_types.h" // XXX depreceated - animsys
#include "DNA_fileglobal_types.h"
#include "DNA_key_types.h"
#include "DNA_lattice_types.h"
-#include "DNA_listBase.h" /* for Listbase, the type of samples, ...*/
#include "DNA_lamp_types.h"
#include "DNA_meta_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_material_types.h"
-#include "DNA_modifier_types.h"
-#include "DNA_nla_types.h"
#include "DNA_node_types.h"
#include "DNA_object_types.h"
#include "DNA_object_force.h"
-#include "DNA_outliner_types.h"
#include "DNA_packedFile_types.h"
#include "DNA_particle_types.h"
#include "DNA_property_types.h"
@@ -131,11 +119,9 @@ Any case: direct data is ALWAYS after the lib block
#include "DNA_space_types.h"
#include "DNA_screen_types.h"
#include "DNA_sound_types.h"
-#include "DNA_texture_types.h"
#include "DNA_text_types.h"
#include "DNA_view3d_types.h"
#include "DNA_vfont_types.h"
-#include "DNA_userdef_types.h"
#include "DNA_world_types.h"
#include "DNA_windowmanager_types.h"
@@ -146,23 +132,16 @@ Any case: direct data is ALWAYS after the lib block
#include "BKE_action.h"
#include "BKE_blender.h"
-#include "BKE_cloth.h"
#include "BKE_curve.h"
-#include "BKE_customdata.h"
#include "BKE_constraint.h"
#include "BKE_global.h" // for G
#include "BKE_library.h" // for set_listbasepointers
#include "BKE_main.h"
#include "BKE_node.h"
-#include "BKE_packedFile.h" // for packAll
-#include "BKE_pointcache.h"
#include "BKE_report.h"
-#include "BKE_screen.h" // for waitcursor
#include "BKE_sequencer.h"
-#include "BKE_sound.h" /* ... and for samples */
#include "BKE_utildefines.h" // for defines
#include "BKE_modifier.h"
-#include "BKE_idprop.h"
#include "BKE_fcurve.h"
#include "BLO_writefile.h"
@@ -1423,7 +1402,7 @@ static void write_curves(WriteData *wd, ListBase *idbase)
if(cu->vfont) {
writedata(wd, DATA, amount_of_chars(cu->str)+1, cu->str);
- writestruct(wd, DATA, "CharInfo", cu->len, cu->strinfo);
+ writestruct(wd, DATA, "CharInfo", cu->len+1, cu->strinfo);
writestruct(wd, DATA, "TextBox", cu->totbox, cu->tb);
}
else {
@@ -1538,6 +1517,7 @@ static void write_meshs(WriteData *wd, ListBase *idbase)
/* direct data */
if (mesh->id.properties) IDP_WriteProperty(mesh->id.properties, wd);
+ if (mesh->adt) write_animdata(wd, mesh->adt);
writedata(wd, DATA, sizeof(void *)*mesh->totcol, mesh->mat);
@@ -1771,11 +1751,6 @@ static void write_lamps(WriteData *wd, ListBase *idbase)
}
}
-static void write_paint(WriteData *wd, Paint *p)
-{
- if(p && p->brushes)
- writedata(wd, DATA, p->brush_count * sizeof(Brush*), p->brushes);
-}
static void write_scenes(WriteData *wd, ListBase *scebase)
{
@@ -1810,18 +1785,15 @@ static void write_scenes(WriteData *wd, ListBase *scebase)
writestruct(wd, DATA, "ToolSettings", 1, tos);
if(tos->vpaint) {
writestruct(wd, DATA, "VPaint", 1, tos->vpaint);
- write_paint(wd, &tos->vpaint->paint);
}
if(tos->wpaint) {
writestruct(wd, DATA, "VPaint", 1, tos->wpaint);
- write_paint(wd, &tos->wpaint->paint);
}
if(tos->sculpt) {
writestruct(wd, DATA, "Sculpt", 1, tos->sculpt);
- write_paint(wd, &tos->sculpt->paint);
}
- write_paint(wd, &tos->imapaint.paint);
+ // write_paint(wd, &tos->imapaint.paint);
ed= sce->ed;
if(ed) {
diff --git a/source/blender/blenpluginapi/CMakeLists.txt b/source/blender/blenpluginapi/CMakeLists.txt
index 589c97d2bb6..2699b3b7c3b 100644
--- a/source/blender/blenpluginapi/CMakeLists.txt
+++ b/source/blender/blenpluginapi/CMakeLists.txt
@@ -40,4 +40,3 @@ IF(WITH_QUICKTIME)
ENDIF(WITH_QUICKTIME)
BLENDERLIB(bf_blenpluginapi "${SRC}" "${INC}")
-#env.BlenderLib ( libname = 'bf_blenpluginapi', sources = sources, includes = Split(incs), defines = defs, libtype=['core', 'player'], priority = [75, 35] )
diff --git a/source/blender/blenpluginapi/Makefile b/source/blender/blenpluginapi/Makefile
index 83678309b45..c91161d8cfd 100644
--- a/source/blender/blenpluginapi/Makefile
+++ b/source/blender/blenpluginapi/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/blenpluginapi/intern/Makefile b/source/blender/blenpluginapi/intern/Makefile
index 20a61e9a25c..696462f3f46 100644
--- a/source/blender/blenpluginapi/intern/Makefile
+++ b/source/blender/blenpluginapi/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/collada/DocumentExporter.cpp b/source/blender/collada/DocumentExporter.cpp
index 7a994d6b418..ca3aada80c0 100644
--- a/source/blender/collada/DocumentExporter.cpp
+++ b/source/blender/collada/DocumentExporter.cpp
@@ -1735,7 +1735,7 @@ public:
twoSided = true;
}
if (twoSided)
- ep.addExtraTechniqueParameter("GOOGLEEARTH", "double_sided", 1);
+ ep.addExtraTechniqueParameter("GOOGLEEARTH", "show_double_sided", 1);
ep.addExtraTechniques(mSW);
ep.closeProfile();
@@ -1774,6 +1774,7 @@ public:
for (int a = 0; a < MAX_MTEX; a++) {
if (ma->mtex[a] &&
+ ma->mtex[a]->tex &&
ma->mtex[a]->tex->type == TEX_IMAGE &&
ma->mtex[a]->texco == TEXCO_UV){
indices.push_back(a);
diff --git a/source/blender/collada/DocumentImporter.cpp b/source/blender/collada/DocumentImporter.cpp
index a415b90ff08..b9052d23511 100644
--- a/source/blender/collada/DocumentImporter.cpp
+++ b/source/blender/collada/DocumentImporter.cpp
@@ -216,6 +216,7 @@ static int set_parent(Object *ob, Object *par, bContext *C, bool is_parent_space
return false;
Object workob;
+ Main *bmain = CTX_data_main(C);
Scene *sce = CTX_data_scene(C);
ob->parent = par;
@@ -243,8 +244,8 @@ static int set_parent(Object *ob, Object *par, bContext *C, bool is_parent_space
ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA;
par->recalc |= OB_RECALC_OB;
- DAG_scene_sort(sce);
- DAG_ids_flush_update(0);
+ DAG_scene_sort(bmain, sce);
+ DAG_ids_flush_update(bmain, 0);
WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
return true;
@@ -611,9 +612,10 @@ private:
void link_armature(bContext *C, Object *ob, std::map<COLLADAFW::UniqueId, COLLADAFW::Node*>& joint_by_uid,
TransformReader *tm)
{
+ Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
- ModifierData *md = ED_object_modifier_add(NULL, scene, ob, NULL, eModifierType_Armature);
+ ModifierData *md = ED_object_modifier_add(NULL, bmain, scene, ob, NULL, eModifierType_Armature);
((ArmatureModifierData *)md)->object = ob_arm;
copy_m4_m4(ob->obmat, bind_shape_matrix);
@@ -630,8 +632,8 @@ private:
ob->recalc |= OB_RECALC_OB|OB_RECALC_DATA;
- DAG_scene_sort(scene);
- DAG_ids_flush_update(0);
+ DAG_scene_sort(bmain, scene);
+ DAG_ids_flush_update(bmain, 0);
WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
#endif
@@ -3132,7 +3134,7 @@ public:
where_is_object(scene, job);
// after parenting and layer change
- DAG_scene_sort(scene);
+ DAG_scene_sort(CTX_data_main(C), scene);
joint_objects[node->getUniqueId()] = job;
}
diff --git a/source/blender/collada/SConscript b/source/blender/collada/SConscript
index b86e7312698..91c3a381272 100644
--- a/source/blender/collada/SConscript
+++ b/source/blender/collada/SConscript
@@ -14,7 +14,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2006, Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/Makefile b/source/blender/editors/Makefile
index e259168a4ef..168d919e6de 100644
--- a/source/blender/editors/Makefile
+++ b/source/blender/editors/Makefile
@@ -17,7 +17,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) Blender Foundation.
# All rights reserved.
diff --git a/source/blender/editors/animation/Makefile b/source/blender/editors/animation/Makefile
index a7f36aa58ac..f120091e917 100644
--- a/source/blender/editors/animation/Makefile
+++ b/source/blender/editors/animation/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/animation/anim_channels_edit.c b/source/blender/editors/animation/anim_channels_edit.c
index 21bdb591df9..e229de42006 100644
--- a/source/blender/editors/animation/anim_channels_edit.c
+++ b/source/blender/editors/animation/anim_channels_edit.c
@@ -33,6 +33,7 @@
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_key_types.h"
+#include "DNA_gpencil_types.h"
#include "RNA_access.h"
#include "RNA_define.h"
@@ -2005,7 +2006,6 @@ void ED_keymap_animchannels(wmKeyConfig *keyconf)
/* delete */
WM_keymap_add_item(keymap, "ANIM_OT_channels_delete", XKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "ANIM_OT_channels_delete", DELKEY, KM_PRESS, 0, 0);
- WM_keymap_add_item(keymap, "ANIM_OT_channels_delete", BACKSPACEKEY, KM_PRESS, 0, 0);
/* settings */
WM_keymap_add_item(keymap, "ANIM_OT_channels_setting_toggle", WKEY, KM_PRESS, KM_SHIFT, 0);
diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c
index a9c9830f07f..0ff75c1cded 100644
--- a/source/blender/editors/animation/anim_filter.c
+++ b/source/blender/editors/animation/anim_filter.c
@@ -49,7 +49,6 @@
#include "DNA_anim_types.h"
#include "DNA_armature_types.h"
-#include "DNA_constraint_types.h"
#include "DNA_camera_types.h"
#include "DNA_lamp_types.h"
#include "DNA_lattice_types.h"
@@ -64,6 +63,8 @@
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
#include "DNA_world_types.h"
+#include "DNA_gpencil_types.h"
+#include "DNA_object_types.h"
#include "MEM_guardedalloc.h"
@@ -80,7 +81,6 @@
#include "BKE_material.h"
#include "BKE_node.h"
#include "BKE_sequencer.h"
-#include "BKE_utildefines.h"
#include "ED_anim_api.h"
diff --git a/source/blender/editors/animation/anim_markers.c b/source/blender/editors/animation/anim_markers.c
index 65c67691560..719b46738d3 100644
--- a/source/blender/editors/animation/anim_markers.c
+++ b/source/blender/editors/animation/anim_markers.c
@@ -1201,7 +1201,6 @@ void ED_marker_keymap(wmKeyConfig *keyconf)
WM_keymap_verify_item(keymap, "MARKER_OT_select_all", AKEY, KM_PRESS, 0, 0);
WM_keymap_verify_item(keymap, "MARKER_OT_delete", XKEY, KM_PRESS, 0, 0);
WM_keymap_verify_item(keymap, "MARKER_OT_delete", DELKEY, KM_PRESS, 0, 0);
- WM_keymap_verify_item(keymap, "MARKER_OT_delete", BACKSPACEKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "MARKER_OT_move", GKEY, KM_PRESS, 0, 0);
#ifdef DURIAN_CAMERA_SWITCH
diff --git a/source/blender/editors/animation/anim_ops.c b/source/blender/editors/animation/anim_ops.c
index 11ba3cfffed..9570fd64433 100644
--- a/source/blender/editors/animation/anim_ops.c
+++ b/source/blender/editors/animation/anim_ops.c
@@ -163,7 +163,7 @@ void ANIM_OT_change_frame(wmOperatorType *ot)
ot->poll= change_frame_poll;
/* flags */
- ot->flag= OPTYPE_BLOCKING;
+ ot->flag= OPTYPE_BLOCKING|OPTYPE_UNDO;
/* rna */
RNA_def_int(ot->srna, "frame", 0, MINAFRAME, MAXFRAME, "Frame", "", MINAFRAME, MAXFRAME);
diff --git a/source/blender/editors/animation/drivers.c b/source/blender/editors/animation/drivers.c
index 3fc228e1c15..9edcf637cdc 100644
--- a/source/blender/editors/animation/drivers.c
+++ b/source/blender/editors/animation/drivers.c
@@ -389,7 +389,7 @@ static int add_driver_button_exec (bContext *C, wmOperator *op)
if (success) {
/* send updates */
- DAG_ids_flush_update(0);
+ DAG_ids_flush_update(CTX_data_main(C), 0);
WM_event_add_notifier(C, NC_ANIMATION|ND_FCURVES_ORDER, NULL); // XXX
}
@@ -440,7 +440,7 @@ static int remove_driver_button_exec (bContext *C, wmOperator *op)
if (success) {
/* send updates */
- DAG_ids_flush_update(0);
+ DAG_ids_flush_update(CTX_data_main(C), 0);
WM_event_add_notifier(C, NC_ANIMATION|ND_FCURVES_ORDER, NULL); // XXX
}
diff --git a/source/blender/editors/animation/fmodifier_ui.c b/source/blender/editors/animation/fmodifier_ui.c
index cd6714ec51f..191316711f4 100644
--- a/source/blender/editors/animation/fmodifier_ui.c
+++ b/source/blender/editors/animation/fmodifier_ui.c
@@ -119,7 +119,7 @@ static void draw_modifier__generator(uiLayout *layout, ID *id, FModifier *fcm, s
but= uiDefButR(block, MENU, B_FMODIFIER_REDRAW, NULL, 0, 0, width-30, UI_UNIT_Y, &ptr, "mode", -1, 0, 0, -1, -1, NULL);
uiButSetFunc(but, validate_fmodifier_cb, fcm, NULL);
- uiDefButR(block, TOG, B_FMODIFIER_REDRAW, NULL, 0, 0, width-30, UI_UNIT_Y, &ptr, "additive", -1, 0, 0, -1, -1, NULL);
+ uiDefButR(block, TOG, B_FMODIFIER_REDRAW, NULL, 0, 0, width-30, UI_UNIT_Y, &ptr, "use_additive", -1, 0, 0, -1, -1, NULL);
uiBlockEndAlign(block);
/* now add settings for individual modes */
@@ -226,7 +226,7 @@ static void draw_modifier__fn_generator(uiLayout *layout, ID *id, FModifier *fcm
/* add the settings */
col= uiLayoutColumn(layout, 1);
uiItemR(col, &ptr, "function_type", 0, "", 0);
- uiItemR(col, &ptr, "additive", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(col, &ptr, "use_additive", UI_ITEM_R_TOGGLE, NULL, 0);
col= uiLayoutColumn(layout, 0); // no grouping for now
uiItemR(col, &ptr, "amplitude", 0, NULL, 0);
@@ -254,14 +254,14 @@ static void draw_modifier__cycles(uiLayout *layout, ID *id, FModifier *fcm, shor
/* before range */
col= uiLayoutColumn(split, 1);
uiItemL(col, "Before:", 0);
- uiItemR(col, &ptr, "before_mode", 0, "", 0);
- uiItemR(col, &ptr, "before_cycles", 0, NULL, 0);
+ uiItemR(col, &ptr, "mode_before", 0, "", 0);
+ uiItemR(col, &ptr, "cycles_before", 0, NULL, 0);
/* after range */
col= uiLayoutColumn(split, 1);
uiItemL(col, "After:", 0);
- uiItemR(col, &ptr, "after_mode", 0, "", 0);
- uiItemR(col, &ptr, "after_cycles", 0, NULL, 0);
+ uiItemR(col, &ptr, "mode_after", 0, "", 0);
+ uiItemR(col, &ptr, "cycles_after", 0, NULL, 0);
}
/* --------------- */
@@ -276,14 +276,14 @@ static void draw_modifier__noise(uiLayout *layout, ID *id, FModifier *fcm, short
RNA_pointer_create(id, &RNA_FModifierNoise, fcm, &ptr);
/* blending mode */
- uiItemR(layout, &ptr, "modification", 0, NULL, 0);
+ uiItemR(layout, &ptr, "blend_type", 0, NULL, 0);
/* split into 2 columns */
split= uiLayoutSplit(layout, 0.5f, 0);
/* col 1 */
col= uiLayoutColumn(split, 0);
- uiItemR(col, &ptr, "size", 0, NULL, 0);
+ uiItemR(col, &ptr, "scale", 0, NULL, 0);
uiItemR(col, &ptr, "strength", 0, NULL, 0);
/* col 2 */
@@ -473,8 +473,8 @@ static void draw_modifier__envelope(uiLayout *layout, ID *id, FModifier *fcm, sh
uiItemR(col, &ptr, "reference_value", 0, NULL, 0);
row= uiLayoutRow(col, 1);
- uiItemR(row, &ptr, "default_minimum", 0, "Min", 0);
- uiItemR(row, &ptr, "default_maximum", 0, "Max", 0);
+ uiItemR(row, &ptr, "default_min", 0, "Min", 0);
+ uiItemR(row, &ptr, "default_max", 0, "Max", 0);
/* control points header */
// TODO: move this control-point control stuff to using the new special widgets for lists
@@ -526,13 +526,13 @@ static void draw_modifier__limits(uiLayout *layout, ID *id, FModifier *fcm, shor
/* x-minimum */
col= uiLayoutColumn(split, 1);
- uiItemR(col, &ptr, "use_minimum_x", 0, NULL, 0);
- uiItemR(col, &ptr, "minimum_x", 0, NULL, 0);
+ uiItemR(col, &ptr, "use_min_x", 0, NULL, 0);
+ uiItemR(col, &ptr, "min_x", 0, NULL, 0);
/* y-minimum*/
col= uiLayoutColumn(split, 1);
- uiItemR(col, &ptr, "use_minimum_y", 0, NULL, 0);
- uiItemR(col, &ptr, "minimum_y", 0, NULL, 0);
+ uiItemR(col, &ptr, "use_min_y", 0, NULL, 0);
+ uiItemR(col, &ptr, "min_y", 0, NULL, 0);
}
/* row 2: maximum */
@@ -544,13 +544,13 @@ static void draw_modifier__limits(uiLayout *layout, ID *id, FModifier *fcm, shor
/* x-minimum */
col= uiLayoutColumn(split, 1);
- uiItemR(col, &ptr, "use_maximum_x", 0, NULL, 0);
- uiItemR(col, &ptr, "maximum_x", 0, NULL, 0);
+ uiItemR(col, &ptr, "use_max_x", 0, NULL, 0);
+ uiItemR(col, &ptr, "max_x", 0, NULL, 0);
/* y-minimum*/
col= uiLayoutColumn(split, 1);
- uiItemR(col, &ptr, "use_maximum_y", 0, NULL, 0);
- uiItemR(col, &ptr, "maximum_y", 0, NULL, 0);
+ uiItemR(col, &ptr, "use_max_y", 0, NULL, 0);
+ uiItemR(col, &ptr, "max_y", 0, NULL, 0);
}
}
@@ -567,8 +567,8 @@ static void draw_modifier__stepped(uiLayout *layout, ID *id, FModifier *fcm, sho
/* block 1: "stepping" settings */
col= uiLayoutColumn(layout, 0);
- uiItemR(col, &ptr, "step_size", 0, NULL, 0);
- uiItemR(col, &ptr, "offset", 0, NULL, 0);
+ uiItemR(col, &ptr, "frame_step", 0, NULL, 0);
+ uiItemR(col, &ptr, "frame_offset", 0, NULL, 0);
/* block 2: start range settings */
col= uiLayoutColumn(layout, 1);
@@ -616,7 +616,7 @@ void ANIM_uiTemplate_fmodifier_draw (uiLayout *layout, ID *id, ListBase *modifie
uiBlockSetEmboss(block, UI_EMBOSSN);
/* expand */
- uiItemR(subrow, &ptr, "expanded", UI_ITEM_R_ICON_ONLY, "", 0);
+ uiItemR(subrow, &ptr, "show_expanded", UI_ITEM_R_ICON_ONLY, "", 0);
/* checkbox for 'active' status (for now) */
uiItemR(subrow, &ptr, "active", UI_ITEM_R_ICON_ONLY, "", 0);
@@ -633,7 +633,7 @@ void ANIM_uiTemplate_fmodifier_draw (uiLayout *layout, ID *id, ListBase *modifie
/* 'mute' button */
- uiItemR(subrow, &ptr, "muted", UI_ITEM_R_ICON_ONLY, "", 0);
+ uiItemR(subrow, &ptr, "mute", UI_ITEM_R_ICON_ONLY, "", 0);
uiBlockSetEmboss(block, UI_EMBOSSN);
diff --git a/source/blender/editors/animation/keyframes_draw.c b/source/blender/editors/animation/keyframes_draw.c
index 2290909325e..02e141a7a69 100644
--- a/source/blender/editors/animation/keyframes_draw.c
+++ b/source/blender/editors/animation/keyframes_draw.c
@@ -53,19 +53,14 @@
#include "DNA_node_types.h"
#include "DNA_particle_types.h"
#include "DNA_world_types.h"
+#include "DNA_gpencil_types.h"
-#include "BKE_action.h"
-#include "BKE_depsgraph.h"
-#include "BKE_fcurve.h"
#include "BKE_key.h"
#include "BKE_material.h"
-#include "BKE_object.h"
#include "BKE_global.h" // XXX remove me!
-#include "BKE_context.h"
#include "BKE_utildefines.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "UI_resources.h"
#include "UI_view2d.h"
diff --git a/source/blender/editors/animation/keyframes_edit.c b/source/blender/editors/animation/keyframes_edit.c
index 3175e9e34a7..17d674784f8 100644
--- a/source/blender/editors/animation/keyframes_edit.c
+++ b/source/blender/editors/animation/keyframes_edit.c
@@ -48,7 +48,6 @@
#include "DNA_scene_types.h"
#include "DNA_world_types.h"
-#include "BKE_action.h"
#include "BKE_fcurve.h"
#include "BKE_key.h"
#include "BKE_material.h"
diff --git a/source/blender/editors/animation/keyframes_general.c b/source/blender/editors/animation/keyframes_general.c
index abced485769..5073cfe08b8 100644
--- a/source/blender/editors/animation/keyframes_general.c
+++ b/source/blender/editors/animation/keyframes_general.c
@@ -40,9 +40,7 @@
#include "DNA_scene_types.h"
-#include "BKE_action.h"
#include "BKE_fcurve.h"
-#include "BKE_key.h"
#include "BKE_utildefines.h"
#include "ED_anim_api.h"
diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c
index f60181d7f6c..fc5649be869 100644
--- a/source/blender/editors/animation/keyframing.c
+++ b/source/blender/editors/animation/keyframing.c
@@ -45,15 +45,16 @@
#include "DNA_key_types.h"
#include "DNA_material_types.h"
#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
#include "BKE_animsys.h"
#include "BKE_action.h"
#include "BKE_constraint.h"
#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
+#include "BKE_main.h"
#include "BKE_nla.h"
#include "BKE_global.h"
-#include "BKE_utildefines.h"
#include "BKE_context.h"
#include "BKE_report.h"
#include "BKE_key.h"
@@ -1060,6 +1061,7 @@ static int modify_key_op_poll(bContext *C)
static int insert_key_exec (bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
KeyingSet *ks= NULL;
int type= RNA_int_get(op->ptr, "type");
@@ -1106,7 +1108,7 @@ static int insert_key_exec (bContext *C, wmOperator *op)
BKE_report(op->reports, RPT_WARNING, "Keying Set failed to insert any keyframes");
/* send updates */
- DAG_ids_flush_update(0);
+ DAG_ids_flush_update(bmain, 0);
return OPERATOR_FINISHED;
}
@@ -1202,6 +1204,7 @@ void ANIM_OT_keyframe_insert_menu (wmOperatorType *ot)
static int delete_key_exec (bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
KeyingSet *ks= NULL;
int type= RNA_int_get(op->ptr, "type");
@@ -1248,7 +1251,7 @@ static int delete_key_exec (bContext *C, wmOperator *op)
BKE_report(op->reports, RPT_WARNING, "Keying Set failed to remove any keyframes");
/* send updates */
- DAG_ids_flush_update(0);
+ DAG_ids_flush_update(bmain, 0);
return OPERATOR_FINISHED;
}
@@ -1287,6 +1290,7 @@ void ANIM_OT_keyframe_delete (wmOperatorType *ot)
static int delete_key_v3d_exec (bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
float cfra= (float)CFRA; // XXX for now, don't bother about all the yucky offset crap
@@ -1315,7 +1319,7 @@ static int delete_key_v3d_exec (bContext *C, wmOperator *op)
CTX_DATA_END;
/* send updates */
- DAG_ids_flush_update(0);
+ DAG_ids_flush_update(bmain, 0);
WM_event_add_notifier(C, NC_OBJECT|ND_KEYS, NULL);
@@ -1343,6 +1347,7 @@ void ANIM_OT_keyframe_delete_v3d (wmOperatorType *ot)
static int insert_key_button_exec (bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
PointerRNA ptr;
PropertyRNA *prop= NULL;
@@ -1400,7 +1405,7 @@ static int insert_key_button_exec (bContext *C, wmOperator *op)
if (success) {
/* send updates */
- DAG_ids_flush_update(0);
+ DAG_ids_flush_update(bmain, 0);
/* send notifiers that keyframes have been changed */
WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
@@ -1430,6 +1435,7 @@ void ANIM_OT_keyframe_insert_button (wmOperatorType *ot)
static int delete_key_button_exec (bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
PointerRNA ptr;
PropertyRNA *prop= NULL;
@@ -1470,7 +1476,7 @@ static int delete_key_button_exec (bContext *C, wmOperator *op)
if (success) {
/* send updates */
- DAG_ids_flush_update(0);
+ DAG_ids_flush_update(bmain, 0);
/* send notifiers that keyframes have been changed */
WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
diff --git a/source/blender/editors/animation/keyingsets.c b/source/blender/editors/animation/keyingsets.c
index 1c06266a148..ab236de9ac5 100644
--- a/source/blender/editors/animation/keyingsets.c
+++ b/source/blender/editors/animation/keyingsets.c
@@ -40,20 +40,14 @@
#include "BLI_dynstr.h"
#include "DNA_anim_types.h"
-#include "DNA_constraint_types.h"
#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
+#include "BKE_main.h"
#include "BKE_animsys.h"
-#include "BKE_action.h"
#include "BKE_context.h"
-#include "BKE_constraint.h"
#include "BKE_depsgraph.h"
-#include "BKE_fcurve.h"
-#include "BKE_utildefines.h"
-#include "BKE_context.h"
#include "BKE_report.h"
-#include "BKE_key.h"
-#include "BKE_material.h"
#include "ED_keyframing.h"
#include "ED_screen.h"
@@ -288,6 +282,7 @@ void ANIM_OT_keying_set_path_remove (wmOperatorType *ot)
static int add_keyingset_button_exec (bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
KeyingSet *ks = NULL;
PropertyRNA *prop= NULL;
@@ -358,7 +353,7 @@ static int add_keyingset_button_exec (bContext *C, wmOperator *op)
if (success) {
/* send updates */
- DAG_ids_flush_update(0);
+ DAG_ids_flush_update(bmain, 0);
/* for now, only send ND_KEYS for KeyingSets */
WM_event_add_notifier(C, NC_SCENE|ND_KEYINGSET, NULL);
@@ -388,6 +383,7 @@ void ANIM_OT_keyingset_button_add (wmOperatorType *ot)
static int remove_keyingset_button_exec (bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
KeyingSet *ks = NULL;
PropertyRNA *prop= NULL;
@@ -440,7 +436,7 @@ static int remove_keyingset_button_exec (bContext *C, wmOperator *op)
if (success) {
/* send updates */
- DAG_ids_flush_update(0);
+ DAG_ids_flush_update(bmain, 0);
/* for now, only send ND_KEYS for KeyingSets */
WM_event_add_notifier(C, NC_SCENE|ND_KEYINGSET, NULL);
@@ -526,20 +522,12 @@ ListBase builtin_keyingsets = {NULL, NULL};
/* Find KeyingSet type info given a name */
KeyingSetInfo *ANIM_keyingset_info_find_named (const char name[])
{
- KeyingSetInfo *ksi;
-
/* sanity checks */
if ((name == NULL) || (name[0] == 0))
return NULL;
/* search by comparing names */
- for (ksi = keyingset_type_infos.first; ksi; ksi = ksi->next) {
- if (strcmp(ksi->idname, name) == 0)
- return ksi;
- }
-
- /* no matches found */
- return NULL;
+ return BLI_findstring(&keyingset_type_infos, name, offsetof(KeyingSetInfo, idname));
}
/* Find builtin KeyingSet by name */
@@ -589,7 +577,7 @@ void ANIM_keyingset_info_register (const bContext *C, KeyingSetInfo *ksi)
/* Remove the given KeyingSetInfo from the list of type infos, and also remove the builtin set if appropriate */
void ANIM_keyingset_info_unregister (const bContext *C, KeyingSetInfo *ksi)
{
- Scene *scene = CTX_data_scene(C);
+ Main *bmain= CTX_data_main(C);
KeyingSet *ks, *ksn;
/* find relevant builtin KeyingSets which use this, and remove them */
@@ -600,8 +588,14 @@ void ANIM_keyingset_info_unregister (const bContext *C, KeyingSetInfo *ksi)
/* remove if matching typeinfo name */
if (strcmp(ks->typeinfo, ksi->idname) == 0) {
+ Scene *scene;
BKE_keyingset_free(ks);
- BLI_freelinkN(&scene->keyingsets, ks);
+ BLI_remlink(&builtin_keyingsets, ks);
+
+ for(scene= bmain->scene.first; scene; scene= scene->id.next)
+ BLI_remlink_safe(&scene->keyingsets, ks);
+
+ MEM_freeN(ks);
}
}
diff --git a/source/blender/editors/armature/Makefile b/source/blender/editors/armature/Makefile
index 4838282de92..707ceb55246 100644
--- a/source/blender/editors/armature/Makefile
+++ b/source/blender/editors/armature/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/armature/armature_ops.c b/source/blender/editors/armature/armature_ops.c
index 7abf8575921..d5bd09cc8f1 100644
--- a/source/blender/editors/armature/armature_ops.c
+++ b/source/blender/editors/armature/armature_ops.c
@@ -29,15 +29,11 @@
#include <stdlib.h>
#include <math.h>
-#include "MEM_guardedalloc.h"
#include "BLI_math.h"
#include "BLI_blenlib.h"
-#include "BKE_context.h"
-#include "BKE_global.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
@@ -192,7 +188,6 @@ void ED_keymap_armature(wmKeyConfig *keyconf)
/* Armature -> Etch-A-Ton ------------------------ */
WM_keymap_add_item(keymap, "SKETCH_OT_delete", XKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "SKETCH_OT_delete", DELKEY, KM_PRESS, 0, 0);
- WM_keymap_add_item(keymap, "SKETCH_OT_delete", BACKSPACEKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "SKETCH_OT_finish_stroke", RIGHTMOUSE, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "SKETCH_OT_cancel_stroke", ESCKEY, KM_PRESS, 0, 0);
// Already part of view3d select
@@ -238,7 +233,6 @@ void ED_keymap_armature(wmKeyConfig *keyconf)
WM_keymap_add_item(keymap, "ARMATURE_OT_delete", XKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "ARMATURE_OT_delete", DELKEY, KM_PRESS, 0, 0);
- WM_keymap_add_item(keymap, "ARMATURE_OT_delete", BACKSPACEKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "ARMATURE_OT_duplicate_move", DKEY, KM_PRESS, KM_SHIFT, 0);
WM_keymap_add_item(keymap, "ARMATURE_OT_extrude_move", EKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "ARMATURE_OT_extrude_forked", EKEY, KM_PRESS, KM_SHIFT, 0);
diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c
index 7a2d26af4ed..c0f84064aba 100644
--- a/source/blender/editors/armature/editarmature.c
+++ b/source/blender/editors/armature/editarmature.c
@@ -27,11 +27,11 @@
#include <ctype.h>
#include <stdlib.h>
+#include <stddef.h>
#include <string.h>
#include <math.h>
#include <float.h>
-#include "MEM_guardedalloc.h"
#include "DNA_anim_types.h"
#include "DNA_armature_types.h"
@@ -39,6 +39,8 @@
#include "DNA_meshdata_types.h"
#include "DNA_scene_types.h"
+#include "MEM_guardedalloc.h"
+
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BLI_editVert.h"
@@ -58,11 +60,10 @@
#include "BKE_object.h"
#include "BKE_report.h"
#include "BKE_subsurf.h"
-#include "BKE_utildefines.h"
#include "BKE_modifier.h"
+#include "DNA_object_types.h"
#include "BIF_gl.h"
-#include "BIF_generate.h"
#include "RNA_access.h"
#include "RNA_define.h"
@@ -421,37 +422,45 @@ void ED_armature_apply_transform(Object *ob, float mat[4][4])
/* exported for use in editors/object/ */
/* 0 == do center, 1 == center new, 2 == center cursor */
-void docenter_armature (Scene *scene, View3D *v3d, Object *ob, int centermode)
+void docenter_armature (Scene *scene, Object *ob, float cursor[3], int centermode, int around)
{
Object *obedit= scene->obedit; // XXX get from context
EditBone *ebone;
bArmature *arm= ob->data;
- float cent[3] = {0.0f, 0.0f, 0.0f};
- float min[3], max[3];
- float omat[3][3];
+ float cent[3];
/* Put the armature into editmode */
- if(ob!=obedit)
+ if(ob != obedit) {
ED_armature_to_edit(ob);
+ obedit= NULL; /* we cant use this so behave as if there is no obedit */
+ }
/* Find the centerpoint */
if (centermode == 2) {
- float *fp= give_cursor(scene, v3d);
- VECCOPY(cent, fp);
+ copy_v3_v3(cent, cursor);
invert_m4_m4(ob->imat, ob->obmat);
mul_m4_v3(ob->imat, cent);
}
else {
- INIT_MINMAX(min, max);
-
- for (ebone= arm->edbo->first; ebone; ebone=ebone->next) {
- DO_MINMAX(ebone->head, min, max);
- DO_MINMAX(ebone->tail, min, max);
+ if(around==V3D_CENTROID) {
+ int total= 0;
+ zero_v3(cent);
+ for (ebone= arm->edbo->first; ebone; ebone=ebone->next) {
+ total+=2;
+ add_v3_v3(cent, ebone->head);
+ add_v3_v3(cent, ebone->tail);
+ }
+ mul_v3_fl(cent, 1.0f/(float)total);
+ }
+ else {
+ float min[3], max[3];
+ INIT_MINMAX(min, max);
+ for (ebone= arm->edbo->first; ebone; ebone=ebone->next) {
+ DO_MINMAX(ebone->head, min, max);
+ DO_MINMAX(ebone->tail, min, max);
+ }
+ mid_v3_v3v3(cent, min, max);
}
-
- cent[0]= (min[0] + max[0]) / 2.0f;
- cent[1]= (min[1] + max[1]) / 2.0f;
- cent[2]= (min[2] + max[2]) / 2.0f;
}
/* Do the adjustments */
@@ -461,17 +470,16 @@ void docenter_armature (Scene *scene, View3D *v3d, Object *ob, int centermode)
}
/* Turn the list into an armature */
- ED_armature_from_edit(ob);
-
+ if(obedit==NULL) {
+ ED_armature_from_edit(ob);
+ ED_armature_edit_free(ob);
+ }
+
/* Adjust object location for new centerpoint */
if(centermode && obedit==NULL) {
- copy_m3_m4(omat, ob->obmat);
-
- mul_m3_v3(omat, cent);
+ mul_mat3_m4_v3(ob->obmat, cent); /* ommit translation part */
add_v3_v3(ob->loc, cent);
}
- else
- ED_armature_edit_free(ob);
}
/* ---------------------- */
@@ -479,13 +487,7 @@ void docenter_armature (Scene *scene, View3D *v3d, Object *ob, int centermode)
/* checks if an EditBone with a matching name already, returning the matching bone if it exists */
static EditBone *editbone_name_exists (ListBase *edbo, const char *name)
{
- EditBone *eBone;
-
- for (eBone=edbo->first; eBone; eBone=eBone->next) {
- if (!strcmp(name, eBone->name))
- return eBone;
- }
- return NULL;
+ return BLI_findstring(edbo, name, offsetof(EditBone, name));
}
/* note: there's a unique_bone_name() too! */
@@ -802,6 +804,7 @@ static void joined_armature_fix_links(Object *tarArm, Object *srcArm, bPoseChann
/* join armature exec is exported for use in object->join objects operator... */
int join_armature_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
Object *ob= CTX_data_active_object(C);
bArmature *arm= (ob)? ob->data: NULL;
@@ -894,12 +897,12 @@ int join_armature_exec(bContext *C, wmOperator *op)
free_pose_channels_hash(pose);
}
- ED_base_object_free_and_unlink(scene, base);
+ ED_base_object_free_and_unlink(bmain, scene, base);
}
}
CTX_DATA_END;
- DAG_scene_sort(scene); // because we removed object(s)
+ DAG_scene_sort(bmain, scene); // because we removed object(s)
ED_armature_from_edit(ob);
ED_armature_edit_free(ob);
@@ -1111,6 +1114,7 @@ static void separate_armature_bones (Scene *scene, Object *ob, short sel)
/* separate selected bones into their armature */
static int separate_armature_exec (bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
Object *obedit= CTX_data_edit_object(C);
Object *oldob, *newob;
@@ -1151,7 +1155,7 @@ static int separate_armature_exec (bContext *C, wmOperator *op)
ED_armature_edit_free(obedit);
/* 2) duplicate base */
- newbase= ED_object_add_duplicate(scene, oldbase, USER_DUP_ARM); /* only duplicate linked armature */
+ newbase= ED_object_add_duplicate(bmain, scene, oldbase, USER_DUP_ARM); /* only duplicate linked armature */
newob= newbase->object;
newbase->flag &= ~SELECT;
@@ -1752,9 +1756,8 @@ EditBone *ED_armature_bone_get_mirrored(ListBase *edbo, EditBone *ebo)
if (ebo == NULL)
return NULL;
-
- BLI_strncpy(name, ebo->name, sizeof(name));
- bone_flip_name(name, 0); // 0 = don't strip off number extensions
+
+ flip_side_name(name, ebo->name, FALSE);
for (eboflip= edbo->first; eboflip; eboflip=eboflip->next) {
if (ebo != eboflip) {
@@ -2023,7 +2026,6 @@ void ED_armature_edit_free(struct Object *ob)
BLI_freelistN(arm->edbo);
}
-
MEM_freeN(arm->edbo);
arm->edbo= NULL;
}
@@ -2328,12 +2330,10 @@ void add_primitive_bone(Scene *scene, View3D *v3d, RegionView3D *rv3d)
Object *obedit= scene->obedit; // XXX get from context
float obmat[3][3], curs[3], viewmat[3][3], totmat[3][3], imat[3][3];
EditBone *bone;
-
- VECCOPY(curs, give_cursor(scene, v3d));
/* Get inverse point for head and orientation for tail */
invert_m4_m4(obedit->imat, obedit->obmat);
- mul_m4_v3(obedit->imat, curs);
+ mul_v3_m4v3(curs, obedit->imat, give_cursor(scene, v3d));
if (rv3d && (U.flag & USER_ADD_VIEWALIGNED))
copy_m3_m4(obmat, rv3d->viewmat);
@@ -2348,7 +2348,7 @@ void add_primitive_bone(Scene *scene, View3D *v3d, RegionView3D *rv3d)
/* Create a bone */
bone= ED_armature_edit_bone_add(obedit->data, "Bone");
- VECCOPY(bone->head, curs);
+ copy_v3_v3(bone->head, curs);
if (rv3d && (U.flag & USER_ADD_VIEWALIGNED))
add_v3_v3v3(bone->tail, bone->head, imat[1]); // bone with unit length 1
@@ -2941,17 +2941,14 @@ static int armature_fill_bones_exec (bContext *C, wmOperator *op)
}
else if (count == 1) {
EditBonePoint *ebp;
- float *fp, curs[3];
+ float curs[3];
/* Get Points - selected joint */
ebp= (EditBonePoint *)points.first;
/* Get points - cursor (tail) */
- fp= give_cursor(scene, v3d);
- VECCOPY (curs, fp);
-
invert_m4_m4(obedit->imat, obedit->obmat);
- mul_m4_v3(obedit->imat, curs);
+ mul_v3_m4v3(curs, obedit->imat, give_cursor(scene, v3d));
/* Create a bone */
newbone= add_points_bone(obedit, ebp->vec, curs);
@@ -2979,15 +2976,13 @@ static int armature_fill_bones_exec (bContext *C, wmOperator *op)
/* find which one should be the 'head' */
if ((ebp->head_owner && ebp2->head_owner) || (ebp->tail_owner && ebp2->tail_owner)) {
/* rule: whichever one is closer to 3d-cursor */
- float curs[3], *fp= give_cursor(scene, v3d);
+ float curs[3];
float vecA[3], vecB[3];
float distA, distB;
/* get cursor location */
- VECCOPY(curs, fp);
-
invert_m4_m4(obedit->imat, obedit->obmat);
- mul_m4_v3(obedit->imat, curs);
+ mul_v3_m4v3(curs, obedit->imat, give_cursor(scene, v3d));
/* get distances */
sub_v3_v3v3(vecA, ebp->vec, curs);
@@ -3007,12 +3002,12 @@ static int armature_fill_bones_exec (bContext *C, wmOperator *op)
/* assign head/tail combinations */
if (headtail == 2) {
- VECCOPY(head, ebp->vec);
- VECCOPY(tail, ebp2->vec);
+ copy_v3_v3(head, ebp->vec);
+ copy_v3_v3(tail, ebp2->vec);
}
else if (headtail == 1) {
- VECCOPY(head, ebp2->vec);
- VECCOPY(tail, ebp->vec);
+ copy_v3_v3(head, ebp2->vec);
+ copy_v3_v3(tail, ebp->vec);
}
/* add new bone and parent it to the appropriate end */
@@ -3095,16 +3090,16 @@ static void bones_merge(Object *obedit, EditBone *start, EditBone *end, EditBone
* - parent = parent of start
*/
if ((start->flag & BONE_TIPSEL) && ((start->flag & BONE_SELECTED) || start==arm->act_edbone)==0) {
- VECCOPY(head, start->tail);
+ copy_v3_v3(head, start->tail);
}
else {
- VECCOPY(head, start->head);
+ copy_v3_v3(head, start->head);
}
if ((end->flag & BONE_ROOTSEL) && ((end->flag & BONE_SELECTED) || end==arm->act_edbone)==0) {
- VECCOPY(tail, end->head);
+ copy_v3_v3(tail, end->head);
}
else {
- VECCOPY(tail, end->tail);
+ copy_v3_v3(tail, end->tail);
}
newbone= add_points_bone(obedit, head, tail);
newbone->parent = start->parent;
@@ -3376,8 +3371,8 @@ static int armature_extrude_exec(bContext *C, wmOperator *op)
newbone = MEM_callocN(sizeof(EditBone), "extrudebone");
if (do_extrude==1) {
- VECCOPY (newbone->head, ebone->tail);
- VECCOPY (newbone->tail, newbone->head);
+ copy_v3_v3(newbone->head, ebone->tail);
+ copy_v3_v3(newbone->tail, newbone->head);
newbone->parent = ebone;
newbone->flag = ebone->flag & BONE_TIPSEL; // copies it, in case mirrored bone
@@ -3385,8 +3380,8 @@ static int armature_extrude_exec(bContext *C, wmOperator *op)
if (newbone->parent) newbone->flag |= BONE_CONNECTED;
}
else {
- VECCOPY(newbone->head, ebone->head);
- VECCOPY(newbone->tail, ebone->head);
+ copy_v3_v3(newbone->head, ebone->head);
+ copy_v3_v3(newbone->tail, ebone->head);
newbone->parent= ebone->parent;
newbone->flag= BONE_TIPSEL;
@@ -3476,7 +3471,7 @@ static int armature_bone_primitive_add_exec(bContext *C, wmOperator *op)
RNA_string_get(op->ptr, "name", name);
- VECCOPY(curs, give_cursor(CTX_data_scene(C),CTX_wm_view3d(C)));
+ copy_v3_v3(curs, give_cursor(CTX_data_scene(C),CTX_wm_view3d(C)));
/* Get inverse point for head and orientation for tail */
invert_m4_m4(obedit->imat, obedit->obmat);
@@ -3495,7 +3490,7 @@ static int armature_bone_primitive_add_exec(bContext *C, wmOperator *op)
/* Create a bone */
bone= ED_armature_edit_bone_add(obedit->data, name);
- VECCOPY(bone->head, curs);
+ copy_v3_v3(bone->head, curs);
if(rv3d && (U.flag & USER_ADD_VIEWALIGNED))
add_v3_v3v3(bone->tail, bone->head, imat[1]); // bone with unit length 1
@@ -3565,17 +3560,17 @@ static int armature_subdivide_exec(bContext *C, wmOperator *op)
BLI_addtail(arm->edbo, newbone);
/* calculate location of newbone->head */
- VECCOPY(val1, ebone->head);
- VECCOPY(val2, ebone->tail);
- VECCOPY(val3, newbone->head);
+ copy_v3_v3(val1, ebone->head);
+ copy_v3_v3(val2, ebone->tail);
+ copy_v3_v3(val3, newbone->head);
val3[0]= val1[0]*cutratio + val2[0]*cutratioI;
val3[1]= val1[1]*cutratio + val2[1]*cutratioI;
val3[2]= val1[2]*cutratio + val2[2]*cutratioI;
- VECCOPY(newbone->head, val3);
- VECCOPY(newbone->tail, ebone->tail);
- VECCOPY(ebone->tail, newbone->head);
+ copy_v3_v3(newbone->head, val3);
+ copy_v3_v3(newbone->tail, ebone->tail);
+ copy_v3_v3(ebone->tail, newbone->head);
newbone->rad_head= 0.5f * (ebone->rad_head + ebone->rad_tail);
ebone->rad_tail= newbone->rad_head;
@@ -3793,7 +3788,7 @@ void ARMATURE_OT_switch_direction(wmOperatorType *ot)
static void bone_connect_to_existing_parent(EditBone *bone)
{
bone->flag |= BONE_CONNECTED;
- VECCOPY(bone->head, bone->parent->tail);
+ copy_v3_v3(bone->head, bone->parent->tail);
bone->rad_head = bone->parent->rad_tail;
}
@@ -3821,7 +3816,7 @@ static void bone_connect_to_new_parent(ListBase *edbo, EditBone *selbone, EditBo
selbone->flag |= BONE_CONNECTED;
sub_v3_v3v3(offset, actbone->tail, selbone->head);
- VECCOPY(selbone->head, actbone->tail);
+ copy_v3_v3(selbone->head, actbone->tail);
selbone->rad_head= actbone->rad_tail;
add_v3_v3(selbone->tail, offset);
@@ -4095,7 +4090,7 @@ void ARMATURE_OT_select_all(wmOperatorType *ot)
{
/* identifiers */
- ot->name= "deselect all editbone";
+ ot->name= "Select or Deselect All";
ot->idname= "ARMATURE_OT_select_all";
/* api callbacks */
@@ -4594,7 +4589,7 @@ static void add_vgroups__mapFunc(void *userData, int index, float *co, float *no
/* DerivedMesh mapFunc for getting final coords in weight paint mode */
float (*verts)[3] = userData;
- VECCOPY(verts[index], co);
+ copy_v3_v3(verts[index], co);
}
static void envelope_bone_weighting(Object *ob, Mesh *mesh, float (*verts)[3], int numbones, Bone **bonelist, bDeformGroup **dgrouplist, bDeformGroup **dgroupflip, float (*root)[3], float (*tip)[3], int *selected, float scale)
@@ -4657,7 +4652,7 @@ void add_verts_to_dgroups(Scene *scene, Object *ob, Object *par, int heat, int m
bArmature *arm= par->data;
Bone **bonelist, *bone;
bDeformGroup **dgrouplist, **dgroupflip;
- bDeformGroup *dgroup, *curdg;
+ bDeformGroup *dgroup;
bPoseChannel *pchan;
Mesh *mesh;
Mat4 *bbone = NULL;
@@ -4721,18 +4716,17 @@ void add_verts_to_dgroups(Scene *scene, Object *ob, Object *par, int heat, int m
/* compute root and tip */
if (bbone) {
- VECCOPY(root[j], bbone[segments].mat[3]);
- mul_m4_v3(bone->arm_mat, root[j]);
+ mul_v3_m4v3(root[j], bone->arm_mat, bbone[segments].mat[3]);
if ((segments+1) < bone->segments) {
- VECCOPY(tip[j], bbone[segments+1].mat[3])
- mul_m4_v3(bone->arm_mat, tip[j]);
+ mul_v3_m4v3(tip[j], bone->arm_mat, bbone[segments+1].mat[3]);
+ }
+ else {
+ copy_v3_v3(tip[j], bone->arm_tail);
}
- else
- VECCOPY(tip[j], bone->arm_tail)
}
else {
- VECCOPY(root[j], bone->arm_head);
- VECCOPY(tip[j], bone->arm_tail);
+ copy_v3_v3(root[j], bone->arm_head);
+ copy_v3_v3(tip[j], bone->arm_tail);
}
mul_m4_v3(par->obmat, root[j]);
@@ -4749,17 +4743,10 @@ void add_verts_to_dgroups(Scene *scene, Object *ob, Object *par, int heat, int m
/* find flipped group */
if (dgroup && mirror) {
char name[32];
-
- BLI_strncpy(name, dgroup->name, 32);
+
// 0 = don't strip off number extensions
- bone_flip_name(name, 0);
-
- for (curdg = ob->defbase.first; curdg; curdg=curdg->next) {
- if (!strcmp(curdg->name, name))
- break;
- }
-
- dgroupflip[j] = curdg;
+ flip_side_name(name, dgroup->name, FALSE);
+ dgroupflip[j] = defgroup_find_name(ob, name);
}
}
@@ -4789,7 +4776,7 @@ void add_verts_to_dgroups(Scene *scene, Object *ob, Object *par, int heat, int m
/* transform verts to global space */
for (i=0; i < mesh->totvert; i++) {
if (!vertsfilled)
- VECCOPY(verts[i], mesh->mvert[i].co)
+ copy_v3_v3(verts[i], mesh->mvert[i].co);
mul_m4_v3(ob->obmat, verts[i]);
}
@@ -5027,14 +5014,14 @@ static int pose_clear_rot_exec(bContext *C, wmOperator *op)
float eul[3], oldeul[3], quat1[4] = {0};
if (pchan->rotmode == ROT_MODE_QUAT) {
- QUATCOPY(quat1, pchan->quat);
+ copy_qt_qt(quat1, pchan->quat);
quat_to_eul( oldeul,pchan->quat);
}
else if (pchan->rotmode == ROT_MODE_AXISANGLE) {
axis_angle_to_eulO( oldeul, EULER_ORDER_DEFAULT,pchan->rotAxis, pchan->rotAngle);
}
else {
- VECCOPY(oldeul, pchan->eul);
+ copy_v3_v3(oldeul, pchan->eul);
}
eul[0]= eul[1]= eul[2]= 0.0f;
@@ -5057,7 +5044,7 @@ static int pose_clear_rot_exec(bContext *C, wmOperator *op)
eulO_to_axis_angle( pchan->rotAxis, &pchan->rotAngle,eul, EULER_ORDER_DEFAULT);
}
else {
- VECCOPY(pchan->eul, eul);
+ copy_v3_v3(pchan->eul, eul);
}
}
} // Duplicated in source/blender/editors/object/object_transform.c
@@ -5213,7 +5200,7 @@ void POSE_OT_select_all(wmOperatorType *ot)
{
/* identifiers */
- ot->name= "deselect all bones";
+ ot->name= "Select or Deselect All";
ot->idname= "POSE_OT_select_all";
/* api callbacks */
@@ -5277,6 +5264,7 @@ static int hide_selected_pose_bone(Object *ob, Bone *bone, void *ptr)
if (arm->layer & bone->layer) {
if (bone->flag & BONE_SELECTED) {
bone->flag |= BONE_HIDDEN_P;
+ bone->flag &= ~BONE_SELECTED;
if(arm->act_bone==bone)
arm->act_bone= NULL;
}
@@ -5479,8 +5467,17 @@ void ED_armature_bone_rename(bArmature *arm, char *oldnamep, char *newnamep)
/* Rename the pose channel, if it exists */
if (ob->pose) {
bPoseChannel *pchan = get_pose_channel(ob->pose, oldname);
- if (pchan)
+ if (pchan) {
BLI_strncpy(pchan->name, newname, MAXBONENAME);
+
+ if (ob->pose->chanhash) {
+ GHash *gh = ob->pose->chanhash;
+
+ /* remove the old hash entry, and replace with the new name */
+ BLI_ghash_remove(gh, oldname, NULL, NULL);
+ BLI_ghash_insert(gh, pchan->name, pchan);
+ }
+ }
}
/* Update any object constraints to use the new bone name */
@@ -5506,11 +5503,9 @@ void ED_armature_bone_rename(bArmature *arm, char *oldnamep, char *newnamep)
}
if (modifiers_usesArmature(ob, arm)) {
- bDeformGroup *dg;
- /* bone name in defgroup */
- for (dg=ob->defbase.first; dg; dg=dg->next) {
- if (!strcmp(dg->name, oldname))
- BLI_strncpy(dg->name, newname, MAXBONENAME);
+ bDeformGroup *dg= defgroup_find_name(ob, oldname);
+ if(dg) {
+ BLI_strncpy(dg->name, newname, MAXBONENAME);
}
}
@@ -5539,8 +5534,7 @@ static int armature_flip_names_exec (bContext *C, wmOperator *op)
/* loop through selected bones, auto-naming them */
CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones)
{
- BLI_strncpy(newname, ebone->name, sizeof(newname));
- bone_flip_name(newname, 1); // 1 = do strip off number extensions
+ flip_side_name(newname, ebone->name, TRUE); // 1 = do strip off number extensions
ED_armature_bone_rename(arm, ebone->name, newname);
}
CTX_DATA_END;
diff --git a/source/blender/editors/armature/editarmature_generate.c b/source/blender/editors/armature/editarmature_generate.c
index c48e7686ca9..1c9024f6f91 100644
--- a/source/blender/editors/armature/editarmature_generate.c
+++ b/source/blender/editors/armature/editarmature_generate.c
@@ -32,7 +32,6 @@
#include <math.h>
#include <float.h>
-#include "MEM_guardedalloc.h"
#include "DNA_scene_types.h"
#include "DNA_armature_types.h"
@@ -42,8 +41,6 @@
#include "BLI_graph.h"
#include "BKE_utildefines.h"
-#include "BKE_global.h"
-#include "BKE_context.h"
#include "ED_armature.h"
#include "armature_intern.h"
diff --git a/source/blender/editors/armature/editarmature_retarget.c b/source/blender/editors/armature/editarmature_retarget.c
index c2e21755f94..637c6076314 100644
--- a/source/blender/editors/armature/editarmature_retarget.c
+++ b/source/blender/editors/armature/editarmature_retarget.c
@@ -36,6 +36,7 @@
#include "DNA_armature_types.h"
#include "DNA_constraint_types.h"
#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
@@ -47,8 +48,6 @@
//#include "BDR_editobject.h"
-#include "BKE_global.h"
-#include "BKE_utildefines.h"
#include "BKE_constraint.h"
#include "BKE_armature.h"
#include "BKE_context.h"
diff --git a/source/blender/editors/armature/editarmature_sketch.c b/source/blender/editors/armature/editarmature_sketch.c
index a1af68458f6..241301b8ee1 100644
--- a/source/blender/editors/armature/editarmature_sketch.c
+++ b/source/blender/editors/armature/editarmature_sketch.c
@@ -26,6 +26,7 @@
#include "MEM_guardedalloc.h"
+#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_armature_types.h"
@@ -37,11 +38,6 @@
#include "BLI_graph.h"
#include "BLI_ghash.h"
-#include "BKE_utildefines.h"
-#include "BKE_global.h"
-#include "BKE_DerivedMesh.h"
-#include "BKE_object.h"
-#include "BKE_anim.h"
#include "BKE_context.h"
#include "BKE_sketch.h"
diff --git a/source/blender/editors/armature/meshlaplacian.c b/source/blender/editors/armature/meshlaplacian.c
index 98986aa4663..ce9f1385f0e 100644
--- a/source/blender/editors/armature/meshlaplacian.c
+++ b/source/blender/editors/armature/meshlaplacian.c
@@ -36,7 +36,6 @@
#include "DNA_object_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
-#include "DNA_modifier_types.h"
#include "DNA_scene_types.h"
#include "BLI_math.h"
diff --git a/source/blender/editors/armature/poseSlide.c b/source/blender/editors/armature/poseSlide.c
index 21b99bc10c0..8d8f1bf24ee 100644
--- a/source/blender/editors/armature/poseSlide.c
+++ b/source/blender/editors/armature/poseSlide.c
@@ -44,17 +44,10 @@
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
-#include "BKE_animsys.h"
-#include "BKE_action.h"
-#include "BKE_armature.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
-#include "BKE_object.h"
-#include "BKE_global.h"
#include "BKE_context.h"
#include "BKE_report.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
#include "RNA_define.h"
@@ -63,7 +56,6 @@
#include "WM_types.h"
-#include "BIF_gl.h"
#include "ED_armature.h"
#include "ED_keyframes_draw.h"
diff --git a/source/blender/editors/armature/poseUtils.c b/source/blender/editors/armature/poseUtils.c
index c9a80318050..b8b9c354d9a 100644
--- a/source/blender/editors/armature/poseUtils.c
+++ b/source/blender/editors/armature/poseUtils.c
@@ -44,17 +44,11 @@
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
-#include "BKE_animsys.h"
#include "BKE_action.h"
#include "BKE_armature.h"
#include "BKE_depsgraph.h"
-#include "BKE_fcurve.h"
-#include "BKE_object.h"
-#include "BKE_global.h"
#include "BKE_context.h"
-#include "BKE_report.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
@@ -62,7 +56,6 @@
#include "WM_types.h"
-#include "BIF_gl.h"
#include "ED_armature.h"
#include "ED_keyframing.h"
diff --git a/source/blender/editors/armature/poselib.c b/source/blender/editors/armature/poselib.c
index 408a2e1e599..b0b5aedaa70 100644
--- a/source/blender/editors/armature/poselib.c
+++ b/source/blender/editors/armature/poselib.c
@@ -48,13 +48,9 @@
#include "BKE_action.h"
#include "BKE_armature.h"
#include "BKE_depsgraph.h"
-#include "BKE_modifier.h"
-#include "BKE_object.h"
-#include "BKE_global.h"
#include "BKE_context.h"
#include "BKE_report.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
#include "RNA_define.h"
@@ -1490,6 +1486,8 @@ void POSELIB_OT_browse_interactive (wmOperatorType *ot)
/* properties */
// TODO: make the pose_index into a proper enum instead of a cryptic int...
ot->prop= RNA_def_int(ot->srna, "pose_index", -1, -2, INT_MAX, "Pose", "Index of the pose to apply (-2 for no change to pose, -1 for poselib active pose)", 0, INT_MAX);
- // XXX: percentage vs factor?
- RNA_def_float_factor(ot->srna, "blend_factor", 1.0f, 0.0f, 1.0f, "Blend Factor", "Amount that the pose is applied on top of the existing poses", 0.0f, 1.0f);
+
+ // XXX: percentage vs factor?
+ /* not used yet */
+ /* RNA_def_float_factor(ot->srna, "blend_factor", 1.0f, 0.0f, 1.0f, "Blend Factor", "Amount that the pose is applied on top of the existing poses", 0.0f, 1.0f); */
}
diff --git a/source/blender/editors/armature/poseobject.c b/source/blender/editors/armature/poseobject.c
index d0a898b1b61..54d052d52b5 100644
--- a/source/blender/editors/armature/poseobject.c
+++ b/source/blender/editors/armature/poseobject.c
@@ -41,26 +41,19 @@
#include "DNA_armature_types.h"
#include "DNA_constraint_types.h"
#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
#include "BKE_anim.h"
#include "BKE_idprop.h"
-#include "BKE_animsys.h"
#include "BKE_action.h"
#include "BKE_armature.h"
-#include "BKE_blender.h"
#include "BKE_context.h"
#include "BKE_constraint.h"
#include "BKE_deform.h"
#include "BKE_depsgraph.h"
-#include "BKE_displist.h"
-#include "BKE_fcurve.h"
-#include "BKE_global.h"
#include "BKE_modifier.h"
-#include "BKE_object.h"
-#include "BKE_utildefines.h"
#include "BKE_report.h"
-#include "BIF_gl.h"
#include "RNA_access.h"
#include "RNA_define.h"
@@ -897,7 +890,6 @@ static int pose_paste_exec (bContext *C, wmOperator *op)
Scene *scene= CTX_data_scene(C);
Object *ob= CTX_data_active_object(C);
bPoseChannel *chan, *pchan;
- char name[32];
int flip= RNA_boolean_get(op->ptr, "flipped");
/* sanity checks */
@@ -913,10 +905,12 @@ static int pose_paste_exec (bContext *C, wmOperator *op)
for (chan= g_posebuf->chanbase.first; chan; chan=chan->next) {
if (chan->flag & POSE_KEY) {
/* get the name - if flipping, we must flip this first */
- BLI_strncpy(name, chan->name, sizeof(name));
+ char name[32];
if (flip)
- bone_flip_name(name, 0); /* 0 = don't strip off number extensions */
-
+ flip_side_name(name, chan->name, 0); /* 0 = don't strip off number extensions */
+ else
+ BLI_strncpy(name, chan->name, sizeof(name));
+
/* only copy when channel exists, poses are not meant to add random channels to anymore */
pchan= get_pose_channel(ob->pose, name);
@@ -1046,17 +1040,7 @@ static int pose_paste_exec (bContext *C, wmOperator *op)
/* Update event for pose and deformation children */
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
-
- if (IS_AUTOKEY_ON(scene)) {
-// XXX remake_action_ipos(ob->action);
- }
- else {
- /* need to trick depgraph, action is not allowed to execute on pose */
- // XXX: this is probably not an issue anymore
- where_is_pose(scene, ob);
- ob->recalc= 0;
- }
-
+
/* notifiers for updates */
WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob);
@@ -1441,7 +1425,6 @@ static int pose_flip_names_exec (bContext *C, wmOperator *op)
{
Object *ob= CTX_data_active_object(C);
bArmature *arm;
- char newname[32];
/* paranoia checks */
if (ELEM(NULL, ob, ob->pose))
@@ -1451,8 +1434,8 @@ static int pose_flip_names_exec (bContext *C, wmOperator *op)
/* loop through selected bones, auto-naming them */
CTX_DATA_BEGIN(C, bPoseChannel*, pchan, selected_pose_bones)
{
- BLI_strncpy(newname, pchan->name, sizeof(newname));
- bone_flip_name(newname, 1); // 1 = do strip off number extensions
+ char newname[32];
+ flip_side_name(newname, pchan->name, TRUE);
ED_armature_bone_rename(arm, pchan->name, newname);
}
CTX_DATA_END;
@@ -1556,10 +1539,8 @@ void pose_activate_flipped_bone(Scene *scene)
if(arm->act_bone) {
char name[32];
-
- BLI_strncpy(name, arm->act_bone->name, 32);
- bone_flip_name(name, 1); // 0 = do not strip off number extensions
-
+ flip_side_name(name, arm->act_bone->name, TRUE);
+
pchanf= get_pose_channel(ob->pose, name);
if(pchanf && pchanf->bone != arm->act_bone) {
arm->act_bone->flag &= ~BONE_SELECTED;
@@ -1597,7 +1578,7 @@ static int pose_armature_layers_invoke (bContext *C, wmOperator *op, wmEvent *ev
/* get RNA pointer to armature data to use that to retrieve the layers as ints to init the operator */
RNA_id_pointer_create((ID *)arm, &ptr);
- RNA_boolean_get_array(&ptr, "layer", layers);
+ RNA_boolean_get_array(&ptr, "layers", layers);
RNA_boolean_set_array(op->ptr, "layers", layers);
/* part to sync with other similar operators... */
@@ -1617,7 +1598,7 @@ static int pose_armature_layers_exec (bContext *C, wmOperator *op)
/* get pointer for armature, and write data there... */
RNA_id_pointer_create((ID *)arm, &ptr);
- RNA_boolean_set_array(&ptr, "layer", layers);
+ RNA_boolean_set_array(&ptr, "layers", layers);
/* note, notifier might evolve */
WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob);
@@ -1709,7 +1690,7 @@ static int pose_bone_layers_exec (bContext *C, wmOperator *op)
{
/* get pointer for pchan, and write flags this way */
RNA_pointer_create((ID *)arm, &RNA_Bone, pchan->bone, &ptr);
- RNA_boolean_set_array(&ptr, "layer", layers);
+ RNA_boolean_set_array(&ptr, "layers", layers);
}
CTX_DATA_END;
@@ -1783,7 +1764,7 @@ static int armature_bone_layers_exec (bContext *C, wmOperator *op)
{
/* get pointer for pchan, and write flags this way */
RNA_pointer_create((ID *)arm, &RNA_EditBone, ebone, &ptr);
- RNA_boolean_set_array(&ptr, "layer", layers);
+ RNA_boolean_set_array(&ptr, "layers", layers);
}
CTX_DATA_END;
diff --git a/source/blender/editors/armature/reeb.c b/source/blender/editors/armature/reeb.c
index 02e96bcf70a..3f3ae8fe377 100644
--- a/source/blender/editors/armature/reeb.c
+++ b/source/blender/editors/armature/reeb.c
@@ -31,14 +31,13 @@
#include <stdlib.h> // for qsort
#include <float.h>
-
#include "DNA_scene_types.h"
#include "DNA_object_types.h"
-#include "BKE_context.h"
-
#include "MEM_guardedalloc.h"
+#include "BKE_context.h"
+
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BLI_editVert.h"
@@ -51,11 +50,7 @@
//#include "BIF_interface.h"
//#include "BIF_toolbox.h"
//#include "BIF_graphics.h"
-#include "BIF_gl.h"
-#include "BKE_global.h"
-#include "BKE_utildefines.h"
-#include "BKE_customdata.h"
#include "BKE_mesh.h"
//#include "blendef.h"
diff --git a/source/blender/editors/curve/Makefile b/source/blender/editors/curve/Makefile
index 6449700e50b..d9c51c7420e 100644
--- a/source/blender/editors/curve/Makefile
+++ b/source/blender/editors/curve/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/curve/curve_ops.c b/source/blender/editors/curve/curve_ops.c
index 8f826d318b6..b5b6ee4e6da 100644
--- a/source/blender/editors/curve/curve_ops.c
+++ b/source/blender/editors/curve/curve_ops.c
@@ -29,16 +29,12 @@
#include <stdlib.h>
#include <math.h>
-#include "MEM_guardedalloc.h"
#include "DNA_curve_types.h"
#include "BLI_math.h"
#include "BLI_blenlib.h"
-#include "BKE_context.h"
-#include "BKE_global.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
@@ -214,7 +210,6 @@ void ED_keymap_curve(wmKeyConfig *keyconf)
WM_keymap_add_item(keymap, "CURVE_OT_cyclic_toggle", CKEY, KM_PRESS, KM_ALT, 0);
WM_keymap_add_item(keymap, "CURVE_OT_delete", XKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "CURVE_OT_delete", DELKEY, KM_PRESS, 0, 0);
- WM_keymap_add_item(keymap, "CURVE_OT_delete", BACKSPACEKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "CURVE_OT_tilt_clear", TKEY, KM_PRESS, KM_ALT, 0);
WM_keymap_add_item(keymap, "TRANSFORM_OT_tilt", TKEY, KM_PRESS, KM_CTRL, 0);
@@ -234,6 +229,6 @@ void ED_keymap_curve(wmKeyConfig *keyconf)
/* menus */
WM_keymap_add_menu(keymap, "VIEW3D_MT_hook", HKEY, KM_PRESS, KM_CTRL, 0);
- ED_object_generic_keymap(keyconf, keymap, 2);
+ ED_object_generic_keymap(keyconf, keymap, 3);
}
diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c
index 90bec418e0e..8af659c62e3 100644
--- a/source/blender/editors/curve/editcurve.c
+++ b/source/blender/editors/curve/editcurve.c
@@ -36,16 +36,18 @@
#include <io.h>
#endif
#include <stdlib.h>
+
+#include "DNA_key_types.h"
+#include "DNA_object_types.h"
+#include "DNA_scene_types.h"
+
#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BLI_dynstr.h"
#include "BLI_rand.h"
-
-#include "DNA_key_types.h"
-#include "DNA_object_types.h"
-#include "DNA_scene_types.h"
+#include "BLI_ghash.h"
#include "BKE_context.h"
#include "BKE_curve.h"
@@ -55,9 +57,7 @@
#include "BKE_key.h"
#include "BKE_library.h"
#include "BKE_main.h"
-#include "BKE_object.h"
#include "BKE_report.h"
-#include "BKE_utildefines.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -69,6 +69,7 @@
#include "ED_types.h"
#include "ED_util.h"
#include "ED_view3d.h"
+#include "ED_curve.h"
#include "UI_interface.h"
@@ -79,8 +80,15 @@
typedef struct {
ListBase nubase;
void *lastsel;
+ GHash *undoIndex;
} UndoCurve;
+/* Definitions needed for shape keys */
+typedef struct {
+ void *origNode;
+ int index;
+} NodeKeyIndex;
+
void selectend_nurb(Object *obedit, short selfirst, short doswap, short selstatus);
static void select_adjacent_cp(ListBase *editnurb, short next, short cont, short selstatus);
@@ -96,7 +104,7 @@ ListBase *curve_get_editcurve(Object *ob)
{
if(ob && ELEM(ob->type, OB_CURVE, OB_SURF)) {
Curve *cu= ob->data;
- return cu->editnurb;
+ return &cu->editnurb->nurbs;
}
return NULL;
}
@@ -108,15 +116,18 @@ void set_actNurb(Object *obedit, Nurb *nu)
if(nu==NULL)
cu->actnu = -1;
- else
- cu->actnu = BLI_findindex(cu->editnurb, nu);
+ else {
+ ListBase *nurbs= ED_curve_editnurbs(cu);
+ cu->actnu = BLI_findindex(nurbs, nu);
+ }
}
Nurb *get_actNurb(Object *obedit)
{
Curve *cu= obedit->data;
-
- return BLI_findlink(cu->editnurb, cu->actnu);
+ ListBase *nurbs= ED_curve_editnurbs(cu);
+
+ return BLI_findlink(nurbs, cu->actnu);
}
/* ******************* SELECTION FUNCTIONS ********************* */
@@ -258,6 +269,692 @@ void printknots(Object *obedit)
}
}
+/* ********************* Shape keys *************** */
+
+static NodeKeyIndex *init_nodeKeyIndex(void *node, int index)
+{
+ NodeKeyIndex *nodeIndex = MEM_callocN(sizeof(NodeKeyIndex), "init_nodeKeyIndex");
+
+ nodeIndex->origNode= node;
+ nodeIndex->index= index;
+
+ return nodeIndex;
+}
+
+static void free_nodeKeyIndex(NodeKeyIndex *pointIndex)
+{
+ MEM_freeN(pointIndex);
+}
+
+static void init_editNurb_keyIndex(EditNurb *editnurb, ListBase *origBase)
+{
+ Nurb *nu= editnurb->nurbs.first;
+ Nurb *orignu= origBase->first;
+ GHash *gh;
+ BezTriple *bezt, *origbezt;
+ BPoint *bp, *origbp;
+ int a, keyindex= 0;
+
+ gh= BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "editNurb keyIndex");
+
+ while (orignu) {
+ if (orignu->bezt) {
+ a= orignu->pntsu;
+ bezt= nu->bezt;
+ origbezt= orignu->bezt;
+ while (a--) {
+ BLI_ghash_insert(gh, bezt, init_nodeKeyIndex(origbezt, keyindex));
+ keyindex+= 12;
+ bezt++;
+ origbezt++;
+ }
+ } else {
+ a= orignu->pntsu * orignu->pntsv;
+ bp= nu->bp;
+ origbp= orignu->bp;
+ while (a--) {
+ BLI_ghash_insert(gh, bp, init_nodeKeyIndex(origbp, keyindex));
+ keyindex+= 4;
+ bp++;
+ origbp++;
+ }
+ }
+
+ nu= nu->next;
+ orignu= orignu->next;
+ }
+
+ editnurb->keyindex= gh;
+}
+
+static void free_editNurb_keyIndex(EditNurb *editnurb)
+{
+ if (!editnurb->keyindex) {
+ return;
+ }
+ BLI_ghash_free(editnurb->keyindex, NULL, (GHashValFreeFP)free_nodeKeyIndex);
+}
+
+static NodeKeyIndex *getNodeKeyIndex(EditNurb *editnurb, void *node)
+{
+ return BLI_ghash_lookup(editnurb->keyindex, node);
+}
+
+static BezTriple *getKeyIndexOrig_bezt(EditNurb *editnurb, void *node)
+{
+ NodeKeyIndex *index= getNodeKeyIndex(editnurb, node);
+
+ if (!index) {
+ return NULL;
+ }
+
+ return (BezTriple*)index->origNode;
+}
+
+static BPoint *getKeyIndexOrig_bp(EditNurb *editnurb, void *node)
+{
+ NodeKeyIndex *index= getNodeKeyIndex(editnurb, node);
+
+ if (!index) {
+ return NULL;
+ }
+
+ return (BPoint*)index->origNode;
+}
+
+static int getKeyIndexOrig_index(EditNurb *editnurb, void *node)
+{
+ NodeKeyIndex *index= getNodeKeyIndex(editnurb, node);
+
+ if (!index) {
+ return -1;
+ }
+
+ return index->index;
+}
+
+static void keyIndex_delNode(EditNurb *editnurb, void *node)
+{
+ if (!editnurb->keyindex) {
+ return;
+ }
+
+ BLI_ghash_remove(editnurb->keyindex, node, NULL, (GHashValFreeFP)free_nodeKeyIndex);
+}
+
+static void keyIndex_delBezt(EditNurb *editnurb, BezTriple *bezt)
+{
+ keyIndex_delNode(editnurb, bezt);
+}
+
+static void keyIndex_delBP(EditNurb *editnurb, BPoint *bp)
+{
+ keyIndex_delNode(editnurb, bp);
+}
+
+static void keyIndex_delNurb(EditNurb *editnurb, Nurb *nu)
+{
+ int a;
+
+ if (!editnurb->keyindex) {
+ return;
+ }
+
+ if (nu->bezt) {
+ BezTriple *bezt= nu->bezt;
+ a= nu->pntsu;
+
+ while (a--) {
+ BLI_ghash_remove(editnurb->keyindex, bezt, NULL, (GHashValFreeFP)free_nodeKeyIndex);
+ ++bezt;
+ }
+ } else {
+ BPoint *bp= nu->bp;
+ a= nu->pntsu * nu->pntsv;
+
+ while (a--) {
+ BLI_ghash_remove(editnurb->keyindex, bp, NULL, (GHashValFreeFP)free_nodeKeyIndex);
+ ++bp;
+ }
+ }
+}
+
+static void keyIndex_delNurbList(EditNurb *editnurb, ListBase *nubase)
+{
+ Nurb *nu= nubase->first;
+
+ while (nu) {
+ keyIndex_delNurb(editnurb, nu);
+
+ nu= nu->next;
+ }
+}
+
+static void keyIndex_updateNode(EditNurb *editnurb, char *node,
+ char *newnode, int count, int size, int search)
+{
+ int i;
+ NodeKeyIndex *index;
+
+ if (editnurb->keyindex == NULL) {
+ /* No shape keys - updating not needed */
+ return;
+ }
+
+ for (i = 0; i < count; i++) {
+ for (;;) {
+ index= getNodeKeyIndex(editnurb, node);
+ if (!search || index) {
+ break;
+ }
+ node += size;
+ }
+
+ BLI_ghash_remove(editnurb->keyindex, node, NULL, NULL);
+
+ if (index) {
+ BLI_ghash_insert(editnurb->keyindex, newnode, index);
+ }
+
+ newnode += size;
+ node += size;
+ }
+}
+
+static void keyIndex_updateBezt(EditNurb *editnurb, BezTriple *bezt,
+ BezTriple *newbezt, int count, int search)
+{
+ keyIndex_updateNode(editnurb, (char*)bezt, (char*)newbezt, count, sizeof(BezTriple), search);
+}
+
+static void keyIndex_updateBP(EditNurb *editnurb, BPoint *bp,
+ BPoint *newbp, int count, int search)
+{
+ keyIndex_updateNode(editnurb, (char*)bp, (char*)newbp, count, sizeof(BPoint), search);
+}
+
+static void keyIndex_updateNurb(EditNurb *editnurb, Nurb *nu, Nurb *newnu)
+{
+ if (nu->bezt) {
+ keyIndex_updateBezt(editnurb, nu->bezt, newnu->bezt, newnu->pntsu, 0);
+ } else {
+ keyIndex_updateBP(editnurb, nu->bp, newnu->bp, newnu->pntsu * newnu->pntsv, 0);
+ }
+}
+
+static void keyIndex_swap(EditNurb *editnurb, void *a, void *b)
+{
+ NodeKeyIndex *index1= getNodeKeyIndex(editnurb, a);
+ NodeKeyIndex *index2= getNodeKeyIndex(editnurb, b);
+
+ BLI_ghash_remove(editnurb->keyindex, a, NULL, NULL);
+ BLI_ghash_remove(editnurb->keyindex, b, NULL, NULL);
+
+ BLI_ghash_insert(editnurb->keyindex, a, index2);
+ BLI_ghash_insert(editnurb->keyindex, b, index1);
+}
+
+static void keyIndex_switchDirection(EditNurb *editnurb, Nurb *nu)
+{
+ int a;
+
+ if (nu->bezt) {
+ BezTriple *bezt1, *bezt2;
+
+ a= nu->pntsu;
+
+ bezt1= nu->bezt;
+ bezt2= bezt1+(a-1);
+
+ if (a & 1) ++a;
+
+ a/=2;
+
+ while (a--) {
+ if (bezt1 != bezt2) {
+ keyIndex_swap(editnurb, bezt1, bezt2);
+ }
+
+ bezt1++;
+ bezt2--;
+ }
+ } else {
+ BPoint *bp1, *bp2;
+
+ if (nu->pntsv == 1) {
+ a= nu->pntsu;
+ bp1= nu->bp;
+ bp2= bp1+(a-1);
+ a/= 2;
+ while(bp1!=bp2 && a>0) {
+ if (bp1 != bp2) {
+ keyIndex_swap(editnurb, bp1, bp2);
+ }
+
+ a--;
+ bp1++;
+ bp2--;
+ }
+ } else {
+ int b;
+
+ for(b=0; b<nu->pntsv; b++) {
+
+ bp1= nu->bp+b*nu->pntsu;
+ a= nu->pntsu;
+ bp2= bp1+(a-1);
+ a/= 2;
+
+ while(bp1!=bp2 && a>0) {
+ if (bp1 != bp2) {
+ keyIndex_swap(editnurb, bp1, bp2);
+ }
+
+ a--;
+ bp1++;
+ bp2--;
+ }
+ }
+
+ }
+ }
+}
+
+static void switch_keys_direction(Curve *cu, Nurb *actnu)
+{
+ KeyBlock *currkey;
+ ListBase *nubase= &cu->editnurb->nurbs;
+ Nurb *nu;
+ float *fp;
+ int a;
+
+ currkey = cu->key->block.first;
+ while(currkey) {
+ fp= currkey->data;
+
+ nu= nubase->first;
+ while (nu) {
+ if (nu->bezt) {
+ a= nu->pntsu;
+ if (nu == actnu) {
+ while (a--) {
+ swap_v3_v3(fp, fp + 6);
+ *(fp+9) = -*(fp+9);
+ fp += 12;
+ }
+ } else fp += a * 12;
+ } else {
+ a= nu->pntsu * nu->pntsv;
+ if (nu == actnu) {
+ while (a--) {
+ *(fp+3) = -*(fp+3);
+ fp += 4;
+ }
+ } else fp += a * 4;
+ }
+
+ nu= nu->next;
+ }
+
+ currkey= currkey->next;
+ }
+}
+
+static void keyData_switchDirectionNurb(Curve *cu, Nurb *nu)
+{
+ EditNurb *editnurb= cu->editnurb;
+
+ if (!editnurb->keyindex) {
+ /* no shape keys - nothing to do */
+ return;
+ }
+
+ keyIndex_switchDirection(editnurb, nu);
+ switch_keys_direction(cu, nu);
+}
+
+static GHash *dupli_keyIndexHash(GHash *keyindex)
+{
+ GHash *gh;
+ GHashIterator *hashIter;
+
+ gh= BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "dupli_keyIndex gh");
+
+ for(hashIter = BLI_ghashIterator_new(keyindex);
+ !BLI_ghashIterator_isDone(hashIter);
+ BLI_ghashIterator_step(hashIter)) {
+ void *node = BLI_ghashIterator_getKey(hashIter);
+ NodeKeyIndex *index = BLI_ghashIterator_getValue(hashIter);
+ NodeKeyIndex *newIndex = MEM_callocN(sizeof(NodeKeyIndex), "dupli_keyIndexHash index");
+
+ memcpy(newIndex, index, sizeof(NodeKeyIndex));
+
+ BLI_ghash_insert(gh, node, newIndex);
+ }
+
+ BLI_ghashIterator_free(hashIter);
+
+ return gh;
+}
+
+static void key_to_bezt(float *key, BezTriple *basebezt, BezTriple *bezt)
+{
+ memcpy(bezt, basebezt, sizeof(BezTriple));
+ memcpy(bezt->vec, key, sizeof(float) * 9);
+ bezt->alfa= key[9];
+}
+
+static void bezt_to_key(BezTriple *bezt, float *key)
+{
+ memcpy(key, bezt->vec, sizeof(float) * 9);
+ key[9] = bezt->alfa;
+}
+
+static void calc_keyHandles(ListBase *nurb, float *key)
+{
+ Nurb *nu;
+ int a;
+ float *fp= key;
+ BezTriple *bezt;
+
+ nu= nurb->first;
+ while (nu) {
+ if (nu->bezt) {
+ BezTriple *prevp, *nextp;
+ BezTriple cur, prev, next;
+ float *startfp, *prevfp, *nextfp;
+
+ bezt= nu->bezt;
+ a= nu->pntsu;
+ startfp= fp;
+
+ if(nu->flagu & CU_NURB_CYCLIC) {
+ prevp= bezt+(a-1);
+ prevfp= fp+(12 * (a-1));
+ } else {
+ prevp= NULL;
+ prevfp= NULL;
+ }
+
+ nextp= bezt + 1;
+ nextfp= fp + 12;
+
+ while (a--) {
+ key_to_bezt(fp, bezt, &cur);
+
+ if (nextp) key_to_bezt(nextfp, nextp, &next);
+ if (prevp) key_to_bezt(prevfp, prevp, &prev);
+
+ calchandleNurb(&cur, prevp ? &prev : NULL, nextp ? &next : NULL, 0);
+ bezt_to_key(&cur, fp);
+
+ prevp= bezt;
+ prevfp= fp;
+ if(a==1) {
+ if(nu->flagu & CU_NURB_CYCLIC) {
+ nextp= nu->bezt;
+ nextfp= startfp;
+ } else {
+ nextp= NULL;
+ nextfp= NULL;
+ }
+ }
+ else {
+ ++nextp;
+ nextfp += 12;;
+ }
+
+ ++bezt;
+ fp += 12;
+ }
+ } else {
+ a= nu->pntsu * nu->pntsv;
+ fp += a * 4;
+ }
+
+ nu= nu->next;
+ }
+}
+
+static void calc_shapeKeys(Object *obedit)
+{
+ Curve *cu= (Curve*)obedit->data;
+
+ /* are there keys? */
+ if(cu->key) {
+ int a, i, j;
+ EditNurb *editnurb= cu->editnurb;
+ KeyBlock *currkey;
+ KeyBlock *actkey= BLI_findlink(&cu->key->block, editnurb->shapenr-1);
+ BezTriple *bezt, *oldbezt;
+ BPoint *bp, *oldbp;
+ Nurb *nu;
+ int totvert= count_curveverts(&editnurb->nurbs);
+
+ float (*ofs)[3] = NULL;
+ float *oldkey, *newkey, *fp, *ofp;
+
+ /* editing the base key should update others */
+ if(cu->key->type==KEY_RELATIVE) {
+ int act_is_basis = 0;
+ /* find if this key is a basis for any others */
+ for(currkey = cu->key->block.first; currkey; currkey= currkey->next) {
+ if(editnurb->shapenr-1 == currkey->relative) {
+ act_is_basis = 1;
+ break;
+ }
+ }
+
+ if(act_is_basis) { /* active key is a base */
+ int j;
+ int totvec= 0;
+
+ /* Calculate needed memory to store offset */
+ nu= editnurb->nurbs.first;
+ while(nu) {
+ if (nu->bezt) {
+ /* Three vects to store handles and one for alfa */
+ totvec+= nu->pntsu * 4;
+ } else {
+ totvec+= 2 * nu->pntsu * nu->pntsv;
+ }
+
+ nu= nu->next;
+ }
+
+ ofs= MEM_callocN(sizeof(float) * 3 * totvec, "currkey->data");
+ nu= editnurb->nurbs.first;
+ i= 0;
+ while(nu) {
+ if(nu->bezt) {
+ bezt= nu->bezt;
+ a= nu->pntsu;
+ while(a--) {
+ oldbezt= getKeyIndexOrig_bezt(editnurb, bezt);
+
+ if (oldbezt) {
+ for (j= 0; j < 3; ++j) {
+ VECSUB(ofs[i], bezt->vec[j], oldbezt->vec[j]);
+ i++;
+ fp+= 3;
+ }
+ ofs[i++][0]= bezt->alfa - oldbezt->alfa;
+ } else {
+ i += 4;
+ }
+ bezt++;
+ }
+ }
+ else {
+ bp= nu->bp;
+ a= nu->pntsu*nu->pntsv;
+ while(a--) {
+ oldbp= getKeyIndexOrig_bp(editnurb, bp);
+ if (oldbp) {
+ VECSUB(ofs[i], bp->vec, oldbp->vec);
+ ofs[i+1][0]= bp->alfa - oldbp->alfa;
+ }
+ i += 2;
+ ++bp;
+ fp += 4;
+ }
+ }
+
+ nu= nu->next;
+ }
+ }
+ }
+
+ currkey = cu->key->block.first;
+ while(currkey) {
+ int apply_offset = (ofs && (currkey != actkey) && (editnurb->shapenr-1 == currkey->relative));
+
+ fp= newkey= MEM_callocN(cu->key->elemsize * totvert, "currkey->data");
+ ofp= oldkey = currkey->data;
+
+ nu= editnurb->nurbs.first;
+ i = 0;
+ while(nu) {
+ if(currkey == actkey) {
+ int restore= actkey != cu->key->refkey;
+
+ if(nu->bezt) {
+ bezt= nu->bezt;
+ a= nu->pntsu;
+ while(a--) {
+ oldbezt= getKeyIndexOrig_bezt(editnurb, bezt);
+
+ for (j= 0; j < 3; ++j, ++i) {
+ VECCOPY(fp, bezt->vec[j]);
+
+ if (restore && oldbezt) {
+ VECCOPY(bezt->vec[j], oldbezt->vec[j]);
+ }
+
+ fp+= 3;
+ }
+ fp[0]= bezt->alfa;
+
+ if(restore && oldbezt) {
+ bezt->alfa= oldbezt->alfa;
+ }
+
+ fp+= 3; ++i;/* alphas */
+ ++bezt;
+ }
+ }
+ else {
+ bp= nu->bp;
+ a= nu->pntsu*nu->pntsv;
+ while(a--) {
+ oldbp= getKeyIndexOrig_bp(editnurb, bp);
+
+ VECCOPY(fp, bp->vec);
+
+ fp[3]= bp->alfa;
+
+ if(restore && oldbp) {
+ VECCOPY(bp->vec, oldbp->vec);
+ bp->alfa= oldbp->alfa;
+ }
+
+ fp+= 4;
+ ++bp;
+ i+=2;
+ }
+ }
+ }
+ else {
+ int index;
+ float *curofp;
+
+ if(oldkey) {
+ if(nu->bezt) {
+ bezt= nu->bezt;
+ a= nu->pntsu;
+
+ while(a--) {
+ index= getKeyIndexOrig_index(editnurb, bezt);
+ if (index >= 0) {
+ curofp= ofp + index;
+
+ for (j= 0; j < 3; ++j, ++i) {
+ VECCOPY(fp, curofp);
+
+ if(apply_offset) {
+ VECADD(fp, fp, ofs[i]);
+ }
+
+ fp+= 3; curofp+= 3;
+ }
+ fp[0]= curofp[0];
+
+ if(apply_offset) {
+ /* apply alfa offsets */
+ VECADD(fp, fp, ofs[i]);
+ ++i;
+ }
+
+ fp+= 3; curofp+= 3; /* alphas */
+ } else {
+ for (j= 0; j < 3; ++j, ++i) {
+ VECCOPY(fp, bezt->vec[j]);
+ fp+= 3;
+ }
+ fp[0]= bezt->alfa;
+
+ fp+= 3; /* alphas */
+ }
+ ++bezt;
+ }
+ }
+ else {
+ bp= nu->bp;
+ a= nu->pntsu*nu->pntsv;
+ while(a--) {
+ index= getKeyIndexOrig_index(editnurb, bp);
+
+ if (index >= 0) {
+ curofp= ofp + index;
+ VECCOPY(fp, curofp);
+ fp[3]= curofp[3];
+
+ if(apply_offset) {
+ VECADD(fp, fp, ofs[i]);
+ fp[3]+=ofs[i+1][0];
+ }
+ } else {
+ VECCOPY(fp, bp->vec);
+ fp[3]= bp->alfa;
+ }
+
+ fp+= 4;
+ ++bp;
+ i+=2;
+ }
+ }
+ }
+ }
+
+ nu= nu->next;
+ }
+
+ if (apply_offset) {
+ /* handles could become malicious after offsets applying */
+ calc_keyHandles(&editnurb->nurbs, newkey);
+ }
+
+ currkey->totelem= totvert;
+ if(currkey->data) MEM_freeN(currkey->data);
+ currkey->data = newkey;
+
+ currkey= currkey->next;
+ }
+
+ if(ofs) MEM_freeN(ofs);
+ }
+}
+
/* ********************* LOAD and MAKE *************** */
/* load editNurb in object */
@@ -272,48 +969,32 @@ void load_editNurb(Object *obedit)
if (ELEM(obedit->type, OB_CURVE, OB_SURF)) {
Curve *cu= obedit->data;
Nurb *nu, *newnu;
- KeyBlock *actkey;
- int totvert= count_curveverts(editnurb);
+ ListBase newnurb= {NULL, NULL}, oldnurb= cu->nurb;
- /* are there keys? */
- actkey = ob_get_keyblock(obedit);
- if(actkey) {
- /* active key: the vertices */
-
- if(totvert) {
- if(actkey->data) MEM_freeN(actkey->data);
-
- actkey->data= MEM_callocN(cu->key->elemsize*totvert, "actkey->data");
- actkey->totelem= totvert;
-
- curve_to_key(cu, actkey, editnurb);
- }
- }
-
- if(cu->key && actkey!=cu->key->refkey) {
- ;
- }
- else {
- freeNurblist(&(cu->nurb));
-
- for(nu= editnurb->first; nu; nu= nu->next) {
- newnu= duplicateNurb(nu);
- BLI_addtail(&(cu->nurb), newnu);
-
- if(nu->type == CU_NURBS) {
- clamp_nurb_order_u(nu);
- }
+ for(nu= editnurb->first; nu; nu= nu->next) {
+ newnu= duplicateNurb(nu);
+ BLI_addtail(&newnurb, newnu);
+
+ if(nu->type == CU_NURBS) {
+ clamp_nurb_order_u(nu);
}
}
+
+ cu->nurb= newnurb;
+
+ calc_shapeKeys(obedit);
+
+ freeNurblist(&oldnurb);
}
-
+
set_actNurb(obedit, NULL);
}
/* make copy in cu->editnurb */
void make_editNurb(Object *obedit)
{
- ListBase *editnurb= curve_get_editcurve(obedit);
+ Curve *cu= (Curve*)obedit->data;
+ EditNurb *editnurb= cu->editnurb;
Nurb *nu, *newnu, *nu_act= NULL;
KeyBlock *actkey;
@@ -322,20 +1003,29 @@ void make_editNurb(Object *obedit)
set_actNurb(obedit, NULL);
if (ELEM(obedit->type, OB_CURVE, OB_SURF)) {
- Curve *cu= obedit->data;
-
- if(editnurb)
- freeNurblist(editnurb);
- else
- editnurb= cu->editnurb= MEM_callocN(sizeof(ListBase), "editnurb");
-
+ actkey = ob_get_keyblock(obedit);
+ if(actkey) {
+ // XXX strcpy(G.editModeTitleExtra, "(Key) ");
+ undo_editmode_clear();
+ key_to_curve(actkey, cu, &cu->nurb);
+ }
+
+ if(editnurb) {
+ freeNurblist(&editnurb->nurbs);
+ free_editNurb_keyIndex(editnurb);
+ editnurb->keyindex= NULL;
+ } else {
+ editnurb= MEM_callocN(sizeof(EditNurb), "editnurb");
+ cu->editnurb= editnurb;
+ }
+
nu= cu->nurb.first;
cu->lastsel= NULL; /* for select row */
-
+
while(nu) {
newnu= duplicateNurb(nu);
test2DNurb(newnu); // after join, or any other creation of curve
- BLI_addtail(editnurb, newnu);
+ BLI_addtail(&editnurb->nurbs, newnu);
if (nu_act == NULL && isNurbsel(nu)) {
nu_act= newnu;
@@ -344,26 +1034,31 @@ void make_editNurb(Object *obedit)
nu= nu->next;
}
-
- actkey = ob_get_keyblock(obedit);
+
if(actkey) {
- // XXX strcpy(G.editModeTitleExtra, "(Key) ");
- key_to_curve(actkey, cu, editnurb);
+ editnurb->shapenr= obedit->shapenr;
+ init_editNurb_keyIndex(editnurb, &cu->nurb);
}
}
}
-void free_editNurb(Object *obedit)
+void free_curve_editNurb (Curve *cu)
{
- Curve *cu= obedit->data;
-
if(cu->editnurb) {
- freeNurblist(cu->editnurb);
+ freeNurblist(&cu->editnurb->nurbs);
+ free_editNurb_keyIndex(cu->editnurb);
MEM_freeN(cu->editnurb);
cu->editnurb= NULL;
}
}
+void free_editNurb(Object *obedit)
+{
+ Curve *cu= obedit->data;
+
+ free_curve_editNurb(cu);
+}
+
void CU_deselect_all(Object *obedit)
{
ListBase *editnurb= curve_get_editcurve(obedit);
@@ -428,12 +1123,13 @@ void CU_select_swap(Object *obedit)
static int separate_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
Nurb *nu, *nu1;
Object *oldob, *newob;
Base *oldbase, *newbase;
Curve *oldcu, *newcu;
- ListBase *oldedit, *newedit;
+ EditNurb *oldedit, *newedit;
oldbase= CTX_data_active_base(C);
oldob= oldbase->object;
@@ -448,7 +1144,7 @@ static int separate_exec(bContext *C, wmOperator *op)
WM_cursor_wait(1);
/* 1. duplicate the object and data */
- newbase= ED_object_add_duplicate(scene, oldbase, 0); /* 0 = fully linked */
+ newbase= ED_object_add_duplicate(bmain, scene, oldbase, 0); /* 0 = fully linked */
ED_base_object_select(newbase, BA_DESELECT);
newob= newbase->object;
@@ -459,15 +1155,16 @@ static int separate_exec(bContext *C, wmOperator *op)
/* 2. put new object in editmode and clear it */
make_editNurb(newob);
newedit= newcu->editnurb;
- freeNurblist(newedit);
+ freeNurblist(&newedit->nurbs);
+ free_editNurb_keyIndex(newedit);
/* 3. move over parts from old object */
- for(nu= oldedit->first; nu; nu=nu1) {
+ for(nu= oldedit->nurbs.first; nu; nu=nu1) {
nu1= nu->next;
if(isNurbsel(nu)) {
- BLI_remlink(oldedit, nu);
- BLI_addtail(newedit, nu);
+ BLI_remlink(&oldedit->nurbs, nu);
+ BLI_addtail(&newedit->nurbs, nu);
}
}
@@ -679,6 +1376,7 @@ static int deleteflagNurb(bContext *C, wmOperator *op, int flag)
}
if(a==0) {
BLI_remlink(editnurb, nu);
+ keyIndex_delNurb(cu->editnurb, nu);
freeNurb(nu); nu=NULL;
}
else {
@@ -707,10 +1405,13 @@ static int deleteflagNurb(bContext *C, wmOperator *op, int flag)
if((bp->f1 & flag)==0) {
memcpy(bpn, bp, nu->pntsu*sizeof(BPoint));
bpn+= nu->pntsu;
+ } else {
+ keyIndex_delBP(cu->editnurb, bp);
}
bp+= nu->pntsu;
}
nu->pntsv= newv;
+ keyIndex_updateBP(cu->editnurb, nu->bp, newbp, newv * nu->pntsu, 1);
MEM_freeN(nu->bp);
nu->bp= newbp;
clamp_nurb_order_v(nu);
@@ -744,9 +1445,12 @@ static int deleteflagNurb(bContext *C, wmOperator *op, int flag)
if((bp->f1 & flag)==0) {
*bpn= *bp;
bpn++;
+ } else {
+ keyIndex_delBP(cu->editnurb, bp);
}
}
}
+ keyIndex_updateBP(cu->editnurb, nu->bp, newbp, newu * nu->pntsv, 1);
MEM_freeN(nu->bp);
nu->bp= newbp;
if(newu==1 && nu->pntsv>1) { /* make a U spline */
@@ -772,13 +1476,13 @@ static int deleteflagNurb(bContext *C, wmOperator *op, int flag)
}
/* only for OB_SURF */
-static short extrudeflagNurb(ListBase *editnurb, int flag)
+static short extrudeflagNurb(EditNurb *editnurb, int flag)
{
Nurb *nu;
BPoint *bp, *bpn, *newbp;
int ok= 0, a, u, v, len;
- nu= editnurb->first;
+ nu= editnurb->nurbs.first;
while(nu) {
if(nu->pntsv==1) {
@@ -794,9 +1498,9 @@ static short extrudeflagNurb(ListBase *editnurb, int flag)
ok= 1;
newbp =
(BPoint*)MEM_mallocN(2 * nu->pntsu * sizeof(BPoint), "extrudeNurb1");
- memcpy(newbp, nu->bp, nu->pntsu*sizeof(BPoint) );
+ ED_curve_bpcpy(editnurb, newbp, nu->bp, nu->pntsu);
bp= newbp+ nu->pntsu;
- memcpy(bp, nu->bp, nu->pntsu*sizeof(BPoint) );
+ ED_curve_bpcpy(editnurb, bp, nu->bp, nu->pntsu);
MEM_freeN(nu->bp);
nu->bp= newbp;
a= nu->pntsu;
@@ -813,7 +1517,7 @@ static short extrudeflagNurb(ListBase *editnurb, int flag)
}
}
else {
- /* which row or collumn is selected */
+ /* which row or column is selected */
if( isNurbselUV(nu, &u, &v, flag) ) {
@@ -832,14 +1536,14 @@ static short extrudeflagNurb(ListBase *editnurb, int flag)
* sizeof(BPoint), "extrudeNurb1");
if(u==0) {
len= nu->pntsv*nu->pntsu;
- memcpy(newbp+nu->pntsu, nu->bp, len*sizeof(BPoint) );
- memcpy(newbp, nu->bp, nu->pntsu*sizeof(BPoint) );
+ ED_curve_bpcpy(editnurb, newbp+nu->pntsu, nu->bp, len);
+ ED_curve_bpcpy(editnurb, newbp, nu->bp, nu->pntsu);
bp= newbp;
}
else {
len= nu->pntsv*nu->pntsu;
- memcpy(newbp, nu->bp, len*sizeof(BPoint) );
- memcpy(newbp+len, nu->bp+len-nu->pntsu, nu->pntsu*sizeof(BPoint) );
+ ED_curve_bpcpy(editnurb, newbp, nu->bp, len);
+ ED_curve_bpcpy(editnurb, newbp+len, nu->bp+len-nu->pntsu, nu->pntsu);
bp= newbp+len;
}
@@ -866,7 +1570,7 @@ static short extrudeflagNurb(ListBase *editnurb, int flag)
bpn->f1 |= flag;
bpn++;
}
- memcpy(bpn, bp, nu->pntsu*sizeof(BPoint));
+ ED_curve_bpcpy(editnurb, bpn, bp, nu->pntsu);
bp+= nu->pntsu;
bpn+= nu->pntsu;
if(v== nu->pntsu-1) {
@@ -1068,13 +1772,16 @@ static void adduplicateflagNurb(Object *obedit, short flag)
static int switch_direction_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- ListBase *editnurb= curve_get_editcurve(obedit);
+ Curve *cu= (Curve*)obedit->data;
+ EditNurb *editnurb= cu->editnurb;
Nurb *nu;
-
- for(nu= editnurb->first; nu; nu= nu->next)
- if(isNurbsel(nu))
+
+ for(nu= editnurb->nurbs.first; nu; nu= nu->next)
+ if(isNurbsel(nu)) {
switchdirectionNurb(nu);
-
+ keyData_switchDirectionNurb(cu, nu);
+ }
+
DAG_id_flush_update(obedit->data, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_GEOM|ND_DATA, obedit->data);
@@ -3004,7 +3711,7 @@ static int make_segment_exec(bContext *C, wmOperator *op)
/* joins 2 curves */
Object *obedit= CTX_data_edit_object(C);
Curve *cu= obedit->data;
- ListBase *editnurb= curve_get_editcurve(obedit);
+ ListBase *nubase= curve_get_editcurve(obedit);
Nurb *nu, *nu1=0, *nu2=0;
BezTriple *bezt;
BPoint *bp;
@@ -3012,7 +3719,7 @@ static int make_segment_exec(bContext *C, wmOperator *op)
int a;
/* first decide if this is a surface merge! */
- if(obedit->type==OB_SURF) nu= editnurb->first;
+ if(obedit->type==OB_SURF) nu= nubase->first;
else nu= NULL;
while(nu) {
@@ -3035,7 +3742,7 @@ static int make_segment_exec(bContext *C, wmOperator *op)
return merge_nurb(C, op);
/* find both nurbs and points, nu1 will be put behind nu2 */
- for(nu= editnurb->first; nu; nu= nu->next) {
+ for(nu= nubase->first; nu; nu= nu->next) {
if((nu->flagu & CU_NURB_CYCLIC)==0) { /* not cyclic */
if(nu->type == CU_BEZIER) {
bezt= nu->bezt;
@@ -3046,6 +3753,7 @@ static int make_segment_exec(bContext *C, wmOperator *op)
if( BEZSELECTED_HIDDENHANDLES(cu, bezt) ) {
nu1= nu;
switchdirectionNurb(nu);
+ keyData_switchDirectionNurb(cu, nu);
}
}
}
@@ -3053,6 +3761,7 @@ static int make_segment_exec(bContext *C, wmOperator *op)
if( BEZSELECTED_HIDDENHANDLES(cu, bezt) ) {
nu2= nu;
switchdirectionNurb(nu);
+ keyData_switchDirectionNurb(cu, nu);
}
else {
bezt= bezt+(nu->pntsu-1);
@@ -3072,6 +3781,7 @@ static int make_segment_exec(bContext *C, wmOperator *op)
if( bp->f1 & SELECT ) {
nu1= nu;
switchdirectionNurb(nu);
+ keyData_switchDirectionNurb(cu, nu);
}
}
}
@@ -3079,6 +3789,7 @@ static int make_segment_exec(bContext *C, wmOperator *op)
if( bp->f1 & SELECT ) {
nu2= nu;
switchdirectionNurb(nu);
+ keyData_switchDirectionNurb(cu, nu);
}
else {
bp= bp+(nu->pntsu-1);
@@ -3097,27 +3808,28 @@ static int make_segment_exec(bContext *C, wmOperator *op)
if(nu1->type == CU_BEZIER) {
bezt =
(BezTriple*)MEM_mallocN((nu1->pntsu+nu2->pntsu) * sizeof(BezTriple), "addsegmentN");
- memcpy(bezt, nu2->bezt, nu2->pntsu*sizeof(BezTriple));
- memcpy(bezt+nu2->pntsu, nu1->bezt, nu1->pntsu*sizeof(BezTriple));
+ ED_curve_beztcpy(cu->editnurb, bezt, nu2->bezt, nu2->pntsu);
+ ED_curve_beztcpy(cu->editnurb, bezt+nu2->pntsu, nu1->bezt, nu1->pntsu);
+
MEM_freeN(nu1->bezt);
nu1->bezt= bezt;
nu1->pntsu+= nu2->pntsu;
- BLI_remlink(editnurb, nu2);
+ BLI_remlink(nubase, nu2);
freeNurb(nu2); nu2= NULL;
calchandlesNurb(nu1);
}
else {
bp =
(BPoint*)MEM_mallocN((nu1->pntsu+nu2->pntsu) * sizeof(BPoint), "addsegmentN2");
- memcpy(bp, nu2->bp, nu2->pntsu*sizeof(BPoint) );
- memcpy(bp+nu2->pntsu, nu1->bp, nu1->pntsu*sizeof(BPoint));
+ ED_curve_bpcpy(cu->editnurb, bp, nu2->bp, nu2->pntsu);
+ ED_curve_bpcpy(cu->editnurb, bp+nu2->pntsu, nu1->bp, nu1->pntsu);
MEM_freeN(nu1->bp);
nu1->bp= bp;
a= nu1->pntsu+nu1->orderu;
nu1->pntsu+= nu2->pntsu;
- BLI_remlink(editnurb, nu2);
+ BLI_remlink(nubase, nu2);
/* now join the knots */
if(nu1->type == CU_NURBS) {
@@ -3263,6 +3975,7 @@ int mouse_nurb(bContext *C, short mval[2], int extend)
*/
static int spin_nurb(bContext *C, Scene *scene, Object *obedit, float *dvec, float *cent, short mode)
{
+ Curve *cu= (Curve*)obedit->data;
ListBase *editnurb= curve_get_editcurve(obedit);
Nurb *nu;
float si,phi,n[3],q[4],cmat[3][3],tmat[3][3],imat[3][3];
@@ -3311,7 +4024,7 @@ static int spin_nurb(bContext *C, Scene *scene, Object *obedit, float *dvec, flo
ok= 1;
for(a=0;a<7;a++) {
- if(mode==0 || mode==2) ok= extrudeflagNurb(editnurb, 1);
+ if(mode==0 || mode==2) ok= extrudeflagNurb(cu->editnurb, 1);
else adduplicateflagNurb(obedit, 1);
if(ok==0)
@@ -3405,7 +4118,8 @@ void CURVE_OT_spin(wmOperatorType *ot)
static int addvert_Nurb(bContext *C, short mode, float location[3])
{
Object *obedit= CTX_data_edit_object(C);
- ListBase *editnurb= curve_get_editcurve(obedit);
+ Curve *cu= (Curve*)obedit->data;
+ EditNurb *editnurb= cu->editnurb;
Nurb *nu;
BezTriple *bezt, *newbezt = NULL;
BPoint *bp, *newbp = NULL;
@@ -3414,7 +4128,7 @@ static int addvert_Nurb(bContext *C, short mode, float location[3])
copy_m3_m4(mat, obedit->obmat);
invert_m3_m3(imat,mat);
- findselectedNurbvert(editnurb, &nu, &bezt, &bp);
+ findselectedNurbvert(&editnurb->nurbs, &nu, &bezt, &bp);
if(bezt==0 && bp==0) return OPERATOR_CANCELLED;
if(nu->type == CU_BEZIER) {
@@ -3423,7 +4137,7 @@ static int addvert_Nurb(bContext *C, short mode, float location[3])
BEZ_DESEL(bezt);
newbezt =
(BezTriple*)MEM_callocN((nu->pntsu+1) * sizeof(BezTriple), "addvert_Nurb");
- memcpy(newbezt+1, bezt, nu->pntsu*sizeof(BezTriple));
+ ED_curve_beztcpy(editnurb, newbezt+1, bezt, nu->pntsu);
*newbezt= *bezt;
BEZ_SEL(newbezt);
newbezt->h2= newbezt->h1;
@@ -3436,7 +4150,7 @@ static int addvert_Nurb(bContext *C, short mode, float location[3])
BEZ_DESEL(bezt);
newbezt =
(BezTriple*)MEM_callocN((nu->pntsu+1) * sizeof(BezTriple), "addvert_Nurb");
- memcpy(newbezt, nu->bezt, nu->pntsu*sizeof(BezTriple));
+ ED_curve_beztcpy(editnurb, newbezt, nu->bezt, nu->pntsu);
*(newbezt+nu->pntsu)= *bezt;
VECCOPY(temp, bezt->vec[1]);
MEM_freeN(nu->bezt);
@@ -3473,7 +4187,7 @@ static int addvert_Nurb(bContext *C, short mode, float location[3])
bp->f1= 0;
newbp =
(BPoint*)MEM_callocN((nu->pntsu+1) * sizeof(BPoint), "addvert_Nurb3");
- memcpy(newbp+1, bp, nu->pntsu*sizeof(BPoint));
+ ED_curve_bpcpy(editnurb, newbp+1, bp, nu->pntsu);
*newbp= *bp;
newbp->f1= 1;
MEM_freeN(nu->bp);
@@ -3484,7 +4198,7 @@ static int addvert_Nurb(bContext *C, short mode, float location[3])
bp->f1= 0;
newbp =
(BPoint*)MEM_callocN((nu->pntsu+1) * sizeof(BPoint), "addvert_Nurb4");
- memcpy(newbp, nu->bp, nu->pntsu*sizeof(BPoint));
+ ED_curve_bpcpy(editnurb, newbp, nu->bp, nu->pntsu);
*(newbp+nu->pntsu)= *bp;
MEM_freeN(nu->bp);
nu->bp= newbp;
@@ -3573,11 +4287,11 @@ static int extrude_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
Curve *cu= obedit->data;
- ListBase *editnurb= curve_get_editcurve(obedit);
+ EditNurb *editnurb= cu->editnurb;
Nurb *nu;
/* first test: curve? */
- for(nu= editnurb->first; nu; nu= nu->next)
+ for(nu= editnurb->nurbs.first; nu; nu= nu->next)
if(nu->pntsv==1 && isNurbsel_count(cu, nu)==1)
break;
@@ -4333,7 +5047,7 @@ static void select_nth_bp(Nurb *nu, BPoint *bp, int nth)
int CU_select_nth(Object *obedit, int nth)
{
Curve *cu= (Curve*)obedit->data;
- ListBase *nubase= cu->editnurb;
+ ListBase *nubase= ED_curve_editnurbs(cu);
Nurb *nu;
int ok=0;
@@ -4441,15 +5155,20 @@ static int delete_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
Curve *cu= obedit->data;
- ListBase *editnurb= curve_get_editcurve(obedit);
+ EditNurb *editnurb= cu->editnurb;
+ ListBase *nubase= &editnurb->nurbs;
Nurb *nu, *next, *nu1;
BezTriple *bezt, *bezt1, *bezt2;
BPoint *bp, *bp1, *bp2;
int a, cut= 0, type= RNA_enum_get(op->ptr, "type");
if(obedit->type==OB_SURF) {
- if(type==0) deleteflagNurb(C, op, 1);
- else freeNurblist(editnurb);
+ if(type==0) {
+ deleteflagNurb(C, op, 1);
+ } else {
+ keyIndex_delNurbList(editnurb, nubase);
+ freeNurblist(nubase);
+ }
WM_event_add_notifier(C, NC_GEOM|ND_DATA, obedit->data);
DAG_id_flush_update(obedit->data, OB_RECALC_DATA);
@@ -4459,7 +5178,7 @@ static int delete_exec(bContext *C, wmOperator *op)
if(type==0) {
/* first loop, can we remove entire pieces? */
- nu= editnurb->first;
+ nu= nubase->first;
while(nu) {
next= nu->next;
if(nu->type == CU_BEZIER) {
@@ -4473,7 +5192,8 @@ static int delete_exec(bContext *C, wmOperator *op)
bezt++;
}
if(a==0) {
- BLI_remlink(editnurb, nu);
+ BLI_remlink(nubase, nu);
+ keyIndex_delNurb(editnurb, nu);
freeNurb(nu); nu= NULL;
}
}
@@ -4489,7 +5209,8 @@ static int delete_exec(bContext *C, wmOperator *op)
bp++;
}
if(a==0) {
- BLI_remlink(editnurb, nu);
+ BLI_remlink(nubase, nu);
+ keyIndex_delNurb(editnurb, nu);
freeNurb(nu); nu= NULL;
}
}
@@ -4505,18 +5226,21 @@ static int delete_exec(bContext *C, wmOperator *op)
nu= next;
}
/* 2nd loop, delete small pieces: just for curves */
- nu= editnurb->first;
+ nu= nubase->first;
while(nu) {
next= nu->next;
type= 0;
if(nu->type == CU_BEZIER) {
+ int delta= 0;
bezt= nu->bezt;
for(a=0;a<nu->pntsu;a++) {
if( BEZSELECTED_HIDDENHANDLES(cu, bezt) ) {
memmove(bezt, bezt+1, (nu->pntsu-a-1)*sizeof(BezTriple));
+ keyIndex_delBezt(editnurb, bezt + delta);
nu->pntsu--;
a--;
type= 1;
+ delta++;
}
else bezt++;
}
@@ -4524,20 +5248,24 @@ static int delete_exec(bContext *C, wmOperator *op)
bezt1 =
(BezTriple*)MEM_mallocN((nu->pntsu) * sizeof(BezTriple), "delNurb");
memcpy(bezt1, nu->bezt, (nu->pntsu)*sizeof(BezTriple) );
+ keyIndex_updateBezt(editnurb, nu->bezt, bezt1, nu->pntsu, 1);
MEM_freeN(nu->bezt);
nu->bezt= bezt1;
calchandlesNurb(nu);
}
}
else if(nu->pntsv==1) {
+ int delta= 0;
bp= nu->bp;
for(a=0;a<nu->pntsu;a++) {
if( bp->f1 & SELECT ) {
memmove(bp, bp+1, (nu->pntsu-a-1)*sizeof(BPoint));
+ keyIndex_delBP(editnurb, bp + delta);
nu->pntsu--;
a--;
type= 1;
+ delta++;
}
else {
bp++;
@@ -4546,6 +5274,7 @@ static int delete_exec(bContext *C, wmOperator *op)
if(type) {
bp1 = (BPoint*)MEM_mallocN(nu->pntsu * sizeof(BPoint), "delNurb2");
memcpy(bp1, nu->bp, (nu->pntsu)*sizeof(BPoint) );
+ keyIndex_updateBP(editnurb, nu->bp, bp1, nu->pntsu, 1);
MEM_freeN(nu->bp);
nu->bp= bp1;
@@ -4565,7 +5294,7 @@ static int delete_exec(bContext *C, wmOperator *op)
/* find the 2 selected points */
bezt1= bezt2= 0;
bp1= bp2= 0;
- nu= editnurb->first;
+ nu= nubase->first;
nu1= 0;
while(nu) {
next= nu->next;
@@ -4628,16 +5357,17 @@ static int delete_exec(bContext *C, wmOperator *op)
if(nu1) {
if(bezt1) {
if(nu1->pntsu==2) { /* remove completely */
- BLI_remlink(editnurb, nu);
+ BLI_remlink(nubase, nu);
freeNurb(nu); nu = NULL;
}
else if(nu1->flagu & CU_NURB_CYCLIC) { /* cyclic */
bezt =
(BezTriple*)MEM_mallocN((cut+1) * sizeof(BezTriple), "delNurb1");
- memcpy(bezt, nu1->bezt,(cut+1)*sizeof(BezTriple));
+ ED_curve_beztcpy(editnurb, bezt, nu1->bezt, cut+1);
a= nu1->pntsu-cut-1;
- memcpy(nu1->bezt, bezt2, a*sizeof(BezTriple));
- memcpy(nu1->bezt+a, bezt, (cut+1)*sizeof(BezTriple));
+ ED_curve_beztcpy(editnurb, nu1->bezt, bezt2, a);
+ ED_curve_beztcpy(editnurb, nu1->bezt+a, bezt, cut+1);
+
nu1->flagu &= ~CU_NURB_CYCLIC;
MEM_freeN(bezt);
calchandlesNurb(nu);
@@ -4649,15 +5379,15 @@ static int delete_exec(bContext *C, wmOperator *op)
nu =
(Nurb*)MEM_mallocN(sizeof(Nurb), "delNurb2");
memcpy(nu, nu1, sizeof(Nurb));
- BLI_addtail(editnurb, nu);
+ BLI_addtail(nubase, nu);
nu->bezt =
(BezTriple*)MEM_mallocN((cut+1) * sizeof(BezTriple), "delNurb3");
- memcpy(nu->bezt, nu1->bezt,(cut+1)*sizeof(BezTriple));
+ ED_curve_beztcpy(editnurb, nu->bezt, nu1->bezt, cut+1);
a= nu1->pntsu-cut-1;
bezt =
(BezTriple*)MEM_mallocN(a * sizeof(BezTriple), "delNurb4");
- memcpy(bezt, nu1->bezt+cut+1,a*sizeof(BezTriple));
+ ED_curve_beztcpy(editnurb, bezt, nu1->bezt+cut+1, a);
MEM_freeN(nu1->bezt);
nu1->bezt= bezt;
nu1->pntsu= a;
@@ -4670,30 +5400,31 @@ static int delete_exec(bContext *C, wmOperator *op)
}
else if(bp1) {
if(nu1->pntsu==2) { /* remove completely */
- BLI_remlink(editnurb, nu);
+ BLI_remlink(nubase, nu);
freeNurb(nu); nu= NULL;
}
else if(nu1->flagu & CU_NURB_CYCLIC) { /* cyclic */
bp =
(BPoint*)MEM_mallocN((cut+1) * sizeof(BPoint), "delNurb5");
- memcpy(bp, nu1->bp,(cut+1)*sizeof(BPoint));
+ ED_curve_bpcpy(editnurb, bp, nu1->bp, cut+1);
a= nu1->pntsu-cut-1;
- memcpy(nu1->bp, bp2, a*sizeof(BPoint));
- memcpy(nu1->bp+a, bp, (cut+1)*sizeof(BPoint));
+ ED_curve_bpcpy(editnurb, nu1->bp, bp2, a);
+ ED_curve_bpcpy(editnurb, nu1->bp+a, bp, cut+1);
+
nu1->flagu &= ~CU_NURB_CYCLIC;
MEM_freeN(bp);
}
else { /* add new curve */
nu = (Nurb*)MEM_mallocN(sizeof(Nurb), "delNurb6");
memcpy(nu, nu1, sizeof(Nurb));
- BLI_addtail(editnurb, nu);
+ BLI_addtail(nubase, nu);
nu->bp =
(BPoint*)MEM_mallocN((cut+1) * sizeof(BPoint), "delNurb7");
- memcpy(nu->bp, nu1->bp,(cut+1)*sizeof(BPoint));
+ ED_curve_bpcpy(editnurb, nu->bp, nu1->bp, cut+1);
a= nu1->pntsu-cut-1;
bp =
(BPoint*)MEM_mallocN(a * sizeof(BPoint), "delNurb8");
- memcpy(bp, nu1->bp+cut+1,a*sizeof(BPoint));
+ ED_curve_bpcpy(editnurb, bp, nu1->bp+cut+1, a);
MEM_freeN(nu1->bp);
nu1->bp= bp;
nu1->pntsu= a;
@@ -4702,8 +5433,10 @@ static int delete_exec(bContext *C, wmOperator *op)
}
}
}
- else if(type==2)
- freeNurblist(editnurb);
+ else if(type==2) {
+ keyIndex_delNurbList(editnurb, nubase);
+ freeNurblist(nubase);
+ }
WM_event_add_notifier(C, NC_GEOM|ND_DATA, obedit->data);
DAG_id_flush_update(obedit->data, OB_RECALC_DATA);
@@ -4737,7 +5470,7 @@ static int delete_invoke(bContext *C, wmOperator *op, wmEvent *event)
void CURVE_OT_delete(wmOperatorType *ot)
{
static EnumPropertyItem type_items[] = {
- {0, "SELECTED", 0, "Selected", ""},
+ {0, "SELECTED", 0, "Select", ""},
{1, "SEGMENT", 0, "Segment", ""},
{2, "ALL", 0, "All", ""},
{0, NULL, 0, NULL, NULL}};
@@ -4815,6 +5548,7 @@ void CURVE_OT_shade_flat(wmOperatorType *ot)
int join_curve_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
Object *ob= CTX_data_active_object(C);
Curve *cu;
@@ -4843,6 +5577,7 @@ int join_curve_exec(bContext *C, wmOperator *op)
nu= cu->nurb.first;
while(nu) {
newnu= duplicateNurb(nu);
+ CLAMP(newnu->mat_nr, 0, ob->totcol-1); /* TODO, merge material lists */
BLI_addtail(&tempbase, newnu);
if( (bezt= newnu->bezt) ) {
@@ -4865,7 +5600,7 @@ int join_curve_exec(bContext *C, wmOperator *op)
}
}
- ED_base_object_free_and_unlink(scene, base);
+ ED_base_object_free_and_unlink(bmain, scene, base);
}
}
}
@@ -4874,7 +5609,7 @@ int join_curve_exec(bContext *C, wmOperator *op)
cu= ob->data;
addlisttolist(&cu->nurb, &tempbase);
- DAG_scene_sort(scene); // because we removed object(s), call before editmode!
+ DAG_scene_sort(bmain, scene); // because we removed object(s), call before editmode!
ED_object_enter_editmode(C, EM_WAITCURSOR);
ED_object_exit_editmode(C, EM_FREEDATA|EM_WAITCURSOR|EM_DO_UNDO);
@@ -5134,6 +5869,7 @@ Nurb *add_nurbs_primitive(bContext *C, float mat[4][4], int type, int newname)
break;
case CU_PRIM_TUBE: /* tube */
if( cutype==CU_NURBS ) {
+ Curve *cu= (Curve*)obedit->data;
if(newname) {
rename_id((ID *)obedit, "SurfTube");
@@ -5148,7 +5884,7 @@ Nurb *add_nurbs_primitive(bContext *C, float mat[4][4], int type, int newname)
vec[2]= -grid;
translateflagNurb(editnurb, 1, vec);
- extrudeflagNurb(editnurb, 1);
+ extrudeflagNurb(cu->editnurb, 1);
vec[0]= -2*vec[0];
vec[1]= -2*vec[1];
vec[2]= -2*vec[2];
@@ -5638,17 +6374,23 @@ static void *undo_check_lastsel(void *lastsel, Nurb *nu, Nurb *newnu)
return NULL;
}
-static void undoCurve_to_editCurve(void *ucu, void *cue)
+static void undoCurve_to_editCurve(void *ucu, void *cue, void *obdata)
{
Curve *cu= cue;
UndoCurve *undoCurve= ucu;
ListBase *undobase= &undoCurve->nubase;
- ListBase *editbase= cu->editnurb;
+ ListBase *editbase= ED_curve_editnurbs(cu);
Nurb *nu, *newnu;
+ EditNurb *editnurb= cu->editnurb;
void *lastsel= NULL;
freeNurblist(editbase);
+ if (undoCurve->undoIndex) {
+ BLI_ghash_free(editnurb->keyindex, NULL, (GHashValFreeFP)free_nodeKeyIndex);
+ editnurb->keyindex= dupli_keyIndexHash(undoCurve->undoIndex);
+ }
+
/* copy */
for(nu= undobase->first; nu; nu= nu->next) {
newnu= duplicateNurb(nu);
@@ -5657,6 +6399,10 @@ static void undoCurve_to_editCurve(void *ucu, void *cue)
lastsel= undo_check_lastsel(undoCurve->lastsel, nu, newnu);
}
+ if (editnurb->keyindex) {
+ keyIndex_updateNurb(editnurb, nu, newnu);
+ }
+
BLI_addtail(editbase, newnu);
}
@@ -5666,13 +6412,19 @@ static void undoCurve_to_editCurve(void *ucu, void *cue)
static void *editCurve_to_undoCurve(void *lbe, void *cue)
{
Curve *cu= cue;
- ListBase *nubase= cu->editnurb;
+ ListBase *nubase= ED_curve_editnurbs(cu);
UndoCurve *undoCurve;
+ EditNurb *editnurb= cu->editnurb, tmpEditnurb;
Nurb *nu, *newnu;
void *lastsel= NULL;
undoCurve= MEM_callocN(sizeof(UndoCurve), "undoCurve");
+ if (editnurb->keyindex) {
+ undoCurve->undoIndex= dupli_keyIndexHash(editnurb->keyindex);
+ tmpEditnurb.keyindex= undoCurve->undoIndex;
+ }
+
/* copy */
for(nu= nubase->first; nu; nu= nu->next) {
newnu= duplicateNurb(nu);
@@ -5681,6 +6433,10 @@ static void *editCurve_to_undoCurve(void *lbe, void *cue)
lastsel= undo_check_lastsel(cu->lastsel, nu, newnu);
}
+ if (undoCurve->undoIndex) {
+ keyIndex_updateNurb(&tmpEditnurb, nu, newnu);
+ }
+
BLI_addtail(&undoCurve->nubase, newnu);
}
@@ -5695,6 +6451,10 @@ static void free_undoCurve(void *ucv)
freeNurblist(&undoCurve->nubase);
+ if (undoCurve->undoIndex) {
+ BLI_ghash_free(undoCurve->undoIndex, NULL, (GHashValFreeFP)free_nodeKeyIndex);
+ }
+
MEM_freeN(undoCurve);
}
@@ -5709,3 +6469,24 @@ void undo_push_curve(bContext *C, char *name)
{
undo_editmode_push(C, name, get_data, free_undoCurve, undoCurve_to_editCurve, editCurve_to_undoCurve, NULL);
}
+
+/* Get list of nurbs from editnurbs structure */
+ListBase *ED_curve_editnurbs(Curve *cu)
+{
+ if (cu->editnurb) {
+ return &cu->editnurb->nurbs;
+ }
+
+ return NULL;
+}
+void ED_curve_beztcpy(EditNurb *editnurb, BezTriple *dst, BezTriple *src, int count)
+{
+ memcpy(dst, src, count*sizeof(BezTriple));
+ keyIndex_updateBezt(editnurb, src, dst, count, 0);
+}
+
+void ED_curve_bpcpy(EditNurb *editnurb, BPoint *dst, BPoint *src, int count)
+{
+ memcpy(dst, src, count*sizeof(BPoint));
+ keyIndex_updateBP(editnurb, src, dst, count, 0);
+}
diff --git a/source/blender/editors/curve/editfont.c b/source/blender/editors/curve/editfont.c
index ded908a52b9..d6ec6376b14 100644
--- a/source/blender/editors/curve/editfont.c
+++ b/source/blender/editors/curve/editfont.c
@@ -51,12 +51,9 @@
#include "BKE_curve.h"
#include "BKE_depsgraph.h"
#include "BKE_font.h"
-#include "BKE_global.h"
#include "BKE_library.h"
-#include "BKE_main.h"
#include "BKE_object.h"
#include "BKE_report.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
#include "RNA_define.h"
@@ -1229,7 +1226,7 @@ static int insert_text_exec(bContext *C, wmOperator *op)
Object *obedit= CTX_data_edit_object(C);
char *inserted_utf8;
wchar_t *inserted_text, first;
- int len;
+ int a, len;
if(!RNA_property_is_set(op->ptr, "text"))
return OPERATOR_CANCELLED;
@@ -1241,13 +1238,12 @@ static int insert_text_exec(bContext *C, wmOperator *op)
utf8towchar(inserted_text, inserted_utf8);
first= inserted_text[0];
+ for(a=0; a<len; a++)
+ insert_into_textbuf(obedit, inserted_text[a]);
+
MEM_freeN(inserted_text);
MEM_freeN(inserted_utf8);
- if(!first)
- return OPERATOR_CANCELLED;
-
- insert_into_textbuf(obedit, first);
kill_selection(obedit, 1);
text_update_edited(C, scene, obedit, 1, 0);
diff --git a/source/blender/editors/datafiles/Makefile b/source/blender/editors/datafiles/Makefile
index d7bb4e7222f..c76014df60e 100644
--- a/source/blender/editors/datafiles/Makefile
+++ b/source/blender/editors/datafiles/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/datafiles/SConscript b/source/blender/editors/datafiles/SConscript
index 3749615c024..ab404b9c7ea 100644
--- a/source/blender/editors/datafiles/SConscript
+++ b/source/blender/editors/datafiles/SConscript
@@ -6,4 +6,4 @@ sources = env.Glob('*.c')
incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf'
incs += ' ../../bmesh #/intern/guardedalloc'
-env.BlenderLib ( 'bf_editor_datafiles', sources, Split(incs), [], libtype=['core'], priority=[135] )
+env.BlenderLib ( 'bf_editor_datafiles', sources, Split(incs), [], libtype=['core'], priority=[235] )
diff --git a/source/blender/editors/datafiles/add.png.c b/source/blender/editors/datafiles/add.png.c
new file mode 100644
index 00000000000..14492cfac24
--- /dev/null
+++ b/source/blender/editors/datafiles/add.png.c
@@ -0,0 +1,349 @@
+/* DataToC output of file <add_png> */
+
+int datatoc_add_png_size= 10948;
+char datatoc_add_png[]= {
+137, 80, 78, 71,
+ 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 96, 0, 0, 0, 96, 8, 2, 0, 0, 1, 26,253,208,249, 0, 0, 0,
+ 4,103, 65, 77, 65, 0, 0,177,143, 11,252, 97, 5, 0, 0, 0, 6, 98, 75, 71, 68, 0, 0, 0, 0, 0, 0,249, 67,187,127, 0,
+ 0, 0, 9,112, 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 0, 7,116, 73, 77, 69, 7,218, 7, 21,
+ 0, 4, 16,211, 77, 59, 52, 0, 0, 32, 0, 73, 68, 65, 84,120,218,237,125,105,176,101,215, 85,222,183,214,222,231, 78,111,236,
+ 89,173,150,212,106, 13,142,109,217, 42, 75, 88,146, 13,100,168, 96, 82,137,193, 21,160, 10,170, 66,146, 34, 4, 39,228, 15, 14,
+ 96, 18, 6, 67,126, 4, 3, 1, 50, 48, 21, 73, 5, 59, 33, 9, 25, 42, 16, 42, 78, 17, 98, 82, 41, 59,196, 56, 56, 8, 99,199,
+150,236,182, 36,203,150,228,158,251,117,191,233, 14,231,156,189,215,151, 31,123,239,115,238,123,221,158,130,147, 74,170,124, 95,
+119,191,247,238,187,239,220,125,214, 94,123, 13,223,250,214,106,224,139,125,220,113,250,244,185,115,247,221,250,188, 0,248,254,
+ 31,248,161, 24,131, 0,170, 42,170,222,251,202,123, 95, 85,111,251,161, 31, 76, 47,210,183,252,245,239,158,205,166,117,189,104,
+154,166,110,154,166,169,253,112, 99,178,113,230,232,169,151,191,231, 35,225,244,233,211, 0,220, 35,143, 62, 98, 49, 90, 52,130,
+ 52,251,227,127,246,167, 78,223,255,213,247,156,123,228,196,157, 47, 23,234, 29, 71,226,251,222,247,219,126,107,123,254,212,115,
+179,189,121, 20,209,111,253,182,183,135, 48, 24, 58,152, 1,176, 64,157, 77,119,223,246,182, 31,118, 55,195, 61,117, 27, 73,130,
+220,188,231,205, 23,175,187,205, 85, 12, 42,134, 40,159,250,216,111,221,188,250, 73,146,222, 44,170, 40, 32, 4, 84,170,233, 12,
+239,255,176,221,123,234, 74,181,248,175,151, 62,253, 1,231, 28, 72, 15,154,145, 34, 2, 8,136,214,236,211,159,248,245,255,252,
+107,255,250,206,227,227, 71, 94,190, 62, 24, 16,132,103, 52, 81, 16, 2, 72, 61,223, 57,255,225, 95,220,186,248,187,226,252,197,
+171,243, 75, 91,245, 3,119,175,190,234,254, 53, 57,113,223,215, 8, 28, 20, 66,161, 42, 40,170, 16, 56,113, 78, 68, 69, 20,234,
+ 61,141,148,136, 40,170, 2, 3, 4,164, 2, 6, 2, 0, 69, 28,236, 11,218, 46,215,125, 53, 30, 79,238,190,251,110, 85,153,207,
+231,135,247,238,209, 71, 31,253,154, 55,124, 45, 73, 21, 17, 85,231, 92,218,184,119,191,251,221,239,255,157,247,229, 23,189,229,
+ 45,127,157,160, 64, 84, 85, 84,198,227,245,213,141,147,147,149,245, 83,119,189,252,158,251, 95,253, 85,175, 26, 2,112,143, 60,
+242,168, 69, 51, 26,201,251, 94,245,117,175,120,236,219,239,186,239,177, 59,239,121,120,178,113,186,165,190,236,174,193,123,223,
+251, 30,127,254, 83,187,207,125,102, 33, 34,163,225,228,117,127,230, 13, 52,177, 8,243,160,241,230,229, 79, 54, 77,243,246, 31,
+251,113, 87,251,115, 0,204,120,226,174,175,190, 25,159,104, 27, 28, 89,103,164, 52,139,217,147,239,253, 5,198, 96,164, 55,152,
+154, 1, 58, 24, 29,179,136, 79, 93,224,222,180,190,115,245,169,203,159,252, 15,161,153, 58,239, 8,120,154, 17, 2,177, 24, 23,
+102,156, 45,174,255,199,255,242, 99,237,236,194,227,175, 62,114,108,115, 64, 18,132, 91, 57,122, 31, 64, 2, 2,189,243,236,215,
+190,255, 63,254,197,122,113, 35, 26, 63,115,185,249,204,213,250,212,209, 65, 85,137,156, 56,247, 6, 81,133, 40, 0, 17, 8, 20,
+ 42, 16, 39,112,162,206,169,131,122,111, 48, 37, 37,237,148, 10,104, 2, 17, 85, 32, 10, 64,136,210,240,165,122,200,242, 55,223,
+253, 61,223,187, 50, 89, 73,155,148, 62, 68, 69, 69,213,169,136, 56,117, 63,247,115, 63,115,229,202,149,219, 95,232,251,254,198,
+223,140, 22, 65,192,152, 46, 43,128,168, 8, 84, 84, 0, 81, 39,170, 78, 68,156,115,170,234,212, 57,239,238,184,251,143,124,199,
+ 95,252,166,229, 11,249,217,108, 6, 48,105, 42, 0, 89,122, 64,112,230,220,227,103,206, 61,177,190,121,167, 27, 14,213,169, 8,
+ 84, 33,130,129,226, 61,255, 51,126,224, 55,255,222, 63,253,167,239,120,246,153,103, 0,248,182,105, 0, 24, 89, 55,220,155, 5,
+163,172,140,221,230,170, 63,125,246,177, 87, 62,246, 23, 40,131, 74, 12, 34, 98,112, 10,167, 0, 1,195, 60, 64, 25,230,179,253,
+111,253,214, 63,239,156,251, 91, 63,242,195,114,239,195,223, 20,141, 49,166,155, 18, 0, 80,217, 60,254,138, 71,190,242,173, 43,
+235,155, 15,158,193,233,227, 24, 13, 81, 85,112,142,170, 20, 65,160, 50, 54, 79,125,224,151,119,174,127, 90, 85, 85,213, 85,222,
+215,139, 0, 33, 68, 8, 81, 18,170,136, 92,221,120,144,178,177,179,135,143, 60,139,103, 94,224,177, 13,156, 62,137,163, 27, 24,
+ 86, 97,177,127,241,250,165,167,174, 94,248, 72, 61,219, 18, 73,215,209,104,230,137, 8, 18,166, 20, 82, 20, 22, 0,241, 85,213,
+ 26, 68,208, 68,216,220,118,119,247, 62,250,244,139, 97,250, 84,213,124,248,232,202,238,104,232, 42,175,233,240,165, 19,168,102,
+158, 22, 64,133, 70, 82,200, 0, 81,192,102,123,151, 53,134,232, 42, 52,219,207, 62,253,207,175, 93,252,189,182,153,138,138, 64,
+ 68,100, 60,242,247,220, 49, 58,123,122, 60,172,156, 79, 87, 84,147, 19,247,127,109,210,105,166, 79,162, 36,171,193,218,107,254,
+232,223,190,252,194,123, 46,126,234,221,100,164,136, 66, 8, 21, 85, 16, 34, 34,234,146, 64, 69,116,117,226,143,110, 14,229,216,
+185, 63,153,222, 39, 61, 11, 2,233,197, 40, 90, 85,126, 6, 81,161, 64, 53,153, 85, 17, 21, 1,161,170, 42,162,158,180,164,201,
+ 16, 5, 13, 2,154,168, 16, 0, 1, 80,168,162, 4, 52, 25, 70, 5, 35,160, 2, 37, 12, 20, 17,210, 64, 37,254,159,123,200,109,
+159, 61,114,228,200,230,230, 17, 0,117,189,216,222,222,158,205,102, 95,196,133, 30,120,240,193,111,254,230,111, 41,146, 45,194,
+ 23, 85,167,170,234,156,219,222,222,249,233,159,250, 59,159,235, 66, 63,240,131, 63,100,209,152,236, 97, 62,253,154, 54,166,168,
+174,186,116, 49,117,190,242,223,255, 55,255,198,109, 46,244,189,111,253, 62, 48,125,164, 93,146,180,177,146,118, 82,156,168, 56,
+167, 34,234, 92, 54, 36,199, 78,221,251,220,179,231,255,254, 79,253,232, 1, 51, 18, 66, 32,211,230,177, 51, 35,148,178, 34,225,
+120,180, 49, 24,173, 15,135,227,106, 48, 28, 12, 87, 54,143,223,117,242,238,135, 30,126,253,183,188,238,143,253,233,111,249,250,
+175, 58,112, 33,176,215,130,180, 24, 17, 19, 72, 53, 24,223,113,246, 43,238, 58,247,186,245,163,167,225,156, 83,168, 2,130,129,
+ 99, 19,208,182,250, 19, 63,249,211, 63,248,253,249, 54,213, 98,180,238, 65,163,145, 70,154, 13,199, 71,239,123,213,215, 63,240,
+170,111, 24,174,159,137,116, 21,224, 4, 78,160,102,102, 98, 68,136,140,193,126,226, 39,126, 50, 95, 40,198, 24, 45,206, 23,237,
+229,235,243, 11, 87, 22, 91,219,139, 69, 29,134,147, 19,167,206, 62,118,242,206,199, 91,243, 98, 16,210, 8,164, 63,208, 38,128,
+193, 98, 91, 55,245,172,105,155,239,122,203, 91, 0,248,237,253,230,217, 23, 23, 91,219,109,150, 16,164, 26, 84,175,124,232,145,
+245,179,175,174,131, 31, 42, 65, 33, 97,132, 18,102, 70,192,168,211,157,171,251,123, 91,102,134, 16,142, 31, 59, 46, 16, 55,211,
+251,246,102,193,146,152,104, 36, 71,147,211,227,205,135,109,240,138,107,187, 67,175, 50, 25,193,105,138, 67,140,144, 96, 26, 67,
+123,225,249, 15, 92,191,116, 62, 52, 57,158,248,218, 63,245,167,124,221,196,100, 65,178, 18, 9,170,225,134,175,142,182, 54,218,
+222,197,179, 1,251, 51,220,119, 23, 38, 35,163, 83, 21, 32, 46, 46,191,248,228,245,139, 31,155, 79,111, 0, 36, 9,145,166,105,
+ 60,152,124,168, 20,101,132,243, 99, 87,141, 20, 46, 68,236,207,112,225, 42, 99,196,217, 51,178,178,130,122,255,194,214,165,167,
+182, 46, 63, 61,223,187,102,108, 85, 20, 10,132, 0,194, 27,163, 64, 4, 4, 5, 74,163, 40, 28,225, 73, 1, 97,134,233, 28, 47,
+ 94, 65, 27,246, 55,171, 23,226,252,252,214,165,167,235,197, 54, 72, 85,161, 48,235, 49,130,151,164,208, 16, 8, 65,228, 59, 36,
+ 90,131, 10, 2,233,197,246,119,111, 62,249,252, 83,110,250, 91,199, 87,110,140, 71,206, 59, 85,167, 52,117, 74, 51, 75,247,225,
+ 9,210, 40, 42, 66,128, 74, 53, 90, 3,182,149,176, 37,196,108, 49,191,254,226,179,239,186,240,252,187, 69,244,196,145,193,253,
+119, 77, 54, 86,171, 65, 69,117, 4,161, 76,199,158,158,102,162, 10, 50,203,137,108,154,253,182,157,134, 24, 1,105, 23,215, 63,
+249,244, 59,175, 94,248, 61,136, 8,237,218,141,102,119, 22,239, 60, 62, 60,115, 98,180,182,234, 7, 30,128, 66, 4, 48,183,114,
+244,126, 66,178,149, 78,113,163, 27, 78, 86,206,172,172,157,141, 97,122,254,195, 63,183,117,241,131, 0,132, 76,193,109,136,182,
+179, 27,175,108,135,237,189,208, 4,142, 6,234,157, 64,196,173, 28,185, 63,199,171,229, 82, 49,214,195,241, 49, 17,119,225,249,
+119, 93,187,240, 1, 64, 36,187,152,162,179, 96, 12,220,155,199,171, 55,154, 79, 95,170, 47, 92,107,182,247,131,156,184,239, 13,
+ 57,134,129,230,112, 38,219,169,180, 1, 34,162,201, 14,228,119,234,188, 8, 20,146,194, 45,167, 42, 30, 36,146, 34,137, 37,255,
+195,226,125,196, 8, 65,242, 17, 36,144,162, 58,146, 20, 8,169, 76,254, 8, 74, 3,148,176,180,237,204,102,137, 66,136, 17, 52,
+ 19,144, 20,208,104, 0, 73, 3,105, 32,196, 0,136,129,217, 92, 80, 8, 37, 1,210,104, 4, 65, 51, 3, 97, 16, 2, 16, 90,122,
+131,178,140,178,120, 67, 54, 5,146,226,206,178,134, 47, 63,190,120, 63,219, 61,238,187,239,254, 87,190,242,149,231,238,191,255,
+232,145, 35,253,179,204,167, 64, 82,240,156, 63,233,246,246,246, 51,207,124,226,163, 31,253,200, 39, 63,249,201, 47,205,130, 86,
+ 87, 87,191,249,155,191,229,244,233, 59,205,146, 42,160, 56, 59,233, 34, 37,148,232, 74, 14, 69,210, 82,220, 88,114,206,162, 16,
+248,170,250,181,127,251,111,127,255,247,159,252,194,149, 67,222,244,166, 55,189,242,149, 15,153,145,232, 60,255,129,223,150, 18,
+196,247,139,232,226,250,195, 75, 74, 9, 71,191,172,178, 80, 85,167, 43,235, 39,254,193,223,253, 59,159,122,254,153,207,179,160,
+239,254,158,183, 34, 45,228,150,165,148,247,197,210,199,129,213,164,229, 12,134, 19, 85,117,126,172,206, 57,231,157,115,170,206,
+ 57,175,170,174, 26,170,115, 43,235, 39,156,115, 39, 78, 63, 56, 24,142, 4, 6,132, 55,253,137,151,205,166,123,183, 93,144,143,
+161, 45,139,232,147,154,165,213, 8, 15, 44,168,223, 60,167,213,198,209,179,206, 87, 71, 78, 62,224,253, 96, 60,217,116,110, 32,
+ 94, 83, 4,146,164,227,156, 83, 21,231,135,170, 58,158,172,169, 83, 21,138,226,151,126,229,183, 62,243,204,127,255,165,119,252,
+227,231,158, 61, 44, 48, 31, 98,196,109, 55, 56, 25,199,108, 20,187, 64, 91, 4,244,131,201,218,230, 25, 95,141, 79,221,253,136,
+211,106,178,121,198, 59, 55, 24,173,164,183, 87,133, 38,169, 74,231, 0,146,143, 17, 51, 4,144,145,209,208,198,248,237,223,254,
+151, 85,229, 31,253,195, 95,124,225,133, 23,150, 37, 20,150, 78, 79, 94, 90, 8,121, 65, 16,120,167, 16,120,149,116,175,222, 15,
+ 39,171,167, 78,223,251,122,239,135,155,199, 95,238,188, 2, 74, 5, 4, 70, 56, 64,144,194, 60, 40, 64,129, 2,102, 76,246, 26,
+150, 64, 16,198,104,161, 13, 34, 20,240,205,127,229,175, 14,170,193,247,151, 64,205,183, 33, 2,136, 70, 35, 44,178,137, 96,228,
+116, 30, 9,152, 1, 34,163,129,170,202,100,164,222,235,198,209, 59,215,142,223,187,178,126,199,230,137,215,136, 32,194,153,137,
+ 23, 83,235, 82, 15, 73,150, 88, 0, 19,106, 74,237, 69, 65, 52,145, 16,145,216, 2, 49, 54,139,208, 46, 58,221, 55,179,183,191,
+253,199,127,229, 87,254,197,249,243, 31,247,219,187, 45,193,235,219, 97,119, 63, 44, 90,219,159,197,164,174,201, 7, 82,147, 83,
+ 98, 85,141,212,185,151,189,226,212, 67,167, 94, 15,142,230, 11,167, 34,195, 17,132,160,106,114, 95,138,130,252, 48,237,151, 88,
+142, 67,210,135, 0,220,223,185,210,212,123,251,123, 91, 49,198,124, 36,105,102, 74,229,159,251,115,223,250,219,191,253, 94,255,
+129,167,183, 51,144, 84,206, 15, 13,132, 37,127,156, 86, 3, 96, 56, 57, 85,141,214,107,220,121,225,250,113, 85,255,194,150, 12,
+ 42,220,127, 26,206,225,142, 99,240, 30,222,193, 57,164, 32,201, 72, 65,167, 67,140, 80,128,136, 45,192,139,159,250,240,246,214,
+167,218,122, 63,198,168,170, 49, 71,242, 76,136,211, 31,253, 99,127, 60,185,233,172, 1, 2,100,208, 68,138, 78, 37,125,166, 12,
+134,155,147,213, 83,163,209, 49, 87,173,136, 72,221,178,105,229,233,231,161,138,203,215,225, 60,238, 61,141,149, 49,134, 21,171,
+ 10, 34,160,118, 7,146, 8, 83, 51,123,233,217,247,212,245,206,206,245, 23,234,197, 78,202, 83, 73,150,228,162,124,147, 0,191,
+ 44,161, 18,173, 80,141,121,203,160, 70, 10, 4,166,110,236,171, 53,232, 80, 68, 73, 41,201, 10, 72, 92,189, 97, 34,114,115, 7,
+170, 56,115, 10,199,143,200,112,128,149, 9, 24,102,123,219,207, 89,187,120,233,185,247,153,181,139,253,235,198, 40, 20, 81, 80,
+114,198,164,162,233,254, 37,137,136,244, 37,234,200, 65,184,136,128, 2,152,164, 80, 68, 4,176,228,187, 72,141,166,173,165,165,
+ 3,130,198,160,128, 87, 5, 56,171, 65,193, 71,207, 95,139,205, 46,218,231,221,226,127, 56,109, 55, 7,215,147, 65,202,217, 99,
+178, 6, 68, 74,248, 21,106, 26,147,173, 19, 32,237,157, 55, 82,200,236, 26, 8,100,156, 82, 82, 92, 45, 72,103,147, 22, 27,179,
+133, 67,235, 64, 64, 98,222,103,144,108,219, 25, 16,175, 92,248,157,122,190,117,243,234, 71,247,183, 63,157,246,222,123, 61,190,
+ 81, 85, 78,206,158, 25,123, 39, 43, 35,239, 52,157, 18, 21,137, 16, 5, 98, 62, 53, 42, 18, 41, 34, 84,241,194, 20,149,167, 79,
+ 34,198, 2, 58,228,141, 33, 1, 97,211,238,235,124,187,105,166, 22, 3, 68, 40, 94, 45,198, 48, 51,107, 94,122,246,215, 99, 59,
+189,113,237,163,109,189, 71,198, 28,124, 65,219, 54, 94,217, 50,136,220,216,107, 85,228,142, 99,195,170,146,227,155,131,241,200,
+ 57,213,202,211, 68, 5, 17, 16,137,146,129, 22, 83, 79, 68, 50,137,199,178, 68,105,232, 16, 36,177,116, 84,218,197,142, 16,205,
+ 98,187,105,230,206,185,170,242,117,179,247,233,243,255,198, 98,125,227,202, 7, 99,168, 99,108,242, 70,139, 26, 33, 18, 9, 53,
+163, 8,166,115, 3,100,209,152, 40, 46, 94,107,188,151,201,200,175, 77,220,104,224,142,109, 86, 78,101, 56,112,217,176, 43,124,
+138, 95,211, 46,229, 80, 62, 5,159,154,221, 91,138, 57,235,197,141,208, 76, 23,211,171,177,221, 90, 76,247,103,123,159,105,155,
+189,107, 23, 62, 96,108, 67,189, 7, 49, 64,133,100, 50,142, 0, 68, 73, 19,128, 84,139, 70, 21,107, 32, 64,219,182, 34,178,183,
+ 31,174,123,245, 78, 94,188,234,156,200,120,232, 84,117,117,236,212,105,194,185, 41, 16, 49, 17, 49,152, 80,132,233, 19,132,198,
+180,139,177,217,143, 50,187,121,253,169, 24,235, 24,102,211,189, 75,180,166,153, 95,167, 20, 91, 69, 82, 41, 57, 78, 86,154,101,
+136, 22,150, 98,119,192, 8, 68, 83,161,197,168,104, 12, 16, 76,163, 2, 85,229, 68,100, 52,116, 78, 85, 78,156,251, 26, 72,246,
+ 91,233, 48, 9, 20,146, 48, 85, 73,199, 95,179,237, 77,175, 73, 18, 45,128, 41,132, 40,160,151, 16, 84, 42, 21,233,137, 37,212,
+ 48,199, 14,154, 3,154,156,123,101,159, 39, 76,249,139, 0,226,139, 62, 51,191,187, 8,203, 57,207,239, 70, 80, 4,232,173,143,
+ 73,246,222, 72, 91,157,206, 5,169, 37,107, 49, 88, 74, 34, 4,106, 57,235, 80, 1,204, 44,103,165, 5,181,235,238,156,164, 0,
+ 84,120, 36, 88, 78, 37,225, 10, 98, 38,157, 23, 1, 45,131,136,217,152,102,153,164,200, 41,235, 61,192, 4,229, 41, 59, 47,150,
+180, 79,146,102,102, 11,151, 19,187,188,199, 2, 24, 69, 4, 41,223, 53,129, 82, 83,154,150, 12,145, 17,100, 78,160,146,203, 32,
+251,147, 15, 34,133, 3,164,229, 56,151, 57,218, 39, 65,163, 0, 52,144,201,138,166, 31, 10, 97, 52, 8, 96,197,240, 3,128,209,
+ 74,120,154,227, 29,230, 61,226,109, 34,196, 47, 63,190,252,248, 82,103,174,125,236, 93,249,201,120, 50, 24, 12, 70,163,113, 85,
+ 85,200,161,119,187, 88,212,117,189,152, 78,167, 49, 85, 61,254,143, 46,168,170,170,215,188,230,145,151,191,226, 21,103,239, 57,
+235,124,169, 56, 82,160,249,156, 73, 42, 91,136,168, 42,201,231,159,127,254,227, 31,123,250,131, 31,252, 96,211, 52, 95,226, 5,
+125,221,215,191,233,161,135, 30,170,124,197, 14, 55, 94, 42,250, 28,202, 28,187, 12, 31,128,115, 78, 84,154,166,249,208, 31,252,
+193,187,222,245,239,255, 80, 11,242,222, 63,244,208, 67,111,124,227,215,177,139, 93, 75,209, 2, 75, 41,253,114,134,127, 48,179,
+ 63,152,218,139,168,234,238,238,238,207,253,236,207, 76,167,211, 47,110, 65, 71,143, 30,125,227, 27,223,120,231,157,119, 37,204,
+104, 41,154, 94,122,209,114, 98,191,244,239,103, 93, 83,138, 78, 1,231,221,213, 43, 87,254,217, 47,255,242,141, 27, 55,190,160,
+ 5,125,215,119,125,215,120,188, 82,204,231,225, 12,191,207,228,251, 36,122, 89, 74, 5,237,211,146,172,246, 0,195,242,102,202,
+104,188,246,210,133, 75, 63,243,119,127,236,243, 46, 72, 7,195, 81, 8,193,204,130,133, 37,100, 63,255, 49, 51, 35,105, 70, 99,
+164,145,100,122, 38,166,111,141, 22,105,102, 49, 50, 65,124, 49,129,124,229, 58, 76,215, 33,193,135, 30,126,244,157,255,226,215,
+215,214, 54, 62,207,113,142, 49,230, 13,226,109,138,196,203, 91, 3,129, 45,107,181,193, 32,206, 87,174, 26,169, 58, 95,141, 84,
+213,251, 1, 84, 42,239, 5,206, 13, 42, 85, 55, 28,175, 15, 71,171,163,201,198,177, 83,103,157,226, 93,239,125,238, 95,253,242,
+207,190,227, 23,222,254, 89,233, 3,143, 63,241, 4,139, 63, 5,187,130, 4, 75, 56,125,232, 28,242,208,151,170, 78,157, 23,113,
+234,135,162,206,249,129,170, 83, 55, 80,231,156, 31, 57, 87, 13, 70,107,195,241,218,112,188, 62,222, 56, 45,213,104, 88,141, 30,
+126,244,137,141,113,252,192,239,190,255,246, 18,162, 25, 59,160,238,224, 59, 38,188, 33,199, 17, 7, 87, 69,216,234,250,233,225,
+202,198,120,229,232,218,198,105,239,134,163,149, 77, 17,129,115, 34,112, 78, 1,120,231, 68, 68,125,165,190,170,188,247,162, 66,
+154, 32,154,222,125,247,217, 31,251,241,159,232,104, 44, 7,183,204, 12,183, 71,170,208,233,109, 31,195, 44,217, 34, 63, 92, 25,
+142, 54, 39,107, 39,215,143,220,235,252, 96,188,118, 76, 21, 16, 39,154,147,232, 92, 50, 75,166, 52, 33, 16, 34, 77,164, 69, 49,
+ 82,196,253,232,143,190,253, 71,126,228,135, 15, 43, 53,115, 97,234,115, 62, 82,157,175,188,106,117,243,174,205,227,247,111,158,
+120,112,243,196,203, 86,214,239,210,106, 85,252, 4, 76, 81, 39, 4, 80, 32, 7,164,217,180, 51,193,220,209, 64,131, 89, 73,223,
+ 85,127,224, 7,127,232,150, 5,125,182,245,116,133,194,172, 98,236, 10,135, 27,199,206, 30,187,227, 21,199, 78, 62,116,252,142,
+ 87,175, 31,185,183, 26,109, 86,195, 21,131, 26, 84, 65, 39, 80,129, 10, 28,224, 4, 10,168,229,122,140,177,160, 17,150, 47,186,
+182,186,246, 29,111,254, 43, 7, 22,100, 75,143, 24, 99,176, 88, 55,113, 81,199, 69, 29,230,139,176,168, 99,211, 90,104, 99, 58,
+236, 85, 53,169,134,171,131,209,230,112,180,233,170, 1, 68, 82,222,107,214, 85, 57,229, 22,189,135, 9,152,194,225,180, 22,163,
+ 89,136,161,181,104,209,226,185,123,207,189,246,181,143, 45, 41,117,175, 61,108, 3, 9, 76,103,201, 34,129, 20,239, 48, 28, 58,
+175,178, 58, 1,225,215,142,157,115,110,120,252,244,171,135,163, 99,162,174, 53,117, 66, 7, 10,160,204,137, 89, 78, 77,150, 52,
+ 49,249,226, 54, 37, 14, 22, 17, 99,104,219, 16,154,196, 56, 50,197, 55,126,211, 55,125,236, 99, 79,167,170,179,134,104, 33,218,
+188,137,243,133, 77, 23,113, 54,143,243, 38, 46, 22,182,168,109, 81,219,188,177,249,194,102,139, 56,157,219,108,193,104,131,136,
+ 65,104,157,153, 68, 75, 80, 80, 65,147,123, 80,185,132,218, 25,140, 65, 9,208,211, 86,197, 16, 67, 46,167, 38, 43,107, 22, 66,
+248,158,239,125,107,150,208,254, 60,132,192, 23, 46,215,102,216,222,109,131, 45, 25,196, 46,155, 18,169,170,209,112, 40,235,247,
+190,102, 60, 88,105,184,234,163,175, 64, 87, 28, 72,183, 77,180,164,217, 64, 70, 77,178,127, 38,197, 32,140, 97,122,243, 66, 8,
+243, 24, 3,141, 80, 51, 40,205,156,234,112, 56,124,236,177,199,159,124,242,247,180,109,173, 13, 22, 35, 99,140,145,185,188, 67,
+ 35, 99, 49,254,201, 49, 16, 70,196,232, 98,240, 77,171, 33, 32,152,152,193, 44,171,170, 49,229, 29,146, 21,214, 16, 13,102, 98,
+ 6, 26,104,128, 49, 70,134,216,132,208, 46,185, 40,163,101,162,213, 55,124,227, 55,138,136, 91,248,251,175,220,104,166,243, 56,
+175, 45,153, 36,233,242,167,146, 87,169, 27,172,110,220, 83,141,142,143,143,125,229,188, 93,223,218, 31, 93,220,146,182,149,166,
+ 69,140, 24, 84, 41, 77, 77,208,113,170,133, 25, 75,213, 51, 66, 34,148, 70,139,161,153,109,127,234,227,239,217,222,122,169,158,
+222,204, 64, 66,249, 75,128,198,245,141,117, 95,183,177, 0,246,121,135,204,172, 56,243,156,183, 2,132,122,168,143,166, 49,184,
+166, 17,117,210,182,104, 67, 18, 3, 0,152,101,208, 51, 49,124, 36,149,254,200, 92, 94, 51,130,140,209,154,122, 78, 11,145, 38,
+ 36, 12, 16,131, 10, 75,186,248,216, 99,143,251,162,114,249,192, 22,220, 74,129,156,221, 2, 16,245,163,209, 49, 95,141, 85, 39,
+168, 70,173,137, 24, 46,223,192,214, 46, 86,134,216, 88,195,120,136,211,199,161, 14,195,129,169,193, 84, 53,221, 14, 4,214,210,
+218,197,108,235,218,165,167,219,118, 58,221,189, 2,144, 22, 9,168,104, 90, 47,149,206,204, 68, 99,140, 62, 21,244,216,131,122,
+ 9,143, 77,242,180, 92,111, 37,157, 31,168, 31,168, 58, 39, 26, 76, 33,104, 26,180, 45, 96,112, 14,102, 8, 17, 46,165,175, 10,
+102, 16, 69,146,232, 24,217,180,139,217,222,181,182,157,183,237, 66, 74, 93,192,204, 50,222, 96, 48, 85,129,137,137,207,105,111,
+138, 44, 88, 96, 4, 90, 23, 70,103,200, 88,134, 34, 35,129,130, 78,164,175,139, 52,129,187,251, 88,212, 32, 81,121,156, 62, 41,
+206, 97, 52,130, 87,169,231,215, 44, 54,211,221, 75,179,189,171, 77,189,189,189,245, 18, 45,118, 73, 62,151,172,167, 40,105, 6,
+ 17,138,248, 68, 70,147, 34,162,132,100, 88,190, 59, 74, 10, 5, 68,170,106,160, 90, 37,168,205,172, 3, 88,208, 6,180, 1,139,
+ 6,117,131,225,128,235,235, 90, 85, 24, 84,136, 64, 61,223, 13,237,254,246,245,231,183,175, 63,111,113,177,152,109,119, 64,166,
+230, 90,112,151,238, 51,107, 94, 66, 97, 19,170,144,236, 9, 65,201,203,201, 43, 75, 74,150, 23, 81,200, 3,198,254,130, 34, 48,
+162,141,100,195, 75, 87,247,188,114,215, 93, 84, 13,113,254,162,112, 54,221,189,218,212, 51,179, 96,198, 4, 18, 74,194, 9,173,
+184, 95, 65, 18, 79,170, 49,248, 4, 83,128,160, 24,165, 64,190, 48,228, 50,119,137,217,168, 6,137,233,204, 8,132,136, 9, 42,
+ 83,113, 68, 20,180, 45,208,196,235,215,174,198,216, 14,230,191,137, 56, 93, 31,222, 24,250, 6, 61, 28,156,240,164, 2, 53,241,
+150,192,143, 36,233, 83,169, 61, 31,251,140, 46,177,104, 36, 19,140, 9,163,106, 76,112, 93, 86,174,206, 51,208, 32,134, 16, 67,
+179, 71,107,247,247, 46, 34, 54,139,197, 84, 57,115,177,105,125,168,188,122,167,162, 41,106, 19,130,122,112, 29, 90,236, 16,204,
+ 50,253, 51, 45,158,146,228, 83, 32,106, 88, 78, 41, 72,192, 98,104, 69,156, 35, 61,208,230, 3, 9, 5,132,161, 14,117, 91,111,
+ 93,189,240, 59,161,157, 93,126,225,189,102, 49,173,247,232,134, 31, 84,122,226,232,224,216,122,229,189,142, 71, 9,159,147,140,
+136, 21,227,146,149, 89, 85, 0,152,249,124, 54,153,128, 55,233,160,188, 36, 48, 19, 75, 44, 60, 50, 50, 43, 56,197, 18,202, 72,
+130, 33,180, 22,103,109, 59, 11,205, 44,196,133,197,152,113,102, 97, 48,186,104,109,107, 77, 48, 18,222, 65, 68,124,166, 70,106,
+210, 88,201,136,161,116, 4, 45, 15, 2, 89,141, 37,235,119, 66, 62, 37,147, 45, 40, 52,139, 77,189,107, 22, 34, 91,137, 21,212,
+ 9,148, 97, 65,134,221,155, 31,191,118,225,119,219,102,247,198,213,167, 4, 52, 11, 29,203, 99,103, 47,136, 96,103, 26, 63,115,
+181, 30,143,220,137,205,170,242,122,234,216, 80, 5,131, 10, 48, 45, 66,234,107,171, 98,230,151,162,233,132,188, 41, 18, 66,151,
+115,231, 84,242, 50, 24, 97,153,225,196, 84, 14,161,129,209, 98, 29,195, 52,182, 51,139, 11,136, 74, 34,110, 83,141, 6, 85, 49,
+137,209, 90,145, 42, 88, 8, 20,201,212,238,104, 84,137,170, 46,169, 98,178,166,132, 66,196, 23, 38, 34, 19,104, 42,146,128,116,
+208,164,212, 25, 64,139,139,197,117, 31, 38,117, 61,171, 6,234,117,226, 33, 23, 47,254,247,157, 27,159, 88, 76, 47,237,221,124,
+ 46, 29,144,132,196, 38,142,135, 8, 64, 35, 52, 68, 68, 11, 77,171,211, 69,116,162, 87,182, 26, 85, 57,186, 81,121,213, 19, 71,
+ 6,131,129, 86, 94,188, 71, 10,127, 65,250,172, 66, 20, 17, 73,168,107,222,221, 68,191,177, 12, 9,211, 90, 90, 16, 48, 25,113,
+131,180,205, 94, 51,223,106, 22,219, 49,204, 82, 70, 65, 41, 54, 44, 49, 79, 52, 99, 5,132,136, 89, 99, 42, 46, 66,232, 84, 87,
+198, 46, 56, 70, 51,139,160,115, 76,104, 41,212, 72,143, 84, 72,144,242, 9,128,149,114, 34,146, 73, 16, 48,204,167,215,188,159,
+182,245, 13,176,222,186,254, 33,182,139, 27, 87, 62,188,191,243,124, 12,141,145,154,252, 78,166,228,228,178,168, 21,168, 56, 21,
+ 40,149,198,168,139,198, 20,188,178,213,136,224,230,110,171, 78, 71, 3,231,157, 12, 43, 55, 26, 58, 81,245, 89,201,243,121,202,
+ 50,145,124,240,146, 73, 35, 45,134,118, 10, 32,196, 5, 90, 55,223,251, 76, 91,239, 46,102,151,155,197, 77,201, 97, 74,241, 60,
+ 6,104,142, 65, 68,144, 76,138, 8,196,104, 42, 10,179, 32,166,108,231, 16,193,108,110, 20,140,134,206,171,140, 71,126,101, 76,
+ 17,113,147, 35,247,149,178, 60,150, 73, 11, 37, 78,227, 82,118, 24, 73,206,118, 95,220,221,126,126, 49,189, 90,207,111, 48, 46,
+ 58, 6, 45, 59, 32,160, 68,249,194,196,139, 44, 87,101, 49,212,217,104,119, 65,152,144, 8, 68,140,168, 91,200,137,251,222,144,
+209,245,194, 19,200, 16,124, 71, 33,101,103,151, 10, 96,149,173, 16, 1, 45,231,170,251,189, 30,173,201, 92,170, 62,248, 83, 1,
+168, 93,129, 35,195, 60,204, 5,198, 76, 76, 86,166,234, 69,114, 95,169,150,211, 69,176, 41, 89,205,108, 11, 36, 75,213,177,243,
+146,151, 76,108, 46,116, 55,159,171, 29,229, 56,119,136,127, 42, 77, 8,179,156, 96, 29,225, 36,139, 56,215,253, 82, 52, 85,172,
+ 82,170,119,100,118,188, 24,122,139, 96, 93, 6,204,194, 32,131,165, 93, 74, 60,206,206,184, 49, 87, 94,146, 95, 68,255, 27,150,
+171, 55, 20,150,178,106,249,113,162,151, 9,193, 68,253, 43, 64,140,228, 60,220,186, 0,140,217, 36, 30,224,113,152,101, 12,150,
+137,251,128,190, 72,154, 3,153,174,240, 46, 69, 28,217, 75,148,242, 79,174, 46, 39,146, 91, 82,128,130,100,168,100, 1, 0, 29,
+ 12,146, 10, 76, 61,220,201,206, 82,151,197,161,216,151, 84,149, 75,223, 10, 50,253, 52,253, 50,179,189,103,174, 48,230,186, 76,
+246, 71, 44, 53,154, 62,211, 37,105, 98, 90, 66, 88, 90,113,112, 76,219,151,235, 59,214, 99, 69,221,121, 98,146,145,100,134, 94,
+ 33, 68,100, 33,116, 50, 74, 2,206, 94, 56, 29, 18, 90, 6, 28, 50, 22, 32,121,105,198, 82,142,211,156, 63, 37,241,166, 96,192,
+186, 69, 48,191, 43, 73, 24,186,194, 83, 86, 96, 74,103,138,211,161,204,203,183,162, 4, 37, 76, 65,170,219,178, 48,227,129, 82,
+223,203,188, 21, 17, 41,135, 84,147,208,243,153, 32, 4,102,217,246, 51, 7, 2,233,224,152, 88,206,174,242,206,101, 81, 33, 71,
+ 76,233, 94,210, 55,233,188, 72,222, 56,150, 29, 78, 54,152, 57,241, 98,177, 69, 7,200,118, 95, 46,152,125,249,241,229,199,151,
+ 31,255, 95,212, 91, 63,215, 37, 68, 86,215,214,214,215,214, 86, 86, 86, 55, 54, 55,142, 30, 57,186,177,185,185,177,190, 62, 89,
+ 89, 93, 89, 25, 15, 6,195, 84,163, 90,170,228, 28, 40, 90,132, 16,230,243,217,238,222,238,222,222,254,213,171, 87,246,247,246,
+119,118,119,246,118,119,183,183,183,247,246,246,254,255, 19,208,100, 50,121,224,193,151,157, 57,115,230,212,201,147, 27, 27,155,
+147,149,137,247, 30,196,109, 13,190,244,248,210,161,226,201,193, 47, 58,114,235, 45,124,232, 16,194,108, 58,219,217,221,185,120,
+241,194, 51,159,248,196,179,207, 60, 19,190, 68,149,239, 47,153,128, 78,158, 60,249,200,163,143,190,234, 85, 15, 15,135, 3,178,
+143, 42, 62,255,117,115, 72,135, 37, 92,170,196,233, 57, 4,207,217, 74,142,141,229,128,164,138,188,164,212, 77,165, 64, 0,170,
+170, 47,190,248,194,127,125,239,123,207,159,255,184,153,253, 95, 21,208,234,234,234,169, 83,167, 94,253,234,135, 31,120,224,193,
+132,232,176, 43, 12, 47, 85, 82, 14,201, 72,110,171, 52, 34,135, 74,200, 75,223,222,194,161,191,245,223,131, 93,115,146,152, 89,
+178,204,132,204,181,248,155, 55,111,190,239,191,253,246,249,243,231,183,182,182,254,143, 8,232,228,201,147, 15, 61,244,208,185,
+115,231, 78,158, 58, 21,163, 37, 66,234, 65,161, 16,248, 92,106, 35,203, 6,105,201,210, 44, 63,127,192,248,224, 54,180,254,219,
+146, 1, 62,223,147, 9, 93, 99,162,251, 3,114,225,194,133, 15,126,240, 67, 79, 62,249,187,237, 31,130,230,113,224,214,222,246,
+182,183,213, 77,139,142,209,213,225,142, 75, 24,228, 23, 38,231,131,119,123,232,201,219,188,236, 16,109,227,115,168,210, 33,234,
+194,178,152,186,211, 7,136,168,234, 96,184,178,186,126,204, 15, 6,243,217,236, 55,127,227,223,255,167,223,248,245, 63,172,128,
+190,247,173,223,215, 17, 78,216, 17,220,110, 35,149, 91, 44,207,114,105,250,160, 92,150,158,188, 85,149, 14, 30,194,204,194,112,
+ 29,123, 68, 83,123,112,106,149, 47, 60,141,130, 20,116, 56, 0,156,250,114, 1, 85,239,157,122, 17,129,202,104,180,182,118,228,
+184,247, 67, 81,161,153, 89,168,231,251,191,248,179, 63,253, 7,191,255,254,255, 61,107,229, 51, 29,234, 80,107,201,237,106,247,
+ 60,100,177,114,203, 87,247,100,161, 96, 30,122, 29,115, 69,167, 35,157,151,242, 91, 78,246,212, 87,206, 15,146,125, 81,245,206,
+ 15, 69, 93,146,139,115, 94,213,229,217, 2,234, 82, 99,118,254,166,170, 68,188, 0,206,185,193,104,109, 56, 94, 77,204,160,225,
+120,125,229,200,233,193, 96,156, 50,126, 21,170,224,231,255,217,159, 9,237,244, 55,126,237, 29,239,252,197,159,188,126,253,218,
+ 23, 37, 32,247,196,227, 79,228,106,124, 79,142,228,173,162,225, 23, 96,226,229,214, 39,121,219,103,161,174,114,190, 82,173,212,
+ 85,190,154, 12, 70,171,126, 48,241,213,200, 87,227,225,104,173, 26, 76,170,193,216, 15,198,213, 96,226,135, 19,239,199,190, 26,
+251,106, 84, 13, 39, 85, 53, 76, 47,115,213,196,251,161, 86, 67, 95, 13,171,225,138, 31,140, 85, 43,184,202, 87,227,193,104, 69,
+213,119,214, 34, 97, 51,109, 27,215, 87, 7,175,121,245, 31,121,237,107,191,226,242,165,203, 55,110,108,125,193, 26,116,144,238,
+ 33,135,197, 33,183,149,143,116,172,216, 4, 93,201, 18,178, 86, 78,200,210,200,132,254, 87, 0,186,193,104,117,227,204,120,229,
+136, 58, 7,113, 43,171,199,215, 54,207, 56, 63, 20,129,186,193,104,188, 38,110, 80,184, 81,233,148,101, 28,171,199,237, 50, 22,
+ 80,174, 92,222, 79, 20,218, 79,102, 0, 4,129, 4,160, 32,225,162, 41, 41,171, 43,107,111,126,243,119, 70,198,127,242,142, 95,
+122,238,185,103, 63,191,128,184,116, 50,249, 89,104, 65,183,213,151,108,178,164,255, 98, 73,107,114,145,121,169, 74,152,202,192,
+169, 29,220,171,175,212, 15,211,236, 18,113, 3,209, 74,164,130, 80,212, 67, 60,196,105,198,123, 18,210,157,111,152, 69, 28,253,
+137,205,149, 60,233, 89, 11, 64,223,139, 44, 5, 7, 17,152,193,140,153, 35, 98, 17,192,119,188,249,205,211,233,244,215,126,245,
+ 87,207,159,255,248,231, 20, 80,239,175, 14,221,229, 45,225,239, 45,141,103,165,247,120,169, 15, 25,165,172,211,129, 43, 4, 68,
+ 70,227, 35, 71, 79, 62, 56, 24,175, 11,224,171,201,250,209,179,147,181,227, 10, 7, 64,212, 81,171,210,144, 47, 80,165, 32, 38,
+146,143,192,149,230,171, 30,204,237, 33, 93, 20, 24,121, 73,199,153,138,249, 61,172,153,160,214,196, 93,233, 1, 53, 34,198, 56,
+ 26,141,190,237,219,254,210,197, 75, 23,255,213,191,252,149,207, 22, 67,185,175,120,237,107, 59,122,246,210,159, 91,190,235, 73,
+ 69, 40, 84, 28, 98,169, 93, 8,135,225,166, 66, 10, 23, 8, 80, 13, 86, 39,107,119, 12,134,171,226,188,175, 70,227,149,227,195,
+225,134,136, 87,173,212,121,136,131,184,212,188, 88,106,230,146,213,174, 72,167, 31,105, 33,144, 3, 49,105,167,182, 2,202,146,
+170, 39,150,120,161, 8,197,176,191,125,105,239,230, 69, 11,109, 33,202, 68,144,102,182,182,182,254, 85, 95,253,213,171, 43,107,
+159,248,196,249,219,104,144,153,221,222,167,103, 22, 60, 0, 68, 67, 19, 44,132,172, 39,198,238,206,197,169,120,159,239, 75, 69,
+ 6, 3,241,197,207,140, 38, 71,198,171,199,156, 42,160, 43,235,167, 78,220,249,154,241,202, 81,166,159,185,113,164, 79,129,129,
+ 26,114,115,124,238, 32, 64,186, 81, 41, 29, 16, 7, 27, 36, 58,130, 3, 82,121, 10, 75, 37,134,164,229,109,198,203, 69,193, 4,
+221, 2,128, 5,179, 16, 66,211,182,139, 67, 76,217,104,209,104,143, 61,246,216,227,143, 63,254,243, 63,255,179,151, 47, 95, 62,
+160, 65,143, 62,250, 40,110,231,210,141, 76,196,155, 84, 28,174,155, 68,224, 97, 36,163, 49, 24, 83,207, 96, 23, 67,165,193, 65,
+ 94,203, 0, 11,209,193,112,109, 56,220, 80, 55, 82, 63, 24, 78,142,172, 31, 61, 59, 24,110, 58, 29,168, 27,138,250, 82,211, 43,
+ 92, 24,145, 37,160, 89,250, 48,169,107,253,232, 66, 76,233, 42,120,169,246, 91, 90,223,164,156, 29,246,142, 51,151, 7, 0,134,
+176,119,243,226,206,214, 75, 49, 52,125,160, 71,118, 50, 79,143,215, 61,241,250,241,100,146,134,234,100, 13,154,205,115,114, 28,
+141,137, 50,148,212, 50, 4, 46,106,235,240,229, 24,151,109,242, 18, 56, 45,105,104,149, 0, 80, 17, 95, 57,239, 28, 64, 95,141,
+ 78,159,217, 56,179,122,255,192, 79, 0,120,217,104,218,137, 86, 46,121, 28,151, 76,246,114, 18,194, 91,243, 66,201,230,177, 35,
+252,116, 85,132, 82, 2,224, 18,229,100,201, 48,228,222,146,104, 33, 44,118, 67,168, 69, 16,218, 69,189,216, 55,139,180, 92,253,
+235, 26,252, 98,161, 14, 27, 64,229, 87,190,254, 43, 79, 28, 63,241,239,254,221,175, 38,176,197, 55,109, 58, 98, 18, 34,119,167,
+ 97,111, 26, 19, 63,171, 14,156,205, 99,180, 91,124,152,176,200, 60,251,150, 37, 2,168, 58,103,170, 17, 34,195,161, 77,142, 76,
+ 78,224,164,234,170, 10, 34,198,141, 13, 7, 49,119,252,164, 73, 54,197,104,200,225,196,247, 22,198,133, 90,103, 88, 74, 53,106,
+233,153, 67, 94,183,227,208, 88,180,186, 93,196,118, 10, 90, 12, 77,104,235, 68, 36, 75, 81,137, 38,114, 85,105,133,164,136,138,
+208, 44,152, 61,240,192, 3,223,249,157,127,237,157,239,124,199,205,155, 55,221,145, 59, 94,190, 63,179,253, 89,216,159,197,189,
+ 89,156,215,214, 70,134,104,109, 96,176,174, 57, 53,247, 31,165,138, 81,142, 75, 74,109, 41, 91, 0, 66,197, 85,131, 21, 95,173,
+ 56, 55,242,213,234,202,198, 61,227,181,179,198, 73, 19,124,107,195,104,163, 89,237,246,166,178, 63, 71,140, 8, 17, 77, 64, 27,
+250, 91,101,151,249,229,233, 69,135, 18,193, 62, 3,226,178, 36,186, 42, 95, 97, 51, 11, 45, 13,119,136,205,124,111,251,194,116,
+231,242, 98,182,179,152,238, 76,119,175, 46,230,219, 22, 35, 15, 70, 42, 92,186,118, 97, 39,113, 60, 30, 63,241,186,215,125,248,
+ 67, 31,146,211, 47,255,134,131,155, 39,184,149, 42,125, 48,189,202, 85,159,196, 77,100,199,182,162,250,209,100,245, 84, 53, 88,
+ 23, 17,231, 70, 71, 79, 62,124,244,142,215, 56,191,146, 18, 2,173, 70,206, 57, 8, 42,135,147, 27, 88, 91,129, 42, 84, 48, 25,
+ 97,125, 5,222,101,193,167,225, 54, 61,179,184,111,247, 46,132,143,229,136, 49, 87, 43,197,138, 29, 87,198, 54,154, 23, 26,176,
+216,223,186,248,194,147, 59, 55, 94,164, 69,144,161,157,181, 43, 92, 56, 68, 0, 0, 10, 53, 73, 68, 65, 84,245,148,180, 30, 51,
+193, 33, 92, 96, 41, 13, 22, 81,167,140,153,194,112, 40,218, 97,239, 56, 15,165, 12,133, 79, 90,136, 60, 93,229,203,202, 60, 16,
+175, 90, 65, 84, 92, 5,113,132, 75,172, 96, 80, 29,115,113, 50, 10,234, 22, 58,135, 10, 84, 65, 66, 20, 94, 83,139, 58,134, 85,
+ 34,204, 0, 66,167,210, 9,171,175,170,119,209, 16, 59,106, 88,207, 70,111,218,186,169,247,193, 0, 96, 49,223,174,235,105,108,
+ 23,105,108, 96,140,173,153, 49,119,221,117,133,227,220, 5, 43,101, 43,242,173,146, 70,168, 83, 95,106,168,236, 90,249,122,189,
+ 97,175,252,201,238,229,164,162, 48, 3,216,207, 95, 74,166, 66,171,193,218,104,114, 12, 80,231,135,131,209,186,247, 19,239,199,
+201,227, 52,166, 98,153, 47,119,165,233,189,210,100,132,149, 49,156, 66, 4,147, 17, 78, 28,193,100, 4, 0,206,137,119,172,124,
+234,155, 78, 53, 67, 45,142,108,153,125, 79, 88, 96,108,147, 7,155,237, 93,217,186,244,177,166,222, 35, 17,219,249,222,206,229,
+182,222, 99, 46,164, 46, 65,225,194,174,125,144,133,132, 33,203, 61,218, 34, 2, 67, 68, 82,198,219,100,152, 75,101,212,236,246,
+209,245,186, 47,121,156, 68, 83, 99,119,118, 41, 68,238,184,233, 94,212,251, 31, 46, 89, 86,129, 25, 84, 25, 77, 66, 64, 26, 93,
+208,180,168, 91,104, 74,196, 29, 70, 30, 2,168,230,145, 45,236, 55,152,176, 80,122, 54,205,194, 34,132, 90, 64,210,234,197,180,
+105,235,182,169, 1,134,208,210, 98, 52,147, 82, 38,198,109,114,204, 37, 65, 75,215,100,153, 77,175, 41,252, 45,230,177,188, 24,
+ 44, 74, 92, 40, 4, 40, 68,206,204,108,234,102, 3,176,132, 37,234,253,208,251, 21, 81, 85, 29,138, 12, 5, 46,247,172, 75, 71,
+170, 88, 18,153,128,148,197,130,139, 5, 59, 3,116,237, 38,156,131, 0,195, 10,199,142,202,230,154, 58, 7, 8,134, 30,163, 33,
+ 85, 69, 5, 49, 44, 22,211,171, 49,236, 3,136,109,189,123,243,197,189,155,159,177, 24, 0,182,237,162, 89,236,154,133, 12, 96,
+231,124,227,243,131, 55, 89, 45,122, 32, 6, 66, 42,196, 91, 33,139, 72, 79,192, 41,252,138,174,145, 63, 75,174,136, 76,192, 66,
+141,205,175,207, 25, 47,251,209, 49,144,142, 37,145,174,145,153, 19, 75,218,202, 37, 68,183,231, 66, 75,199, 9,100,219,178, 9,
+116,150,102, 26, 81,197,212, 65,193, 16, 66,104,235,216, 54, 4, 99,168,219,166,110,219,218, 98, 3, 32,134,218, 98,107, 22, 15,
+ 32,189,153,236,212,157,172,131, 31,153, 74, 45, 93, 41, 33, 63, 37, 66,139, 94,108, 41,203, 75,141, 52,157,178,176, 39, 51, 17,
+ 38,236, 18,234,238, 31, 75, 22,187, 55, 99, 34,100, 26,209, 39,102,136,177,239, 41,145,254,184,162,181, 62, 23, 87, 17, 87,144,
+236, 72,196,214, 50,189,172,142, 55,183,119,197,166, 4,193,224,236,146,182,207,137,205, 68,160,210, 12,117,199,203, 66, 19, 29,
+131,193, 44,116,225,116,161,128,220, 6,124,144,219, 32, 57, 75,105,181,100,142, 69,223,240, 13,120,200,225,203,117,115,166, 80,
+ 24,117,178,228,212,250, 14, 8, 43,185, 99, 31,174,164, 95,201,164, 45, 66, 40, 75, 35, 58,216,135,121,157, 75,236,108,173, 9,
+ 18,195, 46, 22,170, 5,200,166, 13,214,180,164, 17, 81,219,153,107,110,192,246, 1,169,180, 53,191, 59,112,205, 82,126,175,135,
+123,238,138,171,205,236,211, 28,223,246,127, 15, 84,175, 74,128,195, 67,152,141,115,190, 83,251, 30,198,145,222,150, 38,106, 87,
+214, 22, 90,102,139, 80, 10,177, 12,125,194, 8,192, 24, 67,160, 53, 70, 85,136, 90,240,164, 43,198, 47, 44, 9, 51,171,156, 10,
+ 72,179, 16, 45, 56, 65, 36,219,102,119,186,243, 66,104,119, 1,137,113,190,191,253,194,124,255, 50,153,248,188, 11,225, 20, 12,
+ 16,169, 20,171, 99, 27,120,136,136,115, 88,157,184,213,177,115, 46,119, 31, 14,188,168,102, 0, 41,181,243,231,125, 75,228,106,
+ 73,221,233, 89, 6, 2, 73,228, 81,146,170,218, 91,166,164, 68, 49,250,130, 75, 46, 35,173, 82, 28,126,201,168, 81,204, 80,177,
+ 61, 25,238,232,199,200,148, 99, 42, 6, 68, 72, 26, 69,209,113,106,123,218,152,244, 36,159,124, 97, 37, 35, 45,210, 64,210,230,
+245,252, 90, 83,223, 32, 25,195,124,127,231,211,211,221,151,210,241,233,187,252, 33,149,147, 24,220,112,160, 0,188, 87,231, 48,
+172,210, 68, 10,113, 94,211,132,128, 28, 34, 11,211,204, 29,233,204,106, 10, 84,210,171,187, 65, 20,153,131,102,197, 21,247,111,
+230, 19,121, 79, 14,182,245, 89,223,229,212, 19, 16, 15, 69, 71,146,233,132, 57,160, 78,111, 16, 99, 29,194, 28, 80,250, 24, 98,
+ 67,198,132,154,164,217,113, 37, 24, 48,177, 72, 70, 2,198, 56,157, 93,157,239,189,100, 86, 3,108,234,157,221, 27,207, 54,245,
+142, 0,102,161, 94,220, 48,139, 29, 43,178, 80, 57, 25, 13,179, 58,214,193, 4,162, 26,219, 96,251,179,152,198,105, 14, 43, 93,
+ 25,107,229,132, 2,175, 58, 26,106,229,187,225, 89, 76, 44,113, 89, 34, 90,226,214, 74,177,244, 30,131,128,199,114,214, 87,216,
+112,125, 87, 2, 10,232, 36, 69, 35,123, 63,136, 50,240,181,235, 14,182, 24,219,216, 46, 68, 53, 18,102, 13, 17,105, 49, 49, 62,
+ 89, 88,100, 10, 70, 11, 96, 16,146,108,235,233,165,237,235, 31,105,155,125, 17, 52,139,189,233,238, 11, 77,179, 95,226,135,212,
+196,144,245, 57,243,226, 4,145,176,154,221,208,170,121,109, 59,251, 33, 33,179,227,145,219, 92,245,149, 87, 8, 7,222, 1, 78,
+196,229, 8, 89,229, 96,175,145, 28,128, 8, 62,203, 84, 44,111,210,197,220,157, 31,147, 50,115,131, 40, 38,170, 15,149, 10, 1,
+ 51, 23,213,187,200, 60,209, 12, 99, 19,194, 66,160,172, 16, 67, 27,219, 32, 18,203,140, 13, 85,129, 17, 22,219,102,118, 37,134,
+109,152,197, 24,166,123, 47, 45,102,215, 67, 51,133, 32,132,121,180, 0,166, 41, 62,217,192,119, 76,255,190,170,100,100, 95, 94,
+163, 69,196, 60,222, 11,117, 43,251,179,232,189,137,192, 59, 51,218,172,206,243,146, 42,175,131, 74, 18, 27,216,171, 84, 62,199,
+179, 34, 80,201,207,247, 99, 61, 50,232,214,141,206,233,248,142,210,231, 92, 61, 18, 37,165, 57,168,175,110,117,221, 75,214,183,
+ 20, 48,180,205, 84, 69, 72,241, 54, 14,205,126,140, 11, 13,158,128, 19,239,212, 39,255,191,104,103, 55, 46,127,104,119,235,227,
+ 68, 99,180,122,182, 53,159, 94, 49,171,151,208,193, 98,189, 18,161, 61,155,144, 46,202, 42,186, 92,136,237, 70,139,150,215, 90,
+215,220,159,133, 60,109, 91,101,224,197,105, 58, 95, 88, 25,185,149,177, 75,173,227,163,161, 30, 89,243,131,129, 10,160, 34, 85,
+165, 78, 58,103, 95, 6,171,144, 48,243,224, 82, 89,175, 8,203,250, 68,142, 75,174, 62,247,200, 64,122, 11,110,125, 73, 33,169,
+ 71, 27, 67, 3,213, 24,156,197,134, 22,146, 70,152, 6,109,234,132,180,135,230,102,104,247, 66,152, 25, 91,144, 22, 91, 34,118,
+108,206, 28, 83, 74,169, 38,229,190, 78, 75,249,209, 82, 67, 91,126,103, 65,241, 66, 93, 68, 97, 29,186,152, 74, 54,105,248, 50,
+ 66,100, 29, 76,139, 18,236,251, 48, 8, 46,249,210,202, 59,239, 10, 65, 66, 80, 84, 11, 10,245, 75, 92,249, 82, 34,201, 1,101,
+105,244, 44,100,244,220,233,150, 33,207,174,176, 97, 93,232, 29,173,173, 23, 55,154,102, 7,162,222,143, 22,179, 59, 23,139,235,
+ 21, 23, 48, 54,139,237,253,237,231,219,118, 15, 64,104,167,187, 55,159,157,239, 95, 34, 35,150,195,119, 17, 75, 77, 65, 57,227,
+ 74, 29, 0, 82, 16,112, 32,135,144,105,139, 83,215,157, 29,200,169, 83,219, 82, 62, 55,102, 81,106, 3,144, 38,218,201,116, 17,
+177,219,185,163,146,248, 74,214, 32,175,121, 52,193,112, 32,227,161,115,154,103,252,120,203, 51,160, 58,197, 77, 71,202,186, 56,
+ 48,111, 74,218,178,110,244, 89,166,101,203, 18, 48, 83,216,180,201, 97, 51, 70,107, 98, 59, 19,168,145, 33,204,218, 48, 15, 97,
+ 1, 48,132,218, 98, 0,210, 28,171,229, 56, 18, 98,146,166,218,225,224, 74, 36,143, 76, 74,125, 28, 25, 83,205, 49, 89,158,117,
+211, 33, 60,148, 50, 59, 40,185,241, 37, 35, 65,164,235, 91, 74,213, 45,167,191, 74,159,113, 70,137,212, 24, 37, 6,210,101,177,
+228,118,132,146,106,244,253, 4,125,242,219,213,235, 14,102,168,157,255,234, 8, 26, 60, 24,173,168, 86,234, 6, 37, 85, 49, 90,
+204,148,228,212,178,155, 8,246,221, 8, 38, 46,207, 35,234,166, 43,101, 23, 86, 98,255,146, 35,201,242, 87, 7, 34,187, 46,163,
+ 42,201,103, 50,245, 75,163, 0, 74,202,174, 57, 85, 44,190,160,175,116,148, 98,129, 0, 16,223, 5,182,210, 79,238, 2,210,208,
+190,180, 77, 29,138,102, 29,156, 87,234,248,203,227,244,186,237, 45, 2,138,172, 99,172, 15, 17,171,186,249, 14,197, 18, 75,113,
+ 8,165, 7,160,111,166,203,224,147,116, 29, 36, 68, 71, 58,183, 14,214, 68,223,135,135,108,172,122, 60,173,128, 49,165, 53,135,
+189,167,207,108,185, 46,240,237,176,138,228,119,138, 47,247,236, 58, 32, 59, 88,179,216,150,156, 60,117,158,188,147, 20, 59,104,
+ 77, 32,214, 21, 8,121, 11,169,236, 64,234, 94, 64,146,174, 6, 40,101,232, 92, 62,191,157,207,202,123,109,146, 26, 28,114,117,
+ 59, 75, 0, 38,217,124,119, 17,141,117, 64, 85,134,192,176,220,235, 67,237,107,189, 37,222,145,244, 95, 8,176,239, 40,200,211,
+186,250,252, 45,109,139,121,246,126,189,235, 21,237,106, 78,105, 73,105,100,113,178,161, 5,179, 42,210, 68, 55,148,177,139, 11,
+216,229, 90, 29,234,214,167,143,197, 92, 89,233, 7, 21,176, 71, 81,173, 76, 96,238, 60, 57, 58, 27,168, 5, 81, 42,167, 69,186,
+ 12, 61,205,133,131,244,103,136,121,108,164, 32, 39, 91,125,104, 88,148, 38,159, 69,162,211, 82, 46,215,100, 75,151,188, 47,110,
+ 18,253,140, 17,246, 93, 78,169,109, 61, 83, 56,146, 29, 43,135,137,178,156,169,201, 82,171,185, 28,164,117,176,123, 91, 46, 15,
+142, 43, 19,164, 59,156, 42, 55,147,136,230,136,185,139,237,211,121, 50,148,255, 97,164,244,251, 22,239,194, 37,169,160, 27, 25,
+ 87,218,157, 58,236,166,180, 95,165, 59,215,148, 35,101,165, 40,219,145,142, 90,129,245, 4,146, 82,141, 30, 91, 50,116,165, 74,
+ 43,157, 50,210,141,246, 46,211, 39,173,164,240,217, 70,200,146, 55,226,109,138, 34,236,207, 67,137,175,200,229,225,228,125,171,
+124,129,203,208, 29,184,188,228,142, 94,211, 81,109, 88, 88, 55,101, 6, 93,223,207, 86, 90,198,178, 97, 67,177, 53,229, 87,165,
+216, 35,230,218, 28,251, 66, 64,215,147,148, 86,231,217, 37,157,214, 19, 48, 65, 99, 31,206, 50,251,148,146,138,119, 6, 31,214,
+177, 59,216, 25,212, 3,112, 19, 14,125,102,223, 87,147, 7, 38, 98,137,168, 72, 90, 23, 51, 88,154, 84,156,179,224, 2,219, 23,
+ 16, 28, 6, 83,104,145, 81, 70,199, 83,227,187, 44, 19, 79,178,240,242, 97,146, 66, 61, 49, 72,170,167, 44,159,179,222,149,228,
+ 41,141, 20,136, 79,178, 40, 47, 72,221,242,133, 21,217, 87,155,115, 39, 48,151, 73, 2,189,164,242, 61,103, 76, 53, 53, 63,221,
+202, 12,238, 96,241, 37,251, 85, 28,114,137, 5,101, 9, 29, 47, 90,215, 25,166, 46, 59, 77, 55,156, 38, 43, 44, 57,199, 20, 55,
+166,255,101,161,120, 12,154, 64,217, 11,171,164, 69,154,163,135,226,226, 65,166, 81, 27, 29, 14,155,101,236,209, 91,233, 50,185,
+ 62, 55,175, 73,199, 52,145,146,227,119, 67, 59,203,114, 59,136,159, 75,182, 71, 14,149,131,173, 11,168, 4, 7,106, 37,194, 62,
+ 88,232,244, 78,186,201, 79, 41,198, 41,106,196,229,208,180,208, 77,187, 0,101,233,108,148, 46,242,206,112,244,214,168, 11,144,
+178, 19, 92,126, 25,151, 96,124,246,171,252, 95,129,131,209,235, 56, 35,137,112, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+ 0};
+
diff --git a/source/blender/editors/datafiles/blob.png.c b/source/blender/editors/datafiles/blob.png.c
new file mode 100644
index 00000000000..16dc958f7d3
--- /dev/null
+++ b/source/blender/editors/datafiles/blob.png.c
@@ -0,0 +1,341 @@
+/* DataToC output of file <blob_png> */
+
+int datatoc_blob_png_size= 10703;
+char datatoc_blob_png[]= {
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68,
+ 82, 0, 0, 0, 96, 0, 0, 0, 96, 8, 2, 0, 0, 1, 26,253,208,249, 0, 0, 0, 4,103, 65, 77, 65, 0, 0,177,143, 11,252,
+ 97, 5, 0, 0, 0, 6, 98, 75, 71, 68, 0, 0, 0, 0, 0, 0,249, 67,187,127, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 13,215,
+ 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 0, 7,116, 73, 77, 69, 7,218, 7, 20, 5, 32, 44,179,189, 3,155, 0, 0, 32, 0,
+ 73, 68, 65, 84,120,218,237,125,121,152,101, 87, 85,239, 90,251,156,123,111,221,174,121,234,185,134,158,170,186,186,122,202, 64,
+ 63, 50,116, 39,129, 4, 18,201,128, 33, 6, 8,248, 16,240, 1, 65, 1,101,242,227,201,167, 79, 68, 69,248,228, 41, 40, 2, 15,
+ 21,103,209, 39, 2, 79,145, 48, 42, 36, 16, 50, 66, 72, 39,157, 30,211,115,117,141,119, 58,227,222,123,173,247,199,222,251,156,
+115, 43, 33, 9,208, 74,252,244, 38, 95,213,173, 91,183,206, 93,103,237,181,215,240, 91,191,181, 27,247,237,219, 7, 79,251,120,
+ 38,111,242,179,103,247, 62,248, 93,153,202, 32,104,213, 22, 23, 78,157, 56,250,139,111,125, 71,246, 43, 97,190,125,243,238,123,
+101, 42,147, 36, 73,226, 68, 42,229,151, 58, 74, 37,127,249,155,130, 48,104,181, 90,173, 86, 51, 8, 90, 97, 16,164, 82,126,229,
+107, 95,255,212,167, 62,213,246,166,250,210, 98,189,182,212,168,213,162, 40,138,194,232,210,203,175,148, 82,161,231,191,255,183,
+223, 7, 0,130,136,238,125,224,193,102,179,217,168,215, 17,113,114,235,182,177, 13, 27, 14, 30,120,184, 86, 91,106,212,235, 97,
+ 24, 90,193, 17,189,109,219,119,106, 77,243,179,103,231,231,102, 23,230,231, 15,236,127,104, 98,106,251,204,217, 51, 39, 79, 60,
+254, 59, 31,248,109, 31, 0, 52, 49, 49, 48, 83,111,223,224, 3,247,223,179, 48,119,110,239, 85,215, 28, 61,124,112,106,122,251,
+202, 85,171,146, 40,242, 1,128,180,102,210, 90, 19, 3,239,216,185, 59,149,169,146,114, 98,235,212, 61,223,186,107,221,200, 40,
+ 32, 8, 0, 32,173,180, 38, 34,173,149,210, 90, 51, 49, 17, 53,234,245,141,155, 39, 6, 7, 7,153,193, 7, 0,169, 20, 51,107,
+173, 73,107,165,149,121,104,173,181,150, 7, 31,123,172, 84,242,241, 25,173,221, 51,121,160,249,246,233,207,124,118,253,200, 88,
+ 20, 69,205,122,109, 97,126,246, 85,175,122, 85,241, 77, 86,227,107,214,174, 79,146, 36, 78,146, 84, 74,165,233,189,191,254,107,
+203,175,244,133, 59,238,240, 75, 29, 74,202, 40,142, 90,205,102,173,182,116,209,197,123,154,141,218, 13,215,191, 40, 77, 83,123,
+165, 90,173, 86,175, 45,213,235,245,102,189,158, 36, 49, 48,104, 98,165,249, 15, 63,250, 81,115, 37,239,158,251, 30, 56,115,250,
+100,146,166, 97, 24,110,223,181,187,179,171, 59, 14, 3,225,121,245,250,210,210,226,226,250,213,131, 15,124,231,123,190,240,252,
+237,187, 46, 34,210, 74,233,249,185,185, 32,104,213,106,181,174,238,158,217,153,153,153,179,167, 43,149,142, 74,165,236, 51, 19,
+ 17,144, 38,102, 62,244,216,163, 81, 20, 30, 63,122,100,237,250, 17,207, 19, 8,188,243,194, 61,239, 25,223,136,119,223,247, 0,
+105, 98, 38,173, 73, 74, 41,165,212, 74, 74, 41,147, 56, 78,146, 36, 12, 91,205,122, 77,144, 54,235,161,181,214, 68,196, 68, 90,
+107,173, 52, 17,109,158,152, 96,102, 0,240,149, 82,164, 89,147, 38, 34,183,110, 74,107,165,181,126,116,255,126,173, 53, 17,195,
+249, 90, 59,255,137, 47,121,158,119,247,183,239,149, 90,203, 52, 77,211, 36,142,162, 48,104,221,254,134, 55, 44, 46, 45, 61,211,
+ 11,253,249, 95,252,213,214,169,109, 12,168, 73,107, 77,154,152, 8,136, 1,208,251,224,255,254,221,160,213,168, 45,206,253,242,
+175,188,231, 73, 47, 36,178,103, 95,249,234, 87,199,198,199,227, 56,142,162, 48, 12,195, 40, 50,223,131, 40,138,226, 36, 78, 82,
+153, 74,133, 94,249, 93,239,124,235,211, 72,212,108,182,252, 82,138,136, 68,172, 73, 43,169,164,148, 82,166,105,146, 36, 73,156,
+166,233,115, 47,187, 2, 17,211, 52,185,242,154,235,131, 86,163,182,180,248,241,143,253,225,221,223,190,215, 42,100,108,108,236,
+248,241,227,223,190,247,190, 51,167, 78, 26,175, 19,197, 81, 28,134,105,154,148, 74,165, 45, 19, 19, 61, 61, 61,149, 74, 5,129,
+122,250, 6,162, 48,136,172,196, 97, 20, 69, 99, 99, 99, 27, 71, 86, 61,240,157,239, 1,128, 55, 50, 50,242,247,255,240, 57,225,
+121, 67, 43,215, 0,112,173,182,148, 38,169,214,106,124,108,172,127,104, 40, 77,146, 48, 12,195, 32, 8,130, 96,255, 67, 15, 86,
+ 58,170,173, 86,171,217,104, 52, 27,245, 90,173,182,184, 48, 55,119,238,116, 87, 87,207,233, 51,103,125, 0, 64, 33,136, 1,152,
+251, 7,134,250, 7, 6,137, 8,128, 15, 29,120,164, 84,238,208,164,147, 56,105, 53, 27,181,165, 69, 34,189,106,245,154, 83, 39,
+ 30,127,252,232,225,161,225,225, 99,135, 31,155, 61,115,116,223,213, 55, 92,186,175,116,211,141, 55, 8, 0,208,100,254,179,246,
+ 72, 68, 90,211,248,198,137,117, 35, 99, 90,169,199, 30,125,248,224,163,251, 75,165,210,202,213,107,238,189,251,174,147, 39,142,
+ 63,255,133,215,169, 52, 78,162,230, 79,190,252,181,221, 61,253,194,243, 75,149,170, 15, 0, 90, 19,176,125, 16, 49, 51, 49,179,
+185,236,186,245, 35,171,215,172, 35,178, 70, 77,164,131, 32,248,252,231,254, 97,114,106,122,203,182,221,125, 3,195,179, 51,167,
+ 1, 0, 17,125, 0,208, 74, 51, 51, 3, 48,105, 0, 48,130,217, 75,146,217, 58,102,203,106, 38,242,125,255,130,139,247,144,166,
+137,173,219, 14, 62,186,191,187,187,219,188,193, 72,164,184,240, 32, 34, 50,206,146,136,137, 53,105,119,191,218,110, 68,173,181,
+214,113, 28,165, 73,172, 59, 59,181, 86, 90,211,249,243,147,231,229, 49, 58, 58, 42,206,215,181,158,100,247,191,247, 55,126,243,
+234,107, 94,160,148, 74,211, 52, 73,226, 40, 12,230,207,205,188,238, 13,183, 63,163, 8,144, 61,238,123,224, 59, 0,168,180, 86,
+ 74,165, 73,146, 36, 73, 18, 69, 81,212,106,212,235,175,127,195, 27,158,233,173,221,115,223, 3,196,160, 52,217,245, 33, 34, 34,
+ 2, 34, 70,225,121,191,243,129,247, 63,133, 68,249,133,238,188,235,155,154, 88,187, 40, 40,165, 84, 74, 90,175, 74, 74, 19, 49,
+224,187,223,245,206,167,215,145,210,196, 32, 25,128,136,204, 85,164, 76,165, 76,149, 84, 50, 85, 74, 41, 34,242,203, 21, 33, 4,
+ 17,125,223, 11, 93,118,217,165,105,154, 8,161, 25,152, 52, 41,173,149, 76,165,148,105,154, 38, 73, 98, 46, 55, 48, 56,116,217,
+190,171,246, 93,117, 77,171,217, 56,123,250,196,235,223,240,198, 39,185,181,125,123,247,198,113,156, 36,113, 18, 39, 73, 18,167,
+ 73,108, 20,109,191,199, 49, 51,239,188,224, 34, 20, 2, 0, 81,120,221,189, 3, 31,250,189,223,123,146, 11, 37,105,146,196,113,
+ 28, 69,113, 28,197,113, 28,199,113, 18,199, 74, 74, 64,102, 38, 20,226,185,151,237, 85, 82,165,105, 42,149,210, 90, 17,145,240,
+188,119,189,243,109,109,183,118,235,173,183, 94,121,197,149,245,102, 75, 8,143, 25,136, 72,147, 46,149,202, 19, 91, 38, 24,184,
+213,108, 46,206,207, 18,113,154, 38,105,154, 36,113,146,196,137,185,160,240,114, 21,251,247,220,119, 31,162,199, 12,139, 15, 63,
+164, 64, 51, 3,145, 22,194,219,188,121,179,240,252, 52, 77,153, 1, 61,255,193,123,191,181,113,203,214, 84,166,137, 17, 56, 54,
+178, 39,249,173,121, 94, 9, 81, 8,207,155,222,121,129,231,121,198,237,120,158, 72, 83, 25,199,113, 20, 69, 81, 20, 38, 73,162,
+180,126,244,225,239,134,173,150,113,188, 97, 16, 4,173, 86,208,106,124,240, 3,239,115, 58, 66, 1,136,198,129, 76, 78, 77, 79,
+239,216,181, 99,247,238,238,174, 21,205,102,163,217,108,180,154,205, 32,104,133,173, 32, 12,130, 83, 39,143, 19,115, 20, 4,205,
+102,189, 81,175,215,235,181,197,185,153, 82,185,227, 55,127,253, 87,152, 57,191, 73,102, 98, 6, 19,237,123,250, 6,103,206,158,
+ 69, 33,100,154,134, 97,208,168,215, 23, 22,230,111,121,249,127,159,159,155, 61,117,252, 8, 3, 70, 81, 56,127,238,140, 38, 22,
+158, 95,174,172,184,234,138,203,125,243,199,204, 12,204, 0,246,121,165, 99, 69,189,182, 40,149, 86, 82, 70, 97, 80, 91, 90,106,
+ 52,106,243,115,115, 75,139, 11,173, 86,176,239,121, 47, 56,118,228, 80,185, 82, 90,183,110, 4, 1,132,231,251,165,178,176,110,
+218,250,105,235,114,153,105,251,206, 11,183,239,220, 29, 71,225,252,220,108, 24,182,174,185,246,250, 99, 71, 14, 29, 57,244,216,
+141, 55,223,218,168, 45, 62,246,232, 35, 19,147,219,202,149, 14, 6, 64, 33, 80,120,120,207,253,223,209, 68, 0, 12,204, 90, 3,
+179, 54, 66,185,192,162,181,210,196, 68,154,152,116, 87,119,119, 16, 69,103, 78,158,240, 4,158, 56,126,108,116,108,163, 73, 51,
+246,239,127, 88, 16, 49, 48,177,102,173, 25, 64,155, 59, 37, 34, 48,210, 49,160, 91, 10, 34,170,213,106,247,223,125,215,221,119,
+126,173,167,111,224,202,171,127, 34, 8, 90, 0, 12, 8, 0, 40,108,224, 1, 27,139,200,197, 35, 34, 50, 47,104,210,144,197, 40,
+173,167,182,239,188,250,218, 27,207,158, 62, 89,237,168,156, 60,126,204,168, 23, 0,124,235,115, 24,204,154,217,191, 39, 2, 32,
+ 38,178, 41, 31, 19, 17, 91,247, 68, 68, 76,125,253,131,251, 31,126, 40, 12, 90, 86,191,192,249,133, 24, 40, 87,187,141,143,196,
+ 76, 70, 78,102,237, 94, 51,177, 74, 15,173, 92,181,227,130,231,200, 52, 37, 98,224, 92, 34,123, 9, 98,119, 65, 27,212,178, 16,
+ 87,124,104, 34,154, 61,123, 86,166, 41,217,143, 57,127, 57,228,121,121,140,140,140, 8,120, 54, 61,108, 46,242,204, 31,151, 92,
+122,233, 45,183,220, 50, 49,185,181,187,171, 91,147, 86, 82,134, 97,112,248,208,193,187,238,186,235, 51,159,249,236,249,145,105,
+223,190,125, 95,255,250,215,159,226, 29,183,189,226,149,111,249,197,183, 2, 8,132,220,220, 93, 98,163,148, 52,129,207,228,190,
+113,154, 38, 39,143, 31,255,213, 95,123,207, 15,157,137, 60,149,134,238,248,210,151, 6, 7,135, 25,133,177,121,118,201, 33,105,
+107,182, 68,204, 0, 12,192,108, 34,148,239,121,180,118,253,200,239,127,248, 67, 81,216,250,165,119,189,251, 73,195,232, 83, 63,
+158,220,134, 46,185,228,146,111,125,251,190,190,254, 65, 98,176,229,151,210, 42,251, 95, 43,165,148,150, 74,107,173,204, 75, 54,
+ 17,182, 91, 5, 16,133, 87,122,207,175,253,202, 43, 94,118,203,121, 16,232,218,107,175,125,223,251, 63,160,181, 86,210,132,126,
+251,200, 18, 10,243, 99,170,210, 84, 74,165,148, 84, 74,154, 4,195,200,166,205,118, 38, 0,220,176,113,243,235, 94,243,211, 63,
+106,206,247,214,183,189, 93, 41, 77, 4,136,152, 5, 20,155,109, 59,255, 97,234, 56,173,109, 37,154, 21,166,202,100, 44, 74, 51,
+ 96,111,223,192,158, 75,166, 60, 33,110,184,249,165, 71,142, 28,254,230,157,119,125,230,179,159, 53, 53,251, 15, 32,208, 91,222,
+242,230, 52, 77, 60, 77, 40,132, 19, 40,147,201,120,220, 98, 21,173,181,210, 74, 43,210, 90, 74,169,148, 50,161,166,163, 90,189,
+120,207,115,129,153,136,149, 86,194, 47, 79, 77,239,220,180,121,242,165, 47,191, 45,142,163, 48,104,125,252,163, 31,189,247,254,
+ 7,158,145, 64,157, 43, 86,196, 81, 44,124, 37, 80, 32, 34,219, 32,158,151, 57,148, 85, 37,218,213, 19, 90,105,169,165,150, 90,
+ 41, 20, 98,116,108,124,253,250, 81,115, 3, 90,155,253,104,238,132,153, 17, 81,120, 94,233,103, 94,253,154,151,188,228, 37,239,
+121,239,123,195, 48,122, 26,129, 70,199, 70,146, 36, 22,202, 67, 20, 8,104,211, 19, 96, 38, 87,114, 17,153, 28, 72,120,158, 95,
+ 42,245,246,246, 34, 98, 18,199,113, 20, 74,169,250, 6, 6, 7,135,134,164,146, 38, 48,104,210, 90, 41,169,148, 86, 50, 77, 83,
+169, 82, 41,149,210,154,152, 81,136,183,253,194, 91, 62,248,187,191, 23,180,203,228,155,232,120,215,183,190,229,123, 37, 20, 98,
+246,220,153,249,185, 57,212, 2,193, 36, 75, 0, 0, 38,191,101,102, 64, 40,149, 74, 93, 93,221, 35,163, 99,136, 72, 68, 38, 13,
+ 47,149,202,190, 95,138,162, 96, 97,110,230,236,201, 99, 19,211,187,164,148,217,130,106,165,165, 76,149, 43,213,211, 52, 77, 83,
+187, 77, 94,241,178,159,250,248, 31,255,217,114,129,238,189,255, 65, 0, 48,250, 88,181,102,164,111, 96,248,232,161,131, 54,123,
+ 32, 27,114,141,220, 66,136,145, 13,235, 43, 29, 43,180,182,144,141,245,137, 50,149, 74,106,173, 25, 48,145,234,158,111,254,235,
+196,182,157, 89,137,104,182,159,148,105,150,173,199,113, 20,133, 81, 20,134,113, 28,110,217,178,233,208,161, 35,109, 75, 38,132,
+103,238, 30, 0,145,185, 82,238,216, 58,189, 19, 17,136, 88,201,180,213,106, 45, 46, 46, 68, 81,200,196, 3,253, 61,105,154,106,
+ 6, 68, 97, 64, 59,173,204, 98, 88,140, 34,138,162, 36, 73, 90,173,224,238,175,127,117,122,247, 69, 0,160,164,115, 10, 86, 59,
+ 73,154, 38, 81, 24, 69, 65,171,217, 88,170, 45,156,251,249, 55,190, 49, 73,162,143,124,228, 99,143,159, 56,233,108, 8, 49, 79,
+ 65,129,209,196, 8, 70, 0,242,124,175,167,183,175,167,183,151,153,128,197,210,194, 76,189, 86,243, 74, 37,129,130, 1, 92,248,
+ 80, 6, 17, 74,226, 56,138,162, 32,104, 53,234,245, 23,221,244,146,114,165,210,172, 47, 45, 44,204, 55, 27, 13,153,166, 82,201,
+ 52, 73,156,122,130,160, 81,171, 45,158,187,242, 5, 55,248,165, 18, 51,223,126,251,235,211, 56,252,195,255,243, 73, 31,242,125,
+ 4,128, 12, 12, 4,204,128, 8,198,124, 17,192,102, 53,128,212, 63,180,250,236,153, 7, 24, 0,133, 7,128,196,164, 85,142,226,
+196, 81, 20,134, 65,216,106,221,112,243,173,158,239, 7,173,102, 20, 39, 82,170, 52,137, 70, 70,199, 55,108,158,104,212,107,179,
+231,206,126,251,206,175,205,205, 28, 87, 82,191,240,198,151,122,158, 64,244, 76, 34, 76,204, 47,188,230,106,223, 74, 3,192,230,
+ 19, 0,208, 36,157,192,204,192, 8,192, 86, 70, 96,214,160, 38,182,237,100,166,135, 30,188, 47, 12, 67, 35,141, 93,136, 36, 73,
+147, 36,137,163, 29, 23, 94,188, 48, 63, 79,164,147, 36, 9,195,160,190,180, 52, 55, 59,179,115,247, 5, 75, 75,139,243,179,179,
+243,115,115, 94,169,242,147, 47,123,141, 82,202,134, 27,173, 16,133, 16,158,239,149,132,231,249, 0, 96, 98, 56, 2, 24,172,135,
+192, 73,228,212, 5, 96,226, 42,216,138,130,121,122,231, 5, 76,100,130,153, 19,219,216, 61, 3,176,214,252,232,254,135,102,207,
+205,148, 74,254,139,111,121,185,148, 42,104, 53,151, 22, 23, 22,230,103,119,236,220,181,101, 98,178, 86, 91, 18,136, 44, 16,136,
+ 1, 17, 16, 1, 16, 5,218,124,200, 21, 10,204,132,104, 4, 0, 34, 70, 96,178,122, 98, 0, 96,114, 90,115,181, 14,123, 2,177,
+228,219, 31, 29, 50,196,140,136,188,117,122,199,228,212,116, 71,117,197,193, 3,143,104, 77, 97, 24,212,107, 75, 39,143, 29,157,
+156,218,118,232,177, 71,247, 92,114,121,146, 36, 71, 15, 29, 0, 20,246, 3,208,228,249,104,151,140,180, 9, 93,198,110,136, 1,
+ 51, 49, 17,205,199, 0, 34, 16, 59, 37, 2, 16, 0, 48, 24,247, 13,108,222,158, 99, 86, 76, 68, 0, 65,171, 89, 93,209,105,182,
+226,170,213,107,135,134, 87,239,127,232,161,131, 7, 30, 30,221,176,169,182,180,116,236,216,209,141,155,182,152,213, 0, 46,108,
+123,147,115,153,245, 96, 64,102, 70,100, 34,155,234,184,204,221, 85, 38, 0, 78, 37,196, 54, 79, 98, 6, 42, 66,104, 70, 70,151,
+ 49, 17, 34,118,247,244,104, 34,102,238,238,217,112,201,229,251,226, 36, 81, 82,118,118,118, 57, 47, 7,153,171,203, 5, 98, 70,
+155,108,229,142,208,106,204,252,224, 22,202,138, 78,238, 57,185, 42,131,243, 50, 42,147, 46,255,207,104, 46, 85,234,232,145,195,
+165, 82,233,228,241, 99,157, 93, 93, 92, 72,245,204,223, 57,129,204,173,187,250,213,236,245,204, 35,100,242,219, 74, 5,236,178,
+ 0,184,207, 4, 91, 48, 1, 19, 1,176, 45,150,220,218,185, 32,152, 71, 67,166, 93, 23,237, 57,240,240, 67,218,150, 89, 46, 32,
+ 0,251,136,248,181,175,126,217,238, 31, 52, 18,184, 37, 53, 47, 49, 23, 94,179, 91,137, 51,111,145,189,194,252,125,158, 21,181,
+110,205,130,153,249,254,251,137, 25,216,201,169, 53, 49, 47, 46, 46, 61,203,240, 70, 83,155, 61,123,132,217,183,111,159, 77, 11,
+159, 61,143,103, 87,229,250,108, 20,232, 7, 40,165,203,229,242,207,253,220,207, 95,188,231, 57,107, 87,175, 65,129, 74, 41,153,
+166,103,206,156,121,236,192,129,191,253,187,191,125,252,241,227,255,126, 2,109,221,186,245,143,254,248,147,194,247,129,193,246,
+ 46,180, 70,100,225,149, 86,175, 89, 59, 52, 60,124,241,115,246, 40,149,126,242, 79,254,228,139, 95,250,242,143, 90,219,143,142,
+142,158, 56,113,226, 41,222,113,239,253, 15, 48, 34, 50,146,173,163, 45, 38,158,117, 8,109, 53,153, 38, 73, 28,167,105,252,214,
+183,189,189,217,108,253,208,187,204,235,237,237,173,215,235, 79,250,235, 29, 59,118,124,254, 11, 95, 68, 33, 0, 69,150,196, 21,
+235,198, 12, 39,179, 79,129,153,248,170, 43,175, 40,151,253, 3, 7, 14,254, 16, 2,141,141,141,125, 95,163,222, 58, 53,245,199,
+127,250,103, 38, 37,128, 44,102,114, 17,242,115,226, 89,104,135, 1, 16, 4, 10,225,239,219,119,197, 43, 94,118,235,249,220,101,
+221,221,221,159,252,211, 63, 7, 7, 93,114,174,143,182,160,100, 51, 20, 7,190,130, 73, 49, 17,133, 16,219,119,238,184,112,247,
+206,243, 38,208, 63,223,241, 69, 68, 65, 46,147,205,214,196,228,156, 89,153,175, 11,112, 33, 3, 80, 30,133, 81, 8,255,198,235,
+ 95,228,251,254,121, 16,232,246,219,111, 7,192, 54, 88,193,213,206,217, 22, 51, 37,151,107,246,101,101,127,182,178,192,204, 32,
+188, 55,190,238,213,231, 97,219,191,236,182, 87, 48,128, 38, 66, 64, 83,182, 22, 87,202, 8,104,165,211,182, 21,229, 32, 85,157,
+193,180, 70, 79,213, 21,157,213,106, 71, 20,197, 63,188,134, 38, 39, 39, 13,198, 99, 97, 5, 91,160,103,157, 74, 85,160, 16,232,
+ 28,110,104,123,162,153, 24, 17, 61,223,171,116, 84,175,220,123,201, 15,164,161,229,219,254,163, 31,251,104, 71,181,154, 43,166,
+176,173,141,120, 6, 68,208, 74,107, 42, 8,225,228, 51, 96,145,113, 7,155, 38,182,110,223,177,235,210,203,175,120,254,243,159,
+ 55, 53, 53,213,106, 53,103,102,102,158,118,219, 47, 95,178,142,142, 14,173, 52,123,128, 68,166,243,104, 76,194,180,137,237,215,
+130,111,212, 90, 81, 81, 97, 90, 19, 3, 0, 94,252,220,203,170,213,170, 41,254,215,172, 91, 63, 52,188,242,226,231,236, 73,162,
+240, 35, 31,249,131,111,220,121,215, 15,176,100,172,217, 66,136,166, 74,214, 5, 32, 81,103,125, 71, 91, 65,107,173, 72,147, 42,
+188, 98,234,187,221, 23, 61,167,171,179, 27, 81,160,240,236, 87,225, 9,207, 19,190,255,154,215,254,236,135, 63,244,187,207, 84,
+ 32,207,243, 28,164,105,122,157, 74, 41, 37, 93,199, 83,101, 48,162,118, 79,148, 69,127,204, 43, 68,132,136,189,125,253, 61, 61,
+ 61, 46, 27,206,202, 76, 3,139, 11,207, 47,149, 43, 29, 31,248,237,223,122, 70, 2, 33,162,145,197,162,207,230, 73,222,132,205,
+162, 87,206, 80,202,168, 49, 90,217, 6,254,244,206, 93,198,101,230, 91,145, 51, 80,199,124,138,240, 75,229, 95,125,247,187,158,
+126,219,155, 11, 51,160,231, 49,146,200,202, 55,199, 16, 96,118, 72, 30, 48, 35,128, 16,130,129,209, 60,132,240, 16,215,143,140,
+145, 38, 3,112,233,162,119,176,110, 44, 19, 11,253, 82,101,237,154,213,103,206,206, 60,149, 64,215, 93,119,157, 82,202, 99, 36,
+178, 31, 99,202,177, 2,109,193,150,202,194,247,153,185,179,179,171, 90,237, 80, 74, 38, 81, 24, 69, 49, 49,172, 94,187,150, 44,
+101,200, 57, 9,165,200,128,181,110, 59, 24,183, 14, 0, 47,187,229,230, 15,126,248, 35, 79, 46, 80, 87, 87,215,231,191,240,133,
+ 74,185,227,209, 71,190,103, 96, 43,151,107,163,171, 15,109, 80,243, 60,207,243,253,254,190,254,149,171, 87, 41,105,178,180,212,
+243, 60, 20, 34, 12, 90, 11,115,231,250, 6,134, 13,249,204,110, 67,165,164,227,161, 21, 54, 35, 17,179,120,178,192, 34, 0,224,
+166, 23,191,248,203, 95,253, 90,185,220, 33, 60, 31, 1,180,214,228,254, 86, 74,149, 19,219,180, 2, 4, 33,196,248,248,248,202,
+ 85, 43, 77, 59, 1, 80, 0, 10,131,167, 8,175,116,246,244,169, 70,163,166,148,212, 22, 77,183, 20, 45,173,149, 86, 82,201, 76,
+ 38, 43,224,134,209,245,203, 5,122,245,171, 95,253,174,255,249,203, 66,120,158,231, 33, 98, 71, 71, 21, 0, 52,232, 28,137,214,
+118,239, 3, 51, 48,172, 93,183,182, 84, 42, 49, 96,193, 48, 52,185, 58,151, 0, 14, 31,216,111,208, 68, 37,149, 76, 29,214,105,
+ 48, 78,149, 63, 53, 59,117,205,234,149,203, 5,170,116, 84, 61,207, 23, 66, 0, 8, 64,216, 52,185,173,187,187, 7, 25, 51, 91,
+214,121, 92,231, 74,165, 82, 42,149,181,166,220, 21, 57, 87,101,240,104,102,150,105,122,244,200,193, 36,137,165, 76,165,116, 34,
+164,210, 73, 99,210, 75,243, 53,222,176, 97,116,185, 64,102,135,152, 6,172,217, 84, 99, 27, 55, 77, 76, 77, 87,171, 85, 3, 33,
+101, 62,129,153,250,122,187,140,169,186,214,135,148, 42, 53,132, 71,169,164,210,202,172,246,204,233,147,134,214, 32,101, 42,211,
+ 52,131, 95,165, 69,132, 83, 3,182, 37, 73, 60, 60, 52,252,190,223,248, 95,203,108, 8, 1, 1,208,104, 8,153,136, 9, 74, 37,
+127,227,230,201,169,233,237,155, 54, 79, 12,175, 92, 85,233,168,250,190, 87, 42,149,149, 38, 3,184, 74,153,164, 73,226, 62,192,
+246, 99,148,148, 42,149, 74,233, 52, 77, 27,245, 90,142, 6,167,150,224,146, 36, 73, 26, 39, 73, 28,167,134,143, 16,180,214,141,
+110,244, 75, 29,191,242,238, 95, 42, 8,212, 94,184, 50, 32, 32, 24, 16, 6, 16, 43,213,142, 85,171, 87,111,153,152,220, 58,189,
+ 99,211,150, 9, 41, 13,153, 35, 78,226,216,124,138,129, 22,211, 52,113,116, 17,251,193, 90,169,114,185,194,192, 90,147, 76,147,
+ 52,141,210, 36, 78, 19, 7,213,134, 97, 20, 54, 26,245,133,206,174,174, 82,201,239,236,236,122,253,207,190,170,184,237,209,250,
+ 64, 98,131,233, 33, 90,156, 17, 13,210, 8,136,192,126,169,148,196, 9,179, 16,158,103,160, 81,109,129,115, 35,103,108, 88, 39,
+113, 28,149,203,229, 93, 23, 94, 28,180,154,245, 37, 14, 90,173, 40, 10,173,249,152,119, 68, 81, 20,181,130,102,125,112,120,157,
+ 76, 37, 10,207,247, 75, 35,163,227,207,185,120,119,123,232, 48,232, 89, 1,190,204, 72, 15, 6,195, 67, 0,165, 84, 20,134, 81,
+ 24,197, 81,219,255, 81, 28,197,134,210, 27,134, 73, 28, 95,119,227,205,214,215, 0, 34,114,189,182,168,164,236,239, 31,232,238,
+238,137,194, 32,104, 53, 90,141,165, 48,104, 77, 78,239, 16,158,135, 40,132,240,125,191,116,253,139,126,194, 2, 86, 14,154, 2,
+ 6,100, 2, 11,156,131,105,102,216,184,200, 68,128, 98,120,213,186, 83, 39,142, 33, 10, 20,130,136,141, 71,177,184,112, 18, 71,
+ 97, 24, 4, 45,207,243, 0, 48,138, 66,195, 13,149, 82,147, 82,215,190,228,197, 97, 16, 44, 46,204, 87,171,229, 59,255,229,203,
+ 97,171,190,109,231,197, 93,221, 61,158,239,147, 38, 64, 33, 60,207,247, 74, 0,224, 91, 24,202,172, 12, 35, 32,217, 68,136,173,
+111, 65, 48, 8, 25, 2, 83,119,119, 79,181,186, 98,105,105,209, 56,158,188,181,144, 38, 73, 18,135, 65, 16, 6,173,107,174,187,
+ 49,104, 53,211, 52, 53, 26,139,194,160, 21,180,194, 32,136,194, 32,142, 35, 69,188,114,245,186, 29,187,111, 18, 2, 45, 96, 75,
+ 44, 4, 10, 97, 44, 33,139,101, 6,251, 69, 98, 66,139,159, 3,130,129, 16, 1, 1,217, 2,180, 8,163, 27, 54,117,118,247, 28,
+ 62,120, 64,107,109,221,137, 76,173,141,199,177,241,206,245,122, 93,202, 52,142,162,102,179, 81, 91, 90,218,184,105,139, 74,147,
+ 86,171,213,168,213,154,245,198,228,214,233,234,138,170,225, 9,106,173, 77,150,129, 40, 16, 61, 0,240, 57,135,162, 49, 71,243,
+ 1, 44,140,110, 86,203,193,141,134,148, 49, 48, 56,180,231,146,203, 23, 22,230, 79, 62,126,236,220,204, 25, 35,141,146,170,187,
+167,103,199,238,139,130, 32,136,227, 72,166, 73, 24,134,245,165,165,107,174,123, 81,103, 87,119,163, 94, 15, 26,245,179,103, 78,
+159,124,252,200,232,248,213, 38, 59, 96,173,161, 0, 9,163, 64,163, 33,135, 92,155, 24,111, 63,219, 66,251,192, 96,165, 49, 48,
+ 62, 48,147, 69,171,187,187,123, 38,167,166, 55, 79,108,181,142,195,217, 62, 0,204,206,204, 28, 57,123,166,190,180,120,237, 13,
+ 55,117,117,247,198,113,148,196,145,102, 22,192,175,189,253, 45,143, 61,250, 61, 39, 70, 65, 26, 68,179,217,141, 13, 17, 0,154,
+ 45, 79, 89,158,135,182, 81,239,120, 74, 89,209,108,216, 55,128,136,158,231,161, 64,118, 80, 51,128, 48,239, 28, 90,185,114, 96,
+104,168, 92,169, 0, 83,163, 81,143,163,176,217,108, 54,155,205,122,163, 54, 63, 63, 87,111,180,134,134,134, 65,107,187, 2,214,
+ 53,219,158,179,111, 33, 86,215,117, 65,116,183,153, 75, 79,224,122, 88,214,246,209,181, 60,204, 85,208, 1,180,142, 84, 96, 68,
+151,105,154,164, 73,216, 10,146, 52, 9,154,205,249,185,217,142,106, 53,142, 66,153, 38, 91, 38, 39, 79,157, 56, 94, 91, 92,180,
+123, 41, 7,242, 65, 0, 56,234, 14, 80, 86, 11,179, 67,164, 77, 95,209,226, 26,224,122,211, 38, 69,181,232, 52, 19,176, 33, 46,
+ 65, 17,209,102, 86, 74,149, 75,229,249,249,217,199,143, 30, 62,118,248,224,177,195,143, 94,241,252,235,130, 32,232,239,239,111,
+ 54,155, 73,154,206,156, 61, 93,144, 36, 75,208,236, 13,161, 69,229, 25, 17,108,221,153,129,247,142, 29,197,166, 7,139,133,212,
+ 22, 29,160, 77,174, 11,224, 74, 58, 6,102,165,228,232,232,248,240,240,170, 32,104, 13, 12, 60,239,224,129,253,103, 78,159,218,
+176,113,211,252,220,220,217, 51,167,151, 22,231,135, 86,174,206, 96,112,215,115,205, 90, 99,204,166,129,199, 0, 68, 38,206, 2,
+ 0,163, 13,109,217, 50,218, 58,217,129,233,228,140, 43, 55,179, 2, 96, 14, 0, 92,169, 84, 74,229,146,210,170,179,179,123,219,
+244,206,109,211,211,141,102,179, 89, 91,172,110,153,130,118,164,222,105,200,114, 74,236,157, 33, 60, 17,172, 39,104,183,237,252,
+105, 1,197, 42,130,246,217, 19,179,210,198, 76,202,229,242,232,248,134,102, 43,104, 53,155,154, 11, 93, 1,206, 12, 15,124,183,
+242,224, 26,226, 72,110, 79,154,101,200,154,100, 80,220,221,203,250, 5,100, 93,153,165,194,217, 95,154, 54, 13, 21, 4,230,249,
+185,217, 86,179,217,106, 53, 79,159, 60,177,122,205,154,130, 30,205,218,128,176,198,108, 20, 69,206, 61,176,179, 82,147, 31, 57,
+ 13, 57, 83,177,224,148,107,137, 16,152,222, 99,161, 64,201, 76, 60, 43,198,205,103, 55, 27, 13,173, 85,255,192,192,153,147,199,
+202,229, 74,222, 23,177,177,194,104,104,121,120,207, 37,110,107,108,130,237, 0,185,214,154,165, 59, 64, 1,237, 43,172, 99,118,
+ 71,204,237, 45,171,158,222,190, 52, 77, 38,183,109,127,226,219,173,134,150, 93,174,176, 16, 4,182, 55,199,108,120,200,236,186,
+117,148,201, 67,148,191,208,222,196, 3,199, 65,160, 34, 37,157,107, 75,139,213,106,231,208,240,234,226, 6, 96,215, 86,114,137,
+116,161,205, 4, 5, 35,163,204, 96, 92,139,216, 53,238,168, 96,204,212,190, 5, 50,246, 74,150, 91,113,177, 43,200,204,115,231,
+102, 14,236,255, 30,219,132, 34,215, 0, 0,248,199,142, 30, 45, 54,199, 50,179,135,204, 49,231,246,190, 76,100, 40, 50, 86, 97,
+121,102, 87,252,168,226,218,228,207, 30,217,255, 8, 23,250,123,198,205,224,190,125,251,150,150,150,106,181,218,179,173, 45,244,
+227,125, 48,115, 95, 95, 95,127,127,191, 15, 0,245,122,253,228,201,147,255,165,148, 39,146, 60,251,251,251,197,127, 41,226, 63,
+ 88, 59,241, 63,112,123,243,135,252, 0,223,239,235,235,171, 86,171,157,157,157, 29, 29,213,106,181,163, 84, 42, 3,112, 16, 4,
+ 81, 20,197,113,220,106,181,194, 48,108,181, 90,255, 89, 20, 52, 60, 60,124,235,173,183,222,246,202,159,182,160, 41,228,237, 45,
+ 83,220,153, 62, 72, 54,212,102, 1, 90,109, 9,181,231,102,102,254,233,159, 62,255,165, 47,127,229,217,226,137,246,237,219,247,
+248,227,143, 63,117, 7,248,105, 31,107,215,174,251,133, 95,252,133,203,247,238, 43,149,202,150,116,237, 50,115,202,146,152, 44,
+ 87,113, 12,103,109, 41, 49, 58,107,202,153, 9, 99,195,246, 85, 74,157, 61,125,234, 27,119,222,249,249,127,190,227,199,162,154,
+209,209,209,241,241,241, 31,201,130, 86,174, 92,249,166, 55,191,229,218,107,175, 99, 68,145,181,172, 5, 34, 35, 51, 35, 35,163,
+ 99,174, 1,186, 42,199,212,202,200,150, 4, 7,128, 2,208,244, 64, 4,162,135, 2, 16, 60, 1,224, 1,174, 89, 55,242,147, 55,
+223,114,211, 77, 47,142,163,240,175,255,230, 83,119,127,251,158,255, 48, 91,108,106,106,234, 67,191,255,145,222,222, 94, 33, 60,
+ 70, 48,173,241,156,250,152, 33, 77, 92, 44,210, 10,156,236,156,143,152,189, 25,243, 58,145, 45, 0,139, 40, 60,207, 3,230,114,
+165,122,219,109, 47,127,233,173,183, 28, 59,122,244,195,127,240, 81,254,119, 84,144, 55, 54, 54, 86,171,213,190, 31,167,225,137,
+143, 77,155, 54,125,234,239,254,239,109,175,120,101,185, 82, 17,194,195, 2,128,226,120,127,109, 57,106,219,172,105, 27,249, 32,
+239,250,231,165, 2,216,182, 49, 45,171, 53,236,110,133,238,158,158,171,174,216,187,162, 90, 61,120,232,240,191,181,106,122,123,
+123,251,250,250,126, 48, 11,122,211,155,223,124,219, 43, 94, 41,132,111, 81, 85,178,232,113, 94,160, 88,187, 33,206,190, 23, 8,
+ 34,121,121,196, 69,118, 4, 23, 74,187,204, 79, 65,161,160,179,168,158,237,198,121,165, 61,123,246,236,222,185,227, 19,127,242,
+167,103,103,206, 61, 91,182,152,231,121, 95,184,227,139, 43,186,186, 12,158, 38, 0,137, 93,165,148,161,109, 25, 75, 54, 35,213,
+ 22,149,148,213,138, 38,138, 17, 51, 91, 55,205,142, 28,144, 35, 78,203, 11,166,108,251, 89, 66,137, 40,149, 94,243, 51,175,252,
+251, 79,127,238,192,193, 67, 63,254, 68,113,120,120,248, 47,255,242,175, 58, 58, 86,176,173,161, 29,251, 54,139, 66,108,227, 16,
+187, 39,197, 94,150,105,183,113,198, 20,177,109, 68,219,131, 43,244,217,114,246, 17,217,241,118, 71,215,200, 63,208,106,205,224,
+154, 55, 94,127,221,222, 75,246,252,248, 45,232,253,239,127,255,234,181,107,137, 9,137, 81, 8,208,136,224,200,251,174,186,254,
+126, 21, 51, 23, 39, 2, 51, 54, 44,155, 81, 12,203,104,161,108,236,176, 48, 29,232,102, 65,136, 51,138,172,115, 86,128, 32,204,
+ 36, 9,240, 69, 23, 95, 56, 59, 63,255,216,161,163, 63, 54, 5,189,227, 29,239, 24, 29, 27, 35, 77,128, 44,132, 48, 52,117,132,
+ 2,206,152,161, 13,102,103,101, 95,219,144,162,130,103, 38,183,209,204,208,170,214, 25,191,206, 40,174, 72, 43,177,108, 23,211,
+200,181,140, 8,225,121,190,239, 99,185,220,221,213,213,229,121,162,167,167,255, 99,159,248,163, 32, 8,179, 6,217,191,159,130,
+214,174, 93,187,119,239, 94, 41,149,240, 88, 8,193, 22, 28, 71,120, 50, 5, 21,112,254,140,143, 94,228,207, 17,183,135, 45,199,
+234,115, 27,202,106,199,204,208,228,163, 98,153, 35, 55, 97,191,111, 96, 96,108,124,195,138, 21,157,224,248,219,227,155, 38,247,
+ 61,255, 5,228,216, 49, 90,202, 48, 12, 27,245,218,191,254,235,191,124,250, 31, 62,155, 36,201,191,161,130,246,237,221,107,250,
+ 96,192, 64,130, 17,201,106,199,133,246, 34,100, 90,132, 32,185, 77, 79,142,178, 95,112,216,153,118, 10, 3,188, 84,200,177,173,
+ 25,153,217,102, 68, 96,128,238,158,222, 45,147, 83, 43, 86,172,200, 45,148,136,144,124, 20, 68, 26, 81, 48,160, 7, 0, 12,213,
+ 21,157,165,114,229,134,155,110,126,209,139,110,144, 42, 61,116,232,208,223,252,205,167,142, 30, 61,118,254, 21,180,126,253,122,
+227, 91,153, 25, 8,179,198,189,157,197, 3, 40, 96,234,185, 25,229,241,135,178,120,191, 44,150, 81, 62,166,108,102, 64,237, 86,
+203, 92,144, 54,243,254,238,163,112,227,230,205,107,215,173,179,203, 35,132, 9,151,102,157,216,146, 12,204,155,133, 97, 76, 9,
+ 65,190,231, 41,102,143, 97,211,166, 45,239,120,251,219,149, 76,239,184,227,142,127,252,252, 23,206,155,130,124,223,175, 84,202,
+ 90,105, 38, 70, 33,132,157, 81, 68,204,170,132,162,126,218,176,218, 54,212,215,142,161, 20,195,124,161,137,228, 28,119,129,145,
+ 73,164,137,144, 25,132, 0,102,225,249,219,119,238,238,236,236,108,211, 62, 23, 6,193,205, 68, 65,238,195,193, 54,246,209,229,
+ 78, 40, 60,191, 68,196,207,123,254,213,151, 93,122,233,199, 63,241,137, 99,143,159, 56, 63, 22,100,122,204, 66,120, 66, 8, 18,
+194, 54,231, 16,224, 9,236, 7, 46,228,139,217,126,179, 99, 60, 68, 79, 14, 6,231,221,204,182,228,219,244, 82, 81, 8, 6, 88,
+209,217, 57,185,109,186, 82,174, 20,251, 37,185,219,207, 78,127,201,117,107,153, 57,153,231,114,108, 89,179,178, 66,248,254,107,
+ 94,253, 51,223,121,240,193, 79,127,246, 31,153,249, 71, 82,144, 82, 42, 8, 67,173, 20,123, 76, 36,208, 45,136,213, 78, 97, 70,
+143,219,113,255,220,144,242, 25, 44,211,102,115,143,172,247,239,121,204, 76,236, 17, 17,161,176,199, 48, 8,207, 52, 73, 75,229,
+242,228,212,180,239,151,180,166, 66, 36, 40,204, 63, 25, 54,144,115, 2,218,206,171,230,212,220,108,199,178,107, 17, 0, 8, 6,
+220,182,109, 90, 74,249,185,127,250,194, 15,169,160, 53,107,214,252,214,251,222, 55,185,117,235,204,233, 83,245, 70,195, 99, 54,
+233, 43,228, 14, 8,219,173, 7,158,124,135, 89, 62,141,101, 43, 34,218, 32,221,211,219,211,211,221, 35, 60,145, 37,146, 74, 42,
+165, 82,101,143,132, 74,181,214,136,162,186,162,211,243,252,172, 73, 74,133,194, 36,203, 26, 52, 17,179,118, 36,101,205, 54,245,
+ 84, 69, 62,110,193,186,220, 72, 24,194,196,228,196,222,165,197,111,124,243,158,167, 87, 80,102,105, 23, 92,112,193,207,191,233,
+ 77,211,219,183, 35, 10,102, 16, 66,120,126, 9,128, 73,107, 68, 34,182, 83,192,203, 27, 0, 54, 3,106,239,167,101, 44, 78,225,
+ 9, 79, 8, 33,202,149,242,208,224,112, 87, 87,151,109,234,155, 12, 64, 24,236, 3, 60,159, 25, 74,204,192,140,196,192, 32,211,
+ 36, 9,231,103,231,231,206,173, 92,189,174,175,127,192, 28, 95,150,199,187, 76, 75,164,205,113, 91,236,200,156,236, 88,114,110,
+230, 88, 21,105,128,198,156,180, 34, 38,222,182,117,235,195,251, 15, 44,213, 27, 79,165, 32,211,223,120,237,107,127,246,250, 27,
+111, 80, 74, 3,160, 16,134,123,134,136,216,213,221,189,180,184, 96,237, 66,107, 88,166, 32,203, 30,104, 51, 33,215,143, 66, 33,
+ 80,160, 64,132,106, 71,199,234, 53,107,202,149, 14, 68, 64, 16,134,162,239,242,196,220,217, 26,208,131, 93, 14, 33,132,135,232,
+ 73, 25,159, 56,118,248,212,113,111,124,211,132, 73,196,178, 89,185,204,197,187, 28, 51, 59,132, 42,163,111, 82,126, 72,129,157,
+206,182,167, 23, 25,189, 17,240,216,232,250,165,239, 61,242, 52, 10,122,249,109,183, 93,243,130,107,137,216,243,124, 96, 6, 67,
+225, 1, 4,128,158,190,193,205,213,206, 19, 71, 15, 39,105,106, 42, 69, 87,171, 35, 50, 16, 80,129,247,148, 79,114, 2,176,231,
+121,198,148, 6, 7, 7,251,250,251,132,240,152, 8, 16, 9,138,115,130, 69,130,127,150, 22,178,171,195,140,109,162, 38, 74,146,
+228,192,254,239,142,140,111, 44,149, 43, 70,145,214,142,128, 51, 42,173, 35,251, 22,184,182, 42, 99,152,231,231, 16,216,179, 19,
+210, 84,166,169,146,178,163,163,252, 52, 85,250,232,232,232,196,228,214, 77,155, 55, 91, 64, 1,156, 51, 22,118,140,220,243,188,
+193,225, 85, 3, 67,195,229, 74,135, 84,169, 86,218,210,171,242, 16,111,226, 84,158, 69, 35,162, 97,134,173, 92, 57,216,217,217,
+ 9,110, 32,158, 11, 64,107,182, 15,220,193,126,150,196, 74,170,200, 66,181,119,102,136,127, 51,103, 78,117,118,246, 0,176,214,
+202, 2,180, 82,102,111,165,236,111, 40, 35,118, 26, 78,174, 44,144, 74,237,128,178,148, 73,146, 70,105, 20,108,218,180,241,197,
+ 55,221,148,164,201,137,147,167,158, 10, 15, 66, 20, 0, 4, 88, 12,225,104,200, 55,102,184,216,243,252,254,129,193,254,129, 1,
+ 96, 78,149, 10,131, 32, 10, 90, 81, 28,165,105,170,164, 66, 55,254, 10,194,100, 74, 0, 0,221, 93, 93, 2,133, 82,154, 65, 9,
+102,227,223, 51, 53, 22, 82,158,226,172,131,206,136,237,202,158,139, 97,184,186,148, 38, 73,154,166, 7, 30,249,238,196,212, 14,
+227, 4,218,243,112, 42,164,152,249,129,111, 74,103, 84,125,199, 63,149,134,100, 25,199, 97, 24, 69,173,145,238,141, 43, 58,187,
+ 95,124,227,141,225, 7,206, 58, 0, 0, 9, 64, 73, 68, 65, 84,207,191,234,138, 63,251,139,191,126, 98,126,228,134,234,209, 18,
+134,218, 19, 28, 70, 64, 55, 64,106,152, 57, 0,128, 37,223,235,237,237,237,233,233, 53,211,183, 89,169,105,206,138, 76,211, 84,
+ 41,201,204,190, 96,165, 36, 8, 33, 52,101, 73,102, 86,148, 80, 54, 22,227,176, 17,123, 50,135,178, 49, 77, 75, 37, 11,199,139,
+164, 82,166, 73,204, 0,179, 51,103, 6,135, 87,121, 46,164, 50, 81,166, 5,139,159, 20,103, 56,156, 85,154,232,168,164,148,105,
+156,196,113, 18,135, 81,208, 96,134,145,241, 77, 74, 74,207,247,187,187,251, 94,247, 63, 94, 27,180, 26, 31,250,131,143, 55, 26,
+205, 39,134,121, 92,174,157, 28, 39,182,155,198, 80,225, 12,255,212,233, 11, 1, 88, 8, 32,242,124, 31,125,223,175, 86, 59, 50,
+106,232,194,236,153, 56,138, 53,177, 16, 30, 10, 47,111, 1, 25, 35,202,121,252,230, 4,156,118,126,183,155,137,176,252,221, 56,
+ 78,226, 40,142,162,145,177, 13, 23, 92,180, 7,128,211, 36, 78,146, 52,142,163, 64, 74,153, 74,231,137,149, 61, 26,198, 1, 79,
+133, 1, 6, 41,101, 42,147, 36, 77,227, 36, 14,147,176,149, 36,233,190,171,175,147, 82,122,158,103,152,127, 62, 64, 87,119,239,
+ 59,223,246,230,239, 62,244,208,223,253,253,255, 51,110,213,127,178,190, 61, 88, 45,160,229,119,182,143, 31,131, 59,160, 0,208,
+ 58,105, 68, 75,206, 7,167, 4, 68,132, 82,185,163,209,168, 75,165, 60,223, 55, 37, 18,184,227, 93,178,244,186,224,167, 85,166,
+159,194,236,136, 37,138,166,105,162, 82,249,223, 46,191, 98, 98,114,202,252, 82,168,146,231,107,207,243,124, 95, 32,235, 40,104,
+ 37,238,104, 41, 98, 50, 83, 7,214,135,105, 59,242, 33,211, 36, 77,227, 36, 10,146, 36,212, 10,118, 93,124,137, 57,226,192,228,
+ 34,204, 96,149,193,184,115,199,238,169,201,173, 95,249,151,111,124,223, 68,209, 4, 28,100, 52,179,124,150,243,135,192,100, 14,
+ 8,195,204,130,152,185,160, 29,195, 24, 1, 68, 70,196,158,190,129,165,197,133, 56,142, 49, 73,209,243,138,233,101, 86, 49, 56,
+228,199,156, 91,105, 14,154, 41, 44,185,148, 73,146, 40,153, 40,165, 46,124,206,115, 55,108,220,146,166,169,213,157, 97,208, 43,
+165,181, 37,153,197, 65, 99,245,250,209,205, 19,219, 58, 87,172, 32,230, 56, 10,131, 86,115, 97,126,246,216,145,195,103,207,156,
+ 52,132,238, 52, 9,210, 52, 97,246,183,237,220, 61,188,114,181,231, 9,223, 46,158, 1,115,136,205, 56, 3,251,136,213, 45,155,
+ 55, 31, 57,118,220,207,168,183,217,225, 11,206, 87, 96,118, 76,131,113, 68, 64,198, 82,204,214,202, 15, 39, 48,217, 29,160,225,
+ 71,187, 31,129, 1, 96,108,227,150, 51,167, 79, 46,204,206, 2,130,249,117,110,167,217,217, 55, 68, 76, 79,136, 91,198,107, 36,
+137,148, 50,137,163,233, 93, 23,140,140,111, 8,195,150,225, 63,154, 81, 32,123, 90, 97, 28,199,177,217, 57,105,217, 47,245,244,
+244,154, 72,101,124,187, 95,170,172, 90,189, 78, 43,117,228,224,126, 41,147,222,190,193,137,109,187, 6,135,134, 77,101,231,121,
+ 2, 13, 4,232, 26, 2,136,108, 52, 4,204, 38, 20,248,133,141, 69,232, 34,151, 25,104, 65, 4,115,219, 64,128, 0,140,100, 52,
+ 99,189, 53,177,181, 53, 59,178, 0, 69,155, 34,178, 58, 90,189,102,221,224,208,202, 51,167, 78,204,207,205,185, 97, 87,157, 87,
+241, 25,252,147, 71,176,108,192, 35,213, 74,166, 73, 50, 50,190,113,116,116,188, 81,171,153,141,105,189, 84,154,166,210,158,182,
+ 18,134, 65,179,209,104,214,107,196, 28, 70, 97, 18,199,230,232, 67,115,238, 73, 20, 71, 12,112,249, 85, 47, 28, 24, 90,105, 60,
+122, 97,216,213,226, 49,104,103,121, 80, 8,212, 44, 4,122, 44,216, 76,239, 22, 78, 38, 52, 53,138,217, 81,104,249,184,118,170,
+ 22,209,170, 9,201,176,224, 1,173, 5, 89,227,202,211,104, 2, 51,155, 7,185, 16,158,231,141,140,110, 24, 29,223, 40,165,156,
+ 57,123,122,126,246, 92, 20,199, 42, 77,117, 1,198, 55,150, 67,133,137, 80,163,190,222,190,129,177, 13,155,154,205, 70,134,105,
+ 91, 15, 85,160,213,151, 74,254,115, 47,221,187,102,221,186, 36,138,130, 48, 8,154,141, 56,138,194, 56,142,194, 40, 8, 90,245,
+218, 82,125,113,126,116,124,131, 64,212,136, 38, 25,206, 60, 96,145, 13,148,129, 57, 86, 85,136,174, 22, 3,199, 39,181, 30,199,
+ 53, 72,209,113,107,201, 88,142,161,188, 18, 34, 18, 25, 15,141, 76,224,182, 27,184, 60,128, 32,227,204,185, 20,193,236, 41, 33,
+196,218,117, 35,171, 86,175, 37,109,206,174, 34,115, 48, 83, 28, 69,113, 28, 75,153,154,132,171,163,163, 82,233,232, 40,151, 43,
+158,231,155,236, 73, 41, 57,123,110,166, 81,175,103,213,108,154,202, 36,142, 7,134,134, 94,112,221,245, 93,221,221, 74,107, 37,
+165,182, 3,189,101,130, 56, 14,131,115,103, 78, 37, 82,141,140,140,142,143,143,247,244,246,187,238, 47, 16, 35,100, 7,188,184,
+187,182,171, 92,128,144, 32, 83,144,241, 65,196,206, 44,236, 43, 86, 91,166,175,236,250, 93, 89, 24,178, 91, 42,203,165, 33,159,
+248,176,190,216,158, 91, 66, 86, 71,156,119,182, 64,120, 2,201, 23,101,246,201,175,148, 43,157, 93, 93, 14, 68, 2,215,144,110,
+ 35, 30,150, 74,165,117,235, 71,214,173, 31, 73,146,164,209,168, 55,235, 53,165,244,218,117,107, 87,174, 90, 35,132, 23,134,161,
+ 57, 76,201, 29, 86, 27,197,113,156, 74, 37, 60,255,178,231, 94,222, 63, 48, 84,175,215,102,206,156,210, 90,245,246, 13, 2,105,
+123,224, 77, 27,105, 60,203,140, 1, 51,186,122, 49, 15,114,100, 96, 75,198, 6,116,238,197, 29,107, 99, 67, 25, 18, 24,234, 50,
+218,222,133,243, 59,224,252,119,222,108,119,202,129, 12,157,198, 12, 57, 96, 70,129, 64, 54,243,102, 34, 70, 64,147,119, 34,230,
+115, 7, 54,104,228,236, 91,223,247, 7, 6, 6, 7, 6, 6, 75,165, 82,185, 82,105,212,235,230, 79, 76,154,234,142, 5,143,194,
+160,213,168,215,234, 75,139, 81, 24,122, 94,109,118,102,102,118,118,182,115, 69,117,106,219,234,102,179,213,168,215,149,214, 8,
+ 72,121,104, 42, 80, 43,156,203,118, 3, 9, 14, 14, 68, 32, 51,180, 1,228, 56,229,104, 41, 26,144,185, 25, 66, 35,177,157,156,
+ 2,180, 21,168,123, 98,148, 96,206,252, 49, 57, 81,198,118,183,102,230,190, 58,238, 42,102,104, 11,101, 84, 86, 51, 11, 81,168,
+245, 10,252,101,187, 38,105,154,104,173, 65,136,249,217,217, 36,137,178, 67,253,146, 36, 10,195,160, 81, 91, 82, 74, 93,127,243,
+ 79, 85,202,149,197,133,133, 40,106,237,218,125,193,218,245, 99,105,154, 18,163, 82,122,110,246,156, 82,178, 90, 93,145,121,208,
+204, 65,112,129,190, 95,220, 98,118, 43,100, 80, 60,103, 63, 58,164,199,109, 57,206,246, 90,230,146, 17, 41,203,158, 12, 33, 57,
+ 59, 80,213,106, 33, 75,160,193,157, 18,230,158, 59, 94,120, 1,173,205,231,162,138,108,121,112,149,161, 53, 72,210, 41, 0, 12,
+ 12, 14, 70, 97, 56,119,110,102,110,118,102,105, 97, 62, 12, 26, 68,180,117,122,215,214,233, 29, 81, 16, 46,206, 47, 52,234,181,
+179,103, 78, 35,138, 82,185, 34,149,138,163,168,213,108, 52,155,141,218,226,252,198, 45,147, 25, 13,218,221,118,190,197, 10,128,
+ 89,113,148,192,121, 17,231,167, 45, 3,127, 57,175, 28,178, 33,242, 12, 42,198, 39, 78, 36,128, 59,189, 41,119, 93,144,205,152,
+112,222,214,167,172, 45,194, 57,232,214,246, 23, 79, 0,115,243, 87,168,163,218,177,126,108,108,221,232, 40,216,249, 8, 66,196,
+ 70,189,126,230,244,201,249,217,115,181,165,249,169,233, 93,187, 47,188,216,243,132,249,167, 5,230,103,207, 29,124,244,123, 27,
+ 55, 79,186,251,201, 8, 41,121, 37,180,172, 22,115,242,145, 1,155, 25,237, 52,148,245, 48,198,129, 48, 0,130,113,205,228,234,
+ 68,123,106,134,233, 83,161,157, 99,194,162,146,140, 26,201,213,187,152,245,203,204,188, 28, 20, 38, 81,156,199,167,220,219,183,
+209,196,115, 88,186,125, 22,160,205,137,178,157, 97,168, 86, 87,108,216,180,101,211,230,137,145,177, 13, 29,149, 10, 49, 40, 37,
+117,146,150, 74,229, 85,171,215,148, 74,126,119, 79,159,251,252,130, 62,218,248, 77,237, 91,172,109,205,172, 55, 33,114, 69, 87,
+110,241,100, 53,146,213, 85,133,164, 11,218,166, 33,160, 48, 6, 98,247, 17,113, 14, 62, 82,214, 12,113, 86, 5,109, 83,126,206,
+180,219, 59, 3,109, 70,152,143,154,112, 62, 71, 6,133,115,225, 0, 69, 24,134,205, 70, 61, 3, 27,130, 86,171, 86,175, 45, 44,
+204,151, 43, 29,229, 74,199, 19, 40,247,185, 68,109,152,180, 61, 81,173, 72,242,202,176,242,162,249, 67,230, 92,218,125,103,161,
+229,144,137,159, 77,183, 33,187,193,174,236,207,178, 17, 21,204, 90, 62,249, 13, 22,118,110,251,230, 2,104, 27,240, 41,236,186,
+101, 93,221,108, 69,148,146,115,231,102,152,121,105,113, 33, 12,131, 36, 78, 90,205,250,236,185,211,131,131, 43, 43, 29, 29,133,
+107, 64,225,150,218,116, 84, 60,227,219,185,158,226, 68,196,114,243,103,123,140, 95,225,130,136, 46, 11, 71, 4, 87,114,216,253,
+106,175,233, 90,244, 5,215, 13,238, 68, 64, 42,220, 33, 96,225, 88, 55, 40,206,122,180, 53,254,219,242,116,230,246, 78, 65,118,
+ 32,162,125,193,252,139, 10,155, 38, 38,251,251, 7,194, 48, 60,254,248,145,129,193,193,129,225, 85,224,230,222,184,253, 52, 32,
+200, 52,196,208,150, 73, 23,124,159, 65,254, 48,223,255,136,121,255,130,184, 77,167,110,212, 44, 63,100,208,165, 0,246,192, 26,
+116, 25, 22, 20,156, 97,123,171, 49,183, 91,130,246,125,199,197,136,198,197,121, 46,224, 39,106,135,139,174, 40, 63, 95,136,137,
+120,126,110,246,220,217,179, 65,171, 9,166,224, 82, 74, 20, 28, 34, 44, 87,112,254, 17, 62, 20,224,171,194, 70,207,162, 48, 47,
+ 27, 5,202,120,207, 8, 80,140, 44, 46,169,228, 98,218, 84,152,139, 5, 42, 72,142,128,150, 44, 12,109, 33,105,249,184,142,203,
+ 85,157,229,180,109, 53,104,211, 68,150,142,112,251, 49,144,246,147, 85, 42, 81,224,170, 53,107,130, 86,112,234,248,209,114,185,
+210, 81,237, 44,208,115, 96, 25,173, 50, 91, 51,127,249,252, 6, 60,233, 11,110,106,221,121, 41,155, 4, 50,100, 19,238,214,205,
+160, 69,244, 41, 67,182, 93, 6,144,229,233,150, 28,204,152, 21, 47, 5, 47,189, 76, 7, 80,172, 62,242,153,185,229,219, 43, 91,
+200,124,107, 44, 31,243, 2, 32,173,107, 75, 75,164,105,124,211, 68,158, 65, 0,180,157, 56,153, 7,163, 2,145,188,205,146,255,
+ 51, 78,245,192, 19,255, 73,146,204, 62,254, 63,235,161, 95,175,171,129, 25,182, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+ 0};
+
diff --git a/source/blender/editors/datafiles/blur.png.c b/source/blender/editors/datafiles/blur.png.c
new file mode 100644
index 00000000000..d737bea4ae3
--- /dev/null
+++ b/source/blender/editors/datafiles/blur.png.c
@@ -0,0 +1,298 @@
+/* DataToC output of file <blur_png> */
+
+int datatoc_blur_png_size= 9327;
+char datatoc_blur_png[]= {
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68,
+ 82, 0, 0, 0, 96, 0, 0, 0, 96, 8, 2, 0, 0, 1, 26,253,208,249, 0, 0, 0, 4,103, 65, 77, 65, 0, 0,177,143, 11,252,
+ 97, 5, 0, 0, 0, 6, 98, 75, 71, 68, 0, 0, 0, 0, 0, 0,249, 67,187,127, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 13,215,
+ 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 0, 7,116, 73, 77, 69, 7,218, 7, 21, 0, 4, 16,211, 77, 59, 52, 0, 0, 32, 0,
+ 73, 68, 65, 84,120,218,237,125, 89,172,109,217, 85,221, 24,115,173,125,206,185,205,171,215, 84,231,178, 41,155,234,136,171, 30,
+ 54,174,206,101, 19, 18, 59,177,171,140, 76,172, 96,132,137, 2, 31, 65, 10,157,146,208,217,198, 54, 54, 16, 41,182, 48,144, 31,
+ 48, 31,129, 8, 16, 40,226, 35, 16,164,240,199, 87, 76,147, 16, 97, 3, 70, 33, 64,117, 70,118,217, 46, 85,149,171,185,239,246,
+231,236,189,230,204,199,156,107,237,125,238,189, 85,101, 7, 19, 5,169,206,123,186,205,121,231,236,179,246, 92,179, 29,115,204,
+245,128, 47,247,241,178, 27,110,184,233,166,155, 79, 63, 79, 0,239,255,192, 7, 75, 25, 8,136, 8, 69,114,206, 93,206,185,235,
+ 62,244,193, 31,245, 23,165, 31,248,193, 31,234,251, 85, 41,131,170, 22, 85,213, 98,254, 80,125,235, 91,239,127,240,161, 7,247,
+247,246,100,181, 90,246,171, 85,191,234,251,161, 31,250,126,181, 92,245,125,111,106,170,101,181, 90,125,223,247,126, 95,215,117,
+124,215, 63,255,206,255,253,232,225,222, 81, 33,229,214,175,218,120,217, 53,139, 11, 87,205,183, 55, 55, 82, 74, 36, 41, 50,235,
+186,244,220,240,202,101, 95,204,204,212, 72,187,178,215,155, 33, 39,146,166, 58,248, 39,167,173, 75,183, 18,128, 1,134,156, 96,
+102, 71,199,101,213,151,237,141, 68,129,193,104, 72,219,151,110, 53, 51,127,213, 44, 67, 13,123,135,195,147,207,246, 7,135,229,
+218,139, 29, 9, 0,105,235,194, 45,100,188,168,203, 60, 90,150,161, 87,144,251, 7,229,209,207, 31, 13, 5,215, 92,232,120,237,
+205,111, 33, 18, 4, 52,154, 8, 65, 18, 68, 98, 74,164,144, 2,201,217,212,140, 5,133, 34,132,194, 8, 64, 0,133, 1,128,145,
+ 9,250, 37,109, 87,106, 63,109,108,108,222,120,227,141, 34, 60, 58, 58, 58,185,119,119,221,117,215, 91,222,122,191,153, 9, 73,
+145,148,146,111,220,239,252,206,239,252,143,255,254, 7,241,162, 31,248,129, 31, 52, 24, 65, 17,161, 48, 73,202,254,232,186,156,
+243,143,125,232,131, 0,100, 85, 55,174, 31,250,213,114,181,234, 87,165, 20, 83,235,251,213,106,181,252,240,135, 63, 2,128,111,
+126,219,119, 60,250,249, 99,146,243, 89,190,227,230,205,107, 46,204,175,218,222, 88, 44,230, 36, 1,228,156,231,139, 69, 90,230,
+155, 0,168,154, 16,203, 85,217, 59, 44,179, 76, 18,106, 5, 48,168,169, 89,218,186,230, 54,154, 2, 72,201, 4, 90,212, 14,143,
+134,156,177,232, 8,139, 63,105,235,210,173, 52, 0, 72, 68,162,153,225,169,157,254,137, 47, 46, 47,158,239,230, 51,186, 72,211,
+214,165,155, 1, 51, 0,180,156,184,123, 56,152,161,168,125,254,137,213,231,159, 90, 94,127,105,214,117,228,181, 55,189,149, 34,
+160, 16, 48, 80, 72, 8,193, 68, 36, 74, 74,146, 32, 57, 43, 84,204,104, 48, 0, 66, 83, 18,164, 8, 80,226,109,166,248, 74, 61,
+ 56,253,229,135,126,248,221, 91,155, 91,190, 73,254,135, 66,161, 72, 18,146, 73,210,199, 62,246,179, 79, 62,249,228,217, 23,122,
+239,143,188,175,104,129, 1,106,126, 89,162,222,162, 16,160, 36,138, 8, 41, 41, 37, 33, 83, 74, 34, 41,231,252,129, 15,188,111,
+237, 66,255,234, 95,255, 27,192,239, 30, 0, 56,121,128, 32, 41, 34, 34,146, 36,165,148,124,121,238, 50, 68, 36,229,252,107,191,
+246,171,143, 60,252, 48,128,220,175, 86, 0,212,108,185,178,189,195, 65,141, 91, 27,233,194,118, 30, 10,134,130, 46, 75,151, 83,
+215, 37,100,144,204,146, 76,213, 12,165, 20, 10,101, 24,190,253,219,191, 35,165,244, 19, 63,254, 99,252,234,215,126, 75, 81, 43,
+197,111,138, 0, 32, 92,116,114,254, 92, 78, 73,206,109,164,139, 87,117,219, 91,179,141, 69, 55,235,114,215,165, 36, 52, 3,233,
+139,151,228, 75,235,114,218, 56,127,155,170,186,158,208, 20,132,169,145, 16, 90, 25,236,120, 85,118, 15,135,189,253,254,232,120,
+232,251,162,165, 20, 45,106,170,170, 48, 51,109,174,206,210,246,213,183, 2, 10,133, 65, 73,194,212,128,148, 84,104,106,166, 69,
+139, 90, 41,122,112, 92,174,236,245,203, 85,217,152,145, 48,162, 93,196,212,212,204,120,253,173,111,131, 9, 4, 6,250, 23, 51,
+235,114,154,207, 8, 64,200,227,222,134, 66,128, 20, 18, 36,185,177,200,175,124,217,226, 85, 55,108,204,187,148,179,248,118,240,
+218, 91,238, 7, 72,208,252, 27, 5, 48,128, 27,243, 52, 12, 54,168,185,223, 17,208, 32, 20,129,133,112, 92,160,164,108,111,230,
+ 75, 23,230, 89,181,248, 62, 3, 0,196,180,248,234, 14,143, 53,180,138,164,153,145, 32, 80, 12, 34, 0, 76,139, 43,155, 26,246,
+143,134,131, 99,205,102,234,154, 12, 10, 66,216, 20,154,251,106, 24, 77, 40, 6,136, 59, 70,129, 21, 64, 8, 49, 40,140,164,153,
+194,196,240,255,221,131,103, 62,123,241,226,197, 11, 23, 46, 2, 88, 46,143,119,118,118, 14, 15, 15,191,140, 11,221,122,219,109,
+239,122,215,183,185, 3,101,253,230,166, 47, 34, 41,165,157,157, 43,255,254,103,126,234,133, 46,244,129, 31,253,160, 22, 53, 51,
+183, 93, 2, 20,169, 54, 32,213,104, 69, 82, 74,146,114,151,223,255,190, 31, 57,227, 66,239,126,207,123,171,231, 13,149, 33, 41,
+ 97,252, 32, 19,133, 41,133, 27, 73,226, 75, 76,143,125,238,177, 95,252,133,255, 48,189,144, 12,195,208, 15,253, 48, 12, 67, 25,
+134, 50,104, 25,180, 12,165,148, 50,184, 93, 13, 90, 74, 25,138,150, 82,134, 97, 40,131,127,189,241,198, 27,127,234,167,127,230,
+228,133, 74,252,245, 55,251, 99, 24,191,123, 42,226,182, 85,180,104, 41,195, 48,244,125,191, 90,253,228, 71, 71,145,137,150,162,
+237,225, 6,168,102,234, 43,136,171,169, 42,253,230, 9, 40,212,124,149,195, 48, 12, 31,253,232, 79, 71, 76,190,243,206,187, 12,
+182, 92,150,103,118, 86, 87,246,203, 48, 20, 17,154,233,170,215,126, 80,115,203,138, 52, 70, 72,152, 33,182,165,254,240,154,215,
+188,230, 19,127,244, 71,121,103,127,245,200, 99,199,207,236,244,230,219, 14,118,157, 92,115,190,187,106, 59,111, 45,210,246,150,
+ 45,212, 64, 10,147,168,186,233,121,158,163, 84, 0, 24,134,107,174,190,134, 96, 58,148,155,247, 14, 7, 53, 79, 47,212,204, 84,
+ 49,159, 97,217,235,225, 81,233, 7, 75,130, 36,148,106,215,161, 40,102,102,163,125,221,255,192, 3,105,227,226,215, 64,253, 41,
+ 95, 19,132, 86, 10, 68,160,102,171, 65,151,189, 37, 50, 73,168,174,154,170,105,104,140,191,137, 52,179,116,238,234,191, 7,142,
+ 23,114,103,150, 19, 69, 92,175, 76, 13,253, 96, 66, 72,114,135, 21,110, 97,124,135, 25,192,172, 86,226,190,141, 16, 83, 99, 6,
+ 13, 40, 69,204, 10, 76, 0, 28,152,145, 16, 65,151,145, 40,144,100, 70, 49, 51, 90,232, 49,134, 76,255, 96, 16, 52, 24,104, 48,
+113,191,174, 80, 0,102, 4, 11,175,236,245,170,182, 49, 39, 23, 57, 39, 72, 18, 83, 73, 98,234, 59, 0,164,173,171,111, 53, 51,
+ 16,109, 81, 66,186,116, 61,197,236, 7, 61, 56, 42,123,135,195,206,222,112,112, 84, 54,230,146,147,199, 96,120, 42,136,200, 55,
+ 47,222,194, 42, 72,130,177, 56, 34, 37, 2, 86, 20,203,190,148, 33,196,114,116,172, 95,188,210,175,122,237,178,228, 92,223, 71,
+ 95,209,165, 91, 12,132, 85,175,237, 27, 39, 32, 13,138,163, 85, 81, 37, 0,250,178,193,161,232,149,221,242,228,206,176,179, 55,
+172, 6, 91,204, 36, 39,130,228,117, 55, 63, 0, 26, 32, 32,219,194,114,146,156, 88, 10, 6,141, 24, 2, 8, 1, 80, 40, 2,128,
+ 16,247, 19, 41,165,237,205,124,233,252, 44, 27, 20, 0,161, 48, 81,143, 39,134,126,176,190,104,220, 37,197,220,201,131,180, 48,
+ 26,131,210, 4,128,170,238,238,151,253,195,227, 12,243, 12, 30,100,196, 31,191, 21,154,191, 23, 30, 35,204, 0, 65, 40,159, 17,
+ 52, 19, 19, 55, 23, 49, 5,196,160,190,237, 85,231,141, 6,170,193, 84, 9, 51,143,206, 10,152,153,194, 76, 97,160, 2,160,194,
+180,198,107,131,152,185,250,170,193, 96,170, 10,131,186,174,211,212, 63,160, 46,163, 46, 94,107,129, 66,144, 32,214,236,238,165,
+199,151, 21,103,219,227,230,155,111,185,227,142, 59,110,186,229,150, 75, 23, 47,142,207, 70,230, 7,122,242, 28,223,100,103,103,
+231,225,135, 31,250,243, 63,255, 95,159,254,244,167,191, 50, 11,218,222,222,126,215,187,190,237,134, 27, 94,174,170, 54, 38,204,
+214,114,212,154,197, 3, 99, 92, 31, 31, 50,254, 36, 66, 1,145,187,238,191,252,198,111,252,241, 31,127,242, 75, 87, 14,190,227,
+ 29,239,184,227,142,203,170, 99,136,137, 42,104,125,201,244,220,177, 45,165,254,176,190, 36, 47, 56,198,101,213,133,138,136, 12,
+101,248,143,191,248, 11,159,251,220,231, 94,100, 65, 63,244,195,239, 65,141,117, 39,150,210, 60,211,228,207,218,106,176, 86,102,
+212,181, 96, 92,202, 9,225,137, 36,146, 41,167,127,251, 19, 63,126,124,124,124,118, 1,125,239,189,247, 70,106, 96, 58,166,223,
+147,224,103,167,255, 76,130, 53,108, 44,133,154, 9,215, 40,229,183,232,111,168,105, 61, 76, 85,223,244,166, 55, 63,240,192,219,
+ 62,243,153,207, 60,251,236,179, 39, 23,116,247, 61,247,152,122,220, 60,177,150,168, 49,208, 46,136,246,172,191, 88, 79,188,126,
+ 42, 56,131, 49, 10, 71, 83, 3, 98, 57,227,171,213,244,117,119,222,249,192, 3,111,123,244,145, 71,174, 92,185,210, 22,148,203,
+ 48, 76,172, 39,182,108, 24, 60, 92, 69, 0, 0,145,133,146,188, 90,247,251, 31,119,204, 49,155, 4, 81, 2,132, 64,162,136,133,
+227, 47, 6, 90, 1,104,132,182, 93, 86, 85,138,136,169,126,215,119,127,207,172,155,189,255,253,145,143,166,215,126,221,157,170,
+214, 15,186, 26,116,181,210,131,165, 30, 29,149,231,118,251,189,195, 97,119,127,216, 59, 44,203,149, 30, 29,171, 22, 27, 6, 91,
+245,186, 26,116,213,219, 48,104, 95,148,128,106,168, 94,172,159,145, 81,143, 70,224, 59, 25,126, 25, 85, 95,167,251,104, 69,203,
+ 91,223,114,255,227,143, 63,254,244,211, 79,243,157,223,250, 47, 12,246,244,206,176,187, 63, 28,247,186,127, 88, 92,234,190, 3,
+ 38,160, 17,176,148, 36, 37, 92, 58,223,109,205, 83, 78,220, 92, 8,133,155,139, 36,228,124,150, 68, 56,235,146,136,228,156,146,
+ 80, 82,170, 90, 93,237, 98,221,110, 99,217,174,236,226,133,108, 34,249,123,191,247,113,222,112,251, 63, 13, 32,169, 69,105,131,
+213,223,253,171,153,167, 0,220,152,203,246, 70, 54, 56, 58,196,237, 69, 34,121,225, 92, 78, 89, 54,231, 57, 37,233,114,172, 41,
+101, 17, 74,196,244,137, 93, 78,188, 89, 43, 67,125, 73,226, 95,115,152, 9, 43,248, 96, 58,145,181, 53,117, 17, 82, 4, 69,181,
+ 31, 6, 24, 40, 66,226,202,160, 20, 30,173,138, 16,231,183,187, 89,151, 54,230,105, 54,147,156,210,172, 19,146,174,127, 81,203,
+120,190, 65,105, 18,178,234, 20,172, 22,166, 52,203, 8, 69,101, 20,196, 6, 19,181,106,186,162,102,108, 70,109, 52,233,135, 66,
+ 10,173, 0, 72, 34, 30,244, 1,246,195,138,228,214, 34, 45, 22,121,158,185,185,153, 19,185,177, 72, 36,187, 46,196, 0, 64, 21,
+ 20, 24,163, 98,138, 84,155,160,131,114,102,185,102, 29, 0, 97,230,168, 1, 1,165,167, 34, 36,224, 94,156, 80,154,168,170,208,
+ 10,197,179,148, 34,160,138,187, 43, 33,184, 91,116,239,112,200,137, 87, 45,243,124, 38, 91,155, 11,161,152, 26,200, 18, 91,101,
+ 52,120,193, 47, 16,149, 2, 23, 17, 64,163,208,178,122,122,236, 58,102, 0, 20,254, 46,194,160, 4,105,244,100,136, 98,166, 98,
+ 84, 53,136,194,168, 28,104,108,119,168,171, 1, 7,135,234, 73,220, 23,190,200, 46,203, 19, 79,175,186,196, 87,189, 98, 35, 39,
+110, 45,114, 18,183, 18, 33, 11, 40, 64, 9,171, 17,178, 24, 73, 19,102,247, 19, 48,255, 70,170,175, 22,145, 52, 91,100, 83,142,
+112,169,105,162,136, 65, 1, 49, 19,129, 25,246, 15, 11,140, 69, 35,205, 37,221,202,101,213,151, 39,159, 81,144,207,238,245, 66,
+190,236,234,121,215,241,154, 11,179,141, 69, 74, 34, 93, 54,165, 16, 5, 32, 75,213,112,149,108, 40,142,115,208,106, 14,107, 10,
+ 95,156,129, 84,144, 48,170,154, 99, 27,165, 20, 26, 33, 44,134,163,101, 1, 88,138, 25,104,117,179, 61,123, 36,139, 65, 84,141,
+196,193,145, 2, 60, 94, 41, 5,143,127,113,149, 51, 55, 23,249,220,102, 90,204,210,213, 23,186, 36,156,207, 18, 43,160,147, 61,
+127,245, 93,138,123,244,228, 83, 66,145, 35,243, 84,128,166,106, 40,208, 40,246, 56,148,186,225, 82, 43, 31, 10,204,179,105, 49,
+ 83, 2,102,162, 69, 77,168, 43, 16,232,251,158,228,222,254,240,116,150,156,248,216, 83, 41,145, 27,243, 36, 34,219, 27, 73,146,
+ 56,206,109, 4,169, 36, 21, 74,139, 44,158, 4, 77,205,133, 20, 73, 54,116,105, 94, 52,194,140,158,149,123, 54, 12, 51, 19,143,
+ 14, 48,136,169, 74, 20, 55,234,185, 59,160, 6, 20, 21,154,150, 34, 88, 41, 64, 28, 20, 1,186, 46,145, 92,204, 83, 18,201,128,
+214, 8, 72, 51,186, 45,121, 25,100,172, 5,137,121,142,168,170, 44,138,138, 21,122,188,160,235, 83, 72,211,104, 98, 2,163,193,
+132, 94, 75, 80,196, 91, 9,164, 4,126, 8,139,218, 75,161,130,213,170, 80,100,213, 27,192, 92,245,217,241, 50,215, 28,173, 57,
+ 42,232, 26,239,138, 26, 93, 12, 40,107,145,232, 91,237,118, 97, 38,181,106,209,184, 73, 35, 68,163,234, 16, 2,170, 74, 97, 69,
+216, 4, 6,191,186, 87, 69, 4, 76,144,225,176,156,208,160, 6,161, 42, 71, 39,111, 26, 32, 98, 56,211, 8,242,158,234,132,222,
+ 3,161,238,225,142, 56, 6,250,240, 58,238,225,162, 56, 53, 70, 94, 2, 53,146, 16,152, 25,148, 16, 19, 47,211, 92, 47,155, 82,
+ 48,242, 30, 47,166,217, 50, 52, 53, 53, 56,102, 99,158,137,121,144, 51,131,169, 17, 48,245,152,110,245, 31,105, 80, 83, 16, 80,
+ 76,162,107, 5, 44,234, 30, 71,214,195,150, 83,189,244,120,233,241,183, 90,185,142,185,119,151, 55, 55, 54,103,179,217, 98,177,
+209,117, 29, 34,245,238,143,143,151,203,229,241,193,193, 65,241,174,199,223,234,130,186,174,123,221,235,238,124,245,237,183,191,
+234,149,175, 74,185,118, 28,141,144,176, 51, 47, 1, 61,221, 51,179,191,254,235,191,254,171,191,252,139, 63,249,147, 63, 89,173,
+ 86, 95,225, 5,125,211, 63,121,199,229,203,151,187,220, 53, 24,144,147,166,207,137,202,177, 85,248, 0,188, 21,181, 90,173, 62,
+245,167,127,250,219,191,253, 95,255, 70, 11,202, 57, 95,190,124,249,237,111,255, 38,107,185,107, 67, 38, 39, 37,253,180,194, 95,
+ 47, 78,215, 75,123, 82, 68,118,119,119, 63,246,115, 63,123,112,112,240,229, 45,232,210,165, 75,111,127,251,219, 95,254,242,175,
+114,204,104,146, 77, 79, 94, 52, 77,250, 39, 95,159,119, 77,158,157, 2, 41,167,167,158,124,242,215,126,245, 87, 79, 23,169,103,
+ 47,232,251,191,255,251, 55, 54,182, 70,188,119,189,194, 31, 43, 6,182, 13,155, 74, 41, 74, 29,207,249,167, 85,189,112,186,153,
+ 76, 41, 61,252,208,195,191,242, 43,191,244,226,205,241,127,240, 15,223,164, 69, 13, 86,172,180,170,185,198,132, 86,223,123,110,
+235,145, 36,126,137, 16, 91,235, 62,182,236,105, 44,243,189,252,141,128,112,245,213, 87,191,237, 27,191,241, 15,255,231, 31,246,
+ 47,168,242,233,190,251,222, 96,222,198, 60, 3,107,136,176, 86, 69, 54, 65, 26, 70, 52, 97,130,151,159,126,212, 58, 42, 46,163,
+250,230, 55,253,163,220,117,143, 62,250,200,243, 46,232,245,247,221,183,254,193,147,191,102,167,236,208, 78,255, 24, 88,105, 5,
+243, 57,130, 92,152, 24, 69, 21,173,225,166,175,190,233,213,183,223,254,201, 79,124,226,204, 5,137,169, 70, 12, 87, 13,132,162,
+253,197,243,128, 52, 58, 62,169, 35, 24, 82,119, 25,173, 45, 91, 1,143,250, 17,170,170, 90,138,150, 87,188,252, 21, 31,249,200,
+ 79,158,189,160,232, 9, 77,123, 67,235, 15,255,248,120,213,248,228,248,175,241,161, 21,209,169,242,165, 55, 57, 92, 19,218,213,
+ 74,124, 45, 32,254,221,135, 63,114,150,132,218, 37, 95,224,161, 1,233,180,223, 99, 73, 54, 89, 84,160,146,166, 14, 79, 51,202,
+167,218,237,208,138, 66,169,150,226,226, 19,145, 15,252,232, 7, 79,111,217,243,172,103, 2,151,181,175,254,123,169,210, 80,191,
+242,120, 5,173, 29,152, 9,200, 1,194, 17,204, 41,144, 86,111,228,220,246,185,127,249, 93,223,189,166,212,119,221,117,247,218,
+235, 96,125,111,195, 96, 67,209, 97,176,226,155,160,234,233,103,232, 69,212,132,102, 54,105,147, 87, 44, 67,214, 24, 14,158,222,
+ 6, 36, 83,193,139,168, 82,188,152,185,116,241,210,238,238,238,227,143, 63, 30, 1, 99,226,147,173, 31,204,128,131, 67, 29,130,
+ 56,192,156, 48,159,167, 44,220,222,132, 25,134, 2,192,123, 41,154, 50,133, 34,166,217,196,196, 32, 6,122, 50,172, 41,156, 17,
+ 35,137,175, 25,110, 88, 95, 75,219, 75, 17, 17, 21,188,243, 91,190,229, 47,255,242, 47,188,235,156,190,238,117,119,170,217,114,
+208,161,183,163,149,246,254,117,101,253, 96,195,128, 98,102,198, 82,204,140,253, 96, 69,173,245,141, 61,110, 84,118, 0,166, 96,
+ 79,236,148, 4,172, 54,129,188, 79,248, 12,247,249, 80,179,215,191,254,190, 63,248,253,223, 7,144,247,143,134, 97,176,207, 62,
+177, 84,197,206,110, 63,232, 36,122,213,184, 33, 68, 78,210,101,190,236,234,153, 16, 27,139,156,147,205,103,185,203,150, 18,186,
+ 12, 17, 2, 16, 35,147, 17, 38, 48, 21, 21,101, 32,125,228,186, 15,173, 24,164,168, 66, 76, 53,137,204,231,243,123,239,125,253,
+ 39, 63,249, 9,233,123,237, 7, 45,197, 74, 41,165,185, 20, 53,115, 3,181,106, 22,102, 69,181,168, 14,197, 84,181,168, 21,119,
+ 41, 5,163, 95,138,151,187,209, 5, 47,110,106,243,167,252, 72,152,107, 81, 53,181,111,126,231, 59, 73,166,227,124,203,147,207,
+174, 14,142,202,209, 82, 85,199,232, 25,213,147,177,221,218,162, 75, 6,172, 6, 59, 90,150,195, 35, 93,246,122,188,210, 97,240,
+ 34, 31, 66, 20, 5, 73, 53,215,218,232,172,142, 94, 99, 68,111, 79,236, 88,221, 89,181,171,206, 95,149, 54, 46,125, 77,209,105,
+178, 17, 5, 82, 0,123,244, 21, 17, 98,195, 96,139, 78, 90, 13, 41,194, 68,138,112,214,145, 64, 78, 2, 48, 9, 39,248,221, 90,
+188,107, 79,156,204, 11, 39, 61,130, 27,111,124,101, 58,119,205,171, 81,149,180,226,186, 70, 72, 13, 71,230,215,207, 66, 33, 82,
+ 10,109, 80, 99, 81,237, 7,237,123, 59, 94,233,241, 74, 73,172, 6, 75,130,161,152,227,208,240,230,160, 69,143,207,106, 67,135,
+173,201,203,218,203,142, 90,153, 32,178, 99, 6, 54,130,122,254,175,158, 79,104,244, 91,225, 75,100,120, 71,133,147,102, 10, 65,
+ 88, 79, 5, 48, 12, 42,130,161,168, 8, 75, 81,113, 36, 5, 53,145,106, 88,186, 83,142,124,115, 85,125, 23,160, 80, 17, 66,169,
+204,117,103,213,161,140,128, 17, 76, 39,105,180, 47, 43, 90,144, 37,250,231,116, 26,211, 0,218, 32,170,101,103,207, 59,252, 38,
+ 34,102,160,112,209,137, 8,147,144, 14,189,122,187,181,161, 38, 19, 15, 64, 49, 83,245, 6,109,118, 50, 26,171,136, 28,201,208,
+144,161, 81,131, 99, 64, 9,105,105,189, 1,133, 84,244,216,243,205, 65, 68,230, 75,138,216, 44, 51,101, 22,129,153,144, 72,222,
+ 0,166,176,234,182, 68, 47,184,149,251, 22, 42, 98,150,182,175,190, 45, 80,133,216, 42,135, 94, 67, 80, 70, 58,170,147, 4, 32,
+ 82,244,236, 91,163,189, 53, 92,198, 39, 85,145, 19,213,208,101, 38, 25, 27,240,147,132, 13,103,122, 73,127,105,118,233,195, 96,
+212, 80, 51,142,249,170,139,206, 27,209, 14,141, 58,160,236, 86,234,168,160,131,201, 25, 84,227,254, 97,168, 96,151,211,214, 34,
+128,243,113, 41, 22, 52, 3,227,201, 44, 51, 58, 89,102,217, 91,237,177,188, 64,151, 28, 14, 2, 2, 24, 14, 24,202, 33, 40, 11,
+193,177, 90, 65,160,105, 6, 74,237,197, 44,251, 82,212, 14,142,196, 12, 93,150,156,132,130,148, 4,193,194, 88, 91, 71,213,171,
+120,115,118,109,114, 79,230,242, 8,136, 26,234, 33,187,146, 94,252,157,166,161,146, 1,205,165, 68, 85,205, 73, 74, 41, 7, 43,
+ 28, 30,171, 8,113,133, 0,118,246,134, 89, 39,215, 94,154, 93,125, 85,151,179,108, 44, 60,136, 48, 66,171, 19, 33, 96,161,204,
+ 30,125, 84,115, 80,104,204,129, 55, 54, 40,143, 81, 90,232, 88,246,180,234, 34,136,130,230, 23, 45, 5,203,126,136, 22, 27, 90,
+102,129, 65, 45, 21,237,123, 93, 13,106,134,156, 16,221, 15, 4, 39,195, 73, 42,209,232,169, 4,173,180,125,233, 54, 4,180, 31,
+ 20, 20,178,230,236,140,133, 1,230, 40,113, 74, 16, 9, 71, 65,154, 8,251, 65,151,189,149, 98,131, 66, 53, 20,196,227,253,114,
+101,135, 75,221, 61, 40, 79,239,244, 59,251,195, 48,216,225,177, 46,230, 73,213,146, 96,236, 16,182, 18, 29, 32,144, 39,138,239,
+200,155,192, 17,186,168,157,171, 67, 82, 66,204, 20, 90,235, 11, 18,125,241,212,209,115, 84, 58,218, 74, 42, 76,212, 20, 34, 84,
+150,162, 61,217, 13, 58, 12, 70,154,170, 25, 89,212,132, 69, 36,153, 55, 86, 28,228,134,128,204,149,137,232,253, 21, 97,164,195,
+ 48, 37, 39,118,167, 86,168,110,114, 69, 32, 32, 86, 43,167,128, 82,205, 70, 32, 90, 2,105, 39, 67,241,134,130,162,195,170,151,
+131,227,146, 40, 79, 62,179, 18,225,165,243, 93, 22,185,246,226,108, 54,147, 46, 51,103,168,139,222, 44,135, 10,153, 43,112,227,
+118, 25,221, 67,107,224,194, 38, 81,155, 6,101,217, 51,148, 2,163,154, 17, 84,223,222, 80, 57,103,158, 72, 88,161,129, 84, 93,
+169, 48, 21,208,146,200,214, 70, 26,146, 21, 85, 45,176,148, 44, 90, 41,162,102, 25,222, 72, 96,253, 6, 32, 66, 76, 56, 34, 5,
+105, 6,133, 2,170, 20,232, 96,132, 97, 40,102, 48, 43, 98, 52, 49,130,198,160,228, 68, 91, 84, 43, 84,236, 54, 32,166, 86,228,
+120,165, 2,123,242,153, 21,137,231,118,123, 73,178,152,165,156, 56,239,210, 98,158, 40,146,107, 55, 83,233, 46,135, 17, 93, 61,
+162,132,117,209,252,234, 6, 43,198, 82, 52,186, 68, 90,101,211, 8, 25, 10,136,186, 61,187,215,142,116, 95, 77,133, 2,213,129,
+ 42,214, 31,129,196,225,145, 26,177,152,167, 44,220, 88,228,173, 13, 35,153, 91, 27, 51,114, 1,139,182, 98, 36, 53,170,173,211,
+108,102, 67, 81,127, 14,140,254, 80,203,184, 42, 42, 79, 95, 83,116,186, 68,106, 9, 77,170, 41,163,163,239, 32,188,247, 80,134,
+193, 76,160,203, 82, 20,160,228, 17, 26,111,221,104,173, 96, 61,107,243,171,126,110, 95,154,159,143, 22,150,184, 51, 65,165, 14,
+ 88,229,167,209, 59, 67,198, 86,217, 67,162,177, 58,246,152, 13,100, 63,232, 64,193,160, 71, 71,230,132, 46, 68, 67,211, 57, 81,
+ 21,190, 15,127, 29, 54, 51,102,147, 52,243,108,192, 27,110,206,230,106, 81,170,118, 59,170, 57, 55,196,223,165, 66,255, 55,183,
+116, 27,229, 80,163, 58,188, 64,168,159,166,222,239, 8,118, 60, 21,163, 71, 80,133, 42, 42, 83,144,244,202, 26,209, 55,176,214,
+ 45, 0, 44, 58, 47, 33,194,241, 29,209, 78, 54,163,213, 46, 91,253,103,167,151,209, 96, 6,113, 69,128, 53, 89, 27,148,141, 73,
+226,140, 83,140, 49, 5, 48,213,192, 96,205,181, 9, 99,147,212,170,143, 15,223,197, 42,142,136, 18,214, 42,199,104,164, 90,237,
+248,214,254, 18,133, 33, 0,215, 85,196,213,181, 78,170, 68,169,174,222,113,173,139,171,140, 9, 34,184,162,222,140,140, 98,193,
+223,108,225,239, 45, 74,233,232,203,120, 60, 26,203, 16, 79, 31,226, 26, 74,173,145, 9,166, 53,192, 89, 37,253, 5, 45,175,133,
+153,218, 28,142,178,216, 24, 12,189, 80, 47, 13, 33, 52, 25,185,128,221,141, 57, 12,224, 77,210, 9,144,193, 88,154, 90,109,199,
+ 5, 93, 53,196,235,201,128,182, 69, 88,124,170,153, 65,209,106, 43,212, 36,169,185,226, 74,140, 85,160,142, 1, 85,227,244, 6,
+ 84,160,122,209, 94, 67,237,239,161,181,178,235, 88,136,184,208,195, 38, 12,132,106,248,126,191, 96,101, 20, 40, 53, 90,173,177,
+115, 33,170,192, 53,227, 94,194, 75,120, 94, 21, 27, 55,210,154,162,242,177,120,209,180,114,172,206,236,165,134,217, 75,143,151,
+ 30, 47, 61,254, 78,244, 91, 95,232, 18,228,246,185,115, 87,157, 59,183,181,181,125,254,194,249, 75, 23, 47,157,191,112,225,252,
+ 85, 87,109,110,109,111,109,109,204,102,115,199, 65,177, 6,152,213, 18,200, 48, 12,195,209,209,225,238,222,238,222,222,254, 83,
+ 79, 61,185,191,183,127,101,247,202,222,238,238,206,206,206,222,222,222,223, 61, 1,109,110,110,222,122,219,215,188,226, 21,175,
+184,254,186,235,206,159,191,176,185,181,153,115, 62, 19,244,157,246,103,113, 10,189, 91,251,161,209, 29, 79,241,161,135, 97, 56,
+ 60, 56,188,178,123,229,241,199,191,240,240, 67, 15, 61,242,240,195,195, 87,168,243,253, 21, 19,208,117,215, 93,119,231, 93,119,
+125,237,215,190,118, 62,159,153,141, 89,197,139, 95, 55, 82, 58, 76,112,169,248,149,173,210,142, 66,157,152, 52, 75,167, 13,221,
+152,229,172,164, 80,131,249, 84,215, 99,143,125,246,119, 63,254,241, 7, 31,252, 43, 85,253,127, 42,160,237,237,237,235,175,191,
+254, 53,175,121,237,173,183,222,230,136,142, 77, 7,129,198, 81, 30,123,158,171, 76,148,102,100,177,142,200,216,180,247,255, 2,
+ 93,110, 76, 4, 53,105,125, 75,147,212,200, 21, 16,121,238,185,231,254,224,247,127,239,193, 7, 31,124,230,153,103,254, 86, 4,
+116,221,117,215, 93,190,124,249,166,155,110,186,238,250,235, 75, 81, 39,164,174, 11,197, 94,168,195, 59, 21,208,136,149,243,196,
+243,107,206, 7,103,208,250,207, 36, 3,188,216,147, 81,114,250, 68, 31,192,199, 62,251,153, 63,254,228, 39, 63,245,103,159,234,
+251,254, 43, 35,160, 15,125,232, 67,203, 85,223,122,223, 35,238, 56,237,217,124, 73,114,230, 73,122,242,244,201, 51, 94,118,130,
+182,241, 2,170,116,130,186, 48, 53,195,102,125,211,201, 74,146, 92, 30, 47,127,247,119, 63,254,241,143,255,183,191,169,128,222,
+253,158,247, 54,194,137, 53,130,219, 25, 82, 57,229,121,166, 52,153,117,185, 76,158, 60,173, 74,235, 70,120,138,215, 50,142,104,
+156, 96,114,188,184,138, 17,147,238, 97,112,116, 36,245,125,255,235,191,254,159, 30,124,240,193,255,187,249,167,160, 51,172,205,
+ 66,140,165,202,244,239, 89,173,201,181, 39,167, 74,119, 2,177,183,169, 11,179,181,137,196,117,175, 54,189,132,157,246,118, 19,
+186, 78,219,197,250,235,153, 95,189, 3,255,186,215,221,121,255,253, 15,220,112,195,203,191,240,133,207,159, 62,235,225, 69,248,
+100,166,106, 47,210,126,120,126, 27, 91,239, 10,112,100,193, 76,222,121,198,179,173, 65,101,129, 62,113,242, 43, 78,127, 95,255,
+132,214,204, 27,169,213, 54,101,242, 27,201, 82, 74,227, 14, 1, 32, 11,202,237,119,220,126,249,107,239,216,221,221,255,205,223,
+248,207,143, 60,242,240,151,170, 65,247,220,251,250,145, 45, 82,105, 11,186,206,209, 57, 77,119, 24, 27,222,245,135, 19,147, 66,
+107,220, 5, 76,222, 50, 14,101,213,182,196, 26,121,106,156,224,152,108,141, 77,252,213,152,101, 4,100,223, 24, 67, 78,101,168,
+134, 52, 82, 48,166,151, 83,155,117,221, 93,119,221,253,143,223,242,214,199, 30,251,236,151,194,243, 74,247,222,115,239,212, 56,
+170,221, 76, 72, 67, 19,250,237, 73,159,180,238,187,214,122, 75,103,104,224,132, 53,209, 38,177, 78,188,236,140,118,240,154,103,
+138,142,156, 19,180, 29, 24,171,157,189, 41,129, 16, 19, 14,148, 77, 62,191, 81,175, 72,220,125,247,221,111,124,227,215, 63,245,
+212, 83, 79, 63,253,244, 11,106,208, 61,247,158,229,132,237,236,156,120,253,149,163,187,157,128,156,211,128,222,254, 93, 43,177,
+ 25, 48, 91,159, 30,199,250,216, 26, 43, 20, 58, 97,212, 8,185,158,118,215,182, 37,199,110,108,149, 84, 27,189, 94,247,131,118,
+138,107,168, 69,187,174,187,243,206,187,238,184,124,249,211,143, 62,250,124,190, 41,221,125,207, 61, 54,110, 64,251,123,234,183,
+209,202, 38, 54,181, 54, 46,100,207,151,153,215,118,229,186,224,237,140, 76,106,146,221, 76, 74, 16,177,150, 30, 78,226,126, 72,
+204, 90,172, 31, 93,190,157,176, 80,156,242,223,163,205,169,158, 59,119,213,223,255,134,111,216,222, 58,247,208, 67, 15,158,225,
+102,191,251,123,190,247,108,251, 9, 22, 60, 0, 20,197,106,208, 97, 8,182, 84, 60, 79, 16, 76,194,156, 99,242, 90,200,217,140,
+ 89, 70,129,169,214, 81, 50,131, 54, 24,151,136, 51, 28,136,122,188,211,152,222,136,180, 73,203,145, 7,213,216,153,141,225,234,
+205,165,105,208,227,201, 64, 51, 58, 51,114,125,252,117,226,191,199, 79, 2, 73,254,252,207,255,220, 19, 79, 60,113,130,224,117,
+215,153,155,174,102,170,129,101,170,218,114,229, 4, 30, 43,102, 69,109, 80, 43,206,122,171,138,161,106, 49,184, 88, 27,197, 62,
+ 35,224, 95, 85,161,211, 67, 16, 56, 6,164,177,197,111,152,142,169, 54,108,158,210, 48,232,198, 1,174, 29,188,152, 18,173, 8,
+ 46,240,124,101, 51,166,174,125, 61, 69,152,154,228, 27,238,123,227,198,230,166, 31,170, 19, 97,254,240, 40,138,227,162,230,148,
+ 33, 55,158, 97,176,227,165, 54,124,185, 20, 88,139,202, 83, 10, 51, 41, 82, 55, 71,216, 37, 58, 81,128,194,197, 92,102, 89,234,
+ 33, 59,156,117, 49, 81, 66,114,150, 99,208, 19,128, 8,115,170,202,162,204,162,149, 68,167, 38, 20,241,129, 32, 35, 32,168, 45,
+135,218,169,183,218,241, 32, 27, 31,101, 93, 12,209,206,178,113, 7,106,164,108,105, 65,169,180, 52, 5, 76,236,235,223,248,245,
+215, 94,115,237,111,253,214,111, 58,216,194,111,253,103,223,233,239, 28,138, 61,187,219,239, 29, 20, 85, 51,195,114,176,195,163,
+ 82,244, 84,189,197, 70,100, 33, 71,233, 71, 85,148, 36,212, 57,103,158,223,206,155,115,103,157, 91,206,178,152, 73, 18, 24, 32,
+228,188,147,148, 26,225, 26, 93,150,170, 48,210,229,145,236, 44, 41,232,116, 18, 51,148, 39,193,146, 49, 62,132, 37,171,157, 21,
+ 19,125,204,118, 29, 60,136,201,200,105,249, 34, 45,255, 78,121,103,231,185, 95,254,229, 95,122,238,185,231,210,197,151,189,122,
+255, 80,247, 15,135,253,195,178,119, 88,142,150,218, 23, 27,138,246,131, 13, 90,199,122, 24,243, 71,190,147,161,249,181,183, 4,
+ 78, 6, 60,205,146, 48, 9, 69,152, 19, 72, 56,169,208,205,179,239,109,213,219,106, 80, 55,210,126,192,208,199,208,188,186,147,
+170, 62, 43, 40, 64,134, 54,209, 90,251,127,235,169,183, 53,134,223, 41,233,156, 17,138, 79,166,230, 39,216,235, 19,118,146,109,
+108,108,220,247,134, 55,252,217,167, 62,197, 27, 94,253,205,167, 18,213, 83, 23, 93, 47,175, 88,137,208, 28, 15,250,168, 3, 88,
+117, 87,102,153, 91, 27, 41, 9,155, 5,112, 82,155,206, 58,201,153,226,175,236,210,230,194, 93, 51, 68,100, 49, 19, 63, 77,134,
+100,206,146, 38, 35,241,105, 66,174, 19,174,103,148, 83,189, 57, 89, 32,243, 12,164,174, 6,197,117, 92,128, 83,183, 45, 73,172,
+ 4,133, 1,235,120,214,120, 6,204, 73,125,173, 41, 76, 37,242,212, 86,166, 51,157,168,173, 89,182, 26, 88, 14,108,107, 67,186,
+ 44,173,149,235,239, 23, 97, 81,197,224,183,110,198, 34, 43,243, 56,149, 4, 66,164,100,109, 34, 23,217,131,158, 57,117,162,149,
+161, 38,235,128,201,153,224,139,197,241, 84,107,174,186,250,176,105,117, 99, 21,192, 67,163,110,153,169, 65,146,100,197,212,129,
+141,167, 6,212,182,103,147, 85, 60, 85,159,172,168,209,122,229, 47,132, 68, 27,222,146, 64, 21, 67,239,252, 57,164, 26,133,138,
+ 90, 41, 78, 44,112, 31,207,163,227,152, 68,206, 73, 86, 27,169,203,226, 81,120, 49,147,174, 19,178,144, 76, 34, 57,215,202,138,
+ 72, 77,133, 88,103,251, 78,227, 78,193,196, 40,161, 60, 45, 1,109,249,104,212,110,209, 64,118,156,115, 28,214,134,162, 32,199,
+ 97, 2, 60,153,242,219, 26, 25, 52,154,151,141,119, 48, 1, 57,116, 50,122,192, 56,126, 97,156,163,159, 48, 24,170,213, 79,134,
+236, 25,233,180, 66,133, 52, 43,208,126, 8, 51, 20,101,159, 32,226,172,100,131,153,208, 76,216, 76,164, 85,184,228, 26, 6,197,
+245,133,159,153, 90, 55,154,237,154,190,177, 13, 89,198, 69, 85,144, 39,195, 40,227,177, 34,161, 74,141, 66,239, 20, 2,176, 85,
+151,180,137,188, 70,118,136,214, 29,168,108, 85, 85, 31,202,165,255,219,232, 9,172, 70, 12,163,162,200,136,230,172,122,245,115,
+140,146, 96, 49, 75,243,153,120, 66, 55,203, 92,204, 83,184, 42,114, 54,147,122, 64, 20, 83,114,133, 66,237,243,215,101, 53,159,
+255, 60,206,234,244, 19,214, 64,115,128,102, 2,102,173,117, 20,199,233,152,145, 99,211,146,136,186, 89,109,126,102, 66, 67,105,
+248,209,212,218,216, 92, 88, 36,135,193,144,165, 66,163, 9,100,237,202, 22,132, 29, 37,144, 32, 37,134,240,139,106,113, 78, 0,
+100, 16,209, 70, 30, 17,170,214,164,146, 52,231,114,197,110,138,176, 97, 5,136, 19,142, 70, 22,240, 89,127,226, 84, 39,182, 86,
+ 66, 60, 69,154,150,204,154,233, 88,176, 76, 39,202, 98,104,231,252, 25,156,246,198,105, 9,234, 68, 5, 35,215, 74, 55,142, 89,
+170,105,101,140, 88,205,226,162, 94,109,124,105, 40,125,196, 56,226, 79, 28, 20,229, 71,152, 21, 59, 58, 14, 73,116,153,199, 43,
+233,146,128,236, 50, 47,108,231, 46,167, 9,139, 18,235, 83, 24,103,102,210,118, 38,126,213, 42, 21, 15, 61,163,137,121, 38, 13,
+234, 73,220, 93,235,104,118,101,212,113, 18,212, 44,132, 20,130, 28,117,152,118, 98, 76,203,214,143, 4,178,202,168,171,213,110,
+221, 63, 39,164, 77,226, 67,240, 56, 4, 5,147,225,116,176,235,233,132, 69,241, 0,129,202,139,173,182,193,177, 96,111,247,235,
+132, 60, 26, 91, 97, 99,156,240,134, 78, 35,113,227,146,205,144, 82,174,186,216,156,211, 36,122, 85,106, 87,104,139,105,176, 69,
+ 44,210, 8, 39, 38, 5,164,101,113,106, 1, 84,166,152,108,204,192,215,186, 64,125, 2,198,143, 20, 48, 39,241,141, 4, 26, 63,
+119,161, 81,154, 87,189,174,134, 17, 66,219,221, 31, 42,251, 89,158,219, 27,230, 89, 72,166,132,237,205,180,189,145, 82,138, 10,
+116,150, 41, 18,149,190, 31,146, 82, 63,222,121,207, 62,157, 30,107,107,185,137,131,179,163,103,242,141, 41, 37,163,142, 87, 76,
+103, 33,107,192,111,142,175, 57,139,240, 61,214, 70, 25,218,177, 0, 85,177,108,162,146, 22, 52, 81,192, 32, 99,158,229, 84,208,
+112, 83,148, 48,102, 53,211, 1,199,203,210,151, 32,164, 5,175, 13, 39, 18, 30,118, 73, 85,109, 62, 19, 0, 57, 75, 74,152,119,
+126, 34, 5, 83, 22, 63, 33, 32,140,142,230, 44, 70, 78,168,139, 62,128,100, 30, 77,198,131,118,160,230,251,181, 6,107,102, 39,
+239,209,166,136, 24,180, 82,199, 49,230, 84, 60,145, 29, 49,232,132,193,203,106,116, 78,139,232, 59,222, 89,213,198, 17,154,153,
+164,178,166,134,161,183, 74, 85,131,123,101,215, 78,173,148, 43,178,178,113,225, 3,108, 56, 92,150,229,160, 4, 69, 74, 63,232,
+254, 97,241, 96, 55,239,100,107, 67,186, 68, 35,178,200, 98, 46, 93,110, 39,245, 88,205,163, 44,144,236,117, 12,119,204,150,109,
+ 20,113,134, 78,231, 42,235, 13, 84,154,165, 53, 95,194,170,145, 99, 28, 4,198,243,109, 66, 46,126,100,139,191,182, 24,156,184,
+235,231,163, 68, 70,196,214, 52, 53, 63,218,182, 40,134, 82,119,205, 16, 7,168,144, 45,133,138, 72,212,102,100,137, 98,126,154,
+ 71,100, 65, 71, 75,189,178, 63,120, 80,219, 88,164, 11,219,185,203, 2,218, 44, 39, 32,145, 41, 50,100,225,250,172,209,180,210,
+ 62, 27, 35, 33,144,117,236, 40,180, 56,230, 38,198, 9,199,158, 99,170, 84, 9,152, 81, 23, 91, 27,163, 59, 81, 52,142,165, 73,
+177,218, 87,175,196, 68,159,254, 66,216,145, 31, 10,232,154, 88, 3,180, 26, 61, 89, 2,235,228,138, 53,212,144, 33,196, 74,103,
+ 44, 40,149,151,187,236,185,127, 88,114, 86, 18, 57,169,154, 30, 46, 99,222,167,203, 50,235,232,243,217, 89,216,229, 40, 0, 3,
+192, 19, 54, 37,153,220, 87, 59, 58,167,241, 29, 57,222,216,104, 27,172,195, 65,117, 89,147,233, 37,141,113,161,234,190,171,129,
+132,151, 10, 85,174,213, 14, 12,174, 50, 90, 96,140, 48,101,237,212,212,246,249,117,104,201, 9,237,145,161, 78, 34,154, 49,166,
+147, 20, 84,211,162,177,214,229,210,246, 15,135, 56,109, 91, 56,203, 76,226,246,133,173, 69,218,218,240, 84,147,139,185, 92, 60,
+151,103, 51,241,186,183,235, 36, 53,120,189,114, 36, 28,232,203,168,113,138,141,228,138, 32,150,219, 88, 11,140, 93, 78,180, 3,
+ 62, 99, 14,134, 85,180,225,124,217, 14,212,180,113, 46,187, 90,106, 21,156, 54,216, 30,214, 78, 68,105,243, 49, 13,210, 98, 59,
+ 62, 70,107,122,212, 56,213,170, 0, 0, 3,224, 73, 68, 65, 84,212, 70,116, 20,227, 57,151,149,207,202,154,156,213, 20, 85,181,
+198, 28,193, 80,108, 57,168, 84, 37,216,207,195,108, 72, 94, 63,118, 57,229, 84, 9, 18, 21,246,245,243,218,242,132, 43, 95, 39,
+190,173,154, 68, 16, 91, 39, 51, 62,218,168, 42, 45,223, 80,140,186, 73,181,152,119, 33, 89, 52,120,217,140,185,220, 24,193,173,
+158, 56, 18,199,112,215,206,135,143,177,180,152,202,160, 6, 75,189, 14, 71,141, 87,172, 83,119,186, 86, 83,251,216, 82,216,141,
+106,225, 82, 1,248,184, 13, 15,142, 11,118, 91, 56,170,104, 1, 67,131,178,196,209, 4,243, 25, 55,230, 41,137,120,136,201, 26,
+103, 64, 53,197,117,109,208,150, 7,198,166, 68, 90,214,182,198,198,115, 89,171, 85,214, 54,195, 56,205,139, 58,225,217, 26, 60,
+245,244,208, 74,211,109, 72, 50,131, 15,173, 52,142,135,238,196, 74, 24, 71, 38,121,134, 29,163,119,145,147,197,181,199,176,200,
+122,118,144,135,241,137,147, 48,104,100, 95,164,243,185, 9,210,196,178,154,210,104, 44, 38,165,176, 12,102, 41,196,146, 91,153,
+ 96, 49,105, 94,171, 62,142,137, 77,203,226,108, 68,116,195,151, 71, 29, 49,202, 40,202, 78, 5,172,216, 80,236,249,208, 26, 27,
+ 79, 72,170,243, 42,116,194,255,232,243,199, 2,178,157, 75, 84, 15, 8,164, 15,145,140,211,169,230, 39,115,181, 89,188,166,159,
+238, 78, 26,162,238,155,168,230,115, 46, 6,192, 10,143,189,180, 3, 1, 59, 60, 46, 59, 19, 82, 68, 30,119,111, 60,185, 43, 52,
+ 63,112,160,134,162,105, 3, 5,171, 43,153, 30,167,215,182,247, 20,197, 99, 13,216,171,142,150,141,183, 29, 1,161, 1,242,109,
+152, 46, 80,129, 74, 50,111, 71, 75, 26,140,202, 9,200, 50,194,119,238,172,218,136, 64,140, 40,182,153,217,234, 33,195, 75,178,
+233, 65,245,117, 54,198,157,136,229,217,218, 36, 86,213,165, 22,178, 66,177, 26,198,214, 36,101, 13, 90, 35,168, 86,203, 90, 59,
+ 69, 42, 91,107, 87,217,216,116,168, 8,150,181,224,173,129, 44,105,235, 91,196,169, 98,106,182,118,206,162, 23,244, 86, 83,119,
+186,235,169,153,155,213,168,137,170, 75, 6, 19,182,233, 75,218,216,210,111,125, 53, 70,244,181, 58,204, 55,126, 0, 53,219, 24,
+215,219,204, 26, 91, 56,243,117,106, 36,108,213,104, 39,210, 68, 59,148,113,205,208,214,154,253, 99,114, 54, 30,149,169,117, 30,
+148,205,121,185,195,103, 45, 91, 67,155,154, 15,148, 10, 2,112, 60,148, 52, 74,231, 72,150, 26,204, 28, 40,112, 29,234, 82,212,
+129,117,182,179,195, 66, 70,172,152,121, 45, 65, 48, 53, 99, 35,152,107,152,156, 48, 12, 38, 57,139,151,154,110,125,225,199,170,
+ 49, 25,167,149, 26,235,249,160, 88, 71, 12, 49,246, 1,218, 44, 77, 67,191,173,166, 24,181, 58,241,141,157,158, 42, 51,102, 29,
+218,112,237, 58,239, 91,163,139, 77,164, 50,173, 13,109,212,151,166, 92,126,254,160,249,161,106,145,139, 26,218,118,180,212,173,
+ 37,128,185,253,183, 51,117,188, 55,240, 29,104,157,148, 25, 89, 21, 53, 48,105,148,240,161,101, 21,222, 61,147, 62,133,230,174,
+214,178,124,179,233,225,228,227,168, 60, 99,132, 22,205,224, 98,201,168, 3,181, 86,127,182,122,224, 64, 61,131, 46, 92, 75, 59,
+187, 47,140, 56,138,164,112,254,168,119, 84,229, 19,101,215, 26,183,166,222, 54,128,108,173,232,212,233, 97, 5,106, 35,162,101,
+ 1,138,177,150,144,173, 1,172,117, 36, 45, 6,145,200, 19,112, 19, 78,124,183,113,174,166, 85, 17, 35, 81, 49, 48, 82, 95, 64,
+228, 0,110, 44, 97,252,218, 64,112,133, 10,164,202, 40,208,113, 31,124,231,164,188,170,194,179, 54, 94, 88,115,118,214, 62,237,
+104,103, 99, 40, 9,156,202, 8,230,152,171,182,134, 79,248,252,249,244,156,192,234,203, 84,199,227, 18,214, 36,101, 35, 30, 20,
+ 93,242,241, 56,214,105,103,170, 70,134,209,127, 53,110,143, 85,237,156,228, 80,118,194, 49,181,234,212,111, 56,142,125,154,140,
+ 97,250, 8,166,197,152,161,203, 92, 9,177, 81, 88,117,210,218,143, 68, 25,147, 22,159,138, 28, 53,179,229,163, 25,163,151,174,
+ 39,215,199,240,218,216, 79, 97, 77, 92,106, 73,221,150, 59, 77,243, 70,108,241, 4,225, 74,219,120, 36,177,214, 43,161,141,201,
+ 66,211, 59,182,147,159,226,191, 89, 8, 53,178,105,106, 90,243,164,150,160, 76,108,195,106,139,167,185,159,230,141,234,126, 84,
+252,106,250, 50,155,192,248, 35, 63, 9,255, 7, 14,224,164, 93, 7, 57, 57,190, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+ 0};
+
diff --git a/source/blender/editors/datafiles/clay.png.c b/source/blender/editors/datafiles/clay.png.c
new file mode 100644
index 00000000000..aea212639e7
--- /dev/null
+++ b/source/blender/editors/datafiles/clay.png.c
@@ -0,0 +1,356 @@
+/* DataToC output of file <clay_png> */
+
+int datatoc_clay_png_size= 11181;
+char datatoc_clay_png[]= {
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73,
+ 72, 68, 82, 0, 0, 0, 96, 0, 0, 0, 96, 8, 2, 0, 0, 1, 26,253,208,249, 0, 0, 0, 4,103, 65, 77, 65, 0, 0,177,143,
+ 11,252, 97, 5, 0, 0, 0, 6, 98, 75, 71, 68, 0, 0, 0, 0, 0, 0,249, 67,187,127, 0, 0, 0, 9,112, 72, 89,115, 0, 0,
+ 13,215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 0, 7,116, 73, 77, 69, 7,218, 7, 19, 0, 34, 11,191,157, 46, 32, 0, 0,
+ 32, 0, 73, 68, 65, 84,120,218,237,124,121,180,165, 89, 85,223,222,251,156,239,251,238,240,134,122,245,170,138,174, 30,170,233,
+102, 38,180, 52, 99, 55, 8,149, 6, 20, 73, 34,194, 66,151, 65, 3,100,153,232, 10, 70,212, 37, 6, 21, 39,156, 34, 70,113, 32,
+ 49, 70, 48,113,105, 52, 14,145,128, 64,148, 8, 34,208, 42,131, 49, 34,202,104, 47,160,231,234,174,170, 55,222,123,191,239, 59,
+211,222,249, 99,159,243,221,251, 26,154,201, 86,219,181,188,221,245, 94,189, 87,247,221,119,238, 62,251,236,253,219,191,253,219,
+ 7,207,158, 61, 11,159,245,241,185, 60,201, 50,243,187,223,247,255,186,118,190,115,225,238,170,110,166,107,107,198, 84,255,243,
+215,127,229, 53,175,253,133,225, 73, 4, 0, 93,215, 34,153,205,227, 39,187,174,221,189,120,113,118,176,243,143,111,184,225, 85,
+ 63,241, 99, 71,158,132, 0, 68,212,212, 13, 25,107,108,181,190,185,125,234, 1,167, 31,117,205,181,191,243,187,191,123,242,228,
+137,252,164,209,120,188,182, 54,117,190,159, 78,215,154,209,104, 60,158, 76,214, 54,108, 61,222,221,221,251,230,151,124, 83,126,
+146, 53,228,156, 79,193,247, 93,219, 52,141,247,174,235,186,187,206,221,177,191,183,183,183,187,251,210,111,125,137, 5,128,196,
+192,204,128,166,235,250,115,119,126, 24, 16, 71,163,145,173,170,174,107,173,173,214,214,215, 9, 0,246,247,119, 47, 94,188,112,
+254,238,187,206,221,121,251,221,119,157,243,174, 55,198,108,110, 30,139, 49, 34,226,124,118, 96, 1,224,206, 59,110,223,185,112,
+ 33, 4,239,156, 67,132,233,218,250,169, 7,156,222,223,223, 93,204,231,139,197,252,216,214,182, 5,128, 11,119,223,197,204,136,
+ 24, 67, 16,145,186,174, 15, 14,246,239, 62,119,238,226,249,187, 78, 94,114,233,120, 60,182, 0, 80, 85, 53, 18, 6,239,157,115,
+179,131, 61, 0,169,155,209,185,219,111,221,218,222, 62,117,201,233,221,139, 23,240,115,218,187,207,229,129,239,251,211,247,187,
+222,205, 14,247, 47,156, 63,119,242,212,233,209,120, 50, 59,220,127,238,115,190, 98,245, 73, 52, 95,204, 67, 12,163,233,218,230,
+177, 19,123,123,187,251,187, 23, 64,248,135, 95,241,242, 35,175,244,142, 27,255,152,153,235,186,158,207,102, 23,207,223,117,252,
+196,201,233,116,218,119, 11, 16, 89, 44,230, 95,249,149, 95, 5, 0, 68, 68, 27, 27, 27,134,136,136,234,166,153, 78,215,234,102,
+180,113,108,187,237,221,221,119,159,255,214,151,188, 24, 0,236,168,169,152,147,247,254,226,249, 59,167,107, 27, 34,226,156, 59,
+ 60, 56,184,112,254,194,254,254,126,223,117, 0, 96,145,172,247,129, 69,198,211,245,115,231,206,221,252,201, 79,140, 70,147,186,
+105, 66,240,174,239, 71,163, 49, 0,224,239,191,227,198,190,239, 22,243,249,197, 11,231,239, 62,119,167,181,118,251,228,169,227,
+219, 39,118,119, 46,222,113,235, 45, 72,212, 45, 14,237,238,206,197,115,119,220,222,182,109, 8, 94, 68,172,173,142,111,111,111,
+110,110,222,121,251,109, 93,215, 18, 81,221,140,232,174, 59,239,152,205, 14, 17, 65, 68, 92,223, 3, 0, 34,221,113,251,109, 23,
+ 47,220,125,219,205, 55,157,190,236,138,102, 52,177,204, 60,158, 76, 16,177,239,186,249,236,112, 62,159,133,224,231,243,217,199,
+ 63,250,129, 27,158,249,156,190,239,231,179, 67,184,175,246,206,234,167,167, 63,253,233, 63,248, 67, 63, 50, 95,204,247,119, 47,
+112,146,201,116,173,170,107, 99,173, 49, 22, 17,254,224,247,223,246,202, 87,190,242,179,248,192, 83,158,242,148, 87,254,248, 79,
+137, 48, 11, 51, 75,138,190,239,250,110, 49, 95,204, 15,183,182, 79, 86,117, 61, 26,141,235,186, 73,209,127,242,227, 55,237,238,
+ 92,248,246,151,125,215,189,174, 40,198, 32, 34, 34,130,136,214,214,147,169, 69,196, 16,227,108, 54,107,154, 38,120, 7,128, 41,
+134,245,141,205,205, 99, 91,191,249,235,191,118,225,226,197,151,124,243,183,124,154, 23, 10, 33,128, 72, 85,215, 77,211, 16, 81,
+223,247,117,221, 76,167,211,197,124, 94, 85,245,116,125, 99, 52, 26, 19, 34, 16, 10,139,247,253,250,177,237,215,191,225,183, 23,
+243,249,238,206,249, 55,189,241,141,111,127,199,187,242, 11,109,109,109, 1, 8,199,200, 34,237, 98,182,191,187, 91, 53, 13, 34,
+141,198,227,209,104, 84,215, 13, 33, 9, 8, 10,196, 24,103,135,243,195,131,189,182,109,231,135,135,231,239,190,243,193, 15,186,
+234,228,246,241,223,120,221, 27, 44,104,104, 18,100,192,196,140,100,215, 54,142,245, 93,235, 92, 47,156,250,158,156,115, 33, 4,
+231,156,115,142,136, 82,138,206, 57,215,119,139,197, 60,134, 96,140,121,200,195, 31, 1,240, 6, 11, 0,174,247,204, 73, 68, 82,
+226, 24,252, 98,177,152,207, 14, 15, 14,246,231,135, 7, 33, 4, 68, 28,141, 39,227,241,164,170,171,170, 26,143,198, 99,231,156,
+119,222,123,111,235,102,205, 90, 34,122,241,191,126,161, 5,128,189,221,139,109,219,182,109,235,157, 11,193,135,160,209,199,121,
+215,139,240,104, 52, 49,214,214,163,102, 58, 93,155, 78,167, 33, 4, 78,236,189,235,251,150,200,136,192,236,224, 96,243,248, 41,
+ 11, 0, 23, 47, 92,152,207,103, 93,187,136, 49, 33,162, 8,167,148,130,247, 49, 38, 34, 34, 99, 54, 55,143, 29,223, 62, 97, 43,
+219, 46, 22,123,187, 59,179,195,253,253,253,221,217,254,190,128, 92,118,197, 3,141, 49,174,239, 44, 0,236,238,238,196,224, 1,
+160,170, 42,230,232,125,242,206,117,109, 27,130, 71, 68, 52,116,120,176,223,117, 29,115,234,218,118,111,119,103,111,231,194,173,
+159,248,200, 99,175,187,225,196,169, 7, 48,115,223,247, 49, 70, 11, 0,136,104,140, 21, 16, 16, 1,192,186,174,173,181, 85, 93,
+139, 72, 93, 55,198,152,221,221,157,115,183,221, 12,136, 41,165,217,254,206,195,175,121,220,163, 31,247, 68,102,118,125,223, 46,
+ 22,251,123,187,231,239,186,237,190,139,147,247,201,227,204,153, 51,116, 95,189, 86, 62,253,127,252,158,247,118,109,215, 46,102,
+ 59, 23,238,154,110,108,141, 70, 35,107,107, 50,134,136, 82, 12, 47,122,225, 11, 46, 92,184,240, 89, 78,255,159,190,255, 47, 98,
+140, 49,198, 16,188,119,174, 93, 44,246,119,207, 79,215, 54, 71,147, 73, 85, 85,214,214,100, 40,134,112,254,220, 29, 47,124,209,
+139, 62,211, 91,243,222,123, 31,152, 19, 2, 90, 91,141, 39,147,205,173, 19, 33,248,190, 93,196, 16,152,163, 37, 51,157, 78, 54,
+143, 29,251,169, 87,253, 56, 17,222,219,107,153,127,241,194, 23,165,148,132,153, 69, 16, 17,201, 32, 98, 74,201, 7, 31,188,247,
+190,143,193,117,237, 34,198,152, 82,188,254,137,143,255,216, 77, 55, 29, 30,206,238,241, 42,155,155,155, 68,100,136, 8, 17, 1,
+ 0,144,140, 49,198, 86,100, 12,179, 0,128,181, 13,160, 73, 12, 2,176,125,226,212,195, 30,121,205,247,126,207,203,159,252,164,
+235, 62,141,141,110,252,163,247,198, 20, 75, 84,179, 0,224,157,155,207,103,179,195, 3, 99,204,100,186, 54, 30, 79,234,186, 22,
+225,224,157, 8,131,136,136,196, 16,230,243,195,175,249,218, 23,172,216, 40,250, 16,130, 48, 87, 85,165,126, 12,136,117, 93, 87,
+ 85,109,140,169,170,170,105,154,186,105, 70,227,201,250,198,177,201,116,157,108, 29, 98, 90,116,253,124,209,253,240, 15,190, 98,
+153,146, 43, 91, 77,167,211,245,141,141,241,120, 76, 4,125,215,113,138,136, 88,215, 53,145,169,170,202, 88,139, 0, 34, 2, 72,
+ 72, 38,132,208,182,237, 98, 62, 63, 60,216,159,207,231,223,246,205,223,152,253,104, 50,153,128,128, 72,138,193,199,152,186,118,
+ 30, 66,212,247,104,173,205,175, 2,250,134, 82,215,182,243,249,108,177, 88,116, 93,183, 88, 44,218,118,145, 66, 40, 14, 41,137,
+153,137, 12, 0,178,200,104, 50,233,118, 46, 58,215, 85, 85,221, 52, 99, 97,137, 49, 2,128, 8,120,239, 14, 14,246, 23,243,185,
+115,189,247, 46,120,159, 66, 32,202,103,195, 18, 25, 36,147, 18, 39,102, 16, 32, 52,147,233,186,235, 59,239,122, 0, 8, 49,164,
+196, 10,142,124,240,214,216, 16, 66, 12,209, 59,175,200,170,170,235, 83, 39,182, 1,192, 10, 96, 74, 41,165,196, 44, 2,162,127,
+ 15, 33,206, 22,173,191,184, 27, 98, 64, 68,181,148,238, 3, 0,164,148, 98,138, 2, 98,235,186,170,235, 23,190,224,107,127,235,
+245,111,180, 33,132,152, 18,167, 36, 34, 41, 70,239, 93,223,117,179,217,225,225,254, 94,215,117,204, 92,215,141, 0, 52, 68,214,
+ 86, 77,211, 8, 39, 17,225,148, 64,112, 60,158,128, 8, 19, 49,179,237,123,231,189, 75, 49,198, 24,125,112,125,215,119,237, 98,
+ 62,159,119,109,219,247, 29,145,177,198, 42, 0,174,234,106, 52, 26,121,239, 68, 36, 49,199, 24,201, 16, 89, 74,222, 61,244, 33,
+ 87, 91,215,119,109,219,182,237,162,235,218,160, 15,239,189,115, 49, 37,102, 54,198, 26,107,109, 85,141, 70,227,201,100, 90,215,
+141, 48,199, 20,131,247, 41, 69, 68, 27, 82, 34,196,147, 39, 78,218,182,107,219,197,252,240,240,176,235, 22,193, 7,230,148, 82,
+226,148, 56, 37, 68,163, 6,154, 78,167,235,155,155,163,102,228, 92,239,250, 62,120,239,250, 78, 68,230,243,217,177,173,109,199,
+201, 86, 53,181,139,197, 98,177,232,187,214, 59,175, 7,133,144, 4, 32,165,196,204,128,104,140, 25, 79,166, 85, 85,133,224,103,
+179,195,174,235,186,197, 34,134,112,254,220,237,205,104, 60, 93, 91, 27,141, 38,100,140,157, 29, 28,180,237,162,239, 59, 17, 49,
+198, 2,160,128,112, 74, 49, 70, 97,102,182,160, 39,107, 54,243,206,205,102,135,243,217, 97,219, 46,110,191,245,166,211,151, 93,
+125,242,228, 37,198,154,170,105, 16,209,250,224, 83, 74,100,172, 53, 36, 2, 49,134, 24,131,247, 46,120, 23, 83, 18,145,118,220,
+238,237,237, 33,130,247,126,118,120,176,115,241,194,206,221,119,110,108,158, 56,115,213,213,205,104,236,250, 30, 1, 56,177, 37,
+ 34, 91, 89,195,130,136,128, 64, 68,194,236,208,197,152,156,235, 92,215,166, 20,187,182,181,214,134,224, 15,246,247, 14,246,118,
+ 15,246,119,158,242,180,127, 50,157,174, 59,239, 98, 12,125,223,119, 93,107,133, 89, 88, 88, 24, 24, 68, 88,193,230,218,218,250,
+104, 52, 54,214, 84, 85, 45,194,119,222,113, 91, 59, 63, 4,164,190, 93,236,158,191,243, 43,254,249,215,137,176,238,111,219, 46,
+246,118, 47,182,243,125,184, 95,229,181, 43,174,184,130,224,254,244, 64, 68,251,105,255, 97,109,109, 58, 30,143, 47, 92,184,184,
+250,205,201,100,242,168,107, 30,117,226,196,201, 43, 46,191,220, 88,187,187,179,115,199, 29,119,124,240,131, 31,220,219,219,187,
+ 15,215,100, 69, 4, 0,126,254,181,175,189,246, 49,143, 19, 1, 78, 41,166,200, 41,133, 16,162,158,221,190,223,223,185, 96,170,
+122,178,182, 94,215,141,173, 42, 67,198, 24, 67,198, 32,162, 49,132,136,204,192,156,156,235,103, 7,251,223,240, 13, 95,223,182,
+221, 95,107, 65,127,242,103, 31,224,148,152,153, 89, 68, 4,128,136,192, 86, 72,100,200, 88, 91,213,117, 51, 10,222, 59,223,207,
+ 14,219,205,205,227,104, 5, 16, 4,196,144, 97, 68, 99, 76, 85, 25,196,170,110,154,186,174,127,249,151,255,251,206,197,139,139,
+249,225,183,191,236, 59,191, 64, 68,211,181, 45, 51, 35, 32, 32,136, 0,128, 0, 0, 34,160, 33,139, 53,145, 53,198, 26, 91, 25,
+107, 67, 8,138, 35,153,211,104,212, 76,167, 27, 70, 44, 33,146, 37, 50, 68, 2, 82, 85, 77, 51, 26, 79,198,237,226,240, 71,127,
+228, 7,172,173,127,224,135,126,248,243, 50,152, 5,128, 98, 25, 65, 1, 69, 35, 0, 0, 32, 8, 68, 6,136, 8, 9, 1, 17, 64,
+152, 37,165, 4, 72,198, 26,102, 92,180, 11, 67, 6,137, 16,128,153, 21,239, 35,192,104, 52,190,244,178, 51,222,245,183,124,242,
+166, 31,124,197,247,213, 77,243,159,127,238,231,255,234,175,110,250, 92, 23,100,140,145,188, 89, 64,192, 26,105, 1, 9, 17, 17,
+ 81,191, 15, 34,108,217,218,164, 5,173,136, 16, 17, 34,145,181,214, 90, 67,134,136, 68, 51, 58, 51,167, 40, 34,147,233,116,107,
+251, 4, 17, 34,226,207,252,204,171, 17,229,227, 31,255,196,251,222,247,222,183,188,229,255, 92,188,184,243, 89, 44,196,172, 96,
+ 13, 0,128, 16,145,200, 24, 99,140, 1, 0, 17,209, 4, 96,141,229,170,170,121, 36,210, 9, 51, 17, 25, 99,171,170,174,170,186,
+170, 42,107, 45, 25,131, 8,160,235, 98, 78,156,244, 19,167,152, 88,152,227,149, 87, 94,117,217,229, 87, 60,251,217,207,117,174,
+111, 23,243,119,189,235,157,191,246,235,191,121, 79,232,120,230,204,153,179, 55, 60,141, 89, 0,193, 24, 83,215,117, 93, 55,117,
+221,212,117,109,140, 85, 24, 25, 67, 96, 17, 64, 64,200,251, 41, 34,198, 24,173, 53,171,186,174,234,218, 26, 67, 68, 72, 4,136,
+198, 90,181, 28,145, 17,128,196, 28,130,119, 62,244,125,223,119,221,162, 93,204,231,179,217,236,112,125,186,246,132,199, 63,230,
+195, 31,249, 72,239,220, 0, 65, 45, 0, 76,215,214, 0,128,144, 8, 17, 9, 69, 68, 56,113,138,204,236,189,111,219, 69,140,145,
+144,136,140, 8, 35,128, 53, 22, 42,161,188, 93,214,218,138,136,128, 16, 0, 53,184,233, 46, 51,115,136,209, 57,215,247,109,223,
+247,222,251,224,189,178, 31,237, 98,190,152,207,218,197,162,239,219, 23,124,205, 87,191,237,237,239,248,216, 77, 31, 95,110, 89,
+101,140,128, 8, 51, 51, 67, 2, 64,202,158,144,146,158,190,224, 92,140,129,140, 53,198, 20, 7, 50, 85,149,109, 0, 32,194, 12,
+ 64,122, 50,244,117, 99, 76, 33,184,190,235,251,190,115,125,239,189,139, 49,166, 24, 67,240,125,175,150,106, 93,223,197, 24,172,
+173,191,228,233, 79, 59,178, 32,230, 4, 0, 72, 68, 96, 88,178, 47,233,255,136, 84, 55, 35, 50,198,185,222,117,109,183,232,140,
+ 49,182,174,173,181,154,135,131,119, 62, 32, 8,176, 40,125, 33,194,138, 95,180,164, 9, 33,134, 24, 66, 74, 73, 97, 87,240, 46,
+120, 31, 67,212, 99,164, 96,121, 60,153, 30, 61,101,182, 18, 97, 17, 72,249, 53, 21, 65,234, 27, 22, 22, 97,253,201,102,140,198,
+198, 16,218,174,227,180,208,221, 41,103,130,213,114,186,107,122,216, 0,209, 26,203,156,132,165, 44, 48,132, 24, 99,140, 2,130,
+ 68, 68,134,144,170,186, 30,141, 39,255,242,133,207,255,229, 95,249,141,188,160,148,152, 57,233,187,147,229, 3,132, 37, 50,167,
+ 24, 83,208,226, 40,120,231,250,190,115,174, 15, 62,196, 24, 82, 74, 25,141,145,177, 85,101,173, 53, 70,233, 55, 99,140, 49,214,
+ 90,107, 69,196, 67, 31, 98,200,182,139, 49,113, 2, 1,107, 43, 24,131,112, 50,100, 16,224,212,201, 75, 78,158, 56, 46, 34, 22,
+ 0,156,235, 83, 74, 44,172, 39, 54, 27, 94, 18, 39, 78, 49,133, 24,188,115, 74, 70, 56,231, 92,223, 59,215, 43,250,212,130,196,
+144,181,181, 37, 34, 38, 84,228, 79,164,249,196,214,117,131,136,156, 18,162,227,225,145,152,133, 1,177,110, 70, 68,168,142,149,
+ 82,122,254, 87,127,213, 27,222,244,187, 74,170,244, 33,134, 24, 99,138, 41, 37,133,235, 49, 69, 13, 32, 41,197,168,251, 31, 66,
+136, 33,120,239, 83, 12,222,123,245, 52,107, 45, 24, 64, 45, 54,137,180, 18,179, 85, 85, 85,117,211, 52, 85, 85,167,164,165,139,
+ 48,171,129, 98,140,129, 83, 2, 69,185,130,128,164,181,224,104, 52,185,254,137,143,179,202,118, 43, 48,119,206,121,231,242,137,
+ 40,101, 4,231,248, 38,137, 83,118, 23,102, 68, 36, 18, 61, 9,134,168,170,171,186,105,148,164,210, 20, 91, 85,149, 49,150, 57,
+117,157, 15,193,199,168,160,222, 43,255, 67, 68, 32,210,133,150, 0,109, 93,143, 38,107, 49, 56, 99,109, 85, 55, 22, 0,218, 54,
+ 47,200, 43,140, 15, 33,165,164,150, 5, 61,201, 26, 21,202,187, 28,182, 85, 55, 8,137,172,173, 70,163,241,100, 58, 25,141,198,
+117, 93,147,181, 40, 16, 98,232,187,174,107, 23, 74, 60,245,125,223,183,173, 15, 94,152, 23,139, 89, 12, 97, 50,153, 54,107,235,
+227,241, 84,132, 29, 0, 32, 24, 99, 45, 0, 44,230,115, 31, 92,112, 33, 4, 23,124, 96, 73,154,205,136, 0,192, 20, 15, 7,100,
+ 6, 0, 86, 82, 42,165,156,130, 17,203,154,114,132, 76, 41,121,221, 92, 37,222,186,174,107,219,118,177,104, 23, 11,239,221, 98,
+126,120,176,123,190,110, 38,219,167, 78,111,108,110,142, 39,107,198,152,224,157,158, 86, 50, 70, 23, 52, 11, 33,196, 24, 82,212,
+162, 5, 40,167, 85, 16, 97, 0, 13,153,172, 79, 80,250, 65, 52,213, 16, 35,162, 49, 38,198,216,247, 29, 11, 35, 18,136, 36,230,
+ 20, 67,240,190,119,174,239,218,174, 93,116,109,215,119,139,221, 11,231,186,118,118,233,153,135,156,124,192,165,211,181,181,186,
+174, 17, 49,135, 92, 17, 76, 41,159, 50, 1,208,163,139, 21,105,116, 65, 66, 4,212, 40,148, 82, 2, 9,217,155, 66,240,193,235,
+202,132, 25, 16,172,177,174,239,188,243,174,239,172,173,200, 16, 0,112, 98, 45,130,250,174,235,218,182,235, 22,174,109,119, 46,
+222, 49, 93, 63,246,200,107,159,180,181,189, 61, 26,141,137, 72,125, 60, 7,157,148,188,247, 49, 4, 91, 86, 64, 4, 25,129,136,
+ 0, 48, 48,176,128, 32,128, 49,132,212, 24, 99,163, 49,198, 88,242, 85,140,158,147, 0,138, 46, 60,197,120,120,176,119,176,183,
+131,132,214, 86,198, 88, 17,137, 41, 4,239, 53, 70,244,237,108,118,176,251,248, 39, 63, 99,243,216, 86,211, 52,198, 88,102,214,
+ 60, 50,120,174,235,186,249,236,112,118,184,111, 17,241,131, 31,252, 75, 41, 81,241, 72, 5, 80,254, 90,162, 48,228,229,102,139,
+106,125,138,132, 74, 15, 33, 71, 62,156, 31,204, 14, 15,124,223, 49, 71,102,209, 51,127,217,153,171, 47,191,234,225,139,174, 59,
+ 56,156,241,234, 35,197,184, 2,222,163,247, 93,215,223,207,248, 70,173,205,238, 63,139, 57,123,246, 44,173,236,204,253,226,113,
+255,170, 92,239,143, 11,250,244,165,244,246,246,246,238,238,238,145, 67, 7,240,136, 71, 60,226,146,211,167,207, 92,113,197,177,
+173,173,118,209,222,121,231, 29, 55,223,124,243,135, 62,244,161,191,169, 5, 93,122,233,101, 47,255,238,239,126,204, 99, 31,167,
+205, 15,223,247,222,187,195,253, 29, 36,211,140,198,198, 86, 74,171, 34, 25, 45, 75,148, 12,214,240,120,120,176,255,147,175,122,
+213,123,223,251,222,251,128,111, 56,115,230,204, 98,177,248,157,183,252, 30, 32,106,208, 76,133, 82, 47,164,250,236,240,112,127,
+109,125,107, 60, 30,219, 92,238,216,130,194, 8, 0,137,128, 89,148, 44,191,241, 93,239,252,153, 87,255,199,191,214, 41,123,241,
+ 55,254,219,183,188,245,237, 72,182,236, 15, 34, 25, 34, 99,172,181, 85, 93, 53,205,100,109,125,235,248, 9,215, 47, 20, 31,102,
+ 40, 41,146, 25, 99, 84,186,220,214,117, 51,154, 76,159,244,228,167,188,230, 53,255,101,109,109,250,133, 59, 53,230, 26, 35,149,
+122, 26, 50,224,167, 12, 66,171,170,174, 71,227,245,141, 99,237,226, 48,122, 87, 16, 52, 43, 30, 1, 0, 4, 36, 67,214, 86, 77,
+ 61,154, 76, 38,163,209,248,199, 94,249,163,215, 95,247,132, 47,112, 65,137,147, 66,111,230, 56, 0,217,188, 82, 99,140,173,140,
+173, 42, 91, 85,117, 51,153,110,120,239,246, 46,222,157, 98, 84, 24,169,245, 46, 34, 16,146,181,182,174,171,209,104, 52, 26,141,
+ 16,225,171,190,242,121,223,242, 77, 47,254,130, 22,148, 83,110, 74, 81,193,160,112, 46,244, 9, 17,149,143,177, 85, 85,168,221,
+166, 30, 77,103,179,131,217,254, 94, 12, 94, 56, 41, 62, 65, 16,144,196,156, 88,152,136,172,177,193,247,151, 94,122,217,119,125,
+199, 75, 63,239, 5, 9, 75,102,131, 57, 9,107, 33,196, 90,121, 98,134,168,121,239,140, 49,138, 76,200, 84,104,108,215,245,179,
+195,195,131,189,221,253,221,157,221,157,243, 23, 47,156,223,219,219,109, 23, 11, 17, 24,141,167,205,104,226, 92,187,181,117,252,
+251,190,231,229,159,103, 96,204,229, 47, 2,162, 96,249, 2, 65, 0, 51,255,161, 5,148, 49, 90,183,107,197,166, 85, 62,145, 33,
+ 91,137, 64,140, 28, 98,116,125,239,189, 87, 33,201, 37,167, 47,219, 62,113, 42,133,112,252,248,246, 79,252,135, 87,126, 94, 78,
+189,124,104, 98,211,211, 70, 43, 88,141, 74,181,165,117,123, 41, 9,149,178, 33, 50,214, 86,149,181,149,181,149,177, 86, 15,232,
+104, 60,185,244,242, 43, 31,250,200,107,142,111,111,141,198,227,159,254,201,159,248, 92, 3, 35,106, 13,205, 32, 40,194, 2, 0,
+ 40,130,185, 3,166,121,151,181,189,144,201,141, 21,120, 68,132,100,140,181,134,200, 32,228, 42, 87, 31,144, 9, 36, 28,143,199,
+ 39, 79,157, 70,128, 55,188,254,127,253,217,159,189,255,173,111,123,235,251,222,247, 39,159,145, 99, 4, 96,102, 0, 24, 56, 43,
+132,188, 33, 72,136, 0,204, 40,162,149, 47, 17, 25, 67,164, 52,153,238,178, 89,122,152, 37, 66, 16, 72, 28, 83,140,194, 92, 58,
+195, 0, 0, 2, 50, 26,143,175,187,254,250,199, 63,225, 9,222,247,127,116,227, 31,190,250, 63,253,236,189,248,208,192,122,101,
+222,147,243, 98,136, 12, 41, 69, 3,197,149,140,181,150,172,213,165,228, 80,173,223,181,149, 86, 29,182,170,234,102, 52, 26, 79,
+ 70,147,105,211,140,171,122,100,108,133,100, 0, 48,177, 68,230, 24, 83,140,252,232,107,175,253,233,159,122,213,208,224, 58,178,
+ 32,214,170, 38,198, 82,106,233,155, 54,182,178,186, 25,186, 71, 89, 59, 67,198,154, 92,192,231,160,160, 95,150,239,144,209,239,
+ 85,182,170,108,221, 24,107,145,140, 8,164,196, 49,166,224,131,243,174,239, 93,239, 92,240,225,251,191,251, 59, 63,173,133,212,
+133,169,178,182,174,234,186, 30,105,123,210, 26,107,136, 10,109,148, 64,148, 98,163, 97, 53,136,164, 62,100, 52,181,149, 66, 14,
+ 53,168,146,209,143, 90,202,133, 24,115,203,170,119,202, 26, 57,239,122,231,254,205,215,127,221, 61, 23, 68,198,228, 66,124, 52,
+ 26,141, 71,117, 83, 91,107,141, 33, 4, 73, 41,250, 16,130,119, 41, 38,237,186,170,200,160, 80, 28,132,148,255, 66, 72, 80, 90,
+206,186,161, 90, 93,169, 39,100, 82, 32,132,140, 35,188,215, 0, 17, 66,104,154,250,234,171,174, 60,178, 32, 99, 76,211, 52, 77,
+211, 84, 85,101,140,201, 86, 73, 49, 70, 37, 62,122,231,186,224,251, 24, 99, 57, 62,128, 68,217,203,200,168,227,175,226, 96,205,
+188,154,238, 98,202,160, 33,248, 16,188, 47, 11,243,193,123,223,247,222,251,232,195, 63,253,178,103, 30, 57,101,132,104,140, 1,
+ 4, 2, 20,145,148,162,158,106, 22, 73,234, 93, 62,176,176, 49, 76,198,104, 66, 69, 0,107,141, 26, 8,145,244, 16, 65, 38,143,
+ 69,233,119, 22, 86,244,162,146, 18,181, 77,212, 2,185, 44, 43,165,200,194,134,170,209,168,233,123, 87, 0,154, 54,220, 5, 88,
+162, 54,101, 17, 49, 87,105, 0,218,214,240,157, 75, 49, 26, 91, 17, 17, 39,214,115,103,200, 32, 96,161,203, 24, 16,181,190, 86,
+238, 45,134,208,187,190,239,123,175,236, 86,136, 3,163, 18,243, 35,113, 98,237, 99, 76, 38,147,149, 5, 9, 8, 39, 37,240,141,
+209,176,148,153, 57, 4, 52,182,106, 70,227,196,220, 45,230, 33, 6,107, 43, 34,131, 72,214, 90, 50,148, 77, 1,156, 35, 89,169,
+ 42, 83, 74,222,251,190,107,189,119,234, 43, 41, 51, 77, 49,198,200,156, 56, 67, 23,101,223,232,178, 75, 79,239,238,238, 13, 16,
+ 86, 16,128,140, 65, 36, 86,118, 65,223, 35,106,203, 3,200,216,166, 25,139, 72,223,181, 49,248,170,170, 81, 11,120,230,152, 34,
+ 36, 6,204, 76,121, 33,143, 88,237,160,219,148, 98, 92,109,229,106,180, 27,192, 58, 17, 25, 91, 61,236,161, 15,254,203, 15,126,
+184,164, 14, 68, 50, 54,159,139, 21,144,166,105, 68,191, 64,194,170,174, 1,145, 99,140, 49,184,190,143, 38,154,204, 9,131,128,
+164,196, 74, 30, 42, 5,200,137, 51,226, 22, 30,186, 76,137, 89, 41,175,196, 67, 18,215,188,103,175,190,250, 65, 43, 32, 31, 81,
+129,232,192,164,150, 38, 85, 73, 90,249, 59, 0,128, 44,144, 88, 98,140,226,131,158, 44, 17, 80,158, 85, 65,192,224, 84, 49, 50,
+ 25,131, 3, 53,192,138,114,152, 83,210,124, 98, 12,113,202, 45,140,186,174,143, 84, 29,153,103, 40, 60,115,225, 98,139, 62, 66,
+ 35, 99, 74, 81,207,171,115,193,251,236,147,169,172,148,200, 26, 83, 74, 17, 13,217, 57,116,139,176, 98, 4, 22,102, 73, 69, 69,
+167, 49, 63,229,240, 73,230, 81,143,124,216, 7, 63,252,177,220,192,211,182, 82,177, 4,103, 78, 70, 6, 83, 39,230, 20, 99, 8,
+ 49,122,231, 52,166,121,239, 57, 69,197,225,154,105,196, 90,229,227, 6, 24,103,141, 37, 99, 64, 36,132,144,125,128, 33,191, 87,
+ 68, 99, 44, 40,193,133, 0, 0, 79,125,242,245,121, 65,204,146, 18, 31,101,168,243, 35,163,219, 24,189,247,193,103, 98,184,239,
+123,165,172,149,108, 68, 34, 16,237,111,152, 21,214, 6,149, 89, 51,182,210,190,209,192,166,107,196, 7, 1, 21,147,114,138, 32,
+146, 82, 50,182, 94, 95,155, 0,128, 21,230, 24, 67,110,185,151,204,207,146,113,109, 82,217,136,243,222, 59,223, 59,215,187,224,
+189,243, 46,134,160, 71,157,136,176, 66, 17, 97, 16, 83, 66,182,230, 56,133, 74,204, 6, 17,151, 46, 89,220, 65,247,215, 90,203,
+204, 34, 9,137,158,251,229,207,188,229,206, 93,203,194, 26,178,138,161,180,209,149, 41,174,162,194,210, 20,228,135,147, 28, 99,
+150, 30, 13, 73,131, 32,227, 20, 50,134,180, 79, 99,140,177,150, 98,196, 28, 24,178, 31,232,185,203,128,203, 88,223, 45,180, 51,
+182,190,113, 92,238,216,177,204, 28, 98,224,152, 35,169,254, 97, 86, 18, 61,169, 26, 38,134, 48,172,174, 84, 1, 89,225,153, 1,
+157, 26, 38,183,171,169,112,231, 85,222, 44, 16, 89, 70, 42,173, 38,132,140,106, 67,162, 32,165,232,201,152,241,100, 2, 0,150,
+ 19,167,160,242, 24,237,103, 21, 58, 54, 37,133, 74,156,202,202,180, 90, 74, 92,200, 96, 64,212,142,172, 54, 23,173, 49, 70,235,
+202,170,174,117, 77, 26, 34,135,142, 66, 42, 17, 82,125, 57,197, 32,234,127,204,166,172,222, 50,167, 2, 14,156,235,157,247, 46,
+248,144, 56,234,207,107, 44, 80,167,202, 65, 54, 7, 37,212,192,159,219,161,214, 86, 85, 85,215,165, 31, 89, 55,214, 86,136, 24,
+ 57, 36, 77, 97, 37,124, 39,221,107,130,224, 61, 51, 91,107, 43, 91, 39, 83,105,114, 4, 0, 91,148,153, 81, 29, 37,120,239, 67,
+ 72, 49, 22, 11,203,145,188, 32,171, 4, 40,230,146, 9,209,100, 42,160,110, 70,163,186,170,109, 93, 17, 82,140,193,251, 16, 99,
+228,178,243, 49,196,148, 18, 34, 6,239, 98, 8,182,170, 84, 87,196,156, 56, 69, 44, 22,226, 12, 12, 66,254,156, 50,244, 73, 67,
+ 22, 81,212, 63,160, 29, 61, 95, 3, 65, 75,132,214,216,186,110,154,166,169,235,218,218,138,144, 18, 39,237,103,149, 22, 89, 12,
+193,171,188, 56, 4,223,119,173, 49,166, 25,141,181,135,156, 82, 26,104, 95,155,146,178,225,185, 31,166, 69,190, 38,124,133, 94,
+ 34,130, 40,200,165,101,158, 45, 36, 67,135, 53,215,183,214, 24, 99,145, 72, 68, 50,151,227,156,243,126, 16, 92,133, 16,152, 83,
+240,110,118,120, 0, 0,235,155, 91, 77, 51,170, 71, 35, 67,100,173, 85, 7, 0, 0, 27, 83,116,189,139,218, 20, 11, 62,198,164,
+ 1, 99, 40, 98,151,198, 24,226, 55,103,228,176,164,216, 74,187, 58,165, 20, 33,113,140,170, 26,241,174,215,198,175,207, 94,225,
+ 15,246,118,156,235,182,142,159,154,174,173,141, 39,147,166,170, 19, 39, 99,109,249,141, 96, 83, 76, 42,188,211,230,104,233,117,
+ 80,201,147,229,207, 50, 86, 38,245,107, 68,100, 98,109, 22,105, 48,243,206, 41,184, 83,146, 94, 37, 98,125,175, 66, 49, 23,188,
+ 59,220,223,157, 29,238,108,109,159,222, 60,190,189,182,190, 49, 26,141,136, 12, 7, 33, 50,198,100, 80,101,181, 79, 50,116,199,
+ 16,134,194, 26,114,203, 53,183,119,243,217,103,142,154,250, 84,146,101,173,229,148, 98,136,222, 59,141, 8, 82, 50,177,243,174,
+215,102, 71,219, 58,215,207,103,135,123, 59,119,173,109,108,159, 56,117,201,198,230,214,120, 60,214, 85, 32, 2, 33,114, 41,226,
+109,241, 9, 64, 84, 1, 78, 46, 11,151,138,135, 35, 41, 95,137,161,164, 63,204,108, 17,209, 88,107,173, 3, 0, 99, 60, 2,106,
+244, 82, 31,234,186,182, 91, 44,250,190,237,218,197,254,206, 93,100,171, 7, 92,122,197,177,227,219,227,201,180,178, 86, 51,119,
+110,199,169,140, 16,192, 14, 71,151,180, 70,214, 62, 76, 78, 73,196, 76, 9,163, 4, 73,197,129, 52,195,165,196, 32, 66, 38,164,
+ 20, 53, 76,166, 20,201, 24, 66,146,188,101,190,239,251,174, 93,104,127,126,126,176,215,117,237,213, 15,189,230,248,137,147,147,
+233,180,178, 21, 8,164,172,239,200, 13, 56, 31, 66, 6,249,170, 35,129, 34,219,128,225,136,231, 90,215,136, 8,179, 73,108, 12,
+153,132, 49, 21, 24,174,209, 69,157,171,106,234,202, 86,170,126,208, 45,235,250,206,117,109,223,119,125,183, 56, 60,216, 57,243,
+192,135, 61,224,244,165,107,235, 27,117, 93,131,150, 52, 25,178,197, 16,131,247,174,107, 23, 75, 90, 24, 1, 17,144,145, 17,115,
+155,172,236, 35, 0,160, 49, 6,170, 90, 9, 24, 36,178, 85, 37, 44, 74, 23, 1,115, 74,177,239, 23,125,223, 26, 50,166,170,180,
+ 13,173,199,182,239,123,239,186,249,225,206,201, 75, 46,191,234, 33, 15, 31,143,199, 85, 93, 3, 64,226, 33, 41, 5, 31,130, 10,
+168,103, 7,251, 10, 63, 36, 21, 31, 17,144, 82, 97, 73,105, 39,150,115, 77,104, 43,171, 29, 49, 53, 42,101,225, 23, 2,131,247,
+110, 54, 59, 56,216,219,139,135, 94,247, 63,113, 74, 49,184,190, 95, 44,246,215, 55,182,159,240,164, 27,170,202,234, 11,199, 2,
+245, 99,140, 33, 68,239, 92,223,182,237, 98,214,181, 51, 0,176, 23, 46,156,207,253, 94,144, 21,234,126, 72,228,234,188,146,139,
+ 28,197,252,152,217, 53, 85, 16, 81,169, 21, 19,154,206,167,197,252, 48,134,144,253, 45,198,181,141,173,173, 83,151,223,114,203,
+ 45, 49,134,196, 67,103,187, 28,145,210,123, 15,222,135,208, 3, 0,158, 61,123,118,111,111,111,127,127,255,254,214, 22,250,187,
+125,136,200,177, 99,199,182,182,182, 44, 0, 28, 28, 28,220,118,219,109,255, 96,148, 79, 21,121,110,109,109,209, 63, 24,226,239,
+ 89, 59,241, 31, 12,244,247,236, 97, 63,243, 63,175,175,175, 63,235, 89,207,122,250, 51,158,113,213, 85, 87, 3, 64, 74, 81,117,
+ 87,179,217,225,141, 55,190,235,246,219,110,159, 76,166,211,181,233,100, 50, 61,182,117,236,138, 43,174,184,228, 1,151,104,230,
+204,194, 22, 44,176,118, 41, 96, 93, 21,111,228,130,237,163, 31,249,200, 7, 62,240,129,247,188,231,221,159,252,228,205,247,187,
+ 72,116,246,236,217,155,111,190,249,214, 91,111,213,175,175,189,246,218,175,126,254,243,175,121,212, 23,157, 60,121,138, 65,184,
+112,111,165, 24,207,244,151,214, 89,202,131,247,237,162,109, 23, 0, 88,143,198, 90, 28,170, 34,150, 10, 81,164, 31,112,137, 67,
+ 75,139, 73,217,100, 0, 21, 5,101,118,131, 83, 12,225,174,115,231, 62,252,161, 15,189,249,205,111,250,248, 39, 62,249,119,101,
+154, 51,103,206, 60,240,129, 15,196,167, 62,245,169,125,223,127,201,151, 60,243, 57,207,123,158, 53, 54, 49, 67,233, 53,175,176,
+123,188,252,192,204, 25,231, 13,136, 95,165,110,174,107,231, 41,166,170, 25, 53,205,200,168,153,136,140, 49, 75, 57, 79, 1, 43,
+128,218,130,200,237,117, 37, 80, 6,222,175, 84,184,222,123, 31, 92,191,179,115,241,151,126,233,151,222,255,231, 31,208, 66,242,
+111,217, 64,230,204,153, 51,207,121,238,243,190,252, 57,207, 85, 46, 83,123, 36,247, 16, 47,101, 49,152, 34,254, 92,200,230,247,
+ 89, 88, 15,237, 70,143,170,186, 65,144,174,155,171, 10, 76,189,100,224,210, 20,232, 13,198, 40, 47,137, 74,130,228,151,194, 50,
+122, 64, 6, 13, 34, 98, 85,213,215, 62,230,218, 47,123,230,151, 62,229,201, 79,250,232, 71, 63, 54,155,205,254,118, 12,180,185,
+185,121,236,216,177, 76,190,198,152, 6, 38,175, 88,103,104, 93, 12, 90,228,242,134,200, 16,138, 16,129,182,235, 9, 85, 36,152,
+155,233,182,170,234, 38,165,212,181,115,230, 84,213,245,116,186,142, 68, 34, 68, 66, 68,152,152,181,161,204, 12,218,109, 43,234,
+246, 82, 42, 3, 26, 35,198, 26, 74,198,144, 33,212,174,105,154,174,175,127,199,203, 94, 26, 66,124,247,187,223,253,250,223,126,
+211,223, 94,144,142,105, 41,248, 95,129,146,131,243,148,230, 14, 34,136, 82, 11, 0, 8, 42,245, 96,212, 6, 21, 35, 25, 50,145,
+ 19,165,220, 4,101, 99,173, 30,201,217,108,198,209,219,186,110,234, 81,221, 52,100, 12,162,100, 78, 86, 8, 0, 76,254, 80,218,
+241, 8,144,187,207, 34,201,198, 44,102,175,172,247,189,239, 57,197,235,174,123,226,245,215, 95,247,209,143,125,236,183, 94,247,
+250,217,108,254, 55,110, 32,109,210,137,114, 79,159, 90,112,148,254,253, 10, 91, 38,160,155, 45, 2,153, 26, 68, 68,196,132, 58,
+ 60, 0, 49, 1, 68,201,209, 23, 44, 17,216, 10, 64, 66,140, 33, 6, 16, 64,132, 60,214, 57, 30, 3, 8, 33, 8, 11,131, 65,137,
+ 26,247, 84,215, 60,208,109, 0,168,172, 92, 12, 65, 21,211,198, 86, 15,121,208,131,191,255,123,191,231,240, 96,255,213, 63,251,
+115,159, 58,231,122, 95, 26, 40, 11,129,177,136,214,239,241, 20,150, 35,186, 74,214, 25,138,161,138, 37, 16, 33,206,179, 40,128,
+ 0,105, 8,183,192, 40, 8, 56,180, 16, 16, 68, 15,151, 38,180,200,146, 22, 29, 32, 18,102, 58, 1,135,118,228,209,178, 8, 0,
+172,181,227,201,180,110,154,201,100, 58, 59,220,219,223,219,177, 85, 13,136,235,155,199,126,232, 7, 94,209,117,221,207,191,230,
+181,183,220,122,219,223,136,129, 72, 57, 15,193, 79,173,216,238, 97,175, 44, 53, 85,189, 67,142,183,152,197, 33, 34,196, 0, 4,
+144,103,138, 4,137,129,151, 63,174,157, 79,196, 28,241,139,148, 36, 39,123,202,253,173,204, 14,229,201, 2, 25, 98, 57, 26, 91,
+ 25, 11, 32,245,120, 60,217, 56,182,117,250,242, 43,251,174, 61, 60,216,243,206,167,148,166,107,107, 47,123,217,191,115,125,255,
+171,191,250, 63,222,255,129,191,184,175,129,226, 74,147, 66,253, 95, 35,142, 8,136, 50,108,156, 89, 87, 80, 65, 71,126, 59, 56,
+ 84,117,250,166,152, 0, 69,136,200, 48,137, 33, 98, 98,212,159,102, 89,118,185,192, 24, 88, 38, 49, 34, 67,102, 41,199, 41,155,
+146,219, 99,153,209,144,149, 3,190, 52,217,120, 60, 57,190,125,178,124, 67,152,147,115,238,219, 94,250,109,139,249,226,191,254,
+183, 95,252,240, 71, 62,146, 82,244, 62,220, 7, 6,194, 97,103, 97,233,225,185,137,200, 75, 82, 72,178, 88, 97, 9,143,151,241,
+ 9, 0, 8,136, 81,136, 72,128, 13,145, 16, 25, 67,194,204,132,200, 2,160,179, 4, 43, 71, 83, 27,141, 6,179,204,197,100,253,
+ 8, 29,225,126,178, 55,149,126, 70,201, 29,178, 66, 18,229,173, 50,214,214, 77,179,190,190,113,226,132,252,200,191,255, 97,145,
+ 60,242,210,247,125,187,152,125,232, 67, 31,121,221,235, 94,247,201,155,111,249,130,130,116,118,235, 12, 17, 21, 8,221, 99,199,
+178, 70,136,142, 40,176, 6, 83, 50, 75,142, 85,152,117,231, 66,198, 24,129, 1, 58,164, 40, 72,176, 66, 50, 99,193, 80,218, 72,
+ 83, 87,162, 34, 10, 66,194, 37,181, 57,116, 55,153, 11, 22, 57, 2,215,242, 27,208, 79, 8,128,229, 7, 0, 5,176,170,155,117,
+ 99,159,240,196, 39, 62,250,218,199,112,138, 23, 47, 94,120,243,155,222,252,142,119,221,248,121,101, 49, 73, 41,102, 18,143,143,
+ 56,180, 34,223, 44,172,164,172,121, 93,201,198,195,234,147, 18,123, 74, 62, 34, 24, 18, 81,182,214, 8,136, 64, 4,200,251,191,
+ 34,171,203,253, 61, 99,138,149, 76, 1,220,116,100, 7,192, 12, 43, 82,254,117,104,142, 75, 33,241,185,232, 58,203,188,214, 17,
+158,112, 24,213,138, 33, 52,205,248,217, 95,241,236, 47,123,230,151,190,235,198,119,253,222,219,254, 96,181,111,244, 25,178,216,
+160, 51,205,138, 51, 69, 36,131, 69, 86,172, 99, 86,189, 71, 68,152,137, 57, 14,203, 5, 17, 85,106, 32, 17, 10,152, 18,111, 0,
+ 65,123, 92,197,121,178,132, 76, 49,115, 54,147,106,158, 74,219,166,156,158,252,155,176,104,163, 0, 69, 16, 36, 49, 18,229,129,
+ 60,157, 55, 21, 29, 41,205, 13,226,124,145,193, 82, 98,162, 74,156,224,189, 15,206, 57,239, 31,251,216,199, 94,243,168,127,244,
+214,183,189,253,207,255,226,131,159, 53,139,105,188,144, 65, 81,153, 21, 92, 5,252, 15,140,239,112,242, 7,159, 31,122, 29,131,
+ 26,163,104, 50, 96,217,157, 48, 68, 66, 96, 44, 64, 28,124,112,120,104, 85, 65, 88, 36, 16,195, 32,102, 22, 30,107, 67,144,134,
+ 6, 51,228,127, 34, 80,145, 12, 0, 51,228, 85,164,196,203, 78,117,212, 38, 84,204,189,244, 16, 66,136,222,133,220, 10,116,222,
+249, 24,195,211,110, 56,245, 9,220, 77, 0, 0, 11, 30, 73, 68, 65, 84,123,249,101,151,254,239,183,188,245, 51, 25,104,144,126,
+ 44,235,237,124,136,224,136,183,228, 8,174, 18, 73,157, 12, 74, 49,250, 16, 3,199, 50,144,178, 60,122,178, 2, 18,242, 16,141,
+ 30,150,226, 65,104,244,152,169, 16,145,150, 98, 68, 88,245, 29, 0, 68,100,102, 66, 82,128, 90, 52, 40, 42,173,225, 84,222,127,
+204,122,229, 60, 14, 55,232,129,226,224, 62,249, 62, 21,175, 50, 47,253, 41, 17,185,250,234,171,190,225, 95,189,240, 23,126,241,
+ 87,238,221,131,140,169,235, 58,147, 53,184, 90, 69,230, 33, 50, 97, 30, 36,101,203,246,127,226, 48,236, 76, 8,138, 53,245,160,
+232, 17,201,157, 17,109,125,194,178,217,165, 5, 41, 46,133, 51,165,186, 32,194,101,117,188,138, 78, 65,139, 28,144,101,192,206,
+ 94,146,155,201, 62,132,168,237,246,200, 75,133,212, 74,252, 89,106, 1,189,119,106, 44,157,248,210, 66,115,212,140,158,113,195,
+ 83,223,254,206, 63,188,151, 52,159,243, 60, 74,102,103,150,104,141,203,157, 70,136, 88, 90, 49, 32,144,163,226,176,120, 17, 86,
+221, 71,140, 88,238,177,161, 85,217, 82, 25,142, 71, 90,234, 29,169,112, 68,148,249, 2,102, 25, 78,214, 17,128,177, 68,212,131,
+ 50, 35,150,160,171, 31,139,194, 34, 14, 82, 89, 53, 80,121,166, 14,157,170, 93,130, 78, 99,114, 74, 80, 2, 62,146,121,224,149,
+103,214,215,166,179,249,226, 94, 24,197,172,123, 27,252, 87,241, 50, 18, 82, 25,255, 7, 36,200,170,187, 98, 25, 21,119,100, 40,
+141,222, 7, 31, 67, 16,241,136, 67,182, 38, 56, 10,239, 12, 13,234,221, 50,127, 36, 44,140, 64,200,130,171,149,224, 61,230, 89,
+178, 10,122, 41,132,137,131, 74,103,144,199,172,204,191,103,170,111,152, 54, 45,151,207,168, 6,143,243,200, 39,171, 59, 35,145,
+153,174,173, 77,167,247,102, 32, 17,144, 36, 34, 40, 42,133,211,171, 6, 64, 20, 35, 3, 22, 75,231,231,114, 81, 89, 8,104,232,
+168,180,117, 77,182,138,198,135,160,194, 3, 30,244, 40, 69,144,187, 18,151,145,164,104,202,114,179, 59, 21, 96,161,246, 63, 90,
+229,228,115, 61, 88, 34, 79, 68,198, 65, 86,147,231,129, 53,199,171, 19,229,231, 71,181,137, 42, 68, 56,159, 10, 30,164,199, 26,
+ 15,141,177, 85, 93, 63,252, 33, 15,190,235,238,243,247,226, 65, 56, 4,229, 12,173,139,118, 1, 69,150,184, 49,139,178,116,108,
+114,229, 13,168, 30, 89, 59,235,100,141,173, 26,221,188,124,151, 3, 51, 35,146,112,201, 95, 9,137, 16, 48, 18, 13, 82,145, 1,
+112, 14,133, 24, 15,194, 27,201, 35,180, 71,252,169, 96, 31, 30,230,202, 83,254, 78,226,172, 6, 27, 98, 16, 23,139, 97, 62, 24,
+ 88,196, 86, 58,162, 98,201,218,186,170,191,232,209,215,188,243,143,222,253,105, 99, 16,145, 49,229,246,138, 35,194,201,229, 36,
+ 2, 44,205,164,243, 38,165, 52, 41,231,146, 7,108, 73,198, 34, 38, 84, 13,113,105,122,115,140, 73, 35,220,192,191, 14,226,234,
+ 12,228,117,144, 5, 84,180,207,203,209,245,101,249, 42,172,146,143, 66,223, 14,250,190,162,223, 20, 62, 34, 32,211,255,211, 32,
+113, 82, 28, 75, 68, 74,243, 33,149,201, 1, 99,172,181,235, 27,155, 95,252,164, 39,252,241,123,254,239,167, 22,171,144,147,206,
+106,173,152, 83, 70, 97,168,139,156,110, 69,162,179,180,223, 48,163, 52, 92, 60, 80, 70, 11,138,148, 46, 49, 75,145,133,173,156,
+160,165,224,247,104, 19,158, 74, 93, 2, 71, 50, 89,230, 84,150, 40,146, 72,146, 32,162, 14,122,220, 99, 61,131,246,106, 73, 5,
+ 18, 33, 27, 50,108,152, 25,120, 25, 14,141, 33, 67, 22,235,199, 92,251,152, 15,125,248,163,251, 7,179,123,196, 32, 24,232,249,
+ 21,239, 1, 88,157,255,205,145,249,136, 52, 23, 4,100, 69,240, 59,196,197,101,126, 85,190,171,200,183,211,114, 51, 87, 75,124,
+ 37, 39, 53, 22,153, 1,179, 47,241, 42,226,138, 6,145, 86,113, 44, 2, 48, 97, 74, 9, 4, 24,121, 69,161,121,180,250, 24, 20,
+196,160,196,142, 1, 11,200, 9, 10,250, 24,118,101, 60,158,124,241,147,174,251,189,183,189, 35,150, 6,129, 29,100,224,217, 95,
+150, 27, 42,131,251,172, 6,205,165,119, 21, 53,211, 16, 41, 7,116, 63,148, 62, 25,227,167, 24, 67, 28,124,138, 75, 35,169, 8,
+159,242, 12,188, 33,202,204,181, 49, 8, 96,136,132, 69, 59,155, 5,158,229,145,163,172, 94,213,113, 36, 22,196, 24,152,145,115,
+ 49, 88,234, 86,190, 71,140, 0,206,232, 94, 85,149, 69, 74, 15, 84,196,250, 42, 32,123,224,149, 87,254,179,103, 61,253,141,191,
+243,182,149, 90,172, 44,125, 85,243, 34, 71,173,181, 44, 23,243,129, 7, 21,123, 22, 88,146, 82,138,249, 50,135,108, 30,253, 52,
+ 12, 0,100, 39, 90,221, 79, 89, 2, 72, 67, 0,156,161, 18,138, 72, 30,195, 66, 65,201,244, 37,194,114,183,243,156,164, 49,198,
+152,148, 18,128,176,177,204,156, 48,201,234,226,151,199, 77, 68,152, 81,111,247,160,108, 72, 91,233,116,138,102, 36,221,101, 97,
+ 70, 50,151, 95,126,197, 23, 95,247,216, 79,220,122,215,210, 64, 49,134,162, 17, 26, 26, 62, 75, 15, 26,226, 17,172,254,190,156,
+ 49,242,117, 20,249, 0,149,218,112,152,135, 72,197,100,171,231, 43, 19,176,195,123,206,193, 87,131,157, 2, 9, 42,121, 6,134,
+225, 39, 42, 77, 33,213,234,235,200, 95, 46,211,150,168,234,232, 99,165,184,215, 77, 97, 0, 18, 20, 68,202,243,131, 54,165, 16,
+ 99, 64, 64, 13,147,198, 16,218,209, 35, 30,241,136,206,151, 43, 16, 84,204, 52, 84,244, 57,176, 45,243, 70, 78, 91,171, 92,194,
+ 81, 74, 33,195,179,114,131,202,112,218, 18, 39,133,254, 69,127,155, 15,114, 9, 61, 58,210,119,164,127,130,121,116,109,217,133,
+ 53,134, 72,203, 54,181,205,112,171,138, 14,250,112,140, 90,168,136,172,132,207, 37, 15, 50,164, 52,205,188, 2,128, 76, 72,168,
+243, 20,138,243, 76,138, 33,166,160, 44,148,206,203,174,173,111, 92,117,229,153,243, 59,251, 43, 6, 82, 15, 75,137,143,124, 74,
+ 57, 66, 41,242, 26,112,202, 17, 71, 42, 86, 43, 10,203, 21,217, 22,175, 56, 38, 15,105,123, 57, 66,133, 75, 18,174, 12,208,101,
+230,204, 26, 75,102,153,101,140,177, 38,203,178,243, 95, 84, 86, 11,136, 82, 54,118,233, 55,194, 43,123, 21,143, 94,143, 66, 68,
+148, 71,166, 98,130,162,163,101, 22,192,164,113,205, 88, 2,168,117,164, 97,121,196,242, 53, 82, 41,199,163,124,191,197,224, 11,
+ 5,140, 29,241, 93, 37,153,143,246,169,151,190, 87, 28,173,108, 44,172,180, 84, 33, 51,148,184,202, 57, 13,252, 98,246, 17,253,
+156,207,148, 49,100,109,238,187, 26,210,246, 64, 76,161,228,202,196, 50,236, 75,202,240, 71, 49,162,170,115, 7, 69, 40,128,190,
+ 67, 40, 11, 82,250,174,170,154, 20, 2, 14, 83,169,150, 12, 45, 13,148,197,183,131, 12,125,232,184, 39,189, 79, 39, 67,174,229,
+ 81, 91,210,156, 75,175, 88,189,150, 72, 68,247, 8,100,213,247, 75,105,139, 90,144, 22,122,103,184,118, 71,135, 97,135,249, 74,
+ 53,146, 53,165,199,175,230, 83, 44, 44, 34, 90,113,168, 22, 94,195,224, 50,129, 22,138, 44,133,229, 13, 72,122,251, 87,214,237,
+231, 81, 75,139,198,234, 30,136, 73, 30, 80, 36,225, 64,153, 27, 3,229,246,165, 84,110,203,225, 52,220, 44, 84,174,128,185, 71,
+246, 89,118,168,203, 68, 23, 46, 11,220,149,192, 94, 0,225, 74,220, 95,161,211,112, 41, 77, 26,244,208,122,160,244,186,180,170,
+170,213, 80,198,216, 66, 60,230,218,127,224,233, 66, 25,104,204, 53,125,222,204,200, 49, 19, 28, 41, 6, 61, 95, 74, 69,132,224,
+ 83, 12, 41, 49, 32, 88, 91, 25, 83, 83,249,117,100,140, 36, 18,128, 20,113,133,120,160, 35, 6,138, 49,106,161,183,164,157, 98,
+138, 41,202, 50,184, 14,239, 29,202, 16,100,190,136, 77,212,227,181, 75,168,168,124, 25,125,151,232, 22, 80,111,154, 1, 4, 20,
+100, 0, 83,176,141,100,199,206,215, 55,229,137, 15,141,196,122,250, 52, 25, 47,213, 55,229,126,134,124, 7, 87, 8, 41,198, 20,
+226, 48,127, 25,243, 52, 6,139,128,222,242, 18,188, 23, 97, 50,182,105, 26,189, 93,162,214, 41, 80,107, 65, 32, 1,152,178,133,
+ 3, 34, 93, 26,200, 59,183,228, 3,202, 17, 27, 38,145, 87, 83,207, 48,131,144,235,126, 45,175,180,161,160, 99, 37, 74,183, 74,
+ 26,132,188, 67, 60, 2, 94,246,111,213,172,165,106, 88,225,122,151,244,107,102,221, 6,228,180, 82,207, 15, 15, 29,199,241,195,
+200, 67,182, 78, 8,153,110,140,209,247,125,223, 45, 98,244,128,212, 52,227,166, 25, 53,163,241,104, 52,174,234,166,174, 43, 99,
+173,142,183,169,227, 16,161,210,248, 3,124,207, 6,114,206,197, 20, 37,199,231,161, 44, 24,178,227, 10,135,190,236, 89, 97,161,
+137,135,194, 62,159,180,149,129,175, 85, 24, 82, 26,249,185, 65, 68,218, 35, 18, 50, 71, 9, 32, 97,144,196, 12, 41, 13, 24,117,
+249, 58, 3,130, 24,168, 84,101,134,188,143,101,112, 43,198,200, 41, 15, 73,170,254, 90,152,235,209,116, 58, 93,159, 76,215, 71,
+227,113, 51, 26,213, 85, 99,171,202, 24, 67,136, 2,144,146,234,233,213, 46,156,119,118,105, 32,253, 5,105,200,244, 60,160,228,
+130,102, 5,100, 40, 32, 11,131, 36, 67,138, 84, 74, 86, 86,240,125, 62,149,204, 75,116, 53,156, 81, 69,178,133, 94, 69,164,196,
+ 76, 67, 11, 32,196,168, 48, 61,175, 88,175,158, 40,175, 81,118,176, 16, 66, 33,150,251,155, 66,240, 62,134, 16, 83, 72, 49,122,
+231,250,110, 62,159,237,251,174,165,170, 90,223,216,222,216,216, 26,175,173,143,199,227,186,174,171,186,214,144,143, 68,106,245,
+ 44,117, 2,224,210, 32, 24, 26,223, 67, 45, 22, 89, 3,141, 6,226,101, 91, 2,151,109,134,229,165,143, 80,176,217,167, 99, 36,
+ 82, 90,169,210, 50,222, 94,233,183, 9, 43, 15,143, 68,194, 75,223, 46, 0,128,153,217, 86, 75,100, 60,140,121,103, 98,168,196,
+160, 50,101,149,133,241,193,151, 97,187, 16, 92,223,182,179,118,182, 31, 99, 24, 79, 55,143,109,159,218,216,220,154, 78,167,205,
+104, 92,110, 2, 49,122,164,121, 37,110,148,179,190,236,216,100,209,196, 0, 98, 17, 81,115, 18, 34, 17, 49,144,145,225,135, 16,
+148, 99, 94, 17,202, 13,119,194, 9,179, 16, 49, 51,174,228,124, 89, 14, 25,175, 16, 95,185,200, 24,230, 49,200, 24,162,104, 99,
+ 21, 35,167, 84, 37, 78, 41, 89,107,131,241, 67,147, 99,160,199,164, 76, 69,106, 8,136,229,254, 70,141, 56,106, 25,157,200,232,
+ 22, 7,109, 59, 35,164,173, 19,167,143,109, 63, 96, 99, 99,115, 60,153, 52, 77, 99,109,165, 45, 92,132, 50,179, 90,198,169,138,
+203,200, 64, 75,100,210,186, 24,168,176,137,132, 36,134, 33, 81,185,183, 87, 64,168,152, 38,151, 60, 26, 20,244,198, 4, 34, 22,
+ 33, 22,102, 70,100,198, 36, 0, 38,243,219, 56, 68,217,193,159,148, 9,206, 45,110, 4, 42, 32,205, 91, 91,249,186,170,245, 70,
+ 16, 91,146,186, 89, 42, 42, 86, 39, 41,211,112,163, 97,177,139,146,246,222, 59,223,119,139, 3,215,187,201,218,250,169, 75,174,
+216, 60,118,124, 50, 93, 27,141,199,117, 93,107,153,162,164,214,128,239,115, 28, 72,203, 38, 44,151,121,221, 16,124,136, 97, 73,
+152,105,204, 20, 32, 29,188,213,168, 44, 32, 36,164, 54,210,217,199,124, 82,150,146,129,124, 75,109,230,247,133,136, 40,165, 92,
+ 6,198, 24,149,251, 99, 98, 76,148, 48, 25, 49, 60, 48,219, 43, 60, 65,202, 87, 38, 59, 85,124, 82,233, 71,107, 17, 34, 75,118,
+142,121, 21,128, 68, 29, 34, 85, 12, 20, 92,183,104,219, 25,139, 92,118,229,131, 78, 93,114,217,120,178,214, 52, 77, 93,213,166,
+178,164,251,170,231,119,217,240,224,161,121,198, 37,232,231, 81,123,239,189,235,156,235,151,132,153, 20, 37,226,192, 9, 65,209,
+ 73,161,138, 1, 80,128, 65, 86,254, 91,153, 60, 28,116, 67, 48,116,171,133,133,140, 45,248, 91, 61, 89, 27, 75, 43,116,215,242,
+ 4, 9,115,241,138,224, 67,231, 18, 39, 16, 89, 17, 16, 33, 64,185,126, 60,147, 7, 49,166,200, 57,215, 59,215, 45,124,112,199,
+183, 79, 63,232,161,143,220, 60,190, 61, 92,132, 91,186, 50,122, 85, 20,175, 28,121, 53, 76,204, 29,128,252, 58,222, 7, 31,156,
+243,174,119,125, 27, 92, 55, 4,233, 50,147, 92, 56,141,123,232, 21, 63,117, 22,102,184, 64,117,192,204, 71,199, 64, 8,141, 32,
+161, 8,193, 82, 1,186,172, 42,238, 65, 12,210,138, 80, 68,209,139,235,251,182,157, 47,230,179,190, 91, 4,239, 56, 95, 6,149,
+117,178, 44,185,169, 28,163,143,209, 35,226,246, 37,151, 95,245,160,135,159, 60,117,106, 60,158,232, 96,232,145, 98, 16, 64, 86,
+ 11,232,114,185,128,246, 20, 53,148,101,148,160, 87,106,120, 31,130,215,198, 28,158, 61,123,118, 64, 40,127, 71,115, 71,159,126,
+210,230,190,121,161,191,222,203, 34,226,255, 7,169,229,123,123, 99,138,172,155, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+ 0};
+
diff --git a/source/blender/editors/datafiles/clone.png.c b/source/blender/editors/datafiles/clone.png.c
new file mode 100644
index 00000000000..324611a2d75
--- /dev/null
+++ b/source/blender/editors/datafiles/clone.png.c
@@ -0,0 +1,343 @@
+/* DataToC output of file <clone_png> */
+
+int datatoc_clone_png_size= 10774;
+char datatoc_clone_png[]= {
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 96, 0, 0,
+ 0, 96, 8, 2, 0, 0, 1, 26,253,208,249, 0, 0, 0, 4,103, 65, 77, 65, 0, 0,177,143, 11,252, 97, 5, 0, 0, 0, 6, 98,
+ 75, 71, 68, 0, 0, 0, 0, 0, 0,249, 67,187,127, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, 40,
+155,120, 0, 0, 0, 7,116, 73, 77, 69, 7,218, 7, 21, 0, 4, 16,211, 77, 59, 52, 0, 0, 32, 0, 73, 68, 65, 84,120,218,237,
+125, 89,208,101,215, 85,222, 90,107,239,125,198, 59,252,147,254, 86,183,108,203,178,100, 2,106,219,106,201, 50, 54,196, 9,161,
+108, 76,149,137,147, 64,202, 84, 5, 30, 82, 64, 24, 94,108,102, 12, 24,120, 8, 46, 8,225,133,209, 85, 41,147,216,174, 60,133,
+228, 33, 84, 37, 41, 94, 82, 4,140, 95,130,193, 41,136, 45, 91,131, 53, 88,106,245,244, 79,119, 58,211,222,107,229, 97,239,125,
+206,185,127,183,100, 25, 68, 42,169,242, 81,247,223,247,158,255,222,115,246,217,123,237, 53,124,235, 91, 75, 0, 95,237,113,247,
+197,139,247,221,247,134,219,207, 35, 0,124,232,103,127,222, 57,139, 0, 68,132, 68, 90,107,163,181, 54,230,195, 63,255,115,225,
+ 67, 31,252,209, 31, 19, 17, 0, 33, 36, 36, 34, 66,182,109, 85, 55, 77,103,237,250,248,191,127,234,127,190,120,245, 42,181,109,
+211,181,109,215,118,157,237,108,215, 61,251,244, 19,207,191,248,194,201,209,117, 4, 6,149,252,200, 15,255,136, 49, 70, 61,116,
+229,138, 48, 51, 51, 11, 60,247,220,211, 4,210, 53,205,108,239,128,210,178, 94,159,205,118,246,191,245, 31,124,171,182,157, 69,
+ 64, 68, 36,226,114,182,135, 32,139,211,155, 78, 8, 89, 94,243,218, 55,116,109, 43,204,218, 57,139, 8, 0,132,140,205,122,105,
+187, 38,157,236, 53,173,157,151,170,237, 58,165, 24, 68,180,117,150, 0,145, 4,145,154,166, 50,197,222,222,164, 32,165, 58,219,
+ 41, 81, 34, 2, 2,154,157, 19, 36, 2, 0,224,245,106,249,250,187, 46, 88,235,148, 8,136,128, 0,136,160,160,118,206, 33,130,
+136, 16,209, 61,175,185,215, 90, 71,196,128, 26, 0, 4, 0, 64, 3, 90,237,172, 35, 18, 0, 37, 34,136, 40,226, 0, 20, 58, 6,
+ 1, 0,100,116,196,244,138,150, 75,245,175,242,188,120,237,107, 95, 75,132, 85, 85,157, 95,187, 71, 30,121,228, 93,239,254, 54,
+ 17, 33, 68, 36, 82, 74,249,133,251,195, 63,252,195, 79,255,233,167,226,218,125,240, 71, 5, 4, 1,137, 8, 9, 21,169,229,217,
+ 45,203,224, 4,202, 60,255,221,223,253, 40, 0, 80, 27, 23,174,179,221,205,107, 47, 92,125,225,185,155,183,142, 87,203, 5, 51,
+158,158, 28,255,242, 47,127, 4, 0,252,218,137,176,136,200,213, 23,158,205,103, 7,229,124, 55,207,114,103,219,187, 47, 94, 34,
+164,247,124,251,183,147,237, 58,107,173,181,221,245,107, 95,158,204,118,159,254,252,103, 23, 71,215, 59,161,198, 1, 0,116,109,
+ 91,215,181,182,206, 17, 50, 17,213,117,183, 94,221,186,248,134,175,111,154,234,130,166,233,206,188,107, 59,214, 44, 16,151, 69,
+152,211,178,100,165,187,206, 94, 56,184,203,186, 46,140,192,175,157,115,142,144,133,168, 72,179,214,225,206,164,176,214,138, 0,
+168,176, 46,128,168,157, 99, 33, 68, 17, 68,156,231,169,115, 12, 0,136,214,161, 8, 10, 56, 68, 66,205,108, 1, 20, 17, 1,128,
+136, 35, 66,231, 4, 17, 17, 24,145, 24,153, 89,224,213, 58,112,252,230,199,126,252, 39,202,162,244,139,228,255, 67,191,207, 20,
+ 33,162, 34,245, 91,191,245, 27,215,175, 95,191,243,133,126,234,167,127,198,177, 3, 1, 96,241,151, 69, 0, 36, 68, 32, 36, 4,
+ 64, 82, 72, 68,136,164,148, 34, 68,165, 20, 41,245,165, 39, 31,251,119, 31,255,247,227, 11,233,205,102, 3, 32, 16,159, 17, 71,
+ 7, 32, 44,207, 78, 27, 49,228, 54, 38,155,128, 82,224, 58, 66,100,212,236,224,159,253,211,127,116,249,145,119,124,242,147,159,
+120,226,241,199, 1, 64,119,109,219, 63,164, 32, 32, 34, 33, 34, 98, 93,173, 79, 23, 75, 80, 38,209, 13, 40, 13, 96,235,211, 91,
+243,253, 75,213,250,140,210,210,185,170,216, 61,104,234,250,123,190,231,123,149, 82,191,244,139,191,160,222,242,208, 91,132,153,
+ 89,216,139, 29,139, 8, 56,219,221, 58, 57, 75, 38, 59,208, 86,142, 57,207,139,229,217,105, 49,191,139, 73, 3,168,205,226,152,
+ 69, 93,188,120,137, 89,188,158,249,214,119,189, 75, 59,103,193, 47, 37, 0, 18,128, 32, 33,159,156,222, 58,122,225,153,253,187,
+239, 89, 45, 78, 38,179,189, 23,143,111, 82,154,106,194,179,147,163,253,123,238,191,120,241, 18, 34,218,174, 67, 36, 38, 34, 34,
+199,172,173,101,194,176,124, 36, 0, 64, 12,178,217, 84, 58, 45, 89,207,156, 44,116, 82, 42, 7,119, 95,184,219, 24,179,179,127,
+ 72, 72,182,235,188, 38, 11,138,147,144,152, 53, 59, 43,128, 72, 32,130,204, 72, 36, 32, 50,155,205, 78,186,122,115,118,131, 92,
+ 61, 41,139,233,164, 20,128,174,179,164, 8, 1, 73, 17, 2, 41,197, 14, 73, 33,161, 66, 34,214,214, 58, 66, 64, 33, 64, 64, 32,
+182, 66, 68, 90, 39, 38,155,236,204,119,136, 46, 89,235, 16,129,136, 16,145,153,148, 66,102, 82, 68, 44, 72, 68,130,136, 66,138,
+148,118,206, 49, 34,178, 32, 2, 17, 35,146,115, 14, 17,231,179,153,136, 48, 51, 34,136,160, 8, 16, 33,146,136, 35, 34, 16, 39,
+ 4, 36, 34, 66,138,128, 17, 80, 59,118, 20, 5,199,107, 65, 63,241,254, 32, 34, 0, 36,191,241,128, 16, 16, 17, 80, 68,136,144,
+ 1, 16, 5, 16, 64, 9,190,122,123,237,111,103,211,246,199,238,238,238,206,206, 46, 0, 52, 77,125,122,122,186,217,108,190,138,
+ 11, 61,240,198, 55,190,255,253,223, 29, 36, 51,254,227,183, 62, 17, 41,165, 78, 79,207,126,253, 95,255,171,151,187,208,207,254,
+220,207,179,227,160, 15,195,238, 39,132, 96, 63,253,161,252,197, 72,105,163, 63,244, 51, 63,125, 7,123,243, 19, 63,249, 83,206,
+ 58,199,142,217, 9, 51,139, 8, 0,136, 8,136, 8,251,127, 0,132, 69,192,235, 71,230,111,124,251,219,238,185,116,233,115,159,
+251,252,150, 26,177,214,250,239,122,253, 27,228, 0,251, 17, 9, 56, 88,158, 46,218,166,110, 54,171,100,231,176,107, 43,110, 27,
+ 67,238,215,126,237,215, 63,244,161, 97,104,100,173,117,225,143,115,214,197,195,191,178, 55,110, 30,221, 60, 91, 94,189,126, 19,
+178,121,178,123,209,117,141,206,102,148,228,136,170,235,218, 95,249,213, 97,202,136,157,227,209, 17, 76, 24,179,115,246,249,231,
+158,216, 44,143, 55, 39,215,119,118,166,182,171, 78,175, 61,171,149,114,245, 90,108,219, 57,215,117,157,181,246, 87,127,245,215,
+194,133,220,112, 48, 51,247, 47,159,126,250, 9, 86,165,206,114,102,103, 69, 19,219,157,253,195,245,122,169,117,210,212,149,214,
+198, 49,219,174,107,187,246, 3, 31,252, 32, 0, 16,139, 31,134,147,254, 39,243,233,241,177, 54,217,173,171,207,118, 77, 67,218,
+108,206,142, 64,103,148,228, 89, 54,105,219, 42,205,138,206, 58,255, 40,206,218,131,253, 3, 4, 84, 15, 61,244, 16,128, 0,131,
+244,154, 91, 96,177, 94, 82, 50,157,204,231,200,162,180, 17,233, 22,103, 75, 68, 98, 84,202, 36,157,115,119, 31, 30, 42, 53,120,
+ 24,223,246,158,247,104, 97, 22, 47,124, 94,247, 51, 17,130, 99, 87, 24,106,107,150,246,108,179, 18,101,178,114, 58, 39,147, 16,
+ 82, 93,213,169, 98,173,141, 99, 39, 32, 34, 2,136,109,219,106, 17,239,250,176, 8,121,237,230, 64,148,179,171,211, 91,139, 91,
+ 47, 82, 54,221,219,153,118, 78,184, 93,157,158,220, 72,203,233,225,225,197, 44, 77,153, 25, 1, 65, 0, 8,192, 90,111,216, 25,
+ 17, 5,128,200, 49, 32, 10, 8, 34,171,212,118, 85,146,151, 73, 57, 21, 93,234,212,128,198,131,217, 93,147, 34, 67, 68,175,176,
+ 72, 80,208, 59,111, 0, 96, 73, 64,152, 25,128,153,129,217, 75, 49,119,213, 26,144,146,114,167,221,172,192,181,110,115,186,147,
+231, 89,162,221, 72, 76,252,166,242,239, 28,179, 22,199, 64,200, 12, 0, 14,145,152,189,114,211,155,205,106,190,119, 72,160,243,
+ 98,146, 38,137, 19, 22, 39, 40,226, 21, 44, 9, 1,137, 19, 32,241,219, 94,136, 65,152, 29,179,223, 80, 65, 36, 79,110, 60, 3,
+214, 94,125,250,177,221, 50,213,138,132, 29, 59, 22,246, 99,112,222, 8,134, 63,126,120,204,154, 29, 19,129,128, 48, 3,128, 32,
+ 17,179,148, 59, 23,147,188,184,235,194, 69,173, 53, 51, 3, 17,161,176, 0, 49, 51, 34, 10, 11, 19, 1, 32, 50, 16, 2, 3,130,
+210, 34,226, 24, 16,216,155, 10,102, 6,196,189,189,189,166,173,147, 36,241, 98, 34, 34,206, 57, 34, 5,194, 72,132,194, 68, 34,
+ 66, 64,194, 64, 8,200, 40, 90,132, 65, 0, 17, 5,144, 69, 16, 0, 68,136,168,200, 75, 0,239,181, 9, 17, 33,130, 8, 51, 18,
+ 49, 3, 17, 51, 0, 49,138,162,240, 17,209, 44,140, 72,225, 18,204, 18, 44, 7,248,135, 64,100, 68,100,246, 3, 17, 2, 17, 10,
+254,147, 8,160, 4,189, 37,194, 90, 88, 0,135,239,247,151,136, 74,202,187,244, 10,253, 87, 0,189,222, 67, 1, 65,191,171,208,
+235, 62, 45,194, 0,136,128,204, 28,205, 41, 71, 51, 23, 92, 77, 17, 63, 98, 18, 22, 65, 4, 10, 95, 98, 17, 5, 33,152,128,175,
+ 29,127, 45, 59,219, 31,111,120,195,253, 15, 62,248,224,125,247,223,191,183,187, 59,156, 21,129,104, 69,201, 59,156,132,132,116,
+122,122,250,248,227, 95,252,171,191,250,203,167,158,122,234,213, 25,208,100, 50,121,255,251,191,251,226,197, 75,204, 60,168, 93,
+ 16, 0,140,254, 55,134,151,131, 93, 31, 14, 26, 94, 17, 33, 1,130, 54,230, 63,253,254,239,127,230, 51,127, 38,175, 88, 56,240,
+125,239,123,223,131, 15, 94,230, 96,152,253, 32,182,190,141,209,137, 31, 6,209,251,245,231,135,228, 3,142, 97, 88,113,160, 68,
+ 68,214,218,143,125,236,223, 60,247,220,115, 47, 63, 32,125,255, 3, 95,215, 52,109,156,143, 59, 60, 8,246,193, 13,224,185,209,
+192, 16,102,244, 3, 33,142, 47,129,217,127,184,109,235,229,106,185, 58, 61,122,247,187,191, 5,132,118,118,247, 63,250,209,143,
+214,117,125,231, 1, 57,219,197, 65, 12, 65,205,104, 52, 40, 91, 3, 58,191,120,204,178,172, 90, 43, 32,205,138,116, 66,136,155,
+179,155, 73,150,103,211,125, 6,168,143,175,170, 36,167,124,198,109,133,217,220,182, 43,182,205,106,189,252,133, 95,252, 37,173,
+244,239,253,222,199,158,124,242,137,243, 30,214, 91, 31,125, 52,106,112,217, 58, 32, 4,180, 32, 48,156,137,103,217,185, 23,191,
+252,228,151,191,244,184,144, 52,155,181, 54,198,117, 22,108,139, 4,100,114, 83,204,192, 89,215,181,109,179, 49,105,129,174,173,
+ 87,199, 70, 43, 43, 90, 41,213,174,207,118,247, 47,176,240,149,135, 31,126,207,123,190,253,201, 39,158, 56, 59, 59, 27,166,224,
+135,126,232,135, 95, 74,220, 9,252,244, 16,146,128,160,143,153, 16,113,185, 94,118, 76, 68, 8, 32,192, 66,192,205,242, 8,116,
+158, 77, 74,112, 14, 17,117,146, 45,142,174, 77,119, 15,218,106,205,206,230,229, 4,147,137,181, 29,105,195,182,233, 86, 39,247,
+255,157,183,248, 40,192, 67, 22,137, 73,122,167, 79, 61,252,200, 35,225,233, 35,242, 18, 4, 73, 96, 16,172,248,147,133,111, 94,
+127,190,174,107, 32,114,237,122,117,227, 5,215,110,128,187, 77, 93,101, 69, 9,140, 94, 98,242,162,228,174, 37,147, 78,246, 46,
+154,124, 46,100, 54,203, 99,177,173,109,235,174, 90,238, 30, 92, 76,147, 20, 70,139,225,216,189,251, 93,223,118,245,234,213, 91,
+183,110,169, 43, 87, 30, 14, 81,103, 88, 16,191,217,130, 31,220, 59,200, 32,192, 34,167,167,183,172,160, 74,103, 90, 41,176,173,
+232, 68, 76,102,178,162, 93, 47, 59,150, 98,182, 39,148,152,124,166,116,106,138,185, 74,242,174,169, 69,216, 57,219, 84,235,180,
+156, 90, 43, 73, 86,236,239,239,251,113,112,127, 83, 17, 16,120,243,155,223, 66,132,234,161,135,174, 12,123,139, 97,252, 42, 78,
+ 24, 8,138, 8, 52, 93,183,174,154,229,209,117,118,238,234, 11,207,213,181,213, 89, 97, 76,214,108,150,206,118,197,108,223,185,
+174,221,172, 64,156, 99,231,227,227,166,169,234,213, 49,131, 24,132,122,125, 54,155,205, 14,246, 15,250,169, 71,136,230, 43,138,
+234,189,175,191, 79, 51, 59,240,166,223,199,250,130,130,130,140,130,225, 75, 2,222,199,160,179,163,235,155,186,202, 38,179,174,
+181,169,194, 52, 81, 32, 78,132, 77,146,157,222,184,138, 64,249,100,234,156, 91, 92, 63,218,221,219, 7,157,136,233,180, 74,178,
+157, 3, 6, 84, 98,239,186,235, 34, 16, 56,231,162,254, 64,233,131, 76,111,129, 17, 81, 68,199, 5,241,114, 44, 34, 8, 8,128,
+ 2,193,193, 68, 4, 63,181,220, 88, 72,179, 41,128,100,147,204,217, 38,203, 11,165, 76,106,204,233,241, 73, 62,153,150,101,190,
+ 94, 45, 65, 43,219, 54,214, 90,174, 55,152,149, 69, 81,230,102,166, 8, 1, 13, 11, 3, 11, 10, 33,129, 96,216, 31,132,227,136,
+ 22, 81, 68,179, 99, 9, 32, 18, 48,123,125, 39, 16,124, 91,128,112, 6, 65,184,174,206, 20, 34,176,228,179,253,249,193, 61,192,
+174,105, 54, 77,189,214, 73, 81,131,105, 41, 99,237,210,180,220,221, 59, 44,242, 66, 41,229,149,165, 48, 59, 9, 90, 29, 16, 16,
+ 4, 61,178,128, 66, 64, 76,206,235, 58, 4, 64, 65, 66,209, 78, 4,129, 65,144,131,202, 99,241,131,240,115,232, 95, 8, 34,194,
+124,231, 96,113,118, 34,232,150,171,211,172,107, 73, 25, 68,209,233, 4, 16, 83,195,147, 44,219,159,207,253,141, 69,128,157, 3,
+127, 35, 68, 10, 58,157, 60,222,130, 66,136, 14,144, 0, 28, 10,249,129,160,243,216, 3,106, 96, 22, 4, 65,239, 49,250,203, 49,
+ 0, 2,162, 48, 3, 34, 96, 56,163,149,114, 93, 83,173,151,119,221,125,143, 40, 37, 72,109,181, 94,159, 28,221,243,250,251, 19,
+ 83,130,119,252,252,216, 5,153,194,122, 35,138,243, 24,176, 0, 34,136, 67, 36,135, 66,136,126, 61, 28, 0,162, 67, 36, 68, 64,
+100,242, 51,228,215, 8, 17,152,101,152, 29, 24, 78, 32,128, 36, 73, 58, 41,203,233,108,175,233, 90,205,117,215,217,189,253, 11,
+249,197, 44,104,114, 16,113,189,121, 21,112, 72, 4, 34, 52,224, 80, 16,125, 22, 8, 18, 2,224,125,130,104,150, 1,145, 64,251,
+105, 64, 20, 31,115, 32,132,127, 68, 4,132, 0,195,190, 12, 16,130, 50,103,103, 39, 89, 57,213, 73,186,127, 48, 15, 11,236,227,
+ 31, 0, 64, 20, 1, 68, 33, 34, 0, 97, 70, 4, 39, 68, 0, 34,140,132, 78,128, 16, 64, 24, 16, 5, 5,145,156,143, 23,132,132,
+216,223,139,181,136, 0,176,151, 23, 63, 29, 24,165, 71,128, 9,130, 71,236,159, 97,103,103,127, 62,223,235,157,109,191, 91, 5,
+ 17,152,137,200,191, 20, 65,199,140, 30,201, 2, 32,240, 99, 37, 70, 64, 96, 32, 16, 33,191,158, 4, 8,200, 12,136,140, 66,126,
+ 15,129,102,118,113, 55, 8, 17, 50, 11, 17, 9,179,127, 74,199,222,155, 8,115,224,237,153,223, 51, 28,247,164, 7, 77,250, 8,
+ 69,132, 17, 1,137,252,238, 16, 17, 1, 34, 63, 45, 36,192, 20,188,126, 4,102, 64,234,157, 80,241, 49,172,150, 56,185, 8, 97,
+219,251,123,143,130, 15,134, 56, 79, 65, 76,252,194,196, 25, 2,102,136, 55,241, 81,133, 72,152,108, 1, 97,161,112,107, 4, 16,
+ 31, 59,123, 61, 4,136,224,247,207, 96, 47, 1,180,248,253,217,163,142, 8, 94,103,133,117,219,142,102,252,219,222, 51,115,206,
+249,168,144, 40, 64,122, 32, 20, 52, 28,160, 0,162, 32, 80,184,167,223,178,128, 18,157, 98, 16, 9,214, 35, 8, 64, 24, 80,240,
+ 19,209,207,102, 88,178,254,233,227,216,251,137, 29,159,233, 93, 39,102, 0,111,106,134, 87, 94,156,252, 27,175,226,188, 37, 98,
+143, 55, 10,138, 48, 2, 5,128,202,155,204,175, 20,115,124,237,248,218,241, 55,143, 92,135,232,196,232, 34, 47,146, 36,201,178,
+220, 24,227, 79, 90,219,213,117,211, 52,245,122,189,118,206,253,173, 15,200, 24,115,229,202,195, 95,255, 13,223,112,239,235,238,
+ 85, 58,226,129,130, 64,193,151,244, 33,160,143, 84, 69,228, 75, 95,250,210, 99,159,255,220,159,255,249,159,183, 49,193,243,170,
+ 13,232, 59,254,225,251, 46, 95,190,108,180,145, 30, 55,142,193,216, 40, 38,139,158, 95,140,240, 1, 64, 41,133,132,109,219,126,
+246, 47,254,226, 15,254,224, 63,255,141, 6,164,181,190,124,249,242,123,223,251, 29,210,107, 26,129, 62,139,216,135,244,227, 8,
+127, 59,178,223, 14,237, 17,137,104,177, 88,252,214,111,254,198,122,189,254,234, 6,180,183,183,247,222,247,190,247,210,165,215,
+120, 31, 22,206,105, 67,216, 70, 23,182,127,190,228,152,188,119, 10,160,180,186,113,253,250, 39, 63,241,137,227,227,227, 87, 52,
+160, 15,124,224, 3,121, 94,178,240, 86, 32,118,110, 2, 99, 0, 63,138,234, 71, 11,230,237,107,136,240,105, 27, 9, 9,112,141,
+ 82,234,177,199, 30,251,228, 39, 62,254,149,147,227,127,239,239,127, 11, 59, 22, 16, 39,174,143,154, 99,216, 40, 49, 70, 19, 31,
+ 25, 97, 63,121, 12,140,225,173, 15, 45,189,109,240, 38,201,175,116, 16, 61, 17, 16,112,206, 86,171,147,135, 31,121,228,201,167,
+190,212, 52,205,203, 13,232,237,111,127,135, 8,179, 15, 75,229,252, 1,163, 1, 5,131, 19, 49,155, 49, 56, 33, 99,172,164, 7,
+181, 0, 68,196, 58,187, 90,158, 93,127,241, 5,235, 58, 0,184,124,249, 77, 23, 46,220,253,228,147, 79,190,164,126, 97,102,136,
+166, 63, 62, 41, 12,247,241,110,254,246,169,115, 47, 69,196, 89,159, 4,105,154,170, 74,178,162,173, 54, 44,172,210,194,161, 6,
+ 91,147, 50,204,220, 53, 13,216, 86, 23,211,111,126,231, 59, 31,120,224,129,223,249,157,223,190,227,128,200,231,148, 88, 36, 66,
+218,163, 63,224, 79,220, 54,113, 33,241, 43,204,188,170,234, 91,203,234,120, 85, 45,170,102,213, 64, 39,184, 92,158, 66, 50,209,
+211,131,174,107,155,211,235,160,115,199, 2, 73, 73, 73, 1, 74, 19, 81,219,212,151, 46,221,243,145,143,252,202,157, 7, 20,144,
+254,237,220,208,185, 60, 81, 4,219,217, 13, 39,185,235,218,163, 91,183,206,206, 22,182,235,184,171,215,167,199, 70, 43, 52, 69,
+ 50,217, 7, 99,216,117,132,100,202,153, 49,134,146, 28,156, 83, 90,217,206,109, 22,139,102,179,114,236, 0,225, 95,254,242, 71,
+238, 32, 67,143,190,237,209, 59, 66, 85, 91,135,120,152, 25,122,237,180, 89, 45,158,127,230,241,186,222,104, 37, 0,128,164,180,
+ 73,234,245,153, 82,136, 58, 65, 0, 2,168,214, 11,109, 12,119,181,107, 54,182, 58, 3,149,160, 50,168,104, 50,157,166,105, 6,
+136, 68,244,141,111,127,251,159, 70,202, 72,191,100,114, 7, 97,238,209,144, 62,196,137, 33,183, 8,180, 77,117,116,116,195,164,
+121, 90, 78, 93,199,109,181,106,171, 37,136,109,155,141, 54,105,125,118,211, 85,103,215,159,123, 42, 47,167, 8,192, 2,148,228,
+168, 11,182, 45,114,211,182,214,218, 62,187, 33,211,201,244, 7,254,197, 15,110,205,208, 35,143,188, 85,238, 56,158,224,234, 13,
+104,189,143,252,173,237, 78, 55,117, 82,204,146, 98,146,164,133, 50,137, 2, 39,108, 85, 82,100, 89, 94,173, 22,179,221,187,172,
+109, 17, 56, 47,203,102,189, 96,215,102,121,169,146,140,148, 49,229, 14, 87,167,243,157, 93, 99,146,224,152,131,236,237,238, 45,
+ 22,139,171, 87,175,134, 93,118,103,192, 22,193, 71, 47, 12,241, 39, 2, 11,128,184,171,207, 63, 35, 58, 17,231,138,201, 14, 11,
+163,184, 52, 73,218,166, 37, 39, 58,203,242, 18, 81,186,166,170,246, 46,188,182,105, 27,147,149, 68,198, 49,177,116,205,226,150,
+117, 46,159,238, 42,109, 66, 78,196,187,228, 4,223,249, 93,223,245,249,207,127,206,103,157,105, 75, 15,246,128,144, 68, 61, 2,
+131, 6, 23,129,186,169, 77, 98,178, 52, 43, 39, 83,232,150,171, 27,207, 74,187, 90,157,222, 80, 4, 4,182, 89, 45,235,245,218,
+ 9, 76,166,179,147,155, 47,164,229, 52,155, 29,170,124, 34, 40,155,179, 91,148, 20,105,154,187,182, 85,218,132,116,170,248, 76,
+ 22, 91,107,127,252, 39,126,114,128,244,182,108, 86,239,107,227, 8, 48, 15,200,146,188,240,252,115, 2, 68,192,183,174, 95,181,
+157,155,239,223,197,166, 72,178,105, 91,111,218,166, 74,138, 89, 57,223, 95, 45, 78, 81, 37,179,189,195,229,201, 45,163, 77,181,
+ 89, 17,176,209,198, 7,128, 38,201,166,211,105,111,178,125, 20, 66,136,218,152,213,106,117,245,234, 11, 52,218,222, 28,132, 59,
+ 40,164,152, 97,139,137,182,182,107,178,204,228,211, 29, 93,236,188,230,245, 15, 76,230, 59, 39,167, 11, 69,212,174, 79,193, 54,
+211,221, 11, 77,103, 5,104,186,123,152, 77,230, 45, 75, 62, 63,176,206,165,121, 89,183, 45, 3,144, 41, 28,211,238,238,222, 72,
+143,132, 25,242,217,188,127,242,157,223,137,136,234,202,149, 43, 8,216,199,163, 18, 48, 1, 31,101, 33,120,131,133, 0, 2,155,
+106,229, 24,187,206, 98,154,177, 0,130, 20, 69,217,214,155, 98, 50, 79,138,105,215,109, 12,202,209,141,107,164,148,176, 5, 6,
+246, 25, 79,199, 40, 96,219,134, 1, 82, 67,243,217, 14,140,156,154,254,175,207, 69,206,230, 51,117,229,202,195,253,104, 64, 60,
+174, 37, 33, 59, 27,253, 50,191,108,103,235, 77,215,180,155,197, 17,138,123,234,139,143,229,229, 20, 72, 17,225,250,236,200,177,
+ 51, 73,233, 28,167,121,158,230, 69,211, 54,105, 94,216,206,182,245,218,118,117, 98, 20,178,101,219, 30, 30, 94, 10,105, 57,220,
+218, 64,125,142,224,181,175,125,157, 6,225,168,238, 48,134,146, 49,106,243, 38,155, 60, 49,200,213,171,227,249,254,197,124,182,
+163,144,239,191,255,126, 74, 75, 45,205,241,181,231, 69, 25,199,194,130,108,237,100,190,219, 53,149, 49,105,219, 52, 90, 41, 78,
+242,196,152,229,226,140, 0, 46, 28,222,173, 20, 49, 51, 33, 1,129,128, 16,146, 8, 32,131,144, 40,102, 70,114,206,169,183, 60,
+244, 16,132, 64, 50, 46, 86, 36,111,197,216, 21, 65,192,217,110,179,169, 86,203, 51,238,234,213,226,108,185, 56, 1, 17,210,233,
+100,247, 46, 68, 94, 30, 31, 77,102, 51, 69,184, 89,157, 9, 59,182, 29,170,192,226, 67,132, 36, 73,119,231,147,196, 36, 67,200,
+123,167, 36, 70,200,119, 5,231,102, 64,203,133,131, 47,195,204,126,179,179,135, 65,242, 60,235, 54,139,166, 90,237,236,237, 40,
+113, 96, 55,139,163,107,199,183,174,165,198,152, 52,117,206,173,215,235,157,221, 61,215, 54, 40,238,230,243,207, 46,110,124,185,
+217,172,144,101,154, 37, 90,153,176,101, 96,208,252,189,169,134,176,135, 88,152,117,192, 20, 5, 0, 25, 4, 57,236,122, 97, 17,
+ 15,215, 2,163,160, 56,150,117,101,243,249, 97,154,151,171,245, 10,147, 34,159, 31, 20, 64, 90,227,209,205,107,123,187, 59,202,
+152,174,105,190,252,236, 51,187,123,251, 74,211,238,222, 46,146,217,153, 77, 18,147,162,207,182, 70,236, 69, 60, 33,107,196,174,
+100, 17,138, 66,163,163,161,192, 62,224,143,112, 54, 66,244,199, 16, 64,152,211, 68, 35,161,176,219, 44, 23,198, 36,139,163, 27,
+229,108,175,105,229,224,226,235,171,205, 90, 81,102, 38,201,193,236, 32,203, 10, 0, 55,207,178, 52, 49, 16,135,130,236,105,158,
+193, 9,103,127, 6,195,159,128,226, 17, 49,179,230, 32,190,140,236,225,114,132, 0,238, 0, 96, 15, 74, 1,115,119,116,243,197,
+196,144, 73,202,189,195,215, 32, 17,119,109,219,108,146, 44, 63, 57, 57, 54,198, 96,187,113,150,211,178,204, 52, 36, 73,209,227,
+ 56, 30, 6, 10, 42, 54,224, 32, 17,122, 57,231, 79,248,132, 59, 8, 8, 6, 15, 57,220,218, 19,183,132, 35,140,194, 34,136,164,
+203,233,142,216, 22, 16,154,182,211, 70, 47, 78,110,217,182,217,221,211,123,179,105, 85,109,184,179,101, 57,157, 77, 39, 62,104,
+132, 64,234, 56, 39,188, 40, 32,180, 61, 14,138,122,200,167,251,117, 52,227,253, 10,121,129, 18,143,128, 33, 0,139, 0,160, 34,
+165,136, 54,174, 67,102, 84,155,186,130,233,206, 62,176,128,210,203,117, 85, 22,121,145,231, 90,107, 16,137,216, 25,160, 56,143,
+245,122, 45,231,247, 56, 10,114,136, 84,194,136, 61, 4,234,113, 65, 96,214, 16,145, 95, 24,139,183,231,166,244,107,134, 66, 74,
+169, 52, 43, 16,173,237, 60, 65, 81,192, 48,138,216,110, 82, 22, 69,150, 18, 81,192, 76, 97,144, 14, 70,175,220, 60, 51, 34, 82,
+231,124,228, 48, 2,180, 2, 76, 8, 32,136, 52,222,228,126, 22, 35, 69, 85, 56, 10,187, 48,131, 72,189, 94,156, 28, 93,179,213,
+202, 24,205, 0,206,213,203, 27,207, 24,176, 69,154, 68,149, 21,125,202,173, 64,202, 19, 84,182,247,122, 76, 76,158,119,194,152,
+181, 8, 96, 47,188, 65,107,163,167,132, 0, 5, 48, 63, 12,208,117, 69,106, 28,168,122, 83,177, 59,109, 55,139,221,131,187,119,
+118,247,100,204, 31,242, 90, 21, 72, 64, 8,250,215, 16, 78, 5,236,213,147, 80,188, 17, 96,244,186, 26, 68,128, 0, 81, 15,209,
+ 32,134,189,222,195,182, 61,200,232, 23,114,103,231,160,169, 55,173, 99, 64,232,154,238,174,139,247, 77,231, 59, 94,125,112,143,
+ 30, 11, 18, 9,128,191, 77, 80,187,232,101,133,195,126, 35, 8,216, 52, 4, 69,231,161, 73, 79,211, 17, 10, 84, 29,255,141,209,
+226,133,231, 6,175, 69, 25, 0, 80,233, 27, 55,111, 33,146,206,166,211,221, 11,147,217,140,176, 39,164,247, 80,115, 88,241, 30,
+ 34,240, 11,201,219,144,105,112,214, 97, 72, 50, 7,114, 76, 32,177, 10,132,175,196, 77, 47,195,219, 0, 2,131,136, 82,164, 13,
+ 89,231, 54,203,147, 60, 49,132,228, 31,197,111,200,254, 49,162, 24,138,132, 44, 41,247, 50, 3,253,237, 25,216, 39, 77,251,132,
+170,119,124,216,167, 22,250,196,157,223,131, 3, 20,227, 33,243,240,168, 68,234,174,195, 75,214,113,158,166,158,235,228,233, 77,
+128, 20,226,125,102, 34,242,105, 10, 98,150, 97, 17,217,103, 57, 24,129, 60, 4,141,136, 76,140, 66, 65, 47, 7, 64,128, 3, 78,
+ 29, 82, 64, 65, 35,250, 28, 67, 76,202,128, 68,180, 29, 17,203,114,114, 30,194,246,249,154,192,174,243, 48,183,231,236, 33,121,
+ 41,199,192,132, 18, 33,244,247,240, 9, 20,228, 8,170, 11, 11, 19,144,151, 95,138,198, 61, 44, 18,135,249,151,241,146,121, 1,
+ 8, 94,231,128,136,244,234,126, 11, 86,231, 40, 83,204, 48,100,184,185,151,158,128,135, 4,219, 25, 48, 18, 15, 18, 0,178, 80,
+159, 19,247,172,174, 94, 16, 69,134,244, 74, 28,200, 24,219,224,145, 13, 26,141, 27, 56,154, 41, 30, 44, 20, 8,160,127,112, 65,
+ 96, 1, 97,240, 78, 71,111,190,251, 88, 20, 2, 79, 76,250,135, 25,118, 25,251,253,220,167,167, 48,238, 41,230, 64,109,101,102,
+236, 21,124,120, 12,140, 79, 5, 33,241, 5,254,254, 16,134,194,232,131, 80, 24, 98, 99,136,209, 23,136, 8,245,143,226, 31,210,
+239,178,184,100, 60,184, 44, 49, 54,129, 62, 77, 54, 8, 19,198,103, 0,233,183, 69,200,157, 65, 8,130,253,236,248,148,123,216,
+ 83,131, 82,103,224, 88,206,130, 36,113,131, 70,209,241, 90,167, 23, 21, 63, 31,125,138,125, 80, 75,219,115, 25,190,219,191, 16,
+255, 34,200,195,104,182, 0, 35,189,174, 87, 86,128,130,113,158,196, 71,174,131,232,140,116, 26,196,193,193,121,139,115,219,104,
+ 96, 27,154,148,224,225,197, 85,244,195,144, 62,251, 22,150,113, 52, 36,233, 67,102,242, 83,230,159, 91,226, 46, 27,235, 92,136,
+202,122, 72, 58,111,105,243, 24,177,244, 62, 86,148, 1,137, 98,205,253, 66,133,205, 51,194,155,161, 23,163,176,134, 4, 3, 35,
+ 38,200, 35, 51,143,192, 69,233,133,186,215,126, 99,166, 99, 52,210,140, 3,150, 28, 4,220,187,134, 2,130,192,254,156,140,224,
+ 80, 24, 0,132,115, 56,212,215,142,175, 29, 95, 59,190,118,252,191,159,111,125,185, 75, 32, 78,166,211,217,116, 90,150,147,249,
+206,124,111,119,111,190,179, 51,159,205,138,114, 82,150,121,146,164, 24,153, 76, 35,192, 44, 98,102, 2,214,218,170,218, 44,150,
+139,229,114,117,227,198,245,213,114,117,182, 56, 91, 46, 22,167,167,167,203,229,242,255,191, 9, 42,138,226,129, 55,126,221, 61,
+247,220,115,225,240,112, 62,223, 41,202, 66,107, 61, 42, 47, 57,119,117,188,253, 38,231,168,180, 35,122,239,128, 88,245,135,181,
+118,179,222,156, 45,206,174, 94,125,225,241, 47,126,241,137,199, 31,183,175, 82,230,251, 85,155,160,195,195,195,135, 31,121,228,
+ 77,111,122, 75,154, 38,210, 19, 75, 94,201,117, 37,176,158, 71,184, 84,120,139,145, 76,134, 1,226,141,236,189,209, 76,197,249,
+194,152, 55,197, 8, 1, 16, 17, 61,247,220,179,255,227,143,254,232, 11, 95,120,108,228, 55,255, 95,153,160,201,100,114,225,194,
+133, 55,191,249, 45, 15, 60,240, 70,210,138,144, 68,120, 75, 64,228, 14,112, 37,222, 81,104, 16,207,165,144, 71,111,111,227,208,
+223,254,115,187,106,206, 7, 71,253, 76, 13, 92, 1,162,147,147,147, 79,253,201, 31,127,225, 11, 95, 56, 58, 58,250, 91,153,160,
+195,195,195,203,151, 47,223,119,223,125,135, 23, 46,132,194, 37,145,237, 73,145,151,247,154,112,172,144,182,161,249, 45,180,119,
+156,254,191,141,214,127, 71, 50,192, 87, 58,137,129,207,133, 68,138, 0,240,185,103,159,249,204,103,254,236,179,159,253,108,215,
+117,175,206, 4,125,248,195, 31,110,218,110, 32,114,159,243,211,229,149,249,147, 91, 2,131,120,251,201, 59,124,236, 28,109,227,
+101, 68,233, 28,117, 97,188, 13,251,221, 55, 84, 86, 50,243,106,181, 60, 57, 61,251,223,127,245,151,159,254,244,167,255,134, 85,
+ 61,186,170, 27, 25, 51,221, 95, 82, 94,110,211, 60, 99,154,204,246,188,140, 78,222, 46, 74,219,155,240, 54, 94,203, 80,162,113,
+142,201,241,149, 68, 12,132,235,174, 89,157,157, 44, 22, 39, 62,168,126,224,222,139, 95,119,255,247,234, 52,251,147, 63,254,212,
+227,143, 63, 46,127,173,153,210,129, 14,117,174,180,228, 78,215,146,115, 26, 75, 2,167,105,196,168, 64,188,253,115, 34, 91, 25,
+ 73, 1,233,115, 94, 24,227,184,225, 19,232, 99, 68,134, 8,168,123,108, 49, 64,113,194, 34, 74, 41, 36,197, 44,130,200,236, 92,
+215, 89,182, 93,211,216,174,181, 93, 71, 58, 17, 52,220,109,216,118,164,140, 74, 10, 52,233,123,223,247,143,255,249,254,222, 99,
+143, 61,246,223,254,235,127,249,106,245,148,150,113,115,130,151,152, 99,121,153,157, 37,183,189, 27,159,148, 59,158,237,147,185,
+ 30,156, 16, 22,113, 44,206,217,205,226,184,173, 54,105, 57, 69,101, 60,192,224,186, 6, 69,218,166, 74,242, 28,128,144, 20, 32,
+105,237,215, 85, 66, 90,132, 72,152, 65,165,164, 51, 16, 1,219, 8, 16, 91, 43,174,147,174,106, 72,219,172,152, 21,217,131, 15,
+ 62,120,249,242,229,197, 98,249, 31,127,255, 63, 60,241,196,227,175, 88,130, 2, 88, 41,227,135,188,237,169,229,118, 7, 39, 20,
+ 53,248, 42, 2, 20,128,136, 14, 98,252,237,208, 50, 97,244, 21,159,115, 65,116,206,181, 93, 87,183,157,101, 16, 82,138, 72,156,
+165,100,162, 84,238, 72,145,210, 74, 41, 79,202,178,205, 38,157,238, 42,147, 3, 41, 0, 17,215, 9,130,216, 86,108,203,206,234,
+108, 10,148,196,142, 22,128,200,104, 82, 97, 39,198, 1, 10,144, 70, 36, 38, 93,183,173, 73, 51, 4, 40,139,252,251,191,255, 7,
+ 88,228,227, 31,255,183, 79, 62,241,196, 87,230, 84,189,237,209,183,141, 53,178,192, 8,197,130, 45, 70,193, 29,116,210,182,238,
+218,202, 45,221, 65, 2, 61,230, 40,213,102,181, 56, 59, 57, 62,186,177,169, 54,174,221,156, 29, 93, 7,215, 18, 1, 2,183,213,
+130,184,173, 22,183, 54,167, 55, 93,189, 17,215, 56,219,153,108,130,202, 40, 2, 69, 2, 98,133,173,171, 86,220, 90,159,237,228,
+174, 49,138, 72, 41, 97,118,109, 13,206,138, 0,144,242,252, 50, 17,104, 54, 11,233,218,233,206, 94,146,164, 61,232,140, 8,111,
+125,235, 91,191,233,155,190,249,198,141, 27,183,110,221,122,185, 9,122,244,209,183,221, 73, 9,203,157,125,226,237, 79, 14,234,
+ 86,134, 15,140, 13,122,248,125,128,222,164,169,214, 39, 55,158, 63, 57,186,214,108,206,132,109,146,102, 62,153, 67,136,236,156,
+101,152,204,118,157,160, 78,203,114,182,139, 74,235,180, 48,105,142, 40,226,156, 82, 20,136,126, 34, 74,167, 42,205,149, 73,117,
+ 90,152,172,100,212,204, 44,206,186,174, 18,215, 2, 59,113, 22, 0,216, 57,173, 19, 83,204, 76, 86,228, 89,150,152,100,252, 96,
+236,216, 24,243,240,195,143, 60,120,249,242, 83, 79, 62,121,123, 31,154, 48, 65,111,125,244, 81,129, 49,116, 36, 47,161,115,182,
+126,213,147, 61,229, 21,248,227, 34,210, 89,187,169,171, 77,181,105, 89,148, 73, 76,146, 34, 42, 1,233,218, 78,233,164,152, 76,
+235,213,217,241,139, 95,222, 44, 78,180, 34, 99, 18, 34,112,109,221,181, 21, 34, 25,157, 32, 8,219,186, 90,157,174,142,175,111,
+206,142,148, 34,113,206,182, 13, 10,219,122,213,109,206,128, 45, 42, 35, 64, 72, 74,153,132,146, 92, 37,185,210,102,125,118,212,
+172, 23,224,186,114, 50, 77,211, 92,182, 56,125, 1,163,156, 78,103,127,247,157,239,156,148,211, 47,126,241, 11,119, 80,179, 63,
+248, 67, 63, 12,175, 48,116,136,121,219,219, 88,176,219, 54,223,119, 88, 9, 90, 7,133,121,189, 94,111,170, 13, 35, 10,131, 54,
+137,210, 58, 36,200, 17, 80,196, 57,171, 16,210, 68, 31,221,120,145,148,153,206,246, 64,169,196, 24, 17,183, 60,185,177, 60, 57,
+ 46,202,217,254,133,139,190,118,155,148, 2, 1,207, 78,110,187,134,187,142,153,149, 54, 64, 10, 81,161,210,214,118, 93, 91,199,
+ 28, 28, 40,133, 10,209,104,189,187,187,159,101,105,160,144,244,220,207,193,217, 12,255,252,246,111,255,230,181,107,215,206, 17,
+188, 30,121,165,193, 72,156,157,184,165, 60,241, 43,206,215,168, 42,183, 39, 27,217,182, 61, 57,186,126,116,227,133,182,109,149,
+ 86, 70, 97,187, 89,137,235,186,205,226,228,250,213,179,155,215,184, 93,119,213, 82,108,187, 89, 45, 64,216,243, 33, 66,150, 71,
+ 32,205,203,114,182, 91,148, 37, 17,185,174, 19,215, 85,171, 53,136,232, 36, 19, 82, 72,154,148,209, 38, 1,149, 8, 40,118,206,
+182, 53,187,142,132,129, 27,224,214, 85, 75,232, 26, 0, 72,178,108, 82, 78, 34,187, 6,198, 44, 77,217,182,175,239,120,251, 55,
+229, 69,225,155,234, 12, 12,184,151, 50,237,184,197, 16, 28, 84,139,192,168, 4,226,252,246,234,221, 29, 96,230,186,109, 29, 80,
+ 54,217, 73,211, 18,145, 58,118,202,164,198, 36, 74,161, 48,207,118,118,147,188, 40,167, 59, 38,159, 20,229, 84,167, 41,146, 74,
+140, 89,156,158, 56,219, 33,170,208, 65, 75, 64,105,205, 34,214,113,146,102, 44, 14, 64,148, 82, 90, 37, 68,218, 7,104,128,128,
+ 4,174,173,155,245, 9,145,212,109,203,140, 58, 45, 4, 21,160,158,205,119,210, 36, 29,101, 46, 96, 59,155, 25, 41,118, 34, 0,
+112,239,235,238,125,221,235,238,125,234,169, 39, 61, 39, 93, 93,185,242,240, 29,200,138, 35, 90,112, 40, 76,236, 65,127,193,200,
+197,149,144, 83,198,120,170, 79,156,138,136,115,167, 71, 55, 94,124,254,105,219, 86,222,211, 85, 90,105, 98,169,150,205,242,120,
+179, 94,231,147, 25,233, 12, 76,226, 0, 17,164, 89, 47, 79,142,110,214, 85,173,180,153,206,118, 77, 62, 73,138,137, 50,185, 78,
+ 50, 50,153, 8,145, 73, 77, 86, 32,105,147,149, 38,201, 69, 64,216,249, 76,133,117,157,184,214,103,138,242,114,138, 42,205,242,
+ 18, 85, 34,140,164,212,108, 54,157, 76,102,125,197, 87, 63, 70,140, 85, 96, 16, 19, 40, 24,211, 35, 7, 7, 7,111,122,211,155,
+ 30,123,236,177,186,174, 61,187,107,107, 55,201,150,142, 25,106, 39, 49, 54, 64,232,117, 13,202, 64, 62,192, 81,213,140,136,108,
+ 54,171,166,109,179,114, 71,101, 37,160, 78,178, 2, 72, 51,165,186,152,171,180, 36, 69, 93,211, 16,130, 66,114,214, 50,187,188,
+156,148,229,196,104,237,243, 95, 74, 97,181, 60,169,214, 75, 95, 2, 32, 32, 64,200,206, 17,130,239, 84,194,194, 8, 98,173,107,
+ 59,235,237,118, 83, 85,109,179, 73,147, 76,233,212, 10,116, 93,109,109, 53,155, 76,231,211,249, 64,105,216,182,214,231,216,235,
+113,154, 80, 68,242, 60,127,251, 59,222,241,191, 62,251, 89,252,190,239,251,190,109,203,222,187,123, 91, 26, 5,135,192, 34, 78,
+ 99,152, 20, 31, 19,245, 43,128, 0, 96,157, 93,174,150,214, 58,173, 77, 85,109,108,231,242, 98,138,198, 88,238,216,113,154, 36,
+138,148, 0, 24, 69, 8,220,117, 13,145, 98,118,109,219, 16,169, 60, 43, 72, 1,219,206,152,212,218,174,174, 42,102,152,204,102,
+105, 86, 8, 64,211, 52, 74, 39, 74,107, 4,113,182, 21, 97, 68,173,180,102,118,245,102,221,213,107, 66,112,206, 42,109,146, 36,
+157, 78,231,147,201,132, 72,221, 1,169,243,129, 46,156,195, 5,112,172,182, 73,145, 56,209,177, 7,208, 64,222,140,115, 17,203,
+ 25,125,110, 63,248, 32,192,158, 16, 37, 8,194,236, 93,177,200,107,241,132, 10,102,174,171,170,174, 42, 0,215,110,206,148, 54,
+179, 89,153, 24,186,121,243,121, 91, 87, 70,105, 53,153, 67,154, 17,208,170,169,150,139, 83,113,174,156, 76,178, 60, 83, 68,206,
+113,219,214, 70,107, 66, 58,186,113, 77, 27, 51,157,239,131,210,168,244,166,218, 8,187, 52, 47, 5,168,107, 91,163,254,188,140,
+ 59, 0, 0, 9,135, 73, 68, 65, 84, 72, 41, 67,132,206, 89,215,214,136, 56,153, 76,108, 94,212,155,101,187, 90, 20,185,217,219,
+191,203, 36, 9,140, 58,131,156,139, 4,135, 96,103, 92, 13,234,217, 63, 62, 5, 41, 64,138,212, 67, 15, 61,180,149, 78, 28,167,
+244, 96, 32,254,143,227, 43,220, 6, 69, 68, 36, 76, 39, 8, 0,116,109,179, 60, 59, 97,182,128,154, 76, 78, 58,105, 59,219, 52,
+ 86, 39,185,201, 38, 73, 49, 5, 50,190, 65,151,214,102,111,111,111, 58,157, 42, 34,199,194,142, 87,167,199, 77,181, 2, 4,165,
+144, 8, 25,176,110, 26, 2, 97,219,182,245,134, 67,212,238,196, 23, 17, 19, 89,219, 54,109,235, 68,144,200, 89, 91, 87,155, 68,
+235,195,187, 47,206,230,187,164,244,136,249, 61, 40,159,241,214,146, 49,105,224, 28,198, 19, 95,233, 80,254,217, 27,166,144, 30,
+246,125, 23, 70, 26,199,151,146, 3, 0,123, 98,157,196,106,190,192,243,241, 81,214, 64,224,237,186,174, 91,119, 93,103,242, 12,
+ 73, 37, 38,177,117,211, 86,235,166,110,116,154, 37, 89, 46, 72, 58,201,186,206, 25,163,218,166,181,205,198,182,117,150,102, 64,
+186,235, 58,109, 18,165, 76,170, 89, 43, 58, 61,122, 49,201,138, 52, 45,156,237,170,174, 33,165, 9,196, 57, 81, 73,154,229, 19,
+157,228,158,242, 92,164,217,206,108,234, 35, 56,145,161, 91, 1, 32,222,201,209,195, 65,231, 12,202, 36,168, 92, 79,254, 2, 68,
+ 38,208, 3,205, 5,163,123, 28, 42,146,165,199,144,197,107,227,129,175, 7, 61,153, 64,122,190,101,240,133, 68, 4,211,114, 55,
+ 41, 69,129,235,234, 53, 59,167,146,156,129,116, 62, 69,157,154,100,157,100,153, 74, 50, 69, 72,164,186,166, 58, 59, 90,230,229,
+204,148,179,116, 58,191,245,226, 85, 96,153,238,204,108, 83,119, 2, 64, 36, 32,229,108, 87, 68, 28, 48, 0,164,132, 4,150, 89,
+140, 81,206,182,208,213,121, 81, 36,121,162,136,124,226, 68,130,107, 51, 82,137,242,149,220,152,209,137, 30,136,241,211, 68,128,
+ 94,130,192, 55,145, 11,157, 7, 66,231, 3,216, 10,191,122, 1, 12, 84,178, 94, 86,195,228,132, 31,194,214,117,237,102,109, 37,
+116, 24, 75,146, 76, 89, 97,177,216,214,174,107,192,164,181,149,110,189,200,243, 66,167, 36,148,151,187,101,145,232,102,179,102,
+ 43, 23,239,189, 95,235,196, 24, 67, 68,206, 89, 97,231,218,134, 81,210,188,180, 86,140,209,138, 80, 17,129,128, 82,164,148, 38,
+ 82,190,200,150, 69, 80,220, 24,184,139,198, 37,108,129, 97,165,111,255,207, 39,234,123,162, 32,198, 83,136,194, 78,131,199,228,
+195,188, 97,223, 27, 46,114,186, 25,197,231,252,123, 74, 44,160,103,231,142, 64,196,168,176,144, 5,216,185,186,109, 16, 21, 16,
+137,237, 44, 55,152,164,105,158, 16, 80,154, 36,206, 57, 97,135,236,144, 16,216, 1, 72,221,116, 34, 19, 76, 74, 66,178,128,182,
+237,206, 86, 43, 69, 42,207,114, 34,104,133,156,117, 66, 46,207, 82,163,148, 86,138,130, 54,237,233,175, 99,221,123, 71,217, 24,
+ 76,250, 29,241,171, 33, 60,232,105,148, 35,246,145, 14,234,220,211,113,134,187,112, 80,199,177,153, 20, 32,134,246, 26, 91,128,
+ 96, 60,211, 67,205, 34, 68,104, 12, 57,219,137,101,148, 22, 64,111,170,198,193,196,164, 57, 41, 3,200,182,173, 69, 37,157,181,
+ 30, 63,214,218, 32,184,102,181,170,171, 77, 49,153,146, 54, 10,193,214, 85,195, 93, 94, 22,211, 34, 79,140,241,101,132,163, 39,
+237,179, 79,183,251,241,210, 23,193,244,116,209,208,135, 35, 4,137,225,239, 86,246,106,216, 6,163, 13, 39, 2, 74,105, 96,175,
+118, 49,162, 94,140, 0, 18,168,202,177,128, 28,165,167,194,202, 0,157, 6,158, 92, 79,138, 25,246,157,115,206, 58, 36,165,147,
+ 68, 19, 37,169, 1,165, 1,124, 95, 49,204,139, 73,193, 25,138, 93,173,150,202,164, 42,205, 69, 84,146,235, 36,159,176,235, 92,
+ 91, 23, 69,185,119,120,183,214,122, 48,189, 97, 97,163, 5,142, 70,249,188,233, 6, 26,240, 74, 12,138,130, 8, 34, 99, 42,118,
+158, 12,100,206, 96,106, 2, 21,208,183, 3,232,167,220, 11,145,115,186,215,106,131, 1, 60,111,218,163, 77, 24, 2,187, 81,151,
+198,190,212, 48, 4, 30,168,180, 54, 89,233,120, 67,232, 93,234,141,210, 38,201, 75, 4, 84, 74,186,186,105,153, 77, 86, 40,157,
+152,201, 1, 8,136,179, 72, 34,136,154,112, 90,204,180,214, 74,169, 16, 88, 6,170,119, 40,146,240,102,102,204,139,234,189, 28,
+ 12,155,156,125,149, 71, 79, 59,130, 64, 90, 12,229,146, 94,129, 6,160, 23,209,199, 72,189, 59,196,226,233,203, 50,110,245,169,
+ 57,170, 93,255, 1,217, 2,199,198,164,169,126,204,241, 76,188,109, 31,217, 96,176,149, 4,130,141,115, 30,155, 65, 45,204,221,
+102,113,130, 74,171, 52, 55, 73,110,210,148,144,108,219,214,155,101,211, 84, 89, 94,206,102,179, 60,203,140, 86,136,212, 11, 73,
+ 31,249, 96, 44, 77, 24,181,112,243, 55,242, 19, 24,206,199,137, 25, 7, 76,145, 80, 28,121,214, 97, 42,112, 52,183,183,103,138,
+113,176, 67, 2,160,131, 59,192,200, 56,178,142, 97, 54,199,223,243,253,248,198, 86, 94, 24, 4,207,165, 79, 65, 0, 32, 73, 76,
+166,113,117,122, 67,216,166, 89, 73,105,161,211,130,148, 22,128,214,182, 82,173,217,118,174,107, 12,194,193,238, 94, 49,153,107,
+147, 14, 34, 19,122,155, 68, 99,212,219,220,248, 38, 76,136, 47,112,195,158,220,134, 81, 19,134,112,177,151, 36, 4, 96,223,217,
+ 68,144,251,217, 12,113, 83,228,190,191, 68, 58, 29, 1,116,204, 44,111, 43,119,137, 65,252,224,221,244, 43,232,201,203,129, 8,
+ 7, 61,161, 94,182,160, 3,113,174,107,156, 49, 6,201,160,179, 70,153,182, 89,215,117,149, 26,173, 4,148, 49,147,131, 75,218,
+164, 90,155, 88, 39,219,163, 64, 61,126,201, 18,114,130, 61, 76,225,243,243,227,149,242, 69, 10,177, 29, 16,196, 88, 1, 3,231,
+ 54, 6,137,190,240,194,251,190, 40,136,145,103,140,200,224,139, 67,122,148, 6,251,170, 39, 4, 64,212,209,211,139, 78, 2,136,
+111,164,137, 67,189,205, 72, 78, 96, 40,130,233,215,188, 31,122,239,133,104, 99,166,187, 23,204,100,175,107, 27, 97,235, 58, 91,
+ 89,167,117, 54,223,155,117, 93,173,149, 46,203,137, 49, 73,108,148, 45,177, 5,140,231,192, 6,138,127,124, 78,241, 12,196,190,
+173, 80,188, 87, 44,128, 24,143, 10, 65,188, 92, 5, 63,206, 91, 29,223,134, 71,250,226,206, 33,210, 14,133,159, 56, 66,217,161,
+ 47,147, 0, 95,145, 48,134,156,251,109,133,145,231,139, 35,215, 98,104, 4, 51,170,164, 24,229, 70, 97,160,224,250,181,234, 42,
+187, 89, 57, 1,157,102,218,228,214,113,235,120, 50,153,167,209,108,247, 90,119,104,130, 18,219,183,244,251,171,111, 90,216, 55,
+ 95,137, 6, 1, 99, 4,208,167, 10, 4, 96,224,248,142, 66,130, 32, 56, 48,110,120,194,192, 56,210, 75, 24, 67, 43,236,123,116,
+133, 65,232, 45,186,109,236, 68, 53,126,139,129,111, 26,186,192,197, 38,151,125, 89, 64,124,200,158,240,234,175,171, 85,146,152,
+122,205,174,107,144, 80, 92,151,166,153, 23, 28,140,205,147, 2,107,184,135, 66, 99,243, 30, 24,186,124,110,209,232, 7,230,180,
+239,112,131,132, 65, 49, 98,111,172, 98, 15, 36,159, 83, 28, 18,180, 28,212, 87,236, 3,134,136,222,193,193,224,225,245, 12, 28,
+217, 78, 17,106,232, 63,215, 7,171,209,193, 25,136,207,193,117, 21,230, 33,191, 19, 23,153,199, 86,177, 87,173,136,148,102,229,
+222, 97,230,219, 42,248,254,204, 35, 29,239, 5, 48, 54, 45,151,216,115, 10, 71,181, 97, 35, 25,238,237,189,132, 18, 39, 97, 65,
+ 12, 13,225,183,248,201,177, 39, 43, 68,138, 10, 96,159,219,142, 81, 85, 40, 88,198,232, 91,203, 72,117,247, 16,105,172, 39,211,
+ 28,187,243, 2,142,158, 22, 71,113,223,104,243, 96,143,140,141, 38, 6,241, 54,132, 23, 67,217,135, 82, 74,129, 26, 49, 27,162,
+ 83, 16,149,216,232, 30,231,103,100, 52,149, 48, 52, 56, 11,139, 54,158,142, 94, 2,101,104,208, 22,158,206, 43,105,175,133,123,
+ 80, 2, 68,124,245, 15, 70, 55,192,119,251, 69, 96, 16, 26,133,103,136, 48, 42,115, 11,253, 66, 99, 41, 11,135, 50, 29,232,197,
+164,215,202,204,125,113,196,136,100,222, 75, 16,110,105,244,113,237,192, 88,120,195, 57, 24,214, 98,224,131, 15, 21, 99,209, 34,
+200, 80, 59, 38, 61,209,127,168, 72, 10,196,247, 62, 87, 16, 11, 71, 66,155,134, 8,170, 75, 15,184, 6,119, 17, 6, 22,123,168,
+254, 60,215,200, 49,224, 65, 67,103,176,222,110,202, 16,189,241,249,174, 80,189, 18,197,209, 3,200,237, 43,191,157, 52, 8,174,
+ 64,168, 78, 27, 41,120,137,122,168,215,101,241, 51, 65, 96,125,197,197, 86, 49,164,112,212, 64,253,170,245,222, 76,240,240, 56,
+182, 32,196,128, 86, 69,198, 61, 6,123, 77,219,140,127, 64,244, 53, 89,189,153,247,134, 76,247,245,101, 67, 89, 72, 12,150,251,
+226, 35,127,106, 91, 59, 68,205, 52,242,175,199, 36,161,109, 22,236,214,132,245,142,249, 72,238,134, 98,163,222,219, 10,219,203,
+183, 94, 27, 57, 88, 28,153,143, 35, 69,217, 35, 15, 67,197, 46,142,122, 54, 3, 12, 32, 96, 40,189,100,255,191, 53, 24, 71,166,
+226, 91,145,198,217, 9,177, 13,241, 48,139, 65,140,163,134, 25, 87,146,240, 72, 70,250, 18,160,161,216,101, 60, 19,219, 60,165,
+190, 13, 56,159,251,204, 56, 61, 21,234,155,134, 65, 96, 95, 57,129,227, 26,205,248, 41,225, 88,190, 35, 67,169, 75,208,189, 35,
+252,120, 4,158,142,234,254,188,146, 71,142,113,103,136,219,250, 50,253,173,234, 25, 0,138,213, 81, 28,203, 14,101, 84,104, 51,
+174,176,129,109,237,112,238,173,140,171,112,198,189, 82,110,207,211,143, 11, 2,251,226,170,168,101,101,180, 5, 71, 69,107, 65,
+ 11, 70, 48,189,247,172,183, 75, 91,125,165, 17, 71, 91, 60,170,110,145, 30,232, 9, 39, 25,123,253, 19,250,180,198,202, 40, 24,
+ 87,169,137,104,137, 10, 15,135, 58,175, 40, 29,163, 56, 24,113,136,197, 70,126,208, 86,233, 15,222,198, 82, 28,207,203,118,144,
+ 12, 35,103,167,183,243,184,101,200,122, 23, 39,238,166,160, 12,194,239, 66,119,119,236, 75,234, 6, 93,232,223,250,229,245, 93,
+255,130,253,226, 33, 92, 10, 22, 43, 68,113,161,123, 43, 83, 56,137, 61,102,166,135,187,198, 10,229,176, 46, 50,228, 67,194,253,
+227,226,142,253,148,115,204,193,219, 59,252,157,155,175,177, 38, 26,235,188, 81,230, 31,199,236,162, 88,164, 43,227,100,139,247,
+212,183,116,144,247, 99, 40, 10, 86,136,199,125,160, 65, 3, 76, 36, 33,199, 9, 91,159,137,238,143, 87, 76,163,240, 24, 35,208,
+221, 87, 58,134, 90, 56, 95, 84,119,238, 9,153,101, 84,164,185,165,149,207, 25,251,115,108,249,241, 87,198,223,138,243,219,211,
+ 15,183,169,142,193,182,247, 73,115,255,161,254, 90,128,195,151,130,223,209, 83, 27, 37, 4, 11,125,113,242,144,233,193,219,250,
+142,247,150,127,212,214, 37,238, 52,230,255, 3,181,198,231,135,110, 84,158,236, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+ 0};
+
diff --git a/source/blender/editors/datafiles/crease.png.c b/source/blender/editors/datafiles/crease.png.c
new file mode 100644
index 00000000000..f785c005628
--- /dev/null
+++ b/source/blender/editors/datafiles/crease.png.c
@@ -0,0 +1,276 @@
+/* DataToC output of file <crease_png> */
+
+int datatoc_crease_png_size= 8638;
+char datatoc_crease_png[]= {
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 96, 0, 0, 0, 96, 8, 2, 0, 0, 1, 26,
+253,208,249, 0, 0, 0, 4,103, 65, 77, 65, 0, 0,177,143, 11,252, 97, 5, 0, 0, 0, 6, 98, 75, 71, 68, 0, 0, 0, 0, 0,
+ 0,249, 67,187,127, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 0, 7,116, 73,
+ 77, 69, 7,218, 7, 19, 0, 34, 11,191,157, 46, 32, 0, 0, 32, 0, 73, 68, 65, 84,120,218,237,124,123,176, 94, 85,149,231, 90,
+251,156,239,251,238, 35, 9,185,201, 21, 18,146, 92, 8,175, 16,222, 33,128, 17, 67, 2, 9,208, 64,112,108, 64, 64, 48, 60,180,
+ 7, 31,211,182, 53,229,148, 35,106, 73,183,218,218,227,163,160,171,213,174,153,170,238, 46,103,108, 25,176,117,236,154,106,219,
+105,167,102, 70,171,193,215, 48, 83,128, 53, 37, 53, 22, 56, 13,140,216,218, 36,185, 55,247,251,206, 57,123,239,181,214,252,177,
+246,222,103,159,239, 94,148,240,176,113,202, 3,185,207,239,158,111,159,181,215,227,183,126,107,173,141,187,118,237,130, 95,120,
+ 61,159, 23,149,204,252,192,183,190, 35, 34, 76,236,201,143,134,195, 67, 7,159,189,229,150, 91,242, 23, 25, 0, 64, 44,136,197,
+ 58, 91, 85, 85, 85,141,172,117,159,250,196,199,199, 95,228,188,179, 77, 83, 85,117, 85,141,154,198, 90,107,157,247,239,122,199,
+ 29,221, 23, 57,103,109,227,156,245,206,123,239, 70,195,197,127,248,135,159,253,147, 55,220,244,149,175,124,229, 51,127,116,119,
+124,145,109,156,115,222,123, 34,242,206,253,253, 79,126,124,253, 77,183,162, 41,122,253,193,204,218,117,127,120,247, 39, 13, 0,
+120,231,136, 8, 68,136,104,126,254,208, 13,111,186,157,153, 1, 13, 11,120, 34, 98, 49, 0,224,137,152,200, 57,119,232,192,179,
+175,190,240, 34,242,158,136,132,217, 57,231,172,117,206,151, 0, 80, 87,213,225,133,133,133,133,249,157,187, 46, 70, 99,156,243,
+222,251,166,105,154,186,174,170,202, 90, 87, 2, 64,175,223, 91,191, 97,195,153,231,108, 19, 0,219, 52, 68,100,235,166,170,134,
+163,225,176,174,107,231,108, 9, 0,211,211, 43, 7, 19, 19,214, 90, 34, 34, 34,103,109, 93,143, 22, 15, 47,142, 70,195,166,169,
+157,181,248,188,246,238,249, 92,248,237,239,124,151,152,137, 89, 88,154,166, 89,152, 63,244,236,207,254,254,237,239,248,103,221,
+109, 49,165, 0,122, 79, 85, 85, 87,163, 81,211, 52,206,211,239,125,240, 3, 29, 45, 32, 34,103, 93, 83,215,182,105,170,186,178,
+141,245,222, 75,247,237,140,179,182,105, 26,235,156,117,142, 60, 89,219,204, 31, 58,184,247,242, 43,255,250,107,255,233, 11,127,
+254,121,125, 81,113,243,155,246, 91,107,189,183,222, 59,239,220,252,161,131,151, 93,177,143, 89,156,119, 34,112,233,222, 61, 43,
+ 38,251,198,121, 71,228,137,136,153,155,198,254,248,233, 39, 89, 68, 0, 16, 13, 51, 51,241,214,211, 78, 55,204,172, 50,172, 70,
+213,211, 79,254,159, 27,111,121,139,119,164, 63,180,214, 54,214, 18,113,217,212,245,226,225,133,133,133,133,209,112,120,245, 53,
+215,121,231,136,188,181,182,174,171,186,170,109,211,120,239, 75, 99,204,202,149,171,230,142,223, 60, 61,189,162,169, 27,242,228,
+188,171, 70,195,209,112, 52, 26, 13, 27,219, 56,231,202,193,196, 68,175,215, 47,138,178,170, 42,239, 61,145,111,234,122, 56, 92,
+ 92, 92, 92,172,235,218, 54,214, 57, 7, 47,213,222,149,249, 55,123,246,236,121,239,123,239, 28, 12, 38, 4,132,153,137,188,115,
+206,217,230,221,239,126,247, 19, 79,252,232, 23,219,239,183,190,243, 16, 8, 51, 48, 19,176, 48, 51, 9,139,243,236, 61, 57,235,
+235,218,126,240,174,223,173,134,195,225,226,194,251, 62,240, 65,239,253,115,175, 8,129, 89,136,216, 19, 17,121,239, 61,121, 79,
+222, 91,103,189,247,174,177,206, 58, 34, 2, 52, 31,252,192,251,230, 15,252,244,238, 79,255,155,165, 55,138, 38,238, 92, 99,173,
+109,154,166,174,109, 93, 55, 77,221, 52,141,179,206, 89,215,216,166,170,235,209,104,184,184,120,120,126,254,208, 81, 51,179,159,
+252,248,199,214,172,153, 89,102, 69,206, 90, 79, 94,151, 66,222, 17, 17, 49,145, 39, 98,242,222,217,166, 94, 92, 56,180, 48,127,
+232,154,235,111,114,206, 53,117,237,156,253,220,191,253,188,109,154,170, 26,141, 22, 15,223,115,207, 61,143,253,239, 31,150,186,
+ 34,125,162,160, 85, 76,204,204,204,222,249,166,174, 15, 60,251,236,197,123, 47,155,156,156,246,228, 17,141, 41, 74, 36, 66, 67,
+128, 8,104,176, 40,222,246,182,183, 45, 30,158, 47, 1,192,147,103, 10,127, 44, 2,194,194, 68,214, 54,135, 15, 31,254,233, 79,
+158,185,246,250, 55, 10, 64,248,189,136, 90, 16,179,120, 79,206, 57,231,188,250,165, 18, 0,188,243,222, 91,103,131, 27,178, 77,
+ 51, 26, 46, 46,204,207,159,191,227,194, 11,119,238, 38, 10, 55, 9, 79,236,157,181,182,169,235,166,169,109,211, 52, 77,163, 30,
+ 70,111,164, 38,233,137,120,208, 31,172, 95,119,236,218,217,217,162, 48,196, 98,109,163,235, 96,102,242, 94, 61,111, 93,215,213,
+104, 84,215, 85, 93, 87,186, 39,222,251, 18, 0, 6, 19, 19,131,137,201,178, 44,250,253, 65,127, 48, 48,133, 33,102,107, 29, 11,
+199,187,144,250,108,103,109,221,212, 77,173, 31, 42, 93,148, 62, 75, 9, 0,166, 44, 12, 22, 69, 97, 4,192, 90, 11, 0, 34,204,
+ 44, 18,158, 40, 56,117,235,172,179,214, 54,182,105,106,107,195, 71,231,156,174,243,165,243,147, 47,201, 53, 55, 55,103, 94,170,
+123,181,214,191,113,227,198,223,121,215,187,118,236,216, 1, 65,107,200, 89,231,189,123,232,161,239,125,232, 67, 31,249,197, 17,
+224,190,251,238,223, 52, 55, 39, 0, 34, 0, 32, 34,144, 54,219, 58,219,212, 77, 83, 87,163,209,240,217,159,253,228, 61,239,125,
+255,207,123,180,205, 39,158,132, 69,129,198, 32, 32, 51, 50,179,247,228,189,119,222,107, 48,116,222, 51,115,127, 48,249,251, 31,
+190,235,231,172,200, 0, 34,128, 17, 65, 6, 97, 86,255,161,161,214,122,231,188,119, 76,228,189, 23, 17, 99,202,223,186,253,230,
+231,148,145, 8,112,208, 23, 86,111,164, 6,236,189,143,134, 68,204, 44, 0,128,184,110,253,134,231, 92, 81,144, 72,250,235,246,
+114, 68,196,172,183, 38,242,158, 60,145,231, 59,110,189, 97,249, 27,169, 41,198,143,158,201,135, 32, 22,162, 18,249, 16,122,234,
+209,104,180,184,184,184,115,207,111,220,122,235,254,101,118,237,155, 15,124,219, 57, 23,125,172, 58,166,112, 83,239,189,122,175,
+197,195, 11, 7, 15, 30,216,123,217, 21,189,126,223, 59,215,212,117, 93,143, 70,139,135,111,123,243,111,181,187,150,214, 66,228,
+ 53,112,234, 63, 22, 97, 22, 98,182, 77,115,248,240,194,117, 55,220,188, 98,213, 81,136, 6, 0, 76, 81,148,189,193,196,212,244,
+159,253,233,159,124,246,211,247,132, 71, 75,142,134,136,153,136, 85,145,132,133,213,232, 93, 85,141, 78, 63,107, 27,154, 2, 1,
+209, 24, 64, 3,168, 87, 81,148, 37, 96,249,241, 63,248,136,136, 24,166,136, 72,152, 68,152,133, 89,132, 69, 68,152,136,154,186,
+ 62,120,224,192,150, 83,183,130,134,123, 64, 68, 3,128, 0,192, 34,204, 0, 0, 34,120,201,238,139, 12,197,187, 0, 8, 11,160,
+ 4,237,246,158,154,166, 89, 88, 56,116,211, 45,111,102, 1, 22, 9,110, 22,245,143,129,152, 73,130,102, 32,162, 17,125,144,248,
+ 50,125, 48, 79,212, 52,245,225,249, 67, 69, 81, 2,162,168,179, 14,239, 1, 34,162,210,224, 76,203,140,222,166,213, 72, 34,239,
+ 92, 53, 26,205, 31, 58,120,224,192,179, 87, 94,253,122,197,149, 28, 99, 67,124,109,186, 66,200, 40, 85, 23, 3,254,244,214, 54,
+174,174,171,195, 11,243,195,197,197, 27,110,218, 31,221,164,222, 69,109,153,244, 95, 52, 3, 98,102, 0, 41,137, 72, 93,186,250,
+208,166,105,108,211, 76, 77, 77, 95,113,213, 62, 6, 96, 79, 44, 76, 76,194, 18,212,219, 59,189,124,128,214,158,136, 68,164, 20,
+ 17, 0, 65,192,162, 40,166,166,166,214,174,157, 93,127,236,134,137,137, 1, 51,122,213, 44, 97, 81,100,224,157,174, 60,126,178,
+228, 83, 60,149, 18, 17,203,162, 44, 38, 11, 83, 20, 83,147,211, 43, 86,174,236,245,122, 44, 66,228,146, 88,152,245, 46,222,218,
+198, 89,167,200, 74, 49, 89, 16,182,112, 89, 20,133, 49, 6,209,244,251,253,254, 96, 0, 8, 26,187,219,187, 80,176, 56,103,173,
+ 6, 80,231,172, 62, 95,146,185,136,148,104, 10, 3, 96, 10, 99,140, 1, 1,242, 36, 2, 34, 44, 65,186, 28,227,171,110,135,109,
+ 26,235,157,243, 46, 72, 71,157,178,176,148, 6, 16, 16, 0, 80, 4,136, 9, 24, 68,194, 38, 11,115,176, 67,231,124, 8,213,141,
+115,154,255, 56,197, 81,193,182, 68,224, 21, 21,215, 54,109,218,100,224,149,116,169, 71,120,101, 93,109,188, 94,177, 98,197,103,
+ 62,251,217,205,155, 79, 48, 6,213, 71, 2, 34, 8, 32, 0,171, 11, 18, 17, 0,102, 22,144, 20, 47, 20, 72,123,239,172,109,108,
+ 93,223,127,255,125,127,243,159,255,203,139, 90, 16, 51,127,231,123, 15, 5, 39, 7,160, 97, 16,132, 17, 64, 20,113, 2,130,122,
+181, 8, 9, 98, 48, 37,239,188, 6, 61,231, 61,145, 8,154,107,174,189,110,223,213, 87,219,186,250,189, 15,127,116,113, 56,124,
+129, 18, 66, 52,136,128, 2, 12, 12, 8, 34, 32,128,193, 72, 4, 88, 72,162,249,231,171,225, 36, 34,239, 67,164, 39, 34, 98, 17,
+ 17, 52,119,222,249,158,166, 26,126,228, 99,159, 60,210, 5,181, 58, 20,156, 58,131,218,124,112, 26,106,150,193, 33, 70,183, 24,
+160,167,186,199,176,172,144, 41, 8,139, 0,162, 49,166, 40,123,131,247,191,247, 95,108, 62,110,211, 17, 47, 72, 67, 33, 37,199,
+ 67, 62,130,225,176,168, 4, 76,226,255,222,147,139,222,204, 51, 49,197, 56,173,145, 53, 70,106, 4, 48,175,127,221,190,215, 92,
+176,237,200, 22,164, 34, 81,208, 16,119,130, 56,166, 91, 9, 49, 17, 41, 52, 10, 0, 33, 97, 32,239, 93, 10, 43, 62,178, 58,138,
+232,235,166,110,154,250,164,205,115,235,143,153, 61, 2, 29,138, 16,132,163, 87,101, 97, 98, 17, 69, 54, 73,123,146,211, 21,144,
+152,201,133,199,112,206,105, 72,112,214, 90,107,155,170,106,108,179,234,168,163, 46,191,226, 42, 37,185,110,190,253,237,154, 4,
+ 9,249,251,190,248,197,175,126,245,107,206,185,231, 94, 80,140, 1, 89,100,103, 25,251, 34, 68,123,201,175, 16, 18,188,247,206,
+ 69, 30,105,104,176,120,221,181,215, 3, 72,212, 45, 22, 17, 64, 83,148,189,137, 73, 67,222,223,124,243,254, 27,174,191,193, 90,
+235,109,243,195, 31,254,240,227,159,186,251,185, 22, 68, 9, 95,104, 60, 35, 34,145,152,145, 50,131,162,103,209, 40, 21, 96,161,
+ 39,239,156,109,108, 51, 28, 46, 46, 30, 94,184,254,166, 91,202,178, 84,204,136, 6,208, 8,178, 8, 10,162, 65, 44,140, 1, 41,
+160, 8,160, 9, 1,240,196,147, 79,249,204,167,255,208,217,230,145, 71, 30,249,220,191,187, 23, 0,138,185,185,185, 93,187, 47,
+225, 86, 66, 29, 0,164,114,201,193, 85, 0,149,204, 68,236,189,183,182, 81,232,227,156,123,227,254, 55,131, 41, 20,195,113,120,
+ 61,132,255,130, 15, 9,127, 78, 42,221,240, 46, 76,196,107,102,102,118,237,188,112, 56, 26,150, 0,144,173, 32,124,134, 40,132,
+112,131,236,182,208, 38, 7,174,105,234,106, 56, 92,152, 63,180,122,102,205,158,203,175, 96, 17,228, 16,230, 65, 98,112, 2, 4,
+196,128, 54,213,128,132, 33,224, 35, 97,145,224,186, 4, 0,113,253,186,245, 37, 0, 72, 80, 77, 17,137,224, 67, 4,132, 49,190,
+ 16, 32,253, 88,151, 66,214, 54,202, 44, 46,204, 31,188, 96,199,107,143, 63,225,164, 4,199, 69,128, 35, 62,143,127, 31, 87, 19,
+124,189,120,138,232,200,123,245, 20, 28,215, 84,106, 54, 30,111,128, 81,111, 57,221, 46, 71, 52, 1,205,216,102, 84, 13,135,135,
+ 23, 71,195,225, 27,247,223,134,104,244, 14,113, 61,105,103,226, 13, 90,160,220, 66,223,100,218,196, 17,230,137,128,136,110, 89,
+216,209,104,225,212,218,150, 36, 10, 68,151, 98,171,106, 84,141, 70, 77, 83,239,222,115,217,209,199, 28, 35,130, 65,174, 44,196,
+220,221,107, 17, 14, 25, 73, 22,139,131, 63, 11,105, 31, 17,249,248, 10,102,137, 86,150,129,109, 74, 95, 82,250,121, 12, 25,150,
+ 60, 1,200,238, 61,151,174, 58,234, 40, 4, 16, 6, 17, 98, 17,150, 96,131,154,119,196, 84,138, 2, 1,146,185,122,189,185,243,
+142, 60,169,223,143,206, 33,152, 81, 80,234,200,152,198, 85, 4, 47,192, 32, 82, 20, 69,175, 44, 87,173, 94,125,204, 49,235,142,
+ 62,250,104, 68, 99, 12,106,118,164,158,162,189,178,173,226,140, 77, 35, 69,174, 33, 48, 58,175,161, 80,189,191, 39, 34, 31,128,
+114, 90,144,218,131, 49,136, 88, 24, 52, 69, 89,192, 0, 10, 83,148,189,114, 98, 98,114, 98, 98, 98, 48,152, 40,123,165, 9,116,
+128,120,226,108, 83,130, 69,165, 60, 73, 68, 84, 50,204, 45, 96,114, 41, 76, 59, 27, 2, 81,136,137,196,121,216, 98, 46, 1,192,
+152,162, 44, 1,160, 4, 17, 68, 52, 69, 97,140,233,245,122,101,217, 43,123,189,162, 40,208, 24, 17, 32, 17, 17,223, 46,165,149,
+ 11, 72,164,169, 36,229,210,233, 10, 81, 57,172, 74,213,199, 57, 71,222, 39,205,138,209,147,130,132,138,162, 80, 68,132,136,198,
+ 24, 93, 80, 81, 20, 69, 81,232,163,227,216, 10, 0,152, 89, 33,100, 22, 70, 82, 4,140,230,163, 91,226, 35, 63,171, 68,130, 11,
+236,133,254, 66, 21, 40,154, 91,220, 50,205,128,208,160, 1,131,138,214, 0, 68,132,152, 80, 16, 12, 74,124,251,184, 8, 22,105,
+151, 19,227, 93,174,200, 1,150,248, 60, 61, 13, 59, 20,100,148,168,151,232, 1,130,214,150,136,248,224,131,127, 27,244, 8, 16,
+ 17,131,131,133,228, 93, 21,204, 6,111,221, 46, 44,174, 78, 63,235,126,129,162, 93,110, 63,228, 30, 36,248,163,150,199, 76,233,
+185,194, 10, 94, 92, 28,190,194,248, 70,205,205, 94, 57,139,217,181,107,151, 9,187,243,138,185, 94,113,137,226,175, 23,116, 68,
+133, 47,189, 86,175, 94,189,113,227,198, 75,246,236, 57,111,251,246,205, 39,156,192,204,170,103,234,245, 34,166, 33, 34, 22, 38,
+239,221,226,226,225,127,127,239,125,255,237, 27,223, 24,190,160, 84,117,156,111,152,155,155,123,242,201, 39, 1,224,214, 91,111,
+189,227,173,111,101, 22,131,200, 29,247, 19,192,149, 32,128, 64, 0, 42,204,209,203,106, 61,196, 58,219,212,245,232,109,111,255,
+237, 23,105,101,229,190,125,251,110,188,233,166,126,111, 64,204,136, 96, 16, 16, 1, 89,153, 6, 6, 65, 4, 96, 96, 0, 68, 0,
+ 22, 6, 65,133,204,209,227, 73,192, 28,104,140, 41,255,248, 51,127,244,245,175,127,253, 47,255,227, 95,189,112, 29,218,184,105,
+110, 48,152, 0,196,162, 48,136, 70, 41, 91, 84, 6, 4, 13, 96,130,235,146,177,150,156,130, 79, 98, 7,149,173, 16,192, 93,187,
+118,189,229,182,253, 47, 82,169, 13, 32, 10, 24, 68, 4,196,192, 52,164, 28, 59,198, 78, 69, 10, 41,103, 34,110,211, 72,133,184,
+ 65, 88,136,167,108,217,114,227, 27,174,121,161, 11, 66,221, 36, 37,131, 0,179,164,137, 33,172, 39,214, 28, 3,162, 76,240,133,
+210,174, 41,120,229, 4,235,205,233,167,159,177,243,194, 11, 94,168,132, 68, 80, 48, 75,163, 68,178, 92,153, 2, 42,230, 40,151,
+ 22,169, 75, 74,231, 68,152, 36,149, 49, 85,163, 46,185,120,247, 96,208,127, 33, 11, 18, 68,129, 0, 40, 56,112, 65, 90, 34,144,
+140,238, 38,102, 10, 75, 32, 34, 9,178, 10,175, 20, 86,188,171, 54,137,104,180, 2,241,207,223,249,246, 35, 95,144, 22,205, 4,
+ 67,118, 23,245,183,205, 64, 98,214,156,148,153,133, 69, 19, 19, 74,249,165, 72, 94,131,128, 80,212, 16,129, 29,231,159,251, 2,
+182, 12, 82,221,133, 59,171, 97,205, 44,219,165,168,250, 16, 39,133, 86,196, 19,228, 41, 16,133, 11,113,101,120,254,246,179,143,
+108, 65,145, 74, 8,201, 99, 39,185, 31,175, 53,113, 44,215,132, 61, 74, 82,108, 95, 41,113, 99,133, 98,165,211,239, 56,239,172,
+ 35,219,178,140, 65,200,101,211,190,107, 91,114,226,136, 13,187,104, 58,114, 6, 33,163, 83,134,205, 89,167,253, 42,199,111, 90,
+127, 4,177,172, 77,194,211,106,226,163, 75, 78, 66,180,136,115,140, 34,210,181,112, 68,236, 94,171, 24,182,110,172,173,133,121,
+199,206,221,236,221,218, 99, 79,124,248,225,135, 31,124,240, 91,207, 35,184,198,140,179,229, 62, 34, 87,150, 86, 25,127,210, 73,
+ 9, 91,199, 19,189, 67, 40,208,219,166,169,106, 17, 62,231,188, 11, 54,111, 62, 65,179,176, 13,115, 39,236,221,187,247,119,222,
+249,219,243,135, 14,126,232,195, 31,253,241, 51,207,252,156, 34,110,198, 12, 48, 67,150,255,229, 41, 24,164,196, 20,218,111, 56,
+ 83, 35, 34,114,206, 91, 91,215, 85,181, 97,195,166,243,119,188, 38,241,114, 34,128,198, 20, 69,217,235, 79, 28, 53,179,246, 19,
+159,248, 87, 77, 93,127,225, 11,247,254,215,111,124,115,249, 98,240,114, 10, 36, 73,108,146, 68,147, 75, 8, 58, 26,164,233,191,
+109,234,166,170,206,223,113,225,107,118,238, 2,229,207,160,229,137, 76, 81,152,162, 40,203, 94,217, 27,244, 7, 19,251,111,217,
+255,175,255,248,211,219,207,221,182,156,149,113,178,247,164,188,109, 24,139,218,157,210,158,214, 73,196, 24,167,105,160,173,235,
+234,236,237, 23,108, 62,225,164, 88,154, 69, 72, 81, 9, 67,228, 54, 69, 97, 76, 81,148,101, 81,148, 69,175,255,150, 55,223,254,
+ 7, 31,253,208, 18, 43,107,181,149, 5,100,233,165,174,138,133, 51,138, 61,176, 83,186, 91,206,217,186, 26,173,219,176,233,212,
+173,167,169, 56, 2,106,192, 80, 68,139,159, 48, 57,113, 52,198,160, 49, 69, 49, 57, 57,125,247, 39, 63,182,116,203, 50,155,206,
+210,191,160, 48, 42,250,200,236, 65,210,117, 14,194,105,154,198, 89,187,235,226, 61,162, 85,154, 84,108,138, 43, 72,121, 40,164,
+229, 97,145,100,198,130, 31,251,200, 93,250,142,109, 33, 56, 55,126,201, 72,181, 44, 67,205,232, 75, 9, 44, 7,121,111,109, 83,
+141,134, 87,190,254, 90,132, 78, 70, 21, 68, 3, 49, 9,238, 48,123, 90, 83,137,191, 0, 68, 44,238,122,255,123, 84,135, 64, 18,
+243,149,171,171,114,159,105, 9, 32, 49,208,133,239, 67, 21,219,218,186,174, 86,174, 58,106,245,234,153, 36,193, 32, 36,133, 87,
+152,150,135,113, 49, 16,111, 31,158, 85,127,110,138, 66, 99, 89, 32, 52, 33,227,156, 98,177, 76, 31, 5, 37,162,164,204,182, 66,
+163, 83,211, 52,163,197,225, 85,175,187, 6, 4,219, 93,141,245,251, 32, 33,108, 87, 19,165, 29,241, 31, 75, 90,165, 6, 86,147,
+ 59,234,140, 57,149, 68,238, 50, 48, 2,230,194, 73, 45, 83, 77, 93,143,134,139,103,158,115, 46, 24, 20,225,148, 15, 36,142, 66,
+239,145,111,101,122, 47,206,116, 35,145,200,173, 82,199,189,234,250, 62,125,188,196, 79, 67,146, 13, 57,165,204,171,145,247,254,
+236,115,183, 99, 64,154,208,241, 86, 81,147,179,149,180, 28, 87, 40, 25, 36, 3,137,187, 93, 6, 45,131, 86,123, 16, 37,254, 0,
+ 64, 36,214,244, 68,219, 9,180, 1,180,174,235,170,170, 70,163,209, 53,111,120,163, 50,194, 32,208, 65, 68,137,182,129,246,121,
+ 83, 89,128,133,146,243, 72,130, 80, 49,149,146,101, 94, 57,189, 45,233,158,146, 50, 13,239,180,243,184,105,234,106, 84, 13,135,
+167,158,126,230, 96,114, 34, 3,118,144, 91, 5,100,218,145, 12, 35,145, 70, 36,169,206,212,218,118, 43,161, 84, 69,232,216, 63,
+100,101,141,232,111, 66,163,221,226,226,202, 85,171,206,217,118,174,146,105, 16, 95, 14,203,249,213, 78, 80,202,124,112, 90, 75,
+ 96,254, 99,180, 31,131, 53, 89,121, 44, 0, 47, 74, 61, 31, 77, 93, 85,163, 81, 85, 85,166, 44, 47,191,234,106, 81, 13,209,142,
+ 20,200, 35,176,164, 98, 68, 44, 28,228,245, 90,238, 22,121, 24,146,242,106,180,143,191, 84,166,146,242,228,203, 71, 26,223, 90,
+107,155,186,169,107,107,237,212,212,244, 21,251,174, 78,174, 92,223, 45, 49,195, 73,181,219,199,215,124, 50,131,114,109,181, 73,
+ 24,160, 19, 30,202, 16, 9, 82,147,135, 79,237, 82,148, 90,203, 83,225, 87, 68,102,143, 62,122,247,238, 75, 40,186,180,229, 89,
+226, 92,230,109, 22, 71, 73,230, 33,111, 32,202, 54,142, 19, 64,147, 54, 1, 35,146, 78,127, 80,184, 0,196, 24, 51,152,152, 56,
+238,248,205, 39,158,124,114, 40,229,235,106, 98,129, 15, 98,188, 75,217,211,120,141, 50,207, 93,136,218,141,137, 74,164,107, 42,
+115,252,165,205,170,137,142, 45,138, 2, 17,203,178, 44,138,114,229,202, 85,155,230,230, 38, 39, 38, 64, 64, 16, 68, 64, 55, 33,
+112,214,201, 87,229,218, 27, 31, 50, 86,124,162,236,179,228, 51, 67,233,156, 89, 89,198, 9, 35, 22, 69, 1,198, 96, 9, 37, 34,
+150,189,222,228,228,228,170, 85,171,167,166,167, 10, 83,136, 54,125,101,214,194, 93,168,148,173, 39, 75,187,227,122,210,111, 36,
+214,237,186, 59,206,237,130,148,195, 7, 0,131, 70,160, 48,104, 76, 97,250,253,137,201,201,137,137,201,201,158, 22, 24,208,164,
+ 90,214, 56, 90,234,172,134,132,133,219,188,219,135,242, 74,236,136,111, 51,167, 49,252,174,142, 81,151,194, 0, 70,215,132,136,
+136,101, 81,244,250,253, 94,175,223, 31, 12,202,178, 52,104, 32,134,104, 9,157,202, 17,217,118, 49, 73,108,179,139,213,130, 88,
+127,247,177,200,207,109, 79,224, 88,254, 18,244,186, 84,166, 9, 17,149, 34,195, 80,229, 40,203, 94,217, 43,123,133, 41, 16, 81,
+130,105,114, 23, 44,113,114,199, 44,157, 36,147, 58, 5,134,208,123,144,138, 50, 18,147,184, 49,170, 63,232, 16, 34,232,102, 1,
+136,214, 94,140, 41,138,178, 40,203,158, 49, 5, 96, 52, 28,173,126,130, 38,241,250, 19, 65, 68,117,107, 89, 2, 78,169,220,225,
+189,231, 80, 51,243,173,111, 11,149,180,142, 7,206, 16, 23,148, 17,141, 7,202,194,152, 66,113, 56, 34, 38,236, 12, 8, 75, 4,
+220, 13, 47, 89, 13, 81, 98,157,140,219,142,153,152, 16,197,134, 84, 78, 44, 75,150,123,114,178, 50, 69,190,128, 96,194,238,161,
+154, 18, 24,147,252,213, 82,253,205,205, 60, 75,242, 37,172, 35,224,237,214,234,169,109,138,236,176, 7,121,170, 19,116, 72,205,
+ 71,243,149,208, 86, 37,194, 0,168,132,112,162, 88, 98, 52, 15,124, 89,196, 71,237,106,242, 98, 25,121, 31,140, 43,197,161,176,
+178, 60, 67,239, 60, 89,148,144, 54,157,162, 6, 74, 4, 1, 65, 1, 81, 53,207, 97, 72, 11, 70, 2,246,137,132,137, 36,215, 18,
+140, 57, 73, 38,244,240,196,229, 80, 96,155, 2, 69,218,250, 32,206, 22,244,228,147, 79,194, 3, 15, 64, 94, 39,139,217, 84,196,
+122, 25, 92, 74,160, 11,198,154, 40,198,176,134,180,221, 52,156, 37,220,233,235,236, 5, 45, 95,193, 12, 0,184,107,215,174,131,
+ 7, 15, 30, 58,116,232,149, 86, 22,250,199,189, 68,100,245,234,213, 51, 51, 51, 37, 0,204,207,207, 63,245,212, 83,191, 22,202,
+210, 38,207,153,153, 25,243,107, 65,252,138, 85,239,126, 45,160, 95,177,171,124,145,127,223,239,247, 55,110,220,120,210, 73, 39,
+189,234, 85,175,154,158,158, 94,179,102,205,236,236,236,236,171,102, 87,174, 88, 57, 24,244,203,178,215,118,100,164,174, 50,102,
+107,109, 85, 85, 79, 60,254,248,211,255,247,233,103,158,249,201,119,191,251,221,159,254,244,103,191,122, 2,154,158,158, 62,119,
+251,246,173,167,158,186,101,203,150, 53,107,214,172,158, 89,115,212,170, 85,101,175,215, 97,126, 88,150, 13,127,109,199, 74, 74,
+ 27, 67,149,148,153,165,236, 13, 38, 39,167, 87,175, 94,115,206,185,219,133,249,246,219,223, 2,129,153,241,213,104,244,212, 83,
+ 79,125,255,251,223,255,171,175,126,173,170,170, 87,132,128,152,121,237,236,236,220,220,220,171, 95,253,234, 75, 47,189,244,152,
+ 99,214, 21, 69,161, 80, 1,209,180, 4, 77,124,116,108,121,240,192,189, 33,132, 94,249,216,238, 40, 0,168,141, 90, 2, 28,193,
+139,194, 39,148,172, 77, 83, 57, 37, 64, 96, 2, 34, 97,193, 94,127,112,220,113,155, 55,108,220,116,217,101,151,131,240, 19, 63,
+250,209, 95,124,233,203,143, 63,254,196, 63, 90, 44,219,185,115,231,149, 87, 94,181,247,210,203, 82, 50,147, 24,102,142,221,153,
+204, 58, 30, 16,149, 2, 17, 19,213, 6,130,145, 89,139,194, 17, 64,140, 77,253, 49,193,134,140,122,162, 48,123, 74,177, 45, 58,
+245, 40, 83,219,101,149, 58, 5,181, 71,204, 63,250,232,163,127,126,239,253,207, 53,255,251,114, 92,115,115,115,199, 31,127,188,
+137,140, 58, 2,160, 65,205,160, 35,200, 71, 29, 25, 16,237, 36, 12,210, 66,131,208, 82,125, 58,114,147,100, 23,180,131, 98,225,
+113,172,185, 52,212,176,219,110,246, 44,241,136, 85, 92, 78, 85,232,152, 84, 24, 3,130,167,157,118,250, 71, 63,252,187,239,124,
+199, 29,147,147, 19,191,252, 40, 22, 42, 17, 49,249,193,212, 83, 32, 32, 40, 38, 90, 84, 48,166,118,178, 67,116,230, 91,136, 37,
+146, 46,156, 77, 14,143,181, 39, 82, 70, 61,105, 82, 79, 73,136,145, 99,226,110, 81, 35,230, 89,136,104, 80, 0,215,173, 63,246,
+125,255,242,221,151, 95,122,201, 47,215, 73,107,201,131,163,117, 41,219,160, 9,162, 32, 35, 3,163,104, 89, 33, 99, 50, 17, 80,
+217,178, 80,142,232,122,228, 84, 33, 73,125,151,129, 67, 16,161,192, 1,164,174,118,201, 91, 7,243, 33,132,160,151, 33, 7, 51,
+128,108,140, 17, 46, 95,179, 99,199,246,109,103,221,247,197,175,252,232,239,158,252,229,225,160, 72,216, 99,232,134, 9,126, 70,
+ 64, 71,131, 58, 73,101, 74,255, 36,159,205,203, 88,195,150,137,138, 41,117,219,193, 34, 45,169, 23,186, 37, 2, 33, 20,211,198,
+196, 11,115, 42,207, 5, 55,128,202,131, 24, 83,148,253,137,155,110,188,238,202,203,247,252,146,194,124,244,176,173,156, 66,201,
+ 40,122,151, 54,151, 31, 99, 62,218,248,157,243, 32,161,170, 19, 72,199,164, 29, 16,198, 6, 18,185,192, 99,205, 8, 44, 97,104,
+128,133, 57,104,113, 12,129,169, 0,105, 0, 89, 71, 49,206, 60,227,140, 77, 27,215,127,254,222, 47, 87,117,253,114,106,144, 64,
+151,207,133,216,221, 2,146,166,177,163,219, 96,145, 14,163, 67, 25,109,215,165, 48, 83,155, 74,250,149,132,145, 84,157, 79,109,
+ 11,240,173,175, 14,149, 7,210,141,226,220, 91,103, 29, 11, 41,155, 4,192,233,233, 85,111,186,241,218,169,151,205,115,155, 84,
+171, 12, 96, 23,114, 62,140, 59, 42,145, 21, 43,242, 50, 69, 91,178,143,210,144,246, 97, 89,114, 27,204, 98, 61,136,228,229,157,
+150, 91,138, 93, 20,121, 25, 36,109, 9,100,195, 55, 74,212, 51,115,191,223,219,127,227,111,246,122,229,203,167, 65, 99,228,146,
+180,143,190,204, 46,231,205,130,196,227,244, 96, 59,228,211,109, 15,227,246,177,226,251, 68, 6,153, 83,231,190,144, 48, 73, 62,
+248,145,134,219,245, 59,223,206, 26, 18,121, 98,239,136, 66, 45,232,154,125,123,203,178,120,249,124, 80,222, 41,144, 55,192, 64,
+172, 78, 67, 44,135,132,122,223,210, 82, 97, 59,194, 51,254, 85, 40,242,182, 41, 7,100,157, 63,169, 63,139, 34, 90, 24, 3, 11,
+173,231, 39,142, 67, 55,249,248,131,174,191, 87,154, 45, 39, 29,255,191, 30,123,252,165, 23, 80, 2, 29,144, 22,158,149, 7,150,
+169,153, 66, 56, 55,128, 99,175, 91, 43,196,177, 63, 81,212,148,245, 18,228, 37, 97,233,118, 4, 5,132,153, 43, 76,170, 70,180,
+ 35, 24, 97,232, 1, 1,103,214,206,110,221,122,250,218,217,181,104,140,118, 80,222,194,236,188,243, 90,120,173,171,167,159,122,
+250, 75, 95,254, 15,143, 60,242,232, 75, 32,160,229,202,146,227,227, 61,241, 97,151, 87,156,172, 26,174,165,125,110, 41, 98, 16,
+232,116, 37, 44, 41, 70, 72,236,248,139, 39,115, 36, 43,210, 67,122,156,119, 76,222,123, 94,177, 98,197, 9, 39,157,188,113,211,
+220,228,196, 4,133, 57, 20,101,196,131,251, 54,113,242,177,215,159, 56,117,235,170, 59,239, 60, 89,149,115, 52, 26,253,224,177,
+ 31, 60,244,208,255,120,240, 91,223, 38,226, 35, 55, 49,142, 72,164,211,190,197,153,105, 64, 28,141,140, 86, 2, 17, 11,142,205,
+189, 64,219, 68, 32, 89,163, 75,183, 3, 41, 5,245,232,245,242, 58,115, 24,158,245,206, 91, 61,107,167,223,239,157,114,202,153,
+167,108,221, 90, 20, 70,229, 73, 97, 89,144, 53, 77, 64,108,219, 2, 99, 16, 16, 13, 25,131,133,150,191,167, 87, 20,231,158,187,
+253,172, 51,207,190,253,182,219, 68,228,192,129,103,239,187,255, 47,126,240,216, 99,163, 81,245,252, 52,168, 27,176, 58, 6, 22,
+129, 50,116,154,153, 24, 0, 56,252, 10,194,199,100, 60, 8, 28, 17,204,248,172, 78,222, 80,147,151, 23,212,191,112,156,168,114,
+214, 89,235,189,237,245, 6,231,239,184,112,227,166, 77,138, 96,153, 25, 81, 0, 89, 75, 29, 25,144,132,188,129, 11, 12, 24, 41,
+ 24,192,132, 57,124,131,136, 72, 6,177,208, 77,152,153, 89,251,214, 59,254, 41, 51, 9,211,195, 15, 63,242,167,159,251, 60, 17,
+253, 2, 31, 20,167,231, 51,221,145,113, 51,137,253, 85, 93,229, 8,169,127,236,171, 0, 1,134,212,109,210,241, 63,185,137,133,
+210,126, 42,155,235,137, 24,169, 11,179,241,222,159,118,198,153,103,158,181, 13, 77, 24,191,132,216,154, 37,136,136, 40, 98, 16,
+ 5,209,132,253,209, 18, 17,100,237, 91,104, 64, 85,138,217, 24, 16, 0,131, 32, 80, 6,204,105, 12,120,207,128,103,158,117,246,
+ 61,159, 58,163,174,171,111,254,237, 3, 95,253,235,191, 89, 78, 64,208,182,191, 64,215,181, 4,255,155,199,163,220,211, 72,222,
+230,147, 59,161,108,234,172,213,160,113,245, 1,142,105, 8,233,177, 68, 78, 15, 62,113,182,153,156, 94,113,209,197,123, 87,175,
+ 94, 29,186,239, 67, 42,136, 25,158, 86, 57, 24, 68,150, 32, 26, 12,111, 21,186,246, 33, 73, 84,115, 4,131,134, 64, 84,166,104,
+ 10, 20, 65, 99,144, 11, 99,132, 68,250,253,193,197,187,119,239,190,104,231, 35,143, 62,250,197, 47,253,165,115, 46,239, 19, 10,
+193, 43,153, 91, 59,112, 12,153,107,137,154, 16, 11,174,201, 51, 98,234,200,144,148,166, 4, 30, 13, 66, 81,178,197,160,169, 53,
+ 82, 98, 61, 49, 12,168, 90,107,155,186,170,235,234,216, 13,155,118,239,185,204, 24,148,152, 24, 6, 50, 1,218,118,177,216,146,
+135, 16, 69, 37,161,167, 77, 64, 80, 37,138, 8, 97, 10, 70,201,137,144,246,182,124, 95,168,112, 11, 2, 27, 53, 67, 6, 56,109,
+235,105,119,125,224,148,239,253,247,135, 30,250,159,143, 38, 19,227,214,102,100,108,194, 59, 83,143, 40,130,152,188,118, 21,165,
+ 75, 57,114,120,162,196, 69,119, 3,151, 48,229,167,224, 88,219, 52,117,221,212,174,105,206,217,126,193,233,103,156,149, 49, 77,
+157,246,190,172, 91, 52, 74, 8, 49,172,168,109,219, 84, 66,130, 59,127,154,215, 96,219, 59,167,174,128,182,153, 19,141, 1, 54,
+219,183,109, 91, 51,179,246,137,191,123,170,140, 33,166,157, 93,239, 0, 61,233, 84,230,153, 25, 59, 57, 44,130,112,104,140, 73,
+243,147, 81, 46, 29, 78, 58,245,151,197, 99,217,130, 55,182, 78,135,153,234,122,228,173,187,224,181, 23,157,124,242, 22, 78,141,
+ 63,241,137, 18,181,146,201, 9, 1,131,130,161,206,228, 32, 46, 33,135, 59,157,124, 29, 96, 55,110,242,173, 57, 72,180, 83, 25,
+ 67,210,208,117, 61,208, 29,164,213, 47, 48,211, 34,148,200,202, 10, 48,102,205,174,217,160,233,210, 58,121,130,124,222,121,157,
+244, 82, 80,103,208,236,251,205,235, 86,175,158,225,104,242,136, 97,136, 22, 0,186, 86,191,124,129, 0,130, 54,117,127, 33,157,
+ 32,196, 89, 59,226, 50,157,216,146,111, 65,176,220,178, 19,158, 51, 68,215,198,167, 40,193,216,229, 25,230,150, 90,134,164,181,
+ 44, 12,248,176,155,138,164, 83,152, 56, 29, 21, 18,237,170,105,234,166,174, 87,174, 90,117,201,165,191, 49, 53, 53,197, 0, 24,
+ 35,150,238, 66, 7, 46,116, 84, 67,198, 98, 60, 2,114,110, 80,157,237,129, 28,229, 69,220, 39,221,134,169,132,249,195,211,100,
+ 26, 36,237,219,117,176, 93,167,175, 3,152,117,135, 36,113,210,200,113,147, 56, 51,177,204,141,165,132, 55, 27, 30,111, 3,121,
+211,212,182,174, 79, 60,101,203,142, 11, 47,146,232,236, 89,229, 2,220,157,116,206, 78, 45,107, 91,160, 91,209,128, 78, 2, 38,
+ 71,153,137, 40,159,181,151,252, 48,140,246, 55, 48,214, 15, 29, 29, 46, 38, 19,107,241, 74,132,164, 2, 29,144, 42, 58,125,151,
+157,174,150,253,209, 50, 6,213, 33,140,226, 9, 59, 62,157,249,216,212,181,181,141, 41,138,139, 47,189,252,216, 13, 27, 89,195,
+ 56,115, 42, 19,128,192,210,174,186,164,236,249, 68, 64,103, 90, 34, 71, 17,217,135,241,105,240, 68, 90,118,217, 5, 30, 75, 35,
+ 83,195,116,103, 60, 52, 27,133,200,195, 19,179, 72,135, 58,138,223, 69,172,147,119, 11,101,173,161,225,252, 14, 82, 4,168,193,
+220, 90,103,155,141,115,199,189,246,162,221,198, 20,234,212, 89, 24, 17,227,137, 10,201,120, 36, 15, 65,227,177,179,213, 20,232,
+136,165,237,250,225,238, 8, 83, 54, 76,148,248,186,177, 41,149,113, 61,138, 38,150, 24,207,165, 13,207, 93,100,216, 57,120,160,
+ 61, 15, 5, 88,251,177,169,229,164,211, 9, 17, 46, 28, 70,231,244, 4, 57, 63, 53, 61,125,241,222,203,214,206,206, 98, 40, 34,
+182,174, 63, 79,224, 58,146,234, 0,250,165,125,110,156,207, 69,229,131, 85,220,161,244,178,246,197,120,186, 11,119,127,152,208,
+176,140,167, 26,193, 36,199, 49, 75,135, 75,140,183, 4,233,164,111,233, 52,134, 48,156,152, 6,201, 2, 95, 19, 78,135, 16,230,
+193,228,196,121, 23,237, 62,246,216, 99,195,185, 36,129, 5,111,217,149,180, 91,136,109,160,200,246, 9, 96,108,176, 36,155,153,
+234,178,116,113,170,182,211,138, 76, 75, 94,148, 53, 36,135, 3,194,210, 1,140,177,109,114,140, 47,203, 94,157, 83,235,217,124,
+162,116, 25,156,156, 52, 76,237,128,241, 0, 69,229,192, 68,100,229,170,149,219,206,219, 49,187,118, 77,200,218,196, 8,182,216,
+188,157,156,128,212,109, 44,169, 79, 52, 2,101,201, 39, 89,198, 70, 4,184, 61,254,167,109,151,164, 88, 86,137, 45,139,138,221,
+117,244, 64,194, 81,129, 93, 82, 56,119, 94,210, 77, 86,187,175,203,107, 84,162, 92,123, 70,189, 10, 47,223,142,201, 68, 20,162,
+ 41,234,232,120, 89,172,157, 61,102,203,214,173, 43, 87,172, 12,240, 0, 99, 78,194, 89, 65, 36,139, 88,220,197,166,144,250,241,
+151,233, 62, 36, 25, 63, 13, 46,202, 70, 66, 19,103, 58,102, 36,157, 1, 20,186,255, 91,233,196, 9,220, 49,181,224,142, 6, 65,
+ 62, 31, 33, 93, 2, 89,132,128, 59,118,222,126, 25, 39,160,140, 49,128, 80, 20, 69,175, 7,104,176, 87,246,166, 86,172, 88,183,
+110,253,218,217, 89,108, 65, 27,182, 29, 12, 75,130, 84, 14, 41, 82, 32,235,224,195,124,174,173, 37,207, 57, 52,165,135,137, 7,
+202,123,250,147, 98,231,236, 45,197,249,233,206, 96, 68,231,220, 29, 14, 81, 39,215, 32,200, 59, 71, 51, 56, 12, 24,186, 25,194,
+217,177, 70, 16, 81,140, 20, 82,168, 70, 24, 3,198, 20,225, 84,188,193, 96,106,122,122,106,106,106, 98, 48,208, 51,110, 64, 4,
+208, 8,102,160, 32, 59,227,166,253,168,167,142, 9,234, 16, 86, 64,243,152,199,111,150,206,252,108,219,160,154,205,130, 36, 39,
+216, 25,114, 79, 61, 17,209, 17,229,243,230,156,171, 76,244,166,249, 12,254, 88,127, 16,134,158, 21, 0, 3,192,166, 48, 97,250,
+212,100,105, 17,166,115,113, 11, 83, 20,189,178,236,245,251,253, 94,191,236,247,202, 50, 30,107, 26, 7, 33, 81,101,147,151, 17,
+151,232, 75, 68,170, 1,233,197,246,152,206, 84, 95,167, 53, 63, 97,188,236,168,212,118, 78, 59, 54, 62, 43,119, 43,109,245, 69,
+141,171,115, 62, 66,183, 95, 63,213, 34, 56, 27,253,203,230, 35, 2,207,100, 76,145,104,193, 12,224,107, 71, 67, 24,241, 52,166,
+ 40,139,162, 40,139,162, 44,203,178, 40,139,194, 20,166, 48, 6, 13, 26,132, 56,132,185,180, 80,210,201,167,150,228, 86,157, 19,
+126,199,102,190, 58,147,154,227,241,129,219, 49,136,142, 55,140, 37, 40, 10,131, 71, 28,142,176,212,163,101,115, 95,194,220,157,
+233,230, 78, 39,121,171, 20,169,203, 94, 98, 7, 80,160,151, 16, 16,208, 20,133, 78, 14,171, 56,116,138,194,232, 57,184, 38, 28,
+ 50,161,153, 19, 3, 0, 80,242,110, 29,152,135,154,244,162, 30,239, 6, 2,193,178, 98, 96,151,108,251, 98,213,164, 99, 90,227,
+ 97, 84, 3,101,178,172,204,239,100, 17,150, 82, 20,203,146, 85, 78, 39,196,117,142,153,227, 22, 84,119, 4, 20,135, 54, 0,226,
+ 23,237, 24,179,158,105,102,208, 24, 85,148,162, 48, 70, 71, 59,116, 68,149,227,172,168,166, 83,121, 53, 95,198,226, 84, 6, 3,
+187,179,137,178, 12, 53, 25,216,187,206,161,114,157, 80, 27, 14, 47,163, 28,139,181,126, 90, 72, 40,117,205,183,101, 80, 72, 38,
+198,203, 64,153,246, 40,131,204,196,162, 10, 64, 59,148, 0,237, 80,137,142,149,160,126,105,176,208,137, 14,108,143,164,205,216,
+160,113,130,126,201,127, 89, 76,232,204, 91,102,146, 89, 26,208,187,216, 39,216, 72, 26, 48,146,110, 9,151,121, 25, 20,146,220,
+121, 50,199, 76,226,157,230,128,238,209, 5, 65,131, 32,204,179, 72, 56,144, 69,226,196,126,233, 42, 0, 0, 1, 47, 73, 68, 65,
+ 84,240, 50, 66, 26,116,209, 99,203, 77, 28,213, 69, 22, 70,198,100, 26, 99, 97,176,227,131,211, 99, 35, 66, 0,204,129, 17, 8,
+244, 91, 42,166,117,218, 61, 37,153,231, 88,251, 94, 14,130,194, 17, 39, 89,129, 59,248,233,204,250,114, 49,181,125, 3,237,237,
+184,155,242,103, 46, 51,105,144,170, 15, 98, 71,129,162,154, 32,166,137,234,182, 13,145,219, 65,228,238,136,195,216, 23,249, 92,
+ 14,104,128,207,138, 32,188,132,206, 15,119,111, 45, 43, 39, 42, 36, 15, 64,122,126,249, 50, 25, 41,141, 31,192,154,131,236,116,
+214, 68, 54, 28,218, 30,213,210,157,137,202,163,152, 50,235,122,114,142, 65, 3,113, 16, 9,116, 2, 72,249, 43,140, 40,185, 53,
+192,101,132, 35,161, 71, 13,198, 7,133,198,212, 41,171,122,200,242,197,126, 25,247, 62, 36, 75,210,156, 37, 14, 91,146,250,100,
+ 58,215, 25, 19,150,110, 3, 75,118,138, 74,219,222, 19,142,219,105, 91,240, 12,104,188,146, 84, 49, 81,235,202,186,113,178,166,
+205, 56, 18, 24, 90,210, 52,108,101,109,176, 99,206, 37,235, 37,135,238, 33,173,169,127,111,153,254,171,188, 49,150,219,105,233,
+ 36,135,244,216,148, 60,110, 27,184, 41,235, 38,149,101,204,103,156, 67,130,118,134, 50,197, 49, 77, 19,118,237,218,149, 39, 62,
+255, 63, 76,233,140,171,246,139, 26,248,249,127,255,206,139,124, 90,242,130,113, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+ 0};
+
diff --git a/source/blender/editors/datafiles/darken.png.c b/source/blender/editors/datafiles/darken.png.c
new file mode 100644
index 00000000000..9ba032f1f5e
--- /dev/null
+++ b/source/blender/editors/datafiles/darken.png.c
@@ -0,0 +1,308 @@
+/* DataToC output of file <darken_png> */
+
+int datatoc_darken_png_size= 9653;
+char datatoc_darken_png[]= {
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 96, 0,
+ 0, 0, 96, 8, 2, 0, 0, 1, 26,253,208,249, 0, 0, 0, 4,103, 65, 77, 65, 0, 0,177,143, 11,252, 97, 5, 0, 0, 0, 6,
+ 98, 75, 71, 68, 0, 0, 0, 0, 0, 0,249, 67,187,127, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66,
+ 40,155,120, 0, 0, 0, 7,116, 73, 77, 69, 7,218, 7, 21, 0, 4, 16,211, 77, 59, 52, 0, 0, 32, 0, 73, 68, 65, 84,120,218,
+237,124,105,172,173,231, 85,222,243,172,247,221,195,153,124, 7,219,215,118,102, 79, 81,176, 33,128, 27,135, 64,210,150,138,164,
+ 84,161, 81, 33,170, 65, 4,149, 68, 12, 85,255,132, 50, 39,100, 98, 8, 21,165,252, 97,232, 64, 85,130, 66, 5, 84, 16,168,224,
+ 79, 65, 85, 75,160,133, 86, 64, 32, 17, 83, 28,219, 9,137, 9,142,237,248,222,123,198, 61,126,239,122,250,227, 29,190,111,159,
+115,226, 36, 37, 84, 69,202,190, 71,231,158,179,207,222,223,126,191,245,174,119, 13,207,122,214, 2, 62,221,199,173,183,221,118,
+251,237,119,156,125,158, 0,222,240,198, 55,165,212, 17, 48, 51,154,197, 24, 71, 49,198,209,232,205,111,250,158,252,162,240, 45,
+255,252, 91,215,235, 85, 74,157,187, 39,119,247,116,120,172,131, 35, 61,249,148,167,201, 43,162, 63,120,116,116, 20, 87,171, 37,
+ 4, 0, 22,204,104,191,253, 62,174,214,136, 22,128,100,212,235,190,225,159,253,200, 15,191, 61, 94,221,159,255,201, 35,179,163,
+121, 34,237,202,165,109, 79,219,209, 8, 68, 0, 73, 14, 79,111,126,243, 91,194,245,238, 57,203,117,146, 4,233,120,182, 54, 91,
+196, 16, 37, 19,252,249,207, 77, 23,247, 36, 41,236, 92,190,139, 0, 4, 1,144,175, 59,239,210, 98,107,138,231, 63,215,158,121,
+ 69,130, 40, 68,200, 93, 34, 9, 17,132, 96,203,149,158,218, 63, 24,199,213,141, 23,110, 24, 67, 16,194,206,197, 59, 73, 1, 34,
+ 4, 16, 14, 66, 32,143, 79,210, 35, 31,157,119, 9, 55, 93, 28,241,230, 59,190,140, 8, 48, 80,132, 25, 64, 18, 68, 96, 8,164,
+145, 6,139, 81, 46, 49, 33,209,140,240, 44, 93, 3, 60,203, 69,100,128,127, 74,219, 21,218, 79, 91, 91,219,207,126,246,179,205,
+ 56,159,207, 79,239,221,125,247,221,247,101, 47,127,133, 36, 35,105, 22, 66,200, 27,247,235,191,246,107,191,243, 59,191, 93,174,
+244,192, 3, 95,221,117,107, 79,201,221,221,211,114,233, 7, 71,186,126,224,138,207,223,186,248,138,199,255,226,191, 3,136,171,
+213, 10, 0,141,102,246,225,199,248,225,199,220, 64, 50, 0,171,164,244, 3,111,255,193,183,189,245, 45,252,210, 47,255,186, 71,
+ 62,186, 32, 57,138, 97,119,235,162, 52, 34, 39,192, 4,192, 77,151,241,210,251,226,100, 58, 13,203,120, 59, 0,119,121,210, 98,
+ 53,219,158, 38, 96,212,185, 70,163,244, 69, 47,148, 65, 46, 69,135,155, 59, 96,130, 43,225,234,193,236,226,158,223,116,225,134,
+ 23,220, 62, 82, 10, 43,186,128, 40,119,129,160, 3,132, 4,232,250,225,124, 54, 95,221,118,243,165, 24,199, 82,222,187,203,119,
+ 0, 18, 64, 1,148, 0, 0,201,245,209,199, 87, 31,125,114,121,203,229,241,104, 68,222,124,251,203,105, 6, 26, 81,247,205, 8,
+ 6, 34,208, 66,176, 0,139,209,225, 38, 49,235,147, 17, 34, 65,154, 1,137,128, 64,147,227, 51,245,224,240,151,111,253,182,111,
+223,217,222, 81, 86, 81,130, 32,141, 70,179, 96, 36,131,133, 31,255,241, 31,125,226,137, 39,206,191,208,119,126,215,119, 39, 79,
+ 16,224,202,151, 37, 64, 35, 97, 52, 2,164, 49, 88,190,158, 25, 45,132, 96,102,143, 95,141,255,230, 71,223, 56,188, 80,156,205,
+102,245, 52, 33,139,169, 61, 64, 60,113,149, 31,251,184, 29, 29, 91,231, 33,121, 0, 28, 16,128,104,221,189, 47,249,129, 7, 94,
+ 25,127,238,103,223,249,240, 67, 15, 1,136,235,213, 10,128, 75,203,149,142,102,157,139, 59, 91,225,194,110,188,118, 96, 15, 63,
+202,117,199, 96, 6, 4,130,209, 12, 32,224, 0, 58, 79,227,192,180,238, 94,243,154,175, 11, 33,188,237,173,111,225,243, 94,248,
+234,228, 74, 41,223, 20, 1,192, 72, 32, 70,155,140,195, 36, 78,129, 41, 16,235,151, 1,236, 28, 49,232,254,207,227, 77,151, 44,
+152,153, 89, 24,197,184, 92,116,160, 64, 10, 52, 9,102,112,184,232,158,214,171,116, 98,235,173,201,201,214,120,226,152, 8,147,
+ 96,113,111,135, 55, 95,228,149,155,184,187,197,110,109,110,102,102,201, 61, 10, 9, 18,220, 68,137, 6,239, 0, 3,179, 46,138,
+142,147, 25,231,139, 68,206,119,182,226,149,155,167,207,185,117, 58,157,132, 81,176,117,103,117, 3,104,238, 97,231,210, 29,112,
+102,133,165,188, 72,193,179, 90,100,115, 33, 8, 46,173, 58,191,118,176,250,243,199,230, 31,125,114,185,238,124,123,106,132, 0,
+229, 7,111,190,243, 21, 0,153,213,159, 32, 13,217,136,129, 16, 96, 32, 32,210, 64,193,104, 6,129, 36, 45,100,129,146,182,187,
+ 29, 47, 95,156, 68,247,148, 85, 15, 0, 96,242,132,252,226,172,172, 78,145,148, 68,130, 64, 18,204, 0,200, 83, 86, 54, 23,142,
+231,221,201,194,163,228, 89,147, 65,131, 28,132,156,198,124, 75,128, 40,163, 9,176,108, 24, 13, 74,128, 17, 38, 56,242,135, 56,
+100,194,255,119, 15,158,251,236,165, 75,151, 46, 94,188, 4, 96,185, 92,236,239,239,207,102,179, 79,227, 66,119,221,125,247, 3,
+ 15,124, 53, 89, 12, 83,217, 18, 90, 86,222, 16,194,254,254,193,143,252,171,127,249,116, 23,122,227,247,188,201,147, 43,235, 96,
+ 57,253,249,224,147, 86, 30, 33, 95,204, 66, 28,197, 55,124,247,119,157,115,161,111,255,142,239,132,242,191,188, 75, 36,105,229,
+240,131, 22, 12,180,144,175, 24,130, 25,105,215, 14,226,227,143,127,228, 23,126,254, 39, 55,204, 72,215,117, 42,102, 88,205,140,
+136,117, 69,174, 69,178,213,202, 28,144,176, 94,107,255, 72,143,126, 12,169,123,206,107, 94,247,195, 63,255,206, 55,108, 92, 8,
+234,181, 32, 47,134,116,130, 73,124,242, 42, 31,123, 82,199,199, 88,151,155,118, 64,209,148,228,139,149,191,253, 7,127,232,173,
+111, 41,193,139, 85,215,231,238,238,114,185,228,146,251,241,204, 31,121,212, 31,250,176, 95, 63,242,181, 20, 12,209, 20, 13,209,
+ 0,184, 49,165,212,173, 87,221, 15,253,208, 15,151, 11,165,148,146,167,249, 98,253,248, 83,243,191,124, 98,113,117,127,177, 88,
+118, 71, 39,233,201,107,233, 99, 79,166,117,242,104, 30,205,137,118,251,234,220, 13, 41,134, 4,166,213,122,245,250,111,249, 22,
+ 0,113,255,120,245,240,163,139,171,251,107, 85,127, 20, 35,247,182,227, 40, 76,128,113,180, 80,204, 0,132,254, 90,216,217,193,
+214,196, 61, 1,210, 77, 55,222, 68,144,207,123,225,171,215,157, 36,144,204,231,158, 48, 51,196,145, 77, 70, 97, 20,182, 6, 22,
+ 50, 0,214, 57,204,240,252,231,226, 25, 87,184,183, 83, 84,108, 60,153,196,229, 42,101, 11, 82,148,136, 16, 82, 74,236,220,187,
+181,111, 79,211,120,212, 1, 59, 0, 58, 23, 96,227,136,103,222,138,155, 46,113, 50, 98, 81, 62,114,181, 90, 69, 72,162,138,245,
+ 41,138, 78,192, 9,118,201,143,231,218,198, 98, 58, 66,210, 54, 56,186,176, 99, 55, 93,228,205,151, 56, 25, 81,160, 39,192,128,
+174,131, 16, 93,137,121, 29, 34, 76, 46, 90, 89, 32, 32,185,115, 54, 83, 55,158,111, 79,177,183, 61,189,229,198,209, 77, 23, 56,
+153,144, 48, 79, 20, 85,244, 24, 93,204, 65,129, 64, 80, 16, 40,136, 4, 92,162, 1,144, 57,177, 92,123,215,205, 46,236,248,238,
+214,150, 89,148,155, 19,114, 11, 38,247, 18,199,133,157, 27,239,146,132, 28, 71,138, 48, 21, 27, 90,207, 34, 5, 2,130, 14, 78,
+210,201, 60,109, 77, 44,134,172,248,128,216, 14,126,216,185,116,103, 14, 69,170, 95, 19, 68,148, 5,139,162,202,179,128, 48, 95,
+248,199, 15,214,171,181,143,162,197, 88,223,199,188,162,203,119,170,196,170,205,107,215,221, 3, 5, 89, 94, 96, 94, 54,216, 37,
+ 63, 56, 76, 79,236,119,251, 71,221,170,211,116,108, 49, 16, 36,175,220,241,247,193,236, 46,200,222,180, 80,160, 33,127, 35, 45,
+199, 69, 37, 76, 4, 64, 88,182, 19, 33,132,221,237,120,249,194, 56, 10,142, 28, 66,203, 60,251, 19,229,117,185, 0,184,147,166,
+108,228, 65,202,179,234, 10, 78, 25, 0,119, 63, 60, 78,199,179, 69, 68,137,224, 65,102,175,152,255, 35,149,223,139,236, 35, 36,
+192,242,243,146, 8, 74, 38,203, 2, 48,213, 8, 19, 2, 37, 53, 1,131, 46,200,157,144, 68,200,229,128, 36,135,228, 16,232, 0,
+232, 80, 49, 23,162, 96, 18, 32,185, 92, 16,228,238, 16, 28, 20,178, 7,207, 11, 40,203,168,139,247, 98, 6,178, 99, 37,234, 26,
+ 62,251,248,244,253,108,123,220,113,199,157,247,220,115,207,237,119,222,121,249,210,165,254, 89,169, 42, 63, 45,251, 10,163,209,
+246,247,247, 31,122,232, 3,127,252,199,127,244,193, 15,126,240, 51,179,160,221,221,221, 7, 30,248,234,219,110,123,134,123, 86,
+ 5, 84, 11,205, 26,127, 19, 53,186,226,169, 72,154,213,141,101,231, 76, 3, 17, 71,163, 95,250,197, 95,124,207,123,126,255, 83,
+ 87, 14,190,234, 85,175,186,231,158,123,221, 37, 52,207,191,241,238,106, 38,216, 47,162,197,245,167,151,148, 19,142,126, 89,117,
+161, 70,242,137,167,186, 95,248, 79,255,254,241,143,253,197, 39, 89,208,183,126,219,119,160,132,193,167,151,210, 44,211,224,223,
+198,106,242, 50,187, 4,144, 93,199,108,119, 32, 2,230, 32,192,148, 40,241,232,132, 46, 62,254, 36,215, 93, 48, 67,140,252, 95,
+255,237,251,214,235,197,185, 11,138,169, 91,215, 69,244, 73,205, 96, 53,212,198,130,250,205,243,132,131, 19,202,121,253,136,238,
+ 92, 44,233, 78, 23, 93,150,189, 70, 9,144,129,245,138, 2, 87, 43, 74, 14, 24,201,175,252,154,183,125,193, 61,225,167,223,241,
+ 83, 31,252,224,195,167, 23,212,165,132,115, 55, 56,103,151, 44,225, 95,149, 14, 9,173, 19, 79,102, 72,206, 39,175,193,157,135,
+ 39,148,184,238,232, 50,200, 0, 7,114,184,111, 53, 84, 96,205,145,232,114,137, 93,178,229,194,255,201,215,191,118, 50, 25,253,
+228,191,251,183, 31,249,200, 71,134, 18,234, 6,167,167, 44,173,235,202,130, 64,196, 96, 32,162,145,129,158,232, 9,243, 21, 62,
+118,149,158,112,237,128, 2,147,103,231,102,128, 12,158, 93, 68,187,100, 11, 95,178,204,114, 28, 40,121,151, 16, 96,235,149,190,
+233,155,255,233,120, 52,126,195, 27, 74, 60, 26, 94,248,249, 95,232,174,117,231,171,206, 87, 43, 63, 89,250,124,158,174, 31,174,
+143,102,221,225,113,119, 52, 75,203,149,207, 23,158,146,186, 78,199, 51,237, 31,249,193,177, 63,121, 13,243, 5, 58,135, 11,209,
+ 96, 44, 95,100, 94, 89,149,240,224,145, 4, 1,227,160, 56,210, 77, 23,116,243,229, 98,154, 37, 37, 79, 47,255,178, 87, 60,246,
+216, 99, 79, 61,245, 84,220, 63, 92, 11,122,106,191, 59, 60,238, 22,107, 63,158,165,172,174, 57,182, 81,198,130,160, 96,164,113,
+119, 59,142, 99, 20, 12, 62,202,177,114, 93,129, 13, 62, 94, 64,104, 59, 85,109, 22,114,244,182,183,139,233, 24,211, 9, 83,170,
+ 71, 82,238,110, 50,125,237,215,190,230,183,126,235,221,188,237,115,254, 81, 1,146,154,151,206,153,231,240,140,103, 32, 33, 63,
+ 35,210, 52, 10, 22, 71,156,142,182, 0, 2, 99, 32,212, 93,179,250,115, 47,170,206, 65, 96, 20, 0,226,238,231,225,210, 30,166,
+ 19, 78,167,180,108, 74,242,178,204,242,247,236,166, 1, 86,240, 65,222, 31,238,162, 82,121, 77, 37,202, 17, 93, 9, 11, 23, 59,
+156,204,142,205,120,105,111, 4, 16,216, 6, 2, 16, 0,151,204, 65,169,100,158,211, 17, 64,222,254, 44, 76,199,184,176,199,173,
+ 9, 0,122,162,170,193,106,137, 41,165,136, 12,210,136, 37, 33, 22,100,174,178,101, 48, 87, 11,218,114, 88, 40, 9, 50,194, 5,
+ 64, 38,233,218,193,146,180,201,184, 11,198,209,104, 42,140, 37, 3,226, 56,242,242, 5,134,192,103,220,140, 16,184, 61,161, 5,
+ 17, 86,226, 67, 85,155,153,173, 89, 6,229,164, 88,163,142,252,145, 94,160,200,156,234,139, 53, 20,133,202,170,242,174,165,188,
+ 41,130,203, 41,130, 74,139,165,104,192,242,132,156,237,237,196, 43,151,198,227,113,184,253,182,137,153, 85, 35, 79,247,172,200,
+200, 9,191,193,220, 82,182,117, 4, 40, 26, 21,182, 47,223, 13,213,136,164,102,229, 57, 62,205,203, 96,137, 87, 51, 28,218, 27,
+ 79, 85,124,162, 61,153,209, 11,185, 86, 43,191,118,184,222, 63, 90,239, 31,117, 31,191,182,156, 76,108,221,121, 52, 50,135, 91,
+ 37,186,173,113, 81,142, 70,179,235,130,194,238,229,187,192,154,119,246,230,162, 46,170, 61, 59,204, 39, 88, 17,142,154, 30,149,
+112,181,230,192,130, 36,186,107, 54, 79,135,179,116,117,127,245,248, 83,171,229,202, 15, 78,214, 57,169,149, 96, 57, 79,105, 31,
+ 92,143, 84, 20, 82,198, 57,168, 26,195,202,209, 16, 36, 58,170,129, 46,122,141,154, 97,136, 50,229,216, 22, 57, 30,204,247, 15,
+147, 64, 38,193,220, 69,226,100,238, 0, 23, 43,167,225,177,143,175, 98,228,246, 52,238,109,135,233, 56,220,120,113, 20,140,147,
+113, 96, 5,116, 98,142, 95,243,245, 75, 40,159,131, 79, 43,155,145, 35,207, 28,103,247,254, 54,239,178, 4, 17,146,178,149,150,
+ 68,131,114, 52,109,146, 19,144,204,147,203,232, 43, 16, 88,175,215, 36,143,142,187,167,162,197,192, 71,159, 12,129,220,154, 4,
+ 51,219,221, 10, 22, 44,227,220, 34, 72, 39,233, 25, 29, 82,254, 15,148,171, 10, 73, 5,147, 44,184, 2,165,156,103,136, 37, 74,
+150, 76, 44,113,178,201,221,138, 53, 44,232, 48,224, 2,146, 27,229, 41, 25, 86, 14, 16, 39,201,128,209, 40,144,156, 78, 66, 48,
+139, 57,195,132, 92,160, 68,194, 41, 35, 51,164, 84, 19,146,124, 50,224, 61, 88,156,115, 57, 2,162,163,132,248,121,227,100,178,
+188,119,150, 23,236, 52,147, 84,208, 52,185,178,205,206, 22,220,225,134,213, 42,209,108,181, 86,214, 33,169,174, 37,103,104,130,
+247,246,190,207, 67, 85, 78, 94,134,216,170, 77, 39, 74,158,147,247, 45, 31, 35, 47, 55, 41,194,188,100, 29, 70,192,221,105,172,
+103,217,106,242,151, 21, 87, 4,100,136,200,176,156, 81,112,193,232,206,230, 69, 32, 47, 32, 98, 49,166,168, 54,178, 92,171, 92,
+ 60, 67,121, 86,180, 61, 27,171, 2, 91,215,164,191, 92,105,152,199,186, 72,194, 32, 9, 78,152, 44,167,105, 46, 81,114, 65, 42,
+ 9, 84,118, 25, 89,200,197,202, 8, 46, 23, 50,102,163, 6,136,228,252, 94, 46, 2,114, 72,217,138,230, 63,102,187,153, 65, 33,
+246,174,215,229, 53, 60, 45,241,142,202, 30,233,156, 8,241,179,143,207, 62, 62,211,153,107, 31,123,143,226,246,214,246,120, 60,
+158, 78,183, 70,163, 17, 74,232,189, 94, 44,150,203,229,226,228,228, 36,229,170,199, 95,235,130, 70,163,209, 23,124,193, 23,190,
+224,115, 62,231,185,207,121,110,136,181,226, 40,194,202, 57,203, 53,163, 28,238, 73,250,208,135, 62,244,254, 63,251,211, 63,248,
+131, 63,200,197,194,207,228,130,190,226, 31,190,234,222,123,239, 29,197,145, 26,110, 60, 40,250,156,202, 28, 91,110, 10, 32,132,
+ 64,227,106,181,122,239, 31,254,225,175,254,234,175,252,149, 22, 20, 99,188,247,222,123, 95,249,202,175, 80,139, 93, 91,120, 52,
+ 72,233,135, 25,254,102,102,191,153,218,147,102,118,120,120,248,227, 63,246,163, 39, 39, 39,159,222,130, 46, 95,190,252,202, 87,
+190,242, 25,207,120, 86,137,231,250,104,122,240,162, 97,208, 63,248,254, 9,215,148,163, 83, 32,196,240,228, 19, 79,252,204, 59,
+223,121,237,218,181, 79,105, 65,175,127,253,235,183,182,118,170,249, 60,157,225,247,153,124,159, 68, 15,165, 84,242, 32,230, 56,
+ 21, 67,128, 97,184,153, 92,119,246,190,247,125,224, 87,254,243, 79,127,242,226,248,223,254, 59,127,215,147, 11, 74, 74,197,152,
+ 23,135,208,126, 41, 43,244,226, 73,202, 47,197,197,122,193,232, 42,112,164,190,162, 86, 92,137,195,177, 90,115, 60,189,233,165,
+ 47,251,242, 63,250,163,255,189, 94, 63,157,202,199,148, 18,234,167,250,185, 59, 90,183,166,208, 11,154,120, 28,142, 12, 48, 64,
+240,174,203, 53, 18,144,158,113,116, 79, 16,124,177,228,114,173,217, 60,125,252,154, 25,117,223, 75,223,250,248, 95,188,251,145,
+247,255,250, 39, 92,144,187, 15, 3,234,141, 99, 39,180,114,193,240,169,225,143, 2,146, 67, 82, 74, 6,194, 29, 36, 82,254,158,
+224,142,197, 10,139,133,207, 23, 60, 62, 17, 96, 49,224,198, 91,191,244,239,190,236,174,119,252,135,127,125,254,130,228,222,203,
+ 27,155,249,120, 9,164, 74,102, 54, 92,149,160,217,156,203, 14,139,165,142,103,244,196,249, 82, 32, 82, 42, 25, 92, 14,228, 1,
+117,201, 82,146,187, 89,217, 96, 37,183, 91,111,125,214,247,125,255,191,248,190,239,125,243,121, 91,230,142,243,145, 42, 52,189,
+237, 99, 24,244,199,127,185,230,124,201,147, 57,175, 31,194, 29, 39, 51, 7,232,176,138, 12, 85,244,164, 20, 82,220, 72,130,235,
+ 68, 11, 72, 73,163, 17,191,255, 7,222,254,189,111,123,235,169,207, 52,149,194,212,211, 62,114,169,197,243,143,126,120,162,107,
+135,186,118,160,171,215,117,120,164,197, 74,139, 85,201,147, 8, 25,221,168,193,151, 27, 65, 56,225,130, 3, 14,164,228,174, 36,
+ 51,123,227,247,188,233,204,130, 62,209,122, 90,161, 80,106,223, 33,200,113,120,172,235, 7,120,234,186,158,218,215,225,137, 22,
+ 75,173,214,114, 41,185,140, 48,178,162, 51,172, 95,110,236,177, 34, 73, 41,121,231,238,174,189,221,189,111,252,166,111,222, 88,
+144, 15, 30, 41,165,206,211,114,149, 22,203,180, 88,118,243, 69,183, 88,166,213,218,187,117,202, 28,165,213, 74,171,181,207,151,
+ 62, 95, 42,185, 11,238, 46,192,115, 5, 1,167,117, 48,215,219,114, 25, 32,215,176, 60,152, 51,231,165,158,228,158, 60,221,254,
+188,219, 95,244,162,251, 7, 74,221,107,143,214,157, 4,156,204,242,242, 33, 49, 6, 76, 38, 33, 26,119,183,225,142,131, 19, 36,
+199,181, 3, 44,150,238, 66,114,146, 30,173, 66,119, 37, 25,245, 1, 62,212,107, 82, 54, 99,193, 16,205, 67, 64, 8,148, 32,135,
+ 27,190,234,213,175,254,179, 63,251,211, 92,117,182, 46,121,151,124,190, 74,243,133,159, 44,210,108,158,230,171,180, 88,248, 98,
+233,139,165,207, 87,158,159, 63,158,249,108,238,243, 69, 90, 46,147,187, 75, 62,128,235,116, 10,189,171,223,253,212, 15, 6,196,
+160, 16,138, 90,186,228,238,114,239,186,238,219,190,253, 59,138,132,142,231, 93,215,233, 35,143, 47,221,177,127,184,238,124, 96,
+ 16,171,223, 48, 34,152,133,128, 11,187, 19,137, 41,141, 37,146, 22,173,153, 7, 31, 64,156,234, 93,114,191, 56, 73,176,136, 27,
+118, 49, 26,101, 93, 52,152, 59, 76,238,193,108, 50,153,220,127,255,139,127,255,247,127,207,214,107, 95,119,158,146, 82, 74, 73,
+165,188,147, 85,212,179, 40,220, 83, 82,151,242,107, 60, 43, 83,166,135,213, 91,247, 65,109,214, 55,191, 82,251,153,116,193,163,
+121,160, 36,149,226,179,187,220,147,187, 92, 95,249, 85, 95, 69, 50, 44,226,157, 79, 92, 91,157,204,211,124,233,217, 36,177,229,
+ 79, 53,175,202, 40, 69,114,172,214,105,177,234,136,117,210, 42,208,171, 34,115,243,251,240, 87,184,144, 4, 35,204,180, 53,197,
+ 93,207,193,133, 27,176, 61,105,196, 14, 54,147, 37,215, 13, 23,110,136,203,117,234, 75,137,185,242,230, 94,157,185,114,142, 8,
+208, 41, 42,215,106, 1,185, 25,198, 33, 14, 36,145, 41, 66,195,237,243, 83, 43, 51,194, 32, 51, 4, 67, 73,251,138, 41,165,106,
+186,120,255,253, 47,142,245,143,197, 49,177, 20, 21, 13, 40,217, 45, 74, 82, 92,205, 18,217, 37, 71, 34,176, 28, 69,142, 98, 32,
+ 70,100, 0,166, 85, 93,172,243,114,196, 8,134,128,177, 97,123,138, 43, 55, 34,142,184,179, 5, 51,203, 78,196,104, 18,232,144,
+ 41,184, 59, 45,165, 20, 11,214,211,131,122, 42,254,148,249,116,100, 52, 82, 64,221, 66,200,157, 36,150, 43, 95,173,185, 61,193,
+116,146,111, 37, 23,188, 75, 69, 33,239,114,131, 8, 66,196,214, 20, 49, 40,219,201,108,215, 61, 95, 40, 7, 14,102,132,211, 25,
+ 75,218,155, 35, 11, 85, 24, 65, 62, 8,163,189,192,131,244,226,254,179,101, 35, 37,173, 58,144, 93, 8, 30,131, 0, 75,154,102,
+100,152,178,237, 41, 71, 81,219, 91,220,217,210,116,156,101,131, 22, 82,104,224,170,105,146,123, 46,208,198, 76, 70, 99, 21, 81,
+ 70, 50,188,226,211,185, 22,156,233, 32,133, 93,228, 34,152,183, 20,228,186, 83,151, 82,176, 52, 25,249,104, 20,132, 8,134,140,
+218, 76,198, 28,141,120, 97,215, 47,236, 90,140,154,142,171,251, 16, 76, 21,196, 46,138,175,194,133,202, 40,108, 70, 21, 88,128,
+ 49,177, 44,167,172, 44,151,144, 51, 94,194, 26, 32,121, 49,203,185,176, 76, 23,187,228, 32,198,163, 53,208,109,111, 41,152,221,
+176,109,147, 73,216,154, 32, 4,183, 10,231,100,112,197, 81,111, 48, 35,118,238, 32,105,230,238, 49,195, 20,153, 53, 38,178, 88,
+255, 26,175, 54,209,121,101, 2,208,189, 71,253, 61,215, 30,228,194,170,195, 58,249, 98, 53, 51,242,194,174,198, 35,187,124, 97,
+178,183,203,130,189,182, 11,171, 66, 77, 58, 21, 98,149,192, 55,170,128,135,108, 74,236, 25,159,102,133,126, 91,165, 2, 14,192,
+ 43, 0, 90,180,205, 43,182,102,165, 26,230,192,170, 75,144,230,139,206, 76,163,104, 49, 24, 77, 33, 88, 37, 39,108,172,195, 90,
+208,228, 46, 32,236, 92,186,171, 20, 70, 88, 45, 34, 42,156,154,113,255, 90, 91, 40,230,170,252,175, 18, 17, 90, 15,207,182, 80,
+241,100,158, 14, 78,186,249,210,175, 31,118, 14,140, 2, 37,196, 56,200,243,250,104,184,193,246, 69,232, 49,255,224,202,192, 27,
+ 27,148,199,146, 90,120, 93, 19,213,155, 86,193,201, 44, 75,183, 28,125, 49,151, 1,220, 97,249, 72,162,115,133,228,235,181,175,
+ 58,151, 16, 3, 72,198, 80,107,123,204,230,141,165,208, 83, 9, 90, 97,247,242,221, 40,208,126, 33,200,102,113,229,250, 41, 43,
+176,152,177,214, 86,160,110,108,232, 98,200,145, 75, 39,229, 83,114, 45, 97,185,210,108,233,135, 39,233,169,253,245,254,113,215,
+117,154, 45,124, 58, 9,238, 10, 54,140,113,193,158,254,130, 56,136,166, 51,242,102,200, 8, 93, 9,158,155,122,177, 5,202, 78,
+245, 53, 34,135,140, 57,248,130,153, 36,210, 33,115, 57,204,232, 76,201,215,228,168,243,174, 19, 89,168,221,201,101, 76,102, 33,
+111,119,166, 20, 10, 6, 50, 86, 38,162, 50,104, 74,102, 32, 29,121, 3,250,227,193, 22, 84,160, 8,139,229, 13,212, 0,136,182,
+130,180, 87,227, 96, 93, 66,242,110,181,182,147, 69, 10,180, 39,174,174,204,120,249,194, 40,154,221,124,105, 60, 30,219, 40, 50,
+ 70, 56,204, 32, 72,177,168, 80, 86,233,108,160,139,220,179,133, 46, 64, 63, 79, 65, 37, 89,114, 78, 89, 78,147, 60,111,111,177,
+ 97,185,210, 96, 5, 43, 16, 72,247,149, 27, 67, 2, 21,204,118,182, 66, 23,148,220, 61, 33, 7,108,249,110, 92,138,200,133, 4,
+214,255,170,241, 66, 53, 68,217,103,168, 63, 96,168,161,131,192, 66,133,181,172, 78,133,146, 83,202,162, 94,161,226,124, 6, 76,
+174,100,139,149, 27,244,196,213, 21,137,235,135,107, 11, 54, 29,135, 24, 56, 25,133,233, 36,208, 44,214,106,166, 23,219,199,106,
+247, 92,149, 67, 80,173,114,245, 60,217,159,208,208,203,166, 17, 50, 28,176, 18, 61,178, 36,178, 36, 65,151, 27, 13,238, 29,221,
+180,158,131,196,108,238, 34,166,147, 16,141, 91,211,184,179, 37,146,177,149, 49,139, 0, 84, 12, 95,137,211,124, 96, 11, 10,126,
+166,194,163,243,222,193, 53,142,186,242,115, 86,114,124,154, 85,116,130,116,121,182,107, 21,132,119,144, 66,215, 73, 6, 95,166,
+228, 0, 45,246,208,120,171, 70,123, 5,235, 89, 20,162,207,232,107, 77,152, 20, 8, 23, 45, 27,147,188, 70,170, 22,193,178,139,
+179, 97,245, 77,176, 82, 88,237,107,204,217, 61,123, 71, 67,231,243,185, 72, 90, 6, 87,138,251,202,181,156, 22,193,230,100,149,
+ 20, 7, 68,157,156,188,148, 52,192, 51,155,171,176,164,170, 16, 11, 32, 80, 25, 84, 57,214,203, 46,154,165, 90,234,141,112,210,
+ 20, 82, 84,182,252,173, 10,230,185,222, 81,216,241,116,244, 22,193, 29, 25, 37, 41,226,207,153,117, 9, 88, 51, 11,185,102, 23,
+165,242, 82, 74, 71,253, 59, 10, 29, 68, 98,169,102,244,127,206,244,178, 28,101, 89, 46,165, 66, 77,214,185,150, 90,171, 17,240,
+252,193,189, 30,201,189,165,133, 94, 27, 32, 88, 42,166,213,198,151,194, 59,171, 56,138,151,168,138, 86,170,203,153,228,150, 99,
+189, 26, 14, 26,139, 0,114,161, 13,229,234, 94, 59, 85,138, 19,115,184,202, 87, 41,234,212, 74,181, 55, 76,146,185,240,130,242,
+102, 21,123,175, 82, 97, 44,117,153,236,143, 74, 20, 6, 12, 14,176, 36,167, 91, 13, 97,229,173, 50, 95, 73,127,133,150,135, 65,
+122, 83,142, 64,150, 17, 11, 67,175,152,111, 87, 43,122,114, 32, 96,176,146, 66, 51,173, 66, 24, 0, 25, 44, 75,115,213,114,156,
+ 21,244,204, 75, 21,220, 65,122, 91,132,202,167, 74, 66, 6,218,122,148,184, 6, 42,173, 90, 85,202,199,141,215,175, 22,146,228,
+172,165,190, 93,165,174,173, 86, 46, 71,177, 6, 32,104, 89,232,229, 76, 8,132,123,177,253,170,161, 34, 32,202,233,128, 11, 82,
+217,185, 34,170,190,212,237,104, 86, 34,183, 61,149,141, 83,221,225, 98,129, 74, 92, 93,148,119,232,143, 62, 91, 48,251,236,227,
+179,143,207, 62,254,166,212, 91,159,238, 18,228,238,222,222, 13,123,123, 59, 59,187, 23, 46, 94,184,124,233,242,133,139, 23, 47,
+220,112,195,246,206,238,206,206,214,120, 60,201, 53,170, 65, 37,103,163,104,209,117,221,124, 62, 59, 60, 58, 60, 58, 58,126,242,
+201, 39,142,143,142, 15, 14, 15,142, 14, 15,247,247,247,143,142,142,254,230, 9,104,123,123,251,174,187,159,255,204,103, 62,243,
+150, 43, 87, 46, 92,184,184,189,179, 29, 99,132,112,174,193,111,165,145, 51,197,147,205, 31, 26,185,245, 12, 31,186,235,186,217,
+201,236,224,240,224,177,199,254,242,161, 15,124,224,225,135, 30,234, 62, 67,149,239,207,152,128,174, 92,185,242,133,247,221,247,
+185,159,251,194,201,100, 44,245, 81,197, 39,191,110, 9,233, 48,192,165,202,175,108,153,118, 73,212,137, 65,177,116, 88,208, 45,
+189,156, 44,245, 85, 65,185, 7,235,209, 71, 63,242,155,239,126,247,131, 15,190,223,221,255,159, 10,104,119,119,247,150, 91,110,
+249,188,207,123,225, 93,119,221, 93, 16,157, 86, 24,238, 49,165,211,250,194,115,149,102,216,107,114,250,215, 51, 28,250,179,223,
+ 55,187,230,114,175,107,147, 84,207, 21, 48,187,126,253,250,255,252, 31,191,245,224,131, 15, 94,189,122,245,175, 69, 64, 87,174,
+ 92,185,247,222,123,111,191,253,246, 43,183,220,146,146,103, 66,234,166, 80,116,182,224,116,190,128,106,241,124,195,218,244,204,
+131,205, 2,202, 57, 68,250,211,100,128, 79,246,100, 73, 57,115,211, 33,132, 15,253,249,135,127,239,119,223,243, 39,127,242,222,
+174, 91,127,102, 4,244,230, 55,191,121,185, 90,183,138,238, 6,163,115,131,100,241, 73,229,188,121,183,167,158, 60,231,101,167,
+104, 27, 79,163, 74,167,168, 11,195, 99,216, 78, 95,233,174, 93,172,236,248,132, 93,194,122,181,252,195,247,252,230,239,253,238,
+111,252, 21, 5, 20,231,139,101, 35,156, 12,168,181,103,165,114,198,242, 12,105, 50,155,114, 25, 60,121, 86,149, 78, 31,194, 82,
+207,168,242,106,165,108,246,205,101,164,229,138,194, 16,156, 98, 73,167, 64,121,205, 71,136,229, 82, 71, 39,185,147, 99,124,247,
+ 61,175,184,247,243,255, 65,242,213,111,252,215,159,251,232,163, 15,226,255, 42,111,136,133, 14,117,170,181,228,188,218,189, 78,
+ 89,172, 74,110,102,255, 30,242,236,235, 52,144, 0, 42, 85,189,182,214, 57,224,174,228,108,137, 91,151, 42,169,130, 21, 64,168,
+136,177,215, 95, 50,255,184,240, 68,165,249,146,203, 85,249,117, 54,231,213, 3,172,215, 86,219, 61, 18, 16,111,122,246,235,158,
+117,151, 66,250,211,247,255,241,127,185,118,237,211,179, 83, 3,122,197, 39,226, 52, 60,141,228, 55,171, 2,108, 4, 44,157, 5,
+196, 7,207, 10,201, 11, 1,147,100,151,176,238, 74,210,237, 98,151,122, 12,198,133,205,165,177,237,164,123, 46, 46, 82,226,106,
+173,229, 58,163, 9, 92,117, 57, 5, 77,149, 8,106, 25,101,233, 18,158,247,220,123, 95,254,247, 62,119,181, 58,250,165,119,253,
+194,195, 15, 63,252, 41,107,208, 38,221,131,131, 58,242,249, 79,212,131, 82,129,242, 76,160, 87, 67,252,139, 89, 24, 70, 3,125,
+251, 14, 37,117,142,147, 25, 23,171,130,190,204, 22, 58, 62, 97,234, 4,178,115,173, 86,182, 78,189, 84,106, 57,205, 78,237, 75,
+210,144,158,208, 14,117,235, 26, 41, 88,103,202, 32, 27,153,156,235,206, 87,107, 76,167,219, 95,255,218,111,148,244, 31,127,230,
+ 29,143, 60,242,200,167,164, 65,103, 52, 69,231, 43,207, 57, 44,157,214,137, 50,248,107,227, 88,111,190, 58,121, 57,130, 41,161,
+ 75,234,186, 12,107, 49, 37, 36, 71, 39, 80, 72,142,228, 94,186, 37, 50,190, 54, 44,246,110, 16, 0, 54,138,203,109, 51, 72, 4,
+ 54,200,173,150, 61,242, 46,102,189, 19,229,110,196, 55,124,227, 55,205,102,179, 95,122,215,187, 30,124,240,253, 79, 43,160,222,
+ 95,157,186,203, 51,225,239,153,198,179,218,123, 60,232, 67, 70, 45,235, 84,112, 37,147,222,151, 43, 30, 28, 99,181, 22,128,174,
+195,225, 49,231,171, 2, 31, 37, 71,231,131,186,212,160,223,193, 32,219, 64,161,159,198, 42, 54, 9,246,211, 28, 36, 88,225,119,
+ 41, 55,199,118, 29, 83,151,231,164, 80,242,233,100,242,218,215,190,238,177,143, 61,246,243, 63,247,179,159, 40,134, 10,127,235,
+ 69, 47, 82,191,188, 1, 83,227,212,111, 61,169, 8,117,224,128,176,209, 46,116, 6,110,170,168, 49,132,213, 90,179, 5,214, 29,
+220,209, 37,204, 87, 88,173,209, 90,235,188, 25,227, 1, 23, 66,130, 21,135,174, 1, 65, 98, 3, 77, 60,195,163, 64,109, 34,106,
+142,174, 28,211, 16,116, 97, 23,151, 46, 42,148,114, 80, 81, 44,185,239,237,221,240,210,151,189,108,119,103,239, 3, 31,120,240,
+ 19,144,242,206,245,233,133, 5, 95, 54,121,213,121,215, 21, 61,105,247, 67, 48, 24, 99, 44,157,215, 70,142,199,140,150, 11,158,
+ 88,117, 92,173,153,209,232,217, 18, 79, 93,231,114,149,197,193,212,169,176,110, 68,130,129, 26, 22, 43,134, 55, 62, 24, 35,112,
+138, 93,115,190,178, 75, 74,181,208, 98,132, 81,227, 0,128,209, 16, 2, 3, 17, 44,219, 72,135, 44, 55,134, 37, 79, 46,191,255,
+254,251, 95,252,226, 23,255,196, 79,252,216,227,143, 63,190,161, 65,247,221,119,223,185,202,235,146,123,241, 35,238, 90,174, 50,
+ 57, 71, 73, 74,174,206,149,114, 91,118,141,161,242,224,160, 88,136,165,144,176,238,176, 90, 41,155,152,197, 10,199, 51, 44, 87,
+197,139,187,106,215,128,144, 7, 3,157,103,234,184, 25,116,242,140, 33,228,185,158,182, 52,121,228,193, 12, 25,197, 37,130,225,
+226, 30, 46, 94, 64,140, 37,241,107,250, 63,244,186, 47,249,162, 47,222,218,222,206, 67,117,138, 6,205,230,197,103, 36, 87,166,
+ 12,229,195,211,117, 90, 44,189,225,203, 41, 13,109,242, 0,156, 38,205,250,188, 42, 70,150, 49, 48, 70,163, 73,161, 90,104,174,
+214,161, 22, 41, 51,248, 92,154, 84, 55, 77,201, 80, 89, 6, 68,135,243,157,133,206, 6, 93, 67,198,169, 25,166, 19,140, 2,105,
+ 10, 1,227, 81,134,170, 11, 3,161, 53,248,165, 74, 29,118, 64,166, 47,249,226, 47,185,249,166,155,127,249,151,223,149,193, 22,
+254,227,175,121, 93,190, 96,151,116,237,112,125,116,146,220, 37, 97,217,105, 54, 79,201,207, 44,139,234,169,154,195,251, 33, 73,
+ 25, 75,167, 87, 48,219,153,134,113, 12,181,238, 19,186, 20, 32,219,180, 41,236,169, 60,253,167,216,166,190,112,240, 36,206,152,
+158, 83,170,231, 82,137, 0, 72,140, 2,182,183,176, 53, 5, 97, 33,232,202,101,222,114, 35, 71, 99,181, 29,236,117,116, 64,175,
+ 6, 16, 66,220,223,191,254,142,119,252,212,245,235,215,195,165, 91, 95,112, 60,243,227, 89,119, 60, 75, 71,179, 52, 95,250, 58,
+169, 75,190,206,102, 66,165, 8,149,251,143, 88, 24, 2,165,123, 16,181,199,172, 53,120,182,126,165, 86, 41, 43,236,203, 82, 21,
+ 73, 64,151,235, 21, 3, 6,221,169,253,215,211,250, 44,157,115,166, 52, 84, 40,152, 33,183,202,141, 35, 46,238, 97,119, 27,211,
+ 9,182,166,216,217,210,116, 10,227,240, 18, 27,236,245, 1, 59, 73, 91, 91, 91, 95,244,146,151,188,239,189,239,229,109, 47,248,
+202,205,160,144,231, 68,209,155,233, 85,169,250, 72,236, 7,125,148,242, 92, 77,174,122,107,170, 58,144,105, 20, 74,222, 57,138,
+ 28,135, 76, 80,203,159, 25,234, 56, 43,108,106, 22,207,123,242,172,219, 42, 21,187,108,248, 70, 6, 39, 34, 32, 96,107,138,103,
+221,134,139,123,204,150,104, 50,194,120, 92,230,147,212, 65, 63,167,112,129, 1, 90, 64, 90, 48,165, 66, 97, 56, 21,237,156,230,
+202,244, 71,189,178,131, 27,187,164,146,113, 74,191, 94,230, 24, 9,222,203, 17,249,175,165, 83, 18, 80,162, 33,164, 13,100, 77,
+173,189,123,120,196, 26,213,208,212, 62,236, 28,126,100, 31, 65, 27,193,128,173, 17,130, 1,192,116,140, 81, 84, 48,179,129, 41,
+235, 45, 41, 7,140,220, 10,224,161,103, 88,201, 5, 11, 22,189, 87,108,162,181, 30,171,229,203, 77, 86,229,169, 70, 23, 42,168,
+209, 32,243,239, 15, 90, 95,202, 44,239, 75,201,157,165, 64,190,238,180, 88,166,150, 17,108, 77,108, 50, 14, 3,233, 76, 6, 50,
+178,122, 30, 41, 49,137,220,128, 6, 10,251, 36, 24,162,149, 79,223,221,193,205,151, 56, 30,131, 64, 12,216,217,198,214, 36, 53,
+ 24, 32,135,113,173,222, 92,123,177, 43, 11,170,196, 71,181, 89, 27,142,132,200, 28,207,158,238, 73, 56,197,236, 45,197,203,198,
+ 59, 24,128, 28, 53,216,207,195, 86,224,173,215,181, 40, 80,143, 90,120, 75,228,179,255,112,167, 25, 82,126,103,233,149, 21,144,
+212, 15,165, 9,167,108,118, 41,156,151,205, 46,210, 26, 5,196, 88,152, 87, 49,192,172,248,130, 50, 29, 45,209, 76,103,250, 25,
+120,198, 9, 54, 46, 73, 21, 60,233,134, 56,176,110, 61, 38, 81,239,171,138,168,180, 99,179, 41, 41, 53,144, 87,207, 5,241, 6,
+120,244, 13,146,133,176, 87, 57,189,125,145, 58,135, 75, 90, 44,181, 92,149, 95,131,113, 20,215,193, 12, 64, 52, 75, 24, 75,205,
+ 60, 25,105,130,229,168,111,111,135, 49, 42,191,101,111, 27,123, 59,133, 44, 22, 2, 38, 99, 4,107,122, 94,249,106,159, 12,188,
+ 41,106,209, 64,115,128,146,129,209,171, 81,101, 79, 13,238, 57, 54,173,187,159,141,166, 84,158,235,105, 40,172,165,238, 13, 15,
+124, 6, 58, 42, 92,177,214, 85,158,169,170, 68,161,143,101, 60, 39,183,250, 87, 30,144, 49,161, 76,225,107, 22, 53,229, 73,146,
+109,164,154, 17,150,251, 66, 12,204,163, 67, 6, 30,149,185,182,207, 54,106,234,188,127,101,170, 19, 91, 41,161, 60, 69,202, 83,
+108,109,224, 42, 44,211,129,178, 8,109,206, 95,225,223, 13,134, 83,213, 83, 83,226,214, 58, 18,181, 42,224,176,187,169,174, 57,
+191,176,140,114, 42, 92,178,218,154,203, 44, 50,172, 58, 16, 9,160,173, 61, 68, 15,182, 36,141,192,100, 18,246,182, 70,163,145,
+129, 24, 71,187,124, 67,156, 78, 44,231, 13,193,100, 54,100,169,247,217,178, 54, 93,250,185,248, 85,211,244,188, 67,253, 17,203,
+145, 52,232,167,113,119,231, 48,211, 27,216,157,214,230,140,126, 8, 2, 43, 41, 98,208, 75, 50,200, 23, 55, 33, 82,249,224, 84,
+230,238, 51,150,214,232, 70,128, 42, 10, 45, 9,105,157,242, 7,208, 16, 2, 28,214,114,131, 96, 54, 25, 53,227, 75,158,161,101,
+244,184, 2, 85, 56,250,172, 65,199,128, 55,116, 42,192,209, 41,204, 38,132,216,227,155, 13,198,105,222,171, 82,187,138,182,200,
+ 11, 91, 68, 37,140, 40, 83,116,155,254, 84,138, 22, 55, 14,118,229, 98,162,176,221,170,252,202,180,200,140,122,176,241,146,203,
+144,185, 76,214, 41,231, 77,206,217, 60,173, 59,207, 53,178, 81,176,227, 89, 55, 25, 25,201, 16,176,187, 29,118,183, 66, 8,165,
+251,112, 28,105, 86,176,160, 60, 4,180, 78,155,200,244,202,220,157, 94,214, 70,208, 11, 41, 78,102, 54, 56, 4,202, 93,112,177,
+218, 84, 13,123, 33, 57,244, 62,149, 85,202,129,237, 41,112, 71, 21,237,144,128,202, 13, 45,174, 92,195, 62, 69, 47,211, 51, 85,
+ 47, 92, 6,161, 21,114,113, 33, 36, 14, 89,164,130,224, 88, 75, 21,105,228, 40, 56,160,201,216, 0,196,104, 33, 96, 50,202,113,
+ 22, 67,180,210,102, 84, 48, 37,121, 69,251,123, 15,223,120,232,253, 20,143,204, 65,203,180,102,245, 20,117, 32, 22,200,114,211,
+ 13,150,182, 70, 14, 99, 42,158,138,142, 42, 69,184,240,178, 26,224,170,179,165,196,166,161,253, 88,128,170,131, 45, 98,106,101,
+216,214, 71, 82,205,106,102,104,170, 17,204,165,228,152, 45,211,178,115,130,102,105,221,249,241, 44,229,112,112, 50,178,157, 45,
+ 27, 5,138,136,102,211,137,141, 98, 27,158, 37, 43,179,133,107, 79, 69, 15,250,109, 70,203,234, 69, 28,251,142,152, 1, 26,126,
+172,230, 0, 0, 5, 38, 73, 68, 65, 84, 27,174,239, 74,200,231,174, 57, 62, 98,224, 7,235,193, 64,165, 3, 14, 56,117,234, 53,
+168,231, 52, 87, 10, 54,203,217, 44,241, 54,251,193,131, 94,206, 65,158,136, 80,113,230, 82, 24, 81,165,133, 38,193,151,106, 67,
+171,230, 75, 63, 56,238,114, 96,180, 53, 13, 23,119,227, 40, 26,168,113, 12, 64, 32, 67,137,144,141,155,189, 70,195, 76,251,252,
+114, 58,129,232,253, 36,196,230,199, 74, 73, 42, 47, 10,195, 99,166, 74, 99,172,236,247,193,217,234,179, 77, 14, 2,204, 83,121,
+168, 88, 1,164,214, 1, 82,154, 85, 10,181,174,232,124,118,250, 44,163, 78, 90,144, 88,246,209,165,190,188, 38, 79, 72, 53, 22,
+ 91,174,121, 60, 75, 49, 58,137, 24,220,229,179,101,153,151, 52,138, 54, 30,101,151,136,104, 28, 69, 43,241, 65, 38,161,215, 38,
+ 73, 86, 90, 99, 94, 97,172,243, 84, 42,223,145,125,206,213,188,115,155,107, 54,168,110,181,238,165, 62, 62, 30,164,111,103,167,
+165,105,192,247,215, 96, 86, 80,223,180,171,210, 0,209,203,184,153,162, 34, 72,245,248, 81,174, 18, 1,116,208,229,169,204, 21,
+210,114,169,227, 89, 87,166,109, 27,199,145,193,242,249,194,206, 52,236,108,133,220, 58, 62,157,216,165,189, 56, 30, 91, 14,157,
+ 70, 35, 11,173,161,160,114, 36,114,117, 41,182, 0,134,141,228, 58,108,170,169,211, 94, 90,191, 58,250,161, 48, 44, 77, 46, 26,
+ 20, 3,251, 8,251, 84, 27, 77,207, 92,238,207,102,225,185, 14,111,188,224,216, 5,210, 98, 27, 31,227, 5, 70,110, 53,142,250,
+201, 68,245, 66, 45,176,247, 42, 95,229,146, 13,115,163, 69,151,180,236,188,206, 61,195,113,236,198, 93,200, 41,238, 40,134, 24,
+106, 1,155,168,170, 5,131,197, 1, 87,190,150, 74, 75, 64,217, 18,134,114,187,165,211,109,128, 88,246, 61,103,213,159,183, 66,
+170, 78,201,166, 18,166,123,146,186,154,157,103,157, 31, 70,207, 77, 65,213, 72,209, 11, 75,189,190,182, 12, 94,202, 82,245, 66,
+165, 31,228,212,185,109,169,156, 27,247,196,165, 3,200, 19,237,120,178, 72, 56,108,238, 40, 55, 72,101,192,151,163,145, 69, 43,
+163, 9, 38, 99,110, 77, 66, 78,119, 64, 70, 47, 51,160, 48,236,231, 99, 27,214,221, 54, 37,111, 89,139,227, 11, 45,155, 3, 10,
+190, 6, 39,241, 84,144, 88, 83, 59,213, 88,179,208,195, 89,151, 91, 2, 1, 58,189, 54,168, 12, 87,194, 50, 50, 41,247,113,212,
+176,130,125,159, 54,122,132, 71,172,179,131,178, 27, 31,168,111, 62,196,165, 53,206,139,234, 81,166,152,231,144,137, 73,150, 18,
+ 83, 39,133, 34,150,216,250,183, 85,143, 74, 29, 61,167,126, 28, 93, 89, 64,233,173, 46, 48, 80,153,146, 53, 8,204,213, 15, 28,
+ 63, 83,106,171, 52,228, 30,115, 98,137,116, 84,251, 85,106, 95, 42,154, 83,105, 9,100,155, 75, 84, 91, 23, 9,170, 54, 83,150,
+ 12,166,102,118,106,117,194,130, 45,112, 80,220, 44, 30,201,149,251, 92,148, 1,170, 69,107,145,133,102,139,180, 63,160,216,196,
+126,247,250,201, 93,249,202, 69, 46,106,119,228, 28,160, 96,216, 48,234, 69, 54, 26,148,211,121,170,228,137,193, 11,217,192,198,
+ 58,118,150,173, 7,128,173, 41,172,128, 79,213,142,215,186,100,230,183, 55, 88,179,194, 2,181,225, 69,213, 92,170,182, 38, 53,
+244,165,128,160,109,236,112,107, 51,107,125, 26,234,253, 78,241,229, 81,173, 19,171,117,172,213,131, 82, 20,107,208,197, 88,135,
+210,113, 64, 90,113,213,180, 86,103, 72,101,131,159,170,174, 13,129,219,236, 19,154,177,111, 62,171, 28, 9,103, 77,216, 6,115,
+ 22,115, 55, 72, 29,108, 87,250,216, 26, 80, 85, 32, 48, 84, 73,230, 94,199,190,214, 91, 85,147,165,223,166,239, 40, 40,113, 87,
+159,191,149,102,175,168,222,175,183,158, 53, 54,119,150,215, 89,232, 1,172,135,118, 32, 77,180,161,140, 27, 7,109, 19, 70,111,
+193, 89,211,183,124,209, 1,100,203,106,240, 89, 39, 42, 22,109,106, 54,176, 86, 68,219,224, 12,182, 12,189, 4, 75, 13,102, 46,
+ 40,112,109,234,242,210,188,136,218,194, 92,251, 96, 91, 39, 2, 91, 10,130,225, 49, 22,193, 88,221, 36, 6, 51, 93,138, 27,107,
+169,102,161,112,100, 59, 86, 15, 83, 51, 86, 3, 8, 82,195,252,190, 15, 22,219, 80,203, 97,135, 94,157, 32, 61,176, 12, 57, 63,
+181, 22, 67,215, 0, 62,171, 82,129, 68,154,251, 67,245, 46, 26, 72,165,207, 13,107,187, 83,195,110, 42, 74,153,239,220,160, 26,
+139, 86,102, 74,239, 99,213,115,159, 34,124, 8,218,120,131,109,242,236, 73,130, 45,168,105,230, 15, 94, 82,248, 26,206,176,217,
+246, 51, 33, 98,159,124,109, 70,249, 18, 54,202,205, 21, 8,169,112, 25,218,129, 43, 75,110,244,154, 70,181, 81,101,221,212, 25,
+116,236, 97,234, 58,174, 82,213,227,169, 26,127,212, 59,170,242, 41,105, 23,135, 41, 71,189,109, 0, 81, 45,233,244, 1,172, 34,
+239, 49,157, 44, 41,182,241,234,205,224, 19,222,216, 29,106, 6,117, 3,110,194,169,255,213,247,213,180, 44,162, 39, 42,170, 98,
+182,101, 53,117,233,205, 76,122, 3,193, 29,110,121,154, 98,223,156, 89, 26,223, 57, 36,158,212,185,249,173,189, 48,155, 35, 7,
+ 13, 13, 86,161, 78,117,245,138,181,109,156,177,140, 60, 84, 99,104,228, 46,230,225,156,192,106,203,250, 86,245, 83,146, 42,247,
+172,146, 85,138, 67,252,117,192, 99,172,158,161,183, 95,141,152,160,225,104,148,102, 46, 54, 13, 83,203, 78,243, 13,151,177, 79,
+131, 54,204,220,130,169,138, 17,100,152,156, 48,245,194,170,157,214, 86,128,150, 86, 78,202, 92, 25,244, 56,108,145,113, 68,111,
+165,235,228,250, 54,186,133, 67,166,188, 74, 60,161,218,185,215, 23, 27,212,167,245, 77,124,131,163,230, 45, 20,226, 38, 55,131,
+234,131,133,166,119,108,136, 63, 81, 43,147, 77,238,253, 32,202, 54, 20,127, 88, 14,168,167, 10, 77,179, 88,237,114,141, 17,208,
+ 27,101,108,188, 76, 27,211,164,218, 42,255, 15, 49,206,148,201, 27, 21, 95, 6, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+ 0};
+
diff --git a/source/blender/editors/datafiles/draw.png.c b/source/blender/editors/datafiles/draw.png.c
new file mode 100644
index 00000000000..f87c5fc18c7
--- /dev/null
+++ b/source/blender/editors/datafiles/draw.png.c
@@ -0,0 +1,361 @@
+/* DataToC output of file <draw_png> */
+
+int datatoc_draw_png_size= 11349;
+char datatoc_draw_png[]= {
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 96, 0,
+ 0, 0, 96, 8, 2, 0, 0, 1, 26,253,208,249, 0, 0, 0, 4,103, 65, 77, 65, 0, 0,177,143, 11,252, 97, 5, 0, 0, 0, 6,
+ 98, 75, 71, 68, 0, 0, 0, 0, 0, 0,249, 67,187,127, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66,
+ 40,155,120, 0, 0, 0, 7,116, 73, 77, 69, 7,218, 7, 19, 1, 10, 6,157,179,150, 0, 0, 0, 32, 0, 73, 68, 65, 84,120,218,
+237,125,123,188,229, 87, 85,223, 90,107,239,253,123,156,115,238,185,247,206,157,201, 76, 50,201,100,242, 32,145,144,132,164, 36,
+ 20,101, 8,150,106,228,163, 86, 63, 40,213, 63, 90, 21,173,181, 86, 84, 84, 42, 69,139, 4, 16,141,248, 4, 65,173,173,162,104,
+ 1,181, 22, 84,108,245,211,250,128, 42,124, 16, 42, 16, 2, 24, 18,242, 32,153,100,158,247,113, 94,191,215,222,123,173,254,177,
+247,239,119,126,231, 78,128, 20,241,211,248,249,120, 38, 51,115,239,220,115,207,221,103,237,245,252,174,239, 90,193,219,110,187,
+ 13, 62,231,227,137, 60, 73, 3,192, 79,253,244, 79, 63,251,196,115,189,247,222,251,170, 42,235,186,210,218,252,214, 91,223,242,
+155,255,229,109,225, 73,120,226,196,137,159,123,195, 27,103,243,197,163, 39, 31,153, 78,246,156,181, 2,112,205, 23, 93,167, 8,
+ 31,249,244, 3,223,254,237,255, 26, 0, 8, 0,172,115,103,207,156, 46, 22,139, 99,199,175,184,238,250, 27,159,114,205, 83,183,
+ 14,108, 86, 85,117,238,204,169, 55,254,252,235,227,143, 67,162, 75, 47, 59,118,241,197, 71,157,115,198, 96,146, 36, 15,127,250,
+211,119,223,245,161,217,222,238,250,198,214,107,238,120,133, 6, 0,239, 61,179, 79,210, 36,205,178, 71, 30,126,232,209,147,143,
+ 60,252,224, 3, 59,219,103,111,123,222,237,197, 98,174, 76,162, 1,192, 57,199,158, 21,249, 83,167, 30,126,255,123,255,119, 49,
+159, 63,229,169,215,221,244,140, 91,155,186, 98,102, 17,208, 0,224, 26,203,194,139,217, 84,107,115,197, 21,199,143, 92,114, 89,
+ 85,215, 77,221, 88,231,157,243,222,123, 29, 14,206,222, 63,122,242,225,181,245,205,195,151, 28,115,206,149,139,153, 8, 58,103,
+157,179,206, 58, 13, 0, 77, 93,123,239,183, 14, 29,254,216, 93, 31,202, 7,195,245,205,205,196,164,101, 49, 43, 22, 11,107, 93,
+ 93,215, 26, 0,234,186, 10,146,188,226,234,107,103,147,189,123,238,190,235,224, 69, 71, 70,227,117, 97, 46, 22,243,166,174,240,
+ 9,221,221, 19,121, 32, 0,188,239,253, 31, 0, 16,239,125, 85,219,170, 44, 64,100,111,251,220, 55,125,203,183, 44,159,244,193,
+ 15,221,213, 84,229,249,237,237,179,103, 78,151,101,233,189,223,218, 58,120,252,170,171, 63,240,222, 63, 87, 68,223,255,210,151,
+197,187,219,155, 76,207,157, 57,155, 15, 6,215, 93,127,195, 83,175,187,254,248,149, 87,105, 68, 1, 26,173,109,220,249,218, 59,
+ 0, 64,123,246, 27,155,155,107,227,117,239, 29, 34,102,105,186, 88, 44, 30,124,224,254,191,185,251, 35, 95,252,156,231, 37,217,
+ 8, 0,240,189,127,245, 65,239,152,217, 15,178,116, 50,157, 61,242,240, 67, 39, 31,121,228,145, 7, 63,117,237,211,110, 92, 27,
+143,231,179,201,249, 51,167,180,179,158,217,103, 89, 90, 84,245,199,238,254,200, 61, 31,191,123, 52, 26, 63,247,203,158,111,173,
+173,202,130,153,145,148,118,206,178,247,103,247,118,117,154, 30, 60,120,209, 45,183, 62,115,180,190,105,155,198, 57,231,188,115,
+206, 51,179,182,214,178,119,128,120,250,228,201,209,120,156,101,105, 89, 22,139,217, 76,144,172,117,206, 90,231,156,110,234,218,
+179,103,239,157,115,247,124,252,163, 27,155, 91,195,209, 72, 39,233,238,249,211, 2,166,177, 77, 83,215, 58, 92, 28, 51, 15,134,
+195,203,142, 95,117,223,223,124,156,133, 15, 30, 58,172,211,225,206,153,147,141,199,166,169,225, 11,117,119,122,223,231,119,220,
+241,170, 47,191,253,118,231, 28, 51,123,239,189,119,206, 90,239,253, 31,253,143, 63,252,143,191,252,159, 63,155, 14,156, 56,113,
+226,103, 95,255, 6, 65, 18, 97, 97, 97,150,162, 40,202,178,168,202,210, 54,141,181,141,247, 94, 68, 6,195,225,230,230,150, 82,
+234,177, 71, 31, 18,231,191,231, 37,223, 55,159,207,247,159, 8, 81, 33,194,246,246,222, 98,177,152, 78, 39,243,217,212, 59, 7,
+ 0, 74,107,163,141, 78, 12, 17, 13,242,193,120,125, 61, 73, 18,165,213, 61, 31,251,232,155,222,248,198,170,170, 22,243,201, 75,
+127,240,229,203, 23, 18, 16,102, 24, 12, 7,164,212,250,198, 70, 98, 18, 1,241,222,139,247, 94, 88, 88,134,163, 33, 33, 88,107,
+183,207,157, 61,125,234,177,135, 30,124,224,220,233,135,159,253, 79,158,159,229,163,159,250,201,159,120,239, 95,188,231,247,222,
+245, 71, 26, 0,156,103, 96, 38, 82,121,158,139,176,103,175, 72,229,169, 70, 61,104,234,102, 49,159,159, 57,117,106, 54,155,237,
+238,236,156, 63,119,250,220,153, 83,229, 98,254, 37, 95,250,101, 34, 2,136, 74,233, 91,158,249,172,107,175,121,138, 6, 0,239,
+188, 8,139, 8, 51, 43,165, 82,163,149, 78, 39,123,187,103,207, 62,120,254,220,185,189,157,157,249,108, 82,150,101, 93,149,131,
+225,232,166, 91,158, 53, 28, 14,157,115,214, 90, 14,158, 4, 80,153, 52,188,144, 19, 16,102, 22, 17,103,107,167,140,231,114, 50,
+217,219,221,222,190,255,147,159, 24,140,198,215,221,240,244,193,112, 40, 44,241, 30, 93,112, 7,206,123,102,207,204, 2,193, 47,
+ 89,103,227,203,136, 20,243, 89, 85,149, 89, 62, 80, 90, 95,114,233,101,135,143, 28,177,182,177, 77, 93, 21,115,165,147,248, 50,
+ 46,168,133,115,206,122,231,188,119, 46,248,174,166,174, 69, 68,132, 89, 68,105,237, 61, 63,248,169,123, 77,146,102,249, 32, 73,
+ 18,109,180, 78,114, 16,118,206, 85,101, 81, 21, 51,210, 41,179, 56,231,156,117,141,181,182,105,172,181,225,133, 42, 22, 1, 17,
+ 47, 34,204, 38, 73, 46,185,236,242, 98,177,120,232,129,251, 22,179,105,146,102,195,209, 90, 62, 24,102, 89,166,180, 54,233,176,
+174,171, 98,182,199, 64, 44,208, 84, 85, 93,215, 77, 19,125, 96, 45, 65,218, 65,224,204, 44,130,136,151, 95,121,117,208,238,186,
+170, 30, 61,249,176,176,207,135,163, 60, 27,104, 99,116, 58,172,202,249,100,251, 44,153, 65, 93, 87, 85, 89,124,225,252,228, 23,
+228,113,236,216, 49,250, 66,189,214,138,245, 95,125,245,213,191,254,150,183, 56,231, 69,196, 51,179, 15,122,103,109, 93,191,228,
+251,190,255,209, 71, 31,253, 28, 17, 0, 0,222,255,129, 15,136, 96, 16,183,247, 30, 16,157, 13,138,210,120,231, 4, 64,107, 93,
+ 87,229,108,178,243, 45, 47,250,182,199,125,107,248,193,191,254,144, 0, 10, 3,128, 32, 81, 85, 86,243,197,172, 42,203,186,174,
+108, 99,157,115,158,189, 34,218,220, 58, 56, 26,141,202, 69,177,183,115,166,170,202,239,248, 55,223,181, 95, 70, 68, 26,129,128,
+176,177,205,246,249,243,167, 79, 63,118,230,212,169,179,103, 78,111,159, 63,191,183,187, 51,157,236,205,103,179,162, 40,216,179,
+214,102,188,177,169,147, 60, 73, 7,191,244, 11,111,218,119, 40, 2, 68, 1, 41,230,211,189,189,189,221,221,157,157,157,237,233,
+116, 82,149, 37, 51, 43,173, 7,163,209,250,250,198,120,188,190,177,177, 49, 24, 12,210, 52, 73,210,244,158,143,127,212,164,233,
+ 27,127,254,245,121,150, 45,133, 45, 34,136,192, 44,206, 90,219, 52, 8, 48, 26,141,214, 55, 54,215,214,198, 74, 41,102, 14,118,
+ 57, 30,175, 49, 75, 81, 44, 22,179, 89, 89, 22,136,202,152,228,181,175,125,245,191,251,193,151,139, 72,120, 33, 96,150, 44, 31,
+ 0,210,112, 52, 74,146,140, 16, 61,123, 97, 14, 78,214,152, 36,207, 76,211, 52, 69, 81,156, 63,119,238,212,169, 71,103,211,137,
+181, 13, 18, 42,101,126,244,213,175,124,197, 43, 95, 13, 0, 36,194,204, 66,132, 89,150, 15, 6, 3, 34,228, 96, 45, 0,249, 96,
+ 48, 24, 36,105,154,148,181,221,222,222,126,236,177,199, 30, 61,249,240,233,199, 30,173,171, 2, 4, 68,136,136,180, 54,255,254,
+165,223, 27,223,154, 8,179,128,176, 23,129,240, 42,195,225, 0,132,189,151,178,225,249,124,123,177,152, 79, 39,147,157,243,231,
+206,156, 57,181,123,238,204,145, 75,142,155, 36,177,206, 10, 0,146, 74,243,129,181, 86, 51, 11,179, 0,136, 8,136, 48, 8, 12,
+243,140,148, 46,138,114,178,183, 51,157,236, 77,167,211,233,100, 50,157,236,237,110,159, 47, 22,179,141, 3,135,158,118,227,205,
+ 44, 12, 34, 0,136, 0,136,234, 75,111,123,182,102,225,224,137,130,143, 28, 13,135, 0, 80,150,229,246,249,179,231,206,158,217,
+ 62,127,126, 58,217, 43, 22,243,170, 42,133,249,248, 85,215, 92,113,229,213,158, 89, 60,251, 86, 2,136,136,168,116,240,149, 34,
+ 44,194, 72,170, 88,204, 77,154,205,103,179,157,237,237,199, 78,158, 60,119,246,148,119,206, 36,233,145, 75, 46, 61,118,249, 21,
+105,154,122,239,227, 15,246, 16, 44, 65, 0, 0, 65, 11, 51,179, 15,175,148, 40, 44,235,138, 1,157,119, 74, 41, 68, 97,230,107,
+158,122,253,197,151, 28, 69, 66,239,124,124,149, 40, 14,110,253,179,196,244, 39, 92,179,136, 52, 34,197, 98,225, 60, 3, 64, 62,
+ 24, 28, 61,122,236,192,230,230,145,163,151,249,168, 76, 62,132,113,238,180,139,133, 89, 98, 82, 26,190, 16,205,213,185,197,108,
+102,173, 51, 73, 98,146,100,253,192,129,209,120,173, 44, 22,204, 94,105,227,189, 48,115,120,157,222, 75, 51, 51,131,136,102,246,
+236,195,197,139, 48, 51,200,206,246,249,193,104,148, 36,169, 82, 74,105,147,145,178,182,177,117, 85,150,133,210, 9,139,120,239,
+185, 59,151,247,236,153, 69,116, 72, 60,162,183, 22, 25,173,173,239,108,111, 47, 22,243,124, 48, 76,211, 76,107,173,180, 66, 64,
+101,146, 68,164,152, 79,189,103, 84,166, 31,222,130,224,122,111, 45, 30,137, 15, 95,124,244,161,251,239,155,236,237, 38,105,150,
+231,131, 44,207,141, 73,148, 82, 34,104,210,220, 45,102,197,108,199, 36, 3,142, 81,210,133, 87,208,206,121,102, 47, 2,194, 30,
+ 0,152, 25, 0, 46, 59,126,229,153, 83,143, 61,250,200,167, 17, 49,203, 7,163,181,181,124, 48, 52,198, 16,162, 54,153,106,236,
+124,114, 94, 39,163,246, 80, 78, 88,180,119,182, 59, 17,183,167, 18,230,173,131,135,198,235, 27, 59,219,231, 31, 59,249, 80, 89,
+204,135,163,181,193,112,148,166, 25, 18, 41,109,148,206,102,147,115,202, 12,156,179,161, 20,233,223, 90,212, 76,246,225, 78, 89,
+ 68,214, 55, 54,134,195,235,207,159, 63, 59,221,221,105,234,122, 56, 90, 75,210, 20,145,148, 73,148, 50, 85, 49,103, 1,219, 52,
+204, 30,158, 84,113,237,178,203, 46, 35,120, 50, 61, 16, 81, 63,241,103,223,124,243,205,151, 95,126,249, 21, 87, 92,145,229, 25,
+ 33, 89,219,204,231,243,251,239,191,255,161,135, 30,250,228, 39,239,253, 59,137,215,225,113,237,181,215,254,202,155,223,140, 64,
+ 49, 6, 11, 8,136,176, 4, 93,109,157,134, 0,128, 72, 72,135, 25, 98,124,103,102,231,156,173,203,162,174,235, 23,127,247,247,
+204,231,139,207,243, 64,175,122,245,107,190,242,171,190, 74, 36,158,128, 1, 48,166, 93, 30,137, 68,192, 1,123,107,157,115,206,
+123,246,209, 42,130, 71,145,112, 74, 16, 68,212, 58,201,178, 52,203,215, 0,224,109,111,255,157,221,157,115, 32, 34,194,111,125,
+235, 91,255,215,159,252,217, 19,186,181, 19, 39, 78,188,254,231,223, 36,241, 44, 40, 33,146,176, 7, 84, 77, 83, 91,219,212, 85,
+ 93,215,149,181,214,197, 3, 57,246,225, 87,116,169, 33,244, 0, 34, 41, 53, 28,142,214,214,214,178, 60, 79,146,148,136,188,119,
+139,217,236,177,147,159, 30,173,173,133, 32,126,223,125,159,252,233,159,125,195,103,201,213, 34,208, 32,158, 1, 81, 0,234, 98,
+225, 28, 91,231,154,166,169,235,170,105,154,186,170,154,166,118,214,250,152,160, 74,136, 27, 33, 0, 33, 0, 32,130, 8, 0, 16,
+145, 86, 74, 41,157,166, 89,112,135,222, 59, 34,117,216,187, 71, 31,254,244,218,250,186, 73,179,107,174,125,234, 47,188,233,141,
+182,169,126,248, 21,175, 44,138,242, 51, 92,153, 96, 80, 23,111,109, 99, 93, 93,215,117, 93, 55, 77, 83,215,117, 93, 87,182,105,
+156,117, 2,162, 72, 37, 73,162,148, 50, 73,146,152,196, 24, 99,146, 68,107, 29, 78, 21, 14,150, 15, 70,131,193,128,136, 8,145,
+ 69,156, 19,103, 27,231, 60, 16,221,253,225, 15, 94,127,211, 45, 74,155, 16, 75,239,252,177,215,214,117,245,202, 87,189,166,170,
+234,253, 7, 10,117, 26, 34, 0,146, 82, 26,201, 18, 41,165,180, 49,172,181,166, 53, 74,210, 52,207,243, 52, 73,145, 40, 92,110,
+ 20, 21,139, 0, 51, 11, 11, 19, 98,150, 15,242, 52, 17,182,158,169,241, 92,215,117, 81, 44,102,211,233,222,238,246,238,206,118,
+ 89,150,239,123,247, 31, 61,235,185,207, 71, 34, 36,165,180, 49, 34,175,122,229,143,212,213,226,142,215,220,185,122,160, 46,255,
+ 64, 72,210, 60, 73,179, 96, 71,109, 16,110, 77, 43,212, 41,241, 27, 0, 68,144,208,232, 84, 41, 2,240,132, 36, 64,117, 99,173,
+179, 77, 93, 87,101, 89, 20,197, 98, 49,159, 78,246,246,118,182,119,119,207, 47,230,211, 52,205,154,186, 54, 73, 66, 68,140, 68,
+164,180, 73, 68,228, 85, 63,242,195, 63,250,227,175,243,222,199, 3, 49,135,159, 5, 0, 28,149, 27,130, 45, 11, 10, 48, 0, 68,
+ 51, 7, 4, 52, 70, 27, 69,222, 59, 84, 4, 64,236,217,123,239, 28, 91, 91, 53,141,181, 77, 93,215,117, 89,150,101,177, 88, 20,
+139,249,116, 58,155, 77, 22,211,105, 85,204,148,214,151, 95,117,109,146,164,210,230, 64,128,132, 24,133,245, 67, 47,123,233,111,
+253,246,239,212,214, 71, 9, 9,112,240, 53, 8, 33,107, 67, 17, 1, 96,223, 30, 48, 73, 19,173, 72,216,147, 78, 66,246, 99,171,
+160,101, 85,211, 4,184,163,174,235,170,174,170,170,170,202,178, 40, 22,139,178, 88, 84,229,162,174, 42, 0,222,216,186,232,170,
+107,190,104,109,188, 30, 98, 93,248,161, 8,128, 33,207, 67,165,180,126,225,215,191,224,163,119,127, 34, 72,200,119,230,219, 62,
+153,131,228, 16,197,152,212,104, 18,102, 34,237, 0,203,178, 44,203,162, 40,138,170, 44,202,178,172,171,170, 42,203,186,174,131,
+123,104,154,166,169,171,186, 42,157,115,236,189,210,250,162, 35, 71,143, 30,187,124, 99, 99, 19, 32, 36,148, 49,146, 7,221,109,
+189, 13, 32, 18,145,222, 88, 95,215,225,158,226, 13,133,167, 1, 4,125, 1,128, 52,205,188,179,206, 41,165,117,221,212,101, 89,
+ 22,139,249,108, 58,157,207,103,243,249,108, 62,155,149, 69, 81, 87, 85, 23,244, 69,132,136,210, 44, 63, 56, 30, 31,188,232,240,
+120,188,174,141,129,144, 24,178,231,182,196,109,211,157,165,219, 15,121, 44, 16,234,120,112,239, 1, 80,128, 33, 74, 72, 68, 64,
+ 27,221, 84,165,247, 94,155,196, 58,103,173, 45,203, 34, 72,104, 62,155,237,238,108,239,238,156,175,171,146,148,206,243,193,218,
+120,125,188,190,177, 54, 30,143,214,214,140, 54, 65,251,218,218,186, 45,178, 57,126,224, 37, 38,155,193,173, 5, 13, 14, 90,218,
+130,171, 34, 32, 12,157,117,129,160,128, 48, 47,230,115, 1, 49,206, 41,165, 93,176, 2,173,243,193, 64, 88, 80, 88,161,160, 82,
+151, 92,122,249,250,198, 38, 34,138,116, 80, 72, 0, 13,164,119, 10,233,103,148,241,242,218, 52,184,203,197, 64, 36,232, 16, 51,
+ 51,116,199, 1, 1, 1, 6,225,134,171,170,116,206,145, 82,109,218, 8, 74,169, 44,203,141, 49,195,209,232,224, 69,135,189,119,
+236,125, 49,219, 83, 90, 39,105, 14,128,126, 25, 82,246, 9,168,251,200,183,162,138,229, 10,119, 79, 0, 9, 18,114,204,109, 64,
+104,207,197, 2, 0, 64, 74, 23,211, 9,123,214, 38, 9,110,154,148, 66, 68, 34,149,164, 42, 73,210,248,102,189,243,222, 55,117,
+197,222,121,239, 4, 80,105,195, 33, 65,104,243,198, 86, 88, 33, 45, 8,248,208, 50, 61,111, 79, 12,241,202,186,107,148,120, 99,
+241, 47,165,244,112, 52,222, 62,119,118, 62,159, 17, 41, 99,140, 54,137, 54,154, 72, 41, 34, 36,138,241,140,148, 34, 34,165,188,
+ 55,228,157,243,174,169, 42,231, 26,239,189,214, 9,144,146,158, 24,226,121, 90, 52,210,123, 23,138,133,152,230,199, 3,121, 97,
+ 16, 92,250, 36,100, 17, 0, 6, 17,173,245,214,161,139,102,147,189,237,237,243,211, 73,131, 68, 74, 41, 99,140,210, 90, 41,173,
+181, 81, 74, 41,165,144,144,144, 32,184, 21, 84, 38,205, 72,107, 87,215,141,109,156,173,189,103,101, 18,164, 80,231,176, 72,155,
+194,248,136,127, 5, 55,193,204,177, 25,176,148, 80, 23, 52,218,144, 18, 62, 25,174,141,179,193,112, 62,155,237,108,159,155,236,
+238,122,239, 0, 64,107,163,147, 36, 49, 70, 27,163,181, 49, 73, 18,228, 68, 68, 65,199, 81, 27,131, 4, 72,210,212, 77, 89,120,
+103, 81,167,164, 84,168, 8, 34, 54, 23,235, 61,239,189,151,112, 32,239,156,244, 20,104,169, 73,237,213,117, 73,207, 96, 56,204,
+243,220, 93,236,131, 59,218,219,217,217,221, 62, 7,194, 20, 51,128, 36, 77, 51, 99, 18,109,140,214, 58,156, 44,160,181, 74, 39,
+ 0, 40,128, 77, 93, 88,219, 40,157, 2, 82, 43, 34, 27, 14,230,156,237, 73,104,229, 28,171,226,233, 78,217, 59, 89,150,229, 73,
+154,110, 30, 56,200,236,155,186, 46,138, 98,111,231,252, 98, 62, 91,204,103,218,152, 36, 73,141, 73, 76,146,104,181, 60,150, 0,
+ 42,147,104, 22, 22,168,171,185,243,172,116,186,132,181,157,245,206, 49,123,141,136, 31,252,171,247,115,235,162,187, 88, 14, 49,
+176,183,159,202, 74,156,239,157,125, 41, 87, 97,182,214,214,213,174,247, 14, 17, 16,149, 82,138, 20, 17, 41, 68, 68,192,232, 80,
+216, 59,103,157,109,172,173,149,206, 36,160, 36,236,189,247, 69, 89, 61,201,240,198, 80,155, 61,121, 14,115,219,109,183, 81,151,
+128, 62, 73, 30, 79,174,202,245,201,120,160, 39, 90, 74, 31, 57,114,228,218,107,175,189,230,154,107,182,182,182,180,214,204, 92,
+149,229,233, 51,167,239,191,255,254,187,238,186,107, 95,229,240,119,114,160,131, 7, 15, 62,231, 57,207,121,209,183,126,219,129,
+ 3, 7, 90, 60,179,107,107,180,217, 67,248,203,135,254,132,191,247,147,159,124,219,219,223,126,239, 39,239, 45,202,242, 11,121,
+160, 59,239,188,243, 57,207,125, 46, 2,177, 8,181, 9, 62, 42, 1,230, 80,190,161, 0, 17,117,213, 54,139,132, 96,249,180, 27,
+158,254,163,215, 93, 95, 85,133,179,205,187,222,245,174,183,189,253,183, 63, 31, 0,228,216,177, 99, 15, 63,252, 48, 0, 60,253,
+166,155,126,252,199,239,220, 58,120,168,115,140, 1,162, 5, 0,246, 30, 0, 4, 49,132,236,144,241,196,144,221,226, 84,241,216,
+ 74, 33, 34,123, 63,159, 77,188,107, 78, 62,242,200,157,175,251,169,201,100,242,196,205, 30,143, 30, 61,186,190,177,241,107,191,
+254, 22, 17, 65,164, 21,111,205,204, 32, 0,212, 6, 66,239,172,117, 1, 99,112,158,189, 99,105,193,134,246, 52, 73,146, 36, 73,
+170, 20,121,207,229, 98, 54,217,219, 81, 74,149,197,252,229, 63,244,138,201,116,250,132, 14,116,231, 79,188,238,121,255,244,203,
+ 16, 16, 8, 65, 4, 4, 25, 25, 4, 20, 41,207,236,156,107,154,198,218,198, 54, 54,132, 27,231, 67,247,204,119,232,105, 44,179,
+ 0,180, 49,195,225, 40,207, 7, 38, 73, 8,209, 57, 59,159, 77,207,159,125, 44, 31,140,108, 83,127,234, 83,247,189,238, 39,127,
+230,115, 30, 72, 7,144, 0, 16,132, 49,192,206,226, 69,105, 93, 59,103,235,186,105,234,186,170, 3,216,224,218,211, 4,248, 85,
+218, 68, 29, 98, 21, 75, 34,226, 51,207,194, 33, 99, 75,149, 22,129,166,105,118,206,157, 30,141,215,175,186,234, 41,191,248,166,
+ 55,188,236,229,255, 97, 95,247,246, 66,165, 70, 68, 98, 0, 36, 17, 6, 68,244,222,213, 77,211,180,104, 67, 93, 87, 77, 83, 7,
+164,148,157,227,160,195,171,249, 10, 34, 34,145, 49, 73,128,151,128, 80,107, 77, 72, 0, 50, 28,173, 77, 39,187,136,164,141, 1,
+128,215,253,196,143,189,227, 29,239,252,211, 63,123,247,103,118,140, 24,203,100, 16, 32,194, 98, 62,173,235, 58, 20,230,225,191,
+178, 88,148, 69, 89,151,101, 93, 85,117,211, 4,152,200, 59, 23,106, 74, 68, 12,233, 24, 17,133,212, 49, 73,146, 52, 73, 77,146,
+104, 99,180, 49, 73,146, 12, 6,163,251,239,253, 4,145, 34,165,148, 50, 95,251, 53, 95,243,253, 47,121,241,103,245,212, 24,209,
+148,166,174,156,231, 58, 96, 66,161, 52,174,171,186,174,109, 83,135, 20, 51, 8, 67, 27, 99,210, 52,201,178, 60,207, 7,163,209,
+218,120,188, 54, 30,143, 70,107,195,209,104, 56, 90, 27, 12,135,105,154, 26,173,187,188, 17, 16,179,124, 24,176, 34, 34,165,141,
+185,252,242,227, 47,123,233, 75, 62,163, 31, 98, 1, 68, 64,128,144,215,134, 12,215, 89,235,172,243,206,177,103, 1,192, 22,140,
+210, 70, 37, 38, 53,137, 49, 38, 73, 76,130,138, 98,112, 22, 80, 90,141,215,215,141,209, 1,110, 18, 97,103,173,179,150,217, 51,
+192,195, 15,222,127,249,149,215, 4,204, 67,233,228,240,197,151,124,251,183,126,243,175,252,218,111, 92,112, 32,137,247,222,186,
+ 31,232, 42,234,240,230,180, 49,169, 74,141, 49,249, 96,144,166, 89,146,166,198, 36,225,173,139,180,165, 58,251, 80,178, 25,173,
+ 91, 76, 80, 2, 6, 87,215, 85, 89,148,182,174, 31,123,248,129, 99, 87, 92, 77,132,236,145,136,180,210, 87, 95,115,205, 11,190,
+246,171,223,249,251,127,248, 56,158, 58,148, 97,161,236, 34,165, 66,197,131,136, 25,228,198,152, 44,203,178, 44,215,198,132,178,
+ 36,184, 39,137, 8, 78,112,153,168,141, 94, 91, 91, 99,111, 1,144, 69,172,117, 85, 85, 46,230,243,197, 98, 81, 22,243,178, 44,
+155,166,217,217, 62,127, 96,235, 96, 0, 97, 0, 73,107,115,235, 45,183,252,197, 95,190,239,252,246,206, 82,135, 58, 1,129,136,
+210, 38,203,178,225,112, 52, 94, 95,223,216, 56,112,232,208, 69, 71, 46,190,228,240,225,139,215, 55, 54, 77,154, 96, 27, 70, 4,
+ 64, 48,128, 87, 34, 34,164, 84, 62, 24,140,134, 57,123,199, 12,214,249,170,174, 23,139,197,108, 54,157,207,103,211,201,100, 58,
+157,150,139, 5,139,204,167,147,216,103, 67,164,240, 80,250,123, 94,252,157,253,156,140,186, 16,193, 0, 0,162,148, 78,211, 52,
+207,243,193,112,152, 15, 6, 90,155, 94, 5,210, 22, 72, 34, 32,128,128, 70,155, 60,207, 7, 89,162, 9,152,129, 25, 26,107,203,
+178, 92,204,230, 1, 27,153, 78, 38,179,233,116, 62,155,149,101, 33,194, 45,236, 20,204, 40, 20,192,138, 72,255,192, 75,254,237,
+138, 14, 33,132,231,134,218,183,211,159, 37,192, 26,143, 0,192, 32, 32, 64, 74, 37,198,128,176,136, 67, 2, 0, 29, 2,156,179,
+ 17,187,138,136,213,124, 62,155, 77,167,211,221, 98, 49,181, 77,169,116, 50, 28,173, 9, 11, 0, 70,164, 3, 17, 35,152,188,118,
+205,213, 87,222,251,169, 7,226,149, 9, 75, 56, 19, 68,104, 8, 68, 16,145, 5, 2, 98,194, 16,139, 88, 81,164, 7,131, 60, 75,
+ 20,161, 40,173,149,202, 88,200, 90, 91, 87,117,177,152, 47, 22,139,197,124, 54,157, 78, 38,147, 73,232,141, 78,247,118, 23,179,
+ 89, 89, 20,158,253,198,230,161,181,245,117, 36,140, 17, 27,219, 35, 17,145,210, 47,248,218,175,238,148, 90, 4, 33,194, 66, 61,
+ 4,164,189,197, 86,199, 16,178, 52, 83, 8, 44, 94,155,212, 7, 2, 71,136,116, 77, 99,109,235,217,171,170,172,202,170, 44, 23,
+243,249,124, 62, 43, 22,179,178,152,123,231,178,124,116,201,101,199, 34,192,184,191,223,130,136,164,117,114,235, 51,110,106,205,
+ 94,152, 1,151,118,223,254, 83,231, 5,136,212, 32,207,188,107,144,180, 66, 29,184, 36,117, 83,133, 48,215, 52,117,192, 24,171,
+186,174,203,178,138,144,231,188, 42, 22, 85, 85, 58,107,147, 44,187,228,210,203, 15,108, 29,236, 52,160,187,181,229,161,148, 58,
+241,236,103,253,159, 15,127, 92, 11,128, 48, 4,132, 10,160, 3,130,161,213, 96, 86, 74,229,121,238, 93,163,117, 2,136, 77, 99,
+155,186, 42,171,170,174,202,170,174,154, 64,247,171,235,186,170, 2,232, 89,150,101, 85, 22, 77, 93,214,117, 35,236,211,124,112,
+241, 37,151, 30,189,236,152, 49, 73, 64,128, 4, 98,158, 37,173,248,131,148,180, 78,218, 43, 19, 1,108,113,200,213,226, 20,145,
+178, 44,115,182,238, 78, 83, 87,101,224,100,149,101, 89, 85,101, 93,150, 85, 85,197,164,160,174, 26, 27,194, 78,197,236, 9, 49,
+ 93, 27, 31, 62,124,201, 37, 71, 47, 77,210, 52, 68,228,214,195, 0, 98, 43, 36,196,160,226, 20, 12, 36,128,101,192, 75, 71,205,
+140, 93,150,150,101,169,183, 13, 41, 37,136,206,186,186,174,138,162, 88, 44,102,101, 81, 44, 22,139, 98,177,168,170,170,174, 74,
+107,155,166,174, 3,183,206,218, 6, 0,146, 36, 93, 91,223,184,232,240,197, 7,182,182,148,214, 17,116,111,177,129,128,107, 2,
+ 66,139, 36, 64, 11, 17,131,142, 70,221,235,127,181, 23, 39, 74,105, 68,112,204,168, 52, 59,111,173,173,171,170,170,138, 98, 81,
+204,103,179,217,124, 90,204,231, 85, 85,133,208, 43,194,222,123, 68, 12,205,227,205,173,173,173,131,135,242,124,128,132,210,117,
+217,162, 51,139,102,182,132, 58,131,131, 9, 7, 10,210,193, 21,180, 3,186, 3, 53,117,141, 8, 33,117, 14,250, 91, 87, 85,192,
+134,103,147,189,197,124,110,109,195,204, 8,168,180,202,243, 65, 62, 24,142,199,235,235,155,155,163,209,154, 82,212,117,132,165,
+135,203, 45, 59, 90,109,171, 34, 98,119, 8, 81, 66,161,245,178,124,106,144, 21,162, 8, 59,219,144, 50, 2,145, 14, 24, 83, 86,
+102,239, 93, 83,215,129, 34,153,164,217, 96, 48, 92, 27,175,175,173,175,143,199,227, 60,207,145, 40,160, 28,242,184, 15, 8, 80,
+ 48,203, 10,128, 2, 32,216,139,246, 29, 2,212,126,162, 0,188,115,214, 58,197,162, 32, 9, 7, 1, 64,165,149, 49, 38,116, 26,
+ 72, 81,150, 15, 14, 29, 62,178,117,240,208,120, 60,214, 38, 9,183,206,192,125,140,188,197,198,187,232, 39,208,131, 49,165,223,
+ 52, 13,220, 22,110,213,120, 5,169, 66, 12, 30,143, 69, 11, 4,159, 0, 68,168,180, 78,179,108, 96,135,227,141,141, 36, 73,198,
+ 7,182, 46,190,248,210, 36, 77,187,206,172,172, 30, 69, 62,163,148,150,127, 66,104, 54, 8, 47,205,126,121,144,246, 84, 30,192,
+123,103,109,227,156,243, 70, 72,145,176, 32,146, 86,202, 36,201,112,180, 70, 72,118,173,210, 90, 11,123, 69,228, 34, 60,205, 33,
+212,180,121, 82, 7,101,237, 63, 13,175,170, 85,140, 39,129,143,212, 3,242, 96,121, 52,102,246,108, 27, 43, 0,158, 69,107, 67,
+ 68, 2, 66, 72, 33, 65, 83, 90,123,151,179,243, 77, 93,122,111,141, 73,181, 73,162, 98,244,181,119, 41,138,149, 83,197, 30,207,
+ 42, 90,216, 93, 89,204, 63,150, 54, 31, 58,122, 8,109,221, 35,194,172,180, 6, 64, 64, 8,229,169, 82, 74,140,241,161, 73,237,
+156,109, 42,219, 84,136,164,147,212,123, 23,120, 87, 43, 96,254,178,231,194,157,245, 69, 1, 44,139,152, 86,135,224,130, 43,235,
+ 58, 71, 77,211, 56,231, 60,167,218, 27,165, 20, 81,200,233,128,136,128,136, 72,177, 82,164,116, 56,150,247,206, 46, 26, 68, 34,
+109,218,118, 69,200,116, 99, 27,161,227,135, 68, 70, 78,175, 59, 20,117, 40,246, 17, 49,252,201,129,181,215, 38,109,146, 36,233,
+124, 62,183,182,177,206, 37, 73,162,141, 81, 20,187, 11, 49,205, 67, 36, 84,162,160,245,254,100,155,198, 57,203, 77, 77, 74, 35,
+233,246,174,160,109,253,116, 4, 49,232, 65, 40,194,177,135, 6, 26,132, 25, 56,164, 94,173, 6, 44, 33,106,147, 36, 73,146,206,
+166, 37, 55,181,109,154, 36, 73,149,209, 74,233,208, 87, 32,234, 60, 62, 16,169,144, 16,106,147, 8, 0, 55,117, 83, 23, 72, 10,
+ 64,145,210, 44,158, 91,121, 68, 87,198,221,221,197,223, 33,193,208, 18, 10, 81,216, 15,150,119,127, 12,134,195,178, 44,138,249,
+204,130,109,154,198, 24,163,181, 86, 58, 94, 31, 41, 69,136,225, 84, 1,114, 8,173,109, 49, 34, 34,214,214,222, 87, 74, 39, 72,
+ 90, 90,121,180,232,146,239, 14,215, 53,178, 58,142, 93, 84,106, 70, 70,193, 96,181, 32, 16,226, 63,145, 26,175,111,216,166, 89,
+204,103, 13, 87,181, 82, 74, 27,173,117,128,235,149,210,161,102, 13, 0, 65,204,235, 48, 20, 95,204,204,226,185, 41, 11, 32,210,
+ 38,237,105,115,255,112,220,181,210, 98,232,136,158, 99,213, 76, 97,233,186,197,152,100, 99,243,128,243,126, 62,221,243, 77, 13,
+ 0, 74,105,109,140, 49, 70,107,163, 77,144,150, 14, 77, 14,128,216,195, 65, 84,164, 52,105, 38,102,107, 43,103,173, 74, 50,136,
+ 30,101,213, 2,219, 94, 94,203,139,244,188,255,186, 96,217, 62, 11, 78, 33, 73,211,173,173, 45, 69,180,179,125,174,170,170, 0,
+119, 24,147,152,196, 24,157,104,163,181, 73,180,214, 74, 41, 34,133,132,225, 80, 72,138,148, 86,138,157,243,222, 85,174,176, 38,
+ 25,196, 11,235,122,104, 49,204,176,136,239,204,222, 71,151,136,109, 53, 4, 44, 93, 9,210,218,166, 54,201,198,129, 45,165,245,
+100,119,103,178,183,219, 84,101, 83, 87,164,148, 49, 38, 73, 50,147, 36,198, 36,161,109, 21, 46,177,205, 43, 8,149, 82, 70,123,
+175,197,214,101, 49, 53, 73,222,111, 48,118, 26,205, 62,132,142, 62,174,194,251,250, 65,253, 47,177, 0, 16,209,218,120, 61, 77,
+179,193,104, 52,157,236, 77,118,119,235,170,180, 77,221,212, 77,146, 36, 73, 26,143,165, 77,212,173, 8, 54,132, 67,105,237,189,
+231,166,168,188, 87, 38,139,161, 32, 52,207,186,126,226, 62,199,120, 97,135,234,194, 51,137,136,214,102,125,125, 51,207, 7,227,
+241,250,116, 58,157,236,109, 91, 91,135, 65, 5,147,166, 38, 73,147, 36,209,218,104,173, 66,219, 69, 68, 0, 9, 73,147,242,164,
+ 77, 83, 21,236, 25,149,105,155,192, 45, 30,231,125,239, 64, 43,241, 21, 86, 78,214,217, 97,123,160,224, 63,148,210,131,225, 90,
+154,229,107,227,241,116,111,111, 58,217,109,108, 19,102, 61,216,123, 99,156,211, 90,107, 67,138,176,197,123, 66, 51,146,148,169,
+203,133, 74, 6, 2,200, 34, 1,165, 12,210,106,205,190, 45, 89,247, 55,203, 58, 70,193,227,228, 15,209, 84, 17, 41, 77,179, 3,
+ 91, 7,179,124, 48,217,219, 13,249, 53, 51,123,159, 24,147, 8,115,128,177, 48,204,109, 0, 34, 42, 34,141,164,170, 98,106,210,
+ 97,119, 99,161,197, 8, 0,250,209,147, 39,185, 77,113,165,107,146,245,187,102,189,191, 59, 26,194,210, 22,151, 22,201,222,115,
+224, 27,137, 48, 34,117,158,179,141, 51, 8, 16,179, 77,231,172,107,106,129,109, 82, 42,176,181,132,125, 24, 10,193,219,110,187,
+109,119,119,119,111,111,239,201,214, 22,250,255,251, 16,145,141,141,141,205,205, 77, 13, 0,147,201,228,145, 71, 30,249, 7,161,
+ 92, 72,242,220,220,220,164,127, 16,196,223,179,118,226, 63, 8,232,239,217, 67,255,237, 95, 98,109,109,237,196,137, 19,215,223,
+112,195, 77, 55,221,116,248,240,225,214,126,187, 0, 20,129, 38,110, 17,185,182,250,216,151,117, 8,123,255,137, 79,124,226,222,
+123,239,189,247,190,251, 62,252,225,143, 88,107,255,158, 9,136,136,190,252,246,219,191,248, 75,190,228,154,167, 92,115,232,208,
+161,124,144, 67,108,175,116,144, 83,139,169,244,249, 41,109,228, 85, 72, 65, 50, 4, 0, 34, 10,128, 85,247, 77, 17, 34,186,245,
+153,255,248,150, 91,159,233,156, 67,132, 48, 28,226,217, 79, 39,147, 83,167, 78, 63,244,224,131, 31,248,224, 7,239,250,232,221,
+ 79, 34, 1, 29, 63,126,252, 25,207,120,198, 55,191,232, 69, 71, 46,190, 56,240,255,100, 95, 36,140,125,195, 8,248,139, 72, 44,
+ 53, 64, 16, 16, 65, 32,212,105,128,161,251,213, 1, 24, 65,120,212,125,220,149,166, 32,128,160, 52,133,239, 81, 58, 3,132,124,
+ 48, 62,116,228,232,211,110,184,241,246,231, 63,223, 57, 11, 34,206,186,143,220,245,145, 63,127,247,123,238,255,212,253, 79,164,
+169,252,133, 20,208,209,163, 71, 95,121,199,171,110,190,249,230,144, 43,198,126, 24,119,229, 59, 68, 8, 64, 68,136,128,133, 48,
+112,170, 25,145, 90,182, 18, 32,138,239,120,147,203,249, 21,150, 94, 49,182, 10, 59, 46,197, 22,236, 17,145, 8, 49,176,178, 66,
+194,171,181, 73,210, 60, 52,234,155,186,186,241,233, 55,221,120,195,141, 72, 36,236,157,119,127,252,199,255,243,119,255,219, 59,
+246,119, 7,190, 32,193,254, 57,207,121, 78, 85, 85, 95,247,245, 47,188,245,214,103,142, 55,198,194,208, 94, 58, 6, 78,188,136,
+ 32,196,191, 58, 90, 1, 17, 17, 97,236,198, 44,105,137, 29, 87,146, 59,190,195,146, 31, 34,125,210,105,132,196,161,195,173,123,
+192, 48, 96, 72,185,149,210, 74,235, 68,107,173,141, 86,164,144, 66,221, 9,222,123,231,154,166,170, 23,139, 89, 85, 46,178, 60,
+ 15,229,134,115,238,204,153,211,239,126,247,123,254,228, 79,255,252,111, 47,154, 99,199,142, 29, 63,126, 28, 79,156, 56,241,149,
+ 95,245,207,110,255,138,219, 91,233, 35,196, 62, 86, 44, 96,161,237,145,176,103, 34, 36,165,195,164,167,247, 28, 89,135,206,133,
+ 25,205,254,124, 23,183, 53,205,178,106, 95, 82,163,151,101, 84, 31, 22,235,154,226,208,182,218,147, 36, 77,210, 88, 6,107,109,
+ 66,177, 16,250, 54, 44,226,157,107,154,186, 42,139,233,100,215,214,229,112,109, 61,136,222, 59, 7, 34,101, 81,188,243,247,127,
+255, 47,254,242,125,206,185,191,141,128,116, 11,229, 43, 22, 9, 77, 16, 68, 1, 17, 20,144, 80,176, 80,160,247,121, 36,242, 44,
+141,173, 2,217,144,189,111,201, 31, 97, 10,198,245, 20,200,119,152, 70, 31, 76,236, 66,216,190,218, 15,164,215, 85,128, 88,177,
+ 73,146,232, 14,239, 19, 16, 16, 4, 8,253, 89, 36, 2, 17,214, 90,105, 29,112,160,249,108,178,187,125, 62, 31, 12,179, 60, 71,
+ 64, 47,146, 15, 71,223,240, 13,223,248,207, 95,248, 66,219, 84,191,244,203,191,114,207,231, 59,178,164,187, 99, 17,182,238, 52,
+152,151, 8,130, 32, 98, 89, 22, 97, 66, 40,216, 76, 39,148,118,182,220,133,143, 34,199,183,141,220,251,197,209,135, 6,162,162,
+194, 42, 55, 64,176, 69,223, 0, 81,136, 16, 16, 9, 9, 81, 17, 17, 97,176,183,128,242, 68, 1, 49, 7, 12, 42,128, 54,158,253,
+246,185,179,117, 85,109, 28,216, 2,239, 24,192, 32,122, 79,128,244,221, 47,254, 46,231,236,221, 31,251,216,175,190,249, 45,159,
+175,147,198,182, 93, 21, 0, 66, 9, 51, 66,182, 44, 75,223, 18,167, 60, 7,177, 4,197,105, 5, 20, 63,115,113,134,255, 2,227,
+233, 58,188,203, 10,167, 67,138,130,211,111, 17, 92,192,229, 28,143,214, 42, 73,211,196, 36,105,154,166,105,150, 36, 75,176,137,
+ 58, 43, 99, 6, 0,142,228,109,109, 76, 58, 24,142,118,206,157,157,207,167,151, 94,126, 37, 88,203, 4, 42,254, 40, 68,196, 27,
+111,184,225,231,126,230, 39,239,185,231,158,223,248,205,183,149, 85,245,255, 28,197,164, 11,200, 0, 68,196,222,213,117,237, 89,
+122,147,158, 29, 9,123,169, 56,206,187,192,240,237, 28,112, 80,132,150,170, 28,116,147,144,144, 72,117, 84, 30, 34, 12,138, 16,
+160, 16,236, 30, 81,125,227, 0, 76,146,164,105,154,182,216, 96,252,230,208, 13,245,237,220, 65, 60, 19,251, 0,176, 41,109,118,
+182,207,231,131,225,230,129,131,200, 32, 8,164,128, 1, 8, 64, 35,122,239,175,189,246,139,126,244, 53,175,124,232,193,135,222,
+252,150,223,124,220,129,173,199,157,223,138, 13,171, 8, 47, 3, 9,179,243,190, 29,190,135, 14, 34,141,142, 57,254,118,158,125,
+108, 79, 34,118, 40, 98,136,203,154,148,210,129,175,172, 84,176,141, 22, 52, 38, 2, 4, 66,138,169,210, 10,109,163,103,142, 68,
+148, 36, 38,207,115, 69, 74, 80, 98,107, 24,164,195, 70,173, 13,252,128, 58,126, 80, 55,214, 90,231,157,247,238,129,123, 63,241,
+180,167,223,154,102, 89,152, 16, 32,138, 93, 72,165, 16, 0,156,133,203,143, 31,191,227, 21, 63,244,192,253,247,255,242,175,190,
+229, 9,106, 80,200,244, 66,110, 39,125,142, 1, 34,119,126, 42,186, 40, 34, 98, 82,164, 16, 41,208, 68,144, 66, 84, 14,248,121,
+196,171,149, 86,132,132,109, 55, 23, 87,166,122,122,238,136, 65,176,157,159,138,226, 38,173, 85,154,101,105,150, 18, 2,179, 13,
+ 57,168,180, 83, 66, 45, 79, 62,200,167, 14,195, 55,145,138, 86, 85,214,218,233,222,238,223,220,253,215,215, 94,127,115,154,229,
+ 24,232, 67,136, 68,196, 44,132, 74,105, 64, 68, 7,120,197, 85, 87,189,230,142, 31,126,231,239,189,235,195,119,221,253, 57, 4,
+ 36, 0,204,136, 40,216,182,199,137,148, 54,128, 68,129, 66,163,156,247, 74,155,174,128, 10,178,164, 72,141, 10, 19, 0, 33, 6,
+ 99,244, 98, 75,127,220, 57,108, 12, 91, 15,130, 52, 36, 82,107,130,228,130,228, 67,199,196, 36,137,209, 10,132,197, 89, 7, 81,
+190,145,206, 26, 66,166,181, 77,171, 63, 77, 59,189, 86,182,252,129,166,174, 5, 96,178,183,187,125,254,220,225, 35,151, 40, 29,
+ 3, 17, 18,130, 32, 18, 18,144,136, 34, 37, 0, 96, 18,252,186, 23,188,224, 43,190,252,121, 63,247,198, 95,170,235,230,241, 5,
+ 20, 69, 18, 38, 73, 66,159, 12, 65, 32,178,255,148, 82, 34,105, 32,238,247, 32, 79,192,158,223, 13,201, 53, 6,122, 6,153,118,
+ 70, 93, 0, 0, 11,198, 73, 68, 65, 84,246,184, 25,136,253, 97,182,158,116, 36,230,162, 24,205, 83,107, 77, 20,148, 55,228,158,
+ 81,110,204,194,226,195,102,151,200,204,179,214, 89,219,116,195,125,113,158,110, 81,149, 69, 81, 20,101, 49, 15,155,168,180, 49,
+ 77, 93,123,231, 72,169,158,110,162,244, 88, 65,136, 18, 24,121,131,209,248,101, 63,240,189,111,125,251,127,125,224,161, 79, 63,
+174, 15, 10,195,126,193,210, 34,169, 33,188,215, 72, 17, 1, 1, 65,173, 85,152,236,108,195,157,136, 96,219,151,141,211, 94,130,
+ 93,217, 26, 97,229,182,122,141, 76, 4, 36,210,237,233,226,108, 71, 60, 58,183,236, 55, 98, 17, 8,219, 27,218,141, 55, 62,144,
+128,227,170, 26,219,216,198,134,209,190,192,202,169,138,170,172,234,170,168,170,210,214,165,117, 22, 17,179,124,148,164,169, 0,
+ 98,119, 38,192, 46, 8,133, 68, 66, 4, 73, 72, 68, 17,137, 50,233,191,252, 23,223,120,247,221, 31,127,231, 31,252,247,199,247,
+ 65,220, 50, 79, 0,195, 96, 18, 0, 50, 0,114,156,119, 13, 4,162, 37, 21,140,121,105, 67, 32, 32,216,249,146,126,237, 26, 24,
+101, 33, 90,117,205, 60,223, 94, 34, 9, 98,219,161, 16,241,178, 28,164,106,183, 79,133,209,111,239,156, 13,203,169,218,237, 59,
+ 77, 83,135,137,228,170, 42,155,186,170,235,202,214,181,109, 42,231, 29,138,100,195,209,198,129,131,227,245, 13,173, 53, 68,174,
+ 24, 70, 14, 51,198,207,163,188,144, 0, 37, 68, 85, 17,121,218,117, 79, 77,179,244,119,223,241, 7, 93,254,173,151,252, 59,233,
+184, 59,128,192, 0, 24, 10,112, 64, 16, 22,196,104, 25,161, 72, 7,224,110,138, 38, 26, 29, 47, 53, 6, 0, 34, 41, 87, 17, 0,
+ 8,123, 16, 70, 82,161,151, 32,164,195, 55,249,174, 28,241,203, 89,169,229, 7,109,206, 21,213,198, 6,227,138,206,167,174,235,
+166,142,220, 50,103, 27,219,212, 97,172, 73,145,202,135,195, 67,135, 46, 62,112,232,162, 60, 31, 42,173, 58,114, 18, 17,120,223,
+ 86, 83, 75,122, 82, 40,177,163,185, 49,169, 43,143, 31,255,142,111,251,166, 95,252, 79,191, 22, 57, 12,157, 27,229,168, 58, 45,
+125, 9, 56,128, 23,216,242,207, 66, 56,235, 13,174, 71,231,139, 75,239,133, 65, 42, 70,107, 68, 96,118, 0,140,168,208, 36,145,
+ 66, 17,106, 88,207, 18, 50,114,207,222, 89,191,172,235,186, 81, 55,142,217,103,107, 89,174,167, 62,145,235,110,173,179,181,181,
+214,219, 38,164,169,138, 84,146,165,195,181,241,214,193,195, 7,182,182,242,193, 0,145, 32,188, 49, 1,137,221,107,132, 56,109,
+ 29, 75, 41, 89,114, 39, 41,148,128,172,120,109,109,252,157,255,234,155,255,244, 61,239,147, 48,174, 9,171, 60,129, 96, 41, 24,
+181, 34,124, 17,123,233,113,164,171,181,150, 7, 44, 28,124,139, 54,218, 40, 37,194,236, 29,144, 82,202, 32, 82, 28,200,228, 94,
+150, 25, 31,182,151,119, 46, 21,198,123, 27, 63,183,182,245,203,157, 6, 53, 65, 82, 97,135, 95, 24, 73, 8,180,171, 52, 27, 12,
+ 71,163,241,250,230,230,230,214,104, 60, 54,198, 32, 96,104, 16,183,212,185, 96, 17, 34,203, 17,111,145,125,209, 38, 66, 58, 68,
+ 74,175,141,215,111,249, 71, 55,157, 60,117, 70,183, 62,180,125,243,193,169,162,112, 12, 57, 24,233,166,130,209,126, 91,186,125,
+155,215,133, 24,100,140,214,204,206,251, 6, 81, 41,147, 32,146,136,184, 78, 43,194,123,116,237, 62,133, 32, 32,231, 93, 55,245,
+103,109, 40,232, 98,229, 27,191,182,116,207,221, 30,177, 80,177,135, 58, 67, 41,157,228, 73,150, 15,198,235,155,235, 27,155,163,
+181,145, 49, 9, 17,245, 97, 38,236,200, 37,128, 61, 72,165,155,227,107,249,214,216, 18,240,162, 58, 81, 75,198, 91, 42, 9, 75,
+112,203, 81,153,184, 83,150, 46,143, 89,202, 17, 25, 17, 68, 80,107,149, 36, 9,162, 56, 87,135, 9,133, 16,156,124,251, 94,163,
+101,216,166,117, 35,193, 58,130,207,109, 58,117,242,173, 77,113,171, 81, 1, 48,241,109,221,215,173,166, 0, 0,165,117,162, 77,
+146,102,195,193,112, 52, 30,175,173,141,179,124, 16,136,231, 29, 23,105,201,168,235,100, 33,203, 65,198,150,132,222,149,139, 45,
+ 79, 57, 40, 20, 34, 80, 28,176, 91, 58,105,230,142,242, 26,129, 32,232, 49,183, 17,187,118, 56, 4,150, 5, 17,133,156, 57, 96,
+122,132, 10, 73,181, 83, 66, 62,184,143, 54,103,169,235,166,177,117, 29, 92, 72,240, 35, 77,211,116,170,225, 90,213,104,107,153,
+184,242, 38,210, 65, 36, 44,163, 82,164,148,209, 58,201,210,124, 48, 28, 14, 70,249,112,152,231, 3, 99,140, 82,203,249,168, 37,
+185,160,243, 27, 45, 8, 37, 75,106,254,146, 29,222, 1, 10, 75, 48, 50, 74,106, 69,131,218,111, 71, 89,146,190,123,195,227,161,
+ 30, 16, 94,122,159, 64, 18, 52, 90, 57,215,120,231,136, 72, 16, 88, 4,188, 23,145, 40,157,232, 77,227,190,146,118, 67, 71, 21,
+184,186,117, 93, 91,107,131,130, 4,120, 13,162, 41,192,178,200, 71,212,202, 40,173,147, 36, 73,210, 52,207, 6,217, 96, 48, 24,
+ 12,146, 36, 53, 70,135, 42,151,133, 81, 96, 21, 85,105,149,190, 7, 86, 10, 64, 88,177,213, 50,224, 90, 22, 27,244,152,247, 45,
+220, 27, 81,176, 94,152,151, 62, 47,144, 35,160, 8, 45,213, 7, 59,133,100, 14,101, 13, 4,216,193,218,198,217,166,205, 41, 56,
+ 88, 96,240,188, 54,228,117,182, 53,172, 88, 87, 86, 85, 89,150,101, 89, 85, 69, 93,215,174,169, 3,126, 20, 23, 32, 40, 29, 65,
+ 31, 82, 58, 73, 76,192, 58,178, 44, 44,119, 9, 11, 10, 21,169,128, 86, 49, 95, 64,251, 90,150,187, 43, 4,205,152,183,181, 84,
+186, 30, 65,178, 75,145,151,210,234, 91,221,190,106,126,255, 50,137,248, 83, 49,228,202, 75,220,143, 69, 66, 9,194,206,217,166,
+246,236, 1, 64, 9, 16, 49, 32, 5,196,154,195,186, 46,137,236,181,200,245,143,179, 26, 68,161, 36,119, 54,140, 97,135,141, 6,
+121,158,167,249, 32,203,226,106,172, 52, 77,181, 49, 97,190, 7,169, 55,185, 28,192,236,149, 55,198,171,108,157,222, 34,138,110,
+ 5, 71,252, 23,232,129, 84,189,192,125,129,128, 59, 93, 90,209, 32, 94,142, 74, 8,180,201, 38, 4,141,236,125, 1, 99,233, 40,
+206,219,166,105,152, 61, 18, 49,139, 82, 10, 73,245, 41,163, 8, 64, 24,214,108,153,214, 65, 4,129, 51,139, 35,132, 36, 73,144,
+104, 48, 92, 91, 95,223, 24,141,199,249, 96, 96,180, 9, 56, 81, 40,111, 90, 64, 82,194,152,220, 5, 32,246,138, 46,244,160,186,
+ 62, 19,122, 73, 5,231,142, 88,212, 49, 54,185, 99, 34,247,189, 58,119,185,229,138, 6,245, 10,240, 40, 42, 89,146,116, 4, 91,
+242,126,200,170,187,218,136,217, 67, 88,118, 20, 55, 13, 80, 75, 55, 14, 67, 94,164,148, 2, 17, 48, 9, 66, 28,122, 51,218,100,
+ 89,106,109, 13, 44, 74,171,192,255, 30, 12,135,198, 36, 29, 84,184,140, 50, 45, 88,213, 49, 5, 87,109,106,229,157,237,163,104,
+239,223, 3,176,106,131, 32,251,168, 79,157, 24,177,207,224,214, 29,127,140,151, 93,209,149,190, 96,175,245, 25,171, 48,239, 37,
+154,152,181,129,248, 27,141, 39,206,242,199, 49,194, 86,101, 34, 37, 15, 49,178,209,125,150,229,126, 24,234,172, 88,214,249,166,
+ 42,132,147,148,148, 10,184,124,139,139,131,244,169,213,189,165, 2,171, 28,254,207, 70,245,234,217, 28,195,231, 32,148, 75,183,
+158,177, 51, 69,221, 25, 5,243,138,137, 45,185, 93, 75,161,197,111,195,152,150, 6, 88,207, 5,183, 78, 20, 40,185,113,223, 65,
+155, 83, 66,151, 76, 18,162,136,104,173, 89, 12,175, 48,113,227, 62, 22,107, 27,104, 98,197, 79, 68,136, 42, 20, 77,225,115,110,
+217,140,125,244,177, 93,119,246, 56, 12, 84,238, 8,219,221,187,223,207,110,135,199,213,184,190,243, 94,201,131, 62,131, 68, 58,
+155,195,126,218, 9, 34, 0,132, 68,204,236,108, 35, 65, 83,108,196, 90, 41,190, 67,236,101,241, 24, 90, 17, 8,130,130,138,116,
+139,151, 45,199,187, 91,169,113, 59,108,237,132, 25, 80, 16, 9, 81, 5, 28, 39, 24, 44,175,188,149,214, 11,115, 39,177,229,222,
+170,126,115,165,123, 90, 59, 16,192,253,225,247,238, 69, 65, 86,154, 83, 49, 15,138, 49, 7, 87, 68,211, 73,168,243, 88, 93,132,
+107, 81, 71,173,181,137,252,113,142,195,190, 74, 41,165,116, 23,180,250,120,124, 91,248, 4,164,140, 0, 5, 5, 69,129, 8,129,
+112,219,203, 97,234, 52, 43,182,115,152,165, 9,192,147, 5, 64,162,112, 55, 1,141,235, 20,135,123,241,234,194,225,131,246, 61,
+119,211, 36, 75,170,125,123, 69,220, 13, 5,112,140,233,210,243, 65,237,172, 69,175,139,119, 33, 99, 99,191,118, 33, 82,146,166,
+109,189,105,189,231, 22,192,215, 42, 12,189,168, 0, 93, 35,117,104, 44, 46, 25,241,171,172, 72, 12,123,117, 3,172,200,204,136,
+ 28, 9,215, 20,185,176, 97,143, 17, 91,219,210,214, 81, 41,141,168,186,112,183,127, 83, 11,175,204,180,180, 2, 1,190,112,148,
+164,219,124,217, 77,229, 74, 79,131,186,103, 96,155, 69, 75, 15, 78, 95,186, 18,108, 65,159, 56,169, 28,223,100,154,231, 0,176,
+ 88,204,156, 43,157,115, 17,107, 33,213, 53,118,130,247,198,182,231, 19,161, 5,164,182, 75,216, 45,219,235,117, 20, 17, 16, 72,
+132,195,119, 49,162, 66,194, 72, 2,247, 1, 44, 97,246,222, 54,225,109, 40,147, 16,169, 94,163,191, 93, 81,215,115,207, 93, 6,
+ 2,113, 12,170, 91,227, 41,126,149,220,222, 45,243,130,222,150, 60, 94, 78,181,244, 93,116, 79, 97,160,191,243,177, 99,232,138,
+ 32, 96,146,102,168,148,214,166, 88,204,171,170,242,206,177,212, 97,106, 98,201,209, 32, 21,210, 68, 84,138, 90,157, 10, 13,179,
+168, 87,203,113,139,190,106,181,113, 1,137, 0, 65, 35, 32, 33, 19,162,243,158,188,247, 32, 1, 46,104, 0, 17, 73, 19, 82,200,
+ 87, 47,200, 26,165,219, 35,219, 55, 40,238, 51, 44,186,177,132,118,140,108,213, 7, 45,233,245, 61,161,244, 51,207,149, 32, 7,
+176,210, 73, 22,173,244, 96, 56,210,218,152,164, 40, 22,243,186,170,172,109, 68,154,184,136, 32,136, 2, 85,235,155,218,212, 58,
+238,222,162,214,175,183, 61,179, 22,160,109, 89,223,189,208,213, 54, 37, 1, 9, 0, 61, 32, 1,178,247,222, 91,182, 54,142, 28,
+144, 38,165,151,140,105,142,227,142, 75, 91,107,199,105,132,187,249,173, 56, 6,212,114, 9,188,244,125, 80,231,151, 0, 97, 9,
+ 46, 7, 72, 8, 99,153,218,161,101, 1,141, 70, 4, 94,253,119, 68, 52, 73, 26, 38,221,170, 69,177, 40, 22, 85, 85,218,166,182,
+ 77,195,221,202,227,214,143, 99, 59,118,210,174, 76,136,146,194,158,176, 66,131, 30, 3,140,133, 43,236,159, 16, 55,149,214,128,
+ 8, 30,176,221, 76,224,189,243,182,113, 82, 11,160,210, 9, 41,213, 91,132,210,250,151, 22, 57, 89,142,215,200, 50,139,232,207,
+217,244,157,180, 95,118, 32,122,230, 35,176,132, 14,250,176, 64,111,190, 82, 86,225, 2, 65,196, 36, 73,181,210,249,112,216, 52,
+ 77,177,152, 47, 22,243,186, 44, 27,219, 44,215, 1,199,236, 6, 91,225,232,118,168, 94, 71, 40, 59,184,246, 96,140,234,113, 67,
+ 97,204, 56, 66, 49,195,200,180,236, 91,160,247, 14,216, 55,213, 28,144, 72, 27,165,140,180,100, 36,217, 55, 75, 19,215,128, 44,
+195, 26, 47,247, 10,175,104, 16,203,202, 82,195, 85,212,109,245, 11,242,120,214,118,161,241,145, 82,105,150,153, 36, 25,141,215,
+109,211, 84, 85, 89, 44,230, 85, 89, 52,117, 99,157,101,239,156, 11,153,116,112, 68, 49, 63, 80,237,148, 78,224, 79,133,228,179,
+ 83,173, 24,230, 90, 81,117, 59,189, 34,229,138, 64, 84,232, 41,160, 19, 12, 37,145,179, 53,145, 38,149,132, 5, 40,189,133,125,
+ 75,103,180,178, 20,143,123, 4,149,190,128,186,137,141,254,123, 70,196, 54,195,142,195, 64, 1,235,237,125, 9, 91, 82, 98,175,
+ 64,234, 75, 11,128, 72,165, 89,106, 18, 51, 26,173, 49,123,107,109, 85, 85,101, 48,192,186,113, 46, 96,207,214, 54, 77,103, 95,
+173,164,150, 10,165,180, 34,165, 58, 49,133, 40,216, 75, 16, 90,240,129, 84,104,196,171,200, 5, 67, 17,112,174,225,166, 18, 80,
+ 73,146, 9, 66,107, 81,113, 14,170,167, 80, 97,189, 33,123,246,226,125, 55,187,218,213,223,188, 47,116, 44,185,187, 43, 62,121,
+165,124,238, 42, 93,150,213, 58, 69, 86,212,109,185,247, 82,169, 4,201, 36,201,104,180, 22,122, 27, 97,160,186,174,235,248, 63,
+ 37, 9,211,178,206,161,237,100, 21, 54, 3,234,182,226, 11,117, 11,182,179, 96,221, 4,100,191, 0, 84, 68, 34,162, 69,117, 25,
+143, 19, 87,151,174, 38, 74,148, 73,226, 40,244,234,108, 38,199, 21,239, 62,174, 97, 92,241, 65, 97, 49,102,251, 30, 47,100, 55,
+ 1,226, 62, 59,234,131, 68,203,116,251,130, 89,156,149,165,118,251, 6,229, 16,148,210,131,225, 48,207, 7,204,236,156, 13, 3,
+232, 85,232, 2,218,166,219,141, 78,138,108,204,168,116,183,225,174,157,197,108, 19,171,150, 20,223, 70,141,208,132, 87,162, 64,
+ 4, 84,248,119, 91, 91,187,112,174, 65,101, 8,169,183, 21,169,219,180, 24,247,155,178,247,225,206,117,196,124,150, 21, 62, 66,
+ 95,151,250, 0,230, 74,117,182, 34, 23,232,117, 16, 87, 8, 45,112,193,175,253,131, 96,221,118, 5,212,198, 40,173,211, 44, 31,
+250,246,255,148, 17, 87, 57, 55,129,220,202,236,208, 57,165,136, 72,183, 99, 86,145,103,212,149,126,173,255,110,253, 40, 41, 18,
+ 17,165, 68,132,148, 48, 51, 48,187,166,244, 82,106,147, 19, 81,111,176,143,133,189,116, 20, 66, 31, 9, 71,120,219,109,183,201,
+ 5, 20,232, 39,195,164,205,147,228, 24,255, 23,101,110,253,130,218,250, 28,224, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+ 0};
+
diff --git a/source/blender/editors/datafiles/fill.png.c b/source/blender/editors/datafiles/fill.png.c
new file mode 100644
index 00000000000..010cd5ca278
--- /dev/null
+++ b/source/blender/editors/datafiles/fill.png.c
@@ -0,0 +1,534 @@
+/* DataToC output of file <fill_png> */
+
+int datatoc_fill_png_size= 16892;
+char datatoc_fill_png[]= {
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 96, 0, 0, 0, 96, 8, 2, 0, 0,
+ 1, 26,253,208,249, 0, 0, 0, 4,103, 65, 77, 65, 0, 0,177,143, 11,252, 97, 5, 0, 0, 0, 6, 98, 75, 71, 68, 0, 0, 0,
+ 0, 0, 0,249, 67,187,127, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 0, 7,
+116, 73, 77, 69, 7,218, 7, 19, 0, 34, 12, 33,249,187,131, 0, 0, 32, 0, 73, 68, 65, 84,120,218,236,188,119,144,101,217,121,
+ 31,118,206,185,231,230,252, 82,231,158,188,121, 54, 47, 22, 27,176,136, 4, 68,144, 4, 8,154,169,192,146,138,182, 44,148,196,
+114,209, 42,209,170,146, 44,217,170,178,252,135,139,150,108, 73,150, 92,101,131,162, 77,194, 4,109, 70,145, 6, 72, 0,139,184,
+187,216, 93,108,158,217,221,217,137,221,211,233,245,235,151,110, 78, 39,250,143,251,122, 22, 18, 19, 68,211, 37,200,165, 91, 83,
+ 93,175,167, 95,223, 62,247,203,223,239,247,125, 15, 62,245,212, 83,224,207,188,254,141, 55,253,200, 71, 30,251,163,239,193,183,
+ 94,237, 92,121,249, 11,159,251,236,169,179,235,255,248, 31,253,195, 34, 26, 29,238,110,255,214,175, 63,253,203, 95,122, 6, 0,
+128,165,148, 47,125,229,127, 91, 61,115,255, 23, 63,247,191, 62,242,196,131,253, 19,231,155, 50,221,187,113,245, 11,191,243,204,
+ 7, 63,252,240,223,250,175,255,230, 91, 47,189,128,164,148, 27,183, 63,242,135,191,246,217,251,223,115,239,218,109,143, 50, 90,
+ 15,175, 95,252,195,223,123,238,135, 63,245,254, 39,127,248, 39, 38,251,215,176,138,149,141,205, 77,191, 25,158, 58,187,126,242,
+252, 7,234, 50, 74, 71, 55, 76,215,123,224,145,187, 79,221,251,100,124,120, 37,141,162,167,191,248, 2,134, 16,186,174,125,238,
+225,143, 54, 69, 68,171, 20, 0,168, 96, 13, 2, 36, 57,141, 39,163,195,253,241, 97,148, 33, 0,192,195, 31,250,161, 38,159,113,
+ 82,125,251, 43, 95,129,138, 34, 57, 91, 58,253,192,222,229, 23, 9,161,191,242,175,158,249,153,159,254, 48, 2, 82, 82, 82,209,
+166,186,250,198,119, 46,191,117,243, 91, 79,191, 40,165,216,190,248,117, 70,217,231,127,245, 75, 31,127,252,252,131, 31,252, 17,
+ 4, 0, 32,101, 66,203,248, 43, 95,124,225, 61, 79,158,255,201,207,252,117,172,234,164, 33,219,215,246,128,148, 63,240, 35, 31,
+209, 77, 15, 1, 0,104, 93,188,240,205,231,187, 61,239,222, 71,159, 16,156,206, 70,251,117, 89,125,238,247,158,251,212,143,127,
+112,233,204, 67, 55,223,252, 6, 2, 0, 84, 69,124,225,181, 43,247, 61,124, 7, 84,240,246,197,103, 73, 67,126,237, 87,191,252,
+241, 39,206,223,247,196, 71, 56,169, 47,188,244, 38,252,158,116,247,189, 92,112,161,184,171, 47, 95,126,233, 43,219,215,246, 30,
+121,223,163,154,233,214,197,252,139,191,241,229,171, 55, 71,159,255,234,183, 1, 0,240,202,107, 95,242,186,155, 47,127,229,255,
+204,210,226,125,159,248,116,157, 71,180, 78,127,245,127,250,101,203, 54,222,255,177,247,134, 75, 27,207,124,233,105,236,247, 79,
+188,245,220,239,102,105,254,161,255,232, 63, 41,179,153, 20,244, 55,126,233,215,188,192,249,209,191,252,147,118,184,118,241,185,
+ 47,178,134,225,209,245,151,247,182, 14, 63,244, 99,159,174,138,185, 96,205,107,207,124,237,147,159,254, 4,169, 50,127,112,250,
+202, 75, 95, 98,132,125,241,249,139,202,131,167,150,223,251,161,167,116,203,101, 77,245,198,183,191,126,199, 3,247, 67, 41,156,
+112,121,120,253, 85,210,208,127,241, 47,255,239, 31,249,192,131,232,236,237,155,225,202, 57, 82,101,243,225,181,213,181, 37,193,
+ 40, 68,184,204,102,148,210, 23,190,245,218,221,235,131, 31,248,177, 79,161, 51,247, 63,149,207,135,164, 46,126,235, 87,191,248,
+250, 43,239,236, 94,187,230,247, 55,179,249, 52,137,178, 23,223,222,254,196, 79,125,196, 27,156,194,101,114, 36, 56,123,249, 91,
+207,234,134,246,193,143,255,128,219,223,220,121,243, 89, 74,217,191,248,229, 47,126,250,147,239, 59,243,224, 71,162,253,203,136,
+214,121,149,207, 95,121,241,210,195,143,223, 99,249, 75,195,171, 47, 17, 66,159,125,250,229, 7, 79,175, 62,254, 3, 31, 69, 72,
+121,254,171, 95, 69, 77,149,191,244,236,107,157,190,127,238,158,251,164,160,121,146,205,167,201,119,222,185,249,177, 79,190,207,
+235,111,190,254,245,223,110,106, 2,254,162,116,135,255,232,127,253,230,231,254,249, 3,247,221, 61,222,125,251,237,215,222,137,
+102,137,162,192,222,160, 23,158, 60,183,236,163,166,169,154,170, 46,242,234,127,252,236,239,124,243,165,183,254,152, 27,189,231,
+161,123,255,241, 63,248, 27,103,238,125,146, 81,114,225, 91,191,255,213,223,254,191, 44,219,188,253,158, 51, 27,119, 62, 42, 24,
+163, 77,201,105,205,104, 61, 58, 56,124,225,155,175, 29, 77,146,135, 79,109,126,236, 61,247,218,142,249,243,255,221,191, 92,220,
+ 72, 8,241,202,211,255,251,218, 29,143, 74,198, 94,255,198,239, 28,236,142, 92,207,126,232,241, 7, 86,111,123,140,147,138, 54,
+ 21,231, 68, 10,182,115,245,205,103,190,252,114,154, 21, 27, 39,150, 30,251,192, 3, 39,206,221,105,119, 86, 5, 37,127,112,199,
+137, 44,205,139,188,198, 82,130,181,219, 31,217,122,245,203,151,223,186,142, 85,229,174,123,111, 59,117,223, 7,145,130,171,108,
+ 46, 57,227,156,142,119,223,169,203,202,241,236,229,141,193,123, 78, 46,223,245,200, 19,118,176, 2, 33,218,187,244, 76, 26, 39,
+156,243,170,108,254,224,233,151,224,147, 79, 62,249,115, 63,246,104,153, 87,171,155, 75,183,221,255, 4, 21,200,208, 85,206,168,
+ 20,172,206,102,111,124,231,229,123, 30,186, 79, 81,176, 16, 66, 10,142,176,102,122,125, 70,170,241,238,101, 70, 57, 33,244,226,
+171,151,191,242,202,229, 51,161,135, 1,132, 66,200,243, 15,221,189,126,231, 19,130, 19, 88,164,140,148,130,177,189,171, 23,116,
+211, 56,255,208,253, 16, 66, 33,184,144, 28,171, 70,119,253,174,189,119,158,105,202,154,115,145,165,197,239,255,238,183,134, 89,
+249,161,251,206, 61,246,129, 7, 48,144,224,161, 39,159,228,208, 40,147,177, 20, 92, 8, 78,202,228,197,111, 60,119,227,218,222,
+ 3,143,220,121, 74,215, 52,221,196,154,237,133, 43, 77, 17,109,191,241, 53,198, 25,103,124,103,123,248,235,191,255,220,138,107,
+255,212, 15, 61,254,192, 99, 15,245, 79,220,135, 1,144,166,219,173,139,152, 53,141, 20, 34,153,238,127,253, 15,159, 63, 28, 78,
+ 79,156, 92, 9, 59,126, 85, 84,186, 21,116,215,239, 60,184,242,124, 85, 20, 92, 8, 82, 55, 47, 62,123,225,155, 23,174,189,231,
+236,198, 19, 31,120,240,142,135,159,112,187, 27, 66, 48, 12, 0,200,231, 67, 41,165,148, 98,122,184,255,181, 63,124, 49,207,138,
+ 59,239, 57,125,255, 35,119,110,220,249, 56, 41,115,136,208,141, 55,190,202, 40, 23,130, 39, 81,254,187,191,253,141,105, 89,127,
+252,241,123,223,243,196,189, 39,239,121, 66,119, 66, 90,231,175,126,237, 95, 97, 0, 0,169,115, 32,229,244,104,252,141, 47,127,
+167, 44,154, 59,207,159,190,239,225,187, 86, 78,223, 95, 23,113,147,207, 38,195, 61, 41, 37, 99,124,231,198,193,111,252,193, 11,
+171,158,253,227, 63,244,248,253,239,185,111,233,244,131, 24, 27,217,116,239,165,175,127, 57,141,243,246, 70,229,108, 18,125,235,
+171, 47,151, 69,115,231, 61,167,238,190,239, 92,111,253,246,186, 76,242,249, 48,154,205, 5,231,148,176, 87, 94,120,235,155, 23,
+174, 61,114,102,253,189, 79,221,127,231, 3, 15,121, 75,167, 33, 4,251,151,159,187,248,202,155,117, 77, 40,161,127,113,113,242,
+ 47,228,218,220,220, 68,127,202,143, 79,110, 44,191,239,209,251,254,237, 2,247,173,203, 52,141, 55,191,243, 37, 78,155,183, 95,
+122,102,103,235,128, 52,164,211, 15, 9,229,143,125,224,241,166, 76,155,186,170,203,102, 62,141,127,230, 23,254,177,148,242,187,
+ 79,244,175,221,232,226,203, 95, 11,130, 32,157,238,188,254,236,179,209, 60, 89, 94,235, 47,175, 14, 6,167,238,227, 36,103,180,
+102, 77,221, 20,201,219, 23,175,189,249,218,149,121, 94,125,245,181,183, 70,179,248,223,188,209, 43, 95,249,165,149,115,143, 66,
+ 8,198,219,111, 92,120,233,149,178,168, 87,214, 7,103,207, 63, 96,135,235,180,138, 57,109, 56, 35,121, 52,122,233,217,215, 46,
+189,181, 13,164, 92, 89,237,250,161,251,183,255,135, 95,165,140, 47,110,244,233,159,250,212,223,252,217,143,109,220,253, 20, 0,
+ 96,116,253,149, 11,223,121,149, 82,186,186,185,116,246,222,199, 76,175, 71,202, 68,112,202, 41,201,227,195,231,158,254,246,213,
+119,118, 12, 93, 59,117,219,250,233,115, 27, 75,235,235,182,191,116,112,253,205,157,173,131,151, 47,237,225, 95,248,107, 63,178,
+118,219, 99, 18,202,217,206,219, 23, 95,126,141, 49,182,126, 98,229,236,125,143,153,110,159,148, 49,144, 2, 8, 81,103,179, 23,
+191,249,157,107,151,119, 29,199,188,243,252,153,219,238, 62,211, 63,113, 23, 66,120,186,251,118,154, 22,134,169, 99, 21,227,245,
+219,222, 43, 32,200, 38,187, 23, 95,122,145, 52,100,109, 99,233,236,125,143, 1,108,210, 38, 19,130, 11,193,235, 34,122,253, 59,
+175, 92,189,180, 99, 24,250,189, 15,221,126,238,174, 51,131, 19,247, 73, 0,178,201, 78, 52,139, 16,130, 82,130,249, 52,193, 0,
+130, 38,155, 95,120,238, 27, 69, 86,246,151,187,167,238,126, 16, 27, 30, 2,156,211, 70, 74,193,234,226,234,197,139,103,110, 59,
+177,121,106,237,250, 59,219,103,110, 63,181,122,238,189,148, 84,172,206,167,135,123, 0, 0, 32,193,141, 43, 59,163,180,192,156,
+214, 23,191,253,229,104,158,134, 93,255,244, 29,119,133,203,103, 73,157,209,186,145,146,115, 90, 95,185,240,202,230,153, 77, 85,
+183,133,224, 15,134,193,254,206,104,229, 44,193, 88, 61,216,185, 36,165, 4, 64, 30, 29, 78, 95,184,116, 83,195, 26,190,250,242,
+211, 71,195,169,227, 90, 39,206,158,232,159, 56,207, 89, 77,235, 66, 10,206, 57,221,187,122,209,245, 28,195,242,165, 20, 0, 72,
+168,153,119, 62,248, 48,214,140,253,119,190,205, 24, 19, 82,102, 73,241,205,103, 47, 64, 8,151, 58, 62,186,121, 99, 31, 99,101,
+117, 99,105,229,204, 67, 82,138,166,136,165,224,130,211,232,240,122,211,144,254,234,134,132, 64, 74, 33,129, 68, 72,113,194,213,
+233,205, 11, 77, 93, 11, 33,104, 67, 95,126,225,237,113, 89,159,223, 24, 44,175,247, 49,101,124,117, 99,176,118,246,190, 52,142,
+ 76, 83, 19,156,113,198,234,124, 54,159,204,151, 87, 87, 37,132, 80, 48, 41, 5,148, 32,232,159,204, 38, 59,121, 58,151, 66, 8,
+ 46,110, 92,221,125,125,123,120,166,227,221,255,200,157,251, 57, 64, 97,232,173,159, 58,163, 89,190,101, 25,156, 81,193, 25,167,
+213,149,139,111, 26,134, 6,160, 4,156, 74, 46, 33,128,166,219,149, 64, 68, 71, 55, 5, 23, 66,136,249, 52,249,198,243,111,122,
+186,122,254,190, 51,103,239, 58,107, 58, 33, 90, 89, 31,132, 43,103,129, 20,180,169, 36,167,130,209,209,206,181,139,175, 93,185,
+114,105, 59, 79, 18, 70, 27, 0,129,110, 7, 78,119,125,124,243, 34,231, 92, 8, 81, 87,205,119,158,189,144, 19,122,223,109,155,
+183,223,125,186,183,126,167,162,234,184,191,126, 27,231,140,148,169, 20, 92, 10, 81,166,147, 55, 94,190, 20,207,179,160,227,189,
+242,210,213, 78,199, 58,125,118,253,228,210,169,201,206,197,166,174, 5, 23,156,241,235,151,119, 47,236, 31,221,181,220,189,227,
+252,233,245,179,119,155,110, 23, 0,128, 33,214,105,153, 72,206,164, 16,140, 54, 87,223,190,186,123,243,208,118,204,229,229,238,
+169,219, 54,155,154,158, 58,255,100,157, 71,121, 60, 21, 92,114, 33, 38,227,232,235,207, 95, 12, 52,237,174,243,103, 78,159, 59,
+233, 15, 78, 32,168,208,186,192, 8, 2, 66, 27, 41,133, 20, 34, 26,239, 95,126,235, 6,231,114,117, 99,176,113,106,117,253,246,
+ 71, 57,163, 72, 81,102,195,107,130, 11,206, 89, 85, 54, 47, 62,123, 33, 39,236,169,251,206,158,185,125,179,183,113, 23, 86, 13,
+ 70,155,217,104, 23, 55,197,156,115, 1,128, 96,164,186,122,105,123, 54, 77,187, 93,111,227,196,242, 96,227, 28, 68,138,106,104,
+227,237,215, 41, 33,130, 75,206,197,181,119,182, 47,238, 29,221,181,218,187,237,174, 83,107,167,239, 48,221, 46, 0,114,186,243,
+102, 22,231,152, 51, 34,132,144, 82,206,142,198, 91,215,246,177,130, 86,214,251, 43,235, 75,150, 63,104,202,132,147, 42, 79, 98,
+206,133,224, 98,122, 52,251,198,243,111,117, 12,237,174,123, 78,159, 60,187,225, 15, 54, 33, 84,234, 60,186,250,214,219,140,115,
+ 36, 88,195, 41, 33,117,113,237,242, 78, 18,231, 65,199, 93, 89,235, 7,131, 77, 90, 23,170,110,205,134, 55, 24, 99,130,139,178,
+168, 94,120,246, 98, 78,217,249,219, 79,156, 57,183,209,223,184, 83, 81, 77, 33,200,246, 91,223,142,231,169, 20, 18, 51, 74,133,
+ 20,179,201,108,103,235, 64,193,202,210, 74,183, 55,232,234,166, 71,105,157, 13,247,234,186,225, 66,114,202,174,190,115,243,205,
+253,241,221,171,189,219,238, 60,185,122,234,180,233,118,161,148,179,225,181,189,173, 3,198,184,144, 2,113, 70,155,186,217,186,
+186, 23,199, 69, 16, 56,131,229,174,215, 93,106,234, 2, 33, 20,207, 38,156,113,193,248,124, 18, 63,243,157,119, 66, 67,187,227,
+174, 83,155,167, 87,188,254, 73,128,148,186, 76,174, 94,120,163, 44, 27,193,133, 20, 18,124, 95,229,181,141,141, 13, 4,190,159,
+ 46, 8, 33,254,222,223,253,225,247, 63,250, 87,126,250, 19,247,159,191, 67,210,114, 58, 58, 24, 31, 78,162,121,154,167,101, 83,
+ 19, 33,196,239,125,235,213,215,175,221,108,223,249,139,255,213,223, 56,127,251,186,170,160, 40,206, 47, 93,217,121,250,185,215,
+159,123,229,237,239,245, 76, 79, 61,245,212, 51,207, 60,243, 39,253,248,239,252,194,207,125,230,175,254, 12, 0, 16, 2, 88, 23,
+243,195,237,183, 71, 7,147,100,158,214,117,131, 32,178, 28,195,245, 29, 85,197,142,107, 5, 75, 27, 65,119,169,105,147, 32, 99,
+130,211,246, 5,165,164,200,203,233, 81,116, 52,156,204,167,105, 89,214, 95,125,253,157,183,183,247,254,164, 74,228,143,145, 80,
+183, 19,220,115,231,185,207,127,238,179,109,129, 32, 56,139, 70,215, 15,110, 92,153, 28, 69, 69, 94, 10, 41, 13, 93, 95, 90,235,
+117,186,129,223, 93,182,252, 62,210,108, 40, 24,163, 21,231, 84,193, 42,132, 16, 66,133, 35,196,104, 51,159, 70,187,219, 7,195,
+221,241,124,158,150,132, 34, 8,177,130, 62,116,223,237, 31,125,232,174,207,126,241, 91,121, 85,255,137,253,140,174,107, 47,126,
+253, 55, 73, 58,132,216,222,184,237, 33, 32, 37,128,144,209,122,178,251,214,254,214,141,249, 52,105, 42, 2, 16,240,124, 39,236,
+249,157, 94,199,239,159,176,252, 37,164, 96, 70, 74, 78, 27, 33, 69, 43, 69, 9, 16,128,168, 46,231,163,253,131,155,215, 15,134,
+123,227, 52, 45, 24, 23,134,174,174, 45,117,252,208, 11, 58,174,227, 89,182,109,253,165, 79,190,207, 48,205, 6,232,156, 84,162,
+ 41,247,247,142,190,244,205, 87, 94,186, 58,196, 66,136,203, 47,127, 33,157,237,211,124,118,226,238,247, 3, 8, 1, 0,156, 54,
+211,221, 75,187, 55, 46,207, 39, 73,211, 16,132, 20, 55,176,195,142,215, 29,244,195,149,115,150,215,231, 66, 8, 90,211, 42, 19,
+ 82, 72, 41,129, 20, 0, 72, 41,120,157,207, 71,251,187,215,223,217, 29,238, 31,101, 89, 37,132, 52, 77,189,215,247,251,203,221,
+ 78,223, 15, 59,190,227,251,150,215,215, 12, 23, 0,200,121, 51,217,187, 18,231,105, 81,212,186,166,254,224,251, 31, 94, 89, 27,
+ 97, 0, 64, 30, 31,157,184,251,253, 82, 2, 0,164,228, 60, 58,218,218,189,114, 97,114, 52,175,202, 6, 66,224,184,118,216,241,
+122,203, 75,193,202, 89, 59, 88,170,139, 66,112,202, 73, 37, 56, 7, 64, 0,201,129, 20,130,243,186,136,198,251, 59,215,175,236,
+238,223, 28, 37,113, 46,164,176,109,115,105,165, 51, 88,233, 5,161,211, 95, 30,248,253, 13,211,237, 1,132, 4, 99, 16,193,249,
+193,149,104, 58,174,203,134,115,129,177, 2,128,202, 40, 99,148, 97, 41,193,198, 29,143, 75, 41,165,148,101, 50,222,187,242,202,
+225,254,184,200, 75, 41,164,105,233, 65,232,245,150,123,157,149,115, 78,103, 53,141,102, 64, 8, 8, 88, 91,163, 72, 41,218,156,
+ 67,202,116, 54,218,137,163, 4, 0,168, 40,168,105, 26,195,212,252,208, 89, 90,233,173,159, 88,238, 45, 15,188,222,166,233,245,
+ 32, 84, 24,169, 85,213, 72,163,155,243,163,155, 85, 89, 51,198, 32,132, 72, 65,146,177, 36,206,183,175,238,237, 14, 35, 12, 32,
+ 0, 82,210, 42, 63,220,122,109,255,230,110, 60,207, 24, 99,154,166,122,190,211,237,119,186,107, 39,253,254, 73,168,168,138,162,
+ 90,182, 85, 23, 49,144, 66, 8,209,126,229,180, 78, 38,123,123, 55,247, 12, 83, 95, 90, 25, 40, 88, 93,219, 92,127,224,189,247,
+113, 70,227, 89, 12, 32,220, 56,115,167,215,223, 68,138, 70,234, 76, 55, 77, 70,138,163, 27,175,228,105,194, 24,149, 82, 66, 0,
+ 36,144,117, 89,239,239, 30,189,245,214,246,126, 94,114,164, 98, 8, 64, 52,188,122,243,242,197,201, 56,170,170, 90, 65,200,243,
+157, 78,207,239, 45,175,133, 43,103, 12,183, 91,229,153, 6, 97,149, 37,130, 11, 0,132, 20, 66, 74, 33, 56, 43,211,201,193,205,
+237,104,154,156,190,237,132,229,133, 16, 41, 0, 0, 41,132, 2, 36,198,250, 96,205, 70, 16, 9, 78, 47, 60,251,133,251,159,250,
+164,170,155,179,131,119,210,217,144, 54,132, 11, 1, 36, 4, 82,112, 38,226, 89,122,229,237,237,139, 91,195, 82,112, 75, 81, 52,
+ 93,199, 0,192,183, 94,126, 33,137,115, 46,132, 97,104, 65,232,245, 6,221,206,218, 89,183,187, 94, 87,165,228, 12, 73,218,148,
+149, 4, 18,136, 86, 71,156,214,197,236,240,230,206,214, 65,127,169,115,247,131,247, 42,170, 6, 0,132, 0, 72,201, 1,144, 64,
+ 2,128, 32,130, 10,214, 76,205,244,239,127,255, 39,170,108,150,140,110, 84,101, 46,184, 16,178,213,179,168,202,122,184, 55,190,
+248,198,181, 27,243, 20, 66,184,106,153, 39,214,250,177, 84, 48,128, 96, 62, 75,145,130, 60,223,233,246,130,222,202,106,176,124,
+198,176,195,166, 42, 84, 5, 85,217, 92, 74, 1,100,235, 76, 66,112, 90,198, 71, 7,187,187, 82,130,219,239, 62,167,154, 54, 82,
+ 48, 60, 62, 44, 16, 92, 72, 9, 0, 64, 72, 81, 52, 51, 88, 58, 45,133,136, 14,174,228,241,132, 49, 42,132,104,159,136, 49,158,
+ 68,217,245,203, 55, 95,191,180, 51,167,212, 65,232,100, 63, 60,113,122,229,196,233,213, 75, 59, 51, 12, 0, 48, 12,221, 11,156,
+222,160,211, 93, 57,229,116,215,234,170,226,140, 10, 86,115,193,164,148,173,142,128, 20,164, 41,230,163,189,233,209, 44,232,120,
+186,161, 43,170, 10, 33,144, 66, 0, 0, 4,144, 80, 74, 1, 33, 4, 16, 41,216,244,122, 94,111, 61,157,236, 37,147,155,117, 89,
+ 74, 33,132, 20,173,120,154,154, 28, 29, 78,222,124,253,218,165,131, 9,147,114,213, 54, 79,109, 12, 78,156, 94, 61,113,102,189,
+211,239,239,229, 42, 6, 18, 12, 86,186,221, 65, 47, 92, 57, 99, 56, 29,210, 52, 42,134, 85, 54, 5, 82,130,214,143,164, 20,130,
+215,217,236,224,230,206,141,171,187, 85, 89,159,187,243, 68,127,169,219,118, 21, 8, 97,136, 16, 4, 0, 32, 5, 35,140, 53,195,
+237,110, 0, 0,198, 55, 47, 20,241,164, 45,130,218,167, 18, 92,228, 89,181,179,189,255,218,171,215,246,178, 92, 87,148,219,122,
+193,169, 83,171,235,167, 86, 86,215, 7,253,181, 51,118,103, 69,187, 52,199, 0,200,213,205, 13,167,119, 66, 8, 32, 24, 19,164,
+ 96,130, 75, 41,128,148,160, 85, 55, 35,233,236,112,251,218,206,214,181,189,233, 36,134, 0,170,154,186,191, 31,217,150,182,186,
+222, 13,187,161, 97,217,138,102,171,134,131, 53, 83,183,188,186,136,146,241,205,186, 44,164,224, 66,200,182,254,163,148,197,179,
+228,202,165,237, 87, 47,237,164,132,118, 12,237,204, 90,255,228,153,213,181,205,229,229,245,149, 96,249,140,229,245, 20,172, 67,
+164, 96, 0,128,219, 63, 89, 22,133,105, 89,117, 62,109, 3, 18,144,242,248, 48,229,116,116,112,253,242,206,206,246, 48,141, 11,
+ 8,161, 31,216,166,169,119,250, 94,150, 86, 87,175, 12, 1, 56,116,108,237,212,153,213,179, 15, 60,133,176,150, 28,109,231,209,
+136, 18, 42,229,194,168,132, 20,117,213, 28, 29,206,222,124,253,202,219,251, 19, 33,193,166,239,156, 62,185,188,121,122,117,109,
+ 99,105,176,182,233,245, 79,232,118,128,148,214, 73, 57, 6, 0,112, 70, 85,140,154, 34, 94, 52,220,199,217,160, 46,147,209,193,
+225,245,119,118, 14,246,142,138,162,214, 52,220,237,250,131,213,238,202,106,127,176,186,228,247, 55, 12,167, 3, 21,204, 73,173,
+219, 65, 83,196,179,131,203, 85,150,112, 33,132, 16, 64, 0, 33, 5,231, 60, 79,203,157,173,131,215, 94,191,182,151,230,134,162,
+156, 27,132, 39, 79,175,110,158, 92, 89,217, 24,116, 87, 79,187,225, 26, 54,109,132, 20, 41, 68, 83, 38,121,116,136, 1, 0,172,
+ 41, 4, 39, 66, 2,120, 44, 28, 32, 68, 85,196,195,221,195,235,151,111, 14, 15,166, 77, 67, 77, 83,239,245,131,229,213,222,242,
+ 90,111,176,186,230, 15, 78,234,118,192, 72,195, 41,209, 76, 55,155,236, 38,211,221,166,170, 91, 1,183,206, 77, 9,155,207,146,
+171,111,111,191,126,121, 39, 37, 52, 52,180,179,235,131, 19,167, 87,215, 55,151,151,214,150, 58, 43,103, 44,127,128, 53, 3, 64,
+ 36, 57, 47,179,233,193,181,215,102,227, 49, 6, 0,112, 90, 46,158, 9, 2,208,154,112,145, 30,236, 28, 94,187,178,115,116, 56,
+ 35,132,217,182,209, 31,132, 43,107,253,165,213,222, 96,117,205,237,109,170,186, 93, 23,177,130,117, 5,171,243,131,203,121, 52,
+166,148,181, 33, 83, 2,217,246, 93,163,225,180,245, 38, 41,229, 9,223, 61,117,106,121,243,228,202,202,250, 96,105,109,205, 27,
+156, 52,156,142,130, 53, 0, 0,167,164,136,134, 59, 87, 94, 31,237, 79,234,138, 96, 0, 0,163, 68, 10, 41,193,194,116,234, 34,
+ 63,216, 61,186,126,101,231,104, 52,167,132, 57,174,209, 31,116,150,215,250,203,171,189,254,234,154,211, 89, 67, 88, 43,179,185,
+110, 58,156, 53,243,131, 27, 69,154,112,198, 91,217, 10, 41, 5, 23, 89, 90,236,108, 29,188,254,198,245,131, 44, 55, 20,124,122,
+ 16,158, 60,189,178,126, 98,121,101,117,208, 91,221,116, 58,235,154,229, 34,132,165, 20,156, 52,209,232,250,206,213, 75,211,163,
+168,110,136, 20,178,181, 33, 34,219,243, 8, 94, 85,229,112,119,124,253,234,238,228,104, 78, 8,115, 28,179, 55, 8,151,215,122,
+ 75, 43,221,238,210,178,237, 47, 67,168, 84,121,164,155,110, 83, 38,241,120,187,204, 75, 33,218, 39,145, 66, 8, 74, 88, 52, 79,
+174, 92,186,249,250,149,221,156,208,142,161,159, 93,239,183,246,187,180,218, 15,151, 79, 89,193, 64,213,108, 0,161, 16,156, 86,
+217,120,231,173,221,173,157, 56, 74, 40,229,109, 99,220,170,140,180,186,175,171,230,112,255,232,250,213,189,241,104, 78, 41,179,
+109,163,215, 15,150, 87,122,253,165,110,103,208,183,131, 1,128,176, 41, 34,213,244,234,108, 22, 79,246,234,162,106,147, 65,235,
+154, 77,221, 28, 29,206,222,186,112,253,210,193, 68, 72,185,233,187,167, 79, 46,111,156, 92, 89, 89,239,247, 87,150,252,193, 9,
+195,238, 98, 77, 7, 0, 8, 70,171,108, 58,188,126, 97,184, 63,206,211,130,115,206, 89, 27, 35, 36,134, 16,126,229,185,183, 36,
+ 0,156,242, 60, 43,230,211, 36,207, 75,198,132,166, 97, 34, 16, 43,104,122,152,236,101, 84,223,203,145,178,199, 25, 81, 84,141,
+147,166, 46, 19, 74,152, 4,199,122,150,146, 81,158, 38,249,104, 52,155, 21, 53, 82,244,208,210,213,208, 77, 16, 22, 81, 57,101,
+115,125,204, 21, 45,106, 67,168, 16,156,148,105, 50, 27,231, 89, 73, 41,107, 35, 21,144, 64, 8, 49, 73,170,239, 51,188,177,237,
+205,190,127, 14,243,212, 83, 79, 33, 8,225,247,149,128,190,191, 58,215, 63,158,214,249, 94, 46, 69, 81,222,247,232,121,203, 52,
+158,253,206,197, 44, 47,255, 29, 28,200, 52,244,191,247, 95,124,230,209,135,239, 95, 91,238, 36,179,225,248, 96, 52, 29, 71,105,
+156, 63,126,251, 73, 70,232,193, 36,250,236,239,125,189,125,231, 39,127,240, 3, 63,253,137, 39, 7, 29,151, 54,116,239,112,242,
+242, 27, 87,126,231, 75,207, 79,163,244,123,109,165, 55, 55, 55,119,119,119,255,148,119, 60,254,232,131,191,242,191,252,247,109,
+ 93, 90,166,147,209,238,245,241,225, 52,158,167, 85,217,112,206, 33,128,166,109,120,161, 35,165,252,226,243,151,255,155,191,251,
+215,203,116,198, 56, 21,140, 49, 70, 25,227,140, 80, 66,104, 93,145,203,215,118,254,249,255,241,197,209, 52,254,211,141,250,207,
+144,208,205,119,158, 7, 0, 74, 8, 5, 35,209,225,245,131,237,155,211, 73, 84,100, 5, 99,194,178, 12, 47,116, 52, 93, 51, 45,
+195,243,157,149,179, 15, 62,242,254, 15, 18, 82, 33,172,169, 8,113,164, 64, 4, 17, 98, 82,136, 38, 43, 38,163, 25,203,155,159,
+249,208, 99,140,243,127,250,219, 95,249,243,168,236,231, 62,243, 87,254,238,223,254,121, 9, 32, 0,146,213,213,120,231,173,131,
+221,189,104,154,212, 85, 3, 33,234,246,220,160,235,217,182,101,251,158,110,117,131,193,122, 83,198, 0,200,182,192, 18, 28, 34,
+ 0,164, 16, 53,173,102,147,120,239,230,240,104, 56, 75,210,178,162, 76, 8,241,233, 15, 63,254,249,175, 61,255,111,113,160,219,
+207,172,255,253,255,242,239,124,224,253,143, 67,132,160, 4, 77, 25, 31, 94,127, 99,184,127, 24, 71, 25,105, 40,214, 84,215,181,
+186,253, 48,236,117,157,112, 25, 27,158, 97, 57, 77,153, 0, 0, 17, 68, 18, 33, 40, 21, 36,165, 96,164, 44,242,195,189,241,206,
+214,112, 60,154,165, 69,205,133,208, 20,164, 25,170,174,169,127,249, 7,158,252,220,211,207,253,217, 7,250,131,223,252,159, 29,
+ 84,157,184,231, 41, 85, 55, 0, 0, 82,202, 50,155, 12,175,191, 62,218,159,164, 73,198, 40, 51, 12,205, 13, 28,223,119,123, 43,
+ 43, 94,111, 19, 40,134,174,107,164,202,164,148, 80, 74, 9, 17, 4, 8, 66,193, 56,205,226,104,127,103,184,115,227, 96, 50,142,
+139,170, 1, 82,186,166,238, 7,142,174,107,166,109,156, 54,180, 78, 63,248,167,159,255,194,159,120,160,127,242,139,255,224, 67,
+143,221,149, 76, 15, 78,156,255, 32,198, 90,219, 83,150,233,228,224,234,171,163,131, 73,150, 22,156, 9,221,208,252,192,237,244,
+194,176,191,236,246, 54, 5,196,134,174,147, 42, 3, 64, 66, 0, 36,132, 64, 2, 0, 32,167, 36,157, 79,118,182, 14,118,183,134,
+211, 73, 84,213, 4, 35,104,219, 86,208,241,252,192,246, 2,215,113, 45,195, 50,238, 60,127,246,199,126,252,163, 37,131,152,231,
+179,113,116,253,198,222,223,255,103,191, 14, 0,128,167, 79,159,254,194,111,253, 82,157, 28, 84,233,108,227,238, 15,168,154, 6,
+ 36, 0, 64, 22,241,209,222,149, 87,143,134,227, 44, 43, 4,151,154,174,122,158,221, 29,116, 58,203,155, 94,111,147, 9,160,235,
+ 58,169, 50, 41,120, 75,111, 74, 33,132, 96,180, 41,226,201,112,251,218,238,238,141,131,233, 52,169, 27,162, 40, 74,224,219,157,
+158,223,118, 90,158,239,216,158,107,121, 61,172,154, 8, 43,201,120,247,104, 56, 74,162,172, 42,235,186,108,126,251,197,235,248,
+231,127,238,103,155,120,159,148,201,250, 93, 79,105,154, 46,161, 4, 64,150,201,244,224,218,107, 71,195,113,158,149, 82, 72,221,
+208, 60,223, 14,123, 65,103,229,132,223, 63,201,152, 48, 12,157, 84,217,162, 57,105,243, 61, 16,156,212,233,108,180,187,181,191,
+187, 53,156, 78, 19, 66,168,138,177,239,219, 75,107,189, 32,244,250, 75,161,235,123,182,215, 53,221, 46, 68, 10,194,106, 54,221,
+137,231, 17, 33, 20, 41, 72,213, 84, 41,165, 4, 0, 55, 69, 76,155,114,229,182,199,116,221, 4, 0, 64, 9,235, 34, 58,188,241,
+250,209,112, 92,228,165, 16, 82,215, 53,207,119, 58,253,176,179,114,210,235,109, 50, 46, 76,203,106,202,180, 61, 77,219,188, 1,
+ 32, 57,105,210,249,225,222,214,254,206,214,193,108,146, 16, 66, 85, 21, 7,161, 59, 88,233,118,251,225, 96,185,227,119,122,150,
+191,164,219,190, 96, 84,193, 90, 17, 13,227,233,184,169, 27, 32, 1, 86, 20,129,133,224, 8, 0,128, 37,103,157,245,187,117,211,
+106,169, 34, 82,167,135, 55,222, 24, 29, 28,101,105,201,185,212, 52,236,250,118,167, 31,116, 86, 78,250,131, 77,198,128,101, 59,
+237,105, 22, 85,153,144, 64, 74, 78,155, 60, 58,220,191,121,176,179, 61,156,141,147,134, 80, 85,197,157,174,183,180,218,239,244,
+252,222,160,211, 25, 44,219,157, 85,205,244, 88, 83,171,186, 85,165,147,104,114, 80, 87, 13,144, 18, 33, 40, 16,132, 16, 52, 53,
+133, 0, 96, 43, 88,182,253, 46,144, 16, 64,192, 72, 57,190,121,113,180, 55, 76,227,156,115,174,170,170,227,217, 97, 39,232, 44,
+111,250,253, 77,164,232,166,134, 73,149, 9,206,142, 59, 73, 33,128,224,140, 20,241,209,112,255,240, 96,239,104, 62, 77,235,134,
+ 96,140, 92,207, 26, 44,119,251, 75, 97,167, 23,118, 6, 43, 86,176,100, 88, 62,107,106,205,176,154, 50,142,198, 59,117, 85, 73,
+ 41, 33,132,109,185,209,212,100, 54,142, 0, 0, 24,171, 26,148, 82, 66, 40, 72, 51,221,187, 52,220,217, 75,146,140, 81,134,177,
+ 98,187,102,216,241, 58,203,107, 94,239,132,170, 59, 82,114, 90, 23,130,145, 22,123, 0,173,202, 24, 45,147,241,100,116,132, 85,
+101,253,196,114,150, 20,140, 49,211, 52,186,253,160,211, 11,250,203,221,160,191,238,118, 86, 84,211,165, 77,169, 26, 22, 37,117,
+124,180, 85,151,165,224, 18, 66,216, 34,136,148,208,217, 36,190,185, 55, 1,160,197,169, 33,148,156, 70,163,107,195,155, 91,241,
+ 60,165, 13, 83, 20,197,114,204, 32,244,194,193,138,215,219, 52,108,191,200, 83, 21, 99,206,154,133,166,128,144, 82, 8,193,170,
+124, 54, 62, 56,160,132,134, 29, 63, 8,188,229,181,193,225,193,116,119,107,127,176,220,233,246,131,160,183,226,117,215, 53,211,
+165,164,194,170, 33,165, 76,199, 91,101,150,113,198, 1, 88,176,192,140,241,120,158,238,238, 30, 29,230, 5, 80,108, 44, 37, 16,
+130,101,211,189,195,237,171,209, 52,105,106, 2, 17, 52, 45,195, 15,220, 78,175,231,247, 55, 13,167, 19,205,142, 92, 47, 32, 85,
+190, 64, 66,142,129,162,186,136, 39, 7,251,241, 60,221, 56,189,166,233,134,162, 96, 9,228,201,211,198,218,198, 96,127,239,200,
+239,118,156,112, 85,179, 60, 78, 27, 8,145,130,113,116,120,163, 72,231,140, 49,121,124, 28,193,121,158, 22,251,187, 71,187,243,
+148, 45, 2,163,148, 85, 58, 61,188,121,105, 54,137,171,170, 1, 64, 26,134,225, 5,118,216, 11,189,254, 9,211,235,167,241,212,
+ 11, 58,164,200,164,224,224,184,247,146, 82,144, 42,155,143,246,199, 71,179,229,213,190,101,123, 8, 99, 8,144,144, 2, 33,140,
+176,122,250,236,137, 56,138, 13, 55,214, 76, 87, 8,174, 25,118, 54,221, 43,162, 17, 37, 20, 72, 0,164, 68, 0, 80, 33,202,178,
+ 62,220,159,108, 13,167, 21,231, 42, 66, 13, 0,152,145,106,124,243,173,201,209,172,200, 43, 41,133,110,232,174,103,133,157,192,
+239,159,176,131, 37,218,212,126,208,109,202, 84, 8,118, 11,207,147, 82,176,166, 72, 38, 7,163,131,177,237, 88,157,254, 0, 97,
+ 13, 32, 4,165, 68,178, 13,215, 16, 42,234, 96,117, 51,159, 13,129, 96,189,205, 59,203,100,156,206,246,155,186,106, 9, 91, 0,
+128,144,160,169,201,244, 40,218,190, 57,138,106,130, 16,236, 25,122,209, 72, 84, 36, 71, 71,135,227, 60, 45, 57,231, 88, 85,109,
+199,244, 67,207,239,175, 58,225, 50, 64,138,170,234,164,202, 57, 35, 45, 24,210,254,227,180,206,162,209,193,222, 8,171,202,198,
+169, 77,164,106, 16, 42,139, 8, 9,110, 33,122, 10, 86,245,254,250, 57,175,183, 70,202, 52,155,236, 54,101,222, 66, 51,237,123,
+ 40,101,241, 60,189,121, 99,184,159,230, 18,128, 64, 83,151,186, 62, 0, 0,229,105,158, 70, 57,163, 84, 81, 20,203, 50,188,192,
+ 9,122, 75, 78,103, 13,235, 22, 35, 53,103, 53,163,245, 2,213,147, 66, 72, 33, 57,173,178,217,104,239, 80, 8,177,126, 98, 13,
+107, 38, 2, 10,132, 45,152, 11,160,104,195, 25,104, 79,164,153, 14, 82,112, 54,221,173,138,132,115, 33, 5, 0, 18, 72, 9, 56,
+227, 89, 90,236,109,143,182,142,102, 76, 74, 11,227,101,223, 93, 89,237, 74, 0, 80, 93, 53, 77,211, 0, 8, 13, 83,115,125, 59,
+232,116,220,206,154,110,249,241,116,164, 40, 10,109,170, 69, 68,150,162,157, 4,170,203,120,122, 56, 44,242, 98,243,244,134,225,
+248, 8, 33,128,128, 92,160,238, 66, 2, 1, 32,128, 16, 33,172,106,166,167, 26, 78, 17, 29,150,233,140, 51, 6,110,225, 78, 92,
+ 84,101, 61, 58,152, 92,223, 29,101,148, 97, 8,151, 93,107,105, 57, 92, 94,235, 3, 9, 16,163, 92, 74,160,105,170,227,218,126,
+232,185,221, 53,221,233, 20,105,236,133,221,150,126, 7, 66, 72,193,219,211,208,166,136,199,135,121, 86,174,108, 44,233,166,133,
+ 16,146, 0, 44,128,226,133,201, 75, 4,160,162, 40,134, 29,152, 94,175,136, 71, 69, 60,162,164,121, 23,202, 16,162,105,154,217,
+ 36,218,190,113, 48,206, 43, 4, 96,223, 50,150, 6,193,242,218,160, 55, 8, 1, 0, 72, 2,137, 49,182, 29,211, 11, 28,175,179,
+108,122,125, 9,164,229,122,180,202, 5,167, 64, 10, 41,120,155,178, 56,107,138,232, 40,141,179,160,227,155,150,133,160,210, 34,
+ 74, 18, 0, 40, 23,186,128, 8, 66,132, 20,213,112,194,213, 58,143,242,217, 65, 83, 87,199,237, 63, 0, 18, 48,198,211, 56,223,
+217, 58,188, 57,141,185,148,190,142, 87,122,193,202, 90,127,105,181, 27,246,186, 0, 72,140, 16,180,108,195,245, 29,175,211,181,
+195,101,172, 25,164,174, 5,108, 90, 67, 6,199, 25, 75, 48, 86,103,243,201,209, 84, 81, 21, 5, 35, 8, 17,128, 0, 74, 1, 0,
+148, 64,182,192, 18, 0, 0, 66, 69, 81, 13,127,112,138,145, 42,159,237,215,101, 38,249, 45, 52, 66,114, 33,138,188, 28,238,141,
+183,118,143, 42,198, 45,140, 87, 66,111,176, 28, 46,173,244,130,110,224,245, 54, 0, 0, 72,197,216,113, 45, 63,240,220,112, 69,
+ 51,221,116, 62, 81, 20,200, 72,117, 92,226,112, 41,133,224,188,169,210,217,248,104,116, 48,169,139, 26, 2, 8, 90, 91, 16, 92,
+ 72, 46,133,132, 82, 0, 0, 16, 66, 10,214,156,112, 21, 42, 74, 54,219,171,178, 57,231,108,113, 22, 33,165,144,164, 34,211,113,
+180,181, 53,156, 86,141, 2,209,192,177,150,150, 58,253,229,110,216, 11,188,112,201,176, 3, 0, 0, 86,117,213,245,109, 39, 92,
+ 54,156,176, 44,114,199, 11,142,211,167, 92,132, 65, 33, 24,169,178,249,228,112,239,232,104, 52, 21, 66,216,174,141, 85,140, 56,
+ 65, 64,131, 16, 33,132, 36,128, 72, 81, 16,214, 76, 39,212, 45, 55,155, 31, 22,201,132, 30,163, 60,237,173, 40,161, 73,146,238,
+108, 13,247,102,169, 0, 96, 96,232,203,131,160,191,220,233,245, 67, 47, 12, 45,127,160,234,182, 4, 0,235,154,234, 6, 29,211,
+235, 9, 9, 76,203,166, 85, 46, 56, 59,230,191, 4,144, 82,112, 90,101,179,163,195,241,104, 56, 77,230, 57, 66, 8,171,218, 18,
+ 99,157,110,128, 53,128,176, 42, 37, 82, 20, 5,169,134,170, 91,186, 29,214,121, 82, 68, 67, 82,151, 11,236, 84, 74, 32, 37, 99,
+188, 40,170,131,221,201,214,222,164,226,194, 81,149,229,174, 59, 88,238,244, 6, 97,216, 11,156,112, 69, 51, 61, 69,213, 0, 0,
+ 88, 51,116,203, 31,168,154,217,212,149,100,148,211, 70,182, 8,234, 49, 39, 71,170,108, 54,153, 30,238, 79,230,179,180,174,155,
+ 50,175,242,188, 44,111, 52, 89, 90, 46,175,245, 29,199, 70,134,174,104,166,170,219,170, 97, 75,193,243,104,191, 46,178, 54, 72,
+220,210, 87, 83, 55,211,163,249,246,214,193,172,174, 85, 4,151, 61,123,176,212,233, 14, 58,157,110,224,117,150, 13,167,131, 53,
+ 3, 66, 4, 0,192,170, 97,105,166, 27,205,198,126,216, 37, 85,218, 34,168,224,216, 73, 25,169,179,249,100,180, 63,153,142,163,
+170,172,165, 4, 16, 33,172,192,154,240,253,253,249,108,154,118,186,110,183,231,123,129, 23, 44,157,196,184,147, 39,163, 42,157,
+115, 78, 23,135, 17, 82, 8, 73, 40, 77,230,217,206,214,225,238, 44, 5, 0,116, 77, 99,105, 16,246,150, 58,221,158,239,117,187,
+166, 63, 80,117, 27, 33,101,209,117, 96,213, 4, 0,250, 97,151,214,109,250, 4,239,214,166,156, 86,121, 52, 62,154, 29, 29,206,
+210,164,224, 92,152,166,102,219,134,237,152, 30, 86,226,184,164,140,207,102, 25,132,112,245,212, 57,183,187, 81,101,179, 50, 30,
+ 83,218, 72, 46,165, 20, 45, 49,196, 25, 47,179,234, 96,111,188,181, 63,174, 56,119, 84,188,220,245,122, 75, 97,183, 31, 4,221,
+192, 9, 86, 52,211, 67, 88,133, 0, 74, 41, 0, 0, 88,193,106,153,167,134, 97, 8, 70,133,148, 16, 28,187,186, 20,180,206,163,
+217,124, 52,156, 70,243,148, 16,138,177, 98, 59,182, 23,184, 94,224,116,186,193,201, 51,184, 21,193,192, 53, 0, 0, 32, 0, 73,
+ 68, 65, 84,169,106,211,113,123,235,103,109,127,137,209,170,136, 15,155, 42, 63, 70, 29, 91,142, 79,214,117, 51, 62,154,111,109,
+ 29, 76,203, 26, 67,212, 42,171, 55, 8,195,174,231,134,203,134, 19, 98, 85, 71, 16, 74, 41, 89, 83, 66, 0,112, 89,100,150,109,
+147, 42, 95,240, 44, 82, 66, 32,165,148,156,145, 34,141, 39,163,217,116, 28, 87, 85, 13, 32, 48,109,221, 11,236, 32,116,253,192,
+ 13,250, 43, 78,184,162, 26, 14, 99, 68, 81, 84, 0,100, 62, 63,172,243,152, 51,254,174,229, 8, 73, 9,141,163,108,103,123,184,
+ 59, 75, 37,144, 93, 75, 91, 26,132,221, 65, 24,118,125, 63,236,153, 94, 79,213,173, 86, 89,130,179, 34, 25, 3, 0,144,105,217,
+164, 46,229,130,112,105,169, 49, 33, 56, 35, 85, 22, 77,226,241,104,158,165, 57, 99, 66,215, 53,215, 93,156,198, 11, 2,219, 31,
+232,118, 0, 32,144, 66,168,154, 81, 38,147, 42,157, 16, 66,110, 21,255, 82, 74,206,121,150, 21,195,221,163,173,189,113,195,185,
+173,226,149,174,223, 27,132,221,158, 31,132,190, 21, 44,233,166,135, 20, 21, 64,216, 86, 87,209,104, 11, 0,136, 91,106,236, 56,
+ 3, 44,158,141,179, 38, 79,147,201,209, 60,154,167, 77, 67, 21, 5, 89,182,225, 5,142, 23, 56,110,224,216,126, 95, 51, 93, 41,
+ 37,169, 74,221,114, 72,157, 21,241, 97, 83,151,173,142,142, 79, 35,170,170,153, 30,205,183,182,135,179,170,198, 8, 45,123, 78,
+127, 16,118,251, 65,208,241,221,112,201,112, 66, 69,211, 1,132, 82, 74, 78, 73, 54,223,159,140,166, 0, 0, 44, 56, 21,156, 75,
+ 32,161, 92,152, 15,144,162, 41,139,249, 52,153, 78,162, 34,175,164,148,134,161,185,174,229,249,142,231, 59,142, 23,234,118, 8,
+ 21, 76,235, 82,193, 24, 0, 80, 68,163, 42, 79,216,119, 43,139, 11, 74, 72, 18,165, 59, 91,135,123,179, 84, 0, 56, 48,245,165,
+ 65,208, 27,132,157,174,239,133, 97,171, 44, 8, 23, 12, 80,157,207,103,135, 59, 89, 82, 0, 8,208, 34, 81, 75, 33, 36,147,156,
+ 3,201, 25,169,243, 52,155,142,163, 36,206, 73,195, 20, 69,177,109,211,243,109,207,183, 29,207, 49,221, 46,214, 12,206, 8,103,
+ 4,171, 70,157, 78,139,116, 66,201,194,207, 91,230,144, 49,158,167,213,254,238,120,107,127, 82, 51,238, 96,101,185,235,245, 6,
+157, 78, 47,240, 59,158, 19, 44,233,150,167, 96, 29, 64, 8,164,164, 77, 17, 31,109,207, 39, 73, 93,214, 0, 0, 44,133, 0,146,
+ 47,218, 79, 41,165,224,117, 93,204,103,201,108, 22, 87,101, 13,128, 52,116,213,241, 76,199,115,108,215,182,188, 80, 51, 93, 9,
+ 32,169,114, 77,183, 24,173,242,248,176,169,170, 91,170, 2, 2, 8, 41,235,170, 25, 31,205,182,183,134,179,170,193, 8, 46,123,
+ 78,191,109, 66, 58,174, 27, 14,116, 39,196,154, 1, 32,132, 64,114, 78,202,104, 52, 25,141,242,188, 96,156,183, 69,190, 16,124,
+209,148,180,206,149,167,197,108, 18,165,113, 65, 8,197, 24, 91,182,225,184,182,227, 89,142,107, 27,118,128, 20,149,145, 26, 0,
+137, 20, 37,155, 29,214, 69,198, 25,107,179, 68,203,134,146,134,196,243,116,103,107,184, 23,181,158,101, 14,150,194, 94, 63, 12,
+187,158, 23,132,166,215, 83, 13, 27, 34, 5, 2, 33,185,104,138,100,118,184,157,204,211,166,166,109,149,135,165,148, 66, 48, 0,
+ 1, 20, 64, 72,209, 84, 85, 60, 75,230,179,180, 44,106, 41,129,166,171,150, 99,186,174,237, 56,150,233,120, 88, 51,165, 20,180,
+ 46, 52,203, 35,101, 82, 38, 19,210,144,118,244,131, 75,177,200, 89,105,121,176,119,180,125, 48,173, 25,119, 53,117,165,235,247,
+251, 65,216,245,189,192,179,131,129,102,122,138,162, 65, 9,133, 20,156, 84,201,100,103, 58,158,151,101,221,150,128,237,129,132,
+ 20,162, 45, 40, 24,165, 89, 86,204,166,113,154,228,140, 49, 5, 43,166,101, 56,174,101,187,150,229,152,186,233, 41,138, 74,155,
+ 18, 33, 4,129, 40,226,163,186, 42, 5,231, 92,138,182,179, 17, 66,212,101, 61, 30, 71, 91,219,135,179,170, 81, 17, 90,246,157,
+222, 82,208,233, 7, 65,232,122, 65,215,112, 66,172, 26, 16, 66, 9,132,224,180, 72,198,211,225,126,150,228,140,178, 54, 94, 44,
+250, 50,113,156, 49,154,186,137,103,233,124,154,180,226,209,117,213,118, 76,199,181, 45,199, 52, 44, 87,209, 45, 46, 56,167,141,
+102,121, 77, 17,151, 69,204, 40,227, 45,115,210,114, 83, 13,141,163,108,119,251,112, 63,202, 0, 0, 93,203, 24, 12,130, 94, 63,
+ 12, 59,158, 23,248,166,215, 83,117, 27, 41, 88, 74, 0, 0, 39,101, 58, 31,109, 71,243,180,174,155, 69, 34, 22, 2, 0,128,133,
+ 20,109, 10, 99,140, 23, 11,241, 20,132, 48, 85, 85, 76,211,112, 92,203,118, 12,203, 50,116,211, 69, 72, 97,164, 70, 10, 6,130,
+151,201,132, 84, 13,231,139,182, 70,112,201, 57, 47,242,242,240, 96,178,125, 48,105, 56,119, 84,117,185,235,117,251, 97,216,241,
+252,192,181,252,190,110,249, 10,214,164, 4, 0, 10, 70,234,108,186, 55, 61,154, 20,121,185,168,215,197, 66,101,168,237,254, 4,
+ 23,164,110,226, 40,139,102, 73, 85,213, 0, 0, 77, 87,109,199,180, 29,211,178, 77,195,182,177,102, 72, 33, 56,105, 20,172,213,
+ 69, 84, 21, 57,165,183,170, 65, 33, 4,111,106, 50,155, 38, 59, 55, 71,243,186,193, 16, 45,251,118,175, 31,118,187, 94, 16,186,
+ 78, 16,154, 78, 71,209, 12, 8, 33,128, 82, 50, 90, 37,227,201,225,126, 26, 23,148, 48,177, 24,191,144, 66, 8, 8, 0,190,190,
+ 55,105, 59,135,166, 38,243,121,146, 68, 89, 93, 81,136, 96, 89,137, 42, 42,103,124,186, 51,175,140,155,177,170,239, 11,193,129,
+ 4, 72,193,117, 17, 55,117, 45,223,173,221, 1,231,162,169,155,233, 56, 62, 76,106,174,232,154,170, 84, 88, 31, 22, 52,223,143,
+246, 82, 98,238, 21,170,113,136, 20, 13, 66, 32, 37,224,180, 41,147,113, 28,197,117,213,220,154, 6,105,115,223, 98, 40, 46,138,
+162, 56,142,191,223,104,161,127,183,151,148, 50, 8,130, 48, 12, 49, 0, 32, 73,146,189,189,189,255, 32,148, 63, 58,228, 25,134,
+ 33,250, 15,130,248,247,140,223,252,255, 9,223,250, 61, 50,162,129,239,134,129,119,234,196,218, 3,231,111, 63,177, 62, 56,119,
+ 98, 89, 85,100, 93, 86,121, 94,214,101, 93, 85, 77, 83, 55,156,137,162,172,223,217, 62,120,246,213, 75,251,227, 89, 85,147, 63,
+201,224,187,161,103, 91,134,101,234, 8, 66,198,120, 81,213, 85, 77,146,172, 96,140,255,251, 33,160,187,239, 56,243,153,255,248,
+167, 63,246,225, 39, 5,151, 8, 43, 16, 66, 41, 56,163, 85,153,206,139, 44, 42,210, 98,180,191, 95, 23,117, 85, 18,210, 16, 66,
+ 41,103,156, 83, 46,128, 16, 28,156, 90,234,157,254,225,167, 16,132,148,138,225, 56,250,252,211,207,101, 69, 5, 0,248,137, 31,
+253,216,127,254,215,126, 74,195, 66, 50,194, 57,227,188, 5, 98,196,241,213,118, 71,156, 49, 70, 40, 31, 29,205,191,241,194,133,
+175,189,112, 49,201,138,191,176, 72,244,212, 83, 79,221,188,121,243, 79,167,164,255,148,235,161, 7,238,249, 91,255,217,127,250,
+240, 67,247,170,170,182, 88,237,146, 64, 74, 65,235,178,202, 38, 89, 52,205,146, 52,207,202,170,172,155,138, 52,132, 48,202,133,
+ 16, 64, 2, 69, 65, 88,197, 88, 85, 16,130, 72, 81, 76, 83, 51, 45,211, 52,117, 77, 87, 21,221,246,251,107,166,105,113, 86,211,
+166,108,201,184, 5, 22, 45,132,120,183, 82,225,139,246,145,115,198, 56, 37,180,105,104, 93,214, 85,217,212, 85,221,212, 36, 78,
+139,107, 59,195, 47,189,120, 49,254,115,201,107,115,115,243,228,201,147,127, 78, 11, 58,127,207, 29,191,248,223,254,189,123,238,
+190,131, 49,142, 16, 90,172,188, 73,201, 24,105,242, 40,159,143,146,104,154,165, 69,153, 87,117,213,144,134, 50,198,132,144, 16,
+ 66,221,208,116, 93,213, 13,205, 48, 52, 85,215, 84, 21,171,154,170,170, 24,171,154,162,106,166, 55,112,195, 62,167, 13, 35, 21,
+167,149,224, 2, 33, 12, 32,146, 72, 17, 82, 0, 46, 4, 18, 80,112, 36,133, 20,156, 11,196, 25,147,140, 55, 13, 41,243, 42, 75,
+139, 52,206, 23,127,180, 38,132, 48, 66,153,165,168, 63,250,216,131, 0,130, 23,223,185,113,121,119,248,255,185,139,233,186,246,
+207,254,209, 63,252,248, 95,250,136, 4, 0, 34, 8, 0,196, 90, 75,208, 51, 70,202, 50, 25,167,179,195, 52, 74,242,172, 44,139,
+170,105, 8, 35,140,115, 1, 0, 80,176,162,171,216, 52, 13,199, 53, 13,203,208, 84, 85, 51,116,221, 48, 85,195, 86,117, 11, 41,
+134,102,121, 24, 99, 70, 42,214,148, 66,176,150,149,128, 8, 0, 9,128,132, 64, 64, 4, 17,128, 2,112, 46, 33,228,140, 8,206,
+ 73, 93, 23, 69,149, 39,121, 28,101, 73,148,229, 73, 81,148,117,221, 16, 66, 57,227, 92, 72, 41, 0,132, 82, 42, 8, 73, 32, 31,
+187,243,204,163,119,156,121,250,213,183,134,179,232, 47, 82, 64,239,123,236,193, 79,253,224, 19,203, 29,167, 55, 88, 57,115,247,
+195,166,229,112, 33, 90,238, 15, 2, 0, 32,224,140,145, 42,201,163, 81, 58, 27,165,113, 90,228, 85, 93,213,164,166,140,243, 91,
+ 38,163,105,170,102,104,134,169,155,166,110,217,134,229,250,186, 29,232,166,139, 53,139,113,169,235, 38,132,146,145,154, 54,185,
+ 16, 2, 0,137, 32, 20,168,229,219, 17,148,176,133,153, 65,203,103, 72, 78,234,170,174,202, 60,205,147, 40,139,231,105, 26,231,
+121, 86, 86,101, 83, 55,148, 50,198,219, 22, 74, 81, 84,140, 84,140, 49, 86,212,246, 27, 4, 21, 69,249,171,235,253,183,183,246,
+127,231,155, 47,253,191, 18,208,163,143,220,255,153,159,253,201, 71,239,191,173,202,102,121, 26,235, 78,111,253,220, 3,120,193,
+226, 3, 5, 35, 0, 0, 16,146,115, 82, 23,113, 62, 59, 72,102, 71, 89,146, 23, 69,217, 84,132, 16,202,185,104, 9, 93, 77, 83,
+117, 67, 51, 76,189,253,106, 88,150,229,120,186, 29,234,150,167,168, 38, 23, 18,169,170, 9, 33, 37,149, 96, 20, 72,113, 28,193,
+ 32,144,139, 23, 8, 32, 1, 4, 4, 72, 2,198, 89, 67,235,162,204,179, 44, 41,226, 40,141,102, 11,209,212, 53, 33,132, 82,206,
+129, 4, 8, 33, 29, 43,170,138,117, 93,181,108, 67, 55, 52,140,177,170, 98, 85, 87, 13, 67, 83,176,130, 20,116,199, 61,167,127,
+242, 83, 31,152,199,217,239, 62,253,194,206,112, 90, 55, 76, 85,149,126,215,239,248, 54,105,216,120, 22,237, 13, 39, 81, 90,180,
+197,244, 66, 64,237,171, 51,167, 79,252,202,103,255, 73, 63,180,202,116, 74,171, 44,153,238, 99,221, 61,251,224, 71,177,170,201,
+182, 11,129, 0, 2, 9,132,100,140,212, 69,148,207,246,227,233, 81,154,228, 85, 81,181,107,197,139,246, 14, 33,172, 42,186,174,
+234,134,110,217,166,229,152,166,229,232,182,111,216,129,102,186, 88, 51, 72, 67,177,102,168, 82, 48,210, 16, 78, 90, 28, 19,194,
+ 91,204, 43, 0,139, 81, 13,185,128, 74, 89, 67,171,188,200,178, 52, 78,231,179, 36,154,165,121,154,231, 89, 89, 85,132, 80,198,
+133,104,233,126, 93, 83,117, 93, 53, 76,205,178, 12, 85,215,116, 67,179, 29,203,180,116, 77, 87,117, 93, 85, 53, 77, 85,177,166,
+105,170, 97, 98,205,130, 8, 63,249,193, 15, 65, 4, 41, 41,139,116,150, 37,121,153,151, 85, 89, 55, 53,169, 27, 74, 9,141,227,
+236, 15, 95,186, 34,165,132, 79, 62,249,228, 71, 63,252,190,159,249,137,143,147, 42,169,178, 57,109, 10,206,136,102,134, 75, 39,
+207, 99, 77,111,149,185,144,141, 20,156,209, 99,209,140,210, 36, 43,243,186,174, 27, 74, 91,132, 10, 32, 5,169, 24,171,186,106,
+ 26,154, 97, 25,150,109, 90,142,107,184,161, 97,119,116,211, 83, 84,189,174,107,195, 48, 0, 16,140,212,130,179,150,197, 2,199,
+125,106, 11,255,221, 98,210,132, 96,156, 18, 82,229,101,158, 36, 81, 18, 77,147,249, 44, 78,227,162,200,203,170, 34,140,113,206,
+ 57,128, 80, 65, 72,215, 85,211, 92, 40,195, 48, 53,195,208, 44,199, 50, 45, 93, 55,116, 93,215, 52, 93,215, 12, 75, 51, 28,172,
+ 91, 72, 81,165,148, 8, 33, 0, 17,107,202, 50,157, 20, 73, 84, 20, 85, 83, 53, 13,161,140,114,198, 24,103,156, 49,193, 57,123,
+251,230,244,205,221, 25, 6, 0, 88,154,204,103,187,164, 46, 56, 35,138,106, 47,159,121, 68, 55,109,176, 96,190,160,108,199,152,
+ 57, 37,101,154,205, 15,226,201, 48,141,147, 34,171,234,186,161,132,113, 46, 32, 4, 8, 41,170,170,168,186,106, 24,186,105, 25,
+150,109,152,142,103, 58,161,238,132,186,233, 41,170,209, 84, 21,194,194, 52, 77, 70, 42,193,105, 27,107, 90, 68, 30, 8, 9, 22,
+ 11, 23, 11,142, 71, 8, 46, 88, 67,234,188,204,226, 52, 78,231,211,116, 62,141,227, 40, 43,242,178, 42, 27,198,184, 16, 2, 66,
+168,105,170,170,169,166,169,217,182,233,250,142,229, 24,134,161,219,142,105,217,150,110,106,154,110,104,186,165, 26,142,102,216,
+ 8,107, 16,162,246,183, 16, 82, 24,171,171,116, 92, 36,179,178, 40,155,154, 80, 66,185, 16, 8, 34,172, 72, 0, 49,130, 8, 33,
+206, 57,108,231,222,219, 25,243,138, 53, 5, 68,120,112,250,188,101, 7, 18, 74, 32,143,131, 48, 4,146, 51, 90,231,121,116,152,
+ 76,246,147,121,156,103,101, 85, 53,180,141, 53, 64,182,229, 76,235, 80,166,101,152,182, 97, 59,158,233,118, 13, 39,212, 76,175,
+ 37, 0, 25, 37,166,109, 51, 82, 19, 82, 73, 33, 90, 51,105, 77, 6, 2, 41,129, 56,158,233, 21, 64,114,206, 8,173,243, 50, 79,
+210, 40,142,102,233,124, 26, 39, 81,150,101,101, 85,214,132,176,246, 73, 84, 21, 27,134,102,217,134,101,155,142,107, 89,142,105,
+ 24, 90,139,237,153,182,173,155,142,102,186, 88,183,177,110, 42,138,218, 2,205, 16, 65, 77, 53, 24, 39, 85, 54, 43,146, 73,157,
+103,117,221, 80,202, 56, 23, 45,113, 46,145,128, 0, 41, 0, 0, 5, 8, 41, 36, 61, 70,168, 90, 26, 59, 88,189,203,246, 58,173,
+189,220,226,184,129,224,172,169,138,100,146, 78,118,227,249, 44, 75,139,186,172,155,134,114,198, 37,144, 16, 34,172, 98, 93, 83,
+117, 67, 51,109,211,178, 77,203,117, 77,167,107, 56,161,110,121,170,110, 53,117,221, 84,165, 97, 59,140, 52,164,202,165, 96,183,
+136, 37,120, 76, 92,139,133,164,132,148, 66, 48, 66,155,178, 46,162, 44, 78,163, 89, 50,159, 38,113,148,102, 73, 81, 85,117,211,
+180,250, 0, 42, 86,116, 93, 51, 77,221, 11, 28,215,119, 28,215,212,116,205, 48,117,219,181, 44,203,210, 45, 87,179,124,253,150,
+ 55, 9,206, 25,129, 8,181, 68, 89, 83,196, 69,114, 84,102,113, 83, 55,148, 18,206,132,108,131, 38,132, 2, 65, 8, 16, 2,160,
+173, 67, 73, 77,242,172, 44,203, 26, 2,128,165, 4,126,127,211,241,187,242, 56,157, 2, 9, 37,144,130, 52, 85, 54, 75,167,123,
+241,244, 40, 75,243, 50,175,235,154, 48,198,164,144, 16, 65,172, 96, 77,195,250, 34,115, 91,182,235,152,110,215,112, 59,186,229,
+171,186, 5, 0, 72,227,185,235, 5, 82, 74, 90,101,156,177,118, 21, 99,177, 2,241, 46,255, 38, 23,156, 58,167,180, 41,155, 50,
+ 41,210, 56, 79,139,178,168,242,188,170,170,186, 44,235,182,228,147, 18, 96,172,168, 42, 54, 12,221,180,117,199,177,252,142,231,
+122,150,105, 25,150, 99,218,142,123, 92, 55,152, 88, 51, 21,172,181, 43,218, 0, 66,213,176, 1, 0,164,202,170,116, 92,166,179,
+186, 44, 41, 89,148, 32,139,208, 42,129,132,173,171, 0,198, 57,105, 88,158, 21,241, 60,141,102,105,146,150,183,210,252, 34,103,
+ 64, 40,164, 0,130, 19, 82, 38,217,124, 24, 79,134,105,156,182,225,134,209, 54,220, 64,165,205,163,134,102, 90,186,105,153,182,
+107, 91,110,104,186, 61,221,246, 85,221, 65, 88, 45,178, 88, 55, 44, 55,232,112, 82,115, 70, 90,150,255, 22,217, 10,165, 20,199,
+107, 61, 0, 72,193, 25,163, 21, 41,211, 60,141,179, 36,163, 13,213,116,181,211, 15,123, 75, 93, 0, 36, 99, 34,142,210,131,221,
+201,124, 50,111, 25, 22,211, 50,108,215,116, 92,219,241,108,207,179,109,207, 51,157,176,157,152, 80,117, 19, 41,154, 16,156,209,
+ 90, 10,161,234, 38, 82, 48, 35, 85,149, 78,203,116, 82,151, 89, 83, 55,188, 21,141, 4,173,159, 64, 4,165,108,105,125, 73, 9,
+ 45,203, 42,137,242,249, 36, 30, 79,147, 89, 89,165, 28, 2,168,181, 11,128,173,140,218, 49,151,162,140,143,146,201,254,108, 58,
+171,138,186, 42,107, 74, 40,231, 92, 2,128, 20,164,170, 88,211, 85,195,212, 77,203,176, 28,203,118,125,211,237, 25, 78,160, 25,
+158,162, 25,180,174,138, 44,241,194, 30,163, 53, 45,179,150,193,105, 39, 42,222,149,200, 98,138, 79, 74, 41, 56,109, 72,157,149,
+105,148, 70,113,150,150, 82, 74, 63,116, 45,219, 68,138, 2, 33,132, 8, 65, 0, 93,223,221,216, 92,105, 33,212,163,241,188, 72,
+203, 32,116, 28,207,118, 92,219,242, 58,150,211,213,109,191,117, 40, 32, 37,163, 53,103, 12,171,170, 98, 24,130,179, 42,159,151,
+241, 81,149,199,164,174, 24, 99,156, 47,150, 15,224,187,167, 1, 0, 72,198, 88, 93, 53,121, 90,206,103,241,248, 40, 26, 71,121,
+212, 52, 84, 74,129,212,119, 99,144, 20,130,145,186,206,231,217,116, 55,158, 78,210,164, 40,139,186,105, 8,103, 76, 8,137, 16,
+196, 88,209,116, 77, 55, 52,203,210, 45,219,178, 28,199,116,187,166,219,209, 90,159,130, 48,139,103,142,231,219,170, 79,170,156,
+115,210, 18,252, 82,182,171,111, 18, 72, 32, 97,235,243,237, 88, 4,101, 77, 81,229,113, 26,197,113,148,212, 85, 99,154, 70,111,
+169, 99, 90, 22, 84, 48,130, 8, 34,180, 88, 41,148, 64, 10,161, 74,161, 25,166,227,123, 66,240,166,170,147, 36, 79,179,218,239,
+219,186, 19,170,186, 5,145,194, 25, 21,180,129,138, 98, 88, 46,128,128, 84,121,149, 77,171,116, 90, 87, 57, 37,132, 51,126,107,
+106,106,225, 47, 45, 15, 38, 4,161,180,204,235, 36,202, 38, 71,243,163,113, 60,206,138,130,113, 1, 36, 4, 8, 73, 8, 96, 43,
+ 32,206,154, 34, 78,103, 7,241,228, 32,141,210, 60,111, 83, 56, 21, 92, 64, 8,177,138, 85, 85,209, 13,221, 52, 13,211,214,109,
+219, 54,189,208,112, 58,134, 29,170,166,163, 40,106,145,197, 8, 41,158,223,161,164,226,172,145, 98, 65, 35,130, 69,230,190,229,
+ 77, 18, 2,201, 57,227,164,106,170, 52, 75,162,100, 22,103, 89, 33, 5, 8,187,126,119,169,167,106, 6, 66, 10,108,165, 3,222,
+221, 87, 1, 8, 73, 41,161, 88,220, 80,213, 76,199,239, 64, 8,103,195,221,139, 47,191,186,121,230,212,202,198, 89,213,176,177,
+110, 33,140, 57,169,235,124, 94,102,211,166,136,105,211,180,229,210,177,143, 31,227,205, 0,182,139, 92, 77,211,228,105, 57,159,
+198, 71,163,249,104,154,204,234,134,112, 1, 16,192, 0,154, 24, 49,168, 16, 14, 48, 4,160, 46,162,201,238,219,209,116,154,165,
+ 69, 89,212,132, 16,206,132,148,178, 45,252, 52, 93, 53, 44,221,180, 12,203, 50,109,215, 55,220,174,225, 4,186,233, 41,154, 41,
+ 56,139,103, 99, 63,236,114, 70,155, 50, 21, 98,193,105, 66, 40,143, 83,184, 4,183, 86,176,132, 96,172,161,117, 94,166, 81, 28,
+ 69, 73,148, 49,202, 12, 83,239, 45,117, 93, 63, 68, 88, 93,140,176,200,182,209,128,240,248,137, 32,128, 18, 10,136, 0,144, 16,
+ 64, 8, 33, 68, 80, 65, 88, 93,218,236, 44,109,158,169,203,148,115, 98,234, 61, 0,100,147,205,203,108, 90,231,115, 82,151,140,
+182,224,145,252,174,207,216,185,181,203, 37, 72, 67,202,178, 73,162,116,122, 20,141, 70,243, 81,146,103,148,113, 41, 21, 8, 53,
+132, 92, 21, 7,150,145, 8,148,100, 4, 3, 0,243,120, 54, 58, 48,242,172,108,170,166,221, 80,131, 16, 96,220,230, 41,205,176,
+ 12,219, 54, 45,199,177,188,208,116,186,154,229,171,134, 5,129,146, 70, 83,219,241,188, 32,164, 77,217, 6, 99,112,108, 48,237,
+108,238,241,194,146, 4, 82, 8,206, 40, 41,155, 34, 73,227, 40,154, 38, 85, 81,169,134,218, 95,238, 6,157,142,102,182, 83, 3,
+237,182,141,132, 0,181,180,104,235, 95,237, 99, 65, 0,193, 45,249, 32, 69, 65, 24, 97, 77,193,154,162, 26,150,215, 67, 88,231,
+164,170,243,168,202,166, 77,153, 82,210,112,206, 23,227,129,139,117, 70,112,188, 90, 38, 25,227, 77,221, 20, 89, 57,159, 38, 71,
+135,179,195, 73, 52, 45,234, 90, 8, 0,128, 10,161,165,226,192,208,124,199, 10, 66,135,103, 4,100, 4, 3, 0,202,162, 74,230,
+ 89,211, 16,182,104,249,224,113, 48, 54, 76,219,176,109,203,242,124,211,237,154,118,168,154, 14, 86,205,166, 46,154,186,114,253,
+144, 83, 66, 72, 41, 4,147, 66, 44,158,231,214,185,142, 69, 35,165, 96,180,161, 85, 86,164, 81, 60, 79,146, 40,149, 82,118, 7,
+ 29, 63,244,116,203, 86, 20, 13, 34, 4,225, 98,242,178, 21,133, 20, 16, 0,177, 24,159, 23,109,179, 35, 37, 0, 16, 66,132, 16,
+ 68, 10,196,170,130, 53, 85,183,117,203,147, 82, 52, 85, 90,165,179,186,136, 73, 93,112,198,196, 49,155,121,139, 16,111, 77,135,
+115, 78, 8,171,203, 58,137,243,233,120,126, 56,156,141,162, 44,110, 8,151, 18, 66,104, 32,228,233,106,104,155,158,111, 7,129,
+ 27,116,189,116, 24,203, 97,140, 1, 4,132,208,170,170,219, 44,142,177,162,105,170,110,106,134,105,216,182,105,187,182,225,118,
+ 76,167,163, 91, 62,214, 45, 8,225,124,122, 24,116,122, 24,171,180, 41, 56, 37,114, 49, 20, 41,192,162, 54, 22, 18,220, 26, 56,
+151,146, 51, 74,202, 58,143,211, 56,206,210,156, 52,212,118,237, 78, 63, 48, 45, 27, 41,154,162, 96,208,146,137,176,157,231, 19,
+ 2,182,222, 41,142, 5, 13, 22,245, 7, 88,248, 22, 66, 88, 81, 13,221, 14, 52,203, 71,138,202,154,162,202,102,117, 62,107,170,
+156,145,134,243, 99, 43, 62, 54,153,182, 95,226, 66,112,198, 73, 67,243,188,140,102,233,209,225,244,112, 52, 31,231, 85,201,152,
+ 4, 0, 67,104,170,184, 99,234,129,107,251,129, 19,116, 92, 63,244,130,192,217, 79, 27, 32, 65,187, 27,201,133,248,174,166,193,
+ 52, 44,203,176, 28,211,114, 92,203,237,233, 78,168, 25,142,162, 26, 77, 85, 16, 90,251, 97,143,145,134, 51, 34, 57,107,245, 4,
+143, 7, 67,142, 69, 35,219,105, 93, 70, 9,169,210, 50,139,146, 56, 35, 13, 81, 85,236,122,142,105,155,170,170, 35,164, 30,231,
+ 41, 8, 96, 27,167,128,148, 0, 74,177, 24,125,129, 18,180, 9, 16, 44,198,189, 17, 82, 32,194,170, 97, 91,193,178,170,153,156,
+147, 42,157,212,217,172, 46, 99,218, 84,183, 12, 7,252,235,210, 57,158, 55, 97, 85,213,100,105, 62, 27,199,163,225,116, 56,141,
+231, 85, 67,133,132, 16, 24, 8,185,186,214,113, 12,223,119,130,208, 11, 58,110,208,241, 92,207,182, 29,203, 58,136, 1,144,120,
+241, 49, 40, 88, 81, 53,220, 46,159, 88,150,105, 57,150,233, 6,166,211,213, 45, 31,235, 54,128, 48,153, 79,188, 32, 84, 85,149,
+214,133,224, 84, 10,126, 28,101,110,233, 76,130,119,167, 68, 24,107,170,186,140,243, 36, 41,242, 10, 66,224,122, 54,198, 10,198,
+170,130, 20,132, 80,139, 15,182, 40, 71,251,203, 16, 30, 3, 28,112, 17, 52,224,187, 65, 89,129, 72, 81,176,102, 56,161,233,245,
+ 17, 68,164, 74,171,108, 86, 23, 17,169,114, 74,137, 20,239,110,140, 2,249,238,185,164,148,156,241,166,161, 85, 81,197,243,116,
+124, 56, 63, 28,205, 70,113,158, 81,202,165,196, 16, 90, 42, 14, 77, 61,244,108, 47,112,194,142, 23,118,125, 63,116, 29,215, 50,
+ 45,203,241,187,186, 57, 95,212, 65, 10, 86, 76, 75,211,244,214,112, 12,203,113, 77,183,163,219,161,110,186,138,102,144,166,174,
+171,210, 11, 66, 70, 27, 65, 27,177, 24,184, 90, 36,225,197, 72,182, 16,139, 71, 21,156, 51, 66,155,188, 76,227, 36, 74,211, 36,
+ 23, 92,216,174,133, 80, 59,146, 42,219,209,127, 41,165, 0, 28, 66,180,248,148,146, 54,124, 9, 1, 91, 4,161, 29, 90,133, 80,
+ 65, 8, 64,164, 96, 85, 53, 29,211,233,170,134,205, 41, 41,242,184,202,167,164, 76,105, 83,114,206, 91,124,238,187,162,222,226,
+ 59, 33,218, 10,144,228,105, 49,159, 38,163,225,116,120, 52,159, 22, 85, 37, 4, 4, 64, 71,200,213,181,174, 99,250,254, 98, 54,
+204,239,184, 65,232,121,190, 99, 88,142,110,133,150,215, 81,180, 27,237,124, 7, 80, 85,108, 57,182,105, 26,182, 99, 90,174,111,
+ 56, 29,221, 14, 84,221, 6, 16,166,209,204,241, 2,199,113, 72,157, 11, 70,191,107,191, 6,128,119, 77,166,157,133,106, 63, 92,
+163,108,202, 52,143,147,104,158, 68,179, 36, 77,114, 69, 65, 66, 10, 21, 43,150, 99, 74,137,164,224, 66, 32, 8, 36, 66, 10,144,
+ 2, 64,180,200, 80,162,197,204,224,194,167, 80,187, 20,135, 21, 77, 55,172, 54,226, 40,164, 76,171,108, 94, 23,115, 82, 21,148,
+ 54,146,139, 5, 72,210,170, 75, 44,108, 16, 72,201,185,160,116, 17,143, 39,163,249,225,225,244,112,154,196, 53, 33, 82, 40, 16,
+ 26,138, 18,154,122,199,179,253,192,246, 67, 47, 8, 92, 55,112, 92,207,118, 3,215,118,187,134,237,107,166,167,234,166,162,104,
+178,181, 32, 77,215, 60,207, 54,109,203,114, 66,221, 13,117,211,199,154,217,212, 37, 33,141,235, 5,140,214,156, 53,178, 45,183,
+128,132,199, 62,181, 8, 56,139,246, 74, 10, 78,104, 83,214,121,146, 68,201,124, 22,207, 39,113, 18,231,101, 89, 35, 4,185,144,
+140,114,187,176, 92,207,178,108, 83, 74,169, 40,138, 68, 28, 34, 5, 34,212, 46,195, 1, 8,165,132, 16, 1, 4, 49, 68, 10, 66,
+ 24, 41,170,162,233,186,229,169,186, 45,165,168,146, 73,149,207,234, 34,101,164, 98,148,222, 26,228, 56, 94,117, 63, 78,229,162,
+117, 43, 82, 22,117, 28,165, 71,195,233,112, 56, 27, 37,121, 78,153, 4, 82, 69,208, 81,213,142,109,134,190, 19,132,142, 31,186,
+ 94,224,122,190,237,248,182,227,122,166, 27,234,118,168, 27,174,162,233, 24,107, 8, 31,227, 65,186,174, 58,190,103,216,129,225,
+116, 84,195, 65, 10, 78,230, 19,199, 15, 85, 85, 37,117,206, 25,249,174,196,112,236, 91,224,221, 15, 40,104,187,170,166,206,202,
+ 52,141,163,100, 54,137,163,105, 18,199,121, 85, 86,164, 97,109,204, 1, 0, 20, 37,153,207, 51,203,212, 92,223,118, 92, 75, 55,
+116, 85, 85,145,162, 32,132,129, 2, 1, 68, 10,194, 16, 97,132, 85, 5,171, 80,193, 24,235, 88,183, 20,172, 51, 82, 85,217,172,
+201,163,166,206, 24,165,226,184, 50,190,229, 80,199,146, 18, 66, 72,206,120, 85, 53,121, 86,206,167,209,232, 96, 58, 60,138,198,
+121,217,112, 1, 33,208, 21,197,215,181,174,107, 6,161, 23, 4,142, 31,122, 94,224,184,158,253,255, 52,118,101, 59,142,228, 70,
+144, 87, 93, 60,234, 80,143, 97, 24, 48,224, 63,217,255,255, 16, 79,171, 53, 82,221, 7,111,210, 15, 44, 73, 61,126,216,221, 22,
+208,221, 15, 2, 36,164,146,153,145, 17, 25, 20,111, 24, 19,109,197, 47, 57,171,179,130,145,172,128,136, 64,132, 19, 37, 70, 0,
+136,121, 89,177,250, 71, 78, 91, 82, 82, 16,193, 60, 62,234,246, 35, 56,227,173,142,225,213,170,158,180,223,247,244, 73,240,216,
+ 40,125, 44,235,188,140,195, 60,220,167,177,159,151,121,151,135,182,206,129, 8, 32,132,214,122,163, 13, 68, 80, 43,188,174,250,
+254, 88,243, 12, 87, 52,231,188,226,130, 82, 86, 21, 85,153, 23, 37,202, 16, 66, 0, 65, 4, 17, 38,164, 32, 57, 69, 8,155, 99,
+150, 91,175,143,217,170,195, 57, 23,227,183,101, 81,240, 91,241,241, 62, 56, 99, 15,169,151,105,123,220,134,207,159,143,107, 63,
+141,202,184, 0, 16,132, 52,195, 93, 85, 94, 26,214,116,162,237,234,166,227,117,195, 69,205,184,224,180,190, 20,188, 75, 42, 11,
+ 38, 57, 68, 56,161,138, 87,128, 64,218, 4, 71, 89,169,246, 13, 34, 92, 55,157,211, 71,240, 38,156, 3,103, 4,240,221,174,224,
+ 59,143, 66,112,206,154, 67,238,203, 58, 46,125, 63, 13,143,105, 26,214,109, 61,148, 52, 73, 47, 79,196, 72, 89,230,121,158, 81,
+ 90, 34,136,180,113,218,120,169,156, 84,118, 28, 15,130,135, 44, 39, 69, 78, 42, 90, 48, 94,118,151,182,251,231,191,185,248,200,
+ 10,234,189,149,107,175,182, 65,203,213, 26, 21,220,247, 70, 5, 94,236, 82, 76, 91,239, 62, 24,101,246, 93, 78,195,114,187,246,
+215,107,255, 53,109,155,117, 33, 70,130, 32,207,179, 15, 86,117, 29,111, 91,209, 92,234,166,229,162,230,162,102,188,174,171,250,
+ 82,208, 46, 47, 57,201,203, 52,238, 0,248, 84, 65,227,147, 81, 68,164,192, 89,126,236, 11,201, 11,130,137, 85,155, 63,235,241,
+ 89,245, 78,218,248, 5,222,146,111,194, 26,173,118,185, 45,211,184, 12,247,121,232,167,121,218,246, 77,106,109,188,255, 70,140,
+242,146, 11,202,107,198, 57,165,172, 36, 25,113,206, 29,187, 86,218, 6,231, 33, 66, 89, 70,152, 40,127,252,227,199,199,191,254,
+195,187,127,225,188, 4, 49, 26,185,202,173,215,251,100,212,238,172, 77,247,203,156,222,153, 84,110,194, 57,173,197, 16,172,117,
+ 74,233,109, 57,250,199,116,251,124,124,222,198,251, 38,149,119, 0,194, 2,227,182,204, 46,130,117, 23,113,110, 50, 55, 92, 52,
+140,215,156,214, 13,229, 63,114, 90,103, 37, 35, 89,129, 48, 1, 16, 2,128, 18,253,224,189, 13,222,194,151, 46, 54, 13,143,166,
+251, 17,188,117,122, 15,193,129, 87, 64,206, 9,224,196,180, 47, 26,208, 90,101,213,190, 45,235, 52, 44,253,125, 28,250,121,153,
+143, 99,151,198,184, 24, 35, 66,248, 84, 96, 88,197, 69, 37, 4,227,130,241,186,162,140, 86,140, 22, 21,199, 57,197, 36, 71, 8,
+ 35, 76, 48,206, 35, 68, 16,227, 44,171, 80,150, 5,107,244, 62,202,109,208,199,236,140,118,214,197,231,236, 2,190,131,235, 24,
+ 67, 56,167, 7, 41,213, 50,109,247,219,248,245,243,113,237,167, 65, 25, 31, 2,130,176,194,228, 66,203, 75,203,218,238,140,142,
+104,184,168, 41,175, 57,173, 79,214, 60, 43, 40, 38, 57,196, 4, 2, 24, 79,200, 26,131, 53, 70,173, 86,110,103, 6,121,239,154,
+246,226,140,124, 17,128, 79, 42,230,153, 49,239, 71,210,126,180,150,219,182,172, 99, 63,247,247,105, 28,150,117, 62,164, 84,214,
+ 58, 0, 0, 33,168, 44,242,146,150,140, 87, 92, 80, 33, 40, 19,148,215,148,113,198, 68, 91,242,143,156, 10,146, 87, 73,129, 9,
+206, 56,103, 16, 34, 89, 81, 65,132,157,218,228, 58,168,109, 48,106,115,198,120,127,242,109,225, 73, 86,196,111, 63,206,122,163,
+205,190,203,169, 95,110, 95,253,245, 58,124, 77,235,102, 93,136,128, 32, 36,242,236,131, 85,151,142,183,151,186,238,120,211, 8,
+209, 50, 46, 24, 23,130,138,143, 34,137,116, 69,133,113, 6, 16, 78, 56, 21, 70, 16,162,247, 86,235,125,218,199,235,177, 62,129,
+ 34, 66,200,233,195, 89,157, 6,171, 51,135,207,146, 12, 32,248,118,236,163,119, 70, 41,185,109,243, 54,244,243,144,162,179, 28,
+ 82, 26,239, 29, 0, 32,203,112, 81, 20, 21, 43, 56,163,188,166, 92, 80, 46, 40, 19,140, 11, 70, 69, 87,176, 75, 65, 5,206, 75,
+132,136,247,222, 91, 29,188,197, 89, 65,242, 18,132,168,183, 65,110,131,218, 39,171, 14,231,236,183, 5,238,247,193, 6, 32,196,
+ 8,210,125, 47, 74,153,109,217,135,251,244,117,125,124,126,141,247, 93,170, 16, 32, 0, 37, 65, 77,145,255,168, 89,219,137,230,
+ 52, 8, 48, 81, 51, 94,115, 38,154, 68,242,229, 37,199, 89,129, 73, 6, 33,138, 16,194, 51, 37,189, 51, 82,109,227,210,255,156,
+ 30,183, 99,151,167,133, 53, 56,227,172,244,222,191,228,205, 87,116, 82, 10,133,240, 4,238, 90,170, 99, 95,151,125,184,207, 67,
+ 63,142,195,146,196, 95,231, 2,132, 48,203,112, 89, 22,148,149, 76, 80, 33, 42, 81, 51, 38, 40,231,140, 9, 86,137, 75,193,218,
+188, 20, 56, 43, 0, 64,206,106,103, 84,140, 49, 43, 42, 76,138,224,140,222, 38,185,245, 90, 46, 70,235,224,125,240,225, 61,118,
+130,120, 94,200, 21,207,141, 92,107,173,220,213, 60,109,247,219,240,117,237, 63, 31,243,172,141, 9, 1, 67, 72, 51,114,169,202,
+ 75,195,218, 11,111,218,186,233,206,122,204,106,198, 68, 87,242,174,168,106, 82, 48,156, 23, 8,145,211,212,251,132, 42, 78, 31,
+114,237,231,254,191,227,253,177,206,155, 86,230,201, 40, 6, 23,188,123, 79, 84,239,142, 14,222,208,221,123,103,149, 58,142,101,
+218,134,126, 58, 53,153,229, 44,201, 16,194, 60, 39,101, 89,176, 84,146,207,170, 92, 49, 65,153,168, 43,222, 37,104,142, 73, 30,
+ 1, 8, 70, 57,171, 16,194, 89, 73, 33, 34,206,236,106, 29,228, 54,164,193, 42,221,146,246,106,154,224,197,105,251,152,174,231,
+ 54,218,236,219,217,173, 62,175,253,109,217, 55, 99, 35, 0, 25,130,117,158,127,240,170,235,120,211,138,166,123,213, 99,198, 57,
+167,245, 37, 29,171, 44,167,232,236,229,233, 88,165,118,108,141,218,142,249,215,252,248, 57, 62,134,117, 61,212,161,156,115,111,
+109, 62, 25,233,158,250, 6, 56,181,241, 23,236, 9,206, 26,163,228,177,190,163,179,110,235, 97,180,245,222, 35,136,178,156,148,
+ 85,193,121,197, 56,229, 53, 21,130,242,154, 49, 65, 25, 23, 37,239,210,196,139, 72, 22,162,119, 90,123,103, 49,201, 72, 81, 1,
+ 8,237, 49, 31,169, 91,201,195,189,169,156,239, 3,240,217, 27,124, 8,206, 56,165,244,186, 30,195,125,252,250,236,175,191,198,
+251, 38,117,154,173, 48,238,202,252,163,102,109,199,219,132, 0, 79,152, 67,153,168, 43,113, 73,162, 11,201, 75,140, 51,136,113,
+162, 11, 32,136,209, 7,239,180,150,235, 62, 93,167,251,117, 26,230,125, 61,164,210,206,184,115,249,255,233,203,114,103,124, 96,
+132, 1, 4,144, 32, 94, 72,194,185, 51, 90, 29,199, 50,239,195, 99,238,251,105, 30,215,125,147, 90,153, 16, 34,130, 40,207, 73,
+ 89, 21,140, 83, 46, 42, 81,211,228,165, 96,156, 81,206, 43,126,201,169, 32, 57,197, 8,121,231,188, 85,222, 89,146, 23, 36, 47,
+ 99,240,230, 88,229,246,208,199,162,149,242,206,199,144, 22,122,146, 84, 15, 35, 72, 64,228,180, 15,105,237,164, 84,235,180,222,
+111,227,245,243,113,237,151, 73, 27, 23, 34, 70,144, 18,124,161, 85,215,208,180, 70,159, 18, 71, 36,229, 67, 52,233, 88,101, 37,
+ 71, 89,142,113, 6, 33,138,175, 59, 6,157,243, 86,233,125,218,134,207,241,241,107, 30,151, 99,151, 74,153,196,255,164, 51,244,
+204, 32,255,156, 66,195,155,219, 14, 1, 68,239,156, 51,234, 80, 75,170,202,143,121, 26,215,125, 63,140,180, 62, 4,132,224, 51,
+ 58, 21, 23, 85,242,152, 48, 65, 25,163,148,179,146,167,117,142, 10, 66,232,156,245, 86,133, 16, 72, 86,146,172, 8,206,232, 99,
+ 82,235,160,228,102,181,246, 62,156,209,241, 33, 49, 29, 47, 78, 48,132,232,189,211,202,238,155, 28,135,249,215,215,112,189, 14,
+183,101,219,173, 15, 49,230, 9, 4, 10,218,181,188,233, 68,219, 10,209, 48,209,112, 33, 40, 21,140,242,238,164,207,139, 10,227,
+252, 68, 58, 39, 1,229, 19,153, 39,151,126,237,127, 78,253,144,214, 84,140,177,206,251,211, 52, 9,158, 25,148, 56,227,111,176,
+231,133, 36,189,181, 70, 73,189,206,251,216, 79,125, 63,207,195,186,109,210,156,106, 63,204,114, 82,156,209,161,188,102, 92, 84,
+140, 83,198,171,138,179,103, 73,206, 35,128,193, 25,103, 52, 0, 1,103, 37, 38,153,183, 74,109,147,218, 6, 45,119,107,173,247,
+111,223,219, 55,254, 24,156, 20,178,181, 74,153,117, 57,250,251,116,187, 62, 62,127, 77,253, 46,181, 15, 0,130,146,224,174,204,
+ 47, 34, 29, 43,241,251,177,226,137, 5,205, 42, 78,178, 50, 21,157,231,199,158, 6, 36, 99,212,118, 44,247,249,241, 57,245,211,
+182,238,242, 80,214,158, 55, 30, 62,155,210, 43,131, 82,111,120, 9, 0, 73, 99, 77,149, 75,234,196,167,244,253, 60, 15,203,190,
+ 43,165, 76, 8, 1, 33,148,165,170,204, 18,222,169, 24,175, 24,167,148, 87,148,241,146, 54,121,201, 48,201, 1,128,222, 25,111,
+ 84,140,145, 20, 37, 38,196, 25,169,247, 81,110,163, 86,210, 25,235,211,218, 24,136, 48,177,137, 39,227, 26, 1,136,222, 7,107,
+172, 60,244, 60,175,247,219,120,187,246,159,253, 50, 43,227,226,179, 91,209,178,107, 88,219,213, 77,203,155,150,243,154, 9, 65,
+153, 96, 76,212, 37,239,114,154, 38,207, 18, 98,114, 58,199, 1, 0,167,208,173,244,177,236,227,117,234,111,243,184,166, 69,202,
+228, 61,249,206,103,131,239, 11, 84, 33,250, 24,222,234, 72,240,206, 89,167,164, 89,151,109, 28,230,225, 49,207,227,186,109, 50,
+ 45, 17,156, 39,171, 44, 40,171, 24, 79,246, 36,250,180,190,208,156,114, 82,178,228, 81,115,206,120,171, 65, 4,164,168, 48,202,
+156,150,106, 27,228, 62, 25,245,252,184,192, 11,220,156, 19,121,122,111,206, 57,163,237,177,203,105, 88,127,125,245,215,175,254,
+107,218,119,231,124, 4, 57, 66, 34,207, 46,188,186,156, 48,231, 89,113, 56,101,130, 81,222, 20,172,203,169,200,138, 10,227, 2,
+ 98,146,184, 4,248,162, 58,147, 62, 58, 92,231,254,177,204,219,177, 43,173,140,127,169,174,241,237,137,249,109,195, 44,248,115,
+ 54, 75, 81,147,158, 10,119, 0, 0, 1, 97, 73, 68, 65, 84,118,214,105,165,215,101, 31,135,121,120, 44,243,184,110,219, 97,140,
+123, 69,167, 40,114,202, 74,158, 74,143,160, 60,185,130,170, 42,175, 88, 94,112,242,138,142,209, 16, 0, 92, 84, 16, 33,171,119,
+189, 15,114,155,141,214,175,100, 6,223,166,187, 23,105,225,156,215,202,236,235, 49,244,211,237, 58,124,222,198,251,126, 40, 23,
+ 0, 0, 37, 70,109, 89,124,212,180,237, 68,219,242, 58, 21,157,154,114,206,168, 96, 21,107, 11,214,228,165,192,121,137, 73,210,
+ 75, 96,186,237, 40,233,234, 86,237,114,125, 44,253,117, 26,198,117, 57,212,161,141, 61, 69,192,211,163,248,252,125,238,189,189,
+151, 23,210,224, 14,211,136,238,149,212,219,122,140,195, 60, 62,115,199,104,235, 67, 68, 8,230, 25, 46,203,156,241,146,215,148,
+ 37,160,204, 43,202, 43,202,170,138,241,156,214,201, 88,237,157,245,206, 0, 0,178,162,132, 24, 59,125,168,125, 80,219, 98,140,
+182,169,131, 62, 73,165,111,168, 52, 38, 11,165, 58,244,178,238,253,125,186,254,124, 92, 31,211, 32,181,241, 1, 35, 88, 17,114,
+169,138,143,150, 53, 93,221,180,188,110,121,157, 58,166, 72, 29,179, 45,104,147,149,140,100, 37,194,217,171,232, 36,136,235,157,
+ 54,114, 61,166,219,244,184,205,105, 35, 67,106,235, 92,112,175,235, 24, 99,120,157,172,248,114,212, 1,248,199, 31,127,188, 56,
+167,255,255,138, 15, 8,254,196, 33, 21,127,251,243,219,127,127,255, 43, 68,254,228, 89,240,181,175,248,187, 77,233, 47, 95, 61,
+254,197, 11,195,191,243, 70,224,211,255,240, 63,105,223,243,224, 10,178,220,221, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+ 0};
+
diff --git a/source/blender/editors/datafiles/flatten.png.c b/source/blender/editors/datafiles/flatten.png.c
new file mode 100644
index 00000000000..6c82baec5dc
--- /dev/null
+++ b/source/blender/editors/datafiles/flatten.png.c
@@ -0,0 +1,291 @@
+/* DataToC output of file <flatten_png> */
+
+int datatoc_flatten_png_size= 9114;
+char datatoc_flatten_png[]= {
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 96, 0, 0, 0, 96, 8, 2,
+ 0, 0, 1, 26,253,208,249, 0, 0, 0, 4,103, 65, 77, 65, 0, 0,177,143, 11,252, 97, 5, 0, 0, 0, 6, 98, 75, 71, 68, 0,
+ 0, 0, 0, 0, 0,249, 67,187,127, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0,
+ 0, 7,116, 73, 77, 69, 7,218, 7, 19, 0, 34, 12, 33,249,187,131, 0, 0, 32, 0, 73, 68, 65, 84,120,218,237,125,121,176,165,
+ 87,113,223,175,251,124,247,190, 89,222, 44, 26, 52,131,144, 52, 35,246, 29,155, 29,140,164, 17, 20, 24, 12, 9, 24,108,150, 56,
+198, 24, 85,217, 18, 18,184, 92,177, 42,148, 77, 2,146,192,142, 67,197, 46,178,176, 99,138,148,169, 74, 48,149,160,120, 9, 78,
+ 88, 21,177, 8, 36, 52, 90,144, 70, 27, 90,162,145, 70,219,236,111,222,125,247,222,239,156,254,229,143, 62,231,124,223,125,243,
+102, 24, 9,129, 69,202, 87,175,230,189,121,115,239,247,157,175, 79,159,238, 95,119,255,186, 37,219,183,111,199,143,125, 29,207,
+155, 26, 51,187,125,231,119,174,251,206, 87, 83, 59, 53, 99,138,113,105, 52,249,224,199,255,234,142,187,239,175,111, 82, 2,195,
+ 85,243,128,137, 8, 4,162, 58, 92, 61,184,240, 61,255,236,211, 23,159, 87,223, 20,182,109,219,246,132,117, 75, 34,194, 68, 26,
+ 33, 80, 81, 85, 0,242,218, 51,158,255,119,151,254, 0,128, 10, 32, 2, 0, 18, 68, 84, 0,136,136,134,102, 48, 28,204,173, 26,
+126,250,226,119, 3,104, 0,168,170, 6,141, 45,168, 52, 3, 0, 21,145,160, 24, 52, 0, 62,243,161,119, 43,128, 39, 63,251,249,
+ 42, 26,130,138,223,201, 47,172,170, 65, 67,208,225,176,105, 0,140, 15,239, 75, 41, 1, 8, 33,128, 64,132,193,252,125, 65,131,
+136, 40,128,241,226,161,141, 27,215,129, 16,129,170,168,138,136,132, 32,180, 68, 80, 68, 26, 64,198,163,165, 24,147, 0,162,106,
+ 52, 81,136,177,109, 13, 16, 8,255,247,151,191,215, 0, 88, 60,188,148,146,197, 24,151, 70,147,209,226,210,250,141,243,131,225,
+ 64,140, 42,114,197,183,175,155,154,201,113,237,221,241,188,228,142, 27, 47,167,165,107, 46,251,123, 51, 75,137,211,233,116,188,
+ 52,249,221,247,127,108,230, 77,187,126,116,245,213,151, 94,146,146, 89,178,148, 44,165, 20,219, 52, 25, 79,191,119,237, 45,127,
+241,223,190,146, 55, 24, 22,105, 4, 64,130,194, 16, 66, 51,108, 86,173,158,251,165,231, 62,229,147, 23,230, 61,214, 56, 25,105,
+ 8, 34, 34, 2,133, 2, 16, 32, 52, 58,156, 27, 14, 6,225,147, 23,190, 11, 64, 19,227, 68,131, 8, 26,146,180, 68, 64, 85, 73,
+ 54, 77, 32,243,230,203,206,203, 47,185,243,230, 31, 2,136, 49,198, 54,165,148, 72, 0, 32, 25,167,209,104, 42, 65,167, 75,135,
+ 78,222,122, 42,128,188, 81, 26, 68,178,194, 72, 16, 85, 37, 83, 51, 25, 29, 76, 41,182,109,108,154, 16, 52, 88,136,201, 40, 10,
+ 26, 72, 2,248,202, 55,119, 52,163,197, 37, 51,155, 27, 14, 82, 50, 8, 20, 74,101,140,201,204, 84,212,104,139,163, 73,179,120,
+120, 68, 50,198, 52, 29,183,163,209,120, 50,158,108,121,220,137,170, 66,202,173, 55,221,185,235,174,251,219,148,240, 72,237, 93,
+227,223,214,172, 94,245,189,175,253, 87, 17, 34,165, 59,110,185,121,188,116, 24,132,153,165,152,110,186,253,158, 15,125,236, 11,
+ 63, 94, 7, 78, 63,227,140, 47,252,231,255, 64,242,202,175, 95,210,136, 36,146, 32, 19, 65, 26, 64, 99, 74,201, 21, 50,181,150,
+146,157,123,209,199,143,190, 34,145, 29,223,248, 31, 3, 13, 20,136, 25,141, 16, 33, 1, 35,128,160, 42, 34, 26,148,141,197,148,
+ 62,251,199,239,137, 41,209,248,174,139, 63,185,252, 66, 54,157,136, 8, 68,224,251,234,138, 5,138, 10, 8,136, 40,169, 0, 69,
+ 52, 72, 10, 33,196,148, 98,250,244,197,231, 3, 60,231,194, 79,100,125, 19, 32, 78, 71, 42,162, 42, 33, 4,205, 7, 59,171, 1,
+136,172, 12, 34,126,150, 7, 77, 24, 12,154,225,220,112, 56, 55, 8, 77,243,153, 15,157,191,102,245, 42, 0, 10, 32,182, 19, 13,
+ 65, 85, 67,208,166, 9, 65, 27, 13,170,170, 34,208, 0, 74, 94,166, 95, 75, 84, 67, 19,180,145, 16,116, 56, 12,131,193,224,163,
+ 31, 56,231,233, 79, 60, 77, 1,180,227,133,211,158,252,212, 20, 19, 96, 34, 8, 1,170, 18,154, 16,154,160,162, 65,202,234,208,
+173, 46,104, 8, 33,248, 51, 52, 33,188,239, 93,191,214, 0,152, 44, 30, 48, 75,143, 61,121,203,158, 7,246,166,148, 84, 85, 85,
+ 0,131, 4,138, 32, 37,163,128,249, 49, 1,138, 42,141, 52,131,136,138, 2,112, 3, 39, 75,139,135,141,164,113,245,234,185, 24,
+227,210,210, 52,111,148,208, 40, 84, 13, 68, 50, 3,141,160,153,144,137, 70, 26,140, 38, 34,162,242,197, 47, 93,214, 0, 24, 45,
+ 46, 17, 66, 75, 70, 90, 50,166, 52,153,164,233,180,157, 95,191, 86, 4, 34, 66,154,138,152, 8, 8, 34, 17, 16, 17, 4, 40,244,
+219, 95,223,177, 48,158, 68,179, 6,192,225,133,145, 31, 62,146, 61, 13, 76, 15,220,187, 55,197, 52,157,182, 41,166,148,204,204,
+ 82,178,118,218,166,104,211,105, 59, 30, 79,199, 75,147,209,184, 93,154,198, 81, 27, 31, 57, 59,249,136,188,182,109,219,166,143,
+212,181,242,233,127,203, 27, 95,243,193,247,189, 39, 78,167,139,135, 15,221,121,243,141, 33, 4,154,197,148,226, 52,126,232, 19,
+ 95,188,245,206,221, 63,254,244,223,246,195,203, 52, 52,164,105, 24,236,184,244,111, 72, 10,132,164, 25, 45,165,148,172,109,219,
+ 20,109,113,113,233,247,254,205, 95, 28,227,209,228,238,219,174, 54, 75,128, 92,125,233, 95,155, 25, 0, 26,205,204, 0, 38, 35,
+105,201,218, 54,186,247,184,245,174,123,255,221,103, 47, 89, 89, 70, 34, 42, 34, 87,125,227, 75, 66, 87, 25,186, 42,136,229,211,
+ 0,149,166, 9, 77, 19,154, 65,120,234,105, 39,187,219, 56,242,165,174,114, 65,149,126,158, 4,116,147, 86,206,106, 40, 71,171,
+105,154,166, 9, 33,132, 79, 92,248,174, 77, 27,230,151, 95,200, 44, 45,236,187, 31,200,159, 19,138, 95, 77, 32, 32,220, 78, 5,
+ 17, 7, 13,161, 9,205, 32, 52, 33,252,233, 31,252,214,139,159,243,148,217, 11,197,118,255, 3,247,160, 28,112, 10,253,121, 8,
+ 80,233,199,189,119,228,125,105, 65, 69,127,231,205,191,252,148,211, 78,233, 93, 40,181, 89, 20, 42, 0, 52,123, 83,170, 80, 32,
+125,211,161,128, 4,213, 32,218,104,211, 4, 17, 92,240,206, 95,237, 95, 40,206,111,120, 12, 0, 17, 13, 33,136,102,115,232, 54,
+111,198, 12,169, 6,113,104,164,161,209,102,208, 52,141,124,234,162,243, 11,192,179, 56, 92,181,202,141, 95,190,115,190, 24,139,
+ 1,154,189,158, 58,230,146, 16, 52, 52,218, 52,250,194,231, 60,189, 60, 26, 77, 51,128,130,255,160,170,254,161,229,139, 18,209,
+238, 95, 37,132, 16, 26, 61,255, 55, 94, 13, 64, 83, 59,141,237, 36,165, 4, 80,139, 54,136, 64, 84, 84,225,184,178,191,180,252,
+216,110, 70, 69, 84, 67, 8,178,229,132, 13,106,113,106,105,242,196,167, 61,211,140, 0,243, 51,170,168,170,168, 66,160, 10, 71,
+162,221,181, 84, 33,160, 80,213,111,164, 27,215,205, 55,169, 29, 39, 75, 52,139, 49,133, 80,228, 36,170, 98, 16, 82,164,248, 52,
+ 33,217,191,150, 38, 71, 62, 26, 2, 53,168,182,237, 56, 78,199,177, 29, 63,238,228, 45,180,124, 62, 84,125,183,125, 7,178, 30,
+ 72, 39, 36,145, 89,217, 49, 37,141,211,113,108, 39,237,116,218,182,237,250, 13,243,142,224, 0, 8, 84, 85,144,101,150,127, 5,
+129, 64,204, 44,165,212,223,210, 16,180,105,167,173,145, 52, 51, 99, 74,105, 56, 28, 76,219, 54, 4,133, 8, 8,113,143, 45,166,
+128, 17,110,211,153, 40,238, 8, 72, 8,190,253,173,107, 29,253, 69, 51,186,233, 72,102,150, 18,140,212,124,115,241, 35, 7, 49,
+128, 25,111, 10,132,249, 63, 17, 9,114,112, 97, 68,162,105, 39,109, 34, 65,152, 37, 51, 90,178, 24, 83,187, 52, 1,176,122,237,
+106,144,249,228, 37,138,128, 52,208,111, 65, 18,139,163,165, 43, 47,191, 33,153, 25,165,153, 76, 91, 26,125,153, 52, 75,201, 82,
+ 76, 41,166,182,141,135, 14, 30,158,140,167,243,235, 86,175, 93, 63,175,170,102, 38, 84, 19, 3, 48,153,180,215, 92,113, 99,219,
+198, 73,219, 70,163, 81,154,118,218,166,100, 32, 8,184,172,252, 66, 41, 37, 26, 85,245,208,129,197,125,123, 14,154,209,239,209,
+ 78, 99, 27,227,116,210,210, 56,157,198,105,178,169,195,207, 71,149, 95,219,186,117,171,226,209,244,242, 88,107,229,215, 73, 91,
+ 54,253,234,107,207,122,198, 83,182,157,122,210,137,243,107,230,134,195, 64, 98,225,240,120,255,254,133,123,239,223,123,251,174,
+251,190,125,197, 15,111,250,209,157,143,248,154,242,130,182,158,250,184, 75,191,252, 95,140, 36, 32,204,240,243,254,187,239,184,
+239,206, 31, 97, 50, 58, 60, 25, 65, 68, 64, 51, 89, 59,144, 39,159,250,152, 39,159,178,233, 85, 47,126, 58,137,148, 82,140,201,
+104, 76,136, 41,189,247,207,254,242,224,194,225,159,104, 65,201,108,215,143,174, 50, 51,210,130,251, 87,209, 43,191,246,165,102,
+ 48, 32, 25,154,224, 7,211,151,170, 10, 18, 6, 1,161,162, 36, 33, 65, 84,204,104,106, 26,244, 35,127,120,182, 71,144, 49,165,
+ 63,250,200,231, 15, 29, 30, 61, 28, 9,169, 6,210,163, 61,220,121,227,142, 3,247,221, 53, 24, 14,114,204, 71,230,224, 28, 98,
+102, 16, 41,232, 48,227,149, 98, 74,161, 18,204,104, 38, 74, 85,181, 16,228,207,223,251, 78, 51,144,118,241,199,191,120,239,131,
+251, 30,202,150,185,217, 20,236,252,254, 55,198,139,135,220, 22,250, 13, 33, 98, 52,146, 30,142,228, 31, 28, 28, 72,142, 88,131,
+170, 1, 32, 69, 77, 25,104, 52, 85,210, 44,209,204, 44,201, 69,239,121,155, 3,220,247,252,241,103,146, 39, 41,126,204,130,204,
+ 72,139,211,201,210,226, 65, 55,232, 6, 8,144,111,131,140,150,136,158,173,151,238, 92, 24, 89, 62,165, 34,142, 63, 72,170,170,
+165, 36, 26,104, 73,204,104, 98, 31,251,192, 57, 34,242,169,191,250,202,142,157,183, 29,107, 65,180, 72,179,125,247,254, 95,247,
+ 21,142,150, 44, 71,107,112,155, 74, 80, 4, 48,152, 64, 76,216, 67, 4, 46, 39, 58, 88, 35, 77, 68,130, 24, 41,166, 34, 98,102,
+170, 98,137,102, 30, 76,218,185,111,123, 53,128,207, 93,242,205,239, 93,115,211, 74,136, 15, 72,169, 77,177, 29,143, 22, 4, 57,
+126,103,193, 8,217,147, 21,159,230,216, 4,130, 30,102,234, 96,133,123, 84,247,209,142, 19, 53,116, 8,175,130, 60, 21, 21,200,
+217,111,124,197,167, 63,120,126,208,229,134, 80, 1, 88,140,150,218,185, 53,235, 28,173, 57,152,145,242, 86, 41,191,113,255,234,
+112, 46,227, 85, 46,195, 75,218,161, 67,213,144, 63,231,128, 76, 28, 44,250,178, 66, 80, 13, 10,200,199, 63,112,238,187,127,243,
+159, 46, 95, 16, 45, 90,138,107,215,109, 40, 23,205,104, 44,104, 80, 13,170, 5,183,105,150, 74,134, 50, 88, 17,200,161, 11, 86,
+203,229, 84,160, 65, 58,112,231,144,184,113, 60,171,207,125,250,105, 31,191,240,252, 89, 9,165, 8, 75,205,160,241,107,169,170,
+ 4,136,138, 4, 4, 69, 21,143,138,170,104, 65, 53, 25, 40, 45,147, 83,127, 7,243, 46,107, 1,106,245,193, 68, 67,144, 16,130,
+ 35,207, 16,194,220, 48,124,246, 79,126,175, 91, 80,138,211,148,166,169,157,156,242,196,167,151,187,101, 52, 4, 17, 85,212,173,
+ 20,173, 48, 23,249,225, 5,162, 43,139,170,175, 91, 29, 76,150,154,147, 82,207, 82,132, 32,170,162, 65, 47,254,253,179,147,135,
+195, 22, 39,102, 4, 48, 28, 52,107,230,215,141, 14, 31, 86,101,145,189, 63,164,159,123, 35, 65,168,209,132, 66, 51, 81, 8,212,
+140, 65,213,140,196,172,170,163, 59,134,102,230,151,163,250, 37, 20, 2,199,163,244,120, 71,248,164,173, 27,159,118,218,201,141,
+ 75,200, 35, 59, 18,155, 54,111, 86,213,133,131, 7,242,241, 18, 55,199, 32,225,219, 4,165, 82,104,128,239,159,153, 10, 72, 95,
+180, 2,168,247, 94,182, 38,127, 38,133, 16,160,155,171,236, 54, 25,130,144, 66,162,105, 6, 13,128,212,142,205,220,177,146,228,
+252,252,234,185,185,193, 3,247,221, 31, 66,240,171, 23,111,235,139,115,237,241,127, 0, 85, 96, 2,208, 68, 5, 52,203,193, 65,
+183, 44,130, 25,197, 66, 85, 65,154,153, 27, 14, 19,235, 97,100,138, 32,182,109, 3, 32, 78,199,201, 23, 84,226, 87,146, 39,110,
+222,244,192,253,123, 85, 85,212, 67,146,172,239,110, 47, 13,210, 25, 71,117,227,108, 16,120,212,195,178,172,146, 22, 83,130,254,
+204,254, 45,107,152,205,236,240,129,131, 75,131, 65,211, 0,104,219,169,153, 21,175, 14,130, 30, 57,108,220, 48, 31, 83, 26,141,
+198, 38,156,141, 17, 28,140, 80,202, 53, 13, 84, 40, 65, 55,173,121, 89,126,181,124, 89, 95, 72,246,202,174,133,117, 53, 36, 7,
+195,193, 55, 47,251,174, 80, 27, 64,226,180, 53, 22, 35,157,151, 38,158, 50,176,100,195,193, 32,165,228, 14,203, 93, 1, 4, 32,
+144,227, 9, 16,208,124,107,223, 29,161,229,237,119,140, 32, 16, 35, 93,162, 42,106, 48,165, 66,115,184, 65,114,113,113,233, 91,
+255,235,251,110,220, 26, 0,211,182,166,176,243,134,121,192,231, 50,166,209,104,150, 44, 26, 1, 12,230, 6,197, 36, 58, 42,200,
+ 46,143,200, 16,193,213, 70,202,163, 67, 4,102, 57,140, 1, 64, 40,114,189,193, 31,236, 27, 95,189,210,140, 41,223,204, 23, 52,
+153,246,178,159, 21,240,148,147, 78, 88,126,209, 82, 90, 26,141,205, 44,198, 36, 34,107,231, 87, 15,231,134,240, 40,208,186, 43,
+212, 51, 37, 2, 71, 84, 2,192,213, 92,132,100, 51,108,118,124,255,134,195, 11,163,148,140,228, 52,165,104,140,164,145,190,160,
+182,202,166,250,120,228,200,200,195, 35,171,209,155,165,186,184,184,111,207,212,115,120, 94, 63,176,152,131, 86, 17,184,219, 82,
+ 21, 75,214, 78,227,120, 60,153, 44, 77, 61, 47,108,100,140,201,191, 38,109,156,198, 20,205,218,148, 34,153,160,141, 8,190,115,
+205, 29,245,120, 18, 51, 66,167,213, 45, 97, 81, 82,150, 48,174,190,234,143,229, 49,202,111, 45,203,152,229,132,177, 19,182, 89,
+ 74, 76,100, 50, 68,147,196,144, 8,106,120,148,229, 27, 61, 54,123,244, 44,102,251,246,237,122,164,153,255,135,125, 61,186, 34,
+215, 71,227,130,142, 26, 74,191,252,244,231,191,106,251,139,182,157,186,229,132,245,107,231,215,204, 1,108, 35,247,237, 59,180,
+119,255,194,221,187, 31,184,226,218, 91,190,254,237, 43, 65, 62,242,225,253,182,109,219,238,186,235, 46,255,203,147,159,120,218,
+191,254,151,231,188,244,133,191, 24,219, 8, 26,105,177,157, 30,216,183,247,193,221,119,123, 80,225, 38,217,253, 82, 74, 6,179,
+105,107, 95,250,234,229,223,185,106,231,254, 67,135, 31, 17,165,150,173, 91,183,238,218,181,235, 51,255,241, 79,206, 58,243,165,
+162, 66, 51, 41, 46,225,218,239,126,189,198, 33, 21, 65, 87, 51, 83,141,100,108,141,180,148,236, 7, 59,111,255,212, 23,254,254,
+ 39, 93,208, 69,255,234,130,119,190,253,205, 70, 74,182,141, 4,112,112,239, 3,183, 95,255,131, 92, 63, 67,231,186,221,209,185,
+ 1, 44, 86,142,102,158,168,180, 20, 41,194, 27,110,221,245,145,191,252,155,135,127,236, 31,115,226,102, 13,131, 16, 26,245,216,
+ 36, 52,123,238,223,125,231,141, 59, 66, 19,114, 74, 79,220,133,103, 8,154,145, 90, 77,241,170,151,231, 60, 31,174, 34,242,140,
+ 39,157,250,153, 15,190,251,181,219, 95,240, 48, 79,153, 87, 17, 50,206, 14, 77, 59,157,238,190,245,186,238,150,217,115,118, 1,
+164,195,142,153,208, 66,187, 11,120, 16, 38,130, 55,189,242,197,159,186,232,188,117,107, 87, 63,244, 99,159,113,129,250,237,111,
+184,252, 43, 30, 87,104, 70, 35,236,105, 15,133,236,193, 97,150, 32,194, 11, 39,185,114, 23, 74,172, 41,130, 63,127,239,217,239,
+ 59,231,205, 15,217, 14,137,199,126, 34, 55, 94,117,153, 20,114,132,195,122, 47,224, 87,168, 68, 82,178,103,205,160, 17, 51,123,
+231, 18,146, 76,151, 16, 21,193,182,199,109,254,212, 69,231,173,159, 95,243, 16, 22, 68,143,119, 52, 44, 30,220, 43, 71, 4,126,
+ 52,230,202, 76,142, 63,178, 76, 51,210, 40, 95,200,177,155,150,101, 5, 13,234, 17, 53, 4, 31,190,224, 29,103,190,224,153, 15,
+ 65, 66, 0,118,223,118,131,170, 22,108,186,204, 90,249,177,135, 44, 47,126,104, 73,217, 75, 89, 19,106,144,234,252, 17, 15,247,
+ 85,229,237,175, 63,235,253,231,189,245, 56, 22,196, 92,115,219,123,223, 46, 71,119, 68, 5,205, 61, 0, 89,203,234,229,220,101,
+173, 42,225, 72,222, 33,143,110, 21, 46,163,172,230, 89, 63,113,242,150, 77, 31,125,255, 57, 63, 86, 66,164, 25,192,241,232,112,
+ 63, 23, 85,133,228, 55,247,148, 71,142, 30, 75,192, 80, 3, 99,144,240, 18, 74, 81,114, 85,148, 36,138,230, 0, 28,162, 34, 77,
+208, 79, 95,124,254,177, 22,212,225,248,148,170,169, 97, 9,193,250, 9, 13,143,113,178, 29,234,133,243, 93,192,238, 71,163,230,
+ 4,106,205, 75,131,132,146,232,129,154,241,147, 23,189,235, 24, 91,230, 36, 9,243, 18, 73,201, 15,116,152, 84,125, 91, 43,239,
+ 73,170, 82,205,214,114, 72,215,110, 22,125,202, 57, 47,207,194, 72,200,123,167,240, 12,230,199, 63,112,238,209, 37,148, 18,205,
+ 74,164,237,161,138,118, 59,162, 57,131,230, 33,141,116,236, 2, 46,139,222,187,252,169,103,181, 4, 90, 44,130, 23,207,242,185,
+ 83, 85, 69,144,240,251,239,120,253, 81,116,136,137,102, 34, 89,228, 69, 22,213, 89,176, 99,245, 64,152,205,226,209,113,166,135,
+148,121,199, 58, 43, 37, 42,189, 44,161,136,242, 89, 79,218,250,138,151,252,194, 17, 18, 50, 58,208,232,233, 4,253, 66, 53, 87,
+ 68, 97,221,164,154, 28, 88, 49, 79,213,255,117, 94,142,162,158,128, 89, 81,137, 8,126,227,117,103,172, 40, 33,163, 37,209,146,
+160,118,195, 81,107,185, 53,230,244, 18,153,244, 66,183,149, 43,179, 58, 83,138,150, 42,156, 82,183, 13, 90, 51,170, 34,242,177,
+ 89,101, 82,150, 72,176, 25,206,229,124,158,171, 93,201,122, 85,211,232,250,147,253, 27,176, 98,110,106, 70,199, 89,247,186,166,
+219,164, 91,100, 46, 0, 96,110, 48, 56,105,243,166,254, 41,203,105,130, 85,171,215,118,186, 34,185,136, 80,125, 65,245, 17,229,
+146,203, 43,177, 43,100,168,170,204, 80,119, 45,155,170,186, 60,175, 32,252,233, 31,188,189,207,134, 36,153, 64, 91,187,254,132,
+ 34,106, 64, 81,140,126, 47, 39,216, 61, 98,190,195, 49,178,139, 53,107,214,219, 59, 87, 5, 20,203,169,170,121,117, 52,190,242,
+244, 23,244,236,144,153,165,180,113,243,150,234, 13, 50, 67, 79,196, 61, 75, 61,110, 21, 24,249,185, 6, 69, 69,115, 4,126,140,
+189, 43,217,119,116, 15,136,140,164, 28,149, 42,222,252,234, 95,202, 81,135,243, 79, 0, 10, 52,198,182,105, 6, 93, 17, 3,134,
+154,248, 20,117, 7,239, 87,112,199,239,153,150, 99,132,154,213,177, 84, 91, 79, 90, 89,167,235, 67, 78,122,174, 93, 21,182, 62,
+246, 49, 36,149,100,225, 63,182, 91, 78,222, 54,195,209, 42,167, 42, 3, 71, 65, 63,171, 91,110,121, 44,237,174,246, 33, 95, 7,
+156, 49, 1, 61, 13, 55,242,165,207,125, 14, 68,148, 48,166,104, 22, 45,165,245, 27, 55,229,188, 75,193,171,254, 28,157,110,229,
+ 53,186, 2, 85, 14,109,190,227,138, 58, 46,189, 77,130, 43, 67,183,126, 86,136, 32, 34,207,122,218, 54, 16, 10,203, 74, 77,139,
+180,184,122,205,218,156, 16,235,174,184,108, 11,164,122, 52,100, 7,236,224,145, 71,219,187,153,181, 10,107,230,181,226, 95,255,
+113,203,166,117,110,135,140, 22, 45, 70, 75, 49,165,118,243, 73, 39,121, 86,203,173, 65, 41,241, 72, 65, 53,162, 66, 17, 42, 10,
+149, 67,181,212, 64,228,232,190,132,189, 44,190, 64,165,240, 20,122,251, 46,210, 52, 10, 80, 73, 75,209, 83, 88,173,165,152, 98,
+187,225,132,141, 57,205, 84, 72, 78,249,241,242,163, 20, 24,225,150,151,153,129,228,201,255,126, 94,112,185, 75,233,130, 2,212,
+148,126,221,129,108, 18,178,132,152,204,162,215,132,204,226,252,252, 26, 23, 82,255,249,106,110,187,131,180, 80, 21, 80,233,161,
+ 20,169,162, 92,166,242,253,196,185,211, 13,115,234,186,186,164,222,251,151,198, 17, 16,245,144,211,183,204, 82,107,177, 77, 41,
+ 62,246,164,205, 30, 38,179, 39,168, 14, 95,139,171,183,195, 92, 41,113, 90,193,221, 51, 85, 22,151,165, 59, 36,120, 57, 21, 37,
+ 37,216,143,239, 0,220,124,235,221, 89, 66, 41,182,102,209,147,151,254, 50,179,249,117,107,242, 74, 56, 35,249,190, 66, 86,116,
+ 40,153,168,238,190, 58,195, 94, 17,106,169, 30,129, 25,243, 89,129,164,203,106,146,161, 9,119,237,186,167, 51,140,121,209, 48,
+150, 79, 14, 6,131,160, 33,153, 65,103, 64,116, 86,133,142,217,227,122, 15, 67, 87,252,112, 40, 71,230, 93, 50,243,116,110,150,
+119,101,215,244,245, 44,182,113, 48, 8,136,104, 60,113, 81,146,167, 64,225,202,208,108,245,154,185,209,226, 56,199,175, 61,181,
+160, 43, 56, 77,144, 45, 47, 4, 90,181, 52,215,251, 41,130,156,210, 47, 73,113, 23,204,242,213, 16, 20, 94,117,245, 45,254,233,
+134,132,165,196, 98,124, 56,155,195,159, 27, 54,147,105,235, 1,117, 13,131,188,202,225, 38, 65,213, 13, 71, 23, 95,103, 24, 80,
+158, 47,151, 59,114,166, 89, 76,142,168,219, 11,134,195,225,238,123,247,246,124,153,175,223,114, 50,198,186,188, 50,147, 49, 87,
+128, 74,108, 93, 50,217,168,250,197, 26, 69, 90,169,125,116,135, 64,178, 64, 11,196,203,130,236,178, 23, 12, 26,190,252, 63,191,
+171,170,140, 9, 64,147,115, 97,117,207, 8,163,129,190,172,124,109,231,108,106, 19,122, 54,166,240,181,164,150,247, 89, 3,238,
+188, 12,214,152, 42, 31,254, 98, 64,197,203,255, 94, 65,187,226,242, 27,104,157,149,105,156,226, 91,243,248,156,125,117, 21, 5,
+227,116,218, 14,231, 6, 26, 2,235,206,101,106, 72,118, 40, 4,141, 86,194,164, 44,243,172, 87,206, 39,173, 96,212,109,100, 35,
+215,237,184,101,225,208, 98, 42, 10,159,123, 90, 82, 76, 57, 14, 44, 11,245, 37, 91, 87,127,201,229,183,165,197,113, 74,182,102,
+126,181, 6,205,170,109,230, 38,201,216,197,100,197,128, 33, 23,211, 10, 44,207,153,157, 28,112,203,119, 46,189,186,157, 38, 43,
+246,206,192,188,101,189, 34, 95,177, 88,179, 66,234, 21, 40,104,102, 7,246, 29, 50,179,225,220, 96,126,221, 90, 21,201,201, 25,
+ 37, 76,125,171,123,204, 62,163,115, 90,186,220,160,104,192,254,189,135,118, 94,119,155, 39, 41,163, 89,178, 82,111, 19, 52, 52,
+198,152,186,247,207,108, 92, 41, 6, 38, 47,153,101, 57,121,156, 50, 58, 60, 62,116,224, 48,141,195,185,225,170, 53,171,230,230,
+ 6,218,104,117, 91, 16, 17, 24, 41, 96,175,182, 70,236,223,119,224,182,155,239,242,231, 79,201,205, 49, 73, 38, 50,145,190, 32,
+ 75, 49,117, 49,107, 87,252,241, 12,103,150,191, 23,111, 28,204,117, 69, 83, 17, 10,150, 70,227,195, 11,139, 41,210,204,220, 20,
+ 5, 39,230,135, 0,160,109,227,116, 58, 93, 26, 77,218, 54, 90,162, 87,211, 98,246, 11, 89,234,137, 76,198, 68,246, 78, 89, 15,
+ 24, 87, 60, 84,210, 16,174,215, 89,145,172,152, 92,160,223, 75, 32,161, 17,165,228,213, 19,105,218, 90,154, 56,205,210, 18, 61,
+210,179,148,104, 76,209, 98, 76,150, 44,153, 37,163, 17, 46, 30, 55, 80,205,174,251, 15, 20,132,200, 42,163, 76,103,238, 10,101,
+224,108, 73,108,230,151,182,252,151,203, 30,134,200, 28, 80, 51, 23,177,211, 56,105,134,104, 72, 94, 44, 19,205,231,115,251,246,
+237,251,247,239, 63,112,224,192,163,173, 44,244, 15,251, 34,185,113,227,198, 19, 78, 56,161, 1,112,240,224,193, 93,187,118,253,
+163, 80,142,140, 4, 78, 56,225, 4,253, 71, 65,252,156,149, 19,127,110,202,155,199,243, 10, 65,215,174, 89, 61, 28, 52,131, 38,
+132,160,206,179,129,163, 86,178,141, 49, 37,139,201,218,182, 93,154, 76,219, 54,253,255, 44,160, 87,189,252, 37,167,191,228,121,
+255,228, 85,103, 52,141,103,123, 29, 60,167, 2,242, 12, 20, 51,140, 70, 75,163,133,133,165,209, 98, 59,157, 88, 74, 51, 70, 15,
+ 72,238, 48, 8,213,102,247,158, 3, 87,223,112,235, 77,183,237,254,225,205,183,165,148,126,158, 4,180,126,221,218,179,223,254,
+235, 47,125,209,243,158,244,132,109, 27, 54,204,139,136, 35, 32,233,128,146,137,234,100,188,180,239,190,221,135, 15, 30,152, 78,
+198,150, 98, 77,168, 84, 26, 81, 8, 57, 23,204,194, 24, 87, 17, 34,184,251, 61,117,243,250, 83,206,122,254,235,206,124, 30,205,
+123, 53, 25,147, 61,176,247,224,125, 15,238,191,230,166, 59,119,236,252,209,226,104,252,168, 48,213,103,158,121,230,158, 7, 31,
+220,176,126,245,239,252,246,219,206,124,217,139,135,115,115,189,242, 11,103,242, 95,160,168,142, 22, 22,118,221,122,253,161,253,
+ 15, 54,205, 96, 25, 50,168,136,163, 3,140, 20,194, 60,246,183, 28, 81,214, 64,205, 57, 82, 21, 31,163,135, 77,115,224,105,102,
+223,189,230,230,255,115,229,245,253,110,245,159,217,107,219,182,109,143,127,252,227,229,140, 51,206,120,235,175,189,238,141,175,
+255,101, 38,214,253,238, 90, 4, 10,192, 86,109,246,222,123,215,109,215,255, 32,151,205, 43,177,128, 66, 33,141, 53,199, 88, 72,
+ 94,165,188, 96,165,102, 92,139,201, 46,178, 28,248, 73, 13,107,208, 11, 51,156,146,231,132,190, 76, 23,132,236,216,121,199,231,
+ 46,249,218,116,218,254, 44, 5,212, 56, 97, 86,181, 49,166,162, 42,236, 39,230, 84,117,207,253,247,220,113,195, 15, 20, 28, 12,
+ 27,239,245,235, 18,142, 94, 16, 82,176,240, 1,171,104,100, 38,134, 46, 21, 99,228,119,247,211, 72,154, 89,142, 80, 9, 14,121,
+ 67, 80, 51,168,152,151, 81,105, 74,242, 5,207,124,194, 11,158,249,187, 36,247,236, 63,244,205, 43,174,255,218,229,215,254,140,
+108, 80, 73, 52,169,231, 54, 59,221, 17,141,237,244,135,151,127,181, 29,143,188,110, 83,143, 16,209, 53, 88,138, 8,204,179, 67,
+ 93, 31,129, 27,163,124,104,252,223,102,123, 11,142, 76,218, 74,230, 97,138,155, 41, 17,146, 89, 94, 84,102, 67, 69,138, 96,243,
+166,245,111,121,205,233,111,251,149,211, 71,147,233,223,126,243,202,111, 93,181,115,242, 83, 83,171,166, 20,159, 43,211, 49,127,
+ 83,213,133,253,123,110,222,113,153, 0, 26,180, 20, 52,201, 82, 68,224,178,244,243,108,145,163,112, 31,104, 89, 84,200,141,104,
+ 69,203,114, 72,219,203,132,123, 65, 57, 83,147, 44,191,133, 52,102,193,145, 66,152, 43, 21,205, 8,225,234,185,225,155, 95,253,
+178,183,188,230,101, 36, 62,255,183,151,126,103,199,141, 63, 53, 47,230,228, 85,230, 28,156, 54,205,190, 7,238,185,229,170,111,
+ 53, 77,147, 11, 9,236, 82,249,210,171, 90,116, 86,217, 58, 3,132,101,186, 83, 58,102,115,170, 22,221,167,114,147,145,153,167,
+254,106, 17,187,208,141,189,166,230,105, 1, 79,201, 57,253, 89, 84,205, 47, 16, 66,206, 66,189,227, 13,103,189,227, 13, 47, 63,
+176,176,248,217,255,254,245, 91,238,188,231, 17, 22, 80,201,114,101, 55,189,120,112,239,109,215, 94,222, 52, 77, 54, 19, 44,185,
+212, 21,107, 6, 57,159, 89,184,209, 89, 5,204, 71, 36, 8,176, 98,166,213, 43,122, 43,253,165, 87,127,202,199, 93,250,193,186,
+103, 53, 73, 41,169,189,154, 48, 3,128, 13,235,214, 92,240,206, 55,152,217,183,175,186,241,146,175,127,127, 52,158, 60, 50, 2,
+242, 27, 11, 8,131,209,118,223,118, 35, 73, 47, 55, 72,205,237,246,116,167,146, 83, 86,178, 44, 46,105,116, 57, 29, 89, 86, 46,
+ 91,161,234, 81, 74, 75, 94, 22, 20,205, 76,117, 86, 86,128,159,251, 34, 32,154, 33, 32, 59,208,156,239, 6,187, 76,180,202,246,
+ 23, 62,107,251,139,158,117,232,240,232,223,127,254,239,238,185,127,239, 79, 38,160,156, 5, 51,215,147,201,232,240,194,129, 61,
+203, 49, 14,102,121, 59,179, 59,109,176,206,184,172, 32,147,156,146,150, 21,184, 72,232,209,191, 5,165,211,142,229, 44,231, 34,
+174,231,194, 50,225, 76, 0,170, 22, 31,224,167,207,106, 6,188,228,125, 5, 4,231,215,174,254,192,121,111, 77,228, 23,190,252,
+173,203,174,188,225, 97, 6,171,149,123,237, 90, 60, 90,216,223,182,147,202,176,207,118, 39, 19, 27, 51,223,229, 72, 46, 67, 53,
+189,226,101, 62,138, 20, 18, 95,150, 29,164, 95, 22,155,169, 10,151,182,175,110,246, 72,105,146,114, 35,164,121,128,145,183,110,
+193, 9, 82,133, 35,161,149,238, 38,193,185, 83,153,158, 36,148, 32,206,242,195, 63,127,221,153,159,186,248,188, 87,253,210, 47,
+ 62,172,104,222, 43, 51,150,204, 18,105,227,209, 66, 71,202,235,109,116,149,209, 74, 86, 40,179,226,170,179,135, 8, 51, 98, 2,
+103,120, 43,153,229,183,162,152, 42,235,176, 47, 54,148,217, 1,165, 21,170,163, 0,149,169, 72,206, 4,116, 82, 82,230, 37, 21,
+ 98, 66,102, 64,122, 61,228, 45,191,242,178,143,190,255,156,199,159,178,229, 33, 28, 49, 39,188,210, 18,153,220,212,197,118, 34,
+165,200,221,213,179, 73,151, 81, 69,137,172,100,175,210, 73, 32,189, 10,107,129,133,234, 24,137,181, 12, 85, 12,249, 49,138,195,
+ 86,218, 43,234, 10, 60,119,156, 89,138,213,225,177,131,170,121, 9,154,113,174,116,249,214,130, 82,115,199,139, 12,180,249,163,
+115,126,125,239,254,133, 63,251,220, 95,239, 59,184,112,156, 26, 68, 90,242, 34, 1,188,250, 86,170, 97, 93, 41, 93,179,167,232,
+ 26, 21,139, 75,118,105,246,233, 0,153, 58, 67,168,143,195,240,153, 63,157,185, 61, 86, 55, 92,223,120,207,168, 82,199, 59,168,
+212,168, 90,230, 71, 25,251, 32,133,214, 86, 57,166,133,201, 35,133,147,163, 4,101,211,134,245, 31,190,224, 29,239,124,211, 43,
+143,211, 6,177, 14, 32, 96, 74,205, 96,216, 31, 61, 81, 28,173,183,221,233, 12, 45, 80,122, 67, 10,132, 21,148,215,114,124,221,
+114,113, 19, 44, 93,101,234,216,185,206,206, 42,245,250,241,164, 55,188, 72, 58, 18, 4, 10, 41,178,207,217, 82, 55, 80, 78,164,
+206,135, 46,116,252, 41, 85,144,124,217,115,159,246,111, 47,248,237, 19, 79,216,112, 60, 26,100,158,220, 49, 75,115,171, 86, 75,
+105, 47, 82, 21, 85,138,176,216, 69, 84, 98,242, 50,219,161,149, 44,145, 89, 60,232,211,213, 40, 71,152,175,227,144, 81, 21,116,
+167, 80,153,166,152,249, 20,200, 34,201,213,194,124,111,169, 68,155,174,247, 53,115,220,178,236, 80, 78, 42, 54,173, 95,251,225,
+ 11,126,235, 69,191,240,180, 99,107,144,121,156, 35, 72, 96, 26,204,173,214,208,244,200, 43,149,174,198,186, 4,233, 17,234,102,
+ 84, 9,160,178,139, 75,123, 92,207,254,120,172,163,181,231, 30,227,196,213,170,115,134,102, 69,137,122, 36,173, 18, 15, 86,205,
+170, 12,192,186,226, 60, 58, 47,147, 77,125,120, 85, 74,118,238, 91, 94,249,155,111,120,249, 49,114,210,185,121,205, 83, 51,161,
+105,134,171, 86, 99,150,136, 11,169,100,252,142, 56,178,172,101,182, 78, 37,169,172,189, 30, 29,180,116,152, 9,107,165,245, 33,
+ 21, 24,250,108, 72,214,254,209,142,221, 55,195, 60, 68, 49, 86,210, 27,235, 82, 57,248,213, 84, 85, 59, 69,200, 43, 95,242,236,
+127,113,246,155,142,126,196, 74,135, 31,205, 66,208, 53,107,215,205,112,179,250,100, 26,167,234,149,113, 68, 42, 71,176, 80,138,
+ 25, 46, 84, 53, 41,152,193,217,123,146,103,171,101,102,226,241,104,210,202, 92,177,142,156,211, 99,215,106,161,254,150,189, 97,
+183,125, 82,249,230,218,123,158,140,159, 0,121,246, 19, 79,249, 79, 23,158,191,108,240, 79,233,151,181, 4,167,170,128, 36,215,
+ 63,102,243,140, 98, 11, 51, 39,185,112, 98, 85, 74,207,237, 44, 67,175,110,114,105, 47,239, 8,184, 5, 45,184, 29,245, 65, 5,
+ 42, 42, 62,173,233, 33,137,169,111,197, 43,118,213,106,197, 43, 69, 48, 15,143,240,227,168, 53,107, 81,209,147, 8, 50,239, 84,
+179,221,154, 95,213,252,225,185,111,157, 27, 14,151, 9, 40,193,137, 93,153,182, 24,215,206,175, 95,179, 62,243,205,252,105,171,
+ 58, 84,187,139,210,139,210,115,183, 51,120,175,167,237, 61, 75,149,137,180, 90,248,148,146,131, 88, 45,188,112, 62,180, 67, 87,
+ 25,154,253, 5, 86, 75,217,243, 36, 84, 45,158, 94,122, 93, 1,217, 26, 65,132,162, 20,200,179,158,124,202,219, 94,247,138,122,
+144,243,145, 54, 38,179,196, 20,105,145, 41,198,118,114,202,105, 79, 10,205,112, 69,208, 92, 56, 67,245,246,149, 17,135, 66,176,
+173,198,178,227,237,206, 60, 15,234,174,102, 74,189,183, 1,103, 85,125,120,135,174, 0,215, 30, 54,239, 92, 71,177,167,172,179,
+192,234,216,176, 89, 87,195, 20,227, 89, 47,125,246, 43, 94,248,156, 78, 64, 62,237,200,193,116,254,178,152, 98,123,242,105, 79,
+146, 98, 20,203, 2, 58, 6, 82,165,253,244, 6, 80,117,153,218, 28,201, 21,203,141, 35,226, 7,146, 46, 77, 15, 87,221,131, 59,
+ 86, 88, 22,175, 29,191, 42,177,199,173, 93, 54,208,170,199,250,235,209, 80, 81,209,130,214, 51, 74, 96,213,128,207,126,198, 83,
+158,250,248, 83,200,234,230, 61, 16,171,236,155,148, 44,197,166,209, 45, 39,111, 45,164, 28,150, 52,161, 1,254,229,232,127, 38,
+102,170,179, 56,178,203, 16,122, 68,222,243, 38, 57,133, 34, 29,235,188,230, 52, 43,103, 84,241,176,136, 20,165,209,191, 59, 87,
+ 93,219,128,160,223,202, 80,140,145,171,124,135,239,252,208, 89,226, 19,183,109,241, 20, 96, 69,210,137,201,233,156,209, 98,235,
+ 63,164,216,206,205, 13, 79,121,252, 19, 58, 58,149,129, 20, 51,152,229,193, 14,146,135,211,172, 68, 43,117, 38,103,241,232,206,
+210, 45, 99,235, 52,111, 95,111, 86, 2, 68,157,151,221,115,226,224,113,247,166,118, 14,244, 72,114,167,102,146, 62, 53, 51,224,
+186, 55,179, 27, 19,226,215, 80, 5, 4,107, 87, 13,154, 65, 3, 48,107,144, 31, 49,179,104, 22,253,136,249, 87,138,173,128,143,
+219,186, 85, 53, 88,143, 23, 84, 82, 17,181,167,173, 54,113,118, 64, 55, 79, 5, 20,205,104,165,128, 46,255,128,214, 24, 88,114,
+ 67,133,128, 96, 77,114,204, 0,159,135, 36,163,153,162, 75,183, 75, 94,203,146,154, 65,158,181, 77,200,227,242, 50, 36,135,143,
+ 99, 46, 54,200,204, 82,107,214, 50, 69,118, 26,212,166, 76, 17,142, 42, 60,233,228,147,154, 65,227,231,207, 63, 97, 51,212,174,
+206, 84, 85,208, 81,178,180,210,117, 37,168, 39,188,164,100, 45,178, 55, 19,143,251,197,247,203,149,105,198,163, 29, 23,119,137,
+153,195,169, 5,200,104, 23,161,118, 77, 59, 57, 61, 37, 71,140, 37,236,177, 65, 69, 16,147,181, 49, 2,210,100, 27,148,162, 21,
+ 98, 87,159,110,214, 39,192,109, 62,113,211,194,225,197,133,131, 11,137, 86,179, 17,203,202,170, 43, 5, 83, 53,221,160,222, 55,
+101,165,228, 33, 61, 78,165,239,123,110, 1, 81,136, 41, 64, 83, 8, 59,195, 81,105,180,203,220,234, 50, 33,230,107,136,154,153,
+244,104,124,189, 52,240, 81, 3, 26,191,126, 8,250,224,190,131,180,132, 48,104,178, 19,179, 72,122,149, 24, 93,191,227,108, 69,
+ 25,192,234, 53,115, 77, 19,246,237,217, 15,241,131, 13, 31,186,147,249,226,114,180,116,106,119,220, 75, 22,169,240,188, 29, 56,
+250, 76, 30,192, 58, 66, 49,132,185,180,193, 46, 47,222, 79,134,160,180, 29,247, 26, 9, 10, 77, 61, 15, 41,236, 6, 91,148,249,
+ 34,117,239,121, 84, 53, 20,129,106,184,230,186,155, 6, 77,211,250,148, 17,163, 89,138, 52,246, 62, 94, 91,141,251, 73,253,108,
+125, 30,115,226,198,197,197,165,241,210,180, 70,245, 52,206, 36,216,142, 60, 23,157,252, 42, 91,217,107,172, 90,105,193, 40,243,
+ 85,165,112,160,107,227, 99, 53,112,110, 18, 36, 3, 49, 45,177, 48,234,148,216,217,218,127, 41, 62,185, 14,230, 66, 55,133, 71,
+239,196, 17, 12,135,131,203,175,184, 49,197, 36, 18,192, 60,227,204, 44, 38, 43,204,253, 25, 17,117, 26,212, 39,192, 98,213,170,
+225, 96, 48, 88, 92, 92, 34, 13, 93,198, 25,203, 6, 48,117, 89,199, 94, 24,239,208,153,165,246, 85,102,148,229,138, 55,107, 87,
+ 90, 33,176,247, 92,100, 45,195,186,161,205,116, 77, 96,118,202,137, 85,242,118,145,142, 83,203,197,188,114,185,178,116,152,199,
+153,222,125,207,131,119,239,126, 48,228,161,115,104,188,234,100,206,100,119,116,103, 40,147, 7,242,252,239,218,113,211, 53, 9,
+ 24, 65,172, 89, 53, 76,198,201,116, 90,215,233,211, 5,235,188,166,126, 79, 43,202, 8,240, 25,170,114,111,254, 31, 75, 8, 92,
+ 16, 77,135,146,235, 40,167,126,189,187,140,101,200,215,200, 99,235,250, 12,147,202,147,149, 94, 94,118, 69,235,174, 32,216, 52,
+205,161,131,139,151,127,111, 39,123,198,170, 41, 25, 87, 51,103,163,116,231,115,230, 12,231,212,126,215, 99,128,210, 72,193,225,
+160,161, 49,209,204, 80,151, 94,162, 10,239,176,206,117,247,126,146, 25, 34,214, 39,129,160,118,198,195,132, 98,254,131,136, 25,
+139,231, 7,105, 69,130,102,168, 3,117, 72, 43, 83,159,152,155, 73,170, 35, 39,168,244,254,155, 62,255,164,194,141, 90,110, 24,
+ 14,135, 55,237,188, 99,231,205,119,105,144, 88, 6, 22,214, 35,198,148, 82,175,183,103,249,120,161,220,231,184,142, 0, 0, 3,
+ 11, 73, 68, 65, 84, 62,247, 7,125,230,113, 71, 77,182, 10,112, 86,166, 39,228,117, 64, 53, 79, 60, 98, 78,221, 19, 60,162,218,
+150,199, 63,228, 73,143,165, 91,222, 19,250,165, 66, 87,165,108, 44, 39,113,182,110,231,195,216,187, 60,121, 6, 1, 96,111, 92,
+ 48, 65, 80,131, 90,178,203, 46,221,113,240,208, 98,163,210,205,197, 98,167, 65,149,176, 46, 82,166,213,118,173,251, 62,136,140,
+121, 47,251,109, 82,245,184, 87,251,110,165, 11,174,105,130, 55, 82,212,228,244,242,243, 14,245,195, 92,167, 79,148, 94,248,124,
+ 19, 17,113, 2,145,143,118,119,153, 24,152, 11, 75,142, 21,172,212,112,217,163, 23,148,170, 97,142, 51, 40,125, 10, 14, 43, 69,
+197,125,132,132, 29, 87,236,220,179,247,160,111,103, 42,221, 52, 44, 26,210, 0,176,172, 65,179,201,226,242,119,163,101, 17,160,
+158,243,153,145, 90,121, 42,175,101,201,251, 73,156,142, 91,227,148,164, 6, 29, 14,155,208, 52,253,244, 22,188,137, 35,151, 55,
+164, 22,215,251,253, 56,116, 44, 67, 99,175,178, 83, 99,230, 58,116,129,157,120,178,136, 80,166,190,149,202,126, 41,191,148, 70,
+105,111,249, 26, 45,142,175,191,230,150, 67, 7, 23, 61,225,144,219, 70,188,140, 90, 29, 83,181, 65,253,206, 62, 0,125, 75,212,
+ 65,197,217,241, 94, 92, 54, 68,235,136,230,156,194,117, 77,211,113, 30, 9, 24,154,193,112, 56,104, 6,170, 33,248,160, 63,233,
+170,104,165,225,160,196,252, 62,113, 32,211, 26,228,200,242,153,102,162,146, 21, 2, 69,206,232,214,167, 40,255, 63,136,242, 44,
+222,238, 20, 99,220,125,247,131,119,222,126,183,247, 62,168,106,244, 22, 22,255, 31, 23,100, 46, 96,177,246,146, 53,200, 82,118,
+243, 43, 84,242,170, 82,177, 54, 53,150,158,186,238,123,105,143, 48,235,249,185,146,199,173,125, 58,109, 59, 25,143,198, 41,119,
+ 73, 64,131,206,205, 13,231, 86, 13,194,160, 41,169,203, 82, 90, 47,189,124,253, 82, 98,159,220, 87,181,188, 34, 80, 88,133, 26,
+197, 95, 74, 25,134, 34, 58, 26, 45,221,117,199,238,253,123, 14, 85, 44, 66, 48, 38, 75,201,162,165,148,204,136,220,134, 2, 38,
+ 34,101,128, 85,143,152, 37,239, 72,146, 89, 19, 61, 43,172,250,199, 12,130,156,113,106,197, 46,117,205,175, 85,106,214,141, 40,
+244,251,196, 54,182,147,246,224, 1, 3,153,138,100,125, 52, 74, 25,200,218,132, 70,155, 16,180, 9, 77, 41,117,213,243,212,139,
+105, 1,136,134, 60,150,164,109,219,241,210,100,113, 97,105,113,113, 52, 30, 77,166,211,232,241, 35,152,231, 97,230, 65,220,165,
+157,166,116,212, 88, 34,140,236,254, 4,179, 6,145, 76, 49, 19, 38,251, 94,108, 5,142, 66,117,249,172, 74, 85,108,245, 76,159,
+ 97, 29,234, 89, 4,104, 51,198,189,223, 42,228,139, 14, 42, 62,137,143,102, 49, 2, 49,150,225,124, 85,228, 93,243, 24,140,149,
+ 29,203, 62,207,179, 90,144,222,120, 73, 15, 27,115,166, 43,229,249,236, 41,101,209,120,147,151,231,187,204,114,206, 48, 58,241,
+ 72,123, 26,148, 45, 84, 47, 72,157,253, 99,230, 59,143, 20, 22,123,220, 50,235,224,190,145, 51,255, 58, 27, 10, 9,178, 9,233,
+ 37,186,114,222, 21,165,197, 19,200, 76,197,106, 6,105,150,233,162,102,133,171,229, 52,165,146,213,235, 43,175, 15, 44,180,108,
+100,147,153, 37, 38, 75,230,138, 83, 36,226,237, 97,137,244,144,221, 64,171, 17,222,246,237,219,151,117, 55, 63,148, 20,222, 79,
+153,196,253,179,188,252, 74, 55, 19,242,255, 1,146, 88, 89, 21,105,223,207, 0, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+ 0};
+
diff --git a/source/blender/editors/datafiles/grab.png.c b/source/blender/editors/datafiles/grab.png.c
new file mode 100644
index 00000000000..44c86d98a09
--- /dev/null
+++ b/source/blender/editors/datafiles/grab.png.c
@@ -0,0 +1,258 @@
+/* DataToC output of file <grab_png> */
+
+int datatoc_grab_png_size= 8045;
+char datatoc_grab_png[]= {
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73,
+ 72, 68, 82, 0, 0, 0, 96, 0, 0, 0, 96, 8, 2, 0, 0, 1, 26,253,208,249, 0, 0, 0, 4,103, 65, 77, 65, 0, 0,177,143,
+ 11,252, 97, 5, 0, 0, 0, 6, 98, 75, 71, 68, 0, 0, 0, 0, 0, 0,249, 67,187,127, 0, 0, 0, 9,112, 72, 89,115, 0, 0,
+ 13,215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 0, 7,116, 73, 77, 69, 7,218, 7, 19, 0, 34, 12, 33,249,187,131, 0, 0,
+ 30,234, 73, 68, 65, 84,120,218,237,124,125,172,101, 87,117,223, 90,251,156,123,239,251,152,153, 55,227,177,141,191,102, 28, 59,
+ 20,140, 13, 24, 40,196, 37,197, 19,104,176,160, 6,183,196,164,161,145, 16, 20, 37,117, 74, 83,210, 34,100,250, 71,171, 68,164,
+165,129, 22, 40,144,180,170, 84,137,164, 74, 84, 41,130,202,106, 11, 77,128, 54,208,164,168, 13,148, 80, 64,184, 96,199, 54,195,
+120, 62, 60,239,235,126,157,115,246,199,250,232, 31,123,239,115,206,125,243,236,121,246, 60,240, 80,113,244,230,206,125,239,157,
+183,239, 58,107,175,189,246, 90,191,245, 91, 27, 79,156, 56, 1, 23,189,246,114,147,121,234, 95,191,247,179,155, 0, 80,238,250,
+187,255,251,192, 3,190,153,255,249, 55,190,240,230,215, 29, 77, 55, 13,203,210, 19, 45, 13, 7, 95,252,232, 63, 61,114,236,133,
+202, 52, 57,247,240,169,147,223,250,202, 67,223,141,127, 83,138,232,127,255,216,251, 7, 75,171,131,229,181,162, 28, 54,227, 39,
+102, 27,143,158, 59,247,248,195,167,207,127,245,161,147,233, 38, 0, 64, 80,114, 21,185, 74,200,187,249,198,246,108,118,102,115,
+114,114,125,235,212,198,118,119, 19,185, 42,184, 25, 5, 31,152,107,235, 55,231,213,250,100,246,196,214,116,105,121, 5, 96, 59,
+221, 20,252,220, 57,107,125,104,124,168,172, 27,207,235,113,213, 76,170,250,235,143,157,206, 42, 64,160, 96, 61,145, 13, 84, 59,
+ 95, 57, 95, 89,223,248, 64, 34, 11,122, 10, 36,158,216, 19, 5, 34,231,131, 15,196, 44,133, 49,119, 60,247,250,238, 38, 23,200,
+ 19, 7, 98,159,190,136,133, 11, 99,124,160,120, 19,238,105,238, 46,245, 58,114,221,205,239,253,220,214,238,191,123,241,115,111,
+250,206,127,250,244,151, 62,246,190,247,253,205,215, 37,101,150, 69,161,170, 44,114,203,177,235, 62,249,225,143, 12, 87,214,220,
+108,227,244, 55, 63,247,237, 83,167,191,244,224, 35,233,166, 63,249,248,251,177, 24,140, 86,214,202,209, 42, 40, 79,206, 60, 52,
+ 62,247,237,147, 79,108, 62,120,242,236,185,237,105,186, 9, 77,161, 28,220,124,203,206, 54,200,206,230,179,205,243,227,217,227,
+ 27,227, 63, 63,179,254,141, 83,231,211, 77, 28, 28,185, 25,185,138,152,156,167,105, 99,207, 79,102, 79,140,167, 79, 76,102,173,
+148, 37,135, 38,216,121,227,189,243,161,118, 97, 90, 55,147,170, 30, 87, 77, 32,234,166,133,125,229,137, 66,160,198,135,218,249,
+185,245,181,245, 46, 80,129,157,101,155, 16, 92, 32,118,204,158,216, 17, 57, 31, 2,177, 42,148,101,209,221,228, 2,249, 64,129,
+ 40, 16,135, 64,129, 57, 16, 35,192,160, 40,158,222,146,218,203,101, 46,241,239,223,251,135,155,183,189,246, 45,207, 68,162,215,
+255,165,151,127,229,223,126,252,191,252,234,125, 0,240, 43,255,225,145, 78,221, 23,253,203,255,250,155, 31,185,225,198,231,153,
+162, 32, 91,219,233,250,124,227,209, 83,143,254,159,199, 55,183,239,187,235,142,223,126,251,237,221, 64,162,250,197, 15,222, 15,
+ 8,198,148,102,184, 60, 88, 58, 56, 88, 58, 56, 24,173, 22,195, 37, 99, 74, 85,102,111,235,173,211,205,244,124, 61, 57, 59,153,
+215, 27,211,234,220,246,244,209,179,235,255,251,225,147,179,249,188, 39,145,194,242,161,231, 0, 2, 0, 98, 49, 48,197, 64,133,
+131,157,249,102, 44, 33,144,159,251,106,220,212,211,202,186, 73,213,108,206,171,245,241,236,212,250,248,193,147,103, 30, 60,179,
+217, 23,188, 4, 0, 17, 18,241,194, 12, 34, 42,172,202, 32,204,236,153,130, 39,182,157,133, 53,155,211,234,220,120,242,189,245,
+205, 11, 53, 80, 2, 0, 7, 43,193,114,104,136, 3,139, 48, 11,139, 16, 75, 96,246,196,214,133,202,185,121,227,198,243,122,115,
+ 58,223,152,204,167,149,253,214,233,141, 11, 6, 66, 96, 95, 83,168,137, 40,176, 16,113, 96, 14,204,148,253,134,245,161,178,110,
+222,184, 89,227,230,214,213, 46, 32,130,168,238, 34, 17,185, 42, 72, 28, 66, 2, 69,195, 21, 31,200, 51, 59, 79,214,123,235,131,
+ 13,193, 19,147, 40, 0, 24, 99, 6,101,217, 95, 69,217,117, 17, 7, 34, 23, 87, 64,252, 98, 14,204,158,200, 19, 57, 74,142, 77,
+ 68, 16, 97, 80,152, 65, 89,188,232,134, 43,119,177,108, 23,130, 11,193, 7,118, 68,158,217, 19,251, 64, 62,144, 15,113, 44,246,
+196,129,133,152, 69, 20, 17, 11, 52,170,186, 60, 26,246, 7,250,193,248,201, 61, 95,199,143, 31, 55,151, 62,202,219,126,235,143,
+ 46,117,136,193,104, 57,238,202,199,143, 31, 47,159,241, 40,247,255,225,121, 52,229,135,223,112,237, 94, 87,255,194, 28, 35,254,
+209,111,126,176, 12,213,231,255,244, 79,223,247,250,171,223,243,233,179, 28,220,211, 27,232, 63,126,232, 55,110,121,254,139, 57,
+184,102,251,236,214,246,119,111,184,114,237,222, 59,110,251,240, 27,175,221,171, 63,186,245,198, 27, 62,245,145,143,150,163, 85,
+ 21,118,243,237,122,251,244,100,253,177,115,219,211,211, 27,219, 91,211,106, 97,137, 32,226,160, 44, 84,149, 88, 84,213, 32, 30,
+ 92, 89,122,207,207,189,241,158,215,188,126,116,240,104, 57, 28,169, 72,176,115, 55,223,170,183, 79, 79,199, 79,108, 76,230,103,
+183, 38,223, 91,223, 94,159,206, 23, 6,250,226, 7,238, 87, 80, 68, 99,202, 97, 57, 90, 29, 44, 31, 26, 44, 29, 40, 71,203,166,
+ 24, 34, 34,185, 58,216,202,205, 54,155,201,153,217,108,188, 53,175,207, 79,102, 79,108,207, 78,157,223, 58, 95,249,133,129,150,
+ 14, 94, 41, 42, 16, 7, 26, 44,153,193,200,152, 66,153,153,107, 38, 34, 95,133,106,187,153,158,155, 85,213,164,106,182,103,245,
+230,172, 58, 55,158,158,217,154,172,143,167,139,143, 86,148, 40,140,128, 0, 32, 76, 0, 16, 56,128,170, 8,179,111,130,157,186,
+249,102,109,221,188,113,211,218,142,235,122,123, 86,109, 76,230,186,155, 27, 81, 80, 85,101, 21, 86,116, 12, 0,113, 24,242,236,
+235,224,230,181, 75,254,104,222,184, 89,101, 39,181, 29,207, 43, 46, 6, 23, 12, 36,194, 28,148, 9,148, 69, 24, 85, 88, 24, 36,
+ 48,185, 64,226,136, 26,231,107,231,231,214,205,173,155, 53,110, 86,219,218,133,239, 92,232, 33, 69, 24,152,132,156,176, 23,118,
+194, 34, 42, 44,202,204,129,217,249,180,225, 55,206,213,206,215,206, 87,214, 95,248, 92, 0, 80,170,144,176, 23,246, 28, 44, 11,
+199, 33,136,133, 68, 2,177,243,193,250,208,184, 80,123,106,156,111,156,183,222, 15,203,114,183,129,152,132,131,144, 99,102, 98,
+142, 62, 63,190, 6, 98, 71,100, 67,112, 68, 62,144, 11,100, 3, 5,226,209,112,176,203,234, 17, 14,194,158,133, 73,149, 68, 72,
+132,184,231,106,163,159, 12,105, 35, 96, 22, 81, 64, 52,187, 14,228,133,131,176,170, 8,139,178, 8,137, 18, 11,145, 4,150,232,
+191,137, 41, 14, 34,170,136, 0, 42,187, 15,196, 34,172, 66, 44, 34,194,162, 34,194, 34, 36,194,196, 36,233, 73, 89, 52,234,216,
+ 32, 18,243, 46, 3, 49,145,136,198, 79,139, 18,197, 47, 17, 33, 85, 98, 17, 81, 17, 81, 21, 80, 64,196,194, 24,222,109,214, 12,
+139, 16, 51,139, 38,225, 69, 89, 52, 13, 29,101,100,102, 85, 81, 85, 80,131, 80, 22, 6, 84,143, 30, 92,221, 57, 16, 69,213,176,
+180,178,228,247,202,209,160, 20,146,122, 20, 0, 17, 17, 13,226, 95,184,230,240, 5, 3, 49,147, 72,188, 53,169, 70,211,112,212,
+ 31, 93, 84, 84, 65, 21, 17, 17, 49,176, 60,147,180,236, 7,118, 29, 59,118,204,192,229,116,225,174,166,254, 3,190,110,127,195,
+223,186,255,179, 91, 79, 35, 54,254, 62, 93,119,189,235, 67, 47,189,231, 29, 0,200,228,255,197,235,174,120,150, 5,122,215, 39,
+ 31, 94, 62,116, 5, 40,252,175,223,255,232, 31,127,226,215,119,198,161,223,143,235,237,119,223,245,142, 55,221,251,156,171,174,
+ 17, 97, 14,214,215, 19, 59, 93,159,143,207,109, 78,231, 39,207,111,253,179,183,189,104,222,216,131, 87, 94, 55,219, 56,179, 75,
+ 96,124,233,215,176, 44,223,121,239, 61,127,251,103,127,174, 28, 29, 48,197, 0, 64,132,136,130,117,243, 45,223, 76,253,124,179,
+153,111,205, 26, 55,173,235,173, 89,189, 53,175, 95,125,235,141,159,253,250, 35, 23, 74,243,204, 5,186,227, 5,207,253,165,159,
+249,235, 47,127,225,237,197,232, 64, 57, 92, 66, 99, 64, 85, 69,132,131,119, 21,185, 58,216,121,104, 38,190,222,110,108, 93, 91,
+ 95, 89, 55,107,236,120, 94,111,204,170, 51, 27,227,179,155, 19, 83, 20,176, 24,235,119,121,218,103,126,245,190, 46,167, 80, 64,
+131,160, 80, 24, 52,166, 40, 7,163,114,184, 60, 88, 58, 80, 14, 87,138,225, 74, 57, 92, 42,202,145, 25, 12,141, 41, 0, 75, 99,
+ 64, 85,148, 3,123, 98,114,236, 45,185, 42,184,121,104,166,193, 78,173, 11, 77, 8,181,117,181,243,179,198, 77,170,102,123, 86,
+ 61, 49,158,157, 92,223, 50, 69,233,156,219,245, 81, 75, 80, 56,114,229, 49,141, 59, 20, 34, 96, 97, 76,129,166, 48,197, 0,139,
+ 65, 81,148, 88, 14,140, 25,152,162, 68, 99,208, 20, 8, 8,170,194, 65,197,147,196,205,217, 83,104,216, 53,228,230,193,206,188,
+111,172, 39, 23, 66,204,239,106,235,231,214,206, 26,187, 61,111,214, 39,179,179,155,147, 89,109,191,125,118,235,201,116, 95, 2,
+ 64, 57, 92,102, 85,108,125, 19, 22, 6, 11, 48,198, 24,163,136, 40,170, 64, 44,140,136, 0, 8,160,170,162,194,202,196, 28, 36,
+ 56, 14, 13,249,154, 93,229,201,187,152, 15,133, 24,109,132,198,250,185,115,243,198,197,156,243,252,246,116, 92,213, 78,240, 41,
+140,161, 4, 0, 64, 99, 64, 84,211, 78,140,202,130, 2,106, 84, 8, 16, 5, 98, 48, 8, 16,111,136,251, 48,135,168, 27, 14, 13,
+145, 99, 22,159,195,148, 24,169, 88,231,235, 28,150, 77,106, 59,158,213,155,211,249,184,110, 14,173,174,124,229,145,211, 23, 19,
+ 72, 85, 69, 84, 68, 65, 84, 85, 84, 1, 20,226, 63, 16, 80, 4,144, 36, 77,212, 77,156, 41, 14,204, 66,194,196,154,147, 86,118,
+129,172,167,198,251,198,133,198,249,202,250,153,181,179,218, 78,234,102,214, 88, 68,124,232,220,214, 83, 47,151, 18, 0, 84, 88,
+132, 84, 24,148, 53, 5, 9,162,202,160,162, 34,209,110, 65,147,172,241, 85,114,168, 66, 81,166, 8,244, 69,245,248, 96,227,148,
+ 57, 55,143, 17,112,109, 43,235, 61,241,129,209,112, 82, 53, 23, 23, 72,132,132, 73,133, 64, 72,132,132, 89,133, 52, 69, 10,233,
+ 18, 1,133, 36, 74, 82,166,164,184,130,152, 91, 68,209,250, 16,101,170,157,175, 93,168, 93,168,156,175,188,183, 33, 20,136,223,
+ 58,187,117, 81,135,146, 52,164, 81, 38,246,241,141,168,136,198,200, 12,146, 4, 89,186, 54,152,139,129, 33, 9, 7, 18,226,148,
+210, 59, 34, 27,200,134,224, 66,176,158,108, 8,206, 7,239, 73, 88,150,134,131,198,249, 61, 9, 36,236,149, 73,201,171,132, 24,
+ 99,169, 66, 12,251,162, 52,172, 42, 81, 14,150, 52,157, 57,138, 35,102, 98, 14,209,168,137, 60,177, 11,228, 66,124, 13, 62, 80,
+ 96, 33, 85, 64, 40,138,114,215, 20, 97, 23,112, 70,153,132,189, 72, 16,142, 79,174, 73, 2,137,162,168,112, 12,255,180, 11,119,
+185, 53, 32, 33, 78, 0, 74, 52, 35,162,148, 48,196, 71,138, 66, 20,104, 16,247,180, 7, 36, 13, 9,249, 24, 8,179,128, 72,154,
+160, 24,198,102,249, 58, 67, 78,193,119, 43, 77,126,211, 15,132, 69, 85, 52,174, 83, 48,136,140, 32,194,136,120, 81, 37, 25, 0,
+136,121, 16, 75,146,134, 69, 88,211,103, 11, 71, 81,226, 15, 23, 2,111, 18, 78,241, 50, 51,179, 80, 43,110, 94,140, 0, 0, 8,
+136, 80, 24, 44,208, 16,203, 45, 55, 92,189, 39, 13, 49, 75,212, 68,178,152,100,197,144, 68, 73,249, 72,171, 33,205,194, 41,101,
+249,168, 63,191,121,105, 34,128, 65, 44,140, 41,140,225, 66,152,101,117, 96, 46,170, 36, 3, 0,221,179,230,149, 44,162, 44, 76,
+ 61,173, 72,155, 51,228,169,229,156,129,177,168,196,220,135,133, 99,118,158, 63, 51,230, 40,113,119, 68, 68,102,121,193,197,148,
+ 20, 53,164,241, 17, 69, 65, 64,132,149, 69, 20, 32,155,112, 92,113,210,218, 80, 76,186,122,153,141, 80, 50, 56,101,142,235, 34,
+249,117, 80,141,251, 95, 76,122, 84,245,192,176,184,136, 64, 8,240, 63,190,187, 30,159, 41, 13,147, 7,147,252,109,235, 31,163,
+219,150,180,167,137,104,187, 30,227,132,130,168, 97, 65, 86,195, 88,114, 33,140,194,133,128,106,193,130,170,162,138,136,183, 61,
+111,117,102,119,143, 61,214,214,214, 46, 51,188, 49,230,102,151,143, 48, 39, 78,156, 48,184, 71,135,245,131,186, 46,175,204,245,
+114, 17,232,250,219,238,104,115,232,103, 95,160, 95,252,196,151,111,126,197,107, 53,195, 78,207,166, 64, 47,190,251,109,247,127,
+110,243,138,235,111,254,147,223,121,255,179,156, 74, 23,229,240, 61,159, 62, 11,136,160,208, 71,189,159, 29,129,126,230,215,126,
+247,185, 63,249,134,152, 56,156,252,218, 31,115,240,207,178, 81,127,245,129,127,131,168, 49, 41,253,253,127,248,166,239, 75,110,
+255,164,245,149,178,252,224, 47,255,226,157, 47,186,141,131,109,198,103,215,183,183,222,255,201,207,127,253, 27, 95,250,119,127,
+247, 53,111,255,215, 95,252,221,191,127,215,190,229,246, 79,125, 93,125,197,145,127,249,238,119,221,126,203, 11, 77, 57, 20,114,
+228, 42, 14, 78, 65, 7,101,241,119, 94,255,147, 95,126,232,228,111,255,183, 47,255,206, 59,127,234,252, 35,223,252,190, 11,244,
+ 11,247,220,253,238,183,190,117,176,124, 8, 16, 85,136,156, 13,118,230,235,109, 59, 59,223,212, 85,109,157, 11,225,192,104,112,
+245,218,193, 93,165,217, 55,129,174,189,242,138, 7, 62,240, 79, 14, 29,189,174, 40, 71,136,168,202, 28, 28,249,154,234,153,171,
+183,237,124,189,174,231,211,198, 77, 27, 59,169,154,218,250,107,214, 86,206,247, 24, 5,251, 41,208,199,254,193, 59, 79,188,226,
+149, 75,171,107,166, 28, 26, 68, 81, 17,114, 20, 28,185, 42,212, 83, 95,143, 93,181, 89, 59, 59,175,221,172,177,179,218,206, 26,
+ 59,105,108, 81, 14,158, 50,149,126,218,166, 90,188,227,238,187,222,113,207, 27, 15, 29,190,186, 24, 46,155,162,140, 69, 98,166,
+192,228,217, 55,193, 86,100,167,190,158,184,122, 92, 59, 87, 91, 63,183,110, 86,187, 73,109, 39, 85, 51,158,215,214, 63,105,130,
+ 86,170,106, 97, 76, 81, 24, 80, 0,140,105, 97,194,182,211, 29,133, 25, 13,202,149,209,232,206, 23,223,242, 75,247,220,117,244,
+138,107,203,229,181,193,210,138, 41, 71, 69, 81, 0,162,170, 10,179, 80, 96,114,236,155, 96,231,212,204,124, 51,118,118,158, 51,
+124, 55,107,146,134, 38,243,102, 92, 53,115,251,228, 2,189,237,175,252,196, 43,111, 60,170,125,192, 10, 83, 17,193, 20,131,193,
+112,105, 48, 90, 45, 71,171,229,112,165, 24, 46,151,195, 37, 83, 14,141, 41, 77, 81, 2, 26, 85,128, 8, 55, 80, 16,178,228,154,
+224,230,100,231,190,153,120, 87, 55,177, 4,100,253,220,250,170,113,243,198, 78, 43,187, 61,175,107,235,206,142,231, 79, 42,208,
+112,184,116, 96,117, 13,162,126, 98,229,192,148,166, 40,177, 28, 20,197,168, 24, 12, 77, 49, 50,131, 97, 81, 12, 77, 89, 98, 49,
+ 64, 99, 0,141,170,130, 6, 21, 17, 38, 97,207,222,145,175,201,213,100,103,222, 78,156,247,206,251,198, 83, 42,107, 57, 55,119,
+110,214,184,105,211, 76,106, 91, 26, 67,187,129,121,121, 66,202,225, 96,233, 64,130,207,192, 68,152,204,152, 65,252,120,147,190,
+ 74, 99, 10, 68, 3, 49,215, 7, 17, 85,136,137, 9, 5, 14, 13,123, 75,190, 34, 59,247,118,230, 67,176, 33,196,106, 91,227,125,
+237,124, 99,125,149, 43,138, 85, 99,245,201, 45, 26, 0, 74, 52,165, 41, 71, 25,218, 55,128,104, 76, 97,138, 18,176, 68, 44, 16,
+ 77,139,153, 25, 1,192, 88, 11, 82, 21, 22,102, 33,207, 20, 17,180,134,236, 60,184,202, 19, 57, 31,108, 32,235, 67,227,124,227,
+ 66,227, 35,148, 22,230,214,205, 27, 27, 88,206,108,111, 63,165, 64,136,104,138,182,214, 0,104, 16, 13, 0, 2, 42,128,130,178,
+ 10,128, 42, 8,230,242, 86,204, 51, 72,153,152, 28,147, 99, 87,147,175,200, 55, 46, 66, 68,145, 82, 20, 66,130,210, 34,207,204,
+249,202,186,202,249,209,160,156, 55,238,169,193, 6,196,180,215, 1, 42, 40,138, 42,130, 50, 10,196,194, 20, 26, 6,200, 80, 65,
+196,134, 98, 54,198, 94,130,231, 80,147,175, 41,248, 16,137, 21,129, 60,145,247, 17,148, 33,231, 67,227, 67,227,124, 92,252,158,
+248,224,202,242, 69, 19, 69, 4, 4, 80, 0, 17, 65, 68, 81, 64, 16, 49, 6, 85,149, 81, 81, 13,182,170,209,152,100, 51,169,132,
+ 56, 95, 18, 26,138, 64, 12,115, 32,246, 28,129, 24,242,129,188, 15, 81, 38,235,169,113,193,134,128, 10, 15, 94, 80,250,221,165,
+ 54,173, 2, 10, 10,160, 40,162, 0, 10, 2,128, 59,160,210,156, 65, 74, 2,215,216, 51,121, 97, 31,193,151, 88, 15,205,229,213,
+200,103, 73,232,140,163, 8,242,145, 15, 52, 40,139,139, 98, 86,209, 83, 43, 38, 88,161,205,202,179, 95, 82, 73,224,103, 76, 92,
+ 35,188, 17,151, 58,115,172,177, 18, 73, 96,162,150,102, 19, 25, 49,129,114,249, 56, 56, 10, 46, 16,139, 46,141, 6, 23,133, 99,
+202, 8,193, 2, 8,100,148, 12, 53, 42,109, 33,159,142,248, 43,168,136, 80,188,145, 50, 40, 67, 73, 61, 29,107,177, 99, 58, 82,
+170, 71, 7, 34, 5,240,178, 7, 4, 45,205, 81,134, 83,162, 14,226,194, 86,149,136,115,170,228,237, 4, 52,237, 45, 18,235,207,
+ 26, 75,243,137, 17,197, 28, 18, 71,138, 2,137, 15, 89, 91, 68,196, 82, 26,124,124,123,190, 7,124, 40, 42, 67, 25, 84,128, 89,
+149, 52,163, 83, 73,154, 8, 45,100, 64, 56,190,230, 98,177, 18, 51, 9, 39,162, 86,180, 39, 98, 79,146,138,246,169,116,207, 44,
+ 50, 40,204,120,182, 23,129, 32, 62,117,212, 13,129, 80, 2,101,133, 21, 50,244, 33,173, 52,144,200, 15, 25, 86,139,245,120,162,
+244,217,145, 76, 69,194, 9,105,140, 82,138, 0,192,174, 20,132,221,119,251, 56, 53, 18,129,243,196, 38,136,248,144,136,102,152,
+ 63,130,213, 10,137, 38,144, 57, 25, 45, 16, 27, 33, 47,138, 2,197, 73, 36,137, 98, 49,139,170, 58,214, 61, 9, 4, 93,193, 32,
+ 66, 81,148,225,158, 12, 2,181, 8,117, 6,135, 59,244, 51, 11,145, 20, 19,191, 36,179, 45, 18,231, 66, 68,212, 32, 86,158,247,
+136,194, 38,251, 85, 77, 0,126,146, 48, 1,248,202, 34,173,221,168,104,198, 67, 85,242, 71,182,239, 51,136,214,209, 17,226,195,
+ 41,168, 49, 56,175,220, 30,167, 44,174, 35, 6, 97, 16, 86, 0, 81,145,108, 61, 59,117,211, 74,163,105,217,199,210, 2,101, 66,
+ 67,114, 4,153, 46,145,181, 11, 6, 49, 48,239,117,202,116, 1,105,133, 22,213,203, 53, 24,200, 76,142, 92, 84, 80, 97,238, 0,
+ 90,201, 44,148, 22,129, 84,214, 14,141, 5, 69, 0, 52, 6,141,217,243,148,101, 27,138,115,164, 73, 31,113,226, 68, 57, 3,140,
+ 73, 26,101,238,102, 45,163,156, 45, 39, 70, 37,253, 5,180, 94, 31, 50,251,106, 79,248,144,170,128, 80,156, 22,141, 97, 53,128,
+198, 32, 67, 19,196,153,191,226, 22,220,250,198,182, 16, 19, 39, 17, 50,206,222,121, 44,200,232,185,170, 14,246,166,161, 84,198,
+ 85, 73,142,184,251,252, 60, 96,222, 62, 52,227,173,209,232,187,122, 67,170, 89,165,173, 16,210, 75, 10,208, 35, 38, 12, 0,176,
+182,178,180, 39,129, 68,163,249,117, 15,157,252,146,198, 72,172, 67,230,123,181,179, 84, 85,145,172,216,254, 10,144, 12, 49,167,
+128, 15, 49,194,152,135, 87, 71,123,211, 80,164, 43, 33,228,226, 38, 10,180,168, 52,104, 23,118, 68, 17, 65,242,207,115, 65, 77,
+219,204,169,181, 27,109,235,201, 25,204,143, 5,140, 61, 98,140,218,243,197,237,107,222,188, 32, 46, 58, 88, 64,208,147, 28,201,
+143,231, 39,129, 60,205, 10,185, 14, 20,165, 65, 68, 64,100,145,195, 7, 86,246, 98,212,105, 79,111, 45, 64,164,191,121,117,179,
+211, 77, 25,128,100,228, 95, 58,251, 74,186,137,102,151, 43, 10,128, 49,145, 65, 84,213,227, 87, 28,218, 83,248, 17, 13, 85, 20,
+ 90, 63,212, 70, 27,209,214,119,108,245,218, 26,182, 46,252,182, 21, 26,186,213,142, 8,216, 22,217,151, 6,229, 30, 55, 87, 21,
+129, 68, 14,139,190, 39, 70, 36,162,186,224,178,219,121, 76,114,100,195,234,166, 44,191, 73,147,134, 8, 49,217,139,105,132,168,
+ 96,107, 97, 79, 62,101,144,164,137,182, 9, 89, 44,233,102,176,175,131,228,156, 36,251,115, 17, 1, 16, 5,238,205, 42,180, 70,
+148, 23, 89, 86, 18,172, 46,141, 46,102, 67,208, 69,132,109, 13, 47, 89, 73,210, 92,183,218,251,166, 45,162, 29,243, 64,211,163,
+180, 90,132, 76, 68, 0, 84,232,149,167,110,188,106,237,162, 70,157, 22, 81,122,250,152, 21,138, 0,196,159,180, 17, 35,104,252,
+201, 14, 27,135,150, 13,209,174, 11, 88, 88,255,138, 0,208,166, 48,135, 46,166,161,242,212,184,206,163,129, 36, 95,221,149,204,
+122,159,221,250,158,174,106,214,149, 68, 69, 89, 81,196,176,160,168, 97, 44,184, 24,196, 98,153,150,138, 34, 70,101, 32, 26,105,
+ 38,199,142,193,174, 21,159,196, 60, 57,113,226,196,246,246,246,120, 60,190,220,202, 66,207,238,165,170,135, 15, 31, 62,114,228,
+ 72, 9, 0,147,201,228,212,169, 83, 63, 82,202,142, 11, 17,143, 28, 57, 98,126,164,136, 31,178,250,230,179,109, 53,230,208,213,
+ 55,252, 72, 65, 59,175, 3, 71,175,121,245,125,191,126,255,103,183,174,121,254, 75,167,231, 31,127,150,139,137,151,207, 53, 88,
+ 94,125,243,251,254,253,177,151,188, 10, 20, 55, 79, 62,248,175,222,242,188,122,188,241, 3,173, 37, 94,158,215,241, 23,191,234,
+167,126,225,215,174,125,193,203, 32,102, 53, 10,143,125,229,243,159,250,199,111,249, 62, 86,238,126, 40,156,203,241,151,220,249,
+218, 95,254,192,209, 99,207,203, 5, 20,136, 29, 33,159,249,141,251, 30,252,194,167,246,179,112,247, 67,119, 93,117,211,173,111,
+249,231, 15, 44,175, 93,133,170, 41,249, 81, 5, 68, 13,225,247,222,253,250,179, 15,125,237,162,120,249,255, 23,142,118,101,233,
+150, 99,215, 29, 92, 26,148, 6, 69,116, 99, 58,255,246,227,231, 93, 8, 0,176,254,216,131,191,245, 55,158,127,213,205,183,253,
+252,135,254,243,104,117, 45,102, 96,231,190,243,181,223,251,149,187, 84,101, 47, 5,133, 31,178,235,185,215, 95,123,235,143,223,
+124,226, 37,183,191,234, 37,183, 31, 88, 61,136,166, 96, 97, 9, 94,216,147,111,200,213,161, 25,187,102, 90,187, 80, 91, 55,174,
+234, 63,123,236,204, 3,255,243, 27,235,143,126,235,227,247,222,252, 99,127,241, 53,127,237, 31,125,226,225, 47,125,230, 15, 62,
+252,247,246,136,227, 93,222,190, 3,160, 44,203,227,207,185,234,157,111,126,211, 79,255,196, 29,195,165, 3, 88,148,198, 20, 0,
+ 24,177, 50, 38, 98,246, 66,158,189, 37, 95,147,175,131,157,120, 87,251, 64, 62, 4, 79,172, 10, 63,118,229,145,183,222,249,210,
+135,206,109,253,193, 87, 31,252,238, 87,191,240,241,123,111,218,187, 0,151,169,130,126,254,181,175,190,251, 47,191,242,166,227,
+ 55, 29, 62,116,184, 28,142, 0, 11, 52, 38, 86, 23, 99,237, 69, 57, 48, 17,147, 87,114, 20, 44,251, 38,210, 4, 66,168, 83, 29,
+204, 83, 19, 66, 99,195,220,249,198, 57, 79,188, 84,192, 45,215, 30,253,246,217,205,167, 37,201,101,161,160,107,143, 30,121,197,
+ 11,110,121,237, 29,175,120,249,173,183, 30, 94, 59,138,229, 16,208, 20, 69, 25, 65,165,132,182,112, 68,190,131, 16, 9,249, 92,
+ 83,181,228, 27, 10, 53,251,218, 7, 31, 2,249,182,246,236,125, 29,168,182,174,106,220,180,182,179,198,214,214, 47, 45, 45,173,
+174,172, 84,117,125, 89, 43,104,121, 52, 60,124,224,192,221,175,124,249,207,190,230,196,117,207,185,206, 12, 87,140, 41,139,193,
+ 8,141, 65, 52,128, 24, 1, 37,133, 72, 76,206,124,237,174,153,197,113,112, 18, 28, 83,195,190,166,224, 2,199,179, 59,226, 49,
+ 31,193,231,130,124,108,151,152, 53,110, 90, 53,227,170,153, 54,214,123, 39, 34,151,151, 5, 29, 62,176,250,211, 47,187,237,213,
+ 47,121,209, 77,215, 93,127,248,240, 21,171,171,135,138,193,168, 40,135, 16, 25, 28,133,129, 88,245, 64, 76, 90, 17,134, 72,252,
+ 79,229,101, 74,124,146,224,133,189, 4,199, 73, 53, 13,113, 8,148, 74,188, 33, 87,118,163,118, 92, 72,237, 54,149,117, 51,235,
+ 38,117, 51,174,234,202,250,192,218, 88,251,244, 20,164,170, 47,251,241, 99,127,245,133,199, 7,104, 6,101,177, 20, 11,143, 17,
+130, 67, 8,204, 34,226, 3,139,170, 11,164,160,204,130,104,136, 25, 17,134,101,105, 16, 86,150, 70, 43,163,209, 21, 7, 15, 28,
+ 90, 93, 61,124,232,224,149,107,107,203, 75, 43,229,112,169, 24, 44,153,114,132, 69, 89,148, 67, 83,148,104, 74, 52,133, 49, 6,
+ 18, 86,157,122,175, 32,117,245,136,170, 0,167, 94, 35,142,218, 33, 47, 28, 34, 33, 64,130, 99,178, 18, 28,145,101,226, 32, 28,
+136, 57, 23,192, 19, 75,128,200,250,216, 29, 21,233, 19, 97,110,179,249, 84, 86, 85, 55, 42,251,116, 39,184, 84,128,219,111,186,
+254,206,155,175,222, 89,208, 71,192,132, 44,199,111, 98, 65,160,192,162, 0, 44, 76, 81,160, 41,208, 12,138,162, 68, 51,192,162,
+ 64, 83, 22, 69, 25,223,152,162, 68, 44,208,164,102,128,200,103, 65, 52,237,112, 29, 38,216, 21,222, 89, 83, 61,149,242,106, 10,
+177,191,132,131, 23,178, 28, 44,115,232, 74,167,162, 68, 28,152, 2,245, 56, 20, 68,214,167,245, 85,197, 70,191,218, 78,234,102,
+ 90, 91, 98,134, 98,176, 61,171,158,182,130, 0,160, 28, 44, 45,173, 94,209, 86,199, 16, 90,144, 52, 34,202, 6, 17,193, 24, 68,
+131,145,196, 20, 21,132, 6,177,192,162,192,184,197, 24,147,222,160, 1, 52,198, 20,136,168,128,136,168,201,173, 8,100, 20, 53,
+ 97,181,210,182,238,177, 40,229, 5, 21,132,130, 68,171, 33,207,100,133,124,219,253, 31,105, 19,212, 53,218, 39,243,113,129, 2,
+165,230,186,218,167, 70,182,202,218, 89,237,102,181,179, 62,172, 29, 60,248,213, 71, 30,127, 6, 46,162, 4, 5, 44, 7,197,112,
+ 73,164,237, 73,140,255,226, 33, 57, 24, 57, 86,185,139,189, 83, 68,182,139, 86, 59, 89,149, 9,178,228,216,175, 46, 28,145,114,
+205,133,173, 88, 79,200,116,141,228,131, 41,182, 55,106,103, 56,142,201, 9,133, 68,110, 97,166,246,144, 5,230, 86, 65,137, 96,
+194,145, 78, 66, 46,132,198,147,245, 81, 59,110,214,184,121, 99, 27,239,135,131,193,247, 54,198,252, 52,221,115,103, 65,136,133,
+ 41, 6,136,209,128, 22,214, 24, 66, 34,161, 1,160, 65,163,198,180,223, 66,215, 54, 41, 32,177,168,162,209,100, 0, 88,219,182,
+ 74, 72,149,196, 92, 72, 74, 28, 5,137, 36, 23, 14,170,172, 76, 76, 65, 37,106,199, 9,249, 88,101,207, 60, 18, 97, 81,166,124,
+ 4, 5, 51,145,120, 38,202,172,150,220,192,150, 26, 51, 27, 31,230,214, 85,141,171,172,107,124, 48,198, 8,192,250,100,254,204,
+ 54,153, 50, 23, 65,140,162,166, 39,148, 88, 69, 74, 96, 90,230, 50, 70,118,165,130, 10,128,137,197, 12, 52, 38,118, 68, 25, 52,
+146, 22, 36,232, 78,197, 40,244,234, 17,137, 79, 34,170, 26,251, 13, 89, 36,196,198,195,212, 4, 42,156,186,162, 56,243, 36, 88,
+ 56, 58,157, 72, 32,145,180,109,197, 14,191, 64,228, 3, 71,178, 86,166,182,249,218,250,202,249,198,123, 85, 88, 25, 13, 30,122,
+ 98,251,153,153, 79,127,155,143, 15,143, 8,169,226, 10,144,190, 67, 80, 85,142, 55,168, 32,128,129,200,145, 67,100, 73, 37, 93,
+206, 0, 2,102,157,166,146,120,174, 11,101,151,204,185,215,140,218,206,216,220, 31, 75, 93, 31, 86,219, 92, 40, 18,233, 9,129,
+153,123,103,143,180,175,113,107,119,158, 29,133,200,253,171, 83,171,168,119, 62,136,192,176, 52, 13, 20, 79, 77, 73,220,107, 28,
+164, 8,152,171, 91,201, 6, 68, 34,163, 33,106, 48,173,154,164, 8,108,249, 0,176, 80, 46,210,174, 91,184, 45,148,165, 14,181,
+124, 32,141,138, 10,137, 16,196, 61, 43, 21,179, 68, 69, 41, 53, 99, 50,245,232, 52,196, 18, 36,241,163, 66, 98, 33,137,239,197,
+ 62, 46, 5, 62,100, 29, 89, 23,226, 78, 79,194,133, 49,197, 96,248,205,199, 78, 95, 74, 28, 87,182,171, 1, 59, 42, 68,222,106,
+ 16, 32,183, 92,182,197, 82,192,254,127,138,169,180, 11,105,109, 73,178,188, 24,176,162,170,228,218,112,102,106,165, 72,167,173,
+240, 71,226, 65,108,221,139,212, 8,226,244,202,204,113,137, 81,118,207,137,160,149,220, 51,185,220,247, 28, 41,155, 54,157,228,
+ 69,196, 12,128,163, 97,249,248,230,228, 18, 3,221,178, 91, 18,157,179,200,204, 5,129,196,135, 73, 70, 17,123,220,251,206,165,
+251,227,222,210,202,181,213,104, 53,145,131,209, 85,147,117,177, 96,220,182, 58, 70,214, 15,247,187,191, 51,143, 45, 55,205, 50,
+ 83,164,249, 17,133,216,243,156, 73,182, 46,219,145, 39, 14,204,162, 90, 22,133,168, 25,215,110, 63, 20, 4, 29, 87, 66, 65, 50,
+161, 35, 82, 36, 0, 85, 20, 0, 58,134,103, 94, 62,137, 58,145,119,168,174, 46, 47,208,145,115, 0, 58,162, 67,159, 53, 18,107,
+235,192, 57,136, 78, 45,160,154, 14,221,225,190,123,102,141, 62, 40,196, 83,144,162,247, 9,236,219,198,231,192,222,147, 39,138,
+145, 17,139, 34,226,176, 48, 91,214,135, 39, 39,176, 63, 13, 5,105,199,153, 16, 0, 5,137, 79, 40,152,137, 84, 57,132, 17, 85,
+ 69,200,171, 6, 34, 83, 22, 58,230, 78,207,154, 20,178, 25,197,241,165, 95, 89,143, 41, 87,164, 72,118, 13,242,185, 77, 54, 17,
+248,114,100, 24, 73,190,220,182,130,119, 76,205,184,202, 56,169,198, 83,164,108,138,170,148, 69,177,178,186,242,103, 39, 31,187,
+244, 92, 50, 47,177, 68,121, 77, 90,136,110, 53,211, 42,162,127,149, 24,224, 73, 62,163, 33, 83,153,211,226,234,104, 66, 61,155,
+132,182, 97, 23,250, 77,186,137,220,210,210, 13,165,127, 10, 20, 75,236, 26, 94, 88, 98, 34,185, 51, 62, 25,142, 39, 74,244,218,
+ 16,149, 69,137,161,168,138,198, 12, 74,115,102, 92,239, 75,178, 29,151, 88, 58, 15, 66,115, 67,116,203,183,105,125, 7, 44, 50,
+183,180,167, 14,109, 9, 56,189,149, 6,153, 41, 18,211, 45,232,233, 53, 17,146, 4,164,245,211,169,217, 92,120,193, 1,101,254,
+172, 68,111, 29,151, 88,235,179, 53,176,120,106,237, 75, 83,103,185,106, 89, 20,195,225,232,228,247, 30,223, 55, 5,105,203, 64,
+ 2,105, 57,127, 32,220,197,117, 29, 71,168,231,108,210, 62,215,177, 94, 22,237, 72, 59,166, 33,128, 72,199,105,218, 65,103,235,
+ 72,180,204,209,142,162, 31,105, 79, 6, 75, 17, 16, 73,123, 2, 68,246, 77,156,200,208, 18,143,152,148,116, 68,152,193,185, 11,
+162,186,127, 22,148, 25,254, 93, 44, 23, 77, 38, 55,168,107,251,120,157, 67,207,235, 82,251,250,202,111,114, 79, 69, 10, 19,163,
+ 57, 73, 38,245,102,107,106,137,198,194,153,144,220,158,105, 38,241,136,135, 54,255,106, 13, 42, 49,179,243, 73,110,137,217,158,
+143, 43, 3,131,102, 80,150, 27,211, 70,247, 81, 65, 45, 5, 89, 69, 64, 89, 85, 65, 88,148, 33,138,221, 90,132,244, 20,209, 87,
+ 16, 68, 94, 90, 75,192,234, 49,169,186, 29,189,231,131,160,199, 91, 19,237, 24,198,137,209, 44,172,210,242,123,169,119,174, 1,
+ 39,174,169,178, 42,119, 39,215,101,230,162, 2, 36,208,193,120, 98,216,167,171, 76,248,140,136, 68,237, 72, 60,165,134, 53,158,
+ 90,145,142,234,203,100, 64, 93, 92, 62,253, 39, 95, 52,168, 86,230, 54,124,208, 11,136,162,241,193,184,117, 67,153,105,157,218,
+ 29,210,129,121,221,241, 15,153, 0,205, 57,164,236,113, 58,115, 80,159, 88,172, 42,251,167,160, 24,227, 68,130,187, 70, 29,197,
+ 55,241,184, 28, 5,136, 13, 65,189,173, 42,175, 17,104, 41,212, 49,218,217,161,178, 78,119,249,152,164,236,213,218, 86,135, 72,
+244,206,129, 34, 36,141, 40,244, 76,166, 59,191,131,219,131, 53, 22,248,144, 11,232, 67,196, 91, 84,116, 63, 21, 20,139, 6,217,
+ 55,147,182,204, 82,200,241, 93,247, 77,118, 71,210,174, 44,216, 65, 26,236, 44, 8, 22,131,230,158, 41,181,116,230, 54, 2,234,
+ 36,104, 25,218,210,181, 29,236, 36,253,102,162,116, 14,185, 58,240, 37,149,210,246,143, 77,216, 58,105, 78,199, 65,165, 51,111,
+250, 43, 8,178,163,129, 69,154,102,219,187,208,134,127,176,131,245,221,210,114, 85, 46, 32,157,119, 58,234, 90, 65,186,243, 84,
+ 22,104,174, 11, 36,223, 54,112, 91,168, 46, 38, 60, 34,125,254,202,104,176, 95, 10, 50,201, 30,152, 19, 42,220,211, 75,231, 83,
+ 23, 44, 38,247, 32,166, 7,128,158, 99,210, 5,238,123,159, 9,222,139,163,210, 99,199,182,162,222, 81, 46,173, 26,165, 11,237,
+ 51, 53, 92,122, 1, 88,175,191, 32,162,195, 45,184,137,152, 90, 38,142,172,174,152,125,226,164, 26, 72,217, 18,165,254,148, 5,
+ 95, 2,121,193, 67, 62, 55,171,147, 79, 85, 21, 53,167, 94,216,182,176,244, 40,214, 34,139, 13, 23, 11,111,122, 39, 17,101, 51,
+ 17,145, 69,101,246,119,128, 69,202,119,162,175,228,202, 66,215,248,160, 32,170,195, 2,175, 90, 59,176,175, 22,148,143,147,138,
+ 84,237,238,169,122, 12,255,174, 81,170,157, 71, 78,191,144,236,119,186, 59,187,130, 78, 78,124,243,189, 59,168,251, 93,254, 33,
+189,195,212, 18, 53,187,205,229, 90,160,160, 93, 84,109,171, 3,230,119,128,136, 96, 64, 85,137,249,166,171, 14,239,159,130,160,
+199, 80, 7,237,123,150,206, 28,180,163,119,199, 12,164,211, 96, 86,113,127,167,207,198,176, 16, 49, 94,120,114, 82, 34,174,119,
+227,195, 5, 43,171,159, 3,107,223,144, 16,219, 51,157,192, 24,211,150,150,210,159, 50,223,124,205,209,125,116,210,201,178,211,
+174,212,182, 58,180, 45,100,121,155,111, 59, 86,226,137,189,189,134,128,246,222,244, 76,253,113,118, 16,250,115, 83, 72, 58,238,
+ 46, 38,129, 45,149,191, 83, 51,162,118,219, 97, 91,205, 76,170,137,135, 24, 27, 4, 99, 48, 54, 19, 42,166, 99, 32, 21,128, 85,
+ 15, 47, 15,151, 71,131,198,133, 75,181,160,232,104, 88,186, 94,186,222, 36,182, 30,185,127, 67,151,133,239,136, 3, 83, 16,216,
+107,231, 72,171, 15,250,187, 53,116,141, 59,208, 51,194,252, 19, 1, 76, 3,182,163,236,240, 65,154,131, 66,204,149,169,222,114,
+139, 93, 24,170, 90, 24,188,234,130, 67,155,159,217, 18,235,186,141,114,108,154,155,175, 68, 58,173,117, 25,194,194,247,253, 80,
+165,215,184, 1,189,118, 10,209, 29, 45, 67,253, 46,143,197, 93, 60,194, 32,186,120,231,194, 81,103,139,177, 97,139,144,183,197,
+108,104,171, 81,162,215, 28, 62,112,137,219, 89,116,210,144,207,194, 4,233,247,205, 40, 72, 23,254, 44,100,164,189, 46,173,228,
+ 65,219,168, 47,118,228, 73,215,233,181,176, 3, 74,191,171, 74, 22,246, 53, 88,216, 25,122, 86, 41, 11, 71,192, 45, 58,162,158,
+ 51,202, 77, 60,109, 31, 95, 52,199,235,142,174, 93,250, 54,223,206,115,182,161,188,210,242, 83, 66,182, 44,136, 97,139, 74,119,
+ 86, 96,215,238,215,158,117, 42,253,246,183, 5,251, 74,237,105, 11, 46,188,181,151,206,112,186, 4,165, 85,142,228,226, 99,187,
+202,186, 88, 17,119,144,210,218, 75, 20,142, 29, 57,176, 31, 75, 76, 85, 1,165, 13, 83,243, 97, 7, 49,204, 89,124, 78, 0,221,
+ 1, 28,102, 83,234,218,130, 51,228, 42,169, 63, 95, 22,252, 79, 14,181, 35,174,152,140,180,139,185, 65,251,122,203, 38, 12,105,
+ 31, 88, 72,151,115, 61, 5, 80,251,197,202,238,189,170,168, 94,121,232,153,120,162,174, 29, 74,247, 11, 59,217,141, 97,184,111,
+127,129,151,244, 89,170,250,204,250,189,254, 31,131,117, 74, 17, 84, 89, 65,223, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+ 0};
+
diff --git a/source/blender/editors/datafiles/inflate.png.c b/source/blender/editors/datafiles/inflate.png.c
new file mode 100644
index 00000000000..cd6f11877c7
--- /dev/null
+++ b/source/blender/editors/datafiles/inflate.png.c
@@ -0,0 +1,283 @@
+/* DataToC output of file <inflate_png> */
+
+int datatoc_inflate_png_size= 8840;
+char datatoc_inflate_png[]= {
+137, 80, 78, 71, 13, 10, 26, 10,
+ 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 96, 0, 0, 0, 96, 8, 2, 0, 0, 1, 26,253,208,249, 0, 0, 0, 4,103, 65, 77,
+ 65, 0, 0,177,143, 11,252, 97, 5, 0, 0, 0, 6, 98, 75, 71, 68, 0, 0, 0, 0, 0, 0,249, 67,187,127, 0, 0, 0, 9,112,
+ 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 0, 7,116, 73, 77, 69, 7,218, 7, 19, 0, 34, 12, 33,
+249,187,131, 0, 0, 32, 0, 73, 68, 65, 84,120,218,237,125,105,180,101, 87,113, 94,213,222,231,220,233, 13,253,222,107,117, 75,
+173,110,181,100, 13, 72, 50, 72, 13,200,203, 96, 57,180,137, 72, 20, 47, 7,219, 66, 3,131, 77,134, 31,128, 18,201, 32, 44, 44,
+203,204, 34,194, 16, 20, 67, 48,150, 77,178, 48,136,197,138, 77,176, 96,101,145,193, 33,113, 86,236, 8, 7,107, 0,164,196, 78,
+188,146, 56, 72,104, 86,143,111,184,247, 76,123,239,170,252,168, 61,157,251,154,150,132, 21, 71, 56, 92,129,250,246,123,247,158,
+ 83,167,118, 85,237,170,175,190,218,194,131, 7, 15,194,211,190,158,201,135,138,185,191, 47, 45, 45,253,219,175,252,222,116,186,
+249,232,195, 15,189,233,205,111, 73, 31,250,218,221,119, 59, 71,206,210,112, 84, 22,197,176,105, 59, 6, 53, 89, 92,254,149,219,
+ 62,242, 11,191,120, 51, 0, 20, 68,132,186, 80, 64,101,169,141,233,172,107,219,182,109,219,166,109, 91, 99,157, 92, 73, 1, 0,
+ 0, 50,128, 46,138,141,141,141,173,173,205,173,205,141,173,205,205,173,205,205,205,205,205, 79,254,198,237,254,118, 76, 0, 4,
+ 77,211,212,245,172,169,219,182,237,166,211,141,227, 71,143, 62,249,216,195,167,158,186,251, 31,125,228, 67, 10, 0,152,136,152,
+140, 49,107, 59,119, 43,173, 14, 31,122,226,137,199, 30,125,248,161,111,117, 93, 61, 26, 47,168, 98, 80, 0, 0,177,115,206, 17,
+145,181,118,101,199,218,232,130,241,116,186,117,222,249, 23,106,173,219,166,241,183,115,225, 69,206, 57,114,128, 56, 26,141,181,
+210, 93,215, 18, 17, 17, 21, 0, 96,173,115,206, 89,107,156,115,206, 89,178,214, 57,249,159,127, 21, 0, 96,140,113,206, 58,235,
+ 44, 57,178,198, 58,107,141,181,214, 89,107,173,181,206, 58,124, 70,107,247, 76, 94, 56,247,247,187,239,253,122, 93, 87, 27,199,
+143, 93,113,197, 21,233, 67, 47,121,233, 75,127,237,246, 95, 23, 5, 44, 45,175, 88,231,170,217,108,115, 99,253,240,161, 39,223,
+252,230, 55,203,135,244,151,255,213,191, 70, 86,128,170,174,166,170, 40,187,174,171,235,122, 86, 77,183, 54, 55, 95,120,193, 11,
+190,246, 71,119, 3,128, 98, 70, 70, 0,196,166,174,101,213,166,211,205,173,205,205,233,214,214,230,198,241, 95,249,200,135,228,
+ 67,192, 12, 68,110,215,105,123,143, 30, 57,114,236,232,225,163, 71,142, 28, 61,114,228,208, 83, 79, 60,250,208,255, 26,142, 23,
+222,126,253, 91, 20, 51, 51, 59, 34,106,154,102,231,174,221, 27,235,235, 79, 61,241,248, 99,143,124,251,145, 7,255,199, 43,255,
+198, 21,136,106,215,105,123,241, 15,255,232, 94,231,200, 89,235,156, 53,214, 88, 99,102,179, 89, 53,155, 34, 34, 17, 85,179,233,
+116,107, 67,137, 90, 41, 45, 2, 21, 69, 57, 89, 88,208,186, 32, 34, 38, 98,226,194,175,171,115,198,134,207,145,113,214, 57,103,
+157,181,206,145,115, 84, 24, 99, 28, 57,138,159,176,198, 47,152,117,214, 57,107,173,115, 14,158,171,181, 83,240, 28,189,122,254,
+171,148,186,230,154,107,174,253,123,215,146, 35, 34, 90, 89,219,169, 84,225,136,172,181, 93,215,117,109,211,212,117, 85,205,182,
+ 54,215,175,187,238,122,107,109,239, 66, 68,116,247, 61,247, 17, 51, 48, 48,147, 99, 6,230,114, 82, 0, 40, 6,101, 29, 57,103,
+141, 49,214, 24, 99,140,232,134, 25, 62,252,161, 95, 62,252,212, 99,183,125,244, 19,189, 71, 67, 93,160,214,168, 20, 40,165,116,
+ 49,158, 44, 28, 61,124,184,170,102,213,108, 54,155, 77,103, 51,121, 51,147, 55,149,127,213, 93,103, 62,254,209,219,122,143,198,
+ 12,192,192, 98,237,204,206,185,225,120,114,236,232, 81,165, 53, 0, 16,145, 49,198,152,174,109,218,166,169,155,186,154,110,109,
+109,172, 31, 59,252,228,227,103,159,123,254, 39, 62,254,177,106,186,249, 75,239,185, 69, 46,196,204,192,204, 68,196,204, 77,211,
+ 12,134,227,213,157,250,201, 39, 30,171,166, 51, 49,175,174,107,229, 66,179,233,214,230,198,241,163,135, 30,155, 76, 22,180, 46,
+152,169, 28, 77,110,189,229,189, 5, 0, 56, 34, 32,242, 23, 2, 38,231, 28, 91, 38,218,181,235, 84,179, 98,170,106,182,190,126,
+188, 51,157, 49, 93,215,181,186, 40,246,238,255,129,139, 94,252, 67,147,201,132,153,186,174, 67, 84,186,148,184,228,156, 92, 7,
+152,136,153,200,145, 99, 34,199, 68,192, 52, 26, 13,119,237,218,189,182,118, 10, 57, 43,198, 75,142,156,179,214, 90,103, 28, 19,
+ 19, 51, 51, 72, 88, 50,162, 11, 38, 34,185, 20,177, 99,199,142,136,153,156, 35, 34, 38,231, 63,224,136, 40,248, 3,201, 85,179,
+248, 6,204,196,142,136,137, 29, 16,136, 72,204, 44, 17,148,153,157,179,114, 27,231,172,115, 68,222, 87, 68,176, 16, 3,173,237,
+136, 9, 8,136, 69, 40,241,118,175,123, 34, 71,142, 28, 59,114,196, 68, 78, 28,208, 58,107,140, 13, 33,246, 57,141,147,207,201,
+107,255,254,253,207,153,211,254,223,241,254,237,175, 59,191,248,165,211,247,158,225,172, 13,190, 63,251,192, 45,239,255,147,255,
+246,223,159,102, 43, 25, 14,135,159,254,244,167,247,236,217, 67, 68,142,220, 41,187,246, 48,176,115,212,117,157,233,218,166,174,
+197, 69,214,143, 29,121,219,219,111,156,211, 17, 2,192,157, 95,250,226,105,167,157,142,128,204, 44, 22,224, 28, 45, 45,239, 64,
+165,153,201, 90,107,140,233,218,182,105,154,166,158, 85,179,217,214,230,198,147,143, 63,242,193, 15,223,150, 95,168,184,231,190,
+175, 19, 49, 3, 48, 49, 19, 33,128, 42,180,210, 68,204, 24,172, 88, 34,180, 55,104, 34, 98, 30, 12,199,243,202, 70, 85, 32, 42,
+ 68, 4,133,136, 74,235, 98, 52, 26,145, 35, 31,201,140,233, 58, 99,173,181,198,154,174,147,208,230,172,117,228, 94,119,229, 79,
+246,148,141,136,136,200,196, 0,136,200, 74,235,166,174,218,174,149, 31, 16,145, 13, 97, 36, 4,128,174,237,186,174,109, 23, 22,
+ 38, 90,107,231,178, 36,136, 25, 88,212,206,204, 12, 74, 23, 77,211, 52, 77,221, 54, 77,219, 52,109,219, 54, 77, 35, 42,106,219,
+ 86,126, 40, 1,238, 99, 31,189,109,117,101,135,191, 16, 51, 0, 2, 34, 16, 17, 1, 16,145, 46, 74,211,117,117, 85,213,213,172,
+174,171,186,170,155,166,105,234,166,109,154,186,170,234,170,170,102,179,217,116,171,174, 42, 93,148,239,126,215, 59, 17, 81, 36,
+146,240,232, 31, 85,194,196,242,202,106,211,212, 85, 53,171,170, 89, 85, 77,171, 89,140,223,211,217,108,107,107,107, 99,227,248,
+225,189,103,158,163, 80,233,162,252,224, 7,222,199,204, 5, 51, 51, 19,203,245, 36, 66,119,102, 52, 26, 47, 46,237, 56,114,248,
+169,174,235,172, 87,121,219,212,117, 85, 85,211,173,205,245, 99,135, 55,214,143, 29,248,161,151, 35, 42,165,148, 46,202,203, 94,
+249,138,130,153, 1,152, 73,210,188, 16,185, 29, 47, 44, 46, 18,185,195,135, 14,205,166, 91,117, 93, 55, 77, 93,207,170,217,108,
+ 58,221, 60, 94,207, 54, 47,122,233,203,119,172,172, 1, 0, 32, 42,165, 81, 21, 34, 17, 51,131, 15,153, 12,204, 62, 14,141, 70,
+227, 93,167,158, 58,158,140,215,143, 31,223,220, 88,103, 98,165,213,202,218,218,234,202,234,142,149, 21,165,181,179, 86,182, 31,
+ 68, 44,152,217, 57, 47,146, 68, 50, 17,138,136,136,169, 44,138,165,165,229,209,112,184,186,186,102, 76,231, 28, 33,130, 82,138,
+153,173,181,254,206,113,167, 5,112,156, 94, 94, 28, 32, 6, 98,102, 70, 68,173,139,209, 72,149,101,233, 66,148,245, 87, 73,171,
+132, 5, 17, 59, 71, 94,211,226,108,142,152,217,129, 11,145,151,200, 63, 55, 75, 82, 29, 5,143, 47, 0, 46, 56, 62, 78,120, 36,
+ 9,216,217, 35, 58,246, 59,139,127,222,248,255,248, 37, 6, 40,124,184, 39, 34, 96,246,187, 90,184,166,139,235, 64,254, 86,254,
+203,196,204, 46, 94,145,153,153, 11,114, 46,126,215, 63, 0,113,184, 6, 57,231,124,110,199, 68,228, 28,115, 18, 39, 60, 55, 17,
+ 3,115,225,136,156, 35, 31,136,124, 56, 10,247,116,142,153,228,214,254,102,228,228, 73, 37,190,196,135,141, 18, 81, 16,135, 28,
+ 17, 36,125, 16, 51, 57,158,191,127,220,252,194, 38, 76,204, 12,207,171,125,237,140, 51,206, 80,240,124,122, 33,226,243, 75,160,
+167,223,102,159,225,235,188,243,206,123,231,187,222,117,214,153,103,185,224,207,214,116,191,243,133,223,249,237,207,127,254, 89,
+ 43,233,224,193,131,119,221,117,215,119, 33,196,103,238,248,236,139, 46,186, 24, 0,197, 7, 37, 21,115,142,200, 23,168,146,223,
+119,166,107,235,186,217, 88, 63,250,243, 55,222,244, 76, 82,163,121, 13, 93,114,201, 37,111,187,225,134,125,123,247,149,131, 1,
+199,240,211, 11, 59,188,188,188,162,180, 70, 80,128, 64,196,200, 68,140,128, 8,128,232,191, 1,192,146,156, 40, 64, 85, 20,229,
+226,210,202,237,183,127,162,154,110,221,252,206,247,112,220,173, 78,184,100, 68,116,207,189,247, 17,177, 92,196,223, 31, 64, 82,
+ 9, 9,225, 41,235, 97, 55, 28, 77, 0, 21, 51, 50, 16,135,253, 38,166,203,206,231,188, 36, 81,201,145,163,144,130, 51,163,210,
+229, 45,239,123,239,191,251,202,239,126,237,158,175,159, 44,231, 67,165,149,214,160, 52,162, 66, 84,168, 80,201, 54,133,136,168,
+148,210,186, 40,134,195,145,237, 26, 68, 29,227,190, 11,214, 34, 85,168,228,200,178, 84,130, 45, 88, 43,197,172,252,202, 74, 78,
+ 14, 0,127,229, 21,175, 24,141,134, 39, 21, 8, 21,160, 82,128,168, 20, 2, 32, 40, 41,240, 17, 20, 0,104,173, 7,131, 1, 16,
+117, 93, 23,234,190,206,164, 87,215,117,157, 53,157,233,186,174,109,229,141, 79,167,252,159,242, 97,219, 25, 99,140,136,107,223,
+248,186, 43, 79,234,101,136, 64, 4,136, 12, 36,102,128,160, 8, 8, 17, 16, 21, 42,133,168,228, 62, 12,168,180, 21,229, 69,227,
+242, 91, 21,249,114,223, 69,141, 89, 95,179,118,157, 23,183,107,219,182,105,187,166,233,186,246,215,127,237, 19,166,107,110,185,
+245,151,215,215, 55,182, 9,228,115, 59,246, 50,249,164, 13, 72,172,143,136,136,203,225, 72, 41,221,212, 53,106, 45, 2,121,155,
+139, 62, 22,234, 36,231,215,206, 4,145,124, 46,212,181,109, 83,215,117, 61,173,102,211,217,230,113, 64,212,229,224,253,239,125,
+143, 49,237,175,254,234,237,143, 61,241,100, 86, 17, 3,139, 48, 68,128,136,132, 12, 36, 78,130, 68, 68,136,206, 89,165,212,242,
+202,218,250,177,163,117, 93,133, 85,150, 82, 90,242, 3,142,234,241, 66, 25, 99, 67,238,106,186, 78, 96,187,166,154, 86,179,233,
+214,198,225, 83, 78,221,107,140, 41,203, 82, 23,192,204,111,123,219,245,117, 93,221,242, 15, 62,156, 74,116, 4, 34,242, 14,198,
+196,200, 0, 8, 4,196,192, 64, 96,217, 34,162,214,122,101,109,173,216, 42,183, 54, 55,154,186,246,187,232,118, 13,249, 18,215,
+ 26,107,252,106,181, 93,219,212, 77, 61,171,102, 91,179,173,227,109,231,206,223,117,154,242, 62,196, 74, 23,154,104, 56,156,188,
+255,125,239,190,239,222,123,243, 82, 31, 0,125,254,200,200, 36,122, 99,144,178,148,195, 94, 51,158, 44, 20,229,160,154,205,166,
+211,173,186,154,117, 93, 39,185,127, 64,135,228, 31,193, 61, 58, 73,233, 69,154,122,182,213,182,213,100,188,240,131, 7, 14,156,
+122,218,233,101, 57, 0,100, 36, 84, 74,161,210, 74,185,178, 40,118,239, 62, 53, 8, 36,165,140, 88, 5,249, 36,155, 33,230,101,
+ 30,118,145, 16,165, 16, 39, 11, 11,131,225,160, 91, 90,106,234,186,174,170,170,154, 53,174,178,214,118, 93, 43, 94,214,117,157,
+237, 58, 99, 58,107, 12, 57, 59, 24,142, 87,215,118,175,172,173,173,172,172, 78, 22, 22,202,178,244,249,141, 55, 96, 31, 95, 80,
+105, 47, 16,249,212, 47,132, 69, 73,115,189, 16, 64,204, 49, 90,250,156, 25, 8, 17,135,131, 65,161,245,120, 60, 94,222,177, 35,
+ 68, 0, 47,132,181, 86,114, 29, 89,107, 93, 20,101, 81, 40,173, 37, 5, 6,102, 34, 7, 0, 24,242, 96, 14,101,167, 8, 36,249,
+ 99,140,233,156, 12, 42,104,204, 11, 2,178,182, 33, 93,245,197,152, 42,203, 82,194,213, 56, 37,167, 33,113,100,138, 95,144, 43,
+147,207,154,153,153, 9,226,175, 68, 30, 44,196,175, 33, 24,181,104, 1, 68, 76,175,150, 96,186, 0,209,178,124,150, 29,158, 67,
+ 62, 43, 17, 13,148, 82,132,160, 64, 60,133, 72, 76, 83,240,168,144,244,230,137,121,168,198, 68, 42, 17,200, 63,134,188, 23,253,
+ 17,203, 82, 81, 88,178,240,131,244,196,243,217, 62, 51, 49, 1, 67, 82, 78,239, 55,196,153, 48, 89,197, 68, 28, 51,117, 6, 14,
+ 75,198,146,229,251,154,200,171,141, 67,229,199, 98, 73, 4,105,255, 79, 58, 10, 69, 34, 37, 11,147,236,220,215, 7, 20,227,185,
+247, 31,142,133,134, 0, 71, 94, 86, 34, 6,129,193, 36,141,137, 38, 29,149, 24,108, 57, 74,227,101, 6,150,252, 93, 44,140, 73,
+234,186, 32, 3,199,202, 35,160,125, 1, 59, 36,255, 25,169, 24,130,149,197, 42, 64,190,233,145, 66,111, 56,193,214,162,103, 5,
+ 75,138, 5,105, 20,152,227, 87, 2, 56,152, 23, 77,178,114, 81,168,124,189,136,152, 64,204,222, 69,251, 79, 38, 32, 26, 34, 34,
+ 7,208,187, 41,202,211,123,239,207,252,189,159,181,249,171, 65, 84, 13, 5,185, 92,192, 85, 93, 16,200,197, 34, 50,214, 66, 2,
+ 27,114,172,139,128, 10, 68,252,234, 93,127,192, 30,222, 13,209, 49,127, 19,131, 1,243,220,191, 99, 50,151,201, 10, 73,209, 73,
+254,104,118, 62,196,100, 43, 75,121,185,187,190,190,249, 60,195, 27,165, 54,123,254, 8,115,240,224, 65, 37,153,205,243,231,245,
+188, 43, 20,191, 47,208,247,156, 64,207, 77,109,127,221,245,215, 93,125,245, 53,146,115, 89, 99,156,179, 15, 61,244,208,173,183,
+222,122,232,208,225,191, 80,129,174,187,254,250, 55,190,241,111,163, 82, 1,131, 34, 68, 11,168,208,170, 51,207,252,129, 79,126,
+242,159,152,174,253,147, 63,254,175, 31,252,208, 63,124,230,215,212, 59,118,236,216,216,216,120,182,162, 28, 56,112,224,223,252,
+238, 87, 14,188,248,165,168,149, 47,154, 48,107,195,133, 36,129,152, 87, 87,215, 94,253, 55,127,226,161, 7, 31,124,234,208,161,
+167,189,236,153,103,158,249, 29, 53,164,181, 62,247,220,115,175,188,234,202,203, 46,187, 76, 41, 21,179, 62, 38,158, 44, 44, 12,
+199, 19, 70,229,171, 55, 65, 25, 72, 10, 39,145, 13, 89, 18,101, 68, 84, 10,149,190,246,218,107, 31,248,230, 55, 62,245,153,207,
+ 62,235, 37,187,233,166,155, 46,189,244,210, 83,118,237, 98, 6, 71, 78, 58, 33,204, 12, 8, 64, 4,192,147,165,241,112, 48, 70,
+165,194,134,135,178,119, 33, 34,132,234, 37,219, 3, 17, 1, 0, 81,235,226,194, 23,190,240, 13,175,187,250,243, 95,248,226,211,
+ 8, 68, 68,101, 89,254,220, 91,127,238,154,107, 94,235,136,125, 73,202,140, 8, 26, 81,242, 16,191, 26,136, 10,177, 44,135,160,
+ 84, 72,207, 41,150, 7, 60,143, 82, 75,214,196, 4, 40,165,176, 82,250,226,139, 15,252,251,255,240, 31,143, 30, 61,118, 50,183,
+191,238,250,235,255,224, 63,125,245,181,175,125, 3,162,214,186, 80, 74,131, 96, 32,168,100, 9, 84,168, 81, 10,165,203,114, 0,
+210, 61,162,136, 18,251,173,218, 69, 60,153, 67,182,229, 19,201,136,114, 3, 0,254,253,183,188,233,105,226, 16, 51, 40,173, 81,
+ 33, 32, 34, 2, 3, 40, 20, 77,163, 82,136,128,128,168,148, 42,138,194, 57,227, 17, 41, 73, 94, 67, 74, 69,169,221,154,146, 29,
+ 23,254, 22, 16,110, 15,207,163, 82, 23,188,224,188,147, 9,132,136, 10,149,152,160,148,236, 12, 10, 17, 1,129, 89, 73,107, 68,
+107, 93,150, 37,135,206, 90, 68, 59,228,198, 46, 38,126,210, 89, 77,194,248, 15,177,243,169,155, 44,239, 95,127,213,193,147, 27,
+ 53,178, 66,223,255, 96, 36, 69, 72, 0,140, 0, 28,245,164,139, 98,182,181,206, 12,206,145,247, 33, 95, 8,164,222, 72,232, 93,
+ 7, 24,205,133,198,175,115, 46,207, 19,153,165, 58,253,206, 91,135, 96,133,136,136,194, 33, 10,113,133, 1, 17, 16, 1,181,214,
+ 90, 85,213,204,249,254,180, 75, 18, 36,140,193, 70,172, 33, 96,123, 66,241,200, 97, 26,255, 99,114,116,214,254,189, 39,219,203,
+ 88, 90,112, 28,123,168, 12,192,160, 20, 48, 3,162, 18, 95, 35, 97,177, 56,143,177,102,239, 69, 12,223,198, 12,104,149,179,129,
+136, 98, 29,185,240,113,223, 22,183,215, 92,249,211,175,127,221,213, 39,129,244, 48,114,172,124,146,236,193,159, 16,229, 24, 16,
+149, 39, 36, 57, 1, 15,131, 44,254,246, 94, 8,255,179,112,247, 12,125, 52, 54,125,219, 26,107,126,228,101, 47,191,241,134,235,
+ 79,162, 33, 96,228, 76,184,244,146,146,190, 24, 12, 60,204, 98, 76, 16,204, 56, 97, 79,137,136,129,101,224,127, 96,157, 49,198,
+203,104, 19,189,202,152,206,154, 22, 16, 85, 81,236, 59, 99,255,187,110,126,199,137, 4, 2, 64,223,122, 77,189,111, 6, 32,140,
+237, 88, 28, 12, 71, 68, 46,192,225, 9,247,180,198,100,224,157, 13, 40,172, 23, 81,126,110,173,177,157,177,198,216,174,179,166,
+107,219,102,121,105, 85,161, 46,138,114,117,109,231,205,191,240,246,237, 75, 6,130, 9, 49, 0, 17, 96,216,146, 66,125, 76,196,
+ 52, 24,140, 10, 93,202, 35,250,123, 8,104,103,140, 49, 93,176, 43, 19,212, 32,130,202,175, 4,137, 21,168,166,109,219,166,173,
+167, 11, 75,203,128,128, 74, 21, 69,185,182,182,243,239,252,236,235, 51,129, 2, 64, 35,181, 33, 98, 4,108,216, 51, 58,152,137,
+ 72, 41, 53,154, 76, 0,192, 24,103,163,114,130, 40,210,232, 13,152,113, 39, 8, 99,103, 58, 43,205, 5,223, 30,111,218,186,110,
+234, 89, 85,213, 66, 70, 66, 84,168,180,210,197,249, 23, 92,240,163,151,190, 44,203, 24, 89, 80, 94,193,244,252,190,142,128, 1,
+ 15, 33,129,136,134,195,209,112, 52,102, 38,143,213,181,157,233, 76,215,182,166,107,173, 7,171, 4, 60,238, 4,200, 11,127,182,
+ 93,219,181, 77,211, 54,117,219, 84, 77,181, 85,148, 99,244,123,174,236, 74, 90,235,226,199, 47,255,107,101, 89, 48,179,130,164,
+ 30,239,255,161,166,103, 89, 57, 38, 79,152, 81, 90,143, 23, 22,134,163,145,116,129, 3, 40, 46,146,180,166,107, 77,215, 10,164,
+231,165, 17, 96,186,109,218,182,105,155,170,169,171,170,218,106,155,110,121,199,114, 81, 14,100,175, 68, 68, 84, 8, 10,149,210,
+ 55,191,227, 6, 0, 40, 60, 46,230,195,160,108,136,136, 0,140, 57,178,224, 63, 82, 22,229,194,194, 34, 57, 55,155, 77, 5,235,
+236,199,105,202,220,202,154,128,192, 10,129,164,174,166,109, 61, 35,128, 61,251,206, 28, 12,134,168, 16, 72,156, 90,186, 25,186,
+ 40, 7, 17,176,146,181, 2,102, 68, 8,125,152, 72, 48, 96, 70, 0,199, 62, 51, 41,202,114,178,184,200,204, 83,154,218,214,223,
+ 62,180,189,189, 99, 57,107, 67, 95,161,237,218,166,109,170,186,154, 54,245,148,153,247,159,121,206,218,206, 93, 69, 89, 34, 42,
+ 6, 39, 74, 10,168,167, 6,128,194,103, 83, 17,121,165, 24,126, 34,212, 9,236,193, 97,143, 12,151,229, 96,188,176, 32, 54, 57,
+163, 25, 24,235,156,243, 78,111,141,243, 6, 47, 38,213,182,109,221, 54,141, 53,237,112, 56,222,185,251,244,211,247,158,177,176,
+184,164,181, 78, 77, 42,191,175, 43, 73,250,138,196,187,241, 80,103, 0, 29, 57,110, 36, 30,187,102,138,215,224,178, 44, 97, 60,
+ 65, 84,170,208,149, 46,176,158, 17,145, 53,150,137,173,135,171, 61, 33, 21, 65, 13, 71,227,229,229,213,229,149,149,213,181,157,
+ 75,203,203,131,225, 80, 43, 21, 49, 97,224,100,223,222,134,196,195, 25, 16,145, 50,158,129,199,216, 56, 98,194, 9,124, 97, 73,
+186,135,163,161, 82, 88, 20,197,112, 56, 24, 54,163,166,174,219,182,233,218, 65,215,117,118, 96, 70,206, 50, 3, 42, 53, 24, 12,
+ 70,163,209,120, 50, 25,141, 70,101, 57, 64, 68,136, 6,145,222, 72, 11, 48, 52, 95, 56, 42, 38, 6, 68,134,158, 41, 37, 92, 55,
+ 96, 63,194,249, 41, 75, 65,162, 7,195,114, 52, 30,123,106,143, 49,206, 57,185,134, 82, 88, 20,186, 40, 74, 93, 20, 90, 41, 64,
+ 79, 48,228,200,206,153,207,135, 18,184,155,173,151,207,221,189, 64, 20,190,156,178,103,191,163,176, 66, 5, 90,139,194, 10, 93,
+186,193, 48,165, 40,226, 38, 62, 15, 86,161, 78,138,207, 26,180,222, 23,170,136,200, 25,179,240,143,188, 26, 41, 0,252,192, 89,
+ 18, 16, 21,157, 60,145, 37,229, 6, 0, 40, 10,201, 47, 41, 80, 46, 34, 86, 26, 49,179, 8,176, 97,190,123,179, 68, 66,140, 94,
+ 22,133, 22,177, 60, 38,156,221,222, 11, 64, 61, 0, 30, 60,140,238, 85, 7, 74, 33, 49,162,214, 10,165,165,132,132,164, 60,108,
+ 76,177, 57, 28, 46,149,172, 51, 25,119,138, 67,126,177,162,182,146,199,115,170, 17,121,174, 63, 29, 22, 51, 98,136, 94,219, 24,
+194, 61, 10,136,223, 7,111,189, 9, 98, 20,162,135,105,202,146, 73,100,204,212, 17, 20,197, 16,128, 88,232,225,194,113, 85, 19,
+ 50,138, 32,113, 62,217,106,170, 27, 99, 67, 39,126, 1,164, 25,145,115,126, 66,107, 33, 24, 73,106, 42,144,247, 57,142,158,239,
+187, 28,220,235,189,244, 58, 49, 81,106, 10,253,135,232, 41,153, 47, 64,232,137,198,240,193,201,134, 68,142, 34,129,185,208, 19,
+ 54,117,113, 32,127,144,244,204, 20,160,221, 20,226, 51, 4, 27,130,121,109, 91,234,176, 55,102,189, 37,128,228, 50,133,100,101,
+148,109, 98,196,169, 85,230,165,137,245,114,208,115,240, 52,217,252,146, 58,114,204, 63, 48,219, 32,123,148, 28,114,135,185,118,
+ 16, 71, 13, 17,164,123, 80,114,197,208, 97,136, 87,163,100, 76,253,167, 14,237,105, 72, 11,145,223, 29, 50,165, 36,246, 92,214,
+199,232, 45, 89,104, 10, 0,228,160,123, 90,178,216,109,201,168,129, 61,105, 82,187, 49,220,168,239,148,112, 2, 52, 34,107, 79,
+ 69, 47, 12,253, 50,246, 45,195,244, 16, 20, 35,122,188, 28,197, 62, 72,112,221,116, 7,239, 51,222, 21,192, 55,135,152, 35, 33,
+177, 39, 57,244,217, 45,148,169, 88,238, 90, 4, 30, 59,197, 14,107,220, 51,164,169, 3, 0, 4, 4, 73,171,220,179,151,204, 19,
+100,233,145,193, 65,106, 70, 66,111,105, 78,208,247,203,148, 36, 54,196, 41, 46,199,213,227, 16, 74,105,206, 92,122, 75, 70, 30,
+ 4,137,194,164, 30, 85,192, 70,224,132, 50, 80,182,158,189, 27,136, 64,190,189,149,236, 42,236, 59, 24,148,148, 20, 74,148, 25,
+ 90,118,201, 12,182,202,212,233,187,162,125, 44, 43,110, 63,114, 27,202,205, 44,198,161,185, 14, 83,200,145,210,102,152,158, 96,
+206,248, 51, 12, 15,104,206, 41,146,187,246,174,192,169, 93, 77,208,135,221, 0,160,120,248,161,135, 50, 18, 41,115,255, 95, 89,
+131,108,238,175, 61, 34, 4,164,127, 40, 17, 14,250, 45,179,108,203, 79,157,207,160, 52,143,120,121, 14,218,241,227,199,215,215,
+215,159,111,109,161,255,183, 47,102, 94, 89, 89, 89, 93, 93, 45, 0, 96, 99, 99,227,145, 71, 30,249,190, 82,182,147, 60, 87, 87,
+ 87,213,247, 21,241, 61,214, 44,251,190,130,190,175,160,191, 92,175,226,249, 41,214,218,218,234,190,125,251, 70,195,209,104, 60,
+ 6,224,182,237,170,217,236,201,167,158, 60,124,248,200,255, 95, 10,218,121,202, 41,231,157,123,238, 43, 14,254,216,229,151, 95,
+190,184,184, 40, 25,146,179,142,209,207,133,101, 51, 24,169, 25, 38,195, 97,135,158,122,242,174,187,190,122,207,189,247, 62,242,
+200,163,115,211,174,223,219, 10,210, 90, 95,117,245,213,111,255,249, 27, 11,173,137, 1, 17, 51,110, 20, 33,176,210,200, 76,172,
+164,193,141,138,144, 1,149,135,214, 28, 32, 50,128, 98,216,125,234,158,215, 92,121,229,171,127,242,167,156, 53, 68,246,254,111,
+ 62,240,155,159,185,163,170,170,231,169,130,138,162,216,183,111,239,238,221,187,151,150,150, 39,147,201,112, 56,152, 76, 38, 11,
+ 11, 11, 17, 70, 36,162,211,246,156,254, 87, 47,123,213,226,226, 34, 17, 72,147, 95,197, 94, 58, 32, 50, 33, 42, 6, 22,141, 97,
+ 64,106, 4, 8,101,148,182,157, 2,100, 68,133,138,145, 25,149,246, 93, 73,167, 46,126,241,139, 63,254,143, 63, 86, 87,179,187,
+239,190,251, 11,119,126, 41,193,146,127, 1, 10, 82, 74,237,221,187,119,207,158, 61,231,156,115,206,133, 23, 94,120,230, 89,103,
+237, 63,227, 12, 93, 20, 49,191, 39, 63, 58,150, 0,190,188,162, 71,196,201,100, 82, 14,134, 50, 10,201,136, 74,163,148, 82,128,
+ 42,107,249, 40,144, 82, 33,193,104,152,193, 33, 17,215,192,152,201,249,110, 90, 64,219,153,121, 48, 26,255,200,165, 63,250,178,
+151,253,240, 3,247,223,255,219,255,252,206,206,152,231, 64, 65,249,184,135,244,229,207, 57,231,156,171,174,186,234,242,203, 47,
+215, 69,225,235,123, 41, 68, 82, 9, 36, 18, 10, 97, 94, 43,237,149, 18, 91,163, 24, 10,218,209,176, 28, 12,199,168, 20, 42, 37,
+173,255,216,128, 75, 0,210,137,166, 88,114, 64, 37,175,250, 34, 74,146, 17, 64, 3,182,141, 74,128,105,114,238, 7, 95,244,162,
+247,189,231,220,127,241,229,127,249,141,111, 62,240,231, 82, 16, 51,175,172,174,254,216, 43, 95,121,197, 21, 87,172,172,174, 78,
+ 38, 19, 0, 36, 34, 96, 16,202, 11,166, 6,117,104,186,132,117,244,125, 35, 89,116, 65, 55,125,239,139, 1, 80, 1,140,138, 66,
+151, 37,162, 66, 64, 72,208,102, 62, 89, 3,125,100,171,167, 42, 8, 99,192, 57,141, 55, 85,186,137, 99,158,136,169, 30, 83, 65,
+ 84,170, 64, 93,252,244, 79,189,250,135, 47,121,201, 39, 63,117,199,119, 31, 49,247,239,223,255,154,215,188,230,245,111,248,153,
+165,229, 29,131,193,208,183,210,148,192,223,232,167, 96,149, 63,158, 68, 41,209, 86,124, 3, 10,195,100,146,146, 47,121, 58,134,
+ 80, 70,148, 46, 81, 41,223, 85,142,235,207,240,157,208,229, 84, 82,247,138,234, 56, 62,152,246, 51,142,124,227, 52,125,233, 40,
+253, 90,134, 31,153, 28,141, 70,163, 11,206, 63,231, 79,255,244,127,154,103,185,211,237,216,177, 99,101,101,197, 79, 3, 41,165,
+101,200, 38,244, 25,149, 31,157,150,105, 11,105, 48, 34,128,124, 64, 1,131, 2, 64,165, 20,248, 81, 38, 81,140, 42,138, 98, 48,
+ 24, 32,176,181, 6, 81,205, 19,204, 51,218, 76,218,186,243, 62,100,120, 54,249,169, 11, 3,168,142,226,208, 39,197, 97,206,108,
+210, 50, 13, 96,102, 32, 70, 36,247,227,234,202,218, 79,252,248,171,254,124,153, 52,122, 95, 17, 54, 10, 0,130, 12,173, 33,176,
+152,139,194,248, 97,228,224,123, 28, 67, 36,134,217,136,210, 89, 83,205,182,242, 81,188,200, 47,207,168, 69,185, 45, 8, 61, 37,
+157,161, 32, 83,186, 94, 71,142, 60,159, 38, 17,109, 60,237, 38, 12,178,185,248,135,231, 42,185,196, 90, 15, 35,182,176,111,239,
+222, 75, 94,114,209,119,187,139, 33, 34,160, 31, 0, 66, 86, 36,243,100,140, 4,128,138, 49, 68, 65, 21,126, 2,132,140,190, 17,
+232, 45, 78,152, 78,138,137,182,182,214,153, 65, 17,163,163,208,220, 86,152,168, 54,189,110, 22,193, 60,162, 28,231,124,101, 92,
+ 32, 12,252, 70,147,241, 42,138,227, 71,241, 96,140, 56, 30, 69,225,140,140, 64, 97,242,254,120,201,129,139,190,121,255, 31,243,
+119,185,205, 35, 0, 73,183, 81, 33, 18,112,212, 64,136,195,242, 6, 88,116,226,163,107,162, 38, 42,165, 53, 34,116,166, 53,198,
+104, 85, 56,103, 25, 88,177, 70, 36, 84, 10,101,172, 49, 98,114, 57, 70, 76,113,120,133, 32,167,245, 51, 59, 25,240,150,243, 76,
+146, 57,134, 35, 68, 82, 86, 29,108, 45,158,185,224,136, 28,229, 39,240, 56, 34,235,220,205,239,120,235,239,255,225,221,247,221,
+247,141,103,158, 37, 21, 25, 60, 20, 27,109,201,121,160,223,203,100, 0, 78, 84, 25,206, 8, 27,158, 85,233, 44, 1,163,117, 78,
+218,109,132,164,180, 70, 34,244, 57, 11,200, 34,112, 15,187,229, 20, 58, 40, 64,195, 68,189, 81,255,100, 64, 46, 11, 93,156,230,
+ 68,179,201, 58,225, 76,249,161, 76,233,205, 27,227,172, 33,226,174,235,254,214,207,254,204,235, 95,123,245,183,190,245,224,167,
+ 62,253,217,166,105,158, 85,162, 24,244,146, 78,145,240, 59,187,231, 27,202, 92, 94, 68,205,115, 98, 65,248,134,112,109,140,233,
+ 44, 88,197,140, 74, 41, 38, 81, 95,100,145,229, 89, 16,229,173,184,222, 62, 70,253,105, 10,241, 41,142,195, 40, 49, 24,101,103,
+207, 36, 5,185, 48,160,233,201,100,158,226,212, 18,147,214, 5, 49,156,125,246,217, 31,254,224, 7,142, 28, 57,114,199,231,254,
+217,227,143, 63,241,140, 20, 68, 28,227, 10,199,180, 6, 78,196, 55,224,152,200, 18,129, 82,113,191,246,236,129,193, 80,104, 85,
+ 10, 9,253,164, 46, 74,160,135,156,192, 48,223,132,137,227, 49,114, 18, 2, 37, 35,114, 57, 55, 50, 41,168,231, 99, 94, 71, 54,
+178, 95,172, 39, 86,153, 48, 0,216,154,182, 46, 7, 35, 6,165,148,134, 2,200,185,181,157, 59,111,188,225,173,199,142, 29,253,
+141,127,250,155,115,147,172,243, 10,242,197, 15, 3, 98, 78, 56, 9,209,201,191, 65, 2, 10,221,110,111,111,144, 58, 21, 10, 0,
+148,214,131,225,200, 90,219,212,149,117, 14,201,249,116, 1, 20, 42,152, 59, 86,230, 36,249,115,190,155,115,110, 60,233,141,216,
+148,203,200,164,150, 92,154,207,180,214,216, 48,191,218,117, 77,219, 84,117, 93,173,172,238, 34,114,194, 82,246,102,129,110,101,
+101,245,151,110,186,241,225,111, 63,124,199,231,126,171,222,230,116, 5,228,101,143,159, 22,143,229, 35, 8,167, 9,129,133, 17,
+236, 63, 36, 25,117,226, 36,120, 74,143,184, 82, 57, 24,140,104, 66,204,109, 35, 52, 55, 10, 52,151, 72, 61, 71,200, 91,198,112,
+ 2,245,100,126,230, 79,212,201, 99, 80,136, 61,121,244, 9, 19,253, 18,131,188,115,181,166, 53,157,169,219,186,106,234,233,194,
+226,138, 82,104,173, 45,139, 82,116,196, 12, 10,160, 40,193, 90,220,183,127,255,123,223,253,139,247, 63,240, 95,238,252,210,151,
+ 79,232, 98,190, 51,135,158, 95,138,161,248,244,190, 19, 8,239, 40,123,151, 31, 54, 67,244, 60, 57, 31,173, 61,147,184, 28, 12,
+198,204, 8,208, 52,181, 49,134,200,113,100,153, 96,242,210, 84, 74,101,109,110, 74,163,121, 25, 41,155,243, 12,217,101, 1,200,
+159,163, 21,167,229, 93,118,234,129, 53, 93,215, 54, 93, 91,181, 77, 5, 80,236,220,181,203,145, 11,100, 90,201,221,148, 3, 70,
+102,173, 11, 0,116, 14, 15, 92,124,241, 11,206, 61,247,142,207,253,214,227,249,144,118,210, 16,138,165,136,118, 88, 54,159,244,
+198,243,105, 24, 66, 26,192,196, 33, 75,242,244, 34,165, 20,251, 9,215, 1,200, 17, 2,109,211, 54,141,181,198, 57,202, 41, 27,
+ 8,114,153,208,156,101, 72,211,147,180,173,218,240,201,140,228,147, 78,146, 30,226,224, 85,105, 20,219,248,232,220,117,198,180,
+ 93,215,152,182, 50, 93,219, 25, 90, 88, 24,141,198, 11, 90,151,222,223, 81,216, 48, 82, 34, 49, 48, 43,165,152, 53,107, 30,142,
+ 38,111,121,211,223,253,223,127,246,103,191,247,251,255, 57, 84,243,158, 64,201,236, 29,202, 15,251, 35,202,154, 34,162,160, 16,
+200, 64, 41, 18, 49, 51, 50,250,142, 48,167, 66,222, 23, 37, 80,148,165,167,144,106,221,182, 77,215,118, 98, 77,146,247, 1,204,
+ 57, 87,136,211,148,230, 11,120, 62,237,118,113,131,247, 41, 96, 48,158,200, 15, 22,237, 88,211,153,174,238,218,218, 24,227, 28,
+148,131,114,247,105,123,151,150, 87, 7,131,129, 82,218, 91,177,192, 76,178, 53,161, 98,100,153, 97, 47, 10,109, 29,159,125,206,
+185,151,235,242,193,111, 63, 90, 64,162, 49, 33,147,199,116,100,206,158,179, 42, 62,235,238,114,228,140, 33, 32, 49,137,163,137,
+ 37,196,189, 28,125,180, 81,101, 57, 80, 82,135, 20,173,144, 59, 1,140,181,222, 69, 98,183,151,121,155,237,164,115,127,122, 1,
+ 40, 35,207, 91,202, 78, 21,112,214, 90,219, 25, 35,179,234,181, 49,157,179, 14, 0,150,150,151,118,239,217,127,202,238, 83, 23,
+ 22, 23, 7,131,129,150,179, 2, 19,253, 16, 37,162, 70,202,164, 67,242,197, 41,170,140, 27, 40,112,167,183, 25, 22,205,250, 55,
+ 50,221,227,149,205,224,245,136,222,148, 66,150,148,246,236,237,245,158, 86, 37, 14,148,214, 69, 89,150, 93, 25,134,221, 91,107,
+140, 53, 76, 28,131, 74,218,207,211, 97,103, 33,127,102,151,198, 14,178,188, 80, 40,245, 94, 59,214, 24,107, 90,107, 59, 34,171,
+148,158, 44, 47,237, 88, 61,101,101,237,148,229,229, 29,147,133,197,225,112,168,180, 14, 5, 66,204, 55, 48, 36,177, 40,147, 34,
+168, 52, 50,171, 0, 89,244,131,180,108, 88,128,129,125,128, 97,110, 61, 96,133, 97,166, 35,152, 83,176, 32, 10,164, 16,140, 65,
+ 41, 47,186, 64,202,145,178, 44,149, 82, 69, 81,150,101, 57, 28, 14,133,250,221,117,129,166, 14,192,108,137,216,111,225,158,100,
+236, 40,219,173,182,219, 78, 56, 97,213, 17, 91, 0, 40, 6,195,241,100,113, 56, 26,143, 23, 22, 23, 22,150, 38,139,139,227,241,
+120, 56, 28,233,162, 40,180,246,181,182,231,168, 65,130,165, 60,170,139, 1,118, 83, 82,109,230, 49, 8,152, 9, 16,137, 17,146,
+225,248,160,228,171,179,100, 89, 20, 6,181,132,231, 24, 82, 3, 79,180, 74,199,204,228, 6,197,158,206,168,177,240,243, 68,101,
+ 89, 90,107, 71,145, 76,108, 60, 51, 53, 28,145, 98,201, 90, 75,214, 89,229,156,141,121, 25, 3, 3, 20,158,140, 78, 69, 72, 90,
+149, 86,170, 40,202, 98, 48, 24, 14, 6,131,225,112, 56, 28,150,131, 65, 89, 10,171, 53,204, 55,245,104, 42,137,206,159,147,110,
+ 61,146, 27,106,163, 2, 34,183, 48, 83, 13,137,174, 0,189,210, 66,172,102, 2,150,128, 45,161, 91, 24,161, 12,132,137,143, 72,
+ 33, 98, 33,244,152,102,152, 41, 11, 21, 42,212, 2, 68, 17, 81, 89,148,142,156,115,163,254,188, 76,122,227,108, 28,236, 33,150,
+195,193,122, 79,164,148, 86, 90, 41,173, 11,165,197, 86,148,214,133, 28,185, 3, 74,133,218, 26,122, 12,213,185,250, 32,203,141,
+179,124, 36, 38,138,158, 13, 37, 41, 33, 65,208, 81,120,195,130,195, 34,160,223,156,101, 95, 71, 8,227,128,217,172,133, 79, 13,
+197,204,252,239,227, 17,168,137,100,233,121,194, 74,249, 93, 68, 9,207,188,215, 2,227,136,246, 80, 63, 63,226, 48,177, 20,200,
+223, 30,179, 65,165,148,224, 43,115, 41, 59, 70,198, 26,251, 44,175,119, 82,224,156,226, 50, 70,119,218,230,179,202,193, 7,160,
+109, 58, 2,137, 56, 64, 97, 28,135, 82,201,234, 23,149,114,226, 50, 16,134,107, 49, 16, 16,114,130, 7, 32, 48, 89, 49,244, 39,
+180, 70, 34,242,100,103,214, 84,164,211, 67,182, 49,174, 82,185,187,141,215, 3, 89,138,203, 57,133,143, 18, 36, 65, 57, 46,206,
+208,187, 82,168,204,251, 46,230,123, 48, 94, 29,114, 3, 98,198, 72, 65,166,144, 46,147, 28,100,195, 49,123,130,185,160, 19,131,
+ 90,188,117,100,206, 17, 80, 72, 51,243,179, 29,146,128,152, 97, 70, 74,118, 27, 66, 86,190,216,211,115,167, 85, 36, 30, 89,164,
+142,249,138, 40,193, 14, 89, 31, 10,125,190, 14, 39,240, 50,238, 55,119, 56,205,210, 41, 72, 52,102,144, 58, 58,112,255, 32,167,
+ 36, 66, 56,143, 81,120,186, 28, 44, 60, 30,164, 1, 61, 62,166, 16,200, 41, 18, 64,163,147,245, 9,172,105, 33,123,185,130,152,
+ 43,132, 38, 9,128,159, 67,148,130,198,167, 44,113, 74,209,207,182,114,178,160,108,131,232,207, 84,132,231,199, 62, 81, 55,227,
+115,207, 5,239,120, 30, 84, 70, 95, 21,241, 56,244,120, 56, 66, 66, 28,146,135,156,187,152,115,198,179, 81,138,220,132, 18,108,
+ 24,232,166,169,185, 24, 42,143,222,136, 64,230,239, 20,177,145,180, 83, 98,118,206, 80,114,103,206,197,202,152,140,233, 52,148,
+140,140, 74,193, 96,209, 7,110,206, 56,206,105, 4, 0,242, 68, 49,111,135, 98,204,253,179,156,168,199, 58,239,205,119, 5,180,
+ 76, 2,115,214,223,233,149,163,161,173, 24, 9,217,146, 95,165, 33,154, 94, 20, 73, 45,179,160,130, 94,155,176,215,191,245, 24,
+104,239, 80,150, 30,147, 60,242,197,227, 56, 35,165,240, 22,181,205, 81,150, 92, 73, 42, 89, 16,164,209,221,236, 99,249,188, 11,
+100,163, 49,158, 6,237,207,248,242,133,102,144,139,194, 49, 55,105, 99,141,234,167,224,129, 32,243, 52,136,137,123, 13,225, 25,
+ 56, 27, 50,242,131, 89,144,181,179, 33,210,117,227,149,251,186,203,225, 38,244,124,221, 88, 34, 81,127, 22,162,215,182,164,172,
+ 85, 55,103, 65, 49,127, 9, 53,123, 56,154, 42, 79, 98, 60, 37, 26,250, 81,150,146,240, 94, 20,159,170, 50,201,249, 59,201, 26,
+ 48,108,106,208, 63,158, 43,156, 84, 20, 76,133,178,232, 10, 0,132,126,112, 13, 32, 30,230,147, 71,225,121,171,153, 39, 54,103,
+251, 1, 71,182, 52, 72, 45, 9, 60,215,211,205,237, 32,219,230,123, 31, 73,229, 40,132,105, 77,136,129, 57, 57, 73, 38, 96, 62,
+197,146,175, 95,156, 28, 20,157, 83,156,198,137,147, 15,222,127, 48,153, 15,231,207,221,127, 67,153,227, 66,111,220, 97,110,251,
+239, 77, 31,196,103,164,124, 19,139,115, 1, 3,219,202, 57, 0, 0, 1,249, 73, 68, 65, 84,115, 12,128, 94, 28, 42, 18,232, 32,
+ 71,246,205,105, 30, 48,197, 68,240,154,147, 21, 68, 70,102, 66,255,103,132, 62, 72,178,113,159, 37,138, 24,136,241,154, 24, 30,
+ 72,254, 59, 9, 8,125,112, 17,230,182,254, 24,253, 57,163,135,111, 55, 30,198, 62, 56,153, 2, 88,127, 20,103,174,239,154, 15,
+ 16,204, 13,162,246, 93, 44,134, 27, 10,147, 86, 18, 90, 0,253,233,120, 24,183,100, 15,106, 97, 24,153,200,167, 57, 51,151,203,
+ 54,145, 48, 6,214,219,200,227, 33,206, 25, 97, 36,115,132, 44,116,179,120,101,239, 72, 14,200,102,100,252,168, 66,222,106,203,
+ 79,164,234,197,104,218, 54,144,209,155,139,201,155,117,125, 23,139, 99, 10,121,126,154, 86, 38,128,209,217, 16, 0, 65,111,114,
+ 27,160,151,185, 97, 86,183,166,141, 1,251,230, 63,127,234, 86,102,217,105,102, 42,168,155,122,211, 24,243,227, 16,253,153,174,
+124, 98, 36,111,222, 18,244, 14, 34,227, 56,161,177,157, 70,145,237, 90, 69,188, 50,113,122,234, 60,213,160,176,149,139,201, 96,
+120,211,155,117, 39, 9, 50, 40,245,132, 63,144, 22,195,242, 99,140,233,224,177,181, 12,191,133, 92, 77,156,141, 51, 97, 88, 36,
+142,217, 74,172,137, 17,182, 41, 40,157, 30,152,107, 58,212,207, 49, 2, 1,159,104, 11,235, 85,120,185, 37,199, 68,145,146,245,
+102, 94, 30,197,241, 14,213, 27, 70,202, 34, 44, 39,195,202,142,176,139,249,221,188,139, 37,167, 38,134, 57,237,228,189,164,232,
+176,144,209,128, 32,140, 89,205, 79,101,245, 39,248, 78,176,183,165, 32, 29,173, 7,120,126,228, 44,139,200,185, 5, 9,182,137,
+ 89,214,198,121, 61,195,219,160,215,109, 39,213, 65, 56,215, 51, 85,174,217,126, 13, 39, 58,204,142,251,121, 89,182,240,212, 27,
+236,235,101,230,249,182,149,156, 49, 61, 97,252,239,184, 36,207,232,239, 76,233, 8, 75,158, 3,124, 79, 16,189, 67,144,206,138,
+236, 94,174, 12,121, 29,229,147, 31,232,231,248,249,147,245, 53, 49, 7, 56, 60,157,118, 32,191, 85,118,107,216,118, 28, 32,247,
+206, 26,133, 30, 53, 45, 33, 21, 89,197,144,219, 81,186,126,126, 20,117, 62, 98, 69,144,143,231,226,193,131, 7,121,238, 9,255,
+ 82,142,238,244,200,132,207, 98,224,231,255, 0,194, 7,103,207, 35,149,125,120, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+ 0};
+
diff --git a/source/blender/editors/datafiles/layer.png.c b/source/blender/editors/datafiles/layer.png.c
new file mode 100644
index 00000000000..6006067bf76
--- /dev/null
+++ b/source/blender/editors/datafiles/layer.png.c
@@ -0,0 +1,350 @@
+/* DataToC output of file <layer_png> */
+
+int datatoc_layer_png_size= 11004;
+char datatoc_layer_png[]= {
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 96, 0, 0, 0, 96, 8, 2, 0, 0,
+ 1, 26,253,208,249, 0, 0, 0, 4,103, 65, 77, 65, 0, 0,177,143, 11,252, 97, 5, 0, 0, 0, 6, 98, 75, 71, 68, 0, 0, 0,
+ 0, 0, 0,249, 67,187,127, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 0, 7,
+116, 73, 77, 69, 7,218, 7, 19, 0, 34, 12, 33,249,187,131, 0, 0, 32, 0, 73, 68, 65, 84,120,218,237,124,121,148,157, 85,149,
+239,222,251,251,238, 80,247,214,148, 16, 8, 9,169, 74,128, 12, 12, 50,147, 0, 33, 19,196, 16,230,214,238, 70,177,105,158,246,
+ 3,108,129,110,251,169,175,187,159,218, 46,150, 52,168,207,126,168,111,105,171, 79, 5, 91,105, 27, 65, 68, 69, 25, 18, 18,134,
+ 0, 33, 33, 68,134, 8, 25, 0, 67,134, 74, 85,165, 82,211,173,123,235,222,251,125,223,217,251,253,177,207, 57,223, 87, 1,149,
+135,244,106,124,171,111,214, 74,106,165,238,112,238, 62,123,239,179,247,239,247,219, 7,151, 44, 89, 2,191,243,241,102,158, 20,
+250,159, 86,175, 89, 43, 44, 73, 18, 69,205,102,125,188,250,103, 87, 92,153, 62,137,153,215,111,220, 20,199,137, 49, 9,155,196,
+ 72, 46,204, 73,177,212,118,222,146,133, 66,240,208,163,235,237, 59,177, 17, 64, 4, 64, 17, 36,196,190,253,251,147, 36,185,252,
+ 67, 87,143,143,141,164, 79, 18, 16, 97, 22, 17, 65,108, 52, 26,173,109,109,204,108, 76, 2, 56,249,107, 95,253,106,173, 90, 9,
+ 1,128,133, 89, 24, 68, 64, 36,138,162, 48,204,177, 48, 0, 24, 30,167, 32, 8,115,121, 2, 0, 54, 44, 44, 34,114,219,215,191,
+146,207,231,145,168,163,189,181,217,108, 32, 16, 0, 32, 34, 1, 0, 51, 11,243,215,110,185,249, 3, 31,186, 6, 17,139,197, 98,
+111,239,128, 8,130,136, 8, 0, 98,232,159,244,193, 15,255,181, 8, 0,194,208,224, 1, 65,102, 54,134, 89, 68, 94,125,121,135,
+190, 83,242,197, 27, 63, 5, 0, 0,210, 94, 46,176, 17, 96, 97,102,102, 35, 0, 83, 14, 61, 44, 4,128, 36, 54, 31,249,111,127,
+ 47, 34, 0,176,183,167, 95, 68,140, 49,198, 24, 54, 50, 58, 60, 44, 34,248,166,246,238,205, 60,208,255,244,208,218,135,147, 56,
+142,163,168,217,172,239,216,190,245,211,255,112, 67,186,119, 27,158,126,198, 24, 19, 39,137,126,155, 32,148, 60,192,166,245, 79,
+156,183,108,225,234, 71,215,123, 47, 64,102, 0, 1, 6, 4, 64,164,240,107,183,220,120,229, 85, 31,105,212,199, 17,100,213,163,
+ 79, 1, 0, 62,241,212, 70, 99,152,141, 97, 99, 88,228,139, 55,126,242,195,127,253, 9, 19,155,196, 36, 99, 99,149, 70,189,246,
+243,123,239, 37,102, 17,221, 21,196,255,249,217, 79, 94,247,177, 79, 98, 16,228, 10,249, 40,138,137, 40, 12,194, 21, 43, 86,224,
+163,143, 63,197, 38, 97,145,193,129,253,133, 66, 1, 16, 69,100,172, 50,106,140,137,162,168, 81, 31,111,212,107, 33,115, 98,152,
+ 1, 64, 0,144, 8, 0,226, 56, 18, 65, 17, 16,102, 0, 32, 10,200, 24, 35, 34, 95,252,236, 39,139,197,162, 0,180,181,181, 53,
+ 26,117, 17,102, 54, 44, 2, 0, 35,195, 67,184,106,205, 35,194,102,188, 94, 71, 64, 68, 24, 27,171, 8,179,126, 86, 18,199, 61,
+123,118, 33, 34, 37,137,185,229,166,207, 48,179, 8,151, 91, 10,194,194,186,113,204, 44,210, 82, 42, 25, 54,240,118,237, 93,248,
+155,126,177,250,161, 53, 81,179, 97,140, 73,146,184, 86, 29,251,240, 95, 94,219,104, 52,126,155, 15, 44, 94,188,120,246,156, 57,
+ 87, 93,117,181, 0, 8,139, 97, 17, 17, 22,195,204, 98,216,176, 49, 38,209,127,140, 73,216,152, 56,106, 54,155,245,171,174,254,
+203,131,222, 40,232,238,238,254,244, 63,220, 32, 0,194, 8,132, 40, 2, 8, 8, 8, 96,227, 4, 0,145, 48,138,162,111,125,245,
+150,205, 27,215, 79,153,122,248,120,173, 74, 73, 99,246,145,221,175,190,182, 39, 93,209,162, 69,139,190,240,197, 47,129, 6, 24,
+179, 17, 17, 99, 68,132, 69,152, 13,136,236,235,217,251,131,219,190,249, 95,175,253, 27, 4, 48,108,132, 57, 73,226, 36, 78, 74,
+229,242,224,129,253, 81, 51,170, 85, 71,110,184,241,243, 65,119,119,247,242, 21, 43, 1,132, 89, 88, 88,140, 8,136, 0, 0, 8,
+ 27,190,229,230,207,156,181,228,220,249,103,157, 29,132, 33, 34, 5, 65, 16,134, 57,102, 97,230,102,179,161, 75, 15,130,220,210,
+197,103, 19, 0,168, 75, 24,147, 48, 51,235, 55, 18,249,250,151,190,176,119,247,174,235, 62,241,169, 48, 12,131, 32, 32,162, 92,
+ 46, 87, 42,151,199,199,199, 19,147, 32, 34, 32, 34, 17, 34, 33, 81,144,203,135, 0,160, 14, 39,204, 32, 2,136,108,204, 63,253,
+227,167,175,255,248, 39,213, 67, 5, 0, 0,219,218,202,125,189,125, 60,198,136,128,130, 2, 8, 2,204,106, 70, 34, 10, 52, 87,
+ 26,177,182,149, 90,181,250,163,127,189,237,250, 79,124, 10,209, 6, 53, 34,150, 90, 90,250,246,237, 19, 64, 0, 22, 1,102,209,
+184,211,220,130,136, 15,175,186, 63, 4,128,196, 24, 68, 17,134,151,182, 60, 31,132,225,101, 87,124, 8,236,251, 66, 24,134, 2,
+216,215,223, 39,106, 51, 17, 54,134, 13, 51, 27, 54, 70,243,222,200,240,208,105,103, 44,212, 36,104, 16,224,209, 53,171,230, 30,
+247,174,206,206, 73,134,133, 16, 0,160, 84,110, 29, 25, 26,140,162,136,129,109,198, 19,177,145,193, 34, 34,123,118,239,108,109,
+109,215, 40, 38, 0, 48,108,214,174,186,127,238,113, 39,180,183,119, 48, 11,136, 24,230,150, 82,249,192,192,254,102,179,105,216,
+254, 49,198, 36,113,162,251, 34, 44,219,183,189,216,214,222, 41, 34,198,112, 98,146,183, 47, 79,190, 45,143,238,238,110,122,187,
+222,235,141,163,127,249,242,229, 31,255,248, 39,152,141, 73, 18,195,230,203, 95,254,242, 19, 79, 60,249,102, 79, 0,125,204,156,
+ 53,235,219,223,185, 21,244, 92,210,115, 39, 73,140, 73,146, 36, 78,226,232,218,107,175,175,140,141,189,225, 87, 67, 0,120,242,
+169,167,132, 69, 4, 24,192, 36, 6,192,158,109,156,176, 97,221,166,196,190, 99, 18, 55, 26,141,235,174,255,171,122,189,126,240,
+ 27,109,220,180,217, 57, 8,235, 49,111,196, 0,179, 49,194,250, 46,108,196, 48, 51, 15,244,247,221,245,175,223, 69, 66, 0,200,
+133,225,125,107,214,101,223, 40, 68, 34, 4,224, 56,209,112, 16,112,161, 4,130, 72,136, 16, 0, 24,130,127,249,198,255,174, 85,
+171,115,142, 61,110,246,156,121, 47,189,248,252,158,157, 59, 15, 54, 54, 34, 26,195, 0,128, 32, 2,128, 34, 34, 32, 0,136, 40,
+130,136,192, 8, 95,249,220,103, 91,219,218,174,188,250, 58,102, 99,146,248,180,249, 11,143, 58,242,232,254,193,225,231,182,108,
+ 77,141,253,212,211,155, 93,244, 11,107, 70,241, 33, 32, 44,204,255,235,166,207,156,185,104,217,187, 78, 60,217,136, 97,163, 59,
+ 25,199, 81,211, 24,137,162, 70,179, 81,255, 31,159,250, 76,119,119, 55, 49,139,205, 99,104, 51,137, 0,160,219,206, 47,125,238,
+134,243, 47,253,147, 19, 79, 57, 29,137, 8,131,128,130, 32, 12, 59, 58, 39, 35,133,128, 16, 4, 97, 46,151,191,249,198, 27,212,
+143, 68,211,163,126, 37, 6,151, 32, 17,126,112,235, 55, 79, 63,115,209,145, 71,207,214, 61, 37, 66,102,106, 43,151,250,251,250,
+ 17, 41, 8, 66, 97, 70, 10,130, 92,254,220,101, 75, 72, 4,180,146,210,250, 12, 88,244, 59,239,126,237,181, 90,181,122,250,153,
+103, 35, 34, 34, 18, 5,128,212,209,209, 62,176,127, 64, 15, 4, 0, 0, 36,251, 8, 2, 18, 17, 22,112, 37,128,125,151, 36, 73,
+126,248,189,111,253,249, 85,215, 34, 0, 0, 33, 34, 16,116,118, 78,238,239, 31, 32, 34, 0, 76,223, 75,203, 15,164, 80,132, 1,
+ 52, 67, 50, 0, 48, 0, 48,255,211,141,159,186, 78,147, 36, 34, 2, 8, 99,177,165,124, 96,160, 31, 64, 68,252,235,173, 5,244,
+105,100, 19,166,251, 11, 65,214,174,186,255,210,247, 93, 17,134,161, 15, 31, 10, 2, 17, 19,199, 9,160, 77,226, 98,119,199,101,
+ 99, 64, 98, 91,236, 49,136, 0,115, 28,199,207,110, 90, 63,115,214, 81, 54, 93, 35, 2, 64,185, 84, 24, 30, 28, 68,183, 8, 17,
+ 1,253,124,212,220,143,113, 18,147,183, 14,139, 48,194,151, 63,119,195,135, 63,250,183,234,226,250,104,107,239,220, 63, 48,232,
+178,184,216,213,176,190,202, 26,180,217,168,135,234,118, 8, 34,130,189, 61,123, 22,156,189, 52, 8, 2, 97, 64, 4, 65, 32,196,
+ 36,137, 57, 97, 22, 16, 0,102,221, 22,173,188,237, 39, 13, 29, 24, 8,195, 28,169, 19,235,198,253,224,182,111,156, 58,255, 44,
+ 23,115, 0, 34,229, 82, 97,160,191,151, 81,180,118,215,242,221, 46, 69, 4, 0, 94,248,229,166, 66, 75, 17, 1,212,216, 34,194,
+ 27,158,120,236,125, 87, 94,141, 32,206,147, 36,159, 47,140,140, 86, 25, 4,133, 5,152, 25, 50, 86, 96, 17, 25,175, 86,103, 30,
+ 53, 7, 4, 5,128, 68,244,168,145, 39, 31,125,232,144, 41, 83, 68,163,151, 89, 68, 90, 10, 52, 62, 94,211, 5,232,135, 49,219,
+ 18,129, 69, 64, 32,138, 34,111, 59,210, 95,172,190,239,167, 87, 92,117,173,245, 4,102, 65, 44,183,182,246,246, 31, 96,102,212,
+ 21, 24,125,119,107, 32, 16,217,190,117, 11,161, 86, 63, 34, 2,164,241,254,226,179,207,180,182,182, 50, 11, 8, 11, 34,136,112,
+220, 76,162, 4,196,150, 59,122, 80,107,134, 80,243, 28, 62,125,134, 0,176,126, 77,102,120, 71,157,107, 93, 93, 93, 4,239,164,
+ 7,106, 67,246, 22, 30,231,156,123,206, 41, 39,159,130,132, 99,149,202, 99,143, 61,182,125,251,142,127,223,243,250,245,143,247,
+189,255,242,171,175,185,198, 24,163,238,103, 29, 74, 64,132, 47,188,240, 34,117,160, 36, 73,132,153, 77,242,189,239,127,127,213,
+234, 53,111,209, 72, 75,150, 44, 89,183, 46, 61, 47,143, 63,254,248, 21,231,157,183,114,229,249,165, 82, 11, 0, 24, 35, 90,140,
+217,188, 39, 44,172,237,129, 13, 33,237,114,220,143, 26, 58, 70,171,117,147, 24, 99,226, 56,138,254,241,166,207,189,182,107,215,
+155, 44,141, 66,102,222,176,113,147, 49,198,102,102,119,192, 25, 22, 97,193, 64, 64,244,252,117,185,144,132, 69, 16, 24,144, 0,
+ 24,137,144, 53,127, 32, 34, 9, 50, 18,137, 48,113, 64,100,134,250, 6,159,124,108,237, 49, 71,119,205,153, 53, 29, 17,131, 92,
+248,192, 67,235,126,247,150, 81, 16, 10,145,134,161,198,158,162, 19, 66,136,204,130, 32, 40, 32,246,220, 17, 0, 4, 20, 65, 64,
+ 0, 32, 66, 22, 8, 72,132, 69, 80,152, 9, 33, 78, 30,127,100,237,139,207,255, 18, 17,197, 54, 71, 54,199,155, 56, 89,185,108,
+ 97,173,222,120, 98,227, 47,127,219,130, 16, 17, 1,133, 89, 75,103,212, 77, 66, 4,102, 32, 2, 17, 20,116,103, 48,218,127,180,
+ 17, 67, 0, 33, 65, 1, 68, 18, 30, 60, 48,124,251,119,190,142,136,108,204,137,167,158,126,220, 9, 39, 17,146, 45,234,147, 36,
+ 73,162,209,161, 3,235, 30,121,184,220, 82, 40,149, 90,198,199,235,191,113, 65, 2,160,165, 56, 10,234,129,167,231, 22,160,226,
+ 1,174,221, 2,151,196, 81, 64,144, 72,152, 9, 73,144,185,175,167,231,142,239,125, 11, 0,230, 28,115,220,153,139,150, 5, 33,
+137,173,135, 88, 68,200,112, 24,134, 57,147,203, 77, 45,188,231,178,203,155,205,250,244,174, 89, 39,158, 50, 31,133,227, 36, 26,
+175,213,110,184,241,230, 9, 11,138,227, 68,132, 17,116, 99,172,157,245, 12, 97, 0,241, 39, 42,128,100,138, 96,221,181,161,193,
+ 3,223,254,218, 45, 65, 16, 46, 95,121,241,172,163,103, 19,145,186,183,186,154, 16,137, 8, 17,139, 4, 28,112,161, 88, 20, 32,
+170,141,157,126,198,217,204,198, 24, 8,194, 92,169,220,250,249,155, 62, 91,171, 86,110,250,194, 45, 62,236, 5, 0,152, 5,237,
+206,128,226, 80,246, 88, 23, 65, 17,214,162, 18,197,215, 31,113, 20,127,227, 43, 95,104, 54, 26,231,174,188,100,222,177,199,187,
+144, 0, 0, 9, 2, 20, 17,242,133, 65, 16,150,203,229,161,193,193,102, 35, 22, 96, 68, 66, 2,154,152,121,202,109, 29, 55,222,
+240, 15, 15, 60,184, 58,212, 29,113, 62,131, 54,198, 93,217, 39,126,135, 52,140, 88, 4, 81,152, 31, 93,253,192, 51, 27,159,156,
+ 61,247,216,229,231, 95,140, 1, 58,211,105, 56,234,203,136,136, 17,131, 82,169,101,104,104,232,192,192,128,128, 80, 64,204, 90,
+249, 88, 16,128, 72, 0,132, 41, 32,146, 48, 39,199, 28,123, 76,232, 34, 0, 0,116,219, 17, 52,227,185,250,199,218, 79,221, 24,
+160, 86, 29,251,250, 45,159, 71,194,171,174,255, 88,161, 80,180,165, 22, 9, 48, 50, 50, 1,169, 73, 3,164,114,107, 91,117,172,
+182,127,255, 0,176, 70, 1,104, 10, 65, 4, 2, 52,182, 40, 67, 64, 66,100, 36, 68, 9, 16, 41,116, 59,195,153,234, 9, 24, 24,
+ 1, 89, 45,230,190, 59,139, 60,254,240,234, 13, 79, 60,186,228,220,149,239, 58,249, 20, 4, 20, 68, 68,155,160,236, 78,128, 32,
+ 82,177, 84, 6,224,253,253, 3,204, 6, 0,180,120,178,155, 45, 8,128, 44,108,139,119,177, 49,139, 72,136, 98,207, 50,201, 60,
+ 82,215, 65,240,174, 3, 0, 81, 20,125,237,150,207,197, 81,243,234,235, 63, 86, 40,182,216,250, 76,247, 17, 81, 16, 73, 4,144,
+130,128, 90, 91,139,195, 35,213,234,216,152,186,129, 15, 82,223, 17,178, 8, 2, 10, 88,232, 12,220,134,107, 9,111,209, 78,205,
+253,152,137, 35,214,102, 8, 64, 68, 14, 12,236,191,237,235, 95,158, 53,123,238, 5,151,254, 73, 16,144,111, 52,209,237, 35,138,
+ 0, 81,169, 92, 22, 78,122,123, 7,140, 73,180, 67, 99, 0, 16, 70, 4, 97,176, 37,145,136, 0, 48,176,171,193,221,206,161,226,
+179,206, 66,204, 6, 0, 1,193,110, 19, 51, 32,170, 39, 61,245,248,163, 79, 60,178,250,146, 63,253,179,174,153, 71, 18,189,174,
+237, 69, 4, 16,164,160, 92,110,105, 54,227,225,161, 3, 44, 44,169,251,249, 46,196,174, 70,107, 78, 16,219, 13,218,183, 35, 0,
+193,241,122,245,229,237, 91, 29, 30,172,189,162, 97, 13, 34,141, 53, 97,254,225,237,183,238,121,237,215,127,113,237,199,202,229,
+178,111,194, 37,179, 40, 1,200,231,138, 45, 5, 26, 26,169,140,143,215,192,162, 53,236,176,204, 76,113,224,189, 34,205,108,206,
+ 63, 25,158,124,236,145, 57,243,230,117,205,156, 21,166,190,204,246, 73, 8,192,130, 38, 73,190,249,149, 47, 52, 27,141, 15,127,
+244,239,242,249,124, 26,139, 96, 83, 34, 34, 8, 64,185,181,149, 36,233, 31, 24,140,227,216,103,116, 6,180, 31, 11,204,118,115,
+ 88,220,251,107, 94,241,171,169,213,198,246,237,217,117,252,137, 39,107, 96, 89, 64, 77,219, 33, 97,107,217,168,217,248,234, 23,
+111,204,229,242,215,252,213, 39,114,185,156,166, 73,240,128, 22, 48, 8, 3, 64, 91, 91, 7,176,233,239, 27,136,163,216, 30, 65,
+ 34,236,156, 5,116,115,210,125, 98,118, 25, 31, 68,195, 13, 94,125,121, 91,179,217, 56,228,176,169,152, 77,147, 90,192,216,243,
+155,165,222,104,124,253,150,155,167, 29, 49,227,210, 63,253, 51, 12, 2, 1, 64, 20,177, 21,128,195, 16, 16, 91,219, 90,227,168,
+121,224,192,254,180,253, 21, 16, 16, 20,180, 77,190, 43,153, 92,217, 36,146,177,145, 8,111,221,242,220,180,174,110, 16, 97,195,
+ 62, 26, 29,207, 1, 34, 44, 0,216,104, 54,254,249,159,110,154, 49,243,200,139,222,251, 62, 36, 74,179, 56,128, 88,231, 19, 66,
+ 42,151,138,205, 70, 52, 56,168, 73, 79,187, 62,240, 61,185,110,145,100,118, 10, 28, 34,170,182, 54, 73,210,219,179,231,136,238,
+ 89,204,153, 95, 11,136, 72,104,183,204, 48, 32,214, 27,227,223,248,210,231,167,119,117, 95,248,158,203, 0, 80,139, 67,139,177,
+128, 77, 75, 1, 5,197,124, 56, 94,111,142,140,140,128,127, 51,125,182,186,159, 67, 30,188,121,188, 85, 88, 0, 64,198,107,213,
+250,248,120,123, 71,167,164, 16,137,150, 97, 44, 34, 33, 34, 62,249,248, 58, 17, 96, 54, 27,159,124,172,208,210, 58,117,198,145,
+207,108,122,218, 67,160,217, 7, 17,133, 97,192, 12,245,241,154, 59, 91, 50,127,233,127,137, 61,120,252, 70,166,231, 16, 72, 28,
+ 69, 90,152,167, 9,217,110, 39, 11,115,165, 50,246, 14,195, 27,181, 55,123,231, 44,102,201,146, 37,244,134, 91,243, 31,248,120,
+103,117,174,239,196, 5,189,149, 86,122,230,204,153, 43, 86,172,152, 52,169,147,141,217,182,125,251,125,247,221,255,118,182,247,
+221,221,221,187,119,239,126, 51, 79,157, 58,117,234, 77, 55,223, 60, 99,198, 12, 79,185,184,182,149, 65,120,195,134, 13,119,252,
+240,206,189,123,123,126, 79,167,126,179, 22,122,112,245, 67,168, 25, 15,128, 40, 0, 17,214,110, 14, 8,145,141, 49,243, 23,156,
+ 49,127,254,130, 36, 73, 70, 71,134,255,230, 99,159, 80, 16,234,237,223,178, 32,160,155,110,254,194,130, 51, 22,176, 97, 0, 17,
+ 36, 95, 74, 32, 3, 4, 0,204,232, 80, 85,102, 19, 34, 77, 58,100,202,191,220,118,107, 20, 55,239,191,239,254,187,238,190,231,
+247,218,178,201,147, 39,159,122,234,169,151,254,209,165,167,156,124,170, 97, 22, 97,192,208,214,197, 19, 78, 0,123,118,138, 71,
+ 26,236, 89,161,140,186, 97,182,240, 56,136,220,255,192, 3,119,252,240,174, 55,191,101,216,213,213, 85,173, 86,239,188,235,174,
+ 82,185,156,105, 78, 21, 80, 68,102,241,213,150, 63, 38,153,197,254, 94, 9, 41, 97, 99,220,241, 46, 44, 74,134, 89,118,219,242,
+145, 27, 55,110,248, 63,223,186,245, 77,249,208,181,215, 94,183,244,156,115, 80,143,108,180, 53,128, 30,241,130, 66,168, 94, 34,
+ 0, 2,132,246, 23, 4,192,202,104,248,130,132,132, 25, 1, 72, 80, 40, 16, 97,164,192, 36,201,230,141,235,119,108,223, 26, 53,
+ 26, 2,114,241,121,203,122,246, 15, 62,251,220,150,223,225, 67, 2, 16, 4,129,216,174, 85, 16,209,176, 48, 51, 32, 18, 35, 35,
+219, 30,223,225, 13,128,104, 33,116,209, 94, 11, 21, 3,209,206, 74,187,148, 56,225,141,235,215, 61,187,105, 3, 81,224, 32,120,
+140,162,232,208,142,214, 99,231, 30,189,117,199,171,191,109, 65,168,141,164, 45,147, 81,129,116,173,132, 20,240, 5,230,131,136,
+ 45, 11, 24, 41,152,141, 2, 4, 34, 64,168, 24, 17, 12, 14, 13,220,249,253,239, 8, 11, 81,144,169, 1,108,155,211, 53,237,176,
+109, 47,239, 20,225,223, 18,101,202, 57, 8, 16,178, 97,163,221,143,184,222,217, 86, 85,114, 48,219,134,164, 85,172,254,128,136,
+ 66, 32, 70,158,127,246,153,199, 31, 94,173, 77,106,107,123,219, 9, 39,157,218,209, 57, 9, 64, 70,135,135, 54,109,120, 82,129,
+167,227,143,157,243,171,151,182,255,214,176, 71, 68, 0,101, 86,181, 53,211, 18, 17, 37,219,197,248,127, 29,135,132,200,182,111,
+ 69, 18, 50,156,172,190,255,167,219, 95,122, 17, 0,218, 58, 58, 22,159,187,162,189,163, 67, 29,222,152,164, 88, 44, 94,120,233,
+123, 87, 63,240,139, 40,138,186,167, 29,250, 91, 23,132, 64, 0,137, 97,195,140,130,140,108,219, 99, 17,246,100,133,135,247,181,
+ 57, 23,237,224,212,137, 0, 1,146, 36,185,251,142,239,247,246,236, 5,128,249,103, 45,154,119,236,187,136,236,238, 59,146, 6,
+ 19,164, 21, 23, 92,252,216,218,213,181,106,213,247,153, 34,242, 6, 22, 74,146, 68,251, 84, 1, 65,176,161,228,155, 12, 73, 73,
+ 81,133, 65, 80,127,239,123,144, 36, 73,238,248,254,119, 6,250,251, 65,248,189,151, 95,217,222,209,137, 8,204, 76,100, 5, 67,
+ 6, 12, 33,132,128,136,184,116,249,202,173, 91,158,187,102,246,241,199, 30, 51, 87,132,227,102,115,245,154, 53, 15, 63,178,110,
+130, 44,138, 29,119,167, 77,131, 91, 60,107,235, 9, 34,128,170,169,177,171, 1, 77, 18, 8, 34,104, 76,114,231,237,183, 29,216,
+223, 95, 40,230,255,244, 3, 31, 42, 20,139,202, 69, 40,114, 69,174,153, 67,219,170, 96, 91, 91,199,105,103, 46,173,215,107,198,
+ 24, 99,132,194,240,221,203,207, 57, 48,112,224,133, 95,189,228,202, 15,177,161,108,215,227,112, 41, 1,228, 20,129,112,192,143,
+ 69, 7, 80, 8, 0,200, 24,243,179, 31,221,209,223,219, 83,110,109,189,252,131,215,148,202,101, 34, 2, 37,246,116, 1, 68, 72,
+ 68, 65, 16, 4, 65, 16,134,147,167, 28, 58, 94,175, 71, 81, 19, 17,131,192, 17,128, 65,254,178,203,254,164,189,189,205, 46, 72,
+ 50, 30,155, 54,200,138,126, 32,138, 66, 56,234,236,168, 75, 70, 1, 33, 32, 22, 94,247,200, 67, 59, 95,221, 81, 46,183, 94,118,
+197, 95,228,115, 5,103, 5, 85,100,232,191,246,135, 92, 46, 95,110,109, 31, 30, 26, 2, 0, 36,139, 43, 16, 5, 68,132, 68,185,
+ 48,255,183, 31,255,232, 65, 5, 26,106, 76, 42, 10,235,181, 42,232,250, 50,237,253, 45, 69, 44,200,194, 91,158,221,188,121,195,
+147,133, 66,254,178, 63,255,139,124,190, 64,132, 78,152,132, 46,235, 16, 2, 6, 20,148, 74,165, 92, 62, 63, 58, 50,194,118,251,
+220,186,237,154,213,138,185,191,255,239, 31,213,190, 76, 44,112,230, 92, 85, 15, 40, 64, 16,197, 81,220, 70, 50,162,174, 26,128,
+ 7,250,251, 31,252,249, 61,249,124,254, 3, 31,250, 72,161, 80, 20, 16, 20, 2, 18, 20,155,190, 28,252, 15,197, 98, 49, 49,102,
+172, 50,172,123,109,119, 65, 9, 87, 11, 84, 17, 19, 17, 81,107,107,187,239,237, 17,145, 61, 82,101,219,119,107, 30,135, 17, 59,
+100, 26, 65,234,227,227,183,127,231,159, 1,224,253, 31,188,166, 88, 44, 42,134, 41,100, 33, 8, 68, 32,235, 63, 84, 42,183,138,
+ 64,101,116, 68,129,119,180, 98, 65, 72,151,131,238, 69, 72, 72,129,117,106,187, 33, 54,176, 83, 4, 77,195, 76,151,226, 17, 63,
+ 99,204,191,124,251,171,204,252,158,247, 93,209,222,214, 78, 68, 40, 40, 36, 36,228, 82, 14, 41,253, 95, 42,149, 9,113,116,116,
+ 68, 83,173,160,254, 26, 38,210,209, 22,176, 2, 11, 88, 89, 11,185,109,242,173, 56, 40, 35,136,236,154, 79, 84, 14,149,121,237,
+170,251,170,149,202,153,139,206,153,222, 53, 19, 17, 5, 16, 72, 8, 72, 41,127,149, 8, 17, 82,177,165, 20, 4, 56, 52, 52,168,
+174,137,132, 14,203, 16,143,116, 73,138,123, 90, 16,205, 70,153,207,201, 30,137,210,213,128, 98,184,206,169, 89,100, 95,207,158,
+103, 55, 61, 53,229,176,195, 78, 58,237,244,128, 52, 90,196,234, 42, 20,124, 38, 32, 12,242,249, 92, 62,164,193,161, 97, 99,216,
+166,119,212, 98, 5, 9, 73, 82, 88, 39,205,188,232, 88,112,210,101, 56,101, 3, 56,182,216,229, 31,113,120,169, 72,179,209,184,
+227,123,223, 14,195,240, 61,239,187, 50, 8,115,226,219,125,113,137,140, 4, 0,131, 32, 40,149,138,149,177,154, 73, 18,171,236,
+ 68,173, 16, 92,210,151, 12,214,228,253, 83,207,105,151, 24,173, 33,245,112, 5, 79,172,103,108,198,108,126,244,131,239,154, 36,
+249,227, 15,124,176,144,207,147,171,141,108, 26, 86,131, 11, 17, 81,185, 84,170, 55,226,122,125,220,125,172,160, 63,122, 50,102,
+225, 12,228,153,145, 9,128,202, 73, 21,231,100,235, 52, 30,179,116,251, 45,204,219, 94,220,210,219,179,231,140,179,151, 30,122,
+216, 84,208,116, 44,174,198, 68, 4,155, 66,161, 92, 46, 27,147,140,140, 12, 75,154,217, 81, 82,250,198,126, 69,177, 21,134,199,
+132,209,213, 28, 64,154,123,237,106, 44, 84,105,163, 95,177, 79, 96,110, 52, 27, 63,191,251,142, 98,177,229,148,249,103,162, 10,
+119,148, 43, 83,197,175,221, 8,105,105,105, 9, 73,134,135, 71,152, 89, 99, 42,179, 81,146,110,145,213, 19, 88,224, 28,211,213,
+160,221, 50, 15,119, 57, 88, 19,213,139,244, 41,134,249,206,219,111, 5,132,247,255,151,171,194, 48, 60, 24, 19,118, 72,113, 16,
+134,133,124, 80,169,214,227, 56, 6, 65,165,216, 52, 34, 68, 15,100,207,170, 88,195,243, 4,104, 25,236,202,200, 97,123,182,142,
+ 6,199,119,136,133,249,100,247,174,157,253,251,122,230, 47, 92, 82,110,109,243, 59,125, 16,183, 13,136,229,214,214, 36,129,177,
+177, 74,234, 58,232, 58, 6,176,111,152,113,205, 84,131, 98,255, 19, 81,101,177,161,111,183,108,185,228, 29, 8, 45,224,117,215,
+237,183,230, 11,133,211, 22, 44,212,196,245,250,135, 8,180,148, 74,146, 52, 7,135, 70, 82,165, 70,234,244,146,241, 70, 79,121,
+121,100,211, 22,167, 32,178,249,233,245, 90, 17,131,101,196,152, 83,236, 17,109,208, 61,188,250, 62, 0,120,239,229, 87,134, 97,
+136, 8,242, 6,171,145, 48, 12, 2,228,218,120, 51,137, 99,204, 48, 56,142,106, 67,145, 12,126,119, 16, 9,224, 92,234,213, 87,
+118,180,182,182, 2, 8,137,210,134, 14,103,101, 75,111, 0, 51, 84, 70, 71,158,219,180,225,200,163,231, 78,158, 60, 69,220, 25,
+ 52,129, 87, 20, 33,162, 98,177,104,140,140, 85,199, 64,233, 18,176, 26, 50, 79,175,251,213,128,182,158,218,111,185,210, 13, 16,
+ 43,163, 35,227, 99,149,195,167,207,112, 44,131,197,204,193, 42,191, 4, 5,128, 57,185,235, 95,191, 27,132,225,185,231, 95, 68,
+ 68,106, 30,123, 46,102,190, 99,161, 80, 4,137, 71, 71, 71,213, 5, 81,196,135,132,235, 95, 38,110,153,203,131,172,100, 55, 72,
+146, 36, 59,182,189,216, 53,235, 40, 45,121, 73,153, 0, 20,171,138,241,177,176,103,247,174,145,161,193, 37,203,207,207,231, 11,
+106, 49,141, 98,246,239, 46, 66, 68, 1,113,163,201, 81, 20,217, 74, 69, 99,221,238,147,103,188, 50,120, 57, 90,211,144,128,114,
+206, 91,158,125,230,232, 57,243, 16, 9,124, 30, 74,183,214,146, 1,144,196,209,143,127,240,221, 66,161, 56,239,184, 19, 20,219,
+112, 93,179,248,101, 1, 98, 75,169,108, 88,198, 42,163,169,230, 10, 56,117,217, 20, 23, 22, 86,210,212,209, 67,162,141, 12,194,
+254,190,222,174, 89, 71, 17, 5,222,236,182,252, 64, 47, 27, 6, 17,225, 23,158,219, 44, 34, 23,190,231,178, 32, 12, 88,224, 96,
+155,139, 0, 72, 24,230, 36,105,212,106,117, 99,140,139, 20,119,140, 74,202, 99,123,190, 33, 5,236,213,153, 16,146, 56,169,140,
+142,228,194, 92,182,245, 35,199, 81, 0,186,254, 62,142,227,181,247,223,219,222,209,113,216,212,105, 40,130, 32, 46, 22,211,200,
+ 34,196, 66, 33,103, 24,235,227,227,142, 93, 17, 65, 37,113,108,103,146,238,153, 3,210,125, 83,170, 41,106,251, 75, 47, 28, 58,
+117, 26, 96, 54,133,171,232,139, 69, 64, 24, 80,241,148,199, 31,121, 8, 16, 47,250,227,203, 49,176,165,130, 76,116, 32, 68,200,
+ 23, 10, 96,226,202, 88,197,136, 1,208,214, 81, 73, 75,116, 60, 34, 59, 99,176,164, 75, 78,137,212,202,232,200,225,211,142, 0,
+204,118,197,105,145,175, 20,151,136, 64,179,217,120,118,211,250,233, 51,186, 90, 91,219, 50,137, 22,197, 45, 75, 80, 16, 3, 2,
+137, 12, 68,205, 8, 60,219,193,182,133, 4,229,161,220,230,176,213,102,100,202, 81,196,132,121, 96,127, 95,152,203, 99,166, 40,
+ 82, 11,146, 58, 32, 91, 13, 30,175, 91,243, 32,179, 44, 63,255, 82,237, 96,192,198, 23,248, 26, 6, 5, 10,197, 2, 34, 87, 70,
+ 43, 89,114,153,145, 45, 17,100, 63, 94,252,215, 17, 86, 58,134,253, 49,208,179,123,215,148, 67,167, 34,102, 56, 74,103, 57, 74,
+153, 89,145, 70,125,252,165, 23,158, 61,114,246,220, 82,185,156, 70,137, 74, 83, 28,185,132, 68, 4, 18, 39, 24,199,145, 26,196,
+ 38, 58, 65,246, 41,250, 32,106,204,185,143,110, 77, 28, 69,133,124, 1,136, 28,129, 37, 25,122, 88, 43, 70, 22, 4, 17,150, 77,
+ 79, 61, 41, 34, 11,151, 44,183,197, 50,164,234, 77,187,101, 34, 45, 45, 37, 66, 25, 29, 29, 86,161, 29,170,249,196, 54,222,160,
+ 0, 36, 59,247,201,150, 87, 98, 21,127,187, 95,251,117,177, 84,202,196,136, 11, 74,235,212,154, 21, 64,162,168,249,204, 83,235,
+ 14,155, 54,189,181,173, 85,205, 97, 93,129, 83,250,156,136, 8, 76, 61,226, 36, 78,108,209,142,172, 29, 5, 90, 93,174,117, 26,
+127, 42, 58,238, 21, 5, 80, 16,235,227,181,201,135, 76, 65,177, 88,207, 4,119,103, 1,128,112,207,174, 93,235, 5, 0,164,119,
+223, 94,198,112,210,161,211,159,217,180,233,141, 25, 25,196,124, 62,143,192,181, 90, 93,161,217,140,136, 39,163,205,144, 12,101,
+150,249,163,255,123, 96,160,175,173,173, 35,195, 75, 59, 6, 84,157, 76, 53,104,195,195,195, 35, 35, 35,239, 52, 90,232, 63,246,
+ 33, 34,157,157,157,147, 38, 77, 10, 1, 96,116,116,116,207,158, 61,255,105,148,215, 23,194,147, 38, 77,162,255, 52,196, 31, 24,
+157,248,159, 6,250, 3,123,132,255,222, 31, 48,109,218,180,203, 47,191,124,209,162, 69, 65, 16, 76, 64,237, 93,141,109, 76, 34,
+204, 81, 51,218,244,204,211,143, 60,186,238,133, 23,182,252,127,110,160,206,206,206, 43, 63,248,193,249,167,207, 63,108,234, 84,
+ 29, 18, 74,117, 89,105,209, 99, 91, 23, 17, 33, 10, 68, 36,204,229,151, 44, 61,103,241,146,101, 78,191,200, 99, 99,149,158,158,
+222, 29, 59,118, 60,181, 97,195,171,175,254,250, 15,219, 64,136,120,214,194,133, 31,185,246,250,174, 25, 51,226, 56, 18,112,147,
+165, 10,115,102,160,230,180,138,204, 84, 40, 34, 2, 66,118,190, 66,107, 79, 12,218, 59, 38,181,181,119,206,157, 55,239,162,139,
+ 46, 84,200,186, 86,171,109,124,122,211,250,245,235,119,190,246, 90,173, 54,254,142, 51, 16, 34,118,118,118,158,120,210,137,243,
+230,206,237,234,234,158, 59,111,238,148, 67, 14, 1, 10,130, 32,103, 73, 63, 34, 99, 12, 6, 1, 89, 60, 27, 72,137, 55,215, 27,
+104, 35,103,187,127, 0,143, 68,105, 19, 3, 34,164,144,169,173,215,148,204, 36, 8, 2, 45, 90,203,173,109,203,150, 45, 91,186,
+116,137,202,253,147, 36,121,104,205,154,123,126,252,211,230, 91, 21, 43,188, 69, 3,117,116,116, 92,114,233, 37,103, 44, 56,227,
+144, 41, 83, 38, 79, 62,164, 92, 46,123,229, 98,170,210, 21, 1, 12,188,200, 76,249, 3, 0, 84,165,188, 18, 15, 22, 59, 23,199,
+213, 40, 10,203, 96,137,101, 78, 21,173,110, 44, 1,144,156,122,159, 73,231,119,212,241, 8,109, 83,164, 19, 99, 58,199, 30,132,
+185, 11, 47,184,240,194,243, 47, 96,225,177,202,216,142, 87, 94,190,231,199, 63,221,219,211,243,246, 26, 8, 23, 47, 94, 92, 42,
+149,206,191,224,130,249, 11, 22, 4, 65,160, 67,147,110,193,144,206,180,165,213,185,229,208, 83,224,192, 37, 23, 43, 63,240, 24,
+141, 29,151,102, 59,252,120,112,104, 77,148, 36,171, 67, 1,192,235,194, 47,163,173,179, 3, 45,238, 69,156, 36,201,120,109,124,
+116,116,168, 50, 50, 92,173, 86,163,102, 51, 8,130, 92, 46,247,244,230, 95,110,219,254,242,192,192,129,223,199, 52,221,221,221,
+179,102,205, 10, 69,100,201,210,101,103, 45, 92,228,122, 83,160,208,221,223,144, 98,247,156,106,176, 89, 84,116, 14, 2, 66, 2,
+ 2, 40,200,100, 73, 39,118,136,169, 71, 78,145, 72, 28,149,100,101,244, 86, 30, 76, 40,108,145,115, 64, 1, 33, 10, 52, 31, 17,
+170,177, 20,216, 97, 59,111,131,130, 18, 24,230, 36, 54,195, 67,131,219,182,110,217,185, 99, 91,179,217,180, 60,207,196, 62,169,
+ 24,226,201,199,205, 9,131, 99, 6,134, 43,155,159,219,242,122,194,251,255, 45,196, 52, 64, 12, 51, 42, 95,230,192,126, 71, 42,
+ 50,160,157,243, 67,203, 31,144,141, 11, 29, 59,209,249, 90,116, 16,149,183,141,117,192,131,148, 20,152,210,244, 58,237,104,211,
+144,117, 70, 66,151,122,148,216,181, 99,152, 18, 53,163, 87, 94,222,254,194,230,141, 35,195,195,150,185, 71,248, 77,232,180,146,
+ 28,204, 60,185,189,188,114,217,194,231, 94,122,185,175,127,255,239,153,131,208,178,164,152,194,198, 44,198,234,140, 83,192, 21,
+ 29,217,160,122, 24, 37, 97, 39,124, 67,200, 6,102,214, 40, 46, 6,213, 44, 78, 98,142,150,198,133,236,132,170,229,176, 24, 56,
+137,147, 61,187, 94,219,188,113,125,111,207,110, 37,140,193,115, 64, 2,185,124,174, 88, 44,230, 11,133, 48, 12,153, 57,106, 54,
+ 27,245,241,102, 20,147, 99, 25,116, 35, 78, 60,230,232, 56,142, 7,135,134,223,178,129,148, 81, 82, 36,217,110,186,194, 39, 46,
+133,122,217, 5, 32,128,168, 96,201, 77, 23,167,208,231,193,238, 66,158,137, 66, 64,134, 44,191,238, 12,150,101,218, 44,178,166,
+ 32,137,169, 86,107,207, 63,251,204,179, 79,175,183,100, 18, 90,169, 70, 91, 71,219,172,163,231, 29,113, 68,119, 75,169,133,130,
+ 64,175, 4,177, 74, 51, 99, 68,140, 73,146,190,190,222, 23,159,127,174,217,108,218,165, 19,156,252,174, 99,214,174,123,234,173,
+ 26, 8, 83,231, 96, 54, 96, 37,242,142, 95,115,155,107,221,192,207,232, 56,132, 48, 13, 39,182, 4,157,227,190, 88,188,102,197,
+126,115,116,248, 91,154,162,116, 50, 69, 7,137, 5,128,141, 25, 30, 30,124,108,237,170, 61,175,237, 20, 55,187, 1, 40, 71,206,
+158, 51,239,152, 19, 58, 38, 77,242,156, 88, 22, 81,210, 20, 64, 20, 48, 27, 10,194, 35,102,116, 79,155, 54,125,100,100,104,243,
+211, 27,155,141, 6, 2,134,200,199,204,155,179,109,251,203,111, 53,196, 16, 81,192, 36,137,184,179,124, 98,200,184, 84, 97, 69,
+ 93,233,137,101, 37, 67,142, 64,247,252,108,202,243, 90,122,193,166, 43, 75, 16, 59,205, 26,184, 65, 16, 1, 49,198,244,237,235,
+ 89,183,118, 85,239,190, 61, 90, 94,139,200,225,211,143, 56,225,228,211, 14,157, 58,205,210, 79,153,131,207, 73,217, 17, 68,116,
+240, 80,136, 89, 2, 97,102, 98, 9,194, 67,166, 76, 93,113,254,197, 81,212,220,242,252,179,251,246,238,153,122, 72,199, 54,128,
+ 82,169, 52,111,222,220,238,174,174, 98,161, 24, 39,209,224,224,208,214,109,219,246,239, 31,248, 29, 6, 74,226, 88, 28, 45,145,
+ 94,247,225,212, 76, 90, 22,179,203,170,224,179,136,203, 52, 12,158,168,178, 82, 30, 55, 88, 9,246,188,115,179,137,206,164, 46,
+116, 5, 4,192,152,164,191,175,119,205,131,247,238,223,183, 79, 47, 78, 9,115,185,227, 78, 56,249,184,227, 79, 44,180, 20, 9,
+201,235,115,172,101,156, 40, 14, 2,107, 71,244, 76,142,102,120, 34,150,128,152,153,185, 24, 4, 11,206, 90,220,222,217, 73, 20,
+190,255,138,225, 56,142,188, 98, 87,152,153,205,202, 21,203,153,205,154,135, 31,121,244,177, 39,222,216, 64, 58,139, 98, 12,123,
+ 2,223,139,203,172,147, 75, 74, 22,171, 97, 28,157, 2,170,252,212,191, 5,209, 15, 66, 41,155,162, 71,161, 53,176,120,112,214,
+ 10, 22, 20,217, 28, 30, 30,122,232,254,159,245,236,222,165,152,110,177,165,229,140,179,151,117,205,156,149,203,229,124, 37,137,
+153,180,143,132, 58,153, 1, 46,184,201, 22, 22, 2, 64, 44,172, 7, 31,137, 64, 32,109,237,157,141, 70,189, 94,175, 87, 70,199,
+ 84, 10,139,104,165, 94, 8,200, 78, 0,147, 36,120,222,187,151,159,187,116,241, 63,127,243, 59,253, 19,189,201,207,255,217,147,
+221, 43, 23,180,210,245, 25,198, 75,191,210,177,136,140, 68, 6, 93,198,181,195,103,110,147,245, 89,144,190, 63,184,215, 33,179,
+ 25, 27, 29,125,252,145,213,219, 94,220,162,250,128,246,246,142, 51, 22, 45,235,154, 57, 43, 12,115,206,139,179, 5, 21,130,136,
+ 45, 2,192,198,107,154, 0, 29, 26, 31, 0, 34, 97,190,144, 39, 10,107,181,170,234, 23,180,142, 67,177, 51,116,204,132, 8, 12,
+ 6,149,138, 3, 8, 67,100, 54,129,192, 95, 93,247,151,175,188,250,234, 15,238,248, 81,146, 36,226,199,110, 92,234, 96, 55,204,
+226, 34, 76,183, 92,255, 81,137, 30,166, 74, 29,165,158, 82, 10, 56, 99, 23, 79,170,219, 2,216,221,137,100,133, 99, 44,205,102,
+227,185, 95,110,122,124,237, 42,253,164, 82,169,124,198,226,101, 51,103, 29,149,203,229, 0,179,169, 70,101, 45,144, 37,237,209,
+245,116,158, 7,180,158, 14, 24,134, 97, 46,159, 79, 18, 83, 29,171, 36, 38,177,154, 80,235,202,164,157,161,234,203, 68, 84,193,
+104,149,140,226, 52,183,196, 56,251,232,217, 55,124,250,239,254,237,135, 63,170, 84,199, 33, 59,210,234, 15, 96, 13,101, 13,115,
+101, 79,172,239,120, 9,179,187, 50,197,158,252,254, 22, 21,155, 84, 84, 90,100,247, 88,231,136,221,237, 42,146,196,201,222,221,
+187, 86,253,226,158,202,232, 8, 0,132, 97,120,246,210,119, 31, 53,103,110, 62,159,119,170, 42, 96,176, 92,182,157,189,148, 84,
+ 44,195,204, 7, 85,132, 4,136,136,133, 98,145,136,162, 40, 26, 29, 29, 53,186,249,118,160,210,138, 39,173,243, 18,130,149,178,
+233, 40, 39, 16, 49, 51, 9,130, 78,217, 26, 8,130, 16, 77,130,239,127,255,101, 59,119,190,246,235,215,246,132, 89, 14, 55,229,
+175, 29, 45,163, 53,178,165,202,197,170,201, 92,225, 15, 44,108, 11, 90, 61, 76,156,153,156,120,205, 73, 28,109, 1,193, 99, 99,
+163, 15,221,119,239, 43, 59,182, 18,145, 8,191,235,228,211, 79,157,127, 86,169, 84,178,210,175,140, 81,245,220, 23,178, 10,114,
+ 85, 30,138,168, 30, 72,178,183, 70, 21,138,197, 64, 77, 51, 50,154, 36, 49,103,218, 10,255, 52, 87,121, 19, 8,251, 5,185, 10,
+140,136,216,102, 57, 36, 66, 97, 4, 10, 1, 13,168, 28, 47,204,136, 68, 68,211,133, 94,233,225,206, 35,100, 45,249, 57,157,166,
+ 75,143,111,116,122, 25,144,116,250, 61,195,156,248,194, 47,142,162,237, 91,127,181,246,193,159, 71,205, 38, 17, 77,159,209,181,
+248,156,243, 58, 39, 77, 86,198,212,110, 11,137,213, 63, 89,102, 29, 84,226, 39, 86,102, 47,104,197,182,168, 4,102,190, 80,200,
+133, 20,199,201,232,232,104,212,108, 58,103,119,213, 62,138,115,196,140, 16,194, 73,227,157, 2,178, 19, 49, 0, 0, 10,109, 73,
+ 68, 65, 84,238, 14,157,237,208,247,116, 72,132, 70,128, 72, 75,211, 48,203,141,219, 92, 12, 30,175, 17, 68, 65, 64, 22, 39,166,
+246, 58, 49,203,193,131, 83, 73, 0, 48,167, 68,108,166,173, 48,198,140, 12, 15,221,255,147,187,246,245,236, 65,196, 32, 12,206,
+ 57,239,226, 35,143, 58, 58, 8,115, 68,100,231,164,201,215,161, 78,154,237, 52, 95, 62,253,145,138, 4, 8, 16,161, 88, 40, 6,
+ 33, 49,243,232,232, 88,179,209,240,184,146,173, 76, 88, 4,129,132, 24,217,213,107, 30,146, 66,175,176,118,172,180,164,226, 73,
+ 4, 39, 27, 36,239,128,169, 7, 49, 79,168,105,108,174, 81,138, 27,192,235, 42,237, 91,217,233,123,193, 76,163, 37, 86,156, 96,
+139,101, 6, 72,162,104,235,139, 47,172,125,224,222, 56,142,137,104,222,113, 39, 44, 88,184,184, 92,110, 69, 34,127,216,217, 34,
+ 58,245, 14,219,250,162,235, 71,208,182,106,128,132,185, 92,174, 80, 44, 8,155,122,189, 89,171, 85,245,172, 17,171,155,113,208,
+165,187,241,199, 74,137, 93,172,191,174,145, 6, 34, 96,182,122,149, 84,176,142, 2,254, 82, 35,127, 51,131, 71, 33,124, 33,167,
+ 82, 74,159, 26, 16, 17, 24,210,150,221,159, 14, 62,111,185,139, 7,116,123,140, 72,101,100,120,213,125, 63,221,249,202, 14, 68,
+ 44,151,203,231,156,127,201,140,174,238, 32, 8,237, 18, 85, 51,231,143, 56,251,117,172, 74,215, 98, 10,226, 52,113, 72, 97, 24,
+ 22, 11, 69,128, 36,137,147,202, 88, 37,142, 34,197, 23,172,248,223,197,186,189, 4, 79,208,159, 12, 94,183,207, 19, 43,124, 4,
+208,107, 40, 39, 42,230,156,184,201,117,231,225, 65, 24,149,102, 83,239, 96, 54, 13, 43, 88,165,130, 98, 72,101, 13, 86, 17,155,
+233,223, 53, 91, 37, 73,178,107,231,175, 31,248,217,143,198,199,107, 65, 16,204, 59,238,132, 51, 22, 45, 45,151,202,118, 92, 23,
+252, 4, 79, 42,162,244, 83, 42,206,105,220, 55, 4, 66,194, 66,161, 80,200,135, 81, 28, 55, 26, 81,173, 58,166, 58, 90,223,250,
+166, 17, 4,254,110, 3,119, 43, 64,122, 61,153,144, 54,225, 2,175, 31,101, 57,104,248,223,181,159, 56, 33, 7,185,105,125,235,
+132, 30, 57, 86,165, 39,248,192,211,139, 6,192, 10,137,157, 98,196,190,140, 69, 26,141,250, 99,107, 30,124, 97,243,211,128, 24,
+230,242, 43, 46,188,180,123,230,145, 65, 24,162,171, 68, 49,213, 3, 30, 52,138, 1,238,110, 19,209,177, 26, 36,202,233, 35,144,
+122, 51, 30, 27,171,196, 81,147,189, 39,100,234, 79,155,174, 60, 92, 7, 8,238,206, 2,116,211, 57,156,118,138,146,213,244,166,
+ 83, 14,233, 68, 73,186,166, 48,163,111,149, 20,104,113, 86, 87,132, 16, 61,140,110,103, 93,216, 43, 30, 83, 89, 30,179, 17, 30,
+ 58,112,224,254,159,221,221,183,111, 47, 32,118,205, 58,106,233,185, 43,219, 58,218,137,130, 84, 36,143, 41,162,228, 79,218,131,
+ 85,221, 42, 87, 37, 42,182,148, 2, 18, 22,169,142, 71,149,202, 40, 27,149,216, 8, 30,132, 50,249, 57, 51,143,194,217,178,128,
+179,122, 49,100, 7, 47,100,127,149,185, 38, 77, 82,172, 13, 61,198,145,173,131, 36,157,113,113,250,109,244, 62, 99, 59,118,132,
+244, 42,157,212,123, 68,196, 36,201, 43, 47,111,251,197,143,239, 84,202,225,140,197, 75, 79, 58,101, 65, 46,151,211,234, 62, 51,
+188, 3, 7, 25, 5,101, 66,157,169,183,242,132, 97, 88, 44, 22, 17,146, 40,230,106,181,218,104, 52,196,222, 36,236,212,128,200,
+ 25, 57,143, 11,119, 64, 47, 45, 99, 97,132,236,206, 75, 70,121,199, 19,198,172, 4, 60,116,225,199,176, 38, 92, 57, 0, 25,213,
+176,157, 7, 5,127,200, 35,248,252,196,174,157,130,204,145, 15, 32, 34,205, 70,125,195,147,235,158,121,234,113,102,110,107,107,
+ 63,247,130, 75, 14,159,118,132, 3, 40,178, 37,219, 27,133, 62,166, 51, 10,130,136, 68,133, 98, 75, 46, 64,230, 56, 74,100,116,
+116, 36,137, 19,239,202, 41,129,164,192,128,237,104,192, 75, 50,197,129,118,104,239, 51,201, 72,209,253,221, 43,153,128,242,165,
+ 73, 38,143, 34, 58,153,211, 65, 33,150, 94, 43,145,114, 59,105, 47,227, 80, 12,127,251,160, 34, 60,204,213,177,177, 7,238,253,
+241,206, 87,182, 3,224, 17,221, 51,151,175,188,164,173,189,221, 87,128,111, 82,117,164, 11, 11,131,176,216,210, 66,146, 48, 75,
+181,214, 24,175,213, 84,208,153,230,133, 20,134, 20,204, 64, 79, 58,144, 35,190,101,242,194,175, 9,222, 98,125,137, 37, 13, 45,
+191, 72,251,150, 74, 54, 49,143,142, 12,247,245,238,203,212, 65,214, 99,188, 33, 28, 91,229,248, 48,241,106,108, 61, 3, 17, 4,
+132, 19,211,215,219,243,139,159,220, 57, 58, 60, 76, 20,156,118,230,162,147, 79, 91, 80, 40, 20,236, 89,237, 94,242, 59, 77,164,
+ 29, 83, 24,230,139,197, 2, 74, 20, 37, 48, 86, 29,107, 54, 27,108, 88,235, 54,175,117,247, 41, 62,189,143, 67,178, 18,113,223,
+ 53, 91,112, 33,171, 38,119,108,230, 68, 86, 42,157, 78,176,159,208,108, 52,182,191,244,171,222,125, 61, 97,190,152,194, 29,224,
+210,141,173, 20, 61, 72,161, 23,240, 58,195,249, 74,135, 25,216,152,157,191,126,229,190,123,238,140,162, 38, 5,193,210,229,231,
+207,158,119,108, 46,151,199, 12, 9,147, 29,253,248, 77,150, 18,145, 32, 8, 90, 90, 74,194, 9, 74, 60,222, 52,213, 74, 37, 73,
+ 98,119, 57, 13,166, 23, 99,161,184,177, 18, 15, 28,104, 68,161,248, 49, 92, 73,121, 60,201, 10,237, 37,211, 34,189,158, 95,176,
+142, 99,246,247,247,189,180,229,249,195, 14,159,122,202,233,243,247,245,246,215,246,236, 13,125,126,102,244, 99,199,142,195,179,
+ 13,138,250, 42,122, 20, 67,152,227, 40,222,252,244,250, 39, 30,121, 72, 68, 90,219,219,207,187,232,189, 83,167, 78,163, 64, 21,
+216, 98, 95,237, 43, 28,129,172,194, 22, 39, 34,182, 65, 24,182,180,180, 16, 24, 3, 92,171,155,177, 74,197, 24,147, 94, 34,102,
+155, 63,214,105, 54,197,123, 57,173,135, 57,147, 9,189, 73,188, 10, 51,149, 3, 64,170, 71, 22, 63, 41,152,246, 5, 34,205,122,
+253, 87, 91,158, 19, 54,199,157,112, 82, 24, 6,174, 65, 75, 91, 13,189,211,212, 97, 46, 30,227,212,198, 44,179,107,194,220,104,
+212, 55, 60,254,232, 47,159, 94, 15, 0, 83, 15,159,126,238,202,139, 59, 39, 79,118, 66, 93, 69,233, 60,113, 33,236,102, 11,210,
+142, 49,109, 9, 48,151,203, 21, 91, 74, 73, 60, 46, 16, 86,107, 13,189,181, 18,252,133, 46,233,237,218,152,166, 63,237,157,173,
+ 27,160,248, 54, 90,252, 45, 91,246,197,233,221, 70,226, 46,254, 98,155,163,125, 35,134, 8,198,152,225,193,193, 87,118,188, 52,
+125,198,140,150,150, 86,112,247,239,103, 16, 69,223, 75,129,187,214,197,198, 9,131,207,215,202,148, 25, 51, 94,175,173,254,197,
+207, 94,222,246, 34, 0,204, 60,106,246,185,231, 93,212, 82, 42, 89,235,100,207,111, 47, 76, 32, 59,153,236,221,202,250, 14, 81,
+ 62,159, 15,131, 32,224,168,105,176, 86,171, 52,155, 13,102,255,137,168,172,170, 38, 99,203, 94,235, 12,164, 13, 44, 85, 69,103,
+245, 70,110, 6,215, 15, 34,184,157,102,175,127, 6,127,207,159,237,111,226, 40,122,121,199, 75,194,230,232, 57,199, 40,150, 34,
+ 14,169,200, 30,243,217,161, 10, 1,135, 52, 91,125,183,235,178, 12,243,200,232,240,170,123,239,233,217,179,139,136, 78, 56,101,
+254,233,103,158, 93, 40, 20,236,205,224, 14, 77, 68,156,112,132,251,185,119,109,100,245,171, 19, 81,161,216, 18, 18, 50,199,245,
+152, 42,149, 74, 28, 71, 98,239, 4, 18,246,119,197, 34, 59, 24,134,221, 12,139,147, 25, 75, 6, 13,158,160,159,206, 64, 64,162,
+170,116,192,140,144, 28, 83,124, 79,234,227,181, 87,119,108,237,156, 60,165,164, 87, 93,233,176, 10,103,231,184,210, 94,204, 41,
+157,208,147,159,108,169, 42, 1, 97,100,225,145,225,161,251,126,114, 87,127,111, 15, 17,158,116,218,153,167, 46, 56, 43,159,207,
+ 91, 76, 20,125,197,152, 50,179,214, 88,105, 43, 32,206, 58, 65,177,165, 36, 28, 1, 80, 51,230,106,101, 36, 49,137,176,117,121,
+241, 19,101,182,229,212,149,160,139,120,247, 11,100,118,163, 76,217, 86,210,222,177,229,110, 83, 78,107, 96,151, 6,181,157, 53,
+108, 14,244,247,233,109, 75, 65, 16,184,139,158,178,173, 72, 22,180,183,209, 40, 86, 8,238,219, 25,151,118, 12,155, 3,251,251,
+127,122,215,237,213, 74, 5, 0, 22,157,179,114,222,113,199,135, 97, 14,221, 20,155, 21,227,103,178, 79, 22, 26,245,213, 2, 2,
+ 80, 16, 20,139, 45, 1,154, 88,164,222, 76, 42,163,163,108, 12,123, 53,132,255, 26,206,214, 22, 0,100, 6,112, 55, 61,104, 47,
+202, 62,183,112,170, 20,215,229, 10,163,155, 4,182,167, 61,106, 83,107,183, 42, 73,226,158, 61,187,141, 73,186,143,156,109,163,
+195,245, 32, 25,102,216,122, 99, 26, 98,236, 48,123, 76,143, 85, 16, 17,147,112,239,190,158, 7,239,189,187, 86,173,134,249,252,
+217, 75,223, 61,123,222,177,158,120, 96,207,135,120,184,195, 90,202,187,149,187, 27, 17, 49, 8,194, 82,185,204,241,184,161,160,
+222,136,106,181,154, 18,185,153, 51, 55,237, 9, 17,213,115,208,194,254,118,252, 79,255,114,183,176,101,202, 31,246, 99,220,122,
+242,187, 41, 74,182, 21, 11, 10, 50, 48,196,113,180, 99,235,139,157,147, 39,119,116,116, 90, 87,200, 94, 81,151,177, 14,102, 88,
+ 13,189,159,217,146,196,246, 60, 68,212,155,222,251,251,250,238,251,201, 15,171,149, 10, 18, 45, 92,250,238,217,243,142, 85,198,
+ 74,145,145,236, 4,153,100, 10,103,111, 44,123,195, 32, 96, 16,134,133, 66, 1,185,153, 48, 54,198,235, 90, 37,123,172, 73,132,
+221, 88,200, 65,113,101, 15,123,206,148,133, 46,243, 74,230,123,165, 67,184,110,176,212, 94, 59,152,182, 26, 12,213,234,216,190,
+ 61,187,166, 78,159,145, 11, 67,255,194, 12, 86,154, 54,119, 62,251,167,167,152, 61,145, 37,237, 65,141, 49, 61,123,119,255,252,
+238,127,139,154,205, 48, 12,206,185,224,143,186,103, 29, 21, 6, 65, 58,231,137,169, 40, 3,237,173, 20,246,255,213,179,210,214,
+ 60, 12, 91, 90, 74, 98,234,145, 9,234,245,250,248,248,184,135,189, 5,217, 14,177, 91,210, 94,128,209, 86, 39,153, 82, 23, 93,
+165,227, 8, 55,219,124,122, 62,215, 95, 64,226, 7, 57,217,179, 44, 0, 34, 50, 86, 25,217,183,119,207,161,135, 79, 11, 40,176,
+185, 67, 38, 82,217,110,186, 68, 50,135, 99,232,243,158,100,165, 37, 34,204,188,111,239,158, 85,247,254, 56,106, 54,115,249,252,
+217,231,172,232,234,158, 21, 6,129,187,209,212,126,127, 15, 45, 74, 6,238, 1, 15, 54, 2, 16, 81, 46,204, 21,242,121, 48, 77,
+150, 96,108,108,172,209,104,168,112,196,190, 66,208,247, 79,122,137, 28, 58, 86, 73,192, 93, 74,113,112, 87,145,185,207, 45,123,
+250,218, 34, 21,109, 91, 97, 89, 42,100, 99,250,122,123,162,168,121,248,244, 25, 62, 35,102,156,113, 66,227,237, 7, 90,210,102,
+ 21, 44,238,236, 59, 88, 96,230,129,253,125, 15,252,236,238,218, 88, 5, 9,207, 92,124,238,145, 71,207, 13,195,156,123, 19,116,
+168, 37, 99,118,216, 46, 3,137, 91,248, 2, 41, 23,134,249,124,142, 48,105,198, 92,171,141, 55, 26,117,102, 70,127, 82,161, 56,
+182, 71,193, 37,155,140,211, 57,101,196,204,224,219,132, 31, 32,189, 19, 22, 51, 19,151,104, 79,118,167,180, 49,198,236,239,221,
+199,198,116,118, 78, 78, 69, 41, 19,152,174,223,244,152,168,180, 71, 55, 8,207,194,251,251,123,127,126,247, 29,227,213, 49, 34,
+ 90,186,226,162, 57,243,142, 85,236,194, 93,227,159, 41,191, 37, 51,202,154,129, 81,244,122,140,124, 46, 87,108,105, 65,137, 19,
+166, 90,173,166,176,142, 45,106, 17,252,113,128, 41,194,136,238,162, 70,183, 5,191, 67, 62, 55,113, 70,218,235, 80,108,179,140,
+134,147,221, 59, 95, 5,128,182,142, 78, 36,202,150,106, 50, 1,136,193,131,132,202,222, 64,184,100,201,146,172,163,102, 40, 55,
+ 60, 56,181,255, 97, 78,236,252,158, 47,255,191, 39,161, 67,133,199, 85, 52, 66, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+ 0};
+
diff --git a/source/blender/editors/datafiles/lighten.png.c b/source/blender/editors/datafiles/lighten.png.c
new file mode 100644
index 00000000000..7059d11de21
--- /dev/null
+++ b/source/blender/editors/datafiles/lighten.png.c
@@ -0,0 +1,301 @@
+/* DataToC output of file <lighten_png> */
+
+int datatoc_lighten_png_size= 9437;
+char datatoc_lighten_png[]= {
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 96, 0, 0, 0, 96, 8, 2, 0, 0, 1,
+ 26,253,208,249, 0, 0, 0, 4,103, 65, 77, 65, 0, 0,177,143, 11,252, 97, 5, 0, 0, 0, 6, 98, 75, 71, 68, 0, 0, 0, 0,
+ 0, 0,249, 67,187,127, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 0, 7,116,
+ 73, 77, 69, 7,218, 7, 21, 0, 4, 17,164, 74, 11,162, 0, 0, 32, 0, 73, 68, 65, 84,120,218,237,125,105,144,109,215, 85,222,
+250,214,222,231,246,248,102, 61,201,146, 44,219,146,108, 34,233,225, 65,179,237,144,136, 96, 73,166, 76,156, 96, 23, 38, 21,248,
+ 17,170,194, 84, 73,204, 12, 54, 54,144,170,224, 2, 2,127,192,252, 8,164, 32,133,171, 82, 84, 98, 66, 85,248,231, 63,137, 0,
+ 51,148, 7,144, 43, 24, 91,122,146, 29, 73,150,159,244,158,223,208,175,167,219,247,158,189,215,151, 31,107,239,125,206,237,110,
+201,114, 48,169, 80,165,211,173,126,221,183,111,159,187,239,218,107,175,225, 91,223, 90, 18,249, 90,175, 87, 92,127,253,205, 55,
+223,114,240,113,136,200,251,222,255,129,156, 19, 68, 84, 21,170, 49,198, 46,198,216,117, 31,252,192, 79,251,147,194, 15,253,240,
+143,244,253, 60,231,100,102,217,204, 44,211, 47,179, 7, 31,124,232,177,199, 31,219,222,218,210,249,124,214,207,231,253,188,239,
+ 83,159,250,190,139,125,144,100, 70,179, 60,159,207,127,240, 7,126,176,235, 58,188,231,159,127,207,103,159,220,221,154,102, 64,
+255,201, 3,215, 28, 93, 83,145, 40, 92, 70, 12,164, 64,117,210,117,241, 79, 30,189, 12, 64, 4,128,173, 45, 67, 68, 68, 18,101,
+198, 20,178,137, 32,208, 44,154,101,133,138,192, 68, 52,136, 8,205, 56,239,247, 40, 49,155,134, 96, 66, 70,161, 25, 9, 64, 0,
+ 17, 33,229,179, 79,238,124,230,236,246, 13,215,172,220,121,219,209,201,132, 66,137,204, 6, 21, 10,132,216,155,217,159,125,230,
+210,151,206, 77, 17,226,185, 11,211,231, 46,205, 94,123,211,250, 55,222,122, 4,167,111,121, 27, 36,136, 10, 8,170, 10,161, 42,
+144,128, 16, 0, 5, 84, 52, 70, 26,137, 44, 25,170, 16, 19,129,144, 42, 98, 66, 17, 17, 2, 65,236, 37,109, 87,104,223,173,172,
+172,222,116,211, 77,170,152, 78,167,251,247,238,174,187,238,122,219,131, 15,145, 84, 0,170, 33, 4,223,184,143,125,236, 99,127,
+250, 39, 31, 47, 79,250,161, 31,250, 97, 10, 33, 80, 85, 40,130,134,232, 87,215,197, 24,127,230,131, 31, 16, 17,157,215,141,235,
+ 83,175,210, 71,237,193, 76, 99,223,207,231,243,217,207,255,252,135, 68, 4,223,252,246,239,126,242,217, 61, 0, 43, 75,225,221,
+ 15, 94, 3,129,200, 18,117,201, 55, 40,198,184,180,188, 28, 31,127,106, 11,170, 36, 94,113,227, 50,132, 34, 66,206, 96, 36,145,
+168, 52,163, 72, 52, 49, 53, 19, 81,223, 93,146,217,108,222, 79,205,162,106,176,104, 20,137, 52,163, 64, 96,125, 50, 82,118,247,
+242,255,248,196,229,221, 41,239,123,253,137, 83,199, 39, 36,133, 18,214, 78,222, 34, 66,138, 40,228,117,175, 94,255, 47, 31,123,
+118,119,207,178,241,217,231,231,207, 94,152, 93,119,114,210,117,192,233,155, 31,132,170, 64, 93,227, 85, 84, 20,130, 0, 9,208,
+ 16, 52,136,198,104, 98, 74,130, 34, 34,162, 32, 13, 2,168,138,100,136, 80,160, 52,249,122, 93, 24,255,240, 35, 63,250, 99,107,
+171,107,190, 73,254, 1,133, 66, 53, 40,128,160,225,195, 31,254,213,243,231,207, 31,126,163,159,248,201,159,202,150,133, 34, 70,
+191, 45, 68,160,128, 40, 20, 34,208, 0, 85, 5, 52,132,160, 64, 8, 65, 53,196, 24,223,255,254,159, 90,184,209,191,250,215,255,
+ 70,132,174,169, 34,130,209, 37,144, 24,208, 69,133, 40, 37,104, 8,190, 60, 55, 25,170, 26, 98,252,200, 71,126,231,137,179,103,
+ 69, 36,246,243,185,136, 24, 57,155,115,107, 55, 25,177,182, 18,142,175,199,165, 73, 88, 89, 22, 8,204, 84, 16, 32, 32, 85, 5,
+ 52, 35, 37,231, 12,133,166,244, 93,223,245,221, 33,132,159,251,217,159,193,107,222,240,238,108,204,217,223,148,191, 55, 92,123,
+106,242,192,221,199, 87,150, 68, 68,171, 40, 35, 25, 41, 42,128, 82, 40, 52, 0,208,224, 75,235, 98,156,237, 37, 1, 5,160, 64,
+ 73, 81, 37,121,205,241,149,229, 73,217, 7,146, 34, 20,153,139,204, 33,209, 12,115,131,153,191,123, 53, 85, 85,205,102,145,146,
+133, 20, 83,130,132,138, 37, 10, 98, 16, 1, 69, 32, 66, 10,102,115,219,216,234, 47, 93, 77,150,229,154,227, 75,203, 75,161,139,
+234,135,207, 79,160,154, 69, 90, 18,170,104, 38, 65, 38,129,138,216,214,118,202, 25, 49,112, 58,147,191,252,220,149,103,158,155,
+206,122,223, 74, 0, 88, 89,142,175,122,197,242,171,175, 95, 89,234, 66,244, 59,170,225,244,173, 15,137, 0,190, 0, 8,160, 36,
+151,186,240,240, 55,221,240,228, 51, 91,103,159,218, 34, 73, 64, 5, 20,133,170, 80, 92, 56, 46, 80, 64,215, 87,227,201,227, 75,
+ 56,117,243,183,248,235,248,163, 66, 17,127,178, 84,173,170,191, 19, 40, 8, 81,173, 54, 90, 1,161,168,107, 89, 36,205, 53, 89,
+160, 66, 19, 8, 13, 10,138,184, 53, 0, 21, 74, 17,117,195,168,194, 44,226,154,101, 66, 0,164, 9,149,242,255,221,133, 67, 31,
+ 61,113,226,196,241,227, 39, 68,100, 54,219,219,216,216,216,221,221,253, 26,110,244,218,215,189,238, 61,239,249,206, 42,217, 42,
+124,168, 43,111, 8, 97, 99,227,234,175,252,242, 47,189,216,141,222,255,211, 31,176,108,116,123, 88, 78,191,250,198, 64,203, 21,
+252,102, 26, 98, 23,223,247, 83, 63,121,200,141,126,236,199,127, 66,232, 31,190, 75,240,141,133,239, 36, 2, 20, 33, 20, 51, 18,
+212,151, 24,158,249,210, 51,191,249, 27,255, 97,124, 35, 77, 41,245,169, 79, 41,165,156, 82, 78,150,147,229,148,115,206, 41,231,
+108,217,146,229,156, 83,182,156,115, 74, 41, 39,255,122,211, 77, 55,253,210, 47,253,242,254, 27,229,242,233,127,236, 87,202, 57,
+155,101, 48, 3, 25,102, 66, 35,201,108,217,114, 78, 41,245,125,223,207,127,225, 23, 7,145,169,229,108,237,162,209, 72, 35,205,
+132, 22,131,197, 96, 1, 86, 12,135,144, 16, 49, 49,250, 42, 83, 74,233, 23,127,241,223, 23,159,124,231,157,119, 81, 56,155,229,
+ 75, 27,243,171,219, 57,165,172,138, 24,216,117, 50, 9,132,186,232, 0, 81, 63,181,164,148,109,169,223,188,254,245,175,255,228,
+ 39, 62, 17, 55,182,231, 79, 60,179,119,105,163,247,231, 67, 48,233,112,219,205,107,223,240,170, 37,209, 64,102, 64, 68, 76,100,
+184, 1, 41,160, 24, 76, 68, 36,165,107, 78, 93, 3, 65,216,213, 91,182,118,147,209,195, 11, 35,185,182, 26, 78,159,136, 39,143,
+199, 24, 4, 80,169,246,220, 76, 68, 4,230,119, 36, 57,156,175,135, 30,126, 56,206,230,217, 45, 72, 81, 34,200,202, 4, 43, 75,
+218,133,225, 22, 34,201, 76, 84, 41,162, 20,201, 46, 45,160, 44, 18,152,207,231, 81,232, 62, 20, 85, 25, 37, 70,116,209, 85,187,
+153, 90, 1,146, 8,179,169, 25,178,193,181,222,109,142,164, 36,148,104,204, 16, 64, 40,132, 40,141, 80, 80,193,122, 35, 95, 20,
+ 83, 98,202, 38, 8, 57, 67, 68, 1, 40, 65,176,232,177,164, 8, 87,104,129,128,194,106,169,203, 45, 64,210,168,123,179,252,252,
+165,254,234, 86,190,246,196,100,101, 57,198, 64, 13, 74,211,160, 52,179,242, 62, 40,244,101,128, 34, 84,170,229,100, 70,144, 42,
+ 66,163,236, 76,211,231,190,176,115,246,233, 29, 64, 47,156,152,220,250,202,213, 99,235,221,164,163, 6, 10, 69,233, 47,203,176,
+118,226, 86, 40,234, 9,134, 8, 87,150,195,137,163,147,227, 71,162,128,187,211,252,169,207,110,126,241,217, 29, 95,246,116,207,
+190,114,181,159,247,214, 69,141,177,254, 29, 32, 34, 97,237,228,173, 20, 20, 43, 93,130, 48, 28, 93,143,199,143,116,125,207, 63,
+125,244,242,179,207, 79,225,111, 82, 32,130,148,237,234,102, 62,191,145, 54,182,210, 60,113,121,162, 49, 64,128,176,118,226,214,
+ 18,175,214, 91,245,153,171,203, 81, 33,159,123,114,243,233,231,166,112,221,240, 13,113,157, 21,230,196,173,105,190,112,121,254,
+212,115,179, 47,127,101,190,177,157,112,250,150, 7, 75, 12, 35, 90,194,153,178, 92, 10,220,172,168,135, 22,229,149,154, 23, 17,
+ 21,120,184, 21, 84, 17,133, 20, 87, 36,152,251, 31,162, 88, 55, 24, 5,226, 62,130,174, 50, 2,144,164,135, 20,116,127, 36, 74,
+ 19, 81,138,249,182, 87,157, 39,232,231,192, 12, 66, 18, 66,163,137,144, 52, 33, 77, 40, 48, 17,129, 9,139,185, 32, 40, 74,138,
+144, 70,243, 16,195, 76, 40, 38,160,136,128,230, 47, 80,151, 81, 23,111,174,101, 20, 8, 32,144,133,115,247,242,245, 53,249,217,
+118,221,114,203,173,119,220,113,199,205,183,222,122,242,196,137,225, 81,150, 83, 0, 15,158,203, 63,186,177,177,113,246,236,227,
+127,245, 87,255,235, 11, 95,248,194,215,103, 65,235,235,235,239,121,207,119, 94,127,253, 13,102,174, 10,131, 49,105,145,146,212,
+232, 10,251, 34,233,226, 83, 81,156, 51, 84, 32,177,235,254,219, 71, 63,250,233, 79,127,234,165, 43, 7,222,249,206,119,222,113,
+199, 25,179,193,197,136, 44,252,117, 61,119, 67,216,134, 22,215,239, 95,146, 39, 28,195,178,234, 66, 85, 85, 83, 78,255,241, 55,
+127,227, 75, 95,250,210, 87, 89,208,143,252,232,143, 75,245,117,251,150, 82, 95, 87, 70, 31, 11,171,145, 33,205, 24,137, 72,134,
+165,236, 19,158,106, 0, 16, 98,248,183, 63,247,179,123,123,123,135, 39,208,247,222,123,175,159, 93,178,254, 59,186, 68,106,180,
+ 51,254, 32,139,167, 21, 66,168,197,238,184, 27, 22, 20,159,214,222,226,224, 74, 73,183, 39,246,192, 3,223,252,240,195,111,127,
+234,169,167, 46, 95,190,188,127, 65,119,223,115, 15,205,104, 7, 86, 35,164, 13,110,190, 45,194,205, 17, 64,128, 49, 16,238,253,
+220,156,140,242, 33, 10, 81, 44, 45,141, 34,101, 57,195,221,141,246,166, 59,239,124,248,225,183, 63,249,196, 19, 87,175, 94,109,
+ 11,138, 57,165,209,233, 41, 91,150,146, 39, 50, 34,144, 24, 84, 32, 81,161, 1, 96, 9,107, 98, 16,129, 4,128, 53, 54, 20,241,
+ 24,193, 32,218,156, 43,133, 32, 5,204,110,186,173,237,178,153, 65, 85,105,246,189,223,247,253,147,110,242,190,247,149,120, 52,
+188,225,141,119,154,177, 79, 54, 79, 54,159,219,206,204,166,211,124,101,179,223,218, 77,155,219,105,107, 55,207,230, 54,221, 51,
+203, 76,137, 2,134, 32, 33,200, 82, 71, 7,111, 20, 11,122, 87, 20,166,248, 14,106, 61,165, 44,118, 89,170,190,142,247,145,217,
+242,131,111,123,232,220,185,115, 23, 47, 94,196,187,190,227, 95, 80,120,113, 35,109,110,167,189,222,182,119, 61, 48, 43, 62,144,
+234, 78,137, 93,212, 16,241,247, 94,189,122,203, 43,151,187,168, 53,171,108,178,112, 33, 5, 17, 45,223,120,216,132, 26,198,112,
+ 48, 48,172,135,160, 28, 73,245, 68, 54, 0,248,163, 63,122, 4,215,223,254, 79, 11,144,212,194, 7, 10,235,207,237,209,227, 71,
+186,229, 37,125,213,245,203,175,185,126, 73, 33,147,137,111,144,142,212,209,127, 84,145, 64,214, 77,164, 80,160, 37,140, 45,162,
+226,128, 72,140, 78,167,170,127,117, 55, 45,130, 10, 62, 56,104,130, 81,164, 39, 32,101,117, 25,235,107, 97,117, 89, 39, 19,197,
+ 96,171,247,217, 88,146, 73,196, 60,140, 19,207,216,139, 45, 65, 50, 97,185,125,145, 16,171, 81,240,156,209,191, 70,113,144,134,
+ 67,180, 66, 53,214,163,171, 70, 66,132, 18,131, 44, 77, 16,213,205,210,194,101,102, 24,173, 14, 48,145, 44,162, 36, 82,134, 8,
+ 82, 18, 2, 52, 15, 53, 21, 42, 44,161, 13, 20,234,239, 31, 14,202,145,145, 77,154, 16,210, 0, 8, 33, 98,240, 80, 4, 16,177,
+146,187, 11,165,156,240,166, 55, 20,161,170,186, 61, 16,112,103,202,189, 57,183,119,243,222,140, 49,226,212,209,137,170, 86, 35,
+143,130, 97, 82, 60,225, 87, 81,211, 44, 46, 34, 17, 16, 10, 70,163,159, 76,120,236, 46, 5,167,244, 87,182,170,153,204,201, 82,
+ 34, 13,251,246,138,196,188,207, 20, 60,245,229,233,206, 94,126,254, 43,243, 43,155,189,195, 4, 49,234, 53,199,186, 46,224,213,
+ 55,174,196,128,181,229, 24,212, 79,137, 2, 89,160, 34,185,156, 26, 5, 50, 1, 80, 17,221, 78,212, 20, 7, 48, 86,208,129,144,
+ 98,124, 5,156, 39,155,206,210,172,207,150, 69,192,160, 48,178,239,153, 50, 63,251,228,118,223,219,115, 23,103,123,115, 43,233,
+ 7, 41,162,125,159,207, 95, 50, 1, 46,111,245, 10,188,226,212, 82,215,225,154,227,147,149,229, 16, 84,187, 72,131, 66,178, 8,
+144,171,134,155, 70, 74, 38, 93, 60,174,111, 32, 77, 26,130, 4,115,137, 76,103,137,228,116,150,251,148, 21, 8, 19,157,205,236,
+ 51,103, 55,114,226,179,231,247,114,102,202, 45, 40, 81,163, 0,153,162,102, 4,100,103,106, 34,216,155, 27, 84,206,125,101, 30,
+ 35, 86,151,227,145,213,176, 60, 9,167,142,119, 65,177, 52, 9, 40,128,142, 68,143, 95,125,151, 74, 40,239,193,167, 22, 83,235,
+ 49,231,116,218,247,115,219,217, 77,187,123,214,247,182,177,181,187, 55,183,103,190,188, 99, 38,123,115,207,124, 20, 52, 66,133,
+230,203, 34, 13, 34,164, 90, 54, 42,108, 46, 16,233,251, 30,192,214,118,186, 24, 53, 6, 60,115, 33, 4, 96,101, 41,168,234,250,
+ 74,208,160,142,115, 19, 2, 24, 0, 19, 3, 1,250, 63, 2, 26,125, 23,103,189,245,137,207, 95,156,166,108,125,111, 87,183,123,
+ 51,217,157,102,162, 88, 78, 33,169,238, 29,132,162, 52,211,146,220,152,199,238,126, 56,178, 41,104, 57,171,204, 77, 4,178,147,
+ 85,164,235, 2,128,229,165, 16, 84,113,250,230,183,185,177,168,102,195,221,149,219,175,226,185, 85, 60, 83, 98,129,235,154, 21,
+130,187,249, 10,122,129, 66,165, 82,197, 31, 24, 80,195,106, 17,180,166, 96,158,123,193, 65,101,208,243, 23,136, 32, 86,125,102,
+ 61,216,160,216,240,138,174,241,110,222, 80,220,128, 21,151, 80,143,177,159, 11,186,231, 34, 40, 38,230, 73, 4, 68,173,100, 29,
+ 10,183, 88,158,149, 86,212,174,189,115,186,189, 83,137,226,176,156,130, 98, 20, 45,232,102, 61,212, 86, 64,196, 98, 76,139, 76,
+ 60,212, 41,122, 47, 66,135,242,180,248, 44,183,156,197, 69,212,164,191,220,201,109,155,195,128, 70, 0,162, 66,210, 99, 4,245,
+ 52,205, 13,145, 81,200,146, 64, 21, 28,150,195,201, 23,138,209, 40,142,217,176, 70, 63,238,180,133, 70,136,208,220,167,179,254,
+ 18, 20,163, 9, 68,172, 26,126, 17, 17,163,213,216,173,196, 59, 44,123,196, 1,246,126,249,122,249,250, 91,203, 92,135,216,187,
+139,171, 43,171,147,201,100,121,121,165,235,186,130,174,165,126,111,111, 54,155,237,237,236,236,100,175,122,252,173, 46,168,235,
+186, 55,189,233,206,219,110,191,253,213,175,122,117,136, 97,136, 64,181,156, 51, 79, 1, 61,220, 35,249,197, 47,126,241,243,159,
+251,235,191,248,139,191,152,207,231, 95,231, 5,125,219, 63,126,231,153, 51,103,186,216,213, 88,105,200,164, 71, 9,117, 75, 16,
+ 75,134, 47, 34, 33, 4, 40,230,243,249,163,127,249,151,127,240, 7,255,253,111,180,160, 24,227,153, 51,103,222,241,142,111, 99,
+139, 93,217,128,198, 33,165, 31,103,248,139,201,233, 98,106, 15,168,234,230,230,230,135,127,237, 87,119,118,118,190,182, 5,157,
+ 60,121,242, 29,239,120,199, 13, 55,188,210, 49,163, 81, 52, 61,122,210, 56,232, 31,125,125,193, 53,121,116, 42, 18, 98,184,112,
+254,252, 71,126,231,119, 14, 38,169,135, 47,232,189,239,125,239,202,202, 90, 53,159,251, 51,252, 33,147,199,144,149,142,164, 84,
+209, 62,143, 83,101, 12, 48,140, 55, 19, 33,132,179,103,207,254,167,223,254,173,175, 94, 28,255, 7,255,240, 1,203, 70, 97,102,
+110, 89,115,245, 9, 45,191,247,216,150,104,194,179,234, 98,107,222,135, 33,122,170, 25, 79,205, 68,124,219, 79,157, 58,245,246,
+111,253,214, 63,255,243, 63,123,113,149, 15,247,223,255,102,122, 25,243, 16,172,161,184,181, 42,178, 1,105,144, 1, 77, 24, 16,
+237, 67,174,146, 71,213,219,152, 61,240,192, 63,234,186,238,201, 39,159,120,193, 5,221,119,255,253,139, 47, 60,250, 36, 15,156,
+ 67, 30,252,150, 53, 29,229,104,151, 71,233,125,125,176,130, 41,175,121,205,205,183,221,126,251,167, 62,249,201, 67, 23,164, 52,
+ 43, 62,220,172, 32, 20,237, 83, 94, 0,164,169,232,171,144, 16, 83, 49,208,209, 92,142,208,151,118, 59,182,151, 48, 51,179,156,
+ 45,223,120,195,141, 31,250,208, 47, 28,190,160, 82, 19, 26,215,134, 22, 47,127,249,242,172,225, 65, 19, 49,136,121,166, 6, 16,
+ 48,208,106, 64,225, 65, 18,141,226,154,208,238,150,203,215, 44,144,127,247,243, 31, 58, 76, 66, 69, 26, 47,122, 89,129,116,252,
+ 7, 95,129,130, 80,130, 28,234, 69, 37,225, 53, 15, 52, 29,139, 49,143,178,105, 21,133, 50,203,217,197,167,170,239,255,233, 15,
+ 28,220,178, 23, 88,207, 8, 46,107, 95, 93,175, 52, 80, 85, 66, 96, 80, 66,169,163, 79,150, 10, 76, 51,166,128, 64, 28,193, 28,
+ 3,105, 85,246, 71,214,143,252,203,239,253,190, 5,165,190,235,174,187, 23,158, 39,236,251, 82, 0, 74,137,217, 85,197,204, 35,
+110, 47,247,196, 64, 13, 80, 80, 84,164, 2, 5, 67,157,163, 22, 35, 32,158,145,148,180,104, 0,234,107, 21,207,129,182,147, 39,
+ 78,110,110,110,158, 59,119,174, 56,140,145, 77,102,159, 72,145,157, 93, 75,190, 52, 34, 6, 89, 90, 10, 81,177,190, 42,153, 50,
+233, 0, 72,140, 80, 24,233,249,130,121,237,200, 35, 81,143,229,133,161,158,179,138,237, 9,173,122,162, 33,108,207, 89, 85, 77,
+229, 93,239,126,247,231, 62,247,215, 94,117, 14,111,124,211,157, 70,206,146,165,158,211,185,245,254,117,206, 62, 49, 37,201, 36,
+137,156, 41,130, 62,179,139, 66,202, 36, 18, 35, 40,182,138,167,213,163, 81,242, 77,165,231, 20, 35,200,123,159,205, 40,245, 25,
+ 35,239,187,239,254,143,255,241, 31,139, 72,220,158,166,148,248,244,243, 51, 51,217,216,236,147,141,188, 87,203,166, 32,147, 78,
+151, 59,125,235,157,199,186,224, 37,161, 18,177, 59,190,227,152, 80, 17,146, 31, 48,207, 85,170,109, 44, 16, 65,115,216,158,119,
+168,153, 40,205,130,234,210,210,210,189,247,222,247,169, 79,125, 82,251,222,250,100, 57, 51,231,156,155,213, 49,210, 15, 40,219,
+177,176, 92, 15, 20, 56, 10, 72,252, 88,121,109, 86, 8, 24,197,132,134,202,139, 27,204, 68,253,102,100, 71,232,255,101, 51, 26,
+191,253, 93,239, 2, 16,246,226,173,231, 47,207,119,166,121, 58,179, 82,164,109,249, 83,205,171, 98,192,241, 35,221,202, 82,120,
+229,117, 75,177, 67, 12, 37, 33,171,208,226, 2,216, 8,120,149, 23,205,106,107,193,232, 26,238,180,111,199, 42,208,100, 60,122,
+236,104,156,245,121, 40, 49,122,209,216,172, 58,243,146,183,122,169, 88,149, 40,192, 42, 14, 68,118,168, 40, 43, 42,164,103, 34,
+ 5, 7, 46,143,185,190, 89,253,107,151, 44, 76,252,184,146, 20,187,247,222,251, 98, 5,109, 11,240, 90,113, 43, 87,136,146,243,
+ 43,100,109, 37, 76, 34,186,136,174,211, 42,158,131, 87, 54, 19, 17,213,130, 84, 67, 0,171,180,174, 76, 17,194, 40, 10,207,253,
+169, 80, 82, 96, 66,101, 48, 51,104,206, 57, 58, 98,203, 1,212,115,252,213,227, 9,243,122, 43, 68, 98,112,238,213, 66,193,227,
+176,112,207,170, 3, 88,216, 71,138,152,185,215,135,137,137, 73, 1,207, 29,111, 48, 49, 85,136,193, 16, 75,218, 43,230, 53,214,
+ 2, 35, 20,201,250, 23,163,132, 16, 24, 21, 40, 64,240,168, 14,190, 88,174,241,250,182, 99, 9, 46, 96, 35,152, 75,138,222,142,
+ 1,198, 97,131, 67, 36,102, 2, 16,136, 78, 70, 67, 21,145, 35, 25, 21, 86, 37,204,107,200, 12, 65, 67,104,129, 43, 95, 40,248,
+ 81, 5,217,170,169, 32,145,179,229,172,126, 95,173, 56,186, 46, 66,220,205,182, 22, 20,150, 13, 93,119, 92,187, 44,167,172,204,
+ 77, 91,129, 62,192,197,213,236,255,190,239, 73, 17, 47, 66,120,197,209, 35, 63, 15, 31,173, 6,225, 38, 69,233, 11, 98,103,230,
+ 37,110, 51,139, 67,101, 9, 70, 55,114, 24,226, 85,160,226,234, 30,102, 28,200, 85,128, 22,126,153, 9, 54,119,204,140,151,174,
+102, 7,255, 87,150, 92,166,181, 68,195, 66, 51,224, 1, 41,151, 74, 22, 25, 89,160,110, 52, 37, 54,199,167, 93, 72, 86,227,102,
+106, 13, 93, 57, 94,144, 81, 68,196, 50,103, 61,115,182,171, 59,201,140,211,189, 76, 65, 23,145, 51,187,168, 49, 40,148, 33,168,
+187,182,131,229,136,178, 60,171,244, 79, 1, 32,100,113, 2, 21,162, 46,110,161,248,205,156,205,233, 78, 34,218,172,138,223, 36,
+ 37,238,238,229,167,206,237,245,201,190,240,165, 61, 22,236, 84, 78, 30,237, 38,157,158, 62, 57, 57,117,180,139, 81, 87,150, 29,
+159,131, 53,143, 39, 42,194,162,204,170, 16, 17,179,232,218,107,116,224, 13, 13,202, 67, 73, 45,172, 40, 78,137,204,154,124, 74,
+126,145, 77,250,108,125, 98,223,231, 62,211,204,171,117, 2, 72, 50,134,108,125,111,243,100,164,196, 32, 0, 98,168, 85, 27, 84,
+143,231,133,158, 74,208,138, 30, 16,148, 53,187,126,163, 70, 62, 5,204, 19,163,237,205,115, 54,102,147,144,205,233, 22, 41,209,
+200,243,151,230, 79, 63, 55,157,205,248,252,165, 61, 10,104,164,184,229,196,213,173, 4,200,213,157,252,236,133,217,202,114, 56,
+125,188,235,162, 94,119,106, 73, 33,147, 78,196,180, 10,105, 8, 6, 96, 22, 71, 89,161, 35,111, 42,142,208,149,220,217,164, 22,
+ 48, 75, 94, 82,117,192, 72,163,100, 99,223, 91,159,153,179,211,125, 8,152, 80,141, 38,170, 48,228,108, 61,208, 37, 75,137, 64,
+161,118,103,163, 34,171, 6,186,131, 19,170,120,124,133, 88,153,136,238, 15, 21, 37, 28,118,134,168,215, 25,132,148,157,105,223,
+ 69,237,251, 12,161,106, 16,145,167,159,155,126,229,202,108,107, 59, 93,218,152,155,192, 42, 18,203, 82,145,117,194,143,166, 44,
+217,210,188,215,157,189, 28,160,231, 47,205, 85,113,242, 88, 23, 85, 79,159,152, 76, 38,218, 69,196, 40, 38,170, 66, 33, 99, 81,
+ 33, 2,128,163,174,101,119,221, 51,154, 51, 72,212, 76,204, 60, 11, 5,133, 10,204,231,121,119, 55, 79,103,121,158,204, 65,103,
+162,110,126,163,120,150,138, 38, 96, 54, 55, 69,200, 2, 6,213,181,149,144, 2,179,153,101, 97, 8,110, 75, 41,106,100, 20, 47,
+ 36,160,254, 35, 34,197,197, 20, 67,100, 2, 24,183,119,211, 36, 98, 58,179,108, 56,119, 97,214, 39,126,249,252,244,242,230, 60,
+ 37,146, 84,247, 59,133,146, 83,202,162, 86,161, 98,161, 24,160, 52,102,221,155,155, 10,207, 95,154, 3,114,101,179,215,160,203,
+147, 16, 3,150,186,176,188, 20,160, 26,107, 53,211,207, 83,145, 73,241, 96,104,117,110,206, 83, 22,106,159, 8,216,198, 86,154,
+205,242,246, 52, 77,247,204,229,210, 60, 41, 76, 68, 75,244, 8,136,155, 20, 64, 96, 52,133,138, 89,130, 41,251,169, 0,178, 59,
+ 53, 66,150,151, 66, 84,172, 44,199,181, 21, 2,168, 65,126,173,150,213, 26, 66, 1,254,253,150, 2,177,204, 94,236,127, 63,187,
+ 21, 3,174,110,247, 41,201,222, 44, 99, 48, 72,172,168, 60,124, 77,165,210,165, 58, 80,226,204,137,203,148, 10,194,155, 0,148,
+148, 72, 21,155,229,108, 34, 80,156,190,229,193,130,174, 23,230, 84,133,224, 27,133,148,205, 46,213, 48,142,133,126, 37, 82,206,
+149,255, 1,135,216,196,143,168, 46, 70,231, 10, 17,106, 43,112,148,240,146,165,192, 88, 42,194, 30,184, 88,113, 95,238,165, 91,
+ 4,235,201, 42, 74, 41,192, 45, 85,249, 44, 55, 40,108,174,230,165,106,181,163, 30,231,134,248,187, 84,224,191,243,147, 94, 50,
+ 79,212, 0,146, 78,205,147,198,212,135,121,189,163,176,227, 97, 50, 88,132,225,144,177, 50,200,188, 20,235,137,115,171, 22,136,
+176, 84, 94,220, 47,202,240, 23, 86,170, 55, 4,107, 89,181,254,218,233,101,240,180,152,104,160,153,111,131, 59,212, 90,141, 16,
+107, 53,224, 42, 0,179,130,193, 82,172, 52,146,212, 34, 41, 43, 46, 83, 10,239,168,226, 40, 94,130, 45,115, 44,133, 84,214,138,
+111,173, 47, 57,215,146,102,141, 24, 90,232,165,181, 83,165,196, 64, 38,198,242, 89,251,103,170,236, 27, 38, 9, 41,244, 83,255,
+ 99, 22,123,207,146, 74,151,186, 76,241, 71, 21, 36, 41, 5,184,114, 15,131,105, 13, 97,105,213,193,181, 88,170,208,242,100,148,
+240, 20,224,206,101,132,194,208, 43, 97,179, 21, 33, 52, 25,213,196,162,146, 66,225,174, 67, 70, 64, 6,202,210,140,181, 28, 87,
+163,113, 43, 30,203,198,137, 2, 88, 94,149,164,152,180,194, 83, 81, 96,162,153, 98, 63,148,101,249, 86,149,160,228, 13,190, 97,
+ 77, 38,158,121,163,136,144, 5, 95,174,135, 84, 93,232,229, 76, 80, 32,102,197,246,179, 4, 2,126,112, 12, 38,142,146,149,157,
+ 43,162,146,202,165,160,149,120,187,158, 23,148,141, 27,104, 77,110,129, 6, 10, 8,247, 65,247, 47, 23,204, 94,190, 94,190, 94,
+190,254,174,212, 91, 95,236, 22,192,250,145, 35, 71,143, 28, 89, 91, 91, 63,118,252,216,201, 19, 39,143, 29, 63,126,236,232,209,
+213,181,245,181,181,149,201,100,201,107, 84,178, 0,152, 85, 12,132,146, 82,154, 78,119, 55,183, 54,183,182,182, 47, 92, 56,191,
+189,181,125,117,243,234,214,230,230,198,198,198,214,214,214,223, 61, 1,173,174,174,190,246,117,223,112,227,141, 55, 94,119,237,
+181,199,142, 29, 95, 93, 91,141, 49, 30, 10,250,142,235,179,251, 31,196,226, 55,181, 6, 40, 7,248,208, 41,165,221,157,221,171,
+155, 87,207,157,251,242,217,199, 31,127,226,236,217,244,117,170,124,127,221, 4,116,237,181,215,222,121,215, 93,223,248,141,111,
+ 88, 90,154,144, 67, 84,241,213,239, 59,208,250, 26, 46, 85,227,244,218,147, 92, 11, 15,144, 81,177,116, 92,208, 45,189,156,149,
+ 20, 74,161,119,117, 61,243,204,211,127,248,200, 35,143, 61,246,121, 51,251,127, 42,160,245,245,245,235,174,187,238,245,175,127,
+195,107, 95,251,186,130,232,180,194,240,184,114,184, 40, 35, 28,170, 52, 3,139,117, 1,113,198, 98,193,253, 5,191, 46,118,205,
+121, 19, 81,147,212,192, 21, 80,189,114,229,202,199,255,248,143, 30,123,236,177, 75,151, 46,253,173, 8,232,218,107,175, 61,115,
+230,204,205, 55,223,124,237,117,215,229,108, 94,103, 90, 20, 10, 95,172,194,187, 8,237, 97, 17,154,223, 15,249,141,133,119,144,
+ 72,127,128, 12,240,213, 30, 44, 41,167,119,244,137,224,153,167,159,250,244,167, 63,245,232,163,143,246,125,255,245, 17,208, 7,
+ 63,248,193,217,188,111,181,239, 1,119, 28, 97,144, 47, 77,206,139,239,118,223,131,135, 60,109, 31,109,227, 69, 84,105, 31,117,
+ 97,124, 12,219,233, 27,119, 86, 2,192,108, 54,251,195, 71, 30,121,228,145,255,249, 55, 21,208,143,253,248, 79, 52,194, 9, 27,
+193,237, 16,169, 28,176, 60, 99,154,204,162, 92, 70, 15, 30, 84,165,197, 67,120,128,215, 50, 66, 5, 22,153, 28, 95, 93,197, 32,
+144, 70, 21, 47, 28, 29, 13,125,223,255,238,239,254,231,207,127,254,243,255,119,253, 79,133,206,224,244,129,214,193, 49,230,124,
+212,207,195, 74,147, 11, 15,142,149,110, 31,197,130, 99, 19, 54,210,211,145,134,114,172,172,195, 62,237,123,137,161,166,210,118,
+177,254,120,232, 87,175,192,191,241, 77,111,122,232,161,135,111,184,225,134,103,159,125,246,224,172,135,175,194, 39,243,185, 10,
+251,222,227,161, 85,218,195, 79, 22, 15,252, 52,126,144,135, 62,218,112,167,198, 16,103, 45,152, 99,244,235,197, 58,193,190,242,
+ 81, 69, 65, 41, 3,135,127,248,154,115,110,220, 33, 17, 1,178,228,219,110,191,253,142, 51,119,108,110,110,255,222, 71,255,235,
+ 19, 79,156,125,169, 26,116,207,189,247, 13,108,145, 74, 91,176, 69,142,206, 65,186, 67, 85,159,225,155,113,167,144, 52,198,197,
+232, 30,237,193,146,208,131,170, 2, 17, 5,131, 58,175, 87, 20,132, 64,217,202,166,133, 12, 61,178, 87, 67,148, 81,120, 8,141,
+ 49, 68,178,226,253, 50,106, 67, 90,216,105,227,164,235,238,186,235,238,111,121,219,131,207, 60,243,244, 75,225,121,133,123,239,
+185,119,124, 56,234,185, 25,145,134, 70,244,219,253, 54,105,209,118, 45,212,150, 14,209,192, 17,119,172, 72,135,131,209,198,208,
+252, 32,139, 82,209, 18, 41, 97,104, 66, 37, 10,222, 44,165,163, 65, 22, 9,132, 50,226, 64,113,244,250,141,122, 5,200,221,119,
+223,253,150,183,188,245,194,133, 11, 23, 47, 94,124, 81, 13,186,231,222,195,140, 48, 15,143,137, 23,159,137, 17,125, 0, 11,225,
+206, 98,105,143,162,128,183, 53,169, 74, 8, 18, 3,130,138,250,103, 45,157, 99, 84,215, 29,107,140,120,248, 51, 14,187, 43, 59,
+ 29, 67, 53,182, 74, 74, 14,171,185,142,109, 83, 43,229,100,235,186,238,206, 59,239,186,227,204,153, 47, 60,249,228, 11,217,166,
+112,247, 61,247,112,216,128,246,121,224,167,225,148,141,206,212,208, 46,212, 84,254, 96,161,178,170, 12,196,139,190,234,228,126,
+ 29, 56,255,168, 40,234,216, 5,141,196,224,196,145,226, 38, 91,207, 97, 41,143, 54, 95, 63,188, 30, 23,183,153,114,192,126, 15,
+103,206,236,200,145,163,127,255,155,190,105,125,237,200,227,143, 63,118,136,153,253,190,239,255,129,195,207, 79, 97,193, 59, 63,
+ 65,230,201, 82, 42,108, 41,171,212, 22, 8,130, 34, 70,168,138,231, 4,147, 9,162, 86,175,171, 8, 5,159,151,160, 26, 3,161,
+251,146, 48,169,232,251,152,173,161, 99,214, 72, 41, 30,106, 45, 27, 87,134,171, 23,151,198, 78, 15,251, 29,205, 16,130,141,254,
+116,136, 12, 90,216,212,216, 86, 0,126,253,215,127,237,249,231,159,223, 71,240,186,235, 80,191,229,227, 26, 74,137,217, 56,155,
+ 59,129,135,153,204,198,100,204,222,150, 93,157,177, 15, 14,138,133, 88, 90, 22, 88,104, 69, 16,128,222, 72,143,210,129,209,148,
+101,120, 55, 35, 13,146,197,136, 80,106,167, 68,147, 80,173,224,149, 70,239,138,224, 30, 98, 17,247,219,133,131, 33,194,248, 72,
+190,249,254,183,172,172,174,250, 80,157,226,230,119,167,185,210, 88,232,148, 33, 63, 60, 41,113,111,102, 13, 95,206,185,150,159,
+185, 72, 97,134, 15,173,130,136, 40,208, 69,132, 32, 46,169,107, 78, 76, 78, 29,139, 33, 0, 34, 93,135,129, 48, 36, 92,140,175,
+ 57,162,178,180,213, 98, 32, 58,160, 0, 35,165,236,203, 10,197, 59,192,220,112,122,147,198, 38, 25,196, 80,154, 78, 56, 4, 29,
+ 30, 7, 20, 74, 13, 64,230, 74, 29, 54, 17, 42,223,250,150,183,158,190,230,244,239,255,254,239, 57,216,130,239,248,103,223,227,
+127,153, 50, 47,111,246, 91, 59,217,140,164,204, 18,119,167, 57,219,129,124, 11,141,200, 82,169, 18, 77, 84, 96, 12, 62,159, 0,
+ 75, 93,120,205, 13, 75, 55,189, 98,169, 11, 16,160,139,152, 68, 81, 5, 15, 49, 83, 24,221, 31,245,136, 97,177,120,161,173, 36,
+ 94, 67, 37, 12, 36, 40, 46, 16,131, 6, 63, 86, 95, 73,157,208,181, 0, 30,136,183,146,143,211, 23,109,241,119,136, 27, 27, 87,
+126,251,183,127,235,202,149, 43,225,196, 43,110,219,222,181,237,221,180,189,155,183,118,243,116,102,125,102,202,214, 39, 38,107,
+103, 65, 42,183,149,109, 79, 81,107, 75, 37, 23, 34, 21, 88,138, 58,137,136, 1, 93,135,227,235,241,216,122, 12, 65,221,169,171,
+247, 66,238,207,112,177, 16, 96,188,112, 88,202, 22,116,142,157,118,109,239,105, 55,161,140,216, 97, 60,148,194, 60,182,225, 11,
+236,245, 17, 59,137, 43, 43, 43,247,191,249,205,159,121,244, 81, 92,127,219,183, 31, 8, 84, 15,196, 48,139, 86, 21,149, 8,221,
+202,230, 78,196, 8, 17, 71,214,226,114,167, 0, 98,192,245,167, 39, 55,156,158, 76,162,138,136,170,184,114,141,180, 6, 47, 16,
+180, 99, 65,113, 6, 67, 94, 64,164, 97,214, 10, 70,127, 80,195,114,179,133,251,218, 98,204,129,209,108,167,253,112, 75, 35,238,
+183,198,223,160,204,133,194, 32,139,120, 22,135,232,127,223, 65,168,145,114, 37,242,180,202,151,185,242,134,234,197,131,138,251,
+117,109,118, 1,250,210,224,151, 22,216,148,218,122,109, 72, 31,251, 59, 25,143,164,105, 70,198,139,247,195, 98,139,158,233,130,
+ 30, 22, 34,230, 66, 54,195, 54, 84,176, 81,183, 72,163,104,208,104, 50, 54, 96,195,212, 0,145, 97,248, 76,153,181,227,117,122,
+182, 68,156, 28,230, 47, 9, 9, 85, 89,154,232,218,170, 15,110,147,165,137,250, 20,152, 81,252,199,151,128, 97, 54,191, 85, 90,
+238,106,126,133,170,128,173, 23,178,177,188,134,214, 72,243, 34,168,201, 96,184, 37, 23,229, 33,134,216, 31,108,237,131, 44, 92,
+209,178, 39, 67,179,182,152,100,137,240,114, 40,246,171, 57,199,188, 84, 41,197,203,198, 64, 27,129, 28,213,121,160,209,250, 40,
+109, 66,217, 64,183,112,110, 32, 14,134,184, 47,202,198,100,101,108, 53,209, 84, 86, 5, 27, 5, 85, 42, 83,122,148, 99,112,240,
+ 31,251,200,145, 7, 85,117, 68,155,108, 77,150,197,244,154, 74, 28, 76,228,104,172, 72, 81,165, 70,252, 45,156,188,234,111, 11,
+179,169,249,231,210, 60, 15, 48, 6,116, 17,170,136, 1, 81,203, 96, 54, 52, 66,245,193, 78,124,175,134,191, 0,138,224,145, 84,
+ 35,247, 22,118,158,147,224,136, 26, 21,131, 86,121, 1,108, 52, 80, 30,192,171, 14, 53,118, 7,212,162,129,230, 34, 32, 85, 16,
+109,236, 49,135,144,148,149, 85,128,186, 89,144, 38, 50,143, 64,198,249,150, 53,112,168, 18, 37, 15,123,183, 47,177,136,180, 16,
+215,141,210,130, 42, 73,231,243,162,249, 19, 35,156,125, 50, 62,161,172, 96, 37, 91, 34, 55,156,172,197,143, 50,213, 9,173,148,
+ 80, 30, 2,104, 57,194,100, 96,210,120, 27,109, 83, 22, 86,151,238,204,172,218,109, 59,178, 41,230, 22,123,156, 37,251,253,107,
+167,180, 85, 19, 59, 62,198, 67,244,226, 11,195,200,126,155, 25, 64,223,131,189, 25,125,162, 39, 41,123, 51,155,247, 53,121, 85,
+ 89,158,248,176, 68, 12,196,201, 33, 93, 62,108,131, 42, 77,232, 32,126,213, 50, 21, 55,165, 11, 13,223, 34, 81, 96,251,113,119,
+107,243, 94, 70, 7,163, 49, 95,132, 77, 98, 34,109, 16,214,192,179,106,148,105, 25,196,139,195,203, 66,148,125,252,116, 54,122,
+ 22,156,209,203,148,138,147,156,245,156,238,249,240, 20, 9, 1, 1, 8, 90, 99,242,197,163,219, 80,181, 70, 23,133,129,104,196,
+175, 74,196, 28,167, 36, 7,136,220, 69, 76, 33,196,130,226,161, 25,167,145,247,170,212,174,162, 45,180,194, 22, 33, 42,177,172,
+ 80,186,252, 69,205,104,217,114, 14, 10,201,101,196,214,120,104,217,254, 99,239,111,192,135,194,250,139,207,230,118,101,115, 62,
+155,139,136,244,153, 87, 54,251,237,157,108,149,160, 98,117, 43,163, 98,125, 53, 78,162, 2, 8, 65,214, 87,195,250, 74, 8,161,
+100,160,147, 88,200,248, 62,154, 70,181,232,170,211,194,124,126, 65,141, 28,252,193,114,164, 90,183, 64,101, 74, 65,114,142, 53,
+ 2,229, 2,158, 37,163,129,108, 24,205,234,169,182,167,192, 29, 67,216, 54,234, 56,164,212,161, 7,227,140,193,143,249,190,153,
+ 41,133,209, 86,224, 1,178, 79,178, 51,181,221,153,145,236,147, 92,185,218,111,108, 39,179,125, 74,130, 46, 32,103, 46, 77, 84,
+ 68, 98,212, 16,100,169,243,137, 20, 8, 81,125, 66, 64,177, 98,160,153, 52,162,208,208,246,225,207,110,131, 40, 10, 7,205, 80,
+ 7,160,181, 87,139, 37,127,225,194,193,109,243, 57,100, 68, 64,220, 23, 29,161, 4,170, 37,160,118,131,148,140,125,202,110,239,
+ 82,246,230,186,194, 4, 28,102,204, 45,226, 4,219,211,124,117, 43,229, 76,138,236,205,236,226,149,249,116,158,157,185,181,187,
+231,137, 33, 60, 38,170, 14,158,217,100,119,150,103,201, 32, 80,205,125,178,237,221,236,232,197, 82,167,107, 43,218, 5, 16, 18,
+ 85,151,151,180,139,109, 82, 15, 43, 66,205,130,100, 47, 98,184, 67,180,204, 65,196,113, 68, 14, 29,216,112, 67, 87,130,171,126,
+115,124,144,145, 31,148, 58,240,181,110,131, 49,103,166,228, 49,158,102,163,121,155, 5,169,138, 1,159, 39,178, 23, 81, 68,114,
+198,214, 78,126,238,226,108, 54,207,168, 99,107,103,115, 27, 7, 92, 40, 99, 71, 42,135, 29,146, 41, 54,171,169, 25, 48,157,217,
+213,237,228,145,215,202,114, 56,190, 30,187,168, 2, 78, 98, 16, 9, 64, 40, 17,178, 98,177,215,104,156,105, 31,142,145, 64, 36,
+ 26, 90, 80,213,252, 24,234,204,141,214,193,139, 33, 84,170, 4,204,138,244,141,224, 68, 97, 54, 75, 57,249, 13,189,237,179, 17,
+243, 99, 40, 65,112,202,182, 61, 77,123, 51, 82,196, 50,175,110,205,119,118,251,190, 39, 33, 41, 89, 1, 19,202, 40,150, 50,234,
+164,162, 8, 85,104, 70, 14,121, 21, 45, 75, 46, 51,119,101,214, 99,123, 55,199,104,128,196, 96, 70,219,157,149,121, 73, 93,212,
+ 73, 87,198, 85, 69, 69, 23,189,131, 92, 0,159,105,137,166, 36,195,251, 66, 27,157,211,248,142, 24,114,174,186,229,109, 41,182,
+128, 54,148,152,204, 90, 75,129,145,243,121,134, 64, 36,119,157,206,122, 75,201,169,191, 84,133, 41, 2, 0,145,121,178, 47,159,
+223,187,112,121,110,102,102, 50,221,203, 91, 59, 41, 57,203,191,162,243, 35,136,199, 26, 44, 95,215, 84,117,153,222,235, 5,163,
+229,218,148, 54,155,113,123, 55,149,105,219,138, 73, 68, 80, 63, 95,178,182, 28,214, 86,125, 95,177, 4, 0, 0, 4, 78, 73, 68,
+ 65, 84,130,163, 49,203, 75,122,226, 72,244, 81, 82, 10,116,157,134, 6,175, 87,142,132,251,133, 40,213, 79,161,145, 92,165, 16,
+203,171, 5,226,144, 70, 87,222,101,179,224, 86, 88,163,238,150,133,180,156,179, 64, 52,211,178,183, 12,138, 64, 44,229,100,133,
+ 58, 61,157,217,188,183,190,207, 30,221, 37,255,183, 54,147,186,157, 47,144, 22, 42,119,217,109, 42, 48, 52,180,213, 87,134, 84,
+ 47,212, 2,123,171, 72, 16, 89, 12,188, 80, 84, 82,230, 44,153, 86, 37,216,142,105,146,130, 99,228, 93, 12, 49, 84,130, 4,164,
+170,150,168,104, 28,113,229,107,199,119, 9, 40, 27,188, 82,234, 45,165,211,173,160,124, 45,110,181, 6,126,100,227,246,212, 20,
+ 6, 69, 23,112,100,173,219,153, 90, 50,208,184, 55, 75,151,175,206,103,125, 22, 98,222,219,197, 43,243,205,157,190,229, 10,213,
+111,194,188, 41,168,164,212,222, 1,128,161,185,179,100,235,190,197,222,117,103, 11, 57,181,183, 45,149,115, 99,150, 49, 51, 17,
+241,137,118,216,217,203,178,217,220, 81,141, 49, 81, 52, 40,106, 25, 77,176, 52,193,202, 82, 8, 90,102,252, 68,171, 51,199,154,
+ 17, 38,188,253,110,196, 23, 16, 43, 91,214, 70,159, 21, 90, 54, 70, 73, 4, 7,224,211,104,170,102,214,167,236, 84,236,121,178,
+121, 98,223,211, 71,218,154, 89,117,187,205, 26, 23, 62,180,121,232,181,184, 18,148,145, 73,222,199,193, 58,171,117, 84,172, 28,
+ 16, 30,162,206, 14,114, 55, 62, 50, 18, 20,191,191,121,170,110,101,134,144, 50, 26, 13, 4,145,169, 57, 35, 39, 50,212, 81,108,
+222,142, 80, 83,141,129, 39, 48, 32,150, 68, 67,205,185,128, 32, 15,254,107, 48,159,163,112, 37, 40, 66, 24,108,154,217,128,106,
+187,155,119, 0,191,154,152,241, 60,162, 54, 93, 9,229, 9,100,211,157,218,254, 0,142,254,207, 16, 45,178,107, 25, 85, 77, 62,
+221,212, 15,227,140, 90,202,174,168, 51,105, 57, 84,217, 6,188,172,202, 33,182, 20, 20,195,228, 46,241,230,230,130, 3, 53, 20,
+205, 26, 17,133, 13,244, 29,116,170,109,111,117,145,137, 76,249, 64,229,177,114,189,171, 37, 70,117, 8,181, 7, 96,104,166, 3,
+155,162,160, 85, 11, 10,233,220, 48,204,119,192, 0,223,185,177,146,102, 4, 42, 24, 83, 14, 9, 57,120,122,214, 62,237, 58,204,
+169, 98, 21,238,119,170, 47,143,108, 29,144, 85,213,155,203, 42, 45,146,205,147, 55, 73,177, 65,107,144, 18,232, 12,253,193,251,
+ 51,187,113,154, 53,192, 5,168,192,215,200,216, 55,159, 85,246,218,224, 13, 14, 11,115, 22,189, 27,132, 85,195,225,166,135,173,
+129,190, 6,128,197, 23, 58,187,170,117, 95,214,120, 7,254,191, 16,168, 89,164, 15,252,170,198,144,195, 11,192, 34, 7,191,222,
+122, 69,209,220,153,175,211,202,217,171,135,118, 36, 77,105, 67, 25, 91, 92, 64, 46,192,232,227,130,123,211, 55,191,105,131,108,
+107,193,194,106,207, 78,243,228,210,108,160,214, 54, 29, 12, 67, 73, 75,234, 92,130, 37, 12,103,136,101,108, 36,164, 36, 91, 67,
+104, 88,149,166,156, 69, 74,211, 82,142, 0,190,218,236,140, 88,221,228,136, 97,192,161,203,201,219,214,253,244, 21, 59, 86, 15,
+ 19, 49,206,212, 48, 42, 38, 12,131,195, 48, 32, 51, 50,244,210, 52,244,155,196, 8,167, 42,205, 36,208,241, 84,153, 33,234,176,
+ 90, 1,107,253,190,213,187, 80,198,228,153, 58, 50,142, 3,196, 90,134,197, 85, 83, 70,159,200,202,102,160,164,109, 71,169, 14,
+177,141,112,241, 84, 99, 0,180,108, 40,235, 89,237,148, 25, 88, 21,181,228, 96, 37,133, 47, 90, 54,180,156, 29, 66,159, 26,215,
+168, 70, 81, 62, 57,206,243,135, 86,121,148, 22, 90,105, 7,174, 44,185, 1, 42,172,223, 23, 27, 85,127, 91,204, 75, 11, 38, 81,
+219,203, 75,146, 68, 84, 8,144, 53,160,170, 70,188,193,107,245, 8,162,185, 87,241, 33, 24,222,109, 52, 16, 48,133,198, 33,156,
+101,241, 41,197,108,219, 80, 0,174,137,104, 27,126,143,125,112,211, 62,154, 71, 65, 1,218, 56, 3, 90,139, 81, 81, 66,205, 42,
+103, 67,153,199,233,173, 94,126,103,171, 32,184,152,152,138, 86, 25, 53,144, 95, 7, 27, 10, 14,162,173,135,169,152,115,241, 17,
+146,197, 55,180,115, 54,170, 37,161,197,245,209,101, 33, 67, 74,229,195, 76,199,115, 2,171, 45,179,154, 67,202, 62, 73,213, 1,
+ 34, 37,171,228, 80, 41, 95, 68,248,216, 6,198, 55,183, 88,145, 0,114, 52, 46,162,153,139, 69,195,212,178, 83, 41, 37, 33, 27,
+ 64,136,226,205, 28,104, 97,181, 44, 62, 89, 86, 57, 8,171,166, 69, 42, 3, 53,173, 2, 53,138, 65, 51, 91, 60, 26,101,176,210,
+117, 66, 70,105, 94, 67,155, 50, 91, 11, 7, 45,165,110,203,109, 16, 63,199,216,226, 62,194,149,181,128, 10,178, 0,191,130, 67,
+176, 48,174,229,176,213, 56, 43, 0, 88,229, 62, 12,162, 28, 64,250, 58,226,163,158,141,218, 69,222, 12,199, 96,141, 90,128, 84,
+156,224,248,105, 28,225,121, 28, 86,249,127, 0, 16,193,207,161, 22,223, 57,207, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+ 0};
+
diff --git a/source/blender/editors/datafiles/mix.png.c b/source/blender/editors/datafiles/mix.png.c
new file mode 100644
index 00000000000..5acf62b7cfe
--- /dev/null
+++ b/source/blender/editors/datafiles/mix.png.c
@@ -0,0 +1,333 @@
+/* DataToC output of file <mix_png> */
+
+int datatoc_mix_png_size= 10448;
+char datatoc_mix_png[]= {
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82,
+ 0, 0, 0, 96, 0, 0, 0, 96, 8, 2, 0, 0, 1, 26,253,208,249, 0, 0, 0, 4,103, 65, 77, 65, 0, 0,177,143, 11,252, 97,
+ 5, 0, 0, 0, 6, 98, 75, 71, 68, 0, 0, 0, 0, 0, 0,249, 67,187,127, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 13,215, 0,
+ 0, 13,215, 1, 66, 40,155,120, 0, 0, 0, 7,116, 73, 77, 69, 7,218, 7, 21, 0, 4, 17,164, 74, 11,162, 0, 0, 32, 0, 73,
+ 68, 65, 84,120,218,237,124,105,172,101,217, 85,222,247,173,189,207, 29,222,123, 53, 87, 87, 15, 30,218, 61,216,216,110, 48,238,
+182,219, 3,225, 71, 20, 12,145, 76, 44,134,200, 72, 64, 20, 35,230, 72,193,120, 0, 60, 38,138, 66, 36,147,160, 72,196, 16,130,
+ 4, 4, 18, 18, 36, 32, 36,225, 87, 80,136, 98, 32, 38, 10, 49,134, 4,240,220,109, 99,211,110,186,170,171,186,170,222,112,135,
+115,246, 94, 95,126,236,189,207,189,175,170,220,182,131,137,130,228,251, 94,189, 87,239,190,251,206,221,103,237,181,215,240,173,
+111, 45,224,243,125,220,113,231,157,247,220,115,239,205,207, 19,192, 91,222,250,246,156, 19, 1, 51,163, 89,140,177,139, 49,118,
+221, 59,222,254,182,242,162,240,250,239,127,195, 48,244, 57, 39,119,207,238,238,185, 11,171,105, 92,238, 76, 15,190,247,111, 63,
+231,183,255,199,213,195,195,131,240,224, 67, 15,122,206,158, 93,144, 92,247, 63,227, 35,183,157,190,124,254,204,193,201,221,125,
+135,223,251, 37,175,126,239,123,255,123,188,114,109,249,199,143, 44, 14,150,153,180, 87, 61,120,185, 31, 66, 8, 33, 78, 28,176,
+156,242,114,153,222,241,142,119,134,171,233,217,235, 33, 75,146,171,243, 79,126,250,137,229,169,147,147,105,103,202,254,248,149,
+243, 71,203,185,164,176,123,246,126, 2, 16, 32,157,219,189, 60, 12,254,248,197,149, 52, 89,246,119, 92,217, 63, 35,136, 66,132,
+220, 37,146, 0,115, 22, 13, 87,158, 58,245,129, 79,159,189,235,188, 30,124,254, 48,153, 8, 66,216, 61,125, 31, 41, 64, 0, 78,
+237,236, 63,113,237,194,245,197, 41,144,135, 71,249,145,199,150, 41,227,252,233,142,183,221,251, 85, 68,128,129, 34, 72,208, 72,
+ 16,129, 33,144, 70, 26, 44, 70,185,196,140, 76, 51, 66, 6,100,192, 0,135, 0, 64,100,128,127, 78,219, 21,198,255,205,231, 59,
+207,122,214,179,204,184, 92, 46,111,220,187,135, 30,122,232,171, 94,245,213,146,140,164, 89, 8,161,108,220,175,255,250,127,250,
+157,247,190,183,190,232,245,175,255,126, 65, 4,205,140,198, 73,167,157,153,230, 83,157, 62,181, 58,119,122,241, 55,191,245, 23,
+ 0,132, 7, 31,124,200,179,187, 92,210,185,189,139,207,188,237, 79,207,157,190,126,246,228,193,116,178, 48,173,191,236, 37,127,
+235, 61,239,249,175,252,171,127,253, 91, 31,121,108, 69,114,218,241,219, 95,115,101,111, 55,206,231,113, 62,239, 32, 29, 46,247,
+ 62,125,249,254,233,108, 22,214,241, 30, 0,238,218,155, 94,189,252,228, 19,171,117, 62,125,106, 98,202,253, 16, 30,253,244,115,
+228,112, 41, 58,220,220, 1, 11, 88,231,148, 63,241,167,139,229, 74,119, 63,251, 25,171,225, 46, 87, 14, 17, 2,194,238,217,251,
+ 41, 0,152,118,171, 89, 60,202, 57,126,240,177,187,254,248,209,217,201,189,233,116,194, 34,210,176,123,246, 94, 64, 2, 8,157,
+156, 31, 60,250,228, 61,201, 99,118, 61,246, 68,255,216,165,245,237,103, 39, 93, 71,222,118,207,171,104, 6, 26, 1, 1, 70,131,
+ 17, 12, 68,160,133, 96, 1, 22,163,195, 77,162, 32, 0, 70,185, 19,164, 25,144, 9, 8, 52, 57,190, 80, 15,110,255,240,134, 55,
+190,105,119,103,183,108, 82,249,160,209,104, 22,140,100,176,240,238,119,255,216,197,139, 23,111,125,161, 31,248,193, 31,202,158,
+ 33,192, 85, 46, 75, 20,229, 52, 26, 1, 90,128, 89, 32, 25, 66, 48, 90,249,114,230,196,242,239,126,255, 63,218,190, 80, 92, 44,
+ 22, 64,185,123, 0,224,214, 3,196,233,189,131, 51, 39,247,247,118,250, 73,244, 24, 24,140, 22,104,128, 66,252,247,191,240,218,
+ 15,253,233,151,255,252,207,255,235,143,125,244,163, 0,226,208,247, 0, 92, 90,247, 58, 88, 36, 23,119,231,225,244, 94, 60,185,
+123,116,231,185,139, 33,184,133,144,179,101, 51, 6, 35,233, 78, 8,204, 67,207,176, 90,246,223,242, 45,223, 26, 66,248,251,127,
+239,157,124,206,139,190, 49,187,114, 46, 55, 69, 0, 48,238,116,139,103,159,127,226,228,142,223,253,172,221, 59, 46,204,230,179,
+ 56,153, 88, 23, 67, 57,134,230,158,101,159,186,116,247, 98,125, 34,152,153, 89,232, 98,152,159,122,174,187, 87, 61,145,131,144,
+251,222,116,127, 62, 57, 24,214,126,233,169,245,227, 79,172,174,237, 15,202,110,148, 59, 14,143, 38, 79, 94, 59,253,248,147,183,
+ 45,215, 83,185,202,195, 93, 81,200,144,224, 38, 74, 52,120,146, 8, 36,101, 79,128, 1, 71, 71, 58, 60,194, 35,159, 34,195,236,
+228,169,179, 23,206,158,156, 77, 67, 23,141,150,140, 86, 78,160,185, 71,121,130, 12,150, 37, 74, 9, 52,201,251, 62, 12, 51, 4,
+122,202,241,201,195,219,142,250, 19,174, 72, 35, 47,173,201,203,243, 89,124,246, 29,179,187,239,156, 79,187, 16, 99,185,154,243,
+182,251,190, 26, 32, 65,149,111, 52, 0,134,124,215,233, 63,219, 95,157, 60, 88,159, 4, 40,210, 64,193,104, 6,129, 36, 45, 20,
+129,146,182,183, 19,207,158,158,242,220, 61,127,141, 32, 89,159,133,128,242, 98, 52,173,106,191, 3,141, 34,204,138, 89, 37,141,
+132, 96,102, 70, 90,148,188,104, 50,104,168,194,166, 81,197, 86, 67,148,209, 4, 88, 49,140, 6,101,192, 8, 19, 28, 34, 41, 57,
+100,194,255,119, 15,222,242,217, 51,103,206,156, 62,125, 6,192,122,189,186,118,237,218, 98,177,248, 60, 46,116,255,115,159,251,
+218,215,126, 83,147,108, 19, 62,205,130,153, 89, 8,225,218,181,235, 63,250, 79,126,228,233, 46,244,214,183,189,221,179, 75, 42,
+103,151, 0,205,202,198,208,234, 35,148,139, 89,136, 93,124,203, 15,253,224, 45, 46,244,166, 55,255, 0, 84, 62,202, 46,177,108,
+ 44,203, 78, 50,208, 16,130,145, 22,172, 24, 18, 59,185,179,126,244, 19,159,254,241,159,248,185, 99,102, 36,165, 36,149,205,211,
+104, 70,196,182, 34,106, 98,222, 89,142, 17, 49, 98, 18,125,111,190, 62,123,234,224,217,119,216,139,191,244, 7,191,227,123,127,
+244,216,133,160,141, 22,148,197,144, 78, 48, 4, 63,181,123,120,246,212,254,238,188,159, 4, 15, 49, 4, 2, 70, 71, 12, 25,158,
+ 23,239,250,145,119,189,237,173, 53,120, 49,207,217,199,135, 92, 46,185,228, 30,108,117,238,196,165,243,167,255,108, 26, 14,161,
+236,180, 12,203, 52,135,201, 61,185,231, 60,228,212,191,235, 93,255,184, 94, 40,231,156, 61, 47, 87,195, 19,151,151,159,190,184,
+186,114,109,181, 90,167,192,229,222,236,218,222,206, 85,165, 52,200,146,211, 93, 40,219,145,165,156, 83,210, 48,160,239,213, 15,
+253,247,189,254,245, 0,226,181,195,254, 99,159, 90, 93,185, 54, 84, 9,129, 93,212,179, 47, 44, 95,120,207, 98,103,198,233,212,
+186,156,221,224,110, 46,149,136,129,242,101, 63, 91,174,163,123, 70,210,249,115,231, 9,134,133,221,123,176, 72, 94,196, 36,151,
+ 20,217,155,174,175,151,251,215,174,173,204,108,103, 22,204,202,209,149, 11,244,156,179, 93,190,126,102,127,185,151,115, 13, 50,
+190,250,107,190, 38,204,207, 60, 15,190,189,107,152,134,213,172, 91,116, 92,244,189,239, 31,165,126,240,221,157, 24, 2, 41,135,
+231, 62,199, 43,215, 79, 95, 63, 58,217, 15, 93, 61,217,164,164,112,226,220,151,128,155, 11, 1,152,196,213, 78,183,236,226, 0,
+169, 79, 90,173,125,221,251,238,204, 98,228,114, 61,187,122,112,242,250,209, 94, 63, 76,132,234,210,139,149,142,174, 76,144, 16,
+ 68,152, 92,164, 28,112,201, 93, 32,252,104,145, 62,253,196,210, 24,206,158,157,155,237, 45,251,221,236, 17,144, 89, 22, 85,245,
+ 24, 41,156, 56,251, 92,108,121, 16, 10,211,174,159,196, 85,199,129, 53,236,227, 48,132,199, 46, 77,175,236,159,115,156, 18, 66,
+121,177,218,137, 44,231, 44,236,158,187, 95, 82,253,149, 8, 83,180,126, 22,251, 24, 7, 9, 2, 83,238,174, 28,157,125,242,224,
+252,149,125, 28, 45,243,124,106, 49, 20,197, 7,196,241,224,135,221, 51,247,209,136,205,170, 20, 45,117,113,232,226, 0, 32,229,
+238,210,193,249,131,213,169, 34,215,229,202,159,188, 62,244,131,119,209, 98,108,127,199,178,162,179,247,169, 46,116,244,218,222,
+197, 97, 26,251,236,118,241,224,194,178,223, 3,192,178,108, 48,101,191,190,159, 47, 94, 75,215, 14, 82,159, 52,155, 88, 12, 4,
+201, 11,247,126, 13, 40,192,208,238, 24,212,201,217,225,206,100,113,180,222, 59,236, 79, 66,213,179,176, 28, 69, 51, 0,132, 21,
+ 59, 17, 66,216,219,137,103, 79, 77,120,219,189,175,170, 49, 12,172,132, 51, 37,228,106, 95, 73, 90,177, 3,245, 30, 70, 47, 82,
+222,219, 12, 8,102,140, 80,137,224, 65,122, 17,157,179, 90, 55, 74, 32,138,143,144, 0, 67, 85, 62, 17,148, 76,197, 31,193,228,
+128, 9, 46, 8,148,170, 89, 18, 5,186, 32,119, 66, 18, 33,151, 3,146, 28,146, 67,160, 3,160, 67,213, 92,136,130, 73,128,228,
+114, 65,144,187, 67,240,162,235,148,151, 55,104,203,104,139,247,154,160, 20, 65, 16,109, 13, 95,124,124,254,126,118,124,220,123,
+239,125, 47,124,225, 11,239,185,239,190,179,103,206,108,158, 85, 61, 5, 44,193,115,253,102,215,174, 93,251,232, 71, 63,242, 71,
+127,244,135,143, 62,250,232, 23,102, 65,123,123,123,175,125,237, 55,221,121,231, 93,238, 69, 21,208,172, 29,199, 72, 9, 45,186,
+226, 13,145, 52,155, 27, 43,206,153, 6, 34,118,221,191,251,229, 95,254,189,223,123,223,231,174, 28,124,205,107, 94,243,194, 23,
+ 62,224,174,230,106,170,221,188, 97,201,228, 38,108,227, 24,215,223,184,164,146,112,108,150,213, 22,106,102,236,194,193, 79,252,
+243,159,251,147, 79, 62,254, 89, 22,244,134, 55,190, 25,101, 33, 55, 45,165,189, 47,182, 62,142,173,166,216,217,104, 78, 99, 12,
+110, 6, 51, 24, 97, 37,200, 52,196, 32, 18,243,105,111,198,147,123,135, 49, 64,138,180,248,186,239,254,217,229,178,191,229,130,
+ 98, 78, 67, 91,196, 38,169,217, 90, 13,117,108, 65,219,155,167,157,217,202,168,189,249,194, 76,147, 46,197, 14, 70, 5,194, 2,
+ 73,148, 80,198, 12, 93,200, 70, 11, 33,215,116, 11,246,238,127,250,119,174, 28,220,245, 51, 63,253,211,143, 60,242,200,141, 11,
+ 74, 57,227,150, 27, 92,178, 75, 54,103, 67,140,214,209, 44,207,186,117, 48, 63, 49, 63, 52,211,206,116,101,134,174,243, 16, 16,
+ 72, 11,168,219, 5,210,138,194,129, 96,118,210, 25, 32,144,158,251, 97, 88,189,238,219, 94, 23,227,228,167,254,197, 79,126,242,
+147,159,220,150, 80,218, 58, 61,117,105, 41,109,140,117, 12, 6, 34, 26, 45,144,144,153,119, 97, 56, 49,187,110,230, 59,179,165,
+ 81,102, 8,148,220, 4,122, 48,137,193,204, 65, 3, 80, 80,143, 12, 64, 52, 0, 74, 0,137,156, 83, 78, 9, 12,242,254, 59,191,
+235,187, 39,221,228, 45,111,169,241,104,120,209,151, 63,232,174, 33,121,159,188,239,253,104,237,203,101,190,186, 63, 28, 44,210,
+254, 97, 58, 88,228,117,239,203,149,123,246,148,100, 92,205,186,163, 46, 30,157,216,219,239, 98, 31,152, 5,119, 81, 32,104, 98,
+201,130,141, 84,217,235,226, 59,106, 62,227, 89, 82, 82, 72,137,135,203,221,195,229, 94, 61, 71, 82,246,252,170,175,250,234,199,
+ 31,127,252,242,229,203,241,218,254, 32,232,242,181,180,127,152, 86,131, 31, 46,114, 81,215, 18, 35,169, 96, 65, 80, 8, 10, 1,
+207, 60,183,188,251,142,163,221, 57,231, 83, 24,109, 58,165, 25,131,213,236, 49, 4, 3, 76,202, 17,230,202, 36,139,227, 42,194,
+ 47,233,209, 98, 53, 73, 41,174,214, 33,231, 92,143,164,220,221,100,250,230,111,254,150,223,250,173,247,240,206, 23,124, 93, 5,
+146,198,240, 65, 80,251,185,124,149, 48,237,214,209,242,222,236,224,212,252,192, 76,179, 14, 93,199,103,222,181, 27, 3,110, 63,
+ 63,139, 93,136,129, 49, 50, 24, 67,176, 34,165,226,208, 73, 24, 92, 64, 86,128,248,228,213, 11,139,126,158,114,151,189,179,230,
+184,173,154, 46,210,172,184,105,128, 13,124,144,111, 14,119, 85, 41, 2,136,214, 79,194,208,217, 96, 76,112,172,214,234,123,126,
+232, 99,251, 22,120,241,201, 85, 8,118,247, 51,119,119,118,194,108, 18, 38, 19, 55,179, 0, 89,139, 69, 6,239, 8, 92,217, 63,
+ 55,228,184, 90,239, 38,239, 8,144, 46,170, 37, 23,164, 84,190, 70, 20,144, 70,172, 9,177, 32,243, 49,182, 52, 87, 11,196, 50,
+153,164,228, 46,146,144, 92,146,153,178, 46, 61, 53,144,188,182,159,204,248,172, 59,166,183,157,155, 76, 39,182,187, 27,165,110,
+177,218, 1,194,213,195,211, 66, 72,169, 43,154, 69,203, 98,205,152,140, 53,216,102, 1,229,164,216,162, 14,128,144,156, 36, 68,
+192, 89, 66, 17, 18,240, 98, 55, 85,130, 86, 23,168,146,201,149, 80, 87,116, 64,171,149, 25,245,193,143,195, 31,245,201,100,111,
+119,239,124,215,197,243,167, 79,150,157,168, 33, 33, 69, 56, 85,236,129, 12,230,150,139,173, 43,191, 52, 42,186, 68,169,186, 6,
+ 1,112,128, 16, 69, 8, 78,144, 34, 36,207, 18,228, 1, 89,160, 64,194, 93, 70, 58,148, 97,160, 29,172, 78,102,239, 22,253,238,
+122,152,129, 36,115, 23,253,220,169,253, 46,240,238,103,204, 99,224,238, 44, 6, 43,167,196,200, 12, 26,144,235,169, 49, 50,139,
+164,140,145, 18, 40, 72,245,141, 92, 13,116, 80, 1,120, 75, 52,229,110, 3, 67,231,161,168,154,193, 5, 14,153, 66,120,106,113,
+ 70, 10,139, 97, 39,123, 36,172, 94, 77,214, 15,186,120,101, 13,242,169,131,193,200, 59,206, 77,187,142,231, 79, 79,230,179, 16,
+204,186, 40,167, 17, 25, 32,115,129, 49, 72,183, 40,100,169,136,199,139,183,146, 28,101,113, 2,233, 69,177,178, 27, 16,115, 54,
+119,150, 45,115, 15, 87,142,206, 0,225,168,223,145,204, 21,200, 34, 96,147, 64,102,193,220, 69,226,104,233, 0, 87,189,211,240,
+248,147,125,140,220,153,197, 19, 59, 97, 54, 9,231, 78,119,193, 56,157, 4, 54, 64, 39,150,248,181,236, 82, 13,229, 75,240,105,
+213,189, 73,164,144,114,200,206, 73, 8, 41,133, 44, 27,242,196, 21,143,214,187, 18,179,135,102,149, 93, 52,168, 68,211, 38, 57,
+ 1,201, 60,187,140,222,131,192, 48, 12, 36, 15, 14,211,229,104, 49,240, 83,151, 66, 32,231,211, 96,102,123,243, 96,193, 10,206,
+ 45,130,116,146, 14,167, 72,149,111,160, 92, 69, 72, 89,132,108, 57, 76, 93,112,217,144, 39,146,165, 20, 96,205, 82, 73, 50,177,
+198,201, 38,247,166,201, 94, 98,119, 20,107,228, 70,121,206,134,222, 1,226, 40, 27,208,117,129,228,108, 26,130, 89, 4,156,168,
+ 57,174, 68,194, 41, 35, 11,164,132,150, 46,212, 24,113, 61, 76, 87,195,180, 26,136,146, 18,170,109, 82, 61,136,148,201, 32, 10,
+197, 54,155,156,102,146, 80, 50, 33, 21, 37, 85,205,189, 28,110,232,251, 76,179,126, 16,192,216,244, 89,108,169,164,224, 45, 70,
+ 5,139,198,147, 64, 53, 72, 0,156,205, 54,149,173, 46,231, 66,178,150,181,120,189, 73, 17,230, 53,235, 48, 2,238, 78, 99, 67,
+216, 12, 42,183, 84, 20, 87, 4,100,136, 40,176,156, 81,112,193,232, 62,102,183,128,188,130,136,213,152, 2, 28,157, 75,211,123,
+ 64, 5,202,179,242, 70, 5, 25, 66,133,173, 75,174, 6,213, 43, 21,219, 86, 96,192, 98, 97, 13,146,224,132,201, 74,154, 86, 12,
+145, 11, 82, 77,160,138,203, 40, 66,174,113,155,224,114,161, 96, 54, 66,173,210, 20,213,129, 92, 4,228,144,138, 21, 45,191,164,
+224,114, 16,240, 17, 84, 0,224,242, 22,158,214,120, 71,117,143,116,139, 8,241,139,143, 47, 62,190,208,153,235, 38,246,238,226,
+206,124,103, 50,153,204,102,243,174,235, 80, 67,239, 97,181, 90,175,215,171,163,163,163, 92,170, 30,127,161, 11,234,186,238,197,
+ 47,126,240,249, 47,120,193,221,207,190, 59,196, 86,113, 20, 97,245,156,213, 20,144, 52, 51, 73, 31,255,248,199, 63,244,193, 15,
+188,255,253,239,239,251,254, 11,188,160,175,253, 27,175,121,224,129, 7,186,216,105, 68, 32,183, 33,187,227,153,227,152,225, 3,
+ 8, 33,208,216,247,253, 31,252,254,239,255,218,175,253,199, 63,215,130, 98,140, 15, 60,240,192,171, 95,253,181, 26, 99, 87,141,
+ 48,230, 38,165,223,206,240,143,103,246,199, 83,123,210,204,246,247,247,223,253,207,126,236,232,232,232,243, 91,208,217,179,103,
+ 95,253,234, 87,223,117,215, 51, 11,102,180, 21, 77,111,189,104, 59,232,223,250,250, 25,215, 84,162, 83, 32,196,112,233,226,197,
+127,245,243, 63,255,212, 83, 79,125, 78, 11,250,190,239,251,190,249,124,183,153,207, 27, 51,252, 77, 38,191, 73,162,183,165,212,
+208,190,146,168, 98, 27, 96,216,222, 76, 78, 58,125,226,209, 63,254,201,159,250,197,207,186, 32,155, 76,103, 41, 37,119, 79,158,
+182,144,253,250,233,238, 94,234,117,174, 92,202,119,229,153, 92,126,108, 47,203,229,167,242, 31,151,123, 46,149, 2,101,207,217,
+115,206, 57,189,224, 5,247,252,228, 79,252,131,189,189,221,207, 82,173,127,249,203, 95, 33,185,171,120,171, 27, 31,117,239,198,
+170,200, 22,102,211, 66, 8,183,144,141, 30,227, 16, 67,234,186, 33,134, 97, 18,215, 93, 28,102,221,106,210,173,118,231, 71, 39,
+119, 14, 78,238, 92, 63,115,226,169,221,217,193,215,189,230,197, 93,236,254,232, 3,143,125,198, 5,189,236,229, 47, 63,254,198,
+ 91,159,210, 77,231, 80,199,112,180,154, 49, 56, 9,179, 12,194, 76, 70,152, 57,161, 96,217,204, 99, 76, 49, 12, 93, 55,204, 39,
+139,192,193,130,158,255,188, 59,238,120,230, 43,127,247,119,223,247,153,116,232,245,218,188,193,141, 26,191,125,186, 55,167, 30,
+ 0, 48,157,172, 39, 33,119, 93,154, 79,215, 33,104, 50, 73, 70, 6,202, 72, 11, 26,245, 40,154,155,101, 51,198, 78, 36,193,160,
+220,125,226,137,251,215,131,189,243, 29,239,188,133, 14,213,154,208,118,109,232,248,163,128,191,245, 85,227,147,242,128,100,214,
+119,113, 53,155, 46,166,147,229,206,244,112, 62, 61,218,153, 29,237,204, 15,119,102,139,157,217, 98, 62, 57,154, 79, 14,167,113,
+217,133, 62, 90, 95,254,144,185,135,134,236,153,196, 63,252,225, 31,190,197,130, 84, 11, 83, 79,251, 40,117,190,250, 42,159,116,
+203,249,228,104, 54, 59,220,153, 31,205,186, 69, 96, 31,217,171, 69,205, 46,184,168, 2,137,128, 78,184,152, 81, 48,110,151,234,
+ 13, 74,110,102,111,125,219,219,111, 90,208,103, 90,207, 88, 40,148,198,175, 16, 92,154, 77,150,243,233,209,206,236,112,119,186,
+ 63,157, 44,163,245,198, 4,247, 18,143,137, 38,208, 91, 46, 42,152, 72,119,182,251,114,120,150,202, 97,212,137,189, 19,223,241,
+157,223,117,108, 65,219,187,147,115, 78,158,215,125, 94,173,243,106,157,150,171,180, 90,231,126,240, 52,212,189, 34,134,192, 20,
+216, 71, 91, 83,185, 44,211,125, 11, 46,117,109,171,255,184,211, 37,132,117, 71,114,102,201,179,138,142,100,207,247, 60,231,158,
+151,190,244,225,141,195,216,178,201, 26,146, 4, 28, 45,138, 69,130,196, 24, 48,157,134,104,220,219, 1,160,217,100,105,212,206,
+244,112, 50, 25,106,150, 36,203, 52, 9,146, 65, 12,101,107, 24, 74, 74, 48, 70,231,146,148, 51,192, 4,147, 91,114,100,135,209,
+ 13,112,195, 55,124,227, 55,126,240,131, 31, 40, 85,103, 75,217, 83,246,101,159,151, 43, 63, 90,229,197, 50, 47,251,188, 90,249,
+106,237,171,181, 47,123, 95,174,124,177,202, 71,203,124,180,204,253, 48, 12,169, 47,183,167,102, 51, 93,173,150, 81,183,150, 5,
+ 99,118,194, 1, 7, 50, 42, 78,145, 69, 79,150,171, 46, 85, 83, 42,247,148,210, 27,223,244,230, 42,161,195,101, 74, 73,159,124,
+ 98,237,142,107,251, 67,242, 45,239,213,252,134, 81, 49,176, 11,254,208,243,174, 78,162,246,102,128,208,117, 38, 24,137, 8, 7,
+ 36,154, 75,116,146, 82,137,233, 29, 5,247,105,190,209, 61,115,209, 79,220,163,151, 83, 98, 94, 42,185,193,108, 58,157, 62,252,
+240,203,222,247,190,255,105,195,224, 67,242,156,149,115,206,170,229, 29,185,148,219,249,246,246, 91,247,148,220, 61,167,156, 83,
+ 82, 74,197, 24, 40, 11,197, 97,200,229,142,209,235,100, 87,202,202,142,236,202, 94,148, 94, 57, 89,206,165,104,233, 85,202, 94,
+137, 86, 95,255, 13,223, 64, 50,172,226,125, 23,159,234,143,150,121,185,118,247,141,247,172,217, 83,171,129, 77,226, 58, 96, 8,
+186,122,116,180,190,122,109,117,233,242,106, 61,104,221,123,118,116, 93, 45,164,181, 42, 83,169,191,214, 20,155,114, 22,207,228,
+ 54,164,238,210,181,243,139,245,124, 72, 93,139,174,216, 16,104,200,117,242,212,201,184, 30,242,166,196, 88, 42,111,238,205, 62,
+171,228,136,168, 69, 50, 79, 57,187,107,221,231,100, 24,134,156,146,229, 84,111,195,114, 67,224,224, 86,210, 63, 2,144, 17, 4,
+ 50,160, 34,170, 76,137, 21,162,115,128, 14,163, 90,186,248,240,195, 47,139, 80,115, 26, 68, 99,185,148,178, 95,205,110, 1, 26,
+ 53,177,158,144, 33, 7,203, 57,195, 51, 46, 94, 94, 63,117,173,223,153,197,147, 39,250,249, 60,220,121,219, 60, 4,159, 77, 3,
+ 98, 48, 31,188,129,158, 9,209, 97,125,223, 29, 46,247,146,199,229,122, 82, 36, 34,186,209, 36,208, 33, 83,112,119, 90,206, 57,
+150,130,158, 54,160, 94,193, 95, 11, 2,234,168,199, 71, 69,107, 11, 16,169,236, 50,246,107,239, 7, 74, 41, 4, 72, 26,178,187,
+ 56,233,132,156, 1, 88,144, 50, 72,184,220,193,148,185,234, 39,238,150,115,133, 20,107,170, 95, 33,108,184, 25,225,116,198,154,
+246,194, 75,165,185,194, 8,242,173, 48,218, 1, 39, 51, 75,170, 95,202,216,165,132,234,234, 7,238, 31,164,213, 90,174,163, 73,
+103,207,184, 99, 22, 3,231,179, 16, 81, 32,155,176, 30,166,125,154,164,212,173,250, 73, 77,178,155,228, 71, 11, 74,147,220, 65,
+138,140,133,140,198, 38,162,130,100,120,181,104,162, 55,128,129, 78,122,171, 27, 9, 86,137, 4, 67,242,148,185,234,125,221,251,
+116, 26,206,158,138, 93,180,105,164, 19,253, 96, 57,199,197,122,186,236,119, 92, 33,229,104, 44, 55, 4,211, 6, 82, 47, 4,180,
+122,189,130,194, 22, 84,161,112, 10,132, 98, 75,202,202,229,165, 20,173,237, 98,158, 64,121,173,246, 87, 64,210,141, 41, 59,122,
+ 92,188,156, 66,176,163,213, 78,140, 70,155,145, 93,159,186,156, 75, 85, 89, 94,188,109,129,192,188,214, 29, 10,154, 91, 10, 54,
+238, 30, 11, 76, 1, 65,116, 21, 30, 66,209,158,106,251, 55,241, 90, 5,167,168,230, 17, 28, 24,143,160, 82,143, 60,248, 71,254,
+ 36, 25,237,196,169,157, 16,186,115,167, 79,204,166,147, 77, 64, 78,149,250,243, 77,123, 54, 38, 56,146, 20,139,153,169,199,190,
+162, 75, 5, 14, 2, 42, 48, 92,180,189,201, 71,104, 0, 90,193,207,139,150,209, 21, 33,246,169, 3,205,150, 10,193, 39,147,156,
+114,234,162,197, 96,133, 69, 84,240, 41, 59,190, 14,107,118, 8,238, 2, 98, 21, 23, 36, 86,158, 70,133,168,225, 37,165,168, 0,
+142,128, 2,154,151,141,109,124, 8, 1, 73,116,239, 14, 86, 39,165,112,125,117, 10, 48, 92, 37,168,179, 39, 87,147,174,191,237,
+236,228,220,201, 46, 70,155,207, 10, 62,199,138,136, 53,227, 82,149,217,140, 0,220, 99,149,190, 10,240,198, 17,202, 43, 2,243,
+ 81,161, 84, 86, 39, 81,213, 63,145, 89, 20, 41,183,228,204, 50,119,186,170, 38, 18, 74,174,144,125, 24,188, 79, 46, 33, 6,144,
+140,193,170, 92,138, 16, 42, 98,200,145,160, 21,161,170,104,149,226, 81,127, 93,204,116, 93,152,128,228, 52,154,139, 16,172,240,
+235, 68,193,150,253,252,104,125, 34,123, 88, 12,187,197, 9,180, 67,203,235, 7,137,196,245,163,252,216,165,245,124, 22,110, 59,
+221,117,209,110, 63, 55, 53, 98,210, 1,110, 77, 72,155,218, 42,221,227, 86,108, 95,144, 55, 67, 65,232,170,171,241,138,181, 54,
+100,113, 68,103,139, 61, 85,102,150,121, 65, 3,205, 36,145, 14,153,203, 97, 70,103,206, 62,144, 93,242,148, 68, 86,106,119,118,
+ 25,179, 89, 80, 41,172, 64, 86,108, 9, 25, 27, 19, 81, 5, 52, 37,107,109, 69, 78,142,231, 14, 72, 57,144,238, 78, 90, 48,102,
+128, 7,203,189, 85,154,165,220,173,210,172, 80, 89,224,213, 41,213,106,138, 92,176,148,145, 61,245,131, 29,173,114,160, 93,188,
+210,155,241,236,169, 46,154,221,118,102, 50,153, 88, 23, 25, 35, 28,102, 16,164, 88, 85,168,170,136,163,217, 35,178,248, 62, 21,
+231, 93,105, 70,117,233, 0,149,101, 41,135,193,131,187,181, 99,209, 54,191, 48, 79,172, 98, 5, 2,233,222,187, 49,100, 80,193,
+108,119, 30, 82, 80,118,247, 12,133, 80,162, 37,193, 92,138, 40,133, 4,182,111, 0,170,139,169,134,200, 65, 56,134, 28,141,158,
+178, 73, 88,167,153, 20, 22,235,121,159,167,238,166, 90,221,104,254,164,149, 69,189, 65,197, 16,156, 52,185,178,173,122, 55,232,
+226,149,158,196,213,253,193,130,205, 38, 33, 6, 78,187, 48,155, 6,154,197, 86,205,116, 86,147, 83,189,107, 81,206,106,143, 11,
+242, 43,115, 25, 93, 67,154,100,183,148, 99,206,177,189,128,213,243, 56, 96, 94,206, 51,137, 98, 82, 72,208,229, 70,131,123,162,
+155,134, 37, 72, 44,150, 46, 98, 54, 13,209, 56,159,197,221,185, 72,198,177,140, 89,149,165, 90,151,102,142,189,216, 2,184, 83,
+134,195,213, 46,168,148, 59,201, 82, 14,181,184, 86,140, 47,218, 9,118,192,188, 86,186,204, 26,180, 67,186,188,152,186, 6,194,
+ 59, 72, 33, 37,201,224,235,156, 29,160,197, 13, 52, 62, 86,163,189, 29, 41, 86,133,168,197, 25,231,254,250, 4,183, 72,221,133,
+148,171,209, 49,176,226,246,197,106,168,254,178, 86,223, 4,171,133,213, 77,141, 89,213, 61,211,144,124,185, 20, 73, 43, 25,103,
+117, 95,165,150, 51, 70,176, 37, 89,229, 88,218, 40, 97,137,168,182, 17, 37,244, 43, 5, 32,182,164,191,208,240,203,113, 30, 17,
+255, 34, 21,170, 58, 52,140,129, 67, 35, 41, 87,210,149, 12, 35, 83,159, 94,234, 29,149, 29, 79,199,198, 34,184,151,124,176,154,
+203, 18,112, 22,105, 56, 10, 11,185, 97, 52,181,242,130,102,192,234,134,169,150,147, 37,170,149, 85,219,175, 11,189,140, 37,174,
+169, 41,139, 70, 89, 11,222,206, 54, 4,120,121, 99,142, 65,183,220, 91, 16, 2,247,234,120,107,145,180, 6, 50, 99,225,157, 77,
+ 28,213, 75, 52, 69,171,213,229,234,138,138,139,171,154,108,172, 2, 40,133, 54,212,171,123,235, 84,169, 73,132, 23, 12,161, 45,
+ 14,205,190,160,114, 69, 75, 49,178,210, 79,203, 31,171,218,123,169,241,245,188,226, 77,197, 27,214,240,177, 4,197,245, 26, 78,
+183, 22,194,202,155,131, 83, 35,253, 85, 90,222, 70,131,209, 10, 79, 69, 70,172, 12,189, 74, 91,244, 42,132, 81, 70, 69,192,133,
+ 55,216,208,173,194,209, 29,129, 12,214,165,121, 75, 82, 74, 45, 16,170,226, 45,193,128,143,139, 80,125, 87, 73,112,140,133,167,
+170,192,226,104,138, 27, 49,214, 27, 33,102, 12,156,202, 95,169,226,187,181,188,214,194,205,234, 1, 80,173, 1, 8, 90, 17,122,
+ 61, 19, 42, 22, 7, 35,252, 82,249,145, 37,221, 3,106, 15, 86,219,167,234,106,170,100, 75, 92, 53,146, 20,197,186,113, 45,149,
+ 86,181, 64, 45,204, 35,116, 3,116,255,197,130,217, 23, 31, 95,124,124,241,241,151,165,222,250,116,151, 32,247, 78,156, 56,121,
+226,196,238,238,222,169,211,167,206,158, 57,123,234,244,233, 83, 39, 79,238,236,238,237,238,206, 39,147,105,169, 81,109,149,221,
+182, 88,155, 66, 74,105,185, 92,236, 31,236, 31, 28, 28, 94,186,116,241,240,224,240,250,254,245,131,253,253,107,215,174, 29, 28,
+ 28,252,229, 19,208,206,206,206,253,207,125,222, 51,158,241,140,219, 47, 92, 56,117,234,244,206,238, 78,140, 17,194, 45, 13,254,
+241, 74,205,177,106,206,177,255,140,228,214,155,248,208, 41,165,197,209,226,250,254,245,199, 31,255,244, 71, 63,242,145,143,125,
+244,163,233, 11, 84,249,254,130, 9,232,194,133, 11, 15, 62,244,208,151,126,233,139,166,211,137,180,137, 42, 62,251,117,107, 72,
+135, 45, 92,170,254,200, 18, 85, 87,132,166,118,203,141,197,210,237,130, 46, 90,163,113,137,150, 5,149,174,174, 79,125,234,147,
+191,249,158,247,124,248,195, 31,114,247,255,167, 2,218,219,219,187,253,246,219,191,236,203, 94,116,255,253,207, 45,136,142,198,
+194,240, 86, 49,241, 6, 25,241,150, 74,179, 97,177, 30, 67,156,121,188,224,254, 25,191, 30,239,154, 43,172,236,237, 34,226, 88,
+139,191,122,245,234,127,251,237,223,250,240,135, 63,124,229,202,149,191, 16, 1, 93,184,112,225,129, 7, 30,184,231,158,123, 46,
+220,126,123,206, 94, 11, 19,199,132, 34,224,233,212,134,219, 6,105,203,210,108, 63,127,204,248,224, 22,180,254, 91,146, 1, 62,
+219,147, 53,229, 44, 77,135, 0, 62,245,169, 63,249,253,247,255,238,251,223,255,191,135, 33,125, 97, 4,244,142,119,188, 99,221,
+ 15, 99,237,123,131, 59,110, 97,144,159,155,156,143,223,237, 13, 79,222,226,101, 55,208, 54,158, 70,149,110,160, 46,108, 31,195,
+241,244, 21, 18,131, 66,200,179, 73, 10,193,151,203,254, 55,254,203,239,252,231,223,120,239,159, 87, 64,111,122,243, 15,140,132,
+ 19,141, 4,183, 91, 72,229, 38,203,179, 77,147, 57, 46,151,173, 39,111, 86,165,227,135,176, 82, 89, 54,220, 22,219, 42, 13,141,
+ 20,235,241,242,173,149, 19,220, 50,232,102, 10, 86, 91, 7,187,152,167,147, 62, 90, 65, 97, 2, 24,215,171,244, 51, 63,247, 31,
+254,240,143, 62,254,127,215,255,196,239,127,195, 27,111,212,154, 91,119,153,212, 94,179, 91, 56,249,155,180, 99,195,126,228,230,
+207,182,165,182,173, 17,102,110, 5, 38, 32, 13,178,224,102,245,165,102, 24, 5,100,108,100,107,192, 12,193,196,250, 87,232, 98,
+238, 66, 42, 6,170,235,134,221,233, 50,134, 6, 14, 89, 40,237, 30,238,147,223,252,157, 39,126,241,151,222,123,229,202, 83,159,
+151,128,162,220,159, 94, 46, 79,119,198,142, 87, 5, 56, 18,176,116, 92,168, 55, 60, 43,193, 80, 26, 23, 72, 24, 61,132, 92,142,
+137, 81, 33,248,216, 81, 64,106, 84, 25,131, 26,117, 11,164, 10,177,164, 92, 33, 90, 42, 82, 38, 24,144,160,220, 70,119,176, 80,
+ 72, 11,232,250,229, 47,186,255,217,247,188,252,234,181,229,175,252,242, 47,125,236, 99, 31,251, 92, 5,148, 71,156, 99,235, 38,
+111,186,107,221, 28,224, 84, 86,108,129,174,106,183,223,198, 65, 29,139, 6,184,245, 39, 80, 48,159,198,117, 23,147,153, 8, 77,
+ 38,195,108,178, 14,230,165, 4, 52,233,114,168,164,115,129,168,157,214, 91,142,190, 36,254,193,142, 69, 18,173,105, 18,128,213,
+122,159, 0,210, 42,117,222, 32,194, 7,249,176,183, 59,251,142,239,248,118,151,254,229,207,254,220, 35,143,124,118, 49,133,135,
+ 95,250,240,182, 69, 86, 53, 54, 91,164,161, 45,250,237,141, 54,233,184,237, 58, 86, 91, 58,254,210, 86, 6,112, 2,100,238,226,
+ 16, 44, 25, 68,122,180,212,197, 84,105, 71,112, 51,103, 3,123,140, 34,100,112,180,242,111,193,188,140,181,237,175, 33,148, 13,
+ 81, 41, 84,229, 90,238, 42, 36, 95, 47, 56,139,139,203,245,236,104, 61,119, 89,129, 86, 30,122,201, 75, 94,249,202,175,184,116,
+233,210,229,203,151,159,246,136,109,164,179,109,100,110,161, 50,184,169,241,172,170, 73, 45, 18, 87,149, 33,183, 42,114,173,101,
+ 38,134,180, 51, 93,116, 49, 3, 48,243,157,217,106, 18,251,130,255, 24, 21,232,213,238, 26, 27, 84,196, 74, 39, 55,202,140, 64,
+101,130,147, 69, 58,176,210,224,192,237,131,220,144,220, 90, 78, 46,253, 0,149,247,173, 44,101, 40,203,139, 97,115, 13, 54,155,
+ 77, 95,247,186,111,123,252,207, 30,255,197,127,251,111, 62, 83, 12, 21, 94,242,210,151,142,244,236,173,207,155,126,218,144,138,
+ 26, 25, 14,194,177,118, 33,221, 20,120,106, 68, 93, 67, 72,147, 56,152, 37, 66,102,185, 11, 67, 8,217, 44, 91,129,178, 40,142,
+138,192, 13,197,161,181,212,105,171,207,142, 99,141,133,155, 52,101,243,227,104, 22,132,109,168, 22,238,182, 92,207, 22,235,121,
+150, 81, 99, 45, 28,238,126,226,196,201,191,242,149, 95,185,183,123,226, 35, 31,249,240, 45, 52,168,204, 32,185,197,249,169, 44,
+120, 0,200,142, 62,121, 74, 85, 79,234,243, 4,193, 96,140,177,114, 22,140,156, 76, 24,171,137, 85,140,121, 18, 83,217,248,105,
+236,119,231,135, 93, 76, 69, 21, 99, 16,144,199,226, 64,118,120,107, 82, 42,149, 11, 43,237, 52, 13,247, 47,149,196, 74,104,104,
+ 88,121,217,140,145,180, 56, 62,209, 26,149, 80, 73, 93, 8, 36,178, 51, 57,115, 70,206,200,149,251,233,165, 89, 43,123,118,249,
+195, 15, 63,252,178,151,189,236,199,127,252,159, 61,241,196, 19,199, 52,232,161,135, 30,186,165,223,114,201,189, 98,153,238, 90,
+247,133,162,163, 44,101, 87,114,229,210,150,221, 98,168, 50, 33, 32, 86, 98, 41, 0,197,144,163, 13,164, 27, 61,198,126,214,173,
+ 99, 76,100,177, 50, 13,224,188, 41, 56,225, 88,185,220,106,176,231,118,164,196, 77,223,196,104, 50, 71,166, 74,109, 46,216, 40,
+ 48, 91,131, 9,151,235,217,209,106,199, 21,182,195, 97, 29,247,186,175,120,249, 43,231, 59, 59,101,168, 78,213,160,197,178, 38,
+199,217, 85, 40, 67,101, 75, 82,210,106,237, 35,190,156, 51,142,149, 89, 71,112,154, 52,219, 68,196, 93, 68, 44,140,224,160, 51,
+ 39,214,231, 78,173,186, 32, 66,179,169, 38, 33,213, 86, 14, 34,132,218,165, 95, 28, 27, 89, 59,115, 74,149,183,180,155,148, 54,
+ 58, 18,161,148, 53,205, 91,204, 89, 58,150,216,132, 51, 22, 56,170,180, 27, 64, 13, 23,135, 28,221, 3, 64,151,245, 41, 20,190,
+ 20,199,250, 54, 73, 41, 55,234,176, 3, 50,125,197, 43,191,226,182,243,183,253,234,175,254, 74, 1, 91, 98, 63,148, 35,198,148,
+181,127,148, 14,142,178,187, 36,172,147, 22,203,156,253,166,124,139, 26, 67, 27,110,164, 95,179,162, 64,209, 68,176, 11,160, 47,
+119, 38,171, 20,179, 1, 36,134,129, 22, 10,239, 74, 38,122,169, 80,171,138, 0, 94, 9, 38,102,168,213,199,134, 1,228,140, 16,
+ 74,179, 79,171, 29,141, 81,230, 88,203,173,245, 24, 0, 42, 83,167, 68,186, 35, 37, 75, 41,208,232,110, 57,177,146, 38,197, 58,
+211,138, 26, 91, 33, 85, 34, 11,247,228,126,255,253,247,127,207,247,124,239,207,254,236,207, 92,189,122, 53,156,185,227,249,135,
+ 11, 63, 92,164,195, 69, 62, 88,228,229,218,135,172,148,125, 72, 74,222,218,122, 88,251,143, 74,197,136, 99,107, 97, 61,238,141,
+237, 36, 15,230,198,108,144, 49, 77,187,117,180,101, 78,105,221,231, 33,229,148,211, 98,153,142, 22,105,177,200, 67, 86,114,245,
+131,134,193,107,127,230, 56,106, 70,219,228,169,186, 13,242, 45,190,215,232, 57,202, 84, 15,140,129, 73,125,218, 69, 7, 33, 38,
+ 15,203,245,108,213,207,134,220, 13, 67, 92, 13,211, 97,232, 54,149, 33,220,200, 94,223, 98, 39,105, 62,159,191,252, 21,175,248,
+ 95,127,240, 7,188,243,249, 95,127, 60, 40,228, 45,162,104,222, 34, 81, 40, 27,215, 6,125,148, 61,241, 46,246,209, 74, 71,166,
+239, 78,143,246,166, 71, 70, 23, 16,130, 38,209,141, 4, 52,153,216,233, 83,147,189,157,104, 70, 26,119,231,225,196,110, 23, 98,
+181,210, 33,148,142, 91, 88,165, 58,227,248, 96,174, 58, 85,103,203, 68, 53, 51, 83, 78, 40, 3, 93, 78, 3, 48, 12,221,213,195,
+ 51,203,245,188,212, 95,179,135,156, 59,108, 19,175,113, 3, 46,176,133, 22,144, 22, 76,185, 82, 24,110,136,118, 70,175,192, 27,
+243,176,198, 14,110, 68, 30,108,202,243, 18,232,148,202,144, 40, 50,163, 80, 76,233,196, 88, 99, 20,164,148,212,247,126,196,108,
+ 70,171, 77,126,140,161, 76, 30,225,116, 98, 49, 88,201,194,140, 12,161,180, 26,104, 11, 6, 42,119, 38,110,197, 65,108,171,116,
+ 71,242,174,156,194, 33,197, 97, 96,206,149,149,223,230,248,108,247,185,181, 16,170, 1,120, 24,169, 91,146, 11, 22, 44,250,200,
+236, 31,153, 45,216,116,166, 97, 12,196, 42, 77,179, 85,224, 27,157,117, 43,243, 39,203,104,152, 48, 0, 48,122,176,108,204, 70,
+ 47, 5,231,236, 42, 13,233, 67,202,203,181,143,244,207,249,204,118,231, 49, 4,146,220,153,133,243,231,166,243, 89,160, 33,144,
+ 93,103,101,146, 29, 71, 3,135,113, 41,155, 53, 57, 44, 43,148,189, 90, 15,179,195,197, 94,246, 88, 98,159,245, 48, 75, 57,110,
+230,129, 65,155,106,179,198, 94,236, 90, 64, 46, 22,169, 2, 8, 37,228,200,136, 44, 54,128, 55,166,237, 91,101,212,234,246,129,
+ 13,239, 96, 11,228,240, 38,241,145,120, 44, 43,132, 81,185,182, 70,129, 20,162,124, 93,106, 33,210,145, 70,228, 92,184,151, 70,
+170, 79, 92,175,179,177, 78,181, 41,109,226,172,218, 84, 58, 38,219,148,158, 45, 16, 33,139,238,197,119, 88, 74,200, 25,217,107,
+185,184,116, 14,176,145, 25,113,139, 28,115,235,148,112,108,178,172,166,215, 13,113,219,232,109, 48,137, 58,234, 71, 99,128,225,
+ 45, 33,172, 44, 8,109,201,171,178, 34, 4,200,152, 67,200, 0,140,165,169, 20,141,158,176, 89, 65,229, 78, 52, 58,209,106,173,
+245, 80,120, 61,215,119,173, 0, 0, 8, 65, 73, 68, 65, 84,181, 48, 75,151,159,234, 67, 48, 2,147,137, 93, 56,219,157, 57, 21,
+ 67, 48, 0,211,137,205,102, 22,204, 72,101,197,126,152,122, 46,169,104, 88,245,179,117, 63, 19, 12,130,195, 82,142,181,145,149,
+ 91,249,208,103, 5,111, 52,198, 96,106,156, 1, 25, 24, 29, 91, 4,169, 77,182,160,198, 42, 96,107,114,169,142,170, 74,172, 81,
+ 99, 91, 96,223,210, 90, 84,118, 87, 25, 47, 5,109,152,133,198, 58,194, 14,108,212, 0,149, 12,163,140, 45,116, 53,138,140, 55,
+ 78, 96,159,188, 31, 20, 11,103,154, 12,198,108, 48, 67,150,134,132,202, 14, 21,114, 70,202, 28,233,148, 57,163,145,133, 74,213,
+191, 81,174,183,207,214,246, 71, 11,172,198, 82, 66,125,138,148,231, 72,199,134, 73, 83,186, 51, 70,101, 81,115,233,133,153,165,
+ 99,195,169,216,136, 10, 34,183,176,124, 47,228,147, 13, 51,168,205,172, 80, 37,209,169, 50,120,138, 19,172,219,155, 33, 20, 62,
+194, 32, 26, 28,196,208,243,104,129, 79,212, 0, 5,147, 73, 55,155,159, 8,214,129,232, 66,152,239,204,187, 24,173, 12, 12,129,
+ 21, 74,132, 54, 16,204, 77, 89,119,163, 9,221,140, 95,141, 73,100,113, 61,155, 35, 86, 34,105,208,111,196,221,189,181,102,183,
+ 40,140, 91, 78, 77, 85, 72, 85,144,245,212,140,177,123, 27,115,229,168,205, 7,106, 42,200, 13,114, 86,175, 52,206,233, 44,103,
+175,108, 26,220,115, 27, 84,146,220,179,171, 44,104,200,200, 96, 8, 4,208,197, 16, 98, 32, 2,110, 0,167,183, 24, 37, 27, 92,
+129,162,179, 54,255,104,243,239,216,193,107, 1,206, 49,164, 79, 66, 8, 81, 26,123,192, 43, 95,124,227,189, 26,181,171,106,139,
+188,178, 69,154,207, 45,196,164,218, 77,138,218,178,228, 35,176, 37,211, 24,114,171,210, 33, 37, 88,187, 54,235,172,173,194, 90,
+ 49, 18, 57,199,245, 48,117,149,208,218, 86,195,108,200, 19,212,177, 23,101,196,161, 3,232, 98, 58,177,179,154,116, 70, 90, 8,
+216,219, 9,123,243, 16, 66,237, 62,156, 68,150, 38,137, 18, 73, 86, 99, 95,120,148,197,245,109,172,118,121,178, 30, 41, 51,219,
+ 88,166,162, 68, 57, 71,140,224,210, 86, 47,100,115,248,237, 16,160,153,161,102,123, 42,220,209, 68, 75,110,227,253,117,126, 1,
+ 90,255, 0,125, 67,134, 67, 37,124, 11,130,249, 24,232, 85,224,203, 51,135, 28, 83,238, 68, 72,182, 26, 38,125,158,213, 49, 2,
+220,108,109, 23,220, 61, 77, 39, 6, 32, 70, 11, 1,211,174, 76,164, 96,136, 86, 38, 4,212, 16,153,114,199, 72, 20,170, 62,126,
+204,244,198, 65, 20,149,131, 86,224, 35,105, 43, 10,141,133,188, 87,177,211, 45, 86,126,227,126, 17,227,200,219,227,209, 17, 43,
+157,176,234, 69, 89,128,131,217, 9, 24,225, 62,102,236,141,130, 93,101, 84,220, 32,233, 2,192, 33,119, 67,154, 72, 1, 84,242,
+184, 26,102, 37,138, 17, 44,123, 84, 93,111, 99,227, 2,146,178, 99,177,206,235,228, 4,205,242,144,252,112,145,203, 56,205,105,
+103,187,115,235, 2, 69, 68,179,217,212,186, 56, 14,207, 42,208, 91,157, 77,215, 88,223, 55, 57,185, 90,192,173, 34,142,205,222,
+ 3, 91,108,184, 77, 87, 66, 57,119,163,227, 35,182,252, 32,176,153,111,211,114, 34,167, 23,100,152,230,162, 23,219, 89, 57,252,
+226,232,232, 27,111, 14,226,144,186,163,126,238, 30, 64,186,135,117,154,102, 89, 97,136,182,184,223, 91,172, 94,225,161, 44,248,
+122,132, 17,185, 92,251,245,195, 84, 2,172,249, 44,156,222,139, 93, 52, 80,147, 24,128, 64,134, 26, 33, 27,143,247, 26,109,103,
+218,183, 46,167, 19,136,206, 49,230, 30,253, 24,235, 96,198,154, 64,108, 29,179,134,184,160,177,223,171, 62,141,174,190,176,249,
+ 80,167,168, 20,200,188,224,197, 37,136,119,201,197, 33,119,238,177, 80, 17,251,212,165, 20, 93, 38,210,101,222, 90, 50, 74, 23,
+ 90, 97, 27,110, 76,121,117, 1,210,166,188, 38,207,200,141,151,187, 30,120,184,200, 49, 58,137, 24,220,229,139,117,157,151,212,
+ 69,155,116, 44,253,217,209,216, 69, 27, 33,151,146,247,141, 74,178,117, 95,227,232,156,145,239,200, 77,206,213,134, 48,141, 75,
+241, 49,146,220,234, 94,242,177, 93, 8, 66,174, 96, 3,130,204,163,185, 23,132,189, 96, 60, 21,106,151,135,101,191,187, 24,102,
+101, 71,178,199, 33, 79,218, 12,147,150,223, 65,173, 79,197, 53, 66,137, 26, 35,210,178, 55,165,215,139, 46,207, 94, 87,176, 94,
+235,112,145,234,180,109,227, 36, 50, 88, 57, 95,216,157,133,221,121, 40,173,227,179,169,157, 57, 17, 39,147,138,118,119, 93, 65,
+ 98,176,113,112, 37,220,119,143,104,126,138, 35,201, 21,149, 88,222, 44,208,104,181, 56,162,189,163, 5,247,202, 26,101,227,107,
+214,120,192, 81, 17,219,226,204,221, 41,148, 53, 32,123, 72,206, 50, 70, 18,160,156,106,238,184,145, 46,107, 30, 92,137,204, 44,
+ 51,121,198,166, 17,140,221,141,109,206,101,227,179,182,246,159,182, 97,133,192, 91,134, 47, 35,101,173,147, 91, 83,130,195,152,
+ 38, 41,148,106,109, 23, 67, 12,141, 32, 65, 52,213,130,193, 34,168,173,244,171, 82,119, 43,213,164,222,114,237,181,169,157,110,
+149,170, 50,226,156, 62, 34,246, 46,246, 57,150,241, 86, 70, 31,172, 27, 66, 44, 67,194,147,199, 62, 77,178, 2,137,172,176, 30,
+102, 67,142, 99,243, 30,219, 52, 62, 47, 77, 65, 53,165, 46, 29, 0,108, 8,120,163,218, 87,147, 81,186,238,252, 88, 78, 93,218,
+150,234,185,113,207, 92, 59,128, 50,209,142, 71,171,140,253,209, 29,209,218,180,189,162, 65,209,234,104,130,233,132,243,105, 8,
+ 86,146, 21, 70,175, 51,160, 70,197, 69, 93,170,111,241, 5,224,173, 33,117,220, 26,109,230,178,110,106, 47,170,152,112,161, 95,
+ 11,185, 28, 49,152,171,124,178,112,174,107, 84, 65, 82,173,204, 92, 98, 20,167, 83,220, 12,221,169, 43, 97, 29,153, 84,250, 56,
+ 90, 23, 15, 55,125,218,155,138,125,137, 42, 74, 11, 19,213,114,198, 81,130,244,218, 8, 85,248,220,165,122,171,232, 42,128,101,
+150,229,204,156,164, 80,197,194,219,238,125,213,200,247,199,214,156,240, 22, 49,111, 32,177, 27, 50,212, 26,169,234, 24,101, 99,
+ 59, 65, 3,220,120, 44, 46, 29,203, 67,146,181,122, 78,235,196,208,246, 60,162,113,186, 18,235, 11,164, 81,119, 90, 81,153, 27,
+ 16,103, 43,178, 27, 51,170,150,124,150, 24,106, 51,206,104, 76,217,109,156, 43,216,128,173,134,199, 85, 97, 23, 57,196, 49, 5,
+229,102,114, 23, 0,111,231,138, 26, 81, 52, 31,107, 86,141, 41,190, 61, 78,175,220,176, 31,171, 78,231, 77, 65,155,219, 69,190,
+113, 28, 20,218,216, 89,142, 61, 0,155,102,186, 10, 62, 53,146,121,171, 75, 22,126,251, 8,107, 98,211,135,135,106,172,198, 22,
+129,218,212,165,150,173,182,252, 15, 21,179, 7, 55,129,239,136, 85, 84,191, 83,125,121,212,216, 1,217,118,119,116, 89, 21,153,
+ 24, 49,182, 81, 82, 26,161, 53,130, 21,244, 25,251,131,183, 50,187, 99,196, 23,201,185, 37,175,177, 51,117, 99,236, 71,159, 85,
+247,186,116, 53,214, 3,219, 52,183,116,131,168,105, 56,139,233,209, 86,251, 95,171,101,214,230, 95,200, 54,181,222, 22,239,176,
+246,219,108, 58, 10, 42,196,176,201,223,202,182,120,212,198,175,143,189,162, 99,141,160, 44,169,140, 44, 6,217, 14,237,150, 52,
+ 49, 14,101, 28,227,130,177,190,176,169,203,114, 76,151, 91, 60,224,173, 31,148, 99, 67, 90, 49,248, 45, 42,108, 81,214,104, 3,
+173,181,233,108, 18,246,150,161,179,246,211,110,206,144,234,216, 72,214,222,177,173, 81,209, 77,105,234, 89, 20, 70, 45,221,164,
+160, 26,155,157, 25,155,155,196,102,198,200,120,204,235, 4,179, 86, 41, 47,118, 76,194,118, 87,211,216,169,188,105, 53,231,113,
+ 90,199,136, 24,183, 94,154, 17,253, 86, 11, 49,212,154,108, 41,209, 36, 29,139,237, 89, 27,100,197,237, 18,106,109, 44, 26,193,
+ 2,232,134,220,144,218,232,203,168, 92, 21, 55, 40, 67,213,154,129,194,184, 29,181,214,219,198, 93,163, 14, 81,216,176, 8, 29,
+ 35,154,233,173, 83,166, 90,163, 17,207, 46, 14, 96,147,138,140,240,238,173, 88, 15,227, 76,182, 27,162,124,105,123, 56,249,166,
+ 85,158,181,133, 22,227,129,171, 75, 30,233, 53, 35,213, 70,141,117,211,102,208, 85,211,130, 86, 53,170,135,184, 38, 73, 53,235,
+ 65,187,163, 38,159,154,118,113, 59,229, 24,131, 50, 32,106, 76, 58,125, 67,192, 44, 99,254, 52,102,174,229,221,171,217,246,209,
+224,195, 71,118,135, 70,131,122, 12,110,194, 13,223,181,233,171,169,245, 46,108, 17, 21, 37, 31,195,119,175,160,144, 26, 11, 74,
+ 99, 40,208,166, 0,192,154,140, 42, 58, 94, 26,223,183,129,214, 38, 60,141,237,133,197, 28,121, 77,246,142,157,179, 13, 13,174,
+142,122, 16,193, 88, 71, 30,106,203, 5,183, 9,130,220, 84,155,107, 39,176,198, 89,198,199, 36, 85,239, 89,117,152,165,184, 53,
+253,112,155,124,215, 60,195,198,126,141, 48,154, 54, 57,221,134,207,114,131, 97, 26,179,211,114,195,101, 60,229,198,108,160,182,
+ 96,170, 33, 43,133, 89, 70,152, 54,194,106,157,214, 86,163, 7,109, 10,180,165, 34, 48,226,176, 85,198, 17, 27, 43,221,166,118,
+212,230,181,177, 4,213, 80,106,142, 41,245,184,220, 17,226,215,150,237,225, 13,132, 43, 31,131, 36,226, 88,173,132,218, 4, 11,
+220,148, 63, 90,103, 90, 29,195, 95,213, 72,219,161,105,131,150,198, 0,101,235,108,212, 60,122, 68, 21,183,172,209, 24, 32, 85,
+ 39,184,253, 50,109,193,248,218,172,242,255, 0, 2, 20, 76, 70,229, 56,168, 10, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+ 0};
+
diff --git a/source/blender/editors/datafiles/multiply.png.c b/source/blender/editors/datafiles/multiply.png.c
new file mode 100644
index 00000000000..6648ecdf5d2
--- /dev/null
+++ b/source/blender/editors/datafiles/multiply.png.c
@@ -0,0 +1,320 @@
+/* DataToC output of file <multiply_png> */
+
+int datatoc_multiply_png_size= 10039;
+char datatoc_multiply_png[]= {
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 96, 0, 0, 0,
+ 96, 8, 2, 0, 0, 1, 26,253,208,249, 0, 0, 0, 4,103, 65, 77, 65, 0, 0,177,143, 11,252, 97, 5, 0, 0, 0, 6, 98, 75,
+ 71, 68, 0, 0, 0, 0, 0, 0,249, 67,187,127, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, 40,155,
+120, 0, 0, 0, 7,116, 73, 77, 69, 7,218, 7, 21, 0, 4, 17,164, 74, 11,162, 0, 0, 32, 0, 73, 68, 65, 84,120,218,237,125,
+ 91,176,173, 89, 85,222,247,141, 57,255,181,214, 94,123,239,115,217,167,251, 52,221, 45, 66, 95, 64,160,149,216, 77, 55, 32, 49,
+137,196, 91, 21,134,138,146, 64, 20,171,148, 74, 52,149, 60,224, 13, 21, 5,226,131,229, 37,151, 74,149,151,170,132, 7, 41, 33,
+ 38, 38,241, 82,165,121, 49, 79, 65, 19, 65,163,160, 17, 5,161,185, 9, 54, 77,159,238,115,250,236,179, 47,235,246,207, 57, 70,
+ 30,198,156,243,255,247, 62,187, 27, 80, 76,197, 42,214,161,207, 57,123,157,189,215,154,107,204,113,253,198, 55, 6,192,231,250,
+120,198,237,183,223,117,215,221, 55, 63, 79, 0,111,252,161, 55,229,156, 8,136, 8, 69, 98,140, 93,140,177,235,222,252,166, 31,
+246,111, 10,223,245,221,223,211,247,155,156,147,170,102, 85,213,188, 90, 45, 87,171,229,241,209,141,123,239,185,243,218,181,131,
+195,195,195,112,255, 3,247,107,206,154,213, 96,166,246,241,143,126,224,198,141,171, 71, 71, 7,139,163, 27,217,236,235,190,238,
+ 21,239,126,247,187,227,181,253,229,159,124,100,113,184,204,164, 92,222,185,126,235,185,220, 33, 32,168,154,104,206, 41,229, 55,
+191,249, 45,225,122,250,226,117,159,205,204,212,174, 94,189,114,237, 70,191,179, 21, 98,132,170, 93,188,120,121, 58,155,155, 89,
+216,222,187,151, 0, 12,102,150,214, 55, 52,235,181, 27,253,180,155,220,121,251,109,187,231,246, 12, 70, 67,132,169,154,145, 4,
+104,166, 10,136,156,255,243,253,139,249,147,184,127,222, 79, 96, 48,132,237, 11,247,144, 6, 24,129,212, 31,197,233, 94,156,236,
+ 16, 60, 58,206, 31,121,100,153, 50,110,185,208,241,214,187,191,154, 8, 16,192, 8,146, 20, 18, 68, 96, 8,164,144, 2,137,209,
+212,140, 25,153, 34,132,137, 33, 3, 2, 40, 12, 0,140, 12,208,207,234,186, 66,251,219,214,214,252,153,207,124,166, 8,151,203,
+229,233,187,123,224,129, 7,190,250,107,190,214,204,132,164, 72, 8,193, 47,238,191,255,198,111,188,235, 93,191, 93, 94,233,213,
+175,126, 77, 74,189,230,172,170,170,185,223,108,214,235,229,114,113,124,233,210,185, 23, 60,255,222, 63,122,223, 7, 0,132,251,
+239,127, 64,179,170,169,153, 93,189,250,216, 99,143,253,217,225,225,254,226,240,198,106,117,164,154, 95,243,205,223,246,206,119,
+254, 15,126,213,215,127,235, 71, 30, 89,145,236, 2,239,186,245,137,233, 36, 76, 98, 12, 93, 71, 96, 62,223,121,214,179,159, 59,
+157,205,194, 58,222, 5, 64,213, 54,235,131, 79, 95,217,239,147,237,204, 3,161,100,184,227,206,187, 9,168, 89, 84,168,168, 2,
+162,121,163,170, 87,158,220,244, 9, 95,114,247, 45,119, 60,227,139,114,206, 27,194,128,104,170, 6,130, 10,131, 65, 97,241, 40,
+237,189,255, 19,211,237,115,233,210, 5, 49,243,187,219,187, 27, 48, 3, 72,203,155,227,201,206, 29,148,152,213, 30,121,108,243,
+200,227,235,219,246, 38, 93, 71,222,122,215,215, 80, 4, 20, 2, 6, 8, 5, 66, 48, 16,129, 18,130, 4, 72,140, 10, 21, 51, 26,
+ 12,128,208, 84, 9, 82, 4,200, 4, 12, 20, 83,124,190, 30, 28,127,241, 61,223,251,125,219,243,109,131, 17,229, 23,133, 66,145,
+ 32, 36,131,132,159,249,153,159,186,114,229,202,217, 47,244,253, 63,240,131, 89, 51, 12, 80,243,151, 37, 64, 33, 33, 20, 2,164,
+ 32, 72,160, 48,248,107,134, 32, 33, 44,151, 71, 63,241,227, 63, 57,126,161,184, 88, 44, 0,255,244, 0,192,209, 3,196,241,209,
+193,241,209,254,102,179, 2, 40, 82, 13,192, 40, 34,175,253,230,111,124,222,125, 15,254,194, 47,252,135, 15, 63,252, 48,128,216,
+111, 54, 0,212,108,189,177,195, 69, 82,227,246, 86, 56,191, 19,151,139,163,107, 79,124,218, 96, 66, 9, 81,132, 2, 6,146, 80,
+154, 33,105,146, 32,253,102,243,218,215,126,107, 8,225, 71,254,197, 91,248,236, 23,190, 42,171,229,236, 31,138, 0, 76,104,105,
+157,215, 87,167, 93,190,109,111,114,113,183,155,116, 33, 68, 17, 9, 34, 36,105,230,138,246,236,249,246,185, 32, 34, 34,161,139,
+ 97,235,252,115, 84,181,232,137, 41, 8, 83,205,253,113,234,143, 82,210, 27,199,249,218,141,116,188,202,166, 26,104, 36, 98, 55,
+221,217,189,176,119,233,182,201,100,102,106,254, 80,181,104,200, 48,131,138,209,140, 2, 77,102, 84, 75,170, 74,146,154,215,107,
+187,214,227,250,145,236,236, 76,158,117,231,222,222,238,185,217, 52,144,210,167, 36, 20, 17,161, 80, 84,195,246,197,187,161, 4,
+235,137, 64, 51,133,102, 77, 75, 82, 13, 33, 78, 47,116,179,139, 18,119, 51, 38, 79,222,200, 31,127,116,249,200,227,235, 62,233,
+124, 38,132, 1,229, 80,188,245,158,175, 5, 72,208,252, 15, 10, 0, 51,221, 44,175,197,110, 46,113,155,174, 9,160, 65, 40, 2,
+243,187, 11, 46, 80, 82,118,230,113,239,194, 52,170,102, 87, 61, 0,128,152,102, 8, 12,156,108, 93, 34, 0, 24, 0,170, 25, 9,
+ 2,217, 32, 2,192, 52,187,178,169,225,104,153,142, 87, 26,205,212, 53, 25, 20, 20, 97, 83,104,229, 53,140, 38, 20, 3,196, 29,
+163,192, 50, 32,132, 24, 20,230,119, 8, 19,195,255,119, 15,158,249,236,197,139, 23, 47, 92,184, 8, 96,189, 94,237,239,239, 47,
+ 22,139,207,225,133,238,125,206,115, 94,253,234,215,144, 44, 22,231, 87, 66,145, 32, 34, 18, 66,216,223,191,241,111,254,245,191,
+124,186, 23,250,161, 31,126,147,102, 53,247,135,197,250,221,240, 73, 41,143, 32,197,240, 99, 23,223,248,131, 63,112,198, 11,125,
+223, 27,190, 31,230,191,252,150,138,133,179,220,100, 16,192, 15, 69, 9, 65,132, 34,155,245,242,145, 79,125,234, 29,111,127,199,
+ 9, 55,146, 82, 50,243,203,179,230, 70,172,184, 34, 66,205, 84,205,114, 81, 6,211,245,122,117,124,180, 15,224, 13,111,248,238,
+127,251,111,127,250,196, 11,193, 6, 45,240,195,144, 74, 16,208,163,163,195,163,195,253,190, 95,139, 64, 40,164,187,245, 64,193,
+102,179,254,177, 31,255,137,183,188,249, 77,254,131, 82, 67,159,170,170,154,154,154,169,153,234,106,181,124,226,137,199,158,120,
+252, 83,171,213, 49, 96, 52,154,187, 78,165, 65, 53, 91, 78, 41,245,253, 79,254,228,191, 42, 47,148,115,206,154,151,171,254,177,
+171,203, 79, 93, 89, 93,219, 95,173,214,105,185, 92, 30, 30,238, 31,236, 63,169,154,203, 43,151,104,111,106,240,155, 81,131,154,
+109,250,205,235,191,235,187, 0,196,253,163,205,135, 63,185,186,182,223, 23, 9,129, 33,216,246,100,189, 51, 61,222,157,229,174,
+147, 96,245, 62,221, 66,104,102, 54,237,166, 33, 68,205, 25,102,183, 92,186,133, 32,159,253,194, 87,245,201,204, 64,122,104,163,
+105,210,116, 4, 61,158,117,118,121,111,186,119,174,235,162,132, 32, 20, 15, 7, 70,200,197,189,203,187,187,123,179,217,204,181,
+ 98, 50,157,134,173,139,207,133,142,111, 13,150, 55, 57,173, 82, 90,167,100,139,117, 78,217,102, 83, 17,161,187, 30, 82,118,118,
+247,118,182,207,199,174, 67,121,107,154, 89,216,189,244, 37,224,240, 66, 0, 52,111, 52,175, 97, 73, 13,170,232,123, 75,201,166,
+ 19, 6, 97, 55,153,237,236, 92,216,222,222,237,186, 41,221,175,161,120,233,168,150, 9, 18, 6, 35,196,212, 8,203, 48,117,185,
+168, 98,181,201, 87,111, 88,136,188,227,214,249,124,190, 59,159,239,198,216,153,153,230,108,180,162,199, 72,226,127, 55, 43, 82,
+100,121, 5, 83,115,241,154, 1, 73,229,177,235,241,198,106, 7, 97,215, 32,174, 38,110, 84,174, 54, 89, 53,108, 95,186,215,204,
+ 64,180, 67,153, 37,211, 30,214,251,199,165,196, 56, 57, 23,167, 23, 14, 22, 56, 94,230,173,169,196,224,138,239,185,101, 49,252,
+176,125,241, 30, 10,171, 5,187, 68,179,229,100,218,131, 6,137,113,122, 33,118, 59,238, 49,151, 43,125,226, 70,191,233,181,139,
+ 18, 99,253, 57, 18, 64,216,222,187,199, 64, 88,245,218,126, 12,235, 53,247, 68,232,166, 23, 99, 55, 7, 64, 63, 54,152,178,222,
+ 56,200, 87,246,211,254, 97,218, 36,155, 77, 36, 6,130,228,229,187,191, 14, 52, 64, 92,145, 0,168,169,229,149,230, 85, 8, 91,
+ 97,178, 3,243,200, 34,116, 83, 20, 1, 64,136,251,137, 16,194,206, 60,238,157,159, 68,131, 2, 32, 20, 38, 74, 16, 20,138,197,
+185,196, 57, 0, 83, 37,197,220,201,131, 52,117,213, 53, 40, 77, 0,168,234,193, 81, 62, 90,172, 34,252,194, 0, 82, 93,116,234,
+206, 17,254,179,240, 24, 97, 6, 8,138,242, 25, 65, 51, 49, 33, 97,128,152, 2, 98, 80,131,129,110, 81, 30,128, 64, 53,152, 42,
+ 97,102,132,169, 41, 96,102, 10,183, 94, 42, 0, 42,172,184, 11,163, 65,204,220,166,213,181, 71, 21, 6,117, 93,167,169,191, 65,
+ 61, 70, 61,188,186, 25,152, 7, 86,162,158,225, 11,143,207, 61,206,182,199,221,119,223,243,130, 23,188,224,174,123,238,217,187,
+120,113,120,214,138, 21,208,147,231,242,135,236,239,239, 63,252,240,135,254,248,143,223,247,209,143,126,244,243,115,160,157,157,
+157, 87,191,250, 53,183,223,126,135,170,171, 66,181,187,146,163,214, 28,190,184,246,147,153, 52,107, 24,243,224, 76, 1, 17,187,
+238, 87,126,233,151,222,243,158,223,255,236,149,131,175,124,229, 43, 95,240,130,251, 84,155,111, 43,126,243,212,145, 73, 14,135,
+104,121,253,233, 35,121,193, 49, 28,171, 30, 84, 72, 30, 29, 31,188,227,231,223,254,169, 71, 31,125,250, 3,197,123,238,125,238,
+122,189,169,242, 56,227,131,176, 21, 55,224,169,211,248,239,106,158, 16,231,145, 32,199,151,139, 77,191,134, 97,113,124,240,245,
+ 95,255, 85, 34, 18, 66,252,249,183,255,226,102,179, 57,251, 64, 57,245, 54,184,196,155, 79, 67, 59,113,160,225, 61, 77,117,181,
+ 94,209,108,185, 90,192, 52,231,100,128,251,156,147,146,132,102,165, 32,229, 76,119,200,228, 63,255,103,223,121,219,237,207,124,
+219,219,126,238,163, 31,249,200,233, 3,165,156,113,230, 5,123,117,201,146,254, 85,233,144, 64,214,212,111,214,170,118,124,124,
+ 3,176,126,189, 6, 45,171,150, 27, 4, 41,116, 47, 12, 65,147,168, 3, 20, 66, 24,209,167,180, 89,175,191,237,219,190,125, 50,
+153,188,245,223,255,187, 79,124,226, 19, 99, 9,165,145,128,203,209, 82, 66,141,231,136, 65, 64, 68, 33, 3,161,166,170,125,191,
+ 57, 60,218, 55,213,213,242,184, 28, 91, 44, 80,204,143,238, 17,194,107, 26,128, 6,119,133,132, 66,145, 9,146,170, 57,165, 20,
+ 66,232, 55,155,239,248,206,127, 58,233, 38,111,124, 99,201, 71,195, 11,255,198,253,170,214, 39,221, 36,221,108,244,120,173,203,
+101,190,126,208, 31, 46,210,193, 81, 58, 92,228,245, 70,151, 43,205, 89, 83,178,229,114,185, 88, 28, 47,150,199,199,135, 55,250,
+126, 77,247,210, 36, 13,131,246,148,130, 71, 74,148, 40,206,216, 96, 6, 26, 41,100,216,218,154,207,231,187,168, 21, 85,214,252,
+ 53, 95,253,181,143, 62,250,232,213,171, 87,227,254, 65,111,176,171,251,233,224, 40,173,122, 61, 90,100,215, 0,207,145, 76, 64,
+ 35, 97,164, 81, 48,239,214,211,176,232,130,237,108,169,144, 93, 4,141, 66,205,164, 24, 40,174, 57, 57, 83, 40,153, 86,194,154,
+ 43,183,107,232,116,107,218,197, 78, 36,230,156,139, 73,154,170,138,137,125,203,183,188,246,183,126,235,157,188,253,249,127,191,
+ 0, 73, 45,125, 48, 88,253,218,127, 55,131,105,111,200,154,150,154,142,168, 8,193, 66,228,229, 11, 19, 9,184,176, 19, 67, 16,
+207, 7, 75,129,192, 98,145, 85,106,234,233, 54,192, 75,151,110,155,205,183,187, 48,137,147, 78,232, 85, 63,165,184, 46, 82,196,
+195, 52,192, 10, 62,152, 14,198, 93, 84,138,102, 80,237, 97,201,114,175, 57, 19,200, 25, 84,124,242,202,138,228,245,237, 20, 4,
+183, 94,156,204,166,161, 11,140,209,212,207, 82,171, 81, 9,145,192,133, 11,151, 67,236,182,230,243, 46, 78,220,244,140, 86,139,
+ 11,210, 74, 82, 17,225, 32,141,177, 20,196, 6, 19,181,114,101, 16, 53, 43,135, 75,166,217, 44,155,103,207, 67,213,163, 55,142,
+148,144,163,229,138,228,173, 23,194,185,237,216, 69,153, 77, 69, 66,156,109,109, 7, 9,231,207, 95,132,132, 73, 55,113,148, 69,
+ 53,123,130, 87,124,166, 59, 93, 7,229,204, 98,205, 58, 0,194, 76,233,246, 9,165,167, 34,238,249,172,164,128, 48,133,105, 67,
+113, 12,106, 74, 35, 0,219,244, 70,216,163, 87,249,233, 39,243,185,221,217, 23,223,177, 55, 13,241,210,165,115, 82,252,181,223,
+187, 17,158, 83, 9,104, 2, 81,201,238,235, 8, 87, 71,139,106,198, 82, 49,144, 6, 64, 1,194,104,132, 65, 9,210,138, 56, 4,
+ 80,212,162, 18, 48,119,208, 48, 32, 24, 16, 39,219,100, 23,186,153,200,116,149,249,240,159,231, 73,167, 87,247, 15,186,192,103,
+221,185, 21, 3,183,103, 49,136, 91,137,144, 25, 20, 32, 23,171, 17, 50, 27, 73, 19, 70,154,129, 6,243, 63, 72,245,211,162, 36,
+205,214, 12,132,174,149,205,103,185,156,140,140,221, 46, 37, 72,152,129, 1,144, 90,197,202,166,183, 43,215,214, 32,159, 60,236,
+133,124,198,165,105,215,241,150, 11,147,173, 89, 8, 34, 93, 52,165, 16, 25, 32,115, 1,116,169, 18, 13,217,113, 14,154,231,176,
+ 52,135,104, 64, 63,160, 43, 22, 64, 32,208, 61,139, 39,235, 12,113,114, 14,160,196, 45,178, 0,142,128,154,137, 25,200,236,181,
+ 5,137,227,165, 2, 92,109,148,130, 71,159,216,196,200,249, 44,238,206,195,108, 18, 46, 93,232,130,112, 58, 9,172,128, 78,244,
+252,213,111,169,164,242,158,124,150,183, 54, 43, 14,152,100, 48, 6, 50, 16,100,152,128,194, 48,243,234,181, 8,206,212, 32, 69,
+201, 40,102, 74,192, 76, 52,171, 9,117, 3, 2,125,223,147, 60, 60, 74, 87,163,196,192, 79, 62, 30, 2,185, 53, 13, 34,178,179,
+ 21, 36,136,227,220, 70,144, 74, 82,161,180,146,197,147,160,169,185,144,204,225,242, 48,145, 2,107, 68,192, 11,117,199,219, 13,
+102, 38,198,146, 39,139,169, 74, 41,110,212,115,119, 64, 13,200, 42, 52,205, 89,176, 81,128, 56,206, 2,116, 93, 32, 57,155,134,
+ 32, 18, 1, 37, 8, 83, 3,205, 28, 83, 20,210, 33,165, 90,144,152,177,212,201, 49,196, 56,132,114, 58,190, 92, 82,124,175,111,
+ 77,188,238,134, 9,189,150,160,136,153,193, 43, 33,115, 37,181, 82,123, 41, 84,176,217,100,138,108,122, 3, 24,171, 62, 59, 94,
+230,154,163, 53, 71, 5, 93,227, 73,192,140,213,190, 74,154, 66,248, 85,187, 93,152, 73,173, 90,180,124, 72, 35, 68, 75,213, 33,
+ 4, 84,181, 72, 20, 6, 8, 90,236,117,191, 8,152, 32,194, 97, 57,161, 65, 13, 66, 85, 14,153,140,105, 1, 17,139, 51, 45,209,
+179,152,157, 21, 71, 97, 14,229, 73,209,245, 2,201, 58,216,231,181, 26,172,188, 82,195, 83, 8,168,145,132,192,204,160,132,152,
+120,153,230,142, 72, 13,102,165,128,242,144, 97, 54, 88, 62, 12, 90,224,147, 82,183, 87,112,165,249, 59,152,194,204,189, 40, 74,
+196,129,154,122, 40,227,144,251,169,105, 77, 79, 75,190, 99,229,142,236,140, 12,241, 11,143, 47, 60, 62,223,149,235,144,123,119,
+113,190, 53,159, 76, 38,179,217, 86,215,117, 40,169,119,191, 90,173,215,235,213,241,241,113,246,174,199, 95,233,129,186,174,251,
+242, 47,191,255,121,207,127,254,179,190,248, 89, 33,134, 33,170, 74,177, 51, 74, 75,244,196,204, 62,246,177,143,253,233, 7,222,
+255,222,247,190,247,169,106,174,191,248,129,190,225,239,189,242,190,251,238,235, 98,103, 13,129, 28,154, 62, 56, 85, 57,182,218,
+ 20, 64, 8,129,194,205,102,243,135,127,240, 7,191,254,235,191,246,151, 58, 80,140,241,190,251,238,123,197, 43,190,193, 90,238,
+106, 13,198, 28, 74,250,113,133,127,178,178, 63, 89,218,147, 34,114,112,112,240, 51, 63,253, 83,199,199,199,159,219,129,246,246,
+246, 94,241,138, 87,220,113,199, 23, 57,102, 52,202,166, 71,223, 52, 78,250, 71,191, 63,229,153, 60, 59, 5, 66, 12,143, 95,185,
+242,142,183,191,253,201, 39,159,252,172, 14,244,250,215,191,126,107,107,187,186,207,211, 21,254, 80,201, 15, 69,244, 88, 74,165,
+176,101, 43, 52, 6,128, 97,124,153, 52,211,247,191,255,143,255,243, 47,254,151,207,220, 28,255, 91,127,251,239, 56,205, 32, 91,
+ 46,206,188, 4,132,246, 69, 57,161,150, 72, 82,190, 40,201,180, 22, 44,184,150,186,214,202,191, 22, 28, 76, 45,107,222,221,221,
+249,187, 47,127,249,123,222,243,222,190,239,159,206,156,115,206,168,239,170,103,222,104,189, 26, 16, 58,214,106,117, 12,209,144,
+203, 79,183, 98,166, 97, 23, 4,115,238, 53,231, 62,245,171,229,145,136,188,246, 91,254,193,251,254,228, 3,255,251,119,223,243,
+148, 7, 82,213, 82,210, 84,244,100,132,148,161,181, 11,198, 79,181, 98, 84,138, 12,212, 10, 98,139,122, 32, 35,232, 97, 54,165,
+ 77,206, 57,165,141,119,132,131,132,251,158,255,156,251,191,252,193,183,190,245,173,103, 31,200, 84,173,189, 3, 78,188, 57, 74,
+ 34,101, 60,229, 29, 12, 6,219,108,214,170, 57,165,126,211,175,160,200,185,247, 62,210, 32, 81,135,146,203,245,121, 6,168, 25,
+ 96,230,237,183,223,241,163, 63,250, 99, 63,242, 35,111, 57, 67,135, 30,124,232,161,210,213,189,249, 81, 83, 49,107, 45, 49, 43,
+127, 0,214,247,155,190,223,244,155,245,106,121,220,167,126,189, 90,244,169,207,253, 38,165, 62,165, 62,245,125,206,125,202, 73,
+ 53,101,205,170,234,181, 33, 76, 73, 57,127,225,146,132,240, 85, 47,127,249,111,190,243,157,167, 14, 36, 86, 26, 83, 79,251,240,
+ 62,159, 55, 38, 76, 87,171,197, 98,113,188, 56, 62, 92, 44, 14, 87,171,227,148,250,156, 54,181, 32,168, 72, 18,107,254,102, 69,
+208,234,141,152,210, 5, 83,181, 44, 34, 63,244,195,111,186,233, 64, 79,117,158,145, 84,218,239,222, 81, 89,173, 22,139,197,225,
+241,241,193,241,225,193,114,185, 72,169,215,148,172,228,223, 94,209, 54,207,224,105,185,231,141,197,124,161,154, 53,107, 86, 83,
+221,221,217,253, 39,223,241,157, 39, 14,164,163, 71,206, 57,105, 94,111,242,106,157, 87,235,180, 92,165,213, 58,111,122, 77,125,
+246,118,141, 95, 71,191,217,244,125,159, 93,249, 92,130,172, 55,233, 57,235,200, 4, 0, 40,157,110, 82,212, 95,189, 79,164,170,
+166, 89,243, 93,207,190,235,193, 7, 31, 26, 41,245,224, 5,173, 79,102,192,241, 66,147,186,241, 49, 6, 76,167, 33, 10,119,230,
+ 69, 54,102,118,188, 56,202,253,166,246,193, 73, 79,125,197, 85, 4, 70,165,133,102,143,230,101,121, 33, 16,121,230,239,137,186,
+152,154, 65, 85,240, 77,175,122,213, 7, 62,240,126,239, 58, 75,202,154,178, 46, 55,121,185,210,227, 85, 94, 44,243,114,147, 87,
+ 43, 93,173,117,181,214,229, 70,253,249,163, 69, 62, 94,230,229,186, 95,173,122,205, 57, 59, 73,234,148,242, 23,199, 88, 59, 26,
+ 44,252, 9,165, 26,189, 64, 1, 40, 94, 67,186, 29,169,170,169,166,148,190,247,251,222, 80, 36,116,180, 76, 41,217, 39, 30, 91,
+171, 98,255,160, 79, 58,114,136, 3, 2,108, 65, 24,196,206, 77,111,144,182, 59, 75, 49, 32,136, 65,164, 40,139, 95, 88,105,185,
+153, 23, 77,163, 58,165,116, 46,133,152, 78,102, 33, 68,215, 69,136, 42,196, 84,131,200,116, 58,125,232,161, 23,255,254,239,255,
+158,244,189,246, 73,115,182,156,115,182,210,222, 49, 53,243, 30,177,153,170,230,108, 41,231,148,115,202,154, 82, 78,201, 59,200,
+197, 90,220, 40,180, 89,128,169, 57,225, 73,213, 76, 77, 21,106,229,127,102,206,149,169,109,196, 34, 33, 39, 90,125,227, 55,125,
+ 19,201,176,138,247, 92,121,114,115,188,204,203,181,170, 14,209,179, 84, 79, 69, 71, 77,211, 38,167,116,116,116,120,184,232, 15,
+142,250,235,135,125,159, 44,101,168, 33, 70, 2, 38,213, 65, 27, 73,115, 99,167,177,148,180,254,186, 49, 78,246,246, 46, 79,167,
+ 91,177,155,148,206,126,253,207, 93,231,185,243,231,226,186,207, 67,139,209, 59,111,170, 53,152, 27,232, 93, 54, 85, 40, 96, 89,
+189, 61,150,161, 76,217,146, 90,116,175, 33, 98,170, 16, 41,109,186,234,250,135,176, 54, 70,190,107, 87, 25, 10, 80, 33,180, 90,
+ 46, 62,244,208,139, 35,172, 6, 13,162,178, 92, 28,208, 45,202, 80,162, 89,238,173,122,183,156, 13,176,235, 71,233,112,145,167,
+ 19,153,111,133, 73,148,189,115,157, 72,238,162, 0, 66, 81,103, 18,168,145, 34,130, 16, 39,147,237,237,243, 33, 74, 23,167, 20,
+154,153, 66,133, 98, 6, 42, 76, 44,168, 42, 37,231, 28,221,149,218, 0,234,213, 19,176,160,105,170,214, 28,138,215,178,106, 32,
+153,179,165, 4, 51, 21,161, 41, 84,213,192, 88,128,231,194,172,169, 52, 27, 35,165,139, 29,131, 20, 27,240, 20, 70,181,128,163,
+ 10, 21, 33,148,202, 88,238,215, 51,139,226, 50, 10,173,168,118, 20,212,212, 84, 51,161,222,166,108,136, 27, 96, 73,101,185,204,
+155, 94, 97, 22,130,220,114, 33,138,232,164, 19, 33, 66, 55,149, 16,166,147,233,100, 58,141,177,235,186,137,247,233,139,228, 71,
+222,147, 98,166, 10,210,200, 88, 62,112, 21,145, 35, 25, 90,146, 26,163, 86, 28,196,109, 7, 86, 20, 76, 74,114,146,179,230, 76,
+ 73,200,201, 98,148,221,109,134, 32, 49, 16, 98, 34, 33,134, 56,157,206,102, 91,115, 9, 49,132,206,109,197, 12, 3,202,143,138,
+186, 85, 15, 22, 75,114, 80, 2,143,185,167,117, 59,243,147,213,204,164,178,104,232, 6,225, 48,178,121,184, 50, 32,169, 33,235,
+193,177, 5,177,201,100,218, 65,186,110, 54,153,198, 16, 39,164,180, 28,210,175, 73, 65,250, 29,176, 52,150, 64, 82, 68, 85,163,
+195, 20,238,242,109,232, 90,148,124,117, 4,143,149,220,159, 69,203,204,163,148, 73,177,166,148, 45,171, 92,121,210, 36,216,124,
+119,123,198,110,178,181,179,187, 61,105,173, 63, 43, 25,112,133,154,236, 84,138, 85,194, 98,244, 86,123, 49,251,130, 46, 57, 28,
+ 4, 20, 96,184, 41,124,137,148, 37,179,246,100,223, 81,100, 37, 37,128,132,116, 0, 55,189, 1,186, 88,102, 50,117, 81, 98, 16,
+ 10, 66, 16,199,167,228,228, 57,164,250, 33,168, 26, 16,182, 47,222,235,167, 41,168,221,128, 51,149,110, 89,209,156,156, 8, 51,
+221, 20, 12,205,125,131,153, 9,205, 2, 67,140,221, 78, 8,179, 48,185, 16,186,249,209,138, 55,142,177,218,216,245,131,164, 64,
+ 23,104,134, 24, 71,117,222,144, 13, 55,216,190,184,172,200, 26,107,104,234, 94,168,224,207,165,180, 80,191,198,147, 34, 46,181,
+172,214, 46, 93, 5,246, 89,200,136, 6,210,146, 90,200,218,247,186, 73,106,134, 24, 64, 50, 6, 41,114,161, 71,126,150, 70, 79,
+109, 85, 68, 24, 80,212,152, 21,154,244,238,159,129,229, 96,128,161, 49,107,134, 79, 38, 0, 25,166,161,155,147, 65,194,204,251,
+ 1,110,191, 0,111, 28, 38, 18, 55,142,243, 35,143,175,183,102,225,214, 11, 93, 23,229,182, 75, 83, 33, 38, 29,160, 82,216, 34,
+163,222, 42, 85,227,168, 42,116,228, 77,224, 8, 93, 9, 53, 90,222, 94, 91, 19,173,116,141,108, 40, 64, 74, 78, 38,226,101,144,
+194, 68, 77, 33, 66,101,206,218,147, 93,210,148,140, 44,212,238,172, 38,204, 34,193, 53,221, 9, 83, 6, 1, 25, 43, 19,209, 28,
+ 52,117,191,103,128, 41,189,207, 80,216,142, 18,172, 0,134, 2,168, 25,165,219, 10, 97, 66,233, 36, 76, 28, 59, 47,184,185, 89,
+233,166,152, 26, 36,101,100, 77,155, 94,142, 87, 57, 80,174, 92,219,136,112,239,124, 23, 69,110,189, 56,153, 76,164,139,140, 17,
+ 10, 17, 24,204, 98,237, 7,120,199, 70, 81,253, 17,233,129,195, 74,131,165, 68,101, 66,212,212,137,175, 2, 4, 80, 0, 97, 41,
+201,234,229, 23, 66, 86,193, 10, 12,164,234, 70,133, 33,131, 22, 68,182,183, 66, 10,150, 85, 53,195, 66, 48, 71, 75, 33,106, 22,
+253, 58,200,250, 7,128, 18, 98,138, 35, 42,213, 42, 2,224,228, 29,132,174,115,237,161,116, 14,210,151,238,120,137,245,226,170,
+167, 21, 42,134,249, 79,170,101, 89,109, 84, 96, 87,174,109, 72, 92, 63,232, 37,200,108, 18, 98,224,180, 11,179,105,160, 72,172,
+221,204, 18,159,209,174, 73,173,114, 8,172,194,238, 98,142, 85, 49, 18, 66,241, 70, 64, 45,120, 61,242, 40, 32,234,201, 66, 85,
+112,146,160,154, 10, 5,170,137, 42,214, 47, 65, 98,177, 84, 35,102,211, 16,133, 91,179,184,189,101, 36,107,146, 95,187,101,254,
+214,197, 9, 1,254,146,168,206, 53,196,153,153,137, 68, 80, 96,206,127, 45, 4,176,138,202,211,207, 84, 58, 93, 34, 21,157, 32,
+213, 91,159,134, 10,194,187, 57,166,100, 38,208,117,206, 10, 80,226, 0,141,183,110,180, 86,176,190, 52, 56,172,250,126, 65,156,
+143,252, 44,213, 40,254,207,240, 55, 42,184,189,123,141,250,143,165,250, 48, 72,197, 34, 90,143,217, 64,246, 73, 19, 5, 73,151,
+ 75,163,235, 68,105,104,106, 49,110,107, 25,172,213,132,163,245,228,189, 56, 66,189, 8,170, 19, 4, 10, 75,170,130,144, 5, 16,
+168, 12,170, 18,104,104,126, 98,115,112,191, 86, 43, 85,196,158, 45,187,216,235, 7,246,126, 71, 97,199, 83, 49,120, 4, 85,168,
+194,188,101, 91,188,144, 90,105,129, 59, 11,185, 86, 66,165,243,226,113,177,114,100,157,191, 86,238,222,106, 91,181,254,179,211,
+203,104, 48,131, 24, 27,104,230,178, 54, 40,209,186, 17, 80,127,227, 70,191,134,169, 22, 12,214,160, 90,162,110,173,131,202,109,
+213,198, 59,171, 56, 74,148,168,138, 86,186,203,238, 43, 60,208,212,116,208,115, 56, 85,191,142, 98, 49, 6,173,147, 42,158,234,
+ 99, 84,202, 12, 34,242, 55,107,152,164, 55,156, 61, 4, 22, 63,235,180, 15, 45,122,228,255,236,205, 37,171, 61,154,194, 15,241,
+215, 80,170,212, 20,214,180, 6, 56,171,164,191, 66,203,107, 88, 17, 91,113,236, 50, 98, 97,232,149,240,161, 69, 8, 77, 70, 46,
+ 96,231, 13,250,164, 8, 77,181,181,149, 13,149,183, 7,215,213,210,139,244,159,116,241,186, 29,107, 59,132,149,119,245,154,165,
+ 53,158,234,148, 2,155, 43,174,196, 88, 69,173,226, 27, 99,194,179,205,130,239,150,246, 26,106,127,175, 96,118,197, 27,148,206,
+183,150,198,152,186,173, 56,180, 84,187, 87,172,140, 2,165, 58,112, 97,229,230,138,168,170, 19,242,207,226, 95,184,189, 20,200,
+131, 86,111,184,120,160, 82,120, 21,229, 29,131,115, 95,104,152,125,225,241,133,199, 23, 30,127, 93,250,173, 79,247, 18,228,206,
+238,238,185,221,221,237,237,157,243, 23,206,239, 93,220, 59,127,225,194,249,115,231,230,219, 59,219,219, 91,147,201,212,123, 84,
+163, 78,206,137,166, 69, 74,105,185, 92, 28, 28, 30, 28, 30, 30, 61,254,248,149,163,195,163, 27, 7, 55, 14, 15, 14,246,247,247,
+ 15, 15, 15,255,250, 9,104, 62,159,223,251,156,231,222,121,231,157,183, 93,190,124,254,252,133,249,246, 60,198, 8,195,153, 14,
+255, 38,158,238,184, 83,138,113, 59,176,205, 54,157,226, 67,167,148, 22,199,139, 27, 7, 55, 30,125,244, 83, 15,127,232, 67, 31,
+126,248,225,244,121,234,124,127,222, 4,116,249,242,229,251, 31,120,224, 75,191,244,133,211,233,196,108,200, 42, 62,243,235,150,
+148, 14, 35, 92,170,124, 73,207,170, 75,203,180, 76,203,181,102,233,184,161, 91,102, 57, 11, 65,211,107, 3, 17,145, 79,126,242,
+ 19,191,249,206,119,126,240,131,127,170,170,255, 79, 5,180,179,179,115,219,109,183,125,217,151,189,240,222,123,159,227,136,142,
+181,198,240, 8,219, 61, 37, 35,158,169, 52, 3,139,245, 4,226,204,147, 13,247,167,252,253,228,212, 92,153,117,229,208,137,110,
+189,248,235,215,175,255,175,255,249, 91, 31,252,224, 7,175, 93,187,246, 87, 34,160,203,151, 47,223,119,223,125,119,221,117,215,
+229,219,110,203,185,244,112, 79, 10,197,128,167, 83, 27,142, 29,210,200,211,140,159, 63,225,124,112, 6,173,255, 76, 50,192,103,
+122,178,148,156, 62,116, 8,224,227, 31,255,248,123,126,239,247,254,232,125,127,148, 70,252,240,191,148,128,222,252,230, 55,175,
+ 55,253,208, 80, 29,218,210, 56, 73,178,248,140,114, 62,249,105, 79, 61,121,198,183,157,162,109, 60,141, 42,157,162, 46,140,205,
+112,160, 71,147, 2, 88,206,185,239, 55,106,121,179,222,188,251,119,126,231, 93,191,253,174,191,164,128,226,114,181,110,132, 19,
+107, 4,183, 51,164,114,147,231, 25,211,100, 78,202,101,244,228,205,170,116,218, 8,135,230, 59,201,167,242,228,229, 75, 27,143,
+ 75,212,185,142, 74,220, 35, 8,164,156,250,205,202,137,174, 47,121,241,131, 95,249,178,151,110, 82,254,111,191,246,235, 31,251,
+248,159,253,197,230,159,248,221,223,243,189,167,181,230,236, 41,147, 17,147,225, 84,144,191, 73, 59,134, 79,202,225,199,198, 82,
+ 27,249,159, 50, 8, 88,205,208, 55, 73,148, 34,185,146, 14, 7,214,123, 67,243, 75, 49, 69,192,144,114,159,115, 25,123, 77,105,
+179, 90, 45, 85,115,109,210, 23, 40, 36,198,201,227, 79, 60,249,174,119,253,238,103,201,204, 57,139, 94,241, 20,114,121, 58, 27,
+ 59,217, 21, 96, 3,173,237,102, 64,124,120,214, 12,102,185,201,218,187,242,195,208,167,102,171, 20, 81, 59,113, 13, 86,181,198,
+ 26, 17,167,148,232, 57,103, 77,254, 94, 41,101,243,109, 20,142, 6, 9,235,108,110,127,239,189,247,188,248, 37, 47, 91, 44, 86,
+191,242,203,255,245,195, 31,254,240,103, 43,160,220,112,142,209,135,188,233, 83,219,205, 9, 78, 97,197,214,118,106, 67,252, 43,
+137, 97,148, 13, 12,227, 59,116, 2, 81,191, 89,215,113,104, 75,155,126,211, 47,221, 40,204, 52,165,100,170, 30,220,235, 11, 23,
+104,119, 0,194, 90,135,150,133,250,221,158, 47,120,102,245, 81,150,181,204,229, 43,114,234, 83,159,230, 91,179,215,189,238, 31,
+171,217, 59,222,254,243, 31,249,200,103, 22, 83,120,232,193,135,198, 30,185,182,141,219, 95, 11, 94,114,182, 79, 58,233,187, 78,
+244,150,110,250,110,181,236,154,162,170, 41,245, 57, 39,231,224,100, 77,169,239,205,137, 13,166,166,185, 54, 25,173, 32,123,214,
+ 58,198,229,157, 88,249,201,142, 21,186, 40, 71,125, 46, 14,115,192, 21,178, 35, 57,157,205,103,179, 57,189, 97, 64,188,232, 69,
+ 47,250,138,151,189,236,241,199, 31,191,122,245,234,211,154,216, 32,157,177,147, 57, 67,101,112,211,224, 89, 81,147,122,183,214,
+134,172, 91, 71,174, 78,221,166,148, 86,203, 69,214,228, 70,180, 94, 45,251,212,143, 62, 67,105,234, 12,109, 49,171,127, 71,155,
+141,224, 48,113, 2, 14,237,151,202,231,104,209,176,142,204, 54, 85,243,142,159,228,172, 57,103, 74,242,252,201, 84,167,211,217,
+183,127,251,235, 30,253,244,163,191,248,159,254,227, 83,229, 80,225, 69, 15, 62,104, 67,219,204, 6,131, 58,245,213, 64, 42,106,
+195, 88, 54, 16, 28, 9,220, 12, 55,161, 82,141, 96, 57,231, 77, 95,204, 74, 53,247,105,147, 83,178,156,180,145,146,234, 59, 13,
+241,172, 72,187, 54,199,198,147,118,104,185,119,195,223,218,186, 11,107, 83, 30,222,178,110,175, 51,155,109, 77,103, 91,172, 80,
+186, 39, 9,166,186,187,123,238,111,126,229, 87,238,108,239,126,232, 67, 31,124, 10, 82,222,153,246, 83, 88,240, 0,144, 21,155,
+164, 41, 21, 61, 41,207, 19, 4,131, 48,198, 50,121, 45,228,100,194, 40,240,214, 95,214,228,211,124, 6, 75,253,230,248,248, 32,
+167,228, 77, 43,159, 84,246,177,140, 54, 19, 80,167,145, 41,133,129, 81, 71,126,106, 95, 14,173,229,237,221, 41,214,189, 69, 99,
+229, 47, 6,111,165, 69,238,157,198,210,189,102, 21,110, 67,214, 21,164,115,187, 30,122,232,161, 23,191,248,197, 63,251,179, 63,
+253,216, 99,143,157,208,160, 7, 30,120,224,204,184,165, 86,104, 53,222, 28, 94,111,156,192, 99,217, 44,171, 37,181,236, 99,217,
+ 53,135,242,197, 65,177, 16, 75,225,154,146, 82, 82,205,166,154, 82,191,217,172, 82, 74, 78, 52,187,169, 45, 62,244, 19,134, 68,
+185,229, 14,194, 34, 76, 54, 22,155,149, 14, 94,165,216,121,239,230,164, 7, 96,235, 23,121,143,102, 54,155,205,102,115, 9,129,
+227, 54,252,201,168,251,210,151,124,197,214,124,238, 75,117,138, 6, 45,150,165, 56,206,106, 78, 25,114,117, 79,201, 86,107,109,
+248,114,206,245,158,236, 36,133,153, 20, 25,162, 74,136,136, 82, 92, 65,224, 38, 96,229, 19,234,194, 44,236,137, 66,246,145,106,
+ 34,141, 71,132,218,112, 30,114,159,218,112,176,210,108,211, 34, 35, 43,170, 69,234,137,173, 16,198,118, 58,231, 38,128, 78,237,
+ 8, 52,250,190, 18,111,162,180,229, 93,222,254,201,149, 58,172,128,137,189,236, 43, 94,118,235, 45,183,254,234,175,254,178,131,
+ 45,252,135,255,232,117,238,229, 82,182, 39, 15,250,195, 99, 39, 40, 97,157,108,177,204, 89,111,170,183,104, 24, 57,136,177,168,
+124,219, 16,171, 8,102,113, 61,141, 75,239,125,119,157,206, 58,141,129, 6, 10, 45,212,170,211, 61,139,180,121, 94,231,208,183,
+225,202, 90,240,139,247,244,217,232, 21, 53,226,143,146, 16,182, 73,204,114,169, 20,145,110, 50,141, 93, 7, 80, 36,204,183,119,
+118,118,206,135, 80, 22,249,248, 40,249,184,124,145, 90,195,132, 16,247,247,175,191,237,109, 63,119,253,250,245,112,241, 25,207,
+ 59, 90,232,209, 34, 29, 45,242,225, 34, 47,215,218,103, 75, 89,251,100, 73,235, 88, 15,203,252, 81,201,186, 74, 96, 45,189,165,
+ 54, 42, 10, 51, 88,174, 52,210,172,186, 73,253,122,211,235, 58,233,102,147,251,222, 86,155,188, 90,231,245,198,114,134, 26, 83,
+182,148, 75, 43,164, 54, 92, 70, 41,235,104,178,182,246, 0, 57,166, 89,141, 99, 72, 9,150,108, 61, 50,248, 44,192,116,186,213,
+117,179, 46,118, 49,118,221,100,218,197,174,198,183, 49,157,119,168,174, 42, 59,201,182,182,182, 94,242,210,151,254,159, 63,252,
+ 67,222,254,188,111, 60,153, 20,242,140, 44,154,103, 20, 10,133, 9, 83, 90,159,165, 76, 48, 75,230,125, 26,168,229, 85, 78,139,
+210,236, 5, 68,124, 2,203,130,112,119, 30,183,102,190,169,137,211, 78,230,211,224, 11,154, 8, 12, 12,254, 86,169,114,112, 64,
+ 28, 0, 56,142,248,211, 99,118, 62, 43,193, 0,177,155,158, 59,127,113,182, 53,247,215, 8, 33,198,216,113,132, 46,157,168,139,
+ 27,113,191,254, 93,130, 88, 46, 20,134, 83,217,206,105,174,204, 80, 80, 85, 70, 41,107, 28, 41,173,204, 50,129,229, 61, 92, 45,
+ 52,211, 18, 6,149,163,222,157,194,104,232,147,114, 35,244,241,114, 3, 5,146, 72, 66, 68,186, 0, 9,174,176, 44,202, 91,134,
+ 88, 43, 65,180,106, 21,199,203, 26, 90,106, 22, 66, 8,209, 63,119,140, 65, 68,198, 48,220,160,164,214, 26,199,101, 99, 75,123,
+179, 86,236,169, 65,130, 68, 29,248,179, 68, 27, 61,174,147,105, 45,189, 40,116,130,214,129, 71, 69,141, 70, 30,219, 0,179,100,
+ 57,121,232, 51,205, 80,245,238,182,150,249, 65,128,200, 89, 55,125,227, 86,114,218,137,239,215, 1, 56,157,240,252, 78,156, 78,
+202,254,165, 24, 24, 66,165,204,183, 66,195,117, 73, 91,134,234, 35, 25,206,167, 99, 55,153,110,207,119, 67,236, 0, 4,145,110,
+ 50,235, 98, 7, 97,211,250,230,250,219,248,160, 21,174,104,193, 57,171,103, 36,161,200,136, 44, 62,224,116,217, 62,106,163,150,
+176,223, 76,105,156,114, 87, 82, 29, 6,250,249,169,100,124, 88,137,163,176,177,204,107, 46, 83, 10,120, 56,249, 49, 37,245, 19,
+ 74, 9,252,195, 50, 6, 97,229,183,177,106,119,179, 16, 9,213, 64,130, 13,153, 55, 1,100, 83, 81, 49,158,154,104,224,224,115,
+198,169, 70, 41, 98,138,235, 85, 65, 28,146,230,209, 90,145,162, 74, 28, 18, 10, 29,193, 55,101, 68,120,216, 13, 96,149,178,104,
+176,108,154,235,183,101, 95,115, 83,141,163,233,180, 85, 82,134, 1,232,147,245,169,124, 86, 89,234,225, 81, 18, 17, 0, 93,224,
+249,157,176, 61,151, 32, 4, 17, 69, 38,157,111, 56, 50, 50,196, 56,141, 93, 7, 51, 74,152,205,182, 38,147,153,255,148,136, 20,
+ 71,131, 33,223, 62, 11, 9,186, 9,188,113,181,104,160, 57, 64, 51, 1,163,142, 35,230, 80, 45,212,205, 19,149,164, 88,241,170,
+202, 45,168,212, 88, 84, 27, 30,202, 90,216, 56,247,178,182,152,201, 71,114, 96, 3,100,161, 99,158,134,170, 18,180, 76,154,102,
+146,137, 76,153, 57,211,156,241, 27,157,182, 89,230,122,106,249, 46,196,105,172,177, 14,177,148,185,187,129,114,125,210,186,134,
+ 95,101,171, 19, 91, 43,161, 60, 69,154,230, 72,197,192,164,241, 49,218,166, 44,134,182,231,207,160,117,241,233,104,107,134, 19,
+ 57, 72,140,135,109, 11,231,183, 20, 98, 3,185,184, 50, 67,202, 42,167,202, 37, 51,101, 11, 80,234,244,102,255,230, 44,125,226,
+245, 35, 95, 80,137,237,237,238,210,197,157,105,215,129,144, 16,182,118,183,182,166, 81, 68, 0, 19,183,175, 19,155, 45,218,144,
+210,184,194,182, 51,241,171, 86, 68,122,232, 25, 76,204, 51,105, 80, 79,227,238,202, 86, 60, 91, 27,193,106,204,151, 34,164, 34,
+ 72,112,204,169,172,249,200,104,129,153, 13,197,184, 97, 24,232, 42,124,153, 42,127,109,235,187, 42,165, 26,190, 13, 27,127,100,
+ 0, 0, 6,168, 73, 68, 65, 84, 83, 49,169,145,160,160,235,145, 85,178, 9, 12, 25, 1, 8, 33,132, 26,246,217, 34,202,160, 62,
+ 24,232,162, 84, 90,201,111,135,255, 78,116,175,120, 74,239,171, 39, 10, 33,142, 51, 50, 22, 54,138,157,200,205,134,233, 11, 45,
+108, 17,171,165, 48, 80, 11, 70, 22, 19,131,121,226,107, 3,134, 81,189, 92, 43,209, 43, 57,211,183, 69, 86,142,149, 7,200, 32,
+ 97,234, 91,110, 72,161, 76, 68, 58,215,138,222,194, 19,251,164, 40, 96, 93,135,131,227,213,108, 34,164,132,128,157,121,216,217,
+ 10, 33,148,233,195, 73,164, 72,169,244,205,156,146, 89, 56, 83, 78, 15,130, 54, 10,186, 63, 89, 76, 74, 68, 78, 12,200,145,200,
+ 57,150,211, 15, 8, 83,213,138, 22,125,216,128,136,193,247, 20,127,195, 22,165, 70,153,218, 0,198,140,111,200, 6, 37,172, 53,
+ 38, 43, 3,210,106, 18, 65, 8, 16, 40,177, 36,232,210, 65, 38, 14,155,102,195,114, 83, 56,221, 93,175,130,180,233, 5, 64,140,
+ 18, 2,166,157,111,164, 96,136,226, 0, 65,195,214, 84, 27,250, 93, 25,101, 62,219,224, 99, 75, 21,216, 6,219,234,166,209,220,
+ 34, 16,189,126, 57, 21, 4,213,172,114,191,136,182,242,246,100,118,196, 66, 39,116, 94, 86,225,215, 85, 99,149,145, 26,142, 75,
+185,241, 29,148,249, 32, 48,134,208,149,221, 72, 12, 18,166,100,168,109, 66,169, 11, 77,116, 32,152,155,101,197, 98,157,215, 73,
+ 9,138,228, 62,233,209, 34,251, 58,205,105, 39,219, 91,210, 5, 26, 17, 69,102, 83,233, 98,219,194,100, 82, 11,233,193, 16,111,
+238, 20,151, 6,110, 17,113,132,142, 14, 95,217,112,195, 84, 66,241, 29, 53,240, 17,163, 56,216,112,188, 97,190,211,134, 65,131,
+177, 71,215, 51, 2,107, 67,186,164, 99,152, 81,196, 12,194, 32,161, 3, 4, 34,104, 27, 32, 42,238,101,149, 22,154, 13,186, 30,
+128,216,229, 90,111, 28, 37,247,243, 91,179,112, 97, 39,118, 81, 64,155,196, 0, 4, 50,148, 12, 89,120,114,214,104, 92,105,159,
+221, 78, 39, 16,149, 45,231,110,113,140, 21, 74,177, 86, 52, 14,169, 82, 37, 96, 86,240, 97, 4, 85, 53, 87, 51, 14,246,227, 45,
+ 55,149, 11, 75, 9,226, 51, 12, 32, 37,146, 66,199,229,107,166,207,202,220,115,182, 97,205,251,106,180, 80,179,241, 50,177,140,
+ 92,121,185,235,158, 71,139, 28,163,146,136, 65,213,116,177, 46,251,146,186, 40,147,206, 7,161, 16,133, 93,244, 9,114,120, 73,
+232,207, 15,107, 61, 42,180, 91, 87,231, 52,190, 35,135,154,171,214,232,237, 40,138, 1,219,108, 94, 69, 75,153, 93, 66, 70, 24,
+ 40,135, 86, 75, 41,115, 74,119, 70, 73, 46, 69,194,140, 50,245,143, 36, 12,148,110, 88, 55, 87, 64, 83,107,147, 80,109, 53,105,
+ 61, 83,213,101,243, 89, 47,170,105, 46,171,176,108,189,182,163, 69,170,104, 16, 39,145, 65,202, 46,179,237, 89,216,222, 42, 75,
+158,103, 83,185,184, 27, 39, 19,175, 7,217,117, 18,216,130,125, 93,172, 98, 6,213,136, 26,167,216, 72,174,224,120,150,101, 20,
+234,107,198,199,193,131,107,241,181, 52, 98,152, 47, 39,112, 2,226,247,204, 54,212, 82, 89,134,109, 90, 70, 43,227,220,104, 62,
+166,166, 33,149,200, 76,192,125,106,101,245,151,206,216,176,231,178,242, 89,135,146,166, 68, 34,239, 66, 58,207, 59,101, 91, 39,
+149,170, 4, 71, 49, 77, 82,240,169,200, 46,134, 24,106, 3,155,168,170, 5,129, 68,208, 70,229, 87,161,238, 22,170, 73,141,219,
+ 37,255,245, 73,183,134, 5, 98, 52,115,214,194, 55, 2, 24, 42, 63, 62, 23,161,248,254, 96,233,202, 2,118,138,200,132,140,168,
+147,238,158,196,182,185,166,106,104, 62, 1, 64,107,222, 72, 43,153,158, 86,167,238,244, 68, 77,237, 99, 75,197,110, 84, 51,215,
+ 10,192, 55,218,241,120,149,113,208,194,145,215,122, 0,139, 6, 69, 41,171, 9,166, 19,110, 77, 67, 16, 41, 35,147, 90,118, 64,
+ 53,197,117,147,210,150, 7,150, 75,241, 43,107,200, 88,161,101,243,196, 36,101,241, 65,117, 66,166,210, 49, 48,184,144,234,234,
+ 1,131,137,163,137, 28,138, 94, 42,149,198, 97,233, 78, 57, 9,203,202,164,146,123, 23, 9,114, 52,189, 62, 32, 60,198,186, 59,
+136,172,221,215,230, 24,252,245,213, 75,245,218, 47, 16,139,190,135,204,152, 77,114,102, 78,102,161,136, 37,182,214,146, 85, 83,
+ 41,201, 15,107,198, 92,108,144, 28,231,194, 53,239, 45,165,232,152,184, 80,124, 73, 96,216,170,219,171, 48,154,181, 42,211,224,
+206,191, 31,182, 37, 20,213,244, 21, 15, 28,120, 38, 37,175,170,163,109, 53, 90, 18,180, 58, 76, 89, 42, 24, 45,118, 58,114,243,
+ 80,207,178,208, 86,144,149,136,164,230,115, 46, 6,192, 50, 87,173, 94,131, 45, 86,121,127, 68,177,137,173, 4,229,176,185,171,
+ 14,208,249, 53, 53, 20, 77, 27, 17,197, 90,187,111,132,182,150,244,178, 28,101,200,253,170,196,132, 39, 56,218,197, 15,179, 6,
+132, 58, 3,224, 37,159,113, 8,121, 54,198,227, 75, 4, 80,142,102,179, 6,248,206,157,213,192,126,112,109,170,164,144, 54, 14,
+136, 10, 41,112, 72,124, 27, 86, 81,226, 78,249, 60,181, 70,110,149, 86,203, 94,180, 42, 86,195,216,154,164,172, 65,107, 4,181,
+118,161, 70,163, 83, 5,224,224,137, 41, 67,213, 81,205, 90,115, 91,142,156,125,139, 89,197, 36,202,140,176,157,216,179,232,211,
+ 32,198, 38, 95,212,213,245, 53,131,107,149, 88,221,131, 41, 67,175,119,104,163,248,188,205, 48, 81,208, 48,152, 90,191,249,181,
+104,180, 33,174,183, 89, 81,182,112,230,231,212, 58,232, 91,140,118, 36, 77,180,165,140,205,208,202,199,174,126,104, 68,141, 25,
+ 50, 7,127,209, 17,100,203,234,240, 91, 55,180,104, 83,243,129, 82,199,116, 42,103,130,173, 66,247,189,112,104, 48,115, 89, 12,
+ 90,135,186,180,108, 67, 67, 29, 97,174,115,176,109, 18,129,173, 4,193,216,140,141, 96,172, 97,242, 4, 57,197,134, 98,212, 26,
+201,178,248,177,106, 76,205, 89,141, 32, 72, 59, 89,223, 15, 57, 83, 27,197,109,142, 29,117,131,244,200, 51,152, 95,236, 80,206,
+ 99,148,117,104, 27,232,175,217,185,182,153,182, 65, 42, 67,109, 88,199,157,198,117, 77, 57, 59,205,151,170,185,131,106,204, 20,
+214,145, 40, 90,107,228,122,169, 49,128, 53, 62,162, 85,103, 17, 91, 83,124,152,124,174, 19,230, 24, 74,145, 6,239,158,197,122,
+176, 49, 59, 97,148,229,183, 73, 61, 12, 97,209, 77,175, 14,198, 85,131, 67,221,221, 90,195, 95,253,187, 85,214, 77,221, 65, 87,
+109,123, 96,202, 20,199,214, 98, 78,253,209,186,185,198, 29,120,107,230, 12, 4, 12,180, 15, 20,173, 21,157, 58, 16, 48,219, 4,
+248, 32, 41, 86,213,160, 14, 96,166, 54,118,135, 53,135,122, 34,170,225,212,159, 54,204,213,148,133,137, 24, 17, 21,205,180, 25,
+ 97,193, 13, 11,112, 84,140, 95, 27, 8,174, 80,129, 24,135, 85, 38,100, 25,124,231,152,120, 82,132,103,109,188,208,221,145,175,
+ 30,177,147,118, 54, 68,225,154,247, 18,140,101,229, 97,219, 76, 82,118, 21,141,247, 4, 86, 95,166,109,178,246,148,164,172, 86,
+ 7,165, 3,196, 1,210, 59, 17,251,135, 72,215,194, 98,195,136,170,118, 14,232,120,213,186,230,152, 70, 52, 33,107,235, 41, 7,
+183,129, 50,130, 57,144,138,252,218, 33, 54, 8,171, 78, 90, 75,193, 91,106,210,226, 83,145,131,102,182,124, 52, 98,240,210,117,
+115,125, 25, 94, 99,245,122, 21,165, 30,240, 62, 27, 38,125,199,182, 54, 98, 13,140, 77, 77,219,120, 36,113,162, 87, 66, 27,146,
+133,166,119, 28, 33,145,181, 51,217,228,142,209,234,203,193,220, 78,218, 70,169,163,109, 84,219, 89,227, 46,181,255,211,135,178,
+216,103,248,182,209, 48,247,136,255,128,255, 11, 9,203, 84,141, 69, 4, 59,160, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+ 0};
+
diff --git a/source/blender/editors/datafiles/nudge.png.c b/source/blender/editors/datafiles/nudge.png.c
new file mode 100644
index 00000000000..2fa29ad78b4
--- /dev/null
+++ b/source/blender/editors/datafiles/nudge.png.c
@@ -0,0 +1,569 @@
+/* DataToC output of file <nudge_png> */
+
+int datatoc_nudge_png_size= 18012;
+char datatoc_nudge_png[]= {
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 96, 0, 0, 0, 96, 8, 2, 0, 0,
+ 1, 26,253,208,249, 0, 0, 0, 4,103, 65, 77, 65, 0, 0,177,143, 11,252, 97, 5, 0, 0, 0, 6, 98, 75, 71, 68, 0, 0, 0,
+ 0, 0, 0,249, 67,187,127, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 0, 7,
+116, 73, 77, 69, 7,218, 7, 19, 0, 34, 13, 86,254,139, 21, 0, 0, 32, 0, 73, 68, 65, 84,120,218,236,188,119,148,101, 87,121,
+ 39,186,211, 73, 55,223, 91,183,110,229,220, 85,213, 57, 7,169,213,234,110,229,156,144, 72, 2, 4, 38, 24,108,108,210,140, 13,
+ 14,204,216,248,225,240, 30,158,121,126, 12,140, 77, 50, 24, 99, 68, 6, 9,229,208, 45,169,165, 78,234, 92,221,213, 85,213,149,
+235,230,116,206, 61,249,156, 29,222, 31, 37, 99,204, 56,224, 49,246, 48,239,241,173, 85,107,213, 93,181,215, 94,223,253,237,111,
+127,241,183, 11,238,223,191, 31,252,179,242,211, 44, 34, 63,254,225,183, 30,184,169,167,183,175, 82,175,127,226,171, 63,248,201,
+ 69, 51,143, 63,245,248,247,254,226,234, 61, 7,229, 72, 58,127,249,165, 14, 37,253,197, 95,123,211,232,200,248,254, 15,255,254,
+234, 34,220,215,215,103,207,191,186,109,116,184,115,100,251,247,191,247,229,147,211, 11, 81, 85,206,165,226, 93,131,155,187, 85,
+159, 10,184, 84,105, 16, 8,209,221,183,220, 39, 71,146, 95,255,155,207,164, 99,145,237,163,253, 99,189,221,209, 76,255,161, 67,
+143, 40,146,180,174, 43, 19,145,215, 19, 33,120,105,225, 44, 33, 82,161,161,191,249,193, 95,211, 87, 46,213,170, 75,105, 45,209,
+ 82,146,157,170,235, 83,250,177, 55,221,137, 0,132, 2,224, 15,126,246,235, 15,222,114, 19,245, 44, 74,131, 84, 34,203, 66,239,
+216,169,115,199, 47, 47, 96,132,190,115,248,101, 4, 0, 0,114,236, 7,159,251,171,158,117,251,142,189,244,131,182,254, 77,145,
+ 84,238,249, 23,159, 34,204,191,180, 92,218,177,166,127,165,218, 36, 64,136, 53, 91, 14, 22, 46, 30,250,225, 43, 39,222,247,190,
+223,241, 90,181, 83,167, 94, 80,100,105, 32,151,233,107, 79,191, 58,179,120,213,250, 33, 60, 48, 48, 48,117,242,217,129, 92,234,
+154, 61, 7,245,252,165,106,254,242,240,240, 70,230,183,106, 45,203,176,221, 98,195, 88,211,157, 67, 66,136,223,252,200, 31,124,
+246,209,195,140, 6,146, 22, 63,116,110,114,102,230, 60, 16,224,228,244,162, 31,208,166,229, 92,152,207,195,159,234,236,126, 26,
+129, 63,250,237,218,109,155,118,116,199,215, 12, 15, 55,155,205,143,255,245, 99, 63,185,104,250,135,143, 79,156,124,178,165, 87,
+215,111,220,179, 52,123, 14, 2,208, 63,188,249,170,247,253, 7,198,249,107,139, 46,127,255,251,156,133,197, 43, 39, 13,163,246,
+228,201,139,131,185,204,214, 53,253,174, 31, 42,178, 28,143,167, 14,252,198, 31, 3, 0,208,217,163,143,156, 62,242,125, 17,218,
+195,235,246, 98,132,246,172, 91,243,210,133, 43, 17, 85, 94,108,133,199, 39, 46, 62,249,137,247, 3, 0,144,130, 65,127,119, 15,
+ 34,234,123,127,239, 63,191,247,161, 95, 78,118,172,217, 48,216,205, 56,223,183,253,170,138,222,122,244,149, 51,255,237,125,247,
+163, 76, 50,253,167,223,124, 52,221, 53,254,231, 31,255, 79, 78,109,209,243,221,115,115,203, 77,203,153,188,116, 50,100,236,154,
+141, 35,187,119, 92, 75,122, 55,221,252, 94,159, 70,219, 7,168,103,190,120,228,241,114,211,124,243,189,111, 42,205,159, 62,125,
+101,137,115, 49,179, 82,249,222,203, 95, 36,140,211,193, 13,215,254,240,219,159,213,100,114,113,161,248, 43,111,123,103,113,238,
+172, 16,160,164,155,153, 88,228,249,243,211, 31,186,239, 70,140,140,165, 11, 19,175, 62,248,150, 15,125,241, 91,223,248,232,175,
+255,230, 35,143, 61,252,200,177,115, 99,189,157, 47, 93,152, 89,174, 53,119,142, 14,124,227,197, 87,241,215,254,236,243, 86,249,
+138, 89,158,185,227,166,187, 14, 29,122,228,170,117,107,206, 92, 89,234,205,166, 91,174,183,190,191,251,198, 93,219,158, 63, 61,
+ 1,126, 86,103,135,192,207, 72,254,238,254,170,138,124,236, 75,159,179,189,224, 91,223,251,234, 93,183,221,191, 60,117, 60, 25,
+143,182,183,247, 53,106,203,186,237, 2, 1,186,178,105, 32, 69,111,250,232,159,252,195, 27,113,206,103,158,120, 70, 80,255,175,
+191,250,103,152, 40,198,242,201,219,246,238, 30, 24,217, 16, 21,182,169,151,124,187,230,135, 52,174, 42, 16, 66,221,180, 95,184,
+120,254,211, 31,120,199,114, 33,223, 52,173,207, 63,117,244,199, 55,194,253,253,253,162,112,190,179, 45, 51,152,203,174,204,157,
+ 25,221,118,107,121,113,226,169,231,159,200, 87, 42,235,215,109,131, 8,203, 72,212,140, 86, 64, 89,119, 71,151,110,232,179, 13,
+119, 91,127,110, 98,126,249, 55, 94,119, 67, 46,161,157,154,203,255, 45, 70, 16,222,121,215, 67, 83, 23,143, 19, 73,105, 75,181,
+ 29,122,250,111,186, 7, 54,184, 65,248,226,249, 73,223,170, 66,193,212, 72,114,176,111,200, 15,105,188,125,112,247,248,208,158,
+238,232,214,205, 87,221,186, 99,195,228,114,137,113,241,169, 95,186,235,137,255,227,195,175, 97,116,225,196, 15,251, 58,115, 68,
+141,157,186,112,234,209, 99,231, 31, 63,121,225,255,254,228,103,244,229,139, 16, 75,245,194, 84,199,192,198,226,210,101,199, 15,
+ 48,145,235,166,117,210,128,163,102,163,208, 48, 40,101, 1,101, 64,128, 90,189,114,242,243,127,134, 7, 6, 6, 39,167,166,190,
+121,248,196,254,157,219, 55,108,186,122,247,154,206,123,239,124, 80, 8,134,136,242,236,115,223,221,126,245,109, 95,254,250, 23,
+183,174, 93, 59,191,178,162, 48, 43,164,244,153, 35,199,226,146, 56, 54, 95, 86,177,200, 38, 98, 99,189,157, 95,120,242,200,206,
+129, 12, 1, 0,252,246,123,126,185,115,112,179,224, 92, 0,209, 17,223, 91,153, 57,254,210,233,147,182,227,191,227, 93,191,249,
+209,223,251,200, 39, 63,246, 7,159,249,252,167,222,245,166, 95,122,228,137,111,239, 89, 59,212,153, 78,148, 26,186,101, 52, 82,
+237, 3,189,217,212,151,159,121,229,142, 93, 27,255,243, 87,127, 0,247,237,219,247,153,247,190, 99,226,204,225,153, 66,181,222,
+178,178,137,216, 45,251, 15,182, 13,110,255,253, 63,254,232,251,223,240,250,100,231,216,231,191,242,233,183,221,251,134, 71,158,
+126,100, 77, 79, 46,162,202,199, 39,231,243,117,189, 45, 17,107,180,236,133, 74,125,227, 96,247,171,211,139,247,239,219,142, 7,
+ 6, 6,107,243,231, 71,186,115, 55,220,246,246,171,118, 31,188, 56,113,124,114,118,182, 55, 33, 31,220,127, 75,104, 55,255,235,
+151,191,240,250,107,119,186, 86,237,243, 79,190,116, 96,243,168,227,133,231, 23,139,126, 24,182,108,215,116,253, 61,227, 67, 47,
+ 94,184,178,117,184, 23, 34,128,251,251,251,119,247,165,254,234,185,227,196, 41,202,110,113,124,100,124,108,112,136,250,102, 97,
+241,242,127,251,222,147,119,236,218, 24,211,228,201,165, 98, 87, 38, 25, 83,148, 66, 67,119, 60, 31, 2, 80, 55, 29,140,209,254,
+ 77, 99,211, 43,197, 84, 34,114,110,118,229,103,231, 39,127, 38,210,223,223,255, 51,187,180,255, 6,183,255,199,229, 55, 31,184,
+217,178, 90,185, 92, 71,119,123,214,116, 92,199,104, 60,118,110,246,216,197,153,159, 42,148, 60,252,201, 79,140, 15, 14, 60,241,
+196, 55,186,218,218, 54,108,220,121,230,204,145, 13,107, 55, 59, 70,201,176,108,221,118,115,137, 24, 36,248,238, 79,124,238,159,
+194,232,165, 47,253,229,244, 15,159, 24, 27, 93,251,213,111,124,241,117,175,255,149, 48,244, 37, 57,178,255,230,183, 4, 86,205,
+118, 61, 0, 64, 42, 26,161,130, 31,186,184,120,234,175,190,248,145,251,174,255, 7,247,194, 87,158,120, 58, 22,141, 87, 43,203,
+207, 60,241,245,119,188,243,163,207, 61,246,165,253, 55, 63, 8, 1,168,205,158,224,156, 65, 40, 66,198,101,130, 57, 23, 3,217,
+ 68,103, 71,255, 72, 71, 38, 70,216,241,233,165, 31,223, 37,153, 76, 18, 8, 64, 62, 63,123,244,200, 99,111,124,240,131,135, 30,
+251,226, 77,119,189,167,190,112,234,252,197,179,151, 87, 74,186,229, 38,163,218,193,205, 99, 94, 16,198, 35,234,124,185,246,244,
+195,127,181,161,191,115, 65,247,190,250,225,183, 70, 20,249,254, 63,254,210,223,129, 93,175,228,159,120,242, 91,239,122,215, 71,
+143, 62,243,213,253, 55,189,169,177,112,234,220,197,179, 39,166,230,127,245,193,135,124,171, 65, 67,119,185,184, 34, 4,136,198,
+146,107, 16,236, 74, 39,251,135,183, 40, 80, 52, 45,167,102, 90,219, 71,122, 79,207,174,188,246,213,124,125,249, 67,239,255,221,
+115, 71,190,213,223, 51,200,105, 48, 61,125,174, 80,215,111,191,106,231,215,159,124,178, 88, 41, 37, 53, 18, 81,148,116, 34, 6,
+145, 20,137,183,125,255,228,133,173,235, 54,133, 86,249,236,236, 50,198,104,169,166,127,229, 63,190,235, 43,207,190,146, 76, 38,
+201,111,188,247,195, 75,231,158, 70, 16,202,209, 84,126,113,162,175,119, 88, 38,248,255,249,238,227,119,239,217,188,126,124, 35,
+243,173,229, 98, 33, 17,141, 52,205, 86,103,188,125,109, 91,228,235,143,127, 31,169, 90, 58, 30,181, 61, 63, 34,161, 76,255,150,
+215, 12,146,250,118,161, 94,239,104,239,110, 20,103,122,135,182, 94,184, 60,241,153, 71, 95,120,207, 93,183,236,187,229,161,208,
+179,213,100, 23, 0, 16, 98, 41, 8, 67,206,195, 68, 44,122,250,210,229,172,140, 18, 17,213,241,131, 84, 84,107,149,174,188,253,
+142, 27, 34,170,138,230,166,142,119,164,226, 0,162,104,188,237, 11,223,250,218,127,127,236,197, 79,127,252,247,219,218,114, 78,
+179, 80,173,151,137, 18,185, 82,172, 72,106, 60, 30, 79, 57,122, 9, 99,180, 97,160,123,251,248, 24,130,208,245,195, 76, 60,106,
+ 27,101,219, 15, 30,216,187, 5, 69, 20, 57,150,236,248,225,145, 35, 31,253,243,175,228,107,205, 71,190,244, 77,163, 56, 21,107,
+235, 39,146, 58,149,175, 32, 44,215, 91,182, 20, 73,181,229,250,203, 13, 29, 2,209,221,150,140,168,154, 79,105, 72, 89,111, 91,
+186,229,122,203,243,115,150,227, 96,141,224,191,126,230,133,186, 97,126,241,191,126, 49, 11,154,169, 84, 54,150, 27,198,146,210,
+ 92, 58, 95,172, 85,199,214,110,115, 27, 75,129,239,228,186,135,167,102, 46, 2, 0,129, 16,221,237,237, 83,139, 75,134,237,110,
+ 26,238,157, 89, 41,247,182,165, 95, 93,105,160, 55,222,114,235,151,255,244,207,175,223, 58,238,181,170,219, 15,190, 73, 73,180,
+ 99,162,212,151,206,127,247,240,139,119,221,251,238,191,250,155, 63,223,125,245,173, 79,159, 56,237,182, 42, 16, 0,221,118, 8,
+198,129,107, 56, 94,208,150,136, 17, 4, 79, 76, 45,108, 31, 27,200,197, 85,220, 19,131,187,246, 92,183,110,227, 30, 44,169, 0,
+128,208, 53, 79,191,248,173, 23,207,156,127,195,157,247,217,122, 5,241,160,183,127,172, 35,138, 46, 77, 95,138, 71,180,229, 90,
+ 51, 25,141, 40, 4,207, 20, 42,125,237,153,249, 82,109,165,222,140,170,114,119,207, 32,122,215,187, 63,198,104,200,195,192,172,
+ 45,189,122,232,107, 95,123,248, 47, 46, 45,149,222,120,247, 27, 35,241,236,163,207, 62,126,245,245, 15,124,249,225, 47,244, 13,
+111,190,176, 80, 72, 69, 53,219,245, 17, 2,181,150, 37,132,104,152,246,241,169,249,109, 35,253,223,123,229,108,190, 92, 36,152,
+ 72, 87, 78,254, 96,114, 97,121,177,210,224,130,111, 30,236,217,119,203, 67,149,249,179,223,125,252,219,111,127,232,131,245,249,
+211,221,153,132,221, 92,129, 16,168,178,196,132,128, 16,150,155, 45, 47, 8, 23,202, 13, 1, 64, 34,162,190,243,230,189, 95, 63,
+ 49,141, 99, 94,254,212,212,124,205,180,134, 58,179,247,222,126,255,216,214,235,191,250,149, 79,121,142,126,219,173,111, 8,221,
+214, 23,190,253,205,187,246, 31,152, 95,154,145, 8,110, 79,196, 22,203,245, 76, 44, 58, 87,170,214, 90,182,110,217,155, 6,123,
+158, 59,115,121,172,183,195,164,128, 84,117,115,188,175,235,192,190, 27, 82, 61,235,106,243,103,126,247,119,126,237,125,183, 31,
+232, 27,219,197,104,112,254,244,225, 92, 42, 14, 32,156,201, 87,214,247,119, 59,126, 16,143,168,110, 16,150,155,166, 23,132,189,
+217,180, 31,134, 31,126,221,141, 95,126,230, 21,143, 68,240, 87,254,232, 79, 54,237,184, 33,112,244,223,255, 47,159,172,215, 75,
+111,191,237,186,182,174,113,206,194,102,225,210,215, 15,159,184,121,219,122, 25,179,195,231,166,215,245,119, 26,182,235,133, 84,
+183,157,138, 97, 14,230, 50,170, 44,133,140,127,237,249, 19,215,111, 29, 47,152, 62, 41,207,157,254,220,163,207, 18,130,223,124,
+112, 87, 54,221, 38, 41,113,175, 85, 9, 28,253,229,139, 51,157,233,132, 34, 19,199,245,170,134,233, 5, 97,195,114,108,215, 91,
+172,212, 1, 0, 23,230, 11,111,189,126,247,159,124,243,169,157,227,131, 83, 43,101,195,161,224,231, 42,174,245,245,245, 33,240,
+243, 36, 16,194,159, 47,133,254,209, 48,251,211, 72, 60, 26,237,200,102, 60,223,175, 53, 13,207,247,255, 61, 20, 74,197,163,227,
+189,221,123, 55,173,223, 58, 58,176, 60, 63, 93, 54,204,145,174,206,241,241,141, 90, 36, 90, 89,156,172,234, 58, 7, 80,194, 88,
+ 34, 24, 33, 8, 0,144, 16,146, 84,173,166, 27, 61,233,196,167, 31,127,229,185,179,147,255, 90,133,246,110,218,240,217,143,255,
+158, 42,203, 0, 34, 38,248,228,233,231,143,156, 57,221,169,134,235,199, 54,111,223,178,239,242,153,167,106,186,193,237,122,170,
+123, 40, 22, 73,140, 64,232,181, 42,158, 89, 11, 66,159,113, 46,132, 16, 2,248, 97,232,121,254,229, 66,237,147,191,252,208,199,
+133, 36, 67,254,171,255,229, 51,103,175, 44,254, 11,204,104,255,254,253,175,188,124,100,250,177,167,152, 0, 0, 8, 30,250,165,
+106,233,240,179,223, 14, 66,118,215, 77,119,100,122,215, 45, 79, 60, 63, 53, 55,215,209,150, 94,191,231, 46, 8,145,224,212,110,
+228,125,179,230,219, 77, 63,240,130,144, 50,193,129, 16,171,185,145, 16, 64, 8, 1, 17,172,232,102, 58,215, 23,248,238,150, 77,
+187,207,157,124,246,242, 74,241,107, 47,158, 93,172, 52,254,217,228, 17,238,219,183,239, 47,127,235,119, 5, 0, 60,244,107,245,
+210, 51, 79,125, 43,162, 41,119,223,243, 78,162,198,102, 78, 62,178, 84,170,140,141,140,245,174,189, 6, 64,104, 22,103,170,249,
+201,134,105, 25,182,235,248, 1,227, 66, 38, 56, 19,143,102, 98,209, 90,203, 84, 37, 41,162,202, 16, 66,198,185,235,135, 0, 0,
+130, 81,153, 70,218, 53,220,219,209,121,228,213, 99,142,231,185, 1,189, 97,219,134, 88, 42,247,240, 51,207,127,250,209,195,255,
+160, 66, 4, 0,192, 67,207,104, 53,159,124,242, 97, 32,224,253,247, 61,164, 37,218,151, 47, 60,187,144,207,119,182,103,111,184,
+235,221,212,119,234,243,167,138,133,249, 82,179, 85,105,182,202,122,171,105, 57,189,109,169,173,107,250,101, 73,210, 77,235,114,
+179,133, 16, 94,215,151, 56,117,101,105,219, 72, 95, 68, 83, 35,178, 84,183,156, 83, 51, 75,227,189,185,190, 53, 59, 95, 58,243,
+234,174,177,129,199, 79, 92,112,131, 48, 95,173,105,134,177,101,160,227, 77,215,110, 63,116, 97,166,172,155, 63,153,241,245,247,
+ 15,196,173,197,103, 94, 60,116,243,213, 87, 95,115,227, 27,205,242,236,196,233,231, 28,215,217,180,237, 96, 91,207,186, 86,105,
+186, 48,115, 98, 33,191, 60,181, 82,158, 43, 85,239,186,238,134,157, 27, 55,247, 38, 72, 44,162, 6,148,105,146,212,219,158,109,
+ 79,197,251, 58,115,150,235, 14,118,100, 95,186, 48,179,118,120, 68,139,103,163,138,148,212,200,153,197,210,145, 51,103,223,118,
+223,155, 31, 59,118,124,251, 96,103,169,217,210, 29, 87,149,164,134,233,184,126, 16,137, 37,100,140,220, 32, 8, 40,251, 81,230,
+136, 7, 6, 6, 7,163,240,237, 15,125, 80,139, 36,102,207, 60,185, 92, 88,206, 37,147, 3, 99,187, 89,232, 54,151,207,231, 11,
+ 75,147,203,165,206,246,220,190,189, 55,117, 68,196,209,243,231,159,120,229,216,217,249,149, 84, 44,210,221,150,210, 20, 89, 0,
+161,169,145,114,189,214,217,209, 11, 68,216,178,157,116, 60, 18, 75,247, 64,132, 17,247, 10,117,253,234,209, 62,195,118,214,247,
+245, 44, 23, 86,178,169,120,189,101,123, 97, 24,132,204,114,253, 66,165,250,241, 7,111,255,200, 59,127,117, 93, 6, 62,121,250,
+242,107, 10,245,247,247,253,230,187,126,189,190,120,110,230,242,171, 1,101,189,185,246, 88,166,199, 51, 10,205,234,114,205, 48,
+135,215,108,234,239,232, 40,151, 11,143,191,248,226, 19, 39, 47,204, 20,202,239,184,233,154,215,221,241,230,177,241, 45,241,120,
+ 74,139,165,180, 72, 66, 82, 98,181,122, 89, 38, 88, 34, 36, 12, 41, 23,188,173, 99,128,135,190,103,213, 33,224,213, 16,125,237,
+169,231,239,187,229,174, 67,211,115,221, 17, 34, 0, 48,108, 47,160,204,241,125, 8,192,114,181,177, 99,195,198,182, 88,244,200,
+204, 98, 67,215,147,201, 36, 1, 0,174, 92,124,174,212,208, 53, 89,206, 36, 98, 16, 97, 79,207, 43,241, 92, 46,217, 21,204, 95,
+120,242,240,179,147,203,197,217, 98, 85, 0,240,169, 15,188,191,103,108,183,107,148, 2, 91, 23, 62, 44, 45, 77,196, 19,217,120,
+ 91, 47, 0, 80,183,221,100,130,105, 90, 36,164, 52,142, 99, 8,162,208, 51,109, 63,148, 8,169,186,114, 91, 76, 97,190,185,187,
+175,189, 92, 46, 40, 68, 2, 0,184,126,192, 24, 79,198,180,206,116, 66, 47, 94,246,252, 96,207,248,208, 95,254,250, 91, 30, 62,
+114,138, 0, 8,116,211, 76,199, 34,209,104, 92,141,102, 33, 66,115,115, 23, 79, 30, 59, 63, 91,172, 20,155,173,154, 97,255,218,
+189, 55,125,226,183,254, 36,240,204,250,220, 73,163,112,153, 40, 49, 73,141, 7,174, 81,110, 26,138, 26,195,146,194, 89, 56, 83,
+168,172, 31, 93,171,198, 50,249,250,233, 53,107, 54, 8, 1, 26,245,162,227, 5, 16,161,249,133,197,209,238, 92,169,180,210,145,
+201,190, 58,113,169, 43, 19,103,140,121, 97, 8, 32,232, 72, 37,134, 58,219, 60,207,189,180, 84, 90,206,231,213, 68,103, 38,153,
+ 32, 0, 0, 85,150, 45,215, 63, 54, 57,119,118,110,165,106, 88,182,231,165,162,218,239,188,235,237,107, 54, 95,103, 84,230,243,
+211,199,244,252, 37, 53,222,158, 29,218, 9, 17,226, 92,132,142,145,159,191, 48, 91,168,109,223,117, 35, 38,202,197,179, 71,162,
+138, 76, 0, 15,104,216,114,188, 68,186,211,110,230,203,186,169,201,178,224,162, 94, 92,222,213,181, 54, 95, 42,172, 31, 25, 91,
+210,173,100, 84, 13, 25,103, 92,196, 53,173, 63,151, 73, 69,163,249,154,113,116,114, 46, 78, 96,232,181, 46,204, 45, 18, 8,225,
+ 31,126,227, 9,207, 15,118,142,141,124,236,189,239,239, 26,220, 88, 93,158,188,116,238, 69,238,181,236,250,114, 36,158, 29,219,
+117, 15,132, 16, 64, 8,132, 96,161,111, 85,166, 39, 38,207,158,155, 91,190,255,134, 27,181,120,182,190, 50,249,216,137,179, 31,
+120,240,173,146, 18,121,236,233,239, 31,216,182, 25, 66,124,249,202, 37, 63, 8,219, 19,177,124, 93, 39, 8,200,132, 52, 91, 6,
+ 11,157,134,233, 58,158,207,133,208,100,169,175, 61,149,137, 71,117,203, 57,122,121,182, 97,218,111,189, 97,207,169,115,167,154,
+ 46, 37,130,243, 79,125,232,131, 47, 30,125,161,101,219,161,211, 12,156, 86,166,107,100, 95,215,168, 0, 2, 10, 46,128,128, 0,
+114,198,188, 86,181, 52,119,106,102, 57,191, 80,174, 43, 18,121,247, 91,222,171, 37,218,207,190,242,189,111, 29, 62,246,145,135,
+ 30,210,146, 29, 19,103, 14, 83,206,251, 71,182, 45, 76,159,200,215,140,206, 76, 66, 83,164,186,105,199, 53, 5, 99,100,153,190,
+107, 27,182,169,187, 65, 90,147,165,100, 68,107,139,199,116,211, 57, 49,179,176, 80,174,109, 29,233,147, 9,254,204,163,135,111,
+221,127, 13, 1, 0,116, 12,111,187,171, 99,152,115, 38, 41, 17, 8, 32,167, 33, 0, 64, 8, 17,122, 86,171,124, 37,191, 60,179,
+ 84,109, 54, 76,155, 50, 30,211,212, 7,110,185,173,109,112,155, 85, 95,254,196,255,249,219,107,251, 58,254,224, 99,159,228,140,
+206,156,126,250,229, 11, 23,223,253,134,183,185,102,229,232,197,169,100, 52,146,138, 70,132, 16,134,237,166, 98, 81, 4,145,237,
+ 5, 13,203, 25,238,204, 81,198,219,227,209,152,170,228,235,250,197,197,124,185,105,118,183,165,214,246,118,126,251,165, 83,183,
+237, 88, 31,141, 37, 8, 0,128,250,142,172,197, 25, 13,252, 86,213,170, 45,214,106,249,170,222,170, 25, 86,211,114,252, 48,148,
+ 8, 73,199, 34,187,215,174, 89,179,229, 6, 37,150,182,170,243,127,242,167,191,155,142,105,191,254,214,135, 82,157, 99,161,103,
+ 94, 58,245,212, 83,167, 38,222,113,231,237, 2,136,243, 19,167,203, 77,115,164,171, 61, 17, 81,253,144,250, 33, 77,104, 42, 66,
+160,229,184, 85,221,204, 38, 99,148,178,154, 97,205,151,106,197,134, 97, 58, 94, 54, 25,223, 58,210,251,242,165, 89,198,193, 45,
+187,183,126,244,235,207, 16, 0,225,212,201, 31, 46, 87,107, 13,211,105, 57,158,227,249,148,113,140, 81, 50,170,245,182,167,199,
+250,122,122,198,175, 81,162,105, 26,216,103, 95,121,244, 27,135,143,239, 93, 63,252,142, 59,111, 75,245,172, 7, 16,154,181,133,
+ 51,167, 95, 56, 50, 49,251,198,131,187,181,120,123,101,249,226,201,153,133,246, 84, 44,174, 41, 16,130,128, 50, 8,128, 44, 17,
+ 33, 64,195,116,138, 77,195, 15, 67,203,245, 77,199, 51, 93, 47,160,180, 35,157,216, 56,216,115,118,118,185, 97,218, 31,121,221,
+ 77,191,241, 23,223, 72,229, 58, 9, 4,240,145, 99,103, 41,101, 4,163,100, 68, 27,236,108, 27,234,204, 13, 14,111,138,117,172,
+193,146, 66, 61,115,234,244, 51,223,121,241,132, 34,227,235, 55,143,255,198, 91, 30,136,182, 13, 34, 73,166,158,101,148,103,142,
+158,159,184,184, 84,184,115,247,166, 76,174,207, 53,138, 51, 43,165,169,229,210, 59,110,218,139, 17,246, 67, 22, 82, 26, 85,101,
+199,243, 41, 99, 65, 72,139,141, 86, 64,169,229,250, 94, 16, 74, 4,247,182,167, 7,114,109, 39,166, 22, 34,138,244,161,251,110,
+252,240,231,190,181,105,176,135,171, 26, 1, 64,108, 25,234, 25,238,238,232, 26,218, 22,205,246, 98, 44,115,206,172,202,236,115,
+ 79,124,229,153, 83,151,100, 9, 31,220, 60,246,208, 77, 87,199, 51,189, 82, 36,133, 16,230, 52,240,204,106, 57, 63,125,228,226,
+108,190,166, 95,191,117,188, 51,147,161,158, 85,175, 87,102, 11, 85,140, 80, 50,170, 9, 33, 44,215, 11, 66, 26,215,180,211,115,
+249, 92, 58,209,145, 78, 20,234,186, 42, 75,132,224,222, 68,180,171, 45,233,250,225, 15,143,159,191,123,207,230,181,253, 93,255,
+225,243,223,222, 61, 62,136, 32, 88, 48, 45,184,111,223,190,175,252,206,127, 10,125, 71, 47,205,156, 57,115,236,217,179,151, 27,
+150,179,174,175,107,247,248, 64,111, 54, 19,137,103,137, 26, 67,136, 8, 33, 4, 11, 25,243,125,187,185, 82,174, 30,185,116,165,
+105, 57,123,215,141,172,233,105,215, 36,137, 11, 49, 95,170, 61,121,234, 82, 79, 91,242,218,141,163,148,241,186,105, 11, 33,116,
+203,157, 43, 85, 49, 70,130, 11,219, 11, 48, 70, 9, 77,173,155,246,114,181,177,101,184,247, 45,183,220,244,190, 63,253,239,227,
+189, 29,233, 88,164,218, 50, 21, 34, 45,152, 20, 94,123,237,181,221, 42,208, 45, 71, 8,144,142, 71,218,147, 49, 85,150, 36,140,
+ 49, 66, 24, 65,136, 32,132, 16, 8, 32,132, 16, 66, 80,206, 77,215, 91,169,234,110, 16,116,166,147,109,137,168, 34, 73, 16, 0,
+ 46, 68,173,101, 93, 41, 84,134, 58,218, 18, 81,141, 49,238, 7,212, 9,130,128, 50, 63,164,140,115,130, 80, 68,149, 37,140,163,
+170,162, 72,100, 58, 95, 94,170, 52, 18, 17,173, 35, 29,135, 0, 58, 65, 96,187,190, 19,132, 72,214,126,206,250,141,171,181,217,
+207,143, 50,251,247,239, 71, 16,194,159, 43,128,126,238, 10,197, 95, 40,244,191,157, 66,255,147,181, 61, 66,168,163, 45, 19,213,
+ 84,211,118, 42,141,166, 16,226,127,129, 66,191,116,243, 53,217,152, 26, 4, 62,163, 44, 26, 81,179,185,238,184, 42, 1,192, 3,
+202, 77,215,119,109, 51, 34,145,186, 19,252,233,119,158,254, 87,117,100,250,251,251,151,150,150,254,193,191,141,116,119,174, 27,
+232, 57,176,125,115,123, 84, 58,115,241, 98, 84, 85,214,142,172,233, 31, 26,243,244,242,202,202,130, 19, 80,140,144, 44, 17,130,
+208,234,144, 65, 85, 36,135, 33, 30,122, 4, 75,239,251,236,195, 94, 16,254, 79,248,161,159, 84, 8, 66,120,235,213,187,255,175,
+ 15,126, 32,240, 28, 73,139, 79, 77, 28,123,249,204,233,120, 68,185,110,239,117, 74,162,189, 54,119,186, 80,171, 69, 20,185,167,
+179, 43, 18,207,122,102,205,117, 77, 47, 8,253,144, 58,126,192, 1, 72,104, 74, 66, 83,141, 64,116,165, 19,255,241,139,223, 57,
+ 57, 53,255, 47, 85,232,239, 29,217,215,255,240,147,219, 55,110,102,148, 34,140, 77, 55,120,252,145,175, 52, 77,231,134, 61,187,
+251,198,118,183,202,211, 19, 39,159, 81, 37,188,109,219, 53, 88, 82, 17,198,161,103, 33,140, 9,198,138, 4,100, 66, 98,170,194,
+ 4,215, 45,247,236, 92,254,134, 29, 91, 45,138, 63,247, 91, 31,125,250,133,167, 63,250,151,223,253, 23,233,132,147,201,164, 97,
+ 24,183,238,189,250,169,207,125,169, 51,215,137, 16, 22, 0, 44, 94, 57,247,216, 83,223,141,200,210, 3,247,190, 53,215, 59, 62,
+115,250,169,217,197,185,193,222,254,177,173, 55,202,145, 4, 66,200,170,206,155,245, 37,219,177,221, 32, 12, 41, 11, 25,163,156,
+ 11, 14, 20, 73,234, 72,197, 95,188, 56,189, 97,116,124,126,101,225,154, 61, 7, 55,117, 72,133,134, 81,106,154, 63,141, 54, 3,
+ 3, 3, 56,158, 72,124,242, 87,222,251,193,183,191, 71, 8, 1,132, 96,140, 77,158,121,238,208,177, 87,214,246,117,221,126,223,
+ 47, 3, 32, 94,125,241, 59, 45,219,217,177, 99,127,186,115, 77, 36,209,230, 91,186,171,151,104, 96,115, 22,114,206,129, 0, 0,
+ 10, 4, 17,130, 16, 64, 40,128, 64, 16,118,167, 19, 63, 60,113,250,182,107,111, 40,149,151,134,122,250, 24,243, 71, 59, 82,103,
+231, 11, 63,149, 66,191,243,190,247,221,117,221,205, 16, 64, 22, 58,182,239, 79, 28,127,236,228,197, 75,123, 55,174,187,234,198,
+ 7,237,198,202,169,163,143,115, 33,174, 62,112,191,146,200, 74,178,106, 86,230,173,234,156,103,213, 24, 13, 48, 66, 24, 33,159,
+ 82,198, 56, 66, 16, 33,136, 33, 4, 0,112, 1, 16,134, 93,137,216,197, 98,133, 7,110,103,174, 59,180, 42, 16,192,117, 61,185,
+249,170,225,250,193, 63,173, 16,145,101, 21, 2, 16, 56,134, 29,210,133,137, 23,206,205,204,238,223,190,109,253, 85,119,183, 10,
+ 83,231, 78,191,128, 17,220,117,240,141,152,200,161,107,214,150,206, 85,107, 37,221,118, 77,199, 11, 40,133, 16,198, 53, 53,155,
+140, 97,140,116,219, 77, 70, 53,153, 96, 4, 1, 23,212,241,130,152,166,158,157,156,189,254,254,183, 28,122,229,185,205,253,189,
+199,175, 20,210, 81,245,147,111,185,117,243,186, 77,181,122,233, 61,159,254, 90,185, 97,252, 99,126, 72, 4,158, 25,114,176, 50,
+249,202,201,139,147,251, 54,111, 88,191,231,174, 86,233,202,196,185,151, 48, 70, 59,174,125, 29,150, 20, 79, 47, 87, 22, 78,151,
+234,141,170, 97,214, 12,203,176, 61, 55, 8, 1, 16,154, 34,199, 84,121,164, 59,151,141, 71,139,205, 86,111,123, 90, 38, 24, 66,
+232, 7, 97,177,174,239, 30,237,155, 93,156,209,180,184, 68, 72, 86, 35, 30, 7,166,235, 89, 70, 37,166, 42,239,190, 97,207,167,
+126,112,200,255,135,252, 2, 18, 52, 4,144,228,167,143, 29, 57,123,118,215,248,200,250,171,238,177,170, 11,211, 23,142,112, 1,
+ 54,239,188,153,200, 17,183, 81, 40,207,159, 44,212,234,133,134,145,175,233, 75,213,166,233,122,219, 71,251,111,220,190,254,154,
+245,195,185,100,194,114,253,154,233, 68, 21,217,176, 29,140,145, 42, 75,137,168,102,121, 1, 68,240,225,231, 94,188,122,203,142,
+211, 87,230, 55, 12,245, 94,154, 95,145, 8, 46, 55,154,165, 90, 45,161,201,155,122,115,255, 8,101, 2,128,234,202,229, 39, 95,
+121,101,235,112,255,182,253,175,119, 91,149,185, 75, 47,187, 65,176,118,124,179,150,204,186,122,177,190,116,174,210, 52,106,134,
+ 89,106, 24,134,237,188,245,142, 59,114,237,221,190, 99,112,234,115, 78,123,218, 29,195, 50, 13,219,201,196,163, 71, 39,231,186,
+210, 41, 69, 75, 96,226, 12,119,102,127,112,244,252,166,238,172,128,168,233,120, 35,237,137,181,125,157, 11,165,122, 50,170, 57,
+126,232,248, 65, 42,149,138,170, 85,219,251, 73,147,194, 7,182,109, 62,122,244, 80,127, 46,115,227,237, 15, 81,223, 93,186,116,
+184,209,178,122, 59, 58,115, 67,219,125,171,161, 23, 46, 85,155,205,138,222,154, 47,213,251, 59,178,111,126,221,219, 60, 61, 63,
+115,101, 34, 95,204, 27,173,166, 4, 25, 70, 0, 33,168, 41,178, 23,132,140,115, 85,150, 18,169, 14, 72,100,196, 3,211,245,182,
+ 12,245, 46,234,206,250,190, 30,219,210, 9, 70,203,181,102, 34,162,113, 33, 12,219,169, 54,154, 7,182,172,203,215,117,203,245,
+255,222, 45, 75, 68, 72, 71, 76,190,255,158,183, 33, 34,151,166,143,148, 26,205, 84, 84,235, 94,179,147, 83,223, 44, 95,169, 55,
+106,165,102,107,182, 84,187, 99,223,190,117,235,182, 77,156,123,225,204,149,249,201,229,178,238,122, 50,193, 8,193,168, 34,187,
+ 65, 16,141,196,161, 96,201,104,116,169, 92,235,237, 25,192, 88, 18, 44, 64,128,122, 76, 28,191, 52,189,127,231,213, 39, 46, 78,
+180,199, 34, 45,199, 93,173, 66, 45,215,111, 57,222, 64, 71,219,111,191,245, 13,215,142,119,253,240,228,165,213,240, 60, 48, 48,
+128, 16,130,247, 92,127,163, 18, 75, 55,150,206, 21,107, 53,153,144,142,174, 97,193,153, 93, 95, 54,140, 90,213,176, 12,219,121,
+203,221, 15,196, 99,241,147, 39, 15,159,156, 90, 60, 63,183,130, 16,220, 60,208, 61,210,149,205,196,162, 16, 65,130,137,227, 58,
+178, 68, 18,137,100,205,180, 33,194, 88, 82, 48,145,227,154, 54,103, 50,221,178,177,164, 22,124, 44, 17,156,142, 71,188, 32, 92,
+197,146, 96,124,105,177, 16, 73,230, 70,215,108,220, 56, 50,240,119, 54,180,113,104, 32, 55,184,213,172,204, 23,139, 11, 66,136,
+246, 84,146, 40, 49,175, 85,182,244, 98,195,180,101, 66,110,189,241,222, 86,101,246,204,212,212,249,249,252, 98,165,177,121,168,
+231,142,221, 91,163,201,118, 8, 4,103,129, 96,161, 26, 81,150,242, 11,241,142, 78, 34,105, 33,101, 16, 66,136, 8, 0, 0, 99,
+164, 51,220,166, 32,192,130,181,109, 90, 64,105, 84, 85, 12,219,245,130,112,213,117, 45,149, 27,190,221,136,166,186,118,141, 15,
+157,155,121, 45,234,145,100,110,208,183, 27,229,165,139,174, 31,166,162, 17, 45,214, 22,184,134,219,170, 52, 45, 55,155,206,180,
+247,140,151, 23,206,158,157, 93, 60, 63,151, 95,172, 54,118,141, 14,188,249,182, 59,162,217,129,208,179, 66,215,192, 92, 19, 60,
+ 20, 0,218, 94,136,176,140, 37, 25, 10, 0, 32,130, 8, 9, 78,185, 16, 65,171, 49,146,203, 52,235,133,117,189, 61,167, 47, 79,
+ 70, 85, 89,194, 56,160, 44,228, 12, 1, 24,215,148, 90,181,208,147,232,232, 80,209,143, 93,123, 70, 27, 43, 19,186,101,171,178,
+ 20,143,197, 4,167,190, 89,245, 2,191,175,111, 52,211,222, 55,123,249,228,209,201, 43, 39,166, 22,166,243,229, 61, 99, 3,239,
+124,243, 47,101, 6,183, 65, 68, 2,215,240,173, 6, 34, 50,146, 34, 68, 82,108,207, 23, 0, 64, 36, 65, 4, 16,194, 0, 64, 26,
+250,156,113,230,218,201,168,118,105,118, 54,158,238,104,134, 16, 65, 68, 8, 9, 41, 99, 76, 64, 8,147, 81,173,214,172, 83,223,
+138,170,210,103,223,251,186,119,222,188, 87, 0,128,124,171, 94,111,212, 32,130,241,136,138, 16, 14, 61, 19, 73,114,231,192,230,
+ 48,112,206,156, 63,241,194,133,233,227,151, 23,166,242,229, 91,118,110,124,239,187, 62,162,165,186, 91,197, 25,175, 85,229,161,
+ 95,174, 20, 32, 34, 88,146, 57, 99,126, 24, 0,193, 1, 68, 64, 0,132,136, 16,220, 15, 60, 46, 4, 15,125,130,209,196,220, 2,
+ 38,170,225, 6, 66, 8, 12, 33,227,156, 49, 6, 17, 76, 69, 53,132,144,111,214, 60, 63,236, 72,167, 94,127,205, 86, 33, 4,113,
+109, 35,136, 68,162,138,162,200, 18,132, 68, 75,182, 35, 73, 93,153, 63,119,106,122,113,186, 80, 89, 40,215,155,166,253,177, 55,
+221,121,237,205,111,243,172,134, 85,152,146, 35,105,136,144,224,172,222,178,135, 17,130,136,184,142, 73,185, 96, 52,100,212, 71,
+ 8, 1,132,121,224,120, 65,200,185, 16,140,114,206, 11,181, 6,128,130,200, 50,227, 28, 66,192, 56,167, 92, 16,132, 50,241,168,
+ 76,136,107,213,171,134, 25,112,212,215, 53, 6,192, 5, 18, 50,166, 74,114, 76, 83,101, 45, 35,107, 73,203, 40,189,122,105,114,
+ 98,161,176, 82,107,150,155,173,182, 68,228,107,127,244,199,233,238,177,210,228, 97, 76, 20, 53,145, 69, 68,225,140,249,110,203,
+246,124,132, 37, 8,209,114,113, 69,147, 36,193,169, 99,183, 52, 89, 66, 8,133,142,238, 5, 20, 33, 8, 32, 98, 0,184,126, 32,
+ 56,143,104,145,144,185, 92, 8,202, 57, 19, 76, 37, 82, 38, 30,149, 8, 54,108,183,172,155, 45,207, 67,152,172, 78, 72, 80, 60,
+162,170,209, 52,103,225,153,179, 71, 95,185, 60,183, 82,211, 27,166,237, 5,225, 7, 30,184,235,166,219,223,106,233,229,217,227,
+223, 76,119,172, 81, 98,109,136,200, 0, 0, 26,120,245,102, 29, 35,184,250,241,202, 74,126,176,179, 3, 17,165, 82,175,167, 19,
+113, 0,161,221,106,120, 33,141, 42,114, 64,169, 16, 64, 0,193, 89,152,136, 70,124,195,228,140,115,206,129,128, 81, 85, 73, 69,
+ 53, 4, 97,177,217,106, 88, 14, 11, 2,223,105, 1, 0, 8, 4,192,241,131, 43,133,203, 39,167, 23,230, 75, 53,195,241,130,144,
+222,182,107,211,187,222,241, 97, 36,201, 83,199,191, 31,139, 68,115,131, 59,136, 22, 67, 8, 67,128, 24, 13,124,179,182, 88,169,
+119,183,181, 33,132, 57, 11, 75,205,214,238, 13,235,212, 88,118, 97,226,210,248,208, 16, 16, 64,183, 90,140, 49,130,145,227,249,
+ 2, 0,140, 16,103,129, 36,168,233, 7, 84, 8, 38,196, 42, 10, 81, 77, 9, 40, 91,174, 53, 29, 63, 76,197, 35,133,252, 44, 4,
+144,204, 20, 42, 51, 87,102, 42,186,105,185,126, 64,233, 27, 14,236,190,239,117,239,210,162,201, 43,167,159,246,237, 70,247,240,
+ 86, 53,158, 69, 68,134, 16, 1, 8, 5,167,161,103,230,243, 87, 10,117,227,234, 29,123, 33,150,234, 43,147,148,241,246,142,126,
+ 34,199,138, 13,253,224,213,125, 52,244,154,150, 3, 33, 36, 24,121, 65, 8, 1,148, 8,102, 65, 0,104,224,248, 62, 68, 8, 10,
+ 40,203, 56, 29,139, 40,132, 24,142,187, 92,109, 42, 18, 73, 69,213,195,231,167, 0, 4,164,172,155, 78,163, 30, 83,200,187,239,
+185,227,166,155,239,103,140, 93, 62,115,216,104,228,199,214,110,143,143,237,194,146, 2, 33, 18, 64, 64, 8, 5,231,190, 99, 22,
+231,207, 94, 92, 40,100,227,209,116,215,168, 16,224,240,171, 39,187, 51,113, 46,160, 99,214, 4, 16,106, 60,219,200, 95,118,188,
+ 32, 25,213, 16,132, 94, 16, 34, 4,101,140,105,232,176,192,117,252, 80,149,101,140, 97, 92, 85,226,154,202, 5, 47, 54,140,154,
+ 97, 14,230, 50, 64,136, 99,147,115,160,125,128,236, 24, 31,121,251,109, 31,140,101,251,141,234,242,147,143,124,129, 32,178,125,
+219, 85, 99,155,247, 97, 73, 1, 16, 9,193, 1,128, 8, 2, 78,169,107, 84, 86,102,142, 95,152,207,215, 76,235,193, 59,239,193,
+146, 82,156, 59, 55,185, 88,252,181, 7, 31,148,213,232,233, 51,175,140,247,118, 1, 1, 11,165, 60,101, 92, 38,132, 11, 17, 80,
+134, 32,196, 24,211,192,133,140, 57,126,160,200,178, 66,164,100, 52, 34, 75,164,229,248,139,149,134, 31,210,209,158,142,138,110,
+186, 94,168, 10, 64,186,187,135, 39, 47, 30, 63,121,233, 43, 27, 6,122,175, 61,112,175,150,104, 71, 8,115, 8,225,107,131, 75,
+ 4, 32,160,190,211, 42,205,204,205, 78, 92, 41, 84,203,122,235,186,173,235,219,250, 55, 81, 71,255,203,239,125,119,211, 80, 79,
+ 58, 55, 40,168,119,126, 33,255,224,109,119,178,208, 89,169,235, 24, 35, 85, 38,140,243,144,177,213,179, 11, 66, 31, 33,232,248,
+ 97, 38, 46,162,170, 28,143, 40,140,243,149,106,179,212, 48, 52, 69,238,202, 36,206,206, 46, 15,119,101,243, 64,160, 87, 78,190,
+236, 5,244, 61,239,248,192,129,219,223,169, 37, 59, 0,128, 92,112,193,168,224, 92, 8,192, 89, 96, 85, 23,230,207, 61,243,234,
+217,227,151, 22,139, 13,211,218, 61, 62,180,105,239,189, 64,240,111,127,247, 43, 4,163,123,238,122, 11, 38,100,110,234, 85, 77,
+150,226,233, 92,171,158,111, 90,142, 68,176, 42, 75,148,113,198, 56,132, 16, 35,228, 7, 20, 0, 24, 80,138, 49,138,105,170,132,
+113,211,180,231, 74, 85,219, 11,186,210, 9,140,208,153,217,229,155,119,108, 0, 0,144,253,251,111,217,187,123,143,239,180, 4,
+180, 48,145,132, 0, 16, 8, 1, 32, 99,129,171,151,107,203, 19,139,165, 74,169, 97,152,158,255, 66,154,160, 0, 0, 32, 0, 73,
+ 68, 65, 84, 15, 33,216, 53, 62,180,227,218, 7, 32,196, 47, 61,253,213, 75, 75,133,247,189,238, 94, 37,154,242,205,218, 11,103,
+207,239, 30, 31,134, 8,231,139,139, 1,101, 10, 33, 4,227,144,113, 14, 4,130, 16, 99,228, 5, 33,231, 28, 35,132, 33,146, 9,
+118,253, 96,161,210, 44,235, 45,140, 96, 95,123,166,164,155,134,227,142,244,246,130,179, 43,132,134, 1, 0, 64,137,196, 0, 64,
+ 64,112,193,194,192,179,157,198,114,181, 52, 95,168, 55,203, 77,211,116, 61, 0, 64, 76,147,119,140,141,174,217,126, 51, 34,234,
+185,151,191,251,196,137,243, 15,222,112, 77,207,218,171,169,239, 92,185,120,212,246,130,145,145,205,212,179, 22, 43, 13, 9, 33,
+ 69,150, 16,132,140, 50, 40, 0, 4,128, 32,100,251, 65,200, 89, 92, 83,184, 16,142, 31,180, 28,119,169, 82,247, 2,218,145, 74,
+164, 98,145, 87, 46,205,110, 28,232, 90,101,126, 19, 40, 24,132, 16, 32, 41,116, 90, 78,179,160, 87, 23,106,141, 90,213, 48,235,
+134,109,186, 62, 7, 34,166,202, 61,109,169, 45,155,118,103, 7, 54, 3, 0, 78,189,240,205,111,189,112,236,254,107,182,173,219,
+117, 27, 11,125,171,190,116,100,226,242,198,129,110, 89,139,235,165,153,124,205,200,165, 98, 42, 33, 2, 8,202,249,106, 79, 4,
+ 35,104,187,126, 16, 50, 85,150, 28, 63,108, 57,110,181,101,233,150,131, 49,234,201, 38,221, 32,156, 43, 86,223,127,247,117, 47,
+159,191,128, 32, 36, 88,214, 56, 13,106,139,231,170,165,249,138, 97, 53, 76, 71,183, 29,215, 11, 56, 16,154, 44,119,167,226,227,
+253, 61, 67, 27,246, 43,241,182,208, 49,159,125,242,107, 47, 93,156,121, 96,223,142, 77,187,110, 1,156, 7,142, 62, 53,121, 74,
+183,157, 13,195, 59, 57,163,213, 70,173,214, 50,199,122,114,178, 68, 24,227,156, 11, 8,161, 0,128, 96,220,114,220, 32,164, 92,
+ 0,211,117,109, 47,104,154, 54,227, 60, 27,143,101,147,241, 75,139,133, 76, 34, 54,144,107,251,244, 35,135,226,253, 99,196, 40,
+205, 28, 63, 52, 93, 49, 44,195,118, 45,215,243, 66, 10, 4, 80, 21, 41,151,136, 14,117,180,141,142,239, 72,118,143, 35, 68,154,
+ 43,147,127,243,200,183, 13,199,123,227,129, 93, 35,235,174,193,146, 28,250, 86,125,229,210,241,203,243,163,221, 29,241,116, 87,
+232,181, 42, 77,195,241,195, 68, 68, 37, 4,211,213, 0, 1, 0, 16,130, 96,100,216,110,200, 88,200,168,237, 5,166,235, 5,148,
+169,178,212,211,150, 10, 41,155, 90, 41,191,241,192,206, 83, 87, 22, 35, 50, 17, 0,144,185,124,209, 36,204,241,195,128, 82, 0,
+128,166, 72,217,120,172, 63,151, 30, 25, 28,109, 31,220, 74,212, 56, 11,220,139,175, 62,250,240,161,151,251,219, 51,247,237,221,
+218, 51,180, 85,210,162, 52,240,236,250,242,133, 43, 87, 12,199,189, 97,235, 90,132,136,109,148,202,134,137, 17,210, 20, 25, 67,
+ 24, 80, 10,128,128, 16, 50, 33,100,130,155,150, 11, 33,244, 2,234, 5, 65, 16, 50,140, 80, 54, 17,203, 38, 99, 19, 11,133,182,
+ 68,116,195, 64,215,199,190,244,253, 53,221,217,138, 0,196,114, 61, 2, 67, 46, 68, 68,150,219, 18,209,254, 92,102,184,111,160,
+ 99,120,187, 28,205, 0, 32,140,226,229,103, 14, 61,113,108,106, 97,239,186,225,109,107, 6, 50, 61,107,165, 72,146,211,208,179,
+234, 43,203,211,103,231, 86, 70, 58,219,211,169, 12,163,190, 97, 26, 21,221, 76,197, 52,140, 17,132,144, 50, 46, 4,192, 8, 82,
+198, 8,198,186,237,168,178, 20,132, 97,200, 56,130, 32,174,105, 61,217,180,105,123, 75,149,198, 59,111,217,251,252,217,169,100,
+ 68,237,207,101, 42, 77, 64,184, 16,138, 34,181, 39, 98, 3,237,153,225,190,254,246,225,237,114, 52, 13, 33,244, 45,253,210,169,
+167, 30, 57,122,154,113,113,215,158,205, 35, 61,221,241,246, 33, 73,137, 11, 70, 67,207,210,139, 51, 23,230, 11, 97, 72, 71,186,
+179,146,172,176,192,105,217,110, 69, 55,199,123, 59, 94, 27,254, 49, 14, 4, 80, 37,201, 15, 41,132,176,101,123, 0,192,144,114,
+ 4, 97, 76, 83,186,219, 82, 49, 85,126,254,220,212,230,225,222,254, 92,219,167,127,112,104,231,216, 64,203,246, 0,212, 72, 91,
+ 60,118,205, 72,110, 96,112, 60,211,187, 94,142, 36, 32, 64,161,111, 45, 93, 58,242,196,209,227,151,150, 75,219,134,122,119,175,
+ 29,202,101, 59,213,100, 39,145, 85,193, 40,165,158, 93, 95,158, 45, 86,166,243,149,193,142,182, 76, 44,202, 57,103,129,165, 59,
+ 94,195,180,187,210, 73, 33, 4,227, 60,164,140, 11,209,158,138,181,108,151,114,142, 17, 10, 41, 69, 8,198,101,181, 35,157, 72,
+ 69,181, 51,115,203, 18,198,111, 56,176,235,143, 31,126,124,253, 64,119, 79, 91,250,165,137, 25,212, 57, 68,214, 12,141,238, 60,
+120, 27,150, 53, 0, 68,232,182,242, 51, 39,159, 62,122,244,204,236, 74,103, 38,241,186,189, 91,135,187,114,177, 84,167,164, 37,
+ 32,194, 44, 12, 4, 15,125,187, 89,170, 85, 38,151, 75, 16,130,254, 92, 90,150, 8, 15,221,192,247, 45,215,179, 92, 63, 25,211,
+ 86, 35, 70, 72, 41,101,188, 51,157, 92,172, 52,227, 17, 37, 21,211,188,144,166,162, 90, 71, 58,129, 33,186,176,144, 47,212,244,
+223,122,243, 93, 47,156,159,178, 28,127,164,171,125,185,218, 72,199, 34, 6, 0, 68,141,103, 17, 38,174, 81, 90,186,124,236,249,
+211,231,207,204,173, 36, 52,245,250,173,107,215,245,119,101,146, 41, 57,154,193, 68, 21,156,113, 74, 57,243, 89,224,182,244,202,
+108,177,154,175, 53,251,115,153,116, 44, 2, 0,160, 97,224, 82,106, 58,126,200,185, 68, 48,227, 2, 80,238, 6, 97, 64,153, 38,
+ 75,115,229,250, 0, 73, 67,136, 86,109,171,162,155, 11,229,186,227, 7,191,251,150,123, 46, 47,229,191,253,210,169, 27,183,174,
+211, 20,105,161, 92,167,140,195, 24, 32, 86,125,233,212, 11, 75,199, 46,207, 94, 92, 44, 98, 4,119,143, 13,108, 24,232,105, 75,
+ 68,163,170,130, 37, 85, 48,198,184,195, 5, 19,212,167,161,231,251, 94,161, 97,204, 22, 42, 8,194,174, 76, 82,150, 36, 46, 4,
+227, 34, 8, 66, 55, 8, 49,132,156, 3, 46,184,224,194,116, 60,198, 57,229,188, 35, 21, 55,108,151, 11, 97,123,126,163,101, 49,
+ 46, 54, 12,116,221,125,213,214,207, 63,241,226,201,233,197,187,174,218,236, 6,116,105,165, 44, 75,164, 98, 52,211,237, 0,222,
+125,227, 1,225,123, 94, 16, 40,178,212,145, 78, 36, 34,154, 76, 86,135,101, 8,175, 14,203, 32, 16, 66, 0, 1, 24, 23, 65, 24,
+ 86, 91, 86,190,166,199, 53,181, 51,147,140,107, 10, 70, 72, 0,225, 5,116,185,210, 88,174, 53,175, 90, 55, 44, 56, 23, 96,149,
+ 16, 10,130, 48, 12, 40, 3, 16, 40,146,164, 73,146, 44,145, 68, 68,181, 92,255,244,236, 18,101,108,172,167,195,176,221,168,170,
+232,182,195,185,104, 57, 94, 44,219, 1,247,239,223,223,108, 54,117, 93,255,121, 27, 11,253,175, 21, 33, 68, 42,149, 74,167,211,
+ 4, 0, 96, 24,198,242,242,242, 47, 64,249, 31, 73,158,233,116, 26,253, 2,136,255,205,134,101,191, 0,232, 23, 0,253, 2,160,
+255, 95, 9,249,183,219, 58, 22,137,100, 98, 90, 91, 34,214,211,158,233, 76, 37,210, 49, 45,170, 72, 64, 8, 26, 4, 1, 13, 41,
+165, 66, 8,136, 16,198, 88, 34, 68,150,100, 6, 68,203,241, 29,159, 46, 85, 27,165, 70,211,112,252,122,203, 54, 29,231,255, 11,
+ 0, 65, 0, 0,132, 0,128, 7,111, 62,184,111,188,191,217,168,214, 90,118, 16, 82,132, 96, 68,145,210,177,104, 91, 58,149,206,
+118,196, 98, 41, 9,242,208, 49, 45,179,233,250,126, 64, 41,125,173,176, 5,171,156, 41,210,158,146, 8,129,210,168,203, 97,163,
+101,249,174, 21,147,112, 91, 34,166,168,234,151,158, 61,249,204,169, 9,202,216,191,119,176,223,191,127,255,194,194,194, 63, 70,
+ 33,248, 9,105, 75,196,239, 59,176,111,203,232,112, 46,149,136, 41,114, 50,149, 38, 68, 54,205,198,242,210,236,114,177,216, 52,
+ 45, 1, 96, 58,166, 14,247,246,166, 50,157,106,188, 45, 30,141,249,102,213,168, 23,245,150,238,250, 1,227,130, 96,164, 74, 68,
+ 83,100, 85, 81, 9, 33, 8, 66, 32,184,224,156, 11,206, 57,103, 66, 8, 33,248,106,195, 86, 8, 1, 0,130, 16, 33,196, 4,176,
+252, 48,161,144,136,166, 78,230,235,127,244,141,199, 43,186,249,111, 13, 77,127,127,255,224,224, 32,249,167, 51,165,157,235,214,
+ 94,191,123,215,125,215, 93,151, 74,166, 56, 99,148, 81,140, 8,194,196,243,221,114, 97,110,226,252,137,249, 66,222, 13, 88, 76,
+149,250, 59, 59,175,222,190, 39,147,235, 7, 88, 2,212,107,150,102, 75,115,103,230,253, 0, 66, 16, 85,213, 92, 91,123, 34,213,
+161, 68, 18, 66, 0, 70, 3, 78,125,206, 25, 16, 76, 48,202, 89,192,105,192, 89,200, 56, 99, 92, 48,206, 66,202, 61, 26, 58, 94,
+ 96,121,190, 23, 80,130, 81, 71, 42,222,155, 78,105,209, 68,195,246,198,123,187, 31,253,195,223, 14, 41,251,204,247, 30,253,206,
+145, 83, 65, 72,255,189, 45, 40, 21,143,125,252, 61,239,190,227,192, 13, 16,225,213,163,132, 16, 66, 8, 57,163, 65, 72, 27,213,
+229,185,203, 39,167,151,243, 94, 64,163,170, 50,216,217,190,113,211,158, 88,166, 23, 99, 28,122,102,105,254,116,169, 82,118,130,
+ 0, 35,146,137,199,186,186,135, 18,157,107,104, 24,112, 22,200, 74, 84, 8, 30,186, 45,223,106, 4, 78, 51,240, 29,202, 24,227,
+156, 49, 46,192,107,246,242,163, 71, 33, 16, 2, 8,128, 0, 64, 0, 65, 41,211,109,247, 74,169, 46, 43,234, 13,219,183, 37, 83,
+237, 51, 75,243,163, 99, 91, 36,132, 29,163,116,241,242,217, 35,211, 43,223,122,225,196,143,207, 71,127,198, 22,244, 35, 10,210,
+239,190,231,221, 15,222,121,175,172,168,156, 49, 0, 4,132, 8, 8,206, 89,200, 5,104,181,244,202,252,185,137,169,139, 53,195,
+ 34, 24,117,183, 37, 55,109,220,209,217,191,129,200, 26, 11,253,218,210,249,252,202, 21,221,116, 56, 0,233, 88,100,120,205,166,
+ 76,247, 24, 13, 3, 34, 41, 68,209, 8, 13,125, 71,247, 90,149,192, 53,168,103,210,192, 9, 41, 99,124,117,212, 33, 94,123,184,
+ 3,192,223,251, 17, 0, 0,176,218,164, 39,152,180, 37, 98,153,120,180,229,184,143,189,252,114, 34,157,189, 99,223, 65,179, 81,
+ 44,214,171,235,199,183,110,219,118,160, 59, 59, 57,152, 77, 6,190,127,113,169,244,248,169,201,213,230,214,207,204,130,174,189,
+246, 90,230,218, 31,122,224,129, 93,219,246,176,191,213, 21, 0,193,105, 0,132,112, 3,218, 50, 42,149,133,137,137,233,203,150,
+ 23,196, 53,101,180,191,119,221,198,189,241,246, 1, 33,128,103,148, 10,115,103,138,149,162,237, 5, 10,193,157,185,142,222,145,
+237, 74, 44,195, 25,149,181, 24, 0, 32,116, 91,129,107,133,158,197, 66,151,135,190, 16, 92,112,202, 89,200,105, 64,105, 16, 82,
+ 26,210, 85,148,196,143, 46, 53,248,219, 55,215,175,153,149, 0, 2, 8, 0, 4, 4, 16, 64, 72, 25,155, 43,214, 10, 14,127,240,
+166, 27, 41,101,199, 47,158,187,102,243, 86, 89,137, 52,138,211,199, 38,103, 41,163,142,227,214, 45,231, 74,169,113,124,102,217,
+ 15,130,127,189, 5,193,125,251,246, 61,112,221, 13,119, 93,179,143,115, 1, 17,226,140,178,192,133, 8, 91,158,223,106,150, 43,
+139, 23, 46,205,206,249, 33, 77,199, 34,235,134, 6,214,108,190, 78,137,101, 4,103, 86,109,177, 56,119,182,220,108,184,126, 24,
+ 81,164,222,174,222,238,209, 61,144,200, 16, 34, 34,201,161,103,251,102,221, 51, 43,190,173,123,174,233,133, 33,165,175,249,151,
+213,222, 48, 65, 72, 38,132, 16, 68, 48, 6, 64, 56,126,184,202, 8, 35, 24, 17,140, 49,132,171, 79,212, 0,128,171,240, 49,198,
+153,224, 16, 66,130, 48, 66, 48, 95,107,156,202,235,239,184,253,246,168, 68,126,248,202, 75,187,199,199,218, 82,153,114,225,202,
+ 75,151,230, 52,130, 24,231,134,237, 38, 35, 90, 71, 38,177, 88,107, 45,214,140,166,105, 79, 45, 23, 43,186,249, 47, 50,174,191,
+187, 98,156, 81, 33, 4, 0, 34,176,117, 44,201,110, 16, 6,110,125,241,242,137, 75,243, 11, 94, 24,102,226,209,221, 27,215, 15,
+111,220,175, 68, 83,156,134,173,210, 76,121,241, 66,165,169,123, 97, 24,145,200,218,145,209,174, 53,187,177,164, 0, 0, 1,103,
+190,163,183,154, 5, 91, 47, 90,142,101,185,190,227, 7,142, 31,184,126,232,135,161, 23,210,144, 50,202,216,107,113, 29, 33,137,
+224,152,170, 36,163,106, 42, 26, 73, 68, 53,193, 69,181,101, 49, 46, 82, 81, 85, 33,146, 68, 16,128, 16, 35,204,133, 64, 16,114,
+ 42, 92, 63, 8, 41,143,105, 74, 95, 46, 11, 32,250,222,161,231,223,116,235,157, 55, 95,181,239,185,227, 47,239, 28,233,203,164,
+115, 91, 7,156,199,207, 78,183, 37,147,153, 88,132, 11, 16, 82,182,127,253, 80, 38,219, 67,228, 88,232,232, 75,249,249, 39,207,
+ 78, 63,114,252, 66,203,241,254, 5,156,179,254,254,254,245, 67,195,107, 58,115,140, 6, 33,227,182,101,148,230,207, 29, 57,250,
+252, 66,169, 18,211,228,237,227, 99, 87,239,187,187,107,100, 59, 66,200,170, 46, 21,102,142, 46, 45, 76, 53, 90,166,132, 97,111,
+103,207,216,214,235,219,122, 55, 64,136, 56, 13,189, 86,165, 85,154,110, 20,167,106,181, 66, 77, 55,170, 45,187,222,178,234, 45,
+187,106,216,245,150, 85,107, 89,117,211, 54,108,215,246,124, 33, 0,132,144, 11, 33, 56,160,140,187, 65, 96,216, 94,189,229, 48,
+ 46,186, 50, 9,137,224,197,114,131, 50,166,201,146, 76, 48, 33,152, 96,132, 17, 34, 8, 35,132,252, 48, 92,169,233,130,139,222,
+108,186,161,235, 51,133,210,246,117, 27,219,162,218, 51,231, 38,123, 98, 56, 30,141,196, 36, 60, 49,183, 84,110, 57, 93,233,120,
+ 68,150,252,144,134,158, 69, 61,221,245, 44,202,133,140, 17, 34,146,132, 68,205,252,231,243,207,100, 50,153, 74,165, 8, 0, 64,
+ 48, 10, 32,106, 52, 74,174, 81, 62,118,234,104,189,101,199, 52,121,203, 72,255,250,205,215, 36,114,195,130, 83,187,190,210,204,
+ 79, 86,106, 69,219, 13, 32, 2,157,153, 84,215,224,230,120,199, 16, 16, 48,116,205,192,214, 29,163,104,235, 37,211,113, 44,215,
+179,188,192,118,125,211,245, 45,207, 51, 29,207,241, 3, 77,145,215,246,117, 15,245,118,247,116,245, 75,146,194, 5, 23,140,113,
+ 22,178,192, 9, 3,215,245,220,150,227, 90,174, 7, 33, 40, 54, 90,169,152,182,105,168,251,226, 66,193,241,130,225,174,108, 92,
+ 82, 49,145, 1,128,156,133,178,132, 37, 66, 16,132, 39,103, 22,155,182,179,125,164,239,219, 71,207, 29,187,112,102,239,214,221,
+ 7,215, 25,135,103, 22, 15, 12,180,117,101,146,187,198,250,207,204,174, 76, 46, 21, 55, 14,118, 71, 53, 37,160, 52,176,104, 72,
+153, 19, 4,148,243,246,136,100,229, 58,214, 50, 62, 83,110,254, 52,105, 39, 1, 0,216,182,169,151, 23, 78, 28,125,110,182, 84,
+ 37, 24,175,233,204,110,221,178, 43, 55,176, 9, 34,236,155,117,163,124,165, 94, 89,212, 45,151,113, 30,213,228,142,142,190, 76,
+239,122, 73,141, 49,223, 11, 29,195,107, 85,156, 86,209,180,109,219,243, 77,215,183, 28, 79,183, 93,195,113, 91,182,219,158,140,
+222,124,213,206,145,209,173, 0, 0,207,172,217,122, 89,175, 45, 9, 14, 16, 20, 24, 35,132, 37,140, 9, 68, 72, 83,100, 85, 38,
+157,153,180, 31, 4,166,235, 10, 33,108, 47, 88, 63,216,115,252,242,220,124,169,182,174,191, 75,214, 20,136, 85, 0, 56,161, 33,
+ 33, 54, 70,112,215,216,192,145, 75,115,170,162,220,180,121,244,145,163,199, 71,122,251,251,134, 54,174,111,181,206, 21,234, 27,
+187, 51, 93,153,148, 23,210,133, 82,125,169,210, 64, 16,101,147, 81,140,113, 16, 82,215, 15,189, 32,148, 9,193,126,115,120,100,
+ 13, 80, 11,147,115,255,124,122,140, 7, 6, 6,228,176, 53,113,225,116,177,161,119,164,227,215,110,217,188,253,170,219, 18,185,
+ 1, 22,248,173,234,124,101,225, 92,185, 90, 52, 29, 15, 99,212,158,140,119,245,173, 77,228, 70, 32, 66,161,219,114,141,162, 93,
+ 95, 50,155, 37,195,178, 13,199,109, 90, 78,177, 97, 20, 26, 6, 4, 98,199,250,181,183, 30,188,121,203,134,237,152,123,197,229,
+203,139, 11,211, 87,150,230,103, 11,165,249, 98,117,169, 82, 43, 27,173,166,233,216,158, 23, 6, 1, 66, 66,194, 36,164, 52, 8,
+ 67,137,144,120, 44, 1, 1, 39, 8, 73, 68,138, 40,210,228,114, 41,161, 41,169, 68, 82, 82, 98,152, 40, 8, 75, 8, 97, 12,132,
+132,160, 42, 73, 19,203,149,117,189, 29,129,239, 21,117,107,108,112, 56, 25,139, 79,173, 44, 19,206,226,154,130, 49, 6, 0,248,
+148,250, 97,184, 26, 25, 67,198, 87,137, 83,171,237,123, 55, 12,239,222, 54,246,190,219,175,121,253,190,237,187,198,250,101, 66,
+150,106, 58, 99,252,127,188, 98,120, 96,112, 48,180,173,132, 4,182,175, 25, 60,184,239,166,158,209,157, 0, 17, 79, 47, 55,150,
+207,151,139,115, 77,211,166,156, 71, 85, 37,215,214,150,233, 26, 83, 98, 25,206, 2,223,110,184, 70,201, 49, 10,166,101,182, 28,
+175, 97, 58,197, 70,171,105,217, 61,237,217,155,174,222,183, 99,199,190,100, 44,214, 40,205, 78,207, 92,152, 92, 88,188, 82,168,
+ 92, 94, 41, 47,148,235,134,229, 8, 0, 98,170,146,138, 70,146, 81, 53, 34, 43,178,132,129,128, 8, 1, 69,150, 86, 31,161, 72,
+152, 68,180,152,224,148, 96, 28,141, 68,106,186, 97,123,126, 87, 91, 70,141, 36, 17,145, 33,194, 2, 64, 32, 24,224, 20, 35, 88,
+119, 66, 6, 96,111, 58,122,114,102, 97,253, 96,127, 50,209, 6, 3,251,116,190,214, 17, 37, 4, 99,136,160, 16, 34,160,140,114,
+ 14, 0,224,156,135, 33,243, 66,234,135, 52,164, 84,183, 28, 85,150,183,173, 25,236, 25,220, 52,208, 59,184,169, 59,217, 22,215,
+ 46,175,148,127,156, 94,253,183, 62, 72,136,206,116,226,158,171, 54, 15,172,219,139,137, 18,184,150, 93, 91,108, 86, 22,116,219,
+ 9,194, 16, 99,146,136, 40,201,100,155,150,236, 68,136, 4,182, 30,186,173,192,109,122,158,107,121,126,203,118,155,182, 35, 33,
+180,123,227,250,246,174, 53, 66,112,215, 40,205, 93,124,121,165,222, 44, 53, 91, 53,195,106,152,182,229,250,138,132,123,219,211,
+227, 61,157, 61,217, 84, 76, 83, 37, 34, 65,132,128,224, 66,240,213,220, 71,146, 35, 17, 64, 90,245, 26, 16,102, 71, 71, 82,102,
+ 33, 16, 76, 82,163,153, 68,180, 84,215, 93,223, 75, 64,132,177,196, 33,194,156, 50,136, 17,130,138, 68,218, 85,184,228,194,158,
+ 56,193, 64, 92,152,186,116,240,234,235,134,250, 6,206, 45, 23,102, 43,198,112,123, 50, 34, 75,137,136,202, 5,247, 3,234,248,
+ 1,193,136, 50,190,250,158, 28, 33, 40, 33, 48,189, 92, 44,214,234,153, 78,170,198,178,185, 62,121,167,105, 78,213,237,199, 94,
+ 58,254,147, 62, 72, 8, 49,190,118,203,208,198,253,156, 81,187, 89,108, 85,174, 52,155,117,219,243,185, 16,170, 34, 39, 34,106,
+ 44,158,145,180,180, 96,212,247, 76,234, 91,129,103,185,126,216,114, 61, 63, 8, 18,209,232,248,216, 38, 53,154, 14, 92,163, 94,
+184, 92,169, 55, 10, 13,189,216, 48,170,134, 85,111,217,166,235,201, 18,222, 56,208,189,103,124,168,183,187, 63,146,200, 66, 44,
+ 11,193, 5, 11, 5,163, 66, 48,193,153,224, 20, 8, 1, 17, 81, 37, 13,212,170,150,235,167, 3, 79,146,100, 78, 3, 44,105, 81,
+ 69,225, 2, 4, 65, 0, 16,132, 8, 35, 8, 89, 8,133,224,130, 11,136, 96, 50, 22, 89,106,209,186, 3,250, 82,209,151, 39,103,
+174,222,180, 85,142,164,182,245,180, 29, 94,104,100, 29, 87,149,101, 77,145, 3, 74, 25,227,148, 50,198, 56, 19,130, 50,190,154,
+ 52, 68, 20, 73,183,220,115,243, 43,131,189, 3, 68, 77, 96, 73,237,234,232, 25,205,174, 0,136,128,224, 63,233,164, 17,150,104,
+224,218,141,188, 94,153,215, 45,203, 15, 41,130, 48,166,200,177,136,166, 69, 18,152,168, 44,176, 89,224,132,190,227, 83, 26,132,
+ 33, 0,176,187,163, 59,150,234, 4, 0,184,102,117,185, 56, 87, 53,204, 98,163, 85,108,232, 21,221,212,109,183,229,184, 18, 38,
+ 59, 70,251,110,216,190,185,111,104,131,154,236, 64, 68, 5,128, 83,223, 13,220, 86, 24,250,130,115,132, 9,194, 10, 0, 92, 8,
+ 1, 33,196,130, 35,132, 45,219,113, 93, 71,142,167, 32,162, 8, 73, 4, 19, 0, 1,227, 28, 66, 4, 17, 20, 28, 0,193, 57,245,
+ 41,231,156, 9, 69,150,152, 93,183,218,122, 58,211,137,195, 19,179, 75,249,249, 53,163, 91,122,186,251,181,185, 66,205, 65, 93,
+132, 72, 8, 43, 68,242, 48,117,121,184, 90,215,172,118, 87, 16,130,170, 36,167,227,208,114,189,124, 41,175,198, 50,146, 26, 67,
+ 24,182,169,232,205,183, 28, 44,229,151,167, 10,213, 82,211, 88, 37, 60,172,190,214,180, 91,133,169, 70, 61,111,186, 94,200,152,
+132,113, 68,145,163,170, 34, 73, 26, 16, 32,244, 77, 78,125, 74, 25, 0, 32, 18, 77,100,147, 93, 8, 75,129,163,215,138,211,149,
+134, 81,214, 91, 21,221,172,183,236,202,107,174,215,151, 8, 62,184,121,236,230,171,247,118, 15,109,150,163,105,136, 80,232,217,
+190, 85, 95, 45,217,125, 71, 55,235,203, 66,128, 68,166, 75,142,164, 16,146,128, 0, 0, 64, 78, 61,215,247, 93,159, 10, 1, 0,
+224, 16, 98,128, 49,231, 12, 2,136, 16,132,136, 64,136,160,224,140,250, 97,232,135,148, 50,193, 49, 66,190,101,152,180, 55,171,
+ 72, 9, 77, 62, 55, 51, 59, 50,188, 78,142, 36,215,228,210, 83,229,102, 91,200, 48,134, 24, 35, 66, 16, 8, 5,229,140, 51,193,
+ 24, 91, 37, 50,168, 18,209, 20, 41,174,170, 1, 13,156, 86, 69,101,212,119, 76, 8,145,140,225,123,110,222,147,138, 70,235,166,
+253,212,116,105,177,229, 19, 0,161,215,170,212,106,158,237,249, 66, 8, 77,146, 52, 69, 86,100, 9, 99, 34,128, 96,204,135, 16,
+ 75, 90, 58,162, 37,177,164, 80,207,210,171, 11,229,122,173,220, 52, 43,134, 89, 53,172, 70,203,214,109,199,176, 93,219, 15, 58,
+ 83,241, 55, 30,220,125,253,181, 55,167, 59,135,177,164, 5,158,217, 42, 93, 97,161,135,136, 12, 49,134, 16, 3, 0,161, 16, 94,
+ 72, 13,203,145,148,136, 26,207, 66,136, 87, 75, 10,234,182,154,150, 19,132, 33,196,132,115,134,137, 34,132,112,131, 0, 2,160,
+ 40, 42, 66, 4, 0,200, 56, 13,125,203, 11,130,128,210, 85,254, 8,134,192,242, 2, 16, 21, 29,233,196,149,124,201,119, 45, 34,
+199,186,115,185, 11,197,134,227, 7, 81, 85, 94,237,195, 1, 1, 25,227,175,249, 32, 0, 16,134, 10, 33,154, 44,101, 18, 81,130,
+ 48,245, 29,159,211,150,213,210,109,199,176,124, 89, 86, 51,221, 99, 9,223,234,169,152, 11, 45,159, 0, 0,220, 32,240,130, 16,
+ 66,168, 74,146, 42, 75, 50, 33, 88, 82,136,164, 34, 73,197, 82, 4, 97, 18, 6,118,163,178, 80,172, 86,139, 13,163,212,108,213,
+ 77,219,116,188,150,227, 26,142,103,187,190, 76,208,190,141,163,247, 28,188,110,104,124,167, 20, 77,179,208, 55,171,243,110, 51,
+143, 37, 77,210,226,146, 22, 67, 88, 2, 0, 10, 33, 24,247, 88,232,217,174,167,219,110,142, 82,132, 8, 88, 5, 8,138,106,189,
+ 92, 49,204, 76, 44,162,200, 42,163,129, 28,205, 4,190,221,114, 60, 66,144, 22, 73, 64,132, 4, 0,204,119, 60,167,229, 5, 33,
+101, 28, 33, 8, 0, 20, 0, 52,117,131,107,106, 91, 60, 58,185, 84,178, 44, 35,153,137, 68,148,136,162,200, 45,215,150, 37,194,
+133, 16, 0,112,193, 25,231,148,177, 85,251,148, 48,142,106, 74, 58, 26, 73, 69, 53, 69,146, 40,163,126, 16, 84, 13,179,220, 52,
+189, 0,216, 84, 96, 34, 19, 57,171,168,218,223,181, 92, 37, 66,100,130, 20, 73, 34,114,132,200, 17, 76, 20,128, 80,224,219,229,
+242,210,114,185,182, 84,109, 86,116,179,229,120,166,235, 57,174,239,132,161, 31,132, 18,193,187,199,135,239, 57,120, 96,116,227,
+ 94, 73,141,113,206,140,210, 21,125,242,144, 36,105,106, 60, 27, 73,247, 96,162, 32, 76, 0,194,171,163, 92, 70,125,230, 59,102,
+171, 81, 53,108, 74,169,162,198, 16,145,129, 0, 0,130,192,181,230, 87, 86, 92, 47,136,181,183,201,178,194,131,128, 72, 90,173,
+146,111,154, 78, 54, 25,139,198, 82,171,255, 84,196,183,235,166,235,175,158, 37, 66, 4, 66, 16,134,180,213,168,243,206,158,184,
+166,134,140, 26,166,145, 72,182, 75, 4,167, 83,233,226, 92, 37, 17, 81,129, 16,171, 29,149, 85,150,173,224, 28, 35,164,201, 82,
+ 34,162,166, 98, 90, 92,211, 8, 70,126, 72, 91,142,187, 82,211, 43,134,169,219,190,209,106, 1, 32, 56, 13,131, 32,120, 13, 32,
+ 9,163,168, 42, 19,132, 16, 38,156,133,205, 70,185,216,104, 46, 86,234,133,154, 94, 55,109,203,245,221, 32,244, 67,234,135, 33,
+101,188, 51, 21,191,253,170,173, 7,174,185,161,163,103, 20,171,209,208,181,170, 75, 23,204,250,178, 34,145, 72,162, 35,221,181,
+142,200, 26,194, 18,196,100,149, 0, 10,132, 16,130, 51, 26, 80,223,177,244, 82,161,222,168,183,172,158,108, 42,154,204, 65,132,
+133, 0, 16,128, 90,101,121,161, 92,149, 8,201,101,210, 80, 48, 73, 77, 8, 33,242,149,138, 79,105,174,173, 77, 81, 99, 0,128,
+192, 53,245, 86,211,246,124,202,184, 44, 17,140, 96, 32,132, 31,134,142,227, 8,209,163, 42, 18, 66,168,101,154,156,133, 24, 65,
+ 5, 10,221,246,252,128, 34, 4, 41,231,140, 9,198,133,224, 28, 66, 36, 75, 36,174,169,169, 72, 36, 25,209, 84,153,112, 33, 28,
+223, 47, 54,140,229,106,195,116,124,153,192,136, 44,113, 22,154,205,114,165,217,132,171, 0, 25,182, 55,189, 82, 54, 93,175,222,
+178,171,134,213,104, 89,166,231,251, 1,245, 41, 13, 66, 10,128,232, 72,197,247,111, 89,191,111,199,158,145,209, 13,106,188,131,
+243,208,106, 20, 22, 38, 95,182,154,197,104, 36,150,204,116,117, 13,110, 37, 74, 4, 97, 9, 34, 12, 17, 2, 0,174,182,118, 4,
+ 16,130, 51, 22, 4,161, 99, 24,149,249,229,114,105,161, 92,135, 16,244,117,247,105,241, 12, 68, 18,132,192, 55,235,151,102, 38,
+ 91,142, 55,210,153,205,181,119, 9, 65,149, 88, 86,111,148,150, 42, 53, 77,150,122, 58,123,144,164, 8,206, 77,189,172,155,182,
+227,135, 4, 35,130, 16,193,136,113,238, 6,148,115, 10, 16,148, 48,146, 48,182, 93,135, 81, 31, 8, 78, 0,167, 88,118,124, 95,
+145, 37,198,216,107, 61, 57, 8, 36,130,163,170,146,136,106,137,136,170, 41, 50, 68,192,245,195,170,110, 46,150, 27,149,166,201,
+ 56, 31,237,233,104, 75, 68, 3,179, 58, 53, 63,187, 84,183,128,164, 17, 8,225,229,229,210,244,116,203, 11, 67, 63,100,148, 49,
+202, 24,193,168, 51,147,188,106,195,218, 3,123,246,229,122,215, 97, 69,227, 44,244,204,122,126,110,162, 84,120, 20, 19,148,203,
+180,103,218,251,186,250,215, 33, 73, 69, 88, 66,171,198,242,183,252, 16, 8,225,107,221,119, 26,132,174,229, 52, 11,181,202,226,
+ 74,181,177, 84,109,134,148,110, 31, 27,238, 25,220, 72,148, 8, 16,128,250,246,212,229, 87, 47, 46,149, 84, 89,218, 56, 50, 28,
+ 77,100,105,224, 1, 8,174,204, 79, 55, 45,103,199,232, 96, 58,219, 3, 33,246,172, 90,181, 86, 50, 28, 23, 0, 40, 19, 44, 17,
+132, 33,242, 67,230, 6,225, 42, 37, 6, 35, 76, 48,246,124,159,133, 30,224,148,249,142,237, 5,142, 79, 32, 68,171, 29, 93, 4,
+ 33, 34, 36, 42, 75,201,136,150,140,106,154, 42, 35, 4,189,144,214, 91,246, 82,181, 89,104,232, 78, 16,100,147,209,141,131, 61,
+ 17, 25, 23,171,165, 23, 47,204, 4, 76, 2, 18, 32, 0, 0, 63, 12, 85,193, 7,218,211,235,135, 6,183,109,217,213,217, 51,162,
+197, 82, 8,147,192, 49, 42,203,151,143,190,240, 45,163,213,138,169, 82,103,123, 46,219, 49,216,209,123, 11, 81,162, 16, 19,132,
+241,143,205, 29,197,143, 58,130, 66, 8,193, 57,103, 97,232,152,182, 94,208,171, 75,165,166, 94,172, 25, 21,195,148, 8,222, 57,
+ 62,188,126,203,126, 37,222, 6, 4, 8, 28,227,204,169,195,207,158, 58, 79, 48,222,189,110, 77,223,232,142,192,209,213,120,219,
+210,204,233,201,165, 66,123, 34, 58, 62,182, 1, 73, 42, 11,156, 74,113,174,106, 88, 1,101,138, 36, 73, 24, 43,132, 0, 8, 61,
+ 63,240, 3, 26,215,100, 4, 32, 66, 80, 34,216, 15, 67, 26,184, 0, 8, 30,120, 45, 67,119, 98,146, 44, 17,198, 5, 4,128, 16,
+ 44, 99, 28,143,170,201,168, 26, 85,100,140,160, 23,208,134,105, 47, 85, 26, 43,181,166,233,120,255,111, 43, 87,214, 28,199,113,
+223,251,154,233, 57,119,246, 94, 96,113, 16,132, 72, 16,188, 68, 93, 54, 35,201,162, 21,217,169,114, 94, 82,202, 71, 74,190, 68,
+222, 92,137,147,202, 99,242,148,164, 44, 71, 78, 34, 71,138,100,145,145, 40, 30, 22, 9, 18, 4,136,197, 98, 15,236,238,236,220,
+211,103, 30, 6,164,101, 85,165,242,146,183,185,170,107,106,106,186,251,255,255, 93,148, 24, 59,253, 94,191, 85, 79, 11,246,219,
+111,159, 61, 57,153, 52,123,107, 5, 0, 68, 43,245,231,127,250,225,135,183,222,151, 82,100,203,201,100,116,120,231,243, 95, 14,
+199, 67,165,228, 74,171,189,185,190,117,253,250, 77,219,239, 96,211,134,136, 0, 84,253, 36,213,236, 1, 74,171,223, 99,164, 26,
+104,160,148, 20,162,204,202,100, 22,207,142,230,243,201, 52,140, 79,163,100, 30,167, 5, 19,189,134,255,131,107,215,207, 93,186,
+137, 45, 7, 40,157, 46, 6,159,126,250,209,111,238,239, 57,150,121,235,198,213,215,222,122, 95,113,110,251,237,249,232,233,231,
+ 15,126, 39,149,126,125,119,215, 15, 86,181,146,203,233,225, 96, 58,139,243,210, 36,152, 96, 68, 13,195, 32,164,228, 60,103,156,
+ 75, 65, 13, 23, 86,156, 26, 70, 76, 72,193, 50, 0, 32, 2,128,149, 69, 86, 50,207, 50, 1,128,152, 96, 3, 16,219, 52, 2,215,
+113, 41, 69, 8, 21, 37, 95, 36,217,209,116,113, 60, 11,195, 36, 3, 16,246, 91,193,214, 74,155, 32,248,100, 56,253,237,227, 67,
+207,162, 23,250,237,251,211,140, 64, 8, 31,124,243,217,232,225, 39, 81, 86,186,150,117,113,163,127,249,226,149, 63,122,247,103,
+196,174, 65, 68, 32,128, 21, 40,172,207, 40,134, 10, 42,150, 21,245, 0,206,194, 17,148,150,156,151,105, 25,207,146,197, 48, 92,
+140,231,113,182, 72,179, 40, 45,178,146,149,156,123, 22,125,253,194,185,203,215,223,246, 58, 91, 8, 34,193,178,193,222,157,127,
+249,205, 39,251,163,211,173,110,235, 39, 55,223,218,190,250,174,146,130, 24,118, 52, 61,248,244,206,151,147,101,252,131,157,237,
+245,205, 29, 13, 64, 17,207, 6,163,225,100, 25, 3, 13,108,106, 26, 6,177, 76, 2, 17, 20, 74,103, 37,147, 82, 81,147, 32, 8,
+ 43,149, 56, 23,178,228, 2, 0, 8, 17,164,166, 81,148, 76, 42,109, 16,100, 67, 98, 24,196,181,168, 67, 13,132, 96, 94,176, 69,
+154, 13, 78, 23, 39,243,229, 50,205,165,210,237,154,187,213,107,249, 14,157, 70,201,151,143, 15, 22,113,250,103,111,223,160,245,
+214,189,105, 70, 52, 0,189,206,202,135,239,221,242,155,171,216,180,129, 6, 74,114, 41,185,228, 28, 66, 1, 16,130, 0,126, 39,
+186,180,250, 42, 64, 43,173, 36,147,162,224,233, 50, 15, 71, 81, 56, 90,196, 73,152,102,113, 86,100, 5, 43, 56, 87, 74, 75,173,
+ 93,106, 94,219, 90,219,217,185,209,232, 95,194,166,173,149,136,198, 79, 63,253,175,127,253,228,222,158,101, 26, 63,190,126,233,
+157,183, 63, 8, 58, 91, 74, 9,140, 64, 52,121,246,197,157,207,246, 71,211,157,181,222,245,221,107,132,122,146,231,211,209,193,
+225,120,150,228,101,224,218,148, 16,219, 32,148, 16,160,180,144,178,224, 66,105,109, 25, 70, 5,104, 96,132,184,144, 5, 23, 90,
+ 43,173,117,203,115,164,214, 82,105, 27, 35,106, 16,106, 26,212, 32, 90,131, 40, 43,194, 36, 59,153, 47, 71, 97,148, 22, 76, 72,
+ 85,115,172,141, 78,163, 19,120, 5, 19,247, 14,134, 79,134,211,203, 27, 43,111, 95,190,240,205, 76, 0, 13, 8,208,218,111,244,
+144, 97,103, 89,100, 10, 70, 8,133, 8, 99,108, 84,156, 2,212, 26, 0,173, 43,230, 74,201,106, 6,177, 44,204,227,211, 52,158,
+ 71, 73,188, 76,139, 40, 47,178,162, 44, 24,231, 82,106, 13, 48, 66, 24,163,150,111,159,239,247, 54,207, 95,173,117, 95,193,166,
+165,181,206, 22,195,123, 95,125,242,171,219, 95,103, 37,187,180,222,125,231,198,171,231,175,252, 8,155,182,150, 66, 9, 22,141,
+246,190,248,250,246,189,131,225,102,167,241,214,149,203, 78,125, 85, 43, 30,159, 30, 30,141,199,147, 48, 50, 8,177,169, 65, 77,
+ 98,153, 4, 99,200,165,226, 66, 86,210, 85,203, 36, 85,185,140, 17, 98, 66,228, 37, 83, 74, 75,169, 91,129,151,149,188,146, 35,
+ 99,136,128, 6, 5, 99, 5, 23,203, 52, 63, 93, 38,167, 81,146,149, 76,107,237, 90,116,173, 21,172, 52, 3, 13,192,227,193,248,
+238,211, 65,224, 88, 31,188,182, 91,175,183,178,163, 61, 0,171, 58,200, 48, 29,215, 7, 16, 66,132, 17,194, 0, 66,173,180, 86,
+ 82, 10,174,120, 33,202,148,229,113,153, 45,242, 36, 76,179, 36, 41,202, 36,103,105,201,178,162,172, 76,208, 74,107, 8,161, 73,
+176, 99,153, 46,165, 43,141, 96,125,109,179,221,191, 68,253, 54, 50, 76, 45,101,182, 24, 62,186,255,217,191,221,249,102,188, 76,
+ 94, 89,109,191,113,113,251,210,213,155,110,107, 67,107,165, 56,227, 69,188, 56,217,187,243,224,238,189,103,199,221, 70,237,205,
+221,139,141,222,182, 82,178,140,198,163,201,232,249,116,145,230,229, 74,211,114, 40,165, 6, 49, 13, 67, 3, 32,149, 18, 82, 9,
+ 37, 33,128,212, 48,170,162, 2, 35, 88,112,145, 22, 76,107,197,165,112, 76, 19, 65, 4, 1,100, 66, 10,169,180,214, 37, 23, 73,
+ 94, 46,211,108,153,229, 5, 19, 0, 0,135, 26,189,122,109,181, 25,152, 24, 63,159,204,191,122,122,164,180,186,117,253,226,197,
+141,245,209,244,228,235, 39, 7, 16, 88, 4, 0, 0, 49, 54, 45, 79, 67,160,164, 20,101,198,146, 89, 30,159,150,201, 44,205,146,
+172,200,211,156,165,140, 21, 37,203, 74, 81,112,198,184,224, 82, 41,165, 1,208, 24, 33,203, 52,108,211,172, 57,180, 83,243, 87,
+122, 43,141,149, 29, 59,232, 97,147, 66, 8, 37,231,225,224,225,195,251, 95,254,199,189, 71, 81, 86,188,210,239,252,232,218,206,
+246,133,107, 65,119, 27, 25, 84, 9, 38,121,201,178,229,236,248,219,187,123,123,247, 15, 79, 90, 53,247,205,139, 91,189,213,109,
+ 8, 33, 47,162,197,236,100,112, 26,142, 22, 17, 70,168,230, 88,182,105,152, 6, 49, 48, 86, 26,200, 51,202, 17, 84,165, 77,181,
+ 67, 16,140,210,146,199,121,161, 53, 40,185,132, 8, 98,132,184,146, 44, 23, 82, 41,198,101,206,120, 90,148, 89,121, 22,241,230,
+ 80,163, 91, 15,214,218,117,155,154,195,121,244,213,147,163,164, 40,223,185,188,253,195,221,237,188, 72,255,250,163,207, 38, 28,
+ 89,117,139, 0, 0,128,210,233,124, 16, 78, 14,162,112, 18,167, 73,154,151, 89,201,115,198, 11,206, 75,198, 25,127, 97,148,215,
+186,154,234, 38,193,174, 67,125,139, 6,174,213,174,249,157,238, 90,208,217,180,106, 93,108,216, 16, 33, 45,121, 17,158, 28, 63,
+187,255,229,131,251,119,247, 7,166, 97,236,174,119,119, 55, 86,214,214,182,189,246, 57,195,246, 33,132,146, 21,146, 23, 69, 52,
+ 25, 15,159,220,219,127,254,237, 96,212,244,156,215,183, 55,214,251,231,176,105, 9,158,167,225,120,188, 8,143,103,225, 50,201,
+ 55, 58,141,192,181, 77, 66, 76, 66, 32, 4, 66, 84, 94, 7, 93,173,141, 4, 33, 13, 52, 0,144, 96, 92,148,105,148,101, 16,160,
+156,113, 41,149,144,146, 75,201,132,228, 66,150,140, 23, 47,154,129, 10, 15,234,212,107,253,102,224, 80,115, 52, 95,222, 59, 56,
+ 14,211,226,173,157,115,239,191,186,163,148,250,249, 71,159, 30,159,134,181,118, 87, 1, 64, 0,132,251,143,255,251,227,201,131,
+172,100, 47,171,103, 46,164, 80, 74, 42, 5, 52,168,202, 48,147, 96,106, 26,158,101,214, 28,171,225, 57,205, 32,104,182, 87,189,
+214, 57,211,109, 96,131, 66, 8,149,146,101, 60,157, 30, 63,126,248,232,193,237, 39,135,139, 36,235, 55,131,247,174, 93, 60,215,
+107,181,219,171, 78, 99,205,180,107, 8, 19, 45, 5,151, 92, 20,105, 22, 30,159,156, 60,191,119, 48,220, 31, 77, 27,158,115,125,
+171,191,190,210, 55,172,154, 18,188, 76, 23,139,112, 54, 14,163,209, 98, 41,148,106,214, 92,223,182, 8, 70, 6, 66, 74,233,151,
+ 77, 57,174, 2,109, 32, 80, 10, 0,173, 13,130, 11,198,195, 36, 39, 24, 51, 33, 25, 23,165, 16, 37, 23,140,139,146, 11, 86,177,
+184, 90, 19,140, 93,203,108,215,188, 94,195,119,168,113, 50, 95, 62, 60, 60, 73,139,242,141, 11, 27, 31,220,184, 68, 48,254,187,
+143, 63, 63, 24,157,174, 52, 2,236, 88, 17, 0, 4, 2, 56, 93, 38, 58,139, 42, 41, 65,213,218, 85,107,158,105, 96,203, 52, 92,
+106,214, 28, 59,112,157,102,205,109,214,219,126,123,211,174,117, 49,117, 16, 38,103,100, 97, 60,155, 29, 63,220,219,223,251,250,
+233,209, 96, 4,206, 97, 47, 0, 0, 5,193, 73, 68, 65, 84, 22,250, 54,125,101,181,253,254,245,157,110,195,175,213,123,150,223,
+ 53,108, 31, 97, 3, 0, 32, 5, 83,188, 40,211, 48,153, 31, 31, 77, 38,191,123, 62, 60, 58, 13, 27,158,115,117,179,191,209,235,
+ 82,167,174,180, 84,101,158, 68,211, 89,156,142, 23,209,233, 50,105,250, 78,167,230,153, 6,169, 2, 46,197, 11,208, 75,107,109,
+ 98, 2, 1,228, 82, 85, 23, 8,194, 66,169, 48,201, 45,211,144, 82,113, 37, 75, 33, 25, 23,140, 11, 46,165, 82, 26, 35, 68, 49,
+114, 45,218,170,185,173,154,103, 96,124, 52, 13,191, 29,140,148, 82, 55,119,183,110, 93,223,129, 0,252,213, 63,253,251,112, 30,
+173,183,234, 43,205, 32, 67, 86, 84,156, 85,210, 34,147,188,202, 85,161, 38,177, 13,211,181,205,192,177, 3,215,106,250,110,163,
+222,245, 91,125,187,214, 33,212, 71,134, 9, 33, 2, 64, 43,206,139,112, 56, 61,222,123,122,184,127,255, 96,240,124,186,192, 16,
+110,116,154, 63,125,109,119,181, 25,212, 61,223,174,181, 76,183, 97,152, 14,196, 38,132, 80, 73,174,165, 16,101,150, 39,147,229,
+124,124, 56,157, 61, 58, 26, 79,194,164,233, 59,151, 55,122,235,157,166,227,248, 16,106,197,242, 50, 11,163, 36,155,199,233, 52,
+ 76,146,162,188,180,209, 11, 60,251,133, 64, 75,115, 33,133,146, 82, 43, 0, 0, 53, 9, 33, 56,201, 75, 46, 4, 23,170,162,173,
+195, 52,247,149,210, 0, 8, 41, 69, 5,182, 42,133, 32, 36, 6, 49, 8,241,109,218,240,220,186,103, 11, 41, 31, 15,198,251,163,
+ 83,199, 50,223,123,117,231,135,151,182, 78,163,228,231,191,252, 44,206,138,237,213, 86,175, 30,248, 54, 29, 78, 83, 64, 28, 82,
+ 97, 29, 77,151,250,206, 25, 11,220,240,107,141, 70,219,107,174, 82,175,103, 88, 14,194, 6, 64, 16,104,168,149, 16, 69,146, 46,
+134,227,227, 39, 79, 14, 15, 31, 30,157,156,204,151, 0,192,213,102,240,246,238,249,181,118,163,233,187,142,227, 81,167, 65,168,
+143, 77, 10, 17, 6, 16,105,197,165, 84, 74,150, 60,143,243,104,124, 26, 46,159, 79,102,123, 39,147,121,148,182,124,247, 66,191,
+187,218,170, 59,182, 5, 33,146,162, 84,188, 76,243,116,153,229,243, 56, 59,141, 18, 8, 96,191, 25, 88,134,169,180,130, 16, 74,
+165, 25, 23,252,133,208,138, 26, 36,112,237,105,156,165, 5,171,218,209,154, 99,157,204,151, 21, 62,161,180,174,182, 87,106, 16,
+ 3, 99,155,154, 53,215, 14, 28,203, 36,120,158,100,143,142,198,147, 48,218,232, 52,127,250,250,238,229,205,213,187,251,131,191,
+253,248,115, 74,200,213,115,253,186,231,212, 28,235,238,254, 81,130, 40,242, 28,162,129,222, 94,105,255,100,119,195,175,175, 56,
+205,190,233,212,177,105, 65,136,207, 26, 78, 37, 5,203,242,229,100, 62,122,250,236,232,240,219,163,225,193,100, 30,165, 5, 53,
+200, 90,171,241,238,149, 11,253,118,189,233, 57,174,237, 24,118,141, 80, 31, 27, 38,194, 4, 0,172,181,214,130, 3,173,149,230,
+146,149, 34,143,226,120, 54, 9,163,195,201,236, 96, 52,139,179,162,225, 59, 91, 43,237,213, 70,205,163,180,178,219, 42,174, 4,
+203,211,188,136,178, 34, 76,179,101,154, 53,124,183, 93,243, 16,132, 66,106,140,129,148,170,202, 14,209, 90, 75,165, 49,194,171,
+141,224,201,201,248,116,217,178,169, 81,249,190, 2,215,201, 75,134, 17,172,168, 31,131, 96,135,154, 53,199,114,168, 1, 0,140,
+179,226,209,209,248,112, 58, 39, 8,190,255,234,206, 31,223,184,108,154,244,111,126,245,159, 95, 60, 58,216,232,212,215,219, 13,
+223,178, 28,203,188,189,119, 32,164,178,124,175, 4,128, 0,173,123,155, 87,207,191,121, 11, 0, 4, 33,208, 90, 41, 33, 56,139,
+179,197,201,108,124,120, 56, 28, 60, 26,156, 28,142,231,139, 36,131, 16, 52,125,239, 92,183,181,209,110,244, 26,181,192,177,108,
+219, 49, 45,143, 84,243, 8, 19, 8, 17, 4, 64, 73, 1, 20,215, 90,105, 45,148,148,146,103,188,136,163, 36, 25, 45,162,231,147,
+249,225,100,158,149,172,233, 57, 27,157,230, 74,163,230,218, 20, 97,164,164,168, 4, 20, 37, 23,105, 81,198,121, 17,101,121,206,
+248,229, 70,205,166,166,172, 76,162, 18,104, 45,139,146, 87, 63, 11, 23, 66, 3,221,240,157,118,234,239, 13, 39, 91,189,166,144,
+ 74, 43,109,155, 6, 70, 8,104, 69, 77,195,183, 44,223,161, 6, 33, 37,227,199,179,229,120, 30, 77,227, 68, 8,249,234,249,254,
+207,110,190,177,214,237,125,242,213,215,127,255,235,207,165, 82, 55, 47,109, 85,198, 22, 41,213,237,199,135,182,101, 58, 20,205,
+ 74,142, 41,168, 4, 84,130,167, 97, 17,159, 38,225,100,122,122, 50, 24,143,159,141,103, 71,211,197, 60,201,148,210,158,109,246,
+ 26,181,107, 91,253,213,102,208,244, 93,215,162,150,105, 24,134,133, 12, 27, 17, 19, 97, 82, 81, 37, 90, 48,165, 53, 56, 67,239,
+164,150, 82,201, 82, 10,198, 88,190, 76,139,113, 24, 31, 78,102, 71,211, 69,193,120,211,115,251,237,122,183,238,187, 22, 37, 24,
+105,165,133,150, 0, 0,165,116,193,121, 86,242,172, 96, 73, 94,106, 0,218,129,135, 32,146,213, 50, 12, 0, 82, 48, 99, 76, 42,
+ 13, 33,168, 42,105, 4, 97,183,238, 47,146,236,249,100, 30,120,182,148, 90,202, 51,105, 22,203,138, 56, 43,197,169, 44,153,168,
+146, 40,234,174,253, 39,175, 95,126,231,218, 46, 34,230,175,111,127,245,151,191,248,199,140,241,157,126,119,187,223, 89,166,185,
+ 75,205,211, 48, 30, 46,162,102,205, 77,139,242,120,177, 4, 78,224, 86,219,252,225,211,111,254,121,244,224,100, 17, 77, 22,113,
+152,102, 5, 19, 24, 65,207,182,174,108,174,172, 53,235,173,192,243,109,139, 26,196, 32,184, 66,170,170,132, 10,160,149, 18, 69,
+149, 64,116,230,143,209, 10,168,179, 15,164,148,226, 74,114, 46,151,105, 49, 89,198,207,167,179,193, 52,228, 66,212, 61,103,181,
+ 89,235, 4,158,103,153, 6,198, 90, 3,169, 84,133, 14, 72,165, 74, 46, 75, 46, 42,118,152, 32,232, 91, 84,105,169, 36,148, 82,
+ 74,173, 49, 68, 66,200, 40, 47, 48, 68, 76,158,149, 54, 90,107,151,154, 74, 41,165, 52, 65,136, 58, 22, 23,178,224,188,178, 21,
+ 55,168,211, 9,188,141,110,163, 27,248, 76,200,111,158, 13,254,226, 23,255, 48, 90, 68, 4,227,237,149,214,149,115,253, 89,148,
+ 68, 89, 30, 56,214,100, 25,115, 33, 9, 70,243, 56,205, 11,150,230,204,177, 95,104, 20, 95,168,202,254,160, 41,253,142, 18,238,
+255, 67, 36,252,114,240,255,107,216,151, 15,195,151,194,197,239,223,253, 95,206,254,240,213,191,119, 4,127, 47, 96,123,105,120,
+ 2, 47,145,155,239, 13, 6,191, 99,138,250, 31,245, 66, 74,165,201, 66, 82,179, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+ 0};
+
diff --git a/source/blender/editors/datafiles/pinch.png.c b/source/blender/editors/datafiles/pinch.png.c
new file mode 100644
index 00000000000..23111e38e50
--- /dev/null
+++ b/source/blender/editors/datafiles/pinch.png.c
@@ -0,0 +1,315 @@
+/* DataToC output of file <pinch_png> */
+
+int datatoc_pinch_png_size= 9880;
+char datatoc_pinch_png[]= {
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 96, 0, 0, 0, 96,
+ 8, 2, 0, 0, 1, 26,253,208,249, 0, 0, 0, 4,103, 65, 77, 65, 0, 0,177,143, 11,252, 97, 5, 0, 0, 0, 6, 98, 75, 71,
+ 68, 0, 0, 0, 0, 0, 0,249, 67,187,127, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, 40,155,120,
+ 0, 0, 0, 7,116, 73, 77, 69, 7,218, 7, 19, 0, 34, 13, 86,254,139, 21, 0, 0, 32, 0, 73, 68, 65, 84,120,218,237,125,123,
+176,157, 87,117,223,111,173,189,191,115,206,125, 72, 87, 87, 47, 75,178,101,249,141, 33, 2,130, 99, 28, 90, 7, 37,128,199, 64,
+ 33,113, 9, 36,132, 50,161,201,180, 60,146, 50,204,100,146,190, 8,109, 82,154, 97, 38, 52,153,105,233,144, 25, 50,165, 33, 77,
+ 11, 56,198,216, 6, 3, 54, 54, 24,219,216, 84,198,182,252,144, 45, 75,178, 44, 99,203,242, 67,207, 43,233,234,222,115,190,111,
+175,213, 63,214,218,251,251,206,181, 13, 46,113, 7,211,201,177, 70,247,156,163,115,191,179,191,181,215, 94,143,223,250,173,101,
+218,178,101, 11,126,228,227,133,124, 40,138,200,158,237,183, 74, 51,172,135, 11,163,133,227,195,147,115,245,104, 72,192, 91,222,
+251,111,143,207, 47,216,135, 88,129,170, 55, 8, 85, 63,196, 94,168,250,177, 63, 49,152, 94, 62,152,158,185,233,154, 79,127,226,
+119,127,195, 63, 4, 0, 80, 2, 56,132, 16,171,222, 96, 42, 86,131, 16,171, 71,119,238,233, 79,244,255,228, 67,239, 6, 16, 1,
+168, 42, 56,112,136,177, 55,224, 80,197, 94,186,254,138, 43, 99, 12, 33,112,213,171, 62,250,155,151, 69, 0,204,172, 34,204, 1,
+213, 96,219, 45,215,170,234,202,213, 51,195,197, 26,139,195, 20,155,254,160,138,246,165, 76,116,199,183,191,202,161,138, 85,148,
+148, 2, 51, 51,217,213,125, 77,177,215,191,227,134,171, 99,213,163, 64, 76,196,204, 28, 66, 8, 28, 99, 84, 85, 73, 18,206,216,
+180,233, 20, 28, 10, 33, 16, 19, 19, 17,179, 2, 16, 73, 73, 70,163,122, 97,126,241,228,201, 69, 86,128,152, 84, 21, 10, 16, 1,
+144,148,234,186, 25,141,234,209,176,174, 71, 77, 83, 55, 49, 75,213,254, 89,154,186, 25,141,234,225,226,104, 52,172,135,139,195,
+209,112, 52, 28,214,244,130,246,238,133, 60,104,207,253,183,168, 74, 83, 47,214,139, 39,134, 39,143,141, 22,231,235,225,168, 63,
+ 57,249,186,127,244, 59,229, 67,225, 95,253,193, 71, 0, 40, 0, 21,168, 16,135,254, 96, 34,132,106,125, 21,214,174, 92,254,224,
+222, 39, 0, 48, 84, 1,101, 34,219,150,170, 55,201,161,199, 33, 76, 47,155,188,112,243, 57, 31,125,223,101, 0,162,106, 3, 19,
+ 97,232, 85, 61,226,208,128,227,183,174,186,178,215,175, 82,147, 38, 38,251,155,207,216, 24,161, 68, 68, 76, 65,131,238,123,242,
+192, 83,187,238, 78, 77,154,154,154, 88, 92, 28, 14, 69,170, 42,190,249,162,205, 17,196, 4,132, 94,127,219,141, 95, 7, 16, 3,
+139,104, 8, 28, 2,135, 24,152, 41, 4,142, 33,132,239, 94,123,121, 85, 85, 68, 4, 2, 33, 68,149,212, 48, 7,102,230,212,136,
+170,134,229, 39, 15,174, 89, 59,203,204, 0, 49, 19, 1, 34, 10,213,166, 73,139, 11,163,147,243,139, 39,231, 23,249,236,243, 54,
+130, 73, 85,137, 64,128,168, 74,146,209,168,174,135,245,104, 88,215,117, 83,215, 41, 50,179,239, 28,161,105,146,109,220,112,113,
+ 52, 90, 28,141,134,163,122, 84,215,117,131, 23,107,239,138,166,224, 55,222,249,214,127,247, 7, 31,144,148, 36,213,169,169,155,
+122,161,169,135,163,225,176, 30,141, 14, 30, 60,246,225, 63,250,139, 67, 71,142,255,176, 11, 37,145,199,118,221,169,154, 82,106,
+ 84,154,212, 52,210,140, 36,141,154,209, 32, 53,195,222, 96,164,146, 86,172, 90,115,221, 23,255, 92, 84, 53,165, 53,155, 54,127,
+230, 19,127,250,201,207,127,237, 57, 86, 68, 33,144, 0, 34, 9,204, 68, 96, 86, 9, 28, 34, 0,162,160,154, 84,132,236,227, 61,
+ 58,118,240,177,153, 21,203,254,244, 35,239, 77, 77, 26, 14,235,255,240,217, 43, 59,183, 38, 73, 69, 64, 32,102,214, 0, 0, 68,
+196, 65, 82,163, 42,118, 33, 85, 81,213, 71, 30,218,185,231,193,221,147, 83, 3, 64, 83, 96, 98,250,227,247,191,235,240,193, 99,
+159,186,234,155, 17,128, 66,137, 1, 97, 34,213, 16,237,116, 50,171, 70, 1,112,228,200,220,246,219,111, 14, 33,136, 72,211,164,
+169,101,147, 41,137, 36,129, 38, 85, 85,213, 21,179,211, 31,121,199, 37, 17, 0, 19,169, 18, 40, 17, 49, 35,129, 88,184,218,118,
+243, 53, 68, 0, 72, 85,166,167, 39,146, 72,106, 18, 51, 17,129, 40, 37, 64, 85, 34,162, 42, 98,104,250,253,190, 9,130, 21, 74,
+136,223,187,233,107,149, 44, 16, 51,129, 98, 8,118,198, 68,137, 84, 88, 85, 3,139,130,153, 67, 80,133, 6, 68,213, 70, 85, 69,
+149, 8, 17,192,241,227,115, 91,175,187,122, 48,209, 15, 33, 80, 96,144, 42,136,137, 84, 65, 4, 82,101, 91,116, 67, 33, 64, 53,
+152,229, 76,154, 82,147,154,186,105,154,148,204,118,173,214, 35, 83, 83, 3, 38,178,173, 33,102, 2,152, 25, 68, 76, 4, 37,168,
+139, 91, 68, 82, 74,169, 78,245,168,169, 71,173,233, 26, 14,235,168,192, 96,208, 83,144,221, 61,129, 84,148,131, 89, 6, 36,209,
+166, 73,146,164,105,252,155,235,186,110,234, 52, 26,214,195,225,104, 52,172, 71,195,122, 52,106,106,179,129, 68,246,189,240,141,
+ 39, 18,255,114,145,148,154, 36,210,164,228,215,146,166,110,234, 81, 61, 26, 53,163,225,104,104, 79, 70,245,176,110, 94, 60, 59,
+249,162, 60, 78, 63,253,116,126,177,174,229,167,127,253,186, 53, 95,250,171, 63,155, 89,177, 76,154, 70,154, 58, 53,139,245,104,
+216,140,134,195,225,104, 52, 28,125,250,115, 95,189,246,166, 59,126,164, 7,248, 14,136, 85, 85, 69, 36, 53,154,234,166, 25,165,
+122,152,154,197,102, 52, 76,205, 72, 68,164,105, 68,100,114,217,204,247,191,127,207,239,126,236,211,207,121,107,225, 95,254,254,
+ 71, 64,204, 28, 24,164, 80, 34,216,198, 3,128, 42, 49,113,136, 85,175, 87,245,251,146,210, 57,231,111,222, 56, 25, 84,177,119,
+255, 51,221, 11,205,204,204, 68, 14, 1,170, 73, 0, 2, 17, 3,196,129, 69,152, 40, 16, 71, 54, 79, 4,144,106,136,189,122,241,
+196,133, 23, 95, 4,209, 55,189,118,243, 31,254,197, 23,187,215, 98, 34, 82,128,178, 93, 87, 34, 85, 59,127, 33,196,138, 67,143,
+ 57, 4, 98,230, 64,196, 68,180,103,199,174,170,138, 33,240,127,252,208,187,171, 24,218, 11,153,111, 3, 84, 85,137,136,137,137,
+ 67, 8, 49,132, 24, 98, 21, 98,197,177, 66,136, 20, 2,136, 57,246,142, 30,158, 11, 49,196, 24, 99,228,143,253,246, 59,102,166,
+ 38,115, 20,164, 2, 21, 95, 63,152,216,110, 42,112,136, 28,170, 80,245, 98,236,197,216, 11,177, 87, 13, 38,175,191,242,218,126,
+191, 98, 38,102,226, 16, 98, 8, 31,126,215,165,190,107,251, 30,190, 75,147, 40, 84, 53, 73, 74,182,121, 42, 73,196, 13,163,125,
+238, 91, 87, 93, 35,146,136, 8, 80, 17,149,148,154, 38, 53,117, 26, 14,235,185,163,199,191,180,245,193, 72,128,154, 72,149,136,
+ 72,149,152, 73,148, 57, 48, 88, 57,132,171, 63,247,185, 53,107, 87, 44, 91, 62,145,146, 52, 77,178,211,175,170, 28,192,162, 33,
+112, 85, 85, 23,158,119,102,132, 27, 10, 16,145,192, 54, 78, 41, 80, 12,241,166,107,174,152,156,232,157,182,113,141,168,166,148,
+ 20, 96, 85, 85,149, 32,172,100,174, 34, 4,142, 49,196,192,209, 93, 40, 67, 4,204,182,101,241,214,107, 46, 95,182,108, 98,249,
+178, 9, 0, 34,162, 73,137,148, 73,153, 73,153,136,152, 72, 56,144, 42,155,233, 96,230, 72, 68,182,229, 4, 40,120,207, 67,219,
+231,158,124,100,102,102, 90,205, 92,155, 67, 33, 85,166, 68, 32, 88,208, 1, 97,102, 69, 34, 5,212,222,117,123,196, 32,238, 85,
+183, 93,251,133, 24,130,123,122, 85,201, 38,211,140, 20, 51, 11, 43,137,121, 45, 85, 1, 84, 85,212, 84, 54,130,152, 8,183,124,
+227,235, 92, 31,137, 49,128,204,186, 65,137, 8, 10, 5, 17,192,102,191,137,137,212, 60,149,112,131, 36,170, 34, 42,170, 0, 56,
+196,234, 83, 31,251, 40,134,135,178,201,238, 60, 20, 12, 2,179,105,190,221, 21, 49, 19,145,170,170,168, 36, 17, 17, 21, 81,213,
+ 80, 29,120,252,103, 94,125,110, 21,131,125,194,111,131,148, 64,196, 76, 74, 32,133,154,196, 84, 85, 36,105,211,164,212,164,218,
+ 66,141,186,169, 71,205,209,133,154,167,151, 77, 84,189, 8,102, 82,168,201, 60,159, 65,115, 5,228, 1,164,170,136,136,166,148,
+ 36,165,148, 36, 53, 77, 74,146,108, 81,170,188,114,213, 12,149, 60, 32,223,145,218, 1, 84, 85,133, 8,252,119, 83, 74,117,146,
+ 36,230,117, 69, 52, 53, 73,146,164, 36,170,136,253, 65, 15, 38, 30, 85, 34, 22, 17,230,192,128, 42,137,152, 81,179, 5, 72,211,
+ 72,147, 47,151, 82,106,106, 95, 81, 74, 34, 42, 49,132, 0,179, 35,158, 48,152,139,133, 9,210,215,210, 72, 42,151,179,171,248,
+ 37, 83,106, 82, 74,162,170,145, 3,131,160, 68,230, 88,225,145, 38,220,169, 38,105,143,152, 57,232,148,234, 58,165,166, 92, 93,
+236, 74,120, 73,249,181,141, 27, 55, 50, 94, 74, 15, 63,178, 63,228,177,122,213,204,107,126,230,220,215,188,242,220,153,229, 83,
+ 83, 19,253, 65,175, 2, 97,254,228,194,137, 19, 39,143,159, 56,121,255,142, 71,119, 62,178,239,209,125, 79,191,136,107,138,170,
+ 10,224,180, 13,167,124,253,138,191,172,122,189,192, 44,238,199,224, 6, 91, 85, 82, 99, 86, 92,165, 73,169,134,152, 70, 54,191,
+250, 54, 49,189, 78, 73, 84,164,105,146,249,212, 71,159,120,230,143,254,252,111,158, 58,112,228,199, 92,208, 15,118,110, 85,181,
+160, 80, 96,225,174,154, 97, 16, 73, 13, 84,136,153,205,173, 36,166, 16, 53, 53,196,129, 67, 82, 73,209, 84,215,127, 93, 85,161,
+154, 54, 47,159,254,242,127,255,248,212,138,181,189,254,228,227,187,183, 95,254,197,235, 63,251,213,239,188,224, 5, 1,177,234,
+167,148, 84,133, 17, 84, 44,202,135,186, 39, 8,170,156,207, 32,177,101, 8,217,246, 10, 88, 41,155,217,174, 38, 0, 32,212,139,
+243,163,133, 99, 27,207,123,229,165,151,158, 88,183,114,166, 55,232, 19,225,207,254,230,171,199, 50, 58,241,188, 33,150, 89, 97,
+ 55, 66,230,149, 24, 16,119, 12, 10, 37, 34,133,197,170, 4, 16,136,137, 3, 0,102, 49,155,101,251,110, 11,179,229,152, 33, 38,
+138, 39,143, 62,211,159,152,232,247,123,189, 42, 42,244,223,252,214,101, 34, 42, 73,254,253, 95, 94,241, 67, 98, 62, 37,178,112,
+ 68, 61,176, 2,204,220, 90,188, 4,115, 66,162, 68, 26, 2,169, 38, 33, 82,102,136,138,237,178,133,243,170,170,106,226, 81, 5,
+136, 37,213,203,214,108,218,113,205,141,189,126, 21,171,168,162,162, 74, 73, 64,244,241, 15,254,122,106,210,127,253,219,235, 14,
+ 31,159, 95,186, 32, 85,133, 10, 65, 4, 10,109, 99, 36,128, 3, 67, 84, 33, 0, 19,155, 76, 82,130, 82, 32, 21, 17,176,146,170,
+106, 50,175, 0,181,188,208,238, 71, 85,100,110,110,254,134,175,124, 54, 4,142, 85,176,251, 14, 64, 34,144,144, 16, 0,253,240,
+175,189,121,113, 97,248,159,175,184,126,212, 52, 29, 9,185, 10,123, 68, 3, 37, 98, 18, 81, 64,149, 2,137,128, 65, 74, 2, 2,
+ 36,144, 71, 34,156,213, 31,168,242,174,153,110,163, 30, 53, 55,127,253,218,212, 40, 7, 30, 76,244,221,165, 64, 33, 80, 8, 43,
+231, 69, 3, 74,131, 9,252,222,175,191,229,232,220,252,103,190,118, 83, 71, 66,134, 62,152, 19, 97,182, 28, 15,112, 69, 0, 24,
+ 36, 76,172,230, 36, 85, 8, 65, 85, 45, 1,178,124,106,126,126,225,123,223,188, 94,155, 97,213,175,136,120, 98,114,210,240, 33,
+ 69, 62,178,170, 66, 66,202,196,194,170, 74, 20, 60,243, 10,210,171,150, 47,155,248,208,219,223,248,205, 7, 30,201,209, 21,204,
+197,219,150, 65,109,125,176,188, 84,125, 93,164, 34, 66, 12, 85,243,226,124,244,216,137,219,175,253,242,236,170, 25,102, 2,116,
+197,138, 9,145,190, 39, 14, 73, 84, 84, 2, 75, 18,101, 37, 81, 73, 66, 68, 34, 66,137,192,204, 16,128, 52, 4, 0, 49,114,138,
+ 97,208,175, 46, 56,103, 83,108, 15,134,136,144, 39,211, 4,242,133, 89,212, 66, 12, 21, 34,138,189,222,193,103, 14,108,187,249,
+186, 21, 43,150,155,242,158,178,126,117, 86, 66, 17, 40, 51,105, 14, 28,132,148, 68, 29,207,129, 64, 73, 84, 73, 45,202, 83,102,
+ 86,128, 33,170, 30,185,197, 24,152,185,227, 58,242, 65, 34,129, 80, 22,155,130,152,171,222,224,246,111, 92, 21,208,152, 33, 88,
+181,106,133,109, 52, 17,196, 2, 71,130,128, 88, 32,109, 6, 75, 76, 36,148, 60,192, 50, 32, 9,204, 44, 0, 9, 2, 84, 24,164,
+ 66, 14, 33, 17, 12,107,244,240,211,238, 18,204, 80, 85,114,148,105, 52, 74,119,222,120,117,191,223, 35, 80, 21, 64,176,152, 82,
+ 1, 21, 16,131, 84, 96,193, 10, 65,153, 57, 65, 73,114,172, 79, 4, 86, 82, 38, 74, 30, 64, 51,147,138,130, 1, 16,105, 74,212,
+181,238,154, 99,160,152, 1, 74, 54,189,230, 64,135, 15, 31,190,243,250, 47, 79, 45,155,100,230,254,160, 79,190,226,130,100, 18,
+ 64, 12, 85,201, 38,185,132,170,118,195, 46, 32, 75, 31, 52, 3,168,100, 73,158, 64, 72, 41,219, 22,143, 67,237,132,231,184, 26,
+ 32,102,128, 36,201,103, 62,241,241,151,191,226, 12, 14, 60, 57, 61,153,197,132,188, 59,157,151,182, 45, 12,133, 66,149, 13,219,
+ 36,130, 50,145,144,197,140, 68,194, 32, 16,131, 85, 21, 16,245, 92,201,147, 65, 81,149,164,146,227,105, 15, 97, 85, 35, 1, 71,
+ 15, 60,241,223,254,211,127, 57,243,236, 83, 95,177,249, 76, 38,246,208,218,112, 93, 17, 38, 86, 86,183,231,228, 33,170,171,152,
+105,155, 18, 88, 72, 13,119, 98, 17, 97, 82, 9,204,162, 0, 68,139, 94,185, 44, 84,196,162, 79, 17,105, 35,124, 81, 17, 1, 52,
+108,218,180,233,192,246,123,206, 60,231,180, 85,171, 87,144, 47, 7, 14,211, 0,228, 97,186,173, 79,137, 88, 29, 48, 53,185,193,
+126,195,101,103, 54, 11,237,134, 64,115, 88,239, 0,141,166,198,158,120, 20,157, 26, 95,156, 5,196,199,134, 18, 1,156,186,241,
+148,101,203,167,216, 48, 87, 87,121,136,154, 89, 26, 87, 32, 85,102,130, 42,152,203, 89, 16, 85, 40,212,110, 62,137,231, 71,201,
+ 48, 74,179, 72,234, 33,115,202, 1,182,201, 38, 63,207,121,135, 2, 26, 21,152,158,158, 12,129, 91,157,161,188, 59,118, 30, 68,
+ 64, 76, 12,219, 28, 95,112, 62, 28, 98,255,249, 86,136,228, 60, 71,218,191,165,236,142, 1, 97, 37,103,232,138,202, 69,168, 26,
+205, 80,122,102, 72,202, 32,215, 97, 82,162,110, 40, 1,102,219, 15,147, 72, 22,137,228,115, 34,174, 34,157,117,228, 39,150,135,
+ 53, 46,145,166,105, 44,191,203, 73, 72,155,150,168,104, 4,192, 33,128, 60,219, 5, 20, 96,144, 90,145, 68, 85,153,217,160, 71,
+117,181, 83, 91, 77, 89, 73,251, 92, 92, 98,101,203,252,190,187,226, 73,226,169, 79,155, 30,149,172, 81,196, 78,217,189,143, 60,
+221, 38,174, 89, 93, 8, 93,219, 99,206,218, 36,147, 83, 73,136, 8, 90,227,150,101,166,238, 73,180,251,112,217, 37,180, 55, 34,
+229,111,181,163,150, 68, 79, 38,188,196,240, 70,203,205, 94, 58,139,217,178,101, 11, 63, 7, 94,241, 19,125,188,180, 50,215,151,
+226,130,126, 68, 42,253,218,159, 61,255,172, 77, 27, 94,126,206,233,147, 19,253,233,169, 65, 21,195,194,194,112, 97,113,120,236,
+248,252,190, 39, 15,236,216,253,216, 29,247,238,250,127,184,160, 24,195,207,110, 62,255,183,223,123,217, 27,183, 92, 36, 2,145,
+198, 14,169,170,165,173,102,101,107, 17,131,120,154, 38, 73,106, 26, 21,173,235,230,150,255,125,255, 85,215,223,190,235,209,253,
+ 47,206,130, 62,250,251, 31,120,223,123,222, 65, 28,114,196, 47, 65, 36,160,103,222,200,114,106,226,134, 67, 72,137, 57, 5, 9,
+137,154,192,146,180,138, 41,165, 80,197, 75,126,241,130, 75, 94,255, 26, 5, 82,146,255,113,229,141, 95,248,202,205, 63, 38, 0,
+242,201, 63,249,195,119, 94,118,169,122,128,211,245,147,185,114,102, 72,177, 97,199,169, 17, 73,146,106, 73,141,106,146,100,117,
+ 53,119,102,102,157,137,169, 55, 24,196,106,112,244,224,193,207,125,225, 27,255,243, 43,223,249,191, 58,246,225,151,223,254,214,
+151,159,127, 46,135,216,130,145,212,134,124,157,160, 80, 75,216, 81,222,203,128,187, 85,221, 99,136, 49,132, 64,196, 34, 41,132,
+222,170, 13,103, 93,116,193,249, 23,156,185,238,222, 7,247,254,240,124,190, 60, 54,109,218, 20,137,152, 67, 48,185, 8, 18, 81,
+ 80,241,148,193,162,126, 37, 2, 49, 81, 80, 82,166, 0, 86, 81,101, 46,113,207, 24, 64, 89,170,227,146, 70,243, 71,246,175,220,
+240,178, 87, 93, 52,124,251, 93, 59,215,172,153,253,196, 95, 95,213, 36,249,209,199,158,136,136,130, 69,253,204,172, 4,199,108,
+ 41,199,105, 84,240, 89,134,191,201,234, 47,131,177, 14, 80,254, 48, 19, 5, 14, 85,168, 6,196,225,240,147,187, 79, 61,231, 85,
+ 34, 18, 2,255,241,251,127,237,159, 93,246,134, 23, 96,135,168, 36, 45, 4, 16, 19, 59,192, 97,238,191,120, 90,143, 68, 74,138,
+195, 32, 34,182, 53,181,127, 24,129,217,185, 19,196,145, 57, 52,163,197,201,137,126,136,204,129,206, 60,117,237, 39,254,197,123,
+166, 39, 6, 63,218, 48,230,192,213, 3,120, 3,102,140, 81,209, 89, 25, 90,240,155,136, 40,112,126,184, 12, 51,220,239,107, 34,
+ 34,102, 73,205,196, 68,223, 94, 4,102,168,252,235,127,122,217,133, 47, 63,251,135, 44,136, 90,124,186,171, 7, 5,216, 35,127,
+ 65,174, 76,140,172,200, 68,246,199,191,158,179,156,145,115, 2, 77, 77, 61, 26,246,251,189, 24, 99, 8,158,128, 51,225, 87,182,
+252,220,251,127,249,141,207,183, 32,237,220, 59, 90,244,169, 77,199,104,108,155,136,152, 25, 28,172,194,212,217, 32, 6, 51,152,
+236,143, 26, 70, 68, 97,215,125,119,199, 94,176,130, 84, 8,108,171,102,194,105,235, 87,125,224, 87,222,240,220, 91,150,115, 71,
+133,106,174,198,105, 27,190,154, 72, 40, 87,154, 57, 16, 49,187,234,176,169, 14,136,193, 1, 84,196,100,105,106,154, 94,121,234,
+206,251,118,196, 24,137, 77,168, 28, 66, 96, 14,196,204, 68,235,215,204,254,243,183,253,210,115, 75, 40, 99,114,121,175,180,200,
+134, 75, 49,199,144, 60,246,141, 51, 73,133,252, 77, 33, 47,221,151, 37, 41, 77,205,110,184,225, 75,151,171,192, 5,227, 57,175,
+137,210, 43, 82,167,172, 94,241,155,151,252,195,241, 5,101,140,176,108,149,125, 21,217,175, 22, 41,217,119,219,154,202,177,178,
+122, 40, 71,175, 30,134,200, 33, 48, 71, 85,141,253,233,235, 46,255,226,201,249,197, 88, 5, 14, 33,216, 57,117,187,155, 41, 16,
+ 76, 49,240,134,181,179,175, 61,239,204,174, 47,115,132, 16,228,224,162,225,141,142,112, 89, 82,172, 4, 73, 68, 65,145,152,130,
+128,140, 99, 97,124,140,140,120,121,188, 13, 96,207, 67, 59, 31,126, 96, 87, 8,220,235, 85, 86,247, 32, 34,130, 64, 36, 87,235,
+ 8, 74,162, 76,172, 85, 85, 93,252,202,243,118, 63,241,244,209,249,147,249,216,103, 52,206,109,144, 82,123,198,188,182, 12,152,
+212,178,249, 97,211, 24, 23, 85,100, 14, 28, 98,136,131,199,246,254,224,250, 47, 93,253,216,158,189, 19,147,253, 94,191, 10, 85,
+ 8,129,221,154,229, 4,152, 28,202, 37, 38,178,210,112,175, 23,223,243,134,215,181,192,185,217, 31, 2,137, 10,188,176, 5,175,
+ 54, 19,145,230,194,160,167, 68, 6,168,185,149, 32,143, 91,122,247,108,221,250,216,206, 29,147,211, 19,211,203,167,138, 82,166,
+148, 60, 85, 49,224, 38,131,197, 29,127, 73,166,233,253, 94,124,199, 47, 92,120, 8,136, 84,116, 86,197,234,117,230, 58,197,234,
+137, 66, 32, 85,101, 34,129,146,182,198,192, 33,107, 5,223,119,199,247,159,216,253,224,204,202,153, 85,107,102, 85, 33, 42, 80,
+ 52, 41, 1, 10, 4, 17, 9,196, 9,106,216, 72, 54,247,134,195,219,145,112,205, 60,101,197,244,193,185,228, 24,163,230, 4,153,
+ 44, 35, 52,101, 2, 9,219,155, 2,144, 20,204,193,153, 46,213, 13,215,124,165,207,139,177,138,107,214,173, 46,169, 26, 9,139,
+104, 12, 33,137, 48, 43, 84, 5, 8, 12, 17,219, 10, 7,142, 50,152, 97, 88, 22, 89,133, 30, 72,177, 4, 24,226,187, 84,242,122,
+131, 27, 5,148,209,112,114,128,161,234, 15,110,249,198,181, 58, 58,182,124,178, 7,244, 13, 95, 55,144,209,150,204,140, 36, 6,
+ 22, 41, 49, 83, 74,206, 13, 3, 41,105,177, 33, 16,119,142,238,225, 13, 0, 45,184,134, 59, 79,241,163, 66, 4, 17,205, 88, 35,
+140,230, 8,142,247,220,254,221,209,177,167,251, 33,208, 96,160, 14, 70,152, 57,101,135, 3, 12,233, 35, 82,127, 9,175, 74,216,
+193,135,136,171, 79,198,162,179,164, 12, 59,136,121, 61, 32, 15, 94, 61, 42, 83, 45,208, 35, 1, 26, 98,181,109,235,214,122,110,
+ 63, 7,142, 85,116,213, 44,184,132, 42, 84, 58, 37,109,247,180, 89, 30, 84, 46,231, 88,168,175, 40, 31,138, 44,167, 78,144, 79,
+230,222,225, 78, 72,213, 1, 6, 16, 51,239,217,185,251,192, 35,247,199, 42,112,224,178,159, 25, 60,202,159, 36, 38, 41,110,208,
+235, 54,228, 26,227,247, 72, 4, 17,151, 24,131,149,100, 73, 96,215,205, 58,152, 72, 32,234,251,156,183,106, 56,170,183,126,243,
+202,233,169,126,213,143,112, 12,132,224, 0, 43, 72,196, 0, 45, 34, 77, 73,137, 12, 98, 83, 64,202,173,163,227, 20,179, 92,200,
+ 66,210,241,149,248,209,139,173,253, 83,182, 50,134,221, 61,113,216,250,157, 27,185,158,155,158,238,119, 64, 71,167, 66, 88, 69,
+ 95,216,106, 34, 25, 20, 53,194,152,241, 54, 60,196,132,162,108, 22, 64,196, 12,145,236, 58,115,229,175, 91,112, 43, 56,117,190,
+158, 2, 68,243,243, 39,239,191,249,218, 16, 25, 76,101,237,121,107, 51, 47,128,136, 76,162,108,154, 10, 17, 47, 75,229,186, 91,
+177, 90,110,170, 57,151, 40, 50, 40,239,200, 78, 94,145,235,144, 69, 27, 46,214,106, 80,221,242,245,175,208,232, 40, 7,143,101,
+205,163, 65,161, 25,245, 51, 93, 85,136,111,128,170, 85,105,124,189, 12, 36,223, 72, 15,236,216, 62, 75, 74, 4, 22, 36,171, 60,
+180, 24,146, 5,135,118, 5, 70,222, 15,230, 48, 28,214,159,255,212, 39,211,201,195,174,173, 29,141,211, 66,133,206,134,157,193,
+118,176,149, 72, 65,170,229,132, 83, 27,128, 3, 37,190,117, 79,159, 47,163,218, 69,241,181, 85,106,179, 2, 33,196,135,238,217,
+122,223,109,183,174, 91,191,134,152,252,174,221,169,105, 23,147,224,142,223, 45,130, 45, 6,184, 4,229,153,255,231,165, 10,171,
+ 42, 16,224,245, 71,237,174,201,131, 6,147, 80,180,156,230,214,107,255,118,215,246,135,206, 58,231, 52,183,154,165,118,150, 53,
+171, 5,246, 75, 85,130,178,129,207, 37, 72, 21, 55, 74,201,107, 41,146, 89, 58, 90,206,147,139, 36, 3,183,190, 20, 95, 29, 0,
+112, 83,215, 55, 93,241, 87,119,221,126,215,166, 51,215, 83,134,193,139, 37,113,183,219, 41,105,184, 9,227, 54,109,115,179,134,
+236,160,156, 29, 90,238,192,239, 98, 9,248, 40, 2, 93,242,128, 2,136, 15,109,187, 99, 98,184,120,238,203, 78,143, 49, 80,135,
+ 34, 3,234,218, 44,245,131,222,205,136,188, 82, 46,102,183,178, 45,182,178,155,182,216,169, 85,176,178, 96, 90,116,219,241,207,
+177,141, 3,192, 71, 14, 29,159, 93,185,124,114,122, 2, 68, 0,117, 75,240,157,117,103, 82,151, 39,107,109,158, 68,134, 33,147,
+170,149, 35, 93, 59,202, 6,149,125,145, 2, 97,136,136, 10, 32, 16,237,110,156,159, 33,174,122, 97,118,229, 50,143,122,139,216,
+129, 49, 17,181, 5,116, 43,205,106,166,237, 43,216,244,153,168,115,122, 51, 55, 34,215,120, 50, 58, 98,128, 48, 20,218, 86,127,
+ 92,108,134,113, 3,136,189,170,234,247,123, 28, 76,232,214, 27, 64,224,165, 80,104, 7,191,206,117,190, 76,116,204,220,167,124,
+134, 5,154, 75, 79,154,161,244, 86, 54,185, 2, 81, 86,216,194,220,102,135,170, 94, 21,171, 88,140, 7, 88, 11, 74,222,234,147,
+ 27, 10, 33,116,178,165, 12,161,231,114, 7,188,140, 80, 54,194, 1,242,182, 4,145,151,213, 22, 33, 84, 10,211,196, 41, 27,198,
+168,107, 97,123, 21, 34, 86,234,236, 87,121, 65,218, 69,245,187,187,163,237, 66,114,217,165, 43,137,188, 8, 53, 44,110,188,110,
+132, 22,212,183, 45,179, 20,204,190,217,171, 43, 96,183,113,228, 96, 67,113,119, 86, 94,149,220, 32,161, 29, 73,136,168, 2,173,
+140,140,157,233,148,159,178, 83,229, 81,222,247,109, 53,131, 0, 32,102,163, 2, 37, 49,184,200, 3, 23,245,128, 86,225,117,160,
+ 28,184,121,125,180, 35,237,252, 52,111,129,221,183,223,120,106,203, 26,157, 83, 38,232,252,174,148, 67,111,174,195, 67, 46,109,
+195,125, 5,108,227, 60, 87,233, 0,101, 29,139, 82,214,209,170,106,187, 23, 42, 99, 91,150,212,235,118,121,251, 82,174, 30,105,
+231, 29,128, 98,139,159, 88, 68,202, 96,180,208, 84,201, 21, 61, 25,209,156,174, 26,115, 64,199,202,100, 42,229, 47,163, 75,182,
+ 27,229, 39, 42,101,237,150,206,118,251, 97,131,168,250,130,168,132,187, 0,148,148,141,217,160, 86,248, 47,118,200,255, 88,222,
+ 37, 93,107,215,249,150,148,141,138,189,239, 48,110, 6,115,219,181,182,139,213,142,165, 2, 40, 62,121,248,196,182,221, 79,122,
+200,159,195,169,238, 41, 43, 46, 92, 75,169,172,252,236,152,144,226,144, 74,205, 81, 91, 27,132,103, 73,177,221,212, 82, 15, 53,
+230, 22,109,217,178,229,200,145, 35, 71,143, 30,125,169,149,133,126,178, 15, 85, 93,177, 98,197,236,236,108, 4, 48, 55, 55,247,
+248,227,143,255,189, 80,158, 77,242,156,157,157,229,191, 23,196, 79, 89, 57,241,167,172,188,249, 99,105, 38, 66, 8, 85,140, 6,
+250, 26,146,102,102,175, 73,233,255,115, 1,205,206, 44,251,197,139,127,238, 21,231,159,121,193,230,151,157,118,234, 41,193,201,
+ 61, 6,101, 26,107, 82,243,223, 41,123,206, 84,194,141,194,175, 40, 84, 15,163,247,207,205,205,223,187,227,145, 29,123,246,109,
+221,246,208,193, 35,199,126, 10, 4,116,206, 89,167,191,249, 77, 23,191,246, 53,175, 92,191,110,237,105,235,215,132, 24,205,185,
+138, 36, 56,131,215, 76,189,100,103,107,205, 29,170, 42,176, 4,199,159,104,167,217, 81,116,140,208,227,229, 89,136, 78, 79, 79,
+174,223,176,250,210, 95,186,208,136, 45,246,145,197,225,232,192,161,163, 79, 60,117,232,222, 29,123,239,188,111,247,254,103, 14,
+255,100, 76,245,235, 95,255,250,147,243,199,215,175, 93,241,143,223,118,201,235,126,254,130,137,193,192,130, 96,203,138,199,242,
+141, 76,207,201,175, 68,187,113,163,165,124,200, 33, 77, 17,135,197, 27, 72,240,240, 39,105, 55,171,135,135, 77,206,116,119,206,
+108,139,200, 59, 60,196, 20, 67, 0, 81, 83,167,131,135,142,222,120,235,221,183,223,245,224,222,199,159, 62,254,194,138,202, 63,
+222,227,244,211, 79, 63,227,140, 51,162,170,190,239,159,188,243,178,183,189,169,228, 95,172,158,197, 27, 45, 17,100, 11,135, 5,
+175,160,160, 42, 78, 93, 85, 81,163,181,170,168,146, 26,135,215,152,156, 66, 8, 76, 42,198,172, 85,101, 69, 98, 18, 40,137, 8,
+192,202,106,228, 88, 4,151,115,102,180,129,160, 34, 74,109,132, 7, 67, 61, 3,243,212,242,169, 21,171,215,157,183,249,213,191,
+ 35,105, 97,254,232,220,161, 67,251,247, 61,243,191,174,190,233,219,119,108,119, 90,213,139,126,196, 20,224, 16, 67,236,185,122,
+183,169,170, 90,251,154,113, 20,200,159,104,102,119, 10, 21,254, 61,121, 73, 5, 90, 18, 71,203, 20, 4, 2,107, 86,131, 8,236,
+137, 18,131, 21, 2, 17, 13,185,135,168, 91,217, 53,112, 40,116, 17,151,124,138, 21, 77, 61,108,234, 81,172,250,131,169, 21,179,
+235,206, 90,181,254,156,181,167, 61,179,124,102,217,235,206, 63,107,238,232,137, 39,142,204,221,112,231,246, 23, 87,173, 98, 41,
+198,112, 6, 88,168, 77,248,237,172,229, 34,172,107, 84,174,153,147, 66,172,186, 33, 68, 65, 33, 48,198, 62,140, 8,172,214, 32,
+200, 74,234,210,177, 78, 3, 67,243,124,160,129,122,149, 80, 11, 20, 55,142, 88,143, 39, 23, 45,250,163, 11, 39, 14, 47,206, 31,
+ 29, 44, 91, 57,123,202, 89,175,156, 89,245,204, 83,135,158,121,230,193,243, 54,174,219,124,246,198, 24,195,161, 99,243, 55,220,
+113,223,142,189, 79,168,234,139, 32, 32, 34, 16, 7,104,242,178, 2,137,118, 22, 70,234,146,112,168, 65, 29,170,202,121, 45, 8,
+ 44, 36,206, 76,181,234, 66,254,105, 84,126,199,191,140, 96,238,232, 57,219,201, 37,167,209, 63,203, 52, 62,235,133,162,240,110,
+141, 20, 2, 85, 29,206, 31,109, 22, 79,174, 60,245,220,141,103,109,122,224,158, 93, 85,140,177,138,129,121,237,202,229,239,125,
+203,197, 0, 53, 41, 93,254,205,239, 61,184,119,223,223,209,139, 17, 89, 77, 78,189,252,235,132,236, 82,187,179, 35, 35, 74,185,
+232,105,124,157,150, 17,236, 29, 37, 25, 27, 80,237, 0,143,249,247,137,160,156, 33,118, 2,132, 56, 44,213,149,231, 19, 19,181,
+180, 27, 71, 59,188,189,144, 37,141,234,197,249, 88,245, 38, 39, 6, 85, 21, 66,198,111,172,125, 55, 6,126,207, 91, 46, 38, 96,
+238,196,201,207, 95,119,219, 19, 7, 14,255,248,110,222,165,130, 92, 22,104,241, 77, 47, 22,228,134, 19, 42, 12, 97, 42, 88,190,
+116, 0,244,194, 13, 81, 87, 23,151, 35, 49, 72,160, 12,101, 82, 41, 71,185,212, 91,116,236, 28,117, 0,177, 92, 17,200,245,247,
+ 92,169,245,108,157, 1, 28,124,242,169,193, 68,223,152, 84, 86,156, 70, 78,238,137, 84, 69,103,166, 39, 63,248,206, 75, 82,147,
+182,110,127,248,134, 59,238, 79, 47,216,162,199,231,214,106,152,254,119, 72, 23,237,130,149,168,219, 31,133, 92,143,113, 89, 88,
+ 5,205, 0,105, 51, 73, 68,156, 97, 80, 98, 27,133,160,118, 74,115,223, 16,193, 26,154,203,238,180,224,115,174,106,160, 16,206,
+178,193, 82,104, 74,245,228,204,154, 67, 79,239,127,122,255,211, 85, 47,134,192, 28,216,160, 35,115,126,102,226, 4,106, 13, 38,
+ 20,194, 63,120,213,121, 63,191,249,156,199,246, 31,188,226,166,173, 39, 22, 22, 95,184,128, 60,242,104, 75, 9,228,229,101, 63,
+ 47,185, 45,135, 8, 38,253,194, 2,104,195, 3, 85,182, 82, 80,203, 50,202,112, 49,172,120,166, 10,205,214,217,218, 22, 20, 80,
+134,159,109,165,214,175,121,176, 69,212, 61,133, 70,251,178,253, 75,169,158,154, 93, 63, 92, 92,184,251,187,223, 29, 46, 14, 99,
+229, 83,114,138, 90,107, 32, 3,193, 45, 32, 73, 34,230, 65, 1, 58,125,195,154,223,123,247, 91, 15,205,157,248,226,141,183, 47,
+105, 32,123, 78, 1,185, 58, 82,113, 94,230, 95, 36, 87, 39,160, 54,128,133,188, 33,128, 69,196, 82, 45,223,114,133,245,201,136,
+112, 62, 5, 12, 21, 82,136, 88,255,111,128, 42,121,239,182,118, 91, 32, 41,135, 10, 46, 36,116, 72, 27,185, 93,110,137,207,151,
+212, 48,199,229,171, 78,125,244,161,237, 59,238,121, 96, 97, 97,200, 28, 10, 65,170, 88, 70, 23,179,178,136,130, 17,136, 29,121,
+166, 64, 44, 20,121,213,138,233, 15, 94,246,198,253, 7,142,124,254, 91,223,171,155,244,252, 2,242, 3,212,130,115,176,124,202,
+171,109, 25, 39,183,144,198,172, 53,179,151,163, 33,196, 36, 34,185, 18, 33, 45,179, 7,129, 88,189,123,219, 66,109, 10,153, 20,
+ 97, 98, 45,167, 74, 58,231,166,195,167,234,170,183,253, 76,137, 56, 76, 78,207, 62,249,232,158,219,110,188,121,254,196,130, 49,
+118,109,178, 8,185,159,180,222,242, 82,239, 70,135,152, 1,111, 73, 18,114, 48, 23,113,195,154,149, 31,249,213, 75,239,223,243,
+248,141,119, 63, 32,207, 10, 11,198, 52,168,236,161,251, 98,167,212,120, 75, 13,178,239, 22,199,104, 11,231,198,235,202, 76,240,
+134, 52,235,234, 42,196, 2,159,109, 65,197,126, 81,167, 24, 78, 94, 75,106,139, 75,109,123, 96,107,182, 5,138,222,196,244,145,
+131,207,236,184,251,142, 35,135,230, 36, 37, 34,138, 49,112,185,211, 22,161, 85, 5, 19,180,176,215, 60,188, 16,120,144, 42, 96,
+102, 83,129, 16,216, 62,243,170,179, 55,158,119,218,186,107,183,222,251,232, 83, 7,158,199, 6, 1, 68, 10,209,210, 97, 66,121,
+194,145,189,206,158,206,152, 68, 74, 48, 73,121, 85,156,205,144,216, 15, 8, 40, 16,140, 70,163, 25,249,167, 14,207, 78, 59,229,
+ 90,237,248,174,165, 27,200, 33, 46, 46, 46, 62,190,103,239, 19,143, 60, 50,127,252,132,209,224, 98, 12,228,211, 18, 44, 32,202,
+198,221, 89, 22,110, 77,213,249, 13, 76,240, 1, 20,217,122,122, 29,212, 38,130, 33,114,225, 6,188,253,117,175,222,187,255,224,
+117,119,222, 87,220, 92, 44, 16,183, 51,216, 76, 38,109, 96, 75, 12, 47, 85,230, 74,166, 26,109, 65,209,126,150,201, 38, 76,104,
+113,177,118, 36,115, 83, 99,238,221,109, 97, 0,103,122,181, 7,136, 10,227,149, 1, 90, 92, 88,120,102,255,147,187,239,187,231,
+196,177, 99,253,193, 32,132, 16, 2, 79, 78, 77,118, 34, 45, 47,205,120,199,100,158,153,144,177,134,252,161,194, 90,113,153,104,
+ 41,144,138,151,167,137, 4,198, 7,141, 21,247, 17,207,218,176,250,183, 46,253,133, 47,221,250,125,203,189, 98,199, 8, 82,233,
+145, 82,251,207,212, 73, 75, 64, 82,104, 44,153, 80, 32, 78, 71, 17, 17,235,173, 22,107,166,182,110, 96,175,170,139,157, 32,103,
+180,100, 38, 79,135, 61, 98,204, 60, 94, 88, 24, 61,112,247, 93,251,118,237,236,245,170,254,160,226,200,253,126,156, 56,101,181,
+ 15, 73, 50, 11,146,164,116, 46,122,177,214, 61, 40,137,183,126,149,102, 38, 63,216,172, 44, 16, 23,156,183, 16,147, 66,189,248,
+175, 86,154, 85, 86, 86, 14, 28,180,138, 58,232, 85,239,122,253, 69,251, 79,142, 78,104, 62, 98, 37, 46,244, 64,208,200, 37,146,
+163, 68,207,200,109, 10, 9, 76, 10, 22, 20,219,239,100,119,230,100, 19,245, 34,173, 19,246, 60, 4,245,183, 60, 20,102,102,142,
+113,223,163,251, 30,222,126,255,201, 99,135, 2,201, 96, 98, 16, 98, 88,183, 97,181,118, 66, 71, 83,142, 96,160, 8, 52, 82,244,
+210,141,177,172, 40,148,250, 24, 49,135, 12,149, 88,251,157, 49, 93,132,164,112,159,114, 16,235, 34,102,134, 10,132,192,196,202,
+162, 76,129, 89, 3, 87, 49, 40,116,162,233,157,176,222, 63,228,169, 89,153, 52,208,209,201,174, 33,101,182, 29,243, 39, 30,255,
+145, 26,123,202, 13,121, 38,170,250,176,152, 14,165,138,137, 67,168,155,116,240,233, 3,123,119,238, 56,184,111,239,138,217,233,
+170,215, 27, 4, 12, 86, 78,119,183,169,216, 20, 21,207,110,148, 52, 55,218, 43, 11,107,112,169,120,216, 33, 57,201, 81,120,151,
+175,177,153,156, 77,196, 66, 66,106, 92, 11,231,132,100, 99,132,164,206, 13,164,150,216,201,196, 26,153,153,164, 75,126, 35, 51,
+179,206, 66,242,195, 45,157,198,113,228, 88,217, 40,145, 57,172, 83,101,133,128,193, 46, 75,235,117, 86,181,254,104, 24, 9,127,
+238,232,209,187,110,187, 5,195, 99, 19, 19, 3, 14, 28,128,117, 27, 86,163,205, 99,197, 54,220, 90,160,179, 30,171,187,159,108,
+164, 74,239,106,209,115, 21,205,173, 1, 32, 19, 25,231, 92, 91,139,245,241,140,210, 37,229, 23, 81, 8,169, 88,164,175,109,237,
+214,233,221, 42,204, 29,186, 34, 50,165,211,236,173,104,135,239,210, 33, 0,117,243,234,241, 4,197, 12,142,150,123, 99,238, 85,
+189,131, 7, 14,238,190,255,238,250,196, 28,161,137, 85, 92,214, 39,244,167, 58,160,143, 31,186, 76,202,133, 72,241,246, 93, 35,
+149,169,238,158,117, 8, 10, 97, 80, 75, 74,211,110,171,150,192, 34,255,166, 40, 58,195,107,236,252,251,189, 42,105,167, 17,194,
+237,169,169,138,245, 9,140,185,249,220,162,233,188,207,226,159, 41,119,106, 42,145,169,166,106,235, 59,218, 8,132,168,170,170,
+147,243, 11, 79,252, 96,239, 99, 59,183,247,163,196, 94,143,129,254, 32, 0, 1, 57, 16, 29,111, 50,112, 58,175,138,218, 8, 35,
+ 51,115,236,176,174,249, 4, 45, 49,136,115,244, 40, 31, 33,100, 95,130, 14, 75, 9, 93, 90,170,199, 31,222,194, 89, 88, 84,217,
+202, 83,203,216,131,228,103, 29,114,101, 39, 14,242, 9, 5, 68, 45, 59,216,163, 90,178,245,162,228,141,173, 49,226,220,190, 31,
+134,139,139,247,220,126,139, 12,143,218,136,201,233,201, 88,170,250, 57,232,247, 14,238,150, 15,159,223, 68, 62,140,206, 15, 80,
+ 55,192, 70, 70,130, 74, 73,221,209,114, 42, 41,235,172, 81,184, 10,108,144,161,134, 18,106,230,184,181,205, 34, 45, 96,241, 20,
+ 79,198, 2,117, 63,199,153, 41,138, 49, 13,114, 38,146, 13, 62,107, 53,213,103, 12,138,213, 24, 37,235, 14,135, 80,245, 6,187,
+119, 60,184,255,225,237,172,117,140, 28,137,208,239,217,198,218, 28,144, 12, 30,105,230,193, 81,185, 71,195, 36, 61, 91, 50,219,
+215,198,211,121,210,137,182,116, 67,219, 84, 23, 52,149, 35, 10, 15,206,178,202,251, 72, 50,143, 93,213,134,186, 20,205, 18,103,
+133, 43,196,246,188, 37,185,182, 88,101, 9, 92,233, 57,202, 62,133,176,101,231,179,116, 56, 88,208, 14, 64, 99, 8,117,147, 30,
+219,179,107,223,195, 15, 68,170, 67,136,189, 64,160, 64, 90, 80, 32,202,208, 98,230,188,186, 97,202,249, 94,154,154, 15, 41, 0,
+ 0, 6, 9, 73, 68, 65, 84,217, 78, 29,107,142,179,163,150, 67,164,188, 23, 30, 16, 3, 45, 11,144,196, 25,145,121,140,105, 86,
+ 24,111, 34, 39,178,224,141, 24, 98,120, 1, 41,196,189, 71, 14,155,164, 3,129,151,249, 54, 58, 30,199,211, 24,162,152,209,247,
+156, 99,101,250, 73,113,113, 2,218,187,123,215,174,187,110,157, 89, 54, 9,166,126, 36, 32,162,164,172,228,243, 50, 11, 51, 14,
+220,181,230,148, 89,187,118, 91,166,149,197,239,101, 98,173,207,221,117,138, 51,160,176,236,128, 90,194,139,123,156,194,136, 86,
+ 44,137, 93,145,167,139,104, 65, 81,252,150,144,141, 51,186,124,193,238, 1, 83, 64,159, 5,138,199, 18,165,168,163,163,140, 60,
+ 3,130, 3,115,140,247,223,121,231,206,187,111,159, 93, 49, 21, 3, 47, 95, 54,137, 22,157, 54,104,158,218,200,184,237, 69,107,
+ 49, 82, 90,178, 39, 12, 71,132,124,102, 17, 21,108,204, 91, 69, 50,238, 98, 94, 63, 3,220, 45,163, 30,153, 20,221,190,118, 21,
+210, 22, 32,105,161, 54,205,164, 96, 45,138,108, 57, 66,219,146, 42,186,148,156,220, 2, 89,157, 72,218,134, 99, 24,128, 79,196,
+251, 31,219,123,251, 13,215,203,226,241,181,235, 86,173,154,157,118,255,104,199,153,199,116, 35,139,164,228,181,185,101,144,150,
+ 6,232,237,145, 99,176,114,174,106,184, 71,102,243, 14,197,172,163,228,155,217,177,101,113,249,165, 73,199,246,199,148, 54,119,
+145, 0, 12,167, 68,187, 27, 20, 29, 35,200, 89,113, 79,159,205, 0, 46, 53, 75,167, 75,151,153, 79,196, 32, 58, 57,127,124,231,
+182,173,183, 93,255,173, 85,107,103, 79, 89,191,154,103, 86, 41,101,185,208, 56,199,170,133,140,157,208, 72,109, 64, 11,166, 49,
+136,154,115, 54, 92,224,118,180,209,137,230,217, 70, 68, 98,236,107,111, 18, 26,219,134, 37, 49, 88,246,214, 25, 1,106, 21, 23,
+212, 33,255,102,244,198,230,226,150, 17, 77,237,204, 13,109, 9,177, 45, 69,182,101,111,251,100,152,208, 52,114,252,232, 83,219,
+110,185,241,238,173,219,167,167, 7,103,158,125,218,228,244,128, 10, 55, 1,173,239,163,220, 0,147,141,174,150, 65, 73,109, 3,
+194, 56,217,218,199, 53, 22, 35, 1,109, 39, 62,161,141,193,115,197,195,125,149,118,139, 61, 34,101,170,137, 59, 47, 31,129,164,
+121,214, 72, 54,240, 93,232,191,220,174, 64, 84,138,246, 56, 43, 79,180,203,141,237,144,152,219, 92,199,105,156, 71,159,126,236,
+219, 87,254,245,246,109, 59, 69,244,148,245, 43,215,172, 93,217, 31,244,172,155,174,205,209,168,147,209,242, 56, 38,173,221,202,
+222, 82,233,160,219, 46,150,251, 6, 12, 67, 65, 17,133, 90,232,239,247,218, 54, 63,117, 58,213,168, 19,236,160,237,114, 27,107,
+184,149, 78, 49,195, 25, 2,153,148, 9,237, 78, 31,201,242,145,150, 79,185,148,219, 94, 58, 18,136,104,251,182, 7, 14, 78,198,
+126,191, 90,189,118,118,197,236,242, 94,191,151,193,111,237,204,171,234, 22,239, 58, 53,161,204,198,207, 1,126,110,119, 35, 94,
+218,209,211,225, 58,151,222,106,227,177, 90, 6,200,170, 98, 95, 85,154,208,198, 65, 52, 67, 20,198,106, 45,232,212,165, 13, 40,
+238,240,229, 11,109, 92, 51,215,214, 21,164,149,133,100,104,169, 52,241,118,186, 73,218, 35, 6, 76, 78, 13,102, 87, 46, 91, 62,
+ 51,221,235, 87,206,188, 55,174,187,215,110,180,244,218,228, 14,185,238, 92,188, 37, 21,163,142,157,176, 4,166,227, 65, 41,183,
+ 67,162,160, 39,153,185,128,210,252,209,137, 88, 58, 22, 83, 59, 65, 75, 75, 92,109,155, 28, 92, 54, 29, 25,117,105,210, 6,125,
+119,232,235, 99, 77, 0,250,156,143, 44,160,170, 87,205,204, 76, 79, 78, 77,246,250,222,205,157,239, 73, 57,171, 56, 59,131,131,
+218, 28,251,249,248,161,109,172,140,210,158, 83,144,127,205,227,128, 60,242,167, 12,209,169, 27,180, 49, 67,177,132,209,171, 24,
+ 51, 23,210,157,129, 51,126, 76, 68,116,137, 54,249, 40,159,194,187,111,155, 18,178,117, 26, 27,170, 35, 57,164,142, 0,122,253,
+106, 98,114,208,235, 71,107,174,110,139, 2,110,157,213, 6,151,229,156,136, 72,127,136, 96,218,154,115, 6,163, 75, 30,199,249,
+128,218,104, 34, 41, 93,242,222,126,171, 50, 54,212, 82, 48,110, 67,203,220,169,142,136,100, 73, 43, 83,151,117,189,164, 51,161,
+101,223,119, 4,215, 97,220, 47,149, 82,182, 65, 10,196,200, 85, 63, 6,147, 14,229, 22,203, 98,100,132,212,218,104,144,161, 33,
+106, 61,118, 46, 43,146, 71,240,252,108, 74, 6,181,125, 3,146,123,191,156, 36, 82,134,255,102,156, 76, 50, 78,102, 70,215, 45,
+ 45, 58,139,150,108, 41,178,135, 22,233, 28, 49,180, 70,216,159,161, 35,164,150,215,223, 74, 10, 69, 94, 45,133,188, 45,241,152,
+ 6,217,132,108,107, 72, 30, 51, 21,173,139,160,118,132, 22,200, 5,145, 51, 81,116,122,173, 59,211, 28, 92,229, 50, 20,155,163,
+254, 82,248,242,148, 94,198,233,241, 94,156,147, 76,238,243,177,205, 89, 89, 44,231,236,152,161,174,195,234,134,127,173,129,110,
+197,209,233,152,208,246,103,153, 2,215,189,142,205,213,204, 71,204, 70, 77, 48, 81, 55,252, 35,203,252,178,173,245,144,215,250,
+245,178,115,246,233,119,221,104,182,245,233, 68,206,230,204,246, 76,203,136,148, 37, 45, 4,101,134,179,116, 6,199, 97,105, 47,
+ 1,208, 74, 69,150,132, 46,109, 87, 68, 57, 56,249,206,225,138,161, 40,227,196,198, 78,162,116, 53,172, 29,141, 87,218,198, 98,
+ 33, 1,230,144, 35,123, 78,171,218, 80,139,182,180,120,179, 33, 21,121, 14, 44,149,241,242,185,153, 28,109, 69,182,168,134,131,
+194,210, 90, 94,148,249,149,109,151, 12,156,180,104,191,152,181, 6,214,106,230, 19,131, 59,154, 87,142, 97,105,191,200,236,200,
+182, 25, 75,203,136,188, 78, 91,214,216, 64, 54,237,176, 76, 11,225,178, 27, 73,151,158, 71,199,211, 58,179,122, 72, 59,253, 80,
+ 30, 71,179,163, 11, 37,245,111,235, 48,100, 37, 58,233, 12,113, 17,255, 76,183,113, 22, 99, 61, 39,121, 74, 91,231, 13,255, 95,
+181,136, 79, 99,109, 83, 36,201,229,176,150,241,153, 79,154,116,219,207,242,129, 26,107,216,106, 91,164,202,191, 64,159,163,225,
+167,125,210,106, 16,151, 25, 34, 29, 78, 78, 39,111, 47,150, 38,143,139, 40, 53, 87,255,151, 66,146, 41,217,102,105,182,134,116,
+186, 83,199,228,210, 61, 74,173, 71, 71, 91, 6, 44,235, 5,150, 72,103, 44,128,105, 91,153,208,157,210,215,117, 91, 99,150,184,
+ 99,125,164, 29,141, 87,250,178,218, 14, 56,160,140,209,183,185, 42,108,181, 70, 31,166,232, 13,117, 25,219,112,230, 9,113, 75,
+145, 26, 7,152,219,126, 46,109,199,220, 20, 73,116,129,169, 78,223,100,121, 1, 25,239, 66, 30,115, 94, 80,116, 84,208, 63, 41,
+ 75, 13, 81,105, 29,203, 42, 33,101, 43, 48,246, 1,140, 75, 22,227, 77,162,218,233, 53, 38,218,178,101, 75, 23,125,199,223,149,
+244,248, 66,184,217, 63, 53,151, 36,210,255, 3, 51, 1,167, 61,222, 14,125, 55, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+ 0};
+
diff --git a/source/blender/editors/datafiles/scrape.png.c b/source/blender/editors/datafiles/scrape.png.c
new file mode 100644
index 00000000000..b67bfa15984
--- /dev/null
+++ b/source/blender/editors/datafiles/scrape.png.c
@@ -0,0 +1,414 @@
+/* DataToC output of file <scrape_png> */
+
+int datatoc_scrape_png_size= 13055;
+char datatoc_scrape_png[]= {
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 96, 0, 0, 0, 96, 8, 2, 0, 0, 1, 26,253,
+208,249, 0, 0, 0, 4,103, 65, 77, 65, 0, 0,177,143, 11,252, 97, 5, 0, 0, 0, 6, 98, 75, 71, 68, 0, 0, 0, 0, 0, 0,
+249, 67,187,127, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 0, 7,116, 73, 77,
+ 69, 7,218, 7, 19, 0, 34, 13, 86,254,139, 21, 0, 0, 32, 0, 73, 68, 65, 84,120,218,237,189,121,176,101,233, 81, 31,152,153,
+223,114,206,185,219, 91,170,170,107,233,234,234, 77,106, 36, 33,129, 6,144,196,210,116, 32, 1,178, 65, 4, 2, 2, 44, 6,205,
+ 48, 2,198, 33, 19,158, 8,140,151, 48, 12, 99,198, 6, 19, 30,121,108, 6,135, 61, 16,120, 38,128,177,153,177,197,226,177, 25,
+ 16, 98,179,144, 52, 32, 33,181, 90,162,213,123,181,106,223,222,114,223,187,235, 89,190, 37,115,254,248,206,185,247,150, 36, 27,
+ 97,107,236,118,132,111, 85,191,122,203,125,231,126, 55, 79,126,249,101,254,126,191,204,198,199, 30,123, 12,254,196,199,231,242,
+ 36, 29,153, 95,248,216,123,150,199, 55,163, 15,183,111,222,217,222, 29, 61,255,194,181, 59,251,227,255,225, 39,127,113,245, 36,
+ 2,128,254,246,217,209,233, 71,122, 91,167,230,147,197,123,255,229, 7, 71,253,226,145, 7,207,255,242, 63,250,225,255,227, 93,
+ 63,216, 94, 9, 1, 94,248,232,111,207,231,203,247,252,223, 31,120,221, 87,189,230, 77,223,248,229, 89,145, 19, 34, 71,238,109,
+157,184,249,169,143,127,253,215,127,179, 6,128, 51, 15,191, 58, 94,124,242, 75, 94,255,202, 7, 95,118,126,184,181,109,139,161,
+206,122,197,240,132,205,122, 31,250,205,119,255,249,111,127,179,186,112,225,254,251,122,238, 99, 31,126,234,117,143,126,209,112,
+107,219,230,131,172,183, 53,216, 62,173,116,118,241,241,223, 9, 49,250,198,105, 0,185,247,254, 51,103,207,223, 51, 24,237,144,
+ 54, 72, 74,103,133,201, 7, 79,252,222, 47,223,188,182, 7, 8,117,213, 16, 0,140,182,119, 71, 59,219,136,136, 0,164, 84,127,
+251,244,165, 39,126,171,105,252,246,137, 81, 12,177,174,156, 6, 0,102, 6, 32, 36, 2, 82,194,241,131,255,242,159, 28,236, 31,
+ 41,173,141,214, 33, 68, 34,212, 0, 0, 32,136, 36, 32, 16,253,244,104,175, 63,236, 11,192,222,237,113,185,172,170,101,237,156,
+ 39, 0,136,193,199,224, 67, 83, 47, 38, 71,243,217,210, 53, 78, 68,182,182, 7, 28,153, 69,110,223, 62,194,207,233,222,125, 46,
+ 15,188,252,201,223, 47,103,123,203,201, 1,128,252,226,207,253,250,104,216,251,178,175,120,245,183,188,243,199, 55,159, 68,118,
+176, 51, 58,253,176, 29,156,138,145, 51,163, 94,254,138, 11,206,185, 95,253,233,255,254,159,253,212, 95, 59,125, 98,171,189,119,
+215, 62,249,190,249,116,241,252,211,151,175, 94,190,253, 53,111,126,253,104,103,168,141,225, 24, 17,241,195, 31,252,205,235,207,
+252,225, 99,223,254, 87,241,250,197,199,159,248,253, 95,155,140,167,131, 81,255,220,125,103,242,254,150,182, 61,147, 15,134,187,
+231, 94,252,216,111,221,185,117,120, 60,158,210, 71,126,231, 95, 60,249,248,115,121,145,221,123,225, 92,214, 27,153,188,159, 15,
+118,183, 78,221, 95,207, 15,174, 95,185, 19, 92,168,171, 70, 63,244,242,135, 50,107,238,185,247,140, 49, 57,146, 82,202,228,253,
+173,197,209,205, 63,124,239,175, 55,141, 43,203,154,148, 34,219,223, 62,125,254,156, 86, 86, 16, 0, 32,239,239,112,112,207,126,
+244,131, 87,175,220,178,153, 65,132,199,159,120, 65,187,106, 78,132,128, 64,128, 72,180,119,229,201, 79,124,228,147, 33,196,243,
+247,157,190,118,249,206,137, 83, 91, 15,156, 63, 69,194, 17, 0, 5, 1, 16, 92, 57,155, 79,167,103,239, 61,149,231,118, 58, 93,
+246, 7,249,165,139, 55,132, 69,123, 87, 19, 17, 68,244,193, 47,230,139,186,108,156, 11, 69, 47,247, 62, 78,142,103, 89,102, 38,
+147, 57,124,190,238,157, 22,145,167,158,120,255,246,246,142, 72,228, 24, 57,120,225,128, 8,161, 94,248,102, 89,151,179,255,231,
+221,239,249, 31,255,183, 95,249,156, 46,212,183, 82, 30, 93,111,150,147,186,156,186,186,246, 33,120, 23,110,223,216,251,192,251,
+ 62, 97, 12,189,242,213, 15,253,237,191,240,182,222, 32, 63,119,254,180,128, 56, 23,254,198,255,242,139,215,110, 31,124,186, 51,
+ 61,250,232,163,127,255,135,223,230,157,231,200, 28,249,198,245, 59, 31,122,255, 39,238,123,224,204, 43, 94,253,208,193,254,241,
+112,212,223,218, 30, 40,173, 1, 64,132, 57,114, 12,236, 99,116,181,115,206,239,223, 57,250, 43,127,239, 23,218, 21, 1,192,169,
+251, 95, 27,125, 93, 30,223,220,191,125,107, 54,153,111,239, 12,179,220, 50,243,203,190,224, 66,150,231,202, 88,165, 12, 41,141,
+ 68,136,132,164, 77, 62, 80,202,154,188, 47,236, 79,158,218, 17,142, 63,244,247,254,137, 6,192,107,207,124,200, 59,255,228,199,
+159,159, 28,205, 31,120,248,222,175,120,236,181,131, 81, 63, 43,114, 99, 11,101,172,210,153,210, 70,153, 76,153,220,230, 67, 84,
+122,124,227,185,195, 59,215, 92,217,204,102, 11, 66,137, 2, 63,252,125,223,166, 1,224,120, 60,109,106,167,149,190,240,192,217,
+135, 31,185,208, 27,244,149,182,164, 52,146, 86,202, 40,155,105,219,179,249,192,246, 70, 32,114,251,133, 15,125,234,249, 75,229,
+178, 82,138,124,136, 68,196,204, 72,168, 1,228, 11,223,240,104, 53, 59,120,240,145, 57, 34,146, 50, 74, 43, 16, 68, 36, 68, 0,
+ 4, 82, 58,239,111,155,188,239,154,250,240,218,211, 31,250,192, 71, 79,158,218, 9, 33,214, 85, 19, 35, 51,243,193,222,177, 49,
+ 90, 3, 64, 61, 59, 12,174,209,202, 36,215, 5, 22,160,116, 33,165,109, 94, 12, 78,140,175, 63,245,194, 83,207, 79, 39,115, 68,
+ 24, 14,250,222,135,253, 59, 71,231,206,159,138,145,151,139,114, 56,234,141, 15, 38, 26, 0, 66,112, 0, 0, 8,237, 42,128, 0,
+ 16, 64, 56,250,197,209,237, 59, 87,158, 47,151,149, 8, 11,128,107,124, 93, 59, 0, 24,109,245,103,147,197,157, 91,227,237,221,
+ 33, 2,228, 69,174, 1,128, 99, 0, 1, 68, 0, 16, 17, 0, 9, 0,208, 52,206,213, 77,211, 52,174,241, 28,217,102,118,247,132,
+ 10, 62,206,166,139,178,172, 67,136, 28,185, 63, 40, 14,246,142,202,178, 25, 12,122, 26, 0,235,114,137, 0,136, 8,136, 32, 18,
+153,163, 15,222, 7,239, 67, 12, 49,132, 24, 99,140,129, 67, 8, 33, 68, 99,116, 81,100, 77,227,154,218, 11, 72,150,219,178,108,
+246, 15,143, 63,127,113,242,243,242,184,112,225, 2,125,190,174,165, 31,122,240,254, 15,189,255, 55, 67,240, 49, 6,137,193,251,
+ 70,107, 29,154,210, 55,139,232,155,235, 47, 62,255, 13,239,248,209,207,229, 66,234,143, 63,252,155,213,252,176,158, 29, 44,143,
+110,204, 15,175,149,211, 59,229,116,111,122,120,243, 3,239,125,255, 35, 95,248,202,139,207, 60,191,173,236, 79,252,200,247,126,
+203,215,190,225,217, 23,175,239, 31, 77, 63,235, 85,182,182,182,240,234, 51, 31, 12,174,105,170, 89,179, 60,106,170,165,119,222,
+251,176, 92, 84, 31,251,240,211,207, 92,186,249,198,175,250,162,217,116,225,157,191,239,193,179, 54,203,152,217, 59,255,142, 31,
+250, 7,159,105, 35,188,115,229,147, 81,162, 68,142,193,213,203,217,114,126, 12, 97, 49,190,125,231, 19,143, 63,115,235,230,225,
+133, 7,207,158, 59,127, 15, 42, 18, 22, 34, 66,132, 24, 57,132, 48, 57, 94,252,197, 31,255,217,187, 46,244,177,247,254,140,115,
+ 77,240, 65, 68,202,101,245,177, 15, 63,125,249,202,237,111,125,219,215,141,247,143,130,143, 39,239,217,205,114,131, 68, 32,194,
+ 44, 49,198, 16, 98, 8,161,169,125, 93, 54,223,255, 55,127,186,241, 33, 93, 72, 35, 81,112,161,105, 92, 8,126,114,180, 88, 46,
+ 43, 77,234,201,199,159,123,249, 43, 47, 12,134,131,188,103,181, 54,136,132,132,194, 44, 44,128,160,181,217, 62,243,240,232,228,
+249,143,191,233,141,207, 63,249,177,111,125,231,223, 6, 0,189,115,239,171,182,207,113,179, 56,154, 30, 92,155,207,202,162,200,
+206,158,179,103,239, 61, 57, 24,246,251,131,194,216, 76,153, 54,164, 32, 33,130, 82, 38, 51, 89,159, 99, 0,192,195,219,151, 23,
+211,229,207,252,232, 59,255,206,207,191, 71,107, 99, 35,243,209,254,141,201,120,106,140, 57,117,207,110,111, 88,156, 58,189,219,
+ 31,244,178,188, 80, 38, 87,218,144,182,164,140, 82, 90,103, 61,219, 27,101,249, 96,124,253,147, 79,252,222, 47,151,139,154, 52,
+ 89,163,191,225,209, 47,209, 47,126,252,125,136,184,119,123,252,212,199, 47,110,239, 14,239,123,224,236,206,238,168,232, 23, 54,
+ 47,180,201, 72, 91,173, 51,210, 86,155, 76,103, 61,147,247,155,114,126,233,201, 63,144,216,212,149,243,222,199, 16,157,243,214,
+106,154, 28,205, 15,247,143,143, 15,167,206,121,165,213,246,206,176,151,214,162, 45,165, 80,173,116,186, 74,214,219, 34,210,121,
+127,107, 56, 26,148,203,250,214,173,177,205, 76,100, 6,128,249,172,212,218, 40,142,108,172, 62,125,246,196, 3, 15,221, 59, 24,
+ 13,109,158, 19,105, 36, 69,164,136, 52,105,163,180, 53, 89, 79,105, 83,206,246,159,127,252, 3,135, 7, 71, 28,101,119,167,255,
+244, 39, 47, 63,252,178,123, 17,157,205,180,126,224,229, 95, 80, 45,142,251,163,222,185, 11,178,181, 61,178, 69, 15, 73,181, 33,
+ 5, 1, 0, 20,146, 50, 86,155, 44, 6,183,127,229,233,233,100,222, 84,158,153, 17,225,236,153,221, 63,250,240, 51,175,121,205,
+131, 0,168,251, 59,103,149,237,145,210, 49, 6,165, 12, 34, 17, 32, 32, 34, 34, 8, 32, 34,153, 60,235,111,251,166, 22,224,139,
+207,190,152,231,153,177,186,169, 93,112,129, 69, 30,122,240,204, 71, 63,242,172, 12,134, 20,124, 29,220, 18,144,148, 50,128,132,
+ 0,105, 33,237, 86, 52,182, 55, 58, 17, 92,189, 24, 95,123,230, 15,223, 59, 26,245,231,179,229,116,178, 24,109, 13,180, 53, 34,
+ 64,132,231,206,238,206,103, 75, 29,154,101,244, 14, 65,128,218,107, 72, 10,223, 72,164,180, 49,189,122,118,112,241,143, 63,116,
+235,250,190,115,222, 24,109,172, 41,122,217,165,139,215, 47, 60,120, 46,132,224,156, 88,107, 93, 8, 58, 6,199,194,128, 4, 0,
+136, 2, 64, 41,236,166,232,191,152,220,186,115,237,202,173,235,251, 85,213,196, 40, 49,114,140, 81,107, 61,218, 30, 92,124,238,
+234,217,123, 79, 41, 69,164,176,200, 44,113, 12,237, 91, 65, 20, 1, 68,193,246, 24, 96,239,202,229,116, 12,136,219,187,163,162,
+200,148,198, 24, 99, 93,185,229,162, 4,128,162,103,111, 94,219,139, 49, 2,128, 82,138, 68, 24, 64, 68,164,141,255, 0, 32, 2,
+194,193, 55,174, 90,186,166, 17, 22,109,212,246,238,104, 48,232, 41,165,152,197,249,224, 26,175,148,138,204,123,183,143, 92, 19,
+ 0, 68, 75, 12,194, 12,136, 44, 76,136,194,194,192,194, 49,120, 87, 87,117,211,248, 16, 66,140,204, 44, 89,110, 69,100, 54, 93,
+132,208,190, 71,107,244,193,100,193,204, 41,173,107,210,251, 66,164,152,146,120,225,224,156,115,222, 53, 46,184, 16, 67,140, 33,
+166,223, 84, 74,245,122, 69, 8, 49, 70, 22, 1, 64,208, 90, 77,103,101, 96,210,222, 59, 17, 64, 4, 68, 2, 0, 97,142,145,189,
+243, 33,108,156,107,233, 66,129, 67,136,204,108,141, 22,150,200, 17,137,172, 53,211, 69,233, 35,193, 75,234, 92,187,239,190,251,
+ 8, 94, 74, 15,196,182,214,106, 31,175,251,178,215,126,215,219,190,237,181,175,249,194,251, 31,184, 80,228,153,164,231, 0, 8,
+ 8,136,128, 8,128, 72,186, 25, 28, 57,134,189, 59,183,222,243, 27,191,254, 99, 63,249, 79, 63,143,107,210,145,249,206,181,167,
+ 0,144,153,129, 35,115,224,224, 57, 86,229,100, 18,131, 23, 14, 2,160,116, 70, 74,165, 10,112,178,127,253,185,167, 47,126,201,
+151,127,169,111,170, 56,159,188,234,194,233, 31,249,111,222,122,249,214,225,238,185,221, 95,250,245, 15,236,143,167,255,190, 11,
+ 66,128,197,248,102,140, 94, 98,136,193,197,224,162,175,163,119,157, 7,114,202,225, 68, 36, 70,118,141, 59, 26, 79,175, 93,188,
+246,129,223,251, 8, 88,243,231,222,246,166, 16,184, 63, 40,206,238,140,154, 73,245, 55,255,187,239, 58,121,106, 11, 24,152, 99,
+140, 2, 32, 79,189,112,245,231,126,229,119,247,198,147, 63,197,130, 0,128,108, 31, 69,136, 8, 73, 17, 34, 71, 23, 92, 19,220,
+210,215, 75, 87,205,131,111, 98,136, 33, 4,142,209,251,224, 27,207, 34, 86,171,178,106,126,237,221,191,119,250,204,137,211,231,
+ 78,156, 62,119,146,163,136,200,236,120,174,180,178,153,213, 70, 33,194,107,191,240,225,159,122,229,131,204, 18, 3, 59,215,252,
+236, 63,255,173,143, 62,245,226,159,188, 32, 55,223,143, 49, 8, 71,142,161, 45,223, 73, 3,160,119,213,100,124,244,226, 11,215,
+174, 95,185,253, 95,190,243,123, 16,101,186,127,181,169,221,137, 83,219, 90, 43, 64, 28, 12,123, 59, 39, 70, 69,191, 48, 70, 19,
+117,251, 67, 68,160,253, 35, 2, 44, 2, 44,145,217,102,250, 7,191,239, 91, 99,140,190, 9,207, 94,188,242, 63,255,194,175,125,
+118,191,126,244,209, 71,255,254, 15,253,185,224,125, 10, 47, 41, 60,165,212,165, 46,155,131,189,241,245,171,123,123,251,199,129,
+121,212, 47,238, 61,127,234,204,249,123,178,220, 18, 97, 58, 1,140, 53, 90, 43, 66, 18, 20, 74,197, 44, 32, 8, 51, 11, 0, 48,
+139,136,176, 8, 72, 10,221, 82,215, 62, 50,245, 71, 59,247,156,127, 96,231,196,201,247,253,206,123,254,194, 95,125, 87,221,184,
+ 85,130,165, 1, 96,231,204, 67,174,154,187,102, 25,154,202, 55,206,135,232,156,103,199,141,243,141,243,128,208,203,173, 54,122,
+ 48,236,229,253,156, 8,139, 34,203, 10,107,173, 37, 69, 74, 41, 82, 10,145,136, 8, 17,211,137, 40,136, 40, 32,194,105,155, 18,
+105, 34,133, 90, 43,157, 41,157, 41, 99, 8,105,118,112,245,133,203,127,188,165,249, 23,254,238, 15, 84,203,230, 93, 63,251, 43,
+207, 93,189,213,221,178,166,170,235, 50,250, 64, 58, 31,110,157,201,138, 33,251,102,178,127, 53,198,216,235,231,219,187,195,225,
+ 86,191, 40,178,209,214, 96, 48,234,247,251, 69, 94,100,218,104,165,181, 82, 26, 73, 83, 58,210, 72,117,149,101,187, 50, 34, 69,
+100,218,117, 24, 75,202, 16, 41, 99,243,122,126,116,124,231,226,236,248,200, 53, 62,196,120, 60,158,231,185,253,203,223,251,214,
+106, 89,255,175,255,226, 3, 26, 0,184, 89,102,121, 65,197,208,251,102,124,243,242,213, 43,183,198,123, 71, 54, 51,189,126,174,
+181, 62,125,250,132,201,108, 94,216,188,200,178,204,106,107,116, 90,138,210,164, 52,145, 66,165, 8, 53, 18, 33,169,148, 2, 33,
+ 41, 82, 70,117, 73,149, 82, 6, 8,217,187,233,222,165,163,219, 87,102,211, 69, 83, 57, 31,130,176, 0,192,104,212,243, 62, 78,
+ 38,139,221,157,209,215,127,229, 23,107, 0,188,118,233, 50, 0,176, 72,112,254,248,104,118,231,246,120, 54, 89, 32,225,206,238,
+232,244,153, 19, 91, 59,163,162,159, 89,107,149, 86, 90,107,165, 13,146,194,180, 20,164,100, 33, 68,133, 74,165, 21,144,210,164,
+172,182, 25,233,140, 72, 5, 95, 7,223,152,172,103,178,158,206,250,135, 7, 83,165,176,232,231, 80,214,222, 5,239, 3, 71,142,
+ 49,142,134,189,163,241,132, 57,221, 50,231, 18,182,229, 93,112, 46, 16, 97,158,103,189, 65,126,207,153,221, 83,103, 78, 12,134,
+133,177, 86,105, 77, 74, 35, 18,145, 2, 36, 36,234,110,147, 34,210,221, 58,140,210, 70,233, 76,217, 92,155, 76, 68, 56,122, 9,
+205,226,224,242,193,237, 27,243,201,162,113,142, 89, 2,192,108,186,184,121,227,240,225,151,223,139,136, 77,221, 48,139,176,228,
+153, 13,110,166, 1,224,228, 61,187,174,241, 62,165, 21,154,122,253,140, 72, 13, 71,253,209,246, 48,239,229, 90, 91, 82, 10, 19,
+104,132, 8, 68, 8,132, 68, 72, 4,128,216, 45,142,148, 81,198, 42,109,181,201, 81, 27,142,190, 94, 76,142,239,188,112,120,251,
+206,108,178,168,170,198,251, 0, 34,109,102,129,120,250,244,206,209,225,244,202,165,219, 15, 60,116, 54,207, 12, 51, 35, 81, 11,
+ 25,156,123,217, 23, 71,239,188,171,220,114,218,212,203,224, 61, 34,146,214, 90,105,210, 38,185, 42, 32,162, 32, 16,160, 16, 80,
+ 10,222, 64, 4, 41,143, 34,165,148,177,198,246,116, 86, 0,169,224,234,114,118, 56,190,254,220, 98, 62,151,148,120, 17,166, 40,
+144,194,138,136, 8, 0,128,220,123,254,228,241,120,122,245,202,222, 67, 15,159,179, 86,137,136, 78, 41,167,128, 32, 8,105, 99,
+179,194,216, 12, 68, 4,145,218,165, 80,151, 12, 10, 8, 2,166,165,164,108, 14,145,148, 54,185, 41,134, 89,111, 4, 2,174,174,
+180,177, 40, 2,190, 86, 74,113,140, 55,175,239,237,221, 26,159, 60,189, 51, 26,246, 99,140,206,249,224, 67, 12,156, 30,192, 80,
+ 20,217, 3, 15,158,185,115,107,220, 52,174, 33,163, 1,192, 55,165,119, 85,244,142,163, 23, 0, 68, 2, 74,201, 53, 1, 96,178,
+115, 2, 38,218, 15, 41,222, 16,145, 54, 38,239,103,253,109,109,114, 95, 47,203,233,222,248,230,167,198,227,227,114, 94,122, 31,
+ 0,144, 20,246,251,197,131, 47, 59,191,152,149, 47, 62,127, 53,239,101,231,206,159,206,243, 22,111, 8, 33,132, 24, 68, 68, 17,
+109,239, 12,198,135,211,195,163,185, 6,128,224,235,232, 29,199,144, 82,217,116,120, 8, 8, 17,164,251, 2,128, 32,128,132,128,
+ 8,128,148,188, 0, 21, 2, 70,239,150,227, 27,179,195,155, 7,251,135,147,163,121, 85,214,174,243, 21, 74,222, 69,164,181,202,
+114,115,225,193,179, 85,229, 47,191,120, 35,134,120,250,220, 73,107, 53, 34,136,136,120, 65, 68,165,213,112,216, 27, 44, 19, 64,
+ 29,188, 72, 20, 88, 91, 66, 68,136,168, 93,141,128, 16, 36, 12, 10, 1, 5, 16, 16,153, 25, 98,229,235,232, 93, 85,151,203,114,
+ 89,185,218, 35, 2, 41, 82, 76, 28, 89, 88, 98, 20,230, 0,128, 33, 4,132,180, 37,112,103,119, 84,215,238,230,181, 61, 17,217,
+ 57, 49,178,198, 96,138,166,136, 90, 43,107, 76, 2, 1, 35,136, 32,200,234,254,180, 39, 37,130,136, 32, 17, 10, 38, 7, 18, 4,
+144,200, 81, 56,134, 24,124,240,206,123,239,125, 32,162,188,151,153, 76, 23, 46, 4, 31,154,198,213,181,243, 46,165,245, 12, 0,
+192, 2, 8,201,224,132, 48, 26,245, 23,139,106,239,214, 88,107,213,235,231, 68, 20, 99, 20,233, 50, 70,142,145,153,219, 90, 42,
+249,119,242, 88, 17, 32, 98, 97, 20, 4, 70,129, 0, 1, 68, 56, 6,207, 49, 4, 31,210, 35,182,167,114,114,118,210, 70,147, 34,
+ 99,141,107,124, 83,187, 4, 94, 49, 8,135,180,187, 34,136, 48,136,181,154,163, 93, 46,203,249,188,204, 50,107,173, 22, 0, 78,
+187,140,163,111,183, 97,187, 16, 4,110,235, 52,224, 8, 0, 32,192,192,194, 41,121,229, 24, 66, 7,141,197,148,205,166, 71,100,
+ 1,145, 24, 89,152, 1,192, 88,173, 20,121, 23,234,186,113,206,167, 36, 66, 68,210, 83,153, 37,165, 12, 77, 19,102,243,133, 53,
+198, 26,195,204,105,151,213, 44, 9,150,219,248,179,225, 79,233, 50, 18, 57, 50,199, 16, 98,228,200,204, 49,198,152, 46,207, 49,
+ 69, 23,150,200,237, 43, 50,167,127, 5, 0,172, 53, 68,212,160, 3, 31, 98,136,235, 76,157,128,148,202,172, 14, 49, 46,171,198,
+185, 16, 2,104, 68,252,157, 63,124, 70, 36,149,191,171,231,182,119, 60, 69,157,148,107,125,198, 3, 54, 62,131,238, 59,188, 74,
+131,238,122, 90, 90, 98,247,214,186,101, 11, 71, 14, 33,122, 47,141, 7,118,193, 9,190,196,240,198, 84,155,189,116, 22,243,216,
+ 99,143, 81, 91,209,191,100, 30, 47,173,202,245,165,184,160,187, 74,233,239,126,251,119,252,153, 55,191,233,149, 95,240,240,233,
+123, 78,111,226, 87,146,206,182,182,130, 96,142, 81, 36, 86,203,229, 83, 79,126,252,111,253, 79, 63,253,201,231,175,124, 62, 23,
+132,136,239,252,111,191,251,111,253,232, 95,143,145,161,123,201, 24,188, 72,170,135, 2,199,160,148, 1, 20,142,142,189, 99,246,
+236, 93,228,200,193,221,123, 34,255, 75,255,245, 55,253,227,255,243, 55,255,232,217, 79,125,190, 22,164,126,226,199,126,228,251,
+223,249, 14, 4, 4,137, 32, 81,162,103,223, 68, 87, 69,183,244,245, 60,184, 37,114, 76, 63, 98,102, 87,205, 47, 61,243,199,182,
+ 24, 16, 6, 87, 45,166, 71,147,155,215,246,108,148,183,127,231,159,201,140,126,254,210,205,127,207,213,220,127,255,253, 90,162,
+111, 22,199, 28, 29, 7,207,209,199,224, 98,104,162,111, 56,184, 24,163,164,204, 18, 80,132, 99, 12,229,178, 60, 62,156,252,191,
+255,250,151,190,249,237,111,203,148,113,222,139,136,214,234,163, 31,122,234, 47,190,227,155,255,252,119,254, 89,231,252,254,225,
+228,163,127,124,241,231,126,245,119,254, 29, 45,244,230, 55, 61,250,240,133,123,162,111,216, 55,193, 85,190, 41,163, 43,131,171,
+189,115,222,187, 24, 98, 12,193, 57,231, 26, 87,215,205, 98, 94,141, 15, 38,251,119,142,126,247,119, 63,120,230,244,142, 82,176,
+152,151,174,241,150,240,217,167, 46,157, 62,119,130,136, 50,107, 30,186,239,204,183,189,249, 43,223,250,181,175,223, 63,154, 92,
+191,125,248,167,178,144,122,203, 55,124,221, 43, 95,241,114,165, 45,146, 74, 80,174,180, 80,208, 26,244, 16,145, 24, 99,240,177,
+174,234,233,241,252,120, 60, 43, 27,247,236,179,151,209,135,193,176,175, 53,229,185,237, 15,138,249,100, 33, 8, 54, 51, 68, 68,
+132, 68,248,101,175,121,249, 91,191,246, 13, 95,242,170,135,222,255,209,167,218,227,251, 79,188,101, 44,192, 66,136,100,242, 60,
+235,109, 11,115, 12, 77,240, 85,168,151,174,154,251,166, 12, 33,196, 16, 36, 21,231,136, 0,160,181,202,181, 34,162,233,100,209,
+ 31, 20,219,187, 35, 17, 96,102, 4, 32, 69,193, 71, 99, 81, 41, 66, 84, 68,162, 20, 61,120,225,236,207,255,157, 31,248,212,213,
+219, 63,246,211,239,254,147,119,153, 49, 89,209,223, 2,224, 22, 31, 3, 33,165, 81, 25, 80, 57,163, 13,162, 79,220,179, 91, 45,
+142, 92, 53, 47, 23,203,166,110, 76,102,138, 94,182, 21, 88, 25, 26,109,245,243, 94,150,247, 50, 99, 76, 58,141, 69,160, 75,114,
+169,251,142, 32, 18, 43,124,228,161,123,127,225,239,252,192,123, 63,248,196, 63,127,207, 7,255,109, 11,170, 23, 71,147,219, 47,
+ 36, 44, 38,129,196,128, 72,168, 35,135,106, 49,185,113,229,230,197,231,174,124,225,235, 95,255,200,171, 94,105,243,195,166,105,
+122,189,124,180, 61,176,153,205,114,179,189,187, 53,218,238,219,204,166, 66,167,187,207,237, 7,144,182,224, 65, 20,102,140,200,
+128,248,141, 95,243,165,111,122,253,171,255,242,223,253,249, 69, 89,127,118,167,126,211, 87,189,246,252,169,162, 46,103, 77, 57,
+175,203,101,181, 92,214,213,178, 92,204, 22,179,227,227,131,227,219, 55, 14,246,110, 31,125,226, 35, 79, 62,249, 71,143, 91, 11,
+ 54, 51,194,172,180,234, 15,123, 91, 59,163,173,157, 65,111, 80,152,204, 26,163,181,214,186,173,181,149,210, 74, 39,154,163,173,
+ 35,219,172,185,125, 73,173,222,244,134,215,156,221,222,122,226,185,203,159,197,169,223,244,213, 95,118,225,236, 78,240,193,251,
+ 54, 17, 12, 62, 56,231,155,202,205,230,229,209,193,228,120, 60,171, 26,207,194,203,233, 2, 1,179, 60,203,138,172,215,207,251,
+131, 34,239,101, 54, 45,198,168, 4, 65, 40, 77, 90,173, 30,105,141, 74, 27,109,173, 41,138,204, 88,163, 76, 94, 12,134,247,191,
+252,149,111,126,235, 91,191,239,187,191,237,120,255,214,211, 47, 92,189,203,169,149, 82,218,104,230,152,202,173,148,232,197,132,
+222,185, 16, 98, 4, 0,163, 41, 51, 26, 73, 57, 23,152, 57, 47,172,205,173,209,233, 21,245,170, 44, 74,204,244, 93, 89, 27,180,
+ 20, 3, 17,105,155, 23,195,147,197,240,132, 45,134,218,102,205,252,200,207,238,124,207,119,124,221,155,191,252,139,190,239, 71,
+254,225,218,135,108,111,123,176,115,206,215,115,223, 84,174,169, 99, 8,222,133,148,122, 10, 11, 2, 26,171,123,136, 69, 47, 27,
+142,122, 69, 47, 51, 86,219,204, 36,195, 40,173,144,136,148,106,203,180, 84,207, 74, 34, 60, 4, 68, 0, 1, 73, 33, 42, 82, 74,
+233, 12,145,124,179, 96, 14,126,127, 58,190,115,101, 54,153, 85,101,157, 89,243, 15,254,250,247,254,192,187,126,174, 93, 16,105,
+155, 15, 79,229,195,147,194, 49,186,202,213,179,122, 49, 41, 23,139, 16,130, 82,100,172,206,139,172, 40,176, 55,200,183,118,134,
+253, 65,145,231,153,181,214,180,128,149, 66,210, 45, 90,170, 40,169,143, 16, 87,188, 9, 38,120, 68,105, 75,202,146,210, 28, 3,
+146,238,141, 78,202, 96,151,133,239,220,254, 88,112,129, 57, 14, 6,189, 31,255,254,183,253,141,159,121, 55, 0,232,208, 84,211,
+131, 43,190, 41, 65, 68,101,253, 94,127,123,120,106, 75,103, 7,206, 57,109,151, 89,110, 71,163,126,242,226,209,214,160, 63,232,
+229, 69,102,140,214,198, 16,105,165, 40, 65, 82,136,148, 44,129,173, 30,129, 0,137,148, 34,165,149,182,202,100,164, 50, 36, 50,
+ 38, 67,224,233,254,229,227, 59, 87,231,179,121,102,204,244,120,110,181, 66,132, 19, 39,183,255,202,119,189,229, 35,215,231,218,
+228,189,147,247,126,129, 0,186,102, 57, 31,223,188,118,241,201,170,172,251,253, 34,132,168,136,138, 34, 75, 46,217, 31, 20,237,
+106,172,209,214, 40,165, 73,107,162,100, 33,133, 45,204,168, 16, 21, 16, 34,166,165, 24, 82, 86,153, 76,155, 76,105,139,136,229,
+228,206,209,205,231,143,199, 71,229,178,246,206,139,200,112,216, 91,204, 74, 82,100,140,122,240,129,179, 31,185, 62,211,213,236,
+224,248,214,243,164,173, 8,184,114, 86,151,213,245, 43,119,124,227,251,131,194,230,214, 88, 83,244,139, 44,183,121,145,229,185,
+181,214,104,173, 73,107,165,116,226, 48, 91, 40,109, 13,230,165,219,167,137, 12,105,163,148, 38,165, 1, 32,134,166, 89, 28, 31,
+223,186,120, 52, 62, 42,231,149,115, 46, 21,113, 0,144, 23,118, 60,158,142, 70, 3, 54, 44, 0,186, 90, 46,199,123,183, 8, 49,
+ 50,151,139,106,255,206,209,100, 60,171,202,102,185,172,118, 79,108,109,109, 15,122,253, 60, 47, 50,107,141, 49, 70,155,110, 53,
+ 74, 39, 87,109,241,188, 22, 87, 76,214,210,201,105, 18,248, 23,131, 47,167,251,147,189, 43,203,249,162,101, 62, 91,208, 98, 13,
+ 65,247,123,197,237,155, 7,167,207,236, 0,128,118,206, 47,230, 37, 2, 68,230,114, 89,149,139,170,105,156,247,193, 6, 35, 34,
+ 54,179, 69,145,217,204,182,171, 81,170,229,135,177,133, 56,147, 35,167,123,135,221,106,148,206,148,201,148, 54,194, 28,164,233,
+143, 78,109,159,186,223,215,243,219,151, 62,241,201, 39,158, 61,127,254, 36,128, 52,181,112, 20, 22,142, 49,138,200,104,212,187,
+244,226, 45, 4,208, 28, 57,221,206, 24,185,169,125, 8, 17, 68,148, 34, 99, 84, 81,228,189, 94,110, 51,107,173, 73, 24, 35, 41,
+221,110,242,116,154, 39,228, 2, 85, 27,144,149, 86,202, 40,109,149,177,218, 88, 1,228,232,140,201, 36,250,227,155,207, 28, 31,
+220, 92,204, 22, 39, 79, 14, 47, 62,127,237,204,185,147, 54,179, 34,142, 57,166,154, 17, 0, 71, 91,125,128,177, 78,248,171, 68,
+230,200, 34,140,136,198, 26,155,225,104,107, 48,218,238,231,189,204, 88,163,141,161,149,175,180,182, 33, 74,235, 82,132,132, 43,
+103,106,215,164, 44,146,146, 24, 16,161,154,237,143,111,190,112,124,120,188, 92, 86, 49, 68, 17, 56,117,207,206,222,237,195, 44,
+207,118,118, 6, 20,168,139, 16, 96,180, 2, 0,173, 52,105,173, 24, 81, 16,180,214,121,145, 1,136,177,102,247,228,246,104,123,
+152,229,153,177,150, 58, 16, 24, 16, 33,125,132,187, 62, 65, 34,213,194,177, 38,193,146,194,204,190,153,141,175, 30, 92,191,116,
+ 60,158,148,203, 38,132,192,204,132, 72, 68,219,219,131,201,100,113,229,202,226,220,217, 19,164,136, 66, 71,170, 3,232, 60,207,
+ 70, 91,131,116,126,165, 19,176,215,207,139, 94,190,181, 61,232,245, 11,155,101,164,116,107,152,246,119,186,180,168,253, 8, 93,
+224, 65, 76,144, 62, 18, 8, 71,223,204,199, 55, 14,111, 94,158, 28, 77,151,203,202, 53,129, 99, 4,128, 8, 72,196,128,216,235,
+229, 77,237,158,123,238,250,195, 15,159, 37,165, 40,196,118, 65,197, 96,116,226,158, 51,222,213, 77, 93,213,101, 85,215,153, 8,
+100,153,205,139,204, 90, 75,202,160, 82,105,115,180, 76,188,172, 74,221, 53, 56,145,110,158,106, 81, 91, 37, 32, 49, 70,239,235,
+224, 67,140, 45,236,154,192, 6, 0,136, 49,137,159,160,215,203,203, 69,245,220,211, 87, 30,124,217,189,237,225, 7,160,181,237,
+245,182,206,196, 80,155,106, 97,236, 52,107, 26,102, 81,138,180,214,164, 12, 81, 2,132,147, 93, 64, 18, 22, 11, 27,229,119,218,
+199,109, 68,206,149,182,204,220, 84,139,233,222,165,163,253, 27, 33, 68,107,141,119, 62,248,200, 8,169,200, 18,110,211, 37, 16,
+ 24,110,245,203,101,125,229, 83, 55, 79,159,217, 77, 76, 3, 33, 18,166, 35, 73, 25,109,115,155,229, 89,150,105,147,252,134, 82,
+ 10,144,128, 79,144, 86,130,209, 1,127, 45,109, 75,148, 50,140, 66,153, 44,120,231,155, 82,105,219,219, 58, 21,124,120,254,153,
+203,227,195,137,210, 74, 27,165,148, 74, 33, 40,189, 39, 22, 97, 78,248,235,104, 49,175,238,220, 30, 55,141, 7, 0, 18, 16,142,
+ 62,209,171, 0,128, 74,145, 82, 74, 41, 36, 74,233,104,119,111,218, 66,118, 37, 55,107,153, 39,210,202, 88,147, 13,148,201,124,
+ 83, 49, 71, 99,243,232, 22,213,116, 47,203,204,217,243,167, 14, 15, 38, 87, 47,221, 2,196,188,151,101,185, 81, 90, 17, 33,117,
+ 5,177,136, 24,171, 78,156, 24,237, 29, 76,166,211, 5, 0,104,225, 24,131,143,177, 73,176, 48, 9, 50, 38,159,167, 21, 84,222,
+242,209,132, 40, 40, 40,157, 35, 39,212, 60, 51,121, 95,219, 44, 6, 39, 28,124, 53, 63,220,191,116,124,112, 80, 85, 77, 12,172,
+ 73,221,123,225,244,173,235,251,151, 95,188,249,192, 67,231,138, 34, 39,242,174,105,156, 0, 49, 68,137,201,210, 54, 51,219,195,
+254,237,131, 73, 90, 16,199,224, 36, 4,225,216, 38,249, 68, 29,115,208,214, 26,201, 72,237,109, 19,130, 4,239, 19,145,210,100,
+114,210, 54,250,166,169,166,211,189,203,135,119,238, 76, 39,179,166,114,204,140,136, 90, 43, 68, 58,117,122, 23, 96,124,233,197,
+ 27,231,238,187,103, 52,234,139,136,136,111, 26,183,174, 11, 16,139, 94, 6,179, 5, 0,105,225, 40, 28,152, 67,114,182,214,117,
+ 91, 58, 97,211,119, 91, 7,134, 85,122,136,138, 72, 17,160,175, 23,245,236,224,240,214,229,195,253,163,249,108,217, 52, 46,198,
+136,128,138,208,107,149,242,255, 19, 39,183, 21,169, 91,215,246,234, 83,219,187,187, 35,173, 41, 70, 37, 73,249, 3,130,132,198,
+168, 97,145, 65,229,180,136,112,140, 9, 27, 68, 68,128, 86, 44,211,137,185,113,133,230,119, 10,156,246,145, 0,226,166,156,214,
+203,163,241,222,173,241,193,241, 98, 94,214,181,231, 24, 19,238, 30, 17, 21, 11,107, 81,138,136,104,107,103, 32, 32,135,119,142,
+ 92,227,119,118,135, 74, 81, 80,132,145,177,227, 31,243,220, 2, 56, 45,194,194,177,141, 41, 32,105, 53, 34,130,107,229, 78, 75,
+112, 72,183,219,219, 18,135, 67,108, 92,104,170,249,228,104, 62, 93,212,149, 11, 62, 66,183,167,153,153,136, 98,228,150,167, 38,
+ 17,128, 94, 47,247,163, 48, 25,207,130,243, 91,187, 35,130,238, 4, 66, 32, 34, 99, 76, 43, 31, 6, 96,129, 13,156,186, 91, 8,
+ 0,118,100,242, 42, 2,182,223,109, 75,129,224, 92, 93, 6, 31,136,200,102,186, 5,237, 33,161,232,192, 44,136,109, 49,158,110,
+181,136,228,133,245, 62,159, 78, 22,145,121, 56,236, 67, 39, 52, 74,113, 62, 1, 86,169,180,227,149,187,136, 72,171,174, 5, 73,
+112,242, 42, 74,183, 76, 60,131, 72,228,232,131,107,188,247, 44,162,140, 46,138, 92,145, 82, 68,117,237, 86, 90,161,100,172, 78,
+198,211,238,142, 60,183,174,113,243,233,146, 35, 23,189,124, 69,158,165,119,171, 91, 71, 7, 20,225,100,143, 68,116, 36,150,163,
+245, 36,192,116,225, 36, 85, 18,137,194, 33,120, 23, 66,224,200, 32,146,170,122, 99, 13, 18,146,162,166,118,174,241, 94,130, 36,
+198,110, 77, 86,164, 96, 15, 54,179,206,249,249,172, 12, 33,218,204, 66,202, 64, 4, 86,183, 76, 86, 71,229,106,163, 35,172,190,
+132,213, 59,144,244, 10, 28, 82, 95, 66,108,197, 7,146, 94, 18, 9,149, 82, 54, 51,237,147, 27, 8, 62,128, 96, 71, 33,174, 68,
+ 54,172, 8,173, 53, 75, 87, 47,230,101,230,163, 49, 74,186,147, 78,167, 3, 6,145, 69, 48,229, 67, 45,107,150, 22,178,254, 32,
+192,192, 32,194, 33,134, 68, 5,197, 24, 56,173, 71,184, 59,164, 64, 16, 81, 27,221, 58,127, 91, 51, 98,148,150,123,232,234,126,
+ 72, 26,132,170,242, 49, 86,121,158, 41, 69,201, 5,181,136,128, 68, 22, 64, 88, 57,112, 90, 3, 32, 34,164, 75, 36,101,154, 72,
+194, 36, 98,108,133, 96, 41,197,105,185,141,216,129,162, 34,136,144,106, 58,102,142, 81, 56,114, 75, 84, 8,176, 64,187,124, 16,
+165, 21, 0,212,181, 19,129, 44, 51,233, 70,105,145,152, 86,222,121, 75,119,124, 98,247, 94, 90,255,106, 95, 56,134,176, 90, 82,
+ 76,188, 75,235,191,237,194, 88,218,189, 79, 68,214,154,116,176,179,243,128, 41,193,104,151,157, 94, 73, 41, 18,128,186,113,201,
+ 11,211,209, 33, 49, 6, 4, 92, 49,216, 41, 28, 65,199, 14, 3, 64,187, 26,225, 24, 34,199,181,188,173, 35,154,184,101, 82,184,
+ 53, 18,199,150,104, 1, 68,173,149,136,105, 41,223,141,141,204,192, 72,168,136, 8,209,135,216, 56,111,140, 74, 22,226,216, 82,
+144,184, 10, 9,171,220, 2,164, 69,121, 56, 65, 16, 44,156,108, 19,185,149,126,117,165, 76, 90, 14,119,171, 73,220, 90, 43, 73,
+ 68,208, 74, 49,177,144, 48,175, 94,137, 16, 89,105,165,136, 28,196,164, 26,110, 45,196, 44, 41,228,180,171,185,107,147, 65,187,
+158,200, 44, 18, 99,203,216,117, 38, 91,221,201, 20, 9, 87,247,110,195, 90,204,145, 25, 16, 72,147, 18, 37, 18,145, 82,198, 39,
+233, 8,210, 90,129,243,145,217,249, 0, 0,250, 83,215, 15, 87,233, 35,108, 28, 14, 41,243, 88,239,214,206, 97,147,119, 67,187,
+165,224, 46,232,101, 77,144,113,251, 78, 58, 20,141,185,251,170,125, 3,233, 77,182, 88,106,227, 33, 68, 0, 96, 0,194,199, 30,
+123,236,248,248,120, 50,153,188,212,104,161,255,184, 15, 17,217,222,222,222,217,217,209, 0, 48,157, 78,175, 95,191,254,159,141,
+242,153, 34,207,157,157, 29,250,207,134,248, 79,140, 78,124, 73,211,155,159,245,145, 89, 51, 26, 13,243, 60, 31, 13, 7,253,126,
+111,119,103,123,119,103,251,236,233, 83,163,173,225,214,214, 48,179,214, 26, 75,132,214,102,233,228,222, 16, 33, 0, 32, 44, 23,
+203, 24,185,105,220,108, 62,155, 76,166,215,111,222,186,126,227,206,100, 58,157,207,151,179,217,252,120, 58,255, 79,192, 64,178,
+193, 98,189,238, 75,191,248,251,222,241,246, 55,127,253, 27,141,201,148, 74,101, 61,164,140,173,211,198,119,154,155, 54,150, 73,
+247,175,180, 63,133,164, 67, 17,230,152,206, 49,225, 40,194,235,231, 36, 6,206,187,166,154,207,142,246,110, 92,189,253,175,126,
+235,195,191,244,219,127,240, 18, 53, 16, 51,191,237,219,191,249,237,111,251,150,147, 39,119, 83,158,143,109, 73,223,202,168,211,
+201,223,217,144, 87,169, 8,180,199,108, 92, 37,112,176,145,147, 51,199,232, 27, 87, 47,170,197, 84, 68, 6,195, 33,199,192, 73,
+141, 44,204,193,249,166, 46,151,229,241,120, 58, 57,154,189,226,222,123,222,249, 77,111,124,239,227, 79, 93,189,115,240,146, 51,
+144, 0, 60,248,224, 3,103, 78,159,230, 24, 5, 34, 75,228, 24,161,203,117, 68,162,196,200, 18, 37,182,181,127,122,147, 41,177,
+ 78,126, 1, 45,120,223, 74,250, 58, 87,226, 24,131,111,170,229,124, 49, 57,158,237,221, 62, 60,220,159,126,249, 27, 31, 61,119,
+254, 52,187,154, 99,244,222,213, 85, 93, 46,170,166,118, 33,178, 66,252,234,215, 60,242, 29,223,240,232,155,191,246,203, 82,194,
+ 55,159,151, 47, 92,186,241,220,165,155,207,125,234,250,237,253,227,163,233,188,113,254, 63,130,129, 16, 32,212,203,106,126,216,
+ 82,155,109,225,192, 9, 33,150, 24, 68,152, 99, 16, 14, 49, 70,225, 40,235,202, 98, 93, 20,172, 78,198, 4, 86,180,236,117,136,
+174,113,203,101, 53, 61,154,207,142,231,179,201,252,151,126,225, 87,162, 82,223,255,151,190,215,216, 30, 84,101,170,156,148,166,
+ 44, 51,121,158, 1,192,228,206,209, 63,251,197,223,250,179,111,249,202,193,160, 40,138,236,213,175,120,224, 85,143,220,223, 73,
+201, 90,215, 93, 44,170,247,127,244,169,223,248,253,199,103,139,242, 63, 88, 12, 98,225, 0, 27,212, 95,122,247,157,100, 53, 10,
+ 71,230,100,157,110,177,221,159,180, 43,215, 10, 53,105,139, 54,102,246, 62, 52,181,171,150, 77, 85,214,117,237,131,143, 44, 82,
+ 85,245,187,126,226, 31,109, 15,122,175,120,228,190,211,103, 79, 8, 66,150,103,131, 97, 36, 34,231,242, 84,254, 62,241,161,167,
+144,112,107,123,184,123,106,171,215, 47,180, 86,237,166, 23, 82, 32,163, 81,239,138,219, 28,255, 0, 0, 18,112, 73, 68, 65, 84,
+155,222,244,186,183,188,241,117, 32, 18, 66, 60,154, 46, 94,188,114,235,183,255,224,227, 47, 94,187,243,255,215, 22, 51,121,191,
+216, 58,157, 4,140,109, 76,109, 45,146, 10,100,199, 33,245,156,120,230,192,209,167,104,210,138,243,218, 2,154, 59,213, 92, 27,
+183,219,203,164, 18, 41, 74,130,226, 52,145, 70, 68,162,166,118, 23,159,187,182,127,107,124,226,212, 86,127, 88,244, 6, 69,209,
+207, 87,198, 79, 70, 39, 66, 87, 59,142,146,101, 70, 91,173,149, 34,213,218,105,117, 48,144,162,211,167,118,238, 57,185,253,134,
+255,226, 21, 8, 16, 66,248,228,243,215,222,247,145, 39,159,121,241,186,235,170,169,207,195, 22,115, 77,185,156,141,187,170,102,
+ 83, 41,152,190,161,128,180,202,114,211,202,204, 9,132,153,125,112,117, 8,181, 4,207,193,199,216,196, 16,152, 35,135, 86,100,
+153, 72, 48, 21, 18, 51, 76, 70,107,155,153, 24, 34, 18,130,128,214,100,173, 73,192, 22, 71,201, 11,109,140, 73, 52, 1,124,250,
+174, 93, 81, 22,184, 82,132,175,208, 52,233, 16, 37,173,133, 89,148, 86, 95,250, 69, 47,123,237,171, 30, 18,225, 24,249,242,181,
+219,255,251,175,254,238,254,120,202,159,139,216,228,223,214,126, 67,202, 40,197,155, 39, 49,179,180,250, 89,236, 86,149,218, 12,
+187, 82,150, 81,152,171,197,244,248, 96,127,124, 48,245, 81,125,241, 27,190,124, 56, 26,184,166,140,174,242,205,178,169, 22,245,
+178, 20, 1,235, 66,222,203, 66, 8, 34,108,180,138, 9, 34, 86, 42, 43,108,175,151, 23,131, 34,207,173,177,214, 24, 69, 41,171,
+ 64,218,100, 7,218,190,153,213,109,219,100, 86, 96,125, 67, 69, 68,117, 72,144, 82,148,234,247, 71, 30,190,240,174,191,246,142,
+ 24,226,225,209,244,189, 31,252,248,191,254,200, 39,255, 29, 13,212, 44,143,166, 7,151, 18,103,215, 54,206, 36, 64, 73, 58, 63,
+234,228,229,144,126, 16,163,119,161,169,155,197,188,156, 28,207,142,199,179,233,100,254,196, 31, 62,190, 92,214, 23, 30,190,239,
+101,175,120,224,220,249,179,189,126,110, 11,201, 66, 8, 62, 75, 93,144,198,154,224, 3, 0, 32,145,177, 42,203,179, 44,207, 50,
+107,180, 81,164,168, 67, 96, 87,226, 91,217,196,237, 86, 9, 87,247, 17, 87, 10, 30,222, 80, 55, 37, 51, 49, 39, 84,144,152, 68,
+ 24,149,162, 51,103, 78,252, 87,223,242,198,239,124,203, 87,143,143,102,191,246,190,143,124,232,201, 23,254, 20, 21,217,163,143,
+ 62,250,141, 95,243, 69, 95,247, 21,175,228,187,180,189, 29, 80,208,202, 44, 86, 73,161, 48,115, 12, 49,201,144,231,179,229,244,
+120, 49,155,204,103,211,114, 89,214, 46, 68, 68, 52, 90, 13,250,249,238,238,240,228,217, 19,163, 81, 95, 27,205, 44, 29,216, 7,
+136,144,122, 80,180,214, 70, 39,177, 10, 37,214,118, 5, 39,180,240, 84,123, 92,220,229, 69, 43,112,163,101,107, 24,214,120, 70,
+130,143, 25, 58,248, 39,198, 16,121, 29, 36,219,188,197, 53,161,105,220,100, 94,255,252,191,250,189, 59,135,227, 52, 23,225,179,
+ 62, 46, 92,184,240,192, 3, 15,104, 88, 97,206,208,106,173, 35,183,238,211, 66,203, 27,192, 74, 11, 83, 69,110, 26, 95,149, 77,
+ 85, 54, 77,237,156, 15, 33,198,182, 57, 22,128, 16, 98,140,139, 69, 5,123,199,174,118,253, 65, 47, 43,172, 53, 38,177,194,233,
+161, 84,250,175,109, 27,104, 55,214, 6, 56,182,198,202, 58,227,220,237, 65,114,215, 70,235,236, 7,157,154, 75, 41,165,173, 49,
+166,167,108,161, 77, 78, 38,211, 38, 51, 89, 97,108, 78,202, 0,176,175,202,239,252,158,183, 47, 38,119, 38,135,251, 23, 95,184,
+250, 35, 63,249, 79,199,147,249,191,113,139,233,172, 40,250, 59,222, 55,177,149, 46, 38,253,120,135, 20,118, 0,231,234,126,197,
+200,233,111, 18,185, 35,160, 34,234,228, 49,100,140,206, 50,147,247,242, 44,183, 73, 77,164,136,148, 86,198,106,165,148,210,164,
+ 18, 99,157, 68, 86, 45,185,158, 90, 51, 40,213,206,107,118, 25, 19, 76,182,102, 45, 89, 90, 0,183,251,126, 71, 84,181,177, 50,
+153, 39, 13, 7,201,181, 45,140,237, 41,155, 43,157, 41,173, 81, 32,184,186, 44,247,170,249, 97, 57, 63,170,150,101, 93, 55,193,
+133, 83, 39,182,254,225,143,190,115,111,255,232, 31,191,251,183,159,189,124,227,179, 24, 40,239,239, 12, 79, 61, 24,130,227,232,
+ 87,127,163,119, 28,154, 14,157,247, 33,196, 24,130,247, 1, 92, 16,230, 86, 20, 68,168,136,180, 81, 89,102,181, 86, 72,168,181,
+182, 86,101, 69,214,235,229, 69, 47,207,114,155, 21, 89,150, 25, 99,140,177, 90,117,108, 89, 43, 56, 72,158,211,110, 46,162,214,
+137,168,107,168,199,110,195,193, 93, 48,231,154,254,134,149, 81,144, 8, 80, 17, 17,180, 50, 42, 4, 17,223, 84,213,108,236,189,
+ 71,101,149, 54, 89, 62, 80,198, 70, 87,207, 38,147,201,248,200,213, 77,234,175, 78,233,197,238,214,224, 7,223,241,205,139,217,
+242,103,126,249,183, 47, 94,187,125,151,129,234,229,116,118,116,131, 5, 20, 41, 84, 70,105,107,108, 63,235,107, 36, 66, 16,142,
+ 49,134, 38,250,202,215,139,166, 90, 84,101, 89, 45,171, 24,217, 56,101,173, 14,153,101, 22,173,148,128, 36,241, 90,214, 53,231,
+217,204,218,204,216,204,152, 36, 6,211,109, 48,238, 4, 97,173,248, 42,125,178,174, 1,113, 85, 12,174, 80,114,132, 13,116,122,
+227, 71,157,212, 68, 37,161,135, 38,165,128, 90,166, 59, 85,149,218,100,218,102, 68, 42, 6,231,171,121,189,152,132,122,162,137,
+251,253, 28, 65,198,227,105, 93,186, 94, 97, 83,162,174, 20,245, 6,189, 31,120,251, 91, 14,198,211,159,250,191,126, 35, 69, 24,
+ 45, 0,121,127,123,116,242,254, 24,124, 12, 46,248,198, 55, 75, 87, 45, 93,181,116,174,138,145, 17, 80,219, 44,203, 11,109,173,
+178,189, 44,114,240,193, 52, 65, 27, 99,109, 96, 6,165,137, 89, 8, 81, 25,101,140,182,214,102,185,177,169, 77,196,104,109,148,
+210,186,141, 59, 68,216,110, 46, 66, 84,144,252,135,168,107,118,218,176, 14, 34, 66, 59, 84,161, 27, 70,176,242, 47,194,212,114,
+212,138,165, 90,197, 75, 43,236, 74,242, 41, 34, 36,146, 24,125,189, 88,142, 15,202,233, 65,185,152,214, 85,229, 26,231,125, 8,
+ 33,166, 83,186,151,103,214,232,197,188,172, 43,215, 27, 20,136,160, 21,161,213,167, 78,109,255,232, 59,191,227,201, 75,251,151,
+ 14, 23, 26, 1,124,179,112,229, 49,162, 82, 74,171,188,151,229,253,222,144, 99,112, 77, 57, 45,103,135,211,227,201,248,224,104,
+ 49, 95,198,200, 73,123, 70, 68, 9,198, 39,165,178, 28,109,102, 40,253,178, 81,218,104, 99,181,214,218,152, 86,222,169,136, 72,
+ 41,165, 90,109, 81,219, 48, 71, 68, 27,221,131,136,169, 21,171,221, 92, 73, 30,176,106, 56, 76,217,215, 90,222,130, 73,253,167,
+ 80,165, 46, 85,221,105,185, 84,234,149, 20, 14,161, 94, 54,229,164,154,143,203,249,113,181, 92, 54,117,227,155, 52,237, 36, 50,
+179,240, 70, 92, 71, 24, 12,122,121,145, 45,102,101, 89, 53, 59,219, 3, 68,157,216,245,126, 63,151,195,133, 6,192,114,118, 52,
+190,241, 60, 0,162,106,215,196,204,193,123, 87, 55,203,101, 53,157,204,103,147,197, 98, 94, 54,141,151, 40,164, 41,207,147, 76,
+198,104,163,141, 73, 93,165, 73,243,170,148,209, 73, 23,152, 98, 13,181,255,180,199, 85,171, 28, 68, 2, 90,185, 76,183,203,144,
+146, 67, 37,178,131,136,210, 40,142,244,157,238,119,219, 6,227,164,181,131,213, 78, 4,136,190,113,181,103,239, 98,116, 28, 3,
+ 71, 31,234,178,169,166,245,178,106, 26,231,156,143, 33,134,216,146, 51,156, 74,159,246,112,108,139,209,162,151, 25,163, 38,199,
+243, 24,121,231,196, 86,242,209, 46, 81,172,155,233,100,190,145,153,129,176,132, 24, 92,237,150,203,106, 62, 91, 46,102,101, 89,
+ 54, 77,227, 56,178,214, 42,248,150,242, 78,199, 69,150,228,104, 70,107,157, 12,178, 62,206,215,210, 52, 76,159,168,141, 16,131,
+157, 94,109,181,185,214,198, 66, 34, 74, 38,107, 55,224,170,149,184,211, 72,146, 66, 66,129,164, 73,114,105, 50, 0, 32, 42, 83,
+ 40, 11,174, 42, 23,203,241,209,254,216, 55,110, 48, 44,108,102, 3, 5,244, 33, 32, 66,136, 64,107,126,170,107,155,130,148,240,
+245,250,121, 93,187,235, 87,110,159, 56,181,147,132,204,169, 59, 50,212,181,235, 82,158,174,186, 15,209, 53,190,174, 92, 83,123,
+239, 67,240,137,250,110, 65, 49, 34,210, 70,217,204, 22,121,150,229, 86,183, 42,229,181,117,186,206,219,238,157,175,186, 98,161,
+ 51, 71,187,131,168,213,161, 67,107, 11,192,245,175,175, 84,136,157, 56, 82,119, 17, 71, 1, 98, 26, 68,197, 49, 32, 81,150, 15,
+ 85, 43,213,172, 93, 53, 71,241,253,194,224,201,173,229, 98,121,116, 56, 61,220,159,110,237, 12,182,183, 7,153,214, 33,132,232,
+ 99,136,145, 99,234, 50, 76,181, 1,119,246, 2,173,213,246,206, 96,122, 60, 61, 60,156, 98, 7,119, 64,244, 65, 64, 68, 80, 86,
+244,168,143, 33,132, 24,146,254, 0,149, 34, 17, 77, 10,172,181,189,126,222,235, 23,131, 65,111, 48,236, 37,121,118,123, 66,117,
+ 27, 10, 96,181, 41,218, 28, 89,218,169, 99,152,132,244, 29,119, 75,173, 43,117, 58,191,228,107, 93,156,218, 8,195, 74,119,157,
+215,173, 40, 48,177,218, 8,168,148, 22, 14,190,158, 45,150,199,229,124, 92, 45,102,117, 85,187,110,226,138,176, 88,163, 79,159,
+217,110, 26,127,245,210,173,178,246,231,206,157,232,245,115,171, 40,248, 16, 2,180,241,168,163,215, 91, 65, 22, 81,209,203,139,
+194,194,180,214,237,137,169,148, 48, 99,139,185, 2, 50,182, 50, 52,133,198, 40,102, 67, 68, 34,172,181,206,138,172,223, 47,250,
+195,162, 63,232, 21, 69,222,101, 55,154,212, 58,237,235,210,188, 46,163,129,174,146, 72,103,211,134,180, 7, 9,211,235,164,167,
+164, 44, 6,210,201,141,186,149, 70, 37,225,106, 59,203,137,160, 3, 51, 69, 66,104,202,102,121, 92,206, 14,151,169,216,169, 93,
+154,149,149,122, 35, 91, 93, 6, 66, 10,186,187, 39, 70,195, 16,167,199,179, 43,151,110, 15,183,250,167, 78,109, 41, 69, 27,253,
+139,177, 83,110, 96,123,154, 80, 23,131,140,213,253, 94,222,246,194,198,182, 47, 43,237, 20, 64,212,154,108,102, 56, 10, 42,204,
+172,105,147,192,126,158,101,182, 29,135, 64, 73,189,221,101,104, 43, 28,123,245,121,234, 55, 95, 65, 22,132,176,230,222,215, 95,
+181, 98, 49, 76, 26,108,149,182, 18,170,182,107, 31, 73,165, 81, 67,194,145,131,115,213,162, 94, 30,149,211,131,229,124, 86, 46,
+235,186,106, 86,205,223,145, 25, 54, 96,155,110, 45,109,228, 27, 12,123,121,145,205,231,203,103,159,190, 90, 20,246,244,233, 29,
+155, 27,133, 10, 0, 4, 35, 9,137,112, 39,164,107, 99,144,244,250,189,221,147, 59, 33,229,149, 49,166, 49, 98,193,199, 16,130,
+119,173,200, 5, 1,148, 86,198,104,155, 89, 99,181,177,166, 21,222,183,103, 10,201,218, 54,152,244, 60, 29, 6, 64, 40, 32, 29,
+210,213, 41, 84,161, 67, 34,147,114,139,214, 94,213,157,119,216, 6, 29,133,164, 17, 41,201, 50,152, 99,116,141,171,102,213, 98,
+188,156, 30,148,139, 69,185,172,155,198,121,151,218,143,227, 74,183,112, 87, 55,236, 93, 21, 30, 8, 75,191, 87,216,179,122, 49,
+171,158,125,250,114, 94,100,231,238, 61,153, 23, 25, 1, 10,174, 58,121, 55, 50,105,219,219, 26,158,186, 47,198, 40, 49,164, 41,
+ 49, 33, 52,193, 55,193,121,239, 67,108, 11,209, 36,105,165,213, 60, 15, 74,103, 19,181,186, 96, 4,220, 16,136, 80,187,154,187,
+ 36, 8, 27, 32,206,167,233, 0, 16, 86, 25, 16,162,106,131, 78, 55,118, 2, 59,233, 27,115, 12,222,123, 87, 54,174, 12,105,198,
+ 18,161,210, 74, 5, 21, 21, 83, 36, 66, 22,148,187,193,162,110,196,136,172,219,189, 59,237, 19, 21,253,252,204,185, 19,179,201,
+226,153,167, 47, 15, 7,189,123, 78,239,216,220, 2,175, 78,183, 21, 96,166,140,201,250, 42, 1,242, 49,168,224, 41, 52, 74, 55,
+218, 56, 19, 60,115, 76,253,214, 93, 42,187,121, 24, 99, 23, 98, 1,215,194, 92,236, 4,106, 8, 40, 36,216,226,220,119, 97,132,
+107,254,123,237, 57, 74, 43,101, 73,107,210,182,155, 73,169, 18, 59, 18,163,231, 16, 98,112,190, 41,171,217,193,228,224,214,248,
+112, 82, 46, 43, 34, 44,138, 60,165,175,109,184,243, 33,129, 50,112, 23, 76,212,118,118,222, 69, 1,138, 32,162, 53,122,123,123,
+ 96,172,158, 28, 47,158,123,246,234,238,238,112,107,107,160,141,130, 52,216,102,147, 89,149,149,168, 70, 98,210, 87, 18, 41, 80,
+105,248,192,221,144, 37, 81,183,155, 72, 86,133,100, 11,222, 32,116,214,106,229, 97,216,178, 0, 68, 73,222, 35,107,253,119,123,
+232, 19,162, 78,147,240,180,206,200,100, 74, 27, 68, 18, 97,223,212,204, 1, 1, 72, 25,157,103, 8,253, 96,115, 69, 10,137,180,
+ 49,199,227,201,248, 96,178,127,251, 86, 12,177, 63, 40, 6,163,158, 49, 9,186,101,142,173, 88,168, 19,182, 36, 2, 6,101,147,
+227, 20, 16, 22, 64, 36,165,138, 34, 35,162,204,234,163,227,197,209,241, 98,119,123, 80,244,108,194,249, 90, 86, 35, 6, 31,163,
+151, 24, 91, 76,158,131, 36,193, 41,174,149,201, 29,180,152, 74,101, 90,207,177,128, 86,254,133,120, 87, 35,238,166,246,105,237,
+ 60,130,119,105,173, 49,141, 40,201,180,201,148,201,181,201,144,148, 8, 7,239, 56,134, 84, 86, 72, 12,174,156, 52,203,227,122,
+ 49,169,171,133,175, 27, 31,124,240, 81, 43,218, 61, 57,234, 15,138,197,172,156, 28, 79,199,135, 19,173,212,214,206, 96,184, 53,
+180,185, 5,128, 52,229, 37,132,184, 26,219,193,188,130,221, 58, 92, 87, 36,165,117,214,104, 25, 20,136,120, 60, 89,220, 58, 56,
+222,234, 21, 46,172,104, 31,142,146, 72,139, 24,132, 91,198,162,211, 39,109,236,156, 86,203,185, 50, 23,174, 0,209,150, 41,234,
+ 62, 89, 99, 21,155,130,190,212, 77,152, 70,179,117,217,141,210, 70,153, 92,155, 92,217, 92,105, 11, 34, 49,161, 46,193, 7, 87,
+ 53,203, 73,189, 60, 42,231,243,170,172,234, 52, 6, 46,141,143,216,208, 1, 43,196,225,168,151, 23,166, 92,214,179,233,226,240,
+ 96,122,184, 63, 25,110, 13,118, 78, 12,139, 94,174,181,210,154, 67, 55,210, 42, 85, 27, 32,200,119, 43,172,210,253, 82,138,108,
+102, 71,195,158,136, 28, 46,150, 37, 43, 0, 76, 6,226,200,142,147,251,180,252,215,122,130, 94, 11,201,172,212,255,237,112, 62,
+252,140, 56,251,105, 20, 98,107, 17,162, 86, 69,220,129,134,221, 33,133,148,230,254,164, 25, 64, 32, 18, 92,197,190,118,245,178,
+ 94, 28,151,243,241,114,190,168,202,170,174, 92,154,163,211,141,125, 88,163, 32, 68, 72,137, 9, 66, 20,132,148,178, 14,134,253,
+229,162, 44, 23,229,124,186,200,114, 59,218, 30, 12,134, 61,165,149, 37, 19,163,194, 16, 2, 70, 76, 19, 63,165,187,175,178,158,
+ 21,168, 20, 90,107, 6,253,156, 89,230,101,232, 12, 36,177,163,186, 2,180, 36, 87, 43,230,107, 79,227,212,156, 10, 43,229, 52,
+224,122, 87,221,101,170,116,144,183,254,210, 29,252,233, 61,117,225, 8, 1, 9, 72, 1, 33, 8,138,112, 58, 52,163,171, 93, 61,
+175, 23,199,203,249, 98,185, 40,235,170,105,106,231,156, 15, 62,182,131, 2, 87,122,110,104,245,193,136, 72, 20, 58,200,164,181,
+122, 81,216, 44, 51,253, 97,175, 90,214,229,162,218,187,117,120,168,213,112,216, 31,108,245,172, 49, 68,164, 21,132,164,237,149,
+ 40,146,172,155,154, 81, 36,229,135,137,146,234, 23, 49,247, 50,141,188, 26,198, 28,219, 14,128, 36, 37,110,247, 39,118, 54,161,
+118,160, 6, 8, 10, 34,225, 42,214,194,154,147,105,245,208,105,100, 75, 74,127, 16,112, 37,188, 94,109, 73, 72,137, 28, 83,192,
+ 8, 78, 18,197,214,148,243,170,172,170,101, 93, 85,181,107, 92,138, 51, 45,170,187,202,106, 54, 68,215,204,178, 42, 99, 16,145,
+136,137, 86,224, 36, 88,163,212,176,176,153,169,150,245,114, 89, 29,141,167,211,201,188,232,231,131, 65,209,158,119, 4, 36, 36,
+ 34,194, 68,212,150, 83, 93, 54, 73, 90, 43,155, 25,173, 3, 0,235, 77,173,230, 74, 55,189,210, 37,175,183,206, 70, 24, 90,241,
+ 13, 27, 54,105,219, 68, 9, 73, 86, 8, 41,110,144,128,157,226,185, 37,181, 87,163, 71,162, 15,222,185,166,118,181,107,154,198,
+123,159,100,232,132,160, 8, 65,168,213,219, 72,186, 37, 2,128,204,105, 45, 44,146, 62, 71, 34,100, 70, 68,134, 85, 26, 10,152,
+ 20,217,121,145, 41, 77,117,229,170,178,153, 30,207, 23,179,178,232,229, 69, 47, 51, 70,175,182, 61,183, 37, 15,227, 26,167, 76,
+205,158, 93,169,177,154,252,146,132,160,120, 23, 71,183,166,234, 48,229,199,237,251, 92, 29, 81,109, 11, 69,218, 92,146,118,146,
+ 0, 17, 66,183, 73, 5, 58, 5,118,138,140,169,156,145, 16, 99,228, 52,126,199, 7, 22, 38, 84,218, 72, 18,190, 38,117,120, 88,
+205,138,142, 41,123, 75,195, 64, 65, 0,147,182, 59, 97,247,204,235,102,173,141, 17, 81,237, 93,208, 74,229, 69, 70,138,234,146,
+154,218,205, 38,243,114, 81,229, 69,150, 21,214,104,213,201,250, 87, 29, 16, 93,244, 87, 27,181, 88,146, 99,108,108,242, 21, 91,
+185,238,176,217,156, 77,213,237, 47, 89,137,201,164, 59,159, 54, 9,209, 54,117, 76,130,121, 94,113,182,177,157,102, 25, 35,175,
+ 74, 27,102, 17, 73,110,143, 6, 73,145,214,154,141, 78,214, 73,102, 74,147,184, 83,168,102, 94, 15,198,129,117,163,252,221,199,
+ 5,110,166,240,162, 21,101,185, 69,196,110,216,145,175,202,212, 61,157,170,188,164, 39, 88,141, 25, 92, 39, 35,122,131,142,227,
+ 13,183, 89, 77,144,109,139,136,205, 72,140,107,243,116, 1, 28, 87, 68, 76, 23,113, 56, 53, 11,164, 31,112, 43,233,111, 85,201,
+ 49, 73, 26, 90, 26,174,229, 20,101, 45, 53, 71, 68, 18, 66,101,136, 20,147, 54, 58, 70,142,173,153, 66,178,212,106,202, 84,226,
+155, 65,144,129,219, 60,235,179, 48,241,146, 80,115,173, 21,228, 6, 16,188, 15, 77,227,154,198,107, 77,198,166, 6, 97,236, 10,
+ 26, 89, 17,182,155, 30,212,169,180, 87,198,235, 54,210, 93,187,108, 51, 79, 79,138,179, 14,236, 73,203, 0,192,100, 20,236,154,
+ 9,186,169, 71,237, 92,163,142,156, 76,189, 79,188, 30, 34,181,161,206, 19, 94, 15,134,104,177,233, 85, 90,169, 80, 43,181,242,
+ 44,102,225, 8, 76, 44, 2,192, 45, 37,196,194,169,186, 17,102,196, 21, 79,157, 74,104, 36, 69, 70,171,100,216, 52, 55,171,105,
+188, 78,189,127, 68,169,108, 72,245, 4,172, 74, 13, 89,171,234,160,189, 88,154, 35, 6,210, 2,183,128,192,109, 50, 35, 93, 86,
+211,238, 43, 1, 72,205, 39,235, 10,113, 51,161,111,251,119,187, 78,152,216,154,104, 67,163,191,234,172,104,203,245,141,193, 83,
+176,174, 10, 16, 81, 18,144,152, 38,114,248,160,144, 66,171, 35,137,237,161,182, 82,217,243, 26,230,129, 77, 94, 63, 37,153,137,
+ 87, 81,138, 98,196, 16,216,135,232, 92,208, 90, 25,211, 98,162,233,148,148,181, 7,117, 45, 13,176, 89, 55,164,196,183,195,156,
+ 82,243, 71, 26,202,182,142,208,237, 24,173, 77, 30,120,205,159, 39, 42, 27, 90, 94,124,221,248,210, 50,181,145, 55,122, 71,215,
+240, 48,127,250,248, 45,185, 43,223, 77, 12,172, 82, 6, 81, 17, 70, 69, 62, 16,250,200, 33, 4,160,118, 54,109,187,173, 97, 99,
+138,199, 93,195,189, 88,186, 62, 69, 69,164, 56, 70, 9,145, 99,140, 62,144, 53,122, 37, 93, 77, 48, 64,151, 7,133,192,119, 43,
+ 49, 25,187,220,185, 11,120, 93,106,212, 89,230, 51,180,251, 27,130,217, 21, 40, 35, 9,130,227, 78,118,198,194,210,181, 6,173,
+ 39,142,241,186,245, 34,253,234, 42,112,180,178, 55, 94, 13, 43,150,213,203, 35,161, 66, 5,128,138, 40,106,162,116, 42,134, 40,
+ 49, 53,141, 9,240,221,192, 71, 82,132,172, 24, 31,108,135,172,178,194,200,208,246,160,176,116,252, 38,166,215,106,255, 23, 55,
+177,107,129,219, 80, 88,224, 58,142,200,202, 74,184,169,220, 89,107, 7, 54,133, 23,188, 14, 37,171,237,179,234,108,145,181,233,
+218,112,184,222,223,119,207,103, 3,184,123,164, 27,111,188,202,166, 24, 38,193,220,164,180, 70,196,152,238,104, 4,142, 49, 85,
+218,201,166,159, 41,204,130,196,195,145, 34, 21,149, 38,241, 44, 81,146, 18,147,141, 38, 66, 90, 25, 8, 69, 36,198,176,114,138,
+181, 49,112,163,103,245,179,212, 91,119, 59, 78, 39, 63, 89,233, 64, 96,189,131, 90,157, 8,183, 42,106, 97, 16, 96,248,204,169,
+118,155, 80, 68,178, 8,127,218,247,187,231,119,133,249,102,143,183, 0,128, 34, 66,221, 22, 67,204,105,146,186,116,119,191, 3,
+ 94, 16,185,133,231,136,148, 40,173,146,156,165, 29, 33,141,192,204,138,136,163,108, 36,138,252, 25, 27,125,157,213,108,218,104,
+195,117,100,131,120, 91,205,235,105,207, 93,216,220, 61,171, 93,211,254,104,221,204, 4, 43, 67,180, 77, 89,119,171,109, 58,202,
+ 74, 86,187,182,237,128,227, 78, 7,153, 22,147, 88,186,174, 28, 0, 17,108,105, 21, 32,194, 24, 5, 49, 10, 3, 51, 2, 69, 6,
+ 0, 38, 68, 38, 68, 33, 20, 33,165,132, 35, 70, 68, 2, 8, 32, 28, 37, 2, 40, 74,157,128,136,143, 61,246,216, 93,150,121,105,
+ 53,220,252,135,191, 6,222,189, 13,229,255, 3,105, 65,234, 37,157, 34,125,171, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+ 0};
+
diff --git a/source/blender/editors/datafiles/smear.png.c b/source/blender/editors/datafiles/smear.png.c
new file mode 100644
index 00000000000..2e6f73d3fb1
--- /dev/null
+++ b/source/blender/editors/datafiles/smear.png.c
@@ -0,0 +1,299 @@
+/* DataToC output of file <smear_png> */
+
+int datatoc_smear_png_size= 9358;
+char datatoc_smear_png[]= {
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72,
+ 68, 82, 0, 0, 0, 96, 0, 0, 0, 96, 8, 2, 0, 0, 1, 26,253,208,249, 0, 0, 0, 4,103, 65, 77, 65, 0, 0,177,143, 11,
+252, 97, 5, 0, 0, 0, 6, 98, 75, 71, 68, 0, 0, 0, 0, 0, 0,249, 67,187,127, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 13,
+215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 0, 7,116, 73, 77, 69, 7,218, 7, 21, 0, 4, 17,164, 74, 11,162, 0, 0, 32,
+ 0, 73, 68, 65, 84,120,218,237,125,107,140, 93,215,117,222,250,214,222,231,222, 59, 79,114,248,146, 73, 73,182, 73,145,182, 37,
+202,169,222,178, 93, 55,182, 91,139, 54,148, 24,104, 13, 56, 63, 18, 20, 13, 80,219, 65, 30,118,252,138,237,216, 73,250,163,175,
+ 52,253,147, 56, 64,227, 20,109, 98, 35,118,129, 58, 13,208,160, 45,234, 2,181,100, 55,150,211,248, 37, 35,129, 45,138,122, 88,
+ 34, 37, 70,164, 36,138, 51,228,204,220,123,207,217,107,245,199, 90,123,239,115,103,134,150,220,202, 64, 3,232, 14, 57,156,185,
+188,115,238, 62,107,175,199,183,214,250,214, 30,162, 31,246,241,178,131, 7, 15, 31, 62,178,253,121, 16,209,199, 62,254,137,148,
+ 58, 16, 49, 51,152, 99,140, 77,140,177,105, 62,249,137, 95,181, 23,133,247,255,242, 7,218,118,154, 82, 39, 34, 73,252,147,146,
+170,200, 91,223,122,215,201, 7, 79, 94,190,116, 41,220,124,203,205,146,146, 36,251, 15,253,238, 35,171,171,151,218,182,147, 24,
+ 57, 48,221,113,199, 29,247,221,247, 85,252,227,119,191,251,191,223,119,129, 24, 12,102, 80,140, 32,165,221,203,195, 35,215, 44,
+ 29,190,102,169,105,154, 65,211,132,167, 54,174, 1,148, 84,137, 84,149, 68, 73,133, 68,117,223,238,102,247, 82,163,162,170, 26,
+ 69, 18,131,137,160, 0, 72, 72,161, 28,165,147, 67,251, 6,211,182, 13, 65, 72, 53, 44,238, 57,170,170, 68,249, 98, 68,162,146,
+148, 78, 62,182,113,236,229,115,126,119, 11,187,175, 3,148, 72, 65, 74, 4, 18, 2, 41, 1, 80, 58,117,102,227,228, 99,155,175,
+121,229,124,152, 95,121, 37, 41, 8,106,175, 33, 34,255,154, 97, 98,124,224,241,205,168,162,138, 68, 9,204, 32,177,215, 49,145,
+144, 18, 17, 41, 16, 72, 94,208,118,133,242,213,220,220,252,181,215, 94,203,140,205,205,205,173,123,119,203, 45,183,252,189,183,
+222,165,170, 12,128, 57,132, 96, 27,247,197, 47,126,241,190,175,254,153,191,232,253,239,255,101, 37, 5,129,153,193, 8, 28,162,
+ 61,154, 38,198,248,107,159,252, 4, 17,133,155,111,190, 69,146,136,138,170,126,255,201,245,103,158, 27, 63,187, 58,141,129, 7,
+ 17, 74,242,214,183,222,117,239,189,247,224,199, 79,252,204, 35, 79,140, 65, 32, 48, 7,138, 76, 77,228, 67, 7, 22,174, 63,178,
+178,107,105, 16, 99, 28,142, 70, 97, 26, 15, 19, 72, 84, 65, 68,164,170, 72, 74, 77,196,222,221,205,112,192, 36, 42,170, 81, 72,
+ 88,132,136,149, 68, 19, 41,135,128,240,183,142, 45,142, 6,212, 78, 91,137,162, 68, 97, 97,207, 81,104,190, 87, 21, 34, 21,165,
+ 71,158,216,124,197,161, 33, 3, 38,210,176,176,231,136,237, 43,148, 8,154, 95,175,143,158,153,156, 58,189,177,119, 87,156, 27,
+197,168, 41, 17, 51,145,253, 12,160,162,108,250,144, 64,116,223,119, 86, 41,172, 71, 33, 97, 85,219, 83, 98,144, 2, 4, 48, 19,
+ 37, 16, 41,129, 69,232,197,122,160,255,205, 7, 62,248,161,133,249, 5,219, 36,251,128,217, 71, 96, 0,129,195,167, 62,245,219,
+231,206,157,219,249, 66, 31,249,149,143, 38, 73,164, 68,162,118, 89, 16,129, 1, 98, 48,136,192, 1,204, 12,112, 8,129,129, 16,
+ 2,115,136, 49,126,252,227, 31,157,185,208, 47,252,226, 47, 17,217,221,155,148,234,131, 64, 27, 99, 73,137,154,134, 7, 77, 92,
+ 90, 24, 18, 40,132,104, 46,131,153, 67,140,159,253,236,103, 30, 58,117,138,136, 98, 59,157,218, 50, 64,180, 49, 17, 6, 22,230,
+ 34, 17, 61,117,161,125,224,209,245,209, 0, 0,119, 34,195, 38, 44,206, 15,246,236, 30,174, 44,143,118, 47, 13, 6, 77,224, 0,
+238,186,159,254,233,159, 9, 33,252,198,175,255, 26, 14,190,230,239,131, 92, 42,176,123, 99,183, 76,187, 77,102, 34, 66, 8,152,
+ 27,197,197,185,102,223,202,240,208,129,249,229,197, 38, 4, 6, 56,216,210,154, 24, 73, 68,161, 68, 16, 2,171, 18, 51, 9,169,
+ 2, 80, 16, 19, 67, 4, 28,208,117, 42, 34, 73, 18,169, 44,140, 40,165, 78, 5, 0, 11, 51, 51, 39,145,168,148, 72,149,132, 21,
+170, 96,146,142,136, 9,170, 74, 74, 10, 33, 82,152, 53,174,111,146, 40,221,126,195,160,109, 91, 0,102,124,102,129, 44,130,171,
+142,190,141,148,137, 73, 9,254,137,148,148, 9, 68,182, 40, 34, 16, 43, 0, 6, 8, 0, 19,192,140,159,124,227, 62,219, 82,216,
+182,238,191,238, 46, 34,192,212, 31, 4,187, 16,129, 8,164, 68, 76, 32, 82,128, 9, 74, 12,102, 19, 31, 56,152, 64,193, 12, 48,
+129,163, 72,114, 65, 19, 17,177, 74,178,213,193,148, 85,160, 0, 84,213,118, 34,169, 27,148, 36, 83, 54, 17, 98, 38, 16, 69, 85,
+177, 61, 35, 48,169, 16, 72, 5, 12,117,243, 83, 40,131,213, 54, 79, 72,153, 52, 17, 49,136,149,132,236, 77,132,148,149,254,191,
+123, 96,199,103, 87, 86, 86,118,239, 94, 33,162,201,100,124,241,226,197,141,141,141, 31,226, 66, 71,143, 29,123,215,187,126,202,
+ 21, 58,255, 99,166,207,204, 33,132,139, 23, 87,255,245,111,253,230, 15,186,208,199,127,245, 19,146, 68, 77, 7,221,250, 25,118,
+ 57,246, 71,176,139,113,136, 77,252,216, 71,127,101,135, 11,125,232,195, 31, 33,181, 15,219, 37,152,234,217,118, 3, 1, 12, 55,
+171, 16, 2,219, 18,195,233, 51,167,127,255,211,191,215,191, 16,119, 93,215,118,109,215,117, 93,234,186,212, 73,234, 36,117, 41,
+165,212,165,148, 36, 73,151, 82,215,117, 73,146,253,219,217,231,107,175,189,246, 55,255,213,111,109,189, 80,242, 63,246,195,246,
+240,175,206, 61,179,249,220,234,120,125, 99, 58,158,180, 73, 68, 82, 74,146, 82,215,117,109,219, 78,167,255,226, 95, 86,145,133,
+ 91,111,189, 85,123, 15,247, 36,164, 73,244,193,199, 46,175,111,118,109,167,151,215,187,181,245,150, 20,110, 30, 76, 69,160, 39,
+ 78,188,237, 75, 95,250,159, 30, 36, 13, 76, 76, 90,153, 76, 19,224,106,253,149,111, 95, 88,223, 72, 27,147,238,226,165,246,242,
+102,183,118,185,109,147,128, 40, 48,128,108,218,170, 74,250,218,215,190,246,235,127,241, 23, 81, 68,254,199,255,126, 78,212,205,
+139, 9, 74, 20, 0, 10,202, 10,144,134,200, 76,136,145, 3, 79, 98,224, 38,114, 8,196, 8,142, 11,186,110,223,222,125, 32,132,
+115,155, 47,183, 72, 11,195, 45,134, 80, 84,133,160, 66,162, 5,247, 40, 64, 77,224,249, 81,156, 27,134,192, 51,123,127,215,137,
+ 19, 81, 73, 45,214,186, 18,129,148, 18, 41, 84, 8, 4, 14,108, 30, 84, 84,219, 86, 66,160, 24, 53, 73, 18,177, 55, 80, 85, 37,
+ 96, 58,157, 70, 82, 53, 87,155,149,209, 62, 11, 8,162, 68, 73,152, 89,137,148, 40, 6,106,219, 52, 26,160, 9, 36, 34,200, 14,
+139,186,142,148,162,104,130,173, 67, 65,172,162, 96, 37,130,249, 17, 21, 2,137, 50,179, 8, 47, 45,132,227, 71, 23, 64,154, 82,
+ 2,192, 10,133,186, 30, 83,199,200, 11, 84,168,170, 66, 12, 15,138,168, 16, 9,169, 10,105, 82, 85,149, 51, 79, 77,187, 86,252,
+161,110, 84,246, 93, 18, 9, 11,123,143,170, 42,217, 66, 21,196,174, 74,200,182, 8, 37,100, 9, 62,124,122,227,153,213,246,154,
+ 3, 3, 95,176,162, 24,126, 88, 88,185, 14, 92,127,138,236,114,190, 96,133, 66,253, 89, 34, 37, 16, 54, 38,242,208,227,155,203,
+ 75,113, 97,158,253, 26,128,129,159,235,212,177,106,137,218,121,247, 8, 57,158, 88,124, 50, 37, 81, 2,158,124,122,122,234,241,
+141,139,151,186,107,175, 26, 42, 17, 8, 56,112,228, 4,193,194, 5, 80, 93, 11,106,116, 82,128, 41,131, 93, 6,123,128, 34,128,
+ 24, 32, 38,102, 16,179,129,245, 34, 87,119,250, 74, 32, 79, 23, 12,209,251,205,170,168, 10,145, 42, 9, 25,206, 39,133, 16, 72,
+ 35,169,171, 36, 32,118,199, 98,183,166,128, 42,129, 44, 70,168,169, 12, 1,110,218,170,172,134, 14, 13,226,229, 21, 65, 85,139,
+128, 9,162,164, 34,176,141, 81,177, 85,168,175,154, 32, 68, 4, 33, 21, 53, 72, 12, 37, 7,140,162,102, 85, 34, 66, 74, 66, 80,
+ 34,130,138,189, 65, 94, 70, 94,188,212,251, 7, 8,148,215,240,210,227,135,143,179,229,113,228,200,117, 55,220,112,195,225,235,
+174,219,179,178, 82,159,117,103, 74, 48,240,236,255,240,197,139, 23, 79,157,122,240,175,254,234, 47, 31,121,228,145, 23,103, 65,
+139,139,139,239,122,215, 79, 29, 60,120,200, 82,224, 12,152,213,109,153, 50,134,183,181,108, 65,210, 30, 83, 81, 32, 33,129, 98,
+211,252,167, 47,124,225,155,223,252,198, 11, 87, 14,188,227, 29,239,184,225,134,227, 34,197,183,101,147,154, 93, 50, 12, 59,150,
+165,228, 47,102,151,100, 9, 71, 93, 86, 94, 40, 51,115,151,186,127,251,251,159, 62,115,230,204,243, 44,232, 3, 31,252, 48, 57,
+ 12,222,186,148,226,153,122, 31, 51,171,161,154,102,244, 68, 68,117, 41, 91,132,199, 28, 0,132, 24,254,201,111,252,250,120, 60,
+222, 57,129,190,253,246,219,205,118, 85,243,191,189,135, 71,186, 45, 31,249, 6,148, 52, 37,217, 28,119, 93, 18, 17,178,188, 56,
+128,169, 23, 34,213, 69,175,254, 22,164, 34,242,166, 55,189,249,196,137,183, 61,246,216, 99, 23, 46, 92,216,178,160,216,165, 68,
+ 59,110,176,187,101,135,127, 89, 58,213,137, 63,125, 97, 58,109, 53, 4, 0,212,196, 16, 35,139,210,176,137, 49,116,163, 81,100,
+ 54,108, 38, 77, 96, 13, 96,241, 60, 0, 34, 38, 44, 17,249, 71, 63,251,179, 49,198, 79,255,222,191,121,252,241,199,235,219,190,
+247,189, 63,119, 37,117,103,178, 24,196, 96,117,215,175, 32,224,177,179, 27, 23, 86,219,182,211,200, 24,141,130, 90, 14,165,148,
+ 68, 99, 8,163, 97, 96,198,238,165, 97,140, 60, 28,132,209, 48, 12,154, 16, 2, 66,224,200, 22,189,171,234, 91,201, 98,208, 12,
+ 62,246, 49,199,163,120,247,123,222,227,102, 4, 58,123,126,114,250,220,116,245,114,215,117, 90, 3, 37, 48,106,120,101, 57, 30,
+189,102,110,113, 62,220,251,205,231,148, 16, 51,154, 9,129, 69, 69,149, 6, 77, 16,209,192,136, 17, 49,240,242,226,208, 86,179,
+ 56,223,204, 13,227,176,225,225, 48, 48, 16, 98,214,179,153,117,113,224,240,185,207,253,209,201,147, 15,224, 29,239,252,135,223,
+124,224,114, 86, 87,173,242, 49,167,207, 4, 5, 74,146,228,217,145,125,167,100, 25,146, 2, 32,102,168, 82, 8, 8, 1, 49,240,
+194, 40, 54, 13,143,134, 97,215,210, 96, 56,136,203,243,113, 48, 8,195,129,137,196, 23,228, 38,201, 0, 56,112, 0,240,149,175,
+220, 27, 46,211, 97,100,253, 43, 75,241,232, 78, 94,113,241,143,130, 55,220,171,192,202, 35,176, 74, 87,118,153, 89,235, 65, 68,
+145, 49, 28,240,104,200,131,134, 99, 0, 17, 49,144, 47,231,128, 36,151,228,148, 84, 95,241,202,195,209,125, 15, 40,175, 65,170,
+113,215, 55,182,181, 41, 41, 20, 82, 87,167, 96,134,231,225,162, 10,128,148, 68, 1,102,232,104,128, 16, 8,164,227,205,118, 97,
+196,129,153, 72, 83,210,236, 63,160,121,211, 74, 98, 10,213, 72, 42, 94,106, 83,183, 33,101, 81,223, 50, 98,209, 2,218, 28,134,
+168,146, 50, 72,148,136,148,213,161, 44, 51,160, 94,246, 33, 85,154,118, 50,157,202,254,149,225,213, 7,134,204, 32, 64, 68, 8,
+150,204,218,221,229,144, 99, 78,215,138,114,170, 49,163, 14,123, 75, 1, 64,106,128,216,176, 30,136, 68,179, 72,124,109,154,124,
+191, 72, 84,160, 32,104, 82, 53,200,136,148, 40, 65,175,125,217,232,250,195,243, 68, 16,177, 60, 2, 57,240, 88, 14,195, 4,101,
+ 98,225, 68, 38, 34, 34, 40, 24,138, 3,199,238,118, 69, 40, 46,134, 96, 25,187,218, 93,100,240,153, 35,171, 35, 78,195,165, 30,
+219,236,133,185,222, 0,160,148,101, 94,119,227,242,190,149,198, 2, 49, 89,118, 67,108,121, 14,219, 15,128,138,154,131, 17, 22,
+247, 28, 37,104, 1,139,100, 88,185,106, 52,213,144, 82,242, 9,228, 10,135,107,114,134,171, 57, 7,206, 90, 73, 74,250,196,211,
+211, 83,143,111,158, 58,189, 41,162, 7, 86, 26, 17,123, 37,122,200,129,106, 81,151,128, 3, 71, 79,168, 57,209,226,142, 84,201,
+110, 49,255,205, 6,129, 89,191, 96, 78,129, 76, 32,202,185,122, 2,174,185,158,127, 1, 82,228, 44, 0,204,184,249, 85,139, 7,
+247, 15, 3, 51,245,227,160,169,226,129,235, 78,144,215,119, 76,209, 75, 94,228, 59,168,100,153,168,231, 71, 84,147,128,146, 93,
+ 24, 78,102,168, 21,155,172, 52,205,249,182, 25,100, 10,235, 91, 70,202,249,105, 16, 40, 48, 6,145,247,236, 26, 92,125, 96,184,
+103,185,193,254,195,119,169, 25,160,151,196, 65, 64,209, 30, 91,163,191,119,206,182,115,197, 28,158,103,248, 15,114, 73,163,136,
+184,128,121,211, 74, 43, 99,152,128,202,186,173, 64,162,106,255,203,182, 63,156, 13, 74,148, 12,149, 9,169,154, 59,209,156, 46,
+144, 90,234, 39, 14,195, 69, 73, 45,195,205,184,191, 56, 68,177,146,189, 66, 85, 97, 40, 94, 96,240,221,253,139, 40,178,239, 36,
+ 85, 81,130,170,168,163,125,213,232,110,217,235,101,118,219, 57,225, 55, 57, 40, 41,144,181, 93,189,196,150,125, 58,200,243, 28,
+ 85,219, 9,133,146,144,101,201, 10, 98,241,172,131, 65, 36, 34, 96,228, 10, 27,103,220, 0,203,138, 64,164, 76,145,172, 44,199,
+ 80, 18,181,146,103, 65, 97,164,142, 26,212,157, 41,101, 31,233,215,242,139, 91, 41,143, 61, 49,181,109,243,178,117, 78,250,253,
+ 74,253, 60, 86, 44, 6, 90, 43, 7,196,202,150,166,137,170, 9,205,119,193, 0,149,199, 24,148, 80, 38, 42, 74,162, 42, 30,107,
+212,109, 86,213,118,129, 60,209,244,188,158,178,223, 36,144,119,114,252, 33,182,199, 68,189,141,115, 17, 43,189,148,150,189,244,
+248,145,103,174, 53, 25,104,226,252,220,252, 96, 48, 24,141,230,154,166, 33,175,234,181,227,241,100, 50, 25,175,175,175,167,148,
+126,228, 11,106,154,230,166,155,110,126,205,245,215,191,226,229,175, 8, 49,212,104,207,110,103,150, 2, 26, 44, 86,213, 71, 31,
+125,244,129,239,125,247, 91,223,250,214,212, 26, 60, 47,226,130,126,226, 39,223,113,252,248,241, 38, 54, 25, 43,213, 76,186,151,
+ 80,151,192,232, 25, 62, 17,133, 16,192,152, 78,167,247,127,251,219,127,250,167,255,249,255,105, 65, 49,198,227,199,143,223,125,
+247, 79,104,193,174,125,160,157, 83,250,126,134, 63,155,156,206,166,246, 0, 51,175,173,173,125,234,119,126,123,125,125,253,135,
+ 91,208,158, 61,123,238,190,251,238, 67,135,174,177,154, 81, 15, 77,247, 94,212, 79,236,123,159,175,184, 38, 67,167, 68, 33,134,
+243,231,206,125,246, 51,159,217,158,164,238,188,160,247,189,239,125,115,115, 11,217,125,110,205,240,107, 38,143,178, 97,125, 41,
+121, 98, 11,102,207,240,107,129,161,191,153, 8, 33,156,122,240,212, 31,252,193,191,123,254,230,248,223,249,241, 55, 25,205, 32,
+105,162,156,134,231,152, 80,242,123, 37, 34,241, 72,226,223,120,136,245, 4, 38,199, 47, 47,206,230,224, 2,127, 1, 17,237,221,
+187,247,109,111,127,251,215,254,252,107,237, 15, 84,249,112,231,157,175, 83, 21, 81,139, 86,219,138, 13,189, 5, 81,191,210, 80,
+171, 9, 68,116,229, 16,148,243, 40,191,140,200,155,223,244,150,216, 52, 15, 63,252,208, 21, 23,116,199,157,119,206,190,113,239,
+ 79, 15, 73,211,246,183,238,175,166, 38,112, 64, 45,114,245,224, 92, 17,173,210,225, 87, 30,126,205,245,215,127,227,235, 95,191,
+194,130,238,184, 67,251, 23,237, 47, 9,179,114,232, 45,165, 60, 57,158,166,233, 52,217, 14,139, 18,160, 25, 59,151, 90, 57, 74,
+ 9,176, 8,109,215,242,174,183,188,229,239,222,115,207,151,118, 88,208,109,183,223,110,229,125,213, 29, 54,172, 86,122,250,133,
+ 33, 85, 34,237,146, 62,183, 54,157,182,137,136,186, 36,134, 21, 83,162, 24,184,143,120,161,208,109, 18, 54,136,252,230,183,188,
+229,222,123,239,217,190,160,219,118,148,194,246,141, 66, 89, 30,104, 99,156,206, 61, 59,233,146,116, 73,173, 84, 50,237,100,218,
+ 10, 51,166, 93, 34, 66,114,123,181, 14, 50,102,222,194, 51, 45, 48,243, 29,119,222,249,213, 76, 25,201, 11,186,245,182,157, 87,
+ 83, 51,213, 94, 70, 70, 32,162,213, 75,237,217,167, 39,147,105, 26, 79, 36, 37, 37,162,205,113,154,180,218,118,178,190,217, 77,
+ 59, 33,160,109, 19,121,123,202,152, 22,216, 30, 20, 64, 24, 13, 71,135,143, 28,185,255,219,223,174, 11,186,229,150, 91,117,167,
+135, 9, 36, 87, 24,188,166, 79,138,141,113,122,244,236,230,165,245,110, 60, 21, 34, 74,162,227, 73,154,118,186,177,217,110,140,
+147,245,178,218, 78, 1,154,182,137,128,192,206,238,225,226,117, 45,245,243,236, 79,247,172,236, 89, 91, 91, 59,123,246,172, 7,
+140,190, 79, 54,205, 19,161,105,103, 55,134, 24, 48, 28,176,249, 22, 81, 18,145, 7, 30,189,124,241,114, 7,208,160, 65,219,137,
+101, 46, 41, 41, 7,110, 2, 54,199,105,110, 20, 83,210,182,147,133, 81,195,220, 17,233,104, 16, 1, 33, 69, 8,198, 96,200,176,
+ 61, 37,102, 22,166,127,240,206,119,126,239,123,223,181,174,115,204,253, 41, 26, 79,229,225, 51,227,103, 86,219,245,205,148,141,
+ 21, 68, 20,152, 23,231,248,224,254,225,177,107,231,190,247,253,245,167, 46, 76, 24, 8,129,218,142, 2, 64, 76,146, 52, 68,230,
+ 46, 77,148,154,134,101,179, 21, 53,129, 16, 64,129, 49, 69, 98, 16, 2, 19, 52, 88, 46, 64, 70,173, 96, 18, 97,162, 78,245,131,
+ 31,250,240, 63,255,103,255,148,136,194,205,183,220,178, 57,150,251,254,114,237,161,211,155, 23, 47,183,109, 39, 57, 76, 0, 80,
+203,117, 39,173, 60,187,154, 30, 62,179,185,122,185, 83,213,164, 42, 66, 32, 77, 74, 41, 41, 1, 41,137, 8, 1,232,146, 48, 16,
+ 3, 82,146, 38,218, 79,211,160, 97, 34, 10,209, 11, 86, 85,193,189, 36, 64, 12,196,166,185,124,249,242,217,179, 79,134,105,115,
+221, 3,143,109,116, 73,115, 61,204, 27, 99, 61, 95,103, 70,106, 58,154,119,158, 44, 79, 81, 16, 37, 17,147,165,136,114, 38,127,
+133,200,146, 36, 4,110, 26, 16, 97, 56, 8, 0, 5, 96,214,145,129,106,217, 0, 55, 28, 63,126,239, 61,247,132,184,244,106, 80,
+174, 36,231, 0,238,249, 83,201,171, 74,113,198,163,170,194,214, 95,234, 76,222,178, 39, 21, 53,240,161,170,131, 38,128,169,137,
+ 97,216,176, 85, 66,193, 61, 71,222, 51, 91,175,237,137, 46,239, 90, 14,203,251, 95, 77, 94, 92,203,158,204,186,167, 14, 47,212,
+ 91, 94,246, 79,117,184, 84,151,238,125, 66,175, 12, 89, 21, 49, 6, 6, 48, 55, 12,243, 35, 30, 14, 66,211,176,213, 21,118,192,
+133,189, 30,193,181,215,190,156, 45,209,243, 13,176,228, 48,119, 72,181,151,201,121,254,104,245, 48, 18,162,156,195,131, 61,205,
+ 54,154,152, 88, 50, 9, 17, 29, 52,104,162,101,136, 58,157,166,192,249, 2,146,219, 6,246,206,162,201, 59,193,154, 82,178,138,
+ 23,121, 97,192,186,154, 90,194,187,228,152, 40, 94,192,130,130, 68,196,181, 71,213,186,215,160,114, 71,164, 42,202,164,195, 1,
+136, 84, 68,219, 46,141, 39,105,126,100,110, 72,108, 41, 34,146,239, 78,252,137,252,124,244,176, 64, 98,149, 57, 47, 35,168,244,
+ 96,180, 16, 65,132, 0, 81,111, 11,149,194,177, 35,126,171,215,121,125,137, 41, 70, 76, 91,137, 49,140,167,105,247, 98,179,111,
+165, 1, 72, 68, 75,233,107,166, 72,168, 4, 54,187,133, 2,145, 60, 72,103, 93, 87, 37, 88,237,147,136, 20,162, 25, 49,250, 18,
+ 69,172,221,224,109,188,204,105,240,181,216,234,199, 19,153,159, 11,131, 64, 71, 14,205,205,207, 69, 18,175,236,114, 86,232, 92,
+ 62, 42,233,190, 58, 23,202,170,176, 90,169,100,170,164,144,172,172, 80, 49,179, 83,175,247,100, 69,182,178, 14,121,173, 74,225,
+118, 15, 17,130,116,186, 60,207, 71,174,158, 59,184,127, 4,130,136, 16,193,251,198, 25,132, 11,229, 27,180,187, 49, 39,198, 44,
+ 34,209,125,147,146, 66,212,138,242,168,120,181,136, 78, 10,186, 17, 43,163,216,173, 89,153, 81, 51, 31,213, 36,197,147,150,118,
+ 45, 6, 47, 70,213,234,165,247,159, 61,220,235, 54, 60,161,170,170, 97, 97,239,171,128,236, 15,253,134,115, 69,175,148, 16,171,
+129,123,205,217, 61, 17,229,250,111, 69, 99, 32,162, 78,244,177,179,147, 97,131, 93,139,113, 75,128,215, 89,147,207,148,181,234,
+ 13,194,194,202, 81,175, 95, 34,123, 68,247,135, 94,188,174,200,177, 95,249,132,170,146, 21, 48,157, 86, 81,219, 19,142, 85,207,
+ 93,104,207, 63,215, 94,125, 96, 80, 22,163, 52,171,204, 69,185,181, 64, 95, 10,139,123,143,121,204,200,184,169,230,168,154,203,
+121,153, 7,130,217, 96,162,217, 44,109, 19,173,202, 6,228,168, 3,108, 78,229,161, 51,155, 11,115, 97,215, 66,176, 54, 18,149,
+250, 28,122,173, 1,148,146, 50,194,226,158, 99,132,220,114,114,199,232, 20, 32, 11, 18,190, 85,208, 82, 16, 71,142, 19, 53,136,
+120, 3,198,174,225,253, 48,207,141,128,167,158,153, 62,241,244,228,224,222, 65,140, 60, 19, 44, 72,103,113, 32,129, 40, 44,174,
+ 28,237,117, 52, 73,137, 93,231,220,163,103,126,154,102, 69, 33,167, 29, 85, 62,181,149, 44, 29,114,184, 28, 84,213, 9,185,170,
+202,104, 91,122,244,236,230,133,213,238,208,190, 65,214,131, 28,166, 43,102, 3, 1, 97,126,207,117,190, 77,170,185, 11,145,205,
+165, 16, 64,145,155, 45,228, 46,194, 58, 63,234,141, 56,115,143,185,180,170, 37,211,117,240, 0,135, 8,180, 57, 78,167, 78,111,
+174,173,167,221,203,113, 16, 57, 27, 93, 69,135, 64,238,117,120,251,165, 7, 49, 75, 43, 6, 40, 12, 53, 84,155, 48, 16, 80,107,
+237, 89,168,197, 37, 40, 42,140,118,221,242,189,186, 60,150, 71,159, 24, 63,254,212, 88,132,150, 23, 66, 19,185,170,116,191,181,
+160, 69, 20, 58,115, 49, 91, 82, 77, 1,243,205,100, 3, 97,205, 56, 46,119, 63, 56,111,182,177,132, 12, 44, 24,123,139,235,162,
+189, 65,199,145, 49, 55, 10,215, 28, 24, 29,216, 51, 88, 90,136,216,127,221, 93,149, 19, 5,151, 47,151,236,110,107, 34, 74,121,
+125,165, 73,221,115, 37,240,102, 67,230, 45,149,190,151,245, 5,193, 94,239,242, 94,173,203,217,218, 32,165, 65, 85, 25, 3,238,
+176,125,117, 90, 16,191,246,157,153,250,252, 0,172, 83, 32,189,124, 52, 35, 72,177,132, 64, 73, 4,200, 14,152, 8, 6, 56,156,
+173,165,146,153,120,158,130,154, 21,147,181, 1, 11,238, 49, 17, 56,146,144,188, 58,127, 38,175,204, 59, 10, 4,107, 91,100,166,
+104,225,123, 34,215,116, 0, 47,164, 56,159,220,116,149,250,183,237,198,132,210,178, 51,102,148,245, 95,140, 19,149,203,247, 40,
+ 29, 24, 96,166,221,166, 74, 25,156, 0, 98,237, 25,234, 27,140,121,249, 44,171, 92,255, 50,197,214,156,237, 73, 37,156,192, 67,
+146,165,127,236, 77, 96, 11,198,198, 43, 51,118, 60,164, 22, 12, 84,196, 55,207,213,219, 71, 77,188,111,160,165, 91, 64,164,222,
+121, 33,201, 82,211, 60, 71,224,245, 36,120, 55,163,254,183,209,203, 76, 72,172, 40,165, 15,248,156,137, 20,113, 42,145,216, 27,
+ 23,245,166,140, 41, 9, 74, 34, 57,130,105,222,187,222, 32,138, 53,162,108,109,206,128,115, 79,234,221,101,100,112,140,210, 95,
+178,124, 78, 69, 76,127,157, 61,165, 36,121, 82,197,157,181,144,168,255,161,172,169,254,102,165, 38, 9,207,227,253,135,179,191,
+ 87, 21,119, 64,158, 13, 19,140,127, 73, 89,247, 8,249, 26, 2,225, 12, 97, 85, 74,103, 62, 99, 41,167,229,213, 36,163, 68, 86,
+ 7,248,206,208,115, 87, 35, 46,132, 34, 35, 19,176, 89,191,251,111, 21,183,143,108, 91,200, 45,193,220,142, 99,199, 4,226, 86,
+ 39, 4,148,249, 15,168,191,171,102,234, 98,175, 74,156,129, 74,233, 86,193, 93,129, 11,183,199,152,240,172, 36, 23,198, 60,187,
+203,121, 2,114, 27,217, 38,110,200,249,145,182,211, 4, 18,201,137, 99,134,138, 68, 10, 21,136,247, 54,125,231, 92, 84,132,194,
+186,116,120,235, 36, 69,231,100, 40, 42,173,201, 0, 74, 49, 42,210, 45, 41,218, 75, 13,179,151, 30, 47, 61, 94,122,252, 77,233,
+183,254,160, 75, 0,139, 75, 75,203, 75, 75, 11, 11,139,187,118,239,218,179,178,103,215,238,221,187,150,151,231, 23, 22, 23, 22,
+230, 6,131,161,161, 64,154, 41,152,229, 28, 71,169,235,186,205,205,141,181, 75,107,151, 46, 93, 62,127,254,220,229, 75,151, 87,
+215, 86, 47,173,173, 93,188,120,241,210,165, 75,127,243, 4, 52, 63, 63,127,244,216,171,174,190,250,234,171, 14, 28,216,181,107,
+247,252,194,124,140,177,223,137,217, 82,166,223,254, 38,152,109,219,246,232,189,101, 60,161, 62,186,174,219, 88,223, 88, 93, 91,
+ 61,123,246,201, 83, 15, 62,248,208,169, 83,221,139,212,249,126,209, 4,116,224,192,129,155,111,185,229,198, 27,127,108, 56, 28,
+212,146,203, 11,185,110,173,220,150,186,148,127,139,146,105,123,162,158, 11,187, 61, 73,101,121,129, 11, 51,218, 51,100,102,230,
+211,167, 31,255,242,189,247,158, 60,249,128,188,136, 83,169, 47, 68, 64,139,139,139, 87, 93,117,213,107, 95,251, 99, 71,143, 30,
+227, 24, 24,172,165, 49,220,235, 81,109,145, 17,118, 84,154,254,172,201,214,111,183,113,232,183,127,158,157,154, 67, 33, 23,246,
+ 90, 12,214,133,127,238,185,231,254,236,127,125,229,228,201,147,207, 62,251,236,143, 68, 64, 7, 14, 28, 56,126,252,248,225,195,
+135, 15, 92,117, 85, 74, 2,160, 82,201,103, 73,134,207, 47,230,146,185,247,189, 77,173, 2,209,140,240,182, 19,233,183,145, 1,
+158,239, 73,100,174, 34,115, 96, 34,156,126,252,177,111,126,227, 27,247,127,231,254,182,109, 95, 28, 1,125,242,147,159,156, 76,
+219,153,142,110,159, 66,240, 60,146,153,165, 60,244,239,118,203,147, 59,188,108, 11,109,227, 7,168,210, 22,234, 66,223, 12,139,
+245,245, 39, 43, 1, 96, 50,158,124,249,203,247,110,111,229,254,208, 2,250,208,135, 63,210,203,179,245,202,250,178,205,243,244,
+105, 50,179,114,233, 61,185, 93,149,102,141,112, 27,175,165,142,104,108, 97,114, 60,191,138,193,217,190,168,174, 44,112,104,219,
+246,243,159,255,163,147, 39, 79,254,223,205, 63, 57,157,193, 91, 33,185, 30,211,231,124,228, 63,219, 68,166, 91,132,214, 87,186,
+ 45, 20, 11,237,187,176,158,158,246, 52, 84,183, 49, 37,244,138,207,107,127, 23,243,183, 59,126, 86, 85,102,190,233,166,155,239,
+186,235,196,193,131,135,158,124,242,137,237,103, 61, 60, 15,159, 76, 69,116,219, 61,238,196, 29,184,130,101,233,182,239,250, 79,
+234,142,207,102,234,103,166, 32,151,225, 54, 39, 64,219,160,160,241,125,184,199,195,236,183,143, 0, 75, 77,149, 42,135,191,126,
+182,129,206,108,118, 4, 36, 74,215,223,112,253,241, 27,111, 88, 91,187,252,199, 95,248,143, 15, 61,116,234,133,154,216, 47,254,
+210,251,250,162, 65, 97,251,208, 21,158,200,134,146, 11,229,254, 69, 41,172, 83, 62,150,160,119,100, 66,239, 71,124,230, 15,164,
+212,118,210, 37, 45,117, 66,147, 72,140,126, 24,128, 9, 45, 48,199, 6,129, 67,181,191,124, 20,133,211,184, 52, 23,164,235, 64,
+ 14,122,161,162, 14, 77,149,182, 1,115, 16,213, 63,252,195,127,255,240, 67, 15, 61,191,137,221,126,219,237,125,227,200,118,211,
+ 35, 13,245,232,183, 59,178,116,182,154,223,246, 65, 48,157, 49,182,201, 84,214, 55,186,181,245,118,125,179,219,156,164,105, 43,
+146,114,129, 68,181,235,116, 50,149,105, 43,198,170, 78, 34, 93, 75,185,162, 68, 34,153, 77, 85,198,185,115,167,170, 79, 32,164,
+ 30, 7, 74,123,239,223, 99,227,208,173,183,222,250,250,215,191,225,252,249,243,207, 60,243,204, 15,210,160,159,255,249, 95,232,
+ 57, 97, 92,201,170,250,108,150,108, 32,133, 46, 72,229,244,138, 45, 1,189, 95,230, 23,213,205, 73,186,180,222,109,142,165, 75,
+126, 26, 73, 8, 28, 35,184, 87,132,103, 70, 8,126,242, 3, 17,133,192,129,193, 1,131, 24, 98,100,211, 50, 27, 33,178,129, 46,
+251, 95,246, 81, 12, 80,159,159,127, 5,120, 85,106,229,118,110,204,217,191, 62,251, 31, 62,255,185, 43, 97,168,112,235,109,183,
+213,138,116,253,179,163, 35,234,109, 6,205,182,241,232,121,248, 79,151, 55,218, 39,207,143,207, 61, 51, 89, 93,239,198,147,212,
+ 37, 17,165, 36, 58,237,116, 60, 77,147,137, 76, 59, 73, 66,157,232,100,146, 46,111,116,235,227,118, 50,149,105,171,227,105,154,
+ 76,211,120,156, 38,173,168, 82,151,100,210,166,201, 52,181,157,171,182,213,147,197,120,230, 82,170,249,179,252,173,109,254,187,
+172, 76, 68,150,150,150,255,246, 27,223,184,184,176,244,224,131, 39,119,208,160,247,188,247,231, 94, 8,210,201,156,146,172,205,
+179,177, 60, 19, 47, 74, 47,174, 14, 13,182,157,156, 61, 63, 57,127, 97,218, 38, 69,223, 89,131, 24, 20,152, 67, 96,128, 68, 53,
+117,146,132, 66, 64, 96,127,198, 20,106,216,132, 24, 64,160, 24,120, 48, 8,131,104, 71, 15, 32, 6, 14,129, 67, 64,211,112, 52,
+ 69,179, 67, 73, 24,204, 84,230, 88,250,128,137,122,200,160,192, 38, 66,245, 82,191,251,187,191,243,212, 83, 79,205, 8,232,221,
+239,121,207, 14,214,228, 67, 4, 58,153,234,230, 36,173,111,166,245, 77, 25, 79,165,109,181,147, 26,124, 3, 16, 27,158, 27,240,
+252, 40,204, 13,121,110,196, 11,163, 48,104, 24,185,182,251,236,197,246,241,191, 30,175,143, 83,151,106,180, 52, 38, 19, 7, 59,
+175,169,204,172,155,147,246,136,198,224,192, 62,232,164, 68,118, 30,195,104, 24, 76, 52,129,185,137, 38, 44,196,192, 49,114, 8,
+ 28, 3, 98,228, 16,108,210,198,102,105,137,123,166,118, 37, 0,213,135, 78, 12,254,218,159,127,237,191,253,215,255, 82,195,124,
+111,214, 72,153,104,125, 44, 79, 62, 61, 57,119,161,221, 28, 75,155,106,252,157, 77,165, 10, 33, 4,219, 34,184,207,252, 45,206,
+135,249, 17, 95, 88,235,214,199,201, 42,197,176, 35, 89, 24,128, 74, 34,237, 58,235,170,147, 29, 9,146,107,206, 54,193,156,144,
+166, 62,150,196, 49, 0, 80,237,146,168,196,192,195, 38, 52, 13,137,106, 18,109, 35, 6, 49, 12,149, 6, 68,118, 14, 67, 72,136,
+ 17,129,153, 68, 69,136, 2, 96,227,118, 5,116, 20, 78, 84,134, 5, 41, 83,135,133, 72, 89,223,240,250, 55,236,223,183,255, 79,
+254,228,143,173,216, 18,110,186,233,230,233, 84, 78,159, 27,127,231,193,245,239,125,127,253,177,179,227,103, 87,219,105,107,173,
+142,114, 80, 6, 97,134,185, 66,189,233, 50, 45,205,125,228,161,197,105,210,245, 77,185,120,185,155, 78, 69, 37,119,196,160,162,
+ 42, 73, 83,162,148, 10,247, 7, 41,105, 74, 78, 28, 35,130,157,135, 38, 94,125,135, 18,137,136,209, 74,152,153,128, 36,146,146,
+136, 40, 51,103, 78,147,170,168,143, 18,214, 70, 64,241,215, 90, 26, 41,125,126, 42,106,121, 95,123,172, 90, 18,145,125,251,246,
+221,120,227,141, 15, 60,240,192,120, 60, 14, 79, 79, 15, 63,124,102,243,153,213,182, 77, 91,104,192, 58,155, 76,169, 15, 41, 85,
+ 38, 29,168,144, 12, 60,144,121, 47, 10,101,128,144, 74,127,221,154, 64,101, 8,140, 72, 97, 70,231, 76, 66, 63,213, 77,139,243,
+ 48,134,148,155, 30,172,133,169, 70,122, 49,171,176,195, 24,152, 17,236, 28, 35, 35, 36, 6, 4,152, 15,218, 1,212,111,129,230,
+ 91,216,235, 61,118,146,206,205,205,221,249,186,215,125,231,254,251,195,226,190, 87, 3, 51,189,247,153, 76, 66,107,195,101, 75,
+ 50,101,104, 2,234,102,166,153, 32,208, 75,203,212, 27, 85,154, 71, 47,225,124, 45,165,204,197,200, 76,239, 50,192, 95,187,141,
+ 89,152, 82, 72, 35,142,159,141, 80,134, 16, 17, 3, 51,200,102,155,155,134,155, 96,246, 72,101,215,234, 73, 90, 91, 36,213,167,
+ 5,246,115,207,156, 24,169, 42, 24,175,187,243,245,145,116,123,153, 75,183,230,159,149,214,157,207,198,202,188,130,124,119, 54,
+202, 38, 54, 3,107, 7,186,160, 48,213, 84,172, 43,239,202, 12,201,163,134,238,124, 42,171, 44, 67,191,204,165,178, 3, 73,152,
+ 8,146,164, 21,168,162,137,193,206, 9,180, 46,120, 19,120, 56,192, 32, 2,164, 34,210,117,104, 2,115,230,106, 10, 9, 43,207,
+160, 91,148,217,216,222,204,103, 25,113, 44, 60, 36, 85, 81,226,192, 81,168,239,192,242,166,234, 12,237,169, 28,101,227,241, 28,
+153,183,161, 51,210, 47,122,131,218,202,244,159, 19, 21,239,209, 89,182, 32,185, 91,170,253,188,221, 68, 5, 21,173, 59,227, 24,
+ 71, 56,112,132,185,121, 13, 64, 12, 52, 28, 96, 56, 96, 2, 77,166, 41,137, 12,155,136, 70, 2, 49, 7,101,134,183, 20, 65, 66,
+137,102,115, 20,202,253,230,156,187,121, 3, 25, 30, 22,242,176, 54, 9, 37,138, 48,116,181,141,255,165, 51, 32,208,155,151, 90,
+ 40,103,181,200, 33,101,244,192,248, 20,168,108, 28,202,212, 35,103,103,212,115,141, 28,164,249,182,105,225,190, 3, 37, 11,207,
+ 20, 37, 16,105, 0, 7, 80, 96, 50,140, 19, 35, 0, 88,154, 50,104,120,126, 20, 34,243,112,128,209, 48,216,172,124,127,162,163,
+122,189, 29,242,236,217,228, 1,101,200,210,233, 45,194, 20,123,195, 40,245, 88,145,194,225,240,107, 25,133,160, 18, 68, 50,141,
+ 45,179, 44,189,102,165, 66, 61,206, 94,237,228, 26, 17,148, 10,145, 0, 62,186,137, 60, 22,137,108,180,126,122,100,142,135,164,
+236, 45,233,236,205,136,166, 83,233, 58,141,145, 23,231,227,174,197,184,188,216,204,143, 66, 19, 61, 21,205, 12, 0,173, 30,245,
+138, 21, 10,108,127, 66, 75,209,156, 8,170, 76,136, 66,149,185,221, 63,101, 32,179, 10,144, 3, 58,168,136, 12,206,161,169,123,
+161, 78, 87,216,214,219,153,169, 75,218,228,111,190, 1,167,192,102,118,167,244,180, 17,230,126, 64,249,192, 1, 81, 98,154, 78,
+ 53,177, 46, 45,196,151,237, 29,238,217, 61, 88,152, 11,193,249,217,228,148,145,158,227, 44, 49, 88,139, 59,172,150, 53,251, 81,
+104,100,217, 19,105,158,188, 86, 73, 17, 66,149, 73, 99, 99,180, 69, 89,242, 76,187,217, 24,180,230, 16,249,147,100,178,121, 57,
+ 18,181, 64, 2,161, 45, 19, 15,249,133,126, 10,129, 56,239,212, 71,115, 11,179,136,178, 16,243, 73, 99, 22, 3, 64,184,106,239,
+224,200, 53,115, 75, 11,161, 4, 38,201,188,168,236,123,119,212,141, 26,210,119,172, 95, 21, 77,215,108,224,232,205, 7,133,197,
+125, 71,253,188,174,138,168, 81, 15, 41,164, 58, 19,230,108, 63,212,227, 53,250,172, 80,148,231,141,204,209,251, 83, 39, 16, 84,
+203,208, 63,101,215,147, 25,185,153,122, 57,163,126, 40, 20, 28, 85, 93, 91,239,206,156,155, 60,183,218,205,143,194,104,200, 59,
+123,150,173, 93, 21,244, 11, 85,253,191,216,161,124,188,173,102,195, 28, 22,246, 28, 43, 76,100,143,180, 85, 94, 22,180,123,211,
+ 13,126,212, 66,166, 70, 34,123,115, 45,142,167,220,126,185,146, 82, 57,166,173,184, 46, 19, 35, 35,143,101, 91,101, 48,107,129,
+246, 2,170, 86,128, 98, 62,108, 99, 44,167,159,154, 60,242,228,230,250,102,218,189,152,189,242, 12, 22, 41,212,163,254,168, 88,
+ 86, 31,244,142, 57,201,208,191,242,206,182, 20, 87, 85,141, 14,188,117, 22, 18, 21,225, 86,112,132, 10,160,139,188,180,190,174,
+ 15, 34,102, 8,210, 5, 78,247,123,100,125,197,116, 8,105,164, 65, 42,122,148,227, 70, 30,121,240,209, 53,167,105,137,174,173,
+ 39,163,132, 38,209,185, 1, 55,161, 63,128,151,249,107,152,197,128, 62, 91, 85, 1, 70, 63, 75,163,153,147,102,242, 29, 92,117,
+236,237, 51, 21,186,204,206, 70, 31, 52,231,227, 68,182,246,193,156,130,139, 30, 45, 16, 59,180, 18,103,192, 67, 46, 38,161, 23,
+ 48,168, 30, 86,146,233,196,245,173, 51,114,204, 4,115,157,233,190, 21, 2,212, 96,128, 3,123,134,175,120,217,112,239,174,198,
+ 65, 90,201,220,181,158,185,215, 75,231,183,181,193, 49,123,252, 21,129,128,152, 79,136, 38,234,177,225,234, 84,130, 87,213,169,
+206, 32,204,220, 86, 57,223,166,248,111, 45, 44,102,162, 45, 95,102, 11,114, 69, 19,114,188,141,122,240,160, 24, 61,210, 77, 47,
+167, 31,170, 89,127,250, 14, 74,197,207,117,176,138,116,219,209,147,231, 38, 79,158, 27, 7,198,210, 66,124,229,193,209,161,253,
+131, 24, 57,143,186, 72, 14,141,189,163,138,202,100,196, 21,218,233, 32,194,254,163,111,171,229,221,108, 57, 40,229,141,204, 82,
+167,222, 1, 48, 57,254, 67, 75, 99,125,235, 49, 45,180,211,244,107,158,116,202, 17,163, 30,170, 91,226,101,169, 70,100,112,228,
+ 44,112,234, 77,140,212,247,239, 41,173,207, 0,212, 73, 9, 91, 58, 51,237, 95,105, 14, 31,154,219,179, 28,109,120,180, 4, 3,
+202,168, 89,243,190,215,219, 46, 67,222,204,209, 25,167,133,239,136,154,115, 1, 51,245,113, 63,142, 28, 21, 72,250,212, 94, 77,
+111,104,118, 56,108,139, 51,234,159, 9,130,234,197, 10,143,159, 4,117,192, 39, 79, 66, 65,180, 12,157,250,154,202, 60, 77, 78,
+253,204, 58,141,193, 40, 62,126,226, 68, 86,161,167, 47,180,231, 47,180,162, 20, 3,175, 44,197,125,187,155,149,229,184,107, 49,
+142, 6, 1,208, 45,220,132,109, 9, 0, 0, 3,255, 73, 68, 65, 84,245,252, 50,252,224,147, 21, 34,177, 0, 24, 20,146,107,127,
+168,198, 51,250,218,229,164,114,192,167, 33, 87,103,141, 22, 25,213, 65,187, 89, 13, 66,207, 23, 21,186,126, 46, 3,104,175,212,
+110,152,179, 12,210,217,127,121,153, 35, 67, 3,173,239, 12,159, 8,202,103, 42, 59,236,171, 73,164, 65,205, 0,168,232,179,107,
+237,179,171,222,179, 15, 1,163, 65,152, 27,242,174,197,184,188, 24,119, 45,196,197,249,208, 52, 37,207,245, 75, 68,130,206,122,
+208,194,255, 47, 9, 67, 46, 86,144, 26,183, 54, 67,147,172, 86, 40, 14, 44,203, 79,183, 28, 31,133, 66,152,206, 38, 92, 96,165,
+239,184,205,139,137, 29, 59,148,157, 20,196,143, 21,202,175,149,114,210,154,173, 5,238,176,138, 10, 82, 30, 51, 67,153,246, 71,
+221, 68,113,124,110, 91,155,104, 99,179, 91, 31,227,217,181,206, 5, 95, 32, 26, 83,240, 67, 10, 40,138, 74,207,243, 22,116, 35,
+ 36,253,210,142,248,150,149,132,221,105,217,245,176,214, 82,211,193,204,175, 0,152, 77,237, 52,227, 94,167,135,247,145,143,243,
+161,197,167,121,102, 86, 2,211,162, 82, 88, 67,214,192, 50,189, 78,101,158, 83,145,207, 14, 2, 20,189,195,175, 80, 60,130,255,
+159,184,125,146,214, 77,177, 40, 42,148,212,196,138, 88, 74, 64,154, 77,197,167,118, 42, 98,206,197, 46,239, 18,231, 50,144,231,
+225, 61, 96,174,245,192,241,109,173,182, 76, 67,166, 2, 46,109,118, 32, 95,208, 85, 83,242,104,172,206, 36,144,229, 92, 34, 42,
+ 67,143,240,106, 64, 30,106, 43,153,157,150,211,242,188,182,224,113,182,102,163,164,162,118,252,159,215,238,252,172, 56, 18, 63,
+ 47, 46,163, 13, 64, 99,221,189, 44,101, 99,131,151, 34, 96,133,203,130, 90,196,200,220,235,170, 83,101,123,103, 90,141,197,216,
+ 64,189, 23,162,192,216,124,236, 44,202, 12, 0,202, 80,152, 23,159,178, 31, 47, 13,103,179,150, 10,234, 80,203,119,121, 6,180,
+204,115, 73, 29,164,246, 8, 89, 50, 31,205, 99,102,249,184,171,114, 56, 88,175, 60,200, 81,203, 4,100, 69,204,110, 40,174, 88,
+165,198, 86, 19,139,146, 9,248,201,210, 25,233,110, 37,149,245, 81,139,106,239, 87, 68,212,233,173,158,179, 47, 49,203,237, 78,
+144,127,153,133,150,185,112, 63,135, 75,243, 33,114, 86,148, 45,133, 42,205, 16,177,224, 67, 59, 97, 48,187,246,172,154,176, 95,
+ 33,160,117,162,192,113,151,201,186,188, 1, 36,106,141,235, 69,120, 40,225,204,214, 41, 14, 59, 36, 31,198, 86,165, 73,229, 80,
+198, 25, 67,155,105,246,215,217,190,162,111,118,209, 94,201, 22,217,225, 35,159,168,232,218, 84,124, 32,231,116,169, 2,151,156,
+161, 91, 5, 63,227,162, 92,177,203,207, 64,124,120, 49, 55, 74, 10, 88, 42,147, 8,200,165,131,170,229,121, 74, 62,122,152, 68,
+ 47, 99,201, 21,218, 28,154,220, 61,168,192,207, 7, 7,234,142, 22,128, 83,230,184,123, 33, 30, 51, 21,242, 60, 75, 83, 60,145,
+102,136,161, 37,165, 87, 5,247, 79,149,169,168,163, 95,143,172,170, 84, 3,100,197,180,154,111,184,234, 75, 81, 46,195,159, 54,
+185,166,142, 69,125, 40,159,106,140,205,199, 93, 19, 40,150,152,227, 10,156, 65,174,157, 61,153,135,242,250,126,222,146,132,154,
+138,148,242,238,142,244, 41, 42,238,106,230,148,131,156,149, 22, 3,148, 50,252,231,177, 92, 10,134,161,222, 77,148,185, 80,175,
+118, 21, 91,162, 50, 18, 74, 53, 55, 44, 35,152,245, 92,132,252,107,129, 52,203,135,178,135,238,165, 28,189, 1,202,168,110,237,
+148,199,212,109,215, 69, 75,238,111,146,170, 39,243, 74,101,117, 72, 57,128, 68,139, 67,157, 41, 55, 17,182,102,172, 90,195,162,
+ 25, 70,143,168,168,185,102,235,171, 41,193, 37, 27,191,148, 34,184,144, 48,177,246, 14,155, 1,124,240,189, 14, 35, 23,209,102,
+ 99,114,119, 78, 53, 92,245,237,172,134, 18,173,147,176,209,100, 65,181, 50, 96,135,153,246,207, 9,204,190,172,142,170,111,145,
+148,223,179, 34, 71,200,126,253,181, 87,156,202, 73, 80,245, 95,133,219, 83, 38, 26,123, 67,200,186,197, 49, 21,162,141,221,112,
+ 1,130, 84,115,124,251,221, 67,138,146,246,168,128, 88,171,176, 92, 70,254, 59, 80, 42,104, 33,155, 69,166, 90,135,117, 25, 71,
+170, 94, 58,159,218, 81,129,123,191,132,225,211,190,238, 56, 42,217,163,103,107,189,211,125,251,166, 38, 5, 10, 97,150, 48, 3,
+173, 96,161,232, 29, 74,197,223, 59,135,121, 44,187, 15, 77, 51, 78, 42, 0,165,103, 27, 90,233, 38,121, 18,191, 71, 74,163,234,
+148,105,230,101,253,113,216,222, 89, 44,255, 7,220, 22,142,137,141,220,236,213, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+ 0};
+
diff --git a/source/blender/editors/datafiles/smooth.png.c b/source/blender/editors/datafiles/smooth.png.c
new file mode 100644
index 00000000000..bb54061b172
--- /dev/null
+++ b/source/blender/editors/datafiles/smooth.png.c
@@ -0,0 +1,520 @@
+/* DataToC output of file <smooth_png> */
+
+int datatoc_smooth_png_size= 16428;
+char datatoc_smooth_png[]= {
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13,
+ 73, 72, 68, 82, 0, 0, 0, 96, 0, 0, 0, 96, 8, 2, 0, 0, 1, 26,253,208,249, 0, 0, 0, 4,103, 65, 77, 65, 0, 0,177,
+143, 11,252, 97, 5, 0, 0, 0, 6, 98, 75, 71, 68, 0, 0, 0, 0, 0, 0,249, 67,187,127, 0, 0, 0, 9,112, 72, 89,115, 0,
+ 0, 13,215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 0, 7,116, 73, 77, 69, 7,218, 7, 19, 0, 34, 13, 86,254,139, 21, 0,
+ 0, 32, 0, 73, 68, 65, 84,120,218,236,188,119,124, 92,247,117, 39,250,107,183, 78, 31, 12, 48,131, 54,232,133,189, 87,129, 20,
+213,169, 94, 28, 57,142,101, 59, 94,103, 99,167, 56,137,157,178,155,141,119, 55, 78, 54,222, 36, 78, 98, 39,246,102,159, 21,199,
+ 69,242,202, 77,178,122,165, 68, 82,164, 72,138,189, 1, 4, 65,130,232, 29,152, 94,111,249,149,247,199,189, 51,128,100, 39,235,
+228,249,237,250,125,222, 94,138, 36, 0, 94,205,156, 57,247,212,239,249,158, 31,220,187,119, 47,248,159, 94, 43,111,106,106,136,
+254,196,123,112, 75, 75,203,143, 30,255,195,142, 72,205, 31,255,225,191,233, 91,223,181,181, 51,254,245,111, 63,222, 29, 68,175,
+190,115,126,249,166,230,230,184, 15, 75,119,222,127,219,235,207, 30,232,232,141, 55,198, 99, 70,126, 49, 28, 9, 62,112,235,246,
+221,107,187, 94, 63,126, 1, 0,128, 0, 4, 15,252,210,163,253,103,206,212,212, 6,101, 69,214, 61, 94, 33, 4,196,208,235,211,
+219, 58,155,254,254, 63,126, 18, 0, 64, 32, 0, 8,226,238,213, 29,217,116, 6, 65, 4, 0, 7, 0, 64, 8, 17,130,182,101,119,
+116, 55,127,229,143,126, 21, 9, 0,178, 75,227,138, 30,240,135, 66,170,166, 66, 0, 56, 99,220,102,178, 44,109,187,237,193,254,
+139, 35, 51,211, 11, 8, 8, 33, 73, 10, 23, 28, 17, 2, 17,134, 16, 2, 0,186,183,221,117,226,240,121,211, 40,173, 89,215,214,
+217, 29, 71, 0, 0,219, 50, 56,181, 33,128,130,115,203,178, 32,132,175,127,239,155,143,126,242, 83, 39, 94,123, 62,159, 47,239,
+255,208, 39, 16, 0,128,217,101,193, 40,181,140, 98, 62, 15, 1,120,245,185, 35,227,179,233, 82,102,250,153,195,253,173, 93, 93,
+223,127,252, 43,176,175,175,239, 47,127,239, 17, 74,153,101, 90,132,224, 88,199,122,219, 44, 82,179, 48,112,233, 58, 98,230,197,
+161,133,144, 66, 9, 0,176, 84, 44, 83,202, 20, 69,242,248,253,102,126,241, 71, 79, 62,191,121,231, 26, 72,141,129,254,145, 79,
+252,230,199,125,161, 6,248, 83, 61,187,159,230,130, 0,128,107,231, 14, 28,124,254, 71,107,183,172, 78,205, 47,217,148,198,154,
+162,127,253,213,239,191,112,240,212,242, 77,207,255,227,159,153,197,194,209,131,103, 63,240,225,219,137, 36, 9, 33, 16, 70,133,
+ 92,113,113, 62,245,203,255,254,203,238, 3,222,183,177,107,227, 77, 55,155,249, 4, 64, 48, 20, 9, 65,136, 56,231, 8, 65, 69,
+145, 30,188,117, 27,182,249,192,232, 52,209, 60,170, 63, 20, 90,189,161, 75, 8,193, 41,133, 8, 33, 0, 17, 66,156,113, 76,200,
+ 39, 62,241,192, 67,247,239, 35,225,112,192, 44,230,252,161, 26,106,155, 66,112,219,178, 40,165, 0,130,186,198,250, 64,164,233,
+248,145,211,132,150, 81,199,186, 77,140, 26, 8, 33,132, 9, 0, 16, 66, 40, 41,114, 77,172,205, 27,172,251,250,255,245, 84,223,
+205, 59,234,226,109,132, 51,202,108, 83,112, 6, 33,100,212,182, 45,187,117,205,110, 73,243,254,238,175,125,250,163, 31,186,235,
+232,107,175, 94,159,205, 19,106, 22, 25,165, 64, 48,179, 92, 42, 21,203,157,155,247,253,201,239,254, 97, 93,109,176, 33, 18, 50,
+ 74,165,169,241,217,182,134, 8,254,216,195, 55, 91,166, 81, 46,150,202,165,114,231,198,155,110, 92, 58,142, 0,120,228,195,143,
+ 28, 57,124,242,194,249,107,136,224,228, 98, 6,149, 75, 70,169, 80, 42, 21,203,109,107,183, 79, 95,191,240,196,183, 95, 9, 4,
+ 60, 95,253,235,199,255,244,239,190,188,107,251,170,223,249,220,239,215, 52,214,129,159,213,179, 35, 43,191,249,240,163,247,121,
+ 36,254,173, 31,188,241, 27,159,252,216,154, 58,165,119,235, 46,143, 6, 19,115, 51,221,235,183,125,233,111,190,242,223,158,124,
+241,159,179,129,189,123,247,126,245,191,126, 54,183, 56,201,185,109, 51, 24,142, 54, 77, 76,204,111,217,185, 11, 33,116,244,229,
+239, 99,140, 11,249,226,134,109, 27, 56, 99,233,100, 50,149,204, 22,114,197, 27, 99,179,127,249,205,231,222, 31, 8,154,155,227,
+ 49,197,154,159, 89,220,178,239, 46, 90, 76,188,240,212, 11,115,227, 19, 65, 63,131, 80, 4,195,126, 93,151,194,145, 32,181, 44,
+106, 91, 8, 67, 77, 83, 60, 30,173, 62, 90,115,255,190,109,183,108, 89,115,101,120, 34, 91, 44,187, 47, 20,143,183,172,110, 10,
+220,255,209, 95, 53, 10,233,197,233,201,218,104, 40, 90, 31, 97,156, 81,163, 40, 4, 69, 8, 35,140, 33,172,218, 48, 4, 64, 32,
+132, 20, 85,174,169, 13,238,191,101,235,142, 85, 29, 58, 38, 87, 39,102, 9, 0,162, 54, 22, 73,207,143, 42,186, 55,218, 28, 55,
+139, 89, 74,105,229,255, 67, 0, 8,206, 24, 23,130,115,225,188,132, 36, 73,156,139,114,217, 88,154, 79,221,114,223,253, 13,109,
+ 93,175, 30,189,252,193,219,119, 19, 0, 64,231,170, 30,140,177,109,150, 32, 68, 68,209, 49,161, 92,112,193, 57,227, 76,112, 33,
+132,224,148,113,206, 53,175, 87, 82, 52,106, 91,254,144,242,228, 95,124,253, 83,191,246,208, 43, 47,189, 42, 51,107, 67,107, 84,
+215, 21, 4, 0,144,117,191, 16,140, 81,139, 51, 42,132, 16, 8, 65,136,160, 19,125,132, 0, 0, 72,178, 20,172,141,169,154,119,
+240,124,127, 62,147,141,182,111,216,183,111,243,231,190,240,100,103,188,110,219,190,125,251, 31,190, 77,214, 20, 4, 0, 96,102,
+153,218, 38,163, 38,163, 54, 16, 28,112,198,153,237,152,169,105, 24,154,199, 31,235,216,148, 75,167,190,250,213,239,238,188,253,
+ 46,219,178,254,254,139,127,217,208,222,251,185,207,126,240,155,255,227,213,169,145,145,169,145,177, 99,103,175,226,120, 60,126,
+251,174,110, 70, 45, 70,109,198,108,106,153,166, 97,148,139,101,163,108, 40,170, 28,142,198,231,167, 39,190,253, 15, 63,216,182,
+ 99, 77, 67,173,143, 16,145, 75,167, 89,201,232, 92,213, 57, 59, 62,121,207, 61, 55,189,242,234,137,165,217,165,142,120, 12,199,
+227, 45, 55,111,105, 55, 13,203, 52, 12,163,236,252,103, 17, 9,247,238,188,167,166,169, 7, 19,249,181,103, 94,100,150,117,190,
+127,172,181,165,254,137,127,124,182,156, 43, 53,182,196, 52, 5,188,241,218,201,233,137,185,223,253, 47, 95, 88,191,117,253,229,
+147,167, 9, 0,160, 92, 50, 56, 23,156,115,206, 57,130,104,195,222,251,168,109,228,151,198, 5, 34, 23,143, 29,158, 75, 21,103,
+150, 82,127,250,249,223,249,219,191,248,218, 47, 60,122,171,238,213,254,230,239,159,109,143,199,186,187,154, 94, 60,116, 46,253,
+153,223,217,189,123,221,120,218,252,217,197,201,159,201, 21,143,199,209,207,234,181,150, 95,200,235,209,142,191,240,119,206,215,
+ 39, 95,254,111,159,125,116,255, 59, 47,252,247, 31,254,253,127,254,216, 99,143,190,252,173, 63,249,169, 50,192,189,183,223,244,
+103,255,225, 87, 11,197, 50,132,104,184,255,202,205, 15, 60, 58,118,249,157,133,133, 84, 38,153, 59,122,114,240,211,191,253, 88,
+ 48, 18, 29, 60,119,250,218,240,212,127,250,202, 83,255,212, 71,195, 1,191,247, 59, 95,255,219,177,171,151, 66, 33,223,181, 43,
+ 35,190,128,214,182,122,171,172,200, 13, 45,237,153,228,124,123, 75, 84, 81,144,162,170,138,130,252, 94,237,238,190,205,119,238,
+222,240,202,145,115,239,123,161, 64, 32,128,159,255,218,231,154,123, 55,223,184,116, 78,247,104,170,166,190,246,252, 17, 90,154,
+ 47,102,147,156,149, 52, 85,241, 7,189,170,166, 50,219, 20,140, 99,140,136, 68, 8,193,119,238,222,208, 22,171, 61, 53, 48,188,
+242,133, 16, 86,253, 35, 23,143, 98, 9, 27,134, 49, 63, 53,171,107,138,101,209,134,214, 22,127, 56,166,251,188,146, 44, 1, 1,
+ 56,231, 2, 8,136,161,162,200,186, 71, 11,133,253, 27,214,180,255,197,111, 63,246,158,192,214,183,182, 77,213,228,141,125,183,
+ 45, 78,141,229,115, 69,159, 95,151, 21, 9, 66,134, 0, 5, 0, 64,136, 97,245,121, 8, 80,173, 70,100, 69,150, 85,105,123, 79,
+251,193,211,253,238, 71,251,253,223,254, 88,164,190, 49, 80, 27,183, 10,243,132, 96, 77, 87, 61, 30, 77, 82, 36,140, 16,198, 8,
+162,106, 80, 3, 66, 8, 46, 56, 23, 66,112,129, 9,246,250,116, 85,147, 59,194,161,227, 3,195,129, 64, 0,175,107,170,213, 84,
+ 88,223,210,205,169,129, 33,147,100, 34, 43,146, 44,203,152, 96,132, 16, 0, 64,112, 33, 0,119,196, 1, 0, 48,198, 13,195,180,
+ 45,138, 16,170,173,171, 89,191,101,109,123,180, 62,111, 81,210,222, 21, 39, 18, 54, 10, 25, 34,171,138,238, 69,132,112,198, 32,
+132, 0, 66, 8, 33, 99, 76, 0,193,185, 0, 92, 0, 0, 16, 66, 4, 99, 85,149,147, 75, 25,106,211, 64,164,177,100,129,203, 87,
+ 71,246,221,180,153,148, 75,229,186,250, 26,219, 44, 10, 46,176, 36, 3, 33, 24,102, 66, 8, 8, 4, 99, 12, 8,193,185,224,140,
+ 11,225,190,144,172, 72, 77,221, 27, 86,235,254,196,236,232,212,248, 28, 22,165,117,171,218,115,169, 36, 90,189,105, 77,160,166,
+ 94,112,202, 57, 5, 0, 34, 68, 16, 66, 8, 33, 8,145,163, 90, 8, 4, 23, 2, 2, 16,170,107, 84, 61,222,153,201,249, 98, 38,
+ 57,120,250,240, 23,254,235,227,161, 0, 58,248,214, 89, 59,159,157,155, 77, 32,205, 91,131,136,204, 25,229,130,185,137, 2, 98,
+136, 32, 0,192, 81, 52,132,144, 96, 84,211,208, 26,138,117,252,240,137, 23, 77,211, 82,189,222, 96,125,215,174,117,173, 77, 93,
+ 27, 62,244,209,251,238,255,197,123, 52,143,142, 0,128, 64,112,193, 25,224,206, 51, 1, 16, 8, 8,160,168, 92, 0, 8, 85,247,
+ 80,219,188,240,246,203, 15,124,224,150,185,233, 68, 38,145,120,233,135, 79, 79,205, 36,177,236,121,243,192,137,241,225,225,197,
+133, 4,226,220,230,140,114,206, 56,163, 66,112, 1, 4,128, 80, 8,193, 25,181,109,155, 82, 74,109,166,106, 62, 85, 15,248,194,
+161,246,205,183,231,144,250,249, 47,124,205, 35,227,223,254,163,223,155,155,158,249,248,111,125,166,125,253, 77, 45, 45, 49,194,
+169,205, 57, 21,156,113, 46, 32, 16, 64,112,247, 69, 44,155, 82, 42,201, 82, 32,214,232,171,105,254,242,231, 62,111, 99,244,137,
+ 96, 48,234,129,159,124,108,255,236,204,226, 91,207, 63, 93, 91,223,232,245,200, 47, 60,249, 84,190, 96,193,203,135,159, 96,140,
+ 1,224,124, 14, 46, 56, 99,148,154,166,105, 91, 54, 0,160,161,173,183, 84, 54,206, 28,126, 91,146, 8, 23, 32, 90, 95,219,208,
+210, 56, 53, 54,229, 15,250,226,221,155,190,249, 55,127,119,250,250,212, 39, 31,187,243,187,175,156,193,255,246,195,251, 25,179,
+157,143,198,108,219,182, 44,211,180,108,203, 6, 0,134,106,107, 37, 69,255,209,147, 79,111,216,210, 51, 51, 53,191,251,230,157,
+133, 92, 46,151,206, 60,241,189, 3, 1, 93, 97,102,186,189,187, 89,148,140,203,131, 83,254,160,135,216,166,201,220,208, 47, 56,
+231,140, 50,198, 24,231, 60, 22,111,173,107,223, 60,116,250,141, 29, 55,173, 93,181,227,238,169,137,121, 1, 0, 66,248,196,233,
+171,146, 68,168,105, 94, 27, 24,153,152,207,213, 5, 20,171, 84,164,140,195, 99, 63,250,107,202, 56,175,228,101,206,133, 16,162,
+169,163,219, 23,105, 45,166,103, 32,145,207,190,125,104,232,202, 88, 58,153,251,232,167, 62, 56,112,238, 82,106, 41,179,126, 75,
+239,248,200,180,164,144, 61,251,239, 53, 45,154, 73, 46,124,231,169,151,144,101, 83,106, 83,106,217,148, 82, 74, 25, 99,172,169,
+189,179,148, 75,140, 93, 62,114,253,210,185,114,118,241,251,175,190,171,200,228,142,123,118, 94, 56,125,126,106, 98,254, 67,191,
+249,155, 92,136,108,174,104, 26, 54,132, 34, 24,169, 83,117,127,215,170,118,252,145,135,246, 49,198, 25,227,156, 9,198,120,109,
+180,166,161,103,151,224,180,161,107,155, 16,246,215,191,253,138, 71,176, 98,217,160,101,107,110,102,105,213,218,182, 51, 71,143,
+157, 56, 51,180,118,117, 75, 42,149,123,254,217, 55,144,153,188,113,245,218,235,199, 47,131,159,171,188,214,220,220,140,192,207,
+211, 5, 33,252,151, 9,244, 43, 31,125,248, 43,127,248,137, 7,111,218, 12, 0,184,109, 95,223,183,254,234,247, 21,130,239,223,
+191,239,103, 41,211,222,189,123,143, 30, 61, 10, 0,208, 84, 21, 64, 80, 46, 27, 24,227,115,111,125,155, 72, 50,145, 61,103,143,
+ 30,106,110,107, 30,188, 52,180,102, 99, 47, 34, 26, 51,115,227, 35,211, 75,243,233,155,247,247, 93, 62,115, 57,149,204,198, 87,
+175,221,186,107, 39,130, 80,112, 94,200, 46, 14, 93,188,240,187,127,246,245,233,133,228,191,186, 18,113, 5, 66, 8, 29,123,245,
+137,185,177,107,241,158,141,153,197,241,158, 45,251,152, 85,190,124,252,128,164,106,186,174, 54,180,175,149, 60,161,114,102,126,
+113,226, 42,130,200, 27,174, 57,243,206,105, 89, 34,165,146, 49, 63,155,232, 93,223,189, 97,199, 14,102,155, 66,112,179,148,203,
+101,210,185, 76, 62,159, 45,153,166, 5, 0,152,154, 79,124,249,137,151,138,101,227,167, 21,168,175,175,239,223,125,124,127, 48,
+164, 73,178, 58, 63,187, 16, 8,250,230,103, 22,155, 90,155, 5, 51, 15,188,114,124,113, 49,211,220, 84, 27,170,241,215,212,133,
+182,222,124,231,141,203,167,230,102, 23, 59,186, 91,140,178, 97, 26, 22, 66, 72, 81,100, 73,145, 36, 66,136, 44, 67, 8, 57, 99,
+148,218,182, 69, 45,203,178, 76,203, 50,109,211,180, 44,211, 54, 12,219, 44, 27, 79,188,120,228,194,208,232, 63, 47, 16,142,199,
+ 91,238,232, 91,219,212,181,193, 27,137, 23,115, 25,171, 92,106,237,234, 48,203,249,134,246, 53, 13, 77,225,133,233,249,196, 82,
+150, 81,214,216, 28, 85, 20,160,233, 74, 91,239, 58, 89, 81,101,153, 40, 10, 81, 20, 25, 17,132, 32, 20, 64, 8,198, 25,165,140,
+115, 32,132, 0, 2, 2,128, 49,198, 4, 75,146, 36, 43,146,162, 72,138, 34,109, 90,221,126,199,206,245,123, 55,173, 58,122,126,
+144,115,241,227, 2, 5, 2, 1, 28,143,199,239,218,179,246,157, 55, 14,101,150,166,125, 62,141, 83,179,190, 99,221,204,232,240,
+244,216,200,141,161, 81,206,185,166, 41,170,166, 48,198,108,203, 36, 4, 67,192,132,224, 0, 8, 88,185,156, 76,186,220, 53, 1,
+ 1, 5,132, 8, 57,249, 30, 97,132, 49,150, 8,150, 36, 73, 81, 36, 85,149, 21, 85,185,109,251,186, 61,155, 86, 49,155,141,207,
+ 45,189, 79, 32, 2, 32,156, 24,158,184,237,129,251, 2,209, 86,206, 40,179,141,197,241,126, 69,149, 40,165,145,186, 80, 48,228,
+227,156, 67, 4, 9,145, 8,193, 70,217, 20, 34, 67, 36, 66, 8,129, 8, 1, 8, 48, 70,156, 59, 30,235,164, 81, 1, 1, 20, 72,
+ 0, 46,156, 10, 10, 8, 8, 48, 2, 16, 72, 8, 17, 9, 43,170,226,241, 9, 70,253,229,146,241,193,128,231,150,173,107,174, 92,
+159,248,225,219,167, 87,244,196, 66,180,173, 89, 47, 16,185,126,225, 88,247,166, 62, 65, 97, 32,210, 32,201,146,199,155, 55, 13,
+211,182, 40, 99, 46, 90,132, 49, 70, 24, 97,132,156, 60, 14,133,112, 10, 4, 8,133,211,134,137, 74, 55,230, 42,203,173,136,160,
+ 83,153, 49,198,132,112,164,196,178, 78, 20, 77,246,248,180, 72, 93, 40,218, 16,233,140, 55, 44,228,114,223,122,241,109, 33, 4,
+ 1, 0, 46, 78,221, 96, 86,174,190,165,211, 54,203,132, 40, 68,214, 85, 79, 8, 97, 34,203, 37, 74,109,198,184,112,158,119,245,
+ 13,160,219, 11, 58,239, 85, 45, 49,160, 83,120, 0,225,254, 27, 0, 8, 33, 33, 4, 20, 80, 8, 97,155,180, 84, 46, 51,202, 9,
+193,235,118,236, 48, 75,249,114, 33,171, 40,202,182,219,183, 14, 95, 62, 55, 51, 58,210, 22,139,204, 26,144, 0, 8, 50,201,108,
+ 33, 87, 42,229,115,245,241, 22,205, 23,225,156, 67,136, 48,145,133, 2, 16,182, 57,103,156,115, 87, 5, 28, 2, 4,128, 0, 16,
+ 2,167, 71, 22,192, 49, 98,183, 42, 20, 66,188, 39,240, 34, 72, 32,148, 36,224,241,122, 52, 95, 72, 86,189,140,218,133, 50, 31,
+186,112,254,198,141,233, 83,151, 71, 67,186, 60, 50,247,181,143, 61,184, 39, 87,176,182,239,217, 50, 56,107, 18, 32, 64, 83,107,
+189,170,169,186,215, 79, 36,141, 81, 27,112,198, 24, 5, 0, 33,132, 1, 1,144, 35,196, 57, 23, 2, 2, 33,176, 83, 28,115, 71,
+ 68,224,138, 34,132, 83, 94,114,238,116,226, 16, 34,136, 32, 66, 0, 99, 34,132, 96,140, 42,154,174,104,222,197,201, 27, 55,134,
+198, 0,128, 35, 35,211,254,250,216, 31,127,238,147,239, 28,120, 59, 85,178,175, 14, 77, 50,219,238, 89,219, 57,114,229, 50, 1,
+ 64, 52,181,175, 18, 66, 0, 8, 1, 4,130, 81, 33,184, 83, 97,137,202,199, 20, 8, 64,206, 33,128, 16, 0, 46, 56, 0,208, 81,
+ 18, 16, 16, 66,199,158,157, 86, 0, 98,130,116,111, 32,210,188, 74,210,124,227, 3, 71,143,190,113,194,227, 81, 39,199,230,183,
+221,180,110,122,252,157,233,153,165, 15,253,242,125, 47, 63,123,232,194,120,226,254,120, 61, 66,240,225, 95,249,181,141, 55, 13,
+ 36,103,198,166,103, 18, 47, 61,115, 32,105,114, 28,143,199, 31,186,103, 47,128, 0,186, 85, 52, 7,156,113,193, 1,119,170,105,
+ 33, 0, 0, 80, 32, 8,133,107, 33,162,218,140,136,229,114, 25, 34, 4, 9,193,146, 44,235,190, 26,132,241,244,213, 83, 35, 67,
+ 99, 62,191,103, 33, 81, 88,179,161,125,247,254, 71, 54,244,237,211,176, 97,216, 48, 24, 14, 54,134,244, 88, 44,152, 75,167,147,
+115, 19, 10,225, 2,240,174,238,214,222, 53,109, 37, 6, 8, 0, 64, 56, 53,172, 99, 3, 78, 97, 12,132, 16, 28, 0, 14,128, 0,
+ 64, 64, 0, 1,224,149,119, 23,156,115, 23,237,112,190, 17, 2, 0,136, 49,242, 4, 34,225,134,238, 66,102,225,226,137,183, 85,
+ 89,234,236,109,215,189,222, 72,116,230, 59, 79,190, 54, 63,189,120,117,120,186,185, 62,114,125,116,118,235,166,174,123, 63,252,
+209,212,210,226,179, 79,126,247,248,192,216,183,190,241, 87,154,175,102,126,108,160,255,228,224,216,200, 12,142,199,227,247,221,
+190,205,233, 48,128,211, 55,113, 46, 56,135,194,145, 9, 56,237,139,163, 44,206, 57, 99,148, 51,202, 40,171, 84,151, 2, 64,128,
+ 16, 84, 52,175, 47, 92, 95, 72, 77, 31,125,237, 77,127, 40,248,198,193, 75, 91, 54,119,106,190,154, 96, 77,221,158,189,155, 79,
+157,187,190,117, 83,123,115, 60,234,213,149,245, 27,123,230, 39,110, 20, 50, 75,175, 31,185,248,225, 7,111, 62,249,246,241,151,
+127,244,226,109, 15, 62,210,217,211, 62, 48, 48, 72, 0, 0,156,154,140, 59,149,185,168,186, 12,115, 11,126,183,224,230,140, 9,
+193, 42,114, 80,167, 68, 37, 18, 14,132,163,161,134, 30,203, 44, 91,165,172, 96,236,212,145, 19, 75,139,169, 53,155, 86,253,250,
+111, 60, 58,112,238,210,248,216, 25, 89,149, 41,128, 15, 63,114,103,160, 38,122,224,249,103,135,174, 79,245,174,238, 88,187,251,
+ 14,106, 91,219,206, 93,107,105,139, 37, 22, 19, 35,179,137, 63,254,247,255, 9, 80,186,227,174, 59, 96, 95, 95,223, 87, 63,255,
+113, 87, 14,176, 28,220, 28, 49,156, 28,229,150,255,140,113,198, 25,227,130,115, 8, 33,145,176,162,170,186, 63,148, 89,154, 47,
+ 21,205,167,254,199,107,221, 29,141,197,162,209,222,209, 88, 42, 26,150,205, 54,110,233, 45,149,202,161,154, 64,203,234,157, 63,
+250,198,215, 95,127,231,242,239,125,230, 99,197,244, 98, 32,228,159, 28,159, 63,112,224, 84, 71, 71,195,187,151, 70,246,109,237,
+225, 66,152, 20, 79, 76,206,102, 44,134,227,241,248,157,187,123, 24,165,220,125, 22,148, 51,155, 81,198,168, 77, 45,219,182,109,
+106, 83,203,178,109,219,102, 54,163,148, 65, 0, 52,143, 22,142, 53,213, 52,246,248, 35, 77, 8,203,212, 50, 82,137,132,109,218,
+119, 63,178,223,239, 87, 74,133,210,250, 45,189,107,183,108, 40, 23,178, 61,155,111,114,156,223,171,195,144,223, 71, 75, 57, 73,
+194,163, 35,211,187,110,237,179,139,249,158,158,150,225,209,217,206,150,232,249,254, 49, 90, 42, 69, 67,190,162,205, 8, 0,208,
+178,108,193, 5,175, 68, 20, 39,200,113, 33,128, 99,219, 78, 55,206, 5, 0, 0, 99, 20,174,173, 13, 53,116, 41,122,160,148, 77,
+ 72,222, 80, 98,122,232, 59,143, 63,253,145, 79, 62,186,245,182,135,174, 13, 13,157, 63,117,101,195,150, 94,217, 91, 75, 41, 55,
+ 76,246,214,243, 47, 60,247,230, 73, 89,215,125, 88,196, 35,193, 77, 15,239, 75, 39, 51,151,250, 71, 21, 73,122,225,208,185,187,
+118,175,189,251,142, 93,178,132,183,109, 2,253, 3, 35, 30,159, 10,210, 69, 2, 0,160,182,107, 19,194,137,198, 92,188,239,130,
+ 16, 40,170,210,216,185,206,162, 64,247,120,231, 70, 47,214, 54,247, 36,103, 70, 98,170, 55,214,177,165,163,231,196, 23,191,248,
+205,173,107,219, 37,137,212, 55,213,125,231,233, 67, 31,188,207, 96,140, 31, 63,209,223,211,217,212, 89, 27,188,239,225,125, 77,
+ 29,171, 32, 2, 99,131,151,146,137,108,200,167, 29,127,119,224, 15, 62,253,193,181,187,239, 80, 61, 1, 39,134,216,166, 49,114,
+229,130,125,232, 8,236,235,219,243,249, 95,191,155, 11, 46,120,213,114, 28,109, 1, 46, 4,132, 64,150,165, 88,115,139, 47,210,
+ 82, 72,207, 44, 78,143,235, 30,141, 72, 42,131,210,245,129,161, 99,231, 71,253, 10,158, 24,157,240,123,212,246,182,134,211,253,
+ 35, 15,237,223, 57, 49, 58, 99, 90,244,236,181,137,219,183,175, 41, 22,203,251, 31,220, 23,168,107,186,114,238,220,115,207, 29,
+106,111,142,110,217,190,218, 48,236, 77,125, 55,223,232, 63,155,207, 22,166,166, 22,175,140,206, 19, 89,181,153,197, 40, 3,146,
+ 10,247,236,217,179,111,107,151,227, 78,160,146,177,221, 12, 5, 0,198,200, 23, 12,122, 66, 13, 16, 66,219, 50,169,101,228,178,
+ 57, 77,197,138,230, 27, 30,184,220, 63, 60,227,213,100,131, 50,175, 71,207,101,243, 97,175,222,218, 90, 63, 59,187,228, 81,101,
+127,192,219,177,110,227,204,232, 80, 56, 82,115,229,226,144,224, 92,146, 73, 40, 28,168,169,171, 41, 21, 10,167,206, 14,105,132,
+ 40, 10, 17, 0,250,189,234,240,244, 18,198, 72, 35, 24, 74,242,207, 25,222,232,244,102, 63, 63,194,236,221,187, 23,193,101,132,
+235,231,226,250,249,234, 92,255,197, 2,121, 60,250,207,151, 64,135,127,244,119,159,186,239, 22,137, 96, 0,192,151,191,248,249,
+223,255,216,131, 0,128, 80,192,247,255,174, 64,154,166, 1, 0,250,223,125,225,204,129,111,168,178,212, 88, 95, 7, 0,136,213,
+213, 12,188,251, 98, 98,110,198,239,211,191,250,185, 79, 13, 95,120,235,214,155,182,118,182, 55, 14,158,122,241, 63,126,250, 35,
+ 87,206, 29,186,120,248,137,255,254,231,127,240,255, 92, 32, 28, 8, 4,178,217, 44, 0,224, 23, 30,218, 63, 56,116, 3, 0,240,
+149,255,242,155,127,251, 55,127, 86,206,204,149, 75,165, 13,173,245,191,250,145,187,239,219,183,237,131,143,220,155,156,155, 48,
+203, 38, 0, 98,205,198,158,185,177,225,139, 39, 79,143, 12, 79,237,185,251,254,174,158, 46, 9, 3, 73,245, 43, 32,191,170, 49,
+250,214,201,203,255,106,105, 90, 90, 90, 96, 60, 30,159,156,156, 4, 0,188,251,242,227, 62,191,127, 41,107, 73,162,212,127,246,
+ 98,160, 38,226,209,241, 80,255,200,222, 59,118, 34,162, 6,163,241,133,177,129,196,124, 18, 19,148,207,151, 1, 16,139,243,201,
+197,185,148,201,249,109,119,110,239,222,120, 19, 66, 48,187, 56,190, 56, 59, 59, 55,189,152,202,228, 22, 82,185,239,190,124,116,
+230, 95,136, 58,236,221,187,215,213,208,246,205,107,111,217,177,118, 46, 97, 53,198,124,144,104, 91,246,222, 1,121,174,152, 47,
+ 6,195,254,150,158,245,129,186, 22,136, 20, 65, 11,150, 81,142,119,245, 36, 22, 23, 24,101, 16, 64,140, 81, 46, 83,188,229,190,
+123,172,114,142, 90, 37,206, 24, 4, 12, 19,172, 72, 82,192,163,237,217,188,250,129, 91,183,205, 39, 50,179,139,169,159, 94, 67,
+216,231,243,157, 60,244,204,125,119,236,206,103, 82, 62, 77, 24, 54,128,118,142, 35,249,228,225,163,173, 61,189, 62,191,247,212,
+145,119,218,215,108,212,116, 47,150,148, 96, 36,230,175,107, 43,103,103,243,185,130,215,239,241,248,244,112, 77, 32,155, 90,208,
+117,130, 16, 6, 66,112,193, 16, 4,152, 96, 66, 92,128,121, 99,111,219,254,155, 54,157,185, 50, 82, 42,155, 63,149, 64,127,244,
+ 7,191, 21,213,141,196,220,180, 39,220, 60, 55, 49,234,245,233, 75,115, 11, 94,175,148, 73, 36, 95,127,238,224,240,149, 17, 69,
+149,102, 70, 6,101,108, 2, 8, 78, 30,124, 43,159,156, 82, 20, 9, 19,130, 48,242,249, 60,145,186, 80, 32,232,195, 8, 11,193,
+ 24,179,157, 90, 27, 65, 8, 17, 68, 24, 99,140,156,225,194,158,205,189, 91,122,218,143,158, 31,252,159, 11,180,123, 83, 23, 97,
+ 86,231,198,157,245,241,246,171,231,207, 34,192,203, 38,143, 53, 52,212, 53, 53, 38, 23,230,231,230, 83,204,162, 62,191, 71,150,
+161, 85,202, 17,130, 67, 53, 65, 76, 8, 33, 88,150, 36,247, 45, 49, 2, 0, 10,206, 56, 99, 78,251,228, 0,222,200, 5, 34, 32,
+ 66, 8, 66,168,169,242,173,219,214,222,152,156, 79,231,139,255,140, 64, 68, 8,212,218,213, 86,211,208,150, 92,152,102, 28,214,
+ 54,212,151,242,121,136,177,166,250,195,145,160, 54,177,232, 64,198,254,144,223,227,245,214,212, 55, 74,178,110, 25,121,171, 92,
+180,169, 37,152, 16, 64, 8, 46, 4,116,170, 23,183, 70,128, 8, 33,196, 17, 70, 4, 16,119, 34,224, 32, 15, 16,254,198,135,246,
+159,188,112,237,153, 67, 39,255,201, 1,188, 77,109,155,225,233,235, 23, 47,159, 61,143, 17, 19, 92,248, 34, 77,185,196, 92, 54,
+123, 61,147,204, 42,138, 4, 0, 48,203, 86, 38,153, 81, 85, 85,214, 36, 0, 4, 66, 18,145,100, 33, 56, 3, 76,184,149,184,128,
+ 78,187, 8, 4,128, 0, 10,128, 16,194, 88, 0, 1,129, 4,100, 87, 32, 8, 17,128, 16,238,218,220,211,209, 84,247,151,255,196,
+ 56, 31, 63,242,240, 3,118, 98,122,240,210,149,125,247,238, 47,101, 19,225,218,154,124, 54,159,207,102,230,102, 22, 45,147, 34,
+132, 20, 85, 82, 84, 5, 33, 4, 33, 64,144, 11,193, 57,167,156, 51, 0, 4, 0,110,106, 70, 46,120, 42, 0,132, 80,192,202, 52,
+ 10, 64,232, 66, 20, 8, 66,132, 16, 70, 8, 97, 4, 33,146, 36,124,211,154,174,183,127,204,164, 90, 90, 90,240,170,150,152, 87,
+ 65, 62,191,222,218,213, 27,105,104, 14, 68,154,199,175,245, 83, 74,169, 69, 17, 66,178, 44,105,186,162,235,170,172,202, 68,194,
+ 8, 65, 32,152,112,176, 7, 33,160, 43, 17,172,130,186,142,182,150,139,188, 10,136, 85,133,182, 48, 70, 68,194, 24, 33, 0,192,
+ 77,107,187,223, 39, 83, 75, 75, 11,222,181,101,237,214, 77,221,219,110,187,223, 27,174,103,204,178,140,188,145, 75, 56,239, 68,
+ 8,150,100, 73, 81,101, 69, 83,100, 69,150,100,130, 49,118, 84, 5, 0, 68,192, 17, 5, 58,237,155,131,188,172,224, 31, 84,135,
+118, 14,110, 34, 32, 0, 16, 35, 66, 48, 33,146, 36, 19,140,137,101,217, 59,122,219,143, 94, 28, 90, 41, 16, 10,134, 3, 0, 73,
+ 71, 95,126,154, 81, 83, 86,188,186,191, 46, 92, 27,241,120, 53,175, 95,247,250,116,175, 79,247,120,117, 77, 87, 21, 85,114, 66,
+139,112,223, 86, 8,224,168,200,181, 97, 81,177,221,202, 76,183,162, 51, 88, 45,141,129, 3, 60,202, 10,209, 61, 90, 32,232,173,
+137, 4, 36, 73,250,119, 31,190,207, 81,152,107, 67,247,222,187,127, 85, 79, 71, 77, 93, 93,185,152, 13, 70, 26,203,185, 69,206,
+ 41, 4, 12, 0,136, 48,196, 24, 19,137, 16,137, 72, 18, 33, 14,138,137, 49, 66,176,106,166, 14, 56,227,232, 65, 64,232, 24, 22,
+ 88,161, 31, 23, 1, 96, 92, 84, 26, 9,132, 16,198, 24, 0,168,104,178,166,107, 92,128,237,221,173,151, 70,167, 76,203,142,199,
+227,184,189, 46,172,176, 98,102,105, 49,222,222, 37,169, 30, 34,107,130, 83,206,108, 32, 56,114, 33, 75, 71,207, 21, 97,170,129,
+ 5, 33, 87, 23,194,197, 66, 42,189,119, 5, 27,113,140,137, 11,206, 5, 99,220,182, 40,167, 14,227,128, 19,130, 17,130,177,198,
+198, 66, 33,223,209,213,108,148,141, 95,124,240,246,176,172, 38,202,148,196, 26,235, 34,117, 53,117,245,117,170, 63, 12, 33,180,
+205, 18, 0, 0, 19, 69, 82,108, 0, 0, 66,180,130,215,129, 74, 64, 65, 78, 78,112,148,193, 93, 28, 24, 84,128, 71,192, 43,222,
+ 6, 5, 4, 14, 78, 3,185, 16,194,182,109,211,180,128, 0,209,134,218,214,222,245,111,191,252, 74, 36, 26, 93,183,237, 38,197,
+ 27,153,155,203, 82,179, 8, 85, 13, 0, 3,223,186,103,103, 80, 67,229, 82, 17,178,146,164,120, 4,183, 5, 99, 66, 80, 23, 24,
+114, 81, 95, 8, 33,114, 45,186, 2, 2, 67,136, 28,152,107,197, 28,147, 87, 92,189,242,183,243, 16, 33,132, 8,202, 50, 49,202,
+102, 49, 95, 14, 4,125, 67,151, 7,238,254,208,199,223, 61,116,184,165,107,245,119,191,254,248, 51,175,157, 76,206, 44,238,237,
+ 91,119,254,218, 12,201,166, 82, 5, 31, 10,134,124,140, 90,204, 46, 35, 76,132,224, 0, 34, 8, 49,194, 68, 0, 32, 56, 19, 28,
+ 85, 13, 19, 64, 0, 33,128, 16, 57,166,227, 88,141,168,244,221, 0, 56, 63, 3, 64, 0,136,128, 0, 16, 67,199, 85, 67,154, 47,
+220,210, 67,202,101, 35,181,152,108,105, 83, 62,243,235,159,241,169,202,119,159, 63, 82, 31,246,127,244,193,190,124,174,184,117,
+239, 45,255,248,210, 25, 2, 0,240,250, 61,254,160, 95,213,189,130, 51,238, 64, 85, 2, 0, 4, 17,194, 2, 8, 1,160,128,188,
+210, 83, 87, 32, 52,238, 26,139, 27,110,170, 48,142, 0, 64,112, 23,238, 19,110, 67, 67, 48, 81,189, 33,111, 48, 70,100, 85, 55,
+ 10,186,174, 13,158, 63,127,223,254,190,112,109,195,212,196, 68, 52, 36,223,152, 92, 50,242,197,129,119,143, 2, 0,137,199,167,
+ 71,234, 66, 30,175,135, 72,170, 3,103, 2,206,129, 16, 64, 32,224, 68,123, 7,118,173,128, 53, 14, 22, 81, 81,151,211,112, 59,
+152,132,147,213,132, 83, 23, 67,247,217, 34,219,166,140, 51, 8, 97,102,113,244,250,229, 43,233, 84, 30, 0,240,189,151,142,125,
+241, 11,191,149,152,159,187, 62, 48,212, 95, 54, 0,128, 55,223,182,181, 88, 50, 1, 4,200, 23, 8,132,106,107, 85,111,136, 40,
+154,235, 21,130, 87,240,188, 10, 56, 13, 16, 68,200,125, 90, 85,170,131, 27,134,144,123,155,224,142,209,200,178,236,143, 68, 3,
+145, 6, 69,247,201,154,183, 92, 50,178,169,156,172,120,222, 61,124,114, 98,124,110,195,214,213,178, 76, 32,132,102,185, 72,100,
+ 89,214,181,222, 85, 45, 22, 0,169,197,212,139,175,159,128, 0, 16, 76, 20, 89, 11, 66,232,194,158, 21,105,220, 64,134, 32,228,
+ 0, 2, 4,132, 16, 16, 65, 39, 63, 57, 62,199,221, 76,193,171, 9, 11, 64, 32, 75, 36, 88,215, 26,136,181, 27,133,212,225,231,
+126, 80, 42,217, 83, 19,243,173,237, 13,249,108, 97,224,242,240,195, 31,188,109,113,118,241,213,183, 47, 17,140, 37, 73,138,182,
+244,254,214,182,219,250, 79, 30,172,171,175,185,113,109, 58,234,211, 83,121, 78, 28, 55,114,124,216, 65,154, 65, 21,216,123, 63,
+163, 70,192, 74,129, 33, 32,130,128, 11, 33, 32, 66,144,115, 4,161, 64, 8, 66, 32, 41,154,230,175,129, 0, 10, 70, 35,177,232,
+137,163, 23, 99, 13,145, 77, 59, 55,132,163,205,219,111,191, 55, 95, 40,157, 58,120,160,161,169,225,131,247,183, 32,140, 21,205,
+151, 89, 24, 87,101, 76,195,209,123,127, 97,245,248,200,204,224, 83,111, 34,224,184,140, 75, 67,224,174, 44, 21, 47,230,239, 69,
+230, 65,165,239,134, 96,133, 73, 1, 1, 0, 64, 24, 33, 66, 32,132,140,154,201,169,254,193,211,239,204, 77,205,109,217,177, 38,
+151, 45,248,195, 49,127, 93, 59,150,148,167,255,225, 31,239,120,232,225,169,137,233,114,217,156,157,156,185,116,236,192,226,244,
+216,149,171,147,117, 33,197, 44, 22,106,130, 10, 16,128,184, 65, 95, 8, 46,152, 16, 28, 86,236, 19,186, 74,169, 68,192, 74,188,
+113,126,204, 43,183, 57, 34, 67, 8, 49, 33,178,234, 65, 88, 42,231, 83,233,165,185,124,190,216,208, 20,173,141,213, 66,193,102,
+ 38,167, 2,145,230, 63,254,195, 63,254,192,253,125,255,246, 87, 62,179,177,167, 53,157,204,237,184,227, 30, 69,213,127,248,228,
+ 83,107, 87, 53,166,211, 57,102,154, 47,190,112, 12, 66, 64, 28,210,134,168,162,230, 46,134, 47, 68,101,120,192, 43, 5,142,168,
+128,161, 14,165,207, 37, 11,112,225, 84,103, 8, 97, 95,184, 65,245,213, 94, 63,247, 86, 38,149,141,214, 71, 66, 53, 97,136,165,
+139,231,174, 25, 86,255,169,183, 79, 68, 67,190,163,135,206, 60,114,199,182, 96, 77,120,237,206, 91,143,188,248,236, 11,111,157,
+189,243,150,237, 27,110,186,155, 90,197,231,158,250, 62, 87, 85,144, 47, 34, 55, 5,114, 86,241,103, 7, 93,228,208, 25, 48, 0,
+225,200, 35,150, 17, 72, 46, 56,103,140,113,230,140,101,220, 63, 5,103, 8, 19,193,108, 0,196,224,229, 27,221,155,247,197,186,
+118, 70,226,235,239,253,232,199, 44,202, 15,157, 31,174, 13,251,226,241,186,124, 54,191,251,142,253, 70,102,250,214,135, 30,217,
+182,186,125,223, 29,123, 16,145, 57,192,225,186,134, 88,208, 39, 0,192,119,222,186,187,171, 53, 6, 42, 50, 57, 53, 50, 0, 66,
+ 64, 55,220, 65, 55, 71, 1, 23, 1,101,148, 81, 86,193, 66,133, 51, 71,147, 21, 89,247,215, 42,186,239,218,249,163,233,100,118,
+102, 46, 19,208,108, 97,231, 56,179,100,100,173, 90,221,126,229, 92,255,253, 15,237,227, 14,194,108,100,205,114,254,141,151, 15,
+ 50, 32,102,198, 38, 78, 30,122, 11, 33,188,251,246,219,162, 97,252,214,187, 87,136,243, 46, 14,106, 14, 4, 7,130,187,227, 11,
+225,152, 78,197,118, 57,115,112,124,198, 28,205, 56, 60, 74,164,106,154,226,241,171,158,176, 30,168, 45,229,147,215,174,140, 78,
+ 76, 46,245, 79,204,124,224,195, 15,120, 2, 53,179, 99, 87, 82,137,236,183,191,255,230,167,126,249,158,147,103,110, 32, 40,152,
+ 69, 49,193, 63,248,193,155,109, 93,237,241,168,190,102,235,118,179,152, 26,188,112,229,185,167, 95, 8,215,132, 33, 0, 4, 8,
+206, 57, 5,110,152,229,208, 73, 28, 78, 43,225,136, 86,249, 39,198, 24,163,148,187,116, 21,142, 16,146,100, 57, 84,223,169, 5,
+234, 50, 11, 99,197,236, 66, 49,155,154, 24,157,219,255,208,190,135,117, 45,151,152,125,243,133, 3,144,200,138,130, 30,184,239,
+206,214,222,245,181,141, 45,223,121,242, 5, 11,144, 71,122,214,254,231,191,190,117,102,244,234,245,203, 23,103, 71,175,252,224,
+153, 35,169,146,177,177,187,169,174, 37, 46,198,150,136,243, 24, 42, 90, 17,149,105, 37,119,134, 28,142,153,187, 86, 67, 41, 99,
+156, 49,151,158, 10, 32,144, 21,149, 72, 50,198,228,217, 39,190, 23, 14,251,203,101,179, 88, 54, 10,249,226,211, 79, 31,186,239,
+222,157, 88,194,123,110,221,162,121,253,151, 79,159,207, 38,231, 31,255,218, 15,238,185,187, 79, 34,192, 40,228, 20, 79,248,240,
+ 75,111, 44, 38,178,233,124,105,169, 80,254,252, 31, 60,246,246,219,231,236,204, 18,132,144,112,206, 4,179,133,155, 49,151, 7,
+ 11,238,172,165, 50,252, 97,180, 98,200,156, 11, 32, 16, 66, 88,194, 16,161,228,236,181, 66,246,108, 34,149,167, 54,227, 66,180,
+181,213,207, 76,204,244,118,212, 95, 56,125,229,150,253,187,231,167,231, 58, 87,135, 54,238,238,251,243, 63,249,146, 26, 8,122,
+ 61, 18, 4, 96,236,218,245,115, 79, 60,147, 46,150,139, 5,131,113,254,240,173,155,159,249,222, 27, 80, 81, 22, 23, 82, 0,200,
+ 68,112,206,168, 13, 86, 86,157, 85,188,154, 59, 77, 15,119, 70, 28,206, 23, 2, 0, 73, 34,154,174,107,190, 32,145,117,106, 21,
+175, 30,191, 20, 8, 7,253, 94,181,171,167,153, 49, 81,204, 23, 91, 59,155, 34, 13,173, 51, 99,215, 5,231, 99,215,134, 10,249,
+ 2,241,133,214,117, 68,253, 53,209,244,226,172,105,148,239,121,228, 22,163, 84,182, 76,251,200,193, 51, 99,227,243, 37,129, 64,
+ 38,183,111,239,134,167, 14, 15, 58, 2, 49, 8, 1, 0,156,115,119,134,236,146,142, 29,235,117,120, 74,204, 85,151, 36, 75,190,
+128,223, 27,110, 84, 60, 97, 70, 77, 76,148,182,206,134, 84, 34,221,222,217, 52, 59,157, 80, 20,210,220, 18, 85, 85,173,148, 75,
+215, 53,117, 68, 98,166,162,249,128,224,195,195,115,209,186, 64,118,105,238,141, 87,222,253,133, 15,223,169,121,131,199, 14,158,
+ 81, 52,217, 22,216,163,162,235,211, 11,141,126,223,197,243,215, 33, 0,174, 13, 45, 3,231, 98,121,232,225,142, 81,133,112, 52,
+ 37, 4, 64, 8,234,186,230, 13, 53,122, 66, 13, 0,145,249,107, 87, 50,137,165, 72,172, 97,231, 94,169,103,251,254,204,252,232,
+223,252,217, 87, 62,177,170, 77,210,188, 64,136,114, 33, 53, 55, 53, 63,116,125,178,148, 47,158,191, 49, 31, 10,104,140,178,185,
+100,246,185,239,191,213,213,221,196, 40,157,154,201,231,139, 86,215,186,214,201,133,100, 32,160,103,115, 37, 0, 0,169,204,194,
+170,179,178, 21, 23, 95, 30, 42, 82, 18,154, 0, 0, 31,157, 73, 68, 65, 84, 25, 58, 79, 82,209,212, 64, 93,139, 30,140, 2, 0,
+202,153,249,154,250,246, 75,167, 47, 92, 58, 59,248, 75,159,254,204,244,196,248,229, 19, 71, 55,172,109, 27,184,120,253,222,143,
+236,153,184,114,124, 97,102,225,165, 67, 23, 11,229,178, 42, 41, 65, 96,215, 55, 70, 34,117, 53,173,205,209,134,218,192,165,161,
+201,197, 68,230,147, 31,191,183,108, 48, 8, 25, 21, 64,211,149, 66,209, 0,128, 19,193, 5, 99,110, 39,202,185,171,164, 74,126,
+128, 66, 56,178, 2,132,145,207,239,107,234,221, 33, 0, 68,146,106, 27, 69,213, 27, 22,128,111,218,185,245,149,167, 95, 61,248,
+204,119, 46,156,191,174,122,189,150, 81, 42,229, 74,119,126, 32,243,210,179, 7,155,155,234, 90, 67, 26,245,202,107, 54,118, 9,
+ 46,106,234,194,179,211, 11,217, 76,174,187,163, 65,130,232, 19, 31,217,191,241,230, 7, 40,181,178, 75, 51,159,223,121,203,129,
+231,158,247,120,180, 43,151,166,201,114, 66,250,177, 33, 80,133, 38, 10, 48, 70,225, 72, 36,214,185,213,178,172,204,220, 53, 34,
+169,158, 64,141, 37,136,162,121,106, 26,187,174,140,206,150, 10,229, 85,171, 90, 60, 30,237,133,183,206,116,196,194,215,206,159,
+152, 94,204, 52,214, 71,114,217, 98,115, 75,172,107,245,170, 80,180,101,122,228,146,170, 42, 5,142,230,102,150, 90,155, 34,141,
+173,109, 88, 86,137,162,169,158,128,224,252,238, 71,127,241,210,241, 3,226,226,180,171,161,101,126,194,143,141,167, 8,193,129,
+144,191,166,177,107,110,248,140, 36,203,229,124, 54,151,201, 7,195,193, 66,190, 88,219,208, 52,116,169,191,104,211, 76,201, 88,
+154, 79,249,123,226,183,110, 95,189,102, 99,207,252,236,162,101, 51, 33,128,174,171,183,220,115,107,180, 99, 99, 41,151, 24, 25,
+ 26,187,113,125, 74,193,184, 41, 30,237, 94,219,237, 11,214,228, 19,147, 68,210, 36, 69, 53, 74,133,254,115,103, 46, 93,157, 6,
+ 64, 16,183,173, 92, 65,153, 88,105, 64, 8, 35, 95,192, 23,105,234,129, 16,219, 86,217, 50,202,146, 34,123, 3,190,154,166,238,
+167,190,252, 13, 85,186,156, 74, 46,121, 8,217,189,115,205, 75, 7,206, 0, 8,101,153, 28,122,237,132,128, 16, 67, 80, 40, 20,
+215,110,234, 82,116,111, 98,226,234,227, 95,253,150, 95, 83,252, 65, 47, 99,124,215,237,183, 47, 76,141,142, 12, 13,204,140,207,
+ 12, 13, 79, 47,149, 40, 2, 0, 99,156,203,229, 32,132,248,230, 93,155,154, 99, 33,224, 62,159,106, 14,117,204, 88, 40,178,220,
+208,190,218, 87,219,130, 37, 69,245,248,161, 96,177,246,205, 64,240, 80,172,131,152,179, 19,147,139,138,230,179,140,210,220, 76,
+ 50,105,152,119,236,219,212,218,221,122,240,248,101, 93,198, 91, 54,116,182,180, 53,168,186,146, 77, 44,253,245,151,158, 44, 88,
+118, 32, 20,156,156, 89,188,117,223,230,115,239,158,125,253,205,211,103,206, 12,142, 45, 21, 27,253,106,223,142,222,104,200, 3,
+ 0, 28,159, 93,178, 4, 33,227,179, 41,177, 44,201,123,166,101, 16, 64, 85, 83,250,167,138,170,111, 72, 8, 97, 91,102, 49,155,
+ 4,224, 66, 62,157,168,111, 25,124,249,133,195, 22, 99,170,174, 16,132, 77,211, 18, 12, 29,120,119,200,239,213,211, 38, 15, 10,
+156, 22, 74,185,168,100, 39,102, 49,198,146,170,251, 3, 30,131,131,214,222,206,193,233,212,149,107,179,182, 37, 56,150,144, 97,
+ 46, 24,250,153,103, 79, 88, 0, 98,206, 8, 66, 0, 8,184,119,239,222,116, 58,157,201,100,126,222,198, 66,255,123, 47, 33, 68,
+ 48, 24, 12,133, 66, 4, 0,144,205,102,167,166,166,254,143, 82,126,156,228, 25, 10,133,208,255, 81,196,255,199,230,155,255, 63,
+ 82, 80, 93,109,205,187,111,254,224, 31,254,244, 55,110,223,178, 86,150,222,179,175,135, 49,110,140,213,198,106, 67, 63,255, 10,
+ 34,255,154, 73,127,223,142,230,250,240, 11,175, 30, 41, 20, 75,255,212, 61,186,166,254,213,231,127,195, 76, 77,154,166,213,213,
+ 24,237,136, 69,230, 82,217, 55,206, 95,121,249,233,111,136,226, 92, 75,207,166,129, 51,167, 38, 71, 70,198, 22,179,183,221,251,
+ 96,173,102,124,233,239,158,120,230,205, 19, 16,194,251,238,190,189,161,214,255,210,235,111,207,254,107,233,207, 63,227, 72,180,
+119,239,222,241,241,113,103,224,250,207, 92,191,245,201, 15,239,185,105,199,233,243,131,143, 60,120,151, 79, 87, 11,217, 36, 18,
+ 6,103,226,237, 99,231, 10, 20,109,238,109,122,233,229,131,223,127,229,216,186,117,171,255,246,139,159, 67,102,174,152, 75,201,
+ 18, 76, 37, 50,201,165,204,236,212, 34, 0,226,206, 71,238,169,107,234,152,189,113,121,122,124, 34,159, 47, 3, 1,102,103,151,
+ 26,227,177, 29,183,220,134, 36,175,170,233, 4, 9,219, 44, 89, 70,145,217, 86,185,152,158, 25,159,156,154,152,251,210, 19, 47,
+141,205, 44,252,239,218,120,107,109,109,253, 9, 10,234,108,109,252,222,227,127,106, 83, 42,233,145,161,193,254,191,248,202,147,
+ 95,248,147,255, 16,192,121,137, 32, 69,247, 10, 78,109,179, 28,140,182, 77,143, 92, 29, 27,158, 72, 44,164,186, 87,181,214,214,
+215, 44,206, 37, 33,130,109,221, 93,249, 92, 46,151,206,248,131,126,192,237, 84, 50,107, 25,182,109,209, 92,174,216, 24,143,122,
+125,122, 38,153, 77, 37,179,165,146, 97, 25,214,194, 66, 42,109,129,123,238,218, 29, 12,233, 30,127,168,190,165, 75, 86,188, 0,
+ 66,219, 44,149,114, 75,133,204,124, 54,149,202,101, 10,139,243,169,119, 47, 93, 31, 24,158,204,228, 11,249, 98, 57,145,206,253,
+175, 84,208, 79,112,177,143,124,224, 14,211,164,217,116,186,115, 85,116,251,206,155,158,218,176,193,235, 15, 83,219, 22, 0, 50,
+ 46, 84, 85,153,185,113,233,252,137,119, 36, 9,107,186, 26,174, 13, 66,130, 67,117,141,181,205,221,178,234,245, 4, 99, 66,240,
+217,209,126, 97,166, 11, 57, 91,146, 36, 85, 85,253, 65, 31,165,108,122,124,182, 92, 44, 51,206, 33,130, 18, 33, 66, 22, 1,191,
+215, 74,100, 15,188,254,206, 93,119,108, 11, 71,106, 50, 11,227, 8, 19, 73,214, 1, 0,148, 89, 68, 82,125, 1,191, 68, 36, 85,
+ 87,106,163,161,219,251, 54,152,101,211,178, 41, 0, 80, 34, 24, 66, 56,181,144,252,254, 43,239, 12, 79,204,254, 47,138, 65, 91,
+ 55,111,248,244,167, 30, 91,219,213,100,155,198,226,204,180,223,175, 28, 61,240, 86, 32,210,180,105,215,246,201,161,115,177,120,
+167,224, 84,146,100, 78,129,199,235, 13,135,125,190, 96, 48, 26,239,205,167, 19, 51,227,195, 38, 69,145,166,230, 92, 54, 91, 42,
+100, 60,222, 64,172,185,171,144,154, 1, 96, 86,213, 52,127, 77,212, 19,106, 48,242,169, 98,161, 56, 59,181,168,106,178,207,239,
+161, 58, 99,148,123,124,122, 32,236, 53,202,214,228,196, 28,150, 73, 93, 52,162,122, 60, 66, 48, 8,145,195, 45,197, 88, 86, 52,
+ 14, 17,148,101, 89,211, 85,219,166,150,233, 16, 24, 25,103, 60, 30,139,252,254,191,121, 80, 8, 65, 41, 91, 72,102,142,157,187,
+122,248,204,192,207, 62, 6,237,217,179, 7, 8,254,233, 95,190,191,214, 7, 13, 10,117, 77,241,248, 67,134, 37,184,145,206,101,
+ 11,209,198, 6,155, 75, 11,147,215, 61,186,236,241,135,194,209,166,217,177,161,171,253,195,227,195, 51, 22,101,161,144,183, 54,
+ 26, 38,132,112,193,169,101, 71,154, 90, 59, 86,245, 4,130, 65, 89,243,113,206,178,137,217,124,174,168,233,158, 96, 77,216, 46,
+231,146,115,227,185,108,193, 52, 76, 46,132,179, 14,232,226,239, 0, 32,140, 36, 66, 20, 77, 81, 84,149,200, 50,198, 82,133,170,
+ 77, 25,163,204, 89,157,178, 25,165,140, 81,106, 87,127, 70,157,229, 8, 70, 41,231,140,219,148, 9,198, 77,203, 58,124,122,224,
+232,185,193,108,161,244,179,137, 65,125,125,125, 15,221,123,235,246, 85,245,170,238, 67,208,146, 21, 15,181, 12,201, 23, 61,246,
+250,107,126, 15,150, 36,226,245,123,210,169,130, 36,145,218, 88, 56, 16, 10, 90,166,145, 92, 74,141, 12, 77,140,141,206,228, 11,
+101, 8,160,215,163, 6, 2, 94,175, 95,247,250,117,127,208, 27,169, 13,251,131, 1,179,108,164, 18,233, 82,169, 44,203,146,238,
+213, 36, 89,198, 24,137,202,112,211, 25,216, 56,147,105,103,185,162,186,132,177, 98, 93,212, 65, 60, 65,101,231, 77,112,230,252,
+ 18,204,193, 55, 43, 95, 56, 8, 26,165,140, 49, 78, 41,181,109, 74, 41, 99, 22, 59, 61,112,227,185, 67,167,172,234, 98,251,191,
+ 74, 65, 56, 30,111, 9,171, 60,172,195,114, 62,109,150, 75,129,186,120,164,185, 7, 2, 62, 49, 50, 82, 40,150, 21, 25, 75, 50,
+209,116, 5, 0,228,241,168,254, 72,131, 39, 24,139,181,116, 55, 52,215, 75,200, 46, 23,203,166, 97, 83,202, 41,165,156, 9, 89,
+150, 84, 77,149, 21, 9, 65,128, 32, 32, 50, 9,134, 2,117, 13,245,254,112, 68,211, 53, 34, 75,206,176,150, 56, 35,100,140, 49,
+118,121,129, 16,192, 42,212, 2,248, 50, 0,196, 29,216, 94, 44,207, 11, 43,179, 85,103,220, 11, 17,114, 23, 58, 16, 70, 24, 19,
+130, 17,198,152, 16, 76, 48,198, 4, 53, 68,195,183,109, 91,187,107, 67, 15, 65,104,116,102,241, 95,170,160, 64, 32, 16, 12, 6,
+ 9, 0, 66,241,248, 26, 90,219,151, 22,147,193,134, 78, 89,247,141, 14,156,206,101,243, 62, 77, 72, 80,246,132,106,219,122,123,
+252, 53, 13,115, 99, 87,139,153,249,114, 62,169,232,118, 54, 49, 49, 61, 58,185, 56,151, 96,140,203, 50,225,156, 35,140, 17, 65,
+ 0, 66, 69, 85,188, 62,175,238,243, 99, 66,124, 88, 34,178, 6, 33, 22,130,113, 78,145,109, 49, 98, 49,219,230,140, 50, 78, 43,
+163, 29,151, 86, 80,161,111, 3, 14,185, 75, 25, 89,193,127,173,176, 17, 42, 52, 22,192, 57, 68,238,192, 76, 8,136, 57,230,136,
+ 49,206, 25, 34, 18,102,148, 51,137, 81, 74, 36,155, 82,153, 73, 10,217,191,119,243,157, 59, 55,140, 76,205, 63,127,228,204, 66,
+ 42,251, 47, 14,210,170, 66, 4,132,118, 57,251,206,107, 47,123,189,218,182,190,237,185,164,153, 47,218, 18, 18,220,204, 21, 51,
+243,186, 47, 72, 25, 40,151, 76,193,147,182, 61,159, 76,100, 50,233,188,101, 81, 69,145, 92, 17, 33, 68, 16, 90,134,149, 88, 76,
+ 89,166,237, 11,228,188, 62, 93,213, 53, 89,213, 49, 81, 28,222,133,227, 47, 8, 33, 33, 16, 6, 68, 64,103, 29,196,109,157,225,
+138,161, 87,117,171, 8, 32,232, 78, 50, 43,187, 9,208, 57, 58, 6, 65, 36, 0,132, 72, 64, 1,185, 64, 16,114,132, 16,228, 28,
+ 11,206, 57,198,156,115, 76, 24,103, 18,161,140, 73, 22,145,101,102, 89,118, 79, 71,227,103,155,163,166, 97,125,247,245, 99,215,
+ 38,231,126, 90,158, 96, 60,222,210, 28, 13,104,220, 72, 37, 50, 16,112,193,121,177,144,109, 95,189,182,103,253,166, 64, 64,243,
+120, 84,111,160, 86, 64, 60, 63, 49,204,168,109,154,118, 46, 91, 52, 74, 38,231, 2, 99, 36,201,146,170,200,170,166,104,186,170,
+233,138,162,202,178, 44, 33,140, 28, 76,153,113,198,109,155, 83,147,217, 22,163,150,224,182,131,114, 3,103, 33,164,202, 5, 1,
+206,160,125,153,234,180, 76, 26,169,146, 34,224,251,251,236,149,108, 18,119, 67, 9, 57, 28, 41,136,156, 37, 42, 12, 9,193,132,
+ 32, 66, 8, 33,152, 72, 68, 34,142, 19,162,245,157,241,189, 27,123,107,252,190,193,241,153,159,194,197, 32,200,166,178,105,159,
+ 4, 49,138,212, 6, 66,145,154,166,142,222, 96,172, 93,112, 30,172,151,100,213, 35, 24,159, 25, 62, 71,205, 18,150, 8, 51, 41,
+193, 88,213,101, 73, 38,156,113,103,105,216,137, 15, 8, 33, 76,156, 16, 64, 48, 70, 66, 0, 70,185, 13,169, 16, 2, 99,230,240,
+150, 16,130,206, 64,169, 66,157,113, 60,200,177,194,229, 15, 94,229, 4,184,200,125, 5, 58, 91, 65,250, 89,113,171,203, 16, 66,
+128, 11, 0, 4,198, 64, 8, 33,144, 64, 2, 10, 1,132, 32, 66,114,143, 12,161,148, 83,219,214, 44,219, 40,155,229,146,185,113,
+ 85,219,218,142,166,254,225,169,231,223, 57,203, 42,182,252,147, 92, 76, 0,205,163, 54,183, 55,214, 52,117, 25,165,178,166, 98,
+ 79, 40,134, 37,217, 54, 74,212, 42, 67,136,152,101,248,130, 53,156, 25,150,105, 74,196,182,101, 66,169,236, 14, 59,170, 0,123,
+133, 20, 2, 43, 81,211,137,192, 96, 25, 79,230, 8, 1,206,221,109, 52, 80, 33, 91, 57, 62, 35, 92, 75,168, 80,232,224, 50, 67,
+107,153, 19, 85,209,148, 27,209,157, 31, 34, 8,185, 27,168, 28, 67,171, 42,247,125,248, 95, 69, 12,133, 81,106,233,106, 89, 55,
+139,249, 82, 54, 91, 92,213,214,208, 19,191,127,120,106,246, 71, 71,207,254,196, 45, 73, 28,143,199, 55,109,232, 13,250,188,201,
+233,177,228,194,108,122,105, 17, 67,203,227, 15, 99, 76,100, 89,171, 76, 14,109, 8, 5, 66,128, 56,107,152,132, 96,130, 36, 9,
+ 19,137, 72, 50,145, 36, 34,201,146, 44, 73, 82,133,232, 36, 17,140, 37,151,240,230,166,240,138, 31, 84, 63, 54,114,191, 4, 2,
+190, 39, 71, 57,204,132,101, 23,116,121, 63, 21,206,152, 88, 86,220,123,140, 11,128, 42,112,189, 98, 3,176, 26,216,161,243,228,
+176,147, 63, 9, 34, 18,145,101, 73, 86, 36, 34, 17,211, 48, 85, 76,246,110,232,137,199, 34, 3,163,211, 63,158,197, 64,217,176,
+187,214,110, 65,152,207, 12, 15, 46, 76, 79,143, 94,189, 70,109,218,178,106, 43,145, 53, 12,161, 96,148, 40,186, 34, 24, 70,196,
+ 38,101, 98,155,212,166,140, 73,206, 96,179, 50,182, 18,203,143,217,181, 18, 4,145,195,236,172,236, 48, 86, 89, 35,160,106, 48,
+239,245,155, 31,247, 44,238,108, 51, 58,123,169, 64,188, 79,119,142, 65, 85, 13,207, 37,192, 84,102,209,238,186,158,179,133, 8,
+ 17,130, 16, 35, 4, 32,132,144, 16,162,168,138, 28, 9, 9, 46, 16, 38, 68, 82,230,167,103,109,202,214,216,180,111,231,122,226,
+209,230, 18,153,129,129,225, 35, 23,110, 0, 0,112,188,165, 37,164,136,236,212,141,209,193, 65, 8,121,123,111,215,234,173,123,
+107, 26,218, 5,103, 8, 98,231,163,137,202,230, 29, 88,222,170,117,169,104,216, 41,109,156,135,227, 80,228,136,243, 27, 57,229,
+137,115,146,133,195,194, 90,177,234,249,158,133,207,229,218,176, 66, 11,117,171, 34, 8,160,179,170,234, 18,235, 96,245,174,101,
+146,142, 88,233, 65,206, 25, 10,156,218,148,218,212, 61, 98,194,162,150, 69, 1, 0, 62,159,215, 23, 12, 34, 4, 41,165,129, 80,
+ 40, 80, 19,131, 24, 22,115, 5, 89, 85, 33,132,103, 47,220, 88,154, 93,168,111,109, 89,191,190, 39, 26,246,251,100,121,253,134,
+ 85, 55, 38, 22, 9, 16,162,185,163,115,215,182, 46, 74, 45,193,153, 81,202,205,142, 92,244,134,106, 53, 95, 4,170,144,115,202,
+169,201, 25, 5, 64, 32, 68, 48,150, 43, 53, 48,226,140, 49,196,222, 99,207, 43,246, 71,151, 67, 0, 66,208,177, 11, 33,170,133,
+178, 75,166,113,249,141, 16,112, 46, 32, 4, 85, 6, 45, 0,220, 73,234,206,193, 32, 80, 56,244,159, 10,139,205,173, 1, 92,157,
+ 33, 8, 4,196, 43,108,208,169, 12,108,155,218, 22,133, 8, 50,198, 53, 93,109,106,111, 39,178,186, 48, 57, 86, 27,171,203,166,
+ 11,153, 84,170, 88,200,215, 53,180, 54,237,218,134, 37, 57,151,152, 61,123,238,202,181,241,212,194,169,193,241,161,235, 23,175,
+ 77, 82, 33, 2,129, 0,132,128, 0, 8,231, 38,198,250, 65,158,115, 65, 36,162,234,138,199,171, 51,106, 49,219, 20,254, 8, 34,
+178,203, 75,113,114, 51,132, 8, 97, 65,132, 96,142, 19, 97,103, 64,253,158, 21,189, 21,249,185, 82,222, 33, 0, 0, 70,206, 71,
+ 20, 16,186, 36, 98,215,167, 92,150,146, 67, 10,224,192,173,170,129,179,167, 42, 56, 88,201,106, 91,102, 45, 85,184,126, 78, 85,
+ 33, 4,196, 2, 11,137, 56,252, 76,136, 16,231,162,144,203, 39,151,178,195, 87,111,152,101, 35,181,148,226, 76,108,218,189, 35,
+ 88, 27, 31,190, 49,123,234,208, 41, 14,229,181,221, 83,243,137,151, 47, 14,222, 88, 74, 21, 91, 98,225,250,250, 90,179, 96,154,
+ 38,191,189,111,221,246,190,173,199, 47,207, 78,188,124,152, 0, 0, 24,227, 8, 99, 73, 70,138, 34,235, 94, 77,247,234,170,238,
+ 33,146,194, 57, 3,212,170, 50,208,220,221, 90, 8, 33,196, 0, 9, 0, 32,130, 92,112, 6, 33,170,206,244,151,205, 99, 69, 79,
+ 85, 77, 70,206, 0,219,157, 29, 87,180,195,223,203, 11, 88,166,216, 85, 41,135,239,173,128,156, 20,230,110,129, 59, 92, 78, 1,
+ 1,134, 24, 99, 73, 86, 37,205,167,232,126, 73,241, 18, 89, 65, 8, 3, 1,247, 61,140, 32, 4,156,217, 83,195, 3,231,142,157,
+250,198,215,190,155, 43,149, 17,130, 33,175,246,210,155, 19, 5,195,238,142,199,238,191,117, 27, 68,112,116, 60,193,136,229,175,
+173, 93,187,101,189,226,139, 80, 58,225,166,121, 89,145,125,126,143, 44, 75,138, 42,171,154, 34,171,170, 36,169, 85,234, 0, 16,
+ 78,127,233,228, 82,225,242,171, 32,130, 8,184, 76, 75,167,171, 4, 2, 32, 0, 57, 23, 8, 9, 33,208,123,204, 72, 0, 71, 19,
+112,133, 30,151,123,210, 74,150,174, 18, 76, 92, 10,137,224, 14,227, 12,172, 72,115,208, 89,155, 23,213, 83,204, 28, 90, 34,224,
+206,107, 51, 40, 56,183, 76,139,154,165,180, 97,149,139,197, 66,190,152, 47, 24,101,211, 52,172, 76, 58,215, 63, 48,220,179,161,
+247,209, 95,250,160, 36,107, 70, 49,147, 94,156, 29, 25,186, 54, 61,151, 25,188, 50, 54,151, 44,180, 54,213, 48, 74,189,154,116,
+173,255, 42, 4, 67,227,163, 11, 0, 66, 2,128, 8,132,252, 13,205, 49, 0, 32,198, 24, 75, 18, 34, 10, 38, 50,194,196,101, 32,
+187,203,225,188, 66,155, 20, 0, 32, 8,152, 0, 14, 17,207, 97,186, 67, 55,157, 32, 12, 93,190,251, 74, 59,130, 80, 8, 14,151,
+ 79,109, 88,193, 29,118, 92, 76, 84, 99,145,251,110,160,186, 24, 95, 77, 67, 8, 97, 4, 17, 70,208,225,105, 19, 39, 71, 50, 70,
+ 45,163, 76, 41,197,146,230, 11, 55, 41,158, 32,163,214,220,216,224,249,119, 47,100, 51,249, 96,200, 31,174, 9,104,186,106, 25,
+214,187,103,134,110,204, 36, 58,215,173,154, 26, 58,139, 8, 25,187, 49,181, 52,159,156,156,203,166, 50,185,157, 27, 59, 90,219,
+234, 71,198, 22,219, 91,163, 93,221,141,138,170, 14, 15, 77,200, 30, 63, 16, 75, 4, 0,160,168, 30,111,176,206,165, 30, 66,135,
+ 87, 10,161, 19, 27, 43,188, 15,224, 54, 83, 43,216, 59, 16, 0,238,230,145, 21, 84, 88, 71, 95,192, 9, 37, 21, 62,152,168, 82,
+242, 93, 75,170,112, 48, 87,148, 62,130,243,101,250, 31, 20, 2, 56, 27, 61, 8, 98, 66, 84,221,171,249,106,100, 45, 0, 17,178,
+202,249, 66,122, 33,157, 88, 42, 21, 75,178, 44,115,206,199,134, 39,151, 22,210,245, 13,145,104,195, 12, 33,100,110,102,241,204,
+217,107,217,146,249,209, 95,186,163,125, 85, 47,181,204,201,209,177,147, 87, 70,211, 20,202,138, 76, 0,247, 6,195,146,162,237,
+104,238, 42,151,202, 23,207, 95,153, 27, 27,193, 4, 45, 45,100, 4,181,134,174, 78,140, 12, 79, 47,166,243, 68, 34, 80,211, 33,
+ 4, 4, 0,128, 48, 33,178,234,146, 15,161, 27,252, 4,172, 36, 17, 46, 42,140,211,138, 51,188,143,228,233,208, 95,161, 0, 43,
+138, 97, 0,185,203,151, 94,225, 80, 78,197,135, 28, 70,124,165, 65, 21,208,173,251, 16,114,206, 86, 88,222,188, 64, 24, 19, 73,
+210, 60, 33, 61, 88,167,251, 34, 88, 82,132, 16, 16, 17,129, 20,131,233,103,142,191, 12, 1,199, 4, 21,114, 37,143, 79,175,137,
+134,163,141,245, 78, 21,116,247,189, 17,206, 97, 48, 82,147, 73, 38, 78, 31, 59,119,242,236,144, 33,233,160, 84,220,189,182,181,
+181, 49, 92,206,103,189,193,186, 64, 36, 30,196,164,182,177,147, 51, 10, 0,180,202,185,209,161,203, 4, 90,249, 92, 49,145, 40,
+141, 93, 31, 31,158, 77,185,221,188, 0, 46,137,126,121,103,188, 74, 61,118, 1,153, 21,167, 48, 56, 22,241,190,232, 9,151, 99,
+196,114,253,230,240,132,223,207,154,117, 91, 13, 88,161,173,175,248, 91, 56, 37,129,163,114,228, 36, 36, 34, 19, 89, 33, 68,230,
+212,178, 74,217, 82,110, 49,155,152, 95,154, 95,154, 24,157,201,102,178,121,131,249, 52, 57, 18,241,181,117, 53,119,175, 91,167,
+249, 35,170, 30,108,219,168, 49,219,162, 86,113,232,226,185,147, 71,223,189,249,182,155,238,251,240, 99,239,188,117,144,217,118,
+ 56, 32,203,138,196,133, 72,205, 77,204, 79, 12,155,101,131, 82,139, 81,190,184,144,130,170,190,251,230, 61, 8, 17, 33,120, 15,
+224,123,238,184,245,165, 55,142,191,240,198, 59,164,242,161,160, 88,177,252, 1,132,224,192,165,146,187,170, 1,130,243,101,143,
+ 19,203,169, 87,192, 21,150, 36, 86,168, 9,252, 24,167,120, 25,246, 17, 66,172, 0,201, 42,218,118,214, 64, 0, 0,208,105,110,
+157,246,156, 81,211, 44,102,203,116, 49,151,154, 79, 37,211,153, 84,206, 40,153,225, 72,112,243,174,141,245,173,189,229, 98,110,
+224,220, 57,203,178,100,205,231, 9,198,108,163,100,102, 19, 23,207,156, 30,190, 60,176,247,246,190, 15,125,252,177, 35, 7, 15,
+255,249,151,190, 29,141, 53,116,212,168,118,125,141,207,239, 97, 76,132,235,162,129, 72,131, 55, 24, 86, 53,239,240,224,149,249,
+197,124, 44,168, 78, 95,235,183, 44,219, 1,115, 39, 39,231,207, 94,153,130, 16,146,202,158, 10,171,242,109,151, 17, 61,231,223,
+184,128, 64, 8, 32,160, 67,197,173, 44,141,172,168, 15,129,128,220,221,242, 1,110,227,202, 57,175,106,105, 69, 25,185,146,255,
+ 12,222, 87,100, 58, 5, 19,132, 78,245,175,203,154, 95, 82, 60, 92,112,179,148,205,103,230,153,109,151,138, 69,106,217,178, 76,
+188, 62,221,235,213, 5,179, 38,175, 93, 72,167,114,115, 83,115,227, 35,179,147,163, 51, 91,118,111, 70, 68,155,158, 90,122,243,
+205, 35,235,123,154,158,249,238, 11,215,167,151, 8, 70,171, 91, 98,155, 54,118,204, 47,149,202, 37,179,163,183,179,190,165, 45,
+ 57, 63,243,206,129,131, 71, 78, 13,104, 94,207,103, 63,243,171,119,127,240, 49,128, 48, 0,162,144, 89, 58,243,246,193,183,223,
+ 62,103, 81, 90, 2,114,197,197, 92, 70,144,203, 10,130,162, 18, 45, 93,255,168, 44,219, 3, 1, 43, 11,255,213,228,235, 80,115,
+ 87,172, 31,185,229, 1, 4,192,101,241, 86,188,178, 74, 86,175,114,181, 4,120, 79,233, 4,128,147, 21, 0, 18, 2, 97, 73,214,
+252,154, 55, 68,100,205,178,138,195,231,142,156,123,247,146,172, 72,107, 55,246,180, 53,183,170,158,160,164,120,176,172, 64, 68,
+102, 71, 7,223,120,243,204,200,212, 2, 69,112,233,165, 35, 83,139,233,156, 65,247,223,188, 57,232,149, 85, 85,246,168,114, 83,
+ 75,204, 40,155, 61,155,119,220,217,189, 22, 33,124,241,216,155,135, 94, 62, 48, 56, 56, 60,181,148,107,169,175,185,243,206, 93,
+129, 80,141,131,196,216,102,105,232,252,201,179,103,174, 74, 8, 88, 0, 54, 70,124,153,169, 20,236,235,235,123,120,255, 77,119,
+223,182,173,162, 35, 0,156,170,103,153,185, 84,125,236, 0, 0,215,203,170, 21,176,155,155,150, 17,136,234,141,110,198,118,168,
+198, 85,146,234,202,215, 91,134, 19, 43,125, 9, 66, 16, 97, 44,201,170, 30,136,168,158, 16,103,150, 81,204,204, 79, 78, 96,140,
+162, 45, 61, 39, 14, 29,181,205,210,237, 15,220, 71,169,133, 32, 34,178,142,137, 44, 32,148, 36, 69,112,251,252,201,227,207, 60,
+119, 96, 98,102,169, 61, 22,238,219,182, 10, 97, 84, 42, 25,153,116, 30, 2,184,115,207, 70, 69, 83,138,249,162, 81, 54, 26,219,
+218, 67,209,214,254, 11, 23,203,101,171,187,183,221,227,243, 25, 37,195, 52,202,140,163,142, 53, 27, 48,198, 16, 2,179,156,191,
+118,225,212,203, 7,142,157, 25,154, 33,149,144,204, 42, 6, 84, 57,223,195,161,223, 47,135, 26, 0, 86, 84,182,213, 19, 72,220,
+164,199,171, 78, 7,224,242,238, 71,245,128,146, 42,173,142, 87, 48,151,106,247, 15,157, 22, 23, 34, 68, 48, 33,138, 46,235,126,
+ 89,245, 17, 89, 21,156,165,230, 71, 7,206, 93, 30,190, 54, 21, 8,249,205, 99, 3,103,251,175,121,189,158,237,123,247, 4,107,
+106, 1, 4,130,179, 98,118,193, 44,166, 1, 0,136,200, 11, 51, 51,109,109,109,191,243,217,223,244,120,117,203, 52, 11,217, 12,
+ 70, 48,157, 88,154, 26, 25, 81, 52,197, 1, 93,146,137,220, 27, 7,127, 56, 52,190,208, 84, 27,136,215,133,206,189,115, 76, 85,
+101,191,223, 99,153,182, 81, 54, 58,187,143,199, 26, 34,217,188, 73,100, 93,208, 98, 50,153,131, 21, 23,227,206,126,205,242, 25,
+ 17, 43, 41,193, 0, 84, 15,235,169,162,165, 43,208, 13,119,230,224, 84,189,238,110, 91,149,255,238,208,135,171,223,138,149,251,
+ 76, 16, 19,172,168,154,234, 9,200, 90,128,200,170,115, 6, 15, 81, 84,140, 37, 33,120, 62,187, 48, 55, 53,149, 88,204, 48,139,
+218,150, 97, 26,180, 39, 94,183,125,251, 26,110,165,146, 51,233, 84, 34,157, 74,102, 77,139,150,138,102, 34,153,185, 52, 52, 22,
+168,141,222,178,181,109,234,234,217,116, 58, 63, 62, 54,215,209,217,116,236,228,149,128,174,230, 45, 17, 10,122, 35,177, 26,211,
+162,186,207,251,216, 47,255, 98, 93, 67,188,152, 79,165, 23,166, 91, 87,109, 6,130,230, 83, 75,131, 23, 47,158,124,231,226,225,
+ 35,151,230,178, 5, 10,128, 46, 17,141,224,174, 13,171, 71, 23,243,149,114,153, 83, 7,215, 89, 94, 98, 4,149,211, 67, 43,219,
+108,213,216,186,188,220, 34,192,138,188, 86,161,167,186,170, 97, 21,170,245,123,227,143,179, 80, 1, 17, 66, 80, 81, 84, 79,160,
+ 86, 15, 68,101,221,143,136,148, 93,156,188,113,249,180,109,217,154,174, 10,206,115,217, 66,255,133,235,179,115,169,173,219,123,
+111,127,248, 17,198,196,245,129, 75,205,173,241,217,241,145,139,231,134,146,169, 92, 36, 18,174,143,133,218,187, 26,118,223,178,
+243,163,145,198,145,171,151,251,207,245,239,184,237, 94, 77,215, 7,207,158,248,238,179, 7, 91,234, 66,249, 92,222,171,105, 53,
+177,218,250,142, 94, 34,169,154, 55,108,151,210,135, 94,122,241,212,169,129,173,155,123,198,135, 71,231,166,151,250,135,167, 82,
+133,178, 44,201,183,236, 90,243,145,117, 29, 75, 11,169,215, 14, 95,124, 96,255,182,193,201,106, 29, 36, 56,163,180, 26, 57,151,
+145,153,229, 52,237,122, 30,172,134,152,170,129,129,170,102,196,242, 90, 73,133,178,187,226, 39, 21, 96,182,114, 58, 27,198, 24,
+ 17, 73, 8, 81,204,204, 23,210, 51,138, 22,152, 25,189,254,220,211, 7, 77,147,182,198,163,138, 42,101, 50,133,197,100,206,163,
+202,197, 92,233,251,255,240,205,165, 84, 14, 66, 20,171, 13, 72, 24,199,162,193, 59,238,221, 35, 17, 98, 91, 22,179, 45,219,200,
+ 21, 82,144, 89,102, 54,149, 57,241,250, 11, 87, 6,199, 47,142,204, 54, 68,130,155, 55,118,250, 2,222, 82,177, 60, 51, 57,227,
+ 11,215, 5,194,181,253,199,223, 60,252,214,137,177,137,121,136,208, 43,111,158,193, 4, 39,139,229,160, 87,223,185,190, 99,251,
+142, 53,169,165,204,235,111,156,218,178,169,187,189,185,246, 31,190,119,208,226, 16, 42, 26,236,235,235,187,239,214, 77,119,238,
+ 89, 43,248,143, 23, 45,142,127,173,192,179,150,157,208, 93, 91,123, 15,202,185,140,230, 45,195,122, 46,216, 86,129,217, 48,193,
+ 4, 19, 34, 75,152,200, 68, 82, 16, 33,102, 33,187, 56,191,148, 76,230,242,185,130, 81, 50,174, 93,155,106,111,175,111,109,171,
+183, 45, 26,137, 69, 16,130,139,243, 73, 70, 41, 70,200, 27,208, 17, 66,178,162,122,189,218,220,204, 82,177,104,122,189,106, 56,
+ 18,240, 7,131, 88, 82,210,137,196,169,227, 23, 46, 79,166,103,166,102, 30,188,255,182, 71, 31,123,108,116,240,226,141,254,243,
+171,215,117,167,147,153,161,254, 17, 76,112, 36, 26,178,109, 22, 8,121,235, 98,181, 99,163,179,175,189,126, 50, 94, 23,144, 21,
+ 41,157, 45,230, 75, 70,216,167,115, 89,159, 77,228,226, 33,213,163, 75,211, 89,115,120,161,226, 98,140, 82,241,147, 32,235,149,
+ 70,244, 62, 82,174, 88, 65,202,119,247,186,150, 79,147,226,206,225,197,213, 13, 79, 66,136,164, 72,178,162,201,154, 79, 82,117,
+ 76,148,234, 49,152,146,226,181, 44,186, 52,159, 44, 23,203,201,116, 49, 91, 54, 60,126,127,172,181,125,116,240,106, 48,228,191,
+ 54, 56,146,203,228,227,173, 13, 30,159,238,245,123, 60,190, 26,162,232,133, 76,162,165, 83, 7, 2,164,150,150, 44,211,202,166,
+211, 68,146, 49,198, 91,182,173, 46, 89, 3, 59,123, 99, 33,141,191,249,253,111, 70,235, 35, 53,145,240,161, 55, 78, 54, 52,214,
+116,244, 52,251, 3, 94, 89, 85,166, 39,230,179,201,156, 44, 75, 1,159, 18, 13,251,188,126, 79,109, 93,200,163,231,198,167, 22,
+134, 22,178, 29, 97, 22,247,147,128, 79, 21, 2,228,243,165,101, 23,227,148,185,112, 15,120, 63, 4,186,114,239,123,197, 82,104,
+245,183,219,115,187,220,234,234,238,166,147,209, 16, 68, 16,202,138,164,234, 30,213, 19, 80,244,128,164,250, 36, 69, 71, 88,162,
+212, 50, 75, 57,106,149, 44,163, 8, 17,232, 94,219,213, 88, 40,228, 50,249,135, 30,189, 75,245,120, 33,132,188,171,125,224,226,
+208,208,149,177,206,158,120, 40, 18,212,116, 29, 97, 66,153,109,101, 23, 85,221,231, 11, 55,153,229,130,191,182,137, 16,217,182,
+202,185,228, 98, 54,185, 52, 53, 62, 51,187,144,177,132, 84, 87,139, 53, 77, 41, 22, 74,243,179,137,107,195, 83, 75, 75,153,117,
+ 27, 58, 20,221, 39,105,210,212, 92,118,113,114, 26,223,152,190, 49,155,150, 4, 51, 24, 68, 0, 88, 54, 37, 24, 5, 49,204,230,
+138, 18, 33,249, 66,185, 80,182,100,143, 23, 0, 70, 0,128,156, 11, 46, 24,103, 64, 0,238,194,155,213,195,188,196,123,177, 66,
+ 33, 64, 21,148, 88,241,139,115, 87,185, 46,130, 47,220,221,121,140,144,170,169,186,207,175,249,194,146,234,151, 85, 47,150, 85,
+ 70,173,114, 49,131, 48, 41,229, 18, 75, 51, 99, 55,174, 77, 88,166, 93, 23, 13,203,138,212,177,102,157,191,182, 25, 33,137, 83,
+ 43,155,201, 12, 95,159, 18, 24, 5,195,254, 76, 42, 87,215,210, 43, 41,158, 66,122, 14, 19, 85, 8,118,227,210,177,153,153,228,
+200,216,226,249,225, 9, 1,184,166,233,156,211, 98,209,224,134,105,228,115, 13, 65, 18,107,136, 40,170,210,216, 28, 61, 63, 48,
+150,203, 22,198,134,167,114,233,252,212, 92,114,120,114, 65, 87,101, 93, 83, 31,189,123,251,217,179, 67,165, 98,185, 92,146,234,
+155,107, 77,195, 94, 72,231, 9, 33, 77, 13, 53, 92, 8,184,148, 73,219,116, 69, 37,205, 28,208,203, 1, 50,248, 74,244,116,197,
+185, 80,203,155,197,213,161,121, 53,181, 85,230,200,238,113, 8, 24, 99, 69,149,189,193, 26,127,164, 89,245,134,145, 36, 67,128,
+128,224,166, 81, 48,242, 73, 7,111,242, 71, 26, 49,193,229,178,253,214,203, 71,109,203,234,187,125, 55,145,228,203, 39,142,188,
+116,224,100, 50,155,175, 11,120,154,235, 2, 16,226,177, 27,211,249,124,209,162,112,235,205,119, 80,202, 78, 31, 62,122,117,112,
+162,182, 46,104, 51,208, 63, 60,217, 89, 27,148,100,204,152,104,109,105, 2, 0, 36, 19,185,198,230,218,150,182, 70,143, 79, 79,
+ 45,165, 23,230,147,132, 96, 44,145,166,120, 52, 24,242,207,165,138, 17,159,103, 77,111,115,123,103, 83, 48, 82,187,239,174,186,
+112, 36, 20,170,107,162,182,157, 90,152,185, 54,120,245,226,185,107,165,146,225,243,123, 66, 65,111, 38, 89,117, 49,103,147,144,
+175, 4,222,197,123,202,195, 21, 45,234,123, 10,164, 21,119, 59,128, 5, 70, 72, 86,100,143, 63,224,175,105,212, 3,209,124, 62,
+ 87, 46,151, 11,153, 33,136,176, 47,210,164,106,126, 65,237, 66,122,190,174,101,189, 0, 66,152,101, 44,105,241,142,174,214,206,
+177,193,193,177,235,195, 63,148, 32, 10, 4,189,183,108,235,204,231, 75,186,174,234, 94, 79, 42,149, 61,117,122, 48,160,201, 4,
+210,137,171,103, 18, 11,139, 23, 6,198,202,197,114, 71, 71, 3, 68,176, 51, 22,206,164, 11, 68,194, 29,157,141, 53,145,128,166,
+105, 91,118,109, 84,117,143, 81,202, 51, 74, 21, 85,174,141,134,205,115,215,188,138,196, 24, 27,186, 50, 86, 72,166,123, 59, 27,
+118,237,219,217,182,110, 55,145, 20, 7,244, 7, 64,216,102, 89, 86,180, 96,109,108,235,174, 93,133,108,242,226,153,129, 8,160,
+ 37, 41, 61, 51,178, 80,181,160, 21,123, 70,239,211,200,202, 51,198,150,145,173, 21,237,130, 0, 8, 65, 68,176, 36, 75, 30,175,
+199, 95,211,168, 7, 99,165, 92, 50,179, 48,170,251,107,202,229,114, 49,179,100,148,141,196,236,152,166,235, 68,146, 10,185, 34,
+128, 67,145,166, 78, 68,136, 55, 88, 87,132,136, 82,154, 40,150, 25, 23,205, 33,159,224,124,232,202, 88, 33, 95,138,212,133,115,
+185, 66,201,176,118,239, 88, 29,142,132,124,126, 93, 34,128, 96,108,218, 44,236,243,112,206,203, 69,203,182,236,142,174,198,205,
+ 59,214,181,173,218,168,249, 35, 16,203,182, 81, 88,156,188,186, 48,179, 56, 60, 52,145, 73,231,153, 0, 72,209, 59, 90,106, 18,
+ 75,217, 82,217,188,243,238, 93,237,171,122,253,181,173,182, 81,178, 77,131,200, 42, 38, 50, 68, 72, 82,180, 64,109, 99, 64,112,
+206, 41, 53,141, 72,125,211,149,179,103,146, 20,131, 27,174,130, 0,175, 30,136,247,222,124,245,254,195,215, 68,165,109, 93,113,
+200, 9,194, 80,150,101,221,171,123,252, 97,213, 87,131, 37,181,144,156, 74,207, 79, 81,198, 10,233, 57, 8,160,224, 76,146,112,
+ 46, 87,192,146,238, 9, 4, 7, 47,223, 72, 95,184, 17, 8, 92,144, 8,145, 36, 52,122, 99,242,252,229,145, 2,165, 62,175,183,
+189,179, 9, 1, 48, 57,185, 96, 88, 76, 81,229,206,104,211,236,244,210,204,228,252,210, 98,186, 80, 44, 3, 0, 71,167, 23,103,
+ 19,217,218,158,184,105,216,217,116,190,171,183,101,253,230,213,245,109,171, 20,111, 8, 66,100, 21,147,163, 3,231,207,188,123,
+158,217, 44,153,202,199, 26, 34,109,237,245,111,190,121,174,177,181,190,189,167,211, 52,205, 98, 62, 47,107, 65,106,228,179, 75,
+147,249, 76,182, 88, 52, 76,195, 46, 27,118, 54, 95, 44, 83, 0, 24,103,150,109, 24, 70, 33,155,193,222, 26,172, 84,232, 47,238,
+130,238,178,243,172,200,235,239,241, 36, 80,237,194, 93, 24, 17,253,223,157,156, 59,115,211, 64, 16,199,239,228, 59, 89,167,135,
+ 95,242,200, 82, 28,143,226,100,130, 33,192,164, 96, 24,168,252, 49,169,104,232,233,232,248, 16, 12, 5,140, 69,130,137,140, 35,
+219,138, 29,203, 47, 89,175,147,142, 2, 18,203, 25,104,104,119,103,103,171,221,226,255,219,255,114, 28,199, 17, 81,168,212, 53,
+ 69,109,242,164, 12, 33,151,166, 49, 46, 18,169, 82,245, 87, 75,150, 49,158, 16, 69, 81,139, 98,185,186, 93, 33,158,200,149,134,
+113,232, 44, 22, 23, 87, 99,207,113,151, 16, 0, 9,177,211, 35, 35,244, 3, 73, 38,136,131,253,159,238,133,123, 43, 21,184,115,
+153,152, 39,173, 34, 17, 6,125,103, 60,154,173,131, 56,133,192, 91,249, 47, 31,155,237,182, 65, 19, 42,151,196,102, 75,139,162,
+192,182, 62,205,103,203,175,214,224,115,207,222, 70,137, 86,150,206, 59,230,217,179,163, 31,223, 71,180,165,189,126,245,196,155,
+175,182,126, 32, 41,178,123, 61,126,247,230,237,112, 50, 47,201,132,102, 44, 8,147,138, 88, 60,110, 27,130, 40, 96,150,133, 73,
+146, 80,202, 32,139, 83, 54,248,102,101,188,244, 71,114,253,189,150,255,102, 66,186, 95,197,187,161,203, 51,239, 2, 7,138, 2,
+ 95, 81,235,114,245, 64, 40,105, 8, 97, 6, 0, 98, 34,226, 69,165,110, 2,198,194,205,156,102, 28,194, 56,165,201,204,177,181,
+214,105, 1,243, 5,204, 79, 39, 83,123, 56, 93,134, 49, 86,228, 5,194,235,205, 58,163, 20, 47, 54, 81,127, 68,163,152,240,232,
+164,213, 48,154,245,186,209, 44, 18,101,226,184,160,118, 80, 93, 77,116, 93,229,207,142,158,191,120,218,108,119,252,141,119,213,
+235, 9,130, 32, 43,114, 24, 70,151,150,109,125,177,245,178,168, 52,106, 25,132,163,217,210,243,195, 71, 29,243,208, 52,130,109,
+ 48,189,241, 62,188,255,104, 13,221,136,102, 34, 42,168, 37,233,118,177,142, 98,122,172,171,186, 94,227, 49,114,174,111, 46,157,
+105, 2,113,146, 50, 22,248, 18,199, 40,205, 24,140, 1,224, 96,183,219,221, 39, 49,255,227, 29, 2,251, 74,245, 63,124, 85,112,
+119,123, 0,246,142, 17,114,255, 99,239,227, 44,159,124,136,137,246,250,176, 60,199,125, 64,177,247, 52,206, 59, 78,157,163,154,
+ 44, 47, 5,239,254,198,220,213, 67, 8,127, 1,199,251, 38, 31,206, 72,110,197, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+ 0};
+
diff --git a/source/blender/editors/datafiles/snake_hook.png.c b/source/blender/editors/datafiles/snake_hook.png.c
new file mode 100644
index 00000000000..44d3efab779
--- /dev/null
+++ b/source/blender/editors/datafiles/snake_hook.png.c
@@ -0,0 +1,310 @@
+/* DataToC output of file <snake_hook_png> */
+
+int datatoc_snake_hook_png_size= 9710;
+char datatoc_snake_hook_png[]= {
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72,
+ 68, 82, 0, 0, 0, 96, 0, 0, 0, 96, 8, 2, 0, 0, 1, 26,253,208,249, 0, 0, 0, 4,103, 65, 77, 65, 0, 0,177,143, 11,
+252, 97, 5, 0, 0, 0, 6, 98, 75, 71, 68, 0, 0, 0, 0, 0, 0,249, 67,187,127, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 13,
+215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 0, 7,116, 73, 77, 69, 7,218, 7, 19, 0, 34, 13, 86,254,139, 21, 0, 0, 32,
+ 0, 73, 68, 65, 84,120,218,237,125,121,148, 94,215, 81,103, 85,221,251,222,183,244, 42,201,218,172,104,177,101, 91,138,109, 57,
+222, 29, 39, 70,100, 51, 38, 38, 9, 4,226, 16,114, 8, 57,129, 9, 14,204, 73, 96,128, 51,204,144, 48,115,102, 6,206, 0, 51,
+135,129, 48, 33, 76, 32, 48, 11,153, 0, 19,150,236,100,199, 24, 59,142, 29,219,177,108,217,178, 45,217, 86, 75,109,181,186,213,
+219,215,223,246,222,189, 85, 53,127,220,251,150,150, 37, 91, 94, 2, 6,242,157, 62,173,175,191,229,190,122,117,171,234,214,173,
+223,175,174,112,239,222,189,240,140,143, 51,249,144,217,190,125,251,225,195,135,239,248,208,127,222, 62,153, 92,177,115,203, 74,
+230,103,151, 86, 78, 61,210, 15, 93,123,113,248,243, 13,151,239,254,185, 55, 85, 99,223,124,253, 85, 0,128,123,247,238, 77, 86,
+230, 54,140,166, 31,191,245,190,211, 93,206, 2,192, 67,211,115,111,255,225,215, 94,117,254,142,109, 27,214,118,135,153,247,242,
+ 91,159,189,237,129,199,143,172,250,208, 45,127,244,199,204, 46,239,119,178,222, 82,127,241,232,226,226,236,251,110,188,118,113,
+229,101,143,207, 46,252,222, 95,223, 14, 0, 36, 34, 72, 6,145,140,109,152,164,217,104, 79, 78,140,142,109, 90, 59,177,121,237,
+248,121,155,214,189,239, 13,215, 1, 0, 1,128,170,170,138,170, 32,168, 34, 33, 25, 2, 48,198,180,154,141,241,118,235, 45,215,
+238, 33, 0, 80,206,197,101,226,134, 62, 31,138, 27,120, 55,244, 44, 44, 34, 34,134,112,188,221,180, 0,224,134, 61,206,135,110,
+216,245,195,142,235, 47,230,206,103,206,231,206, 59,207,158,197, 16, 90, 0,200,251,203, 62, 31,184, 97, 39,239, 45, 12, 6,253,
+126,150, 15,157, 27,230,110,232,156,115,222,179,224, 25,205,221,153, 60, 76,248,231,163,239,125,219, 5,155,207,122,205, 37,231,
+255,237,131,143,157,250,131, 31,251,249, 31, 93, 55, 49, 6, 0,198,152,183, 95,119,233,158, 29,103,135,215,223,254,250,215, 87,
+ 31,250,173,127,241, 3,136, 88,255, 90,163,217,172,255,137, 0,240,137, 95,124,215,241,165, 78,187,145,182,155,105,111,144,119,
+179,225,251, 62,242,151,171, 62,116,231, 71,127,119,237,217, 23, 12,123, 75,110,208, 25,118,102, 87,230, 15,159,232,244,102, 23,
+ 59,189, 44,127,255, 31,127, 46, 10,254,175,223,243, 51,160, 12,160,160, 34,194, 8,154,128,107, 88,171,160, 87,159,191,245,192,
+241,229,110,191, 79,100, 12,168,170,176,170, 2, 34,162, 65, 68, 34,108, 36, 73, 43, 77,222,114,213, 46, 0,176,236,114,246,153,
+248,220,187,129,228, 3,206,251,158,197,139, 48, 11, 0,164,214,188,241,138,221,214,103, 61,246,185, 31,246,252,176,227, 6,203,
+ 46,235,230,206,231,142,115,239, 29,139, 42, 52,210,196,186,254,178,247,153, 31,118,243,254,114,214, 95,236,103,249, 32,207, 7,
+121, 62,204, 93,238,188,243, 30,207,208,165,206,228, 97, 79,250,251, 91,127,242,241,193,252,225,249,153,199,190,120,223, 35, 31,
+252,212,223, 60,151,129,110,255,224,127,186,245,238,111,252,194,175,124,224,200,252, 98,187,221,110, 25,252,254,171, 94,122,214,
+248,104, 51, 77, 62,244,249,219, 79,247,253,175,125,228,127,188,250, 39,111,174, 6,106, 54, 26,119, 63,112,239, 45,251, 30,253,
+242, 3,135, 0, 0, 96,161,252,232, 69,231,108,251,129,171, 47,106, 55,146, 45,235, 38,207,217,180,110,114,164,221,233,103,119,
+ 28, 56,244,177, 91,191,229, 60,135, 81,170,129, 46, 63,111,107, 98,205,133,219, 54,121,230, 47,238, 59, 88,191,230,254,199,167,
+246, 63,126,198,183,246,190,239,187,238,252, 93, 87, 94,113,185,188, 85,245, 87,145, 68,216,103,189,188, 55,215,237,245, 58,253,
+ 97,167, 55,200,188, 71, 64, 64,232, 13,178, 95, 42, 76,108,213, 64, 34,242,240,167, 63, 75,100, 85,152,133, 85,156,120, 47, 62,
+119,105, 59,105,180, 27, 35,221,177,193,202,250, 97, 55,115,110,152,187,126,230, 44,209,111,188,243,141,131, 60, 95, 88,233,253,
+246,103,254,174,114,184,109,219,182,253,208,107,174, 7, 64, 5, 32, 4, 16, 81, 21, 80, 5, 21, 85, 5, 80, 80, 68, 80, 84, 54,
+ 68,134,200, 26, 74,173, 77,140, 73, 19,123,245,249,219, 46,220,178,225,241,217,197, 65,238, 44, 0,168,136, 40, 3,123, 17, 47,
+236,132,157,112, 46,236,132,189,176, 87,201,133,115, 17, 96, 81,209, 48,184, 34,162, 69, 76,173,105, 55,211,239,187,124,215,209,
+249,101, 11, 0,156, 15, 84,152,217, 43,123,102, 39, 62, 23,159,249,124,200,110,232,243,158,207,122,222, 59,231,189,243,222,133,
+ 88, 37,234, 89, 88, 85, 21, 8,177,217, 72, 38, 71, 91, 22, 0,242,193,138, 10, 11,123, 21,199, 46,103,159,139, 31,250,124,192,
+121,207,251,220, 57,159,123,206,189,207, 61,135,208,151,121,159,251, 16, 0, 61,179,168,130, 53,100, 1, 32,239, 45,170,178,120,
+ 47,156,137,207, 56, 31,178, 27, 56,142,129,210,121,239,152,227, 40,222,231,142,179, 48, 92,136,167,222, 59,239, 69,244,133,139,
+147, 47,200, 99,219,182,109,244, 66,141,181,202,251,175,184,240,162, 63,122,255, 47,204, 79,237, 59, 62, 63,255,147,191,251,103,
+157,254,240,204, 7,170,194,245,129,191,250,171, 71,238,250,204,161,153,185,185,165,110,230,125, 98, 8, 0,127,237, 47,190,122,
+134,183, 22,151,146,245, 19,163, 87,109,162,191,190,123,255, 39,191,126,223,129, 35, 51, 79,206, 47,207,175,244, 60,243,107,246,
+156,127,247, 99, 71, 69,245,116, 67,188,237,186, 75, 31,152,154,153,152,152,136,127,127,225, 63,188,231, 63,252,200, 13,231,173,
+159,172,127,232, 85,151, 94,252,150,151, 95,252, 19,175,189,234,253, 55,189,238,169, 67,220,242, 59,191,126,214,228,120, 41, 81,
+212,209, 66,183,191,220, 27, 76,140,143,193,220, 82,249,209,191,249,214, 3,136,120,195,203,118,118, 6,217,187,175,191,250,156,
+ 77,103,109, 89, 59,105,140,121,116,122,230,107,251, 31,251,238,247,254,226, 41,148,157,231, 62,177, 54,165,147,111, 65, 85,255,
+250, 91, 49, 60,217, 36,241,206,157,238, 30,169, 84,250,100,187,181,235, 37, 27,137, 78,107, 16, 79, 51, 74, 45,212,166,201,214,
+ 13,107,214,140,183, 47,223,185, 93, 17, 54, 77,142, 89, 67,131,220,229,158, 69, 65,152,231,251,131,127,251, 63, 63,253,204,211,
+127,199,127,255, 85,219, 26, 23, 22, 36, 2, 85,246,121,222, 95, 26,118,231, 59,131, 97,167, 55,236, 14,135, 97, 1, 85,213, 15,
+127,254,246,135,167,103, 79, 49,253,223,115,197,158, 79,126,240, 67,227,155,207,111,140, 76, 38,205, 17, 74,154,104, 19, 34,131,
+198, 24,155,166, 36,205,212, 52, 19,107,136, 28, 75,238,249,146,237,155,175,221,189,253,246,135,167, 68,164, 28,104, 98, 98,194,
+124,246,195,191,111,155,109, 0, 97, 97, 16, 65, 68,141, 86, 19, 82, 48, 32,101, 66, 48,198, 36,134, 12, 81,120,247,138,115,207,
+222,185,101,211,125,143, 29, 45, 7, 34,219,104, 17, 25, 0, 34, 66, 36,131,132, 72, 4,136, 72,134, 76, 66,182, 73,105, 43, 73,
+108, 35,177,173, 70,210,110,164,163,173,230,104,171, 49,222,110,157, 61,222,126,215,107,174,172,102,141, 76, 2, 68,136,168, 81,
+ 97,136,225, 7, 9,209, 32,145,161,240, 64, 66,180,134, 82,107, 26,137,109,166, 73, 35, 77, 38, 70,218,111,189,118, 79,109,250,
+ 69, 65, 5, 20, 68, 69,133, 85, 88, 65, 64, 21, 64, 0, 84, 20, 65, 85, 21, 84, 65, 1, 0, 1, 1, 49, 14, 74, 35,173,198,171,
+ 94,186, 3, 0, 44, 8,131,178, 8,131,176,134,129,148, 53,134,125, 81,102, 21, 39, 34, 34,162, 33,123,213, 98, 64, 68, 34, 74,
+173, 93, 51, 62, 50, 42,185,149,184,156,177,178, 19,239,148,125,248,173,226,196,231,194,185,178, 11,235, 7,179,138,196, 31,208,
+ 40,156, 53,212,176,118,253,152,181,226,115, 13,233, 46, 59,101, 47, 46, 99,118,226, 51,118, 25,251, 76,124,198,222,177, 8,139,
+176, 74,120, 34, 33,169, 86, 5,208,112,143,137, 1, 43,236,132, 89,197, 43,123,246, 78, 56, 23,151,177,203,196, 13,197, 13,216,
+ 13, 88,196,179,120, 22,102, 97, 81, 22,245, 34, 44, 26,135,140,153, 30, 88,206,135, 18, 37,202,197, 59,225,156,243,140,253,144,
+243,129,207,251,206,115,238,189,103,102, 22,207, 28,126,152,197, 11,123,225, 48, 20,168, 34,146,101,159, 9,179,132,183,124, 38,
+ 62,103, 55,100, 23, 71,113,204, 65, 28,199,236,226,111,118,204,204,197,109, 74,140,122,150,243,129,132,213,145, 29,187,140,253,
+144,221, 48,108, 20,124, 28,136,115, 31,214, 56,118, 94,226,235,190, 28, 75, 69, 5,148,224, 69,181,174,109,221,186,149,224,197,
+244, 64,196, 23,151, 64,167,200,214,203,199, 67,159,254,156,235,204, 45, 61,249,208,114,103,190, 55,204, 7, 89,158,123,246, 18,
+108, 82,102, 22, 59,255,229, 47,191,246,247, 36,208,167,126,227, 87,206,106,240,253,183,254,233,145, 19, 75, 51,139,157, 19,203,
+ 43, 75,221, 65, 63,203,152,213, 88,106, 37, 73,187,153,182,210,244,189, 55,190, 50, 77,236, 19,179,139,127,254,245,125,207, 71,
+130,157, 91,183, 93,189,251,156,143,127,233,150, 83, 11,244,225,159,254, 97,211, 61,114,207,193,185, 7,167,142,237,123, 98,250,
+200,236,194, 82,198,157,254,176, 88, 12,192, 90,179,231,156,237,107, 91, 73, 43,129, 86,154,182,211,228, 61, 55,188,188,221, 72,
+ 31,122,242,196,231,191,249,224,153,203,241,139, 63,254, 19,187,214,192,135, 62,245,229,187, 31, 61,124,232,200,212,105, 53,180,
+121,205,232,209, 19,139, 83,179, 11,143, 31,159,159,239,244, 14, 47,116, 79, 94,178, 61,223,251,104,220, 63,111,219,180,241,162,
+179,215,244,134, 89, 98,204,186,118,227, 61, 55,188,252,172,241,209,117, 99, 35,125,214,143,126,233, 27,211,115,243, 44,170,170,
+ 68,100,141,185,116,215,121,191,249,190,127,185, 56,115,232,171,119,221,245,205, 67,199,126,253, 15, 63,122, 6, 57,223, 5,231,
+118,251,217, 32,203, 89,181,145,216, 70, 98,158,254, 46,167,102,142, 79,205, 28, 15,207, 55,174, 25,223,177,126,205,104,106, 18,
+ 99,172,161, 61, 91,214, 94,182,245, 44, 64, 16,209,254, 96, 56, 16, 60, 50, 55,119,221,123,126,134,189,123, 22, 54,180,118,180,
+233, 85,140,161,118,154,172, 31, 31,117,206, 51,216,251, 15, 63,121, 38, 83,112,124,177,115,124,177,243, 2, 27,245,161,153,121,
+131, 52,214,106,160,142,183, 26,233,134,201,177,157,155,135,187,183,172,255,171,187,246, 51,203, 88,171, 49, 49,218,222,182,110,
+242,165,219, 55,141, 52, 26,205, 52,201, 29,175, 12,179,153,165,149,253, 79, 76, 47,174,244, 86, 6,153,103,126, 33, 5,218, 48,
+ 57,186,110,172,221, 72, 83, 17,246, 28, 87, 5, 34,122,247,235,191, 11, 17, 67,229, 68,133,153, 57,103,206,115, 55, 44,170, 67,
+ 55, 92,178, 19, 0,168,168,173,120, 85, 17,126,114, 97,229,207,239,120,224,224,244,241,231, 40,208, 47,189,227,173, 55, 93,127,
+125,115,116, 29, 26,171, 18,150, 79, 14,137, 68, 92,127,133,133, 61,251, 92,125,238,243, 1,187, 33,231,189,220,229,206,251,204,
+115,238,217,249,176,219, 98,102,102,150,245,227,237,155,175,191,154, 16,189,104,183, 63,252,127,119, 62,116,224,240,209,103, 22,
+ 72, 68,246,125,252, 99,182,209,182,105,139,140, 1, 68, 17, 86,246, 34, 68, 66, 42, 70,133, 17, 89,213, 42,123, 68,131,100, 4,
+ 9,136,200, 38, 38, 73,140,203, 82, 55,108,122,231,153,189,136,243,236, 61, 59,150,220,185,204,179,243,156, 51,131, 74,171,145,
+188,253, 21, 23, 15,175,188,160, 59,204,191,250,224, 19, 15, 60,126,244,233, 52,212, 26, 91,171,136, 0,168, 34,161,252, 7, 0,
+132,164, 4,130,136,136,138, 40,194, 33,127, 70, 80,178, 73, 72,175, 0, 0,144,144, 12, 82, 70, 62, 51,194,134,136,173, 73, 89,
+210,196, 52, 67,134,224, 57,143,155, 84,182,134, 26,105,242,134,203, 47,120,237, 69, 59, 58,253,236,255,252,237,189,222,251, 83,
+ 8, 68, 73,170, 10, 8, 32, 42,160,128,192,136, 70, 85,148,149, 0, 21, 81, 1,139, 92, 17, 17, 8,136,136, 12,168,130, 81, 80,
+ 85, 82, 99, 1, 1,192,103,209,146, 16, 67, 42, 72,200,132,104,136,172, 53,222,179,245,156, 59,111,136, 26,214, 54,147,228, 61,
+223,115,205, 98,183,127,203,195, 71,143, 30,159, 91,181,139, 65, 34, 4, 0, 84, 4, 4,208,176, 11,130, 80, 99, 8,213, 82, 8,
+197, 12, 5, 85,136,137, 51,134,197, 25,138,203, 67, 97,245,229, 70, 4, 1, 16,129, 16,137,208, 32, 26,162,196, 80,106, 77, 98,
+141, 49,100,173,105, 36,118,162,221,124,245,238,173,223,119,217,174,114,247,100,161, 40,210, 70, 41, 84, 64, 5, 84, 69, 24, 68,
+ 64, 89, 69, 64,130, 81,139,134,172, 57, 36,206, 42, 42, 12, 42,160,162, 26, 50, 83, 1,192, 80,142, 9, 63,113, 84,128,112, 31,
+ 65,212,160,179, 80,159,177,198, 52, 18, 59, 49,210,250,222, 75,207, 63,222,233,207,102,106, 1, 64, 57, 94, 0,130, 62, 68, 85,
+ 89, 85, 64, 68,132, 85, 5,152, 37,184,155,176,176, 7,241, 90, 20, 96,148, 93,116, 61,113, 18, 43, 78, 26,179,219, 66, 44,145,
+234,169,130,130, 42, 2, 16, 2, 33, 25, 67,137, 49,137, 53, 35,205,116,189, 72,107,188,105, 1, 64,216, 73, 44, 53, 5,129,164,
+216, 57, 72,244,127,101,101, 22,241,225, 55,176, 99,246, 18,165,113,194,153,114, 30, 50, 99, 81, 21, 9,201,247,201,185,188, 40,
+212,126, 52, 88, 45, 1, 16, 81, 98, 77,194,166,153, 38,185, 26, 11, 0,226,243,104, 42, 16,117,163,170,194, 28,182, 69,160, 34,
+226,133, 25,148, 37,200, 17,170, 92,222,171,228,226,115,102, 39,133, 4, 33,156,214,158,104,177, 57, 8,194, 5,161, 43,141, 41,
+ 0, 34, 0, 34, 17, 25, 34, 3,100, 1,128,125, 46, 34,193,108, 75,173, 4, 37,133,173, 86, 57, 83, 69, 26,159,139,120,241,161,
+230,198,197, 92,170,136,120,102,174, 11, 39,225, 59,202, 44,204,241,251, 44,234, 89, 89,148,181,216, 37,168, 34,104,112,141,160,
+161, 76, 68,138, 29, 28,171,106, 16, 66,153, 85, 89, 37,236, 84,124,216, 44, 85,229, 63,169,116, 16,231, 85, 68, 68, 61, 51, 23,
+179, 22, 74,220, 18,159, 48,179,122,150,248, 1,102,102, 17,133,194,224, 0, 17, 80,193, 2, 0,103, 3, 41, 76, 48,250, 87,161,
+ 30,101,175,226, 37,136, 34, 62,110, 3, 53,234, 35,236, 93, 10,245, 20,243, 18,182,110, 44,162,197,150,174, 80, 88,185,201, 11,
+ 50,213, 53, 26,189, 0,192, 34,226,231,239,185,183, 40,155,134,127, 69, 65,161, 48, 71, 80,145,224,255,113, 3,172, 82,110,134,
+163,111, 71,243, 43,158, 23, 55, 39,170,160,209,210, 11,247, 13,175, 23,198, 4, 44,200, 66, 34,150,213, 48, 90,135,230, 69, 86,
+111, 12,123,179, 23,143, 48,123,247,238,165,147,240,161,127,240,199,139,110,163,248, 29,129,158,243, 86, 58,177,246, 87,222,251,
+222, 55,190,226,154,126,231, 68,127,233,248,160,123,162,159,101, 11, 43,131, 15,125,254,182,123, 14, 78,125,251, 4, 50, 19, 19,
+ 19,203,203,203, 39,189,250,214, 27,110,248,196,127,253,205,141,105, 54, 55,181,111,118,102,106,126,105,126, 97,165,215,233, 13,
+ 29,243, 37,219, 55,239,189,112,231,225, 19,203, 11, 43,189, 23, 92,154,237,219,183,159, 66, 67, 63,125,211, 91,110,126,243, 27,
+143,238,255,242,236,194,194,194, 74,127,101, 48,236,103,249, 48,247, 44, 2, 0, 68,152, 24,243,182, 87, 94, 50,219,233,126,228,
+ 11,119,124,219,167, 44, 49,230,230, 55,125,239,204,163,119, 76,205, 46, 28, 91, 88,158, 89,234, 44,174,244, 58,253, 97,230, 60,
+ 2, 52, 18,219,106,164,237, 70,218, 76,147,145, 70,250, 51,111,184,238, 79,110,219,247, 60,247,135, 63,250,250,235,255,244, 75,
+ 95,115, 69,114,125,178, 64,183,252,214,127, 60, 49,117,223,212,236,194,161, 99,115,135,102,230,158,152,153,239,244, 7, 8,104,
+ 19,147, 24,155, 90,147,218,193,104,179, 57,210, 76,251,141,198, 72, 51,253,145,235, 94,246,224,244,137, 47,222,243,208,115, 16,
+101,247, 57,231,252,252,155, 95,251,179,191,247, 49, 87, 75,245, 87, 9, 52,210, 76,243,238,220,204,252,210,244,252,226,193, 99,
+179,247, 63,254,100,206,114,116,177, 91,255,194,248, 72,251,202,243,118,232,112,200, 34,142,125,219, 37,187,207, 94,183,107,211,
+117, 31,249,202,157, 89,150,159,169,229, 18,125,238,191,253,250, 39, 63,247, 23, 63,245,219,127,116,210,102,119,149, 81,191,242,
+194,157,151,159,187,249,248, 98,231,240,236,226, 35, 71,143, 15,157, 59,120,124,177, 94,183, 7,128,204,185,199,143,207,129,105,
+141,183,155,160,194,170,222,115, 98,233, 85, 23,157,123,193,150, 77, 7,166,103,159,126, 55,189,125,243,230,143,254,242,191,249,
+238,243,206,250,131, 79,126,246,207,110,191,239, 36,160,232,100,163,254,254,107,246,244,178,188,151,229,253, 97, 54,200,157, 52,
+218,117,152,185,254, 56, 56, 61,125,112,122,250,181,151,237, 25, 17, 39,162,142,101,144,187, 53,163,173, 15,220,244,186,241, 86,
+243,214, 71,167, 63,125,251, 61,161,192, 29,244,209,110, 54,126,246, 71,110,186,241,234,203,239,184,243,171,127,241,153, 79,124,
+126,223, 99,139,203,157,103, 54,234, 77, 19, 35, 89,238,114,231, 69,213, 26,234,245,158, 97, 10,190,114,239,253,173, 70,250,202,
+221,231, 52, 45,230,222,246, 51, 55,223,233,141,183, 90,187, 55,142, 95,251,163, 55,142,181, 27,173, 52, 37,162,220,243,137,229,
+149, 35,199, 14,254,234, 71,238,184,111,122,241,241,233,153, 51,245, 50,239,189,103, 81, 5, 67,212, 74,211,230,240,153, 49,193,
+ 65,150,127,249,190,135,173, 49,231,110, 90,187,245,172,181,232,179,185, 36, 53,179,100, 13, 25, 66, 85,200,189, 31,122, 93, 28,
+228, 79,204, 45,157, 88, 92,122,118,110,207,170, 10, 64,132,105, 98,198, 90,141,137,204,157,161,145,122,230, 71,166,231, 30,153,
+158, 43,203,187,173,102, 43,119, 57, 63,101,167,252,236,214, 50, 13,104,184, 53,173, 52,157, 24,105,181, 82,243, 28, 99,139,234,
+ 96,208,127, 14,210,156, 44,144,136, 26,196,166,181, 35,173,198,154,209,246,230, 53, 19,151,236,252,251, 78,223,158, 18,169,173,
+105, 55,211, 73,225,132,104,164,217,152, 24,105, 13, 29, 63, 50,245,100,187,217, 24,109, 54,206, 26, 31,189,104,219,198,141,147,
+ 99, 99, 35,109, 81,237, 13,242,229,254,224,192,209,227, 71,231, 22,186,131,108,101, 48,124,129, 5, 66,196,102,154, 36,198,164,
+214, 76,180,217, 51,111,223,176,246,146,115,182,136,104,171,145,142,181,155,137, 53, 6, 81, 84, 61, 75,238,125,168,177,189,234,
+194,115, 0,226,214,172, 55,204,239, 63, 58,247,191,190,252,117, 56, 61, 18,253, 44, 4, 26,109, 53, 38, 71, 90, 0, 88,236,153,
+128, 16,201,152, 0, 57, 66,224,104, 48,123,145,204,121, 68, 8, 4, 5,231,139,210, 17,226, 72, 51,185,122,231,217, 87,158,243,
+230,161,243,223,120,228,200, 39,110,187,247,185, 11,132,136, 27,214,174, 31, 93,187, 21,141, 41,118,186,177,206, 18, 42, 4, 34,
+ 94,189, 99, 63,244,249,160,145,245,114,103, 51,231,135,222,231,206, 15,115,159, 59,207,204,193, 45, 16, 33,181,230,187, 46,220,
+241,138, 93, 91, 31, 57, 54,255,191,191,122, 87,255,140, 87,149, 40, 80,146,216, 91, 63,248,107,163,235,182,216,198, 8, 2, 48,
+123,149,176,211,101, 21, 47, 42, 97,207,170,198,163,177, 68, 41,219,148,178,190, 53,131,148,109,110,125, 51,225,204, 57,199, 28,
+ 88, 86, 44,202,194, 34, 64, 4, 59, 55,174,125,255, 77,175,155,237,244,127,251,204,120, 78,166,217,110,255,254,207,253,212, 47,
+255,228, 79,141,172,221,146,182,199, 77,210, 0, 50,136, 20,240, 96,136, 64, 43, 96,168, 9,104, 40, 82, 5,133, 6, 93, 8, 33,
+ 18,162,181,198, 32, 25, 34, 99, 40,212,219, 0, 32,108,112, 1,160,153,152, 43,119,190, 36,105, 52, 14, 31,159,127,250, 4,205,
+252,251,155,223,125,221, 21,215, 36,173, 49,147, 52,144, 72, 3, 73, 45,212,166, 32,226,161, 8, 16, 49,224, 80, 90, 84,137,111,
+197, 98,153, 4, 17, 12, 5, 70, 34,153,128, 63,151, 95, 80, 80, 0,131,184,126,188,125,241,142, 45,223,122,124, 90, 79, 99,242,
+219,183,111,183,148, 52,108,163,133, 72, 0, 34, 44, 0,170, 34,160,138, 68, 5,248, 14,136,138,164,168, 2,100, 80, 4,208, 18,
+ 49,144, 85, 35, 4, 98, 84, 65,135, 0, 38, 34,228, 8, 65, 30,131,104, 12, 25, 79,185,243,200,168, 0, 45, 85, 85,189,249,250,
+171,255,242,155,143, 28, 59,113,234,101,219, 18, 89, 36, 75,136,160, 8, 8, 42,138,136,138, 4, 32,164, 36,168, 8, 40, 72,136,
+130,136,177,164, 73, 8, 66, 64, 6,201,160, 88,178,172,154,168, 58,107,168,162, 59, 36, 0, 17,185, 39, 68, 68,231, 1, 0,210,
+ 88, 14,122,243,149,187, 14,158,232,126,241,155,247,159, 34, 82, 35, 17,133,161,137, 40,208, 8, 3, 41, 0, 81, 99, 41, 52, 76,
+ 26,134, 43, 0, 18, 34, 1, 25, 66,131,100,200, 24, 68, 75,198, 26, 99, 16,203,202, 33, 89, 34,107, 76, 98, 77, 98, 41,181,182,
+ 97, 77, 98, 77,106, 76,106,109,187,145,180, 27,233,206,117, 35, 63,112,221,229,167, 18, 40, 8,129, 20, 46, 73,136, 74,168, 24,
+ 3, 27, 22,107, 92, 81,120,133,162,222, 74, 97,114, 0, 9,136, 32,148, 89,139, 66, 44, 81,168,136, 97,188, 87, 66,107,109,106,
+141, 53,148, 88,178,134, 66,110,190,190,153,252,224, 43, 47,127,234, 90, 22,198,213,192,148, 0, 0, 84,197,147, 88, 70,209,168,
+ 79, 70,108,131,187, 81,128,238,177, 34, 88, 20,223, 69, 42,249, 22, 20,171,213,166,224, 93, 24,162, 70, 98,198, 82,124,221,158,
+243, 87, 11, 20,111,157, 10, 15, 42, 84, 82, 22,166,195,243,224, 42,197, 31,171,168, 49, 88,200, 23,191, 88, 13, 83,148,178,227,
+ 7, 40,152, 8, 6,150, 9,146,161,196,152,181,163,205,171,206,219,250,148,213, 94, 11, 54, 94,193,245, 40, 24, 46, 2, 32,160,
+133,136,225, 42,165,184,160, 8,101,125, 91,244,164,145, 78, 82, 39,128, 22,165,118, 34, 52,132,150,200, 32, 37,214,108, 24,107,
+191,100,221,100, 33,144, 2,196, 10,117,212,135,150, 4,149, 80, 97, 6, 8,117, 52,141, 68,197,200, 85, 44, 42,105, 82,137, 32,
+149,130, 74, 24, 64,139,202,249,106,206, 81, 40,243,163, 49,100,141,105, 54,236,249, 27,215,148, 75, 71, 89,170, 83, 0, 17, 21,
+ 16, 45,107,214,160, 2, 18,175, 29,158, 7,177, 66, 81, 16,180,168,101, 43, 43,115,197,124, 41,176,153, 82,188,146, 95, 19,149,
+133, 16, 2, 2, 81,144,201,182, 26,233, 85, 59,183, 0,128, 45,169,153, 88, 84, 1, 3,163, 56,214, 24, 69, 35,247,166,170,128,
+179,150,112,130,134, 82, 63,131,114, 57,223, 82,215,204,106,189,151, 58, 12,168, 82, 88,145, 8,209, 34, 38,150, 70,154,169, 0,
+144,130,138, 10, 22, 21,106, 84,133, 80,133,133,242,170, 26,197, 42, 81,142, 98,109, 81, 97, 80, 46,212, 35,170, 42, 0,229,165,
+ 37,252,121,146,126,160,122, 94,218, 19, 25,178,100, 26,214,104,208, 80,132,201, 68,160, 44,149, 22,176,139,138,128,248, 85,162,
+196, 10,191,143,191,153,149, 3, 26, 14,171,170,179, 5,237, 94,106, 58, 42, 37,211, 24, 89, 48,194, 69,136, 68,104,137, 0,192,
+198,213, 20, 2, 48, 82,204,139, 8, 20, 85,104,173,128, 78, 31,202,214, 42,129, 58, 85,200,164, 94, 85,184, 16,167,224, 60,197,
+129,180,224,211, 70, 11,131, 56,107, 82, 51,246, 8,174, 5,129, 64, 99, 13, 58,168, 39,120, 88, 5, 45, 48,171,122, 16,137, 18,
+104,160, 99, 69,153, 34,238, 33, 21, 30, 37, 82,248, 94, 81, 9,151,162,176, 29,102, 80, 20,107,174, 23, 67, 73,136, 85, 84,104,
+ 72,148, 89, 64, 81, 11, 13, 73,229, 56,113,226,216, 67,201, 12, 99, 47,226, 85, 92,172,234,199,162,126,224,222,199, 2,249,106,
+ 16, 40,186,165, 74, 85,101,151, 10,159,171, 34,108,136,159,182,240, 20, 13,188,184,232, 71,133,205, 70,113,217,171,122,225, 0,
+ 14,123,229, 92,124,144,201,115,128, 25, 84, 57,214,231, 69,180, 82,146,172,130,202, 66,184,144,232,122, 82,154, 83, 48,245, 24,
+207, 45,168, 10,123,192,154, 13, 73,136, 55, 1,125,143, 22, 45,149,245, 20,172, 57,246, 92,104,165, 64, 57, 64, 74, 0,112, 21,
+144, 80,199, 24, 75, 92,161,130, 28, 85, 43, 21,217, 50, 57, 44,125,173, 12, 60, 34, 53,105,162,146,156,122, 23, 25,107,165,101,
+ 20,244,184,120,165,112, 59,133, 52, 28,132, 43,180, 87,130,163, 39,249, 96, 25, 68,109, 80, 3,148,211, 90,243,240, 96,209, 26,
+ 97,252, 18, 66,244, 34, 62,160, 93, 42,186, 26, 10,170,161,175, 82,224,163, 1, 13,148,136,211,106,193, 59, 44,161,153,114,209,
+ 10, 34,217, 96,170,170, 2, 97, 53,170,144, 77, 95,155, 41, 14,252,120, 21, 23,144,167, 96,168, 37,178, 84, 2, 83,117, 88,147,
+163, 86,162,160, 26,229, 14, 26,149, 26, 92,180,138,187,105,227,181,227,194, 4,197,124,197,153, 18, 97, 8,128,102,160, 58, 86,
+ 48,101,136,208,133,149, 68,172, 73,185,240,171,128,151, 85,115, 20,241, 53, 9, 46, 22,182,188,149, 76, 53,252,218, 30,156, 57,
+ 30, 86,162, 58, 80, 95,174,172, 5, 32, 44, 85, 28,174, 47, 88, 80,123, 46, 80, 5,214,136, 91,174, 50,234,194,247,161, 50,106,
+ 65, 22, 35,138,172,196,104,217, 38, 16,250,189, 22, 23, 23,151,150,150, 94,108,176,208, 63,236, 67, 85, 39, 39, 39,215,172, 89,
+ 99, 1, 96,121,121,249,200,145, 35,223, 81,202, 83, 73,158,107,214,172,161,239, 40,226, 31, 25,122,247, 29, 5,253, 35,123,216,
+231,231,165,112,217,174, 11, 94,125,249,165, 87,236,218,185,121,162, 45,110,224,135,221, 44,207,230,123,131,187, 31,157,218,127,
+100,230,235, 15, 61, 54, 60,227,194,226, 63, 17, 5, 93,182,251,165,255,234,157,239,186,108,247, 46, 11,156,247,151,179,238,146,
+ 27, 46,187, 97,215,173,204, 6, 58,165, 99,110, 91,124,197, 5, 91,175, 62,111,203, 59,246, 94,198, 44,253, 60,159,158, 95,190,
+239,137, 99,183, 60,112,112,152,187,127,178, 10,250,233,183,190,245,231,222,249,174, 97,191, 51,236,204, 46, 61,118,103,191,187,
+ 48,200,178,129,243, 89,238,189,231, 60,246,105, 68,130, 80,153,218,132,220, 97,178,221,220,123,225,142, 87,238,222,158,229,126,
+255,209,217,191,121,224,224, 82,183,255, 79, 71, 65,151,239,186,224, 15,254,221, 7, 72,220,220, 99,223, 92, 89,156,233,244,251,
+221, 65,214, 27,102,253, 44, 31,100,110,152,187,216, 78,233,124, 96,194,134, 18, 81,168,236, 25, 67,134,200, 18, 26, 99,194,239,
+ 11,206, 94,119,193,230,181, 89,238, 31,158, 89,248,234,190, 71,114,231, 95, 12,138, 64, 60, 53, 44,243,204, 10,122,239,155,111,
+252,137,239,127, 99,255,196, 99,221,229,185,197,110,119,169, 55, 88,238, 14,150,251,131,229,110,191,211,207, 86, 6,195,238, 96,
+ 56,200, 93,230,156,231,152,159, 7, 82,162, 49,161,197,214,164, 54, 73, 19,147, 90,147, 24,155, 88,147,196,162,172,217,125,246,
+186,221,155,175, 93, 25,230,247, 60,113,236,222,111, 39,141,228,105, 30, 63,255, 99,239,188,112,203,228,190,135, 30,252,195, 47,
+220,122, 74, 84,237, 25, 20,244, 99,175,187,246,109,123,175, 92, 60,246,240,242,202,202, 98,183, 63,191,210, 91,232,244, 78,116,
+186,115,203,221,185,229,149,197,110,127,152,231, 2,168, 74, 98, 76, 47,203, 29, 11,146, 69, 66, 67, 4,222,173, 25,107,143,165,
+ 58,218,178,153,119, 4,121, 98, 77,154,196,222,129,196, 24,107, 77,106,108, 51, 49,123,119,111,223,187,123,219, 82, 47,251,218,
+254, 67, 83,179, 11,223,110,165,156,187,117,219,219,190,231,181,223,189,103,215, 29,119,222,114,219,125,183,127,248,207,166,250,
+195,236,185,184,216,142,141,235,110,122,197,158,110,103,182, 59,200, 22,123,253,249,229,222,137, 78,119,118,169,243,228, 66,231,
+216,252,210,202, 96,216,106,183, 87, 52,153, 61,113, 90, 84,103,190, 70, 17,152, 28, 27,189,104,251,182, 22,161,243,222, 26, 72,
+140, 49,222, 12,209, 91,131,214,154,212,218,241, 86,122,211,181,123, 8,209,171,126,229,254,199,246, 63, 49,205,171,153, 20,207,
+231, 97,136, 94,115,205,213, 31,248,241,119, 13, 22,166,190,126,207, 55, 14, 60,124,207,255,253,236,103,158,152,153,123, 94, 49,
+232, 77,215,236, 65,208,149,193,176,211,207, 58,221, 97,167, 63, 88,234,245, 23, 86,250, 11, 43,189, 97,238, 70,199,199,247, 63,
+241,228,153,139,184,180,210,189,237,129, 7, 1, 96,180,213,218,189,125,235,186, 17, 99,189,179, 6,173, 24,195,156, 57,215, 31,
+ 26,107,168,145,218,102,146,188,254,210,243,222,124,213, 75,173, 49,221, 97,246,224,209,217,187, 14, 77,207,204, 47, 62, 91,165,
+ 92,117,209, 69,239,120,195,141, 23,109,123,137,244, 79, 60,118,248,208, 35, 83, 71, 62,248,135,191,243,224,244,252,161, 99,115,
+103, 30,248,158, 78, 65,215,236,218, 49,200,252, 48,119,131, 60, 31, 56,151, 57,159, 59,118, 44,162, 58, 58, 58, 50,215,127,142,
+ 11,118,119, 48,248,230,129, 71, 0,160,217,104,236,216,120,214,150, 53, 99, 13,163, 69, 20,167, 97,238, 86, 40, 51, 20,218, 77,
+ 77,171,153, 94,186, 99,243, 43,118,109,107, 55, 26,173,212, 38,214, 42,153,165,238, 96,224, 92,150, 51,171,230,206,141,180, 91,
+227,237,145,145, 86,123,253,218, 53,235,198,199, 84,164,219, 93,153,155,159,155, 62, 49,247,232,253,183,253,221,173, 43,115, 43,
+195, 39,230, 22, 15,207, 45,202,179,111,125, 57,173,130,182,110, 92, 15,236,115, 70, 23, 26,250, 89, 2, 46,157, 24,106, 38,118,
+232,188, 53,230,121,154,253, 48,203, 14, 76, 77, 31,152, 2, 0, 24,105,181,182,174,159,220, 48,218, 76,136,210,196,132,133, 15,
+ 41, 0,190,161,116, 77,101,128,183,198, 36, 6,145, 76,128,138,186, 43,203, 75, 75,139,206,249,161,115,253,204, 13,115,223, 25,
+ 12, 6, 98,166,230, 22,142, 47,118,156,123, 94,153,215,105, 21,180, 99,195, 26, 22, 1,192,144,212, 32,162, 33, 76,172,105,164,
+ 73,187,145, 58,230, 54,242, 11, 24, 56,123,131,193,129,169,193,129, 98,201,181, 68,214,154, 13,103,173, 91, 55, 49,142,226, 71,
+155,105,106,140,112,198,236, 2,206, 20,208, 75, 64,200,157,239, 12,156, 87, 60, 54, 59, 59, 24,102, 2,224,253, 11,153, 55,156,
+ 86, 65,173, 36, 97,137,181,217, 0,103, 37,214, 54, 19, 51,210, 72,188,111,138, 42, 66,182,118,124,100,161,243,194,211, 41, 65,
+ 53,244, 6, 79, 77, 31,155,154, 62,246, 34, 77, 20,135,206,169,106, 4,220,201,164,214, 54, 18,230, 70, 26,206,231, 8,136, 50,
+ 33, 62, 12,180,212, 89,249,231,184, 89, 93, 25, 58, 22,177,198, 88,162, 70, 98, 0, 18, 68, 48, 68,137,181,205, 70, 58,218,114,
+ 19, 35,205, 53,195,145,179, 38,199,190, 53, 53, 55, 61, 55,255,207, 78, 65,199,151, 58,225,240, 2, 36, 74,132, 18,107, 26,214,
+182,210,196,177,120, 31, 32, 31,241,204,142,229,226,109,155,135, 94,142,175,244, 59, 67,222,188,113,195,100, 10, 19,205,100,227,
+196,104,187,145, 36,134, 8, 67,127, 24,134, 94,245, 18,125, 88, 5,121, 70,204, 5, 50,230,149,254,176, 59,204, 79, 44,119, 79,
+116,251, 83,115, 75, 79, 46,118,142, 28, 63,241, 98, 84, 80, 98, 76,146,152,102,154, 36,134, 16, 83, 81,141, 93,249, 69,169, 61,
+146,110, 2,152, 12, 37,135,168,132, 39,137, 74,118, 78,104, 69,193, 10, 22,136, 24, 76,137, 84,133,200, 3, 96, 0,214,180,155,
+107,218,205,173,107,199, 1, 99,153, 61,224,146, 44,220,207,253,254, 35,115,247, 28, 60,242,228,194,210,114,111,240, 15,172,160,
+239,122,233,142,117, 99,163,237,102, 43,105,180,209,164, 17,164,138,128, 85,129, 32, 3, 66,128, 69,209, 68,158, 71,160, 43, 41,
+ 4,244, 2,152, 69,125,209,134,230, 2, 80, 34, 44,142,197, 51, 7, 2,111,216,223,198, 86,165,136,195, 70,162, 72, 36,140, 32,
+ 16, 34, 26, 59,222,178, 87,159,183,229,229,231,191, 36, 32, 59, 89,238,102,150,251, 95,184,247,225, 3, 71,142,253,125, 43,232,
+221,223,123,221, 59,174,127,117,115,108,109,218, 26, 55,182,129, 68,177,105, 50,186, 69,193,158, 8,168, 95,157, 30, 0, 5,134,
+ 90, 67, 68,139,166,175,112,212,147, 19,206,132, 67,167, 84, 56, 12,163,104, 59, 99,241, 42,204,234, 11, 88, 82, 68, 88,184,214,
+210, 8, 0,224,139,205,119, 51, 77,207, 89,159,190,251,250,171, 69,164,159,185,163,243,203,251, 14, 31,251,198, 35,135,159, 51,
+ 89,242, 52, 10, 42,192,233,241,118,235,117, 87,190,236,221,111,188,113,243,198,205,148,180,109,179,109,109,130, 38,137,103,190,
+ 68,140,187,250, 1,169,240,165,178,195, 43,252, 9,165,130, 84, 84, 24,197,170,120, 48,105, 1, 93, 55,133,157, 97,167,236,146,
+ 96, 82, 1, 66, 99,137,192, 39,115,160,107,132,115,173,152, 99,131, 94,233,146,162, 42, 2, 18, 96,124, 0, 64,108, 38,246,220,
+141,107,183,173,159,188,225,210,243,123,195,252,224,236,242, 29, 15, 63,126,124, 97,249, 5, 80,144, 0,188,243,134, 87,191,233,
+218,107,108,163,157, 36, 77, 74,154,198,166,198, 90,192,208,214, 11,128,193,173, 4, 8,149, 3, 93, 36, 88,126, 60, 14, 7,136,
+ 80,226, 43, 16, 88,147, 42, 32, 0, 68,161,169,153, 16, 1,145,129, 9, 0, 9,133, 67,140, 50, 66,150,200,171,122, 98, 39, 34,
+214,152, 8,131,138,137,100, 22, 14, 64,118,108,181,244,149,166,130,125,161, 40,176,176, 20,161,158, 16, 83,107, 77,139, 46,222,
+ 98, 47,216, 56, 57,116,126,161,239, 62,117,231,190,149,231, 17,176, 44,168, 78,172,217, 56, 58,177, 17,200,144,177,129,149, 23,
+220, 71,132, 75,206,142,106, 69, 58, 64, 0, 5, 4, 80, 68, 3,168,168,162,132,145, 80, 66,136, 85,212, 13, 13,214, 22,196, 43,
+ 42, 25, 80, 4,144,192,107, 3, 65, 36, 36, 37, 18, 38,131, 68,226,133,153, 16, 69, 85, 80,132,208,136, 10, 81, 8,231,137, 45,
+123, 47,109,108,148,141, 77,169,204, 74,193, 15, 75, 0, 23, 12,165, 96, 3, 81, 43,181,246,199, 95,125, 69,230,248,232, 82,239,
+ 75,247, 30,200,242,252,185,196, 32,178,137,105, 52, 99, 88, 36,132,178,133, 57, 50, 48, 52,112,196,194, 47, 0, 80, 50, 20,104,
+ 53, 49,164, 18,137, 42,138, 42,160,160, 0, 69, 42,157, 4,238,155, 2, 25, 4,136,237,210, 20,118,112,150, 0,227,184,136,194,
+164, 72,136, 62,112, 74, 16,137, 84, 5, 11,103, 38, 85, 69, 18, 49,130,162,202,140,162,196, 38, 24, 17,121, 81, 49,194, 90, 54,
+207,162,136, 18, 34, 41, 25, 35,150,217,121,178,134,119,174, 55,219, 95,115, 69,207,201, 93,135,166,247, 63,113,244, 89, 42,136,
+136,140,141,190,131, 8, 4, 10, 26,201,156, 24,163, 48,162, 34, 5,122,158, 18, 72,232,102, 38, 21,193,208,212,174,160,132, 40,
+ 18, 1,108, 84, 13,180, 69, 84, 68, 4,210,216,155,175, 0,160, 97,185,163,144, 35, 48,104,120, 27, 20, 81,144, 12,163, 42,139,
+ 40,146, 34, 0,138, 80,224,111, 3, 10,170,136, 4, 43, 35, 22, 33, 20, 33, 18, 17, 37, 22, 49, 40,162,106,162,113,161, 81,101,
+ 70, 66,178, 70, 18, 54,158,217, 89, 49,214,239,221,189,245,154,115, 55,205, 15,229, 43,247, 29,232,246,250,103,182,138, 33, 17,
+ 26, 1,168, 56,164, 37, 21, 18, 81, 37, 26,142,160, 70,190,103, 48,143, 64, 95, 86, 0, 4,137,230,132, 5,137, 57,174,207, 69,
+ 79,113,197, 41, 3, 81, 68, 2,210, 64, 52, 6, 82, 16, 85,138,220, 70, 84, 0,163, 42, 64, 33, 75,136,108, 96, 4, 17,164, 48,
+ 28,161, 40,138,162, 65, 22, 33, 16, 68, 98, 9, 61,241, 65,113,200, 68, 33,101, 35, 36, 18, 97,193,162,139,159, 45,161, 51, 38,
+ 49, 38,181,254, 7,175,220,221,101,184,243,224,209,163, 51,179,207,160, 32, 12,135,137, 21,116,107, 84, 12,190, 21,110, 14, 73,
+ 69, 0,131,149, 32,134,211, 27, 74,158,131, 98, 69, 72, 12, 95,170, 29, 47, 16, 86, 24, 4,144, 34,168, 7,130,177, 70,251, 66,
+ 84, 8, 12, 99, 5, 13, 10, 80, 0, 50, 0, 18, 62, 67, 10,197,105,181, 80,200, 16,143, 75, 16, 0, 66, 6, 34, 17,160,168, 56,
+ 16, 5, 3, 40, 74,145,186, 38,200,128, 8, 28,101, 8,215,228,200, 72, 36,180,206, 95,119,238,166,254,246, 77,223,120,244,240,
+233,150, 60, 11,165,197, 72, 56, 41,130, 0, 5, 20, 9, 84,112, 53, 37, 24, 1, 67, 13, 20, 11,246, 76,145, 1,213,149, 20,119,
+ 13, 21,103, 87, 11,178,187, 22,148,247,232,135, 90,176,176, 35, 73, 63,184,181, 98,168, 33, 32, 2, 10,104,136,124, 82, 75,109,
+180,184, 80,121, 78, 5, 20,190, 27,153,205,138,132, 6, 0, 4, 13, 5,103, 22, 69, 84, 66, 81, 68, 68, 67, 36, 10,106, 40, 21,
+ 11, 45, 53, 57, 95,187,243,236,249,141,107,239,126,108,250,169,253, 19, 4,165,103,161, 66,113,242, 27,170, 40, 2, 86,233,159,
+ 2,104,144, 82, 65,163,123, 5, 59,128,178,241, 61,176,131,181,236, 17,208,146,213, 92, 81,201, 74,245, 86,124, 92,173,232,120,
+ 5,255, 45,132,247,177,193,103, 43, 0, 0, 5, 95, 73, 68, 65, 84, 58, 87,118, 53,143,183,198,221,171, 77, 94,204,228,177,104,
+163,192,162,189, 37,244, 1, 68, 30,107,224,220, 83,104, 88, 48,104,201, 36,134, 90,141,116,221, 88,235,186, 93, 91, 95,182, 99,
+243,169, 20, 84,209,155,139, 14,127, 8,135,232,213,184,179,165,178, 34,119, 89,203,204,176, 34,121, 7,194, 98,141,113, 27,148,
+ 85, 35, 74,106,113, 18,107, 28, 11, 84,169, 84,177,172, 58, 30, 32,174,147,171,249,226, 21,101,170,166,178,154,109, 33,172, 38,
+ 34, 71, 61, 33, 22,135, 81, 64,160, 32, 23,187, 69, 42,224, 41,211, 72,108,187,209,216, 56, 49,114,237,249, 47, 25,105, 54,138,
+109, 66,116,177,130, 22, 23,214,177,120,132, 96,136, 71, 90,158,139, 16, 24,204,101, 54, 4,117,242,118,113,128, 8, 68,246, 88,
+ 45,111, 42,121,197, 34,165,102,235,239,150, 20,108, 85,142, 52,215,242,152,146,168,238,146, 63,172,245,155,127,138,125,197,207,
+214,169,250,117,166,104,209,137,163,161, 71,128,202, 83, 98,136, 44,169, 16,169, 53,162, 9,180,224,178,237, 27,142, 46, 13,124,
+ 93, 65, 21,157, 50,220, 47,198,134, 26, 9, 79,227,107,129, 87, 29, 24,248, 2, 53, 51, 9,183,131, 5, 99, 14, 87, 29,235,194,
+ 53,115,227,218,139, 82,144,173, 3,107,157, 1, 34, 15, 91, 74, 75, 69,168, 14,247, 8,147,160,117, 86, 99, 21, 2, 11, 47,215,
+234,211,225,138,133,121, 98,173, 83, 65, 17, 98, 91, 12,162, 65, 18, 82, 34,177,198,136,106, 42, 70, 19, 85,208,173,147,232, 91,
+227,133,130,180, 60,134, 24, 42,141, 20,145, 65,160,166, 5,168,121,156, 74,233, 41,165, 41,149,199,130, 20, 27, 87, 9,103,150,
+172,218,181,133,211,111,164,224, 25, 11,139, 6, 58, 61, 23,228,249, 82,241,165, 41, 66, 65, 51, 44,156,182, 10,117, 53, 89,107,
+102, 85,183,161,178, 27, 10,107, 73, 10, 34, 16,130, 96, 60,202,135, 69, 13,145, 24,181, 74,169, 90, 21, 69, 67, 26, 20,164,229,
+ 25,226,101,168,128,210,191, 64,171,158, 8,128, 98, 63, 10,213,161, 36,113,239, 30, 75, 28, 82, 57, 17,148,180,107, 40,119,182,
+193, 70, 84,149, 65,188, 4,221, 5, 78,184, 50,112,113, 70, 78, 73, 61, 47, 38, 69,162,174,160,100, 91,171,104,125, 30,101,245,
+137, 39, 10,101, 91,197, 42,127,172,175, 5, 69, 84,138, 15, 67, 36, 34,100,208, 8, 89, 82,182,134, 9,125, 97, 65,161,118, 19,
+ 72,249,241, 80, 21,168, 8,242, 10, 1, 72, 0, 21, 17,172, 25,145,150,109, 29, 69,251, 64,176, 17, 4, 45, 61, 43,108,116, 3,
+ 75,183,222,226, 1, 42,202, 62,246, 60, 4,198,177, 74,169, 16,145, 64,133,175, 71,100, 56,249,244,151,208, 97,162,178,122, 57,
+ 57,185, 65,167,234,211,137, 30, 80,133,168, 90, 95, 68, 17,191, 37, 4,111,181,198,184, 72,255, 47, 44, 72, 10, 59, 45, 12, 8,
+ 42,135,170,116,165, 18,109,188,240, 41,169, 76,190, 8,189, 34,171,206,223, 9, 31,102, 88,125,102, 81, 85, 48, 82, 95, 4,105,
+ 45,252,168, 76, 46, 74, 47, 43, 93, 12,100,149,118, 86,135,157,162,201, 96, 85, 51, 70, 28, 4,138,223, 90,207, 44,234,246, 84,
+ 59,121, 12, 73, 98,133, 52, 40, 72,148,185,214,250, 19, 55,243, 85,244,131,250,130, 85,246, 28, 21,161, 7, 42,101,197, 46,150,
+208, 78, 16, 21, 81,107,184, 80,169, 83,213,227, 41,186,202, 5,111, 90,106,102,162, 21,159, 58,118, 50, 64,173,123, 71,171,144,
+ 84,118, 26,212,249,252,213, 97, 67,213,209, 93,181,114, 95,153, 89, 84,126,135, 80,229, 5, 85,250, 84,158,111, 22,248,231, 33,
+145,144,144,173,105,113, 32, 28, 70,207, 82,149, 16,195, 99,232, 45,196, 67, 40,155, 30,162,189, 99,108, 8,224, 48, 50,134,154,
+114,116,186,112,238,150,132,179, 0,161,138, 44, 80,133,152, 72, 47,175, 34, 78,101, 62, 18, 59,139, 74,149, 5,146,120, 17,240,
+ 32,246, 96, 20, 5, 62, 89,101,116,186, 90, 85, 90,245,131,105,185, 81,210,226,172,187, 88,247, 42, 44, 40,172, 44, 80,105, 85,
+160,222,157, 86,209,216,107,145,160, 56,202, 42, 6,238,106, 57,151,122, 69,177,236, 43,171,124,170, 52,168,202, 71,164,234, 96,
+129,147,243, 69,173,242,171,178,201,163,230, 95, 80, 29,159, 38,197, 97, 95,145, 66,175,245,102,150, 42,183, 42,131, 83,108, 82,
+ 41,251, 24,203, 90, 59, 20, 37,246, 66, 65,194,190, 12,108,229, 46,171,136,223, 85,176,131, 85,203,185,212, 66, 15,212, 18, 60,
+174,222, 42,151,240, 74, 71, 92,111, 33,136,179, 42,181,100, 33,174, 88, 18,151,246,147,148, 85, 59,126,171,254, 98,165,184,242,
+124,182, 74, 53,133, 88,197,101, 89,171, 68, 84,235,183, 93,219, 44,174,218,172,134,126,141,226, 88,147,226,236, 58, 41,147,195,
+114, 69, 47, 50, 20,145, 34,105, 22, 44, 26,107,226, 52,151,139,151,114,140, 68, 82,116,117, 20,170, 41, 64,163, 50,196,196,124,
+ 89,194,233,224,181,213,170,232,111, 4, 41,144,166,242,182, 99,143, 26,172,234, 10,171, 29, 16, 88,154, 46, 84,111,137,232,170,
+119, 65, 86,157,127,182, 42, 0, 67,177, 81,143,203,188,136, 15,120, 14,212,218,203, 86,175,143,213,188,214, 28, 42,162,129,241,
+102,235,141,154,162, 80, 54,188, 84, 39, 28,174,218, 24,172, 14,180,245, 38, 74,144, 58,126, 82, 5,148,184,219, 91,237,128,177,
+ 19,171,122, 75, 66, 67, 85,169,187,208,174, 82, 52, 25, 61,101, 5,148, 58,242, 80,182,149, 22,219,188,224, 98, 44,222,157,188,
+186,195,170,148,190, 90,203,164,238, 89, 28,227, 1,148, 73, 80, 21, 98,138, 99,236,138,133, 35, 30,116, 87, 0, 31,171, 85,115,
+178, 6, 33,224, 22,162, 39,171,163,102, 62,171, 66,204, 42,115,168,159,136, 87,244, 6,201,170, 86, 68,168, 59,102, 61, 98,215,
+ 79,206,212,202,197, 64,124, 45, 86,149, 41, 23,212,118, 24,229,255,135, 82,198, 23, 89,213,162, 20,219, 41, 57,230,185, 0, 90,
+ 79,106,180,200, 38,139,151,226, 90, 43,161,114, 32, 69,203,235, 73, 43,125,245,149, 82, 35, 90, 11,183,181,251,132,170, 33, 78,
+ 98, 32,174,204,164,182,210,151,189,115,197,149,106,151, 3,168,183, 85,197,117,127,239,222,189, 79,169, 27,156, 89, 95,212,139,
+160,123, 10, 95,216, 47, 61,229, 29, 84,253,255,247,125,202,160,216,217,116,216, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+ 0};
+
diff --git a/source/blender/editors/datafiles/soften.png.c b/source/blender/editors/datafiles/soften.png.c
new file mode 100644
index 00000000000..c50e3064e30
--- /dev/null
+++ b/source/blender/editors/datafiles/soften.png.c
@@ -0,0 +1,295 @@
+/* DataToC output of file <soften_png> */
+
+int datatoc_soften_png_size= 9219;
+char datatoc_soften_png[]= {
+137, 80, 78,
+ 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 96, 0, 0, 0, 96, 8, 2, 0, 0, 1, 26,253,208,249, 0, 0,
+ 0, 4,103, 65, 77, 65, 0, 0,177,143, 11,252, 97, 5, 0, 0, 0, 6, 98, 75, 71, 68, 0, 0, 0, 0, 0, 0,249, 67,187,127,
+ 0, 0, 0, 9,112, 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 0, 7,116, 73, 77, 69, 7,218, 7,
+ 21, 0, 4, 17,164, 74, 11,162, 0, 0, 32, 0, 73, 68, 65, 84,120,218,237,125, 89,140,101,215,117,221, 94,251,220,247,106,236,
+ 42,118,245,196,230, 32,178,217,221, 18,201, 38, 13,118,147, 26,163,216,145, 68, 82, 10,109, 1,142, 0,249,195, 70,254, 44,219,
+ 72, 34, 89,147, 53, 81,118,128, 72,137,108,231,199,209, 79,236, 68, 48, 36,216,254,136, 28, 3, 49,146, 32,202, 71, 68, 41,142,
+228, 88, 19, 5, 27, 22,155, 77,138, 33,155, 34, 37,206, 61,213,240,222,189,103,175,124,236,125,206,189,175,170, 56, 40,166,129,
+ 24,224,235, 98,117,213,235,247,238, 59,119,159, 61,174,189,246,161,200,143,251,184,252,240,225, 35, 71,174,219,249, 60, 68,228,
+163, 31,251, 68,206, 29, 68, 84, 21,170, 77,211,140,154,166, 25,141,238,254,196,199,253, 69,233,125,191,250,254,182,157,230,220,
+153, 89, 54, 51,203,150, 45,155,209,120,251,237,183,159,190,255,254, 75, 23, 47,234,116, 58,105,167,211,118,218,182, 93,219,181,
+237, 51,207,109, 92, 88,159, 76,167, 93,215,118,147,233,244, 87,126,249, 87, 70,163, 81,211,182,237,127,251,218,179,162, 80,232,
+141,215,206,207,207, 53,203, 29, 69,148, 20,205, 32,121,247,221,159, 76, 63,218,184, 10,160,144, 34, 76, 96,219, 89,206, 70,210,
+204, 22,230,148, 70,146,141, 89, 86,168, 8, 8,156, 95,111,183,166,121,218, 90,151,121, 96,239,120,218,182, 41,153,144,105,121,
+237, 24, 73, 17, 10, 73, 74,206,242,236,197,238,153, 11,221,233,135, 55,142,191,106, 33,238,110,233,178,163, 0, 69, 8, 33,129,
+105,107, 16, 10, 0,202,153, 71, 55, 78, 63,188,121,253,181,139,105,113,239,181, 66, 8, 40, 20,134,236, 40, 20, 81,184, 24,239,
+123,100,179,161,145,200,146,161, 10, 49,151,174,138,152,191,131, 64, 18,123, 73,219,149,234, 79, 11, 11,139, 87, 95,125,181, 42,
+ 54, 55, 55,183,239,221,169, 83,167,222,118,251, 29, 36, 21,128,106, 74,201, 55,238, 75, 95,250,210,215,254,215,159,197,139,222,
+247,190, 95,165, 16, 2, 85,133, 34,105, 82, 77,163,113,211, 52,163,209,104,244,201,187, 63, 33, 34, 58, 45, 27,215,118,237,185,
+243,155,207,157,223,216,220,106,219, 54, 79,167,211,201,100,242,169, 79,125, 90, 68,240,147,119,254,194,247,127,176, 5,129, 0,
+ 55, 31, 91, 92, 92, 24,173, 44,207, 47, 47,205,143, 71,105,212,232,104, 52,154,155,159, 79,211,230,136, 64,140, 92, 94,132,144,
+ 93,103,217,140,180,156,109, 60, 86, 49, 26,217,152,152,154,137,104,215,201,249,139,156,180,214,118,118,229,129,249,148,216, 78,
+ 91,107,140, 34,105,105,237, 24, 40, 34, 98,102,153,236,178, 61,245, 92,247,192,217,205,107,174,152, 83,192, 69,154,150,214,174,
+ 19, 87, 20,138,136, 76, 91,151, 47, 31,122,116,114,230,236,198,190,213,102, 97,190,193,129, 35,183, 67, 85,224, 91, 5, 8, 68,
+ 33, 72,144, 4, 77, 73,147,164,166, 49, 49, 37,125, 79, 69, 33, 4, 4, 80, 21,201, 16,161, 64,205,228,229,122, 96,248,203,251,
+ 63,240,193,165,197, 37,223, 36,255, 3,133, 66, 53, 41,128,164,233,179,159,253,157, 39,158,120, 98,247, 11,125,248,215, 62,146,
+ 45, 11, 69,140,126, 89,136, 64, 1, 81, 40, 68,160, 9,170, 10,104, 74, 73,129,148,146,106,106,154,230, 99, 31,251,200,204,133,
+254,201, 63,253,103,210,235,182, 96,240, 16, 72,206, 52, 34,165,212, 52, 58,106,154,148, 84,147,130, 72,161, 79,163, 47,124,225,
+243, 15,156, 57, 35, 34, 77, 59,157,250, 50, 32,178, 49, 49, 5,150, 22, 26, 17,153, 78,249,220,165,118,148,180, 25,165,185, 81,
+ 26,143, 71, 54,198,168, 17,205,132, 74,206, 72, 10,205,249,231,127,254, 23, 82, 74,191,241,235,159,196,225,235,127, 22, 18, 82,
+129,223,155, 34, 1, 87, 95, 62,110, 18, 70,141,142, 71, 58, 55,110,230,198,163,249,185,102, 52, 74,163, 38, 37, 21,168,206,207,
+ 37, 64,147,170,170,166, 81,147,246,172,189, 90,196, 68,132, 34,160, 9, 68,200,197, 57,180,217, 38, 83,155,182, 54,109,243,180,
+181,201,180,155,180,121, 58,237,178,229,229,197, 4,144,102,238,109, 72,154,177,161,100, 33,197,148, 32,161, 98,157,136,110, 78,
+217,118,162, 9, 73, 53, 37,140, 82, 62,191, 78, 10, 22,230,211, 91,111, 91,107,219, 22,128, 27,159, 91,160,154,225,208,177,183,
+ 11, 85, 84, 40,136,111, 66, 17,164,164,238,135,167,157,169, 40, 1, 40, 32, 0, 84, 0, 85,252,204,155,247,251,150,194,183,245,
+192,209, 59, 68, 0, 1,253,175,114, 33, 17, 21,154, 40, 32, 66, 64, 5, 20,133,170, 59, 54,104,114,129, 66, 21, 80,129, 54,102,
+ 57, 4, 45, 34,162,180,236,171,131, 24, 68,196, 64, 0, 36,125, 39, 50, 69, 85, 68,104,217,149,205, 76, 84, 5, 34, 13,105,190,
+103, 2, 21,154, 64,104, 80,208,197, 47, 4, 21, 74, 17,117,199,168,194, 44,162, 16,165,152,248,135,152, 80, 41,255,223, 61,176,
+235,179,123,247,238,189,236,178,189, 34, 50,153,108,157, 59,119,110, 99, 99,227,199,184,208,177,227,199,223,253,238,159, 3,194,
+ 49,249, 95,110,250,170,154, 82, 58,119,238,252,191,254,237,223,124,161, 11,125,236,227,159,176,108, 36,221,118,225,155,234,151,
+211,120, 36,191,152,166,102,212,124,244, 35,191,182,203,133, 62,248,161, 15,139,135, 54,250, 46,193, 85,207,183, 27, 72, 80,164,
+ 20,110, 36,169, 47, 49,157,125,244,236,239,253,238,191, 29, 94, 72,187,174,107,187,182,235,186, 46,119, 93,238, 44,119,150,187,
+156,115,238,114,206,150,173,179,220,249,191,119,109,132,156,182,107,175,186,234,170,223,252,173,223,222,126,161, 28, 95,254,102,
+127,248, 79,221,250,250,116, 99,179,157, 78,115,219,229,156,105,153,157,229,156,173,107,219,118, 58,253, 87,159,233, 69,166,150,
+179, 13, 30, 52,210, 72,179,156,243, 51,231, 39,147,105, 55,233,114,219,101,203,204,102, 38,198,204,156,187, 46, 91,151,187,174,
+235, 62,243,153,223,138,152,124,242,228, 41, 79, 38, 38,173, 77,166, 25,128,130,164,252,240,233, 45, 51,210, 92,252,213,105, 70,
+ 88,162, 16,226,233, 7,111,190,249,230,111,252,197, 95, 52,102,246,223,255,247,115, 70, 10,220, 76, 64,145,213,165,116,245,229,
+115, 77,146,174,105,178,145,116, 99,132, 80, 20, 98, 10,132, 57,139,116,221,254,125,251, 33, 72, 79,108,190,202, 72,248,174,139,
+185,179, 60,176, 55,177,247, 92,194,216, 82, 33,195,151,165, 52,179,247,119,220,121,103, 90,222,255, 26,132,197, 81, 68, 0, 33,
+ 57, 63,214, 28, 34, 17,146,164,248,251,253,202, 73,165, 73, 26, 1,131, 34, 0,201,180,103,223,107, 36,174, 84,174, 71, 25, 53,
+200, 20, 95, 20, 41,241,157,102, 38, 43,203,163,241, 72, 69, 6,239, 32, 69,208, 24, 51, 4, 16, 10, 33, 74, 35, 64,153,182, 89,
+ 51, 44, 33, 39,100, 99, 54,205,198,181,213,197,189, 43, 35,192,114, 22, 0, 74, 16,245,166,187,180,103,237,184,212,120,228, 73,
+ 27,160,138,114, 59,160,200,230,196,158,124, 46, 63,250,163,233,209,171, 22,194, 3, 70, 10,136,106,103,105,105,223, 49,146, 2,
+169,139,242, 29, 50, 19, 33, 77,184,190,101,147, 73,152,225,131,103, 55,158, 62,223, 94,117,112,236,142,143, 68, 53,252,180,180,
+247,168,167, 34,101, 85, 20,250, 39,209,132,211,214, 60,146,187,199,132, 96, 99, 98, 15, 60,178,185,178,167, 89, 90,212,184, 6,
+124, 69,107, 71, 25, 11,173, 81, 91, 40,160,208, 50, 41,162,238,228,125,217,126, 77,224,177,167,166,103, 30,217, 56,119,177,187,
+250,208, 28, 93, 99, 15, 94,119,167,192, 95,143,186, 48, 82,225, 55, 11,245, 24, 82,146, 93,133,170,136, 64, 84, 0, 81, 64, 84,
+ 84, 33,170, 20,163, 80,196, 92, 34,229, 22, 60, 59, 33, 93, 84,140, 77, 22, 26,105, 34,164,152,144, 98, 20, 33, 76, 32,108,132,
+ 20,122, 80, 51,191, 99,115,231, 72,128, 20,136,199, 8,191,201, 80, 62, 66, 64, 42, 61, 59,164,146, 34,101, 69,112, 5,246, 0,
+ 36, 48, 10,205,224, 27, 67,243, 85, 48, 86, 45, 48, 17,129, 9, 45,116, 29, 20,117,107, 54, 26,133, 66, 51, 19,138,185,174,131,
+230, 31, 80,150, 81, 22, 31, 57, 7, 75, 6, 83,214,240,202,227,199,143,179,245,113,221,117, 71,111,188,241,198, 35, 71,143,174,
+237,221,219, 63, 27,206, 84,224,201,115,252,165,231,206,157, 59,115,230,254,191,250,171,191,252,254,247,191,255,242, 44,104,121,
+121,249,221,239,254,185,195,135,175, 48,179, 65, 49,200,222,195,196, 31,145, 62,174,247, 15,237,127, 82,133, 10,164, 25,141,254,
+227, 23,191,248,173,111,125,243,165, 43, 7,222,249,206,119,222,120,227, 9, 51, 70, 97, 91, 77,106,118,201,240,220,177, 46,165,
+252, 48,187, 36, 47, 56,250,101,149,133,170,170,118,185,251,119,191,247,187,143, 62,250,232,139, 44,232,253, 31,248,144,199,186,
+157, 75,169,158,105,240,103,102, 53,210,151, 25,131,133, 72,191,148,193, 74, 5, 64, 74, 13,128,212,164,127,254, 27,191,190,181,
+181,181,251,130,222,251,222,247,177,134, 21,238, 92,205,204,114,234,142,213, 31, 73,201, 38,238,217,160,240,196, 93,213,215, 84,
+ 50, 44,137,228,188, 60, 15, 85,109, 82,243,185,207,253,251, 7, 31,124, 96,123, 69,127,235,109,183,209,108, 88, 81,196, 67, 88,
+ 34,181,244,207,212,103,141, 27, 91,237,230, 36,183,157, 67, 47, 30,198, 5,245,190, 64, 33,132,130,192, 25,104, 70,186,111,165,
+121,156,189,229,228,201, 59,239,124,251,131, 15, 60,112,254,252,249, 94, 4,191,244, 75,191,252,124,234,174, 2,122,149,172, 12,
+215, 79, 0,184,180,217,110, 77,204,149, 36, 37, 77, 0, 18, 26,213,164,154, 26, 85,213,212, 36, 5,146, 71, 5,136, 2, 36, 85,
+ 19, 73, 40, 84,144,146, 23, 50, 33,174,241,104,252,209,143, 70, 62,138, 95,124,207,123,194,140, 32,143, 63, 57, 57,251,196,244,
+252,165,174,235,216, 7, 74, 96,126,164,123, 87,154, 99, 87, 45,172,173,142,126,248,212, 86,155,153, 20, 80, 36, 69, 82,168,106,
+ 74,154,146, 54, 73, 83, 74, 77,210,212,120, 42, 13,255,120,244, 8,128, 0, 80, 21, 29, 42, 89, 36,203,233, 15,255,240, 15, 78,
+159,190, 15,239,124,215, 63,254,214,125,151,138,186,178,151,143,203, 93, 5, 68, 9,191,184,124,127,179,188,224,133, 54, 18,160,
+ 10, 85, 52, 73, 83,210,164,104,154,148, 26,109,146, 54, 41,249, 51, 0, 82, 42, 25,191,132, 54,141,155, 84,205, 86,195, 91,168,
+ 11,250,171, 95,189, 39, 93,146, 35, 40, 38, 86,151, 18,209, 93, 60,197,136, 36,126,110,140,197,121, 53, 99,151,153, 59,118,102,
+217,152, 77,114,166, 25,179,209,140,185, 51,163,228,128,243,152,205, 51,101,127,129, 37,148,252,142, 81, 81,114,144,210, 10,121,
+205,181, 71,154,240, 61,144,178, 6,235,141, 59,220,153,175, 10,163,134, 91,147,172,136,236, 65,161, 73, 69,213,146,162, 73, 72,
+ 85, 78, 93,110, 84, 53,105,211,104,108,168,202,226,252,104,110,156, 4,204, 57, 23,255, 1,150, 77,171,133, 41,200, 70,104, 1,
+181, 49,178, 33,170, 69, 10, 34,162, 70,150,140, 43,119,152,210, 0, 7,207,160,176, 4,209,228,182, 44, 77,210,164,101, 89,201,
+ 82,210,185,145,238, 93, 29, 47,205, 39, 85, 8,196,204, 4, 94,204,122,130, 95, 66,142,239,158,131,114,100, 83,178, 14, 23,146,
+ 1, 16, 66,188,168, 38, 8,136, 24, 41, 20,116,217, 19, 63, 0, 97, 98, 10,209, 76, 87,148,182, 99, 74,128,216,198,132,235,155,
+188,246,202,133, 35, 87,204,139,192,204,235, 8, 20,223, 69, 80,188,224, 87, 81,211, 44, 46, 34, 17, 16, 10,226,224,241,187,224,
+239,112, 16, 13,190,180,146,214,134,113,144,148,166,209,222, 82,194,217,137, 70,116,149, 73, 39,211, 41,161, 21, 43, 13,227,122,
+195, 77, 43,251,247,142,252, 77,226,213,141,215, 45, 80,117, 93,175,126,211, 21,252,208,177,127, 24, 80,170, 95,133,116,253, 31,
+232, 56, 4,164,136,214,146, 20, 21, 40, 35,136,105,166, 24, 68,189,254,169,193, 69, 3, 61,130,250,197,143, 95,189,112,227,145,
+ 37, 99, 93,211, 32,166,244,145, 71,113,240,216,157,116, 48,165,186, 35,178, 44, 46,254, 43, 6, 17, 98, 44, 82,147,108, 37,190,
+ 80,168,241, 58,129,246,181, 94,252, 0, 33, 74, 21, 0, 85,156,124,245,242,225, 3,115, 73,181, 42,120, 31, 92, 14, 30,189, 83,
+ 2,223,113, 69,175,117, 81,236, 32,197, 1, 22, 1, 40, 18, 90, 40,102,230,203,117,207,224,249, 59, 29,108,114,104, 90, 41, 5,
+ 87,243,116,159,177,101, 66, 45, 79, 67, 32, 73, 49,110,116,109,117,124,229,193,185,181,149, 17, 14, 28,185,131,110,128, 1,137,
+ 35, 62, 7,253, 26,203, 14, 98, 80,218,133,248, 74,124,161, 80,189,140, 10,208,169, 36,243,174,149, 17,100,189,226, 40,235,118,
+128,132,244,127, 85,223, 31, 45, 6,101, 20,207,202, 76, 72, 72,148,120, 94, 46, 8, 35, 48, 70, 26,110, 20, 18, 52, 65,201,251,
+107,167,192, 34,148,130, 36, 60,139, 55,175,137, 25,254,197,136,210, 84, 16, 15,200, 14, 0,196, 21,154,112,203,129,151,249,109,
+151,130,223,229, 64,161,131, 4, 37,182, 24, 74,145, 72,129, 68,157, 67,250, 78, 16, 20, 19,243,212, 4,162, 22, 85,135, 66,196,
+204,160, 40, 8,155,134, 81,251,158,144, 16,161, 74, 35, 14,203, 41, 40, 70, 81,152,245,134, 34,180,208,174,112,166,161,181,225,
+249, 99,211,132, 14,229,105, 84,117, 40, 73, 72,241, 58,238,225,162, 56, 37,232, 57,132, 24, 1,136, 10,233, 86, 74,245, 50,205,
+ 72, 23, 90,236, 66,228, 61,190, 11,168,161,204,104, 20,199,108,232,226,245, 4,147,244, 93,144, 40, 52,125,115, 67,186,230, 40,
+175, 21,199, 47, 34, 98,190,199, 34,131,141, 11, 17,239,146, 33,190,242,120,229,241,114, 87,174,245,209,140,154,197,133,197,241,
+120, 60, 63,191, 48, 26,141,252,201,174,107,183,182, 38,147,201,214,250,250,122,206,249,111,125, 65,163,209,232,150, 91, 78, 94,
+127,195, 13,215,188,234,154,212, 20, 76,144, 16, 13, 59, 43, 37, 15, 84,149,228, 67, 15, 61,116,223,247,254,250,219,223,254,246,
+212, 27, 60, 47,227,130,126,250,103,222,121,226,196,137, 81, 51, 98, 69, 32,135,144,221,108,229, 88, 43,124, 17, 73, 41, 65, 49,
+157, 78,239,253,206,119,254,244, 79,255,211,223,104, 65, 77,211,156, 56,113,226,174,187,126,154, 53,119, 29, 38,218,165,164, 31,
+ 86,248,179,149,253,108,105, 15,168,234,133, 11, 23, 62,251,111,126,103,125,125,253,199, 91,208,218,218,218, 93,119,221,117,197,
+ 21, 87, 57,102, 52,200,166, 7, 47, 26, 22,246,131,239,207,187, 38,207, 78, 69, 82,147,158,124,226,137, 47,124,254,243,207, 62,
+251,236, 75, 90,208,123,223,251,222,133,133,165,226, 62,183, 87,248,125, 37,223, 23,209, 67, 41,149, 28,203, 11,103, 25, 2, 12,
+195,205, 68, 74,233,204,253,103,126,255,247, 63,247,226,205,241,191,255,147, 63,101,217, 40,204,204,181,106, 46, 49,161, 0,125,
+164,136, 88, 68,146,248, 37, 66,108, 20, 48, 37,126, 5, 56, 91,130, 11,226, 5, 34,178,111,223,190,183,191,227, 29, 95,255,243,
+175,183, 47,168,242,233,245,175,127,131,131,219,178,163,186, 47,229,124, 21, 89,169,243,133,219,192,137,231, 13, 65,229,141, 86,
+ 52,225, 31,252,212, 91,154,209,104, 39,198,208, 47,232,117,175,127,253,236, 7, 15,190,200, 29,118,200,157, 63,198, 75, 77, 6,
+146,173,225, 55, 74,193, 42, 90, 10,143, 92,123,228,250, 27,110,248,230, 55,190,241, 60, 11,122,221,235,226,205,213,178,234, 23,
+158, 7,164,233,209, 53,118,153, 57, 23,217, 86, 64,169, 20, 94,158,107,197,101,226,111,138,112,117,101,245, 45,111,121,235,151,
+191,252, 63,118, 46, 72,163, 39, 52,219, 27,218,214, 39, 50,198,207,185,127,210,186,156, 55,183,186,233, 52,119,217, 58,231, 54,
+ 88,124,209, 60,251,244, 86,144,191,139,150, 89,175,144, 45, 11,228, 95,124,234,211,187, 44,136,209,152,122,193,135, 13,218, 48,
+ 52, 10,219,206,214, 55,186,182,179, 46, 71,245,238,119, 68, 95,188,103, 70,129,189, 83,224,159,145,189,159, 29,181, 62,169,170,
+ 31,251,248, 39,182,111,217,109,183,222,182,187, 78,162,119,205,131,239, 16,145,182,181,245,205,174,234, 74,239,169, 36, 72, 23,
+ 24,120, 10,175, 88, 89,160, 43,148, 30,191, 95,125,126,110,254,200,117,215,221,251,157,239,244, 11, 58,117,234,214, 93,133, 82,
+ 47,226,168,123, 32,240, 68,206, 60,127,113,106, 21,194,175, 64,197, 16,125, 44, 69, 84,173,174, 74,182, 61, 72, 10,163,250,227,
+218,222,181, 11, 23, 46, 60,254,248,227,117,203, 6,139, 40,216,219,214, 52,111,108,230,141,173,188, 53,205, 82,114, 86,135,242,
+158,187, 48,157,180,214,101,118,217,114,203,174,179,174, 99, 54,118, 57, 7, 34,147,141, 38,217, 72, 19,154, 89,150,210,111, 11,
+101,100,209, 18,203,153,102, 70,251, 71,239,122,215,226,226, 98, 68,176,210,159,146,173,169, 61,248,232,214,211,231,219,245,205,
+ 92, 34, 24, 68, 36,169, 46, 47,232,225, 3,115,199,174, 94,216,154,116,151, 54, 91, 0, 89, 37,169,154, 90, 42,247, 77,170, 16,
+210, 72, 3,116,176, 70,212,148,222,198,143,226,206, 27, 74,240, 70, 61, 69, 96,162, 98,166, 34, 29,249,129, 15,126,232, 95,126,
+250, 83, 34,146, 78,158, 58,181,185,101, 95,251,203, 11, 15,156,221, 60,119,169,109, 59,235, 75,119,208,107,221, 73,107,207,156,
+207, 15, 61,186, 41, 66,213,222,141, 15,252,113,175, 26, 1, 90, 68,169, 89, 94, 84, 42,135,158, 0, 81, 52,207, 81,131,102, 52,
+186,116,233,210,227,143, 63,150,166,163,163,247, 61,188,209,101,194,235,102, 68, 99, 76,122,176, 42, 42,154,185, 49, 86,151,213,
+171, 69,233, 81,217,242,129,210, 55,244, 2, 30,100, 56,104,171,120, 60,153,146, 12, 56, 99, 97, 38, 14, 42,220,120,226,196, 61,
+ 95,254,114,106,246,188, 38,218,195, 33,217,114, 57, 12,234, 42, 8,132,123, 22,116,220,232,246,166,238,208,117, 22,189, 46,170,
+139,178,142,120, 78,129,148, 48, 40,199,103,214, 68,227,202,234, 74, 90, 57,240, 26, 9,112,173,116, 76,163,137,141, 64,145, 28,
+253, 4,247, 44, 36, 65,173,198, 74,109, 45,131, 44, 65,182, 55,118, 67, 70,101, 73,125,235, 23, 51,254,165,246, 8,174,190,250,
+ 85,105,121,255,245,126, 71, 5,113, 17,128,142,246,244,226, 20, 81,112, 97, 78, 75,152,236, 87, 35, 97,202, 14, 45, 49,234,122,
+ 25,134,199, 8, 42, 11, 99, 13, 40, 81,122, 52, 44,150, 30, 62, 3, 2, 73,123,246,191, 38, 10,244, 2,192,162,215,134,192, 99,
+ 0, 38,213,241, 56,170,217,232,110, 74,191,113,181, 8, 29,108, 89,169, 73, 73, 85, 89,156,119, 50, 16, 95,160,137,225,202,215,
+148,221,118,102, 83,129, 17,104,131, 52,218, 28, 19,200,153, 68,144,121, 18, 73, 66, 9,243, 47,133, 81,163,103, 96,108, 72, 51,
+ 53, 35,147, 46, 47, 52, 75,139,141, 2,102,172,208, 23,134,105, 3, 5, 74,154,121,131,182,113, 50, 26, 74,120,119, 36,195, 66,
+134,132,177,154, 77,206, 98, 48,117,176,144, 52, 83, 77,146, 40, 52, 97,114,252, 6,102,194, 6,164,176,225,252,184,185,108,101,
+ 52, 26,121, 3,216, 42, 40,196, 30, 62,170,229, 62,181,108, 71, 90,222,119, 60, 80, 5,103,102, 4,244, 90,244, 59, 16, 82, 81,
+138, 38,225, 76,147, 26, 61,198, 61, 32, 53, 24,101,105, 33, 29,220, 55,183,178, 52,210,190, 61,240,188,237,175,254,173,128,136,
+ 52,225,155, 40,132,133,154,161,207, 87,171,232, 50,232, 52, 87, 15, 78, 84,144,166, 26,216,147, 38, 53, 19, 35, 55, 51, 46,110,
+116, 63,124,186, 91, 91, 29,153,169, 67, 71,168, 61,201,112,115,142, 5,237, 88,147,115, 66,150,246,189, 26, 40,254,208, 1,215,
+138,232, 73,129, 16, 5, 42, 65,163,172,142,163, 15,146,140, 6,247,197, 13,187,184, 97,150,165, 51, 62,252,248,100,110,132,213,
+229,102,155,234,114,214,228, 41,197, 15, 23,111,144,150,246, 30, 43, 73, 94,241,136,225, 15, 3,188,174,153, 99,208,112, 66,242,
+ 24, 22, 75, 93,230,133, 13,107, 59,127, 62,118,245,137,103,219, 39,159,107,175, 60, 56,174,139,161,204, 42,115, 85,110,246, 78,
+ 53, 45,239, 59, 30,182, 77,214, 82, 48, 18, 33, 22, 56, 79, 10, 93,194,183,151,149,199, 33, 16,180,153,155, 91,174, 84, 14,115,
+151,168, 3,108, 78,237,129, 71, 55,151, 22,210,234, 82, 34,135,124,176, 65,205, 89,158,243,159,210,242,218,113, 9,104, 31,225,
+103, 2,241,166, 64, 80,129, 69,176,242,101,189,190,247,245,116,217,166, 93,112,158, 29,211, 46,184, 45, 66,140,192,143,158,158,
+254,224,169,201,225,125,227,166,209,153, 96, 33,156,205, 3, 5, 34,105,121,239,177,242,179,183, 92, 52, 36, 16, 30,189,196,192,
+ 88, 39,138, 91, 6, 69,114,199, 46,135,143, 6, 5,234,203, 41, 6,168,129,136, 82,209,182,242,208,227,155,207,158,239,174,216,
+ 63, 46,122, 16, 9, 90,229,192,120, 31, 37, 45,174, 29,173,245, 64,233, 66, 80,226,202,126,223,101,255, 28,204,142,142,140,152,
+ 49, 59,173, 58, 0,145, 2,173,178,230,175,145, 60,132,179, 23,217,220,202,103,206,110, 94, 88,207,151,173, 52,227, 70,139,209,
+245, 70, 15, 32, 45,175, 29, 11, 58, 78,224,172, 82,228,222, 35,173,172, 44, 76,169,248,188,100,227, 0,107, 47, 66,101,237,181,
+ 97, 38, 69,138, 76, 66, 32,114,105,203, 30,250,193,214, 35, 63,218, 50,147,149,165, 52,106,180, 87,233, 97,107,161,160,181, 85,
+ 11,100,128,216,135,202, 74,208,126,196,156,142, 37, 34, 84,150, 60, 78,252,167,248, 13,244,134,143, 95, 4, 80,138, 64,251, 69,
+ 71,131, 78, 27,197,194,124,186,234,224,252,193,181,241,158,165, 6, 7,142,222, 81, 57, 81,145,147,123,191,134,165, 39,211,155,
+168, 72,165, 53, 5,133, 22,197,179,160,118, 97,164,231, 45,213,190,151,247, 5,161,197, 30,130,205,234,111,246, 54, 72,109, 80,
+213,252,190, 56,236,248,192, 48,247,168,177,234, 78,155, 72, 22,113,104,219,127,157, 9,240,132, 63,231, 77, 10, 43,153, 35, 41,
+ 2,231, 22, 5, 91, 43,146,151,240,190, 66,130, 16,138, 80, 49, 68,176, 93, 24, 65,208,179,178,186,120,166,172, 44, 58, 10, 2,
+111, 91,176, 39, 14, 4, 14, 82,156,103,100, 72,126, 97, 99,216,158, 12,111, 59,140,201, 85,145, 81, 6, 73,244, 95,156, 19, 85,
+224,123,212, 14, 12, 34, 39, 25, 66,247,197,141,153,183,103,100,104, 48,238,229,139,172, 10,254,229,138,205,190,100,172, 9, 57,
+ 2,144,240,196, 78,163, 9,236,172,177,200,188,188,181, 26, 20, 73,113, 10, 87,108, 94,168, 55, 35, 73,243,106,148,181, 91, 32,
+194,232,188,148, 44,170,190,195,162,123, 67, 68, 55,163,255,103,167,151,185,144,148,168,121,129, 91, 46,197,170, 56, 41, 98,254,
+193,189,225,211, 34,147, 6,197,172,212,173,125, 89,132,210, 49, 21,235,201, 31,194,210, 40, 5,165,250, 50,175,133,221, 75,149,
+136,229, 9,132,153,235,111,196, 77,138,149, 73,149,112,214, 38,198,248,146,162,169,241, 97, 21,147,132, 4, 44,229,111, 46,254,
+158,180,112, 64, 22,120, 19,136, 94,103,195,105, 71,217, 4,211, 90,176, 88, 4, 69,127,151,149,254,142,245,153, 1,106,153, 22,
+ 77,186, 40,239,195,213, 88, 8,161,202,200, 5,236,214, 31,254,155,102,181, 42, 96,209,123,239, 33, 69,212,212,200, 9, 44,172,
+206, 4,168,243, 31, 96,124, 42, 11,117,113,128, 18,151, 68,165, 22,176, 8, 87, 16,194, 29, 48, 38, 36, 82,166,194,140, 23, 41,
+253,189, 72,100, 16,221, 91, 8, 84,130, 31,233, 59, 45, 16,179, 82, 56,122, 1, 30, 54,103,176,194,182,172, 69, 71, 49,183, 96,
+ 93, 74,161, 39, 19, 65,185,116, 7, 83,118,184, 84, 62,197,168,132,219, 74,180, 87, 26,102,175, 60, 94,121,188,242,248,187,210,
+111,125,161, 75, 0,203,123,246,172,236,217,179,180,180,188,122,217,234,218,222,181,213,203, 46, 91, 93, 89, 89, 92, 90, 94, 90,
+ 90, 24,143,231, 60, 11,148, 25,192, 76,106,214,217,117,221,230,230,198,133,139, 23, 46, 94,188,244,228,147, 79, 92,186,120,233,
+252,133,243, 23, 47, 92, 56,119,238,220,197,139, 23,255,238, 9,104,113,113,241,216,241, 87, 95,121,229,149,135, 14, 30, 92, 93,
+189,108,113,105,177,105,154, 29,120,222, 0,168,219,241, 33,219,168,180, 3,122,111,143, 88,213, 71,215,117, 27,235, 27,231, 47,
+156,127,252,241,199,206,220,127,255, 3,103,206,116, 47, 83,231,251,101, 19,208,193,131, 7, 79,158, 58,117,211, 77, 63, 49, 55,
+ 55,142, 25,131,151, 16,252, 80,193, 3,200, 0,151,138, 95, 43,199, 13, 81,168, 23,246,222, 64, 82, 69, 94, 40,125,211,200,185,
+157,165,122,246,236, 35, 95,185,231,158,211,167,239,179,151,113, 42,245,165, 8,104,121,121,249,208,161, 67, 55,223,252, 19,199,
+142, 29,215, 38, 41,148,181, 49, 60,192,185,182,201, 8,187, 42, 77, 63,107, 50, 3, 95, 99,182,225,254,188,223,103,167,230, 80,
+201,133,131, 22,131,119,225,159,123,238,185, 63,251,159, 95, 61,125,250,244, 51,207, 60,243,183, 34,160,131, 7, 15,158, 56,113,
+226,200,145, 35, 7, 15, 29,202,217, 80,144,230,153, 22,146,188,144,218, 96,134,154, 62, 3,205,207,160,189, 51, 77, 53,217,133,
+ 72,191,131, 12,240, 98, 79,162,112, 21, 85,147,138,224,236, 35, 15,127,235,155,223,188,247,187,247,182,109,251,242, 8,232,238,
+187,239,158, 76,219,153,142,238, 16, 37,125, 17,201,204, 82, 30,134,119,187,237,201, 93, 94,182,141,182,241, 2,170,180,141,186,
+ 48, 52,195,106,125,195,201, 74, 0,152,108, 77,190,242,149,123,238,185,231,203,127, 83, 1,125,240, 67, 31, 30,212,217,124,126,
+125,217,225,121,134, 52,153, 89,185, 12,155,169, 59, 84,105,214, 8,119,240, 90,250, 17,141,109, 76,142, 23, 87,177,242,199,199,
+ 38,162,231,152,218,182,253,163, 63,250,131,211,167, 79,255,191,205, 63, 5,157,161,140, 52,176,178,247,100,251,215, 14,145,113,
+155,208,134, 74,183,141, 98, 49,108,248, 14,245,116,160,161, 67,234,253, 96,218,165,194,254, 28, 60, 63,216,198, 97,155,169,212,
+240, 78,167,177,248, 85, 85,111,185,229,228, 29,119,220,121,248,240, 21,143, 61,246,131,157,103, 61,188, 8,159,140,102,220,113,
+143,187,247, 31,118,181, 44,238,248,109,248, 36,119,125,182, 52, 74, 11, 0, 99,180, 40,234, 75,224,211, 25,107, 42, 12,128,120,
+178, 64,113,206, 24, 45, 35, 63,222, 98, 10, 4, 51, 51, 71,207,209, 59, 55,154,145,111,184,241,134, 19, 55,221,120,225,194,165,
+ 63,254,226,127,120,224,129, 51, 47, 85,131,110,123,237,235, 88, 6, 80, 75, 67,119,200,182,216,241, 68, 45,172,235,110,178,239,
+ 36,114,216, 10,158,189, 70,255,100,129,252,114,102,155,205,231,148,131,155, 49,104,251, 13,251,129, 40,205, 11, 72,143, 93,248,
+173, 71, 55,211,138,120, 29, 38,148, 94,179,134, 91, 76,227,120, 52, 58,117,234,214,183,190,237,246,179,103, 31,121, 41, 60,175,
+244,218,219, 94, 59, 52,142, 98, 55, 3,210,208,144,255,179, 27, 75,103,183,166,239,172, 42,114, 70, 63,115,102,219,218,180,181,
+ 54, 91,118,142,239, 80, 42,129,127, 58,141, 25,125,203,125, 24, 16, 67, 18, 61, 94, 92,219, 57, 69, 34,168, 19,237,113, 39,168,
+140, 58,111,240,202,173,183,222,250,198, 55,190,233,201, 39,159,124,250,233,167, 95, 80,131,110,123,237,110, 78,152,187,231,196,
+179,175,236,221,237, 0,228, 28, 6,244, 58,155,236,144,107,219,217,214, 52,111,181, 57,119, 78,214,137, 27,178,194, 54,151,254,
+230, 2,179,196,204, 39, 15,250,107,181,155, 83, 6, 81, 3,227, 66, 52, 73, 7,100,128, 2,163,206,222,149,101, 27,141, 70, 39,
+ 79,158,186,241,196,137,239, 63,248,224,243,249,166,116,235,109,183,245,136,116,255,181,171, 35,226,160,175, 93, 9, 96, 47,158,
+143,147,108, 59,110,108,182,155, 91,214,117,133, 19,206,225,247,248,161,206,199, 81, 6,179,114,148, 65, 91, 20,149, 93, 82,206,
+189,232,201,226,168,147, 85, 67, 60,122,232, 2,103, 56,125,142,216,218,158, 61, 43,127,239,205,111, 94, 94,218,115,255,253,167,
+119, 17,208,169, 83,183,190, 56,195,139, 5,110, 43,172,140,104,228, 13,140,178,186, 25, 14,184, 41,126,223,155,147,124,113,189,
+155,180, 57, 91,249, 87, 43,228,249, 1,247,221,141,194, 10, 18, 43, 51,163,247,101,110,170, 55, 87, 22,198, 31,139, 61, 57,162,
+ 57, 8,127,197, 15,233, 48, 60,202,160, 39,203,158,120,127,229,149, 87,190,237,109,183,127,239,123,127,125,233,210,165, 25,211,
+249,197,247,188,103, 23,107,138, 33, 2, 78,166,220,156,228,245,205,188,190,105, 91, 83,107, 91,118,214, 91, 89, 2,154,145, 46,
+140,117,113, 62, 45,204,233,194,188, 46,205,167,241, 40, 24, 29, 34,210,117,188,180,217,109,108, 89,229,178,160,212, 10,128,168,
+162,140, 4, 70,193,159,226,151, 50,241,164,253,148,167, 51,105,181,175, 54, 6, 9, 99,207,137, 99, 41,246,250,204,146,144, 84,
+ 35,221,110, 9, 84,157,139,242,143,249,250,159,127,253,191,254,151,255,220,135,249,193, 12, 34, 85,100,125,203, 30,123,106,242,
+196,179,237,230,150,181,153,189,207,155, 41,165, 42, 33, 4, 59, 34,184, 52,138,241, 88,247, 44,166, 67,107,163,185, 17, 38, 93,
+204,168, 20, 1, 65,235,156,157, 49,126, 53,168, 2, 6, 83, 81, 51, 40,212, 68, 85,148,102,208, 68,129,154,247, 30, 76, 77, 1,
+173, 45, 68, 84,154, 93,136,170,176,115,203,234, 40,128,154,198,196, 75,105, 93, 68, 6,224,237,159, 92,168,195, 38, 66,229,155,
+222,248,166, 3,251, 15,252,201,159,252,177,131, 45,233,150, 91, 78, 78,167,118,246,137,173,239,222,191,254,189,255,179,254,240,
+227, 91,207,156,111,167,173,183, 58,234, 65, 25, 69,233,163, 93, 95,187, 13, 46, 44,162,223, 45, 49, 97,151,185, 53,181, 54, 91,
+ 28, 88, 96,245, 0, 11,103,251, 74,182,146, 59,136,143,179,212, 3, 51,104,195,200,201,158,196, 59,120, 50, 78,196,232, 35,104,
+ 92,103, 72,106,238,109, 92, 53,232,119,125,226, 25,109, 69, 12,179,205,234,254,205,108,255,254,253, 55,221,116,211,125,247,221,
+183,181,181,149,158,154, 30,121,240,209,205,167,207,183,109,222, 70, 3,230,108, 49,197, 24, 82,234,153,116,229, 68,147, 50,234,
+ 22, 59, 70,136,200,226, 60,150, 23, 85, 81, 28,176,183, 50,135,100,213, 56,255, 67, 42,163,184,182,239,130, 53, 87,250, 40,149,
+ 46, 57,224,221, 85,254,157,231,185, 61,169,154,236,251,128, 34,226,214,217, 39,108,179,209,122, 27,123,125,192, 78,226,194,194,
+194,235,223,240,134,239,222,123, 47,174,184,225,103,119,175,204,135, 87,155, 45,175,250,180, 13,101, 10, 23,101,160, 17, 34, 34,
+163,132,213,229, 52, 55,134,150,145,191,234, 4,220, 13,233,224, 87, 45,179,195,241,171, 34,252,142, 34, 85,215,163,170, 42, 49,
+100,128, 24, 58,173, 87,219, 86,206,186,173, 41,124,206,182, 7, 51,103,144,186,250,194, 25, 92, 96,224,158, 0, 77,202,204, 70,
+184, 19,230,226,246,250,179,167,117,199, 38, 87,118, 73, 97, 78,248, 40,155,145,128,162, 73, 2, 97,206, 78,208, 15,127,131, 50,
+ 95, 8, 8, 96,131, 81, 6,170,185, 23, 16,247,201, 9, 4, 68, 85, 77, 9, 72, 82,133,250, 88,175, 40,232,210, 25,188,189,208,
+ 73,253,248, 64, 0,144,148, 52, 37,159,206,156, 77, 90, 89,137,152,195, 98, 71,250, 17,199,202, 67, 34,141,162, 73, 27,235,171,
+198,210,120,151,126, 50,173, 38, 59, 65,160, 0,203,147,232,187,239, 67,174, 24,169, 34,170,240,195, 30, 16,227,188, 61, 47, 74,
+181,232, 81,120,232, 18,206, 92,173, 8,100,203,126,152,131,153,170, 40, 96,113,176,152, 32,169,250, 0,116,141,128,113,116,134,
+ 0, 64, 22, 38, 29, 53, 50, 30,105,210,186, 95,236,241,185,114, 92,158,148,126, 51, 7, 4,202,138,115,246,195,218, 98,146,165,
+129,183, 67,119,240,191, 56,147, 4,150, 98,167, 14,223,247, 32,135, 21,137,199,120,163,167,107,217,226, 51, 81,135, 66,133,234,
+ 4, 3,176,140, 49, 51,199, 84,189,168, 87, 22, 64, 82,152,133,103, 45, 49,190,140, 95,219,204, 92,183, 42,212, 66, 88,227, 70,
+199,227, 52,110, 84, 19, 32, 50,156,232, 24, 12, 47,239,172,179,135,117, 12, 75,170, 21, 52, 34, 1, 76,165, 25, 12,163,244,249,
+ 67,229,112,212,212,223, 48, 36,136, 20, 26, 27,250, 65, 8, 47, 27,253, 67,178,149,232, 91, 6,108,193, 58, 55, 43,101,188,219,
+117,129, 57, 76, 44,244, 40, 27, 21, 8, 1,121,188,135, 66, 69,251,233, 29,113,175,212, 52, 24,143,211,252, 92,154, 27,197,193,
+ 10,197, 7,148, 92,104, 71, 10,178,131, 5,184, 67, 45, 42,104, 46, 2, 82, 5,141, 73,207,220, 30,158, 50, 80,147,140, 18,208,
+ 33, 85,100,144,170,187,133,185, 24,116,133, 96,219, 68,112,169, 76, 95, 63,251,174,146, 13,233, 51, 10,213, 58,204,157,142,133,
+127, 76, 10,243, 23,184, 92,224, 34, 67, 82,104,131,241, 40, 45, 46, 52, 11,115,169,105, 92, 44, 17, 25, 81, 82,182,186,105,165,
+176,173, 7,145, 84,203,154,253, 83,105,100,197, 19,177, 76, 94,211,114,131,210, 20, 96, 33, 45,245,202, 82,102,218,221,198,192,
+ 26,179,234, 55,147,194,102,100,145, 60, 69,204, 25,113,197,147, 69, 34, 87,168,124,133, 91, 75, 56,211, 23,225, 98,172,120, 73,
+ 11,159, 77,104,148,235,109, 38, 5, 7,247,206, 29,218, 55, 55, 55, 6,203, 38, 90,112,171,170,239,221, 85, 55,250,144,190, 43,
+126, 85, 57, 11,181,226, 7,251,131,178,112,249,171,239,218, 94,111,178,175,193,217,179,250,235,223,196,204,203, 48,168,180,133,
+148,164,210,164, 20, 28,155, 30,247, 26, 56,203,218,146,168, 3, 49,129,135, 73,153,245, 15,102, 77,219,201,164,181, 46,163,226,
+ 20,154,176,111,101,116,252, 85,139,123, 87,154,221,128, 94,236,232,170,108,111, 44,245, 28,196, 29, 51,149, 69,225, 7, 21, 73,
+ 74, 77,161,128, 86,231, 52, 4, 21, 10, 25, 45, 48, 4, 11, 3, 41,167, 71, 48, 78,163, 43,250, 83, 90, 94,133, 46, 37,128, 9,
+ 0,115,102, 95,207,234, 15,102,153,122,205, 32, 16,228, 56, 11, 67,218,204,206,232, 69,159,243, 37, 81,142,104, 0, 96,102, 79,
+157,155, 62,249, 92,155,146, 28,222, 63,190,254,154,197,249,185, 52,136, 43,218, 35,108,206,141,162,104, 9,246, 78, 11, 3,234,
+ 25, 18, 81,187, 89,156, 59, 65,237,207, 73, 40,231, 76,229,236,116,224,237,179,144, 69,100,181, 22,100, 33,156, 73,245, 61, 12,
+151,132,254, 40,136, 97, 74, 61,152,175,171,168,134,244,192,114,120,178, 58, 20, 74, 74,215,113,107, 98,155, 83,155,182,204, 17,
+ 97,226, 38,200,254,140,152,160,105, 25, 47,172,103,167,132,102,227,194, 88, 71,105, 56,128, 87,170,121,108,195,235,156, 44, 84,
+ 15, 44,232,117,115, 48,250, 48, 59,162,122,232,248, 59, 68,234,237, 87,170, 53, 49, 76,154, 81,156,244,246,108, 27, 65, 51,236,
+ 17, 51, 68,130, 63,160, 28,207,168,187,176,156, 72,199,114,166, 34,204,216,229,194,234, 35,182,125,116, 25,240,168,113,106,166,
+251, 86, 9, 80,227, 49, 14,174,205, 93,115,249,220,190,213, 81,129, 19, 74,106,204,218, 91, 26,150,243, 59,218,224,187,156, 55,
+ 5, 28, 58,250,142, 30, 47,192, 12,223,156,210, 11, 25,168,104, 66,141,131, 50,204,147,102,174,224,131,182,229, 4,158, 97,167,
+116,208, 44,162, 0, 52,233,172,247,139,125, 88, 41,211, 93, 82,204, 75, 56, 64, 54,128,126,146, 32,106,141, 18,165,133, 73,177,
+103,169,185,246,240,252, 21, 7,130, 49, 62,184,116,239,103,130,201, 60, 91,167, 96,231,156,247,129, 99,111,175,238,191,128,120,
+197,127,246,100,255,161,188,106,252,143, 91, 17,204,180, 47, 42,255, 23, 40,131, 85,253,171,122,167,111, 66,230,242, 89, 53, 94,
+ 86, 52,130,210, 31,249, 66,214,163,169, 80, 45,111,112, 96,113,137, 29, 40,132,124,148,128, 1, 85, 57,176,119,116,228,138,133,
+181,149,166, 73,129,252,176,186,180,193,150,148,230,219,236,144,183,106, 19,140,211,202,119, 68, 95,115, 85, 98,120, 89,135,213,
+ 76,146, 53,215,134, 13,202,155,216,133, 58, 95, 91,246,216,130, 61, 41, 0,196, 1,144, 64, 66,203, 73, 47,145, 73,244, 3, 62,
+133, 9,237,185, 55, 10,234, 88, 69, 4, 1,253,163,203,140,137, 51, 24, 45,198, 79,130,200,106,242,212,179,237,147,207,182, 70,
+105,146,238,221,211,236,191,108,180,119,165, 89, 93,110,230,199,169,240,231,135, 88,127, 33,125,250,109,152, 53, 37,129, 41, 59,
+ 28,159, 51,232, 90,213,177,187, 50, 35, 35,232, 61,184, 5,107,180,202,104, 0, 85, 5, 7, 90,226,240, 28, 79,178,140,125,209,
+ 82, 56,214,131, 27, 15,224,167, 31,164, 99,156, 32, 90, 14,245,169, 3, 35, 38,253, 57,151,209,252, 41, 67, 20, 28, 22,145,126,
+182, 85, 2,104,124,230, 66,251,204,249,232,217,167,132,249,113, 90,152,211,213,229,102,101,185, 89, 93,106,150, 23,211,104,228,
+181, 74,239, 60,154,190, 97, 87,206,168, 47,252,255, 50, 68, 55, 48,113,231,214, 22,118,240, 96,230,172, 12, 47,132,252,250,233,
+240, 8,175,206,160, 21, 49,244,106, 22, 3, 79,113, 65,115, 77,213,184,234, 41, 0, 0, 3,116, 73, 68, 65, 84,163, 22, 19,129,
+184, 58,160, 15, 71,102,131,161, 97, 26,225,149, 96, 47, 14, 63, 20, 39, 34, 68, 76,251,163,223, 68,131, 21,220, 87,196,178,108,
+108,118,235, 91,120,230, 66, 23,130, 47, 38, 6,149, 20,112,129, 52, 70, 27,120, 94,148,122,196,162,112, 10,149,183,216,178,234,
+120,131,150, 61,200, 21,201,129, 37,134, 99, 48,195,204,248, 81, 57,240,183,208,195,251,249,148,240, 43, 6,243,212,107,118, 37,
+136,115,104,225,125,216, 50, 92, 49,104, 86,246, 8, 15, 81,206, 14, 2, 88, 63,187,116,127, 96,126, 4, 43, 64,175,112,216, 27,
+123, 40,176,151,241,116,177,162,169, 16, 16,139,169,148,128, 85, 15,164,171,187,238,176, 93,129,129,164, 76,238,115, 48,181,143,
+225, 28, 24,177,163, 67, 81, 57, 84,140,217,129,114,193, 80, 77, 63,226, 1,131,115,137, 37,220,205,204, 62,248,115, 54, 28,184,
+245,225,198, 58, 88,134, 24,107,240,255, 19, 64, 63,104,224,110,194,232,199,255, 17, 44,183,234,214, 10, 13, 27,136,193, 44, 54,
+253,238, 21, 41, 59, 27,188, 88, 65,109, 20, 80,172, 70,196, 2, 18, 15,143,211,171,219, 59,211,106,220,222,100, 44, 19,238,172,
+242, 43, 1,161,204, 0,120,201, 71,120,101, 41, 82, 73,230,101,167,157,223,142, 62,169, 67, 15,223, 73,204,128,214,121, 46,235,
+ 7,169, 81, 64,208,122,236, 48,122, 25,149, 32, 72, 14,103,247, 72,109, 88, 39, 32,251,140,185,244, 7, 34,122,150,132,180, 74,
+138, 21, 90, 43,254,165, 66, 12,216,193,168, 26,180,149,193, 25,241, 69, 0,173,206,190,198,172,176, 59,131, 15, 56,132, 2,148,
+244,192, 10,246, 85, 7,226,172, 2, 85,172, 29, 39,169,195,105, 84,212, 89,192,162,154,240,255,133, 0,251,137,130, 72,142, 93,
+214,245, 3, 96, 13,251,184, 94,133,135, 26,206,124,157, 22,105,135,149, 34,167,151,166,212, 67, 25,103, 12,109,166,217,223,207,
+246, 85,125,243,139, 14, 32,219,210,180,137,153,157, 26,201,165,250, 64, 45, 99, 58,125,226, 82, 42,116, 8, 2,138,194, 96, 70,
+175, 60, 3,139,161, 64, 41, 35,204, 37, 89,170,147, 8, 81,184,201, 64,203,203,148,124, 19, 97, 18,131,138,165, 32,180, 37, 52,
+133,123,160,247,166,138, 49, 85,103, 37,195, 49,162, 74, 46, 24,102,217,245, 80,203,222, 93, 21,141,159,241, 12, 14,134,232,240,
+ 84,153, 62,235, 48, 97,159,232, 87, 85,170,120, 21,100, 80,118,163, 76,241,244,177, 33,148,203,243, 79,159, 92, 43,165,112, 37,
+ 75,244, 67,149,172, 9, 96, 83,231,208, 66,129, 75, 49, 36, 5, 84,238, 51,150, 58, 64,103, 81,194,135,150,149, 36,126, 87,250,
+148, 84,119, 53,115,202, 1, 57, 60,156,188, 4,109, 31,157,114,205,178,154,195,200,224, 38, 2,183,146,130,118, 85, 91,146, 58,
+ 18, 42,125,109, 88, 71, 48, 67,109,202, 91, 81,252, 17,163,153, 87,203,154,210,201,175, 55,212, 48,172, 93,202,152, 58,130, 72,
+ 83, 75,114,151, 20, 42,131,192,234, 33, 80, 98,245, 0, 18, 86,135, 58, 3, 55,201,182,191,217,207,213, 32, 12, 99, 80,205, 50,
+132, 35,177,154, 26, 92,138,241, 91, 5,193, 77,252,127, 19, 82,231,159, 4,136,193,119, 72,127,175, 69,120, 97, 76,225,206,165,
+ 15, 87, 67, 59,235, 67, 73,196, 53, 66,208,184, 44,122, 58, 69, 28,102, 58, 60, 39,176,248, 50,179,254,184,132, 25, 73,197, 61,
+187, 5,197,240, 19,118,161,206,148, 34,168,247, 95,165,186,234, 39, 26, 7, 67,200,220,230,152,234, 73,247,126,195, 53, 17,148,
+190,198, 55, 17,141,113,193,194,174,130, 40,123, 97,133,140,226,255,129,210, 39, 45,226,179,200,210,227,176, 33,227, 70,122, 47,
+ 93, 78,237,232, 19,247, 33, 83, 62,166,125,195,113, 64, 6,163,239,213,163,247, 32,255,208,212,172, 66,144,152, 37,204,128,125,
+178, 80,245, 14,149,244,132,254,176,164, 34,247,254, 32,202,122, 40,126,137,136,213, 54, 88, 90, 60,213,253, 84,111, 84,171,221,
+ 8,130,195,151, 13,199, 97,217,175,242,255, 2,210,193, 8,215, 78, 23,231,219, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+ 0};
+
diff --git a/source/blender/editors/datafiles/splash.png.c b/source/blender/editors/datafiles/splash.png.c
index 589fc124f4d..e374742c8da 100644
--- a/source/blender/editors/datafiles/splash.png.c
+++ b/source/blender/editors/datafiles/splash.png.c
@@ -1,6389 +1,5790 @@
/* DataToC output of file <splash_png> */
-int datatoc_splash_png_size= 204235;
+int datatoc_splash_png_size= 185087;
char datatoc_splash_png[]= {
-137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0,
- 13, 73, 72, 68, 82, 0, 0, 1,245, 0, 0, 1, 26, 8, 6, 0, 0, 0, 8, 90,206, 70, 0, 0, 0, 25,116, 69, 88,116, 83,111,
-102,116,119, 97,114,101, 0, 65,100,111, 98,101, 32, 73,109, 97,103,101, 82,101, 97,100,121,113,201,101, 60, 0, 3, 29,109, 73,
- 68, 65, 84,120,218,236,189, 9,184,101,215, 85, 30,184,214, 62,247, 85,149, 74,150, 69,201,182, 36,207,182,108, 3, 14, 6,227,
-148, 12,105, 51,180, 2,229, 38, 76, 25, 32, 18, 31,233, 4, 58, 12, 82, 66,210, 29,147,175, 45, 41,157,116, 67,186, 25, 44,165,
-137, 51, 0,253, 89, 33, 77,103,160, 33,150, 29,135,208, 31, 9,113, 57, 56,216, 38, 9,184,130, 13, 4, 27, 27,201, 50, 6,100,
- 89,182,202,146,165, 26,222,123,119,175, 62,195, 26,254,181,239,173,170, 87, 85,239,149, 84,230,108,125, 87, 85,245,222,189,231,
-158, 97,239,189,166,255,255, 23,139, 8,205, 99, 30,243,152,199, 60,230, 49,143,203,127,148,249, 22,204, 99, 30,243,152,199, 60,
-230, 49, 27,245,121,204, 99, 30,243,152,199, 60,230, 49, 27,245,121,204, 99, 30,243,152,199, 60,230, 49, 27,245,121,204, 99, 30,
-243,152,199, 60,230, 49, 27,245,121,204, 99, 30,243,152,199, 60,102,163, 62,143,121,204, 99, 30,243,152,199, 60,158,242, 99,113,
-166, 95, 48,243, 94,124,159, 29,116,127,255,122, 65, 41, 84,106,165,223,237,255,126, 66,127,183,107,252,186,153,170, 55,143,121,
-204, 99, 30,243,152,141,250,222,141,193,104,115, 41,124,195,223,248,230, 47,250,129,155,191,244,197, 95,181, 88,112,247,175,223,
-251,209,119,127,255,207,188,239,127,223,220,174,199,118,219,176,207, 99, 30,243,152,199, 60,230,241,135,105,240,153, 34,218, 61,
-136,212,135, 3,238,251, 43, 95,247,121,255,240, 71,191,245, 21,223, 45,199,159, 32,186,234,106,226,103, 93, 67,191,248,190,143,
-222,255,221, 63,246,174,191,113,223,131,159,121, 91,255,158,109, 11,182,231, 72,125, 30,243,152,199, 60,230, 49,143,157,143, 75,
- 89, 83, 31,140,250,254, 43,182,158,184,138, 30,124,128, 78, 62,248, 49, 58,241, 59, 31,160, 19, 31,250, 48,253,241, 47,120,222,
- 13,191,244,195,127,234,159,124,253,171,159,255,183,250,247, 28, 82,131,206,243,227,153,199, 60,230, 49,143,121,204,227,169,105,
-212, 71,195,254,198,119,252,222, 79,252,216,175,126,242,125, 7, 15, 29,160, 69,199, 84, 31,126,144, 78,124,240,191,210,179,175,
-216, 56,240,175,255,215,111,248,223,254,230,183,124,241, 63, 98,166,151,205,134,125, 30,243,152,199, 60,230, 49,143,243, 52,178,
-151, 56,253,126,160,127,125, 78,255,250,130,191,244,229,215,190,238, 71,190,238,121, 95,191,127,155,232,228,233, 45, 42,251,123,
- 35,255,194,151,210,190,107,159, 69,111,123,247, 7,127,227,123,126,252, 93,119,124,252,248,201,127,215,191,183,210, 5,164,226,
-231,244,251, 60,230, 49,143,121,204, 99, 54,234,123,103,212,209,176, 95,221,191,158,247,229, 47,189,234,219,255,249,183,222,240,
- 93, 47,188, 98,113,224,196,137, 45,162,174,163,242,156, 23,209,129,231, 63,159,238,251,131, 79, 61,118,219,143,190,243,135,223,
-241,190,223,255,241,254,189,159, 49, 91,189, 27, 70,125,143,174,109,248,206,195, 52,149, 15,134,113,127,255, 61,247,127, 54, 79,
-158, 63,108,215, 59, 15,120,246,119,223,148,159,253,237,239,188,255,114,254,158,167,248, 58,155, 39,220, 60,158,178, 70,221,198,
-144,246,127,122,255,186,238,250,167, 47,254,228,191,248,246,151,252,245, 47,191,254,202,235, 79,157, 92,142,129, 57, 95,247, 60,
-186,226, 5, 47,166, 77,169,244, 63,255,228,123,254,233, 63,252,217,223, 24,106,237, 31,163,243, 64,199,159, 99, 33,220,160,175,
-157,140,227,253,189, 56,182,195,239,124,123,255,199, 17,253,231,157,253,231,238,250, 44,223,108, 62, 43,174, 87,157,147, 35,106,
- 60, 14,195,175,134,231, 62, 24,145,123,251,107, 59,190, 11,223,211, 30,159,118,123, 14, 94,132,193, 28,175,183, 55,154,199,119,
-248,217,252,236,111,127,231,158, 60,251, 75,245, 61,151,208, 17, 58,251, 60, 91,115,255,103,163, 62,143,243, 25, 23, 74,105, 43,
- 52,165,197,175,122,198,211, 54,190,240, 25, 87, 46,158, 81, 37,188, 0,214,255,245, 27, 17,139,253,132,237,231,254,219,225,187,
- 15,110, 45,229,228,247,254,252, 39,254,237,223,251,211,207,255,211,175,185,246,202,207,217,220,234, 63,113,252, 83,116,234,224,
-211,104,227, 25,215,209, 63,184,237,166,111, 59,252,210,235, 62,239,117,111,250,165,215,127,250,241,205,119,211,238,208,222,110,
-238, 95,111, 56, 79, 79,249,222,254,117,180,191,164,123,230,105,243, 89,147,101,184, 89, 95,103,114,240,204,152,188,169,127,255,
- 61,234,184, 92,140,113, 31,190,243,237, 23,240,185,163,253,235,181,187,108, 96, 6,195,242,222,230,199,131,193,188,115,158, 29,
-187,110,200,119, 62,207,238,190,233, 30,117, 94,142,207,119,111, 30,151,202,168,143,124,243, 43,247,119,135,127,224,107, 95,248,
- 67,223,250,202,107,111,186,250,138,141,125,149,203,100,176, 75,153, 94,253,223,121,209,165,127, 15,127,114,215,197,191,121,250,
- 93, 31,155,203,150,112,221, 94, 44,168,192,113,182,151, 91, 84, 79, 50,125,251,107, 95,241,165,175,122,233,179,222,250,157,111,
- 60,250,125,239,253,208,195, 63,217,127,255,105,186,244,124,246,113, 97,246,155,251,240,231, 45,187, 17,185,205,227, 73, 29,239,
- 61,207,247,223, 58,108,190,253,243,191,101, 47,162,230, 39, 97,220,124,134,107,156,141,250, 83, 97,158,221,125,211, 45,189, 97,
- 63, 54,223,190,121, 92,170, 72,253, 89,119,127,227,139,223,248, 61,175,121,238, 87,108,158,168, 36,149,169, 43, 60, 5,240,194,
-211,171,255, 59, 87,158, 76,239,240, 26,126, 63,196,246,181,255, 71,167,233,253, 50,253,174,235,255,177, 40,220,121,154,137,237,
-115, 66,181,255,251,233, 19,155,244, 69, 47,188,246, 89,111,255,161,111,250,209,239,249,241, 95,124,217, 79,255,251, 15,253,112,
-255,219,135,105,247,196,106,142,158,229,119, 71,214,252,251,237,253,185,190,118, 54,236,159, 53,227,152,102, 98,142,245,207,244,
-168, 70,242,135,244, 89,223, 10,115, 96,136,180,222,220,255,238,198, 93,122,246, 67, 84,182,147, 26,241, 94,204,179, 91,215,252,
-236, 80,111, 76,110,238,141,201,189,243,148,216,227,121,118,251, 59,143, 66,198,100,253, 60,187,251,166, 27,231,136,125, 30,151,
- 36, 82,223,191, 81,110,248,134,151, 31,122,181, 60,177, 69, 91,167,250,160,185,214,201, 72,123,102,221,226,121, 14,187,219, 21,
- 42,207,184, 86,141,123, 29,131,116,170,154,197, 31, 63,167, 22,190,212,201,240, 15,209,252, 80, 98,239,166, 67,108,158,222,162,
-171,247,237, 43,255,239,237, 95,247,189,175,254,188,235,191,240,111,252,196,123,110, 63,189,181,124,223,110, 24,246,254,220,207,
-154,218,212,232,252, 13, 20,233,179,195,186, 8,239,154,167,208,101, 61, 6,163,122,207,186,200, 91,141,246,176, 1,223,219, 63,
-255, 55,129, 17,188, 97, 23,159,253,189,230, 68, 92,202,161, 41,225,195,141, 83,123, 4, 34,248,217,168,239,197, 60, 91, 19,121,
-171,209,158,230,217,221, 55,237,213, 60,155,199, 31,162,113, 33, 60,245,110,115,171,126,234,103,126,253,225,255,204,229, 52, 93,
-185,111, 73, 87, 94, 65,116,240,128,232,171,198,223,247, 87, 58, 80, 54,123,227,188,213,123, 2, 7, 39, 35, 95,235,248,202,224,
-143,254, 61,245, 84,255, 58,217,239, 56,253,159, 67,118,125,248,183,108,234,251,165,127,127,165,173,101,165,237,211, 75,250,222,
-111,126,245,145,183,223,253,205,255,234, 69,215, 61,253,155,212,236,239, 41,223,190,223,120,135, 69,247,218, 38, 98,186,121,158,
- 62,151,245, 24, 50, 45,183,237, 36,149, 62,188,175,137,168,239,184,204,175,253,230, 38,122, 68,156,200,205, 26, 61,206, 99,183,
-230,217,237,239,188,109, 39,169,244,225,125,159,101,243,108, 30,151, 73,164, 62,132,197,159,186,227,103, 31,248,190,159,255,205,
- 79,126,211,203,175,191,226,133, 67, 34,189, 14, 86,119,154,154,189, 13,158, 76,246,137,205, 90, 94,245,130,171,254,200,119,127,
-229, 75,111, 56,176, 56, 80,234, 96,160,135,154,250, 16, 91, 15,134,125,243,113,226,142,169, 60,255,149, 84,158,245, 82,226,167,
- 95, 79,124,224,233,212, 91,110,170, 79, 60, 76,242,153, 7,169, 62,252,161,254,223,189,177,231, 43,250,239, 93,210,178, 63,112,
-125,124,147,190,226, 21, 47,120,193, 47,220,253,205,255,248, 79,220,249, 47,187,143, 60,248,232, 91, 41,192,123,123,101,216,239,
-239,175,234, 94,240,164, 15,239,198,113,215, 32,162,143,237, 18,210, 26, 17,254, 23, 68, 55,219,141, 99, 92,138,235,109,206,115,
- 71,199,187,128, 8,249, 30, 10,112,229,161, 1,104,119, 25,215,214, 49,245, 62, 68,144, 67,148,120, 63,220,195, 61,139, 16, 27,
-196,253,177,139, 77, 47,247,199,203,115,244, 2, 40,111, 23,195, 2,216,129,161,190,184,121, 54,157,219, 92, 91,159,199,158, 26,
-245, 33, 41,254, 68,255,250,192,127,184,239,241, 55,246,175, 43, 52, 90,110,199, 51,190,246,139,174,253,206,111,186,241,197,207,
- 62, 88,246,149,237, 49,165,222, 91,243, 83,167, 72, 78,247, 31, 95, 62, 65,221,231,126, 5, 45,110,252,115,212,189,248,143,157,
- 49,133, 32,143, 60, 64,219,247,189,131,150, 31,125, 79,239, 0,236, 27,235,236, 67,201,126,243,196, 38,125,238,115,158,113,245,
-191,250,219,127,234,199,190,250,245,111,126,228,147,143,158,250,247,180,247, 13, 97,118,133, 35,171,134,237, 86,141,152, 14,175,
-249,253,253, 20,169,225,227,103, 56,198, 27,224,179, 67, 26,247, 30, 56,238,173,212, 32,109,245,152,119,237, 4,189,223,191,247,
- 86,141, 18,110, 56,223,243,218,139,235, 61,203,181,222,161,199,197, 13,121,215,145,226, 16,209,226,184, 44,163,217,161,102,222,
-156,251,189,240,231, 29, 23,107,212,251,227,231,103,117,251, 59,239, 81,195,123,135, 62,255, 67,205,251,143,142,243,242, 60,140,
-159,102, 18,214,207,243,201, 57, 25,142,119,207, 89, 62,123, 68, 95,135,207,228,156,235,113, 44,109,126, 41,235,218,159, 21,243,
-108, 30, 79,222,184,144,180,245, 16, 13, 15, 57,242, 97,162, 63, 68, 19,127,252,163,253,235,119,245,245, 81,102,186,242,238,155,
- 63,247,251,127,254,182, 47,254, 11, 47, 60,184,239,202,237,229,146,228,212, 19, 84, 31,249, 4,213,227, 31,239, 35,244,199,104,
-223,215,220, 78,251,111,254, 7,107, 13,122,242,116,175,121, 17,109,188,250, 59,105,227, 75,255,242,104,208,137,151,147,221, 30,
- 13,251, 22,125,209,203,158,253,204, 55,254,229,155,238,238,127,248, 2,218,123, 89, 89, 92, 96, 23,180,208,123, 99, 52,108, 38,
-247,169, 55,126,166,104,255, 6,253,253,123,149,122,181,110, 28,134,205,233,144,190,239,237,148,107,255,237, 49,223,164,245,225,
- 51, 26,223,254,245,230,225,125,103, 57,198,112,252,183,171, 81,189, 84,215,187,238, 90,239, 83, 67, 49,111,122,231, 55, 48,245,
-142,188,104, 52,130, 55,104,132,120, 33, 35, 63,171,233, 56,239, 93,227,124,217,152,128,167,119,223,180,163, 84,179, 30,239,220,
-243,124,170, 79,159, 41, 75,241,102,253,243,108,215,104,115,242,190,139,184, 23,243,152,199,101, 17,169,147, 70,195, 91,250, 34,
- 48,166,221, 11,159,121,224, 27,223,244,173,159,127,215,215,124,238, 51, 95,118,250,100,165,229,178,127,203,233,147, 68,219, 91,
-131,212, 13,241, 6,209,254, 63,243,195,212,189,226,235,253, 96,143,157, 60, 77,191,240,190, 7,232, 23,222,255, 0, 61,242,248,
- 73,218,232,152, 94,254,156,107,232, 79,222,248, 82,250,163, 47,121,246,116,224,231,191,154,120,223, 85,180,245,238, 31, 33,218,
-183,152, 78,161,143,252,183, 31, 63, 77,127,254,171, 95,241,170,127,254,142, 15,126,231, 47,252,234, 3, 63, 72,123, 68,119, 83,
- 35,118,115, 19, 17,158,239, 49,110,214, 13,165,245,204,143,130,147,128,209,236, 13, 20, 72,251, 99,231,112, 54,222, 12,155,220,
-189,224,241, 31,110,206,251,214, 33, 50, 62,131, 80,204, 27,104, 21, 43,128,199,186, 25,162,155, 55, 63, 73,215,123, 72, 55,245,
- 67,224, 92, 29,131,207,239,213, 56,114,142,136,234, 98,230,213,174,151, 95,206, 96, 16,111,104,141,186, 59,207,183,191,243,254,
-254,247,199,224, 92, 6,163,119,219, 46, 56,193,248,172,214,205, 37,159,123,253,247, 31, 63, 83,132,125, 65,243,188,143,182,207,
- 33, 86,115,191,190,142, 54,198,252, 8,124,199, 33,117, 58,110,188, 68,106,118,123, 50,207,230, 49, 27,245,243, 25,150,242,190,
-250,107, 95,113,205,247,222,115,203,231,221,254,188,167, 93,113,197,201, 39,250,232,124,217,219,215,173,211,250, 77, 29,241,246,
- 19,180,241,101,223,149, 12,250,127,250,240,131,244,250,159,122, 23,221,255,201,207,208,129,253, 27,180,177, 40, 84,250,163,189,
-255, 99,143,208, 91,254,227, 7,233, 27,111,124, 9,253,175, 55,127, 5, 29,236,127, 87,174,251,124, 90,188,226, 22,218,254,181,
-159, 36,186,234,186,241,107,199, 34,186, 48,253,237,111,123,205,119,253,187,247, 62,240,150, 62,152,255, 77,154, 74, 4,187,109,
-208,219,232,245,158,243, 60,198, 13,122, 12,220, 80,110, 91, 83,219,189, 75,163,219, 55,235,134, 98,223,125,227, 89, 14,127, 7,
-108,114,183,181, 70, 65,191,251,205,176,137,222, 49,136,169,224,251, 52,229,126,107,179,153,220,210,212,209,241,220,142, 60, 73,
-215,123, 7, 28,239, 78, 5, 49,182,207,106,175, 35,220,221, 50,188,111, 94, 23,189,106, 57, 98,184,174,123,118, 89,122, 23,175,
-225,248, 26,234,218,189, 48, 71,110,222, 5,163,126, 71,154, 75,217, 40,222,213, 27,202, 35,205, 61, 24, 34,236,163,103, 49,158,
-121,158, 55,105,113,117, 90,242, 60,191,251,166,117,233,243,187, 52, 75,113,236, 44, 14,208,173,234,228,226,156,124,237, 37,216,
-147,243, 60,235,207, 93, 94, 63, 27,170,121,236,124, 92, 44,106,220, 12,250,139, 95,247, 85,207,253,177,183,125,251,203,191,239,
-217,251,247, 93,113,226,244, 22,201,246,137, 17,240, 54,214,209, 59, 30,237, 44, 63,243,249,180,248,146,111,243, 15,127,248,227,
-199,233,219,126,236, 23,232, 55, 30,124,140,100,223, 1,218, 26,106,230, 27,251,105,223, 21, 7,232,202,167, 93, 73, 7,174,188,
-146,222,250,159,127,135,126,232,173,239,241,207,116, 47,253,227,196, 7,251,232,125,121, 98,250,246,254, 10,182, 55,183,232, 85,
- 47,185,246,250, 47,121,249,245, 95, 67, 78,130, 59, 47,131,123,199, 89, 94, 67,164,241, 72,179,216,110,187, 0,160,213,155,154,
-232,242,198, 51, 29, 67,127,142,104,251,195,106,116,207, 54, 6,181,187,181,162, 56,106, 24,238,108, 34,158, 35,103,216, 48,205,
- 96,190,118,157, 65,129,115,123, 50,175,247,126, 61,222,189,107,142,181,235, 81,238, 48, 15, 46,198,161, 59, 71,228,185,110, 88,
- 13,250, 62,253,238,221, 26,183,158,227, 26,240,103,135,212,176, 93,236,152,230,210, 26, 67,173,117,244,215,158,101, 30,174,159,
-231,183,191,243,150,117,117,110,253,142,179,206,243, 33,114,239, 95,119,158, 11,141,174, 25,131, 91, 48,130, 86,167, 97,207,134,
-150, 32,246, 98,158,205, 99, 54,234, 59, 54,232,124,205,149,139, 35, 63,243, 63,124,222,219,222,248, 13, 47,250,239,135,100,252,
-233,186, 53,209,209,134,218,247, 70,127,248, 5,143, 47,161, 77,234, 62,247, 43,137,159,246, 76, 63,192,157, 63,245, 30,250,240,
-239, 61, 74,143,110, 51, 61,248,248, 54,125,236,209, 77,250,157, 79,158,236,163,246,147,116,252, 84, 31,233, 47, 22,116,245,213,
- 79,163,127,245, 43, 31,166,163,239,255,136, 90,245, 5,117, 55,124, 37,201, 99, 15,143,220,247, 33,165, 63,104,220,236,187, 98,
- 31,125,203, 77,159, 55, 44,224,167,211,249,215,214,223,112,150,215,145,102,145,189,246,124,165, 98, 65, 91,220, 47,253, 92,198,
- 71,211,207,247,156, 37, 45,215,142,219,206,113,188,163, 77, 42,239, 6, 56,191, 86,194,242,174,179,157,223,154,115,187,212,215,
-123,215,165, 18,254,209,107,121, 67, 19,165,239,198,102,107, 66, 36,119,194,235, 94, 90,197,106,188,225,108, 56,136,243, 48, 24,
-135,155,103,124,239, 26, 67,118,188,249,249,110,208, 54,239, 58, 27,208, 76,141, 43,222,207, 91,207, 65,169,187,237, 28,198,248,
-140,243,252,188, 55,184,213, 99,237, 25,141, 85,159,207, 27,154, 40,125, 54,234,243,184, 36, 70,221, 20,101,158,246, 21, 47,185,
-234,175,191,231,175,124,193, 91,190,229,229,215,188,242,196,137,229, 64, 56,235, 13,250,214,116,212, 62, 58, 31,232,106,188, 24,
-254, 44,227,159,229, 57,175,240,131,124,228,161, 79,211,191,121,223,239, 18, 29,188, 98,162,185, 13, 98, 51,253,159,203,254,195,
-159, 57,189,164,143, 60,124,130,238,255,196, 9,218, 18,166,218,255,252, 29,191,241,209, 56,129,103,190,148,228,228, 99,253,223,
-182,245,108,164,255,107,165,207,127,222, 53, 47,233,255,245,108,218, 59,192,220,205, 26, 69,158,111,138, 23, 13,212,241,243, 48,
- 10, 71,119,184,161, 28,219, 97,154,246,216, 25,206,233, 72, 99, 96,119,114,126,247, 62, 73,215,123,255,165,210,223,215, 18, 2,
-106,181, 31,167,139, 75, 73, 31, 87,227,253,146,254, 26,110,212,204,202, 93,240, 26,254,125,141,190,231,120, 50,116,147,227,181,
- 91, 81,250,177,179, 68,170,247,238,102,116,186, 67,195,116,239,154,117,182,126,158,239,172,174,125,236, 60,156,225,243, 57,183,
- 61, 41,237,232, 61,222,205,121, 54,143, 63,196,227,124,107,234,150,110,127,206,119,252,177,103,125,255,143,127,227, 11,191,123,
-163,118, 3, 31,189, 55,200,253,143,165,142,246,117,144,135,149, 33,229, 94, 88, 85,229,164, 55,234,251,168, 28,122,129, 31,232,
-129,135, 31,163,147, 67,187,213,167,239, 15, 63,193,224,109,131,129, 23,161, 79, 63,190, 69, 91,155,219,244,188,171, 23,244,153,
- 83, 91,113, 18, 99, 61,189,119, 4, 78,159, 32,190,226,170,254, 99,131, 81,223,166, 23, 95,119,213,181,251,247,117,215,159,222,
- 92,126,224, 60,175,235,108,122,215, 8,156, 57,164,222,244,205,231, 41, 19,123,228, 12, 27, 14,157, 43,186, 70,145,158,179,112,
-163,119, 90, 10,184,255, 44,215,120, 94,199,106,207,237, 18, 94,239, 37, 1, 14,169,227,214,214,188,239,188, 24,110,186,126,118,
- 39, 98, 55, 3,206, 96,120, 14,239,109,178, 73, 23,164,244,166,145,239,205, 59,113,200,148,179,126, 28,174,123,248,220,133,114,
-214,119, 54,151,250,136,184,255, 78,218,129,241,188,216,121,126,182, 12,198, 13, 59,152,203,187,142,130,215,103,179, 58,207,102,
-221,247,121, 92, 2,163, 62, 70,191, 87, 29,232, 94,243,119,190,254,121,119,223,118,248, 89, 95,182,185, 73,116,106, 99,146,124,
-149,101,111,184,183, 42,237,219, 87,232,209,229,178, 94, 49, 88,230,161,161, 75, 7, 31,150,109, 63,216,181, 87, 31,164,110,223,
- 6, 45, 7,164,219,168, 23, 47,106,212,245,207,225,103,125,132,255, 68,111,248, 63,122,234, 20,237,127, 37,156,170, 44,251, 87,
-111,228,183, 79,245, 14,192,211,123, 71, 98,208,159,175,116,205,149, 27, 7,175, 62,184,239,208, 39, 54, 79,158, 87, 6, 98, 39,
- 45, 67,181,182,105, 20, 42,163,213,220,184,195,175,192,205,224, 6,173,211, 95,200, 56,116,150, 8,240, 98,198, 5, 25, 97,125,
-239,225, 75,124,189,123,190,217,169, 65,127,123,115, 29,183, 93,202, 14,125,131, 3,208,159,199,157, 20, 41,217,225, 62,222,188,
- 14, 71,176,195, 12,211,161, 29,102, 89,134,113, 15,237, 2,103,253, 34,230,210,145, 51,124,231,174,148, 92,128,231,254,164, 82,
- 34,245, 60, 86,231,217,156,118,159,199, 30, 27,117, 75,101,111,124,254,117, 7,254,220, 79,125,203,139,239,250,163,215, 30,188,
-246,228, 16,157,239, 95, 76, 6,189, 55,230,139,193,160, 95,209,209,223,124,199,239,191,255,133,159,179,239,115,190,251,240,179,
- 94,120,106,136,218, 45, 90,223,218,162,250,201,223,161,242,252, 87,143, 7,123,249,115,159, 65, 95,250,178,107,233,151, 63,240,
-112,127, 22,139,201,136, 23, 53,232,166, 11, 87,167,207,158,122,228, 9,122,217,245,177,246,228,177, 63,232,163,244,199, 72, 78,
-127, 14,177,118,140,145,106, 78,193,152,252,223,245,244,187, 70, 79, 4,155,236, 8,230,218,225, 70,127,168,137,138,111,120, 10,
-207,137,227,187,240,222,203,233,122,119, 98,208,239,124,146, 90,238,162,186, 24, 93,196,125,108,185,233,231,138,100, 81,136,102,
-224,172, 31,185, 0,101,180,221,154, 75,187,109, 72,205, 33,127, 82,245, 13,206, 96,208,239,156, 13,250, 60,246,218,168, 91,186,
-253,218, 91,190,248,154,215,255,253,175,123,222,255,116,253,129,141,125, 39,122, 99,203, 7,167, 16, 92,122,227,126,160, 55,168,
-167,246, 17,253,143, 63,247,209,159,187,231, 61,159,120,219, 63,190,229, 69,183,143,105,248,225,211,157, 54,120, 89, 20,146,135,
-126,211, 15, 92,122, 99,255,183,254,204,141,244,117,191,245,255,245,225,126, 31,117,239,223,167,221,221,212,168,143, 17,124,255,
-191,199, 79,208,171,254,200,115,233, 47,252,183, 95,224,159,173,159,248, 64,191,249,110, 17, 47, 55,167, 55,246,198,182,244, 95,
-248,200,227,167, 78, 62,118, 98,243, 51,123, 24, 61,221,165,234,102,184, 89,158,239, 34, 52,110,236, 94, 27,220,167,202,184,220,
-174,183,221,104,239,217, 73, 38,103,143,230,219,241,126,190,237, 36,130, 61,155,241,184,161,201,196, 28,238,127,118,190,153,147,
- 97,158, 31,189,220, 55, 59, 48,164,200,202,184, 71,179, 4,247,175, 75,121, 43, 34,253, 13,151,100,158,157,157, 83, 63,143,121,
- 92,180, 81, 31, 11,221,139,142, 63,247, 7,255,196,115,254,254,235,255,155,235,191,102,123,155,232, 68,111,156,121,127, 25, 35,
- 99, 57,185,164, 43, 23, 76, 15,156,222, 62,245, 23,255,249, 71,126,226,157, 31,122,236,167, 6, 43,251,187,143,110, 61, 68, 44,
-159, 47, 30,169,247, 63, 61,112,144,150, 15,188,155, 22,199, 31, 32, 62,244,162,241, 11,190,246, 85, 47,162,123,254,242, 31,167,
-215,253,227,119,209,137, 79,159,238,223,179,127, 66,180, 15, 31,220,236, 13,253,137,147,244, 71, 63,255, 58,122,203,235,191,158,
-174, 60,176, 49,157,213,214, 73, 90,254,214, 91,137,247,237,159, 16,246, 99,234,125, 57,214,225,239,251,248,167, 31, 62,181,185,
-124,152,246, 86, 89, 14, 59, 90, 93, 8, 8,231, 73, 51, 18, 79,210,184,108,174, 87, 81,230,173, 65,127,178, 1, 75, 23,235,216,
-180,160,179, 11,201,156, 12, 77, 94,238,252, 44,104, 3,122,107, 99,208, 95,251,100,212,174, 85,237,174, 53,232, 51, 48,110, 30,
-187, 50,202, 57,140,250,181,111,248,186,231,254,216,237, 95,118,253,215,156,234, 13,250,214,193, 5,241, 21,221, 24, 64,211,137,
-222,160, 31,232,232, 23,255,224,137,135,110,250,241, 15,126, 95,111,208,255,175,254,167, 15,244,175,223,255,237, 79,158,250,237,
- 17, 36,183, 84,208,211, 96,168,135, 20,251,246,227,180,245,238, 55,166, 47,249,238,175,254, 2,250,143, 63,252,103,233,117,223,
-240,133,244,226,107,246,211,129, 62, 2,127, 90, 89,210,107, 94,246, 76,250,209,239,249, 42,250,165, 31,188,153, 94,124,221,213,
-254,254,237, 95,253, 9,146, 79, 63, 48,242,217, 69, 65,120,180,189, 28, 65,121,191,253,123,199, 7,136,252,195,180,135,141, 93,
- 46,112,236, 38, 26,247,169,116,126, 71, 46,211,235, 61,147, 65,191,245, 41,102,208,119,203,144, 93,236, 56, 68, 23, 70,231,186,
-208,185,180, 87,134, 22,175,225,174, 29, 26,244, 93, 45, 29, 53,237, 85,103,131, 62,143, 75, 26,169,211,243, 15,237,187,233, 47,
-126,225, 53, 95,189,121,170,183,145, 79,219,232,163, 99, 38,217, 20,234,122, 11,191,255,202,142,254,217,251, 63,245,193,191,250,
-150, 7,254,206, 99, 39,151,239,234,223,254, 41,154, 26,189, 28,248,165,251, 62,243, 43, 15,126,102,235, 59,158,121,112, 99,177,
- 20, 9, 18,220, 21, 7,251, 48,254,151,104,251, 61,127,143, 22, 95,246, 58,255,158, 47,122,225, 51,233,141,223,241,149,244,195,
-127, 97,155, 62,254,200, 19,180,111, 99, 65,207,185,230,202,149,243, 89,254,214,207,210,246,175,255,179, 49,234, 31,189,142,210,
- 59, 24,203,218, 7,236,117,236,235,254,214,119,221, 55,168,212,124,102,143,141,250,133, 44,242,148, 66, 29,234,182,151,138,103,
-189,195,113, 63,156,223,142, 16,190,103,209,164,191, 28,174,247,114, 50,232, 23,108,236,180,121, 11,206,215, 59,207,243, 24,119,
-192,247, 15,247,231,124, 75, 77,135,119,120,158,135,119, 57, 59,177,147,243, 57,118, 1,247,127, 54,232,243,184,172,141,250,226,
- 69,215,236,127,217,161,253, 29,157, 28,216,100, 67,212,221, 71,231,251,170, 80,221,207,244,250, 95,248,216,209,255,243,237, 15,
- 14, 97,247,127,213, 69,248,132, 26,211,238, 15, 62,189,249, 43,111,253,192,241,247,253,213, 47,189,246,198,237, 83,203,222, 25,
- 40,154,134,239, 35,246,131, 87,209,242,215,255, 41,201,201, 79,210,226, 53,175, 35, 62, 24, 98, 52, 7,122, 99,254, 34,136,202,
-125, 12, 41,247,255,242,147,180,253,190,255,135,120,168,189,247,198,156,134,148,123, 31,173,211,214,246,168,113,243,174,223,126,
-240,227,191,252, 91, 15, 13,169,241,211,123,101,212,155, 22,159,231,179, 49, 28,109, 22,243,158,181,182,188,192,113, 20,162,152,
-161, 97,202,145, 29, 40,230, 29,185,140,175,247,178, 48,232,107, 84,245,206, 23,155,144,245, 2,206,179,102,219,212,227,135, 90,
-252, 13,231,169,127,126,104,135, 32,187,118, 46,221,251,148,184,255,147,140,237, 13,187,116,172,217,160,207,227,146,140,179,165,
-223,187,223,122,232,228,135,126,111,115,185,125,240, 96, 71, 7,183,150, 52, 96,227, 30,239,170,252,249, 55,223,255,211,189, 65,
-255,254,254, 61,239,239, 95,159, 84,131,174,237,211,198, 38, 47, 15,253,253,255,240,208,189,143,246,159, 89,244, 47,218,170, 19,
-106, 78, 69,105,232,202,171,168,222,247,111,104,243,173,223, 70,203,255,250, 86,146,199,126,127,253, 66,120,226,225,254,125, 71,
-105,243,109,223, 65,219,191,246,143,122,171,127, 96, 84,148, 35, 69,225,113,217, 32, 30, 64,118,157,208, 15,252,204,175,189,173,
-255,200,239,232,247,239,186, 81, 7,222,242,121,111, 62, 74, 67,194,205,240,142,115, 68,186,151,122,180, 74,102,119,236,224, 94,
-220,113, 25, 95,239,153, 12,250, 49, 58,187,102,193, 57,157,190, 70, 98,248, 72,115,207,206,119,190,189,161,137, 94,119,108,236,
-128,182,229, 70,228, 2,231, 5, 53,206,217,249,142, 59,118,112,158,248,158,163,123,216, 56,229,248, 78, 35,112, 61,175, 93, 1,
-200,173, 49,232, 23, 53,207,230, 49,143, 11, 53,234,244,169,199,183,127,245, 91,126,250, 35,119,189,249, 67,159,254,208, 59, 62,
-126,226,161, 31, 61,246,240,177, 47,255,135, 31,252,219,247, 30,123,228,239,208,212,250,114, 72,185,159,164,220, 64,101,248,251,
-201,223,121,248,212,191,249,193,127,255,241,183,111,244,145,190, 60,190, 61,210,222,198, 28, 60,235,235,224,211,137,182, 31,165,
-173,119,255, 80,111,220,255, 28,109,254,235,219,104,251,221,119,211,246,127,250, 7,180,253,203, 63, 66,155, 63,255,215,104,243,
- 45,223, 74, 91, 71,239,236, 63,255, 64,239, 8, 92, 61,137,210, 24, 4,174, 22,146,211, 76, 27, 7, 10,253,147,163,191,253, 91,
-255,238,191,252,254, 79,211,148,122,223,218,237,232, 92, 35,166, 65, 8,228,112,179, 65,156,207, 70,137, 94,249,212,249, 9, 54,
-253,157, 24,138,189,154, 4,154, 26,199, 40,238,200,153,164, 73,129,242,117,232,114,189,222,179, 24,244,215, 94,100,153,192,218,
-117,218, 11,231,203, 64,129,124,251, 78,148,225,160,141, 46,222,227,243,149,198,189,249, 98,163,223, 93,146,141, 61,114,166, 54,
-168,107,208,232,180,199, 25, 29,188,150, 91,207,212, 82,245, 12,116,179,221, 52,232,175,253, 44, 0, 29,206,227, 41, 58,206,150,
-126, 31,140,227, 35,255,241,254,207,252,223,253,107,152,224, 87,169, 17,255,120,255,122,180,127, 61,174,239,105,101,197,172,223,
-250,199,127,228, 29, 15,190,241, 85,207, 63,248,226,111,125,229, 51, 94,122,242,177, 77,226,167,239, 35,218, 95, 38,165,185,225,
- 99, 27,125,164,221,191, 70, 4,251,167,222, 79,219,159, 56,230,135,227,210,159,218,162,127,255,149, 79,107, 86, 73,255,218, 92,
-246, 31,185,130, 14,236,223, 71,199, 62,252,208,241,191,246,143,254,243,221, 26,165,183, 14,198, 78, 55,248, 11,105,213,122,219,
-249,108,178,170,150, 54, 24,186, 55, 53,134,110, 72, 77,174,211,171,182,212,167,109, 44,123,237,217,223, 67,185, 29,230,173,106,
-132,239,129,115, 59, 66,129, 32,190, 95, 29,155,195,151,219,245,234,117,173,139, 58,223,124, 30, 83,225,222, 11,224,174, 31, 81,
-135,201,218,125,222,223,220, 7,107,107,219, 26,207, 99, 23,192, 32,192,235,187,255, 34, 80,222,247,194,249, 12,156,245,155,215,
-116,119, 59,215,103,111,213, 84,246,153,230,146,207,193, 11,228,195,159,207,181,220, 10,243,241,189, 67, 23, 55,138, 86,192, 38,
- 44,133,231,117,239, 5, 58, 51,150,190, 95, 63,207,178,130,222,185,206,121,230,174,207, 99, 87,140,250, 82, 13,247,182, 26,241,
-162, 63, 59,173,175, 37,157,185,111,249,240,153,199,171,200,111,252,165,159,249,200, 15, 60,227,202,197, 15,254,119, 47,189,250,
-185,167, 30,221,236, 93,131,222,144, 31,232,130,191, 62, 89,112,162,125, 7,206,206, 67, 27, 69,105,250,255,157, 94, 82,237, 29,
-132, 43,158,125, 29,125,224,193,227,143,223,114,215,127,184,235,209, 39,182,222, 5, 78,198, 94,143, 99,106,208,207,123,147, 28,
-140, 0, 8,216, 28,194,141,254,201,158, 8,202,137,190, 69, 35,148, 27,154,200,179, 29,195, 6,120, 11,157, 35, 61,249, 84,190,
-222, 53,227,124,163,178,139, 49, 62, 55,208,206, 83,217,247,156,175,131,163, 17,232,225,139,137,210, 33, 90, 95, 39, 27,123,239,
-121,172,149,163, 20,109,139,223,112,142,251,185,167,142,171,202,209,162,163,105,206,207,173,103,201, 54, 93, 40,242,255,169, 48,
-207,230,241,135,112,148,115,152,209,193, 56, 63,161,155,248,208,126,244,211,253,235,132,254, 92,206,241,217,193,240, 63,250,216,
-201,229, 59,255,204, 61, 31,250, 95,254,217,175,125,234,131, 7,246, 21,218,120,108,139,234,163,189,237, 29, 16,245,122, 20, 30,
-254,227, 53, 47,253,111,116, 31, 54,251,104,254,177,109,226,227,167,233,138, 67,159, 67,239,188,255,209,143,127,205,247, 29,253,
-190,251, 31,122,252, 95,234,185,157,160,189, 67,189, 31,213,205,245, 22,109,196,113, 49,250,223,195,113,110,212,227,237, 36,210,
-191, 87, 55,151, 61,247,214,181, 41,204,141,231,248,174,225, 94,236,248, 30, 60,149,175,247, 18, 15,171,163,238,116,238, 12,247,
- 97, 40, 7,220,118, 1, 37,129,155,215, 56, 6, 23, 27,225,250,177,207,209, 69,173, 53,164, 99,103, 67, 58, 51,200,111,108,114,
-211,191,239,146,164,164,161,165,234,253,231,156,227,179,186,219, 60, 46,195,193,103, 74, 55, 50,239,138,126,203, 32, 59,119, 80,
-189,221, 47,248,139,175,185,246,187,254,143,175,125,238,159,124,238,213,251, 22,219,167,133,182,135,182,172,125,212,206,139, 50,
- 69,238, 5,190,115, 56,175, 65, 91,102,187,183,211,167,150,212,109, 85,218,216, 96,122,172,255,217, 15,189,235,145, 95,252,187,
- 63,119,223,155,182,150,245, 87, 41,168,116,219,201,171, 56, 75, 26,117,151,174,109, 87,134,166,130, 91,239,125, 76,109, 95, 64,
-207,246,221, 60, 47, 75,135,163, 88,199,209, 29,118,131,187,236,174,247, 73,122,238, 55,208, 42, 54, 97,108,250,242, 84,166, 0,
-158, 35, 75,240,118,200,196,220,137,136,123,205, 32, 28,105,158,251,209, 39,171,190,172,233,241,195,205,249, 28,219, 67,160,222,
-133,206,149,217, 82,205,227, 41, 99,212,205,176, 31,232, 95, 3, 87,237,250, 23, 92,179,255,171,110,253,138,107,255,244,183, 31,
-126,230,151, 60,239,170,141,141, 65, 26,118, 56,135,218,127, 95,133,175, 28,100,224, 75,255,115, 86,142,251,167, 78, 45,235,191,
-120,255, 35,191,241,166,247,124,226,231,126,253, 99, 79,252,124,255,211,223,211,204,193,201,214,160, 95, 78, 70,125, 30,243,248,
-172,114, 86,206, 98,212,231, 49, 27,245,121,236,253, 88, 92,130,239, 24,146,231,150,178, 63,245,187,143,156,126,203,223,250,217,
-143,189,251,239,190,227,193, 47,254,146, 23, 61,237, 75,254,236, 43,175,121,245, 43,159,123,240,217,135,246,119, 87, 94,185,224,
-125,139,194,165, 15,206,229,196,178,110, 62,186, 89, 79,124,248, 19, 39, 31,190,247,125,143,252,151, 95,190,255,241, 95,249,131,
- 79,111, 14, 81,204,192,127, 27,154,169, 15, 53,244, 61,227,164,207, 99, 30,243,152,199, 60,230, 49, 27,245, 51, 56,155,253,107,
-211, 12,251, 96,144, 31,121,124,251, 15,254,237,111,126,250, 93,253,235,154,254,223,215, 29,220, 95,158,113, 96, 81,158,190,209,
-241,190,237, 42,219,167,182,229, 51, 39, 78, 47, 63,213, 59,169,159,160, 41,197,254,152, 58, 7, 79,208,185,129,122,243,152,199,
- 60,230, 49,143,121,204, 70,125,143, 13,251,200, 97, 87,163, 60, 68,218, 67,250,252,161,254,117,223,137,211,117,209,191, 58,120,
-255, 16,129,111,233,107, 83, 63,179, 61, 27,243,121,204, 99, 30,243,152,199, 60,158,124,163,222, 26,119,163,199, 13, 5,238, 2,
-127,162, 81, 23,248,115, 54,228,243,152,199, 60,230, 49,143,121, 60,197,140,122,107,224,205,112, 19,229,150,169,179, 17,159,199,
- 60,230, 49,143,121,204, 99, 55,140,250,147,132,184,156, 13,249, 60,230,113,121,143,129,211,110,212,196, 99,243,237,152,199, 60,
- 46,237,224,153, 46, 49,143,121,204, 99, 30,243,152,199,103,199, 40,243, 45,152,199, 60,230, 49,143,121,204, 99, 54,234,243,152,
-199, 60,230, 49,143,121,204, 99, 54,234,243,152,199, 60,230, 49,143,121,204, 99, 54,234,243,152,199, 60,230, 49,143,121,204, 99,
- 54,234,243,152,199, 60,230, 49,143,121,204, 70,125, 30,243,152,199, 60,230, 49,143,121, 60,229,199,226,203, 14,127,249,200,105,
- 43, 92,168, 20,109,137,198, 50,117, 50, 19, 82, 57, 24, 38,251,103, 98,146,247, 63, 44,180, 74, 46,159, 62, 54,124, 70,244,151,
-147,166, 12,235,159,162,159, 24,223, 39,170, 60,195,211,187, 86, 41,118,241,111,118,109, 26, 38,109,196,174,223, 51,117,106,213,
-238,235,227,223,135, 3,251,161,152,244, 61,250, 57,137, 99, 11, 51,173,244,108, 75,215, 56,125,150, 36,206,157,253,251, 89, 15,
- 39,112,110, 2,239, 43,254, 51,198, 3,234, 29,176,195,142,191, 27,186,213,145,158, 51,199, 59,147, 30,143,255, 78,224,239,249,
-196,135,243,152,158,147, 62, 67,189, 55,178,246,194,252,241,250,119,137,254,127, 60,142,216, 79,194,247, 99,189,108,246,251,171,
-159,100,129, 39, 20,231, 48,252, 87,216,238, 24,143,231, 36, 50, 93,127,149,169,219, 46,235, 9,248,251,196,167, 87,124,111,153,
-158,238, 56,165,244, 30, 72, 29,230,142,244,199,153,186,249,225,147,236,202, 32,194, 80,188, 35, 31, 83,204, 21,210,115, 26,126,
-184,148,144, 51, 28,206,167,235,191,160, 12,191,215,185, 88,117,210, 47,251,239, 26,214, 71,167,247,106, 60,215,113,254, 79,127,
- 14,223,103,243,143,241, 61,210,222, 99, 34,184, 27, 49, 7,244,190,250,122,211,103, 21,107,134,210, 12, 43, 58,139,134,249, 91,
-116,210, 8, 60,199, 88, 20,250,121,157, 15,130,235, 90, 68,103,230,244, 60,236,190,139, 79, 49,209, 53, 67,240,251,233,220,252,
-189,122,226,211,239,245,189,172,175,161,123,114,149,241, 25, 23,102,159,125, 2,243,186,234, 92, 24, 78,107,252,187,192,115,215,
- 27, 34,253,131, 30,158,195, 82,127,191,212, 47,175,112, 67, 36,118,133,241,252, 42,254,160,185,119, 62, 31,216,158, 41,251, 92,
- 37, 61,231,113, 62,226,106,133,133,201,120, 92,125,128,204,120,220,216, 23,200,183, 84,134, 85, 79,249,196,154,231,230,123, 18,
-115, 28,143,113, 71,144,118, 25,251, 94,138,123, 66,177,207, 72,172, 87,189, 52, 95,131,220,236,176,184, 67,216,123,112, 82, 84,
- 93,215, 85,159,193,248, 30,184,119,176,217,164, 97,251,239,180,119,192, 74,104,182,116,138, 37, 48,205, 77,145,124,203,216,206,
-205,148,203,236,186, 38,225, 81,219,227,237, 90,137, 4,254,148, 52,199,241,185,250,254,232,166,133,253,235,198,115,238,111,230,
- 48,135,139,206, 73,246,103,100,231,133,119,114,250,158, 56,199, 56,207,241, 29, 85,215, 77,157,238, 93,126, 8,186, 25,136,221,
- 39,209,121,192,107,182,252,120, 62,248,172, 22,217,160,219,188, 10,227,158, 62, 44, 48,169,117, 75,242, 7, 32,226,155, 51,249,
- 3,167,213, 9,140, 22, 74, 98,194,227,147, 98,203, 33,152, 97,162,180, 15, 77, 70, 7,118,124, 22, 56, 27,156, 36,246, 75,191,
-239, 18,198, 12, 22,137,200,234,164,105, 23, 77,108,199,240, 5, 18,134,212,222,104,199, 42,110, 26,237,196,107,108,214,112,155,
-216, 38, 4, 79,134,196, 39,173,253,158, 5,254, 14,150,142,153,214,117,144,101, 48, 25,163,115, 6,207,140,209, 56,235,255, 43,
-126,142,115,250,134, 97, 46,136, 59, 38,122, 20,150,244,104,197,157, 13,155,128,146,159, 89, 63,191, 22,220, 56,117,130, 27, 80,
-193,125,107,186, 62, 48,136, 29,199, 38, 87, 56, 12,200,176, 80,151,186,160,211,181,234, 6, 98,198,132,193, 9,173,163, 81, 47,
-212,245, 63,221, 24,223,163,102,102,216,120,185,234,137,137, 26,207,233,186, 55, 96,205,143,139,187,216, 83, 70, 67, 63, 24,137,
-162,198, 32,206,149,196, 54, 88, 74,107,102,188, 36,137,249,128,142, 15,131,249,225,100,138,100,101,126,134,127, 25, 75,191,250,
- 28, 36, 10,143, 60,230,197,244,243,226,134, 93,124, 74,135, 99, 41,234,216,185,145, 55,195,172,127,247,249, 62, 28,143,197, 55,
- 85,189,125,227,231, 23,157,206,166,254, 25, 9,108,128,195, 87,143,207,168, 63,203,170,247, 96,116,162, 6, 71,141,101,124, 70,
-230, 12, 87,158, 2, 4,174, 60,254,174,168, 23,180,148, 28,112,132, 67, 16, 78,147, 8,220,107, 14,163,203, 44,104, 83,199,187,
- 85,235,180, 32, 11,231,109,192,230,115,236, 23, 53,238,171,221, 55,120, 14,196,178,178,229,177,175, 23, 73,235, 88, 56,187,239,
-213,238,107,114,253, 98,111, 98,162, 21, 47, 69, 40,156, 51, 55, 48, 50, 57,172,195, 76, 24,142, 96, 6, 45,246, 58, 48,216,212,
- 56,119,246,123,137,223, 78,159, 21,253,121,126, 95,118,150, 24,130,152,112, 78, 4,182, 76,105, 54, 86,150, 53, 27,175,128, 50,
-184,196,254, 84, 99,114,170, 67, 79,186, 15,180,198, 62,230,109, 37, 56,239,244, 85,225, 44, 69,112,225,187,185,206, 19,221, 55,
-212,137, 55, 71,190,221,124,195, 33,215,199, 32,211,185, 78,206, 6,249,119,143,115,188,155,246, 42,233,154,128,205,246, 89,136,
-246, 88, 98,175,229,216, 36,146, 61, 30,191,161,214,241,179,195,255, 23,165,176,123,110,165, 20,194,233, 36, 48,111, 71, 47, 75,
-208,224, 83,114,143, 91,131,202,226,211, 12, 2, 76,120,244,104,148,241,115,248,112, 25, 38,134,164,103,176,250,252, 25, 12,141,
-197,101,220, 60, 59,243,192, 56,187,236, 5,139, 17, 16, 9, 90,244, 39,232, 45,226, 82,144,213,240,126,184,159,165,153, 92, 30,
-203,195,198, 43,201,105,178,251,144, 61,229,194,173,115,193,144,113,128,251, 37,152,173,136,239,100,120, 95,225,200, 6, 20,142,
- 37,183,178,129,241,100, 96,109,153,115,202,100, 72,242, 40, 69,141,123,236,163, 28,243,195, 38,167, 71, 28,156,188,112,187,127,
- 85,239, 71,129,223,143, 81,121, 19,217,226,121,248, 70, 33,147, 57,234,250,121, 59,254, 93,224, 62, 37, 7, 10,156, 1, 48,172,
-104, 96,109,130,244, 38,218, 55,148, 58,156,221, 16,189,219,247,143,206, 5,251,115,152,238, 95, 68, 83, 5,238,231,104,224, 41,
-126,215,161,163,148,214,141,172,108, 14,204,197, 55, 70, 94,227,107,166,117,169,215, 25,134,135,194,152,233,245,143,191,109,140,
-119, 60, 74, 78,155,161,109, 38, 17, 93,112,108,146, 30,217,135,177, 23, 61,126,181, 89, 55, 94,252,176,153,113, 90, 45,163,203,
- 10,199, 45,130, 65,206, 52,121,171,125,253,120,191,166,251, 89,221,237,236,157,165,206,162,157,233,147, 27,122,126, 12,207,175,
- 74, 60,219,149, 4, 87,147, 1,227,198, 73,234,250, 77,118,112, 42, 24,182, 55, 17, 73, 71,178,235, 95,170,186,181, 80, 14, 40,
- 10,172, 67,139,180,196, 50, 26, 50, 57, 51,147,195,202,227, 60,151, 20,111,209,116, 95, 52,123,217, 58,237,133, 96, 79,173,248,
-123,140,104, 57, 12,182, 25, 60, 48,202,152, 9, 21, 48,238,126, 14, 2, 89, 27,248,157, 88,230, 65,154,125, 15, 51, 22,238, 64,
-163,195,178,154,108, 36,207, 6, 82, 24, 37,145,118,219,247, 8,187,216,252,194, 12,147,228,243,146,106,142, 85, 56, 28, 85,150,
-112,111,117, 13, 23, 78,251, 45, 53, 6, 28,141, 55,169, 3,111,182,132, 57,246, 50,134, 12,182, 69,213,150, 5, 28,231,113,149,
- 49,163,180,172, 97,228,253,126, 87,113, 7, 58,219, 64, 78,247, 65, 32, 47,199, 12,171,157, 37, 69,230,195,218,174,144,173, 94,
- 20,184, 64,155, 98,131,199, 26,155,139,110,214, 26, 29, 79, 49, 0,187,193,176, 3, 69,148, 38, 43,233,241, 48,188,106,124,106,
-108,104,110,200,212, 50, 51,230,177, 96, 54, 88,186,145, 53,156, 77, 81, 44,155,183,167,209,135, 26, 20,255, 17,156,207,100,236,
-112, 29,228,236,130, 27, 87, 14, 87, 47,210, 32,182, 65,174,139,226,155,180,182, 70,154, 53, 61, 20,114, 15,159, 5, 82,176, 80,
-218,224,182, 76,193, 28,145,152,196,218,245, 84,144,230, 98,205,185, 19,209, 8,134,241,222,169, 81, 43,156, 50, 20,118,255, 10,
-184,153,204,217, 51,102, 76, 9,193,164, 19,129, 20, 49,135,225,133,105,152,178, 9, 12,199, 23, 72, 7, 23,119, 0, 56, 69,211,
-118,150, 37,127, 90,231,140,221,185, 49,220,155, 54, 45, 48,118,195,117,117,227,247,151, 40, 23, 80, 68,103,113, 68,184, 70,157,
- 3, 21,114, 23, 67, 44, 95,212,105,233, 10,107, 65,197, 34,115,245,218,213,120,155, 51,103,206,119,193,247,132,233, 12, 67,143,
- 70, 70, 36,151, 26, 56, 28, 53, 18, 88, 71, 41, 82, 99,207,185,242,184,221, 67,182, 44, 21,120, 24, 28,203, 72,161,231, 8,111,
-250,123, 50,196,162,169, 76,198,247,176, 27,133,136,226, 57,140,187,222,222, 33,115,210,105, 52, 30,145,149, 26,184, 50, 57,114,
- 34, 77,170, 97,216,140,224, 25, 22,221,123,134, 59, 86,237,169, 12, 14,134,206,245,186,146,200,183, 53, 18,169,119,243,243,151,
-169,252,196, 41, 83, 42, 77,134,119,124,142, 16,118,187,115,100,137,125, 77, 7, 20,219,165,173, 12, 5, 89,168,194,217,144, 77,
- 27,126,153,230,132, 62, 91, 72,244,249,140, 27,239,183, 6, 22,197,253, 43,105, 2,243,216,127,184,241,179,101,197,218,114,206,
-166,233,125, 19,176,248,246,119, 81, 67,148,162, 74, 8, 59, 43,126, 31, 58,250,220, 62, 69, 74, 6, 93, 56,175,123, 43, 5,180,
-233,228,200,222,197,131,177,223, 47,209,241, 5,135,197, 83,239, 77,246,218, 3, 44, 42,201, 9,182,204, 99,172,165, 40, 7,132,
- 49,167,100,212,219,247, 82, 74,201,151, 53,251,255, 52,255,134,140, 31, 87,141,200, 9, 50, 57,195, 62, 82,214,167,134, 33, 23,
- 4, 78, 21,222, 96,142,108, 24,100,112, 45,184, 50,103,103, 81, 56, 71,205,195,173,232, 10,120,168, 66,145,124, 98,140,178,167,
-213,192,201, 0,115, 68,194,196, 43, 81,168,111, 13, 37, 60,101,129, 52,155, 71,200, 77,105,134,121,117, 2,141,229, 2,136, 68,
- 69, 96,193,106,164, 73,140, 11,162,172,250, 10,152,130, 55,195,194,148,235, 43, 77, 93,179,164,243,136, 40,126, 74, 9,194, 6,
-170,147,175, 27, 83,156,145, 58,182, 7,230, 89, 0, 76,236,149,105, 97,217,121, 12,155,236,184,184,139, 46,190, 66,238, 61, 70,
-202, 95,220,136,216,195,182,148, 19, 75,212,130, 24, 34,127,223,212, 56,188, 1,187,254, 2,179, 54,162,123,115, 64, 20,131, 32,
-225, 32,165,103,228,233,239, 48,190,177, 52, 75, 78, 51,115, 78,151,162,113, 47, 66, 77,153, 71,235,155,120,221,240, 28, 58,153,
-210,178, 4, 53,237, 66, 80,199, 5,231,178,112,202,229,128,179, 18, 89, 7, 75, 51,122, 52, 78,150, 86,159,158,203, 66,207,163,
- 88,228,174, 24, 20,143,210,201,106,237, 83, 73,165, 88, 20,103,231, 39,120, 78,154, 81,225,108,156,160,162,183,130,239,224,180,
- 75,114,206,202,123, 61, 55,140,176,173,130, 97,179,169, 44, 9,129, 17, 27,228,228, 26,248,103,224, 24, 44,144, 97,146,168,209,
-143,243, 21,106,197, 98, 62,166,104, 74, 93,166,103, 80, 97,166,216,249, 87,216,200,164,194, 78, 9,207,190, 43,134,193,224, 28,
-129,233,170, 17, 41,250,239, 26, 43,124, 40,171,232, 4, 31, 82,159,246, 92,198, 84,168, 93, 11, 24, 99,150, 92, 59,183, 77,188,
-106,100, 91,154,108,130, 27, 99, 2,195,204,240, 30,116,190, 74,137, 44, 81,137,249, 45,128, 35, 24,174,205,157, 82, 72, 15,139,
-228,148, 62,227,186, 45, 77,101, 94, 34,136, 32, 89, 13,241, 69,247,163, 42, 24,177, 7, 46, 69, 96,191, 10,103,111, 93,109, 28,
-231,169,192,116, 99, 48,226,109,169, 32, 48, 23,246, 63,143,250, 61,211, 35, 9,121,132,206, 73,197, 32, 81, 2,127,226,126, 34,
- 56,111,145, 89, 44,190,190,132,172,172,201, 41, 34, 71,131,206, 24,136, 17,135,125,210,231, 80, 88, 34, 53,143,129,138,167,221,
- 4, 12, 46,141,198,188,154, 67,211,133,109,178,183, 21,199, 43,173,150,209, 8,237, 71,141,185,225,115, 79,116,245,212,240,232,
-198, 57, 90, 35,253,185,176,186,164, 27,119,191,200,236,245, 71, 68,139, 73,171,180,203,164,136, 7,103, 29,167, 84, 50,231, 9,
- 33, 12,222,159,120, 29,220, 38,169,195, 24, 82,109, 87,255,110,168, 41,161,214, 53,246,205, 56,101,142,113,255,147, 12, 80, 41,
-232,105, 83,118, 24, 56, 69, 3,156, 82, 91, 98,233,153, 2, 94,175,166,214, 28,188,149,192, 82, 76, 57, 73,142, 48,186,254,111,
- 93, 89, 73,191,155,129, 71,224, 70, 74,239,235,239,113,162,238, 91, 83,127, 75,152,142,113,179, 43,185,204,193, 43, 21, 12,207,
- 42, 88,242,150,225, 89, 89, 68, 94,210,166,214,150, 18,204,104,113,204,129, 38,211,225,155,150,101, 52,244, 2,221, 91,206,110,
-190, 71,236, 29,100, 43,208,147, 22,187,119,220,148, 78, 36, 47,106, 75,253,217,117, 5,234, 64,220,227, 40,234,176, 21, 77,173,
-118, 35,254, 4,140,183, 70,232, 5, 34,242,130, 6, 94,196, 61,127, 78,128,201, 56,134,164,123, 32,107, 82, 64,195, 23, 86,200,
- 57, 97,210, 87, 50,184,105, 0,255,233,130,239,108,222,168,147,215,217, 17,164,122,164, 84,245, 58, 45,189,105, 78,230,180, 17,
-139, 59,147,211, 86, 2, 53,118,116, 8, 36,167, 91, 69, 8,162,137, 41,242,245,244,169, 58, 13, 83, 54, 76,103, 72, 97,127, 54,
-182, 23, 21, 12, 2,166,208,125,204, 32, 86,157, 79, 2, 37, 34,139,230, 11,236, 87, 34,185, 22,222, 89, 9, 4,162,196, 12,226,
-130,115,119,252,137,228,242, 46,163, 81,194,116,172,174, 9,230,198,191,154,230,135,101,137, 24, 2, 34,204,106,141, 64, 64, 50,
- 71, 98,114,114,204,249,242, 0,137, 37,213, 87, 5,246,179,182,156,110,166, 16, 83,211, 67,246,164, 86,168,135,235, 69,212, 53,
-233,120, 2,227,215, 64,107, 51,166, 39,239,230,171,165,106, 40, 97, 32,162,164,194,206,103,153, 10,241,107,147, 6, 60,199,105,
-223, 44,238, 32,101, 0,172,225, 86,248, 12,217,193, 48,232, 77,233,146, 41,165,210, 89, 56,239,151, 5,174,219,239, 55, 96,179,
-212,225,173,122, 35,108,189,133, 19, 11, 40, 39,155,231, 16,216,162, 93, 98,205,136, 76, 54,153, 61, 48, 35,116,194, 0,211, 80,
-205,161, 54,160, 98,157,246,232,133, 45,224, 10,105,218,132,210,100, 52, 58,250,160,121,125,238,217,128,104,133, 27,208,157, 80,
-147,122,101, 79,149,121,125,152, 48,221,175,199,226,240,192, 48, 83, 32,224,104, 8, 71,234,150, 97, 2,120,157,147, 17,184, 53,
-149, 22, 4, 82,236, 81,255, 66,116,175,109,100,188,130, 90,143, 8,118,213, 41,102,132,180, 83,142,198,170,192,125, 5,112,160,
-213, 0,171, 4, 80,131,160,254,107, 0,144,194,232,113,138,130,150,166, 25,225, 95,167,145,102,160, 52, 5, 48,214, 96,236,168,
-137,242,192, 89,192,115, 14, 67, 33, 9,215, 16,169,250, 72,162,217,220,169, 2,169, 46,189, 38,195,109, 48, 0,213,108, 99, 55,
- 99, 92, 32,106,199,249,133, 27,100,199,232, 16,134, 49,181,133, 26,191,159, 28,150,113,126, 49, 32,243, 75,227,161, 67,244, 55,
- 45, 40,241,164,157,221,139, 14, 54, 47,223, 52,172,102,206, 17,133, 21,221,112,212, 57,247,107, 43, 80, 63, 12, 32, 78, 56, 68,
- 57, 58,111,192, 30, 88,107,131, 84,162, 88,253, 89,162,230, 61,221, 31, 43, 81, 77,169,116,115, 44,170,103, 16, 74, 68,213,122,
-225,149,197, 29,217,201, 0, 27,128,114, 58,195, 49,186, 67, 99, 37, 16, 69,154,115, 33,158, 75, 25,235,152, 75, 70,244,111, 48,
- 30,170,215,225,217, 81,230, 14,137,211, 96,128,137, 87,139,224, 86,218, 99,214,182,146, 17, 49,143,251,214,184, 6, 58, 63,199,
-170,207, 61,230, 16, 0,164, 34, 15, 26,224, 47,150, 12,239, 2, 28,209,228,223,135, 67,194,250,240,121, 77, 54,210,192,198,146,
- 88, 22, 78,223,112, 87, 2, 89, 30,211,181,151,126, 35,214,210,132,197, 41, 77,118, 34,130, 24,210, 50,137, 4, 99, 70,215,168,
- 95, 15,248,228,213,144,234, 99, 42, 88,178,247,162,142, 30,154,109, 65, 39, 5, 35,113, 48,142,109,128,185, 66, 85, 49, 67, 14,
-243,166,182, 44, 5,110,114,168,186,159,113, 97,207,136,133,227, 16, 14, 83,251,243,246, 41,100, 6, 74, 32,127, 87,210,232, 88,
-246, 77,123,182, 36,188, 74,193,140,100, 19, 37,153,243, 90, 43,172, 75, 4,228, 73,100,118, 45, 96, 41,148,113, 63, 81, 91,103,
-159,135, 35,144,119, 41,144,199, 54,246, 66,102,151,144,165,247, 21, 16, 61,101,197,234,180, 70, 24,162, 18,243,234, 83,106, 2,
-235, 58,176,230, 74,138,122,128,234,226,155,166,214,213,106, 51,217, 24,234,235,162,145, 92,129,135,100, 57, 22, 17,159,172,204,
-145, 38, 36, 72,211, 23, 77,111, 79,105,147,140,128, 23,143,196,162,150, 85, 74,190, 14, 96, 49,120, 58,135, 82, 36, 31,121, 98,
- 79,183, 11,162,193,201, 35, 4,187,110,105,192,109,136,190,198, 61, 91,180, 6,107, 70,205,162, 97, 1,195, 88, 0,156, 24,115,
-106, 50, 7, 75, 69,225, 70, 93,136, 82, 70,133, 20, 81,206, 45, 32,208, 83, 73,146, 60, 98,191, 38, 48,174,150, 93,106,169,111,
-182, 56, 58, 78, 60, 8,175,235, 14,143,165, 32, 40, 9, 29, 33, 18, 44,222,171,113, 81,195, 84,216,157,163,201, 25, 16, 77,129,
-149,148,150,102,141,190,166, 20, 55, 43,208,211, 12,136,126, 54, 2,110,189,215,172,181,227,233,107,187,142, 61, 90,137, 58,174,
- 56,192,174, 51, 58,137, 71,225,122, 93, 14,168, 25,230,110, 25, 83,243,108,105, 58, 45, 31, 20, 68, 2,115,170,238,233,253,176,
-147, 43,193,230, 72,204, 14, 52, 48, 2, 78, 36,214,228,217, 61,119,134, 40,121,169, 0,194,194,156, 0, 57, 78, 31, 29,140, 59,
- 87, 63,230, 18, 92,121, 95, 0,117,186,211, 27, 93, 73,128, 49, 86,131, 63, 45,231,162,231, 84,192,136,151, 49, 59, 49,172,219,
- 42,144, 92,129, 20,205,144, 22, 23, 71, 37,103,194,103, 98, 85,104, 38,174,232, 92, 90,208, 84,155,246,154, 63, 75,206,192,177,
-213, 95, 99,173, 14,255,218,178,247, 58,118, 96,218,243,138,214,186,209, 73,136, 52,103, 0,181,136,195, 25,163,222,121,136, 4,
-101,206,230,149, 6,123,194, 92,146,129, 64, 50, 85,193, 77, 93,191,179,106, 20, 91,189, 62, 26, 70,219,172,202,132,254,135,122,
- 42, 82, 14, 57,211,108,199,121, 61,188,106, 85,119, 78, 2,251,144, 64, 29, 88, 54, 5, 70, 79,115,141, 2,120,151,228,112,227,
-121, 50,166,208, 17,225,158,163,215, 64,189,175, 98, 15,176,174,205, 80,214, 96, 94,165,135, 6,131,136, 82, 90, 60,131, 96,129,
- 58,218,100,140,253, 30, 87,201,199,133,160, 40,147,125,193, 14,217,156, 7, 67, 62,101,253,244, 58, 75,209, 61,196,102,100, 25,
- 29,110,204,224, 90,109,220, 50, 94, 69,231,231, 82, 51, 99,198, 52, 50,251, 84, 36, 50,216,195, 70, 52, 57, 18,101,220, 79,150,
-106,220, 23,206, 55, 47,211, 54, 84, 74, 84,187, 17,111,236,188, 92,182,104,172, 36, 80,211,116,103, 75, 70,193, 91,148, 89,192,
-235,109, 96,235,211, 67,140,132,162,123,157, 64,235,170,146,211,194, 14,246, 25, 83,106,101, 60,183,174,161,169,173,162,231, 97,
-147, 67,220, 5, 11, 0,187, 32, 85,196,185,110, 59,188,107, 9,165, 4, 75, 93, 91, 68,140,245,241, 66,136, 4,141,122, 76,251,
-221, 9,180, 5,155,142,164,146,129,128,115, 21, 84,175,201,232, 20,224,185, 34, 79, 57, 60,237,194,171,209, 31, 65, 58, 74, 52,
-210, 49, 32, 24,166,171, 45,226,152, 82,203,178,226,157, 91,165,192,241, 18, 2,153, 30,142, 58,120,181,180,235, 0, 30,177, 26,
- 42,208, 71, 44, 19,192, 80,202, 40,138,226, 52,132,121, 74,201, 26, 56,205,129,106, 80,118,209,235, 93,104, 54,104,201,147, 83,
-233, 53, 84, 7,231,229,224,162,211,141,104,187,143, 52,221,155,214,250,172, 59,176, 84,220,192, 48, 96, 59, 74,131,176, 47, 8,
-212,202,148,144, 84,126, 89, 5,255,181, 78, 83,161,228,158, 10, 37, 13, 4,230,182,166,162,165, 52, 42, 9,217,108,153, 17,187,
-111,162, 40,127, 51,212,200,121,183,243,169, 37, 12,171,165,250, 82, 41, 14, 1, 94, 94,229,230,148,221,234, 40, 64, 76, 86,219,
-180,140,224, 84, 14,224,224,252,121,129,148, 87, 25, 56,138,243,177,103,238,148, 58,168, 55, 10, 56,241, 85,162,238, 94, 45, 82,
-243,140, 92, 73, 96,241, 41,179,210,112,247, 25, 0,173, 16, 20, 84, 10,218, 17, 98, 53, 10,212,117,141,214,104,169,114, 6,140,
- 3, 97, 68, 13,215, 92,213,168, 12,127, 43, 94,106,171,126, 30, 85, 16, 20, 88,162,254,205,145,186,182,232, 94,146,193, 23, 0,
-164,182, 98, 9, 88, 22,108,172,101,179, 7, 50,101, 70, 68,203,109,183, 52,103, 69, 92,147, 6, 89,142, 45, 18,172,201,115, 42,
-103,250, 61, 46, 37,167,249, 89,146,241, 46,220,102,175, 50,184,140,145,190,138,107,172, 16,148, 59,162,204, 20,249,243, 72,195,
- 11,170, 41, 88,198, 88, 50,144, 77,212,112, 27,143,158, 69, 60,235,231,193,165,239,207, 60,101, 89, 25,168,192, 33, 78, 18,207,
-207, 74, 33, 85,241, 64,253,255,182,244, 1, 15, 24, 21, 67,188,219,164,173,186, 70,170, 34,236,141, 65, 48,166,223, 59, 46, 30,
-221,224, 70,230,117,118,216, 44, 29,167, 1,209,232,178,165, 68, 73, 54,114,150, 86, 47,224,193, 5,136, 45,170,136,150, 70,116,
- 47,185,106,109, 26,144,139, 82,193,248, 58, 48,132,129,244, 66,224,148,160, 95,108, 6, 76,143,167,128, 52,140,228, 43,166,215,
- 37, 3, 34, 8, 0, 19,200,220,183,168,161,168,161,112, 35,168, 27, 46,210, 14,208,235,207,117,166,184, 71,190, 88, 56,248,151,
- 9,203,156, 22,223, 68, 65,140, 8, 77, 82,221,201,193,118, 21,232, 28,232,125,115, 60,175, 82, 56, 34,121,155, 7, 37, 68, 53,
-204,201, 27, 54,233, 5, 68,187,211, 36,171,186, 97, 14,148, 35, 67,127,199,245,111,203,228,112, 85,219, 14, 52,216,241,114,195,
- 32, 18,163, 40,245, 2, 78, 72,135,243,173, 4,128,207,178, 27,139,148, 69,178,180, 40, 80,229,120,224,107, 14, 60,244,233,188,
- 12,180, 85,160,124, 51,206, 49,189, 71,204, 19,168,106,255, 96,236,198,227, 83,166,217,113,160,222, 11, 8,104,148,148,150,151,
-184,255,176,233, 21,230, 44, 90, 4,233, 68,145, 0, 20,226, 94,154, 32,114,236,112,187,241,119,219,117, 9,217,142,225, 25,118,
-206,225,237,156,253,193, 32,104, 36,145,166, 21, 73,184, 16,155,161, 53, 17,226,160, 30, 11,155,152, 25,180, 40, 37, 73,142,108,
-134,181, 40,145, 93,169, 6,230,246,239,116,206, 66,195,243,102,199,208, 36,254,140,129, 64, 97,222, 10,148,153,108, 83, 21, 72,
- 83, 24,206, 1,179, 23,219, 85,130,255,139, 25, 52,201,130, 17,200,113, 47,137,179, 60,165, 56, 11,148, 80, 70,148,177, 81,239,
- 10,240, 41,252, 51,211,220, 50,102, 9, 98, 22, 48, 0,112, 62, 51, 79,223, 58,214,190, 53,250, 50,195, 92, 56,156,129, 42, 1,
-182,115,202,154, 70,246,108, 70, 66,163,224,162, 6,166,141,184, 83, 56,209, 96, 49, 37,237, 83,146, 82,179, 83, 68,203, 43,185,
-119,214,115, 95, 4, 43, 24, 64,195,144, 41,229,112,251,152, 57,131,131, 0, 0,202,148, 29,136, 21,173, 19,225,140,225,106,153,
- 33,190,103, 67,202,190,193, 14, 85,194,108, 76, 56,116,152,129,137, 76, 38, 39,129, 23, 14,175,169,201,200, 67,160,161,108,135,
-209, 30, 89, 54, 25, 84,130, 12,131, 85,212,238, 77,152,144,222, 64,107, 0, 60, 36,210, 22, 60, 57,215, 46,236, 4, 40, 65,172,
-171, 15,118,105,169, 0,161,193,246, 44, 54,186, 46,140, 34, 3,130,123, 48, 88, 30,253,150,100, 28, 25,235,114,190, 89, 51, 76,
-248,168,185, 22,168,247, 86,137,197, 95, 52, 85, 84, 7,210, 60,136,134,116, 86,235,102,106, 12, 91,127,244, 46, 12,169,165, 55,
-208, 11, 54, 49,130,142, 86,244, 97, 48,121,146, 60, 70,219, 46, 13, 53,137, 25,114,100,218, 51, 3,141,143, 37,170,200,238,121,
- 5, 16,138,129,206, 97,136,211,186, 2, 38,137, 69,195, 14,138, 1,254,120, 42,210, 3,138, 91,116,143, 31,193, 65,154,154,166,
- 48, 86,163, 66, 22, 77,142,217,152,130,238, 88, 51, 43,150,106,210, 77,171,144, 71,174,104, 68,138, 34,246, 55,116, 46, 44, 13,
- 61,218,143, 83,189, 49, 57, 53,138,136,104,132, 87,194,145,216,208, 13,142,128,227,239, 17,167, 11,151, 72,176, 20,116, 1, 44,
- 33,125, 60,156,203, 6,164, 44, 43, 5,122,188,227,136, 12,167,107,159,190,223, 40,103, 38,140, 50,122,205, 69, 28,145,187,232,
-255,190, 49,214, 91, 39,241,155,241, 59,235, 68, 93,219, 26, 22,209, 40,214, 0, 4, 48,141,200,188,102, 95, 48, 91, 65,137,147,
- 62,166,254,181, 20, 82,184,161,188, 8, 8,232, 64,184,209,150, 87,156,162,196,188, 30,144,132, 42,130,186, 33,109,240,130,194,
-207, 55,148, 54,130, 61, 53,246, 54, 37, 51,243,238,101, 2,101, 97, 42, 19,105,106,184,150, 24,208,241,226,120,117,173,204,179,
- 4,135, 29,132,122,204, 70,150,138,142,186, 33,172, 45,202, 45,171, 26, 15,156,179, 0, 81,198, 43, 64,173,148, 21,196,167,229,
-182, 44, 19,179,212,181,159,140,130, 12, 37,132, 8, 38, 42, 82,222,120,114, 8,106,230, 19, 58,238,131,146,113, 98, 40,183, 77,
-115, 96, 16,214, 89, 88, 6, 83,168, 1, 70, 33, 70, 37, 11, 74, 5,248,117,226, 50, 91, 38,101,188,140,126, 87, 95, 42,243,127,
- 73, 1, 30, 52, 44, 64,161, 0, 32, 18,102, 90, 56, 59,144, 1, 12,105,197,184, 40,171,196, 49, 37,128,100,149,200,170, 58, 64,
-214, 49, 4, 37,202, 24,173, 6,146, 3,131, 75,148, 95, 27, 67, 77, 43,101,196,196, 64,139,138, 75,163, 5,194,140,146, 88,224,
- 57, 52, 92,239,150,190,140,224,103, 2, 26,158,149, 95, 70, 39, 16,116, 15,136,179, 19,224, 41,118, 88,187, 30,171,115,147,208,
-213, 64,208,246, 11,211,116, 41, 37,241,155,140,113, 61,125,157, 57,192,195, 62, 58,130, 25,181,164,168, 89, 26,203, 48, 17,100,
-202, 28,251,160,107,111, 40,255, 77,217,129,234, 2, 74,139, 33,154,145,132,122,167, 0,180, 16,114, 18, 33,205,164,155, 42, 99,
-125,164, 68,234, 83,132, 87, 56,164,164, 27, 51, 65,218,200, 34,212,142,197, 35, 48, 55,192,131, 2,153,184,204,146, 59, 26,152,
-234, 53,144,122, 17,240,204, 26,138, 94, 82,159,227, 21, 66, 99,166, 13,113, 0,189, 36, 69, 81, 25,112,193,171,133,119,247,164,
- 71, 73, 81,137,180, 74,251,149,104, 72, 45, 77,202, 73,144,129, 27, 89,219, 72,227, 58,242,147, 25, 0, 52,224, 52, 97,234, 54,
- 30, 86,186,175,120,237,142,204,133,109,107,161,128, 52, 3,127,237,227, 73,166,115,171,223, 57, 7,145,151, 69,255,222,173, 58,
- 69,232, 83,217,163,172, 56, 30,251, 0, 24,103,124,211,165, 1,165,152, 28,141,188,193,161,110,134,180, 38,214,205,183, 80, 32,
- 73, 43, 69, 54,161,148, 44, 19,234, 94, 49,141, 28, 77, 53,222,253,185, 90,136,110, 66, 72, 60,100, 14, 2,152, 85, 58, 30,223,
- 35,181, 38,177, 23,166, 76,181, 43,118, 63, 96,243,198,159,101,208, 96,240, 81, 45, 61, 95, 5,152,222, 40, 26,209, 72,216, 58,
- 91,192,210, 73,132,140, 59, 67,232,139,211, 15, 71,100, 21,242,124, 37,180, 20,166,107,162, 44, 27,172, 0,177, 42, 13,147, 70,
-203, 43,146, 68,103,106,192,142, 36,202, 77,228,104,223, 41,187, 82,165,137,169, 70,197, 44, 90,225,198, 87,201,226, 83, 85, 40,
-161,168, 5,106,187,220,176, 3, 8, 36, 78, 61, 67, 8,145,147, 69,111, 5,138, 87, 5, 36,121,188, 6,168,179,180, 2, 93, 73,
- 28,116, 90,147, 81, 22,216, 59, 44,183,192,128, 76, 46,109,125, 22,121,208, 72,197,100,201,249, 54,225, 68, 5,181,210, 77, 85,
- 33,195,174, 83,236, 67, 85,108, 2,212,246,151, 80,158, 27, 29,171,130, 34, 80, 5, 34,111,110,192, 12,226, 64,181, 40, 1,138,
- 43,249,185, 90,160,144,227, 33, 66, 22, 27, 0,115, 32,152,211,178,135, 88, 83,220, 92, 64, 70,181, 21,157, 90, 9,167, 37, 9,
-199, 33, 75, 41,105,124,175, 32,243, 36,201, 24,103, 52,136, 64, 89,132, 83,116, 78, 18,216, 16,209,192, 8,245, 18, 86, 20, 80,
-157, 7, 47, 0, 1,130,140, 78,137,108, 78,176, 6, 80,203, 74,180,212, 8,242, 62, 45,149, 77, 69,179, 60,155, 92,131,222, 93,
- 20, 99, 33,160, 72, 25,138,141, 17, 48, 88, 80, 80, 52, 35,186,224,210,173,168,232, 44, 5, 80,213, 38,126, 1, 8, 62,210,232,
-194, 40,216,148, 36, 46, 56, 16,214, 43, 56,234,156,166,119, 20,162, 84,175, 23, 13,187,102,208,128,244, 86,116,173, 69,142,201,
-197,112,209, 73,130,208,210,255,130, 17, 94,195, 59, 55,113, 25, 51, 18, 54,121,145, 2,209,128,220,164, 1,118, 24,162,124, 76,
- 75,193, 2, 46,148, 65,115, 40,202,144,167,185,100,212,166, 1, 42, 40,138,116,133, 66, 35, 91, 0,180, 83,146,254, 48,143, 41,
- 99,198,201,201, 0, 90, 76,245, 49,142,122, 42,164,164,189,122,203,192, 59,230,201, 73, 25,254,126,176, 76,139, 96, 99, 52,232,
-197,235,116, 75,240,248,247,117, 81,107, 55, 14,238, 80,243,217, 2,222, 48, 3, 11,149, 20, 0,181,209,177,215,127, 55, 10,195,
-166, 88, 82, 57,195, 0,150, 62,161, 75,200,201, 46, 0, 40, 57,165, 30, 5, 12,172, 56, 16,199,234,166, 62,129,134, 19,174, 33,
-246,130, 32,157, 66,173,214, 59,164,209, 36,244,195,113, 35,143, 58, 57,235,249, 87, 16,105,162,182, 34,217, 4, 84, 5,194, 39,
-129, 53, 38,206,217, 78, 10, 92, 9,116, 19,231, 72, 14,112, 67,174,114,113, 32,143, 36,225,111,224, 1,155,242, 92,147, 6,197,
-232, 95,198, 52,191, 56, 90, 90,128, 79, 39,133, 18,248, 77, 72, 32,226,111,121,210, 28, 0,193,148, 34,150,140,153,147, 41, 43,
-215, 74,157, 22, 48,204,145,158,111,176,208,133, 60, 69,143,207, 47,107,115,176, 70,199, 89, 48, 37,145,181, 0,232, 91, 97,234,
- 20,247,191, 80, 51, 34,107, 72, 8, 53,250,226, 20,218,233, 46, 21,172, 72,121,115, 92,170,127,207, 20,201,141,233,254,113,109,
- 23, 23,183,177, 0,222,128, 85,196,220,100,122,216, 17, 15,168,200,150,203, 43,130, 25,240, 70,201, 44,171, 2, 82,163, 16,137,
-193, 82, 73, 84, 61,206,217, 38,202, 96, 79, 2,177, 29,228,154,155,248, 14, 3,117,176, 21,211, 9, 57,114, 20,169,145,204, 34,
- 1,229,183,160, 2, 2, 91,200,179, 83, 28,202,115,210,158,103, 56,201,157,123, 96, 5,246,125, 78, 58, 1,228, 24,143,170,223,
- 81,147, 96,168, 35,223, 9,128,110, 44,192, 10,145, 96, 42, 0,133, 45,148,117, 56,199,165,206,143, 87, 55,111, 25,207,115, 49,
-214,114, 11, 39, 0,200,240,179,106,104, 72, 16,228,168, 28, 41,181,162, 0, 43,134, 72,158, 17,124, 65,109, 58,145,136,207,196,
- 86,129,136,195, 37, 20,161, 78,198,171, 22,209, 63, 27,224,183,216,240,167, 90,176, 78, 86, 6,217, 68,151,163,148,188,176,129,
-147,139,155, 66,113,222, 34,212, 97, 65, 52, 1, 27,200, 20,206,109, 56,186,204, 58,214,250, 90, 8,155, 80, 1,189, 98,135,227,
- 71,251, 20, 67,114,199, 4,103,255,126, 75, 98, 90, 67, 20, 73,138,127, 90, 95,113, 17, 20,130, 72, 81,109, 24, 77, 17,182,165,
-163, 59,189, 7, 29, 71, 9,198, 1,100, 83,184, 57,213,124,244,189, 75,125, 62, 54, 17,247, 73,120,198,126,143,244, 81,141, 17,
-121, 25,106,213,177,185,143, 92,111,173, 15, 85, 80,200, 27,126,191, 81,108,193, 85, 55,222, 94,179,132,247, 14,115,182, 43,224,
-120,137, 4,251, 65, 12,172, 36,176,192,139, 99, 16, 88,211,111, 35, 66,123, 76,193,218, 26,152,194,162, 73,118,182,142,127, 31,
-163,241, 98, 72,123, 43, 39, 76,145,236,160, 41, 80, 20,177,159,203,123,202,203,183,101,204, 29,240,114,217,227, 69,211,163,110,
-155,119,184, 12, 76, 2, 45,198, 54, 82, 76, 95, 31,177, 62, 57, 39, 29,141, 91, 60,149,220,121,148, 83, 0, 16, 42,205,122,170,
- 88,103,166, 86,112,133, 18,238, 69, 26,220, 74, 75,179, 66,223, 77, 32,202,172, 76, 80,210,106,165,164, 81, 1,142, 93, 33,145,
- 37, 55,157, 41,134,127, 25,217, 53, 12,197, 50, 78, 58, 54,147,209,237, 34,189,109, 37, 65,230,100,188,186,100,192,128, 11, 14,
-217, 12,151,178,165, 53, 74,146,198, 86,193,107,131,136,223,249,196, 73,183,187,186, 35,229,234,149, 78,133, 18,136, 50,217, 51,
-145,194,185,111, 74,213,123, 81,206,212,240, 67, 76,162,152, 39,240,163, 59, 3, 0,128, 92,145,163,110,241,222,156,231, 73, 35,
-149,154, 24, 53, 68,185, 95,135, 68, 23, 5,226,220, 72, 6, 69,116,114,119, 41, 81,130,120, 24, 55, 55,250,141, 2,165,180, 34,
-103, 77,170,189,149, 87,118, 5,186, 26, 40,146,146, 24, 73, 97, 67, 4, 88, 17,230, 48, 10, 38,125,149,185, 85,129,243, 63,237,
-195, 1, 50,119,225,117,100,168, 36, 65, 32,197,119, 41,150,194,215, 84,205,165, 56,201,160, 7, 85,101, 21, 40, 19,133, 61, 92,
- 44, 37,116,152,145,136, 88, 40, 60,113,227,117,150,148, 40,206, 96, 11,211,212, 45, 58,235,184, 80,211, 95, 64,178,192, 9,208,
- 47,108,195,198, 19, 76, 92, 81,192,194, 58, 55, 93, 12,240,160,160,150, 2,169,108,221,168, 37, 59, 57,147,193,233,112,193, 86,
-136,174,166,141,180,166,135, 22,228,254,174,148, 4, 26, 49, 48, 97,210,126, 46,228,155, 67,214,234,143,137,108, 64,190, 49,213,
- 6,212,177,165,160, 64,207, 84,235, 69,154,133,167,223,213,229,171, 64,157,152,140, 35,131, 78,117,174, 91, 21,164,222,105,180,
-178, 80,197,174,253, 67, 74, 93,211,215,251,251,205,111,248,251, 88,227,209,251,177,173, 19,110, 41,197,233,124,251, 53,187, 51,
-130,122,116, 2,119,138, 80,158,234,149,117, 4,115, 89,250,100,152, 67, 11,182,242, 66,113, 99, 55,124,118, 57,162,212,130,225,
- 16,202,111, 37, 34,102, 75, 63,119,156,144,177, 17, 73, 84, 5, 26,150,209, 97,224,146, 50,104,192, 91,149, 64, 65,107,234,172,
- 84,243,118,151,238,164,117,150,134,210,140, 4, 47, 34, 21,110, 77,105,202,162,191,226,210, 65, 62,106,181,179, 26, 49,254,172,
-100, 21, 62,233, 18,194,187,112, 86,211, 98, 9,177, 2,177, 77,222, 13, 74, 77,221,192,200,128,167,240,111,225, 0,173, 22,236,
-164,161,153,138,202, 89,179,206,128,100,165,137,204,106,219,139,169, 74,208, 74,155,102, 30,216, 4, 17, 32,118,154,206,205,106,
-116, 85,157,205, 37, 56, 19,222,100, 5,140,253, 98, 40,145, 72,142,138,196, 27,148,212, 70,248, 9, 64,149, 10, 96, 51, 85,186,
- 2,169,221,156,101,181,245, 55,148,102,100, 85,109, 5, 37, 85, 57,115,143, 49,244, 29,241, 21,165,237,165, 0, 90,233, 2,200,
- 31, 4, 48,174, 83,121,163,134,209, 2,106,109,168,179, 31,236,163, 18, 64, 47,124, 30, 18,204,146, 10, 44, 7,204, 52, 22,206,
-133, 82, 15,188, 18, 61,150, 82,115, 42,156,223, 45,136, 13,244,113, 34,248,145,140, 89,104,179,135,153, 98, 22, 14, 0,102, 77,
-147, 34,104, 78,140,172,211,234, 78,126,105,164,234,171,179, 47,188, 76, 53, 69, 0, 32, 24,195,169, 12, 16, 21, 10, 73,153, 35,
-210,192, 67,150,168, 67, 47,233, 44,121, 37,139, 77, 30, 89,187,208,208,120, 78,208,151,129,178, 6,132,151, 5, 91,237,126, 4,
-234, 89, 45, 95, 51, 62,139,146, 82, 41,156,210,196,158,190,230,160,168, 20,230,246, 52,115,109,176,152, 2,215, 20,221, 84,104,
- 32, 50, 44,220,237,193, 92,177,202, 93, 72,166,116,229,180, 68,208,230,152,162,123,155,213,164,195,249,224,212, 93, 39,113,202,
- 19,121,159,129, 18,146,193, 57,232, 73, 44,146,230, 51, 56, 45,246,123,142,116,147,192,121,145, 58, 24,203,228, 53,199,247, 47,
- 82,207,133, 44,162, 50, 24,247,109,201, 13, 84, 38, 16, 77,150,224, 36, 0,100,133,112,133, 56,103,155,176,233,136,228, 26,249,
- 36, 2, 83,146, 76,231,112,158, 91, 18,216,147,229,178,142, 52,178,233, 57, 87,165, 28, 77, 5,168, 97,242,142, 75,130,205, 35,
-229, 49, 82,181,134, 50,195, 23,110,142,167,186,212, 72,168,140, 27,106, 71,236, 93,209, 44, 2,223, 18,241,136,198, 40, 77, 12,
-155, 76,213, 54,167, 5,133, 40, 44,130,177, 58, 22,160, 73, 29,172, 54, 78,157,234,212, 58, 66, 1, 25,142, 8, 31,213,178,106,
-177, 40,160,115,136, 89,124,182, 75, 37, 24,151,231,181,212, 60,126, 15, 53, 82,200,204, 77,177,135, 83,186, 91, 10,138,185,168,
- 65, 73,155,149, 57,105, 21, 74, 63,213, 65, 50,150, 55, 42,234,204,180,210,198,216,171, 32, 40, 88,193,162,176, 57,180,160, 0,
- 49, 86,161,212,158, 18,203, 20, 78,137,235,108,110, 69, 36, 47,102,236,133, 0, 37,140,233,119,129,141, 74,175,177,178,131,218,
- 70,166, 2, 75, 19,245, 69, 93,220,149,198,188,214,104,142,113,201, 28,231, 6,205, 45, 6, 96, 45, 40, 96, 35, 78, 99,179, 53,
-180, 20,216, 56,155, 44,131,165,186, 75,206, 72, 67, 29, 55,158,117, 71, 40,150, 5,116, 59,111, 11,106, 81,121, 77, 77, 73,170,
- 55,219,145,182,187, 85,224, 8, 64, 93,173,112,219, 14,183,250,196, 17,160,184, 5, 29, 17,106,233,202,251, 95, 1,102, 54,212,
- 54, 94,215,146,186,181,164,208, 55, 88, 48,130,106,133,224, 11, 16, 57,157,239,159, 69, 65, 60, 10, 47,136,137,144, 53, 25,145,
-120,142,168,161,207, 73, 18, 25,196,208, 82,250, 98, 2,127,187,168,176, 49, 15, 40,132,167,114,230,201,173,105,116,121,171, 32,
-219,106,134,213,166,117,181,198,104,177,199, 58,179, 37,185,122, 21,116, 29, 36,219, 93,137,192, 35,149,138, 21, 71,226,112, 83,
-165,102, 46,200,100,196,101,204, 88,141, 53,117,231, 79, 35, 95, 24,170, 73,157,214, 78, 83, 93, 8,123, 51, 67,106,202,110,120,
-109,248,214, 21, 80,167,236, 26,209,160,150,228, 77, 17,196,105,106,158, 94, 7,163, 60, 81, 85, 86,235, 62,145, 90,175,190,105,
- 79,233,149,168,111,154, 46,116,161, 16, 9, 17,132,148,147, 25,209, 80,225, 18,232, 30, 38, 98,124, 67, 16,141,209,107, 41,160,
-160, 68, 96, 0,176,110, 86, 97, 14, 23,231,206,178,131, 6, 59, 14, 4,183, 29,107, 97, 96, 58,158,156,133, 14,188,229, 5,179,
- 59, 56, 29, 35, 55,120,170, 27, 87,104, 57,187,109,105,219,106, 70, 96,122,206, 75, 85, 63,171, 92, 61, 13, 78,218,187, 90,234,
-244,174,174, 96, 10, 22, 80,186,253, 25, 45,164, 52,169,168,152,141,216,202,176,131,150,130,203,218,116, 70,162,136,252, 88, 23,
-134, 71,160,144,147,101, 88,240,236,168,223, 0,171,141,233,240, 36,106, 19,104, 84,140, 90,204, 0,141, 96, 59,225,196, 89,157,
-234,215,177,139,118,194, 64,167,162,164, 84,133,202,138,216,169, 9,219,146, 34, 35, 72,154, 94,156,222,247, 27, 0, 75, 12, 26,
- 4, 65,163, 9, 93,126, 67,121, 59,109,207,158,174,160, 92,174, 33,221,213, 65,113, 0, 21, 36, 17,125, 29,144, 71, 71,219, 74,
- 35,173, 90,114, 64, 71,186,112,240,191,163,186,158, 41, 63,214, 84, 73,236, 25, 98,235, 93, 50, 6, 6,123, 77,190,128, 66,113,
-169, 12, 34, 59,156,129,180, 77,100,105, 6,181,195,134, 65,208, 12,138, 25, 49, 4,121,159,153,132,131,216, 55,200,237, 26,200,
-115,195,154, 45,160,105, 70,230,108, 75, 18,173, 79,210,162, 45,190,138,178,114,219,176, 23,213, 20,161, 73, 82,129,116, 31,140,
-115,154, 27,123, 40, 8, 2,104, 87, 20,221, 56,233,209, 51,116,108, 91,145,196,165, 70,145, 13, 91,109,227,117,165,134, 64, 25,
-241, 43, 32,125, 61, 61,207,178, 18, 49,167, 78,139,107, 48, 12,173,138, 93,139,119,162,100,218,129, 27, 33, 77,247, 55, 14,137,
-231,202,171, 29,234, 76,153,212, 28,188, 81, 31, 65, 2,239, 19, 74,161,209, 15,190, 64, 22,197,235,219, 82,147, 16, 87,176, 67,
- 98, 82, 84,232,153,193,209, 2,199, 5,169, 3, 15, 34,107,202, 3, 72,159,195,246,220, 65, 15, 37,199,110, 5, 46, 10,101,139,
- 85, 1,122, 10, 60, 93, 61,108, 5, 24,193, 32,247,215,180,206,100,104,114,128, 84, 1,247,170,135,109,191,174,158, 47, 72,140,
-250, 99,243,226, 75,110, 49,135,173,249,218,206, 71,150,178, 43,133, 0, 48, 22, 92,239, 17, 0, 40,226, 66, 29,174,152, 71,209,
- 77, 75,192, 75, 92,210,100, 68, 77,184, 98, 1,242,150, 73,193,142,178,166,180, 55,237, 40,145,154,234, 40, 64, 26, 2, 29,177,
- 48,146, 35, 77, 89,219,181,118,170,133,189,148,224, 12, 51, 20, 61,151, 16,109, 21,229,210, 71, 95,108, 67,255,178,223, 39,214,
- 73, 59, 78,220, 90, 93,200,100, 20,184, 40,152,213,200,207, 71, 84,190,115, 2,142, 21,239, 58,229,114,167,150,165,224, 64,163,
-155, 1,232, 58, 78,212, 13,139, 26,150, 35, 61,167,122,171, 85, 82,164,126, 17,228,181, 6, 93,165, 67,157,229,196, 99,141,198,
- 47,133,115,141, 41,199, 29,224,168,170,192,145, 95,179,131, 86, 74,146,243,100, 72,243,121,111,112,138,243,228,166,149,239, 10,
-132, 7, 26, 76, 8, 68,227, 24,128,182,109,163,151,169, 37, 35, 37,161,144, 80,219, 42, 32,158,212, 53,145,107, 56,202,212,182,
- 62, 6,241, 32,172, 56, 23, 94,128,207, 32, 62, 5, 6, 38,194, 36, 83, 90, 35,234, 42, 8,164, 28, 74, 49,213, 29, 71, 1,167,
-145,217,116, 30,130,143,156,219, 45,247, 27,105,101, 55,102,197,219,176, 98, 83, 15, 74,252,219,174,105,227, 57,105, 31,228,172,
- 90,116, 1,172, 41,171,150, 1, 86,185,161,204, 82, 8, 12,171, 56,245,168, 85,195,172, 43,117,135,216, 11,176,219,152,245,214,
- 0, 54,122,148,198, 82, 30, 28,128,113,133,163, 99, 26, 33,176, 75,146, 2, 26, 2,222,164,233, 48, 23,181,253, 44,106, 37, 77,
-132, 45, 88, 71, 0,166, 70, 33, 94,225,110, 83,210, 46, 96,175,253, 11, 0,107, 19, 5, 18, 93, 6,206, 20,230,117,252,113,230,
-213,212, 52,202,144, 99,253,158,241,251,219,213, 38,107,174,141, 32,211,139,101, 84,115,138,161,195, 37,182,109,157, 34,237, 58,
- 81,219, 80, 59, 68,196,245, 75,120, 52,232,156,130, 80,107,175, 61, 5,252, 81, 38, 99, 40,221, 90,149,176,166,242, 4,130, 68,
- 97, 79,151,220,213,180, 90,137, 76,163,111,111,182, 84,194, 17, 39,136,246, 13,100, 55, 1,134, 75, 60,232, 72,235,173,182,236,
- 75,209, 21,103,121, 67, 19,171,111,189,194, 86, 33, 75, 0, 13,203, 18, 34, 41,132,244, 45,148,167, 53,144, 12, 71, 83, 5, 1,
-238, 98,210, 46,112,142,189,170, 51, 25, 42, 89,235,158, 21,178, 41,168, 96, 23, 37, 90, 9,234, 0,148, 24,194,176, 75,122,127,
-103, 53,238, 46, 64, 54,219,154, 70, 91,234,166, 84, 56,183,105, 45, 46,104,194, 9, 73, 27,233,221, 50,165,226, 71, 35, 40,208,
-191, 36, 54,156,142, 10,200, 81, 22, 5, 21, 9,229,224,112, 50,122, 11, 7,175,161, 36,171, 0,223, 90, 38,225, 23, 70,196, 62,
-110,102, 83, 19, 8,108,248, 99,226, 48,117,168,153,143,159, 45,227,217, 14,148,183, 33, 69, 95,192,216,111,148,206,107,130, 11,
-192, 14, 44,149,159, 59, 69, 38, 77,177, 66,176,247, 60, 1, 90, 89, 82,127,242, 21,128,141, 88,121, 1,168,111, 94,191,139,187,
-222,149,232, 7,110,247,177,122,235, 94, 44, 69, 69,218, 20, 83,114,130,120, 16,147, 57, 6, 16, 16, 81,150,102, 21, 44,198,154,
-163, 81,161, 11,154,132,252,139,115, 87,205,105,146, 80, 36,115,168,119,202,132, 22,175,241,135,224, 76, 72, 84,146, 43, 1, 70,
- 25,131,185, 64,195, 38,153,116, 34, 8,149,245,138,235, 71, 48,120,122,131,163,199, 93,201,181, 97,167,193, 41,201,149,179, 96,
- 72,234,165, 94, 84, 76, 10,234,218,210, 8,162, 72,211,173, 78, 82,203, 92,108, 56, 69,222, 64,195,143,207, 17, 1, 23,108,254,
- 36,172,206, 61,123, 38,178,211,245, 82,177, 67, 26, 1, 88,182,230,174,104,174, 39, 95, 27, 7, 18,178,187, 85,123,196,123, 94,
- 70, 80, 78, 59, 59, 47,150,235, 88, 32, 88,143,215,115,219,169,101,180, 36,114, 52, 26, 53, 94,163, 19, 31,153,212, 2,233,125,
- 44, 1, 54,190,177, 58,107,156,244, 61,180, 90, 0,221,228,115, 54, 1, 21,219, 82,139,224, 70, 85, 49, 3,165, 27, 72,159, 81,
- 52, 87,154,200,163,231,203, 10,236, 19,200, 12, 71, 6,145, 80,119, 61,112,175,233,217,134,200,211, 16,177, 75,194, 50, 68,177,
-136,147,131, 35,137,201, 64,161,227,143, 14, 31, 6, 71, 41, 18,151, 36,144, 70, 32,154,196, 64,212, 23,160,227, 76,148, 73,141,
-254, 7, 27, 86,141,146,104,229,183,169,173, 43,186, 85, 35,197, 81,109,231,162, 32, 9,135,195,195,192, 39, 16, 31,204,169,111,
-110,184,144, 32, 43,146,196, 50,132,178, 38,187, 3,191,124,130, 77, 2, 18, 46, 54,162, 27,239,178, 74,244, 92, 87,157,237, 9,
- 4, 36, 41, 59,107, 41, 97, 79, 19, 23,137,118,145,147, 92,152,162, 15, 81,238, 48, 80,225,134, 52,239, 40,119,112, 43,140, 28,
-226, 80, 19,234,138,214,214, 5, 59,152,178, 82, 78, 76,183, 55,106,137, 21,120,215, 76, 33,215, 89,200,142, 53,137,174, 88,204,
- 33,181, 56,219,192,238,255,190,182,198,165, 72,216, 13,142,122, 82, 89, 83, 39, 67,240,147,219,135, 18,134, 29,145,230, 5,116,
- 6,204, 73, 40,192, 53, 71,192,163, 40,180,112,164,131, 0,162, 56, 52,225,139,235,181,119,133, 1, 15, 17,247,166,131,180,108,
-150, 60,129, 30,223, 0,244, 51,175,118, 41,153, 6, 24, 70,161,246,142,132, 34,210,181,116,128,141, 19, 92,164,199,203, 76, 19,
-215,119, 91, 40, 37, 27, 13, 80, 40, 0,236,100,104, 41,199,168, 87,192,226, 70, 71, 32,237, 9, 97, 95,234,164,230,115,181,184,
- 10,134, 58, 76, 93,136,214, 80, 3, 92,149,134, 59, 75, 32, 1,140, 10, 88,133,155,104, 21,120,119,230, 60, 20,201,209, 68,153,
-114, 22,195, 90, 91,202,210,157,144,132,113, 80,214, 31, 3, 12, 94,156,190, 97,199, 5, 96,106,106, 23, 13, 44,148, 0,124,167,
-242, 74, 11,180, 67,234,101,146,238, 68,204, 2, 5,144,169, 16,116, 16,162,192, 5, 24, 67,195, 82,254, 94, 15, 69,122,149, 59,
-244,209,162,213,165,141,189, 67, 86, 24, 4, 84,182, 64,116, 17, 70,184,149,114, 31,137,209, 89, 7, 46,126,112,102, 97, 91,230,
-117, 88,237, 48, 2,222,237, 26,105,194, 14, 76,139,230, 84,137,210,139,209, 50,164,216,145,134,197, 73, 98,139,146, 82,155,117,
- 83, 19, 72, 95,175,164,217, 81,158, 90,208,108, 4,119,157,192, 33, 8,231,165,172, 66,201, 32, 75,139, 59,188, 0, 93,172,131,
- 72,123, 98,143,101,167, 59, 26,125,114,104,177,251, 53,130,214,131,228,136, 95,224,134,174, 0,172, 11, 71, 19, 29,202, 45,161,
- 9,187,176,249,253,196, 8, 20,179,134,184, 61, 76,185,114,203,216, 44,177, 53, 46, 89,183,183, 58,189, 44, 83,103, 64, 60,182,
-190,236,188, 82,176,160,209, 14, 21, 1,160, 26,231,186, 78,225, 85, 90, 7,197, 68,202,160, 14, 73, 30,165, 25,230, 2,147,117,
- 81, 90, 46, 47, 68, 93, 69, 82,182,106,124, 71,215, 41,103, 30, 34, 32,137,227, 38,110,165,214,130, 67,176, 67, 32,178,175, 14,
-108, 50, 3,110,189,176,215,128,169, 33, 37, 11, 32, 41, 75, 88, 21,168, 37,121,255, 92,136,168,129,135,111,147, 96, 97,218,250,
- 26, 98, 20, 4, 22,234, 57,110, 37,106, 15,143, 2, 46, 89,194, 16, 1, 78,210,226, 84,166, 5, 4, 29,187, 56,129, 42, 98, 51,
-232, 10,100, 62,192,155, 53,157,121,144, 12, 25, 15,186,237, 28, 90, 6,100,235, 36,227, 26, 40,170,170,188,240, 2,252,108,144,
- 75, 21,113, 42,157,101, 14,196, 35, 91, 73,148,168, 2,189,202,173,134,187,212, 55,116,154,238,180,186,118, 53, 9, 77, 49,193,
-156, 2, 66, 29, 50,129,177,212, 97, 18, 77,103, 21,137, 29,160,170, 84,108, 81,145,203,220,255, 15,234,231,222, 94,149, 82,183,
-168, 80,186, 2,101, 65,106, 53,141,154, 14, 79, 2,169,213,110, 93,195, 36, 1,145, 18, 74,242,170,104,224, 81,187, 63,201,176,
-242, 42,235, 65,210,102, 4, 70,210, 56,254,134,203,240,106,204, 18,196, 71, 4,132,120, 36,156, 20, 41, 38,152, 63,221,109,228,
-187, 67, 36,110,108, 21,239,198, 88,206,192,137,198,222, 16, 48, 65,167, 84,181,228,180,161, 68, 86,174,242, 36, 38, 99, 6, 27,
-169, 66,172,153, 62,161,232,106,215,162,162,221,217,129,156,118,133,212,172, 52,234,105,222, 16, 6,203,149,188, 42,104,229, 77,
-150,160,127, 66,139, 11, 88,169,170, 74,195,143,163,117,247,138,154,110,115,208,192,138,161, 11, 94,227,222,163,166, 71,166,177,
- 67,185, 76, 90,144, 32,175, 70,206,222,181,142,179,122, 27, 24, 57,105,168,157, 9,163,208, 84,236,165,161, 55,147,112,171, 16,
- 0, 12, 10,166, 4,185,178,103, 47,145, 85,242,158, 5, 80, 90,100,130,246,185,148,211,214,152,253,144,198,185, 17, 8,112,124,
- 95, 40,185,239, 68,248,147,109, 96,178,166,153,151,126,113,213,108,238, 8,108, 27,152, 69, 53, 38, 64, 53, 42, 47, 69, 83,180,
- 49, 89, 81,170, 73, 97, 65, 43,243, 92,127,183,204,222, 66, 0, 25,200,112, 97,169, 15, 56,120,101, 72,127, 49,133,161,120,160,
- 42,155, 89,154,102,247,176, 72, 11,151, 38,146,228,240,242,176, 85, 34, 27, 34, 91, 1, 78, 85,141,172, 69, 73,237,108, 47, 74,
-148, 2, 62, 96,226, 75,106,135, 27, 7, 50,112,163, 10, 87, 0,121, 88,176, 71,111, 68, 62, 5, 59,139, 81,164, 6,197,165,252,
-196,121,216,211,241,187,212,122, 80,156, 75, 77,185,169,136,132,188,172,101, 47,140,143,110, 9,224,226,148, 44, 78, 42,221, 12,
- 97,142, 69,178, 40,241, 57,214, 17,171, 52,237,101, 21,108,228, 29,205, 34, 27,129,205, 75,188, 78,195, 83, 63,230,224,210,150,
-212, 6,215, 42,170, 92,197,107,222, 14, 82, 19,173,227,235, 61,233,188,129, 5,234,242, 7,199,178,170,198,190,101,110,172, 79,
-240,112,239,182,128,170,100, 17,192,112,126,219, 38,162, 83,171,179, 46, 12, 57, 63, 70,246,154, 26, 54,240, 98,167,200,252,225,
-248,131,194, 92,199, 89,239,156, 28,217, 30,101, 13,246, 58, 51,132,152, 92,178, 50, 84,106,231, 40, 77,202, 49,218,118,138, 75,
- 54,150,201,176, 91,126,147,201,187,134, 57,111,190, 73,189,122, 83, 18,130,182,161,194,216, 76, 44,211,133,188,156, 17,125,140,
-139,172,107,110,161,153,158, 49, 26,152, 80,255,134,158, 52,117, 58,130,250, 53,131, 70, 56, 11,226, 16,194,185,148, 34,161,177,
-190, 86, 81,140,147, 24,147, 36, 30,116, 68,200,149,114, 15,135,160, 67,132,152, 14, 27,173, 19,129,220, 66, 43, 14, 73,106,138,
-195, 33, 60, 19, 25, 94,214, 14,110,154,206, 68, 3,175,215,145,244, 17, 44,170, 47,146, 3, 22,148, 22,110,155,251,172, 68,229,
-133,172, 61,115, 74,185,147,172,148,146, 37,129,207, 74,162, 23, 26,221, 45, 99, 20, 40, 1, 61,169, 97,107,144,164,164, 18,148,
-252, 48,224,105,120,234,112, 94, 35, 65,149,173,177, 81,241, 50,172,173,243,109,194, 52,120,195,142,192, 70,245,168, 14,152,100,
-166, 65,255,128, 25,212,240, 0,128,206,197, 5,125, 4,234,244,222,103, 4,105,158,201, 65,192,206,146,153,255, 79, 77, 95, 47,
-203, 58, 90, 38,185,115, 10, 25, 8,135,149, 16,143, 50,163, 91, 9,208,117, 50,149,104,135,210,214, 64,229,221,238, 15,184, 93,
- 35,160, 30,245, 49, 40,120,239,185, 61,108,151, 16,241, 5, 0,204, 5,104,169, 35, 93,185, 86,160, 47,180, 93,212, 96, 50,162,
-215,105, 29,207,108,179, 40,156, 25, 17,158,250,195,118,170,165, 75,117,208,176,143, 28,136, 3, 22, 80,151,155,156,134,125,101,
- 50,129, 82, 48,189,132, 90,221,128,190,205,218,109, 94,227, 52, 69,178,210, 68,226,130, 84,184,149, 8, 55, 54,199, 36, 9,153,
- 80,198,160, 44,199,185,145,135, 80,116, 84, 74,158,219, 96,156, 70,222,187,138,236,152,124, 46,163, 80, 72, 86,201, 66,193,203,
-138, 81, 58,228, 47,177,189,102, 18, 84, 78, 84,166, 22,104, 40,208,197, 45,138, 42,158,236,146, 73, 5,206, 48, 10, 81, 47,171,
- 46,158,129, 90, 89, 44, 18,114,149, 46, 11,107, 15,173,134,160,206,106, 7,137,104,136, 0,177,133,101,105, 48,166, 89,140,162,
- 50,236,168,212,165, 57, 63, 10,134, 43, 50,181, 18, 93, 40, 45,206,232,242, 67, 20, 63,124,182, 27,192,102, 92, 29, 80,212,129,
- 72,140,213, 98,139, 16,244, 60,199,188, 25, 37,190, 41,185,177, 43,174, 24, 17,189, 9, 36,117, 41, 52,158,209,164,233, 0, 27,
-153,149, 2,180,179, 87,110,252, 66,160, 57,221,110,200,209,236,198, 5,144, 76,170, 25,153, 24, 40,228,212, 58,165, 13, 22, 76,
- 18,181, 68,180, 44, 86, 27, 62, 76, 83,150,195,156, 98, 74, 73,194,159, 66,171, 88, 27,195,102, 72, 34,187, 68, 17, 23,168, 89,
-193, 60, 23,108,177,211,212,152, 89,233, 73,134,198,158,230,175,149,120,194,104, 72, 34,172,139, 54, 42,194,158,238,213, 51,130,
-210,128, 46,217,231, 73,202,136, 8,172,112,236,163,144,186,188, 97,228, 73,105,223, 49,131,220, 53,251, 47, 74,116, 83,206,161,
-185, 67, 84, 82, 37, 67,168,161,224, 39, 42, 92,170, 12, 81, 99,188, 13,187,176,242, 38,128,144, 40,166,167, 43,185, 41,143, 69,
-175,214,200,201,193, 94,172,117,235,170, 0,197,100,208, 41, 53, 93, 65,218,155,183, 95,133,108,163, 64,214,213,154,127,141,199,
-173,161, 6,186, 68,251, 0,165,130,192,181,240, 90,245, 89, 33, 99, 18, 69,182,217, 21, 37, 57, 24, 32,157, 83,108, 11, 56,107,
-185, 69, 44,246,159,119,230,151,106,125,140, 70, 87,166, 38, 45, 3, 11,104,208,200, 88, 40, 34,191, 74,150,146,141,214,215, 8,
-160,147, 36,108,100,251, 42, 99,249,135,173,245,170, 68, 1,185,180, 20, 8,104,116, 82, 96,227, 27, 35,116, 0, 72,120, 11, 58,
-142,222,232, 29,168, 99, 85,201,185,228,130,145, 50,219,201,169, 60,101, 18, 94,152,248,119,194,171,117, 19,148, 58, 36,240, 54,
- 61, 21, 99,244, 77, 64,211,231,198,142,171,242, 80,184,248, 34,189, 25,160,157, 86,112,195,143,218,128,124, 24,168, 18,110,144,
-109,114,170,146,154,101, 56,170,222,117, 75,235, 21,161, 68,143, 67,204,124,165, 44,234,211, 10, 78, 20,228,215, 66, 52,134,136,
-217,146,168, 48,208,122,208,145,246,181, 97, 41, 96,159,117,213, 97,183, 90, 99, 67, 97,221,134,244, 17,118,180,196,108, 12, 39,
- 84,182, 68,244,169, 27,106, 41,173,244, 51, 39,145,148, 37, 68, 23, 24, 17, 59,154,187, 80, 52, 48, 33,107,244,177, 28,189,227,
-197,120,126, 1, 24, 66,137,228,162,253,143,151,112,206,214,226,144,145,235,203,145,159, 96, 45, 63, 88,166, 72, 68, 1,132,144,
-183, 21,108, 29,172,226, 35, 38,149,199,152,130,110,250,131, 71, 36, 28,124,113, 19,219,242,251, 38, 13, 41, 6,154,149, 76,209,
-141,180,157, 10,154,206,154,146,211, 37,158, 62,175, 80,179,148,212,246, 20, 51,196, 34, 88,229,166, 53,180, 0,147, 61,228, 44,
- 78,226,248, 29,241, 86,197, 29, 2, 87, 27,112,149,107, 15,152,228,174, 62,191,237, 17,160,105,156,224, 10, 37, 29,101,148,100,
- 72,178,207, 91, 7, 47, 37,252,193, 52, 7, 10,236, 39, 72,113,244, 44, 14,175, 70, 62,133, 51,226, 97,154, 87,225,200,181,185,
-244, 54,165,142, 93, 20, 49, 53,141, 53,105,143, 44,181,156, 81, 97,253, 84,125, 95,215,214,136, 97, 83,240,189,169,172,225,245,
- 11,229, 61,146, 99,109, 88,175, 6,111,127,140, 11, 92, 23,254, 66, 27, 33, 85,111, 80, 67, 9,161, 77, 10, 36, 12, 5, 69, 2,
-189,137, 36,225,229, 1, 24, 19, 58,245,129,104,168,170,235, 32, 73,167, 80,188,179, 36, 37,165,144, 0,167,226,117, 10,175, 35,
-215, 21,111,225,141, 77,154,202,136,163, 42,222,239,129, 27,213,194,144, 14, 6, 38, 24,208,209,150, 32, 49,222,141, 74,149, 76,
-203, 82, 53, 27,105, 76, 11, 89,209,127, 33, 23, 20, 19, 84, 99, 75, 83,169, 74, 9, 92, 8,143,201,251,161,209,208, 34,131,162,
- 32,109,195,202,229, 29, 82, 81,157,170,238, 84,220,104, 42, 41, 49, 72,193, 80,197,250,155,175,130,120, 80, 18,181, 0, 2, 61,
-128, 10,170,179,219, 84,130,112,147,118, 58, 0, 10,229, 52,185, 73,228,209,215,210, 70,188,180,162,184,148,116,132,120, 53,114,
- 41,156, 29,136, 20, 39,224, 66,212,141, 98,105,116, 10,201,177,137, 80,147, 2, 34,123,175,164,126,206, 85,166,122,139, 71,163,
- 32, 96, 96,155, 92, 5, 84, 42, 55, 81,142,178,181,167, 58, 52, 80,150,108,230, 49,120,229,227,171, 50,232, 18, 67, 37,148,163,
-249, 68,162, 23,130, 64,137, 35, 99,189, 22,142,106, 88,146, 54, 60,214, 20, 83, 65, 93,117,160, 24, 26, 96,145,152,128, 91, 46,
- 9,164, 71,208, 62,212, 13, 23,182,216,177,250, 48,229,254,235, 5,242,104,213,211,235,226, 14,139,121, 8,131, 55,189,173, 95,
-214,113,208,231,208,185, 73, 14, 91, 5, 81,149,193,184, 88,234, 28, 29, 63, 44, 2, 50, 34,109, 41, 96,214, 94,231,229,169,149,
-109,234,164,144,149,174, 28,224,131,156, 97,219,238,107,220, 27, 97, 80,192, 66, 99, 92,114,196,200,148,213, 57,189, 93,103, 44,
- 84,172,217, 0, 71,184, 41,129,101,130, 83,220, 41,108, 70,211, 10, 87,181,198, 4, 84, 4, 75, 20, 22,167,141,113,185,212,249,
- 87,180,135, 0,108,154, 20,125, 17, 10, 40,216, 85,215,238, 14, 26,145,203, 42, 67,230,111,201,128, 29,226,117,173,155,165,117,
-213, 19,160, 44, 90,118, 54,148, 45, 43, 53, 2,115, 70, 24, 58,209,129,119,212,246, 8, 79,165,115,106,154,133,168, 1, 45, 18,
- 45, 68,195,105,151, 4,218,194,236, 9,234, 58, 24,142,130,104, 21,233, 95, 52,122, 68,224, 43,182,134,118, 0, 58, 69,203, 98,
-111,163, 48, 68,177, 35, 47,191,122, 89,104, 4,184, 57,101,169,120,166,143,147,176, 87,236, 17, 33,218, 67, 46, 77,205,200, 46,
- 41, 83, 38,110,132,117,118,216,147, 92,220, 9,199, 8,127,156, 55, 29, 37, 69,212,164, 61, 65,148,186, 28, 22,237,217,144,130,
- 68,205,115, 23, 47, 89,180, 51, 67,188,191, 67,203,162, 42, 82, 97,253, 78, 13,164,198,185,219, 5,106, 31, 57, 40,169, 73,146,
-119, 86,132,210, 5,226, 65, 24,232,150, 26, 64, 47,186, 2,194, 25, 20,139,136,139, 64,255, 98,237, 52,197, 5,184,211, 97, 96,
-205, 51,140, 94,178, 19, 40,206, 38,111,117,106, 24, 2,202,184, 65, 53,115,162, 0, 36,145,143,246,125, 0,162,226, 84,111,226,
-148,121, 46,205,182, 24,218,246, 17,113,181,248, 1,163,122,181,101,136, 2, 94, 67,244,152,143,201,100,237, 16, 37,121,150,226,
-221,118, 4, 55,228, 20, 89,163, 70, 48, 78, 19, 0, 79, 9, 59,141, 2,181, 48,132, 18,134,112,181,226,133, 58,220,166, 2,199,
-156, 54, 46,236, 33, 77,192,199, 22,144, 37,180, 58,173,233,112, 11, 8,112,148,142, 50, 32, 18,121,174,232, 21,115,212, 97, 75,
-163,169, 76, 77, 84, 47, 34,233,126, 13,235,107, 9,233, 49,230, 96, 46,160,132, 38, 67,234,205,235,105,133, 83,201,198, 88, 50,
- 75,158,122, 86, 23,237,238, 53,234, 29, 44,227,185,142,148, 46, 47, 82,215,116, 79,185,113,126,173,241, 74,245,217, 86, 83, 79,
- 4, 2,230,132, 52,132, 70,169, 32,100,227,120, 16, 5,232, 16,128,228, 18,178, 17,107,141,168,135, 43, 1, 91,230,108,138,204,
-241, 2, 74,119,142,152,198,103,169,122,249,194,169,116,230,232,208, 42,169,121, 3,227,198,131,224,168,108,233,193, 64,178, 43,
-172,113, 35, 64, 22,192,138,112, 30,173, 3, 32, 42,173,153,225, 48,124,202,254,141, 41,210, 49,202, 15, 74,176, 82, 35,195,106,
- 27,118,213,118,152,203, 26,130, 38, 53,213, 34,114, 52,100,221,178, 86,145,239,177,103,150,149, 22,160, 77,166,201, 5,122, 50,
-187,168, 45, 35,226,130,182,205,125, 52, 38, 9,231,204,170, 4, 24,229,139,138,117,102,166, 12, 88,213, 70, 70,165, 4,200,202,
-230,118,105, 4,123,176,159,188,172,201, 68, 20, 9,204, 12,129, 70,197, 88,122, 74, 82,175,176,135, 33, 21, 0,155,147,112,133,
- 78,124, 89,140,135, 41, 99,155,186,146,131,178,101,229, 92, 87, 39, 75,113,103,144, 43,182,218,197,242,104, 41, 37, 57,170, 37,
-250,242,129,126,189,140,148,101,223,247,167,102, 32,163,193, 95,234, 70,104, 17,121,193, 78,134,172,245,113,207, 14,117, 20,205,
- 94, 38,167,114,185, 12,149, 65,187,103,214, 14,192,203, 72,222,213,177, 11,118, 23,166,186,160, 49, 89,144,241, 6, 54, 85,225,
-116,163,163,175,110,238,148,196, 70, 11,131,154, 92, 65, 35,161, 48,251, 2, 37, 70,102,168,217,214, 16, 55,119,195, 81, 35, 61,
-136,208,139, 17, 78, 14,177, 35, 83, 6, 27, 21,208,123, 94, 74, 54,216,184,139, 8,182,171,163,200,181, 57, 48,146,179,120, 2,
-166,107,144, 7,159, 50,103, 73,180, 38,228, 29,107, 13, 47,156,188,127,185,237,193,210,176, 20, 93,214, 96,154, 24, 6, 16, 67,
- 58, 18, 56, 13,174, 91,158, 8, 31, 33,167,152, 67,174, 44, 83,153, 35, 15,208,146,135, 90, 89,129, 13,222, 22,121, 69,112, 16,
-227, 70,219, 63,227, 5,173,185,158, 12, 84,113,199, 12, 20,132, 70,158, 58, 25,232, 78, 18, 32,200, 84,161, 10, 33,111, 94,114,
-205,197, 1,117,214, 78, 86,235,165, 28, 45, 77, 69,213, 4,171, 69, 38, 53,250,193, 99,107,225,232, 79, 61,101, 99,120, 57,116,
-135, 83, 97,148, 33,128,238,138, 58, 17,120,255,216,209,233,169, 49, 37, 40,224, 69,239, 0, 40,242, 36, 71, 80,144,139,229,187,
- 10, 83,164,203, 17, 56,196,141,163,215,182, 29, 97,170, 73,130, 35,187,134, 32,112,161,105,251,226, 81, 56,136, 71,217,230,169,
- 58,252,102,195, 75, 18,139, 2,186, 43,148,109, 24,248,228,196,180,166, 45, 10, 3, 85, 41,131, 81, 42,228, 89, 36,160, 23, 19,
- 93,185, 68, 54,102,148, 45, 94, 20,213,125,200,192,193,137,245, 82, 21,241, 62,213, 47,151, 74, 5,170, 80,111, 26,190,125, 0,
- 69,110,214,234,142,167, 55, 30, 2,213, 67, 95,123, 43, 13,150,101,165,223,124,234,216,215,168,222, 36, 46, 54,231, 29, 78, 56,
-244, 57, 88, 36,255,190, 97, 87,120,205, 25,105,149,144,161, 28,139, 5,106, 80,153, 29,192, 49,237,197,222,200, 40,128,123,157,
- 81, 15, 57, 82,229,145,201,228,196, 77, 98,192,249,176,107,207,214,152,147, 34, 43,115,125,152, 51, 75,221, 91, 58, 77,246,212,
- 18,167,236,107, 10, 90, 27, 27, 93,178, 48,238, 25, 48,239, 42, 37,163, 63,238,149,218,164, 71, 85,161, 85,228,165,193,109, 17,
-121,127, 0,107, 72,229,108, 22, 93, 7, 83,214,163, 78,118, 68,215,220, 66, 83,237, 21, 12,168,253,181,106, 0, 55, 4, 51, 3,
- 13,181, 72,211, 95, 30, 30, 81, 85,103,127,188,107,202,115, 28,230,245, 88, 79,231, 46,130,205, 10,125, 0,148,110, 60, 49,177,
-181,116, 61,178,120,164,225,230,228, 12,173,181,182, 46,163,254,129, 26,200, 14,100,239,152,104,133,182,193,160, 84, 22,117,111,
-114,170, 90, 55, 78, 24,149, 50, 77, 53, 85, 85, 76, 43, 17,197,186,132,104,201,219,148, 72, 76,228, 22, 88, 67, 16,169,213,149,
-205,222,196,108, 98,211, 48,142,165,213, 32,145, 42, 33, 13,219, 30, 15,151, 5,115,128,214,194,171,189,182, 5,234, 38,129,156,
-172,121,251, 5,128,148,241,167, 25,132, 54,180,191,105,162,184, 49,150, 36,214,176, 86,219,127, 5, 72, 13, 41,120,147,129,137,
- 46,118, 41, 16,138,150,180, 21,138,236, 18,116, 42, 65,165,173, 42, 32,232, 18,123,191,161, 61,173,171,145, 33,134, 49,189, 90,
- 65, 59,194, 28, 5, 95,184, 46,107, 30, 98, 40, 67, 69,187, 72,167,221,230,196,209,183, 8,216,196, 20, 21, 51, 62, 39,118, 81,
- 18, 97, 9, 74,202, 64, 88, 51,244,123,210,130,153, 34,244, 14,250,164,103, 48,216,106,212,137, 34, 72,176, 83, 69,175,101,138,
-214,142,147, 94, 2, 62,171, 2,108, 5,101, 90,128,120,144,139, 75,164, 85,193, 9, 28,151,219, 57, 66,166,137, 33,107,197, 4,
-242,169,161,207, 0,162,224,169, 44, 80,106,200,105, 98,153,170, 32,160, 78, 90,158,116, 73, 40,229,172,244, 22,202,114, 81, 75,
-151,164,108, 55,214,188, 93, 59,130, 51, 95, 75,132, 80,115,199, 33,148, 40,245, 11,153, 11, 1, 71, 61, 48, 41,253,198, 60,164,
-102, 75,180,148, 29,230,145,211,106, 17, 97, 46, 77,247, 57,145, 52,199, 16, 12,192,137,248, 72, 73,108,136, 65, 57,134,161, 73,
- 7, 55,170,110,204,141,219, 35,146,250,103,184,150,126, 67,213, 21,161, 21,131, 59,174,193, 18,234, 32,140,105, 99, 47, 65,169,
- 51,202, 40,141,154, 53,228, 3,224, 39, 33, 11,174,247,162, 67,134, 7,124,206,155,120, 49,167,242, 84,231,242,246,210, 0,156,
-115, 9, 1,187,216, 37,249,100, 83,115,147,136, 90,189,206, 93,226,250,151, 12, 82,186,146,177, 14,198, 43, 95,104,118,121, 48,
-248, 93, 97,232,190,166,105, 70,197, 39, 24,216,113, 97,237,153, 53, 91,103,142,163, 55, 86, 2, 59, 54,176, 62, 58, 46, 80,187,
- 0, 92,138,144, 11,200,176,102, 6, 44,154, 46,188, 84, 76,199,164,102, 71, 42,252, 38,203, 26,241,182,237,201,181,132, 50,105,
-195, 68,171, 86,190,131,210, 82,153,106,234,156,228, 77, 9,210, 33, 70,201,240, 72, 24, 38,181, 61,129, 78,117,200, 23,218,188,
- 3, 65,163, 94,191,164, 72,205,135,186, 85,238,105,158,106,226,196, 77, 59,212, 80, 58,106,133, 85, 4,218, 10,177, 34, 93, 3,
-113,205, 99,154, 53, 35,222, 27,242, 55, 46, 16,247, 74,145, 95,204,141, 32, 66, 24, 4,239, 48, 71,216,221, 10, 10, 78, 65, 0,
-181,130,185,247,117,102,206,230,153, 57, 35,217, 77,201,205, 5, 34,156, 23, 9,168,106, 84,219,146,144,111,172,176, 97, 84, 9,
-198, 2,166,235,163, 6,134,216, 98,114,222,246,164, 67, 80, 67,223,220, 64, 42, 53,234,238,152, 83,102,165,120,121,106, 21,232,
- 39, 76,156,106,226, 25, 65, 29,124, 88,116, 72, 82,212, 2,217,101,166,232, 33,205,144, 65, 96,124, 14,170, 96,199,168, 88,200,
- 97,108, 13, 40, 55, 81,219,162, 1, 78, 41,141,162,149,202,139, 57,154,181,132,102, 52,187,241, 9,206,174,155,116, 7, 56,160,
-180, 71,160,186, 27,112,124, 42, 67, 49,104,171,155, 69,205,221,168, 10,208, 74, 57,177, 50, 86,116,182, 89,160, 59,156, 58,197,
- 5,149, 27, 21,211,128, 89, 54,160, 85,178, 4, 88, 52,116,197, 41, 49, 5,176, 53,104,206,104, 49, 62,224,204, 25,110,106,207,
-210,220,148, 17, 45,172, 88,141,109,125,134, 93,177,150,147,209,157,205,107,147,112,196, 17,161,172, 81, 28, 1,104,107, 82, 16,
- 43, 74,207,148,136,158, 16,167,161, 80,118,164, 91,186,210, 37,229, 14,115,180,210,137,143,179,229, 2,167, 92,176,222,106,160,
- 45,239,163, 32,169, 41,202, 74,205, 94, 34,173,202,107,196,100, 24,106,228, 98,152,149, 66, 40,216, 1,221, 14,121,133,213,148,
-192,180, 72,237, 3,133, 77,110, 13, 50, 53,218,238,164, 20, 64,204, 86,105, 84,193,169,117,111,131,127,130, 18,154,239, 81, 85,
-159, 15,212, 57, 22, 5, 36,197,245,199, 75, 0, 64, 58,192,184,145,104, 34,154,122, 26,120,137, 65, 49, 27,197, 51, 69, 19, 68,
-121, 95,183, 1,248, 37,214,227, 87,159, 39, 78,241, 52,135,176, 68,249,215,203, 60,154,117, 93,106,219, 21,103, 16, 85,176, 25,
-218, 80, 75, 0,132, 92,120, 67,131,157, 58,254, 94,170, 50, 78,198,140, 35,141, 89,209, 82,235, 74,194,114, 50, 43, 83,144, 80,
- 22,170,231,160, 17,212,226, 96,183,152,186,105, 1,197, 98,179, 63,218,233, 90, 93, 72,222, 14,178, 1, 40,120, 51, 22, 11, 16,
-114, 49, 35, 35,156,211,190, 2, 70,145, 81,161,204,249,238, 37, 23,138,147,209, 99, 7,152,213, 6,174,190,148,220,246,142, 90,
- 46,106, 80,115, 99,115, 84,186, 4,118,146,194,174,108,188, 2,224,149, 84,203,146,198,171, 70, 61,234,180, 72,210, 20, 14,218,
- 30,183,210, 89,168, 0,149, 56,172, 21,228, 92,155, 58, 30, 99, 95,105, 10,220,130, 68, 63, 97,147, 83,228, 6,216,212,110, 48,
-201, 9, 0,165, 33,119,196, 76, 68, 72, 35,129,165,166,159,178, 67, 22, 78,152,221,255,226, 13, 88, 98,110,121,100,160, 26,247,
-168, 50, 71, 96, 28,185, 81, 22, 99, 88,188,130, 17,131,221, 17,163,134,129, 28,108, 74,237,214, 80,160,116, 54,135, 53,240,209,
-202,208,232, 4, 44, 57,228, 88, 11,234, 53,104, 90, 28,109,178, 44, 19, 80,141,128, 82,200,145,183,116, 67, 88, 41,107, 35, 52,
- 25,217, 85,154, 19, 5, 56, 52, 53,230, 88, 41, 9, 4,210,157, 53,242,104,121, 59, 65,183,137,210,134, 71,230, 77, 84, 87,152,
-252,254, 24, 74,122,188, 29, 2,152,149,101, 68,237, 77, 46, 28, 34, 69,110,174,137, 83, 74,217, 30,188,224, 42,215,125,161,235,
-247, 36,225,166,111,132,253,179,227,105,147, 29,240, 29,166, 57,111, 25, 50,208, 87, 23, 46, 0, 96, 2, 71, 84, 51, 4,227,251,
- 59, 74,157,229, 28,124,212,137, 99, 72,242, 26, 33,119,106, 81, 70,181,234,190, 80,185, 6,198, 2,247, 18, 23,208, 18,239,201,
- 64,112, 63,133,146, 60,188,239,145,200, 71, 55,160, 27,178,148,220, 65, 43, 33,216, 20,125,198, 37,233, 40, 8,100, 29, 13, 95,
-147,226, 63, 33,106, 92, 80,226, 70,227,131, 17,135, 46,200,212, 0,161, 44,211,247, 48, 60, 11,118,238,203, 44,219,132,239, 41,
- 96, 52, 69, 64,134,185,138,103, 73, 93,179, 31, 16,237, 2, 96,234,208,165, 23, 23,163, 50,199,199, 76,185,173,255,209,160, 43,
- 87,221,218, 63, 91, 54,199,198,130, 23, 84,155,174,125,100, 98, 88, 0, 90,174,214, 4,107, 64,159,215,105, 30, 14,248,148,225,
-191,141,174, 3, 1,180,162, 1, 76,231,115,170,170,122, 25,171,110,133,116,147,113, 47, 32,238, 53,234,191,155, 44,108,225,160,
-175,154,220,186, 6, 38,131, 35, 50,246, 83,231,241, 31,228, 66, 35,214,237,102,172,109, 22,214, 54,156, 52,166, 49, 22,140,117,
-106,114,125,113,171,157, 99,234,142,215,116,222,169, 18,169,238, 66,232,177, 0,109,133,179,225, 65, 5,187,210,248,249,227,185,
- 67,123, 88,105, 27, 23,160, 58,156, 79,126,242, 5,133,114,149, 45, 63, 52,137, 36,184,106, 23,121,247, 47,110,144,196,169,219,
- 83, 42,163, 97,157, 20,144,146,212, 26,118,224,239,179, 62, 96, 75,227,144, 1,145, 25, 91,208, 55,140,120, 74,169,216,208,124,
- 15, 0, 19,243, 42, 25,143,144, 79,107, 17,145,115,158, 65,192, 71,176, 73, 71,120,247,216,211,219,240, 14, 33,143,153,121,189,
-222,203, 92,123,175, 35,253,174,170,188,110,161,104,104,227,140, 3,134,214,140, 9, 85,205,201,128, 9, 84,252, 12, 16,103,155,
-249,232,132, 26, 47,223,210,214,195, 53, 45,131, 34,132,202, 88, 67,141,189, 26, 85,141,141,105, 32, 78, 49, 73,165, 17, 22,200,
- 14,129, 51, 34, 2,101, 27,110,161, 15,110,240,130, 81, 22,104,137,146, 54,118,204,200, 0,143,219,192,111, 5, 53,223, 45, 2,
-138,198, 24, 12, 29,171,226,120,144,161, 50, 60,135,176,175,145,209, 1, 16,142,178, 14,168,162,141,249,213,117,142,168, 81, 5,
-155, 78,115,212,118, 85,173, 2,243, 7,157,213,144,193, 19, 53,220,196,185,191,180, 85, 16,198,231, 81, 76, 11, 72, 70, 35, 46,
- 78,105,139, 66,108,139, 98,151,164,117, 95,189,174,234,211,216, 13, 36, 52, 49,129,246,179,162,160,225,165,119, 93,139,122, 40,
-163,146,139,139,201, 96,102,179,128,210, 90, 86,134, 99,213,199,119,189,127,115, 80, 85, 36,163,104, 10, 74,160,230,222,118, 63,
-115,233,235,134,254, 20,101,120,134, 12, 35, 72,142, 26,155, 9,186,242,149, 38,219, 96, 14, 65, 1, 38, 77,197,138, 11,102,131,
- 4, 75,121,144, 25,224,226, 45,171,151, 88,238,160,234, 29, 43,161,162, 26,189, 55, 42,121,198, 12, 81,224,225,172, 2, 45,151,
- 3,212, 37, 16, 40,214, 81,189, 66,139, 20,188,140, 32, 80, 32, 2,132,128, 34, 11,255,152,118, 65, 96, 12, 34,227, 66, 10, 32,
-174,168, 59,220, 59, 10,203,241,175,195,183,110,140, 25,192, 13, 87,140, 51,172, 11,187,182, 69,204, 73,107, 81, 61,150, 61,120,
- 98, 66, 77,114,176, 58,183,203, 84,143, 47, 26,104,104, 66,159,182, 89,188, 93,247, 2,133,230,163,255,121,240, 70, 55,202,164,
-139,182,175, 76, 27,241,240,229,155,138, 54, 45,154, 98,119, 61, 94,174, 48, 73, 27,115,101, 17, 60, 52,110, 41, 9, 43, 27,170,
-110,164, 19, 60,116, 47,176, 67, 14, 32,254,196, 43,123,154, 61,104,218,159, 66, 29,182,107,194,240,133, 34, 65,151,190, 64,121,
-165,129,131, 57, 57,248,189, 22, 25, 50,131,160,129,131,222,178,146, 93, 80,152, 2, 9,159,227,121,160, 46, 1,167,152, 1,228,
- 24,181, 36, 94,161, 86,129,103,145,196,153, 86,120,203,173,238, 0,170,143, 1, 2, 63,124, 34,113, 4,182, 72,109,181, 40,160,
- 69,104,192,218,177, 78,200,130, 45, 49,161,105, 13, 92, 79, 7, 16,176,101,141,244,103, 5,170,210, 20,201,229,150,133,216,248,
-199,187,181,141,180, 37,140, 52, 65,112,200,230,129, 33, 99, 91,153, 76, 59, 47,141,180,184, 70,164, 83,152, 18,176,178,186,112,
- 57, 65,218, 77, 49, 27, 21,178, 14, 34,148, 10, 85,197, 28,154, 66,168,166,106, 40,229, 2,104, 96,143,222, 68,114,227, 13,137,
-122,233,132,182, 47,193, 48, 16, 40,207, 16, 67,215, 47,120,230, 73, 72,137,147, 86,183, 57, 11, 94,155, 76,148,173, 2,254, 35,
-131,234, 29,112,213, 17,125,137, 92,108, 9,231,117,104,246,195, 13,157, 72,164, 2,255,188, 1,147,182,101, 5, 10,106, 35,215,
-208, 15, 16,138,172,138, 0, 0,175, 37,218,121,159,171,194, 78, 5, 98, 75,171, 18, 74,153, 70,187, 77,103,129,212,182,193,202,
-132, 65, 90, 42, 53, 18, 27,243, 4, 29,218,120, 16,146,158, 1,246, 54, 96,142,190,226,145, 30,182,118,203,236, 89,192,212,121,
- 77, 26,181, 55, 16,241, 97, 20, 75, 50, 53,202, 74, 73,252,138,214, 96,244,189,205,174,100,106, 27,183,137, 6,162,200, 8, 38,
-197, 66, 0,252, 85,105,217,188,105,174, 47,193,217,168,156,251,142,196,179,215,200, 84,116,205,165,132, 38, 64, 66,177,196, 7,
-236,170, 72,170,201, 74,185,214, 68, 13,164,201,164, 50,176,132, 10,246,158,176,114,162, 40,198,135,162,243,218, 36,222, 53, 49,
-104, 58, 46,186, 63,200, 8,160,139,160,102,234,110, 56,106,111,140,239,208, 96,161,154,126,213, 52, 23,151,154,118, 55, 76,210,
- 20,117,151,160, 46,171,175,178,220,220,234, 63,183,169,153,176,120, 88, 2,218, 0, 11, 4,112, 25,149, 1, 5, 88,172,135, 56,
- 1, 18,187, 96, 39,170, 81,112, 68,124,115, 42, 32,251,215,206,161,210,136,137, 88,203, 82, 51,238,214, 56,192,248,165, 27,221,
- 20, 37,109,169,216,128,165,163,237,223, 85, 36,215,165, 93, 65, 43, 0, 84, 37,101, 14,244,225, 49,224,195,148,175, 41, 85,117,
-197,245,241,142,142, 74, 41,171, 94, 27, 76, 4,108,221, 26,218,233, 28, 53, 85,130,148, 16, 55,186,224,128, 42, 23, 20, 28, 17,
- 74,245,204, 68, 18,178, 86,165,137,186,215, 50,153, 27,174,253,154,117,156, 69,120,224,218, 42, 53,231,140,206, 11, 52, 72, 76,
- 17,128, 64, 59, 65, 20,188,201,170,104, 34, 38, 33, 60,165,174, 25, 28, 36,143, 1,172, 21, 38, 10, 70,164,166,191,236, 26, 7,
-168,216,229,206,225,152,201, 50, 90,101,112,240, 59,148,214,116,208, 29,166,203, 53, 58, 17, 0,237, 24,154,148,213,183, 22,110,
-132, 31,132, 64, 88, 47,169, 12,242,202,134,194,160,150,136,148, 27,161,220, 22, 51, 59,185,204, 32, 55, 27,178, 63, 78,173,113,
-131,203,209,211, 32,182, 40,197, 41,128,190,123, 42,223,152,188,172,193, 99, 25,112, 34, 28, 5,140,168,175, 98,253,156, 27, 57,
-209,102,125, 20, 14,232,199, 26, 69, 44, 11,241, 56,251,202,137,170,179,178,226,204,129,231,128,233, 89,100, 43,132, 89,155,112,
- 70,220, 49,148,232,115, 47,210,106, 84, 8,148, 2,106,112,144, 5,180, 49,212, 56, 11,114, 11,120,133,154,227,128, 96, 84,137,
-227,102,255, 33,220,139, 32,218,110,213,221, 76,179,194, 17,242,212,128, 97,236, 86, 74,198, 0, 69,123,246,234,157,217,170, 83,
-247, 4,245, 98,162,141,171,243,251, 97, 14, 66, 7,206,152,191, 89,228, 3,231,175, 8, 52,240,146, 6,253,111, 96,225, 2,130,
- 37, 8, 50, 45, 1, 46,100,237,217,204,128,195,144,102, 31,241,100, 72, 93,250,253, 28,211,219,250,172,157,231,205,205,197, 86,
- 73,148,227, 41, 2, 71,234,176, 36, 64,116, 21, 40, 37, 55,194, 65, 21,210,188,117,140,204,167,142,150,211, 90,156,100, 96, 71,
-233,215, 78,193,120, 91,219, 0,188,155, 64,120,130, 29, 0, 61,144,172,161, 7,211,128,116,151,152,133,193,118,185,218,251,192,
-178, 58,139, 5,151,148, 18, 44,144,234, 49, 3,222, 49,170, 30,105,103, 48, 14, 21,176, 80,136, 3,250, 16, 76,144,138, 34, 0,
-144,186, 20, 77,253, 27, 0,207,110,148,101, 19, 55, 53, 74,219, 22,227,148,162, 90, 82, 86, 45, 34, 64, 69, 38,121, 70, 73,140,
- 62, 64, 75,162,110,175,228, 70, 4, 77,185, 91,154,110,221, 66,156,208,168,210,164,237,241,255,161, 51,220,240, 88, 11,123,173,
- 37, 26,127,148, 88, 44, 92, 96, 51, 19,175,159,112,118, 97, 86,106,167,142,210,117,187, 26,189,175, 9, 22,118,110,231, 8,208,
- 97, 97,192, 9,132,167,143,252, 87, 89,145, 26, 65, 68,177, 36,164, 44,181,202,123,203,172, 49,205,137,249, 75,222,185, 40,241,
-188, 5,202, 40, 5, 0,126, 32,211, 88, 52,123,105,117, 96,211,125,239,152, 67,254, 81,255, 95,188, 77,166,165,157, 17,248, 70,
-222, 43, 25,147, 31, 12, 25, 23,159, 59, 13, 37,146, 87,234,226,145,138, 76, 87, 9,189,150,163,119, 7,190,167,128,118, 2, 55,
-224, 54,113,105, 78,108,223, 40,141, 98, 99, 20,125,129, 62,198,152,169,137,118,160, 94,223,213,212,120,229, 53, 60,107,225,166,
- 71,182,117,225, 66, 96, 87, 49, 20, 83,158, 25,130, 10,139,113, 61, 81, 55, 5, 70,201, 48,223, 77,151,217,219,191,150,112, 36,
- 57, 55,143, 74,116, 51,206,174, 42,179, 57,254,156, 5,160,136,114,107,209,180,152, 81, 78, 54,248,191, 75,138, 62, 8,174, 86,
-200,211,142, 55, 64, 25,138, 20,199,223, 84,169, 43, 34, 59, 94,102, 40, 37,107, 52,112,238, 81, 49,149, 41,171,179,121, 68, 50,
- 83,129, 0, 25, 79,208, 57,206, 24, 42,181, 97, 5, 36, 81, 57, 23,123,178,253, 37,211,236,156,118, 8,172, 75,103, 14, 36,164,
- 16,234,122, 72,163, 40, 40,144,161, 89,197, 40,105,200, 26,232,110,193, 93, 76,127, 39, 40,151, 26, 29, 16, 29, 96,232,101,168,
- 12,125,198, 64, 83, 24,136,191, 28,122, 10,149, 90, 45,136,245,250, 2, 2, 25, 22, 33,105, 48, 1,129, 41,218,230,154,101,136,
-137,179,202,233,246,182,107,185, 87, 17, 96, 93,112, 52, 26,170,226, 58, 3, 75, 13,166,170,151,122,154, 70, 59, 72,157,115, 61,
- 25,189, 75,154,101, 92,152,158, 45, 74,129, 22,239, 70,131,157,118, 40,137,190, 24,205,118, 97,138, 79,102,180,121, 42,185,117,
-132, 32, 43,113,213, 39, 94, 35, 37,136,233,171,228,220, 81,150, 57,205, 41,101,117, 34, 36,154, 72, 76,128, 14, 48,130,204,192,
- 53, 70, 48, 72,198, 73,250,132,224,213,120, 55,129, 73,160,199, 55,158, 11,178,132,218,137, 44, 89, 26, 42, 69,231, 9, 37,236,
- 94, 31, 0, 12, 77,176, 95, 74,114,170, 50,207,111, 77,123,101,252,158,166, 20,210,106, 23,184,204,103, 13,137, 80,107, 91,107,
- 65, 76,213,246,172,246,128, 10,166,120, 65, 13, 7, 37,114,205,232,228,164, 77,205, 39,171,158,122, 7, 72,221, 80,163,131, 6,
- 39,208, 41, 9, 53,150, 11,234,108, 83,166, 96, 22, 68,189, 66, 67,224,142,214,107,252, 35,159, 90, 32,149,236, 27, 23, 87, 34,
- 16, 76,106, 83,198,238,168,164, 62,201, 81, 38, 14,141,104, 73,207,159, 83, 87, 67,148, 57, 86,170, 77,137,148,176, 83,203,134,
- 74,157,148, 70,138,184,205, 32, 65, 29,213, 82,250, 28,117, 71, 99, 82, 50, 56,107, 25,164, 26,198, 4, 42, 77,169,227,197,208,
- 34, 24,249,241,204,203,204,241,134,190,230,212,162,173, 13, 92,153,218, 82,195, 28,146, 85,209,150,149,210, 82,114, 96, 40,181,
- 99, 21, 89,181, 40, 34,205,222, 2,206, 98, 22,197,200, 10,144, 85, 69,123,114,135, 53, 78,109, 22, 69,107,191, 86,119, 39, 84,
- 59,100,202,205,122, 24,130, 3,110, 36, 93, 65,119, 84, 98,145,230, 84,171, 64,241, 14,178, 4,233,162,221, 91, 43,158,157,100,
- 66,249,224,154, 17, 7,109, 27, 82,160,202, 72, 82,182, 12, 28, 76, 27, 98, 16,167,101,156,240, 36,120,125,134,156, 79,177, 9,
-160, 5, 37,225,172, 4, 91,172,233, 63,107,162,166, 74,205, 40,103,215,240,135,253,215,157, 59, 11,120, 26,200, 7, 85,212,126,
-215, 54,189, 8, 8, 22,192,176, 16, 65,118,132, 67,240,138, 76,155, 62, 48, 65, 21, 5,144,240, 28, 43,116, 51, 20, 45, 75,152,
-242,196,178,186, 3,128, 77,138,176,207, 3,106,206, 35, 49, 92, 70,208, 47,130,192,220,223, 14,122, 75, 86, 52,225, 72,255,233,
-166, 25,109, 13, 67,128, 97, 56,223, 45,173,151,137,228,126,183, 8,117,203, 90,230,156,152, 96, 94, 43, 17, 78, 80,126,130,102,
-247,190, 33, 99, 61,201, 82,179,154, 66, 42, 41,221, 37, 41, 98, 64,129,143,196,164,229,156, 70, 22,252, 94,232, 97,204, 40,244,
- 1,157,190,218,173, 39,127, 75, 86, 78, 50, 71, 67,160,155, 20, 34,188, 57,137, 26,212, 96, 11,184, 29, 90, 77,189,183,185, 75,
- 1,202,140, 87, 34,107,171, 83, 28, 79,201,210, 88,172,176,227,188,169, 2, 23, 25,121,226,148,187,154,153, 12, 85,234, 33, 2,
-105,216, 2,200,118,110,244, 74,221,116, 2,192, 16,159, 51, 99,218,221, 34, 79,144,234, 12, 25, 92, 40,201,160,152, 74, 83, 30,
-105,235,184, 83,160, 85,225,235,101,229, 59, 90, 16, 82,145, 12, 70,244,110,127, 46,148, 38,107,106,154,121,205,101, 77, 8,142,
-232,169, 17,130,154,144,248, 53, 9,125, 75, 41,112,221, 93,172, 50,208,151,159, 54,211, 18,209,178,212,166,178,106,209,137, 82,
- 19, 75, 35, 77, 75,188, 90,108, 5, 73, 71, 1, 36,186,235, 23, 24,195, 5, 56,238, 14,172,172,148, 49, 53,178, 34,171, 49,125,
-183,210,219, 24,128, 73,210,168,151, 9,174, 69, 21, 55, 18,201,162, 82,148,244, 36, 36,177, 14, 64,229,105, 37, 11,197,224,201,
- 87,104,105,166, 36, 90,143,118,184, 67,157,248, 44,147, 29, 88,160, 0,224,209, 10,123, 0, 50, 92, 18,134,105,154,135, 53,101,
- 20,184,201,132,228,244, 34, 37,186,174,117, 38, 99,104,127,203, 88, 82,107, 88, 69, 12,169,110,178,242, 43, 0,151, 11,103,176,
- 39, 65,127, 8, 1,156, 15, 39,217,194,166,190, 77,156, 29, 68, 51,136,235,162,123,161, 76, 59,196,214,151,141, 64, 83,126,110,
- 1,174, 44,176,199,102,149, 82, 1,208,153,178, 24, 42,116,135,108,130,188, 42,156, 2,136,232, 69, 49,237,169, 53,201,137,115,
- 0,135, 45, 43,101,133, 52,206, 82, 81, 29,234,181, 12,148,204, 21,241,176,220, 6,183,149, 45,247,253,125, 48,234,214, 11,124,
-234, 61, 93,160,182,216, 0,109, 36, 43,169, 17,133,247,131, 45,245, 88, 48,145,152,251, 17,175,171, 76, 39,204,151,132, 74, 21,
-139,248,137, 22,116,253, 80,104, 3, 61,124, 48, 38,182, 65,150, 96, 73,196,239, 18,135,131,193,176, 73, 35,167,159,141,149,160,
-214,115,165, 44,182, 65,153,162,154, 22,109,154, 62, 89,100, 35,165,152,160,159,121, 43, 89,145, 37, 99,115,253,172, 18, 65,186,
-122,162, 63,132,134,172, 82,182,176,159, 53,110,130, 90, 51, 50, 73,210, 54,115, 16,128,171,136,184,163, 79,122, 32,198,153,179,
- 10,149,181,240,228, 21,100, 44, 96, 28, 40, 11, 24, 89,216, 88, 48, 67, 34, 17,229,152, 64, 75,138,178,245,253,206,115,199,148,
- 61,246, 24,214, 86,154,177,185,229, 68, 91,214, 29,104, 12,177, 35,133,195, 81, 40, 66,169,189,111,234, 40, 5,124,122,198, 46,
-132, 46, 69, 25,250, 10, 12, 42,100,165,227,228,248, 88,115, 35, 97, 4,200, 85,167, 84,174,212,104, 75,161,181, 37,110, 80,184,
- 27,163,143, 82, 35, 2,119,222,191, 68,237, 27,148,249,194,200,114,206,146,152,193, 84,176,158,167, 76,193,105,174, 30,213,168,
-217, 43,220,248,132,209,181, 71, 24,123,113, 79,198, 94,184, 1,218,129, 28,179, 69,174, 2, 53, 80, 65,176, 16,202, 53,167,159,
- 7, 48,133,219,140, 28,103, 32,223,120,175,189, 28, 27,105,112, 6,161, 33,113,150,138,205,135, 14, 48, 16,141, 60,177, 64,169,
- 79,162,182, 37,210,228, 86, 32,207,234, 32, 74,110,123,143,131, 42, 70,195, 50,146, 54,122, 39,114,169,106,156,242,220,116, 63,
-100,230,148,210, 15, 3,205,137, 57,225, 29,212, 24, 48, 22, 37,131,230, 36,225, 40,176, 60,199,185,253,172, 97,153, 64,219, 32,
-169, 16,218,125,238, 76,241,208,238, 75,151, 52, 67, 4,180,245, 61,115, 66, 33,157, 75,208, 80,203,156,177,105,223,211,192,147,
-167, 18, 47, 2,234,138,150,146, 58,230, 20,208, 21,204,110, 58, 86, 40,148,146, 4, 65,174, 78,241,100, 7,221,110,209, 4,138,
- 51, 13,126,107, 53,205, 77, 15, 66, 3,112, 59,222,141,185, 41, 32,145,207,201, 74,193, 68, 24,121,253, 27, 4, 45, 64, 21,136,
-164, 74,131, 80,163,108,160,252,146,181,144, 43,244, 78, 20, 54, 52,188, 81, 86,130,170, 81, 97, 3,207,122,206,188,194, 49,207,
-147, 85,128,110,130,111,229, 84,151,108, 83, 67, 37, 73,118,154,139,186,206,219, 13,220, 64,164, 68, 18, 22, 55, 29, 39, 20,234,
-164, 81,207,192,235,106,140, 40,183,157,153,100, 13,146, 45, 34,134, 42, 17, 9,183,137,125,110,106,251, 72,235, 98,137,200, 28,
-181,151, 25, 55, 23, 80,126,227, 84, 5,226, 84, 15, 23,173, 61, 87, 68, 95,131,138, 81,113, 96,144,248, 4,230, 70,123,153, 37,
-163,111, 11,150, 12, 18, 10,191, 2,144, 77, 64, 3, 26,105,124, 12, 20, 58, 0,192,161,160, 13,161,108,101,179,153,178,172,208,
- 34,177,176,103, 89,168, 9,208, 39,141, 19,162,142,166,234, 60, 59,183,187,144,211,204, 24,202, 19,228,220,111, 2,245, 45,104,
-144, 83, 96,205,144,104,235, 85,200, 11, 26, 87,149, 57,218, 72, 6, 78, 62,100,156, 11,246, 23,231, 22, 32,157, 90, 18, 39,240,
- 82, 5, 94,183,160, 0, 73, 6,184,133,194, 87,219, 87, 76, 64, 24, 37, 39, 86, 40, 25, 42,113,231,197,178,121,117,116, 12,150,
-126,238, 44,152, 17,107, 86, 9,164,239, 44,181,137, 34, 0, 73,173, 16, 65,158, 8, 32,101,180,138, 37,240, 4,160, 99,190,162,
-211,136, 13,124, 4,219, 74, 11,160,182,105, 69, 49, 78,132, 65, 31,163,117, 24,155,102,221, 4,209, 51, 7,254, 1, 37,224, 11,
- 17,232,122,228,178,149, 55, 90,225,160, 24, 11,200,232, 26,115, 36,129,236, 26, 93,123,220,119, 10,101, 26, 43,212,232, 40,218,
-170,106,211,157,130,206,180, 94, 90, 87, 92, 0, 5, 57,234,166, 30,202,146,186, 2,187,238, 0, 26,116,110, 11,163,178,170,210,
-148,202,137,117, 34,194,218,250,114,198,130,213,172, 53,250,159,228,131,101,236, 64, 89,181, 71, 64,213,140,161,205, 29, 11,102,
- 55,124, 15, 80,138, 45,116,120, 91, 26, 88,153, 20,172, 93, 39,113,156, 65,126,119,104,164, 82,188, 45,237,180,127, 12, 26,241,
- 75, 9, 22,205, 0,238, 43,141, 0, 89,167, 89,182,165,139, 17,233, 62,100, 58,240,206,226, 97, 16,131, 18, 47,103,154, 32,146,
- 57,146,139,125,227,164, 40,238, 89,140,252, 97,136,208, 58,120,174,157, 70,201, 99,203, 56, 9,112, 69, 69,177,116,168, 49,132,
- 10, 83, 81,230,105, 77,188,214, 68, 21, 3,152,161,215, 49, 5,234,123,148,213,213,214,210, 50, 40,211,229, 28,101,143,109,130,
- 93, 15, 91,214, 85, 70, 35,221,201,171,240, 9, 89,217,115, 86,251,247, 69,172,194, 41, 58, 95, 35,236,154,165, 96,129,160,105,
-205,238, 77,226,181, 80, 89,201, 44, 96,121,160, 98,196,201,161,234, 39,196,169, 46,100,247, 27,251,244, 18, 73,114,100, 18,128,
-206,162,103,224,128, 50, 90, 13,247,180, 5,250,120, 75, 70,152, 51,240,209,165, 81,228, 67,240, 22, 56, 28, 8, 76,243,186, 96,
- 35,197,202, 13,101,107, 5, 68, 2, 29,227, 16, 43,192,141,142,129, 99, 5, 26, 70,115,177,251, 0,109, 32,167, 62,202, 2,233,
-117,134,212, 36,136, 91, 64,214, 32, 20,179, 74, 40,214, 49,102,127,114, 93, 82, 76,117,112, 18,196, 30, 69, 44, 16,212,129,180,
- 21,145, 10,206,167,109,182, 28, 32, 76, 3,154, 53,243,203,212, 58, 88, 0,181,236,247, 66, 82,218,148,215,116,180,178,121, 93,
- 32,165,110,250, 18,168, 26,232, 64,173,138, 50,160, 28,142, 66, 69,192,152,221,200, 66,169,153, 65,106, 0,178, 42,210,106, 94,
-139,165,132,171,149,142, 42,161,242, 20,100,183, 1, 10, 85, 34,192,136,116, 48, 0,143,168, 68,112, 2,206,115, 71,145,234,100,
-206,202,113,227, 60,169,198,157,142, 10, 5,150, 12, 56,245,191,205, 77,143,154,244,138,102, 17, 48,216, 9, 57,218, 82, 64, 53,
- 17,128, 62, 21,218,203, 34,108,155, 25,203,211,156,106,225, 5,231,111, 89, 93, 79, 4,242,174,214, 36,102,108, 0,132, 89, 89,
-149,133, 85,237,218,118, 65,158, 81,216, 70,132, 87,114,237,190, 47, 22,118,117, 65,193, 18,152, 83,249, 74, 40, 57,130,232,145,
-105, 8,176,138,195, 96, 80,102,171,206,180, 85, 58, 43,215,234,242,236,216, 43, 56,227,254,185, 0, 12,192,126,154,212, 83,139,
- 26,225,177,157,179, 26,101, 82,167,167,176, 5,102, 66,167,105, 91,117, 25,166,189,114,250, 92, 22,152, 10,100,127, 94,170,157,
-119, 43,100,199,243, 68,223,251,226,141, 38,164,100,113,161, 17,253, 94, 0,225, 96,202, 65,142, 42, 94,169,235,146,183,140,179,
-237,111, 42,250, 11,120,203,121, 98, 74, 18, 8, 73,190,125,243, 48, 57,109,208,236, 53, 94, 10,100, 45,183, 30, 50, 32, 39,177,
- 38,137,105,115,240,110, 11, 73, 66, 41,123,123, 20, 41,192,209,228,236,168,186,131, 60, 25, 73,108,239, 24,123, 1, 39,138, 88,
-214,196, 78,213,143,104,151,151,186,174,101, 16, 78,180, 75, 12, 97,146,149,205,221,180,150, 89,107, 66, 46,140, 18, 15, 75,123,
-162, 57,179,192,104, 81, 35,162,152,160,113, 78, 43,254, 96,252, 95,129,250, 58, 18, 88, 61,133, 23,116, 40, 54,218, 8, 56, 79,
- 30, 85, 16, 67, 23, 51, 25,179, 59,163,238,129,162,156, 93, 77, 10, 0, 57,169,166,189,230,185, 99, 7, 98, 2, 76, 8, 3,226,
- 55,241,139,165, 77,177, 54,202,124, 18,109,129, 71,193, 49, 67,212,139,105, 19,196,179, 29,249,169,192,207,157,228, 57, 83,115,
- 71,221,252, 48,107,208,112,177, 53,162, 49,102,131,112,168,131, 81, 75,113, 2, 68,183,161,193,144,233,196, 56, 87, 85, 8, 99,
-165,214,234,194, 53, 9,111,156, 80,207,168,184,200, 34,192,150,200,126,101, 97,202, 84, 42,138,190,232, 4,189,237, 37,157, 59,
-224, 19, 82, 35,111,139, 64, 74,126, 62,141,225,193,146,151, 27, 19,230,180, 55,118,196,169, 14,139, 45, 90, 3,255,149,165,205,
-132,172,129, 6, 39,198, 71, 76, 16, 81,135, 20, 17,237,208, 13,206, 28,119,108, 25,224, 10,154,148, 80,212, 94,202,100,228,235,
- 7, 85, 21,155,255, 16, 58, 29,156,245,231,205,169,228, 38, 11, 52, 70,220, 53,122,173,219,218,149, 38,187,183,154, 41, 51,193,
-169,210,136,135, 73, 40,152, 89,183, 55,239,169, 94,210,126, 32, 69, 92,208, 39, 36,141, 25, 58,124, 81,202,242, 56,216, 2,155,
- 36,129,218,103,100, 70,200, 65,149, 85, 13,188, 51, 35, 40, 73,241, 5,160, 84,131,136,225,222, 44, 70, 5, 57, 90,173, 71,131,
-131,205,169,245,238,212, 51, 96,136,208,183,209, 41,211,239,217,174, 83,220,188, 53,170, 74,202,164,179,129, 18,226,208,213,178,
- 66,163, 24,129,118,178,212, 0,116, 85,231, 42,217, 30, 65,124, 13, 98,137,125,175, 48, 65, 37,113, 7,100, 84,199,220, 40,218,
-198, 80,211, 13,150,174,236,152,128,179, 78, 13, 98,179,209,188,237,212,160,151,232, 90,134, 46,135, 20, 64,120,138, 56, 76, 63,
-225,110, 76, 5, 8, 34, 42, 20,204,128,184, 1,218,137,166,198,190,129,221,145, 92,239, 68,148,120, 97,232,102,204, 12,186,229,
- 0,111, 40, 32,205,169,217, 11,207,192,184,148,169,120,115,137,136, 84, 80,135,190,145,102,132,236,122,105,116,162,155, 46,221,
- 83,141,164,138, 43,146, 53,156, 13, 93,239,146, 84,222,236,188,144,134, 39,128,202,156,132,226, 10,246,161, 27,255, 93,107,142,
-104, 25,184,252,209, 63,185, 81, 95,114,205,121,201,148, 65, 84,168,176, 72, 72,203, 54,133, 5,218, 28,194,102, 10,186,205,145,
-238, 46, 89,195,154, 32,165,213,144,224,162,219, 85, 28,215, 19,213,188,138,124, 70, 96,151,131,231, 4,174, 99,140,242, 38,185,
-197, 78,130, 65, 49,105,197, 71,157,223,188,254,162, 81, 53,114,207,139, 25, 30,231, 18, 87, 64, 40, 55, 37,133,237,168,233, 82,
-137, 6,158, 92,217,229,126, 11, 99,155, 69,149,222,115,174, 54,118,205,182,110, 59,156, 50, 42,108,245, 52, 87, 80,211, 79, 20,
-187, 83,106, 88,107,133, 82,132,254, 92, 64, 80, 74, 56,117,161, 2, 59,163,224,186,178,166,254, 27,216, 0, 52,139,174,120,199,
- 37, 0, 88,192, 39,101,206, 29,148,216,121,247, 29,204,181,232,226, 33,224,124, 32,186, 29, 83,222,209,174,152, 3,128, 75,178,
-226, 52,142,173, 89,165, 57, 38,180, 18, 38,200,106, 13,223, 95, 5,122, 55,192,254, 34,107,200,236,220, 80,171, 68, 27, 33,165,
-214,144,212, 86,240, 10, 60,175,112, 76, 77,175,223, 90,171, 70,180,108,160, 45, 84,168, 35,151,176,149,166,165, 88, 7, 17, 58,
-175,192, 57, 67, 24,103,178, 7, 37, 99, 58,254,127,186,222, 44,214,186, 45,187,239, 26, 99,174,189, 79,243,245,183,239,202,213,
-223, 42,199,109, 57,196, 22, 78, 28, 39, 16, 64,142,128, 32,144, 72, 68,128, 72,121, 0, 30,224, 33, 18, 47,188,241,200, 19,111,
- 72, 72,145,120, 64, 81, 64, 40, 36, 36, 2,146,216,142, 19, 57, 78,202,177,203,198,213, 87,185,110,221,106,110,127,191,251,245,
-237,105,246,154,131, 53,231, 28,205,127,172,125,110, 69, 55,247,250, 59,231, 59,103,239,181,215,154,115,142, 49,254,255,223,191,
-172,100,112, 94,173,115,132, 54,145, 81,209,224, 97, 44,235,226, 60, 19,174,120,221,221, 4,136, 14, 33, 98,154,162, 99,230, 7,
-143, 56, 86,131,133,141, 61,138,149, 32,137,116,160,175,169, 3, 98, 72,231,221,182, 46,181, 42,124, 54, 92,186,192,129,190,117,
-157,203,200, 45,183, 13,186,167,223, 41, 46,214,186, 25, 70, 31,180,187, 97,222, 85, 61, 32,193,225,180, 64, 62, 59, 7,168, 75,
-112,100,210,127, 54, 99, 43, 70,103,245,165, 51, 63, 26, 45,175,214,152,251,111, 58, 0,126, 51,133, 40,193,143,255,197, 23,101,
- 78,194,174, 0, 82, 84,225,212, 82, 75,243, 97,104,183, 13,180,174, 93,172, 66, 23,177, 89,241, 20,107, 39,254,194, 65,202, 18,
-202,237, 59, 89,101, 40, 36, 21, 32,234,217, 42,249, 38,221, 46, 70, 45,152, 5, 31,109, 42,225,181, 60,174,186,157, 99, 55,175,
-197,125, 57, 27, 24,111, 62,171,224,247, 20,156,208,142,179,118, 80, 18,102,185, 29, 71,194,226, 36, 40, 14,139,205,151, 57, 42,
-242, 12, 11,130,220,110,150, 36,226, 19, 65,161, 69,188,254,162,155,130,115,213, 53, 11, 60, 44, 63, 18, 51, 87,175,170,196,219,
-180,136,148, 44, 41, 17, 44, 87,214,200,174,183,184, 83,171,248, 4, 54,244,194,214, 26, 35, 31, 39,132, 66, 62, 47, 57,188,151,
-156,183,210, 27, 9,173,172,107, 16, 93, 99,251,129,112, 14,172,224, 56, 85,119, 17,139,206,228,138, 30,236, 38, 56, 90, 50, 56,
- 22, 10, 69, 86,121,216,249, 50,164, 37, 87,161, 86,204,216,255, 49,101,201, 7,199, 2,226, 98, 69,195,145,150,149,159, 47, 85,
- 95, 37,134, 64,144,177, 59, 42,189, 41, 44,131, 2, 26, 5, 59, 11, 77,188, 2,139, 8, 0,103, 10,168,112,145, 61, 80,247,124,
-148,146,188,233,240,184,116,133,120,241, 62,103,154,161,234,125, 36,171,176,146,117,107,206,132, 71,238,142,100,129,174, 21,123,
-177,161, 39,163,145, 30,168,212, 71, 1,119, 73,160,170, 35, 88, 37, 68, 91, 43,229,186,123,138,141,156, 88,124,145,183, 77,145,
-210,129,135,247, 42,183,228, 61, 53,106, 25,172, 9, 30,133,187, 10,110,103,176, 52, 57,167, 64,120,213, 10,167,236,231, 95, 11,
-213,116, 84,227,220,122,160,190,217,168,181,160,134, 73,194,238,234,218,152, 50,185,208,173, 20, 94, 1, 61,226,253,142, 67, 40,
-152,129,211,189, 47, 73,182, 46, 21,138, 46, 9, 63, 57, 83,104,130, 58,192,165,232,102,220,115,200,197, 69, 97, 6,167,178,140,
-138,105, 50,151,203,152, 33, 23, 5,209,228,252,132, 70,120,155,151, 53,189, 38, 21,252,102, 42, 17,230,178,108, 88,231,187, 97,
-207,108,240,152, 73,195,159, 42, 34,147,109,141,102, 16, 29,167, 28, 8,197, 82,123,228,176,142,212,140, 6,201, 4,222,251,241,
-185,118, 97, 92,143,202, 37,141,102,157, 84, 63, 83,161,101, 47,125, 19,239,238, 20, 41,206,172, 48, 81,105, 71,183,159, 45, 47,
-126,170, 4,153,216,181,207,254, 74, 17, 77,217,137,185,162, 61, 40, 99, 79, 42,160,132, 15,170, 19,144, 22,147,183, 48, 83,163,
-114,235,189, 66,227,186,192, 66,103, 63,111, 45,237,192,244, 52,145,140, 41, 21,225,253,197,189, 70, 53,199,117,109, 59, 11,179,
-174, 92,176, 81, 35,227, 60,158, 73, 12,136, 64,230,111,204, 98, 24, 72, 76,206, 47, 94,249, 40, 61, 70,212,148,190, 41,210,179,
- 66, 10,156, 68,104, 5,182, 30, 9,105, 71,209,224,199, 25,187,172, 68, 64,169,133,205, 81,129,161,118, 98,108,102, 49, 35,239,
-163, 21, 0,153,176,228, 57,243, 4,162,157,181, 0, 49, 16,167, 2,139, 79,246,137,123,156, 34,132,126, 48,116, 8,216,124,250,
-194,105,195, 68, 53,246,122, 30,137, 26,139,128,191, 72,186, 23, 59,138, 17, 54,233,232, 10, 6,255,157,156,184,104, 98, 21,241,
-185, 91,127,248, 10, 90,124, 24, 70, 28,124,225,103,237,206, 13,220,160, 48,171,184, 96, 75,211, 90,151, 65,180,111, 42,249,132,
- 60, 88,185, 1,246,181, 6,156,212,205,233,239,112,158,237,241,202, 43,237,109,222,245,115, 37,200, 20, 40,177,241,175,162,130,
-133,131,167, 31,145,172,165, 71, 94,242,138, 82, 73,142, 10,229,252, 81,242,106, 92, 66, 65, 7,131,115,102,182, 77, 57, 94,152,
- 65,207,202,144, 79,142,118, 57,246, 17, 29, 91,214, 60, 69, 75, 56,130, 52,138, 23, 61,214, 10, 23, 36, 89, 48,226,141, 32, 6,
- 22,230,222,206,247,119,215,137, 10, 7,107,221, 59,176,150,244, 94,246, 49,181,236,159,119,177,248,157,209, 93, 41,184, 81, 24,
- 71,124, 30,138,107, 68,169,150,176,133,142, 14,249,212, 53, 24, 24,240,224,179,123, 11, 2, 98,222,131, 18,173, 33, 92, 5, 78,
-105,188, 90, 98, 81,116, 87,244, 52, 84,245, 89,169, 42, 58, 43,233,198, 84,162,167, 89, 20,219, 54, 55, 89, 26,217, 72,228,195,
-112,173, 78,113,211,206,113, 75,228,171, 32,148,181,156, 51,209,207,228,176, 17,131,220,245,131,130,186,218, 27, 97,219,237,134,
- 14,131,245, 51, 62,187,121, 30, 66,184, 18,203,126,181,144,158,185,134,218, 67, 99, 91,107,157,161,187,200, 48,146,156,149, 80,
-105,126,117,189, 71,218,109, 48,233,209,179,223, 39,243, 0, 17, 53,214, 59,107, 4,107, 87,206, 23,184,254, 3, 83, 91, 58,213,
-171,244,142,200,166,229,204,118, 20,109,251, 69,118,129,170,122, 66, 65,165, 87,152,208, 9,154, 30,108,244, 66,239,113, 28, 62,
-166,114, 90,139,189, 8,126, 7, 39,206,120,158,254, 97, 75, 72, 64, 69, 47,249,238,129, 22, 24, 76, 95,179,150, 47,188,155, 24,
- 10, 80, 40,169,146,253,198,194,154, 36, 49, 47, 86, 98,185,149, 39, 87,144, 88, 39,146,103,246,130,250,129,252,123, 5,117,220,
- 16,226,225, 66, 56,178,240, 14, 78,215,107, 61, 59,195,113, 68,220, 6,144,142,133,234,122,184, 4,253, 49, 40, 81,245,120,194,
- 23, 64, 96,250,169,114,149,200,135, 33, 33,193, 79, 69,238,193, 58,228, 33, 8,103, 6, 6, 50,224, 76,161, 21,181,141, 98,124,
-129,138,244,204, 7,144, 52,168, 9, 29, 6, 71, 7,133,131,220, 86, 72,246, 52,204, 19, 69, 84,176,255, 99,115,100, 85,198, 15,
- 17, 75,129,168, 88,134, 89,106,241, 3, 4,107,143,223, 99,130,129,233,141,243, 86,194,235,227,137,119,246,164,155,240, 44,207,
-143, 67,205,159,179,179,221, 86,184,182,190,165, 11,159,113, 48,153, 88, 30, 44,120,156,243, 74,114, 24, 92, 12, 51,242,131, 9,
-238,255, 69,219,249, 46, 20, 36,224,129,103, 19, 41,103,158,140,174, 15, 53, 63,107,218, 58,225, 89,226, 62,174, 21,186, 77,146,
-216, 8, 99, 93,130, 7,219,206, 74,109,253, 40, 4, 10,116,208,171,152, 35,163, 68,151, 71, 32, 30, 53, 90,165,209,253, 98,136,
-124, 78,121,230,140,115, 86,128, 43,219, 65, 94, 38,183, 90, 38,140,175,183, 96, 57, 84,252,122,192,115, 14,168, 39,184,169, 48,
-160,224,252, 67,156, 62,207,110,121,140,167,135,205,214,165, 85,103,243, 71,163,168,141, 25, 29, 23, 40,144, 13, 11, 86,255,251,
- 5, 86,103,140, 90, 5,196,109, 36, 40, 6, 67,161, 29, 34, 10, 5, 95, 97, 83, 48, 60, 10, 97, 51, 5,146,232,150, 77,107,217,
- 92,173, 93, 62,233,104,201,198, 13,253,159,101,131, 61, 71,207, 59,219,179, 82, 60,214,151, 75,160,107,125,212,162,135,211,131,
-205,198, 51, 18, 4,194, 96,104,154,226,126, 44,131,114, 74,243, 32,186,219,231, 91,107,180,136,139,147, 16,173,195,166,247,120,
- 29,237,232, 9,174, 91,159,133,175, 51, 25, 38, 21,195,169, 16,111,228,172,107, 46,123, 63, 48,128, 69,115,218,244,244,194,222,
-117, 56,171, 59,141,138,155,180, 98, 42, 90,149,201,126,113,157,224,249,178, 39, 91,146,117, 56, 3,175, 88,197, 28,173,123,230,
- 21, 29, 14,230, 9,133, 81,173, 78, 78,195, 98,252,123,224,115,174,208,106,226,189, 62, 44,175, 92,103, 24, 7, 75,145,190, 68,
-104, 3,179, 83,105,137,237, 53,107, 49, 50, 23, 25, 83, 11, 72, 86, 52,183,120,144, 9,197, 49, 48, 51, 41,120,136,101, 73,169,
- 92,177, 17,129,230, 1,206, 85,174,134, 93,161, 71, 11, 3, 94, 80, 71, 25, 5, 46,104,154,227,195,123,114,200, 76, 17,247,112,
- 26,131, 47, 85, 86, 18,155, 71, 65,150,180,109, 48,201, 85, 0,115,184,238,189,172, 32, 40, 41, 0,242,208,113,131,228,252,103,
- 94, 29,166,214, 49,180,152,103,189, 39,195, 76, 2,232,232, 28,236,185, 39,152, 33,161, 42,111,228,134, 78,182,174, 66, 88,127,
-236, 84, 77, 57,235, 26, 43,101,251,161,162,248, 99,183, 5, 81,206,183,102, 14, 35,172, 51,241, 67, 32,106,115,201,181,251,195,
-157, 43,133,188,162, 26,123, 39,204,249, 77, 17, 14,158,119, 86, 91,207,120,237, 67, 48,217,219,227, 74, 90,225, 42,201,218,181,
-111, 55,203,120, 55,118, 81,102,102, 82,131,106, 16,190,166, 96,162, 42,161, 76,230,117,116,113,204,181, 25,244, 45,222, 37,235,
-111,114,210,195,218, 80, 53,114,179, 55,105,135, 75,224,103,182,234, 71, 42,175,196,244,251, 40, 32, 73, 66, 84,217, 91, 47,176,
- 42,101, 71,143, 10,140,215,128, 69,193, 6,224,153,252, 80, 95, 74, 73, 88,218,128,250, 84,181, 11,199,172,223, 64, 83, 99,195,
- 82, 97,102,111,181,110, 18, 65,179,226, 38,160,226, 87,182,180, 58,209, 54, 46,180,170, 35, 7,221,158,208,105, 56, 44,236,125,
- 87, 72,155,116,101,126, 70, 54,219,168,178,232,129, 4, 1,118,235, 3,107,191,167,244,112, 95,245, 94,147, 26,148,202, 98,172,
-119, 19,238, 10, 71, 1, 68, 17,172,213,143, 39,203,102,110, 60, 1, 31,159,200,236,247, 9, 10,181, 35, 85, 80, 84, 96,199,157,
-215,209, 59,108, 27, 30,120, 36, 6, 98, 38, 15,213,250,120,206, 99,230,110,255, 27, 44,247,225, 31, 55,110,123,142,243,208, 13,
- 93,139,173,229,170,118, 85,188,217,233, 80, 87, 72, 16,120,213, 90,242,226,169,130,197,249, 21,182,166, 15, 41, 62,248,170,122,
-232,218,114,200,152,182,174,233, 32,183,161,171,165,109,167,105, 48,214,227, 47,128, 45,180, 52, 26, 20, 37,141,139,143, 92, 93,
- 16,112,185, 51,141,115,175, 8, 43, 66, 14,110,154,183,174,132, 61,159,189,112, 48,150, 93,121,139, 98, 38, 87, 66, 34, 33,206,
- 0, 22,171, 86,128,228,121, 51,195, 33,131, 49, 54, 82,162,219,144, 84,222,116,145, 13, 3,225, 55,171,204,104,247,193,218, 98,
- 20, 1,179, 44, 57, 17, 64, 40,139,248,226,224, 80, 66,161, 11,237,119,179, 59,133,181, 47,128, 12,101,149,141, 45,123, 83, 14,
- 73, 40,206,125, 55,112, 28,144,152, 43,164, 17,174,125,180,121, 51, 69, 93, 1, 35, 15, 64,225, 38,147,221, 87, 20, 74,106,191,
- 97, 45, 99,192, 98, 82, 25,233,115,113,176, 9,101, 61,108,192,146,240, 61,126,175,136,195, 65, 96, 40, 45, 43,133,172, 30,164,
- 11,115,174,235, 57, 70, 4, 49,219,215,120,207, 2, 27,125,137,215, 10,160,214, 85,107,146,163, 42, 5,184, 10, 90,143, 80,108,
- 52, 44,104, 56,191,102,135, 90,216,251,177, 84, 54,247,166, 11, 92, 31, 0,130, 48,151,232, 40, 24,159, 29,218,195,177, 49, 49,
-216,137,116,206, 93,241,176, 41, 73, 41,207, 32,244,243, 3,184, 7,166, 8,161,147, 62,176,162, 37,162, 83, 91, 11,209,238, 41,
- 31, 70,151,142, 64, 70, 13, 71, 60,101,213, 57,254, 9,174,194, 98, 77,171, 49,211,108,213,101, 93, 10,145,165, 98,106,243, 79,
-225,228,207, 76,157,137,200,156,128,231,187,112, 28,148,139, 9,121, 65,160, 42,241, 59,157,188, 41, 49, 82,137,240,151, 81,110,
-249,114, 8,194, 50,226,176,167,166, 4,121,208, 36, 21, 24,111,141, 31,184, 89, 5,193,172, 34,165, 77,187, 81,145,116,201, 62,
-178, 41, 53,251,210,201,179,215,193,210,181, 84,164, 67, 43,161, 93,131, 58, 42,208, 30,184,212, 14, 35,109,173,175, 53, 2,169,
- 84,119,193,166, 79,226, 12,108, 50,222, 73, 98,125, 23, 61, 36,170, 71, 28,163,161,199,172,120,142,231, 64,162,163, 90,171,142,
-129, 39, 53,244,118, 1,158, 10,167, 37,148,228, 99,190, 60,154, 20, 21,220, 64, 78,116, 43,227,254,154,149,113, 96,107, 18,153,
- 21,183, 12, 95,186,137,247, 88,103,253,162, 57, 19, 54,138,156,108,143,237, 27,104,217,131,178,181,238, 64,209,121,190,135, 40,
- 25, 29,179, 93, 83,158,253,243,113,122,232,100, 27,177,173,149,250, 28,104, 43, 95, 33, 5, 64,183, 23,237,117,176,119,165, 38,
-129, 41,169, 62,123,155,246, 32,216,188, 40,156, 83, 33, 35,229,181,252, 29,218, 35,200,249,165, 4,217,216,223, 76, 18,206,148,
- 87,226, 59, 61,245,165,106,138, 57,197,180,230,181, 58,188,240,169, 50,210, 52,110, 66,250,155,219,174,120, 15,193, 30,139,112,
- 1,216, 62,136,240,100, 69, 42, 2, 42,216, 10, 59,237,162, 39,143, 33, 4, 5, 24,102, 21,251, 34, 40,113,242, 90,171,253, 48,
- 71, 58,218,158,144,249, 4,152, 78,243, 36, 51,103, 66,148,112,182,239, 8, 99,139, 44,183,170, 19,238,147, 4,236, 46, 12,185,
- 50,234,219, 46, 25,207,187,230,175,187,112,131, 34,150,114, 4,171, 20,168, 46, 65,181,219, 31,226,178,114, 44, 33,192,166,181,
-165,138,255,185,172, 22, 63, 15,112,112,133,237,120, 24,125,174, 24,153, 67,128, 55,206, 8,122, 36,211, 21, 14, 53,173,207,206,
-117, 3, 41,172, 45, 51, 93, 88, 8, 68, 70,105, 44,194,208,130, 94, 85,228,136,130, 65,103,131, 95,107, 19, 22, 85,107,173,142,
-131, 85, 41, 28,211,185, 18,168,226,190,104,105, 11,178, 47,130,182,193, 79, 37,219,147,170,142, 84,172,253, 42,115, 18, 48,153,
-139,197,253,249, 18, 86, 36,180, 72,114, 5, 50,227, 42, 25, 5, 91,176,204,249,148,153, 83, 89,227,235,108, 86, 80,247, 18,155,
-189,177,116,237, 96,191,191, 83, 2, 24,199,224,214,102,170,237,117,111,178, 72,192, 34,113,221, 21, 82, 16, 98, 50, 54, 43,115,
- 53,216,134,173, 89,210, 67, 28,201,113,136, 30, 85,152, 85,156, 69,241,161, 35,208, 29, 59, 26, 82, 67,183, 81,194, 90,225,246,
- 51,177,182, 34,101, 20,171,109, 18,235,145, 38,123,250,150, 85,219,218,230,109,107,182,132,250, 93,210,220,217, 72,145, 72,149,
- 4, 85,121,153, 96,148, 54,238,155,254,222, 74, 25,221,142,110,107,134,176,159, 50,245,235, 97,243, 92,195,246, 82, 58,220, 75,
-178,234, 22, 66,135, 69,241, 67, 80,209,174,214,192,193, 46,155, 96,221,244,131, 65, 66,206,154,111,192,116, 23,160, 97,154,220,
- 15,110,215,181,118,241,103,219, 27,183,155,152,233, 8,208, 13,205, 57,210, 54,230,185, 86,239,120,184,224,216,244, 25,100, 97,
-181,227,129,111,135,128,158, 99, 2, 4, 74,209,200,241, 41,109, 72,186,222,110, 38, 24, 63,219, 40,172,120,107,189,234,137,161,
-162, 83,165, 11, 46, 71,198,233,174,171,216, 41, 35,123,157, 33, 49,222, 87, 81,181,187,145,230,250, 87,102,234,127,183,204,154,
-179,190,252,179,105, 39,165,173, 68,102, 55, 99,201,199, 4, 0,126, 73, 1, 18, 34,112,113, 25, 98, 24,247,243, 58, 64, 24,196,
- 43, 74, 27,120,170,147, 93,163,164, 3, 70, 86, 39, 83, 18,156,212, 68,173,130,164, 40,217, 23,133, 69,170,164, 36, 76,162, 37,
-195,241, 30, 61,180, 36, 37,105, 82,116, 18,166, 23,161,217, 14,135,158, 53, 24,208,166,236,181,121,244,202, 23,158,229,240, 8,
-190,147,125, 81, 83, 74, 27,138, 44,247, 80,201, 67,213, 10,246, 51,145,172, 41,112, 7,113,137, 57, 25, 65,116,109, 20,155,170,
- 34,109,138, 74, 41,110,140,139, 86, 63, 39,124,118, 84,178,182, 41, 77,250, 48,137,251,186,219,102,185,229,141,218, 5, 45,211,
- 62,218,188, 19,193,235, 80, 69,168,189,247,153, 48, 25,176,132,117, 12,187, 30, 37,131, 77, 38,136, 80,244, 98, 78,215,221, 9,
-218, 93,198,205,176,205,112,204,215,163,130,159,176, 61,198, 28,233,128,112, 96, 52, 21, 55,113,142,220,148, 21,200, 35,173,137,
-184, 96,241, 16,195,147, 86,184,238, 73, 86,111,188, 3,132,108, 86,186, 81,196,115, 41, 64,186, 43,185,165, 13, 89, 10, 99,163,
- 44,142, 20,230, 18, 54, 69, 28,171, 57, 56,165,112, 78, 94,235,155,139, 86,246,234,139,118,183, 5,195, 66,142,211,252, 20,213,
- 10,243,122, 37,144,245,121, 46, 84,195, 12, 76,241,216,140, 89, 91,204, 64, 43, 99,206,132,178, 34,137, 83, 46,188, 26, 25,216,
-179,104, 27,176, 85,225, 41, 60,188,104, 64, 75, 85,130,162,110,222, 22, 39, 7,232, 89, 23,114,129,152,184,106,171,214, 19,231,
- 4, 84,224, 83, 58, 63,239, 1,161,193,195, 50, 14,161, 38,228, 43, 97,173,100, 61,177,140, 3,171,104,164,167,126,174,150, 11,
- 80,131,248, 87,109,132,209,227,228,180,131, 0,157, 10, 49, 54, 65,141, 5, 91, 52, 71, 28, 27, 31,130, 23,202,179, 51, 96,205,
-170,146,104,146,177,118,169, 93,179,209,212,220, 30, 88,116,100, 36, 96, 21, 4,171, 52,131, 27,203, 44,117, 94, 24,148, 30, 72,
-211,151,174, 10,192, 35,221,176,163,157, 61,254,172, 91,215,150, 53,104,211,196,128, 14, 12,170,105,212, 16,221, 8,241,156,132,
- 73, 36, 51,198, 84,127, 81, 64,124, 44, 41,129, 52,214,240,145,138,184,211, 63,153,244,190,157,163, 35,204, 58,116, 1,189,204,
- 92,119, 3,248,214,186, 52, 64,239, 11, 43,244,120, 63, 83,127,169,147, 54, 28,106, 15,112,177,128,224,246, 27, 55,219,214,155,
-183,129,190,159, 24,225,157, 64,182, 6, 23,129, 25,105, 62, 93, 33, 4,179, 48,170,211,205, 63,184,154, 95, 85,242,182,163,172,
- 8, 71, 18,103,135,156,114,132, 71, 2,118,135,173, 15,133, 57,250,243, 42,106,169, 41, 76,222, 39, 71,165, 96,174, 96,178,213,
- 96,254, 53, 39,161, 21, 37, 68, 41, 59, 42,150,147, 37,207, 65, 3,149, 82,100, 36, 6, 44,236,241, 53,132,128,194, 21,215,104,
- 42, 43,205,130,227, 54,197, 63, 96,194, 32,150, 53, 45,135, 96, 76, 11, 51,162, 10,194,184, 16, 82,114, 98,226,217, 34, 34, 2,
-237, 61,247,232,115, 82,187,218, 24,161,219, 41, 74,113, 17, 93,228,130,143,135,172,128,162,186,120,235,114,188,222, 9,197,120,
- 20,121,194,133, 11,188,191,226,236,121, 59,169, 22, 10,247, 3, 23,176,202,171,218,183, 43,100, 11,188, 78,244, 42,195,121,146,
- 41, 19,200, 44,162,149, 33,149,110, 84,236,163, 31,239, 7, 76, 72,183, 16,156,207,195,184, 41,177, 12, 24, 5,148, 28,182, 54,
-166,124,160,166,240,176,150, 77, 25,255,152,144, 73,133, 65,110,109,179,227,144, 14,253,121, 83, 98, 99,181, 86,161, 80, 18, 58,
-150,178,117,177,210, 26,136,227,225, 76, 85, 2,242,214,238,147,106,132, 12,233, 45, 66, 42,144,162,103,207,149,110,234, 81,209,
- 73, 34,133,249,223,183,215, 63, 1,113, 14, 4,101,118,227, 70,113, 16,252,107,118,212,141,248, 72,195,211,230,170,100,103,173,
- 68,152, 77,130,221,232, 38,213,239,159, 82,117, 86,201, 29,227, 41,218, 70, 29,243,218,162,130, 58, 1,156,145,120,206, 69,213,
-188, 5, 65,210, 97, 1,104,141,134,235,136, 57, 74, 96,141,234, 22, 67,100,184,231, 48, 4,155, 19, 37, 16, 12,193, 44,216, 54,
-192,162, 60, 83,235, 44,246, 54,245,164, 8,212, 89,163,134,167,113,176, 30, 34,171,113, 8,152,109,243,183, 50,202,172, 81,214,
- 17,208,245,197,241, 5,181, 4, 8, 7,116, 9,108, 73,159, 69,162,173, 13, 93, 91, 49,111,113, 69, 93, 78, 73,236, 3,175,253,
-203, 56, 20,185, 80,185, 86, 7,207,196,119, 25,179, 93, 93, 90,125,230, 61, 67, 97,192,129, 84, 69,113, 44,140,200, 68,153,253,
-184,238,133,106, 78, 87,160, 54, 30,168, 1,146, 18,181, 6,146, 89, 32,205,117, 37, 43, 33, 33,232, 57,138,118, 34, 45, 39, 37,
-162,123,195, 42, 37,170,205,233, 66, 57,158,188,171,105,239,161,172, 4,102,125, 52, 97, 99, 68, 99, 65,130,213,124, 51,208,176,
-234, 3, 4,156, 35,115, 37, 48, 26, 93,144,239, 41,209,242,134, 57,217, 16, 21,137,191, 41, 36, 24, 37,101,106,145, 12, 55,192,
-246, 50,173, 30, 76,166,149,231,147, 50, 54,114, 21,103, 26,121,224, 54,187,175,177, 25, 11,206,246, 47, 64,181,114,254,125,180,
- 54,224,229,142, 19,248,176,163, 69,110,194, 37, 65, 13,157, 48,229,165, 95,242,184,161, 64,203, 91, 95, 83, 33,240, 65,162,119,
-214, 1, 43, 10,151,169,197,121,238,158,232, 36,113,115,153,242,178,119, 12,101,176,249,189,161,193, 65, 80, 11,162,159,184, 47,
-154, 36, 35, 49, 81,100,136,235,144,183,170,101,108,232, 83, 41,224, 69,151, 62,247, 52, 8,129,147,200,120,110, 16, 69,221,204,
- 53, 64, 65, 31,242,201,213,178,113, 66, 53,157,135,171,246, 96,230, 88, 38,125,192, 70,167,144,166,141,181,197, 67,229,111,135,
-166,194, 6, 74, 10, 78,244,216,171, 3, 30, 50, 14, 37,213, 23,213,137, 87, 8, 77,139, 39, 78,149,152,110,250, 34,145,250,180,
- 82, 14,187, 83,192,218, 1, 4,109, 74,251,172,172, 27,208,174, 97,111,235, 13,168, 76,183,201, 72, 44,194,166, 82,239, 11,246,
- 52,170, 1,110,223,191,153,124, 35, 20, 16,234, 5, 68,166,117, 93, 38, 53,232,110,128,205, 30,149, 40,233,194,209, 22, 25,163,
-254,117,206,182, 24, 20,105,210,205,177,198,120,195, 54,208, 90,225,160, 75,218, 17, 96,111, 33,251, 67,109, 64, 67,235, 16,110,
- 96,246,111, 30, 96, 65,158,125, 94,139, 92, 68,104,254,250, 58, 42, 97,193,246,177, 17,198,236,119, 88,241,210, 43,209,141,118,
- 17,106, 28,238,203, 6,226, 96,135, 42,157, 76,101,223,223,111, 81,187,220,168,220,135,146, 89, 23,214,126,125,244,165,111, 70,
-155,190,139,187, 52,132,100,140,200, 74, 56, 1, 84, 21, 78, 23, 72, 17, 93, 76,232, 2, 99,240, 3, 84,181,218,213,234, 15,200,
-216,215, 11,108,154, 56,198, 20,127,125,237, 90,177, 50,218,135,117, 89, 63, 19, 64,219,117,252,107,173,100,125, 80, 11, 30,153,
- 28,142,164, 93, 66, 35, 40, 74, 28, 12, 59, 10, 65, 56,119, 69, 76, 24,187, 73,188,160, 81, 69, 55, 32, 75,173,123,129, 88,169,
-133, 9, 93, 71,235, 60,120, 69, 12, 5,206,134, 35,197, 34,241, 10,246,195,176,245,190,209,174,143,222,215,133, 87,208,144,222,
- 33,172, 96, 17,164, 36, 10, 12,195,129,234, 38,164,250, 30,102,227, 92, 1, 58,102,215, 57,148, 81,149, 79,214,218,169,163, 45,
-215, 69,148, 53, 7, 59,219,148,169, 10,132,141, 73,128,134,184, 39,196, 85, 15,245,178, 77,126, 51,136, 57,187,248,192,156,112,
-196,121,198, 1, 68, 37, 87, 56,154,202, 83,208,167, 25, 81,137,190, 34,155, 45, 33, 69,199, 73,182, 62,129,101, 10, 29, 50, 33,
- 46,149,149,249, 70, 32, 58, 18, 61,162,232, 27,151,125, 58, 13, 38,186, 73,136,102,152, 5,110, 30, 33,208,205,132, 42,156,130,
- 77, 30,188, 9,129, 52, 9,113, 27,132,175,217, 37, 44, 87, 34, 16,159, 82,245, 4,108, 66,177, 42, 9,178, 83, 32,235,218,178,
-126,209,191, 28,175,171,230,166, 10,122,147, 45, 24,133,135,106,211,149,245,186,209,250,195,135, 1, 35, 28,124,100,131,151,109,
-240,154,192, 9,146, 33,245,104,130, 81,197,164,222,117, 19,194, 77,173,245,181,101,157, 93,179,251,101,207,197,114,131, 3,126,
- 49,242, 6, 74,104,115, 39,246,175,123,197, 48,141, 83,243, 72, 20, 12,225,141,161,109, 11,140,116,250,102,167,186, 17, 31,173,
- 38,247, 66, 84,214,166,254,246,108,115,138, 14, 16, 59,210,122, 26, 21,179, 31,112,234,126, 50, 92,153,252,243,104,129, 21,193,
-115, 82,117,250,102, 2,251, 87,238,172,184, 74,217,231,226,236,126,234,182,216,142,195, 78, 25,129, 96,246,155,167,177, 73,240,
-196,225,247,238,158,213, 18, 54,187,246,222,102,101,190, 79,218,121, 48,118,183,109,124,203,170, 59,155, 87,184, 66, 69,214, 99,
- 94,167, 62, 70, 97,100,115,167,220,109,248,223, 12, 48,136, 46, 5,102,136, 68,102, 24,127, 48,232,108, 37,229, 19, 16,104, 14,
-172,219,196, 90,201, 56, 8,198, 4,143,122,224,147, 18, 52,163,102,209, 45, 0,248,176,245,168, 87,206,125, 51,154, 92,144,196,
-180,241,251,185,138,164,152,233, 17,123,101,237,218, 26, 22,171,246,185,168, 26, 59,154,123,203,159,237,106,208,212,218,231,101,
- 66, 41,200, 10, 31, 75,100, 29,179, 89,123,211, 69,215,205, 74, 48, 14, 49,114,160,182,208, 85, 99,208, 15, 47,243, 16,142, 9,
-229,156,119,137,240,239,209, 77, 97,112,207, 79, 54, 26,105, 23, 98,183,234, 42, 69, 7,182, 40, 36,165, 29, 72,250,199, 63, 91,
- 65, 0,163, 94, 36, 70, 85,242,152,210, 62,162,218, 20,191, 71, 88, 15,186, 21, 32, 28,109,175,153, 13,134,211, 30,149, 57, 8,
-129,110,105,229,188, 79,136, 3,185, 16,246, 34,238, 45,199,130,107,195, 83,210,234,217,120,164,221, 19,166,180,247,226,196,214,
-108, 90,105, 15, 96, 12,210,174,199,160,182,205,161,222,234, 34, 79, 11, 91, 81,154, 28,179,219,216,132, 80,184, 58, 14, 73,181,
- 91,226,192, 85,208, 59, 64, 37, 70,161,133, 67, 68,169,247,184,232, 13, 81, 96, 51, 12,179,227,114,231,182, 67,185, 2,106,108,
-205,218, 20,157,197,149, 2, 74,237, 85,133,104,235, 95, 89,249,232, 66,113,171,155, 14,135,175, 18, 49,135,196,184, 41,137,163,
- 35,217,103, 39, 5,132,117,130, 26, 1,232, 28,200,126,126,138,208, 42, 44, 85,128, 96,148, 65, 24, 92, 97,230,231, 34,181,104,
- 45,167, 8, 65, 66,228,164,172,128, 12,228, 98, 37,111,191,111,178,127,213,216,209, 72, 50, 50,241,150,120, 92, 97,219,236, 70,
- 69, 93, 18, 33, 13,169, 92,122,128, 2, 17, 80, 1, 45, 66,133, 39, 76,148,123, 93,248, 2,211, 17,250, 75, 33, 0,196, 18,198,
-102,132,151,116,221,237,104,213, 85, 10, 90, 87, 5,209, 32,230, 42, 91,107, 76,199,102, 46, 68,153,216,178,134, 21,145, 88, 71,
- 71,104, 28, 48,198, 90,176, 85,239, 47,131,152,138, 49, 22, 16, 68, 60,230, 79, 47, 83, 40,120,123,247,118,226, 20,239, 29, 17,
-171,106, 15,153, 20, 43,170,227,158,182, 1, 78, 37, 90,250,120, 10, 31,214, 30,192,211,130, 48,179, 32,151,189,192, 20,180,108,
-178, 13,178,144,143,125, 24,170,173,126, 8, 41, 83,160, 73,173, 45, 94, 86,176,152, 13,199,181,158,192,238,103,155,176,181,183,
-171,129,162,244, 64,214, 46, 76,123,192, 61, 63, 61,178,230,141, 66,199, 90,156,151,173,166, 73, 1, 86,211,159,131,185,134,205,
- 83, 66,140,233,209,153, 58,107, 22,157, 27,123,137,128,217,236, 74, 31,243, 67, 46,115,130, 1,201, 42,148,199, 62, 55, 89,139,
- 84,237,189, 56,198,122,242,202,211, 69,147,225,223,140,131,122,149, 32,164,185,112,179,228,188,116, 99,152,218,181,105,247,203,
-188,131,150,126, 89,233,114, 74, 7,255, 52,212,167,141, 50,120, 58,232,215,161,214,221,168,190,218,231, 53, 85, 31,145,141,195,
-189,249,168,171,199,201, 9, 58,121,116,243,240,208, 36,187,157,224,176, 62, 87, 81,255, 51,210, 50,194,234, 88,245,180,107,160,
-156, 22,175, 91, 10,224,139, 11,116, 86,173, 50, 47, 49, 50, 41,171,184, 94,244,181,143, 80,161,113, 32, 68, 16,142,232, 70,236,
-226,191, 73,187,201, 29,173,186,139,214,187,160,233, 70,215,160,246, 12, 86,162,217,100, 99, 16,193,170,177,104,254, 60, 21, 25,
- 35, 12,140,116,141,235, 27,136,223, 10, 22, 65, 81, 59,160,200, 72, 72, 75, 96,164,222, 21,152,225,217,168,105,108,234, 26, 43,
- 0,169, 97,174,137, 17,235,108, 77,159,156, 53, 82, 60, 81,177,171,236,193,141, 19,156,164, 28,195, 45,192,151,200,220, 22,232,
- 46,170,214,198,199,140, 84, 66, 88,137,232,241,202,126, 8,104, 5,212, 80, 21, 50,136, 84, 64, 12,177,206, 67,155, 10,228, 71,
- 67,123, 51, 80,131,156,196, 93,177,217,129,224,140,101,181,105,235,108,200, 79,217, 0,171,199,116, 34,244, 66,211,138,172,181,
- 26,216, 51,115, 8,250, 60, 27, 28, 95,107, 68,159, 74,226, 88, 51,102,155,186,194,148,112,106,205, 0,200, 84,170, 83, 18, 2,
- 79,226, 45,247, 20, 30, 81,130,199, 34,144, 40,132, 74,127,130,179, 26,121,101, 92,114, 30,180,181,122,221, 98,163, 85,105,138,
-102, 29,167,183,170,215,123,226,225,157, 44, 48,179,182,195,219, 70,207,133,197,211,250, 40, 41,188, 5, 41, 89,168, 11, 40,170,
-186,111,115,187,105,156, 82, 45, 39,216,113,241,237,129, 44,195,122,225,116,182, 82,250,125, 36, 43,234,125, 41,188, 90, 92,216,
- 43, 52,242,123, 79, 64,205,173, 69, 32,103, 50,252,164, 81,140,163,114,155,198,226,166, 11,162, 20,116, 15,228, 57, 38,166, 70,
- 49,140, 74,236,192,231, 97, 22, 5,114,164, 11,218,167,172,221, 56,173, 56,182, 43, 16,140, 64, 51, 41,197, 0,140,159, 57,233,
-236, 60, 34, 46,241,160, 19, 73,108, 5,137,116, 84, 18,149,207,172,129, 5,162, 91,205, 26,196,189,109,172,115,105,120,239,237,
-115,236, 80, 11, 21, 89,133,152,212, 54,215, 26,156, 9,201, 30, 93,111,107,249,181,138,195,158, 51,174,129,111, 48,236, 82,104,
- 11, 19,176,171, 86, 8,255, 97,111,175,118,234,153, 29, 95, 11,150, 98, 51,164,122,105,119,130, 15,162,130,229, 21, 43, 28,219,
-217, 2,157, 7, 19, 27, 18,132,126, 56, 47, 93, 97, 39,166,147, 81, 5,252,104,133,235,230,132,243,233, 85, 3,195, 28,130,147,
-241, 6,252, 71,215,100, 57,179, 3,140, 0, 3,191,233, 41,186,167,191, 29, 30,160,155,214,158,151,170,218, 6,210,248, 79, 46,
-145,222, 70, 96, 57, 36,132,103, 21,128,226,208,232,102,249, 28,219, 5,114,195, 19,223,239,207, 89,198,104,196,188,226,192,186,
-247, 81, 99,251,187,187,217, 21,228,165,112,178,252,149, 41,148,252,189,114, 87, 27,151, 29, 72,134, 48, 84,122, 53,236, 24,237,
-136, 86, 28, 29,154, 42, 94, 45,215, 46, 10, 27,115,239, 34, 41,181, 2, 41, 36, 62,122,237,247, 79, 43,160,218,193, 87,176, 90,
- 94, 29, 50, 25,178, 4, 36,242, 45, 4,245, 30, 8, 86, 50,236,183,123,233, 5,248, 26, 26,197,219,239,231, 26,106,118,102,208,
-109,217,136,165,228, 0, 40, 9, 91,171,104, 7,175, 91, 0,219,215,235,156, 71, 44, 41,161,180, 52,161,220, 52, 78, 46,164, 39,
- 77,216, 96,121, 5,139,225,146,103,169,198, 9, 39, 1,133, 48,175,178,153,121, 21, 87,178,246, 77, 99, 30,139, 69, 27,226, 66,
-147,124,222, 4,113,172,226, 23,141, 32,141, 45,251, 36, 33,137,141, 87, 57,190,230, 51, 46,241,161,162, 82,143, 25,213,178, 64,
- 28,130, 74,194, 55, 47,187, 41, 0, 88, 33,104,213, 4,154,151, 0,193,173, 10,136,129,204, 82, 33, 24,252, 97,130,178,200, 24,
-183, 19,105,130,179, 96,147,129,130, 49, 80, 24,208,183,186, 64,215,181, 47,220,207, 85,156,200,118, 5,196, 73, 12,222,232,146,
-218,214,250,145,110, 1,139,105,106,243, 41, 20,241, 27,189, 97,251,173, 45, 2,144,151,162,222,239, 80, 99, 50,228,132,179, 42,
-191,109, 20,130, 91,183, 76,118, 72, 40, 94, 89, 49,102,124, 20, 93, 60,213,223,221,103,125, 46, 61,166,240,139,178, 10, 16, 41,
- 28, 30,156,170, 60,142, 3,161,109,144, 43,120,137, 43,176,153,221,186,196,171,251, 32, 17, 13, 41,127,191,207, 79, 75,217, 11,
-245, 40,133,247, 20,244,177, 40,112,192,123, 28,172, 98, 85, 6,103,173, 7,175, 96, 61, 98, 89,212,129, 58, 29, 36,201,154, 20,
-217, 30,211,235,227, 50,113, 64,134,111,152,150,238, 70,192,110,199,212, 58,175,250, 96,179,235,237,124, 61, 90, 90, 21, 43, 35,
-235,186,129, 66,138,126,110,197, 90,235, 20,126,105,102,138,148, 68,235, 12, 20, 75, 8,132,244, 47,155,151, 35,147, 66,159, 1,
-239, 94,244, 54,250,168,164, 75,201,160, 29,118, 63, 51, 28,172, 13, 57, 88, 85, 72,216,198,143,106,133, 11, 43,159,185,131, 74,
-172,107, 27, 78, 73,120,163,240,176,241, 68,113,129, 89,239, 22,244,247,184, 9, 5,190, 61,147,117, 3,154, 14, 2,117, 60,193,
- 33, 80,217,236, 82,125,225,247,208, 17, 21,144,182, 17, 65,239,128, 77,227,123,171, 90,248,108,188, 97, 98,201,177,209,139,175,
-117,193,150,111,221, 30,219,240,107,255, 57,189, 85,207,234,249, 70,134,189,136,195, 87,138,106, 38, 12,100,206,122,128, 21, 61,
- 52,213,106,144,158, 73, 59, 92,236, 86, 51, 39,168,149,226,221,149,109, 35,241, 89,139, 0, 99,183, 61, 21,110,220,119,243, 60,
-251,236,189, 23, 15,106,247, 20,198, 53, 50, 44,218,209,245, 1,138, 35,141, 3,133, 39,162,217,181, 4,239,211,136,122,229, 0,
-234,232,202,191,105,252,120,189,127,200,177,202,235, 49,180,117, 45,139, 23, 44, 12,227,141, 1,180,153, 18, 70,151, 65,160,205,
-144,109,191,124, 50,179, 87, 67, 67,109, 29, 54, 4,222, 99, 13, 95, 16,123,170, 25,177, 12, 84,155,178,162,170,153, 80,166, 40,
-122, 17, 83,205,176, 90,147,149,193, 3, 45, 93, 9,229, 88, 41, 98,189, 64,221, 24,116,177,125,190, 59,187,175,158, 51,109, 76,
- 96, 54,158,215,212,120,192,101, 29, 61, 41, 43,239,113,174,214,236,253, 87, 89, 7,215, 0, 35, 27,211,228,160, 46, 55,154, 95,
-202,228, 6,245, 39, 99,148, 44,101,149, 47, 51, 82,213,132,202, 42, 16, 57, 70, 43,182, 32, 86, 13, 76,152, 20,242,176,194,211,
- 2,197,168,152, 29,103,249,123, 91, 98,183, 8,118, 81, 28,187, 85, 65, 65, 10,236,158, 82,219, 56, 39, 5,176,218,198, 82, 64,
-248, 87,152, 35, 85,205,138, 92,173,198, 10, 84, 26, 49,214,225, 11,194,124,128,206, 86,134, 2,184, 56,253, 42,179,206, 3,185,
- 72, 30,234,227,134, 69, 6,189, 0, 72,178, 45, 53, 78, 16,251,105,239,133, 35,195,220,148,246, 65,242,131, 17, 3, 28, 10,146,
-143,155, 57,111,240, 12,179, 78,206, 17,141,222, 53, 90,113,184, 25,201,103,253,122, 78,206, 24,231, 74, 43,207,124,176,188, 13,
- 37, 85,124,174,203, 17, 81, 91,121,173,139,245,247, 37,240, 26, 61, 94,147,141, 55, 1,144, 28,197,198,246,235,147, 2, 83, 56,
- 58,204,211,228,179,239,238,181, 5, 92,105,242,119, 42,219, 91, 0,254,232,119,184, 68, 62,122,116, 57, 33,174,173,196, 34, 90,
- 69,128,200, 24,131,178,138,138, 80, 10, 0, 72, 87,120, 84, 84,227,234, 70,118, 62,247,197,184, 56,104,131, 2,137, 26,208,129,
-192,203,212, 89,187, 79,220,231,212, 93, 76,167, 7,143,254,223,162,249,224, 78,206, 28,255,111,204,184, 71,139,187, 32, 7, 68,
-108, 99, 12, 75,154, 37, 60, 26,156,203,121, 34, 46,150,211,119, 59,145, 31,106,194,237, 82,156, 11,192,138,112, 13, 18,221,248,
-125,211,102,138,184,217, 58,174, 67,175,192,219, 38, 63, 71, 80, 85, 31, 35,180,247,185,219,197,117,175,226,218, 4,242, 61,103,
-211,175,199,188,107,239,115,227, 97, 66,189,154,159,107, 28,178,121, 8,218,230,221,232,202,204,117,176,209,217, 58, 27, 38,192,
-174, 17,206,213,219,240, 86,105,206, 58,158,176,131, 26, 87, 63,123,216, 24,162,127,127,141,125,197,227,170,189,193, 91,146,144,
-111,192, 99, 34,227, 99, 3,222,116,209,131, 93,193,160, 31,208,183,136,117, 88,171,145,200, 37, 66, 94, 0,103,222,237,188, 27,
-208, 78,248,215, 57,181,223, 17,187,185, 57,152,134, 29,160,163, 59, 65,136, 52,133, 76, 57,181, 92,189, 85,154,192, 43,213, 79,
- 54, 12, 98, 16,175, 32, 37, 82,189,176,221,103, 54, 40, 33,220,236, 97, 35, 66, 44, 45,195,129, 3,219,180,107,207, 53,248, 0,
-153,177,222,183, 69, 74, 63,198, 25, 99, 30,117, 49,175,121,118, 30, 31,166,128,106,190,164,153,114, 93, 37,129,197, 7,103,148,
-179,220, 18,247,235,100,166,233,106,204,139,234,179,181,162,176,132,252,230,130, 73, 93, 82, 66, 18,129,186,187, 64, 23, 35,200,
-108,133,203,138, 14,144, 3,119,216,219, 62,197, 59, 3, 56, 49,240,197,161,138,118, 81, 98,129,107, 93, 30,123, 77, 83, 9, 17,
-222, 30,112,196, 14, 42,197, 54, 17,214,141,123, 10, 63,188,182,217,172,250, 44, 37,130, 93,250, 58, 32, 97, 54,231,178,194,148,
-218,198, 65,209,149,240,121, 56,173, 90, 25,156,124,138,107,150,108,188,232,194,169,229,150,224, 48,192,246, 38,244, 74,151, 85,
-186, 88,129,164,172, 18,177,189,172,194,212, 49, 59,215, 3, 18, 8,196,246,137,119,140,142,153, 68,159,227,224,132,166, 40, 34,
- 23,117, 78,112, 32,237, 65, 22, 48,127,100,196, 55,227,156,151, 2,216, 2,223,231,130,170, 2, 94,125, 86,161, 30,115,142, 74,
- 53,213,151, 19,184,176,103,175,237,244, 62,156,213,141,175, 78,206, 23,144,181,248, 78,255,142,103, 19,232,245,108,162, 60,145,
-200, 88,112, 68,170,147,237,196, 15, 67, 54,147, 45, 17,100, 49, 14, 92,166,154, 15,116,138, 35, 75, 25,209,178,142, 79,157, 20,
-173, 93,252, 0,154,102,128,160,230, 30, 66, 74, 93,255, 74, 20, 10,237, 71, 84, 9,122, 99, 7,188, 84,157,193,151, 16, 17, 79,
-211, 70,215, 46,113,241, 20, 3,141,206,194, 67, 92,100, 89,204,198,169,218, 7, 61, 57,217,193,181,181,193,121,155, 99, 72,227,
-144, 60, 15,231, 89,149,136,190,182,207,185, 26, 73, 80,220,141, 17,127,215,188,229,170, 20,175, 49,251, 29,191,103,231,163,185,
-121,214,246,191,222, 19,109,254, 30,218,150,226, 45,233,121,183, 11, 78, 2,136, 20,227,128, 57,235, 8,103,214,103,113, 26, 66,
-184, 18,210,105,140,101, 30,215, 21, 68,133, 66,106,251,227,248,204, 44,167,220,242, 27,128,190,105, 33, 77, 62, 86, 50, 81,170,
-217, 51, 57, 88, 43, 67, 72, 41, 41, 58,218,128, 99,166,244, 23,179, 97, 23,139, 37, 96,152,239,107, 50,164,118, 77, 70,245, 62,
- 43, 55,165,130,230, 77, 53, 7,192, 84,233,154,168,221,233,211,177,157,148,161,172,109, 85,219,164, 15,164,104,110,107,209, 69,
-116, 20, 93,138,195, 75,229,176, 85,143, 53, 87,212, 18,115,227, 52, 43, 54,122, 86, 5,143, 38, 42,145,177,111, 45,136,120,180,
-215, 33,208,178,231,228,255, 75, 84, 60,104, 19,251, 3,205,154,128, 83, 98,145, 17,137,156,107, 15,177, 23,129, 4, 31,222,235,
- 90,120,107, 73,178,106,158, 1,236, 32, 50, 90, 91, 46,116,130,228, 53,108,237, 7,220,166, 56,226,208, 55, 85,152,255, 9, 48,
-209,109,225, 19,245,169, 34,143,157, 86,249,212,178, 90,172, 99,142, 84,246, 91,206, 24,232, 96,232, 4,102, 16,167, 21,104,125,
-114,228,139, 23, 74,148, 43,219, 40, 39,115,173,235,131, 92, 24,223,190,109, 6,148, 82,246,130,153,110, 39, 87, 21,200,249,230,
- 98, 63, 39,130, 30,132, 99, 44, 19, 22, 10, 89,229, 67, 91,198,252,190, 95, 81,192,230, 18,237,255, 53, 29,145, 97,190, 14,128,
- 23,243, 74, 67,197,237,144,162,137,163, 99,161,167, 64, 54,255, 31,144,215, 68,157,215, 92, 70,183,166,216, 38, 70, 32, 54,195,
-136, 93, 75,172,163,224,186, 71,135,133,215,142,204, 24,117, 73,182,115, 98, 65,107, 22, 56,193,138, 85,144,122, 87, 32, 93, 78,
-171, 81,101,231,230,192, 31,155,181,110,247,108, 69, 2,201,128, 99,227, 25,202,225,126, 93, 54, 20,157, 38,206,247, 33,242,210,
- 49, 19,160,185, 11, 24,146,211, 72, 66,125, 76, 18, 66,193,186,202, 16, 88,139, 50,199,204,187,194,117, 2, 78,134,227,109, 57,
- 3,163, 55, 67, 65, 79,154,132, 38,110,213,164, 52,178,114,134, 70, 74,125, 24, 84, 63,166, 64, 49, 71,142, 59,104, 32,108,153,
- 45, 25,112, 53, 14, 67,164,133,128,250,207, 39, 69,123, 75,248,196, 89,225, 53,211,196,201,168, 80, 37,171,230,171, 70,145, 38,
- 55,175,194,102,252,222,168,112,253,205,217, 84,141,166, 87, 67, 20,216, 90,233, 59,163,223, 53,133,246,214,219,240, 49, 13,148,
-136,109, 22, 19, 27, 71,241,100, 99, 70,171,234, 69,131, 90,236,115, 48,241, 31,219,200,152,198,248, 36,170, 86,241,136,216,208,
- 82, 76,206,102, 24,211,157, 50, 66, 94, 28, 11, 44,250, 58, 43, 80,254,198,104, 33,242,212, 99,206,221,206, 64, 50,230,148,203,
- 97,165,186, 3,160,125,161,152,191, 86,175, 73,133,232,219, 93, 75,123,107,123,173, 58,115,108,173,174,186,114, 78,102, 23, 37,
- 64,210, 54,221, 3,197, 65, 66,141,145, 99,172,160,133, 80, 85,109, 73,247,176, 28, 44, 23,230,244,228,100, 41,243,183, 52, 29,
-180, 63,220,234,102, 20, 22, 35, 43,102, 54, 64,105,196,135, 24,145,178, 73,112,196,200,222,134,120, 77,100, 98, 59, 83, 61,148,
-117,198,175, 22,240,102, 11,168,207,189,101, 14,185,220, 99,167, 38,218,167,182,139,110, 16,161, 14,103,104, 78, 35, 69,203, 69,
-125, 32, 59,155,214,173, 78,184, 49, 83,178,148, 83,153,226, 96, 16, 17,181,240, 19,189, 11,160,167,125, 63, 73, 15,209,226,166,
-132,152,170,192,166, 34,160, 63,168, 66, 73,177,137, 97,107,147,207,154, 9, 98, 13,107,136,181, 68, 18, 80,199, 22, 33, 95, 12,
-146,181,192,132, 89,150,237,108, 76,242, 2,193, 36,121, 3,181, 57,104,241,153,112,129,223,171,200, 83,142,108,110, 46, 96,169,
- 19, 78,194, 42,187,129, 89,243,136, 17,183, 59,102,247, 37, 54, 35, 51,142, 10,165,202,220, 57,123, 98,240, 14,201, 34, 49, 14,
-240,141, 29,152,188,221,238, 92,133,146,108,151,182,185,247, 91,206,105,112, 81, 17,148,149,216,193, 15,174,137,171, 91,224, 48,
-170,142, 1,237,122, 20,155, 31, 98, 44,105, 90,136, 49,183,158,147, 21, 7,103,221,104, 5, 93, 13,108, 98,148,134,233, 20, 2,
-121,235, 8,203,135, 32, 26, 19,230,133, 14,160,132,210, 31,230,253,200,138,112,229,112, 9, 65, 79,252,187, 4,123, 28, 88, 15,
-118,111, 85, 64,209,146,112,234,212, 21,202,121,234,104,194,193,255,141,104, 76, 73,252,122, 63,128,184,223,186,248,204,116, 8,
-226, 40, 11,126,197, 8,101,213,243,230,101, 50,186,226,198, 91,123,109, 67,179,195,155, 85,231, 14,123, 16,181, 63, 89, 87, 7,
-108, 98,181, 66, 6,129, 77, 28,204,134,101, 29, 22, 63, 92, 79,158, 7,225,132, 50,207, 64, 24, 27,160, 71,211, 82, 68,189,218,
-193, 37,220, 30,209, 21, 48,209, 95,124,150,113, 31, 87,115, 60,184,121,218, 58, 4,165,207,232,197,219,245,250,222, 13, 44,100,
-197,153, 89,234,219,253, 82,213, 78,167, 66, 60,251,157,237,128, 52, 83,248,194,197,146,202, 60,131,161,120, 53, 27,158,253,112,
- 27,181,107, 52,121, 17, 89,193, 57,162,218, 10, 23,104, 7,219,127,166,217,153,245,165,179, 5,170,119, 35, 68, 0,131,229,235,
- 3,185, 80,114, 28,102,120,149, 76, 55,121, 46, 60,129, 77,186,127, 94,101,116, 90, 54,205, 49, 99,157, 7,125,175, 21,238, 69,
-195, 39, 91, 21,131, 25,133, 49,138, 84, 59, 93,119,247, 20,119, 84,244,246,187,204,103,221, 86,186, 45,154,201, 42,227,133,110,
- 45,208,189,187,108,170, 39, 68,111, 96, 99,138,181, 68,246,100,232,222, 74,215,197,172, 48, 39,239,165, 34,170, 32, 16,196, 46,
- 26,110,222, 89, 76, 96, 11, 69, 1,172, 97,153, 24, 42, 15,108, 27,179,218, 9,106,226,126,115, 58,113,199,129, 66,214, 64, 25,
- 80,202, 78,133,247,196, 13,198,138, 70,207,187, 9,155, 92, 96, 37, 74, 37,115, 56, 69,180,192,135,112,140,252,228, 91,197, 22,
-147,128, 27, 97,226, 12, 23,180,155, 68,119, 33,113,180, 57,192, 46, 86,185,180, 27, 98, 91,216, 71, 73, 72, 55,235,110,185,169,
- 68,172,174, 88,123, 47,232, 95,238,245,149, 76,151,139,150,176,105, 0, 52, 53,139, 71, 59,168,207,201, 27, 20,101, 59,249,166,
-205,112, 29,217,152,229, 37,242,145, 93, 92, 86, 2, 33,202,179,138,193,166, 24, 87, 68,224, 11,164, 72,169,223,181, 9,120, 98,
-166,133, 56,109,142,208, 14,157,213,219, 65,207,231,191, 30,166, 2, 92,247,194, 40,155, 6,113,156,182,231,148,170, 86,124,166,
- 14, 55, 46,248,221,165,144,147,204,144, 19,239, 17,222,118, 61, 11,104, 31,192,195,142, 97, 68,142, 10, 37,132, 41,144,218,105,
- 80,228,102,135,225,124,175, 39,226, 32,160,125,115, 45, 9,118,142,130,170,133,252, 44,140,205, 75, 23,208, 57, 94,159,216,172,
- 2,145,205,186,243,120,213,168,237, 97,118,168,136, 17,182,176,186, 42, 49,159,156, 98, 19,100,224,147, 48,166, 11, 10, 60,159,
- 32,194,156,128,197,143,125, 92, 76,142, 99,160,100,101, 92,109,116,205,236, 65,236,183,162,130,101,172, 18,235, 47,191, 85, 97,
- 27,179,176,233,166,163,100, 52,211, 1, 76,206,194,210, 53,208,108,122,101,252, 76, 95,234,186, 46,164, 64, 7,146,193,207,173,
-152,108,195,157, 82, 92,144,234,161, 35,129,140,150, 96,189, 66,158,123, 73, 7,248, 10, 44,115,127, 30, 75,241,106,115,144, 4,
-237,115,178, 98,102,118,139,227, 8,103,105, 63, 96,214,129,234,212,175, 71,221,137, 90,239, 70,245, 60, 24, 29, 59,218,157,159,
-249, 1,124, 82,219,106,157,107, 26,213,186, 35,162,134, 8, 41,216, 34,165, 59, 74, 77,145,111, 44,232,241,109,147,190,247,234,
- 72, 88, 44,178, 48,198,214, 70, 26, 82, 45,104, 72,215,110, 30, 7,143,134,199,222,205, 51, 96,194, 77,128, 57, 14, 24,157,218,
-167,180,200, 30,196, 90, 67, 8, 88,245, 96, 96,201,147,198,232, 16, 40, 52, 12,250, 52,220, 12,179,146,255,180,194, 55, 34,106,
-137,121,123,196,238, 86,255,252,145,187,177,217, 76,227,244, 51, 54,241,229,107,187,185,163, 62, 75,149, 8,222,176,106, 9, 32,
- 11,224, 54, 72,180, 54,239,204, 20, 83,205,136,183,109, 29,236, 34,120, 90,151,128,173,176,172, 54,207, 64,173, 50,240, 99,125,
-230, 40, 25,214,206,128,121, 53,205,108, 97,251,128,160,229, 45,102,235,128,184, 83,215,186, 25,118,111,240,173, 39,111,223, 72,
-178,229,224,204,207,172,126, 5,218,181, 85, 25,193, 27,171, 84,251,169, 94,252,103, 91, 50,211, 24,165,241, 56, 44, 89, 14, 8,
-180, 71,153, 32,189,147,242, 98, 99,205,158,137, 35,200, 99,163,155,232,176,143, 96, 86,112,120,120,189, 67, 81, 67, 76,199, 94,
-226,143,150, 98,255, 29, 7,218, 15, 61,215,193,127, 59,145,151, 16,252, 52,209, 12,250, 90,141,166, 70,106,195,105, 27,250,116,
-208,248,238, 91, 31,223, 68,155,155, 35,112,194,253,183,186,136, 52, 91, 75,171,118, 54,131,168,230, 80, 34, 67,147,246,170, 69,
-171,160,118,255,130,141,164, 42, 4,194,232,121, 46,156, 51, 70, 60,224, 5,114,107,222,176,171, 5, 14,173,193,212, 23, 56,117,
-135,128, 30, 82, 2, 73,163,113, 81, 57, 47, 33,232,100, 80,155,226,140, 86, 64,100, 87,113,184, 51,129,127,215, 99, 27, 57,111,
- 62, 20,138,119,139, 10, 70,226, 33,164,202,131,206,130, 87,193, 33, 97, 79, 99,128,191,176,183, 36,203, 74,236, 89,178,184,207,
-227,194,160,219, 70, 16,159, 76,156, 2,215,217,230,251,150,134, 38, 51,152,215, 36,197, 49,143,234,125,142,180, 58, 96,117,123,
- 60,180, 80,210,217,228,144, 17, 3, 10,173, 56, 20, 73,184, 74,174,178, 31, 11,244,178, 22,110,135, 80,239,252,252,124,180,185,
- 85, 60, 53,107,207, 53, 70, 98, 1,150, 98, 47, 72,217, 85,250, 93,208,213,212,236, 74,154, 74, 61, 19,216,104,253,120, 81, 60,
-241,152, 44,181, 44, 14, 79, 53,188,238, 90,172, 4,187,220,202,146, 18,213, 53,210,228,156, 79,129,136, 90,197,228, 42,243,192,
-186,139,110, 49, 67,208, 88, 29,228,188, 14,235, 89, 9,147,251, 90, 33,241, 26,139,137, 67,219,255, 59,223,185,248,208, 73,192,
- 59, 45, 2,250, 70,172,208,177,217,194,106, 44,191, 19,186,190, 85,146,107, 67, 36,208,187,227,106, 71,196,112,115, 14, 24,203,
-140, 74,206, 70, 65, 80, 22,187,143, 6, 36, 75, 37, 11,153,139,229,150,207,102, 71, 51,219,100,113, 71, 77,255,124, 38, 13, 37,
-210, 17, 75, 1,148,119,183, 2, 58,127, 99,210,253,105, 56,128, 68, 15, 56, 77, 20,218, 65, 72,186, 55,246,251, 69, 15,122, 93,
- 20, 72,102, 57,183,248,102,163, 71,178,119,101,120,149, 3,187,217, 42, 51,180,104, 91, 99,187, 44,162, 27,109,155,216,226, 45,
-142,252, 28, 98,178, 9,222, 20, 49,173, 42,112,142, 42, 93, 2,178, 95,156,165,206,105,222, 78, 54,150,131,121,129,128, 96,194,
-149,153,100, 45,214,129,198, 43, 98,226, 8,241,240, 16,244,102, 38,187, 81,129,195,121,205,214, 26,134, 89,101,234, 52,200, 42,
- 21, 70,198,124,170, 85, 25,109, 79,153, 97,115, 45, 48,195, 21,244,120, 19,148,196,170,198,110, 85,115,237,109, 42,125, 14,166,
-104, 57, 78,133,227,102,146,136, 28, 45,202, 14,142,170, 75, 32,105,168,120,110, 48,235,105,182, 3, 87,138,244, 13, 81,180, 68,
-183, 7,178, 0,142,212,168, 81, 86,209, 88,123, 91,124, 1, 81, 13,195,193,192,105,210,214, 22,219,201,133,105,237,119,180,205,
-189,199, 56,106,143,175, 45, 12,211,242,127, 75, 1,216, 67,251,203, 29, 99, 26,179,218,241,251,108,254,183,141,141,167, 28,141,
-164, 44,181,221,248,226,189, 29,162,166,142, 65,109,202,227,162,214, 40,163, 97, 44,191,179,244, 69,166, 58,184,133, 20,252, 98,
-201,103,130, 33, 17,232, 23,135,135, 62,216,180, 96,245,171,129, 55, 19,135,198, 96,112,142, 86,253,171,136,210,212,250,113,228,
-103,136,219, 42,192,101, 40,133, 5,141,141, 74, 24, 98, 53, 13, 3, 10,155,250,216,124, 75,168,244, 81, 4, 70,251,176, 38, 76,
- 77, 75,102, 91,235,184, 9, 70,131, 74,110,220,123,208,135,233, 88,138,219,134, 76, 4, 40,171,204,136, 16,150,141,191, 91, 5,
-168,133,253,209,152,160,203, 63, 42,154,130,228, 50, 10,128, 7, 1, 61,205,143, 43,133, 32,254, 50,108, 79,235,110,156,179, 12,
- 86,100,179,182, 0,238,118,213,195, 87,218, 56,231,143,190,251, 3,122,240,232, 62,125,246,229,231,232,229,231, 95,238,162,173,
-208,105,140, 92,110, 27, 71,120, 53,174,125, 96, 81,133, 55, 89,100,105,219,104,218,127, 91,156,166, 34, 34,113,198, 47,138, 44,
-166,115,240,199,211,154,172, 25, 21,157,171,138, 44,115,212,217, 63, 59, 63,148,246,223, 23,156,209, 80, 78,187,142,105, 28,206,
-235,249, 78, 15, 20,186, 16,215,209,113,240,106,249,124, 23,157, 2,201,173,190,254,247,105,134, 50,106, 32,129, 43,128,183,132,
-193, 49,178,211,185, 56,205, 14, 23, 34,240,139,147, 10,196, 48,218,201, 33,104,110, 87, 36, 79,213,179, 57,126, 85,132, 50,131,
- 30, 67,118, 2,202,245,145, 72, 56,212,245,228,157, 69, 23,166, 65,108,108, 63,164, 56,183,161,130, 42,125, 86,255,253,166, 23,
- 55,136, 73, 23,181,135,118,154, 96, 87,237,239,128, 90,103,248,250,185,191, 12, 31, 45,232,166,207,231, 42,136,155, 54,190, 71,
- 21,112,177,116,219,103,251,217, 6,203, 89, 54,224,121, 62, 31,212, 62, 27,131,241,112, 2,116, 72, 79,155,169, 31, 40, 97,203,
- 59,134, 37, 82, 49, 54,118,146,208,141,161,148,216, 36, 45,203,185, 16,167,168, 86,140, 48,213,112, 57,111, 59,184,242,151, 1,
-112,162,162, 0, 66,184, 69,130,176,139,123,154, 45, 93,105,227,190,215, 18, 74,103, 77,246, 26,112,173,104,103,187,117, 78,187,
- 3,237,115, 45,218,118, 53,113,174,141,150,134,133, 74, 43,136, 58, 54, 46, 3,150, 86, 83, 36,106,133,191, 17, 78, 4, 56,198,
-170,198, 78,254, 72, 83, 52, 11, 80, 19,142, 76,209,117,192,153, 93,181,244, 0, 48,185, 91,235,190,117, 84, 98,166, 12, 51, 39,
-136, 64, 37,137,128,156, 82, 74, 48,130,183,203,191,183,147, 95, 63,116, 4,112, 45,105, 54,219, 95,247,134, 99,150,172,179, 38,
-209, 89, 97,204,150,150,251,230, 96,171, 7,128,221,120, 88, 45, 96, 98,185,103,170, 69,134,182,192,160,205,176,178, 53,219, 11,
- 1,120,131,116,174,215, 31, 78,107,229,170,197,105, 0, 70,138,122,113,103, 79,242,234,159, 89,171, 8,142,167,209, 26,227,241,
-245, 58, 67, 88, 71,155,213, 41,112,198, 69,125, 76, 96,107,138,249,190, 64,101,105, 45,190,154, 83, 8, 86,217, 5, 53,188,235,
- 62,247, 69,161, 13,129, 88, 49, 67, 40, 28,185, 74,171,224, 14,165,151,217,188, 52,230, 64,186,192,152,133,147,102,240, 81,136,
-139, 68,209,166, 41, 85, 32,242, 23, 42,216, 74,217,143, 42, 32, 40, 68,236, 17,175, 2, 23, 80, 24,229, 99, 1,152, 49, 26,125,
- 17, 1, 50, 20, 72, 95,119, 43, 88, 39, 73, 59, 87,179,163, 61,139,182, 72, 85, 49, 61, 21, 23, 51, 89,199,201, 22,252, 2,236,
-125, 11,132,194,131,147,139,147, 84, 64,105,217,238, 78,104,131,206, 94,123,142, 63,188,123,159,126,255, 91,223,163,207,188,112,
- 68,219,227,171,244,222,221,167,244,244,209, 67,122, 66,199,203, 2,253,128,174, 95, 57,105,178, 38,122,241,185, 87,179,192, 21,
- 91,224, 19, 32,114,204, 63, 88,129,126,214,123,112,187,241, 62, 76,141,110,254,252,194, 0,232,146,208,201,168,107,102, 56,126,
-204,173, 35,126,175,160,229, 54, 0,227, 54, 75,159, 99,246,123, 30, 81,172,160,150,213,142,196, 14, 85, 21,122,240,208, 79,120,
- 10,171,155, 56,187, 62, 98,112, 69, 71, 13, 99,108,190,209,100,184, 1,227,153,245,195,137,204,251, 18,151, 95,106, 36, 1,114,
-140,200,236,152, 91, 29,198, 19,213,191, 56,123,190,246, 54,119,183,197, 85, 1,113,159,117,241,102,157,185,131,253,217,252, 7,
-106,147, 27,223,111,154, 8,165, 62,114,245,209, 89,181,231, 39,224,127, 90, 88,149, 14,227, 16, 61,192,197, 8,118, 30, 46, 42,
- 9, 84,113,191, 20,198, 33,208, 25,123,245,255, 86, 8,143,174, 63, 22,233,204, 46,202,179,176,152,162,162,192,112,193, 12,141,
-130,169,135,237, 80,184,124,159,182,155, 11, 56, 84, 54,219,166, 76,180,135,174, 77,213,251, 41,195, 8, 57,193,152,181,189, 55,
-204,250,213, 55,145, 94, 39,179,141, 35,216, 69,110,123,185,213,100,230,252, 41,103,157, 19,110, 42, 33, 9,183, 83,151,229, 92,
-155,147,163, 0, 88, 35,148,224, 97,189, 27,109,172, 80, 71, 90,203, 49, 34, 66, 99,182, 81, 38, 80,190,235, 34, 54,105,244,101,
- 81,160,201, 72,228,137,170,210,196, 62, 81, 81,135, 87,185,159, 16,150, 15,100, 8,224, 86,226,138, 50,152,193,172, 66,177,126,
-173,166,173,251, 98,177,189,104,215,165,168, 47,180,170, 7,212, 22, 61,247,124, 42,130,178,147,218,166, 77,175,210, 61, 80,164,
-159, 94, 99, 30,230,152, 83,235, 96,232,134,234, 98,161,102,101, 60, 56,128,212,172, 40,151,250, 3,213,238, 13, 93,249,139,158,
- 20,219,195, 68,203, 1,104,179,209, 64, 17,245,211,122,199, 85, 15, 35,227,186,232,195,172,243,116,214,216,213, 46,229,152, 59,
- 55,118, 89, 36,199,162,213,103,108,108, 94,216,241,179,219,175, 26,122,161,210,255,204, 22,152,246,243,203,116, 0, 46,137,156,
-168,231, 15,133,104,139,174, 86, 8,175, 97,221,200, 85,249,158,238,175, 61,241,120, 74, 21, 66, 23, 92, 89,117,122,176, 5, 76,
- 0, 31,242,140,132, 82, 92, 59, 82, 72, 82,218, 97, 84, 68, 90,133,115, 89, 37, 8,114, 18, 11,162,132,159, 1,148,151,132, 88,
- 5,103,209,146, 56, 7,225,121,135, 65,187, 37,223,136,138,118, 76, 65, 14,118, 62,180,229, 73,132, 65, 64, 84, 37, 94,147, 81,
- 85,125,231,221,155,116,239,238, 77,250,233,215, 63, 79,151, 15,143,220, 70, 38,160, 11, 24, 34, 32,142,145,136, 0,230,213,222,
-237,148,125,164,161,128, 47,254,249,159,237,206,233,112,123, 48, 68, 94,160,145,233, 20,197,229,254,249,202,119,191, 79,191,241,
-149,111,209, 79,189, 60,170,184,247,239,111, 59,204,228,231,126,230, 39,233,228,116,166,247,110, 63, 89,254,198,125,122,237,213,
- 79,199, 33, 4,186,120, 2, 42,115,239, 10,105,151,171,214,201, 67,112, 88,153,235,165,206, 33,202,117,220, 41, 52, 81, 38, 11,
-200,129, 8,101,154,180,171, 5,213,155, 19, 27, 49,204,170,142, 68, 57,232, 64,122,213,171, 17,178,118,176,242,246, 53,216,226,
- 50,220, 72,156,248,215, 67, 96, 96,173, 37, 12,255,193,160, 36, 11, 28,242,236, 13,241, 88, 88, 78,210, 76, 78, 40,114,123, 29,
-102, 14, 28,135,159,217,187,146,163, 57,177,172, 75,219,209,137, 44,198,242,183,127,236,119, 77,147,187, 81,146, 99, 74,195,152,
-156, 93,223,237,218, 83, 8, 50,167,120, 79, 49,230,161, 64,100,187,183,157, 64, 63,148,129, 45, 62, 38,211,207, 99,171, 89, 12,
- 70,233,179,231,196,249,255, 74,110,244, 51, 89,173,177,254, 84,107,200,109,156, 27,192,206, 81,209, 4, 76,214,142, 67, 85,216,
- 15, 33, 41,145, 70,165, 62, 90,219,163, 45, 82, 48, 1, 11, 32, 21,118,122,180, 80, 34,104,142,135,208,196,148,126,194, 32,192,
- 89, 39,158,141,185,129,139,104,109, 65,229,160, 78,217, 3,108, 31,124,127,101, 32, 68,171, 62, 7,171,206,121,102,224,158,219,
-177,139, 53, 46,210, 1, 25, 18, 57,225,222, 54,173,118,120,169, 49,211, 55, 53,169,222,144, 9,208,175,167,139, 34, 17,164, 49,
-230, 46,166,152, 95,254,217, 78, 30,222,193, 49,216, 94,110,204,105,164,104,153,136,102,249,218,238,252,124,252,206, 77,233,173,
-191, 50, 65,123,124, 86,123,204,114,227,109,143, 54, 81,185, 50,171,160,166,106,174,242,120,111,173, 77, 56, 30,198, 10,150,192,
-200, 7,174, 16,101,232,130,173,182,216,180, 22,118,107,151, 47,215,162,183, 34, 13,156, 50,113,132,213,244,246,220, 54,108, 41,
-214, 57, 49, 59,221,164, 84, 47,101,104, 87,157, 55,245,106,169,125,109, 89, 92,249, 8, 16,140,214,170,109,139, 70,187,134,211,
-120,189,211,225, 70,149,185, 83,136,253,140,219,223, 90,238,140, 21, 77,204,194,139, 70,142, 54, 32, 72,213,232,200,152,215, 3,
-198,181, 61,252,218, 14, 53, 92,112,164, 84, 69,170,157,219,255,192,239,111,213, 78,142,170, 77,235,163, 43,127, 35, 62, 88,220,
-170,215, 99, 34, 85,244,229,225,161,171, 54, 61,118, 95,170,112,230, 27,173, 15, 27, 76, 73,234,205,144,239,190, 10, 1, 76,244,
- 40, 76,250,179,217, 28,129, 0,141, 96,212,197,104,209,210,138,199,218,206, 52,215, 61,235, 28, 66,142, 25, 21,230,173, 57,188,
- 60,175, 95,121,227, 45,122,116,255, 67,186,241,204, 33,125,225,213,207, 83,221,205, 0, 77,162,149, 32,145, 29, 0,195, 78,150,
- 67,161, 43, 96,164, 75,182,137,126,249,187, 63,160, 47,127,229,247,233, 47,253,249, 95,162, 47,126,250,245,254,123, 8,232,132,
-103,203, 75,127,227,253, 15,151,207,254,140,238, 61,105, 59,230,121,191,175, 14, 14, 15,233,236,233, 35,223, 84,249,232,234,114,
- 95,109,137,155,111, 26, 71, 35,110,155, 19,140,106, 31,167, 78,163,233,245, 27, 85, 97, 45, 27,171,210, 9,218,224,176,185,123,
-220, 40,123, 49,228,163, 48, 75, 79, 3, 76,181,149,248, 3,208, 2, 40, 69, 81,220, 47,180,176,237,103, 20,123, 93,227,212,172,
-133, 77,141, 40, 84, 93, 27,204, 55,222,223, 74,157,252,218,186,250,189, 48, 4,243,136, 51, 57, 74,235, 18, 84, 76,155,139, 14,
- 86, 21,251,119,204,193, 1, 59,106,242,123,125,102, 84,236, 42, 51, 56,114, 88,237,190,118,113,102,181,137,233,132,161,141,252,
-166,200, 7, 16, 12, 52,240,240, 22, 24,221,152,168, 25,196,156,181, 74,238,188,250,193, 98,224, 95,253, 32,103,118, 78,137,145,
- 84,220, 10,213, 93, 52,101,142,232, 98, 1, 29,133,219,244,102,113,205, 65,215,173,149,209,111,110,227,152,241,251, 56, 43,248,
-181, 99,220,159,195,205,228, 35, 19, 70, 78, 86, 59, 14, 92, 62, 26,243,210,153,170,138,195, 8, 16,127, 48,219,211,126,196,228,
- 25,199,150,107, 29, 6, 49,207,173, 22, 16,191,173, 88,224,140, 61,105, 7,121, 12,245, 48, 85, 73, 39, 66,180,197, 69, 7,137,
-179,141,173,196,233,175,183,206,107,228, 11, 23,142, 89, 15,169, 65,223, 85,160,110, 70, 45,177,233, 19, 32, 65, 33,176,196,189,
-159,141,140, 38, 90,189,216,197, 60,159,129,100, 55,247,141,216, 33, 48,253, 96, 81, 59, 94,169, 87,158,237, 97,107,243, 57, 37,
-153,245,107,115, 48,245,141,104,249,255,168, 54, 65,217, 46, 46, 84,191,121,116,238,188, 59, 61,117,205,129, 50, 35,199, 72,164,
-135,120, 76, 99,179,154, 6,175,181, 85,219, 85, 55,174,186, 59, 83,161,142, 93, 87,139,105,229, 8, 60, 41,246, 15,193,226, 98,
-160, 4, 61,173, 91,160, 15, 79, 43,112, 77,240,186,199,233,172, 58, 21, 74,180,203,193,109,214,180, 44,154,178,209,248, 73, 91,
- 60,122,197, 16,160,142, 14, 18,217, 49,156,208, 75, 82, 51,183,107,215, 59, 3,184, 58,183,138,125,121,111,187, 86,234,159,231,
- 47, 69,207,188, 14,209,138,109,138, 18, 9, 77,190, 5, 9,199,166, 76,113,146, 30,225, 43, 8,122, 1, 11, 34,220,152,130, 22,
- 54, 4,184,184,200, 19, 68, 93,100, 81,180,106,163, 66, 84,220, 12, 17,127,194,121,134,156,161,251,208,159,164, 76,169, 35,140,
-248, 3,203, 18, 28, 74, 4,172,152,216, 98,136,184, 82, 9,176,141, 72,246,174,251, 53,139,225,183,227, 99, 49, 4, 1,116, 2,
-237,208,117,255,228,108,249, 12,207,233,228,228,156,158, 44,247,124, 99, 98,204,243, 89,160,119, 5, 48,202,169,235,193,222,174,
-229, 32,122, 56, 34,218,102,185,206, 70, 88,126,215,157,187,247,233,135, 31,220,167, 47,127,245,107,244,137, 23, 63, 65, 87, 14,
-142,104,103,213,246,114,216,188,255,240, 17,125,120,247, 30,157, 46,135,234,167,167,117,249,247,188, 28, 58,216, 91, 0, 71, 71,
- 91,186,118,165,208,195, 39, 15,188, 59,133, 38, 89, 46,152,189, 29,108,101,214,251,182, 63, 63,165,250,125, 53,153, 58, 94,171,
- 81, 82,104, 10,225,193, 81, 64,248,230,135,243,154,187, 50,246,236,168, 78,102,116,193,134,189,141, 53, 29,173,175, 39, 2,159,
-145, 91, 95,160,210,178,184,123,181,202,209, 84, 82, 92,107,215,179,216,253,111,105,118,211,228, 35, 51,139,114, 30, 21,106,245,
-159, 49,104,123, 3,154, 66, 38,214,221,205,250,220, 67,114,164,146,180, 88, 21,223,189,128,209,113, 89,108,190,147, 90, 22, 1,
- 38,196,209,209,236,163,134,174,131, 56, 24,240,180,190,215,108,212, 50, 75,222,133, 28,135,212, 24, 13,141, 91,121,183,220,123,
-162,232,104,118,141, 82,197,243,175,183,190, 85,219, 83,145,143, 18, 9,128,164,113,188,166,140, 21,229,244,219,189,218, 91,233,
- 10,183,177,192,153,222, 85,237,240,164, 93, 46,156,139, 70,177,110, 89, 11, 15,189,238,101, 51,244, 92, 37, 10,135, 98, 69, 30,
- 57, 32,116,144,237, 14,151,202,168,189,174,237,206,114,130, 13,241, 7, 98, 27, 81,130,228,148,162,209,180,213,142,179,114,118,
-158,183,171,106, 25, 3,227, 35, 85,201, 3,100,204,207, 57, 34,111,188, 45,236,243, 96, 83,214,234,188,213,173, 64,125, 22, 49,
-249,141, 27, 2,204, 26, 45,124,137,164, 27, 2, 6, 52, 46, 12,197, 4, 62, 48, 15, 76,192, 54,102, 7, 37,184,117,175,128,120,
- 79,171,226, 34,161,106, 30,170,201,177,217,207,189,170,175, 26,155, 91,124,222, 86,204,159, 59, 27,140,103,130, 36,165,226, 23,
-189, 9,194,236,212, 61,146,182,244,193,150,113,218,238,155,183,161, 24,107,133,133, 93,171,151, 25, 22,200,206,249,215,121,149,
-183,170,230,193, 70,174, 57,235,154, 45, 22, 16,150,252,138, 20, 41, 29, 13,244,223,127, 62, 78,240,197,170,117, 19, 69,237,140,
- 18,184, 27, 21,194,121,241, 69, 59,102,183, 69, 15, 22, 99, 65,154,207, 78, 52,164, 56, 80,155, 98,185,213,115, 84,231, 3,198,
-161,164, 37, 59,141,207,230, 53,146, 30,115, 88, 44,144,194, 35, 19,117, 35,104, 85,138, 2, 49,250,161,105,217,104, 92,101,110,
-178, 89,187,206,182,219,234, 61,100,164, 49,210, 3, 79, 60,229,106,142,145,108, 87,144, 36,250, 98, 7,223,244,159, 83,128, 82,
-230, 16,165, 1,175, 32,125, 14,168,194,143, 71,200, 17,136, 84, 7,134,185,181,172,107,154,155,122,151,134, 50,148, 40,183, 92,
- 81, 12, 10,130, 42, 9,181,113, 84, 80,171, 49,132,172,210, 18,253,224,146, 17,187, 22, 55,219,170,231, 15, 62,186, 69, 63,251,
-185, 23,232,163,247,111,210,131, 23, 63, 73,151,182,135, 73, 88,143,208,228,188,177,155,186,133,189, 51,181,215, 4,212,247,209,
-178, 6, 94,255,137, 87,232, 55,182, 91,250,254, 91,183,232, 55,127,247,203,244,239,253,234,175,210,118,187,245,142,217,246,112,
- 75,199, 71,135, 93,243, 51,151,203,116,249,198,229,174,118,111,207,225,253, 71,143,232,242,241,134, 46, 31, 93,163, 23,158,185,
- 66,167,187,121, 4, 16, 89,232, 20, 67, 88,201,100,201,140,145,130,230,109,100,155,123,176,137,174,170, 89,213,123,110,123,224,
-154, 37, 70, 16, 18,186,154, 94, 73,207,112,240,242, 3, 55,133,100, 91, 43, 43,111,239,238,106, 32,190,149, 41,111, 93, 41,194,
-113,136,173,143,186, 81,117,175,185,135,176,204, 33,190,235,207,177,196, 44, 92, 40,131,158, 28, 34, 36,174,141, 48,199, 77,255,
-152,206,231, 65,135,235,254,115, 79,192, 24, 99, 9,135,200, 89, 2, 92,245,234,213,215, 71,123, 45, 60, 69,118,187,225,165,203,
-100,102, 72,197, 75,247,132,113,149,173,196, 17,172,173,111, 93,147,177, 57,136,216,106, 27,187,213,243,241,123, 56,192, 94,182,
-134,214, 90,125, 12,218,181,183,108,204, 15, 1,222, 60,119, 9,144, 1,202, 68,157, 50, 82, 38, 87,218,139, 17, 36, 61,111, 61,
-238,243, 77,155,213,215,224,125,226,200,217, 68,185,226,136,117,138,252, 1, 93,230, 39,187, 53,140,247,209, 2, 93,186,232,172,
-221,101,219,104,197, 68,126, 3,206,162,162,161, 99, 98, 49,108, 85,152,125, 98, 50,218, 22, 6,127,152,176, 72,128, 91,174, 54,
-172,182, 40,119, 26, 79,139,140,219, 76, 97,177, 88, 62,204,205,118,163,237,237,240,127,247, 88,187,246,231, 27,173, 44,117,161,
-175,218, 30, 19,157,215,247,153,198,110, 14, 65, 11,136,112, 18,254,147,129, 1, 15, 97, 40, 2, 94,232, 68,106, 75,234,100,157,
- 25,139, 64, 10, 23,244,226, 10,156,234,168, 96, 76,210,216,107,119,115, 56, 6, 24, 98, 38,155,224,116, 51, 54,100,111,111,105,
-197,108, 94,237,190, 1, 79, 37,241,206,169,148, 32,178,205,122,208,153,200, 57,219,157, 96,165,179,109,177,214, 41, 7, 39, 32,
- 67, 67, 40,197,146,122,230,139,167, 56, 13,253,133,183, 17,101,234,155,120, 63,228,109, 88,253,253, 83,180,134,129, 89,221, 71,
- 16,172,120,197,141,162, 98,217,172, 53, 22,206,162, 27,174,135, 40, 88, 30,116, 50,161, 93,136, 85,113, 94,119,179,135,244,123,
-104,211, 81,149,163, 52, 25,124,103, 81, 4,170,156,157,199, 60,119,158, 65, 33,227, 68, 30,181, 7,114, 10,123,232, 99, 7,168,
- 92,215,130, 51,239,118,149, 96, 32,248,124,206,225,229,197,231,117,209, 9,128,205, 80, 56, 99, 97,215, 34, 73, 65,145, 28,231,
- 94,187,184,149, 53,172,115,110,196,162,188, 66,136,192,106, 17,202, 94, 23, 46, 66,167,152, 37,147,118,247,208, 54, 46,220,138,
-141,182,157,135,110, 45, 7,191,111,254,248,221,254,156,207,117, 89,120,166, 51,250,241,237,119,233,103, 63,249, 69,154,219, 8,
-170,224, 76, 31, 90,138,171,188,229, 84,125, 98,172,171,132, 88,246,241,242, 57,254,214, 31,124,107,249,185, 59, 58,223, 30,209,
-123,183,111,209,191,250,206,183,233, 75,159,123,189,127,214, 39,119,207,232,107, 63,124,159, 46, 45,139,252, 79,125,230, 53,186,
-245,248,140,206,151,103,226,225,201,174,199,156,190,242,220, 76,219,105,219, 95,231,221, 7, 15,233,219,111,127,141,126,237,151,
-127,145,118,187, 93, 42, 24,162,163, 34,221,126, 41, 18, 90, 36,158,224,254, 81,125,130,119, 10, 1,120, 21, 7, 37,179, 65,213,
-160, 23,182,255,218,110, 64, 72,184, 25,107,178,129, 75, 54,136,178, 86,125,202,134, 93, 64, 60,152, 15,232,184,128, 86,191,169,
-230,149,141, 80, 48,103, 1,117, 83, 53,130, 88,216, 34,165,205, 27, 13,107,178,181,104, 88,149,226,206,162,208,206, 71, 79, 95,
- 35, 61,156,247,106,127,163,157,221, 9,218,240,162,179,249, 25, 50, 5, 38,178,232,218,113,224, 28, 34,216, 1,101,137,159,103,
- 32, 27, 18, 74, 25,243, 35,253,113,130,116, 52,208,220,112,216, 59,197, 5,113,170, 95,105,159,231,172,220, 22, 29, 23,155,118,
- 99,234,251,226, 80,172,147,234,154, 38, 15,222, 34,167, 50, 50,174,125,160, 51, 25,157,154,170, 10,124, 56, 28,177,228, 80, 49,
- 24, 97,152,226,127, 68,234, 78,193, 75, 48, 14,131,173, 97,205,209,113, 68, 7,253, 67,139, 76, 91,118,129,195,120,191,163,221,
- 81, 21,142,192,133, 0,161,138,118,215, 16, 26,228,156,228, 16,118,152, 62,206,213,192, 50,218, 63,147,251,107, 85,154, 55,145,
- 43,107, 11,141,220,221, 38,156,153,218,108,139, 53, 33, 72,171,116,209, 74, 83, 40, 22, 95,131,216,244,217, 54,122, 82,167,178,
-242,181, 3, 20,159,115,114,156,189, 49, 1,148, 39, 65,136, 13,110,122,184, 8,135, 50, 80,237, 87, 54,223,169, 38, 18, 83,232,
- 1,147, 42,103,161,173, 87, 33, 92,102, 14,133, 45,149, 17, 0,145,144,118, 7,155,184,209,166, 2,209, 56,250,186, 54, 17,144,
- 51, 14, 5,182,248, 21,135, 43, 68,234, 28,120,124, 9,176,167, 62,179, 12,200,189, 11, 15, 1,176,226,126,219, 73,207,205,224,
-133,247,236,105, 27,227,180,191,189,131,142, 66,235, 68, 20,107, 59, 21, 39,152, 13,139,207,121,124, 22,221,182,144, 19,245,216,
-185,214,208,242, 21, 2,166,244,242,197,211,179,104,181,251,130, 53,167,182,161,117,170,135,128,101,216, 70, 34,116, 68,146,216,
-174,184, 0, 71,114,242, 95,228, 57,230,179, 56,120,151, 4,125,219, 66,222,158,116,119,150,138,153, 68, 5,154,172,228,187,216,
-176,217, 55,136,156, 11, 14,132, 70,204, 29,185, 8,159,158, 54,244,149,173, 13,243, 73, 97,214, 40, 92,124,134,138, 24, 97, 95,
-120, 96, 1, 77,100, 58, 11,141,105, 85,250, 31,126,135,238,221,187,189, 84,192, 87,232,214,253, 19,122,229,122,161,183, 63,184,
- 73, 63,245,169,207,247,175,135,214, 47, 31,100, 46, 46,219,215,252,251,152, 21,182,194,224,187, 63,120,143,190,254,189, 31, 46,
-143,200, 68,135,203,230,124,114,122, 68,191,247,213, 55,104, 62,188, 66,239,188,127,147,190,253,173, 63,238, 85,227, 65,211,177,
- 92,189,186,220,102, 79, 6,178,179,117, 44,151,127, 31, 31,110,232,185,171, 7,116,116, 88,250,185,121,226, 33,124,157,168,164,
-160, 25,166, 41, 98,159,196,228,146,106, 85,180,195, 95, 17, 21,191,101, 38, 64,118, 74, 68, 71,112, 56, 65, 86,135, 68, 1,155,
-149,193, 84,112, 46,111,154, 84,188, 71, 92, 36,183, 28,188, 55, 65,127,172,125, 62,140,118,223,162,186, 15, 73,193, 81,189,133,
-108,166,119,142,116, 52,117, 66, 83, 0, 15,199, 97, 96,214, 48,153,254,156,157,171, 78, 66, 9,109, 45, 93,206, 15,186, 22,215,
- 93,115,172, 45, 67, 11, 73,230,154,194, 83,109, 4,224,196, 70,195,210, 2,115,157, 11,206,185,129,250, 8,106,117, 54,203, 30,
- 65,119,197,198,156, 86,233, 74, 4,252,116,155,110,109, 26,176,169,183,211,125,223, 43,161,248, 39,173,200,221,169, 34,154,118,
- 88, 32, 81,206, 90, 56, 48,231,111, 26, 38,239, 70, 19,228, 90,216,111, 55, 8,143,105,151, 10,116, 3,221,111,175, 62,121, 42,
- 14,115,106, 26,178,205,209,225, 65, 16,177,116,161,243, 86,136,207,206, 52,221, 24,194, 1, 2,251, 26,146,162,204, 45, 22, 31,
-226, 27,148, 99, 0,109,204, 87, 27,145,141, 77, 36,229,191,203, 84,230,101,130, 88, 73,118,181,112, 59,217,181,170,188, 20,139,
-235, 27, 55,121,157,207,244,121,211, 19,148, 30, 16,122, 88,205,102, 26,143, 91,169,106, 81, 3,189,133,205,229, 64, 37, 14, 65,
- 77, 1,124, 41,146, 90, 87, 46,178,100, 64,152, 32,223,185, 70, 11, 51, 33,163,221, 89, 83, 72,253, 31,158,252,100,128, 19, 73,
-144,234, 18, 7, 46,240,228,242, 57, 8, 64, 82, 88, 73,137, 69,195, 14, 56,224,100,104,191, 84, 60,225, 14,194, 1,106,192,166,
-125,161, 46, 32, 54,177,170,221,176,182,230,209,133, 47, 11, 67, 48, 65,136, 30, 82, 56,201,176,219, 89,226,153,145,222, 56, 63,
-136,102,131, 10, 79,139, 10,245, 12,211, 73, 30,181,137, 94, 93,123, 80,121, 21,204, 34,156,161, 38, 9, 29, 88,199,120, 91, 42,
- 28,210,172,194,153, 37, 70,216,170, 75, 48, 63, 54, 97,230,115,202, 63,160,148, 80, 8, 59, 99,210,147,120, 58,164, 68, 38,117,
- 23, 61, 50,136, 68,169,128,109,146,131,104,149, 98,134, 1,211, 12,175,135,177,108, 41,185,155,144,242, 25,136,243,129, 99,149,
-195,200, 53,236,104, 72,147, 19,225, 92, 89, 19,250,233, 1,238, 83, 26,167, 82,232,205, 31,189, 69,103,203, 1,107,183, 59,161,
-151,158, 89, 42,232,101,161,124,252,116,215,219,150, 83,175, 70,227, 26,161,236, 38,151,232, 28,155, 2, 65,228, 40,100, 49,204,
-203,107,253,167,191,247,213,158, 57, 61,109, 14,233,210,229, 3,186,113,149,233,228,108, 75,175,191,246, 28,253,252, 39, 95,163,
-219,183,238,208, 31,125,245,219,244,250,167, 63,217, 23,196,179,179,230,251, 29, 12,135,163,163, 3, 58,220, 22,239, 26, 94,187,
-190,165,131,227,103,250,184, 70, 32,107,219,198, 69,134,231,196, 48,161,192, 86, 87,151,234, 71, 26, 36, 12, 48,146, 70, 72, 55,
- 9,154, 72, 46,224, 8, 68, 21, 95,160, 27, 36,233,150,246,204, 1,171,196,251,154,190, 13,102,187,229, 64,202,198,163,107,172,
-207, 62, 43,142,182,168,247,185,109, 16, 27, 50,232,142,174,179,179,254, 12,116,137,216, 26,143,208,160,173, 40,128,198,158, 11,
- 88, 15, 75,140, 44,195,196,141,102, 12,129,209, 86, 8, 33, 61, 85,210, 14,202,150, 25,161,196, 59,107, 61,187,211,161, 14,140,
-234,102, 19,252,125, 17,107,101, 27,100,166,166,104,100,214,206, 86,223,107,106, 8,229, 90,101, 60,169,171,200, 80,159,253, 83,
-153,106,210, 87, 84, 27, 37,251,236, 34, 63, 75, 24,206, 20,122, 28,208, 35, 72, 80, 44, 59,147, 67,233,123,126,159,108, 71,183,
-164, 20,128, 51,225,122, 59,143,207,110,115,216, 68, 85,170, 72,236, 10,100, 71, 7,110,180,163, 50,102,127, 2,129, 45, 6, 39,
- 72,249,232,107,164,178,245, 12, 10, 98, 45, 1,185, 41,209,138, 86, 3, 65, 90, 0,135,130, 95,227, 55,139, 9, 50, 70, 42,141,
-121, 4, 43,156, 88,219, 33, 96, 94, 30,206,214, 2,238,215, 90, 41,110, 62,175,228, 33,196, 34,159,215,227, 56, 64, 23, 10, 72,
- 1,243,182,222,154, 35, 15,145,152,200,229, 78, 50, 26,152, 23,227, 92, 19, 3,109, 82,255, 50,183, 8,130,162, 91, 32,219,109,
- 99, 31,174,184,237,100,140, 13, 74,138, 7, 76,124,122, 70,149,110,141, 87, 48, 83,138,214, 53,149,182,119, 94,173,162,173, 88,
- 81,216, 15, 85,110, 53, 69, 53,235, 63,171,178,223, 11,182,138, 49,108,111,129, 11, 78,204, 19, 40, 74,128, 55,143,183, 75,213,
-211, 80,209, 42, 91, 8,114,233,115, 20, 45,163, 7, 27,175,179, 67, 36,114,148, 41,115,216,199,250,129,165,192,156,124, 66,113,
-219,228,135, 39,143,203,129,234, 28,176,136,144, 31,128, 85, 3,173,130,115,200,241,155, 25, 9,203, 24, 7,231,184, 87,143,214,
- 69, 97, 39,182, 67, 86,254,117,127,239, 37, 73, 99, 41, 69,189,153,121, 93,194,111,142, 93, 42,123,110,216,193, 23,148,159, 27,
- 14,125, 10,102,122, 71,223,125,252,174, 54,134,185,122,237, 42,201,187, 13,110,197,244,240,241, 19,186,241,153,151,232,207,253,
-252, 47,209,225,178,241,246, 69,201,188,186, 16,201, 27, 33, 53,226, 97, 50, 24,116,192,148, 67, 78,108,177,108, 13,176,227,227,
-163,190, 41, 63,122,242,100, 57, 68, 92,163,237,114,112,248,254, 59,119,233,120,121,207,191,246,103,126,137,174, 28, 29,210, 59,
-239,126, 72,187,238,212,168,116,208,184, 11,219, 33,154, 58, 62,222,210,245,203, 91,186,251,224, 81, 95, 7, 63,251,153, 47,118,
-224, 17,179,100, 26,159, 80,178,136, 82, 21,176, 61, 81, 84,242, 80, 0, 5,221, 17, 97, 52, 42, 30,131,141, 92, 4,249, 8,236,
- 0,149,208, 59,196, 51, 44,208, 73, 26,215,127,194, 25,106,232, 97,132,246, 52, 22, 3, 8,212, 90,202,115,204,241,237,176,162,
-127, 97, 66, 32, 12,122,244, 41, 51, 2, 4,194, 41,152,113, 17, 98,183,225,246,223, 58, 75,192,224,177,243, 9,228, 60,174,179,
- 67,103, 12,110,132, 26, 28,223,112, 45,207, 67,140, 72, 55,197, 72,168,138,187, 5, 74, 23,212, 42, 78,182,195,105,118, 29,120,
- 69,232,184,232, 33, 43,163, 96,153, 13, 61,107,156,119,162, 76,114,172,213,125,235,254, 89,149, 26,107, 82,217, 0,117, 20,174,
-139,197,228, 18,176,222, 33,108,202,115, 71,166,226, 32, 41,129, 80, 34,149, 17, 5, 48, 72,196,105,117,166, 11,235,131,141,225,
-111,110,149,227,236,137, 81,235,132,202, 88, 3, 4, 68, 69,235, 89, 23,114,170,101,197, 90, 6,133,135,228,162, 0, 23, 14,100,
- 85, 91,152, 72,155, 95, 68, 97, 20, 23,213,163, 10, 85,233,189,217,140,157,175,232, 44,222, 42,234,162,127,110,118,142, 68, 70,
-162, 21,190,234,130,224,150,245,130,232,109,105, 70, 1, 15,165, 15,126,237,253, 36, 20,244,113,141,192, 24, 46,233, 1,142,247,
- 77,171, 64,146, 24, 59,186,184,184, 80, 10,131, 89, 53, 89,221,153,224,170,103,136,125, 18,180,198,164, 87, 41,126,179, 5,125,
- 75, 82, 88, 8,148,153,177,137,173, 69, 89, 38, 80, 44, 37,243, 8,216,188,200,236, 22,184,240,145,203,170,209,106,220,129,105,
-117, 47,141,147, 56, 94,120,161,149,101,139,202,126,155,153, 71, 43,148, 28,169,201,144, 44,136,253,106,198,160, 55, 56, 48,112,
-218,168, 83,228, 55, 83,138, 29,101, 87,107,115,114, 9,248, 98,186, 98, 6,224,189,226,140,113,134,128, 7,230, 85,212,235,234,
- 64,152,176,173, 24, 45, 91, 86,213, 56, 6, 47,149,189,153,185, 35,147,129,180,199,246,121,121,117, 17,115,135, 78, 19, 92,254,
-123, 55,199,130,153,175,213,152,155, 30,180,176,168,229,189, 92, 57, 46,116,233,112,162, 39, 75,149,126,165,168, 82, 89, 83,221,
- 41,209,224,132, 34,210,239,227,201,143,129, 84, 30, 23,163,121,132,255,244,159,252,105,122,251,189,155,116,190, 59,163,167, 39,
-103,116,239,254, 29,250,212,167, 63, 65,191,246,171,127,146,166, 89,186,231,252,213,151,159,163,127,244,219,191, 79,223,253,227,
- 55,151,253,122,219,215,192,170,222,223,214,154,111,122,158,102, 38,121,255,163, 91,244,242,107,167,116,163,137, 82, 61,222, 82,
-160, 75,192,233,144,147,194,114,148, 23,129,157, 35,118, 96,192,228,238,139,136,186,194, 46,104,133,150,254,224, 77,120, 36,167,
-141,213,116,158, 91,224,232,204,144, 95,128,248,208, 2,109,124,194, 97,157,216,207,139, 64, 16,251,185,236,162, 48, 1,209,164,
- 10,211,102, 32,116,166,181, 58, 14,126, 30, 25,203,226,235,111, 20, 70, 27,104,149,177, 23, 17, 93, 87,216, 5,117,147, 59, 2,
-156,196, 88,103,255, 61, 13, 63, 61,180, 84,243,176, 72, 11,132, 5, 89,204,173, 61, 99, 42,122,235, 22,184, 70,200,107,227,220,
- 57,248, 28,189,243,160,220,140,150, 26,216,174,247,220, 17,193,209, 57,116, 34,160, 35,244,213, 81, 35,176,145,171,240, 88,212,
- 33,228, 69,143,146, 0,251, 65, 78,161, 50,158, 70,216,127,247,148, 70, 46,125,164,220, 88,250,158,132,168, 72,111, 11,181, 41,
- 88, 36, 26,109,148, 92,143,182,105,213,176, 88,232, 91, 35,126, 89,171,173,228,212, 38,198,185, 33, 72,148, 24,100,242, 12,130,
- 25, 89, 39, 61,137,228,255, 70,134, 54,164,224, 32, 76,222,209,176,158,138, 19,179,137,128,225, 75, 58,221,246,159,181,153, 52,
-189,198,252,139, 74,135,179,205, 1, 55,229, 10, 24, 66,255, 29, 81,153,134,149,167, 4,150,211, 39,187, 65, 3,203, 85, 60,167,
-215,197, 80, 73, 91,200, 38,167,141, 97, 74,126, 87,193,106, 30, 14, 81,146, 84,122,236,225, 46,209, 32,200, 66,139, 88, 96,166,
-177,199,109,217,197, 40, 93,164, 56, 75, 22,246,217,255, 20, 22,195,235,245, 51, 41,187, 37,192, 11, 50, 90,213,101, 98, 72,232,
-163,148, 17, 62,238,105, 72,123,227, 8,121,113, 8,132, 85, 57,144, 91,108,209,165,126, 93,156,243, 30, 85, 83,133,211,190,243,
-169, 10,167,144, 11,194, 32, 33, 10,106, 84, 59, 81, 67,142,164, 90,141, 48,114,116,117, 79, 50,186, 49,139, 7, 32, 48,160, 90,
-153,147,248, 59,179,228,241,192,192,209,122,231,124, 42,212,235, 83,124,195,231, 2, 63,191,128, 85, 19,132,114, 41,170,104, 21,
-165, 75,123,163,105, 94, 85, 17,112,174,225,240,155,167, 12,116,137, 64, 24,238,203,197,134,190,252,205, 55,232,143,190,241,109,
-250,235,255,225, 95,164,131,237, 54,249,238, 77,140,122,178,220,111,239,127,248, 81, 23, 71, 29, 29,108,163, 90,169, 21,153,102,
- 49, 70, 88, 85, 11, 54,158,193,131,130, 29, 52,108,211, 44,250,194,219, 2,253,226,115,215,135, 85,106,249,249, 87,142, 46,245,
-236,129,207,125,242,165,222, 49,104,230,221, 63,248,206, 15,233,255,250,251,191,222,223,203,195,167, 79,251,125,114,222, 29, 36,
- 99,106,126,120, 48,209, 7,183,159,210,147,147, 71,180, 93,190,127,115,112, 56, 44,163, 18,247,167,152, 21,211, 79,126,197,109,
- 81,158, 98,214, 19,192, 74, 26,199, 48,163, 92, 49,187, 5,170, 4,192, 36,180, 60, 18, 57, 7,162,148, 68,175,180, 75,172,139,
-216,157,178,150, 55,214,211, 18, 97, 79, 62,147, 7, 93,164, 15,118, 56, 16,172,109, 67,159, 61, 57, 15, 99, 83,107,136,194, 10,
-228,128, 72, 20, 14, 86,168,209, 84,210,198,204, 30,251,103,159,247, 52, 26, 11,222, 41,154,180, 99, 12,237,119,107, 83, 79,197,
-197,186,243,185,246,165,107,228,200,207,234, 20, 26, 90, 29, 76, 60,176,188,119, 72, 24,212,215, 37, 69, 29, 83,154, 67, 51,243,
- 46,136,113,214,225,132, 69, 77,160, 88,237,228, 77,129,220,232,254,217,110, 32, 38,215,158,171,141,231,168,236, 9,107,189, 51,
- 82,161, 72,198, 8,103, 73,188,151, 36,178,163, 72,148,116,114,228,212,216,239,151,182, 16,235,168,254,238, 18, 11, 2,122, 91,
-177, 3,150,162,224, 32, 29, 44,165, 59,225,106, 80,115,139, 57, 40, 84,217,139,186, 95,112,174,242,202,185,164, 4,172,230, 85,
-236,108,102,142, 83, 25,151,152, 1, 58,243,106,154,116, 46,203,148,131, 87, 25, 32, 22,153,229, 29,213,181,248,141, 79,158,179,
- 44,206, 12,142, 69,172,236, 45,142,184,169, 8,122,255, 19,238, 44, 73, 66, 86, 0, 4,109, 3, 27, 31, 25,155,213,130, 49,183,
- 2,150, 20, 1,107, 70,220, 67,226,209,149,218,162,218,176, 43,189,147,190, 64,109,120,216, 2, 38,104,181,251,189, 2,158,206,
- 33,204,179,138, 0,125,198,197, 49,159, 3, 31,201,190,183,142, 81,128,242, 38,231,213,189,110,173,236,170,122, 3,193,249,109,
-168,228,187, 87, 95, 83,208, 24, 75,215, 2,225, 41,148, 19,188, 74,129,143,198,168,105,149,148, 26,168, 36, 48,155,100,155, 54,
- 1,102,135,140,175,177, 96,119,131,210,166, 35,171, 10, 61,116, 6,178, 18,121,173,133, 97,156,178,203,211,156,157,163, 2, 71,
-138, 20, 69,239,103,173,136, 3, 1,201,106,108,142, 51,248, 11,254,238, 58,203,156, 48, 16,166,105, 49,183, 7,244,187, 95,255,
- 38,253,163,223,252,109,250,143,254,237, 63, 71,175,188,240, 44,237,118,115, 2, 71,117, 87,213,246,144, 78, 58,100,105,184, 28,
-166,102, 35,218, 28,211,241,229,203,189,114,241, 72, 98,195, 32,251, 34, 37,217,238,233,138,101, 94,141,218,195, 58,214, 50, 7,
-218,181,105,175, 99,163, 52,198,195,163, 45, 93, 61,190,212, 43,192,179,229,251, 62,186,117,151,142,143, 46,211,221, 71, 15,233,
-188,249,229, 39,246,174,217,249,249, 41,221,186,247,152, 62,253,210, 21,186,117,231, 41, 93,191, 52,209,213, 75,135,206,115,199,
-231, 56,150, 58, 24, 1, 72,248,170,237,144, 34,122,111,176,113,225,105,245,253, 41,232, 69, 18,168, 75, 4,226,110,144, 27,142,
-235,139, 85,207,192, 80, 55, 60,106, 98, 35, 8,174,233,218,149,128,240,120, 1, 72,140,221,223, 19, 67,243,221, 70,116, 12, 7,
-126, 14,113,237,164,133, 71, 21,164, 31,230,238, 69,216,134,178,246,152,112,243,197, 88,233, 42,105, 13,142, 24,106,134, 74, 94,
-203,172, 13, 67, 80, 18,173,248, 10, 49,106,171,112, 72,225,148, 3, 98,215,178,236, 63, 66, 90,213,216, 20, 36,144,211,197, 15,
- 41, 22, 35, 28,106, 95,120, 50, 57, 8,150,226,149, 59,167,107, 48, 90,238,112,109, 74,113, 96, 81,116,135, 25,128, 86, 74,255,
- 51,241,224, 60, 14, 89,155,131,229,134,101, 69,114,218,120, 81,128,195,142, 11,153,143,192, 41, 46, 56,167,180,163,180,107,133,
-168, 4, 54,103,236,192,123, 38, 45, 37,119,193,222,134,207,117,109, 25, 11, 59, 79,179, 30,100, 91, 4,124, 66,105, 22,153,219,
-150, 72,176,195,251, 10, 71,254, 81,105,147,179,228,227, 27,196,133, 97, 65,233, 2,174,121, 58, 16,172,129, 29,217, 78, 23,179,
- 51,137, 69,115, 45, 99, 22, 73,129, 53,178,130,151,250, 76,220,130,112, 64,254,204,251, 71, 49,215, 1,136,134,244,164, 86,107,
-133, 74,159, 17, 89,154,129, 32, 22, 19, 74,235, 25, 50,230,121,176,122,123, 45, 37, 28, 74,210,177, 9, 22,200,181,166,156,199,
- 13,162, 40,255,112, 74,136,178,200, 55,115, 74, 46, 4, 79,116,194,207, 65,160, 34,182,202, 90,130,158, 71,147, 68,136,137,199,
-177, 98, 27, 57,230,231, 69,192,249, 81,140,109,158,189,214,248, 58, 96, 5, 76, 85,104,114, 85,240,158, 49, 59,121,103, 35, 99,
- 30, 28, 10, 22,226, 2, 63, 91,128,156, 72,208,250,151, 85, 38, 93, 86,113, 11, 70,186,164,174, 12, 87, 19,111,170, 75, 64,181,
- 50,125, 94,125,114, 74, 15, 31, 62,162,103,158,187,209, 29, 52,109,147,175,141, 0,132,224,142,166, 26,239,208,160,221,178,201,
-110,251, 66,117,176,149, 14,131, 57, 56, 56, 94, 54,223, 51,165, 23, 78,125,238,205,216,239,147, 81, 41, 86, 32,157,121, 39,145,
- 66,104,137, 78,128, 39,103, 59,122,225,249,107,244,169, 87,158,165,239,190,249, 22, 93,123,254, 89, 58, 62,216,208,243, 47,191,
-216,245, 5,219,229, 96,241,137, 79,188, 74, 63,248,222,143,123,152,203, 75,207,222,160,119,111,126, 68, 87, 47, 95,233,240,166,
-118,232,104,163,130, 22,216,116,227,234, 49,189,240,236, 49, 29, 29, 40,160,100,171,150, 50,145,125, 24, 13,231,249,126, 42, 10,
-236,178,111, 38, 90,137,104,162, 88,240, 3, 0,134,235,160,223,122, 95,156, 41,144, 61,158,152, 1, 74,251,155, 76, 36, 9, 42,
-113,255, 58,100,150, 39,241, 30,246,212,145, 97, 95, 97,131, 76,217, 28,217, 17, 97, 94,252, 84, 4, 36,241,100, 78,249,139,177,
- 29, 92,181, 26,150, 63,114, 20,108, 77,137,160,130,246, 70, 2,176,142, 5,195, 24,137,207,191, 49,114, 43,250,112,161, 3,113,
- 74, 32,188, 19,170, 57, 10, 8,139,205,245, 66,178, 26, 15, 68,237,182,221,245,117,224,152,228, 16,184, 79,241,249,136, 2,100,
-124, 14, 94, 2, 42, 67,145,226,102,201,140,163, 43,167,139,149,222,251,246,220, 69,236,107,220,131,174,166,217,140,107,185,217,
- 40,127,217,241,146,102,173,160,216,196, 4, 78, 67,102,160, 31,149,106,156,218, 43,177,111, 40, 88,206,176, 64,219, 46, 9,228,
-100, 88,186,112,143, 78, 85, 2, 12, 53,167,236,197, 77, 27,190,182,220,112,142,239, 25,198,148, 23, 55, 81,206,184,181,192,100,
- 37,204,185, 80,184,133,191, 47,169,133, 56, 81,135,252, 6, 47,241,158,243,184,154,247,186,158,209, 37,143, 7, 31, 35, 87, 81,
-196, 29,142, 35,241,170,108,120,173,245,187, 39, 74,115, 49, 74, 62,204,172, 23, 91, 93,236,189,246,139, 72,228, 80,227,169, 61,
- 17,204,128,227, 28, 35,214,139,218,164,208, 66,134,185,115,126, 93, 5, 40,130, 5,145, 78,233, 40,226,194,180,245, 44, 25, 30,
-184,124,138,150,172,203, 68, 79,170, 11,196,152,100,125, 25, 38, 21,126, 50,128, 78,224, 96, 89, 60, 87, 57,116,109, 92,240, 48,
-138, 51,237,212,157, 3, 90, 32,125,204,198,158, 91,234,138,101,132,118,127,129, 67,100, 86,165,239, 93, 19,131, 12,121,181, 64,
- 25, 14,191,234, 72,229, 13, 73,239,245, 42, 62,199,245,241,161, 76,125, 67,252,232,163, 59,244,149,111,124,135,118,231, 39,244,
-119,126,227,159,208,127,241, 87,254, 10, 53, 55, 77,133,141,174,109,214,231, 29,193, 42,116,116,116, 68,135,203,223,187,122,101,
- 67,207,220, 56, 30, 29,181,205,166,179, 45,110, 63, 62,161,175,252,206, 87,232,236,228,132, 46, 31,115, 7,133, 20,222,210, 79,
-254,228, 79,208, 75,207,189,170,140, 6, 35,104,133, 21, 41,116, 21,227,195,255, 31,255,167,191, 77,167, 15,110,210,151, 62,243,
- 12,125,238,250,203,116,243, 81,155,225, 47,135,136,235, 55,134,125,118,249,157,143, 31, 63,166, 39, 39, 79,232,209,227, 39,125,
- 30,123,122,118, 70,151,142, 43,157,205,205,159,222,102,175,115,247,184, 55, 27,211,233,217,121, 99,105, 83,221,218, 60,189, 0,
-118,148, 46, 16, 31,178, 87, 80,251, 51, 15, 73,129, 58,123,154, 97,130,144,161, 10,179,251, 42,105,207,138, 74, 95,214,136,132,
- 8, 0,170, 48, 42,176,233, 97, 9, 61, 17, 23,116,123,168,211, 3,152,237,232,224, 73, 74,110, 33,112,115,112, 20, 54,190,118,
- 98, 38, 8, 70, 19,199,152, 2, 93, 77, 73,111, 99,139,207, 36, 14,176, 26,238,130,170,226,191,245,104,137,178, 72, 24, 45,153,
-150, 52,105, 5, 12,224,186,187,197,176,148, 28, 71,156, 56,199, 18,157,162,222,246,159,156,120, 71, 26,114, 54,174,225,228, 56,
- 71, 63,138,114,232, 84, 24, 58,181,214,125,138, 52, 60, 96,200, 23, 88,227,182,155,212,224,181, 60,123, 19,235,142,251,166, 36,
-194, 36,219,237,223,153, 30,109, 92,116,249, 88, 63,255,234,191,108,220, 71,145,186, 37, 38,152,232,102,255, 2, 16, 14, 73,217,
- 15,201, 10, 3, 87,154, 87, 82,231, 96, 40,203,234, 52,149,208, 82,116,193, 23, 64, 93,137, 8, 18, 75,122,209,165,112, 35, 97,
- 55,129,170,103,101, 34,206, 39, 98,168, 74,243,141, 8,108, 13,108,101,113,201,162, 32,180, 77,225,205,135,162,126,194, 77, 73,
-168,174, 4, 97,123,237, 79,206,117,246, 90,210,150,212,180, 43,129, 89,254, 57,251, 67,213,184,161,243, 67,130,149, 71, 14, 46,
-225, 11,132,132,177,161,114, 30,164,130, 88, 46,220, 15, 54, 30,192,121, 19,242,244,169, 68, 75,154,247,126, 31,118, 68, 46,178,
- 44,175, 43,209,168, 0, 4, 26, 30,204,185, 42,101,160, 17,230, 81, 18,118,124, 99, 97,140,177, 14, 37,255,186,117, 21,156, 39,
-173,177,160,113,125,178, 82, 30,145,156,184,235, 99,104, 75,238, 62,112, 18,204, 9, 4,187,100, 60, 44,224,117, 77, 45,108, 1,
- 29, 40,185,196,159,143,173,223,245,136,104,138, 57,143,148,184,178,199,151, 46,209,183,126,240, 99,186,125,255, 1, 93, 61,222,
-208,111,127,229,107,244,133,207,127,145,254,210,191,249, 43,116,170,132,195,174,124,111,155,250, 82,209, 63, 93,254,145,101, 67,
-223,220, 56,164,103,174, 31,211,213,171,215,250, 97,189,208, 24,139,189,123,235, 1,125,229,107,111,244,205,246,112, 90,170,250,
-237, 33, 93, 58,186, 74,127,248,198,215,232,191,250,171,255,217, 82, 73, 95, 94,214, 32,142,195,117,178,110,142,195,142, 97, 65,
-231,229,251, 62,184,243,184,183,226, 15, 54,135,157, 44,184, 93, 14, 27, 54,126,107,243,253,247,111,222,161,243,221, 57,157,207,
- 13, 19,123, 70,135, 7, 79,151, 53,111,162,121,219,236, 75,215,233,164,121,173,151,247,121,255,254, 99, 58, 95,254,235, 64, 3,
-132,136,215,189,175,188,113,249,216, 5,115,211, 9,238, 33,230, 36,248, 12, 72, 9, 0,127,192,142, 74,192, 69, 24, 32, 20,180,
-196,161,224,117,213, 1, 3,245, 59, 70,217,114, 9,164, 49, 79,200,111, 80,250,156,243,233,199,215,125,100,231, 25,241, 4, 58,
- 0, 87,190,186,107,132,189, 93,159,215,190,128,125,149, 20,167,141, 93,190,174,254,233,148,204,241,179,230, 58, 59,208, 39, 85,
- 66, 28, 20,208, 21,168, 2,196,102, 99,220, 87, 77,165, 46,162,246, 81,235,218,149,248, 60,121,101,115,205,153,183,227,186,111,
- 4, 36, 11,188, 23,112, 19,219,136,236,187, 65, 96, 99, 55, 23,140,172,195,167,112,221,179,120,227,137, 19, 92,136, 16,117,171,
- 51, 94, 86,164, 97, 47,240,106,209,177,216,114,122,174,202,220,245, 77,182,253,112,203,146,213,212,156, 2, 50,126,194,205, 88,
- 55,118, 63, 85,130, 26,154, 86,202, 79,187, 57, 25,169, 74,190,241,174,163, 32,101,159, 1, 9,232, 87,161,117, 76,229, 42,236,
-161,100,140,228, 5, 14,220, 11, 4, 2, 65, 95, 66,203,154,141, 0,226, 33,202,179,204,164, 94,229,204, 23, 73,107,179, 88,196,
-102, 77,226,123, 75,227,161,148,104,151, 61,240,130, 41, 95, 66, 23,144, 69,120, 79,244,228, 15, 23,103, 88, 80,222,248,179, 80,
- 34, 41,178,215,115, 75, 36, 29,113,248, 98, 25, 98,114,163,197, 70, 1,174, 48, 61,186,134, 45,112,132, 6,248,169, 61, 40,127,
- 5,246, 39,190,224,144,178,122, 8,215,221,150,189,235,144, 65, 56,180,106,107,198,161,136,247, 24, 12, 97,215,241,142, 89, 64,
- 87,176, 53, 95, 64,240, 86,120, 37, 42,229, 61, 85,125, 58,128,128, 96, 52,157, 20, 64,201,171,153,199,112,240,129,209,145, 69,
- 62,150, 8, 99, 33,212,196,164, 0,154, 53,227, 29, 14,121, 85,194, 14, 39,240,140, 34,124, 7,180, 18,255,231,175,255, 54,125,
-243,205,183,232,223,248,229, 95,162, 47,255,254,239,209,175,253,185, 95,165,167,205, 38,212, 68,170,208, 38,110,237,247,134, 99,
- 61,106, 65, 41,167,203, 6,122,178,108,164,103, 76,215,158,127,161,199, 1,183,161,251,188,252,206, 7,247, 31,209,213,235, 87,
-168, 44,127,118,126,250,164,127, 4, 31,222,191, 79, 39,239,190,223,231,241,215, 91,204,239, 92,233, 99,112, 58,253,127,103,173,
-245,184,221, 46, 27, 53,211, 71,247, 78,232,218,229, 67,122,249,229,103,250, 90,215,130,147,166,163,229,103,222,186, 75,111,124,
-239, 71,116,184,124,223,211,211,167,116,178, 28, 54, 78,150,215,117,118,184,115, 78,208,157, 7, 39,116,120, 99,162, 23,159,189,
- 68,119,239, 61,160,221,242,123, 15, 1, 53,157,198, 44, 4,118, 64,194,209, 83,242,206,164,153,178,211, 42, 9, 68, 96,230,132,
- 41, 81,245, 72, 66,109, 71,144, 12,227,207,149,168,137,145,164,198,176,169, 91,224, 8,175,239,183,110,255,146, 20,195,235, 0,
- 48,200,200,136,183,189,158,159,234,186, 52,203, 30, 58, 56,141,229, 36, 54,241,243, 10,158,119,137, 14,224,211,243, 74,143,158,
-158,210,157,187,119, 59,162,247,236,108,166, 79,191,250, 34, 93, 62, 58,238,206, 10,134,103,149, 61,107, 60, 51, 71, 72,225, 47,
-253,253,106, 36,170,239, 91, 28,233,135,209, 13,133, 80, 40,134,199, 33,217,153, 74, 36, 43, 82, 78, 68,244,233, 59,163,104, 60,
-132,172,178,130, 49, 17, 38, 28,162,208,220, 53, 62,230,246,217,132, 14,170, 74, 2, 20, 57,115,223,186, 24,144,104, 58,216,251,
-203,193,185, 7,199,151, 26, 62, 64,109,177,119, 2,158, 84, 61, 53,109,148, 20, 86, 29, 17,104,220,118,145,125,129, 7,115,168,
-158,189,213, 94, 87, 26, 23,145,149,133, 67, 86, 12,105, 94, 29,155,246,245,115,148,245,141,224,139,190,232,161,202,178,160,212,
- 19,197,153, 63,174,191, 96,169,233,130, 73,201, 15,111,138,201,196,223,197,107, 97,136,164,155,129, 61,155, 20,200, 91,186, 88,
- 39, 48, 5, 90,190,246,150, 48,185, 96, 14,123, 65,229,207,235,249, 41,239, 31, 8,240,107, 56, 91,114, 12, 39,192, 69, 66,241,
-149, 97, 60, 40, 20,147,240, 40,251,254,196, 1,136,112, 40,142, 41,237,173,165, 44,233, 68,179,103,109,219, 19,149, 17,121, 56,
-205,138,146, 0,198, 29, 89,221, 23, 89,148,147, 90,153,156,118,187, 16, 54,231, 51,139,183,197, 25, 59, 42,133, 86,243,114, 74,
-254,245,100,109, 43, 23,139, 66, 93,241,127,209,215,172,181,155,170,132,226, 29, 40, 39, 6, 50,142,168, 2,252,131,152,204, 92,
- 91,150,252,252,170, 75,129,208, 85,130, 10,106,125, 29, 63,245, 51,175,211,175,252,202,191, 70,255,245,127,247, 63, 44,155,224,
- 83,218, 30,108,232,147,159,124,141,206,219,235, 59, 56,240,247,208,168,100, 47, 93, 62,166,127,255,223,250,211,244,183,254,206,
-175, 47, 63,238,104, 89,164,183,244,220,179,207, 82,105,182,164,121,100, 4, 60,126,252,132,238, 63,124, 28,136,232,165,202,190,
-255,232, 9,157, 61, 58,163, 31,254,224, 77,122,229,213, 87,104, 87,207,114, 68, 44,229,231,174, 21,177,175,127,230, 51,244,120,
-249, 57,151, 55,143,233,250,229, 3, 58,218,110,232,225, 82,137,223,187,117,139, 94,186,113,131,222,125,231, 61,122,252,224, 81,
- 31, 31,180,181,237,252,108, 57,100,236,198, 61,114,114,118, 70,219,165,178,159, 20,201,252,194,141,171, 29, 21,122,126,190,139,
-197,148,178,125,209,169,140,123,204,122,254,248, 3,247,158, 90,177, 36,219,104, 95, 35,231, 44, 78,203,234, 24,184, 71,121,125,
-244,133, 1,158, 51,242,167, 56,200,165,130,105, 60,143,130,172,134,240,189, 42, 39, 93, 67, 89, 86,175, 56,158, 54,233,106,117,
-150, 53, 46, 57, 20,231, 70,157,107,122,135, 55,223,187,219,175,215, 15,222,248, 22, 61,121,252,152, 46, 93,185, 68,175,125,242,
-117,186,118,253,153,126,128,250,250,215,191, 69, 55,174, 93,161,205,114,111, 60,184,255, 17,253,236, 79,254, 44, 93,189,114,217,
- 53, 94,123,191, 3,131,184,236,149,119,132,182,138,255,118,179,207,190, 69, 5,133,102, 83, 21, 11,153,177, 54, 61,142, 56, 75,
- 30, 53, 50, 35,232, 9,246, 40,198, 17, 23,175,216, 20,112,168,134, 4, 70,147,105, 23, 27,119,115,234, 29,170, 86,201, 14, 67,
- 74,223,244, 16, 44,141,182,158,113,164, 42,169, 96,216,116,197,157,132,141, 74, 48,202,209,243,121,165,191,113,203,178, 53,226,
-143,101,200,250, 12, 70, 66, 24,199,201, 90, 37,144,127,204,185, 29,141, 85, 63,158, 46,161,253,233,170,243,181, 66, 23,239,176,
-204, 85,196,181,121,111, 1,200, 37, 81,190, 97,237,212,205, 48,156, 21, 4, 94, 0, 74,145,214,179, 32,145, 11, 54, 30,156, 85,
-102, 69,177,251, 74,177,149,147,102,200, 23,139, 81,210,169, 6,111,244,245,104,130, 17,134, 2,116, 50,156,121,163, 38, 46,253,
-130,139, 4, 94, 43,111,123,194,162,174, 14, 18, 28, 80, 30, 20,123,249,140,120, 37, 2,163, 36, 77, 88,189, 14,193, 81,130,100,
- 77, 0,231, 86,168,111, 89,137, 31,190,158,230, 72, 38,231, 17,222,119,171,200,133,212,165, 30,200, 41,155,207, 49, 58, 20,172,
-115, 33,227,160,194, 5, 20,241,160, 35,240, 84, 37,194, 25,233, 74,175,137, 26,201,117,135,162, 40, 19, 94, 99, 8,121,239,192,
-150,143,128, 94, 21,196,137, 43,117,127, 66, 33, 80, 97, 46,134,151, 29,208,166, 20,106,214,159,251,233, 47,208,223,254,187,255,
-144,254,248,205, 31,209,181,107,215,233, 83,159,253, 36,253,249, 95,249,147,244,228,201, 73, 60, 43,170,238, 61,217,157,209,147,
-147, 19,154,207, 79,250, 38,249,195,119,238,211,215,191,241, 77,250,210, 47,124,137, 46, 93, 58,162, 55,223,250,136,222,251,224,
-118,247,148,183,153,252,211, 93,123,173,203,102,123,222,218,226, 91,250,198, 55,190, 79,127,234, 95,255, 37, 79,202, 66, 86, 56,
-126,190,187,221,192, 10, 31, 45,213,221,243,151,153, 94, 89, 42,237, 7, 39,231,116,122, 86,233,225,221, 91,203, 70,254, 39,232,
-100, 30,126,229,115, 13, 27,106, 85,248,209,246,160,131,103,234,201, 89,255,251,151,143, 11,221,184,188,165, 75,203,107,249,196,
- 82,233,207, 2,179,110,180, 45, 18,239,165,220,237, 47, 78, 31,211, 89, 48,221,155,128, 8, 84,106,210, 52,240,218, 67,233, 31,
-193, 74,147, 98,141, 33, 89, 73,182, 57,223, 76,107,143,186,113, 38, 47, 28,105, 9,239,235, 59, 88, 86,221, 46, 7, 43,144,192,
-186,234,233,132,192, 64,108, 26,157,135,143,207,251, 40,228,176, 81, 76,203,180,220, 23, 68,135, 75,193,248,242,203, 47,245,238,
-202,193,242,204, 92,187,124,212,231,206, 47, 61,115,153, 30, 45,155,254,233,217, 35,186,177,189,209, 63,219, 52,171,222, 91,103,
-139,191,190,222, 16,213,246,123, 71,213, 54, 78,123,251,220,139,120,122,220,208, 44, 84, 13, 95,177,162, 66, 32, 69, 46, 23, 19,
-226,241,167,160,125,146,154, 14,255, 76,107, 32, 19,132,149,185,144,129,163,155, 71, 53, 20, 62,189, 96,218,168,177, 37, 92, 19,
- 61,208,166,237,183, 83,129,110, 89, 25,179,119, 13,232, 34,245,203,219,222,188,233,164, 29, 41,238,201, 19,192,224, 57,233,136,
-200, 19,187,252,141, 64, 42, 15,129,213, 34, 61,112, 48,183,244, 83, 37,175, 64, 45, 64,255, 17, 20, 42,172,187,226,107, 85,233,
-133, 93,122, 89,121,182,121,175, 37, 36,180, 2,227, 92, 36,102,185, 64,124, 36, 31,103,243, 77, 2,139,253, 83,186,249,104,241,
-239,239, 65,109, 86,214,166, 14,112, 44, 23,205,140, 87, 64, 26,190,160,106, 95,145,174,210, 92, 29, 42,224, 20,191,153, 42,116,
-206,197, 6,211,254, 41,116, 53, 17, 89,255, 31, 22, 46,131,149, 63,110,234,156, 32, 49, 89, 20,199, 56,211, 79, 53,119,180,201,
-246,230,205,208,230,242, 88, 85, 80, 35,239, 93, 71,145, 11, 23,217,189,247, 2,113,149, 93, 20,163,204,124,127, 13,181,174,218,
-106, 80,153, 23,172,166,246, 11, 52,198,110, 68,244,245,193,162, 5,108, 8,107,199, 50,237,181,222,153,120,111,146,132,108,104,
-180,190,237,155, 74, 57,102,162,254,172, 18, 28,208,135,210, 63,128, 52,177,152,183,168,219,223,252,231,255,138, 62,243,169,215,
-232,222,253, 71, 46, 60,141, 67,203,178, 72, 31,110,233,159,254,139, 63,160,255,245,127,251,135,180, 59,125,180, 84,200, 31,210,
-183,191,119,159,142, 55, 91,250,214,183,191, 71,207,189,248, 18,253,181,191,254, 87,233,254,237,179,190,206, 28, 77, 59,250,224,
-230, 93,186,118,233,128,206,150, 69,248,153, 99,162,211,221, 17,125,243,251,239,210,173, 91,183,233,165, 23,158,239,162,216,205,
-102,202,221, 20, 26, 54,220,135, 79, 79,123,149,254,206,123, 55,233,149,207, 95, 27, 98,243,165, 74,251,224,214,125,250,231,191,
-251,135,116,253,133, 87,122, 54,250,189,187, 15,123,245,119,116,112,188, 84,133,188, 28, 28,218,120,224,136,110,221,125, 76,219,
-165,194,251,228,139, 87,232,241,227,167,203,159,109, 70,186,111, 17, 21,227,194,145,136,193,222,151, 78, 99,124,225,140,118,204,
-113, 37,171,183,245,128,230, 76,111,154, 84, 48, 30,247, 88,133, 78, 38, 11,238,183, 0,209, 18,200,152, 65,225,146,127,230, 97,
- 9, 53,127,123,192,105,100,101,114, 17,239,180, 9, 0,138,195,127,207,153,215,101, 35,213,181,255, 90,114,151,173,189,143,211,
-211, 93,191,158, 79,159, 60,162,227,131,102,129, 19,122,245,213, 87,251,143, 56,121,186, 92,239,205,142,182,205,205,180, 92,167,
-143,238, 60, 92,238,131, 13,189,243,225, 45,122,225,229, 79,140, 88,217,202,123,197,148,192, 6, 28, 93, 77, 81,242,169, 70,193,
-182, 13,114,170, 35,254,118, 86, 28,119, 49,145, 72,245,107,196,101,117, 32,242, 53,199,114,203, 1,143,110,182,105,231,230,239,
-195,175, 10,146, 69,221, 66, 87,192, 66, 39,121,124,227,200,104, 6,235,116, 27,201,204, 90,185,215, 1,170,209,200,236,113,109,
- 27,135,126,110,243, 37,125,140, 91,251,189,148,176, 32,184,168, 72, 79, 48, 18, 81,155,142,140,148,162,255, 22, 63,145,161,237,
-129, 96,118,129,169, 86,148, 48,147,242,113,187, 50, 0, 29, 86,253, 79,145,252,181,228, 26,145,124, 64, 16,222,171,202, 86,172,
-167,213,146, 64,121,161, 71, 49, 6,190,248, 84, 77,149,120, 79,178,170,126,214, 89,208, 23,156, 10, 98, 67,149,213,226,204,123,
- 62, 99, 78,135, 11, 89,105, 2, 56, 55, 64,120, 29,179,201,161,228, 70,218, 31,243,133, 34,189, 4,122,161,181, 40,145,215, 44,
-150,220, 50, 68, 31,245,218,107,127, 81,222,247,202, 14,152, 94, 22,229,175,103, 35,193, 42, 17,239,130,230,250,218, 3,203,232,
-211, 18,120, 19,188, 30, 89,192,207,157,214,155, 47,231,206, 70, 41,116, 17,235,101,128,199, 56, 9,128,208,122, 39,101, 85,141,
- 51,103,187, 32,173, 52, 19,112,237,214,228, 58, 59,176, 73, 66,152,114,160,154, 85, 16, 36, 31, 99,109,140,131,206,190,124,129,
-221,191, 76,123,182,169,246,245, 75, 71, 71,244, 23,255,194,175,208, 27, 63,120,155,190,255,131,119,130,233,173, 64,140,150,106,
-246,245,111,126,159,158,185,118,131,206, 78,151, 74,120,222,209,217,249, 57, 29, 94,190, 78,175, 62,243, 44,157, 46, 11,236, 31,
-253,225, 31, 47,139,208, 33, 61,121,122, 78,187, 58,104,115,141, 61,241,240,124, 71,207, 95,191, 76, 7,103,103,116,239,209, 73,
-111,147, 31, 44,213,201, 31,124,227,123,244, 7,191,255,213,222, 62,223,148, 56,176,212,166, 74, 94,126,255, 59,239,188, 67,151,
- 14,132,222,190,117, 66, 31,221, 63,237,231,174, 15,110, 61,165, 55,127,244, 17,253,248,157,191, 77,207, 63,115,157,238, 61,188,
- 79,207, 92, 30,179,255,166,188,111,182,186, 71,143, 43, 29,110,199, 12,246,230,237, 71,244,232,201, 25,125,255,237, 59,116,124,
-184,252,201,243,167, 52, 29, 61,204,214, 38,184,150, 5, 2,172,220, 61, 4,109,150,205,178, 0,183, 14,196,224,106, 84,255,252,
-170, 38,247,225, 51, 61,218,199,243,114,157,118,189,186,109, 99,136,102,245,107,255,110,154,148, 2, 10, 27, 90,169,223, 5,102,
-233,168,196, 17,141,117, 13,113,184, 64, 97,150,115, 4,218,225,104,222,205, 25,167,236,247,197, 20,250, 68, 60,106,123,100,175,
-170,223,209,105,162, 7,209,147,179,153, 30, 61,122,210, 43,238, 7,247,239,211,135, 31, 45,215,246,248, 18, 29, 28, 93,166,155,
- 31,221, 94,238,143, 29,221,187,253,126, 23, 47,182, 24,216, 23,111, 28, 47,215,108, 75,223,252,222, 15,233,231,127,238,103,187,
-107,161,106,145, 41,176, 30, 59, 2,156,247,105,148,100,116, 58,245,179,142,247, 84, 65,233,175,127, 95, 56,131,189, 4, 85, 82,
- 53,158, 28, 31,145,226,186, 86, 18, 56, 41, 82, 41, 75,230,204,120,224,151,228,142,167,107,217,184,119, 14,170, 58,180,200,215,
- 5,204,116, 80,164,122,211, 37,180,132, 76,220, 3,171,113,241,107,139, 30, 46,251,162, 49, 77, 27, 26,179,136,178,170, 86, 37,
- 11,183,214,149, 43, 35,223, 56,111,202,185,112, 22,128,162,200, 69, 78,234,253,160,228, 11, 36,224, 97,247,146,253, 3, 65, 10,
- 78,160,189,214, 62,158,122,121, 15,252,144,173, 73,251,164,174,143, 17,108,173,121, 5,184,203, 8,237,109, 34,178,178, 0,174,
-187, 11, 49, 10,224,253,217, 58, 95,100,241,160,139, 21,233,171, 86, 45,113, 10, 13,202, 55,234,202,105,176, 71, 97, 16,218,183,
- 46,238, 79,245,179, 85, 11,103,144, 12,115, 68,248,190,194,171, 41, 41,239,201,247, 32,204, 35, 14, 10,124,225, 97, 47,119, 89,
-156, 90,152, 28, 0, 31,231, 62,224,253,195, 21, 95,132, 0,134,153, 60,206, 54,253,253, 2,113,110,223,148,176,122,103, 57,198,
-213, 91,114, 94,145,192, 72,136, 51,161, 78, 56,247,242,121,221,106, 73,201, 3, 53,183, 87,211, 9, 46,206,219,109,163,170,253,
-182, 41, 23,240, 39,184,111, 52,151, 47, 31,211,139, 47, 60, 67,255,238,191,243,103,233,191,252, 27,255, 61,253,229,255,224, 47,
-208,171, 47,191,208,103,208,109,113,223, 76, 27,250, 51,191,248, 51, 52, 63,253, 58,189,247,222, 41, 61, 42, 91,122,112,242,148,
- 78, 78,239,209, 92,183,116,233,242, 17, 29,109, 15,233,238,195,167,203, 34,127,115, 89,216, 79,187,152,238, 96, 91,122,182,249,
- 59, 55, 79,233,149,103,142,232,120,217,192,191,241,199, 63,162, 79,124,226,101,250,202,215,190, 75,127,247,239,255, 22, 61,247,
-236,141,158,194, 38,189,237, 62, 47, 7,130,121,249, 89, 19, 93,185,116,212, 63,231,247, 62,122,208,127,198,118,185,254, 79,151,
-159,217, 84,248,111,191,125,107,249,231,131,206,245,254,254,242,239,134,184,237, 29,203, 22,209,187,124,223,225,193,209,178,241,
-236,232,203, 95, 63,233,223,255,245, 55, 63,234, 26,197,233,215,191,213, 55,148,131,178,113, 75,210, 78, 31,209,243,211,167,244,
- 83,175,127,113,249,189, 87,150,141,248,140,182, 7, 91,122,239,157,183,233,206,189,187,253, 51,105,170,249,205,242,103,207, 61,
-119,195,243,178,219,120,160,181,160,107, 29, 9,147,117,174,190, 62, 22, 93,143,219, 34,221,174,113,179, 1, 54,142,253,193,193,
- 65, 63, 28, 88,140,245, 84, 70,199,162,253,249,209,209, 97,199,218, 54,194,223,164,246,222, 30,165,218,190,103,249, 59,135, 71,
-203,247, 28, 28,182,156,237,158, 41,191, 81,127,244, 65,107,131, 55, 45, 66, 67,231,206, 99,246,124,247,206, 61,122,249,149,151,
- 50, 0, 75, 52, 19, 28,153, 27,222, 61, 50, 5,189,249,180, 55,201, 91, 55,124,225, 68, 31,125,116,159,238,222,190,219,175,227,
- 7, 55,111,210,219, 55, 63,162,207,125,250,117,186,123,247, 65,191,110, 13, 2,244,227,183,111,246,123,230,210,242,126,238, 60,
- 60,165,203,243,134,158, 44,135,171,183,222,125,159, 62,255,185,207, 82,237, 0,163,200,128,247,241, 18,199,243,141, 46,130,116,
-104,175, 54, 94,154, 52, 9,145,226,251, 58, 53, 78, 71,202,202, 93,119, 75,155, 89,233,192,182, 43,156,164, 55, 99, 93, 17, 48,
-132, 22, 14,237, 17,174, 21,133,129,239, 34, 9,169, 27,217, 40, 22,118,165, 90,161, 26,123, 84,252,255,117,100, 1,224,118, 85,
- 12,167, 54,181,140,246,141,147,112,198, 7, 87,221,143, 46, 51,108,118, 53,250, 60, 9,235, 8,115, 85,155,199, 23, 20,112,240,
-190,175, 48,237,180,146, 33, 33, 73, 85, 41, 31, 51, 15, 93,109, 31, 57,201, 7, 78,178, 34,251,149,242,218,254,192, 89,201, 41,
-178, 47,192, 73, 89,207,120, 22,244,238, 27,239,149,136,123,254, 71, 22, 40, 62,121,127,110, 6,106,117,111, 79, 95,208,149,200,
-109,115,216,232, 80,100,101,155, 87, 89,205, 86, 87,251,181,251,156, 45,125, 15,132,116,188,231,204, 99,204,155, 80, 33, 95,201,
-109, 95,145, 61,251,153,248,189, 81,192,178,177,190, 39,246,161, 29, 12,247,134,164, 22,117,113,182,179,232, 61,187, 47,144,231,
-236,157,167,152,139,229, 72,199,117,139,156,211,161,149, 25,233,116,208,214,118,198,245,190,237, 48,125,214,240, 32, 95,164,133,
-240,177,146,185, 68,164,238, 5, 5,165,131, 16,175,157, 9,188,234,184,200,197,214,198,212, 49, 42,217,175,135, 47, 78, 91,130,
-187,185,137,198, 78,123,117,121,231,238, 61, 50, 74,188,125, 26, 13,183,122,251,206, 93,250,157,127,245,255,209, 47,255,226,207,
-210, 51,215,175,210,147,147, 83,250,218,183,191, 71,207, 46,155,237,102, 89, 20,143, 14, 14,250,235,252,210,207,127,129,190,254,
-181, 55,169,158, 61, 71,245,228, 46,157,237,174,208,116,112,101,217,244, 30, 44, 21,248, 67,186,255,160, 45,234,203, 90,179, 59,
-165,159,255,252,179,244,198,219, 19,221, 91,254,172,109,106,103,203,207,220, 46,149,220,235,203,134,248,255,252,131,223,164,223,
-248,245,127,186,108,186, 39,244,236,149,131,101,179,222, 45, 27,212, 65,143, 74,125,240,240,241, 96,203, 47,255,253,232,201,152,
-197,183,138,103,211, 66,158, 58, 46, 86,150,247,115,222, 25,239,219,101,115,107, 11,252,233,178,209,119,147,110,203,187,104, 1,
- 30,210,254,217,116,204, 39,107,219,187,129,111,120,249, 59, 77, 81,223,214,249,147,147,221,114,128, 24,185, 13,237,107, 39,109,
- 6, 95,207,150,205,242,168,255,189,210,137,120, 76, 79, 78,155,183,253,168,199,145,158, 44, 39,163,233, 76,232,221,247,111,211,
-229, 43, 87,232,234,242, 79,131,217,220,189,115,191,191,134,218,187, 5, 67,208,184,217, 76,254,145,180,247,178, 59,111,213,237,
-211,190,233,155, 0,172,106, 62,248,166,104,178,166, 87,149,181,135,211,152, 0,203,221, 86, 45,173,172,141,150,151, 13,125,179,
- 28,150,218,161,163, 93,179,135, 15, 31,210,127,242,159,254,199,244,197, 47,124,142,222,191,121,151,254,241,255,253, 79,232,241,
-227, 71,116,255,254, 29,250, 27,255,237,127, 3, 17,172, 21,170,121, 93,159,214,114, 30, 94,187,152,212,141,164, 29,181,179,229,
-125,124,123, 57,148,189,255,254,251,203,189,114,157,222,253,224,102,183, 56, 62, 88,222,219, 76, 55, 71,103, 96,249,219,143,158,
-158,117, 61, 67,187,194, 45,193,111,179, 61,167, 43, 71,155,229, 16,120,218,121, 7,197, 28, 89, 37,235, 94, 92,151, 27,210, 88,
- 15,223,233,175, 93, 59, 86, 99,238,108,161, 77,250,117, 27,137,136, 50,246, 77, 91,102,143,138, 68, 76,180,172, 54,105, 70,247,
-136, 9, 96, 11, 88, 21,106, 46,232,132, 32, 49,206, 50, 68,234, 10, 60,100,154,137,186, 31,176,148,118,165,214,134,151, 10, 26,
- 19, 29, 63, 76, 77, 40,183,124,200,137, 23, 44,150, 67,137,137, 61,181,203,237, 92, 87,153, 20, 11, 80,201,172,171,154,117,165,
- 74,208, 34, 94,111,172,169,165, 27,185,238,235, 18, 34,227,252, 64, 24,183, 54,172,185,106, 23, 83,193,194,174, 33,235, 48,151,
-213,108, 94,146,141,135,147,227,110,127,182, 13,158,227,149,223,248, 99,148, 0, 32, 4,148, 80,142, 75,158,217,237, 85,226, 96,
- 77,227, 85, 89,184,167,188, 93,133, 95, 4,225,117,149, 65,173, 55,136,199,190,238,217,244, 50,111,158,147, 18, 61, 35, 70,243,
- 6,107,167, 85,216,212, 36,195, 22, 62, 6, 74,158,213,232, 43, 41,185,181,170, 99, 46,159,146,111,232,116, 89, 64, 90,165,103,
-139, 73,155,209,209, 90,184,185,246,131, 67,134,242, 58,147,128, 10, 37,150,187,251,251,203,170, 29,143, 39,117,230, 61, 43,229,
- 69,214, 13, 94,145, 3,246,187, 25, 89,117,139, 78, 4,111,126, 10,175,102,230,146, 15,187,208,201,216, 27, 82,168,160, 20, 59,
- 87,173, 29,125,231,254, 35,250,155,255,243,255, 65,255,249, 95,251,203,244,247,254,214,255,190,108,214, 63,232,173,210,221,242,
-166, 47, 31, 30,209,233,201, 19,186,189,108,200, 87,150,251,230, 55,255,241,239,208, 63,251,173,223, 91,254,123,166,127,240,247,
-126,131,254,223,127,240, 79,232,213,215, 94,161, 87, 94,126,126,100,119, 47,191,224, 95,254,139,175, 44,155,212, 97,159,111, 95,
-186,124,173,231, 70,157,158,159,208, 82,123,210,195, 71, 79,250,230,215, 42,204,155,183, 31,244,248,137, 6,168,105,214,179,246,
-247, 63,186,243,136, 14,249, 50, 93, 62,216,208,135, 31,222,166,179,179,167, 42, 32,162,190,193,182,234,244,188,169,214, 15,134,
- 93,106, 55,139, 46,138,181,131,101,158, 46,255,180,205,177,173,105,143,207, 39, 58, 95, 42,241, 67,174, 75, 53,184,237,155,163,
- 28,110,250,207, 41,203,230,187, 45, 35, 16,166,119, 64,151,159,115,186, 28,108, 58,163, 99,158, 59,215,190, 89,174, 78,207,199,
-120,237,228,228,100, 57,136,156,121, 87,161,211,224,101,180,203,219,106,222,243,177,150,205,170, 5,142,156,215, 29, 93,127,230,
- 89,122,237,211,159,163,199, 79, 78,233, 51,159,188,188, 44,188, 51,125,231,251,143,250,220,255,242,241, 97,255,252, 90,181,221,
-236,117,237,230,106,213,116,107, 73, 47, 63, 97, 84,215,205,243,191,124,243, 89,175, 86, 75,215, 43,180, 67,192, 80,239,239,150,
-235,119,176, 84,255,203, 65, 98, 87,251,161,170,232, 33,245,124,217, 8,251,251,224, 97,119,122,248,240,108, 57, 88,237,186,197,
-239,215,127,235, 95, 44,159,237,247,151, 10,250, 14,221,126,239,195,254, 26,127,250,139,159,161,183,126,240, 38, 61,247,242,171,
-253, 48,113,245,218, 53, 79,194, 76,150,185,181, 72,151, 8,194,146,116,251,151,113,208, 57, 91,222,243,251, 31,126,216,221, 83,
-143,159, 60, 93,106,201,218,175,117, 27,167,180,247,217,174,101,235, 8, 93, 59,100,122,225,153, 75,253,176,118,239,209,233,242,
-218,199,181,158, 45,184,107,226, 68, 28, 68,129,238, 74,222,170,139,221,172, 85, 48, 3, 34, 91, 34, 32, 78,224, 33,239,223,176,
-113,141, 64, 28, 98,167,213, 26, 6,207,207,116,129, 6, 18,132,169,130, 57, 84, 28,137,160, 6, 14, 72,118, 90,152,177,167, 2,
-213,197, 45, 88,163, 26, 63,160,197, 3, 87, 71,239,218, 62,180, 41,135, 91,207,146,238, 21,131,190,233,145, 89,171,148, 46,225,
-228,205,147, 85,197, 45,123,120,189, 85,197, 69, 23,204,100, 1, 92, 18, 21,241,199, 88,147, 68, 82, 7,223, 46,119,145,180, 5,
- 96, 49,188,226, 7,160,144,143,181,242,200, 29, 1,150,248,122, 84, 80,235,145,188, 16, 75,110,197, 59,124,136,202, 5, 44, 99,
-242, 13, 91, 96,110,153,196,196,118, 83, 10, 42,147,247,197, 93,152,187,194,107, 67,251,234,180,193,144,109,110,176, 21,113,255,
- 50, 68, 39,154,110,128, 24, 80,182, 14,102, 79, 94,107,230, 61, 5, 76,106,116, 72, 98,244,243, 5,240, 24, 74, 52,187,189, 46,
-198, 42,115, 56,251,227, 25, 36, 13,156, 5,193, 72,209,108, 1, 29,203, 2,242,220,141,109, 87, 74, 63,188,127, 74, 55,174, 77,
-125,145,203,116, 97,206,116, 1,150, 4, 75,221,239, 6,201,190,173,238,130,176, 22, 12, 55,194,201, 5, 95,116,162, 91,109,194,
-128, 2, 10, 1, 91, 66,189,194,134,254, 49, 80, 32,204,235,202,115,160, 60, 58, 65, 85,174, 84, 76, 80,148,174, 78,126,235,199,
-239,209,195, 7,103,244,191,252,205,191,183,108, 22, 87,232, 11,127,226, 23,186,101,237,244,108,238,145, 39,143, 78,238,211,195,
-119,222,161, 47,188,244, 9,122,251,253,155, 75,245,117,141, 14, 46,189,178, 84,149, 66,239,221,190, 69, 63,124,231,193,178,169,
-125,111,217, 24, 43,221,184,113,131,222,250,224, 33,125,234,149,163,101, 3,175,116,237, 90,237, 30,241,246, 65,180, 42,253, 59,
-111,188,177,108, 86, 91,186,126,137,233,222, 82,173,223, 91,190,231,168,101,155, 47, 47,249,241,242,251,238,221, 95, 54,253,221,
-125,250,236,203,215,232,167, 63,247, 34,253,195,223,254, 70,135, 75,181, 78, 2,181, 57,123,111, 75, 47,155,224,178, 24,236, 58,
-142,118, 4,116,156, 45, 95, 63,175,197,253,209,237, 57,109,155,111, 59, 40, 92,125,230,152, 90,193,221, 20,240, 71,199,219,238,
-139,238, 72,218,222,138,158,187, 34,190, 35,109,151,119,187, 91,170,236,221, 84,151, 13,102,183,124,255,220, 55,159,161,155, 18,
- 58,147,168, 6,219,193,228,232,104,211, 43,236, 39, 79,207, 70,171,123,217,116, 31, 60,126,184,220,147, 79,232,202,178, 97,190,
-245,214, 59,244, 96,185, 63, 31,220,157,232,234, 1,117, 92,238,182,243,190,169,103,186, 91, 22,120, 19,119,157,212,209, 17,104,
- 45,248,254, 25,109,198,250, 50,129,203,162, 46,155,222,184,183,199, 88,133, 33, 66,183,125,182, 35, 57,175,234, 6, 47, 99, 44,
-162,243,254,105,217, 56,191,253,173, 55,232,171,127,244,205,229,215,157,209,103,126,226, 39,232,210,114,184,248,218, 27, 55,151,
-107,203,244,193,205,127, 78,247,238,220,166, 95,253,213, 95,166, 63,245,203,191,188,108,206, 7,253,119, 12, 62, 25,216,102,250,
-235,157, 35,216, 4, 45, 53,250,127, 54, 42,223,141,203,151,186, 78,160,165,225, 53, 69,119, 59, 80, 93,189,122,165,183,219,219,
- 65,164,117, 70,118,202, 65,105, 29,135,246, 57,180,141,169,137, 21, 27,187, 63, 44,159,146,236,165, 4, 72,108, 73, 17,150,193,
- 41,170,171,145,160,152,213, 79, 71, 7, 98,194,192,148, 18, 41, 52,113,140,135, 75,194, 58,228, 88, 96,244,225,175,208, 86,121,
- 20, 9,137,165,162,158,250,236, 18, 91,205, 17, 49,101,178, 29, 52,100, 95, 71, 65,188,209,176,187,232,250,110,188, 2,156, 50,
-230,178,171,125,123,235, 97, 84,239, 2,252,114, 3, 1, 8, 90,131,176,114,221,107, 49,230, 83, 29,175,100, 28,100, 98, 7, 89,
-183, 82, 97,126, 65,185,117,205, 73, 8, 23, 30, 93,230,253,170,132,149,151,139, 57,234, 68,129, 91,117,229,177,240,126,246,185,
- 91, 18, 1,169,133,103, 20,137,185,238, 30,212, 38, 89,212, 34,252, 3, 67, 96, 8, 65, 43, 32,188, 91,123,200, 3,244,195,169,
-173, 29,101,152,236, 29,156,236,132, 88, 36,110, 42,113,200, 10, 93, 0,163, 97, 96, 78,227,195, 32,132,129, 5,213,218, 91,190,
-217, 21, 79, 32, 74, 57,203, 89, 24,176,254, 80, 50, 97, 19, 59, 14, 43,184, 15,182,184, 19, 36, 2,189,223,203,123,188,119,239,
- 9,221,249,232, 54, 61,123,253,181,126,191, 62, 90, 54,141,211,147, 45,189,242,234,115, 61,180, 35,108,167,188, 55,255, 31, 15,
- 46,195, 8, 70, 98,195, 95,189,118, 89, 41, 58,121,213,221,241,249,162,228,171,177, 54, 66, 38,123,101,178, 54,238,207,195, 97,
-154,230, 65, 16, 81, 57,160,128,113,237,211, 31,157,199,105,115,224,207, 70,251, 25,173,186,125,244,248, 41, 93,189,124,220, 55,
- 70,195,150, 30, 28, 76,189, 74, 45,220,172, 71, 83, 95,252, 91, 43, 93,150,106,115,123,220, 4, 79, 59,250,234, 82,185, 63,122,
-244,136,110,223,125, 66, 39, 79, 30,247,150,248,227,167, 79,233,242, 39, 94,233,228,183,221, 82,205,190,244,226,243,203,231,241,
- 33, 61,120,112,107,169,202,118,244,214,123,111,247,150,113,171,160, 95,123,245,213, 94,157,141, 42,114, 89,240,143,143,151,127,
-239,232,248,240, 26,125,242,165,101,131,110, 73, 89, 13, 72,179, 84,241, 31,222,185,211,175,227,219,183, 30,245,141,188,209,223,
-234,211, 29,221,188,247,112,204,184,121,180,161,219,107,110,193, 93,231, 75, 37,127,184,108,128,191,240,243, 95,234,239,251,246,
-114,200,104, 27,198, 7, 75,149,223, 42,231, 86, 61,190,243,244, 4, 18,242,150,141,113, 89, 5,127,242, 11, 95,236, 21,241, 59,
-173,162, 92,158,243,243,167, 79,250, 38,180, 57,156,244,217, 92,238,251,214,214,111, 27,229,178,137,189,250,226, 75,244,116,121,
- 61, 79, 78,158,210,189, 7,247,232,206,237,123,116, 89,253,212,247,239,221,235,175,127,183, 92,179,251,143, 31,208,181, 27,207,
-116, 15, 62,151,179, 14,226,105,246,170,119,223,127,220, 15, 1,237, 62, 61, 63, 63,233,237,229, 70,201,217,148, 49, 15,111,250,
-128,198, 16, 57, 83,159,124,175,198, 21,109,218, 34,101,219,243,119,233,248,210,114,247,140,170,123,154,150,226,140,134, 31,187,
-117, 91,100,211, 80,187,203,247,159,143,141,184,109,148,231,149,123, 23,228,160,141, 23,150,215,112,233,248,184,127,182,231,103,
-143,150,131,199,227,229, 96,113, 70,175,127,234, 21,154,187,168,172,208,167,126,226, 53,250,221,223,249, 29, 58,186,116, 68,191,
-248,167,255, 44, 61, 93,222,107,235,132, 28,245, 89, 60,247, 67,155, 9,180,216, 45, 91, 18,163, 43,221,128,239,221,125,208, 63,
-167,131,131,237,242,254, 91, 55,225, 76,199, 16,135,203,207, 60, 89,254,236, 96,169,224, 31,233,232,231,156, 14,151,131, 74, 59,
-104, 29, 46,207,236,251,119,118,244,225,173,123,244, 83,248,108,248,198,142,186, 36, 78,112,184,170,161, 47,232,254, 25,237,110,
-118,208, 26,195,211,104,196,185, 53,223,187,240, 69,238,252,125, 33,153,128,186,157,247, 2,147, 50, 45, 46,160, 49,242,177,156,
-145,108,229,197, 2,116, 21, 3,189,231,237, 94,238,161,118,186,245, 20, 27,159, 39, 8,120, 85, 69, 85,135, 43,203,148,165,197,
-128,172,127,108, 74,217, 74, 36, 56,131,151,149,178,154,176,114,196,247, 97,179, 17, 73,118,141,212,226,149, 11, 72, 52,235, 57,
-252,122,166,184, 22,170,165,185,208,170, 97, 46, 25,235, 28,194,144, 28,148,177, 63,208,229,100,178,231, 11,196, 72,123,172,111,
-216, 24,188, 43,194, 43,196, 67,201,219, 1,175,171, 72,202,176, 30,217,155, 86,135,205, 73, 96,195, 39, 0, 31, 8, 84,206, 73,
- 64, 71,195, 42, 65,200,211,167,140, 74, 20,255,108,101, 79, 57,203,171, 49, 13,102,159,227, 44, 63,226, 34, 57,133,117, 68, 46,
- 68, 22,172,161,200,173, 85, 94, 77,140,115,178, 44,198,223, 94, 54,157,174,104,237, 28,228, 3,122,241,165,103,199,188, 82,246,
-106,239,116,157,115, 74,182, 0,159,128,178,229, 11,179, 4, 86,206, 98,230, 60,106, 16,168, 92, 82,182,246, 62, 89,198,105,134,
-185,145,200,123,174,143, 20,246,177,103, 9,145, 36, 60,109, 98,169, 15, 62,186, 71, 95,251,195,175,209,201,227,199,125,209, 57,
- 90,170,166,135,143,206,232, 95,254,254,215,232, 19,175, 62, 67,175,188,240,124,223, 56,218,134,213, 90,168,239,190,247, 17, 93,
-186,116, 76,239,125,112,179,115,209, 79, 78,159,118,213,120,155,129,222,184,126,157,238,220,186,221, 85,202, 79, 31,223,239,139,
-200,249,252,168, 1, 47,232,123,111,254,104, 57, 4,108,232, 75, 63,243, 69,122,231,253,119,232,253, 15, 63, 88, 42, 81,238,139,
-247,203,207, 94,239,149,229, 11, 47, 63,223, 55,248,183,223,123,151,126,225,231,126,142,126,250,139,175,119,123,217,251,239,189,
- 55, 4, 83, 77,179,214, 54,163,229,243,188,251,100, 71, 15,159,158,211, 75,207, 11,189,250,220, 33,221,186,119,178,188,142, 43,
-203,207,254,112,217, 56, 31, 46, 27, 95,219, 32, 78,151,138,121,211,159,143,207,127,242, 83,244,133,207,126,169, 87,189,215,151,
- 42,240,199,111,253,136,110, 45,135,130,151, 94,122,137, 62,243,217, 47,208,131,135, 79,250,239,232,155, 92, 79,147, 35,135,145,
- 92,191,122,157,222,251,255, 9,123,179, 38, 73,210,235, 74,236,126, 30,251, 30, 25,185,103, 86,214,218, 59, 26, 4, 64,144, 32,
-169,225,112, 25,206, 72, 38, 13,231,113,100, 50, 45, 35, 51,201,140,210,131, 30,244, 54,166, 23,189,201,244, 19,180,189,137, 47,
- 35,211, 66,210, 40,137, 59,129, 33, 0, 98,237, 70,119, 87, 87,119,237, 85, 89,185, 47, 17,145,177,175,238,159,238, 57,159, 71,
-132,123,100,246, 8, 48, 88, 55,170, 50, 35,220,191,229, 46,231,158,123,238,249,185,156,158,158, 17,254,157, 34, 66, 80,135,105,
-187, 66, 4, 96, 48,236,234, 90,166, 89, 3, 47, 22, 75, 82,211,247,185,108, 52, 9, 43,255,244,231, 63,103, 32,147, 8, 57, 38,
-248,253,177, 58, 74,100,252,107,187, 91, 82, 42, 87, 53, 0,106,104, 54,159, 32,163, 63,107, 83,114,112,112, 68,231,203, 90, 49,
- 38,215, 37, 28, 65, 11,217,225,175,127,231,215, 72,166, 59, 62,121, 67,116, 97,164,235, 63,232,143, 53, 48,211,191,247, 2,214,
-255, 1, 73,116,154, 86,110,237,221,147,219,123, 15,244, 89,234, 82,191, 60, 97, 50,214,188,106, 17,185,192,153,203,233,179,122,
- 73,144,229,242,178, 90, 42,115, 47,128, 56, 28, 29,237,147,237,191,178,190, 45, 7, 71,111,228,178, 61,145, 15,179,105, 30, 37,
-244,135,175,174, 84,229,221, 7,219,186,159,154,189,127,242,133,220,125,235, 93, 68,134,242,211,191,251,129,174,229,109, 25,233,
-242,221,210,236,190,166,231, 2, 1,195,252, 62, 68,208, 83, 56,196,225, 72,157,242,153,190,187,158, 23,112, 19,134, 26, 80,161,
-158,190,190,182, 33,206,247,184, 76,190,211,237,177,246,127,213, 25,170,243, 15,164, 92,204, 51, 40,203,105, 32,112,248,230,208,
-237,155, 68,148,212,194,118, 54, 99, 23, 18,212,179,160,119, 62, 41, 47, 34, 49,107,231,193, 70, 84,147,194,198, 5,165,140, 93,
- 76,131,156, 79, 66, 91, 30, 24, 19, 23,172,242,150,201,210,198,196,128, 83, 27, 75, 24, 35, 73,217, 53, 49,161,235,200,160,141,
-114,100,226,240,110,124,216, 79,116, 26, 37,224,247,241,104,200,131,186,104, 77, 11,135, 86, 24, 19,155,245,234,121,179,254,208,
-104,221,194, 44,209,205,111,168,179,219,155,250,170,227,206,102, 89,195, 97,121, 66,154, 21,145,175, 68, 70,191,226,207,230,186,
-222,230,122, 77, 94,174,129,220,246,218,144,183, 27,131,167,165,218,172, 89,106, 89,139,101,150, 75, 10, 9,209, 26,184,149,175,
- 16,123,137, 69,116, 17,150,183, 68,231,119, 71,199, 54,134, 71,115, 57,184,176, 81,206, 65,132, 40,102, 34, 76,203,232, 48,134,
-249, 1,154,237,136,183, 56,116,158,131,219,162,140,111,179, 52, 72,196,196, 68,139,108, 28,142, 54,114, 19, 47, 62,148,152,149,
- 69,144, 16,157,116, 55,131,155, 35, 80,130,245,150, 49,239,101, 10,129,231,234, 88,250,207,218,218, 26,179,141,250,217, 69,136,
- 94,121, 52,156, 54,146,200,122,203,207, 52,191,208, 54,242, 51, 17, 90,157, 89, 18,192,185,214,219, 23,137,233,140,137,193,131,
-113, 0,199, 92,171,172, 72, 92, 52, 50, 18, 32,197,175, 87,172,154, 30, 11, 80,227, 82,159, 51,131,133, 26, 44,152,209,231, 23,
- 93,249,232,167,143,229,249,147,135,146, 47,173, 73,185, 82,150,106,109, 77, 58,237,190,252,235,151, 7, 98,224,160,187,109, 66,
-198,125,205, 40,239,221,187, 39,153,234,134, 60,121,181, 79,180,163,217,188,144,175,189,247,158,188,251,246, 3,121,113,112, 34,
-165,106, 69, 6,154,153,163,182, 62, 25,251,180, 31, 67,140,199,213,204,244,119,191,243,235,242,197,179,167,234,120, 79, 73, 50,
-203,167,147, 82, 82,199,208, 83, 47,176,183,179, 75,146,212,199, 15, 31,178,126,140,204,176,221,238,168,211, 26,201,235,227,115,
-117, 58, 25,201, 21, 50, 26, 60,128, 11, 97,228,221,189, 21, 25,108,149,208,130, 43, 63,126,116, 44,187,107, 5,249,119,255,225,
-183,228,187, 63,253, 76, 14, 27,109,205, 70, 49,104, 37, 45,255,206,239,254, 3, 73, 77, 64,146, 27,240,157,171, 26,144, 32, 27,
-172,119, 58, 34, 80,136,211,231, 64,159,252, 74, 41,173,153,190, 71,167,150,201,120, 50, 38, 49, 42, 33, 43,229, 50, 17,132,215,
-251,251, 50, 28, 78, 92, 54,170,235,150,201,228, 36,173,118, 47, 87, 72,203, 63,251,167,255,190,188,247,245, 15,120, 46,191,124,
-250, 70,254,252,143,255, 70,222, 28, 29,232,179,247,229,247,126,231,119,164,154, 75,203,133, 58, 97, 56,213,115, 13,162,126,249,
- 55,126, 87,108,166, 36, 63,251,232,115,233,168,147,204, 36, 69, 54, 87, 43,178, 89, 83,231, 90,201,138, 76, 6,154,189, 15,184,
- 70, 96,241,187, 64,163, 47,197,210,138,100,210, 57, 57, 56,124, 35, 71, 7,207,100,125,243,182,172,175,174,201, 40, 7,146, 97,
- 64,187,236,147, 68,149,102,253,126,125,117,131,142,243,226,252, 68,166,227,190,108,109,172,106,224,144,162, 45,207,103, 82, 82,
-219,124, 75,131,179, 11, 89,169,173, 48, 24,129, 56,208,241,241,190,244, 58, 23,178,182,126, 91, 86, 86,106,114,170,129,137, 32,
-120,211,117,246,213, 31,160,238, 95, 42,174,200, 15, 63,125,163, 78,213,211, 32,161, 43,127,248,191,252,207,242,246,187,239, 75,
-160, 14,248,163,159,125, 74,114,227,223,125,247, 7,242, 47,254,179,255, 68,138,156, 31,226,207,237,199,108,252, 50,238,248, 72,
- 29, 56, 8,114,173, 78,155,129, 86, 79,207,140,155,114,150,208,239,233, 75,187, 7, 94, 65, 90,179,254,137, 35, 88,234, 58, 93,
-105,240, 8, 88, 25,157, 12, 43,165,172,164, 83,110,236,173,245, 76,188,252,107, 35,200, 87,100,110, 67,164,224, 40,193,141,178,
- 34,225,125, 15, 36,150, 76, 93,155,193, 21,227,116,153,235, 26,244, 98, 98, 82,173,215,145, 56,115, 93,119,195, 44, 75, 92,221,
-208, 69, 21,245,153,243,182,113,137,145,158,173,216,165,166,176,197, 26, 36,207, 78,143, 23,234, 94, 33, 11, 19, 14,220,245,217,
-133,109,244,225, 88, 68,127,154,116,145, 37, 91, 37,146, 75,128,162,145, 27,208,139,152,251, 52,215,214,199,124,133, 0,147,141,
- 57,192,121,239,119, 32, 55, 19,207,162,179, 91,205,130,153, 24, 53,174, 54, 10,148, 88, 27, 79,246,151,159, 39, 38,120, 18, 37,
-212, 45, 88,253,102, 25,113,136,136,237,199, 29,246, 13, 80,188,185, 46,173,227, 6,217,135, 25,221,156,160,101,226, 34, 58, 51,
-246,119, 68,106,119, 14, 69, 93,235,187,151,216, 76, 97, 99,108,204,113,198,213,217,162, 34, 14,241, 89,233,114,147, 51, 55, 94,
-188, 63,117, 9,197, 95, 60,245, 13,107, 16,209,138,240, 98, 51,198, 23,178,175,139,222,250, 40,177,237,250,208,155, 57, 92, 6,
-248, 53, 28,215, 88,170,150,229,214,157, 77, 18,112, 82,169,132,212,207, 47, 9,189,139,231,221,208,204, 22,159, 82,230, 45, 15,
-128,155,115, 43,174, 19, 17, 99,164,150,235,230, 32, 22,240,154,101,217,208,229,224,126,110,152,100, 49,168, 33, 10,163,219,155,
-244, 29,162,229,170,104,159,172, 35,187, 1,106,253,249,199,207,229, 82, 51,178, 47,158, 31,200,203, 87,175,229,214,253,247, 36,
-165, 25,219,139, 55,199,114,220,120, 69,193, 15,163, 25, 80, 81, 51,247,213, 21,205,160,213,145,252,210,183,126, 89, 68,157,202,
-163,167,251,172, 15, 39, 51, 25,121,112,255,190,124,240,254,187,242,250,232, 84,141,242,136,182, 32,145, 46,177, 37,203, 51, 32,
- 94, 25,169,150,242,242,107,223,252,186,124,252,232, 11,205,196, 79,165,148, 47,170, 3,197,207,102,229,188,217,145,175,191,251,
-150,124,249, 98, 95, 94,189,121,195,119, 68,118,134,182, 46, 24,245,130,159,146,146,102,103, 59,234,180,225, 80,251, 19, 95,131,
-128,169,220,201,150,100,163, 86,150,241,112,160,137,105, 85,190,120,117, 46,207, 15,206, 52,107,157,202,239,255,246,175,202,127,
-244,159,255, 7,172, 73,223,219,221,148,239,254,221,103,242,191,254,225,159,202,231,207, 94,200,183, 63,120,143, 48, 51,236, 84,
-194, 3,219,123, 34, 85,111, 34,255,252, 15,254, 99,249,225,247, 62,149,191,249,235,191,149,111,125,251, 61,249,111,254,229, 31,
- 72, 46,151,145, 63,255,219, 79,228, 7,127,253, 19,214,212, 7, 26, 65,220, 86,199,248,214, 78, 69,188, 73, 75,254,211,255,242,
- 15,228,155,223,252,144,142,203,157, 53, 79, 62,253,249, 99, 41,228,242,146,202,100,101, 28,140,229,228,232, 88,250,233,137, 58,
-103, 13,138, 90, 77,249,167,255,236,247, 52, 3, 94,151, 31,252,252,137, 6, 40, 61,214,214,173, 58,177, 92, 14,165,142,130,108,
-175, 23,165,172, 65,192, 79, 63,126, 41,101, 93, 55,148, 7,138,185,172, 58,245,172, 84,215,246,152,225, 67,147, 94,188,140, 20,
-203, 21, 61,203, 70,122, 26, 4,140, 39, 46, 56,197,244, 56,212,159,215, 86, 87,117,125, 51, 68, 35, 70,186, 70, 64, 60, 74,185,
- 4,185, 2,153,148, 58,200,242, 22, 51,223, 78,251, 82,106,171, 85,102,198,200,148,207, 78, 94,107, 64,144, 86,135,190,174, 54,
-125, 42,171, 53, 93,231,181,164,124,249,124, 95,110,109,175, 75, 33,155,146,253,227,134, 84, 53,248, 43,106,252,241,206, 47,127,
- 77,158, 60,125, 42, 95,124,241, 84, 3,131, 60,127,239,193, 78, 77, 3,132,142,180,154,117,253,255,247,244,115, 12,203, 0, 86,
-108,108,160, 13, 2, 45,148,122,128, 56,160,220,211, 31,244,244,188,248, 14,134, 71,134, 15,127, 45,250,119,253, 17,147,199,172,
-174, 21,130,188, 41, 74, 50,104, 69,212,231,156,132, 74,129,198,198,233, 34,230,134,201,151,118,121,198,122, 56, 87,222, 51, 18,
- 87, 44,181, 81,229,184,232, 32, 39, 27,243, 49,102,169,149,218, 46,161,171,230, 26, 89,220, 92,215,151, 88,190,242, 54, 42,217,
-188, 44, 75, 17, 77, 62,227,227,202,103,153, 89,204, 28, 92,107, 34, 66,166, 62, 30, 47,122,245,193,176,156, 59,243,197, 76,114,
-180,176, 76,216, 35,233,156, 61, 34,196, 52,251, 30,157,147, 95,212,148, 23,144,129, 93, 86,172,136,150,145, 35, 53,101, 27,113,
-198, 70,226,227, 8,227,140,226,184,195, 16, 43,215, 20,140, 76, 44,229, 95,146,156,141,214, 48,163,189,244, 38, 46, 3,187,236,
-237,141, 68, 32, 25, 19, 87, 67,179, 18, 37, 49, 73, 68,135, 91,174,215,144, 99,125,199, 54, 46,191, 40, 17, 34,162, 23,129,169,
-195, 89,217,203,237,243,113, 52,192,222,172, 74, 25,229, 31, 44, 75,188, 70,179,108, 47, 30,118,153,175, 32,166, 95,139, 44,163,
-250,254, 75,145,173,137,136,113,196,231, 25,152,101,221,153, 69,251, 89, 12,174, 50,243,174,128, 88,223,120,116,180,162, 89, 76,
- 28, 3,195,246,178,209,145,177, 58,169, 91,239,220,118,228, 34,253,171,141,205, 21,185, 56,173,203,145, 26,168, 7,111,239,198,
- 37, 70,227,177,218, 13,101, 13,145,165,193,106,241,181,184,198,122,188,169,228,179, 20,244, 93, 35, 7, 46,144, 33, 19,205, 62,
-150, 2, 92,123,131,246,129, 93,122,143, 89, 75, 41,136, 96, 24,154, 50,213, 12,116,255,205,185,124,247,207,190, 71,173,141,149,
-213,117,205, 62, 11,116,166, 3,205, 28,253,241,136,144,104,161, 80,148,180, 58,238,163,227, 3,121,239,237,183,100,108, 82,234,
-164, 78, 56,255,188,217,110,201,131,219,183,228,238,157, 29,121,121,124, 66,242,153, 64, 64, 70,191,163, 86, 46,200, 64, 29, 71,
-187, 51,162, 67,255,198,123,111,203,207, 63,127, 36, 23,151,151,178,177,178,194,108,178,221,237, 74, 71, 51,180, 7,119,110,201,
-195,167,207,229,228,226, 82,157,125,142,207,142, 22,184,190,102,106,111,223,189, 45, 21,205,206,211,126, 87, 29,149,145,102, 7,
- 45,107, 73, 73,150, 83,114,217, 65,107, 88, 6,124, 56, 34, 49,107,165,164,116,250, 86, 86, 87,107,114,117,213,150, 63,250, 87,
-255, 15,121, 16, 96,115, 55, 52,155,172, 22,213,129,123, 37, 41, 39,187, 82, 46,175,203,239,253,131, 95,149, 71,234,228,225, 36,
-199,154, 53,255,223,127,242, 55,210,110,245,229,157,119,238, 73, 71,127,255,191,251,239,255, 39,121,247,254, 45,117, 88, 7,114,
-161,129,135,151, 12, 52,139,206,129, 30, 39,199, 23, 45, 73, 39,124,249,219,239,254, 88,254,254, 39,159, 57,242, 28,225,113, 35,
- 31,255,226, 75, 66,224,158, 9,164,156, 47, 73,165, 86, 85,103,148, 86,199,184, 34,231,103, 39,242,242,240, 92,170,221,169,124,
-249,228, 53,217,233, 8, 46, 54,170, 26, 4,120,190,188, 58,189,146,213,178,187,212,105, 13, 12,144,169, 3,237,104, 15,221,188,
-249,158,254,211,239, 95,176, 60,144,212,128,232, 74, 29,246, 91,223,249, 80,118,238,238,200,163,207,158,168,227, 28,177, 52, 2,
-162,217,218,214,109,174, 33,160,248, 84, 38,199,224,234,188,209,147,156, 6, 75, 22,153,124,144,150,250,229, 17,255,190,213,108,
-170, 99, 79,147,164,150, 74,231,230, 25, 31, 74, 42, 23,141,190,220,221,219,146, 42, 28,179, 6, 4,155,187, 85,169,148, 39,188,
- 87,103,151,109,169,150,115,242,222,251, 31,202, 71, 15, 95,168, 35,238, 72, 38,105,245,188, 28,201,246,214,134, 52, 79,143,228,
-243,135, 95,202,206,222,109,249,198,135,239,209, 81,219,176, 77, 15, 65, 33,178,126,140,177, 69, 90, 12,135,142,192,194,231, 25,
- 29,178, 54, 79, 88, 93,127, 22,200,143,135,224,101,104,200,122,207,166, 12, 9,135, 94, 90,253,203,116,192,103,193,218, 79, 35,
- 42,143,241,196,217,198, 80, 86,160,180, 65, 68,136, 39, 62,163,196, 46,181, 56, 75, 92, 52,109,222,102,101, 35,131, 11, 99,194,
- 38, 17,229,231,153,239, 10, 34,227,194, 35,137, 78,196, 7, 45, 90, 87,157,194, 94,212, 68, 4,145, 18,244,130,246, 21, 23,218,
-152, 39,159,209, 97, 82,126,164,165, 46, 44,113, 39,167,236,211,156, 13, 21, 9,199, 52, 70,190, 12, 16,164, 31,178, 17,103, 25,
-253, 84, 23,120, 52, 26,210,217,131,204, 1,200, 11, 27, 56,251,159, 55, 15, 12,140,196,249,242, 17, 98,145,141, 8,139,217, 72,
-173,124,137,102,183, 76,251,137, 18,192,254,127, 53,150,111, 16,162,153,123, 26, 99,150, 21,104,150, 48,133,165,249,210, 75, 98,
- 2,118,201,217,216,136,230,175,124, 21, 7, 98, 30,252,120,145,182,189,133,131,182, 17, 88,216, 70,130,158,121, 59, 90,140,214,
-111,174,179,237, 99, 58,146, 81, 56,223,187,214,199, 45, 17,102,121, 44, 68, 49,215, 58,226,231,109, 5, 54, 22,176,152,235, 45,
-140,246,134, 82,177,141,194,207, 33,153,198, 91,230, 28, 92, 39,195,221, 12, 91,219,121,191,251,252,239,244,172,129,176, 3,152,
- 15, 1, 10,234,118,179,254, 64,176,170, 49,151,187,223,237, 57, 34, 86, 54, 53,111,205,145,165, 18,207, 77,209,140,141,144,210,
- 36,130,106,152,104,255,135,185,169, 6,100,174,195,250,198, 46, 77, 22, 12, 37,103,103, 60,145,217, 12,234, 25, 87,101, 41, 51,
-143,149,170,110, 4,171, 2, 58,184,222, 96, 34,127,252,167,223,151, 71,143, 30, 74,183,217,160,147,255, 64, 13,242,235,227, 11,
-205,114, 15, 41,224,225,251, 99, 53,174,234,140, 43,171,124,151,227,227, 67,205,198,223,146,214,200,215,224,232,132,153, 62,218,
-160, 62,124,231,129, 20, 75, 5,205,244,247,201,126, 55, 28,200,101,165,209,184,148,245,114,150, 68,183,141,245,154,188,255,224,
-182,124,242,229,151,210,104,247, 36,157, 74,107,144,144,101,134,134,108,108,123,125, 69, 51,252, 99, 57,175, 55,200,122,199,223,
- 99,191, 18,154, 61,183, 59, 93,217,215, 0, 2,245,211, 86,179, 47,201,246,132,109,111,141, 43,119,102,191,118,127, 83, 78,175,
- 70,242,248,229,165, 60,216,204, 74,187,121, 41,173,110,160, 65,198, 29,102,173, 72,224,166,154,148, 60,127,245, 82,131,132,177,
-236,221,186, 37,157, 86, 67, 86,239,175,202,202,230,150,156,171,227, 6,249, 13, 33, 78, 95, 51,255,230,235, 35,201,169, 67,204,
-164,211,236,197,175, 31,156,203,211,199,251,146, 72, 3,150, 31,186,204, 80,109, 27,216,234,151, 19,167, 17,255,248,255,248, 11,
-246,184,227,229,225,132, 18, 6,245,233, 44,167,206, 13,135,125,125,246,162,102,191, 99,201,175,228,164, 92, 91,149,166,158,181,
-239,253,240, 99,169, 86,215,244, 44,166,153, 61,119,116, 45, 46,154,154, 89,151,243,132,157,209,181,134,172,117, 99,173, 34,143,
- 95, 53, 66,144,216, 74, 65,159,173,217, 62,209,191,119, 44,113, 64,249,141, 86, 71,126,248,175,127,164,251, 0,198,126,146,103,
-123,162,255,212,147, 45,135,251,175,185,150,133,124, 94, 42,186,134,189,254, 80,122, 35, 43, 67,181,213,222,160, 47,167,141,103,
- 46, 16,209,192,225,252,178, 33,117, 93, 88,212,191,141,201,161,139,149, 61,233,112,178,229, 98,142, 78, 53,147,178,122,143, 58,
-242,248,197,144,235,239, 50, 92, 43,159,127,121, 37,187,187,187,122,119, 38,146,205, 23,229,248,188, 33,181, 90, 77, 6, 99,253,
-153,230, 80,142, 14, 78,101,216,214,204, 94,223,111,181,182,226, 38,221,105,144,116,118, 81,151,195,163, 83,185,212,128, 2,240,
-124, 89,159, 19, 65, 94, 90,147,193,130,102,226, 8,250, 70,163,177,107, 75,156,232,119,250,234,192,115,154, 40,234,207, 54,175,
-122,114,107, 43,163, 63,103,228,213,209, 72,131,197,134,174,101,158,201,164,137, 36, 51, 86,150,120, 75,243,254,244,104,139,112,
- 76,168,126,225,116,130,200, 64,176,232, 52,199,153,173, 15, 34,156, 47, 27, 29,134, 20, 78,117,179,145, 14,167,120,223,235,130,
- 79, 99,151, 84, 27,109,212,122,216,200,148,204, 37,253,244, 40, 76, 31,229,205,121, 70,226,179, 43,162,101,106,167,219,145, 68,
- 95, 36,198,222,161,149,197,243, 82, 98,130, 81, 76,202,174, 92, 72, 19,202,154,147,167, 96, 62, 38,174, 33,127,162,255,141, 66,
- 0,136, 30, 19,212,102, 78, 81,228, 96,230,228,147,252,103, 50,140, 71, 34, 6,202,198,179,141, 32,214,187, 46, 49,102,115,212,
-248,218,232,232, 81, 27,255, 57,187, 60,215,125, 94, 35, 53,241, 61,149,101,131, 25,231, 50, 71, 7,207, 44, 19,186, 36, 54,211,
-122,161,167, 28,155,206,102,174, 15,108,177, 49,118,122,124, 80,130,141,169,163,153,101,233,249,249,204,110,123, 83,157,126,246,
- 14,161,232,204,172, 46,190, 60,179,219,218,101,152, 40,194,120,143,126, 97, 76,123,220,196,107,229,178, 52,109,196, 46,177,254,
-103,251,224,153,235,227,110,205,114, 79,187,137,197, 87,209,210,198, 60,144, 51, 81,185,152,184, 96, 44, 30,225,244,232, 82, 46,
-207, 26,110,152,199,108,102,248, 92,192,195,211, 12, 38, 37,163,158, 26, 42,205, 50, 54,182, 87,101,123,119,237,218, 56, 95,115,
- 3,148, 21, 15, 50,204, 66,244,194, 68, 46,230,146,144,208, 87, 49,100, 77,172,151, 63, 74,220, 48, 75,162,137, 38,222, 85, 18,
- 69,170,230, 80,156,229,216,202,185,154, 94,152, 45,192, 56, 67,134,179,219, 27, 74,179,126, 41,141,179, 11,169,170,147, 41, 21,
- 75, 84, 84,235,116,122,210, 83, 35, 26,248,174,247,186, 82,174, 74,167,219, 18,171, 78,254,193,131,119,228, 74, 51, 42, 24,126,
- 60, 87, 95,157,202,189,189,109, 66,173,111, 78,206, 8,209, 6,225, 36,171, 64, 51,197, 82, 78, 51,251,243, 75,169, 85, 74,178,
-177, 90,149, 31,127,242,144, 65, 83, 90,237, 4,122,165,209, 75, 93,200,166,101,119,163, 38, 79, 94,190, 86,199,212, 34,108, 12,
-167,136, 25,217,200,210,240,186,103,154,213,131,209, 14, 39, 11,114, 86, 33, 87, 32,243, 59,175,206, 16,250,223, 63,250,172,163,
- 89,103, 70, 29,142, 47, 31, 63,111, 73,175, 53,144,245,234, 72, 51,251,156, 60,125,217,213,224,161,197,218,121, 58, 87,212,119,
- 45,200,169, 58,145, 98,169, 42,173,160, 44,231,175,223,144,189,158, 85, 59,132, 62,245,161, 58, 15,236, 31, 2, 22,124, 63,254,
-147,162,131,240,248,188,200,110, 39, 65,142, 25, 50,251,230,141,165,195,244,244, 89,138,250, 25,200,196,224,164,241,119, 35, 72,
-153, 6,174,131,192, 22, 93,141, 27, 90,241,231,167,231, 82,215,224, 5,136, 72,166, 80, 96, 79,118,253,234, 74,250,189, 62, 97,
-242, 23, 89, 16,213,140,252,240,179,182,252,250,135,219,178,165,129,192,103, 79, 78,232,120, 77,210, 48,120,152,241,184,160,172,
- 71, 51,173,166,119,164,206, 78, 63,145, 89, 58,187,151,244,189, 70,158,107,209,131, 93, 77,169,189,237, 99,112,141,102,189,105,
-194,215, 67,238, 23,222, 13,106,114,236, 87, 7, 41,109,198,149, 98,189, 59, 65,201, 84,212,178,217, 2, 72, 2,161, 67,238,146,
-211,128,200, 4,146,185,169,239, 50,233,137,245,184, 94, 31,126,240,129,116, 7, 67,146, 17,225, 55,158, 60,219,151, 96,116, 37,
-223,120,247, 3,121,242,217, 39,116,244,253,137,165,254,126, 87, 51,243,164,190, 16,156, 58,191,115,109,157, 8, 17,122,212,193,
-242,135, 14, 59, 8,154, 40, 3, 37,197,215,181,183,148,232,205,166,145, 52,122, 26, 8,245,116,109,167,146, 73,164,229, 47,254,
-242, 71,114,120,240, 82,126,255,247,255,109,249,230, 47,125,192,119,159, 13, 97,185, 94,146, 90,192,129,158,141, 56, 80,107,174,
- 35,105,145, 17,116, 38, 50, 64, 44, 94, 93, 51,215,147,162, 89,201, 90,174, 11, 65,153,175, 34,194,134, 53, 71,151,211, 4, 17,
- 62,153, 9,187,176,108,124,100,243, 77, 0,224, 76,147, 37, 6, 83,204, 62,193, 61,116,242,184, 62,148,169, 77, 74, 57,231,200,
- 41,122,203,195, 94, 70,247, 43, 16,240,128, 99, 47,230,210, 17,118,178, 51, 36, 65, 8, 35,216,185,222,115,192,218, 10,234, 65,
- 94,120,129, 88,215,130,244, 95,161,200,154,146,241, 34,181,195,101,237,171,101,253,247, 89, 38, 27,165, 22,196,224,145, 37,177,
-172,165,249,237,203, 60,132, 57,195,221,204,154,245, 69,162,131, 18,174,183, 41,221,212,158,102,226,179,201, 67, 41,208,184, 50,
-156, 68,250,186, 35, 99, 55,231, 61,225, 86,226,168,251,162, 53,227, 90, 11,115,116,230,134, 72, 92,241, 40, 70,108,140,210,220,
-100, 62,153,205, 70, 24,251,198,196,213,200, 22, 67, 24, 76, 44,136, 49, 17,249, 81,179,220, 55, 41, 18, 83, 82,138,139,157,216,
-107,226, 67, 49, 50,219,146,196,238, 98,156,168,204, 5, 31,174,105, 26, 24, 19,227,109, 44,184, 19, 16,253, 8,228,236,244, 74,
- 38,106,196, 16, 53, 67,246, 50,151,207,204,215, 19,231,185,172,217,195,153,102, 7, 48, 66,111, 94,157,232, 57, 68, 77,176,232,
- 70, 10, 71, 51, 95,179, 68,102,177, 18, 31,210, 18, 27, 77,187, 20,252,197,198,187,154,136,190,129,137,147, 61, 35,229,165,232,
-144, 26,107,151,137,114,222, 53,102,253,172,237, 14,117,108, 55, 99,217,204,207, 51, 12,196,161,174,195, 31,255,159,127, 38,159,
- 62,121, 42,208, 69, 3,187,184,186, 82,147,231,111,142,212, 25, 76,217, 11,108, 53, 96,119,130, 34, 85, 57, 63, 59,101, 70,244,
-246,123,239,203,241, 69, 67, 51,244, 22,159, 21,114,171,183,119,182,164, 80,200,200,243,253, 3,231, 68,130,128,193,249,122,165,
- 34,154,126,211,168,227,144,173, 84, 75,242,179, 79, 31, 50, 67,192, 93, 71,240,142,224,106,119,125, 93, 42,154,225,255,228,211,
-207,228,170,213,166, 13,240,194, 30, 99,144,163, 40,107, 74, 61,244,140,254,121,130, 89,118,119, 4,145,150,161, 6, 6, 89,125,
-211,169,212,242, 9, 25,168,145, 31, 34,131,211,140, 9, 26,225,235,111,125, 67, 63,123, 67,146,133, 18,225,224,122,179, 37,117,
- 13, 98, 90,157,145, 58,159,190, 58,214, 43,249,231,255,222, 63,150,131,147, 35, 61, 78, 62,153,222, 11, 68,199,253, 43, 50,114,
- 8,222,192, 62,161, 46,142,118,170,124,214,233,171, 63,200,173,202,155,211, 38,237,215, 72,157, 96, 86, 29, 77,187, 63, 33, 90,
- 9,135, 51, 26, 76,136,254,128, 39, 0,111, 59, 85, 7,181,170,107, 2, 97,152,253,227, 51, 57,189,172,235,179,106,112,163,142,
-184,221,233,104,160,210,231,120,209,218,202, 10, 71,128,154,144,151, 82,206, 4,242,139,135,207,229,131,183,110,107,208,149,145,
- 82, 33,203, 59,139, 30,246, 36,209,166, 44,185, 2,208,195,199, 48, 25,216, 96,148, 74, 32,164, 52, 13, 66,142, 7,108, 43,136,
-203, 12,146,250, 76,168, 16,188,120,214,141,200, 70, 82,149,207,166,217, 18,135,179,158, 6,210, 2, 46,131,174,115, 54,227, 8,
-183, 94,200,222,166, 86, 15, 90,245,216,114,232, 81,240, 6,117,109,204,155, 71,134,141, 99,134, 32,240,190, 6,122, 64,112,158,
-190, 58,146,170, 6,116,251,111,222,200,197,197, 41, 17,136,102,227, 82,146,217,170,180, 71,129,236, 31,236, 83,177, 14,107, 58,
-214,231, 70,173, 29,223, 3,165, 64,180, 64,102, 52,208, 6,124,223, 1,178,160,123,143,224, 1, 45,124,183, 55,171, 68,127,218,
-186,167,121, 13,126,140, 6, 20,245,203,145,108,110,237, 74, 93,207, 17,214, 99, 4, 30,200, 44,231,182,139,123, 17, 11,178,109,
-228, 46,205,147, 63, 47, 54,166,116,230,135,162,217,110,172, 54,111,108,204,134,199,234,223, 49,187,126,173,118,184,164,177,177,
-228,164,231, 8,113, 50,142, 60, 47,203,128,207,109,255, 66,167, 63, 76,213, 23, 3, 96,230,188,168, 8, 53, 0,240,251,209,113,
- 93, 70, 26,229,237,108,228,101,119,173, 40,187, 43,249, 80, 26,208, 25, 32, 79, 13,227, 4,103, 7, 12,120,254,119, 33, 54, 67,
- 41, 69, 40, 47,169,209, 24,104,164,142, 99, 50, 24, 56, 37, 32,136, 6,224,162,215,202, 16, 29,232,201,235,131, 19,141,254,183,
- 52,146, 46,107,246,148, 9,167, 30, 69,154,135,236, 66,101,199,216, 27,152,128, 17,184,220,204,152,100, 75, 13,233,139, 31,241,
- 34,180,123, 19,135,172, 99, 53,143, 5,219, 57,214, 30,110, 23,144,104, 20, 94,181, 33, 27, 60,174,231,110, 99,146,159,241, 58,
-121, 20,241, 55,203,177,193, 82, 43,194,117,137,117, 19, 21,127, 89,250, 76, 79,194, 6,228, 57, 20,180,232,127, 95,232,249, 47,
-186, 24,226, 12, 76,115, 3, 35,115, 65, 58,139,214,169, 34,243,190, 34,202,124,215,152,113,115,245, 50,185,137,200, 25,229, 66,
-196, 26, 6,194,183, 90,238,219,151,197, 60,128,197, 16, 4, 19,249,243,197,243,227, 28, 1, 82, 93,219, 92,151,186, 58, 39,100,
-139,179,178, 89, 2,189,186, 26, 80, 22,213,240,194,200, 53,245,239,125,223, 70, 56, 35,145, 0, 99,233, 82,222,164, 3, 49,159,
-133,108,150,186, 50,204,114,171,166, 93,136, 38, 93, 51, 5,178, 52,115,218,196,196, 95, 36,210,142,102,101, 65, 6,196,123,251,
-204, 34,253, 24, 70, 7,131,136, 76,240,203, 39, 47,229,232, 76, 13,171, 73,170, 67, 95,227,251, 94,129, 89,206,150, 52,205, 40,
-199,200, 70, 53,227,171,148,101,208,107,147,108,117,235,246, 93, 57,209, 53,105,181, 91,106,120,135,116,248, 27,235,171,180,150,
-227, 65,155,131, 81, 32,221, 89, 43, 1,178, 46,211,240,247,244,126, 3,133, 1, 44, 11,200, 29,223, 3, 8, 21, 70, 10,246, 96,
- 71,157, 46,148,194,126,242,217, 67,246,174,103, 56,200,100,241, 14, 78,212,101,241, 6,168,211,227,247, 80, 87,223, 92,169,200,
- 69, 11,253,235,234,156,240,125,125, 16,168,134,142,201,237, 37,165,117,212,166,242, 91, 75, 51, 96, 32, 5,200,242,178,250, 78,
-104, 93, 68, 6,120,119,103, 91,186,157, 46, 33,249, 32, 92, 39, 86, 59,195, 54, 40, 16,174,124,181,117, 24, 3, 59, 35, 74,165,
-203,101, 41,228,139, 44,209,116, 52,161,129,243,192,122, 33, 51,205,160,158,107, 18,116,170,227,177,207,127,166,117, 77,210,168,
-131,251, 83, 6, 58, 19,205,158,143, 47, 47,228, 84, 51,116,216,221,181,106, 89,182, 43,105,169,135, 50,180,101,180,148,233,207,
-165,147,174, 71, 25, 9,102, 50, 83,144,175,191,187, 37,231,141, 46,161,232,161, 58,218,141,114,214, 57, 86,168,174,233,119,221,
-218, 41, 75, 51, 57, 82, 71, 54, 98, 54,125,118,217, 33, 19, 28, 25,247, 84,215,162,170,129,192, 72, 29,104, 62, 99, 24,188,118,
-213, 57,226,172,151, 10, 73, 6, 32, 40,137,126,237, 94, 77, 62,127,113,166,201, 84,146,237,129,107,149,162,180,100, 36,197,108,
- 66,127,126,162,193, 80,159, 65, 13,216,243,176,219,216,171,213,114, 78,234,237,174, 58,214,190,238,163,161,182, 0,246,252,214,
- 70, 85, 51,234,158, 92,234, 57,233,107, 80,119,120,240, 74,131,159, 30,215,113, 56, 77,202,227,163,169,126,127, 93, 26,205, 58,
-207,150, 23,102,209,224, 20, 32,160,198, 21, 25,235, 90,161,214,238,143,172, 52,187, 39,243,249, 56, 40, 1, 15, 70, 9,150,206,
- 64, 24, 36,207, 32, 88, 12,150, 57, 62, 63,229,218, 83,162,215,134,243,210,131, 96,110, 59,131, 57,243,221,196, 21, 41,237,130,
-224, 59,183, 81,222,178,136,178,157, 75,102, 71, 37,156,226,156, 48,115, 77, 93,194, 68,178,108, 99,150, 6, 77, 89,185, 54, 53,
- 51, 78,220,137,139,210,152,229,244, 54, 54, 42,197,206,125,129,137,176,230,226,195,187,236, 92,128,134,225, 66,185,148,145, 51,
-141, 16,155,237,145, 84,114,186,152, 26, 57,218, 32,162,193, 99,160, 55,172,135,145, 76, 87,215,166,128, 40,119, 74, 61, 94, 68,
-117, 70, 94, 29,183,168, 26,181,174,135, 25,209,213,120, 98, 53, 75, 40,241, 96,181,122, 99, 6, 2, 3, 61, 36,235,149, 46, 97,
- 34,202, 30,166,211,142, 69,143,141, 44,230,231, 6,155,253,154, 34,139,103,136,189,224,117, 65,116,207,139, 72, 7, 70,250,237,
-131,185,252,171,137,181,244,137,231,197, 51, 70,107,151,178, 81, 27, 19,244, 88, 16,235, 77,248, 93,203,142,224, 58, 41,202,222,
-160, 79, 16,151,215, 93,160, 6,178,188,161,179,119,136, 72,160,206,160,251,107, 53,116, 27, 33,120,136, 89,192,195,178, 32,217,
-205, 9, 90, 70,150,102,144,219,216,129,189,198,223, 54,209, 97, 37,113, 31,110,151,132, 19, 76, 52,142, 50,203,164,112, 19,231,
- 53,152,104,163,216, 82, 75,225,146,114, 94,172,247,213, 68,153,228,113,230, 32,206,202, 4, 82,152,225,159, 31, 30, 94,170,145,
- 26,203,131,251,155, 92, 59,127, 50,150,112, 82, 97, 4, 50,243,174,139,208, 68, 35,238, 37, 2,157,141,114, 41,110,234, 40,187,
- 6,184, 71, 9,145, 17,114,142, 93, 38,178,219,136, 0, 70, 84,237,104, 86,250, 11,194, 12, 61, 32,175,133,122,228,225,254,249,
-212,212,126, 33,127,244,103,223,147,227,227, 19,169, 22,139,242,246,253,123,242,250, 84,223, 95,179, 88,232,177, 2,197, 8, 8,
-113,231, 53, 43, 26,202,201,201, 51,249,250, 7,111,203,239,254,198, 7, 78,234,148, 89, 89,149,142, 17, 70, 29, 48,254,179,195,
-166,102, 90, 67,117,244, 99,231,168, 52, 43,107,245, 92,246,183, 81,204,202,147,215,175, 9,169, 22, 10,121,214,147,241,244,190,
- 62,231,253,237, 45, 62,215,167,143,159,168,163, 24,134,164, 91,143, 48,184, 27,169, 9, 81,145, 52,181,188, 17,240,127,248,214,
- 3,181, 17, 73,117, 18, 3,218,149,124,218,163, 54, 56,136, 92,152,210,245,209,163,215, 92, 27, 56, 62, 24,245,171,171, 43, 73,
-238,237,241,231, 49,132, 37,167, 25,223,253, 91, 27,114,158, 77, 73,181, 84,146,142, 6, 43,207, 94,239,171, 99,203,144,228,135,
-113,170,176, 53, 92,171, 16, 98,198,191, 19, 81,208,181, 1, 89,111, 50,105, 18, 85, 40,169, 51,251,217,231, 47, 37, 97, 33,210,
-226, 18, 23,204, 97,135,235, 64,105, 21,239,142,243,133,236,115, 66, 78,194, 68,202,133, 20, 19, 26,144,210,138,172,179,167, 24,
- 56,164, 83, 57,185, 85, 72,203,243,243,128,228, 46,236, 95,161,128,122,124, 64,117,180, 82, 54,144, 33,164,109, 33,219,170,159,
-117,103,171,172,239, 91,144, 47,223, 76,229,170, 55,160, 72,203, 89,179,207, 0, 53, 77,101,186, 36, 3, 13,148, 81, 16, 28, 76,
- 32,192,147, 49,204,222,207,186, 3,214,211,103,195,105, 0,162, 0, 90, 47,171,179,174,104, 48,118,121, 53,210, 44,120, 76,123,
-139, 64,167, 8,117, 54,207,146, 63, 0, 22, 58,202, 12, 8, 10, 81,126, 5,138,113, 92, 31, 49, 80, 73, 39, 52,176, 27, 59,157,
-249, 4,101,113,123, 50,208,224,226,178,121, 37,151,231, 39,115,165, 58, 79,131,180,108,190,172, 1, 10, 36,124,251, 82,211,192,
- 97, 56,180, 92, 95,212,239,209,206,215,215,207,245, 66,206, 8,214, 30,173,209, 51,233, 89,227, 57, 17, 27,152,123,100,238,126,
-176,232,192,129, 56,142, 21, 39,217, 75,145, 83, 59,165,252, 46,101,203,225,212,141, 44,228,193,131, 69,249,206, 70, 4,160,162,
-109,193,146,136, 50,232,237, 92,155,222, 44,235,151,196,164,190,151, 96,111, 51, 67,165,189, 5, 4, 63,155,186, 23, 44,117,200,
- 68, 66,129,217,200,242, 27,122,113,111, 16,228,138,232,150, 92,135,175,227, 54,210,218, 88, 2,138, 63, 75, 82,142, 79, 15,205,
-206,206,186,164,245,194, 29, 15, 19, 97,155,148, 99,194,219,233, 76, 62,210, 39,115, 18,211,137, 90, 87,109,201,165,172,148,171,
- 85, 70,247,136,174,222,191,155, 37, 84, 36,226,178,119, 56, 65, 58,245,142,131,134, 86, 86,170,100,179, 66, 2, 81,164,175, 7,
-197,155, 19,131,208,122,132,199,193,197, 45,104, 96,241,238,123,119, 57,217,200, 70,178, 23,137, 79,115,117, 78, 31,144, 78,119,
- 20,146,164, 16, 37, 23,121,176, 47, 27,109, 94, 48, 92, 86, 42,133,133,172,253,216,226,205, 6,134,216,185, 78, 87, 12,254,141,
- 41,199,187, 78,150,185, 60, 35,178, 95,160, 17,254,212, 50,154,191,222,119, 30,201,242,141,189,217,195, 71,235,168,177, 49,171,
-139, 14,129,107,213,218,112, 95,230,168,192, 12, 38,143,138, 7,217,168,115, 55,241,105,105, 75,255,238,130,129, 96, 81,203, 55,
- 18,147,208,141,176,248, 34,232,145,137,193,193,177, 72,115,185,231,222, 51,215,234, 65, 50,143,138, 35,171,102,151,138, 49, 65,
- 84, 84,201, 44,101,202,203, 19,240, 12, 13,212,201,209, 57, 21,189, 48, 8,162,113,121,197,121,195,103,103, 87,204,146, 6,172,
- 1,142,231, 68,207, 40,233, 49,122,245,108,140,109,191, 24, 31, 57, 47,175,124, 69, 59,165, 93,194, 91,108, 76,199, 93, 34,138,
-135, 11,184,221, 70,172,143,177,241,233,108,243,154,251,108,150, 18, 6,121, 16, 61, 11,230,165,175, 39,207, 15, 40,194,242,248,
-241, 51, 57,215, 12,189, 90,174, 74,173,182, 42, 67,117, 92,179,169, 83,147,177, 58,109, 53,196,165, 66, 89, 26,234, 16,155,245,
- 11,146,141,238,221, 90,147,223,250,246, 30,131,116, 39, 56,227,130, 45,126,143,254,255,225,247,190,144,143, 47,213, 24,171, 83,
-171, 85, 87, 53,112, 71,166, 62,145, 85,189, 95, 31,171,195, 70,175,121,173, 90,209,207,159, 50,176, 71,253,117, 85, 51, 94, 12,
- 82,249,226,249, 75,214,165,103,211,198,176,222, 57,206, 37,247,232,156,225,196, 71,236,184, 49,108,121, 75, 91, 48,161,199, 68,
- 5, 82, 89,205, 56, 53, 99,214, 28, 89,218,221,138, 38, 6, 85, 89, 79,128, 84,149,165, 3,235,214, 52,211,108,181,228, 92,179,
-193,157,205, 77,121,247,222, 30,245,222, 3,117, 72,232, 61, 7,108,158,201, 58,238, 14, 50,233, 97,167, 67, 50,111, 6,117,117,
-223,159,151, 89,224,232, 81, 18, 68,224, 1,136, 28, 89,255,154, 62,255,173,141, 18,107,251,147,238,132,157, 61,201, 80,194,213,
- 17,251,140,244,122,158, 58,168, 49,207, 22, 68,117, 96,131, 64,246,202,100, 74,180,113,105,253,249,149, 66, 65, 14,235,125,117,
-180,250, 62, 24, 40,131,245,165,188,106,142,182, 13,236,254, 15,238,108,144,217,141,117, 67,246, 89,111, 13,229,183,190,117,135,
-173,127, 54, 72,211,153,161,167,254,229, 81, 75,159,213,147,247,238,174,202,197, 85, 31, 85,125,126,111, 70,207,120, 49,151, 36,
-162,241,214,173,117,221,219, 33,133, 97,214, 52, 48,232, 14, 38,106, 19, 39,234,200,147,178,181, 86,144,251,187, 85,253,255, 99,
-182,206,109,212,114,186,230, 26,188,233,223,109,106,208,244,233,147, 83,233,168,253,196,249, 27,163,182,238,163, 78,142,251, 63,
- 17,200,229,239,172, 87,100,107, 37, 47,141,246, 64,206, 53, 56, 56,175,159,200,229,133,115,232,197, 98, 69, 10,229, 85,138, 82,
-189, 57,120,163,201,153,238,115, 54,199,247,233,246,251, 92, 51, 48,243,193, 95, 24,105,166, 63,183,141, 28, 32,102, 41, 68, 4,
-255, 0, 84,103, 74,197,188,137,158, 85, 39,126, 4,219, 10,149, 63,182,102, 2,157, 10,249, 92,174,191, 61, 96,201,129, 78,210,
-206, 38, 47, 46, 4,195,108, 68,105,110, 89,179,197, 68,101, 89,151,134,112,153,101,141, 50,123,179, 84,201, 44,177,192,140, 9,
- 4,150,253,254,128,207,214,235,247,216, 98, 24,229, 90, 73, 4,161, 69,201,105,166, 8, 40,255, 38,146,247, 13,237,179,215,219,
- 97,227,227,144, 77, 68, 78, 22,170,130, 73,212, 97, 32, 48,144, 73,134,230,205,247,195,204,192,202, 68,100,222,175,158,152, 15,
- 58, 8,248,119, 38,153,209, 72,207,145,118, 16, 49,115,132, 95,164, 9, 30, 27,131,200, 24,181,120,252, 46,184, 61,254, 36,152,
- 59, 13,141,229, 66, 38,159, 97,180,235, 50, 18, 97,205,205,255,226,181,172,212,202,161, 66,147,157,219,120, 60, 52, 46, 66,161,
-144,149,170, 30,224, 94,111, 36, 31,127,242,132,198,168, 84,204, 73,123,165, 36, 37, 61,188, 47, 95,189,145,221,237, 13, 13, 36,
- 42,252,187,145,126,175, 31,140,213,184,229,231, 78,177,209, 2,115, 53, 29,155,252, 53,159,108,108,100, 62,187,152, 65, 1, 24,
-255,250,189,111,246,207,248,207,189,221,117,214,126,174,244, 18,238,238,110, 92,203,212, 61,207,187, 94, 20,191, 73, 14,112, 57,
-221, 91,154, 29, 30,223,228,136, 35,138,212, 91,230, 26,238,198,196,148,222, 22,162, 48,209, 78, 3,123, 13, 82,166,254,183,137,
-215,200,109,108,200,205, 12,246,241, 98,179, 90,237,117,149,246,165,122,184,137,207,152,183,209, 49,179,230, 90,196, 26,109,233,
-178,177,126, 56,187,120,159,249,120, 71,135,184, 12,251, 26,208, 13,134, 33,184, 97, 72, 92,122,243,234,136,151, 45,229,121,172,
-229, 13,250,221, 57, 28, 15, 24,182,167,153,205,106,173, 60,215, 74,158,243, 48, 99,188,135,136, 54,194, 87, 92,236, 88,184,108,
-227, 64,203,140,193, 62, 47,202,216, 56,226,190,220,105, 97, 77,176,136,180,131,120, 27,205,140,179,130,255,114, 88,137, 56,130,
-209,195, 47, 94,201, 95,252,229, 95,209, 65,109,109,108,170,129,173,168,115,186,160,163, 69,102, 28, 76,135,204,142, 83,233,146,
- 52,175,154,210,106, 54,100,173,182, 34,169, 66,133,181,223, 94,111,151,243, 40,152,113, 37,146,132,223,103,181, 21,100,176,198,
-142,229,131,187,123,242,100, 31,243,201, 83,122, 87, 10,242,209,151, 79,244,119, 47,245,142,149, 92,150,167,107,140,250,244,214,
- 90,141, 80,244,195, 39, 79,195, 81,166, 1,101,102,103,193, 14,209, 82,100,185, 9,103, 63, 60, 23, 33, 19,198,165, 77,161,212,
-168, 39, 95,187,183, 41, 95, 30,156,202,183,191,118, 79, 63, 63, 39,223,255,236,204,177,176,245,247, 71,106,107,122, 26,188,245,
-212, 25, 6,158, 35,223, 66,222,182,221,106, 19,166,237, 7,125,238,111,210, 75,209,217, 57,200,124, 68, 2,159,155, 69,238,130,
- 12, 40,148,161, 65, 2, 83,221,144, 73, 6,234,116,142,142, 79,165,152,201,104, 80, 88,146, 21, 13,122,250,227,134, 35, 90,134,
- 89, 97,187, 59,228, 89, 32, 89, 48, 28, 90,130,145,177, 83, 13, 10,234,245,186,220,217,203,200,174, 6, 25,200,172, 91,157,150,
- 36,130,145,180,122,122, 68,211, 5,126,191,193,124,248,222, 80, 51,218,156, 62,127, 87,142, 27, 85,169,104, 0,243,230,164, 37,
-133,188,218, 25,117, 82,251,167, 29,253,124, 13,124,244, 59,161,174,214, 84,219,210,104, 15, 89, 55,175,150,178, 92,203, 11,205,
-146, 87,139, 89, 25,107, 16, 84, 31,234,154,121,104,241,243,213, 97,231,104,111,223, 92,116, 49, 99, 78,214, 42,154,161,183, 6,
-242,247,159, 28,200,157,237,138,180,159, 57,254,196,116,236,179, 92, 83,215, 64,102,165,148,145,141,181, 34,187, 2,224,106, 90,
-250,157,248,140,132, 9, 97,110,193,216,211,145,188, 26, 5, 82,173, 84,229,217,203,215,154,209,183,184,207,168,247, 23,242, 21,
- 78,163,171, 55,142, 72,116, 76,168, 63, 64,189,189,221, 13, 8,183,131,244,135,117,131, 32, 17,157,177,103, 40, 49,140,254,250,
-188, 56,228, 41,109, 50, 76,164,240,153, 54, 28, 55, 59,147, 14, 54, 38, 19,202,123, 11, 17, 6, 44,253,196, 15,141, 3,248, 9,
- 72, 70,141, 89, 86,145,186, 65,109,244,122,255,184, 93,146,211,142,106,139, 88,185, 46, 50, 54, 23,214,178, 11,210,242,120, 58,
-150,166,158,189, 11, 77, 32, 39, 67,180,237,233,254,106,160,100, 82, 94, 88, 34, 8,207,190,174,249,160, 61,145, 91,187, 80,231,
- 75, 44,148, 73,151, 9, 97, 95, 49, 70,219, 44, 32,233, 24,146, 96, 35, 8,243, 66, 11,211, 77,212, 75,146, 69, 8,199,165, 70,
- 96,181, 48, 91, 35, 7,167,121,179,246,163, 80,180,127,160,155,125, 53,156,146,144, 4, 77,104,127,234, 50, 92, 59, 93,140,200,
-244, 28,180,207,205, 27,170,131,134, 11,199,160, 0,177, 11,162, 83, 16,146,123, 76,224,241, 34, 98,193,209, 82, 1, 65, 6,140,
- 49, 68,187, 7,140,175,120,222, 66,211, 61,180,243,120,174,131,195, 58,165, 63, 69, 47,207,152, 98, 6,206, 48,224,127,199,103,
- 77,194, 73,155, 27,129,164,244, 57, 33,190,240,230,240,146,178,137,189,242,132, 53, 36,212,165, 90,122,235,218,173, 69,160, 48,
-229,164, 35,111,238,192, 65,176,218, 85,231, 61,251,238, 47, 63,127, 45, 47, 94, 30,235, 5, 94,147,195,163, 11,110, 44, 38, 48,
-237,239,159,204,197, 83,102, 9,214,157, 59,155,140,134,173,253,138, 30,242,101, 6,121,204,129,199,137,102,209, 49,171, 86,162,
-195, 1, 34,172,121,107,150,209,245, 5, 49, 46, 50, 45,205, 44, 53,137, 71,107, 58,241, 32, 99, 73,162, 48,142,105,197, 53,203,
-163,242, 66, 81, 65,249, 88,155, 98,156,133, 31,111, 2, 95,234,255, 51, 86,110, 84,223,181, 38,142,232,163,183,117,228, 84,204,
-102, 45,148, 48,238,109,205, 72,179,154,217,193, 24, 94, 92,180,113, 56,217,142, 53,251,138, 78, 71,157,188,217,226,223,207, 32,
-192,248,140,244,133, 94, 66,172,197,208, 46, 41,199, 68,200, 53,177,234, 66, 76, 98,121, 25,159,183,145, 14,151,133,212,165,157,
-149,136,194,139,106,194,126,243,152, 30, 65,128,250,243, 84,157,249, 51, 57, 57,189,144,163,195, 55, 82, 81, 99, 91, 2, 81, 75,
- 13,106, 71,207, 60, 51,109,102, 48,122, 71,211, 89,174, 73,171,221, 97,182,190,183,183, 45, 94, 42,203,172,116,111, 67,239,238,
-196,245, 33,227, 63,147,209,104,142,104, 97, 13, 49, 3,252,238,102,153,179,210,247, 53, 43, 71, 6,254,217,243, 19,117, 50,112,
- 66, 89, 6, 23, 56,242,128,209,119,214,215,104,116, 31, 61,127, 65, 29,113,102, 35,129, 11, 66,238,108,109,145,241,254,226,224,
- 80,239, 67,154,164,169, 76, 90,157,103, 54,199, 80, 29, 78, 21,159, 3,118,253, 84, 51, 84,192,198,119,182, 87,137,178,129, 16,
- 6,152, 61,233, 37,169,130,214,133,238,248,196,169,150, 65,146, 54,151,201,242,110,172,104,128,145, 83, 67,250, 98,255,141, 52,
-219, 93,218, 30, 40,227, 5,190,204,225,208, 22,246, 92,255,137, 30,121,172,175, 38,142,180, 73,198, 58, 49, 23,100,137,245, 86,
- 75,157, 99, 81,166,186,102, 59,171, 85,121,125,222, 33, 76, 12, 18, 26, 83,144,233, 98, 56, 10,178,180,209,176, 43, 9,235,166,
-194, 65, 28, 6, 12,116, 56,183, 98,118,160,129, 38, 52,242, 53, 99, 50,110,130, 26,130, 25,172, 21,100,110,119,213,200, 62, 59,
-184,148,111,222,171, 49, 1, 41,229,211, 18,232,239, 23,192, 91,208,164,163,217, 25,177, 29, 16,240,254,230,138,218,194,113, 64,
-231, 95,201,123,146,212,239,235,168, 93, 76, 38, 29,123,124,164,142,229,170,163, 25,241, 8,202,125, 9,118, 50,116,193, 38,199,
-224, 26, 61, 83, 95,236, 55,100,167,173, 1,130,254, 15, 89,120, 83,207, 2, 84,230, 14, 47, 59,236, 3,207,235,222, 64,244,165,
- 55, 30,206,135,189,120, 33, 50,130,217,246, 40,131,100,114, 5, 77,146,158,179,125, 15,237,136,107,107, 91, 84,166, 67,231,194,
-101,189,193,150, 61,160, 30,224, 85, 36, 67,153, 91,236, 39, 80,147,182,218,113,148,120,136,116,192, 17,250, 78, 17,175,233,185,
-121,240,213,162, 37,153,111, 26,254, 57,124, 6, 2, 74, 55,212,197, 13,214,113, 53,119, 87,122, 2, 97,251,214,206,102, 56, 98,
- 54, 8,199,192, 46, 74,122,179, 65, 84,179, 33, 86, 51,231, 53, 75, 52,231, 29, 72,102,121,126, 72, 4,142, 23,179,108,222, 34,
-253,231,139,174,166,114, 33, 39,181,138, 38, 7,114, 32,195, 30, 74, 8,105,185,255,246,186,120,153, 68, 12,145,156, 14,244,172,
- 52,204,124,178, 96,156,214,228,197,179,241,175,152,129,229,236,166, 23,111, 83,142,149, 48,163, 19,221,146,146, 44,105,228,119,
-120, 12, 69,162,156,100, 43, 9, 70,204, 94, 56,228,221, 80,153,202,103, 36,133,218, 14, 46, 47, 34,116,168, 21,169, 55,149, 96,
- 62,143, 62,136, 25,108, 63, 28,223, 10,120, 15, 3, 24,178,186,113, 9, 73,196,134,116,204,106,154,190,239,218, 71,112, 88, 61,
- 31,117,170, 73,136, 10, 24, 58,105, 28, 20, 64, 78,184,124,136, 41,201, 4, 69,180,169,135,170, 92,192,208,137, 36,167, 29,129,
-252,210,214, 15, 47,228, 51,100,168,226,123,241,243,104,187,192,112,134,164, 30,212,171,102, 75,186,250,119, 38,156,116, 4,209,
- 7, 9,167, 23, 5, 24,146,128, 72, 74, 13, 11, 32,200,179,211, 62,163,236, 74, 21, 36,154,161,156, 93, 92, 73, 38,159,119, 4,
- 64, 72, 98,226, 50, 99,157,208, 74, 21,238, 0, 2, 73, 7, 37,249,132, 91,102, 48,137, 49, 54, 62,131,126,169, 14,111, 99, 83,
-190,162,179, 89,162,117,123,115, 3,106, 51,107,217, 88,130,215, 99, 78,202,139, 8,230,132,115,205,163,196, 63,137, 79,157,155,
-205,142,191, 62,113,111,137,146,191, 16,100,143,212,200,189,120,176, 98,150,116,240,231,173,117,161, 80,195,108, 30,180, 93,240,
- 84,162,164,194,216,168,193,144,240,226, 25,215,145,129, 78,139,148,103,231,147,155,156, 83, 82,227,138,218, 33, 38,114,105,180,
-127,113,126, 37,107,171,121, 55,231, 58,194, 52,197, 30,225,115,231,170,136, 54, 26,180,196,251,216,237,141, 19,219,100,105,220,
-128,141, 13, 9,138, 50,219,163,226, 23,179, 79,247,162,159, 28,138,105,152,104,177, 62,116,238,214,193, 11,116,146,208, 34, 7,
- 67,253,103, 31, 61,148,159,127,250, 80,110,109,238,200,238,246,174,212,213, 97,157,212,207, 93,221, 24, 78, 82,215,160, 84, 40,
-114,208, 72, 11,164,175, 97, 79,214,107, 53, 18,191, 14,224,160,213,224,130,217,140,207, 4, 9,118, 20, 6,245, 51, 36, 12, 66,
- 46,165,156,102,126,131,169, 60, 63, 56,146,213,106,133,217, 58,140,109, 49,235,132, 99, 16, 60, 32, 8,222, 89, 91,165,163,126,
-166, 14,213,132, 58,243,128,215,177, 71,187, 27,107,250,187,101,190, 41, 2, 92,160,121, 62,121, 57,152,149,221,155,215, 91, 55,
-106, 43, 36, 98, 5,182, 68,155,241,246,222, 6,137,120,245,171,190,164, 0,221,103, 83,250,239, 45,169,149, 80, 90, 25,202, 85,
-171, 67,187,130, 47,172,228,112,158, 82,114, 54,246,216,206,133,255,160,141, 44,151,118,210,176, 25,116,224, 36,167,180, 79,176,
- 15,248,254,137,239,132, 78, 0,189, 99,248, 12,178,125,200,145, 54,244, 59,240,187,128,234, 43, 26, 40,108,215, 50, 20,186,169,
-234,207,116,200, 14, 31,145, 92,134,179,155,162, 67,117, 83,209,192,224,135, 6,124, 38, 93,228,188,242, 46, 62,123,224, 70,157,
- 14,135, 30, 33,102, 12, 96,153,248,234,184,141,144, 83, 80,211,172,174,170,206,112,162,217,118, 91, 19, 31, 40,206, 13, 53, 83,
- 78,123, 83, 14,177,153,176,164,153,166, 29,201,167, 60,182,117, 53,219, 99,217,168,130,252,168,118,105,106,136,178,160, 20, 74,
- 2,153, 26,158,157,181,138, 62,107, 74, 51,244,190,116,212,137,239,109,175, 72, 94, 3,134, 87, 7,199,114,222,236, 73, 95,179,
-200, 84, 42, 47,109, 13,112, 11,105, 67,153,215,147, 78, 67,159,219, 99,128,135,214,102,188, 23,190, 23, 76,169,141,173, 93,182,
-141,189,126,253,132,115,233, 49,122,182, 88, 40,107, 32,162, 1,207,209, 1, 5,140,128,222, 32,241, 66, 57, 5, 78, 23,237,135,
- 8,188,160,104, 87,212,239,232,170,221, 30,235, 58,244, 56,194, 86,120, 15,189, 16,210,197,253, 69,217,204,141,142,245, 67,219,
-144, 96,112,226, 38,215, 25,126, 46,246, 3, 35, 70, 49,187, 30,147,252,170,229, 82, 56, 84,199,196,245, 60,108,180, 76,182,140,
-140,218, 56, 44, 62,211,136,240, 34, 51, 38,196, 92,235,242,137,183,176, 93,103, 64, 1, 69, 67,160, 13, 73,219,177, 63,224,119,
- 32,209,139, 14,186, 68,187,163,111, 37, 54, 20,202, 26,185, 38, 45,123, 61,113,139,203,138,155,136,210,231,204,118,219,144,115,
-179,144, 4,119,118, 46,137, 26, 5, 28, 39,160,202,122, 87,163,201,222,148, 15,139,195,132,108,252,180, 53,224, 2,239,213, 52,
-170,204,185,105, 77, 57,195, 95,116, 99, 90, 77, 98,193,250, 54,174,141,173,169,145,117,103,132,133, 79,242, 48,128,132,129, 77,
-152, 43,252,132,227, 90, 73,138,163,244,104, 64, 53,176,171, 0, 6, 24, 25, 54,106, 71, 73, 14, 56,240,209,247, 30,104,164,222,
-109,169, 99,206,169, 65,209,131,151, 79, 16,170, 9,104,240,220, 48,129, 92, 6, 44,205, 62, 47,212,202, 74, 73, 51,148,190,252,
-232, 71,159,234,101, 55,178,154, 25,139,237,118,121,121, 74,217, 42, 73, 47, 12, 62,188, 41, 15, 11,140, 78, 74, 35,247,156, 23,
-112,113,187,250, 59,117,189, 56,152, 46,212,105,117, 24, 85,110,174,151,216,122, 35,120,127, 24,169,108,130,151,192, 70,216,249,
- 35, 64,253, 54,203,236, 4,181, 92,108,120, 10,253, 45,179,177,174,193,178,195, 8, 35,174,104,155, 89,180, 94, 30,137, 44,151,
-199,180,152,200,140,117, 27,149, 34, 53,179,129,229,241, 62,250,184, 92,161,137,147,222, 98,114,175, 75,125,250, 17,146,198, 53,
-216,202, 46, 8, 32,174, 47,221,198, 52,254,231,239, 97,231,183, 96,161,232, 52,155,137,104,163, 35,225, 76, 76,109, 47,170,246,
-196, 72, 94, 29, 8, 50,244, 55,175, 14, 53,168,107,176, 46,135, 31, 69,107, 27,158, 14,181, 91, 33, 12,143, 22,174, 33, 51, 54,
-150, 23,172, 27,179,137, 79, 29,170,225,126,244,233, 99, 70, 17,247,238,223,161,168, 71,194,187, 89,143,125, 62,177,205, 68,155,
-210,110,170,183,153,249,197,154, 59, 99,179,188,110, 54,146,224,219, 88,171, 5,156, 67, 32,145,187, 49,107, 19, 13,107,220,205,
- 78, 79,158, 60,127, 41,159, 62,124, 44,199,199,199,178,171, 14, 29,242,173, 29,214, 44, 7,100, 27,131, 89,140, 59,153, 77, 57,
- 81,143, 78,175, 43,211,209, 64, 29,250,170, 12,245,221,143, 47,206, 28, 3, 28,189,205, 24, 32,130,222, 99,127, 26, 27, 12, 49,
- 11,206,159, 31,157,203, 90, 70,239,161, 58,198, 95, 60,217,159,171,126, 1, 22,245,195, 64, 21,164,184,102,167, 35, 47, 15,143,
-233,224,209,174,138,146, 21,248, 11,123,234,208, 79, 46,234, 82,111, 94, 81, 49, 14,246, 3, 91,191,161,193, 5, 2,117,100,197,
-200, 6,161,124, 7,225, 20,216, 16, 4,238, 80,115, 91,173, 22,244,121,125, 57, 62,221,151,237,245,138,102,178, 5,121,245,226,
-133,124,231,195,119, 53,243,235,201,243, 55, 66, 70,246,101,179, 33,159,126, 94,167,125,185,119,255,125, 89,201,170,179,242,198,
-242,224,237,175,201,163, 47, 31, 75,255,234, 74,126,247,183,127,147,109, 89,135,103,167,210,235,245,249,238,232,101, 95,175, 85,
-244,121,179,234,252,211, 52,131,231,234,208, 97, 27, 32,136,130,254,122,100,154,191,241,222,134,124,242,234, 74,179, 94,203,174,
-129,158, 6, 1,190,113,228,193, 2,230,126, 87,179,225,190, 99,109,175,228,155,171,101,169,106, 0, 4,100,228,249,171, 14,231,
-157, 55, 7, 19,202,203,118,244, 25, 18, 26, 16,109,175,100,168,176,246,245,183, 54,228,238, 78,133,109,119,191,241,205, 93,217,
- 63,186,144,239,253,252,137,124,253,222,170,148,179,129,124,231,151,238,145,117,127, 82,239,200,211,215,151,212,139, 71,208,243,
-238,253, 85, 25,232,239,163,190, 14,221,253,163,147, 75,217,219, 44, 72,123, 96,101,165,130,224, 36,173,207,150, 32, 28,127,217,
- 26, 49, 16,217,212,231,220,168,100,229,214, 70, 69,250,186,221,159,191,106,200, 84, 29,251,118, 45, 39, 67, 77,204, 32, 34,100,
- 36, 35, 71,141,126, 56,124, 39, 45,165,202, 26, 75, 54,151, 23,167, 60,147,153,108,145,100, 56,112, 9, 94,237,191, 34,191, 1,
-234,121,216, 87,236,183,245, 32,239,154,100, 80,131,172, 26,189,242,176,195,255,228,155, 59,178,165,207,245,175,126,112, 32,125,
- 13, 36,209,222,136,191, 7, 90,179,185,190,206,128,174,213,109, 59,114,151,254,126,150, 2, 71, 62, 81, 17, 12,216, 41,106,112,
- 74, 93,129, 96,192,231, 40,151,215, 92, 11, 94, 52,129,177,145,182,228,136, 32,215,141,202,152, 75, 35,148,237,172, 76,102, 22,
- 9,137, 89,230, 16,221, 84, 90,156,143,165,118,115,239,173,254,111,164,107, 25,181,143, 51,155, 26, 83, 3,137,240,111,230, 45,
-171,198,196,135,141,155, 40,243,254, 26, 22, 26,231,108,217,229, 18,160,243, 49,201,110,187, 69, 66, 67,171,171, 81, 80, 33,173,
- 14,121, 76,226, 74, 90, 55,106,165, 82,100,212,152,176,110,228, 34,234, 61,200, 76, 17,229,181, 39, 14,158,247, 18, 83,126,102,
-127,236,115,193,203,185, 20, 51, 88, 68,126, 40, 74,225,128,193, 88, 4, 97, 61,221, 70, 12, 29,231, 3, 39, 92,127,229,192, 79,
- 75, 54,167,145,125, 94, 55, 82, 55, 61, 16,167, 94,149,148,137, 60,184,157,144,195,195,177, 28,235, 51,230, 52,170, 46,151,146,
- 46, 3,245, 22,132, 57,212, 83, 81, 34, 0,204,212,239, 97,154, 84, 94,146,128, 94,213,127,107, 12,202,140, 4,181,156, 85, 76,
- 57,210,200,113,140, 58,157, 26,190,188,102, 2, 65, 10, 4, 24, 95, 90,228, 23, 36, 57,241,139, 65, 75, 98, 33,224, 2,227, 90,
- 72, 25,102, 56, 45,189,172,122,183,164,168, 23, 8, 63, 59, 82,231,130,127, 71,112,132,136, 21,204,235,179,243, 22,219, 68,138,
-124,127,145,180, 30,130, 74, 49,171,193, 67, 33, 60,152, 54,174,148,182,172, 77,234, 69,218, 35, 66,104,214, 46, 59,244,136, 3,
-193, 72,193,216, 28, 99, 49,145,233,236,230,186,182,254,204,127, 90, 23, 28,129,108,152, 43,100,221,140,223,101,213,178, 25, 33,
- 46,114,250, 2,187,136,120,249, 28,190,107, 29,138, 77, 34, 9,159, 25,107,130, 0,142,117,236, 16, 70,138, 30,220, 40,211, 61,
- 58,211,216, 70,234,212, 80, 43, 59, 57,185,160, 3, 65,205, 54,160,131,242, 73,178, 4,137,169,223,159,178, 23, 55, 5,102,103,
- 56, 14, 50, 8,131,142,217,229, 66,143, 46,249, 29, 28,228,224,203,203, 23,175,249, 93,119,238,221,162, 54, 54,201,148, 54,218,
-194, 98,227,115,237,162,206,120,121,152, 66,164, 7,214, 70,144, 25,187,204,137,159, 5, 65, 17, 45,129, 5, 68, 24,132,235,230,
- 70, 90,162,230, 60, 30,141,229,203,167,251,242,127,253,233, 95,145,140,115,231,214,109, 42,154, 61,126,245,134,140,117, 8,167,
-248,193,100, 78,242, 4,196, 10, 78, 1,132, 74, 42,149,178,116, 71, 35,194,215,236, 81,214,115,143,225, 37, 24,255,137,223, 75,
-167, 18,139,185, 13,225, 90, 1,246,188,191,187, 33, 91,234,152,255,199,255,237, 47,233,120, 65,102, 66, 16,128, 44, 30,251,243,
-206,222,174,156,104,118, 10, 7, 57,101,109,221,213, 10, 1,151, 3,210,197, 20, 46, 50,158,189,188, 58,161,161,203, 2,209,127,
-238, 37,230,229, 46, 87, 94, 8,244, 51, 46, 25, 0,151,242, 21, 6,255, 84, 86,227, 40, 78, 95, 30, 61,254, 92,126,235, 55,255,
- 45,102,170, 7, 71,135, 82, 93, 89, 35,225,113, 74,190,132, 6, 51,186,159,121, 93,139,149, 86,131, 14,245,241,227,231,178, 59,
-184, 79,134, 58,116,201, 49,206, 19, 25,123,202, 75, 73,185, 80, 98, 16, 4,196,227,224,164,206, 41,107, 91,186,231,174,190,111,
-152, 89,163, 55,189,144, 44,176,198,125,222,158,200,239,124,109, 93,254,135,255,247,139, 80,218,214,184,102, 39, 12, 34, 25, 91,
- 14,168, 73, 37, 72, 50,114, 25,219,212,113, 25,128,132, 96,178, 92, 90,239, 67, 38, 83,228,160, 98, 4, 69, 96,202,111,130,116,
-214,156,104,182, 61,146, 67,175, 35,207, 14, 91,242, 23, 63,121,193,132,101,160,153,250, 71,159,237,171,237, 12,228,211,151,117,
-121,239,254, 45,217, 88,201,169,131,180,242,247,159,190,228,204,250,131,243, 54,137,111,245,206, 88, 78,207,235, 44, 51, 54, 58,
- 35,194,218, 15,159, 31,202,222,214,170,126,247, 88,186, 3,159,123,182,183, 81,166,227,218,191,232,203, 71, 47,234, 68, 88, 1,
-247,247,134,174,134,142,123,254,232,176,173, 54, 47,193, 18, 65,181, 88, 85,251, 90,150,102,253, 76,154, 26,120,161,204,128,131,
-177, 94,168,134, 78,249, 76,223, 41, 67,210, 51,126,121,200, 44,213,205, 1, 65, 89, 19,182,113, 66,229,184,130, 6, 74, 61,185,
-236,106, 50,165,123,250,254,253,187,114,126,121, 41,221, 78,147,172,250, 15,223,185, 39,111,221,127, 79, 3,166,190, 6, 64, 3,
-153, 0,138, 71, 25, 73,239,228,149,238, 37,208,215,245,218, 29,217,220,218, 97,208,138, 63, 67,208,250,107,191,242, 77, 58,127,
-172,115,172,220, 53,183,151,222,156, 16,103, 77, 92, 33,222,218, 40,207,103, 73,206, 91,188, 88,223,185, 89, 78,104,110, 84,238,
-116, 63,131,210, 75, 64, 50,104, 58, 14,154,135,207,224,134,198, 44, 79,151, 52, 95, 49, 10, 34, 62,161,211, 68, 71,110,135,195,
- 79,230, 36,250,104,146, 16,101,201,227,153, 96,224,144,185,130,200,129,168,181,168, 17,166, 7, 21, 31,245,134,165,148, 71,225,
-127,102,194,186,235, 32, 70,192,201, 79,130,132,188,185,104,211, 72,230, 52, 66,174,170,243,111,247, 28,252,133,190,210,205,149,
- 34, 97, 22, 76, 43,202,231, 51,172,223, 64,249, 41, 74, 67,162,208,133,157,240,114,183, 90,122,217, 2,143, 4, 17,252,103,152,
-157,208,112, 99, 46,242,175,189,149,146,149, 53, 79, 15,210,170, 84, 14,166,242,250, 74, 23, 80,163, 95,182,165,232,101,177,225,
- 32, 26,147,208, 40,218,104,180, 14, 88,214,128,121, 26,112,226, 79, 73,131, 0, 61,227,146, 72,229,245, 82,143,101,191, 49, 36,
-188, 83,215,239, 68, 0,240,222,158,102, 6,122,209, 59,163, 64, 6,234,233,135,212,120, 54, 52, 30, 24,161,136, 90, 25,135, 48,
-162,198, 7,134, 99,209,177, 24, 47, 59, 67,205, 2,146,252,110, 12,159,152,228,146,236,231, 5,145,103,255,211,231, 78,205, 73,
- 15,103, 67,179,125,212,153,238,173,166,169,211,219,186,210, 0, 67, 63, 16,151, 46,157,116, 61,213,211, 32, 8,245, 84,220, 65,
- 75,120,238,112, 78,125,103,224, 89,254, 72, 37,231, 92, 9, 39,141,234, 28, 20, 29,156, 56, 70, 47,202, 5,126, 96,230,228, 70,
-182, 28, 34,114, 11,191, 39, 42,129, 56,107,237, 2,148,138,118, 25, 64, 97,133, 98,142,234,129, 32,202,112,156,169, 15,195,149,
- 8,201, 78,193, 28,234, 70,182,229,121, 94,132, 17,238,218,253, 90,189, 17,191,143,229,155,192,213,133, 29,193,203, 25,254, 57,
-194,111, 28,151,194,134,159, 51,239,200,243, 28, 3,219, 51,241,161, 56, 36,109,194,224,234,122, 90,244, 14,123,102,254, 60, 40,
- 7, 65,148, 98, 38,208, 80, 43,166,165,161, 78,110,224, 59,193,149,153,178,214,236,217,177,166,181, 74,142, 89, 1,107,191, 32,
-207, 53, 26, 50, 80, 35,150, 47, 21, 25,152,205,222, 55,166,128,103,221,243,217,144,137,238,234,128, 94,184, 22, 11,236, 44,176,
-193, 82,123, 74, 68, 99, 62,176,225,251, 58,226,207,156,126, 16,216,249,122,216,240, 44,160,142,253,147,143, 31,202,207, 62,250,
- 5,201,163,169,116, 65, 86,107,235,108, 9, 5,148,156,240,156, 2, 25, 36, 95,177, 71, 35, 14, 65,113, 72, 18,222, 19,173, 97,
- 29, 4, 5,250, 57,112, 86,248,157, 77,205,148,241, 44,109, 61,199, 18, 50,223, 57,202, 50,132,237,112,214,144,169, 65, 16,228,
-201,211, 23, 52, 21,172, 79, 19,114, 78,146,189,190,187,190, 42,231,186, 94,205,171, 54,127, 30, 1, 2, 69, 93,134, 67,190, 27,
- 32,237,102,187, 61, 47, 33,160,150, 60, 0,140,170,207,218,247,134,116,128, 56,223, 65,216,166,135,191, 7,241,110, 50,117, 1,
- 13,222,107, 69, 3,114, 4,219, 9,111,196,103, 67,191,116, 91, 13, 59, 68, 72,132,103,222,104,162, 49,226, 72, 82,220,131,118,
-187,231,186,103,198, 19,102,167, 57,117, 42,157, 94, 71, 94,189,126, 35,247,238,190, 69,113, 26, 32,121,157, 30, 90,251,178, 12,
-246, 97,107,208, 18, 88,171,150, 88, 43, 6,227, 59,229, 57, 43, 12, 2, 90,189,111, 24,248,127,251, 94, 89,126,248,184,161, 1,
-121,129, 48,244, 88,127, 46, 0, 83, 91,223,161, 6, 54, 59, 50,226,112,124, 40, 85,235,194,129, 75,184,171, 32, 42, 66,165,207,
-122, 78, 16, 9,123,129,243, 2, 7,120, 9, 54, 59,148,247,114, 57,205,166,171,228,161, 2, 73,112,136,146,149,134, 58, 69,128,
-124,216, 11, 55,227,126,172,137, 70, 74, 14,207, 59,242,141,251, 43, 18, 12,147,242,253, 87, 77,169, 20,242, 82, 43,231,116,189,
-138,154, 88, 9,145,129,169,102,182, 40, 63,226, 93, 64,128, 78, 27, 61, 39, 6,226, 65, 25,214,236, 65, 36, 68,219, 28, 80,142,
- 44,208, 44,253,239,237,237,109,117,244, 3,121,179,255, 76,247, 69,223,207,100,165, 84, 46, 81,145,240,162, 89,151,118,167,165,
-107, 80,230, 0, 28, 6, 48,227, 73, 88,242, 74,208,142, 13,212, 6,142,135,125, 41,230,243, 12,222, 32, 30,115,114,209,146,119,
-190,241, 43,146,104,141,229,224,248,140, 1,249,215,222,126, 71,254,219,127,249, 95,201, 31,255,229,143,229,226,197, 57,231,204,
- 67,243,189, 90,204, 75, 87,247,172,165,123,249, 95,255, 23,255, 66,110,221,190, 35,127,250,231,127,207, 82, 9,234,247, 27,171,
- 21,185,125,239,182,171,179,207, 21, 47, 29,100,191, 12,173, 71,239,222,156,241,238, 45,156, 58,248, 6, 94, 12,117,244,226, 42,
-155,209,233,144,215,185,176,243,182,101,218, 37,125, 28,216, 18, 79,207, 92, 92,152,195, 57,221, 41, 64, 6,207,139, 12,139,138,
-182, 74,155, 27,218, 99,163,156,162, 72,170, 23, 97,219, 70, 21, 48,231, 5, 67,187, 64,114,147, 59,219, 59,114, 75, 47,107,167,
-117, 37,232,140,128,204, 99,169, 92,113,189,222,232,107, 4,148, 12,225,127,117, 86,245,246, 0,179,249, 36,227,217,121,182,137,
-168,137, 19,133,172,157,143,185,116,189,135, 62,179,191, 65, 95,163,247,146, 58, 66,153, 25,241, 80, 25,203, 15,230,147,215,134,
- 26,113, 62,127,209,145,188, 70,179, 43, 26, 65, 59,109,102,212,179, 60,201,127,107,155,108, 87,172,251,246, 94, 94,142, 59,174,
-150,239,135,125,138, 41,246,103,186,232, 10, 53, 86, 56, 97, 56,109,148, 14, 70, 80,237,153, 36, 53,179,201,176, 79,179,232,101,
-230, 89,110,217,100,164,161,135, 5,223,211,212,247,186,226,231, 26,233,144,124,147,167, 35,192, 1,178,118, 26,206, 60,134,160,
- 78, 78,134, 96, 23, 90,143,117, 75,212,131,144,129, 67,227, 26,141,208, 93, 40,236,106, 96, 1, 59,215, 31, 78,165,152,182,156,
-206, 4, 71, 81,170,160,103, 86,191,187,133, 94,207,161,171, 21,205, 54, 56,176,115,136,121,198, 30,134,163,135,118,192,118, 45,
-205, 11, 9,105, 76, 32, 20,248,115,182,129, 80,143,223, 57, 83,143, 25,208,148,217, 39,222, 7, 4, 68, 56,246,148, 73,134, 2,
- 14,206,144, 98, 79,156,248,135, 13, 37,121,221,104, 68, 64,104, 88,151, 78, 71,191, 55,147, 33,235, 23,198, 28, 37, 25, 60, 16,
- 50, 97, 63,100, 20,131, 17,139,125,135,206,243,130, 43,102,121,112,129,150,192,185,164,216, 7, 28,204,161,121,252, 59,227,225,
- 25,100,133, 58,227,196,149,121, 16,156, 97,224, 4,214,158,207, 24,170,151,113, 61, 66,168,140,228, 39,212,217,248, 28, 66, 4,
-197,134,235,229,186, 49, 28,169, 6, 65, 38, 68,182,144,121, 32, 99, 97, 80, 17, 58, 15, 56, 81,188, 67, 94,247, 16, 81,117, 74,
-131, 63, 12,207,192,247,228,114, 30,141, 84,235,178,206,231, 33,164,207, 86, 36,215,201,128,160, 4,223, 5, 77,133,153,144, 6,
-213,190,244,222,248,126, 16, 81,119,114, 23,221, 44, 17, 0,231, 36, 52,124,142,231,184, 34,206,145, 91,135, 84,205,100, 88,233,
- 28, 70, 92, 27,236, 73, 3,138,105,154, 13,215,214, 55,100,109,117,141,146,163,251, 7,111, 88,246,154,114, 22,131,199,224, 27,
- 40, 20,126,158,129,158,113, 18,176,221,161,203,208,113, 78, 96,224,183,215,214, 8, 91,159,170,147,185,189,145,115,103, 46,225,
- 36, 78, 41, 22,162,207,133, 51, 9,196, 7,223, 83, 78,185,154, 35,214, 21,225,216,189, 59,219, 92,255, 87, 71, 39,148, 33,117,
-123,232,133,100,178, 17,223, 15, 89, 51, 74, 96,168,133, 98,143,208, 95, 13, 7, 64,146, 19,116,187, 83, 32,174,118,249,236, 73,
-246, 94,143,168,234, 86, 0,233, 45, 20,188,130,131, 40,105, 34, 0,110, 35,166,132,225,172,229, 53,152,203,161,198, 28,158, 71,
-172, 47, 62,171, 63,238,234,154,141, 72,238,234,247,186,148, 49, 5, 11,219,234,159,165,117,159,161,204,134,128, 36,147, 54,236,
-193,207,101, 11, 28, 89, 26, 76,251,172,235,131, 15,208,233, 13, 36,171,209, 63,156, 33, 96,119, 64,196, 67,245,230,111,223, 43,
-200,243,179, 49,207, 74, 41, 11, 36,168,205,192,148,221, 52,161,176, 76, 55,225,218,178,128, 76,162,142,141,150, 46, 42, 25,122,
- 38,218, 24,202, 90,126, 41,159,160,218, 28, 72,192,131, 98, 95,142,207, 7, 36,146, 97, 32, 12,158, 13,109,108,232, 67, 7, 23,
- 34,173,137, 20, 16, 40, 48,254,145,112,149, 10,105,158,123,148,255, 96, 67,176,159, 69,125,102,116, 45,161, 36, 53, 28,161,247,
- 92, 19, 8,116, 2, 52,156,204, 45,158,227, 92, 19,138,146,254, 92, 70, 19,156,222, 4,101,143, 30,207, 27,201,130, 67, 39,241,
-141, 50, 72,185, 92,147,163,179, 11,125,135, 6,237, 39,130,213,205,141, 13,206, 77,248,242,201, 19, 18,239,118,214,107,212,244,
-199,249, 31,133, 53,114,236, 33,212,225, 74,165,130, 92, 93, 53,201,223, 0, 9,178, 11,142,132, 62,240,189,237,162,148, 50, 9,
- 57,215,243, 80, 0,177,172, 88,212, 36, 47,207,238, 37, 4, 70,232,122,130,133,200,132,179, 67, 96,187, 16,104,228,178,121,183,
- 31, 32,252, 5,238,156, 67, 64,106, 93, 3, 48,236,209,172,251, 37,202,211,137, 13,139,186, 54,174,195, 44, 77,201,180, 50,211,
-175, 52,177,142,156,165, 30,247, 57,183,199,196,100,221,103,208, 58,108, 40,202,188,201, 90,145,220,132,155,219,101, 92,146, 21,
- 19,208,138,242,110,110, 8, 26,162, 66,159,241, 46,163,235,172,248, 64, 36, 38,187,205, 41,109,249, 82,133, 47, 9,242, 12, 90,
- 70,178,136, 10,199,129,187, 64,112, 24, 24,110,159,112,112, 58, 88,182,232, 11,197,248,197,146,102,166, 57, 68,129,154,205, 23,
-244,224, 96,131, 17,161,101, 83,110,154, 27, 28, 97, 64, 77,228, 33,127,118, 4,197,163,165,218,101, 34,112,112, 45,156,199,148,
- 80,106,129,237, 58,208,169,166,212,161,100, 56,118, 49,149, 71, 93, 62, 45, 9,125, 54, 48,155,209,107, 73, 71,149, 74,203,204,
-234,231,245,192,129, 17, 11, 86, 51,178, 86, 56, 20, 56, 52, 47,225,160,122, 40, 70, 77,194,137,116,200,130,144, 81, 31, 28, 53,
-244,192,251,148,124, 68, 61, 22, 61,158, 1,201,117,234,144,225,153, 81,199,133, 65,246, 93,223,111, 86,223,117, 20, 24, 42, 54,
- 37,209,122, 50, 24,211,145,108,111, 86,248,123, 29,141, 86,225, 44, 40,207, 56,181, 33,121,200, 93,240,193, 16,106, 81, 30, 7,
- 46, 64, 67,122,193, 31, 91,192,233, 54, 12,164, 32, 76,145,228,123,120,243,104, 14,138,125,121,223,149, 28,240, 94,168, 39,159,
- 94,118,157,222,118, 42,233, 74, 16, 96,137,134,159,137,231,193,197,200,146,141, 25,132, 36,138,144,168, 21, 18, 20,135,106,128,
- 77,224,179,191,214, 61, 66,160, 65, 88,159,129, 8, 8,148,128,215, 58,122, 65,161, 50, 5, 24, 17, 66, 35,128, 91,199, 36,131,
-244,245, 32, 39,169,173,141,142, 4,100, 61,100, 5,235,239, 96,128, 6,156, 29,116,159,225,100, 26,152,182,229, 9,141,144, 46,
- 23,231, 66, 23,210,174,164,131,200, 63,163, 1,201, 32,156, 54, 68,189,246,148,211, 8, 55, 97, 48, 98,216, 91,148,152, 11, 85,
-224,124,206, 90, 44, 19, 32, 63,141,156,227, 65, 16, 5, 18, 92, 65,207,101, 73,143,198,180,144,118,194, 40,190, 11, 97,200,162,
-213,239,196, 89, 60,211, 8,140, 14, 36,141, 50,204,128, 90, 13, 54, 36,191, 56, 84, 33,152,247,155, 7,243,113,141,193, 92,161,
-106,166,197, 15, 71,135,115, 62, 47,169,204, 80, 16,207, 17, 75, 19, 9, 23, 20,204, 90, 97,130,208,193, 51,172,194,249, 52, 73,
- 58, 63,234,111, 35, 96, 64, 48,167,153,240, 15,126,250, 51, 78,208,170,174,109,161,249, 83,206,235, 77,117, 56, 87,122, 15, 7,
-116, 84, 21,102,183,150, 78, 9,159, 53, 30, 15,217, 23, 93,212,251,220, 66,175, 53,246, 9, 26,225, 19, 16,172, 86,248,108, 16,
- 14,129, 12,236,132,142,118,170,123,147,156, 51,105,145,133,194,116, 12, 39, 35,162, 82,224,162, 96,129,241,153, 16,137,201,171,
- 33,254,252,233,179,208,200, 58,148, 0,247, 12, 40,194, 36,100,181, 51,128, 11, 73, 79,201,112,238, 3, 36,101,103,240, 39,156,
- 17, 8,106, 12,144,188,217, 76, 8, 23,228,160, 22,140,253, 70, 96, 1, 82, 29, 50,220,118,183,205, 18, 86, 96, 71, 36, 97, 17,
- 9, 9, 92, 15, 51,148,243, 86,202, 43,174, 83,135, 34, 38,194,207,100,214, 60, 26,115, 38, 57,157, 60, 4,174, 66, 9, 91,220,
- 3,118,185,192,150,104,246, 26,152, 41,251,206,135,112, 46, 40,161, 21,178,212, 58, 31,233, 90, 2,149,203,165,171,114,217,179,
-178,189, 90,148, 43,181, 99,103,205, 65, 72, 26,203,240,231, 16, 20,150,209,146, 22,102,122, 8,122,113,243, 70, 40, 73,232,174,
-105, 92, 65,118,248,233,197,133,156,158, 39,228,157, 77,117,108,154,224,116,187, 99,105, 35,224,154, 90,158,243,188,102,121, 40,
- 25, 20, 75, 69,169, 55, 52,163, 31, 77,153, 73,195,166, 6, 83,189,199,153, 33,247, 4,159, 15,148,119,255,188, 43,191,253,193,
-182,156, 92,246,229,176,222, 19,147,116,236,115, 6,135,214,208, 9, 99, 13, 17,240, 37,210,152,221, 14, 7, 62, 36, 33, 49, 27,
- 42,252, 1,165, 4,185, 15,250, 6,103,103, 7, 26,164, 66,214, 85, 19, 7,117,158,119,118,119,165,163,239,255,229,211,199, 60,
- 63, 59,235,171, 28,207, 11,103, 13, 50, 33,206, 18,130, 42, 4,181,120,198,162, 6, 38, 77, 77,144,130,208,254,160,190, 62,156,
- 36,228,217,233, 64, 38, 15,159,177, 75,165,195, 89,247, 41, 38, 11, 64, 46,211, 9, 19,106,158, 59,160, 25,252, 35, 4,128, 44,
-193,128,151,133,105,117, 83,151, 40, 78,244, 89,239,238,109,186,164, 39, 98, 43,189, 88,181,217,178,155, 33, 90,182,115,165,173,
-248,204, 13, 89,146,170,182,177, 14,219,229, 9,155,230,198,137,149,115,190, 19,236, 88, 46, 65,159,149, 45, 59, 30, 21, 74, 69,
-198,154, 57,252, 30,213,197, 88, 16,161,205, 53,226,109,236,209,172,137,200,151,199,133,176,110,228, 45,199,106,246,128,223, 13,
-178,244, 22,157, 19,178,116,192, 25,112,100, 84, 42,246,173, 99,122,178,191,209,177,112, 1,175, 19, 58,214, 75,102, 19, 62,157,
- 15,198, 60, 90,155,112,109, 43,132, 14, 97,244, 82,161, 49,116, 25, 12, 24,160,136,216, 17,149,166,230,227, 90,221,214,128, 65,
- 26, 4,125,105,183,134,122,136, 3,119,241, 1, 57,163,254, 61,130,113, 79,134, 61,127, 99, 66,170,144,181, 69,240,227,217,197,
-184,187,164,231,152,166, 28,184, 16, 26, 28,163, 7,121, 45,167,207, 17, 12,244,162,117,244, 98, 76,168, 50,213,154,142,164,173,
- 70,109,107,187, 38,190, 6, 42, 89,205, 22, 2,189,164, 89,113,146,144, 48,176, 48, 70, 46, 67, 13,168, 33,237,132, 58,198,122,
- 73,114, 52,138,147,176,133, 14,231,134,189,176, 9, 7,113,155, 84,154,235, 93, 43,103, 99,100,184,211,166,139,140, 17,157, 22,
- 53, 11, 2,148, 28,132, 61,240,179,249,170, 88,147,174,239,207,219, 21,170,197,180, 27,241, 24,138, 48, 92, 52, 71,115,152, 57,
-159, 69, 43,142,240, 2,219, 96, 76,168, 14, 8,166, 73, 56, 6, 63, 28, 39,178,201,157,205, 42,133, 46, 50,105,223,193,246,193,
-196,161, 27,200,140,194,201,123,161,254,158, 83,191,210,247,236,233,103,118,250, 30, 91,112, 80,178,200, 34,120, 83,199,139,245,
- 71, 31, 53, 84, 9,124, 13, 2, 91,122, 22, 70, 84, 8,155,200,121,203,101,233, 80,188,242,168, 43,173,235, 91,206,208,152, 35,
-208, 73,232, 97,239,245,133,245, 62,100,162,126,218,233, 15,224, 25,166,186,207,137,116,158,203,128,103,240, 49, 40, 35,140, 66,
- 41, 82, 17,184, 94,225,179,198, 64,179,150,148,220, 95,203,177, 6, 10,131,118,119, 53, 35,107,197, 4,127,120,194,189,215, 64,
- 65,143,203, 70, 33,201,178, 79,123,236,211,169,130, 7,146, 8,209, 2,124, 86, 30,196,172,156, 67,143, 16, 84, 6, 62,212, 46,
- 82, 68, 28,230,218, 47,179, 22, 51,252, 30,122,101,167,250,121,157, 33,203, 42,108,235, 10, 38,174, 69, 19, 16,182,103,231,189,
-169,194,144, 42,225,216,222, 97, 73,193, 36, 22, 98,133,248, 60, 4, 82,252, 67,232, 53, 34,120,212,127, 2, 45, 67,192,214,210,
-172, 7,132,170,237,245, 77, 62,251,235,163, 67,205,240, 70,212,118,192,119,149, 10, 37, 50,193, 49,188, 37, 77, 68,101,204,243,
-143,246, 35,244, 50,187, 1, 29,174, 75,100, 93, 29, 58, 6,144,116,123, 93, 26,124, 24,126, 4, 88, 52,192,198,159,139,177, 32,
- 59,131, 1, 7,252,187,138,246,170, 4,218,228,158,201,238,230, 46, 59, 74, 30, 62,123, 65, 71,142,239, 7, 42,128, 59,140, 12,
- 29,119, 33, 25, 6, 37,168,167, 95, 77, 38,172,177, 2, 61, 66,230,142,231, 65, 79,184,131,104,157,227,169,148,203,116, 56, 67,
-168,149,205,214,199,120,132,171, 51,212, 40, 23, 57,169,107,214,105, 83, 60, 19,229, 92,222,217,136, 80,213, 11,118,198,248, 19,
-215, 54,150, 48, 68, 1,177,206, 25,205, 18,113,126, 18, 80,175, 75, 26,158,115,252,147, 11,239, 57,116,106,202,193, 38, 1,123,
-139,211, 96,249,235, 30, 98,141,219,189, 17,109, 78, 33,151, 33, 87,225,162,217,100,253, 24,207, 57, 24, 38,229,221,157,117,249,
-214,189,169,124,246,170, 33, 13, 13, 8,193, 51, 98,137, 42,112,164, 79,135,156, 77,195,114,134, 80, 60, 11,129, 78,187, 61,164,
- 3, 4, 34,129, 30,246, 85, 64,218,250,189, 79,222, 92,209,193, 90, 34,125, 25,102,176,104,113, 67,208,130,210, 6,218,196, 16,
- 16,100,210, 21, 57, 24,105,240,174,123, 95,202, 78,165, 53,152,242, 78, 29, 95,246,164, 51, 28,115, 47,129,120,240, 76, 97, 77,
-213, 17, 66,184, 6, 44,255,205, 90,153, 51,223, 79,234,199,220,111,112, 78, 92,251,160,200,230,218, 58,131,174,179,211, 35,162,
- 43, 9, 47, 73,244, 17,200, 45,130,169,167, 47, 94, 16,221, 90, 93, 89,209,204,186, 64, 20, 1,178,191,184, 47, 32, 1,102, 72,
- 50, 12,164,172,123,156, 73,101,233,144,225, 27,114,121,140, 84,205,203,106,165, 40,199, 23,231,114,244,209, 35, 61,199,235,206,
-222, 4, 96,197, 39, 52, 24,210, 44,125,234, 18, 30,153,245,255,139,235, 38, 66, 59, 35,202,134, 64,123,146,122,207,208,121, 52,
- 30,246,100,115,198,121,137,138,103, 69,230, 98,184,228,103,241,103, 49,205,142, 40,137,120, 70,144,155, 65,223,179, 49,210,214,
- 68,100, 87,227, 48,185, 92, 19, 23, 91,136,119, 97, 47, 16, 60,123,201,188, 35,214, 70,116, 69, 88,219,143, 78,183,140,229,234,
- 38,214,120, 99,150, 71, 48,203,210, 92,146,152,191,183,215, 40,116,118, 78, 24,212,117,244,199, 67, 58, 71, 56,231, 49,157,230,
- 52,148,163,180, 60,104,148,121, 4,123, 19,211,128, 0, 99,129, 41,158,205,179,190, 22,104,150, 59,132,225,210, 13, 34,103,100,
- 20, 80,179, 23,170, 86, 25,221,128,219,123, 27,132,145, 16,121, 50,138, 14, 13,244,112,226, 28, 12,224, 76,206, 99, 23,151, 85,
- 79,167, 9,102, 31, 8, 8,242, 20,180, 81,131, 5, 50,134,102,236,193, 8,179,156,245,208,246,135,108, 15,201, 97,168,130,117,
-145, 46,235,188,168,179, 33, 51, 74,186,236, 3,194, 19, 56, 16, 27,106,240, 3, 13, 18, 48, 88,129,211,134, 60, 76,117, 42,136,
-209, 72,116,164,134, 19,207,214,108, 13,121, 33, 65,124,169,104, 36, 61, 26, 14, 41, 44, 83, 40,149, 37, 95,204, 49, 91, 77,154,
-128, 19,236, 74,201, 52,107,110,224, 8,180,174,220,112, 2, 48,232, 57,150, 17, 9,165,239, 72, 28, 94, 56, 76, 37,218,159,237,
-135,173, 64,253,192, 18,209,192,243,143,194,231, 79,133,181, 45, 24, 85, 27,238, 18, 53,173, 97,244,199,129,203, 70, 66,137, 69,
-252, 92,167,235, 51,144, 64,229, 3, 34, 60,183,214, 80, 43, 52, 36, 23, 18,194, 54, 14, 29,216, 63,190,226,230,195,192, 33,163,
- 46,103, 61, 70,204,142,167,228, 46, 56,146,121, 67, 57, 72,159,127, 6, 77,233,163,186, 58,237,238,152,237, 45,126, 73,141, 99,
-198,163, 1,133, 19,113,235,238, 90, 1, 53,206, 17,127, 8, 35,103,165,204,159, 1,236, 55,144,250,101, 75,210,183,203, 12, 14,
- 51, 97,151, 3,102,101,226,215,203, 5, 35, 7,103, 61,214, 22, 83, 41,117, 18,186,197, 57, 61, 75,158,158, 45,156, 17, 14, 16,
- 65, 80, 22, 26, 2, 31,208,188, 46,225,230, 74,129, 98, 50,237,142, 58,190, 81, 66, 51,160,158,108,151, 86, 52, 8, 53,114, 90,
- 31,202, 74,165, 32, 0, 94,178, 9, 97,112, 1,150,110,175, 63, 38,116, 9,126, 70,165,148,148,129, 58,130,130, 38,125, 59,165,
-148,131,230,245,185,128, 32,140,245,123,219, 64,140, 80,190,240, 64, 10,213, 44,120, 8, 84, 98, 72,242, 39, 50,250, 58, 52,193,
-145,138, 0,186,212,247, 42,102, 53,251,132, 75, 9,203, 11,172,175,195, 57,133,253,186,184, 35,108,157, 75, 38, 72,158, 2,215,
- 99, 93, 35,250,214,144,106, 44,110,255, 38,142,119, 48,232, 79,228,240,240,165,252,252,209,107,221, 43, 53,225, 65,130,243,199,
- 1,199,194,200,195,112, 0,149, 65,169, 7, 25, 55, 32,112,161,160,147,208,121,230,114, 69,182,183,249,190, 43,137, 33,176,218,
-221,216, 32,220,141,172,203,134,123,134,224, 6, 60, 24, 47, 52, 96, 51,174,195, 36,236, 44, 0,107,254, 31,253,202,251, 82,219,
-221,150, 63,249,254, 39, 68, 82, 30, 62,123, 54, 71,122, 0,233,207,234,242,142,181,236,202, 7, 8, 12,134,212, 92,119, 14, 22,
- 65, 6,200,120,168,181,151,212,142,224,236,193,240,163,172, 1,166, 60,117, 48, 18, 18, 34, 82,174, 71, 29,250, 23,168, 79, 54,
-187, 3, 66,205,197,130, 19,147, 74,171,189, 65,217,136,208,172,254, 12,178,216,169,174,215, 88,157, 93,207, 79,200, 3,117, 48,
-248,110, 4,117,105,117,144,112,166, 16, 31,242,194,105, 96,179, 86,163,126,167,175,206,188, 79, 52, 15,247, 21,123,159, 73,162,
-117,172,175,235,216,214, 12, 26, 83,201, 10,174,164,226,143,228,162, 81,215,128, 54, 35,183, 86,203,242,245, 7,106, 11, 18, 64,
-236, 38,242, 55,159, 0,162,183, 60, 99,176, 89, 44,127,133,112, 59,214,223,233, 38,184, 54, 44,232,170,131,131,132,233,108,185,
-100,160,142,209, 17,236,198, 64, 34, 97, 59, 89, 30,112,193, 11,238, 21, 56, 13, 21,117,252, 14, 97, 78, 18,210,135, 77,133,224,
- 10,120, 66, 87,186, 54,224, 44, 33,241,186,189, 81,150,135,175, 46,201, 67,192,175, 67, 67, 96,183, 8, 94,143, 38, 62,234,212,
-129,186,246,135, 78,255,159, 45,133,211,128,200,210,246,230, 22,229,131, 27, 23,135,156, 30, 87, 41, 85,153,161,231,212, 46,190,
-120,253,138, 65, 34,150, 0,246, 25, 8, 2, 52, 16,122,236,157,159, 50, 41, 75, 18,162, 71,194,213,215,239,188,197,225, 46, 18,
-246,240, 27,227,120, 60,176,103,224, 52, 77,113,191,244,187,209, 6,124,133,128,116,165,194,182, 68, 71, 6,157, 48, 48, 64,185,
-161,144, 47,144,220,137,224, 5, 42,157, 44,251,120,174,157,143,173,167,158,171,139, 91,207, 44,134, 39,205, 68,183,102,245,242,
-232, 96, 42, 19, 87,211,156,253,187,179,205,102, 73,166, 53, 18, 32, 68, 6,111,153,136,110,199,181, 49,211, 33, 71, 7,162,103,
-173,246, 64, 3,234,180, 44, 88,108,209,177,215,209,225, 85,215, 70, 96, 45,120,102,118, 38,179, 38, 55, 72,104,199,149, 52,231,
- 29,180,145,209,225, 38, 50,251, 61,217, 56, 63,102,228, 13, 3,131,195, 60, 33,169, 6, 34,252, 1, 35, 38,168,174,193,209,163,
-102,131, 11,136, 75,229,249, 99, 18, 55,216, 46,132, 62,109,182,187,168,209,107,250,236,229,206,103, 22, 35, 88, 97, 36,175,134,
-104,205,209,207,202,163,151, 83, 8,129, 34,114,151,112,102,112, 69,163,176,223,248,213, 34, 13, 3,106, 72, 56, 20,232, 83,189,
-188,108,235, 38, 38, 66, 85, 41,205, 54,218,150,132, 62, 10,254, 35, 35,128,225, 7, 12, 59,117, 83,140,212, 43,176, 53, 14,151,
- 22,193, 7,122,223,127,241,172, 45,171,250, 14,117,205,176, 42,106,237,199,157,177, 84,171, 73, 66,246,156,220,117,112,161,145,
- 41,144, 9,144,139, 82,242,181,183, 86, 24,100,212, 86,242, 60,200,157,182, 26,193, 66,158,223, 11, 15,150,207,105,198,148, 72,
-147,244, 82,111,244,165,170,217,168,225, 36,186,132,232,254,202, 90, 46, 36,101,153, 48, 11,159,117,167,137,101, 93,171,165, 27,
-208,155,104, 22,220,243, 67,141,122,247,115,222,212,132,210,135, 46, 51,196, 5, 34, 4, 45, 51, 34, 85,136,207, 32,186, 15, 33,
-220, 20, 9, 62,200,126,117,207,198, 78, 4, 35, 65, 41, 78, 23, 33, 2,210,228, 57, 15,215,176, 63, 10, 88,167, 2, 68,202,131,
- 22, 76, 73, 18, 12,144,225,240,222,120, 66,191, 30, 56,206, 3,156, 72,128, 73, 89, 40,189,120, 97,253,216,250, 60,188,157,161,
- 35,244, 36, 45, 58, 6,220,155,160,173, 67, 8, 23,122,114, 60,242,229,188,209,147, 59,235,121, 13, 98, 82,106,168,199, 82,208,
-115, 95, 43,232,119,249, 3,121, 11,253,200, 33,243,219, 69,230, 19, 26, 5, 4,237, 8, 36,132,117,242,153, 68,177, 9,251,159,
-125, 57,208,236,252,240,120,172, 70, 43, 77,195,113,209,153,106,240,233, 90,161, 32,159,128, 44,191, 62,113,142,117, 20,120,204,
- 12,240,116,229,124,138,231,252,234, 74, 51,178,114, 78,130,130, 83,168, 98,192, 5,146, 38,166, 11, 34, 56, 53, 35, 26,209, 41,
- 74, 31,186,134,103,231,106,236,213, 58, 5,181,188, 12, 52,155, 71,173,121,168,191, 87, 2, 99,216, 56,227,137, 53,154, 96, 58,
- 87,218, 57,120,114, 48,172, 93,160,120,128,221,129,122,233, 58, 21,117,157,123,250,193, 96, 44,247, 70,208,165, 31,201,103,143,
- 31,137,209,224,225,170,141,154,100,150,136,217,241,217, 57, 25,200,184,230, 40,137, 20, 53, 91,194,179,158,156, 93, 56, 12,131,
-227, 86, 39,122,102,171,172, 35, 55,218,109, 58, 81,231,252, 83,114,119,103, 75,206, 26, 13, 50,190, 17,132, 90,158, 37,127,209,
-211, 31,146, 47,103,119,158, 2, 84,226, 72, 63,127,250,119,159,200,221,237,115,217,221,222,148, 35,205,182, 2, 58,170,192,245,
-247,227,121,198, 35, 7, 27,235,115, 34, 8, 32,124,174,142, 90,194, 17,176,156,128,150,205,242,123, 88,131, 77, 77,185,191,112,
-240,169,164, 67,244, 0,169,186,254,251, 41,201,184,224, 65, 84,113,129,244, 27,216, 58, 74,194,104,210,245,123,143,134,148, 45,
-197, 80, 26, 19, 78,131,132,154, 27, 74, 71, 99,189,163,184, 67, 73, 12,242, 1, 18, 7,135, 63, 69, 7,204, 40,108,131,156, 58,
-190, 5,116, 53,166,122,119,245,127,126, 34,195,210, 3, 96,211,124, 49, 35, 93,189,139, 19, 59,150, 65,167, 78, 88,122, 98, 29,
- 76,140,121,239,227,244,216, 73, 13,251, 25,181, 49, 3,181, 9,129,252,242,131, 77,121,113,218,210,204,123,200,119, 0,178,143,
-255,161, 62,141,245, 6,138, 1,164,100,107, 3, 2, 51,101,249,252,241, 99,215,102,233, 39, 24,196,190, 57,107, 73, 10,168, 75,
-224,133, 19,213,210,108,177,203,102,179, 68, 76, 75, 32, 30,163, 31,223,115,165,133, 66, 38, 39,103,154, 61,231, 18,150,157, 13,
- 64, 21,158, 31, 91, 89,211, 4, 4,182,118, 24,142, 65, 77,232, 63,119,115, 53, 66,255, 32,242,130,100,135,137,103, 64, 28,113,
-111,225, 56, 55,214,183,228,226,252, 72, 46, 53, 96, 41,230, 93, 59,231,218,218, 26,145,192, 71, 79,159,240,192, 22, 50,233,185,
-238, 0,208, 24,148,102, 73,154,213,125,202,232,179,228, 51, 25,233,117, 91,186, 7, 80, 5, 77, 59, 29,253,193,152,229, 52, 4,
-109, 62, 53, 19,124,150,115, 17,176,192, 41,143,237,136, 73, 73,128, 86,189,139, 58, 19, 72,112, 57, 28,137,214, 77,201, 67, 66,
- 55,133, 38, 94, 50,197,243,202, 50,170,204,164, 96, 77, 76, 58, 59, 38, 24,199, 22,105,111, 33,102, 53,159,209,225,205,117, 55,
-102,243, 48,100, 89,157,243, 6,177, 23,107,174, 87,175,237, 13, 53,109, 74, 42, 79,220,160, 32, 8, 2, 45, 79,176,180, 54, 58,
-175, 66, 98,127, 22, 27,250,100, 34, 99,199,151,213,202,162, 29, 80,215, 52,226, 35, 1,194, 44, 17,164, 22,160, 30,114, 13,164,
-152,137, 7, 26, 73,162, 6, 11,193, 7, 74, 6,122, 46, 51,155, 76,156,214, 57,224,179, 53,181, 74,187,181, 52, 47, 4, 72, 91,
- 70,163, 80,108,228,105,103, 36,167,151,125,217,168,169,129,152, 36, 66, 65, 17,143,151,227,139,167,103,136,199,228,183,126,253,
- 29, 26, 18,235,245, 9, 23, 35, 2,199, 10, 78,116,227, 87,215, 82, 97, 93, 50,193,108,117,168, 25,202, 17, 33,196,128, 81, 30,
- 14,196,233,229,144,189,150, 89,227, 19,206, 15,194, 44,119,134, 91,248,250,124,233,140, 19,125, 1,179, 20, 4, 62,100,165,168,
-131, 83,139, 88,109, 69,181, 92,212,204,119, 72,214,103, 85, 51, 59,200, 44, 30, 99, 6,114, 38, 41, 59,155, 5,102,154,132,247,
-144, 97,161, 30,220,234,107, 6, 55,101, 45,223,183,105,167,130, 37, 46, 3,184,179,183,226,212,242,194,225, 41,154, 59,139, 38,
-140,204,234, 81,171,199, 93, 66,171, 31,178,231, 74, 46, 77, 71,131,212,170,128, 90,162,102,130,221,145,171, 13,227, 75, 89,119,
-181,118, 46,151, 30, 24, 55, 97,204, 15, 29, 48, 97,220,144,216,134,195,132,192,133,156, 1,117,216, 5, 64,241,192,226, 3, 39,
-216,192, 76, 9,196, 19, 68,207, 36, 25,186, 76, 31,151, 31, 57, 38, 56, 14, 48,116,168,229, 50,155,132, 60,227,200, 15,153,231,
-128, 46, 51,178,189,230,133, 53, 76, 55,234,179, 3,163,161,151,175,215,110,170, 49, 27,176, 39,118, 37,159,112, 1, 32,164,123,
-117, 67, 51,198, 57,183,148, 6, 63,247,110,149, 88, 55, 67, 75,209, 68, 29,102,202,239,202,121, 93,200,174, 79, 99,188, 47,186,
- 42,230,252, 0, 87, 15,189,184,130, 30,193, 64,222,221,205, 81,213,236,106,226, 8,114,112, 55,129,239,120, 30, 48, 30,191,248,
-242, 66,106,213,162,220,191, 91,115,193,104, 72,158,225, 88, 74, 73, 80, 22,248,224,188,199,232,245,157,237, 28,207, 92, 7,142,
-222, 80, 62, 77, 51, 60, 32, 2, 78, 17, 17,123,211,211,165,235,219, 44, 89,233,154,148,235,251,164,165,175, 6, 24,226, 38,216,
-231,151, 7,109,201,171, 83,221, 44, 76, 73,140, 68,112,214,209,140, 11,235,104, 39,104, 59,115,252,113,116,112,128,220,196, 90,
- 52, 28,123, 56,122, 24,231, 26, 19,182,112,159, 32,239,137,125, 84,187,172,103, 4,227, 61,251,242,226,233, 23,114,166,239, 94,
- 40,148,233,252,186,189,115,105, 52,155,236,203, 70, 28,181,181,182,170, 1,106,151,176, 40,235,164,200,130,213,169,161, 77, 11,
-122,224,103,141,166,147,174,132, 46,130,126,239,198, 74,149,237,102, 24,208,225,148,246, 28, 17, 15,217,236, 76,169, 43, 21,150,
-170, 38,126, 72, 94,149,153, 88, 70, 64, 57, 89, 24,169, 35, 13, 44, 2,113,202,123,211,145,107,159,195,103, 82, 99, 93,179, 97,
-252,251,152, 51,189, 93,107, 28, 32, 90,103,128,157, 45,130, 96, 77, 32,174,211, 3,255,153,137,137,224, 89, 8,191,163, 47,154,
-153, 95,146,200, 85, 65,207, 20,202, 83,245,171, 46,137, 92,169, 4,132, 92,134,204,122, 17,184, 77, 67,253,123,156,133, 49,103,
-154, 27,214,152, 45,187, 52,220, 29, 71, 59, 46,230,202, 15,212, 62,180, 59,186,126, 22,130, 46, 61, 55,107, 2, 65,152, 6, 1,
-233, 76, 81,157,140,171, 43, 15,198, 41,218,169, 66,113, 69,207, 87, 70, 38,253, 22,154,255,244,158, 20,244, 76,184,128,178, 63,
-232,202,143,191, 56,146,111, 60,216,150, 15,223,189,171,217,189, 47,247,183,234,242, 87, 31,189,148,122, 87, 29, 87,210,241,116,
-112,119, 74, 44, 21,232,174,250, 16, 1,202,201,254,233, 5, 3, 50,181,253,180, 5, 89, 48,239,123, 19, 87, 75, 14,220,187, 80,
- 58,215, 56,248, 28,118, 14,179,212,209,174, 89,208, 53,174,104, 22,220,174,150,228,178, 30,206, 93,247,220,157,188,184, 66,144,
-130,154,190, 35,255,162,180, 24,168, 45,110,107,128,210, 27,246,157,224,205, 52,173,246,109,202,242, 89,161, 84, 35, 1,237,249,
-139, 39, 50,213, 0, 39,151,175, 18,113,221, 8,209,156,243,139, 51,106,180, 35,184,160, 58, 39, 2, 50,104, 32,248, 46,192,198,
- 62,129,172,251,224,222, 91, 50, 29,246,228,104,208, 97,245,200,159, 76, 89, 42,162, 94, 6, 7, 43, 77,184,103, 96,173, 3, 45,
-157, 53, 48, 19,105,212,119,223,217, 94,167,222, 62, 8,137, 77, 13, 92, 70, 68,199, 2,138, 0,193,130, 98, 54, 1,184, 5,199,
-167, 87,124, 14, 92, 0,216, 17,218,191, 80, 74,124,238, 16,231,147, 46, 77,100,214,198,140,227,118,125, 88,138, 44,143,160, 88,
-250, 17,187, 84,235,182,209,214,178,153, 83, 13,230, 19, 80,169,198,231,207,180, 30,102,179, 57, 34, 84,246, 96,140, 86,223, 84,
- 68,225, 46, 70,145, 91,234, 48, 54,215,100,183,173,216,155,132,230,228, 90,218, 62,215, 30,113,227,116,147, 88,108, 24, 67,176,
-101,133, 80,137,199, 94,237, 12,153,201, 30,179, 22,212,202,198,232, 55, 29, 3, 2,118,209,179, 13,135,220, 35, 66,236,141,157,
-220, 35,220, 78,187,221, 1,150,202,108, 15,159, 11, 88,252,240,168, 37, 37, 61,152,193, 8,135,205,147, 6,218, 97,208, 51,190,
-226, 28, 23, 46, 37, 14,135,203,210,199,252,255,235,213,188,164,223,246,228,188,173,198,103, 63,208,172, 33, 73, 22,106,227,178,
- 37,187, 59, 85, 70,163,189, 78,139,136, 71, 50,149,156,183, 56, 77, 39, 14,166, 27,243,176,120,132,127, 26,237, 49, 71, 34,226,
-125,144,209, 17,214, 70, 43, 93,119, 72,149,162, 59,187, 69,185,181, 85, 20,148,193,177,224,168,177,206, 88,142, 16,186, 1,132,
-219,237, 88,169,173,150,244,253,211, 76, 39, 1,239,229, 74,185,176,165,194,177,152,199,250,174,232, 97,133, 52, 34, 46,206,134,
-190, 67,179, 55, 97,166, 60, 64,139, 94,202,208,232,103,211, 66,146,141, 31, 18, 67, 80,207,153,132, 82,138,126, 88, 87,129, 51,
-182,161,192, 15,102, 78,207,100, 68,109, 8,227, 67,115,199, 15, 97, 95,192,186,189,222,152,153, 58, 39,201, 97,144,132,117,226,
- 62, 1,161,176, 4, 47, 26,190, 27, 44,226, 68, 48,118, 36,192, 16, 46,157, 13,187, 97,237, 30,149,231, 68,154,168, 76,116, 86,
- 42,141,183,126, 89,179, 53, 96,157,127,109,165,196,190,210,158, 26, 51,156, 1,244,203,154,176,133,134,165, 7, 24,134, 84, 86,
- 46, 71,105,169, 38,199,146, 93,205,235,115, 76,228,224,228, 74,238,110,230,152, 65, 57,205,243,192,189,159,254,255,118,167,175,
-127,223,147,119,183,211,156,161, 13, 87,137,207, 2, 63, 96, 38, 92,180,161,123,112,103,119, 36,103, 26,224, 65,213,202,159,234,
-185,178, 41,174,157, 13,137,105,142, 7,162,217, 74,115, 32,149,244,148,132,195,100,182,168,199,210,147, 91,181,172,180,199, 14,
-125,152,134, 23,178, 51,242,228,228,234,138, 4,166,189,141,172,228,203, 73,142,218, 28,170,161,172,148,243, 52,126, 53, 61,211,
- 5,111,194,243,129,118, 29,148,122,154,122,169, 87,178, 26,160,165,212,144, 77,157, 60,234, 80, 51, 35, 4, 42,169,144,209,139,
- 0, 25,155,148,152,250, 51,181, 87,102, 41,199,199, 71,114,112,116,198,115, 34, 94, 94, 86,202, 5,102,168, 47,247, 95, 19, 81,
- 64, 0,134,115,140,214,180,203,250, 5, 13, 33,157, 57,219,203, 18,122,119,106, 12, 86,207,155,173, 80,192, 72,232, 48,171, 48,
-136, 23,151,115,189,192,153,234, 20,178, 9, 71, 18,195,222,213,220, 52, 44, 19, 25,104, 17,182, 9,229, 52, 19,171,150,212,233,
-232, 25, 33,217,211,115, 51,220,145,205,163,118,139,192,193,112,150,253,132,226, 53,179,217, 8,188,123,190, 63,135,244, 1,185,
-163, 76,128,239, 70,166, 6,116, 8,159, 1,117, 73, 24,103, 4,136,248, 61, 60, 51,218, 72, 49, 59, 29,176, 58, 62,231,172,222,
-101, 0,130, 6, 17, 56,137,132,113, 1, 18,101,169, 17,176,195,210, 4, 99, 66,179,120,207, 73, 24,240, 97, 36,170, 27,229, 42,
-204,226,249, 25, 99,200,167, 14,136,174,193, 94,121,185,156, 6,165, 87, 68, 36, 88,114, 68,199, 15, 96,125,160, 22,169,146,116,
-160, 59,209,191,146,228,164,171, 54,174,204, 86, 93, 36, 25, 32,212,253,189, 58,189, 95,123,127, 79, 62,184, 85,148, 86,243, 82,
-246,214, 74,186,119,125,135,126,232, 90,128, 64, 12, 69, 57,148,114,160,115,209,235,117,228,238,214,138,188,183,183, 42, 71,199,
-135,178,127,214,147,219,219,121,217,219,173,241,119,192,237, 72,176,172,144,112,200,173,113,173,160,125,142,155,117,214, 28,229,
- 61,212,228,241,127,152, 9,235,122,108, 84,242,210, 86,103,141, 51,130,250, 52, 7,227,164, 50, 84,198,235,143, 58, 28,151,139,
-251,112,214,112, 76,254,221,157, 29,182,142, 61,125,242,133, 6, 52, 73, 34,124,171, 43, 21,201,228, 75,242,250,240,141,180,218,
-109,174,125, 16,118,197,224, 94,224,140,246,250, 14, 89,193, 20, 56,140, 96, 15, 64,144, 46, 84,212, 38, 55,121,144,129,224,224,
-153, 18,105, 55, 84,107, 54,167,128,164, 61,223, 57, 96, 23,140,187,137,109, 64,123,159,191, 60,213,128,216,181, 7, 99,106, 32,
-206, 19,203, 96,214, 33, 65, 25, 13,214,129, 6,116, 58,135,161,244,247, 84, 3,106,136,208,164,216, 50,200, 0, 40, 17,182,166,
-145,185, 34, 33,252, 30,159, 91,101,163,208,181,185,145, 91, 22, 78, 56, 51, 49, 77,231, 25,236, 62, 27,146, 18,109, 25,155, 3,
-230,161, 88,205,100, 50, 9, 17, 12,143, 9,213,178,218,228, 92,214,194,216,175, 16,178,137,100,222,118,166,140, 97,151,134,193,
-176,224, 31,239,203,143,185,241,200,159,132, 66,100,201,169,157,145, 61,194,154,175,134,148, 1, 72, 87, 32, 15, 37, 93, 91, 69,
- 48, 52,236, 63,221, 66, 97, 81, 13,213,121,223,213,109, 65,144, 71,237,111, 56, 10,168,244, 6,184, 41,201,204, 4,178,175, 29,
-169, 55,186,114,116, 62,116,132,171,161,102,243,103, 23,114,111,187,202, 75,146,211, 3, 53, 13, 12,225, 36, 56, 73,144,220, 0,
-231, 56, 66,133,107,121, 89,171,230,228,178,231,201, 89, 91, 55, 94,179,191,157,213,140,116, 53,115, 30,214, 10,146,201, 25,146,
-175, 96,196,225,224,167,214,193, 56,104,237,154, 12, 93, 77,241,236,178,175, 78,117,170,135, 82,141,157, 30, 98, 8, 64, 32,107,
- 72,166,243, 28, 71,201,118, 10, 77,153,198,195,182, 46,106,150, 25,165,111, 82,234, 36,125,182, 92, 0,146, 10,208,162, 86,200,
-203,184,221,211,231, 83, 7,134, 78, 1,100, 17,104, 67, 73,250,148, 92,108,235,165,202,103,115, 28, 22, 65,195,109, 92, 45, 28,
-239,145,101, 95,117,154, 61,175,144,165, 77,234,229, 27,232,191,247,209,119,157,205, 18,178,197,214, 36, 66,178,159, 63,107,247,
- 19, 19,246,103, 35, 96, 8,187, 4,124,151,137,121,172,213,154,185,113,101, 16, 2, 34,163,231, 4,115,112,153,219,189,169, 51,
-242,229,180, 6, 43,142,133, 62, 25,250, 52,236, 99,136,180,120, 83,102,161, 65,216,247,233,133, 68, 37,200,137,166,192, 52,179,
-161, 80,140, 93,204,176, 7,211, 26,151, 15,240, 58, 10,162, 36,193,235,250,156,214,251,204, 62,186,253, 49,215, 12,217,212, 74,
- 49, 45,155, 91, 25, 89,205,107, 86, 23,244,213,112,102,228,238,122,158,209,109,107, 0,166,241,156,130,198, 44, 10,169,203,134,
- 58,254,139,122,143, 93, 8, 83,253,142, 84,216,118,146,154, 17,248,117,167,183,212,169,175,215,138, 26, 92,244,217,121,129,242,
- 14,244,220,215, 75, 8,250, 82, 44, 61,180, 53,115, 46,102,245, 28,174, 87,168,115,237,107, 70,249,222,219, 25,185,210, 12, 46,
- 49, 29, 74,144, 42, 58,110,128, 26,145,177, 77,200, 73, 3,193, 70,155,202,116, 9, 13,107, 86,245, 76,175,169, 99, 7, 25, 80,
-115, 75,221,195,172, 28,169,163,185, 80, 99,184,149, 83, 35,147,112, 76,100,171, 6,233,164,111, 41,109,185,146,135,179,204, 72,
- 61,103,229,209,241,128,243, 8, 80, 27,220,170,229, 29, 58, 21, 18,178,120, 64,116,205, 47,207,206,228,251, 63,254,148, 26, 15,
- 61, 4, 87, 83, 55,119, 26, 50,161, 56, 75, 80, 90,195,143, 15, 72, 98, 74,168,193,198, 4, 66,159, 83,196,242,106,212, 81, 54,
-185,210,236,157,245, 79,240, 25, 80,246,210,204,238, 88, 51,116, 19,246,151, 3,190,132, 67,238,135,250,219, 56, 59,187, 91,155,
- 97,118,228,218,235,172, 31,204, 21, 9, 29, 71, 99, 36,223,255,228, 75,189, 3, 30,247,113, 50, 14, 66,114,220,128,231, 12,159,
- 1,103, 73,231, 26,248, 97, 43,171,117,162, 48, 83,167,195,143,231,133, 97, 31,133, 89, 60, 78,208,120,226, 72,118, 89, 56,168,
-144, 20, 74, 62, 12, 52,217,115, 25,217, 89,175, 18,125, 25, 65, 65,175, 61,144,119,238,222,146,111,191,127, 95, 46,251,137,249,
-116, 58, 54, 17,169, 29, 8, 52,251,129,182,125,127,210,225,144, 40,148,249,250,131, 30,109,211,140, 32,152, 72, 39,230,242,194,
- 88, 7,144, 71, 38,128,255,217, 72,145, 32,212,141,125, 1,211, 29,236,236, 62,207, 54,156, 6,178,244, 36, 53,159, 77,183, 73,
-254,205,112,132, 78,141, 33,247,231,103,143, 53, 32, 31,109,202,118,101, 67,138,197,129, 36, 53, 99, 70, 9, 6,223, 5,244,224,
-205,233, 25,229,111, 17, 60, 1, 85,202,231, 82, 26, 0, 92,241,238,162, 21,236,229,193, 25,235,230, 41,174,139,149,205,181,154,
-252,202,215, 63,100,208,245,252,197, 11,218, 70,244,131, 59, 14, 83,134,118, 44,145, 64, 32,148, 32,193, 15,107,129,214, 98, 40,
-110, 2, 37, 75,178, 68, 90, 36,162, 2, 56, 27,252, 24,232, 76, 4,122, 97,135, 19, 79,118, 54,183, 56,176,230,252,252, 88, 74,
- 80,105, 43,173,240,231,209,226,251,226,229, 11, 71, 74,134,230,193,192, 17,160, 97,143, 1, 41,227,255,131, 28, 90,204, 23,216,
-229,228,233,218, 84,202, 53, 38, 0,224,115, 96, 47,146,105,143, 42,114, 16, 24,194,179,145,195,144, 76,206,213,210,188, 80,227,
-221, 75,184, 78, 16,148, 70, 64,248,244, 79,155,124,198,153, 42, 40, 72,119,176, 95, 88,163,161,222,253,239,255,232,177,180, 91,
-117,151, 84,194, 6,235,185,127,248,229, 27, 13, 96,167,174,174,159,118,112, 61,234,251,236,181,207,165, 29, 1, 59,157,114,154,
- 30, 8,132, 80,247, 71,146,147,112,147,242,108,152, 40,197,187, 77,163,202,156, 50, 79,156,162,140,249,248,132,118, 27,203,232,
-177, 86,105, 36, 16,122,183, 51,185, 68, 76,212,107, 62,123,195,134, 83, 24,205,191,105,232,140, 93,140,144,157, 73,221,154,136,
-108,103,108,222, 68, 68,117,211, 46, 16, 11,107, 23, 79,155,132, 80, 3, 25,192,190,211,168, 77, 38, 28,100,238, 37,179,132,148,
-174, 52,123, 90, 93, 95,151, 36,136,107,161,145,247, 67,125,119,107,176,112, 96,111, 58, 77,118, 2,196, 94, 98,174,115,221,211,
-104,242,226,106,196,168, 50,165,118,224,251,159,156,201,163, 87,154,105,111,215,100, 15,164, 37, 50,205, 45, 97,207,132, 31,246,
- 82, 7, 97,180,111, 93, 47,111, 50, 53, 97, 70,248,147, 79, 46, 88,147,221,170,130,173,115, 37,173,190, 51, 42,200, 72,243, 56,
-164,201, 36, 47, 4, 72, 23, 9, 24,123, 53, 50,141,102, 79,170,122,105,222,121,123, 75, 90,234,232, 1, 49,253,230, 7, 27,242,
-228,196,167, 19, 51,137,172, 26, 98, 44, 98,211,137,175, 96,224,131,113,245, 80,120, 25, 48,148, 81,227,193,225, 64, 22,140,250,
- 82,183,211,101, 68,186,178,186,162,198, 56,144,173, 66,146, 70,200,215, 67,253, 96,115, 77,141,208, 68, 58,186, 6,187, 8, 34,
-244, 66,163, 92,112,210,241, 9, 29,226,162, 34,120, 65,130,138,250, 91,161,152,117, 7,206, 10,117,174,173, 31,204,135, 15, 16,
-246, 18,119,168,251,157, 54, 29, 89, 79, 29, 60,158, 13,181,114,212,198,199,168, 17,250, 14,161, 72,231,178,244,124, 64, 32, 78,
- 47,250,154, 37,141,212,128, 23,213,248, 88, 18,232, 0,111,215, 10, 9, 53, 8,234, 52, 39,105, 74, 95,162,118,157, 52, 14, 98,
- 22,182,139, 7,140,136,131,208,232, 99, 23,113,225, 92,187,142,149,231,251, 77,117,210,129,236,173,164,244,243,123, 12, 88,192,
-120,191,108,140,194,203,231, 0, 32,100, 84, 48, 40,149, 66, 86,214,213,169,103,189,156, 67, 3,160, 86,182,145,151,207,246,219,
-188, 24,197, 98,142, 53,224,153,102,121, 78,247,240,150,102,202, 56, 73, 83,187,208,107,103,137,194,179,225,196,166, 41,247,110,
-123,189,196, 11, 12, 3,247,236,245,149,148, 31,148,100, 71, 29,113, 71, 13,247,225,105, 95,179,143,177, 6,114,154,105,233,158,
-213,138, 8, 24, 71, 44, 27, 76,135,125, 18,225, 78, 19, 67,150, 66,122,166,160, 25, 63,136,148, 67,125, 30,140,153,156, 72,173,
- 60, 80, 87,158,145,177,238,249,177,190,219,116,220, 97, 16, 87,206,142,228,243,179,174,188,179, 91, 37,243, 31, 76,107, 72,169,
-122, 84,213,242,228,170, 55,113, 98, 41, 97,237,179,164, 65, 31,148,197, 70, 19, 39, 62,129, 12,252,135,159, 61,162, 40, 7,224,
- 71, 56, 16,177, 5, 57, 61, 63, 39,188,190,183,181,195, 32,233,184,238, 68, 69,210, 97, 15,120, 81,179,203,225,196,193,222, 80,
-102, 67,134, 2,231, 11,199,208, 33,251,220,205,188, 62,173,215,195,182, 60,189,199, 54,201,214, 67, 39,184, 3,103,154,146,123,
-123,187,234,116, 46,244,115,202,226, 52,118,194,122,158, 62,107,171,231, 83,114, 25,142, 7, 42,118,112,174, 24, 43,137,207, 64,
-118, 56, 13, 91, 12,135,193,104,214, 33,201,179, 54, 51, 57,126,216,103, 78,109,116,148,141, 66, 82,104, 50,225, 58, 45,240, 30,
- 9,207, 11, 69,146,198, 60,231, 24, 6,243,173,183,118,228,222,206, 42,201,168,133,188,102,204, 70,215,185,154,151,127,244,155,
-239,201,127,248, 59,223,144, 63,252,235, 87,242,240,243, 17, 3, 10,148, 38,136, 54, 76,199,116,194,200,236, 18, 9,199,118, 71,
-112, 58, 28,104,144, 3,216,189,221,144,222,192, 57,124,160,102,112, 66,104,185,236,247,154, 84,157, 76,120, 5,233,250, 3,182,
-123,141,186, 93,102, 56,104, 5, 76,121, 89, 62,111,189,217,209,247,244,152, 33, 7,211, 1,245,227,213,124,235, 59, 4,210,214,
-187,248,108, 95,239,180,102,197,247,183, 86,101,255,164, 33,251,234,164, 18,155,154,132, 96,162, 90,185,236,218, 45,197,241, 94,
- 96, 67, 51, 80,217, 12,146,156,210, 85,214, 51, 15,233, 91,168, 78,130, 99,128,201,109,144,240,125,185,127,202,192,105, 99,181,
- 42, 27,107,107,204, 96, 81, 10,157,181, 99, 66, 68,171,219,115,153, 42, 68,158, 54, 42, 9,218,207,146,102,222, 29, 50,211,123,
-180,189, 43,133, 12, 3,200, 98,165, 70,190,197,225,241,190,116,219, 93,118,240, 0, 90,223,217,218,230,144,154,131,195,125, 6,
- 98,176,107, 54,228,103,160,196,129, 97, 54,135,231, 13,201,176, 36,146,145,180,245,217,178,230,153, 60, 21, 10,209,117,131, 86,
-217,209, 80,239,169,174, 55, 18,145,166, 38,112,126, 40,172,196,119, 14, 7,176,192,137,130, 40,237,135,211,237, 16,204,136,175,
- 65,245, 40,193,115, 53,155,237, 1,254,211, 8,226, 53, 35,167,173, 63, 98,151,133, 67, 34,129, 0,160,132,130,243,145,209, 64,
-158,181,248,208,153,129,199, 65, 97, 36,142,210, 53,124, 63,114, 2, 52,192,197, 16, 39, 34, 65,128, 69,197,206,121, 66, 9,138,
-120, 57,247, 7, 30, 6, 73,138, 33,191,196,145, 90,147,204,252, 17,152, 38, 34,138,162, 30,147, 24, 71,218,163,156, 50,128,238,
-192, 5,198,220,239, 96, 38, 91, 27, 72,204,135,123,145,222,246,155,243,244, 69, 73,193, 44,164,182,103,217,253, 60,123, 15,229,
-164,109,100,158,156,141, 76,139,164,100,123, 88, 67,211,128, 45,195, 31,193,166,218, 57, 12, 16,246,145,131,252,133,113,165,212,
-248,237, 59,117,181, 16, 10, 38, 41, 38,188,212, 80, 49,179,198,101, 77,128,148, 81, 83,214,144, 64,141,164,102,103,123,105,217,
-216,244,121,209,135, 35, 95, 94, 30,117,229,222,157, 77, 94,182, 68, 34, 57, 39,131, 0,102, 65,198,198, 17,141, 41,231,160,241,
-208, 1, 24, 50,129,203, 16,235,237, 17,165,106,251,221,129, 19,121,208, 75,148,175,172, 73,169,182, 78, 3, 71, 72,112,226,178,
-104, 68,242,247,238,104, 86,185,186, 74,167,220,190, 26, 74, 73, 95,110, 75, 47,195,211,134,149,150, 58,169,247, 55,212,248,168,
-161,223,222,210,104, 52,227,156, 27, 5,241,211,249,249, 0,122,182,175,193,144, 36, 19,161,232,138, 83,200, 35, 64,175, 27,253,
-236,162, 71, 70, 49, 18, 16, 63,108,105,130, 60,226, 0,208,191, 30,240,103,175, 47,229,232,188,195,136, 29,207,136, 67, 94, 44,
-229,101,125,163, 66,132,194, 11,213,203, 92, 59,148, 43,121,224,192, 76,216,214,229,145, 97,155,128,174, 54,167, 39, 45, 6,206,
- 88,146,177, 38,100,105,207,178,118, 36,221, 83, 93,199,170, 26, 69,192,190,119, 55,146,108,239,226, 16, 76,100,249,122, 96, 55,
- 43, 25, 57,109, 14,164, 51, 73, 56, 40, 20,123, 96,166,100,225,226, 38, 81, 77,206, 75,211,121,162, 85,200,103,111,124,210,205,
- 49, 54,174, 29,197,132,157, 12, 24,106,209,188,234,146,224,149, 74,186,115,193, 73,119,104,103,210,247, 45, 39, 80, 91,155,200,
- 16, 65, 71,194,245,104, 35, 8,216,172,104,246,130,190, 85, 68,238,104,209,225, 57,114,172,233, 9, 4,128,134, 66, 3,223,167,
-200,135, 94,240,176,205,204, 11,123,169, 61,227,180,220,177,100, 24, 64,129, 33, 25,216, 3,180,251, 92, 1, 5,200,167,101, 85,
-179, 89,167,132, 88,117, 25, 61,152,197,154,117, 77,212, 80,193, 9,118, 45, 32,207, 4,117,210,167, 96, 90,235, 89, 93,219, 90,
-225,180,194,173, 66,192, 41,126,251, 23, 35,105,246, 12, 85, 17,239,149,245,140,246, 27,242,242,205, 21,131,155,119,239,148,168,
-109,144,207,105,166, 2, 78, 9,122,157,195,251,144, 8,134,116, 60,102,232,233, 26, 7,114,222,118,206, 21, 48,231,203,253, 55,
- 26,116,212,165, 84,172,176,206,250,234,232,136,236,118,212, 64, 81, 39, 7, 41, 9,114,171, 16,228,216, 94,219,145, 79, 30, 63,
-149, 23, 71,199,204, 72,112,183, 42, 26,192,238,110,110,240,172,160,173, 13,107,129,169, 94,248,189,170, 26,101, 84,236,177,207,
- 8, 26, 97, 92,207,175, 58, 82,213,223,193,120, 84, 12, 70,129, 81,124,173,142,232,211,167,199,242,193,189, 77,194,208, 63,124,
-120, 44,127,244,253, 47,164,144, 10,228, 31,254,210, 45, 57,107,180, 72, 2, 68,246, 8,148, 98,166,244, 56, 27,133,137,189,194,
-254,207, 36,125,157,212,243,148,142, 63, 17,102, 18,184,135,179, 33, 31,201, 80, 96,199,114,223,156,156,234,230, 74, 78,238,108,
-169,227, 41,229, 24, 76,129, 28, 85, 46,107,144, 7,148, 78,207,206, 6, 16, 61,253,156,127,242,157, 45,249,147, 63, 11,136, 88,
- 77, 38, 33,113,210, 0,113, 88, 85,219, 48, 38,178,129, 82, 9,136,171, 72, 78, 96, 87,134,152,240,232,187,206, 24, 58,207, 65,
-155,129,102,189,175,129, 5,248, 31,134, 45, 3, 68,144, 80, 46,193,121,158,234, 93, 64,137, 16, 93, 28, 32,141,162,141,106,164,
-206,103,164,182,168,144, 97, 39,181,248,169, 2,219,232, 32,197,219, 87,123,120,114, 17,200,206,198,154, 60,184,255, 22,187, 42,
-142,207, 78,101,107,125,147,114,208,128,156, 49,154, 19,104,100, 54, 91, 12,249, 4, 5, 61, 47,200,146,179, 82, 74,105,144, 49,
-186,144,114,169, 38,199,167, 13, 13, 58,251,154, 96, 20,156, 19, 4,113, 81,223,179,219, 25,184, 14, 7, 31, 45,172,186,142,234,
- 88,241,221,224, 3, 13,201, 95, 48,122,143, 70, 46, 67, 78,184, 14,134, 86, 55,144,149,149,117,218,145,231, 47,190,100,119, 79,
-185,186, 74,101,184,187,119,246, 56, 8,235, 82,159, 51, 49,203, 63,131, 89, 6, 26, 48,160, 11, 76, 78,238,110,175, 83,119, 62,
-175,119, 37,147, 24,203,189,183,191, 73,206,209,133, 6,141,208,131,255,213,175,239,201,255,254, 93,135,108,116,245,108,160, 85,
- 15,122, 2,150,156,159,177,107, 13, 37,100,237, 80, 19,240,125,240,217, 8,130, 49,100, 40, 55, 9,216,117,195,132, 38,112,124,
- 46,170, 44,218,177,147,217,213, 59, 9, 13,120, 24,225,161,254, 30, 74,166,249, 76, 49,108, 33,246,200, 1,154, 65,227, 64, 1,
- 38, 68,129, 18,146,156,186, 36, 17,237,209,240, 85,176,133,116,210, 18,146,127, 67,177, 43,190,173, 31,132,186, 18, 78,244,138,
-106,158,198,241, 63, 12,215,211, 35,143,138, 50,212, 16, 86,130,134, 1,202, 3,233,244,156, 71,210,208,224, 27,140,125,188,195,
- 68,131,252, 32, 64,103,152,126, 94, 38, 25,198,203,174,160,225,148, 63, 23,207,187,144,162,142, 12,188, 12,179,127,179, 68,147,
-183, 17, 18,128, 93, 30, 51, 21, 33,209,205, 90,243,168,253,222, 31, 47, 10,253,174,113,222,101,219,248, 79, 74,179, 3,144, 43,
-218, 26,137, 13,123, 45, 89,215,204,199,203, 84, 66,118,161,147,234,156, 73,156, 82,111, 59,225, 96, 70,100,147,233,108, 86, 13,
-137,209,131, 84, 34,233, 6,117, 28,244, 77,191, 57,185, 34,147,189,213, 26,205,123, 30,177,169, 20,134, 9,117,186,193,171,249,
-250,157,178, 60, 63,215, 72, 40, 3,135,226, 83, 15,222,179, 78,161,202, 98,212, 33,234, 80, 32,177, 76,213,208,131,180,148,119,
- 25, 7,140, 7, 28, 15,216,210,155, 59,107,154,113, 56, 2, 13,218, 75,208,206,146, 12,220,212,247,141, 98, 74,222,174,234,103,
-105,228,140,122,217,213,196,145,213, 0,225,152, 16, 66,194,198, 67, 40,134, 35, 96, 65,238,130, 19,166,196,160,139,214, 38, 67,
-244,109, 59,105,200,182, 70,241,143,206, 93,107, 28,106,145,234,194,229,229,197, 64, 62,126,114,169, 89,118, 65,246,110,131,144,
- 50,150,253,253,134, 20,122,152,201,174,153,129,153, 50, 16, 42, 21,146,172,173, 35, 19, 34, 65, 69, 13,145, 81,167, 60,214,108,
-181,167,159,219,133,160,196, 52,212,186,159, 78, 92,240, 96,237, 92,222,211,145,109,156,210, 25,106,104, 80,227,218,222, 72, 17,
-225, 32,195, 86, 92,171, 27, 46, 61, 34, 90, 76,115,106,118,144,237, 4,122, 88,115, 36, 14, 34,160, 33, 91, 24,239, 23,104, 80,
-228,249,106, 60,176,183, 41,183, 79,122, 24,239,221, 42,203,160,235, 49,176,131,227,152,134, 4,159,213,106,158, 78, 29, 78, 30,
-194, 64,248, 70, 72,255,142,212,169, 1,225,129,176,204,110,222,137,187, 92,249, 73,201, 20,211,178,157,247,229,181, 6, 68,175,
- 53,200,115,162, 29, 78,121, 11,235,113,123,187, 68,185, 87,150, 37, 66,201, 91,142,116, 12, 28, 26,128, 59,157, 74,186, 81,171,
-248,187, 91, 36, 56,170,145, 84, 47,137, 96, 10,207, 50,235,127,165,152, 82,216, 83, 10,246, 55,137, 90,112,132, 99, 75, 67,208,
-132, 48,142,160,214, 91, 96,246,119,127,213, 35,177,232,103, 95, 52,229,209,203,150,220,189,191, 37,123,107,105,201,219,174, 52,
- 80,247,213,247,134,246, 54,122,230,119,214, 10,186, 46, 99, 71,132, 97,180, 46,204,158, 38, 67, 53, 74,255, 31, 87,239, 21,100,
- 75,118, 93,137,237,204,235,189, 43,111,159, 55,237,209,104,120, 16, 32, 9, 18, 36,130,193,209, 80,102, 66,154, 80,140, 38,164,
- 95,125,234, 75, 63, 19,250,213,191, 20,138,152, 96, 40,244,163, 24,141,134, 49, 65, 98,104, 68, 82, 3, 96, 64, 52,218,160, 13,
-250,181,121,254,189,122,229,235,222,186,117,189,203,155,153,218,107,237,115, 11, 61,234,142,138,126, 93,239,154,204,147,231,108,
-187,246, 90,250,223,246, 64, 3, 12, 53,222,159, 61,218,151, 79, 30, 62, 35,187,226, 96, 98, 68, 52, 24, 85,195, 44, 52, 50, 57,
-148,128,235,229,170,205, 42,107,224,209, 81,231,239,147,171,222,104,119,241,157,112,142, 83,119,156, 97, 36,224,248, 33,140, 2,
- 4, 58, 12, 17, 12, 13,248,214,119,214, 86, 56, 66, 4,174,110, 56, 89,252,185, 94, 46,202,254,233, 25,203,161, 48, 86,159, 61,
- 59, 35, 48,237, 31,125,251,101,217, 63,239,201,223,188,251, 80, 3,207, 54, 25, 25,235, 37, 13,184,250, 35,142, 35,213, 10,101,
- 58, 17,138, 37,199,222,111,180,221,227,136,215,100, 24, 14,235,119, 3, 36,199, 61,233,144,158,152,141, 15,157,102,192,130, 46,
- 24,239, 69,118,138,123,233,141, 35,121,184,223,228, 24, 22, 8,137, 10, 32,168,210, 63,220,123,124, 44, 99,205, 68,115,106,148,
- 81,113, 66,112,250,159,254,232, 59, 28,231, 58,210,224, 56,157,188,202,178,243,247, 94,191, 37, 75,101,163,134,197,185,122,167,
- 23,200, 49, 29,127,204,202, 2,198, 50,105,236, 33,118, 51,113,204,144,168, 60, 65, 81,203,163,140,159, 58,188,136,188, 4,200,
-190,192,171, 63, 13,155,146, 79,168, 99, 67, 31,223,233,215, 15,230,232, 21,231,168, 72,182, 32, 18,154,169,241,246,116,239, 97,
- 58,166,221,133,140,105,139,213, 2, 0,198,150,212,169, 47, 85,235,198,131, 62, 51, 58, 89, 10, 72,207, 35,130, 70,201, 76, 48,
- 15,216, 82,170,149, 10, 50, 29,142,228,228,160, 37,255,244, 63,255, 79,164,211, 58,146, 71,154,177, 23,244,187, 80,149, 33,240,
-111,100, 96, 71, 4,128, 96,157, 3,157, 42, 2, 99,216,218, 76, 2,128, 75,159,247, 8, 39,134, 64, 54, 95, 94,209,245,235,202,
-233,233, 49,207, 14, 2,247,157,237,109,202,244,158, 28, 60, 35,177,151,239,250,175,224,153, 55,172,133, 48, 80, 66,133, 9,207,
-112,117,101, 67, 78, 78, 62,213,100, 66, 19, 34,175, 67,250,215,121,144,228,179,235,245,251,242, 79,254,240,150,124,231,244, 92,
-254,234, 63, 28, 75, 81,131, 27, 4,163,179,208,174,193,156,144, 1,153,201,188, 7,251, 19,154,182, 61,124, 75,174, 80, 20,159,
- 78,126,206,223, 1, 67, 69,202,227, 9,196,184,198,172, 86,180, 47,218,146, 87, 35, 6,249,215,112,110, 83, 18,168, 4,166,194,
- 69, 53,200,252, 28,112, 26, 54, 82,105,213,206,121,210, 50,231,128, 21, 28,171,114, 0,195,185,160, 36,102,165,207, 95, 40, 25,
-199, 14, 8,108,201, 35, 42,159, 36, 95,154, 4,174, 18,128,224,113, 96, 90, 17, 97,200,117,100, 11,139, 45,155, 25,247,253,168,
-223,214,189,131,106, 67, 70, 70,231, 29, 61, 67, 51, 89, 89,206,200,250,149, 42, 63, 99,255,177, 6, 65,221,136,204,136,226, 91,
- 96, 1, 64, 32, 41,188,161, 40, 73,177, 51,207,164,204, 9,172,181, 74,135, 1,249,189,255, 8,244, 23,127, 89,183, 53,254,255,
-227,241,191, 68, 75,131, 51, 94, 83,219,249,248,164, 39,229, 74,233, 18,212,224,233,195, 70,175, 32, 29,146,104, 85,122, 93,227,
- 96,158, 32,192, 77,171, 35,156, 59,234, 75,160,210, 99, 67, 71, 39,156,166, 30, 30,156,169,149, 37, 29,251, 25,162, 71, 56, 19,
- 27,173,104, 84,210,140,106,209,191,197,184, 92,210,105,152, 7, 24,141,152, 7, 44,211,101,245,198, 54,106, 25, 57,237,140,200,
-238, 54,195,194,250, 89,205,202, 83, 44, 27,178,140,131,168, 79, 13,195,113,107, 40,171,137, 33, 29,212,106, 57,146,107,235,101,
-121,112,168, 14,107,230,145,205, 14,125,205,136,155, 13,122,190,161, 60, 61, 25, 72, 48,205,202,221, 53,147,134,245,213,161, 94,
- 91,201,201, 39, 71, 83,150,107, 29,115, 45,175, 21,221,250,193,196, 4, 68,224,116,179,122, 15,187, 43,101,205,206,231,226, 72,
-206, 52,155, 72,243,115, 96,168, 70,152, 73, 13,140,220,197, 11,103,100, 77,123,235,141,109,169, 87,205, 32, 20,203, 5, 41, 20,
- 50,156, 93, 69,196,143, 94, 12, 12, 31,198, 82,146,212, 7,159, 25,171,152,126,111,129,253, 45, 24,246,145, 94, 47, 36,105,210,
- 98, 84,240,214,118, 64,139,132,101,179,192,250,228, 28,163, 66, 48,198,138, 71,200,140, 27, 69, 78,244,227, 50, 40, 89,199, 38,
- 60, 49, 10,244,217,165,178,122, 29,122, 56,134,122,240,212,152, 65,171,121,145, 1,199,142,123, 29,129,209, 68,159,111,163, 38,
-151, 35,114, 0,139,205,146, 57, 18, 71, 96, 98, 2,243,231,217,165,178,172, 55,132,229,174,163,214, 88,238, 61,186,224,104, 28,
- 28, 8,156, 77, 94,215, 32,235, 16,212, 56, 28,197,164, 59,144, 40,231, 63,105,169,179, 25, 93,162,196, 69,140,149,107,181,158,
-163,116, 45, 68, 51, 18, 41, 55, 21, 17,217, 56,221,130, 40, 42,118, 7, 3,255,223,208, 12, 7, 6,160, 55,154,177,108,111,212,
-140,118,152, 61,199, 4, 23,147,111, 94, 88,249,193, 62,128, 33,192,167, 13, 70,129, 20,146,115, 34,156,199,193, 80,110,173, 44,
- 75,115,146,210,128, 99, 42,245,149,138,220,209,160,180, 16,106, 68,238,231,165,162,207,239, 43,101, 99, 61,140, 28,187, 25,246,
- 55,141, 68,232, 84,248,116,109,122,227, 57, 57, 16,112,240, 14, 47,132,220,227, 47,142, 78, 52, 43,171,178,234,112,222, 25,234,
-115,238,176,231,140,253, 2, 80, 25, 24,226,144,117,214,202, 21, 58, 14, 32,166,129, 30,199,189,195,225,207, 28,179, 23,246,254,
-212,105, 48, 28,183,206, 73, 92, 66,131,174,239,199,153,130,118,246, 92, 51,118, 84, 47, 86,107, 21,249,228,217, 1,185,216, 55,
-117,111,183, 52, 75,234,234,243, 94,169, 86,229,191,255,147, 31,201,211,227,190,252,248,237, 79,228,168,217,101, 27, 6,129,192,
-179, 35, 83,191,171,215,171,242,202,107,119,229,172,221,145, 81,111, 32,253,206,128, 21, 1,236, 81,172,107, 49,151,189,156,113,
- 63,212,140,133,204,113,151,212,190, 30, 29,128,217, 24,163,224,101,146,160,129, 64,163,106, 34, 42, 47, 78,206, 72, 40,115,231,
-122,157,122,239,152, 56,121,164,193, 70, 71,215,234,206,230,170,124,248,171, 71,146,187,106,253,242,173,186, 47, 39,167,231,156,
-108, 0, 85,105, 95, 29,221,137,102,146,215,116,227,133,217, 4, 71, 39,129,171,129, 99,128,137, 30, 33, 99,247, 44,195, 13,166,
- 67, 6, 37, 57,224,105, 90,194, 18, 56,246,121, 50,157,100,230, 8,105,233, 80,207, 34,236, 14,234,116,197,114,137,140,117, 30,
-185,232, 35,242,173,147, 65, 79, 29, 87, 42,132, 17,118,154, 2,186,238, 84,158, 36,102, 97,126, 73, 50,244,244,217, 19,249,253,
-239,255, 46,199,109, 87,150,234,148, 62,133,147, 10,103,186,246,154,129,230,242, 21,217, 2,246, 8, 36, 95,186,126,125,117, 12,
-211,105,143,251,233,218,141,151,228,248,236,194, 90, 95,177,173, 23,174, 1,213, 20,128,148,179, 57, 79,202,249, 28,249,198,209,
- 87, 78,171, 67,233, 30, 25, 69,119,165, 92,147,245,141,109, 57, 61,120,168,207,234, 92,182,214,174,106, 98,149,150, 90, 99,137,
-147, 68,123, 79,238,179,124,140,247, 33, 24, 15, 64,247, 28,206,233, 52, 16,176,231,115,105, 50,114,122,115, 13,110,130, 21,249,
-250, 27, 47,203,177,174,107,214,175, 82, 59, 62,140, 82,210,108, 94,200,137,238,185,127,243,227,148,238,133,145, 12,251, 29,241,
- 55, 54,216, 15, 79,120,158,163,114,246,137,181, 33, 89, 25,238, 33,229,179,162,133,202, 90,194,177,170,161, 90,100, 68, 68, 38,
-122, 15, 91,106,114,192, 88,219,169, 52, 91,167,178,210, 88,230,115, 49,241, 38, 43,213, 7,243,224, 55,122, 17,226, 95,242,192,
- 91,171,208, 72, 96, 72,132, 20, 27, 95, 9,103,221, 67,167,171, 16,187,170,132, 38,103,216,183, 11,252,135, 1,133, 45,240, 76,
- 56, 77,137,197, 24, 93,232,218,161,196, 9,129,239, 2, 73, 71, 96,215,145,116,114,223, 32, 43, 82,171, 37,205,246, 76,206, 58,
- 19, 6,156,128,112, 20,171, 89,121,240,196, 68,113,154,205,129, 77,109,144, 15,198, 18,198, 5,127, 5,169,145, 57,246,103, 28,
- 36, 9,242, 54,168,221,212, 96,215, 24,251,140,155, 2,173,130,148,155,124,241,190,100, 47,191,156,241,199,174,101,145,172, 37,
- 71, 82,206,152,243,157,184,158, 6, 74, 28,112,134, 40,249,129, 57, 13,219, 27,229, 27,225,120,146,149,138,233,194, 99, 19,183,
-160, 98,214,220, 74, 2, 32,110, 49,229, 52, 95, 74,122,224,162, 73, 87,114,169,130,100, 48, 79,169,239,197,204,250, 72,179,149,
-181,122,202,202, 94, 97,124,201,111, 59,210, 44,115, 48,213, 27,203, 22,229,103, 79, 32,221,154,151,185,238,186, 70, 30, 89,117,
- 36,173,190, 30, 62, 4, 20,136,190, 53,210, 67,143,171, 10, 9, 68,144,123,104,198,245,230,205,140, 70,165,158, 60,218, 15, 41,
-159,154,136, 48,183,155, 97,166, 10, 54,165,243,142,102, 41,231,190,188,177,161, 81,114,106,162, 6,222, 39,169,195, 79, 62, 62,
- 83,103,149,149,171, 27, 53,211,246,141, 77,204, 4, 27,116,164,166,255,137, 90,230,230,249, 72,182,116, 9,190,117,179, 33, 15,
- 79,213,129,104,132,141,251, 6, 38, 1, 32,184,179,238, 80,138,217,148,149,207,232,156,230,140,192,234,101,115,250,150,213, 68,
-178,177, 90,228,218, 97, 29,131,153,199,210,119,103, 8, 70,184, 41,163,197,179,110,192, 17,193,245,114,138, 6, 12,127,158,131,
- 15,156,133, 85,155, 3,166, 19,153,219,252,117, 48, 11, 46,251, 87, 62, 40, 54,213, 1, 15,177, 81,208,134, 38,240,205,156, 97,
-188,144, 87, 69,212,138,153,254,164, 16, 52, 52,199,251,231,134,208, 78, 17,208, 34, 6,164,138, 60, 2,134, 48,134,147, 8,205,
- 80,135, 96, 46, 3, 47, 63,179,194, 49,213,194, 44,108, 6,121,144,199,210, 25,248,202, 83,137, 52, 3,190, 96, 94, 0, 34, 65,
- 51,159, 17, 9,119,196,145,146, 96, 99, 94, 0,157,126, 62,100, 75, 6,134, 6,251, 8, 27, 18, 7,113,238,212,192, 46, 41, 87,
- 9,164, 51, 74, 73, 70,185, 98, 64,205, 69,127, 41,114, 35, 90,227,153,207, 32, 7,217, 98,114,209, 38,114,125,169,200, 81,192,
-162,101, 52,231,120, 35, 50,173, 64, 90,106,184,164, 4,176, 75,130,215, 50,212,108,253,160, 53, 81,131,152,148,151,175, 85,164,
- 24,117, 56,102,213, 87,163,131, 89,106, 0,192,252, 56,116,200,148,196,101, 87, 11,231, 4,223,136,235,168, 21,242,114,162, 25,
-199, 79, 62,252,140, 4, 38,208, 3, 0,225, 82,145,172,122, 35, 43,151, 67, 48, 72,159, 89, 85,157, 49, 12,100,200, 49,173, 80,
-250,154,101,161,212,186,177,186, 42,159, 63,122,196,125, 56, 84,163,140,158,248,214,218,154, 3, 72, 89,153,222, 42, 24,214,219,
-203, 80, 67,220,151, 71, 47,246,136,159,128,222, 65,206,149, 10,183, 52,123,255,206, 87, 94,227,244, 5,198, 67,127,247,141,187,
- 50,212,235,249,159,254,244,223,170,163, 31,187,209,160,152,217, 97, 62,211,144,111,191,254,154,220,127,178, 71, 67,210,168,150,
- 72,251,153,230,100, 76,154,253,206, 96, 30, 94,246,211, 81, 45,233,141,199,102, 28,225,184,211, 9,167,232, 22,240, 90,147,139,
-204, 6, 83, 9, 9,147, 97,246,196,158, 23,232,148, 67,221, 27, 99,128, 44,179, 5,121,113,124, 33, 25, 53,146, 40, 47,195, 1,
-126,114,127, 79,214,150, 74,116,194, 24,119, 60, 82,167, 28,196, 83, 78,199,128,230, 25, 34, 34,155, 26,100, 63,120,214, 36,184,
- 50,229,148, 0, 25,132, 59,246, 64,246, 85,243, 73, 82, 92,195,233,164,242, 9, 78,142,248,169,156,196, 36,240,177,210,125,210,
- 1,170, 38,179, 62,121, 21, 64,158,149, 70,212,142, 10,140, 31,113,116, 16,206, 47,226,126, 11,169,160, 71,157, 1,144,195,128,
- 90, 23,227,165, 34, 4, 57, 86, 43, 53,102,238, 9,175,194,214, 20,170, 49, 50, 31, 73,183,115,162,103, 40, 43, 95,187,187,198,
- 74,217,115, 77, 48,122,186,231,118,214,182,228,226,228,153,120,209,182, 92,191,113,157,148,208, 54, 81,227, 17, 99,129,189,134,
- 74, 8, 70,206,242,137, 57, 3, 98,236,193,147,222,136, 45,178,107, 87,111, 16, 68,122,170,153, 56, 0,177,235,203,107, 82, 91,
- 89,146,108,169, 38, 23,237, 35, 57, 62,216, 35,144,153,242,168, 44,211,179,201,168, 1, 76,153, 25,115, 81, 19,141, 90,181, 46,
-104,197,102,217,167, 86, 91, 28,102,228,214,213,170,140, 70,192, 41,152,253,156,207,243, 2, 31, 6,219,133,207,185,123,109, 69,
-202, 5,216, 94,223,245,150,147,151, 65, 52, 19, 15, 4,246,228, 42,137,156,224,143,163,125,197,249,198,121,159, 99,180,111,198,
-236, 56,214, 96, 98, 62, 27,210,102, 12, 90, 45,201,232,243, 74,179,109, 19,112,198, 31, 65, 64, 86, 29,233, 69,171,205,192, 44,
-225, 24, 75,243,122,214,112, 45,115, 74, 46, 39, 73,194,196,182,196,196,184, 20,112, 14, 22, 14, 29,118,198,215,235, 9,125,187,
-134, 36,177, 31, 22, 16, 24,171,157, 92, 10, 42, 49,195, 71,192,231,219, 84, 75,180,232,113, 47,202,221, 81,236, 42, 18, 17,171,
-145,231, 61, 59, 23,189, 81, 36,103,103, 67,105,181, 38,191,225,193, 96,240,103, 0, 59,252,119,238,116, 37,224,251, 96,235,166,
-174, 90,190, 72, 66, 76,253,205,218, 0,214,146, 77, 48, 24,128,179, 39, 0, 22,108,133, 0, 6,130,243, 97, 49, 18,154, 77, 27,
-163, 42,156,250,238, 86,154,101,164,195,254,156,101, 47,148,211, 65, 74,224,115,222, 59, 98, 41, 29,116,137,136, 26,176,161, 17,
-192, 70,209,111,244,211,113,124, 22,243,163,198,254,101,162, 28,236, 69, 0,140, 18,106, 68,167, 27, 42, 89, 88,210,236, 53, 36,
- 21, 37,102,145,227, 82,196, 89, 81,207,137,114,192, 80, 15,135,224,208,173, 75,182,144, 35,192, 12,139,218,200,123,178,147,211,
-205,172,239,171, 64, 65, 44, 76,112,222,188,169,175,157,233,231, 38, 66,139,148, 49, 18, 53, 31, 4,114,126, 18, 73,115,160, 63,
-205, 83,249,147,175, 86,229, 72,207,237,243,238,156, 44, 90, 59, 87,182,100,171,145,148,213,124,192,209, 58,248,187, 79,247, 59,
-242,151,239, 28,114,211,174,213,178,178,189, 82,112, 35, 84,214,139,134, 28,237,206, 90, 73, 62,121,112, 38, 21,144, 86, 36,192,
- 5, 63, 34,202, 30,216,132,233,168,207, 82, 24,254,229,193,163,202,155,190, 63, 99,165,216,245,106,134,165,100,180, 37,108, 67,
- 24, 56, 36,165,145,113, 87, 55,192,121,199,198,140, 82,217,153, 92,223,206,105,224,227, 73,179, 59,209,195,174,107, 17, 78, 88,
- 57,161,232,134, 68,108, 81,160,175,227,115,206,221, 74, 79, 36,108, 65,201,137,211, 1,117,121,120,172,238, 31,138,122,186,225,
- 86,179,158,172,150,146,114,216,117, 36, 47,152,199,189, 84, 12,178, 22, 74,187, 63,145,193,204, 35,203, 21, 42, 11, 69,125,214,
- 31,126,126, 40,119,175, 55, 88,242,135,225,100,194,224, 54, 38, 52,103, 9,174,137,108, 66, 0,129,193, 32,176,181,130,241, 26,
- 65,213, 70,230, 60,192,200, 40,163, 82,138,227, 74,236,155,169,129,234,161,218,147,140,136, 71,216,220,170, 74, 67,157,235, 82,
-201,170, 12, 8,218,154,173,161, 58,148, 54,199,114,190,249,234,154,148, 50, 37, 86, 29,184,114, 14, 89,159,116,188,239,204,214,
- 49, 7, 13,167, 26,218,250,160,220, 23,198,114, 9, 86, 90,144,173,120,151,236,126,134,253,152, 76, 48, 30, 20,211, 88,131,139,
- 0,212,184,208,188, 70,123,163,158,143,101, 31, 0,156,160, 39, 19,253,239,217, 64,157,136, 6, 86,245, 74,222,130, 42, 71, 17,
-204,202,136, 19,156,161, 81,136,128, 78,239,233,115,119,101, 97, 53,232, 8,114,234,200, 58,244,123,143,245,207, 99,231,144,129,
- 86, 47,171, 67, 7,107, 28,208,210,113,116, 44, 75,245,134,171,164, 37,216, 75,140, 98,251, 30,244,209,107, 26, 84, 31,106,118,
-139, 64,120,185, 94,167, 24,136,105, 2,204,232,204,216, 63,198,136, 16,218, 79,154,237, 36,213, 8,110,174, 46,201,119, 95,191,
-205,107, 67,239, 30,165,120,148, 38, 79,218, 61,217, 89,173,201,159,124,231, 43,242,158, 58,206,191,255,248, 1,101, 60,191,167,
-175,253,209,239,126, 67,207, 79, 32, 75,106, 88,201,186, 54,155, 59,198, 73, 3, 3,194,130, 38,124, 39,118, 4,167,174,191,219,
-108,212,104,168, 56,103,173,215, 14,188, 4,108, 4,128, 85, 16,248,192,250, 3,184,151, 39, 51, 28,176, 53, 35, 3, 40, 81,178,
- 53,228, 56, 22, 28,112,235,188, 39,235, 43, 21,121,250,180, 35,141, 90, 81, 86,234,101,130, 45, 15, 79,219, 36, 92,249,226,225,
-115,205, 60,215, 41, 54,130,231,120,128, 32, 64, 63,167, 86,206, 49, 16,197,184, 41,159,121, 50,226,158, 48,176,105,104, 60, 7,
- 32, 58, 1,209, 82, 63,228,159, 3,111,198,246, 4,106,120,137,216, 16,227,216,147,222,112, 74,146, 44,246, 99,129,162,206, 37,
-200, 82,136,253,197, 6, 18, 9,123,226, 75,160,224, 20,117,241,200,218,143, 8,100,150, 27, 13, 94, 19,250,194, 36,229,209, 51,
-184,189, 92,144,167,195,148, 85,137, 18, 3,121,126,220,149, 98,177, 32,181, 82, 70,230,227,132,188,244,242, 43, 82,173,229, 57,
-217,176,190,181, 43,205,211, 35, 61,119,214, 14, 69,229, 10,235, 93, 66, 96,162, 54, 4,180,179, 88,227,153, 38, 36, 0, 40,215,
-107,187,250,220, 81,165,184,144, 55,191,250, 10, 9,165, 34,181,193,153, 66, 93,206,154, 39, 50, 30,245, 25,160, 99, 41,102,142,
-179, 12,109,128, 76, 26, 18,210, 83,125, 93, 89,202,245,101, 89, 94, 42,147,150, 23,142,162,164,246,163, 59, 0,182, 67,215, 34,
-167,201,144,218,163, 79, 30,189, 96,101, 5,130, 56,143,143, 58,242, 95,255,240,170,126,198,166,252,217,255,251, 88,157,239,220,
-152,244, 60, 59,151, 28,185,117, 26, 1, 36, 38,115,124, 35,115,167,110, 8, 63, 18,184,177, 57, 95,131, 52,156,197,233,164,175,
-231, 81,147, 23, 61, 27, 83,245, 11,157, 78,135,129, 44,168,152,225,128, 59,160,206,141, 50, 12,188, 19,180, 39, 33, 19,199, 84,
- 26, 85,160, 20, 91, 91, 9,183, 55, 71,131,174,156,158, 60,103,159, 62,233, 0,112,158, 94,247, 82,189, 40,245,245,151, 28, 26,
- 63,102, 27,216,254,153, 95,250,180,200,113, 7,100, 93, 9,220,216, 85, 35,135, 35,138,216, 10,102,251, 47,229, 49, 65,129, 94,
- 0, 90, 83,253,145,141,187, 98, 29,158, 31, 15, 25,200, 47,148, 30,237, 28,135,174,140,110, 32, 66, 92,167,241,120, 69,108,145,
- 46, 84,216, 22,224,246,144, 85,112, 27,113,132, 15, 64,133,200, 19,239,146,122,218,254, 60, 55,217, 99,207,198,186,147,174,178,
-147,140,138,158,220,122,185, 44,185,167, 67, 2, 35,122,179,136, 76, 64, 8, 98, 33,122, 48,131,226,151,103,243,159,139,204,228,
-203, 34, 36, 17,153,177,244,128,140,251,242,237,235,121,121,118,145,208, 0, 1, 8,216, 57,231, 76,171, 85,148, 47, 49, 95,171,
-198,187,160, 7, 91, 29,227,195,233,144,229, 82,244,167,193, 37,238,163,111,173,198,187,154,207,208, 80, 32, 82, 69,169,102, 71,
- 51,227,219, 53, 53,170,205,174,252,217,135, 39,236,215,162,219, 5,210,152,215,119, 42,236,187, 36,226,185, 17,154,232,218, 78,
- 91,158,156,118, 52, 99, 95, 74,201,187, 29,163, 56,125,115,195,151,191,123,251,137, 58,158,152,194, 43,215,151,214,228,163,227,
- 41,123, 85,234, 79,228,167,239, 31,179, 66, 1, 17,134,191,253,229,115,249,199,191,115,131, 64, 43, 3, 99,133,140,150,214,235,
-121,121,243,238,138, 92,128,143,218,131,128, 77,134, 45,132, 70, 37, 75, 57, 67,148,244, 39,250,160,174,175,151, 76, 34, 21,229,
- 44,189,249,191,126,255,133,116,218,105,249,254, 87,243,204,230, 13,105, 26, 90,118, 60,155, 80, 99,254,228,124, 32,109,189,214,
-155,155,105,185,117,189, 40,216, 35,147,105,210, 70,221,244,181, 85, 61,204, 65,202,232,225, 39, 94,142, 15, 87,196, 69,157,112,
-106, 25, 95,131,128,169, 20,138,190,108,109,136,220, 63,136,136,220,157,234,193, 94, 85,107,213,211,131, 83, 45,101,137, 94,231,
- 70,250,210, 44, 5,174, 21,109, 0,148,228,209,215, 7,167, 57, 56, 10,160, 89,207,153, 80, 16,185, 76,125,246,185, 16, 37,154,
-108,161, 26,170, 82,142,189,247,141,138, 26,177,106, 78, 62,122, 50, 34,114,149,125, 48,189, 39, 4,110,120, 38, 40,201,205,117,
-239,244, 96, 4, 57,128,111,228, 54, 23, 99,140,255,232,186,174,151,233, 8,111,173,169,105, 85, 67, 51, 85,163,242,206, 7,135,
-154,161,105,182,124, 52,148,240,182, 26, 29, 15,142,214, 64, 80, 9,167, 93,157,242,211,172, 38, 5,212,242, 54,128, 35, 12,116,
-129,108,111,142,146,119, 62,115, 56,145,200, 1,101,204, 9, 65,199, 96, 52, 2,158, 96,198,234, 75, 87, 51,213,245,122,130,213,
- 7,140, 47, 1,151,121,112,218,147,243,243,177,204, 86,117,239, 66, 25,207, 79, 17, 49, 31,187, 8,123, 58, 55, 7, 78, 42,106,
-142, 84, 58,166,122, 16,230,244,251,242,151,191,252,216, 0,163, 32, 87,201,229,120,144, 81,222,133,161,131,243,169, 87,202, 28,
-241,131, 67, 7,138, 29,253,180, 86,231,130,189,116,148,109,171, 24, 61, 42, 96, 68, 50, 43, 75,149,170,241,138,187,209,180,154,
-102,129,120, 54,152, 77, 70,201, 26,227,101,224, 70, 71, 86, 14,208, 31,162,122,202, 95,114, 6, 60, 45,121,125,253, 82,185, 32,
-112,119,141,162, 26,109,117,230,231, 26, 28,252,249, 79,127, 37,167,221,129, 20,212, 80,255,163,111,188, 42,119,174,108,200, 55,
-127,235,171,242, 98, 56,145,243,123, 15, 73,199, 11, 33,159, 12,133,232,103, 18,129,158,153,170, 41, 41,222,111, 14,149, 16,135,
-170,173,151, 75,134,175, 88,244,211, 89,233, 89,101, 2, 16, 80,244, 66,237, 10,131, 65,115, 26,211,169,169,172, 5, 28,229,131,
-170,161,190, 31, 1,178,174, 81,251,188,203,242, 38, 40,129,203, 5,168,151, 25,122, 26,146,156,232,185,162, 45, 3, 70,202,144,
-244,186, 25,106,132,175, 47,151,169,150,133,224, 6, 61,203, 68,228, 57,164,125,146,149,140, 20,201, 97,192, 21,156, 33, 65, 11,
- 72, 83, 48,251,158,211, 12, 28,108,211,193, 80, 40,125, 26, 39, 98, 42,187, 77, 28,234, 58,197, 64, 60, 71,144, 39,104,166, 83,
- 73, 4, 37, 17, 41, 65, 11,154,229, 6,243,169,209, 10, 75, 78,131, 27,107, 69,148, 53,248,130,128, 11,197,131, 80,185,210, 0,
- 42,151, 52, 5,197,104, 2,204,199, 68,158,159,118, 37, 15,240,164,190,127,125,117,131,213,190,195,230, 80,191,115, 44,149,250,
-140, 1, 41, 4,122,194,216, 50,200,136, 65,188, 85,252,150,151, 54,244,239,198,156,238, 41, 53,174,243,249,215,235, 53,125,206,
-183, 37, 87, 66, 10,218,147,253,115,117, 82,195, 83,158,155,116,190,164,193,201, 72, 70,157, 46,131,108, 4, 80,100,223, 99,181,
- 4,207, 35, 67,161, 38,172,251,149,141,134, 92,221,200,203, 69,103, 44,167, 77, 61,243,201, 18,215,187,168,193, 71,175,255, 88,
-247,231,136,163,115,216,143,255,234,111, 62, 37, 94,229,160, 61, 33,241, 20,213,243, 28, 86,155, 65, 55,156, 97,104, 85, 79,164,
-126,176, 87, 28,109,228,125, 37, 89, 29, 49,153, 98, 8,105,169, 63, 24,163,162,129, 64, 53,144, 98,182, 34, 37, 13, 6,123,234,
-156,251,131,115,182, 17,170,249, 80, 42, 57, 77, 72,226, 20,155, 58, 64,203, 35, 99, 95,224,204,176,199, 32,197, 59,209, 32, 6,
-184, 38, 40,242,193,167,130,140,172, 90,173,176, 42,128,140,254,162,125,166,223,145, 34, 43, 41,170, 66,105,125,222, 28, 1, 68,
-229, 41, 90, 32,217,231,156,252,192,216, 40, 41,140,163,145, 28, 31, 93, 48, 8, 97,114,171,207,165, 92,174,104, 18, 58, 98,162,
-130,117, 76,164, 50,180,203,228,125,153, 91, 34, 20, 57,109, 13,207, 85, 19, 57, 1,228,156, 58, 43,166,177,189, 38,118,127,127,
- 89, 87,244,253, 47,143,206,155,120, 89,210,210,176, 48,252,146, 4,118,104, 99, 40, 11, 41,104, 40, 22, 18, 12,136, 12, 23, 51,
-213,235,187, 89,201, 23,102,242,226, 36,148,158,110,190,147,238, 76, 55,163,149, 86,187,211,190,147,244, 12, 47, 75,160,151,227,
-125,164, 98, 12,229,180,213,147, 63,186,147,149,168,234,201, 23, 7, 93, 82,113,214, 82, 86, 6,173,232,115, 72,231,113, 49,234,
- 60,117, 97,159, 39,141,175, 23, 96, 29,140,133,245,103, 89,246,244,210, 14,232, 80,203,121,242,242,146,200,114, 89,183,144,102,
-172,109, 53,192,127,245,225,169, 62,248, 57,213,195,126,244,221,146,108,169, 3,133,243, 4,184,204, 7,215, 51,156, 41, 22, 7,
-101, 10, 93,148,183, 94, 47,203, 92, 51,230,147,139,145, 60,217, 59,101,214,137,135,253, 83,189, 6, 80, 48,162,223,142,205,117,
-214, 26,177,119, 5,123,245,120,255, 66,254,246,221, 23,242,163,111, 93,225,198, 36, 1,220,220,122, 46,175, 92, 91,146, 51,205,
- 58, 65, 65, 15,150,167, 61,125,223,118, 38,150, 91,119,234,106,108, 35,249,249, 23,109,205,234,115,242,242,110,158,179,253, 40,
-239,126,250,240, 84, 55, 91, 74,190,114,123,149, 61, 43,244,207,169,222,133,185,114, 32,139, 51,160,243, 44,201,217,249,137, 12,
- 70, 62, 51,254,181,106, 74,114, 60,112, 30,169,119, 1,192,163,216,169, 62,179,141,122,206, 84,138, 34,131,200,145,172,198, 79,
-202,103, 7, 19,121,171,174,209,124, 70,179,186,130,102,137, 35,145,171, 75,190,188,180, 26,201,253, 61,141,236,211,136,234,244,
- 32, 77,130,255,136,195, 24,217,246,170, 58,229,238,196,103,239, 11,165,156, 72,141,226,171, 55,235, 22,185, 70, 86,225, 8,157,
-200, 12,199,149,244, 53, 69, 53,180,221,161,209,142,230,171,232,231, 38,165, 51,156,235,225, 79,202, 31,253,246,174,113,183, 35,
-138,173, 22, 13, 60, 41, 19, 39,159,154,112,224, 54,227, 95, 70, 9,245,228, 76,179,198, 90, 77, 80,101, 12,144,161, 78, 3,215,
-143,247,152,173, 67, 60, 3,198, 14, 7, 73,146, 89,215,239,119, 2, 76,177,127,217,195, 53, 3,104, 64,201,134,222, 19,184, 10,
- 80,186,155,133,129, 27,217, 9, 57,143, 12,206,132,182,254,156,169, 49,106,233, 51, 4,174, 67,252,162,190,223, 14, 26,132, 50,
- 48, 18,231,187, 81,150, 3,189,190,227,246,140,184, 2,181, 49,140,156,205, 65,199, 78,227,222,215,251, 8, 76,148, 5,243,231,
- 23, 23,100, 42,131,128, 7,162,123,100,173,195, 89,207,230,117, 33,243,154,201, 49,171, 61, 62,111, 89,133,202, 55, 32, 17, 12,
- 3,250,212, 4,196,169,193,107,182,154, 6,220,116, 6,184,221,239, 90, 6, 4, 6,188,241,136,226, 26, 13, 53, 44, 8, 48,209,
-230, 1, 37, 40, 84,180,170,197, 10,199,170,186,195,129, 58,219, 10,217,213,128,143, 64,182,211,235, 13,168, 75,253,218,213, 13,
-249,234,173, 29,130,227, 64, 30,210, 40,231, 41,155,249,191,252,203,255, 75,154,234, 60, 49,198, 58, 81, 35, 91,252,245, 67,205,
-226,170, 82, 84,131, 12, 73,228,186, 26,199,216,113,254, 27, 71,190, 71,133,179,135,251,103,228,241, 71, 32,135, 89,100,100,116,
-168,118, 1, 60, 53,119,202,125,111,222,220,150, 43,215,175,203, 63,188,243, 62, 73,153,224,220, 81,206, 46, 23, 50,186, 62, 41,
- 53,226,190,174,243, 68, 30,105, 48, 7, 80, 26, 72, 84,230,243, 14,129,114, 32,106,154,103,234,242,210,171, 85, 58, 37,100, 67,
-231,195, 64, 38,135, 26,128,117, 78,164,221, 27, 75,161,177, 67,163,141,128,107, 87,179, 93, 60,251,148,238,221,241, 40,203, 74,
- 81, 82,109,196,206,181,149, 75, 41, 97,216,139,180,152, 30, 66,120,153, 73, 89, 53, 2,229,222,197,168, 18,144,234, 72,162,138,
-211,192, 18,155,200,248,190,109,124,212, 35,255, 57, 20,219,170,186,214,155,155,187,114,116,214,148,251,143, 31,202,238,238, 45,
-126, 22, 8,104, 78, 33, 91,221,238,144, 94, 56,157,246, 57,171, 61,132,118, 67, 18,137, 70, 74, 78,143, 79, 57,150,219,237,118,
-229,249,139, 3,185,113,125, 87,159,199, 9, 19, 7, 42,155, 37, 76,172, 6, 28, 29, 51,150,176, 53,155,174, 46,201,206,213, 77,
-181,111, 67,125,174, 35,105,237,239,203,175, 63,216,151,171, 87,182,217, 90, 40,104, 38,222, 30,154,172, 50,166, 11,234,213,154,
-140,251, 67, 35,179,242, 77,137, 48,153, 45,235,107,243,178,181, 82,213,235, 25,113, 52, 53, 10,219, 70, 84,133, 22,192, 48, 38,
-247,125, 81,247, 50, 24,251,154, 26, 4,190,180,187, 34,107,203, 43, 12,114, 30, 30,180, 40,207, 10, 76, 6,218,132, 8,198,216,
- 6, 68, 21, 47,178,254, 55,218,177, 99,240, 52,120, 78,129, 18,109, 44, 36, 77,129, 1,191,208, 10, 56,239,156,115,228, 52, 26,
-163,196,214,148,157, 43,250,252, 66, 76, 92, 13, 56,166, 56, 82, 71,221, 62, 59,214,164,115, 87,118,182,150,164,167, 89,124,186,
- 81,226,200, 39,167,109,212, 65,223,127,122, 34,251,135, 7,172,204,208,201, 82, 48,201,132, 98,192, 40, 56, 30,119,168, 35, 2,
-219,116,245,234, 21,233, 77, 51,210, 88, 94, 39, 89, 86,183,115,170,191,159, 50,211, 53,187,239, 81, 36,107, 56,177,245, 7,127,
- 20,130, 2,210,114, 19,155,131,164,119,104,246, 23,149,177,129,238,191,114,226,114,238, 62, 94,160,237, 29, 40, 27,149, 91, 27,
-249,156, 75, 74,236,119,147, 32,188,212,208, 72, 56,189,139, 47,243,198, 47,250,237,172,134, 71,214,139,183, 62, 63,112, 7, 9,
- 75, 92, 66,219, 67,216,187,148, 5,142, 77, 24, 41,249,228,185,241, 6,167,220, 70, 47,100, 66, 57,106,235, 70,153, 8, 9, 58,
- 22, 89, 57,126,126,239,149, 53,142, 7,193, 57,101, 19, 80,150, 50, 22, 50,148, 9, 48, 47,140,153, 89,148,255, 48, 38,210, 1,
-152, 70,163, 75,244,129,112,157,141,186, 79,128, 7,140,223,148,116,150,186, 56,249, 20,153,158, 78, 52,114,109,158,247, 89,123,
-192, 33, 6, 58,251,149,223, 91,147,164,102,143,147, 81,200,190,147,135,114,179,166, 13,141, 90, 78, 62,123,218,150,245,149,162,
- 92, 89, 43, 49, 82, 73,194,233, 76, 34, 55, 87, 24, 90,246, 4,227, 15, 64,189, 46,227,171,183,150,229,189, 79,154, 28,239,120,
-182,223,213, 77, 49, 98,207, 43,156, 59, 81, 12, 44,154, 46,198, 87, 95, 90,211, 13,156, 34, 83,211,114, 37,119,169,194, 68,130,
- 7,252,228, 26,210,156,248, 28,127,187,182,189,164,175,211, 72, 77, 55,227, 64, 63, 23, 37, 23,148,226,128, 4, 71, 78,248,193,
- 3,112,202,207,184,105, 63,124,112, 44, 95,127,117,147,235,148,240, 13,111,144,200,230,121, 13, 85,253,255,171,235, 5,110, 14,
- 68,183, 52,152,158,245,166,218,122, 79,111,223, 59,145, 38,144,214, 43, 21,249,254, 27, 89,102,127,145,219, 52, 67,253,222,211,
- 81, 68,212, 55, 21,214, 0,160,209,107, 91,207, 38,228,206,154,176, 85,112, 99,171, 44,159,237,245, 56,226, 7, 81, 28, 56,167,
-219, 59, 21,215, 67,207,112,102, 87,156, 38, 59, 28, 25,214,168, 63,178, 40,158, 34, 27,236,203,134, 54, 95,239, 16,165,126, 4,
-173,120, 83, 83, 27,183,166, 12,206, 50,154, 37, 99,146, 97, 55,155, 52,234, 6,207,152,237,224,144, 72,136,129,117,196,134, 78,
- 90,233, 62,147,245,228,206, 78, 89,114,250,190, 49,178, 46, 80,153, 38,230,100, 85,195,252, 54,198,148,198,227, 57, 55, 61,156,
- 18, 56, 17, 24,204, 88, 84, 73, 3, 30,185, 49,192,216,177, 70, 1,193, 75,242, 25, 53,248,208,113,134, 84,238, 60,101, 25, 2,
- 50,181,124, 58, 36,133,231,246,154, 47,191,126, 8, 54,183, 88,174,172,164,245, 39,111, 4, 48,250,194,199,135, 3, 13,148, 82,
-204,132, 80,114,197,115,253,240,139,115,249,230, 43, 53,106, 6, 32,170,247, 83,161,171,116,136,225, 39,116,139, 63, 84,131,242,
-233,243,167,116,178,112, 88, 73,210,176,138, 99,173,179,214, 7, 50,107,128,223,144,113, 19, 88,231, 16,188,216,183,229, 74,129,
-127,191,220,168,201,222,177, 58,170,126,207, 80,189,142,178, 51,114,138,132,198,199, 61,166,193,232, 14,251,166,128,150,206,176,
- 2,131,239, 42, 21,234,164,111, 69,159,119,109,169, 66,156, 7,190, 51,237, 27,137,203,139,195, 51, 10, 24, 61,222,123, 78,212,
- 61, 28,243, 71, 79, 94,112,223, 49, 40, 70, 57, 60,157, 35,173,237, 47,127,253,148,165,100, 4,189, 96,188, 67,198,191,181,218,
-144,205, 90, 73,106,234, 40, 48, 47,221,236,104, 70, 95, 49,128, 26,218, 79, 23,104,191, 16,196, 40,204,146,231,228, 47, 0,173,
-238, 68,142,143,247,228,197,209,129,102, 91,115, 13,202, 55,229,141,151,110, 81,205,176,165,198, 6,218, 5, 51,253, 57, 87,103,
-135,169,240,195,179, 11,150,220,225,196, 61,210, 85,155, 20,113, 15, 66, 46,112, 56,112,186, 61, 35, 96, 33,170, 25,165, 92,150,
- 32,167,226,101,244,108,165, 66, 50,188,129, 47, 65,156,102, 55, 0, 93,168, 40,161,162,146,156, 69,214, 94,144,216,181,180, 60,
-158, 23, 76, 21,128,196, 10,140,134, 8, 38, 11,200,202, 10, 37,102,133,195,161,241, 71, 0, 20, 8,231,132,105,155, 4,207,236,
- 76,188,138, 39, 5,125, 93,251, 2,128, 56, 19, 64, 65, 32,213,237,117,152,120,116,251, 3,233,232, 86, 88, 66,155,113, 52, 97,
-191, 57,239,101, 13,220,120,142, 25,245, 50,247,250,105,179, 37,119,110,223,144, 91, 55,118, 53,187,222, 55,110, 11,189,215,219,
-187,187,106, 91,183,109,116,115, 52,151, 23,167,125, 61,207, 77, 89,203,233,147, 31, 33, 49, 82,167,164, 1,227, 89, 39,144,171,
-155, 5, 26,251,221,181,154, 60, 7,211, 29,122,239,250, 76, 94,122,233,154, 62,215,162,141,204, 57,241, 21,100,159,104,135,164,
- 19, 1,193,134,199,167, 99, 13,204,212, 39,140, 52,184,235, 37,164,213,156,104,144,113,131, 21, 57,156,241,157,181,170,100,115,
- 37,182, 93,215,151,133,189,110,204,202, 35,107, 7, 19,220, 92, 50,172,180,142,135, 41,130,118, 48,146,219, 40,229,245, 53,171,
- 70,118,229,103, 88,165,227,136, 27,170, 41, 25, 35, 15, 91, 94,169, 73, 49,179, 34,149,146, 94, 59,159, 95, 66, 6,253,164, 84,
-138,117,218, 11,236, 97, 84,104,193,156, 9, 60, 67, 78,215, 58, 32,150,198, 39,231, 6,130, 39,112,243,115,130,199,139, 24, 84,
-146,242, 94,131,139,233,160,101,115,235,234,143,176,207, 65,164,150,215, 96,114, 78,173,132, 64,191,167,173,182,123, 74,159,228,
- 57, 86, 63,180, 66, 32,143, 59,209,253,187,218, 88,150, 90,181, 42, 75,249,162, 94, 67, 69,191, 91,215,249,228, 72,186,154,245,
-131,223, 96, 58,106,203, 69,251,132,159,133,107,109,172, 92,231, 90, 44,170,162, 1,171,171,134, 57, 42, 37, 3, 6, 10,240,175,
- 70, 19, 28,186,236, 63,186,100,103, 68,224,158, 78,186,177,192, 75,167, 30,153, 63,154,155,144,215, 98, 90, 8,206, 62,116,224,
-102, 2,241,176,183,127,252,110,151,233, 63, 22, 7,206,182,145, 30,202,141, 70, 86,238, 55,133,165, 72,147, 21, 68,233, 46,163,
-206,160, 68, 66, 25,100,241,236, 63,197, 38, 76, 17, 83,147,219,147,227,177, 71,238, 97,148,111,107, 75,203,226,169,115,153,128,
- 14, 81, 15,231,113, 43,164,200,194,193, 97,155,172,106,232, 7, 53,251,145, 46, 86, 65,157,120, 82,127,143,197,157, 88, 73, 85,
-157,195,253,107, 89,153,119, 53, 10,188,152,200, 65,123, 32,121, 28,234, 92, 70,163,182, 41, 75,166,127,245,243,103,242,219, 95,
-223,150,173,229,146,222,212,148,189, 27, 0,115, 80,202, 36, 98, 26, 84,169, 36, 11,240,229, 43,175,108, 17, 32,241,236,104,100,
- 40,199,228, 98,222, 57,162, 67,195,189,131,148,224,250,118, 85,190,121,103,153,193, 7,122,125,144,129,197,107, 9,114, 99, 63,
- 54,102, 32, 3, 98, 28,244,201,231, 81, 74,141,143,103, 76,116,200, 30,212,192,205,134, 61, 18,221,252,234,211, 67,246, 33, 17,
- 25,191,255,217,145,172, 47,149,101,173,158,163,177,131,145, 52, 80,152,245,197,119,214,202, 26,252, 76,100,222,155,169,241,139,
-164, 51,134,150,188, 81,240,130,173,239,188, 61,102,192,243,162, 85,214,181,202,112,243, 96,237, 47,244,215,195, 57, 39,221,165,
-175, 75, 48,238,219,184,212,205, 21, 84, 70,132,196, 57, 40, 47, 98,166,250,241,193, 80,178, 26, 33,163,204,247,106, 54, 65,244,
-122,180,208,223, 69,100, 10,253,237, 9,116,143, 99,130, 78,240,255, 66, 28,161,149, 1,123, 26,165,151, 48, 7, 29,155,163,193,
-122,122,234, 32, 91, 35,220,119, 79, 52,246,146, 84, 96, 1, 85,232,202, 78,152,203,135, 51, 71,214,103,228, 37, 54,146, 5,206,
-106,100,202, 24, 29,171,107, 0,215,239,142,200, 86,135,204,247,218, 82, 36,155,165,172,201,176,206,251,114,114, 48,190, 36,133,
- 24,207, 46,100, 48,115, 37,170,132, 33, 67, 47,153,155,220, 97, 36, 75,154,254, 57,187, 94,231,124, 57, 14, 67, 76, 5, 43, 35,
- 40, 89,114, 37, 98, 72,184, 6,175, 70, 12, 92,241, 83, 91,139, 53,218,239,200,233, 73, 71,215, 41,197,192,196, 72, 83,230,228,
- 33,135, 49,141,216,195, 70,230, 25, 51,184,213,144,149,242,175, 8, 68, 6,147, 1,175, 25,178,168, 64,103, 95,160,231,205, 30,
-219,156,251, 18, 8,119, 80,136,162,116,158, 36, 5,176,207, 67,142,234, 72, 78,157, 50, 28,253,238,198,134,236,157,156,169, 65,
- 25,235,186, 7,174,188, 22, 25,192, 38, 54,240, 23,104, 61,193, 89, 80, 68,171, 96,110, 72, 94,144,110, 44,122,117,221, 65, 95,
- 86,234, 13,102,187,126, 50,199,209, 49,202,184,170, 35,126,105,107,153,164, 57,121,125,239,179,125, 51, 22, 0, 53, 66,168, 3,
- 21, 53,163, 36,213,172, 89, 63,239,188,215,151, 27,155,203,234,164, 39,106,220,198, 68,213,163,132,254, 72,179, 51, 60,139, 43,
-235, 75,106,208,199,106,248, 7,188,135,208,105, 4, 64,218,119,228,232, 60, 23,153, 8,158,125,187,215,149,240, 81, 72, 14,125,
-202,153,234,254,122,231,211, 7, 84, 99,220, 90, 91, 85, 71,180, 42,123,154, 41, 2,253,206,182,137, 26,104,240,236, 39,196,112,
- 18,208, 30,143, 72,120,101, 1,131,105,178,199, 6,146,194,120, 84,128,202, 98,130,107, 68,118, 74, 13, 20, 61, 93, 87, 4,165,
- 48,228,158,239,148,232, 76,174,219, 72, 70,225, 88,213,129,132, 25, 99,166, 4,174, 6, 68, 53,104,181,162,181,144, 77, 26,144,
- 10,200,119, 50,117,161,218, 2,193, 36,223,168,136,187, 23, 23,108,145,225,249,161,236,142,140, 22, 78, 24, 64, 71,203, 32,145,
-217, 37, 77,145, 78, 51,222,130, 63, 48,133, 68,117, 32,161,126, 78,167,121, 42,157,206,166, 38, 60, 85,125,110, 99,102,132,231,
-231,231,242,254,251,239,203,239,255,240, 7, 38,192, 52, 55, 53, 67,104, 76,132,115,219,203, 19,181, 49,185, 88,215,190,217,151,
-205,141, 85, 13,220,179, 26,124,249,106,223, 2,105,157,238,107,130,131, 10,135, 71, 44, 20,196,150,158,156,181,228,250,238,134,
- 60,122,246,152,235,178, 92, 95,210,128, 38,199, 22, 79,181,156,101, 85, 16,179,245,213,114, 68, 1, 24, 84,155, 80, 53,109,235,
-153,223, 80, 95,112,126,246, 66,131,221,150,172,168,173, 6,152,249,184,211,227, 94,155,134, 73,102,161,144,136, 94, 93,170,114,
-143, 52,193,133,160, 14,120,185, 86,117,142,212,215,189, 61, 34,129, 18,176, 64, 8,154,174,172,148,101, 4,249, 93,223, 90, 74,
- 80,227,195, 28,188,239, 36,168,193,234,136,118,210,234,114, 85,162,122,129,231,228,230,181,107,114,113,113,206, 96, 99,107,107,
- 75,175,233,152, 0,204,134,238,245, 86,123, 78,132, 61,132,144,172,114,108,160, 53, 0,102,203,165, 26, 69,108,166,154,241,195,
-249,163, 53,133, 96,119, 78,100,187, 41,228,101,147,117,121,122,216, 52,194, 32,253,119, 28,204, 24,180,225,218, 1,230, 4,231,
-195, 69,183, 67,219, 87, 44, 22,137, 17,128, 92,121, 20,218,108,191,199, 25,255, 57, 91, 2, 17, 81,248,216,171, 38,229,123, 57,
- 99, 14,113,199,241, 72,175,215, 99,130, 49, 28,196,142, 92, 50, 36, 88, 16,175, 93, 72,113, 91,160,105,253,248, 5, 38, 40,225,
- 91,245,200, 64,209,190,163,101,118, 10,118,174,248,138, 0, 1,227,185,201,246,112,100, 72, 59,125,209,193,241,185,188,181,225,
-203,119,191,177,166,206, 98, 44,123,157,144, 6, 15, 14,235,229,109, 93,120,125,128,233, 98, 66, 31, 42, 30,236,196,136, 83, 22,
-232, 98, 32, 28,167,115, 26,156,107, 91, 75,234,208,139,220,192, 38,244, 59, 53, 61,238, 76, 36, 23,173,136, 52,170,232,169, 65,
-222,180,141,113, 26,141,144, 87, 52, 97, 92,133, 64, 70,148, 32, 8,225,193,211, 83,141,234, 83, 28,107,194,168,148, 41, 24,205,
-153,225,192, 9, 29,159,245,229,175,127,254, 84,190,241,198,166,102,236, 21, 19,168, 72, 88,118,154, 97,249, 34,102,127, 56, 73,
- 71,239,201,239,125,125, 71, 13, 82, 79,126,161,153, 47, 22,101, 58, 49, 78,112, 56,235, 82, 57,207,178,240,255,243,139, 39,236,
-225, 93, 93, 43, 91,169, 19,200,115,140,171,184,204,159,100,173,190,201,198, 70, 14, 48, 56,214, 47,157,129,157, 14, 40,218,137,
-110,210,193, 64,238,191, 24, 73,175, 15,233, 72,147, 18, 29,169,227,251,232,193,169,252,225,183,174,152, 40, 11,178,241,121,116,
-201,150, 6,170, 69,108,234, 71,135,106, 64,245, 51,250,250,157,181,140, 70,237,167, 93,205,172,186,252, 30,244,189,158, 31,116,
-229,230,149, 26, 75, 85, 19, 61, 80,227, 40, 99,147, 8, 16,207,208,117,122,160,135,122, 89, 15, 88,173, 20,147,238,149, 85, 8,
-112,149,151,211,114,109, 35,214,207, 31,107,148,153,145,243,254, 92,131,146,228, 37,216, 12,115,219,211,153,174,233, 69,168, 70,
-124,238,202, 80, 32, 1, 66,118, 29,145, 32, 38, 28,171, 33, 73,175,144,238, 55, 8, 13,184, 97, 12,128,154,133, 12, 39, 6,244,
- 72,218,204,242, 2, 96, 50,163, 74, 41,230,182,199,220,248, 28, 1, 35,194, 88,175,245,177,222,203, 86, 65,174, 52, 74,156, 48,
- 8, 1,128,241, 52,100, 74, 67, 84, 37,114,115,162,234,220,166, 49,179, 52,176,205,161,231,159, 79, 8,177, 16, 45,141,216, 35,
- 94,103, 98,161,122,233, 84,241,124, 25,128,201, 16, 61,188, 40,127,169,129,108,204,133,241,101,159, 29,192, 48,140,146,168,221,
- 20, 76, 95,193,193, 85, 42,121, 89, 90,173, 73, 87,141, 22,214,248,193, 19,125,142, 26,104, 37, 22,124,251,177,149,119,135, 12,
-126, 52, 40, 43, 68,242,201,147,231,114,166,217, 25, 14, 62,169, 90,213, 73,193, 48, 46,120,161, 11, 28,253, 74,234, 62, 30,113,
-173, 50,110,124, 5, 78, 15,172,113, 64,188, 99, 94,253,181,155, 55,165,165,134, 2,232,120, 56,215,105,127,122,169,210,231, 45,
-116,149,245, 58,214,170, 37,222, 15,166, 45, 80, 81,162, 40, 15,152,229,128,140,206,229, 24,245, 99, 94,253,182, 26, 65,124, 54,
- 0, 71,152, 59, 71, 9,187,161,153,118,134,194, 39,125,170,137, 97, 57,208,155,199,141,173, 47, 55,248,249, 48,148, 51,182, 42,
-230,114,222,237,169,193, 46,208,209, 33,251, 47, 36, 76, 50, 21,103,231,201, 81,147,192,188,206,160,167,217, 85,145,231, 47,162,
-158,125, 96,165, 68,183,214,145,147,163, 4,184, 11, 97, 73,119,136, 76, 48,188,236, 21, 34,107, 4,191, 58,152,212,188, 75, 82,
- 13, 97,160, 1, 37, 55,244,231, 49,197,129,146, 46,218, 39, 83,199, 64, 24, 57,106,105,244,236,145,109, 34, 11, 15, 98,204,107,
-152,162, 31,198,179, 16, 84,227,245,104, 3, 88,164,238, 93,114,106, 47,228, 82, 57,210,230,120,202, 17,164, 0,252, 25,134, 86,
- 58,165,242, 87,140,207,152,240,236,135,129, 17, 4, 33,211, 7,231, 5,198, 65,209,127,133,202, 90, 93, 29,217,208, 77, 1,192,
-238, 97, 26, 1, 83, 13, 51,135,196,135, 1,206,229,241,236,179,180, 31,243,217, 64, 63,123,164, 54,176,201,146,124,185,178, 34,
-249,212,148, 45,164,230,241, 19,121,254,228,166, 58,218,134, 60,248,228,125,125,134, 23, 12, 20, 38,110,150, 58,212,251, 68, 21,
-235,238,173,107, 26, 36,149,105, 3,174,109,168,243,210,108,122, 48, 90,210,164,103,192, 76, 23,192, 67, 84, 87,118, 55, 55,212,
-169,205, 53,105,217, 32, 16, 23, 10,117, 80,225,220, 63,236,200,195, 39, 67, 57, 59,126,196, 49, 90, 76, 55, 97,220, 19,215,140,
- 61, 92,214,231, 26,168,141,185,166,137,211,126,171, 79, 76,213,186, 58,196, 9, 48, 68,144,149,197,108,185, 58,181,241,112, 78,
-178, 26,244,234, 87,116,127,218, 51, 76, 72, 83,131,245, 10,144,245,152,199,215,245,223, 59, 57,151, 52,116,219,139, 33,147,173,
-171, 27,117, 62,139, 86, 31, 34, 62,125,217, 88, 90,146,161, 62, 47,180,123, 39,103,231,204,156,235,181,186, 52,245, 62,244,106,
-245,190, 46,100,103,115, 75, 30,237,157,202,222,254,190, 38,132, 53,121,244,162,165, 54,163, 76, 10,112,156,127, 84,132, 80,201,
- 66,213, 46,138, 38, 26,120,157,203,254,254,158, 44,175, 93,213,207,170, 81,175,225,180,123,100,147, 26,152,192,208, 51,131,140,
-125, 14, 9,242,132, 85, 35,137,127, 16,227, 86,193, 20, 19,125, 15, 71,149, 83,196, 53, 0, 79, 19,204,198, 82, 42, 53,200,111,
-129,172,186, 84, 14,140, 31,160, 57,160,112, 13, 41,167,195,240,114,244,149,213, 36,128,108,231, 8, 0, 18, 84, 6, 76, 39, 92,
- 79, 28, 32, 15,200, 99,198,151, 12,179, 86,113,118,106,108,240, 95,160, 65,247, 92, 54,110, 42,157, 86,158, 7,242,105, 33,104,
-134,214, 99, 30, 54,123,189,156,160,145,204, 35, 82,154,107, 38,167, 27, 2, 44, 76,119, 86, 83,114,208,153, 73,187, 51,150,122,
- 41, 35,215,171, 26, 61, 12,251,252,130,205, 92,164, 81,225,144, 55, 78,173, 92, 82, 65, 26,141, 36, 16,147, 56, 84,249, 57,192,
- 98,198, 70, 87, 80,103, 14,246,167, 88,157,220,119,190,178,101, 3,254,122, 96, 78,154,161,252,244,221,167, 44,211,254,209,119,
-175,202,213,213,178,101, 92, 60, 4, 14,159,173,239, 95, 93,157,202, 82,107, 36,207,213,193,157,158,143, 88,118,249,238,155,155,
- 4,128,161, 44,116,109, 5, 98, 44, 73, 10, 35,224,253, 86, 86,243,100,239,180,163,155, 58,205,153,123, 82,157,130, 3, 59,242,
- 77,205,198,183, 12, 53,149,181,172, 12, 76, 84, 88,176, 15,239,159,208,201,102, 18,254, 37, 24, 33,225, 80,156, 36, 7,112,140,
- 68,134, 60,247, 57,179,140, 17,131, 55, 95, 90,150, 79,213,113, 63, 57,155, 48,155, 95,169,103,245,144,207,201,143,140,123,217,
- 63,234,106, 36, 59,213,195, 87,102, 20, 57,152, 79,216,167, 1, 1, 10, 38, 6,240, 15, 42, 26, 23,106,224, 80,238,158, 13, 99,
-210,159,130,176, 7,125, 85, 24, 54,244,152, 83, 48, 92, 26,129,247,167,105,110, 22,236,135,138,174, 67, 71,215,119, 73,163,202,
-237,101,104, 24, 59, 72,246, 66,150, 16, 61,193, 74, 70,174,234,181, 62, 57,153, 80,112,130,226, 60, 95, 34, 48, 56,185,152,200,
-126,115, 34, 94, 10,101,213,132, 99,212,139,212,152, 36,165,154, 84,131,176, 94,148, 56, 17,202, 11,240, 78,167, 12,196,103, 6,
- 76,215, 93,179,157,166, 58, 25, 15, 44, 34, 98,253, 31, 89,232,201,131, 57, 42,145,227, 78,197,136, 97,189,192,165,212,107,208,
-251, 81,103, 3,105,221,187, 55,235,242,206,175, 15,228,222,131,115, 39, 5, 26,186,210,186,153,121, 32,127,183,214,242, 68, 57,
- 35,200,131,200, 16,250,234,200, 0, 43,154,105,248,145,121, 2, 24,121, 56,244,214,185, 58,184,212, 80, 42, 57,187,119, 60, 39,
-140,156,205, 40,239,106,207, 21, 10, 84,179,137,103,179,169, 49, 70, 16,213,168,135, 37,130, 0,219,237, 46, 9,136,170, 21,244,
-170,109, 76,237,172, 13, 17,153, 33, 29, 75, 50, 3,112, 40,208,186, 19,102,170,200, 66,208,199, 6,183,252,177,190,151,101, 56,
- 0, 10, 65, 91,169,215, 53,134,106, 8,123,107, 41, 82,251,162,132, 6, 37,181,139,254, 64,142, 91, 45,185,115,245, 10, 29, 15,
-148,213, 18, 9,223,245,172,141,127,128,242,168,145,149,223, 65,248,114,117,107, 91, 86, 53, 99,138,212,168,124,248,248,133,116,
-103, 17, 51,201,102,251, 66, 26,250,153, 75,106,184, 78,154, 45,199, 72, 54,100,214, 15,112, 38, 12,221,145, 3,229, 29, 53,155,
- 44,149,227,249,129,196,101,187, 94,146,207,247, 91,242,233,222, 17, 3, 14, 16,199, 84, 80,202,209,117,122,113,122,110,142, 52,
-142, 28, 1,144,245,249,102,142,220, 5,224,181, 28, 36,147, 11, 57,210,125, 38,124, 27, 13, 91, 16,213,248,142,196,197, 74,173,
- 41,102,133,152,187, 69, 38,132,128, 2,202,121,107,141, 37,210, 59, 95,221, 68, 37,161, 73,164, 54,238, 31,210,167,168, 12, 82,
-218, 56,109,138,130, 99,182, 47, 70, 26, 96,230,196,131, 50, 33, 65, 67,190, 17, 10,233,249, 33, 10,152,164, 86, 57,142,123,246,
-251,125,219,123, 9,163,178, 30,113,194,103, 78, 58, 89, 4,110,184, 55, 4, 69,105,178,135,165, 47, 51,114,142,225,121, 70,235,
-204,204, 26, 14, 61, 50,249,216,192,233, 94, 47, 38, 47, 18,163,177,244,212,153,228,213,137,179, 20,239, 91,203,130, 51,201,236,
-193,198,108, 67, 66, 24, 74,211,104,147,140, 70,239, 83,237, 99,167,221,146,208,207,203,107, 27, 87, 57, 77,179,186, 92,147,228,
-198, 58, 1, 93,149,242, 85, 89, 89,223,150, 15, 62,249,152,152, 18, 82, 41,187, 17, 38, 84,182, 66,112,201, 63,121,194,192, 28,
-213,198,136,116,208,226,216, 56,201,118, 34,247, 91, 39,108, 45,224, 60,126,246, 96,200,214, 5, 5, 91, 52,200, 44,106,208, 16,
-121, 25,102,166, 64, 96,103, 53,187, 7,113,214, 48,240, 68,227, 86,217, 41,102,100,115,169, 76,176,244, 55,238,110,201,207,239,
- 29,201,175, 30,180, 72, 38,134, 25,247,158,222, 47,167, 65,146, 33,129,209,153,100, 78,238,239, 55,153, 8,226, 58,208,175,198,
-126, 58,237,154,112, 22,224, 43, 32,198,250,226,217, 1,247,243, 21,117,208, 0, 49,118, 53, 11,158,143,250,186,222, 21,205,186,
-155,114,170,206, 31,108,153,229,234,138,180, 53,176,132,192,206,193,241, 51, 13, 46, 99,150,195, 17,180,228,139, 85, 73,100, 96,
-159,117, 45, 53, 24, 59,238,157, 48,161, 35,167, 60, 71,172, 53,224,152,160,138, 84, 34, 97, 79,189,146, 99,197, 21,215,132, 48,
-139, 68, 86,250, 95,168, 37, 18, 60,169,215, 75, 98, 30,236,241,249,148,192, 68, 96,163,226,216,144,250, 40,221,183,218, 29, 38,
-115,208,157,247,213,166,165,210,166,230, 9,176, 92,160,201,221, 36,232,179,253,121,117, 69,237,228,241,153, 76, 70,106,163,147,
- 21, 6,201,248, 94, 80,108,163,101,147,195,168,177, 62, 59, 95, 38,196, 85, 5,250,252, 75,121,147,146,206, 36, 13, 24,138,150,
- 38,170, 15,168, 40, 60, 63, 27, 27, 3, 94,108,202,113, 36, 41,243, 28, 96,206, 1,128,241,119, 0,247, 53, 26,186,239,222,218,
- 84, 67,163, 7, 21, 64,174,249,198,138,236,181,242,106,212, 6, 82,203,171,179, 92, 74,202,187,173,182,252,250,176, 41,191,255,
-122, 81, 26, 26,149,204,125,116,169, 19,178,170,198, 20,229,136, 36,147,163,152,132, 3, 0, 85,165,139, 49,191, 52,149,130,227,
-234,203, 16,139, 30,219,184, 19,140, 8,202, 97, 56,120, 48,206, 64, 31,238,238, 44,203,193,217, 72, 62,122,214,215, 7, 85, 32,
-226,150,237,198,132,245, 28,176,138, 37,221, 92, 95,169, 23,229,245,155,171,234, 40,167,114,160,209,208,173,173,154,252,206,171,
-235,234,128,102, 20,212, 0,241, 11, 2, 19,234,249, 98, 14, 91,159,210,146,110,164,237, 98,204,114, 39, 15,145,222,124, 29,189,
-161, 90, 70,142,206, 0,192, 8, 36,147, 55,250,215,140, 94, 59,168, 73, 97,180,142,154, 61,249,238, 77,141, 72,245, 65, 93, 76,
-172,138,129, 40, 16,101,176, 56, 54, 16, 24, 74,117,139, 17,138, 72,131,161,109,117,226,232, 71,223, 88,131, 30,182,209, 56, 62,
-216,159,115,222,149,109, 10,189,223,119,239, 29,202,245,149, 12, 91, 9,227,104,198, 7, 59,119, 61, 19,100, 7,199,221,169, 70,
-173,232, 7,251, 28,223,106,143, 80,238,201,146,109, 11,115,211, 24,163,203, 69, 83,121, 12,145, 11, 32,117,147,118,208, 49, 86,
-177,170,209,240,213,122,104, 74, 61,115, 87,239, 89,140,105, 56, 86, 66,140, 7,109, 55, 60,233,232,117, 46, 85,224,140,173,144,
-146,210, 23, 60,254,232, 84,246,187, 9, 89,219,172, 26,213,169,219, 92,203,185, 80, 78,213,176, 95,173,215,165,228, 7,146, 77,
- 88,239, 28, 25, 86, 10,220,208, 73,163,133, 61, 31, 76,120, 72,176,201, 3,150,138, 13,236,161,119, 70, 92, 1,106, 34,147,225,
- 64,247, 75, 90,150, 43, 89, 41,230,103,204,208, 64, 15,186,113,165, 36,217,199, 25,105,247, 67, 43,147,163, 50, 17,196,228, 54,
-192,218, 87,107, 57, 89,215,245,197,168, 24,202,152, 47,239,174,219,104,101,236, 84,172,146,110,172, 3,115,218, 7, 23,234,212,
- 79,197,153,181, 75, 97, 9, 84, 7, 48, 61,145, 74,154, 83,170,148,139,156,233,181, 41, 14,159,114,170, 15,239, 95, 80, 65, 10,
- 37, 84, 83, 44,131,241, 84,231,131,232, 58,128,193,240, 47,231, 84, 15, 90, 71, 4,189,129, 70, 25, 89, 37,140, 91, 23,220, 5,
- 81,232,102,176,115, 28, 55, 67,144, 66, 61,130,164,105,154,163,172,152, 87,167,118,210,110,243,245, 55,119,118,164, 81,173,200,
-103,143,159,241,250,103, 84,180,210, 61,160,159, 11,131, 54,119,104, 87, 60, 20,100,159, 0,182, 61,213, 96, 21,173,139,175,221,
-190, 42, 15, 52, 99,126,164, 63,216, 7, 64,161,191, 56, 58,166,252,103,191,223,227,186,195, 9, 2,215,128,253, 10,231,143,254,
- 59, 74,134,148, 78, 86, 3, 3,131,123,239,233,145, 94,107,224,128,127, 9, 6,238, 32,125,234, 12, 71, 98, 83, 92, 41,246, 49,
-167, 65,232, 42, 34, 78, 90, 18,170,107,250,252,251,154, 65, 5,147, 30, 91, 50,168,237,140, 92,233,146,253, 61,100, 62, 46, 3,
- 65,105,127, 58,183,241, 33, 74,108,102, 17,144, 77, 89, 18,157, 73, 86, 3,177,148,108,175, 5,242,225, 39, 15, 72,235,139, 42,
- 81,181,148,103,251, 7,101,111,204, 28,163,164,140,192, 44,151,207,144,156, 9,229,219,180,107,243,192, 24, 93,142,249,136,169,
-186, 97, 62, 27, 4, 54, 36, 86,145,169,120, 57,107,215,180,212,153, 14,167, 67,102,116,249,108, 73,114,197, 34,249,209, 81,189,
- 51,114, 36,187,206, 78,183, 69,176, 25, 2,220,116, 62, 43,229, 4,168,141, 7, 50,165, 83, 16, 6,240, 25, 80,220, 22,138, 4,
- 8,226, 58,209, 95,206,229,236,249,219,248,145, 81,105, 15,208,237, 27, 14, 9, 92, 35,191,197, 64, 3,177, 70, 67,239,111,102,
-124, 19,234, 28,114, 9,208, 92,231,137,123,192,154,223,188,253,138, 28,237, 63,148,211,179, 51, 93,179, 34,219, 64,108, 39,105,
- 16,133,241,181,243,139, 22,245,237,177,199, 76, 33, 45,224,119, 81,154, 57, 48, 86, 58,207, 17, 85, 49,184,157, 27, 15, 4,212,
- 1,215,147, 37,142,224, 21,179, 87,117,191, 45, 88,205,132, 56,147,132,218,246,159,106,160,253,183,191,188,167,123,116, 85,202,
- 78,167,130,136,110, 16,187, 68, 30,199,182, 16, 20,111, 55, 52,233, 91, 43, 26, 96, 77,179,255, 86,119,198,177, 57,180,241,186,
-122,191, 47,239,212,101, 0,233, 94,182,105, 68, 19,173,156, 6,192,234,136,207, 78, 25, 92,194, 14,190,122,109, 83,247,211, 80,
-134,224,226,215,245, 24,206, 52, 57,155,246, 56, 10, 89,169, 20,117,141,211, 26,212,151,244,187,115,106, 11,107,186,190,121,210,
-184, 98, 60, 20,250,240,160,147, 6,194, 62, 12,163, 75, 14,118, 58,224, 66, 69, 50,165,186, 6,208,224,255,239,115,170, 8, 4,
- 78, 20,176, 82,187, 26,105,144,133,228,107,230,248, 62,122,147, 17,239,169, 0, 14,133,249,156, 36, 80,240,164,104, 25,145,179,
- 1,231, 90,147,171, 88,157, 60,180, 3,176,183,176, 11, 38,234,115, 10,229, 37, 89, 93,223,148,238,164, 47, 23,163, 88, 86,243,
- 99,181,181, 57, 86,112,215,170,154, 8,116, 6,146, 46,129,135, 33,148,106, 26,211, 58, 9,217,210,181,219,235,137,252,241, 31,
-108, 75, 2, 34, 84, 8,152, 2, 11,134,147, 41, 35,242,233,254,187, 61,217,215,100,145,237, 92,151,202,131,243,196,212,237, 98,
-195,194,144, 8, 75,179,127,244,213, 81,226,192,193, 8,152,113, 65,164,160, 34,232, 6, 34, 67, 41,233, 6,251,193, 75,117,249,
-179, 95,236,177, 60,178, 83,139,120,144, 80, 41,216, 74, 5,116, 32,145,110,254,179, 97,168, 70,106, 34, 95,187, 90,151,205,170,
- 26,184,241,132, 11,244,174, 70, 24, 93, 47,103,100, 13,147,153, 19,139, 49,201, 64,244, 38, 49,255, 8, 70,172,151,174,100, 88,
- 10,237, 14,230,234,156, 96, 40, 18,164, 26, 69,128,153,246,109, 60, 37,155, 50, 75,146,171,231,165,160,134,249,237,251,103,186,
-145, 74,124, 0,250, 76,104, 4, 80,138, 96, 86, 97,172,150, 82,213,131,117, 49, 7, 85,105,150,135,235,219,111, 20,228, 91,186,
- 40, 16, 74,248,248,201,185,124,166, 63, 24, 79, 1, 79, 57,250, 45, 57,205,170,113, 0, 48,183,188,186,146,227, 65, 57, 57,155,
-184,113, 37, 91,112,176,234, 65,106, 22, 24, 2,245, 53,194, 42, 30,118,207, 72, 35,241, 97,160,206, 33, 69,249, 90,246, 58, 33,
- 38,128, 3,230, 8,247, 1,120,195,195,202,113, 42,192,168, 15,159, 3,240, 18,186,241, 40,221,104, 21,125, 88, 62,244,199,245,
-239,191,255, 74,141,189, 81, 24, 26,150,216,129,216, 7,153, 72,102,164,193,210, 68, 78,186, 80,163, 74,107,228,151,147,205, 70,
- 65,146, 57,255, 75,132, 7, 84,245,112, 37, 29,115, 10, 40, 82,212,150,245, 32, 94, 76, 73,115,105,243,219, 49, 75,173,160, 87,
-205,151,235, 4,101, 45,178,215,155, 26,128,188,190, 58,149, 79, 38, 9,249,251,143, 79,228,123, 47,175, 18, 73,122, 37, 19, 81,
- 57,174,144,182, 44, 18, 20,213, 48, 74,155,203, 21, 89,169,102, 93,201,213,163, 97, 96, 63, 8,224, 62,204,177,198,121,246,220,
-177, 57, 55,151,203,122, 16, 98,185,232,141,164,173,187,250,218,106, 69,222,120,101,198,246,197, 82,125,137,100, 33,224, 99, 71,
-164, 12,148,116, 41,159,226, 88,224,113, 7,204,106, 21, 58,181,133,219,190,164, 80,134,190,115, 92, 83,163,152, 33,209, 10,231,
-178, 73,238, 48, 34,208,165, 88,182, 62,249,217,121, 71,154, 61,200, 72,102,165, 86, 72,153,210,153, 30, 74,128,122,128,155, 64,
- 6,132,136,122,239,160,207,178,174,144,117, 11, 83, 22, 35, 57,215,204,124,112,214, 55,212,120, 53,199,253,214,209,231, 2, 71,
- 76, 89,214,140,113,203,247,221,172,118,134, 52,195, 30, 3, 59,244,186,225,228, 30,237,239, 83, 10,179, 81, 41,203,237,171,187,
-242,232,197, 62,191,215,218, 50,230,208,241,165,200,104, 81,194, 93,168,154,161, 2, 69, 18, 23,144,107,104,128,244,201,179, 61,
- 74,134, 34,123, 68, 59, 11,135, 26,165,114, 80,199,162,119,143, 41, 16,112, 83,227,124, 3,248,131, 86, 84,189,154,162, 1,155,
- 71, 54,127,219,213, 76,118, 48,153, 56,164,109,194, 69,255,226,244, 24, 98,206,153, 35, 40,246,139, 9, 67,251, 2, 24,166, 7,
- 12, 78,178,167, 14, 47,135, 17,169, 82,133,149, 56, 4,212,200,134,232,196,231, 38, 98, 4, 7, 82, 45,230, 88,205,225,124,117,
-207,212,245, 82,169,156, 84, 48,171, 93,222,148,173,141, 13,222,227,254, 89,143,211, 34,127,248,189, 55,228,233,193,169, 60,219,
- 63,230, 24, 21,212,202,230, 51,195,191, 16, 40,202, 76,219, 2,112, 78, 20,168,131, 7,169, 13,120,199,209,102, 64, 54,170, 17,
- 40,123,198, 84, 21,155, 4,116,118,243,216,148,234,176,134,141,218,146, 6,118,186,143,178,121,130,157,112, 95,105,182,143,172,
-205, 50, 15,172,172, 14,133, 70,210,245, 58,234, 81,124, 95, 97,216,147,206,197,133, 6, 36, 17, 83, 79, 16, 50,193,142, 97,114,
- 1,163,114,225,130, 87, 33,142, 72,232,131,172, 21, 78,126,213,143, 73,215, 90,212, 32, 2, 92,242, 1,201,101, 64, 86,114, 34,
-229,147,186,172,111,236,168, 99,207,209,153,204,117,207, 62,123,113,168,246,169, 40,175,188,242, 85, 25,189,247, 75, 6, 42, 41,
-180, 64,211,158,244, 7,168,146,169,173,213,196,165,144,199,222, 48,237,135, 16, 51,220,172,132, 69, 44,169, 91,245, 82, 88, 97,
- 34,208, 52,153,160,228, 41,198,125, 49,239,159,209,251, 15,230,186,143, 53,201, 56, 59,122,202,201,139,217,184, 34,255,252,135,
-175,201,206,106, 89,254,197,255,241,182,156,156,107,208, 22, 86,140, 31,208,139,157, 78, 5, 0,132, 5,174,213,218,170,218,159,
-205, 10,229,178,183,182, 86,228,157, 79, 14,104,235, 11,122,190, 58, 26, 20,163, 90,129, 41,147,174, 38, 81,214, 62, 69, 85, 32,
-166, 79,192, 25, 69, 48,213, 27, 11,255,123,147, 68, 58, 70,100, 83,171, 22, 77,225,208,245,154,137,163, 72,193,198,121,108, 63,
-158,171,163,110,106,112, 77,233, 43,125,254,228,158, 8,167, 78,172, 37, 37,249,124,137, 60, 35,217,148,161,194, 71, 17,152,237,
-132,232,127,218, 5, 93,171, 1,117, 1, 66, 86,153,112, 6,141,102, 86,207, 70,214,103, 22,141, 64, 52, 67, 60, 79, 36, 70,128,
-231,241,187, 76, 10,217,179, 42, 72,104,154, 37,172, 82,105, 40,122,164, 73,231,222,209,185,124,243,155, 27,146, 47,148,100, 2,
-230, 77,111,172, 79,188, 40,229, 82, 78,131, 87, 95,122, 31,159,201,225, 81,155, 35,203,143, 30,159,202,225,193,146,220,122,169,
-193,179,229, 37,205, 94, 83,176, 72,247,215, 43,183,202,250,121, 3,182, 82, 81, 49,194, 30,128, 60,246, 60,166,243,177,192, 95,
-191,123,103, 57,171,219, 81,157,255,148, 34, 32,145,113, 86,199, 83,202,139, 10, 50, 11,117,178,200, 0,103, 26,133,143,212,176,
-116,206, 7, 50,131, 81, 68, 6,166, 25,118,181,174, 81, 57,162,123, 63, 37,149, 70, 89,118,118, 83,178, 82, 74,144,132,229, 31,
- 30, 15,228,241, 94, 83,142,123, 51,102,198,155,154, 25,207,213,242, 3, 68, 3, 33,146,222, 88, 13,151,102,158, 75, 26, 29,232,
-113,209,108, 48,201,158,242,171, 80, 58, 82,163,147,128, 10, 9, 12, 12, 16,169,242, 27, 46, 92,206,180,235, 3,254,187,147, 30,
- 23,238,157,135, 77,185,189, 93, 85,103, 12, 38, 58,124,102,218,148,223,156, 56,137,198,100, 18,161, 92,229,199,116,218,233,228,
-130,192,223,147, 55,111, 52,228,218, 70,145,155, 7, 70, 75, 56,194, 98, 51,206,159, 61,111, 73, 87,141,254,246, 86, 70, 15, 90,
-210,104, 65, 13,130,163, 14, 34, 37, 73,221,156, 37,141,184, 32,238,194,242,110, 56, 99,255, 15, 89,235,147,163,145,236, 37,132,
-234,116, 0, 59,208, 88, 66,173, 40,105, 25,203, 12, 58,234,250,223,243,254, 84, 14,213,201,255,242,139,182,102,131, 51,185,123,
-165, 44,255,236, 15,111,146,226, 21,135, 6, 37,125,246, 18, 49, 39,233, 91,185, 27,117, 73, 16,159, 96,180,239,195,189,174,156,
-183, 65, 67,168,206,126, 84,148, 91,155,105,169, 54,114,236, 29,198,174,167,137,245, 34,105,180,211,245,193,102,159, 83,252, 34,
-208,172,221,184,213, 57, 41,128,153,243,205, 13, 57,234, 89,217, 62,208,247,174, 85, 19,114,187,110, 37,218,151,110,172,200, 36,
-110,202,187, 15,207,229,213,235, 75, 4,230,132, 14, 8,134,114, 87,167, 61,144, 23,135, 3,246,108, 87,170, 25,102, 77,112,242,
- 73, 7,140, 99,224,133, 30, 15,118, 71,210, 99,249, 31,207, 1,100, 55,201, 90, 81,218,211, 57, 3,160, 55, 95, 41, 80, 99, 26,
- 35, 72, 16,106,193,220, 59,245, 0, 34, 35,205, 72, 3,136,166,219,179,165, 22,192, 79,130,121, 47, 77, 10, 77,182, 25,124,143,
-142,244,176,217,129,233,163, 42,215, 52,200,176,100, 11, 7,136, 17, 25, 0,173,250, 32,213,128, 42, 27, 24,201, 70, 51,153,140,
- 82, 60,196, 32,143,128,236, 99, 56,179, 82,241,121,183, 41,131, 94, 87, 86, 42,107, 24,124,210,191, 31,202, 88,215,224,188, 59,
- 36, 25,204,122,166,198,246, 77,127,110,186,221, 40,233, 86,160,120, 40, 98, 37,111, 17,151, 29,154, 74,217, 82,189,204,202,214,
-195, 23, 7,116,178, 48, 30,171,154, 37,237,159,158,178, 92,142, 62, 56,156,115,133,217,152, 81,104, 18,221,154, 88,168, 67,249,
-236,189,163, 23, 94, 45,150,120, 61, 0,222,141,124, 35,123, 66, 80, 12,166, 58,148,173,151,235, 85,142,189,117, 53, 91,231,239,
-192,122,165, 70,107,185, 86,103,240, 1,192,216, 98,132,230,224,180,105,217,180, 27,207,241, 61, 43, 46, 51,160,198, 56, 79, 58,
-125,137,194, 77,179,242,162,247, 37,166,250, 23, 0, 67,160,182,160,162, 78, 17,215,107,132, 50,190,156,180, 58,236, 61, 39,147,
- 70,109,140, 76, 11, 21, 2,159, 84,208, 98,186,236,106,176,218,189, 33, 65,123,168,208,129, 63, 32,163,127,190,255,236, 41,247,
- 37,170, 83, 94, 18,217,248, 72, 32,194,155, 76,154, 18, 23,122,216, 48,190,188, 22,180,112, 28,130, 25, 45,161,172, 94,143, 36,
- 60, 71,246, 97, 60,244,172, 60,164,173,141,134, 12,136,140, 91, 26, 44,165, 98, 35, 97, 65, 41, 21,246, 5,118, 47,153,204,243,
-239, 35,183,223, 60,150,241, 51,196, 73, 68,177, 81,194, 98, 54, 25, 12,107, 0, 24, 38,178,122,191,200,202, 19, 66,206,126, 4,
- 97,177,235,125,130,145,147, 19, 37, 98, 10,104,105, 4, 49,149, 26,157, 63,236,192, 88,131, 44,140, 62,182, 47, 58,250,153, 93,
-121,246,240, 51,205,218,151, 53,112, 69, 96,107, 70,122,160,207,248,226,162, 45, 27,107,203, 28, 87,124,252,228,177,148,202, 53,
- 18, 79, 97, 13, 0,200,130,147,219, 90,174,179, 18, 4,185, 92,201,198, 4, 21,122,161,141, 81, 97,172, 11, 9, 79, 33,159, 96,
- 53,112, 74, 6,201, 9,193,196, 71, 71, 7,108, 7,229, 11,203,116,140,192,115, 0, 27,244,179,247,191,144,119,239,237,203,191,
-248,111,127, 87, 94,189,177, 45,167,157,161,188,104,246, 41,217, 74,118, 76, 18,239,128, 61, 47, 69, 7, 61, 24, 71,114,210, 9,
-165, 94,207,106,160,154,146, 55,239,172,203, 3,181,161,219, 43, 69, 89,153,231, 9,248,187,185, 89,147,138, 62, 83,144, 93,193,
- 60,247,199, 25, 25, 5, 9, 6,154,152, 49, 47,228,139, 4,226, 82,248, 42,105,213, 20, 86,173,230, 22, 24,245,199, 54,215,142,
-231, 3,249,230,201,116,172,159, 53, 32,158,194, 64,179, 62,131,243,153,163,146,205,235,243,201, 23,235,156,142,152, 5, 61, 86,
- 47, 18,108, 95, 36,245, 89,155,142, 59, 58, 51,216,131,120,218,248,110,236, 25,156, 61,146,236, 48,128, 74,242,121,163,234,198,
-233, 29,189,215, 73, 98,198,223,199, 14, 39, 49,232,180,116,127,229, 77,217, 20, 21,160,214, 57, 3,229, 50,248, 21, 52, 67,191,
-251,237,134,204,117,255, 32,200,165, 90, 61,121, 45, 60,121, 75,253,219,231,143,155,242,246,103, 39,106, 83,102,242,243, 95, 60,
-151,107,215, 42,172, 54, 33,122,136, 29,251, 39, 56, 77,118,119,139,178,161,254,118,255,108,196, 4,165,224,107, 64,145, 41, 73,
-148, 40,176, 90,134,107,219,105,232,254,159,247,200,247,144,236,233, 98,245,212,225,130,208, 51,147,200,106,166, 57, 37, 5, 97,
- 14, 81,160, 70, 36,231,186,240,119, 55, 74,140, 48,194, 74, 69,102,195, 33, 75,159, 47, 14, 70,100,125,219, 92,209,131, 93,202,
-114, 84,232,176,213,151, 11, 93,132, 73, 58, 39, 91,119,111,200,241,189, 3, 57,104,245,100, 87,175, 21,188,214,148, 99,140,140,
-166,176, 59,152, 25, 11, 29,165, 33, 67,217,110,248, 82, 43,249, 68, 83,250, 78,191, 27, 81,149, 1,111,140,169,135,154,226,186,
-113,187,179,152,155,107, 10,129,150,185,169,204, 9,213,195,244,144,198,214, 43,135,180,122, 22, 32, 40,141,232,154,154, 1,172,
- 84, 10, 36,145, 9, 93,249, 16,209, 35, 50, 8, 56, 5,124,223, 36,180,145, 56, 4, 42,175,238,214,185, 6,179, 81,204,236, 60,
-136, 18, 44, 37,101,138, 64,237,199,146, 45,235,102,206,167, 37, 64,217,166, 63,165,145, 44,234, 33,126, 69,131,128,193, 56,228,
-142,191,122,187,172, 7,206, 14,119, 65,163,177,227,214, 84,126,193,158, 86,200,223,245,157,170, 24,192,127,220,120, 0, 8, 46,
-101,141,240, 34, 52,178, 10,112, 98,199, 0, 76,128,108,197,201,222,198,250,124, 18, 32, 28,137,103,114,122,220,149,214, 16, 14,
- 39,148,206,173,154,108,172,102,184,121,120,160,167, 96, 55, 11,140,114,210, 9,240, 36, 34, 59,240, 83,244,136,150, 50,140,234,
-135,253,185,236,247, 19,210,153,185, 44, 21,212,139,234, 61, 95, 91,143,244,126,225,206,178,140, 28,191,246,198,186,196, 31, 29,
-203,227,163,190, 92,191, 2,254,238,128,107,152,208,160,105, 89,191,247,142, 30,210,179,206, 72, 29,110,129, 25, 47, 34, 78, 4,
- 48,214, 11,246, 47,233, 84,129, 44,102, 79,214,201,238, 34,147,128,191,135, 94, 64, 22, 18,152,149, 20,199, 81, 0, 76, 73, 35,
- 80,130, 16,107,108,180,162, 24,187,236,123, 19,153, 14, 35,217, 92,210,168, 87,175,163,188,190,196, 81, 64, 0,169,246, 31,236,
-201,209,225, 72,159, 71, 82, 66, 56, 0,140, 21,129, 38, 82, 63,235, 69,179, 41, 15,247, 6, 12,182,190,247,214,166,102,205,154,
-161, 64, 98, 20, 83, 7,200,210, 64,183,185,154, 96,196,126, 79, 95,247,217,222,177,108,150,202,146,206,234,122,230,155,210, 28,
-153,188,172,205,144,166, 53, 40,211,200, 89,179, 16, 24, 17,220, 89, 93, 95, 11, 71,128, 89,112, 68,236,105,150,128,125,222, 95,
- 77,157, 30,198,156, 48,107, 14,135,142,133,120,245,230,117,174,195,163,189, 23, 4, 88, 17, 5,172, 78, 9,215,194, 57,120,119,
- 46,108,230,223, 64,104,115, 7, 28, 91, 16, 92,192, 49,226, 51,144, 49, 45,233,217,108,247,122, 44, 3,227, 92, 29,156, 53,217,
-243, 70,169, 29, 76,110,100,201, 2, 22, 67, 29,197,130,192, 34,225,200, 38,108, 36,198,231, 15, 1,129, 46,235,136,196,128,141,
-168, 32, 88,155, 39,111, 99,106,145, 77,188, 0, 0,136, 62, 52,248,246, 81, 2, 6,113, 75, 46,109,253, 98,244,180, 1, 66,194,
-105,198,100,201,156,212,197,160,175, 45, 58, 99, 61,215, 64, 17, 51,190, 67,146,208,128,246,179,171,127,190,232, 15, 53,216, 89,
-226,190,185,182,213,144, 85,205,214,246, 79, 90,226,165,140,107, 32,164,104,147, 85,185, 16,244, 39,153,201,249,142,255,219,128,
-155,172,225, 56,238,110, 84, 46,210,122,255,249, 60,198, 99,199,124, 63, 71,185,240,253, 19, 50,108,137, 55,242, 56, 18,149, 43,
- 6,151, 25,102,134,244,166,115, 43,207,231, 11,124,237,136,253,253, 36, 3,238,105, 0,227, 59, 22, 47, 93, 54, 94, 37, 56, 12,
- 80,220,106,240, 2,125, 7,112,249,247,135, 19,150,123,103,200, 72,179,106, 7,178, 73,182,161,230,108,189,141, 89,224,195,156,
-119, 18,153,223,160, 35,135,199, 39,186, 70, 1,171, 7, 16,104, 42,148,235,242,193, 7,239, 73,254,219,223,145, 31,253,193, 31,
-200, 95,252,133,238,159,241,156,153, 34, 74,198,121, 86, 2, 99,185,112, 0, 75,156, 93, 84,108, 0, 74,163,141,115,130, 38, 32,
-250,154,204,198, 92,179, 66, 78,175,107,208,187,164,117,133, 61,222,205, 55,164,170,251,183,148, 89,145,157,173,101, 13,248,115,
-242,235, 7, 7,242,191,254,249, 71, 20,180, 10,102,145,211,246, 88, 40,157,249, 70, 96, 19, 27,171, 90,165,224, 83, 72,231,131,
- 47, 78,216,143,190,179, 85,149,151,174,173, 72,179, 59,166,195,105,247,103,108,139, 33,216, 61,105, 13,168, 75, 0,210,155,106,
- 1,193, 72, 86,215, 37,193, 32, 30, 24,139,246, 89,151,120, 6, 4,180, 16,248,161,254,129,111, 32,101,236,127,113, 60, 17,179,
-201,128,193,188,189,118, 78, 96, 34, 39, 77, 64,149,173,193, 21, 70, 57,161, 96, 9,224,118,228,168,206,209,126, 3,161, 12,199,
- 32,163, 41,167, 84,208,167, 7, 40,231,236,252,130, 36, 78,217,140,238, 5, 84,203,138, 53, 6,187, 88,111,124, 17,136,109, 80,
-117,131,111, 73,178,114,234, 51, 16, 5,168, 23, 52,222,233, 92,145, 99,139, 47,246,247,200,239,178,209, 40, 73, 39,244,136,213,
-193,204, 59,218,169, 11, 35, 8,159,183,170, 1,208,183, 94, 91,151,255,251,111, 62,151,164,218,208,251, 79,207,229,201,253,115,
-185,249, 82,221, 56,241, 19, 38,197,205,228, 84, 3,145, 55,238, 86,136, 41, 67, 83,227,119, 94,171,202,113, 55, 41, 31, 62, 51,
-189,133, 74,206,147,170,104, 96,120,114,193,145,195, 36,178, 68, 48,138, 13,219,125, 41, 6,172, 99, 72, 0, 26,215,216,103,249,
- 9, 99, 81,119,174,175,105,132,145,151,251,207, 71,172,113,162,196,136,114,189,238,124, 57,155, 37,101,118,208,213, 27, 30,179,
-236,169,183, 42, 91,122,193, 94, 90, 15,248, 27, 27,114,255, 9,230,193, 71,178, 12,198, 50,221,212,201,216, 40,100,179,122, 24,
-171, 26,185,157,104,230,116,187, 81, 32, 83, 27, 70,200,166,122, 16, 82, 62, 80,162,105,150, 90,247,206,135,178,219, 40, 24,223,
-180,126,247,190,102,133,199,205, 62, 9, 34, 0,136, 89,205, 27, 96, 37,161,107,143, 4, 31, 27, 26,155, 16,165,149,211,206, 68,
-178,185, 64,222,121, 98,132, 22,255,229, 15,110, 57,135,110,139,155,112,114,165, 48, 94,248,124, 26, 10,124, 22, 74, 48, 81, 82,
-142,218,234,172,189,128, 51,212,199,122,160,119,119, 1, 28, 75,176,167,132, 25,243, 11, 93,179,147,189, 22, 65, 49,190, 58,137,
-111,236,230,196,207,250,198, 52,142,202, 2, 74,175, 36,251,181, 64,101,240, 73, 71,158,235,253, 20,208, 7,234, 78,228,188, 51,
-177, 49,149,200,227,216, 84,172,191,195, 6, 67, 89, 15,228, 52, 80,250, 98,166, 46, 51,147,160, 5,175, 57,208,192,136, 68,209,
-106, 0,242, 20,224,145, 9,230, 74,167, 18,107,100, 56,135,212,169, 58, 83,148,166,246,207,134, 26, 5,142,221, 92,183,199,185,
-109, 16,156, 84,212,105, 39,230, 17, 1, 73,207,219, 34, 79, 59,145, 43,185, 10, 71, 99,190,186,173, 1, 79, 65, 29, 74, 34,195,
- 2,129,165,157, 9,249,198, 91,235,242, 15,239, 28,201,223,191,115, 40, 63,248,234, 54,203,128,160,168,109,104,112,244, 61,205,
-184,255,245,223, 63,214,141,149, 37,176,114,238,128, 29, 4,234,137, 9, 84,112,132, 35,118,253,126, 87,121, 1,191, 0, 52, 1,
- 42,186, 84, 75,121,107, 21, 32,168,152, 38, 12, 39, 49,199,136,162,151, 36,160,110, 68, 2,170, 12,203,161,224,250,174, 38, 76,
- 45,142,162, 42,112,120,234,164,251,250,156, 16,168, 33,130,197, 56, 26, 72,113,102,122,128, 63,125,208,151,211,243, 25, 17,244,
- 48,186,213,130,174,155, 31,184, 42, 70,130, 32, 54,252,124,240,232,185,188,251,217,231,178, 84,218,149,215,238,236,202,193, 73,
-147,134, 3,100, 50, 57,135,176,135,147, 51, 97, 19, 3, 81, 34,146,167,122, 83, 48,119,215, 3, 37,175, 72,215,161,164, 25,122,
- 85,246,142, 78, 89, 45, 88,140, 98,221,190,178,205, 12,229,222,195, 71, 52,100,200, 92, 65,205,140,160, 18,134, 47, 8, 67, 71,
- 18, 20, 19,132,135, 82, 33,193, 51,201, 12,153,232, 72, 72,131,135,231, 74,146,236,253, 14, 6, 44,213,223,218,217,150, 23, 39,
-167,204,250, 19,204,174,147,198, 9,129, 22, 66, 18, 12,116, 29,226, 90, 34,231,252, 12, 53, 27,177,212,151,116,165,105,236,215,
-164,227,227,199,152, 80,236,153,146,150,105, 22, 4, 14, 34,102, 35, 97, 5,119,239,147,177,137, 59,229,211, 57,155,152,137, 77,
- 77,206, 3,185,106, 12,231, 17,144,218, 19, 12,123,112,150, 32, 20, 17,223,160,154,173, 86, 83,202,149, 42,159, 95,224,250,246,
-232, 29, 39,147, 37,217,217,110,104,192,231,235,179,187,160, 88,148,177,198,165,120,157,112,162,184, 23, 4,252, 54,254,231, 57,
-146, 35, 39,122,201,241,213,180, 1, 77,245,222, 48,106,107,168, 97,207,102,204,145,216,102, 51, 36,200, 89,224, 99, 8,148, 3,
-160,209, 73,199, 34,107, 52, 61,110, 99,151, 68,144,166, 15, 5, 69, 79,158,191,164,163, 35, 62,106,158, 73,111, 52,144,222,176,
-167,235, 85,150,195,211, 19,185,232,116, 25,248,100,114, 57, 27,161, 77, 36,169, 85, 79,180, 53,214, 3, 35, 93,250,188, 71, 35,
-171,200,160,119,159, 40,228,136, 33,224,200,210,116,160,153,124, 75,238,125,250,161,252,246,247,127, 87,126,240,253,223,150,119,
-223,255,152,129, 76,202, 73,138,242,128,170, 29,107,169, 45, 10, 99, 13, 12,179, 25, 50,180,177,122,147, 50,201,102,206,245, 99,
- 68,118, 98,213,196,173,245,117,174,223, 44, 48,234, 86,224, 75,138,197,178,238,159,156,180,187, 26, 16,158,188, 32, 25, 17, 21,
- 46, 53,240,194, 92, 62,152,228, 48,170, 8, 78,126, 4, 46,139, 48, 29, 76,156, 15,246, 7,154, 48,105, 96, 89,203,235, 35, 69,
- 18,144,144,183,174,213,229, 79,255,242, 83,181,225, 35,253, 14,245, 10,141,162, 52,212, 46,108, 44, 27, 19, 36,100,149,135, 26,
-192, 21, 11,118,223,109, 77, 44, 71,227, 62, 71,150,125,142, 87, 38, 89, 57, 66,112, 99,242,176,160,127, 29,178,218,133,252,134,
- 83, 13, 80,121, 3,160,148, 18,187, 54,103, 78,178, 30,205, 98,177,134, 0,177,162,213, 67, 60, 84,198,246, 54,130, 57, 4, 57,
- 8, 30,193, 8, 8, 27,113, 99,123, 85,166, 25,159, 58, 3,245, 74,145, 65, 19, 2,193, 64, 50,122,174,250, 78,190,213,124, 5,
-213,231, 22, 35,115,145,201, 81,163, 42,217,234,158, 75,179,121, 76,209, 43, 4, 74,211,185,167,182,126, 44,207, 30, 30,202,213,
-187,155,108,223,138, 19,180,121,241,197, 25,136, 51,228,173,175,174,203,175, 52, 83,127,164,254, 19,149,160, 95,188,175,175,189,
- 89,229,124,255,162, 58,134,246, 31,194,213, 43, 55,203,178,246, 81, 70, 30, 61, 71, 43, 36, 35, 91,181,140,212,107,101, 62,131,
-114, 90, 3, 94,189,206,114, 97, 89, 26,213,172, 38,156,229,178,140,102, 23,210,239, 15,104,108, 87,214, 86, 37, 95,171, 74,175,
-123, 65,102,141,156, 31, 82, 99,216,167, 30,122, 96,146,163,193,128,209, 43,206, 0, 64, 14,144, 89,205, 16,209, 26, 72, 77, 52,
-162, 41, 53, 8, 46, 66, 95,243,213,235, 43,178,145, 10,228,164, 63,162,246,175,177, 0,233,193,130,195,211, 67, 89, 43, 70,210,
- 68,230,134, 69,211,247,172,151, 99,210, 81, 34,163,197, 56,212, 72, 23,236,168, 59,182,204, 79, 23, 11, 20,182,168,184,130,245,
-232,217,113, 71,254, 92, 35,113, 42,244,204,197, 64,107,142, 18, 20,189,180,114, 9,232,229,190, 60, 60,192,225,235,201,205,237,
-170,188,126,115,133,229,101, 44, 27, 12, 31, 94, 15,142, 97,242, 88,199,182,232,228, 48, 31,155,228,225, 64,179,199, 93, 4, 14,
- 36,108,208, 67, 94, 72, 19, 87, 32, 32,169, 16,171, 60, 96,225,193,140,135,222,100, 15,204, 83,122,221, 48,134,129, 30,178, 73,
- 96,114,162, 39, 23, 83,150, 20,247,154, 67,145, 54,144,255, 3,170,119, 69, 62,212,151,124,174,213,130, 65, 40, 70,192, 4,195,
-142,186, 30,192, 75, 36,224, 16, 26, 91,100,226, 9, 93,147, 66, 52, 50, 14, 99, 9, 77, 4, 69,215,203, 3, 59,223, 32,144, 51,
-117,232,224,151,134,246,247,225,153,245, 75,243,186,105, 87,212,107, 94,217,196, 96, 47, 12,134,102,247,186, 57, 90, 32,232,137,
- 77, 80,128, 51,253,250,247,155,213,136, 76,117,200,196, 61,189, 46,100,254,177,235, 19,126,231,181,101,249,217,135, 39,242, 55,
-239, 60,147,223,255,250, 22, 91, 26,129, 3,224, 12, 70, 51, 53,102, 61, 41,100, 26, 54, 87,237,251,142,254,208,168, 92, 67, 55,
-218,129, 63,139,155, 39,135,225, 69,111, 30,193,193,254,248, 55,134, 19, 89,121,172,209,123,228,123, 78,137, 9,232,244, 88,114,
-250, 76,115,115, 32,174,125,208, 33, 74, 60,236, 82, 70,211,119, 82,171,152, 16, 0, 69,100,103, 48,151, 23,199, 19, 93,187,148,
-220,190,217,144, 98,169, 37, 7, 77,205,100, 48,118,133,121,113,223, 16,214, 4,130, 37,192, 53,221,151,159,222,123, 34, 15,143,
-142,229, 90,253,154,116,131,169,252,135,123,239, 19, 25,155,210, 12,148,153,114,100,207, 24, 78, 27, 37, 85, 4,183, 41,102, 70,
-154,225, 97,158, 50, 54,241, 25, 16, 94,172, 47, 47, 19,212,245,244,232,132, 61,108,162,216,213,145,220,220,217, 98,134,253,112,
-239,128, 25,186,233,108,167,233,116,208, 7, 15, 66, 3,104,225, 89, 84, 52,235, 70,169, 15,223,153,112,172, 82,112, 66, 96,109,
- 67, 96,147,143, 93,239, 48,107,200,243, 42,192,117,125, 56,150, 33, 3, 86, 42,249, 69,145, 35,165, 41, 26, 63,186, 39, 44,147,
- 51, 27,112,146,148, 54, 30,108, 70, 58,141,114, 40,178, 76, 53,160,232, 39, 22,212, 33,193,137, 78,156,234, 90,200,137, 7,223,
-218, 98, 9,219,179,192,200,224, 39,153,212,160, 74, 29, 7,214, 28,107,131, 44, 5,149, 40,227,137,143,152,173,226,140, 86,213,
-129,163,167, 27, 76,109,244, 47,229,104, 69,225, 60, 80,209,152,239, 31, 72, 33, 95,224,245, 1,172, 55,211, 44, 9, 85, 43, 84,
- 2, 18,201,156, 6,218, 70, 2,196, 0, 96,161, 41, 29,123,116, 0,160, 7,134, 35, 53,250, 77,161,208, 69, 30, 99,133,104, 49,
-120, 25,158,123, 16,141,232,223,104,118, 46, 12,246,217,238, 74,121,172,100,152, 10,150, 58,144, 30, 88, 5, 83, 68, 36, 19,215,
-145,198, 60,119, 72,253,112,140,151, 34,104, 36, 32,151,186, 15,106, 35, 54,215,121,159, 77, 78, 48,120,116,124,100,253,114, 90,
-193,176,255,200, 18, 65,147, 26,135,234,116,145,249,229,138,180, 31, 51,200, 58,251,105, 86,125,130,192, 38, 62,160, 8, 56,159,
- 14, 73,198,117,218,106,201, 23,159,223,147,157,205, 85, 57,189,232, 48, 51, 71,192,148, 77,162,229, 50,160, 83, 92,106, 84,228,
-238,181, 43, 12,184, 32, 50, 3,142,244,124, 62, 69, 71, 14,135,100, 36, 45,194, 4,194, 79,197, 78,237,204, 35,247,125,191,167,
- 1, 73,231, 76,207, 86, 29,164,227,114,116,114,172,203,153, 32, 16, 14,179,247,109,104,206, 35, 59, 7, 29,179, 62,175,243,126,
-223,102,203,211, 38,206,131,137, 29, 84, 29,243,154,176, 32, 25,188,163, 54,127,117,185, 46,223,188,179, 34,255,251,223,221,167,
-239,120,122,210,209,128, 63, 65,223, 38,142,127, 62,244,244,249,115,204, 51, 47,105, 40,251, 97,122,134,240,238,144,188, 9, 8,
- 44,103, 51,207,233,177,143, 76,201,205,105,146, 47, 90, 44, 11, 89, 39, 4,150, 40,161,115,222,190,100,107,207,170, 48,250,227,
- 84,167,156, 51, 48,197,212, 67, 75,125, 91, 95,247, 25,206,225,203, 55,111,203,203, 87,151,229,107,119, 26,122,125, 67,130,252,
-176, 46,133,156,174, 75, 16,179,175,206,210,122,210,112, 74,163,241,136,252, 3, 12, 38,244, 92,165,211,106,107, 46, 78,216, 10,
- 5,198,171,144,207,200,227,195,158, 44, 85,242,124, 70,159,238,117,101,101,167, 42,133, 98, 81,237,243, 92, 3,153,169,188,125,
-239, 72, 74,154,225,175,174,150,229,159,254,209, 29,249,223,254,245, 39,114,210, 30,201,189, 71,103,242,228,233,150,220,126,117,
-201,170,130,151,178,171, 26,144, 23,211,242,234,203, 85,249,213, 39, 79,229,215,247, 35,249,173, 55,138,242,242,203, 53,137, 80,
- 13, 5,206, 65,202,154, 32,169,127, 78, 98,164,173, 94,148,165, 2, 64, 54, 13,246,209,160,155,131,210,117, 89, 13, 42, 34,227,
-116,202,122, 51,153, 8,163, 28, 86,210, 1,192, 1,142, 43,229,132, 53, 80,242, 0, 5, 41, 28,240,175, 30,237,203,234,102, 44,
- 47,223,218,225, 56, 84,178,144,149, 41,178, 25,189,249, 84, 89, 99,159,164, 25,250,200,169, 34,229, 83, 54,227,222,233,142,228,
-139, 62,196, 81,150,165,221,235, 48, 2, 68, 41, 9,175, 71,180, 71,157,110, 32,106, 53, 40,128,212, 38,128, 39,213, 82,138,217,
- 98, 65,127, 70,129,177, 11,193,251,229, 82,166,141, 14, 30,248,135, 7, 19,142,217, 33, 27,251,235,183,159,233,251, 82,100,139,
- 91, 72,129,162,204,143, 18,139,129, 13,140,189, 56, 8,156,196,159,110,154,158,151, 96,121,187,170,239, 27,244, 76,175, 28, 56,
- 5,102,215, 65, 90,202,171,171, 52, 48,109,189,222,125,117, 34,143, 95, 52,217, 35,218,220, 76,202,118, 61, 39,195,238,132, 70,
-244,214,102, 85,238,236, 52, 40,204,194, 82,231,110,142,189,126,244,137,145, 73,244,213,185, 6,164,106,117, 98, 43,153, 2,103,
- 38, 9,184, 1,195, 28,214, 58,201, 26,148,224, 2,146, 5,128, 79,242,114,164,206, 8, 7, 25, 18,177,205,246, 80,238, 31,245,
-228,176,217,151, 19,205,210, 49,254,135,209, 35,234, 21,235,245,182,218, 99, 58, 11, 80, 53,163,231,220,213,140, 2,146,183,140,
- 76,245,151,119, 86, 18,178, 83,152, 81,232, 68, 32,111, 59,231, 17, 98,159,153,114,135,234,116,224,224,161, 84,247,211, 79, 79,
-228, 39,191, 58,144,111,188,188,193, 81, 18,206, 16,207, 1,188,154, 16, 40,136,209, 96,128, 72, 34,151, 81, 68, 14,141, 79,201,
- 69,232,103,103, 45, 19, 76,249, 11,213, 39,159, 6,210, 50,121, 75,230, 41, 47,184, 80,106,211,107,206,235,107,250,152,103, 7,
-159,122,218,148,240,192,252, 70, 67,224,219,216, 33,222,248,112,239, 66,142, 91, 19, 96, 23,229,214,237,154,124,116,255,133,236,
-181,206,213, 8, 54,164,166,123,230,238,149, 21, 42,174, 17,124,166,247,249,240,197,145,252,248,167,239,202,241, 69, 95, 86, 26,
- 13, 41, 55, 10,210,109,246,216,154, 0,146, 25,165,188,128,128,184,177, 6,149, 83,126, 21,192,104, 64, 58,163,159,110,216, 2,
- 19,222,129, 65,216,212,192, 24,251,105, 79, 51,230,216,141,253,161, 84,186, 92,173,144,159,125, 79, 29, 61, 50, 63,148,160,221,
- 16, 55, 29,250,194,104,161,154, 82,131,166,182,254, 14,189,118,211,120,241, 25, 16,147, 93,107, 60,231,247,162,207, 92, 45, 21,
-153,245, 99,230, 29, 37,252,131,102,155,215,134, 99,142,215,152,130,157, 80, 33, 13,125, 72, 98, 20,220, 68, 64,232,246,124,130,
- 35, 97, 86, 90,197,154,108, 44, 53,228,179,158, 6,103,169,188, 62,167,172, 85, 25, 18, 54, 13,129,178, 60, 28, 22,164,106, 99,
-226, 67,109,253,125,114,241,199,210,236, 12, 13,177,168,251, 10, 83, 32,233,140,149,196, 47, 52,147, 41,149, 83, 6, 84, 3,233,
-139,102,205,125, 53,176,129, 24, 40, 15,250, 2,112, 64,181, 98, 82,191,191, 66, 80, 21,168,130,241,153,183,174,110,115,178,230,
-201,126, 75, 3,213, 22,219, 11,160,121, 6, 62, 7,129, 7, 80,215,212, 2, 64,118, 77,102, 66,143,182,204, 28,185, 71, 28, 78,
-146,146,205,224, 28,159,146, 4,196,192,163,145,181,110,146, 6,108, 69,208,131,253,144,136,173,213,135,253,235,185,249, 95,100,
-238,200, 12,145, 45,162,237, 55,163, 28,169,190, 42, 35,142,233, 47, 65,213, 61,244,194, 51,169,148,179, 35, 33, 43,138,148,203,
-157, 67,161, 5,128,187, 46,193,139,169,116, 73,247,112, 94,186,231, 45,153,133, 30,117, 48,176,159,131,192, 70, 58, 81,209, 0,
-170,191, 90, 42,112,180, 11, 35,108,145,102,193,223,254,218,215,229,175,254,254,111,137,101, 66,216, 2,241, 25, 96, 57, 16,166,
-124,246,232, 57,103,159,209, 14, 1,109, 48,140, 27,166, 77, 64,129,156,228,184,167,177, 63,226, 57,206,166,125,102,135,149,114,
-201, 33,110, 98, 89,207,213, 40, 81,187,181,186, 70,116, 61,130,200,111,222, 89,147, 31,191,253, 72,246,206,250, 60, 91,163,137,
-157, 1, 84,224, 18,197, 18,133,160, 50, 41, 19, 81,234, 15, 3,182,206,254,231,255,243, 3, 61,131, 87,229,251,175,173,200,141,
-173,186,252,237,175,158,211, 38, 18, 23, 1, 7, 9,159,145,141,201,200, 88,128,204,116,214,103, 53, 33, 0,157, 49, 42, 12,160,
- 62, 37, 31, 68,192,128,216, 2,168,153, 97,171,196,218,174,161,171,180,144, 22, 44, 54, 28, 68, 38, 87,166,205, 4,193, 13,130,
-232,116,210,250,184, 0,166,145,254, 87,237,206,177,218,167,139,238,128,109,221,107, 91, 59,186,126, 89, 57, 59, 63,151, 7,251,
- 73,181,243, 51, 89,107,148,200,112,137, 41,171,163,211, 14,217,239,206, 48, 34, 10,128,164, 6, 56,160, 93,142,196, 68,117, 0,
-190, 76,165,115,234,192, 83,228,171,191,185, 13, 54,200, 30,193,121,183,118, 27, 92,231,189,163,174, 60,126,222,150,151,111,123,
-114,250,188, 47, 23,189,185, 52,244,239,191,251, 70,149, 19, 77,235,234, 35,254,155, 63,126, 89,254,244,223,222,211,115, 22,200,
-251,239, 31,201,245, 43,122, 31,200,214,125, 27, 93,226,232,102,218,231,180, 14,206,127, 94, 3,244,171,215, 86,216,250,229,152,
- 27,180,176, 83,174, 92, 15, 91, 26,141,186,164,251,228, 24, 79, 34, 73,181,155,207,159,189,144, 87,119, 43, 82,241,161,194,165,
-134, 26,212,157,122,104, 58, 19,155,145,195,166, 79, 3, 2, 31,154, 81, 42, 20, 51,228,107,255,248,168, 37,255,230,157, 23,122,
-152, 79,228, 31,255,214, 64,190,253,149, 27,174,108,231,244,214, 51, 70,249, 24,133,147, 75,242,135,133, 97,131,129, 57,191,232,
-201,105,189,170, 15, 54,197, 18,247, 8,163, 4, 26,249, 52,178, 14, 1,159,180,172, 45, 5,246, 32, 50,240,120, 68,180, 94,116,
-135,114,180,215,162, 35, 0,187,213, 16,115,146,152,157,213, 5,191,115, 5, 6, 50,173,198,186, 68,201,215,191,252,217, 35,249,
-189,111,236, 18, 77,237,197, 11, 29,120, 71,205,167,239, 9,157, 50, 29, 12,177,112,172, 6,200,231, 52,233,109,207, 52,173, 85,
-251,161, 7,206,102,193, 96, 56,105,164, 56,122, 55,151,114,173, 34,167,247,207,101,211,159,171,243, 72,200, 43,175, 52,244,160,
-214,196,134,166, 76, 98,214,207,100,221, 60,144, 41,142, 9,169, 99, 69,154, 71, 35, 70,185,158, 83, 16, 2,168,136,235,203, 18,
-143,190,115, 70,129,104,126, 18,252,200, 36,246, 13, 57,170,135,181,158,157,203,254,254, 57,208, 55, 4,234,172,100, 60, 89,219,
- 41, 73,230, 90, 69, 80, 45, 92,232, 28, 99,237,147, 78,158,239,115,205,226,223,191,191, 47, 80,106,223,185,178, 44,119,175, 54,
-100,163, 84,162,195,109,117,212,105,232,125,173, 46,137, 6, 72,194,140,140, 89,112,152,146,230, 64,100, 85, 3,138,239,189,190,
- 41,231, 3, 4,105, 1,193, 39,158, 26,172, 92, 38,150,122, 30,178,182,122, 56, 19,230,168, 73, 35,227, 50,114, 84, 51, 38, 4,
-234, 69,114,181, 96,252, 1,120, 69, 52,141,229,172,175, 89,107,156,227,136,219,151,231,166,216,247,117, 35, 84,120,109, 62, 69,
-176,169,238, 13,117,182,145,141, 10, 17,217,143,224, 72,159,253, 13,189,239,118, 15,122,241, 99,185,178,179, 44,239, 63,120, 76,
-225,148,134, 58,191,255,234, 79,222,148,179,206,152, 35,156, 89,181, 16, 48,242,255,254,131, 15,228,131,251,207,184,150, 66, 25,
- 96, 79,238,239, 63, 99,118,142, 96, 7,198, 99,255,172,107,104,240,208,178, 90,148,177, 49,154, 21,163,167, 45,198, 62, 54,211,
-115, 83,206, 22,100, 99,165, 33,205,110,159,253, 53,150, 84, 81, 69,208,181,219,221,221,150,195,211, 83, 57,109,183,233,248, 23,
- 96,186, 4,229, 37,221, 94,208,123, 93,173,213,100,181, 90,149,246,160, 47,125, 10,233,164,104,228,145, 65, 99,127,178,210, 65,
-221,229, 20,193,106,232,167,195,241,130, 28,230,249,209,177, 81, 74, 38,172,122,224,197,191,233, 47,147, 42,119,110,253,122,234,
- 82,133,191, 33,128,137,157, 19, 11,157,210, 26, 90, 2,248, 28,148,254,241,185, 8, 80, 16, 20,160,167,153,244,173,210, 6, 99,
- 11,231,101, 84, 4, 30, 29,107,204,121,240,132, 58,239, 50, 51, 60, 56, 38, 56, 42,100,253,163,177,141, 30,198,226,185, 76,168,
-168,219,117, 64,114, 28,216,128,118,183, 67,101,179,171,235,117,246,152, 51,196, 90,204,105, 60,143, 90, 93, 55, 29, 51,146,126,
-255,130,253,119,140, 83, 26,229,176, 93,183, 23, 58,158,238,132,209,201,130,235, 29,109, 41, 0,197, 96,196,145,141, 3, 28, 6,
- 91, 55, 2, 17,208,220,248,240, 97, 67, 56, 26, 21,204,105, 48, 13,101, 29, 93,182, 54,102,174,205,226, 47,244, 46,112,255,250,
-249,137, 49,202,215, 99,117,218,105,117,206,105, 58, 59,140, 54,198,100, 2, 12,156,234, 86, 40, 81,128,125, 61,231, 89, 30, 7,
-154,229, 15,141, 43,190, 6, 22,185,222,128, 99,176, 60, 31,177,199,103,214, 27,132, 28, 47, 44,149,171,196, 34, 52,212,142, 96,
- 66,231,180,217, 81,251,216,145,205,237,171,242,214,107,175,115,188, 21,211, 16,212, 90,159,134, 54,254,164,103,235,232,172,165,
-153,253, 41,113, 45,188, 30,117,234, 83,202,150, 38, 37, 91,207, 51,192, 51,179, 93,114, 88,155, 4,157, 50,156, 51,170, 64, 32,
- 84,201, 47,175, 81, 92,101,164, 25,252, 95,252,226, 11, 86, 97,192, 76, 7,209, 37, 6,230,122,157, 0,131,161, 5, 0, 77,248,
-209,100, 65,138, 99, 58,239, 72, 82,254,236, 39,143, 24,176,255,225, 55,111,201,243,147,190,102,192, 35,246,171,141, 60,197, 20,
-202, 56, 41,158, 77, 92,246,235,243, 89,143,108,141,168,116, 64, 11, 36,156, 25,200, 19, 61,105,171,122, 4, 78,152,201,145, 83,
-249, 54,167,141,228,175,162,107,180, 84,206, 16,195, 65,213, 78,253, 59,208, 15, 95,244,250,198, 96, 8,177, 23, 76, 49, 68, 38,
-174, 4, 62,135,117, 13, 94,227,160,167,235,156,213, 61,214,227, 90, 54, 47,134, 44,107,131,132, 8,120,155, 97, 96,218,237, 4,
-228,138,181,177, 80, 77, 67, 27, 3, 84,192, 8, 68, 49,227,143,253,249, 80,157, 55, 2,173,149, 70,142, 90, 40, 70,174, 52,147,
-183, 63,236,200,222,225,128,100, 69,103, 23, 35,201,233,186,188,247,233, 76,190,254,122, 81,178,154,152, 93,209, 76,254,127,248,
-231,111,201,120, 48,101,208, 19,163, 5, 1,172,136,235,195,123, 60,183,145,252,252,221, 67,174,223,195,253,182, 52,155, 99, 77,
- 18, 82,148, 38,151,132, 56,186,108,211, 78, 73,222,168,105,198, 51,156, 75,170, 82, 34, 59,218,190,110,200,186, 46, 78, 41,107,
- 7,196,159, 77,164,170, 17,197,100, 62,144,173,122, 29,192,120, 82,140,150,234, 21, 58, 32, 31,125,178, 74, 81, 74,154, 89,188,
-191,215,214, 5, 46,178, 39,242,147,143, 14,137,140,125,105,119,153,243,165, 48,214,200,244, 64,249, 8,201, 84, 95, 23, 3,102,
- 5, 96,165, 20,145,189, 67,121,239,241,185, 60, 60, 11,168, 50,246,237, 87, 55,101,123,181,204,191,203, 71,150, 69, 36, 28, 91,
- 25, 75,138,238,208,193,112,149,139, 57,141,230,215, 52, 98, 77,179,252,129,217,229,172,187,126, 70,236,250,190,140,102, 74, 24,
-255, 65,100,254,222,167, 7,242,163,239,220,224, 70,128, 65,129, 99,206, 81,245, 76, 56,159, 11,193, 4, 32, 95, 49, 7,154,244,
- 76, 92, 5, 78,177, 57,113,180,145,227,177,147, 24,180, 89, 85, 40, 58,249,177,205,154,127,253,238,146,188, 56,189,144,243, 30,
-200, 45, 2,178,172,129, 1,106,238, 88,171,188,177,161,225, 57,118, 22,153,188, 30, 62,123, 58, 14,196,239,129, 28, 37, 67,245,
- 54,193, 96, 33,145,180,134, 0,103,140,234,104, 3, 7,122,120, 33,186, 1,195, 10, 35, 57, 82, 47,119, 54,138,229, 43,155, 75,
-242,242,110,193,120,197,209, 35,136, 12,113,185,160, 41, 98,133, 64,255, 61,237, 76,165,255,172, 39,103,221, 9,121,214,161, 73,
-223,237,235,225, 15,243, 84,107, 75, 4, 9,234,139, 35, 81,247, 25,219, 36, 32,158,196, 18, 84,152, 64,156, 26,145,215, 96, 5,
- 89,120,194,136, 81,144, 73,189,245,202, 26, 75,149,141, 90,222,218, 5,151, 67,242,238,186,131,152,207, 7, 11, 81,213,172,205,
- 35,154, 63,102,166, 68,109, 97, 61,224,169,130, 33, 89, 41,186, 65, 46,102, 35,216,193, 72, 32,153,234,134, 26,253,158, 6, 54,
-182,136,127,177, 7,112, 29, 26, 48,134, 36,138,240,229,141, 27, 75,210, 26,198,242,222,163, 3,105,182,187,172,136,108, 47,233,
- 94,242, 1, 2, 4,175,243,132,145,248, 47,126,253,133, 26,203, 99, 13,242,190, 38,159, 63, 63,144,139, 97, 68,132, 60, 20,156,
-218,106,180,178, 40,113,170, 99, 26,142,219, 76, 62,139,217, 28,203,235, 40, 19,135,228, 89, 78,154, 18,157,166, 0,200,152, 43,
-165,188, 6, 0,231, 52, 30,169,148, 9,225, 0,213,127,125,115, 83,141, 70, 83, 94, 28, 31,153, 58,153, 26, 69,128,200,168,163,
-190,200,126,245,250, 43,234,160,225,212,145,157, 19,167,193, 25,103, 27,219,202,146,137,206, 70, 8,129, 36,207, 59,213, 60,124,
- 30,202,128, 32,187, 48,129, 7,223, 62, 55, 54, 29,102,161,108,170,245,148,219,221,174,113,209, 47, 36, 38, 99, 11,210,141, 33,
-209,198, 15,113, 31,157,254,192, 57, 49,155, 40, 64, 25, 17,224,206, 81,111,172, 65,118,154,206, 29, 85, 4, 48,142,129,202, 24,
-207, 26, 78, 31,153, 24,130, 2, 92, 83, 68,190,243, 33, 41,108,209,107, 55,125,104,159, 35,153,192,189,160,122, 5, 64, 90, 87,
-141, 46,250,217,213, 60,184, 50,202, 12,162,234,229,156,188, 56,187,112,123, 62, 45, 41, 0,241,244,140,125,227,149, 93,185,190,
-177, 36,159, 63, 61,209,247, 25,179, 27,198,219,144,229, 49, 32,246, 3,155, 20, 73,103,201, 24, 56, 1,217, 11, 81,253,150, 1,
- 34,232, 3, 40,111, 52,236,243, 28, 96,111, 99,118, 31,193, 14, 74,242, 73, 39,186,131, 17, 58,150,171,243,110,164, 18,193, 11,
-108, 14,190,135,224,179, 52,229,141,137, 97, 1,241,191, 11, 64,187,189,158, 38, 69, 61,241, 53, 40,131, 35, 65, 64, 48, 82, 67,
-142,177,177, 24, 1, 64, 48,176,192, 65,192,247,126, 46,105,205,176, 11,149, 42,249,225, 1, 83, 48,142,141,153, 52,207, 78,101,
-101,105, 69,150, 26, 13, 73, 23, 42,156, 8,193,244,198,253,199,207,100,105,233,235,178,179,123, 85,126,252,215,255,206, 20, 22,
- 39, 1, 37,129,177, 95,176, 14,101,205,236,239,222,188,166, 1,210,132,253,100,162,221, 29,235,100,146, 85,150, 36, 71,114, 57,
-203, 15,162, 39,138, 6, 25,128,175, 63,236,202,249,180, 35,195, 66,131, 66, 44,209,188, 39, 27,141,138,238,135,161,180,240, 44,
-245,158, 1,254, 5, 11, 31,184, 8,206, 59, 23,154,157,110,202,237,171,235,242,244,240,156, 1,224, 20,156,250, 8,122, 52, 3,
-253,155,119,247,228,206,181,101,249,227,111,223,148,127,249,231,239, 73, 79, 3, 92,112, 52,228, 11,232,245,103, 9, 56, 37, 55,
- 0,112, 40, 32,104,130,224, 9, 70, 71,117,191,233,210, 82,240,137, 99,156,144,224,228,136,101,196,128, 28, 9, 23,147, 20, 88,
- 63,221,206,208,130,207, 80,113,210,218, 92,160,219,197,216,215,241,160,199,224,131, 65,168, 3,123,146,117, 77, 3,206, 43, 27,
-155,250,124,134,210, 40,198, 20, 24, 2,171,219,136,140,133, 83,169, 85, 34,158, 55,144, 94, 13, 58, 49,251,245,164,132, 29, 91,
-102, 76,157, 4,207,103,251, 22,109,224, 96, 52, 35,110, 8, 2, 48,168, 10,163, 5,138, 80, 23,159,129,132, 7, 62,232,139, 39,
- 77,217, 82,127,134,202, 8,198, 52,223,121,120, 38,231,195,153,174,221,170,220,218, 90,146,106, 61, 43,229,114,154,254, 9, 97,
- 11, 21, 33,225, 63, 82, 70, 99,253,158,174,229, 7,159, 29,169, 35,135,128, 78, 95,126,246,235, 19,249, 39, 63,184, 66, 27,138,
- 0, 38,230,172,158, 57,247,100,102,185, 38,105,205, 48, 3,208,197,234,162, 67, 78,244, 37, 61,148,156, 95,199,240, 61,184,129,
-193,237, 14,118,160,181, 50,133,236, 9,146,201, 27,177, 4, 54,182,232, 69,254, 74,191,228, 95,253,221, 35, 3,219,160,220, 59,
-245,229, 47,223,126, 70, 7,124,117,169, 72, 84,108, 58,155, 97,249, 43, 5,131, 3, 24, 52, 56,213,243, 32,173, 17,121,228,135,
-114,120, 30, 72, 71, 35, 42, 4, 11,127,251,238,115,249,174,102,131, 55,183,106,156, 83, 54, 36,176,161, 45,173, 95, 98, 15,159,
- 68, 20,200, 92,138, 9,150, 74, 81,214, 5, 57,138,239, 52,159,103,145, 57,196,145, 70,124, 99, 61,104, 95,191,187, 34,217,199,
- 77, 73,171, 51,203,131,203, 61,158, 73,168, 14,245,209,241, 68, 31,112,150,142,240,139,131,142,124, 95, 95, 87, 79,199, 44,193,
- 65,119,184, 31,100, 53, 0,137, 44,210, 4, 91,215,116,206,108, 13, 78, 7,193, 67, 31, 35, 49,106, 79, 86, 17, 16,229,151,184,
-249, 40,161,170, 27,205,155,153,128, 7,123,230,208,124, 70,251,129,204, 91, 8, 54, 82, 18, 97, 62, 30,181, 40,140,206,100, 77,
- 8,129,189,104,148,198,147, 78,119, 21,237, 0,244,205, 17, 12,169, 97,234,107,102, 11,144,227,140, 8,221,152, 4, 61, 41,189,
-255,132, 26, 93, 8,183, 68,211,144, 51,176,204,244, 99, 19, 81, 33,152, 72,151, 29,173,142,126,119,168, 81,232,140,153, 46,230,
-123, 29, 46, 67,163,113,143,130, 53, 43, 48, 0, 9,235,185,218,172,118,204,195,178, 89,246, 57,255, 76, 46,244, 0,100, 7,174,
-183, 74,109,227,148, 1, 15,125, 3, 11, 98, 18, 0,180,178, 0, 46,213,213, 89, 23,210, 54,198, 38,190, 85, 70,192,235,239, 1,
-132,134,185, 90,125,199,170,110, 88,191,148,228, 38,245,156,112,139,137,202,197, 86,173, 64,207, 90, 29,111, 0,192, 12,203,250,
-121, 73,228,242,172, 48,225,185, 65, 78, 34, 23, 15,101,214,107,201,211,211, 80, 62,125,188, 39, 53,117,180,199,157,166, 92, 95,
-174,200, 68,179, 60,140,248, 61, 57,238,200,223,125,248, 49,121,164,255,199,127,246, 95,112,222,251,167, 31,125, 78,162, 9, 24,
- 55, 56, 35, 56,145,188, 6,186, 61,162,111, 69, 10,153, 44,157,224,132,104, 91, 83, 75, 35,117,163,238, 65,240, 92,147,102,185,
-121,238,156,180, 71,103,177, 82,175,201,245,237, 45,249,252,201, 51,205,210,207, 12,181,203,153,216,148,101,134,177,101,234, 32,
- 97, 1, 41, 13, 62,243,241,225, 33,203,244,236,183, 7, 1,117, 5,216,250,136,141,188, 5,149,151, 82, 1, 98, 17, 9,226, 53,
-128, 7,192,172, 63, 70,113, 76,109,208, 24,233, 16,181,103,128, 5, 72,250, 68,196,123,139, 72,126, 33,153, 76,237, 3, 91,227,
- 40, 54, 80, 25,178, 44, 92, 59,228, 99, 17,116,132, 60,247, 73,150,111, 23, 0, 82,244,125,147,177, 41, 66, 1, 61,140, 32, 7,
-217,116,190, 92, 32,176,118,145,241, 19,231, 17,196, 78,214, 18, 83,178, 41, 87,177,243,137,104,198,251,179,233, 28,105,107,201,
-104,153,207, 73, 53, 25, 75,123,144,100, 32,128,201,148,179,139, 1,251,240, 81,100,193,244,253, 61, 93,195,153, 79, 84,249, 96,
-112, 33, 89,117,120,172,247,121, 17, 43, 53,184, 63, 80,122,194, 17, 76, 7, 99,142, 34,194,152,227,188,226,119, 56, 31, 8, 62,
- 18, 94,193,177, 49,122,204, 78, 9,168, 11,173,186,151, 97,255,203,212,255, 18, 46,176,193,232, 25, 2,119,236,201,178, 58, 0,
- 61,164, 68, 86, 79,136,120, 55, 14, 12, 84, 8, 89, 13,240, 13, 24, 10,103, 50,101,255,220,206, 32, 85, 0, 1, 59, 46,234,217,
- 81, 19,138,209,202, 13, 13,224,128,189, 25,143,186,166, 76,152, 68, 53, 50, 43, 39,122,175, 39,167, 39,196, 2,124,252,217, 33,
-193,137,133,188, 6,165,153,156,236, 29, 28,201, 43,183,110,200,214,230,182,124,252,233,167,156,229, 70, 32,144,242, 12,233, 62,
-212,160,226,237,247, 14, 57,223,156, 72,100, 88,141,192,135,227,153,224, 90, 50, 12,126, 67,182, 41,210, 78,120, 40,118,147, 63,
- 8, 10,146,254, 92,118,119,114,116, 68,168, 86, 65,125,174, 94, 45,105,144, 17,200,137, 38, 3,157,193,148, 54, 35,149,156, 19,
-251,242,244,232, 76,207, 77, 81, 94,187,179, 45,239,220,123,206,164, 47, 92, 96,131,244, 67,126,242,209,145,252,240,205,117,249,
-254,155,183,228,139, 23, 23,116,188, 40, 18, 33,233,130,253,107,247,109,154, 10,242, 96,125, 2,249,128,249,153,176,186, 48,159,
-245,101, 24,217,152, 34, 18, 28,150,226, 25,124,122,151,147, 51, 16, 80, 90,214, 32,176,133,178,250, 48, 48, 76, 11, 91,170, 99,
-142,127, 2, 21,143,224, 6, 65,228, 80, 29, 48,136,158,110, 95,217,181, 73,162, 89, 79,118, 87, 86, 56, 25,129,246, 45, 4,138,
- 74,165, 28, 65,167,208,183, 95, 95, 47,145, 61, 16,128, 72,236,215,225,200,232,119, 17, 40, 15,134, 8,208,114,100, 41, 5,158,
- 75,205,175, 6, 91, 85,121,118,116, 65, 26,105, 84, 80,129, 1,170,235,190,190,162,193, 97, 77,215, 13, 98, 71,235,203, 37, 61,
-143,250,140, 59, 73, 13,114,124,249,201,199, 7, 26,144,119,229, 71,223,186, 69, 14, 1, 84,158, 60,246, 32,141,142,124,166,201,
-225, 64,109,198,230, 82, 94,237,177,222,215, 96, 76, 48,225, 79,222,127, 38,223,188, 85,151,173,149, 60, 19,162,120, 20,152,157,
- 68,203,123, 22, 38, 53,114,152,201,217, 97, 79,182,151,179, 82,210, 72,172,171,209,239,139,206,140,220,189,145, 46,238, 76, 15,
-241,141,141,138,108,248,106, 60, 70, 19, 58,234, 17,230,190,245, 0,141,250, 6, 24, 59, 60,234, 74, 29,236, 72,129, 33,138, 1,
- 36, 66,148,255, 11,205,138,223,252,225, 45,169,175,169, 65,210, 40, 18,168,207,136, 20,163,154,185,131,223, 83, 31,216,176, 27,
-200, 23,123,122, 72,243, 57, 50, 95,225, 88, 32, 99,254,217,199, 7,140, 68,239,238,212,105,188,216,123,156, 71,206,144, 88,223,
-149,108, 98, 40,249,160,127,134, 57,210,113,192, 69,206, 58, 49, 1, 70, 46,144,121, 69, 63,158, 68, 21,105,249,254, 87,182, 37,
-159, 0, 18, 58, 38, 83,209,103,143,187,242,217,243,174,252,119, 63,188, 65, 29,237,141, 90, 78,179, 38,204, 51,206, 37,163,155,
-231,222,254, 64, 62,111,247,229, 63,251,246,182,140,184,241, 61,169, 2,153,158, 72,176, 55,152,102, 22,212,211, 12,184,175,247,
-228, 75, 77,191, 99, 6, 3,125, 50,144,205, 34,128, 93,122,233,216, 12, 57,225,248, 69, 52,140,136,146,135, 3, 8,209,106,208,
-181, 76,229, 49,243,106,243,143,230, 68, 81,133,240, 57,219,205,100, 91, 45, 95,255,188, 39, 23,157,145,236,235,207, 97,107, 68,
- 48, 33,156,127,235,124,200, 40,241,171,215, 74,154,237,235,198,208,236, 71,230, 70,205, 2, 7,207,210, 53,231,122,141, 56,162,
-166,225,109, 42, 4, 85, 79,200,235,157,145, 79, 59,114, 72,252, 36,133, 22,208,177,139, 52,136, 25,143, 93,175,213,113, 16,103,
-153,153,138,245, 10, 61, 99,139,235, 67,120, 2,179,247,189,169,149,212, 81, 37,160,250, 81, 32, 23,224,138, 7, 80, 47,145, 87,
-199,104,173, 5, 35, 87,240,228,201, 65, 91, 18,122, 56,118, 26, 5, 25,106, 0,179,190,148, 99, 6,129, 96, 4, 14, 52,156,196,
-156, 9,198,135,171,173,147, 4,180,175,245,153,148,188, 57,163, 89, 28, 28,150, 84,199, 67,141,216,167,122,221, 49, 53, 6, 6,
-122, 61,239,222,127,206, 49, 56,232, 43,163, 56, 80,129,250,158, 30,234,247,238,171, 3,191,247, 88,166,106,168,111,108,109,200,
-191,255,232,190, 28,156,119,168, 76,134,160, 17, 35,131, 32,150,128, 0, 11,100, 83, 23, 35,104, 0,104,114,214,217,209,231, 70,
-228, 18, 72,200, 90,163,206,114, 41, 40, 95, 61,167, 90,136,245, 44, 23, 32,105,185, 34,251, 39,103,236,163, 3, 96, 20, 56,240,
- 86,232,102,196,225,104,140,223,217, 90, 51,200,144, 19, 14, 48,135,207,136, 28,144,173,140,185,234, 36, 74,237, 6,136, 67, 41,
- 49, 71,109,240, 57,199,216, 16, 48, 4,156, 19, 55,174,234, 5,202,118, 33,227,104, 44,114, 51,163, 39, 93, 0, 73, 61, 71, 59,
-137,243, 65,101,171,144, 61,195, 37, 53,122, 80,137,179,207,183, 82, 40,250,183, 4, 61, 50, 40, 72,179, 58, 4,185,215,241,196,
-168, 84,113,102, 89,241,162,174,180,157, 77,140,255, 4, 30, 50, 31, 83,206,130, 34, 32,250,210, 24,244,203,146,130,214, 42, 87,
-120,126,112,152, 81, 42,148, 90,185, 72, 14,123,244,102,151, 52,219,197,251, 32,171, 10,144, 20,198, 85, 59,253, 25,105,149,191,
-114,103, 75,205,198,166, 60, 59,233,105, 16, 48,209, 19, 98, 20,175, 36,135,113,253,241,104,102,122,219,181, 66,157,104,113, 56,
- 51,204, 49, 3,240, 55, 47,150,232, 52, 80,126,174,148,202,172, 20,224,255,197, 41,221,245,136, 83,209,231,152, 12,248,140,113,
-198,194,197,136, 97, 96, 6, 30,217, 42,206,120,214, 79,178,226, 80,208,231,109,193, 75, 78,109, 66,222, 5, 98, 96, 95, 76, 50,
- 33, 74, 80, 88, 70, 13,112, 48,225,184,106,210, 51, 18, 19, 56,166, 4, 65,108,105,221,167,105, 13,214,187,108, 61, 32, 83,107,
-183, 59,178, 92, 47,209, 25,161,101, 25,133, 41,249,248,222, 39,114,101,107, 93,190,254,181,111,178, 53,102,193,132, 9,143,132,
-196, 9,121,116,236, 7, 39, 39,186,142,234,212, 0, 72, 99, 16,106, 64, 64, 56,113,154,104,215, 91,247, 33,156,232,167, 88,158,
- 23,180, 53, 98, 19, 71, 41,150,235,252,236,137,222,235,217,241, 1,159,221,132,237,166,196,255,199,212,123,254, 90,150, 95, 87,
- 98,251,132,155,243,189, 47,135,170, 87,169, 67,117,179,187,153,196, 36, 74,163,209,104, 52,158,209,140,173, 15, 6, 12, 3, 3,
-219,128, 63,216,255,145,253,197,134, 1,195,134, 61,176, 5,141, 32,105,100,137, 10, 20,169,110,146,106,178,115,229,240, 94,189,
-120,115,206,231, 28,239,181,246,239, 21, 69,161,213, 93, 85,175,238, 61,231, 23,118, 92,123, 45,238, 55,146, 6,204,206, 3,152,
-250,233,163,103,122, 54,223,149,157,122, 81, 30,159,116, 9,250,133, 93, 44,235,119,252,226,193,165, 58,221,148,124,231,253,219,
-242,245,251, 49, 49, 23,173,222,140,216,164,233, 34, 33,179,232,124,109, 68, 43,104, 97,162,114,185, 34,178,221,168,149, 23,179,
-161,218,168, 20,219, 83, 56, 99,201,181,212,178,218,132, 98,169, 68, 86, 71,168, 85, 22, 48,213,146, 9, 24, 76,162, 10,215, 35,
-126, 36, 97,165,108,229,212, 67, 17, 20,127,243,254,155,108, 53,119, 90,167,250, 28, 99,182, 4, 97, 41,183,235,121,121,235,238,
- 62, 91,107,143, 79, 58, 28,243,134,111, 41, 23, 43,234,236,109,146, 3, 2, 53,195,201,216, 90,193,152, 12, 67,128,171,193,194,
-254,238,142,188,123,148,229, 8, 30,178,247,109,144, 99,233, 90, 0, 97,127,252,248, 74, 30,105, 48,243,214,173,170,250,154, 5,
- 1,211,245,221,154, 28,212, 27,114,123,107,131,182,251,147,207, 94,200,163,211,150,188,247,198, 1,109,132,196,102,167, 65, 32,
-244,224, 85, 95, 62,121,116, 46,191,251,221, 35,249,221,223, 56,148,191,248,233, 19,195,127,168,205,249,227, 15,143,229,191,255,
-253,123, 26, 32,233,221,212,195, 0,191,140,123, 31,198, 24,165,210, 69, 60, 30, 44,213,169,231,101,164, 81,255,137, 58,140,167,
- 87, 19,233,247,103, 50, 27,205, 88, 46,199,194,157,117, 71,214,227, 96,204, 57,161,218, 26, 24,156, 80,234, 65, 84, 89,171,129,
- 66, 47,116, 95,186, 96,207, 11, 11,200,139,166,158, 45,134, 44,162, 24, 95, 58,208,149,248, 7,190,250,227,207,206,228,243,147,
- 49, 75,124, 24, 15, 48, 3,130,121,234, 88,254,254,211, 87, 84,153,250,254,219, 59, 54,154,226,217, 28, 53, 14, 14,192, 4,184,
- 52,136,250,194, 44,196,236,125, 25, 15, 87, 44,227, 20,192,163,155,182,145,153,192, 3, 3,150, 70,163,250,119,210,208,103, 94,
-121,210,153,251,178,145, 11,245, 34,169, 83, 82,231,241, 8, 61, 15, 93,148,173, 58,212,129, 52,211, 86,195,242,162, 59, 39,193,
-195,159,126,218,150,179,206, 84,222,185, 81,150, 55, 15,107, 36, 99,168,105, 38,145, 56, 49,147, 20,231,112, 61,205,150, 75,114,
-114,213, 38,105,202,138,101,238,145,116, 53, 80,185,211,200, 75, 85,159,129,138,239, 41, 48,254,170, 1,149,216,241, 53, 99,254,
- 65, 51,239,222, 84,157,177, 58,215, 82,198,113,145, 71,204, 64,215,145,205,122,206, 53,152,186,128, 28,229,116, 77, 37, 43,176,
-239,197,164,171,245, 8,194,153,247, 49, 38, 4, 41,205,178,120,216, 96,204,129,131,221, 10,128, 11,199,211,201,105,117,208,141,
-170, 35,206, 22,178,102,246, 97,160,214,168, 42,172,201, 51,159,128,148,198, 11, 44, 32,138, 93,105,149, 50,182,234,116,128, 6,
-213, 64,172,145,247,173, 52,164,134, 19, 0,188,201,218,104, 41,113,208,168,195, 60,205,154, 52,168, 70,207, 64, 73,175, 92, 95,
-221,115,192, 35,204,203,163,108, 4, 56, 17, 90, 9,184, 48,160,248,125,165, 65,144,215,179, 18,215,222, 65, 94, 46,207,231,210,
-157, 39, 60, 47,219,213,148,236,222, 46,112,170, 2, 24, 15,204,247,226,125,115,163,190,172,103, 38,196,177,212,128,164, 57,205,
-200, 39, 79, 90,210,215, 32,107,123,163, 46,151, 23, 87,242,181, 3, 13, 72, 55,107,242, 39, 63,249, 72,154,221,150,220,211, 8,
-252,184, 61, 35,112,230,199,159, 61,228,190, 33, 48, 93,234,231, 0,141, 91,161,158,247,210,245,167, 3,235, 67, 39, 17,251,219,
-145,155,149, 6, 17, 7, 50,106, 80,189,130,243,221, 28,165,199,245,220,213,224,246, 96,123,139,206, 17,156,236, 19,142, 24, 69,
- 12, 20,192,230,133,146, 55, 50,135,136,189,106,163, 33, 94,185,217,252, 34,196, 66,162,245,235,140,223,181,218,201, 21,143,245,
- 45, 20, 10,114,124,114, 38,219, 26, 76, 84,245, 25,142, 47, 46, 94, 11,187,224,239,129, 17, 44,116,149, 45,102,220,217,172,107,
- 21, 57, 38, 48,170, 57,197,175, 3, 6,195, 4, 88,123, 4,239,189,112, 65, 57, 1,126, 41, 43, 71,163,164, 79,134, 59,100, 61,
-153, 12,251,199,137,155,183,197, 7,164,217, 71, 77,241, 44,231,211, 89, 50, 54,198,145,145, 64,225,185,192,200,181,244, 77, 36,
- 35,164,179,243, 89, 6,247, 29,115, 36, 16,242, 8,140, 38,101, 33,139, 25,148,234, 80,234,191,177, 93,101, 5,226,170, 55, 38,
- 41, 78, 54, 93,160, 3,238,141, 35,181, 55, 33,171,134,131, 78, 79,179,170, 13, 2, 38, 35, 32,209,193,215,237, 90, 31,232, 25,
- 77,166,198, 53,207,242,185,227,211,135,252, 42,214, 18, 61,107, 56,171, 12,176, 0, 36, 47,177, 76,207, 39,112,113,161,123,119,
-101, 44,123,168, 44,173, 77,219,194, 11, 12, 44,188, 82,231, 12,238,255, 88,255, 9,130, 77, 18,164,128, 8,229,218,233,155, 22,
-129, 1,248,162,100,198,234, 82,228,175,141,215, 30,247, 15,103, 65,131,189,203, 86,211,225, 1, 34,138,169, 0,133,143, 74, 21,
- 42, 14,117, 13,108,224,220, 74, 8, 60,196, 90,120,144,174,253,228,211,143,229,157,119,222,167, 30,248, 79,127,254, 51, 77, 64,
- 74, 44, 85,123,158,101,251,216, 67, 76, 39,125, 77,157, 4,236,164, 49, 21, 26, 67, 32, 37,102,125,159,206, 14, 21, 52,180,109,
-121,118, 48,209, 1,182,192,101, 76,155, 58,155,105, 86,189, 40,176,196,126,122,254, 92, 29,175,105,121,239,237,108, 73, 81,239,
-203,106, 29,176,117,135,131,208,236, 15,228,171,231,167,242,157,247,238, 17,191,244,139, 47, 79,213, 59,120, 82,244,178,228, 60,
-255,232,139, 51,117,160, 11,217,108,148,173,213,184,140,168, 74, 23,144,128, 74, 3, 9, 61, 27, 93,128, 23,213, 81,207,212,150,
- 65,204, 4, 85, 23, 84,133,226,200,192,158, 56, 59,107,215, 73, 4,235, 32, 2,159,106, 49,203, 57,247,132, 19, 13, 49, 37,109,
- 49, 45,176,140,108, 31, 1,139, 90, 57, 62, 7,100,249, 95,187,119,151,237,153,110,191,205,123, 9, 25,213,131,141, 50,209,251,
- 45,245,127,179,135,151,242,193,155, 55, 25, 68,117,151, 49,171,138,105,253,174,149,158, 23, 63,147,102,208,139, 9, 47, 84,135,
- 17,240, 12,134, 3, 98,103,106,149,172,252,245, 47, 78, 88,133, 11,245,156,126,248,229,133, 6, 5, 83,138, 98, 65, 32, 12,237,
-147,127,248,101,135, 82,174, 8,148,209,226,186,177,187, 33, 93,181,111, 27,181,130,236,239,212,152,173,191,117,176,109,213, 86,
-221,195,135,175, 38,242,147, 47,218,114,114,118,169, 65,239, 88, 68, 63,255,214,222,142,236,238,108,232, 25,232,114,148, 19, 52,
-196,159,188,232,200, 78,217, 2,183,196, 85, 85,195, 72, 23, 51,175,135, 8, 78, 25,179,226, 0, 62, 64,156,227,244,106,164, 15,
- 19,203,112,104, 99, 95,189, 69, 83,191, 80, 35,154,106,134,138, 64, 15, 79,128, 48,158,145,195, 25,198,251,237,219, 59,250,242,
-145,116,218,166, 42,134, 67,233, 37, 41,106, 91, 63,111, 77,244,160,160,164, 58,166,179, 72,229, 1,127, 77,115, 92, 11,134, 97,
-119,191, 38,183,142, 22,140,162, 9, 70,114,192, 9,207,166,184,232, 80, 55, 42,129, 52, 32, 42,194, 30,170, 57, 29,223, 73,111,
-250, 41,251, 53,102,213,171,152,183,197,104, 78, 90, 47, 72,218, 70,140, 16,100,248, 41, 3,232,128,158,213,119,142,172,213, 83,
- 99, 50, 13,116,161,118,229,119,190,153,146,174, 6, 51,149,173, 44,203,218, 79,174,166,242,171,167, 45,121,124, 62,147,231,231,
-150,105,253,199,159, 62,147,255,230, 95,127,141, 81,255,169, 6, 56,232,209,195,137,161,191,140,172,121,193, 44, 73,215, 79,215,
- 12, 63,147,213,160, 7, 88, 1,244,112,191,126,163, 38,197, 57,196, 77,244,114, 4,105, 25,130, 71, 28, 99, 27,154,193, 14,198,
-234, 84,189, 60, 9, 28,158,104,100, 75,229,173,116, 72,108, 0,169, 8, 29,130,119,179, 92,208,104, 56,164,163,245,249,142, 26,
-169, 67, 62, 80, 98, 86, 40,218,152, 59, 69,246,167,209, 43, 75,240,145,209,248,114,179, 57,131,111,253, 83, 92, 78,124,182,239,
-244,136, 72,196, 1,205,250,192, 88,252,124,162,162, 19,155, 8, 64,197, 65, 15,220, 44, 41,202,229, 92,163,225, 48,150,163,170,
- 58, 59,221,152,146,111,232,245, 70,214, 74,155, 47,212,113,161, 52, 10, 31, 0, 4,174,149, 86, 99, 41,166, 76,130, 16, 19, 12,
-192, 42,196, 24,141, 92,153,176, 65,164,231,167,173, 65, 22, 8, 58, 80,197, 64, 84,142,125,111,108, 56,249, 74,223,216,181, 98,
-107, 23,241,153, 56, 27,172, 63,244, 92,207, 96, 42,175,187,173, 70,223,155, 71,108,211, 76,245, 51,158,158, 94,178,196, 61, 25,
-245, 8,232,108,232,229,253, 95,254,226,103,100, 51,251,183,223,127, 79,254,234,203,166,158,147, 1,199, 36,145, 89, 65,102,116,
- 91, 13, 68, 10,151, 86,207, 5,212,210,140,216,197,190, 52, 32,168, 51,113,128,189, 68, 29,108,141,251,251,170,217,182,121, 82,
- 55,123, 15, 99,126, 83,141, 30,178,221,135, 47, 94,168, 65, 52,113, 23,124, 14,202,217,200,150,175,121,220,109,174, 90, 28, 56,
- 45, 67,199,236, 57, 64, 27,128,106, 64, 78,195,120,228, 11, 89,210,201,226, 25, 27,213, 50,165, 85,111, 31,236,177,157,117,209,
-238,145, 49,142, 78, 8, 18,144,158, 57,176,152, 35,119, 51,126, 54,214, 1,231,169, 55, 52,185,204,235,224,195,119, 1, 3,115,
-117,247, 44,149, 98,158, 58,238,200,230, 80,150,198,250,224,174, 20, 52,235, 66, 9, 90, 92, 37,130, 98, 44,115, 76,117,100,153,
-177, 0, 59, 83, 2,150, 37,155, 97,182,105,172,201, 84,202,160, 64, 5, 38, 88, 50, 41, 7, 23,213,141, 67,134, 71,141, 0, 2,
- 0, 51,204,120, 16,152,126,245,236, 76,142,118,171,114, 67,237, 75, 87,239, 80, 54, 95,146,223,250,246, 22, 81,251,200,240,128,
-240,255,201,167, 39,250,223, 67,217, 9,139,114,231,198,182, 52,202, 25,205,126,244,220,141,230,180, 3,104,203,100,200,144, 23,
-147,206,154, 61,110,167, 26,136,233, 2,220,207, 56,249,181,146, 32, 16,204,190,195,184,192, 96, 91,249,157,132,168, 82, 42, 55,
- 56,109, 18, 65, 29,210, 91,146, 8, 42, 12,108,196,104,190, 24,232, 89, 89,243,206,231, 38, 83,138,129,196, 28,179,139, 89, 77,
-242, 74,158,137, 25, 1,145,175,193,199, 92,157, 90, 88, 12, 88,181,170, 52,182, 41,225, 57, 30, 26, 56, 11,149, 41,156,241,161,
-254, 26, 36, 56,176,163,236,175,171, 99,235,232,239,125,227,230, 13,222,169, 78,251, 82,222,188,185, 75, 20,254,124, 4,221,245,
-183,229,227, 79, 63,101,208,147, 77,251,188,239, 40,197, 98, 55, 7,163,174,140,245,252, 71, 14,166, 75, 58,209,216, 70,236,128,
-113, 72,135,150, 56, 17,112,198, 23, 54, 54,201, 41,122,231,104, 67, 5,144, 59,125,159,247, 27, 9, 12, 16,250,224,254, 7,144,
-250, 7, 31,188, 77, 46,248, 63,250,187, 79, 40,197, 10, 27,126,213, 27,176, 39,253,205,119,110,203, 63, 62,186,164,205,195, 90,
-109,212, 75,210,211,189,251,232,171, 11,125,159, 11, 61,183,198, 84, 24,177,202,106,184, 15, 76,226, 44,117,141,168,177, 30, 4,
-214,146,132, 51, 39,152, 59,176,178,178,155,140, 23,202,216,166,165, 82, 46, 27,240, 50, 89,234,153,211,117, 85,123, 85, 4, 57,
-140,254, 94,167, 55,151,106,185,196,242, 59, 70,147,177,150,183,247,247, 89,169, 0, 93,178,198,244,210,110,167, 24, 20,192, 86,
-163,165,134,115,124,222, 28,200,254,214,136,213, 97,128, 50, 23, 41,181,113,108,253,100,105,255, 81, 81,186,230, 48,200, 9,146,
-198,156, 58,239,145, 6, 19, 37, 38,163, 16, 44,202, 4,208,222,152,107, 96, 95,144,134,218, 9, 4,163, 39,151,125, 6,237,155,
-181, 10,171, 41,183,246,245,254,234,189,190,189, 95,163,125,255,232,147,182,156, 46, 52,208,253,197,149,108, 86, 50,234,244,211,
- 84,236,196,153, 71,160, 0,223,246, 66,109,240, 56,169,203,254,225, 46,231,236,155,125, 93,171, 84, 78,126,241,180, 39, 11, 0,
-164, 87,115, 50,123,225, 60,134,145, 26,209, 78,207, 32,254, 66,146,123, 67, 32, 67,117, 70, 3, 11,205, 94,145,133,234, 15,143,
-214, 4,102,160,124,246, 95,253,176,174,155, 29,202,103,207,142,245, 96,155, 10,212,104, 50, 68, 97, 70, 14,182,202, 68,119, 66,
- 48, 5, 35,103,232,137,189,104, 79,120,216,240, 66, 40, 31,110,235,131,151,202, 75, 73,235, 97,105,105,118,214,105, 45, 28,150,
-203, 0, 82,134, 65,182, 94, 34, 14, 43, 54, 18, 36, 36,126, 62,227, 70,158, 44,154, 77,156,250, 18, 34, 79,254, 59,186,206, 46,
- 28,138, 92,108,124, 2, 68, 19,126, 98,104, 75,168,219, 64,249,201, 79,172,140, 52, 91, 89, 38,242,141,219, 27,188, 56, 47,245,
-242, 61, 56,214,204, 92, 23,237,145, 46,236,201,229,212,141,236, 4,242,228, 69, 87,254,232,199, 79,228, 95,124,235, 38, 51,105,
- 16,160, 0,176, 52, 4, 59, 30,122,228, 40,121, 3, 33,170, 6, 0,139, 59, 37, 48,208, 48,107,151,163, 68, 10,145,141,220,137,
-147,253, 3,100, 41,140, 76,234, 20,189,185, 20, 60, 85,166, 64,163,249,189,251, 13, 34,119,113, 31,193, 56,228, 57, 61,119, 18,
-203, 57, 70, 47, 2,200,176, 6, 40, 69, 55, 71,178,236,171, 99,132, 99, 71,105,115,157,184,108,202, 70, 6,113, 97, 99, 42,206,
-233, 26,168, 3, 93, 56,161,143,107, 13,227, 5, 65, 64,145,149,150,161,119, 14,226, 31, 13,198, 48, 31,141,203,252,246,173,138,
- 60,125, 18,203, 72,191,239, 98,160,239,162,207,116,191,238,203,205,186,207, 64, 37, 84,167,142, 74,203,197,124, 45, 95,157, 15,
-165, 51, 94,216,168, 26, 13,186,207,145, 28,124, 14, 28,125, 22,239, 36,134, 12, 45,104,176,119,114, 53,160,128,195,141,237,130,
-219, 63,143,132, 21, 8,196,130,217, 66,174, 5,131, 89, 30, 23,113, 34, 44, 49,179,185,243,151, 61,217, 84, 67, 81,212,247,120,
- 49,241,164, 51, 75,120,200,179,169,178,102,235, 3, 41,135, 57,249,211,159,127,165,235, 50,151,255,225, 15,255,157, 92,245,175,
-228,227, 71,199,156,157, 69,192, 8,167,136,181,156,233,250,119,213,113, 46, 29,133, 42, 12, 12,156, 33, 28, 22, 12, 53,213,168,
-244, 91,247, 54, 55, 56,175,126,169,145, 62, 75,206,169,192, 33,114, 69,142,246,118,213,185,101,229,217,233,153,116, 6,125, 71,
- 0,146,226, 58,143,103, 78, 28, 37, 8, 28, 50,218, 28, 42,246, 51, 96,102,189,126, 29,200,226,127,139,245,146,234,101,247,110,
- 28,202, 11,253,188,150,190, 11, 12, 21,250,227, 8, 16,208,167, 7, 77, 44,245,181,213, 40,225, 44, 3,113,142, 95, 15,102, 51,
-119,198, 66,169,107, 64,131, 18,239,252, 58,160,112, 4, 45,226, 90, 9,107,167,123,142, 51,136,123, 3, 60, 1,180,218, 49,251,
-126, 61,106,135, 53,138,184, 38,198,239, 14, 39,235,191, 70,206,199,172,146, 0,245, 13,188,194,218, 91,179,231,218, 40,166,175,
-133, 2,137, 53, 1, 42,109,197, 53, 76,216, 78,233, 33, 8, 6,231, 60,174,132,102, 84, 63,120,247,142,102, 62, 29, 93,215,161,
-252,233,143,159, 19, 64,133, 32, 1,153, 23, 46, 16,170, 85,213, 66,134, 37,231,158, 26, 47,232, 51,228, 50, 85,217,216, 62,144,
-209,226, 66,206,206,206,165,164,239,202,118, 6, 46,198, 98,202,145,183, 24, 4, 37,225,220,218,125,232, 10,169,189,154,207,214,
-146,206,103, 56,207, 14,113, 14, 98, 7, 82, 70,135,203,253,130,147, 15,132, 18,206, 17, 4,172, 0,176, 3,149,195,218,221, 63,
- 77,252, 83,147, 52,223, 27,255,131, 19,162, 12, 49,122,213,224, 30,247,109,132,106,134, 9, 6,205,208, 33, 97,188, 68,182,191,
-244, 25, 8,108,111,231, 73,129,155, 45,213,104, 59, 3,180,140,212,126,118,186, 87,220,151, 16, 68, 92, 0, 35,206,231,204, 26,
- 81, 70, 47,151, 74,122, 30,202,100, 54,171,109,237, 73,182, 80,149,157,189, 3,249,214,215,191, 33,207,159, 61,210, 63,171,218,
-160,140,190, 3,176, 80,120,215, 9,208,214, 26, 88,118,251,227, 95,143,134,186, 73, 31,236,254,108,178,208,224,205,116,204,129,
-157,192, 58,227,136, 88,219, 88,247, 75,247,168, 82,169,203,173,195, 29, 86, 72, 58,253,174,145,221, 36, 17, 43,123,223,184,123,
- 32,103,173,142, 6,193,122,223, 50,208,166, 24,235,175, 11,242,237,251, 71,242,247,159, 60,123,125,198, 65,252, 50, 95,121,108,
-137, 36,107, 72, 61,175, 89,217, 97, 74,225,132,115, 56,234,182,178, 86, 31,218, 36,240, 23, 75, 55,171, 45, 14, 16,141,170,111,
- 65, 29, 51, 52, 27, 2, 76, 63,128,215, 95,239,230,120,188,102,249,222,196, 56,151, 86, 37,246, 45, 72,195,221,172,130, 4, 74,
- 29, 44,245, 14,160, 64,216, 72,203,237,221, 26, 1,119,147, 57, 0,127, 51,249,224,141,186,102,210,154,177,247, 70,108, 69, 68,
- 89, 96,168,198, 26, 20, 76,100, 5,169,218, 21,240,151, 75, 7, 42, 53,210,157,180, 38, 51,248, 14, 36, 68,248,158, 90, 49, 67,
- 34, 33,250, 43,125, 7,236,253, 13,205,194, 27, 21, 76, 56,164, 88,201,233,107,208,140,192, 28, 2, 55,160, 31, 70, 53,121,178,
-212,179,160,119,247, 88,147,202, 23,237,153,195,114,216,122,162, 2, 21,196,198, 17,129, 59, 86,200, 69,178,221,200, 74,146, 42,
-232,155,102,232,131,162,168, 40,253,161,190,243,108,168,223, 57,147,176, 80, 72,203, 64, 51,209,247, 15,202, 28,153,106, 95,105,
- 84, 1, 98,124, 93,164,158, 26, 34,244,142,152,133,176,212,226,203, 89, 87,179,248,139,158,220,221, 72,203, 15,223,219, 98,169,
- 6,253, 32,108, 92,150,210,138, 6,162,249, 44,244,164,217,153,200,237,157, 2,185,145,191, 56,155,176, 36,225,147, 86, 48,208,
-140, 63, 47,119,119,202,114,161, 11,218,159, 39,116, 50,232,107, 93, 75,101,154,117,139, 24,185, 5, 78,139,155, 99,112,137,201,
-177, 34,194,193,220, 30,101, 55, 49, 71,157, 65,185,203, 99,212,199, 46, 9,122, 32,234, 54, 81,146, 27,232,142, 12,128, 76,212,
- 67,138, 42, 4, 68, 23,168,186, 83, 41, 18,221,140, 82, 20, 14, 13,216,133, 16,205, 46,117, 3, 30,158,116,164, 63,139, 89,157,
-240, 9,246, 9,152,193, 62,124,218, 38,152,240,219,111,237, 25, 5, 39,128, 50, 80,163, 66, 73, 43, 40,144, 44, 35, 89, 47,172,
-127,168, 14, 10,217, 15, 80,163, 27, 5, 61, 24, 8,126,230, 22, 21, 2, 37,154, 78, 27,250, 62,113, 8,100, 92,184, 27,251,117,
- 9,227,165, 6, 87, 6, 62, 51, 52, 83,228,198, 94, 18, 27,115, 32,248, 77,163,251,181,161, 90,123, 28,131, 9,165, 81, 79, 75,
-212,159, 26, 48, 7,227, 58, 8,110, 34,199, 1,143, 61, 92, 27,121, 80, 12,174,117,125, 47,204,106, 79,214, 38,151, 10,240, 69,
-127, 4, 49, 16, 79,158, 93,140,228,151,143,218,242,197,211, 14,185,251,255,187, 63,120, 83,141,134, 47,141,179, 72, 46, 39, 49,
- 75,106, 95,219, 18,121,124,124,165, 14, 4, 34, 46,105, 74,220,146,207, 61, 27,242,207, 95, 93,244,213, 8,167,212, 41,109,106,
- 4,109,185,194,140,140,107,129,148, 65,232,160,198,178,175,223,185,208,231,219,172, 22, 40, 40, 3, 49, 29,140,239, 16, 49,170,
-107,135,242,151,143,249, 76,148, 35, 51, 30, 65,120, 64, 3,161, 45, 3, 42,221, 13,181, 36,145, 58,226,142,126,214,149, 6,148,
-255,225,147, 51,142,168,160,119,140, 89,252,214, 84, 3,198,169, 70,184,139,137,102, 56,135,242,151, 31,127, 73, 61,101, 8,120,
-160, 98, 0, 28, 4,214,177, 86, 42, 50,251, 3,128,139,125,120,135, 67,240, 56, 62,104,224, 72, 56,247,173,106, 85,157,245, 72,
- 6,211,169, 1,169,184,103,134,208,191,127,235, 38,123,202, 47,206, 78, 57,158,117, 61,122,150,196, 46, 96,138,205,121,179, 10,
- 3,101,179,169, 41,153,145,101, 47, 50, 54,195,235,209, 51, 6,165,214,168, 34, 82,190,173,207, 25,184,108, 18,127,231,217,171,
- 51,102,246, 9,193,152, 11, 67,252,166, 51,116,184,211,107, 77,111, 48, 63,102,179,100, 84,235,233, 51,147, 30,213,157,177,107,
-141,115, 78, 67,208, 72,197,236,161,227, 51, 65,213,186, 89,173, 25,208,109,109, 28,227, 41,246, 97,245, 78,177,148,159, 56,205,
-117,253, 60,253,238,169,222,175,148,102, 63, 40,211, 18, 36,235, 25,151, 4, 74,140, 75,130, 61, 83, 36,119,178,119, 52,146, 26,
-220,101,206, 18,227,120, 39, 11,102,127,173, 17,130,219,162, 58,189, 9,103,154,135,106,156, 38,243, 41,251,246,173,254,216, 40,
- 66, 81,122, 5, 48, 10,227, 96,227,128, 10, 96,155,245, 58,149,226, 14,246,160,196, 5,134,177,180,218,132,181,221, 25, 65,245,
- 49,101,193, 7,185,208, 45,107,101,203, 46, 99,252, 12, 0,154,130,243, 31,107, 77, 29, 4, 71,247, 58,137,167,172, 70, 96,125,
- 32,230,147,246,245,110,133,118,119, 64,149, 13,231,106,106, 6,232, 50,166,164,144,207, 57,251, 21,112,164, 13,193,225,124, 62,
-114,234,148, 52, 81,212, 10,199, 83,161,165,128,214, 90, 18, 91,203, 5, 21, 63, 56,202, 58,168,184, 33, 59,140, 4,104, 53,103,
- 43, 5,247,184,217,106,145,176,103,161, 65,193, 86,189, 66, 60,195,163,167, 79,229,157,251,111,202,111,255,240,183,100, 62, 29,
- 74,179,217,113,244,189,107, 35,188, 17,107,233, 84,138, 85,182,131, 16, 28,145, 7,135,130, 60,230,224,177,175, 57,130,138, 61,
-142,185,225,189, 57,114,248,154, 62,216, 99,208, 1,110,119, 32,227, 47, 46, 31,211, 7,188, 56,121,161, 1,195,138,130, 57,152,
-233,134,253,188,175,118, 11,120,128,167, 47, 87,114,231,198,134,212,203, 89,238, 93,110, 29, 82,252, 72,156, 74, 31,180,198, 23,
-228, 1, 89,211,246,101, 48, 73, 13, 16,101, 18, 90, 48,230,197,166, 17,176,178,150, 22,246,200, 40, 46, 18,174, 83, 77, 3, 93,
-172,155,134,228, 84, 57, 67,146, 0, 26,237,116,152,165,156,116,107, 56,101,213,195, 42, 48, 62,137,109,238, 29, 30,210,161, 35,
-179,111,245,218,114,146,173,202,237,237,178,156,180,166,228, 99,105,235,239, 67,155, 33,167,255,221, 82,127, 4,112, 45,101,135,
-123, 75, 57, 44,131,167, 35,114, 72,253,128,115,248,190,103, 4,113, 56,239,208,149, 71, 66, 28,146,213,111,162, 89,120,133,213,
- 32,147,199,157,203,121,123,196,201, 15,180, 54,128,237, 64,240,120,217, 30,200,150, 6, 22,231,151,109, 93,227, 52,167, 35,208,
-174, 68,224, 20, 50,224,183,246, 24,166, 73,108, 72, 42, 98,219, 6,147, 1,105, 13,136,138,165,178, 84, 3,107, 49, 25,162, 63,
-145,161,218,156,177,218,137,169, 6, 38,225,131,103, 87,210,111, 13, 37, 30, 0, 92,144,200,227,211,174, 60,191,152,201,243, 54,
-148,192, 64, 86,144,167,218, 25,196, 19, 98,142, 56,169,195, 59, 31,201, 15, 52,178,121,247, 86, 93, 15,106, 66, 84, 31, 90,172,
-152,201, 5,227, 18, 50,110,246,247, 98, 67, 34,190,125,163, 42,127,253, 39, 79, 52,226,159,243, 82,110, 55,114,252,121, 12,125,
- 15,244,239, 78,150,145, 93,122,134,195, 30, 81,156, 38, 20,239, 83,214, 21, 96, 6,136,111,224,236, 19,204, 9, 62,105, 68, 51,
-232, 1,131,123, 93, 15, 95,166,158, 19, 15,227, 88,129,101,242, 33, 23,222,122, 96,125,253,185,143,143, 17,129, 37, 4,120,145,
-181,106,141,136,167, 42,141,114, 81, 29, 87,153, 81,211,245,248,199,150,110,240, 27, 71,107,249,219,143, 95,105, 36,191, 34, 48,
- 14,129, 68, 42, 19,112,225, 31,188,232,201,123,183,183,228,222, 78,133,198, 14, 17, 58, 25,178,214,115,153,142, 7,114,124,209,
-150,141,124,192,185,201, 70,104,224,178,168, 55,145,158,167,155,231,167, 88, 78,130,228, 32,213,131,144, 13,166, 19, 30,252,165,
-110, 94,185,148,161,216,202,130,218,208,190,147,129, 99,189,214, 8,113,200,159,110, 4, 34, 48,188, 40,227, 30, 95,205,165,190,
- 95,146,218, 13,117,142, 87, 26, 84,160,175,157, 4,100,109, 74, 16,232, 68, 54, 58, 23,230, 74,220,143,108,201,151, 63,216, 57,
-212, 11,114, 38,255,243,159,125, 66, 17,156,145,190,231,179,211,190,238,125, 79, 30,156,206,168, 80,182,142, 33,214,179,201, 18,
- 42, 8, 74, 2,215, 23,125,179,225,201,221,162, 58,199,189,130,252,232,113, 75,215,102, 75, 14,170, 25,217,197, 72,198, 50,205,
-210, 48,162,105, 4, 68,192, 13, 0,125, 74,162,153,216,231,186,159,144, 51,125, 77,214, 51, 56, 26,136, 56, 64,102,243,160,150,
-149, 80,215, 12, 32,194, 53,103,148,213,217,148,178, 14,150, 31, 25, 25, 8, 25,204, 34,182, 59, 80, 9,162,208,134,254,241,143,
- 53, 8,249,213,195,231,242,253,183,183,184, 95,152,217,222,200,248,188,180,254, 32,210, 51,170, 81,240,101, 71, 42,234,176,160,
-116,132, 40, 24,213, 22,244,185,135,179, 5, 29, 21,242, 23, 56,113,207,129,113, 44,177, 77,244,140,148,136, 80,191,100,127,124,
-206,103,198,243,145,120, 73,215,230,221,123,119,233,140, 31, 31,159,176,207, 70, 0, 39,129, 81, 70, 18, 3,167,203, 12,100,109,
-218,221, 4,122,186,192,148, 78,146,227, 54,190, 11, 84, 61,246,151, 99,210,119, 86, 72,249, 10, 7,177,191,185,201,125,124,248,
-226, 37,141, 53,254, 28,162, 45, 48, 44, 64,248, 26,151,249,194,168, 89,157,238, 57, 75,241,152,203,117, 32, 57,150,217,173,200,
-225,136,216,126,173, 38, 6, 39,119, 13, 10,132, 81, 71,185, 30, 14, 26,191, 15, 35, 51, 95,206,165, 86, 49,208,217,112, 60,180,
-158,180,177,226,144, 32, 5,235, 88, 82, 99,136,190,102,127,104, 52,165,101,246, 55,133,217, 17, 13,184,102, 87, 70,181,105,153,
- 13,165, 90,167, 40, 51,142,228,205,120,205,179,130,241,192,187, 55,246, 72,124,133, 64, 25, 45,128,167,231, 61,162,141,199,234,
- 88, 80, 44,222,223,172,170, 45,137,152, 81,159, 94, 54,229,107,183, 14,153, 77, 62,126,121, 65,253, 9, 84,170,176,183, 24,147,
- 98,175,209,179, 10, 8,123,206,153,180,225,124, 2, 35,154,130, 4,213,218,179,128, 3,220,112,235,181, 49,133,225,110,177,189,
-183,142,185,254, 72, 40,192,217,190,140,244,156, 44, 71,204,108,235, 32,179,209, 0, 47,133,241, 89,144, 17, 37,125, 6, 20, 12,
-206,144, 12, 1,123, 22,226,133,141, 71,255,154,148, 24, 89, 40,200, 38,216, 70,194, 40, 44, 66, 13,181,179,243,113,215, 81,146,
- 10, 3,138,104, 49, 85,231,152,151,135,143, 30,145, 97, 15,163, 88,181, 90, 93,206,244,156, 29,159,158,201,159,253, 85, 73,126,
-247,183,190,167, 25,251, 45,249,251,159,255,138, 65, 60,108,158, 79, 6, 57, 35,202,130, 19, 41, 3, 41, 74, 96,164,199,222,242,
-140, 44,134, 41,179,147,161,181, 97,200,146,231,219, 36, 81,196,145,181,169,218,234, 20, 73,113,246,246,238, 81, 47,130,102,104,
-101, 36, 99, 8, 24, 89,165, 8,124, 86,118, 48, 98,204, 81,200,137,105, 41,252,222,183,111,203, 95,255,227, 19,102,194, 40, 93,
-115,114, 41,176, 86, 76,188,178, 89,126,159, 64, 77, 33, 35, 30,158, 99,181, 28,115, 58,104, 9,123,121, 77, 37,141,196, 13,216,
- 43,226,110, 82,100,246,163, 62,130,238,211,176,191, 50,141,116,135, 72,239, 12,198,212,186,224,116,212,218, 18,136,155,123,187,
-172,180, 44, 25, 68,170,141,217, 44,211, 62, 29,221,220,212, 4,245,148,212,229,168, 14,131,254, 59, 8,242,210,214,164,104, 48,
-158, 59, 62,138,128,152, 23,124,246, 10,192, 59,175,194, 0, 6,237, 15, 86, 22, 80,201,194,251, 81, 7, 33,197,137,149,195, 27,
-219,250,125,207,196,102, 32, 98,167,182,152, 33,150, 6,210,200,168, 92, 15, 71, 19,125,182, 88,238,223,222, 85,155, 59,160,196,
-118,224,139,227, 45, 17, 86,176,150, 26, 16,214, 53,144,131,172,183,122, 62, 77,118, 2, 41,132,115, 42,212, 77, 34,181,145, 65,
-242, 58, 25,196,247,223, 59,172,203,230, 27, 53, 27, 93,252,149,102,158,239,223,174, 51,226,233,158,118, 88, 30,130, 31, 73, 65,
- 68, 68, 23,254,205,131, 13,185,173, 15, 10,128, 26, 88,138, 16, 49, 12,244,113, 63,186, 8, 56,178,128, 49, 8, 76, 68, 33,146,
-198, 69, 74,146, 20, 47, 44, 72, 20, 18,189, 0, 55, 54, 11,114,115, 75, 29,167, 58,170,203,206,132, 37, 23, 80,120, 2,128,134,
-190, 43, 68, 71, 80,150, 69,116,234,137,137, 69,112,224, 6, 27, 74, 30,116, 11, 12,168, 32,165,134,125,213,154,147, 3,123,137,
- 69, 5,106, 92, 23,185,112, 93,180,228,101,178,190, 31,140,113, 4, 54,168,249,130, 64, 39, 48,251, 64, 72,160, 94, 52,157,231,
-193,100, 38, 79, 78,155,210,175,204,164, 51,156,242,144,103,152,241,164, 52, 34, 76,201,173,157,162, 36, 31,236,202,143,126,126,
-162,155,176,224,172,122, 72, 14,105,145,183,246, 66,185, 89, 5,179,220,136,179,207, 48, 64, 36, 17,137, 87,146, 42,165,165,139,
-254, 98,106, 45,239,221,169,115, 28, 16,139,127,124,137,178,156,149,159,115, 32,223, 80,167,159,215,108, 28, 45,188, 66, 25,234,
-105,158, 81,146, 2,117, 15,212,240,113, 71,130, 74, 81, 51,134,144,179,211,148,107, 37, 89,181,245,234,146,149,101, 82,112,240,
-200,172,135,122, 81,110, 53,124,142, 89,224,130, 45, 33, 4,179, 54,176,213,194, 69,116, 33,132, 47,220, 60,125, 70,215,231,131,
- 59,155,242,135,223,191,199, 8,122,119,163, 32,155,181, 52, 53,238, 63,184,159, 97,150,254,243,135, 61,117,130,101,150,205, 80,
- 1,193, 76,242, 97, 37,148,183, 54,212, 72,235, 89,223,210, 64,226,135,250, 62, 63,126,208,146, 29,117,198,251,123,121,185,234,
-142,229, 89,107, 44, 57,240, 99,171, 99,121,124, 62, 32, 0, 15,193,214,120,178,100,105, 15, 50,134, 40,173, 34,130,133, 97, 46,
-229, 87,204, 82,190, 60,155, 73,216, 92,200, 7,239,212,216, 2, 66,219, 4, 80, 93, 3,250,197,100,157, 73, 22,154, 53,204,215,
- 50, 94,169,177, 9,115,116, 18, 39,189,161,252,221,103, 79, 53, 24,202,200,121,103, 44, 79, 94, 62,151,239,190,115, 91,141, 63,
-176, 31,109,105, 4,104,219,168, 65,209,179, 52,159, 78, 72, 73, 89, 41,107, 54,170, 89,254,104,106,189,103,150,196,157,179, 99,
- 97, 35,182, 30,249,126,125,131,123,123,222,238,240, 28,121,190,245,196,225,176,113,102,222,190,117,196,128,224,201,201, 41, 81,
-238, 24, 11, 3,242,123, 73,245,164,136, 14, 29, 25, 61, 12,216, 20,134,188, 80,208, 32,117,201,239,227, 44, 58,140,125,114, 29,
- 68,120,228,149,102, 25, 30, 89,185,254, 23,158,239,112,123, 91, 13,115, 65,154,189,158,129,126, 40,212, 98,165, 64, 60, 15,122,
-240,214, 10, 8, 93,223,220,218, 92,161, 99,109,132,168, 9,219, 7,158,141,106, 93, 99, 5, 12, 56,103,237,170,189,141, 13,189,
-159, 29,167,180, 22, 80,241, 43,157, 54,148,250,124, 62, 35,130,254,154, 40, 7,217, 29, 3, 76, 84,143, 48, 82,154,133, 98, 97,
-193, 88, 28,187, 35, 18,195,100, 82, 57, 35,115,138, 23,198, 71, 17, 9, 13, 40,130,189, 87, 23,175,140,219,156,114,173,122,215,
- 39, 83,150, 46,231,179, 9, 71,105, 81,218,197,244, 9,130, 55, 60,111,173,152,231,251, 90,160,100,179,217,168,156,228,193,115,
-174, 25,227,151,199,103, 18, 5,123, 6,109,136,241,174,186, 14,106, 8, 99, 49,110,126,210,228,199, 54,207, 75,205, 7, 63,180,
- 89,103,227, 94,150, 36,101,148,186, 28,211,155,140, 88, 53,132, 19,220,174, 85, 8,194, 29, 12, 38,156,123,247,215,172,207,168,
- 99,207, 74, 53, 95,100,101,100, 76,197,185,136, 14,237,178,211, 38, 87,186,144,220, 48, 32,232,204,211,237, 68,134,191, 92, 91,
-115,197,127, 61,125,240,107,201, 96, 4, 30, 24, 31,155,122, 41, 58, 84, 84,254, 72,203,132, 81, 53,205, 64, 33,214,210,234,116,
-229,221,183, 54,229,217,139,167,210,233, 52, 37,204, 20,229,252,170, 37, 95, 60,124, 34,119,239,190, 33,119,142, 14,229,236,236,
-146, 68, 58, 21, 93, 99,244,180,243,233,152, 24, 25, 76,115,140,231, 54, 58,134, 49, 67,216,176, 96,145, 98, 22,140,188,129, 45,
-107,204,194,172, 64,204, 34, 20, 59,193,115, 78, 56,218,183, 38, 62,162, 86, 65, 2,116, 71,182, 53,160, 50, 41,104, 35,157, 1,
- 38, 0,248, 41, 80,215,250,222,132,235, 13,154, 89, 76, 74,212,212,230, 31, 79,250,172, 96,225, 92,131,238,119,189,210, 32, 32,
-155, 54, 17, 30,221,255,225,100,233,104,138, 13,141, 31,250, 86,101,140, 18,107,194,174,156,172,104, 67,207, 39,184,227, 1,126,
-196, 52, 1, 0,108,112,232, 56, 87,232,235, 67, 5,114,182, 50,161,138,104,109, 66, 71, 36,165, 41, 1,133, 62,226, 89, 69,191,
-219,243, 82,196,127, 32,226,218,221, 40,201, 69,103,198,231, 3,178,253,198, 94, 85, 19,131, 83, 78, 68, 85, 74,105,211,132, 7,
-152, 53, 29, 16,217, 14,222, 3,223,166, 54, 93,107, 46,207, 42, 10,222,227, 72,157,106,175,175, 9,110,111,194,202,227, 85,103,
-192, 86, 27,206, 43,238, 84,179, 7, 14,121, 96,173, 2, 86, 56,222, 80,159,122,160, 73, 33, 64,230,173,145,129,239, 98, 23, 80,
- 98, 28, 22,156, 8, 45,253,108, 36, 45, 8, 68,125,150,227,167, 12,142, 38,145,113,157,152,221,138,101, 60,236,171,227, 95,202,
-187,187, 13,171, 8,180, 53, 74,158, 45,138, 50, 82, 67, 97,242,118,198,215, 12,231,190,169,153,194,205,253, 77, 19,144, 0,125,
-101,193,202,104, 48, 42, 44,153, 47,198, 44, 13,192,144,225,139, 65,178,194,190, 97, 58, 39,221,225, 88, 23,108, 40,189,174, 70,
-215,211, 2,123, 7, 24,245, 64, 68, 54, 68,102,191,128, 70,173, 16,241,105, 66, 18,215,243,178, 86,238,103, 38, 35,246,224,216,
-108, 92,116, 92,120,140, 45,112,244,107,109,253,201,208,110, 5,127, 14, 62, 15,153, 17,208,182, 64,153,123,137,129, 59, 40,214,
-162,207,252,143,207, 58, 82,211,108, 18,253, 97, 24, 94,148,135, 94,156,183,100,187,190,100, 52,139,121, 99,144, 7,160,124, 8,
- 30,225,119,143, 26,212, 41, 71, 31,253,149, 58, 78,163,145, 77,164, 28,104,196,183,161, 7, 53,107, 0, 48,207,205,113,167,244,
-192,174,250,107,121,227,118, 67,198,107,189, 68,144, 16, 76, 2, 39, 82,178,150,141,195,162, 20,182,179,122,209, 19, 89,106,246,
-152,206,169, 97,193,139,228,116, 13, 48, 2, 56, 89, 16, 85,235,101, 66,146, 85,164,245,226,204,215, 41,153, 38,105, 30, 60, 42,
- 35,233,161, 7,229, 12, 17,153,196, 40,120, 20, 17,120,248,114, 32,135,181,178,212, 74,105,246,123,168,136,231,248,142, 99,135,
-126,142,221, 8,147, 17,105, 4,204, 28,254,179,111,223,212, 76, 75, 51,137,192, 33,118,213,112,162, 11,156,142,203,242,133,174,
-215,213, 85, 87,198, 7, 21,249,248, 49, 74, 69, 69,249,246,190, 26,252, 76, 76,113, 29,208,113, 30,236,151,229, 59,122,224, 63,
-252,234, 66,222,190,179, 33,139,216, 35, 58,181, 6,150, 57, 49,148, 59, 88,179, 50,105,251,117,127,154,200,131,102,194, 57,208,
- 61, 93, 91, 98,117, 72, 74, 2,242,126,205,194,245,231,159,188, 88, 48,227, 64,187, 0, 75,187,112, 61,109, 0, 93, 16, 32, 84,
- 27, 13, 25,181, 39,164,140, 69, 86,251,231, 63,123, 40,179,113, 31,115,140,242,201, 73,147,172,115,153, 76, 65,226,176, 32,207,
- 79, 63,103,128,128, 30, 58,200, 87,112, 94,106,165,146,244,219, 45, 10,198,192, 8,205, 33,146,131,202, 78,104,100, 50,236,107,
-130,238,117,107,147,229,226,174,102,232,214,119, 14,104,108,128, 77, 64,219,229,254,209, 77,233,246,251,122,134, 46,120,238, 48,
-107,158,214,128, 19, 17,187, 56,210, 35,156,237, 70,177,192,145, 55,170,166, 33,211, 97,207, 91,207,166,183,160, 50,219,220, 33,
-237, 1, 32, 74, 92, 16,152, 35,167,195,146,173, 1, 48,198, 1,188,135,239, 64, 95, 26,160,184,192,183,224,212, 90, 5, 54,174,
-228, 59, 98, 38,232, 48,160,197, 83, 42, 20,120,249,113,254,175, 41, 83,177,206, 12,146,172, 20, 70,167,205,150,136, 58,206,103,
-167,167, 20,104,193, 25,193,204, 62,177, 22,148, 80,181,242, 50,178, 71,128,143,234,249, 52,191, 23, 21,141, 44, 17,236, 66,250,
- 95,140, 21,149,243, 41, 86, 5, 74,197, 44,179,203,153, 6, 67,153, 16,101,212,140,147,146, 77,145, 55, 28,164, 44,144,191, 69,
- 31,179,158,153,201,120, 12, 26,213, 37, 3,148, 98,198,200, 80,192,179, 13,223, 7, 32, 20,238,231, 98,137,145,189, 57, 91, 23,
- 16,192,193,251,191,113,180, 37, 47, 94, 53,229,229,233,149,124, 79, 3,185, 55,143,118,228,244,106, 40,143,199, 70, 0, 4,135,
-136,245,181,145, 76,171, 98, 64,102, 21, 34, 43, 88,135, 56, 50, 73, 85, 4,189,112, 60, 41, 86, 76,108, 82, 36,112,189,102,172,
-231,116, 60,101, 16,132, 83, 28,148,171, 38,144,162,107, 51,117, 60, 24, 56, 63,176, 25,195,192, 52, 40,112,223, 80,197, 11, 98,
-195,135,196, 94,236,184, 32, 18, 27,189, 67, 21,194,241,242,227,179,208, 99,207,105,116,191,156,246,245,220,155,204, 39,238, 0,
-136,132,224,188,176, 15,253, 65,143,229,124,140,155,177, 18,160,123,247,163, 31,255,131,252,187,223,255, 23,242,123,191,243,123,
-242,226,241, 39,150, 77,187,158, 47, 90, 92, 24, 57, 3,217, 9, 38, 33,144,124,120,204,122, 77, 85, 14,227,129,104,117, 49, 19,
-213, 51, 13,214, 66, 8,169, 96,191,209, 82, 53,136,141, 6, 70,233, 50,109, 55,130,172,158, 58,160,227,147,199, 12,176,169, 37,
- 46,190, 99,215, 84, 27,173,151,245,221,219,135, 92,151,120, 57,227,123, 82, 89, 17, 78, 85,207, 33, 70,189,200,173, 1,160,223,
-100,168,247, 15,120, 44,211, 63,159,205,210,164,155, 70, 11, 4,114,163,168,152, 1,228,135,231, 64,165,176,170,142, 16,179,228,
-116,244,100, 2, 92,177,133,136, 51,218, 30,140,232,124, 81, 89, 24,141,151,252, 46,216,188,163,189, 29,254, 44,241, 31,235, 5,
- 65,201,104, 23,224,158,195,182, 85,244,172,110, 85,145,100, 84,244,108, 71, 4,117,167,200,184,185,102,112,147,207,167,185, 95,
- 49,239, 91,218,206, 8, 2,232, 85,196, 51,149,211, 53,137, 24,244, 46, 73, 37,142, 26, 9, 70,225, 14,182, 43,122, 6,123,198,
- 82,233,148,228, 82,250,119, 81,209,222,203, 22,245,243,151,210, 27,206,212, 15,230,229,237,187, 91,114,210, 58, 37,159,135,127,
-141,123,208, 61, 26,106,176,186, 70, 48, 85, 45, 82,191, 96,205,177,217, 57, 1,172,168, 14,192,158,177,186,168,207,122,118,217,
- 70, 86, 40,223,187, 87, 55, 21,185, 90,189, 36,103,253,153, 9,114,168, 83,210,253,208,191,164,209,184,110,198,123,111, 28, 50,
-242,195,133, 5,104, 3, 17, 22,202, 67,113, 96, 23, 14, 99, 41,197,162,177, 25,193, 48,131, 76,223,184,148, 81,246,216,144,205,
- 74, 86, 15,174,113,125, 99, 84,229, 69,107, 73,142,113,100,164,216, 4, 24, 85,102, 62,234,168, 64,104, 33,174,119, 34, 14, 76,
- 67,246, 85,106,220, 70, 12, 52,112,136,168,200,230,217,197, 35,129,128,190,140,207,204,202,122,249, 32,192, 96,196, 51, 91, 50,
- 16,129, 90,219,106,105, 8,112, 68,229,207, 78, 38, 4,132,220,191, 93,151,173,205,188,116,199, 19,102, 85,155,165,154,108,151,
-179, 44, 15,161, 60, 31,234,161, 89, 78,112,248,150, 84,230, 33,211,207,218, 74,189, 3,104,113,163,167,169,153,118, 52,141,101,
- 50, 52,198,170,198, 70, 94, 74,117,205, 44,212,192,226, 93,155,151, 99,153,143,150, 50,208,103,175,105,102,145,193,200, 11,190,
-190, 53,215,239,141,165, 92,208,108, 29, 35, 12,179, 64,198, 32,118, 24, 45,200,189,156,206, 5,100,179,131,116,232, 92, 35,185,
- 69,166,100,116,180,193,154,153, 62, 56,177, 83,174, 81,157,210, 67,119, 53,137,229,162,187,144, 63,251,248, 66,126,255, 91,135,
-172,170,120,174,143, 24, 51,154,181, 82,205,194,177,218,145, 32,100,177,226, 69,238,142, 49,167, 30, 74,173,158,181,113, 39, 61,
-160, 96,146,131,113,190,127, 84,145,159,124,118, 41,159,157,104,240, 80,170,203, 15,239,166, 36,175,209,230,122, 97, 20,152,248,
- 44,204,234,222,218, 44,112,198,253,103, 15,175,228,235,247,118,228,173, 91, 5, 61, 3,198, 15, 48, 31,204,228,195,207, 91,114,
-191,166,142,105,149,147, 39,151, 11,185,232, 3, 40, 50,214,103,143,136,172,190,118,234, 36,200,137,133,128, 53,207,149, 42,225,
-144, 96,212,200,215, 77,177,147,152, 37, 48,244, 65, 95,234, 69,125,218, 28,202,201,197, 21,123,126,237,238,146,165,222,125,205,
-108, 47, 53,179,121,121,209, 36,154, 30,189,184,179,118,151,199,170, 86, 41, 19,247, 48, 95, 69,175, 21,215,174, 41, 64,169,189,
- 29,248, 68,246,150,245,194,142, 28, 80, 41,113, 35, 96,190, 19,180,192, 40,217, 27, 55,111, 82,104,227,172,213,100, 0, 5, 29,
-116,232,167,227,174,160,188,139, 76, 5, 25, 97, 78, 3, 59, 56,160, 86,127,192, 17, 56, 43,175,122, 86,146,143, 77, 87,225, 26,
- 9, 15,231,130, 63, 95,172,192,226, 88,100, 95, 28, 99, 49,232, 29,227,243,172, 63,107,122,221,136,200,249,247,136, 99,176,172,
- 56,235,132, 90,124,170,242, 89, 41, 25, 35, 82, 84,123, 98, 48, 18, 57,142,136,107,159,110, 72,238, 98, 46, 67, 60, 1,217,234,
-220,115, 37,177, 97, 9,240,222, 8, 24,178,152, 7,158, 13, 24,152, 76, 23, 62, 25, 24,129, 81, 65,255, 27,159,133, 96,165, 86,
-206,201,193, 86, 77,239,136,102, 62, 25, 91,195,213,106, 65, 28, 2,140, 51, 2, 27, 92, 32,204, 2, 79,189,169,147, 75, 21,150,
- 70,161,107,189,171,103, 48,100,175,215,231, 68, 73,106,226, 51, 24,196, 8, 57, 70,249,144, 25,211, 64,134,230, 52,225, 60, 27,
-149,156,148,114,187,242,119,255,248, 76, 62,252,226,165,236,108, 52,164,211,237,232,207, 78,245,115,125,187,187,113, 68,253,115,
- 24,141, 53,219, 56, 41, 58, 15,100,109, 8, 18,136,137,129,167,139, 45,112, 67,162,129, 42, 8,146, 25, 67,252,251,175, 57,199,
-169,221, 77,130,147, 37,114,118, 18,130,160, 69, 81,212, 0,166,133,117, 75, 2,206,204, 39,142,195, 60,206, 10, 1,180,161,235,
-242,139, 27, 35, 53, 94, 8,227, 53, 79,160,134,232, 88,247, 4,188,253,110,166, 26,207, 57, 7,225, 73, 96,108,112,144,175,246,
-213,158,110,109,239,203,108,212,145,153, 58,198,126,247, 82, 30, 61,126, 32, 95,127,239, 3, 89,121, 89,249,171,159,124,200, 96,
-134,137,152,225, 99,121,198,170,165,156,174,111,133,227,100,200,212,209, 2, 64,108,135,243, 28, 57, 0, 29,122,179,190,191,166,
-130,218, 24,128,171,148,129,194,214,131, 33, 91, 25,181,250, 14, 38,236,173,165, 20,100, 89, 96,102,235, 49,177, 96, 9,146,173,
-155,245, 2,181, 31,160,218,246,139,167, 3,217,171, 23,101,168,119,160, 51, 90, 57,210, 26, 95, 29,248,154, 78, 17, 99,115,148,
-128,213,123,178,134, 42, 31,218, 53,107,171, 6,195,125, 99, 29, 75,106,151,183,106, 5,226,115,216,118,130, 22,253, 34, 38,168,
- 25,156, 37, 67,140, 84, 79, 87,100,177, 3, 25, 18,170,201, 56,211, 32,153,201,240,204, 77,136, 7,203,234, 94,128,207,126, 57,
- 66,160,156,227, 8, 32,122,232,181,114, 94,198, 75,180,121, 66,181, 25, 83,249,214,253, 27,242,197,227,115,222,179, 75, 77, 74,
-203,185, 20, 65,150,126, 88,228,250,131, 46, 28,119, 20, 9, 97, 56, 52,172, 10, 28, 61,198, 56,111,238,212,229,228,114, 36, 91,
-149, 44,201,132, 48,182, 87,204, 39,166, 61, 66,157,154, 21, 3, 0,140,184, 97,146,163,221,159,200,119,190,121, 75,174, 90, 35,
-249,201,151, 67,182, 1, 96,231, 16,192,173,160, 49,129,150, 15,124,159, 88, 75,161,171,217,126, 46,191, 34,167,198, 10,220, 14,
-208,154, 87,223,214,236, 13,164,148, 1, 62,196, 36,201,195,135,175,218, 36,250, 39,194, 27, 68, 18,122,192, 16,129,212, 54,115,
- 20, 63, 33,171, 21, 65, 51, 43, 19, 85, 89,217,161, 13, 88, 66,206, 82, 95,120, 60, 71,132,171, 95,166,145,141,159,178, 81,137,
-146,158,246,253, 98, 70,158,191, 26, 9,186, 85,223,121,163, 65, 6,177, 23,103, 61,246,210,169, 51, 12,121,220,149, 49,197, 65,
-217,132, 61, 98, 61, 88,140,106,197, 24,162, 96,216,144,165,131, 5, 13,254,159, 64, 18, 61,216, 81,104,186,198, 1,148, 61, 0,
-230,201, 24,138,155, 90,221,145,147, 93,116,227, 91,208, 81, 6, 93,104, 87, 35, 86, 56, 10,144, 31, 60, 63,235,203,191,253,238,
- 29, 2, 38, 78,219, 3,130,185, 94,188, 58,151,231,231, 3,121,247, 32, 47, 13,221,112,128,190,254,254, 81, 83,190,122,222,149,
-170, 26,102, 32,112, 17,161, 0, 3, 0, 3,227,235,225,159,170,131,158,232,129,189,152,169,147,206,251,156,202, 6, 23, 48, 70,
-129, 24, 33, 95,245,101,172,191, 14,183, 27,210, 88, 98,214, 52, 96, 20, 61, 38, 48, 77, 47,144,190,255,121,123, 46,199, 77,104,
- 73, 47, 9, 28, 41, 21, 67, 57, 44,135,242,253,187,117,114, 15, 67, 19, 30, 70,116, 62, 67,166,101,104,246, 8,228, 26,250,222,
- 95,156, 78,228,151,207,245, 64,104, 16,242,197,147, 75, 53,114, 25,121,235,176,202,172, 2, 81, 36,130, 33,155,121,246,109, 30,
-250,159, 40,166,112,100,137, 66, 22, 17, 13,126, 38,151, 50,242,182,192,176, 9,135,122, 6,234,181,156, 52, 23, 25,249, 87,247,
-178, 82, 33,249, 80,194, 61,194, 1,140,157, 44, 32,136,111,142, 26, 89, 86, 6,190, 58,110,243,249,161, 11, 15, 46,234, 53, 12,
-188,102, 32, 35,140,236,177,232, 53,151,142,102,201,149,219, 71, 50,143,115,146, 69,164, 59,157, 26,119, 52,165, 22,141, 49,138,
- 53, 5,199,130,199,200, 88, 29,108, 71, 29,245,117,111,116, 62,133,138, 93, 70, 30,183,250, 4,137, 32, 64, 44,193, 17,228,243,
- 44,163,191, 56,107, 82,151, 26, 68, 64, 0,196,161,122, 3,103, 11, 64, 28,137, 44, 34, 43,205,162,236,150, 56,134, 56, 56,172,
-157,250,134,108, 84,107,156, 92,240,245,114,161, 95, 87,202, 25,155, 28,136, 94, 48,206,118,239,198, 13, 57,111,181, 25, 56,144,
-196, 9, 61, 20, 32,199,199, 99, 62, 47,254, 15,206,137,142, 79,159, 27, 65, 10,121,186,213, 80,183,244, 89, 60,199,145, 46,174,
-159,158, 36,177, 3,204, 57, 64,168,126, 22,156, 4,246, 97, 58, 53, 37, 55,100,237,158,111,202, 92,226, 45,152,209,146, 76,132,
-217, 80, 32,135,219,155, 44,245, 93,104,102,140,108, 3,159, 7,230,185,142,126, 31,185,203,157, 51,185,254, 31, 29, 58,214, 60,
- 54, 42,219,171, 78,135,235,129,115,130,202, 5,218,105, 36,216, 9, 67, 58, 27,140,161, 45,121,247,214, 50,208, 51, 0,172, 2,
-206, 0,130,160,200,225, 60,158,159,117,101,167, 90, 32, 31, 4,116,210, 65,147, 10,196,239,130, 0,154,148,203,154, 86,204,214,
-175, 29,101, 30,255, 95,207, 74,179, 59,100, 95, 19,129,123, 83,141, 29, 24,230,200,253,160,246,132, 25, 74, 58,203,185,111,188,
- 27,130, 23,100,176, 5,142,221,121, 26,132,101,228, 27,111,238,202,227, 87, 45,234,197,127,247,107,119,245, 59,167,242,211, 79,
-159,200,133,222,103, 47, 76, 19,239,146, 19,195, 54,132,164, 38, 77, 49,120,165,252,111,144,176,108,110,211,248, 6, 54,131, 77,
-130,237, 89, 18,124, 56,167, 45,226,122,129, 67, 0,179,233, 94, 68, 66, 24, 47, 54,204, 10,158, 9, 9, 10,240, 26, 32, 1, 66,
-118, 5,181, 58, 4,213, 64,205,175,255,137,228,112,226,184,247,163,245,218,245, 81,237,179, 17, 80, 20,114, 53,117,212,109, 78,
- 11,180, 53,235, 68,233, 63, 89, 37,175,153, 8, 59,186, 78, 69,117,100,144, 6, 77,102, 99,221,227,140,156,158,157,106, 22,188,
- 37,111,220,123, 75,126,245,217, 47,165,221, 27, 66,171,205,250,174,177, 9, 38, 93,181,167,234, 60, 90, 12, 58, 2,158,143,196,
- 84, 41, 93,153,155,172,124,128, 1,132, 30, 91, 55, 56,183, 8,166, 61,114,161,172,169, 80, 7,180, 62,214,124,127,179, 33,197,
- 66,214,200,118, 16, 16,165,211,172,138, 86, 52, 96,174, 1,112,150, 49, 42, 90,180,111,206, 90, 93,182,249,186, 26,240,163,186,
- 8,124, 2,168,117, 45,219, 14,205, 20,129, 0, 11,124, 5,184,211,154,161,161, 34,137,160,134,114,169,122, 23, 90,195,133, 12,
-103,134,195, 0, 24, 27, 19, 26,245,130,209,167,226,158, 28,110,111,201, 87,207,158,242,156,121, 28, 19,246, 89, 89,234,235,189,
- 67, 48, 11,177,160,134,166,228, 41,170,231,165, 52,145, 89,114, 4,248,222,205, 77,150,242,219,253, 5, 91,179,120, 39, 80,128,
-223, 62,104,232,153,155, 73,127, 12,238,249, 57, 91,204,241,194,231,122, 64,250,185,164,201, 88,218, 23, 39,199,107,248,154,174,
- 62,227,102,173,200, 73, 19, 76, 84,160,133,131,138, 20,129,169,113,236, 4,132, 18, 50,113, 66, 25, 16,247,255,147, 39, 29, 57,
-216,191,148,175,191,179, 43,159, 63, 27, 8, 0,236, 8, 16, 6,154,244, 44, 57,226, 26,177, 74,149, 80,193, 52,162, 77, 71,128,
-128, 68,118,170,190, 56,147, 45, 83, 94, 22,118, 55, 67,226, 38,253, 59, 89,125,206, 5,162,118,206,251, 69,178, 81, 43, 73,163,
- 94, 39, 1,199, 54,140,249,200,122, 65,232,231,166, 52, 10, 92, 57,164,118, 28, 25, 17,199,117, 43, 59, 29, 88, 25, 15,135,231,
-154,222,243,104, 51, 43,221,171, 46,169,247,240,121,144, 26,252,198,141,140, 46, 70, 81, 62,125,218,165,129, 71, 9,204,128, 35,
- 96, 76, 51, 66,136,245,234, 26,168,100,209, 90,224,219,248, 15, 8,237,241,155,153,173, 2,196,142, 36,128,202, 22, 48, 60, 25,
-223,245, 67, 19,150, 32,230,208, 83,212,211,218, 85, 35, 95,213,159, 25, 12,198,140,142,128, 76,236,235,130,228, 81,154,209,139,
-248,221,155, 91, 82, 88, 14,185,224, 27, 50,147, 88, 55, 17,218,174, 65,180,148,155,229,154,189, 23, 64, 14,129, 33,139,208,223,
-141,125,171, 6,140,161, 82,135,146, 50, 74, 85,122,200,170,122,144, 46,198,125, 6, 62,233,180, 85, 25, 66,208,168, 38, 54,138,
- 3,167,138,181,251,217, 23, 77, 57,233,204,229,162, 53, 38,171, 19, 34,185,206,200, 72,251,183, 26,121,150,197,183, 53, 91,129,
- 49,121,209,154, 74,123,184,228,129, 15, 52, 19, 59,208,131,214, 40,231,184,214,152,137,132,193,124,213, 91,203, 63, 60,232,179,
-116,153,214,205, 7,219,220,143,126,246, 92,183,226, 80,157, 83,193,122,195, 81,228,232, 72,173,119,122, 45, 28, 2,163,142,170,
-196,245, 8,203, 4,143, 1, 71, 70,164,212,138, 14,251,139, 23, 45,169,214, 26,242,205,163,146,228,215, 35,185,232, 37,191, 70,
-124, 83, 61,206, 35,152, 4, 12,133,254, 92,244,128,214, 36,187,149,200,147,179,145,148,209, 59,159, 47,217,163,135, 18, 18,130,
- 9,244,179, 39,147,177, 92,106,214,220, 31,206,101,118,123, 67,110,110,103,168,184,133, 67,139,254, 29, 71,245,208, 71, 19,155,
- 60, 64,121, 23,102,240,248,105,139, 65,101, 54, 99, 61,106,100, 37,199,221,158, 6, 98,207,216,211, 75,123, 5,217,218, 40,240,
-252, 64,160, 33,165,251,211, 80, 99, 15, 84, 55,192, 53,152, 41, 7,173,111, 64,242, 11,107, 75, 16,141,235,123,220, 11, 56, 97,
-140, 5, 29,237,237,233,158, 96, 52,167,197,153,214,224, 90, 9, 76,247, 4, 4, 48,219,122, 63, 94,158,159,203, 69,179,197, 50,
- 56,169, 91,161,228,167, 14, 61,113,229, 85, 24, 95, 68,226,173, 94,207,128,120,147, 41,159,131, 26,236,228,112, 72, 27,107,148,
- 88, 41, 31,255, 32,155,167, 62,183,190,239,150,126, 7, 2,178,238,208,230,229,241,191, 98, 30,154,215,154, 13,170,243, 37,199,
-119,161, 72,128, 28,170,101,213, 98,137, 36, 24, 96,210,226,120,150, 4,174, 55,183,100,185,252,186,183, 30, 93,243,189, 59,228,
-251,245,127, 99, 20,174,163,223, 69, 45,117,151,229,175, 92,127,210,119,227,151,232,237, 65, 78, 53, 94, 27,248,172,144, 54, 62,
-121,223,201,232, 98, 29, 48,222, 51,152,174, 41, 91,137, 61,137,214, 22, 76,226,140,112,230, 62,155,229,251, 65, 66,181, 24, 21,
-140, 85, 78,207, 71, 75, 51,107,128,165,224,228, 80,194,190,234,244, 25,244,194,176, 6,137, 1,104,183,213,158, 20,114, 32,174,
-154,179,114,231,185,128,132, 92, 3,161, 57, 48,204, 29,247, 71, 61,249,242, 24,137, 73,145, 37,211,149,254,124, 26,196, 79, 36,
-145, 49, 29,112,172, 7,238, 35, 26, 7,198,177,228, 17,185,142, 44, 39,195, 50,171,245,215,225,208,113,158,150, 40, 95,162, 66,
-233,136,147,168,193, 14, 45,110,189, 52, 25, 76,102,104,208, 64,135, 30, 25, 14, 3,129, 12,210,225, 48,171,239,168,142,101, 30,
-207, 77,218,214,141,152,190,110,168, 95, 87, 75, 98, 91,231,128, 12,149,154, 17,234, 94,160, 85,132,239, 7, 16, 13,204,157, 8,
-160,240, 67, 75,202, 66,207, 36, 91,171, 72, 61,165,201, 83, 78, 3,232,124, 77,186,237, 51,169,148,223,146,239,124,235,187,210,
-186,122,165, 25,104,133,246, 20, 54, 8,159, 15, 94, 14,208,156,162, 44, 60, 69,197, 65, 12,132,136,111, 14, 2,195, 25, 0, 93,
-140, 17, 55,100,211,104,223,224,223, 36,253, 68, 96,167,255,129,179, 92,209,160, 54,137,235, 84,131,155, 78, 7, 68,132,163, 37,
-134,243,214,159,180,229,225,243, 51,178, 8,222,185,113,160, 65,222, 37,131,134, 87, 24,211, 2,166, 70,239, 63,156,213,104, 8,
- 91, 57,117, 99,123,168, 86,133, 70,120, 5,178, 50,220,123, 61, 43,245,122, 77,237, 93, 65, 42,197,220,107, 54, 75, 96,113,128,
- 62,135,189, 63,237,154, 90, 98, 20, 79,245,157,154,118,126,220,250,238,104,208,177,114,247, 6,146,211,161,218,159, 66, 54,253,
-154, 10, 25, 99, 96,184,255, 72,224,142,118,244, 78,171,237,237, 77, 99,121,247,222,166, 60,120,214,212,187, 63,212,179,150, 53,
-236,136, 62, 90, 77,157,248, 88,207, 43,192,144,168, 14,112, 28, 89, 3,191, 60, 84, 12,245,188, 66,181, 20, 99,175,237,206,216,
-116, 4,212,161, 99,218, 0,213,146, 27,187, 13,210,109, 55,213,255, 64, 80, 12,123,143, 86, 23, 41,147,245,188,253,244,227,151,
-210,189, 85,151, 55, 14,114,242,241,179, 41,219, 28, 61,205,188,197,141,116, 7, 78, 9, 21,129,202,214, 86,141,154, 31,144,141,
- 69, 27, 48, 95,180,177, 96,128,189,193, 59,210,213,187,151, 7, 17,219,221, 27,135, 26,205, 15, 24,129, 97,254, 21, 61, 68, 24,
-251, 67, 32,145,195, 88,142,219, 11,150,171, 51,129,149, 13,113, 41, 99,246,130, 18, 70, 74, 81,226, 27, 53, 40, 34,150,196,250,
-182,149, 84, 36,225,114,192,210, 23,118, 4,224, 37, 44, 54,162,164, 15,110, 55,216,147,251,155, 95, 93, 50, 42, 66,112,176, 94,
- 7,148,142, 67, 6,200,209, 30, 49,244, 6,217,199, 80, 43,242, 76,163, 43, 65, 73, 29,176, 78,202,116, 26,227, 25,169, 5,145,
-189, 80,193, 71,100, 52,152, 73, 17,114,143,186,200, 83,117,178,195,153,141, 54,208,176,160,191,232,216,187,246, 10,161,188,185,
- 1,226,145,153, 76, 52,155,236,130,163, 92, 23,230, 61, 93, 96,176,156, 33,131,110,228, 83,178, 89, 72, 49,136, 89, 70, 70,152,
-143, 0,132,252,223, 96,105, 2, 15,187, 58, 15,208, 90, 98,141, 98,112, 46,166, 83, 4,182,161,132, 27,215, 52,211,209, 83,145,
-192, 72, 2, 12,181, 76,228,173,163, 42, 47, 2,136, 94, 62,127,218,145,177, 30,160,183,110,150,168,117,222,210,104, 26,206, 25,
-181,165, 98, 33,100,148, 54, 91, 38,140,222, 46, 46, 58,210,106,250, 12,178, 96,212,176,206,157,137, 71, 20, 56,178, 27, 24, 84,
- 68,217, 48,248, 95, 61,111,105, 38,133,254,102,218,102,102, 29,210, 26, 11, 9, 52,103,226, 89,155,131,118,194,247,152, 89, 23,
- 82,108, 60, 57, 6,185, 68, 62,127,222,147,159,125,126, 37,247,238,132,210,168,106,230,239, 21, 37, 66,148, 8, 71,228, 57,161,
- 17,240,120, 35,122, 4,102, 97,162,142, 56,147,200, 94, 61,148,217, 72,164, 55, 48, 52,179,207,145,161,185,172,169, 54,166,239,
- 50, 25,201,189,253, 2, 69, 9,186, 87,115,249, 55,119, 14,100,169,241, 76, 6, 20,163,190, 5,142,164, 4, 14,140,165, 14, 78,
-161, 61, 90,202, 31,255,205, 75,185,108,173,212,176,164,109, 54,188,160,153,114,251, 84, 10,133,138,236,111,239,240, 2,158, 65,
-234, 20,239, 23, 45, 56,219,139, 94, 30,203,177,106, 88,103,212,237,182,236,152,253,103,223,115,228, 70, 49,209,247,111, 29, 29,
- 81,135,250,164,217, 36, 40,169, 55, 48,178, 22,207, 33, 92, 81,150, 46,233, 29,233,141,134,204,178, 80,218, 3, 2, 22, 89,220,
-242,154,133, 13,107,131,214,143,254, 29,100,237, 75,167, 64,232,185, 18,238,144, 10, 93,166,174,133, 71,129,163,131,225, 54, 0,
-154,241, 21,236, 52, 54, 13,221, 75,161,145, 53, 17,238, 8, 8,242, 46,243, 64,143, 24,226, 73,156, 72, 70,255,220,245,237, 86,
-235, 95,151,229,209,251,206, 81,185,109,193,222,181,209,252,218, 4, 7, 71, 28,157, 48, 18,201, 97,210, 41,162,215, 47, 58,109,
- 93,219,162, 1,109,124, 19,204, 64, 86, 26, 59,214, 8,107,219,216,157,196, 81, 66, 39,152,104,117, 56, 85, 40,125,105,150,125,
-184, 89, 32,109, 39,148,168,140,115, 34, 49,110, 1, 76, 3,100,224,176, 74, 78,138,192,231, 28,252, 2,202,102,186,174,205, 94,
-135,107,131,182, 23,170,127,144,108, 6,159, 2, 70,213, 80, 10, 6,112, 9,125,213,114,174,160,235,184, 43, 77,221, 31, 84,160,
-132,184,130,152,147, 52,187,155, 27,210,209,160, 22, 6,238,201,201, 43,217,223,218,147,223,248,218, 29,121,227,104, 91, 30,189,
-120, 37,131,246, 88,159, 33,207,145, 72,140,110, 33,209, 72,216,207,182, 32, 50, 6,224, 21,170,124, 24,229,237,247,201,201,126,
-173,202,135,251, 19,129, 10,153,164, 47,154, 8,104, 70,154,201,133, 12,204,160, 45, 81, 82,199,131,108,105, 21, 45, 41, 62,194,
-106, 35,202,214,156, 58, 64,219,109,197,214,215,117, 16,133, 4, 33, 76,165, 41,221,139,158,187,239, 20, 39,249,231,158,222,197,
- 98, 85,150,234,120,225,208,108, 76, 16,230,109, 73,130, 38, 56,124, 4, 44,224, 44, 88,130,115, 95,183,127,119,111, 95,190,122,
-248,149,148,234, 19,169,109, 30,106,230,254, 74,254,241,203, 39,172,188, 70,201,146, 96,178,241,100,193, 61,189,185, 93,147,183,
-111,239, 25,177, 20, 1,140, 49,237,184,171,223,177,154,132,179, 14, 59,131,243, 7, 39, 97,106,133, 49,149, 5,251,221, 83,253,
-117,142, 14,246,228,244, 5, 51,103, 50,213,129,189, 50, 66,155, 22, 25,186, 47, 71,135, 71,154,108,140, 73,247,219,234, 2,201,
- 93,148,231,167, 45, 93,155, 57, 27, 17,148,133, 37,196, 60,101, 60, 16, 0, 11,134,198,180,152, 99,235, 32,214, 32, 65,237,183,
- 58,125,240, 92, 32, 35,141, 92,235, 13,103,219, 15, 48, 83,222,231, 68, 21, 85, 40,157,118, 61, 89, 27,167, 83, 58,224, 2,100,
-105,179,137, 99,227,139,104, 75,139,249, 80,125,196,146,206, 18, 6, 29, 25,251,139,243, 33,121, 66, 62,121,116, 69, 45, 1, 56,
-126,180, 85,138,156, 8,137,248,142, 94,172,231,178, 84,150,244,114, 97,182,195, 33,243, 1,214, 52,225,166, 44,197, 96,128, 39,
- 74,171,237,126, 43,218,211, 51, 61,103, 18,134,254,249,146, 76,148, 9,207, 9,237, 74, 44,172, 18,192,150,127,245,162, 47,135,
- 91,186,215,201, 80,174,122, 19,115,226, 41, 67,229,179,253,172, 63, 95,210, 0, 7, 84,182, 59,141,162, 77,142,136,241,190,236,
-215,193,172, 89,227,153, 74, 81,128, 73,253, 0, 80,164,158, 84,204,248, 35,235, 72, 18,102,132,107, 61, 84, 5,253,161, 42, 22,
- 97,106, 81,126,226, 24,176, 56, 55,156, 10, 92, 41,201,132, 34,140, 28,132,133, 2,217,200, 89, 20,120,227, 96, 79,142,142, 76,
-214, 13,198,185, 30, 26,125, 36,102, 88, 11,106,152,158,156,246,116,227, 34, 57,215,168, 11,217, 39,122,223, 40, 71,166,105, 84,
- 28,176,197, 25,197,193,116, 41,139,206, 68,179,164, 33,137,240,223,122,111,159, 58,188,177, 99,220,193,232, 22, 46, 41,144,153,
- 88, 20,168,191, 97, 14, 59, 79,177,145,132,179,166, 0,138,148, 16, 0,232,165,123,214,157,107, 68, 87,146, 23,186,193,173,241,
-210,241,101,175, 4,114, 53,207,154, 43,178, 18, 65,128, 36, 68, 9,210,154,246,140,192, 17, 13, 78,231, 41,234, 79, 99,174,154,
-120, 0,117,230, 7,181,148, 76, 52, 11,239,183,230,102, 92,151,160,109, 93,179, 10,114,169,153,244,127,250,232, 92,254,203,223,
-188,161, 14,188,162,206,105, 68,170,217,166, 58,241, 3,221,204, 98, 78,157,128, 6, 35, 39,151, 99,246, 41,203, 0, 36,206,231,
-166,111, 15, 39,158, 88, 73,137, 14, 3,165,105, 72,210,166,140,139,120,177, 10, 88, 2,199,218, 33,171,131, 1,236, 79,150, 84,
- 20,170, 84, 66, 35, 73,192, 88, 89,224,177, 76,106,108,116, 98,127, 31, 78, 19, 2, 0,122, 9,215,154, 21, 37, 12,168,208, 59,
- 92,169, 99,158, 72, 38, 94,200,151,143, 79,229,135, 95,171, 75, 57, 20, 70,136, 57, 31,104,109,113, 20,167,190,123,198,136,107,
-181,128,248, 0, 10,236, 26, 77,246,122, 75, 50,188,193,184,151,213,208,174,151,115, 25,169,177, 4, 27,221, 91, 91, 5, 25, 28,
- 21,164, 59,194, 60,126,154, 25, 19,130, 37,148,236,112, 57, 18,160,174,225, 4,213,112, 23,169, 69, 46,114,176,173, 7,122, 11,
- 19, 10,137,124,250, 66, 29,252,217, 21, 63, 31,239,113,213,106, 74, 85, 13, 45,180, 3,218, 26,229, 54,187, 3,150, 16,145,253,
-158, 34, 67,119, 78, 55, 98,159, 52,116, 12,113,102,180,208,231,190,127,251,166,174,217, 92, 30,188, 60,182, 81, 76,204,157, 66,
-234, 52, 12, 45, 16, 10, 3, 35, 39, 65, 43,104,105,156,236, 8,128, 61,182, 55,150, 68,185,179, 90, 20, 89,255,223,227, 44,178,
-101, 3, 32,157, 1,106, 27,193,240, 58,138, 94, 35,207,241,231, 24,233,202,248, 86, 45,128,204, 41,100, 84, 81,246,132,160, 4,
-245,187, 87, 70,255,138,231,185,106,183,120,191, 80,110, 68, 64, 1, 38,171,144,168, 88,235,157,195, 35,224,243,241,204, 73,108,
- 18,170, 48, 36,137, 67,209, 91,201, 63, 36,223, 63, 91, 13,174, 39, 15,209, 25,150,131,215,145, 27,115,138, 29,138, 60, 38,152,
-212, 15,108, 28, 17,193, 62, 42, 23,179,133,141, 98,225, 30,160, 18, 2, 78,124,182,163,193, 38, 56,211,128, 69,173, 33,250,155,
-195,217,210,164, 75,215, 9, 65,115, 64,145, 19, 12,168, 1, 55, 0, 67,177, 35,124,241,125, 43, 73,207, 64,133,233,111, 19, 32,
- 24,247,108,196, 51,199,113,186,136,255,189, 90, 91,150, 19, 19, 20, 8,135, 59,101,128,138,172,231,198,222,134, 58,250, 1,223,
-171, 86,200,202, 13,205,104,206, 59,231,250,103,161,163,136,245,101,164, 1, 68, 9,179,198,168, 54, 68, 1,141, 42, 42, 3, 1,
- 2, 14, 13, 81, 22,137,101, 69,172, 67,173, 1,180, 21,158,227, 4,149,157,233, 66, 29, 84,135, 36, 58, 1, 41,113,211,220,147,
- 57, 42, 5,250,247,135,227, 17,171, 82,208, 3,247,215, 54,111,204, 16,111, 1,213,176,200, 70,174, 76,181,196,141, 49,218,188,
- 56, 24, 20, 67,226,145, 2, 71, 12, 99,218,237,105, 13,140,192,166, 7,158,120, 86,147, 32,237,187,156, 16,148,137,132,226,244,
-244, 84, 14,118,247,100,182,246, 53,115,110,144,251, 31, 1,223,133, 6,164,251, 59,123, 26,136,191, 33,159,126,245, 72,239,190,
- 81,190,130, 27,126,234, 56, 64,230,106,215, 95, 34,131,118,201,146,149,134,125, 71,220, 2, 75,130,185,240, 53,131, 27, 99,180,
- 20,171, 8,173,156,226,156,254,222,222,246,129,148, 74, 27, 12,254, 67, 74,177, 8, 91,181,144,252,141,242, 8, 90, 13, 84,135,
-182, 10,193,156,160, 0, 86,103,255,193,155,251,242,217,195, 99, 13,240, 49,205, 48, 99, 51, 46,134,131, 12,204, 38,193,193, 21,
- 53,192,172,213,138,178, 85, 41, 50,184,192, 57, 67,101, 20, 84,203,160, 89, 69, 48,120,184,147,215,123, 62,226, 30,160, 10,200,
-187, 28, 89, 85,119,187, 94, 38,142,134, 98, 94, 0,116,147, 58,117,201, 96,134,242,226,160,120, 5,173,119,156, 80,112,170,152,
-139,233,136, 1,190, 28, 14, 81,141,203,147,234, 22, 32, 78, 4,219, 24,223, 99,112, 83, 44,137,227,213,230,247, 38,154,172,161,
- 20,190, 90,175,220,180, 86, 66, 44, 9,248,228,191,253,238, 46, 81,237,224,180,199,125,193, 25,102, 21, 6,213, 2,142, 91,174,
-141,147, 3,165,127,245, 61,155,234, 59, 46,213,119, 64,251,224,170, 51,226,185, 64,144,129,106, 44,170,138,176,113, 24, 79,196,
-217, 97, 82,134,113,102, 4, 9, 43,151,153,179, 74,180,226,116, 14, 1,146,136,154, 57,123, 10,125,231,185,193,251, 43, 25,205,
-222, 52, 75, 15,245, 7, 39,122,232,158,117,134,140, 0, 16, 89, 32, 74, 73,133, 54, 92, 79,109,115, 23, 37,161, 23, 2,186,216,
-145, 94,252, 90,182, 33,111, 31, 52,104, 24,113,100,214,113,226,120,172, 45, 90, 69, 9,227,206, 97, 93,238,222,216,144,185,222,
-138,231,231,125,150,233, 81,182, 24,168, 67,122,248,188,229, 52,119, 81, 55, 54, 13,113, 8, 61, 64, 96,165,221,234,203, 71,143,
-123,114,251,205, 77,117, 36,233,215,217,123,164,155, 2,186,197,161, 94,172,173, 98, 74, 54, 74,105, 65, 37,124,174, 78, 15,186,
-179,200, 90, 53,254,100,176, 65, 89, 72, 53,226,232,151, 95,244,209,159, 76,216, 51,132,228, 37,162,108,140,219, 37,122,136,247,
- 54, 10,114, 84,203, 26,131,208,210,104, 86,145, 21,119,245, 61, 63,253,244, 82,246, 53, 51,185,208,117,217,170, 22, 56, 64, 15,
-132, 34,178, 72, 0, 4,161, 19,156, 97,245, 66,164,130, 77, 4,237,106, 12, 21, 41,203,252, 0,168,192, 18,190,123,167,194, 64,
-166, 61,176, 49,167,139,230, 72, 78, 34, 27,203, 32,208, 37, 48,176, 80,226,250,225,158,111,104, 83,184, 27,240,219,131,218,148,
-170,116,112,218,107,176,229, 45,229,187,119,203,242,155,111, 87, 40,253, 26,163,116, 12,231,125,205,196,134,125, 88,187,222, 42,
- 62, 11, 37,195,217,154,151, 28,120, 8,240,244, 67,164,224,125,125,254, 15, 31,117,229, 92,179,233, 88,159,119, 18,131,131, 96,
-142, 70,133,140, 22,110,102, 21,223,167,255, 61,152,173,168,236,134, 10,207,237,173, 18,199, 6,163,154, 25,112, 4, 60,169,112,
-196,113,191, 92, 54, 33,197, 35, 64, 84,155,171,172, 60, 63,155, 50, 48, 65,145,224,225,213, 72, 30, 95,140,228,159,127,112, 72,
-240,224, 74,247, 31,250,196, 85, 13, 56,110,215, 50, 82, 87, 99,221,153,205,228,203,179,151,178,208,231,134,250,217,210, 73,152,
-206,214, 70,143,137,106, 3, 40, 20, 81,250, 6,112,113, 60, 51,240,215,122,109,253,225,146,254, 62, 22,143,200, 85,189, 96,135,
- 91, 27, 68,177,195, 49,161,164,206,114,165, 26, 91,160,205, 1, 76, 66,255, 15, 78, 50,159,113,179,177,160,100,165,147, 51,114,
- 38, 48, 67,197,145,149, 3,141,241,202,103,208, 68,192,102, 16, 58,153,198,149,181, 63, 60, 42,199,211,168,176,141, 21, 27,147,
- 27,254,141,242, 57, 8, 95, 64, 54, 2, 89, 87, 18,151,128,230,215,210, 99, 67, 74,235,249,203,103,243, 44,107, 47,255, 9, 96,
-206,181,105,237, 76,160,191,158, 49,148,121,158,136,121,155, 53,103,102, 77,144,225,202,145,219,136,203,188,133,107,130, 74, 29,
-241, 22, 43, 19, 43, 2,189, 50, 42, 16,232,229, 91, 0, 83,224,103, 98, 29, 25, 56, 6, 41, 35,203, 0,147,160,103,189,103, 96,
-246,224,204,171, 69,148,106,243,186, 39, 99,146, 57, 97,125, 80, 1,193,158, 66,189, 10,115,235, 25,170,185,133, 92,167,129, 58,
- 42,148,142,192, 39,143,158,232,108, 97, 36, 57,112, 30, 84,123,195,172,181,126,207,100, 2, 16,105, 72, 76,138,199,217,248,188,
-126, 22,102,164,179, 54, 97, 80,202,209,129,143,244,185, 55,170, 69, 6,103,159, 63,121, 73,142,252,251,247, 14,212,112,135, 36,
- 68, 90,172, 60, 58,106,148,213, 57, 11, 29, 67,100,102,205,115, 9,212,249,108,101,237, 51,156,167, 49,128,146, 40, 25, 79, 52,
- 84,117,148,166,126,169,170,159,189,210,179,111,224,167, 44,180,182,213,137,225,110, 35,147,102, 53, 83,215, 99, 60, 2, 0,119,
-170, 65, 3,104, 72,253,215,116,194,158,155, 58,120, 45, 14,100, 53, 23, 87,121,177, 74, 8,206, 32,144,240,139, 9,181,244,216,
- 22, 88,195,117, 70,115, 58,135, 65,191, 71, 36,252, 70, 13, 14, 44,171,217,243,149,209, 94,119,186, 44,223,223,218,187, 41,111,
-106,160,122,222,236,208,145,160,101,133,115, 0, 39,143,253, 0, 19, 33, 90, 53, 8, 68, 72,153,235, 27,209, 18, 91,198,161,157,
-109, 27,253,142, 88,117, 28,143,134,124,126, 56, 23,159, 92, 19,186,254,229,154,212,107, 31,176,229, 1, 48,103, 64, 6, 79,103,
-227,245, 44, 64, 57,240,104,119,155,153, 46,200, 92,114,104,181,122,168, 30,134,250,221, 35, 86, 39,112, 55, 96,138, 86,228, 50,
- 48,146, 45,188,251,112, 22, 75,107,208,226,125, 64,197, 6,107, 11, 31,128,160, 23, 65, 78,179,219, 53,125, 3,117, 96, 83,170,
-253,101, 94,227, 68, 16, 60,100,210, 70,128,132, 51,219, 25, 76,217,206,218, 84,103, 79,178, 47,216,214, 56, 32, 14,104,237, 48,
- 1,104, 97,224, 92,227,187,200,213, 64,158,128, 21, 71, 32,241,231,219,154, 29, 3,179,131,150, 16,137,155, 32,156,131,128, 21,
- 24, 1, 40,248,105,246,222,238,245,164,174,231, 14, 65,217,171,203,129,241,232,175,108,138, 44,142, 12, 25,143, 96, 28,109, 0,
-187, 47, 86, 3, 75, 97,108,155, 21,110, 79,114,106,107, 14,119, 54,244,227, 91, 4,135,226,120, 34,145,242,202, 37,153,140, 80,
- 17, 44,112, 44,148, 60, 12,160, 36, 38, 7,131,188,246,177,216, 72,180,211,195,103,207,206,229,230,173, 93, 26, 11,148,237,138,
- 26,181,108,100, 35, 70,156,121, 93,156,134, 30,250, 77,141,102, 62,125,116, 73,133,178, 76, 96,241, 28, 50, 48,244, 62, 34, 55,
- 83, 91, 84,131, 67,231,163,159,253, 55,159, 94,232,229,138,228,253,219, 13, 87,150, 52,169,199,235, 17,159, 84, 24,184,126, 7,
- 74, 45,177,188,115,163,202,108,255, 85,115, 32, 39,205,177, 0,168, 58, 26, 45, 76,109, 9, 99,109,122,137, 59,122,169, 81, 90,
-239,106,148, 95, 84,135,179,238, 14,101,182, 76,203,104,184,144, 13,125, 19,136,210, 80,122, 16,209,177,102,191,121,221, 60,148,
-216, 66,140, 97, 76,150, 36, 37, 0, 0,134,209,190,158,145, 95, 60,106,115,206, 30,224, 42, 68, 85,119,118, 75,154, 65,150,165,
- 94,202,208,105,129, 45, 11,128, 62, 40,100, 69, 81,207, 46,165,216,252,242,123, 7, 5, 57,172, 4,242,236,233,153,116,226, 80,
-190,190,173,139, 13,164,157,151,161,243,101,230,204,190,163, 69,132,130,241, 30, 53,106, 24,153,248,249,151, 80,237, 25,105,102,
- 49,230,225,255, 88,127, 61,154, 26,189, 45, 42, 11,181, 74,158,242,142,160,196,220, 44,101,137,168,223,221, 46,201,195,167, 29,
-249,159,254,228, 51, 94, 6,182,229, 18,187, 64,149,180, 73, 25,194, 17, 39, 78, 63, 29, 96, 59,144, 28,160,108,131,178,127,188,
- 52, 3,198, 32,201,183,192,204,179,241, 1,161,183, 79, 99,254, 59, 81,195,185, 54,230, 46, 16, 74, 0,252, 66,227,183,150,191,
-251,226,156, 64,197,110,111, 66,212,233, 42,178, 54, 11, 21,242,244,179,182, 43, 41,249,205,187, 53, 57,208,103,205,229,245,247,
-212,121,215, 3, 35, 68, 33,127,129, 23,154, 48, 59, 64, 70,224,157, 7, 51,144, 26,207,230,149,174,107,197, 42, 8, 0,215, 64,
- 62,118,229,192,146, 24, 49,153,106,166,132,249,121,148,250, 30,159,159, 74, 91,159, 47,201, 84,212,120, 78,104,252, 81,178,203,
-133, 86,174,243,215,160,188, 44,234, 5,108,200,177,102, 46,192, 81,144,209,141,122,228,158,126, 78,149, 17, 63,163,238, 12,232,
-140, 55,245,140,170,113,211,136, 31,125, 42,155,107, 13,153,117,176,247,237,136,125, 48,195,140,247,160,254,120,108,227,139,200,
- 26,135,116,232,145,107, 99,120,172, 0, 92, 27, 22, 2,222, 32, 0,195, 94,100, 64,132,240,100, 62,163, 17,186,158,245,230,119,
-173,141,151, 30, 61,109,244, 80,225, 68, 22,139,197,235, 12,253, 58,131,134, 3, 69, 9, 30, 70,149,200, 88,150,111, 67,167,196,
- 38, 36, 19, 73,156,248, 12, 28,175,184, 50,252,106,109, 65,202,250,218,131, 59,238,118,246,206, 99,227,180,199, 26, 53, 81,110,
- 6,184, 43,147,162, 81, 50,164,255, 53,193,142,129,195,174,217,236,112,135, 64,249,153,139, 82,166, 36, 21, 67,124,208,132,108,
- 72,187, 12,177, 20,125, 4,156,253, 41, 18,133,196, 90, 66,195,200,128, 89, 32,168, 42,229,209,159,196, 25,202, 74,175,103, 40,
-123,180, 10,200,205, 14, 49, 38,205,214, 49,191, 12, 20,181, 5, 46,107,142,219, 22, 75, 69,169,151,245,126,106,160, 56, 70,169,
- 62,103, 10,104,232,167,162, 7,140, 76, 7,142, 13,198, 20, 72,108,217, 4, 39,121, 79,174, 52,243,106,108,237,115,156,178,167,
-191, 70,240,142, 25,112,136,170, 92,131,227,192,149, 63, 27,155,246, 0, 42, 40,112, 36, 41,188,147, 79,201, 57,102, 69, 16, 16,
-210,215, 34, 55, 6,170, 95, 97,206,227,116, 13, 70,225, 24, 52, 1,192,137, 51,227,216,160, 97, 79, 67,252, 58,254,245,250,227,
-172,176,236,140, 96, 43,176, 41, 32, 10, 28,133,215, 10,127, 38,237, 11, 12, 5,106,112, 64,191, 3, 88,136,210,106, 49,159,229,
-148, 0,158, 24,198,190, 68,140, 69,219,170,121,186,184,120,190,103,207,159,200,155,183, 14,229,131,247, 62,144,226,211, 7,180,
- 49, 43,167,251, 80,133,216, 11,170, 55, 18,144,247,160,168,182, 15,225, 61,222,133, 85,183,192,120, 15,144,217, 35,176, 42, 21,
-210, 4,118, 33, 57,195,249, 0,219, 38, 90, 85, 32, 90, 97, 27,112,237,203,171,171,161,156,159, 62,116, 12,242, 30,251,239, 49,
-177, 43, 33,239,109,185, 90,102,182,143,190,244, 69,111, 46, 71, 55,111,200,169, 6, 27, 9, 94,216,179, 41, 26, 60, 68, 99,163,
-206,170,203, 97,189,192,207,128, 12,247,213,220,232, 91, 88,233,208, 37,171,171, 77,204, 23, 43,114,213,237,179,106, 68, 27,132,
- 89,251, 48,164,252, 53, 90, 63,192, 59, 0, 20,187,165,159,135,159,219,213,123, 94,202, 5,188,111,168, 68,111, 84, 51,114,229,
-129, 28, 9,114,182, 25,167,190,103,129,113,187, 55,149,138,218,220, 40,241,152,120,164, 83, 83,181,171, 89,142,151, 53, 52,232,
- 30, 44, 83,100,187,131,200, 14, 40,177,161,248, 25, 79,117,223,245,179,219,221, 46,207,110, 53,103,163,212, 69,253,236, 17,250,
-223,176, 99, 4,240,121,108,183,160,221, 92, 76,219,184, 54,198,246,200,226, 56,153,202,102,163,196, 30, 59,110,244,193, 78, 67,
-147,169,142,244,251,166,130,151,202,172,120,102,215,235, 42,103,231, 81,120,196, 94,165,201,235, 98, 20,207, 72, 84, 2,177,113,
-202,240,219,183, 50,242, 98, 52,224, 1,199,124,226, 54, 80,133,106,218,112, 56, 89, 46,212,127,191,127,160,153,207,122, 91,254,
- 28, 52,156,177,113,168,147, 75, 93, 55,171,168, 78,240,238,225,182,209,165, 58,131,134,236,232,162,191,146,114,123, 33,239, 28,
-148,169,196,196, 75,159, 9, 89, 38, 38,112, 5, 78, 6,217,177,110, 78,196,104, 62, 37,227,110, 79,254,236,103,167, 52, 66, 41,
-207,162,219, 0, 7, 82, 15, 26,184,195,145, 93,223,222,169,200,126, 35,146,230,197, 64,166,197,156,188,106,143,229,121,210,227,
-188, 43,110,232, 69,103, 42, 39,154,249, 35, 3, 71,111, 28,165,104,160,202,209,247, 54,218, 77,115,246, 95,191,189, 41,239,236,
-230,100,184, 76,228, 69,123, 42,111,239, 20,229,168,154,230,216,222,217, 88, 15, 84, 47, 16, 13, 43,248, 25,185,140,144, 96, 39,
- 38,232,205,151,155, 85,148,248,242,114,118, 57,148, 66,108, 78, 18,250,233,204,131,116,129,241, 44,109,136,140,164, 50, 44,151,
-195,193,231,243, 41,121,120, 57,150,229,241, 90, 46,218, 19,182, 47,192, 25,253,252,124,206,114,251,127,253,111,222,145,239,188,
-179, 73, 14,117, 24, 71, 0,123,172, 36, 38,204,194, 43,234,180,255,207, 31, 61,144, 46,102,116,211, 57,130,179,212,210,240,194,
- 38,174,159, 68, 68, 62, 74,153, 24,197, 27, 44, 36,201,249, 92, 63,168, 81, 37,112, 18,240,254,145,165,106,200,200, 25,224,144,
-130, 72,141,139,102,235,195,169,101, 31,195, 69, 36,207, 53,226,237,234,154, 53,234, 57,217,221, 44,106,208, 83,148,225, 96, 36,
- 25,223, 42,137, 20,233, 64,207, 28,180,154,250,204,141,172,207,131, 30,106, 36, 30, 99,174,146,242,161,115,151,197, 90,216,201,
-226, 38,184, 9,244,144,159,158,119,229, 92,247,176,179,157, 99,139, 34,163,217,220, 61,221, 3, 0,105,154,250,189, 64,144,222,
-110,228, 36, 10,115,242, 31,126,246, 64, 62,124,252, 84,254,224,183,191, 39,125,125,206,157, 58,156,224,136,109,130,203, 78,159,
-104, 80, 24, 30,176, 27, 94,232,229, 90, 57, 18, 7,180, 75, 88,246, 86, 35, 83,211,104,183,144, 91,169,227, 92,200, 86,173, 46,
- 39,173, 22, 1, 46, 91,181, 10,179, 22, 82,154,138, 33,207, 77, 15, 60,122,221,183,158, 46, 44, 3, 3,154, 23,159,139, 57,244,
-107, 89,223,120, 29,189, 6, 33,226,223, 43,114, 3, 24,253, 42,223, 25,253,193,196,230,219,209, 6, 8, 72,247, 27, 17, 13,206,
-177, 27,100, 30,234,104, 18,202,102, 70, 12, 58,178,169, 52,141, 62,126, 29,234,157, 65,191,140,207,137, 25,217,165,205, 41,249,
-158,205,235,218,232,154,105,134, 35, 51,225, 12, 61,152,228,156,140,104,114, 77,202,148, 68,110,124,200,119, 10, 86, 22,196, 32,
- 67, 1, 11,220,118,221, 38, 38,108, 92,212,103, 70,180,114,216,129, 48,180,242, 48,148, 11,151, 36,159, 49,214, 64,156, 75, 19,
-112,177, 22,220, 64, 3,249, 90,209, 99,112,194,121, 89, 63,224,108, 49,230,109,171,144, 38, 69,119, 19,217,127, 38, 54, 14,109,
-226,114,210,226, 4,222,173, 79,184, 54,178,145,156,102,127, 83, 61,199, 25,178,163, 4,156, 2, 0,141,241,209,126,133, 88, 28,
-148, 27,163, 56,195,241, 38,140, 79,166,244, 30,238,109, 86,104, 12,163,148,137, 43,161,253,130, 32,241, 4, 76,130,165, 88,142,
-246,170,250, 28,161,126,206, 4,108, 19,252, 30, 47, 54,182, 51, 26,114,117,114,148, 5,142,141,205, 18, 37, 95,216, 44, 6,235,
- 80,154,116,180,191,104,187, 76,198,115,142,184,142,168,218,146, 16,232, 57, 30,142,157,242,156, 37, 50, 21,181,141, 43,104, 30,
- 68,222,107, 78,127, 82,228, 46, 76,124, 7, 14, 8,235,189, 32,162,126, 65,204, 7,241, 58,145,129,107, 81,153, 25, 99,190, 28,
-163,137,190,169,172, 1,219,179,138,197,137,248,172,100,216,107, 74,181,182, 69, 6, 57, 56,155, 87,103, 77,249,234,209, 99,121,
-235,141,187,242,171, 47, 30,202,175, 30, 60,118, 19, 35, 78, 66,217, 51, 18, 28, 4, 61,158, 87, 52,230, 60,119, 38, 35, 10, 67,
- 90, 43,204,115,186, 16, 70, 95, 44,220, 55, 11,124, 83,154, 36, 68, 12, 44, 75,165,146,236,239,223, 98, 5,192,115,194, 71,171,
-165,205,144,227, 92, 98,220,113,119,179,206,214,219,116, 58,148, 77,189,131,115, 93,179,219, 55, 15,200,136, 71, 22, 59,140,195,
- 65,131, 30,119, 78,247,225, 37,112, 69, 8, 12,208,114,228,247,175, 88, 93,193, 36, 7,138, 40, 0,159, 34,176, 68,155, 11, 76,
-143,176,125, 8,232,208,202, 1, 47, 3,238, 57,219, 36,108,215,235,239, 99, 98,196,143, 88,177, 80,179,230, 42, 69, 41, 10,126,
-129,228,229, 12,228, 78, 32, 71, 11, 13, 97,158, 87,103,252,224,229, 21, 3, 89,140, 24, 99,252, 44,209,247,185,117,176, 43,131,
-110,194, 42,167, 85, 91,124, 91, 27,223,118,118, 65,145,163,149,236, 53,202, 82, 41,231,101, 49,141, 89, 9,129,195,196,179,226,
-158,173, 92, 48,159,224, 76,233, 33, 41,107,208,212,166, 2, 97, 76,170, 36, 48,111,238,214, 51,154,184,174,228,254,221,125,253,
-123, 23,242,226, 85,155,123,196,115, 97, 69,130,215,147, 93, 25,205,126,231, 56, 15, 43,211, 26, 1,109,110,136, 73,171,111,220,
-217, 22,239,114, 73, 93,219, 18,184,117,211, 66,121, 85,139,220, 2,114,110, 83,165, 77, 95, 46,149, 24,149, 37,168, 46,175, 57,
-130, 1,112, 2,173, 30,184,204, 81, 18,129,225, 3,172, 31,209, 67,111,172, 81, 57,198, 67,145,167,235, 70, 4,145,193,244, 67,
-117, 98, 21,141,178,193, 93, 62, 83, 99,142,254, 27,178,241,186,102,106,136,132,113,106,115, 40,127,114, 4,199, 55, 89,204,133,
- 47,191,122,102, 47,216, 81, 39,253,236,106,234,120,186, 87,100, 2,218,174,230,100,167,150, 51,222,118,253, 51,108, 16,122, 35,
- 27,165,130,220,122,127, 91,254,246,243,166,252,229,151,109,253, 92,161, 58,218,118, 37, 39, 55, 55, 52, 3,190, 28,145,196, 0,
-243,142,159, 55, 1,250,153,201,101,127, 70,212,100,115,234,201,103,207, 71,242,254,126, 94,126,241,114,202, 82, 58,140, 47, 8,
- 20, 48,211,216,138, 80,170, 14,229,103,175,134,166,112,135, 50,123, 16,208,240,145, 14, 20, 82,153,106, 40,160,100, 87,175, 21,
-229,205,205,156,220,218,205,202,255,254, 23, 51,121,121, 53,165, 54, 53, 56,200, 49,222,135,131, 11, 7,186,192, 65, 7,240, 76,
-220,236, 22,130, 31, 93,143,173, 74, 65,126,235,253, 67,249,191,126,252,144,146,177,216, 7,160,206,217,159,129, 83, 73,252,215,
-217,192,105,111, 41,127,254, 96, 70,192, 29,122,225,133,236, 76, 13,140,111,160, 29,253,200,114, 10,147, 25, 78,253, 13,152,138,
-148,141,107,224, 80,128, 36, 33,196,236,180, 26,232,163,221,178, 6, 61, 34, 71,219,101,205,136, 99,233,165, 9, 86, 32,208,144,
-213, 23,189,112, 25, 10,138,232, 62,104,100, 11, 20,126, 5, 85,148,120, 38,171, 33,196, 70, 82,220,191,238,213,149, 94, 46,141,
- 56, 53,210,126,245,114, 65,158,247,166, 30, 92,240, 34,119, 70, 21,153, 1, 97,155, 89,202,225,110,157,231, 12,241, 70, 67, 35,
-230, 79,159,190,146,255,227, 39, 95,201, 89,179,203, 11,126,218,236,147,156, 39,165,103,198, 67,143, 91, 47,209,112, 52, 38,106,
- 29, 0,163,227,243,115,147,173, 5,221,175, 99,209,131, 81,192, 89, 64, 36, 11, 50, 25, 80,189,126,249,252, 37,199,182, 0, 0,
- 76,115, 46,124,205,159, 67, 32, 2,222, 5, 2, 43, 93,153,252, 26,228,150, 39,240,108,206,242, 28, 5, 88,120, 71, 2, 61, 95,
-101,150, 51,177, 87,232,215,178,151,141, 80, 26, 21, 18,156,219,200, 62, 3,103, 2,206, 26,119, 4,119, 29, 66, 43, 54, 6, 55,
-225,153, 90,187, 64, 34, 69, 1, 24,235,221, 81,177, 10, 4, 42,227,133, 83,111, 91,154, 84, 46,176, 35, 65,240,107, 1, 18,142,
- 37,197, 12, 16, 80,190,135, 83, 69,166, 9,106,219, 90,177,104,179,224, 80, 19, 3,224, 71,140,108,167,166,207,141, 7,155, 18,
-144,183,226,136, 24,122,167,232, 89, 26, 82,222,112, 52, 40,203,194,192, 17, 1, 31,173,152,117, 21,179, 33,239, 63,202,223, 11,
- 87, 66,237, 3,147,161, 63,251,213,120,102,189,114, 24,245,162,102, 59,145,209, 25,175,146,136, 32,172, 21, 20,181,214,118,230,
- 73,179,155,182,108,209,119,202,132, 0, 50,173,245,115,231,228,225, 79,140,212, 7,229,127,117,240,101,205,184,218,253,185,227,
-112,247,184,206,227,233,146,136,121,200, 51, 99, 47,129,215, 65,195,220, 64,157, 30, 91, 37,168,146, 33, 16, 27,133, 69, 41, 85,
-106,210,210,228, 96, 14, 16, 83, 58,199, 36,197,198,247,212, 17,165, 86,122, 78,243, 20,226, 32,240, 75,207, 26,218, 95, 49,171,
- 51,192,253,232,103,162, 69, 39,226, 64,111,190, 37, 56,105,219,243,241,114,206, 86, 1,214, 31,116,217, 24,109, 77,163, 29,129,
-192,123,101, 44,151,104,101,195, 54, 96, 18, 3, 12,132, 12,202, 29, 70,131, 66, 70, 4,101,166,249,103,216,219, 12,122,171, 24,
-249,212,189, 57,189,234,202,104, 48,225, 30,226, 28,110,248, 85,169,213, 26,236,229, 66,130,212,143, 23,172, 92, 60,215,108, 29,
-192,202,163,195,155,242,242,244, 21,233, 83, 33, 82,130, 51, 66, 54, 73,189,239,208,122,120,226,206, 30, 81,228,200, 71, 60, 83,
- 63,148,196, 80,226, 8, 4, 0,124, 67,124, 10, 59,134,246, 34,206, 56,117, 37,192,158,153,201,115, 34,101,187,222,208,204,184,
-170,239,150,166,132,114, 46,103,227,163, 24, 89,198,120, 52,132,149,230,139, 9, 63,179,219,214, 96,253,198,129,188,127,255, 29,
-249,223,254,159, 63,166,188,108, 5, 66, 69,122,166, 80,161, 33,157, 46,108, 60,193,101, 66, 31,194,241,231,245,148,147, 21,224,
- 84,184, 38,105, 9, 2, 27,247, 34, 48, 89,207, 51,206, 1,167,113,116,239,207, 59, 77, 42,225,197,250,247, 52, 51,208,115, 51,
-163,143,139,163,129, 84,138, 41,151,213, 38,178,189, 89, 96, 59, 21,127,142,115, 14,105, 97,140,188,129,131,226,159,125,227, 77,
-249,252,233, 41, 71,222, 30,159, 52, 53,224,171, 48,112,201,208, 73, 25,206,106, 50,157,189,190,175,184,159,231,154,100,246,198,
-107,217, 85, 95,116,176,183,197,170, 5,146, 6,115,198,198,124, 23,145,241, 49, 77, 81,151, 90,165,200,128,224,178, 59,150,247,
-239,212, 56, 78,187,187,219,144,151,154,152,238,168,127,218, 80, 59, 56, 80, 67,127,124,182,230, 30, 33,249, 64,133,210,227,184,
-169,207,179, 52,157,172,141, 44, 9, 65, 39, 90,104,187,239, 28,201,243,241,169, 46,208,146,145, 69,115, 6, 9, 59, 95, 74, 97,
- 36, 85,100, 95,232,103,205,151, 4, 14,196,142, 28,198, 75,124, 87,102,212,200,169, 59,209,172,105,198,168, 60,185,102, 44,195,
- 12,164, 94,150,131, 70, 94,254,253,183,203,106,160, 81, 40, 72, 89, 89, 16,148,126,208, 19, 14, 18, 42,164,129,122, 20,253,129,
-201, 42, 98,148,152, 71, 25,121,237,187,160, 1, 57,254,154,189,241,233, 52,145,159, 61,235,171, 83, 44,203,238, 78, 77,238, 30,
-110,144, 35,247,227,103, 29,249,111,255,240,109,217,212,141,242,170, 41, 89,192,249, 58, 42,205,172, 26, 1, 31,253, 94, 61,144,
-191,122,218, 97,153,176, 24, 90,239,231,231,207, 7,228, 22, 7, 55, 49,230, 17,177,169,136,202,193,213,113,166,209, 34,144,231,
-208, 93,111,163,228, 63,240, 89,198, 98, 4,238,155, 6,248,151, 23,112,154, 41,102,185,216, 36, 48,213,101,160,110,149,179,160,
- 38, 15, 41, 79,176,107,165,205, 65,252,226,193, 21, 75,238,232,223,125,117, 60,164, 30,122,118, 98,165, 71,204, 96,254,244,139,
- 43,249,141,119, 54, 52,154, 77, 91,153,220,101,137, 72,234,230,154,141,204,213,240,254,240,107,135,242,227, 79, 79, 57,183, 15,
-227,129,192,235, 26,152, 5, 7, 68,154, 69, 53, 70,179, 32, 43,207, 58,214,147,197, 97, 58,191,184,146,251,187, 25,217,216,220,
-150,147,238,138,229,121, 36, 64, 37,125,214,127,246, 1, 56,172, 53,216,194, 92,165,183,178, 64, 77, 23,188,176,145,147,227,129,
- 6, 47,167, 99,102,188,185,192,104, 59, 65, 61,139, 50, 54, 48, 14,148, 76, 68, 38,166, 79,112, 12,212,188,222,254,195, 78, 73,
-110,236,131,218, 50,146, 22,212,249,244,185,193, 46,184,183,149,211,139, 71,244,163, 68, 96,244, 74,217, 72, 18,160, 91,199,221,
-153, 58,234, 44, 25,167,142, 91, 99,206,128,158,235,159,253,223, 63,254, 92,131,167,149,188,121,116,160, 78,176, 68, 7, 48, 79,
-202, 26,225,230,101,208,239,200,243,211, 33,199,204,144,113,183, 53, 99, 97,121,152,188,221,145,101,155,212, 44, 95,203,102,165,
- 42, 91,141, 6, 13,157,215,237,168, 51, 47, 17,112, 6,100,238, 84, 13, 49, 68,101, 6,154, 17,193,193,153, 74,155, 56, 48, 10,
- 64,115, 86,222, 67, 89, 20,151, 47, 74,140, 77, 14,180,162,104, 57,161,127, 15,227, 11,112, 27, 28, 71,206,113,139, 79, 41,211,
-104,178,191, 75,167, 68,133,123, 1,178, 30, 56,116,252,204,112, 58, 49,196,124,108,189,119,106, 29, 92,207,174,187,241,155,208,
- 55, 77,110, 0,102, 76,186,213, 12,136, 41,217, 25, 95,130, 24, 53, 62,207, 12,202,244, 4,233,233,231,111,234,247, 80,126,114,
- 97,202, 97,212,156,158, 79,121, 78, 16, 76,192, 1,238,171, 49,254,222, 27,106, 3,174,154,242,224,228,202,196, 40, 2,143,189,
-242,208, 55,206,137,213,210, 20,228,214, 68,243,123,164,119,134,161, 5,128, 13,253,222,217,108, 65,135,239,179,140,190,210,253,
-201, 88,223, 15, 85,133,196,231,184, 29,149, 8,171,150,149,195, 33, 33,120,237,245,250,106,228, 70,226, 72, 41,232, 4,166,203,
-132, 66, 62, 1, 74,163,177,174,171, 58,164,128, 99,135,234, 52,103,106,176,210, 30,197,122,240,189, 5, 13, 82,144, 65,130,107,
-158,204,137,234, 68, 15,183, 27,108,171,224, 86,160,189, 7,231,115,124,118,165, 6,190, 74,195, 89, 92,105,160,163,246,224, 92,
-191, 27,194, 60, 20,140, 66, 43, 49,155, 98,249, 22,227, 98,227,225, 72, 50,234,140, 60, 76, 98,128, 17, 30,153,163, 62,203,124,
-222,103,123,102,238,217,249, 0, 98,136,193, 55,199,213,144,121,251,166,203, 64,156,129, 16,240,228,167,203,178,242,134, 98,243,
- 2,194,125,192,222, 32,112,102, 27, 38,116,109, 27,176, 8,102, 50,238, 12,196,220,111, 60, 75, 33, 87,226, 92, 55,208,223,224,
-115,192,189, 65,233, 26,251,222,211,223,107,247,186,178,183,179, 79, 22, 79,128,130,129,239,129,245,120,250,236,137,108, 54, 54,
-228,251, 31,220,151,209,176, 75, 9, 83,102,232,249,148,171,234, 36, 2, 54, 81, 32,211, 65, 10,116,221, 78, 11, 83,198, 85,193,
-170, 27, 2,208,172, 1,109,171,197, 28,167,151,150,145, 77, 82,160, 36,142,201,147,122,163,166,182,167,194, 94,245,108,218, 33,
- 56, 56, 59, 75,113, 42,103,190, 90, 48,112,237, 15,103, 4,163,213, 53,160,106,118, 58,108, 19,188,121, 36,164, 83, 21,194,122,
-244,103,212,239, 64, 64, 12,237,162, 70, 57,203,145,185,157,106, 40,239,223,220,151,203,161, 6, 73,139,152, 65, 39,236, 96, 49,
-107, 56,167,229,218,248, 29,192,139, 64,143, 1, 93, 8,112, 53,128, 1, 82,127, 31,193,126, 52,235,114,210, 0, 9,217,209,118,
- 81,142, 47,187,114,222, 50, 90,112,208,197,162,231, 95,209,100,242, 18,206, 88,207, 81, 38,181,100, 16, 8,103,249,242,188, 67,
-159,196,233, 15, 4,208, 64,171, 67,208, 5, 26,237,122,206, 75, 26,140, 16,112,152, 88,101,144,140,139,222, 82,253,166, 39, 79,
-213,198,103,243, 89, 77, 20,102,188, 83,160, 25,111,246, 38,132, 21, 14,103,134,190, 7,230, 68,136,207, 89,177,130,240,244,248,
- 88,126,247,123,111,113,162,226, 74,125,197,163, 23, 45, 13,218, 42,178,240,198,108,153,173, 29,153, 16, 2,122, 88, 93,128,248,
-172,226,106,224, 63, 84,185,112,103,195, 16,169,107,108,228, 7, 0, 45, 33, 3,233, 47,192, 20, 20,242,225, 96,252, 49, 90, 2,
- 34, 13,223,209,164,174, 92, 89, 15,133,166,208, 51,167, 98,180,202,110,102, 60,177,242, 17, 74,141, 80,221,194, 67, 68,235,216,
-233, 44, 27,241,202,216,247, 13,213,136,249,201,149, 71,138, 84,104,143,103, 32,238,154, 18, 2,175, 56,211,137, 93, 7, 18, 89,
- 15,236,191,255,157,187,242,222,253, 77,241,212,129,175,212,217,188, 56,109,203, 71,143,141,123,119,210,215,195, 20, 68,154,205,
- 13,153, 45,182, 53,250,234,158,173,228,209,201,144, 34, 48,159,104, 64,176, 36,194, 58,162, 38, 60, 20,116,126,245, 88,141,139,
-126, 7,144,245,147,217,218,141, 4,217,164,220,173,189,130,188,115,179,194,217,236,171, 97, 4,177, 41,117, 54, 1, 91, 3, 64,
-244,254,240,251,135,178,198,184, 7, 64, 63,122,145, 79, 94,244, 52,178, 42,200,211,115, 53,162,203,169,124,239,187,121, 73, 66,
-172, 75, 68,145,135,145, 94, 64, 40,158,109,233,119,255,243,111, 31,202, 23, 47,123,242,226,114,202, 44,181,160,139,124,222, 26,
-200, 95,252,195,177,252, 23,223,185,193, 62, 37,122, 95,152,133,159,171,129, 71,208,209, 28, 78,104, 4,182, 42,161,254,189, 1,
-157, 11, 28, 70,130,108,105,109, 37,245, 5, 81,154,101,142, 23,205, 22, 83,163, 60, 5,216, 66, 47, 81, 42, 72,201,173,122, 34,
- 95,158,205,101,230, 91, 48,144,215,253,253,171,143, 94,200,119,222,216,148,157, 90,150, 7, 31,170,104,168,141, 44, 23, 30,199,
-242,238, 28,132,108, 19,128, 28,168,167,193,199, 79,126,121,202,231, 0, 70,129, 61,102,253, 14, 4, 52, 95, 63, 44,200, 13,117,
-218, 91, 37, 53,117,171,177,204, 70, 0, 14,234, 1,212,131,157,165,209,211, 95,107, 84,139,222, 32,140,109,162,251, 0,154,216,
- 25,100, 58, 75, 25, 78, 67,192, 48,222,127,243,150,252,229, 71,159,201,147,135, 15,228, 7,111,191, 45,159,158,234,218, 45, 94,
-201, 85, 95,215, 79,141, 20,140, 67, 70, 86, 4,151,221,216,222,214,189, 3, 42,214, 72,133, 80,134, 2, 11, 23, 46, 31,179, 95,
- 53, 0, 0,189,229,242, 38,171, 26,114,110,116, 87,202, 32,175,168,213,105,200,142,159, 92,154,176, 8, 29,171, 83,142, 74,155,
-209,128,145, 71, 96,128, 44, 21, 35,114, 38,236, 97,115,250, 32,164, 65,230,141,225,146,122,181, 98,253,206,209,200,178,113,128,
- 77,139, 17, 63,139, 37,201,200,241,181,235, 63,232,159, 3,255, 0, 71, 71,142, 67,142, 66,153, 20,101,224, 20,211, 88, 65, 9,
-172,100, 59,113,148,178, 0,146, 69,174, 37, 16,248,215, 90,216, 30, 13,201,181, 83, 12, 66,155, 71, 7,221,108,189, 92,102, 31,
- 31,243,231, 36,200,224,168,160,245, 70,141, 41,216,170, 2,125, 61,251, 47,154, 61, 57,220,216,228,216,234, 89,111,164,239, 49,
-209,224, 58, 77, 36,250, 42,178, 17,156,245,116, 73,135, 13, 7,135, 62, 30, 0, 73,224,103, 71,208, 63, 5,119, 66,224,179, 26,
-129, 18,234, 28,129,222, 74,127,102, 60,118,163, 70,194, 12, 17,165,198, 14,196, 44,116,143, 64,187,218,105, 93, 80,161,203,116,
-229, 77, 84, 6,217,112,127,145, 16,219, 3,123,130,128,105,171, 94,144,179,102,155,129, 3, 4,206,224,216,225, 92, 16, 64, 93,
- 99, 19,166, 4,158, 5,228,168,159,118,135, 44, 81, 39, 65,138, 42, 93,104, 33,156, 53,175,168, 99, 29,120,154, 69,109,111,233,
- 63,219,242,248,233, 75,105,119,122,164, 70,166,158,130,205,122,178, 42, 4, 83,206,249,254,216,145, 99,121, 8, 40,192, 89, 44,
- 68,124, 99,140, 47,246,141, 83,222, 90, 37, 0,156, 26,142, 34,142,140,162,153, 21, 5,204,234,187, 49, 64, 86, 14, 18,195, 59,
- 0,233, 77, 33, 16, 16,126, 97,140, 11,207,192,185,235,136,147, 16, 8,252,224,176,151, 41, 0, 75,115, 82,208,224,164, 94,169,
- 27,210,155,170, 96,198,184, 9,198, 67, 4,155, 41,189,247,192,110,224,222,215, 27,219, 18, 70, 96,205, 75, 73,109,235,150, 28,
-159, 95,169,125,185, 98,192, 0,242, 85,216, 98,238,137,126,192, 86,173, 36, 63, 0, 89, 15,202,183,100, 79, 19, 38, 25,184, 43,
-121,170, 41, 10, 29, 25,233,100,197, 48, 4,164, 6,231, 4,192, 90,206,207, 94,240,247,189, 84, 69,158,191,124,174,239, 54,215,
-224,189, 98,189,223,165,141, 17,130, 22,188,176,183, 65, 52, 56,152, 72,113, 71, 48,210,250,205,119,223,148, 14,164, 78,211, 41,
-150,240,241, 76,125,253,217, 11, 13,242, 1,242,156,169, 67,236, 77, 34,170,105,150, 11,158,222,225, 25,127, 14,193, 52,206,122,
- 38,136, 25, 32,129,204, 5,193, 72,127, 50,147,225,100, 66,162,170,183,239,221, 22, 47,154,202,109, 77, 2,175,134,107, 77,204,
-230, 44,219,195, 87, 93,180,186,172,110,220, 57,104, 80,156, 8,108,144,247,110, 52,244, 78,166,229,233,171, 54,219, 68, 76, 76,
-213,102,221, 62,168,203,121,179,171, 1,225, 68, 14,118,170, 4,131,162,122,132,160, 21,125,244, 98,161,200,117, 32,153,144, 6,
-202,133, 84,158,247, 3, 78,188, 15,226, 32, 96, 80, 64,214,101, 92,181, 76,226, 16, 60,225,222, 98,236,120,185, 54,192,104,180,
- 4,201, 84, 74,126,244,209, 67,121,251,104, 75,190,173,123,114,115,231,158, 60, 84,199,254,242,124,110,163,223, 24,131, 67, 59,
- 15, 88, 30,207, 24, 88,215, 28, 23,181,169, 21, 4, 68,105,226,100,194,152,200, 84,150, 49,112, 80, 57,230,129,210,214, 66,141,
-105, 66,117, 46,100,211,233,192,105,241,190,134,140, 9,251, 25, 44, 65,197, 54,144, 79, 70, 55,131,227,232,130,163,204, 6,126,
-227,144,134, 31, 7,253,114,162,135, 96,176, 96,127, 8,125,173, 11, 93,168,103, 23,200, 90,151, 28, 41, 0,130, 19, 82,175,232,
-231, 47,192,158, 6, 56,129,103, 66,101,165, 84, 66,112, 20,244, 98,167, 26, 93,118,155,154, 85,193, 9,220,168, 73,216, 91, 72,
- 71, 23,237,102, 33, 32,139,217,127,252,170, 45,127,249,203, 51, 25,205, 13, 28, 6, 3, 80, 82,103,165,190,135,151, 21,194, 48,
-163,113, 44, 47,213,193,213,106, 57, 41,105,132,221, 40,103, 88,150, 73,133, 22,209,238,109,228,165,154,207, 82,252,131, 68, 21,
- 40, 95,121, 22,172,160,140, 89,216, 77,203, 12,191,183,136,232,188,126,245, 98, 40,223,215,133,255, 76,157,196,165, 70,130, 63,
-248, 78,131, 66, 42, 28,175, 91,130,196, 38,150,169, 26,134,122, 35,148,173, 2,110,248,130,132, 37,200,118,230,115, 11, 96,126,
-254,213, 90, 29,175,199,222, 10,103,148,213, 25, 3, 71, 0, 99,218, 26, 89, 31,119, 50,159, 80, 24, 38, 2,253,238, 10,142,204,
-115,253, 93, 83, 91,106,104,100, 7,185, 77, 68,226, 9, 17,154, 75,206,237,223,219,173,200,118, 41, 37,223,191, 83, 98,134, 14,
-131,236, 69, 75,249,201, 23, 45,205, 90,166,250,174, 25,121,126, 49,150, 93,144,220,212,242, 12,170,190,165, 81, 56, 15, 99,180,
-226, 51,165,101, 67, 94, 28, 55, 29, 89,133,239, 52,222,133, 64,148, 45, 93,191,148, 30,218, 76,162,217, 36,100,120, 61, 61,180,
-229,138,228,183, 26, 82,214,236,176, 11, 53, 61,125,159,197,122, 66,231, 81,217,170,106,164, 62,103,192,134, 42, 11,200, 38, 80,
-198,254, 79, 31,254,131,252,244,147, 71,242, 63,254,231,191, 37, 47,175,150,178,187,171, 89,253,168,193, 86, 3,232, 70,123,237,
- 38,201,101, 48,171, 59,132,214, 49,180,151, 29,152,140,239, 12,152, 34, 24,193,162,196, 88,220,244,159, 78,127, 32,185,237, 28,
- 51, 27,100,249,112,248,221, 94, 79, 29,222, 80, 51,149, 30, 9, 31,216,198,240, 76,150,212, 4, 20, 44, 64, 13, 66, 35, 88, 33,
-235, 27, 71,226, 82, 36, 97,169, 0,100, 21,248,175,251,164, 53,104,121,235, 65,133, 0, 11,126,174,166,134,134,153,190,174,127,
-214, 79,211,248,162,196,138,125, 5, 15, 55,155, 74,209,202,209,157, 26,135, 66,228, 36,115,137, 58, 6,178, 58,132,225,212,117,
-212, 0, 6,162, 20, 84,219,243, 12, 36,131,118, 2,123,178, 40, 67,163,180,143, 50,182,211, 60, 15,117, 63, 64, 92, 51,161,250,
-220,154, 61,113, 26,100, 13, 42,210, 73,138, 25,152,105,171, 27,127,124, 87,141, 97, 91,239,227,118,185, 32,191,113,247, 64,142,
- 91, 61, 57, 86, 67,182,118,179,239,112, 72, 28,143,115,200, 95,246,148,245, 76, 86, 11, 89,226, 41,200, 96,183, 12, 72,157,140,
-245, 93,128,106,216, 33,173, 17,254, 99, 61,161,233, 29,120, 19,171, 26,132, 86, 66, 45,106, 70,143,234,214,184,101,244,171,200,
- 54,146,245,220,198, 48, 83, 30,157, 16, 0, 77, 28,159, 68,208,186,132,176, 72,154,149, 21, 48,204,225,220, 83, 93,206,113, 52,
- 64,184,100, 56, 90,147,228, 4,224, 65,144,198, 32,160,221,169, 87, 88, 1,244, 64,253,172,207,248,248, 84,179, 44,148,187,129,
- 49, 8,109, 50, 32,212, 76,124, 65,102, 67,107, 61,198,250,119,131, 12,250,206,154, 29, 70, 11,153, 13,251, 4,216,130,105, 31,
-255,100,120, 47,204, 22,146,183, 3,109, 8, 40,164,133,242,122,140, 11,198, 63,140, 92,197,205,141,172,249,215, 19, 11,192,162,
-164,114, 12,246, 16,132,161,140, 59,158,142, 95, 51, 29, 30,238,237,201,166, 6,158, 96, 49,220,209,128,171, 27,205, 29,243, 96,
- 64, 91,180,152,143,165,134,246,145, 62,199, 85,243,130,236,101,126, 70, 29, 12,192,137,126, 86, 6,157, 22, 75,248,213,202, 61,
-217,209, 76, 30,130, 67,203,181,241,212,227,204,133,174,125,243,234,178, 35, 23,144,109,101, 75, 36,101, 8,125, 63,126, 93, 82,
-230, 12, 56,230,212, 99, 66,212,185,247, 0, 10,162,109,152, 77,219,184, 37,122,217, 7,251, 85,117,230,152, 32, 8,152,197,147,
-160,197,207,145,245, 19, 89,111,173, 92,213,164, 96, 69,199,134,247,192,121,200,110,149,197,211,160,235, 92,157, 31, 50,115, 36,
-142,135, 27,160,204,205,202, 85,209,151,171,158,181,162, 46, 53, 24,132,236,232, 65,163,204, 49, 62,113, 98, 67, 40,219, 35, 8,
-193,196, 22,170, 63,152, 70,193,125,171, 86, 74, 28,221, 43,230,125,121,213,153, 19,161,143, 54,199,137,218,183,186, 62, 35,236,
-200,214,230,182, 36,169,186,252,242,193, 39,250, 46, 39,114,247, 96, 91,246, 54,171,108,197,204,116, 13, 91,189, 33,253,141,137,
-131,121,172, 86, 35, 64, 70,201,187,161,239,130,128,108, 78,181, 57,203,180, 49,225,129,245,158, 46, 66,182,162,129,209,216, 86,
- 59,138,224, 8,162, 49, 4, 96,235,249,106,104, 82,247,248,101,155, 45, 3, 76,120,129, 70, 25,247, 31, 85, 26, 50,177,170, 93,
- 67,213,224,241,139, 51,249,215, 63,124, 79,247,167,207,209,209, 94,127,105, 8,125,216, 34,216,138,181, 71, 31,139,170, 1,148,
- 63, 25,124, 45,150, 54,193, 18, 36, 75, 26,236,158, 30,170, 52,138, 73, 75, 99,118, 66,121,104,164,206,104, 30, 90, 36, 89,202,
-132,215, 99,122, 98,180, 5,198,158, 68,157,111, 39, 3,106, 92,195,158, 67, 20,198, 18,130,227,119,109,124,227, 24, 55,123,120,
-214,147, 31,125,114, 33,165, 98,154,131,249,158,103, 32, 24,100,166,251, 59,101,205,180, 61,249,240, 97, 95,166,177,199,121,104,
- 74,189,250,134,171, 68,132,248,224, 98,160, 89,184, 79, 62,222,246,120, 46,247, 54, 11,210,174, 47,228,217,213, 72,158,183, 38,
-242,139, 47, 69,141,209, 76, 62,125, 53,166,178, 26,250, 72, 0,190,228,232,168, 99, 62, 55,178,117,208,191, 34, 19, 15,189,170,
- 20, 10, 41,102,237,200, 60,112,232,219,186,120,125, 13, 62,158,157, 77,100,175,158, 99,100, 15,254,110,162,200, 73,216, 0, 13,
-114,159, 8,224, 24,229, 54,125, 62,160,177, 91, 87,125,249, 74,150,242,248,217, 57, 51,145, 7,191,124,197,153,121,164,254, 32,
-160, 9,245,253,187,147,133, 52, 39, 75,206, 77,178,239,167, 70,166,154, 55,118, 34, 68,160,190, 6, 64,207, 78, 95,177,188, 11,
-205,113,244, 30, 23, 14,137, 13, 80,218,213,112,161, 7,119,197,246, 71, 42,204, 91, 0,229,153,246, 19,128, 41,200, 2,111,239,
-111, 80,241,170,150, 11,216,131, 76,235,243,149, 50,219,178, 81,205,115, 44, 35,159, 82, 67,163,251,188, 89,200,201,231, 39, 99,
-246,239,191,113, 35, 79, 76,193,243,166,102, 81,154,117,110,108,133, 20,131, 72,174,245,219,217,191,132, 96, 69, 74,126,251,157,
-109,130, 22, 65,206,129,108, 10,135, 30,145, 54,126,222,211,195,253,226,178, 39, 57,189, 0, 55,223, 58,148, 48, 95, 53,213,188,
-160, 46,157, 47, 47,244, 34, 67, 97, 47, 75,149, 50,240, 22,167,144, 17, 3,186,171,217,202,147,243,150,252,191,127,251,145,124,
-249,188,169,153,123, 81,158, 93, 78,228,239, 63,127, 72, 99,224,171,225,190,106,119,232,192,239, 30,236,145,252,230,188,213,100,
-208, 67, 69, 45, 26, 31, 11, 30,209, 42,128,147,173, 96,222,181, 82, 33,219, 20, 70, 90, 48,221,209,108,183, 56, 42, 6,231,129,
-222, 20,148,181,112, 81,124,244,160,209, 47,118,216,132,208,141,163,161,135, 78,134, 54,224, 36, 86, 6,254, 9,152,237,134,172,
-106,113,142,219,201,242,162, 99, 2, 66, 16, 24, 15,100,215,248,249,140,235,143, 99, 60, 44,235,120,225, 39, 64,169,130,235,218,
- 73,183, 82, 61,207,129,221, 12,232, 22,145, 19, 92, 28,208,238,218,176,198,137,161,219,241, 93,190, 53,250,201,249,110,146,177,
-150, 1,176,140, 28, 90,175,186,217,237,211, 24,209, 33,175,174,193, 61, 40,111, 47,152,121, 19,216, 26, 88,224, 98, 99,170,105,
-185, 24, 76,137,109,217,214, 51,112,103,119, 83,131,170, 46,121,250,215, 78,131,253, 90,219, 25,173,136, 53,104,123, 3,124,143,
- 16,197,205, 59,191, 64,245,102,202,128, 74,156, 40,140, 79, 64,152, 6, 66,121, 19,160, 40,100,209,215,157, 19, 3,177,244, 67,
- 58,106,114,226,171,131, 91,160,164, 58, 51, 37,188,203, 86,135, 99,164,139,121,143,233, 70,188,154,208,176, 53, 42,144,130, 14,
-229, 81, 91,131, 93, 61,154,251, 98, 32,190,237,141, 50,123,209, 72, 14,246,182,107,236,181, 99,153,224,236, 47,154, 61,221,179,
- 17,199,102,215,106, 68,231,122, 95,129,126,191,127,235, 64, 6,219,155,204,216, 59,157, 75,117,212,186,167,133, 50,133, 68,128,
-133,128, 40, 9, 90, 62, 75,218,196,152, 4, 56,168, 76,166, 89, 93, 49,166, 73,160, 20,200,246,134, 44, 27, 76,133,153,156, 1,
- 53,173, 87, 73, 66, 26, 92, 33,223,217,204,208,183, 36,136,125, 81,240,102,228, 13,195, 0,117, 56,142,149,185,170,202,179, 87,
-167, 82,200,191,193, 50, 49,214, 54,157,213,179, 53,179,137, 25, 22,108,244, 14,247, 7,125, 6,131,195, 65, 79, 70,163,190, 58,
-179, 3, 13, 56,247, 72,139,218,234, 52, 37, 9,139, 26, 44,247,212,129,237,147, 74,245,236,170, 77,240, 90,236, 36, 87,129, 18,
- 95,113,158,123, 73, 76,130,237,177,247,186, 2,103,247,126, 77, 16, 29, 57,254, 97,206,116,253, 64,237, 13,123, 58,157,199, 28,
- 21, 6, 8, 13, 21,160, 27,251,247,244,222,229,101,127,203, 72,140, 80,209,196,231, 35,187, 69,102,186,210,224, 1,228, 48, 8,
- 90,225,236,174, 52,169,123,247,246, 22,171, 14, 0,233,194,231,143, 23, 9,207, 68,119, 48,166,253, 51,194, 35, 84,101,242,106,
- 55,124,142,165, 33,208, 70, 5,233,188,217,166,222, 2, 42, 99, 8,228, 80,185, 49,249,110, 97,245, 54,159,175,240,204,158, 54,
- 7,114,176, 81,118,194, 64,105, 13,242, 74,122,110,123,114,231,214, 61,169,215, 26, 36, 73, 59,105,246,213,198, 12, 77,139, 4,
-205, 98,181,225,129,222,133,171,246,132,223,141,139,180,169,137, 7,190,183,162,137, 83, 73, 19,190, 78, 31,228, 55, 51, 86,180,
- 96, 3,123,106, 67,224,215,174, 53, 19,112,175,170, 69,176, 53,226,125, 38,220,219,225, 8, 84,212, 69, 6,197, 0,225,193, 79,
- 98, 77, 16, 8,181,122, 3, 86, 4, 81,121,248,249,231,199, 12,154,238,222,220,103,219,182, 90,152, 88,146,128, 4, 27, 18, 1,
-161, 9, 53, 81, 9, 14,118,218, 51,162, 46, 15,182, 56,165,134,191,223,235,202,223,125,252, 82,254,229,123, 59, 4, 97,117,198,
- 9, 81,183,136,222,102,208, 51, 62,237,203,153, 70, 15, 37,180,144, 33, 72,225,128, 10, 86, 54, 67,249, 92,216,159, 6,173,231,
- 70, 1,243,191,121, 58,206, 15,159,245, 53, 67,155,201, 13,188, 4,192, 7,163, 5, 47, 86,173, 20,202,219,251, 69,217,214, 11,
-138,114,246,112,156,149,131,205, 10,203, 38, 47,213,152,143, 47,103,236, 25, 71,177,217, 54,128,235,176, 64,152, 45,252,226,164,
- 71,152,255, 75,141,238,255, 63, 61,156,205,238,156, 8,115, 68, 71, 99,117, 76,184,124, 40,167,122, 44,149, 27, 27, 20,128,241,
- 41, 39,211,199,102, 1,100, 48,245,103, 47, 16,253,204, 13, 41, 11, 49,131, 44,104, 73,117,227,161,116,246,131,175,237,200,119,
-239,212,229,127,253,235, 99,121,217,233,233,119,175,232, 12, 36, 76,228, 74, 29,235,233,243, 49,245,213,209, 99,238,119,166,108,
- 37,124,113, 60, 35,235,210,222,225,134,252,209,207, 39,146, 15,141, 96,191,170,107, 50,146, 28, 1, 28,199, 23, 83,121,210,154,
-203,121,123, 74, 84,243, 4,253,211,181,176, 23,116,149,142,164, 63, 76, 88, 41,233,232, 67,159,244, 23, 12, 38,202,105,143,154,
-240, 39, 77,144,253,139,211,208, 53,101, 58,163, 80, 4, 85,164, 71, 85,161, 15, 14,210,114,111,175,226,230, 8,141,197,200,115,
-156,249,184, 96,143, 47,135,242,213,203,174,252,203,111,220,144, 51,244,109,206, 53, 3,204,168,177, 31,206,229, 98,184,150,225,
- 23, 23,114,239, 70, 69, 47,158,181, 90,196,205, 97, 83, 59, 68, 47,251,206,118, 93,182, 40,170, 17, 32, 52,116,128, 17, 93,119,
- 56,192,249,140,217,248,120,166, 78,241, 97, 79,138,155, 25,233,235,190,247,103,109,105, 53, 91, 4, 32, 65,130, 16,229,162,154,
-158, 5,100, 80,155,106,236, 63,252,234,153, 60, 60,237,104,228,153,145,131,221, 29,206,106, 62, 60,109,106, 22, 87,228, 5,190,
-188,188,100,255,111,127,103, 75,142,213, 48,225,221, 65, 57,187, 92, 25, 38, 33, 96,159,210, 99,121, 42, 96, 86,144,103,102,249,
-234,234,138,134,245,112,119,143,207, 91,200,229,109,254, 59, 50,244,110,167,219, 51, 0, 26,156,186,211,248, 6,162,151, 32, 49,
-160,208,211,166, 43,144,120,226, 68, 95, 60,235,103,185, 82, 85,114, 61,101,236,120,246,193,196, 6,205,100, 48, 75, 97,245,208,
-179, 3, 48, 6, 70, 7,165,251, 5, 81,250,134,112,166,244,106, 42,124, 13,248,178,209, 29, 53, 78,200, 16,125,115,146,200, 54,
-141, 9,206, 24,216, 80,218, 69,159,213,140, 70,108,189,184,149,201, 54, 26,243, 98, 98,156,230, 14,156,151, 88, 74,200,181,177,
-227, 16,185, 56,193,128, 58,190, 24,181, 41,195,244,148, 79,195,130,209,177,171, 46,132, 56, 42,242,238,209,190,188,173,223,243,
-232,172, 45, 39, 26, 28,161, 11, 3,178, 27,112,100, 7,124,215, 28,199,112, 80, 86, 64, 57, 16, 45, 8,224, 27, 80, 90, 70, 80,
-133,117,165,164,178, 7, 13,244, 13,210,147,146,107, 94,141,100,165, 84,102,214,179, 90, 91,165, 2,122, 14,200,182, 34, 71, 69,
-141,190,121, 70,207,134, 30,121,210, 10, 99, 60, 46, 90,247,164, 89,170, 75,189, 90,210,179,184,228, 8, 90, 83,108,250, 2,153,
- 95, 1,207, 21, 6,212,118,184,174, 94,121, 43,136, 6,229,121, 23,200,171, 49, 15,220,122,121,242,229,241, 5, 75,235,214,174,
- 17,174,103,128,128, 67, 82,164,167, 69,149,146, 35,104, 26,172,103,212, 56,131,211, 3,109, 16,244,212,151,137,177, 5,162,148,
- 10,103,130,192, 28, 25, 48,132, 99,124,238,133,137,233, 32,126,143,200,157, 29,179, 87,237, 51,208, 8,216, 26,241, 24, 76,169,
- 51, 24,118, 13, 85,239, 39,175,249,225, 81,214, 63, 57, 59,151, 55,110, 31,201, 0,218, 1,186,255,226,207, 56, 98,183, 38,217,
- 72, 68,230, 68,220, 61,112,131, 64,196,102,179, 86,102, 69, 21,103, 29,107,178, 0, 62,232,242, 74, 54,106,111,202,119,191,241,
-129,180, 47,143,245,108,218,169, 69, 91, 15, 54,218,168,125, 23,255, 63, 87,239,213, 36, 73,122,101,137, 93,119, 15,173,101,234,
-202,146,173,209,221, 64, 15,196, 8,195,112,150, 67,109, 70,154,113,249, 66,163,241,145, 63,132,191,131, 47,251, 68,227, 3,141,
-182,251,192,217,181,221,177,177,217,153, 33, 22,104,108,163, 27, 64,235,210, 85,169, 51, 50, 67,107, 15,119,231, 61,231,126, 30,
-213,100,183, 21,186, 80,149,153, 17,225,254,249,149, 71,208,170,181,158,170, 53,138, 77, 73,192,208,217, 68, 30,155, 19,138, 47,
-233,191, 77,152,118,121,233,100,201,252, 3,208, 60, 1, 98,140,103,174, 55, 88,202,183,207, 94,232,231,158,242,236,226,254,226,
-227,131, 62,188,100,140,205, 81,227, 31, 19,135, 86,173, 32,167,151,125,233,214,180,155,215,235,133,198, 13,107, 61, 48,148,204,
-228,200, 20,253, 48,177,232,104,242,197, 53,198,115,212,210,247, 0,245, 65,172,106,224,115, 62,157, 77,153, 88,177,126,192, 84,
- 8,137,123,183, 6,122,113, 86, 27, 4,128, 2, 51,114,126, 59, 99,124,199,196, 16,249, 3,128, 63, 0, 68,241,153,254,236, 79,
-126, 70,208,108,255,234,185, 92, 92,158,177, 64,175, 76,243, 4,127,130, 46, 84,112, 50,209,248, 7,215, 17,120, 25,136,124,149,
- 43, 38,233,139, 2,148,128,206, 66,145, 0, 81,115,253,203,240,181, 18, 90, 7,103,229,245,100,198,166,104, 6,171,113, 8,196,
- 56, 21,191, 2,177, 41, 75, 22,119, 80, 16, 68, 49, 8, 84, 62,112, 6,191,253,234, 68,223, 87,133,247,228,254,113,135,212,107,
-172, 20,185,246,115, 34, 89,226, 24, 82,180, 44, 7,166, 8, 13,185,175,149, 3,232, 35, 56, 79, 72, 90, 24,169, 77, 53,209,125,
-241,106, 40,231,253,185,140, 38, 33, 23,250, 0, 78, 28,119,115,206, 44,194,186, 19, 4,168,119,247, 42, 20,122,105,215,114, 20,
- 8,129, 83, 19, 80,220,151,227, 72,126,251,226,119, 50,199,174, 9, 64, 1,189, 40,191,184,171, 29, 64, 61, 75, 32, 66, 41,139,
- 1,164, 38,116, 13,122,175, 49,234, 7,201,222,115, 59, 3, 86,140,190,201, 64,122,198,243, 68,252,251,221,119, 61, 6,174,170,
-190, 6, 70,100, 56, 92,213,122,145,213, 11, 28,204,128, 60,159,205, 67, 38,194, 12,187, 33,171,136,241,128, 3,241, 9, 19,134,
-128,226, 49,107,154,152, 96, 2,113,180, 83,226, 52, 0, 99, 25,252,249,127,241,241,190, 60, 58,172, 74,253,110, 67,230,231, 11,
- 6,173, 61,253,220,232,230, 39, 80,181,219,100, 56, 82,124,252,125,143, 5, 4,236,254, 16, 32, 80,168,124,250, 93, 95,246,203,
-190, 60,172,197,242,245, 68,175, 35,140, 52, 60,104, 13,179,151,102,135,249, 15, 95, 99, 55,155,147,102,167,107, 52,179,196,230,
- 30,195,185, 37,154,107, 77,228, 64,194, 67, 68,231, 15, 47, 71,242,243,183,219, 68,149, 62, 61, 31,200,205,104,197, 7,201, 40,
- 36, 54, 18,198,193,192, 94,177, 88,244,229,197,233,133,252,237,103,177,116,255,234, 29, 86,244,248,172,182, 23, 52, 67, 1,220,
-187,119, 15,106,242,173, 22, 70,255,250,179,215, 68,175,159, 93, 79,228, 90,239, 53,133, 65, 66,227,113, 63,123, 57,144,123,251,
-117, 78, 80,136,116,133,122, 81,226,248,182,232, 28, 49,130, 69,199,183, 70,213,190,178, 81, 53,186, 55,237, 66,239, 29,118,228,
-139,231, 87,242,221,139,177, 92,255, 81, 59,160, 53, 20,196,244, 97,208,207,241, 95,253,201,161,252,139,191,249, 66, 94,106, 85,
-252,218,143,229, 91,125, 88, 46, 17,140,189,137,252, 15,191,252,185,188,232,141,229,201, 23,207, 9, 2, 2,178, 22,163, 69, 80,
-135, 80, 13, 35,169,210,188,128, 42,110, 75, 78, 48,178, 14, 77, 14, 64, 18, 80,186,168,150,193,221,157, 57,144, 26, 10, 25, 56,
-182, 1, 60, 55,154, 79,249,231, 0,181,128,246,210,215, 46,103,130,253, 94, 46,111, 10,106, 73,226,240, 32, 49,139, 75,116, 30,
- 41,165, 71, 2,167,198, 22, 27, 66,221,116,155, 45,177,195,160, 5, 95,111,234, 92,198,239, 46,114, 71,154,165,182, 63,222, 15,
- 64, 68, 61, 26,171,152, 13, 35, 2, 50, 94,215,119, 32, 58,186,163,145, 85,226,241,179,155,173,170, 89,213,226, 61, 65, 28,134,
-147, 48, 36,243,216,208,239,129, 3,166,110,117,104, 19,163,180,177, 72,216, 56, 79,239,173,119,186,188,153,178,197,214,141, 49,
-249, 59, 81,158,212,246, 24, 35, 64,114,210,245,223, 75,237,148, 6,223,188,148,187,157,186,180, 33, 89,124,212, 97, 97, 12,196,
- 46,186,252, 74, 33,111,162, 56, 40,134, 40, 0, 98, 35, 87, 0,181, 56,190,246,192, 89, 47, 18, 67, 65,103, 61,109, 18,110,199,
- 5, 57,232,214,168, 43,112, 59, 89,176,144,190,152, 76,100,186,201,202, 39,247, 75,242,239,126,245, 21,189, 6,200,127,215, 78,
- 20,235,155, 76,182,196,247, 3, 4,252,235,179, 91,217, 89,205,244, 28,232,251,152,106, 87, 21,228, 12,148, 90,234,202,122, 54,
-226, 74, 10, 81,197,231, 52, 37,203, 66,201,180,179, 99,142, 59,163,216,246,240, 16, 53, 41,208,108,103,195, 2,228, 23, 31,191,
- 79, 89,224, 63,126,251,132, 66, 51,217,114,149, 13, 1, 38,112, 88, 93,122, 27,224, 5, 86, 18,228,108,213, 17, 57,190, 57,158,
- 42, 76,234, 88,224, 69,214,253, 2,177, 79,237, 2, 95, 19, 85, 9,227,226, 25,239, 75,146,174, 38,157, 35, 32,176, 30, 17,193,
-129,230, 44, 24,184, 34, 36,118, 35,122,174,114,244,218,128,218,105, 26,247, 48,158, 41, 82,204, 41,165,105,178, 17,232, 79, 24,
- 39,113,142, 96, 86,180,135, 53, 22,174,173, 67, 79,246,110,122,114,113, 85,147,119, 31, 62,144, 47,190,121, 44,127,248,254,169,
-209,210, 18,227,175, 99,108,139,107,132,110, 27,102, 50,152, 54, 80,136, 72,255,110,226,196,114, 88, 68,146,170,236,201, 11, 90,
-199, 10, 77,150,144, 47,208, 69,131,143, 13, 12, 65, 77, 99,113,190,112,160,207,230,130,255, 31,231,131,162, 88,230, 89,163, 63,
-123,205,209, 61, 68,189,190, 63, 25,201, 91,119,154,218,237, 78,217,209, 79, 17,243,102,104, 8,140, 17, 0, 32, 38, 10,206,154,
-222,139,110,171, 35,123,157, 22, 61, 19,128,228,199,245,187, 83,109,202, 79,234,101,218,250,246, 71, 3,138,167,129,190,140,152,
-142, 98, 5,178,180,144,153,253, 99,111, 68, 36,250, 39,251, 53, 57,233,205,153,112, 89,192,233, 57,127,117,118,198,189,248, 87,
-223,125, 47, 63,122,231,109,121,248,246,143,101,119,119, 71,134, 55,167,196,133,164,114,220,120, 94, 49,126, 63,191,185,145,127,
-252,245,167,178,187,179, 67,229,190, 86,167,109,197,169,158,183,211,203,107, 83, 76,132, 16, 14,204,156,242, 89,190, 31, 24,238,
- 16,187,208, 42,179, 96,110, 84, 77, 40,231,249, 69,159,113, 1,251,113,172,136, 80,200,128,219,142, 2, 11, 46,114, 99,231, 36,
-249,217, 55,167,178,175, 77,113, 17, 46,140,173, 42,129,163,243,101, 66, 99, 39, 78,117, 98,195,179, 49, 30,120,144, 20,215,242,
- 42,188,158,240,128,255,103,127,114,204,113, 51, 14,211,237,116, 40,255,244, 77,207,237,202, 81,233,104, 55,180,136,220,232,207,
-120,217,232,182,234,250,226,159,188,127, 40,111,237, 98, 60,145,144,143, 11,211, 19, 72,185,147,148, 5,144,214, 88,187,183,165,
-153, 55, 52,180,179,221,228,205,213,169, 55, 51, 14, 31, 70,237, 11,253,190,211,235, 41,191, 22,102,244, 62,231,124, 24,123,219,
-232,221,140, 15,124,114, 64, 57, 26,213, 67,178,166,246,184, 29, 22,116, 60,235,149,185,150, 53,181,234,155, 47, 34,163, 28, 65,
-230, 53, 48,112,199, 91,135, 5, 61,112,121, 77,148, 51,169,215, 2,249,159,255,242, 72,222,189, 83, 23, 95, 63,227,191,248,251,
-231, 60, 80,255,244,221,149, 30,146, 68,238,239, 62,210,206,213, 42,193, 82, 49, 35,245,186, 22, 43,141, 28, 1, 31,154, 87,216,
- 29, 93,205, 76, 45, 11, 99,138,254, 96,108, 72,249,105, 44, 11,253, 57,239, 62, 48,240, 6,222,156,183,245,173,198,195,106, 94,
-184, 0,238,160, 74,196,248, 9,163,148, 31, 29, 55,164, 92,181,113,251,165, 38,193, 41,198,146, 40, 34, 22,154,228,181,131,126,
-231,168,170, 1, 70,175,213, 34, 54, 75,197,200,156,224, 80,237,146, 22, 4, 46,179,222,220,177,190,185,127,255,197, 90,223,127,
- 77,126,250,176, 77, 78, 61,246,141,248, 59, 32,133, 9, 20,107,151,228,175, 63, 62,148,127,249,171,231,114,174, 93, 59,130, 16,
-176, 19, 80,193,171,103, 53,121,232, 97,185, 28,204,244,243, 22, 13, 4,132, 7, 26, 92,108,116, 46,177,209, 22,163, 92, 81,131,
-205,148, 10, 96,112,160,194,200,103,137, 42,125,180,150,153, 38,203, 72,147,237, 77,127, 42, 95,193, 53,107, 1,173,228,186, 44,
-162,150, 12,245, 50, 20, 65,115, 90, 1,248, 53,150,175,159,157,114,250,242,223,253,233,251,242,239,190, 62,151,193, 12,215, 91,
- 59, 34, 20,100, 90,189, 82, 17, 45, 8, 28,239, 92,147,237,120,204, 96, 70,116,183,103, 84,163,149, 11,146,221,102,131, 93, 19,
-156,211,144,180,177,211,132,212, 34,254,238,242,214,198,238, 20,109,209,159,125,126,221,163, 18,217,190, 62,148,248, 58, 76,115,
-104,222,177, 49, 9,100,220, 43, 36,169, 34, 45, 77,115,166,165,158,201,186,157,183,105,163,163,176,234, 15,110,168,241,142, 14,
-207,119,220,238, 52, 81, 3,213,140,103, 9, 0, 61,116, 82, 68, 7,175, 76, 30, 21, 63, 23, 69, 2, 62,215,154,123, 57,140,146,
- 50, 28, 29,199,206, 23, 21, 73,222, 20,237,178,220, 3,155,148,234,146,255, 31,247, 53, 45,214,236, 25,205,152,162, 23,231,188,
-214,245,166, 46,112, 17,119, 98,190,243, 79,176,177, 56,157,181, 2,127, 43, 52,147,131, 21,169,231,219,181, 48, 51,113,219,135,
-107, 17,252,205,201,133,190,254,156, 1, 28,200,105, 76, 67,146,129,237,135,113,141, 64,245,195,164, 14, 40, 98,184,106, 1, 41,
-125,127,183,161, 49, 36,100,146,106,176,171, 79,184, 79,197,218,226, 68,207,188,231,100,103, 33, 48,132,130,218,139, 81,252, 52,
-245,108,116,245,237,107,208,131,107,218,218,232,138, 48, 51,129, 29,101, 85,131,123, 94,139, 14,116,150,195,201,173,158,245,129,
-222, 79,179,113,222,211,128,141,130,254,234,226,140,159, 3,147, 59, 88,183,226,217,155,174, 19, 2,190,176,179,229,245,242,204,
-118, 20,147, 40, 88,242,130,231,254,233,215, 39,212,155,231,116, 15,194,109,122, 31, 82,204, 51,118,247,113,160, 93,164,198,166,
- 98,166, 36,121, 77,151, 69, 26,108,104,108,139,173, 19,197,168, 55,140, 86, 84, 23, 51,156,133, 71, 67, 28,160,214,227,196,115,
- 76, 30,103, 21,237,138, 43,196, 80,116,123, 70,167,139,183, 99,121,252,125,214, 1, 38, 67,189,119, 3, 45,232, 58,205,186, 21,
-123, 89, 72,122,175,184, 75,221,128,253,146, 0, 3,164, 77,194,218,138, 5,224,141,250,253, 27,169,148,107,182, 18, 19, 83, 72,
-251,246,241,119,122,230, 74,114,247,232,142,140, 70,125,121,113,217, 23, 51,236, 51, 17, 42, 20,170, 72,138,159, 63,153,110, 21,
- 8,113,126,144,176,141, 58,233,140,103,156, 32, 83,165,100,141,140, 33,230, 77, 71, 1, 56,150,217, 44,145, 78,167,164, 29, 39,
-192,176,230,109,128,216, 12,236, 7,154, 40, 36,105, 76, 82, 90, 21,195,252, 20, 53, 62, 63, 58,106,203,127,124,124, 67,171, 86,
-116,207,163, 19,195, 25,225,204,119, 91, 13, 45, 2,119, 9, 70, 67, 1,116,173, 5, 76,232,112, 37,160,158, 93, 79,245,188,111,
- 38, 90, 56,134,252,188, 57,189,215,173, 90, 89,127, 86,141, 83, 1, 2,211,244,235, 65,133, 59,232,248, 68,185,159, 92,245, 57,
-153,169,151,235,242,206,219,239,242, 94,188, 58, 59,101,161,135,233,201,207, 62,252, 64,218,205,150, 60,125,246, 13,189,222,129,
-131, 65,177, 10,208,240, 97,127, 68,253,250,111,191,255,206, 80,232, 26,119, 1, 40, 61,190,123,172,141,102, 67, 94,190,126,205,
-100, 12, 61,133, 54, 40,157, 48,252, 2,202, 29, 98,102,158, 80,103,126,170,207,197,209, 78,149,212, 63, 0,160, 49,217, 5,230,
- 2, 88,156,150, 22, 69,226, 76,138, 16, 7, 97, 31,124,113, 51, 37,235,232,193,126,139,226,111,112,196, 91,204,103, 90,120,102,
-173,168,194, 42,196, 51, 81, 44,195, 74,192,165, 77, 3, 65, 69, 95, 0,224, 70, 4, 35, 84,172, 55, 80, 43, 42,162,195,138,152,
-249, 61, 7, 6, 10,220, 94, 46,165,213,208, 91, 92, 43,154,201,198,246,235, 1,170, 81, 63,182,132,234, 99,151,226, 73,175,167,
- 65,109,175, 68,254,241, 40, 4, 90, 47, 67, 17,126, 40,195, 33,192, 92,246, 23,114,126, 59,215, 10,204,198, 34,129, 6,198,102,
- 57, 67,244, 32, 31, 8,140, 50,192,127,207,250,238, 97, 52,139, 68,140, 53, 81,169,160,131, 39, 47, 94, 31,178, 90,187,192, 78,
-157,149,101,156,161, 94, 46,196, 14, 32,166,130,106,235,237,227, 29, 41, 53, 1, 90,211, 74,105,146,145,254, 43, 13,154,152,137,
-149,154,228,181, 62, 60,212,196,184,201,203,211,222, 70, 30, 21,128, 82,213,235, 82,210,234,120, 97,149, 87, 54, 3,158,102, 72,
-100,239,231, 79,199,220,183, 97,207,139, 93,124,163,213,149,119, 30,234,207, 9,245, 70,108, 42, 76,150, 24,215,113, 71, 3, 41,
- 70,231, 5,143,221, 46,254,201,231, 87,230, 54,166,223,223, 41,106,146,155, 66,246, 79, 3,134,126,206,146, 6,145,253,110, 81,
-171,186, 44,247, 60, 39,231,125,118,163, 4, 13,173,220,238, 11, 70, 49,137, 57, 52,163, 43,186,186,233,219, 24, 87, 59,216,191,
-249,244,177, 52, 75,239,208,252, 4, 40,109,236,195, 24,172, 17,228,245, 30, 63,218, 43,203, 79, 30,181,245,231, 14,200,129,135,
-222, 60,186,253,191,120,171, 33,255,234,119,151,178,234,106,101,184,158,153,220, 41, 14, 78, 22,251,242, 13,119,183,120,221,225,
-108, 66,227, 20, 36,205,133,118, 19,162, 65, 63,212,255, 62,121,126, 42,159,157,143,101,103,167,195,241,108,167,211,144, 42,164,
- 54,245,215,245,237,141,252,203,191,237,113,221, 2,224,209,119,175,123, 44, 56, 48,142,123,118, 51,147,167,103, 87, 68,204,226,
-112,225,115, 64,233,175, 86,169,232,185,153, 17, 96, 98,168,115, 59,119, 8, 36, 20,120,161,142, 66,142, 73, 13,157, 25,166, 12,
-245, 74,217,130, 77, 46,195, 4, 60,209, 14,157,158, 5, 27, 19, 35,193,232, 23, 29, 39,228, 67,239, 28,236,234,121,183,206, 0,
- 99,109, 4, 85, 60, 3,232,116,145,232,118, 26, 45, 58,163, 1, 60, 26,242,217, 24, 89,114,213,247, 7, 21,182,169, 51,104,161,
- 40, 71,198,144,229, 8,122,232,176, 74,174, 83,156,187,169, 2,246,243, 4, 65, 97, 85, 16,174,153, 84, 54, 4,244,133,164, 91,
- 0, 64,182,113,106,119,164, 89, 65,145, 75,191, 7,252,228,180, 91, 74,210,150, 91, 76, 88, 35,149,144,245,157,173, 46,170,118,
- 79, 34,199,140,240,217,241,114, 53, 16,111,182,211, 8, 78, 9, 96, 21, 43,246,123,179, 95,141,233,146, 24,120,102,191, 28, 59,
- 43, 90,216,110, 66, 65, 50, 7,205,106,116,111,113,192,107,141,228,141, 53, 28, 10,171,150,118, 75,158,118, 91,160,188,242,121,
-209,164,254, 88,207, 64,134, 43,131, 12, 17,201, 72,112, 8,108,228, 93,231, 44,208,209, 86, 51, 48,103,199,157, 70, 65,218,218,
-225,111, 60, 43, 78,176,238,128, 49, 26, 84,195,154,218,213,161,219,235,105,178,194,217,187, 29, 12,244, 61, 20, 40,237, 28,232,
- 53,232,118, 15, 89, 32,227,189, 53,155, 53,218,243, 98, 55,139,251,128, 51,141,243, 50,213, 2,188, 81, 43, 56, 26,174, 25,212,
-116,219, 53, 27,121,247,198,220,109,162,248,255,249,143,223,211,115, 58,144,215, 26,184,151,115,104,235, 23,152,232, 67,237,216,
-193, 60, 91, 96, 58,229,134, 35,228, 12, 39,166,230,133, 98,121, 65,149, 58,161,122,222,100, 54,229, 52, 41,138, 86, 68,228, 91,
- 41,101,197, 39,174, 53,176, 21, 72,230,141,106,198, 64,184, 94,226,236,128,140,218,150,202, 64, 3,175, 4,189,245,194,222, 14,
-159,107,222,147,108,129,190,246,137,159, 99,151,137,253,121, 18,191, 81, 11, 68,167, 72, 96,112,190, 42,101, 95,255,174,145,231,
- 68,102, 54, 29,210, 31,225,103, 31, 60,210,184,252,146,104,241, 92, 38,112,124,123,179, 9,198,115,118,118, 61, 52,133,188, 88,
- 28, 11,192,240, 34,136,127,169, 18, 6,238, 33, 38, 85, 88,107,224,122,150, 11,166,107, 14,224, 87, 83,207, 67,226,213,157, 17,
-140,158,175,205,148,244,182,181,243,166,192,179,253,244,245,156, 73, 30,137,109,163, 13, 29, 40, 94,136, 17,143,142,186,242,204,
-179,209, 59, 38, 92, 48,229,129, 7, 58,102, 78,227,201,156,178,207, 80,129,171,209,119, 65,139,170, 25,124,222, 65,107, 45,114,
- 68,142, 22,240,189,187, 29,198,165,223,124,121,174,159,123,109,244, 65, 61, 83,175,175, 38,244,100,199,185,228, 42,118, 13,243,
- 21, 83,160,163,212,180, 94,199,239,159, 62,147,149,254,247,163, 15, 62,144,163,227, 31,201,248,246, 53, 1,205,192, 97,161, 70,
-248,228,253,135,242,209,163, 99,249,254,229,133,124,249,252, 66,190,254,102, 38,247,142,239, 72,101,133, 17,121, 94,238,104,209,
- 4,249,222,172,103, 34, 80, 24,105, 60, 59, 31,113, 21, 66, 55, 0,205,101,192,137,188,212,184,139,220,136,185, 12,166, 59,184,
-219,104, 60,193, 71, 7,214, 7,212,114,104,218,211,131, 66,243,200,112,106,180,219,138,230,164, 30,132, 67,168,161, 97, 76, 20,
- 76, 90, 54,137,221, 35, 60,191,112,245,204, 12, 7,154, 80,103, 16,213, 8,165, 83,210,138, 68, 15,226, 74, 59, 93,160, 72, 97,
- 86, 18,248,182,175, 38, 79, 53,178,189, 34,190, 25, 93, 13,172,242, 80,109, 64,174, 53,142, 13,168,227, 17,176, 99,154,214, 0,
-152, 65, 42, 16,251,246,193,114, 35,159,191,234,115,239,134, 68, 14,103, 28, 28,226,208,129, 46,176, 99, 56,208,100,178,210, 96,
- 55, 89,197, 20,132,201,186, 81, 60, 14, 4, 92,153, 16,244, 54, 14, 28,134, 74,220,164, 50,225,165,174, 29, 4,198,215,122, 64,
-178, 5,159,194, 36, 8,226, 59, 45, 19,246,127,221, 91,112,228,255, 78, 75, 11,138,141,199,160,119,163, 95,223, 95,154,232, 69,
-185, 90,229,126,100,103,167,197, 78,231,243,203,141,124,121, 53, 52,228,103,161, 46,119,247,171,252,115,188, 95,112,196, 1,122,
- 64, 48, 42,104,178, 44, 96, 15, 21, 24, 98, 29,202, 54, 65,208,208,164,176,166,205, 97, 28,121, 12,168,226,212,159,208, 93,139,
- 88,101, 60,210,174,122,181,132,156, 98, 76,106,198,113, 3,135,219,227, 14, 30, 15, 51, 64, 67, 24, 83,238,106,240,185, 93, 9,
-121,252,131,197,210,164,118,185,163, 75,131,176, 79,192, 24,130, 42, 3,188,254, 25,174,237, 23,207, 7,242,223,252,236, 30, 53,
-180,201,133, 69,229, 31, 26,122,127,174,215,230,163,227,186,188,210, 34,228, 83,237,144, 71,227,153, 12,170, 80, 39,210,206,170,
-150,151,191,253,244,185, 70,212, 6,173, 24,241,158, 71,250, 64, 97,108, 12, 96, 13, 40,129, 8,130, 89,253,236,111,239,215, 9,
-252, 58,106, 67,243,216,163, 2, 31,124,158,111, 7, 99,238, 86,241,192,180,170,101, 9,245,140, 60,191,188,165,226, 27, 2, 49,
-254,174,209,110, 75,199,183,132, 50,212,195, 12, 90,152, 80,192, 39,100, 0, 17, 26, 57,152,169, 13, 17,213, 64, 9,103,205,135,
- 59,181, 85,196,249, 96,135,138,192,173, 15, 35,181,185, 93,103,111,231, 38,228,232,146, 70, 14,238, 28, 45, 86, 3,125, 96,170,
-250, 16, 3, 0, 83, 51,227, 18,152, 4,150, 75,230, 81,158,133,156,111, 44,117, 61, 19,121, 45,226, 90, 69, 61, 43, 99,125, 79,
- 25,237, 68, 50, 49,133,137,176, 51,183, 0,101, 74,118,158,115, 41,180,241,124,194,241, 40,222,111,184, 49,170, 11,238, 17, 58,
- 62, 67,184,198, 68,174,195, 42,116, 67, 93,120, 83,164,219, 56,131,149,200, 9,203,136,111,186, 3, 75, 38,128,141,227, 62,219,
-115, 23, 59,177, 26, 67, 82, 39, 78, 17, 44,113,137,122,179,221,241,155,190,188,141,115,227, 55,100,118,227,221,211,148,194,240,
- 2,145, 83, 29, 76,205,102,136,246,119, 58,228,107, 26, 86,216,103,136, 52, 72, 67, 2, 51,220,216,206, 31,154,223, 72,214, 88,
- 51,224,153,183,228,132, 61,179,117,158,220,221,174,157, 79, 57,141, 48,214,148,107,193,255,194, 84, 69, 92, 7, 75,208,211,213,
- 64,187,172, 18, 17,235, 70,157,213, 0,166, 9,118,185,198, 40, 58,148, 91, 45,148, 54, 0, 81,109, 70, 90, 48, 21,232,121,176,
-223,106,106,225,216, 52,229, 64,253,158, 82,107,159, 9,170, 63,156, 24,159, 62,222,240,249,175,149, 11, 90,236,149,120, 93,175,
-110, 71,140, 57, 93, 45,152,231, 26,103,176,135,206,100,114, 4,170, 61,189, 24,108, 69,125, 54, 4, 72,150,169, 92,183, 94,174,
-104,224,132, 51,149,119, 60,117, 4,121, 0,177,145,124,139,133,138,222,223,146,156, 0,136, 85,171, 16, 79, 48, 30,223,106,242,
- 43, 82,141, 44, 99,114,242, 38, 19,235,128,165, 16,216,217,142,182,113,143, 18,195,223,184, 25,189,108, 60, 11,210, 96,158,224,
- 92,246,181,217,162, 24, 17, 60, 2,244, 57, 29,220,246,120,118, 0, 66,148, 56,227, 44,172, 99,122,141, 31, 64,182,186, 80,212,
-247, 29, 82, 19, 95, 60, 3, 84, 94, 13,166,114,160,205,199,225,238, 88, 46,181, 89,128, 5,105,106,108, 52,114,206,141, 48, 9,
-122,239,254,190, 21,216, 98,212, 66,113,130,196, 56, 67, 40,158,193,212, 65,195,210,128,161,207, 34,116,235,191, 60,207, 26,176,
- 47, 80,122,140, 55,101,130,209,206, 46,158,147, 5,133,130, 23, 0, 56,120,219,167,152,148,213,186, 77,192, 49, 48, 3, 0,188,
- 65,115, 0,221, 39,100,132,239, 29, 30, 48,126,248,100,122,108,216,201, 34,119,176, 59,245,109, 77,133,189,125, 37,111,254,239,
-188,174,160, 46,222, 34, 22,142,101,191,153,213,231, 88, 99,252,116,195,243,142,175, 95,109,204,173,147,140, 3,104, 76, 84, 43,
- 91, 13,132,131,238, 14,239,251, 96, 52,145,127,252,245,111,100,111,119, 79,126,244,206, 35,241,214,125,189,214, 23,140, 57,207,
- 78,174, 40, 55,253,222,195, 59,218, 16,236,200,111,191,122, 46,215,215, 23,178,105,116,168, 29,176,211,237,104,145,185,203,132,
- 61, 25,221,210,133, 16,231,178,204,174,220, 60, 32, 48, 98,199, 51,133,198,160,228,116, 52,104,136, 5,141,254, 28, 48, 14,248,
-218, 57,115, 39, 44,207,241, 89,161, 73, 15,113,168, 76, 57,207,117, 12,245, 71, 72, 51, 44,112,154,146,174,116,108, 28,175,249,
-225,233,229, 68,190, 57, 27,211,154, 15, 55,249,229,197, 72, 31, 24,189, 73, 37,216,139,195,202,109, 35,203, 36,118,227, 35, 33,
-133,198, 20, 3,224,248,131, 10, 80,147,250, 44,207, 27, 21,100,236,111, 51, 94,226,172, 83,141, 78,182,113,114,171,183,227,165,
-124,253,106,100,157,136,190,129,221, 86,142,187,110,211, 19,143,137, 18, 61,189, 93,179, 48,192,131, 23, 50,240,196,206, 79,214,
-179,189,152,254, 42, 85,138, 6, 96,113,149, 10, 42,229,130, 38,197, 70,189,196,139, 15,116, 40,104, 53,216, 87,132,113, 94, 31,
-130,169,244, 38,161, 22, 6,115,189,144, 21,153,132, 1, 1,113,230,214,101, 99, 81,218, 67,130,190,148, 88, 33,195,196, 10, 64,
- 81,146, 56, 9,196,196, 76, 79,180, 3, 93, 44, 61, 6, 98,112, 46, 65,217,240,253, 44, 17,206,136,144, 64, 69, 35, 57,225, 32,
-154,151,180, 29, 64,160,195,169, 48,230,130,178, 79,217, 70,159,129,170,172,135,177, 94,172,104,208, 92, 19,176, 2,142,237,114,
- 97,116, 39,220, 44, 76, 37, 0,254,186,130, 42,146, 30,252,208,139,221,146, 84,171,101,152,141, 44, 93, 21,159, 10, 97,232,239,
-126,245,245,165,252,226,157, 61,217,173, 27, 72, 10, 63, 75, 95,138,187,161,207, 94,141, 73, 13,105, 54, 27,242,163,183, 3,121,
- 53, 6,203, 97, 77, 26, 6,174, 75,171,148,149, 75,200,204,198, 33,213, 2,121,141,214, 17, 87, 49, 48,173, 48,175,232, 60, 57,
-230,103,250,158, 14, 15,247,244, 26,207,165, 55,223,176, 2, 71,149, 73,110,189, 6,234,139,193,140,159,135, 73, 73,175,111,129,
- 92,203, 44, 19, 48,222,103,206, 51,231,191, 36,113, 70, 53,156, 40,164, 32, 47, 91,247,224,207, 33, 11,107, 9, 58,224,244, 32,
-237, 78,241,115,242, 20,237, 48,135, 43,142, 50,201,215, 54, 64, 18,186, 77,252, 44,228, 55, 8,174,224,225,169,228, 49,166,195,
- 56, 25, 26,229, 69, 38, 91,236, 90,145,164,241,131, 80,180, 60, 61,159,240,115, 67, 90,178,169, 29,251,235,171, 43,121,113,213,
- 39, 69, 12, 15, 63,198,249,124, 15,190,191, 85,132,131, 33, 67,183, 89, 32,104,114,186, 12,137,154,230, 32, 72, 59,154, 90, 33,
-239,206,154,227,122, 71, 80, 58,203, 82, 85,144,128, 29,172, 6, 28,215, 27,211, 51,236,135,177,247,166,253, 41,246,224, 0, 85,
-249, 57,183,155,181,118,125, 19,185, 22,205, 77, 55, 48, 77, 75, 77, 96,248,153, 37,237, 0,253,109, 39,104,226, 66,121,155,180,
- 37,206,100, 36, 99, 20, 43, 90,104,198,118,142,178, 14,105, 63,115,158, 9,232,206,168, 93,237,144,225, 89, 90, 63, 6,250,247,
-161,185,146,209,225, 47,118,180,183,128,252,125,236,204, 81,240,162,211,174,105,119, 61, 89,198, 68,172,119,170, 89, 22,250,171,
-181, 1,134,122,218, 88, 96,194,134,115,115, 50, 30,233,217, 95, 81,196,233, 14,152, 14,250, 90,141,186, 22,128,205,166,153,109,
-248,121,201,151, 26,188,238, 53,120, 89, 79,134,116,208,202,211,171, 32, 35,157,238,129, 94,251,103,212,189,240,197,217,153,250,
-214,136,160,200,153,205, 22,188, 22,232,120,112,249, 22,203, 5, 39,125,192,187, 0,215,179,215,110,202,159,127,242,177, 60, 61,
- 61,145,193, 0,171,149, 57,185,221,160,173,194, 82, 55, 6, 62,135,241, 48,145, 66, 98,150,193, 40, 96,192,120,128,176, 22, 86,
- 43, 72,218, 20,145,161, 25, 75,198,165,195,132,147, 27,188,199,140, 99, 54, 96,154,149, 68,111,192,113, 28,125,195, 54, 46, 50,
-143, 9, 26,241,172,215,116,223,194,125,194,153,195, 42,167,162, 69, 68,174,157,240,167,198, 78,223, 31, 13, 24,198,196,123,205,
-138, 12,134, 3,217,219,233,202,112,134,120,182,226,115, 93,209,231,122,208,191,145, 7,119,238, 73,189,181,144,127,248,226, 49,
-229,178, 83,215, 56,243,121, 79,216,245, 39,110, 45, 67, 49,171,192,166, 27,107, 74,162,218,122, 37, 93,235,160, 27,165, 83, 38,
-165,178,197,177,131, 52,102,234,107, 29, 30, 60,164,255, 66,172,239,191,144, 45,112,197,132,201, 13,139,238,212, 7, 64,155,154,
-121,228,243, 30, 96,194,246,250,122, 34,199,187,109, 45,152,242,244,221, 48,221, 5, 19, 55,194, 61,130,170, 93,198,233,229,195,
-104,103, 49, 7, 53,180, 32,133,101,200, 6, 47, 19,228,153, 59,126,242,118, 71,126,243,213,169, 12,199,115, 54, 69,104, 74,233,
-107,146, 15,248, 76,224, 89,169, 84,179,196,194, 64, 64, 11,215, 23,177,252,163,247,222, 37,253, 21,244,211,215, 24,201,175, 23,
-242,246,163,135,210,236,222,149, 81,255,148,207,238,139,243, 27,205, 91,117,190,223, 63,255,248, 29, 45,248, 39, 26, 27, 17,118,
-139,150, 96,177,222,210, 2,175,214,220,211,115, 60,145,156, 44, 12, 32,167,231, 3, 35,124,196,175,154, 95,226,152,126, 78,185,
-233, 12,227, 4,132,139, 80, 20,195,127, 1,107,236, 5,153, 3, 66, 37, 86,100,221,235,254, 88,239, 61,118,238, 17,159, 13, 76,
- 9, 11,185, 13,175, 37,114,140, 21, 39,218,104,196,122, 30,255,143, 95,189,228,248, 27, 15,227,157,110, 73,254,250,189,150, 86,
- 49,121,249, 63, 63, 61,147,243,193,146, 55, 49, 22, 75,172,158,243, 85,222, 36, 90,125, 3, 48, 68, 73,196, 13, 1, 39,168, 56,
-205,255, 58, 48,215, 30,183, 11,199, 78, 24,218,217, 64,197,127,124, 79, 43,235,234,140,163, 6,136,208,224, 26, 92,245,151,164,
- 90,193, 5, 14,187, 3,208, 14, 80, 1,118, 91, 37,118, 46, 39,253, 37,171, 67, 54, 47,250, 63,184,193,136,251, 85,103, 66,143,
-132,128, 81, 61, 30, 80, 40, 95,185, 56,197,155, 15, 97,139, 82,190, 46,187, 90,173, 69, 65, 36,159, 93,233,135, 47, 24,173,196,
-248,199,214,229, 97, 36, 14, 96,135, 56,159,220,180,251, 75, 34,227,205,115,108,185,241,248, 30,128,148,199,251,128,215,110,234,
- 45, 13,196,102, 33, 99,210,129, 1,247,179, 49, 53,228, 41,255,138, 17,138, 24,168, 15,215,164,144, 53, 16, 96,165, 24, 72,187,
- 81,208,130,104,194,135,217,139,173,144, 25,206, 87,236, 92, 23,110, 92,101, 29,142, 1,160, 80, 53,211, 92, 36, 49,250, 32, 70,
-196,192,233,172, 28,130,152, 32, 33,207, 18, 30, 84,254,254,237,239, 94,201,255,244,203, 71, 50, 36,176, 46,210, 36, 86,144,145,
-254,254, 98,176, 70,239,197,157,232,193, 94, 91,198, 80,236, 27,106,210,211,110, 96, 55,187,144,238,209, 30,187, 41,140,168,164,
-188, 16,125,155,226,205, 67,106, 20,239,239,102,165, 69, 62,127, 78, 15,244,140, 9, 17,138, 93, 19,237, 16,166,250,158,145,204,
- 70,240, 84, 46,233,117,175,231, 77, 59,125, 97,227,115,116, 11, 75, 22, 80, 9,171,103,118, 46,220,221,165, 26,247,129, 51, 67,
- 73,182, 32,176,196,233, 85,151,233,147, 60,227,247,249,142, 98,133, 32,131,132,158,161, 56,204,140,255,197, 88,145,150,154, 64,
-136, 2,136,180, 54,170,218,146,139, 71,145,163,157,142,252,229,199,135,114,255,104, 71, 26, 90, 40, 97,223,138,159,143,241, 33,
-185,220,250,153,207, 46, 7,210,159, 60,151,229,124, 44, 43,232,236, 23,106,242,234,188,199,135,157,227,115,152, 93,128,134,146,
-203,185, 14,201,118,232,213,114, 69,238,119, 43, 20,111,249,234,245, 13,147, 50,126, 54,237, 68, 99,147,148,220,176, 50,143,165,
-169,221, 92,234,254,150,139,115, 28,155, 82,158, 53, 50, 20, 62,118,124,120,255,152,240,120,105,113, 35,102,251, 88, 68,197,237,
-174, 13,174, 43,212, 28,151,161,125, 29, 13, 93, 82,224,159, 3,197,165,191,143, 28, 38, 34,240, 45, 80,111, 76,228,123, 11, 42,
- 12, 2, 83,137,163,252, 36,239,143,141, 42,215,122, 43,106, 90, 72, 35, 81,167,239, 37,195,142, 39, 34,189,209, 24, 22, 38, 58,
- 3,170, 38, 10, 0, 4,118,156, 77,120, 34,228,253,128,230, 43,133, 66, 66,153, 87,179,111,181,207,131,243, 12,212, 55, 70,191,
-185,108, 66,197,180,197,194,232,123,247,247, 90,228, 20, 31,116,155, 44,180,166,224, 13,235,153,135, 70, 1,199,141, 72,148,209,
- 82,187,251,172,148,161, 45,143,169,139, 94,155,163,253,125,249,250,251, 39, 60, 27,129,163,162, 14,198, 99, 7,124,138,185,134,
-233,207, 35,202, 79,227,122, 66,172,169,211,168,106,193,159,161, 30, 0, 10,114, 80, 70,215,235, 91, 82,236, 16,207,252,141,111,
-212, 90,167, 44,185, 70, 33, 5,121, 87,174, 74, 2,222, 43, 12,226, 40,115, 26,218,132, 8,254,236, 30,171, 74, 49, 71, 56,119,
-206,241,252,135, 49, 56,236, 6,146, 52, 77,126,182, 14,250,251,152, 83,181, 32,237,212, 19,187, 79,180,229,213,179, 57,211,103,
- 9,202,136,144,133, 13, 93, 97,201,162, 88, 19, 80, 20, 22, 72,111,186,190,190,150, 7,199,199, 84,153,195,228, 99, 79,207, 60,
-168,176,183,125,237, 58,181,104,130,183,220, 3, 45,196, 31,191, 58, 99, 49, 13,122, 84,156,130,248, 48,125,157, 25,195,130, 35,
-125,196, 38,207,254, 11,116, 57, 11,107,223,149,138, 0,102,133,198,136,162,128, 10,174, 7,166, 16, 96,101,104, 34,109, 55,218,
-242,240,120, 95,187,219, 10,239, 55,146, 49, 98, 0,174, 15, 38, 80, 60,231,122, 95,105,216, 66, 59, 96,155, 6,239,117,107,114,
- 51, 9,249,156, 35,222,162, 72,234, 52,202,156,138,141,157, 24, 83, 89,166, 84,236, 92,108,108,250,132,226, 10,197,112, 85,223,
-235,207,126,122, 44, 95,124,115, 66,128, 28, 96,173,154,122,244,218,248,122,111, 87, 26, 67,245,217,213,226, 2, 13, 30,116, 66,
-128,111, 66, 51,208,215,100,142,213, 14,174,231,221,131, 61,121,126,114, 34, 35,189, 86,191,255,234, 43,237,232,235,242,238,189,
- 67,201, 44,110,100,168, 49, 18,211, 30, 76, 70,155,245,170,220,221,235,112,237,133,248, 62,214,183,246,252,244,134,133, 2,232,
-156,141,214,174, 94,139,153,220,220, 94, 82, 63,101,161,141, 26,168,157, 4,164,235,243,143,127,208,201,195,119, 30, 77, 33,158,
- 57, 76,128,154,213, 10, 39,125,208, 19,129, 12, 47,166,135,165,156, 41, 61,194,204, 12,107,213, 57, 76,114, 42, 21,107,180,176,
-107,215,103,232, 70,243,220,253,195, 7,146,185, 30,173,229,157,227,154,188,187, 95,149,125, 56,212,104, 64,190, 90, 24,255,173,
-158,207,216,126, 46,178,153, 61,111,174,235, 6,109,173, 30,147,162,134, 93, 7, 69, 41, 60,179,188,203, 17, 48,131, 49,147,167,
-157,247, 76,254,248,122,192, 49, 60,146, 21,192, 93,251,181,156, 60,191,156,200,179,235,185, 86,219, 1,229,100,247, 31, 21, 52,
-248,101,228,112,175,194,132,141,145,206, 87,207, 7,114,187,236,201,145, 6, 74, 8, 91,224, 85, 39,129,237, 9, 49,194,205,108,
- 50, 78,169, 46, 36, 26,147, 72, 94,103, 84,130, 36,189,187,219,145,134, 94,152, 31,191,119,199, 30, 38, 10, 41,216, 94, 50, 77,
- 28,180,176,100,135,157, 53,245, 43, 0,177,144, 88,194, 37,215, 17, 87, 51, 39,180,194,234,212,124,164, 51,220,165, 71, 68,190,
- 99,109,193, 68,228,124,161,233,191,227,219,184, 19,213, 33,104, 21,139,141, 33,199,161,163,143,247,135,110, 22, 7,169, 91,133,
-121, 76,196, 32, 3,205,241,177, 86,173, 19,189,249,122,246,136,180,167,144, 9, 85,181,204, 78, 19, 19,129, 14, 20,116,244,129,
-186,209, 96, 87,202, 23,185,175,245,161,253,236,155, 35,152,239,140,112, 0,182,249,213, 87, 23,242,193,113, 91, 62,121,180, 67,
-190,249, 92, 19,197,171,193,130,236, 0, 60, 71,120,223, 72, 30, 25,238,254,109,172,134, 29,127,134, 58,208, 27,125,240, 43,154,
-208,235, 4, 42,125,113,185,148,145,182,250, 55,250,230,178, 64, 70, 69, 48,227,153,234,223,193, 90,114,197,194, 45,212,130, 34,
- 91,172,114, 76, 79, 47,100,151,156, 8,218,114,255, 32, 0, 97, 92,154, 26, 33,144,229,192, 66, 49, 33, 56,142,254,209, 98,170,
- 91,236,250, 92, 87,138,213, 14,120,217,126, 58,234,142, 98,103,128, 18,110,247,195,158,216, 62,142,220,113, 6,124,195, 99, 16,
- 77, 15, 3, 26, 77,156,237,102,141,123, 63,140,186,204,223,192, 88, 1,161,243,187, 6,162,190, 80, 44,218, 30, 31, 10,114, 26,
-200,254,240,221, 99,142,239,107,213,170, 41,142,225,103,130, 58, 9,165, 17,207,204, 35,224, 44,133,194, 1, 43,134,131,110, 91,
- 46,135,115,242,224,205,182,119,195,192, 12,225, 26, 32,101,155,181,188,188,127,255, 62,131,219,204, 89,173,206,180,242,158,173,
- 22,188,159,192, 28,144,230,197, 29,123,214, 25, 92, 88,183,132,192,201,207,149, 49, 22, 6, 10, 59,147, 72, 53,128, 93,106,246,
- 16, 37,198,144,224,245, 21, 27,179, 27,187, 36,107, 29,186, 3,112,226,252,155,181,165, 37, 30, 74,195, 98,124, 31, 25, 62, 6,
-223,139, 66,138, 62, 11,235,152,123, 74,195,176,228,244,253,216,248, 28, 22,149,152,112,197,206,157, 12,247, 13,231, 27, 26,241,
-153,196, 1,192, 98,155, 23,148,181,152,165, 15, 61,180,232, 65,231, 89,154,166,117, 46,103, 46,133,237, 90,145, 69, 57,138,251,
-251, 7,117, 22,100, 21, 76, 14,181, 59,245,245,236,174,169,129,178,230,120, 25, 19, 27,128,212, 96, 73, 58,215,235,135, 36,142,
- 88,176,187,187, 39,215,131,161,204,167, 19,198, 5,248,112, 23,194, 60,215, 8,104, 16,104, 72, 3,224, 40,180, 35,198,176, 72,
- 93,242,103,129, 42, 7,177, 31, 40,185,129, 66,248,209,123, 15,228,213,201,185,156,157, 92,176,207,134,132, 52, 78, 50,252,176,
- 86, 94,188,229, 53, 18, 3,128,162,113, 99,226, 48, 72,104, 72,214,177,187,174,137,188,193, 41, 18,128,152,196, 46,246, 88,199,
-235,113,194,233,177,176,242, 99,113,104,102, 99,255, 36,212, 20, 40,178,104,202,103,243,198, 12,208, 88,216,105,212,245, 30, 93,
-219, 52, 68, 19, 90, 76,176,212,138, 32, 83,196,138,211,139,115, 57,220,191, 35, 65,177,166,223,155,149, 23, 47,191,148,200,203,
-147,226,246,238,195,123,212,133, 63,208,164, 7,186,101,134,205,152,219,201, 98,125,161, 69,233,201,213,112, 43,118, 66, 70, 18,
-142, 23,252, 33,242, 89,167,155, 96,184, 8,240,198,193,108, 0,218,159,205, 23, 29, 32, 51,154,188,170, 84,109,195,250,228, 84,
-155, 70,216,195, 34,113, 45,214,230, 66,199,137, 84,104,235, 17,174, 64, 2, 51,213,129, 44,119,165, 52,213,179, 80, 50, 63,120,
-253,153, 48, 51,194, 20,245,226,182,207, 66, 62,155, 44,100, 6,237,249, 76,158, 73, 29,102, 47,184,212,104, 66,158,143, 55,242,
-191,255,171, 47,228,151,191,184, 43,143, 31,247,100, 48, 79,168,255, 95,171,228,228,244,106, 44,189, 1, 36,175, 3, 82, 71,209,
- 32, 82, 46, 86,147, 35, 26, 59, 80, 92, 75, 90,128, 3,105, 14, 0, 28, 30, 17, 36,254,211,179, 11,121,121,114, 38,127,250,227,
-247,181, 25,168,106,242,191,101,220, 25, 79,103,230,126,167,201, 29, 52,234, 98, 30, 66,110, 45, 57,237, 45,100, 60, 25,145, 98,
- 89,107,117, 8,220, 93, 77,111,229,201,243, 19,230, 22,207, 81,193,151, 90, 45,131,199, 62,155, 21, 41,165,141,226, 40,235, 28,
- 22, 17,159,214,108, 68, 98,238,212, 17,158,160,170,135,189,252, 77,127,201,149,226,209, 91, 29,217,237,180,184,190, 0, 99,237,
-238,189, 2, 5,157, 50,255,252, 79, 15, 52, 81, 20,181, 2, 89,209, 98, 14, 86,113,127, 60, 31, 82, 87,182,219,204,201,173, 6,
-113, 80, 14, 18,183,239, 33,229,194,224,144,252,179, 57,198, 23,161,141, 93,240, 43, 67,218,106,204, 47,132, 72,204,151,154,208,
-255,183,191,123,197,132,241,222,113, 83,254,151,127,254, 30, 19,249,135, 26,244,166, 51,236, 82, 97,129,166,193, 83,171,244,213,
- 76, 43,142,122,142, 95,187,153,194,236, 61,166,143, 52, 60,178,209,173,130, 90,179,134, 99,219,114, 99,212,181,112,177,165, 17,
-161, 59,128, 85, 32,129, 56, 24,199,131, 15, 21, 36,148,139, 37,176,128, 34, 46,209, 86, 5,205,248,239, 6, 94,203, 18,136,103,
- 50,184,230, 11,172,157,235,100, 32,181,182, 86,240,197, 22,119,218,212,182,231, 5,199,235,198,110,220,100,232,112, 32,107,195,
-200,161,134, 19,211,240,166, 55, 55,199,166, 33, 19, 44,222, 83, 46,103,154,224, 40, 80,240,247, 77,141, 18, 95, 13,128,240, 61,
-166,180,109, 93,139,132,123, 59, 77, 34,137,135,121,120,211, 11,247,183, 36, 39,121,105,215,106,128,177, 74,161,200, 0,145, 13,
-178, 46,184,152, 53,104,226, 57,126,174,103,254,234,255,215,255,243, 84,238,116, 74,180,113, 69,213,119,126, 59,213,107,161,221,
- 97, 49,103, 65,125, 35, 78, 9, 43, 35,215,183, 67, 57, 25,222, 72,112,154,112,202,176,247,243, 3, 73,138,121,121,185, 46, 73,
-185,221,146,205,176,175, 7,122,101,171, 5, 61,196, 99,173,126,111,180, 60,197,195,129,162, 8, 59, 47, 36, 0,140,140,231,110,
- 20, 14,101,167,124,190,184,213, 53, 64, 98, 77,220,232, 46,227,190,214,119,172, 10,115, 56, 11, 56, 90,181, 61,176,239, 64, 91,
- 6, 2, 2, 7,152, 78, 98,164, 41,109,182,116, 45,252, 6, 65,152,227, 67,131, 36, 57,250,151,105,223, 35,176,123,190,241,249,
- 95,159, 95,202,243,114, 40, 21,253,124,213,138,129,167,182, 90,137,137, 1,207,176, 23,197,142,255,242,124,198,174,210, 84,226,
- 60, 78,150, 40,192, 65, 90, 89,196,100, 22, 56, 16, 84,232, 70,143,135,237,188,236,182,202, 90,249, 87,229,115, 45,188,232,169,
-238, 68, 34,210,137, 16, 12, 48,176, 35, 27,234,223,219, 72,217,212,160, 80, 28,161,147,247, 29,101, 20,220, 94, 34,255,169,211,
-224,191,145,169,117,130, 55,190,103, 5, 9,121,245,145, 37,252,196,237,104, 19,151,228, 29, 68,203,117, 91,182,178, 50,213,169,
- 96,123,166,112,125,224, 14,200,235,229,191,209,114, 32,187, 32, 52, 19,141,217, 98, 77,244, 51,138, 23, 80,155,140, 22,107,197,
- 46,180,218,231,107,167, 76,233, 40,108, 25,135, 35,201, 56, 80, 35,245, 44, 22,107, 22,193,216,237,115, 90, 19, 24,198,128, 66,
- 37,152,248,105,194,192,179,129, 41, 21,192, 66, 0,219,130, 23,141,247, 80,167,176,143, 48,120, 17,196,149, 49,140, 11, 30,196,
-201,124,198,226,168,214,232,104, 66,169,176,171, 63, 62, 60,148,167, 79,159,154, 24, 72,108,153, 23,147, 61, 36,116,220,104,116,
- 63,199,221,186, 38,145, 25,187, 37,208,110, 1, 32, 44,107,129, 13, 32, 47,174,245,203,171,145,100, 10,101,129, 23, 11,226,154,
-161, 3, 76,112, 11, 83, 60,150, 60, 16, 38,210,247, 11,165,199, 13, 39, 15,250,153,181,232,136, 66,120, 35, 44, 56, 74, 77,125,
-239,125,135, 34, 39,155,193,233, 27,136,163,220, 58,173, 23,113, 3, 78, 43,150, 76,181,102,235,176,134,120, 91, 41,151,120,118,
-218,205, 6,169,123,128,235,195,225, 50,212,235,143,251, 84,175,215,229,228,236,156, 52, 57,236,111, 87, 90,144,191, 60,121, 77,
-253,243, 92, 80,144,139,155, 27, 38,161,195,189, 59,242,205,183, 55,114,118,122,193, 36, 61,231,170,211,222, 19,139, 50,125, 31,
- 63,121,120,192,194, 12,111, 14,252,246, 66, 46,179,181,245,245,157,164, 54,238,177,233, 12,192,160,102,227,240, 33,177, 60,127,
-125,110,170,115, 0,163,149, 27,114,114,121,201,134,135,146,201, 16, 90,114,103, 12,152,140,227,189,150,180, 52, 62,189,188,154,
-114, 90,131, 66,235,238, 94,193,237,192, 51,140, 7,151,131,145,233, 80,232, 85,159, 76,135,108, 66,186, 90,148,148, 53, 6,161,
- 97, 4,150,160,204,102, 50,144,138, 62,148,151, 23, 19, 59,171,155, 5,119,212,148, 92,158,207,248,124,173,146,165,212, 27, 59,
- 44, 46, 66,106, 42, 84,120,239,121,230,245,179, 63,126,249, 82, 58,205, 22, 25, 76, 76,192,144,234, 30, 15,228,215, 95,252, 81,
-206,245, 92,253,232,126, 87,175,251,140,159,163, 63,153,115, 66, 85,215,107, 74, 60,128, 38,213, 15,170, 69, 57,239, 77,121,221,
- 59,221,174,116,245,121, 23,205, 35,237,189, 68, 6,183, 55, 92,231,224,140, 83, 77, 82,239,225,219,247,246,229,249,217, 13, 99,
- 23,168,176,188, 23,177,207,162,198,214, 32, 9,233,184, 96, 18, 97, 95, 15,108, 20, 80,254, 95, 61,121, 37,207, 78, 46, 37, 92,
- 78, 36, 95,110, 75,167,189,171,205,149, 62,227,127,249,168, 43, 79,123, 51,121,113, 61,162,215,113,167, 81, 51,177,127,125, 24,
-134,115,227, 77,162, 10,244,157,168,125,186,235, 20,215,233, 2,249, 77, 48, 76,108,227,119, 90,121,106, 5,146,209, 27, 95,201,
-122,206,182,209, 30,106,140,174, 4,122,183,122, 54, 10,154,104,242, 37,125,112, 94, 64,124,160, 36,137, 62,212,183, 90,137, 7,
-250, 11,240,183,127,255,237, 21, 59, 62, 4, 65,104, 70, 99,103,178,210,206, 63,175, 9,232,124,182,226, 3,218,108, 86,141,250,
-177, 49,180, 47,246,217,184,145,236,154, 0, 10,211,247, 17,229,172,123,193, 5, 34, 39, 56, 50,100, 34, 59,155, 31,252,147,152,
-213,184, 27, 5,235,197,142, 23,114, 80,174,201,163,118, 44,191,250,190,207,106, 20,251, 14, 96, 0,240, 47,246, 35,188,232,224,
- 38, 34, 41,162, 83, 14,156,190, 51,105, 70, 89, 62, 88,182,217,132, 63,121,134, 59, 72, 92, 7, 36,190, 78,181, 36, 7,213,144,
-137,104,166,215,122,183,136, 57,254, 76, 11, 38, 61,172, 85, 13,118, 81,137, 69, 3,170,180,112, 99, 72,127,223, 61,249,232, 90,
- 9,226,163,221, 98,100, 0, 69,223,130, 35,167, 40, 12, 34, 17,121,207,151, 55, 19,249, 71,237,216,255,251,159, 31,147, 3,121,
- 59,117, 90,222,155,128,157, 35, 45, 91, 55, 27,114,225,123,183, 51,233,221,192, 89,110,194,113,210,255,253,233,169,188,253,238,
-158,228,181,218,191,185,121, 45,125,237,126, 38,240, 17, 23,235, 84, 61, 7,161, 65,193,146,238, 9,217, 49, 51,232,153, 48, 14,
- 69, 51,156,192, 10,170,236,192,249, 72,207, 52, 48, 21,176, 2,208,135, 94,220,168,189, 90,201, 56,119, 53,235, 82,124, 71,243,
- 73, 91,157,244, 30,197,137,169, 78, 17, 24,231,232, 63,236, 6,157,234, 89, 42, 60,130, 81,188, 32,200,102,205,195,156,174, 99,
-232,248,203, 69, 43,226, 88,212, 64,215, 63,107, 62,245,177, 57,163,101, 3, 59, 16, 24,231, 1,149,139, 81, 97, 42, 53, 35,219,
-245,142,233,131, 27,226,220,219,106,177, 3,253,141,196,254,105,108,212, 55,252,105,173, 92,113, 43,156, 88,142,247,187,196,165,
- 12, 39, 99,227, 64,251,214,229,193,104,133, 43, 2,207,174, 41,186,188,208,225, 47, 80,144,226,253,226,154,227, 92,209,107, 29,
-188,114,120, 71,235,185, 26,106,165,158, 56,134,138,231,146,170,108,173, 62,237,247,145,243,119,224,222,214,247, 28,167,221, 64,
-125,246,153,146,237,136,223,243, 29,215, 29,139,183,200, 38, 3,152, 54,249,206, 18, 25,171, 10,116,173, 40,222, 41,160,161,207,
-196,112, 22,211,217, 12,227, 99, 4,234,213, 90,139,212,146,105,199, 67, 61,174,234, 71,252,156,208,138, 88,227,218, 64,221,110,
-185, 50, 69, 51,125,173, 35, 13,208, 16,170, 66, 44,193,231,198, 84,224,242,118,198, 17,239,100, 22, 51, 89, 84,203,144,251, 92,
- 72,206,131,203,217,138,103, 20, 69, 44,220, 7,151,139,169, 62, 62, 99, 67,171,103, 67,118,222,245, 90, 67, 99,202,200,105, 85,
-192,193, 42,225,152, 54,230,216,211, 62, 7, 24, 54, 11,208,222,138,198,253,118, 83,114,238, 55,129, 98, 71,162,252,232,131,183,
-180,243,237,201,116, 48, 54,182,141,216, 56, 30, 9, 0, 0, 92, 58,154, 73,134, 32, 94, 22,161,232, 68,193,166,160, 71,106, 22,
- 27,121,119, 95, 83, 28,188, 77,172, 98,223, 40,169,129,187,231,156,162, 80, 77, 80,220,125, 48,107,218,216,105, 21, 96, 69, 83,
-172,213,217, 53, 67,121, 12,138,105,144,110,205,208, 40, 72,248,124, 79, 86,125,247,252,123,188,222,152, 22, 34,238,193,197, 12,
- 76,134,235, 73, 40,143,159,126, 39,143,238,252,181, 28,223,125, 75,147,194,153,254,236,153,197, 77,171, 58,220,164, 6, 84,191,
-103, 46,214,155,106, 30,113,123,145,137,201,164,222,240,190,251,122,160,184,241,108,102,124, 3,250, 1,253, 15,122,112,167,115,
- 40,123,133, 38, 53, 39, 64,216,136,162,128, 46,133,121,174,164,244,235,155, 1,197, 84, 48, 94,199, 10,182,156,247, 8,186,123,
-118,214,147, 59,251,187,100, 24, 65,254, 21,207, 6,206,238,120,216,231,168, 25, 6, 51,235, 56, 67,154, 26,138,184, 5, 38, 94,
- 97,150,211, 35,116,179,175,207, 7, 50, 94, 38,252,236,208,185,192,123,234, 54, 74,156, 66,140,250, 83, 41,150, 59, 98, 82, 40,
-214, 0, 96, 90,137,226,144,207,165,216, 52,240, 6, 76, 11,210, 30,215,108, 26,128,140,255,250,241, 99,210, 56, 31, 30,182,165,
-158,159,217,228, 12, 19,107,128,253,244,107,176,146,171,104,129,114,247,176,193, 93,250, 89,111, 46,207, 95,206,244, 58, 32,233,
-118, 53,246, 84,244,245,175, 73, 33,172,149, 12,200,125, 53, 88,240,108,224,158, 70,174, 73,197,231, 13, 35,243,155,231,228,114,
- 99,147,232,141, 3,108, 3,183,131, 34,231,237,227, 93,185, 25,250,196, 60,129, 41,129, 98, 62,243,244,108, 32, 47, 70,144, 92,
- 12, 73,107, 64,194,131,168, 62,110, 16, 70,101, 24,167,192, 81,204,226,174, 73,183, 58,242, 5,119, 84,208, 38,223,104, 39, 7,
- 30,115, 12,154,149, 73,143,177,226,242,196, 0, 68, 68,195, 3,164, 5,223,234,101,104,230, 5,250, 0, 45,198,107,249,244,171,
- 43,121,247,110, 91, 10,250, 61, 55, 83,243, 79,134,185,202,231, 47, 71, 60, 48,141, 74,150,163, 19, 80,159,170,160, 78,212,178,
-146,228,114, 68, 93,226, 1,206,145,130, 19,114,132, 23, 69, 6,246, 9,152, 88, 12, 29, 13, 26, 10,170, 76,116,251,116, 50,139,
-140,114,183,213, 3, 35,216,202,185,206, 37,206, 8,100,173,149, 92, 33,145,111, 78,135,242,241, 49,196, 55, 2,121,126,179,148,
-187, 59,120, 15, 57, 55,102,183, 46,135,206, 70,126,224, 16,153, 70,185,163,119,117, 98, 11,180, 48,118,210,157, 12,154, 49, 63,
- 7, 14,201, 65,197, 39, 61, 13,171,136,139,254, 68,222,213, 67,112,111,191, 41,191, 59,157,176,226,131,224, 0, 14, 11,246, 77,
- 87,131, 25, 63, 91, 18,155, 14,189,117,108,218,105, 66, 69,137,227,188,144,234, 91, 28,137,194, 81, 43,137,156, 70,184,167,197,
- 68, 78,254,254, 15,167,114,212, 46,112,140, 9, 58, 6,198, 77,102, 7,152,112,100,153, 35,175, 28,168,209, 80, 43,216, 58, 17,
-251,173, 90, 94,142,238,237, 74,165,214,182, 93, 28,252,203, 97, 41,234,219,222, 30,238,106, 75,103, 57, 90, 46,150,173,168,194,
-232,220,237,112,211,105, 65,194,251,178,217,162,174,125,215,137,115,133, 1,117,164,196,170, 85,187,160, 30,185,161,134, 10,150,
- 45,142, 3,149,173,183, 45, 86, 28,168,200, 55, 20, 43,246,216, 28,231, 33, 97,164, 29, 62, 11,189,136,187,124,130,242,208,157,
-106,245,139,209, 55,184,175,199,119,246,165,213,174,243,108,179,235,119, 62,234, 4,139, 69, 27,135, 46,143,105,148,209,143,237,
-172,164, 96,184, 92,198,198,183, 84,212, 66, 96, 78, 76,172,133, 90,218,137, 21, 18,165,114,153, 15, 62,206, 83, 77,187, 0, 0,
-229,128,132, 69, 20,203, 57,144,156,231,180,250,197, 51, 97,155,130,147, 23,205, 58, 32, 96,134,114,161,230, 92,136, 73, 18, 19,
-160, 27,225,211,189,208, 21,213,246,186, 22, 8, 88,160,120,118,197,210, 21, 83,250,117, 54,133, 72,149, 32,237,226, 18,233,157,
- 56, 53,170, 20,120,199,238, 95,152, 44,225, 39,142,157,112,146,100,236,158,107,144, 70, 34, 4,128,118, 53, 11,249,117, 68,108,
-139,105, 79,155,153, 76,134,193,202,246,210, 66, 1, 35, 72, 68,103, 28,239,121,200,239, 51, 42, 24,206,147,137,123,196,124,182,
- 47,110, 87, 50, 94,152, 35, 28,112, 34, 79,110, 34,249,232, 80,159,111,141, 63,163,201,194,188,221, 3,113,235, 22,232,207,235,
-107,232,249, 69,247,138,187,184,208,110, 25, 69, 65,171,213, 97,241,214,104, 54,101, 79, 63,195,139,179, 51, 34,133, 3,135,180,
- 7, 67, 1,138,106,167,253,165, 91,211, 0,168,152,103, 96,207,225, 94, 96,244,138,209, 55,232, 98,116,205,195,139,230, 88,160,
-123,252, 60, 14,196,198,238,219,196,109, 54,209,138,116, 84,244,146, 27,174, 52, 98, 91,105,121,206,111, 34, 77,130,190, 1, 7,
- 65,152,231,115,224,164,122, 17,176,115, 57, 3,254,154,116, 50,232,107, 49,187,113,104,255,167, 58, 10, 80, 29,132,252, 49,116,
-198,203,197,174, 38,146,130, 51, 10, 17,198, 67,172,229,182,231, 74, 12,239,131,102, 2, 46,109,197, 76,196,162,202, 11,231,210,
-191, 57,211, 55, 84,149, 71,119,239,202,228,155,239,201,146, 65,161,106, 12, 6,159,231, 27,187,241, 57,100,151,193,154,136, 61,
-183,247,182,164, 13,109,126, 83, 3,180, 9, 72,192, 9,196,138, 22,187, 48, 72, 33, 43, 40, 11, 35,174, 60, 19,221,219,111,125,
- 32,205,106,129, 35,123, 92,111, 76, 42,129,191,201,195,249, 76, 11,143,254,112, 70, 67,153, 7, 7, 77,114,214, 71,139,107, 41,
- 5, 27,105,148,214,242,251, 87, 19,138, 53,197, 27, 45, 20,244,207,128,254, 71,119, 12,199, 54,143, 83, 41, 80, 89,225, 5,144,
-215, 2, 87,147,114, 57, 39,154,145,228,118, 50,226,115,215,170,102,101, 26,198,204, 17, 59, 13, 80,253,214, 28,131,207,181,177,
- 72,216,173,235,243, 88,177,216,138,157, 57, 41,159, 88,183,105,241, 15,218,109, 26, 67,160,113, 15, 57,218,223,126,254,133, 44,
-151,239,202,253,195, 29,109,192,132, 0, 91, 38, 94,172, 46,245,254,105,216, 97, 49,130, 81,248, 59,250,235,234,102, 42,253,241,
- 80,194, 66,137, 19,205,253,195, 99,109,102, 42,210,187,190,164,199,202,116, 17,145, 29, 83,211,247,135,201,146, 97, 52, 76,112,
-136,192, 64, 42,208, 89,241, 1, 69, 81,159, 14,111, 38,131,252,228,213,153,228,242,101,105,105, 67,180,187,147,231, 73,203,188,
-208,132,209,155,174,233, 25, 59,210, 7,110,180,184,213,139,181,161,159,120, 76,148,111, 68, 17,132, 20, 36, 39,110,192,233, 39,
-246, 16, 3, 29,125, 49,152,243,200,131, 99, 14, 66, 39, 68, 15,176,195, 68,231,254,240,192,136,246, 56,116, 13, 77,206,207, 95,
- 12,136,120,245, 16, 52,103,145, 28,236,183,164,191, 48,194,253,120,169, 15,221, 36,228, 72,228,222, 65, 75,122, 35,243,122, 30,
- 77,150, 50,242, 86, 18,233,247, 87,154,101,233, 13,215,212,229, 53,132,189,176, 26,198, 46, 2,114,134,157,122,158,224,190, 8,
-242,172,122,163,159, 93,173,120,227,124,253, 59,128,217,146,216,198,178,180, 44,117, 84,160,254,120,197, 7, 29, 93, 23,192, 99,
-111,233,123,254,249, 59, 59,242,245,171,158,124,123,218, 23, 63,246, 13,196, 54,158,203, 8, 86,144,129,239, 64,118,166, 7,141,
- 34, 37, 74, 82, 58, 80, 10, 94,242, 77,214, 48,140,216,225,103, 51, 21,118, 95,216,167,195, 0, 37,136,215,242,182, 86,123,127,
- 56,155,218,200, 89,111, 98, 11,186,214,131,144, 85, 88, 16,228,152, 68,206,122, 67, 45,178, 38,250, 80,229,184,119, 78, 53,184,
-119, 43,101,178, 15, 24,224, 56,204, 50,167, 30, 82,232, 16,130,130, 28,163, 56,120,214, 55,183, 35,249,155,223, 62, 99,176,233,
-141,180,211,233,143,185, 59, 70, 50,207, 56,221,111,136,247, 80, 62, 87, 79,100,163,145,151, 59,247, 26,156,124, 64, 44, 7, 9,
- 29, 9,212,243,205,130,118, 29, 46,200,235,204,102,179,142, 51,238,220,251, 66, 3,165, 17,133,237,184,209,158, 67,102,211, 28,
- 4,213,188,159, 88, 21, 15,243, 14,135,116,143, 93,226,244, 28,128,145,206, 99,219,132,101, 0,186, 20,237,158, 34,191,253,146,
-249,124, 39, 14,216, 72, 23, 35,140, 34, 53, 57, 34,105,162,130, 6,184,142, 35, 62,173,226,171,154, 92,161,221,140, 7,179,232,
-246,212,220, 37,186,100,108,210,177,166,214,133, 36, 10,121,198,239, 53,128,149, 52, 64,100,244, 65,194,231, 5,245, 9, 96, 29,
-234, 77, 59,218,100, 54, 12,183,232,244, 12, 86, 33, 65, 81,114,229, 42, 71,237,229, 18, 20, 22, 43,110, 7, 31,200,110,173, 70,
- 44, 72, 81, 19, 35,198,123, 64,218,214,232,242,180,214,115, 91,149, 37,168, 80, 90,173, 35, 72,162,136,145,124, 66, 93,106,156,
- 3, 36,192, 12, 65,168,129,123, 2,133,103, 1, 99,231,196, 21, 76,203,112,237, 84,241, 76, 74,216, 51,223, 68,135,135,241,204,
-231,220, 25, 20,121, 84, 24,244,157,250,153,255,255, 81,213, 35,158, 33,182,169, 11,186, 59,156, 97, 78, 38,178, 70, 93,221,184,
-105,138, 83,169,148,153,191,118,218,243, 30,207,110, 1, 84, 72, 13,220,207,207,151,114,176, 83,227,251, 6,213,200,168,118, 32,
-253, 10, 71,235,233, 42, 12,231,231, 85,111,194,245, 16,254,108, 78,219, 81, 61,119, 26,143, 38,171,188,220,237, 22,228, 15, 47,
- 70,124,255, 13,125,254, 7,195,169, 94,175,178,182,166, 43,114,221,177, 80,221,237,182,228,228,226,146,123,101, 20,207,136, 5,
-152,165, 20,202, 77,189,198, 19, 94, 83, 76,181,204, 23, 29,224,205,162,232, 37,167, 62, 71, 20, 26,215, 26,199, 16,248, 22,236,
-126, 97,138,132,253,106, 79, 11,218,225,116, 40, 77,136, 21,117, 31,200,217,249,149,204, 16, 7, 28,154,253,174,158,183,253, 78,
- 87, 46,175,175, 40, 0, 66,209, 23,116,239,197,146,158,199, 21, 45, 87,163,136,254,162,140,167, 88, 63,145,122, 20, 69, 91, 35,
- 44,220, 99,143,148,172, 60,187,101, 60, 31,104, 12, 32,203, 12,170,108,214,241,237,113,223,242,100,142,100,216, 81, 94,235,123,
-219,209,152,145,132,218,161,105, 66,187, 29,106, 71,171, 73, 12,207, 3,238, 29,132,143, 0,116, 92,129,110, 8,107,214, 82, 36,
- 15, 52,201, 76,244,179,207,166,125,201, 85,139,114,247,248, 1, 1,173,160,117, 46, 66,243,185, 48, 55, 54,179,134, 61,187, 25,
-235,231,159, 17,248,139,184,141,243,135, 49,188, 73, 15,155, 62, 4, 70,198,141,106,137,215, 3, 9,183, 89, 41,177,145,202,210,
-216,197, 48, 28, 3,141,177,232, 72, 79,207, 78,201, 47,199, 20, 2,120, 0,176,163, 16,251, 81,100,117,244, 89,217,109, 2,239,
-210,148,146,118,235,191,253,238, 84,254,217,199,199,218,244,237,211,225,237,195,125,125,222,163,166,124,167,205, 22, 94, 15, 50,
-209,165,156, 25,142, 29,237,182,228,195,183,118,181,190,209,164,251,245,149,220,251,197, 3,153,252,221,151,114,255, 81, 91,246,
- 52,150, 79, 53, 79,157,126,215,147,243,155,137,124,252,225, 67, 57,189, 50,107,106, 2,117, 89, 84, 89,225,153,117,204, 28, 0,
- 78, 67, 61,195, 40,168, 80, 56,193, 85, 17, 64, 58,200,185, 30,236,116,229,249,171,215,242,252,245,169,252,242,231,159,200, 97,
-179, 68,192,166,239, 25,165,116,185,140,141,226,156,216, 40,238,104, 87, 27,195,102, 40,167,151, 83,125, 6, 50, 60,231,173,238,
-142,118,244, 21,185,189, 58,167,158, 62,223, 71, 37,207, 34, 26,130, 92,112, 63, 4,203,164, 81, 45,144, 85,130,247,132,184, 10,
-172, 21,116, 71, 2,103,187, 13,236, 73,189, 14, 19,152, 27,217,217,211,248, 86,210, 24,241,235,167,125, 57,189,153,155,110,110,
- 22, 26,205, 85,126,200,239,207, 71, 28, 31,101,221, 88,197, 22,155, 34,222,246, 95, 7,156,211, 64,246,100,176, 97,151,159,112,
-204,100, 50,124,120, 80,209,209,188,125,152,231, 13,226,200, 84,131,195, 55,250,112, 50,134,235,255,212, 43, 57,142, 64,168,202,
-228,198,152,141,114,158,135,106, 71,127,118, 67, 15, 93, 79, 19, 16, 16,211,120, 45,160,228,241, 97, 58,141,162, 73,113,102,131,
-173, 8,137,217,221, 37,220,205, 80, 70,149,129, 54,144, 71, 59,182,207, 93, 97,231,137, 93, 90,198,219, 78, 82,151, 20,205,217,
-200,239,159,220,202,229, 96, 45, 31, 62,104,105, 50,239,202,113,167,204, 4,216,173, 21,244,225,153,203, 42,179,144,111, 46,110,
-228, 12, 43,138,217,194,228,103, 37, 29,113, 38,219,125, 49,186, 3, 88,223,197,146,202,116,190, 81,195,203, 6,182, 55,195, 56,
-173,160, 5,211,116, 55, 35,159, 52,187,146,209,235,174,103,128,239,255,245,235, 43,249,242,105,143, 52, 12,140, 34,191,121,213,
-151, 23, 23, 19,162,108, 61, 89,184,125,185,207, 17, 54, 18,101, 24,135,236, 60,168,203,204,138,149,150, 16,100, 39, 80,172, 6,
-163, 69, 77,210,155,120,169, 15,231,140, 29,126, 64, 16, 91,222,186,226,216,140,106,150,235, 5, 17,192,185,130, 22, 1,122, 77,
- 43,149,128, 35, 93, 84,138,133,194,202,129,209,132, 2, 11,129,111, 0, 14, 8, 55,172,156,134,185,117,172,150,212, 17,152,124,
-223,246,106,168, 96,211,206,153,158, 1,190,117, 39, 5,231, 27,157, 26, 31, 32, 40, 19,164, 24,134, 78, 72, 38,207,247,237,101,
- 50, 91,134,194,154, 94,226,222,150,139, 79,180,173,211,159, 76,187, 79, 27, 15,134,219,162,202,246,202,150,120,144, 88, 16,100,
- 0,250,193,244, 35, 33, 79, 86,139,185, 32, 96,247,157,210, 44,197, 81,160,144, 56, 13,153, 31,240, 65,142, 35, 3,198,177, 8,
- 28,141,182, 96,190,148, 31,142,235,128, 0, 32,169,227, 90,100,120,144, 85,104, 2, 65,240,116,135, 39, 60,146, 21, 58,224, 74,
- 41,195,228, 14, 58, 77, 54, 99,232,233, 70,181,198,235, 52,154,153, 15, 61, 65, 85,145, 77,102, 18,135, 70,198, 53,207,113,132,
-108,211, 5,140,237,205, 80, 37,230,103,220,196,230,121,206, 66, 67,146, 45, 27,132, 35,101,255,141,171, 92,146,250, 54,254, 0,
- 69, 31,184, 51,154,114,235,137, 87,113, 88, 16,138, 16,185,207,204,233, 80,152,184,110,212,144,203, 72,162,136, 21, 68,152,163,
- 8,214,179, 85,173, 20, 41, 40,133,201, 20,146, 6, 2, 51, 18, 18,144,195,166,143,237,118,184,144, 73,158,134, 12, 49, 88,231,
-133,107, 3, 80, 97,172,255,170, 31,202, 97, 77,139,121, 61,155, 0, 19, 53, 26,101, 50, 46, 64, 7,106, 86,243,236,232,103,235,
-165,204,230, 30,119,160, 64, 18,175, 22, 35,199,128, 40,112, 37, 0,211,142,197, 66, 19,158,196,156,136, 68,241,146,207,143,112,
- 21, 83,102,252, 65, 55,182,138, 98,231,152, 85,100,129, 87,213,251,129,107,211, 27, 12, 37,163, 49, 12,170, 97,181,137,249,183,
-199,182, 94, 55, 15, 6, 49, 29,126, 20, 2,185,172,137, 75,121,177,209,195, 34,142, 77,197, 9,207, 8,187,194,152,138,133, 38,
-254, 2,224, 95,194,249,123,192, 68,137,194,168,161,201, 45, 21, 90, 98,115,228, 10, 89, 20,187, 0, 82,226, 68,161,248, 64,183,
- 11,109,137, 74,161, 44,235,225,165,198, 30,125,255,122,166, 80, 24,228,179, 38, 53, 11, 97, 49,196, 79,198, 8,189,151,213, 60,
-158,201,181, 12, 48, 21,141,110,181,240,212, 88,231,151,228,159, 62,251, 29,175, 61, 98,103,198,201, 6, 71, 27,211,204,248,240,
-222,142, 54, 34,121,202,113,227,223,136, 43, 19, 33,232, 13, 64, 54, 76, 4, 46,110, 7, 91, 64,104, 1, 0,107, 3,118,176,123,
- 39, 19, 64,191,234,206,209, 59,124,230,128, 35, 9, 92,145, 46,206,159,195, 76, 62, 77,151,225, 59,109,116,206,123,150, 64,175,
-167,162,223,167, 49, 93,147,234, 31, 95,222, 72,187, 86, 38,133,113,230,214, 51, 56,143,135,187,109,121,125,179,146, 47, 95,124,
- 35, 87,250, 62,120, 95, 40,114, 54,151,191,255,162, 47,209,103,175,184,190, 58,222,175,209,206,245,239,254,233,177, 22, 93,187,
-114,247, 65,199, 10, 87, 8, 69, 69,198, 82,168,150,141,117, 5,154,115,190,144,179,201,104,184,161, 89, 83, 68, 27, 98,211,158,
-192, 36, 14,113,224,223,252,195,175,228,207, 62,249,177,188,119,167,169,133,106, 72, 44, 18, 10,250,192,129,112,113, 77, 96,146,
-132,220,243,224,168,206,132,125,174,177,120, 8, 22, 75, 65, 11,136, 98, 93,222,125,164,175,169,133, 25,206,116,171, 94,224, 84,
- 10,236, 48, 95,207, 59,168,230,134,217, 89, 19, 7,130,107, 52, 1, 85, 80, 63, 35, 44,204, 75,133,137,188,117, 71,244,140, 78,
-229, 31, 62,123, 45, 69,208,254, 78,123,115,237, 38, 48,186, 45,240,166,129, 35, 89, 43, 25,221,136,123,104,176, 94, 18, 11,114,
- 94,226,198,148, 78, 77, 26,227, 59, 4, 72, 28, 28,113,138, 86,220,199,232, 77,172,229, 77,148, 5, 15, 46,213,132,162,136, 35,
- 19,112, 6, 17, 92,241, 26,168, 50, 38, 24,163,123,198, 83,111,233,159, 1, 84, 70,244,121,226, 49,105,239,119,235,116, 80, 67,
-130, 12, 87, 51, 46, 85, 1, 76, 3, 69, 11, 7, 30,192, 1, 20, 29,171,200,222,213, 88, 47, 66,224, 70,234,126, 98, 29, 57,146,
- 83,144,152, 14,188,201,171,218,152, 30, 23,229, 86,171,110,216,144,254,215, 63,187, 43,247,118, 43, 12, 50,155,208,186, 76, 32,
-213, 59,205, 42,187, 54, 32,243,255,238,243,115, 25, 14,237,230,199, 14, 56,136,160,139, 98, 7, 32,161,221,122, 78,139,131, 57,
-145,224, 4,239, 33, 33,121,166,207, 43, 73,236,212,162, 60, 42,199,237,228,106, 26,176,202,180, 29, 44,105, 0,252,246, 60,171,
- 5,204, 68,138, 65, 68, 29,107,128, 8, 57,126,213,239, 47, 6,121, 75,210,110,167,139,251, 81,209,131,237,107, 64, 47,102, 3,
-183,175,141,222,112,152, 19,227,108,227, 96,141,103,176,115,180, 17, 26,254, 22, 69, 69, 64,170,141,191, 13,210,160, 93,192,185,
- 8,107, 13, 28,222,219,225,128,122,196, 51, 7, 16, 51, 89, 83, 19,132, 33,146, 60,151,227,123,195,168, 60,116,201, 7, 32, 47,
-207,153,158,224,158,167,212, 53, 80, 59, 76,222, 52, 96,224, 75, 53,161,127,104, 10,196, 42,212, 21, 73,248,121,184,159,232, 72,
- 8,108,244, 34, 87, 24, 37, 28,135,227,189, 36,110,193,110,167, 50,213, 50, 55, 53,178,208, 1,244,216,141,122,254,150, 34,134,
- 2,163, 63, 28,179, 96,179,137,132,241,147,125, 87, 92, 96,172, 74,238,188,103, 99,104, 32,142,247,181,184,154,107, 96, 91,206,
-215, 54, 77, 33,187,195,151,209,114,206,175, 65,160, 12, 28, 29, 12, 15, 57,164, 29, 13,175,145, 56, 96,219,134, 6, 32,165, 92,
-149,202,126, 80, 29,195,117,162, 46,130,196,212,255, 54,228,234,146,239,179, 92,200,111,109, 82, 55,110,220,138, 60, 92,212, 34,
-103, 69,176,210,210,121,180,219,200, 54,244, 76,178, 24,252,120,115,107, 75, 51,184,237,193,211,169, 90, 90,196,122, 14, 57,111,
- 48, 5, 75,202, 28,245,255,128,157,128,169, 6,198,165,182, 47,143,217,141,153, 96, 82, 66,144,104,193, 41,145, 65,174,213,167,
- 5,166,237,250, 49,141,130,127, 0,129,100,216,127,107, 66,199, 71, 25, 77, 86, 68, 88,227, 89,170, 21,124,118,100, 8,250,158,
-103, 8,123, 60,247, 17,153, 37, 9, 59,232,200,204,205,184,198,128,224,202,124, 81,144,203, 78, 65,142,187,101,237,208,198, 20,
- 54,162,243,213,112, 41,199,229, 2,169,115, 64,172, 3,185,140, 96, 10, 99,145, 21,193, 91, 11, 9,137,117, 8,244,190,148,153,
-232,198,243,107, 77, 82, 54,173, 88,235, 61,108,150, 3,185, 25,218,168, 31,170, 92, 9, 1,158, 38, 86, 67,191,113, 56,225,149,
-107,134,121,208,103,225,201,104, 34,237,122, 81,142,239, 30,200,203,139,107, 6,108, 92, 27, 76, 14,112,198, 3,119, 30, 55, 24,
-245,110,214,236,192,137,132,119,142, 93, 91,103, 75,234, 86, 4,188,102,139, 69, 68, 74, 48,134,156,212,216, 32, 89, 33,195,251,
-142,239, 47, 38,121,247,121,130,109, 97,139,243,134,152, 10,106, 27, 40,110,224,106,163,123,227,132,210,197, 95,172, 16,215,122,
-246,226,124,137,207,115,177, 4,132,118, 73, 19, 66,200,181, 89,187,123,196,117, 4,158,155,189,157,251,210,121,241, 66, 30,191,
- 60, 49, 48,154,211, 17,247,221, 26,236,243, 39,167,140,169, 44,202,233,113, 96,152,146, 84,247, 0, 49, 5,197, 52,133, 86,138,
- 89,118,184,152,126, 48,105, 5,174, 1, 76,150,142, 78, 88,144,142,198, 73, 78,248, 96,126,226, 88,252,169,250, 31, 10, 98,208,
-164, 81,212, 31,236,236, 82, 18, 57, 89,143,101, 49,185,229,202, 21,114,193, 40,134,177,238,184,187, 91, 35, 72, 14, 19, 50,116,
-201, 40,182,224,206,183,163,247,232,242,118, 44,247,119,202,210,187,157, 24, 11, 71, 95,251,236,242, 86,110,111, 46,228,250,122,
- 41,149,246, 74, 58,179, 57,167, 42,216,225, 19,199,177, 50,223,114,140,183, 41,118,133, 51, 61,159,241, 57,199,251,197,164, 15,
-133, 2,158, 61,232, 93, 0,155,131,132,255, 68,175, 29,138,245,247,239,117,164,169,137,157,234,122,177,173, 62,170,213, 34, 11,
-107,112,246,113, 94,176,230,184,191, 95,146,158,158,223,193, 20,116,202,146,230, 46,248,179,195,133,115, 33,151, 87, 3, 51, 51,
-202,219,202,139, 22,219,110,229, 26,109,140, 85, 20,174,140,230, 7, 32, 36, 26,130,222,104, 69,206,253,127,250,163,251,108,124,
- 51,119,245, 5,142,119,106,244, 30,191,236,141,152,104, 47, 6, 38, 48,143,125, 54, 14, 10,140, 68,114,174,155,216, 56, 72,126,
-146,152,168,188,239, 56,154, 84,135,242,189, 31, 84,189, 9, 93,169, 8,120,114,200, 91,227, 61, 26,160, 38,166, 50, 85,236,168,
- 50, 27,238,185,177,111, 51,177, 25,143,149,102,129,188, 43,143,102, 50,144,118, 61, 27,111,184,227,192,216, 38, 97, 85,239,211,
- 2,145,128, 86, 3,220,179,106,244,201,159,143, 52,225, 69,172,146, 8,162,114, 93,213, 20,220, 90, 61, 52,192, 13, 96,236,142,
-230,183,173,213,209,112, 14,254,172,209, 24, 0, 14,242,217,201,199,102,164,161,255, 30, 52,114,242,159,127,178, 43,191,249, 86,
-228,110,183, 70,206,227,103, 79, 47,245, 96, 85,228, 78,171, 36,119,219,101,106, 99, 63,185, 26,203,111,159, 92,203,120,106, 18,
-168, 8, 90,177, 30,192,152, 99,242,205, 54,241,222,206,214,242,247,143,175,229, 84, 19,121,137, 34, 13,115,130,114,124,125, 32,
- 96, 4, 0, 93,227,200,153,178,172,162,144, 96, 35,140,232,211,206, 21, 9, 66,123, 35,189, 30,115,183, 19, 14, 28, 58,222, 20,
-231, 18, 47,113,200,107,147,163,205,122, 57, 11,112,185,138, 9,117,248,102,165, 11, 3,133, 36,209,206,187,156,151, 98,189, 77,
-189,109,113, 28,118, 20, 44,205,106,147,157, 51,198,205,161,171,186,121,173, 29, 93,135, 69, 66, 62,112, 59,217,141, 3,171,101,
- 44,193,185, 85, 7, 0, 62,216,105, 71,206, 37,204,254,155,108, 53, 1, 54,206,196, 36,237, 22,233, 61,237,118,167,129,227,174,
- 39, 78, 25,142,130, 60,190,117, 64, 76,124,145, 33,185, 3, 71,145, 51, 48,100,108, 94,214,238, 90,121,129, 41,121, 71,148,128,
- 53, 19, 13,168, 52,101,188, 2,247,245, 52,214,225,104,197,146, 13,121,182,171,144,133, 9, 36,116, 97, 38, 50,139, 22, 44, 56,
-144, 32, 72, 47,202, 23,232,250, 70, 93, 2, 72, 45,235,239, 1,132, 51, 23, 53, 67,232,103, 64,147,212, 87,168,107,245, 63,158,
- 47, 28,248,205,128, 96,112, 44,243, 27,190, 22,173,109, 57,185,190,214,215,244, 25,228,219,141, 26,159, 11,200,149,226,245,240,
- 57, 12,208,232, 76,142, 28,232,144,146,180, 14,148,197,145, 56,249,222,126,154,211, 37, 29,174,165, 40,120,155,140, 8, 59,122,
-223,209,214, 18, 49, 29,244,237,164, 35, 49,209, 40,223,233,194, 59, 86,245, 22,149, 77,113,145,108,242, 6,243,224,138, 76, 76,
-181,184,211,197,181,211, 99,129,253, 94, 76, 90,165,169,216, 1,216,132, 46,144, 22, 78, 78,223,220, 19, 51, 20, 33,189, 51, 54,
- 26, 34,247,255, 78,112, 41, 71,255,243,132, 46, 88,167,195,186,252,197,195,146,212,251,115,125,174, 22, 92,121, 97,125, 3,190,
-240,209, 30,198,235,121,142,236, 73,149,212,179,199,162, 26,116,191, 28, 64, 87, 53, 34,219,197, 43,107, 23,212,144,201,100,202,
-215, 0,229,232, 26,210,202, 88, 82,234, 25, 56,191,234, 81,253,205,207,228,165,177,219,177,107, 0, 35, 32, 61,183,245, 74,157,
-215,171, 88,175, 16,188,219,213,206, 63,210, 4,243,253,117,143,193,151,170,141,180,136,182,251, 64,208, 89, 96, 8,121, 59,175,
-158,139,129,226,134,246,166,253, 97,138,131,177,211,199,144,109, 2, 68, 0, 71,195, 52,157,206, 36,209,194, 99,207,169,253,133,
- 44,192, 77, 93, 16,186, 12,192, 91,224, 44,220,232,231, 5, 96, 15, 19, 8,241,124,215, 37,107,172,156,143, 9, 36,155, 78, 39,
- 90, 60, 14, 89,104, 1,139, 89,201,231,165,213,104,200,243, 87,175, 36, 76,102,242,193,187,111,203, 79,127,252, 19,138,214,224,
-254,225, 51, 17,104,234,155, 90, 27, 52, 16, 48,177,132, 88, 76,146,106,197,226, 30, 57, 67, 17,106, 49,228,179, 76,252, 96, 6,
-161, 32,175,213,138, 54,133,133,112,150, 94, 55,216, 69,195,144,229,184,124,204,100,137,117, 7,224, 73,129, 31,115,140,142, 29,
- 49, 18, 38,216, 8,139,245,152,175,237, 37,166,118,247,248,245, 64,222, 58,170,106,172,218,104,220, 93,203, 55,175,110,121, 6,
-246,218, 85, 98, 32,158,157,244,172, 96,214,196, 6,129, 61, 56,184,213, 27, 5, 9,115, 40, 42, 39,250, 30,221,212,171, 44,244,
-155,135,144, 94, 37, 48,219, 95, 15, 13, 83,148,188, 17, 42,114, 98,184,108, 16,244, 98, 33,142,225,122, 87, 74, 37, 98, 55, 48,
-121, 64,193,129,164,191,116, 42,151,211,155,133, 60,126,254, 76,174,122, 55,114,239,160, 35, 15,247, 23, 90, 0, 84, 56, 41,185,
-188, 94,240,107,112,158, 51, 78,150, 23, 53, 52,140,196,106, 26,231, 47, 7, 43, 45, 70, 86,114,231,160, 45,123,123, 29,249,254,
-113, 94, 94,157,156,114,202,109,242,214,161,204,227,132,122,251,184, 55,166, 57,159,211,115,157,101, 12, 5,165, 28,138,159, 48,
- 82, 2, 29, 25,128,236,204,253,110,149,180,181,254, 36,212, 23, 88,112, 63, 14, 32,199,126,199, 4, 46,154,122, 16,194,112, 44,
-237, 90,158,106,100,175,110,231,146,115,220, 98,112,104,131,192,119, 65,195,158,124, 36,231,181,115, 17,131, 60, 94, 41,235, 17,
-252,134,221, 9,154, 7,240, 28,189,192,120,198,243,117, 26, 88, 98,118,134, 8, 48,216,229,119,245, 32,194,182,112,133,238,126,
- 21,187,234,116, 67, 16,193, 96, 94,162, 16, 76, 41,107,110,138,155,196, 80,186,164, 85, 32,152,138, 73,172,162,168,240,157,149,
- 22,113, 1,168,116, 32,181, 58,223,176, 74, 2, 22, 0, 34, 55, 77, 13, 8,232,216, 63,253,238,146,128,180,143,238,183,137, 26,
- 95,174,204,218, 46,114,194, 17,152, 98, 32,161,253,228, 81, 75,106,197,156,188,119, 92,151,227,221, 34,105, 20,224,221, 98, 20,
-117,165, 1, 7, 84,186, 63,125,255, 64,190,126,121, 43,131,177, 81,222, 60, 7,146, 35,234,149,106, 84,208,163, 15,229, 98,234,
-203, 16,227, 88,125,157, 82, 16,203,133, 30,104,188, 71, 32,127, 23, 27, 51,124, 0,240, 98, 29, 5, 78,157, 10,192,163, 5, 19,
-220, 96,188, 33, 55, 52,162,158,190,141, 50,115,126,206, 80,226, 38, 73, 69, 94,107,193, 43,187, 85, 9, 84,253, 22,122,157, 33,
-174, 97,251,116, 36, 11, 42, 91,233, 51, 60,132, 5,109, 50, 98,162,228,174,134,220, 88, 59, 84, 11,140,157, 52, 48, 32,105, 32,
- 57, 99,239, 78,237, 97,250,139, 7,124, 32, 50,110, 71, 77,222,191,211, 48,224,239,221,184, 28, 95,199,209,163,187, 87,158,235,
-179, 35,167,106,133,135, 15, 50,143, 40, 0, 40, 7, 11,254,181,254, 66,194, 34,216, 40, 48, 30, 34,249,191,161, 25, 53, 16,219,
-128, 74,222,141,109, 61,215,101, 99, 34,128,247,176,114, 30,232,248, 90, 76, 71,170,250,160,133,206, 74,118,187, 50,113,188,247,
- 20, 45,146, 50, 12,166,243,169, 6,197, 37, 87, 0, 27, 39,204,130,247,149,170, 64, 81, 64, 4, 1, 54,103,210,181,137,251, 89,
- 8, 78,177,163,252, 96,202, 2,113, 15, 58,187,185,235,226, 59,196, 48, 6, 60,176, 20,133,251,212, 17, 18,187, 38, 21, 36, 14,
- 40,231,149, 93, 32, 65,241, 3, 33, 10,186, 20,162, 72,208,159,127, 59,153, 83,134, 56, 73,156,245,174, 67,202, 50,233, 39,242,
-230,250, 59, 80,235, 27,106,135,188, 49,100, 10, 12, 55, 16,186, 81, 98,224,248,246,158, 43, 14, 77,196,102, 99,222,221,144,182,
-212, 98, 19, 88, 0, 92,165, 13,145,117,209,214, 47, 26,227, 72,156, 78,154, 80,232,179, 48,154, 69, 90,176,134, 76,232, 11, 63,
-161, 99, 22,144,185,126, 28,113,236,142, 36,142, 73, 15, 28,168,214, 97,188, 45,194,184,234, 16,103, 3,235,238, 13,240, 21, 90,
-111,202,227,147,115, 45,156,143,229,195,187, 77,249,234,116,198, 0,222,174,215,169, 37, 48,210,226,188,168,103, 21,218, 22, 80,
-172,204, 96, 85,128,110, 29, 3, 30, 88,224,250, 83, 41, 84,154, 60,235, 60, 47, 92,129,141,181, 33,169, 16,148,231,235,253,105,
-148,203,164,178,133,235,153, 38,187, 38,127, 30,186,247, 92,144,200, 94, 35,199,174,122,178, 4,237,202,116,196,127,251,135,103,
- 18,128, 18,183,211, 54,223,117,136,178,160, 99,132,234, 89,169,224, 28, 38, 19, 3,113,137, 89,187,114, 50, 21, 27,122, 60,227,
- 58,228,116,245,192, 34,153, 98, 64,166,134,185, 14,151, 12,234,113,148,184,130,118,195, 34, 22, 49,112, 10,241, 25, 61, 31, 69,
-125,182,119,219, 29, 94,139,147,139, 11,125,118, 42,108, 2,176, 2,201, 19,147, 33,156, 70, 96,117,128,123,117,165,133, 99,167,
-213, 98, 33, 85, 40, 85, 40,165,187,210, 36,120,163,241,240,155, 39,207,228, 39,239,189, 45,179,225, 5, 17,222, 57,218,129, 90,
- 1,138, 6, 11,113,191, 93,171, 50, 89,194, 11, 60,159, 53,197, 60,130,222,168, 66,153,165,232,204, 84,175, 1,164, 93,129, 76,
- 71, 1,142, 98, 7,211, 28, 36, 99,202, 21,235, 53,129,217,201,109,127, 42,223,143,134,210,191, 57, 33, 37,186,200,149,129,158,
-137,141,169, 90,226, 92, 67, 99,157, 96,188,245,146, 44,148,171, 1,238, 31,116, 20, 98, 57,108,224,181, 60,230, 26, 76,239,110,
-244, 51, 70,161,177,132, 86,129, 53, 6, 23, 23,125,185, 13, 34,153,106,193, 3,137,103,240,205, 87,107,189,230,107,143,211, 96,
-136,126, 45, 32, 6, 5, 35, 26, 8,191,228,178,108, 48,113, 15, 87, 52, 27,210,102, 8,178,180,185, 44,159, 73, 20,218,221,102,
-147,133, 9,206, 7,238, 1, 20,230,150,122,198, 62,124,251, 29,185,232,245,228,244,242,146,147,185,179,171,162,252,236,221,125,
- 57,212,102, 25,193,107, 14,187,213,181, 9, 36, 97, 60, 78, 47, 4, 90,121, 7,242,246,157,138, 92, 22, 52,254, 65,124,105,147,
-147, 15,222,123,139,224,200,254,237,181,116,235,101, 98,184, 74,244,178,215,124,154, 74, 96,139,197, 60,124,126, 46, 18,245,186,
- 2, 83, 64, 67, 23, 76,222,126,253,221,181,220,210, 92, 69,228, 94,183, 44,191,252, 96, 79,190, 61,153,104,130, 50,241,125,152,
-215, 55,234, 69, 38,180, 3,189,161,253,217,134, 31, 6, 65, 25,104, 84,142,178, 28,159, 14, 29, 53,198, 3, 72,128, 24,177,213,
-202, 89, 6, 42, 36, 82, 11, 74,198, 1,143, 54,102,165, 10,237,229,196,141, 81, 9,216, 10, 76,237, 7,193,232,106,188,102,229,
-103, 90,231, 30, 47, 52, 2,192,112,190, 38,112, 33,114, 35,116,163,213,153,107, 18,237, 4,157,251, 16,169, 50,161,240,189,192,
- 11,157,210,157,211,181,204, 86, 17,187,133, 74, 25,187,219,132, 70,247,179,249,154,193, 11, 96,136, 75,237,156, 31, 30,212,201,
-143,197,235, 97,132, 98, 10, 95, 70,189,193,239, 47,111, 70, 28,195, 98,204, 50, 93,217,144,114, 5,177,102, 47,195,128,123,220,
-213, 27,213,155,200,105,111, 32,230, 39, 23,255,128, 54,100,192,176,192, 55, 74, 20,222, 43,228, 51,159,107, 69,135,157, 30,118,
- 87,247,186, 53,251, 28,250,217, 78, 6,161,117,174,137,121,244,154,142,150,117,123, 24,213, 29,180,154,122,243,181,107, 25,206,
-228, 76, 59, 25, 0, 8, 75,154, 24,145,208, 27,205,154, 76,199, 48, 66,152,105,240,193,142,220,153,138, 68, 26,168, 54,250, 96,
-174, 80,149, 91, 18,131,162, 82,177, 96,212, 41, 92, 95,220,183, 5,198,251,142,146,182,226,200,216,246,208, 8, 54,129,181,210,
-142, 94,102,116, 19, 80,184, 34,131, 88, 51, 16, 66,215,126,219,157,111,156,202, 86, 74,200, 69, 66,216,132,252,249, 20, 93, 0,
- 71,221,243,221, 72,219,216, 4,137, 27, 99,123,206, 96,132,231,215,117,143,236, 90, 54, 27,231,130,231, 84,188,104, 80,146,108,
-147,116, 58,118, 39, 16,173,217,146,162, 6,238, 23,167,167,250,210,199, 78,164, 71,152,208, 98, 71,155, 35, 22,132, 96, 37, 75,
- 42,157, 86, 77,131, 78, 34, 55,183, 51,174, 60,128, 69,128,224, 68,165, 84,117,227,104,147, 17, 6, 77, 10, 69, 78, 10, 10,138,
-162,216,209,220,156,150, 59,169,158, 98, 70, 30,155,141,147, 97,205,208,236,229,197,233,185,180,106, 21, 94,239,225,100,230,118,
-246, 83, 19,208,129,252, 40, 36, 66,157,234, 24,238, 75, 45, 66,183, 98,118,184,232, 36,145,172,150,161, 83, 82,116,166, 47,233,
-174, 82, 82, 19,152,237, 62,221,123,163,227,237, 84,253, 40, 58,226, 91, 87,154, 56,251, 88, 83,245,139,157,160,148, 9, 79,165,
- 64, 51,242,170,131, 96,187,119,165,133,113,198,119, 5,132,161,167, 1,230, 1,154,125, 64, 84,175, 48, 32, 82,130,217,141, 90,
- 23,107, 19, 30, 33, 77,155, 44, 17,223,117, 48,193, 22,200,135, 4,134, 55, 4,118,195,112, 52,146,175, 95, 15,101,255, 71, 29,
-142,225, 95,247,102, 44, 91,154,213,146,118,118,115, 38, 16,140,125, 41, 4,165,175,128,164,146, 42, 50,102, 35,125,182, 87,115,
-201,106,199, 14, 28, 72,183,117, 71, 3,102, 95,174,135,102, 52,178, 3,111, 5, 45,242, 91,173,134,126,125,137,215,226,232, 96,
- 87,206,175, 7,220,207,131,122,137,226, 25,147,173, 88,139,240, 74, 41, 39,117, 77,166, 97,156,149,186, 22,201, 49, 28,251,112,
-143,244,172, 3,155,154,205, 5,156, 86,130,203,143, 56, 71, 32, 32,186,103,199, 25, 18,174, 44, 76,168, 37,113, 90,240,129, 59,
-195,184,246, 44,180,128,195,200, 26,226,153,107, 68,223, 40,142, 52,128,138, 76,166, 24, 90,253,203,165,137,126, 97,106,131,241,
-175, 15, 96, 22, 25, 33, 5,222, 23, 20,157,124, 94, 33, 59, 29,175,233, 55, 65,197, 62,141, 55,231, 87,151, 82,171,212, 41, 5,
-125,122,113,169,207, 71, 67,150,218, 0,252,250,155,111,205, 81, 45, 54, 87, 53, 82,112,179,166, 75, 0, 52,120,183,174,221,225,
-218,226, 8,206, 0,166,172,214,225,218, 10, 37, 75,245,198,141,201,205, 38,118, 15,203,229, 44,215, 5,184,167,200, 0,229,218,
-129,105,211,135,240, 12,208, 14, 84,255, 46, 87,196,190, 63,224,228, 21,150,213,116, 27, 11, 34, 78,191,138, 4, 44,194,143,220,
-231,245,189,211,209,100,119, 54,150,179,235, 62,113, 23,154,222,169,111,192,149, 88,146,145,166,230, 16, 72,206, 62,216, 45, 81,
-222, 59,166, 29,177, 41,130, 82,154, 27, 69,149, 62, 63, 55, 55,151,244, 9,105,106,178,198,243, 56, 90, 78,182, 10,125, 56,126,
- 20,203, 89, 94,179, 96,198,115,139,102, 6,221,250,209,238, 46, 11, 31, 28,104, 76,232,192, 54,185,179,191,199,213, 37, 30, 46,
- 0, 54,255,241,203,215,242,241,131, 93,121,116, 88,147, 82,169, 98,182,199,250, 51, 86,243,132,204, 0, 36,244,200, 61,107,187,
-109,189,174,250,247,151,253,144, 93,251, 78,183,203,226, 6, 92,120,207,225,124,194,208, 84, 69, 49, 57,129,223, 70,184,145,173,
-132, 47,158, 33, 56,216, 97,154, 0,107,228, 12, 42,165,183, 14, 42,178, 83, 43, 19, 76,213, 46, 3,232, 49,230, 8,203,115, 70,
- 14, 89,242,134, 3,154,207,223,223,173,107, 85,177,102,165,205, 10,194, 19,238,202, 17, 7, 11, 94,198,141, 98, 50,220, 49,227,
-134, 12,230,182, 7, 42,100,109, 79, 79,193,249,192,248,213,184, 17,232,204, 57,162, 74,156, 78,180,222, 80, 84,118,232,174,171,
-197, 12, 77, 81,144,236, 98,236, 59,114, 70,167, 1,175, 34,140, 87, 76, 6, 20,140,217, 24,193,156, 38, 30, 81,188,229,197, 47,
- 89, 17,153,116, 41, 42, 35, 88,133, 6,180,221,211,167, 79, 15,121,175,191,176, 0,230,192, 67,235,201,154, 85, 27, 30,248,253,
-118, 69, 58,181,130, 3, 6, 89,196,167, 73, 71,100,194, 35, 57, 61, 33,224,133, 6,110,100,220, 42,102, 73,105,105,214,114,154,
-132,214, 68, 75,175, 52,137,102,169,210,180, 97, 55, 45, 70, 22,225,251,131, 95,245,237, 52,224,255, 7,122,190, 94, 14,164,169,
-159, 55, 10,242,236,134, 86, 27, 19, 98,129,245, 43, 94,199,119,187,172,192,207, 75, 89,175,229,209, 78, 67, 62,124,176,175,223,
- 87,144,247,247, 43,146,211,215,249, 15, 79, 46,229,119,207,110, 73, 13,138,220,232, 15,251,154,217,122, 98,224, 61,177, 42,143,
-193, 26,116,145,122,133,247,183,172,135, 14,157, 57,146, 6, 45, 33,105,113,105,252,236,114,185, 74,132, 54,146, 35, 14, 57, 19,
- 96,198,146,118, 24,133,110, 36,236, 60,160, 61,163,234,144, 55,190, 29,223, 90,176, 66,122,129, 34, 27,128, 62,137, 75, 42,230,
- 82, 23, 18,177,235, 57,173, 88, 60, 60, 43,154,122,248, 28,127,231,115, 70, 39, 17,151, 32, 19,139, 32,252,115,140, 91,145, 76,
-145, 28,193,117, 77, 25, 9,169,188,101,198, 81,232,240,126,128, 88,125,165, 9,189,152, 53,151, 55, 27,245,155, 1,140, 56,157,
-107,140,175,152, 8,181, 96,193, 57,232,107, 17,152,211,194, 21,202,121,161,190, 70,174, 80,230, 3,180,211, 40,201, 59,251, 85,
-249,246,114, 78,110, 45, 39, 20, 97,226,244,219,109, 31,206,253, 35,174, 63,248,231,203,229, 86,133,125,229, 36, 50, 49, 94, 69,
- 55,134,194,233,188,119,163,137,168,202,247,196,226, 55, 8,152,128,124,103, 34,130,247,226, 72,148,236, 40,113,141, 64, 37, 77,
-199,160,158, 39,219, 49,185,239,240, 6,233,117,240,222, 48,236, 89,204,130,161, 98,232,119, 19,125,207,184,206, 38,138,173, 8,
- 50, 51, 21,217,162,235,109,165,230,166, 77,129,141,235, 1,175,128,146, 24, 69, 93, 36,222,222,171, 36, 50,128, 36,182, 49,164,
-223,101,196,249,192, 39, 44,170,201, 21,119,235, 3,118,160,142, 81,227,180,172,248, 25,249,124,225,123,243, 1,215, 87,184,183,
- 72, 38, 23, 55, 67,121,118, 93,146,159, 63,172,235,121, 78, 72,241,219,209,162, 43,151,213,100, 5, 92, 74, 41, 79, 19, 40, 40,
-170,225,243,228,156, 56, 13, 98, 71, 94,219,253,217,100, 36,123,135,135, 26, 88, 87, 82,173,183,181,171,159,209,222,185, 91,203,
-203,203,211, 11, 77,236, 69, 78,100,102, 90,216,147, 42,139,201, 76,174, 64,191, 0,178, 81,124, 4,220, 5,147, 74,181, 4,145,
-151,178, 60,127,121, 43,135,187,123, 60,123,217, 92, 68,208, 29,158, 37, 88, 49,163,139, 10,157, 12,231,198,141,224, 3,242,248,
- 83,191,130,220, 22,113, 45, 57, 83,119,196,202,140, 60,239,140, 81,221,214, 0, 35,130,230, 68, 25,209,133, 43,162, 77,119, 30,
-221,255,138,110,127, 9,159, 69, 92, 39,160,245, 87,115,125, 70, 39,115, 43, 6,244, 25,120,180,223,145,215, 23,215, 44, 60, 1,
-134,198,250, 66,143, 28,197,163,150,203, 49, 11,241,254, 96, 32,167,231, 23,114,180,119, 71, 30, 29, 95,201,239,191,127,234,220,
-253, 28, 37,210, 77,195,128,130,255,143,143,141, 50, 23, 80,111,220,214, 56, 24,133,163, 40,201, 18,180,252,198,187, 33,235,172,
-178,163,217,130,211, 76,232,216,147,117,145, 95,107, 44,168,107, 34,188, 35, 7,187, 77, 78, 99,187, 26,111,197, 51, 38, 10, 58,
-116,147, 12,247,181,208, 93,105,178,155,201,159,125,116, 87,254,240,244, 86, 11,150,172,198, 55,237,106, 51, 9, 99,204,130,114,
-217,246,204,213,203,121, 78,143,177,190,196,117,223,223,209,103,244,197,153, 54,130, 11, 54, 6,240,188, 71,117,189,142,225,148,
-184, 33,104, 18,248, 15,216,184, 2, 75,226,109,121,247, 17,229,106, 19,230,191,212,222, 56,203, 73, 11,157, 26,197, 12,159, 76,
-113,207,192,179, 88,133,192,136,166,221,172,211,114,247,251,151,175,100,176, 60,144, 11,253,242,189,120, 72,149, 80,174,204, 48,
-217,128,106, 93,161,192,132,141,105, 7, 42,107,224, 48,238,238,234,121,211,166,249,180,167,197,130,254,252,219,126, 34,237,238,
-158,220,246, 46, 77,251, 31,231, 80,115, 48, 62, 35,196,216,192, 66,192,243,142, 41, 26,154,239, 39, 39, 87,250, 26, 90,200,252,
-229,253,206,255,250,231,143,186,172, 32,191,191, 24,179,234, 58,131, 8, 12,101, 94, 3,202,229, 33,208, 96,151, 4,133,184,144,
-149,151, 86, 22,205, 42,111, 38, 70,193, 84, 72,130,233, 67,198,223, 6, 15,207,117,165, 52, 55, 32,197,202, 64, 59, 0,183,101,
-157,118, 48,149,220,128,212,196,207, 7,253,193,183, 61, 54, 18, 60, 10,131, 48,178, 93, 28, 85,219,192,197,244, 77,166,149,251,
-145,141,201, 91,178,170,194,152,126,109,251, 71,116, 67,184,216,232,112,208, 93, 66, 34, 18,230, 14,182,235,138, 41,136, 16,186,
-238,141,202, 70,113,178, 21, 49, 9,156,189, 39, 10, 0, 0,232, 80, 12,176,139,116,159,139, 59, 73,162, 14, 23, 91,215,169,150,
-118, 5,248, 12, 7, 68,232,102,184, 95,189,210,142,249, 28,146,150,120,157,200, 52,185, 99,121, 99,196,145,213,196,140,105,114,
- 49, 19,115,164, 84, 41,230,228, 78, 83,111, 6,208,232,188, 86,216,243,151,229,110,167, 42, 31, 30,212,120,205,225,251,188, 91,
- 47,201, 95,125,116, 95,254,217, 79,238,203, 71,247,119,104,123, 57, 91,107,151, 61, 93, 82,188,227,173, 59, 59,242,254,113, 91,
- 15, 92,158, 32, 71, 60, 20,197,188,207, 61, 19,168, 73,101,112, 39,181,154,107, 54,234,236, 70, 90, 90,161,114, 76,230, 70, 79,
- 24,113,219,181, 48,138, 23, 14, 61, 70,226, 16,156,153,207, 23,219,113, 47, 69, 58, 36,113,166, 21,182,223,230,152,221,137,105,
- 64, 4, 1,149,126, 1,123,103, 45, 10, 64,153,219, 86,192,113,180, 21, 64, 9, 24,104,108, 82, 3,208, 15, 68, 68,114, 57,243,
- 36, 71,194, 37,248,203, 33,177, 19, 55,149,137,221,216,217, 68, 35,140,126,181,116,133, 2, 10,132, 10,181,224, 51,230, 93,238,
-116,227,179, 78, 15, 30, 94,235, 16,185,248, 79,254,228, 33, 71, 97,120,152,125, 39,164,132,207,139,253,170,173, 14, 60,249,205,
-151, 47,229,162, 55,162,206, 1,212,170,226,213,130,232,230,108,161, 36,159,188,181, 47, 31, 60,232, 82, 99, 0,137, 14, 58,213,
- 24, 65, 2, 12, 10,213, 67,236, 11, 95,158,247,229,228,122, 72, 67,146,192,105,132,110,156, 23,180,200, 27, 20,127,226, 56,215,
-177,243, 69,199,207,201, 56, 39, 41,200,226,210, 97,106,179,217,250, 10,120, 41,178,221, 51,174,117,170,149,159,142, 26, 18,199,
- 77,223,142,222,205,126,201,116,234,221,144, 36,114, 56, 17, 47,245, 72,112, 58, 13, 28,197, 7,142,162,232,206,109, 22,214,175,
- 98, 1, 52,231,232,126,185, 92,214,145,229,196,241,252,205,114,212,115,234,126,190,163,202, 81,204,201,183, 93, 37,215, 89,156,
- 46, 24,206, 34, 37,143,252, 80,231, 63,149,251, 37,130, 90,223, 47, 10,155,144,138,105,121,126,207,149,118,212,247,119, 74,178,
-175, 69,213, 89,127,198,216,128, 14,107,130,128,172, 55,162, 94, 45,114, 69,130,184, 69, 15,138,140,201,152,130, 82, 11,237,121,
- 96, 74,192,241,198,185,163,181, 71, 18,178,112,255,238,213, 13, 99, 23, 94,239,246,182, 71,112, 20,196, 65, 96,170,132,181, 32,
- 60,175,233,136,149,216,228, 14,147,179,187,123, 53,142,161,167, 90,144,142, 70,183, 4,196,101,243,101,202,246,142,102, 19,142,
-187,195, 40,118, 66, 74,111, 60,115,253,140, 97, 68,112, 70, 1, 58,132,153,137, 73,235, 70,182, 71, 37,144, 49, 50, 58,233,106,
-227,240, 44, 89, 78, 13,166, 48,141,114, 73,135, 69,148, 88,209,151,210,141,215,161,249, 66, 0, 84,139,215,221,235,180, 89,160,
-158, 94,246, 88, 68, 84, 74,101,254,127,232,193,151, 52,169, 98, 85,232, 57, 10,236,213,213,185,180,218, 59, 90,220, 23, 36, 90,
-141, 53,214, 23,216, 48,160,160, 66,140,131, 87, 1,180, 51,214, 78,142, 59,165, 4, 51, 52, 38, 54, 25,202,229,140, 33, 33,108,
-226,178, 4,130, 98, 10, 85,226, 14,189,164,191,175,106, 18,239,202,193,222,158, 84, 42,117, 26,245,148, 43, 13,185,179,219, 32,
-168, 14,171, 7, 76,125, 96,106, 53,214,152,115,222, 27, 50,158,255,183,127,245,161,252,226,147,119,248,252,189,210,231, 10,182,
-224, 23,183,147,173,149, 43,206, 75,200,231, 39,103, 14,137, 0,168,105,195,137,159, 11,193, 44,176, 77, 74,133,141,225, 26, 48,
-222,215, 38,176, 92, 41,201,241,241, 93, 9,244,250,250,226,111,177, 83, 22, 83,204, 81,109,229, 12,197,168,189,160, 95, 95,160,
-159,135,173, 4,111, 71, 99,210,118,169,206,168,213, 43,146,125, 69,175,217,154,140, 0,107,118,207,174,174,248,249,112,198, 52,
-115, 18, 59,130,154,199, 38, 0,107,227,200,235,123, 45,151,236,140, 98,149, 4,167,210, 78,187, 12,151, 16,222, 71,155, 18,121,
-148,103,198, 36, 0, 69, 53,186,118,147,228, 13,232, 65, 65,234,174, 99,252,144, 83,255,224,176, 37,191, 63,153,106, 21, 60, 98,
-146,123,124, 13, 5, 38,251, 2, 84,185,139,120,185,221,123,178, 66,228, 27, 54, 57, 62, 34,228, 67,140,101,204,236, 32,147,250,
- 58, 19,168, 20,210,189,135,181, 60, 22,136, 81,192,234, 36, 16, 51, 95, 97, 0, 2,143, 27, 64, 42, 84,174, 57,187,169,222,198,
- 56,126,208,129, 62,133,163, 18, 21,172,124, 86, 78,216,147, 3, 88, 17,185,174, 48,198,152,203,183,215, 53,217,194,100,107, 94,
-129,155,129,113,137,135,145,148,192,166,206,246,127,144, 72,149,212,155,251, 7,255, 48,188,122, 41,170, 58,230,232,236,250,102,
-162, 5,193,146,201,179, 85,201,209,240, 97,166,157,225, 96,186, 48,153, 74,125,239,123,149, 37,193, 29,227, 33,246,228, 27,142,
-221, 32,239,248,168,145,147,142, 30,228,255,240,186,255,198, 57,203,189, 22,166, 12, 24, 83, 2,155,144, 1,189, 43, 83,144, 23,
-195,141, 38,219,174,236, 84,244,218, 77,135, 68,238,163,171,173, 65, 3,187, 33,242,104,167, 37,123,221,182,236,239,237,152, 70,
- 52, 36, 41,225,120,165,137,229,122,184,150,223,188,188,225,195, 52,156,152,221, 31,237, 98, 41,138,161,135,101, 2,245,174, 60,
-253,161,225,150,103, 30,218, 9, 15, 36, 80,219, 16,163, 49,105,219,149,243,234,141,196, 8,121,166, 91,206,164,153,200,182, 40,
- 89,187, 93,181,239, 7,206, 69,205, 44, 84, 37, 69,146, 59,244, 54,193, 89,145,117,192, 40,176,226, 45, 32,202, 12,105,144,152,
-172,227, 78, 56,217,200,147, 14, 39,214, 93, 39,230,120, 5,185,205, 84, 61,142,162, 12, 14,217,142, 7, 14, 93, 58,146, 85, 33,
-151,219,142,152,233,133, 7,128, 99,232, 36, 43, 97, 50,161,159,241,242,230,150, 73,159, 14,101,238, 33, 6, 5, 50,118,252, 95,
- 32,133,113, 93,209,153,227,190,130, 58,243, 37,196,107,244,103, 55,235, 26,192, 91, 77, 6,161,154, 6,183,150, 38,143, 91, 34,
- 78,215, 82,205,250, 20, 1,130, 15,250,158, 86,233,245,122,129, 19,165,102,173, 46,111, 29,113,217,196, 14,202,115,178,169, 40,
- 24, 32,234, 4, 48, 82, 41,111,221, 46, 86, 64, 55,195, 1, 19,230,138,178,180,115,126, 46,140, 87,241, 53, 8, 40,232,204, 73,
- 73,244, 18, 82,183,104,194,130, 81,252,204, 5,247,237, 96, 61,249,255,157,235, 55,166, 57, 4, 78, 70, 54, 86,183, 47,139,216,
-129,224,185,199,103, 70,240,202, 82, 27,222, 58, 20, 43, 60,173, 96, 0, 16, 13,171, 25,142, 93, 19,243, 94,136,220, 8, 54, 33,
- 48, 48, 75, 27,208, 77, 90,208,115,239,231, 17,216,186,118,163,246, 55, 15,129,117,174,166,144, 99,123, 65,156, 39, 17,139, 5,
- 0,227,225, 28,152,121,136,231,220, 10, 19,242,174,255,205,239, 78,229,127,252,139, 99,249,209,189,174, 60,191, 28,233,189,200,
-147, 30, 8,132,125,171, 94,209,103,115,206,241, 55,198,148, 16, 56, 90, 65, 6,153,236,132,172, 94,215, 41,209,244,208,225,200,
-151,170, 82,213,243,112,222, 95,145,243,172,229,184,158,153, 5, 19, 0,194,123, 9,157,233, 98,200,113, 45, 26, 4,140,113,113,
-205, 17, 27,241,124,116, 42, 25,142, 96,161,115,222, 31,244, 53,233, 85, 57, 37,124,242,226, 37,113, 51, 37,226, 67,132, 99,123,
- 4, 95,210, 40, 61,135, 33, 0,141,116,101,186,222, 24,155,167,244,215,148, 26,202,201, 22,198,222,129,121,151,131,234,185,118,
-197, 91,106, 29,234, 59, 42, 33,208,239, 40,196, 64, 41, 68, 2, 12,168,218, 24,177,152,190, 28, 76,164,215, 63, 37,203, 35,165,
- 67,194, 83, 61, 91,201,147, 94, 88,215,175, 57,108,109,228,235, 23,215, 92,133,129, 77,156,203,117,228,207, 62,126, 95, 70,195,
- 1,159, 85,168, 3,146,186, 25, 39,196, 76, 28,118,234,242,226,114,192, 85, 44,166,166,187, 53,163,111, 97,109, 14, 58, 49, 62,
-231, 58,242,137,151,218,197,254, 29,137, 30,200,253,141, 77,121,104,126,149,245, 89, 68,223, 96,101,120,165,221,255, 31, 95,209,
-169, 12,160, 91,161,192,138,198,125, 8,105,233,217, 0,170, 31, 77,196, 68, 99, 46, 40,134, 47, 95,107, 27,123,212,150,110,171,
- 35,215,215, 87,204, 31, 89,228,149, 76,222,226,116,213, 18, 63,197,159,226,140,198,204, 29,160,120,152,131,226, 24,184,144,141,
-212, 98, 77,134,173, 29,201, 97, 50, 25,197,204, 75,211, 25, 10,185,132, 49,133,120, 35,125, 22,160, 25, 49,165,229,107,137, 52,
-220, 40,213,222, 16,143,207, 52, 98, 95, 31,216, 0, 36,244, 82,137,197, 22, 24, 76, 52, 70,210,123,177,215,237, 80,131,191, 86,
-186, 47, 71,117,205,127,176, 80,117, 83, 58, 78,111, 35,147, 55, 7,198, 96,175, 83, 38,109,243, 82,243,111,171, 89,214,184, 14,
- 15,249, 2,115,162,120,123,164, 30,222,244,251, 90,184,162, 0,240, 52,254, 44,164,222,104,243,125,162, 9, 70, 83,181, 38,168,
- 86, 11,155,127,253,251, 51,138, 2, 64, 65, 12,143,226,106,153,200,100,105,212, 25,208,184,208,169,161, 34,181,128,224,105,199,
- 44, 4,190,145,240, 66, 96,134,255, 70, 50,208,247,157, 16, 9,130,129, 73,137,146,143,154,202, 96,112,199,153,144,230,133,206,
- 30,221,100, 64,250,141,105, 13,251,174,163, 9, 28,248,103,236, 56,225,201, 38,203, 46,158, 0,170, 31,120, 16,167,241,203, 12,
- 60,196, 33,244, 3, 38,229,249,108, 67, 16, 91,222, 1, 82,240, 0,114,160,224,198,177,169, 22,118,236,132, 57, 76,180,195,194,
-163, 79,187, 72, 67, 99, 35,121, 19,160,167, 1, 5, 85, 43,186, 48,186,188,113,133,238,113,172, 4, 52, 61,138,161,102, 41, 43,
- 71,122,209,235,218, 29, 39,155, 37,199,175,111,184,195,118, 24,160,213,142,253, 37, 38, 24,197,122,147, 78, 74,228, 27, 67, 86,
- 82,255,252,249,249,128,211,132,185,126, 63,170,183,198, 29, 77,244,218,157,224, 97, 41,104, 37,136,131,134,135,188,232, 30, 22,
-184,255,172, 22,144,135, 92, 83, 91, 27, 83,137,216,129,179, 82, 32, 20, 46,119,177, 92,145,172,254,154, 79, 46,152,216, 42,168,
-162, 27, 77,142,134, 67, 87,225,147, 74,197,202,215,198, 74,236,194, 35,147,216, 76,105, 21,169, 54,117, 74, 21, 75,221,210,108,
-204,109,174, 81,121,253,217,115,208,226, 48,182,102,242, 93,147,227,238, 57,223,223, 31,114,212,233, 90,134, 32,229,153,202, 24,
- 45, 77, 61,211,209, 71, 98,206, 58,153,225,196, 21,139,177,115,115,131,138, 32,164, 27, 73,165,115,217, 11,239, 33,116, 93, 30,
-206, 45,215, 61, 76, 88,177,163,124, 9,149,155,224, 63,143,206, 37, 5,212, 89, 33,231, 59, 65, 13, 11,126,252,204, 8,100, 20,
- 53,202, 81,209,106,175,211,145, 59, 59, 69,185,211,206,202,201,213,132,133,231, 58,244,100,159,118,171, 62, 1,110, 59,173,178,
-220, 57,218,149,219, 49,206,112,138, 90, 23, 83,121,155, 45, 28,213,206,185, 51,105,242,206,102,108,189,192,253,218,102,197,224,
-209,134, 16, 13,130,169,126,239, 84, 19,202,110,187,206,164,116,163, 65,122,229,212, 4, 57, 34,134,186, 88,197,119,184,150,141,
-147,212,117,123,240,216,166, 89,169, 15, 59, 71,133, 40,140,210,209, 60,243,186, 61,103,248,204, 20, 53,201, 4,118, 94, 92,145,
- 64,163, 14, 4,141,216,156,162, 48,193, 2,195,227,160,153,215,224,156, 97,144,198, 53,192, 14,246,108,176, 50,189,118,112,173,
- 33, 46, 21,216, 8,149,171, 43, 36,154, 84, 68,200,137, 19, 37, 78, 73, 48,181, 54, 54,206,191,129, 82,241, 47, 10, 8,220, 71,
-156, 57, 43, 62,139,188, 70,207,245,186,255,230,241,181,252,151, 63,125,160,113,203,119,114,200,190, 12,181,147,205,218,154,211,
- 94,211,211,243, 58,139,104, 97,137,130, 3,227, 74,140,108,135,131,158,230,139, 10,239,193,209,193,129, 38,134, 75,118,137,152,
-170,133,203,185,113, 84, 54, 88,237, 85, 12,116,138, 56, 5,122,216, 38, 71,101, 61,116,144,152, 28,156,244, 18,118,176,120,197,
- 74, 77,159, 99, 96,136,224, 63, 1, 81,168, 5, 10,216, 58,215, 83,184,135, 57, 71, 25,140,220,232,220,166,139,102,178,131,206,
- 52,240, 13,159, 68,157,115,184, 63, 58, 63,138,106,177,161, 29,117, 75,206,110, 6,148,131, 21, 39,252, 51,209, 46, 49,175,231,
- 24, 92,117,138,217, 4, 14,128, 23, 4,174,208,246, 41,148,130,115,143,233, 42, 65,180,154, 48,219,141, 58,207,244,203,139,158,
-158,211,182, 12, 53, 86,228,181, 0, 56,212,206,112,174,143,246,179,151,175, 52, 81,116,244,117,171,242,248,236,137, 60, 59,189,
- 34,226, 58,227, 98, 57,183, 96, 40, 74,181, 99,197, 42, 22, 84, 99,196, 35,208, 27, 3, 39,233, 76,106, 45,167,120,193, 27, 31,
- 3,253,255,240,234,192, 58, 53,200,198,164,235, 34, 89, 3, 32,119,247,206,123,146,113, 13, 21, 88, 66, 96,216, 0,236, 23,100,
-244,217,212,103, 11, 86,192, 79, 95,158,179,185,184,153, 21,120,127, 32, 27,252,214,110, 77,118, 26, 6,124,165, 32, 78,222,112,
- 10, 88, 25,183,235, 29, 98, 14, 96,245, 90,169,212,228,206,225, 29, 78, 91,208, 33, 91, 30, 91, 91,204, 91,244, 41,181,155,104,
-178,175,104,108,135,126, 59,166, 33,145,158,133,145,158,167,173, 57,148, 47,148,144,197,179,202, 34, 51,177,169,154,157, 99,111,
- 43,246, 67,133,199,140, 93,127, 92,143,107,109, 36,186, 90,232,127,254,205,119,210,219,219,149, 31,223, 45, 81, 65,143, 56, 20,
-114,227,109,210, 80, 45, 21,244,217, 94,208,187, 4,207,207, 84, 11,152,114,165, 32,221,122,150,134, 71,185, 6,254,188, 41, 29,
- 24,219,120,107, 98,185,142,192, 2,211,226, 4,147,232,235,219,177, 25, 92,177,225,153, 73, 6, 34, 17,224,187, 97,215, 13,160,
-201, 98,177,225,206,108,175, 93,100, 18,215, 91, 74,241,120,227,189,190, 41,182, 41, 82, 64,228,139,191,213, 2,198,141,143,156,
-181, 99, 74,149,193,195,201,145, 6, 5, 1, 98, 55, 12,180, 74, 52,135, 61,140, 62,216,137, 3,202,164,198, 30, 57,223, 1,179,
-176, 59, 28, 47,244,198,154,171, 18, 60,192, 77,202,211,116,177, 35,103,134,192,241,172, 3,162, 25,101, 42,230,148,225,163, 59,
-134,252,190,157,139,227, 65,122, 20,249, 73,169, 64,244,135, 15,222, 0,238, 56, 6,139,147,109,130,139,157,237,161,185, 24,249,
- 84, 86,211, 80, 67, 76, 0,119,159, 25,227,161,231, 25,204, 53,184, 87,179,220,189,246, 0, 86,240,204, 74,241,142, 86,171,216,
-255,225, 97,194, 72, 8, 2, 36,144,104, 69,145,210,159,207,121,136,160, 84, 6,149,161,193,120, 46, 21, 45, 8,238, 63,216,211,
-228,209, 50,131, 6,189,185,160,171, 12,180,176, 64,119,138, 84,181, 4,151,126,190,162,231,240, 42,220,184,134,199,204, 17, 22,
-161,137,255, 35, 57,178,120,208,135,186, 2, 6, 3, 70, 70,250,160, 47,136,222,246,185,223,186,133,185,128,155, 34,144,170,150,
-200,214, 80,101,181,154,153,218,154,200, 86, 4, 37,245,125, 78,145,226,169, 85, 40,196,116, 16, 92,185,139,218, 24,130,156,175,
- 17,174, 13, 40,230, 38, 49,248,103, 78, 1,141,165, 62, 68, 21,179, 86,116,194, 66, 81, 98, 66, 13,158,147,242, 76,213,179,208,
- 9,129, 66, 2,173,237,172,115, 43, 19, 42,207,153,131, 32, 58,188, 76,222,120,219, 76,218,232, 54, 3,179, 34, 69,162, 67, 5,
-141,235,134,207,132, 53, 15, 20,194,150,174,163,161,195, 26, 18, 29,118,236, 65,198,117, 72,154, 8,244,190, 32,225,227, 94, 33,
- 48, 94,244,135,210,109,180,236,220, 45,103,122, 46, 43, 26, 32, 81,104, 9,121,236, 90,199, 11, 36, 65,144,196,112,253,177, 79,
- 29,107,229,223,211, 14, 28, 5, 66, 38,101, 97, 44, 87,188, 70,105, 49,100,130, 50, 9, 71,215, 16,155, 1,215, 25,103, 19, 35,
- 75, 8,172,192,216, 98,170,247,235,213,101, 79,238,237,182, 9, 62, 29,105,161, 52,221, 24, 66, 28,221,105,222,141,250,240,153,
-230,110,125,176,113, 1,134,133, 17,206,202,182,195,144,237,138, 41,213, 32,127,211, 57, 27,214, 99,169,247, 29,227,107,156, 79,
- 24,181,224,245,233,139,237,144,218, 43, 77,110, 40, 98,237, 30, 11, 71,146,166,149, 30, 83,222,153, 24,133,212,155, 32, 48,164,
-253,198,113,209,185,138, 72,220,179, 26,219, 57, 49,212,190,183,149,206,141,156,142,255, 15, 93,252,138,197, 12,199,218,133, 28,
- 38, 11,107,249,238,116,162, 73,221,147, 35, 45,160,158, 95,141,229,160, 93,211,235,151, 37,163,165, 94, 46, 58,115, 20, 43, 28,
-141, 2,102, 70, 34,164, 43,105, 0, 95,175,124, 57,216,223,231,235,236,237,180, 53,201, 93,114,234,133,113, 52,154, 2,116,103,
-133,226,194,108, 97, 25, 83, 12,231, 17,210, 53,109,173,113, 96,197, 14,107, 85, 64, 96, 54,235,217, 17,252,224,139,117, 34,150,
-125, 23,228,241,156, 35,182, 96, 7,143,105, 14,186,233,193,120,170, 49,109,206, 73, 13,126,254,129,118,101, 72, 10, 0,253,225,
-249, 13,156, 22,130, 61, 75, 90,176, 71, 62,165, 89, 55, 97,180,101, 23,250, 44,136, 12,235,208,215,226, 25,147,156,120,123, 61,
- 35,234,170,175,245, 62,146, 34,235, 7,206,108, 43,166,221,104, 93, 27, 9,176,119, 48,197, 4, 45,115,164, 77, 92,129, 52,206,
-181,118,131, 7,148,132,246,186,251,242,240,222,125,121,125,121,237,116, 31,132,147,138, 53,141,187,124, 54, 57,191,253,246,132,
-159,193, 40,192, 92, 11, 91, 44,246,157,239,131,231,176, 3, 80,159,131, 47, 69,184,148,165, 54, 10,225,108, 99,178,225,146,221,
-138,216, 28,116,118,164, 81,207,235,231,200,243,204, 64, 31, 29, 53, 48,146, 62, 48, 13, 88,241, 2, 53,255,237,243, 51, 22,151,
- 72,174,208, 13, 56, 62,216,225,136, 63,113, 30, 5, 84, 94,212,100,215,108,230,216,108,226,247,192, 12,212,171, 38,244, 52,157,
- 21, 76,180, 11, 88, 43, 96,180, 50,121, 42, 18, 98, 50,133, 53, 40,124, 11,178,165, 12,253,209, 65,111,174,148,189,173,223,124,
- 10,190, 69,172, 40,105,145, 15,163, 45, 54, 16, 14, 88, 11,189,135,212, 41,146,114,224,121,172, 0,109,181, 5,172,193,149, 22,
-102, 79,244,188,124,124,140,243,105,203, 88, 26,228,136,177,120, 54, 14,140, 13, 41,239,241,204,138,142, 78, 21,190, 24,121,185,
-153,218,185,169,148, 27,178, 91,197,245, 93,104,131, 81,163,241,144,166, 7,141,107, 17, 71,247,184, 38,240,100,200, 96,193, 78,
- 14, 53, 4, 36,178,102,194,192,138, 93, 47, 54, 42,177, 74,201,132, 83, 50, 78, 20,102,229,248,176,166, 56,133, 31,152, 48,129,
-109,156,134,116, 22,157,183,255,198, 84, 2,193, 51, 74, 77, 11, 2,223,121,228, 58,241,133,172, 9, 91,172,163,196,249, 6,248,
-220, 81, 2,100, 87,243,179,114,158, 15,101,132,177,156, 22, 28, 16,143,121,118, 54, 48,148,172,231,100, 53, 82,112, 86,242,102,
-162,104,174, 79, 9,229,245, 80, 1,130,195,218,156, 65,120, 98,237, 30, 6,163, 6, 37,190,241,215, 17,228,114, 14, 24,156,120,
-182,247,180, 49,190,184,177,147,237,170, 48,110,123,183, 91,225, 23,126,121,177, 36,226,146, 14, 85,122, 83,119, 59, 13, 57,216,
-109,177, 18, 28,205,178, 76, 44,160,173,128,230,241,176,108,174, 79,196, 34, 20,172,115, 43,229, 76,120, 1, 81, 17,104, 69, 32,
-120,123,253,185,118, 27, 48,246, 88,240,154,212,202, 57,118,243, 64,238, 99,239, 21, 91,175,199, 4, 80, 43,228,104, 88,211, 27,
-205, 24,172,240,179,168, 59, 30,216, 4, 1, 9, 34,163, 31,170, 94,170,146,154, 5,241, 9, 60,240, 72, 20,148, 24,116, 15, 56,
- 19,120, 96,201, 18,166, 16,240, 42,174,148,107, 6, 10, 17,227, 31, 35,208,226,224,198, 73,142, 99,244, 48,140,182, 34, 39,182,
- 83,205,144,122,100,227,117, 83,126, 75, 45, 83,209,221,134, 78,138, 55,112, 98, 44, 20,155,209, 34, 38,113, 9,213,243, 83,117,
- 66,243,189,246, 29,184,198,138, 68,251,250,208,241,178,205, 57, 44, 54,164,185,211, 71,160,120, 10,247,206,161,117,169,110,170,
-176,164,235,217,218,130,235,124,201,251,219,168,213,205, 57, 78,171,246,177,118, 59,101, 61,235,152,220,140, 70, 61,130,156,104,
-176, 33, 38,111,137,160,135,207,132,179, 82,228, 56,189,194,125,252, 91,119,139, 16,231,150,171, 87, 55,228, 72,183,155, 77,185,
-126, 61,101, 18,132, 5,241,124,145,227,248,112, 4, 3, 14,189, 25,133,146,169, 41, 78, 52, 56,153,244,173,118,167,244, 73, 94,
- 80,123, 26, 29, 34, 65,115,250, 52, 98,251,129, 98,236,102,104,221, 29,174, 15, 4,105,208, 13,125,249,114, 65,234, 85,202,123,
-198,207,162, 1, 8, 60,196,179, 86,200,228,156,127, 59,158, 81,124,118,154,131, 80,201,204, 64, 79, 27, 87,164,110,213, 32, 61,
-113,123, 62, 71,207, 19, 83,124, 35, 88,109,101,231, 10, 93,240,194,217,205, 98, 21,129,253, 46, 24,231,232,166, 76, 90,217,220,
-245,176,223,142,220,253, 1,117, 9, 6, 35, 25, 9, 92,233,224, 59,252, 69,226,158, 95, 32,144,157,232, 12, 65,178,111, 12,104,
- 2,183,135, 55,246, 66,196, 93,183,159,154, 53,133, 25,211,205,152,172,228,201,197, 84,126,249,163, 67,153,172,180,243, 91, 39,
- 44,254, 34,160,130,245,243,160,131, 35,189, 13, 83,158, 68,139,157,217,204,126, 38,214,134,192,143,120, 43,233,247,111,197, 7,
-229, 83, 63,199,225, 78, 87,190,121,118,194,241, 59,146, 1,216, 61, 24,107,163, 72,203, 58,110, 49,138, 52,202,236, 38, 17, 93,
- 9,251,195, 12, 1, 81, 88, 13, 46, 19, 99, 4,157, 15,134,148,122,174,233, 61,199,153,203,162,147, 79, 92, 76, 2,230,200,207,
-146,226,167,119,155,159,141,222, 13, 64, 66, 99, 34,130,145,110, 46, 75, 28, 17,126,150, 93, 91, 97,108,196,125, 92, 83,189,207,
- 49,136,220,116, 17,241, 9,211, 30, 88,143,162, 88, 78, 25, 13,144,164,206,228,138, 76, 92,197,130,231, 92,242,180, 0, 24,220,
- 18,231,130,238, 29,251,234,123, 71, 71,134,135,152, 27, 40,173,219,110,107, 87,252, 82,191,183, 44, 59,205,150, 28,239,238,144,
-237, 17,184,100,157, 2,125, 17,155,128, 57, 66,151,136,226, 57,155,243,183,103,138,197, 28, 88, 80,129, 9,146, 33,113, 97,154,
-147,105, 52, 12,196,169,127, 86, 43,151,248,245,245, 90,141,211, 71, 9, 74,164,146,193,143, 33,220, 44,157,239,194, 82, 6,147,
- 25,175, 59,228,185, 23,208,101,215, 6,239,120,239, 64, 11,128,146, 28,237,192,203, 92,187,108, 47,195, 24,137, 56, 77,111,134,
- 92,214, 77,129,108, 50,132,115,129,149, 22, 18,183,169, 90, 6, 92,139, 20,181,216, 39, 94,138,120, 34,155,158,210,187, 32,107,
- 13,202, 81, 43,207,231, 0,114,183, 0, 92, 83,214, 90, 98, 78, 67,193, 95,207,240, 1,218,176,225,146,196,132,158, 86,243, 33,
-155, 79,208,164, 79,174, 39, 60,215, 56, 7,136,187,216,193, 35, 7, 93, 79,107,178, 87, 5, 75,195,176, 41, 40, 18,240,254, 58,
-221, 38,241, 10,104, 0, 11,249,128, 5,222,100,162,247, 86,175,237, 13, 86,144,139, 21, 65,182,211,169, 94,215,213, 64, 6,218,
- 48,128, 66,232,103,160,218,218,144,159,190,127,151,141,225, 88, 27,129, 76,106,226,128,209, 50,110,128,209,194,188,173,158, 53,
-146, 0, 21,161,144, 64,157,129,131, 9,206,167, 40, 28,127, 75, 47, 99, 23,109, 53, 0, 35, 6,144,194, 27,103,196, 97,226, 11,
-129,187,224, 1, 31,190,112, 97,178,165, 25,118, 96, 49, 71,181, 72, 52, 0,156,181,243,101,233,205, 55,124,176,144,115, 65,117,
-107,151,178, 20, 3,225,200,223, 79,182,202, 93, 38,139,105,137, 29, 55, 98,145,216, 88,227,114,170, 21,148, 38,210,124,102,101,
- 93,104,198, 70,149, 25,215,129,162,144, 73, 60, 19, 89, 72,182,158,211,241,118,148, 68, 74, 20, 65,120, 27,138, 39, 28,214,180,
-123,154,135, 28, 73,117,234, 69,118,159, 80,177,194, 67, 28, 56, 52, 53,130,191,233, 73,196, 20,159,192,193,194, 78, 86, 76,107,
-139, 43,130, 18, 1, 21, 17,171,178,210,218,232, 62, 1,246,143,203, 88,134, 27,171,208,113, 45,240, 38,231,161,185, 92, 45,230,
-107, 62,224, 5, 4, 29, 13, 16,184,161, 72,100, 86, 73, 39,182,203,210, 3,230,107,254,170,107, 23, 89, 44,149,153, 48,134,227,
-145, 1, 22,183,202, 97, 78, 21,208,115, 54,153,148,207,181,224,159,101,183, 42,230,129,238,155,160, 75,226, 92,220, 82,151, 49,
-217,118,232,241, 22,212, 70, 37, 44,124, 99,108,244,154,181, 75,166,171,181,117,234,161, 43, 4,169, 20, 6,153,218,156,157, 47,
-128,127, 2, 63,216,122,164,227,156,225,253, 96,220,201,207,229, 64, 84, 91, 25, 92,151,252,145,108, 80,140,148, 50, 69, 6, 3,
- 58,171, 69, 57, 51, 86,208,159,213,213,128, 4, 16, 25,144,222,212,250,215,239,108, 87,235,212,125,175, 23,181, 96,172,149,236,
-245,156,126, 59, 69,105,128, 36, 38, 80,173,160, 65, 41,239, 86, 1,107, 57,234,212,165,172, 21,115,183,221,210,226,106, 41,119,
-238,220,149,207,255,240,148,201,167,175,193, 6,238,100,179,121,188,237, 76,184, 70, 32, 16, 80, 52, 40,193,229,171, 72,206,107,
-226,192,129,192, 7, 96,101,128, 98, 4,129, 5,220,212,136, 99, 56, 61, 83, 90, 32, 32, 33,155, 10,163, 41,116, 1,248, 23, 80,
-225,106,195, 78, 28, 96, 28, 76,157, 98,103,148,147,215,207, 64,149, 43,253, 23, 84,166,162,179,144, 68, 82, 71,209,176,116, 12,
- 1, 92, 60, 80,201, 22, 78,242, 23,239,181,136,128, 23,218,148, 32,117,119, 67,242,165,148, 50, 40, 61,171,112, 59,190, 39, 30,
-198,169,128,177, 72,208,167, 18,206,102,120, 20,209,145,226, 57, 77, 77, 99,196, 1, 0,215, 75,135,197,112,128,202,116,250,197,
-169, 78, 20, 59,136,125,188, 53,254, 97, 35,237,214, 7,214,181,219,116,176,129, 49,179,222, 23,116, 43, 4,114,105,199,254,111,
- 63,123, 33,239, 29, 86,229,253,187, 29,249,195,243, 27,238,119,193,139, 6,181, 7,207, 39, 64, 91, 48, 51,202,106,156,184, 25,
-204,137,199,201,102,141,130, 5,196,241,108,216,147, 82,173,173,247,171, 40, 59,221, 29,162,235, 47,175,175, 9,122, 2,117, 20,
- 5, 26,130, 44,148,210,214,238,124,235,119,179,180,198,185,192, 26,228,188,151,144, 74,151,207,216, 78,255,186,191,148,111,130,
-172,220,223,109,243, 92, 25,157, 50,100,119,139, 2,210,174, 81, 66, 64, 87,137, 22,154,182, 90, 24,143,214, 44,158,120,159,215,
- 17, 39,109,155,208,237,178,161,244,185, 10,183, 46,132,224,109, 71,137,237,184, 87, 78,181,209,212, 29, 99,118,243, 57,174, 74,
-241,108, 22,201,251,198,212, 40, 91,200, 56, 74, 99,204, 73,197,130, 56,153,133,254,154,203,254,206,158, 12, 52, 94, 54, 53, 81,
-123,155,185,180, 43,192,224,140, 89,228,238,107, 2,253, 73,217, 24, 51,136,131,136, 61, 88,239, 1,204, 92,175,150,121,174,233,
-126, 86, 47, 50, 89, 46, 92, 17,180,219, 42, 82, 22, 22,211, 47,124, 47, 0,140, 65,198,128,138,147, 89,200,184,153,207, 91,241,
-132, 70, 1, 19,226,149,254,250,237,151,125,121,125,113,102,241, 61, 73, 39,177, 1,155,153,209,116, 33, 71,221,154,158,127,159,
-171,168,151,151,115,105,180, 54,242,214,189,174,100,181,185,193,217, 5,206, 99,179,201,188, 1,163,234,119,150, 74, 9, 19, 43,
-129,148,117, 83, 58,164, 17,217,196,214, 6, 17,139,168, 57,147,191,230,111,141, 73, 43, 62,123,112,189, 36,232, 87, 27, 29,240,
-243, 25,151,240, 12, 98,218,198, 41,155,239,228,164,109,234,100,190, 6, 9, 49, 57,120,255, 0,145,151, 75,218, 32,101, 55,156,
- 86,224, 92, 63,126,254,130,159,167,244,160, 45,251, 13,159, 42,168,104,136, 64,229, 3, 72,183,187,211,214, 98,115,194,231, 58,
-227, 71,156,220, 77,103, 80, 90, 13,228,250, 6,218,242, 53,253, 44, 43,105, 53,118,164,166,159,119,120,209,211,164,159,149,167,
-167,125, 45,160, 67,121,248,255,114,245,166, 61,150,156, 89,122,216,137,237,238, 75,238, 89, 89, 43,139, 69, 54,217,139,186,135,
- 99,201,146,109, 9,146,160, 15,134, 62,250, 15,248,183,248, 63, 25, 48, 96, 88, 48,100, 96, 6,150,212,203, 76,207,116,179,185,
- 21,139, 85,149,149,123,222,125,143,205,231,121,206,137,200, 26,247,128,195, 98, 86,230,205,123, 35,222, 56,235,179,188,120, 42,
- 47,158,157, 72,188, 35,106,189,193, 32, 1,201,214,200,165, 31,177,151,141,189,139,203, 93,170,173,246, 96, 70,159,234,156, 99,
- 36,217,216, 57,181,133,143,134, 82,167,186, 80, 6,144,159, 58,103, 18,177, 66,192,212,148,216, 9, 34,233, 67, 54, 52, 10,107,
- 58, 11, 14, 5,132, 88,110,181,123,133, 8, 77,169,213,237,155,171, 57, 65, 26,160,172, 80,154,210,119,250, 60,232,238, 75, 76,
- 5,168,210,249,183,250, 94,208,149, 53,186, 7,178,141,244, 64, 53,240,112,106, 5, 40, 17, 71,231, 91, 31,129,138, 3,198, 10,
-231,130,150, 62, 89, 48,197,173,156, 35, 37,140,194,146,194,144,227,175, 78,247,100,113, 62,227, 13,125,114,114, 32,135,154,192,
- 83,242, 40,141,115,138,239,195, 67, 31,148,166,170,132, 25, 8,138, 28,136,240, 96,116,133,199,170, 65,126, 41,156,134,128,154,
-172,236, 68,173, 91, 69, 0,106, 65,114, 81,191,115,157, 19, 74,225,182,162,122,243,225, 91,168, 29,226, 50,181,215,103, 48,118,
- 30, 50,186,117,200, 37, 46, 49,162,131, 95, 57,168, 30, 90,233,210,133,136,251, 57,179,248, 3,250,191, 2, 36, 33,185,132, 46,
- 55,154, 87,110, 93,164,235, 45, 77, 38,178,116,145,152, 64,106, 78, 55,129, 75, 72,160, 88,174,137,119,209,187,173,239,213, 67,
- 71,105, 26, 98,180,178, 68, 53, 0, 85,219, 30, 80, 31,243,226, 28, 65, 36, 4,129,105,137, 14,168,209,240,189,124,240,209,110,
- 40, 35,245, 3,247, 51,230, 84,197, 10,181,106, 95,140, 17, 99, 19,232,104,140,248, 83, 11,122, 8,182, 40, 40, 90,238,170, 84,
- 82, 86, 51,228, 14, 20, 73,169, 73,135,188, 53,167, 35,237,118,201, 74, 24,215,114, 52,158,202,253,197,157, 38,243,142,188,122,
-124, 32,211,251, 59,114,153, 65,217,124,245,226,153, 44,180, 96,128,253, 41, 42,234,183,111,111, 72, 83, 60,222,239,201, 45, 53,
-154, 31, 76, 73,240,121, 33,106, 81,164,123, 28,161,127,255,126,172,137,127,230,150,184, 38,190,129,103,129,215,215,249,222, 29,
- 45,190,112,241,209,141,115,154,160,137, 30,106, 97,177, 83, 64, 49,150, 29,148, 29, 6, 19,188, 6, 2, 4, 21,170,124,188, 13,
- 65, 23, 3, 79,101, 12, 38, 60, 71,177,143,253, 0,160,210,128, 5, 30, 53,166, 72,152, 38,160, 19,220, 34,209,186, 5,177,173,
- 73,204, 29, 14,247, 14, 0,171, 66,131, 59, 21,197, 34, 43,254,114, 87,165, 99,194,117,243,139, 93,102, 78,128,199, 61, 19,103,
- 41, 93,240, 51,247, 34,138, 54,145, 78,107, 44, 93,107,158,171, 14,160,166,161, 38,169,201, 50,202,140,250, 87,134,230,116, 22,
-137,157,195,202, 92,188,160, 21,174,121,186, 67, 99, 1,207, 98, 43,106,139,113, 73, 34,185,154,103,242,111, 94,244,184,103,207,
-151, 59, 77,204, 11,118,142,227,247, 55, 28, 79,246, 58,134, 76,222,215,164,115, 59,209,251,190, 92,112,202,128, 81, 61, 34,200,
-118, 57, 99, 17,183,205, 99,249,252,213, 43,238, 64, 25,100,123, 37, 71,171,141, 4,204,158,136,142,147,232,206, 64, 39, 68,167,
-188,166,225,146, 21,199,157, 78,139, 83,149,210, 87, 65, 71,253,166,141,170,233, 74,153,213,147, 20, 98,137,202,140, 93, 33, 64,
-135,248,152, 61,141, 27, 29,200,233, 82,162, 84,187,176,109,106,130, 51, 26, 95,102,208,204, 7,247,188,145, 51,102,112, 26,165,
-103, 29,133,146,169,251,153,113, 72,238,236, 35,250, 32,136,120, 82, 15,120, 6, 50,122, 60,236, 76,118, 25,103, 36, 35, 68,214,
-108, 89,245,154, 66, 1, 13,227,248, 97,175, 43,167, 71,135,122,109, 51,249,217,231, 63,151,255,246,151, 31,169, 64,247,228,228,
-137, 22, 58, 63,201,127,251,211, 55, 6,112,135, 38, 8, 98, 76,105,244, 70, 28,139,151, 39,123,230,169,238,156,117,196,144, 55,
-151,134,225,168,146, 43, 37, 78,211,146, 56, 11,112,210,177,147,223, 82,188, 74,216,188,224, 25,253,236,147, 47,245, 28,232,107,
-172, 70, 18,182, 58,198,219,231, 53,109, 83, 72,167, 21, 97, 37,188, 39,195,110, 66,139, 82,128, 50, 55,235,165,252,239,255,247,
-239,220,140, 74,152,119,182,219,140,160,187,141,107,241,179,136,212,223, 53, 26,207, 89,172,131,186,219,108,132,116,111, 3,202,
-125,167,241, 0,197, 7,214,129,184, 87,179,249,138,133, 8,168,139, 4, 0, 19,151,148,217,138,204,139, 76,107, 82, 75, 95, 36,
-139,209,229, 62,214, 28,192, 89,142, 90,204,127,160,163,174, 54, 70,125, 70,211, 0,161, 32, 20,168,185,158,193,103,199, 45, 27,
-253,195, 93,111, 52, 49,163,167,195,158, 92, 93,221, 83,193, 79,124,146,133,236,242,252,180, 41,119, 51,205, 99,122,209,198,218,
-141, 15,122,199,250, 53,196,176, 57,159,251,183, 23, 83, 22,244,143,142, 51, 60, 39, 49,107, 26, 42,114,121, 96,134,235, 77,150,
- 89, 39,105,168, 89,203,234,150, 48,163, 90,224,163,112,201, 88,122,192, 74,225, 50,136,110, 16,225,213,119,104, 66,156,210,136,
-197,253,177,141,139,201, 11,215,178, 81,107,224, 58,212, 8,186,224,122, 95,141, 22,178, 7,247, 25, 32, 25,239,167,236,186, 26,
-218,149, 33,240, 64,219,182,146, 48, 68, 18,192,206,240, 96,208,208,174, 40,101,128, 89,109, 66, 89,234, 5,123,249,244,140,191,
- 15,213, 91,179, 61,148,199,167,129,220,142,166,236, 62,182,105,101, 37, 27,200,139,211, 33, 95, 23,238, 61, 53,202, 31,187, 66,
-125,195,199,131, 54,249,175,236,194, 32,148,160,127,241,135,159, 38,124,207,232, 30, 2,223, 91, 98, 45, 81, 73, 42,226,147,193,
- 16, 5,113, 60,103, 25, 97, 99, 70,116, 17, 8, 20, 41,249,171,133, 59,153,149, 53,213, 5, 62,244,214,205, 89, 64, 78, 29,253,
-138,221, 32,167, 21,161, 85,203,182,223,204,157,175,106,129,118,186, 46,100,190,179, 64,139,177, 33,170, 79,136, 36, 0,161, 9,
-154, 76,228,251, 98, 36,114,152, 92,240,193, 39, 32,241, 65,222,213, 18,185, 81,151,240,174, 72, 75, 11, 13, 29,109,210,175, 15,
- 86,170,214,241,123, 39, 69,113, 13, 87,136, 35, 80, 4, 91,127,239, 6, 99, 83,148, 74, 60,129,155, 11, 90,204,157,219,218,187,
- 12, 19,183, 49,106, 14, 84,229, 0,136,130,199,122, 27,163,230,188,160,196, 37, 84,155,250,189, 1,223, 91,197,191, 46,125, 31,
-207, 29,172,211,128,118, 89, 86,143, 36, 35,167,229, 85, 52, 31,120, 50,175, 40, 35, 25,202,223,125,119, 37,191,126,165,213,174,
- 6,100, 4,214,255,244,247, 63,201,239,126,184,149,159,107, 96, 63,191,221, 74,103,119,195,209, 39, 44, 83, 49,218,108,105, 55,
-247,211, 79,111, 36,229,126, 50, 35,122,253, 94, 43,234,181, 22,193,227,121, 78,173,234, 14,169,104, 13, 6,186,181,118, 58, 64,
- 15, 35,240,194, 10, 18,221,122, 24,197,142, 76,214,206,101,208, 55, 49, 19,119, 59, 35,127, 53, 55,233, 95,232,188,163,208,189,
-155, 78, 13,229,143,209,156,118,240,248, 58,232,117,247,232, 86,105,253,106,200,241,109,106, 90,240,116,150, 34,215, 62,151,102,
- 97,193,151,158, 3,149,101,170, 94,230,133, 6,195,134, 53, 65, 28,197,195, 8, 5,207, 51,180, 33, 0,152,196,185, 71, 23,117,
- 61,221,176,192,132,170, 31,206, 56, 18, 20,198,144, 16,107,170, 4, 99, 32,126,131,137,216, 40, 48,124, 3, 70,154,235,170,139,
-201, 74, 95,133, 84, 50,179,214,201, 24,150,198,185,243,120, 77,200, 33, 6, 15, 30,239,153, 3,147, 66, 79,242, 59, 34,145, 99,
- 2,200, 82, 38,199,134,221,103,253,108, 3, 45,154,222,142, 50,249, 95,134,134,183,217, 17,225,110,231, 25,102, 79, 64,124,195,
- 24, 3, 99,236,110,183,197,130,134, 19,166,194, 88, 17,161,190, 38,246,206, 2, 95, 4,189, 70, 40, 60,127,245,249, 75,153, 76,
- 38,178,131,169, 7,138, 19,231,204,179, 32, 69, 98,228, 20, 68, 88, 56, 26,102, 32,150,195, 97,143,187,107,210,204, 48, 93,137,
-140,206, 5,188, 5,215, 33, 16, 16,210, 4,205,231, 42, 55,109,248,194, 39,138, 80, 31,227,202, 50, 10,141,250, 27,154,254,185,
-121,202,219, 42,105,163, 93,230,106, 49,229, 56,154,190, 17,206, 6, 68,103, 87, 56,134, 8, 56,139,194,169,185,120, 38,184,146,
-162, 67, 88, 66,208, 95,165,154, 72, 62,251, 6,236,138, 45, 19,251, 90,223, 23,164,114,159,106, 1,244,225,250,134,210,185, 17,
- 93,216,154, 76,102, 16,228,145,226,177, 38,225, 55,154, 80,150, 94,204,155,186, 99,225,130, 80, 63, 92,220,154,107,103,173,204,
-104,137,205, 86,110, 22, 71, 13,111, 99,137, 16,184,133, 84, 11, 13, 20,104,208, 34,137,108, 92,195,132, 14,176,219,111,190,252,
-140, 66, 56, 0,167,246,124, 2,138,114, 15,160,109, 60, 23,208,180,128, 30, 58,242, 17,227,162,158,193,223,127,253,150, 9, 81,
-156, 54,140, 56,105, 76,187, 53,241, 12,248, 25, 60, 75, 0,161,165,219,146,210,181,196, 40, 20, 33, 63, 43, 27, 10,178,102,182,
- 90,160,105,193,143, 66,173, 97,247, 26,194, 93, 77,125, 14, 74,183, 21,166,109,183, 99,134,122,237,164, 6,108, 83, 50, 54,182,
- 85, 36, 48, 3,153, 79, 55, 83, 22,219, 49,155, 78,228,141,123,109, 32,118,233, 15, 50, 95, 60,210,216,115,172, 57, 14,247,193,
- 20, 63,111,239,103, 82,237, 49,108, 82,184,113,115, 35,232, 86, 52,228,116, 88,202,197,164,208,216, 96,224,230,179,163, 83,105,
-134, 59, 78,124,214,250,144,190, 62,159,202,104,194,213,128,113, 57,197, 65, 22, 8,130, 6, 22, 19,186, 21, 33, 1, 36,212,158,
-137,235,100, 82, 41, 8,113,164,238,230, 28,161,239,168,237,107,230,186,134, 96,129,221,117, 76,250,133,240,193,163,188,168, 87,
-226, 81, 96,133, 66,189,107, 69,231,162, 15,227,177, 86,106,157,134,118,199,250,139,177, 75,135,158, 48, 42, 88,160,238, 81, 17,
- 66,185,206,204, 4, 52,249,232,131, 68,173,233, 34, 96,225,208,219,107, 75,217, 62,229,104, 25, 32, 52, 28,138,133, 86,180, 61,
-125,104,250,221,166,204, 96, 50, 66, 69,159,152, 59,238,175, 62, 61, 33,231,254,106,190,165, 9, 3, 80,251,240,134, 71,124,216,
-235,119, 37, 2,232, 68,127,217,235, 55,151, 12, 20, 8,202,216,163,231,142,112, 36,181, 12, 35,174,118,117, 0, 75,238, 32, 41,
-191,138,253,142, 87,119, 38, 90,227,118, 77,110,142,128, 74,222, 64, 18, 86,212, 84, 73,137,221,121,110,160,194,202, 11,155,197,
- 12, 42, 87,234,187, 4,220,109, 45,244,107,171, 34,150,233, 54,115,129, 18,219,169, 97,133,144,101,121,173,207, 30,227,129,143,
- 19, 71, 77, 7, 46,225, 90,214,157, 90,165,209, 46,254,187,170,196,153, 17, 12,105, 83, 16, 28,214, 32, 15,106,250, 20,195, 83,
- 97,180, 53, 78,112,228, 1,236, 68, 94,184,171,170, 97, 84,184,173, 12, 81, 40, 51,107, 35, 59, 34,182, 25,128, 18, 23,232, 40,
-124,119, 95, 80,186,211,120,242,160,145,180, 89,205,227,123, 49,206,196,123,133,240, 3, 58, 93,152,213,228, 44, 20,108,151,156,
-126,228,228,134,117,131, 73,162,134,156, 84, 72,105,180, 57, 32,103,255,207,255,250, 45, 31,246, 95,189,108,202,187,235,145,188,
-131, 8, 17,130,156, 38,165,203,187,169, 60,214,162,172,215, 31,202,124, 59, 54,207,249, 8,197,212, 82, 26,195, 33, 31,238,237,
-214,244, 13,238,167,154, 20, 34,208,118, 2,114,176, 97, 39, 73, 94, 55,172,108, 51,163, 99,157, 29,238, 51,217,183,156,115, 78,
-227, 22, 10,200,236,216,113, 32, 81, 96,111,142,194, 18,207, 15,237, 90,251, 93, 22,100,176, 83,196,184, 29, 35,192, 28,221, 30,
- 70,231, 94,156,129, 66,133, 68,128, 4,128, 49,255,106,187,115,249, 91,128,124,130, 90, 81,207,170,125, 75,196, 0,181,161,238,
-108,106, 48,133, 67,225, 18, 69, 18,192, 65,212,215,213,123,209,104, 49,112, 10, 16,246,137,211, 68, 11, 23,133,114,168,157, 33,
-183, 29,104, 26, 4,220,103, 18, 17, 76, 41, 93,179, 24,165,131, 33,181, 79, 3, 82,209, 2,151,160,173,236, 71, 75, 71,184,187,
-137,179, 5,224,178,116, 32,159, 1, 23, 93,239,216,148,246,124, 77,195, 29, 60, 2,187,254,243,244, 81,155,157,203,155,243,123,
-217,239,128,237,209,160, 40, 16,236,154,145,180, 48,246, 6, 74,248,237,245,148,190, 14,160, 1, 2, 45, 62, 70, 39,230,192,216,
- 45, 89, 23, 5, 85, 32, 39, 26,248, 17, 7,146,210,212, 26,151, 24, 13,239, 92,167,127,107,157, 40,167,136, 4,188, 13,121, 47,
-177,118, 0, 38, 9,248,150,166,163,245,241, 76,204,215,150, 52, 75, 23, 6,232,208,168,167,237,133,181,117,213,181, 65, 74,104,
-105,141, 44,132,220,146, 27,198,255,232, 40, 81,204, 82,250, 85,239, 11,232,119,166, 41,150,179,224, 42,252, 57, 52, 63,118,139,
-187,152,180,128,113,130,248, 88,144,167,223,192, 0,218,176, 41,136, 71, 88,187,233,107,175, 54,115, 62, 39, 48, 50,193, 57,254,
-246,221, 7, 9, 50,237, 88,181,224,223,235, 64,222,181,207, 17,252,235, 55,175,217, 16,189,122,254, 76, 86,223,253,192,231, 17,
-172, 27, 36,117,238,255, 51,155,168,221, 77, 23,198, 95, 7,248,185,233,147, 83, 49,138, 36, 87,139, 97,131, 73, 20,212, 67, 60,
-151,237,106,133, 84,152,144, 15,242,195,254,209,158,222,195,196,214,108, 97,131,157, 50,214,119,152, 46, 66,124,167,244, 51,133,
-194, 31,160,176,179,147, 83,106,159,252,242,243,103, 50,154,239,228,234,126, 98,184, 47, 76, 8, 60,223, 64,184, 11,147,173,110,
-210,150, 37, 87,107,214,116,161,121, 74,195,128,180, 55,116,223,104,124,128,163,233, 52, 7,204, 27, 13, 78,244,118, 60,251, 40,
-224, 81, 40,195, 27,189,210, 80,232,107,254, 0, 94, 6, 96,241,210, 89, 91, 69,209,224,179,136, 9,218,116,189,227, 20, 0,205,
- 5, 39,182, 96,232,132, 77,190, 38,226, 37,238,253, 79,231, 23,244,132,248,171,151,208, 2, 41,217,108,204, 87,107, 45, 42, 67,
- 22,161,112, 40,157,122, 62, 54, 59,215,146,177,225,233, 65, 32, 55, 55, 43,125,207,251, 50,154,109,228,104,239,169, 4,227,119,
-156,120, 2,231,160, 89, 78, 98, 84, 0,168, 40,113,192, 3, 19, 33,230,168, 24, 20,139,163, 97,167,182, 12,205,139, 7,201,201,
-202,214,145,136, 88,215,184, 46,188,107,101,183, 22, 85,244,160,178,222,201, 25,146, 60,245, 4,103, 35,135,140,187, 42,169,209,
-231, 52,121,225,232, 58,164, 65, 2,170,188, 78, 35,244, 20, 98, 10, 69,160,165,132, 46,230,130,135, 6, 32, 12,116,181, 39,123,
-118,128, 80,157, 74, 43,102, 59,210,103,145, 80, 58,165,164,144,253,179, 35, 75,204,168,230,225, 20,215,109, 26,183, 94, 51,229,
- 95,125,118,194,106,154,149, 17, 68,251,193,117,198,248, 74,204,206, 19, 35, 35, 8,242, 0,232, 2, 63, 38, 9,163,127,226, 23,
- 30,110,179, 26, 45,110,160,163,130, 64, 29,155, 98,216,168,138,188,241,194,170, 87,114,237,221, 57,206,146,108, 97, 93,109,108,
- 9, 9, 63,191,118, 39,172, 32, 46,153, 36, 66,239, 72, 97,203, 55, 7,202, 58,106,218, 56,177,176,241, 14,130, 4, 58, 91,240,
- 38,171, 93, 52, 18, 32,173, 23, 27,182,187, 45, 89,117, 69,110,167, 26, 24,135, 87, 3, 8,139, 53, 87, 66,195,231, 49, 46,172,
- 43,180, 33, 64,165, 22,196,185,123,166, 8, 79, 86,139,142, 66, 73, 77,124, 39, 91, 97, 38, 76,135,125,199, 63,227, 76,209, 57,
-170, 48,247,179, 74, 78, 21,157, 48, 43,104,116, 54, 12,102, 6,114,139,221, 60,136,129,167,217, 50, 31,250,205,214,193, 53, 67,
-227,124,163,115, 17, 71,128, 55,155, 60, 91, 72, 6, 64,202, 47,214, 72,226, 45,126,230, 20,136,242,204,126,127,165,122, 7,148,
-232, 31,190,121, 71,149,177, 15, 55, 19,121,119, 53, 38, 24,110,181, 94,146,194,212, 78,186,146,104, 65,251,179,231, 45, 98, 19,
-222, 92,220,115,186, 4, 80,216,253,100,101,202,132,120,191, 96, 31,108, 77, 61, 15,215,110, 91, 66,240, 40,228, 26,128,166, 50,
-122,221,247, 14,134, 44, 46,241,126, 65,119, 2,181,111,189,219,112, 47,216,218, 5, 44, 22,160, 42, 87, 77, 93, 54,233,198,215,
- 73,134,121, 64,251,252,248,120,224,118,157, 13,125, 47, 55,188,198,247,211,185,252,252,147,167,178, 63,140,249,153,110,180,195,
- 4, 66, 28,222, 10, 8, 4,192,175,228, 94,188,149, 13,116, 37, 45,189, 54, 75, 13,220,218,197, 14,204, 90, 55,194,200, 87,239,
- 43, 38, 16,205,200,112, 36,224,235, 86, 3, 36,179,154, 20,231, 26,219,154,136, 42,105,149, 74, 59, 49, 45, 37, 39, 85, 68,220,
-187,240, 84, 88, 26,155,161, 42, 18, 43,241, 37,128,197,136, 55, 0,100, 10,157,139, 41, 87, 27, 82, 61,207, 30,208,221,254,255,
-209, 80,160, 0,194,115,143,194, 5,159,139,142,117,154, 24, 33, 16, 3, 36,254,111,191,191,151, 95, 60,237,201,165,199, 39, 88,
- 55, 35,246, 96,103,138, 87,195,250, 2, 93, 47,186,105, 4,115,116, 84, 8,158,143,251,135, 92, 1,252,248,238,173, 28, 29, 63,
- 33,255,124,166,239,121,111,111, 72,150,203, 48,214,228,189,159, 48,144,239, 56,254,207, 57,181,192,212, 11, 93, 20, 10, 27,136,
-126,224,189, 99, 2,178,195, 61,239,152, 34, 35,232,160,152, 22,132,252,125, 54, 62,167,186, 26,227, 87,224,234,136, 54,253, 66,
- 33, 15,124, 13,186,252,208,129,186,187,118,155,198, 33, 81, 84, 57,196, 65,165,174,237,238,126,230,222, 70,217,236,157, 97, 92,
- 50,198, 97,187, 47,120, 31, 88, 35,224, 10,130,219, 60, 24,236,177, 24,164, 20,183, 62, 39, 24,235,163,160,228,212,212, 53, 61,
-226, 48, 33, 43, 8,130, 48, 81,164,215,118, 49,209,124, 16,201,187,243,115,249,213,207,247,229,217,147, 23, 4,142,181, 8, 42,
- 11, 9,116, 70,220,197,202, 0,103,246,237,205,148,187, 94,116,214, 7,189,150, 43, 20,218,164, 7,177, 28, 13, 33, 18,232,254,
-160, 77,221, 0,128, 9,169,135,145, 27,162,158, 29,241,202,118,217,179,197, 74,174,111, 87,242,195,251,239, 89, 4,150, 44,210,
- 17,155,244,218,181, 91,110,175, 92,200,207, 95, 82,241,132, 20,177,255,241,215,159,200,239,255,252,142,135, 7, 30, 28,152,102,
- 18,244, 73,229,200,146,247,163,215,107,153,241, 81, 94,210,199, 4,184, 11,116,218,192, 78, 32, 66,127,246,108, 95,230,187,150,
-139,117,133,114,121,125, 35,231, 90, 16,246,245,231,110,119,107,121,113,186, 71,169,238,203,209,154,158,229,157,184,164,105, 24,
-166,116,200,119,104, 24, 81, 48,226,254, 97, 77, 12,243,129,201,116,172,241,119,200,162, 14,247,133, 94, 16,100, 17,164,124, 47,
-223,254,244, 78,243,201, 75,121,126,144,106, 19,209, 37, 29, 22,128,105, 19, 29, 50, 16, 95, 4, 17,181,141, 97, 98,118,243, 53,
-243,208,171,199,109,234, 43, 52,123, 29, 89,193,208,108,240, 84,138,209,159,157, 22,172,255,244,219, 6,130, 59, 26,116,233, 4,
- 3, 64,194,249,237,146, 9,172,225,182,166, 69,109,115,233, 18,163,174,174,246,192, 87, 46,107,165,163,210, 29,219,108,108, 31,
-212,106, 81,245, 94,174, 48, 30, 48,119,110, 14,172, 50,100,161,209, 52, 90, 90,165,133,253, 6, 43,248,210, 59, 72, 92, 16, 19,
- 63,136,101,180, 72,229,248,160, 75, 11, 63, 36, 19,173, 1,165,223, 52,208, 19,128, 66, 56, 4, 24, 91,147, 83, 88, 66,190,115,
-103,198, 10, 26,164, 3,252, 46, 4, 75,125, 56, 90,145,153,196,112,159, 12,159,227,209, 84, 59,218,140, 84, 56, 0,192,176,135,
- 77,177,150,128,240, 73, 28,242,192, 2,153,137, 67,221,208,191, 67, 85, 29,186,184, 9,198, 70,181, 98,148, 24,104,173, 44, 35,
- 15,138, 5, 21,182,104,214,224,244, 33, 36, 7,113, 10,159, 25,140,184, 96,139,107,124, 3,157,218,242,215,142, 35,219,117, 99,
- 98, 1, 16,213, 84,187,251,109,168,221,171,126, 29, 85, 57,198,166,248,205, 8,114, 0,237, 25,230, 32, 97, 66,135, 66, 22,174,
- 57,146,201,142, 65, 32,119, 49,146,144, 85,114, 69,189, 17,169, 36, 82, 75,202,188,150,185,141,140, 48, 30,196,251,233, 55,237,
-126, 0, 73,143,100,142,142, 56,243,100, 44, 78,161,194, 24,157, 98, 49, 31, 57,176, 85, 86,170, 68,193,122,226,173, 76, 84, 32,
- 16,211,160, 91,156,141,111, 11,231,146,227,194,180,162, 38, 71,229, 89,190,178,206, 95,239,101,151,212,159,200,167, 24, 57,119,
-228,125, 77,240, 24,133, 46,224,196,228,122,225,149, 56, 13,198,200,116,217,154,167,182, 86,112, 64, 22, 36, 61, 3,125,223, 31,
-110,231,212, 30,128, 38,244,129,118,224, 48,107,192,131,132,113,245, 20,218, 23,177, 94,171, 86,168, 73,124,202,221, 99, 11,163,
-203,157, 81,248,224,128,133,103, 1,251,218,197,120,237,226, 30,166, 71, 15,233, 99, 88, 68, 98,148,190,212,115,118, 59,157,201,
-139,147, 3,249,241,242,158, 10,118,112,207,217, 2,208,147, 54,140,206,153,153,217,197, 82,207, 25,238, 1, 10, 83, 24, 70,160,
- 16,130, 90,148,185, 96,161, 0,214,224,163,127,247, 2,222,209, 55,119, 28, 61,254,229,237,133,188,122,114, 34, 63,251,228, 76,
-228,167,146,138,121, 40,186, 80,160, 32,129,226, 30,182,121, 54,109, 71, 92,169,137, 97,135,221,238, 1, 56,182,150, 22,168,148,
-176,186,212,196,135,117, 4, 58, 34,170,115,101,152,178,108,121, 86, 67,159, 64, 1,241, 78,119, 63,132,129,192, 18,123,133,158,
- 55,197, 64, 83, 25, 12, 49,124, 41,204,146,182,210,103,224,244, 5, 90,224,161, 49, 92, 24, 81,130, 7, 53,250,130,158,211, 62,
-234, 46,139, 90,251, 30,255,152,138, 23,152, 38, 38,173,137,241,242, 68,239,249,163,227, 99,249,233,126, 39,191,121, 17,152,136,
-139,152,154, 29, 58,114,116,142, 56,206, 79, 79,135,114, 51, 90,242, 57,220,223, 51,128,228,252,221, 53,193, 89,112,220,203,178,
-153,220,220, 94,201,193,225,153, 22,114, 61,233,104, 16,199,234,138,214,153,228, 38, 55,109, 42,232,227, 86, 76,222, 70,179,181,
- 77,180,244,235,143,246,160,222,216,115,186,165, 57,172, 1,236,134,102, 8, 74, 97,102, 40,149,106, 17,102,210,173, 41,214, 97,
-113, 76,250, 29, 58, 55, 36, 49, 76,126, 54, 59, 19,163,161, 73,137,158, 33, 20,130,161,131,119, 73,253, 2, 87,222, 69,160, 50,
- 41,125, 10, 83,212,107, 68, 50,146, 28, 88,138,215,192,151,247, 57, 90, 14,233, 70,136,142,247,226,110,204,107,108,128,199,146,
-207, 32, 98,236,233,193, 64,222, 93, 94,105,156,232, 83, 35, 3, 83, 27,154, 6,233,223,221,220,156,203,201,201, 83,217,106, 81,
-248, 55,191,255,218,252,238, 51,211, 80, 0, 78, 0, 19,119, 82,243,180,120,133, 76,235,229,104,198,164,143,107,128,142,158,205,
-136,235, 83,112, 58,151,226,191, 81,148,161,105,179,255, 94,232,231, 69,140,193,179,140,228,248,228,233,151,250,140, 44,232,234,
-135,107,166,209,220, 76, 95,144,164,193,238,208,115,116, 55, 94,200, 45,228,188,143, 23, 44,192,143,246, 90,188, 94, 89, 22, 9,
-224, 41,184,134,120, 6, 32, 97,142, 88,222,235, 53,181,155,221,200, 54,200, 9,196,158,107, 28, 61,212,159, 65,129, 3,166, 4,
-252, 22,110,225,127,161,207,222, 39, 79,246,228,228,104, 32, 23, 90,172, 96, 50,215,109,196, 68,150,179, 48,210,247,115, 51, 89,
-203,176, 21,146,137,129,179,139, 38, 11,247, 3,236,177,121,110, 77, 80,204, 85, 68, 70,244, 62,206, 43, 70,228,184, 8,116,175,
-212,251,118,116,176,207,179,254,253,185, 54, 12,193,190,188,136,215, 52,123, 25, 14, 90, 50,154,216,249,138, 19,123,174,232,130,
- 8,164, 59, 56,236,204,153,161,236,247,180,104,160,106,170,222, 11, 45,118,158,124,250, 11,145, 55,223,200,120,169, 63,135, 68,
- 9, 37, 27,140,201, 90, 45,204,238, 7, 12,158,179,197,206,248,114,121, 81,143,103, 11, 7,162, 25,218, 82,106, 73,202,176, 18,
- 6, 41, 77,144, 70, 28,196,198, 19,233, 59,119,147, 32, 48,109,118,140, 0, 63, 59, 27,202,253, 61,192, 47, 59, 57, 24,180, 9,
- 54,107, 17,226, 31, 17, 89,140, 17,219,219,169, 38,162,184, 33, 47,158, 28,200, 78, 35,197,190, 6,246,102,127, 32, 95, 60, 30,
-202, 73,191,193,177,236,118,181,226,200,124, 85, 88,160,233,234, 7,196,232, 9,157, 14,118, 41,115, 40,188, 33, 72,233, 67,146,
-233, 69, 0,154,120,208, 52, 17, 1,242, 78, 17,140, 1,174, 10,205,128, 32,119,185, 69,113,203, 80, 72, 74,162,150,217,211,130,
- 97,167,209,254, 87, 47,246,229, 31,207,151,124, 0,113,112,241, 48,205,181,130, 26, 12,250, 76,188,184,233,168,216,154,238,222,
-133,138, 98, 73,237,246,192,124,149, 3,211,240, 69, 66,229, 56, 20, 9, 54,119,139,208,208,162,220,181,118, 10,179,117,226, 96,
-161,130, 15, 9,168, 94, 1,198,163,154,208, 33,164,128, 98,195, 36, 18,211, 7,199,177,192, 14,193, 80,175, 17, 11,133,122, 63,
- 41,236,144,243,220,187,235, 32,228, 67, 91,184, 3, 30,186, 72,142, 35, 49, 14,135, 24, 10,128,102, 46, 20,130,175, 3,184, 5,
- 64, 17,208,218, 27,237,132,147,174, 77,119,170, 32, 54, 76,140,234,132,202, 24, 15, 38, 80,155, 21, 45,174, 25,218,239,173, 86,
- 60, 85,241,131,135,135,224,146,157,141,212,147,102, 82, 99, 49,240, 45,144,113, 21,183,105,173, 58,127,252, 5,222,107,133,210,
- 6, 85, 9,197,204,100, 58,225,239,174,146, 11, 10,130,165,235,212,103,206,153, 53,116,125,204,194, 7, 15, 57,254,119, 53, 30,
-179,251,125,116,212,231, 12,109, 71, 19, 32,163,250, 13,122, 9, 63, 71,166,193, 37,211, 98,110,239,176, 79,254,118,186,217,114,
-220,126, 9, 53,172,251, 29, 59, 16,186, 98, 81,184, 39,231,148, 7,149, 54,248,183,216, 1,227,253,191,185,188, 33,205, 17, 5,
-215,209,112,143,184, 7, 51,167, 49,110, 52,174,123, 88, 26, 72,148,188, 91,174,136,218,236,254,167, 26,161,126,252,112, 33,123,
-253,158, 25, 74,232,249,238,193, 13,109,177, 99,209,245,221, 59,160,176, 71, 60, 11, 13,202,227,106,145,147,175, 57,170, 35, 59,
-130,120, 9, 3,132,226, 44,246, 6, 29, 83, 12, 68,119, 23,195, 62, 51,151, 67,237,228, 71,115,163,215,133,153,117,206, 0,177,
-198,185, 21,243,248,126, 27,155, 35,185,239,124, 58,149,213,210,202, 89,240,208,125,150,206,130, 41,217,149, 4,116,212,203, 3,
-115, 44, 11, 93,208, 2, 73, 39,112,155,209, 10, 41,159,196, 21, 8, 22, 99,208,166, 61, 31,240,140,214,115, 2,191,121,250,212,
- 71, 5,105,170,232,124,209,193,227,119,254,112, 3, 42,104, 87,246,219,129, 92,205,114, 58,138, 97, 18,134,174,232, 78, 63,211,
-217,241,144,197, 26, 76,102, 48, 9,196, 84,231,116,127, 79,238,102, 11,121,220, 59,214, 4,222,149, 27, 45,134,154,177,225,116,
-114, 7, 35, 2, 83,130,129,220,120,185, 34, 21,105,183,219,186, 65,144, 38,148,201,194,180, 28,168, 16, 88, 61,187,166,121, 94,
- 33,229,109,245, 19, 80,244,138,248,131,157, 61,107,164,156, 37,177, 79, 41, 77, 32,106,231, 32, 72,210,231,244,250,225, 62,231,
- 14, 54, 54,189, 1,195, 49,225,130,165, 78, 21, 54,175,132,240,193,194,216,117, 3,240,189,213,138, 3, 77, 82, 76,127, 37, 60,
-151,250, 12,199,166,158,134, 61,114, 20, 74,237, 88,200,149, 16, 88, 78, 96,208, 96, 23, 28, 32, 39,148, 92, 41, 65,167,160, 57,
-189,231, 20, 13,154, 15,175, 63, 92, 25,155,161,180, 2,142,189, 26,204, 72,198, 90,252,142, 38, 54,189,113,224, 51,229,110, 19,
-147,142, 37,189, 80, 76, 17, 52, 14, 76,212, 11,188,108, 90,103, 99,162,177,217,113,181, 88,210,193,174, 33, 47,159,190,148,103,
-143, 76,175, 1, 69, 45, 19,115,183,237,142,110,161,188,213,247,241,231,215, 31,228, 31,126,184,214, 14,119, 40, 95,125,254, 72,
-102,155, 66, 30, 29,118, 56,165, 29,207,215, 46, 93, 29,208, 24, 7,166, 93,152,160, 78,180,105, 53, 1, 32,125,255, 69, 91,254,
-217,203, 61,249, 79,191,123, 39,179,121, 68,147,148,116,145,201,251,203,130, 70, 44,135,251, 29,142,184, 49, 97, 72, 83,211,161,
-160, 80, 17,158, 31,106,248,155,181, 48, 26,115, 18, 70,242,210, 29, 41, 67,250, 19,240,217, 40,205,167,192, 86, 48,145,199,179,
-144,227,242, 61,109, 38,110, 71,119,242, 90,175,251,147,211, 79, 52,158,105,108,165,165,115,194, 98,190, 65, 15, 8, 51,215,162,
- 80, 22,239, 85,198,251,119, 56,196,107, 45,100,178,106, 8, 52, 16,123,189, 67, 57, 62,123,161,177,112,142,115, 12, 23, 51,243,
- 13,199,193, 3, 48, 8, 47,138, 7,230,110,178,146,202, 22,130,180, 37, 15,144,165,139,199, 16,238, 22, 62,136, 83, 86,201,133,
-162, 46,238,137, 93,120, 48,169,116,158, 65,139,160,184,136, 86,158,167,123, 13, 58,148, 25, 71,208,118,138,107,253, 61,227, 77,
-201,110,231, 98, 27, 19,225,124,130,221, 42, 70,168,250,158,160,137, 94,148,102,225,154,226,112,232,107,131,246,197,209, 47,144,
-221, 20,199, 79,153, 92, 17,176,223,222,204, 24, 56,158,104, 65, 16,248, 36, 1, 29, 38, 68, 36,240, 25, 40,147,170, 15, 49, 2,
-115, 22, 52,184,183, 2,186,176, 73,141,115,227, 19,182, 1,208,211,215,255,230,122,198, 29, 29,164, 13, 81,133, 87,157,246,135,
-139,145, 60,123,146,178, 43,194, 53,120,243,254, 86,142, 15, 7,244, 13,166, 78,240,120,206, 42, 14,116, 10, 90, 88,162, 27,239,
-118, 41,124, 0, 65,146, 21,124,138,245,112, 32, 88,167,122,160, 97, 88, 96,102, 15,194, 10, 17, 99,179, 39,143, 79,184,107, 3,
-144, 39,171,105, 73, 40,198, 18,215,185,182, 81, 33, 36, 74,113, 27,176,135, 53, 64, 79, 92,131,220,176, 99,163, 90,159, 38, 70,
- 32,144,145, 76, 64,175, 98,162,107,182, 13,148,135,107,231, 99,114,116, 50, 20, 85,240, 29, 63,237, 62, 17,124, 40,251,232, 12,
- 2,218,144, 91, 37,138,209,109,229,104,148,249, 58,129, 69, 12, 36, 32, 73, 55,139,120,111,184, 11,132,187, 24, 42, 77, 80,116,
-124,116,203,226, 49,207,107,135, 51,226, 2, 42,109,107,167,210,213,232, 83, 15,162,188, 14, 20, 56,210,159,143,109,111, 79,240,
- 16, 52,181,193,149,111,185, 21,166, 75,145,162,203, 1,231,151,187, 52,236,212,244,253,188,191,186,182,238,197, 87, 42, 79,142,
- 14, 13, 39,160,157, 42,184,178, 48, 14,121,118, 58,224, 94, 31,221, 1,246,111,175, 47, 39, 66, 41, 32,156,117,105, 16,188, 6,
- 96, 36, 18, 17,208,209,184,167, 88,241, 96,255, 54, 89, 88,151,182, 90, 78,229,253,197,214,109, 75,237, 25,225,115,135,235,144,
- 90,242, 93, 83,225, 47, 53,164,120, 8,230, 66, 41, 51, 82, 19,103, 12, 10,183,147, 25,207,126, 51, 49, 64, 37, 65, 97,177,241,
-217, 49,194, 37,152,116,183,101,193,153,101,150,120,141, 70,217,116, 25, 93, 43,178,147,196, 64, 89, 24, 65, 3,192,117,216,239,
- 19,149,189,112,192, 28, 39, 74,110, 29, 42,116, 6,195,212, 46, 55,134, 11,217, 26, 6,114, 34,197,213, 1, 82, 45, 10,112, 20,
- 12,196,148,178, 13,205,181,177,146,146, 37,149,180,180,251, 75, 28, 65,252, 0,138,195, 89, 97,209, 11,145, 39,189,230,248,167,
-164,182,182, 22, 86, 24, 59, 23,112, 47, 43,165,223,234,144, 59,141,110, 17,251, 88,116,155,223, 93,173,229,171, 23,125, 57,215,
-238,205,232,124, 41,213,196,150,215, 91,185,209,175, 13,251,224,173,155, 23,195,222, 96,192,169, 21,104, 99, 40,246,247, 7,125,
- 19, 55, 25,223,201,147, 94,143, 29,242,189,158,157, 63,125,247, 3,159, 95,142, 74, 51,163,121,218, 52,200,166, 9, 85,113, 26,
-121, 49, 66,133, 24,183, 18,206, 61,177, 85,184, 0,196, 78,230,100,158,175,156, 19, 51,160,169,119, 52, 46, 10,248,251,203, 90,
-186,215,116,253,169,142, 7,137,217,216,238, 89,138, 2,156, 96, 56, 3,239, 69,142,119,160,165,174, 88,130, 9,157,169, 82, 41,
- 11, 90,231,107, 14,128,244, 13,207, 86, 38, 22,213,136, 29,171,147, 83,191, 28, 24,132,251,241,132,202,120, 72,222, 48,237,140,
-192, 78,208,223,125,118,124, 66,189,146, 56, 74,228,197,211,167,154,132, 76, 62, 22, 32,183,134,187,114,182, 19, 19,130,186,215,
- 66, 23, 17, 19, 35,119, 54,114, 14,130, 54,192,180, 1,164, 33,219,141,157, 58,254,220, 32, 21,208, 48, 70,224,240, 15,123, 29,
-202,195,158, 30,246, 36,215,248,137,156,121,112,208,163, 73, 22, 26, 46, 24,191,224,217,185, 67, 59,170,159,231, 12,178,217, 71,
-169,252,226,197, 33,233, 97,112,253,180,130,218, 16,250,121,110,211, 96,156, 7,179, 5,183, 56,139,188,134, 28,247, 15, 63,222,
-202,211,131, 14, 57,250,152,164, 96,229, 76,179,173,251,153,198,128,142,124,174,205,227,223,142, 22,204,133,152, 98,239,245, 26,
-244, 31,216,239,183,244, 57,212,164,172,159,163, 73,145, 25,104,205, 39,156, 58,164, 28,191, 59,158, 71,182, 50,219,218,243,130,
-235, 4,211, 24,196, 25,200, 25,111,118, 38, 54, 5, 65,162,119, 31,206,229,183,122,214, 94, 30,199,114,122,144,114, 69,199, 41,
-166,254,220,158, 22,225, 40, 54, 73,215,115,250, 41,226, 34,174,217,177,190,119,109,249,228, 70,155,205, 27, 25,113,194, 90, 22,
- 9,158, 59,227,132, 10,145,228,150, 68, 16, 92, 48,194, 29,116,140,124,134, 63, 35,208,108,217, 25,218,161,123, 48,150, 8,220,
- 0,164,172,157,182,170, 52, 31,184,139, 79,154,229, 14,184, 49,190, 49,116,135,247,218, 49,141,228,255,241,221,130,128, 11, 84,
-184,120,232,119,216,135,109, 2,238, 60, 2,143,218,149,132, 43,165, 91,245,123, 64,119,251,252,168, 77,148, 97,168, 31,254,240,
- 96,159,238, 74, 48, 95, 24, 45,119,172,246, 90,218,129,160, 66,190, 24,105,101, 86,166,242, 92,187, 49,236, 19, 67, 84,198,219,
- 45,147,127,195,245,237, 58, 80, 62,210, 10, 48,163,222,239,218, 0, 30, 24,185,236, 50,242,122,187,154, 12,135, 0, 71,128,254,
-146,141,101,208,119, 52,115, 12,222,229,220,128, 53,235,148, 97, 14,251, 53, 28,110,112,202,209, 25, 54, 67, 83,138, 3,176, 2,
-250,226,248, 58,170,245, 12, 40,246, 81, 73,151, 47, 28, 10, 24,104, 76,119, 1,105, 25,144,155, 5,167, 54,208, 68,253,248,228,
-148, 21, 32, 14,234,202,233, 81,232,154, 43,133,183,176,120,208,149, 39, 96, 76,140, 87, 78,110,183, 43,196,240, 16,136, 89,159,
-174, 22, 27,183,184,180,196, 90,106, 96,193, 97,195,247, 24, 58,216,246,116,105,106, 43,143,134,139, 51,160,187,172,214, 46,161,
- 99, 44, 2,115,162,208, 42,120,225,129,171,168, 21,234, 8, 86,211,224,142, 51, 67, 37, 57, 45, 50, 10, 79,248,182,171,183,110,
-162,114, 75, 51,209, 26,219,199,215, 19, 32, 20, 45,165,121,177,227,127,232, 20, 40,116, 3,211,132,164, 81, 11,223, 4,190,223,
-181,233, 68,104,247,215, 11, 1, 32,233, 77,186,210, 11, 0, 71,240,102,169,241,251,243,210, 70,144, 97,225,114,190, 65,192,189,
- 28,222, 39,197,125,244, 12,156, 30, 70,242,238,118, 78,129, 24, 76,131,176,151,100,224,128,118,188, 96,103,170,193,103,208,210,
-135, 52,164,221, 44, 30,106, 36, 44,140,215,251,122,174,144,132,239, 53, 73,189, 58, 59, 32,136,166,116,119, 58,225,106, 33,224,
-116,140, 86,151, 89,254, 96,174, 67,192, 78,194,207,126,184,183, 52, 93,231,134,217, 26,227,193, 62, 4, 93,134, 69,209,142,251,
-102, 74,231, 2,197,206, 66, 14,215,115, 93,187,128,237,114, 96, 85,114, 13, 74, 29,195, 75,100,166,188,101,187,226,204,118,178,
-133,173,147, 48, 9,192,239,231, 42,194, 21,232,216, 25,235,215,219, 30,104,172, 27,177,247,135, 9, 11,120,218,160,252,225,239,
- 99,215, 43,159, 46, 77, 27,194,228, 52,115,226, 67,182,254,153,241,191,117,106, 46,120,140, 62,129, 33,189, 9, 78,131,206,247,
-210,188,177,165,156,203,246,221, 5,187, 72,176, 34,208, 57, 94,222,143,173, 96,116,119, 68,172, 3,254,203,183, 59,249,245,147,
- 6,153, 38, 71, 26,112, 47, 52, 16,115,234,161,239, 13, 99,249,147,195,125, 54, 43,152,200, 81, 58,180,219,148, 71, 39,251,250,
-119,122, 29,247, 7, 76, 78,151, 87,247,102,243,172,231,234,179, 79, 62, 33,253,237,126, 58,102,145,132,147, 52, 91,216, 20, 34,
-106,132, 76,200,150,124, 33,196,210,242,206,220,238,105, 76,230, 65, 73,127,119,196, 86, 36,231,116,147,179,249, 0,134,166, 11,
- 76,197, 70,203, 65, 76, 29,218, 13,158, 21,130, 13, 93,150,186, 65,142,115,248, 32,153, 75,126,180,237, 84, 89, 40, 64,221, 45,
-122, 88,137, 38,145, 81, 15,205, 13, 47,112,218, 85,192,228,181, 89,105,115,160,221, 32,148, 26, 7, 90,176,108,146, 37, 39, 57,
- 85, 7,205,184,145,173,165,167,215,224,234,182,144,235,155, 43,121,116,250,152,113, 44,210, 88,141,207, 6, 19,152,191,124,255,
-123,249,242,139,223,200,112,255,137,252,235,223,164, 26,159,244, 25, 44, 2, 38, 50,252,110, 80,118, 1,212, 28,107, 53,240,225,
-118,194,201,226, 97,207,140,104,240,140, 97, 44,143, 4,143,123,130,243,128,251,137,152,130, 85, 20, 18, 57,169,205,121, 96,138,
-123,211, 13,187, 95,188,207, 15,218, 68,189,191, 30,201,205,237,165, 89, 57,107, 28,134,196, 43, 38, 15, 0, 96, 35, 49, 62, 58,
-104,201, 63,195,231,215, 63, 3,136,135,247,178,221,217,245,195,243,140,123, 51, 95,249,232, 60, 52, 17, 21,188, 79, 92, 67, 48,
- 86, 46,238,231,108, 36,128,187, 0, 93, 14, 59,106, 92,230, 27, 77,252, 63,123,220, 39,125,122,172,221, 58,148, 61, 3,247, 6,
- 65, 12, 7,184, 14,239, 27,121, 97,177, 78,249,181,200,141,201,114, 49, 80, 37,108,110, 27,152, 68,184, 32, 14,157, 32,180,224,
-190,186,189,103,156, 58,218, 79,228,209,209, 49,159,217,191,251,250, 91,185, 63, 59,145,127,247,155,199, 50, 4,216,110,158, 9,
- 32, 27,189,168, 85, 55,210,100,168, 57,200, 24,247, 27,221,255, 97,223,124, 48, 32,110,131, 98,137,192,116,210, 31, 34, 83,124,
- 66, 18, 3,127,186, 29,154, 65, 64,167, 48, 23, 45, 28,122,123,171, 17,201, 74,165,187, 66, 21,229,195,174,164,136,196,171, 63,
- 27,179,147,219,236,212,173, 74,255,215,132, 64,132, 31, 8, 78, 75, 64,161,163, 72, 96,199,139, 42, 39,201,217,177, 67, 8, 97,
-138,202,116,101,213,125,238, 5, 68,200, 61,239, 78,230,122, 83, 18,210,122,180,179,208, 32, 9,209, 59,184, 47, 45, 52, 65,254,
-164,157, 57,192, 63,144,173,132,186,221, 55,231, 99,249, 15, 95,238, 75, 43,200, 40, 29, 65,215, 46, 4, 39,114, 71,119,236,212,
- 6,120,239,206,117, 6, 96, 40,195,174, 25,193,111,109, 94,196,171,160, 32,117,133, 0, 53,253, 29,133,150, 3,175, 47, 38, 4,
-249,173,160, 20,166,255,251, 81,127,207, 22, 14, 64,122,232,240, 67,243,187, 37,147,242,163, 30, 44,249, 18, 19,208,105,219, 78,
- 40,246, 64,129,247, 30,107, 5, 10,149, 42, 38,115, 61, 4, 23,139,157,209,144, 52, 25, 65, 21, 10, 14, 97, 51, 13,218,224,108,
- 71,238, 76,182,170,209,241, 54,150,193,227,141,224, 15, 97, 14, 51, 59,121, 48, 64,161, 32, 11,233, 95,153,117,218,220,225,134,
-188,249, 8,114,195,126,199, 53, 2,244,125, 0, 75, 0,218, 14, 14, 80,106, 18,171,120,125,188, 7,252,110, 38,213,208,204, 40,
-232,130, 86,100,156,134, 16, 15, 1, 91,201,192, 20,155, 10,223,121,131, 26, 66,164, 47, 57,208,185,139,251, 4, 44,154, 42,227,
- 10, 36, 6, 36,154,202,137,203,246,223, 25,199, 72, 17,247,167, 13,159, 12, 21, 28,185, 98,111,141, 2,162, 18,221, 9,189,136,
- 73,233,167,156, 25, 82,220, 77, 75, 2, 55, 24, 42,220,129, 9,239,131,148, 58,167,227,112, 95,203,245, 74, 80, 79, 29, 80,156,
-162,115,130,143,182, 21, 32, 37, 59,134,233,106,237, 0, 76,183, 17,141, 12,120,133,207, 66, 89, 87,210,154, 68, 70,154, 8, 16,
- 60, 76, 79, 61,244,221, 99,206, 68,245,225,126, 42,159, 60, 62, 35, 0,102, 50, 91,178,152, 53, 59,213, 38,113, 27,115,136, 92,
- 20, 37,187,197,204, 19, 60,138, 56,140,239,240, 12, 29,232, 53,133, 51,242,205,253, 82, 38,219, 5,117, 10,242,194, 4,141, 50,
- 95, 83,224,126, 68, 78,175, 52,202, 97, 80,235,244,207,192,144, 64,231, 7,163, 22, 45, 76, 59, 62, 42, 70,178,100, 12,112,199,
-184,166,139,219,176, 40, 74, 98, 55, 12,177, 41,198,114,179,173, 41,105, 81,184, 49,160, 39, 49, 29, 54, 25,225,154, 40, 52, 75,
-225,212,117,247,177, 6, 48,251,221,160,150, 92,174,196,166,204,155,221,172,157,169, 65, 0,193,148,188,116, 95,247, 92,158,159,
- 30,201, 94,191, 47,175, 47,111, 13,232, 73, 19,169,148,120, 3,254,183, 94,195,171, 89, 41,231,163,157,188, 58,237,202,205,178,
-100, 98, 4, 66, 26, 99, 83, 90,212,150,144,222,237,176,240,158,105, 81,139,100,222,114,244,246,205,104, 70, 80, 31, 10,166, 82,
-127,119, 16, 55, 25, 3,191,120,245,169,124,251,253, 55,134,102,214,103, 60,209,235,181,110,152, 91, 37, 80,239, 81,100, 40,230,
-164, 97,192,196, 6, 85, 21, 67,126,214, 45, 65,149,176, 20, 54,175,121, 48, 32,224, 67,129, 36,244,237,133,141,250, 81, 0, 33,
-105,154, 6,132, 81,117, 43,139,103,226, 79, 10, 75,108,133,203,101, 22,110,110,131,228, 22,115, 87, 93,178,160,106, 37, 46,148,
-181, 53, 81,172,208,133,143,128,124,195, 14, 30, 5, 59,174, 23, 40,181,143, 30,157,201,213,229, 7,142,160,193,176, 16,174, 82,
- 55, 82,164, 43,222,239,155,187, 91,189, 63, 45,130, 81,227,176, 41, 39, 39,135, 4, 18,226,251, 62,220,220, 26,128, 76,207,240,
-159,222, 24,133, 14,184,171,130, 82,175, 54, 61,216, 16,160, 25,202, 95,191,122,164, 73,188, 82, 19, 44,185,142,132, 6,202,102,
-103,106,131,252, 25,207, 13,200, 45,165,251, 20,108,179,173,153,116,229, 1,215, 88,103,103, 79,181, 40,223, 35,131, 38,208, 34,
- 2,188,116,200, 80, 39, 13,123, 86, 1,154, 68,215,139,216,241,238,122,174,231, 58,161,146, 40, 86, 47, 80,237,196,164,137,182,
-185,129, 37,115,196, 91, 20,144,221,102,160,215, 96,195,251, 7,218,246, 94, 71,187,229,187, 53,241,100,152,246, 14,186,136, 9,
- 45,174, 50, 62, 61,219,147,191,188, 29,249,121,205,157, 45,100,157, 55,128,126, 16,142,129, 14, 62, 46,249,108,157,153,210,226,
-206, 49, 33, 98, 94,239, 43,151,237,174, 84,182,161, 26,202, 63,235,107, 61, 57, 59,245,201, 82, 83,238, 38,115,249,219, 63, 93,
-201,127,248,234, 49, 27, 2,208,102,145, 31, 91, 13, 51, 15,163,191, 3, 39, 45,137, 79, 98, 82, 22, 73,175, 30,235,153,252,238,
- 94,198, 99, 61,215, 88,163, 64,104,159, 10, 62,129,211, 73, 92, 86, 18,135, 17, 99, 26,210,173,252, 6, 4,110,157,154, 57,215,
-250,193, 71,219,245,123,156, 82, 67,123,184, 34,175,125,179,115,215,141,198,215, 80, 36, 0, 81,136, 32, 8,195, 8, 84, 90,163,
-101, 78,176, 25,133, 77, 26,166,211,123,163, 29,115, 20,132, 21,241, 93, 43,221,152,182,121,179,245,150, 59,173, 20,135, 24, 15,
-184,222,180,139,197,141,220,105, 53,117,183, 76,229,141,222, 28,248,239,194,117, 8, 72, 76, 42, 26,117,204,106,145, 8,107, 72,
- 2,162,224,162,202,150, 5,255,251,149, 94, 44, 45, 32,154,250,158, 80,133,227, 38, 32,149,224, 97, 31, 83,144,167, 37, 77,112,
- 6,181,155,126,123, 55,165, 48, 79, 69, 87,225, 78, 27, 99, 53,208, 29, 56, 27, 46,137, 60,166,246,187, 94,163,203,113,166,191,
- 63,118, 22, 65,201,209, 13, 2,120,158,219, 30, 17, 46, 83,131,142,141, 57,145, 12, 30, 61, 26, 74,222,234,242,192, 20,212, 77,
- 15,245,160, 30,114, 60,139, 49, 23,169, 75,133, 39, 44,253,191, 25,165,101, 53, 57, 99,116,230,123,144,160, 17,209,208, 36, 36,
-104,176,252, 72,235, 62,116, 83, 2, 91,129, 64,233,169,194, 68,160,144, 51, 78,112, 66, 0, 25,238, 77,187,105,218,196,232,188,
- 80, 48,128,158, 97, 8,220,130, 29,194, 18, 74,123,173,196,169, 36,230,251,221,215,202,251,232,192,208,218, 89,106, 59,221,124,
- 99, 66, 54,166,132,102,187,217, 40, 48, 32, 8, 0, 64,248, 57,224, 31,108, 39,153,114, 44,159,249,249,170, 60,207, 81, 92,220,
-141, 39,206,237, 55, 92,135, 41,221, 21,222,153,148,206,147, 55,116,114, 53, 5,168,236, 72,141, 30, 85, 88, 55,197, 42,218, 59,
-125, 23, 14, 41,220, 59,186, 73,135,192, 22,247,242, 88, 77, 64,146, 23, 99, 55, 0,154, 42,158, 49,133,132, 52,248,129, 78,137,
-251,253,238,250, 78, 78,246,135,164, 80, 1,112,134, 32,103, 52, 25,227,181,174,211, 45, 21,184, 48, 82,195, 78, 14,221,182,137,
- 81, 8,207,105,170,127,223, 8, 53,232, 30, 14, 89, 20, 47,150,115,118, 87,120,159,120,223,189,246, 1,197,118,240,126,222,126,
-184, 53, 97, 39,130,214, 18,118,134, 72, 82,120,184, 73,151, 98,167,184,227, 53, 32,152,176,221, 33, 96, 15,157, 54, 7,114, 8,
- 6,129, 81, 41,209, 97,228,222,225,113,242, 16, 88,177, 72,122, 82,105, 5, 17, 18, 97, 89,123, 26,218,153, 39,144, 46,180,149,
- 14,112, 33,166,109, 31,114, 85,133, 46,138,247, 76,204,195,129, 20, 57,224, 70, 50,115, 90, 11, 99,163, 21, 21,169,185,250,113,
-205,128,198,194, 29,255, 54, 20,238, 48, 30, 54, 58, 83,168,151,125,247,254,146,201, 18,214,157,118,126, 10,114,193,209, 17, 2,
- 13,140,245,219,111, 95,143,228,127,254,170, 35, 63, 93,141, 56,218,133, 96,211,201, 97,159, 19, 3, 60, 31,152,230, 73,104, 5,
- 3,176, 50,212,201, 14, 77,155, 30, 35,225, 78,167, 39,203,197, 76,131,148,233, 27, 60,215, 96, 11,228,252,100,182, 96,231,134,
- 53, 10,128,114, 72,190,175,142,247,152, 60, 48,121,131,190, 69, 73,203, 80,128, 1,161, 61, 96,113, 5, 77, 10,206,245, 54,138,
-201,224,192,201,233,192,100, 4,122, 6,129,233,116,224, 33,217,149, 69,205, 52,192, 88,190,108,234, 53, 1,219, 0,212, 89, 22,
-233, 57, 11,116, 22, 15, 76, 12, 5, 1,192, 0, 35, 86,113, 27,140,156,194,215,147,156,254,132, 65, 13, 76, 6,173, 10,224, 44,
-124, 94, 24,130, 28, 29, 28,202,245,237, 53, 85, 48, 11,177,142, 22, 83, 32,115,221,243,179, 67, 41,109,224,133, 48, 10, 63,208,
- 7,121, 65, 97,171,217,116, 68,243,147,243,155,177,203, 15, 23,174,240,232,110, 2,133,197,251,191,253,211,143,174,160,105, 83,
- 91, 92, 63,226, 44,242,143,104,176,174,186, 70,113, 47, 20,154, 16, 69,130,222, 3, 18, 42,155,197,156, 83,142, 40,200, 8, 84,
- 51,211, 20, 46,124,228,112,191, 77, 63, 11, 48, 83,142,247,244,190,165,154, 28,143,186,212, 87, 0,215,123,165,197, 20,240, 97,
-211,229,174,166, 4, 71, 46,164,134,235,135,215,205, 10,139,139, 43, 77,192, 95, 60, 30,200,253,220,244, 75,218, 13, 91, 69, 95,
-107, 66, 61, 25, 4, 4, 95,191,124,212,103,194,254,226,233,158,124,255, 97, 70,173,128, 10,251,243,244,168,207,233, 29,158, 87,
-120, 34, 32,238,106, 47,195, 34, 6,231,155, 5, 53, 89, 64,161, 51,141, 90, 22,127, 51, 83,140,123,127,113,201, 51,102,107,173,
- 82,243,216, 90,190,187,202,228, 23,207, 18,226, 15, 86,244, 6,233, 50, 89,103,212,247, 48,220, 6,138,105,196, 79,172, 5, 64,
-249,254,226,229,158, 22,168,185,188,189,209,134,238,110,178,241, 11, 27, 17,149, 88,205,255,185, 63, 47, 13,141, 9,125, 94,202,
-113,162, 10,201,140,220, 95,129,146, 42, 42, 14, 65, 32,190,223, 65,167,149,149,185, 35,224,165, 14,176,232,108, 40,182,160, 31,
-225,221,253, 90, 30,107,101,117,210,143, 41,158,130,155,110,226, 6,161, 38, 82, 92,160,156,251, 79, 4, 54, 76, 16,112,224, 81,
- 72,128, 34, 2,173,116, 84, 96, 5, 76, 81,150, 43, 94,160,119, 55, 19,121, 63, 90,105,130,182,253, 3, 58,210,185, 86,102,159,
- 63,217,151,253,253, 65, 77,149,107,235, 1, 47, 29,181,159,109, 82,154, 33,224,207,144,160,220, 96, 12,180,221, 58,136, 14, 9,
-125, 43,151,192, 21,148,102,247, 10, 77,251, 62, 40, 50,121,233, 35, 74, 67,127,175,119,166,142,132,239,195,152,145,174, 65,250,
-119, 38,177, 27,251, 72, 27,197,179,190,174, 86,225,105,203, 76, 56,130,180,201,155,137,145, 39,128, 77, 0,212,173,244,125,228,
-187, 53,255, 30, 99, 56, 22, 84,250,249,218,180,122, 77,109, 4,236, 6, 3, 72,240,160,234,208,122,148,210,184,153,211,192, 34,
-118,209,219,202, 57, 8,163,193,194,228, 39, 75, 49,133,182,125,173,112, 43, 41, 84, 67,203,219,216,123, 60,155,249,200, 53,161,
-177, 5,253,172,219,134,162, 5,250,158, 43, 24,125, 79, 0, 24,165, 44,248, 74,126, 29,227,240, 86, 59,100,209,196,196,198,206,
-249, 65,185, 15, 99,233, 93,110, 73,216,146, 73, 94,131,248,192,128, 72,243,220,199,199, 41, 59,186,150, 62,176,212,183,118,163,
- 19, 83,167,139,124,135,174, 29, 74,187, 83,115,207, 43, 3,147,216,205, 89, 76,244, 97,247,255, 75,242,149,167,185,241,218,195,
- 26, 8, 88,212,197, 39,254,129, 46, 53,181,227,105,174, 98,160,150,160, 2,129,185,222, 57,166, 11,103, 71, 7,230,164, 5,183,
- 42, 61, 39,135,123, 3,238,145,151, 26, 36,254,250,139, 99,253,183, 89, 97,126,184, 50,175,110,123, 31, 33, 37, 39,225,188,102,
-224, 51,151,152,220,106, 97, 57,135,178,149,153,232,160,240,128,133,174,177, 67, 98, 47,194, 10,238,182,161,183,141,123,213,107,
-119,153,140,133,194, 64, 13,126,174,189,190,237,139, 65, 87,131,210, 25,146, 2, 87, 64, 40, 24,147,150,107, 14,104, 50,112,247,
- 68,128, 21, 17,144, 87,180,215, 44, 93, 21,175,116,125,131,192,133,133, 2, 83,128, 44,141, 66, 74,243, 14,104,178, 55, 13, 8,
- 73,230, 7,190,136, 85, 78,165,253, 29, 24,235, 1,159, 53,227,125,174, 86,116,118, 15,233,203,142, 51,214,132,217, 80,199, 48,
- 33, 62, 66,166,118,189, 94, 55, 4, 71,211,239, 55, 9, 99, 92,115, 8,239, 4, 65,233, 59, 69,243,189, 14,130, 54,147,248, 31,
-223, 78,229, 63,254,213, 99,130,150,144,172,182,188,134, 27,217, 27,246,105,186,196, 49,113,167,105,224, 86,111, 50,112,198, 77,
-242,181,100, 51,129, 73,207,226,254, 70,239,245,161, 92,234,251,252,244,233,137,252,237,239,110,249,243,196, 36,136,173, 9, 0,
- 98,228,100,172,101,158, 9,180, 11,221,229,230,227,190, 53,180,242,134, 40,239,216,141,131, 48,170,110,179,104,218,239,194, 70,
-119, 77, 80, 45,121,234, 0,239,233, 51,189, 10,205,138, 24,175,139, 85, 14, 70,196,181,173,109,104,247, 55,161,106,219,206, 76,
-147, 74,169,177, 74,182, 88,143,120,206,120,158, 29,176,140,230, 2,159, 15, 5, 11,174, 33,246,225,207, 78,143,228,226,246,134,
- 93, 31, 10, 91,188,183,203,241,146,113,153,157,115,210,224,239, 56, 59,218, 35, 56,240, 82, 59,116,236,170, 51, 45,136, 46, 70,
-153,118,243, 75, 82,204, 80, 52, 81,172,139,163, 90,241,127, 7,188,183,160, 0,219,223,185,169,181,195,170,200,186,113,118, 18,
-254,140,248, 12,253, 16,125, 57, 58,148,181,241, 92, 55, 35, 22, 73,189,238, 80,206,180,120,130,242,228,217,241, 83, 61,239, 13,
- 83,154,212,235,138,166,144,107, 19,178,125, 74,153,233,179,210,209,120,148,105, 78,129,166,196,138,170,123, 85,113,106, 9,248,
-112,208,230,154, 51,164,133,239, 74, 11,237, 29,227, 12, 10,140,187,217, 78, 78,247, 90,242, 97,180, 98, 2, 46, 9,248, 93,107,
-129, 88,106,210,238, 16,179,243, 92,127,126,160,191,119,216,219,202,190,187,119,226, 58,221,106, 35,121,118,208,145, 63,189,185,
-213,226, 31, 40,253,136,143, 3,155, 14, 42,137,134, 50,219,218,116,162,240,123, 67,209, 45,205, 3, 0,191, 54, 88,124,183,249,
- 53,200, 88,131, 53,243,247,223,189,211,231,227,153, 22, 19,109, 78, 52, 86,250,204,227,121,232,235,217, 73,226, 45, 49, 16, 90,
-235,200,116,190, 97, 35, 17,121,129,253,248, 24,211, 62,205, 63, 84, 23,242, 26,188, 10,248,116, 52,195,120, 3,149,128,190,201,
- 70, 51,175, 85,197,140,207, 92, 24, 29,167, 22,141,176,196,158, 59, 90, 57,247, 0, 41, 78,121, 17,119, 78,171, 16,184, 99,173,
-160,154,139, 72, 22, 24, 53, 81,209, 46,101,165, 19, 58,207,251,205,205, 70, 38,203,140, 99, 65,154,130,228,166,235,203,189, 85,
- 46,164, 22,221, 46,177,231, 48,205,225,157,118, 58,120,178,161,254, 54, 71, 48,167,225, 68, 71, 31,108, 4,230,141,252,225,253,
- 76,246,225,148,212, 95,201, 94,144,240, 96,160,162, 67,208,109,183,141,146,132,209,203,116,121,175, 93,210,198, 58,215,182, 9,
-204, 0,196, 52,203,245, 65,189, 93,202,104,186,148,253,195, 30,253,151, 57, 86,142, 35, 38,226,163,164,199, 17, 44,130, 24,119,
-242,122, 56,113,160, 17, 68, 48, 54,191, 31,207,216, 69,153,188,166, 30,248, 21, 4, 21,214,236, 32,142,181,171,197,117, 61,191,
-190, 55,177,151,216,168,124, 76,218,133,141, 67, 49,250,132,250, 19,246,130, 38,179, 26,202, 72, 95, 19,192, 14, 20, 22,171,205,
- 74,182,203,172,222,199, 34,201, 64,239, 24, 9,217, 0, 87,190, 99,170,246,249,250,231,145, 30, 8, 90, 91, 34, 33,174,211, 90,
- 13, 10, 93,116, 18, 38, 4,230, 48,105, 72, 76,110,169,136, 37,206,172, 52, 91,205,197,198, 76, 39,112,224, 35,183, 67, 77, 34,
-147,122, 37,238, 2, 35, 96, 40, 49,137, 41,134,129, 71,139, 73, 75, 25,152,235, 27, 36, 27, 43,228, 51,237,118,245,154,101,169,
-241,242,195, 36,226,103,163,178, 94,106,110,106,120,248, 42,172, 6, 58,222,204, 1, 75,221, 94,175,182, 80, 13,125, 31,159,127,
-228, 40, 24, 85, 82,184,133, 9, 24,197,222,157, 71,222,197, 87,154,231, 24, 51, 83, 25, 12,137,115,110, 64, 69, 92,207, 65, 59,
- 34,133, 9,193,198, 10,184,140,216,147, 31,223, 95,214,215, 31, 29,217,238,205, 37,247,144,143, 53,104,254,112,113, 47,127,120,
-125,195, 21,142,141,216,133,223, 75,140, 64,181,199,151,200,249,228, 30,236, 42, 83,162, 42, 40,151, 86,228, 70,190, 70,105,181,
-160, 60,101, 20, 80,224, 61, 98,142,230, 75,242,200,231,171, 57, 87, 65,248, 85, 24, 23,115, 79,201,226, 69, 72,217, 65,223,140,
- 73, 8,166, 48,232, 96, 90, 4, 4,149, 76, 2,208,170, 30,166,169,191, 86,101,221,106, 32, 35,158,223,134, 41, 33, 86, 96, 75,
- 36, 75,128,145, 48,190,197,247,225,217,204, 83,211,171, 7,130,126,201, 98,200, 58, 79,156,101,128,212,240,188, 85,234,114,152,
-244,124,250,236,177,124,246,248, 80,158,106,208,254,179, 94,183,255,252,199,215, 82,225, 30,171,181, 82, 89, 88,242,142, 18,163,
-226,113, 21, 19,155, 60,106,226, 76, 7,179,114, 78,201, 23, 71, 17,244,230,102, 46,159,158,246,136,136,199, 44, 13,207, 55, 92,
-236,198,227, 57, 1,177, 79, 78, 15,105, 14, 2,100, 52, 62,223, 18,120, 25, 36,122,128,232,182, 38, 87,154,132, 41,207,231, 4,
- 0,201,195,167,181, 34,227,158, 6, 84,196,130, 16,216,162, 29,132,170, 34, 57,217,239,232,207, 47, 25,147, 48,157, 33,199, 92,
- 95, 23, 50,208,101, 22, 16, 92, 22,250, 20,235,219,247, 87,114,180,215,231, 20, 2,251,110,220,183, 13,159,247,196, 58,244,210,
- 44,159, 81, 4, 64,204,198,124, 23, 10, 78, 60,194, 88,220, 20, 39,150,161, 22, 14,243,197,206,101,122,141, 77, 64, 70, 81, 98,
-170,160,161,216,228, 9,212,212, 40, 49,157, 12,224, 46, 48, 65, 91,130, 79,207,110,177,199,162,107,208,209,207,171,197,223, 89,
-167, 47,247,208,182,112,186, 41,174,233,219, 15, 23, 50,108,183,248, 30,169,148, 9, 58,237,220,180,228, 63,123,124,166,159,165,
-163,215,164, 97,152, 3,168, 36,118, 27, 46, 47, 46, 4,162,189,187, 30,115,236, 14,121,111, 76, 83,208,208, 65,189,145, 38, 65,
-137, 81, 45,193, 44,178,105, 89, 44, 71,251,125,198,202, 38,169,109, 37, 93, 16,119,153,237,139, 1,140, 67, 1,215,114, 45, 5,
- 20, 80,140,103,122,150,254,242,246, 78,207,123, 79,190,250,229, 11,237,122,199,140,175, 40, 48, 32,174,148,251,218, 2, 29,126,
- 68,185,239,152, 59,242,207,135, 45,249,230,221,216, 37,168, 69,155, 55, 45, 20,146, 82, 11,140,144, 30,244, 71,199,160, 58,174,
-245,253,135,242,244,160,205,124, 0, 93,251,249,237,130,241,106,178, 50,164, 62, 10,206,230, 97, 87,250,195, 14, 11, 40,136,153,
-129,183, 94,122,177,187,216,154, 31, 60,220, 56, 59, 45,109, 6, 65, 29,221,108,221, 34,215,168,221, 16,214,233, 65,154, 25,247,
- 73,243, 24,166,107, 80,247,251,227,107,224, 21, 78,228,197,163,129, 91, 84,231,100,133,180, 3,163, 72, 98,186, 85,192, 18,124,
-190,213,162,167,207,252,133, 41,224,191,250,245, 35,137,255,205,191,255,119, 52,155,159,140,199,178,152, 47,136,140, 94,145,102,
- 36, 52,153, 72, 34,173, 80,119, 38,182, 97,227, 81,179,223,171,188,173,221,142,218, 92,160, 10, 3,147, 20,206, 93,230, 80, 62,
- 52, 33, 26,243,245, 46, 56,126, 0,248, 98, 56,232,114,196,137, 10,127,160,213,244,104, 50,210, 15, 41, 4, 66, 36, 90,153, 46,
- 32,244,175,193,114,190, 94,154,210,152, 6,144,190,254, 12, 30,178,151, 47,246,229,157, 30,236, 3,253,190,177,190,199,185, 86,
- 67, 59,173, 48,207,158, 12, 37,108, 77, 24,136,142, 14,246, 56,214, 96,128,208,255,190,212,164, 56,214, 55,118,187,153,146,147,
-136,206, 28,129,252,137, 94,196, 31, 53, 8, 99,199,137,207,136,196, 57,154,204,165,175, 55,242,236,100,143, 10, 70,215,163,148,
-128, 27, 36, 83,236, 62, 64, 41,131,128, 5, 14, 33, 30, 58,136, 65, 96,119,133, 36,133,195,137,192, 59,157, 47,120, 93,238, 52,
-249,162,227,205, 40,222, 31,203,122, 97, 46,102, 72, 14,120, 45,140, 55,175, 71, 11,187,217,250,247,120,223, 8,216,224,202, 98,
-124,115, 9,251, 67,136,117,235,125, 24,175, 50,142,116,105,203, 8,223,248, 2,116, 25,253,119,220, 38,191,212,228,101, 11,160,
-193,244, 71,115, 86,185, 9,165, 90,237, 62, 53,124,175, 92,113,135, 57,242,193,234, 32, 8,125,133, 98,218, 2,185,119,106, 85,
-161, 23,184, 10, 94, 89, 88, 2, 10, 92, 7, 62,240,229,106,101,192, 81,233,231,147,201, 39,161, 3,244,132, 69, 0, 2, 84, 30,
-184,161,145,112, 19, 96, 20, 59, 31,223,185,198,160, 1, 54, 97,132, 1, 32, 86,108, 94,208, 72,196, 12,246, 46,176, 1, 99,153,
-170,104,172,220, 0, 81,236, 80,213, 44, 54,133, 68, 42,144,229,153,163,225,125, 4,239, 21,109,141,237,112, 85, 47,113, 52,250,
- 76,239, 53, 18, 52,238, 95,159, 9,205,246,125,216, 65, 98, 12, 7, 20, 42,192, 92,176,158,156,234,195, 52,208,243,168, 89,204,
-197, 36,244,122, 39,133,158,173,185, 60, 29,244, 41, 99, 9,195,147,162, 52,163, 23,128,239,232, 54,200,168, 94, 80,141,138, 99,
-200, 36,114,103,168,192,247,207, 70,117,226,138, 69,108,191,223,106, 27,158,162, 9, 29, 6, 20, 50,218,181,236, 13,186, 92,123,
-192,253,109,208, 60, 96, 17, 25, 69, 54,213, 58, 61, 48,193, 17, 4, 30, 20, 29,216, 43, 3,109,142,247,107, 8, 96, 76,219, 82,
- 1,179,142,118,201, 84,241, 51,153, 93, 22, 33,218, 81, 66, 69, 13,180, 71,172,224,224, 48, 24,250,216, 13,114,165,112, 13,252,
-105, 54, 98, 87,134, 61,234, 64,131,210,179,231,159, 75,212, 90,202,242,252,156,184, 18,172, 24,128,188, 70, 18,199, 78, 26, 34,
- 28, 60, 31,165, 9, 6,125,127,113,199,110,105, 10,250, 22,232,149,149, 81,143, 79,249, 13, 61,110, 96, 46,232, 45, 24,200,210,
- 0,101,230,230,102,147,179,156,235, 7, 67,145,127,127,189,145,255,248,213,158,188,190, 93,115, 90, 5, 64, 99,228, 46, 93,151,
- 55, 35, 50, 80,208,217, 28,238,117,201, 19,126,127,121,207,238, 23,234, 93, 8,218,180, 24,109, 20,150,132,146, 22, 81,200,175,
- 94,125, 38, 55,151,231,236,250,112, 14, 2, 46, 25, 76,246,121,155,153,209, 13, 24,105,237,166,197, 65, 24,150, 68, 97, 83, 54,
-224,248,239, 54,188, 71,164, 66,102, 70, 71,194,100, 39,170,124, 38,130,210,113, 12, 25,175, 61,214,141, 77,186,126,153,243,101,
- 14, 1, 33,224,126,124,111,205,103,208, 5,190,114,215,180,192,215, 64,125,130,138, 95,152, 91, 51,197, 66,218,233,168,144,196,
- 0,114,127, 16,216,132,242,118, 60,161,232,211,108,114, 39,207,206, 6, 92, 91,126,119,241,182,198, 54, 85,160, 83, 20,110,221,
- 22, 40,140, 49, 65,187,237, 70,206,207, 6,191,139, 0, 60,251, 13,146,189,126,159, 54,100,152, 2,254,120, 61,241,226,207,208,
-254, 24, 63,159, 12,219,242,155, 79, 79, 93,104,198,158,211, 37, 80,243, 80, 99, 3, 50, 93,139,163, 70,162, 73,123,186,150,119,
-151, 55,250,223,121,237, 68,153, 99, 42,217,110, 24, 83, 64,207,199,191,254,231,191, 97, 82, 35,131, 74,223, 23,244,211, 33,128,
-243,249,179, 19, 54,147, 27,109, 20,127,249,233,177,252,225,235,115,189,207,230,200, 7, 92,213, 60, 79,121,237, 83,151, 83,198,
-225, 58,208,102,240,104,184, 38, 62, 10,109, 36, 41,138,189, 38,217, 42, 39, 3,211,200,128,169, 17,148,237, 0,152, 3, 6, 2,
-206,161, 90, 87,107, 92,134, 7,199,154, 94, 2, 88,211,190,215,207, 61, 25, 15, 5,109,197,253,194,100,130, 99, 2, 36, 97,116,
-211,144,247,183, 91, 90, 24,211,247, 61,118, 42,163,211,218,208,140,228,238, 10,138,107,254,228,244,148,241, 31, 19,148,119,151,
-151,242,205,121,139,249,232,104,175, 89,123, 40, 32, 94,163,187,199,121,129, 85, 45,128,237,163,241,130,207, 41, 10,211, 45,164,
-215, 31, 63,127, 46, 79, 95,188,160,192, 61, 40, 78, 91,253, 64,119, 55, 55,114,119,119, 39,155,133,129,126,200,103, 20, 3,137,
-112, 98, 19,229,236,110,205,236,197, 14, 82, 90,209,103, 0,221,199, 14, 15, 85, 87,163,193, 61, 5, 42,118,140,151,167,154, 72,
-177, 27, 66, 39, 49, 39,205,103,103,188, 96, 77, 88,135, 7, 93,163,242, 96, 76,167,215,254,112,223, 60,171, 77, 16, 31,128,174,
- 22,255, 27,157,168,137, 94,148,114,171,137, 24, 73, 51,241,253,255,245,221,200, 52,148,245, 97,249,160,201,208, 28,217, 66,185,
-223,108,249, 61, 27,125,173,155, 44,171,101, 26, 1, 0,203,139,178, 78,114, 48,171,199, 3, 68,138, 87,187, 35,183, 35,173,194,
- 11,179,142,133,208, 9,171, 98, 31,141,162, 43,108,134, 77,162,224, 1,108,194, 4, 3, 29,250,221, 28,149, 26,198,183,122,131,
-147,146,130, 7, 72, 74,236,212,245,115,244,188, 98, 14, 49, 82,211, 7, 6, 93, 33,110,210,222,222, 1,175, 33,170,244, 46,174,
- 33, 12,158, 37, 39,122,123,231,194, 5, 1,157,207,172,155,109,185,176, 68,228,149, 50, 1, 72,250, 58,160,149, 97, 44,188,241,
- 34,140,148, 17,223, 57,135, 94,100,133,193, 3,115,161, 2, 71, 81,145, 46, 50,104,135,129,219,130,218,196,163,162,143, 81, 60,
- 4, 99, 53, 71,206,214,244,178, 40,170,145,246,226, 19, 27,142,155, 65, 53,203, 75, 31, 51,218,125, 43, 67,215,172,207, 77, 8,
- 39,228,248,210,222, 99,232, 5, 3,222, 91,149,152,109,104,158,186,160, 76,195,141, 99, 66,186,218,145,198,232, 83,141,138,230,
- 86,153,212, 24,175,215, 41, 83,133, 65,134,201,198,112,115,149,162,118, 7, 43,204,204, 36,205,120, 31, 73,131,195,217,246, 66,
- 99,162, 5,220,201,192, 44, 52, 49,190, 67,225,106, 64, 41,179, 6,197,219, 71,224, 37, 58,191,223,148,103,135, 3,142,214, 18,
-114, 76, 19, 26,174, 0, 96, 4,168, 41, 48, 9, 8,124, 44,140, 67,206, 35, 57,133, 57,213, 66, 16, 85,191,121,215,231, 52,121,
- 24,207,108,130,132,177, 51,186, 29, 60,155, 64,210,231,121,147, 69,193,114,177,116,255,133,140, 66, 44,144, 52,134, 28, 46,146,
-249,221,116,198,202, 29,107,139,210,141, 39,240,189,167,123,109, 25,104, 53, 15, 84, 63, 36, 37, 65,243,178,174, 58,101, 48, 70,
- 87,129, 98,163,218,251,110,215, 43,118,254,160, 11, 81,172,145,206,131,166, 85,142,239,139,244,251, 3, 22, 29, 61, 89,173, 16,
- 63,114,114,140, 1, 86, 68,241,142, 10, 14, 63,215,162, 43,151, 25,113,208,175, 30,172, 18,125,237,187, 36,100, 80, 50,113,142,
-226, 35,207,136,210,216, 29,236,220, 75,247, 22, 55,111,115,196, 3, 60,103,220, 41,122,130, 55,102, 68, 75,206, 39,185,189,119,
- 20,130,216,181, 67,229, 49,180, 4,140,245, 1,238, 27,169,171, 24,101, 39, 66, 22, 11,216, 13, 24,153, 34,174,205, 52,200, 55,
- 91, 38,179, 60,212,228,117,117,123, 39,191,252,226, 75,153,142,111,232,211,142, 38, 1, 83, 3, 40,165, 1,115,128, 24, 1,131,
-146,155,251, 29,237, 71,145,100, 48,201,216,106, 81, 3, 17, 28,152,180, 3,204,104,128,166,200, 18,145, 54, 37,251,253, 84, 62,
-220, 78,249,172, 13, 7, 13,222,103,172,120,160,178,135,181,225,116,147,185, 1, 75,225,174,126, 41, 11,106, 80,113,147,200,170,
-239,176, 6, 44, 23,156,164, 65, 94, 27, 52, 51,210, 20, 83, 3, 72, 86,128, 70,188, 38,204, 97,144, 92, 1, 64,133,247, 0,166,
-144, 23,183,247,122, 22, 22,188,142, 16,100,169, 25, 41,206,104,122,243,225, 92,142, 15,143,245,245, 49, 5, 13,104, 86, 67,199,
- 54, 76,102, 26, 3,201,130, 88,254,246,239,254,145, 24,139,202, 88, 11,242,174,120,111,232,166,175, 70,161,188,134, 54,188,203,
-253,102,214,253,113,109,135, 66, 33,118,208, 44, 45,175, 29, 51,100, 77,139,203,218, 38, 77,118,210, 0,215, 97,162,254,248,180,
-103, 62, 7,236,244, 13, 88,137,162, 10,160, 60,184, 86,246,250,125,130,205, 14,181,120,165, 82, 28,215, 85, 91, 82, 53,113,158,
-176,202, 90,172, 51,121,125,110, 19,177,212, 45, 69,113,237, 63,232,243,117, 56,104,233,117,212,123,176,210,231, 38,233, 48,145,
-195, 7,229, 66,243, 10,138, 99, 40,209,161, 72, 71,167,140, 9,103,165,185,130,238,254,236,176,175,177, 98,107, 19, 24, 92,247,
-166,197, 89, 8,137,129,105,114, 57,173,116, 51, 10, 2,142,113, 13,119, 4,138,154, 36,240,209,254,128,160,101,172,204,174,245,
-253,128,242, 12,147,151,243,187, 3, 2,202,187,157,160,102,247,116, 96, 93,171,207, 24,138,217,161, 38,246,219,209,130,207,239,
-233, 97, 87,243,201, 70,162,227,110,252,191,141,174,207,181, 26,253, 73,130,221, 76,210,245, 68, 47,252,138, 38, 41, 0,134, 96,
- 15,138,238, 7,173, 61,126, 41,110, 0,254,217,211, 67, 47, 20,107, 40, 88, 81, 81, 80, 63,176,189, 50, 30, 48,116, 32, 43, 84,
-245,238,169,139,177, 15, 18, 43,118,216, 72,196,169,251,215, 94,221, 77, 76, 3, 59,142, 56,190, 94, 59,178, 26,123, 4,240,197,
-121, 83, 96, 60, 48,154,241,134, 1,197,141,215,188,155, 44,217,113, 27,117, 41,144,107,173, 86,104,237,170, 71,234,118,188, 52,
- 78,116, 17,112, 28, 2,215, 35,136, 28,160, 50,131,173,108,172,135, 37,215, 36, 3,255,114,220, 8,104,117, 3,245,186,220,106,
-135, 2, 55, 37, 77,182,115,120,211,174,118, 28,105,130, 54,147,139,129,137,118,133,249,129, 3,108, 99,250, 58, 33,147, 28, 42,
- 40,180,123,230,197,110, 50,159,120,111, 52,235,128, 27,217,106, 41,253,254,160,198, 34,224,144,216, 78,210,204, 3, 96,117,136,
- 61,110,133, 71, 66, 1,130,100, 78,235, 83,142,105, 3,222,252,116,103, 95, 51,111, 96, 83,170, 43,107, 52,178, 37, 52, 0, 95,
- 82,231,133,135,245,195, 93,184,243, 86,228,251,210,202,160,197, 3,169, 11, 86,184, 13, 95, 45, 92, 83,141, 93,171,215,168,190,
-143,192,201,160,172,133, 96,170, 98,161,146, 10,174,132, 70,170, 32,109,244,177,220, 85, 2, 11, 38,174,192, 19,186, 57,209,229,
- 14, 42, 49,192, 79, 28, 85,142, 93,238,208, 9,165,191,102,195,101,120, 83,119,131, 43,235,213, 81, 94,161,215, 93,113,174, 44,
-203,135,196,237,246,177,213, 10, 50,175, 58,119, 31,247,130, 99,142,128,140,250,142, 26,222, 73,228, 60,106, 14, 51,217,201,113,
-205, 1, 85,190,212, 48, 1,212,193,134, 45, 42,246,229, 97,204,196, 5,148,246,191,255,231,159,201,179,147, 1,169, 50, 61, 40,
- 15,130, 43, 65,151, 45, 19,158, 64,145,112,180, 55,148, 95,190, 60,147,127,249,203,151,236,196,191,125,119,169,103,115,197,174,
- 27, 32,197,171,209, 84,198,154,152,215, 90,104, 35,145,220,234,195,141,191,187,163,197,100,198,251,123,171,207,205,189, 62, 15,
-192, 82, 32,225, 83,116, 6,103,102,151,113, 74,132,215, 59, 28,182, 88,188, 94,232,247, 34, 25,222,235,243, 2, 64,151,157, 17,
-224, 86,182, 60,211, 8,146, 7, 26, 8, 15,244,217,196,123,165,148,111,100,252,232,174,118, 38, 8,190,236, 48, 3, 83,106, 68,
- 44,204, 60, 80, 67,151,188,211, 59,224,158, 79,220,162, 21,216, 15, 16, 5, 50,231,183,211,226, 22,207,192,198, 86, 91, 47, 30,
- 63, 34, 5,135,248, 1, 8,156,108,118,166, 79,238,224,207,210,207,154, 77, 82,194,218,190, 55,119, 49,161,210,119,226,161,251,
- 47,224,123,176,143,132,104,202,151,143,123, 68, 32,175,178,144,157, 48,138,150,134,251,104,227,247, 33,248,226,190,130,149,150,
-115,218,104,159, 19,162, 52, 52,222, 0,118,100,179,212,228,222,225,152,254,232,112,159,215,100,138, 73, 98,106,190,233,216,105,
- 71,206, 67, 7, 51, 5,193, 25,159,125, 69, 15,134, 45, 71,197, 69, 85, 28,251,179,142,194,254, 96,216,231, 51,141, 36,138,159,
- 51,197,221,144, 5, 20,214,118,134,107,138,152,228,209,200,208,203,192,117,204,209, 92,153, 52,109,131,247,212, 18,183, 77,206,
-132,123,106,179, 50,141,220, 71,193,152, 36, 22, 29,173, 48,143, 28,163,146,185,158, 72, 64,233,229,147, 97,151,215,131, 83,200,
- 70,236,182,145, 13, 90, 93,111,169, 97,209, 37, 16, 44,160,150,123,192,177, 61,168,189, 63,127,249, 68, 11, 3, 43, 34, 71, 19,
-179,119,174, 56,233,164,254,133, 78,165, 45,109,151,108,171, 29, 91,255,179, 48, 41,109,197,224,157, 0,167, 67, 68,249,103, 59,
- 49,129, 19,237,140,201,157,205, 57, 89,200,165,171,207,198,150, 74,128, 20, 40,210,130, 18,186, 31,192,120,129,162, 72,231, 63,
-253,153,167,103,135,252,187,145,118,255, 0, 82,110, 82,195, 34,224,172, 0, 76,135,243,131, 41, 18,138,191,176,150,182, 22, 78,
- 83, 38,218,237,159,143, 12,243, 18, 38,125,206, 50,103,243, 9,127,166,223,110, 80,124,230,122,178,230,125, 24,182, 99, 47, 56,
-109,221, 7, 96,249,206, 87, 88,244,139,160,247, 68,169, 9,127,101,207,101,110,224,104,179,215,205, 24,255, 12,243, 19, 49,110,
- 96,237,128,226, 21,128,220, 57,157, 43, 19,118,252, 28,171,119,135, 90,248, 55, 57, 69,195, 37,233,180,205,132,102,227,254, 4,
-116,140,188,159,249,125,212, 78,125,183,153,242,128,224, 80,220,143, 70,126, 8, 99,106, 73, 47, 8,202,137,105,120, 63,209, 67,
-200,174, 56, 49, 93,227, 15, 55, 35,247,224, 54, 69, 44,202, 55, 58,103, 24, 29, 48,170,203, 22,119,142, 33, 5, 59, 34, 62,120,
-109,238,165,205, 37,200,140, 97, 96, 41,138, 35,115, 55, 95,219, 40,144, 85,121,193, 7, 44,245,253, 89,198, 17,133,158, 7,109,
-225, 49,130, 94,164, 75,219,183,161,179,131,141, 97,105,158,197,168, 62, 1,186, 8,128, 76, 78,139,218, 2,180,204,197,209,189,
- 54, 38, 94,110, 77,232,131,123,150,208,164, 74, 1, 40, 9,221, 29, 39,229, 62, 48,169, 59, 1,124, 14, 19,180, 49,254,177,161,
-222, 51, 71,128, 90,117, 92,169,191, 85,251,218, 42,145,177, 58, 75, 83, 98, 16,136, 6,223,153, 71,112, 73,121, 77, 83,129, 66,
-254,131,138,148, 85,169, 5, 3, 76, 26,166,172, 94, 83,138, 13,100, 62,238, 54, 69, 44,142,177,180, 82,163,236, 40, 52,212, 97,
-236,129,174, 12,234, 70,250,231, 60, 51, 63,238,118,215, 84,222, 8, 64, 12,170,135,205, 0, 65,220,115, 6, 15,166, 31, 18, 4,
-181, 35, 95, 97,174, 46,181, 14, 59, 62,221,134, 96,181,178,238,206, 99, 55,221,136, 42,176, 89,105,154,242,156,247,249, 14,136,
- 66, 24,121,230,142, 77,198, 43, 46,189,128,128, 63, 61,158,112, 80,160, 66,215, 51, 96,225, 17, 24,216,174,210, 63,112,113,112,
-130,227,232,173, 92,100, 46,191,155,179,243,169, 40,106,161, 35,220, 3,167,112,145,133,225,154,239,164,209,209,117,169,176, 17,
-189,143,170, 77,203, 60,231,125, 29,205,103,172,158, 59, 84, 27,140, 89,136,162,184, 60, 25,116,184,107, 71,113,135,145, 60,138,
-196, 23,103, 71,164, 41, 29,105, 64,196, 68, 9, 93, 57, 42,100,116,190,112,128, 59,232,153,188, 44, 59, 23,125,223,171, 98,199,
-179,142, 7, 22, 69,193, 20,171, 28, 8,119, 52, 3,178, 63,254,248, 61,198,178,109, 38, 31, 88,176, 82,112, 7, 92, 98, 4,192,
- 36,230,200,187,153,180,181, 40,236, 49, 81,193,106,178,219, 53, 73, 94,116,173, 40, 82, 19, 94,250,136,201, 26,215, 9, 88,141,
- 87, 79,143, 24,184,209, 13,220,141,205,245,237,237,221,156,187, 77, 20, 1,248,125, 39,123, 93, 94,243, 71, 7, 67, 2, 73,113,
-110,247,181, 35,123,245,168, 43,223,157,143,120,191,231,203,157, 3,138, 76,109, 79,203, 10,201,209,133, 34,216,105,162, 2,127,
-184, 13,164,238,102, 69, 37, 54,236,163, 1, 56,138,157, 66,152, 58, 45, 15, 19,191, 32,142,124, 85, 19,241,154,154,130,155, 94,
- 35,143, 9, 80, 15,139,253, 76, 84,133, 91,241,209, 84,136,147,186,170, 16,204,173,243,193,168, 22, 83, 9,112,177,255,114,189,
-147,127,241,178, 47,175,175,181,187,214,230,130,142,143,123, 45,130,221, 80, 12, 65, 54,244, 64,239, 89, 27, 69,190,126,174,249,
- 58,103,178,166, 80, 75,175,239, 40,100, 45,148, 86,240, 79,104,200,219,243,107,242,220, 87,155, 31, 25, 7,113,102, 9,100,156,
-153, 91,220,153,190, 54,208,224,152, 4, 32, 41,216,152,220, 68,118,232, 52,167,207,251, 54, 50,148, 58,238, 1,186, 46,156, 49,
-196,205, 92, 11,178,213,106, 65,233, 98, 40,220,192, 11, 28,216, 13,172,229,160,247,141,231,166, 11,252, 3,102,251, 52,138, 89,
-187,235, 87,200, 70,170,154,164,113,178, 81,152, 62,194,122,155,126,180, 86, 42,220, 3, 77,106, 38, 9, 42, 91,178, 6,218, 13,
- 2,145, 67, 98,167,124, 50,200,103, 71,139, 51,208, 10,245,158, 2, 49,223,106,111,165,167,215, 21,155,144,221,214,132, 88,158,
- 62,121,162, 95,239,202, 63,252,240, 53, 63,243,175, 63, 61,179, 9,237,174, 36, 6, 11, 77, 16, 62,231, 80,155,194,107, 45, 80,
-191,126,123,195,162,206,156, 12, 13,123, 83, 82,221, 47,145,227, 97,139,197,111,155,232,238,128,205, 34,158,169, 13,135, 95,145,
-173,194,122, 45, 38, 84,208, 17,161, 1,242,205, 79, 35, 77,228,154,192,242, 5,139, 33,124, 38,122,163, 35, 54,148, 49, 13,188,
- 14,250, 93, 77,118,109,121,118,156,200, 13,155,188,144, 88,172, 61, 45, 4,210,108, 69,113, 40, 76, 85, 42,225,163, 74,176,134,
-102, 99, 90, 64,205, 23, 11,189,150,218,216, 38, 38, 42, 70,112,155, 62,100,147, 18, 84, 90,125, 22, 38,118,158, 81,171,108, 40,
- 80,164,197,134,126,238,217,214,138,207,153, 22,254, 71,189,132, 92,126, 78,244, 8, 12, 76, 77,140, 75,227, 1, 26, 1, 43,226,
-132,194, 82,216,175,159,157, 28,146,225,129,117, 85, 19, 88, 11,125, 47,227,233, 84,254,254,155, 55,122, 70, 62,149,207,159,118,
-201,153,199,125, 58,165, 82, 98, 36, 87,215, 35, 3,201,106, 81,126,113, 51,147,207,159, 31, 74, 60,153, 46, 25,108,121, 24,144,
-192,244, 2, 79,199,115,118,205, 45,138, 77, 68, 90,209,219,142,140,221,151,254,247,116,181, 99, 32,224, 78,205,171, 49, 36,200,
- 77,230, 0,134, 12, 7, 77,111,114, 42, 68, 96, 27, 2,177,148,149, 86, 45, 91,119,210,194,205, 2,119, 15,224,143,130, 92,227,
- 74,199,216, 70,201, 52,155, 47, 27, 30,232, 45, 8, 96,180,135, 29, 89, 37, 82, 98,227, 87, 19,173, 33,200, 6, 85,104, 98,212,
- 56, 72,195, 1,120,194,164, 78, 0,160,237,162, 57,242,160,150,117, 88,243,101, 43,225, 21, 9, 13, 40,134,192,143,132,154, 36,
- 73,173,103,143, 27,152, 1,149,139,238,171, 40, 93,235,218,172, 73,173,203,180, 14, 49,118, 10,150, 41, 26,165, 53, 71, 56,119,
-119,173,202,169, 11, 29,141,209,247,218,236,200,118,149,247, 55, 31,224,146, 5, 0, 70,154,248,190, 60,180, 68,136,239, 99,247,
-137,107, 65, 26,144, 33, 92,225,124, 6,109,112, 36, 60, 80,106,240, 90, 24,203,110,129, 12, 39, 15,216,198,184, 52,124, 40, 82,
-163,151,136, 1, 30,113, 61,152,116, 35, 3,142, 85,180, 68,118,244,192, 80, 64,113,204, 71,120,226,172, 1, 80, 73,192,136, 40,
-168, 4,231,155,247,210,247,113,161,129,156,240, 79, 46,185, 11,209, 88,130,174,198,221,182, 55,141,124, 47,238,163,247,144,224,
-110, 55, 11, 18,151,162, 12,106, 97,157,200,175, 55,174, 53, 16,186,105,104, 35, 58,140,131,113,223, 40,195,235,171,149,106,207,
-142,215,223,239,117,169, 49, 0, 12,197,205,100,198,110, 61, 8,221, 39,217,187,189,172, 40,235,157,159, 56,238, 0, 29, 23, 42,
-124, 4, 34,250,149,107, 16, 0,248, 6, 20, 31,172, 6, 14,246,247, 56,126, 93,107, 1,245,221,249, 29,185,170,208, 74,248,175,
-223,156,203, 31,126,152,203,163,129, 38, 78, 77, 84,107,136,101, 68,230,244,135,127,195, 97,139, 90, 3,250,240, 99,210,132,142,
- 17,162, 48,216,251, 81,198,150, 54,181, 13,158, 63,236,127, 99,119,188,195,158, 23,197, 54, 62, 35,155,183,204, 58, 29, 0,189,
- 48,205, 2, 88, 40,136, 26,236,144,224, 22, 5,180, 48,209, 47,250,204, 60, 62,220, 35,225,236, 94,139,107, 0, 28,199,243, 13,
-139, 83,184, 68, 81,121, 17,197,119,108, 52, 67,140, 21,207,239,166, 92, 25, 16,112,170,215,253,179,199, 29,185, 30, 3, 4,106,
- 70, 70, 40,144,118,243, 45,129,129,141,166, 57,206,225,108, 79,103, 83,153,104, 16,194, 78, 18,137, 62, 73, 0,132, 45,235, 98,
-177, 90,255, 96, 26, 97, 70, 79,166,251, 15, 68, 47,123,102, 13,150, 65, 98, 9,169,178,113,226,254,177,158, 0, 73, 45, 61, 93,
-230, 85, 7,152,115, 92, 94, 89, 22,255,241,205,173,252,155, 47, 95,145,194,186,216,154,191,247, 98,187, 99,145,142,250,251,187,
-183,215,242, 11,189,166, 67, 45, 70, 32,131, 77, 28, 3, 59,112,189,222, 61,179,175, 93,104,162,135,250, 95,111,248, 72,102,122,
-110,158, 63,121,204,221,250, 55,127,249, 90,131,116,139,103, 21,244, 86, 20, 18,147,121, 70, 49, 25,116,231,136,153,200,141, 91,
-223,149,238, 56, 29,178,157, 63,186, 43, 76, 28, 49,241,192,132,231, 68,239,201,173,198, 89, 74,194,186,239, 60,240, 76,232,216,
-114,184,149,133,102,179,138,233, 6, 98, 33, 10, 48, 36, 82,200, 52, 35, 86, 35, 78,133,110,154,197,149, 33,184,239, 45, 91,247,
- 68,129,139,127,113, 74, 21,184,146,166, 61, 23,166, 62, 25,146,227, 61,207, 74, 22,130,173,196, 86,119, 68,108,227,185, 72, 53,
-206, 56, 27, 0, 88,167, 46, 84,233, 36, 54,147,158, 40,145,207, 62,121, 41,111,127,250,158,197, 27,206,206, 95,125,254, 88,159,
-179,182, 92,106, 23,139,117,203,110,103,234,122, 0, 2,159, 30, 14,121, 22, 94,156, 12,228,104,208, 54,207, 16,120,210,235,247,
-220,207,119, 90, 0, 55,205, 85, 78,140, 37,208, 72,226, 90, 0,139,171,165,233, 76, 46,175, 51,211,134,208, 51, 60,215,196,126,
-122,248, 88, 94,191,127, 43,179,233,152,197, 98, 94, 24,179,129,122, 19,146,200,225,222, 80,139,212,174,209, 1,155,177, 22, 29,
- 71,242, 15, 63,194,163,220, 24, 5, 80,144, 91,192,144,170,180,162,144, 42,147,222,216,238,107, 35, 52,131,255,185,211, 59,243,
-208, 38, 78,171,141, 94, 95, 40,189,197, 6, 72,220,239, 54,217, 28,146,217, 32, 77, 34, 45,160, 59,192,235,169,215, 14, 62, 10,
- 5,217, 35, 34,251,250,124,126,184,155,113, 21,132,230, 17, 50,101, 88,207,174,221,153, 20,177, 14,246,202, 57,139, 95, 51,116,
-226,181,136, 19,198,127,120,219,255,241,251, 11,125,166, 95,104, 35,145, 48,102,175, 52, 7,159,158, 30,210,135,228,126, 52,211,
-152, 28,202, 99, 76,120,244,119,197,147, 85, 90, 11, 84,224,134, 47, 93,182, 19, 68, 72,120, 40, 35,168, 91,160,141,152, 8, 17,
-140, 2,223,127,110,119, 38, 44,129, 32,213, 10,194, 26,141, 73,235,196,218,161, 73,136,190, 53, 71,162, 93,157, 48,162,218,127,
-215, 69, 65,202,168, 6, 52, 21,238, 30, 68,209,146,220, 5,104,130,194,199, 71,185,255, 76, 88, 43,154, 21,238, 46, 19,184,141,
-168,184,125,168,129,178,124, 87,139, 0,194, 4,227, 86,168,153,121,170,115,199,138,253, 47,199,210,101, 13,238,170,148,236,170,
-157,117,179,209,168,125,171,183,217,174,182,138, 68, 23, 69,197,188,204,246, 54, 15,197, 64, 81,119,244, 91,234,180,103,230,113,
- 92, 86, 5,129, 38, 95, 0,174,244,208, 34, 81, 21,158,252, 67,167, 75,108, 41, 31,187, 33,125, 38,203, 11,199, 47,216, 97,199,
-131, 84, 4, 25,129, 43,230, 71,109,159, 93, 88,140,152,233, 3,138, 15,147,143,180,194, 5,186,194,165,139,239,196,142, 82,183,
-226,202,196, 95,170,228, 89,169,144,149, 62,234,196, 97,167,161, 70,105, 59,228,194, 71,217,229,250, 97, 85, 64,225, 25, 58,241,
- 85, 4, 27,192,137, 30,238,145, 89,246,154,162, 22, 71,244, 98,239,169, 26,239, 87,171, 1,169,198,173, 16,170, 65,199,227, 9,
-161, 26,105, 85,187,125,238, 45, 97,202,131,238, 27,245, 91,234, 70, 32, 34, 15,160, 56, 79,234,152, 48, 44, 64, 5, 2, 42, 59,
-181,233, 74,229,247, 93,213, 20,101,238,251, 45,160,185, 83, 3,250, 44,244, 31, 4, 6,130,220, 52,136,222,206,180, 50, 15, 52,
- 81,161,219,203,182,114, 53, 75, 73, 43, 3,119,126, 52,190,151, 79, 30, 29,200,191,252,213,207,228,211,179,125, 6,215,127,251,
-235,231,242,187,175,127,146, 31, 47, 70, 28, 41, 86, 54,141,232,224,224,143,204,202, 31,170,198, 80, 56,211, 4, 60, 94,108, 24,
-196, 50,223,187,137,235, 96, 11,117,224, 77,181, 12, 39,180, 65, 93,243,128,251,111, 0, 54, 7,221,182, 33, 66, 0, 94,210, 32,
-219,213, 66, 3, 34, 27,120,207, 95,244, 91, 82,162, 16,166,159,249,144,201,135, 29,114,110,128, 60, 76,220,142,181, 83, 55,219,
-223,156, 50,176, 40, 36, 32, 82,131, 14, 23, 5,207, 76,147,200,116,149,144,173,129,251,139,226,168, 20, 43,132,112, 46, 0, 36,
- 69,199,133, 64, 4, 42,157,241,106,109, 66, 4,144, 24, 37,105,189,176, 12, 98,147, 61, 5, 88,139,192, 67, 45,208,185,222,139,
- 66, 7, 49,201,195,122,167,186,135,192,100,196, 98, 20, 46,151,173,165,172, 42, 89, 22, 68,215, 48,240,145,193,160,207,197,213,
-221, 90,206,239,183,242,215,159, 29,202,223,124, 51,162,221, 38,116,223,159,156,180, 53,201,216,235, 2,228,186,203, 77,119, 60,
-142,141, 51, 93,174,114, 2,133, 65,147, 74,200, 45,215, 68,170,133,227, 86,155,147,219,209, 72,126,245,233, 51, 25, 93,191,167,
- 1, 16, 80,229,148,178,157, 45,201,133,142,163,148,242,189,121, 17,213,235, 44,202,164,126,164,124,199,201, 35,132,105,210,130,
-247, 18, 5, 61,117,226,203,144, 8,253,174, 22, 72, 40, 18, 34, 95, 75,237,107,161,135, 61,121,234, 70, 69, 89,189,102, 50, 96,
-221, 98,177,117,103, 76, 75,224, 75,160,200, 67, 8,184,164,156,222, 84, 94, 19,134,156, 46,164, 81, 25,113,145,162,218, 99, 60,
- 27,107, 17,146,106, 66, 12,125, 77,208,136,109, 77,153,103, 27, 61, 27, 3,222, 51,152, 37,109,182,218, 92, 52,250, 90,244,236,
-243, 93,160,217,192,250, 19,187,246, 40,202,229,255,253,230,138, 19, 38,160,183, 57, 57,113, 9,105, 38, 76,208, 31,245,179,223,
- 79, 15,120,160,113, 46, 55,100,171,152,224, 85, 94,152,127,124,236, 62, 2, 97,100,136,244, 6, 71,230,145,197, 38, 20,108, 97,
- 68,147,151, 78, 91,223, 71,255, 84,223,155, 57, 4, 50,134, 68, 37,239, 51,138,180,151, 79, 14,249,249,113,207,177, 82, 3,115,
-229,160,175,133,237, 81,151,207, 5, 58,116, 72,175, 14,245,252,225, 94,224,119, 75, 69,179, 11,108,218,124,136,120,171,215,103,
-127,208, 99,195, 9,234, 26, 93, 15,161,142,215, 79, 92,119,165,132,239, 13,159, 41,198, 68,253,188,231, 90,248,150,174,139,223,
-110, 53, 93, 40, 41,167,182,255,102,107, 57, 0, 77, 45,112, 81,169,179, 60,160, 97, 48,164,248, 26,176, 90,198,192, 0, 30, 5,
-103,161, 67,147,172, 22,129,158, 99, 45,174,190,121,183, 39,191,252,100, 95,246,186, 1, 49,105, 40,100,176,130,192, 36,225,254,
-126, 74,198,215,106,181, 50,120,105,145,219, 94,148, 99,191, 32,172, 59,163,202,159,217,246,162,166, 46, 16, 6, 21,240,170,168,
-109, 19,209, 45, 87, 1,190,210,233,182,255, 40,255,201,131, 10,183, 48, 82, 18,182, 91,119,228,178, 42,121,187,179,196,221,240,
- 46, 27,127, 7,180,112, 21,244,173, 75,211,195, 18,153,120, 72,181,111,171,128, 98,244,124, 79, 18,175,238,242, 90,127,222, 52,
-203,119, 15,227, 95,242,190,243,122, 12,155, 59, 55,186, 2, 83,217,174,215,129, 92, 46,202,192, 41, 6,248,218,164, 39,217, 30,
- 43,244,241, 22,165, 14,189,171,172, 16,203, 91,119, 82,162,112,136,152,212,105, 71, 59,219,142,239,155, 26, 13, 27, 45,239,220,
-169,174,112,139,212, 44,180, 85, 3, 93,199, 22, 75, 86,116,232, 6,249,222,205, 13,131, 32,138,200,147, 62,130,123,218,176,164,
- 94, 58, 48, 45,240,164,102, 65, 53, 50,196,167, 7, 76, 60,156,224,160, 75,181,227,246,189, 55,187,128,134,169,200,161,160,169,
- 58, 30, 30,244, 88, 8, 32, 66,177, 66, 58, 26,222,127, 98, 6, 56, 54, 90,119, 3,220,208, 70,190,230, 92, 23,121,145, 8,119,
- 4,191,247,133, 37,248, 26,121, 31,250,123,142, 92,164,168,168,186,185,178, 66,246, 24, 16, 42,118,113, 18, 23, 49,137, 67,163,
-198,101,101,138,190,193,164, 54, 33, 36, 1, 0, 95, 92, 77, 12,220,131,160,172,198,142, 25, 71,235,228,255,238,245, 44, 40,114,
- 44, 95,214,206,112, 88,101, 80,248, 40,180,100,153,249,185, 31,182,219,218, 77,108, 40,178, 83, 70,109, 13,248,218, 69, 99, 66,
-164,255,125, 55,154,202,166, 3, 5,172,173,116,181,242, 71,160, 3, 58,250,103,159,127, 34, 95, 98, 44,221,180, 98,152,251,231,
-212, 58, 70,124,110, 92, 75, 4, 18, 4,152,229, 54,177, 0, 12,240, 75,211,104,144, 97, 41,245, 62, 20,197, 74,151,134, 22,161,
-143,114, 83,219,167, 5,230,169,205,137,130, 62, 70, 24,189, 97, 12, 74, 65, 32, 76,103,128, 66,214, 11, 3, 59, 75,128, 62,241,
-218,235, 36,166,212,101, 49, 95,155,140,235,194,238,221, 49,168, 67, 41, 4,114, 42,241,158,144,162, 43, 24, 27,118, 27,240, 40,
-239,115, 93,150,119, 76,162, 57, 74, 90,242,230,242,150, 65,103, 8, 87, 47,125, 45, 20, 76,163,137,173, 47, 64, 49,172,120,231,
- 16,213,193, 51,130, 36,185, 17, 51,238,137, 52,137, 64,173, 15, 24,156,237,206,145,254, 46, 39, 91, 81,170, 42,108, 70,238,163,
-208,208,181,251, 43, 0,100,165, 70,152, 18,224,103, 0,175, 60, 55, 5, 54,252,220,111, 95, 79,228,127,253,183,207,229,247, 63,
-106, 7, 3, 36,241,205,132,197,110, 28, 53,136,179, 65,241,115, 72,237, 2,195,151, 0,108,180,163,108, 48,146,141,137, 6,229,
- 89,204, 98, 12,214,165, 8,148,187, 34,150,163,227, 67,138,146,152, 80, 78, 76,250, 24,186,101, 36,136,203,187,185,219,241, 98,
-188,108,155,122, 26,135,224, 12, 64, 96, 40,107,240,154, 80,240, 68, 27, 1, 80,228,192,114,105,235,191, 81, 20,247,244, 53,224,
-135, 1,230,205,237,253,136,215, 7, 1,125, 77,230, 81,200,150, 10,157, 59, 86,152,187,212,186,106,140,163, 51,106, 41,192, 56,
- 39,229,180,136, 54,182,165,155,187,124, 84,196, 99,149, 81,184, 92, 41, 87, 84, 14, 50,133, 96, 74,119,104, 56,136,146, 52, 84,
-243,224,160, 66, 30,156,238, 88,232,110,245,245, 6,180, 11, 62, 61, 58,145,205,226, 94,142,250,198, 71, 71,172,153, 3, 7,197,
-137,159,212,147, 73,252, 28,214, 4, 1, 17,249,185,124,253,211,149,137, 97, 57,205, 46,118,171,232,208,159,251,128, 8,121, 61,
-183, 96,182, 64, 38,183, 72,184,195,111, 82,137, 47,163, 88, 88, 0,165,204,238, 1,207,205,147,227, 71,242, 63,125,245, 75, 57,
- 58,232,107, 12,179,123,129, 78, 27, 90,236,112,112,195,234, 24,184, 14, 20,171,152, 24,236,135, 0,129, 78, 36,214, 80, 49,217,
-228, 92,215, 98, 28,206, 78, 63,179,124,130,201, 34,138, 72,250,156,184,198, 69, 37,124, 69,237,202,160,226,255, 7,126, 13, 93,
-130,172, 90, 21,154, 63, 17,147,178, 21, 11,150, 91,197, 77, 94,162, 60,224,125,229,228,210, 87,192,208,182, 0,136,113, 26, 47,
- 88,148, 2,224, 13, 32, 35,113, 47,233,142,120, 2, 54,143,250,231,209,116, 34,111,110,154,242,234, 68,159,205, 86, 38,151,151,
-119,114,124,178,111, 83,219,164,193,107,185,167,207,107, 76,115, 19, 71, 3, 87, 34, 30, 31,235, 71, 85,162,217,129, 75,148, 86,
-158,225,236,150, 81,245, 67,117, 42,221,177, 10,229,222,179, 2, 72, 69,102,179, 90, 21, 10,161,171,232, 32,136,218, 65,207,106,
- 58, 92,181, 47, 75,185,195,141,153, 8,163, 60,244,189,172, 37, 8,115, 17,123, 80, 15,171,108, 61, 89,241, 57,106,190, 86, 15,
- 50, 78,149,163,137, 11, 87,203, 11, 93,185,201,248,157, 21,194, 51, 20, 7,155,149,133,235,215, 11,209,247,246,158,131, 90,186,
- 52,112, 43, 61,220,240, 94,183, 71,160,148,145, 71, 44,193,151,197, 67, 1, 19,186,177,141, 37, 46, 3,124,101, 20,104,177,113,
- 74,149,212,215,236,106,108,170,209,239,116,107,244, 55,147, 32, 68, 67, 16,208,195, 7,155, 86,142,247,227,200,197,129, 76, 8,
- 35,118,126, 55, 10, 1, 27, 43,219,136,141, 60,113,128, 45,196,238, 47, 16,199, 32,188,182,180,250,171, 56,233,213,106,130, 70,
- 38, 44,110,138,154, 38, 70, 86,128, 23,110, 68,161,151,142, 82,247, 29,124, 24, 58, 40,166,114,215, 46, 50, 51, 41,113,208, 90,
- 35,242,107,135, 7,184, 17,125,164,233,110, 69, 83,165,238,196,131, 31,120,226,143, 35,167,135,153,106, 94, 35,106, 17,101, 78,
-155,215,216,168,111,228,242,131, 38,212,109,215, 69,130, 89,184, 62, 92, 39, 3,145,236, 40,218,195, 98,177, 25,177, 43, 20,158,
- 49, 67,172,210,254, 23,103,161,217,244,130,196,148, 21, 49,242, 2,248,167,135,135, 79,127, 22, 35, 70, 33,223, 94, 95,155, 56,
-142,152,138,119, 52, 31,210,251,215,107,130,242,101,246,187, 47, 95,156,105, 50,215,174,105, 27,243, 82,141,151,230,115, 31,233,
-239,223, 81,162, 50,226,103,179,142, 75, 72,137,234,104,242, 4, 37, 41,141, 10,242, 92,209,241, 96, 55,106,250,253,246,158, 89,
- 24,122, 18, 68, 34, 35,205, 73, 19, 18,144,233, 96, 59,192, 90, 30,251, 66,219,161, 70, 76,162,232, 56, 80, 56, 0,236,121, 52,
-104,241, 58, 12,160,235,206,181, 74, 64, 96, 95, 43,177, 73, 88,139,250,227, 27,130,138, 0, 30,197,117,197,207, 96, 20, 15,244,
- 46, 58, 92,236, 93, 65,173,195,200, 30, 69,232,143, 23,215, 44, 22,128,228,197,174, 56,241,179,109,234,133, 25,117, 21, 76,153,
-172,105,207, 31, 38, 77,216,195, 23,118,255,204, 47, 97,109,246,191,133, 1,134,114, 71,180,155,187, 22, 45,120, 30,156,221,114,
-123,221,242,163,231,177,146,251,141, 2,163, 97,206,244, 94,225,185,189,156, 90, 49,245,244, 88,223,219,116, 75,144,211, 92,239,
-197,254, 80, 11,216, 32, 38,143,156,227,214,216,248,204,180, 41,214,247, 14, 96, 92, 23,207, 14,238,119, 16,155,139, 98, 12, 62,
-121, 38, 23,183, 51,105,244, 31,201,135, 63,255,168,239, 41,225,239,154,234,181, 7,221, 47,219, 45,184,246, 10,160, 42, 71, 65,
-109,211, 12,224,253,194, 40,187, 12,248, 59,180, 15,212,162, 17,211,157, 17, 49, 45, 56,159, 80,200,172, 4, 91,104,105,154, 27,
- 79, 28,120,142,198,106, 91,239,204, 49,186,133,224, 75,179,209,116,145, 24, 20, 93, 91, 61, 99, 5,197,115,112,254,231, 62,122,
- 47, 2,195, 38,136, 56,183, 63, 52,139,211,212,253, 14,128,119,162, 21, 47, 88, 20, 90,140,150,251, 90,136,153, 30, 38,209,235,
-141, 2,247,189,225,116, 82,155,178,208,203, 30,185, 34, 91, 18, 19,178, 74,129,216, 71,177, 31,217,122,168,233,122, 6,104, 4,
- 80,164,182, 18,247,136, 8, 88,248, 97,117,120,113, 63,179, 24,235,250,229,196, 21,128, 7, 15,157,126, 40,220,241,108, 68, 44,
-172, 17,187,112, 70, 33,248,130, 2, 10,198, 59, 40,149, 90,212,183, 72,104, 66,246,211, 5, 28,244, 74,121,118, 54,212,207,102,
-147, 19,188, 79, 76,149, 64, 51,190,158,108,185, 30,195, 52, 21, 5, 31, 19, 56,193,145,102,161,202,198,148,147,224,192, 20, 72,
-181, 56, 62, 61,232,243,253, 53,184,126, 40,229, 26,160,110,136,139,121, 94,138,195,192,233,150, 6,248, 35, 2,191, 97,241, 97,
-179, 51, 6, 24,227, 19,144,252,177, 57,249,133,205,152,120,137, 44, 53,255,141,178, 93, 61,203, 54,197, 64,211,103,236, 49,163,
-126, 99,133,101,177, 16,174,114,115, 57, 62,216,103,227,139,102, 10,140,140, 80, 14,228,241, 80, 24, 15,129, 73,122,246,228, 88,
-207, 42,174, 49, 86,174, 26,243,176,143,133, 58, 23,114,108,228, 65,188,116, 68,104, 81, 86,123,116,169, 59,210,170, 26, 9,252,
-223,185, 83,147,232, 56, 83,123,231, 58,237,194,187,253,143,147,118, 81,187, 17,149,245, 40,157, 64, 5,236,182,144,180,224,245,
-140,224,227,244,134, 40,180, 64,143,241, 69, 35,137,235, 7, 58, 10,196,149,175,196, 19,186,185,133,129, 91, 26, 84,124, 75, 71,
- 64, 87, 85, 20, 71,152, 81, 81, 39,219,143, 71,248, 21, 80,172,168,249,245, 65,141,174,174,118,205,184, 41,168,156, 42,176, 90,
- 53,234, 13, 29, 7, 80,217,132, 34,129,208, 73,201,223,131,201,118, 70, 30,184,242, 26, 40, 84,217,128,154,139, 82,165, 58, 6,
-189,189, 13,169,108, 85, 87, 95,129,200, 48,225,176, 29,120, 65,193, 13, 6,129,249,210,189,156,181,232,209, 0,110,187, 49, 3,
- 41,226, 0,167,187, 85,173,144,134,174, 28,139, 69,118, 17,161,105, 87,199,137,237,162,179,220,104, 55, 52,128, 65,231, 91,154,
-207, 58, 13, 10,160, 16, 87,166,172,184, 49,227,198,131, 70,144, 78, 20,124,116,125, 75,239,222,245,245,125,245, 16,187,131, 85,
-238, 72,121,203,102, 54,205,201, 42, 77,248, 60,247,157,190,117, 6, 41,233, 94, 49,223, 35,244,173, 3,138,252,196, 38, 65,233,
-192,170, 48,182,170, 30,134, 16,177, 99, 20,234,226,144, 6,212, 66,145,156, 77,106,102, 57, 97,248, 64,125, 42,189,155,207, 29,
- 77, 93, 5, 24,170,156,197, 81, 29, 68,177, 59,181, 49,120, 68, 77,105,162,168, 49, 38,197, 40, 28, 30,208,235, 21, 65, 77,232,
- 12,242,188, 65,117,168,219,187,169,196, 39,251,188, 70,183,107,147,248,196,165, 65, 34, 11, 92, 8,131,197,133,211,171,230, 43,
-237,254,246,186, 4, 45, 33,184,211, 98, 87,207, 69, 91, 59,255,201,210, 28,192, 40, 93, 11,222, 43, 62, 67, 28,145, 63,142, 99,
-143, 2, 12, 65,186,201,130, 38, 54, 21, 71, 47,136, 64,135, 65,219,180, 92,239, 56,142, 69,130,200,179,178,134, 76, 49,193,119,
-140, 42, 25,196,230, 25, 0, 86, 10,156,167,174, 70, 25,129, 99,183,211,181,252,171, 95,124, 66,199, 42,156,247,126, 55, 49, 92,
-135,254,126, 76, 38,158, 28, 13,249,231,209,232,142, 65,123,231, 78,137, 40,230, 74,140,155, 53,153, 91,199,146,242,158,114, 2,
- 20,151,245,186, 37,142, 34,159, 84,229, 53, 45, 18,231, 20, 34, 68, 37, 41,144, 66,138, 94,225, 19, 10,106, 96,248,100,173, 98,
-100,132, 62,173,163, 34, 34,138, 96,200,240, 54, 91, 68, 72,255,233,253, 76,126,249,108, 32,255,215,253,181, 28, 12,187,214, 97,
- 47,215,124,174,144, 56, 48,125,107, 12, 7,238, 88,102,138,113,232, 54,209,175, 1, 24,137, 34,153,239,113,183,164,106,221,108,
- 62,147,159,127,254, 41,149, 20,199,211,133,116,186, 77, 82, 86,223,124,184,149,126,175, 33,209,186,107, 19, 64,178, 43, 34,238,
-249, 35,218, 19,115,228,194,231,186,167,113, 22, 96,100,128,159, 8, 56, 59, 61,146,183,151,183, 6,212,211, 24,129, 66, 20, 73,
-176, 3, 91,217, 92,147,208,106,206, 73, 20,176, 68, 48,204,217,232,243, 61,247, 69,104,106,162,122, 70, 87, 20,155,240,180,252,
-188, 84, 9,162,194,166, 32, 57,114, 61, 21, 89,241,128,228,211,112,103, 67, 40,152, 77,231, 43, 45, 78,237,233, 64,162, 2,112,
-111,177,173, 44,143, 75, 82, 49,193,190,184, 13, 83, 82,190,210,178, 33,235,229, 92, 26,250, 75, 7, 45, 80,239, 76,135, 1, 10,
-123,143,142,159, 81, 59, 29,187,233,227,190,241,202, 65, 13, 67, 44,186,215,164,139, 53, 5,246,205, 72,170, 13,118,237,134,224,
- 7,120,147,188,255,182,249,166, 83,161,146, 49,204,148,255,160, 62, 8, 60, 8,158, 39, 40,200, 5,193, 90, 70,155,149,252,240,
-118, 41,127,243,219, 63,232,251,155,178,179,207, 74, 99, 60,160,116,216, 63,126,194,226, 6,207, 21, 5,175, 24, 26, 60,187,249,
-227, 64, 78,185, 94,183, 23, 39, 39,218,253,239, 81, 26,119,199,130, 90,200,138, 1, 85, 20,107, 37,168,113, 54,146, 38,167, 47,
-213, 4,185, 6, 47, 39,198,202,233, 52, 66, 2, 49,205, 4, 43,230,211,118,120,220,165,247, 7,158, 21,152, 66,225,140,157,246,
- 0,150, 12,228,207,239, 70, 50, 89,109,244,153,142,229,236,232,144,207, 2,206,194,179,211, 83,198, 46,184, 17, 66, 52, 9,147,
- 37,226,193, 92,248,136,147,132,108, 95, 94, 28, 55, 57,149,192,115,118,124, 52,208,207,179,146, 27,253,222, 24,240,249,204, 71,
-145,181,156,171,239,168, 43,192, 81, 21, 20, 57, 90,247,224, 76,128, 89,186,169, 71,219, 68,190, 7, 15,227,242,170,187,175,254,
-199, 7, 22, 29,132,171,210, 5,164,123,153,231, 46, 30,178,212, 71,162, 1,105, 42, 54, 22,171,166, 3,120, 88,235,142, 12,197,
- 1,188,141,243,204, 3, 69, 82,255, 94,241, 11, 77, 39,163,208,185,211,213,176,161, 44,235,110, 58,240, 17,132,141,123,139,250,
-239,153,212,221,254,144, 57, 45, 48,122, 13,187,109,114,200, 51, 25, 52,219, 15,147, 12,252,222, 80,234,245, 0, 2, 27,122, 99,
-242, 78, 37,231,104, 57,168, 68, 53,244, 27,217,153, 56, 13,173,114, 93, 66,199, 56,159, 47, 40, 54, 67,111,118,160, 46, 1,172,
-209,131,143,145, 19,146, 62,138, 31, 19,216,176,177,126, 3,158,233,237, 88,198,147, 21, 85,195,176, 75,131, 40, 66,209,107, 80,
-200, 4,239, 5, 73,106,162, 15, 43,245,213,245,195, 28, 28,245, 12,225, 41, 86,245,211,192, 5,188,227,204,174, 11, 30, 8,238,
-196, 50, 91, 65, 84, 93, 47, 42, 74,210, 51,114, 3, 17, 82, 93,105,147, 18,208, 83,186,104, 75,232,215,222,124,210, 27, 46, 57,
-106,123, 68,116,189,184, 79,184,183,216, 1,115,191,231,235,146,204, 11,194, 70, 98, 32, 62,161,179, 89, 66, 74,155,141, 84, 11,
- 38,115, 60,216,244,158, 78,179,122,245,131,233, 13,222, 91, 41,129, 39,245,226,193,209,175,118,246,243,151,117,233,216, 74,154,
- 54, 12,130,154,246,198,115,230, 78,133,145,163,240, 43,169,100, 32,110,209,201, 85, 5,100,187,213, 33, 16,101, 78,196,109, 65,
-125, 5, 72,126,162,146,191,209,138,190, 55, 88,200,227,211,125,222,207, 34,221,154, 73, 17, 85,198,114,158, 87,151,147,225, 94,
- 22, 43,128,235,251,137, 38,245, 30, 11, 3,172, 28, 38,155,221, 3, 85,144,206, 81, 5, 87, 47,116, 49,140,109,146, 70,123, 83,
-189,167,240, 95, 15, 82,179, 99, 12, 57,214,206, 40,224, 2,233,224, 56,210,231,163, 29,216,142,212,149,199,240, 26,237,134, 77,
- 71,160,227,141,207, 4,128, 29, 70,184,163,201, 66,207,102,166,193,161, 33, 83,118,135, 70,219,251,246,221, 45, 3,113,147, 12,
-148, 37, 95,107,197,117,197,206,113, 44, 33,247,211, 40,190,123,205, 22, 71,171,232, 88,193, 81,222,184, 33, 9, 58, 94,168,157,
-101,164,180, 26, 59,102,183,203,234,130,185,210,231,143, 92, 38,118,235, 99, 75,169, 40,148,149,252, 65,181, 26,115,142, 99, 25,
- 88, 23,137,137,153, 57,142, 25, 35, 3,241, 9, 59,208,175,223, 47,228, 95,124, 58, 96,193, 4,212,242,180,185,181, 85,162,115,
-187, 49,229,195,125, 6,101,111,190, 41,121,206, 64,229, 3, 67, 97,127,223, 10, 51,220,251, 56,220, 73,210,108,154, 8,138, 94,
-183,175,190,250,107,249,253,111,255,139, 44,183, 37, 57,235, 24,159, 34,137,205, 23,118,175,241, 58,120,110, 26,154,236,150,117,
- 83,225,241, 1,166, 39,219, 37, 11,168, 22,187, 59, 99, 47, 32,137, 32, 98,146,155,142,123,227,157,100, 16,251,232, 54,128, 56,
-205, 74,224, 41,180,240, 36,142, 28, 12,141, 21, 60,239,173,200,236,150, 41, 23, 90, 90, 17,109, 19, 75, 51,208, 1,198, 3,205,
- 37,158,254,144,156,125, 91,121, 81,109, 13, 88, 8, 77, 30,219, 93,196,238, 28,251,118, 72, 22,127,255,245,107,222, 75,196,168,
-149,155,248,140,151,177,188, 72,250,210, 41, 39,114,175, 63, 7,198, 18,215, 86, 26, 19,167,218, 81,182,244,249, 24, 96, 79, 61,
-215,231, 97,186,147, 63,165,119,178, 94,140, 93,182,217,226,231,201,254, 64,254,187,207,123, 4,190, 1,104, 6,124, 12,172, 93,
- 1, 93,222,236,242, 90,174,153,224, 99, 7, 70,166, 16, 48,130, 49, 79,192,200, 76,165, 83, 40,149,157,156, 60,147,225,193, 35,
-106, 1,244,244, 62, 48, 86,185, 94, 7,138,152, 1,169, 95,200, 23, 90,188, 68, 37, 21,175, 82,199, 76, 65, 80,198,148, 29,173,
-179,142, 19, 0,253, 54, 76,148, 33,109,135, 99, 54, 47,207,207,246,245,122,157,200,215,111,174,152, 43,160,101, 0, 90,225,151,
-207,246,104,210,244,246,122,206,251,103,190, 17,109, 38,227, 22,101,183,109,189,176,243, 73, 0, 26, 28,208, 4,225,200, 7,218,
-220,241, 32, 33, 72, 16,185,119,193,125,250,156, 34, 75,167,122,246,112,166,215,110,214, 98,147,170,162, 94,233,110,233, 64, 41,
- 90,124,155, 55,199,163, 97, 36,183, 26, 71, 6,253, 38,207,114, 99,174,205,227, 0,122,209, 89, 90,119,213,148,244, 12,139,250,
-129,171,118,148, 81, 24, 61,112,128,171,132, 40,129,115, 64,131,154, 50, 17,125, 36, 4,242, 79,180,110, 1,102, 41,173, 59,103,
-133,233, 28,234,204, 17,207,248,208, 65, 42,110,106, 31,219,142, 21,221,153,249, 20,241, 3,178,114,174, 58,245,184,109,154,103,
-193,131, 29,104,224, 10,105, 65,189,167,121,224, 98, 87,125, 90,165,124,102,104,245,162,150,225, 52, 4,124, 86, 27,219, 84, 93,
- 93,236, 92,218,138, 31, 78,125,114, 26, 43,148,181, 91, 93,101, 99,200,241, 22,253,169, 83,167,223, 88,231, 10, 91, 64,116,226,
-176, 99,228,136, 52,177,131,212,240, 14,103, 15,224, 15,176, 14,102, 11, 57,208,202,174,217,220,103, 36, 67,112, 98,178,209, 68,
- 23, 31,180,184, 27, 50, 14, 36,170,126,125, 88,227, 1, 19, 6, 71,100,137,141,201, 24,212,125, 63,137,196, 75,186, 5, 68, 39,
-150, 91,222, 19,142,132,188,123,197,125, 55,163, 25, 27, 75, 27, 0, 18,123,181,134,155,175,136, 83, 10,115,118, 15, 38,101,232,
-110,118,116,103, 11,234, 36,157,121, 64,219,229,230, 38, 68, 62,102,110, 35,195,128,210,134,153, 57, 44, 37, 45,138,174,164,165,
- 49, 41, 16, 52, 50,175,188, 42,160, 93,154, 61,128,165, 72,137,219,149,190,123,245, 42,249, 35, 57, 81, 59,123,133,216, 26,169,
-240,196, 29,177, 19,199,217,193, 78, 55,240, 53, 10, 30, 10, 90,174,122,193, 25, 20, 14,164, 12, 2, 55,195, 48, 37, 68, 8, 91,
- 32,137,192, 24, 2,212,154,184, 72,121,143,103,179,153, 77,140,208,249,228, 21,197,202,236, 61,239, 38, 83,249,252,165, 80,111,
- 28, 8, 26,240, 75,161,157, 77,141,132, 44,243, 9,147,163,149, 51,123, 15,120, 79,247,211,165,254,124,230,224,208,146,227, 72,
- 24,192,112,242,178, 53,236, 2,186,215,152, 59,242, 53,147, 26,229, 91,161,181,224,194, 62, 72,146,152,186, 44,189,112,230,153,
- 14,204,209,107,187,115,107, 85,223,119, 10,129, 63, 86,108, 66,179, 31,103,106,201, 41, 65,193, 49,243,198, 53,251, 9, 66,164,
-236,172, 49, 1,208,105,136, 23,112, 45, 22, 60, 26,140,129,251, 24,116,121,175, 91,141, 22, 87, 14,107, 36, 72, 20, 69, 26,232,
- 37,180, 36, 69,181,201,220, 21,189, 2, 83, 86,180,103,222, 86, 5,187,108,107, 52, 39, 23,119, 10, 29,180, 90, 53, 26,156,148,
-229, 69, 93, 4,150, 98, 54,206, 40,242,187, 45, 83,217, 43, 41, 80,178,149, 94,212, 38,223,250,187,203,149,204, 53,254, 61, 61,
-208,231,106, 93,114,223,140,123, 50,232,134,126,246, 75,142,104,227, 29,220,204,114,118,116, 65,240, 48,209, 3, 72, 9, 59,111,
- 88,121,238, 54, 27,130,194, 70,227,177,188,120,254, 68, 6,223, 14,100,124,113,197,103, 6, 12,161,217,210,146, 9, 95, 3,247,
-141,210,192, 33,247,228, 4, 72,209,254,115, 77,202, 92,117,198, 48, 77, 64, 39, 8,249,214,205, 10, 9, 43,103, 87, 8,127,248,
- 13,177, 45, 13,217, 63, 57,179,179,141,137, 87,120,230,109, 85,200, 98,163, 71, 65,159,152,211, 62, 92, 55,136,173,224, 90, 67,
-153, 82, 92,213,177,198,113,232,153, 95, 70, 72,140, 43,211,107,192, 55,108,133,224, 46,220, 79,188,183,147,189, 19,210,209,176,
-130,184, 25,141, 57,209,107,184,189,110,225, 30, 15,135,253, 80,238, 70,247,114,126,123,207,162,245,213,227, 3, 22,124, 91,202,
-218, 38,210,239, 15, 25, 71, 17, 25,224, 43,112,117,125, 46, 11, 77,246, 16,121,161,197,172,198,128,197,234, 86,126,186,184,101,
- 60, 44, 29,112, 86, 1, 96, 67,131,104,213, 57, 36,142,108, 34,107,141,149,139,213, 36,198,159, 7, 88,177, 9,127,131, 78, 44,
-143, 15,246,244,223,250,251,187, 48, 61, 42, 41,112,246,232,176, 79,188,201,235,119, 87,242,244,172,167, 73,244,128,116,211,197,
-218, 44,134,177,154,249,249,147,161,124,127, 49,149,247,183, 43,130, 3,239,151, 5, 57,229, 63,127,126,204, 21, 4,228,110, 79,
- 15, 7, 28,185,127,250, 4, 83,149, 59,198,127, 20,173, 48,120, 57,222,211, 66,224,126,201, 85,131,121,169,151,242,234,108,160,
- 9,217,214, 63,152,166,160,208,155, 46, 83, 38,121,124, 95, 18,110,121,223,166,171,204, 38,213, 4, 87,151,122,134,150,206,236,
- 73, 8,182,163,138,106,105,152, 31,203,195, 33,139, 78,196,225,233,116,206, 60,115, 61, 94,235,245,111,201, 73, 18,210,209, 13,
-211, 66, 76, 18,227,134,155,146, 84,238, 43, 12, 44,222,185, 87,137,144, 99,178,252, 65,154, 51,240, 81,117,189,120,175, 69, 75,
-202,154, 35, 12, 46,223, 3, 32,203,196,254,139, 74,185, 76,194,154, 51,206, 7,169, 2,229,201, 67, 50, 38, 93,165, 40,106, 61,
-108,234,190,103,214,157,135, 97,236,175, 91, 37,131,178,246,221,102, 85, 92,228,181,153, 72,197, 71,102,114,205,210,186, 64, 40,
- 29,205,141,164, 65,113, 16,188, 47,159, 58, 12,250, 45, 22, 30,120, 15, 20,213,209, 63, 79,103, 5,119,188,131,142, 1,249, 66,
- 71,157, 98,244,129,125, 42,222, 23,110, 62, 30,144, 78,179,225, 24, 2,240,204,245,125,245, 27, 68, 86,226, 90,227,245, 42, 32,
- 6, 57,233,110,105,105,116, 66,211, 18,175, 40,134,252,156,190,185,159,111, 82, 30, 28, 10,248, 39,166,153,188,171,165, 70, 99,
-247, 83, 46,184, 19, 14,106, 46,184,249,176, 71, 73, 72,189, 0, 76, 16, 48,122,195,184,176, 66, 88,163,168,224, 58, 33,176, 9,
- 66,225,102, 49,133,239,125, 1, 38, 74, 75, 13,246, 48, 37, 32, 54,192, 2,117,176, 77,125, 53, 19, 16, 9, 95,153,204, 84,247,
-143,232,117, 92,207,216, 84,220, 82,118,198,230, 71,142,159, 7, 62,129, 93,116,153,240, 33, 43,242,226, 65, 48, 38, 50, 47,242,
-106,245, 64,209, 17, 87,109,171, 58,112,124, 62, 20, 90,221, 78,191,166, 51, 34,103,225,176,211,109,144, 59,220,173, 79,110, 2,
- 47,248,130,154, 10,105, 64,206,130, 69, 41, 9,142, 97, 92, 75,220,226,251, 16,244, 49, 74, 67,226, 36,200,168,208,135,173,219,
-228,116, 3, 29,208,150, 86,153,137, 77, 54,240,115, 5,184,173,115, 89, 77, 67,118,187, 0, 61, 33,201, 72,220,169, 45, 73,105,
- 34,162,201,200, 92,237,114, 57,210, 74, 29,154,236,116,219,242,137,146,157,125,195, 28, 4,101, 94,227, 92, 40,179,139, 49, 34,
-254, 79, 19, 76, 25,149,164,146, 5, 68,144,195, 35,122, 77,155,218, 36, 46,233,175,222,207,219,146,179,144, 14,184,207, 71, 80,
-220, 22,166,158, 23,186,241,138, 80,128,105,195, 36, 13, 17, 27, 88, 70,226,166,227, 94, 96, 63,139,130,113, 4,138,218,214,138,
- 38, 96, 9,140,179,107,247,145, 98, 25,203, 29, 3,205,122,183, 54, 33,155,200, 60, 24,240,140, 99,100, 73, 11, 91,167, 25,150,
- 46,152,100,207,101, 40,207,143,247,229,114,188, 96,241,130,169,194, 99, 13,160, 31,110,166,152,113,213, 38, 32,213,243, 95,197,
- 40, 22, 69,184, 14,137,153, 6, 73,207,138, 19, 32,184, 97,104,131,221, 43, 58, 75, 40,230,253,249,221, 92,190,122, 57,148,255,
-231,235,145, 28, 31,244,185,138,200,248, 30, 77,140,101, 1, 68, 63,246,180, 40,144,196,156,251,176,202, 64,177, 29,106,130, 93,
-208, 63,161,224,124, 37, 42,181,155,154, 46,228,115,253,222,159,125,249, 11,249,199,111,190,213,231, 66,159,167, 53,144,245, 7,
- 50,214,247,188,210,107,137, 29,115,133, 77,233, 52,180, 48, 56, 50,170, 26,238,225, 9,124, 30,134,141,122,101,112,124,184,199,
-224,189,253, 52,245,245, 92,204,105,137,201,198, 22, 76,252,152,212,225, 12,162, 16, 35,180,165, 48,195, 42,172, 84,176,242,156,
-110, 77, 31,157,150,178,250,223, 80,171, 20, 7,201, 21, 62,241, 50,234,175,129,192,178,204,206, 16, 14, 27, 86, 21,216,221,226,
-253, 21, 52,161, 17,233, 38,185,188, 60, 25,176,104,195,180, 47, 14, 13,240, 92,134,166, 87,126,169, 93, 33,232, 89,192,146,124,
-254,120,159,137,107,168,247, 96,127,208,145,156,160,197, 6, 87,131,224,187,195,129, 49,244, 21, 45,244,215,135,250,217, 48,166,
-183,120, 45,254,218, 15,103,191,162,225,225, 89,197, 61, 70,192,193,142,158,166, 39, 77,172,224,172,120, 60, 26, 14,217,124,192,
-213, 16, 13,194,147,167,207, 73, 99,123,245,108,200,238,218,216, 90,122, 54,103, 75,125,159,129,124,247,238,134,235, 68, 28,249,
- 94,211,248,234,183,147,141,217, 12,107,199, 62,104,233, 89,213,243,139,215, 6,213,239,221,229,189,158,151,161,196,249, 78,222,
-124, 24,201,231,207, 14, 25, 35,143,247,205,155, 30,231, 31,118,172,189, 47, 30,201,167,143, 6,242,211,237, 82, 59,236,142,140,
-180,138,188,184, 95,211,156, 70,202,194,133,143, 66, 62,123,235,109,230,118,171, 1, 53, 87,118,153, 77,135,132,197, 55,114, 85,
- 76,174,253,205,104,196, 88,137, 24,132,245, 3, 77,135,118,169,131, 29,181,240, 27, 14,248,188,160,176,193, 57,122,123,147,233,
-245, 63,100, 76, 66, 51,133,230, 48,206, 50, 83,107,146,143,212,185,138,143,236, 42, 31,244, 64,141,211, 91,229,242,162, 2, 82,
-249, 27, 19, 34,125,203, 26, 96,198,142, 9,187, 53,239,132, 43,197, 47, 86,219,174,242,149,123,181,110,178,143, 57,237, 79,145,
- 4,114,175,208,171,159,139, 2,235,210,179,220,132, 23, 50,223,209, 33, 65, 82,132,134, 74, 86,166,143,205, 68, 10,225,153,196,
- 56,191,177, 7,177,220,197, 94,240,143,201,206,154,228, 44, 64, 62, 24, 47,163,243,196, 97, 56,220,235, 81,202,117, 75,110,126,
-198,206, 9,221,111,214,194,254,179,109, 94,182, 24, 69,105,181,132, 61, 25,110, 62, 59,116,223,101, 65, 2, 23,175,131, 27, 68,
- 4,164,152,188, 35,146, 52, 28,182, 58, 20,137,182,224,189,221,165,110,120, 18, 48,121, 39,190, 51, 5,215,180, 2,186,161,224,
-128, 46, 61,190,207,192,121, 33,199, 85,203,141,141,167, 80,132,140, 57, 14,246,110,212, 71,145, 72,164, 24,119,115,229,209,176,
-117,198,108,147,242,154,110,138,162, 30, 67, 33, 80,183, 82,155,142,248,214,197,212,142, 10,115,204, 98,128,114,225,154, 74, 49,
- 42,242,132, 91,186, 13,166,237,188, 31,240, 11,244, 33, 15,108,106,178,115, 64, 26,169, 41, 30,100, 66, 55,247,168, 14, 86,144,
- 7,174,158,101, 21,122,130, 39,217, 19, 7,249,228,238,157, 46,206,138,175, 0,148, 9, 59,102,235,204,171, 42, 51,112,197, 62,
-163,198,101,181,169, 75, 37, 86, 82,123,169,251,239,166,237,163, 3,143,200,217, 78,140, 45,144, 58,114, 29, 65, 15,200,127,112,
-139, 33,146, 1, 4, 49,196, 33, 16, 4,177, 18,201, 8, 92,179,233,197,120, 50,151, 73, 39,148,243, 17,168,136, 77,114,196,161,
-191,143,125,183,237,190,133,146,145, 81,108, 19, 48, 84,213,133,235, 44, 0, 36,151,106,199, 10,132, 61,216, 36,129,243,143, 81,
-244, 65,194,211,192, 68, 45,190, 95, 84,252,184, 78,189,126,200,238, 32, 43, 33,156,210, 51,225, 30, 41,232, 52,183,166,133,176,
- 41, 58, 2, 95, 0,129,162,202, 86,185,178, 66,198,117, 67, 39,209,236,152,168,146,129, 21, 67,217,215,223,117, 51, 94,201,104,
- 54,147,117,106,134, 42,226,220, 98,128, 51, 13, 19, 81, 82, 13, 17,197, 16,118,234, 0, 41, 21,165, 21,251,227,233,202,117,228,
-253,252, 99,210,212, 52,156, 9,117, 5, 74,251,121,188,119, 36, 39, 19, 37, 10,205,238,213, 99, 71,181,250,170,213, 12, 43, 99,
-160,210,246,234,120, 45, 60, 87, 59,103,165, 52,249,103, 99, 50, 96,162,129, 11,252,167,243,165,252,247,159,246,104,189, 76,124,
-134,254, 31,104, 92,120,249,147,163,129,141,120,233, 86,150,152, 71, 54, 24, 35,113,193, 93,230,254,176,239,107,201,156,133, 19,
-204, 68,208,121,223,222,143,165,221,221,151,255,225,175,255, 74, 59,166, 41,175, 37, 98,207,225,175, 95,241, 61, 98,106,131, 66,
- 15, 43, 26,196, 16,136,163, 76,200,102,217,178, 72, 19,109, 12,240, 53, 48, 56,166,219,156,192, 55,170, 83,106, 18, 66,161, 88,
- 56, 71, 89,124,119, 28,251,138,110, 7, 10, 41,146, 68, 11, 69, 71,139, 5, 83,225,215, 23,199, 31, 6, 78,248,252, 20,244,170,
-168,191,166,185,108, 84, 79,182,192, 90,156, 5, 6, 96, 51,195,159,144, 49,140, 30,241,250, 94,127,188,156,107,146, 26, 82,160,
- 69, 60,214, 67,207, 34, 40, 32, 66, 54,160, 20, 43, 48, 22, 80,187,108,197,125,249,242,229, 19,126,199,197,221,130,138,119, 32,
-160, 44,118,250, 12,245,251,122,205, 15,229, 19,237,134,227,210,104,110,120,230, 49,110,190,213,179,113,165, 93,229,205,253,148,
- 49,159,163,112, 61,155,125,202,212, 6,156,136, 65,174, 27, 95,195,148, 11,241, 15, 5, 3,117, 61,146, 6, 81,222,128,227, 30,
- 12,219, 44, 50,238,166, 27,198,152,243,235,137,118,210, 35,217,174, 71, 90,236, 44,217,113, 3,163,128, 41, 73,191,221,213,215,
-223, 51, 31, 1, 40,229,233,181,129, 30, 59,198,248, 31,238, 23,210, 12,172, 65,216,176,232, 41,101,175, 85,178,187, 30,118, 33,
-187,189,213, 34, 61, 37, 70, 32,215, 66,249,101,116, 32,151,119, 51, 62,239,231, 55, 19, 74, 47,163,224, 0, 40, 22,207, 18, 85,
-236, 38, 96, 55, 52,249,236,146,133,164,247,109, 95,139, 13,224, 84,192,213,199,212,180,153, 24,152, 23,141,193, 64,139,204,201,
-198,128,112,149,183,193,158, 62,207,160, 78, 67,244, 13, 56, 28,196, 80, 52,125, 56,143, 88,115, 97, 84, 79, 1, 41,248,154, 76,
- 50, 45,112,208, 8,101, 92,177, 16,175, 25,212, 82,158, 54,190,172,187,223,138, 3, 29,132,181,154, 88, 69, 47,201, 61,128, 91,
-110,119,227, 14,243, 18,225,168,128, 84,138,208,193, 16, 12,194, 8, 24, 15, 35,159,168, 17,214,223, 7, 99, 0,188,241,245, 2,
-160,138, 64,244, 25,212, 27,219,225,161,171,100,252,136,142,100,183,109, 15, 53,110,252,146, 22,123, 49, 31,182, 22,221,202,240,
- 80,235,247,184,211, 28,209,183,238, 99,139,194, 15,193, 26,114,153, 24, 5,133,129,125, 70, 72, 55,226, 33,196, 67,247,244,236,
-136,227, 77, 0,158,240,217,240,250, 0,108, 32,224,163,202, 70,240,154,235,195, 99,134, 46, 91, 57, 58,104,209,137,168,201,145,
- 80,198, 46,166,178, 38,197,129, 44, 3,123, 31, 64,167,102,148,170, 13,169, 96, 85,249,211,103,100, 1,152,158, 47, 2, 84,154,
-110,248,243,149, 98,219, 2, 50,128,217,166,230, 61,110,150, 89,125,221,171,149, 8, 42,208,178, 34, 17,226, 97, 45,115, 71,179,
-219, 23,240,224, 96,173, 33, 78, 65,163,113, 67,244,145, 70,186,119,129, 85, 65,199,157, 51,194,147,137,125, 27,216, 38, 12, 93,
-154, 53,247, 49,184, 83, 64, 62,114,239, 42, 93,171, 54,115, 73,219, 74, 97,175,162,124,208,137,204, 65, 49,245, 57,178, 1, 78,
- 61, 90, 71,128, 77,220,246,183,112, 63,232,192,187,202, 0,235, 0,167,135,132,145,117, 66,134, 96,183,235,199,205, 83, 32, 44,
-124, 42,234, 1,170,235,204,247, 93, 53,250, 30,175,233,244, 69,220, 79,118, 11, 40, 16,169,177,222,208, 46,160, 69,196, 56,118,
-120,122, 23,184,211, 70, 49,137, 98,173,162,228, 80,254, 85,223, 51, 18,119,160,157,201,146,221,127, 78,218,201,155,155, 37,119,
-160,211,133, 81, 38,231,147, 41,223, 51,170,235,128, 18,164, 91, 68, 22,237,162,155, 76, 8, 80,165,163, 75,223,165,117, 92, 37,
-165,151,115,147,195,213,247,190,218,206, 61,113, 52,216,149, 96,212, 11,207, 0,112,112,209,198, 0, 95,130,206, 52, 36,159,189,
- 77,222, 49, 56,239, 16, 57,105, 5,166,218,134,238, 15,215, 99,101, 50, 93, 92,185, 20,181, 84,127,193,226, 9, 93,170,129,221,
- 50, 82,220,176,130,128,253, 39, 10,100,227,234,102, 92,229, 84, 2, 33,212, 78, 72,154,228,168,227,218,238, 13,250,236, 38, 41,
- 13,155,151,228,245, 30,239, 15,216, 69, 87,114,200,247,227,177,111,132,109,138,115, 53, 89, 16,113, 95, 21, 93, 0,103,113, 29,
-147, 85, 69, 87,233,241,165,244,174,179,112,193,167, 88,139,239, 62,157,226, 96, 91,140,142, 58,140,108, 90,182,208, 78, 21,157,
- 13,120,230,163, 69, 65,206, 58,132, 68, 16,112,247, 53,169, 76, 53, 81,194,161, 16,122,224,232,244, 18,160,169, 67, 3,147, 97,
-202, 3, 80,215,118, 27,177,248, 26,232,103,194,253,218,110, 77,244, 9,126,230,215,183,247,114,118,124, 40,191,248,226, 19,249,
- 63,254,243,239, 88,116,254,249,199,107, 98, 87,108, 10,149,113, 98,129,142, 26,168,107,220,119, 48, 26,112, 79,169,231,224,116,
- 50,158, 89,189,133, 24,243,195, 82,147,116, 46, 96, 86, 66, 19, 21, 66, 35,129,216,182, 3, 69, 49, 93,201,227,227, 99,249,242,
-211,231,114,160,113, 40,164,123,228, 70,254,254,155,159,104,167, 74,100, 60,234,118,172,183,160, 86,135,198, 40,249, 88, 42, 89,
-106,109, 14,220,205, 40, 48,111,242,210,233, 89, 80, 95,155,175,150, 60, 83, 0, 2,134,174, 9, 82,184,220, 44, 68, 95,218,237,
-146,202,132,136,159, 6,218,202,228,251,243,145, 60,215, 78,181,165, 69, 38, 52,240, 55,152,132,166, 91,130, 39,183,155,190, 60,
-121,116,166, 69, 66, 79,222,159,191,151,168, 92,107, 2,157,115,130,194, 81,190, 54, 79,135,218, 88,225,252, 83,252, 70, 43,206,
-235,233,154,137,154,171, 52, 40, 11,114,146,152,179, 72,132,223, 6,124, 44,128,231, 64,243, 3, 6, 3,138, 38, 52, 32,152, 88,
- 73, 60,208,179,174, 9,238,234,156,215,149, 56,150, 50, 34,127, 29,236, 7,172, 39, 96, 48,115, 51, 53,167, 58, 80, 85, 83, 87,
- 47,157,211,172, 75, 8, 72,197,234, 99,182,210, 51,187, 25, 75,191,255, 66,207, 17,164,204, 23,122,166,255, 63,170,222,179, 73,
-182,235,202, 18,219,215,165,207,242,254,121, 88, 2, 4, 57,109,200,142, 80,171, 99,102, 66, 49, 17,250, 32,125, 29,253, 30,253,
- 42, 73,161, 24, 69,168,165,142, 25,170,155,100,179, 73,130, 32,240,240,124,121,159, 89, 89,233,174,211, 94,107,239,115,235, 17,
-221, 32,128,122, 85,149,215,156,115,182, 91,166, 77, 48, 95, 93,117,164,223, 71,161, 49,150, 51,189,159, 44,182, 4, 10, 2, 63,
-147,169,141,177,241, 46,239,244, 62,218, 37,198,102, 21, 99,224,246, 74,199,198, 74,121,238,214,171, 41,239, 21, 96, 91, 20,113,
-121,148, 56,126, 41,227,123, 66, 82,140,117,141,189, 49,157,207,248,117,156,173, 73, 63,102,135, 5,103, 57, 94, 43,228,212, 71,
-186, 79,191, 63,154,200,215, 79, 6, 76, 14, 83,148,241,129,206,198,131, 9, 85,233, 71,214,149,134, 82, 76, 57,159, 3, 71,178,
-118, 29, 95,218,223, 85, 53, 51,101,180, 71, 0,254,192,197, 66, 72, 35,146,168,113,145,193, 33,142,138, 6,242,127,179,249,146,
-237, 91,108, 56,204,233, 66, 11, 29,106, 89,200,112, 54,245, 5, 83,193,139,243,218,146,180, 24,102, 37,250,231, 81,109, 7, 65,
-168,184,241,146, 98, 15, 22,216,232, 80,129, 66, 53,140,246, 3,218,225,116, 10,186,159,113, 12, 64,149, 37,240,102,165,116,157,
-115, 33, 56, 8, 70, 0,221,182,169,214, 33,192,190, 63,190,226, 53,206,168, 28,215,226, 33,136, 32, 3,126,184,129,163,108,145,
- 33,195,194, 27,153, 95, 90, 5,157, 56,246, 32,246, 57, 81, 25,176, 9, 28, 63, 20, 31, 33,229,171, 70, 58, 54,114,169,210, 0,
- 10,128, 90,157,129,181,146,134,123,110,188,240,244, 97,131,213,214, 98, 71, 27, 42,200,179, 62, 84, 50, 53, 43,104,147,174, 45,
- 26, 1, 8,202,162,118, 83, 55, 10,241,241, 72,105, 63, 35,174,172,150,231,198,159, 14,188,245, 96,113, 19, 52,225,113, 88,148,
-142,192,143,228, 1, 76,105,109,110,251,119,204, 29, 37, 14, 93,154,186,153, 79,134,201, 14, 81,223,105,212, 80, 11, 73,253, 72,
- 82, 7, 66,105,128,237, 56,250,217,231,236,145,207,206, 57, 71, 79,109,230,198,182,175, 4, 53,193,210, 51,216,192, 95,143,131,
-127,112,131,229, 96, 37,142, 10,110,185,124, 72, 96,220, 42,152,186,252,174, 37,128, 67, 2, 65, 27,246,145, 63,121,186,197,182,
-238,255,247,231, 99,125,143, 54,167,159,235, 33, 55,160,220,163,233,199,111, 12,219, 60, 0,177,246,233, 39,206, 68,170,205,170,
- 7,116,168,101,110,218,255,176,222,172,171,133, 81,156, 72,203,203,154, 36,249,222, 77, 58, 80, 33, 94,223,153,177, 74,236,218,
-223,120, 6,101,189, 36, 8, 52,109,168,161,250, 94, 97, 36, 1,185,213, 86, 76,164, 45,158, 65, 75,147,224,173,172,207,117,181,
-167, 65, 20,239,224,245,241, 37, 43,104,142, 27,144,252, 96, 70, 43, 17, 15, 18,170, 17,198,198,223,173,107, 75,176, 48,135,173,
-216,173,138,153,152, 34, 81, 21,151,163, 53, 32,105,212, 0, 67,177,134, 16, 84,113,219,148,238,188, 55,164, 53, 59, 17,222, 21,
-129, 66, 24,130, 62, 14, 96, 84,206, 6,138,180, 78, 22, 91,230, 14, 6,236,131,214,166, 85, 53, 36,111, 99,151,156, 38, 40,147,
- 58,227, 41,247, 57,214,255,210, 29,182, 10,175, 76,209, 6,197,185,128, 4, 27, 58,249, 86,249,207,152,176, 97,198,142,243,198,
- 64,154,149,252,112, 58,145,191,253,114, 67,254,219,159,174,229,249,206,138, 30,208,119,124,231, 48,157, 89, 46,187, 76,138,208,
-105, 33, 18, 26, 40,255,161,205, 45, 47,181,146,132, 38, 67,202,247, 42, 68, 48,143,198,119,154,236, 45,116, 45,116,101,115,101,
-133,221,137,249,162, 50,245,188, 22,196, 79, 38,188,214,136,213,103,151, 28,250,162,130, 68,246,140,134, 70, 97,158, 30,244,216,
- 43,253, 89, 60,247,187,201,152, 85, 58,133,133, 92,222,181,114, 71, 46,208, 16,251,155,123, 60, 23,223,159, 93,201,229,120, 38,
-219, 27, 3, 6,238, 23, 79,118, 40, 30, 4,133, 62,136, 16, 81,223, 3,107, 36,207,233,176, 73, 0, 30,206,137,178,108, 70,153,
- 68,107,195, 96,107, 0,250,228,130,120, 27,116,158,128, 47,192,247,188, 63,187,150,103,219,107,124, 15, 75, 87,104, 68, 77,144,
-106,245,219, 74,156,254,137, 36,179,101,182,211, 39,122, 6, 30,108,175,208, 9,115,190,208,130,104,150,211,211, 28,149, 56, 20,
-246,126,120, 45,242,253, 15,127,212, 63,155,178,253,143, 4, 62,113,125,145,157,245,117,130, 40, 49,102, 8,138,142,181,143, 93,
- 77,232, 42,110, 64,163, 88, 32, 24, 19,181, 8,182, 52,132,123,196, 78,155, 1, 31,119,119,122, 76,124,129, 57, 5,232, 19, 22,
-195, 66,143,241, 53,202, 59, 47, 40, 1,157,154,248,140,190,203,227,155,153, 6,249,142, 84,173,154, 60,113, 99, 38, 45,152,208,
-194,205, 48,169,205,147,253,174,104,201,160,154,202,219,227,185,124,245, 98,135,239, 97,123,181,103, 50,206,122,158,193,143, 1,
- 49, 2,251, 29, 22,168,192, 13,220,107, 81, 64,179,152,165,129, 93,177,135, 7,109, 51,137,186,229, 84,193, 4,184,208, 61,130,
- 12, 48,126,231,248,244,142, 24, 42, 4,111, 22, 0, 16,161,209,132, 15,227, 43, 33,131,202,218,247,232, 74, 97,188, 49,153, 78,
-205,171, 66,175,251, 78,215, 29,238,117, 99,117, 32, 95, 62,214,245,122,176,222,101,245,140,172, 7,243,224, 68, 15, 25,180,174,
- 19, 63,148,179,212,208,220, 8,108,109, 23, 47, 64, 38,156,197, 22, 96,251, 45, 3,202,117,188, 50,198, 13, 34, 0,178,245,173,
- 47,143,254,226,105, 74,160, 20, 2, 34,140, 50,114, 15, 48, 8, 34,168,192, 17, 36,129, 10,196,194,228,188,217, 53,157,113, 56,
-175,232,230,192,107,163,158,180,183,186, 22,185, 37, 29, 68, 29,150,198,111,198,207, 32, 75, 71,235,220,204,230,151,228,146,150,
- 4,231,125,220,250,143, 29, 20, 87, 53,221,136,194,169,116, 81,240,217,214, 7, 62,154,207,220, 89,101, 73,123, 66,163,234, 57,
- 8, 16, 96, 47,231,126,227,160, 14,129,166, 40, 31,212,236, 42,169, 26,204, 64, 19,140,235, 7, 26, 30,238,147,252,122,231, 90,
- 7,225,138,202, 71, 26, 38, 94, 35, 78,223,179,182, 94,230,148,183, 32, 18, 66,222,117, 94,184,254,188, 80, 47,216, 28,225,172,
- 13,135,182, 94,212, 73,154, 25,102,205, 46,140,101,235, 70,159,115, 37, 61,199, 69,196, 62,111, 14, 12,134, 58, 28,231,252,111,
-225, 24,196,100, 96, 43, 90,167,214,110,181,107, 84,197,202, 11, 48, 11,153,137, 59,183, 25,154, 59,114,224, 75,210,180,190,203,
-162,108,220, 90, 62,182,112, 69,181,219,142, 91,156,201,199,174,109,157, 80,241,225, 97, 94,111,244,185,132, 85, 13, 42,170,216,
-159,161, 56,199,159,207,252, 35,189,240,240, 25, 78,139, 55,158, 42, 92,179, 64,235,169, 12, 20,182,173,149, 67,175,147, 16,140,
-242,108,111,131, 62,197,175,207,205, 31, 28, 20, 28, 28, 36,216, 3, 89,100, 0,189,161,102,253,173,164, 71,124,195, 98,217, 53,
- 51, 13, 61,220,119, 54,134, 68,197,178,154,208, 10, 47,102, 7,166,228,124, 29,129, 21,213, 30, 42,252,159,127,118,160,149,206,
-185,124,247,190, 32,192,231, 31,190,249, 68,254,143,127,254, 65,139,239,216,156,174, 98, 91, 55, 72, 82, 41,145,156,197,174,163,
- 96,224, 84,236,165, 37,223,103,196,196,130, 84, 55,104, 69,107,160,153,232, 97, 90, 83, 86, 57,179,118,117,232,122,224,186,251,
- 61,119,212, 51,118, 65,228, 29,146, 49,112, 34,179, 7,128,232,114, 97, 24, 14, 92, 43,194, 16, 80,225,225,224,133,245, 44,102,
-133,156,251, 83,151, 31,250,244, 33,216,155, 33, 76,236, 34, 50, 43,189, 61, 6, 96,188,175, 13, 13,152,120, 38,184, 70,232,180,
- 19,229, 11, 42,108,150, 56,167,187,148,139,209,221,131,205,174,235,254,207,150, 30,168, 28,177,142,202, 23, 93,131,201,108, 70,
-112, 26, 48, 15, 84,174,211,196, 98,137,162,132,162, 66, 48, 26,185,149, 95,253,208,146,255,225,111,246,136, 40, 71,251,115, 69,
- 19,183,171,177,121,202, 67,213,110,103,125, 32, 27, 26, 24,113, 15, 55,154,160,224,190,123,248,250,206, 58,145,206, 96, 56,128,
-145, 66, 51,142, 8, 21, 56, 18,149,169,236,239,239,200,139,167, 79,229, 87,191,253,189,172,174,172, 57,232, 47,246, 53,102,193,
- 6,231,225,253,100,233,103,165,143, 27,163, 32,123, 45,252,204,204, 41, 82, 53,248,228,208,221, 72,204,158, 22, 99, 75,156, 93,
- 64,137,163,203, 7,140, 67, 81,229,242,233,163,182,126, 94,143,221, 23,152,144,188, 63,188,144,163,243, 75,126, 38, 52,211,225,
-238,151,143,150, 76, 90,106,253,189, 56,111,193,119, 3,155, 33,136,119, 32,193,186, 95,132, 46,155,225,156, 46,110,108,100,130,
- 14,228,227,173, 53,170,146, 65,171, 97, 4,131,170,202,146,254,209,245, 21,207, 44, 26,249,232,239,236,179,240, 41,184,222,215,
-245,221, 34,177,133,158, 62,206,119,116, 80,176,207,222,252,248,157,116,234, 57,113, 22, 4, 72, 58,246,233, 90,207,212,247,103,
-151,236,244,196, 14,118,230,217, 92,186,231, 68, 98, 9, 93, 44, 15, 66, 47,117, 29,196,124,150, 68,160, 79,177, 14, 53,113,206,
- 36,161,134, 9,146,210,191,249,217,207,116, 15,106,130, 62, 48, 37, 69,252,117,124, 57,146, 63,190, 58,150,108,173,195, 46,109,
- 43, 53,221,133, 43, 32, 41, 33,227,186, 98,170,157, 56,103,218,117, 74,172, 4, 20,253,128,232,159, 94, 22,242,120,103, 85,214,
-187,177,188, 58,186,145,167, 59, 3,158,155, 27,107, 67,222,231, 87,219, 3,253,249,190,124,184, 52,197,197,199,154,224,188, 60,
-188, 49, 63,138,200,128,196, 19, 13,242,175,207,198,178,183,210,161,114,221, 88,147, 11,224,117, 62,217,239,112, 93, 35,169,217,
-129, 35,233, 34,116, 85, 42,121,119,124,196,209, 12,149,233,216,105,140,200,144, 34,215, 29,109,125, 20, 80,109, 3,139, 98, 31,
- 32, 28,156, 92,163,107,204,115,214,209,230, 52,140, 55, 39, 50, 60,192, 54,205, 69, 12,142, 31, 16,161,179,133,121,251,146,186,
-164, 31,134,118, 31, 22, 2, 77,219,227,200, 57,217, 5, 3, 53, 54, 1,218, 26,248,105,220,252,146,115, 47,243, 95, 70,149,110,
-115, 80,145,187,235,137,161,203,225,214, 4,170, 12,231,114, 75, 30,202, 8,102, 87,227, 43, 46,110,100,248, 84,223,162, 93,235,
-162,169,120, 77,145, 45,107,178,224,241, 98, 34,177,222, 92,228,146,174,104, 25, 85, 81,233, 51,125,171,230,176,153,226,180,106,
- 0, 87, 9,103,107, 38,213,154,250,188, 24,115,155,112, 24,198, 33,152,251,207,135,150,114,229,165, 33,238, 21,109,186, 42,168,
- 16, 57,242,223, 12, 98, 18,175, 50,189,114,116,173,120,252,110,102,120, 78,177, 74, 28, 40, 67, 78,185, 30,252,152,125,165,174,
-206, 86,184,164, 45, 54,133,113, 71, 31,252,146, 19, 95, 60,134,250, 55, 41,206,152,124, 97, 3, 13,102, 89,171,209,108,199,243,
- 41, 97,188,160,135, 82,236,212, 65, 80,128, 76, 25,206,102,229,228,201, 87, 62,167, 22,123,238, 38, 25, 91,124, 36,193, 91,123,
-146, 35, 14, 82,115,227,141,210, 36,114, 27,203,211,128,118, 18,115,247, 74,189,165, 79, 20,253, 98, 78,116,120,248,126,252, 34,
- 50, 12, 60,200,132, 57,121,234,247, 65, 35, 24,118, 61,106, 71,199,198, 46,106,210,250, 8, 21, 15,219, 94, 23,223,137,226,134,
- 54, 21, 70, 71,165,203,220,226,235,171,154,237,130,198,215, 74,187, 46, 0, 84,105, 96, 95,145,141,149, 30,103,199, 53,147,164,
- 88, 46,231,200,232,183,109, 94, 8,148,176,102,233,248, 30, 58, 96, 38,230,248,135,164,116,109,213, 18,224,149, 65,151, 6, 20,
-104,241,159,104, 16, 57, 27,221,152,203, 86, 98, 35,159, 34,143,184,254,239,245, 29,255,228,241, 42, 5, 57, 86, 53,168,191, 59,
-191, 53,197, 49,159, 57, 67,209, 13,109,195, 27, 40,197, 57, 69, 38,105,121, 27, 21, 1, 14,158,222, 45, 3,234, 45,233, 28, 86,
- 49, 8,227, 21,229, 14,238, 99,210, 75, 65, 15,241,118,190, 9,212,148,165, 5, 25,241, 68, 21,123, 29,200,103,236, 99,180, 43,
-183,214, 76, 41,110, 85,239,101,103,189, 79, 87, 57,204,233,239,220, 59, 30, 65,103, 21,173,111,221,255, 72, 58,176,183,241,236,
- 81,156,148, 52,132,233,178, 2, 7, 19, 98,164,213,244,187,163, 11, 38, 61, 24, 39, 77, 53,248, 67,153,250,250,236,134, 73,130,
- 33,239,243, 70,195,194, 42,180,178,209,191, 14, 8,120, 36,226, 7, 91,230,152,118,168, 65, 12,231, 12, 53,249,139, 69,192, 90,
-113, 20, 51,119, 85,196, 44,179,253, 51,209,115,251,237,225, 72,182,134,177,188, 60,185,151,237,149, 22,233,108,216,159,215,154,
- 92,172,233, 59,143,245,190,128, 98,231, 88, 46, 53,135,196, 76,139, 9,208,135,122,253,204,204, 88,174,110,101, 13, 29, 26,253,
-207,171,107, 48, 29, 42,249,143,255,254,191,147,171,203, 83,172, 72, 30,186,169, 96, 20, 80, 55, 50,203, 84,131, 75,173,251,133,
-179,175, 69, 60, 80, 78,245, 63,176, 85, 64,125,194,154, 2,205, 45,236,105,125,177, 28, 35,101, 48,252,208,247, 59, 33,221, 76,
-247, 85,187,197,119,131, 25,235,209,201,141,108,111, 14,100, 79,171,208,191,254,233, 83,185,208,235,249,243,235, 15, 90,157,174,
- 82, 95,129,216, 2,232,209, 87,181,203, 59, 71,126,141, 65, 61,212, 18, 46,179, 76, 53,204, 64, 20, 27,218, 28,107, 1, 84, 88,
- 4,225, 53, 77,110, 54,134, 29, 3, 77,234,117,111,233,186, 7,133,115,161,207, 14, 34, 45,167, 55, 35,122,156,143,238,140, 33,
-132,132,246,209,206,138,124, 56,187,147, 46, 70, 30,117, 91,190,249,250,103,162,191,130,122,235,253,110, 74, 60, 20,139, 58, 88,
- 4,223,142,229, 79,111,143,249, 30,130,229, 51, 94, 37, 42, 87,172, 63, 2,139,233,118,102,231, 40,198, 99,192, 66,225, 37, 33,
-209,198, 94,235, 80,113, 17, 82,206, 53,181,221,199,247,186,166,230,119,186, 7,245,250, 7, 96, 54,204,229, 86, 19, 82,236,215,
- 99,141, 53,176, 79,125,125,114,203,119,176,149,117, 13,244,170,235, 20,186,237, 67,189,198,104,164,107,168,138, 25,187, 38,243,
-137,236,238,236,235,154,138,228, 79,239, 78,229,147,189, 53,221,167, 8,220, 3,174,195, 45, 93, 59,185, 38, 90, 80,166,163,170,
-164, 38, 56, 71,103, 35,182,242,177, 95,231,110, 42,134,113, 30,214,241,167,219, 61,185,190, 47,201,237,135,121,210,238,106,151,
-166, 65,135,151,119,236, 60,175, 14,250,116, 44, 77,211,146,157,159, 33,227,171,157, 89,112,245, 59,187,186,226, 58, 77,152,240,
-104,177,176, 52, 43,238,245,225,138,131,186,245, 28,185,152,153,184, 38, 14, 9,182, 91,150, 54, 15,198, 3,196, 12, 13, 63, 92,
-151, 49,219, 2,226,244, 37,108, 90, 84, 10,176,238,157,232, 98,228, 1,142, 22,222,114, 97,114,143,244, 70,118,254,240, 71,115,
-247, 32,132,192,223, 61, 95, 52,200,248,165,131,140, 82,151,227,203, 60, 64, 83, 84,164, 50,209, 0,206, 88,128, 46,214, 27, 70,
-102,146,187,190, 49,190, 7, 55,181, 32,192, 32,117,186, 26,218, 22, 61,215, 91,215, 3,177,206,154,106, 56, 4,182, 32, 56, 18,
- 84,200,164,142, 28, 85, 31,125,132,196, 20,151, 74,181,205,197, 10,192,221,219, 34, 15,194, 12,152,148, 81,204,205,175,183,221,
-110,130,122,237,227,130,198, 23,213,149,218, 36,254, 75, 33,159, 96,247, 88,123,245,206, 0, 94, 57, 61, 46,169, 27,103, 54, 19,
-142, 40,221,157, 78, 19,128,202,158, 23, 43,249,196,164, 70, 9, 54, 92,212,158,104,148,142, 72,183,119, 65,192,143,223, 25, 2,
- 12,233,124,169, 81,190,146, 36,232, 18, 24, 88,195,208,232,133, 43,194,185,203, 25, 90,168, 78,205,138,189,205,250, 80, 29, 99,
- 86,191,112,240, 77,202,174, 0,174, 57,140,117,130,180, 47, 70, 54,105,154, 53, 52,192,197,188, 16,121,208, 34,106,172, 95, 3,
-146,158, 93, 11, 13, 86,185,211, 12, 77,245,175, 34, 47, 53, 14, 74,125,224,106,139,169,130,217,232, 3,169, 86,238,221,137,212,
-186, 5,110, 60,211,161, 40, 68,226,109,205,148,224, 28,172, 39,124,125,216, 75,117,195,247,216, 17,121,127,122, 45,215,211, 37,
-133, 57, 48,107, 71, 37, 9,112, 90,167,114, 17,141, 59,173,248,244,208, 99, 59,178,142, 93,206,194, 36, 32,233,241, 96,243, 5,
- 25, 80, 19,189,242, 61,225, 66, 73, 62,114,192, 65, 60,211, 8,113, 61,158,112, 13, 35,161,160, 6,252,221,140,135, 48,116,196,
-209,242, 47,110,167,114,231, 84,179,132,179,223,164, 1,152,150, 60,108,151,110,227,107,157,155,207,159, 29,200,167, 79,247,184,
- 94,209, 18,127,126,176,197,185,101,225, 73,123, 27,215,221,237, 11,154,152,120,237,168,182, 8, 32,210, 67,242,187, 87, 71,250,
- 60, 98, 25,141,167, 60,232, 87,183, 6,124, 39,179,241,130,173,218, 82,127,224,244,106,194,238,200,244,232, 86, 19,147,156,244,
-173,241,248,142,216, 16, 24,126, 32,209,193,202,192,140, 57, 32,230,209,185,107,116, 42,107,113, 75,225,170,145,209, 44,202,162,
-145,128,109,246,205, 71,178,211, 28, 7,214, 21, 65,117,103, 87, 55, 92,203,104,129, 47,220,140,168,223,234, 54, 35, 67,252, 55,
-186,134,133,211, 42,241,215, 31, 14,103,242, 15, 95,244,228,251,163, 59, 38, 36, 0, 75,161,203,134,174, 9, 52,180,161, 21, 0,
-117, 52, 80, 11,209,130,205,218, 64,111,207, 56,186,184, 27,143, 25,140,150,115, 83,223,235, 38, 37, 5,157,222, 29,157,200, 79,
- 62,123, 38, 7,251, 7,242,227,235, 87,141,120, 78, 69,108, 67,155,126, 2, 80, 81,131,234, 95,153,154, 78, 3, 18, 23,204, 96,
-209,186,198, 30, 12, 12, 29, 50, 63,160,254,150,216,248,170,198,153,168,123,179,227,157,179,235,241,173, 60,218,221,225,222, 68,
- 87, 6, 86,167,184, 38,180,191,145, 64,125,245,201, 1, 89, 10,183,183,119,210,134,160, 85, 91,131, 93,199, 12,103, 48,130,232,
-105, 50, 49,115, 27,228,194,147, 37,195, 17,153, 57, 16, 3,242,250, 42,129,145,216,243, 39,215, 99,217,172, 86,248,174, 32,161,
-139,231,133,231, 79, 37,203,194, 80,228, 72,248,206,142,174,169,177, 14, 68, 59,228,132, 49,218, 1,128,237,241,238,144,193,141,
- 46,133,189,117,233,173,173,201,225,233,137,172,107,144,115, 86, 47, 41,112,159, 60, 57,144, 47,159,239,107, 18,112, 67,186, 33,
- 76, 82, 0, 24, 69, 64, 92,194,177, 77,171,241,201,210, 10, 45,130,206,116, 61,153,243,103,198,209, 84, 97,146, 36,156, 41,175,
-173, 38, 84, 12,196, 88,245,106,188,148,223,126,119, 46,167,199,175,101, 14, 32,104,219,172,191,159,238,237,200, 47, 62,223,145,
-173,123, 67,200, 79,230, 37,249,230, 72,128,240,251,209,233,250,234,160, 35,135,247, 61,189,198,182,140, 39, 71, 46,238,163,239,
- 78,218, 76, 62, 14,118, 52,185,157, 85,178, 57, 76, 41, 82,116,125, 87,104,114, 51, 99, 71, 12, 35,148,171,145, 38,130, 0,102,
- 10,102,245,133, 38, 70, 45, 77, 22, 18,142,109,254,245,205,149,252, 76, 63,239, 28,186,253,122, 95,199,215,247,148,178, 69,165,
- 62,165,108,108,171, 49,173,170,131, 98,106,100,234,118,212, 62,240,216,136,142, 52,253, 4, 90,152,243,247,101,119,107, 75,175,
-117, 66,172, 4,177,104, 31, 46, 39,110, 87, 57,243, 42, 29,217,197,178,161,146,132, 54, 53, 43, 59, 7, 88, 45, 89, 29,250,124,
- 59, 73,188,125,234,122,205,203,202, 3,150, 9,193,160, 5, 28, 28,205,146, 64,167,113,245, 53,108,255,174,171,138, 73,168,254,
- 28, 52, 99,179,252,140, 7, 50, 22,106, 70,195,138,177,101,109, 62,139, 78,211,172,161, 85,113,230, 86, 22,141,101, 99,176,222,
-108,183,218,174, 14, 23, 27,160,195,171, 74, 86, 78,164, 22,229, 68,248,253,133,111,184,207,129,209, 50, 12, 28,116, 6, 40,136,
-129,128,195,239, 34, 37,224,150, 82, 44,135, 46,104, 45,107,187, 59, 56, 44, 14,178,180, 14,138,137,216, 65,174, 93,212,197, 0,
-130, 76,160,120, 64,155,242, 84,252,145, 69,226,199,109,112, 0, 65, 76,188,195,130,177,221,179, 57, 92,133,231, 85, 57,242, 41,
- 77, 12,213, 28,116,251,173, 82, 45,154,175,197,141,212,175, 85, 52, 6, 34, 75, 93, 18,215,228,123,255,162,205, 29,187,110,180,
-139,104,176,186,171,235,198,128, 70, 92, 32, 40,112,160, 13, 69, 95,217, 28,219,169,102,185, 3,218,204, 17,175,104,168,110,193,
-219,153,243, 67,231, 41, 99, 68, 80, 39, 38,178,192,132, 7, 45,100,239,108, 24, 53,198, 0, 64,137,235,221, 3,245,205,214,236,
-194,112, 19,214, 85, 17,119,202, 11,237,248,152,235, 14,137,198,138, 6, 3,180,252, 86, 59, 86,153,232,145,161, 75,183,226,218,
-120,127,122, 67, 0,206,149,131,169, 74,189,110,184,188, 33, 48,157, 46, 76, 91,189,240,206,200,141,174,171,221, 77, 61,176,186,
-149,124, 56, 57,215,131,101, 34,159,233, 33,181,186,210,231, 76, 13, 30,236,120,163,161,251, 16,128, 74,192,137,180, 50, 99, 94,
- 80,144, 66,131,105,143,222,201,150,224, 33,192,100,196, 21,212, 90,245,172,203, 87,207, 31,243,190,128,152, 93, 27,154, 14,244,
-254,214,154,236,109,174,176,163, 96,157, 14,145,179,203, 91, 38, 54, 27,250,103,122,218,200,248,232, 92,127,102,206, 22,243,205,
-245,157,140,230, 57, 17,211, 8, 76,232,122,140,198,247,228,212, 99,102, 57,163,146,153,153,223, 32,129, 65,187, 48,114,149,189,
-218,215, 5,173,122,147,136,115,118,226, 12,230,182,199,112, 31,133,169,132, 24,211,162,182,228, 50,117, 53,196,208,213, 67,119,
- 64, 28,101,140,245,148,147,162,104, 99,148, 90, 28,252, 89, 27, 30, 37,120, 3,132, 22,190, 4, 99, 37, 84,224,100, 60,152,198,
- 66,232,220, 88, 81,144, 62,112,219,163,218,218,191,150, 91,201,225, 45, 62,107, 40,192, 22,162,165,190,162,193, 3,109,102, 96,
- 11,238, 70, 99, 57,130,218, 27,248,189, 56,216,121,253, 9,171, 65,116,249,114,125, 95,253,205,190,172,233,249,118,167, 9, 24,
- 90,191,235, 43,107,114,122,118, 65, 93,254, 71,143, 30,203,119, 63,252,153,221, 62,220, 63, 62, 23, 64, 65,240,199,251, 61,116,
- 32, 38, 50,243,226, 5,114,173,149, 59, 22,146, 47, 30,155,154,159, 89,167, 26,189,139,142,129, 38, 98,192,132, 21, 10,112,216,
-107,247,148,148,182,106,182, 75,181, 67,147, 9, 29, 77,230,242,228,209,150,124,121,251, 88,254,233,215,223, 74,189,180, 14, 6,
-175, 3,137, 52,193,167,117, 67, 77,166,253, 45,138, 56, 87, 80, 4,200,114,107,125,141,103, 42,230,185,226, 45,255,195,139,107,
- 13,176,123,156, 9,227,154,219,157, 33,247, 69,233,122, 3, 65,163, 3,221,134,204, 5,192,110, 53, 25, 4,158, 2,149,246,250,
-106, 79,110, 70, 51, 57,185,184,212, 0,127,174,123,226, 78,174,122, 3,235,128,234,130,157, 76, 52, 9,185, 57,227,218,199,122,
-248,226,201,174,116, 32,209, 26,213,172,124,161,189,112,113, 51, 49,192,160,143,139,192,196, 64, 70,112, 63, 51, 87, 60,172, 41,
-236, 33,140,236,128, 19,194,152, 1,239,231,209,163,175, 77,119, 62,137, 88,209, 35,177,169,168, 21,176,148,221,181, 62,215,189,
- 49, 27,108,141,125,178, 59,224,249, 0,188, 2,198,197, 16, 18,130,143,195,103,187, 90,137, 35, 89,215,179,125, 79,147,158, 87,
-135, 39,114,176, 93,202,135,227,115,217,254,234,169, 60,210,202,187,164,243,103, 33,199,154,236, 98, 61,181, 29,239,114,118, 61,
-227, 26, 62,191,157,177,229,222,114,154,242, 63,126,123, 66, 16, 43,158, 61,156,245,238,167, 37,147, 43,226, 77,114, 77, 80,181,
- 58, 7, 38,228,234,230,150, 9, 76,167,101,127, 35,177, 31,221, 77,200,158,218, 94, 95,215, 64,190,201,119,135,239, 71,140,218,
-209,255,238,245,123, 90,209,223, 73,138,121, 13,173, 68,163,212,221,184, 92, 48, 38,112,213,179, 7,208,147, 89,247,197, 13, 95,
- 61,245,214, 49,199,150, 13, 77,201, 54,183,209,154,162, 70, 76, 6, 85, 67,233,186,225,248,247,194, 93,225,184,216, 17, 32, 92,
- 51, 61,246,182,121, 16,132,161,187,147,183, 78,241, 53,131,253, 7,207,229,136, 25, 95, 16,187, 9,194,250, 4,124,165,102, 81,
-215,136,225, 68, 15,115,196, 16,192, 88,121, 74, 48,172,241, 3,161, 9,232,122,111,153, 31,202,129, 63, 31, 42, 9,228,110, 64,
- 78, 58,104,200, 42,104, 75, 40,240, 51,214,250,125,168, 64,177, 98,178, 44,107, 2, 82,237,246,131, 69, 94, 60,252,172,207,160,
-241,125, 1, 20,196, 68,161,178, 86,170, 51,173,205, 78, 54, 88,205, 58,205,204, 20,236, 93,154,221, 91,152,141,211, 85,240, 53,
-119,214, 64,232, 69, 32,120, 46,102, 83,111, 99, 71,141,112, 75, 64,178, 67, 35,222,186, 27, 69, 83,145, 7,250,152,153,254,216,
-156,219,196,136, 12, 36, 88,184,170,158, 17,144,236,185, 33,184,227,239, 44,171,154, 81, 3,159, 65,110, 24,131, 5, 3, 74,217,
-100, 82,181,143, 48,248,185, 14, 96, 12,193, 63, 36, 38,129, 82,105,137,162, 37,103,176,130,173, 67,114,227, 7,125,112,127, 11,
-110,128,198,156,168, 73, 45,130,148,231, 6, 0, 52,160, 85,105, 48, 43,242,150,188, 61,189, 37,218,123,186,116, 65,159,212,148,
-247,230, 26, 80,177,193, 34,215,183, 14,244, 74, 32,143,137, 74,175, 52, 80,116, 50, 42,119, 1,127,210,209,131,227,209,206,170,
- 12,134,125,162,200,241,239,231, 87,119,100, 90, 0, 92,115,117,115, 47, 95,188,216,149,231,251, 27,108, 11, 66,151, 92, 28, 57,
-125,161, 85, 18, 2, 14, 14, 54,180,109, 23,250,172,175,111,239,153, 12,124,184,154,242, 30,127,243,234,212,128,115,206,160,152,
-207,204, 5, 14, 73, 7, 85,232, 4,247,144, 59,152,200, 25,192, 81,236, 58,222, 70,217,163,138, 86,106, 98, 68, 20, 17, 98, 34,
-103, 45,120,160,207,161, 80,136,217,254,146,170,106, 9,187, 44, 73,233, 35, 58, 51,206,226,186,195, 94,238, 68, 22,108,240,140,
- 80,249,227,105, 15,134, 61, 38, 79,211,123, 83, 81,180, 64,100,135, 50,168,127,149, 43, 52,226, 72, 0,152,142,142, 93,101,201,
-209, 83,225,154, 5, 92,227,245,131,162, 37,246, 26, 80,244,116, 59, 91, 24, 71, 31,104,107,116,234,128,139, 48,127,235,210,157,
-252, 12,231, 1, 23, 43,204,202,191, 63, 28,177, 42, 2, 64, 10,106,140,144, 28,221, 44, 77,167, 98,230,160, 35, 84, 94, 61,208,
- 89, 11,211,218,168, 75,211, 45,191, 27,221,113,239, 21, 14,210, 69, 85, 31,213, 41, 15,217, 3,173,254,158, 61,121, 42,111,223,
-189,166,182, 66,193, 0, 60,149, 94,110,118,169,232,190,128,163, 28, 76,132,112,141, 25,217, 43,214,187, 0,131,160,128, 30, 83,
- 21,132,186, 44, 97,175,124,172, 89,185,105, 72, 26, 39,238,197, 81,105,213,190,203,181,135,160,105,186,236, 41, 65,198,159, 63,
-123, 42, 63, 30,158,185,244, 41, 76, 63,186,146,107,178,137,164, 11,107,131,163,202, 52,118,154,163, 57,139,161,144,187,212,251,
-219, 28, 14,228,201,246,134,254,251, 88,206,244,253,224, 26, 64, 69,196,126, 93,148,169, 6,230, 75,153, 78,239, 13, 8, 91, 27,
- 29,183, 11,108, 7, 76,112,162, 22, 71,174,215, 26,212,137,241,209, 51, 12,162, 45, 24, 27,244,245,221,124,251,195, 75,189,159,
- 57, 43,102,204,231,145, 44,129,155, 13,180, 6,132,119,240,236,127,120,127, 42,127,120,117,232,254, 28,149, 87,170, 21,247, 11,
- 71,169, 20, 43, 51,160, 29,146, 15,128, 73, 89,248, 85,236, 27,154,180,117, 17,170,250,140,221,131, 71,187,219,188,111, 36,170,
- 16,186,194,189,254,227,183,167,242,159,255,225, 83,249,215, 31, 79,228,205,201, 72,206,175, 39,250,129, 93,158, 15,216,115,232,
- 74,215,148, 93,134, 67, 33,180,236,239, 57, 46,128, 32, 15, 92,219,238, 22,153,236,239,180, 25,172,191,250,108, 95,254, 22,193,
- 84,131,248, 63,254,203,119,242, 70,131,125, 53,183,132, 23, 29, 53, 36,194, 56, 75, 32,206, 67,199, 72,125, 79,127,255,249, 38,
- 43,243, 87,151, 83,185,173,108, 63,161, 77, 31, 80,239,121,148,186, 19,159,190,151,235, 91, 77,142, 86, 26,209, 54, 2,147, 99,
-123,246, 0, 33, 34,153, 1,160,155,241, 82,227,225,217,249,133,225,164,130,246, 56, 15,231,170,126, 56, 24,163,143, 90,195,174,
-108, 19,130,146, 29,206,241, 67,117, 27, 63,180,214, 66, 48, 11,190,231,212, 42,119,224, 23,126, 55,245,166,189, 77, 86,122, 43,
-156, 21,185, 75,199, 6,165,161,202, 13, 7,240, 50, 24, 76,196, 4, 74,130, 10, 92,246,209,124, 57,240,190,131, 38,123, 80,148,
- 99,171,127, 97,217, 76,152, 77, 91,112,170,233, 60, 82,123, 21, 16,125,100,192, 18, 0,109, 81, 92, 55, 85,125, 72,104,194,223,
-108, 87,135, 96, 17,168,101,206,163,181,196,160,106,108, 78,115,167, 48,196,141,232,137,115,111,107,105,208,221,101,211,162, 54,
- 87,183,194,171,149, 9,231, 43, 73,211,141, 64,171, 21, 23,183,168, 23,110, 18, 99,237,119, 28,172, 31,107,213, 71,141,159,178,
-153, 94, 68, 46, 68, 81,123,101,141, 31, 6,127, 58,114,147,234,194,187, 40, 13,255,188, 44,254, 66, 99, 59, 0, 4, 43,239,149,
-187,126,160,148,249,162, 1, 2,154,134,190,225, 18, 72, 73,115, 13,253,210,129,129,102,202,243,240, 12,108,189, 85, 77, 82, 21,
- 40,103,248, 63, 28, 30, 97,100,144,186, 19, 94,176,180,148,232, 33,121, 12,129, 62,246,107,144,143,196,139, 2, 79,190,116, 33,
- 7, 50, 53,138,188,145,155,157,235,245,143,116,195, 63,217, 89,145,193, 78, 87,222,159, 89,235, 17, 89,111, 71,175, 19,238, 79,
-109, 71,219,226,251, 17,172,247, 33,118, 1,208,152, 30, 68,143,119,215,137, 54,141,226,196, 19,175, 74,214,215,135, 4,149,193,
-243,121,161, 7, 93,162,135,216,218,154, 86, 65,173,158, 86, 25,247,114,161,149, 0,144,230,224,250,190,190,184,105,192,149,152,
-167, 17,171, 82, 5,148,107,101,109, 82, 87,217, 43,104, 52, 95,123,119,202,158, 19,174,135,135,149,247,119,130,209, 18, 16,219,
-243,133,127,111, 98,233, 85,234,248, 4,128, 87, 31,164,141,141,165, 32, 28,153, 37,244,125, 0, 29,178,163, 7,121, 59,169, 56,
- 94,232, 67,108, 71, 12,136,135, 42, 3,215, 65,150, 11,128, 86,179,185,131,155, 76,247,129, 8, 93,253, 58,102,236, 8,142, 52,
- 64, 2,130,183,109, 70, 41,119,179, 9,159,253,124, 97, 76, 4,122,143,187, 75, 91, 73, 28, 69,206,132,157,186, 7, 1, 71,225,
- 65,140,234, 92,208, 49,208,253,128,170,133,212,198,192, 97,240,185, 59, 18,199,210,253, 14, 30,192,151,194, 14, 14, 90,238,223,
- 30,149,242,211,253,182,188, 60,157,176,194,134, 82,220,140, 52,212, 54,217, 34,248,190, 25, 10, 16,206,213,219,174,147, 95,154,
-169, 78,110, 18, 80, 45,111,143,223, 79, 64,197,211,243, 68,147,180,110,191, 47, 63,255,233, 87,114,120,244,206, 70, 65,100,133,
- 8,157,218,102,121, 76, 42, 45,175, 7,103, 86, 36,126, 6, 90,226, 11,230,130, 21, 61,102,202,100,231,152, 37,246, 72,137,131,
-154, 88,228,194, 93,208,100,191,209, 74, 12, 63, 3, 39,175,151,111,143,101,216,127,161,251, 37,162, 40,213,227,189, 13, 57, 60,
-191,177,159, 75, 76,164, 11,235,164,246, 46, 27,192,208,185,143,239, 58, 45,151, 68,246, 32,177, 64, 32, 5, 37,112, 94,184,225,
-146,217,203, 46,139,148, 10,125,195,118, 36,235, 90,173, 15,122, 25,117, 19,200, 56,209,213,177,181,106,116, 60,188, 79,124, 13,
- 64, 61,188,127, 40,166, 33, 1,219,219,212,228,224,203,231, 4, 87, 34, 25, 66,139, 31,230, 47, 72,200,164, 50,117,204,247,151,
- 55, 52, 97, 49,231, 75,171,244,113, 38,101, 73,244,224, 52, 23,151, 68,166, 7,154,109, 66,236, 76,237,172, 9,216,209, 36, 4,
-175, 37, 73, 75,159, 5, 82,217,158,244,182,215,100,103,173, 43,143,119,250,250,238,204,157,241,183, 47, 79,229,255,252,221,177,
-244, 50,195, 27,128,171,254,227,201,173,157, 65,144,192,206, 97, 95,123, 37,173,238, 58,229,148,251,113, 65, 28, 1, 24, 2,219,
-107,171,242,225,252, 90,214,135, 59,242,249,147, 85,121,125, 50,215,223,175,235,101,181, 45, 95,125,250,132,207,242,119,223, 31,
-178, 74,223, 24,152,202, 38, 18,108,140, 19,160, 50, 7, 90,222,165, 62,151,207, 14, 86,228,215,175,175, 1,142,231,108,125, 9,
- 75,215,110,198,206, 75,143,200,246, 25,227, 27,192,142, 89,226,157, 98, 98,124,240,220,211, 70,136, 13,186,240,247,250,220, 95,
- 77,223,106,114,185,203,255,102, 80,143,154,202, 84, 55,121,244, 32,125, 42, 78, 31,170, 93, 48,196,164, 71,235, 38,112, 87, 94,
-185, 62,112, 47,173, 66,140, 35,115, 25, 10,134, 13, 20, 1, 41,139,230,160,109, 92,192,106,227, 75, 70, 31, 5,163,196,147,133,
- 58,182, 15,137, 60, 80, 62, 80,168, 98, 63,252, 31, 68,108,236,107,166,245, 91,133, 74, 51, 4, 1, 8,102,204, 12, 4, 99,162,
- 36,137,207,174,115,167, 50,101,244,120, 15,173,238, 16,212, 57,142,168,165, 81,199,171, 67,245, 43,150,148,224,144,167, 59, 79,
-167,211,152,152,240, 62,113, 13,121,213,108, 22,180,224,172,178, 40,216,110,108,121, 54,102,210,159, 41, 1,123,105,112,189,115,
- 61,125,203,186, 82,191,223, 7,174,118,211, 18,103, 43,191,114,225, 9,235, 20,196, 31,217,154, 6,241,138,186, 52,100, 58, 99,
-173,131,213,226,244, 65, 52, 70, 92,130, 53, 36, 67,145, 39, 36,214,166,139,220,118, 54,117,176, 96,217,152,165,112, 30, 42, 15,
-129, 57,241,251, 14,129,124,233,210,143,174,226,218, 24,120, 84,101,244,145, 84,169,251,174,199,166, 42, 88,125, 20,220, 9, 84,
-252,200,103, 61,106,106,205, 70,224,176,233,200, 68, 62,198, 48, 97, 28,115,146, 35,114,214,141,128, 2, 64,174, 73, 36, 0,208,
- 3,246,131, 72,230, 22,173, 73, 47,110,238,228,237,162, 36,152,197, 93, 10,152,132, 34,208,162,189,149, 59, 74, 31,213,197,120,
- 97,250,223,152, 47,255,128,131, 0, 99,147,210, 68, 98,106,177, 14, 84, 64,232,194,234,175, 36, 55,124, 65, 74,205,140,154,205,
- 21,231,110,148, 87,110,199,158, 84, 25, 26,191,114,199, 40,171,214,224, 53,189,244,123,181,196,140,220,245,202,148, 26, 43,126,
- 31,238,177,195,175, 83, 62,179,101, 89, 60,164, 61, 97, 25,139, 96, 79, 71, 65,253,108,162,224,201, 88,136, 88, 57,182,124,180,
-133,123, 65, 37,138, 22,231,197, 13,132,102, 42,182,120,241,140, 46,175,167, 90,137,218, 44, 50,118,111, 7,250,183,107, 80,199,
-125, 66,114, 20,149, 61,237,106, 89, 45,164,102, 91,171,215,120, 77,227,142, 17, 21,219,210,212,116, 30,152, 12,187,149, 37,233,
- 58,189,129,190,167,194,218,204,101,174,251,180,118, 73,228,216,185,199,165,107, 24, 72,163,102, 25, 18, 2, 36,183, 72, 8, 90,
-156,173,154, 79,121,213, 8, 86, 89,151,206,164, 77,109,172, 7,193,146,227,219, 66,254,251, 47, 87,137, 50, 70, 5, 5,212,251,
-213,120,206, 67,188,156, 46, 40, 51, 10,207,241,138,180, 74, 84,160, 37, 57,196,156, 42,210,203,123, 41,237,110,135,138,109,232,
-112, 64,159,101, 52, 30,177, 13, 63,213, 3,255,139,167,219,242,237,155, 11,158,105,248,153,235,201,130, 84, 56,160,207, 23,222,
-125,136, 92, 89, 51,118,122, 89, 81, 58,229, 53, 50,206,184,177, 93, 18,158,224,156,185,203,194, 37,134, 35, 34,156, 99,120, 35,
-232, 59, 7,242,252,120, 60,225, 33, 14,186, 46,186, 65, 56,159,119,182,134,242,217,147, 77,121,245,193,208,240,101,108, 94,237,
-192, 10, 64,162,154, 73, 84,100,236, 34,240,192, 19,247, 48,199,249, 96, 5, 67, 37, 27,240, 16,119, 59,220, 41,174, 91, 19,158,
-167, 91,187,242, 72,127,119,192, 33, 5,100, 58,188, 34,118,215,183,229,213,201, 21,169,133,171,253, 1, 55, 40, 52, 30,182,215,
- 18, 57,189,157,145,209,116,240,228,153,236,227,158,139, 5,247, 22, 64,101, 96,154,176,107,167,239,232,153, 38,185, 71,231, 87,
-114,118,117,205, 46,128, 81,230, 44, 33, 33, 69, 18, 90, 8, 16, 57,202, 98,182,174,103,185, 1,153,177,198,159,237,175, 73,187,
-211,230,125,130, 17,112, 61, 46,100,115,181,101,123,244,237,133,188, 62,186,145, 51,221,227,139,249, 29,223, 3,252, 14, 48, 63,
- 31, 3,132, 61, 89, 18, 32, 26,187,191,199,250,160, 37,103,108,151, 87,210, 7,181, 17, 82,183,167,135,186, 22, 18,253,157, 43,
-154,228, 14,164,219, 45,244,123, 52,105, 47,175,228, 39, 79,106,249,243,187, 74, 94,236, 26,163,100,127,123,139,156,250,124,113,
-198,181, 8,167,195, 39,155, 93,254,126,186,222,233, 37,119, 6, 3,121,250,120, 85,254,147, 6,247,181,213, 46,247,213, 59, 45,
- 40,222,158,142, 40, 58, 5, 44, 91,135,250, 26, 88,243, 0,155,186,126,133,152,192, 80,143,244,234, 9, 13,165,246,119,182,117,
-221,246,153, 8, 38,206, 20,194,121,147, 50, 96,250, 60, 52, 28,150,117, 29, 53, 2, 33, 65, 24,132, 45, 71,182,160, 10,210,107,
- 2,223,155, 90,205, 69,228,136,231,168, 49, 95,168, 99,147, 69,101,123, 29, 1,169,140, 73,246,111,212,233, 36,110, 42,124,114,
-182,131, 71,123, 29, 53,149,109, 8, 0, 1, 84, 99, 49, 45,242,121,121,222, 24,112, 44,242,162, 57, 76, 17, 88,104, 24,146,154,
- 69, 38,230,201,227,201,157,183,141, 35,159, 49,151,110,229,186,116,176, 78, 64,163,103,110,206, 82,154, 8, 68, 18,187, 38,183,
- 85, 6, 65,212, 37,224, 8, 82,231,144,227, 16,104,197, 15, 26,243,193,169, 14,135, 81, 75, 95, 80,226, 32, 51, 86,213,112, 74,
-147, 48,191,143,154,251,105,132, 34,236,201, 72,220,202,152, 8,192,167, 59, 73,147,191,176,156,125,144,234, 53,218, 89, 81,154,
-160, 77, 67, 21,243, 54,124, 48,141,249, 88,132, 34, 10, 13,248, 48, 66, 73, 31,232, 96, 54,146, 48,244,113, 89, 60,184,155,133,
-145, 65, 0,194,133,113, 72,112,186, 99, 85,204, 4, 47,109, 50,235,134, 38,208,232,129,153, 0, 78,210,110, 53, 96, 68,235, 2,
- 89, 7, 34,140, 92, 2,138, 61, 24,244, 4,109,130, 40,204, 23,156, 62, 24,127, 20,248, 99,247, 37,160,122, 29,212,198, 96,187,
-154,166, 13, 35,162,114, 9, 93, 42,197, 97, 78, 89,216,154,154, 37, 70,253, 57,190,157,155, 40,146, 68, 13,151,221, 52,175, 77,
- 94,179, 69,213,175,204, 13, 21,150, 54, 6,137,205,168, 39, 40,239, 5, 69,186, 96,149, 26, 57,120,174,114,133, 67,218,236, 66,
-220, 98,186,224,122, 0, 39,144,137, 45, 48, 11,149, 41,173, 37,137,189, 29, 4,157,192, 58,105,123, 53, 14,109, 2,218, 69,138,
-233,177, 63,222, 89, 99,181,147, 18,155, 96,206, 80,179,185,117,112,192, 71,103,178, 0, 33, 21,206,234,204,173, 14, 21,233,164,
-101, 18,203,152,163, 47,151, 54,218, 24,235, 51,192, 51,122,178,187, 97,239, 67, 19, 93, 92,195,217,245, 45, 15, 24, 28,168,221,
-174,177, 34,224,155, 14,181,171, 46,187, 67, 86,177,165,250,114, 22,154, 4,245,233,147, 91,201, 68, 3, 78, 62,159, 51,144,192,
-225, 14,201,164,120,133, 10, 29, 8,142, 76, 82, 79, 86,216,114,207,173, 10,115,115,159,197,178,114,235,217,164,209,161, 8,103,
- 81, 85, 37,134,232,174,141,182, 70,192,102, 29,125,132,211,137,136,166, 79, 83, 19,202,193,191,119, 49,106,210, 36,232,110, 25,
-203, 23,122,160,254,250,135, 43,217, 92,233,176,221,138,179, 99, 78,220,131, 41,245,205,150,250, 94,193, 45,110,119,137, 49, 72,
-178,146,140,156,149, 97,159, 35,136,110,183,205,206, 70, 39, 3,181, 46,151,147,211, 51,206,175,163,214,134,126,254, 25,189,189,
- 97,254,178,191, 49,208,223, 11, 65, 29, 3,193, 5, 39, 64,234,226, 39,137,119, 96, 32, 74, 21,188,228,173, 99,199,113, 83,110,
- 32,101,218, 87, 47,157, 99,131,132, 63,109,203,249,104, 44,255,246,242, 61,117,214,193,175,191,161,169, 74,205,247, 5,252,196,
-179, 71, 59,114,121, 11, 27,210,169,143,161, 34, 79,206,151, 60, 71,122, 89,151,247,140,253,179, 62,236, 17,168,217,139, 77,114,
- 21,237,114,128, 70, 23,190,254,104, 9,171, 63,255,254,114, 36, 7,235,125, 6,114, 92,215, 4,226, 44,209, 76,158,110, 15,169,
- 62,247,201,193,150,124,184,184,145, 59, 93,127,144,130, 61,187,158,200,222,122,143,227,142, 83,173, 90,223,157, 93,201,232,230,
-156,179,148,255,252, 63,255, 79,178,178,210,149,187,241, 13, 71, 39,131,142,198, 9, 77, 78,126,242,124,151, 63,119, 51,158,208,
-145,112,111,189, 75,249, 99, 3, 0, 11, 65,109,155, 90,253, 2,100,120,126,103,192, 54,182,162,225, 46, 26,215, 12,116,227, 73,
-205,107, 63, 61,159, 49,113,154,221,223,107,110,221,163,134,251,155, 15, 31, 8,254,189,215,119,243,203, 47, 14,168, 13,127,120,
- 57, 97,144, 39, 59, 56,174,216, 77,193, 61,110, 15, 53,209,173, 22,250,174, 55,201, 32, 65, 33,245,120,111, 71,142, 47, 46,201,
-104, 64, 18,249,119, 63,251, 70, 62, 64, 18,182, 85,105,144,111,105,178,152,112, 54,254,245,167,143,229,115,173,196,255,237,229,
- 9, 29, 24,209, 33,160, 62, 11,168,151,121, 45,223,255,120, 46,135, 23, 19, 77, 14,103,114,120,125, 47, 59,186, 78,166, 75, 19,
- 4,219, 95,107,203,209,104,201,196,153, 14,156,238,232, 25,180, 53, 88, 84,210,177,176, 36,182,228, 94,239,111, 99,117, 77,158,
- 30,236, 49,193, 2,118,128,198, 47,177, 7, 70, 30, 40, 12,170, 15,138, 94,129,198, 20,230,207,102,202,144,122, 33,111,129, 2,
- 8, 97,234,248,178, 58, 50,238,106,226,194, 33, 56, 80, 23,148,129, 76,154,196,192, 54, 93,225,135,225, 3, 93,206, 12, 30, 82,
-190,160,160, 45, 31, 52,219,165,126,240, 80,110,145,162, 85, 55, 96,188,202, 43,195, 48,235, 95, 58,129, 31, 73, 65,191,223,103,
-219, 46,184,232, 36,222,170,251, 72,180,222, 66,168,203,209,214,174,215, 27, 0,115,165,107, 86,219,140,188,106,146,158, 7,110,
-247, 67, 48,180,118,122,212,124,157,223,155,198,206,235,172, 26,241,152, 86,154,121, 98,240, 0,112, 51,111, 95, 11, 90,168,188,
-192,193,141,168,199,108, 63,183,152, 46, 31, 42,105,231,116, 7, 5,184,210,179,234, 80,169,164, 31,185,229, 89, 64,126, 64,251,
- 55,127,187,104, 62, 2,138, 1,202,236, 64,161,114,155,187, 35,209,166,213, 63,165,116,237,118, 19, 0,170, 62, 26, 9, 72, 3,
- 12, 76,146, 32,136, 83, 55,115, 64,241,119, 24,244, 0,106,247,251, 14, 0,190,196, 93,151,240,207,132, 22,143,201, 71, 50,178,
-246, 23,178,211, 40, 10, 10,135,113, 67,113, 91, 16,244, 85, 52, 12,133,208, 13,169,156, 59,159,250,179,170,235,135, 68, 38,118,
- 21,186,212, 1,135,219, 43,109,174,141, 52, 54,121, 71,113,108, 8, 49, 14,133,143, 26, 98,163,210, 65, 60,100,161,149,250, 66,
- 15,250, 74, 30,172, 63, 17, 40,241, 44,144, 65,163,186, 26,246, 58,205,245, 32,216,193, 21, 11,150,152,121,106, 21, 78,218, 51,
-153, 74, 84,184, 61,180,247,105, 57,107, 93,163,216,125,198,103,145,173, 19, 0,183, 34, 10, 78, 44,153, 36, 23,156, 39,182,244,
-176,203, 53,179,191, 98,176, 14, 65,175, 77,249,226,152, 65,140,168,227, 52,166,176,210,130,166, 61,198, 72, 0,226, 30, 45,248,
- 78,203,120,238,157,142,183,153,171,130,243, 75,200,153, 66,221,107,233,170,128,137, 4,127,132, 74, 43,254, 84,238,139,220, 81,
-219, 57,219,145, 64, 35,247,244,122,174, 23, 51, 77, 90,244,103,199, 29, 23,166,202,249,103,250,191, 90, 69,101,141, 67, 25, 58,
- 64, 85,105,243, 27,178, 26, 2,219, 6,107, 48,203,140,113, 26,155, 84,104,171, 72,154,238,147,177, 30, 35, 7,192, 6,207,136,
-184,209, 80, 8, 52, 75, 36, 53,248,207, 97,217, 39, 98, 24,201, 2,102,216,134, 21, 18,249,213,183, 39,242,191,252,253, 99,121,
-167, 1, 7, 56, 10, 72, 2,227,175,141,245, 21,233,106,197, 3,144, 35, 2,197,198,218,128, 2, 31, 16,170,129, 95, 58,246, 9,
-232,100, 64,155,211,178, 20,123, 82,223,217,134, 38, 6,151,247, 21,207,190,189,253, 39,242,230,240,216,198, 76,250, 72,129,124,
- 70, 81,161,217, 1, 19,251, 5, 53,215, 77,188,138,163,205,196, 84, 1,115, 90, 0, 11,241, 24,211, 25, 18, 82,147, 88, 14, 93,
-201,152,231,114, 68, 85,188,131,173, 53,189,166, 11,153,220,223,177, 75, 8,112, 29,152, 7,168,124,209,226,133, 2, 25,214,193,
-254,246, 58,219,221,212, 33,240,209, 16,174, 25,247,155, 87, 54, 87,103,119,173,138,217,101, 65,144,194,117, 93, 79,230,242,205,
-139, 3,178,140,222, 95, 0, 47, 98,222, 8,240, 7,192,247,173, 96,100, 80, 39, 92,199, 72, 72, 22,148,229,157, 83,127, 0, 2,
- 74,243,209,189,158,121, 29,118,165, 32, 5, 11, 43, 86, 48, 36, 94,190,122, 43,197, 92, 3,253,222, 99,173,156, 47,228,211,206,
- 39, 18,119,183,228,191,252,183,255, 75,247,212,152, 52, 55,210,240,208,205,210,228,234,111,191,120,172, 63,127,107,166, 52,240,
- 71,159,218, 25,142, 17,208,194,129,167,236, 24,196,134, 67,129,250, 46,246, 53, 70, 79, 0,139,129, 6, 8,214, 10,246,233,215,
- 95,252, 84,159,233,140,221, 13, 40, 49,118,178,154, 70, 68, 95, 62, 90,147,223,191,186, 32,197,237, 96,189, 67,209, 37,232, 21,
-240,204,213,107,249,112,189,212,231, 49,146,245,126, 75,159,115, 44,111,143,144,176,117, 32, 25, 35,109, 93,150, 71,167, 39,242,
-221, 52,215,107,221,209,235, 25,201,105,213,149, 71, 91, 61,226,101,186,173, 14, 19,172, 87,199,215,178,187,214,161,165,241,249,
-248,146,192,214,181, 46, 70, 50,185, 60,223, 91,145,127,250,215,247,242,254,252,142,221, 25,176, 2,206,224, 69,144,232,254,174,
-139,102,244, 73,121, 97, 8, 46,109,174,203,230,218, 26, 99,234, 68, 19,152,142,254,115,127,107,139,239, 18,255,189, 44,172,120,
- 70, 1,146, 46, 92,155,155,116, 53,183,176, 12, 62,211, 1, 94, 31, 90,173, 70, 12, 54, 23,173,212,157,150, 66,208,106, 73, 64,
-160, 90, 37,155, 23, 15,173,221,194,165,103, 35,135,117, 89,123,187,126,176,221, 68,240,135,243, 14, 42,217, 78,183,153,165,133,
-182, 58,109, 18, 63,106,169,219, 56, 32,120, 4, 71, 13, 85, 13,115, 41, 30,168, 64,193,151,105,227,220, 21,180,236,107,121, 56,
-224, 3, 32, 48, 74,196, 3,151,205, 50,141,226,101, 34, 8,102, 77, 88,122,149,254,160,132, 38,101,160,113, 21, 86,125,122, 43,
-184, 44,130,153, 77,237,130, 50, 6,126,139,189,162, 6,159,152,103,168,207,177, 43, 87,122, 50,234, 77,212, 4,192,202, 21,149,
-196,199, 30,180,114,141, 12,193, 31,178,182,248,227, 46, 71, 18, 55,250,232,129,219, 78,116,181,119, 26,154,228, 67, 76,108,164,
-145, 93, 23,167,211,132,246,116, 97,154,227, 89,150, 52,137, 0,178, 67,208,149,168,190, 86,155,228, 33,178,249,224,131,110,215,
- 45,141, 9, 80,234,188,210,134, 21,209,216,102,214,141, 89, 77,225,220, 75, 19,192,137, 57,147, 69,183, 8, 7,167,205,137,173,
- 74, 39,104, 42,149, 70, 93,206,204, 93,114, 74, 82, 26,151,217,170,244,229,194, 84,205,146, 40,114, 42,101, 97,128,163, 58,106,
-104, 78,102,255,155, 51,201, 65,230, 15,250,208,152,130, 30,246,120,250,157,132,179, 57, 60,231,101,102,130, 63,145,163,175,201,
- 49,206, 32,221, 9,233,238, 22,131, 41,190,150,145, 74,214,225,218, 65,139,112,221,185,219,184, 6, 28, 62, 97, 46, 28, 92,253,
- 0,144, 49, 0,163,217, 76,222,207, 77,100, 9,213, 46,184,234,232,226, 68,174,122,136,119,195,229,229, 20,175, 96,131, 89,148,
- 75,182,130,209, 26,165,209, 13,245,225,225,154,150,176,213,139,235,194,254, 68,135,234,102,188, 32, 2, 28,127,158,248, 53,209,
-207, 89,131, 86,233,215,128,165,103,250, 17, 57,131,208,176, 59, 32,248, 20,193, 16, 72, 91,172, 12, 80,126,176,150,169,246, 22,
-197,142,117, 48, 37,178,251,104, 42,119, 19, 61,128,209, 70,174,214, 36,105, 25,133,180,211, 25, 74,135,104,231,152, 82,176,244,
-185,199,122, 6, 7, 25, 51, 85, 49,217, 81, 22, 12,149,225,108,210,204,186, 62, 75,247, 75,192,222,166,148,105,150, 52, 6, 74,
- 12,116,110,227, 74, 91, 89,215, 39,135, 76, 44,186, 40, 29, 82, 94, 11, 38,247,139,165,209,101,241, 79,180,170,207, 38, 34, 23,
-163,185,124,241,104, 67,126,163,149,148,237,107,219, 43,151, 26,132,240,220,224,154, 86,148, 35, 89, 91,228,156, 97,210,152,102,
- 81,203,217,249, 53,147,186,210, 29,195,194,232, 11,124,114,160,149,183, 52, 49,216,214, 67,246,195,225, 33,207, 4,156, 89,104,
-139,223,145, 53,145, 50,129,194, 45,244,176, 30,124, 60,105,123, 59, 38,130, 28,154,232,216, 7, 65, 6,151,242,214,185,173, 67,
-128, 28, 77,122,214,188,238,171,187,137,108,109,108,217,125,105, 0, 57,190, 24,105, 64,209,196,164,147,114,189,108,109,172,104,
-117, 58,145,119,199, 87,134,173,192,248,160, 50,183, 54, 36,116,139,218,228,165, 17, 8,104, 92,165,207, 24,227, 20,156,223, 48,
- 3, 2,118,100,140,185,174,123,141, 15,178, 54,177, 1,183,148, 31,110,243,119, 80,248, 74,175,233,228,242, 70,206, 95,159,202,
- 47,191,122,174, 1,114, 32,135, 87,115, 58,254,157,107,112,131, 16, 11,146,245,207,159, 61,150, 97, 7,218,249,171,242,250,253,
-137,188,213,228,231,102,116, 45, 99,173,222, 35,199, 90, 5, 77, 16, 36,140,191,250,246, 71,106, 45, 80,155,162,122,112,111, 11,
-198, 97, 38,253,237, 44, 35,158, 53, 17,217, 34,120,158,243,233, 84,255, 29, 38, 86, 29,254, 44,216, 1,113,148,201,215,159, 60,
-101,117,110, 85,185,144, 14,182,171,255,125,171,129,249,118, 17,201,181, 38, 68,192,144,108, 15, 82,249,253,137, 86,210,122, 84,
-239,239, 62,147,225,147,117, 89,137,103,242,231,179, 82, 46,199,247,146, 97,196, 84, 68,242,242,221, 7, 2, 19,255,244,238, 86,
-254,195,191,123, 68,214,132,190, 66,242,227,111,199, 90,193,175,172, 73,165, 21,249,100, 97,133,214, 16,231, 75,100,246,199,149,
-190,135,213,213, 46, 43,250, 75,221,163,119, 40, 22,234,132,207,250,226,110,106,254, 15,181,157,155, 97,228,196,249,186,119, 31,
- 91,100,107,244, 24,175,142,207,207,120,223,144,142,133,196, 47, 70, 98,105,225,182,171,185,103,253,129, 63,205, 10,140, 74,113,
-109,206,208, 76,185,204, 2,108,149,151, 30, 4, 3, 61, 45,242, 96,152, 52,149, 93,104,161,227,119, 39,117,240,124,121,240, 46,
- 79, 92, 82, 52, 10,150,169, 81,176, 92,141, 26,205,103,163, 49, 21, 86,233,251,124,152,198, 41,224,113,122, 59,187,174,235, 38,
-105, 48,169, 83,184, 82, 57, 58,214,103,182,225,126, 66, 59,217, 92,146,210,166, 26, 92,186,222,122,104, 49, 23,141, 16,198,131,
-249, 71,237, 15, 52, 77,237,192,181, 3, 59,106, 58, 4,145,107,144,211, 90, 53, 10,129,219, 43, 11,215,115, 70, 0,133,224, 74,
-228,106, 89, 56, 28, 89,173, 56, 40, 17,115,246, 78,234, 46,116,149, 37, 11,193, 26, 54,115,181,185,162, 40, 29,140, 88,123, 43,
-220,120,188,117,101,127,179,181,201, 64,148, 58, 88, 44,110,102,210, 46,250,218,120, 88, 7, 92, 66, 28,103, 46,222, 97,243,211,
- 86, 26,208,245, 54, 67,238,104, 5, 99, 76,132,136,146,158,104, 55,134, 36, 34,242,207, 8,156,244,208,229, 64,181, 21, 64,128,
-181,107,190,227,153,179,162, 22, 3, 4, 54,207, 9,186, 3,168, 92,219,177, 91, 49, 10,181,161,175,110,160,169,156,218,207,229,
- 46, 32, 36,102, 18, 84,127, 52, 98,160, 94, 62,219, 84, 86,101, 66,158, 85, 28,159,145,151, 38,108,196,132, 42, 10, 84, 70, 59,
- 8,114,247, 78,239,100, 73,115, 31,248, 51,160,126,235, 70,210, 83, 26,122, 96, 76,183, 42,123,231, 56, 80, 35,183,240,229,168,
- 69, 43,191, 88,172, 51, 69, 81,152,210, 18, 28, 92, 34, 64, 64,120,247,232,106,165,222,181, 2, 58, 23,130, 46,109, 31,225,100,
-158,128,197, 46,125,135, 42,179,246,160, 3,222,117, 78,224,156,205,121,147,110,203, 90,230,222,237, 2, 16, 20,237,116, 36,208,
- 56,112,105, 44,164,135,239, 41,230,228,243,188,161,129,118, 59, 38, 86,131, 68, 8,102, 21,101,109,247,219,239,164,222,210,142,
-168,164,183, 6,151,194,210,236,117, 23,236,100, 24,117,138, 2, 43, 14,238,195, 33,223,235,246, 92, 89, 46, 97, 53,132,177,194,
-112,184,198,170,191,173,135, 14, 48, 37, 24,106,148,122,200, 98, 62,140,100, 43,176,100, 80, 61, 51,217,197, 60,119, 41,206,222,
- 48,108, 66,176, 83,102,242, 28, 4,132,188, 3,132,119, 89,126,212, 53,195,187, 88, 82, 75,187,197,164, 62, 36,127, 6,236, 53,
-161, 19,188,171, 85, 24,222,232,123,253, 48,170,228,211,189,154,207,233,118, 4, 85,180,136,106,124,180,156,189,185,101, 5,143,
-191, 70,195,129,236,110,175, 9, 26, 32,192, 41,204,107,155,225,131, 78, 85,242, 21, 21, 84,154, 67,113,113,119,223,102, 66,186,
-185,190,169, 65,253,152, 18,158,164, 80,106, 32, 91,146, 91,110, 21,177,117,133,132,124,228,176,191,112, 78,213,174,237,223,154,
- 38,206, 38, 49,148,125, 37,214,162, 79,147,138,180, 86, 4,106,236, 3,208, 44, 49,251, 62,186, 56,212,247,104,109,110, 32,225,
-119,183,182,185,199,209,246,135, 15,248,155,163, 43,238, 19, 22, 55,250, 48,209,174,135,171, 30,133,174, 80, 5, 51,152,218,179,
-157,234, 53,119, 59, 93,182,224, 35,125, 54, 24,177,224,185, 60,217, 30,104, 98,152,104,213,121, 33,143, 54,134, 76,124,232, 84,
-152,216,187,201,157,246,121,126, 61,150,147,155, 25,241, 11, 56,247, 81,149, 66,231, 29, 73, 86,175,187,102, 96,187,110, 34, 31,
- 46,238,229,250,118, 42, 21, 68,131,162, 82,171,222,148,123, 21,137, 0, 10,134, 89, 89,187, 65, 79,194, 53, 86, 65,113, 47,170,
- 63, 2, 36, 11,187, 92,153,119,155,128, 25, 49,253,134, 22, 85,230,208,121,109,195, 71, 93,171,114,104, 47,116,187,125, 57, 60,
-187,211,107, 43, 53,233, 2,104,110, 69, 54,134, 25,223,243,151, 79,183,229,191,254,233,131,252,120,124,107, 2, 67,119,115, 26,
-189, 32, 17,129,227,218,213,236,181,100,237,190,180,234,185, 92, 77, 76, 30,248,217,206, 58,113, 28, 72,174, 78,206,207,233,234,
-247,225,250, 64,254,238,203,158,188, 57,190,145, 23, 7,235,178,183,221, 34, 29,239,231,159, 61,145,223,253,240,158,248, 28,184,
-197, 33, 73,154,210, 85,175,144,169,254,190,105, 94,177, 3, 19,105,156,152,150, 9,181,231,147,186, 36, 27,164, 42, 31, 76,191,
-112,136,224, 29,158,156, 95,176, 67,211,110,153,176, 18,236, 90, 87,250,182, 22, 80, 48,128,171, 30, 65, 93,206,120,146, 38,118,
- 18,140, 66,192, 3, 69,203, 49,115,106, 4, 51, 94, 71, 72, 51,120, 71, 70,239,160, 97, 10, 14, 82,201, 27,221,231,160,224,197,
-128, 30, 89,155,167,153, 25, 59, 8, 47,180, 46,107,167, 25,133,214,124, 77,206,223,162,145, 23,173,252, 48,109,212,193,234, 7,
- 75, 88, 84, 32,152,219,225,107,144,135, 12, 50,164, 54,127,181, 10, 57,105, 18,148,218, 61,157,243,102,142,108,148,199,186,177,
-225,172,157,127, 86,186, 3, 88, 99,213,217,204, 52,106,231,114,166,110, 52, 99,200, 75,106, 12,187, 60,105,227,197,238,238,105,
-166, 5, 95, 53,243,126, 6,138,162,116,244,171,112,134,139,128,142, 13, 13,158, 44, 42, 96,252, 77,197, 37, 7,219, 81,217,204,
-181,133, 13,193, 94, 55,222,219,161, 69, 19,158,113,145,152,210,151, 85,124,102,153,136, 39,128, 86, 58,145,248, 69,249,128,155,
-240,223,191,204,205,215,183,229,168,106,114,238, 51,195, 14,152,122,152,209,206,208, 73,196, 97, 79,217, 96,253,222, 42,117,250,
- 32,218,191,238,100, 87, 22,134, 63, 48, 81,159,146, 93,129, 44,141, 92,225,205,146, 46,243, 26,168,217,182, 77,220,114,245,241,
-166, 41,152,129,158,129,235,194, 76, 9,155, 21,182,136,199, 85,193,106,122, 1,233, 73,221,180, 16,189,192,247,226,176, 11,250,
-246,216, 52, 88, 35, 45,247,249, 14,129,128,124, 96,250, 28, 87,114,159,152,133, 99,144,235, 12,216, 7,235,178, 68,141,202, 26,
- 37, 75, 11,123, 38,129, 51, 13,240,163,141,144, 74,173,102,151, 46,168, 20,214,138,248,122, 77,220, 36,197,102,247,240,147,238,
- 59, 56, 9, 45,103,180, 95,131, 65, 81, 43,117,101, 66,253,124,236, 63, 36,118, 64, 12, 35,169,163, 33, 14,248,211,147, 5,145,
-244, 28,167, 64, 44,167,159,153,163, 89,100,188,239,153, 62, 35, 84,118,120,254,112,177,218,136, 7, 84,126, 3,178, 24, 14,130,
- 0, 20, 97, 6,220,201, 10, 86,231,216, 35,155, 88, 91,203,185,117,190, 98,136,234, 88, 2,141,209,195, 0,190, 14,149, 37,136,
-152,181,219,181,250,188,183,109, 90,237, 24, 21, 8,103,232, 86, 69, 33,160,225,160,139, 53, 0,162, 13, 44,156,149, 3,157,190,
-180,121, 49,115,237,146,235, 23,215, 12,245, 56,156, 51,137, 31,208, 0,109,133,209, 24,192,113,226,251, 27,129,208,180, 17,234,
- 70, 86,153, 34, 85,126, 6, 5,128,102, 96,133,136,143,202, 24,236, 1,142,133,232, 75,102, 9, 12,217, 20,122, 78, 92,143,198,
- 76, 48,222, 94,204,229,155,231,235,178,185, 58,160,118, 60,110, 18,137, 15, 3, 10, 59, 42, 38, 34,132,164, 11, 92,254,237,141,
- 20, 74, 6,122,112, 66,221,203,104,168, 81,106, 85, 52,168,127, 61, 56,122,141,238,245,243,251,122,152,111,200,179, 39, 79,228,
-183,127,248, 3,147, 90, 88,153, 66,128,104,225,213,119,226, 12,156,188,176,245, 7, 83, 25, 28,240, 19, 26,121,152,197,115,150,
-218,104,175,250, 8, 56, 92,145,171, 94,104, 80,191, 37,175, 31, 35,149,247, 39,231,178,181,186, 34,207, 30,237,203,205,237, 21,
- 71, 72, 72,238, 86, 6, 45,206,118, 81,245,125,254,100, 75,254,248,242,144,154, 1,122,234,105,160, 6,237,204,146,227, 69,176,
-195,117,113,172,200, 11, 31,147,223, 93,200,254,214, 6, 41,135,216,139,151,163,137,117, 88,201,142,169, 41, 79,220,131, 38, 65,
-106, 54,204,157, 88,175,109, 92,153,166,185,203, 92, 71,109,211, 2, 0, 90, 27, 9,201,235,195, 11, 38,205,187, 27,171,242,244,
-201, 83,142,107,138,217,141,124,254,104,149,252,236, 1,109,141, 99,118,142, 94,125, 56,147, 15,167,151,220,103,104,225, 99,111,
-226,103,129,180,159,107, 85,187,234,231, 80, 68,131,153,146,116,186,205,181, 30, 13, 92, 56,158,165, 31,121, 70, 11,212,203,155,
-123,121,182,191, 65, 71,181, 31, 62,220, 80, 77,238,126,114,165,251,235,158,103, 31, 52, 11,160,175, 31, 10,196,235,137, 9,101,
-225,108, 89,213, 53,177,177,177, 41,111,222,126,207,206, 31,233,114, 29, 13,222, 39, 23,122, 86,245,228,243,199, 43,212,126,128,
- 9, 16, 70, 59,207,182, 51,121,119, 58,209,100, 97, 69,175,181, 43, 23,250,140,191,122,113, 32,255,252,199, 31,245,126,198,198,
- 50,161, 19,100, 42,191,127,125, 37,191,248,108, 93,254,159,223,126,208,234, 61,150, 59,173,216,103,181,233,216, 99,140, 24,233,
-254, 4, 48, 21,197,235, 84,223,247,245,205,200, 70,200,238, 8, 26,209,165,180,205,223, 5, 49, 34,116,189, 16,240, 65,131, 78,
- 67,240,180,128,217,216,219, 54,155, 39,167, 7,113,193,189,131,185, 71, 64,163,199, 77,221,103,213,164, 68, 15,252,245,208,221,
-157,206,141, 87,139, 3, 14, 63, 97,102, 37, 22,144, 66, 43, 60, 84, 72, 68,215,215,134,171, 14, 29,227,166,237,250,177, 25, 71,
-252, 48, 75, 75,146,170, 1,209,240, 96, 46, 74,111,197,155, 82, 89, 30,236, 56, 37,204, 96,140,219,222, 40,199, 1,236,214,178,
-224, 18, 84,172,194,129, 31,185,153, 13, 14,118,204,117,113, 16, 67,227,215,126,222,187, 12, 28, 31,180,152,113,227, 26,144, 61,
- 38,206,153,175,220,148, 33,112, 14, 3,168, 7, 7, 28,218,164, 5, 71, 23, 6, 88, 65, 22,191, 54, 52,183,174,220, 85,227,236,
-160,178, 11,225,172,155,170,110, 73,163,139,143,121,125,233, 98, 55, 20,125,161,205,109,139,139, 34,241,185, 36,130, 5,173,109,
- 83,107,223, 85, 14,126,203,221, 5,139,115,207,133,181,252,150,243,154, 7, 12,252,136,165,178, 76,176,118,128,153,205,103,187,
-246,220, 29, 7,128, 13,141, 57, 20,208,154,144,225,133,131, 17,104, 66, 65, 96,168, 49,114,201,210, 6,225,142,236, 22, 27,105,
-208,181,185, 46,174, 34,163,112, 79,218,116, 79, 98,119, 61,194,156,113, 95, 15, 73,188, 51, 8, 65, 0, 69, 75,101,180,202, 18,
- 65,104,178,195,113, 43,113, 29,132,144, 52, 26, 56,179, 96, 50, 19,236,126,131,154, 97, 96, 16, 4,140, 68,240, 5, 8, 88,131,
- 86, 22, 68,141, 98,179,221, 45, 13,145, 94, 37,118,120,145,163, 75,241, 25, 3,233,132,125,210,166,189,170,238,143, 74, 15, 30,
-173, 94,193, 25,134, 88, 30,120,219,112, 6, 3,117, 10,159,133, 86,173, 85,169,169,179, 43,172,117,142,125, 85, 64,239, 59, 50,
-106, 82, 74,190,185, 81, 61, 97, 66, 97,200,239,220,196, 65,144,144, 57,141, 71, 92, 7,222, 44, 37,219,102,102,164, 63,159, 45,
- 12,204,138,138, 34,243,118, 63,219,168,154, 56, 76,167,137, 85,210,173,132, 54,164,238,157,204, 63,207, 92,249, 12, 73, 64, 90,
-196,166,217, 30, 27, 34, 29,159,215, 78,117, 47,184,204, 39,214,211,128,239,206,168, 77, 45,221,227,152,231, 81,143,162,142,156,
-205, 80,176,117,140,238,197,220,165,160,241, 57, 24,143, 1,181, 13, 31,239, 25, 43, 85,195,155, 88, 7, 79,184,174,197,229,130,
-131,181,111,208, 87, 32, 18,159, 74,129,149, 43, 30,214,141,167, 0, 61,194, 59,157, 70, 91, 33,114,206,243, 4, 21,117,108, 78,
-114,103,119, 37,117,199, 55, 53, 64, 28, 93, 36,108,175, 19,231, 34,134, 77, 64,146,145, 21,176, 2,142,205,195, 66,159, 41, 42,
- 62,140, 2,232,196, 72,175, 10,215, 96,192,123, 43, 52, 88,246, 68, 46,174,110,101,253,249, 35,121,250,248, 64,126,124,243,150,
-192, 37, 52,136, 17, 96,123,154, 96, 21,142,204,159, 57,131,130,216,137,101,193,245,204,132, 36,243,209, 91, 93, 57,163,166,250,
- 8, 28,107,214,196, 0, 91,238,239,238,234, 97,127,175,129, 13, 46, 94,183, 12,238,159, 61,217,214,231, 57,145,239, 94,159,201,
- 79, 63,217,225,250, 66,151,225,103, 63, 17,249,254,221, 49,199, 42, 49, 11, 52, 61,103,122,122,255,247,115,163,123,214,117,147,
- 40,181,108,105,153,195,157,190,195,115, 13,228, 28,145,192, 2, 86,131, 60,196, 87,144,120,172, 14, 76,197, 19,127,144,212, 86,
- 48,213,154,116,244,181, 26, 47,103,166,238, 73, 65,174, 50,225, 89, 13, 32, 26,206, 6, 88,186, 30, 94,142,229,229,251, 19,217,
- 95,164,242,233,243,199,178,243,233, 39,178,191,217,150,186,208,235,169,230,114,121,121, 37,175,143,175,152,128,238,239,110,179,
- 35,240, 83,173,166, 57, 10, 21,147, 44, 7, 56, 17,230, 58, 0,159, 65,191, 30, 35, 14, 36,218,167,151, 37,101,159, 49,227,135,
-206, 61,206,100, 60,235,155,219,137,222,159,113,219, 87, 86,118,229, 74,147, 59, 96, 31,144, 0,225,236, 66, 59,124,123, 53,145,
- 75, 13,230, 24, 19,173,245,108,228, 82, 98,127,220,221, 73,212, 26,235,250,235, 72,181,156, 49,168,143, 64,243,211,123,252,234,
-233,129,252,241,205, 7,249,230,197, 19, 57,187, 56,165,202,220,176,187, 37,122,185,242,207,223, 30,202, 47,191,218, 99,247,102,
- 89,116,228, 23, 95, 61,147,255,242,171,111, 77, 21,143, 82,188,145,156, 95,223,235,191,111, 17, 43, 3,212,254, 96, 89, 49,201,
-131, 83, 95,233, 66, 69,137,251,126, 44, 26, 81,184,154, 10,136,144,240,197,217, 0,111, 19,244,115,202,202, 48, 56, 88, 51,159,
-110,111, 97,173,167,252, 37,160, 94,133, 74, 80, 18,249, 11,111,245,204,209,219, 4,142,161,133,217,232,160,219,188, 24, 6, 28,
-209, 71,128, 40,105,170,164,220, 53,220, 99,111, 77,155, 96, 5,254, 63,117,245, 47, 86, 6,249,178,113, 16, 10,106,107, 15, 51,
-248,160,235,109, 24,234,200,171,167,200,145,209, 1,169,108, 25,176,201, 79,182, 28,209,141,131, 8, 52,155,196,197, 71, 8, 86,
- 41,171,230,231,217, 38,118,208, 87,202,172,115,201, 22, 46, 15, 91, 71, 63, 47,125,236,144,101,137,115,233,147,166,117,159,250,
- 33, 88, 16,168,100, 34,251, 12, 40,113,213,180, 0,131,116,110, 48,185, 15, 85, 94,213,104,233,151, 4,184,208,190,207,233, 97,
- 4,157,197,174, 39,237,207,141,250,191,147, 57, 15,253,110,219,228, 4, 91, 46,242,131, 67, 26,247,137,175,227, 26,103,164, 53,
- 68, 77, 91,138, 10,112, 64,152,235, 13, 99,230,107,188,207,136,244,135,198,255,125,185,244, 89,186,139,236,232,155,131, 65, 4,
- 52,188, 81,129, 96, 49, 21,142,188, 12, 86,176,104,195,247,187,165,235,149,187,243,148,183, 73,227,248, 97,206,143,182,239,132,
- 85,145,241, 82,145,149,147, 58,227, 99, 24,182,146,166, 51, 79,142, 18,163, 25,214, 48,238, 17, 51, 19,234,119, 40,129, 25,249,
-220,252,242,122, 76, 94, 44,238,123,119,107,141, 89,123,225,221,141,196,129,130, 86,117,185, 36,110,149,187,174,186,139,207,184,
-132, 49, 71, 23, 1,232,231, 51,194, 16, 12,130,236,104,220, 88,214, 22, 38, 81,153,165,205,129, 75, 33, 35, 71, 9,167,177,109,
- 62,104, 77,107,186, 67, 13,110, 4, 35,172,117, 84,133,121, 49,102,160,142, 35,163,192, 81,202, 84,147, 82,136, 84, 44,150, 38,
-191,153,167,137, 95,155, 37, 92, 88,131,150,104,120, 87, 64, 15,101,220, 31, 42, 41, 92, 11,218,163, 76, 50, 29, 17, 24,176,155,
-164,150,149, 57,147, 29,116, 80,170, 32,191,171,223,129,106, 13,179,209, 52,174, 27,243,162,136, 18,183, 25,131,177,209,135,162,
- 6,152,200,241, 77, 98,123,238,114, 52,101,203, 30,107, 16, 8,239,123, 89, 56, 24,205,130,107, 71, 15,167,182,158, 35, 19, 10,
- 99, 20, 12,136, 25, 43,224,146, 93, 3, 92, 29,214, 13,101,136, 61, 17, 54, 64,173,129,114, 3,107,162,240, 25,107,176,249,205,
- 93,188,133,162, 83,113,226, 46,142,214, 50,206,157,195, 31,244,220,137, 18, 79, 44,240,176, 42,106,155,232, 19, 90,226,180,140,
-213,123, 60,186, 25,202,215, 47, 6,220, 99, 88,247, 27,171,109,174, 37, 88,174,226, 61, 99,126, 25,146, 66, 10,160,232,187, 96,
-231,101, 56,228,125,223,142,140, 77,131,251, 64,155,121,103,163, 35,197, 36, 34, 90, 27,231,232,103, 26,220,255,237,207, 63,242,
-220,195,129, 13,237,244,249,210,140,173,208,181, 1, 74, 25, 29, 28,211,226,143,154,238, 91,163,193,128, 46, 25, 76,108,138,224,
-172, 88, 24,213, 83,255, 96,117, 56,208,251, 30,203,185, 6,192, 95,254,236,107,234,134,207,242, 29,218,126,162,203,121,122, 61,
-145, 71,187,107,252,253, 40, 66,126,249,245,115,249,253,183, 63,234,181, 15,220,198,185,144,161, 75,125,227, 8,135,147, 94, 94,
-152, 14,200,189, 6,150,174,159,109,232,206, 65,139, 28,232,248, 79, 31,237,147,162,120, 1,209,160, 90,147,235,126,139, 66, 50,
-152,223,231,238,222,184,156,143,117,189,245, 89,209,210,165, 17,231,118,214,213, 68, 54,231, 58, 5,192, 26,106,137,159, 29,172,
-201, 15,199,183,242,199,239,103,242,236,209,174,110,188,103,178,208,119,243,187,223,252, 87, 61,223, 70,148, 92,229,136, 5,154,
- 7,186,142,199,119, 83, 82, 79,231,212, 49, 40,201,160,194,251, 4,206, 35,141,221,127, 3,231,114, 93,241,115,210,216, 58,155,
- 92, 23,104,197, 67,185, 77,147,205,145, 76,101,176,122,224,231,102,194,142, 87,234,166, 57,227,121,193,179, 24,235,248,108, 84,
-104,113, 98,157, 69, 36, 56,211,197,145,108,111,108,144,142,119, 7,109,134,114, 65,170,219, 31,222, 28,233, 62,235,201,135,203,
- 91,118,119,112, 94,156,220, 76,249,236, 1, 92, 60,187,205,229,197,254,138,198,192, 27,217, 90,217,148,191,255,249,115,249,167,
- 63,188,211, 4,194,146, 9,124,198,187,139,169, 60,222,234,201,159,222,223,114,236,122,175,215, 1,149,185,170,156,115,204,195,
- 36,187, 54,172,193,157, 38,114, 16, 19, 98,119, 21, 54,183, 89,206,243, 27,251,220, 40,112, 53, 41,182,156,169, 39,222, 38,103,
- 21,142, 23, 18, 85,141, 14,119,228,142, 96, 1,108,148,184,122, 88,144, 5, 12,173,244, 80, 57,199,222,130, 14, 85, 56,121,224,
-185,123,125,121,123,155,230, 25, 46,134,130, 0, 65,216,190, 87, 78, 46,148,222,100, 20,117,211,170,183, 54, 27,231,248,206,135,
- 10,200,244, 0,226,227,156,189,172,124, 35,183,205,172, 3,217,153,102,217,137, 27,101, 76,102,243, 70,174, 51, 76,152,153,105,
- 70,168, 98,171,166,115, 80, 4,190, 31, 2,177,235,210,195,210, 49,241,170, 18, 73,132, 56,104, 47,119, 58, 86, 64,251, 51, 73,
-161,162,144,105, 20,151, 30, 52,250,208,241, 46,140,210,130, 3,121, 62, 95,186, 8, 68,198,195, 6,135,119, 65, 5,165,148, 7,
- 43,146,131,118,102,193,138,153,177,216, 12, 12,246,183, 56,180, 57,123,243,249, 43,244,142,225,190,133, 23, 14, 74, 72, 96, 13,
- 12,252,123, 47, 97,188,224,230, 27, 65, 21, 16, 93, 2, 84, 77, 1, 25,156, 38, 54,191,193,225,120,117, 51,230,215,240,236, 64,
-123,137, 56,179,204,168, 97, 29,148,243, 8,120,171,172,170,192, 6,103,119,129,252,249,210, 16,189,101,222, 36, 48,104,187,178,
-229, 71,106,213,130,153,118,236, 24, 3, 28,220, 56,248,241, 57, 97,188,146,166,118,125, 52, 42,193, 6, 70,144,208,195,247,228,
-226,214,244,241, 61,224, 66,106,118,198, 25,182,190, 23, 61,100,145,120,220,142,151,205,172, 27,135, 2,127, 39, 15,173,154,238,
- 86,165,171,222,133,121, 98, 86,197,205,232, 69,124, 68,129,123, 98,130,228, 9, 86, 21,214,155, 35,255,115,199,112,224,152,165,
- 31,179,115,220, 43, 90,222, 86,114, 57, 6, 8, 71,159, 9,172, 73, 23, 5,131, 22,171,139,133,249, 40, 4, 61,248,202,231,101,
-148,148, 45, 2, 69, 48,162, 42, 85, 84,219,236, 18, 51,202, 44, 72,181, 82, 94, 45,162, 96, 74,226,221,151,224,216,135,119,130,
- 96,143,223, 11, 51,152,249,204,254, 12,215,134,177, 86,187,229,150,159, 18,177, 83,146,210,211,160,101, 65, 29,227,130, 22, 58,
- 34,166,223, 15, 4,255,210,189,209,115,111, 23,145,190, 23,133,214, 55,232,173, 17,147, 60, 94, 11, 0,131,208,125,143, 51,182,
- 39, 73, 28,152,207,205, 52,166,212,235,237, 98,190, 94, 53,138,132, 84, 71,203,132,129,214, 90,237, 37,219,239, 28,117, 84,226,
- 74,143, 1,224,106,193, 21, 29,159,118,214,230, 63,177,175,195, 56,171,246, 36,179,176, 94,191,143, 22, 18, 90, 90, 6, 81, 13,
-130,113, 35,227,185, 3, 29,253,250, 98, 33,127,245, 89,204, 10, 28,136,106,236, 23,172,239,235,234,142,109, 92,164, 73, 24, 97,
- 44, 32,179, 59,128,118,184,141, 18, 48,166,192, 45, 97, 30,203,247, 84, 71, 78,135, 45,100,109,109,131,123, 26,215,247,197, 39,
- 47,228,251,215,239,141, 81, 18, 91,119, 11,225,103,198, 10,191,110,146,123, 4,125,112,207, 65, 9,246,129, 16, 27, 39,208,233,
-136,189,179, 88, 2, 95, 3,126, 55,254, 44,170,104,198, 52, 35, 0, 48,146,151, 31, 78, 53,177,104,113,175,237,108,111,203,233,
-217,145, 6,198,165,108,175,229, 90, 81, 78,137,192,127,246,120,151,227,156,243,171,177, 92,141, 81, 0, 85,114,116,117,175,207,
-164,242, 81,159, 21, 59,196,107,100,102,236, 2,241,151, 1,220,193,244,185,192, 12,229,183, 47,223,112,207,236,108,172,145, 83,
-159, 3,244,138,238, 1, 71, 44,186,175,250, 6,124,156, 64, 45,175,219, 49,249, 86, 92, 59,198, 88, 73,212, 8,122,161, 91,131,
-164,231,235, 39, 67,249,254,172,166,136,205,191,253,254, 15, 50, 31, 29,233,235, 65, 18, 35,172,150,137,122, 7,229, 88,207,139,
-223,189, 60,228, 62, 40,157,238,140,115,202, 52, 52,133, 9, 90, 24, 63,146,241,145,233, 57, 15, 15,123,125, 30, 3, 77,104,176,
-116,201,204,138,161, 93,209,225,158,122,188,179, 46, 63,255,116,151,156,119, 8,240,172,116, 0,152, 45,228,199,195, 43, 57,209,
-132, 8, 50,177, 40,126,114, 58,209,197,156,211, 35,161, 74,251,125,254,217,139,157, 29,121,171,207, 15,231, 42,206,234,189,173,
- 77,198,144, 15,167,231,156,121,255, 70,223,215,179,157,190,140,110,111,229, 40, 41, 8,198,187,214,100,248,249,193, 14,187, 22,
-183,122, 62,159, 76,112, 6,198,114,125,191, 32,122,254,215,127, 62,147, 74,147,106,250,199,243, 28, 45, 26, 21, 76, 90, 68,235,
-123,129, 32, 13,192,158,145,171,116, 70,220,139, 54,182,187,212,243,154,163,113, 61, 43, 96, 15,156, 6,183,179,198, 67,193, 3,
-130, 61, 44, 83,153, 99,224,151,168,225, 3,199,113,220, 4,226, 0,218, 98, 11, 51, 88, 96,122, 75, 61,242,246, 89, 0,103,133,
- 23,144, 59,165, 45,204, 21,195,161,106, 42,105, 6,192, 11,109, 83, 86, 10,177,233, 69, 86,238, 73, 30,248,230,129, 10, 55, 39,
-253,203, 90, 87, 0,215,228, 14,182, 64, 32,142,189,210,197,127,195,213,135, 51,216,123,171,174,113, 32,209, 74, 86, 3, 3,179,
- 64, 7, 70, 49,200, 38,214, 74,198,103, 62,218,221, 98,198, 45, 94,161, 6, 16, 21, 22,186,161,181,197,192, 11,174,114, 71, 84,
-172, 3,213, 16, 20,136, 34,102, 22,159, 49,243, 68,144, 67,181,179,185, 62, 52, 33, 27, 87,117,226, 4, 48, 50,137, 75,113, 22,
- 2,130, 8, 36, 54,151, 75,171,188, 48, 31, 95, 93, 29, 90, 98,130,214,216,120,226, 92,117,104, 42,153, 31, 54,238, 9,128, 54,
- 75,186,140,222,196, 22,190,155,122,224,154,208, 78,135,105,129, 33,162, 77, 47,250,158, 74, 70, 54, 83, 71, 27, 19,179,197,155,
-209, 61,171, 11,163, 8, 45,104, 63, 90,123, 98,196, 36, 1,155,121, 6,153,213,146,137, 16,231,201, 56, 20,122, 45,107, 83,226,
- 16, 92, 88, 53,128,224,182,161,155, 13,207, 10,198, 41,104,181,146,163,188, 92, 50,136, 6,229,183, 96, 28,131,247,136, 10, 31,
-223,219,120,227,224, 0,238,162,253,132,108,125, 73,161, 11,106, 93,107, 85,129, 63,195,181, 4, 15,238,194,241, 17, 12,160, 64,
-205, 23,126, 40,235,245,176,211, 48,236,152,116,103,110, 85, 19, 54, 20, 44, 82, 33,206, 2,121, 81, 45, 81,141,181,144,151,158,
- 8, 10,219,117,164, 36,210, 67, 60,243, 36, 80, 15,126,125,239,243,210, 90,222,104,119,190, 63,187, 53,218, 90,167, 75,140, 3,
- 1,129, 30,128,136,234,119,124, 3,116,182,215,225, 54,213,141, 41, 89, 59,209,207, 2,127, 58, 14,207, 81,239, 21, 30,205, 27,
-171,125, 86,240,120,102,104, 47,226,231,233, 22,231,186, 10,180, 26,214,103, 5, 28, 12,100,106, 43, 31, 85, 1, 4,135,185, 35,
- 90,199,248,153,245,181, 46, 52,174, 88, 57, 7, 3,161, 89, 94, 83,125, 14, 7, 52,245,224,227,121, 83, 49,206,137, 34, 47, 56,
- 98, 0,152, 15,114,180,151,247, 54,147, 39,168,176,211,163,240, 7,174, 11,115,240,233,124,198,207,193,225,109,128, 89,173, 44,
- 52, 8, 46, 40,237,154, 55, 26,237,216,150,216,111, 49,149,214, 34, 2, 67,107,135,116,134, 89, 63, 71, 54, 11, 75,154, 51,183,
- 10,230, 22,119,117, 61,124,198,162, 54, 65,161,216,233,142, 38, 65, 93,187, 86,133,153, 30, 49, 8,195, 65, 79, 15,102, 84,179,
-239, 79,111,245, 0,223,144,189,157, 13,226, 18, 80, 21,173,173, 12,100,125,125, 85,147,161, 25,185,197,120,199,196, 16,136,119,
-223,240,126, 53,192,161, 98, 71,151, 1,207,175,160, 35,158, 41,177,245,250,185, 28,106, 80,253,119, 63,253, 82,215,254,154, 6,
-217, 45, 13,178,103, 76,126,104,217, 75, 89,220,146, 73, 31,196,192,177,175,193, 40, 92,208,120,166,114,255,248, 68, 38,112, 47,
-119,255,130,168, 29, 83, 55, 28, 78, 94, 8,230,115,184, 43,234,131, 3,149,169,204,151, 84, 52, 92,230, 17,157,212, 46,110,167,
- 84, 83, 3, 40,243,242, 42,213,251,105, 17,168,134, 66, 8, 9, 1,198, 85,169, 22, 47, 51,125,206, 49,207, 64,173,126,151,173,
- 6, 72,139, 74, 15,231, 40, 90,218,229, 80, 63, 67, 3,248,217,245,141,108,234,126, 5,144,116, 52, 53,211, 22,180,144,209,121,
-186,188,185,225,117, 98,252,130, 78, 12,248,230,109,173,202,139,184, 71,209, 29,130,110, 49, 90, 64,229,168, 39, 19,214, 48,170,
-230,227,235, 57,169,164,127,243,147,167,242,226,233, 99,253,224,223,200, 31, 79,167, 76, 36, 80,152, 28, 68, 54,234, 10, 64, 60,
-128, 31, 33,181, 26,187, 37, 48, 52,114, 58,236, 38, 89,231,182, 71, 74, 94,205,241, 19,186, 77,248, 62, 36,201,144,223, 5, 69,
- 17, 96, 84, 19, 78, 67, 66, 93,107,193, 50,145,211,155,156,251,253,103,159,172,211,102, 21,180,182,246,243, 68,131,241,138, 62,
-219,150,252,111,191,122,163,123, 76,223, 57,129,174,133,169,185,101, 48, 95, 58,149, 36,123,170,159, 85,201,150,174,149,215, 71,
-199, 44,152,112,221,192, 31,100,250,254,158,237,109,145, 34,141,103,133,100,167,136, 82,217,218, 72,228,228,116, 46, 7, 91,171,
- 60, 19,240,187,113,253, 39,231, 26,140, 95,172,241,243, 47,238,150, 28, 83, 32,121,198,216, 39,176, 18, 82,183, 3,159, 85,118,
-206, 98, 12,105, 35, 96,196,169, 54, 11, 81,140, 69,168,116,168, 63,135,164, 33,109,185, 59, 91,224, 17, 7, 78,121,229,102, 45,
-117,224,141, 59, 82, 61, 84,246,213, 71, 58, 95, 1,157, 26,137, 5,217,216,171,234, 0, 66, 11, 84, 57, 34,212,189,125,242, 96,
-222, 82, 62,136,141,200, 95,206,243, 65,185,192, 5, 7, 79,108, 67, 6, 39,141,164, 44, 51,240,172,245, 0, 32,171, 42,111,141,
- 10, 41, 46,104, 23,226,176,203,220,182,207, 84,168, 28, 21, 9, 41,194,194,228, 13, 73,159, 90,154,202, 28, 50, 84,250, 28,235,
-223,216,240, 56,184, 87,117,145, 4,161,149, 0,238, 50,132,166,181,213, 17, 24, 81, 5,116,124,236, 64, 60,129,190, 0,124, 29,
-159, 7, 47,106,203,182,160,112,183,176, 5, 0, 37, 47, 88,208,234,239,203,231, 57, 69, 61, 2,112,170, 96,139,200, 42, 9, 48,
- 11,240, 79,163, 29, 70, 4,212,225,144, 65, 32,132,186, 21, 2, 4, 5, 74,124, 22, 7, 32,153, 45, 98, 3,190, 96, 4,177,169,
- 11, 12, 47, 92,146,184, 65, 16,207, 22, 70,151,194,108,202,128,141,102,187, 59,163,148,164, 6, 41,253,217,171, 91, 67, 79, 99,
-133,181,171,140,207, 59,128, 30,131,228, 47,223,169,254, 28, 90,115,188,102,108,164, 97,159,223, 3, 43,221,218, 13,104,160,216,
-149, 46,173, 10, 20,151,203,196,102,180,153,116,219, 4,118, 42,147,231,109,145, 19, 60,215,223, 57,225,181,208, 74, 51, 53,220,
- 68,226,250,253, 56, 20, 97, 17, 58, 37,119,181,144,241,233,149,108,111,172,104, 38,190,209,160,236,111,239,238,153,200,193, 8,
- 5, 75,241,236,242,134, 64, 47, 84,204, 1,173,143, 74, 27,193,197, 0,118,210,128, 69,151,185,185,124,149,254,188,136,251,136,
- 31, 16,215, 45,162,214, 45,233,108, 71, 22, 60, 87,122,134,164, 46, 64, 25,210,103,211,194, 33, 19,215,180,236, 44,181, 52,205,
-244,158,102,243,186,209, 76, 96, 18, 25, 89,130, 9,159,239,151,103,247, 20, 64,225,239,111, 25,159, 29,159, 13,100,107, 26,181,
-108,148,197, 96,109, 92, 91, 38,204,250, 81,119, 83,179,217,164,129,196,104, 46, 90,172,241, 48,188,155,131,123,188,100,213, 93,
-235,123,189,158, 85,114,122, 87,176,146, 66,117, 89,148,161,109,109, 29, 21, 4,220,124,225,114,197,169, 9,166,148, 62,207, 35,
- 58, 60,180,229,171,208,233, 64,112,155, 91,231, 78, 12,159, 80,214,166,127, 64, 74,164,171, 63,218,231,213, 78, 3,179,103,103,
-246,190, 86,125, 99, 86, 44,153, 56, 38,166,160, 10, 29, 41,125,172,236, 11, 51,191,128,180,107,111,192,142, 77,144,243,101,130,
-164, 73,132,189,136,218,153, 32,174, 66,136,214,112, 33,238, 98,104,218, 25,224, 85,175, 13, 87,216,254, 60,190, 41,228,139, 39,
-125,121,151, 24,239,159,110,130, 75,204, 96,167,228, 75, 67,232, 5, 29, 13, 60, 87,118,140,106, 27,137,193, 27, 5,215,114, 63,
- 27, 81, 88,103,122, 15, 1,171,133, 6,144, 37, 1,132,176,200,156, 79,239,229,233,193, 35,185,184,188,176,115, 39, 55,243,150,
-118, 59,114,198, 75,105,163, 64, 80,212,150, 53,245,245, 77,118, 35,162,220,105, 93, 61, 40,118,150,110, 74, 4, 16, 98, 78,165,
-195,123,121,118,176, 79,157,111, 0, 49,183,233, 7, 63,144,255,247,119,127,150,190, 91,232,190, 62, 46,229,151,235,123,148, 72,
- 69,149,184,161,235,255,101, 9,140, 64, 46,187,235,125, 41,150,125, 57,190, 28,155, 3,163, 7,199,202,245,242,159,104,176,186,
-156,220,243,153,219,185,159,200,158, 38, 40,245,197, 5,139, 26,208,186,206,198, 51,217,233, 71,174,120,153,112,109, 16,120,153,
-160, 83, 53,167,203, 93, 94,216,216,135,178, 4,122, 70, 3, 65,142, 61, 7, 96,217,245,164,144, 71,213,149, 44,170,132,180,199,
-255,248,119,127, 69,166, 4, 18,237,181, 65,135, 22,170,189, 14, 60,222,103,242,250,195,169,158,113, 51,214,230, 89,106,184, 23,
-210, 73,211,184,241,161,192,251, 5, 70,103,158,215, 76,222,128,115,194, 62,130,248, 11,206,239,121, 81,211,231, 29,123, 13, 1,
-255, 86,171,217, 63,190, 58,151,255,251,119,239, 52, 81, 26,177, 10, 38,238, 73,239,255,169, 6,118,140,152, 18,103,192,192, 34,
-186,213, 45,104,213,250,100,107, 69,214, 86,215,101, 86,198, 60,115,118,215, 55,184,166,126,252,112,204, 51,255,241,206, 22, 93,
- 4, 91,173,142,238,237,174, 60,173,161,137,209,149,237,213,140,128,191,243,139,130,221,211,205,149,185,188, 59, 31,201,163,205,
-129,220, 78, 11,249,247,223, 28,200,255,254,155, 67, 38,192,100, 46,181, 0, 62, 70, 52,181, 81, 47,214, 52, 44,110,113,157,176,
-140, 6,157, 13,200,119, 60, 47,104,210,227,158, 81,120, 98, 63, 1, 24,156,236,239,238,253,175,161, 50,162,176,132,219, 34, 18,
- 16,151, 88, 27, 52,108,146,208,110,109,230,217,141,218, 88,237,206, 77,115,167,131, 85, 13,106, 53,245, 12, 52, 73,157,134, 4,
-218, 85, 28, 53,243,186,192,101, 7,146, 54,203, 82, 55,107, 49, 35, 1, 90, 21,102, 45, 63, 60,157,171,237,255, 78,190, 34, 90,
-199,165,169,241,216,220,223,149,226,150,139, 70,125, 11,135,108,176,120,109,185, 85,171,153,165,164,244,135, 70, 75,165,114, 3,
-137,144, 80,164, 78, 87,163,141, 34, 21,164,210, 70,115, 91,124,182, 31,126, 15, 15, 25,127, 6,161, 85, 14,254,238,245,232,142,
- 25, 87,184,142,216, 91,222,184, 70, 84,222,136,108, 8, 92, 1, 64,199, 64,133,197, 9,190,243,202,192,109, 37,133,149, 7, 81,
-144, 94,181,155,228,102,201,138,162, 36,162,218, 0,109,225,122,144,100,116,218,173,134, 61, 0, 52,124, 72,151,128,220,165, 34,
- 22, 54,172,119, 2, 80, 41,131, 31, 28,240, 5,248, 27,200,243, 65,191,195,207, 66,133, 22,128,131,129, 95,110,215,251, 48, 59,
- 55, 92,130,153,137,176, 77, 77, 90, 77,193, 36, 10, 85,106,230,212, 46,227,255, 91, 66,199, 57,106, 64,152, 75,160,147,197,141,
- 95, 64,224,103,162,130,223,213, 96, 13,138, 27,222, 5, 90,132,224,131, 99,108, 48, 71,130,180,204, 77,240, 37, 65,203,116,194,
-231,135,192,139,128,142, 77,242,116,127,155,215,132, 4, 13, 7, 20,170,123, 4,201,156, 1,211, 3,186,183,200, 73,191, 1,208,
-172,149, 54, 14,132,179,185,233,111,119, 90,230,164,135, 32, 79, 11,202,218,180, 22, 76, 60,197, 14, 69,220, 31, 84,212,144, 88,
-173,246, 59, 6,158, 3,255, 62,179, 68,240,222, 15, 15, 92, 51,218,119, 4, 25, 58, 26, 31, 7, 55,156,225,240,123,112,141,160,
- 17,233,202,224,129,143,202,253, 78,191, 54,209,138,232,126,137, 25, 96,201,170,239, 12,202, 97,147,133, 68, 26,128, 48, 42,163,
-242,214,162, 36,189, 8, 14,109,198,193, 55,158, 51, 2,111, 69,181, 58, 91,171, 11,223,243,102, 7, 16,121, 85,180,228,122,102,
-219,221,141,120, 16,244,197,129,107, 68,229,122,226, 26, 92,243,208,102,165,222, 64,102,190,214, 91,235,219, 76,210, 72,211,195,
-232, 32, 53,229,185,118,171,195,117,139,125,218,239, 14,204,218,151,104,245,148,221,145,218,117, 35,140,139,107,250, 23,166,129,
- 81,242,124,192,172,158,246,186,181,153,122, 4, 81,170,208,190,199,158,221, 88, 93,117, 12, 69,225, 14, 94,166,151,145,186, 5,
-111, 95,171,108, 10,173, 80,144,170,150,131,149, 72,190,125,123, 41,231, 55,119,236,174, 28, 95,140,137, 71,185,153,204,137,220,
- 30,209, 63, 30, 7,250,140,123,181, 36,186, 59, 98,235,118,101, 96, 2, 55,176, 0,109,235,154, 41,200,113, 31, 16, 19,210,233,
- 89, 98,141,234,250,232,226,198,193,141, 70, 33, 68, 11,118,186, 40, 89, 57, 46,156,189, 17, 40, 75, 16,169, 49,222,117,236,251,
-176,199,110, 88, 80,245,196, 62,159,211,141, 48,163, 8, 13,102,168,159, 62,222,147,161, 6,237,227,211, 27,118,181, 40, 12,165,
-207, 15,157,157, 96,153,138,231,136, 57, 62, 70, 10,149, 75, 53, 79, 73,249, 43, 92,213, 79,154, 46, 9,214,102,228, 45, 95, 2,
-120, 53,200,222, 99,157,234,181,127,243,124,151,137, 6,206, 84,220, 43,146, 59,235,158,153,172,120,175,157,152, 50, 96,218,105,
-222, 19,238,111,208, 31,240,153,213,197,210, 59, 66,122, 45,154,108,246, 50,116, 71, 35,249,244, 96, 77,131,210, 6, 71,139, 28,
- 7, 69,226,222, 1,134,241, 64, 82, 14,139,217,159, 60,219,229, 58,195,140, 28,251, 20, 35, 45,235,154, 89,226,141, 53,132, 98,
- 10,158,243,231, 87, 87,242,254,248, 66,254,244,234, 72,190,251,241,181,188,124,253, 78,254,240,231, 87,242,195,155,183,114,122,
-126,174,215,191,202,202,119, 54,187,115,247, 66,155, 93, 99, 63, 33, 96,227, 76, 1, 72, 22, 35, 45,234,124,234, 30, 91,235,197,
-164,170, 29,107,113,176,210,210,243,161,213,167, 92,107,225, 35, 59, 38,143, 76,132, 68, 43,248, 59,121,249,225, 82,118, 6, 34,
-135, 23, 51,118, 34,186,169,129,145,159,236,174,243,172,126,115,118,199,125,242, 98,111,168,191,115, 74,173,249,160, 40, 73, 89,
-115,221, 59, 56,203,151, 84, 87, 76, 57, 87, 15,194,108, 44, 60, 80,204, 76, 38, 26, 47, 86, 12,219,226,194, 70,233,176,223, 39,
-240, 4,139, 26, 89, 47,162,126, 23,122,205, 45,211, 79,238,117,202,198,107,123,238, 42,103,145, 7, 92, 6, 89, 7, 74, 4,101,
-186,216,171,234,196,131,112, 99,186,130,214,137, 7,162,150, 59,182, 5,199,181, 48, 27,231,129,207,122, 63,119, 87,166,204, 91,
-200, 73, 83,189,211,198,213,221,213,152,193,198, 15,130, 50,104, 25, 91, 38, 31, 20,234, 50,115, 97,130,150, 96,199, 20,134,186,
-108,211,180,216, 78, 41,220, 89, 10,213, 46,117,117,193, 21,205,140,246,132, 86, 46, 42,193, 53,221, 28,180, 96, 77,147,134,170,
- 7,138,140, 46,183,134, 6, 24,170, 16,220,198,197,245, 45, 95,232,250,234,128,136,118,124, 30, 4, 45,112,133,231,186, 24,192,
-161, 12, 92,101,180,229,205,195,190,148, 85,253,126, 44, 14,204,190,145,164,172,174,174, 88,117,177, 88, 54,115, 68,124, 6,144,
-175,236,162, 68,210, 80,207,202,216, 56,237, 22,164, 23,188,214,225,112, 96,248,129, 60,111,124,155, 49,127, 94, 54,214,170,210,
-128,212,194, 8, 6, 7, 2, 50,219,218, 81,225,248, 58, 14,174,202, 3,145, 57, 5,197, 30,240,221, 29, 77,223,229,148, 0, 18,
-231,218, 38,238, 62, 87, 24,128,142, 99, 16,204,217,170, 37,127,231,194, 91,221,120,103,115,175,186,224, 64,214,110, 45, 77, 70,
- 85, 23,103,150, 5,139, 89, 51, 33,225, 59,175,236, 48, 65,231, 96,145,207, 8,158, 89, 56,186, 31, 96, 37,108, 62,252, 51,154,
-186, 9, 6, 64,101,122, 31,135,151, 35,182,164,130,220,237, 50, 55,125,229, 56,122, 0,102,210, 34,152,180,171,204,245, 18,226,
- 38,152,207,231, 49, 59, 53, 72, 36,113,104,210,216,163,165,107, 26, 2, 47,192,105, 64,110,181, 48,244,127,228,215,187,160, 60,
-104,161,193,120,193, 54, 39, 91,163,186, 22,239, 93, 92, 4,173,219,126,175,160,213, 25, 18, 97, 84, 76, 39,169, 57,255,165,101,
-204,235,203,138,153,180,128,136,117, 67, 14, 38, 98, 49,170,215,185,161,222, 33,136,195,182,119, 66,253,103,116,192,144,172,152,
-206,120, 97,179,102,253,190,161, 6, 31, 45, 39, 25,172, 56,102,200,243, 70,176, 40,165,227,150,113,255,105, 66, 2, 14,117, 43,
-118,111, 7,179,170, 13,146,199,144,158,197,124, 24,123, 50,107, 27, 61,109, 4,252,134,126,254,176, 63,212, 31,208, 0,154, 22,
-238,141, 46,164,216, 96,102,190,170, 7, 78,161,213,219,104, 50, 38,181, 9, 13,163,251,217,196, 20, 24, 93,106, 23, 10,105, 45,
- 58,176,181, 93,216, 70,247,122, 98,106,135,173, 84, 43,147,110,143,215, 9,211, 23, 4,239,168,101, 32, 66, 28,114, 28,253, 37,
-145, 35,221, 75,247, 37,136,154,174, 29,147,148,180, 98,177, 82,122,210,139,245,247, 70, 3,210,191, 84, 55,242, 78, 15,214,142,
- 6, 79,204, 37,113, 48,115, 20,167,223,135,179,100,174, 73, 22,218,235,253,110,159, 29,191, 52, 93, 88,194, 95, 46,185, 79, 17,
-172,230,169, 37,198,168, 84, 49,154, 72, 32,162,117, 31,203,222,206,182,124,243,213, 55,242,230,195,137,172,247, 51, 25,205, 35,
-202,132,214,165, 49, 49, 40, 64,180, 48, 9, 95, 4,143, 56,213, 53,232, 76, 25,122, 50,196,145,203,178, 66, 94,116,206, 36,104,
- 74,214, 81, 77,101, 59, 60,227,147,139, 43, 93,219,247, 50,154, 29,202, 55, 95, 60,149, 75, 61, 95,144, 56, 22,249, 84,190,125,
-117, 34, 63,255,116,139,207, 5,120, 9, 84,235,135,122,214,193,157,238,175, 94,108,201,201,229,101, 99, 79,141,206, 79,229,163,
- 82, 36, 28, 40, 36,134, 76, 84,192,218,104,241,156,220, 89, 31,202, 8,163, 48, 93,155, 63,127,190, 39, 55,250, 34,111,166, 53,
- 5, 85,184,134, 18,163,183,130,224,188,152,107,240, 73, 90, 46,190,101,239, 70,243, 82,206,187,137,129,210,125,187,255,104,159,
- 78,144, 87,183,119,242,234,162, 43,191,254,227,111,136,153,129, 2, 29,222, 85,225,227,138,152,123,182,146,237,141,129, 38,140,
- 67, 50, 94,112,190, 76, 11,115,245, 91,186,126, 69,226, 18,216,208,237, 67,103,133, 38, 94,149, 21, 42,109, 42, 7, 62,116, 22,
-201,184,161,169,143,158,135,211, 72,250,160, 18,183, 51,151,164,181,115,134, 29,149,194,232,167,149,174,219,221,141, 39,178,152,
- 94,115,255,237,110,172,203,245,237,185,124,250,108, 40,154, 63, 55,174,128,143,245,204,197,186,124,253,193, 64,116,155, 27, 27,
-114, 87,116,101,216,154,203,213,125, 45, 79, 54, 86,249,185, 72,202,159, 60,122, 36, 87,119, 5,147,191,133, 86,229,240,173,159,
- 59, 62,135,227, 73, 77, 40,231,149, 89, 17, 35,177,195,120, 19, 94,233,184,135, 69, 30,216, 32, 17, 1,136,151,183, 35,121,126,
-176,207,253, 93, 81, 31, 3,178,114, 16,141, 24, 12,120, 48,143,239, 39,132,199,103,110,194, 96,243, 63,243,123,237, 68, 93,115,
-108, 99, 75, 59,227, 75, 20, 23,160, 73,220,155,187,246,224, 96, 46, 81,102, 90,130,175,221, 83,144, 33,230, 65, 81,213,117,131,
-214, 13, 82,167,193,180,161,242,170,193,170,185,146, 0, 21,100,232,248,247,176, 41, 37,232,206, 47, 23,214, 49, 96,133, 23, 59,
- 87,185,101,202, 91,204,110, 90,108,235, 36,238,217, 14,245,160,253,158, 25, 82, 32, 91,183, 89,120,202, 96,135,249, 54,102, 84,
-108,229,234,130, 93, 95, 29, 82, 37, 10,243, 18, 86, 36,104,247,234, 75,202, 29,169, 91, 7, 75, 84,199, 32,156, 94, 92,210, 79,
- 24,224, 35, 32,204, 31,239,111,145, 26,130,141, 9, 20,176, 73,232,198,204,166, 10,167, 39, 12,251, 70, 99,227, 44, 27,242,156,
-186,152, 80, 37,219,102,171,216,118,159,187, 48, 74,139, 90,240, 57, 53,192,153, 85,214,102, 33, 91,186,102,120, 92,154, 53,107,
-234,213, 48,229, 76, 93,114,181, 40, 12,192, 71,218, 97, 48,186, 32,178,219,146,169, 64,163, 43,203,170,233,158,240, 80,204, 43,
- 62,143,202, 69,104, 10,103, 14,160, 18, 71, 82,132,224,119, 75, 14,171, 93, 31,241, 6,117,216, 60, 86,213,226,208, 49, 80, 99,
-253, 23,198, 47,152, 97,154, 19,209,220,225,145, 60,229, 89,245, 96, 99, 95,107, 98, 4,215,165, 26,159, 91, 47,154,214,221,210,
- 29,179,224,230,135,181,133,113, 4,178,218,173,158, 85, 7, 8,198,244, 35,240,132,114, 78,153,226,248,129,246,228, 52,161,210,
-169,128, 52, 37,138, 45, 72,198,110,170, 83, 20, 15,188, 93,155, 93,165, 46, 15, 28, 59,223, 31,116, 34,107,161,146, 11, 29,153,
-197, 34,102,164,183,115,107, 13, 91,235, 82, 19,162, 40,211,117, 87,186, 41,142, 39,193,152,255,102, 6,122,185, 43, 38, 4, 41,
-209,184, 68, 63,175,237,223, 67, 65, 65,180,185, 11, 75,140, 96,132, 86, 85,210, 0, 47, 67,182,206,192, 5,172, 3,214, 41, 40,
- 86, 75,211,252,230, 33, 87,106,130,167,193,118,161,255,108, 69,133, 62,243,142, 6,126,171,200,192, 47,199,225,129, 68, 5, 79,
- 2, 7, 7, 57,210, 98,163, 9, 40,140,225,175,149,193, 10,207, 4,172,143,254,160,227,244,186, 5,233, 52,148,101,133,196,101,
-103, 97,173,123,120, 21,204, 10, 23, 69, 50,209, 32,208,122,146,184, 77,228,117,201,145, 82,183,121, 55, 56,212,145,212, 0,101,
- 13, 16, 16, 28,170, 94,190,121,195,118,124,227,252, 72, 32,159,174, 19, 77, 10,240,189, 68,207,123, 98,143,223,191, 50, 24, 56,
- 98,125,202,231,139,179, 9, 69, 3, 19,124, 23,149, 10,133,200, 45,188,166,105, 63,107,116,202,243, 73, 44,207,182,135,242, 47,
- 47, 79,181,122,218,166, 19,217, 91,124, 79, 10, 78,183, 86,186,187,125, 89,209,235,101,194,236, 34, 93,137, 62,199, 39, 59,155,
-242,233,167,207,153,232,128, 57, 4, 65, 17, 0, 26, 87, 86,134,178,127,176,199,207,184, 29,141, 25, 48,158,106,240, 26,143, 47,
-245,185,181, 88, 81,102, 96,174, 44,204, 20,138, 21,121,157,234,215, 98, 34,170, 99,151,188, 5,138, 30,104, 67, 0,243,134, 89,
-151,103, 24,236, 92,113, 95,250,129, 76, 62,199,247, 6, 6, 68,176, 71, 49,130,125, 7, 77,245, 79,158,238,201,209,201,169,252,
-240,250,131,220,237, 14,100,119,179, 39,239, 79,239,249,110, 54, 53,176,143, 39, 87,114, 62, 42, 40, 90, 51, 97,199,106,238, 50,
-195, 54,238, 1, 96, 17,204, 13, 36,164, 93, 50, 23,114,202,109,163, 3,132,196,230, 63,252,252, 83,249,195,219, 19,210, 75,209,
- 57,187,210,138,184, 21, 37,126,142, 90, 98, 16,149, 19,221,199, 91, 28, 23,226,217,195,191, 98,163, 7, 42,163, 38,131,243, 25,
-231,221,160, 23,190, 63, 58,148, 86,103, 32,173,238,134, 22,247, 87,242,238,228, 59,202,239,162, 24, 91,237,181, 8,118,198, 94,
-129,212,237,197,205,173, 28,158, 93, 88, 33,226, 86,170,140, 19, 14,255,196, 8,137,227, 50,170, 7,102, 4,185, 97,138,147,231,
- 11,125,119,214,125, 69, 91, 59,170, 34,138, 38,161,133,223,211,100,237,147, 39, 95,203,254,134,158,253, 67, 99, 20,161, 91,133,
-130, 1, 14,117,223,189,187, 98, 37, 62, 91, 76, 73, 67, 59,120,242, 68,254,233,183,191,147, 95,236, 63,146, 15, 71, 26,248, 23,
- 35,125,166,125,226,175,144,228, 98,126,143, 22,121,197,142,193, 76,190,212,253,118,114,165, 69,216,106, 42,155,253, 92, 70,139,
-129,124,254,116, 67, 11,191, 59, 89, 93,216, 51,127,127,114, 38,239,175,231,242,201,254,154,220,106, 1, 48, 66,119, 21, 20, 72,
-208, 4,179, 21,118,124,113,135, 56,163,183, 53,153, 64,187, 29,206,135, 38, 12, 86, 52,160,232, 33, 40,122, 5,218,251, 61, 73,
- 17,100,113,104, 48,120, 85, 38,106, 79, 51, 21, 84,226, 56, 72,111,111,200, 11,133, 22,242,221,228,142,129,223, 14,184,172, 1,
-186,153,226, 91,101,186,200,142, 10,167,210, 19, 44,253,150,115,175,198,205,207,219, 40, 56,210, 28,228,116, 76, 43,108,102, 31,
-102,113,141,152,140, 75,154,210, 59,215,145,215,193, 17, 45,200, 70,150, 46,181, 26, 44, 71,225,216,131, 69,200, 13, 14,125,231,
-174, 1,118,168,228,166, 9, 12,230,141,147,169,102,229,117,206,140, 24,109,150,221,205,181,134,127, 78,158, 42, 37, 86, 19,130,
-205,140,223,158,202,141, 46,170,136, 92,116, 67,171, 39,240,249,141,210, 6, 48, 71,145, 24,221,100, 43, 3, 67, 56, 32,155,236,
-233, 11, 95, 95, 91, 97, 59,114, 56,236,243,154, 97,167, 10,174, 35,232, 56,152,169,161, 77,140,209, 4,102,237,120, 49, 70,210,
-136, 72, 57,170, 43,147, 78, 13,138,120, 61, 2,230, 80,237, 45,172, 30, 97,203, 7,227,200,204,101, 36, 75,206, 73, 17, 64, 80,
- 89, 35, 35, 93, 58,213, 11,200, 92,115,138, 18,175, 86, 10, 30, 48, 68,194, 79, 75,231, 40,219,117,183,169,246,101,160,180, 32,
-179,139,196,129,112, 5,231, 6,219,200,198, 64,128,160,156,197,242, 96,116, 51, 95,232,239,132, 64,140, 6, 36,116, 58, 8, 66,
-227,102,107, 55,162, 54, 8, 58,157, 94,198, 86, 41,192, 61, 0, 45,165,212,175, 94,176,202,253,216, 42, 55, 0, 22,209, 85,129,
-199, 57,186, 74,168,204, 3,127, 63,136,208,240,218,219,102,172, 18,164, 39,215,145, 24,232,245, 94, 94,141, 72,239,194,189, 61,
-218,221, 36,158,225,226,102,196,159, 69,242,132,131, 36, 74,109,166,140,231, 10,187, 69,182, 35,117,243,229,183, 38,209, 8, 64,
- 85,192,154, 32, 57, 51,230, 68,144, 47, 78, 92, 59,222,198, 71,156, 77,139,110, 76, 13, 58,232,174, 68, 82, 55,162, 67, 8, 42,
- 64,132, 47, 22, 51,190, 51, 84, 17, 29,112,211, 49, 2,139, 76,128, 2, 97,177,163,149, 57, 40, 71, 72, 34,145,104, 99,244,208,
-233,181,136,209,192,103,110, 2, 28, 40, 54,159,111,105,197,216, 95,235, 18, 84, 5, 22, 0, 19,194,188, 98,245,189,161,107, 15,
- 92,127,182, 0,161,138, 54,183, 68, 10, 73, 18,222, 49, 42,238,220,253,199,201,121,205, 50,118, 81,114, 23, 71, 33,247, 56,182,
- 54, 39,110,184, 98, 43,187,205,228,149, 93, 45,204,102, 57,199,236,178,106, 35,123, 64,255, 29,174, 86,251, 59,187,186,222, 71,
-154,160,109, 48, 57, 64,242,142,117, 57,158,140, 41, 18,195,118,118,171, 67,189,241,219,241, 88,191,111,141,137,222,181,158, 59,
-184,158, 62,171,147, 5, 91,248, 9, 15,207,121, 99,252, 18, 45,221,118, 53, 55, 94,114,199,101,136,185,198,208, 5,140, 13,121,
-111,218, 12,133, 73, 4, 59, 30, 3,235,227,228,118,206,128,244,243, 71,235,122, 6,244,245,172,232,202, 79, 14, 54, 53, 56, 14,
- 24, 4, 48,242,233,234,231,227,111, 38,198, 26,216, 47,175,117,205, 68,102,139, 89,150, 25, 41,138, 87,183,122, 95,145,105,235,
-255,240,225, 92,134, 26,176,162, 66,215,140,204,244, 29, 69,154,240,235,218,133, 16, 81,206,148, 73,127,110,201,164, 13,221, 16,
-204, 95, 81, 84, 45, 22, 53, 59,148, 64, 93, 47,124,100,152,101,160,229, 45, 77,113, 15,129, 19,149,246,157, 85,177,107,232,176,
-198,160,185,222,243,186, 79, 47, 71, 76,150, 95,233,231,239,108,172,104,208,236,202,143,199, 35,217, 90,105,201,129, 6,118, 24,
-188,192, 41, 12,115,120,188,227, 77,253,243,241, 44,183,181,202,206,103,108,173,241,194,246, 59,232, 91,253,206, 80,126,241,249,
- 83,249,238,232,146,231, 22,196, 95,254,244,246, 84, 43,195, 59, 82,223,240, 14,204,169,208,186,182,198,208, 75,224,110,174,247,
-110,140, 0, 24,173, 96, 63, 78,230,112,196,195, 56, 70,100,117, 56,212,103, 54,146,179,139, 51,121,250, 20, 24,156,158,204,167,
-155,250,251,215,228,236,234, 86,207,125,235,189, 66, 61, 17, 96,230,193,118,135,133,207,225,249, 21,247,119,160,154, 6,122, 42,
- 60, 5, 58,236,190, 34, 49, 31,104,178,211,213,223,217, 33,168, 24, 96, 50,104,111,116, 0, 12,118,240,105,226,254, 35,135,103,
- 99,185,208, 53,112, 53,186,210,160, 58,148,189,141, 30, 65,133, 0,207,165, 25,140,106, 54,229,248, 42,150, 15,103, 55, 76,166,
-244,102, 9,128,163, 84,175,238,243,127,123,117, 41, 95, 62, 79,101, 4,219,216, 8,157,147,115,125,103, 29, 90,180,158, 95, 93,
-235, 51, 31,107, 33,184, 46, 55,179, 90,239,173, 77, 16,235,197,184,144, 95,252,252,133,252,240,230,148, 2, 81,200, 79,254,244,
-250, 88,250,186, 14, 96,142,195,243, 38,183,142,212, 82,215,191,141,116,240, 94,238,204, 28,141, 98, 73,115,147,168,230,136, 43,
- 99,135,116, 81, 44,169,155,143,228, 39,197,193,194,195,169,238,112,214, 11, 41, 75, 4, 64, 28,118,247, 26,196,145,125, 12, 7,
- 67, 82,222, 58,173,117, 86,220, 12,174, 14,148,193, 67, 37, 55, 87, 55, 42, 56,148, 73,108, 25,187,233, 93, 87,141,233, 7,125,
-170,157,171,205, 64,221,137,121, 88, 4,247,179,212, 59, 3,156,173,147, 14,214, 54, 80, 29,102,244,110, 88,129,239, 91,186,177,
- 76,203, 53,198,113,192,143,198,214, 58,179, 42,113, 41,245,164,230, 12, 14, 0,139, 96,111, 26,121,231,160,224,131,137,104, 34,
-208, 75, 77,188, 3, 97,116,119,107,147, 27, 53,213,195,126, 67, 95, 10, 22, 83, 43,179,234, 19,207,162,214,195, 6,217, 82, 59,
-106, 91, 16,167,246,187,127,158, 25, 38,243,144, 66, 27, 39,213, 23, 15,176, 24, 50, 74,180, 63,215,181,226, 79,221, 95, 30, 40,
-224, 78,142,141,164,139, 65,171,220,227,139,107, 86,155,224,148, 50,232, 96,230,168,255,141,159, 99,146,210, 50,195, 5,108, 42,
- 32,188,219,173, 53, 86, 50, 88,228,248, 51,116, 1,240,103,153, 38, 7, 68, 62,186, 54, 59,170,186,153, 3, 32,131,236,109,167,
-213,114, 9, 94,211, 23, 8,192, 65,128, 55,176,177,239,167,134,137,200, 25,216,141,131,159,248,156, 27, 7, 13, 91,144, 64,243,
- 87, 25, 93,205,112, 32, 97,108, 0, 12, 64,237,134, 26,168,148,208,122,133, 98, 28,222, 27,158,255, 84, 3, 53, 18,195,121,110,
-146,152,200, 13,110,238,166,182, 17,245, 57,103,144,233, 4, 56,169, 64,155,112, 64,212,251,237,232,158,207,183,211, 49, 29,236,
- 41, 17,250,152, 89,149, 78,117, 20, 38, 93,156, 53, 45,103,114,113, 49,230,218, 66,114,138,174, 1,146,187,152,154,230, 49,105,
- 76, 21, 90,167,122,212,140, 33, 90,115, 58,114,251,220,140,127,150,116,173, 26,130,202, 20, 84,198, 16,188, 96, 80, 81,187,115,
- 95, 49, 3,200, 38,247,121,109,217, 48, 58,152,150, 86, 15, 74,135, 28, 35, 85, 70, 99, 58,120,180,195,153, 54,214,212,164, 92,
-152,250, 32, 90,121,165, 5,159,150,204, 53,120,104, 82, 85, 14,217,158,238, 68,246,243,160,135, 77,151, 70,207, 44,131,238,130,
- 30, 6, 43,200,222, 49,159,108, 67,105,202, 0, 76, 33,137,194, 38, 71,150,143,164,135, 99,162,218,198, 95, 61,138, 95, 0,117,
- 28, 19,116,122, 51, 94,178,123,197,153,126, 39, 53, 13,131, 8,212,197,109,206,230,176,119, 35, 6,228,182,241,219, 43,105, 40,
-143, 24, 31,236,107,242,139,206,222,185, 6,175, 13, 61,172,230,250, 92, 46,174,175,189,221,205,255,101,155,176, 40, 23, 60, 39,
- 46,245, 96,187,231,243,180, 52,190,204, 75, 6,219, 89,101,216,146,136, 10, 91, 70,223,196,251,159,233,126,221,213,247,176,185,
-185,169,135,254,141, 51, 62, 58,236, 94, 89,167, 79,207,138, 60,229,152,208, 52, 32,140,245,129,195,174,203, 22,106, 91,146,194,
- 88, 15, 53,215,123,187, 1,223,190,120,116,192, 36,225,248,236,220, 37,143, 99,158, 57, 55,211,165,236,174,164,178,181,181, 65,
- 44, 66,172, 95,123,212,170,229, 15,239,206,233, 60, 54,151, 54,103,155,239, 1,196, 28,232,245,102, 61, 3, 22, 70, 87,236,232,
-129, 13,129, 34,232,145, 38,165,120,254,147,229, 84, 86,239, 11,154,123, 64,151,125,111,163, 47, 31,206,187,156, 29,147, 87, 92,
-185, 42, 30,206,193, 18, 70,191,133,225,133,240,140, 42, 59, 11,109,236,104,237,100, 51,189,177, 46, 86, 44,198,182, 65,114, 60,
-236,111,104,130,113,109,251, 81,215,239,114, 98,128, 65,152,185,108,104, 16,203,167, 35, 13, 44, 35, 57,185,238,203,179,189, 33,
- 13, 68,128,250,223, 66, 48,167, 65, 84,106,197,149,239,113,124,102, 89, 23,164, 45, 87, 76,144, 44,225, 31, 77, 23, 46,144,149,
- 49, 72,253,249,253,189,252,245, 39,251,242,116,111,155,213,252, 83, 61, 39,222, 31,159,106,113, 50,109,176, 53, 96, 13, 76,167,
- 24,107,172, 24,104, 45, 43,229,100, 26,177,189, 12,183,178, 71,195, 13,141, 45, 99,121,250,232, 5, 85,251,190,127,253, 86, 34,
- 77,184,254,250,103, 95,115,238,142, 66, 1,179,124,156, 13, 8, 88,244,196,208,235, 60,210,119,119,161,239,200,100, 49, 44,177,
- 52, 77, 20,188, 23, 36, 47,125, 2, 19,245, 9,179,115, 6, 86, 9,226, 14,217, 71,145,141,181,196, 89, 82, 56,167, 54, 32, 64,
-116, 14, 1,159, 91,249,221,235, 75,185,253,205, 57,231,241,148, 76,166,137,149,117,188, 0,174, 59, 58, 62,100, 2,131,245,255,
-157, 94,239,198,218,150, 22,141, 83,130,137,123, 90,197, 31,105,181,253,211,207,158, 51,177,187, 71,247,164,219, 33,247, 31,123,
- 96,164,123,243,248, 52,145,255,241, 23,143,229,234,122, 33,111, 15, 83, 26,103, 97, 47,236,111,173,176,186, 71,130, 6,134,213,
-202, 80,207,243,137,185, 40, 98, 60,157,118,250,214,217, 92, 29,242,251,128,186,199,103, 14,168, 57,210,147,237,245,117,158,131,
-120, 62,123,219,155,220,231,255,191, 0, 3, 0, 4, 77, 15, 40,213, 32,193, 90, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 1,245, 0, 0, 1, 26, 8, 6, 0, 0, 0, 8, 90,
+206, 70, 0, 0, 0, 1,115, 82, 71, 66, 0,174,206, 28,233, 0, 0, 0, 6, 98, 75, 71, 68, 0,255, 0,255, 0,255,160,189,167,
+147, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 11, 19, 0, 0, 11, 19, 1, 0,154,156, 24, 0, 0, 0, 7,116, 73, 77, 69, 7,218,
+ 7, 20, 16, 36, 40,202, 81, 99, 29, 0, 0, 32, 0, 73, 68, 65, 84,120,218,236,189,121,188, 37,215, 85,223,251,221, 67,213,153,
+238,189,221,247,222, 30, 53, 88, 82,107,178,141,144,176,101,155,196,198,208, 96, 57,196, 16, 8, 96, 36,158, 9,216,143, 73,202,
+ 64, 18, 8,207, 45,243,224, 5,243, 1,131,213, 64,204, 20,130, 5,132,151, 56,196,196,178, 33, 60,242, 1,140,228,208,198, 54,
+ 96, 27, 25,121,192,131,108,181,102,245,124,111,223,225,140, 85,123,175,247,199,222, 85,167,206,233,219,163,186, 91,131,107,233,
+115,212,247,156, 83,167,106,215,174, 93,235,183,214,111, 13, 5,181,212, 82, 75, 45,181,212, 82, 75, 45,181,212, 82, 75, 45,181,
+212, 82, 75, 45,181,212, 82, 75, 45,181,212, 82, 75, 45,181,212, 82, 75, 45,181,212, 82, 75, 45,181,212, 82, 75, 45,181,212, 82,
+ 75, 45,181,212, 82, 75, 45,181,212, 82, 75, 45,181,212, 82, 75, 45,181,212,114, 81,196, 92,228,227,169,248,106, 2,187,180,102,
+171, 8, 61, 32,139,159,215, 82, 75, 45,181,212, 82, 75, 45,207, 1, 81,128,214, 90, 93,243, 19,183,222,244,251, 15,252,226,183,
+ 29,254,204, 47,127,251,177,159,251,158,151,254, 81,106,245,205,149,109,106,169,165,150, 90,106,169,165,150,103,185,167,174,128,
+244, 95,190,238,250,183,253,226,119,190,240,141,219,179,126,103,235, 92,167,245,234,175,190,246,250,175,121,225,214, 91, 62,252,
+185,131, 7,151,215, 71, 15, 2, 82,131,123, 45,181,212, 82, 75, 45,181, 60,187, 65, 93, 3,237,175,187,178,245,250,127,180, 45,
+191,161,127,100,137,108,249, 24,121,127,200,117,215, 93, 49,255,157, 95,115,245,183,124,225,201,101,243,197,167, 86, 63, 9,244,
+107, 96,175,165,150, 90,106,169,165,150,103,183,167,222,248,232, 35,171, 7, 23, 55,165, 55,190,234,234,185, 29,146, 11,110,109,
+149,124,109,141,249,109,219,236, 27, 94,243,226,175,115, 62,191,246,195,159, 61,248,119,192,177, 26,216,107,169,165,150, 90,106,
+169,229,217, 9,234, 0, 74,132,181, 63,249,236,202, 3,135,250,110,241,181, 47,218,124, 93,211, 88,178,126, 31,119,124, 9, 26,
+109, 94,251,170, 23,191,232,198, 43, 54,237,254,224,103,158,122,100,125,144,239,175, 47, 81, 45,181,212, 82, 75, 45,181,156,185,
+247,124,177,143,215, 4, 54, 1,151,125,205, 53,179,111,250,111,111,216,245,131, 87,180,108,179,215,203,192, 24,244, 37, 87,210,
+188,252,114, 30,122,234,216,234, 29,191,190,239,231, 63,240,192,147,191, 1,172,197,223,203,179,121, 50, 69,228,102, 96, 62,190,
+221,175,148,122, 94, 27, 37, 95,110,231, 91, 75, 45,181,212, 82,131,250,198,162,129, 57, 96,251,142, 57,251,173,255,227, 77, 87,
+255,187,175,217,209,217, 49,232, 59,192,163,182, 95, 70,235, 5, 87, 49, 18,207,255,245,187, 31,249,175,191,246, 71,159,254, 73,
+224,241, 56,222,167, 13,236, 34,178, 11,216,117,134,155, 47, 43,165,238, 63,195,253,222, 11,220, 18,223,190, 69, 41,117,215,243,
+ 28,212,159, 23,231, 27,141,147, 91,162,129,114,115,229,171,251,129,253,192, 61, 74,169,229,243,112,156,233,253,115,190,215, 96,
+ 45,181,212,242,229, 45,246,105,128,178, 7,102, 23,103,146,175, 92,236,216, 69, 47, 74, 77, 88, 10, 10,148, 82, 74,138, 79, 84,
+241,121,249,173, 5,218,153,147,254,143,254,201,225, 63,251,229,111,187,252,219, 94,185,173,179,121,148, 9, 44, 31, 99,208,158,
+ 33, 89,220,206,175,222,177,251,141, 55, 95,179,253,250, 31,121,231, 95,190,249,248,250,232,195,231, 9,216,111, 5,222,126, 22,
+202, 24,224, 30,224, 62,165,212,221,245,178,121,222,176, 12,183,198,215,201, 12,188,194, 96,121,167,136,220, 29, 13,151,167, 3,
+238, 55, 3,247,158,195,239,238, 3, 94,123, 78,231,185,119,247,153,220, 43, 14, 88, 5, 14, 1,159, 2,222, 15,188, 87,237,217,
+183, 90,175,148, 90,106,121,254,131,186, 2, 84,167, 97,110,254,217,215, 93,241,115,111,184,105,219,238, 77,173, 36,245, 74, 7,
+192,214, 58,188,148, 66, 89, 51,241, 30,173, 81,198,140,223,171,240,157, 71, 73, 38,202,231,214,162, 43,251,201, 93,134,239, 43,
+222,244,218, 27,190,250, 37,215,108,125,223, 15,188,227,190,159,250,219, 7,143,252, 46, 48,228,226, 83,241,183, 2,183,138,200,
+173,192,109,231,195,115,171,229, 25,149,191, 61,203,237,111, 7,110, 17,145,219,158,135, 94,179,137, 44,197, 60,240, 66,224, 54,
+224,151,100,239,238, 31, 87,123,246,253,230, 69, 51,180,166, 12, 16,181,103, 95,157, 40, 91, 75, 45, 23,201, 83,223,186,247, 91,
+174,122,199,191,124,229,165,175, 30,245, 60,226, 21, 70,171,224,192,139, 10, 47, 52,202,171, 0,189, 2,104, 21,124,123, 47, 96,
+ 64, 41, 21,252,125, 1,163,148,178, 90,153,232, 17, 7, 80, 23, 64, 4,175, 20,195,222,136, 27,175,216,182,245,222,159,251,142,
+ 95,255,151,191,241, 23,215,190,251,127, 63,248,243,192,145,243,228,181, 23,158, 16,167,241,214,170,239,239, 21,145,215,214,192,
+254,188,145,251, 35, 19,115,191, 82,234,190,232,201,207,199,107,125,123,101, 13,236, 2,222, 35, 34, 47, 59, 79,215,254,110, 2,
+189,127, 58,121, 38,214,217,102,224, 63,201,222,221,151,171, 61,251,126,162, 94, 34,181,212,242, 60,246,212, 27,137,222,245, 79,
+ 94, 52,255,114,233,102,100,131, 33,120, 31, 64,186,100,214, 11,127, 94,141,113,215,104,244,226,182, 8,238, 30,165, 1, 31, 89,
+124, 5, 37,194,107, 31,128, 95,235, 64, 10,154,176,139,209, 48, 99, 83,154,234,255,190,231,155,126,244,229,215,239,248,202, 31,
+255,237,143,236, 25,102,238,129,243, 1,236, 74,169, 83, 82,155,209, 59,127, 59, 99,154,246,230,168,236,239,170,151,208,115, 90,
+238, 6,238,222,200,243,142,160,125, 15,112,143,136,188, 51, 94,239, 2,216,207,215,181,191,167, 48, 34, 46,150,108,228,253,202,
+222,221, 41,176, 3,120, 53,240,102,224,166,202,215, 63, 46,123,119,255,153,218,179,239, 67,245,114,169,165,150,103,191,232,115,
+248,141, 25,101,254,216,239,127,234,200, 71,149, 30,210, 73, 29,157, 22,180,155, 18, 95,126,252,119,195,211,212, 35,112, 25,170,
+209, 14, 32,239, 61,120, 79,233,149, 3, 48, 2, 63, 0,223, 7, 25, 0,195,240, 94, 70,113,123, 65,196,147, 57, 79, 62,116,252,
+232,235, 95,126,203,189,123, 95,255, 63,175,220, 62,247, 29, 17,246,245,133,156, 36,165,212, 61,132,152,102,213, 99,186,181, 94,
+ 62,207,105,121,173, 82,234,142, 51,161,210,149, 82,119, 76,121,212,119, 62,159, 38, 66,237,217, 55, 82,123,246, 61,166,246,236,
+251, 61,224,171,129, 15, 87,191, 6,254, 85,189, 92,106,169,229,249,235,169, 35,112,236,206, 63,122,228,167,254,228, 51, 71,191,
+227, 69, 59, 90, 87, 40,208, 94,196, 23, 58,192, 75,128,236,222,200,235,151,188, 96,246,197, 63,244,181,215,236,106,218,166,246,
+222,131, 49, 65, 77,120,143,140,214, 81, 70,161, 47,191, 9,189,245, 26,212,220, 14, 84,115, 14,242, 33,190,123, 4, 89, 59,128,
+ 63,242, 32,228,125, 80, 45, 4,135, 19,240,235, 35, 94,125,195, 11, 94,240,254,189,175,255,157,127,252,150, 63, 48, 15, 31, 88,
+121, 31,227,228,189, 11, 5,236,251, 69,228,158,138,199,118,243,249,216,239, 6, 25,209,247,159,167, 76,235,106,134,255, 57,149,
+155,157,143,125, 92,140,243,157, 26,231, 25,237,239, 28, 60,228,187, 25, 39, 87,206,139,200,205,207,199,140,116,181,103,223, 80,
+246,238,254, 9,224,131,149,143, 95, 85,171,202, 90,106,121,254,130,186, 3,186,192,231, 62,248,208,250, 59, 62,248,208,122,139,
+141,155,216, 44,190,238,198,109, 63,240, 29, 47,187,106,103, 91,167, 58,247, 18,168,247,193, 0, 25,118,193,117, 49,215,189, 26,
+251,178,239,198, 92,245, 15, 78, 74, 33,200,210, 35,228, 15,125, 0,247,232, 71, 80, 38, 5, 17, 68,193,168, 55,226,186, 75, 22,
+ 55,253,207,159,254,167,255,241, 53,111,126,207,210,209,149,193,255,230,252,197,216, 79, 38,231,165, 14, 59, 2,219,237,209,219,
+191,121,131,239,247, 51,166,134,151, 79,178,143,183, 87,126,123,143, 82,234,238,202,126,111,103, 42,163, 59,238,243,174, 51,201,
+222, 23,145,219,163, 55,186,235,108,199,117, 33,206,247, 20,231,122,103,220,239,124,101,243,115,206, 20, 63,141, 76, 3,248,252,
+243, 88, 47, 76, 39, 17,110,171, 85,101, 45,181, 60,127, 65,221, 3, 3, 32, 39, 52,133,137, 81,239,178,230, 93,148,226,197,119,
+125,231,117,111,125,243,238, 43,119,187, 17,140,156, 67,178, 33, 50,232, 65, 62, 4, 43, 52,190,233,199,177, 47,123,195,233, 61,
+135,133, 43, 73, 22,126, 0,189,227, 70,242,143,255, 54,104, 23, 32, 95, 41, 70,189,140, 27,175,221,185,229, 29,255, 98,247,222,
+239,125,251,159,125, 7,240,216, 5, 6,245,170, 34, 63, 39,239, 82, 68,110, 1,222,115, 26, 80,216, 21,189,194,219, 79,145,109,
+ 93,212, 86, 3,220, 23, 75,180,222,121, 10, 6, 97, 23,161, 52,235,230, 72, 39,159, 12,124,223,201,201, 67, 11,197,184,110, 21,
+145,215, 94,196,243,221,232, 92,239,125,158, 3,235,179, 73,122,103,116,173,247,238,190, 6,248,103,192,215, 3,215, 3,139, 81,
+ 47, 28, 5, 62, 75, 40,149,251,127,213,158,125,135,167,126, 39, 39,217,159,156,130, 81, 80, 83,219, 94, 5,188, 62, 30,251, 43,
+129,237, 81, 55,173, 2,143, 68, 67,229, 15,129, 63, 83,123,246, 73,125, 73,107,169, 65,125,234,126, 35, 60, 3, 61, 43,238,177,
+248,175,185, 98, 75,243, 91,222,249,134, 23,222,245,141,215,109,185,118,216,247, 56,151,193,176, 15,121, 6, 74, 80, 9, 52,190,
+253,231, 49, 55,124,115,185,179,213,254,144,247, 63,240, 8,239,255,228, 35, 44,173,247, 73,140,226, 69,151, 44,240,173, 47,187,
+134,151, 94,189, 51,236,248,242,151,163,210, 89,178, 15,255, 18,164, 54, 12, 65, 43,242,245, 33,223,243,154, 27, 94,242,223, 62,
+240,249, 31,120,255,199, 31,121, 27, 23,168,220, 45, 2,222,173, 83, 30,225,217,238,227,214, 8,112,211, 30,224,125, 21, 35,161,
+234,205,238, 98,156,105,127,255,105,140,141,247, 84, 60,235,123, 42,158,229,205, 83,227,190, 93, 68,246,159,164, 81,204,219, 55,
+ 0,244,234,190,138,177,221,188,193,121, 92,172,243,157,159, 2,244,229,202,248,118, 93,192,123,229,150,211,120,238, 79,103, 93,
+157,247,240,203,211,148,105,195,240, 83,167, 1,243,205,192, 59,128, 55,177,113, 67,171, 29,241,245, 13,192,191,151,189,187,127,
+ 10,248, 15,231, 3, 92,101,239,238,221,192, 91,128,127,116,146, 99, 23,165,122, 47, 1,126, 8,120, 64,246,238,126,163,218,179,
+239,211,181,250,175,165, 6,245,147, 24,205, 17, 68, 55,189,238,134,133, 31,189,251,182,235,247, 92, 54,211,106,245,187, 14,113,
+ 67,200,134,241, 72, 6,149,119, 73, 94,245,131, 19,128,254, 55, 95, 60,192,155,127,239, 67,236, 63,186, 70,179,145,144, 88,141,
+ 22,248,228,227, 75,188,247,175, 63,207,183,188,236,106,254,159, 91, 95, 77,187,145,160,183,191, 16,123,195,109,228,127,247,187,
+ 48,187, 29,144, 16, 68, 23,197, 79,191,241,149, 63,248,231,127,251,200,123, 69,248, 12, 33, 68,112,190, 1,253,157, 83,160,113,
+247, 89,238, 99, 87,220, 71, 33,251,129, 59, 54,136,237,222, 53,229,221, 22,199,126,217, 41,118,127,103, 5,128,239,152, 6,133,
+120,236,247, 84,148,245,157, 34, 50, 65,117, 71,202,253,246, 41,208,186,109, 42,142, 94, 29,219, 45,207,208,249,222, 89,217,223,
+ 91, 98, 18,227,244,181,186, 16,114,235, 5, 0,222, 13, 25,140, 24,142,184,135, 16,142,184,168,173,119, 99, 38,252,207, 76,125,
+252, 95, 79,177,253,174,104,100,157,169, 65,213, 1,126,145, 80, 15,255, 67,231, 97,200,127,113,150,219,127, 21,240, 17,217,187,
+123,183,218,179,239, 19, 53, 4,212, 82,131,250,198,128,126,213,143,124,195,165, 63,243,246,215, 93,249,207,172,183,244,134, 25,
+184, 17,184, 60,196,209, 21, 32, 14,181,229,114,236, 43,222, 88,254,248,139, 7,151,121,227,127,124, 63,135,251, 57,237, 78,139,
+204, 24,146,196,144, 26,133,145, 20,229,114,222,247,209, 47, 97,180,230,103,191,123,119,240,216,175,249,122,220, 23,254, 12,220,
+ 58,216, 22, 40,200, 71, 25, 47,185,122,219,142, 87,188,104,199, 55,126,244,179, 7, 63, 71, 8, 17,156,177, 23, 32, 34,119,158,
+198, 67,155, 6,176, 59,206, 33,209,234,157, 83,222,229, 73,107,157,149, 82,247, 69,122,187,240, 72,111, 22,145,219, 79, 19, 15,
+191, 79, 41,117,219, 73,246,183, 95, 68,222,194,184,155, 89, 81,131,125,207, 6, 96, 89, 0,230,134,117,248,149,177,253,237, 51,
+120,190,251, 79,182,191, 11,225,229,198,245,113,206, 6,221,105, 24,150,141,100, 87,188, 30,119,138,200, 5,111,191, 43,123,119,
+ 39,209,147,254, 26, 66, 73,219, 75, 42, 95,255, 57,240,187,167,240,208,255,124,106,110, 30,140, 94,251, 7, 8,173,157, 13,240,
+ 98,224,251,163,209, 88,164,203,252,160,236,221,253, 25,181,103,223,175, 20, 84,250,211,104, 62,227,129, 63, 3,254, 0,248, 27,
+ 2,221, 62, 0,102,129,235,128,111, 6,126, 24, 88,136,219,207, 2,239,150,189,187,111, 80,123,246,101, 53, 12,212, 82,131,250,
+ 24,208,213, 66,199,190,230, 55,110,189,250, 23,191,235,198, 45, 55, 13, 7, 48, 84, 25,248, 64,181,147,232,114, 75,201, 70,216,
+235,190, 22, 53,179,165,220,193, 91,126,239, 35,124,241,137, 21,216, 52,195,202,122, 14,202, 97, 20,180,141, 98, 75,199, 50,223,
+178,108,218, 52,195,255,252,216, 23,217,253, 21, 87,112,203, 77, 87,129,177,152, 93, 95, 75,254,192,127, 65,109,189, 18,196,227,
+149, 34,109,165,124,215,238,235,111,249,232,103, 15,254,103, 96,137,179,163,224,207,180,101,236,221,156, 67,109,113,165,183,120,
+121,234,167, 3, 31,165,212,253,177, 53,233,157, 21,227,226, 84, 96,114,199,105,246,119,159,136,220,207, 36,213, 93,140,111,186,
+ 85,234, 93,167, 26, 95,101,108,183, 63, 67,231,123,215,197,162,168,227,185,188,125,202, 75, 63, 31,160, 94,244,149,175,210,248,
+213, 30,244,229,218, 20,145, 93, 39,203,131, 56, 7, 0, 63,211,251, 98, 5,248, 13,224,167,213,158,125, 39,171, 42,249, 69,224,
+234,202,251,247, 1,223,163,246,236, 27, 76,109,247,113,224,227,178,119,247, 7, 34, 59, 81,128,245,207,200,222,221,239, 82,123,
+246, 45, 61,141, 83,250, 35, 96,143,218,179,239,193, 13,190, 59, 14,124, 12,248,152,236,221,253,155,209,171,191, 62,126,119, 29,
+240,157,192,187,107, 24,168,229,249, 36,231, 82,223, 93, 36,197,205,188,250,234,217,127,247,145,127,245, 21,239,253,174, 23, 45,
+220,212,235, 57, 28, 46, 0,186, 6,140, 66, 25,133,178, 10,101, 52,202, 42,244, 37, 55,148, 59,121,248,208,113,254,244,129,199,
+160,221, 10,101,110, 90,131, 49, 56, 52,107, 67,199,195, 71,122,236, 63,220, 35, 19,133, 55,134, 15,124,250,209,241, 0,182, 92,
+131,244, 87,129, 60,142, 70, 32,247,188,240,178,133,171,129,157, 92,184, 7,213,220, 26,189,200,179,165,120,171, 0,183,124, 22,
+160,112,223,212,177, 79, 10, 16,103, 72,211,222,127,146, 49,221, 50, 5,176,103, 50,190,123,158,161,243,221,127,177,250,239,199,
+ 16, 66,181, 87,251,242,233,140,167,211,200, 50, 33,254,123,181, 82,234,101, 74,169,219,148, 82,119, 85, 94,183, 41,165, 22,226,
+ 54, 85,163,229,246,104,120, 93, 44,249, 12,240,125,192, 79,168, 61,251,134, 39, 49, 14,174,140,219, 20,242,208, 73, 0,189,234,
+121,191, 23,248,173,202, 71,179,192,247, 62, 45,170,112,207,190,111, 59, 9,160, 79,111,119, 0,248,215, 83, 31,127, 91, 13, 1,
+181,124,185,131,122, 65,183,239,252,254,127,176,245,151,238,253,254,235,127,225,186,217,230,166,222,200,135, 78,112,146,163, 68,
+208, 30, 20, 42, 80,239, 90,135,100,117,155,162,231, 95, 80,238,232,145, 35,171,244,227,227, 86, 75, 59,161,240, 33, 98,191,248,
+227,235, 25, 95, 58,216,197,139,102,109, 48,102,201,212,108, 76,108, 29,246, 80, 58,182,155,205,115,174,218, 62,187,173,145,154,
+ 29,231, 0,234,111, 57,197,171,218,202,115, 62,122,109,247,158, 37,176,223,114, 18, 96,229,116,222,245, 6, 94,227,233,192,240,
+ 84,114, 50,224,223,117,182,251, 58, 13, 91,113, 33,207,247,162,212,134,199,235, 59, 29,243,126,203,211,169, 77, 87, 74,221, 31,
+193,123,255,105,182,187,139, 19,203,242,222,126, 17,245,194, 13, 4, 42,251, 83,178,119,247,201,214,220, 63,155,210, 31,191,122,
+ 42, 64,175,200,127,158,122,255,143, 47,226,121,125,120,234,253, 75,107, 8,168,229,249, 38,103, 67,191, 43,128,217,166,121,229,
+ 47,124,243,101,123,239,184,121,235,171, 70, 35, 24, 36,161,229,171, 56, 65,101,158, 52,213,172, 56,231, 91,104,141, 53,101, 5,
+123, 8,154,229,229,206,182,109,106, 99,210, 4,231,137,253,226, 37,130,122,252, 87, 20, 24, 77,183,151,241,232, 96, 64,227,166,
+202, 80,197,129,100,144, 15, 64,207,161,196, 35,222,179,208, 73,218,155,218,233,252,225, 81,255,172,140,149, 51,137, 89,198,184,
+234,157,140, 31,207,121, 47,167, 78, 94,171, 74, 85, 49,238,138,143, 44, 61, 23,153, 63,133, 7,248,116,228,156, 64, 56,110,123,
+243, 69, 62,223, 11, 14,234, 17,208,239,157, 58,143, 59, 46,230, 19,250, 98, 56,226, 45, 21, 48,223, 37, 34,183, 78, 39, 6,158,
+131,103,187, 81,155, 88, 13,108, 34, 36,175,125, 7, 33,254,220,140,224,254,151,178,119,247, 55,169, 61,251, 62, 56,245,179,111,
+152,122,191,239, 12,135,240,247, 27, 24, 16, 79,255,154,133,248,254,109,113, 45,127, 5,112, 41, 48,195,198, 61, 52, 10,185,180,
+134,128, 90,190, 28, 65,189, 80, 2,201, 11,183, 55,191,251,247,190,235,170,187, 94,186,173,189,173, 63,242,208,176, 1,208, 51,
+143,205, 60,105,203,240, 19, 31,120,242,147, 87,108, 78, 55,255,208,205, 91,175, 24, 8,193,147, 86, 10,178, 12,127,244, 75,232,
+203, 95, 14,192,139, 46, 93,228,171,175,221,198, 95,125,238, 8, 88, 27, 64, 92, 71, 64, 47, 34,120, 62,252,118,176,212,229,218,
+ 29, 99,253, 46,171, 79,193,112, 21, 25,110, 70,197, 39,198,136, 47,140, 2, 52, 23,128,126, 87, 74,221, 21, 91,219, 22, 74,246,
+ 76,146,215, 54, 2,167,179,121,150,251, 51, 33,203,231, 97,219,231,210,249,158, 9,160,191,229, 25,122,228,238,221, 83, 30,250,
+ 5,153,199, 24, 51, 95, 6,254, 26,248,107,217,187,251,247,128,191, 36,208,227,109,224,247,101,239,238, 23,169, 61,251,142, 87,
+126,246,162,169,221,124, 66,246,238,158,214, 25,167,250,187,180,239,159, 38,152, 43,224,199,128,159,138, 32,126, 54,210,170, 33,
+160,150, 47, 55, 80, 47,232,246,109,183,125,213,194,155,127,229,155, 46,251, 55, 59,154, 73,218,243, 10,213, 14, 6,176,140, 60,
+ 77, 47, 12, 82,248,215,127,252,232, 31,223,253,145,195,127,248, 59,183, 93,185, 71, 73,124,158,139,137,217,239, 86, 35,135, 62,
+ 83,238, 88,107,197, 79,126,251,203,248,166,207,254, 47, 24,100,208, 72,227,211,221, 34,168,123, 64, 60,172,247,120,201,139, 47,
+229,123,191,238, 43,202,223,250,195,159, 67, 36, 67,185, 81,216, 80, 4,173,132,165,245, 65,127,181, 55, 90,187,128,222,211, 93,
+177,187, 89, 33,183,114,246,153,208,251, 57,247,206,116,207,197,167,194, 61,215,206,119, 26,208,239,190,208,217,231,167, 88,111,
+203, 83,201,141,183,112, 17, 30, 34,164,246,236,123, 64,246,238,190, 11,248,217,248,209, 14,224,159, 79, 25, 24, 91,166,126,102,
+206,241,112,233,211, 28,238,175, 81,247,166,175,165,150, 51, 2,117, 5, 40,107,212,117,111,251,199,151,252,202,155,255,225,142,
+111,204,115,232, 89,141,106,104,196, 11,210,119,116,172,226,145, 97, 62,248,190,255,246,240,111,239,123,112,245,247, 0,255,216,
+ 74,118, 8, 37, 47,148,210, 83, 7,154,109,220, 35, 31,198, 46, 63,130,154,191, 18,128,215,189,228, 74,238,254, 23, 95,207,143,
+252,206,135,232, 29, 31, 66,179, 1, 70, 7, 42,126,148, 65,175,207, 75, 95,184,157,247,190,249,155,233, 52,147, 48,170,172,143,
+251,236,251, 80,105, 3,148, 3,241,136,119,160, 53, 15, 29, 60,126,100, 48,114, 71,184,112,137,114, 16, 98,206,183, 84,148,236,
+ 89,123, 95,207, 20, 72, 60, 67,242,156, 57,223,248, 52,182,105, 64,191,227, 25, 30,214, 51,101,200,253, 97, 5,212, 1,190,117,
+ 10,212,245, 51,126,189,246,238,126,237, 6,128,254, 65,224,119, 8, 97,154, 39,129,117,181,103,159,171,120,245,158, 90,106,249,
+ 50, 6,245,109,111,255,166, 75,255,227,143,253,195,237,175,233,143, 64,218, 22,149, 40, 36, 23,232, 57, 58, 45,195, 95, 60,182,
+118,232,251,222,189,255, 63, 60,122,108,248,191, 8,165,100,230, 11, 71, 7, 95, 64,171,175,195,197,204, 55,163,131, 14, 24,174,
+147,125,248, 29,164,223,242, 43,229, 65,126,232, 53, 95,193, 87, 95,179,157,223,253,192,103,249,163, 79, 60,202,129,227, 61,172,
+ 86,220,120,237, 22,190,251, 85,215,242,127,190,230,197,116, 26, 73,185,125,254,241,223, 70,142, 63, 2,141, 54,162, 34,145,144,
+ 59,104, 24,190,240,196,242,163,132,231,172, 63,219,110,220,139,238,109, 93,164,241,221,242, 28, 61,223,147, 1,250,237,207, 50,
+ 64,127, 38,229,225,169,247,211,116,251, 10,227,186,111,128,197,167, 89,154,118, 46,242, 47,166,222,191, 11,120,211, 41, 58,213,
+205,213, 42,191,150, 47,103, 80,231,242,249,116,247,247,125,229,194,107, 70, 3, 15, 51, 9, 42, 85,200, 72, 48,131,156, 70,199,
+240,174, 79, 30,251,252, 15,191,247,145, 95, 88,237,187, 15, 1,199, 8, 15,122,105,254,229, 67,107, 31, 59,176,150,125,255,150,
+118, 98,157,200,184, 8,174,213,198, 63,246,151,228, 31,249,101,236,171,126,164, 60,206,141, 87,108,225, 29,223,255,181,252,252,
+247,230, 28, 92,234,146, 38,150, 75, 22, 58, 39,140,199,125,246,143,200, 63,245, 46,104,182,131,213,161, 13,226, 60,202,121,178,
+193,144,247,125,232,161,143, 16,250,209, 95, 72, 80, 63,151,184,230, 4,200,137,200,252,179,160, 21,104, 85,246, 87,198,119, 70,
+ 79,159, 59, 69, 38,254,115,225,124,159, 75,128,126,174, 73,140, 79, 87,166,217,174,246,212,251, 7,129,234,147,152,110,228,204,
+147,229,206,151,252,195,169,247,111, 59, 77,235,217,107,106,149, 95,203,243, 93, 78, 69,161,217, 43, 23, 26,215,206, 55, 12,185,
+ 15,217,237,210,115,164, 35,135,106, 40,222,252,254,199,239,123,227,187, 30,250,177,213,190,251, 0,112, 40, 90,238, 35, 32,123,
+234,248,232, 99,239,251,220,242, 3,137, 5, 25, 56, 64, 80,154, 80,175,222,158,197,125,234,191,146,221,247,147, 72,239,232,196,
+ 1,155,137,229,202,237,155, 78, 4,244,172,143,251,232,111,144,127,232,109,168, 70,138, 50, 38,196,235,147, 6,100, 57,137,134,
+191,249,194,129,131,127,245,217, 67,247, 17,122,191, 95, 16, 80,159,122,196,231,217, 40,217,233,242,175,219,159,101,235,160, 58,
+190,249,216,182,245, 92,189,244,231,194,249, 62, 39, 0, 61,182,238,157, 54,190, 46,150, 92, 53,245,254,216,212,251,233,108,248,
+219,206,195, 49, 39,238,219, 72,151,159, 74,182,158,229,252,124, 99,173,242,107,249,114, 6,117,243,217, 67,253, 7,159, 24,185,
+188,221, 54,180, 51, 71,219,192,186,241,242, 61,239,217,255,238, 95,188,247,192, 91,129, 79, 18,158,192,212, 37,244, 91, 47, 30,
+244,114,232, 87, 62,120,232,158,149,204, 97, 51, 7,153, 15, 89,115,177, 41, 13,157, 89,252, 67,127,202,232,125,111,196,253,253,
+251,144,213, 39, 55, 86,106,221, 35,248,135,238, 99,244,135,223, 79,254,119,191, 5,205, 38, 24, 27,154,205, 40,133,210, 9,106,
+144,129, 17,126,246,247,255,238, 15,129, 47,197,227,159,119, 80,175,212, 45, 87,229,140,202,139, 98, 25, 82, 85,225,220,121, 26,
+ 79,247, 98,203, 61, 76,198,110,239, 60,131,185,184,243, 57,124,190, 39, 3,244,251, 9,189, 9,206,217,232, 19,145, 59, 43,175,
+ 91,166,230,236,108,215, 91, 53,134,189,124,166,235,237, 60,201,235,167,222, 79, 63,212,229, 93, 83,239,127, 80,246,238,126,186,
+229,105,171, 83,239, 55,157,102,251,238,212,251,157, 39,157,207,189,187,103, 57,145,174,175,165,150, 47, 43, 80,231,216,122,254,
+241,239,122,247,195,119,189,231,193,227, 15,126,224, 96,239,208,175,223,127,228,254,175,249,181,207,255,244, 61,247, 47,253, 2,
+161,131,212, 49,160,207,228, 3, 84, 28,208,255,210,145,193,159,190,237,127, 31,188, 55,105, 24,100, 61, 71, 50, 15,196,242, 54,
+165,160, 61, 7,249, 10,217,135,127,142,209,251,190,155,209,255,119, 7,249,135,247,146,255,205,175,146,255,213, 47, 49,250,147,
+127,203,232,189,111, 32,187,239, 45,200,250, 35,208,217, 20,154,210, 20,182,187,215,200, 80,145, 52, 53,255,229,190, 47,124,246,
+207, 63,241,228,187, 9,212,251,121,237,229, 28, 21,245,237,132, 94,231, 55, 79, 41,217,179,201,124,175,122,127,243,132, 6, 54,
+183,156,225,241,239, 60, 77,127,250,167, 37,145, 26,175,198,189,111,137,128,119, 50,176, 57,147,199,158, 62,107,207,247, 20,128,
+254,218,167, 25, 38, 40, 30, 33, 91,188,170,235,229,102, 17,185,247, 76, 58,195,157,228,209,178, 23,175, 53,110,104, 56,243,230,
+169,143,255, 96, 98,205,236,217,247,247, 76,182, 88, 77,128, 63,149,189,187, 95,122,134,199,120,165,236,221,253,231, 83, 31, 63,
+ 58,245,254,116,251,250,252,212,251,127,115,146, 99, 89, 66,255,250,203,106,149, 95,203,243, 93, 78, 21, 83,207,128,165,191,222,
+191,246,159,255,122,255,218,189,132,154,213, 99,192, 65, 2,213,190, 30,183,153,142, 97, 21,207, 91, 63,248, 75, 31, 56,240,142,
+151, 92,222,190,234, 13, 55, 45, 94,211, 95, 29,161,230, 82,104,232,208,105, 14,129, 36, 65, 37, 73,200, 96, 63,246, 73,242,195,
+247,151,187, 83,218,130, 77,161, 51, 85,122, 42,192,200, 33,190, 69,179,145,114,255, 23, 15, 45,255,219,223,250,232,222,232,165,
+ 79, 27, 24,103,170,224,207,229, 17,144,119,156,141,146,141,189,215,239, 96,252,228,178, 2,232,238, 35,208,213,247, 79,129,195,
+ 46, 2,197, 93, 0,195, 91, 46,240, 90,184,155,201,199,160,222, 30, 65,248,238,202,216,110,137, 64, 56, 31, 61,241,101, 78, 18,
+131,127, 54,159,111, 60,175,141, 66, 2,239, 57,139,165,112,207, 57,212,174,223, 18, 13,166,253,113, 14, 54,234,253, 62,253,168,
+ 92, 8,109,128, 47, 88,178, 97,164,185,231, 8,201,112,175,103,220,124,166,144, 47,176,241, 67, 93,126,152, 16, 87, 47,168,250,
+203,128,143,202,222,221,191, 31, 89,173, 79, 68, 38,207, 17, 74,224, 94, 8,188,154,208,115,253,198, 13,246,247, 97,224,166,202,
+251,119,200,222,221,255, 54,238,103,109,131,120,249,123,129, 87, 84,222,255,152,236,221,221, 4,126, 61, 58, 29,179,241,120, 63,
+ 73,104, 20,245,191,128,127, 82,171,253, 90,190, 92, 65,221, 69,224,206, 35,136,235,248,217, 48,190, 28, 39,127,104, 74, 14,172,
+123,145, 79,255,243,223,127,248,103, 23, 59,246,109,255,232,154, 77,151, 14, 86, 70, 48,155,160,154,102, 92,191, 30, 16, 28,210,
+230,169,235,208, 4,240, 2, 67,135, 95, 29,209,218,185,157,207, 29, 88, 94,191,237,174, 15,222,181,210,205, 62, 84, 49, 50, 46,
+180,220, 31, 1,253,172,147,150,148, 82,119, 87, 26,216,204, 87, 21,253, 51,189, 16, 98, 77,244,109, 76, 62, 70,179,240, 60,167,
+101,153, 16, 67,125,251,115,245,124, 55,144,179, 13, 15,220,247, 52,142,181,139, 51,207, 51,184,251,124, 26, 56,103,241, 64,151,
+ 66, 14, 1,255,116,163,167,153,169, 61,251,150,100,239,238,215, 0,127,202,248, 65, 41, 22,248,158,248, 58, 91,249,205,200,240,
+ 20,122,233, 70, 42,143, 86,173, 52,183, 41, 58,227,253, 70,156,199,106, 2,220,191, 98,227,186,245, 3,113,219,167,106,181, 95,
+203,243, 89,244,105, 96, 52, 39,196,173,150, 9,229,106,199,129, 94,252, 92, 78,243,219, 33,176,178,218,119,251,190,253,238, 7,
+255,239,119,253,221,177,207, 55, 83, 77,178,154,225, 87, 50, 24,248,114, 47, 10,133, 82, 27,188,226,127, 56, 96,228,145,213, 28,
+181, 60,164, 53,191,153,125,251, 87, 14,126,227, 79,221,247, 83,251, 15,173,255, 65, 28, 91,143, 11,151,245,126, 95, 84,174,183,
+197, 7,113, 60,157,254,223,119, 71,175,225,110,206,172, 6,249,158,168,232, 46,120, 71,179,216,147,252,101,167, 57,214,125,132,
+199,158,222,255, 92, 63,223,139, 44, 69,188,254, 76,215,206, 61,132,112,192, 29,207, 96,229,192, 31, 3, 47, 83,123,246,125,225,
+164,215,119,207,190,135,129,151, 3,191, 74, 72,148, 61, 35,219,130,240,168,212,175,157,218,215,103, 8, 77,110,134,103,180,182,
+246,236,235, 2,175,139, 76,194,169,228, 65,224,235,227, 67, 93,106,169,229,121, 45,234, 2,239,223, 16, 74, 97,230,129,175,248,
+190, 87,110,251,193,159,121,221,165,223,122,233,166,212,230, 67, 33,183, 10,154, 6,101,117,240,220,117,101, 56, 34,224, 64,114,
+ 15, 3,135,201, 60, 73,162, 88,117,240,115, 31, 90,250,139,255,240,199, 15,189, 51,115,254,227,140, 75,233,242,231,226, 5,136,
+ 84,240,180,151,184,159,240,116,179,251,158,193,113, 21,116,120,245,153,232,247,157,225,211,224,158,115,231,251, 12, 93,247, 93,
+156,152,155,112, 63,129,110, 63, 47, 64,126, 22,158,121, 55, 26,237,159, 35, 60,147,252,191,171, 61,251, 62,119,150,199,218, 14,
+252, 31,192,107, 8, 61,221,119, 16,104,252,126,244,144,255, 62,122,222,239, 85,123,246, 61,121,138,253,236, 2,222, 72,160,206,
+175, 7, 54, 71, 61,162,166, 60,245, 98,251,118,244,194,191,147,240,236,246, 57, 2,187,248, 41,194,227, 96,127, 71,237,217,215,
+223,104, 62,206,226,153,237,181,212, 82,131,122, 5,216,155,132, 76,214, 29, 47, 88,104,124,195,237,175,222,246,109,111,186,121,
+203, 43, 46,155, 77, 18, 68, 33, 34,120,165,240,149,209,104, 1, 45, 18, 74,215, 20, 28, 27, 56,255, 63, 62,185,244,233,119,126,
+228,240, 31,127,234,241,238,159, 0, 79, 68, 37,212,127,174, 2,122, 45,181,212, 82, 75, 45,181, 60,215, 64,189, 56, 78, 10,116,
+162, 21,189, 99, 97,198,126,213, 43,174,156,121,197,119,222,180,240,242,155, 46,109,239,156,111,152, 78,199,170,212,106,165,115,
+143,244,156, 31,173,140,124,239,139,135,251, 71,238,121, 96,233, 19,127,181,127,253, 99, 79, 29, 31, 21,173, 31, 87, 9, 49,244,
+ 11, 86,147, 94, 75, 45,181,212, 82, 75, 45, 53,168,159,250, 88, 26,104, 16,168,180, 54, 33, 59,117, 1,216,222,110,232,197,166,
+213,115,137, 81,105,238, 37, 31,228,178,214, 27,186, 99, 34, 28, 38, 80,236,171,132,184,121,151,211, 39,234,213, 82, 75, 45,181,
+212, 82, 75, 13,234, 23, 17,220,147,232,189, 23, 47,203,228,147,158, 60, 33,155, 61, 35, 36,224, 12, 9, 52,123, 13,230,181,212,
+ 82, 75, 45,181,212,242, 44, 1,245,233,227, 23, 32, 95,252, 91, 5,117,169,252, 91, 3,121, 45,181,212, 82, 75, 45,181, 60,139,
+ 65,253, 84,227,169, 65,188,150, 90,106,169,165,150, 90,106,169,165,150, 90,106,169,165,150, 90,106,169,165,150, 90,106,169,165,
+150, 90,106,169,165,150, 90,106,169,165,150, 90,106,169,165,150, 90,106,169,165,150, 90,106,169,165,150, 90,106,169,165,150, 90,
+106,169,165,150, 90,106,169,165,150, 90,106,169,165,150, 90,106,169,165,150, 90,106,169,165,150, 90,106,169,229, 2,137,122,229,
+ 75, 95, 5,128, 86, 26,173, 99,131, 55, 37, 40,165, 66,251, 23, 5,160, 40,222, 78,180,132, 81, 10,205,137, 93, 98,194,207, 20,
+ 74, 73,252, 50,244,148, 81,241, 95,137,191, 16, 64, 73,124, 34,139, 10, 91,137,108,180, 55, 38,126, 31,183,140,191,137, 99, 43,
+158,203, 78,248, 27, 37,148,187, 82,196,109,226,239,100,188,111, 81,234,196, 14, 60, 19,231, 24,126,139,140,199,174,202,227,171,
+184, 59,169,140, 77, 42,219,233,242, 51, 85,221, 97,156,129, 98,183,138,240,135, 16,199,172,198, 91, 78,244,227, 41,191,147,202,
+223,147, 3, 87,168,120,157,226, 53,140,115, 35, 27,158, 88,121,121,203, 99, 73,252,191, 66,197, 57, 21,170,141,254, 84, 60,109,
+ 85,206,111,252,165,146,202, 21, 26,143, 65, 16,180, 42,102, 76,161, 84,120, 42,159, 0, 94,194,211,118, 85, 28, 64,185,157,148,
+203,107,124, 92, 29,174,174,146,226, 82, 8,226,193, 35,248,248, 52,191,234,149, 52, 26, 44, 58,204, 1, 69,235, 66, 21,247, 25,
+198,132, 2, 39,227,118,134, 94,192, 40, 65, 35, 97, 93,139,224,227,162,119, 30,180, 86,152, 56, 87, 90,133,115,209,241,156,140,
+ 30,175, 63, 85,221, 70,166,231, 24, 42,179, 49, 94, 3,113, 94,203,251, 45, 94,171,241, 61,195,196, 10,211,113, 21,137, 82,232,
+184,104,164,114, 29,199, 55, 69,252,125, 92, 15, 82,189,175, 69,226,202, 12,215,163,152,119, 41,151,152,196,123,134,202,247, 97,
+108,229,182,113,224,225,251,184,173,138, 47, 1,231, 5, 29,175,173, 76,220, 33, 97, 91, 31,215,130, 82,241,111,169, 92,247, 56,
+ 33, 34, 30, 47,224,226,247, 46, 30,220, 87, 38, 68,198, 90, 1, 69,188,110,106,188,228,213,212,173, 93, 92,167,112, 77, 85,185,
+ 86,137, 99, 70,141,215, 69,248, 92, 42,107,189,178,223,120, 1,149,170,238,119,172, 23, 40, 85,170,170,220,245, 76, 14,108,234,
+186,149, 58, 73,169,241,254, 84, 85, 35,200,244,109, 92,234,210,170, 78,208,197,111,100,124,191,198, 83, 43,239, 65, 53,165, 97,
+171, 26,162,216,166,186, 40,124,188,175,125,188, 6, 34, 18,183,147,241, 34,217,160,109, 88,161,127,131,238,168,220, 9, 83, 42,
+157,241, 45, 16,214,166,200,228,148,169, 98,108, 69,155,209,226,188, 66,227,209, 66,199, 23,231, 10, 82,249, 87, 38,214,120,245,
+186,150,250,177,132, 22, 85, 30, 78,169,160,127,180, 10, 47,226, 61,175,170,227,174, 46,138,120,252,241, 24,199,227, 20, 0, 31,
+239, 27, 31,230,110,242, 34, 68,101, 32,197, 60, 73, 92, 7,106, 3,149, 63,190, 62,213,107,165,174,154,127,129, 20, 64,170,162,
+162, 26,223,172,241,164, 38, 46,146,102,252, 96,180,226,119,186,114,129,217, 8,109, 80, 24,148,174,116,125, 85, 30, 68,143, 87,
+ 53,106, 98,145,140,197,151,239, 69, 71, 69,235,125,220,206,161,226,123,165,138,166,240, 26,239,253,196,239,116, 52, 82,130, 18,
+ 14,106, 44,108, 19,206, 89,107, 93, 57,255, 0, 8, 74, 41,188, 31,131,133,209, 38, 40, 97, 29, 94,168,202, 2,213, 42, 24, 68,
+170, 0,105,141,114,213,113, 10,206,121,188, 8,206, 59,178, 60, 39,207, 61, 46,243, 40, 37,104, 29,192, 71,233,114, 37, 6,197,
+ 25,231, 85,203,216, 0, 64,105, 20, 58, 40, 28, 1,165,165, 4,202,233,249, 11,215, 82, 87, 20,208,137,215, 69, 16,156,246,227,
+ 5,161, 20, 17,170,198,227, 2,116,188, 57,124,169, 48, 44,198, 24,172,214, 24,109, 17,227, 17,113,120, 47,229, 43,203,114,148,
+214, 24, 99, 74,101,173,227, 2,157, 88,107, 18,144,218, 75, 80,224, 32,229,130, 46,230, 88,107,141, 54, 10,196, 76, 40,157,234,
+191,197, 62, 39,207, 63, 0,127,169,124, 68, 80,226,203,155,169, 80, 78,225, 26,235,248, 2,173, 65,105,202, 27,207, 59,133,199,
+131, 81,108,219,190,133,205,139, 29, 90,109,139, 18, 88, 62,118,148, 81,191,207,142,109,219,121,217,141, 47,225,239, 63,241, 73,
+ 86,142,175,210,243, 57,107,131, 17,237,217,205,116,215,186, 72,158, 97, 21,120, 60, 35,239, 16, 9,215,190,211,110, 51,236, 15,
+200,178, 12,163,198,107,220,139,224,138, 37,161, 12, 8, 97, 94,115,207, 80, 52, 63,254,239,127,134,227,171, 75, 60,248,224,253,
+124,244,175,254,134,245,227,107, 40,209,184, 44, 35,151, 28,173, 53, 54, 49,228, 46,199, 59, 79, 98, 45,136,208,176, 9, 90,107,
+ 36,119,164, 54,204,103, 38, 66, 98, 13,206,133,113, 89,107, 81, 90,145,231, 25,214, 90,156,178,188,233,135,126,152,143,127,226,
+ 1, 62,245,153,191,231,169,167, 30, 71,242, 1,155, 58, 13,102,211,132,166,181,228,249, 40,204,164, 49,228,206,145,101, 57,141,
+180,129,247, 30,231, 28, 73,195,146,185, 33,185,203,209,202, 98,173,101, 48, 24, 97,109, 18,174,163, 87, 40, 13,163,209, 16,239,
+ 61,214, 90, 70,163,209,120, 60, 74,145,101, 57,162, 44, 90,107,242, 60,143,250, 52, 92,231,145,203,163,134,210,120,231,195, 28,
+250,156, 36,177, 8,190, 92, 27,218, 24, 92,188,255,173, 49, 32,130,209, 6,239, 29, 2, 56,239, 81,218,160,181, 65,124,248, 93,
+208,179, 14,188, 96,140, 33, 77, 83, 18,171,113,121,206,112, 56,196, 24, 19, 63, 79,200,243,156, 60,207,163, 94, 81,165, 30,200,
+243, 28, 99, 76,112,134,140, 33,203, 50, 68, 64,107,131, 82, 26,173,195, 88,138,245,153,187, 17, 73,146,144,196,109,189,247,225,
+186, 21,235, 88, 41,146, 36,193,101, 25, 56, 9,231,130,138,224, 37, 78,149,197,197, 0, 0, 32, 0, 73, 68, 65, 84, 40, 13,202,
+ 22,136, 17,143,171, 64,225, 73,173, 6,239, 40,208, 71, 43,161,209, 76,241,185,195, 90, 27,206, 83,107,196, 59,140, 9, 58,181,
+ 97, 20, 90,124,137,116, 65, 63, 72,212, 15,138, 52, 77, 48, 74,130, 83,232,133, 36, 73,176,198,160,163, 97,166,148, 34, 53,150,
+ 86, 35,197,104,143,181, 96,141, 99,126,166,193,230,166,101,107,167,201,230, 52, 97,113,190, 73, 39, 81,108,154,237, 48,183, 99,
+ 17,219, 73,144, 52, 65, 6, 57,135, 31,122, 20, 59,204,152, 89,156,165,185,185,141, 51, 48, 58,186, 66,162, 83,186, 3,120,228,
+208, 10,159,248,228, 23,177, 70,115,249,246, 5,174,185,242,106, 62,254,137, 7, 72,218, 45, 46,217,182,131, 3,143, 61,204,252,
+226, 12, 91,119, 46, 98,243,156,133, 43, 47,227,200,242, 17,174,124,197, 75, 25,230, 67, 30,252,235,251,121,241,214,203, 89, 59,
+114,152,133, 43, 47, 33, 51, 9,203,143, 62, 65,203, 90,154,155,154,168,133, 54, 73,167,205,195, 95,120,148,165,161,227,248,241,
+ 30,215, 94,119, 3,159,121,112, 63, 95,248,210,227,136,164, 36,202,162,101,196,101,151, 44,208,106, 91,150, 86,214, 56,112, 96,
+153,149,117, 71,214,207,153,155,153,225,216,161,195, 52,141, 37,207,114,146,180,129,203, 50,172, 8, 9,208,177,134,217, 86, 74,
+214,239, 49,219,110,146,141,134,204,164,205,232,108, 56,172, 14,243,105,140,101,152,229,184,136,159,162, 96,224, 61,102,115,115,
+238,173, 27, 89, 85,165,235, 32, 85,111,251, 68,179,170,170,156, 39,183,153, 6,245,177,151, 52,105, 59,171,147,252, 78, 78, 60,
+ 70, 48, 61,131,130,215, 26,163, 76, 4, 32,141,210, 1,174,125,245, 36, 74, 79, 94,151, 22,143, 86, 26, 19,111,216,240,185, 2,
+165,131, 7, 83, 1, 65, 95,190,130,223,234, 37,236,219,123, 34, 56,123,156,243,184, 8, 96,225,185,240, 32, 30,196, 11, 18,191,
+ 47, 20,154, 23,143,247, 66,238,165,252,141,243, 30, 81,133,135, 94, 88,148,190, 98,213, 73,233, 29, 23, 6,149, 80, 57,175,210,
+ 2,148,177, 69, 56, 5,116,211,128, 62,222, 86,112,226,163,167, 52, 6, 60,188, 76, 58, 17, 2,136,143, 96,171, 80, 17,232,195,
+252, 23,127, 71, 59,210,251, 96,133, 74, 97, 21,251,210, 40,210,128, 81, 96,149,194, 40,131,209,186,180,124,139,151,138,107, 46,
+120, 80, 96,180, 38, 49, 26,107, 52,198,104,140, 42,128, 87, 97,180, 42, 61, 64,163, 9,239,181,194, 22,223,233,194,232, 42,140,
+ 6, 79,225,151, 22,222,143, 72,197, 5, 21,153,240,192,213,132, 67,165,240, 62, 62,136,192,123,214,214,215, 88, 95, 95,167,223,
+ 27,144, 38, 77,230,102,231, 72,147,132,209, 96, 8,185,167,221,104, 50,219,110,227,149,166, 59, 28,162,141,101,148,103, 40, 13,
+237,118,139,245, 94, 23,148, 34,203,115, 26,141, 6,121,150,129, 82,184,168,248, 4,193, 75,177, 14, 52, 40,133, 49,224,157, 3,
+209, 8,134, 93,187,174,225,149,175,254, 7,140,242, 30,159,254,228, 39, 56,240,212,147,140, 70, 35,172, 49,228, 89, 78,230, 50,
+ 68, 4,147,216,232,202,142,215,133,213, 38, 0,142,151,242,124, 61,130,177,225,190, 82, 58,120,176, 90,135,121, 87, 10,156, 40,
+174,127,209, 13,244,123, 25,107,107,125,150,150,143,147,103, 25,222,101,193, 51,246, 57,185,243,160,116, 24,187, 72,184,102,102,
+188, 15,165, 53,104,197, 40,143,224, 41,144, 59,135,243, 66,150,231,225,214,243, 14,231, 92, 52, 4, 11,112,210,104,155,144, 59,
+137,160, 43,241,158, 18,114,239,200,189, 39,207, 29,162,192,137,143,215,114, 12,124, 58, 30,223, 24, 19, 28, 0,173, 49,209,152,
+ 41, 65, 59, 94, 91,145, 48, 39,214,104,108, 92,163,217,112,132, 82, 66,195,166,116, 90, 45, 26, 73,138,120,143,143,128, 87,232,
+163, 98,188, 90,235, 96, 32, 20,198,124, 4,227,194, 16,209, 90,151, 6,150, 82,133, 19, 34, 88, 27, 12, 11,132,112,126,222,211,
+108, 54,194,117,143,227,171, 30,103,108,132,143, 57, 42,109, 76,249,185, 87, 18,239,219,112,206,225,120, 65, 75,138,119,165,145,
+109,181, 33, 77, 27, 72, 28,243,132, 91, 38,126,194,243,247, 82,208,107,145, 93, 51,134, 70,179, 65,179,221, 66, 41,141, 73, 19,
+ 76,146, 96,146, 20, 81, 42, 48, 3,198, 96, 27, 13,180,177,160,117,212,123, 14,231,250,204,205,182,153,105, 54,152,177,134,237,
+155,219, 92,117,217, 22, 58, 51, 29, 70,162, 57,124,120,149,135, 62,247, 16, 42, 27, 50,211,178,120, 55,162,211,158,227,240,129,
+ 99,184,225,128,206,226, 22,104, 52, 48,141, 38,249,241,117, 58,164, 44,182,102, 16,114,196, 38, 28, 61,186, 74, 43,105,112,201,
+182,237,100,163,140,163,107,199, 73,103,154,204, 54,155, 44, 52,218, 36,179, 13,102,118, 46,178,124,236, 8,131,149,101, 22,118,
+ 94,138, 22,195,160,187, 78,154, 26,116,106, 16,237,105, 52, 83,100, 56,228,200,218, 18, 42,181, 88,157,208,238,108,102,211,246,
+ 75, 56,120,224, 16,249, 48, 35,203,133,149,149, 46,199,151,215,216, 60,183, 9,173, 60,205,134, 97,243,230, 77,120, 7, 71,143,
+ 29,199,218, 6,206,133,107,155,143, 70,193,117,146,128, 73, 74, 5,237,222,176,134, 84, 43,172, 2,237,114,154,105, 74,154, 24,
+ 26, 70,163,196, 97,117,100, 33,141,137,108,134, 68,140, 10, 14,151, 87, 10, 51,223,216,244, 86, 20, 21, 69, 38,193, 75,175,210,
+173, 27,130,238, 52,176,107,228,148,221,218,229, 4, 74,117, 18,212,171,207,108,241, 83, 70, 70,244,192,212,248,111,165,116,197,
+235,211,104,101, 2, 48,235,138, 39, 72,161,164, 2, 24,105,109, 80,162,209,232,120, 52, 21,189,225, 56, 6, 81, 40,101, 40, 9,
+ 88,101, 34,136, 26,208, 38, 78,156, 66, 68,225,124, 4,124, 41,126, 27,141, 1, 39, 1, 0,156,224,221, 24,252,115, 39,100, 46,
+ 40, 32,231, 3,192,139, 84,168, 75, 21, 21,185,168, 73,170, 83, 84, 9, 60,126,130,224, 1, 37,227, 57,155,100, 48,228, 68,211,
+ 72, 85,104,160,146,110, 21, 92,188,222,229,239, 10,118,163, 2,234,226,203, 95,148, 52,182, 45, 12, 43, 29,120, 3, 21,141, 63,
+ 41, 65,210,163, 34,205, 29, 0,189, 48,191,198,212,180,142,199,209,209,210, 87, 58, 0,123, 1,210, 37, 80,155, 8,182,154, 96,
+ 72,148,227,144,242,111,173, 2,141,170, 10,111, 68, 23,122,167, 28, 84, 0,117, 5, 42,142, 77, 85,200, 49,188, 43,153, 1, 74,
+154, 57,222, 19,162,195,245, 34,120,217,226,133,108,148, 49,232, 14, 24,141, 50, 94,252,226, 27, 64,105,134,163, 17,131, 94,143,
+185, 86,155,134, 77,104,119, 58, 60,117,224, 48, 54,109, 96,172,165,209,108, 48,202, 51,114, 23,188,161, 44, 27, 49, 59, 59,203,
+218,250, 58,198, 24,242, 60,199, 38, 9, 78,130,209,167,208,193, 72, 68,128, 44,208,238, 42, 65,196,112,227, 75,111,228,138, 93,
+ 59,233,245,150,249,219,143,125,148, 99, 71,142,150, 74, 34,207, 70,160, 21,214, 6,111,184,122, 93, 1,172,181,193, 11,139,231,
+107,141, 65,153, 2,196, 13,185,203,112,226, 34, 37,238, 25,101, 25, 40,205,214,237, 59,152,155, 91,160, 63,200,232,246,134,228,
+121,206,104, 52, 32, 73, 19, 70,217,136, 52, 77,209,198, 96,172,141,225, 21,137,225, 31, 33,115, 35, 70, 89, 22,238,131, 60,199,
+229,130,119, 97, 46, 11,214, 44, 73, 18,114,231,130, 7, 46, 48,202, 3,224,231, 46,222, 67,121,142,247,158,204,229,225, 58,168,
+ 96, 60,122,113,129, 30, 53,193,131,209,170, 80,148, 10, 99, 76, 4, 84, 53, 97, 40, 36,105, 26,142, 43,193, 64, 48,214,150,140,
+ 93,113,245,109,152, 0, 26,209, 91,214, 42, 24, 42, 54, 9,128, 60, 28, 14,200, 37, 0,102,146, 36, 32, 50,246,168, 81,209,168,
+ 8, 58,203,218,224,201,151,172,194,104, 20, 13,130,192, 26, 20,158,124, 1,246, 34,145,119,212, 10,151,231, 19,172, 98,113, 14,
+197,254, 68,130, 46, 16,145, 16,154, 80, 65,131, 42, 93, 97,173, 16,172, 81,168, 8,236,141, 36,176, 76,133,170, 47,214,136,137,
+ 70, 1, 34,136,143,247,150, 30,199, 22,116,164,177,108,154,146,182, 90, 36,105, 90, 26,168, 30,133, 24, 3,202,144,123,193, 35,
+ 96, 44,218, 90,156, 4, 35,142,212,226, 83, 69, 98, 19, 22, 58,155,184,100,243,102,118,204,182,216,182,185,193,150,249, 38,226,
+ 6,244,135,125,102,231, 22, 73, 90,155,233,142,132,199, 31,127,146,181, 67, 71,153, 79,155, 52, 18, 75,179,221,226,224,129, 3,
+116, 90,109,146,180,129,110,182,144,204,225,187,125,172,135, 86,154,144, 13,133, 36,237,240,248,161, 3,164,173, 6,205, 70, 66,
+ 35,177, 12, 6, 61,218, 73,194,150,205,155,241, 58,135,109, 51, 36,157, 54,107,199, 86,152,109,164, 44, 31,124,146, 29,215, 94,
+ 29,140, 62,113,232,196,144,204,182,241, 13,131,120,199,108,123, 6, 53,219, 97,181, 63, 96,125,173, 75,130, 38, 27, 14, 89, 93,
+235,113,124,101,157,213,213, 46, 90, 41,102,103,218, 28, 95, 62, 70,187,209, 96,126,126,158,213,149, 53,180,177, 12, 71, 35, 26,
+105,112, 0, 36,247,164, 38, 5,239,176, 70,145,234, 0,232, 77,173, 80,121, 70, 43, 49, 88,229,153,105, 54, 72,141, 96,181, 39,
+181,193,113,177, 70, 71, 3,210, 4, 96, 71,192, 24, 60, 96,230,155,115,111,141,238, 88,136,131,113,162,215,135, 20, 49, 2, 41,
+169,244, 98, 53,140,169,247, 51, 12,226,171, 73, 47, 93,162,194,245,213,227,151, 1,175, 34,198, 84,196, 81,199, 94,125, 24,114,
+ 0,244, 2,228,161,120, 95,120,135,186,194, 18, 68,111, 16, 19, 53,190,142, 94,161, 62,225,165, 37, 66,141,210, 99, 10,187, 36,
+ 45,198,112, 82,122,250, 5, 84, 9,227, 88,138, 39,210,208,225, 55,190, 98, 4,248,194,170,138, 84, 86, 9,188, 50,142, 77, 22,
+231, 27,217,232,248,251,104,136,196, 3, 73, 4,250,192, 40, 72,140, 47, 23,116,173, 46, 13,134, 24,140, 40,183, 41,254, 43,226,
+153,129, 77,136,140, 67, 53,119, 65, 10, 39,175, 98, 8, 20, 51,160,116,200,195, 40,169,201, 24,199,242,129,134, 23, 31,128,179,
+ 0,230, 0,254, 99, 47, 88,151,215, 77, 77, 24,148, 74, 75,185,125,225,105, 23, 30,163,209, 69,236, 43, 82,128, 49,196,162,148,
+140, 99,154, 49,222, 95,120,106,197,197,144, 64,161, 4, 3, 34, 26, 49,170,140,166,141,191, 87,149, 32,173, 82, 82,198,173, 37,
+210,168,197,164,248, 60, 7,129,225,112,196, 90,183,203,220,166, 57,142, 31, 95, 97,109,101,149,212, 36,108, 93, 88,196,229, 57,
+ 74, 91,250,189, 62, 42, 4,221, 25,101, 35, 90,141, 38, 70,105,196, 7, 69,158, 38, 41,198,132,181,106,140,193, 42, 29,129,215,
+ 68,227, 52,120,116, 74, 91,180, 14,212,249, 75,110,254, 74,182,239,156,231,169, 3,143,241,201, 79, 60,192,160,223, 39,177, 41,
+222,249,184,159, 0,232,101, 4,191,240, 90,181,174, 24,189, 4,207, 48,184, 9, 37,184,122, 95,228, 41,132,107, 44, 18, 60, 50,
+231, 28,215, 93,119, 61,198, 24,178,124,196, 48,235,147,231, 25,163,225, 8,101, 12, 89,238, 24,101, 57,105,163, 65,230, 66,152,
+ 73,128,193,104, 88,126,231, 28,120, 23, 61,235, 50,254, 25,128, 53,208,214, 14,165,116, 12, 87,141,169,222,220,185, 8,210, 22,
+ 47, 46,132, 22, 34, 16, 91, 51,102,126,172, 9, 70, 76, 49,119, 90,171,112, 93,167, 66, 84,196,247, 70,235, 24,102,171,132,155,
+138, 48, 28, 4,224, 53,154,102, 35,141,244,127, 22,194, 36,129, 74, 42,199, 94,134,169,138, 80, 30, 96, 19, 59, 54,148,242,188,
+ 52,188,141, 49,100, 89, 48, 80,180, 9,243,107, 76,160,250,197, 71,229,161, 10,175, 63,176, 83,229, 49, 42,192, 94,120,239, 69,
+104,206, 68,250,189,170,107,131, 81, 83, 24,183,158,196, 26,194,148, 8,214,216,200, 42,248,177, 70, 86, 97,157,235, 34, 23, 69,
+ 7,150,179, 8, 47,216, 52, 33, 73,210,200, 48, 72, 25,254, 80,198,196,188, 7, 79,238,131,145, 37,232, 24, 70, 8,172, 67, 96,
+ 88, 50,148,184,232, 86, 41,122,131, 17,199,187, 67, 68,167,172, 13, 51,188,177,204, 37,179,248,245, 30, 77, 28, 91,231,102,217,
+ 58,191,131,238,154,227,192,129,163,140,134, 61, 54,109,106,209,108, 54, 56,124,248, 16,155, 23, 22, 64,114,172,214,248, 97,198,
+160, 63,160,209,104, 97,156,102,118,102,134, 53, 25,240,232,193, 39, 72,141,101,198,166, 92,178,184, 5,165, 29,205,249, 14,155,
+183, 45,208,207,135,116, 87,151,104,108,110,177,120,205, 53,244,142, 44, 49,211,108,144,116, 26,136,207,209,202,163, 53, 72,106,
+176,179, 51,140, 6, 3,104, 53,152,187,116, 27, 90,132, 97,183,135,198,112,108,121,141,149,213, 62,131, 81,142, 19,207,246,109,
+ 91, 88, 93, 89, 33, 27,142,152,155,157,161,219,235,209,104,182, 24,101, 67, 58,157, 54,195,193, 48,132, 76, 48,104,132,153, 86,
+131,124, 56,160,105, 45, 86, 60,237,196, 50,215,110,146, 42,161,149,106,172,246, 36, 26,154,169, 69, 17,174,151,209, 54,228, 1,
+217,112,239,249,136, 19,214,137, 59,129, 97, 47,147, 0,138,132,158,146,186, 61,209,203, 22,217, 40,187,108, 35, 48, 31,223,192,
+ 19, 17, 93, 25,115,189, 19,223,109,192,226,135,120,232,164, 81,160, 42, 79,108, 13, 94,156,143, 73, 5,193,146, 87, 74,199, 36,
+ 24, 98,114, 84,240,198,139,100, 15,165,166, 24, 4,153,228, 14, 42, 72, 81,142, 87, 42, 73, 93, 5,144, 7,175,164, 50,126, 95,
+196,136,139, 44, 2, 61,246, 28,139, 81,107, 27, 89,145, 49,165,174, 41,206, 81,208,152, 48, 62, 15, 74,249, 50,217,163, 56,174,
+174, 24, 97,136, 76,196, 23, 11, 67, 65, 23, 33,148, 74, 6,138,143, 96,231,165, 66,221, 23,249, 25,158,232,189, 71,246, 64,133,
+ 88,162, 39, 80,127, 74, 20,162, 5,165, 12, 94,185,113,234, 99, 53, 22,236,125, 84,188,106,124,237,131, 59, 61,190,172,186, 56,
+ 1, 53, 78,178, 97,154, 2, 87, 99,197,204,216,232, 8,235,196,151,158,208,100,178, 94, 52,168, 34, 5, 60, 30,143, 84, 18, 31,
+ 21,198,168,248,253, 56,220, 32,222,135,107, 37,130,104,143,148, 70,157, 39,247, 69, 56,202,225,188,139,199,135, 60,247, 60,242,
+200,195, 60,254,212, 19,164, 70,163,115,199,210,193, 99,204,207,204, 35,249,144,166, 49,104,231,200, 92, 14,214,224,242, 28,131,
+198,103, 14,131, 38,207,114, 68, 57, 68,235, 0, 72,121,136, 37,103, 49,150,109,140,162, 63,112,136,232, 48,231,222,145,229, 35,
+230,230,154,228,249,128,165, 99,199,130,130, 0,156,119,225,118,215,227,181, 90, 36,168,249, 72, 51, 3,100,121, 54, 94,227,226,
+145, 60, 67,242, 49,216,133,185, 16, 50, 21,192,211, 57,143,103,200,254,135,191,200,117,215, 95,203, 11,174,184, 10,236, 16, 39,
+107, 24,147,113,124,105, 21,151, 11,163, 97, 23,196, 99,146, 17, 89,150,225,242,140,196,106,114,151,151,215,175, 0, 62, 65,225,
+188,155, 88,175, 46, 82,227, 33,230,157, 99, 98, 28,189,136, 59, 23,113,220, 68, 2,120, 25,165,113,113, 93,230,121,142,120,143,
+ 73,146,104,132,121,226,173, 31, 12, 88,231, 75,192,181,214,226, 93, 56, 55,173, 20, 73, 98,199,244,182, 10,121, 21, 74,133, 80,
+ 64, 72,244, 12, 97, 2, 0,101, 20,163,209, 8,231, 29, 73,163, 65,146, 36,120, 31, 88, 4, 19, 1, 92, 69,166, 32,207, 93, 84,
+ 77, 66,158,187,146,130,183, 54,161,217, 84,140, 70,209, 64,176, 73,105, 80, 21,222, 57, 42,122,225,206, 67,244,158,139,107, 81,
+132, 70, 74,134, 46,234, 4,231, 61, 58,254,206, 57,135,119, 18, 65,221,160, 36, 24,202,121,188,246, 86,155,210, 56, 81,168, 96,
+ 76,104,194,152, 41,114, 10, 2,187,145,164, 22,163, 85,121,111,185,194,216,162, 96, 97, 92, 76, 44, 84,160, 37,230, 66, 12,199,
+ 76,154, 86, 49,247, 70, 99,197,160, 1, 39,142,158, 12, 65, 53, 16,109, 56,190,222,167,157,164,108,238,108, 66, 91, 69,218, 78,
+ 57,112,232, 41,140, 19, 22,230, 54,177,109,199, 38,186,163, 54,143, 28, 62,204,145,222, 65, 94,120,229, 78, 48, 93,122,221, 46,
+ 13, 13,190,215, 39,181, 13, 84,154,224, 50, 97,203,124,155,181, 97,151, 27,174,188, 4, 55, 26,112,252,248,113,146, 89,216,177,
+117,129,157,151, 93,198,210,224, 24, 50,187,133, 57,157,146,245,186,184, 65, 78,182,182,204,252,117,151, 98,103,230,144, 35,199,
+195,181, 68,163, 26, 13,178, 97, 23, 99, 18,230,174,191,138,225,250, 58,190, 33, 52, 54, 25,230,119,204,243,119, 31,255, 28,163,
+ 44,163,223,235,211,106, 54, 89,235,117,201, 69,216,121,201,101,116, 87, 87,200,134, 33, 87,102,203,226, 38, 6,131, 30,131, 81,
+ 70,103,166,197, 82,119,128, 50, 22,227,160,149, 88,134,206, 97, 16,172, 86, 36, 70,209, 76, 52,169, 77, 72,149, 68,224,246, 72,
+238, 48,132,100, 81,231, 93,224, 62, 69,176, 86,227, 92,208, 97,102,166, 49,243, 86, 87, 64, 67,145,232, 21, 21,165, 30,147,144,
+ 39, 80,225,167,147,113, 98, 82,177,167,137,188,211,138,103, 85,236, 79, 77,253, 71, 73,173, 22,244,179,248,170,247, 56, 78,244,
+ 26,179,139,227,228,190, 34, 78,107,162, 55, 25,226,177, 6,141,193, 40, 59, 62,110,204,128, 45, 65,164, 56,239,152,237, 56,142,
+253,234, 9, 90,175,156,172, 98,172, 83, 79,124, 23,165, 75,114, 88,170, 41,174,101, 70,107, 8, 11,160,245, 56, 52, 80, 30,203,
+160, 98,190,128,142,241,103,165, 53, 42,110, 51,193, 78, 76,176, 12,106, 34, 60,161,162, 55, 40, 85, 6,161,204,138, 15,172,129,
+210, 58,130,151,174, 24, 47, 58,198,239, 35, 11,128,144,139,139,192,168, 74,118,166,152, 47, 34,235,224,188,139, 30,150,155, 72,
+112,171,102,214, 86, 67, 0, 94,124,153,209, 60,142,255,141,231,168, 52, 86, 74,112,158,252,119, 28,106, 8,191,245, 69,158,131,
+115,227, 87, 1,234, 81,105, 86,169,104, 95, 9, 89,120,239,241, 49, 78, 91,102,210, 42,193, 19,194, 37,130,196, 56,105,100, 34,
+ 36,199,251, 60,102,102, 7,138, 56, 27, 5, 90, 57, 27, 57, 14, 31, 58,204, 11,175,185,138,217,217, 25,250,189, 30, 89,158, 97,
+ 18,131,243, 14,163, 21, 62,247,209,171, 22,116,140,171,182,154, 45, 0,210, 52,101, 48, 24,150,172,199,112,148,161,117,131,225,
+ 48, 35,119, 35,156,140,120,193,149,151,208,153,157, 97,255, 67, 15,243,200, 35,143,227,242,160,136,131, 82, 14,212,186, 14, 46,
+ 90, 0,246,202,185, 6, 58,216,162, 80,248, 8,172,222, 23,185, 3, 33,183, 62,228,127,196,176, 81, 30, 60,173, 44, 27,178,186,
+186,204,182,237,243, 92,123,221,149,108,218,212,166,223,239,163,176,184, 76,161, 77,184, 7, 7,131, 97, 8, 33,136,148,158,119,
+145,207, 82, 56, 9, 82,100,245,198, 53, 87,128, 79,145, 89,172, 35,115,161,181, 46,211,158,189,132, 28, 20, 29, 25, 13,239,198,
+137,107, 18, 25,138, 2,164, 93, 4, 97, 93,201, 1, 41,230, 32, 73,146,242,251, 42, 69,159,231,121,153, 52, 87, 48, 68, 62, 82,
+229,206, 59,140, 53, 24, 27,232, 78,109,116, 60,159,176,143,196,218, 72,189, 11, 70, 91,156,247,113, 30,130,145,230, 92, 96, 68,
+108,146,160, 32,134, 18, 92,105,168, 56,151, 7, 29, 21,153,129, 66,195,186, 60,159,184,143,170, 33,132,170,254, 44,140, 54,173,
+ 52,205,102,147, 34, 87,189,200,240, 87,145,173, 42, 28, 54, 69,181, 90,168, 82,143,164, 10, 32, 79, 72,210,148, 36, 73, 74,199,
+193,104, 67,158,101,100,217, 40,176, 42, 62,199, 21,204,144,214,224, 61, 70, 41,196,133,251, 68, 23,119,189,143,127, 7, 42, 15,
+ 37,130, 53, 9, 86, 39, 40,132,102,162,104, 89, 97,115,167, 73, 43,177,248,209,136,153, 86,202,246,197,121, 22, 23,102,177, 86,
+232,117,215, 88, 89,239, 67, 99, 19,235, 67, 56,252,212, 33, 22,119,236,228,232,225,163,108,158,153,133, 97,198,104,189, 71,163,
+209, 98,180,214, 69,233,140,153,133, 54,107, 71,150,184,234,138, 93, 28, 89, 58,206,202,122,151, 60, 31,178,117,251, 60,118,198,
+210,185,242, 5,244,142, 30,195,107, 97,219,150, 69,214,151,150, 72, 22,102, 80, 73, 76, 16,109, 55,233,118,123,140,196, 49,179,
+ 99, 11, 89,158,193,166, 54,233,214, 77,168, 68,232,245,187, 88,219,194,153, 6, 15,125,254, 97, 70,195,192,148,118,102, 58,172,
+174, 46,211,110,183, 25, 14, 6, 12, 7,125,180,130,217, 78,139,197,197,121,122,189, 30,214, 36,172, 44, 31,199,106,139, 17,161,
+101, 45, 6, 65,123, 71,203, 26, 26, 6,102, 82,139,241, 25,169, 81,101, 40, 19,241, 24,109, 48,218,196, 48,112, 8,185,136,214,
+225,158,115,130,105, 37,173,183,122,124, 40, 15, 81,147, 57,238,213,210,143,113, 9,130, 66,169, 51,165,218, 35,184,108,232,121,
+ 79,238, 71, 77,167,204,149, 37, 36,170,180, 36, 21,102,162,188,106,227, 58,180,194,219,211,101,166,186,142, 65,214, 34,206,206,
+132,209, 32,147,231, 83, 4,154, 10,192, 47, 41,246,130, 25, 8, 49,121,173, 66, 54,124, 81, 10, 56, 77,225, 23,161,131,106, 98,
+ 89, 17,219, 83, 49, 22, 29, 12,135,152,184, 23,203,175,140, 50,229,182, 74,153, 10, 77,173,203,172,251,241,190, 76,101,255,147,
+201,127,229, 56,164,242, 93, 52, 8,138,237, 74, 10,189,242, 91,165, 13,198, 38,104, 99,131, 97,162, 52,162,199,249, 12,227, 50,
+163,113, 66, 77, 65,187,149,137,119,213,236,243,138,241, 52,142,253,143, 75,147,138, 68, 61, 95, 45,141, 41, 67, 15,225,115,151,
+251,144, 80, 21,105,188, 42,160, 23,251,243,149, 4,196,130, 62, 30, 31,199,151, 49,222,170,183, 63,206, 48,143,192, 95, 30,123,
+204,200,140, 67, 27,227,146, 26, 81, 82,134, 71,148,178,225, 58,105, 19,255,181, 69,173, 0,219,182,204,241, 85, 55,221, 72,167,
+221,193,249,156,110,175, 27,178, 5,117, 80,204,205, 86,139, 44,203,131,119, 73,176,198,157, 11,244,101,230,242, 72,245,134, 4,
+180, 60,210,209, 74, 43,108,106, 72,155, 45,154,205, 38, 79, 29, 56,196,193, 3,135,201,115, 65, 43, 75,158,187,232, 45, 70,234,
+ 88, 38,147,228, 10, 79,210,149,115, 24,231, 19, 41,141,165,178,180,138,113,117, 0,128,115, 57,221,238, 58,203,199,143, 50, 59,
+215,225,218,107,119,177,109,235, 22,210,196,134,220,135,212,210,108, 54,208, 70,135,236,240, 52, 41, 1, 66, 68, 48, 49,150, 95,
+ 80,185,101,194,107,229,239, 34, 25,172, 0,170,177, 49, 22,140, 53,137,148,248,120,140,227,184, 98, 32,165,130,210, 43,140, 2,
+ 23,243, 23,202, 88,113,145, 87, 96, 18, 84,164,181,165, 98,172, 74, 76,244, 76, 98, 34, 82,233, 93, 27,131, 54,166,156, 19,107,
+ 18,156,203, 99,172,218,150, 52,115,238, 28,198, 38,184,152,184, 23, 18,120, 65, 27, 27,214,168, 11,108,132,119, 82,178,159, 74,
+ 23, 97,145,201,170, 28, 19, 61,238,146,169,136,161, 17,165, 40,199, 93,204,159,137,227,172,230, 30,232,104,228,132, 4,203, 49,
+ 83, 82,130,251,148, 34, 87, 58,228, 53, 36, 73, 18,230, 56,230, 84,168, 88, 10, 34, 34,164,137, 45,117,145,177, 6,101,194,220,
+ 20,224,174,163,241,110,140,174,148, 73, 51,174, 44, 81,154,212, 36, 88,107,176, 9,164, 73,200,176,183, 74,104,104, 69,170, 96,
+115,187,141,207, 2,245,221, 93, 91,101,216, 31,226, 50,197,220,220, 60,205, 24, 87, 71, 89,246, 31, 56,196,209,213, 30, 56,197,
+252,204,102,172,178,100,131, 12, 99, 52,253,124, 72,163,211,225,248,177, 21,180,109, 32, 90,179,176,101, 11, 40,225,200,209, 67,
+ 44,238,220, 70,123, 97,129, 67, 79, 61,197,226,165, 91, 25,228, 67,210, 52,165,181,105, 14, 51,215,134, 20,104,167,216,217, 54,
+ 75,199, 14,211,220,186, 72,186, 56,135,222,178, 25,167, 60, 40,135, 36, 22,139,193, 57,205,231, 63,253, 32, 13,219,162,211,106,
+145, 54, 52,237, 78, 8,177,205,180, 59, 44, 45, 45,209,105,165,164, 38,228, 11,205,204,205,177,222,235,147,229, 57,195,126,143,
+205,237, 54, 13, 66,101,128,207,115,148,207,153,109, 53,104, 90,133, 21, 71, 51,177,101,158, 81, 8,155,132, 80,135, 82, 58,230,
+175, 8, 46, 38,158,122, 15,166,213,104,191,181,160, 95,125,181,214, 50,210, 78,227, 26, 91, 85,177,156,213, 25, 0,186,174, 0,
+162,154,174,139, 59, 33,206, 94, 40,234,105,152, 23,169,102, 42,171,147,208,243, 85, 31, 80, 77,214,166, 79, 89, 11, 74, 84,133,
+182,173,208,190,170,186,203,233,138,192,162, 70,218, 84,178, 77,199,177,253,162, 62, 87,197,216, 43, 17, 28, 41, 50,187, 75,144,
+174, 36,114,169, 8,204, 49,125,172,176,190, 76,153,128,166, 49,198, 6,192, 45,226,125,145, 18, 11,180,161,142,134, 75,164,136,
+ 84,244,248,149, 25,123,221, 4, 64, 47,246, 93,128,183,209,182,252, 59,128,125, 80, 88, 69,146, 83,149, 21, 8,166,126, 48,116,
+ 2,251, 48, 89, 55, 46, 82,201,212, 46, 43, 39,170,101,107, 99, 22, 97, 42,189,178,172, 79,159, 40,135, 84, 99,143,190,168, 43,
+245,149, 26,207,106, 86,128,103, 50, 71,160,172,243,143,235,166, 96, 72,124, 53, 84, 84,169, 39,245,101,246,255,184,132,147, 74,
+ 29,106,193, 92, 20,201,146,101, 55,130, 2,208,181,197,104, 27,128, 29,131,181,105,184,246, 70, 99,172,162,221, 12, 30,216,241,
+229,227,244, 7, 61, 76,106,233,141, 6,100, 46,148,177,172,175,119,233, 15,134, 8, 66,183,223,167,219,237,210, 31, 13,232, 15,
+ 7, 12,179, 81, 92,133,161, 68, 42,147, 33, 74, 5, 38, 66, 68,227, 60, 52, 91, 45, 86, 86, 87, 88, 93,233,210,235, 13, 65,235,
+ 96,189,187, 28,231,242,104,213, 87,234,106,181,166,209,104, 76,220, 67,133, 1, 32, 18, 74,144,148, 82, 56,113, 49,116, 53, 86,
+234,101,226,169,210,244,122,125, 14, 31, 58,200, 96,208,101,113, 97, 51, 91,183,206, 51,191, 48,135,181, 9, 94,132, 86,171, 73,
+171,157,210,108, 54, 66,242,156, 82,100,163, 81, 76,118, 84, 49, 86,174,198,198, 69,133, 65,113, 46, 47,141,236, 2,164,138,114,
+182,162,218, 35, 73,146, 50,222,238, 99,200, 64, 69, 54,171,236, 27, 81,241,110, 11, 67,193, 87, 88,155, 34,193, 54,207, 93,164,
+214,199, 10, 51, 41, 75,186,194,253,155, 38,105,200,135, 24,141, 66, 9,146,181, 12, 7, 67,172,209,140,134,225,188,242,232,137,
+187,184,198,116,168,139,101,148,101,193, 24,144,177,193,164,212,216, 16, 23,241, 19,158,121, 89,118,167, 99, 25,173, 14,204, 73,
+ 94, 73,150, 27,135, 36,244,132, 63, 19,116,232,184,194, 33,150,226, 20,133,209, 49,153, 89,198,157, 68,244, 88,191, 18,115, 0,
+148, 14,215,196,249,144, 15, 97,141, 9,165, 40,132, 36, 57,173, 53,205, 86,139,102,167,141, 73, 76, 72,148,147,112,255, 24, 29,
+170,136, 76, 52,112, 37,222,255,198, 90,108,146, 96,108,130,181,161,204, 45,236, 54,148, 23,118, 58, 51,160, 13,189,193, 8, 49,
+134,110,238, 88,233,245,104,164, 9,243,157, 14,155,231, 54, 49,204,114, 70,222,161, 36, 67, 73,206, 74, 54,128,164,193, 80, 44,
+ 7, 87,123, 60,126,120,137, 97, 46,172,118,187, 12,189, 3,219,224,208,161,101,134, 30,182,238,220,193,112, 56, 2, 45,108,185,
+100, 7,189,193, 0,237, 21, 98,160,189, 56, 79,107,231, 54,146,173,155, 49,137,194, 24, 33, 87, 96,231,103, 97,182,129, 52, 13,
+155,182, 46,112,240,177,199,153,123,241,117, 48,211, 66,205,116,144,213, 53,146, 60, 71, 53, 90, 28, 91,234,178,244,248, 97,154,
+166, 73,171,145,210,106,165, 92,127,221, 53, 28, 95, 90,138,216, 98, 88,220, 60,203,250,202, 18, 51, 51, 45, 58, 51, 51,172,172,
+172,161,180, 37,203,114, 82, 1,147, 57,210, 36, 9,238, 64, 54,162,221,176,204,181, 26, 88, 28,141, 36,228,176, 36,198, 4, 99,
+ 40,150,100,230, 46, 39, 19,135, 87,190,100,132,179,204, 99,218,173,246, 91, 39, 60,235,104,109,233,138,254, 43, 63,173, 80,207,
+101, 66,210,134,110,123,180,154, 11, 47,120, 3, 64,223,248,119,106, 34,233,237,196,154,117, 78, 29,115,159, 68,239, 49, 27, 48,
+ 17, 47,175, 50, 4,114, 34,160,151, 33,136,113,178,154,175, 82,253, 83,219,251, 74, 78,186, 84,104, 13,197,100,105,136, 84,234,
+161,203,204,253, 8,120,101, 89, 76,140,231,233, 2,220,163,165, 91,122,230,166, 48, 14,244, 24,140, 43,177, 70,173,170,172,128,
+ 25, 3,115,133,226,215, 21, 42,127, 26,208,149, 30, 51, 3,166,100, 32,198,117,235, 10,131, 86,225, 5,129,141,144, 50,145, 80,
+143,203, 7, 35, 83,161,116,213,192, 24,155, 94,190,240,178,202, 6, 29,170, 76, 90,140,181, 79, 49, 14, 44, 37,160,151, 77, 74,
+244,100,162,227,248,111, 61,174,102, 40, 26,157, 40,133,232,106, 66, 99,153,121, 23, 89,136,168,176,116, 81,241, 48,222, 95,225,
+121, 67,156, 23,138,249, 44,188,114,139,142, 47, 19, 13,165, 42,149,107,180, 98,182,221, 98,219,214,237,116,187,235,116,123, 61,
+ 30,126,228, 81, 6, 89,206,122,183,199,210,242,113,146, 52,197,121,207, 90,183, 27,198, 27, 89,156, 97,150,197, 74,203, 48,215,
+ 74, 75,164,250, 37, 36, 41,161, 25, 12, 7, 40, 29,234,216,187,131, 17,253,225,136, 81, 62, 10,141, 83,136,241, 96,241, 88, 99,
+ 99, 51,148,144,105,169,181, 66, 98, 34, 84, 40,201, 50,145,154, 14,224,169, 77,240,194,108,225, 77, 23,148,176,130,102,154,150,
+ 43,161,223,235,243,212, 83, 7, 56,114,248, 8,189, 94,151,225,160,143,115, 66,158,141, 24, 13, 7,140,134, 67, 68, 28,217,112,
+ 20,194, 15, 89, 86, 54,241, 24,131,186, 46,195, 32, 33, 20,165, 74,150, 46,148,159,201, 68, 72,233,100, 25,185, 66,165, 44, 81,
+169,178,108,204,196,228,190,170,247, 63, 93, 98, 91, 86,199, 20, 84,125,164,251,157,207, 43,172, 80,200, 49,112, 62,120,205,214,
+218, 50,115,190,168,121,119, 34, 49,252,145,227,197,151,201,113,168,113,146,110, 56, 39, 87,122,231, 85, 38,164, 48,120,148, 10,
+ 57, 47,206, 5,195,202,249,216, 32,171, 18,250,171, 54,187, 10, 9,104,110, 50,188, 68, 76,222, 43, 28,177,200,216, 21,243, 93,
+156,103,121,173,147, 36,150,248,197,172,122,107, 72, 27, 13,180, 13,217,212,170,146, 19,149, 36, 9, 42,134, 8,138,202,138, 80,
+ 34, 24, 18, 51,195,247, 6, 29, 19, 53,181,181,161,204, 46,150,216,121, 66,120, 46, 92,219,112,223,101,185,167, 59, 26,209,119,
+194,209, 94, 70,207,195,112,148,177,116,232, 40,195, 94,159, 65,230,112,198,210,237,103, 28, 91, 90,101,181,219, 71,119, 58,104,
+147, 34, 24, 6,162, 88,201, 28, 71,214,123, 28, 89,237, 49, 68, 51,112,134,158,211,172,244, 71,164,237, 54,199, 87, 87, 88, 27,
+172, 51,191,117,129,220,141,152,237,204,112,172,183,130,207, 51,154,173,148,100,182, 13,179, 45,148,209, 12,122, 93, 84,167,137,
+ 78, 53,210, 0,179,169, 19, 12,183,108,128,157,155,193,116,218,184,229, 21,186,199,150,104, 54,218,144,107,150,158, 56, 74,170,
+ 18,242, 44,167,209, 72, 65,121,210, 52, 65,156, 48,236, 15,176, 26, 52,161, 12,114,113,113, 30,165, 13, 7, 15, 31, 38, 73,155,
+ 12,214,122,116,140,101,115,167,137, 85,130,207, 51,102, 91, 77, 82, 45,164, 6,172, 53,232,152, 28,231, 92, 94,160, 16,142,112,
+255, 11, 58,150,135, 10,121,238,177,136, 15,101, 83, 19,133,107, 50, 6, 86,136, 73, 58, 85,151,215,151, 11,164,236,225, 52,213,
+ 5,172,100,106, 9,165, 17, 27, 83,243,170,140,245, 86,111, 56,145, 19,227,247, 74,141,169,211,147, 33,188, 42,227,220,149,158,
+ 91, 78, 98,242,137, 62,193, 11,175, 36,247,199, 44,251,162, 46,188,218,203, 77,198, 37, 29,227,220,235,152,131, 46,149,158, 62,
+ 76,132, 38, 84,121, 59,176,177,215,143, 47,147, 19,199,201, 66,178,113,165,128, 98,170,171,222, 84,155,172,146, 49, 56,209,200,
+ 18, 29,142, 84, 36,159,133,155,187,202, 44,200,137, 29, 2, 42,201,143,177,202, 21,239, 2,147, 35, 33,251,110,220, 53,140, 16,
+ 15,215, 82, 25, 89, 44, 63,147, 10,184,250, 74,147,179,144,229,103,202,218,240,105, 35,175,244,182,161,226,205, 23,185, 0,122,
+106,126,170,205,103,166, 58,229, 21, 37,121,241, 56, 33,121, 14,124,225,161,232, 10, 67,160,199, 73,147,197,202, 87, 69, 82,101,
+204, 2, 14, 89,198, 97,231, 70,201, 68, 92, 82, 77,182, 20, 11,128,150, 67,218,108,115,124,245, 17, 46,185,236, 18,156, 73,120,
+228,137, 39, 80, 24,140,241,172,173,173, 97,147,148, 70,179,193,112, 56, 68,161,201,114, 87, 26, 93,162, 96,152,119,209, 90,147,
+ 38, 13, 92,150,211, 76, 67,104, 36,115, 35,142, 28, 62,204,214, 29, 59,105,183, 91,228,222,177,188,180,140,203, 67,178,151, 50,
+ 9, 74, 2, 45,167, 53,216,200,236, 56, 23, 50,143, 37,122,241,170, 40,113,171,148, 91, 85,197, 36,182, 4,197, 52,209, 12, 6,
+ 57, 54, 73, 17,160,223,237,243,240, 67, 79,240,196,227, 7,153,153,105, 99,147, 70,240,106,189,224,178, 17,189,110,151,108,148,
+225,242,208, 36, 74,137,196,220, 72, 85,246, 61,208, 90,227, 99,102, 55, 42,128,100,200, 53, 80,227, 46,120,149,117, 93,140,179,
+ 0,236,106,199, 60, 19, 65, 70, 71, 90,189,122, 95, 22, 64, 95,236,203,139, 27, 87,113,136,170,244,123,240,228,177,153, 85,238,
+131,238, 48, 86, 69,195,195,134,100,202, 88, 93,226,240,228,121,134, 49, 22,165, 13,190, 50, 6, 31,235,192,173, 14,181,241,196,
+ 26,121, 84, 48,106,198,140,161, 10,212,181, 49,101,197, 69,168, 52, 8, 37,125,218,132,100, 41, 99,108,200,179,200,163, 49, 17,
+ 13,177, 34,115, 61, 96,110,104,166,160,117,104,110,163,138,138, 28,175,202,168,165, 49, 54,148,141, 90, 67,146,132, 4, 56, 99,
+131,241,230,179, 17, 73,146, 6,166,167,146,120, 91,220,113,137, 77,201, 92,142, 19,135, 21, 83,174,155, 34,206,175, 34,213,175,
+ 98, 70,157, 23,202,108,251,162, 52,206, 0, 73,164,145,197, 90,116,163,129, 50, 64, 30, 40,123, 99, 21, 43,235, 61,214,189,163,
+173,133, 3,235, 75,204, 30, 94, 37,213,154,197,249, 69, 26,141, 25, 6,249,136,238,129,227,120,132, 86,187, 69,167,209, 8, 73,
+167,206, 65, 83, 88, 18, 97,132, 97,109,125,141,254,122,159,163,195,199,216,178,169,195,104,152,211,105,166, 72, 39,101,113,113,
+134,133, 77,219,120,234,169, 39,240,131, 17,170, 59,192,225, 81,157,132,206,214,121,134,171,235,144, 41,236,226, 12, 94, 67,107,
+215,229,140,158,120, 28,215, 95,195,180,103,177, 91, 23, 49, 71,143, 33,253, 33, 12,135, 88,163, 88, 29,245,217,185,243, 18, 30,
+127,242,113,230, 23, 54,161, 27,138,229,195,199,104,219, 16, 22,152,153,233, 48, 26,245,200, 6, 61,182, 46,204, 48,219,105,176,
+214,243,216,118, 19, 11,168,188,207, 66,187, 69,222,237,198,121,247,140, 70, 67, 26,141, 70,137, 25, 38,198,206,157,115, 36, 54,
+101, 48,200, 66,101,142,243,161,244,209, 11,182,208,124, 5, 43, 83, 40,209,178,213, 40,122, 3,197, 73,121,243, 84,111,184,113,
+108,106,178,249,160,174,212, 75,158,208,224,110,156, 88,126,154,178, 56, 93, 42,221, 83,149,194,203, 68,198,218,216, 19, 63,225,
+248,213, 30,178, 76,255, 61,149, 24, 88,246, 98, 28,151,147,249, 13,178,253, 39,230, 98, 42,246, 95, 85,152,122,220, 51,110,210,
+123, 56,211,100,133,147, 36, 38,158,116,230, 42, 9, 73,101,147,138, 34,110, 41, 30, 85,161, 67,169,100,210, 79,118,250,211,101,
+105,144,210, 6,209,161, 61,105, 40, 79, 19, 84,161, 95, 43, 73,135,186, 12, 53,108, 84,206, 56, 57, 55, 27,141,127,186, 59, 92,
+ 53, 33,232,228, 29,242, 38,129,191,104,117, 43, 18,186, 92,169, 88,162, 86,109,247, 89,141,207, 23,237, 54,117, 1,234, 49, 4,
+ 81,237, 58, 88,182, 1, 82,149,106, 9, 53,213,159, 83,160,215,239,179,178,182,138,177,150, 7, 31,252, 18,151, 92,254, 2,146,
+ 67,135, 17,237,162,129,234,177,218,144,231, 25,137, 9,149, 14, 65,177,217, 96,128,120, 65, 91, 75,171,209, 12, 64,149, 57, 52,
+138, 70,154,194, 72,192,121,150,142, 28, 97,203,182, 29, 52,210,132, 68, 27,134,131, 65,152,183,220,209,239,247, 66, 25, 95,145,
+143, 49,213,166,181,136,205,134,210,183,144,148, 21,192, 96, 28,235,133, 80,130,166,180,142,140, 85, 65, 27,135,146, 26,163, 53,
+ 62,247,172, 46,175, 49,202,150, 98,167,180, 28,148, 38,207,179, 50, 87, 67, 36, 36,225, 25, 47,101,239, 3,143, 43,217, 0,197,
+184, 20, 85, 25, 53,206, 82,175,228, 80, 76, 3,116,181,131, 96,113, 30,197,191, 69, 92,185, 0,156,130,190, 46, 26,208,248, 88,
+ 62,166,140, 42,245,195,104,148,209,104, 36,129,214, 47, 58,170, 65, 73,173, 43, 69,204,228, 31,135,137,138,210,186,144,160, 56,
+190,183, 68,170,213, 25,227, 82,177, 49,144,187,113,153,109,245,125, 44,229,180, 54,193,123,135, 19, 79,150, 57,178,204,145,231,
+190,172, 0,242,185, 43,157, 21, 85,101, 7, 85,212,217, 50,214,225, 62, 86,212,148,249, 11,166,208,201, 30, 33,100,193, 83, 86,
+ 22,229, 24,163, 66,254,131, 53,193,171,206,114, 92,238, 24, 56,143,177, 33,215,167,200,221, 40,238,163,162, 43,160, 73,211,144,
+ 0, 88, 86, 27,248,192, 12,233,192, 12,129,132, 94, 33, 90,145,121,135, 31,244, 73,173, 33,141,172,128,228,158,102,136, 89, 52,
+ 46, 0, 0, 32, 0, 73, 68, 65, 84,187,133, 86,138,227,221,117, 18, 44, 43,125,135,145,156, 39,250,135, 73,108, 8, 89,180,211,
+ 4,131,208,234,204,210,180, 9,198, 11,166,149, 50,114, 67,122,131, 53,218,115, 11,164,237, 5,150, 14,193, 76,179, 69,187,213,
+ 98, 54, 81, 12,215,214, 89, 95, 94,102,199,194,102, 70,235, 93, 46,219,182, 29,219,108,224, 92,142,206, 50,196,141, 96,243, 22,
+140, 79, 25, 29, 63,142,233,180,200,140, 39,153, 79,177,109,139,214, 33, 84,163, 91, 29,146, 70,138, 91,207, 89, 61,182,204,104,
+ 52, 68, 3,157, 78,139,181,181, 85,150,151, 90, 92,113,197, 85, 60, 54,122, 28, 81,134, 45,139,139, 28, 60,116,128, 70, 83,179,
+222,237,177,185,209, 98,235,150, 45,172, 63,126, 8,155, 38,104,113,248, 60,195, 42,133, 53, 10,231, 50,208, 9, 74, 27, 70,131,
+ 33, 77, 27, 67, 39,202,160, 98,203,106,231, 66, 95, 4,147, 54,131,202,113,193,174,179, 99,229,233, 35, 16,197, 62,200, 69,119,
+ 47, 57,209,139, 83,138,169,150,164,234,148,160, 82,180,120, 61,121,131,117, 74,171,242,212,113,250,211,110, 48,209, 63,126,242,
+223,226,183,102,195,242,187,113, 47,228,208,192, 99,124,163,168,233, 60,188,178,100,232,140,227, 2, 19, 96, 48,238, 43,172,207,
+ 16,196,171,115,171, 42,253,176, 75, 47,230, 20,185, 10, 82, 1, 68,181, 65,187,216,201, 74, 3, 53, 81,250, 86,206,223,244, 28,
+ 23,229, 46, 42,100,180, 42, 93,105, 30,164,170,221,220, 42,221,230,166,128,122, 26,152, 67, 94,130, 63,101,152,166,240,208, 54,
+154,155, 82,193,151,157,219, 55,232, 31,175,252,134,151,107,162, 89, 79,185, 63,153, 72, 12,173,142,183,168, 29, 47,234,218, 79,
+ 48, 50,162, 39, 50,200, 50,150,143,175,224,128, 81,158,243,240,163,143,210, 31, 12,104,180,218, 12, 6,195,144,193,234, 92,136,
+ 91,198,184,106,154, 38, 12,134, 3, 58,205, 86,153,193,110, 98,151, 56,107, 76,232,110,214, 16, 52,138,225, 96,128,119,158,135,
+ 30,124,144,118,187, 19,122,217,143, 70, 88,107, 24, 13, 7, 24, 29, 12,209,160, 76, 99,226, 88,225,221,169,241,253, 22,188,247,
+184,238, 99, 2,142,115,121, 72,250, 19, 41,251, 11,100,153,139,201,101, 62, 94,215,240, 95,106,146,216, 76, 97,220,157,206,121,
+ 65,124,236, 84,103,198,160, 93,109,162, 82,140,163,104, 35,140, 31,119, 72,172, 26,158, 27, 25,113, 89,150,149,177,246, 2,172,
+ 11,239,220, 87,107,184, 43,241,246,220,141,195, 13,129,150, 15, 44, 70, 81, 53, 97, 98,205,120,136, 3, 83,122,158,185,119,101,
+ 13,184, 54, 38,128, 36, 99,246,104, 52, 10,173,110, 11,227, 34, 73, 44, 58,198, 75, 75,138,188,194, 28, 84,141,200, 34, 1,109,
+114, 78,138,241,197,100,206,104,100, 20, 61, 6,202, 30, 11,106,220, 35, 99,162, 91,103,108,115,173, 43,250, 65,219, 80,207,140,
+137, 6, 78, 30,235,216,167,140,240, 44, 23, 68, 12,248, 17, 9,150, 36, 77,104, 88,131,246, 69,206,203,184, 77,120, 48,148,132,
+ 36, 77,202,117, 42, 46,143,201,145,141,192, 70,138, 39,207,114,180, 10, 52,178,169,244,181, 80,132, 10, 11,229,130,177,146,197,
+184,124,226, 52,189,225, 0, 47,150,129,119, 88,147, 4, 3, 88,192, 15,115, 90,105,194,166,206,102, 18, 45, 28, 91,239,178,186,
+190,198, 76,179, 65,195, 41, 90, 45,203,182,133,237,236,220,177,133, 99, 71,142,161, 26,194, 85,151,109, 70,178, 1, 91,230,183,
+ 99,181,208, 79, 91,248, 92,211,237,174, 50,127,245, 78,124,106,192, 40,196, 1, 46, 71,245,250,152,180, 65,179, 51, 67, 62,200,
+ 73,182,205,134, 78,120, 6, 52,121,104, 84,229, 5,175, 53,195,110,151, 39,247, 63,134, 21,197, 32,207, 1, 71,179,153,210, 93,
+239,242,248, 99, 79,210,108,182, 56,118,228, 40,173,206, 12, 30, 69,127,144,177,180,180, 66,163,213,161,221,110,178,125,235, 22,
+ 14,254,255,156,189,217,146, 36, 71,154,165,119,116,183,197,221, 35, 34, 19,168, 2,170,186,171,167,187,103, 19, 82,134, 34,188,
+227, 35,240,177,240, 98,124, 5,138,144,188, 24,161,112, 70,122,175, 2,144,153,136, 8, 95,108,209,149, 23,191,170,154,154, 71,
+ 36,170,100, 26, 18, 82,232, 64, 70,164, 47,230,166,255,114,206,119,254,248, 35, 98, 98,208, 66,195,185, 5,189, 34,240, 77,100,
+ 18, 90, 74,196,213, 34, 50,210, 35, 68,134, 44,160, 13,128, 80,232, 76, 7, 27,200,138,232,124, 64, 72, 60,119,234,181,203,140,
+155, 38, 60,165,198, 50,246,182, 27,175, 10,225,180, 63,108,191,218,173,167,191, 64, 92,199,247,227,215,191,244,192,124,255, 0,
+ 76, 59, 31, 60, 99,251, 84,128,173, 11,100, 59,207,124, 66,130,128,120, 51,202,110,105, 83,169,165,238,221,249,195, 89,129,195,
+ 48,145, 15,209, 88, 87,252,172, 17,146,129,189, 45, 98,254, 92,167, 94,111, 82, 72, 32,102,213,230, 83,103,239,112,223,171,225,
+ 44,177,119, 34, 45,182, 98,103,123,255,226, 93, 0, 67,220,176,181, 77,168, 13, 18, 49, 1,164, 20,153, 80,133, 6, 94,146,154,
+131,176, 97, 30,180,129, 3,123,187, 65,115, 83, 98,239, 31,216,205, 60,125, 11,132,105, 67, 15,218,194, 44,189, 89, 99,188, 89,
+229,236, 70, 78,216,214, 46,109, 16,199, 87,223,147, 50,116, 15, 59,209,221,155, 63,199, 0, 23, 34,250,113, 4,231,155, 7, 59,
+196,136,117,181, 96, 76,160, 51, 26,118,153,179, 69, 75, 98,181, 11,148,234, 17,163,196,195,233,128,215,215, 23, 12,125,143,215,
+215, 11,237,237,203, 78, 53, 70, 68,231, 33, 33,224,150, 21,201,123, 44, 87, 18,222,176, 16, 16, 83,128, 96,200,138,100, 90, 91,
+109,187,115, 58,120, 90, 17, 25,242,129,209,210, 24,185, 84,213, 90, 22,124,160, 3,162, 20,106, 89, 89,207, 52, 29,230, 92, 8,
+ 8, 65, 54, 61,161,232,160, 93,236, 10,166, 68,222,241,147, 62, 55, 6,208, 90,160,132,249, 52, 92,116, 6, 81,239, 37,109, 55,
+219,118,185,155,136,108,179,167,181, 64,150,246,207,128, 19,151,221, 59,151,109, 89, 89,151,145, 15,118, 41, 52,229, 48, 56,215,
+ 92,131,244,119, 42,174,242,206, 55,238, 62,255, 45,166,181,248,211,233,113,216,252, 25, 34,191,112,101,173, 99, 43, 70,156,115,
+187,105, 79,185,182, 67, 44, 7,158,130,214,166,146, 38, 99,140, 88,150, 5, 34, 59, 9,202,206,220, 90, 11,169, 5,198,126, 4,
+103,192,106,137, 9, 16,171, 98,158,220, 0,146,211, 10,204, 40, 3,173, 21,221, 91, 89,230, 22, 20,234, 94, 66,126,254, 41, 99,
+118, 89, 37,251,129,231,247, 56,255, 25,157,247,228,206,249, 60,217,201, 54, 71, 79, 66, 89,203, 44,140, 49, 48, 66, 33,120, 15,
+235, 61, 9,239,138,224,209, 59,104,158, 7,195,130,180, 67,116, 46,208,193,239, 98, 4, 7, 17, 56, 95,158, 95,203,146, 23, 82,
+ 41,120,112, 40,169,161, 59,133,232, 45, 98,240,248,252,229,130,190,151,144,130, 86, 97,110, 89, 49, 40, 78, 5,164, 7,254,248,
+207,127,196,249,114,129,157,110,120,249,252, 9, 18, 30,143, 29,137, 93,163,245,248,252,211, 23,232, 7, 9,121,232,192, 58,133,
+ 32, 18, 68, 55,192, 77, 19,150,231, 51,186,223,126, 3,244, 3, 77,177,179,150, 73,244, 61,184,209, 72,243, 4,188, 92,160,250,
+ 3, 46,151, 47, 16, 14,248,112,120,128,240, 51,188,117, 56, 62, 28, 97,109, 0,151, 2,171,243,248,246, 55,191,197,207,159, 62,
+231,181, 8,195,243,235, 5,227,241, 2, 46, 21,134, 94, 67, 26, 1,107, 29,116, 55,162,115, 1, 2, 17, 54, 88, 40,169,144,172,
+133, 0, 33,164,201, 49,193, 17,243,245,183,216, 0, 31, 81,245, 60, 76, 42,184,192, 32,223,132,129,240,125,218,213,215,187, 78,
+246, 21,236, 43,154,195,126,155,171,179, 95, 25, 71,167, 50, 25,104, 25,228,117,228,206,118,221,125,123,184,190,231,139,111, 15,
+243,242,225,120,239,103, 42,151,188, 40,235,219,156,181, 24,238, 14,156,125,119,201, 91,245,221,123, 35,224,146,134,197, 0, 68,
+ 78, 33, 8,205,206,125, 27,241,178,183,211,138, 95,233,210,121,229, 68,147, 32,253, 30,236,243,238,248,122, 47, 82,104, 14,183,
+ 84, 71,204, 91, 17,246,254,235, 74,157, 79,161,234,229, 0, 27, 38,239,128,193,169,241, 20,163, 6, 61, 32,171,227, 75, 24, 78,
+123, 35,222, 30,119,218,144,184, 45,179,155,241,187,215, 21, 85,241, 94,212,184,169, 9,132, 73,213,201, 16,191, 34,194, 44,128,
+ 17,177,155, 64,149,107,149, 97, 19,113,149,240,160, 90,144,213,199,154,133, 83,108, 91,163,188, 9,146, 73,168, 34,187,159, 63,
+253,130,177, 83, 88, 87,139,199,195, 1, 74,221, 72,113,237, 29,188, 40, 62,113,142,195,241, 4,185,208,200, 90, 41,133,235,249,
+ 5,136, 33,119,232,212, 65,134, 12,249, 40, 65, 36,235,186, 2,145,246,182, 68,126,203, 97, 15,121,116,109,145,114,199, 77, 35,
+107, 33, 37, 98, 6, 87,164, 24,193, 19, 65, 89, 2,227, 89, 24,185, 63,116,202,168,154, 10,130,109, 47, 75, 8, 83,150,141, 52,
+249,117, 10,156,138,137,196,161,164, 0,227, 6,214,123,240, 16, 32,132,132,103,196,174, 23,249,243,230, 51,103, 92,114,153,139,
+157,172,153,201,188,130,214,126, 87, 14,212, 50,165, 41,193, 40,173,253,139,132,222,164,220,102,130,193, 7,255,238, 78,190,144,
+221, 56, 74,158, 73,170,187, 97, 42,118,232, 0, 44,229, 95, 17,218,181, 30,241, 86,105, 94, 14,193, 80,137,119, 84,156,172,235,
+186,179,230,149,221,185,148, 98, 55,129,144,146,214, 47, 46,120,196, 53, 65, 43, 5,165, 36,164, 52,248,248,241, 9, 96,192,178,
+ 76, 36,156, 11, 17,189,145, 16, 66,210,193,204, 57, 62, 28, 30, 0,198, 48, 47, 75,134, 67,145,154, 94, 9, 78, 97, 54,121,130,
+192, 56,105, 74,188,247,224,140,195, 89, 71, 7,187, 32, 75, 89,215, 27,112, 46, 41,135, 32, 3,188,220,106,113,181, 43,148,224,
+152, 67, 64,223,245,232,250, 1, 49, 70, 88,107,161, 20, 9,122, 75,160,205,186,174,232,164,198, 48, 24,116, 93,135,224, 3, 98,
+182,222, 41, 69, 54, 54,231, 61, 61,151,204, 4, 40, 2, 66,145, 69,188, 28, 9,156,251,236,201,166,251,138,115, 30, 8,145, 44,
+111, 82,100, 55, 8, 0,151,224,167, 5,227, 96,208,247, 3,184,228,120,189,205, 88, 22,139,225,248,128, 37,246,152, 87,139, 63,
+ 12,223,225,227,168,112,250, 48,194,135, 5,236,242,130,197, 95, 96,216, 9,235,229,138,238,216, 65,118, 6, 24, 53, 4, 79,152,
+127,249, 5,189, 18, 72,125, 7, 88,135,148, 60, 24,215,128,236, 9,135,251,252, 35,248,101,130,232, 62,192, 79, 14, 15,102,196,
+186, 0,231,151, 23,124,126,126,134,231, 9,195,233, 1, 63,125,254,132,117, 94,241,135,223,255, 30,183,219,140,105, 89,145, 66,
+ 0, 67,196,151, 47,207,248,171,191,254, 43,132,232,224,163,199,225,112,192,109,182,120, 26, 6,136, 96,225,111, 30,146,209,202,
+ 75, 74, 1, 33, 57,253,221, 49,100,190, 72, 33, 34, 74, 88, 79,171, 25,135,132, 41, 49,136,177, 27,126,216,143,119,183, 94, 4,
+239,141,163,255,135,118,192,236, 13,183,124, 67,154,147, 79,184,132, 9,220,239,208,222,219,231,191, 17,131,181, 59,209, 20,119,
+ 69, 74,123,128,108, 31,238,175,117, 87,109,184,200,190,232,120,111, 20,248,181,175, 45, 32,166, 8, 77, 26,143,122,225,211,223,
+165,149,177,255,129, 81, 60,218,248,192,180,247,184,178,118,143,206,246, 99,100, 94, 9,188, 44,251, 74,211, 87,223,207, 24, 99,
+ 78, 10,203,146, 58, 46, 32,133,202,157,163,216,184,237,108,255,123, 42,244,162, 96,168, 88,172, 99,120,158,217, 5, 12,236, 77,
+156,207,215,118,235,239, 64, 19, 50,111,255,235, 41,127,239, 61,159,242,126,252,218,238, 62,181,100,197, 50,209,204, 98,123, 81,
+113,195,251,196,185,118, 92, 92,186, 17,128, 97,186, 93,240,248,112,194, 48,244,164,116,207,156,119, 58, 12, 36,132,228, 56,158,
+142, 56, 28, 14,136, 49,212, 93,112,111,122,196, 76,175, 27,134,177,138,194, 74,221, 90,212,213,197, 46,165,132,132, 96, 84,197,
+ 11, 78, 30,107,169,120,245,241, 23,251,216,110,151,155,147,233,116, 78,109, 43, 65, 42,229,128,187,215, 58,112,145,119,191, 5,
+107,154, 34, 65, 83,132, 32, 1, 85, 14, 47, 41,201,124, 68, 21,163, 34, 89, 10, 1, 41, 36,148, 80,116, 67,138, 33,139,169, 98,
+245, 79, 87, 69,118, 62,200,203,174,191,221, 57,151,251, 67,129, 11,165, 12,220, 72,237,245,159,139,118,158,167, 26,200, 69, 76,
+185, 74,138,109,148,246,207,132,158, 45, 5, 68,140,161, 2,121,218, 53, 64,123, 47,217,114, 18,248,206,195, 95,224, 68,156, 23,
+ 64, 12,117,197,125,223,215,199, 30, 2,193,111, 74,247,189,174, 22, 49,146, 82,218,104, 13,103, 29,166,121, 6, 99, 9,175,175,
+ 47, 88,150, 5,199,177, 3, 67,132, 82, 2, 93,103,224,188, 67, 76, 30, 92, 48,248,224, 0, 22,209, 15, 29, 66,112,132, 52, 77,
+100,187,227,130, 99,153,167,124, 79, 68, 38, 32,122, 12,195,128,135,135,135,236,195, 7, 68,126,157,157,119, 72, 41,194, 46, 43,
+188,179,144, 74,162,235, 58, 8, 46,209,153, 14, 66, 42, 88, 75, 62,112, 99, 52,148,146,249,253,163,247, 67, 10,137, 24, 28, 49,
+241,157,219, 68,152, 69, 15,194, 5, 77, 77, 98, 32, 69,124,162, 61, 48,229, 15, 16, 69,145, 44,142, 17,178,215,240, 41,194,122,
+151,167, 65,128, 54, 18, 49,122, 76,203, 2,159,157, 45, 99,215, 67, 11, 1,248, 0,149,195,101, 2, 18, 14,167, 39,220,110, 51,
+122, 35,241,159,255,254, 15,120, 24, 36,188,159,161, 68, 66,176, 43,158,158, 62,226,233,227, 7, 48,163,225,167, 9, 76, 75, 48,
+ 9,112, 41, 33, 4,135,237, 56,244,183, 31,137, 47,176, 92, 33,250, 17, 44, 36,240,152, 32, 83,130,212, 10,184, 5,252,244,255,
+254, 19,194,205, 34, 6, 6,101, 6,252,233,231,159,241,248,241, 3, 68,182, 61,122,235,177, 46, 43,184, 16,120,126,189,162, 27,
+ 6,132,224,208, 15, 29,180,214,184, 77, 19,124, 76,184, 92, 38, 44,215, 27,190,233, 59,140,130,193,205, 11,180, 82, 8,222,225,
+ 48,246, 88,115,114, 97,200, 83,181,152,104, 18,152, 24,137,107, 87, 31,177, 50,129, 63, 94, 23,136, 83, 55,254, 16,239,110,164,
+156, 53, 62,236,108,104,122,239, 64,255,181,131,168, 61, 88, 99,138, 25, 52, 74,255,148, 94, 43, 34, 3, 75, 50,142,113, 75, 3,
+195,157, 58,125,207,153,223, 58,248,141, 59, 79, 95,241,171, 54,184,251,239, 85,214, 56,123,155, 81,195,192,222, 60,199,251, 67,
+125,207,137,190, 63,212, 9, 54,193,179,205,139,151,220,109,108, 81,173, 91,180,201,215,191,190,246, 60,246, 40,216, 45, 93,237,
+189, 3,173, 30, 58,119, 59,110,114, 26,198,221,222,253,107, 83,148,194,148, 47, 86, 58, 33,228,118, 99, 76,121,225,192, 54,177,
+161,224,105, 83,144,215, 47,182,115, 69,180, 46, 51,252, 10,177,112, 87, 76, 50, 52,163,119,126,183,143,103, 59,182, 1,208, 90,
+ 35,177,193,120,176,207, 19,104, 85,252,169, 69,218, 98,235,208, 25,163,231, 83, 38, 17, 53,150,160,137,167, 21, 69, 29, 95,199,
+248,140, 48,192, 33, 96,158,174,232,123,131,241,112,192,249,114, 1, 18,195,241,112, 68,223,119,228, 59,205, 52,178,105,154,104,
+244,137, 4,109, 52, 69,215, 34, 65,155, 14,203,178,108, 17,233,130, 99,117,150,118,187,156,103,101,118, 14,104,137,148,204, 70,
+234,118, 58,184,124,230, 66,167,166,160, 46, 65, 77,165, 67,111,197,102,117,207,126, 55,230,142, 49,194, 89,151, 15, 64,178,156,
+209, 77, 94, 86,206,119,138,168,135,122,240, 1,198, 24,168, 92, 52, 32,131, 83, 10,165,145,113,212, 2,164, 88, 50, 83, 62,144,
+247, 22, 45, 84, 54,124,204, 40,223,216,192,131, 82,158, 62, 20,101,121,140, 4,135, 41,239,183, 16, 18, 74,234,234, 87, 37,155,
+ 96,193,213,102,156,110,198, 6,135, 72,120, 99,173,245,190,160,201,239,115, 59, 1, 76, 57,156,188, 76,128,138,247,220, 24, 93,
+175,197, 16,124,157, 14,148,169, 0,137,242, 40, 82,214, 24,131,190,239,235,216,189, 51, 26,135,195, 0, 37, 5, 30,142, 7,244,
+157,129,150, 2, 82, 16, 14,116, 93, 22,140, 67,143,195, 56, 82,199,188, 44,116, 87,141,200, 42,246,132,105,154,177,204, 14,206,
+ 90, 34,224,229,112, 32, 6, 96, 24, 6,204,243,132,101, 89,112, 58, 29, 96, 58, 3, 31, 61,152, 32, 21,188,200,151,191, 82, 10,
+ 46, 23, 78, 70,107, 4, 31,225, 86, 7,239, 92,166,202,209, 97,219, 25, 3,163, 13, 21,108, 74, 81,130, 88,190,134,188,243,240,
+214,213, 27,185,181,150,120, 5,117,252,158, 50, 51,131, 33,248,144,135,186, 17,224,140, 96, 75, 57,190,213,123,139,224,125, 78,
+150, 76, 96, 66, 34,228,207,165,179, 43,180,228, 24,187, 14,167, 67, 7, 36,135,224,102, 40, 35, 96, 12,199,114,253,140,239, 63,
+244, 56, 14, 9,122, 16,136,243,132, 65, 31,208,141, 39, 48, 70, 40, 97,230, 3, 68,167, 73, 35,179,102,216,142, 20,224,198, 32,
+ 5,155,109,191, 26,225,229, 21,105,153, 50,118,216, 35, 37,141,244,124, 5,151, 6, 63,255,252,140,227,195, 7,252,233,167, 79,
+ 25,203,155,192, 66,192,195,120, 0, 24,217,205,150,213,195,135,128,161, 55,112,206,162, 31, 7, 72, 73,209,172, 92, 40,104, 46,
+193,237,140, 35,103,120,236, 7,172,243,138,126, 28,225,252, 68,164, 63, 41, 41, 13,210, 57,250, 60, 39, 86,211, 11,215,144,112,
+245, 12, 63, 94, 23,136, 67, 55,254,208, 70,111,238,186,186, 44, 94, 43,157,230,123,221,207,215,148,203,233,142, 45, 94, 82,149,
+ 80,111,162, 45, 48, 36,127,197,180, 75, 21, 67,179, 91,175,140,242,250, 59,247,157, 89,217,231,214,113,113, 99,107, 77, 59,128,
+ 78,164, 12,242,119, 70,251,117,195,158,216, 27,248, 77,107,233,251, 53,245,117, 41, 14, 98,179,179,221,145,234,107, 80,247, 95,
+ 66,228, 75, 95,221, 51,167,134,192, 86, 35, 83,223,217, 33,115,190,249, 95, 25,107, 39, 49,177, 30, 88, 96,111, 39, 6,187, 27,
+ 88, 42,222,114, 14,206,201,151, 93, 38, 26, 40,234,242, 24, 42,193,106, 43,152, 18, 1,212, 50,170,148,231, 49,113,249, 57, 81,
+146,218, 10,174,156,237,119,231,239, 78, 14, 18,219,237, 42, 83, 98,119,187,238,253, 4,160, 36,222,148,117, 7,103, 28,239,201,
+ 59, 88, 35,209,103,205, 26,129,231,238,124, 11,162,217,126, 79,187,163, 23,124,243,227,111,224, 19,138,139, 13,222, 66,107,137,
+ 63,252,205, 31,160,148,198,243,243, 47, 56, 12, 61, 18, 34, 86, 79, 59,209, 97, 24,113,187, 94,225,125,168,228, 52,151, 71,239,
+171, 93,225,125,128, 84,186, 38,152,133, 24,178, 63,121,191, 91, 46,210, 7,231,108,165,202,197,196,106,152, 15,242, 24,188,248,
+180, 89, 83,248,181, 19,169,251, 78,189, 32, 92,169,104,219, 8,133, 60, 79, 36,164,212,180, 46, 97, 27,159,128,115,158,209,206,
+ 44,231, 50,160,250,154,193,182,117, 2,249,178,233,171, 8, 64, 91,154, 28,238,216,245,177, 65, 29,151,201, 79, 97, 51, 72,169,
+ 43,219,225,126,114,213,254,255, 74,137,186,250,104, 71,253,117,117,116,183,150,242, 25,215, 90,254,108, 41, 96, 40,144, 37,230,
+ 41, 7,207, 19, 24, 13, 6, 98,187,151, 48,172,237,245, 44,142, 3,149, 39, 48, 30,211, 52, 33,198, 80, 51, 14, 24, 75,144,138,
+103, 39, 3,141,194,199, 97, 68,204, 93,190,115, 14, 33, 4,140,195, 8,173, 53,132, 36, 44, 45, 7, 48, 12, 35,198, 97,160,245,
+ 10, 24, 98, 72, 89, 61, 95,232,132, 20,247, 43,165,200, 43, 2, 6,211,153,202, 47,144, 66,192, 40, 67,147, 18, 46,192,165,204,
+ 43, 32,149, 89,232,168, 0,148,132,136,101,153,225,203, 72, 61, 37, 24, 77, 83, 60,173,116, 62,220,105,197, 67, 69, 0,242,251,
+ 26,234,189,197, 57, 7, 95,116, 1, 62,228,148, 75, 58, 11, 56, 24,122, 99, 32, 25,131, 86,146, 10, 7,173, 9,128,163, 53,148,
+ 20, 0,143,112,193,194,217, 25,138, 39, 60, 29, 58,124,115, 60,224,177, 31,112,253,229, 5,235,229,138,135,195, 8,228, 41, 70,
+127, 26,160, 30, 6,120,120,204,231, 11,204, 55,143, 8,215, 27,120, 2,146,117,192,109, 65,180,142,212,251,193, 99,241, 11,116,
+ 63, 32,121, 14,255,203, 47,224,154,195, 49, 6, 8,137,248,122, 67,178, 17,209, 3, 63,254,248, 5,156, 27,188,188, 92,240,205,
+199, 15, 24,123,147,247,225, 0,151, 10,231,243, 21,224, 18,151,235, 21, 74, 41,112,193,170,234,252,124,157,225, 60,192, 66,128,
+242, 22,143, 82,224,168, 13,110,183, 25, 93,111,192, 68,194, 60,205, 20,211, 28, 60, 66,140, 13,167, 67, 16,113, 50, 50,220, 60,
+199, 47, 54,179,223, 83,220, 70,215, 37, 65, 43, 33,147,202, 18,175, 42,109,206,183,240,142,138,203,188,251,135,224, 2,185,146,
+206,190,207,128,210,169, 55,209,156,205, 1, 21, 83, 36, 48, 1,167,145, 74, 81, 94,165, 98,183,203,221,125, 77, 27,163, 74, 35,
+255, 93,205, 87,153, 3, 48,212, 36,180,218,137,101, 50, 25,120,193,184,242,221,228, 54, 53,227,106,158, 43,143, 84, 90, 26,196,
+253,238,151,181,211,130,252, 88,211,118,200, 20,212,100, 10,233, 46,180,246,110,199,253,103, 45,105, 44,231,103,167,157,119,188,
+ 93, 53,144,100,184,164, 59,221, 9,188,120, 3,173, 64, 34,206, 74, 3,147,160,233, 33,171, 34, 31,178,181,196, 55, 30,133, 80,
+102,190,137, 83,101,205,196,166,106, 47,217,213,249, 90, 40,137, 80,172,250,202,219,192,214,230,181, 76,239, 72, 18, 24,165,180,
+177,106,104,103, 77, 93,151, 42,161, 10, 57, 57,172, 74, 5, 10, 14,177,124, 47,231,129, 39,132,230,103,202, 9, 22,107, 55,125,
+239, 42,104,199,231,228,187,103,100,215, 99,205,116,163,181,235,113,158,115, 2,248, 86, 12,166, 13, 48,196,184,168, 69,100,240,
+ 14,255,254,239,254, 22,243,237,130,101,186,225,219,143, 31,224,220,138, 24,232,102,183,206, 43, 98, 32,254,123,201,172,174, 26,
+140,124, 33,115, 38,114,135, 64,196,176,224, 3, 4, 35,230, 54,203,227,113, 41, 57,152, 32,159,188,146, 10, 37,224, 54,100,255,
+112,140, 17, 41, 68,168,172, 28,231, 82,228,180,174,205,181, 32,164,216, 20,255, 57,110,147, 11, 78,212, 48, 73, 8, 86, 33,120,
+245, 99, 11,145, 69,147,172, 32,121,233,218,244,209, 87,133,116, 68,170, 9,103, 33, 6,162, 97, 57,159,209,194,219, 8, 39,230,
+235,186,136,228,182,130, 29,164,227, 72,121, 52, 47,228, 54,105,200, 69, 21,203, 24,211,152, 39, 14,111,249, 1, 60, 79, 54, 66,
+ 78, 62,139,187,221,188,200,202,246, 80, 10,165, 70, 88, 26, 34,229,130,103,105, 57,100,142, 90, 45, 9,130,198,232, 10,119, 90,
+ 22, 11,187, 58,196, 72,217,239,101, 74,226,115, 51,194,243,228, 96,154,103, 4,231, 32,121, 66,215, 41,116, 90,224,116, 28,113,
+ 60, 82,167,222,247, 29,148, 82,152,110, 11,230,121,193, 48,244, 88,237,146, 71,240, 1,211,188, 64,104,218, 85,171,252,188,125,
+ 62, 24,237,106,177, 46, 83,222,161,211,227, 85,154, 32, 51, 82, 9,218,221,107, 5, 41, 41, 54,182, 51, 26,189,238,154,162,135,
+196,133,222, 59, 40,173,161,141, 34, 0, 81,103, 42,112,135, 53, 40,112, 89, 38, 45,177,172, 67,136,239, 33,149,130,233, 58, 8,
+ 33,161,149,206,159, 19, 15, 33, 56,188,115, 85,159, 33,179,144, 83,230,192,155,226,100,138,206,226,113,232,112,234, 58, 40, 78,
+ 77, 89,223,107, 32, 56, 60, 29,143,128,163,180, 68,173, 12, 82,138,152,166, 43, 98,112,248,254,233, 17,255,233,239,255, 30,255,
+240,175,255,130,241,241, 1, 99,215, 65,135,128, 56,205, 8,158,129,153, 1,235,243, 11, 12, 4,210,101, 66,124,189,129, 45, 14,
+108,177,184,124,121,134,246, 12,188, 31,144,192,193,149, 65, 92,110, 72, 97, 69, 24,122,232,161,167,235,207,115,132,217, 34, 76,
+ 22,243,117,133, 95, 35,190,124,254,130,111, 62,126,196, 50, 47, 72, 9, 20,241,203, 56,166,121, 6,192, 48,223,230,154,182, 89,
+120, 12,231,219,130, 16, 18,100,138, 16, 49,224,113, 28,193, 66, 68,112, 43, 20,223, 10, 75, 41, 84, 21, 92, 11, 73,247, 64, 23,
+ 73,218,189, 88,224,186, 4,138, 1, 59,152,195, 15,228,101,140, 57, 0,128, 85,198, 58, 71,238,172, 74,203, 82, 41,107,251,253,
+120,172, 29,227, 54, 14,163,160,178, 50,102, 79,136, 44,238, 70,173, 49, 6,148, 98,162,138,224,242,190,147, 53, 34,180,162, 52,
+143, 44,100, 14,249, 94, 56, 94,252,188, 49,165, 55,143,109,167,153,103,187,224,214,186, 83, 78,119, 66, 44,198, 80, 97, 60,247,
+132,188,189,230,236, 94,101, 31,247,135,109, 62,236,144,246, 49, 38,205,171,182,251,247,237,144,190,243,213,167, 86,139,157,246,
+118,152,156, 50,151,238,152,230,117,151,206, 25,209,159, 56,175,126,113,214,250,198, 27, 91, 53, 82, 34, 26,108, 33,155,101,146,
+ 94, 40,176,141,140, 74,229, 76, 2,188, 20,122,145, 94,135,230,181, 47, 16,140, 86, 8, 87,108,144,229, 53,223,240,177,119, 2,
+ 63,214,218, 18, 75, 81,179,253, 79,204,111,124, 76,119,239,197,110, 71,206,106,113, 81,118,166, 27,177, 14, 13, 56,233,253,233,
+196,118, 45,150, 68,210, 22,237,123,175, 79,192, 22, 84,204, 54, 97, 29,178,194, 56,178, 4,134,152,147,247, 18,254,240,251,223,
+225,122, 57,211,104, 14,192,233,116,192,178,206,208, 90, 83,237,200, 57,172,115,164, 14, 22, 57,178,182,218,182, 4,141,221, 66,
+132, 80,162, 22, 61, 5,243, 42, 21, 37,254,113,193, 41, 81, 47, 39, 76, 21,176, 18,141,245,177,227,173,151,175, 66,156,107,189,
+222,101,188, 93, 60,223, 33,209,138,140,246,185,177,134,144,132, 16,176, 44, 11,233, 1, 66,192,178,174,181,203,246,222, 55, 19,
+133,184,165, 3,102, 52,108, 33,155,165,252, 60,200, 6, 23,191,226, 88, 96,217,243,206, 16,163,191,243,195, 16,210, 85,137, 34,
+180,162, 67, 98, 19,194,198, 76,109,204,214,221,244,150, 48,183,125,166,238,175, 45,177,225,144, 99,128,148,148, 56,214,117, 10,
+ 90, 82,198,182,148,116,160, 25,173,161,132,196, 97, 28, 97,140,201, 97, 44, 60,107, 31,120,101,228, 35,209, 14,190, 51, 26, 70,
+ 75,244,125,135, 97,232, 96,122,141,152, 40,178, 54,166, 4, 99, 58,138,111,133, 64, 76, 17, 74, 11, 28, 14, 3, 86,187,162, 31,
+122,204,203,140,105,186,210, 65,157,155, 21,202,184,183,248,240,244,152, 9,112, 2,195, 48, 82, 6, 60, 35,129,101, 65, 22,120,
+151,211,244,154, 66,177, 51, 93, 93,117, 48,206,208,117, 29, 21,104,193,195,121, 7,187,174,213, 50,168,141,105, 86, 82, 28, 41,
+ 36,132,136, 92, 48,162,250,236,121, 46,250,104, 37,146, 54,140,113,158, 0,109,201,118,165, 80,102, 4,164, 97, 9, 41,121, 24,
+ 33,240,215,191,251, 29,144, 2,166,117,129,139,100,193,156,174,183, 92, 64, 11, 88, 31,225,124,128,233, 12, 62,124,252,128,231,
+ 47,159,112,155, 39,124,190, 78,208,166, 7,124,196,111, 30,159, 96,184, 4,227, 10,126, 90,193,124, 64,184, 46,224,137, 35, 44,
+ 14, 10, 2,112, 17,183,231, 51,226,109, 5,143,192, 50,175, 20,194,195, 3,212,177,135,139,180, 94, 72,214,194, 45, 1,176, 1,
+243,207,207,208,188,199,229,229,134,105, 90,208, 13, 61,126,121,254,130,241,112, 64, 74,156,220, 46, 92,224,245,245,156,115, 31,
+202,109,159,225, 48,142,152, 87, 7,239, 35,122, 37,192,189,199,168, 52,252, 50,131,167, 8,165, 41,131,157,138,213,152,175,245,
+ 60,233, 74, 64, 4,135,243, 9,171, 75, 88, 60, 53,190,212,169, 55,135,122, 9, 45,217,236, 72,172, 65,176,110, 68,176,221, 81,
+213, 28,170,169, 5,170,182, 9, 90, 41,108,227,241, 60, 90,217,163,101, 0, 81, 63, 66,108,103,215, 34,188, 96,115,184,221, 67,
+ 67, 50,187,155,186, 79,254,118, 79,219,144,106,121,217,113, 51,142,247,220, 74,239, 81,109,217,206,183,221, 10,237,246,194,172,
+214, 15,191,183,214,225,174,187, 78,119,226,190,253,247,139, 58,127,255,179,241,206, 29,176, 23, 6,182,121,247,101,158, 93, 87,
+ 38,117,172,135, 38,107,190, 21,234,109,175, 77,219, 93,111,175,109, 89,130, 11, 48, 33, 51, 99, 62,143,240,203, 99,102, 13,174,
+ 38,165, 93, 22, 58,231, 69,152,149, 26, 37, 58,175, 57, 2,245, 49, 52, 73,121,219, 53,215,196,129,178,141,225, 94,127, 54,189,
+ 53, 58, 50,126,119,237,166, 18,187,139, 59,109,198,251,182, 55,158,215, 18,140,109, 44,129, 54,117,142,109,115,235, 77,195,192,
+ 83, 19, 6,180,173,123,106,244,109,136,248,155, 63,252, 53,142,135, 3,110,183, 11, 24, 79,248,253,239,190,199,183,191,249, 45,
+172,181,152,215, 21,171,119, 20,230,226, 86,244,125, 7,239, 45,237, 58,149,198,188,172,136, 89, 53, 94,120,236,164,244,166,137,
+147, 50,134,172, 83,193,109,233,122, 89,208, 19, 66,160,157,101, 86, 59, 23,149, 54, 69,144, 18, 28,132,160, 46,161, 30,184,180,
+ 95,166,131,222, 90, 11,231, 72, 73,205,193,105,156,234,233,239,177,206, 17,243, 60,211,210,202,110,254,126,250,180,121,177,243,
+168,159,109,136,225,132,180, 99,155,223,255,108,241,110,111,197, 62,169,200,137,246, 70, 72, 94,169,100, 62,172,182, 42, 48,198,
+ 64, 74,172, 6,237,204,114,197, 88,126,103,137,232,221,236,115, 84, 8, 73,158,167, 2,249, 49,107, 45, 41,124, 36, 69,112, 70,
+ 19,205,227,113,128, 49, 10,198, 24,116, 93, 15,100, 33,154,247, 30, 90, 75, 60, 62,158, 48,244, 29, 66,240,248,230,219, 71, 72,
+201, 48,244, 26,167,211,128, 97,208, 56, 12,116,152, 31, 14, 35,249,223,179,170,124,154, 23,204,243,138,235,245,138,195,241, 1,
+ 66, 48,132,232,160,141, 68, 63,208,168,220,174, 22,227, 48,208,212,195, 19,130,215,152, 14,227,120, 64, 76, 1,151,243, 11, 14,
+199, 17, 12, 60, 11,217,168, 59,150, 74,214,233, 68, 8, 1, 34,139,215,202, 61, 56,165,132,195,225, 0,153,177,175, 92,108,227,
+249, 18, 12,195,242,207,148,223,105,140,174,193, 58,148,171, 78,100, 59, 10,240, 33, 6,252, 50, 47,176,203,138,148, 72, 20, 40,
+ 53,137, 5,133,216, 50, 50,170,197,146, 6,170,181, 33,244,206,227,229,229, 5,145,113,248,148,224, 35,224, 92,130,117,129, 4,
+107,130,147,136,207, 7,216,117,197,124,155, 17,144, 48,199,132, 47,207, 11,146, 87, 64,224, 88, 47, 55,196,213,194, 36, 14, 1,
+160, 63, 28, 33,181, 6,180,134, 84, 26,203,188,226,246,114,129,228, 10, 82, 27,168,135, 7,136, 78,129,249, 8,255,242, 74,220,
+135, 0,168,174, 67,178, 43,228,225, 8,251,233, 25,183,127,251, 2, 4,137, 63,253,248, 5,243,234,112, 60,157,240,242,250, 74,
+ 41,125,222, 35,250, 8,231, 61,172, 11,240,137, 17,245, 17, 12, 90, 41,184,101, 69, 55,140,248,244,229, 11, 30,134, 30,194, 59,
+244,156, 67, 38, 10,127,225, 82,192, 6, 58,212,157,181, 57,187, 33, 79,197, 25,173, 35, 87, 27,224, 66,132, 13,148, 22, 41, 14,
+102,108, 14,117,250, 64,240, 26,194,177,193, 58, 91,182,121,218, 9,168,210, 78,208, 86, 59,235,114, 32,148,195,152,189, 99, 55,
+111,104,167,180,187,228,187,191, 43,229,155,100, 44,129, 27,173,112, 46,135, 77,180, 86,173,132,237,240,143,109, 55, 91,200,164,
+216, 43,219,217, 29,130,245,237,161, 94,186,209,182, 83, 46,234,232, 61,133,108, 75, 26,139,123, 93, 0,246, 66,172, 90,244,220,
+125, 47,101,143,102,220, 37,149,165,170, 63,168,127, 31,218, 84,179, 80, 11,139,216,174,223,155,195,135, 11,190,141, 85,249, 59,
+ 7,214, 93, 7, 90, 15,191, 18, 18,145, 82,115,168, 19, 14,147, 18,151, 0,164,112, 23,203,155,106,102, 64,155,251,179,197, 61,
+166, 93,151,190,105, 56, 74,215,203,114, 1,194,118,186,137,141, 19,191,219,150,103, 4,192,157,189,178, 81,174, 55, 77, 95, 67,
+ 84, 75, 77,176, 5,118, 62,231,150,204,197,119, 99,246,253,129, 94,159, 79, 11, 83,105, 74, 17,222, 88,250, 56, 24, 88,164,221,
+246,245,124,129,146, 2,171, 93, 49,205, 87,252,252,233,103,124,250,249, 51,110,243, 12,166, 36, 86,239,129,108,115, 75, 89, 35,
+226, 92,192, 52, 45, 80, 90,195,102,225,147,115,142, 98, 98,243,126,178,236, 51, 67, 22, 23,145,176, 44,102, 11, 76,170,126,240,
+152,232,123, 59,103, 8, 47,211,143, 28,149, 26, 66, 77, 18, 36, 65, 78,202,211, 2, 26,173, 22,149,124, 8,212, 81,242,172,228,
+ 47,153,222,101, 47, 95, 10,202, 86, 96, 86,110,222,177,137,190, 5, 40,244,132, 68,100,226, 77,129,181,177,244, 75,138, 32, 50,
+219,220, 83, 88, 12,103, 91, 20,111,126,254,228,139, 14, 53,180,164, 8,217,106,151,147,245, 59,219,250,140,174,137,224, 55,116,
+ 44,217,172, 24, 14,135, 49, 99, 85, 25, 78,135, 17,199,227,136,135,227, 1,130, 3, 74,114,216,117, 1, 18,195,151,207,191, 96,
+186,205, 85,236,229,236,130,121,154, 16, 67,192,233, 56, 98, 89,103,112, 66,233, 65, 73, 6,173, 21, 56,163,199, 81, 92, 7, 69,
+203,160, 85, 71,221,181, 84,120,126,126, 65, 63, 24, 76,211,132,148, 8, 64,212,247, 67, 38,184, 37,244, 29,169,168, 99, 32,150,
+ 64,223,245,232,187, 46,175, 45, 19,198,161, 39, 14, 63, 18,148, 34,203, 26,237,239,121,181,227, 21, 85,188,119,182,190,191, 82,
+ 81,209,100,173,197,178,204,208, 70, 99, 28,135,188,215,167,204, 2,109, 52, 21, 28, 89, 84, 41,165,162, 34, 75,138, 74, 49, 12,
+ 72, 57,132,136,194,114,188,115,176,214,214,144,160, 66, 79, 44,126,118, 42,164,242,244,143,151,220,240,132,197, 58,172,214, 35,
+ 50,202, 93, 16, 82,215,105,145,143, 33,175, 54,128,161, 31, 97,116,135,190,239, 96, 67,128,247, 28,214, 70, 12, 67,143,195,208,
+225,122,123,197,249,250, 74,122,138,224,113,190,156,241,249,243,103, 92,206, 87,192, 83,240, 77, 55,142,232,143, 39,204,211, 13,
+221,227, 35,248,233,144, 53, 7, 1,246,182, 66,105, 1, 4,138, 76, 78, 63,190,192,189, 44,248,252,233, 21,159, 62,189,226, 50,
+ 45, 96, 82,225,120, 58, 82,145,189, 56, 76,215, 43,110,211, 10,101, 70,204,214,194,121, 90, 89,117, 74, 3,193, 67,247, 29,214,
+117,193,177,239,192,157,135, 97, 12,134, 17,220, 75,114,134,152, 40,226, 89, 9, 89, 63, 35,229,254,182,186, 8, 23, 0,231, 35,
+124, 17,191,214, 67,157,197, 55,204,245,214,214,134,156, 44,150,129,115, 53, 15, 59,229, 88,202, 18, 85,153,216, 94, 69,156,106,
+184, 74,122,183, 45, 46, 55,150, 18,232,144, 88,177,191, 53,211, 0,150,238, 24,239, 27, 32, 36,177,150,195, 94,163,215,235,252,
+140,181, 65, 42,216,110,200,104, 71,239,205,191,179, 76, 73,219,175,184, 55,216, 73, 42, 38,243,124, 63,136,119,144,158, 54, 47,
+188,174,197,155,215,170, 21,242,181,197, 64,108,254, 91,186, 83,182,239,159, 91,188,243,228,163,118,102, 40, 19,139,156,242,182,
+ 9,229,242, 78,189, 30,172,123, 78, 61, 26,218, 93, 35,158,104, 44,135,133,129, 94,130, 32, 8,114,145, 16,155, 36, 63,182, 83,
+187,139,230, 49,180,133, 91,233,208,217, 78, 84,214,190, 15,236,173,189,173,104, 21, 90,162, 94, 76,149,245,207,246,188,214, 55,
+157,248, 27,119,194, 87,172,132,237,122,162, 22, 32,119, 93,122,187,171,225,121,222,196,242,206,187, 20,132,244,213, 4,111, 36,
+ 42,148,151,117, 65,136, 30,143, 79, 15, 56,156, 70,252,242,229, 25,183,105,193,151,231,103,112, 37, 33,181,130,143, 1, 15, 15,
+ 15,152,174, 55, 72, 73,163, 55,206, 5,156,117, 96,160, 61, 36,203,216,211, 54,244, 4, 41,213,236,109, 6,150,133,114, 12,214,
+121,164, 72,113,164, 33,199,183, 22,203, 90,202, 63, 3,208, 4,160,122,194, 27, 37,124,193,178,106,165,106, 23,234,131,207, 1,
+ 65,212, 5,202,188,127, 13, 25,223,122,223,157,151,101, 83,113, 9, 20, 49, 98,153, 6, 72,165,118, 69, 64, 89, 15,180, 19, 46,
+138, 17, 70, 94, 11,133,170, 52,151, 66, 34,100,161, 86, 27,177, 74,113,167, 91, 84,106,235,121,175,154,141,148,170, 54, 32,165,
+ 88, 11,136,195,225,128,161,239,160, 36,240,240,112,192,241, 52,146,159,220, 89, 58, 60, 57,199,227,233, 17,211,116,197,178,204,
+ 88, 23,135, 16,136,141,158,114,134,124,200,138,247,206, 24,164, 72,182,182,174,163,131, 49,132,128,215,151, 51, 46,151, 9,235,
+106,243,148,130,213,231,180,174, 14,231,243, 5,175, 47, 23,226, 8,164,136,167, 15, 15, 72,113, 11,186,209,170, 35, 7, 69, 71,
+123,119,107, 87,104,101,112,189, 94, 49, 12, 29,180, 86,232,123, 3,198,128,167,199, 39,104, 67,157, 53,141,247, 29,150,101,161,
+ 9,107,134,220,108, 32, 42, 58,104,215,117,134,115, 14,125,223,213,247,211, 59,135,174,235,201,206, 42, 68, 93,105, 80,216,148,
+168,156, 1,206, 24,148, 84, 89, 55,225,234, 20, 38,134, 64, 43,135, 78,215,247,155,138,149,141,105,193, 57,135, 96, 91,147,195,
+165,132, 11,100,135, 19,146,146,222, 74,161,169, 36, 69,149,250, 68, 49,183, 82, 8,172,203, 76,194,214, 72,194, 82,199, 24,110,
+118,194,199,143, 15, 80, 50,226,155,111, 30,113,124, 60,226,199, 95, 62,227,227,227, 9,227,227, 9, 31,190,251, 13, 62,252,238,
+ 59, 72, 45,208,141, 61,120, 39, 33,250,236, 89,121, 0, 0, 32, 0, 73, 68, 65, 84,159, 14,176,203,132,100, 45,160, 36,248,113,
+ 0, 55, 6,230,233,137,214, 73,211, 4,246, 58,195,254,116,193, 79,255,244, 39, 68,175,112,190,173,176,129,225,227,183, 31,209,
+245, 29,120, 2,122,109,112, 60, 30, 17,144,240,203,249,130,217, 18, 40, 72,107,133,193,104,116, 70, 33, 34, 66,106,137, 81,105,
+196,121,129,140, 9, 60, 70, 26,191, 11, 18,219, 82,230, 3,175, 43,138, 16, 3, 66, 2,156,245, 0, 4, 86, 23,234,154, 84, 28,
+187,195, 15, 85,177,157, 15,140,234,167,110,226, 49,219,208,149, 88, 58,251, 20,247, 35,241,102,247, 92, 58,163, 54,213,109, 71,
+120,107, 83,179,138,229, 88, 20,229,248, 62, 98, 51,167,114,224,190,183,109,211,224,182, 67,146,189,139,142, 45,187,213,162,188,
+141, 95,163,210,230, 15,123, 59, 6, 79,105,163,174,109, 0,153,124,179,105,145,145,119, 67,255,123, 11,220, 27, 97, 92,162,209,
+103, 42,157, 89, 22, 25, 33,197, 55, 73,114, 89,125, 87, 31, 35,107,118,236,213, 67,222, 20, 84,188, 57,212, 75,167, 89, 71,226,
+104,211,234, 54, 6, 61, 43,130,188,102, 10, 18,179,223, 22, 77,226, 19, 23,172,250,182, 73, 13,158,247,184,205,142, 94,148,238,
+117, 71,150, 75,216,194,130,240, 6,218, 82,158, 85,235,157,223,210, 89,138,255, 63,219,222, 83,249,147,216, 95,131,172,112,173,
+179,229,163,198,222,226,206, 17,143, 55,154, 9,214, 10,233, 83,172, 55,255,247,108,139,162,142,254,155,206, 29,172, 10,236,202,
+152,184, 20,147, 41,239,243,173,179, 24,134, 30,195, 56,192,122,143,213,122,220,150, 25,214, 57,244,227, 64, 29, 4, 72,137,108,
+237, 10,239, 2,140,238, 16,125, 66,244, 1, 70, 43, 82, 41,231, 27, 43,165,176,113, 24,109,160,148,204,156,237,124, 40,166,108,
+181,203,187, 86,153,105,111,165,155, 46,215,161,202,153,204, 45, 57,173,125,174, 69, 52, 86, 70,243, 59, 7, 72,181,175,249,154,
+236,214,142,208, 75,158,248, 86, 32,209, 11,237,202,168,255,174, 88, 98,237, 24,182, 17,202, 85,181,121,113, 38, 36, 18,199, 5,
+ 79,182, 63,198, 57, 69,166,230,105, 67,209,237,208, 88,158,231, 93, 46,125,191, 20,156,200,157,236,241,120, 36,223,181,148,208,
+ 90,195, 57, 7,187,206,208, 26, 89,239, 18,144, 66,192,178, 46,176,214,193,173, 30,222, 5,116, 67,151,167, 23, 2, 74,105,148,
+193, 33,231, 28,227, 56, 96, 28, 7, 40, 69, 81,183,243, 60,227,122,187,225,122,189,129,115,137,227,225, 8,100,176,200,106, 45,
+230,121,169,135,124,202,202,186,211,233,136,126,232, 97, 58, 67,214, 49,163,241,250,122,193,245, 50,225,122,189,225,114,185, 32,
+198,132,174, 51, 56, 29,143,152,151,149, 64, 48, 82, 64,202,220,197,122, 82,189, 75,197, 49,140,244, 92,149,146, 52, 2,207,209,
+206,125,223,215,200, 89,235, 44,214,117,197, 48,142,132, 47, 46, 68,184,224,115,225, 72,215,116,140,113,135,128,166,194, 79, 67,
+ 74, 65,247,178, 70, 47, 37, 4,175,223, 67, 12, 16,156, 85,146,159, 86,186,210,229, 82,136,112,222, 98,181,164,209,224,121,213,
+103,186,142,174,225, 92, 80,153,174,163,226,148, 37,208,244, 62, 11, 58, 25, 96,164, 64, 47, 57,140,208,176,158,225, 22, 2,174,
+217, 55,175, 33,112,254,114,198,116,243, 16,170,199, 52,189, 96, 56,244,232, 79, 71,128, 69,240, 78, 64,140, 10,120,232,129, 78,
+128, 73, 14,149, 40, 94, 55,165, 0,161, 21,216,227, 17, 97,165,131, 55,158, 23,196,151, 5, 95,254,248, 5,183, 57,226,243,243,
+ 13, 95, 94, 94,241,241, 55, 31, 33,133,192,229,229, 5,118, 89,176,216, 5, 17, 12,183,101,133,212, 6,222, 90, 24, 37,241,112,
+ 28, 96, 20,195,241, 52,194,219, 21,167,174,135,189,220, 0,235,160, 57,135, 98, 32,198,125, 74, 80, 90,110,121, 5,121, 42, 29,
+ 98,130,115, 17, 62,146,144, 19,137,156, 39,226,216,209, 78,189,116,147,187,155,215,174,211,105,101, 41,219,142, 23,173,237,138,
+229,195,175,222,196,121, 77, 60, 3,139,251, 3,141, 97, 7,238,168,138,250,178,131,207,195,116,236,144,157,252,206,190,116,151,
+217, 13,246,134,202,182, 11,100,169,194,187,134,120,122, 23,200, 81,179,198,106, 46,119,172,143,125, 27,245,230,195,188,245,133,
+183,157, 93, 94,236,126, 13, 44,147,170,136, 46,110,163,214,114,104, 55, 7,118,205, 67,206,177,153,155, 33, 31,155,164, 63,191,
+ 74,184,179,100,109, 54, 31,182,165, 36,177,237,139,229,111, 38,182,141, 72, 69, 51, 6,223, 91, 8, 55, 55, 2, 9, 91,178,119,
+155,109,104,213,186,199, 78,155,143,187,190, 78, 91,235,221,148, 64,237,132, 36,213,241,108,125,149, 89,187,174,168, 17, 42,185,
+192,219,124,214,117,232,205,210,246, 24,170,213,141,109,182,189,186, 70,122, 11, 15, 66, 51,189,216,174,174,180, 61,183,247, 44,
+127,249,253,103,251,192,223,237, 49, 49,142, 54,183, 26,141, 47,250,182, 76, 88,157,197,229,122,131,143, 41, 19,230, 60,186,174,
+ 71,138, 17,135,126,192,249,245,181,170,188,133,144, 88,230,181,241,147,251, 58,146, 38,171, 89,190,241, 58,159,115,203,105,132,
+234, 67,200,112,154, 92,172,139,125,190,248,142,101,192,249, 91,113, 90, 83, 28, 10, 41,119,197, 83, 29,177,223,113, 17, 90, 27,
+154,111, 4,119,101,180, 92,186, 9, 31,222,186, 16,238,201,111,251,128,148,118, 93, 70, 0, 28,165, 37,237,117, 25,133, 13,113,
+ 48,132,124,104, 72,193,193, 16,161,165,192, 56,244,121,236, 45, 32, 56,240,248,240, 8,165,201, 87,221,117, 6,235,178,224,112,
+ 56,128, 51,134,101, 89,168,235,213, 10,166, 83, 52, 38, 53, 6, 93,223, 81,216, 14, 35,181,184, 82, 26,183,233,134, 97, 24, 43,
+169, 77,155, 60,113,200, 14,162,121, 89, 72,225, 31, 60,156, 15,217,206, 22,225,125,192,106, 29,132,208,121,132, 45,234,253,171,
+188, 22, 93,215, 85, 63,119,136, 30,211,116, 35,223,185, 16,240, 46,228, 0, 25, 6,235, 44,137, 28,125,128, 54,166, 50, 15,180,
+ 86,208, 90,214,140, 9,114, 20,184, 26,143, 90, 98, 96, 9, 24, 19, 42,170, 86, 8, 81, 11, 27,165,116,165, 9, 74, 41,177, 44,
+ 11, 56, 56,156,243,217,107, 79,112,161, 50,225, 64, 76,228,230, 72, 84,128, 50,144,104, 78,100,194, 93,175, 21,116,198, 15,167,
+ 12, 4,138,165, 88, 8,161, 10,140,171,243, 35, 11,118,189,243,121,218,184, 23,169, 10,206,137,203, 32,200,118, 39, 0, 48,111,
+233, 43, 6, 40,163,193,148,160,113,119, 98, 48, 92, 65, 66, 98,190,173, 48,166,199, 56, 40,172,211,132, 94, 73, 72,197,193, 53,
+ 7, 27, 20, 88, 39,193, 58, 77, 29,255,180,130, 37, 6,111, 23,232,135, 3, 96, 20,156, 15,224,215, 27,226,121, 2,174, 30,151,
+231, 9,231,179,197,101,114,112, 96,144, 70,161, 55, 6,201, 57,178,180,102, 1, 57,152,128,209,134,238,193, 41,224,219, 15, 39,
+ 28, 6,133,195,208, 1,206,131, 45, 14,105,182,208,224,136,222,129,165, 64,255, 45,133,204, 81,192, 46,241,212,135,136, 16, 25,
+172,219, 26, 47,206, 0,113,234,143, 63,160, 10,107,194, 27,175, 58,223,145,178,178, 32,139,181, 7,122,170,170,241,150, 35, 94,
+ 15,244,148,119, 88, 44,222,141,211,154,241,111,106, 44,202,121,150,188,211,165,215, 34, 67,160,193,184,236,110,163, 72,251, 3,
+124,207, 64,111,124,206, 13, 58,181, 29, 97,151,137, 58,223,128,224,155, 56,142,165, 55,133, 77,189,245,199, 38,122, 54, 53,177,
+161,108,223,249,191, 79,177, 79,191, 26,132,211, 10,233, 98,131, 66,221,137,226,216,214,229,166,187, 29,177,200,185,222, 34, 31,
+182,133,244, 89, 87, 29,205,142,185,218,182, 26,205, 68, 74,219,161, 94, 71, 59, 89, 36, 87,236,113, 60,241, 60, 10,223,122,109,
+158, 45,101,101,156, 87,112,175, 41,103,132,151,228,179,237, 45, 44,111, 62,223, 45, 89,202,228,104,191, 42,105, 86, 41,217,174,
+181,201,248, 27,187, 94,190,246,154, 56,119,108,239,240,254, 32,106,135, 40,247,246,181,175, 29,234,188, 81,189,227, 45,202,126,
+119,221,130,165,157, 69, 12, 96, 88, 87,135,144, 34,186,174,195,233,116, 2, 18,129, 65,190,255,237,111, 17,188,199,249,124,174,
+ 55,112, 58, 24, 98,189, 14, 66,238, 64,153, 16, 20, 82, 34, 5,249, 87,243,205,185,140,157,183,247,120, 91,164,113,193,119,152,
+213, 16, 66, 25,239, 84,200,203, 22, 20,148, 31,127,201, 53, 23, 60,239,175,195, 27, 70,196, 70, 76,219, 91,209,218,174,191,126,
+ 54, 50,144,170, 29,183,239, 96, 85, 49,238, 72,110, 85,160,154, 10, 41,142,110,114,130,211,151,204, 98, 57,206, 25,140, 81, 56,
+ 30, 14,212,177, 25, 13,163, 54,253,135, 81,146,208,187,118,133,233, 12, 18, 18,214,133,172, 70,183,219, 13,183,219,156,195, 88,
+178,104, 48,145,240, 72, 10,158,133,133, 34,219,195,232,223, 11,129,163,235, 58,172,118,174,116,181, 24, 73,128,150,192, 96,221,
+ 10, 38, 4,180,209, 96,156, 67,107, 3,109, 12,180, 54,144, 66,213, 93,127,103,250, 45, 65, 46, 4, 56,103,225, 61,145,199,128,
+173, 43,118,206, 81, 66, 94,158,174,132,224,234,199,231,252,122, 70,223, 15, 80, 90, 97, 93, 23,114, 79,112, 14,231,104, 53, 65,
+ 83, 24, 2,224, 24, 99,178,239, 60,145, 37,146, 49, 24,211, 17,110, 53, 79,129,236,106, 43,154,155,162,119,137,147, 16,156,175,
+211,142, 16, 28, 98, 36,139, 36,103,156,138,169,140,127, 13, 33,192, 89, 11,164, 68, 99,228,130,224,174, 33, 60, 60,103, 19,208,
+115,230,249,179,166, 58,178,222, 49,148,137,211,182, 42, 41,169,126, 62,147, 12, 25, 56,148,210,244,251, 24, 32, 82,192, 95,125,
+247, 13,254,203,127,254, 27,252,199,191,253, 30,235,124,197,116, 62, 67, 9,137,167, 15, 79,240, 97, 69,215,113,112, 30,240,211,
+207,159,112, 58,156,208, 73,129,206, 8,240, 65, 3,189, 6,250,142, 4,193, 66, 32, 46, 19,221,105, 66, 64,136, 30,105,232,193,
+ 36, 67,252,233, 19,196,151, 27,190,252,203, 39, 92,206, 11,158,207, 11,102, 7, 68, 78,154, 2, 45, 57, 68,140,144,156, 97, 94,
+ 38,112, 38, 97,164,130, 18, 18,154, 51, 68,183,226,183,223, 62,162,239, 4, 12,103,192,188, 98,125,185,130,187, 8,158,128, 24,
+ 61, 56, 75,208,138,230,150, 33,250, 93, 19, 28, 19,145, 62,125,100,240,158, 98,130, 19, 34, 88, 2,228, 94,212,245, 14, 67,188,
+ 42,199,202, 12, 62,237,168,111, 91, 7,148,234,161, 95, 15,247, 42, 26,219, 98, 8,223,114,216,211, 22,180, 93,245, 97,105,199,
+ 81,111, 71,227, 37, 31,187,113, 59,109,130,215,152, 26,140, 76, 3,193,201,225, 5, 49, 67,112,216,166,241,207,172,247, 84,147,
+151,182, 45, 53,175, 22,156,125,150, 76,218, 30, 87, 34, 5,226, 86, 24, 52, 25,219,129, 85,181, 54,227, 77,218, 93,218,254,158,
+214,138, 70,130,165,244, 14, 77, 47,251,235,219, 9, 66,177, 90, 97,191,251,103,181, 35, 47,188,186,152,237,137,251,243,147, 62,
+ 72,141,141,239,254,125, 96,251,215,177, 45,196,138, 88,240,189, 92,118,220,105, 9,218,139, 16,185,168,192,238,117,222, 94, 82,
+126,207,104,111, 10,191,212,234, 40,210, 86,197,211, 24, 62,110, 33, 57,173, 55,177,229,207,191,113,222,163,190,239,237,164,105,
+123,142,155,194,177,133,179,212, 14, 61,195,247, 55,247,195, 94,117,189,255,104,108,213, 98,181,130,165, 4,163, 52,156, 13, 88,
+173, 69, 76,180, 11,214, 74, 67, 73, 13, 37, 21,158,158,158, 16, 99,196, 45, 78, 88,214,149,144,160, 57,107, 61,242,132,196, 19,
+124,116,224,156,110,214,215,219,149, 14,243, 16, 32,178, 18,217,135, 64,123, 73,198,128, 16,193, 56, 3, 79, 34, 39,137,169, 13,
+ 26, 34, 40, 0,164,112,206,185, 16,121,175,238,160, 21,237, 48,131, 39,234, 88, 76, 33,171,155,211, 62,237,173,133, 77,101,113,
+ 37,227,228,187,217,178,207,105, 92, 95,144,173, 5,196,194,235,247, 54,125, 0,109, 43, 66,102,152,199,236,131,231,208, 90,162,
+211,100, 15,243,142,172, 98, 12,172,122,219, 59, 99, 32, 25,135,207,129, 59,133, 84,198,177, 17,209,180,214,148,155,238, 45, 89,
+131,162,167,223,207, 25, 92,142,139,237,187, 30, 66, 73,112,150,234,148,228, 48, 14,224,140,225,249,249,153, 88, 13, 66, 82, 16,
+135, 34,214, 57, 3,131,148, 10,206, 5,172,171,133,226, 2, 76,208,127, 3, 79,208, 76, 1,160,209,243,243,203, 5, 82, 72, 60,
+ 61,156, 32, 56, 69,153,114, 36, 60,158,142, 8, 49, 63,102,193,209,117, 26, 62, 58,196,224, 97,114, 26,154,247, 49, 31,238,137,
+ 34,145,179,160,112, 60, 28,176, 44, 11, 14,199,177,242,232,165,214, 56, 28, 71,164,152,224,156, 5, 0,220,110, 55,218,185,119,
+ 61, 20,231, 88,115,209, 45,132,168,193, 51, 74, 18,182, 54, 6, 71,105,128, 41,161,211,134, 10,120,206,176,174, 11,137, 21, 21,
+225, 85,231,105, 38,232,140,228,121,138,197, 96,164, 2,148,106, 38,119,244, 81, 8,153, 85,192, 56, 77, 52, 68,158, 0,150,181,
+175,200,130,176,232, 40,152, 40,177,108,173,245, 0,178, 96, 50, 70,218,215, 43, 67,175,251, 96, 6, 72,120,132,217, 34,121,139,
+ 14, 30,127,245, 96,240,219,255,245,191,224,255,184, 89,252,219,151, 87,188, 92,111,120,236, 13, 34,179,208,131,134,157, 7,252,
+248,211, 23, 60,116, 26, 66, 68,244, 60, 65, 49,138, 26, 22, 93, 79, 66,191, 65, 67,235, 30,233,124,129, 8, 9,108,114, 96,186,
+135,139, 2,235,203,132,215, 47,175,232,204, 35, 86,119,133,245, 30, 62, 37,124,250,252, 25,211,237,138,158, 11, 60, 29,142, 24,
+198, 35,220,234,225,108, 32,250,157, 25, 33,146,197,116,126,197,191,251, 79,255, 1,201, 58,252,183,127,248,127,112,236, 14,185,
+105,102,228,111, 15,235,230, 18,137,212,241, 23,253,113,200,205, 86,209,196,148, 40,104, 33, 57,196,177,127,252, 33, 86,207,116,
+220,241,142,203,156, 99, 15,155,217,186,244, 34, 96, 97,111,218,148,205, 95,158, 50,188,229,215,209,230,169,221, 30,211,223,199,
+ 43, 85,124,167,112,142,101, 50,144, 15,130, 66, 49,219,241,218, 75,119,213,162, 93,171,119,187,236,123,169,183,229, 41,213,174,
+171,252,179, 29,137, 49, 11,255, 26, 9, 88,126, 29, 8,118,147,119,243,237, 86,160,216,188, 16, 27, 91, 90,218,201,225,139,109,
+ 35, 84, 64, 14,171,129, 38, 85,110,198,232, 72, 46,196,244,152,117, 0, 5, 4,195,154,160,114,150,154,217, 69, 74,144, 44, 87,
+173, 60,131, 81,184,216, 40, 89,173,176,141,241,237,144, 44,107,147,234,185, 70,221, 75,199, 72,251, 27,145,147,154,138,151, 84,
+228, 17,115, 44,124,131,212,236,211,219, 2,174,236,246, 43,169,112,147,254,241, 92, 97,111,226,180, 70, 52, 87, 44, 79,229, 57,
+163,137,154, 44,169, 83,156,109,196,186,252, 26,166,152,182,199,144, 11,160,182, 56,100, 89, 17,206, 26, 22, 2,231,108,159, 1,
+ 0, 65, 55,238, 76, 80, 75, 25,140,195,179,118,128,241,205, 13,194,218,189, 70,177, 19,178, 6, 66,179,155, 46,176,220,117,136,
+205, 74,200, 68, 62, 80, 3,110,211, 13, 9, 30,140, 71, 60, 62, 28, 96,164, 6,151, 9, 93,111,208,229,195,227,233,195, 1,131,
+ 76,224,206, 65, 49, 78, 52,172, 20, 33,141, 65,168, 69,122, 66,140, 46,199,158,110, 69,146,224, 89,108,151,195,113,136, 99, 32,
+234,206, 92, 74, 9,169,117, 22,195,145,112, 43,102,145, 19,103,155, 18, 86,112,133, 88, 14,236, 24,179,111,150, 62,155, 82,171,
+250,122, 10, 33,107,254,118, 9,131, 81, 66, 80,144, 75,126,125, 4, 3,180, 96, 80, 28,208,146, 68, 65, 70, 73,244, 70,225, 56,
+ 24, 60, 30,122, 60,157, 6,156, 70,133, 99,175,240,116, 28, 96,180,132, 96, 17,189, 20,144, 44, 65, 32,192, 8, 6,197, 18,180,
+228,136, 33,192, 40,149,149,223, 52,194,245, 33,212,247,108, 90, 87,128,243, 28, 27,154,111,162,121, 76,106,140,198, 97, 60, 32,
+186,128,243,235, 43,214,117,133, 18, 2,206, 90, 60, 60, 62, 0,137,225,229,245, 12, 31,128,219,117, 69,215,245, 88, 87,135,105,
+162,131, 78, 42,242,177, 15,163,193,233,116,204,191, 95,192,104, 66,158, 74,193,208, 25,133,199,211, 9, 66, 50, 48, 22, 33, 4,
+195,225, 48,160,235, 13,164,150, 80, 70,130, 11,186,207, 10,150, 96, 58,133,190,239,192, 24, 42, 3,158, 64, 48,153,233,238,168,
+216, 34,188,176,133,214, 10,183,235, 21,214,174,164,168, 23, 58, 23,141, 18,118, 93, 48,223,110, 52,217,208, 58,227,119, 3,180,
+ 18, 80, 66,224,122, 57, 35,120, 79, 93,165, 18, 48, 90,131,165,132, 24, 2,250,174,203,142, 11, 79,190,105,162, 83,229, 17, 53,
+133,196, 20,213,174,119, 84,140,120,183, 66,102,145,151,181, 43, 1,157,144,104,171,233, 82, 93,173,196,204,201, 63, 14, 35,156,
+ 91,145, 98, 64, 8,142,178,197,179, 48, 86, 73,131, 16, 34, 58, 99, 16,220,138,190,147,232,164,132, 74, 9, 7, 41,240, 96, 36,
+140,240,248,254, 97,192,167,127,250, 39, 28,198, 17, 65, 9,124, 57,223,224,151,128,239, 78, 31, 17,230, 27, 14,163,193, 65, 25,
+ 64, 0,159,207,207, 88,157, 7,247, 9, 50,144,213, 44, 36, 11,174,104,175, 78,195,230, 72,159,167, 99, 15, 8, 1,188,204,248,
+252, 47, 63,225, 79,255,246, 5,147, 77, 96,227,128,159,159,127,129, 80, 18,145, 9, 68,174,241,122,181,184, 45, 1,211, 58,195,
+152, 14, 74, 48,176, 20, 96, 12, 67,111, 20,224, 3,190,123,250, 22, 95,254,248, 5,127,252,215,159, 96,250, 1,183,101,134, 84,
+ 18, 82, 50, 32,120,116, 90, 17,149, 83,208,217, 34,121,217, 29, 19, 41,210, 89, 90,223, 22,109, 76, 39, 36,196,177, 63,253,176,
+121,160,227, 14,165,248,110,254,239,155, 84,180,247,113,169, 59, 15,246, 59,190,236, 63, 23, 96,194, 27,235,211, 61, 40,162, 90,
+136,202, 65,125, 55,166,199, 29,195,123, 63,121, 72, 59,149,242,123,176,154, 92, 66,238, 3, 62,208, 54, 98,205, 72,188, 29,223,
+231, 98,129,191,179, 67, 47,191,164,142, 44,145, 16,238,246,198,233,190,176,105,236,112,177,153,166,108,217,225,219,127,111, 94,
+ 4,250, 0, 9,202,126,230,133,179,205,178,239,177,226, 65,121,117, 52,108,123,229,109, 37,210,174,240, 67, 76, 68, 42, 18,146,
+188,167,140, 70, 96, 34, 39, 5,145, 72, 46,179,199, 43,219, 27,245,198,206,218, 53, 72, 67,239, 43,133, 99, 89,155,240, 6, 20,
+147,154,101, 8, 26,129, 21,208,226, 63,223, 50, 5,246, 29,119, 97, 23,176,183, 37,100,251,190,222, 69, 5, 19,129,143,239,160,
+ 51,229,162,217,137, 12, 55, 74, 78,245,163,179, 29,212,135, 53, 78,131,253,248,158,146,171, 36, 66,244,123,107, 93,214, 43,176,
+236,193,142, 41, 97,181, 43,144, 34, 58, 46,208,167,136,255,237,239,255, 22,255,251,255,252, 63,225,239,186, 30,127,253,244,128,
+199,211,128,135,193,192,112, 42,232, 88, 74,121,127, 76, 35, 81,145, 3,120, 10,193,138,115,129,174,239, 73,136,196, 40,218,179,
+ 76, 81,132, 16,208,157,222, 82,196,212, 22, 67, 76, 33, 36, 41,123,139, 1,149,163, 87, 43,241, 74,211,174,185,252, 89,202,114,
+111, 18,206, 98,200, 55, 38,218, 77,147,199, 89, 98, 28,122,116,157,196,216, 27,244,249, 64, 31, 59,141,222, 40, 40, 14, 24, 45,
+192, 83,128,150, 12,200, 81,165,130, 51, 4,103,145, 2, 5,195,164,156, 0,199,115,145, 70, 29,179,203, 16, 28,151, 61,247,116,
+232, 17, 93,141,196,103, 42,147,231,250,190,195,113, 60,160, 51, 38,235, 36,169, 40, 95, 45, 49,247,157,117, 96,156,213, 17,185,
+ 54,196, 67,215,218, 96, 89, 38, 60, 60, 60,224,245,245, 21, 33,164, 92, 64,167,140, 67,205, 62,127,187,224,244,120,196,227,195,
+ 9,227,208, 35,197, 0, 31, 28, 24, 34, 58,163, 41,230,148, 51,244, 67,135,206,104, 12,125, 7,173, 36,148,204, 54,176,213, 18,
+165, 44,135,254,148,132,179,206,116,185,211,143,152,167, 25,203, 60,211,206,156,137,140,148,245,176,171,195,186,172, 68, 32, 20,
+164, 63,234,250, 1,171,115,152,150, 5,253, 48,128, 51,137,101,186, 34,196,128,135,135, 39, 8, 33, 48, 47, 51, 4,231, 21,214,
+211, 25, 67, 5,130,214,232,186, 14, 82,208, 53, 21,235, 99,209,249,189, 33,125, 71,129, 2, 73, 46,234, 40, 94,107,133,213, 90,
+ 4, 79,105, 99, 34,103, 31, 8, 41, 49,142, 3,192, 25,174,215, 43, 16, 35,156,179,244,251, 99,162,212, 61, 48,200,140,224, 29,
+ 58,131, 20, 3, 4,128,209, 40,136, 20,193,131,197,135,135, 17,235,124,197, 95,125,255, 29, 78,135, 3,254,191,255,254, 15,120,
+190, 76,184,204, 14,209,115, 12, 66, 67, 6, 15, 17, 28, 14, 74,225,233,225, 4,112, 1, 23,128, 95,158, 47, 72,137, 65, 51, 1,
+205, 24,152, 96,224,199, 17,105, 93,193, 23, 11,172, 14, 97,157,193, 98,130,123,189,226,246,122,198,235,121,197,231,243, 21,230,
+112,132, 96, 18,163, 25,136,211,159, 53, 76, 82, 8, 4,159,224,173,135,204,233,144,227, 56,160,235, 12,192, 34,110,183, 87,252,
+219, 63,255, 17,118, 37,120, 78,202,116,189,224, 28, 56, 18, 58,173,106, 40, 18, 7, 39,126, 66,206,187, 72,137,101,129, 92,246,
+217,112,142, 20, 34,196,113, 56,252,176,131,196,220, 41, 95,255,220,225,251,231,254,204,215,254,251,159, 61,212, 57,111, 14,156,
+183, 40,213, 86,236,246, 94,223,255,213,248,246,252, 98,164, 18,213,201,182, 46, 28,140,111, 7,100,123, 88,238,164,209,219, 33,
+ 85,249,223,169, 61,184,190, 86,176,236,161, 26,145, 81, 87, 19,217, 38, 18,100, 59,193,224,238,156, 70,220,188, 82,141,240,235,
+ 13, 42, 47,251,114,233, 80,103,121,159,206,139, 42,156,101, 47,121, 86,131,167,157, 74,191,116,204,153, 19,158,163, 48, 67,214,
+233, 33,135,185,240,188, 59,227,249,247,150, 67,189, 60, 12,234,188, 55,228,232,150,102,150,197,131, 37, 26,138,111, 34,199,114,
+152,111,208,161,214, 28,183,137, 64, 88,101,191,239,227,106,217, 59, 65, 56,251,226,238,254,253,136,141, 83, 99,243,206, 23, 40,
+ 78, 89,204,112,150,178,218, 31, 53,183,128, 55, 98,202,244, 78,232,204,230,247,231,123,139,220,174, 40,229, 77,198,249,230, 62,
+ 72, 41, 66, 72, 14, 32,230,155, 60,125, 14,214,117,134,214,146,222, 31,191,224, 63,126,115,194,255,242,219, 15, 48,225, 10,206,
+ 29,152,183,208, 44, 65, 32, 65, 10, 14,187,172,184, 94,174, 8, 62,193, 5, 26,241, 23, 59, 90, 25,177, 47, 51, 41,130,157,245,
+ 88, 87, 18,134, 13, 67, 71,217,218,206, 2, 49,162,211, 10, 74,112, 28,143, 35,250,142, 48,156, 36,232, 51, 24,134, 30, 41, 37,
+104,173,161, 53,221,144,133, 84, 80,138, 96, 44,214, 90, 36,164,236, 37, 47, 7, 3, 81,223, 4,223,108,100, 49, 56, 8, 1, 24,
+201,105,255,157, 18, 20,231, 72,209,195,104, 14, 36, 7, 37, 25,137,222,180,204, 2, 77,134,232, 61,250,206,100,161, 41, 69,206,
+202,108,221, 20,138, 4,116,198, 24, 18,139,165, 60,233, 48,134,226,139, 51,173,109,153,103,104,165,200,174,231,168, 91, 13, 57,
+169, 44,101,244,244,241, 72, 35,109,165, 53,180, 54,212,113, 25, 34,166,157, 47,103, 56,239,209,245, 26, 31, 62, 60,193, 24,157,
+237,100, 84,252, 80,114, 25,199,120, 24,112, 60, 29,192,115,151,205,115, 12, 43,231, 44, 23, 52,212,209,167,148, 48,221, 38,220,
+174, 87, 92,175, 23,204,243, 12, 41, 4,198,225,128, 24, 34,164,146,117,127,204, 24, 48, 77, 55,132,224,242,245, 46,242,107, 45,
+ 48,221, 38,218,187, 11,250,243,198,116, 72, 33,135,200,128,129, 21, 97, 30,163, 66,253,229,153, 68,153,199,195, 1, 49,166, 44,
+146, 83, 24,114,193,192, 5, 21,103, 52,225, 97, 53,160,166,235,123, 28,142, 7, 24,163,192, 37,135,181, 43,162,119,112,171,173,
+140,140, 34,130, 43,108,128,152,167, 58, 92,146,178,189, 27, 6, 74,173,235, 12, 34, 75,152,231, 25, 28,192,146,173,110,109,228,
+110,153,241, 73, 45, 17,146, 35, 46, 60, 56,140,228, 56, 13, 10, 15, 71, 3, 45, 57,137,249,206, 87,252,187,223,126,135, 81, 15,
+120,121,189,226,249, 54,227,236, 29, 46,126,133, 24, 21, 46,235, 5, 71, 5,116, 74,226,155,199, 39, 48,159,192, 66,196,124,187,
+ 34, 69, 7,183,222, 16, 18, 32,100, 15, 54, 7,224,234,176,188, 94, 17,185,132,236, 71,192, 39, 28,187, 19, 62,127,126,193,101,
+246, 0, 55, 48,114,128, 95, 28, 82,136,120,120, 60, 96, 28, 52, 4, 34, 36, 72,184,108, 87,130, 74,105,163,241,241,227, 19,130,
+ 11,248,231,127,248,103, 76, 55,135,152, 40,171,222,232,158,166,131,121,102, 43, 5,135,144, 12,146,209, 84, 57,133, 8, 41, 53,
+ 66, 72,240, 49, 18,247, 61,100, 39, 80, 78,197,148,251, 3,175, 65,104, 52, 89,228,191,118, 40,255, 90, 20,107,219,149,124, 45,
+ 7,253, 47, 57,236,171,136,134,237,180, 97, 95, 63,192,223,248,204,223, 63,248,105,247,243, 14, 19,167, 1,105,236,146,183,202,
+ 81,154,119,251,224,165, 51,216, 30, 87,250, 26,199,189, 81,147,239,205,106,251, 34,128, 37,188,131,226,205, 34,136, 70, 57,158,
+114, 71,198,218,212,182,148, 26,245, 62,111, 58,202,109, 28,189, 75,158,202,163,224,148, 53, 7, 53, 58,245,157, 87,138, 51,209,
+ 76, 69,226,155,100,181,132,176,243,139,183,196,190,150, 11,144,242,248,187,173,151, 82,243,103,118,131,234, 28, 38,148,216, 38,
+150, 18,172,224,144,242,148,224,110,141,205,238, 86, 58,241,157,129, 77,106, 58,124,198,246,118,203, 77, 93, 91, 68,127,121,108,
+ 93,245, 7,133,126,245, 94,177,240,245,253, 61,242,136,191,136, 15,105, 55,234,161, 52, 7,139, 44,223,188,202,254,152,246,138,
+ 52, 18, 37,251, 32, 23, 64, 96, 12,188,147,184, 76,175,224, 34,192, 49,139, 0,139,228, 22,248,121,197,116,190,194, 70, 14,191,
+174,136,222,131, 27,141, 20, 2,188,179, 20,243,202,139,109,117, 35,171, 17, 33,140,225,225,225,152,111,250, 1,206,211, 33,175,
+ 13,117,123,235,186, 64, 42, 13,105, 36,142,250, 64,106,252,101,193,234, 87, 12,195, 0,128,195, 71, 2,221,220,110, 83,213,137,
+144,181,142,166, 17, 33,250,109,238,146, 80,189,229,135, 67, 15,111, 45, 38, 59, 35,229, 46, 93, 42, 77,150,189,108,217, 72, 33,
+100,101, 57,229,212,115,136, 28,152,148,114,231, 73, 7,183, 40, 94,118,206,145, 68, 14,124, 78, 20, 89, 90,232,120,206,145,242,
+ 92, 73, 3,183, 90,188,174,150,216,229,146,124,215,195, 97,192,203,203, 13, 58,171,227, 67,240,248,238,187,239,240,227,143, 63,
+ 99, 93, 46,144, 82,224,241,195, 3,230,121,198,239,255,250,247,132,245, 77, 9, 47, 47,191, 64,107, 77, 96, 24,165, 17, 83,194,
+ 50, 79, 64, 12, 88,151, 5, 41, 25, 48, 70, 76,118, 82,169,115, 8,174,177,174, 43,150,117,197,249,114,193,235,235, 5,203, 66,
+217,228, 74, 10, 72, 37, 97,221, 11, 36,191, 85, 56, 15,227, 46, 23,131, 4,142,161,105,128,135, 16,228,145, 31,122,234,244,175,
+ 57, 56, 36,184,136,121,154, 8, 76,211, 83,132,171,183, 43, 66, 70, 7,199, 24, 49,246, 61,162,247, 88,166, 25,156, 49,204,211,
+ 4,183,208,216,155,172,116, 38,191,206,200, 5, 14,101,190,207, 51,177, 20,180,166,240,150,190,235, 97,231,105, 27,187, 7, 18,
+212,133, 20,235, 8,159, 11, 78,147,146,156,228, 22, 35, 21, 92,235,188,192,249, 53,231, 32, 44,116,111,138,196,187, 72, 89, 15,
+ 34,149,202,249, 0, 1, 49, 49, 36, 46,128, 72,215,180, 80, 12, 74, 83,227, 97,186, 1, 95, 62,255,140,207, 95, 94,112,234,123,
+252,221,247,223, 67, 12, 39,252, 95,255,248,207, 20,150,195, 57,226, 18,208,127, 24,144,150,128,217,158, 41,128, 69, 57, 44, 46,
+194,174,180, 34, 58,255,195, 79,144,191,204, 56, 30, 6, 28,198, 14,195,239,190, 67,232, 37,152, 86,224,107, 0,139, 51,142,166,
+ 3, 79, 47,184, 93,206,208,250,132,203,117,194,235,116, 1, 59,255,130,111,127,251, 13, 6,163, 16, 65,174,148,195,135, 7,184,
+176,130, 43, 74,156,187,190,174,176,147, 68,130,134,141, 43,188,143, 56,112, 14,231, 29, 24, 35, 27,219,226, 28,184,144,232,140,
+202, 60,120, 15, 30, 40,160, 39,230, 38,148,114, 29,200,125, 96,180,132, 44, 29,203,198, 14,103,117,175,122,159, 51,253, 94, 55,
+253, 94,238,249,175, 29,212,247, 33, 26,191,174,252,142,111,121, 53,247, 58, 62,206,222,166,197, 49,246, 70,113,254,238,243, 40,
+ 63,147,176, 27,153,239,189,211, 57, 47, 57,149,125, 59, 32,182,200,176,157, 40,175,116,114, 95,179,191,239,236,121,101,184,156,
+ 90,223, 57,170, 5,176, 4,178,108, 97, 22,172,177,125,181,175,199,150,169, 89, 30, 27,125, 32, 34, 82, 0, 82,222, 89,162,161,
+234,149, 85, 1,234,251,199,246, 9,105,213,118,200,182, 0,159, 18,220,146, 34, 5,149,176,180, 27,131, 87,207,126,115,224,177,
+157,192, 47,221,209,231, 26,245,121,253,251,223,138,205, 24, 3,120, 73, 24, 75,109,218,222, 30,225,187, 21, 69,137, 4, 93,141,
+ 10, 3,111, 70,249,156,180, 33,247,145,195,252,206,245, 81, 52, 6, 57,152,168,197,228,221,231, 6,252,218,117,191, 23,224,221,
+ 33,133, 19,203,140,246, 0,198,200,227, 91,186, 37,109, 8,234, 34, 36,237,181,185, 16, 8, 43, 48,221, 44,236,146, 48, 93, 61,
+ 94,167, 21,159,175, 43,206,214,226,101,177,184,250, 4,155, 18,134,211, 9, 66,107,168, 24, 49,164, 30, 74, 10, 88,235,192, 56,
+161, 66,139,101,172,122,183, 37,131,136, 12, 42, 73, 88,187, 64, 41,133,211,233,152,233,117, 2,231,203, 5, 44,123,154,129, 8,
+ 99, 36, 98,210, 36,166,211, 26,171,119,112,139, 67,167, 53,150,217, 82,151,218, 41,248,213, 86, 11,158, 86, 18,146, 75, 68, 31,
+225,173, 67,159, 57,227,130, 49, 24,213,129,165, 72,161, 53,185,192, 9,193,147, 10,154,111, 92,136, 24,129,196,104,223, 31, 17,
+242,103, 36,213,177, 56,141,115, 69,214, 16,208, 91, 38, 51, 96, 6, 49,119,249, 33, 98,186, 94, 17, 44, 25,103, 25,167, 38, 96,
+ 28, 15,112,214,193, 24, 5,107,109,133,239,132, 16,240,205,199,111,240,203, 47, 95,240,242,114,198,225, 56,162,235, 58,162,173,
+205, 11,161, 79, 37,197,236, 46,243, 4,123,126, 69,204, 1, 48, 18, 64,223, 31, 72, 11,148, 34,236,186,226,245,245,138,113, 24,
+ 96, 87,139,121, 93,192,149, 68, 12,192,188,122,196,196,193,146,128,247,168,193, 51,107,152, 16, 19,113,220,141, 49,164,249,200,
+ 86, 49, 45, 76,214,183, 80,225, 18, 67, 4,231,192, 55, 31,159,114, 96, 10,135, 60,142, 88,230, 9,126, 93,224, 45, 42, 2,182,
+ 88, 30,189,119,240,206, 99, 13, 1, 90,146, 50,127,154,103,120,107, 49,223, 38,168,108,131, 59,158, 14,120,120,164,130,102,181,
+150, 94,251,140,248, 85, 82,130, 43,142,163,121, 0, 18, 48,207, 55,154,122,196, 4, 35,168, 83, 85, 74, 1, 12,112,214, 98,177,
+ 30,130,145,176,240,124, 62, 35,248,128, 24, 9,148,164,238,109,162,130, 87, 97,114, 8, 1, 42, 73,210, 73, 4,178,245,121,112,
+156,167, 27,130, 3,126,243,244, 1, 33, 69,136,135, 3,254,251,203,207,248,247,253,247, 96, 2,232, 13,195,227,193,224, 60,175,
+232,164,130, 25, 31,112,185, 94,241,237,239,127, 3,182, 78, 48, 44,160, 59, 38, 4,217,225,248,241, 3,212,216, 35, 32, 66,157,
+ 70, 26,195, 27, 6, 12, 18, 98, 80,132, 45,159, 86, 72,172,248,230,116,128,255,253,239,240,223,254,244, 5,211, 50,129,117, 6,
+118, 58, 67,114, 9,187, 58, 40, 67,171,200,167,167, 3, 56, 15,248,246,195, 1, 79, 15, 71,176,164,240, 95, 95, 94, 49,173, 12,
+ 62, 11,202, 61,128,155,115,144, 41, 66,247, 26, 30,196, 25,232,153,202,164, 68, 1, 46, 0,231, 50,121, 52,135,231, 72, 65, 60,
+121,145, 18, 36, 0,249,150, 93,158, 15,246,244,246,144,126,155, 73,254,235, 17,164, 95,203, 54,255,181,206,188,165, 80,189,179,
+ 14,255,213, 17,255,253,243,104,255, 79, 52,183,248, 55, 96,119,214,218,126,168,187,107, 19, 92,202,111,227,105,195,157,242,230,
+140,190, 31,149,255,218,108,224,141,240,127,199,191,103, 85,205, 95, 8,118, 44, 71,235, 84,206,123,203, 66, 47,249,195,213,210,
+ 87, 14,122, 86, 11,140, 34, 36, 68,163,226,222,173, 68,242, 15,209,249,252,118,117,176,235,221,211,198, 17, 40,147,142,194, 20,
+ 96,105, 11, 64,225,205,196,129,189, 25,147,239, 5, 4,181, 83, 78,216, 57, 9,144,129, 34, 69,200,199,155,196,129, 74, 24, 76,
+123,222,112, 25,181,167,132, 6,116,243, 14,224, 63,165,173,176,105,128, 57, 44,187, 54,120, 89, 5,176,141,189, 80,120,229, 44,
+181,128,163,244,171, 81,196,111,175,195,180,187, 86,139,114,158,115, 1,150,111, 80,219, 65,203,238,212,205, 18,130, 41, 88, 88,
+252,124,158,241,143,159,206,248,167, 31, 95,241,243,106,241,243,108,113,177, 22,215,200,113,245, 14,221, 56, 18, 77, 43,120, 12,
+ 67, 71,112,163,108, 43, 85, 82,129,101,225, 86, 12, 17,222,163,242,164, 57,207,169, 92,138, 18,185,140, 50,152,174, 19, 98, 72,
+116,104,129, 97,158,174,208, 90, 67, 41, 73, 22,177, 44,162, 67,222, 65,123, 23, 97,140, 2, 99, 29,140,201,227,241, 68, 32,157,
+ 20, 35,184, 18, 80, 82,209,244,136,115,172,118, 33, 5,123, 66, 77, 64, 43,104,100, 33, 37,132,104, 65, 68, 4,145,161, 84, 56,
+153, 5, 94, 30, 42, 67,117,130, 79,224, 50,239,251,165,216,180, 44,156,244, 43, 82,208, 40,217,171,128,213,134,188,106, 42, 25,
+227, 11, 94,207, 23,124,248,248,136, 48, 79, 48,166,199, 52, 47,120,122,124,194, 52,173, 56,157, 78,100, 33,243, 14,159, 62,125,
+198,120,232,193,133, 34,192, 81,177,144,230,177, 54,192, 48, 47, 22,151,215, 43,130,117, 8,241, 23,124,255,253,119, 20,122,227,
+ 1, 33, 12,214,149,186,171, 16, 19,230,219, 2,193, 21, 4, 87,249,186,205, 94,112,235,179,237, 43,146,126, 37, 0,222,122, 26,
+111,103,251, 94,215,245,245, 57, 19,228,165, 16, 4, 21,250,227,136,219,109,130,212, 2, 90,112,188, 60, 63, 19,241,206,249, 45,
+ 72,133, 19,221, 76, 40,133, 57, 68, 92,110, 87, 28, 48,146,165, 45, 37, 88, 75,222,246,219, 60, 17,142, 53, 70,152, 78, 35, 88,
+ 42,192,144, 87, 50, 33, 4, 96,221, 82,235,164,214,232, 6,162,231,205,211, 76,227,251,117, 65, 8,101,122,162,225, 66,160, 66,
+ 51, 71, 55, 35,210,152,190, 56,145,136, 90, 72,235, 62,235, 60, 84,207,145, 66,128, 93, 86,140,199, 3,124, 12, 80, 90, 33, 9,
+ 14,151,128,196, 21,172, 11, 36,126,206, 34,188, 94, 41, 8, 31, 48,177,132,199, 78,227, 54,207,112,206, 98, 52, 29,126,250,229,
+ 19,126,243,109,196, 55,218,224, 36, 73,155, 33, 14, 3,208, 9,136, 15, 39,120, 22,193, 21, 9, 25, 3, 15, 96,130,129,229,117,
+ 82, 48, 2, 16, 12, 34, 58, 60, 14, 6,223,126,120,192,213,115, 76, 54,226, 98,123, 60, 60, 61, 0,150, 2,152,166,213, 66, 74,
+129,239, 62,140,232,146,197,247,143, 71, 44, 81,225,114,123,197, 53, 0, 96, 18, 8, 17,137,113,204, 62,128, 5, 7,169, 56, 18,
+ 79, 24,180,193,234, 2, 12, 99, 72,136,144,140, 19,254, 25, 12,206, 5,242,231,203,236,169, 15, 17, 41,120,136, 67, 63,252, 80,
+ 70,130, 49, 54, 99,107,246, 62, 98,243,235,201, 86,191,190, 79,255,181,223,129,175,110,160,255,220,120, 19,239,134, 64,220,223,
+ 76,249,206,169,251,254,225,219,250,217, 83,235,115,207, 89,220,237,145,196,154,240,147,123, 31,252, 87,159,210, 61, 0,159,237,
+217,164,123,112, 77, 25,243,223, 61,204,157,255,176, 61, 88, 82, 85, 88,163, 9,205, 16, 98,243,239,190,143, 75,221, 94,231,157,
+147, 43,179,195, 35,216,142, 40,199, 50,157,174,238,203, 75, 96, 57,163,200, 86,145,199,238, 34,167,105,177,202,134, 45,141, 56,
+223,237,190,235, 14,187, 10,227, 54,139, 89, 98,233, 77,245, 83,166, 50,169, 14,224,223,190,153,187,220,120,246, 94,224, 64, 75,
+137, 19, 85,212,135, 12,147,217,242,211,139,110,160, 97,164,179,141, 34, 87, 40,125,247,215,249,126,205,180,135,221,236,223,131,
+237, 90, 41, 63, 19,147,175, 62,233, 16,136,208,166,184,172, 72,215,117,161,132,172,243,116,197, 28, 44,254,245,249,140, 63, 94,
+102,252, 98, 29,102, 48,204, 9,224, 70, 67,247, 29,164, 22,240,145,130, 69,100, 78,120, 34, 43, 76,204,153,204,164,182,143, 49,
+230, 76,110, 65,144, 20,231, 72, 4, 37, 37,198,225,128, 79,159,190, 32,134,136,195,241, 8,211, 25,138,236,204, 35,121,163,117,
+245, 59, 27,211, 65, 10, 9,173, 13, 56, 39,250,213,186,174,152,166, 25,214, 90,218, 87,199,132,105,158,177, 46,115, 78,117,243,
+ 59,193,163,224, 28, 74, 73,128,145, 2,189, 68,201, 34,171,242,139, 31, 90, 8, 90, 37,145,240, 47, 23,222,145,174,143, 88, 35,
+136,233,117,182,118,173,251,109, 48,142,224, 99,126,225, 5,124,126, 76,156, 11, 98,103,251, 64,190,116,165,114,188, 47,131,115,
+ 30,195,208,227,114,121,197,199,143,143,212, 61, 75, 1,107,125,198,181, 42,232, 76,178,227,140, 84,246,118,117,208,218, 32,248,
+136,121,166,241,254, 52, 77, 0,231,120,121,121,197, 50,211,110,117, 28, 15,232,135, 2, 11,163,109, 0, 0, 32, 0, 73, 68, 65,
+ 84,158, 14,199, 8, 44,179, 37,206,148,139,245,106, 21, 57,214, 84,144, 93, 1, 33, 99,127,163,143,112,214,193, 46, 22,193,123,
+116,166, 3,139, 52,146,103, 12,184,221, 38,172,203,130,190,239,179,239,221,161,235, 7, 88, 71,193, 34,214,249,138,167, 38,124,
+ 48, 0, 33, 32,164,192,229, 54,147,134, 32, 3,112,116,103, 8,203,106, 12,164, 82,132,246,205,226, 54,210, 13,144, 4, 95, 10,
+ 9,112, 96,181, 22,215,219, 45,139,220, 34,116, 22, 45,122,151, 51,233, 99, 73,178, 36,158,122,181,180,102,135,133,104,128, 88,
+ 37, 96,135, 50, 3, 8,160,163,132,130,146, 10, 41, 38, 40, 45,144, 16, 48,244, 35,120, 4, 70,165, 49, 26, 5,153, 40,182,181,
+147, 28,154,147,114,255, 60,205,184,174, 22, 62, 70, 28,250, 17,243,141, 98, 90, 15,163, 38, 39, 69,167,137,175, 63,246, 72, 42,
+129,143, 6, 44, 39, 34, 50, 45,193, 36, 7,239,122,164,200, 0,155,192, 46,228, 45,159,150, 21, 75, 12, 56,156, 78, 8,209,225,
+114,121, 69,223,107,252,230,155,143,248,240,244,136,243,245,140,243,243, 51, 88,138, 56,245, 29,158, 62,124,192,203,249,130,255,
+243,255,254,175,176, 76,131, 49, 2, 0, 37, 38, 16,114, 51, 19,243, 1,110,148, 70,116, 1, 60, 5, 40,153,197,174, 53,167, 33,
+ 39, 78,166, 28,123,155, 60, 24, 2,196,216, 15, 63,164, 26,137,216, 18,210,176, 59, 12,118, 97, 22,205,215,159, 83,178,191,215,
+221,255, 37, 2,188,183, 99, 88,214, 34,215,223, 20, 29,191, 54,214,191,239,202,216,123,135, 58,246,135,122,233,208,217,187,202,
+124,236, 58,245,247,146,222,254,236,161, 94,208,184,247,199, 82, 35,208, 99,237, 55, 26, 10,223,254, 37, 10,197,116, 93, 89, 0,
+162, 97, 4,111,135, 48,171,170,238,134,169,139,130,131, 35,114,222,254, 80, 79, 96,217, 15,153, 75,163,204,232, 23,156,213,136,
+213,178,241, 23, 89,233, 74, 7, 30,175,138,246, 10,127, 97,155, 85, 47,181,201, 43,153,247,143, 6,210, 2,236, 51, 98,203,183,
+202, 46, 59,221, 17,224,208,164,188,213, 81, 63,195,251,222,243,122,200,102,218, 94, 21, 61,102, 59, 94,141,170,101, 16, 72, 53,
+ 64,164, 22, 95,104, 34, 34,249,175, 95,203, 27, 60, 37,131, 95,248,219,201, 66, 97,103, 35,135,142, 8,201,169,144,224, 9,222,
+ 59, 92,207, 23, 88,239,176,174, 43,145,226,144, 96,225,113,177, 51, 46, 54,130, 15, 7,200,174, 67, 82, 18,178,211,232,199,161,
+138,237, 40,147,219,208, 36, 38, 16,185,174,208,225,188, 15,180,255, 78,116,168,115,193,112, 62,159,243, 94,184, 7, 7,135,247,
+212,101, 1, 28, 31, 63,126,132, 54,116,115, 94,215,149,176,179, 82, 98,158,103,120,239, 49,207,148, 9,125,187,205, 68, 30,203,
+ 54,182,146,248, 69,121,227,128, 54,164,152,239, 58,131, 24, 29,184, 96,232,250, 46, 31, 76,122, 19,206,105,153,185,236, 4,212,
+ 81, 82, 18, 65,172, 20, 95,137, 10, 72,196,226, 60,200,241, 75, 57,145,174,100,129, 83, 65, 4, 8, 38, 17, 66,206, 74,207,177,
+194,224,130,154, 67, 48, 8, 65,135, 85,241,246, 91, 23, 48,244, 3, 46,215, 27,156, 91, 48,142, 3, 81,230,140,134,247, 17, 90,
+ 25, 2,181, 48, 78,251, 99,107, 51,175,159,116, 8, 82, 81,193,211,247, 35, 57, 3,148,198, 48,142,100,171, 3,189,183,231,243,
+ 25,222, 57,172,203,140,105, 38, 22,123, 10, 91,118, 2, 71, 34,113,100,140, 72,129,214, 7,217, 33,156,131,177, 5,162, 39,154,
+156,181,107, 21,148, 89, 71,239, 77, 74, 9,231,215, 51, 0, 96, 24, 71, 92,175, 19,198,195, 17,166,235,234, 84,100,181, 14,203,
+186,194,133, 0,161, 20,134,195,136,110, 24, 32,148,130, 50, 6,170,211, 80,198,128, 75,142,213,174,224, 92, 96, 89, 22, 44,203,
+ 10, 48, 6, 93, 99, 86,169, 99,119,150, 88,239,209, 19, 80,102,153, 22,204,243, 4,163,116,189,254, 24, 24,253, 57,231, 43, 81,
+142, 37,130,224,240,130, 41,231, 13,104, 43,139,183,121,158,224,112,198, 33,153, 66,215,169, 58, 89, 74, 46, 66, 51,178,182, 61,
+244, 10,209,174, 64,140, 56, 29, 59, 60,140, 61, 6,211,129,171, 14,159, 95,206,184, 77, 11, 14,221, 8,173, 20,172, 95, 48,244,
+ 6,189, 82, 48, 66, 17, 60, 71,113, 36,149,192, 58, 1, 38, 56,224, 45,193,211, 36, 3,151, 25,158,181, 56,240,171, 67, 92, 45,
+212, 48,192, 51, 2,143, 46,183, 9,199,177,199,249,252, 12, 41, 24, 30,198, 14,223, 60,246, 24, 15, 3,152,144,184,204, 19, 18,
+ 23,120,126,190,226, 31,254,241, 71,164,212, 35, 6,186,183,248,152, 96, 67, 4, 24, 71,116, 1,189,210,144,137, 65, 50, 14,201,
+ 19,148, 16, 16,140, 82, 18,131,143, 52,142,103, 2,130, 73, 48, 14, 72,197, 96,148,132, 56,116,135, 31,202,168,183, 48,150,139,
+237, 11,187,138,233,237, 94,252,207,217,211,222,198,139,254,101,251,244,251, 40, 21,214,140,201, 55,142,120,222, 33,179, 28, 28,
+ 82,246,173,245,241, 54,194,240, 93, 55, 77,194,176,246, 48, 21,105,159, 36,198,203, 77,191, 46,117, 43, 63,181, 77,123, 39,245,
+ 58, 54,130, 92,100,169,177,153, 21,143, 63,223,136,104,108, 15,175,217, 65,213,210, 86,124,176,187,185, 64,125, 46,188,141,139,
+141,149,189, 93,252,219, 69,208, 39, 5,145,157, 56, 47,238,188,114,120, 52,147, 5, 94,226,106,201,222,150, 26, 29, 69,140, 9,
+ 62,134, 93,136, 13, 75, 13,169,142, 21, 90, 96,106, 38, 5,169,170,220, 5,207, 7, 52,127, 59,119, 97, 28,251, 64, 25,198,118,
+ 7, 45,238, 95, 23,214,188, 39,197,110,214,142,205,115,129,193, 91,182,120,139, 18,110, 11,136, 6, 27,204,243, 84,129, 55, 5,
+ 2,221, 76,242,225,206,177, 43,136,176,139,101,109,112,194,191,178, 78,226,119,236,248, 66,217, 35, 93, 66, 2, 23, 9, 82, 9,
+112,158,192,121,132, 82,100,241, 18,146, 50,195,149,148, 24,251, 30,253,216,193,100,143,177, 80, 2,253,208, 3,156,163, 27, 15,
+240, 0,162, 96,100, 39,211, 26,203, 66,234,225, 15, 31,158,208,117, 29,156,181,184, 92,175, 21,255, 89,186,227,243,249, 76,234,
+238, 60, 86,238,250, 17,183, 43,117,208, 74, 42, 44,235,140,195, 56, 64, 41,129,143, 31,159, 16, 17,177, 44, 43,172,165,176, 17,
+ 74,246, 10, 0, 56,172,181, 88, 87,178, 43,157, 30, 78, 84, 20, 8,134,105,158, 48, 77, 19,172, 93,115,110, 55,141, 93, 15,227,
+ 1,211,109,130, 16, 2,135,227,136,121,162,189,237, 50, 45, 96, 44,225, 48,246, 80,138,104,103, 50,163,114, 99,238, 8,131, 39,
+161, 88,171, 2, 39,194,154,170, 24,233, 4,150, 17,173,148,253, 46,184,168, 68,198,146, 21, 30, 60,224, 28,117,239,222, 7, 72,
+109,160,181, 66,215,119,212, 9, 39,218, 77, 63, 61, 61, 32,196, 0,235, 22,104,163, 48,140, 7,244,253,136,235,117,193,243,203,
+ 23, 44,203, 2,198,129,126,232,241,240,248, 8, 46, 36,164, 82,249,240,142, 56, 30, 6, 28, 15, 35,134, 65, 3, 41,224, 56,246,
+240,118,133,181, 43,198,129,138,130,101,154,193, 18, 67,167, 52, 9,228, 56, 21,118,156, 87, 78,100,182,126,115,196,200, 16,178,
+205,148, 48,161, 9,171, 11,112, 46, 98, 89, 45,184,160,235,227,114,190, 0,156,225,225,244,136,196, 56,166,121,197,241,116,130,
+202,206, 4,211,119, 96,156,227,112, 24, 49, 30, 70, 12,135, 17,199,227, 9, 41,165,156,244,214,195,230,199,201, 56,200,241,208,
+117,144, 92, 64, 10,145, 45,109,188,242,200, 99, 44,122, 32,142, 16, 34,164,144,176,150, 30,143,224, 60, 39, 4, 18,252, 39,250,
+128,152, 25,242,116,219,225, 53, 65,111, 23,185,219, 64,189, 56,103,196,124,143,137,222,235,204,126,239,255,127,206,222,173, 71,
+178, 44, 61,207,123,214,105,239, 29,135,204, 58,116,247,116,207,104, 6, 34, 41,202, 4, 45,139,146, 32, 64, 23, 6,104, 73,134,
+161,159,224, 27,255, 25,254, 48,223, 9, 16, 12, 19, 48,108,194, 38, 65,145, 28,145,156,153,102,119, 87, 87,101,101,102,196, 62,
+172,163, 47,190,181, 15, 17,153, 89,221,195, 2,102,170,187,186, 50, 35, 50, 98,199, 94,223,225,125,159,183, 6,230,228, 34, 58,
+ 20,163, 20,141,179,148, 24,241,211,153, 95,252,252, 75,202,216, 19,251,158,182,107, 25, 82,226,190, 31, 9, 17,110,118, 29,133,
+192, 23,183, 7, 62,191, 57,208, 29,118, 20, 3, 73, 37,212,190, 67,117, 22,140, 38,141, 35, 86,137,126,160, 52, 6, 93,192,191,
+187, 67, 61, 12, 20,101,248,187, 95,127,139,109, 15, 28,110, 14, 40,157,209,170,208, 53,134,215,183, 59,126,242,246,200,135,111,
+126,195,171,155,142,253,209,241, 79,126,250, 83,246,183,183,252,249,159,255,146,239, 63, 12, 76,147,144, 95, 98, 17, 80, 80,138,
+137,198, 53,228, 40, 16,169,227,174,147, 48, 33, 63, 72,162, 93, 92,215,116,146,131, 33,206,143,214, 25, 26, 99,176,177,204, 41,
+109,155, 67,120,177,251, 60, 63,102,191,222,193,255, 24,207,249, 75,163,248, 31,254,162,122, 83,159, 5, 74,234, 18, 52,179, 61,
+176,175,133,109,243,207,162,174,246,229, 11, 45,173,126,157, 46,155, 67,117,246,177,151, 75, 82, 93, 94,246,211,213,106,176,192,
+120,184,130,243,168,170,206,188,180,193,149, 37, 88,166,118,153,243, 65, 91,212, 42, 92,187,242,115,171,133,234,126, 41, 98, 91,
+158,216, 12,147, 41, 18,220, 33, 0, 17,249,126,118, 51,118, 87, 90, 85,192,136,190,240,138,111, 75, 38,125, 37, 58, 76, 21,239,
+185,104,185, 42,248, 65, 43,241,156,138,255,121,141,187,157, 15,116,189, 96, 63,215, 98,104, 30, 6,104,117,121,160, 95, 77,225,
+151,215,135, 77,170,223,106,108,219,176,160,149,222,208,169,212, 22, 20,188, 40,214,175, 57,230,139,248, 77,175, 34, 56,179,164,
+198,169, 11, 30,254,252,239,230, 25,143,249,214, 9,162,245,234, 46,120,122, 61,151, 85, 65,191, 5, 34,213, 67, 93,107, 17, 61,
+ 25,163, 48, 6,118, 59,135, 82, 9, 99, 10,144,104, 27, 91, 59,217,140,143, 99, 77,193, 18, 18, 93,211, 56, 81,158,251, 80,171,
+ 15,185, 62,165,195, 23, 15,108,219,182,213, 99,237,241, 83,192, 56, 75,183,219, 73,220,103,205,197,126,243,246,141,132,122, 84,
+ 86,184,115, 45,227, 48, 10,161,170,192,205,241,192,227,233, 81, 96, 74, 90,132,104,143,167, 51, 31, 63,222, 51, 77,158,224, 35,
+ 77,211,114, 60, 28, 22,226,155,124, 47,137,166, 12, 53,184, 38,215,241,106,219,182,104, 99,232,118,123,206,167, 51,141,109,232,
+186,150, 48, 91,237,130, 20, 27,251,202,191, 79, 57,214,168,206, 88,227, 62, 93,117, 1, 40,156,107,107,158,187,228,202,207, 2,
+198,148, 11,227, 20,121,120,236, 25, 39, 47,112,150,153,172,151,132,151,174,170, 79, 63, 70, 65, 76, 26,235,208,198, 44,133,199,
+ 48, 14,180,141, 3,228, 57,148,146, 57, 28,119, 40,165, 56,157,207, 40,165,121,184, 63,113, 60, 28, 49, 6, 14,213,194,118, 30,
+122,134, 97,168,250, 20,121, 61,134, 97,228,238,238,123,161,124, 25,177,243,165, 20,184,189,189,161,113, 13, 62, 4,134, 97,160,
+109, 90, 41, 92,234, 8, 63,231, 76, 66,166, 6, 33,100, 18,154,144, 51, 62, 38, 34, 2,173,114,237,142, 41, 4,198, 16, 81,218,
+ 16,130,100,106, 15,163,136, 20, 95,191,121, 67, 65,209, 79,158,201, 7, 82, 77,211,212, 90,179, 63, 30,132, 84, 89,228,103,236,
+135,158,199,199, 71,241,195,143, 19,143, 15, 15,156,207,162,158,127,253,250, 21,141,115,130,133, 85, 26, 87,217, 6, 57, 39, 81,
+201,135,192,221,135,143,228, 40, 0, 26,101, 12,206, 54,140,227,184,188,238,242, 56,105,161,102,138, 37, 86, 62, 63,102,198, 70,
+ 51, 35,128,213, 69, 46,196,252, 89,180, 53, 40,168,212,162,222,105,177, 57,182,214,200, 4,164,100, 66,201,104,163,241, 83, 96,
+156,122,222,190, 62,114,236, 28, 77, 73, 28, 90,135,235, 26,206, 33,242,241, 60,113, 26, 2,157, 51, 28, 59,195,231,135,134, 87,
+157,161, 57, 88,216, 91,162,202,216,227, 30,156, 28,234, 37, 36, 84, 82,104,215,144,157, 69,187, 22,245, 56, 82, 38, 79,177,240,
+217,207,190,162,219, 31,233,253,196,135,251,143, 60,158, 7, 94,189,254,140,211,249,129,113,234,185,221, 29,177, 10,218,214,210,
+ 89,195, 87,255,236, 15,248,179, 63,251,175,252,221,215,239, 72,198,145, 88,215, 17, 10,133, 85, 2, 42, 26,199,158,198, 10, 55,
+ 95,145,234, 20, 71,147, 83,189, 31,107, 1,229, 8,195, 65, 50,216,143,214, 97,110,107,167,158,151, 52,164,188,116,108,215, 35,
+247, 31,178,174,125,234, 48,255,109,188,239,151,231,250,186, 17, 55,213,122,197, 51, 98,174,109,100,233,162, 54, 87,101,147, 54,
+183, 61,212,213,101,247,120,141, 32,223,196,182,240, 92,102,182,186, 18,127, 61, 43, 62,187, 66,130,151,237,190, 87, 93, 88, 7,
+ 95,238,246,214,221,224,162, 82,223, 36,199,173,198,188,217,158,150, 43, 20, 70, 87,175,184,220, 76,150, 3,190, 92,113,246,235,
+ 9, 39, 93,248,250,218,228, 90,121,203,248, 75,215,244, 41, 85,227, 22,205, 66, 67,147, 73,192, 54, 90,117,134,206,136,255, 26,
+181,141, 92,229, 9,115,253,114, 28,190,141, 61, 93, 27,120, 93,253,180,243,239,203,107, 59, 79, 46, 54,251,253,237,225,175, 55,
+248, 91,181,133,189,109, 8,116,198,168,245,223,205, 58, 10,183,250, 42, 93,110, 86,255,215,189,222,130,186,157,133,139, 11, 34,
+249, 50, 65, 80,166, 94, 91,248,188, 20,116,206, 25, 26,231,234,136, 25, 38, 63,200,136,214, 90,180,134,105,154,106,113,149, 22,
+213,119, 74,226, 13,150,206, 55,208, 54,142,182, 17,149, 54, 5,252, 36,225, 26, 55,199, 3, 37, 39,134, 97,141,206, 52,198,212,
+ 3, 71, 32, 42,243,190,187,105, 26, 73,124,179,178, 19,159,198, 1,103, 13,183,183,175,216,237, 59, 98,140, 28,111,110,200, 57,
+ 19, 66,170,110, 7, 85,213,208,134, 93, 21,225,181,173,227,112,220,139, 10,188, 17,155,150,208,207, 20,187,221,142,227,241,134,
+221,110, 15, 74, 66, 94,102, 17,238, 56,122,206,125, 47,159,241, 2,141,109, 80, 23,233,140,162,248,111,155, 86,186, 54, 37,150,
+168, 53, 11,157,133,172,229,125,228,225,254, 76,223,143, 40,101,216,239,247,245,121, 7,166,209, 99,180,171, 72, 93, 75, 41,178,
+123, 14,117,108,109,157,172, 7, 82,140,149, 19, 47,239,177,181,146,136, 55,231,215, 3, 12,189,231,112, 56,144, 83, 18, 22,187,
+247, 60, 86,245,182,159, 98, 77, 51,131, 20,147,116, 88, 73, 44,109,135,253, 94,242,181, 67, 64,107, 69, 63,140,244,125, 95,197,
+128, 78,214, 23,181,235, 78, 5,124,144,125,191,177, 13, 25, 69,183, 63,200, 78,187,113,248, 20,153,102, 66,158,150, 34,124, 38,
+ 47, 42,173, 25, 38,207,253,195,137, 16, 2,135,195, 13,251,253,158, 24, 37, 67,224,225,225,145,190, 31,152, 38,207,126,191, 23,
+132,173,146,132,187, 92,196, 61,176,219,117, 28, 15, 55, 88,227, 8, 62,112, 62,157,121,188, 63,241,225,253,123,238,238, 62, 94,
+120,137,103, 77, 76,240,114,232, 60,158, 30,150,213,204, 12, 53, 18,139,150, 90,114, 6,172, 49,107, 24, 86,181,168,105,205,146,
+ 78, 89,102, 96, 81,101, 88,232,197,125, 35,182, 54,165, 21,206, 24,156,179,236, 58, 1,226,236, 14, 71,166,113,196, 86,171,156,
+ 86,133,183, 55, 7,194,249, 68, 83,215,147, 33, 23, 18,134,211, 20,249,120, 58,113,188, 61,112,219, 56, 94, 41,248,236,246,128,
+109, 44, 52, 26,117,219, 81, 28, 20, 83, 27,162,202,144, 80, 90,161,246, 13,170,113, 48, 78,232, 2,166,179,216,155,134,230,102,
+199, 77,219,113,243,246, 11, 62,244, 61,127,245,223,254,158, 80, 44,223,220,157,184,191, 63, 81,148, 65, 55,150,125,119, 68,187,
+142, 63,255,139,191,225,251,187, 51, 62,105,114,166,174, 75,100, 13,148, 75, 70,149, 66,231, 12,134, 66,137,190,210,232, 68, 44,
+ 57, 59,175,140,177,216,122, 46, 89, 52,182,100,246,157,198,188,218,221,252, 9,115,112,199, 6,169, 49,143, 26,159,163,185,205,
+225, 13,191,205, 56,253, 31,123,160,207,199,159,222,236,212,215,120, 53,117,129, 19, 65, 93, 11,214,158, 63,212, 85, 89,177,161,
+234, 9, 23,125, 21,215, 45,118,174,107,188,201,213,161,190,141,148, 84,219,159,245, 74,181,127,121, 88,191,176,147,191,120,205,
+202, 5, 80,101, 62,208,215,152,215,122,248,232, 89,137, 94, 42, 65, 76,215,174,186,118,236, 70,173, 91,132, 43,112,158, 90,236,
+114,235, 19,157,181, 21,165, 40, 74,174,106,114, 53,135, 90,216, 69,225,186, 38,160,205,163,236,170,126,223,166, 44, 93, 28,212,
+106, 1,223,204,239,203, 74,146, 85, 11,188, 71,171,203, 1,197,122, 29,232,139, 29,250, 76, 19,222,166,179,173, 20, 56, 22, 50,
+219,130,145,213,235,122, 96, 46,116,180, 97, 1,233,232,205,120, 93,235,235,218,177,108, 70,252,108, 62, 43,107,224,239,242, 94,
+204,207, 69,235, 37,231, 94,215,149,132, 28,232, 85,213, 93, 34, 49,250,154,250, 53,167,223, 41,218,182,145, 81,112,215,161,173,
+ 89,212,197, 90, 27, 17,162, 41, 69,215, 9, 24,132, 82,100,114, 82, 5,128,119,119,119,244,231,126, 9,237,240, 33,224,189, 39,
+198,180,236,203,231, 3,125,191,219, 17, 99, 88,210,199,130, 15, 28,143, 71,154, 70,252,207, 50,174, 79,220, 63, 60, 18,188, 64,
+ 69, 26,103,177,198,210,117, 13,206, 25,110,142, 7,186,174,165,148, 36, 7, 55,138,113, 24,121,120, 60,209, 52, 50, 61,138, 49,
+ 50,142, 3,195, 40,221,112,227, 28,231,211, 64,204,137,156,193,104, 91,119, 89, 50, 37,107, 90,241, 79,107,168,163,219, 34,118,
+190, 20, 73,121,206,110,144,252,110, 17,126, 69,166, 49, 46,176,149,249, 87,138, 73, 56,222,218, 72, 96, 85,174, 90,145, 34, 34,
+210, 16,227,130,115,238,186,150,227,113, 95, 35, 90,195, 18, 89,219, 84, 39, 64, 41,153,182,105, 9, 33,240,248,248,200,208, 15,
+248, 81, 0, 62, 90,233,139,105,133,115, 78,132, 79,133,138,115,221,161, 80,180, 53, 69, 77,107, 77,211, 10,204,198, 90,135,247,
+ 81,148,224, 81,108,141,177, 64,209,166, 42, 85, 52, 83,202, 76, 33, 98,156,227,254,241, 68,136,162,189,152,175,175, 25,242, 51,
+ 7, 47,165, 10,139,138, 41,115,255,240, 72, 63, 72, 81,145,179,226,241,116, 98, 28, 38,134, 97,228,225,225,196,227,227,169, 94,
+ 95,117, 42,166,101,226,113, 58,157,185,187,251,200,195,131, 68,189, 78,163, 95,210,217,250,190,151, 41,130,143, 2,183,105, 58,
+140,117,149,248,102,128,194, 52,141,196, 24, 64,137,186, 62,165,188, 52, 33, 51,221,112,254, 12, 45,246, 67,181,213,184,232,170,
+209,145,102,110,166, 5,106,107,176, 86,116, 25,214,104,156,214, 56, 43, 12, 13,231,154,138, 39, 87,164, 24,216,187, 6,134, 1,
+ 83, 50,251,227, 1,215,118,148,162, 24,167,192, 67,223, 83,180,230,160, 20, 95, 28,118, 28, 91,139,107, 44,133,128,121,115, 64,
+237,156,184,119,140,145, 69, 64, 18, 86,189,234, 44, 41, 6, 24, 39,166,115,207,112, 26,235, 53, 25, 41, 5,236,237, 13, 95,254,
+206,207,121,123,188,225,227,247, 31,185,125,245, 25, 62,203, 4,225, 31,190,253, 7, 62,255,236,115,222,254,252, 23,252,249,159,
+253, 5,223,189, 63,145,104,100,185, 88,215,158,170, 78, 67, 32, 99,107,154,219,174,107, 41, 41,139,210,189,226,149, 41,178,154,
+ 82, 37,227,148,162, 81,138,189,211,116, 45, 88,181,193,116, 62, 57,188,231, 44,232,151, 96, 48,155,223, 95,130,212,252,216, 95,
+ 23,169,106,139,240,165,242,197,175,188,216, 23,132,182,205, 65, 89,126, 76,161, 80, 20, 27, 68,203, 26,200,169,158,238, 72, 5,
+128, 82, 86,252,108, 41, 79,245,214,243, 88,117, 51, 54, 98,155, 73,126,157, 22,183,242, 89,158, 16,201, 46,133, 93,149,118, 94,
+ 54,250, 47,182, 99,234,117,102,175, 54,252,114,165, 46,103, 16,179, 29, 76, 47, 60,124,245,140,118,111,142,204, 85,172, 3, 1,
+181,116,137,203, 65,170,159, 25,155,207,153,229,136,160,103,193,240,206,251,120,181,114,239,175, 49,169, 79, 70,215, 75, 80, 79,
+126,130,111,153, 15, 76, 93, 54,186, 65,117, 57,149, 41, 90,173, 65, 56, 51, 61,112, 51,238,223, 58, 32,180, 42,151, 42,249, 37,
+234,145,139,194,236,122,197,180,101, 51,108, 61,242,115,129, 85, 42, 7,127,203,188,223,174, 85,172, 86, 56,171,137,209,147,210,
+ 36,164, 56,171,151,245,128, 54,178,163,206, 69, 14,164,148,179,168,244,141,140,141,189, 15, 53,200, 1, 66, 10,210,165,207, 59,
+235,152,200,213,245,224, 67,192, 7, 17, 45, 57,103,233,186,142,251,251,123,246,251, 61,227, 56,114, 83, 59,112, 17,173,137,165,
+ 75, 27, 69,136, 83, 13, 59,145, 27,246,227,233, 68, 72, 17,141,162,107, 91,198,113,164,235, 58,118,123,217,245,229,156,240,163,
+ 40,220,219, 22, 26,231,216,237,218,154, 5, 31,176, 70,124,180,129,194,110, 39, 36,172, 97,232,229, 80, 77, 17,109, 29,198, 58,
+198,126, 16,160, 76, 81,152, 49, 8,148, 38,142,144,133, 39, 30,125,164,105,180,216,157,172,227,254,116,194, 24, 43,135, 71,202,
+180,237, 14,165,202, 18,214,226,125,172, 7,186,173, 41, 96, 25,215, 56, 57,244,146,168,225,149, 22,235,155,177,142,195,174,197,
+ 90,195,110,231, 8,113,183, 81, 23,139, 2, 30,160, 31,250,138,193,157,243, 27, 50,206,137,231,123,118, 12, 88,107,185,191,191,
+167,105,154,154, 53,239,152,166,137,143,119,247,149,239,126,100,119,216,163,141,229,120,211,144,179, 34,164, 15,100, 5,182,131,
+148, 64, 39, 42, 45,172, 16, 98,194,181,142,152, 19, 15,143,143,203,154,108, 9,234,217, 88, 17,149, 50,213, 34,105,107, 23, 45,
+248,219, 97, 60,243,205,183,239,104, 92,195,103,159,125,193, 52,142, 76,147,248,235,173,109, 46, 44,173,195,105,168, 43,143, 84,
+117, 51, 34,202, 3, 73, 31, 67,101,180, 81,248, 32,215,132,247, 31,177, 90,112,212, 82,208, 8, 92,198, 58, 71, 8, 19, 57, 21,
+166,232,101, 61, 84,215,118,169, 54,132,186,226,131, 19,153, 68,169, 96,169,202,213,152,133,202,133, 26, 65,108,200, 20,114, 20,
+252,108,219,182,132,224, 9, 26, 89,109, 20, 97,174, 43,235, 56, 13,103,154,146,153,146,176,220,199, 80,184, 63, 13,236, 19, 88,
+211,136, 2,253,230,192,189,247, 60,146,241,250, 13,131, 79,236,250, 9, 93, 20,140, 19,234,112, 35,122, 27,173, 32, 74, 86, 4,
+ 70, 83,180,194,164, 2,214,145, 12,156,206, 3,175,143, 71,178,109, 57,223, 61,240,250,245,231, 88, 11,191,248,234,192, 91,245,
+187,124,253,238,129, 59,123,131,206,145,183, 55, 95,161, 75, 18,212,172, 85, 4, 85, 8, 90,111,196,145, 70, 92, 9, 57,209, 89,
+ 69,200, 89, 86, 54, 69, 87,177,167,102,244,129,157,179, 53,154, 44, 11, 76,199,168,186, 87,215,236,247, 26,243,170,187,249,147,
+ 57, 6, 49,151, 66,170,253,189,236, 12,121,150, 4,119,221,161,111,199,244, 47,169,228, 63, 53,126, 95, 32, 38, 92,178,184,149,
+210, 23,221,249,245,212,118, 78, 81, 43,106, 37,185, 61,221,109,110, 51,186,107,144,203,149, 80,238,170,151,191,128,195, 92,140,
+ 80, 23, 49,219,165,101, 73,215, 80,155,101,168,127,245, 60, 84, 93, 27, 44,187,251,133,185,174,127, 64,123, 80,150, 83,109, 57,
+ 84,212, 58, 90, 86,250, 82, 91, 48, 87,186,198,152,165, 19,181,230,234, 96,185,178,179,233,165,152,201,107, 22, 90,237,106,164,
+187, 41,228, 74,233,210,198, 96,172, 69, 27,189,100,115, 11,196, 69,100,122,186, 84, 5,252,252, 24,122, 29, 85,232,250, 51, 63,
+ 63,145, 88,119,250, 90,171,139, 53,138,210,106,225,149, 95,184, 49,182,162,181,141,114,222,108, 52, 9,107,247,205, 70,104, 39,
+221,185,217, 40,207,151,176,153,141, 3,253, 58, 45,240, 34,127,252,201,245, 92, 3, 23,106, 80,139,160, 53,245, 42,226, 82, 34,
+124, 35, 39, 92, 99,104,172, 34, 39, 79,183,107, 49, 70,178,170,115,201, 18,141, 83, 69, 63,169,142, 75,181,118,164, 44,126,225,
+243, 73, 58, 38,239, 87, 22,248, 52,200,222, 60,231,130,143,226,251,213, 53,103, 61, 23, 48,218,144,114,225,253,251,247, 85,188,
+ 5,135,195, 1,133, 34,229, 40, 66, 47, 5, 31, 63,222,209,117,173,252, 55,165, 43,158,118,146,195,163,222,176,253, 52,209,117,
+ 45,166, 42,188,231,195, 77, 16,176,194, 31,159,233, 98,109,235,150,152,207, 92,181, 0, 41, 71, 66, 12, 75, 53, 61,239,179,251,
+ 65, 24,227,251, 93,135,169, 89,240, 57, 9,142, 54,120, 9,243,152,225, 88, 33, 68,206,125, 68,105,199,185, 31, 42,107, 93,213,
+209,191, 35,165,192,228, 39, 10,194,214,119,213,130, 69,197, 31, 59,215,224, 99,148,171,189,102,210, 7, 95, 1, 57, 70, 40,110,
+143,167, 19, 74,107, 66, 8,140,227,176, 52, 45,214, 89,130, 23, 58,159,228,149, 55,116,109, 43,175, 83, 77,155, 27,134, 1,165,
+ 52,227, 56,242,120, 58,241,248, 40,123,246, 67,221, 99,159, 78, 61, 15, 15, 39,137,101,173,239,149,107, 27, 92, 99, 69, 3, 17,
+ 60,227,228, 47,156,171, 57,215,105, 67,146, 49,117,235, 28, 41,198,139,201,145,170,150,178,146,197, 63, 46, 59,218, 76, 8,178,
+202, 49,218,138,197,174,239, 9, 49,210,184,202,230, 79, 25,239, 3, 67, 63, 48,140,131,216,219, 98,174,147,185,186,112, 44,146,
+218,166, 20, 52,173,165,109,218, 69, 88, 61,223, 87, 98, 76,114, 13,250,137, 16,197, 50,105,106,174,128, 91, 48,188,185,134, 56,
+173, 57, 9,165, 22,220,206,217,186, 10, 18, 22,127, 74,113, 65, 72,155,154,226,167,181, 2, 45, 93,175,136,229,138,236,213,155,
+ 6,109,100, 55,239, 92,195,224, 61,138, 66,163, 53, 13, 10, 91, 93, 17,227, 56,160,208, 68, 10, 89, 43,122, 31, 72, 33,112,115,
+179,231,208, 26, 14, 10,116,244,160, 51,180, 22, 58, 39,251,126,159, 33, 70, 74,103, 41,173, 67,133, 12,253, 64,251,234, 21,199,
+175,126, 78,110, 29,231,251, 15, 28,154, 14,101, 32,235,128, 13, 35, 77, 10,168,146,217,237, 26,110,119,142,195,161, 99, 26, 78,
+124,254,179,159,242,248,208,243,215,191,252, 13,185,180,245,231, 88,245, 20,101,158, 10, 22,225, 19,104, 37,141, 64,206, 51, 54,
+ 87, 85, 37,124,161,181, 26, 91, 18,157, 51, 52, 22,142,175, 59, 57,212,231,209,187,248, 22,211,133, 16, 72, 95, 5,163, 92,119,
+233,191, 45, 39,254, 69,202, 92, 29, 29,207, 98,168, 37, 61,108,163, 14,159,161, 20,207,133,160, 60,253,190,234,226,240, 85,215,
+155,244, 13,158,244,165, 67, 93,177,181,146,233, 11,180,233, 83,133,245,229,115,152, 21,249,203,115, 47,229, 66, 68, 53,171,184,
+159, 35,221, 61,245, 58,115,217, 29,206, 66, 50,165,159,245,219,219, 90,189, 74, 14,180, 90,246,235,219, 67,105, 43, 54,220, 70,
+135,150, 82,106, 37, 61, 23, 74,106,201,111,118,206,173,150, 47,189,238,247,213,146,215, 94, 69, 48,122,173, 94,148,210,152,202,
+ 62,254, 49,215,195, 53, 25, 80,113, 53,198, 87,215, 59,248,245,128,191,220,155,175,138,255, 85,249,191,238,212,175,119,248,122,
+ 91,148, 94, 23, 87,240, 36,164,103, 59, 42,216,254,189, 45,215,156, 58,169, 81, 37,211, 56, 35, 35,245, 70,186, 25,215,200, 1,
+162,141, 33,166, 64,136, 94,118,192,149,171, 61,122,177,142,133, 24, 25,199, 73, 82,198, 98, 90,146,212,230,231, 26, 83, 66,105,
+217,199, 9,172, 67, 70,145,195, 48, 10,119,101,222,167, 87, 44,232, 56, 78,242, 89,175,187,226,253,126, 39,252,242,174, 91,236,
+103,214,186,101, 34,161,181, 0, 70, 20,138,253,254, 80, 51,211,103,203,148,116, 92,177,134,115,196, 24,241,222,211,117,157,208,
+195,144, 96,151,243,249,188, 68,181, 90, 39,194, 60,141,161,237, 58,252, 36, 59,230,182,254,121,172, 33, 44, 69,149,101, 42, 16,
+ 98,169,234,230,136,228,228,153,250, 90,136,130, 61,215,241,146,143,190, 10,232, 74,245,203, 75, 65, 36,215,181, 98, 10,145,172,
+ 20,177,250,178, 75,129, 20,243,130, 50, 45, 20, 78,231, 51,160,153, 38,143, 49,110,241,199,135, 16, 56,236, 15,116,221,142,182,
+109,150,207,164,247,161,186, 0, 84, 21,131,213, 61,250, 84, 85,250,141, 40,182, 83, 29,173,167, 92,152,188,160, 63, 39, 31,249,
+238,251,239, 9, 33,209,117, 29,135,195,129, 16, 60, 74,201,154, 96,153,238, 88,205,174,109,201, 41, 46,129, 81,135,253, 78, 98,
+101, 85, 97, 43, 5, 94, 20,252, 37, 97,181,174,235, 25, 9, 21,153, 87,166, 49,134,154,179, 30,150,208,155, 92,197,176,198, 26,
+246,187,142,253,161, 99, 95, 25,255,135,195, 78,130,102,118, 2, 29,210, 74,213,128,145,203,251,198,226,236,168, 19,191, 89,127,
+146,147,100,206,207,159,237,153,130,166,107,128, 81,170, 4, 65, 93,212, 98,111,211,245, 90, 22,203,160, 56, 31,140,209, 88,103,
+234,218, 65,209,118, 13, 49, 78,236,246,187, 26,204, 83, 73,146, 70,244, 69,199,166,197, 2,113,154,208,149,231,223,116, 45, 41,
+103, 78,195,128,105, 58, 41, 0, 99,224, 39,175,110,184,177,134, 28, 6,178,202,168,125,135,126,115, 11, 70,147,207, 35, 37, 36,
+104, 27,138, 1, 19, 10,241,254,145,164,193,190, 62, 98,142,123,204, 52, 50,188,127, 79,163, 51,198, 89,194,253, 9,211, 29, 68,
+167, 98, 50, 55,135, 29, 74, 23,126,250,213, 87,164, 18, 81, 89,241, 55,191,252, 53, 37,202, 57, 97, 22,204, 87,169,175, 91, 94,
+214,145, 70,203, 1, 47,241,196, 10,149, 51,173,179,180, 86, 97, 74,164, 53, 10, 75,225,246,102, 71,123,219, 98,222,180, 55,127,
+146,159, 57,212, 37,140,254,249,180,179,114,213,193,252, 54,123,245, 39,228,184,178, 94,148,210,105,234, 11,164,167, 46,171, 50,
+125,126,142, 79, 8, 47, 47, 21, 20,170, 92, 30,234, 75, 55, 86,227, 76,231, 84,174,107,218, 89,125,220,139,113,184, 18,162, 28,
+151,176,185,167,197,192, 85, 55,247, 36,217,174, 42,242,117, 37, 79,149,141,229,233, 73,183,174,120,146, 91,190,116,199,155,160,
+148,203,125,191,194,104,196, 10,100,165, 99, 55,198, 60, 1,164, 92, 68,210, 46,151,211,154, 15,158,106,220,234, 60,169,208,117,
+159,110,230, 20,177,249, 3, 90,132, 2,165, 41,213, 87,187, 5,217, 92,189,174,207,253,140,219,235,162,182,215,121,187,242,216,
+140,201,231,202,110, 45, 34, 55, 34, 56,189, 25,175, 95, 0,104,182,250,138,167,133,128,122,166,184,120, 17,180,116,193, 19, 80,
+151,137,108,218, 96,140,173,227,208,202, 9,200, 66, 98, 91,133,121, 5,165, 51,214,130,181,178,222,144,157,247, 72,136,113, 19,
+188,146,165,123,179, 77,141,208, 21,129,208, 44, 98,114, 78, 2, 84,246,135,189,236,102,219,134,182,109,176,214,212,215,111, 14,
+255,144,204,244,162,192,181, 13,135,227,129, 24, 98, 45,206, 12,135,195, 65,162, 81,181,194, 56, 91,211,179, 4, 16,114, 62,159,
+235, 94, 52, 74,151, 70, 61, 32,140,174,193, 40,138,105,156,232,207, 3, 49, 36, 26,215, 46,121,220,125,223,163,148,226,230, 70,
+ 48,179, 77,211,224, 39,191, 22,104, 5,188, 15,149, 35,110,121,253,250, 86, 10,148,224, 49,214,210, 29, 36, 52, 69, 88,237,162,
+178,119, 77, 75,204,101,153, 38,230, 34,254,108, 41, 62,164,131,159,133, 91, 37,139, 66,126, 28,125,157,178, 25,124, 72, 76, 62,
+138, 55, 29, 33,148,133,154,181, 30,171, 66, 31, 37,132, 55,109,106,177, 21, 35,211, 20, 36, 16, 37, 43,206,253,192, 56,120, 57,
+ 84,114, 33,166, 34,163,238,170, 62, 79, 25, 38, 47, 99,240,219,219, 87,116,221, 94,136,115,122,125, 60,215,182, 52,237,142,113,
+154, 64, 25, 14,135, 35, 57, 37,250,126, 64,107,195,205,205, 17,103, 43, 22, 20, 85,105,128,105,177,248,205,169,126, 50, 2,247,
+181, 88,149, 14,117, 22, 34,230, 34,235,134, 84,164,120,137, 81,108,103, 50,197, 19,187,107, 8,126,129, 26, 45,247, 32, 10,214,
+106,246,251,150,227,113,199,126,223,210,117, 14, 99, 1,189,138,216,134,254, 44, 41, 98, 27,171,166, 28,230,186,194, 98,242,133,
+192, 84, 38, 44,242,120,166,146,236, 74, 46, 75,162, 91,166, 84, 22,124,193, 32, 90,129, 82, 39,160,141, 21,202,158,171,226,220,
+162,114,157,194,236,234, 89,149,232, 90, 87, 93, 22,165, 22,117,243,100,174,208, 90, 3,222, 67,141,163, 53,187, 6,229, 12,193,
+ 7,116,179,227, 60,156, 49, 37,243,229,235, 91,110, 15, 13,205,206, 18, 74,196, 30,111, 80,199, 61, 89, 41,138, 15, 98,227, 53,
+ 26,237, 44,106,138,224, 19, 33,121,148,203,232, 24,136,239, 78,164, 62,114,255,221, 7,226, 24,249,240,238, 61,195,253, 29,199,
+157,163,140, 19,141,113,194,251, 87,144,187,134,221,241, 21,223,125,247,129,119,239, 62,138, 11, 67,203,170,121, 78, 53,157, 9,
+129,148, 66,227, 26, 74,150,201, 5, 73,174,139, 93,211,208,104,133, 45,137,189, 49,116,141,230,230,213, 30,123,179, 19,161, 92,
+126,177, 83,231, 98, 7,251,220,193, 61, 31, 16, 63, 20,216,178,237, 72,175,199,247,139,184,105, 73, 57,231,217, 27,233,156, 41,
+190,165,137, 94,239,137, 47, 29,238,101, 85,208,215,199, 52,219, 3,108, 75,135,187, 62,212,151,128,150, 45,120,164, 92,116,249,
+148,167,126,252,173, 71,121,249,179, 77, 1, 83,170,194,115,217, 95,111, 10,163,235,206, 61,215,178, 99,209, 24,168,213,231, 60,
+ 31, 30,235, 96,121,221,175,201,216, 93, 87, 1, 84,157, 26, 92, 31,162,155, 98,170, 92, 29,186,243,152, 71, 70,240, 53,239, 88,
+155, 69, 28,183,116,233, 84, 69,116,145,204,103, 85, 15, 32,205, 38,107,124, 89,127,232, 85,222, 55, 79, 24,174,117, 20,243, 71,
+113,179,131, 95, 21,243,179, 24,109,142, 69, 45, 27, 49,231,165, 48, 82, 61,243,243,110, 11, 26,253, 66, 17,165,231, 53,137,250,
+ 68,161,120, 85, 64,113, 69, 25,180,198, 8,192, 98,246,208, 87,102,187,117, 85,192,104, 68,253, 14, 18, 45,185,172,141,244, 58,
+170,220, 31, 14,104, 37,156,239,174,181, 52,173,227,246,230,166,166,127, 73,124,102,223,159, 5,191, 26, 60,125, 63,112,238,207,
+ 76,126,146,110,177,190, 71,243,232,184,105, 90,154,122,200, 53,173,140, 78, 99,148, 14,173,235, 90,154,182,173,108,242, 82, 69,
+100,210,221,107,173,107, 87, 42,104,209, 89, 55,144, 82,102, 28, 5,253, 57,142,158,161,159,136, 49, 45, 49,154,165,228,202,243,
+150,164, 52, 10, 11,155, 93, 56,227, 73,152,224,109,199, 48, 78, 76,211,136, 51,134, 55,111,110, 65, 67,168,121,221, 77,215, 50,
+133, 64,136, 34,130,219, 29,246,196,156, 80,100,114,142,213,253,160, 73,169, 84, 15,119, 17,118,124, 81,156,251,145,156, 11,147,
+143,140, 99,144, 93,122, 17,216,138, 79,169,238,214,133,106, 55, 39, 18,230,146,197,250, 85,215, 31, 41,102, 33,213, 41,195, 56,
+ 6,140,182,178,250,240, 82,120,229, 12, 62, 70, 98,146,226,108, 78,122, 68, 25, 30, 78,103, 17,165, 77, 94, 60,243, 49, 50,249,
+ 68,223,143, 82, 28,140,137, 41, 68,250,243, 64,138, 98, 95, 27,199,137,243,233, 76,140, 17,163, 69, 80, 41,207, 45,161, 20,248,
+ 16,228, 51,175, 21, 33,198,197, 34, 82, 80,132,121,250, 64, 17, 46,251, 44,120, 69,214, 48,170,142,203,115,145,112,156, 21, 32,
+181, 5, 88,231, 37,201,177,105, 13,198, 66,209, 25,138,188,230,193, 7,226, 20,136,163, 71,171, 82,109,102,117, 51,153, 87,107,
+141,222,102, 74,104, 85, 71,231, 50,225, 43, 57,227, 22, 2,157,240, 49,172,179,148, 20, 5, 42,163,205, 82, 20, 24, 45, 96,159,
+ 57,184,170,212, 52, 72, 81,210,154, 90, 32, 11,187,160,164,121,237, 80, 73,124,245,177, 72,153, 86,195,109,219,162,141,194, 52,
+ 86, 18,251, 92, 75, 49,150,135,243,137,226, 3, 71,103,249,217,207,126,130,109, 53, 73, 23,236,241,128,186,217,161,172, 70,197,
+132, 74,194, 46, 80,214,194, 48,202,218,164,235,200, 62, 49,254,250, 14, 23, 12,251,195,158, 99,103,216,189,126,195,190, 61,208,
+ 24, 75,158, 38, 60, 82,196, 78,185,240,112,122,228,230,243,207, 48, 62, 50, 60, 78,220,127,255,145,156,164,137,154,207,178, 42,
+ 87, 94,180, 73,206, 90, 97,169, 20,133, 42, 26,163,140,236,208,141,166,211, 26,167, 11,199, 93,203,237,235, 35,246,237, 45,230,
+166, 30,234, 89,201,226,189, 84, 1,134,136,159,234, 78, 69, 61,127, 72, 95,119,128,159,234,214, 95,252,243,138, 8, 44,232,101,
+191,114,193,209, 86,155, 36, 54,189,241,125,235,167,120, 85,197,202, 27,159, 5,113,101,203, 61, 47,101, 1,197,204,182,128, 25,
+ 81,120, 17, 68,162,228,176, 76, 64, 94,118,223,171,209, 90,179,121,109, 94,250,249,180, 92,132,133,117, 6, 63,139,168,180,214,
+ 23,136, 84,165, 85, 21,121,137,114, 83, 40,107, 84,236,234,218,157,207, 7,215, 60,150, 42, 40,138, 22, 22,250, 44,158,171,214,
+229, 26,219,201,242, 97, 82,245,131,118,145, 54, 55, 31,228, 70, 93, 76, 78,114,205,158,206, 40,178, 82, 53, 76, 68,196, 42,182,
+170,215,101,247,147, 81, 89, 32, 9,115, 55,170,180, 17, 70,242,147,235, 98,253, 95, 81,101,131,143,189, 20,167, 73, 72, 78,157,
+ 68,232,109,232,139,140,240,205, 60,109, 41,219,221,156,216, 61,182, 96, 26,181, 73,126, 83, 79,200,188,207,117,230,242, 26, 23,
+ 85,138,204,234,114, 0, 0, 32, 0, 73, 68, 65, 84,126,128,247,187, 41, 26, 75, 90,181, 31,243,104,191,138, 87,114, 73,242,238,
+107, 9,164, 72, 37,147,138,216,156, 36,160, 37,215,226, 67, 87,245,187, 19,255,173,181,149,174, 37, 97, 30,243,170,101, 24, 7,
+252, 36, 42,246,126,156,228, 70, 30, 18, 49, 72,247,227, 42,124,197, 24,179, 80,212,110,110,110,232, 58,129,169,164, 40,140,237,
+155,227, 1, 85,217,232,159,189,126, 69,219, 24,156,209,146,211, 29, 34, 86, 91,250,115,191, 40,180, 37, 29,203,212,253,190,197,
+ 88,199,228, 3,198,184,218, 8,100,172,213, 52,141,149, 48,148,166,145,164, 40, 99, 24,135,158,225,124,166, 84, 15,115,138,185,
+118,180, 18, 21,154,146, 80,199, 74,150,235,200,106, 69,211,218,197,106,216, 52,173,228,103, 27,131,177,154,148, 19,141,115,144,
+ 11,141,109, 72, 94, 32, 38,171, 88,181,160,172,194, 54, 45, 57,105,124, 44,132, 8, 33, 21,178, 82, 76, 41,136,248, 65,205,140,
+125,153,104,148,106,163, 8, 57, 19,115, 65, 91, 71,240,145,146,196, 54, 52,147,232, 6, 31, 64, 25, 98, 86,196, 34, 33, 79,169,
+234, 9,132, 1, 47,107,129,126,152,240, 21,251,169,138,163,100,141, 15,121, 17,233, 57, 39, 83, 21,173,132,241, 30,115,193, 53,
+109,181,125,201,254,223,123, 25,255,135, 16, 32,231,106, 59,213,132,152,201, 74, 30, 55,103, 49,173,151, 84,214,228,200, 44,175,
+181,224, 70,244, 34, 56, 46, 74, 58, 98,173, 65,151, 76,215,200, 4, 73, 96, 38, 85,227,160,213, 66,169,116, 21, 47, 44,186, 38,
+ 75,201,154, 48, 38,226, 20,200, 81,118,252,186,118,217,185,172, 20,199, 25,224,100,230,241,186,210, 23,214,208,162,144,196, 62,
+ 61,143,231, 37,124, 74, 33, 12,140, 57,154, 85, 24,246, 9, 55, 83, 4,141, 90, 44,142, 50, 21, 83, 34, 40,115, 29,170, 24, 82,
+ 82,160,106,144,143,134,144, 35,218, 88,200,137,125,235,184,185,217, 97, 45,148, 52,209, 26, 3, 41,211,180,142, 97,154, 24, 42,
+ 54,247,167, 63,249,140,253,222, 98, 27, 67, 49, 26,181,235,192,106,212, 56, 18,199,158, 96, 18,166, 20,244,144, 40, 41,147,209,
+ 24,221,226,239,123,250,247, 31, 8,231, 7, 78,195,137, 98,246,196,104,240, 65,244, 29,239,223,125,224,179,159,254, 19,138,210,
+188,127,255,145,215, 55,111,216,237,110, 80, 5,190,253,254, 93, 69,246,218, 74,242,148,243, 96,193,239, 34, 46, 38, 87, 68, 48,
+139,113,149,168, 87,216, 91,205,206,193,126,215,210,118, 13,221,109,135,121,211, 98,203, 51,123,233,139, 17,249, 11,135,250,167,
+ 40,114,191,205, 47,181,177,111, 21,202, 51, 7,207, 70,112, 85,244,197, 78,255,186, 83, 42, 27, 50, 27,155, 61,252, 26,242,241,
+242,227,151,109,112,203,140, 74, 93,106,166, 21, 83,251,132, 19,255, 2,111,126, 22,255,189, 24,128, 83,174,204,123,101,149,170,
+173,216,115,189,146,201,212,170,215,151,238, 65, 45, 41, 95,243,115,212,117,132, 80,204,182,224,185, 28, 19,171,151, 8,182, 87,
+170,255,101,204,175, 36, 4, 67,207, 5, 28, 79, 35,106,103,118,247,162,122, 71, 61,203,228, 95, 35, 88,103, 27,203,117,200,203,
+106, 15, 43, 85,176,247,132,173, 95, 46,167, 10, 79,186,241,103, 98,120, 23,197,218, 15,224,140,215,199, 82, 79,156, 9,207, 93,
+215,107,113,182, 78, 21,114,201, 21,214, 83, 81,159,117,135, 63,231, 29,139, 13,141, 42, 8,139, 50,134, 52,114, 3, 16,229,182,
+164, 94,229, 82,240,126, 68,149, 76, 44,165,238,134,165,104,105,156,100, 47,151,250,193,223,215, 61,161, 50,102,141, 98,172,251,
+202,125,215,209,117,187, 69,193, 29, 98,160,219, 53, 18,197,217,117, 76,211,200,135,239,223,211,238,246, 28,142, 71, 82,200, 75,
+216,135,107, 26,166, 48, 49,249,169, 22,124,137,199,199, 51, 41, 38, 92,237, 34,231, 81, 60, 20,148, 83,228, 16, 32, 67,235, 12,
+122,223, 85,224, 75,237, 18,171, 79, 89,198,203, 48, 77,254, 34, 21,240,124,238, 49, 83,157,232,104,133, 31, 83, 61,232, 2,201,
+104,172, 81, 76, 41,211, 53,173,136, 47,231,238,111,214,147,106, 43,138,122, 83, 8, 41, 46,190,250,153,104,102,141,161,237, 90,
+166, 81,188,253, 86, 87, 17, 86, 20, 15, 50, 89,138, 87,103, 12, 89, 73, 17, 49, 77,126, 21,229, 42,141, 79,113, 89, 89,204, 2,
+199, 83,223, 11, 96,199, 53, 40,180,248,219,139,100, 93, 83,132,187,174,150, 60, 6,153,102, 72,225,149,105,186,134, 92,167,144,
+ 51,135, 62, 23,121, 30,227, 40,145,171,183, 55, 29,206, 54,156, 7, 79,202, 2, 89, 41, 27, 47,199,214, 74, 89, 18,149, 3,190,
+138,132,103,205,140, 76,142,228, 30,123,216,237, 32, 39, 70, 99,170, 95, 63,161,138, 94, 92, 1, 33,100, 98,144,209,102,137,153,
+161,159, 72,147,167, 68, 25,115,147,133, 25,143, 46,139, 96,174,222,132,182, 70,150,229,121,204, 34, 57, 99,182,246, 45,181,224,
+173,141,117,171,117, 86, 67,174, 65, 57, 41,229,170, 13,168,187,114,161, 97,213,206,124, 14, 63,210, 24,109, 37,145,210, 32,218,
+131,106,235,157,123,222,164, 20, 93,211, 50,158, 39,206,131, 7, 20,111,111, 95,241,230,230, 13,167, 62,208,135,192,187,199, 7,
+190,252,217,207,200, 12,164, 70, 67,137,232, 32,105,104,212,213,137,138, 25, 6,113,149,168, 61,128,135,161,103,154, 60,185,235,
+120,243,243,223,225,227,253, 68, 76,154,251,247, 35,253,249,145, 98, 44, 95,191,127,228,225,161,199,154,134,239,190,253,134,159,
+124,145, 72,105,228, 39, 95,188,229,241,148, 57,245, 3, 90, 25, 73, 12, 84, 10,165, 45, 62, 38, 58,215, 48,250, 68,215,216,138,
+216, 46,180,173, 35, 17,137,206, 16,116, 70, 91,139,107, 59,112, 14,186,221, 85,158,250, 70,205,254,169, 60,149, 31, 19,230,242,
+143,181,181, 61, 21,142,109, 66,102,174,111,172,121, 69,155,206,187,241,114, 97,111, 43, 75, 98, 25, 87,105,172,101, 91, 9,160,
+158, 36,169,101,158,210,242, 74, 77, 33,123, 78, 52,248, 68, 47,176,148, 6,219, 31,112, 30,121,233, 11,210,157,218,164,180,205,
+232,215,235,252,117,181, 25,215,207,175, 73,121, 98,195,155,131, 80, 54,238,129, 79,228,211,207,175,233,181,109,177,108,128,235,
+114,208,233, 75,252,234,102,116,174, 55,190,240, 11,139,221, 51, 12,131,114, 21,186,162,175, 61,251,155, 46,187,108, 66,216, 46,
+ 53, 6,249, 9,180, 70,158,103,185, 44,238, 54,158,195, 89, 57,189,142,242,205,197,245,165,102,138,224,246, 11, 85,185,120,189,
+159,123, 29,103,164,238,172,218,159,199,250, 70, 43,154,198,162,102,255, 93, 29,237,151,154,239, 93,114, 1,181,238, 29,199, 25,
+154, 81, 59,191, 89,113, 14,144,131,216,175,180, 49,130,115,109, 59,172,117,156, 31, 79,168,182,161,115,142,156, 34,197, 90,178,
+ 86,132,202, 54, 87,200,141, 55,120,129,175,204,147, 22, 9,212,144,197,206,227,233,145,146,197,195,155, 42,192, 69,172,113,242,
+248,143,143,143, 53, 39, 93,196,121, 41, 72, 38,186,146,187, 41, 26,240,125, 79,211, 56,246, 21, 13, 91,178, 40,159, 75,142,117,
+ 71,107,101,167,171,138,132, 84, 88, 73, 50, 27, 39,241,222,155, 58,138, 85,181, 75,179, 56, 82,150,209,119, 12,145,166, 17,229,
+ 52, 26,176,122,225,255, 43,165,112, 78,166,101, 57, 23,148, 49,130, 73, 85, 18, 37, 90, 74,228,112, 56,146,146, 4,181,248,152,
+ 49,198,226,199, 17,146, 20, 92, 74,107, 74, 20, 65, 89, 1, 26,107, 73, 57, 51, 85, 50,156, 36,164, 21,180,113,164, 34, 34, 70,
+ 99,215,195, 52, 4, 33,181,105, 45, 76,238, 16, 2,214, 56, 98,202,132, 44, 2, 62,133,248,253, 67, 12, 56, 55, 39,203,137,104,
+203, 24,205,148, 3, 25,216,117, 59,166, 97,146,199,204,129, 93,231, 32, 43,110,111,143,188,126,125, 36,132,196,240,235,239, 40,
+ 37,214,117, 88,237,170, 85, 94, 2,134,180, 22,132,236, 28,227, 59, 95,159,203,212,171,164, 58, 19, 21,241, 89,152,198,101,170,
+ 35,117,175, 90,114, 33,114,132, 20, 10,105, 10,194, 40,240, 25, 93, 68, 84, 56,115, 44,174,155,156,249,250,151,149,157,172,107,
+ 36,251,189, 46,167,212,122,111, 44,172, 92, 8,106,241,181,181,233,137, 31,187,136,221,115,190, 7, 86, 76,183, 81,194, 67, 87,
+117,186,137,150, 53, 72,161,224, 18, 80, 34,187,227, 1, 85,175,183,182,235,234,193,174,121, 24, 35,247,227,137, 93,187, 39,188,
+127,160, 15, 9,148, 65, 89,197,175,191,251,142, 63,252,163,223,197, 24, 40,173, 76,215, 84,170,132,140, 12, 4,233,150, 75, 31,
+106, 1, 31,120,255,112,226,221,183,247, 40,101,232,240,220,134, 1, 91, 6,110, 14,183,236,204, 45, 15, 39,197, 57, 69, 30, 79,
+ 35,223,223,157,232, 90,205, 52,158,104,218, 14,159, 11, 62,131,178, 66,144, 60,245, 94,158,103, 81, 36,234,193,142,194, 26,199,
+164, 44,100,207,177,115,248,226,113, 78, 19, 90, 71,210,133, 98, 12,218, 25, 76,211, 66,215, 61, 61,212,159,116,108,234,135, 69,
+111,207,117, 60,255,216, 95,159, 26,223,171,162, 22,113,219,117,167,121,209,225, 22, 54, 29,223,147,115,245,242, 64,191,232,246,
+213,122,152, 60, 23,171,122, 81, 8,124,170, 16,185,172, 65,174,197,112,107,200,199,181,135,125, 19,148,179,233, 96,150, 34,227,
+ 42,231,102, 91,143,172,221,253, 11,239,203,246, 48, 87,234,147,173,250, 10, 32, 90, 90,210, 85, 84,166, 69,225,158,235,226,124,
+166,200,109,224,245, 11,176,167,168, 75,240,206,172, 47,152,211,206,244, 92,129,111,244,122,121,169,242,203,179,215,227,133, 8,
+ 7,174, 10,191,106,199,163, 60, 51,250,191, 44,138,182,233, 96, 92, 67,141,158, 74,252, 94,156,110,204, 69,112, 97,118, 13, 36,
+154, 74,113, 75,217,175,128,158,170,226,141, 49,160,116, 17, 48, 75,245,148,207, 56,211,105,154, 8, 57, 45, 58,149,148,228,176,
+ 51, 5,180,177,132, 28,107,184,203, 40,138,244, 12,157,181,132,156,152, 98, 98, 8,158,172,101, 52, 44, 72, 79,195,212,143, 11,
+195,160, 84, 26,151, 86, 66, 84, 59,247,167, 10, 8, 81,164, 82,197, 95, 62, 96,140, 37,214, 52, 48, 73,117,147,104,213,195,110,
+135,171, 34,166, 82, 50, 57, 38,156,181,180,198,144,125, 64,217,122,184, 40,141,216,125, 71, 92,211, 17,234,247,180, 70, 4,107,
+198, 40, 98,244,117, 95,232,240,147,151, 53,133, 54,164,162,200,152, 10, 58, 81,248, 41,208, 58,135, 86, 73, 52, 11, 74, 99, 40,
+ 56,163,105, 93, 43,153,225,192,232, 61, 37, 69, 92, 35,232, 89,171, 21,170, 36, 82, 12, 88, 99,137, 81,236, 79,164, 44,123,219,
+ 90,148,148,186,187, 45, 85,100,214, 26, 65,131,234,106,173, 11, 73,198,192, 93,219,202,158, 61,103,138, 74,139,222, 70, 33, 29,
+182,107, 12, 41, 38, 38,239, 49,214,213,145,180, 8,218,114,138,180,109, 83, 29, 1,171,174, 38,198, 32,160,157, 25,110, 82, 50,
+141,145, 52,180, 67,103,120,125,123,203,225,216, 98, 26,205,195,131,120,254,141,150, 17,109,174,247,102, 99,100, 60,171,116,169,
+215, 97, 38, 71, 93,237,176, 91,183, 11, 27, 43,161,100,169, 79,117,122,147,102,130,164, 42,139,237, 52,165, 68,127,234,235,251,
+ 92, 19,216,230, 38,170,126,163, 25, 90,165,180, 38,215,176,150, 82, 74, 93, 27, 93,179, 36,202,178,107, 55,198,205, 91, 63,225,
+144,168, 88, 17,185,235,223, 55,218, 80,114, 45,250,178, 36, 64,170,185,145,211, 69, 58,117, 45,113,192, 41, 84,247, 65,200,116,
+173,140,167,117,181,126, 53, 78,222, 11,237, 90,134, 20,152,208,156,250, 17,134,140, 61, 9,128, 70, 41, 69, 99, 29,143,195,196,
+187,111,222,243,213, 79,111,101,221, 87,199,223,115,208, 14, 65, 86, 69,105, 26,201,218,240,240,120,230, 55,223,220,241,225, 28,
+240, 89,241,197,151,111,217,159, 60,254,225,129,199,143, 15,148,164,105, 15, 71, 92,183,103,215, 21,134,126,168, 44,132,142,239,
+222, 15,124,247,225,204, 41,105,238,167,192,144, 11, 35, 48,197,140, 79,137, 84, 10, 55,183, 55,188,253,234,103,132,201,115,127,
+247,158,157,150, 20, 55,114, 32,169,150,168, 13,106,231, 72,182,144,173, 22, 27, 94,235,176,107,136,203, 11, 7,115,225,199, 38,
+160,254,246,221,123,185,132,178,106,173, 62,141, 77, 85,151,226, 52,181, 25,243,204,255,175,235,133,155, 54,103,118,121,225,185,
+ 21,181,238,217, 63,249, 51,105,125,161,122, 22,234, 96,121, 49, 47,254, 83, 24,221, 45,152,100,157, 6,108, 44, 83,245,207,103,
+ 4,250,214,159, 46,251, 43, 25, 5, 74, 39, 87,158, 30,200, 23,190,246,234,225, 87,107,144, 13,234,249, 41,244,165, 19, 97, 43,
+241,159, 51,217, 97,235, 74,211, 90, 65,154,133,103, 8,223, 96,230,228,111, 92, 19, 37,151, 11, 68, 42, 85,221, 57,219, 98, 46,
+187,238,149, 42,183, 94, 27, 27,178,239,143, 27,247, 44,169, 93,235, 96, 65, 45, 5,234,246,103, 92,128, 49,207,189,135, 79,150,
+ 82,101,227, 86,216,102,170, 87, 27, 74, 78,203,120, 81, 27,195, 52, 13,164, 28, 22,221,201, 58, 33,145,189,166,132,146,136,106,
+247,124,238, 37, 84,196, 90,218, 86, 72,113, 49, 70, 50,114,192, 27, 20,218, 89,252, 24,233,251,158,125,215, 49, 14, 35,166,192,
+ 99,146, 88,201,199,243,153, 62, 4,176,166,194,106, 12, 67, 74,210,137, 26,197,126,191,227,230,230,149,140, 13, 21,140,253,128,
+ 41,138,186,194, 37,147,165,235,175,108,120, 52, 76, 33, 72,241, 85, 50, 93,219, 98, 54,130,211,105, 18,149, 60, 9,162,151, 44,
+234, 24,164, 35, 52,213,155,222,185, 29, 33, 73,134,123, 74, 89,172,114,198,241,248,120,174,130, 66, 71,169,113,161,109,219, 10,
+ 2, 55, 68,108,211,162,170,149,142,156, 36,151, 61, 77, 24, 13, 93,227, 56,238, 26, 90,103, 80,100,162, 18, 2,154,194,208, 58,
+135, 15,146,217, 46, 13, 96,192,213,196,186,214, 25, 82,206,180,117,114, 48, 11, 79, 37, 83, 92,112,182,143,167,199,101,205,150,
+ 82, 68, 1, 77, 29,233, 15,253, 25,171, 13,164,218,205,166,140,178, 6, 31,163, 28, 40, 41,139,181, 48,122, 81,229, 43, 93,163,
+ 66, 83,245, 93, 75, 65,167,245, 60, 18,207, 34, 30, 12,114, 24,246,253,137,214, 89,116, 78, 28,154,134, 87,135,134, 67,167,104,
+109,146, 9,135, 65,246,240,117, 50,161,141, 20, 29, 95,124,245, 21, 63,251,234, 75,254,246,111,127, 73,223, 15, 53, 83, 93,180,
+ 81,219, 48,161,178, 42,139,137,185, 48,134, 4, 90, 38, 7, 33, 85, 93, 0,226, 45, 87, 40,114,136,203,253, 83, 52, 43, 85, 43,
+146,146,136,111,173,188,110,169, 78,206,174, 45,169,107,225, 93, 46,120, 33,179,245,209,106, 93, 3,176, 36,152,165, 66, 21,228,
+ 83, 89,106, 84,110,181,215,170,146, 43,243,125,221, 66,198,152,100,114,170,221,242,217, 17, 61, 24, 28,218,150,221,126,199,228,
+ 7,193,178,170,217,234,102,193, 53, 4, 21,192, 88,162,150,130,232,246,176,199,168,136, 53,154,111,127,243, 61, 95,190,121, 37,
+ 41, 95,173,220,247, 67, 85,191,107,165, 41, 49,242,120, 58, 49,228, 76,177, 13,183, 55, 55,156,194,153,239,239,123,250,119,143,
+ 60, 76, 19,244,247,188, 61, 28,249,240,254, 76, 81, 31,216, 31, 44,237,174,195, 79, 35,141,187,229,176,127,195,185,143, 60,246,
+247,188,187, 59,113, 55, 4, 62, 62,142,248, 4, 33, 65, 66, 4, 81,231, 83,207,248,238, 61,255,234, 95,254,107,126,247, 15,255,
+123,254,250,255,254, 83, 66, 58, 99,138,166, 36, 69,202,138,162, 45,205, 77, 67,123,211, 80, 26, 13,173, 89, 59,245,173,130,123,
+185,193,171, 79,143,200,159,179, 39,253, 86,219,244,170,156, 80, 92, 90,196,158,222,100,213,179,187,223, 92,245, 86,219,195,123,
+233, 12,235, 23,148,114,121, 64, 92,119, 90,229,170, 88,184,248,186,235,253,241,230,160,251,177, 7,250, 75,175, 83,174, 41, 39,
+235,254, 90, 45, 98,147,178, 57, 44, 46,200,178,149,237,190, 80,224,102,133,127, 97, 1,112, 44,251,219,205, 96,255,162,137,175,
+234,240, 39, 47,228,188,199, 86, 91,187, 86,217,172, 51,202, 37,140,165,238, 61,217, 56, 2,102,211,247,140,127, 84, 23,172,129,
+178, 0, 39,230,145,255,162, 86,159,127,196, 92,214, 84,190,103,166, 8, 79, 34,116,159, 73, 14,124, 50,171, 40, 44,197,226,118,
+ 98,242,252,251,116,249,216,215,182,203, 37, 97,111, 67,249,155,119,154,185,194, 49,164,211, 41,181, 35,209, 21, 11, 42,228,181,
+ 88, 15,128,217,223,173, 40,140,195, 80, 57,217, 98, 9,139, 57, 51, 12,163,236, 41,181, 38, 68,177, 40, 77,125, 15, 74,209, 54,
+ 45,195,121,128,162, 24,106,176,202,161,219,227,189, 68,133, 42,235, 68,236, 24, 35,206,118,216, 70, 67,201,164, 41,114,255,254,
+ 78,108,111, 64, 63,246,180,109, 71,107, 91, 81, 91, 43,200, 51, 73, 12, 48,170,112,232,186, 37,255,192, 79,129,243, 48, 10,173,
+110,156, 68,193, 94,192,216, 88, 89,236,178, 82,152, 5,118, 70, 91,250,177,231,112, 60, 48, 77, 53,166,117, 28,105,218,157,240,
+225,135, 73,210,232,144, 93,119,172,227,211,118,215,226,189,116,176, 41, 38, 84,150, 29,169, 81,176,239, 90, 90,167,233,172,162,
+113,166,194, 86, 12, 40, 77, 72,153,148,225,220, 79,140, 85,252, 53, 76, 1,163,231,171,184, 10,242,148, 8,184, 82,165,178,229,
+ 36,227,232,211,249, 84,163, 87,253,162,158, 78, 41, 75,183,150,178, 92,239, 57, 11, 72,168, 30, 58,122, 94,191, 24, 37, 86,178,
+ 36,135,144,217,136,120,115,146, 12,248, 82,191, 70, 41,203,110,215, 85,143,187,216,252,146,143,236, 92,139, 38, 19,167, 9,239,
+ 50,131, 21, 47,127, 78, 22,218, 6, 48, 11,159,192,106, 85, 99, 76,225,205,171, 55,252,241, 31,255,123, 62,124,120,207,195,195,
+137,198,153,205,103, 99,155, 25,161, 80,198, 98,170,229,241, 60,140,216,106, 45,155,239, 36, 70, 23, 26, 39,169,151, 37,213, 34,
+117,190, 57,150, 88, 39, 15, 90,242,227, 17,129,110,206, 25,178, 76, 59,200,165,218,178,114,117, 37,196, 42,136,148, 21,132, 20,
+118, 2,209,201,117, 34, 5,245, 58,170,211, 64,106, 58,158,174,205,212,204,129,207, 64, 76,226, 70,208,170, 34,172,163,128,157,
+ 26,227,132, 30,104,180, 92,247,135, 22,107,160, 57,236, 33, 37,108,235,234,125,181, 96, 93, 67, 46,103,156,113,188,121,117, 32,
+246, 39, 94,239, 90,142,135, 35,254,241,158, 15,119, 15,244,167,137,221,126, 79, 14, 2,248, 17,224, 86,130,148,137,163, 39,148,
+ 66, 50,150,127,120,247,158,199, 94,241,161,143,124,236, 7,154,156,185, 61, 54,252,228,171, 47,105,156,101,120,244,120,175, 25,
+ 30, 61,249, 49, 50, 14,145,199,199,123, 52, 45, 69, 25,166,193,115,186, 31,248,254,254,204, 41, 2,202, 18,107,104, 77, 65,118,
+249,211,253, 3,255,251,127,249, 47,252,193, 63,255,125,254,248,127,254, 95,248,203,255,227, 63, 19,238,190, 39,103, 35,186,134,
+146,217,191,186,197,236, 20,102,223,146,157,194,188, 62,188,250,147, 82,213,239,215,163,226, 5, 24,162,158, 30,232,207, 89,212,
+126, 59,174,187, 89, 34, 48, 55, 84,149, 11,225,145, 82, 79,163, 51, 47,162,192,183,177,153,219,199, 94,201,164,203,121,174,213,
+ 85, 94,250,214,138,164,212,179,250,170,235,177,249, 74,142, 43,155, 14,244, 25, 45,194, 11, 58,133,139,215,103, 59,125,168, 19,
+ 6,189,224,122, 89,172, 85,170,238, 97, 69, 32,151, 22,168, 73, 89, 16,180,101, 13, 77,169,130, 67,107,196,163,110,141, 84,212,
+ 70,109,168,105,106,139,236, 41,155, 3,182,114,152, 23,162, 92,174,161, 46,106,205, 30, 87,122, 85,211, 47, 35,184, 89, 11, 80,
+ 54, 17,168,215,201,115,235,161,190, 88, 37,203,108, 3, 91, 5, 45,179, 40, 30,117, 9,253,173, 6,150, 53,157,237, 25, 31,249,
+115,215,224,115,239,201,245,251, 80, 54,175,161,186, 40,167,184,148, 23, 46,149,163, 90,197, 73, 91,108, 81,189, 78,119, 93, 83,
+133, 97,165, 90, 0,229,112, 16,254,122,168, 97, 23, 6,107,101, 20,105,173,165,237, 90,177, 95, 77,158, 97,154, 40,185, 16,162,
+ 88,182, 38, 31,164,147, 15, 98,249, 41, 41, 51,244, 35,231, 97, 68,215,100, 47,133,198, 56,199, 52,121,226,224,201, 62, 80, 98,
+ 34,199, 72,244,129, 16, 60, 90,233, 74, 48,155, 3, 81,228,121,165, 10,143, 9, 33,210,247, 35,211, 56,213,113,172,128, 85, 78,
+253, 80,115,215, 53, 41, 75,132,231, 48, 70, 98, 17,103,200, 48, 69,124, 76,100,101,152, 82,198, 39, 24,125, 36,100, 40,202,242,
+240,112,166,104, 41, 86, 10, 90,252,216, 74, 11, 49,207, 7, 40,133,152,196, 14,103,172, 96, 95,115,142,116, 77,131,166, 96,181,
+240,175, 59,103, 56,180,142, 55, 55,123,217,165,171, 82,179, 13,172, 64,104,124,148, 92,240,232,235,148, 67,132,108,186, 38,138,
+205,188,134,110,183,103,242,113,113,153,160,103, 70,127, 21,111,206, 90,134,178, 70,231,206, 10,111,165,205, 2, 48,174, 66,115,
+217, 47,215,117,217, 44, 6, 91, 2,166, 42,191, 97,169,123,149,192,120,102,174,193, 56, 78,210, 85, 83,120,251,246, 53,166,254,
+ 92,243,202, 35,164, 76, 42,154,126, 74,196,168,240, 99, 97, 24,124,141, 93,149,207,237,249,124,230,215,191,250, 21, 31, 62,220,
+ 85,146, 91,185,210, 9,173, 66,228, 57, 24,165, 84,152, 80,140, 17,173,141,100,192, 91, 67,227, 76,117, 34,148,197,154, 58,123,
+215,181,130,182,113,116, 77, 43,244,183, 82, 45, 94, 10, 92,227, 40,185,186,161,138, 90, 92, 27,133,173,152, 81,180, 7,214, 88,
+108,117,180, 58, 99, 48, 21,213,171,171, 29,214, 85, 75,168,174, 62,237, 82, 42, 62, 54, 11,196,102, 22,167,234,250,190, 25,109,
+216,119, 59, 72, 69, 56,240, 90,177,219, 57,154, 78, 86, 29,166, 72,161,162, 75,225,230,230, 72,202,153,135,135, 71,148, 86, 28,
+ 77,225, 95,253,254,239,241,179,159,188,102, 24, 30, 56, 28,118, 52, 74,227,246,142,215,191,248, 9, 49,123,116,169,214,178,209,
+ 67,150, 64,159,187,251,145,119,143, 35,125, 48,124,253,190,231,253,105,224, 28, 34,253, 24,121,247,238, 3,253, 56,224, 67, 34,
+ 38,131,182, 59,188,118,124,253,237, 3, 15,143,137, 16, 19,167,243, 35,239, 63,222,113,247, 48,240,155,239,238,185,247,153,104,
+ 91, 66,150,207, 84, 90, 2,141,132,155,144, 74,225,219,239,223, 49,244, 3,255,225, 63,252, 71,254,254,239,126,133, 33, 97, 75,
+226,216, 25, 14, 59,203,237,235, 3,230,182, 69,127,126,139, 45, 27, 88,246,143, 13,104,121,169, 75,253, 71,237,211,127, 11,177,
+124,217,192,211,203,194, 9, 95,149,235,203,152,105,190,225,110,187,179, 43,222,122, 81,159,126,236,107,202,156,122, 66, 79,122,
+ 57, 97,237,250,128,121,254, 80,223, 48,204,103,220,237,124,192, 84, 33,140,209, 44,248, 67, 17,216, 80, 41, 82,171, 63,127,187,
+127, 86, 27, 49,201,114,232,214, 27,139, 74,229,197,151,187,104,179, 42,242,175,115,239,183, 7,219, 51, 29,238,156,180,164,171,
+130,127,166, 66, 21,214,231,161,230,247,103,254,110,229,234,245,221,168,232,231,226, 66,177,170,214,231,180,120,245,236,166,157,
+ 39, 99,191,151, 10,206,231, 59,251, 53,154,229,130,138,159,213,147, 52,185,121,132,175,212, 42, 22,152, 39, 44,186,218,254,140,
+210,140,211, 64,215,181,160, 5, 79, 25,147, 40,161, 75, 41,116,187,142,166,181,213,114,168,232,218,142,211,249, 76, 74,165, 18,
+190,162,236, 17, 21, 50,230,243,129,146, 51, 59,215, 81, 50,196, 26,147,170,180,163,233, 90,250,254,204,187,251,143,148, 24, 49,
+ 40, 26,237, 42,221,111, 62,172, 50,166,162, 82,115,202,244,253,136,247,147, 8,149,173, 33, 41,241,177,203,224,200,129,179,204,
+239, 94,204, 25, 99, 27,118,199, 29,211, 24,233,135, 65, 70,215,245,112, 83,104,154,195, 13,251,189, 4,195,220,159, 31,107,160,
+144, 1,173,105, 93, 67,242,129, 97, 12, 24, 43, 5, 9,165, 16,166,243,130,160,158, 39, 76, 33, 6, 66, 72, 24, 45, 55,231, 28,
+ 38,156,145,253,121, 99, 45,175, 14, 59,118, 86, 19,189, 39,170, 36, 41,107, 89,222,159,249, 0, 84,115, 68,173,151,207,138,214,
+107,113,158, 82, 18,219,108, 8,100, 10,182,113,104, 43, 58,134, 84, 10,218,154, 5,223,156, 66,168,136, 84,217,181,231, 88,239,
+ 33,198, 80, 66,216, 20,191,114, 80,249,148, 46, 86,149,243,138,134,106,181,220, 94,111,115,152,142,247, 94, 72, 15, 37,139,133,
+202, 41,218,221,129,105,212,236,186,142, 24, 3,221,241, 64, 63, 14,228, 52,113,122,248, 64,201,178, 90,113,214,160,116, 2,165,
+ 8, 83,224,215,191,250, 77,189, 46, 77,157, 6,176,168,203,103,205,139,169,161, 79, 90,131, 51, 14,107,229, 0, 23, 60,171, 88,
+ 40,181,146, 2,101, 94, 97,234, 77,217,106,173, 28,206,185, 90, 31,203,102,172, 46,107, 5, 17, 25,146,100,207, 79,109, 18, 99,
+ 12,116, 93, 71, 74,117,221, 80, 50,170,134,245,176,124,166, 51,141, 53, 56, 35,158,243, 28,203,178,178, 16, 91,243, 44,148,149,
+187, 64,202, 5,227,236,114,159,207, 33, 9,220, 69,131, 53,185,130,104,228, 90,211,198, 44,244,147, 20,228,144,110, 27,121,175,
+127,239,159,126,201,190,201,220,127,255, 27,254,240, 15,255, 57,163,143,124,243, 87,127, 67,127, 58,201, 90,160,181,228,211, 25,
+139,162,164, 76,242,153,243,195,196,175,190,254,192,135, 80,240,201, 96,237,158,198,102,166,152, 40,202,210,238, 94,129,109,249,
+216,103,238,222,223,115, 58,189,163, 61,236,241,169,208,143, 35,218,237, 73, 35,244, 99,224,251,147,231,195,148,137,170,126, 62,
+231, 6, 51,203, 61,158, 20,235,109, 70, 83,140,225,207,255,250,151,188,186,125,197,239,255,209,191,225,175,254,244, 63,115,219,
+ 89, 82,242,168,156,177, 77,131,106,219, 75,245,251,179,184, 87,197,146, 1,190, 29,207,111,179,203,203,188,195,252,209,230,181,
+ 75, 75, 87, 94,110,238,207,135,165, 92, 40,141, 75,185,176, 75, 92,231,100,109,178, 72, 46,215,205,245,224, 41,155, 35,227, 58,
+ 40,237, 66,212,117, 69,149, 83,171,226,109,249,218,124,129,125, 93,179,203,231, 73,195, 86,172, 53,147,180,214,133,118, 97, 77,
+ 87,223,244,164,165,238, 80,171,119,217, 40, 93, 83,164, 10,182,105,112,198, 48,140, 99,237,122,202, 19,205, 91,153,199,245,155,
+220,149,249,176, 93, 11,128,167,111, 75,220, 38,144, 21,208,179, 71, 72,109,115,201,103, 14,116,125,164, 44,149,186,209,171, 96,
+104,123, 98,235,250,125,228,252, 83, 23,175,241, 34, 69,219, 62,217,173, 48,176,108,253,249,151, 9,120,252, 0, 7, 97,254,187,
+ 51,153,105,251,245,235,182,161, 92,141,219,159, 78,106,148,186,108,118,174,115,232,175, 76, 7,203,180, 36,165, 72,211, 24, 92,
+ 99,132, 56,102, 36, 66,113,183,107,100,186,162, 11,218, 66, 76,129,166,233, 24,199,145,148,178, 8,195,148,236,218, 75,129,243,
+169,134,164,236,118,114,128, 77,158,113,154,104,109, 35,226, 46, 52, 31, 63, 62, 72,172,101,206,232, 2,199,182, 67,165, 92, 89,
+218,174,238,115, 69,229, 61,122, 95,129, 41,178, 68, 23, 59,150,252,183,199,243,132,181, 50,238,246,190,178,194,235, 4,193,199,
+196,253,135,123, 1,175,228, 76,211,117, 98,223, 41, 21, 62, 98, 45,166,109,249,240,112, 79, 81,194,118, 80,181,179,114, 74,147,
+ 80,184,198,209, 15,189,248,109,181, 38, 86, 36, 41, 57, 67,204,139,138, 91, 43,161,106, 89, 45, 93,156,213, 50,106,182, 20, 74,
+ 10,164,162,233,118, 29,166, 21,142,185, 50, 18, 38,159,115,194,217,134,126, 26,241,161,160,148,197, 24, 41,132,141,179,232, 34,
+187, 92,153, 62,248, 5,117, 60, 13,211, 18,146,228, 39, 73, 20,235,186,134, 24, 37,254, 84, 25, 57, 88,218,182,193,251, 80,217,
+235,134, 88,146, 8,213,138, 90,174,215,237, 61,108,185,118,106,231, 95,114, 89,226, 98,231,148,182,105,154, 36,124,165, 2,157,
+222,127,248, 64,201,153,166,105,133,116,135,162,219,107,206, 99, 18, 81,224,238, 72,240, 9, 75,170,135,162,166,113,141,224, 87,
+ 81, 53,208, 69,154,135,113, 28,217,237,118, 21,246, 19, 41, 41, 99, 85, 38,165,128, 82,208, 54, 13, 37,167, 26,144,226,171,250,
+ 92, 46, 96, 85,159,179,190,104,108,106, 51, 83,169,109,210,225,215,157,120, 17,209, 94, 65,120, 9, 69,175, 52,200, 5, 12, 85,
+139,134, 28,171, 88, 46, 11, 47,160,212,233,141,208,251, 82, 45, 46, 4,171,172,107, 97, 34, 83,129,117,162,106,141, 37,165, 72,
+172,107, 13, 85, 25, 7, 70, 23,118,109,131,210, 53,105, 46, 38,110, 14,123,116,145,191,183,107, 45,209, 79, 52,198, 96,145,194,
+243,241,244,128, 74,133,127,241,111,255, 5,175,127,241, 79,248,205, 95,254, 13,109,107,121,184,127, 32,140, 30,123,212, 82,200,
+249, 64, 25, 39,252, 57, 50,244,145, 24, 44, 31, 63, 60,144, 77, 87,217, 22,138,157,177,152,198, 50,134, 19, 49, 42,166,146, 57,
+188,126, 77, 86, 35,239,223,125, 96,244, 66, 75,188, 63, 15,180, 77,199,121,128,199,177, 16,180,173,107, 5, 1,134,229, 20, 49,
+181,177,203,245,206,154,171,184, 50, 99,248,211,255,231,255,227,143,254,183,255,149,221,103,159, 17,252,189, 52,121,117, 12,175,
+ 15, 29,229,208,173, 68, 57, 85, 71, 76, 79, 18,215,212,203,254,243,217, 2,177,181,243,188,220,102,111, 47, 19,245, 12,100,125,
+179, 55,189,226,164,173, 35,242, 57,158,177,108,132, 76, 91,202,208,229,141,182,108,210,221,230, 49,236, 2, 23, 41, 60,189, 99,
+207, 55,231,178,238,153,133,103,174,214, 81,183,218,122,168, 87,216,130,252,179,220, 36, 43, 90,173,142,246, 54, 4,186,217, 51,
+ 63, 31,104, 42, 47,199,138,214, 5,103, 53,214, 66,219, 88, 26, 39,162,152, 56, 77,248,105, 92,200, 66,128,112,170,151,168,220,
+188,138,193,106,222,180,169,153,224,115,186,145,218,238,209,175,184,178, 69, 65, 86,171,103,148,122, 3,170,159, 47,138,214, 24,
+ 99, 37,222,179,138,226,102, 34,157, 4,121,232,229,123, 45, 41,113,170, 92,240,210,183,206,193, 39,215,136,122,106,145,188,238,
+230,103, 24,210,133,125,113,126, 63,175,174,203,173,187, 97, 38, 37, 42,173, 54,251,254, 21,251, 59,223,125,117,125, 3, 75, 37,
+214, 93, 25,239,175,126,182,237, 9,191, 38, 25,202, 75,146,104,156,165,237,172, 36,157,133, 32,129, 58, 42,163, 85, 89, 68,124,
+ 41,199,170,126, 22,244, 99,202,146, 82,149,178,236,112, 39, 31,208,104, 14,251, 35,214,138, 32,202, 88, 83, 15, 89, 25,199, 63,
+158, 78, 34, 8, 13, 9,135,230,205,254,136,203, 5, 91, 63, 19, 51, 56, 36,134, 68, 44,153,172, 4,228, 43, 94,110,105, 99,167,
+144, 8, 81, 70,186, 83,136, 88,215,144,178,136,231,124,136,244,163,103,119, 56,146,149, 18,203,144, 0, 18,150,233,145, 8, 3,
+ 13,211, 56,214, 66, 76,124,235,165,166, 1,197,224,241, 33, 16, 98,146, 12,242,146,103,139, 51,198, 57, 41, 78, 92, 83,189,217,
+107,201,157, 98,194,104,203, 97,183, 39, 5,143, 82,121,177,108,233, 89,240, 24, 11, 37,202, 62,215,123, 9, 65,153, 66, 34, 38,
+ 68, 64, 84, 88,210,192,230,189,178, 53, 14,148,194, 40, 91,213,220,176,239,118, 4, 31, 22, 71,202,172, 97,208, 53,192, 72, 86,
+ 5,121,217,151,215,143,136, 76, 0,178, 90, 58, 90,125, 49,211,146, 14,125, 46,130,203, 38, 43, 66,192, 51,150, 87,183,175, 8,
+ 33, 45,215,186,173,145,154, 93,211,146,115,196, 79, 94,152,249, 20,162,156,254, 20,192, 88, 41,236,231, 27, 91, 12,129, 82, 41,
+123,228,132, 74,169,118,221,162, 46, 39, 69, 74, 8,116,141,101,215,136,253, 81, 33, 46, 13,163,168, 43, 14,181,196, 17, 59, 55,
+195,127, 10,214, 25,140, 93,239,237, 37,165,133,228,136,210,228, 13, 1,114,241,224,187, 70,112,168, 26,156, 86,216,106,238,181,
+ 90,215, 85,162, 8,237, 74,201,184,154,230, 54, 67,119, 82,146, 34,129,234, 10, 17,241, 27,148, 36, 86, 58,205, 10,101,202,185,
+200,216,158, 34, 76, 4,149,105, 26,201, 84,208, 26,137, 55,214,133, 93, 99,105,172,162,181,134, 56, 5,118,221, 78, 18, 9,173,
+229,103,191,248,156,127,251,239,255, 29, 55, 63,185,225,244,205,215, 60,222,221,179,239,246,244,247, 15,180,251,134,195,241, 70,
+ 8,114,193, 19, 63, 60,114, 62,123,254,238,155, 59,126,245, 15, 31,249,254,190,231, 52,140,156,199,137,209, 39, 82, 42,248, 48,
+241,246,237,107,190,250,242, 75,162, 79,124,255,205,183,248, 97,162, 20,203,233, 60, 10,144, 40,107, 9, 99, 26, 61,253,232, 25,
+235, 4,137, 26,194, 99, 20, 52,149, 4, 90,106, 68,120, 44,185,186, 40,132,155,239,195,196,127,247,123,191, 67,255,221,215,188,
+114,154, 87,135,150, 87,111,142,152,207,143,164, 47,223,172,209,171,165,168,103, 69, 66, 63, 4,151,121, 2, 24,249, 17, 93,251,
+162, 32,190, 82, 40,175, 85,239, 37, 92,100,153, 16, 92, 61,230,178, 7, 35, 95,126,172,182,171,208,234, 35, 46,172,214,176,203,
+ 40, 23, 54,204,215, 53,214, 52, 47,222, 72,253, 4,167,170,138,146,110,118,182,161,205, 54,173,250, 28,242,147,201, 67, 89, 40,
+119,170, 86, 95,242,113,176,213,195, 44, 97, 40, 78,103,172,134,206, 88, 25,247, 80,104,246, 45, 49,201,152, 80,145,112, 78, 51,
+ 4, 81,138, 42, 10,122,121,126,229, 50, 62,118,166,213, 41,158,188,142, 79,212,249,229,130,109,179,157, 74, 47, 1, 59,106,203,
+116,175,137, 98,242, 94,230, 75,171,158, 90, 85,229,203, 52,228,106, 23,254,156, 96,237, 57,199,192, 75,127,119,134,251, 60,167,
+ 97,184,184,118, 46, 38, 2,155,130,160,158,250,229, 98, 2,115,221,145,255,136,235,120,153, 17,173,184, 60, 31, 2, 33,123,218,
+182,161,212,188,111, 87, 71,187, 40, 77, 63,140,164, 18, 73, 57,160, 21,124,246,230, 51, 98,156,240, 21, 25,171,148, 40,177,115,
+156,247,179,154,221,110,199, 56, 76,220,125,188, 99, 24, 39, 82,202,236,118, 59, 17, 13,105,205,206, 56,180, 81,180,174,195,247,
+103,218,166, 19,161, 82,206, 88,215, 80,148,196,136, 22, 20,198, 88, 26,165,241,201, 75, 65,151,178,236,153,131,103, 24,167, 69,
+247, 96,173, 35, 35,157,109,201, 5,171, 13,161, 6,155,236,118,114, 16,238,247, 59, 38,239, 41, 9, 82,172,169,106, 83, 88, 16,
+159,211,228, 49, 53,107,124, 28, 6,114,202,236,218,150,148,194, 18, 78,147, 82,145,212,169,154, 91, 30, 67,165,229,197,196, 48,
+121,201,139,174,123,217, 5,215,172, 52,198,105,146,207,164,156, 68,173, 79,166, 84,127,123, 41,170,114,207,133,196,102,172, 93,
+162,120,163,143,164, 28,177,149,145, 62, 12,177, 30,138,162, 69, 65,171, 26,188,146, 9, 94, 86, 33, 33,229,186,158, 84,203,186,
+ 73,149, 31,179, 57, 20,155,167, 42,122,249, 12,120,239,151,107, 90, 46,223,170, 81,169,218,148,105,154,208,102, 94, 25,212, 66,
+ 74,107,250, 52, 45,249,226,115,225,158, 82, 38,230, 36,104, 96,192, 42, 57, 0,149,214,164, 81, 4,152, 84,124,235, 48, 77, 50,
+ 22,223,212,170,212,195,210, 89, 43,247, 35, 59,223, 15,179,172, 35,152, 65, 54,114,157, 80,137,145, 37,207,105,130,171, 85, 77,
+ 83,131,139,180,198, 26,161,220,201,142,220,226,189, 71, 27, 83,139,128,153, 29, 34, 59,253,156, 10,141,115,116, 93, 71,156,124,
+157,114, 38,124, 74, 56,230, 12, 11, 7, 41, 74, 48, 85, 1,149, 34,141, 81,228,105,192,238,247, 36,241,199, 18, 74, 33,199, 68,
+131, 97,191,219, 67,154,104,172,229,245,205, 14,157, 19,118,223,178,191,217,163,190,203, 52,187,150,183, 95,188,102,247,229, 23,
+124,252,251,255,202,199, 95,127,205,207,255,224,127,224,187,191,248,111,180,214,114,250,230, 29,159,127,249, 5, 28, 52,202, 54,
+ 36,101,121,127,122,224,239,239,238,249,230,225,132,167, 33, 57,131,143, 9,157, 50, 59,107, 81,177,112,254,120,162, 63,220, 18,
+124,194,180, 29,119, 15,119,248, 73,147,139, 38, 23,120, 56, 13,236,218,150, 88, 20, 83,134, 88,100,154, 5, 66,230,108,173,166,
+209, 90,240,182,206,224, 75,169,235, 36,133, 86,162, 31,249,251, 95,253, 3,255,211,191,249,151,124,237, 51,147, 19,145,102, 44,
+ 5,167, 45,198,117,178, 83, 95, 19,118,202, 39, 15,240, 31,162,197,125,242, 96, 87,249,169,111,250, 98, 6,174,159,168,181,183,
+ 99,253,237,129, 94,100,200,119, 65,148,145, 3,165,200,248,103,190,241,171, 76, 49,165, 90,173,242,213,115,124,106,143, 91,207,
+247,114,169, 24, 47,250,162,131,156,187,248,153,136, 86,230,221,217,179,130,234, 92, 39, 11, 74, 24,202,213, 26, 97,173,195,152,
+134,198, 58, 65, 33,150, 72, 99, 50,135,174,193, 41,217,225,132, 10,242,112,246, 64,201, 82,177, 79, 49, 18,188,103, 76,177,234,
+ 2,158,238,154,159,140,142,159, 75, 64,123,238,189,219,172, 55,158, 22,111, 27, 63,249,102,106,177,170,225, 75, 45,106,202,143,
+178, 58, 62,187,155,255, 45, 24, 8,159, 4, 32,229,114,121,184,151, 21, 65,187,144,242,102,221,219, 6,162,179,216, 0,159,115,
+ 45, 60,103,222,184, 80, 93,214,252,120, 20, 37, 21,114,170, 59,206, 44,220,113,107, 44,227, 56,226,131,136,101,238, 62,222,241,
+230,245,205,178,107,140, 67,172, 66,174, 70,180, 19,133,152, 90, 0, 0, 0, 32, 0, 73, 68, 65, 84, 69, 70,147,135,227,145,143,
+ 31, 63,242,241,227,157,140,128, 43, 8,166,105, 26,166,209,115,115,115,172, 17,147,144,134,177, 50,200, 5, 49,130,145,195,169,
+104, 69,204, 25,107, 26,134,113,228,120,115,164,127,232,133, 55,223,118,194, 13,167, 44,246, 43, 61,115,218, 43, 64,165, 20, 89,
+183,180, 77,203, 20, 60,209, 7, 20, 48,244,131, 8,197,106,103,222,247,103,140, 22,171,147,196,141,139, 35,192,152, 26,226,161,
+ 69,124,215,182,109, 13,155,145, 36,186,237,138, 76, 25,203,238,208, 65,202, 60,156, 78,220, 30, 90,140,181, 88,107,104,172,160,
+ 75,165, 42, 83,196, 28,209,104,156,213,117, 92,105,170,152, 77, 18,211, 82,146, 16,149, 20,163, 80,199,140,174, 48,148, 82, 15,
+252, 58,106,158,113,166, 86, 98, 96,219,174,149, 34, 38,132, 10, 33, 42,117, 65, 47, 58, 2,201, 26, 23, 76,113,190, 26,251,173,
+159,177, 75, 75,164, 18,218,138,184, 26,148, 98,154, 70,108,141, 51,157,166, 9,231,108, 77,104,211,196, 60,227, 85,101, 29, 23,
+179, 8,235, 98, 74, 85, 93, 78,205,123, 79, 75, 92, 39, 91,230, 57,194,192, 31,199, 81, 8,134, 41, 83,116, 33, 35,130,180,146,
+165,139,158,239,117,185, 78,140,108, 85,181,231, 34,190,236, 89, 64, 40,162,184, 66, 46,138, 56,249, 77,161,173, 23, 14,131, 64,
+ 97, 52, 86, 73,138,152, 53, 66, 78,204, 73, 26,174,173,240, 56, 86, 79,187,172, 49, 19, 62,103,178, 15,114,184,183, 29, 33, 77,
+ 21, 64,163, 41, 33,146, 99,164, 49, 6, 93,242, 82, 60,152,170,113,136, 37,129,106, 72, 40,134, 83,207,113,223,112,251,234,150,
+190,239,121,117,104,105,140,166, 49,154,227,177,227,254,227, 61, 93,103, 49, 38,211, 54, 10,237, 61,119,127,251, 55,124,253,237,
+175,248,253,127,247,175,249,248,155,111,249,252,247,126,206,195,247,223,203,117, 83, 2,166, 52, 48,101,250,251,129,239, 63,156,
+232,167, 76,198,145,146,166,143,137, 80, 29, 73, 83, 24,176, 70,209, 30, 26, 62, 60,244,156,206,103,238, 31, 30,171,192,148,117,
+170,161, 50,167,193, 19, 81,248, 12,197,136,200, 80,229,128, 81,138, 22, 69, 83,215,143,101, 94,233,105,232, 99,144,130, 10,197,
+119,239, 63,242,208, 71,134, 41, 51, 58,105, 18, 69,184,106,208,182, 89, 59,117, 25,163,235, 90,245, 62,127, 88,191, 40,142,123,
+134,178,246,169,142,125,190,176, 47,190,159,122,202,234,206, 87, 22,175,203,253,122,190, 18,238,213,248,147,242, 52, 1,236,185,
+238,116,254, 26,189, 29, 33,213, 71, 74, 85, 8,163,102,127,227,117,113, 67,190,116, 51, 43,225,123,151,101,132, 91,255,111,206,
+ 27, 70,201,158,164,118, 48, 77,211,208,180, 59,186,238,200,174,221,201, 46, 81, 23, 12, 9, 83,146,132,206,228, 66,241, 3,217,
+ 75,236,223, 97,191,195, 57, 67, 86, 64,140,188,251,120, 71, 20,155,240,246,152,218, 64,104,214, 53, 1,234, 19, 5,217, 11,244,
+ 84,165,149,236, 34, 89,199,206, 82,145,231,181, 88, 81,207,196,219, 22,117, 1, 55,120, 41, 94,245, 83,197,224, 75,211,160,231,
+172,129, 79,126,174,178, 33,243,109,126,159,187,233, 39,215,194,115,164,184,231, 48,180,207,126, 38, 46, 69, 10,243,254,212, 88,
+ 75, 74,243,154, 66,213, 24, 79, 75, 41,154,224, 51,143,167, 19, 90, 25,186,110,191, 92,123,146,128,103,104,155, 70,194, 84,172,
+ 28,140,239,223,191,103,168,225, 36,146,216,228,100, 76,158, 34,111,222,190, 6, 20, 31,222,125,199,193, 57,210, 56,145, 99,166,
+148,136,155,197, 88,202, 96,156, 67,167,140,115, 13, 41, 23,206,125,143,117,194, 21,239,135,190,102,135,167,186, 75, 45, 52,245,
+ 57, 88,109,232,218,142,105,154, 48,141,147,223,235,225, 86, 42,162,211, 24,201,191,118,173, 99, 28, 71, 73,165,211, 26,239,189,
+ 8,159, 82,174, 9, 99, 18,165, 23, 84,193, 90, 67, 8, 98, 29,155,145,169, 98,247, 3,215,216, 69,109,174,155, 6, 31, 19, 33,
+ 66,115,216, 9,159, 62, 71,108,237,244, 94,191,190,197,143, 19,185, 24, 90,165,208,211,132,154, 2,177, 8,120,164, 88, 71,219,
+ 52, 85,168, 88,234, 88, 23,156, 19,225,214, 28,115,219, 30,246,156,251,179,116, 87, 90, 4,125, 82,224,200,132, 67, 38,124, 66,
+197, 83,185, 44,171,148,116,133, 30, 94,108,181,234,170, 65, 82, 25,133, 89, 28, 20,222,251,165,168,153,179, 22,164, 96, 19,235,
+157, 82,138,118,215,146, 18, 4,159,136, 5, 9,198, 33,131, 86,188, 58,190, 38,165, 72, 74, 18,203, 75, 17,101,248, 76,105, 76,
+ 49,131, 42, 50,218, 46,165, 98, 84, 69,159, 99,180,133, 34,227,226, 57,233,165, 40, 69, 86,133, 56,174, 63,235,124, 88,207,244,
+187, 92, 87, 67,203,250, 93, 43,172,149,207,191,155,215,181, 37, 85,150,127, 66, 18,235,231,155,143, 38,164,128,177, 6, 40,162,
+ 11,169, 84, 69, 83,113,198,170, 64,240,147,172, 14,180, 20, 39,251,174, 37,138,173,128, 28,227,178,106,117, 86,160, 48, 89,105,
+ 6, 31, 73,254, 84,225, 64,158,227,161, 35,133, 72,219, 25, 92, 99,101, 29,102, 13,251,198,113,214,133, 87, 55,123,110,246, 29,
+135,125,199,253,135,119,184,183,154, 63,248, 79,255,145,254,235, 95, 99, 95,223, 96,142,175, 81, 71,199,112,119,150, 68, 52, 99,
+ 9, 15, 35,167,135,137,119, 31, 78,124,253,237, 29, 33, 57, 66,204, 4, 45,244,183, 98, 45, 56,199, 99, 28, 57,189,255,192,237,
+232, 25,207, 61,196,140,228,163,137,138, 63,133, 26, 58, 99,101,140,158, 41, 4,185, 81, 44, 45,173, 46, 96,114, 66,151, 34,171,
+ 79, 50, 86,120, 59,171, 21,214, 88,148,107, 56,188,122,139,230, 81,206, 46,171, 41, 86,161, 92, 83,213,239,179,146,252, 25,236,
+233,143, 97,185,231, 92,150,228,174,151, 60,192,215,138,249,167,170,228,109,101,171,158, 32, 75,179, 2,157,245,114,169,148, 79,
+168,205,185, 98, 14, 95,103,149, 47,148,182, 45,159,189, 54,253,139,178,117,211,237,102,181,138,230, 22, 64,204,156,179, 62,239,
+205,245, 38, 40,166, 42,190,173,169,153,234,179, 18, 19, 85, 5, 35,129,108, 45, 49, 78,140,179, 10,184, 86,161,206, 24, 90,215,
+ 74, 55,102, 91,178, 58, 51,157,206,228,243, 64,215, 56,218,125,203,171,227, 1,239, 71,198, 20, 25,235, 8,142, 92, 3, 70,140,
+ 89,172, 40, 51, 90,244,147, 7,228,124,248,149,205, 72,121,246,170,111,124,230, 90, 75,149, 89, 10,151, 1, 13,139, 77,237,210,
+195,126,205,198,127,113, 7,254, 35,188,254,101,129,237, 60, 93, 35, 60, 41,218,102,235,206, 21,141,224, 7,128,123,207,236,250,
+213,211,108,129,139,107,184, 92, 60, 55,165, 86, 15, 66,170,161, 27,186,226, 71,231,105,207,236, 66,180,214,113,188,121, 45, 62,
+232,250,181,130, 83, 21, 76,171,115,178,251,253,240,225,142, 97, 12,245, 48, 21,109,132,173,100, 54,235, 28, 15,167, 71,130,247,
+ 40,173, 8,100,218,174, 99,240,158,144,100,183,170,148, 33, 27,205, 88,119,120,147,207,180,187, 29,170, 36, 17,131,101, 65,168,
+206, 33, 25, 74,107,186,166, 89, 14,239, 82, 18,211, 52, 96,172, 33, 6,191,248,173,115, 41,236,187, 29,195, 48,224,140, 69,187,
+ 26, 64, 81, 15,232, 69,181, 92, 68,232,180,219,237,152,166,137,113,156,112, 78,138,141,152, 60, 90,107,186,174,163,177, 59, 98,
+140,130,167, 53,178,162,200, 5,246,109, 75,163, 11,186, 36,206,143,143, 52,214,176, 55,210, 69, 91, 45, 49,150,165, 36,188, 31,
+ 73, 49,145, 17,223,178,115, 86,254,217, 8,113,108,244,146,164, 54,142,190,142,248, 71,172,107, 37,168,165,192, 56, 12,180,109,
+203,193, 53,226, 68,168, 66,212,133,219, 95, 69,151,185, 58, 24,230,194, 89, 27,187, 16,216,230, 59,199,156,237,190,220, 63, 55,
+247,152,249,207,140, 17, 21,185,248,213, 51,214,238, 41,133,165,176,153,215, 18, 33, 70,114,202,180,251,189,188, 62,245,241,135,
+ 97, 88,236, 59,199,227,129,113, 28,153,242, 4, 90, 38, 51,169,200,202,209,199, 36,227,106,192,230, 25,230,146, 36,137,179,210,
+232,178, 18,158,206,108,169, 53, 21,215,187,124,206, 42, 81,178,168, 25, 94, 85,150,140,249, 84, 71,253,177,136,102, 68,107,197,
+ 84,243,217,141,145,241,123,140,178,170,211,198,202,247,137, 81,130,131, 54,241,200, 57, 38,156,169, 14,161, 2,157,182,114,136,
+251, 72, 9, 18,244,147,149,150,195, 95, 67, 68,145,178, 38,166, 44,118, 74, 50, 93,215,240,246,245, 13,175,143,123,108,201, 88,
+109, 5,158,164, 90, 94,189, 58,114,187,111,137,121,226,205,155, 27, 94, 29,246,236,187, 29,159,255,222, 27,254,217,127,250, 31,
+185,251,187, 95,162,140,229,245, 63,253,138,111,254,223,191,228,203,223,255, 93,126,245,127,254, 95,232, 8,106, 10,220,191,191,
+231, 55,239, 31,248,219,111,223,243,224, 19, 33, 1, 88,112, 45,177, 82,206,252,224, 73, 64, 28, 60,231,241, 1, 93, 32,142,158,
+ 70, 59,140,201, 53,132,107,109, 90, 83, 73, 20,165,176, 74,236,158,121,131, 5, 87,202, 84,253,129, 76,120, 76, 93,207,196,148,
+153,107,195, 16, 51,187,253, 13,227,199, 59,124,136, 24,103,208,173, 21,193,221, 34,184, 42, 63,188, 7,127,121,223,190,118,102,
+215,118,162,231,124,237,159,178,129, 61,247,152, 89,205,148,184, 79,175, 10, 94,210, 1,204, 23,233,124,209, 92,112,194,244, 60,
+ 26, 95,133, 84,165,212, 15,181,210,181, 68,186, 12, 29,201,245, 13, 81,117,212, 5,114,200,207, 17,129,170,230, 4,139,189,172,
+ 44,144,138, 82,102,250, 84, 98, 26, 7, 66, 72,104,213,215, 61,158, 90,222,192,174,233,100, 47,234, 20, 24, 75,112,150,201,143,
+ 12,211,128, 77,147,120,116,155,134, 93, 49,152,156, 9, 33,203, 46, 55, 9,199,122,157,124,148, 39, 2,198,151,118,234,229,210,
+189, 37,171, 15,163, 37, 75, 93,203, 49,173,183,240, 25,173, 95,164,177, 61,247, 56,243, 14,252, 31,147, 27,240,210,200,253,217,
+159,133,151,189,138,159,154, 4, 60, 41, 50,127,196,243,219,254,221,242,194, 68,202, 88, 81,180, 6,239,235,123,235,232,186, 6,
+148,136,217,230,104,209, 20, 34,187, 58,150,206, 57,243,253,251, 59,198,209, 75, 7, 87,196,154, 40,152, 81,185,126,134,105, 98,
+127, 56,224,167,137,174,107, 48,104, 30,238, 31,104,173,133,144,228,235,180, 8,115,114, 85,251,230, 92,152,198, 81,198,202, 90,
+232, 96,206, 89,116, 13,143,208, 37,147, 83,148,157,170,209,128,112,212,167,193,211,184, 70,214, 4, 53, 68, 38,214,220,117,225,
+214,155,133,227, 30,230,120, 80, 86, 43,217,252,103, 34, 54, 20,250,158,181, 70,242,173,141,162,239,207,164, 24, 37,168,168, 70,
+139, 30,111,110,240,227,192,255,207,218,155,245, 88,150,157,233,121,207,183,166,189,207, 16, 57,212,192,170, 34,217,236,185, 37,
+ 53,108,217, 87,210,157, 33,223,248,255, 10, 16, 4, 24,144,124, 97, 67,144,100,192,118, 11,205,238, 38,187, 73, 22,201,154,178,
+ 42, 43, 43, 51, 99, 56,103,239, 53,250,226, 91,123,159,115, 34, 35,179,170, 27, 34, 81,168,202, 41, 50,226,196, 62,107,125,195,
+251, 62,111,174, 77,207, 79, 99,217,141, 35,227,224,105, 45, 83,115,226,238,168,133, 65,176,142,216, 20, 33,155,146,126,205, 34,
+ 16,167,194,113,154,104,162,254,250, 82,155,162,119,173,229, 56,117,200,140, 83,161, 94, 78,133, 90,163,126,174, 86,249,244,231,
+192, 37, 67,215,230,116, 85,246,105, 80, 88, 47,163, 35,206,118,233,244,169,253,178, 90, 92,109,182, 75, 22,106,143,223, 77, 73,
+217, 5, 49,230, 30, 6,163,207,214,118,187, 99, 58, 30,153, 15, 71,172,181,108, 6, 77,114, 59, 30,142,171,112,116,154, 38, 74,
+171, 88,103, 41,173, 49, 4, 79,237,232, 95,245,208, 55, 76,133,178,144, 54, 91, 82,215, 64,107,148,220,150,116, 84,125,142,115,
+198, 59,189,216, 91, 23, 6,158,107,105,114, 81, 92,174,102, 88,180,181,144, 45,181,246,149, 75,211,179,122, 65,171,138,158,217,
+206,133,110,135, 83,125,137,233,235, 78,239, 92, 95, 79,218, 83,118,131,208, 1, 62,134,105,154, 21,183,220, 20, 96,145,155, 90,
+115, 75,171, 61,158,183, 50, 12,142,253,118,199,213,224,216, 59, 67,160,178,223, 12, 61,207, 65, 51, 8,106,203,236,158,190, 15,
+190, 98,130,101, 55, 14,108, 71,207,163, 39, 79,248,246,215,191, 6,147,121,255, 47,254,146,111,255,230,111,121,255, 95,252, 41,
+ 55, 63,255, 20,139,134,184,212,155,153, 87,207, 95,243,226,118,226, 88, 44,206, 5, 36,120, 68, 28, 38,120,142,181,119,212,147,
+ 96, 91,165,196,130, 51,129, 41, 38,112, 3, 55,113,102,172,130, 51,173,199, 18, 55,189,208,151,169,242,178,192, 17, 33,181, 70,
+ 2, 77,130,235, 80,160, 98, 44,121,217,174,116,176,143, 17,131,183,134,151,223,125,199,163, 16, 24, 55, 35,206,219,222,149,134,
+179,157,186,180,183, 10, 63, 30,186,156,127, 72, 1,176,140,150,190,143,184,246,174,238,173,222,163,213,138,105,103, 56,212,246,
+224,231,248,182,241,238,234,169,238,137,104, 39,197,244,201, 71,189,254,248, 98,180, 86, 79,221,214, 50,153, 53,172,162,183, 19,
+ 76,165, 41,172,160, 87,235,214,117, 21,186, 52, 90,143,211, 91, 62,143,156,213, 95,168, 85,217, 2,119,209, 52,174, 60, 31,153,
+172,215, 44, 95,163,213,126, 73, 51,180,138, 77,125,220, 94, 22, 69, 48, 56, 67,143,137, 61, 75, 74,235,187,206, 38,237,123, 95,
+127,185,231, 6,120,219,183, 88, 68, 35, 58, 87, 96, 14,178,126,127,238,173,241, 31,204, 50,127,107,119,253,131, 9,176,141,115,
+109,220,101,199,222,222,218,136,159,251,215, 31,186,180,229,109, 23,245, 59, 69,161,167,181, 85,123,151,137,179,106,199,158,179,
+142,224,141,133, 16, 60,198,193, 28, 39, 74, 49, 12, 33,232, 52, 7, 77,217,170, 61,195, 59,165, 76,206, 89, 49,152,131, 61,237,
+187, 91, 91, 59,251, 48, 14,236,247, 59,190,253,230, 57, 62,120, 36,235,115,235,189, 35,181, 74,108,149, 57, 39, 90, 21, 66,216,
+146,139,162,107, 83,141, 29,142,163, 74,228,165, 24,148,190, 63,175, 61,113, 14,192,123,183,250,145,107,107,228, 24,149,211, 94,
+ 10, 85, 26, 53,170,198,165, 94,168,205, 79,147, 48, 89,163, 78,117,207, 45, 6,124,119, 83,140,131,103, 51, 14,196, 41,145, 83,
+ 82, 54,124,255,181,101,175, 31,198,145,205,224, 25,188,211,213, 20, 22, 35, 22,164, 80,114, 35, 38,157, 58,148, 82,152,230, 68,
+ 46,112, 55,233,136, 91,140,101, 78, 73,149,213, 29,177,218, 74,165, 26,253,113,154, 38,196,154,213,233, 97,172, 91, 61,222,149,
+ 83,202,155,142,227,101,213, 2, 53,121,211, 73,163, 83,174,179,175, 89,122, 44,106, 47, 14, 26, 93,220,217,227, 65,143,211, 97,
+237,224,230, 57,174,221,250, 50, 97, 84, 54, 69, 89, 95, 11, 13, 95,209,232,214,156,149,240, 86, 74,195, 6, 79,174, 89, 69,105,
+ 41,227,188,235, 83, 58,200, 49,246,207, 87,131,124, 74, 65, 47,140,110, 33, 52,162, 60, 2,233, 78,134, 41, 38,172, 61,185,160,
+172, 57,179,224, 74,235,107, 21,157, 22,149,156,245,210,238, 34,198, 86, 27, 46,168,229, 76,147,254,212, 71,221, 90,237, 96, 41,
+ 57,203, 95,175,250,251,154,206,156, 23, 92,176, 49,134,148, 34,213,232, 69,151,107,111, 76,218,146,128,168, 5,196, 56, 4,182,
+227, 64,176,194,198,130, 47,137, 80, 65,178, 96, 90,192, 25,248,217, 39, 31, 49,221,188, 64,164,224, 6,193, 22,131,219, 58,118,
+ 87, 35,193, 90, 14, 95, 62, 35,108, 62,228, 71,255,250, 95,114,248,226, 51,118, 31,188,135, 9, 6,191, 55, 76,166, 81,110,143,
+ 28,142,145,103,223, 92,243,213,235, 3,183, 51,196, 2, 81, 50, 98, 42,182, 85,170, 53,164,168, 19,149,221,110,207,110,187,229,
+230,230,182, 23,110, 6,235,131,186, 23,154,144, 99,193, 58,213, 72, 44,162,203,214, 22, 52,184, 33,182,194,177, 23, 70,222,168,
+181, 53,150,202, 92, 84, 80, 87,251,235, 87, 75,130,154,121,245,221, 11,254,232,147,189,146, 6,141,129,230,168,243, 25, 38,246,
+135, 66, 96,238,131, 73,218, 61,250,218, 27,168,217, 31, 0,178,185, 56, 48,207, 14,196, 42,239,234,146, 56, 67, 32,242, 86,202,
+221, 15,230,223,200, 9,137,122, 34,211, 40, 89,203,156,109,219,181,140, 86, 43, 77,235,254,244,101, 55,101,209,111,134,119, 90,
+209,121,175, 15,120,138,179,118, 34,157, 41, 93, 75, 65,140,122,153,131,119,120,231,181, 41,110, 25, 67,195,178,164,184, 85,173,
+126,107, 5, 84,233,155, 74, 81,124, 38,234,105,174, 20,173, 90,171,118, 94,173, 84, 16,223, 9,110, 6, 19,204, 69,206,248,219,
+ 96,254,114, 15,167,183,238,226, 47,110,250, 19, 11,192,180, 69,177,219,163, 2,215, 11,241, 28, 91,219,222, 16,183,253, 83, 59,
+117,145, 55, 59,240, 5,255,122,201,136,145,119,142,214,219, 3, 95,239, 67,107,161,239, 19,135, 74,231, 88,191, 91, 36,175,207,
+143,117, 11, 26,182, 48,134,128, 15,142, 84, 98,183, 16,121,157,254, 84, 29, 37,111, 54, 86, 15,102,231, 58,201,207, 50,142,158,
+224,195,154, 80, 54, 71,141,105,173, 52,188,245,188,186,190,166, 9,164, 90, 52, 87,189,154,149,127, 47,214,226,197,146, 83,101,
+158, 38,156,119,170,100, 94,132,165,165,232,231,104,124,255, 53, 85, 25,235,136, 24,194,232,217,237,118,188,126,125,163,222,234,
+222, 49,148,154,251,170,167,173,148, 58,122,103,119,126,153,159, 63, 7, 58,182, 85,197, 74, 74, 17, 99,233, 76,115,215, 67,110,
+ 2, 99, 48, 12,219, 29,223,188,122,221,109,172, 10, 79,178, 34, 12, 33, 16,211, 4, 69, 83,185, 82,170,164, 92,180, 91,173,149,
+134, 37,197,130, 56,143,193,145, 19, 88,103,176,226, 41, 77,216,108,183,228, 90,153,227, 76, 42, 17, 63,248,174, 32,175, 61,214,
+ 91, 47, 14,237, 80,245, 89,177, 86, 45,109,173, 46,233, 99,122,249,183, 94,201, 63, 68,162, 60,105, 85,116, 92,220,218,242,252,
+ 26,134, 97,160,212, 76,173,185,143,234,181,176,223,237,118,220,222, 30,214,226, 25, 78, 5,210,102, 19, 58, 95, 95,139,196,152,
+ 35,214, 90, 21, 75,206, 26,139,235, 67,231, 90,244,177,116,142, 71, 21, 24, 90, 75, 79,251,165,164, 74,179, 70, 47, 13, 55,156,
+248,240,232,153,101,172, 70,148, 26, 49,228, 14, 65,178, 34,212,154,213,174, 25,156, 38,193,233,252,185, 19,221, 52, 12,165,164,
+168, 54,193,166,171, 36,231,140, 66,105, 68,144,142, 17,182, 86,109,115, 53,165, 85, 9, 84,123, 67,228,122, 94, 64, 45,133, 68,
+237,192, 28,167,103, 93,167,231,121,103, 25, 54, 65, 39, 90, 22, 6, 35,132,150,217,136, 96, 91,193,101, 52,229,175, 68, 66,181,
+236,131,229,233,135,239,211,218, 12,174, 48, 62,222, 96,131,225,201,135,143, 56, 94, 31,216,252,236, 35,126,244,175,255, 37,183,
+223,189, 32,123,207,163,199,143,185,125,254,156,221,143, 63, 70,156,225,155,231, 47,184,187,153,249,250,250,142, 47,110, 15,220,
+ 52,141,164,101, 55, 16,134, 64, 44, 9, 83, 18,146, 19,173, 85, 94,223,190, 82,184, 1, 58,228,204, 49,169,101,213, 40, 89, 82,
+125,194,170, 83,210,132,205,178,222, 97,138, 99, 54,204,165, 82, 69, 72,221,185,149, 27,164,210,104, 29, 53,141,129, 31,253,232,
+131,142, 76,214,194,222,249,110, 28, 44,134,103,191,255, 22,167, 21,195,217,200,100, 57,132,151,159, 59, 31,117, 55, 89,149,224,
+ 75, 42,151, 60,184,111,228,141, 93,246, 63,234, 98, 63, 79, 34,107,231, 36,180,122,233,131, 91, 47, 63,222,248,187,223,246,247,
+ 20,234, 41,197,237,141,207,105,249,122,212,211,187,136,231, 26, 26,105, 40,103,145,167,205, 44,185,235,221,135,137, 48, 88,203,
+198,123,198,193,147, 91,101,158,143, 28,167, 89, 35, 26,139, 42, 66,173, 49,108,134, 13,155,237,142,113,220, 49,132,160, 86,154,
+146,145,146, 48,181, 96, 23,209, 94, 7,187,148, 90,152,147,138, 66,230, 90, 41, 82, 41, 13, 74, 19,172,243, 24,235,200, 41,246,
+194,161, 34, 81,244,224, 49, 5, 91, 5, 59,168,144,175,180,170, 19,134,174,192, 95,161,183,114, 1, 36, 56, 19,238, 55,205,102,
+175, 13,204, 18, 18, 81,250, 67,105,168,125,188,111,164, 93, 82,237,228,161,239,249,233, 98, 94,202, 55,189,148,101,221, 67, 66,
+187,215, 85,179,250,222,233,129,162,242,208,133,125, 95,157,222,228, 1,146, 76,189,216,149,223, 95, 30,189,113,177,191, 33,142,
+188,252,175, 38,111,186, 12,206,182,239,171,114,117, 21,161, 90, 81, 43,146, 87, 90,220, 24, 6, 74,243,196,216, 83,215,150, 30,
+176,169, 61,171,228,196, 56, 14,216,172,207,140,247,161,251,222, 61,211, 60,147,211, 12,198,112,156,103,142,243,196,214,121,172,
+ 46, 70,241,214,145,110, 39,164,130, 56,171,113,174, 52,252,232,245,251, 83,192, 25,141, 19,213,253,167, 34,133, 77,183, 60,145,
+ 42, 67,131, 97, 12,188,247,163,167,216,209, 50,205, 55, 28,103,104, 29,214, 37, 98,206, 22, 29, 13,235, 13, 53, 42, 8,102,161,
+128,213, 90,123,200,166,118,169,206,106, 7,153,122,102,123,138,133,217, 22, 68, 60,214, 5, 85,106, 87,184,190,185,165,166, 72,
+ 8,150,150, 35,185, 53,170, 8,243,156,116,146, 17, 51,113, 78,204,169, 49,199,168,217,219,198, 81,138,250,201,155,148,245,251,
+ 35, 86,104, 89,185,224,199,195,129,113,179,193, 25, 75, 69,125,234,214, 40, 98,119,138,113,141,245,213,132,189,210,149,225,101,
+213,207,128,190,239,107, 43,235,247,181,118,246, 64, 93,159, 91,115, 66, 26,117, 11,171, 22, 55, 61,100, 70, 42,185,230, 53, 67,
+188,244, 34,125,154,110, 88,114, 1, 22,135, 67, 74,145,214,191, 54, 63, 56,114, 74,171,152, 81, 3,112,238, 58,138,214, 96,155,
+ 65,172, 80,115,239,230, 93,192, 45,161, 65, 69,161, 66,130, 48,110,134, 53,255, 92,133,187, 14, 35, 66, 78,185, 23,119,134, 86,
+122,247, 93, 27,133,130,179,157, 6, 88, 33,149, 46, 38, 68,213,239, 58, 13, 49, 56,134,142,174,214, 53, 74,156,115, 71,193,106,
+131, 17,172,165,148,172, 90,191,166,158,236, 34, 96,189, 35, 21, 21, 3,182,170,250,142, 82, 53,189,173, 74,211,247,141, 17, 70,
+ 31, 8,222, 51,120,131, 19,195, 96,244, 34, 55, 77,181, 86,206, 26,156,113, 4,231, 9,214,192, 60,177, 29, 71,220, 80, 24,124,
+164, 57,176,143,246,132,221, 35,222, 43, 71, 94,186,198,211,127,246, 71, 76,243,196,225,213,107, 62,248,243, 63,227,249,239, 63,
+229,189,167, 79,184,251,197,231,140,126,207, 47,126,245,140,111,190,187,227,235,151, 7,142, 71, 13, 80, 33, 88, 82,205,164, 73,
+ 19, 10,155,104,164, 43,198,173,176,161,249,112,196, 25,183,130,164, 84,225,159,113, 98,250,253,217, 29, 23, 61, 27, 94,204, 50,
+233,213, 51, 85, 35, 89,187,165,181, 83, 82,109,169, 20, 17,146,129, 79,254,224, 39,252,246,215,191,194, 53, 29,213,235,250,207,
+129,108,249,244,231,255,128, 83, 63,115,125, 99,188,190,142,163,219,219,135,139,242, 61,163,247,119, 9,231,126, 40,122,246, 33,
+160,204, 67,106,232,119,141,223,239,143, 96,223,102,229, 90,238, 52,211,204, 89,231,121, 70, 98,235, 59,118, 49, 74,192,162,123,
+228,173,177, 4,107,216, 14, 58,246,153,231, 35,135, 52,113, 60,196,158,141,237, 24,194,192,126,187, 99, 55,140, 92,109,183,140,
+227, 6,235,134, 62,230, 40,212, 20,169,181,173,157, 60,173,208,233, 16, 26,149,105, 12,197, 10, 41, 47,140,117,165, 29,209,211,
+172,140,117, 24,167, 7, 68,201, 69,189,208,162,192,130, 92, 11, 46, 56, 21,245,181, 14,135, 49, 58,198,212, 58,109, 25, 21,158,
+232,112,235,172, 98,137,152,236,224,144, 85,128,216,116, 50,113, 10,151,233,105,110, 92, 70,217,222, 79, 87, 89,186,175,245,207,
+ 93,252,150,251,118, 32,121,243,110,126, 0, 11,251,230,115,210, 30,152,197,156,121,210,219, 9,121,251,131,158,187,183,205, 52,
+228,173,115,159,206, 46,232,194,185, 5,158,225,180,152,210, 75,218, 17,239, 14,196, 57,146, 98,194,121,181, 92,169, 98, 93, 95,
+207,171,171, 43,238, 14, 7,253,179,125,108, 27, 99, 84,242,212, 2,171, 17,195,163,171,199,140, 70, 11,195,148, 34,187,253, 21,
+ 83, 21,110,174,111, 41, 89, 21,182,202, 86, 55,196,213, 7,141, 94,118, 70, 89,219,214,233,161, 91,115, 97, 48,194,198, 7,130,
+179,152,154,241,214,242,248,241,142,155,219, 9,234,146,192,169, 5,128,181,167,228, 63,231, 23,164, 39,125,140,110, 78, 23,200,
+ 66, 9, 52, 66,206, 42, 98, 27,134,129,199,143, 31, 99,140,225,238,238,150,155,219, 91, 82,204,218, 57, 6,191,146,206,106, 47,
+233, 14,135, 25, 83, 27,241, 48,235,184, 90, 58,181,207,185, 94,104, 42, 62, 52, 47,162, 53, 52,152,198, 57,219,137, 94, 74, 91,
+203,165,224, 71, 79, 42,234,149, 15,189,163, 29,135, 13,133,198,225,120,236, 97, 49,181, 3,115,219,218,165, 91,107,145, 37, 5,
+237,172,176, 89, 92, 64, 70,236,122,118, 46,161, 28,230,140,133, 94, 74, 23,195,181,174,140,174,234, 36, 89,108,127, 75,104,203,
+ 52, 77, 93, 67,161,123,115,205, 12,112, 43, 95, 94,187,230, 29, 55, 55,183, 43, 96,170,244, 11,221, 24,189,224,148, 7,160,221,
+162,174,165,117,162,162, 25, 22,141, 84,244,235,243,214,209,164,145, 82,102,191,221, 18,227,172,251, 95,192,121,191, 58, 93,156,
+ 83,182,187,235, 40, 96, 37,236, 25,156, 49,148,190,163, 87,130,155,218,180, 92,215, 88,184,190, 15,175,247, 28, 77,181, 86,108,
+ 81,159, 61, 73,117, 28,182, 53,188, 31,212,175, 29, 44,222,153, 14, 3,171, 12,214,226,164,170,253,203, 6,181, 21,118,112, 81,
+109,130,119, 14,111, 13,155,224,105, 37,113,123, 56,176, 51,142,159,253,241, 39,180,141,101,248,201,143,176,227, 35,134,249,192,
+123, 41,227,114,229,229,103,159,243,254,159,253, 49,204,145,157,243,152, 87,183,140,135,204,179,111,174,249,221, 55, 55,220,205,
+194,161,168, 29,181, 89,143, 25,148, 47,143, 64, 73, 25, 51, 14, 24,227, 53,123, 96,154, 86,191, 77,234,232, 92, 99, 44, 82,187,
+252,186,235, 73, 26,166,167,206, 73,135, 81,169,224,240,212, 96,235, 61,163, 54,237,218,125,109, 58, 25,217,140, 3,127,249,103,
+127,206, 95,255,199,255,200,199, 64, 8, 14, 27, 60,205, 91,104,133,195, 87, 95,222, 75,105, 59, 83,244,174, 81,149,111,153,205,
+203, 89, 12,227,249, 33,250,125,118,164,127,202,255, 30, 2,145, 60,228,109,190, 63, 29,248, 62,241,214, 59,126,227,217, 13, 34,
+171,117,105,189, 0,170, 42,172,157, 8, 78, 26,206, 20,130, 55,164, 60,113, 59, 31, 59, 69,171, 34, 98,216,110,118, 42,228,216,
+238,217,141, 27,130,115,140, 62, 80,209,234, 88,153,212,141, 56,207, 76,199, 59,226,116,160,214,220, 5,119,170,190, 53, 70,247,
+119,185, 22, 90,110, 43,173, 74, 90,211,253, 74, 23, 82, 57, 52, 87,121,177, 37,150,238, 65, 77,210, 24, 69,247,151,118,129,240,
+ 45,236,120, 49,125, 15,184, 44,228,213,250, 82, 22,126,251, 26,221, 40,103,195,247,123,112, 23,228,108,202, 33,107,175,122,234,
+100,219, 3, 89,238,237,158, 21,168,173, 2,156,115, 95,252,229,253,217,222,196, 13, 63,248,188,180,119,236,147,100, 45, 78,254,
+113,151,249,247, 60, 79,103, 9,114,210, 78,217,214,231,202,121,105,167,215,231,120, 60,118, 47,117,233,204,130, 19, 95,187,181,
+ 74,232, 40, 79,239,221,170, 72,182,214,210,234,164,209,166, 57, 51,134, 1,235,189,190,255, 98,194,134,192,147,247,158, 32,185,
+112,245,222, 35, 74,205, 76, 57, 43,125, 77,132,146, 83, 79,206, 90,114,175,165,147,199,212,126,105, 74,195,117, 8,213,124,156,
+240,118,195,241, 56, 19,182, 35, 87,219, 61, 33,188,102,238, 59,241,218,237, 53, 86, 84,200,100, 68,112, 65, 24, 54,158, 15,127,
+244, 17, 47, 94,124,199,235, 87,175,117, 42,212,167,128,203,138, 97, 24, 6,198,113,195,213,213, 21,222,123,174,111,110,136, 41,
+129,209,252,235,148, 75, 87,195, 71,182,206,232,232,187, 8,121,202,204,135,163,186, 43,108, 80,145, 23, 39, 34, 31,168, 8, 78,
+196, 32, 85, 95,233,121,142,248, 16, 24, 55, 27, 90,131,227,113, 34, 4,175,115, 31, 35,152,102,201, 41, 51,132,192, 52,207,132,
+113,196,117,189,192,210, 57, 25,163,153,222,244,172,120, 99,141,162, 98,123,116,176, 65,131, 74,106, 83, 59, 99,206, 89,215, 35,
+ 85,241,191,138,123,214,142,223,244,247, 84, 24, 71, 98,236, 28,249,123,231,210, 18,252, 98, 59, 47,192,117,146,228,221,221, 93,
+167, 56, 10, 47, 95,190, 84,161,161, 83, 37,125, 41,218,225,135, 16, 16, 3,165,196, 53, 40, 39,151,132,239,214,195, 82,203,250,
+ 44, 45,239, 40, 99, 13, 20, 97, 24,135,174,158,215,184,211, 37, 6,122, 41,194,115,202,122,137, 24,213,214, 44,137,127, 98, 12,
+ 37,118, 40,209,116, 84, 71,133, 49,125, 39, 94,169,198, 80,227,172, 84,180, 14,250, 89,195,165, 68, 8,131, 39, 56,207,102, 28,
+117,173, 96, 45, 70,105, 3,218, 52,137,129,106,176,173, 66, 74,104,253, 58, 43, 9,207, 26, 6,107,241, 29,122, 99,164, 50, 6,
+ 11,110,224,238,112,205,143,255,228,159, 97,158, 62,194,254,248, 9,238,199,159,128,217,225,226, 68,121,241, 29, 55,127,247, 43,
+158,252,229,207,144, 82,152, 62,251,138,253,184, 39,127,241, 53,183, 95,189,230,110,106, 60,187,155, 41,197,112, 59, 39,138,177,
+164, 86,144, 12,214,219, 14,100, 50,228,152, 9,195,134,216, 42,136, 37,166,121,229,151, 72, 7, 43,169,254,164,246, 53,238,137,
+145,177,130, 80,251,138, 85,141,207,221,237,181, 20,133,125,170,152, 59, 33,240, 95,253,143,255, 19,207,126,245, 27,236, 60, 49,
+238, 44,195,110, 64,130, 3,235,120,254,229, 51,230,111, 95,156, 93,234, 15, 53, 36,157, 30,246, 80,215,116,121, 65,190,153, 45,
+254,238,136,203,127,250,229,126,255,239,184, 63, 17,248,190,139,251,251,246,252,230,109, 29,126, 23,147,152,238, 5,245,198, 50,
+120,139,247,234,116,159,230, 35,199,227,113, 69,192,110,198, 13,143,175, 30,243,120,127,197, 54,108,240,189, 61,202,113,230,102,
+ 58, 82, 16, 82,209,192,131, 41,206, 28, 14,183,212,154,201, 57, 98, 68,171,220,209, 7,156,104, 55, 45, 70, 83,140, 68, 26,174,
+ 53,189,140,187,247,183,168, 25,146,234,108, 79,112,202, 93,140,151,213,199, 94,161,206,137, 92,213,242,230,156, 30, 82, 77,212,
+166,118, 46,223,149, 51,202,158,172,137,121,230,108,132, 94, 47,174,217, 21,229,122, 1,150, 63, 93,170,114,206, 33, 48,231,169,
+ 58,247, 25, 5,178, 42, 66,223,128,222,252,163,158,145,118, 26,181,191, 57,172,231,191,239,255,206, 87, 14,103,163,214,158, 40,
+103, 67,232, 29,146,156, 44, 79,221,219, 61, 77,115, 23,161,133,254, 76,170, 64, 44,132,129,227,241,176, 10,225,134, 16,122,151,
+ 14,119,183,119,136, 24, 82, 74, 58,233, 49,174,163,131, 43, 12, 70,211,222, 40, 92, 61,222, 99, 83,101, 48,134, 47,191,252,146,
+218, 45,161, 21,112,219, 45,211, 52, 35, 6, 92,167,131,233,161,146, 9,126, 64, 28,180,162, 23,234,221,225, 72,160, 82,234, 43,
+174, 62,120,202,251,239, 63,229,235,103,223, 17, 99,233,248, 93,179,118,176,181, 65,174,133,199,143,118,252,155,255,245,127,225,
+231,127,253, 55,252,213, 95,253, 55, 37,204, 33, 56,175, 0,153,134,176,219,237,200,165,112,125,125,173, 92,250,121,166,161,216,
+208,148, 35,222, 47,153,231,234, 74, 73,177,112,157,110,105, 41, 19,220,128,115,150, 57, 70,221,185,146,181,120, 21, 13,101,201,
+165,116, 81,152, 16,134, 64, 41,147,122,129,123,158,123, 19,200,237,244,204, 27, 49,228,146,137,243,140, 21, 97,186, 59,104,145,
+ 99,100, 5,214, 24, 99,244,239,243,189, 83, 94, 10, 34,236,218, 76,180, 90, 58,155,220,144,179,186, 12, 88,114, 15, 90, 61,197,
+ 62,208,214,191, 55,116, 62,127, 74,186, 54,139, 81, 59,235, 97, 24, 86, 47,123, 8,129, 97, 8,220,220,220,244, 75, 84, 59,188,
+113, 28,152,230,137,199, 87, 87,157,217,159,152,227,188, 90,206, 82,140,125, 47,109,240,214,118, 31,187,130,128,166, 60, 17,188,
+190, 22,206, 24,156,117,204,117, 34,230,204,102, 28,117, 77,178,216, 49, 57,101,109, 24, 99,212, 66, 25, 84,168, 39, 69, 5,146,
+ 19, 16,134,113, 37, 18,182, 6,228, 66,236,118, 91,215,180,152, 48, 11,168,198,128, 15,129, 77,255,199, 91, 37,218,169, 20,180,
+ 98,234, 98, 75,213,164,193, 97, 24, 59, 78,169,233, 4,167, 21,117, 82,244,241, 53,232,133,110,141,198,243,110, 70,207,221,124,
+199,135, 31, 60,225,233,143,222, 35, 63, 30,241,159,124, 4,126, 4, 25, 96,191, 35,150,200, 78, 60, 55,191,249,156,250,187,207,
+145, 40,124,245,155,159,179,243, 91,254,246,239,126,203,139,219,196,203, 67,164,137, 71,124,128, 18, 89,182, 83, 70,132, 97, 28,
+105,192,205,221,145,231,215,223,130,168, 6,198,186,208,249, 3,244,198,170,116,228,176,215,103,204, 40,147,100,201,126, 55, 52,
+172, 81,193, 35,166,158,173, 3,151, 41, 41,189, 88, 52,252,225, 39,159, 96, 14, 7,190,248,135, 95,242,196, 22,246,251,145, 97,
+ 59, 16,182, 91,252,246, 9,191,254,207,255, 15,207,159, 61,215, 75,125,141, 28,111,114,209,172,182,251,233, 85,194, 15, 18,162,
+253,247,190,208,239,251,230,207,125,203,239,178,180,189, 77,244,244, 46, 32,138,116, 49,202,197,159,109,116,158,178,224,140, 97,
+244,202, 81,246,193, 81,146,250,136,227, 49, 34,205,225, 92, 96,191,219,243,222,227,199, 92,237,118,120,107,105,185, 50, 31,143,
+196,168,251,245,220, 10,169, 86,166, 92,152, 99, 36,119, 30,179,181, 6, 27, 28, 33,184,174,244, 53,189, 74,173,218, 77, 55,131,
+147,182,218,243,140,233, 44,248, 98,200, 93,124, 39, 70,171,231, 82,213,230, 70, 87,154,154, 86,186, 77, 35,105,160, 66,243, 72,
+247,252,170,218, 95,139,149, 42,231, 89,231,103, 23,214, 18,159,186, 8,176,214, 61,245, 61,245,119, 23, 96,157,103,143, 63, 60,
+ 18,127,211, 75, 46,152, 55,132,110,247,229,147,231, 88,218,135,139, 51, 89, 35, 82, 47,252, 28,237,237, 66,186,135, 68,152, 15,
+138,159, 46,168,134,245,226,243, 58,161,128,245,245,171,181, 82, 98,214,157,104, 63,172, 68,132,176,221,104,134,119, 79,222,243,
+ 65, 65, 50, 52, 85, 11,231, 53,165,173, 17,194,134, 6, 28, 14, 71,230,105, 38, 37,101,198,123,231,212,142,102, 28,173,100, 54,
+ 99,192, 7, 79,173,133,113,115,165,129, 40, 24,118,143,119,236,228,199,124,250,249,151,196, 6,177,123,204,141,243,228,146,201,
+ 85,243,178,107,201,235,238,210, 89,139,120, 75,173,142,121, 62,146,143, 19, 83, 74, 36,129,221,227, 39, 60,122,148,121,249,234,
+102,197,206,234, 80,203,210,170,144,114,229,229,119, 55,252,219,127,251,239,214,110,108,179, 25, 9,206, 99,196, 18,227,140, 49,
+158,121,154, 87,120, 77,237, 73, 90, 57, 87,114, 58,170,141,195, 41,255,221, 25,163, 89,217, 57,145, 81,124,242,224, 7,110,143,
+ 7,140, 81,141,136,156,217, 65,157,243,186, 74,106,130,119,190, 23, 80,154, 40, 23,179,218,234,172,215,174,201,121,223,105,118,
+170, 72,223,110,119, 28,142, 7, 54,195,176, 94,226,186,231,173,136, 53, 58, 45, 43, 26,127, 91,187,112,111,177,181,154,174,142,
+119,206,247, 80, 22,229,153,167,152,112, 98, 21,186, 34,144, 75,198, 7,207, 28,147, 2,134,250, 25,102,173,233,163,246,182, 42,
+220,151,172,129,187,187, 91, 98,156, 72, 57,179,221,110,245,178, 15,150, 82,115, 79,199,203, 28, 15,199,213,134, 26,156,195,162,
+137,111,135,227, 1,138,234,111, 90,207, 52,111,165,226,141,226, 99,135,190,111,175, 89,167, 9, 62, 56,189,228,251,148, 33,166,
+164,171,189,222,220, 45,158,236, 84,106,143, 22,214,157,125,234,136, 97, 99,132, 92,162,114,222,251,247,196,216,158, 93, 96, 68,
+ 69,162,206, 48, 4,215,173,136,202,136,175, 57,169, 5,216,138,158, 71,165,210,150, 21,227, 34,188,236,148,186, 92, 50,222,118,
+139,109,127,198, 74,202,212,158,144,168, 69,140, 99,187,223,243,241, 79, 63, 34,132, 74,221,239,177,219,247,105,198, 33,173, 82,
+167, 3, 30,197, 32,231,175, 95,147, 48, 28,239,224,179,223, 93,243,205,243,223,242,249,171, 27,158,191,142,220, 30, 10,195,118,
+160,166,138, 56,135, 51,130,247, 22,191, 9, 76,211,204,225, 56, 67,135, 72,165,164, 34,230, 5, 19,190,196,210,150, 82,176, 85,
+187,116,235, 60,173, 40, 35, 98, 9, 85, 98, 65,180,155, 78, 9,172,218,176,201,197, 26,187,177, 49, 66,185,185,230,139, 23,207,
+217,147,216, 14,150,237,222,241,232,233, 35, 54,219, 71,124,253,197, 11,254,223,191,250,123, 14, 73,250,165, 78,123, 99, 67,190,
+ 94,146,103,167,220,170,212, 59,247,138, 47, 65, 32, 15,208,190, 30,182, 30,189,157, 42,246, 46, 84,232,187, 46,236,119,121,212,
+223, 86,124,156, 3, 22,228, 94, 22,251, 42, 37, 88,187,244,162,185,188,214, 48, 6,199,118,240,108, 67, 96, 74, 73,125,164,115,
+194,138,103, 51,108,216,239,174,184,218, 63,226,209,118,164,149,194,221,221, 13,105,142,196, 56, 19, 80,118, 68,226, 0, 0, 32,
+ 0, 73, 68, 65, 84, 75, 38, 23,237, 44, 20,193,169,246,183, 77,112,120, 55,168,186,211,187,158,141,222, 86,200,205,185,144,237,
+ 20, 41,171,228, 48,103,116, 87,222,138,142,201, 92, 15, 47, 17,175,248,217, 86, 11,148,204,224, 3,193, 91,229,140,231, 72,170,
+145,154, 10, 78, 6,130, 9, 93, 88,212,163, 44,215,212, 53,115,162,203,153,149,183,170,234,233,174,204,215,120,195, 94,252,173,
+236,247,243,189,124,187, 84,212,115,122, 92, 46, 85,233, 29, 55,202,217,154,101, 29,234,247,162,195, 60,164,221,184,188,244,197,
+156,196,156, 23,185,127,114, 38,192,123,147, 81,248,160,125,239,254, 37,127, 49, 21, 66, 71,170,231, 90,185,229, 32, 59, 1,138,
+234, 25, 86,151,213,214, 37,152, 30, 34,195, 26,223,169, 54, 69,237, 98,156, 15, 4,163, 57, 5,223,189,120,181, 50,225, 67, 8,
+253, 98, 87, 48,144,237, 43,149,237,102,208, 24,213,210,253,112,125,191, 88,142, 71,254,232,147,143,105,243,204, 87,223,189,228,
+ 38,102,166, 76, 31,133,235,101, 74,171, 12,195,128,152,158,181,213, 45,111,214, 59,108,211,142,172, 53,184,125,125, 75, 76, 21,
+ 31, 54,108,198, 13,183,135, 99, 23, 58,118,107, 99,210,117, 83, 77,141,219, 87,183, 56,111,248,224,189,247,113,198,242,234,213,
+ 43,230,249,168, 86,185,126,200, 47,182, 60, 69,184,234,193,108,172,238, 81,115,204,248,126, 57,197,105, 34, 56,139, 67, 86,241,
+214, 16, 6,140, 53,196,121, 98, 51, 14, 76, 81, 57,246, 41,198,149,249, 48, 14, 10,146,177,198,144,147,170,176,231, 56, 97,189,
+ 87,191,181,219,146, 75, 37,197,212,199,201,149,193,171,154, 60,117, 24,136,218,194, 4,219, 32, 88, 5,235,120,171,239,183, 20,
+ 35, 88,139,233, 35,232,187,195,157, 34, 88,151,181,149, 17,154, 85,251,236, 24, 2, 83,156,180, 16, 40,122, 65,217,254,121,250,
+165,235,237,239,191, 97, 24,214,160, 36,211,233,147,126,112,248,234, 24,198, 64, 74,115,183,186,169, 37, 45, 37,253,126, 57, 99,
+ 85,184, 85, 27,243, 60,209,156,142,173, 93,103, 11, 96,109,223,132, 41, 75,163,230, 76,233, 83,179, 57,206, 24,171, 52,209, 92,
+219,154,170,232,157, 70, 4, 59,107, 80,196,134, 96,131, 10,235, 90,183,194,149, 24,123, 56, 75,208,103, 39,232,247,212, 32,248,
+174,215, 8,110, 96,236, 65, 49, 99,112,138,123, 53,154, 29, 47, 43,184, 76, 71,208,185,159, 3,210,187,245,101, 98,208, 80, 63,
+ 56, 61,228,132, 69,223,208,161, 55, 53,103,106, 11,180,190, 90,216,239,175, 40, 30,252, 7,123,204,135, 31,211,100,160,181,140,
+ 76,215,212,151, 47,113,227,150,235,215, 55, 56,183,225,248,122,226,197,243, 35, 95, 62,159,248,230, 85,226,213, 12,207, 15, 19,
+ 25, 65, 43, 59,253,199, 57, 65,134,142,210, 21, 52,149,237,152,176, 38,224,188,234, 10,114,201, 29,236,163, 4,201,101,106, 88,
+186, 31,223,152, 37,236, 71,117, 2,182, 55, 76,182,234,200,221,219,158, 34,105, 78,235,109, 35,194,216, 42,110, 58,176,177,176,
+113,194,110,239,217, 61,218,226,198, 17,241, 59,254,175,255,227, 63,243,217,183, 25, 92,192,233, 94, 94,119, 94,156, 71,170,222,
+155,195,171, 42,179,157,237,152, 23,255,229,101, 26,181, 57, 47, 0,206,196,105,230,236, 2,125,168,203,126,232,242,126,219,238,
+252,161, 95, 59, 31,191,127,223,184,254,161,143,119, 94, 24,156,191,240,250,101, 86,130,181,108,188,229,106, 24,216, 14, 30, 99,
+132,155,155, 73, 1, 50,214,179, 25,183, 92,109,175, 84,113, 41, 48, 29, 38,230,249,192,156,102, 82,214,177, 90,105,101,221,159,
+121,107, 48,152,206,241, 30,212, 11, 12, 72, 45,180,162,182,159,218,131,104, 22, 10, 84, 93, 45, 40,178, 18,238,140, 41,235, 3,
+ 34, 93,189,186, 48,165,155, 21,245,223,118,133,190,105,141,193, 57, 6, 39,204,197,144, 74, 70, 98,196, 54,168, 98,176,185, 81,
+ 49, 61,131,125,193, 69, 46,194, 58,211,109, 24,181, 95,174,167,228,186, 78, 13,185, 4,234,223, 7,178, 44,133, 73, 51,103,211,
+ 22,185, 71,243, 59,187, 0, 91,123,131,234,118,238, 15,111,247,162,111,215,144,160,122,138, 91,149, 53, 58,150, 83,228,237, 25,
+ 3,254,126, 91,126,177, 42, 88,215, 18,178,126,153,151,182,192,118,150,208, 38, 23,194,251, 53,194,215,200,197,248, 18,148, 10,
+181,204, 16,140,177, 23,110, 19,245, 36, 59,188,247,108, 54, 3, 95,126,249,165, 78,135, 22,193,212,172,124,108, 45, 41, 12,193,
+ 5, 92,183, 24, 57, 31,244,245,170,149, 74, 37, 74, 98, 28, 3,135,195, 13,127,250,227,143,145, 20,121,118,125, 75, 48,142, 50,
+ 37, 92,240,202, 58,232, 25,219,173,139, 62,189, 15,164,156,104, 98, 17,107, 24,253,134, 52,205, 24, 26,121,154,200,115,193,137,
+101,235, 29, 49,197,117,149,226,197, 98,157,103,179,221,168,158,212,194,213,110,199,179,103, 95,173, 12,114,141,250,204, 26,176,
+210, 69, 86, 10, 58, 41,140, 97, 80, 44,107,206, 61,156, 68,168, 49,225, 4, 28, 13, 39, 2, 37,227,125,192,136,213, 51, 36, 25,
+106, 74, 12,214,174, 57, 8, 85, 52,115, 30,151, 84,180,229, 7,140, 21, 98, 42,157,169,174, 15,219, 60,205, 10, 76,105, 13,111,
+245, 57, 9, 33,172, 23,156, 89,158,161, 14,131,176, 13,230,146,113, 75,212,112, 83, 11,159, 23,207, 20,103,182,195, 64, 41,133,
+ 16,188,210,250, 98,210,247,177, 88,230,121, 34, 39,197,164,230, 78, 0,116,198,145,139, 98, 85,165, 95,206, 11,237,114,121, 38,
+150, 21,204, 28, 35,219,237,150,121,154, 86, 27,155, 49,134, 56,167,149,230,104,141, 78, 59,172,181,132, 97, 32,199,164,236, 11,
+163, 25,242,166,139,233,188,247, 74, 4,220,140,212, 90,152,167, 25, 55,216, 78, 10,236,128,174,218,167, 40, 85, 21,239,154, 79,
+ 94, 48, 24,114,156,207,222,230,109,229,251,151,210, 86, 1,168,244,108,116,103,148, 5, 63, 56, 7, 45,247,181,165, 80,115, 63,
+171,122,208,209,226,197, 87,181,120, 91,167, 23,218, 56,104, 88,137, 69,186,134,161, 82,171,244,105, 64,235, 36, 59, 85,191, 67,
+165,180, 66,204,145,143, 54, 79, 9,251, 1,243,225, 19,216,238,145,102, 33,223,144,126,255, 91,234,171,215,184, 15,159, 18, 30,
+ 61,225,230, 55,191,103, 24,183,220, 92, 63, 39,150,162,201,133, 83,161, 96,152,172, 64, 82,139,167, 18,239,192,123, 67, 76,113,
+165,254,105,194, 92, 98,142, 89,145,204,198,116,145,220,105,101,177,188, 94,170,101,144,211, 68,175,159,113,174, 45, 78, 25,181,
+ 27, 42, 39, 65,135,179,170,193,104, 12,210,240,173, 48, 24,199,110,227,184,218,109,240,195, 64,216, 61,230,151,191,249,138,255,
+239,231,191,231, 54, 15,100, 41,184,122,143,191, 78,123, 64, 55,188, 36, 20,157, 95,249,139, 95,123,133,178,220,103,106,179, 90,
+228, 22, 49,197, 82,125, 62,212,101, 47, 23,236,249,175,203,247,120,142,223, 54, 74,255, 33, 30,251,119, 77, 9,212, 74, 97, 87,
+239,237,162,168,220,245,127,156, 17,142,199,169,191,169, 28, 97,220,176,221,108,241, 14, 90, 58, 82,128,212, 20,122,145,107, 33,
+150, 68,105,170, 94, 13,198,234, 88,170, 63,136,214,185,222,169, 65, 42,153,146,210,250,250,106, 17, 80,116, 79,184,196,189,222,
+159, 9, 75,198,114, 98, 7,215, 86, 25, 59, 13, 47,151,204,113,154,201, 49, 17,172, 16,156, 97,112,162,192, 15, 99,113, 93,200,
+211,114,197, 15,163,130, 77, 82,187,200,143, 95,123,237,123,202,243,197,114,199, 58,209,184,223,205,158,189,222,114,242,255,183,
+181, 30, 84, 1, 84, 79,226, 88, 77,241,235,199,190,199, 63, 56,191,118, 31,178, 44,190, 41,196, 59, 27,251,159, 41,237,245,196,
+144, 7,199,235,237,188, 43,151,115,107,231,249, 34,234,100,253,147, 7, 22, 9,114,110,201, 92,138,143,158,192,213, 58,166, 19,
+192, 56,131,149, 19,153, 13,212,102,102,173,163,230,194,205,205, 77,191,104, 52,188, 37,151,138,239, 93,148, 51, 74,135,163, 54,
+ 44,170, 66,110,237,196,184,111, 34, 28, 74, 66,172, 65,230,153,143,119, 3,127,242,209,123,212,150,120,118,136,236, 7, 71,182,
+142,233, 56, 97,164, 97,169,136,213,206,223,208, 72, 85,145,171,173,195, 83,156,241, 8,149, 82, 51,141, 12,166, 49, 90,195,198,
+141,221,188,161,211, 6, 63, 12,136, 85,168, 74,179,134,155,215,175,186,147, 67, 11,160, 33,140,228,154,215,105, 79,205, 10, 29,
+ 25, 66,160,100, 93, 59, 52,116,140, 77,107,120, 99, 9, 2,222,160, 23,180,177,212, 56, 97,124,160,230,196,102, 8,164, 24,251,
+193, 15, 27, 31,152, 83,210,238, 55,205, 24, 42,121,158,168, 98,240,222, 82, 98,195, 59,229,118, 91,171, 41,114,130,102,199,199,
+ 28, 73, 37, 81,106,233, 62,107, 71,156, 99,215, 29, 20,134, 48,208, 74,237,209,168, 21, 47,150,105,158,144, 82,240, 13,156, 88,
+ 18, 85, 59,174,218,112,214,145, 58, 21,172,246,160,156, 69, 77, 79,109, 84,209, 49,123,238,162,214,229,220, 91, 46,182, 82,202,
+234, 65,111,173,169, 45,182,234,100,111, 24, 6,117, 9,136, 96,140,250,213,167,121,166,181, 70,156, 83,127, 29,181, 80,136,157,
+111,111, 23, 0, 80, 74,218,221, 59,125,243,214, 86,251, 42, 69,207,156,148, 42,166,118, 73,172, 53, 56,175, 49,194,173,104,243,
+ 88, 82, 82,104, 17,130,179, 75, 88,143,254,123,240, 94,155, 10,107,123,246,122, 89, 69,162,166,235,130, 82, 73,171,181,183,182,
+ 74,109, 5,219, 41,137,181,235,150,164, 53, 77,186,148,178,138, 57,151, 73,178,179,210,195, 99, 58,236,171, 71,198,142,155,192,
+102, 59,176,217, 4,182,251,145,156, 39, 30, 61,121, 66, 27,182, 96, 3, 34,141,244,226,107,166,103, 95, 17,252, 64,125,180, 97,
+247,222,143,185,125,246, 45,243,139,175, 41,249,142,199,123,207,198,127,192,223,253,246,115, 74,174,148,230, 72, 2,206,169,215,
+127, 28, 3,219,113,196,198, 72,201,145,220,189,247,165, 67,214,106, 45,189, 96,211,247,103, 46, 73,225, 66,198,244,215, 95,139,
+ 36,211, 39, 78, 70, 12,210,164, 83,226, 84, 11,100, 27,167,175,141,138, 69, 93, 70,174,233,215, 25,188,103, 8,142,237,102,203,
+110,243,136,216, 2,255,254,255,252, 47,124, 55, 21,178,169, 20, 49, 39,161,156,172, 59,245,101,204,219, 78,142,226, 5, 36,191,
+ 28, 82,173,174, 7,224,114,238, 45,135, 74, 59, 15, 79,235, 75, 89,211,195, 98,238,119,206, 15, 41,144, 31, 2,129,188, 75,252,
+166, 73, 65,151,115,133,250,144,199,248,162, 19, 55,111, 87,234,247, 74,105, 17,108, 88, 35,108,156,103, 19,188, 90,214, 68, 72,
+115,226,238, 56,171,144,197, 15,157, 66,165,220,238,133,251, 62, 19, 40,210,200,173, 32,206, 48, 90,221, 45, 74, 93,104,112, 22,
+172,250,223, 99, 78,148, 86,201, 41, 51,167, 89,149,200,214, 96,219, 73,161, 94,155, 90,152,122,144,243,122, 1, 22,150,216,197,
+110,121,202,153,220,170, 70,127, 2,115,202,148, 6,227, 48, 98,173, 42,178, 91, 87, 6, 15,198, 97,105,196,156,176, 54, 43, 13,
+202, 52,102,116,255,218,250,156, 92,150, 84,182,190, 18, 88,211,243,106,237,152,195,118,239, 98,235,242, 57, 89,190, 23,173, 63,
+188, 39, 10,155,118,209,237, 44,104,189,174, 31,160, 33, 23, 44,129,115,238,251,247,173, 91, 46, 7, 76,125,120,223, 22,152,200,
+ 73, 93,127,218,185,159, 42,165,251, 22, 60,125, 75,212, 53, 42,242,162,150, 90, 43,154,203,101,252,249,207, 44,226, 32, 61,176,
+ 59,110,163,251,138,141,152,238, 19,215,103,204, 57,219, 15, 67,221,223,165, 57, 50,142,154,216,230,189, 35, 38, 85,109, 75,211,
+131,128,146,251, 33,216, 39, 15, 58,146,161,212, 70,179,173, 3, 44, 26,222, 91,142,211,129,167,187, 13, 79,183, 59,174,115,227,
+250,246,208,133, 73,181,115,212,181, 11, 42,173, 17,198,141,218,158, 58, 85,204, 26,203,213,227, 71,220, 92,191,194,160,228, 53,
+ 93, 91,203, 58, 33, 52,222, 19,167,153,146, 42,233, 24,123,218,154,231,238,230,154, 86, 42,166, 9,193,122, 54,187, 61,215,183,
+215,228,190,195,205,165,244, 0, 18,117,123,228,121,238,113,161, 5,169, 48, 24,139,167, 96,170, 70, 18, 15,206,246, 20,179,220,
+167, 78,134, 26,245,185, 52, 93, 41,101,204,192,225,112,192, 58, 7, 22,182,251, 61,215, 61,123,222, 25,163, 99,254,254,252, 45,
+234,114,181,139,233,250, 98, 28, 71, 82, 74,171, 59, 4,105,228,164, 23,163,179,138,252,181,214,146,230,132, 55,150, 60, 71,213,
+ 33,148, 74,203,149,148,116, 2,176, 4, 49,231,101,185,105,165, 23,112,170,214, 23,235,250, 37,101, 73,157,249,207, 34,186,235,
+140,136,148,103, 21,199, 25,213, 85,212, 90,217,142, 35, 37,183,190,250, 82, 42,219,178,218, 91,223, 15, 57,234, 37,210,244,125,
+167,239, 31, 13,100,209, 24, 84, 97, 58, 30,214,203,182,118,216,142, 24,233,106,237, 14,214,178,166, 79,211,164,139,209, 12,222,
+ 12, 4,175,120, 87,103,245,236,181,198,116, 44,118, 67,122, 12,172, 17,206,110, 16, 86,149,127, 46,122,174,228,114, 18,221,182,
+ 53,136, 74, 11,111, 47,203, 0,176,172,182, 65,181,225,105, 32,138,233,222,110,189,208, 13,227,224, 24,130, 39, 12,150,253,163,
+ 13,187,237,128,223, 25,220,224,251,218,192, 66,139, 28,191,251, 22,239, 2,245,131,247,185,169, 19,239,111, 60,175, 95,190,228,
+230,243,223,241,201,123,123, 98,118, 60,251,250,134,193,171,157,209,244,177,121,237, 42,116,231,117,186, 53,248,128,136,167,222,
+ 30,184, 61, 76, 90,188,157, 79, 96,141,130,155,242,178,162,172,149,210,237,149,139, 10,222,172,226,235,211,153, 84,155, 22,231,
+ 86,172, 6,187,116,113,160,105,116,235,169, 37, 4,203, 56,142,108, 54,143,168, 50,242,239,255,195,127,226,211,111, 94,146,100,
+ 67,173,122, 31, 56,221, 25,155,179,101,242,217,129,186, 30, 81,186, 67, 53,253,226, 64,186, 48,255,220,175,218, 63,209, 5, 74,
+129, 92, 10,149,222,150,148,246, 67,216,220, 43, 34,180,117, 79,245,153, 86, 93,250, 3, 33,167, 71, 71, 5, 10, 93, 20,212,238,
+117,113, 15,209,205, 46, 4,120,168,175,208, 84, 13,146, 24,156, 97,235, 13,163, 95,160,250,133,169, 20, 74,159, 58, 88,105, 88,
+ 83,168, 37,146,197,208,140,195, 72,135, 18,148,140,115, 70,185,217,162, 99, 39,221, 96, 56, 74,237,145,176,173,146,114,234,200,
+208,210, 61,168, 65, 15,147,170, 30,198,154, 51,181, 38,141, 20, 93,146,224,144, 62,190,237, 56,222,190, 14,113, 70,133,121,216,
+165,123,218,224, 0, 63,238, 9, 33,116, 96, 65,193,180,132, 33, 97,131, 65,230, 10, 49, 98,208,110,231,104,234, 34,243, 84,145,
+ 87,223,135,139,152,254,152, 44,118,181,254,140, 44,118,200, 21, 88, 36,212,118, 30,106,223,247,113,114, 62, 94,172,151,173,242,
+114,225,175,122,130,119,139, 26,223,154, 41,176,236,227,219, 89,205,128, 57, 11,116, 49,171,144,111, 29,207,183, 83, 22,253,165,
+ 16,111,209, 22,180,147,154,116,125, 54,213,149,127, 73, 53,236,207,144, 61, 61,157,102, 81,136,247,255, 47, 14, 6, 13,248,105,
+ 4,111,112,198,234, 37,159,146, 90,219, 68, 83,172,156,115,140,163,134,187, 56,111, 52, 60, 99,174,148, 92, 59,251,201,208,138,
+193, 24,223,189,176,141, 66, 70,170, 16,140, 83, 78,182,179,124,125,188, 69, 70,131,115,129,134, 97,240, 3, 37,169, 10, 31,167,
+184, 79,223,153,227,211, 28,241,222, 18,188,233,192, 28, 75,216, 8, 67, 25, 40,185,118, 47,110, 85,234, 97,211,139,106,202, 71,
+ 48, 22,135,233,157,136, 96, 22,201,125,179,132,160, 30,253,227,225,142,154,116, 44,109,173, 87, 53,243, 16,186, 14,162, 96,139,
+138,209, 44, 66, 16,141,147, 53,165,170,109,180,199,133, 90,111, 25,173,163,161, 95, 79,109, 26, 34, 34,222, 80,170,174,141,156,
+245,164, 57, 43, 49,110,142,122,249,214,162,171,137,214,216, 12, 35, 49, 39,156, 83,108,148,146, 30, 23,171,151,193, 58, 81, 98,
+158,115,228,220, 95, 39,180,216,159,142,135, 30,223,106, 9, 11,249,173,115,206,105,122,240,151,166, 49,201,213,104,161,209,250,
+168, 94,223,247, 74,144, 43, 89, 83,241, 20,189,171, 98,188, 90,171, 2,165,140,213,247, 94, 47,228,151, 66, 74,140, 85,186, 88,
+158,187,120,173,172,161, 82,193,235,217,108,122,148,172,235,180, 55, 75,207, 12, 40, 69, 47,112,235, 86, 93, 73,107, 11, 2, 88,
+ 11, 95,165,161, 73,159, 40,244,243,196, 10, 70, 60,224,122, 66,223, 9, 38,228,157, 50, 24,232,239,247,193, 5, 74,158,200, 53,
+245,241,185, 22,155, 57,118, 68,114, 23, 25, 54,178, 58, 8,172, 69,204,165,240, 89,181, 59,210,105,138, 94,177,190,206,174, 17,
+185,234,186,176, 74, 99,116,150,237, 16, 24,189,193, 7,203,110, 27,120,250,228,138,199,251, 45,110,231,160, 36,218,124,139,173,
+ 51,229,120,131,153, 18, 50, 60, 97,248,240, 15, 57, 60,255, 27,210,231,159, 81,175, 95,242, 23,255,252,207,200, 47,239,248,221,
+111,159, 83, 83,198, 88,199,118, 24,136, 83, 38,231, 70,118, 22,219, 12, 83,201,232, 96,158,142,219,173,132,102,244,194, 30, 61,
+ 37,102,108,169, 24,229, 60, 19,156,161,101, 93,225,232,215, 89, 46,148,237, 86, 26,210,146,246,226,226,122,100,180,244,224,167,
+190,206,148,222,144,228,202, 48, 90,118, 91,195,238,201,158, 54, 62,230, 63,252,151, 95,240,187,103,175,153,197, 82, 68,225, 65,
+ 77, 87, 87,250, 7, 91,189,167, 20, 22, 89, 23,132,122,248, 45,217, 91, 61,169,203,176,118, 99,173,213,183,120,188,121,103, 23,
+126,255,242,190,191,107,127, 67,220,118,207,222,180, 0, 79,222, 64,160,182,126,176,116, 97, 82,251,158, 49,189, 94, 50,102, 45,
+104,164, 63,244, 94,132,193, 7, 6,231,215,220,226,152,146,118,191, 37,227,236,160, 63,159, 51,198, 44, 80, 7, 93, 85,232,190,
+ 77, 48, 70,119,108,115, 41, 10,226,247, 67, 23, 81, 40,236,161, 81,149,160,100, 61,174,199, 86, 66, 31,183,229,220,131, 46, 10,
+214,178,218,107, 84,132,197,250,166, 81,165,232, 34,170, 80,123,210, 60,171, 80,198, 88,135,160, 99,222,230, 3, 98, 53,192,163,
+ 21,237,213,116,100,106,136,199, 3, 37,101, 48,170,128, 53, 61,154,113,225, 23, 40, 17,235,140, 33,214, 78,254, 85, 89, 65, 10,
+230,222,107, 44,111,136, 16, 31, 18, 82, 46, 63,174,235,130,167,173,170,251,239, 3, 24,125, 95, 78,251,131,207,160,112,145,174,
+133,188,219, 70,121,185,207,231,193,164, 54,145,246,134, 74,222,244,175,255, 34,204,166,246, 75,128,165,139,119, 39,181,124, 41,
+ 12,195,118,221,167, 46,171, 6,231, 29,210,160,196,194,102,179,225,230,213, 45,166, 42,232, 68,213,192,125, 4, 47, 11,175,161,
+123,143,105, 52, 3, 71,132,187,220, 85,220,181, 64,138, 72, 85, 43,164, 65,173,111, 78, 23,128,120,163,157,205, 48, 40,124, 68,
+188,103,187,191, 98,138, 25, 36,177, 49, 35, 6, 81, 5,123,133, 57, 39, 42, 16, 92, 87,133, 59,135,115,190,103,125, 27, 82, 85,
+225,208,116, 56,170,158,196, 41,253,108, 28, 6,196, 89,142,243, 68,156,102,188,211, 2,185, 81, 85, 49, 94,128,166,251, 76, 35,
+ 66, 48, 66, 43,133, 98, 13,185,101, 90, 51,108,195, 70,231, 84, 70,245, 41,135,227, 65,223,195,198,224,199,160, 69, 78, 23, 47,
+197,162,243, 99,103, 60,199,227,145,138, 48,184, 13, 41, 30,241,131,210,236, 98,140, 64, 99, 24,130, 6,188, 76,202,199,207, 69,
+145,174, 11,154,185,228, 76,179,141, 27,160, 90, 97,179,217,112,119, 60,178,123,250, 72,167,110,181, 50,205,147,198,240,246, 93,
+170, 17, 84,181,237,122, 60,239,168, 10,243,142,189, 83, 69,126,183, 64,130,244,120,218,172, 94,243,222, 57,174, 51, 48,171, 97,
+ 56,206, 40, 5,176,212,178, 10, 65, 77,239,154,107, 46,212,162,224, 23, 39,203,120,101, 25,239,215, 51, 39, 83, 91, 47,203,229,
+221,103,236,169,248,174, 57, 97,250,179,232,140,103,154,142, 56,103,250, 46,188, 94, 76,205,106,159,134,213, 82,187,163, 67, 71,
+235,234, 14, 72,157, 62, 9, 86, 78,133,179, 93,166, 91,253, 61,178,100,197,203, 66, 58,236,103,162,181,166,239,182,141, 78, 42,
+141,178, 88, 93, 8,140, 59,207,118,235,120,252,222, 21,251, 71, 59,118,143,118,236, 63,120, 76,138, 17,111,129,122,100,250,236,
+119,216,249,136,140, 91,204, 38, 16,194,200,231,255,233,255,230,189, 15, 31,179,223, 61,226,187,151,183,188,190,189,229, 48, 11,
+115,204,186, 94, 16, 75, 66, 85,237,227,232, 85, 28, 74, 83,218, 93,109,164,152,201,177,210,156,165,166,137, 32,130, 41,170, 79,
+243, 65,147,214,194, 96, 16,122,114,161, 49, 20, 17,114, 45,148, 10,217, 88, 74, 85,118,136,171,167,172,248,133,255, 0,165,219,
+128, 27,206, 13,248, 33, 16,182, 87,188,158, 50,127,243,235,255,198,215,223,222, 81,237,160,104,227,245,123, 42,157,149,248, 32,
+186,109, 81, 42,203,137, 30,215,150, 31, 43,106,178,153, 11,246,216, 91,169,109,247, 47,242,183,197,109, 62, 4,151,185,223,149,
+157,255,154, 57,199,146, 46, 36,158,229,243,232, 69,138,109,246,141,204,247,115, 65,242,125, 5, 54,107,232, 75,195, 91,199,198,
+233,155,167,181,166,232,215,172,123, 55,239, 45,173, 21,114,214, 29,145,250,133, 59,213,169,182,117, 82,145,208,195,196,248, 81,
+ 9,112,214,105,248, 74,174,136, 81, 37,232,118,227, 16,169,148, 18, 73, 73,149,242,181,100, 85,221,122,229, 6,235,234,185,116,
+193,226,217,215,221,195,103,150,162,172, 46,170,241, 12, 25, 48, 53, 48,140, 91,160,113,156,142, 36, 81,222,188,180, 12, 37, 51,
+122, 67,112,158, 97,187, 95,201, 85, 34,118, 29,185, 55, 89, 43,184, 55,112,186,102,141,103,237,241,178,247,216, 50,139,103,251,
+124, 60,125,159, 10,119,234,112,251,122,125,117, 92,188,221,249,240,206, 60,245,127,164,167,253,226,130, 62,139,240,123,120, 53,
+211,116,117, 33,114,118,129,183,245,243, 71, 22, 71,197,201,210, 89,115, 89, 51,200,215,137,199,218,236, 11, 74, 35,173, 61,168,
+161,189,225,204, 48,198, 80,114,233,221,161,244,106,190,187, 1,122,132,103,169, 25,135, 87,244,102,213, 46, 56,231,218,167, 40,
+130, 53,129,215,243,204, 31,127,242, 17,223,188,122, 65, 76,134,187, 89, 85,246,214,131,163, 32,166, 82,106, 35, 56,207, 28,103,
+106, 2, 27, 44,143,159, 62,162,138,168,202,188, 22, 76,112,189,163,159, 57,246, 48,148,113, 28,181, 72, 45,203,118, 72, 9, 89,
+105, 78, 43, 54,118,179,217,170, 66,189, 36,230, 28,149, 83,223, 76, 47,100, 6, 30, 95,237, 57,222, 92, 51,140,129, 54, 37,164,
+ 85,156, 24,140,212, 21,216,226,208,212,192,210,132,205,184,227,120,123, 84,239,189,243, 28,166, 59,140,115,154,120,230, 45,169,
+ 19, 16, 75, 85,229,183, 51,150, 57, 69,156, 23,156, 11,122,209,199,136,113,150,121, 78, 56,167,227,105,122,162,155,179,142, 38,
+ 16, 59, 1, 14, 99,116,172,238, 44,227,110,195,225,120, 36,209,192,121,174,211,204,230,106,203,235,195,173, 18,195, 90, 67,172,
+ 16,188,195,148,130, 31, 22, 43,215,160,116, 64,209, 9, 72,235, 33, 37,210,255, 59,198,116, 54,121, 50,212,110,253,202, 85,207,
+ 20, 17, 77, 46, 51,152, 62,230,214, 21, 2,125,210, 32,221,206, 69,105,180,146,217, 14, 3,173,100, 77,110, 67, 40, 57,107, 76,
+243,250, 12,246, 92, 9, 99, 52, 70, 85,206,198,200, 62,172, 12,248,147, 46,234,116,230, 0,164, 84,116,165,215,139,218,148, 52,
+ 42, 85, 47,231,172, 14,145,190,111,214,128,156, 62,185, 66, 48,173,195,194,138,197,186, 19,150,220,116,113,176,237, 33, 66,117,
+117,244,176, 82,249,130,115, 12,222, 18,156,193,142,142,171,167, 87, 60,121, 52,242,222,251, 87,108, 55,129,253,126, 68, 2,248,
+237, 72,187,157, 72,229, 25, 55, 95,124,201,163,237,192,248,241,123, 32, 19,245,230,128, 73, 19, 31,252,225, 31, 83,158,189,228,
+219,175,191,229,245,113,230,217,203,137,235,227, 76,174,186, 30,170, 52, 98, 86, 1,157,237,235,188,185,100,226, 20,187, 47,221,
+ 81, 91,101,227, 2,174, 9,219,161,243, 37, 6,207,213,110, 68,122, 40, 79,112,129,253,230,138,215, 55,175, 48, 94, 56,204, 19,
+ 47, 94, 29,168, 38, 96,113, 26,145, 43,149, 86,123,160, 79,171,171,155,201,121,203,118,187,161, 96,248,251,223,125,197,221, 20,
+153, 19, 36,172,218, 14,173,167, 54,101,244, 27, 99,112,235,156,146,246, 22,212,171, 92, 80,179,206,127,254, 33, 15,239,187,172,
+101,239, 58,128, 31,218,147,126,111,215, 69, 91,119, 46,114,134, 2, 49, 29,180,177, 62,140,103,170,124, 46, 40,105, 15, 11,173,
+ 90,203, 24,129, 96,173,170,110,155,102, 27,151, 90, 73, 77,213,223,173,234,184,195, 59,175,111, 94, 17, 98, 44,212,178,104, 10,
+ 58,211,220,122,154, 88,106,161,191,153,181,243,240,206,244,238,191, 40,233, 43,103,114,154,187,103,180,225,157, 94,172,166, 23,
+ 41,186,127,213,224,150,229,123, 82,123,158,244,217, 82, 24, 74,189,176,163,149, 28,177,197,107,165, 94,133, 88, 33, 87,139, 55,
+170,180, 79, 41, 51,120,203,214,171,122, 57,231,140,109,130, 23, 52, 84, 96,201,150,191,231,134,144, 53,185, 73,206,118,223,239,
+238,166, 31,250,222,182,243,209,247, 25,145,238,109, 68,184,243,105,206,195,207,147,172, 59,253,135,133,116,237, 12, 80,211, 63,
+255, 7, 62,206,249,223,115, 81,168, 46, 41, 92,152, 11, 31,233,233,166, 94,130,128,148, 95, 45,125,103, 94, 22, 69,107, 91,184,
+247, 42,111, 44, 93, 48,179,140,222, 74,202, 12,195, 22, 87, 51,165,229,158,142,150,161,251,221,115, 46,125, 85,161, 66, 35,206,
+ 58, 38, 99, 5,162, 30,206,235,238,187, 9,205, 5, 98,201,248,193,240,211, 15,158,114,119,251, 5, 12, 1,194, 72,169, 19,166,
+214, 85,225, 95,114, 83,200, 70, 41,108,198,173,170,235,123, 18,160,183,234, 99,143, 41,235,222, 91, 56,203, 80, 87,255,123,234,
+123, 65,211, 15, 38, 31, 2,161, 91,197, 20,128,163, 19,131,105,154, 78,226, 88,224,120,125, 67,141,145,106, 12, 38, 87,194,234,
+213,237, 88,100, 84,128, 52,248,129, 54, 39, 72, 9,219,247,241,165,137,138,235,172, 97, 46, 42, 78, 45, 69, 71,211,198, 58, 98,
+201,196, 82, 73,125,171,212, 68,136,109,225,110, 91,154, 21, 98, 79, 99, 51, 78,119,220, 83,154,123, 46,249, 34,102, 85,104,141,
+245,134,155,233, 14, 99, 13,105,206,234, 65, 54,144,110, 11, 65, 26,174, 11,153, 76, 79, 52,116, 86,201,112,187,205,176, 42,251,
+ 23, 65,152,177, 26,190,226,172, 94, 96, 94, 92,183, 60,210,125,204, 3,113,158,113, 34,116,169, 44,251, 81, 61,210,210,244,156,
+ 75, 81, 39, 34, 45,233,234,101, 78,221, 14,103, 13, 57, 23,213, 42,228,140,113,158, 48, 12,184, 14, 19,171,165,244,236,121,117,
+202,196, 24,123, 66, 90,162, 36, 21,236, 22, 78, 43, 44, 99, 85,155,161,222,107,117, 76,136,156, 20,233,165,171,248,109, 53, 29,
+208,107,250,170,169, 94,228, 66,172,197,125,183,216, 45,126,124,133, 19,185,158, 48,121, 54, 25, 89,100,228,221, 77,162, 63, 39,
+120, 99,216,239,119, 60,122,186,101,255,120,203,147, 39, 59,246, 87, 35, 79,222,219,171,183,124, 99, 16, 47,180,155,137,223,255,
+237,175, 56,196,153, 71,255,234,127,166,120, 65,174,191,229,246,215,191,225, 39,127,241, 71,180,187,196,237,151, 47,120,241,236,
+ 37,135, 88,185,142,153,155,105, 38,225,213,223,223,250,132,216,185,190,195,183, 76,135, 3,226, 2, 34, 66,172, 17, 17, 75,142,
+ 32,165,193,182,242,254,211, 13,143, 31,239,153,111,143, 24,175,161, 91, 87,131,229,106,172,252,197, 79,127,194,159,254,241, 71,
+ 20, 18,215,119,145, 95,252,195,103,124,246,197, 53,165,121,134,160,244, 63,154,174, 53,196, 26,182,187,145,253,126,203, 92, 18,
+207,190,126,201,221,220,152,178, 35, 73, 35, 35,212,158, 89,111,140,165,137,161,104, 82,241, 69,166, 84,135,156,220, 27,157, 46,
+130,134, 11, 44,236,137, 18,126,238, 69,126, 23,194,245,221,104,207,119,100,100, 63,176, 67, 61, 83,192,173, 66, 11, 89,243,208,
+219,170, 78, 62,143,217,148,123,221,163,188, 1, 20,161, 43, 17,245,133, 9,206,170,226,179, 7, 34, 52, 81, 48, 64, 41, 42,236,
+113,253, 66,111,173,105,228, 99,174,136,120, 61,124, 69,187,230, 82,117, 12,229,195,168,222, 91, 81,203, 88,201,153, 84,148, 36,
+ 85, 83,164,150,164, 84,170, 86, 49, 86,214,177,119, 42,121, 69, 64, 46,250,128, 69, 43,160,223, 49, 61,120, 52, 57, 77, 78,246,
+168,206,157,110, 34,204, 57,234, 21,214, 59,235, 50,207, 20, 67,199, 49,194,113, 78,148,148, 24,131, 2, 80, 92, 5, 47,130, 23,
+161, 72,123, 11,174,245,116,161,157, 43,223,239,143,204,229, 7,172, 98, 46, 60,222,114,182, 23,191,255,231,133, 11,148,241,178,
+218,150,139,103,240, 68,188, 61, 41,214,219,133,127,124, 41, 66,196,112,225,253, 63,127,230,207,159,185,101,124,126,185,187,239,
+ 31,191,158, 24,239,247,247,242,166, 7,126,180,218,167, 15,237,100,239,180,198,146,146,142,225,164,163,170, 90,133, 24, 19, 33,
+231, 46, 62,242, 43, 45,144,166, 23,245,154,105,180, 48,249,251,123, 49,231, 68,112, 65, 47,241,218,200, 89,237, 85,181,170,178,
+ 29,111, 56, 28,111,249,248,241,158,235,171, 45,175,178, 33, 90,199,148, 12,181, 9,177, 20,196,120,170,104, 20,104, 24, 84,117,
+ 63, 29,238,176, 67, 32,120, 71,188,131, 41,206, 93,240,164,248, 82,245, 74, 23,172,243,218,205, 56,203,102,179, 85, 27,155, 83,
+ 97, 81, 18, 21,130, 25,111, 25,198, 65,189,246, 13, 54,227, 6,151,102,200,153, 50,207,120, 84,199,226,187,101, 83,140, 90,247,
+164,213,213, 6, 20,231,185,107, 76, 42, 77, 44, 33, 56,110, 15,119,152,193, 17,163, 78,205, 74, 41,180,172,194,191, 44,153,140,
+ 16,107, 37, 55,214, 98, 34, 67,223, 21,131, 25,130,250,181,115,162, 54,131, 12, 1,111, 45,116, 46,249, 92, 10, 91, 63, 98, 4,
+101,231,247,181,220,198, 26,198, 94,212,120,163, 83, 19,223,189,255,166, 53,194, 16,104, 6,194, 16,200,113,214, 81,118,191,152,
+ 90,109, 76, 83, 2,107, 59,107,189, 59, 26, 88, 44, 90,142,146, 35,227,232, 41, 8,211, 52,119,172,116,237,236,126, 77,168, 19,
+209,206, 87,196,172, 54,171,148, 83, 23,146,169,199, 60,149, 66, 67,173,122,131, 15, 88,107, 58,209,176,225,230,136,115,110,141,
+225, 85,186,155,118,245,151, 78,165,118,193, 84, 88,166, 75,102, 21, 82, 47,111, 70,179,190, 95, 90, 61,173,182,140,145,206, 55,
+ 63, 59, 35,140,166, 98, 89,107,186,231, 92,223, 67,206, 14, 90, 8,247, 41, 73, 41, 21,223,215, 22, 98, 13,173,170, 6,100,179,
+ 9, 60,190,218,178,223, 13,108, 54,150,237,104, 25, 55, 30, 51,170,184,144, 57, 49, 95, 79,220,125,253,130,237,207,126,194,240,
+209, 71, 28,190,249,146,252,219, 79,121,186,127,130, 15, 35,119,191,249,156,223,254,254, 25, 95,126,119,195,215,119,133,231,215,
+ 7,230,102,250, 68,163,173, 54,212,215, 55, 7,198, 33, 96,165,244, 24, 95,181, 58, 55, 43, 72,169,120, 44,219,237,192,199, 31,
+ 63,162,230,107, 62,120,188,229,117,173,188,124,121,131, 56,157, 98,140, 87,142, 54,221,224,242,158, 71, 59,199,199, 79,158,242,
+ 56, 56, 70,243, 27, 24, 6,126,246,211,159, 34, 2,135,227,204,235,215,119, 28,166,136, 56,167, 92,253, 67,194, 5,135,177,142,
+146,202,137, 95, 34,130,105,102, 53,217, 34,224, 90,123,168, 59,111,103, 59,244, 51,208,204, 27, 49,169,103, 56,208,251,209,169,
+255,132,172,236,239,219,153,222, 31,207, 47, 85,228,162,178, 94, 41,120,237, 50, 27, 94,206, 60,196,230, 30,220,108, 21,114,119,
+ 16,140, 38,219,170,210,213,116,198,117,233,182, 25,233,234,215,101, 52, 63,132, 65, 51,111, 99, 36,149,130, 49,154,152, 86,154,
+ 16,155, 90,128,140,181,120,235,113,182, 81,243,196,156, 53, 73,138,166,145,156,139, 32,209,200,226,107, 54,148,154,200, 69,187,
+141, 82,117, 44,186, 42,248, 47, 22,212,253,162, 40,253, 98,239, 10,173,101, 29, 33, 61, 66,179,149, 68,110,218, 17, 26, 17,172,
+202, 30,105,102,209,174, 11,169, 65,157, 35, 99,208, 55,189,171, 21,215, 17,151,114,241,250,159, 94,231,229,118, 49,139, 63,251,
+ 7,176,246, 31, 90,173, 92, 38,241,201,137, 96, 39,111,238,228, 21,107,219, 46,236,103,151,182,115,233,252,250,203,189,247,253,
+ 96, 25,228, 94, 60, 44,231, 1, 47, 39, 1,104,163,190,117, 74,212,206, 4,130,167, 98,192,188,193,130,175, 93,197,187, 28,110,
+203,132,171,228,178,218, 25,181,211,209, 2, 34,197,196,184,241, 42,174,169, 32,173,244, 2,161,219,249, 22, 27,161, 57, 47, 60,
+186,216,176, 95, 24,244, 24,203, 38, 90,244,122, 35, 92,223,222,240,135, 31,254,136,240, 7, 63,229,139,235, 59,190,190, 59,114,
+157, 26, 45, 4,124,211,172,232, 34, 2,198, 18, 75,161,220,220,226,189,231,238, 48,245,174, 81,243,179, 99,202, 29,244,163, 36,
+ 57,101,125,123,156,245,248, 16,184,187, 61,168,181,199, 58,154, 81,125,136,247, 30,179,140, 84, 75, 97, 51,140,208, 42,190, 99,
+111, 3,122, 24, 57, 4,191,240,226, 87,188,129,238,105, 19, 73,253,200, 94, 52, 94, 52, 21,172,120,114,173,180,163,166,214,229,
+ 84, 25,119, 91,154, 73, 76,243, 76, 42,173,143,201,213, 87, 47, 93,151, 34, 98,216,236,246,196,156,153,230, 25,239, 44,133,202,
+224, 29,211,241, 14, 47,158,150,149, 94,182, 27, 7,166,227,129, 49, 4,246,206,245,136,209,134,113, 6,103, 53,119,193, 72,101,
+179, 9, 29,255,169, 74,241, 70, 5, 99,169, 89,147,248,244,153,182,250,122, 89, 11,162,133,157,113,142, 41,166, 53, 55, 29, 41,
+184,133, 76, 72,197, 88,143,247,125, 20, 95, 50,182,234,107,170, 35,252, 5, 6,165,205, 75,169,181,159, 57,118,125, 70, 21, 18,
+ 84,168, 21, 98,202,216,190,247, 93, 88,240,203,122, 7,129,154,245, 50,243,182,131,171,186,148,189,246,177,253,210,156,153,190,
+ 94,172,114,110, 71, 94, 60, 33,230, 2,255,188,188,159, 23, 39,136, 8,171, 34, 95,241,194,141,150,122, 49,227, 44,197, 10, 86,
+ 84,155, 81, 75, 94,187,121,219, 11, 34,239, 12,227, 38,224,131,176,191, 26,217,239, 3, 67, 16,174,174, 54,136, 87,249,188,136,
+ 1,191,227,250,245, 55, 28,143,119,236,140,234, 33,238, 62,251, 10,249,246,134,167, 63,254, 41,233,155, 27,126,255, 15, 95,240,
+119,207, 94,240,245, 92,249,238, 46, 19,171,161, 25,131,109,150, 96, 32,149,184,162,153,141,177,250,253,198, 32,182,145, 83, 92,
+ 83,243,196, 22,172,207, 60,125,178,101,104,129,173,113,188,152, 39,140,135,155,219, 59, 54,143, 45, 97,180,108,182,142,207,191,
+250,130, 97, 52,124,244,201, 79, 57,198,137,253,149, 5,155, 25,252, 17,193, 48,213, 3, 86, 34, 49,222,225,237,142,195,113, 98,
+138, 89,115,239,173, 54,154, 53, 21,114, 43, 52, 89,232,252, 66,109, 58,197,115,111, 35,179,137,180,123,169, 83,188, 49,174, 62,
+ 79, 40,226,204, 38,118, 30,109,249, 67,144,177,239,218,197,191,139, 44,119,209,185,182,118, 15, 58,186,130,196, 46, 80,183,111,
+196,119,158, 3, 84,186, 29,109,185,212, 27,144,114,234, 24, 77,221,224,219,158,253,235,157,102, 49,207, 81,147,216, 16,139,113,
+142,106, 44,115,210,140,102,231,189,134, 11,212, 66, 58, 78,107,168,133,181,129, 48,104,222,122,138,145,214,199,177,165,119, 88,
+ 41, 87, 77,144,106, 77,115,210,219,105, 42, 98,132, 51,240,137,118, 47,214, 42,196, 99, 57,228, 23, 8,141, 53,202,166,103,193,
+ 15,246,100,169, 38, 22, 49, 14,235, 7, 4,186,223, 94, 31, 24, 5,206,152,238, 1, 78, 93, 47,217,222, 74, 88, 93, 81,178,239,
+248,158,254,144, 2, 79, 39, 17,242, 22, 76,107,123,139, 59,226,242,247, 95,168,214,223,250, 60, 45, 23,245, 41,216, 69,238,117,
+232,154,111,222, 46,104,116,239,244,198,191,241,223,172,174, 1,150, 75,214, 44,187,115, 13,108, 41,165,234,248,188,158, 46,250,
+ 90, 27,206, 43,221,108, 33,134, 25, 81, 15,175,179, 1, 17, 72, 57, 95,188, 17,155,156, 61,236, 61,137,107,233,148,244,130,208,
+ 21, 85,172,141, 36, 96, 82,229, 47,126,244, 17,143, 54,215,228, 79, 63,229,106,191,129, 97,228, 54, 70,110, 99,230, 54, 87, 14,
+169, 48, 39,125,174,157,113,120, 31,184,203,119, 90,252,149, 68,174,141,212, 26,121,142, 93, 83, 97,152, 83, 36,140,174,103, 72,
+119, 75, 87, 31,231, 46,130,167, 82, 11,113,158,184,218,237, 48,136,142, 49,107,101, 52, 22, 82, 98,227,188,122,117, 57,179,150,
+218,229,124,145,117, 21,177,125,178,231, 48, 69,166, 56, 19,231,166,246, 48,107,152, 99, 34, 55,225,246,230,150,108, 96,206,153,
+ 34,134,212, 85,237,181, 51, 16,114, 78,108,119,123, 82,212, 28,118, 47,104,212,171, 1,219, 50,219,142,127,254, 96,191, 93,227,
+ 87,199, 81,247,211,155, 97,232, 93,172,168, 56, 9, 97,179, 25, 58,162,119,232,221,116,102,206,250, 58,180,146,215,130, 45,198,
+220,233,139, 74,169,160,136, 44,238, 0, 0, 32, 0, 73, 68, 65, 84,196, 24,176,110, 29,159,150, 90, 87,172,112,140,185,175,231,
+ 52,153,204, 59, 79,169,202,131,167,175, 55, 90, 67,215,122,193, 17, 99, 86, 31,127,209,104,228,213, 43, 14, 90,176,180,220,117,
+ 4,105,157,175,218,238,102, 18,209,238, 87,137, 83, 58,213,202,173,104,158, 67, 15,187, 88,194,104, 22,126,188,172,154,232, 19,
+ 53,205,208, 16, 83,251, 51,168,151,180,244,162,194, 57,115,154,192, 25, 61,115,189,119,167,224,167,117,234,167,102,192,210, 35,
+ 94,117,106,161,225, 85, 86, 44,222,233,202,192, 15,142,113, 27, 24, 54,158,253,126,228,209,214, 97,130,208, 28, 36,219,240,227,
+134,118,156, 72,199, 59,222,251,201,199,120,132,195, 47,127,205,203, 95,254,138, 63,255,203,255,129,118,125,224,187, 95,126,201,
+ 95,255,252, 55,252,246,213,196,235,104,185,141,149,195, 92,104, 94, 11,177, 16, 70,178, 13,196, 62, 25, 82,132,175,218, 43, 55,
+ 97,100, 12,158,224, 2,211,221, 29,121,190,227,241,147,199,152, 22,121, 20, 6,126,246,241, 39,252,253,175, 62,229,182,100,172,
+245, 28,167, 72,108,149,187, 89, 83, 1,167,187, 66,121,126,131, 88,199,235,155, 59,246,187, 45, 37, 53, 90,203,204, 83,228,112,
+136,228, 98,120,245,221, 13, 83, 42,100,132, 38,150, 38,157, 37,111, 26,148,126, 55, 72,237,107, 99, 61, 19, 28, 77,222,178, 23,
+231, 77,155,219, 57,147,132,149,110,175,234,121, 57,139,221,108,237, 66,113,254,174,131,253, 33,159,250, 67,221,249,253,194, 66,
+ 51,155,251,102,244, 28,103, 43, 15, 40,157,219, 67,145, 52, 39,168, 72,107,229,162, 24, 89, 42,202,218, 10,173, 36, 45,112, 22,
+209,211, 34,138, 19,136,115, 84,113,139, 24, 92,208, 55,232, 28,117, 44, 54, 12, 67, 71, 94, 30,160, 68,141, 87, 5,140, 13,138,
+ 90,244,158,212,119,122,226,132, 20,103,106,105,204, 73, 81,141,165,202, 74,121,170, 11,248,167,223, 19,166, 87,189, 86,192,185,
+126, 41,168, 42,104,237,212,108, 31,159,111,140, 48,132, 0,226,152, 82, 37,150, 74,107, 22, 76,192,249, 43,196,192, 52,125,199,
+ 28, 35,102,116,138, 45,108, 10, 85,216,120,207, 68, 35,215, 19, 19,190,221, 83,124,223,127,101,219, 3, 43,152,243, 9,203,219,
+ 46,194, 31,116, 89,106, 61,122,166,147, 63, 91,163,244,206, 65, 46,168,118,156,141,213,207,201, 50, 92, 90,218,144,139, 75,251,
+ 4,157, 57,241,230,255, 49, 19,167,182,102, 28,215, 55,138,155,165,144,136, 41,246, 31,107, 49,105, 59, 62, 85, 47,174,194,198,
+140, 88, 99, 56, 78,119,218,253,117,203, 86, 45,245,164, 25, 88, 72, 85,189, 8,185,255,122,159,146,226, 12, 77, 60, 49, 21,158,
+127,241, 28,113,223,178,189, 26,248, 56, 8, 7, 49,200,118, 96,116, 66,137,145,187,156,168, 69, 47,151,148,133, 42, 66,205,141,
+216, 42,118,240,220, 77,170,238,198, 10,214,235,100, 42,199,220, 95, 90, 85,237,123,163, 17,178,211, 52, 49,142, 35, 49, 70, 74,
+ 41,108,118, 27,134,234, 25,125, 32, 78, 74, 97,163, 86,242,225,142,189, 15,120, 58,247,186,178, 34,116, 79,233,129,189, 11, 53,
+134,249,245, 45, 41, 22,198,176,225, 38, 70,162, 17,205,149, 47,149,102, 44, 83, 81,161, 94, 13,154,213, 45,214, 66,223,139, 27,
+ 96,240,129,233,238,192,118,187,101,191,219, 50,207, 51, 67,216, 32, 84,230,233,160, 93,174, 19, 90, 60,232, 46, 95, 84,172, 36,
+193, 99,108, 99, 24, 60,212, 70,202,106, 57, 43, 49, 82, 91, 37,138,233,187,105,187,122,205,151,195,182,100, 45, 90,115,174,228,
+170,113,177, 49, 70,140,216,126, 62,149,158, 15, 0,109,137,218,237,191,223,249,165,176,243,204,243, 17,239,125, 7,123,105,103,
+173,234,247,190,135,237,103, 88,140,115,239,198, 43, 53,235, 89,169,161,159,230,132,111,180,189,128,236,207,183,113, 93,223,177,
+172,238,214,127,175,163,191,181,208, 92, 64, 57, 90, 60,230, 53,172,101, 57, 19,150, 70, 99,193,160,122,175,248,216,197,245,161,
+158,120,123, 70, 38, 93, 56, 11, 25,131, 95,143, 20,235,156, 78, 79,173, 78, 27,156, 9, 12,131, 39,140,158,237,126,195,176,241,
+ 60,121,250,136,253,104,177,131,193,236, 7,218,104, 17,231, 56,124,251, 21, 95, 63,251,156,127,254,111,254, 55,190,252,221, 51,
+254,235,191,251,223,249, 23,127,242, 7,184,146,152,190,249,134,223,253,250,115,190,122,113,195,225,104,121,121,200,220,228,138,
+ 53, 14, 91,123,206,123, 59,227, 64,116, 64, 78,140,153,171,221, 6,208, 68,188,124, 60,242,254,163,199, 28,239, 12,135,195, 17,
+247,193,142, 79, 62,216,115, 53,234, 26,235,246, 46,225,176,188,255,201, 99, 82, 74,236,159, 62,101,227,213,161,176,127,180,167,
+182,204,118,220, 80,170,112,156,116,125,132, 88,141, 26,158, 35,119,115,230, 16, 51,205,120,237,214,115, 38,102, 93,149,153,102,
+ 86, 31,189,156,180,134,184,203,222,182,173,214, 8,125,210,250,110,189,157, 93,228,111,156, 98,178,142, 98,219, 26,246,113,106,
+114, 52,162, 81,176,198,245,189,233, 25, 98,246,194, 65,247,118,149,251, 18, 53,218,250, 39,242, 70, 33, 32,167,125,107,187,151,
+254,117,142,197,211, 44,172,210,177, 16,166,191,225,138,118,167, 52, 5,123,116, 33,134,145,110,233, 90,246,161, 61,199,216, 57,
+ 13, 64, 57, 78, 71,166, 57, 33,198,227,188, 71,156, 35,166, 76, 46,234, 51,183,206,146,230,153,146, 34,166,123, 13,193, 98,253,
+128, 49, 78, 21,236, 98, 40, 52,114, 74, 58,106,239,158, 85, 61, 84, 53, 71,215,118, 33, 81, 89,222, 84, 93,227,239,186, 13,201,
+180, 74,237, 60,112,219,133, 28, 75,110,119,240,158,205, 16,216,142, 3,227,168,221,205,225,216, 87, 0, 34,224, 44,214, 41, 17,
+239,238,110,230,238, 24, 97, 27,240,166, 65, 46, 4, 55,146,139,116, 79,125, 81,246,242,210, 9,183,186, 78,115, 78,144,162,246,
+131, 69,142, 15,112, 11, 87,135,133,156,179,219,234,153,144,110,249,239,118, 95,112,215, 78, 84,187,118,190, 24,106,151,122,137,
+101, 82, 35,156,101, 24,240,198,186,166,157,125,172,118, 79,176,119, 6,199,123,167, 13,238, 98,130,116,198,108, 88, 58,145, 5,
+141,169, 62,104,237,204,197,232, 97, 55, 12,129,156, 11, 49, 70, 21, 59,137,209, 78,174,229,179, 98,249, 68,125, 50, 98, 41,185,
+106,178, 25,178,218, 34,151,179,187,137,218,158, 98,202, 84, 12,119,223,188,228,213,231,106,229,114, 98,105,109, 32, 77, 19,243,
+245,145,148, 74, 31,229, 53,108, 51,164,156, 57,150, 8,206,146,226,140, 11, 94,187,222,190,243,182,198,106,140,232,113, 86,125,
+ 72, 41,164,227, 81, 3,134,186,173, 78, 80,254,121,153, 21,138, 50,205,183, 4,235, 8, 86, 69, 71, 91, 49, 4, 17,124, 47, 94,
+ 75,215,138, 44,175, 89, 70, 56,244,125,181, 21,193,250,129, 87,119,215,164,124,224, 80, 43,197, 89,178,181, 72, 24,193, 58,124,
+ 77,196,120,196,136, 97, 52, 78, 71,199, 37, 19,172, 96,187, 32,206, 13,142,150, 38,178,194, 58,104,179,170,148,183,222, 42,101,
+207,219, 85,168,101,157, 91,227, 96,173, 13,196,148,184,186,186,194, 69,181,245,149,162,147,185,156,117,196,157,115,234, 2, 52,
+ 45, 68, 90,101, 13,243, 88, 28, 32,181,170, 69,108,220,108,153,142, 71,226,172, 7,186, 24, 67, 78,165,231, 10, 72, 79,233,154,
+148,106,102,232, 98,214,210,189,233,129, 40,122,118,228, 92,116, 20,159,213, 2,217, 74, 89,119,244,165,244,217, 94, 87,150, 47,
+218,162,149, 45,110, 78, 32,165, 90, 11, 84,197,244,106,230,247, 25, 93,177,135,216,208, 95,151,229,162, 53, 86,180,139,246,182,
+139, 55,181,144,113, 61,100, 69,211, 39, 51,198, 64,112, 1, 76, 91,153,238,230,140,134, 98, 12, 26, 21, 77,195, 6, 79,142, 73,
+209,192,163, 62,115,206, 64, 24, 29,187,171, 13,195, 38,176,127,180,225,233,211, 43,134, 77,192, 14, 30,241, 6,188, 71,106, 97,
+250,246, 21,191,252,219, 79,249,238,117,225, 23,255,245,111,144,146,120,127,191,231,163,247,222,231,240,233,151,124,246,139,207,
+248,245,151, 47, 57,148,129,105, 78,234, 59,119,174,175, 26, 26,243, 28,149, 69,226, 2,214,123,106, 42,148,146,241,110,160,196,
+138, 27, 13,142,198,118, 19, 48,109,230,147, 15,159, 48,184,204,126,227, 24, 7, 67,202, 51,185,162,174, 39, 26,183,199, 35,143,
+118,134,218, 50,165, 52,156, 88,166,219, 87, 93, 72,234,185, 57, 70,166, 84,113,205,112, 59, 69,230, 92, 20,121, 92, 42,185,194,
+221,221,145,105, 74,204,177,174,144,153,218,140,134, 41, 53,205,103,104, 70,217, 37,238, 52, 71,105, 43, 20, 67, 43, 52, 53,192,
+ 27, 78,128,255, 7, 15,176, 37,180,226,172, 59,106,247, 21,234,203,116, 91,218,233, 98, 95,241,163,102, 69, 9,126, 95, 87,207,
+131, 29,252, 66,227,185,188,236, 87,245,242,186,247,236, 15,184, 26, 42, 16, 92, 15,229, 88,138, 1, 29,133,218,254, 49, 59, 76,
+106,197,248,229,154,241, 67, 0,163,118,132,227, 52,129,104,172,161, 6, 60,232, 88,210, 90, 7, 45,145,230,184, 38,187,137,113,
+228, 86,113, 46,232,112,164, 91,210, 74, 43, 43,226,179,245,194,194,138,198,236, 73,223, 11, 47, 67,146,218,119,199,198, 8, 78,
+186, 15, 53,107,117,191,196, 43,186,142, 30,101, 37,102, 57,154, 24, 82,110,132,210,216, 13, 35,131, 13, 28,227,204,221, 28,105,
+ 57,226,130, 35, 12,129, 57,142,204,243,129,187,195,196,126,180,154,114, 85, 19,131, 25,201, 29,130,209, 22, 42,219,186,137,239,
+ 23,162,145, 75,122,212, 59, 47,119,185,231,182, 56, 91,140, 52,222,100, 37,244,203,119, 73,203, 44,185, 94, 88,204,184,200,108,
+103,189,176, 79,204,247,135,166, 0,102, 37, 37,158,196,160,188, 25,205, 38,188, 33,169, 92,212,235,111,142,126,228,225, 15,177,
+ 2,117,160,160,251,240,165, 52,202, 93,140,164, 29, 22, 43,212, 36,247,168, 80,197,111,106, 1,152,123, 66,219, 9, 4,180,208,
+ 29, 79, 83,128, 20,115,143, 27,141, 23, 78,132,126, 77,211,164,145, 74,101,231,247,144, 45,215, 83,230,245,116,228,229,203, 35,
+ 55,198,225,236,192,198, 55,114, 76, 56,103,137, 37, 99,157, 96,194, 70,159,225,164, 59,245,220, 42,185, 53, 90, 81, 17,216,116,
+156,240,198,169, 61,236, 56, 33,173,177, 27, 7, 13, 78,241,106, 11, 93, 80,176, 74,111, 11,216, 10,249,246,192,216,100,117,153,
+ 72,171,228, 86, 41,210,150, 76, 30,196, 24, 98,107, 28, 91,163,149,194,126,183,227,208, 42,119,163, 71, 66, 0,171, 52,177,199,
+155, 45,214, 90,110, 94,191,198,253,255,140,189, 89,175,101, 89,122,174,245,140,110, 54,107, 55,209,100, 87,149,174,114,217, 62,
+166, 57,198, 96,176, 64, 66,112,135,184, 6,241, 11,248, 43,254, 79, 72, 71,112, 4, 66,135, 78, 72, 32, 56,198,174, 99,151,211,
+118,101, 85,182, 17,153, 17, 59,118,179,214,108, 70,243,113,241,141,217,172, 29, 59,179,108, 41,157, 85, 81,153,177, 99,239, 53,
+231, 24, 95,243,190,207,107, 45,179,171, 46, 1, 49, 40, 26,171,172,246,170,122,107, 97,113,148,146,233,187,190, 18,249, 28,109,
+ 27, 48,166,208, 52, 58,202,118, 62,168, 77,174,122,181,231, 57,105, 92,108,229,225,151, 28,177, 54,208, 53, 61,167, 97, 36, 52,
+ 27,230, 85,138,134,229, 8,194, 48, 78,202, 7,219, 25, 37, 82,202,220,190,187,213,172, 6, 44,165,234, 19, 48, 82,119,165,122,
+110,102, 41,244,214, 97,156, 35,229,162,182, 89, 17,156,215,183, 80,127,173,232,174, 23,200, 49,175, 99,244, 98,182,201,147,228,
+154, 99,190,188, 95,245,144, 43, 85,248,230,100,103, 85, 93, 67,139,116, 99,235,188,118,151, 14,139,219,204,195,216,160, 60,131,
+166,237, 41, 73,147,227, 74,205,108,183,117, 13, 96,241,196, 56,227,106,158,186,247,149,211, 81, 3,114, 48,138, 66,165, 6,189,
+ 16, 11,243, 48,211,118,126,211,115, 1,221,161,165,187,104, 8,173,227,242,242, 64,215,120,250, 78,195, 84,104,170,255,126,136,
+156,238, 31,248,236,111,127,205,175,127,115, 3,190,227,219,191,252, 21,159,190,236,249, 79,255,252, 79, 24,191,124,205,171, 47,
+222,240,255,253,242, 75,254,225,251,129,219,177,112, 59,103,230,157,163, 37, 45,209,214, 98,136,113,214,147, 89, 44, 34,174, 22,
+ 71, 86, 49,189, 57,226, 59,199, 79, 63,254,144, 95,252,244, 35,226,241, 45, 23,141, 94,180,221,225,154,148,132,211, 48,168, 16,
+113, 16,134,185,231, 52, 39, 14,215, 45,111,110,222,208, 31, 46, 49, 99,230,246,126,208,149,215,119,239,104,187, 3,111,223, 29,
+153, 98,226, 56,102, 78, 99,228,110,136,204, 17,166, 57,215,233,144,163,236,238, 45,135,186, 35, 64, 27, 48,111,222, 59,199,204,
+ 78,253, 94,145,148,252,136, 21,141,109,103, 46,143,118,237,143,219,101,173, 38,118,193, 49,187, 17,191,236, 51,217,139, 84,130,
+144,173, 80,146,242,163, 9,109,231,199,170, 60, 34,139,153, 29,253,214,236, 40, 54,155,114,123,153, 66, 44,196, 60, 91, 73,106,
+165,198, 32,138,104,245,235,156,230, 56,207, 83, 4, 28,182,230, 14,235,190,101, 9, 0,169,249,200, 24,133,214, 84, 49,138,243,
+ 1,223,180, 43,165, 93,147,170,114, 37, 96,185, 53,155, 89,163,147,116, 47,181,236,237,178,232,139, 87, 25,184, 53, 28,131,218,
+145, 43,248,195, 91,139,165,172,118,167,101,215, 21, 99,245,188, 91,207, 69,119,160,175, 66, 56, 99, 20, 81,235,138,208,212,224,
+133,136,102, 87, 15, 82, 48,189, 2, 61, 66, 40,116, 70,247,145, 82,109,116,166,142,240,206, 83,251,246, 1, 38, 59,111,106,217,
+125,118, 98,215, 75,110,227,186,179, 51,177,237,131, 81, 76,173,226, 13,251,167,100, 15,192, 95,158, 53,179,199,189,150, 13, 81,
+ 91,105, 44, 59, 65,103, 13,137,177, 60,225,166,216,138, 2,131, 57,239,228,247, 33, 45,123, 27,220, 99,214,193,239,176,204,175,
+252,239, 69, 99, 82, 65, 65,206, 57, 66,211,172, 1, 25,160,214,199, 37,216,193, 57,207, 60, 69,130,111,106, 23, 84,214, 36,175,
+115,254, 3,235,126,179, 84,120,199, 42,170, 19,133,210,204, 41, 43,234,210, 90,122, 28,151,190,225, 33, 78,200,162,196,175, 7,
+247, 56, 71,141,234, 44, 25,147,133,241,120,132, 44, 90, 32,120,203,229,197,129, 97,154,144, 57,210,212, 24, 89,193,226, 27,143,
+169, 54,167, 67,219, 64, 61,184, 91, 99,200, 86,159,237,198, 90, 36, 38,130,136, 38,176, 57, 91,199,235,106,221, 20,163, 5,131,
+ 49,134,108, 96,202,194, 40,144,157,129,182,161,185,232,200, 55, 55, 92, 92, 28, 8,214, 49, 14, 39,166,211,132, 55,208,218,140,
+ 69,104, 27,171,188, 0, 49, 85, 15,179,140,191,115,213, 6,100,156,215, 66,101,193,214, 46,200,214,103,215,151,228,162, 5,204,
+233, 56,208,117, 29,215,151,151,188,189,185,225,242,112,224,116, 26,116, 47,223, 6,108,232,117,164,158, 18,125,223, 51, 85, 6,
+251,242,215,195,241,168, 42,248,138,123, 16, 81, 11,155,247,129,135,120,143, 51,144,179, 78,248, 66,208,149,223,146,234, 85,234,
+251,149,146,144,142, 5,239, 93, 29,107, 27,210, 28,153,103,189,224, 87,148,119,245, 81,151,204, 74,199, 91,139,191, 82,118,219,
+168, 74,173, 91,166,109,101, 91,225, 57,239,234, 25, 83, 5,109,206, 42,176,202,105, 86,188, 61, 43,184, 45,226, 44, 62, 4,108,
+ 8,248,166,193, 57, 8, 54,104,250, 94,213,241,216,224, 85,120, 88, 18,166,174,153,150, 4,186,133,139,111,234,154, 71,137,126,
+202,117,152, 83,228,226,208,174, 5,175,247, 94, 59,219, 38,208,245, 45,125,219, 43,141,209, 26,172,205,196,105,100, 26,225,175,
+255,234,215,124,251,250, 13, 83,129,124,127,162,156, 34, 31,252,222,167,220,127,125,195, 55, 95,125,197, 63,252,250, 53,191,121,
+123,228,205, 49,243,246, 52, 51,227, 40, 86,145,193,206,234, 44,212, 25,191,194, 96, 98, 86, 71, 84, 66,170,147,192, 18,135,194,
+213, 69, 79, 99, 12,199,225,129,214,127,200,199, 31,191,196,150,200,231, 95,126, 75,119,145,120,119, 28,152,115,102, 78, 66,223,
+ 6,110,110, 79,124,219, 88,114, 62, 48, 15,145, 25,117, 41,220, 28, 39,181, 91, 78, 35,229,110, 36,166,194, 56, 37,198,164, 59,
+254, 49, 10,243,148,136,185, 16,211,162,114, 55, 20,163,150, 72,231,237, 6,119, 23,193, 27,145, 93,179, 35, 43, 93,109,185,124,
+126,200,199,251, 4,104,123, 61,126,173,181,245,195,218,237,130,205, 6,128,145, 71, 74,228, 21,163, 89,105, 58,152,250,240, 96,
+183, 80,184, 39,132, 79,143, 59, 66,179,156,105, 85, 25,108,216, 49,249,246, 87,255, 78,188, 39,198,214, 11, 85,176,162,253,123,
+ 83,129, 10,185, 42,208,157, 85,252,227,156, 18,199, 97,168,177,145,154, 22, 85,138,172, 2, 10, 5,133,232,126, 73,199,148,154,
+160,133,113,132,208, 41,109, 91, 4,201, 51, 82, 65, 31,193,171,101,167, 24,229, 38, 91,231, 84,237, 92,113,169, 69, 42, 4,193,
+128,243,250,239, 27, 17,124,219,212, 23, 47,235,213,151, 51,162,156,141, 85,153,106, 88,252,160, 22, 73,117,148,213, 52, 32, 70,
+ 43, 83, 41,216,148,233,156, 99,112,158,217, 58,140, 11, 10, 8,153, 34, 29, 6,103,103,154, 16,152, 81, 28,162,160,118, 17, 35,
+182, 42,227,205,147, 64,182,115, 11,216,166,152,223,216, 21, 59,192,209,114,203,155, 45, 4,197,238, 58,240, 85, 24, 81, 47,123,
+ 99, 56, 83,183,139,236,245, 27,143,225, 66,176,207,124, 55,134,117, 7,245,190, 13, 79,206,248,245,143,213,241, 11,245,206,190,
+215,254, 63,138,116,217, 21, 1,194,182,201,178,187,226,117, 81, 4,139, 17,218,174,169, 63, 51, 61, 88,114, 76,120,177, 26, 76,
+146,183,196,167,156,117,242, 83, 12,103, 73,119,234, 72, 88, 46,173,180, 83,211,155, 90, 56,170,181,173, 96,212,175, 28,132, 48,
+ 71, 90,129, 75,231, 57,228,196,109, 22,202, 20, 41,181, 35,181, 5,229,185,163, 66, 49, 35, 21,136, 97, 13, 54,120,166, 56,235,
+207,194, 91,198,147,102,131, 7,107,208,100,209,130,171,171, 33,181, 72, 21,134,251, 59,165,137,149, 68, 17,245,161,187,198,212,
+ 29,162,170,168, 37,203, 70,212, 55, 14,240,204, 89, 72,232, 78,191, 88,199,253, 60,209,123,129,156, 72,167, 35,193, 57,174,172,
+208, 56,131, 53,202, 35, 23, 89, 38, 74, 22, 83,189,223, 26, 92,146,177, 98,136,121, 91,245, 52, 77,195, 60,207,248,160, 99,122,
+231, 44, 83, 13, 79,105,218,142, 97,138,245,189, 63,225,131,103,158, 39, 14,135,142,121,154, 42, 90, 86,159,175, 82,114, 61, 71,
+ 84, 72, 91,170,216,177, 84,168,140,138,203, 68, 89, 19,185, 32,149, 4,152, 75,161, 96,193,234, 59,175, 97, 44,133,148,119,141,
+ 79, 49,170,179,169, 33, 46,193,123, 40, 22,169,227,126,169,129, 60,165, 22,111,212,130,112,177,134,200,217, 52,117, 27,163, 75,
+117,196,152,202,121, 55,245, 0,245,193,214, 96, 29,167,103, 89,219, 16,188, 87,146, 28,130,181,129, 12,100,172,234, 21, 12,124,
+242,147, 79,184,121,253,154, 34,179,134,149,212,124,244, 20, 35, 49,205,170,166,175,163, 51,231,220,250,156,106,252,111,213, 52,
+ 89,167, 38,145,218,116, 57,107, 72, 41,210, 54, 30, 23, 52,151,222, 85,248,143,119, 26,110,130,192,241,238,158, 62, 55,220, 61,
+ 28,249,237, 23, 55,124,246,217, 55, 92, 60,127,193,225,210,242,253,187,111,121,209, 29,232,109,199, 87,191,253,158,223,124,245,
+134, 87,119,137, 87,167,194,109, 20, 38,227,153, 69,227, 83, 84, 20,169, 69,181,179,149,209,111,212,241,100,188,165,105, 60, 49,
+235,243, 96, 49, 48, 70,196, 89,130,205,124,251,221,119,188,248,131,223, 67,162,240,236,195,143,185,125,200,152,182,163,228,145,
+214,119, 28, 79,145,214, 26,134, 4, 99,118, 12,217,112,123,115, 71, 17,199,113, 22,125,206,243,132,111, 58, 78, 67, 98, 28,103,
+230, 2, 99, 18,230, 4, 83, 82,125,149, 24, 75, 46,139,120, 84, 15,187, 92, 1, 66,165, 54,195,126,245, 4,213, 81,179,206,189,
+204, 89,134,250,239,218,142,238,233, 87, 43,195,215,185,243, 36, 43,179,159,158,239, 49,255,155,109,232,108,199, 41,130,216,242,
+ 94,215,244,212,215,221, 32, 51,203,158,113,225,193,239, 57,198,156,141,100,237, 14,158,179,120,164, 87, 24,194, 66, 95,170, 9,
+ 83,214, 7, 98,206,140,227,164, 31,180, 85,212,234,210, 17,149,170, 50, 93, 70,123,190,107,233,218,134, 28, 75, 85, 52, 7, 74,
+ 81,123,152,238,247, 50,173,247, 52,206, 40, 45, 41,163,252, 96,107,241,198, 41,211, 91,114, 77, 58, 82,123,137,113, 58,185,112,
+ 21,116, 19, 66, 61, 56,242, 92, 37,176,106, 3,177,213, 74,100,141,219,253, 44,161,111, 60,135,198,211, 88, 72, 37, 34,105,162,
+ 20, 75,170, 97, 48, 77,227,176, 35,136,243, 26, 50,147, 51, 46, 70, 26, 11,193, 27, 58,235,153,107,151, 91,214,169,204, 10,122,
+ 66,140, 80, 10,239,169,209,101,183,106, 49,166,236,210,196, 88,197,100,155, 8,206,114,166,189, 59,235,230,183,207,206,156,205,
+213,203, 35, 10,162,121, 82,244,185,138,203,164, 84, 23,192, 62,246,245,113,216,176,172,162,187,101, 80,181,239,214,181,243,221,
+127,141,115, 94,252,153,223,238,135,146,220,234,197,222, 52,205, 42, 38,155,231,121,237,176,114, 22, 58,107, 41,149,136,104,173,
+ 93,137, 99,219,218,169,212,145,110, 85, 48, 87, 28,165,243,110,221,159, 82,233, 93, 57, 21,146, 24,230, 44, 92, 92, 94,226,166,
+ 25,226,204, 44,153, 75,223,208,166, 72,107, 33, 25, 75, 52, 6,227, 61,222,192, 92,178,170,200,165, 96, 26,199, 92, 18, 18, 39,
+ 76,112,120, 23, 16, 17,186,174, 37,207,145, 60,142,106,247, 68,187, 94,231, 44, 57,197,213, 14,235, 43, 20,101,129,150, 36,132,
+ 33,199,250, 61,235, 38, 80, 19,218, 52, 8, 37,139, 97, 42,137, 36, 25,231, 12, 86, 10,126,158,104,108,226,195,235, 3,151,109,
+171,240, 23, 81, 18,151,243,174,242,239,181,187, 47, 89, 42,255, 65,227,104,131, 15,164, 52, 87,203,223, 57, 96,104, 78,177,174,
+ 66, 50,211, 41,234, 59,228,155, 74,231, 75, 88,171,216, 85, 99, 12, 37, 38,188, 51, 72, 86, 91,226,242, 46, 76, 21, 13,155,115,
+169, 90, 8,253,124, 87,128, 74, 46, 24,239, 40, 69,167,119,198,154,154,211, 46, 42,142, 74,185,158,134,101,189,228,150, 2,103,
+ 33,243, 33, 64, 90,144,170, 74,166, 83, 36,171, 62, 18,174, 90, 36, 93,219,213, 47, 89,240,182, 81, 86,123,211,208,132,182, 54,
+ 33,250, 28, 24, 3,211, 56,114, 56, 28,106,120, 97, 97, 26, 31,116, 79,107, 52, 24,200,250,128,245, 13,197, 25,125, 70,147, 54,
+ 42,221,101,167, 68,181, 28,121,241,252, 25,247, 55,111, 24, 78, 81,245, 19,185, 40,234,181,250,203,139,148, 10, 0,147,117, 4,
+191,252, 57,154,224, 48,245,156, 94,184, 14,206,110,171, 43,106, 26,155,190, 43, 13,161, 9, 53,130, 53,241,240,240,192,243,235,
+ 11, 94,191,126,224,235, 87,223,243, 15,191,254,154, 40,134,113,142,196,251, 65,237,161,215,207,248,250,155,239,120,247,238,134,
+175,223, 14,124,117, 51,113, 55, 27,142, 73, 24,179, 80,140, 69,114,157,154, 45,199,194,186,242,211,149,149, 49,234,141, 87, 59,
+163, 78,166,134, 49,145, 37,115,209, 92,242,230,110,230,183, 95,189,225, 15, 62,122,193,252,112,228,170,185,166, 76, 17,137, 66,
+113, 58, 61,157,179,240, 48,100,250, 33, 49,156,116, 98,148, 74,161,184,134, 20, 35, 15,227,132,140, 39,230, 57,145, 10, 12, 83,
+ 98,206, 48, 69, 33, 21,213,177,136, 49,164, 42,174, 93, 70,139, 57, 87, 36,184, 85,186,157, 90,218, 76, 57, 83,253,150, 42,140,
+ 50, 59, 60,236,143, 43,126,117,255,179,140, 90, 23,133,228,190, 48,120,188,130, 52,216, 42,162, 91, 66, 74,228,125,122,215,234,
+ 31,183, 63,104,111,123,236,145,183,117, 15,180,128,226, 69,116,172,190, 5,109,213, 3,217,236, 51,177,171,118,160,114,144, 65,
+173, 67,105,217,255,212,125,101,204,234, 55, 94, 8, 80, 75, 39,191,140,236,145, 66,215,182, 28,250, 14,176,250,195,175,227,123,
+ 91, 19,185, 36, 69,218,160, 7,102,235,212,218, 82,114,194,161,163, 72, 35, 66, 78,170,100,183, 70,240,193, 85,149,168,169,149,
+170,175, 2,133,130,145,229,195,172, 81,174, 53,181, 72,213,220, 91, 60,168,119,150,198, 25, 72, 35,227,124,210,238,160,204,122,
+184,164, 68, 49,138,192,244,126,217,233, 25,114, 54,196,148, 40, 1,154,226,232,188, 91, 11, 4,169,186,193,101, 60, 44,219,243,
+181, 2, 93,100,247,139, 75,122, 95,161,108, 85,252,227, 45,244,162, 4, 63,191,189,183,207,236, 17, 20,102,243,128,155,179, 61,
+122, 5, 73,159,221,169,239,185, 59,120,228,248, 48,101,229,215, 27,243,136,156,104,158, 38,226,157,169, 1,126,199, 20,105, 29,
+254,155, 85,137, 80,197, 74, 42,194,122, 56, 30, 53, 87, 92,150,124,230,101,180,110,171,186, 93,237,145,243,156,222,243,247, 75,
+229, 39, 44,248, 96, 74,193,225,107,226,151,236, 96, 62,142, 40,137,177, 20,230,156,184, 52, 66, 35,133, 11,231, 57, 1,151,141,
+ 80,176,164, 82,136,198,104,252,170, 8, 23,135, 3, 50,142,106, 5, 43,153,139,190,175, 93, 65,169, 28,244,172, 41, 82,198,172,
+231, 69,240,158,182,211,208,148,185, 40,169, 44, 75,193,138,238, 41,103, 41, 68, 17,166,172,190,113, 35,224, 98,141, 21,205,250,
+ 44,207, 34, 76, 37, 18, 75,193, 6, 8, 82,184,104, 3, 47, 46, 90, 62,184,238,105,125,192, 91, 32, 27, 74, 49,196, 34, 36, 50,
+ 99, 76,106,183,203,162,130,162, 12,177,234, 65,176,144,196, 16,115,161,233, 58, 82,206,170, 96, 78,137, 41,206,116, 11, 24,167,
+198,100,158, 30, 78,245, 60, 48, 72,170, 43, 49, 32,197, 25,145, 82,167,111,149,235, 93,149,228,169,142,150, 1,250,190, 87,225,
+216,226,182,112,250, 94,166,250, 94,148,229,157, 89, 18,228,164, 18, 34,139,190,199, 49,103,172,111,149,111,239,180, 19,115,174,
+118,199, 8,215, 87,151,120,239, 25,167, 17,235, 29, 93,223, 51,156, 6, 94,190,124, 65,219,182,220,223,222,241,242,229, 11, 68,
+132,219,251,123, 62,254,228, 19,134, 97,100, 56, 13,180, 93,199,225,208, 51, 79, 51,119,247,183,188,124,249, 18,201,145,105, 26,
+ 56,205, 35,199,211, 73,133,183,110,209, 73,204,224,148,133,225,156,234,112,140, 13,204,243,140,164,145, 47,126,243, 57, 18,103,
+218,182,213,239,109, 86,166,128,130, 99,156, 90,230, 22, 69, 78, 93, 49, 57,167,231, 77, 74, 66,168,217, 8, 6, 48,182, 78, 90,
+237,182, 6,208, 9, 1, 52,109,187, 78,184,166, 56, 50,142,153, 57,194,215,223,188,225,239,255,241, 11,230, 92,248,224,195,151,
+ 76,227,196,221,219,119,188,188,190,230,112,125,197, 55, 95,124,201,171,239,222,241,230,126,226,221,152, 25, 18,196, 92,137,164,
+ 53, 6, 22,103,214, 85,111,170,110, 37,138,213,207, 43,101,166, 52, 19,124, 75,215,118,117,205, 7,113,154, 57, 30, 51, 95,167,
+129,119,223,221,114,243,234, 53,127,242,139,159,241,233,167,159, 80,172,231, 56,207, 36, 25,233,131,231,254, 97,192, 42,120,130,
+156,171, 8,214, 5, 4,203,241, 52, 49,198,204,156, 34, 49,234,132,103,138,153, 88, 44,211,148, 17,235,171, 21,178,118,236, 44,
+ 33, 65,218, 96,165, 92, 86, 13,138,103, 53,175, 75, 69, 17,150,243,243,113,133,208,252,176,118,173,156, 5, 85,109,201,104,251,
+ 49,183,221, 29,124,182,216, 13,212,177,116,111,143, 14, 79,131, 86,194,107, 8,236,143, 48,229,159,156,132, 62,134,213,152,141,
+ 46,167,132,170,178, 94,233,206,106,165,104, 37,107, 39, 90, 71,103,212, 76,225, 44,133, 84,197, 31,170,108,215,200,193,178, 8,
+ 86, 42,207,185, 13,129,139,195, 1,239, 2,195, 52, 99, 69, 71,101, 26,179,151,145,156,232,130,167,117,170, 92, 55, 57,146,102,
+205,116,238,186,182, 30, 24,117, 44, 21, 2,222,148, 26,228,162,236,106,237,112,212, 7, 43, 69, 71,212,190, 22, 25,110, 9,117,
+145, 66,138,139, 45, 73,189,163,197,170,191,184, 44,158, 30, 99,112, 38, 49,215,162,106,158, 20, 89,233,157,193, 36,157,142, 88,
+ 87,201,100, 49,210,120, 71,227,131,238,157,170,141, 48, 9,155, 80,203,108, 16, 29,138,121,130, 64,183, 83,153,153,157,135,189,
+ 58, 10,150, 61,157, 61,187, 52,215, 45,250,106,165, 91,158, 9,121,148,223,126, 22,169,186, 48,170,207, 36,120, 79, 57, 54,246,
+127, 70,183, 70,176,136,236,170, 0,171, 96,143,205,142,183, 55,231,203, 57, 89,239, 41, 15,191,216,117,213, 84,100,155, 60, 44,
+243,171,146, 51,190,104,167,166,204,112, 5,120,104, 70,179,134, 52,248,224, 25,199, 89,195, 33,154,134, 24, 79,235,200,116,209,
+ 52, 44,197,244,226,129, 95, 14,205,141,236,165,169,133,198,232,218,229, 56, 78, 60,247, 30,151, 19,185, 8,173,192,243,198, 51,
+ 77, 51,157,181, 68,171, 19, 28, 9,142, 97, 28,176,214,209,121,203, 56, 36,152,102,186,182,195, 90,207, 52, 69, 29, 33,231,140,
+119, 85, 12, 90,167,117,183,119,247,186, 27,183, 48,204, 74, 97, 27,166, 76, 22,171,148,194,224,136, 46,172,225, 33,206, 24, 76,
+214,131, 86, 74, 66,156,101, 50, 5, 19,132, 6,225, 50,120, 62,185, 62,240,241,245, 21,141, 99,141, 39, 30,147,142, 64,139, 49,
+ 76, 73, 56, 85,208, 79, 1,154,174,195, 68, 33,207, 17, 49, 26, 67, 44, 2,198, 7,165,155,165, 68, 8,129, 97, 28,105,219,150,
+211,105,208, 36,195, 16, 56,244, 61,199,219,251,138, 72,213, 34,231,242,242, 66,177,203,206,147,146,218,244, 98, 76,107,178,224,
+146,244, 86, 74,209,105, 73, 61, 28, 75,210, 72,230, 38,120,181,121, 57,200,197, 48,167,132,115,158, 24, 39,172, 11, 56,235,153,
+ 78,199,170,181,128,171,235,231, 92, 94, 63, 35,180, 61,195, 48,112, 56, 28,184,184,184, 84, 91, 83,156,249,248,227,143,152,167,
+145,219,119,183, 60,127,241,146, 82, 10,239,110,223,241,225, 39,159,112,119,119, 79,119,117,137,235, 90,238,239,238,193, 59,166,
+146, 73, 6,142,105,166,109, 46,136, 8,147, 36, 34, 74, 70,203, 2,197, 26,196,123,230, 2,109, 13,127, 50,206,227,172, 39,149,
+204, 56,205,120,171,192, 26,138,238,188, 93,176, 12, 15,119,180, 94, 93, 24,125,219, 65, 8,148,250,243,200,185,208,120, 71,156,
+231,181, 25, 18,145, 53,172, 69,106,161,105, 69, 61,245,203, 57,183, 88,223,188,181, 26, 59, 92,197,116,170,232,215,201,147, 15,
+ 61,255,240,197,107,254,234,175, 63, 35, 38,248,244,211,143, 85,139,144,149,177, 80,114,225,235, 87,175,249,250,251, 27,110, 79,
+145,155,177,112,140,133, 33,150, 53, 52,186, 84,214,199,246, 46,171,154,159, 34,164,152,215, 51,203,123,141, 66, 30,135,137,139,
+195,129, 34,133, 81, 18,199, 2,173, 9,124,252,209, 75, 62,252,232, 0,206,242,230,251,215,164, 89,223,233,148, 11,209,137,250,
+213,231,194,253,113, 38,101,165,124,166,148,212, 53, 33,134,152, 21, 0, 53, 71,117, 64,229, 34, 36,109, 81, 86,192,214,222,218,
+188, 89, 62,245,172,206, 69,239, 14, 47,198,213,145,228,158,231,190, 23, 22,169, 21,235,199,247,233, 63,160,122, 22,221, 63, 26,
+171,135,155,221, 5,194,172,128, 14, 28,197,148,149,142,182,239,228,255, 41, 35,255, 31,251, 19, 45, 99, 75,163, 56,163,247, 96,
+ 41, 70,234,134,116,141,140,205, 27,101, 73, 74, 21,216, 80, 45, 35,105,197, 55, 46, 88, 78, 29,137,233,207,166,105, 90,174,175,
+174, 42, 90,115,196, 20,237,255,125,112,234, 17,205,154,180,214, 58, 71,103, 29,150,204, 52, 30,235, 40, 61, 64, 81,127, 58, 53,
+183,215, 26, 67, 48, 89,153,219,193,173, 16,146, 18, 35,146,150,221,154, 35,216,170, 70,207,153,152, 39, 36,151,149,174, 7, 6,
+177,218,129,121, 11,222,171,221,105,156, 39,172,100, 92, 86, 79,189, 56, 79, 17, 37, 85, 89, 73, 85, 45,172,151,105,206,106, 7,
+ 10,162, 2,175,136, 94, 12, 75,154,164, 44,158,113,243, 20, 8, 70,214,144,147,237, 34,173, 83,156, 82, 25,208,187, 66,172,172,
+110, 71, 89,215, 53,122,161,111, 19,160,205, 59,126, 62,134, 63, 11, 88, 41,156,237,208, 31, 95,236,249,145, 39,253, 44,242,117,
+ 63,130,175, 22, 58, 5,105,236, 81,195,188,151, 70,247,212,255, 45, 4,172, 69, 66,185, 44,130,182,125,187,101,152,226, 25, 55,
+191, 36, 13, 11,194, 64,140, 26, 15,106,173,238,202,251,174,103, 28,166,213,143,188,247,232,111, 56,102,197,182,182,109,139, 72,
+ 90,247,240,186,175,207,204,100,108, 19,112,115,193, 6, 71,202,130,143,145, 75,231, 24,124,224,148, 51,167,146,213, 22, 52, 70,
+ 50, 66,219,117, 76,243, 76,227, 60,109, 8,107,119,222, 58,125,150, 92, 27, 24,243, 76, 82,123, 2, 38, 27,162, 42,221,152,103,
+ 85,142, 91,231, 72,101,198,122, 67,235, 28,138,122, 8,106, 17, 21,203, 92,253,241, 49,102, 82, 73, 42,170, 44,133, 62,120, 14,
+ 22, 94, 30, 90, 62,184,236,232, 61,228,168, 7,162, 88,213,119, 20, 68, 39, 11,176,198,177,230,156,152, 99, 34, 39,221,155,199,
+156,152, 79, 35,198,121,114,222, 88,229,167,211, 73, 71,225,162,239, 97,169,254,235,156, 51,221,161,199, 90,203,241,248,160,185,
+235, 82, 56,158, 78,244,125,143,243, 13,136,197,123,157,164, 44,107, 56, 91,169,144,165, 20,198, 97,192, 89,205,113,104,219, 6,
+ 73, 73,149,212, 89, 42,196, 69,199,165,161,239,244,103, 29,103,157,154, 57,203,135, 31,126,192,207,126,254, 11,230,148,185,123,
+120,224,226,250,138, 23,207, 95, 48, 12, 35,183, 15,247,188,124,249,146,119,247,183, 8,194,152,102, 82, 78, 12,211,192, 24, 71,
+166, 60,145, 72,100, 43,248,190,161, 43, 29,233, 33,242,193, 7,207, 56,158, 78,136, 73,248, 0, 31,127,242,146,211,241, 30, 99,
+ 34, 63,255,197, 79,184,186,186,226,179,207,254, 30,231, 29,183,247,247, 20,171,244, 59, 93, 39, 60,224,172,225,242,112,193,179,
+139, 3, 87,135, 3, 72, 38,151,168,186, 32,167,156,122,165,175,165,117,130,217,120,175, 12, 14,187, 89, 45,237, 78, 80,235,156,
+ 83,150,192,226,242,201,218,201,122,107, 86,109,144,175,200, 94, 83,207, 81, 45,140, 29,195, 36,188,187,123,199, 63,254,250, 75,
+164,105,185,184, 82,167,206, 87, 95,191,230,225,230,134,143, 95,126, 72, 42,112,115,115,203,205,237,200,219,251,153,251,185,112,
+ 74,234,222,136, 8, 88, 95, 99,189, 13,150,178,105,121, 28,120,235, 40, 53,102, 92, 41,120,126, 69,118,223, 31,239,232,251,142,
+ 11,223,208, 97,185,118, 14, 51, 79, 60,127,241, 41, 31, 60,191,226,246,118,170,147, 0,163,132,209, 92, 39,107,198, 96, 71,189,
+ 59, 82, 41,250,133,196,114, 26,103, 50,174, 22,158,166, 58, 33,150, 64, 45, 5, 55,109, 42, 34,187,158,165,171,187,108, 39, 25,
+246, 79,130, 64,140,188,215,121, 63, 25,174, 81,119,142, 26,222, 32,171, 55,119,197, 1, 86, 47,162,148,178, 27,145,234,174,107,
+ 25,201,170,168, 72, 47,159,229, 2,126, 47,146,181,168, 10, 95,156,252, 14,185,158, 89,149,148,102,191,135,223, 31,174, 34,235,
+ 72, 92, 71,152,154, 74,230,216,170,159, 61,167, 62,215, 10,124,185,208, 13,154,169,158, 37, 35,162, 48,154, 54, 52, 92, 93, 94,
+210,182, 93,141, 60, 84,136,129,113,134, 16,156,102, 51,139,238,244,122, 31,104,172, 35,142, 51, 86,132,182, 9,154, 48, 28,103,
+140,115,120,175, 59, 35, 3, 52, 36, 28, 5, 73, 69,247,154,113, 70, 74,161, 9,161,138, 86, 64,210, 76, 41, 73, 35, 61, 37,175,
+ 56, 69, 89,114,207,173,169, 91,186,172,213, 94, 22,130, 51, 24, 27,112, 86, 56, 14,137,185,238,247,140,100, 26, 99,152,150,112,
+ 6, 83,185,219,185,224,235,206,203,162,190,219,117,255, 37, 90,241,238, 17,194,143, 9,130, 43, 24,161,142,221,197, 44, 41,123,
+143, 99, 89, 55, 96,204,234,184, 49, 91,207,110,173,232,248,138, 93, 65,240, 40, 65,110,253,231,215,209,230, 6,143, 49,107,103,
+109, 30,185, 36, 55,146,190, 49,178,121,217,119, 83,133, 21,143,185, 8,232,204, 35,127,199, 35, 61,169, 26, 21,204, 6,153, 53,
+239,255, 51, 27,243, 94,200, 89,125,188,198,194, 48, 77, 74,244,139, 51,165,120,218,182,229, 56, 28, 65,116,162,243,240,112,218,
+198,239,156, 23,227,203,133, 52, 77, 83, 29, 45,171,135,217,213,200,222, 41, 69,220,213, 53,109, 99, 49,131,240,112,127,162,241,
+158,124, 58,209,249,134,166, 0,115,196, 89,135,175,239, 76,142,154, 18,118, 56, 28, 84,107, 34,133, 52, 69,196, 26,162,133,113,
+ 26, 16,175,227,227,214,183,144, 11,105, 69, 20,171,152,206,121,199, 85,219,241,236,186,231,170,235,112,149,207, 94,114,210,192,
+ 21,241,136,117, 28,231,196,195, 48, 65,202,244,237,129, 11,239, 56,120,195,101, 48,184,148,240,109,192,134, 70, 85,252, 21,140,
+146,115,214,182, 35,102, 92, 21,215, 46,239,114,170, 34,185, 41,170,210, 56,198,200,245,197, 21,167,113,212,103,222,168,223,219,
+ 58,171,107, 16,231, 56, 13, 35,215, 87, 87, 20, 18, 41,205,248,202,208, 63, 13, 3,198, 7, 45, 32, 74,198,155,176, 19, 44,218,
+173, 29, 49, 26,157,234,125,160,241, 53,134,217, 26, 8,129,152,245,201, 19, 84, 20, 0, 0, 32, 0, 73, 68, 65, 84,125, 57,157,
+ 70,196,120,166,156,112,141, 37, 27, 40, 86,255,242,222,241,236,197,115, 78,243, 72, 17,195, 48,158,120,241,226, 37,115,156,201,
+162,170,125,172, 38,223,165,148, 48,254,132,177,208,118,129, 41,122, 46, 46,123, 10,153,135,227,204, 71, 63,249,144,225,216,227,
+191,135,255,224, 79,255, 57,199,211,137,223,252,246,183, 12,227,145, 63,255,143,254, 61,190,250,234, 75, 90, 95, 40,105,228,211,
+ 79,255, 25,211,116,226,175,254,242,175,177,214, 48,143, 19,141,183,244,125,203,135, 31,124, 76, 31, 60,125,112,196,225, 68, 99,
+162,142,145, 41,117,121,169, 19,197, 88,213,248, 37, 23,205,186,112,134,132,106, 15,124,213,122,152, 58,245, 92,196,200,214,185,
+202, 48,171,239,158,213,112, 34,231,106,120, 75, 45,108, 77,229, 45,148, 34,140,177,240,245,171,175,249,250,155,239,112,109,224,
+197,135, 47,112,214,112,104, 58,242,156,185,191,121,224,251,155, 91,174,250, 3,119,239,142,220, 31,103,198, 40, 36,156, 70,165,
+162,231,180, 6, 43, 45,247,120,205,208, 48, 26, 75, 61,231,172, 98,226, 5,195, 92,170, 70, 75,244,188, 76,146,112, 53,203,124,
+154, 31, 72, 93,195,191,254, 55,127,197,103,109,199,245,245, 39,140,146, 73, 37, 43,241,176,212, 38, 72, 10, 89,102,156, 61,111,
+102,198, 40,204, 37,214,180,181, 10,226, 17, 77,124,204, 11, 1,115,167, 65, 19,217, 1, 90,106, 2, 94, 29,119, 47,227,119,229,
+ 13, 83,169, 70,103, 23,185, 49,171, 39,238,220,171, 86,200, 75, 87,229,214,223,111, 85,192, 87,173, 45,105,185, 92,106,254,182,
+117,110, 49, 57,238, 44,109,117,191,106,158,238,194,203, 34,152,147, 31,232,210, 69,214,208, 7, 43,118,119,185,215,255, 92,168,
+ 66, 13, 22, 74,174, 10, 35, 86,193,193, 92,125,210,186, 71, 76, 18, 41,166,172,180,164, 66,161,241,129,198, 7,165, 55, 89, 75,
+142, 58,193, 8,190,229,162,191,160,111, 14, 56, 49, 76,211,128, 69,187,235,208,182, 24,107, 24, 6,101,119, 55, 53,219, 56,231,
+153,156, 35,173,215,199, 40, 38,245,170,135,208,208,132,158,166,233,235,169, 52, 48, 77, 3,243,168, 2, 42, 43,134,182,233,116,
+ 68,149, 19,165,204,136,196,213, 29, 96,173, 10,229, 52,236, 66,118, 31,190, 80, 72, 43,156,199, 57,175,251,220, 70,247,180, 57,
+203,163,148, 60,181,162, 24,103, 86, 30,185,149, 66,103,132, 99, 21,229,136,206,173, 40, 69,214, 78,116,173, 23,237,227,207,181,
+170,199,243,238, 51, 53,203,252,199,108,255,222,238, 18,167, 62,141,103,133,130, 20,150, 79,119,165,199,153,178,235,173,205, 89,
+135,111,118,210,115,169, 8,224,149,173,176, 72,244,204, 14, 70, 83,159, 49, 67,169, 26,137,165,248,144,117, 61,148, 41,213,230,
+105,223, 47,118, 31,135, 24, 33, 63, 72,217, 59,219, 13, 44,191,148,151,212, 42,199,156,244,112, 31,231, 25,140,195, 4,199,195,
+112,228,217,179,103,100,150, 40,206, 26, 94,178, 85, 62,235, 79, 77, 35,116,149, 85,144,242,132, 96,112, 57, 19,109,102,122,214,
+208,245,207, 49,111,222, 17, 68, 85,239,210,118,204, 41,227, 16, 46, 27,175,193, 63,177,168,136, 8, 7, 38,115,154, 6,230,152,
+116, 71,237, 2,217, 24,108, 19,200, 49,106,136,136,209, 28,113, 7,186,102, 10,142,143,174, 15, 52,222,208,183, 13,141, 55, 92,
+ 31, 90,156,129,113,200, 76, 69, 24, 99,197,127,198,140, 49,145, 67,223,242,209, 69,135, 41, 66,231, 91, 36, 69,210, 52, 32, 89,
+ 51,212, 53, 35,193, 98,178, 22,151,169, 22,209,161,109, 73,197, 50,166,172,194,174, 92, 35, 60,189,224,155,134, 76,169,124, 7,
+ 21,243, 81, 84, 57, 94,114,225,112, 56,168, 39,223, 90,154,208, 16, 99, 98, 60, 13,120,103,117,138, 6, 76,243,132, 53,190,230,
+ 53,104, 23,151,227,188, 65, 84,140,165, 13, 45,193, 7, 88,180, 52, 37, 65, 54, 56,171,255,251,226, 45, 31,198,204,148, 11,201,
+ 8,184, 90,160,212,204,115, 99, 45,182,113,116,151, 61,130,101,142,122,222, 52, 93,171,148,202, 24, 41, 57,114,125,217,171,222,
+166, 10,213,158,189,188,198, 88, 33,116,150,159,253,236, 35, 78,199,158,223,124,126,228,143,126,246, 9,239,110,110,120,247,250,
+ 43, 74, 30,249,248,163, 23, 60,220,223,240,255,252,235,207,120,251,230,123,198,225,196,221,195, 3,191,250,236,239,121,243,230,
+134,121,140, 12,247,119, 92,245, 13, 57, 24,158, 95, 95,113,232, 90,188, 85, 7, 77,153,103,164, 68,198, 73,199,231, 62,120,189,
+228,168, 62,248,106,111,116,206, 97,157, 35,230, 72,104, 27, 82,156,107, 58, 93,253,249, 85,175,186,212,206,215,186, 80,109,156,
+245,243,243,218, 57, 55,214, 84,108, 55, 88,167, 5,226,237, 48,241,234,187, 91,238,222,221,114,104, 3, 63,249,240, 37,215,215,
+ 87,228,148,248,246,155,215,124,243,197,183, 26,175,139,231,179,223,126,207, 52,213,221,180, 8, 83,169,185, 23,168, 13,174,102,
+ 90,107,190,198, 50, 93,174,119, 85, 65,240,141,215, 96,171,152,241, 14,218,198, 83,138, 22,172,207,159, 95,209, 53,150, 79, 94,
+126,192,112,115, 75,156, 79,124,240,236,154,121, 46,220,142,134, 99, 22,146,181,117, 45,170,124, 3,113,142,211, 20,215,113,191,
+110,104, 44, 99,170,201,158,232,170, 76,170,146, 29,244,103,148,113, 53,107, 97, 59, 87, 77,213, 36, 44,106, 50,169,106, 94,127,
+ 46,229,121, 60,146, 52, 27, 49,110,119, 24, 47,221,146,152, 82, 15, 74,139, 60, 26,123,111, 60,239,154, 36,195,178, 79, 45,154,
+215,109,159,202, 74,251, 17, 92,232,163,224,140,115,194,215,182,112, 88, 58,169,125,183,109,246,195,135,245,255,217,181,165, 91,
+133,126, 82,176, 89, 86, 42,215,146,119,172, 65, 3,126, 29, 15,149,202,218, 13, 62,112,232, 15, 28,250,131,230,236, 78, 51, 37,
+234,238,243,112,113,137,111, 60,227, 60,145, 83,194, 27,165, 52, 25, 10,113, 30,245, 69,119,154,226,150,165,224,124, 67, 8, 13,
+161,105,240, 94,179,177,199,147, 48, 12,170, 54,109,131,163, 13,158,198,219,106,137, 83,244,236, 34, 72,172, 65,134, 42,156, 90,
+108, 46,118,211, 42, 72,169,194,191,154,158,100, 44,180,125, 75,223, 54,204, 67,229,215, 47, 1, 45,102, 71, 89, 91,198,210,162,
+254, 95, 91, 47,124, 41,250,251, 72,165, 27, 89,217,113,215,139, 89,161, 17, 11,174,116, 31,164,178, 60,109, 89,100, 83,155,214,
+221,229, 50,166,151, 61,107,125, 55, 34,183,178,137, 48,247,126,115,150,201,207,218, 77,115,174,165, 88,145,199, 85, 40, 41, 79,
+217, 43,119, 33, 44,121,155, 86,101,246, 25,239, 11,164,233,199,159, 93, 83,179,159,237, 99,170,225,153,104,244,125,103,201,194,
+ 61, 8,162,187,180,156, 11, 15,195,192,197,161,199, 88,237, 34,219,174,227,120, 28,200, 49,157, 7,216,239, 95, 5, 49,228, 41,
+210,245, 61,216,192, 24, 35,141, 24,198, 12,183,211, 68,247,233, 79,137,227,132,153, 51, 99,126, 32, 99, 41, 38,130, 41, 74, 49,
+ 44, 26,110, 34,198,114,204,145, 83,156,170,150, 66,195, 81,196, 26, 82,201,184,172, 1, 27, 37,101,130,129, 67,215,113,209,119,
+ 92,116, 45,109,125, 86, 77,201,180,174,208,133,128,149, 77, 59, 48,140, 35,121, 39,130, 77,211,140, 80,232,250, 14,135,165, 49,
+154, 93, 29,188, 2, 79,140, 44,211, 8, 75,219,182,148, 41, 18, 92,141,127,173,132,187,182,107,137, 69,177,164,243, 60,115, 56,
+ 28, 20,130,211, 31, 24, 78, 19, 93,119, 96, 24, 7,154,106, 15, 77, 20,142,199, 7,124, 19,184,232,123,198,105, 90, 73,114,234,
+ 57, 47, 92, 94, 94,106,163,146,102,226, 56,211,180,170,136,247,206, 86, 33,151,254, 94,173,213,117, 2, 56, 93,145,121, 91,115,
+ 34, 84,245, 31, 83, 98,156, 19, 15,195, 72,198, 18,218, 14,172,197, 22, 85,222, 59,107,153,230,153, 16, 26, 14,253, 5, 93,127,
+224,238,225,158, 92,102, 94,188,184,224,159,253,225, 31,242,112,127,207,171,111, 3,125,223,242,179,159,255,140,148, 51,215, 87,
+ 29,222, 59, 62,248,232, 3,254,230,111,255,134, 82, 18, 63,253,244,167, 60, 60,220,243,219, 47,190,224,217,213, 53,223,189,121,
+195,255,242,191,255,111,252,252,103,191,207,195,253, 3,167,135,129,255,233, 95,254,143,244, 93,199, 56, 12,152, 92,248,230,183,
+ 95,112,209,247, 92,116, 45, 31, 60,187, 98, 60, 30, 85, 44, 39,133, 52,205, 56, 67, 93, 49, 56,166, 73,113,184, 57, 37,125,111,
+139,212,201,237,130, 60, 78, 20,167, 22, 95, 31,194,138,249, 53,133,202, 79,216,208,205,202, 4, 73, 88,231, 85,159, 36, 82,247,
+235,158,182, 11, 56,223,224,187, 3,197,182,124,251,246,129,175, 95,189,102,142,194,139,171, 75, 62,254,248, 39, 4,223,240,237,
+ 55,223, 50,156, 38, 94,191,126,203,187,219, 7,154,230, 64,119,184,226,213,205,145, 57, 9,221,225,160,122, 1, 35,149,200,231,
+ 54, 54, 73, 29,183,151, 82, 40, 6, 98, 78, 43, 63,160,241, 94,173,125,142,245, 92,116,235, 52,210,210,134,192,195,253, 61,151,
+ 93,199,193,121,158, 95, 63,227,251, 55,119,220,221,223, 51,141,137, 8, 24,111, 87,252,182, 58,128, 52,166, 91,245, 4,218,245,
+ 47, 54,181, 82,215,131, 2,216, 82,214,102, 99,117,225,236, 5,233, 98, 43,181,117, 1,129, 41,133,212,111,167,218, 6,156, 57,
+ 15,217,220,237, 61,165,108,244,183,157, 80,200, 60,146,182,239,109,104,171,207,221, 84,214,182,252,211, 16,162,143, 59,155,167,
+ 66, 97, 86,186,215, 89,184,136,249, 17,182,248,102,243, 17,179, 93, 48,219, 28, 68,103,190,154,126,180, 9,142,124, 8, 58, 90,
+154,230,245,162, 55, 34,180,109, 67,219, 52,136,136, 6, 96,196,132,111, 2,125,127,160,109, 59,178, 36,230,113,164,164,168,123,
+242, 82, 84, 92,151, 34,182,209,220,225,152, 18, 66,245, 96, 86,192,141, 49, 26, 17, 57,140, 19, 57, 21, 14, 77,195,161,241,120,
+167, 99,178,146,166,170, 54,174,108, 69,217,138,155,178,208,201,234,197,152,151,139,185,212,236,237,172, 23,186,119,250, 18,118,
+109,224, 52, 39,245, 34, 87,209,218,130,165,149, 34,152,160,225, 1,190,142,195,189, 57,247,254, 75,141, 4, 93,198, 65,203,196,
+197,236,193, 49, 5,246, 94, 53, 49,219,192,123, 25,163, 27, 35, 72, 54,171,104,115,209, 94, 60,250,176,215,180,167, 53,195,124,
+153, 2,152,173,130,205, 43, 19,161, 10,241,204, 35, 28,146,236, 60,242,230,177, 45,109, 55, 57,216, 49,227,247,226, 60,179, 92,
+236,143,116,125,242,136,113, 36,108,110,138,213,103,127,182,217, 50,187,126,127, 81,212,233, 88, 50,141, 51, 49,105,146,223,112,
+ 84, 26,153, 53,142,227,105,226,249,243, 23,164,124,170,138, 87,179, 65,120,170,176,104,111, 11, 45,195, 72,211,181,136,133,113,
+142,132,226,248,254, 56,112,114,134,111, 31,238,249,236,205, 91,190, 24, 50,247, 49,115,140, 51,209, 26,162,181, 76, 2, 15,121,
+224, 84, 10,147, 1,241,141, 38,106,213, 81,119,138, 19,222, 41, 48,195, 55,158,195, 33,112,125,209,115,209,245, 75, 6, 8, 70,
+ 82,237,226, 10,141, 85, 49,167,160,124,244, 41, 70,166,121, 86, 40,147,245,136,213,200,211, 34, 89,105, 93,214,147, 76,170,246,
+ 76,139,201,145,198, 7,188, 49,180,141,103,152, 18, 22, 45, 64,164,166,136, 57,163,122,152, 20,179, 54,203, 37, 51, 79,147, 70,
+148, 86,239,248,225,112,201, 28,147, 62,203,213,110, 69,181,203, 29,186, 70,247,196,185,128, 20,218,182, 33,198, 72,140,177,170,
+183,161, 9, 30,138,208,134,160,226,212, 90,176,174,212,185,162,127, 15,189,230,109, 59,239,215,220,116,113,134, 49,206,204,165,
+224,219, 22,235,213,107,220,250, 78,249,242, 78,147,193,154,182,225, 23,191,247, 9,151,207,159,113,123,127,199, 87, 95,101, 94,
+ 62,235,249,253,159,125,204,195,177,231,208, 25,110,222,189,229,207,254,236,223,229,219, 87,223,114,113, 25,248,155,191,249, 91,
+ 62,250,248, 37, 34,153, 95,254,242,223,240, 39,127,242,167, 28, 79, 51,191,250,187,191,228,195, 15, 62,164,136,229,243,207,191,
+228,221,205, 29,222, 58,130,177,164, 97,100, 78,170, 91,184,188,184,210, 2,180,134,115, 5,106, 98, 95,209,169,102, 26, 71, 92,
+219,110, 46, 17, 50,113,158,201,214, 16, 26,229,179, 47,243, 43, 91,135,174,211,112,210, 98,205, 24, 82, 84,156,172, 53,106,227,
+125, 12, 43,179, 21,150, 21,156,195, 81, 8, 24,218,182,163,233,123, 76,215, 50,137,231,213,171, 27,222,188,187, 81,142,137, 49,
+204,177,240,229,215,223,112,209,181, 4,239,185, 31, 34, 55,199,200,105,182,140, 69, 56,149,153,104, 60,217, 22,138,211,145,123,
+206, 89, 17,171, 41, 86, 61, 85,169,153, 71,149,158, 87, 87,132,172,226,216,138,237,206,153,165,206, 79, 57,114,117,125,201, 52,
+ 76,156, 76,164,247,158, 49, 39,186,222,114,125,125,201,241, 97,100,206,142, 60,103,196, 57,210,186,151,175,220,127, 84,148,104,
+178, 84, 55, 80, 94,207,197, 37,216, 74,113,201,230, 44,195, 98,157,188, 46, 13,243, 26,168,179, 3,164, 27,131, 63,159, 3,154,
+247,243,202,215,147,170,108,151,249,126, 15,105, 30, 9,135,100, 39, 98,218, 93,196,203, 37,233,140,253, 39, 39,119,253,144,149,
+104,191,246, 95, 52,125,118, 31, 7, 43, 63,204, 31,223,243,238,182, 80, 16,187, 27, 1,171,133, 34,149,234, 49,183,170, 60,223,
+126,144, 58,198, 13,193,211, 54, 30,131,104,120, 66, 86, 6,119,211,116,132,182,165,148,194, 52, 77, 21,161,105, 9, 22,172,100,
+114,154,241, 70, 95,128,152, 51, 83,138,244,125, 75,219,245,184, 58,146,154,166,145,113, 28,200, 57,209,181,129,206, 27, 60,137,
+ 50, 13, 80,180, 59, 89,210,149, 20, 48, 82,214,139,214,219,109, 77,146,170,168, 68,119, 86,218, 29,121,235,170,138,188,144,162,
+ 42,121,131,119,164, 28,215, 11,185,236, 49,106, 75,176, 66, 61,168,247, 30,237,101,111,169, 58, 4,251,168, 12,220, 37,176,237,
+ 0, 71, 98,247,209, 98,122, 32, 47,117,159, 90, 53, 42, 55,125,177,146, 47, 97, 53, 75,182,107,217, 32, 49,171,221,109, 23,228,
+ 34,123,100,171, 89,233,217,143,180, 32,118,157, 8,108, 42,122,195,227,169,213, 82, 98,240, 40, 5,206, 84, 27,220, 15,234, 58,
+204,242,115,172,223,196,163,100, 65,115, 70,195, 51, 91,113,106, 52, 4,196, 90,253, 76, 99,142, 52,226,201, 25, 78,131,230, 94,
+207,115,174, 57,203, 13,243,120,220,172,127,236,181, 3,117, 32, 87,247,162,185,122,148,135,148,113, 24,126,123,115,195,169,237,
+248,187,251,123,254,223,239,111,248, 34, 27,230,166, 37, 89,203, 28,163,134,180,228,162, 54, 49, 99, 41,222, 32,113,166,113,142,
+ 38, 88,154,160,207,121, 31,172, 38,136, 57, 75,223, 6,181,174,197, 84,199,207,172,202,101, 95,243,178,157,247, 76,115,226, 52,
+233,133, 46, 21,242,209, 4,207, 92, 53, 0,177, 68,245,126,155,154, 90,150, 19,125, 27,112, 56,154, 16,232,154,166,102, 31, 64,
+ 27, 60, 9,131, 15,158,135, 97, 32,131, 6,160, 88,171,138,251,221,207,164,212, 29,252,195,195,195, 10,188, 50, 69, 3,104, 28,
+ 6,239, 3,195,105, 80, 23, 66, 41,132, 38, 48,167,136, 15,142,121, 26,144,162,249,244, 87,135, 11,221, 5,167, 84,245, 23, 42,
+222,242,214,208,132,138,150,173, 89,230,206,170,235, 37,139,174, 49,176,142, 88,127,239,139,235, 3,253,225,130, 57, 77, 56, 11,
+ 23,109,167, 98,217, 38,112,121,117,193,191,243,199,159,242,242, 39, 31,115,115,127,199,243,235,134, 47,191,252,146,203,203,150,
+ 55,111,191,229,226,170,231,175,255,230, 11,238,238,223, 17,243,204,183,175,190,230,171,175,191, 34,229,194,205,219, 91, 94,125,
+251, 61,243,248,151,140,195,196,241,254,129, 18, 19, 93,104,184,108, 59,134,187,123, 14, 93, 71,223,182,196,148,112, 37, 19, 79,
+ 17,215,181, 96,181,144,247,206, 50,220,159,116,239, 91, 84,245,157,221, 46,209, 45, 87, 97,117, 93,245,197,121, 82,170, 91,237,
+ 70,173,181, 20,163,174,160, 82,138, 22, 69,138, 19, 5,187,100, 73,236,210, 24, 22,208, 86,206,100,132, 16, 28, 62,120,218,190,
+ 71,156,231,148, 10,239,222,126,207,195,241, 68, 22,181,222, 6, 39,116, 93,143,183,194,195,195,192, 52, 71,198, 4,183,247, 19,
+ 15, 67, 2, 91,232, 15,150,236, 2,169, 36,142,243, 76,104, 28, 89, 4,235,124, 13,241,218, 80,196,139,253, 57, 39,221, 96, 75,
+ 73, 56, 87,153, 38, 94, 9,158,174, 78,250,186,198, 33, 41, 34,100,226,100,104,140, 69,172, 35,149,194,231,159,127, 78,211, 92,
+ 82, 68,215, 86,130,230,161, 99, 32, 97,177,171, 16,184, 90, 64,173, 22,124,212, 11, 61,203,249,181,187, 95,215,137,148, 93,179,
+179, 88, 86, 75, 45, 24,150,110, 94,182,232,213,178, 4, 80,236, 58,109, 35,231,244, 46,121, 36, 44,122, 60,126, 52,236, 58, 29,
+ 99,214,250, 97, 17,174,237, 99, 54, 87, 85,250, 63,241, 98,127,250,240,220, 46,246,229,178,149, 71,107,132,125,167, 95,118,217,
+240,123, 65,151, 49, 27, 86,214, 86, 13,193,234,241,174,151,186,170,221, 75, 13, 78,113,180, 62,224, 48,196,121,214,139, 6, 75,
+232, 90,154,118, 17,190, 69,134,211, 17,201, 51, 33,120, 28,130,228, 72,137, 99, 37, 45, 25,230,148,177,198,209,247,151,116,237,
+ 5, 24,221, 71,157,142,247,148,156,232, 91, 71,107, 51,196,137,148, 71, 76,137,234, 69,151, 58, 66, 55, 32, 57, 98, 81,250,210,
+ 62, 9, 45,197, 74,185, 51,154,150, 36, 11,160,162,134,117,140,211, 64, 11,132,238, 64,112, 16,237,246,217, 52,214,129,147,186,
+199, 44,187, 56,211,243,139, 92,100, 71, 75, 53,251,233,206, 15, 67, 87,182,132,180, 45,244,100,241,150, 23,100, 71,142,171,159,
+100,217, 61,226,251,148,190,221,106,218,236, 11,203,189, 26,189,108, 33, 69,123,140,112, 70,158, 48, 65, 62, 70, 15, 47,134,206,
+237,197, 87,114,155,252, 14,119,134,172,123,250, 37, 38, 87,118,156,252,247, 18,221, 96, 71,217, 91,222,177,250,179, 46,234, 61,
+215,226,160,230,129, 99,120,120, 24,104,187,158, 92, 78,155, 31,125,157,152,153,181,192, 73, 73,127, 61,143, 35,161, 8, 56, 77,
+122,250,126,158,120, 53, 28,249,228,223,254, 99,120,123,143, 19,203,148,148, 30, 39,206,144,114, 34, 4, 79,239, 26, 92,240,136,
+ 83, 21,115,235, 28, 33,248, 53,214,211, 27,221, 27, 31,186, 22, 68, 35,131,173,213,209,162, 10,167,188,166,108, 89,149, 83, 72,
+ 42, 28,199, 73,133, 65,227,140, 55,150,190,146, 23, 83,212,209,174, 32,186,199, 94,147,192,124,229,197, 27,156, 55,181,123,158,
+105,131,199, 58,136, 34,186, 18, 52, 90,196, 72, 73, 80,244,211, 41,136,102, 5, 84,142,185,171,180, 57, 99, 84,181, 46, 5,154,
+ 38,212,248,228,188,179, 45,214,252,240,122, 78, 93, 28,122,230,121,162, 9,158, 56,141, 52,109,131, 90,199,149,239,160,205,186,
+163,107, 3,185,184,250,231, 88,244, 73, 5,196, 98,189, 93,167, 61, 23, 23, 61, 31,127,244, 33, 87,207,174,201,146,200,105, 34,
+ 77, 19, 30,143,180,142,182,247,220,223,191,229,167,191,248, 9,151,210, 50,199,200,183,223,190,230, 87,127,247,247,220, 63,220,
+ 51, 76, 19,239,238,142,252,119,255,226,191,167,105, 26, 94,189,254,142,155,155, 59,222,190,185,163,107,122, 90, 27,120,251,205,
+107,174,174, 46,184,106, 2,121,158,232,155, 6, 95,163,163,211,195, 81,221, 60, 70,148,130,103, 13, 37, 69, 10,133,182, 13,148,
+146,104, 26,175,214,216,146, 25,134, 83,181,237, 90,230,105,174,216, 86,187, 2, 80, 82, 76,170, 80,183, 16,156,186, 44,172,217,
+130,186,116,154,225,234, 78,221,214,105,161,172, 81,215,165, 44, 64, 26, 21, 87,251,166,161, 56,199,152, 10, 49,142,188,126,251,
+ 6,193, 16,124,131, 1, 78,199,129, 23,207, 46, 56,158, 6,190,191,125,135, 17, 97,142,153, 49,193,113, 76,196, 98,201, 37, 19,
+143, 15,170,131, 8, 10,223,137,177,168, 77,218, 24, 40, 14,183,238,254,148,124, 39,139,170,172, 34,122, 83, 54, 72,112,164, 18,
+ 41, 41,211, 56,109,206, 16,225,250,226, 64,219, 56,198,168,161, 62,193, 55, 60, 28,111, 49, 18,152, 37,241,229,119,183, 76,198,
+144,140, 37,147,235,106,120,129, 69,149, 21, 24,229,168, 80,153, 37, 13,111,119, 46,218, 37, 30,186, 40,136,237,156,145,181,185,
+126,164, 10,153,150,223,215,239,189,182,178,219, 77,111,121,221, 21,226,178,200,147, 68,216, 64, 76,230,253, 0, 11,161, 6,166,
+152, 21,253,186,170, 66,235,158,122, 11,220,248,113,239,249, 15,102, 98,139, 89,131, 44,206,196,197,214, 60, 25, 62, 35,103, 23,
+182,108, 8,213, 61,220,100,217,243, 22, 77,227,177, 24,154,208,210,134,160,223, 73,206, 4,175, 15,102,168,190,113, 41,133,146,
+171, 55,208, 55, 42, 30,204,137,148, 35,227, 56,168, 42,184, 36, 29,223, 24, 71,137, 83, 13,110, 81, 40,131, 20,225,112,113,224,
+208,245,184,154, 38, 21,199, 1,147, 35,173, 51,144, 7,210, 60,225,115,194, 25,205,241,213,244,184,138,160, 51, 9,231,212, 99,
+238,156, 89,227, 93, 75,141, 77,196,232, 22,124, 73,138, 66, 10,198,234, 75, 88, 68,119, 55,174, 34,105,189,213,127,175,181, 48,
+ 45, 7,182,173, 36, 66,163,184, 89, 49, 22, 49,121,167,133, 56,183,128,253, 56,160,232,124, 60,173, 15,241, 57, 98,181,156,177,
+248,229,233,152,220,197,255,189,143,134,145, 93, 57, 33,238,189,100,181,125,210,219, 30,116,180,159,221, 24,115,206,129, 95,190,
+254, 42,214,171,241,150,219,226, 90,158,164,215,109, 36,206,223,101,202,220,167,195,153, 51,144,205,202,222, 17,136, 73, 87, 8,
+ 99,137, 42,252,178,138,126,245,141,134,253, 40,110,115,191, 50, 43,231,161, 57,178, 8,110,212,189, 17,139, 99, 76,134, 95,253,
+250, 55,252,183,255,205,127,197, 7, 63,249,136,223,220,188, 99, 74,137,185, 20,134, 42,204, 27,199,153,152, 50, 83,154,152,115,
+210,255,125,142,122,225,229,172,209,171,222,225,109,163, 86,185,164,233,135, 74, 92,180,132,208,144, 82, 36, 77,202,144, 55, 86,
+200,243, 72,206,162,214,205,162, 69,210,213,161,175,201, 92, 48,215, 24, 80, 31,220, 74, 70,116, 86, 32, 43, 81,206, 24, 33,167,
+136, 51,202,224,246, 33,112,124, 56,130,115,180, 77,224,225,221, 29,222,122, 93,105, 73,193,121, 79, 78,153,224,131,122,237,173,
+229,254,254,161,142,197, 67,221, 13, 79,122,217,131, 58, 86,234, 46,157, 82,180,227,174, 58,146, 54,120,245,228,163,132, 71,215,
+120, 21, 41,213,175,211,182,202, 59,215, 4, 59, 37,199, 77,211, 72, 27, 26,178,104, 71,219,135, 22,111, 44, 93,119, 32,132,192,
+ 52, 78,100, 41, 76, 83,196,137,165,237, 90,222,188,125, 77,185, 61,241,175,254,213,255,193, 41, 42,205,236,151,191,252, 21,119,
+247, 35,255,195,191,252,159,185,122,118,205,233,116, 98, 24,103, 94,189,250,140,231,207,159, 83,138, 16,124,207,253,187, 59, 90,
+219, 98, 82,228, 16, 28,243,221,173, 70, 48, 91, 67, 62, 30,105,157,215, 29,250, 60,144,227,192,229,229, 37,211, 52,233,247, 60,
+171,251, 34,229, 88,121, 8,154, 52,151,170,125, 54,229, 76,206, 35, 82,137,135,214,250,154, 12,167,186,158,105,158, 9, 21,249,
+ 90,202,146, 79, 80,209,199,117, 98,136,161, 22,154, 5,156, 95, 69,168,118, 21,189, 58, 93,187, 56,229, 8,220,222,222, 51,197,
+ 17, 1,250,190,227,227,143, 62,230, 55,191,254, 28,131,112,127,119,207,241, 93,225, 16, 26,218,166,227,244,112,207,152, 5,219,
+116,204, 15, 3, 24,209,239,197, 83, 3,115, 20,252, 83,196, 82, 82,181,252,150, 92, 99, 97,195,186,154,181,182, 78,241,234, 94,
+ 59, 22,200,166, 84,213,123,169, 77, 91,198,218, 66,219, 52, 52,221, 37,146, 45,119,119, 71, 26,103,152, 50,124,245,205, 27, 30,
+102,167,233,129, 86, 61,228,190,138,222,138,168,237, 81, 86,205,153,146, 3, 75,150,205,125, 37,165, 18, 34,151, 9,230,214, 57,
+109,129, 84, 53,106,103, 97, 80, 47, 19,169,146,241, 91,174,170,108,144,106,179,100,148,155, 51,171,146,156,117, 50,230,108,124,
+178, 16,196, 12,254,220,191, 99,228, 7, 10, 0, 57, 15,251,224,169,144, 22,243,164, 3,125,185,184,109, 29,149, 47,177,168,246,
+177,149,237, 7, 58, 41, 29, 43,149, 45, 99,123,229,129,171,125,129, 82,176,222,209,120,181,186,229,146,215, 92,224,178, 38, 15,
+ 85, 26,220, 34, 90,176,122, 45,205,113, 34,166, 68,140, 19, 57, 71,108,209,232,204, 82,162,254,247, 42,214, 40, 57,209,216,134,
+203,190,199, 27, 75,142,138,160, 37, 71, 28,153, 18, 39,200, 3, 14,197, 43,218,149,164,175, 35, 50, 29,238, 24, 29,237, 7, 85,
+113,164, 82,149,146,165, 40, 75,184, 40,161,202, 89,187,190,160,101,138, 85, 20,104, 72, 89,112, 73,129, 59,142, 92,187,203, 26,
+228, 32,138,233,116,245,215,196,250, 90, 8, 40,139, 91,235,170, 58,242, 41,194,239, 74, 52,217, 20,230,231,234,111,179,203, 5,
+223,227,220,246,228,180,243,130,110,215,205,179,219,205, 21,214,125,252,227, 73,210,166,132,215,191, 23,217,143,212,151,169,204,
+249,247, 96,140, 60,174, 11,206, 20,253,203,215,121,111,146, 84, 47,244, 34, 79, 92,250,200, 15,146,146,100,227,226,174,239,162,
+221,173, 51,114,169, 81,135,222,146,114,164,200, 81,133, 84,119,119,187,241,190,217, 49,239,119, 69, 87,113, 72,118,140,115,228,
+178,235,153,109,195,175,254,241, 43, 98,140,252,231,255,254,191,197, 31,127,247, 45,111,222, 62,240,221,237, 29,239, 70,195,235,
+155, 59,200,145, 56,142, 4,103,177, 65,241, 60,190, 24,172,113, 68, 11,214,121,157, 44, 85,207,183,243,129, 28,149, 65,237,157,
+ 99,174,100, 54,235,116,164, 15,162,151, 37,144,107,224, 72,127,232,184,236, 90,230,169,144,187, 6,155, 11, 65,194,134,106,206,
+ 17, 91,179,199,188, 53, 92,116, 29, 93, 8,154,119, 39, 26, 5,220,132,134, 40,165, 94,176,172,116,199,195,225,192,156, 18, 34,
+105,229,112,228, 44, 4,175,158,255, 56, 37, 66,211,114,113,232, 56, 30,143, 53,229, 46, 86,139,170,171,107, 23,189,144,230, 73,
+163, 79, 67,215,224,125, 77,109, 76,165, 2,181,160,241, 14,139, 16,154,128, 0,167, 97, 0,177, 21, 40,178,217, 37,211, 52, 17,
+156,227,205,235,239,121,247,112,228,112,121,137, 24,207,195,253,131,174, 20,140,101, 26, 7,134,113, 32,127,249, 61, 95,189,186,
+227,217,203, 23,204,115,100, 24, 53,159,254, 56,204,244,125, 15, 18,104, 92,207,215, 95,188,226,162, 63, 16,227,196, 69,219,113,
+188,187,197,145,105,157,231,250,112, 96, 28, 70,250,166,103,158, 70,138, 81,238, 1, 20, 66,208,228,180, 34,162, 43,147, 42, 2,
+246, 65,173,125,135,174, 91, 47,244,113, 28,149, 74, 25, 26,124,211,146, 98, 92,131,107, 64,207, 3, 91,199,200,169, 20,188,215,
+226,136, 82,214,233,210, 18,198,228,188, 95,125,252,166,146,162, 74,213,106,101, 81,246,192,195,148,184, 63, 30,137,113,162,105,
+ 60,109,104, 56, 61, 12,124,113,250,146,148,178,198, 74,119, 29,101, 78,220, 15,153,155,135, 35, 49, 27,230, 92, 16,147,176,222,
+ 83, 82, 36,184, 6,193, 48,214,231,206,212,236,136, 82, 39,171, 66,205, 52,152, 39, 76, 61,215,115,165, 61,218,117, 53, 88,187,
+229, 10, 52,154,178,174, 51,147,192, 24, 19,253, 69,207, 56, 71,174, 47, 46,113, 20,190,251,254, 27, 94,124,244, 41, 55,223,222,
+169, 29,186,100,156,236,135,120, 59,210, 35,103, 67, 72,245,162,239,146, 41,235,141,190, 78, 56,228, 81,230,243, 94,155,180, 52,
+ 20,214,216,165, 83,151,179, 49,251,123,113,147,203,224,114, 39,110, 56,195,206,217, 31,184,184,159,226,180, 23,249,129,196, 53,
+121,226, 82, 48,143,240,160,143,254,157, 29,188, 68,187, 30,187,237,214,159,136, 97, 45, 21,209,119,198,237,174,214, 38,187, 83,
+ 42,219, 42, 90,113,214, 32, 57, 35,185,208,120, 79,202, 81,213,160, 53, 46, 54, 39,189,212, 67, 8, 74,162,147, 72, 74,145, 56,
+ 39, 29,255,164,153, 96, 74, 13,114, 41,107,173,147,171, 40,171,107, 61,141,179,228, 52,147, 74,221, 41,165, 19,146, 38,144, 72,
+ 35, 66,227,108, 29,195,104,252,169,179, 6,239, 12, 1, 8,206,210, 54, 45,214, 25, 82, 73,204, 57,107,186, 79, 44, 76,201, 80,
+112,184,170,118, 39, 41, 97, 73, 42,196,160,160,151,127,202,121,221, 59,107,140,174,199,161,197, 76,145, 82, 27, 63, 85, 65,231,
+122,169, 23,161,242,135, 31,119,189,230,189, 75,252,177, 64,227,204,203, 93, 45,105,155,219,122,201, 30,168,194, 57,121, 63,229,
+207,200, 70,138, 95,215, 61, 70, 7, 91,139,155, 97,251,218,230,252,171,175, 95,220,238,245, 39, 59,242,252,254, 18, 63, 87, 6,
+236, 9,110,250,183,242,131, 81,193,171,206,192,154, 39, 28,111,242, 62, 89,225,189, 95,175, 62, 85, 83,214,100,187, 5, 87, 58,
+199, 76, 19, 60,167,211, 80, 1, 51,114,246,178,201, 46, 85,113,251, 99, 21,181,109, 26,203, 49,142, 92,116, 61,175,134,119,252,
+ 95,191,252, 91,254,235,255,242, 63,227,249,157,101,106,132, 83,103,184,155,102,108,168,133, 99,171, 48,140,156,181, 3, 15,149,
+196,134,117,235,238,175, 32,180,135, 11,238, 31,238,201,149,167,158, 83, 94,211,195,124, 48,149, 42,150,215,174, 25,107, 16, 87,
+150,120, 32, 60, 5, 83, 18,193, 41,132,201, 32,180, 77, 91,147,197,148,147, 16,140,165,177, 78,149,209,206,113,113,232, 24,139,
+ 96, 93,194,137,242,201,251, 92, 56, 77,170, 36,159, 82, 84,155,210, 10,133,209,157,112,215, 6,138,215,139, 36,165,153,241, 56,
+213, 52, 46,139,167,168, 87,217, 65,206,234,249, 47,200,150,142,230, 44,227, 56, 19,188,215,177,251,146,148, 88,241,204,211, 60,
+173,138,234, 84,167, 44,174, 82,214,230,121,194,184,128,179,234,229,190,127,247,192,253,148, 21, 39, 61, 79,235, 40,107,225, 27,
+ 8,134,155,155, 59,134, 41, 41,151,189,170,227,111,111,222,241,253,235,183,154, 83,158, 51,146,133,251,233,158,190,245,152, 38,
+227,200,216,154,197, 62,205,181, 11,143, 42,242,114, 86, 86,143,117,169, 43,215, 84,181, 64, 82,197, 98,227, 48,129,129,113,156,
+ 8,190,170,219,107,134,198, 52,143,148, 82,189,249,213,157,146, 82,162,109, 91,181,128, 26, 67,202,147, 18,244, 68,211, 39,149,
+245,190, 4,237,136, 2,149,156, 87, 39,116, 13,131, 41, 69,253,231,164,194,113,152, 25, 82,133,127, 25, 45,152,126,254,179, 63,
+224,139,223,124,206,195,253, 72, 8, 1,177,112,123,119, 84,135, 74,113,250,174,250,150, 73,198,106, 37,212, 70,202, 88,175,121,
+227,104,250, 93,204, 81, 59, 96,103,171,152,211,177,127, 69, 64, 53, 71, 98,132,148, 19, 41, 23,124,157, 26, 12,243,132,113,158,
+113,206,204, 73, 5,111, 31,126,240,140,241,238,150,171,254,146, 55,239,222,209, 58,120,246,236, 37,159,124,244, 9,159,253,230,
+123, 21, 72, 55, 1,178, 2,135,114,205,152, 55,187,196, 41,133, 22,233, 4,204,216, 69, 79,180,107,104,138,172,209,211,139,136,
+ 93, 19, 54,229,140,186,201,206, 49,228, 46,186,254, 47,148, 96,163, 30,237,117,159,183, 95,147, 26, 89,213,226,231, 65, 21,118,
+ 55, 60,180,187,157,250,102,233, 89, 58,151,179,240,149,250, 0,189,175,114,151, 93,138,154,221, 34, 52,247,165,201, 46,119,123,
+181,171,153,205,147,254,216,150,103,206,196,122,162,227,235,221,142,120, 47,149,179, 70,127,232,222, 64, 27, 84,105,187, 88,104,
+124,208,100,161, 69, 76,103, 81, 15,187, 49, 66,104, 54,127,120, 74,137, 88,242,138,133, 13,198,210,250, 26, 71, 41, 75,170,142,
+ 10,240,174, 46,175,240,193, 19, 99,212, 34, 96,210,177,152,177, 58,254, 14, 21, 0,179,140, 87, 12, 26,207,216, 54,134, 46,168,
+157,194, 59,221, 31,205,177,112,127,154, 25,230,204,152, 68,245,163, 54, 40, 95,191,170, 38,131,215,204,107,106,129, 52,231, 84,
+ 63,115,179,142,151,150, 46,105, 17, 12, 46, 69, 81,104, 59, 70, 44,119, 49,115,202, 66,174,188,216,125, 34,214,142,213,183,165,
+149,237, 70,245,170,175,176,143,220, 12,203,101,189,140,149, 30,113,221,164, 2,229,101,185, 76, 89,121,253,106,136,223,211,149,
+170, 82,221,156,167,192, 61,201, 28,220,233, 60,182,226, 97,107,223,229,189,239,199, 34,178,255,181,167, 59,245, 51, 46,187, 89,
+138,198,221, 63,107, 87,159,225,198, 81, 88, 68, 51,198,156,133, 30,153,250,253,173, 47,248, 66, 33, 43,218, 37,234,152, 52,213,
+154,192,156,175,162,234,123,107,107, 54, 0,100,140, 45,106,139, 48,106,177,137,199,123,254,147, 63,255, 83,122, 47,156, 30,110,
+ 57, 78, 35,167, 42, 96,203,185,212, 67, 90, 13,125,214,120, 82, 41,216,154,133, 80,150, 11, 83, 68, 51, 2,106,183,181,117,197,
+250,204,165,162,255,125, 73,229, 42,213, 41,210, 52,129,174,109,121,118,121,160, 9,122,169,148,221, 84,197, 59, 71,215,170, 63,
+218,228, 72, 31, 44,151,109, 67,227, 52, 86,184,136, 48,206, 51, 11, 18, 73, 5,161, 65, 1, 49, 86, 9,118,193,249,106,127,132,
+254,208, 81, 74,230,208,119,228, 26,119,187,120,199,109,157, 46, 4,239, 85,232,102, 44, 33,248,245,127,115, 78,137,124, 44,161,
+ 85, 78, 15, 96, 87, 19,199,108,253, 76, 67,211,232,148, 44,198,234,160,161, 10, 2,183,200, 83,193, 96,189,142,228,135,113,214,
+245, 93,181,147, 26, 3, 93,215,105, 64,135,179,148, 92, 56, 29, 7,134,211,145,187,219, 59,142,199, 19,113,142, 88,131,126, 62,
+ 69, 73,104,173, 87,157, 67, 41,106,255,203, 49,106, 83,226,155, 45,249,175,100, 92, 21,160,109,170,105,125,158,210,130,207, 69,
+ 89, 25,165, 44, 59, 96,214, 28, 15, 83, 69,111,101, 89,231,212, 61,153, 34,130,221, 58,173,157,162,118,197,243, 52, 43, 29,174,
+ 70, 65, 75,109, 6,150, 48, 29,140,134, 22,197,172,136,212,211, 56, 49, 76, 51,227, 52,147,114,230,208, 29,184,186,184,226,225,
+238, 8, 88,198,152, 24,135, 17, 22, 49, 91,213,155,228,234, 59, 31,102,157,144,106, 80,142,122,230,157,113,245, 71,187,172,246,
+204,154, 8,170,157,185, 37,120, 93, 35,236, 5,174,154,168, 87,237,165, 73, 49,183,203, 59, 81,144,250,117, 11,115, 46, 92, 94,
+246,180,141, 90, 48,167,225,200,241, 52,226,155,150,207,191,252,142,185,100,138, 49,234, 3, 95, 34,144,235, 10,122,217,149,171,
+115, 72,207,182, 92,214, 28,203,237, 92, 92,144,210, 70,125,233,203,100,249,188, 21, 94, 90, 28,253, 30,220, 69,123,249, 23, 82,
+ 67, 35, 22, 11,144,250,182,133, 98, 54,136, 73, 94,149,181,219,101,107,151, 36, 40,177,143,198,232,187, 17,162,181,239,227, 56,
+119, 9, 98, 43, 27,126, 57,196,150,195,206,186,154,109,107,214,106,111, 99,254,176,118, 47,166, 62,112, 44, 17,130,143,162, 85,
+ 31, 31,186,182,114,187, 69, 84,200, 98,173,134, 52,104, 40,133,122,201,131,245, 52, 33, 32,185, 96, 29, 53, 21, 72, 89,221,182,
+122,194, 23,156,172,113,166,162, 46, 75, 13,129,209, 42, 14, 81, 79,230,161,105,233,154,182,238,149,146,142,160,196,208,248,134,
+254,208, 35, 2,113,142, 72,206,164, 56, 97, 40, 56, 35,120,103,112,171,162, 84,199,224,193, 67,240,218,189, 7,163, 9, 78,115,
+154, 57, 77,145,251, 49, 51, 68, 72,120, 18, 86,145,157,182,106, 8,170,162,218, 58,187,243,223, 11,185,142,216,197,184,122,225,
+170, 98, 23, 49,168, 51, 88, 59, 26,235, 28,190, 59,112, 95,132,187, 84,136, 69,255, 25, 10,187,135,240,241,148, 70,167, 34, 43,
+180,104,177, 27, 62,226,164, 47,135,203, 98,135, 59,103,186,111, 69,195, 42, 34, 89, 71,213, 86,105,114,102, 11,126, 89, 5,115,
+ 98,207,166, 60,231,153,227,155,116,255, 28,184,179, 57, 54,222, 43, 78,118, 17,194,108, 16,167, 31, 10, 98,123,148, 26, 40,107,
+ 98,224,246, 13, 45,171,170,243,194,195, 60,230, 68,188, 55,233, 64,247,196, 69, 15, 23, 77,232, 42,171, 47,127,115, 2,232, 95,
+174,234, 88,140,243, 74, 43,116,224,173, 46,200, 90, 31,152,142,119,252,252,195,103,252,209,239,255,148,124, 58,169, 53, 76, 12,
+195,105,196,138,165, 24, 24,115, 2, 99,215,209,180,134,253, 36, 74, 74,202,246, 78,154, 71,174,123,236,188,176,255,200,197, 40,
+126,216, 88,124,232, 42, 3, 91, 15,215,254,186,199,119, 45, 41, 11,125,223,105, 74, 23,133,146, 74,165, 42,186,186,231, 46, 88,
+ 17,156,100, 46,187,150,139, 86,213,239,222, 55, 58, 25,171,107,160, 57,166, 53,211, 60,175,159,175,170,224, 23,127,240,225,226,
+176,238, 76,157,115,116, 77,127,230,210, 1,221,173, 42, 63,159, 10,149, 41,235,229,174, 81, 81,208,117, 77, 77,159,155, 53,203,
+219, 40, 6,218,183, 45, 25, 37,216,177,196,163,214,168, 90, 21,151,153,234,213, 86,237,202,161,235,160, 36,130,211, 75,217,136,
+193, 27,101,172,107, 7, 94, 19,247, 80,181,121,237,132,214,115,110,211, 9,233,247,240,236,217, 51,109, 14,114,161,105,186, 26,
+205,105,234,168,124,196,215,255, 92,138,208,132, 86,139,172, 74, 50,244,222,146, 75,205,147,168,177,217, 77,211, 48, 96,117,191,
+ 36, 0, 0, 32, 0, 73, 68, 65, 84, 78,115, 77,123,172, 23,185,232,232,122, 41,248,150, 32, 26,107,182, 63,158, 22,152,118, 93,
+135,232,168, 91,215, 71,122,238, 87, 97, 24,150, 57, 23,166, 88,184, 63, 13, 76,169, 80,112, 10,218,113,142, 23, 87,215, 60,191,
+184, 98, 28,103,222,222,223, 43,175,160, 9, 4,224,162,105, 8,190,209,124,132,162,177,213, 33, 56,197, 96,171,194, 84,155, 51,
+167, 19,210, 92,249,243,185,200,122,252, 88, 99,112,181, 72, 22, 17, 92,208,248,237,133, 58,168,214, 98,157, 78,142,243, 76, 22,
+ 72, 37,215, 32, 27, 91,127, 63, 56,222, 13, 56, 81,226,233,213,117,207,213,179, 75,102,113,124,254,213, 91,198, 82, 72, 11,220,
+101, 29,227, 87,170, 92,169,127,246, 82,139,210,165, 73,145,205, 67,164, 14, 3, 5,229,136,229,204,171,126,182, 26,204,101,157,
+ 52,136, 8,238,162,189,248, 11, 61,228,115, 21, 55,148,245,176, 93,173, 57,178,199,210,237, 65,242,203, 33,186,247,183,111,251,
+247,253, 1,189, 31,161,155,234, 51, 60,195, 43,154, 39,188,232,178, 9,135,140,177,107, 4,152,212,185, 0,123, 72,206,226, 11,
+254,157, 65,177,139,103, 94,214, 78,114,217,249,248,106,193, 9, 86,133, 58, 57, 38, 92, 5, 72,164,122,120,217,213,134,144,107,
+174,186,170, 71,115, 46,234, 69,173,123,141,224, 44,135,174,231,197,245,115,156, 83,210, 92,169, 73, 69,206, 58,218,166,197,123,
+229,104,151,164,170,197,146,162,242,135, 37,215,151,197,156,173, 33,172, 85, 82, 95, 41, 26,124, 49, 76,145, 83, 13, 39, 24,179,
+ 80,156, 39, 27, 67, 44,137, 84, 18, 38,168,154,116,249,125,204, 46, 68,193, 88,135,193, 49,199,172,233,115, 86, 65, 48,206, 88,
+ 13, 51, 96,163, 27, 25,231, 41,190,227, 33, 21, 78, 69,115,148,151,239, 19,163,254,157,197,205,176, 47,222,224, 60, 69,207, 88,
+ 45, 52,214,201,138,217,243,212,205,153, 80,108,233, 94,109, 21,140,236, 59,123, 83,227,224,222, 91,199,236, 96, 46,123,175,233,
+121,247,251, 88,152,198, 19,194, 77,217, 37,189,201,147,127, 89,126, 92,224,249,131,174, 13,243, 88,224, 41,155,117,110,217,141,
+237,254,251,249,180, 74,214,203,102, 9,181, 88, 45,122,235,215,221, 10,101, 29,217,154, 85, 72,233, 23,143,176,173, 59, 96, 83,
+136, 15,239,248,143,255,236, 79,232,211,145, 84,133,108, 5, 71, 50,150, 41,229,154, 80, 24,215,233,154, 49,134, 24,163,142,175,
+107,120,138,216, 26,240,211, 28, 72, 38, 64,232,233,174,159,227,251, 75,126,246, 71,127, 76,211,247,140,179,174,135, 76,219,144,
+172,112,154, 38,164, 24, 58,239, 56,180,142, 52, 43, 55,188,235, 90, 48, 74,211, 11,222, 97,164,224,141,112,209, 54,180,193,115,
+121,232, 81, 98,167,169,233,107,134, 97,154, 9, 77, 75, 42,153,152, 50,214,187,181,251, 86,138,165, 97, 24,116, 47,110, 87, 56,
+145, 90,236,226,218, 85,107,215,185,233, 26, 20, 62,162, 23,189,161,111,187, 42, 16,211, 88,100,107,181,248,119,174,102, 59, 84,
+209,147,114, 39,244,137,154,231,185,190,111,142,148, 11,243, 28, 41,160,127,175,171,192,182,109,170, 90, 94, 63, 63, 95,187,224,
+ 92, 5,184, 82, 22,136,145,221,105, 72, 42,255,160,104, 94,125,211,132,245, 34, 86, 17,172, 62, 31,193,123,134,211,160,184, 86,
+175, 2,194,121,154, 43, 48,199,236,138, 3,170,245,172,138,126,157, 39,173,145,185, 42,118, 91,158,197, 82, 53, 59,198,154,117,
+149,185, 20, 16, 90, 97,184, 26,157,234,170,125,185,206, 82,156, 37,229, 84,133,188, 48,165,204, 20, 19,195,156,234,133,175,111,
+ 84,219,182, 53, 74, 86, 56,157, 6,230,121,210, 48, 42, 81,171, 96,223,180,152,162,153, 21,169,230,157, 99,171,104,211, 55,213,
+ 53, 34,235,157, 52,205, 81,187,235, 21, 48,182, 9,114,157,221, 38, 53,214,235,247,152,139, 98,107,227, 28,137, 41,175, 77,246,
+226, 48, 41, 53,159, 35,198, 76,215,118, 72, 17, 98, 44, 60,220,159, 40, 24, 66,219, 96,252,129,175, 94,191,101, 42,203,118,122,
+ 3,112, 45, 18,223,197,182, 91, 51, 37,183,213,246,162,214,169,118, 94,121, 47,149, 74,182, 96,168, 29, 43,132,186, 30, 55,123,
+246,251,227,126,225,189, 14, 70,228,189,241,226,249,198,178, 60,218, 9, 10, 79, 81,227, 13,246,189, 14,234,241, 65, 39,251,160,
+138,189, 90,126,103,145, 48,203,110,126,159,251,254,187, 34, 98,183,158,111, 69, 2, 46,251,204, 45,237, 75,163,255, 68, 17, 63,
+ 56,171, 47,117,170, 47,171,181, 22, 49, 66, 38, 87,174, 58,117,212,168,187, 16,205, 7,246, 28,250,158, 23,151,207,104,189,231,
+120,255, 78,209,127,203, 40,165,126,111, 57,234,104, 51, 4, 45, 26,200, 25, 33,211, 52, 26,163, 42,213,139,104,106,101,151, 36,
+107, 44, 33,154, 66, 36, 98,136, 2, 5,175, 73,108,213,138, 17,171, 10,222,155,242, 94,103,158,164,208,248, 6,111, 20, 42, 51,
+165,204, 41,206,106, 37, 49,150, 82,244,193,147,218, 73, 90,107, 40,198, 49, 38,152,138, 37, 27, 91, 31,158,218, 9, 26,237,232,
+164,108,251,114,181,184,219, 77,149,109,182,135,115, 79, 29,116,139, 32,196, 60,242,182,155,109, 2, 80,106,216,194,118, 0,217,
+149,161,188,207,139,223, 95,102,118,181,204,149, 93,176,140,217,180,155,230, 41, 17, 31,251, 87,234, 61,177,220,251, 26,129,167,
+131, 92,206,158,227, 39,240,176,103,239, 21,242,158,124,110,129,199, 88,217,137,235,118,157,187,126, 79,231,251,181,101,194,102,
+118,250, 17, 83,119, 74,102,253,172,118, 74, 2,171,221,210, 92, 28,127,247,213, 43,254,207,191,250, 91,254,139,127,254,251,116,
+ 99, 70,238, 34,161, 63, 96,146,165,105, 10,110,206, 52,161,197,216, 68, 18,225, 56, 77,132, 78,199,141, 38,137,146,209, 66,203,
+203,235,103, 60, 68,193,133,142,166,109,249,238,205, 27, 62,252,232, 35,238, 79, 71,110,238,143,220, 28, 79, 90, 4,215,160,154,
+224, 44, 69, 44,243,194,166,175,218, 17,189, 4,245,157, 42, 57, 87,160,167, 90,168,148,167,238,193, 25,142,167, 35,214,123, 76,
+206,180, 93,199, 56,199, 21,171,233,156, 67, 82, 86,241,153,119, 56,169, 35,232, 24, 9, 93,139,119,202, 96, 79,185, 16,130,210,
+224,108,197,193,230,156,177,222,174,228,192,156, 34,214,168,165,181,109, 91, 82,138, 28,186, 86, 9,141, 41,169,159,218, 55,138,
+243,149,133, 8,168, 7,118, 8,106, 71, 27,199, 17,223, 52, 72, 84, 11, 93, 49,134,177, 90,195,230,121, 84,219, 29, 78, 87, 28,
+ 57, 17,231,169, 54, 28,186, 2,115, 70,170, 59,179,206,196,151, 85,140,213,160, 24,131,212, 16,149,132, 84,226, 91,206, 69, 67,
+120, 58,205, 79,119,198,208,118, 61,243, 56,114, 26, 71,156,179, 92, 94, 28, 16, 41,171,128,209,214, 66, 48,198, 88,181, 66,142,
+148, 51,105, 86,125, 68,223,118,136, 73, 85,143, 80, 21,221,213,122,105,164,104, 71, 90,182, 21,233, 18, 44, 21, 75,194,138,134,
+ 96, 25, 23, 72, 89,163, 66, 99,202,187,233,172,171, 97, 83,122,161,223, 13, 3, 77,157, 68, 4,103,240, 93,195, 69,223, 65,204,
+ 76, 81, 35,123,173,213,233,143,181,158, 24, 19, 41, 77,155,130, 60,107,104, 75, 70,214, 41,209,166,203, 90, 10,243,180, 53, 76,
+ 57,211,180, 1,103, 13,243, 20,193, 24,154,160, 36,198,109,143,168,239,205, 52, 69, 90,223, 48,140, 17,145,168,122, 5, 41,204,
+111,110,185, 59, 29,193,222, 51, 69,213, 39, 25,187, 49,238,183,100, 74,181, 74, 99, 84, 39,101,214,140,116, 30,101,102,236,214,
+198,108,169,152, 91,162,169, 89,223,234, 69,223, 98, 20, 62,179, 63,145,236,218,157,236, 71,147,214,218,141, 14,182, 63,180,138,
+169,126,195,167,174,207,141,243,171, 99, 34,253, 82,214,153,247, 60,187, 91,166,250, 19,221,206, 18,215,186,116,134, 75, 49,241,
+ 20, 97,142,189,218,254,220, 19,127,150, 60,183,231,105, 86,235, 80, 41, 5,217, 49, 61, 75, 29, 69, 53, 65, 3, 28, 98, 76,234,
+ 5,175, 35,109,157,150,108, 72, 90, 77,239, 17,156,209,236,242,103, 23, 7, 46,250,150, 56,197,154,143,173,126,199,165,186, 44,
+ 53,108, 34,132, 6,231,156, 2,108,200, 58, 66,218, 49,215, 23,176,140, 82,236,116, 20,175, 80, 14,237,170,115,133,249,175,123,
+228,101,239,154, 83, 29,115,109,209,168, 81, 4,151, 11,206,105, 22,182,142, 58, 61,228,196,156, 18,193, 54,250,176,217,197,183,
+ 95,125,168, 34,204, 5,141,151,169, 43, 17, 91, 21,242, 88, 83, 59, 13,115, 14, 74,120, 44,145, 91,199,226, 91,149,105,119, 10,
+ 50, 91, 20, 59, 44,108,120, 87,193,104,178,223, 35,101,119, 41,133,146, 99,213, 1,200, 74,211,179,103, 60, 4,115,166,209,216,
+111,161,246, 49,191,123, 82,220, 89, 29,137, 60, 49, 94,151,243, 20, 65,121,130,167,176, 43, 80,203, 89, 71,190, 20, 37,219,126,
+125,121, 49,247, 62,245, 39,102,241, 85, 68,195,186, 26,115,181,179,172, 89, 69, 90, 0,212,175,191, 4, 95,172, 2,209,138, 38,
+ 54, 34,107, 81,179, 56, 54, 38, 60,247, 52,252,139,255,245,255,230, 63,252,227, 63,228,240,252, 19,158,143,133, 50,141,220,158,
+ 78,116,206,112,217,180, 76, 57,147,172, 37,138, 96,250,158,230,226, 25,174,185,224,112,249,130,187,251, 17,219, 29,184,125, 56,
+113, 59,223,241,201,139,107,222,188,125,139,132,150,104, 13,217, 26,166,146, 25,210,204,161, 11, 24,155,171,192,204,209,218,134,
+139,203, 11,140,209,139,200,187,160,112,144, 37,109, 42,120,226, 48, 43,111, 59,103,186,174, 69, 12,140,211,196, 20,103,112,138,
+135,117,222, 97, 82, 66,114,166,109, 27,112,142,113, 60, 97,156, 70,168,206, 41, 34,120,124,141, 3, 53,162,128,149,148,106,113,
+ 81,139, 71,239,125,181,184,185, 85, 88,155,235, 24,220,218, 26,110, 84,181, 4, 75,116,168,113,150, 41,170, 18, 60, 37,253, 62,
+ 48, 48,103,205,147, 8,161, 97,170,240, 21, 91,195,118, 20,110,227,176, 69,104,172,231, 52, 78,196, 57,215,145,172,172,162, 88,
+ 61,231,237,142, 70, 88,211,196,170, 62, 70,119,223,117,207,189,100, 52, 88,213,254,244,125, 79,206, 9,231, 29, 86, 12,211,172,
+174,151, 80,127, 6,167,113,168,150, 65,131, 65, 67,167,108, 22,226, 56,105, 97,101,108,125, 95,243,250,243,200, 69, 35, 95,125,
+ 8,196,170,199,241,117, 92, 79,209, 9,230,194,100,178,214,146,139, 94,184,182, 56,166, 24,137,185, 32, 41,105,188,110,157,150,
+ 44,231,115, 19,130,234, 60,230,137, 38, 52, 4, 11, 14,161, 11,142, 16, 52,229, 83, 98, 34,206, 81,127,206,162,188,248, 34,137,
+ 28, 35,214,123,218,170, 49,241,222,115, 26, 6,181, 18, 98,215,226, 97,111,170,146,122, 6, 59,235,200,213,223,125, 26, 70, 93,
+ 69,228, 76,206, 16,140,163, 20,209,108,142,218,103,231,172,141,197,156, 84,229,239,219,160, 19,205, 52,115,125,232,193, 90,142,
+167,153,152,133,108, 52,163,193, 27,179,118,209, 98, 44, 70,117,203,245,108,114,107,134,251,227,169,182, 78,142,216,176,231,242,
+232,182,147,229,174, 98,213,239, 56,231,182,241,187,200,114,129,108,151,213,126,140,184, 23,243,172,221,198, 46, 76,227,169,132,
+183,243,131,107,219,129,255,144,144,205,214,139,125,237, 54,150, 61,120,141,108, 93,112,130, 11,217,172, 26, 15, 55,200,253, 18,
+216,178, 23,229,189,183,231, 92, 33,241, 85, 20,118,190, 99, 9,117, 76, 41,146,245,225,106,254,127,214,222,109, 73,146, 44, 59,
+207,251,215,218, 7,119,143,200,204,170,234,234,158, 19,160, 25,112, 64,144, 16, 32, 80, 38, 65,124, 7, 93,232, 5,244, 54,120,
+ 32,221,138,102,186,146,104,162,233, 70, 23, 50, 18, 6,145,162, 17,135, 1, 6,141,158,238,233,238,170,202,140,240,195, 62,233,
+ 98,173,189,125,123,100, 86, 79, 15,193,134,149, 97,166, 38, 59, 51, 35,194,221,247, 58,252,255,247,123,108,219,134,109, 91,101,
+ 76, 67,187,114, 84, 82,204,164, 90, 74,122,131, 57, 38,220, 79, 35,222,220,223, 99, 48, 6,219,188, 96,219, 22,228, 20, 17,162,
+ 28, 68,134, 25,214, 57, 21,112,136,136,101, 89,133,102,101,140,144,169, 74, 78,162,238,212,247,218,121,219,232, 67,169, 0, 37,
+ 11,248,194, 57,163, 55,102,214, 67, 77, 7, 16, 89,115,194,169, 75,247,233,188,142,226,221,149, 11, 59, 33, 35,134, 40, 65, 52,
+ 42,122,217, 17,249,140, 8,139,141, 29, 54,102,100, 99,100,164, 95,113,144, 68,173,192, 49, 85, 68,164,161, 27,220,253, 49,196,
+ 32, 35, 65, 8, 68, 80,100,164, 90, 39, 9, 34, 70, 82,198,178, 81, 2, 25, 27, 89,109,176,217,199,133,109,252, 89,181, 31, 37,
+ 35,231,186,207,221, 71,215,245,143,124,198, 69,172, 81,196,106,217,203,251,215,208, 11, 27,116,237,146, 88,179, 15, 72,243,149,
+141,238, 80, 9, 44, 19, 19,110,107,206, 3,182,182,173,120, 24,135,255,206, 26, 63,217,222, 19,102,253,158,199,191,175,218,144,
+138,183,149, 64, 16,232,122, 68, 51,215,213, 7,207, 29,124,167, 22, 43,242,125,250,144,165,210, 58,222,250,151, 18, 94, 35,133,
+236, 50, 95, 49,198, 5,127,242,207,126, 31,101,187, 34,167, 13, 33,110, 8, 33, 99, 43, 6,209,122,164,225, 30,167, 55, 63,134,
+ 57,189,129,127,248, 20, 75, 49,184, 70,224,146, 8,217, 13,120,127,185,226,205,219, 55,176,222, 96, 89,102, 76,211,136,105, 26,
+ 49, 14, 22,203,245, 17, 97,189, 96,242,140,201, 3,222, 51,206,211, 9,247,211, 29, 30,198, 17, 8,171,232,247,178,252,238,214,
+ 49,194,182,194,233, 78,220, 16,112, 30, 61,206,227, 8,102,194,227, 50, 3,108,192,222,225,186,108,141, 43, 46,131,183, 2,235,
+172,114,185,133,219,237,189, 83, 47,249,160, 48, 41,141,235, 32,180, 68,172,122,232, 86,165,190,179, 18, 84, 99,116, 81, 60,141,
+ 3, 66, 78, 48, 78, 14,242, 82, 10,172,151,123,216,123,223, 30,188, 49, 37,120, 63,180,231, 79,204,154,169,173, 92, 6, 50,130,
+142,221, 66,144,195, 16, 5,131, 31,177,109, 1,108,156, 52, 7, 90,196, 23, 18,100,117,189,103,123,152, 75,233, 10,147,251,251,
+123, 44,203, 34,137, 99, 4,156,166,147,168,215,189,131,243, 3, 74,201,194,202,207, 25,219,186,193, 15, 94,130,164, 66, 0,235,
+245, 71, 10, 27,139, 26, 46, 53, 40, 96, 7,196, 96, 54, 77,160, 9,181,119, 49,139, 16,112, 89, 54,148,172,118, 52,141, 65,169,
+250, 43, 57,116,129, 37, 38,172, 33,107,135, 14, 68,226, 93, 0,171, 83, 62,199,132,211, 56,201,225,206,132,201,123,156,198, 1,
+ 49,108, 64,138, 40, 49, 35,108, 27,114,214,228, 61, 84,207,187,232, 20, 98, 44, 88,194, 6, 54, 22,110, 24,229, 57,153,101, 26,
+ 67, 44,133, 91, 1, 53, 71, 79, 13,186, 50,214,180,198, 39,105, 17,199,198,200,180, 35, 23,108, 73, 92, 20,170, 75, 84,161,155,
+ 70,192,106,225,183,109, 58,205,217, 86,252,228,119,126, 7,239,222, 95, 48, 47, 81,154, 17,206,123, 39, 93,121,218,141,160,185,
+ 91, 89, 43, 90, 87,118, 75, 26, 89, 94,246,102, 5, 69,181, 12, 96,157,110,136,254, 0, 0, 72,181, 46, 53, 21,213,182,131, 89,
+231,117, 68,249,128,134, 61,116, 61,186, 63,151, 14, 32,119,149, 79,254,104,198,250,199, 7,149,189,151,182,118,120, 6,124,232,
+181, 36, 97,173, 98, 96, 89,108,176, 13,234,218,119,248,242, 94,149, 54, 57, 32, 42, 47,116,103,188,115,194,245, 27,147, 10, 62,
+228,223,237,247,193, 80, 24, 67,194, 22,130,136,178,152,117, 39,148,218,183, 32, 38, 85, 79,202, 65,229, 13,112,246, 22,158, 19,
+210, 58,195, 32,193, 25, 70, 56,216,177,169,237,118,162,218,127, 82,220, 96, 84,144, 98,152, 17,147, 8,243,140, 38,190, 25,203,
+ 82,225,106,129, 99,141,248,232,157,213,253,159,106, 37,182, 16, 81, 88, 68, 74, 32,219,233, 31,228,117,167, 82, 64, 57, 97,139,
+ 27, 70, 63, 72, 94, 59, 11,249, 40,166,130,144,107, 21, 45, 35,190,150,122,215,132,219, 34, 78,162, 6,166, 1, 50,239,239, 97,
+233, 70,237,229, 16,219, 43,251, 92,232,131,141,178,144,192,192, 93,198,189,158, 80,172,194,199, 82,100, 31, 85, 64, 72,148,219,
+ 3,216, 50, 35,105,204,108,105,124,241,186,246,225, 27,177, 91,214, 7, 72,190,233,198, 75,235,108,143, 32,153,210, 14,135,114,
+ 99,189,235,195, 83,234,254,122,175,172,251, 17,188,126, 79,125, 64,247,179, 3,238,214, 72,212, 7,214,244,182,180,238,134, 49,
+ 58, 6, 62, 80, 16,113, 92, 61, 29,245, 44,183,147, 0, 52,194,193,190,146,147,255, 61, 17, 99,205, 0,101,131,255,253,255,254,
+183,248,147, 63,254, 35,252,224,205, 43, 17, 1,141, 5,143,215, 43,112,255, 6,239,191,126,135,225,238, 45,190,250,250, 29, 94,
+255,224, 51,124,243,248, 14,247,175, 94,227,241,233, 17,167,215, 19,134,209, 35,219, 51,222, 60,156, 49, 58,143,201,201,195,229,
+213,235,123, 60, 60,156, 49,240,134,120,253, 22, 38, 39, 56, 91,112,221,102, 92,158,158,176,166, 25, 27, 17,126,112, 63,202,102,
+145, 25, 22, 5,121, 11,176,100, 96,137,196,156, 85,160,233,103,104,196, 49, 2,176,169, 45,138,141,131,141, 9,110,178,216,162,
+164,200,157, 78, 3, 74,204, 50,242,213, 34,122, 58, 77,130,205,141, 81,104, 75, 20, 52, 54, 90, 58,217,172,133,109,206, 9, 97,
+ 93, 26,219,129, 45, 55,124,105, 67, 94,107, 35,228,189, 7, 51, 99, 24, 68, 69, 29,181,179,111,147,154,178,199, 82, 87,231, 11,
+179,142, 95,229,148,192,178,172, 48,172,214, 44,176,178, 21,117, 42,216,133, 0,213,195,156,154, 43, 71, 4,133, 98, 43,243,186,
+ 19, 39,108, 33,194, 88, 43,241,174,181,139, 95, 55,229, 9, 88,172,235,214, 18, 14, 98, 22,126,126, 85, 97,145,230,155, 99, 13,
+112,222,180,137,196, 60,207, 2,218, 49,220,198,234, 41, 22, 16, 91, 17, 44,170,122, 27,128,218,246, 10,242,182, 10,108, 40,233,
+115,161, 24,137, 34,213,202, 57,107, 36, 45, 27, 57,196, 41, 71,140, 94,116, 70, 98,109,100,197, 69,171, 62,130,141, 62,191,118,
+129,116,202,123, 51,201,100, 48, 47,194,250,183,214, 98,242, 39, 60, 61, 61, 33,103,153,124, 48,237,209,220,165, 8, 88,106, 94,
+ 55, 88, 43,211,210,146, 99,155,150, 24,114, 48,198,234, 22, 60, 54,164,117, 86, 81, 57,215,137, 97, 44,130, 8, 47, 9,198, 27,
+172, 49,226,105,158,117, 71, 94,116, 79,175, 83, 68,222, 93, 35, 92,199,230,122, 28,149,214,137, 31,157, 98,165, 16,146,178, 14,
+146, 62,139,229, 61,201, 93,224, 22,181,201,121,203, 83,175,123,201,221,166, 86, 94,192,103, 82, 39, 50,163,238,235,203,119,166,
+ 85,125, 12, 73, 66, 7,208,200,190,251, 67,215,181, 83, 57, 76,201,219,135,114,224,153,213,191,163, 91, 63,116,105, 99,160,125,
+149,208,219,244,112,192,215,210, 77,145,193,194,157, 84, 81,208, 94, 60,228,110,223,108,138, 28,122, 49, 39,101,246, 8,121,106,
+242, 6,182, 4,108, 90,154, 82,138,109,228,151, 58, 78,121,101,201,231,162, 1, 19,138,164,205,106, 3,226, 2,245,192, 2,140,
+ 4, 36, 9, 31,176,196, 24,188,199,105,112,112, 44,217,206,169, 16,182, 24, 1,199, 64,146,223, 51,170,237,163,168, 0,142,148,
+ 19,156, 11, 97, 11, 1,222,138,226,179,170,254,115, 6,182,148, 52, 48,161, 52,175, 1,149, 44,169,112,148, 65,228,212,223, 89,
+ 14, 42,133,134, 22,238,233,250, 29,198,119, 87,166,235, 67,134,180, 0,211,189,119,211,124, 18, 55,226,210,158,211, 66, 59,228,
+ 40,115, 19, 28,202,205,166, 56, 78,170,215, 8, 20, 87,210, 69,176,242,126, 51, 43,173,168,161,228,247,235, 96,135,204,220, 10,
+ 80, 24,188, 95,159, 45,239, 64, 95, 63,189,188,124,218,179,206,115, 3,236,176,174, 42,154, 24,240, 35, 73,109,253,208, 43,149,
+143,237,247,209,133,107,116, 57,242,180, 91, 74,161,197, 64,170,132,200, 44, 88,215,126,213, 21, 75, 65, 38,135,207, 99,193,191,
+250,243,191,198,255,240,223,254, 17,158, 46, 22,127,251, 1,248,213, 54,128, 7,143,111,105,192,143,206,247,240, 33,193, 76, 35,
+ 78,230, 30, 15,111,238,113,126, 24, 96, 13,240,123,191,247, 51, 92,174, 79,120,247,205,183,120,251,201, 91,156, 79,119,248,197,
+ 47,126,129, 31,253,232, 7,120,251,246, 13, 60, 7,124,253,171,191,195,229,221, 7,204,243,130, 53, 22,124,120,188,128, 54,128,
+ 39,143, 56, 26,140,222,232,117, 38, 55,253,224,156,238,106, 11,172,101, 21, 53,137,109,110, 24, 60,222, 95,174, 8, 69, 44, 96,
+ 50, 94, 37, 56, 99, 53,175, 90, 40,111,185, 22,123,134, 97,189, 64,109,252,232,145, 34, 33, 45, 11, 6, 47, 15,238, 45, 36, 36,
+ 83,164,120, 87,235, 41, 91, 41, 4,196, 61,146,116, 82, 39,227,127,195,131, 8, 93,157, 76,157, 66,221,187,226,104,223,221, 66,
+128,179,131,216, 2, 73,167,141,134, 91,194, 25,177, 65, 41,178, 90, 73, 33,202,254, 90, 5,184,133,208, 10,135,250,161, 87,113,
+ 49,105, 49, 90, 84, 93, 63, 47, 51,188,115,226,225, 46, 2,249,113,206, 41, 83, 66, 32, 89,150,101,244,110,173,197,211,211,147,
+ 78,255, 60, 66,140, 32,235,116,133,166,247,133, 97, 73,151, 76, 22,126,112,216,182,173,137,230, 66, 16, 62,187, 31,134,134,202,
+ 45, 40,141,229, 31,131,176, 5,114, 17, 33, 39, 43,243,190, 62, 59,193,251,189, 68,144,135,147, 33, 6,229,132,211, 52, 73,106,
+163,119,184, 92, 46,178,190, 41, 82, 56, 36,229, 81, 20,136,120, 77,172,122,128,245, 30,166, 64, 53, 21, 5,211, 52, 97, 11, 43,
+230,101,110,150, 69,201,174,224, 86,144, 53,246, 58,139,235, 39, 4, 17, 88,102,109, 20, 88, 5,129, 81, 15,121,249,220,228,235,
+ 69, 8,153,145, 26,180, 74,246,236, 33, 23, 12,198,225,243, 95,253, 26, 75,200, 72,133, 53,195,161,131, 85,117,198,159,172,236,
+249, 94, 80,190,167, 87, 84,250, 41,119,116, 26,238,162,169, 75,123,198,236,107, 63,157,219,149,178, 31,234,245,128,145,206,229,
+ 22,250,121, 11,151,121,222,157,124,231,193, 94, 58, 4,223, 11, 42,224,250,247, 77, 13,223, 44, 64,164, 15, 69,125, 99,168, 42,
+223,123, 30,247,158,247, 78,120, 65, 17, 88,142, 10,236,190, 6,105, 85,155,206, 99,234, 97,148, 75,129, 53,146,117, 35,251,184,
+170, 45,160, 54, 37,224, 34, 24,203,234,231,132,218,193, 70,239,132, 15, 28, 55,148, 45, 72, 38,117,140, 2,217, 80, 18,157, 99,
+ 43, 94,222, 28,213,242, 84,224,157, 19,182,182, 97,101, 7, 73, 81,225,140,140, 93, 5,230, 31, 97,217,193, 58,143,243,105,194,
+121,240,224, 44,202,208, 45,110,226,155, 55, 98,143,217,230, 85, 59, 10, 69,234,114, 69,235,138,224, 14, 89,118,147,163,119,123,
+ 94, 56, 51,162, 10,243,108, 17,251, 19,195,128,114, 22,226, 92,169, 24,222,220, 68,194,234,108,147,117,192,174,246, 58, 48,216,
+ 27, 45,189,200, 43, 43, 90, 94, 87, 48, 8,116,252, 37,221,191,170, 66,107, 4,106,229,194, 55, 33, 98,214,107, 53,117,197,231,
+205, 68,169,187, 94,235,190,125,199,219,212,124,119, 28,172,109, 56,104, 56,142, 41,132, 77, 39,211, 9,220,110,161,133,229,249,
+ 95,236,158,250, 78,133, 95, 57, 16,181,211,111, 22, 55,186, 77, 79,168, 37,118,222,247,244,189, 75,160,174, 23, 8, 93, 40, 6,
+218, 68,166,223,209,237,244, 90,106,164,175, 61,210,150, 81,156,195,167,191,255,199,248,112,126,139,255,237,207,255, 18,159,188,
+122,131,175, 30, 19,166, 79, 63, 5, 13, 30, 63, 26, 45, 94,221, 89,220,191,254, 12, 48,132,207,166,123,164, 20,240,201,195, 91,
+252,253,223,254, 45, 78,222,226,225,244, 22,127,247,139,191,194,235,215,119, 0,143,120,255,248, 53,166,179,131,117,192,178,204,
+ 88,183, 5,151,121,193,229, 26,112, 89,102,132, 45,131, 67,193,130, 77,198,226,136, 48,186, 19, 36, 18, 62,120, 82,219,149, 88,
+199,100, 85, 65, 53,190, 56, 4, 20, 54, 48,131, 81, 37,242, 0,235, 28, 82,145, 8,216,182,175,208, 9,219,116,154, 84, 92,198,
+216, 86,106,215,147,115,140,156, 87, 68, 83, 64, 49,180,148,196,138, 70, 53,214,162,196, 12,239, 69,244, 38,107, 54, 77, 95,171,
+172,121, 8,173, 46, 43, 77, 45,103, 17,169,213,107,199, 24, 3,235, 29,158,174,139,128,116,156, 23, 64, 85, 44,216,194,134,204,
+132,117,139, 66,121,204, 73,236, 75,165, 52, 69, 52, 90, 50, 33,183, 9, 90,214,152, 77, 54,178,134, 11, 33,224,245,235,215,120,
+255,254, 67,115, 40, 48, 51,158,158,158,196,161,227,173,116,162, 41,201,129,175, 9,127,235, 42,152, 97,103,237, 78, 59,211,103,
+114, 76, 9, 88,143,107,163, 45, 70,213,138,200, 10, 42, 69, 89, 57,132,152,176,173,162, 93,144, 52,206, 44,129, 38, 84, 17, 85,
+194, 58, 97, 34,137, 51, 53, 70,226, 86, 75,150,228,199,148,176,205,215,166, 91,114,222, 98, 89, 23,100, 16,230,121,214,213, 30,
+235,193, 75,160,148, 16, 99,193, 26,100, 92,110,172, 19,220,112, 12,162,100,143, 9,169,253,174, 59,225,180, 61,203, 27,251,129,
+117,106, 16, 59,151,141,232,141,136, 8,166,136,253, 57,101, 32,229,112,160,160,102,125, 64, 21, 18, 53, 63,233, 51, 55, 65,200,
+120, 65, 61,243, 92,118, 23, 75,190,213,132,181,162, 77,159,163, 10,104, 75,237,220, 68,203, 97,193,161, 89, 82,247,153, 2,107,
+184,123,102, 88,168,159,184,226, 99,218, 3,144,190,187, 3,167,254,219, 16,190, 83, 5, 44,248, 81,115, 80, 30, 87, 37, 51,158,
+ 5,176,224, 32, 50,162, 67, 58,214, 81, 60,215,143,119, 27, 2,176, 99,115,115, 83, 11,247,138, 38,211, 69,149,106,167, 84,118,
+197, 49,105,190,158,115, 86,144,171, 41, 52,159,183,169,221, 78, 45, 62, 12, 33, 71,165,188,129, 48, 16, 97,100,134, 35,160,196,
+128, 20, 69,217, 74, 58,122,166, 44, 52, 35, 99, 69, 52, 87,171, 70,171,222, 76,203, 69, 15, 82, 37,163,177,116,247, 4, 66,138,
+ 5,156, 25,222, 58, 5, 51,220,193, 91,131,176, 38, 77, 99,147, 11,104,240, 14, 84, 0,179, 5, 24, 85,225,182, 93,186, 90,213,
+ 10, 68, 5, 63,175,162,178,205, 26, 95,201,138,111,140, 65, 20,192, 18,215, 91,246, 89,134,238,147,178, 34,118, 83,173, 54,117,
+132, 75, 53,155, 24,249, 70,197, 94, 63, 67,214, 76,250,164,104, 87,177,144,136, 70,147,193, 9,160, 98,218,100, 4,117,252,168,
+ 25,195, 57,229, 22,169, 89,199,238,160, 10, 21,226,246, 57,102,202,234,237, 39,200,237,193,106,153, 41, 59,126,241, 38, 5,176,
+116,132,167,114, 76, 78,144,130,138,122,141,101, 63, 97, 58,254,255,182,255, 44,187,142,158, 75,238,108,116,164,217, 8,185,179,
+ 88,222,130,100,169,243,250,211, 33,202,181,177,221,137, 0,200,132,166,238,224, 43, 66,185,238,224, 72,133, 85, 81, 91,121, 63,
+ 56, 25,215,174,107,243,241, 26,107, 97, 6,143,159,253,225, 63, 5,149,132,100,129,233,135,159,226,247,254,171, 31, 35,108, 17,
+231,211, 8, 71,192, 23, 95,125,129, 55,159,126,130, 47,191,252, 7,252,248,244, 35,252,221, 23,191, 4,197, 79,241,203,191,255,
+ 37,214,101,197,171,135, 55,248,155,191,249, 59, 60, 93, 87,140,227,132,191,254,155,191,195, 23, 95,254, 26,247,119,103, 60,190,
+251, 22,191,252,252,215,152, 47, 27,114,150,123,200,129,193, 70,162, 76,207,198,226,206, 88,193,178, 34, 99,176, 22,201, 36,153,
+ 60, 1, 56,121,135,147,183, 24,198, 65, 86, 64, 49, 99, 28, 6,100,170,176,152,162,254,109, 29,207,107, 18, 88,213,193,156,198,
+ 81, 82,185,114,193,224,207,200, 57, 99, 36, 96, 93, 55,196,148, 33, 43,201, 44,171, 71, 18,200, 16,147,160,149,151,117,131, 31,
+ 38, 9, 48, 33, 32, 39,130, 49, 64, 78, 65,227, 68,141,128, 84,114,106, 74,230, 2,161,153,165, 20,145, 67,210, 92, 8,153,226,
+ 45, 91,128,177, 30, 9, 25, 75,140,216,130,236,221, 99,202,200,170,124,168,235, 31,106,209,213,162,116, 39, 29, 1,135,176,105,
+ 24, 9,201, 1, 29, 19,182, 20, 36,245,206,122,241,163, 35,194, 89, 43, 8,106, 37, 77,142,131, 19,120,141,177, 58,198,149,124,
+139,235,101,193,224, 19, 70,167, 58, 18,213, 92,164, 28,219,243, 35,231,172,144, 45,233, 6, 99,148, 84, 71, 9, 63, 73,152,198,
+ 17,180,172, 50, 34, 38,129, 70, 73,188,173, 69, 44, 81, 10,114,181, 12,147,142,224,207,131,151, 32,153,176, 85, 15,151,188,254,
+ 84,212,109, 84, 35, 75,101,171, 22,115, 2,140,124, 54,214,141, 40, 70, 86,151,107,136, 96,197, 21, 91,107, 17,214, 40, 57, 4,
+117,146, 86, 58,177, 76,129, 2,100,146,230,174, 37,216,250,126, 20, 93, 99,166,164,207, 93, 52,177, 34,161,128,187,243,166,205,
+ 41, 43, 53, 9, 5, 91,204, 96, 99, 17,144, 53, 55, 29, 66,147, 3,129,171,253,111,255,166,205,166,221,196,186, 93,131,177, 3,
+175,212, 5,193,125,226, 37,239, 1, 87, 73, 27, 31,214, 64,179,146,171,250,189,236, 1, 44,184,149,226,210, 71,161, 92,183,157,
+251,119,167,173, 85,107, 85,122,145,194,245,236,225, 10, 17, 5, 85,139, 79, 37, 77,209, 13,242,147,122,155, 29, 58,254,119, 5,
+124, 80, 1,155,125,244,154,149,237, 75, 29,115,119,207,127,175,176, 35,131,146, 9, 33,110,205,130,192,170,196,102,221,239, 59,
+ 43,203,253, 98,132,252,198, 25, 56, 57,198,228, 25,148, 3,194,182, 42,163,187,136, 93,165,112,163, 91,213,221,113, 86,111,170,
+ 33, 2,114,132, 97, 35, 23,125, 73,218, 89,235, 7,150, 37,195,197, 26,131,193, 89, 29,187, 19,226,182, 96,139, 27, 98, 10, 26,
+175,233,192,206, 2,133,224,109,132, 0,157,170,200, 67, 84,247, 41,203, 56,157,107, 66,218, 22, 96,188, 3,172, 69,214, 4,163,
+172, 93,135, 28,254,202, 35,214,142, 7, 89,160, 8,169, 36, 36,136, 80,173,173,155,169, 60, 75, 43,107,197, 25,147, 80,232, 20,
+170, 32,162, 76, 77,195, 2, 80, 88, 58, 19,168,163,162,212, 28,243,154, 58,151, 21, 61,154,179, 6,233, 40,255,187,163, 20,150,
+238, 38,102,170,182, 55,210, 7,246,115,204,240, 51,174,188,238,249,110,209,175,251, 65,255,252,159,156,159,203,214,219,247,239,
+131,134, 14, 73,113,185, 89, 2, 62,230, 29, 57, 80, 22,251,149, 64, 37, 71,213,174,189, 84,188,100,135,115, 86,133, 52,154, 64,
+ 50,227,247,255,224, 15,240,147,223,253, 9,190,248,135,207,241,205,175,127,141,146, 34,136, 0, 63, 56,176, 55,240, 35,225,205,
+ 39,111, 65,229, 53,194,186,224,238,238,132,191,248,247,255, 30,206, 91,120,231,241,151,127,245,215,120,245,171,175,241,238,221,
+215,248,229, 47,127,133,247, 31,222,225, 63,252,167,191,198, 50,111,248,213, 87, 31, 64,185,224,233,241, 29,190,253,250, 29,140,
+117,202, 83, 7, 78,163,199, 58, 47, 8,171, 88,158,188,181, 24, 89, 34, 40,211, 22,240,230,225, 14,119,163,195,153, 53, 55,130,
+ 1,111, 25, 33, 18, 76, 32,112, 49, 56,123,135,243, 48,192,141, 14, 41,203, 67,107, 28, 70,108, 73, 68, 54,134, 5, 19, 28, 82,
+130,243, 14,131, 17, 33, 90,138, 81, 59, 86, 66, 82,206, 68, 78, 9,195, 56,129, 13, 48,157, 38, 92,231, 5, 88, 54,120,199, 32,
+246,216, 98, 70, 6, 33,198,140,113,114, 8, 23,129,242,220, 13, 19,156,157,176, 45,151,246, 16,222,182,128,113,114, 13,183, 44,
+202,245,164,247, 17,171, 37, 83,212,221,194, 81, 23,129, 88,140, 25,203, 22, 49,175, 2,205,201, 57, 55,125, 73,125,166,182,253,
+111,125, 22,178, 80,237,130, 50,245, 73, 69,159,243,188, 52, 40,209,187,119,143,234,137, 79,250,181, 65, 82,202,140, 67, 73, 1,
+203, 42,147,136,160, 33, 59, 18, 90, 35,145,182, 57, 39, 44,155,164,173, 13,222, 3, 70, 10,233, 24, 99,155,112,228,117,131,243,
+ 2,213, 41,101, 47, 56,157,115,152,198, 9, 12,146,226,164,138, 22,115, 6,114,128,233,179, 30,244, 94,141, 97,195, 28, 3, 70,
+239,133, 92,152, 11,176, 69,120,239, 97,116, 98, 80, 89,232, 69,217, 30, 33, 69,164, 45,170,240, 77, 94, 3, 27, 3,235, 8,219,
+186, 42, 56,167,128,139,172, 15,170,168, 13, 93, 10, 39,186,232,111, 33,221,137, 0,175, 80,222, 39,191, 89, 44,203, 37,239, 90,
+136,166, 81,209,154,122,239,216,119,144, 84,206,132, 88,148, 34, 87, 15,238,194, 40, 44,112, 31,129,157,209, 30,185,212, 89,113,
+119,107, 46,237,141,146,158,228, 57, 23, 40,175,173,149, 19,185,241,136, 88,138, 63, 45,166, 12,153,163,165,237,152, 73,253,155,
+254,249,126, 95,245, 82, 93, 80,109, 12,253,129,222,143,230,203,205,249,208,212,153, 47,248,247, 14,158,247, 92, 14,194,129,227,
+215,118, 93, 17,161,115, 8,239,234,195,140, 93,113,154, 33,226,138,254, 37, 24,125,127, 68,164,198, 26, 49, 40, 69,131, 97, 96,
+ 26, 44,188,147, 20,171,186,143,201,170, 8,181, 70,178,115,136, 73,134, 5,137,224, 13, 3,185,192, 25,130,103, 35, 99, 41,150,
+174, 92, 42, 71, 70,200, 82,142, 17,146,100,159,187, 12,162, 13,203,178, 97,221, 36, 43, 59,235, 41,230,188,131, 29, 61, 56,201,
+ 88,113, 75, 59,194, 36, 70, 73,214,202,200,251,248,135, 13, 66,145,215,206, 70,242,171,201, 74,181, 92,191,175, 20, 75, 2,227,
+ 33, 5,199, 64,132,254, 13,153,200,245, 32,214, 67,182,137, 23,187,137, 75,221, 39,151, 86,168,238,169, 68,213, 66, 72,213, 57,
+202, 59, 61,174, 41, 71,139,218, 6, 83,208, 88, 76,181, 77,182,148,213, 78,104,194,149, 64,215, 31,224,121, 47,220, 74,126,153,
+ 0,119,224, 37,244,194,185,242,140, 76,247, 12, 97,124, 19,217,122,252,199,116,254,124,209, 69, 20, 28,105,102,253,216,190, 60,
+ 75,133, 45,109,100,222,252,234, 93,230,108,205,130, 39,133,148,212,239, 91,239,102,102,194, 79,127,250, 59,226,129, 14, 27,182,
+109,193,122,189,138,165,203, 59,144,181,248,171,191,252,255,240,246,241, 83,228, 24,240,229,231, 95, 96,156, 78,248,252,215, 95,
+ 1,148,193, 57, 99,125, 90, 48,159, 63, 32,196, 13,171,198,159,162, 72, 36,235,246,248, 1,227, 48,224, 68, 64,156,103, 88,159,
+ 49,164,140, 82, 4, 91, 58,121, 15,119,119,135,101, 94,225,172, 48,214,195, 22,144, 12, 99,153, 47, 56,157,126,130,123,206, 56,
+ 15, 3, 82, 22,223,249,101, 93, 96, 17,145,214, 13,159,220,159,113,119,158, 16, 29, 16, 11,195, 17, 99,100,131,240,180, 32, 23,
+ 1,150, 20, 20,196,121,129, 37,134,243, 30,203, 50, 99, 24, 61,156,183,210,113,170,157, 43,165,164, 93,183,193,178, 68,177,117,
+ 89, 35, 4,197, 40, 41,132,203, 58, 35,165,132,203,229, 9,195,224, 81, 72, 66, 65, 38,239, 68,249,158, 9, 65,189,245,178,139,
+ 85,210, 95, 74, 45,219, 34,132, 0,235,100,175,191,109, 43, 80, 24,107, 8, 88,150,128,144, 54,204, 91,108,255,110,233,237,185,
+234,205, 46,101,119, 11,229, 44,233, 96, 45, 78, 89, 15,171, 24,147, 80, 45,181,216,155,198, 65, 21,240,132,109, 91, 68, 60,102,
+ 68,169, 62, 76, 3, 82,148, 32, 22,102, 35, 40, 91,189, 50,173,177, 96,182, 88,182, 89,224, 53,196,234, 65,103,144,181,210, 49,
+ 87,204,105,148,157,255, 96,141,222,219, 34,246,173,191,167, 20,233, 85, 43,179,107, 75,168, 53, 92,178,131,206, 90,144, 93,150,
+ 5,150, 8,198, 16, 66, 46,200,235,186, 99,142,149,220, 6,133,243, 24, 88,121,206, 40,245, 13, 69, 18,216,172, 49,216,180,113,
+204, 73, 44,159,131, 31, 16,147, 60,131,209, 16,189,187, 85,187, 78, 94, 74, 21, 72,107,146, 94, 59, 32,116, 68, 81,106, 71, 92,
+244,121,216, 1,193,154,128,145,164,224, 74, 69,243, 64,148,142,202, 34,140, 64, 33,153, 6, 87,209, 99,133,255,160, 28, 1,155,
+237,222,110,204,143, 26,228,210, 69,173,148, 35,207, 35,183,181,177, 20, 62,165,238,212,191, 79, 12,234,119, 31,238,244,253,206,
+118,218,201,115,183,153,230, 71,117, 47,218,195,191, 77, 79,158,165,197,149, 22,101, 87,167, 12,172,163,228, 74, 80, 99,236, 29,
+ 82, 81,202,210,254, 46,150, 93, 93,212,133,120,168, 82, 66, 71, 79,249, 8,222,209,138,217,177,228, 18, 35, 39,129,184,168,213,
+200, 73,126,169,140,230, 98,148,221, 53,108,219,157,212,124,118,160,192,148,172,147, 8, 96,176, 86,236, 59, 64, 27,241,100,181,
+106,212,168, 91, 99, 8,214, 1,108, 18,182, 32, 15,157,152, 11,162, 30,150,214, 48,220, 96,229, 33,157, 36, 23,121, 75, 34,234,
+200, 40,200, 53, 18, 82,233,119,165, 10,173,148,221, 45, 63, 93,197, 23, 44, 93,100, 76, 73,169,113,212, 84,249,162,120,207,141,
+191, 78,189,110,162, 11, 60,233, 16, 46,187,151,178, 23,100, 22, 58,164,147,245,213,115,179,156,244, 37,102, 17,220, 98,214,212,
+162,146,178, 10,247,168, 1, 63,160, 99,119,148,110,212,222, 21,146,251,205,152,111,166, 69,207,243,213,235,215,244,144,155,151,
+226,100,233, 70,160,185,187, 68,118, 21, 12,181,137,193,158,121,222,227,106, 63, 86, 3,247,128,158,220,125,125,125, 32,212,195,
+187,116, 68,197, 92,175,119,222,137,144, 72, 1,255,230, 95,255, 31, 48,222,201, 1,147,178, 98, 72,165, 80, 50, 46,225, 47,255,
+195, 95,226,155, 47,191,193, 22, 87, 17, 90, 89,139,147, 55,248,227,159,255, 12,247,134,240,248,205,183,184, 92,102,224,126, 66,
+ 97, 66, 76, 64, 90, 3, 82,216,176, 33, 23,165, 82, 0, 0, 32, 0, 73, 68, 65, 84,209,138,180,205, 72,153,144, 9,216,174, 23,
+148,117,133,177,140,247,143,239,241,230,213,107,220,121,139,178,206, 64, 8, 66,184,171,180, 66, 21, 37,221,157, 6,188, 57, 15,
+ 98,109,179, 6, 15,247, 30, 95,165, 5,228, 12, 62, 57,121,220,221,159,241,148, 55,108, 84,112, 9, 66, 26, 99, 35, 15,117,217,
+143, 39,140,222, 99, 13, 2, 96, 25, 71,197,121,230,140,109,219,192, 68,152,166, 73, 87, 53, 34, 8,117,214, 98, 94, 54,237,244,
+229, 29,172, 22,184, 98,101,167,107,136, 48,158, 78,200, 41,136,130,218, 88, 16, 41, 60,101,139, 40,133, 53, 44,165,174,166, 10,
+150,117, 17,219,151,178,228, 69,209,110,176, 44, 43,214, 32, 93,122, 42, 69, 58, 58, 62, 72,117, 91,115, 82, 87,147,222,123,220,
+ 79, 35, 0, 40, 36, 70, 40,116,235,186,201, 72,220,122,164,156,144,227, 14,157, 97, 77,101,156,151, 43, 82, 92,224,221,128, 16,
+ 86,140,131,199,120,154,176,174, 43,166,113,130, 99, 3, 42,192, 60,207, 58, 53,148, 2, 40,101, 32,132, 13, 86,195,106,160, 17,
+159, 57, 10, 38,155,141,132,210,180,235, 91,247,222, 65,167, 33, 86,137,126, 41,103, 25,238,229, 61,223, 33, 35, 99, 24, 39,196,
+ 40,147, 20,195, 44, 43,133, 44,133,107, 98,218, 19, 32,244,123, 88,118,200, 41, 55, 41, 72, 41,164,106,117,224,122,185, 2, 0,
+134, 97,148,192, 32, 45,220,122,145,116,239,247, 38, 52,181, 25, 98, 22,102,130, 49, 98,107,203, 58,109,233,155,132,186, 82,172,
+ 92,145,218,205,139,227,168,104,234, 38,181,160,171,220, 5,152,138,236,129,218,231, 41, 88, 24,109, 46,242,126, 64, 23,220,164,
+182, 85,237, 4,122,222,132,184, 50, 74,161,103, 20,205,138,111,174,108,126,115, 30,167, 63,171, 36,180,186,203,185, 37, 97,244,
+ 54,138,231, 9,107,249, 5, 78,245,243,177,250,158,129, 85,158,121,213,111,191,246,152, 98,213,123,218,203,206,166, 63,236,213,
+203,222, 73, 42, 47,157,111, 34, 93, 75,169,190,116,110, 49,128,205,248, 84,164, 30,226, 2, 88,203,176, 86,128, 10, 57,237,171,
+ 2,203,210, 33, 56,102, 56, 35,152,205,146,178,112,216,153,224, 24, 56,121, 11,203,140, 24, 54,132, 58,142,211, 93,175, 97, 65,
+199, 26, 38, 85,249,102, 56, 61,208, 71,103,155,174,199,114,229,200,103,185,241,145,192, 92,224, 29,193, 90,169,116,162, 62,144,
+ 11, 17,178, 37,176, 37,248,193,226, 52,141,114, 67,105, 62,244, 62,254,215, 7,126, 81,150,112, 75,163,147,139,133, 75,145, 27,
+156, 88, 68,113,149, 41,173, 85,124, 33, 70,246, 3,162, 49, 72, 32,212,108,154, 12,217,233,136, 0,238,134, 59,208, 29, 54,117,
+143,156, 91,135, 91, 29,214, 93,160,137, 98, 48,209, 51, 6,104, 87,129,215, 93,186, 92,216,249, 8,118,121, 9,188, 66,212,186,
+214, 91,208,204, 75, 76,248,151, 83, 3,159, 11, 45,203,205,207,237,209,178, 77, 4,167,255,153, 21,135,204,116,107,121,123,254,
+187,191, 84, 56, 60, 43, 36,154,107,131,143,146,217, 23,180, 45, 68,221,154,170, 20,228, 36, 29, 85, 73, 98,193, 33, 40, 14,152,
+164,243, 76, 33, 99,125,154,225,220,128,203, 60, 35,133, 21,110,158,241,179,113,194,159,252,228,135,112,235, 5,233,250, 1, 3,
+103,216, 28,129,176,194,198,136, 18, 86, 32, 6,108,235,130,184,109,237,105, 22,195, 6,107, 8, 84, 18, 6,231, 52, 50, 56, 75,
+247, 84, 10,114, 45,238, 99,128,203, 5, 63,251,225,167,184,183,132,183,231, 17,167,209,193,178, 80,186, 94,141, 30,247,227,136,
+ 79,222, 60, 0, 92, 36,137,112, 11,136,169, 96,152, 70,248,113,196,186,174,216,182, 13,227, 52, 54,223,160, 81,124,243, 48,140,
+ 42,124,149, 48, 19, 0,216,182, 85,148,223, 65, 34, 91,217, 24,156, 78, 39, 13,166, 41, 42,130,147,221,113,170,160, 36, 35,124,
+132,211,233,164, 15,119, 97,244, 69, 37,211, 13,211,136,109,219,212,191, 92,176, 5,249,154, 58,150,127,186,172,146,160,184, 37,
+ 17, 65, 49,183, 29, 96, 70, 57, 8, 75,169,177,232, 45,222,190,125,139,233, 52, 33,165,140, 16, 54, 68, 61,184,234,158,187,138,
+243, 4, 45, 43, 7,198, 60, 95,101,229,144,162,166, 73,138, 8,108,209,236,244,246,123,150,130,109,221, 58,252,169,140,163,235,
+247,103,210,244, 52, 37,229, 89, 54,242, 61,137,116,202,208, 11,172,185, 81, 55, 99,202,123, 81, 95, 11,245,150, 19, 42, 83,166,
+233,116,198,214,242, 4,208, 1,155,106, 7,138,198, 75,167, 94,167,162, 54,198,156, 74, 99,180,199,152,176,109, 65,201,158,114,
+ 24,199, 36,182, 62,195,220,233,101,106,128, 10,246, 96,151,238, 30,206,116,100, 60,150,162,128, 60,230,253, 94, 34,163,188,120,
+153,144, 85,162,104,245,161,214,247,177,197, 0, 55,231, 78,103, 63, 85,134,126,181,172,181,179, 44,203,127,175,160, 28,210,239,
+ 83,186, 46,130, 94,192, 99,247,235,103,244,152,216, 82,142,170,221, 99,227,178,127, 32,223,119, 4,127, 60,208,143, 76,248,219,
+ 95,230,197,232,202,190, 12,168,221,107,237,182, 95,136,177,172,180, 46,166,174, 35, 2,186,100,175,218,241, 43, 93, 75,119,235,
+245,233,183,219,161,234,135,115, 51,122,103, 21, 75,212,223,171, 64, 59,107,121, 19,189, 49, 90,249, 10,162, 48, 39,141,203, 51,
+ 55, 59,126,245,193, 90, 46,194,109,182, 6, 76, 89,240,142, 18, 47,164, 63,187, 0,136, 0,229, 22,251,152,115,130, 20,200, 18,
+102, 66,204, 48,150,225, 44,195,123, 43,225, 51, 86, 68,123,121,178,216,130,211,247, 41, 41, 65, 73,196, 60,142,149, 98, 36,136,
+ 21,112,142,242,218, 52,125,168, 30, 78,166, 89,193,248, 72, 93, 99, 85, 81,167,170,193,224,254,153,180, 79, 82,218,174,187,171,
+146, 11,117, 29, 46,221, 48,217,161,137,114,249,160, 1,215,153,140,236,208,187,177,253, 94,205,238,236,232,223,224,195,248,200,
+168, 29,207,174,199, 92, 11,199,151,168,113,183, 41,127, 84,186,157, 88,222, 19,147,128, 23,139,136,239,251,123,201,131, 70,255,
+174,243, 98,222,206,198, 42, 40, 50,119,233,133,185, 83,213,115,222,189,234,165, 80,187,198,251, 8, 99,134,236, 57, 63,188,123,
+ 7,107, 13, 16, 35,158,230, 43,254,221,159,255, 5,134,176,225, 15,126,254, 83, 92,174, 23,204, 49,160,164, 8, 19, 18,214, 53,
+ 98,139, 25,133,164,123, 45,180,169, 77,113,143,115, 78, 41, 74, 42, 26, 11,133, 44,228, 4,144,132,210, 76,195,136,112,137,248,
+197, 23, 95,227, 95,252,252,103,248,157,215,175,112, 30, 45,140, 1,238,201, 99, 76, 17,148, 10,188,117,248,228,254,132,252, 24,
+ 49,175, 11,166,193, 33, 22,192,140, 3, 96, 12,182,205,162, 20, 25,135,155, 76,130, 78, 53, 6, 31, 30,159,244, 94, 20, 65,167,
+243, 85,213, 30,192,217,106,188,102, 58, 76,255,172,101,196, 53,138, 77, 52,197,118,232,203, 65,146, 48, 47, 11, 82, 46, 56,159,
+239,241,248,248, 8, 63, 12,120,247,254, 3,202,147,116,183,117, 70,104, 28,171,112,151,177,108, 1,243, 26,176,134,172,193, 29,
+165, 37, 39,150,155,117, 97,189, 57, 74, 41, 56,223,157, 37,168, 37, 69,108,155,236,144,151,121,195,182, 73, 64,204, 48, 12,130,
+108, 77, 17,107,140, 96, 50, 56,159, 78,112,206,234, 20,171,198,113,202,180,209, 24,139,117, 89, 69,220,166, 5, 65,203, 14, 87,
+170,163,181, 78, 29,162,117,175,173,171,175, 16,117,100, 45,215, 78,236, 86,157,165,100,192,200, 20,163,100, 2, 74,148,181,163,
+174,204,196,166,187, 23,244, 91,136,224,117,197,195,171,215,120,255,238, 27,113, 12, 89,215,174, 23,102,106,212, 68, 3, 22, 97,
+108, 86,207,119, 74,210, 97, 27, 9,246, 73, 41, 73,182, 61,147,134,183,200,231,105,140, 65, 12,186,127, 87, 15,125,213,158,212,
+ 41,109,145, 39,163, 10,212,234, 65, 79, 45, 36,169,182,125,169, 86, 26, 36,211,129, 88, 74, 59, 31, 10,237,137,145,213, 45, 87,
+ 61,231,164,118,194,106, 55, 51,120,158, 51,209,175, 7, 73,133,204, 13, 32, 93,202,206,152,208, 52,183, 35, 29, 19, 59,218,184,
+155, 32,216, 23, 78,227,227, 97,169,248, 88, 84,107,194,141, 5,167, 20,188,120, 40,127, 4,174,189, 63,136,152, 95, 12,189,200,
+157,221,166,190,168,221, 95,184, 31,234,109,228,122,224, 95, 83,167,102,239,236,114,148, 59, 91,207,238, 95,110, 21, 84,253, 96,
+116, 95, 5, 37, 11, 53,229,189, 34, 99,185, 31,175,230, 90,137, 9, 6,112,176, 66,170, 74, 73,196, 56, 53, 80,160, 10, 4,171,
+140,175,114,146, 37,230,181,192, 89, 9,142,145,191, 35, 61,188,138,170, 74,163,142,222, 5,130,144,179,240,140,193, 4, 50, 6,
+108, 13,140, 37,120,111,225, 44,193, 17, 96, 89,189,160,236, 16,162, 19,175, 58,138,112,186,115, 61, 48,179,112,219,181, 11,102,
+157, 95, 48, 19, 40,203,205,104,184,203,250,214, 17,147,174,136,118,250,224, 65,127,177,239,154, 75,243, 76,239,108,104,168, 38,
+161, 38, 47,202, 95,229, 27, 29,199,115,238,250,158,119, 94, 14, 2,178, 26,167,104,218,245,154, 59,179,227,127,198, 18,169,191,
+193,212,126, 83,178, 92, 75,135, 46,189, 94,115,124, 68,204,114,239, 29,239,188, 33,245, 58,191,157, 8,188, 52, 37,120, 73, 39,
+ 82,219,124, 42,132, 91, 66,125, 29,219,230,151, 10,220,125, 9,167,235, 8, 29,247, 53, 43,226,254,159,101,221, 20, 80, 56, 35,
+199, 4,155,173,168,106,221,132,119, 92,240,111,254,227,223,224,130,130,127,242, 59,159,129,223,125,139,114,185, 96, 77, 25, 41,
+233, 94,152,140,240, 3,212,166, 40,221,105, 66, 41,182,229, 38,192,176,166,118, 73, 28, 98, 1, 36,162,216, 56, 60, 46, 9,255,
+238, 63,253, 45,126,254,227,255, 30,100, 12, 78,158, 48, 56, 7,159, 51, 6,239, 80,216,226,225,237, 43,172,105,197, 28, 86,108,
+108, 36,253,202, 18, 18, 1,211,201,195, 24,185, 70, 29, 57,217,101,147,148, 46,215,235, 21, 49,170,232, 83,213,244, 0,176, 44,
+139,236,168,115, 70,204, 89,125,236, 98,227, 50, 70,177,199,144,131,125, 93, 23, 24, 67, 24,188,197,182,109, 8, 49, 99,152,146,
+118,165, 17,126, 28, 48, 95,175,152,134, 17,151,167, 39, 93,225, 89,108, 91,196,178, 6, 60, 62, 93, 17,117, 53,209, 62,198, 66,
+207,100,198,189, 8,152,152,225,199, 17, 69,125,240,143,143,143, 40, 89,116, 1,198, 24,253,157, 24,167,243, 9, 79,215, 11, 40,
+ 67,201,148, 43,238,238, 78, 88,230, 11,206,231, 19,182,109, 19,239,120,139,153, 53,200, 17, 10,182,145,194,189,118,175, 76, 4,
+235, 6,132,176,232,192, 69, 14,229,122, 57,110, 41,130, 24,176, 89,119,227,117, 82, 96, 52,121, 45,103, 16, 59, 12,227, 73, 66,
+128,132,138,129,117,139,226, 19, 87,193,151, 33,225,127, 96, 20, 23, 67, 12,155, 92,119,150, 49, 12, 67, 83,129,215,223,217, 15,
+ 3,182,117, 69, 81, 1, 47, 25,131, 45,108,160, 40, 89, 1,206, 89,141, 8,238, 68,165,196, 34,162, 51, 70,108,120,186, 18,203,
+ 45, 71, 66,207,233, 92,154,157, 77, 30,119, 74,159, 43, 59,225, 77,206,164, 74,123, 68,155,136, 52,196, 53,139, 85, 57,150,216,
+165, 74,238,160,169, 94, 84, 91,167,137,194, 92,168, 66,112,170,112,212,102,245, 45, 29,229, 16,154,180,217, 63,111,142, 28,251,
+238,236, 36,192,156,134,241,207,170,218,110,159,239, 31,153,213, 68,166,117,107,245,160, 34,254,120, 26,213, 45,148, 94,186, 96,
+115,168, 50,110, 15,245, 54, 2,145,229, 78,103,203,233,114,211,241, 66, 84,230, 97, 60,127,204,146,166,162, 57,240,221,207,224,
+195,152,118, 87,204, 87, 28,159,181, 12,211,128, 18, 85,157,206,112,218, 81, 83,243,219,139,159,219, 25,192, 25, 17,142,120, 67,
+200, 41, 34,133,136, 12, 77, 66, 83, 94,189, 33, 13,105, 81, 97,139, 49,132,193, 9,162, 49,134, 85, 81,169, 66, 80,138,165,130,
+ 99, 68,141,234,141, 83, 30,180,238, 74,173, 5, 28,195, 56,131,193, 25,140,206,194, 59,249,249,206, 74, 22,180,245,246,128,207,
+132,238,118, 82,218,171,115, 46,250,126,144,236, 18,141,250, 75,137, 68, 72, 66, 70, 70,226,217, 88, 36,231,176, 17, 33,232, 36,
+162,158,111, 89,149,151,141,247, 79,125,150,250,109, 4,106,217, 11, 42,218, 67, 71,250,243,103, 79,111,235,199, 86,212, 37,150,
+150,131,208,141,251, 84,183, 14,151,250,210,248,253, 99,215,232,179, 78, 93,119,136, 69,175,159, 74,127,106,215, 98,243,130,151,
+238, 53,161,161, 93, 91,145,100,204,139, 63,231,176, 58,186, 57,216,111,241,201,141, 14,223,117,242,199,255,187, 73,182, 59,172,
+ 4, 42,102,185, 67,114, 98,103,229, 31, 32, 65,221,238,143, 89,124,191,137, 9, 27, 1, 79,219,134, 95,125,249, 5, 74, 74,248,
+236,205, 39, 40,219,134, 82, 18,230,184, 98, 43, 66,213,202, 33, 73,224, 16, 65, 70,253, 33, 54,166,125, 86,142, 57, 21, 66,137,
+ 98,195, 51, 70, 70,185, 49,137,205,244,233,241, 3, 94,157, 6,252,244,135,175,112,127,242, 56, 91,135,209, 90,248,105,132, 63,
+143, 48,119, 19,182,235, 5,215,121,198, 37, 8, 38, 52, 1, 18,234,162,187, 43,239, 61,182, 16,176,133, 0, 50, 6,243,117, 22,
+ 92,168, 66, 80,166,233, 4,102,113,181, 16, 49, 66, 16, 93,138,168,199, 43,165, 80, 31,176, 57, 99,219, 86,152,150, 63, 78, 42,
+ 86,147, 40,218,117, 19,103,140, 80,228,234,207, 16,168, 83, 76,162, 33,153,151,128,199,167,165, 81, 26, 97,234,253, 88,142,251,
+221, 22, 61,188, 79, 51,115, 41,136,185,224,186,206,248,240,238, 3,150,121, 69,206, 89,199,205,162,149, 25, 70, 65, 88,223, 63,
+ 60, 8,232, 10,114,176, 23,100,141,154, 21,152,143,243, 78,147,246,138,166,206, 97, 23,144,245,130, 47, 35,215,121, 76, 81,207,
+ 1,238,114,224,117,170,192,162,222,207, 74,122,148,120,210,130,243,221, 29, 46,215, 11, 10, 1,119, 15,247,136, 37, 34,198,128,
+113, 26, 17, 53,113,142,106,115,198,122,176,111, 27,206,147,236,248,185, 3,114,229,148, 52, 53, 46,180, 32,148, 10,202,201, 58,
+201,168,135, 96,108, 92,247,234,154, 82,129, 51,147,210, 64, 35,198,211, 40, 59,111, 80,211, 89,196,172,235,177,138,201,165,170,
+ 99,146, 25, 49,105, 33,156, 75,110, 51, 99,249,220,140,250,194,185, 9,218, 36,127, 93, 86, 49,165,151,105,117, 41,160,220,199,
+130,215, 88,213,206, 66,158,177,115, 40, 74, 71,164,169, 76,247,227,212,144, 15,175,185, 54,193, 90,214,192,156,134, 73,216,239,
+ 31, 57,212,113,139,195,160, 58, 18,200,207,193, 46,253,225, 89, 25,214,220, 30,113,135,228,172,190,131,169, 96,151,125,172,186,
+ 87, 83,212,201,173,114, 3,142,124,100,204,175,222,238,126,252, 94,167,150, 7,194, 92, 15,169,193, 78,105, 34, 2,172,209, 46,
+ 75, 71, 83,222,136,186,210, 25, 6,178, 48,199,141, 97,189, 16, 68,185,238, 12,193, 91, 3,107, 8, 49,110, 8, 49, 2, 21, 49,
+168,213, 97,141,193,148, 20, 37, 96,112, 6,131, 23, 47,235, 86, 19,158,140,149, 36,181, 84, 16,146, 20, 16,206, 57, 48, 91,164,
+ 40,163, 59,227,157, 88,208,140,236,254, 39,239, 48, 56,217,203, 59, 35, 44,120,231,165,122,173, 72,199,164, 22,155,152,178, 42,
+104,247, 53,130,209,245,158,179, 6,214,236, 83, 5, 82, 11, 77, 33,131,204, 14,197, 41,251,189,237,105, 43,157, 14,251,197,202,
+244,209, 98, 13, 53,153,145,246,160,209, 22,220, 82,122,161,156, 57,144,216,235, 97, 94,121,251, 69, 31, 90,232,128, 57,125, 36,
+107, 99,196, 19, 55,245,240,111,123,168, 31, 46, 32,213, 92, 84, 96,197, 30,229,186, 67, 57,106, 68,172,196, 77,154,189, 40,225,
+227,193, 45,215, 66,205, 84, 67, 75,245,195, 11,160,164, 61,244,102,183,114, 82, 55, 89,169,120,227,106, 55,108,116, 57,122, 78,
+165,235,116,137,221,255,144,245, 81,162, 61, 69,102, 88,114, 50, 45,114, 22, 75,218, 64,134,154,203, 35,230,140,175,191,121, 7,
+ 3,194,253,249, 30, 49, 37, 44,113, 67,208,225, 74,218, 4,154, 34, 69, 35, 35,133, 8,228, 2, 75, 86,148,203, 44,156,191,176,
+109,146,200,165,137, 85,169, 16, 82, 97,228, 24,241,245, 87, 95,224,167, 63,122,131,159,124,242, 10,167,105, 2, 91, 43, 33, 43,
+105,131,123, 56, 99,187, 94,133, 72, 87, 72, 70,218, 33,128, 12,195, 88, 7,239, 61,230, 69,212,240,203,186,194, 58,135,109, 13,
+109, 28,235,156,111,238,152, 24, 36,255, 61, 68, 97, 31, 12,227, 8,167, 33, 37, 41,139, 87, 61, 5,177, 80,202, 52,204, 33,164,
+ 4,239,164,128,168, 41,111, 53, 48,101,217, 54, 24,150,221,110, 46, 18, 0, 50,175, 1,151,121, 69,200,149,157,166,154,150,166,
+117,168,130, 56, 52, 18, 88,191,162,100, 35,135,207, 60, 95,145, 99,214, 41, 71,110,108,122, 38,241,171,131,128, 16, 35,238,238,
+239,113,189,206, 50,134, 78,169, 37,176, 21,133, 59,213,169, 76,206, 89,116, 1, 49, 98, 24, 7, 61,164,163,138,255, 98,243,135,
+ 19, 51,146, 78,228, 10,246, 46,146,170,104, 65, 97, 52,117, 98,231,189, 19, 88, 87,216,224,188,195,253,171, 7,204,203, 21,172,
+ 22,185, 24, 36,134, 54,107,135,154,115, 22, 91, 99, 74,135,103, 60,119,205, 93,205, 28, 15, 81, 18, 49,173,115,106,181,221, 27,
+ 10, 62,172,204,116, 45,106,141, 22,167,242, 60, 11, 41, 97, 24, 70, 24,107,165,240,139, 81,227,100,115,243,129,231, 44, 35,122,
+225,192,115,167, 82,231,221, 63, 94,167, 19,169, 52,151, 74, 77, 70,204,186, 26,104,161, 11,125,180,217, 13, 56,234,184,102, 46,
+109,101,211,132,188, 85,135, 64,250,254,116,143, 35,174,191,211,173,238,135,118,160,141, 57,249,187, 63, 3,212,119,220,184,188,
+183,103,250, 77, 88, 69,151,147,125,171, 92,239, 31,234,164, 73, 63, 90,163,180,152,205,221,206, 38,170,213,218,101, 8, 45, 44,
+105, 39,189,107,163,107,120,135, 72,175, 59,175,238, 77,199,127, 72,164,237,159,130,232,248,226,165, 66,118,118,112, 24,179,170,
+211, 53,199,153, 74, 65, 14,226,229,246, 76,152, 28,195,147,154,197, 89,160, 44, 34,228, 1,152, 11,140, 33,140,214,194, 22, 17,
+200, 68, 0,100, 37, 84, 35,197, 40,239,143,145,200, 86, 46, 25,174, 20,140,134,192, 86,136, 72,194,233,183, 0, 91, 36, 64, 42,
+253, 66,128,229, 14,214,111, 96,156,129, 29, 28, 42,253,223,123,139,201, 90,140,214, 98,176, 22,131, 55, 24, 29,195, 26, 96,244,
+ 14,131,181, 10,138,216, 90,117,186,133,140, 20,179, 6,101, 8,179,216,177,193,201, 26, 56, 22, 78,113,234, 18,207, 50, 24,197,
+ 14,200,214, 35,234,197, 95, 49,114,185, 16, 40, 21, 56,216,238,189,174,198, 21, 69, 73,148,220,182, 83, 89, 72,230,181,149,222,
+ 71,141, 7,145,208, 81, 73, 78, 85,245,153, 51, 80,162,142, 68, 83, 39,122,131,218,120,228, 98,175,197, 74,173,194, 95, 10, 16,
+250,216,248,251,120,211,241,190, 39,103,193,230,202,189,148,119, 79, 62,239, 33, 71,166, 42, 84, 53,160, 39,117, 30,250, 99,126,
+250,158,184, 83,218,177,186, 43,218,111, 5,164, 5,123, 86,117,193, 65,111,180,199,217, 18, 62, 90,236, 42, 97, 82,245, 34, 59,
+214,102,143,106,228,198,236,175,132, 59, 42,178, 7,117, 78,188,206, 33, 38, 24, 55, 34, 91,143,175, 31, 31,113, 89, 22, 60,156,
+239,224, 51,129,131,176, 3,230,176, 34, 27,131, 88, 42,223,154, 96,141,111, 35,255,164,204,131,168,252, 3,174, 86, 60, 85, 69,
+111, 57,226,154, 10,190,252,252, 75,252,225, 15,127,132, 31,188, 57, 35,143, 44,220, 5,202,160, 31,190, 70, 92, 55,164,235, 21,
+ 33, 17,150, 45,106,158,186,109,123,204,140,130, 57,110, 32, 43, 46,144, 22,159,154,229,240,141, 41, 98,221, 68,108, 70,106,147,
+154, 78, 39, 64, 59,108,231,189,128, 75,212, 75,158,138,164,140,149, 34,116, 59,235, 7,172, 49,194,141,131, 22, 0,178,203, 92,
+183,128,176, 73,248,130,243, 35,214, 80,240,225,178, 32,232,206, 54,215,195, 67,175,211, 26,175, 67,198,168, 32, 76,224, 53, 70,
+195,138,136,234, 7, 93,224,156,132,175, 72, 2, 28,183, 61,110,208,224,145,164,217,229,219, 53,224, 60,157, 16,214, 13, 6,132,
+117,217,240,201,235, 87, 58,145, 88, 49,157,166, 93,212, 5,134,119, 22, 57, 11,144,198, 57, 39, 36, 54, 5, 54, 9,255, 33,119,
+ 2,172,210,174,183,162,207, 6, 38,200, 33, 91,178,164,233, 5, 57, 56,195, 26,129, 2,188,125,251, 22,235,178,128, 80,148,173,
+238,176, 46, 65,187,124,125,118,144,129,101,219,154, 40,153,102, 90, 68,146, 41,140, 64, 91, 44,136,133,169,158,136, 96,134, 1,
+110, 26, 49,157,207, 98, 23, 12,177,137,162,115,145, 96, 25,176, 1, 49, 48, 14, 67,139,216,149, 48,151,128, 97, 28,240,233,167,
+159,224,233,233, 34,122,144, 34, 52,192,162,187,145,214, 12,114, 39, 50, 85,212,114, 19, 52,178, 76,242, 64,132,162, 7,122,204,
+165,193,207,218,215,213,144, 21, 50,250,117,114, 58, 23, 42, 90,144,236, 34,242, 82,117, 12, 69, 2,191,138, 22, 47, 92,160,185,
+244,164, 98,111,179, 23, 49,154,202, 87, 5,117, 85,122,108, 78,227,248,103, 85, 10,255,125,136,175,223,109, 87,187,245,135,247,
+ 9,109,154,108,117,171,110,167,231, 42,120,121,208,176,210,122,202, 33, 80,134,200,236,193, 24,116, 68,112, 10,133,237,246,247,
+224,170,177,110, 99,144,195,238,178,183,192, 49,193, 26,146, 32,142, 44, 97, 42,147,179, 56,121, 39, 43,193,156,181, 27,149,139,
+191,118,185,198, 48, 60, 19, 12,196, 30,150, 32,162, 17, 20, 32, 70,181, 51,177, 80,196, 12, 21,140,198,192,123, 70,166,140,101,
+ 11,210,237,176,145,157,155, 90,125,178,142, 4,157,179, 48,206,128, 44,193, 13, 30,211,105,130,113,226, 27,247,158,225, 7,134,
+247, 6,126,180, 24, 6, 3,127,178,240,163,129, 27, 44,140,229, 86,137,135,152, 16, 82,145,155, 74,171, 99,210,169,131, 33,130,
+183,128, 99, 70, 82,171, 6, 74, 18,223,163,177,136,108,145,172, 65, 32, 32, 21,106,251,157,220,186, 13,179, 39,178,180,216, 84,
+ 28,162, 88,123, 54,157,124, 46, 25,187, 20,130, 14,135,248,237, 5,184, 99,140,243,193, 98,198,140,150,112,214,175,122,234,154,
+232, 88, 96,210,111, 20,207,181,136, 94,106,203,158,206, 26,217, 43, 80,209, 37,209,221, 8, 65, 95, 80,203,223,142,195,219,235,
+ 57,168, 18,232, 0,153,249,174, 98,228,165, 21,215,111,226, 68, 52,106, 98,231, 78, 56,132,205, 40,110,210,232,225, 46, 15,140,
+ 26,229,171,220,134,154, 74, 21, 54, 92, 46, 23, 76,211, 36,200,211,156,113, 93,102, 25,101,103,104, 36,168,140,195, 11, 21, 24,
+125,248, 23, 21, 50,213,189, 99, 85,242,198,156, 17,115,130,245, 30,243,188,225,171, 47,190,198, 63,251,189,159, 97, 60, 1,238,
+100, 16,201,192,156,239,225,137, 16,222, 61, 33,100, 96,205, 25,151, 32, 7,109, 80, 64, 74, 42, 25, 31,158,158, 48,157,207,112,
+222,239,228, 71, 5, 39,173,155,248,180,137,118, 17,155,245, 35,214, 16,112,186, 63,131,140,116,221, 79,151,185,117,211,167,211,
+ 25,243,188,128,141,213, 28,114, 39, 29,121, 46,202,137, 39, 44,243, 38,100,182,235,130, 24, 51,222, 63, 62, 33, 22, 32,182, 73,
+ 83,133,158, 80, 19,116, 86,187, 44, 17, 97, 28, 71, 12,227,128,211,121,194,178,174,187,112,139,128,148,164, 99, 60,159, 79, 48,
+198,194,251,177,137,227,100,244, 12,132, 45, 96,240,131,144, 39,147, 56, 68,188,151,152,215,243,249,132,156, 51,174,215, 25,222,
+ 15,112,118,196, 60,207,184,191,191,195,229,114,129,115, 86, 39,133,117,236, 91,158,137,160,251,156,143,186, 22,101,102,140,211,
+136,235, 44,194, 65,107, 44, 78,227,168, 46,129,140,105, 26,154, 19,231,116,158, 84,207, 32, 46, 12,210,169, 86, 78, 25, 41,198,
+157, 97,161,247,158,117,130,218, 53,234, 59,175, 89, 24,165, 20, 44,203, 34,104, 93, 72, 26,157,215, 9, 75, 84,127,124,209, 0,
+ 21,209, 77, 4,248,113,130,177, 14, 91,216,244,243,223, 48,142, 39, 76,227, 73, 34, 86, 99, 84,187,157, 84, 5, 82,160,239, 72,
+214, 26,203,251, 76,216, 93,233,165, 47,104,200,159,137,112,203,254,140,146,103, 47, 29, 34,163, 27,228,166,123, 15, 82, 93,243,
+214,168,239,156, 95,182,207,190,208,100,183,241,251, 63,246, 80,127,249,128,223,247,162, 53, 25,235,121,164,235, 30, 53, 73, 10,
+192,101,226, 67, 62, 11,181,139,141,219, 40,212, 28,186,176, 46, 48,228, 54,246,181, 10,155,180, 10, 43, 57, 31,228, 93,172,163,
+255,234, 50, 17, 47,118, 6,178,216,213, 6, 67, 56, 15, 22,172, 83,132,154, 34,198,144, 96, 21, 33, 61, 1, 86,173, 97, 49, 69,
+148, 74,185,202,208, 52, 54,106, 81,163,166,136, 56,206,121,139,136,140, 53, 37,100, 13,143,129, 70, 66,130, 36,111,218, 89,134,
+243, 22,214, 59,192, 50,134, 73,110,124, 34, 1, 74,142,206, 98,114, 6,167,193,227,228, 61,166,209,201,127, 30, 60, 38, 47,161,
+ 19,134,185, 85,171,185,136, 21, 69,172, 31, 69,215, 10, 6, 12,134,211,110, 46, 54, 15,187,146,245,216, 32,177, 69,114, 22,129,
+180,218,204,208,209,156,138, 63,176,239, 1,155,142,178, 93,129, 59, 54,114,143,125,201,173,234, 63,206, 93,122,239, 87, 63,130,
+207, 71,100,107,167,174,166,255, 66,135,250,237,212,169, 95,217, 84, 49,158,140,218,107, 88,202, 14, 69, 66,185,245,194,227,163,
+ 63,183,239,220,137,247, 84,153,222, 37,210, 71,176,126,172, 96,126,233,240,127,233,181,236,239, 75,217,187, 16, 58,170,107,235,
+244,175,114, 20,234, 96, 62,163,118, 4, 73,246,162,134,224,199, 17, 91,140, 45,104,195,120, 81,190, 95,175, 87,241,189,235,142,
+179,142,111,141,181, 50,102, 15,241, 96, 69,108,192, 28, 99,177,197, 32, 1, 42,222, 99, 43,192,117, 43,248,213,231,255,128,127,
+241, 95,255, 12,211,235, 19,200, 79,224,243,189, 76,236, 30,103, 92,174, 11,222, 95,174,224, 97,196,154,147,220, 67, 84,148, 63,
+190,105, 16, 11, 16, 66,148,110, 79,243,192, 55, 85, 67,167, 44,215,110, 72, 25,126, 60, 33,149, 44, 48, 22,195, 88,214,165,221,
+227,203,178,106,112,136, 6, 47,105, 87, 92,106, 92,107,202,152,231, 5, 68, 6,243, 18, 16, 83,198,135,199, 11, 50, 17,100, 98,
+190,227, 62,169, 91, 55, 2,123, 44,175,113,146,101, 62,120,135,187,187, 59,177,147,169,247, 39,233,125, 20,226,134, 45, 6, 17,
+225, 2,184,187, 59, 99, 26, 6,196, 45,226,124, 58,225,254,124,198,186,174,200, 57, 97,154,166,134,113,246,222, 97,154, 70,228,
+146,176,204, 1,219, 26, 64,196,184,187,187, 19, 59,219,182,234,253, 99, 16, 67,198, 56,142,240,126,208,233, 88,105, 93, 96, 91,
+ 5,169, 23,191, 6, 28, 89, 63, 32, 70, 89, 89, 16, 10,150,121, 65,138, 17,119,167, 9, 33, 6, 76,211,136,111,223,189,131, 49,
+140,207, 62,251, 20,160,234,137, 47, 48,206,163,164, 44,218, 21, 69,116, 85,107, 94,140, 9,167,113,146, 3, 47,229,102, 87, 46,
+250,186,114, 18,207,248, 26, 36, 55,224,116, 62,107,132,170, 64,180,140,151,152, 93,227, 60, 46,215, 69, 82,206,200, 40,201, 18,
+152, 47, 51, 6, 63,226,114,125, 58, 70,157,162,111, 16,187, 32,231, 93,120,210,156, 63,187,113,196,180,226,180, 41,252,193, 96,
+ 50, 7,135, 73,157, 42,239, 16, 15,157,244,245, 19, 57,162,102,181,171, 80,155,166,140,175,239, 65,165,102, 86,187, 22,117,217,
+ 20,234,166,120,126,168, 83,249,237,104,113,120,169,211, 62, 62,152,233,102,207,126,216,125, 86,146, 92,214,240,144, 94,148,208,
+139,128,244, 66,175, 57,212,242,239,162,177,221,153,123,236, 43,218,206,177, 29,232,117,188,219, 91,124, 25, 77,209, 88,147,143,
+140, 33, 97, 19, 43, 32,230,236, 45, 78,206,128,114, 66, 78, 89, 31, 88, 4, 74, 25, 86,167, 15,204,128, 51,226,117, 79, 73,148,
+190,242, 48,212,176, 25,173, 56, 12,137, 40,205, 25,134,243, 6, 33, 71, 36, 48,200,122, 8,203, 86,107, 77,150,157,214,224, 61,
+134,105,132, 25, 44,216, 18,238, 30,206,184, 59, 13, 32, 74,112,134,112, 30, 29,238, 38, 57,200,207,211,160,127, 60,198,209, 99,
+112, 78,132,121,196,216, 66,194,178,109, 8,185, 96,222,130,132, 77,232, 77,106, 20,246, 96, 72, 58,130,102,255,208,106, 41,179,
+ 65,241, 30,217, 58, 68, 34,185,253, 52, 62,176,237,181,154,169, 10, 7, 34, 91, 41, 56,232, 35,118,219, 64,183,213, 81, 83,106,
+169, 75,247,103, 90,142,253, 32, 47,109,167, 94, 26, 5,240,191,196,161,222,135, 9,213,132,172, 67,224,144, 94,131,220,237,172,
+169,167, 28, 22,124,175,157,253,179, 81,127, 39,170,185,181,126,190,212,137,223, 42,227,191,171, 91,127, 46, 86,165,103, 78,213,
+ 42,134, 98, 34,100, 42,141, 79,144, 75,233,192, 90, 89,119,174, 4, 63, 12, 58, 94, 4,236, 48, 98,217, 54,204,243,130, 97,244,
+ 96, 98,196,173,242,207, 5, 40,146, 74,110,150,178,156,114,235,108,114,150,235, 59,107,183,147,178,132, 12,165, 82, 0,246,152,
+238,223, 96,205, 9, 95,126,254, 75,252,225,207,127,142,225,124, 2, 89,128, 70,143,248,238, 17, 31,222,125, 64, 72,210,169,155,
+105, 4, 57,139, 53, 8, 28, 38,132,168, 2, 52, 70, 8, 26, 96, 50, 12, 66, 84, 68,129,247,131,210,222, 60,150,117, 67,108, 93,
+111,128,113, 6,185,100,132, 24, 36, 48, 6, 56, 76,134, 8,132,117, 93, 81, 98,145,188,245, 24, 17, 66, 68, 72, 5,203,150,112,
+157, 87, 68, 21,100,101,146, 63,189,194,157, 25,237,185,117, 58,143,210, 69,151,140,101,221,192, 36,112,153,211,233,132,235,245,
+138, 92,168,229,187,215,113,109,221,171,111,203,130, 87,175, 94,225,124,154,224,189, 69, 8, 1, 94, 15,216, 92, 34,198,105, 80,
+ 59, 89,196,221,221, 89, 26,136,148, 16, 99, 66, 8,162,225,121,120,184, 71, 41, 73,125,239, 3, 66,136, 66, 28,236, 28, 2,125,
+ 70, 71, 21,136,161, 59, 43,114, 41, 56,157,197,223, 95,114,238,183,157, 34,114,203, 9,195,224, 37,182, 21,192,233,116,194, 56,
+ 78,184, 94,101, 18, 50, 12, 35,114,138, 26,122,195,141,150,151,146, 20,145,131, 31,112,154,100,255, 95,138, 28,216,245,240, 43,
+ 76,205, 97, 19, 82, 68, 33,192,143, 3,252, 48,192, 57,135, 45, 68,204,235,138,187,251, 7, 88, 39, 4,196,148, 69,239,129, 82,
+ 16, 66,132,119, 78, 99,179,105, 95,245,154, 10,123,202,173, 40, 59,232, 98, 42,225,173, 67, 60,191,196,186,232,255,142,123, 12,
+122, 55, 21,167,142,108, 90, 71,246,226,124,160,142,170, 89,208,199,139, 86,161, 96, 81,103, 76,233, 34, 48,179,114,234,219,161,
+158,170,111,145,202, 63,170, 67,191, 69,187,114,247,112,189, 61,204, 15, 15,220,130, 23,199,242,187,162,184,238,164,118,255,250,
+ 94, 59,148,166,198, 63,168,246,129, 99,216,133, 76,185,219, 7,213, 14, 3,173,128,170,207,157, 33,251,244,129, 9,103,239,112,
+114,140,146, 98, 35, 6,201, 4, 32, 43, 74, 81,236, 95,222, 48, 76, 19,195,136, 5, 41,101, 96,203,234, 77,213,149,129,213,194,
+193, 24,131,121, 13,200, 36,123, 72,182, 14,198,186,134,250,100, 54,152,166, 81, 14,117,199, 24, 38,135, 79, 62,121,192,195,221,
+ 4,207,192,253, 56,224, 52,122, 16,139, 90, 62,233,222, 39, 22, 9, 36,189, 44, 27, 46, 75,192,101, 13,248,112, 93,112, 93, 3,
+182, 84, 16, 99,145,142, 5, 34,142, 19, 27, 27, 96, 32, 54,187, 84, 84,112, 66,106,141,179, 30,217, 14, 8,108, 16,137,144,116,
+228,158, 43, 96,162, 0,166,176,238,152,240, 29,135,204,203, 56, 85,234,119,233,116, 28, 21,213, 93,241,126,147, 72,255, 88, 21,
+ 49,183,157,122, 93,161, 84,129, 75,157, 2,125, 12, 24,115,184, 17, 1,192,240,139, 62,114,166,126, 85,115,163,227, 40,191,217,
+ 42,247, 49,251,218,126,168,151,166,112,191,157,102,189,164,104,127,233, 63,223,190,198,103, 30,252, 91,201, 43, 85,143,237,254,
+190,113, 29,211, 19, 61,227, 13,140,227,208, 60,188, 49, 73, 7, 46, 16,164, 8, 6, 97,112,190, 43,220,116,106,195, 59, 76,168,
+130, 73,138, 38,154, 73,254,156, 60,144,147, 10,179, 10, 50,238,238, 30,176,109, 43,150, 28,241,238,155, 39,124,251,229, 59,252,
+241,127,243, 79,225,207, 6,197, 18, 56,100,204, 31,158, 16, 0, 44, 41,227, 26, 3, 54,245, 2, 59,235,192, 16,133,185, 29,188,
+112,215,201,128,141, 81, 85,122,108,234,113, 54,166,145,232,234,252,117,158, 47,173,249,145,177,108, 18,235,148, 66, 88,228,186,
+ 79, 24,134, 1,206, 90, 44,235,138, 66,140,121,141,184,180, 3, 93,197,164, 58,242, 23,108,106,214, 85,154,195,233, 60,226,238,
+254,132,233, 52,224,124,158, 0,146, 40, 89,107, 68,132,229,189,151,117, 89, 8, 8, 49,168,173,137, 26, 86,185, 54, 31,219,186,
+ 98, 89,103, 92, 47,151, 22,217,234,188,149,207,169,100,140,227, 32,180, 49,203,152,166, 17, 4,194,245,186,136, 35, 3,128,117,
+ 12,107, 45,174,215, 43,166,113,194,229,114,213, 78, 83, 15,141, 10,198, 41, 89,216, 6,181, 59,173,194,103,102,132, 40, 66, 61,
+ 99,141, 76,104,180, 37,147,244, 59,135,203,117, 6,105, 94,252,117, 94,154,174, 32, 6,241,221, 27,231, 48,157, 70, 41,232,114,
+108,104, 99,107,101, 58,185,172,139,240,235, 13, 55,161, 97, 5,218,164,140,182, 6, 33,125,158,174,155,136,148,207,231, 51,252,
+224, 1, 2, 46, 79, 87, 16, 73, 74, 95, 41, 25, 49, 4,137,229, 77, 82,204,149, 2,148,148, 58, 87, 87, 31,200, 68,186, 7,231,
+131, 83, 97, 79,117,228,110,226,181,219,176,203, 11,162,113,116, 2,227, 46,180,100, 95,233, 85, 71,149,130,110,110, 11,251, 93,
+123, 81,147,229, 88, 5,125,245, 62,150,135,137, 49, 6,102,242,227,159, 85,148,158,102,226,128,126,203,241,123, 61, 32,123, 75,
+208, 78,145,123, 89, 17,221,146,102, 58,149,243, 81, 33, 72, 7, 79, 57, 83,205,237, 62,194, 63, 62, 54,118,111,197, 3, 58, 64,
+ 72,205, 89,168, 49, 46,109,172,122,204, 81, 55, 5,176, 36, 34,185,179, 53, 24,184,198,132,106,148,169,170, 17,173,126, 16,198,
+ 8, 81,206,212,209, 9,145, 40,128, 11, 16,138,136, 62, 90, 82, 27, 21, 88,245,212,206, 33, 98, 14, 25, 79,203,134,216,217,255,
+ 13, 11,181,200, 88, 85,178,123,131,251,251, 19,126,240,233,107,188,190,155,112, 63, 58,188, 57, 79,152, 6,135,172,157,213, 26,
+ 19,174, 91,196,251,203, 5,239,158,102, 60, 94, 87, 60,205, 1,151, 37, 97, 73,132, 37, 1, 33, 1,107, 16,222,244, 56,142,152,
+166, 65,208,136, 49,195, 40,140, 38,233, 5,212, 42, 98,235,145,157,208,228,130,238,219, 75,202,141,135, 92,189,220, 7, 65, 34,
+ 29, 15,242, 62,207, 30, 55,126,244,190, 75, 61,136,198, 64, 55, 85,111,106, 55, 69,237, 24,136,159,119,234,220,169,212,129,239,
+215,201, 54,187,206, 11, 48, 36,211,171,222,219,181,114,115, 88,190,212,149,211, 17, 1,251, 82,177, 80,139,201,190,155,238,239,
+165,219, 63, 31, 27,179,255,166,105, 68,253,222,124, 67,117, 46, 29,148,206,152,202, 45,168, 19, 45, 77,169, 82, 97,148, 97,171,
+121,218,177, 37,152,165,154, 35,160,118, 28,195, 86, 80,161,186, 63, 39,210,201, 71, 46, 42,144,211, 2,162, 18,185, 64,176,206,
+203,126, 26,178,191,150, 29, 89, 64,138, 5, 79, 51,240,247, 95,252, 10,156,174,248,131, 63,248, 25,220,155, 7, 20, 34,108,239,
+ 31,241, 52, 47,216, 10,240,180, 44,226, 52, 97,134,115, 30, 40,114,168,179, 53, 13,124,148,181,105, 97,102,196,144, 26,245, 45,
+132, 77, 34, 71,153, 16,131, 4, 35,129,128,117, 89, 52,163, 93, 94, 91,202,177,221,155, 81, 59,173,117, 93, 69,167, 18, 11,222,
+ 63,206, 72, 69, 30,178,185,106,127, 12,239,108, 10, 61, 4,152, 9,198,114,235, 74,235,184,156, 0, 12,227, 0,107, 24,215,203,
+ 19, 94,189,122, 85, 75, 35, 76,231, 9,227,224, 97,140, 16,221,106,227, 49, 77,131,174,200,118, 91, 84, 8, 17,235,186, 97,154,
+ 38,164, 20, 48,140, 14,147,118,237,211, 40,158,245,101, 89,112, 58,143, 13,238,178, 44, 11,134, 97, 84,218, 28,169, 40, 84,138,
+ 24, 98,130,183, 78, 1, 39, 53,175,131, 20,146,165,162,125,181,144,237,150,227, 58,206,151,130, 36,108, 81, 17,172, 5,235, 26,
+ 96,140,197,124,157,145,147, 76, 68,188,151,226, 38,167,208,232,113,137, 4,186,228, 7, 47,130, 83, 8,196,139,173, 20,104,213,
+ 42, 90, 84, 67, 16, 66,212,160, 27,209, 45, 60, 61, 93,241,240,112,143,109, 91, 97,173,195,245, 58, 35,132, 13,167,211, 73,172,
+186, 68,106,241, 83, 77, 80,221,119,215, 40,214,166,174, 63, 78,225,122,119,214,115, 21, 59,186, 64, 52, 58, 62, 8,107, 17,208,
+221, 79,253, 68, 25, 55, 58,151,151, 32, 90,153, 68, 52, 93, 35,121,187, 81,243, 94, 4,232,191,104,143, 7, 32,253,103,139,228,
+142,150,156,231, 72,248, 99, 64,203,199, 70,150,183,107,125,218, 83,212, 72,210,203, 8, 71,222,118,191,255,168,130,160,174,129,
+111,158,226, 3, 55,251, 5, 28,232,193, 75, 93,196, 87,207,200, 48, 92,127, 95, 21,182,168,141,195, 40, 19, 94,148,173,117,212,
+190,119,143,181,139, 5,147, 90, 32,128,162,227, 52,176,193,154, 10,214, 76,184,134, 94, 29,114, 55, 0, 0, 32, 0, 73, 68, 65,
+ 84,132, 53, 17, 98,200,136, 37, 98,100,160, 88,192, 21, 2,167, 36, 0, 14, 54,120, 56,143,120,251,112,198,253,224, 96,203,128,
+145, 45, 98,220, 48, 94, 9,151, 37,226,113,222,240,120, 89,176,172, 17,243,178,180,164,159, 76, 35, 66, 54,152,215, 21,243,186,
+233,232,211,224,254,254, 30,222, 25, 44,243,162,133,129,238,255,181,242, 33, 48, 50,239,228,186,157, 42,215,237,132,154, 14, 46,
+239,233,126,157,159,188, 21,107,135, 81,222,203,172,117,165,212,116, 25,166, 29, 18,176,113,251,243,179,137,206,179,177, 52,253,
+118,215,106, 79,253,120,214,209, 87,239,249, 13,104,166, 95, 44,145, 42,224, 43, 52,232, 31,243,207,111,196,196,126,207, 41,217,
+173,168,135,202,158,142,213,143,222,119,107, 76, 55,217,170,130,189, 12,201,148,206, 66, 52, 4, 72,131, 73,178, 64, 77, 82,144,
+162,207, 59,192, 57,204, 49, 34,164, 8,182, 22,105,222, 96,172,228,156,199,146, 5,169,170, 83,182,156,116, 60,206,140,193, 13,
+ 88,182,160, 86, 51,130,179, 30, 79, 79, 31,224, 45,161,132,130,187,183,111,113,157, 25,255,234,255,252,127,240,230,179,183,248,
+ 31,255,231,255, 9,230, 53,193,156, 60,172, 51, 72,215, 89, 83,251,132, 50, 70,196,152,175, 87,185, 26,131,166,178, 17, 99,213,
+ 49,188,181,174,249,159, 73, 31,238,243,188, 52, 11, 84, 74, 5, 41, 5,132, 77, 69,162, 36,197, 14, 17, 35,198,154,153, 46,135,
+182,232, 84, 10, 62, 60,205,162, 59, 73,242,126,181,162,143, 5,189,219, 51, 57,196, 94, 42,162,181,233, 52,226,233,233, 61, 62,
+249,196, 10, 97,210, 48,198,193, 43,248,106,195,143,126,248, 41,230,101,197, 22, 34,166,211,132,111,191,249, 22,254, 60,160, 6,
+ 22, 49, 19,156, 21, 42,222,229,233,210,196, 86,131,134,237,156,207, 39,188,255,240, 45,156, 51, 56,157, 38,248,193,226,205, 39,
+ 15,184,206, 23, 45, 46,228, 51, 22, 43, 90,129, 97,146,252,111,236,136,218,162,188,115,102, 22, 86, 6, 32, 25,235,216,233,110,
+168,187,238, 78,171, 17, 98,128, 51,166,221, 83, 37,100,113, 1,100,224,253,187,247,152,198, 17, 49,206,136, 49,227,241,233, 9,
+126,120,141,243,221, 61, 46, 31, 62, 32, 69, 89,211, 76,131,135,117, 22,227, 52,226,233,233, 73, 44,110, 81, 24, 1,214, 90,209,
+ 10, 92,103, 48, 59, 24,231, 16, 66,192, 50, 7, 57,199,140,129, 97,113, 69, 92,231, 43,172,149,233,204,135, 15,143,152,166, 81,
+ 66, 96, 92,110,209,185,185,164,125,229,132, 42, 88,227, 93,191,115,195, 70, 57,100, 74,148, 35, 20, 43,223, 30,250,186,107, 55,
+149, 89, 81,181, 58,180,135, 47,245,150, 94,113,127,153,125,255, 94,241,177,117, 84,223,101,163, 84, 40, 77, 29,199,203,179, 93,
+137,114, 71,149,242,111, 31,216,242, 18,240,162,239, 98,184, 27,133,191,208,168,189, 60,138,108, 49,146,232, 70, 12,249,176, 55,
+173, 6,190,230,131, 46,180,211,228, 90,100, 30, 14, 65, 27,123,103,212, 31,232,251, 72,184, 31, 10,139,247,152,155, 23,178, 9,
+ 94, 84,237,201,165, 75, 26,171, 40,218, 92, 3, 61,118,113, 71,209, 27,177, 42,138, 11, 17, 98, 1,230, 84,176, 21, 66, 98, 35,
+ 30,116, 50, 8, 37,129, 83, 22, 68, 35,103,176, 99,156,239, 60,238,166, 17,175, 78, 35,238, 71, 7,147, 3, 56, 69,124,216, 34,
+174,115,194, 63,124,249, 14, 95,124,245, 30, 95,127,184, 98, 73, 66, 92, 26,199, 19,134, 97,130, 27,206,200, 84,144,153, 16,178,
+216, 63,136, 19, 10, 65, 30,122, 57, 54,240, 72,243, 71,214,113,122,179,159,113, 43,174,246, 61,114,217, 11,167,210, 28,255, 55,
+ 31,235, 81,205,126, 24, 19,119, 6,234,102, 65, 44,157,229,170,221, 28, 61,119,160,252,198,131,238,187,148,226, 47,217,217,234,
+165,120,219,165,183,238,191, 19,186,244, 1, 46,212,173,151,116,222, 35,170,241, 94, 8,247, 29, 10,248,103,135,246, 71,232,114,
+191,105, 79,255,162,207,254,102,236, 95,241, 89,212,117, 21,212,197,226,102, 20,184, 98, 52, 12,103,175,202,119, 64, 6,169,103,
+184,224, 52,141, 40, 41,193, 25, 3,114, 12, 54,132, 85, 39, 12,103, 67,130, 33,133,230,210,149,253, 94, 78,144,209, 53,103, 77,
+ 53, 52, 14,219, 22, 16,182, 32, 63,223, 59,172,203,138,148, 51, 46,215,132,113,152,176,241,134,149, 11,182,243,167,248, 95,254,
+215,255, 11,191,247,207,255, 57,254,232, 95,254, 62,238, 63,253, 4,159,127,241,107,196, 16,112, 26, 6, 60, 70,177,170, 17, 25,
+181,110, 38,177,163,142, 35, 46,243, 2,103, 77,123, 63,230,121, 70, 12, 1, 84,196, 42, 85, 16,229,208,215,251,212,217, 1,155,
+ 17,127,176, 32,110,245, 97, 73, 50,194,207, 5,216, 86,233, 42,183,144,196,234, 84, 0,235, 61, 10, 0,107, 61, 98, 12,178, 31,
+ 38,128,217,182,157,112, 78,165,121,231,199,113,130,181, 35,190,249,230, 91, 32, 23,220,223,159, 53,152,196, 75, 60,106, 88,241,
+238,253,215,136, 81,168,122, 40,192, 55, 95,127,141,251,251,123,228, 82,176, 69, 97,182,223,223,223,225,213,235, 87,120,124,255,
+136, 16, 36, 72,234,124,150,137,135,115, 22, 49, 6,108,155,140,246, 31, 30, 30,192,252,187,248,234,171, 95,131,200,192,143, 30,
+243,188,182,195,166,141,137, 33,133,207, 52, 77, 34, 48, 92, 55,201,235, 54, 6,167,243, 25,243,229, 34,207,178,218,164,232,181,
+ 66,204,109, 23,188,165, 0,199, 22,198, 24,201, 84, 87, 97, 91, 81,177,156,104, 94,228, 82,187,206, 87,188,126,117, 47,130,198,
+ 44, 79,225,101, 89, 91, 52,236,253,221, 93,179, 86,178,106,143,214, 69, 2,106,182,152,177,174,155, 36,209, 13, 30,204,210,168,
+124,243,245,183,248,244,179,183,136,225, 43, 89, 59,176,193,182, 45,141,211,254,112,255,128,199,248, 36, 97, 86,134,165,177,201,
+ 25, 80,117, 58,202, 13, 37,243,197, 64, 39,153, 40,212, 61,248,158,151,246,124,239,149,251,231,200,174,251,110, 16,168,250, 96,
+ 49,178, 31, 86,170, 92,105,207,133, 98,185,129,120,170, 40,151,250,103, 71, 93, 15,178,233,132,114,109,183,132,151,187,168,239,
+248,135, 85, 1, 88, 15,129, 10,224,104, 15, 61,221, 49,247,138,248,219,239,169,233,195,135,255,149,186,180, 43, 34, 1,248, 21,
+ 58,118,195,253,239, 72, 68, 48,253,136,254, 38,224,162, 89,123,106,240,252, 45,172,163,166,173,145,193,192,132,129, 11,238,189,
+ 64,101,146, 34, 90,147,254,166,214, 8, 64, 35,231, 0, 71,192,104, 13, 44,201,200, 29, 96,245,158, 27,172,186,123, 22,101,167,
+168,190,201, 90, 68, 54,184,196,132,144, 11,130, 38, 18,181,130,197, 84,165,166, 96, 98,239,207, 19, 62,123,115,143,207, 30, 38,
+220, 15, 4, 46, 25,215,203,130, 47,191,157,241,247,223,110,248,171,191,255, 6,159,127,125,197,251,149, 16,202, 0,114,119, 32,
+123, 70,230, 9, 69,189,239,243,188, 96, 94, 22,196,180,193,218,130,209, 25,132,101,197,122, 89,132, 56,134,172, 15,185,218, 49,
+ 23, 36, 50,200,205,163, 78, 50, 86, 77,185, 93,112, 57,151, 99,200, 24,209,115,252, 46,237,220,190,151,188, 86,185,195, 42, 10,
+216, 8, 13,236, 80,244, 64, 47,205,206, 86, 90,218,222, 46, 92,163, 54,206,226, 67,152, 15,181,201, 74,191,154,217, 57,203,221,
+225, 95, 74, 99, 28, 16,237,215,198,161,232, 67, 7, 66, 82,184, 77,221, 69,247,175,191,174, 45,110,125,231, 47, 22, 35,189,148,
+164, 28, 17,202,253,239,219,107, 6, 94, 26,191,127, 31,197,125,211, 39, 52, 12,238, 62,149,227,238, 97, 66,135,162, 87,169,128,
+138, 11,101, 35, 1, 63,206, 89,176, 97,204,203, 34,145,163, 57,195, 15, 35, 88, 15, 69, 98, 86,200, 12, 55,107, 86, 29,193, 54,
+ 80,143, 49,216,182, 13,198, 24, 56, 47, 94,105,231, 61, 46,139,236, 64, 79,231, 19,166,179,135, 51, 30, 33, 49,214,101,195, 23,
+191,248, 37,254,244, 95,254, 41,206, 22,136,203,138,203,227, 19, 2, 10,214, 20,129,194,240,254,132, 68,192, 22, 2,140,119, 32,
+ 54,141, 56,199,198, 98,158, 23, 77, 40, 44,202, 53,207, 13,211, 73, 68, 88,215, 32,221,122, 72,154,217, 77, 72,169,128,201, 98,
+219,130, 82, 29, 5, 14,181,198,132,235,178,194, 79, 35,216, 57,141,229, 20, 27,106, 77,122,107,249,222,108, 96, 21,239, 90,173,
+140,206,123,249,153,203, 10,102,177,181,165, 28,165, 59, 29,134,182, 18,100,150, 36,178, 31,252,224, 51, 12,163,199,195,171, 7,
+ 92,174,210,125, 58,231,164,251, 28, 79,178,187, 94, 37, 97,207, 90,177,169,189,122,245, 10, 49, 5,196, 44,220,120, 2,112, 58,
+ 77, 32,146,213,131, 53, 22,231,187, 51,174,215,185, 9, 9,147,218,186, 10,213,216, 83,134,179, 2,201,202, 58,181,217,214, 21,
+214,116,156,242,220, 89, 37, 11,186,189,178, 90, 95,213,207, 63, 77, 39,161, 90,150,125,178,231,189, 19,222,190,170,229,183,117,
+211,161,157,234,118, 82,106, 83, 82,235, 36, 79, 62, 70, 89, 25, 18,177,118,233, 17, 49,236, 34, 64,239, 7, 13,245, 97,121,221,
+186,215,151,123, 73, 84,242, 49, 36, 88,107,155,189,112, 31,100,117,247, 16,181,248,175,174, 43, 63,176,198,247,251,155,246,200,
+232,231, 77, 6,119, 19, 72,180, 53, 70,123,102, 40, 56,167,234,177, 82, 11,158,209,159, 87, 93, 8, 57, 31, 92, 20,181,251,223,
+169,173,210,132,182,157,122,229,121,223,250,200, 95, 58,208,111, 59, 17,195, 86, 9, 94, 53,117,107,207,116,110,228,176,178,123,
+214, 43,103,184, 79, 73,163,146, 97,114,253,239,162, 49,100,157, 3,178,152, 8, 85,225,222,143,220, 75,227,182,183,152,138,155,
+177, 42, 53, 70,125,110,105,171,245, 97, 85,197, 17,253, 26,132,137,224,137, 49, 26,134, 47, 1,119,222,194, 41,153, 77,246,227,
+ 4, 99,228,245,150,146, 96, 74,198, 64,132, 81, 69,103, 41, 73,254,120, 68, 70, 84,159, 35, 49,161,144, 20, 36, 49, 39, 36, 16,
+ 34, 49,182,146,187, 93,122, 31,158, 34,135,131,161, 2, 99, 9, 15,119,119,120,251,250,140, 55,103,139,129, 18,194,178,225,221,
+227,130,175, 62, 44,248,252,221,140, 47,190,121,143,199,101, 67, 4, 16, 75, 86, 90, 86, 0, 49,193,120,169, 96,115,142, 40,105,
+197, 56, 16,222,190,185,195,221, 52, 98,189, 44,136,215,208,244, 10, 89, 61,202,172, 11,179,200, 6,217, 15, 72,214,137,231, 54,
+103, 85,111,238, 15,198,234, 75,168, 3, 18,234, 68, 86,165,244,249,245,165, 29,132,186,173,214, 27,105,159, 2, 48,145,160,125,
+ 75,217, 73, 41,245, 32, 87,107,162,188,123, 50, 30, 48,109,135, 94, 69, 38,187,176,178,125,248,173, 11,161, 54, 70,219,131, 96,
+168,203, 45, 46,173,179,228, 61,226,172,237,150,247,201,195, 94,168,238,246,176,125, 4, 87,225, 20,232,236,148, 31, 27,173,151,
+155,131,157,110,114, 17, 62, 38,146,251,152, 66,254,163,193, 49, 42,244,171, 89,223,224,227, 62,189,218,121, 42,243,190,199, 91,
+ 86,207, 52, 24,112, 78, 19, 0,153,112,185, 94,193, 4,156,166, 73,252,189,205,127, 47, 10,115, 67, 6,172,225, 29, 49, 38,189,
+ 94,242,174, 19, 34, 18,155, 28, 19, 98,206, 96,235,224, 6,143,101, 91,129,146, 48,120,131,117,222,224,252,132,152,129,167,167,
+ 43,190,252,234,107,132,199, 43,254,244,191,251, 35,240, 22, 16,182, 13, 95,125,251, 13,230, 88,176, 38, 5, 6,145,140,145,253,
+ 48, 32,149,220,246,204, 85, 76,150, 84,140,182,110, 27, 66,136,176,214,106,198,188, 8,226,150,121, 17,149,251,182,105,144,139,
+195,186,108, 96,146, 17,110, 42, 69, 45,116,144,177,123, 41,240,163,135,181, 70, 40,110, 58,110, 90,215, 25,195,224, 17, 21,153,
+107,172,136, 95,157,115, 24,167, 17,198,114, 83,216,135, 20, 80, 80, 48,142, 99, 11, 19, 98,195,136, 65,242,222,147, 42,210,115,
+ 78,184,187,191,195, 22, 54,148,146,177,109, 81, 38, 26, 91,208,239, 41, 93,241,186, 6,204,203,138,233,116, 2, 91, 9,125, 34,
+ 20,133,196,108,120,243,250, 21,190,253,246, 91,237,198, 79,237, 48, 44,250,115, 67, 42, 32, 99,229,208, 52, 70,169,150,132, 82,
+ 36, 33, 78,200,118,165,241, 68,184, 93,163,212,178, 15,118,178,163, 92,101,213,238,232,189,135,113, 22, 91, 16,108,109,136, 1,
+164,113,178, 91, 12,130,235, 77, 9, 92, 20,153, 29,196,199, 94,109,149,117,106, 82, 10, 75,252,172,170,232, 91,230, 64,202,186,
+ 99, 15, 24,207, 39,188,123,247, 14,167,105,194, 48,122,133, 86,201,132,106, 11, 81, 25, 12, 90,188, 60,155, 49,238, 91,192,250,
+ 44, 75,154,214,135, 67, 18,229,203, 61,111, 15,213,170,105,110,149, 78, 71,157,200,174, 38,210,165,220,169,216, 85, 80, 40,207,
+ 18,211, 14,173, 61,102, 58, 31,154,133,198,215, 40,141,253, 62, 41,124, 38,189, 40, 2,248, 62,123, 60,102,115,232, 74,158, 61,
+104, 74,111,225, 57,202,252,119, 6,172, 62, 88,233,165, 7,150, 40,232,249, 70, 16,135,158,141, 13, 1,194,244, 81,173,172,123,
+224, 10, 55,160, 78,188,112, 91, 85,213,239,207, 0, 60, 52, 78,181, 36,156,188,131,211,253, 76, 74, 64, 46,172,156,116,128,114,
+212,216,213, 2,239, 68, 85,154,114, 22,128, 11, 51,182, 44, 74,116,241,160, 43, 25, 77,229,136, 89,143,146,182,203, 45, 2,246,
+168,160, 19, 46, 66,173,243,206,226,213,253,132, 79, 94, 77,184, 27, 12,184, 68, 60, 93,174,248,245, 55,239,241,213,183, 79,248,
+250,253, 5, 79,215, 25, 41, 3,131,247,184, 59,157,112,127,119,194,235, 87,247,248,193,103,159,226,213,195, 25,167,209,194, 34,
+ 98,114,132, 55, 15, 19,206,147, 71,137, 1, 31,190,121,143, 18,119, 49, 98,175,237,200, 96, 36, 99, 1, 55, 32, 25, 39,177,132,
+ 85,129,174,130,193,150,147, 76,251, 14,189,127,143,143, 90,137,189,176,171,127,184,235,162,251, 83,141, 84,153, 93, 1, 48,149,
+106,149,245,231,239, 33, 42,116,176,135,181,216, 93,236,200,196, 58,141,225,103, 12,250, 62,169,172, 28,244, 32,212, 49,227,251,
+ 13, 86,189, 33,249, 70,156,246,108, 63, 79,187,100,245,187, 82,225,202, 17, 61,115, 19, 51, 76,207, 98, 99,191, 11, 74,115,251,
+117,189,103,190,253, 4,253,187,182, 7, 44,181,160,214, 7,148,114, 90, 10,237,211,147,210,145, 25,139, 30, 12,235, 38,185,222,
+175, 94,189, 82, 96,147,209,110, 46, 9, 72,197,187,102, 99, 43, 40,237, 64, 37,237, 80, 72, 31,140,133,196,166,180, 41,178,148,
+141, 17, 91,215, 52, 33,134, 21,126,240, 8,185, 96,217,130, 28,208, 57,224, 87, 95,252, 3,126,120, 26,241,211, 31,255, 24, 79,
+239,223, 99, 94, 3, 2, 15,184, 70, 18,108,108,145,132, 53,176, 1,169, 34, 58,165,210,198,242, 79, 79, 87, 20,144, 32, 98, 65,
+ 88,183,128,235,178, 52,210, 90, 74, 5, 81,189,209,168,150,188, 34,225, 51,243,182, 97,217, 54,181,225, 73, 22, 3,192,112,222,
+227,195,135, 71,204,203,138, 82,128,243,233,132,101, 94, 69,180,118, 18,248,203, 22,130,122,153, 69,144,204,204, 88,215, 5,231,
+251,179,120,208,163,216,207, 88,213,249,243,188,192,235, 56,121, 24,189, 68, 66,123, 39,116, 60, 99,112,189,138,223, 59,132,136,
+105,244, 56,157, 6, 17,131, 77, 3,230,101,129,115, 34,112, 27,252, 32,107,148,172,217, 22, 70, 40,129, 15, 15, 15, 66,215, 75,
+ 25,211,233,140, 53, 6,153,180,120, 39,225, 40,170, 77,178, 70, 82,229, 30,238,238, 0, 0,222,251,110,252,171,204,244,156, 27,
+121,177,145, 30,121, 23,128,177,234, 23, 82, 78, 2, 35,178, 6,134, 89, 15,108, 86, 22, 64, 66, 74, 1,206, 59,105, 16,141,107,
+ 94,239,148,146,250,217, 69, 8, 23, 99,105,177,175,155,234, 37,140,181,250, 51,164,224, 40, 84, 48,207, 11,156,247, 88, 23, 41,
+234, 6, 63,202, 24, 63, 37,133,199, 8, 44, 76,154,174, 23, 26,215,210, 65, 97,106,135,221, 5,140, 20,148,239, 12,134,186, 29,
+120, 87,246, 61,221, 76,228,234,193,124, 59,145, 43, 31, 9,121,234,197,180,135,245,183,190,215,221,248,253,165, 78,253,123, 30,
+234,100, 62, 10,195,216, 3, 48,246, 39, 23, 83,147,161,247,250, 62, 97,183,223,206, 34, 91,231, 15,101,187,211, 77, 80, 76, 7,
+ 13, 40,251, 46,100, 15,221, 56,238, 65,111,137,119,245,125,108, 0,154, 66,240, 16,139,154,103, 96,100,134, 55, 6, 40,172, 33,
+ 6, 18,204, 98, 20,122,234, 88,211,214,212, 11, 19,115, 70, 2, 35, 50, 99, 75, 25, 91,214,189, 75, 29,238,232, 1, 79, 70,217,
+196,245,213,150,157,120, 87, 95,151, 53,192, 52, 58,220,223, 13,120,125, 30,113,114,132,146, 54, 60, 62, 94,240,237,251, 39,188,
+127,188,226,178, 4,160,200,248,238,213,195, 3, 62,121,253, 10,159,188,190,195,253,221, 25, 15,119, 39, 56,206,112,136,120,125,
+242, 56,217,130,187,129,225,168,224,242,254, 17,151, 15,115,211, 32, 84, 16, 74,229, 16,103, 50, 72,198,162,184, 1,137, 77, 27,
+ 7,229,230, 2,232, 96, 11, 29, 15,189,183,169, 29,162, 85,113, 11, 35,210, 34, 65,255,189, 61,247, 93, 29,163, 53, 75,184, 75,
+ 34,170,224, 32,194,243, 67,189,178,231,219, 88, 94, 43, 64, 38,122, 94, 55, 80,133,159,116, 9,128,109,236,108,244, 79,239, 29,
+ 47, 7,110, 2,127,164,139,110, 7,117, 21,215,252, 38,187, 91, 31,250,208, 93,199,125,167,222,239,198, 63,230,125,127,233, 96,
+127, 17,129, 91, 58,219, 77,169,152,140,174, 16, 99,128,120,199,130,214,224,157,210, 74,209, 93,231,112, 58,159,225,156, 1, 74,
+193,224, 61, 12, 27,120,231,132,240,181,109, 88,215, 21,222,249, 54,110, 14, 49,202,123,174,247,153,117,182, 81,224, 10, 8,126,
+240, 45, 32,229,254,238, 14,219,186,224,116,154,176,134,132,167,121, 70, 2, 48,156, 78, 72,165,224,255,253,139,255,136,223,253,
+244, 7,248,193,171, 7, 60, 93,159,240,180, 5,193, 51,111, 98,143,219,114,134,115, 3, 54,245,174,175, 33, 54,216, 81,214, 63,
+ 75,144,131, 43,196,132, 24,146,242,200,119, 13, 15,147,172, 29, 50, 8, 91,202,120,156, 23, 57,252, 91,162, 48,171,199, 95,216,
+ 14, 18, 98,147, 14,153,216,117, 44,107,221,222,237, 18, 23, 65,194,106,186,162, 31, 7, 25, 23, 67,146,227,128,130, 97, 24, 26,
+ 33,142, 85,124,119, 58, 79, 96,102,124,248,240, 1, 70, 5,127,117, 77, 20,182, 5,222, 51,222,188,190, 71,138, 81,118,222, 73,
+156, 41, 41, 38, 76,227, 4,102, 96,158,175,184,187,187,199,178, 44,210, 49, 27,139,235,188,200,148,196,201,148,132,212, 18, 88,
+227, 67,139,166,176,161,100,153, 18,108, 91, 99,174,115, 29,209,163,210, 21,185,101,130, 52,200,142, 62,231,152, 89,128, 90,222,
+ 1,144,131, 87,114,197, 51,206,231, 59, 13,217, 1,144,162,238,230,141,106, 15, 70,164,146,181, 48,204, 8, 73, 32, 67,213, 82,
+ 89,157, 91, 49, 70,253,249,212,148, 89,149,195,191,133,128,117, 13, 88, 55, 1, 4, 53, 32,150, 90,200, 26,223,164, 30,212,229,
+ 56, 73,107,207, 24,238, 18,195, 10,186, 21,100, 57,228,189,239, 58,180, 93,153,202, 68, 74, 57,127,158,171,114,123,223,126,108,
+ 10,183, 91,233,142, 54,222, 29, 7, 45, 83,211,221,167, 94,242,111,223,169, 55,254,186,249, 78, 15, 58,223,120,239,234, 27, 73,
+ 93, 54, 58,183, 32,169,190,123, 54,237,123,203, 11,202, 47,190,216,134,128,173, 94,219, 3, 36,228,166,202,225,170, 88,222,211,
+218,168,223,193,162,192,162,192, 27,192, 19,193, 81,129,183,182, 29, 48,138,225,134, 33,241,156, 51, 21,185,232, 85,196, 23,115,
+ 65, 34,194, 70,132, 37,102, 36, 13,220, 0, 75, 72, 3,171,156,126, 7,243,239,227,153, 82,217,192, 42,168,179, 6,152, 6,135,
+187,147,199,171,179,195,228, 24, 57,108,120,122,154,241,116, 93,176, 6,185, 64,173,117, 2,170,241, 14,167,193, 98, 48,128,161,
+ 8, 46, 17,166, 4,140, 20,113,231, 9,119, 3, 99,114, 70,195, 51,190, 65,152, 53,195,157,143,123, 25,144, 30,234,108,145,173,
+ 71,130,224, 99,143,193, 36,186,147,212,206, 22,207,122,206, 42, 38,229,131,197,108,215, 85, 40,242,181, 19, 50,182,234,244,153,
+200,171,194, 46,242,238, 9,237,144,167,181,227,127,222,225,222, 80,226, 42, 87,155,202,255, 79,217,155,245, 72,150,101, 87,122,
+235,204,119, 50, 51,247,136,200,204,202,202,172,145, 53,144, 34, 27,205,174,150,186,159, 4,189, 72,128,160, 7,253, 38,254,176,
+ 6, 4,234, 69, 16, 32,136, 84,163,155, 68,149, 56, 38,139, 85, 57,196,224,238,102,118,167, 51,233, 97,239,123,238, 53,115,243,
+204, 18,129,200,172, 42, 70,120,152,155, 95, 59,103, 15,107,125,235, 6,107, 30, 5,178, 33,138, 55,125,131,174,229,130, 87,137,
+151, 71,227, 41, 93,170,243,197,183, 40,212,151, 67, 34,151,124,131, 63, 28,148,243,146,136,238,165,241,187,228, 48,149, 11, 21,
+ 47, 54,147,174,165,107,150, 27, 72, 85,198, 69,112,196, 50,141,161,253,175, 99,141, 8,117,114,130, 59, 64,165, 20,144, 19,198,
+113,160,255,204, 73, 89, 2,130,172,100, 44,166,218,239,247,152, 35,121,197, 73,144, 22,161,149,198, 56,141,144, 90,241, 69,176,
+248,219, 61,230, 16, 96,157,131,212, 26, 62, 9, 60,156, 61,254,241,239,254, 17,159,125,250, 49,218, 93,133,121,238,137,248, 24,
+ 51, 2, 4,116, 85,145, 8,207,123, 18, 95,177,255,152, 2,138, 40, 87,124, 24,231,245,226,230,152,229, 16,232, 66,241, 62,112,
+ 18,161,128,143, 25,199,126,194, 83, 63, 17,250, 53, 45, 1, 44,178,164,152, 77,211,140,188, 4,130,112, 72,201,130,196,157,253,
+140,186,166,140,243,148, 34,154,166,130, 49, 10,117,229, 80, 85,142,237,132,180, 11, 29,134,177,252,236, 98,138,148, 4,199, 97,
+ 41, 25, 9, 33,120,140,195,200,147, 16, 98,132, 11, 8, 88,107, 32, 4, 37,184, 53, 77, 13,109, 12, 92,229,214,164,179,228,113,
+216,239, 49,244, 61, 92,181,218,217,230,217,163,110, 26,188,123,255, 30,117, 83, 51,194, 55, 23,114,230,114,113, 73, 41, 8,214,
+226, 12, 7,229, 76,188,187, 54,156, 44,185,156, 5,226,170, 87,203, 5,135,171,141, 97,193,156,135, 49,154, 1, 51, 17, 2, 10,
+ 50, 3, 93, 75,200, 87,185, 36,217, 33,163,109, 91, 60, 29,143,168,234,138, 70,229, 90, 65,105,210, 55,164,148,104, 26,193,221,
+249,114, 62, 40,165,203,133,156,248, 25,142,137,198,217,137,139, 90,181,140,176,197, 85, 33,140, 75,210,227,114, 87,137, 13,111,
+129,206, 17,185, 49,229, 92,222, 65,212,165,200,178,216,186, 44,170,151,144,152, 21, 73,189,109,134,151,233,218, 50, 98, 95,138,
+161, 11, 50,228, 85, 55, 95,254,220,194,153, 71,222,140,223, 11,169,235, 15,163,111,137,140, 77,199, 34,159,141, 4,190, 77,184,
+179,253, 26,200,219, 17, 98,222,140,130,197,133,114,157, 69,216,151,190,222,114,160, 46,121,224,178,136,253,150, 24, 65, 33,174,
+ 70,151,114,129,136, 60,207,115,151, 82,150,177,183,145, 2, 90, 0, 74, 36, 24,173, 75, 0,135, 96, 49,157,214,170,176,144,151,
+203, 73, 74,133, 8,129, 8,137, 33, 3, 99,202,136,160, 48, 22,185, 36,187, 45, 23, 58,143,114,114, 94, 51,198,151,127,210,135,
+ 53,163,178, 10, 77,165,113,104, 45,246,141, 65,109, 21,210, 28, 48,142, 51, 38, 31,145,147, 40, 59, 45,165, 24,245, 26, 39, 68,
+ 63, 64,166, 9, 50,121, 84, 42,225,174, 53,232,156, 68,235, 52,172,148,120,255,238, 61,222,190,125, 0,178, 42,105, 31, 82,174,
+ 34,195, 44, 36,162, 82,240, 82, 83,152,139, 84,148,167,158,211,218,173,103, 20,157,194,234, 45,191,230,254, 95, 91, 29,150,159,
+215,166, 56,219, 20, 86,249, 89, 39,188,170,228, 87,178,215, 58,190, 82, 91,146, 28,127, 16, 87,216,209,101,236,235, 54,201, 45,
+ 97,209, 87,200, 77,133,156,202,179, 76, 16,150,181, 42,222, 10,228,144,241,108, 44,126, 19, 42,147,243,133, 77,238,165,223, 87,
+ 58, 1, 92, 18,229,110,250,233,255,192,162,251,122, 44, 47,165,188, 88, 77,229,226, 25,103, 15, 58,139, 62, 37, 71,248,208,113,
+164,202,143, 78, 73,234,212, 82,166,131, 52,179, 42, 57,204, 51,180, 86,200, 49, 65,107, 13, 41, 4,198,121,132, 86, 26,138, 15,
+220,113,154,161,181,193, 52,205, 16, 82,161,170,107, 72,109,202,207,117,177, 0,105, 77, 9,133, 89, 8,204,243,140,110,215,145,
+205,202, 19,218,180,169, 26, 72,161, 73, 68,164, 12,166, 12,124,241,251,223,195, 88,139, 79, 62,122, 13,129, 4, 31, 3, 32, 21,
+164, 50,172,134,151, 28,154, 66, 29,149,103,177, 87, 96,156,108, 78,177,228, 32, 40, 73, 34,172,152, 8,148, 19, 98, 70, 76, 2,
+ 31,158,122, 28, 7,143,193, 83,162, 28, 61,148, 10, 2, 52,222, 39, 5,120,222,136,173,114,233, 24,181, 49,112,206, 48,139,221,
+ 48,103,125, 66, 85, 59,180, 77, 13, 32, 65, 27,197,208, 16, 9,107, 12,140,117,120,124, 60, 98,183,219, 51, 1,206, 67, 74,160,
+107, 91,162,173, 5, 10, 78,169,170,138, 46,102,239, 49,244, 35,156,115,204,125, 95,167,105,119,247, 7, 72,153,203, 46, 92, 73,
+133,190,239,185, 8, 16,197,178,150, 51, 9,231,170,218, 65,105, 18, 37,230, 12,104,165,153, 77, 78, 8,217, 97, 26,209,180, 13,
+ 34,191,174,152, 40,225, 78, 72,193,235,133,188, 10, 99,151, 53,150, 92,247,200,214, 89, 28,246, 59,204,211,132,182,109,169, 16,
+138, 1, 57, 69, 76,211,184,122,184, 69, 70,215,181,112,174,194,233,116, 36, 17, 93, 83,193, 58,139,166,169,153, 96, 71,223,251,
+ 50, 22,215,252,188,165, 68,100,194, 84,160, 36,107, 74, 94, 6,161,177,149,166,117,209,210,101,175,185,230,184,185,186, 42,145,
+224, 0, 5,191, 92,140,218,193, 97, 43, 98, 51,253,187, 20,131, 11,185,134, 92,101,228,111,213,195,220,162, 96, 94,135,166,221,
+130, 79, 45,218, 24,228,188, 10,229, 18,210, 31,220, 37, 20,158,250,166, 83,202,249,101,241,206, 69, 23,191, 80,145,178, 90, 21,
+232, 5,161,168, 54,227,103,238, 46, 22,219, 26, 95,234,207,246,137, 41,111,224, 26, 98,213, 41,149, 68, 45,113, 17,216,113,169,
+107, 72,197, 83, 47,121,153,184, 0,253,149,148, 48,188, 99,175,140, 89,109, 73, 88, 18,215,104,244, 20, 89,143, 64,240,125, 26,
+202,251, 36,112,142, 25, 83, 76,236,245, 22, 69,160, 37, 23, 53,228,102, 68,180, 48,226,203,254,151,117, 0, 86, 75,236, 26,139,
+ 67, 99,176,175, 53,106,171, 32, 50,224,185,235, 89,242,120,165,148, 48,138,242,212,173,204,112, 50,161, 50, 2,187,202,224,117,
+ 87,225,174, 54, 56, 52, 14,181, 53, 56, 30,123,252,243, 23, 95, 98, 26, 19,219,176,168,203,213, 66, 97,233,183, 3, 4,130,148,
+ 8,202, 34, 73,131, 40, 8,233, 25, 83, 68,202,116, 96, 96,147,199, 76,239, 75, 42,138,234,140,203,117,203,234,106,203,183,193,
+ 70,155,226,236, 2,172,201,112,155, 5,174,177, 20, 4,151,122,141,124, 53,126,191, 13,159,145, 34, 95,252,251, 50,171,125,237,
+212, 23, 17,167,146,185,224,149,203,229,126, 37, 4,188,222,163,149,149, 2,195, 84,114,202,223, 53,234, 42,129, 66,229, 25,222,
+ 22, 42, 87,227,247,239,178,184, 93, 84,244,219, 75,125,165,240,147,118, 99,243,215, 75,158, 62, 44,252, 8,181,208, 27,179, 4,
+199, 16,144, 80,137,121,229, 57,163, 92, 10,222,207,112,188,187, 85, 16,176, 70,193,106, 3,169, 21,193,102,248, 48, 84,218, 96,
+158, 3, 89,218, 88, 25,175, 22,144,200, 18,223, 89,146,182, 34, 94,189,190, 47,233, 89,211, 56,193,106,131,202, 85,212,237,230,
+136, 8,202, 97, 31,147,194, 95,253,250, 31, 48,132,136,239,125,242, 9,106,231, 40,108,166, 31,144, 57,106,120,185,124,230,105,
+166, 73, 15,199,153,250,217,211,184,127,242, 36,200, 10, 20,241,153, 32, 48,135,140,144,128,167,126, 66, 63, 69,196,172, 48, 5,
+226, 75, 8, 8,164,200,248,220, 20,144,114,196,174,219,209,196, 33, 69,134,125,113,214,131, 82,229,189, 34,129, 89, 96,213, 50,
+169,178,115,166,238, 58,134, 64,113,176, 51,225, 86,235,134, 70,237, 77, 83,149, 75, 38,132,136,166,105,137,219,158,104, 10,144,
+ 82,194,110,215, 18, 89, 45,210,255, 70, 42,242, 26, 15, 15, 31,144, 18, 5,186,104,173, 73,253,157, 41,154,121, 24,122, 56,103,
+137, 55, 48,205,216,117, 29, 98,138,208, 90,161, 63,157,177,219,237,145,216,250, 69,205, 26,141,194,169, 81,162,245,128, 96, 20,
+108,206, 20,229,154,115,130,143,137, 38, 78,139, 40,122, 35,250, 93, 84,230, 90, 75,220,223,221, 97,154,102,236,246, 29,137, 37,
+ 5,120,103, 14,102,201, 7, 12,227,132,174,219,163,235,118,220, 52, 37,190,188, 53,199,171,106,134, 79,145,120, 77,107, 67, 98,
+111,108,195,114,104,106,162,148,226, 73,129, 33,119,147,214,208, 90,150,181, 81, 96,189,195,114,198, 8, 62,179,159, 89, 67,147,
+216,120,199, 83, 57,179,190,219,242,189, 74,105, 69, 94, 57,240,215, 35,244, 91,235,188,103,255,219,149,150,166,124,141, 13, 33,
+117,189,212,243,255,143, 75,189,100,160,203, 77,167,126,251, 82, 95,254, 34,153,232,135,189,134, 99,174, 3, 10,201,139,246,226,
+151, 92, 54,176,114,221,121,243,221,243,124, 87,191,100, 78,111,139, 7, 41,202, 14, 30,101, 23, 72,163,213,148, 54,120, 81,254,
+149, 18, 61,140,146,173,120, 82,105, 88,109,225,172,131, 22,146,236, 27,124,137,198, 76,221,119,228,202, 63,196,192, 21,160, 6,
+132, 70,130,196, 28,129, 33, 37,248,188,170, 23,165, 16,208, 60,122,161,127,200,210,165,199, 13, 24, 4,200, 75, 64, 41,156, 85,
+104,173,194,161, 54,232,156,130, 83, 18, 90, 82, 49,177,208,142,100, 94,178,188, 41,215,189, 50, 18,141, 1, 14,117,133, 87,187,
+ 14, 31,237, 26,124,114,183, 67, 91, 87,152,231, 25,255,244,197,239,241,229, 87, 15,240, 81, 1,153, 44, 54, 66,241,212,133, 15,
+252, 0,129,168, 20,162, 52,200,124,169,231, 34,136,225,157,122,140, 69, 36, 39,165, 66, 66, 34, 49,157,192, 70, 23,177,201,183,
+221, 4,220,139,237,186, 73, 92,174,115,150, 93,148,100,177, 32,242, 18,250,144, 47, 24,240,203, 72,249, 98,252, 46,183, 2, 73,
+121, 81,249, 74,177, 6, 3,229,141, 0, 51,231, 75, 63,189, 96, 22,186,100,154, 28,164,216,248,231,175,212,253,219, 14,122,179,
+ 74,219,238,199,183,175,225, 54, 38,150, 15,146, 44, 94,180,168,221,154,122,109, 87, 33, 23, 56,201, 77,250,215,229,122,106,205,
+170,222, 10,244,150, 75, 61,139,205, 74,160,208, 44,215,175,145, 56,226, 5, 0, 66,240,171, 95, 54, 6,236,219,174, 76,201,180,
+214, 24,198, 17,144, 2,211, 60, 65, 73,133,211,233, 12,163, 13,114, 76, 72, 62,150, 49,237,146,129,110, 43,199,192, 19,194, 36,
+ 87,206, 34, 38,224,120, 58, 35,114,226,151,144,132, 35, 61,245, 39, 12,211, 0, 3,133,156, 13, 30, 67,196,239,222, 63,225,139,
+ 47,190,132,146, 26,245,126,135,144, 83, 25,191,135, 20,185,243,142,165, 83,143, 33, 2, 66, 81, 49,157,232,179, 28, 82,198,232,
+ 19, 70, 31,241,112,234, 17, 32,209,251,128, 40, 36, 66,196, 70,103,177, 21,115, 38,152,138,162,144,181, 49,252,203,150,226,215,
+ 88, 77,250, 1,182,178, 57,103,105,109,193,249, 95,222,207, 48, 70,211,200,124,211,245,147, 62,193, 34, 49,147, 62, 38,192,104,
+141, 97, 24, 48, 14, 61,170,170, 34, 49, 30,119,183,198, 24, 8, 41, 17,194,204, 9,105,245, 26, 25, 27,233,191, 63, 60, 29, 17,
+ 83, 66,215,181, 16, 12,142, 89, 38, 36,109,219,210,115,176,232, 28, 98, 66,140, 25,206, 85,124,190, 17,203,160,170, 42,204,211,
+132,110,215,150,116,194, 16, 2,180, 86,112,117,131,113,156, 86,174, 67,230, 73,217,226,247, 6,177,232,199,137,172,101, 77, 93,
+ 65,107,137,221,190,197, 56,244,212,177,103,148,236,128,148, 50,166, 97, 6, 98,198,221,221, 1,206, 82, 17,210,117, 29,249,214,
+ 57, 56,200,213, 22,149,171, 8,224, 99, 45, 92, 85, 81, 55,206,185, 22, 25,180,143, 95,200,134,139,188, 43,250, 25, 70, 25, 42,
+ 66,133,100,110,254,138,162, 93,124,224,165, 65, 72,151, 11, 53,154,146,138,103, 9,109, 43, 2,123, 61,251,178, 88,163,125,178,
+ 88, 34, 86,215,140,215,197,189, 67,150, 65,117, 49, 57, 94,198,235,223,117, 46,108, 27, 87, 85, 25,247, 23,165, 11,248, 3,238,
+115, 81,246, 44,106,163, 20,150, 55, 23,252,101,148,112,113,166,175,152,213,213, 19, 44, 75, 59,183, 12, 76,228,154,248,193,226,
+157,151,217, 56,226, 42, 97,103,201, 99,191,232,208,203, 56,246,226, 15,150,241,139,209,244,112, 28,238,238,241,234,245, 71,184,
+219, 29,176,171, 27,242, 41,198, 88,194, 20, 22,191,186, 79,153, 19,205,200, 47, 40,149,162,189, 77, 2,121, 88, 83, 66, 20,128,
+144,186, 40,235,151,213,194, 22,179,179,248, 19, 87,254, 79,134, 18, 20,176, 82, 59,141,214,105,116,149, 68,231,168, 83, 55,218,
+172,191, 63, 3, 74, 40, 6,228, 72, 84, 70,163,177, 10,251,166,198,171, 67,135,251,125,139,215,187, 6,187,198, 65, 72,141, 47,
+126,251, 37,126,243,247, 95,160,159, 51, 50, 52, 40, 44,150,188,186, 52, 98,165, 3, 61, 74,133,164, 12,146,178,200, 82,151,203,
+154,198,123,169,188,103, 75, 33, 87, 50,191, 11, 44,114,107, 1, 91, 61,210, 37,156,135,127,222, 11, 13,169, 48, 14,182, 29,100,
+209,163, 44, 23, 80,122, 38, 26,187,181, 83,151,155,157,247, 5,177, 17, 40, 43,148, 82, 92,148,240,160, 37,210,117, 83,132, 46,
+132,167,171,238, 55,165,116,161,152, 95,104, 90,242, 5, 62,194,119, 17,226, 50, 86,113, 77, 78,249, 91, 59,242, 91,193, 73,223,
+138,134, 45, 66,214,213,162,150, 83, 42,174, 2,177,245,220,243,216, 83, 44,136,204, 50, 73, 88,121,216,105,233, 68, 5, 39,160,
+165,136,186,170, 54, 63, 7,134,182, 44, 17,197,138,172, 75,211, 98,175, 90, 28, 1,156,200,101,173,225,189, 49, 97,139,141,177,
+ 80,146,138, 6,138,203,164,241,170,171, 29,164,162,209,254,200,144, 25,163, 12,127,127,228, 50, 25, 67,194,111,191,252, 6, 95,
+191,127, 79,246,180,156,201,123,157, 51, 60, 63,183,212,205,210, 69, 55,135,132, 24,129, 57, 68,140, 83,192,105,152,240,240,116,
+198,105, 10, 72, 82,195,214, 13,166, 20, 49,251, 84,214,103,244, 51,143, 37,165, 79,112,138,162, 18,180, 3, 29,199, 17, 85,237,
+160, 13,121,227, 23, 69,246, 18,210, 82, 85,174, 48,221,105,172, 46, 49,141, 3,234,170, 70, 12, 9,193,135,178,243, 30,134,158,
+ 33, 54, 36, 50, 28,134,145,227,150, 13,166,105,162, 12,116,182,221,213,117,197,182, 85, 26,179,211, 94, 63,227,241,241, 4, 1,
+129,186,233, 32,164,198,249,212, 35,197,128,195,221,190,116,218, 66,208,251, 93,213, 53,198, 97,128, 81,154,193,142,146,129, 45,
+243,186,178,148, 18, 57,145, 46,165,174,171,178,254,162,221,124, 75, 81,211,140,107,189, 40,114,229,229,121, 61,142, 51,164, 2,
+218,174,161,117, 68, 85, 33, 69,176, 87,158,121, 9, 73, 32,249, 4, 63,123,156, 78, 39,156, 78, 39, 28,143, 39,122, 54,148, 70,
+202, 18, 31, 62,188,163, 84,183, 72,127,167,177, 6,231,190, 71,202,137,158, 75, 94,113, 6, 62,191, 51,114, 9,225,145, 57,211,
+180, 38,131, 34, 98, 57,141, 47,229, 84,246,214,235,246, 79, 92, 76, 37, 23, 96,204, 66,146, 92, 57, 28, 9,215,145,168, 91, 49,
+ 44,174,224, 93, 37, 5, 15,249, 98,226,184,109, 92,174,207,141,107, 69,252,246, 60, 88,192, 87, 26,101,232, 42,110,192,103,150,
+151,161,174,188,223,137, 68, 34, 5, 32,178, 17,229,108, 72,112, 34,174, 24, 77,185,233, 68, 69,206, 27, 94,123, 44,111, 26,141,
+ 10,175,201,111,185,236, 90, 22,149,125,225,223,230,117,255, 46,151,216, 22,129, 50,117, 88, 20,170,197,131,156,105,231, 68, 94,
+195,197, 82,172,209,181, 7,220,239,239,113,191,191, 67,211,118,244,117, 67,128,159,122, 66, 93,198, 4, 21, 19,114,204,136,136,
+164,104, 7, 71,253, 9, 89,118,129, 89, 0, 30, 9, 62, 39,100,169, 11, 20,101,233, 72, 83, 94,216, 99,114,181,182,101,148,196,
+ 31,178,180,173,177,123, 42, 75, 24, 33,161, 51,237,247, 37, 50,148,204,176,198, 32, 70,210, 36,100,153, 25, 81,155, 80, 89,137,
+198, 57,180,174,197,126, 95, 99,223, 25,220, 53, 2, 74, 25,252,195, 87, 61,126,253, 15, 95,225,233,228, 1,101,139,157, 14, 9,
+ 80,138,118,200, 73, 72,138,129,213, 22, 66, 57, 14,208, 73,208,165,168, 90,184,254,138,137,115, 96, 76, 46,231, 44,151,240,149,
+133,229, 79, 69,195, 66,118,200, 34,110, 84,161, 91,245,255,178, 66, 73,235,120,107,147, 88,135,173, 0,237, 10,209, 40,213,198,
+231,158,101,169, 60, 87,236, 98,134,144,137,158,185,188,142,124,158,107,226,151, 15, 84, 90, 6, 41,165,170,190, 84,183,174,148,
+181,188,176,207,151,108,229,165, 86, 92,198,239,226,182, 63,253,242, 66,222,216,229,228,183,119,225, 47,209,227,110,142,223,183,
+ 89,233,229,243,199,186,151, 76,137,135, 5,170,129,117,210, 32, 32, 33,216, 90, 89, 58,173,226,114,208, 12, 69,162,207,168,171,
+ 42,120, 31, 33,242,140,182, 85, 8,145,190, 90,101, 12,132,146, 24,189,199, 20, 60,116,237,160,173, 70,109, 15, 56,227, 1, 49,
+120, 68,254, 18, 92, 0, 0, 32, 0, 73, 68, 65, 84, 66, 48, 51,134, 53,139, 12,104, 81,208,179,198,210, 84, 73,128, 18, 13, 53,
+ 11,187,194, 28, 33, 50, 80,155, 10, 41, 37,188,249,232, 13,222,190,123, 7,127,156, 16,165,193,172, 45,254,229,193,227,183,111,
+127,135,157, 85,104,154, 10, 90,128,226,139, 53,141,250,125,140,240, 33,225,228, 51,250,113,130, 20, 10, 77,211,225, 20,103,228,
+170,166, 14,207, 26,156,134, 17,211,236,161,141, 70, 76, 64,229, 28,121,185, 19, 93,110, 33, 4, 42,244, 35,125,118,149,162,174,
+209,213,182,120,248, 21,243,216,133, 32, 18,223, 60,122, 82,182, 59,135,190, 63, 67, 9, 13, 31, 3,250,126,196, 60,123,104,109,
+ 48, 78, 3, 42, 87,161,237,106,244,125, 79, 90,153,170, 33, 97,170, 15, 80, 82, 99,232,143, 72, 29,117,224,203,132,201,251, 64,
+ 33, 82, 49, 66, 10,178, 27,126,249,245, 59, 64, 74, 28, 79, 39,104, 99,208,237, 90,156,207, 71,244,195, 72, 19,145,202,225,124,
+ 58,113,183,222, 1, 73,176, 47,190,167,244, 70,165, 80, 85, 6, 62, 16,124,168, 63,159,113,183,223, 99, 24, 38,212, 85,133,166,
+105,248, 9,154, 48,246, 3,118,109,135, 56, 79,240,222, 83,138,200, 50,161, 74,121, 21,211,242,243,252,248,212,195,186, 26,126,
+158,104,186,208,214,168,155, 6, 31, 62, 60, 32,248,196, 77, 20,173, 62, 41, 63, 30,200, 62, 34, 99,194,211,233, 27,188,122,245,
+ 10,109,119,192,211,211, 83, 25,177,183, 66, 65, 65, 66, 27, 5,169,232, 94,170, 42, 71, 69,156,143, 8, 37, 26,149,206,186, 24,
+ 51,226,228, 9,199,237, 88, 92, 56,164,162,247,202, 12,198,194,133,170,157, 66,175,214,169,223,102,114,119,115,124,206,217, 3,
+ 25,208, 82,179,195,139, 68,223, 5,164,181, 85,192,167, 77,193,112, 35, 59, 98,105,102, 22,152,205, 34,168,219,158, 9,122, 81,
+236, 45,249,198,207, 15, 18,113, 33,102, 91,143, 64,249,140,216, 86,252,194,155,142,120,213, 5,230, 2, 34,200, 92,241, 62, 75,
+102,147, 43,133,108, 57,252, 47,196, 2, 41, 95,238, 20,202,168, 99,147, 43,203,163, 94,177, 1, 8, 16,215,217, 67, 73,194, 83,
+230,156,105,244,211,237,240,234,238, 21,238, 15,175,209,214, 29,140, 34, 58,214,196,140,244, 8,129,164, 13,162,210, 16, 82, 35,
+ 75, 79,224, 24, 30, 19,105,165,129,196, 44,228, 44,200,187, 13,129,196, 9, 58, 98,243, 61,164,146, 21,176, 38, 46,229,205, 29,
+ 37, 56,180, 64,228, 85, 81,175,148,128, 89,114,213,181,128,179, 10, 86, 47,126,122,135,160, 3, 82, 92,166, 29, 64,237, 20,106,
+103,113,104, 26,220,117, 21,186, 90,160,173, 37,190,122,154,240,215,191,249, 7,252,211,215, 15, 0, 28, 20, 12, 63,148,236, 25,
+102,232, 72, 6,144,132, 66, 18, 26, 89, 82, 72, 70, 81,130,230, 76,162, 27,102,220, 47,237,116, 73, 89,203, 52, 46, 79, 27,144,
+201,114,185, 62,183, 68, 45, 74,207,197, 20,191,226, 96,243,162,131,120, 14, 92,228, 46, 50,223, 12, 11, 16,183, 12,239, 92, 20,
+ 94, 60, 39, 23,228,227,124,165,200, 95, 45, 91,105, 83,223, 62,191,100,243,205, 48,151,242, 33,204,249,217,222,253, 37,133,186,
+184,170,192,183,106,215, 63,180,219,191, 41, 72,205,219, 85, 25,158, 57, 1,138, 95, 65, 94,254,153,109, 32,211, 51,239,221, 38,
+ 91, 90, 73, 34,176, 73,100,116, 77, 67, 83, 28,145,177,107, 26, 40, 33, 49, 7,143,148, 51,180, 54, 16, 16,232,118, 59,136,144,
+ 16,166, 10,201, 75, 74, 63, 75, 25, 70, 41,140,209, 67, 43, 26, 57,143,243, 12, 87,213,152, 38, 18,225, 85, 85,117, 1, 51,105,
+234, 26,231,211, 80,128, 56,174,114,136,137, 82,191,162,212, 24,115,134,171,118,152, 92,141,119, 79, 79, 16, 41, 98,158,158, 80,
+ 87,150, 97, 52,158,186, 65, 73,185,221, 57, 3, 31,169, 26, 15,167, 1,187,195, 1,167,254, 4,203, 86,167,143,222,124,132,199,
+199, 71, 8, 65,161, 77,149,179, 24,199,177, 76,107,172, 49,144, 25,136,222, 67, 8,130, 60, 77,211, 72,138,240, 24,160,164,129,
+207, 17, 90, 74,184,174,197,251,247, 31,144, 17,209,117, 29,218,166, 69,223,159, 49, 14, 51,159, 79, 9,211, 72,177,169,222, 7,
+218,201, 75, 26,185,183, 59, 11, 35, 21,225,164, 51,193,125,168, 8,144, 56, 30, 79,184,187,187,131, 86, 10,206,209, 36,192, 24,
+139, 24, 3,222,188,190,195,249,220, 99,156, 6,196,254,140,221,110,135,195,221, 1,179,247,168,172, 65, 76, 17, 77,219,224,241,
+225, 17,167,211, 9,187,221, 30,199,167, 39,236,186, 22, 79,167, 19, 98,152, 81, 85, 22, 38,145,142,103, 26, 38,138, 58,157, 41,
+219, 61, 42,129,182,171,161,148,196,135,135, 71, 52,181,195,235, 55,247,120,122,124, 66, 96,235, 25,216, 37,163, 89,152, 38, 57,
+105, 76,164,132,111,190,122, 7, 87, 17, 16,231,124,238,225, 92,133,187,187,123,244,253,128,105, 28, 33, 18,107,189, 4, 21, 8,
+ 41,102, 42, 72,132,192,239,166, 47,241,217,103,159,225,241,241, 9, 66,104, 10,110, 25, 70,238,206, 37, 19,236, 42, 8, 72,204,
+ 35,145, 2, 67,138,101, 90,155, 98, 4, 88,120, 25,125, 64, 72,129,131,118,214,194, 93,109,181, 62,130, 18,208, 66, 76,197,135,
+127,113,134, 45,154, 29, 78,193,139,156,234,185, 6,198,208,189, 33,243,186, 2, 72,200,197, 77,179,101,101, 72, 33,159,157, 31,
+219,253,123,105,162, 10,243, 61, 93,172,187,245, 82,171, 3,107,146,204, 31,242,127,139, 71, 56,149, 46,235,114,151,120,121,248,
+164,165, 31,227, 23,159,110,140, 24,183,140,240,203,113,237,242,123, 35, 82, 17,208, 45,164,221,141,255,134, 42,254,156,150, 92,
+ 17, 62,160, 36,139, 83, 44, 32, 36,148,116,232,186, 22,159,126,242, 6,111,238,239,208,214, 13,180, 52, 44, 62, 35, 79, 99,200,
+177, 16,138,178, 16,196, 5,230,181,138,135, 32, 90, 92,230,157, 43, 36, 87,114, 18, 57, 83,156,100,222,192, 0,176, 73,221, 33,
+242, 90,102,176, 71, 42,128,135,188, 89,218, 82, 37,151,120, 7,159,161, 53, 96,173,132,213, 18, 86, 43,180,149, 35,254,244, 28,
+ 48, 7,129,152, 4,180,208, 48,202,160,173, 12,106, 39,112,215, 25,188,234, 52,106,165,240, 56, 78,248,155,127,250, 29,254,250,
+239,254, 9, 71, 40, 84,210, 66,102, 5,176,219, 97,249, 22, 18, 36,162, 32,104, 78,148, 2, 65, 10, 68, 41,217,251,184,170,197,
+133,204, 64,204, 60,198,221,178,203,169, 3, 84, 5,170,194, 36, 56,206, 64, 7,103,119, 39,134, 12, 9,200,194, 36, 95,187,213,
+244, 7,171,187,159, 67, 92,182,224, 33,108, 52, 30, 40, 58,138,114,113,149, 76,119,121,177,255, 23, 69,101, 47, 46,120,240, 91,
+245,235,181,146,126,153, 54,164, 18, 58,115,107,199,118, 27, 32,113,253,253,172,163,125, 60, 91, 99,125, 87,167, 46,110, 8,123,
+150,162, 33, 67,220,102, 53,240, 39,243, 15, 81,216, 11, 78,202, 91,166, 9,137, 97, 38,164,194, 38, 12,113,187,111, 72, 64, 23,
+124,201,169,182,138, 60,208, 41,101, 36,239,161,148,130, 83, 21, 82,140,152,199, 9,109, 83, 35, 14, 25,253,241,132,174,221, 33,
+ 71,178,196, 85, 85,133,105,154,138,170,251,226,125,202, 11,226,147, 4, 84,117, 83,177,199,158,148,173,170,170, 49, 75,139, 73,
+104, 40,109,144,133, 66, 98, 17, 93, 72,134,168,114, 18, 8, 41,194, 85, 21,166, 24, 81, 53, 13,193, 59,164,194,253,225, 30, 49,
+ 68,244,231,115, 57,160,207,231, 19,239,170, 41, 52, 70,179, 35,166,114, 14, 97,158,145, 66,128,177, 26, 66,211,161,110,117,131,
+ 20, 19,186,182,129,200, 25,253,233,132, 20, 2, 38,239, 81, 89, 74, 88,203, 49, 97,191,235, 96, 93,197,176,154, 9, 49,100,124,
+120,122, 64,211, 82,170, 90,211, 52,116,241,131,242,200, 67,240, 23, 63,167,148, 18, 30, 30, 31,208,181, 59,140, 19, 21, 28,174,
+114,120,122,124,192,253,221, 29,154,218, 33,196,136,119,239, 31, 49,142, 35, 50, 18,246,187, 22, 33, 4, 56,199, 90, 6,235,240,
+254,195, 3, 62,251,172,227, 44,246,204, 59,251, 25,167,115, 15, 8,202,146, 80,175,239,145, 56,173,109,158, 61,219, 62, 21,234,
+214, 66,233, 61,198,113,128,214, 13,108,229,144,167, 25,218,104,132, 16, 81,213, 21,162, 15,152,166,137,253,228,170, 80, 62,251,
+126,228,103, 51, 33,132, 30, 49, 36,236,186, 29,105, 55, 60,105, 33,132, 16,176,150,244, 8,167,211,169, 60,147,239,223,191,199,
+126,191,199,185, 31,161,180,129, 4, 21, 61,195, 56,226,120,242,168,157,195,253,221, 29,172,213, 24,231, 25,134,167,122, 57, 69,
+ 32,210,228,176,144, 47, 3,115, 55,202, 52, 79,172, 49,219,124,209, 10, 41, 81,105,162, 17, 26,109, 24, 32, 52, 33,166,120, 1,
+147,108,154, 6,211, 56,144,232, 47, 46, 94,120, 73,121, 84, 49,173,147,104, 6,120, 81,115,180,218,255,178,196,119, 10, 98, 95,
+226, 83, 0,128, 46, 18,215,151,228,185, 89,124,235,161, 42,144, 87,214,118, 94,199,229,164, 0, 38,197, 55,141,251, 82,185, 96,
+111,119, 34,171,173,232,178,250, 17,151, 9, 92, 75,215,184,177, 24,209,232, 99,237, 12,137, 87,189, 76, 19, 52,132,178,184,127,
+245, 17,222,124,252, 41, 42,215,160,171, 44,246,141, 67,173, 8, 79, 59,207, 30, 72,180,111, 73, 41, 81,215, 17, 61, 66, 32,161,
+ 77, 76,203,248, 88, 34, 36, 65, 17,164,130,176,129, 74,202,181, 96, 17, 2, 73, 10,100,149,203,228, 67,172, 11,221,226,157,132,
+164,223, 47, 5, 85, 11, 66, 0, 72, 1, 82,228,178, 75,150, 82,192, 24, 1,163, 5,172, 86,208,138, 46,117,163, 5,180, 50, 20,
+140,145, 51,146, 82,176, 90,163,182, 14,251,186,194,161,145,104,235,140,166,210, 24, 39,129,255,250,197,123,252,229, 95,255, 61,
+190, 60, 37,104, 83,193, 41,205,106,123,137,196,200, 85, 37, 20, 19,227, 36, 29,128,146,254,123, 92, 46,185,141,208,109, 29,211,
+230,117,123,190,161,201,109, 25,105,203, 52,103,177, 83,197,226,243,220,248, 51,243,170, 50,200,215,241,125,207,198,222, 47, 92,
+ 60,203,123, 44,197,102, 58,179, 22,136,249,134,208, 19, 76,157,218,238,185,182,188,118,154, 38,228, 13,111,254,165,130, 98, 3,
+156,217,210,211,175,254,220,183, 41,215,111,117,218,207,252,239,215, 58,149, 27, 23,251,229,133,254, 18, 3,254, 59,148,186,155,
+116,168,103, 83,134,133,128,184,140, 33, 3,117, 99,185, 31,161,148, 64, 93, 57, 82, 77, 67,192,185, 10,195, 56,163,169, 43, 86,
+ 82, 75, 40,109, 48,132, 35,164, 86,176,214,162, 31, 6,232, 24, 97,164,194, 28,105,199,108,180,193, 48,142,232,218, 22,187,221,
+110,221, 61, 79, 83,241,239, 58,107, 88, 84, 22,113, 60, 29,137,163,174, 4,156,115, 80, 86, 33,198, 0,228,132,186, 98, 71, 71,
+ 50,152, 39, 10,114, 81,202,176, 96, 16, 48,174, 42,197, 91,215,117, 56,157,123,238,188, 3,158, 30, 31,225, 39, 34,156,249,201,
+195, 58,131,202, 90,228, 24,161,165, 96, 0, 21, 16,230,169,144, 40, 21, 67,118,180, 49,200,137, 16,168,218, 24,248,121, 34, 17,
+161,100,236, 42,115,219,165, 32,225, 45,249,174, 35, 77, 62,164,129, 20, 6, 67, 63, 51, 67,159, 10,169,190,239, 49, 14, 19,238,
+ 14,123,186, 0,189,199,227,227, 7,188,126,243,138,186,216,144,120,212, 28,153, 19, 0, 24, 45,209,182, 7,244,231, 1, 90, 91,
+ 60, 29, 79,232,186, 22,143,143,143,184,219,239,225,125, 64,211, 52,216,239, 53,132, 56,226,155,111,190,194,231,159,125, 31,125,
+ 63,192, 24,137,105,206,216,239, 90, 12,211,140,156, 87, 61, 77,219,182, 56,247, 71, 0, 21,140,105, 48,244,103,184,202, 65,204,
+228,144,144, 10, 69,229, 47, 68, 44,248,217,251,251, 59, 60, 60, 60,174, 69,225,178, 10, 90,166,176, 73, 96, 26,166, 50,201,115,
+206, 1,115, 96, 40, 15, 61,251,119,119,119, 56,157,206,228, 60, 72, 9,167,211, 9,227, 28, 24,255,107,160,148, 70, 37, 37,246,
+ 31,127, 12, 37, 5,134, 19,129,120,154,166,194,185, 31, 72,139, 48,209,248, 27,155,213, 95, 74,180, 94, 45,235,100,198, 74,107,
+126,230, 98, 14, 16, 81,192, 89, 9,103, 29,198,113,160,216,222, 2, 87,203,108,103, 4,156,213,232,154,123, 12,253, 25,199,211,
+185, 52,121,129,207,201,229,242, 78, 66,148, 80,176, 91,141,192, 75,197,246,197, 25,112, 99,146,167,106,183,170,223,243,133,229,
+ 72, 20,202,153,192,115,223,156, 84,162,140,246,228, 70, 88,176, 0, 38,197,166,139, 66, 78, 23,251,210,231, 35,210,203, 17,126,
+ 81,174, 95, 77, 0,115, 17, 67,109,132, 73, 27,143,114,102, 86,110, 74, 18, 82, 54,112,213, 1, 31,127,242, 99,252,233,191,249,
+ 15,248,243, 95,253,247,248,252,135,127,140,195,225, 21,180, 50, 80, 66, 66,166,132,232, 35, 89, 74,152,151, 30, 34, 71, 54,206,
+148,175,236,163, 71, 12,158,211,123,136,173, 62,230,128,196,197,140,102,155,156, 84, 2, 89, 74, 68, 41, 49, 49, 35, 62, 95,160,
+ 70,175,178,226,133, 96, 69,237,134,130, 39,105,111,110,132, 64,101, 52,246,149,197,161,117,104,172, 64, 99, 20, 26,103,161, 57,
+227,152,186, 98, 9,103, 12,154,198,226,208, 85,120,211,213,184,115, 18, 77,109,112,138, 10,255,245, 95, 30,241,151,127,251,123,
+252,237,151, 39,204,217,194, 10, 13,195,197,131,103, 53, 3, 36,125, 15, 16,146, 32, 51, 66, 33, 40,131, 36,117,153,175, 72,185,
+128, 85,200,126,151,211,218,185,138,141,102, 32, 95,128, 93, 4,115,221, 21,225,124, 88, 13, 75, 34,156, 27,164,185,188,250,210,
+183,246,176,109,234,217,210, 49,223,178, 74, 46,190,255, 45,148,166, 92,122, 57,179, 88, 76,172, 57, 0, 55, 56,142,151, 89,233,
+114, 93,141,108, 58,243,111,227,173,131,247,212,133, 44,117, 33,178,123, 62,134, 47,164, 45, 41,111,119,199,226,187, 9,115,226,
+102,128,196,154,173,188,242,183,111, 81, 30, 55, 89,206,216, 36, 42,190,116,241,243, 23, 85, 90,195, 48, 76, 68, 74,130,127,236,
+247, 29,156,213, 68, 75,227, 92,115,173, 12,170,170,134, 20, 18,206, 57, 28, 79, 39,132, 28, 48,251,153,249,232, 19, 92, 93,195,
+231, 8, 99, 45,192,144,146,115,191,236,121, 27, 86,112, 7,140,227, 64, 40, 89, 41,209,214, 45,238,238,238, 49, 14, 35,124,140,
+ 80, 74,147,240,206, 57,140,195,136, 24, 3,140, 86,232,154, 26, 49, 70, 74, 5, 99,174,129,226, 29,125,240,129, 14,101, 80, 50,
+154,117, 6,200, 9,175, 95,221, 67,230,140,121, 36, 6,252,110,191,195, 60,141, 48,138,131, 86,216,231,127,216,237,160, 36, 69,
+201, 26, 77, 16, 29,145, 65,214, 48, 73, 20, 56,103, 12,221, 13,145,180, 23,137,115,220,231,121,198, 52,207, 20,140,162, 53,137,
+207, 64,130, 58,239, 41,101, 45,103, 96,215,237, 48,207, 30,243, 52,243,101, 68, 54, 60,103, 41,240,133,236,181,116, 33,146,229,
+207, 32,198,136,190,239,241,225,195, 3,172, 37,242, 92, 93,215,168,170, 10, 31, 62, 60, 64, 8, 80,186,217, 68, 98, 61,173, 53,
+ 79,179, 72, 4, 9,182, 44, 46,151, 71,136,212, 97,187,202, 17,225,111,158,160,148,194, 52, 17,175, 30,137,232,130, 31, 62, 60,
+162,174, 27,212, 77, 77,221,184, 82,120,124,122, 34,155, 31, 4,234,170, 66,140,153,197,121,171,126, 5, 28,244, 35, 75, 17, 46,
+138,163,104,158, 3, 14,135, 61, 71,223, 18,207,221, 90,131,195, 97,143,211,249,180,102,199, 51, 91,160,170,200,203, 14, 1,124,
+253,245, 87,168, 44, 65,185,132, 16,232,207, 3,164,214, 48, 90,226,238,238, 30,135,195, 30,198,145,101,208,251, 64,133, 7,127,
+ 22, 67, 76,229,179,159,175,206,155,133,186, 42,121, 34, 37,132,128,230,247,217,114,236,237, 52,141,184,187, 59,160,170, 28, 77,
+164,102,198, 32, 11, 73, 5,231, 38,162,123,171, 31, 75, 91, 29,204, 11,110,151,103,104,232,171,232,214, 98,105, 35,148, 99,186,
+216, 97,111, 3, 88,174,129, 27,148,205,190,249, 6,153,108,180, 8,224,196,118,159,183,246, 61, 23,168,208, 69,105,188,205,147,
+151,203, 78,125,195,128,223,142,251, 5,199,160,138,188, 46,204, 23, 92,225, 34, 90,203, 80,248,244,211,159,226,143,255,228, 87,
+248,147, 63,253,239,240,179, 95,254, 91,124,250,217, 31, 65,219, 3,134, 9, 56,159, 78,152,230, 17,126, 26,145,252,140,196,136,
+ 65, 31, 72,149, 58,251,153,246, 33, 33,148, 16,129, 24, 60, 4,167,173,249,148, 16, 56, 45, 78, 73, 58, 32,150,254, 52, 9,129,
+ 40, 5, 60,239,214,179, 88, 45, 82, 75, 82, 79,209, 13,108,139,146,204,244, 60, 65,248, 89, 45,128, 90,107,236,107, 71,234,119,
+107,208, 57,131,218, 25, 88,165,139, 32,209, 25,139, 93,211,160,107, 12,186, 70,163,179, 18,181,209,232, 61,240,159,191,248,128,
+255,253, 55, 95,226, 95, 39, 11,209,188, 65,156, 5,108, 10,176, 34, 32, 32, 97, 2, 16, 50,129,113,140, 32, 4,110,148,100, 99,
+139,210, 20,224,204,178,118, 93,104,105, 57,130,146,174,174, 30, 50, 18, 2,198, 18, 92,160, 4,233, 16,132,176, 48,166,129,115,
+ 77, 65, 83, 46,112,140,103, 59,102,185, 66,102, 74, 71,143,181,128, 88, 94,131,220,122,210,175,124,221,242,150, 45, 83,228, 34,
+242,195,173, 93,189, 96, 26, 97,217,103, 47, 98,191,231, 43,162, 91, 19,130,148, 50,112,253,191, 99, 11, 81,146, 47, 42,217,111,
+117,218, 47, 23, 13,183, 71,237, 55,161, 51,121,197,220,110,119,210,184,242,200,230,235, 16,153,111,217,229, 47, 88, 77, 41, 36,
+124,240,197,226,216, 52, 53,148,209,133,230,104, 12,229,126, 59,235, 16, 67,196,221,221, 61,142,231, 19,230,228, 89,216,153,160,
+165, 34,187, 90, 83, 35,114, 74,225, 56,207,128,162, 12,131, 69,252, 84, 85, 14, 33,120,236,246, 59,212, 77,141,121,158, 16, 66,
+194,187,119,239,105,132, 92, 85,152, 61,117,196, 74,107,138,210,228, 48,153,113,246,132, 60,102,218, 91, 18,148,188, 54, 79, 51,
+140, 82,208,114,137,255,204,120,243,234, 30,231,227, 17,109, 93,227,248,116,132, 20, 2,109,215, 97, 28, 7,248,121,230,103, 87,
+209,186,206, 16,148,197, 57, 7,173, 36,206,231, 51, 20,239,154,157,181,100, 89, 10, 1, 90, 40, 68, 63, 35,248, 8,164,204,208,
+ 27,138, 94,157,167, 25,109,219, 98,154,105, 2,209,247, 3,219,240,200,163,221,247, 67,177,157,157,207, 61, 34,239,114,105,122,
+148,202, 37, 94, 87, 13, 20,231,111, 47,159,169,186,166, 61,119, 8,164, 10,159,231, 25, 16,244,243,168,156,133,209, 6, 15, 15,
+143,168,170, 10,138, 49,174,228,101, 31, 16, 67, 36,219,155, 64, 81,210, 39, 6,212,144,135,156, 62,139, 85, 85, 97, 28, 72, 56,
+ 88, 87, 13, 82, 4,180,162,130,172,235, 58,248,224, 1, 1,140, 35,217, 26, 83,202,168,107, 98,175,151, 8,209, 98,141, 94,218,
+ 64,254, 12,107, 85, 8,117,125, 63,160,105, 26, 24, 77,207,196, 60, 79, 80,154,114,214,199,113,196, 52,205,104,154, 22,211, 28,
+ 48,140, 35,101, 7,180, 13, 94,191,122, 69, 77,152,159,145,114,132,171, 44, 5,215,176,251, 96,222,116,247,117, 93,193, 90, 90,
+ 17,209,251, 76, 22, 79,107,233,189,202,200, 43,181, 46,165,226, 6, 16, 82, 20, 52,235,221,253, 61,132, 16,152,103,114, 20, 76,
+195,136,174,109,168,136,145, 2,243, 28, 56,169, 79, 82,215,191, 61, 75,132, 88, 45,157, 27,152,204,246,140, 88,126,182, 37,151,
+ 29, 47,103,173,172,150, 54,220, 78,104,147, 16, 20,205,121,113, 40, 60, 7,203,139,141,178,253,150,249, 94, 93,154,149, 54,161,
+ 25,107,190,118, 73,168,219,236, 43,159, 35, 97,177,250,134, 47,178,173,105,116,248,250,254, 83,252,183,255,254,127,192, 47,255,
+248, 87,112,245, 43, 68,105, 49,204, 1,143,143, 39, 28, 79, 61, 98,244,152,231, 1,211,120, 70,140, 51, 98,152, 8,238, 16, 3,
+119,230, 20, 16,144,249, 66,247,209, 35, 49,245, 40,231,140, 57, 39, 68,222,225, 75,161, 86,187,220, 50, 37,144, 10,203,214, 24,
+ 28, 5,187, 22, 47,220, 41,110,183, 9,188, 46, 88, 26, 77, 9, 34,218,213,206,161,171, 12,246, 13,253,251,110, 87,227,126,223,
+ 65, 49, 53,201,104,141,166,118,216, 53, 14,187,206,162,118, 10,214, 40, 76, 73,225,111,254,229, 61,254,242,191,252, 51,126,253,
+246,132,115, 54, 48,166,129, 85, 26, 26,145,226,107,165,132, 23, 10, 1,160,195, 13,130,176,176, 66,194, 67,193, 11,137, 36, 53,
+143,160, 56, 21, 45, 3, 57,201,210,165,167,148, 47, 40,120,139, 64,196, 89,135,202, 90,220, 29, 14,104,155, 14, 77,219, 97,215,
+ 29,112, 56, 28,176,235, 90,180,109, 13,235, 40,115,154,130, 26, 54,227,115,145, 55,200,214,181,203, 78, 27, 1,154,200,151,184,
+225, 91,157,170,188, 64,210, 46, 81, 75,121, 51, 21,184,125, 25,138, 11, 97,140,188,250,109,226,217,165,190,166, 44,173,194,199,
+242, 51,190, 82,234, 63,203, 98, 23,223,238, 75,127,105,151,190,173,200,175,199,233, 23,164,169, 77, 97, 36,197,183, 20, 4,242,
+234, 53,228, 23, 88, 21,235, 64,137,244, 20,203,212,140,230,219,196, 39,175,107, 8,173, 89, 49, 76, 11,251,218,145,245,233,253,
+135, 15,152,194,140, 44, 51,118, 93, 75,222,237, 24, 97,156, 69, 22, 11,162, 85,241,225, 70, 57,220, 33,132,146, 18,118, 58,159,
+161,141,230,215,205,217,210,124, 25,229, 76, 66, 44,197, 69, 63,144,145, 66, 44, 69,247,241,248,196, 28,244, 0,107, 52, 21,196,
+214, 80,177, 46,232,178,121,243,250, 53,188,247, 56, 30,143, 56,159,123,116,109,135,227,211, 19,198, 97, 36,203, 42, 23,221, 49,
+ 6, 4,239,113, 62,157, 33,244,234,102, 81, 76,224, 75, 41, 83,124, 40,107, 14,132, 92, 38, 91,228, 13, 87,108,123, 93,114,193,
+ 1,224,124, 30, 40,100,102, 14,152,103,154, 60, 80, 54,186, 47, 10,243,192,140,250,170,170, 49,142, 19,206,231, 30,231,243, 25,
+ 33, 4,212, 85, 93,118,235,198, 24, 52, 77, 67, 49,179, 44,228, 34,199,143, 40, 23,106,211, 52,133, 43, 96,173, 69,127, 62, 67,
+105,133,182,107, 33, 0, 60, 60, 60, 96,183,219, 1, 16, 60,141, 97,159, 61,235, 28,170,170,198, 48, 76,232,218, 14,179,167, 73,
+194,126,191,199,219,183,239,176,235,106, 46,240,201,219, 63, 77,212, 97, 23,106,158,179,155, 80,166, 75,244,234,242,134,164,196,
+ 12, 12,169, 10,139,127,154, 39, 74,215,155,102,132, 24, 80,215, 13,142,199, 19,217, 43, 3,217,236, 34,107, 45,230,217,227,116,
+234, 17, 98, 64,215, 53, 80, 74, 32,165,128,170,169, 96, 93, 69,140, 17, 31,145, 64,133,138, 54,244, 44, 34,131, 87, 32,148, 73,
+176,236, 75, 9,144,196,230, 53, 14, 77,137,153, 98,180,181, 50,240,222, 99,154, 70, 72, 37,177,235, 90, 14, 2,138,144, 66, 96,
+191,223, 97,156, 38,196, 16, 41,106,152,167, 55, 82,210,251, 33,164, 42,119,230,194,146, 47,194,223,188, 54,128,219, 38,119,235,
+ 91, 23, 55, 86,111,124,169,199, 27,137, 51,107,167, 46,178, 40,172,104,136, 21,189,122,209, 25,240,254,252, 26, 1,190,118, 11,
+185,160,102, 22,158,123,145,143, 45, 23,218, 21,231,246,154,144, 69,204,222, 92,172, 98,153,233,111, 82,208,174,229, 71,159,255,
+ 24, 63,248,236,103, 56, 28,190, 15,101, 14, 56, 15, 17, 15,199, 39,140, 83, 79,221,249, 60, 34,248, 25, 49,121,204,211, 25,243,
+220,211,174, 40, 71,196,180,142,222, 99, 78, 72, 41, 32,164,132, 57,123,142, 28,205, 28,191,154,216,154,166, 86, 86,120,217,233,
+ 42,238, 6,228,230,189, 18, 23, 66,194, 5, 11, 92,104,101,121,237,146, 20,135,199, 88, 41, 81, 59,135,125, 99,113,191,175,241,
+241,171, 3, 94,223,237,224,140, 68, 74, 20,227,216, 52, 21,218,174, 66,215, 89,116,149,131, 85,228,215,253,155,127,253, 10,255,
+219,127,254,123,252,191,111,207, 56, 71, 96,158, 38,132,121, 42,227, 16,231, 28,148,169, 33,149, 99,240, 1,193,123, 18, 4,130,
+ 16,240,172,178, 77, 74,241,222,137,135,240, 73, 80, 98, 85,202, 72,129,199, 83, 87, 69,160, 18, 18, 77,229,240,241,155, 55,104,
+170, 10, 90, 81,247,166, 88,201, 47,144, 96,140, 70,219,214,152,253,136, 97, 60,175, 52,177,197,203,126,117, 65,229,205,165,190,
+160, 87,203, 74, 67, 94,142,166, 87,177,202,117,119,188, 93,174,139,103,129, 65, 91,164,237,114,169,175,200,199,252, 98,167, 94,
+148,253,207, 18, 10,229,230,159,215,163,116,113, 49,114, 23, 87, 1, 13,183,168,112,223,166,118,127, 9,197, 44, 55,252,125, 1,
+241, 98, 33,145,175, 69,123,249,133,221,123,198,133,102,128,188,235,228,235,117,214, 96,127,216, 65, 49, 30, 53,196, 4,173, 12,
+250, 83,143,125,183,195,219,119,111, 49,135, 9, 80,128,182,228,175, 78,222,243,229,234, 48,135,128,105,158,161,150,220,113,173,
+139,146,187,174,107, 12,195, 0, 41, 5, 38,102,142, 67, 8,124,255,251,223,227, 81, 46, 57, 69, 22,192,139,159, 39,132,105, 38,
+ 11,218, 68, 93, 98,142, 9,200,196, 74,175, 42, 11,196,136, 48,123, 52,109,131,251,215,247,164, 90,247, 30,179, 15,240,115,132,
+177, 14,199,227,137,149,203,244,126, 89, 99, 56, 89,204, 35,204,180,231,119, 77, 69,118,169,113, 42, 68, 74, 2,219, 8,182,151,
+133, 18,237, 41,165, 46, 0, 20,242, 66, 83, 87,215, 52, 59, 76, 19,185, 88,164, 36,247, 77, 85,213, 8,145, 46, 40, 26, 47,211,
+212, 34,248, 0, 99, 12,134,158,217,250,108,233,213, 82, 81,148, 43,119,250,117, 77, 43,143,105,158,139,229,201,104,137,166,118,
+ 92,132, 16, 85, 45,240, 74,209, 57,135,121, 30,161,151, 61,127,164, 21,128,247, 51, 9,243, 50, 61,159,227, 52,161, 31, 38, 52,
+236,118,200,153, 86, 23,231,211, 17,135, 67,139,105, 30, 32,181, 68, 85, 87, 28,142,147, 97,140,197, 48, 80,170,223, 60,123,222,
+179,131,137,132,161,216,138, 47,116, 41, 98,117, 89,128, 1, 58,200, 96, 81, 38,239,246, 65,107,133,113, 28, 1,161, 96,152, 13,
+144, 82,130, 84, 10,221,174,133,179,102, 5,144, 9,224, 60, 12,152, 67,160, 34,128, 65, 98, 57,101, 12, 67, 15,100,160,109,107,
+ 34,102,230, 68,212, 80,166, 89, 46,161, 68,130,173,208, 89,100,216,202, 65, 42, 18, 12, 46, 69,155, 15, 1,198, 16,173,110, 41,
+ 90,157, 99,244,238, 28,160,132,100, 81, 29,193,137,150,179, 76,105, 13,163, 77, 9,199, 81, 66,109, 56, 32,242, 98,101,120, 73,
+113,205,151,147,193,109,167,190,152,238, 47,185,221, 98,123,173,111,198,197,249, 57, 96, 38, 95, 38, 90,149, 68,181,109, 45, 33,
+214, 14,125,129,195,108, 3, 85, 10,244,131, 97, 23, 23,126,188,197,243,184,162,192, 8, 54,160, 13,238,238,238,241,147, 31,254,
+ 4, 63,255,233,207,240,163,207,126,140,251,187,143, 49, 79,192, 48, 5, 68, 0,195,120,198, 60,245, 8, 97, 68,240, 35,124,152,
+224,249,130, 31,167, 1, 41,122,210,240,115,244, 95,140, 52, 30, 75, 49, 34,228,136,152, 99,241, 90,103,246, 35, 47,170,200, 37,
+ 67, 30, 66, 34,243,129,150,174,178,188, 69, 17, 16,202, 11,146,157,224, 64,155,237,250, 66, 73,218,165,215, 70, 98,215, 56,124,
+116, 87,227,147, 55,148,186,230,180, 64,206, 30, 74, 10,116,109,141,174,171,177,107, 45,186, 70,192,217, 26, 33, 74,252,230,119,
+ 95,225, 63,253,223,127,139, 95,127,125,194, 57, 25,242,101, 70,170,148,179, 0,148, 81,208, 82,195, 89,135,186,106,208, 54, 13,
+140, 18,252,128, 19,116, 38, 72,141,164, 53, 37,214, 72,122,128,229,162, 45,227,192,138, 5, 33,121,225, 62,200, 25,149,177,120,
+115,255, 10,181,179,200, 41,192, 90, 10,152,216,237, 26,180,141, 67,229, 12,140,150,176, 86, 97,154, 7, 60, 29,159, 54,112, 25,
+129, 91,195,223,173, 72, 46, 3, 23, 10,247,229,146, 20,151,209,233,235,235,202,249, 50, 63,224, 38,210,113,139,179, 68, 97, 68,
+151, 78,159,109,136, 89, 60, 23,220, 45,191, 51,231, 53,150, 49,109, 46, 64, 81, 72,134,184, 0,225,220,180,166,229, 77,138,223,
+141,162,246,187, 4,118,207, 70,241, 88,127, 62,219, 29,251,133,215, 95,108, 83,167,242,139, 23,255,242,249, 93, 56, 11, 88,132,
+169,228,245, 64,195, 89,222,209, 71,120, 31, 33,161,225,135,128,251,221, 1,211, 52, 32,102,202,209,150, 74, 98, 24, 79, 56,116,
+ 59,120, 86,118, 47, 22,165, 20,137, 76, 22, 35,253, 94,193,197, 32,241,230, 53, 59, 47,248, 34, 64,198, 52, 79, 48, 70,179,154,
+154, 29, 15, 41, 82, 42, 89,221, 32, 39, 64, 41, 77,246,174, 68,176, 27,109, 52,134,129, 60,225,198, 26,236,247,123, 98,133,167,
+ 4,101, 52,142,167, 19,148, 50, 56, 62,157,169,235, 7,137,189, 36,125,113,130,188, 44, 81,166, 57,195, 88, 75,133, 69,166, 61,
+251, 50, 62, 93,222,211,162,102,206,224,221,181, 44,187,211,229, 49, 49,166,194, 60, 71,194,156, 50,169,101,154,102, 26,179,130,
+206, 24,234,244,136,119,190,192,142,144, 19,172,177,164,255,225, 46, 61,241,197,167,148,102, 22, 7,217,199,102,239, 73, 36, 40,
+ 73,228,101,172,197, 56,141,168, 42,242,222, 43, 45, 75,218,217,174,219,225,124,238, 33,165, 66,221,212,240,115, 96, 24,206, 64,
+ 58, 34,169, 48,142, 51, 4,232,103, 85, 55, 14,117,109, 33, 36, 8,107,203,246,188,182,233,240,238,253, 7, 56,231, 80,213, 53,
+ 17,223,148,198, 56,142,240,193, 83,152, 13,143,177,169,224, 95,132,231,236, 86, 50,154, 67,130,116,105, 34,115, 78,208, 11,176,
+ 40,103, 66,230,178, 56, 49,196, 64,182, 72,231, 48, 77, 51,206,167, 51,114, 78, 28, 95,187,120,215, 21,133,187,112,193,174,148,
+ 66, 93,215,212,172,112, 58, 92, 74, 1, 49,103,212, 77, 67, 88, 89,165,233,110,148,121, 45, 28,248,189, 18,155,224, 21,122, 70,
+129,121, 34,113,232,174,109,169,144,241, 51, 77,187, 21,133, 26, 81,126,150, 88,215,209,156, 25,144, 22,209,245,146,228,150,113,
+161, 61, 16, 82,188, 44,174,189,250,172,242, 78, 61,150,253,248,179,157, 95, 89,162, 47,144, 25,193,224,138,213,244,190, 36,196,
+136,107, 58, 40, 54,144, 25, 78, 53,226,192, 50, 6, 97,172,216,206,173, 8, 78, 20, 63,159, 92, 77,253, 82, 34, 39,234, 6,181,
+208,184,223,223,225,167, 63,248, 17,126,249,211,159,227, 39, 63,248, 9,222,220,191, 65,101, 42, 72, 0, 62,206, 24,167, 30, 89,
+ 68,196, 24, 48,244,103,218,143,251, 9, 49, 12, 8,243, 80, 66, 9,188, 15, 96, 67, 33,114,242, 72,193,115,194, 18, 41, 30, 99,
+140,200, 16,136, 72, 69,180, 69,227,163,188, 70,124, 10, 65,221,185,148, 69,133, 15,169,152,101, 47,203,135,115,157, 52,139,178,
+ 67,144, 82, 48,226, 85,194, 42,129,198, 72,180, 78, 96,223, 40,220,181,100, 83,163, 72,227,128,218, 25, 28,246, 20,169,186,107,
+ 29,118,181,134,179, 9, 30, 26,127,255,251, 71,252,167,255,235, 55,248,127,254,233, 27,140,170,129,135, 70,140,203,126,159,254,
+188,145,128, 83,196,148,175,140, 70,101, 29,172,164, 14, 68,104,139, 36, 53, 2,128,188,236,211,249,146, 90,196, 65,197,114,181,
+ 68,139,178,182, 32, 75,130,226,116,109,141,174,169, 8, 64, 82, 59,236,118, 13,132, 0,180, 18,156, 34,149, 33, 68,194,174,163,
+241,223,215,223,188, 69, 90, 92, 10,137,198,117,151,173, 97, 90,129, 54,219, 16,160, 11,193,123, 46,228,186,117,212,206,127,110,
+153, 52,108, 98, 68,215,137,209,178, 10, 89, 43,130,180,241,235, 47,112, 29, 48,211,127,185,207, 50, 19,242, 22, 97, 96,222,114,
+ 34, 51,158,177,235,175, 95,219,182, 72, 89, 14,253,197,166, 89, 58,131, 2, 88,186, 97,118, 7,190, 83,176, 39, 54,110,128, 98,
+ 83, 21,155,181,213,178, 10, 16,107,149, 47,243,202,165,190,117,169, 39, 65,207,132,202, 27,244,165, 0, 20, 18,238,246,123,156,
+ 79, 71,254, 51, 26,141,221, 97,111,106,252,248,243,239,227,155,135,175, 16, 36, 89, 81,179,247,164,202, 86, 26,167,126, 96, 42,
+ 35, 29,206,243, 52, 22,192,148, 20, 2, 66,177, 24, 23, 25,198, 26, 42, 26, 34, 65, 80,134,115,143,148,129,186,174, 17, 2,133,
+165,104,173, 49,251,128,211,121, 64, 91,119,232,218, 22,167,243, 25,231,243, 25,198,104,156,207,103,130,162, 4,186,152,238,238,
+247,152,166, 17,243, 56,194, 79, 51,172,177,120,122, 58, 65,102,137, 48,121, 56, 99,105,130, 21, 2,156,179, 80, 82,144, 3,197,
+ 88,204, 19, 77, 21,140,210,136, 33, 34,250,128,182,105, 80,215,180,223,151, 90,195, 53,212,109, 43,166,134,209, 57, 66,151,187,
+ 15,177,236,144,165,210,152,226, 12, 31, 3,172, 35, 52,108,140, 17, 41, 4,136,156,225,167,137,206,159,152, 10,133, 19,130,176,
+182, 33,121, 36,100,190,164, 3,140,182,232,251, 17,187,253, 30,199,211, 35,132, 18, 48,206, 80,250, 29, 76,185,160, 93,229,240,
+225,195, 7,230,161, 43,140,126,130,171, 44, 82,160,200,218,199,167, 35,124,136, 56, 28,238, 32, 69, 70,140, 30,117, 93,177,162,
+ 93,227,155,175, 63,160,235,118,208,154,248, 31,218, 16, 59,227,155,111, 62,224,254,254, 14, 18, 18,117,229, 48,246, 61, 37,191,
+241,115,223, 46, 97, 48,145,126, 85,141,163,176, 27, 77,194,101,197, 65, 64, 49,120,228, 20, 97, 52, 77, 32,180,209, 80,154, 10,
+ 60,169, 21,113,230, 39,138,217, 53,214,160,237, 26, 8,201,241,190, 41, 97,223,117,152,167,137,109,202,137,200,134, 33,208,234,
+100, 14,100, 1, 54, 14, 49, 4,196, 16, 97,173, 70, 22, 68, 76, 84,134,236,205,193,211, 29,160,180,130,173, 12, 65,146, 50,191,
+ 38, 37,214,207, 74,206,200, 49,195,104,138, 30, 86,156,232,104,157, 33,189,149, 72,220,253,103, 84,117,133,204,147, 45,145, 1,
+167, 45,196, 98,107, 99, 33,165, 42,193, 86, 75,177, 30, 33,182,209,176,215,193, 46, 87,232,118, 1,177,189,212, 47,125,111,219,
+221,218, 18, 52, 81, 84,186, 34,221, 76,150, 17, 87,123, 68,185,157,251,111,186, 43,145, 55,162, 60,145, 55,136, 79,177, 65,103,
+230,149, 5,207,223,149,202, 2,119,221, 30, 63,250,236,135,248,229,207,126,129,159,124,254, 67,188,185,127, 77, 42,211, 76, 34,
+169, 37, 62,113,156,103, 76, 51,135, 57,248, 17,126,158,225,195,132, 24,102,120, 63, 35, 38,250,240, 68,239,145,210, 12, 41, 18,
+114,244, 60,138, 79,108, 99, 88,162, 8, 3,143,206,150, 28,224, 92, 4, 80,101,210,176,101,206,131, 70,130,114, 73,252, 18, 75,
+244, 44,113,157,149,226,139, 30,138,118,238,130,162, 23,141, 20,168,141, 68,227, 20,156, 76,208, 50, 66, 33,162,118, 10,251,174,
+194,221,190,198,253,161,193,174,171,209, 52, 14,150,133, 44,255,250,213, 3,254,143,191,250, 53,254,203, 63,252, 14,167, 32,144,
+140, 99,122,146,100,230, 89,134,226, 8, 89,103, 52,165,104, 73, 69, 2, 27, 86,108,219,186, 65, 85, 55,208,198,113,164,100, 94,
+139, 50,254, 41,134, 68,135, 81,233, 22, 54, 30, 55, 45, 5, 14,135, 61, 37, 77, 41,137,221,174, 67, 78,192, 56,244, 56,159, 79,
+232,135, 30,227,120, 70,152, 39, 84,149,197, 28, 2,190,126,251,150,138,201, 69,140, 41,215, 7,122,173, 12, 5,103, 88,231, 21,
+207, 88, 58,116,222,105,202,149, 91, 32,128,219, 57, 4, 23,115, 35,241,204,132, 81,242,147, 55,114,186,197,199,158, 64,214,147,
+117, 62,141,146,201,190, 77,122,187,230, 45,136, 43, 43,220, 75, 80,153,173,253, 46,110, 39,102, 23,144,165,111, 79, 61,124,105,
+183,126,105, 67, 20, 23,157,228, 82,226,228,205,170,224,165, 78, 93,101, 82, 73, 70,174,135, 84,230, 95, 90, 66,114,174,122, 87,
+181,168,235, 22, 90, 43, 88, 9,212,181,196,135,227, 55,136, 34, 33,228, 4, 31, 35, 62,249,248, 99, 2,155, 48, 95, 92,106,194,
+ 77, 43, 41, 8, 1,106,200, 71, 30,137,170, 84,118,235,206, 57,164, 68,156,243,211,233, 8,163, 53, 94,189,126, 77, 74,119, 14,
+ 92,202, 16, 56,157,122,138, 32,173, 27,188,123,247, 14, 82, 73,132,156, 48,205, 19,237,240,173,193,235,215,175,113, 58,158, 48,
+143, 35, 89, 89, 61, 29,238, 70,107,200, 44,248,146,110, 49,249, 0,109, 45,171,175, 35,164,210, 72, 16, 24,231, 0,173, 13,172,
+ 51,180, 66, 66,226,120, 84, 82,244, 75, 37,169, 9,136, 28,126,196, 48,163, 37, 10, 53,196, 64,249, 13,137,166, 18, 11,126, 57,
+120, 95, 46, 26, 37, 37, 32,152, 24,198,207,164,146, 52,229,164,203,131,170,202,182,110, 41, 83, 79,107, 40, 69, 14, 0,235, 28,
+142,167, 39,156,142, 39,120,159,208,182, 7,140,227,196,175, 39, 22,212,234,216,143,112,117, 5, 8, 74, 47, 75, 33, 65,107, 10,
+ 62, 57,157,142,196,231,103, 29,131, 53,142,203,108, 42, 48, 62,124,248,192, 35,240, 10, 33,122, 88, 77, 58,128,243,208, 99,191,
+ 35,161,221,225,176, 71, 63,246, 68,242, 11, 1, 82, 72,210, 93, 64,160, 31, 39, 18, 93, 66,146, 11, 64, 17, 83,192, 88, 3, 63,
+123,154, 30, 70,234,108,181, 38,176,142, 49,134, 72,131, 66,194, 57,110, 70, 36, 96,172,129,181,150,138, 47, 69, 10,243,166,169,
+139,184,111,156, 38, 88, 75, 78, 13, 74,215, 4, 35,131, 3, 54,149, 18,250,126,224, 96, 24, 96,230, 32,160, 24, 72,107, 37, 0,
+ 88,103,121,237,176, 96,142, 29,233, 18,120, 66, 51,142, 35,140,214, 4, 13, 51, 26, 57, 83,160, 14, 5,243, 8,132,121, 70,211,
+212, 48, 70, 97,154,102, 42, 98,165, 90, 87, 89, 41,153,102,238, 37, 0, 0, 32, 0, 73, 68, 65, 84, 95, 76,236,148,184, 94,255,
+221,248,252,111,180, 71,171,165,237,198,165,142, 77,224,133,192,122,112,109,213,239, 55,243,211,115,162,212, 52, 92,138,115,150,
+195, 80, 94, 76,252,150,236,221, 92,130, 85,202,152,117,147, 53,189, 4, 78, 52,182,198, 15, 62,254, 12,191,252,163, 95,224, 23,
+ 63,253, 35,124,242,250, 13, 42,235, 8,127,153, 88,160,199, 23,111, 6,169, 93,251,113,192, 52, 79, 8, 97,198, 56, 13, 8,193,
+ 35, 69,242,132,166, 20,145, 98, 64,138, 51, 82,156, 65,174,108, 26,181, 39,222,179,231,148,232, 34,203,137,232, 70, 41,174,177,
+161, 87,107, 3, 33, 81,170,121, 99, 20,172,225,177, 82,217,255,175,194, 34, 81, 14,110, 66,216,202, 76,198, 47, 37, 18,172, 74,
+216, 55, 22,149,150, 48, 34,225,110,215,224,123,111,238,240,230,174,195,221,190,194,126, 87,161,118, 26,198, 41,132,156,241,175,
+ 95, 61,226,255,252,235, 95,227, 55,255,252, 53, 30, 39,160,207, 10,210, 85,132,177,205, 43,242, 71,243,104,223,106, 77,170,223,
+141,139, 32, 11, 1, 99, 40,192,166,170, 27,212,214, 81,122, 84,138,180,143,228,253, 14, 93,234,116, 48,164, 28, 23,198, 45,114,
+ 38,155,204,235, 87,247, 52,117,224,253,163, 98,129, 9,169, 84, 71,140,243,136, 20, 2,172,113, 56,245, 39,124,243,246,109, 17,
+203, 20,154,211,102,188,187,144,235,150, 74, 54,231,101, 37, 64, 10, 84, 41,214,220,109, 89, 68, 82,184, 45,160,219, 92,231,171,
+ 80,103,163,184,220,254, 44,151,130,116, 41,110, 46,244, 35,203, 90,233, 50,218,245,242, 67,119, 91, 52,250,236,178, 92, 62, 12,
+ 92,180, 92,115,230,165,146, 37,133,240, 90, 59,240, 93,151,250,197, 90,107,195,170,190, 24,217,111,224, 51,223,117,169, 83,199,
+ 17,232, 57,206, 2, 58,211,126, 49, 34,225,174,235,112,111, 43,252,251, 95,254, 27, 84, 74,115,215,157, 48, 12, 71,204,243,128,
+170,169,224, 99,194,253,171,123,204,179,199,241,216, 99, 24, 73, 92, 21, 66,192, 56,244,168, 27, 26,209,122, 86,108, 15,227,132,
+166,109,203,243,208,117, 59,166,193,101,214,105,104,236, 15,123,204,243, 76,194,166, 24,203,133, 68, 86,181, 53,147, 33,229,132,
+126, 24, 0, 33,240,217, 15, 62,199, 55,111,223, 34,250,176, 34, 58,178, 64,240, 1, 74, 40, 72,144,197,115,154, 70,100, 65,145,
+163,222,207, 80,138,184,235,243, 60,195,105, 13,163,137,132, 38, 4, 17, 40,101, 42,122, 76,130, 86, 17,143,132, 70,223,124, 17,
+ 44, 59,210, 20, 41, 45, 78,114, 22,250, 60,205,100,135,243, 36,214,162, 11,129, 1, 84, 75, 44,174, 0,170,138, 70,255, 93,219,
+162,107, 59,248,121, 70, 78, 9,218,104, 76,158, 18,224,250,115,207,214, 47,130, 2, 5, 31, 33,165, 65,240,158, 98, 94,121, 48,
+213, 53, 45, 32, 36,123,219,201,210, 21,124,132,181, 14,206, 58,164,156, 48, 77, 3, 95,148,170,104, 77,104,159,111,152,188, 57,
+193,123, 74,121,107,155, 26,117,221,224, 60,156, 97,180, 36,251,159,146,232,135,190, 88,163,167,113, 66,206,153,196,127, 2, 24,
+ 39, 15,163, 12,230,113, 70, 76, 25,138, 53, 67,100,197,139, 80,154,216,243,206, 57, 12,195,128,170,114, 48,218, 16,183,126, 34,
+ 28,109,215, 53, 24,198,158, 69,133,117,177, 84, 75, 1,216,202,194, 24, 74,248, 35, 93,130, 40,164,206,170,174,144,114,100,158,
+124,128,214, 22,214, 88, 42,112,149, 42,214, 51, 41, 36,172,113,208,154,210,220,192,145,211,198, 40, 72, 65,194, 96,231, 44, 82,
+142,104,234, 10, 34,211, 4, 24, 34,241,235,149, 80, 34,227,227,143, 62,194,227,195, 3, 23,116, 52, 25,167,116, 62, 79, 83,168,
+ 16,200, 90, 12,172,161, 46, 12,202, 90, 86,123,215,169,148,184,113,185,231,252, 66,167, 94, 50,202,153,162,115, 41, 58,202,207,
+ 98,223,196,114, 97,179, 24, 73,222,234, 36,216, 7, 44, 25, 31, 42,229,149, 63,118, 73,123, 19, 91, 21,179,132, 85, 22,175, 15,
+175,240,179,159,252, 17,254,236,231,127,140,239,125,252, 9,154,186, 38,127,120, 92,138, 8, 86,228, 34,113, 36, 30,199, 16,122,
+ 95, 20,162, 62,204, 60,218, 10,165, 90, 77, 57,176,178,157, 46,123, 41, 87,104,200, 98,187,202, 49,240,202, 56, 94,250,153,197,
+ 86,180, 64,151,166,211, 18,181,211,104,106,139,218, 82,181,182,128, 46,144,214,160, 25,177,120,247, 83, 4,162,135, 72, 51, 68,
+158, 97,100, 66,165, 4, 58,167,208, 85, 6,173,213,184,223,183, 56,180, 21, 26, 43, 97, 21, 96, 52, 96, 45,145,154,126,251,187,
+175,241, 87,127,251,143,248,199,223,190,195,209, 11,156,163,192,144, 0, 97, 28,192,163,255,197,162, 69,175, 79,195,240, 4,129,
+170,126,242,211, 10, 73,187, 43, 41, 20,156, 54,168,108,133,218, 57, 56,107, 75,144, 77,185,208,185,216,201, 11,229, 11, 11,190,
+179,194,221,126,199,171, 12,222,177,115,230,243, 52, 78, 28,211, 8, 62,180, 12, 98, 18,120, 60,158, 16, 83, 42, 32,158,156,183,
+225, 8,171, 96,102,221,169,231, 11,191,184,146, 43, 9, 78, 92,196,166,109, 84, 33, 98, 99,239, 90,190,150, 88,119,236, 98, 27,
+129,138, 69,133,187,238,226,159, 67, 92,196,165,106,247, 5,229,250,181, 80,238, 26,162,179,122, 84, 95, 70,192,230,148,191,179,
+ 43,127,137, 78,119, 97, 45,223,190, 31,120,174,224, 23, 27, 97,221, 75, 95, 39,136,132, 44, 51, 77,196,104,159,131,136,136,218,
+ 8,252,244,254, 30,255,227,159,253, 57,190,223, 29,112,124,120,192,169,239,225, 99,132,113, 21,154,170, 65, 8, 36, 34,218,237,
+ 15,120,247,254, 29, 66,164, 24, 81,178,114,241, 37,100,116, 97,170, 91,206,232,150, 74, 21, 75,163, 82,138, 82,203,188,199,126,
+191, 71,211, 52,120,122,120, 98,194, 93, 46, 89,222, 82,146,186, 61, 70, 18,223,197,148, 10, 54,212, 58,135,243,249, 76, 96,156,
+243, 68,132,175, 68,187,204, 5,102,147, 98, 98,209, 93,128,214,130,161, 80,137, 70,239, 74, 33,199, 64, 80,114,126,254,149,208,
+ 52,210,135,162, 11, 20, 18,209,199,197, 55,132,201,123,132,156, 49,251, 72,191, 38,207,132, 60, 81, 46,248, 20,252,102,165, 5,
+104,197,197,190,146,112,206,114,220,169,197,221,221, 61, 2,199,215,182,109,199,254,106,186, 4,230, 48,163,174,106,204,126,198,
+ 48, 12, 24,250, 1,221,142, 56,237, 86, 87,200, 2,152,231,177,156, 73,203,222,190,170, 42,230, 51,144, 18, 30, 28,244,210,118,
+ 29,142,199, 35, 97,120, 99,164,196, 74,109, 32,132,196,233,116,162,196,182,121, 46,103,105,219,237,160, 36,169,212, 37, 4,170,
+202, 81,236, 44, 4,190,249,230, 1,221,174, 35, 44,111, 2, 98, 10,232,118, 59,244, 3, 17,240,172, 49,208,134,172, 94,218, 18,
+156,135,186,106, 13, 41,129, 16,102, 10,195, 9, 84,192, 33,229,226, 63,143, 41,163,114, 53, 30,159,142, 52,166,103,250, 28, 88,
+ 21, 63, 14, 19,164,210,168, 42,218,157, 43, 6,249,196, 24,240,250,205,171, 18,155, 61,242,107, 81, 82,160,237, 26,210,106,144,
+172,155,220, 24, 82,160,109, 42, 42,162,180, 68,244, 1,134,159, 73,107, 52,194, 60, 51,236,135, 18,236,252, 76, 34, 67,107, 8,
+221, 61,244,103,236,239, 14,155, 88,112,202, 78, 48,198, 34,199, 4,163,245,115,134,139, 72, 37, 7,228,230, 25,176,101,121,136,
+ 21,231,174, 42,227,254, 98,187,239, 43, 6,246,197,123,190,116, 9,114,181,189,221,244,218,178,135, 88,224,217,222,158, 15,141,
+ 92,132, 97, 23,157, 4, 46,199,238, 69, 44,151, 5,218,170,198,231,159,126, 31,127,242,243, 95,224,167, 63,248, 49,246,109,199,
+246, 18, 9,177, 80,222,144,139, 98,145, 82,174,232,131,185, 28,160,211, 52, 97,152,122,206, 45,143,108,151,136, 40, 55, 45,177,
+251,128, 28,168,139, 6,101,133,167,232,153, 44, 23, 47, 48,162,203, 43, 85,155,232, 86, 35, 65,177,167, 78, 98,215, 90, 52,149,
+ 66, 91,105, 34,192, 41, 85,108,104, 57, 38, 40, 86,158, 86,214,160,170, 20, 42, 3, 88,153, 96,101,228, 44,244,140, 74,101, 84,
+154,242,208,187,218,162,177, 10, 93,173,208,213, 6,206, 26,248, 24,241,197,111,127,143, 95,255,221, 23,248,237,219, 51,198,168,
+ 48, 37,131,115,200, 24, 83,130,174, 26, 72, 30,177, 19,252, 1, 48, 82,192, 25, 77, 25,241,130,222, 99, 37, 22,157,131,228, 41,
+131, 34,205, 2,231,179, 59,107, 97, 57,191, 56,196, 8, 31, 72,233, 25, 83,216,164,227,145, 16,172,170, 44,249, 50,231,153, 63,
+140,100, 55, 10, 62,176,138, 54, 18,167, 94, 72, 40,101, 32,164,198,241,120,194,236,195,198,234,184,241,144,231, 85,123, 64, 72,
+221,116, 9,109,184, 88,239,136,139,240, 18,228, 75,171,227,245,127,134,192, 5,185, 80, 44,251,236,139, 16,133,124, 85, 0,200,
+239, 28,129, 95, 99,100,113, 69,194,123,214, 5,111,226, 78,183, 23,238, 75, 64,153, 91,150,180,151,104,116, 36,237,200,101,234,
+ 32, 55,159,231,139, 67, 97,241,173,191,240,119, 44,107,137, 40,104,244,170, 22, 2, 34, 34, 42, 5,252,226,205,107,252, 47,255,
+238, 87,248, 65,211,161,127,124,143,132,140,119,231, 30,193, 86, 72,182,198, 52,147, 2,186,109, 91,134, 59, 69,234, 68,145, 56,
+116,131, 14, 85,173, 40,162,216,199,128,170,174, 96,172, 37, 75,169,247,228, 17,151,178,116,183, 77, 91,227,124,238, 73, 15, 3,
+178,107, 45,233,127,103, 30,191,123, 63, 67, 51, 75, 62,248,136,113,156, 81, 85, 36,252, 18, 66,178, 34,123,101, 33,208,103,157,
+108, 74, 11, 21, 47, 33, 35, 36, 74,118, 91, 96, 68, 49, 82, 58, 35, 32,225, 35,101,136,103, 8,234,148,133,128,143, 25,211, 28,
+248,151,135, 79, 9,222,167,146, 60, 70,133,180,162,169,128,148, 64, 78, 48,122,229,129, 40, 41,160, 52, 37,175,165, 20,209,214,
+ 21, 2,139,183, 40,188,136,248,231, 77,221, 64,105, 77,161, 47, 70,109,194, 83, 80, 10, 33,193, 9,106,222, 71,180, 93,139,105,
+ 28,232,236, 82, 36,240,154,103,234,138,173, 35, 97,162, 99,232, 76, 74, 96, 13,131, 47, 35,237,229,189, 42,206, 39, 0,146,153,
+ 25, 66,208,251,125,216,239,232,156, 96, 88, 78,140, 9, 93,183,131,210, 10,111,223, 61, 82,148,171,159,161,141,130,210,138,173,
+119, 61,139,197, 18,180, 81, 48, 86, 65, 25, 18,188, 9,145, 97,157,197, 60,211,206, 95, 41,192, 57,202, 77, 31,134, 17,135, 3,
+113,236,233, 89, 38, 32,142,171,106, 60, 60, 30,225,170,138,237,133, 30,195, 48,195,251, 0,205,208, 36,201, 13,141,117, 22, 90,
+ 41,104,165,105, 13,146,200,187, 30, 35,121,203, 23,242,179, 53, 26, 82, 72,244,253,153,166, 12, 28, 7,188,116,213,203, 88,127,
+158,105,204, 79, 60,124,129, 48,123, 46,238, 73,171,112,238,123,156, 78,103,244,195,128,113,156,224,125,128, 53, 22, 85, 69,174,
+132, 24,226,198,198,154,110,126,182, 47,197,194,130, 19, 17,101, 65,212, 2, 2,250, 91,128,145, 23,130,165, 91, 4,171,109, 56,
+196,198, 15,179, 42,231,243,213, 82,239,154, 76,119,145,188, 37, 10, 46, 80, 73,129,125,183,199, 79,127,244, 19,252,232,179, 31,
+224,213,254, 64,172, 93,193,204,224,180, 96, 88, 57,229, 89,172,137, 88,145,185,228, 18,128, 85, 64, 99, 5, 78,125,192, 20, 82,
+ 73,220, 41, 66, 42,126,152,114,138, 64, 74,136, 50, 67, 40, 64,164, 72, 40,218,204, 40,209,156, 11, 63, 59, 47,227,222, 13,173,
+ 75,137,140,202, 72,116,149,198,174, 54,168,173,130,210, 25, 49, 0,201, 10, 52, 86,163,210, 2,143,199, 1, 33, 36, 32, 73,216,
+ 74,161,118, 10,141,171, 80,201, 12,153, 35, 12, 50, 42, 37,208, 90,137,187,182,194,199,119, 29, 94,223,181,184,223, 85,184,223,
+ 89,212,149,134,143, 30, 95,125,245, 30,255,242,187,175,113, 26, 2,178,208,200, 34, 33, 35,174, 97, 55,108,138,166, 14,156, 18,
+213, 12,143,221,151,159,167,224,184, 81,177,233,209, 68, 78,229,151, 4, 95,238, 85, 3, 35, 21, 43, 51, 19, 30, 78, 39,200,172,
+ 72, 24,152,137,189, 45,153,212, 21,145, 17, 83,132, 49, 10,198, 88,246,197,178, 42,213,104,132,232,161,132, 70,244, 9,202, 1,
+ 90, 91, 8, 49, 21,165,248,122, 81,173, 19,134,133, 75,183,144,230, 98, 94,215, 53,183,147, 78, 55,217,230, 91,115,248, 69, 75,
+ 44, 46, 82,151,202, 88,158,253,177, 82,138, 77, 78,208, 18, 78,147, 54, 94,218,141,255,253,194,222, 22, 81, 68, 1, 57,111,146,
+ 9,111, 23, 1,215,175,225,219, 66, 91,174,119,229,215,151,250, 5, 70, 50, 95,126,203,151, 41,137,151,159, 93, 37,100,201, 39,
+184,197,143,223,154,236,151,194, 71,138, 4,131,136, 63,253,228, 83,252,175,255,225, 63,162,139, 1, 15, 95,253, 43,101, 6, 76,
+ 61,238,118, 13, 30,143, 3,166, 12,178,148,165,136, 70, 41,192, 39,228,192, 23, 49, 40, 36, 5, 0,195, 70,248,245,104, 67, 78,
+ 13,165, 16,153, 21,190,213,235, 88,107, 32,165, 46,186, 10,163, 13,175,104,168, 96, 23, 32, 14,253,233,116, 66, 85,215, 56,157,
+ 6,228,148,217, 14, 23,208,184, 10,231,225, 76, 90,146,197,123, 28, 98, 33,123,137,148, 32,211, 42, 16, 94,172, 71,144, 9, 66,
+248,205, 27,235,145, 69,102,253, 13,219,174, 22,158,195, 38,119, 64, 75, 10, 97, 90, 70,144,153,125,207, 82,242,122,128, 32,240,
+ 28,224, 34, 56, 40, 74, 97,191,223,195,191,251, 6, 66,146,162,125, 24,103, 72,173,161,165,130,201,192, 20,136,159, 33, 20, 89,
+253,132,148, 56,159, 7,212,117, 3,248, 92,166, 32, 66,144,181,234,233,241,145,114,219, 53,237,156,253,236,105,109,160, 37, 62,
+114,175, 49,142, 19,178, 33,113,111,219,182,248,240,248, 1,119,119, 7,218,135,123, 15,169, 20, 71,149,102, 88,171, 49,140, 39,
+254,220,107, 30,223, 83, 1,100,180,195,152, 6,132, 57, 32,134,128,174,235,240,250,213, 43,252,254,203,183, 37,223,125,158, 39,
+ 10,255,217,237,209,182, 13,158, 30,159,160, 37,224, 67,130,240,130, 93, 4,160,203,127,177, 33,242,211,172, 25,177,235,231,128,
+119, 31,222,227,205, 71, 31,227,233,120,198, 48, 78,168,234,154,198,207,218,224,241,233,136,182,109, 81, 53, 53,194,113,192, 56,
+142,152,231,145, 51,237, 37,180, 84, 56, 31,123, 56,103,225,156,130,148, 30, 66,212, 92, 36, 80, 32,145,176, 18, 41, 8,206, 32,
+176,216,237,118, 23,250, 23, 41, 5,180,100, 78,130,146,200, 12, 96,138,222,163,114,142, 68,112, 49, 98,158, 35,134,225, 17, 93,
+183,199,253,171, 26,253,208, 83, 81, 58, 5,140,195,128,200,223,111,211,212, 56,247,253,115,122,228,245, 25,144,210, 5,125,110,
+253,236,211, 51,164, 47, 69, 66,223, 29,158,113,203, 39, 43,176, 13,135, 95, 85,180,219,242, 66,176,183,245,166,159,118, 57,172,
+181,130, 86, 2,175,186, 3,254,228,231,191,196,231,159,126,142, 93,219,193,176,175, 93,240, 1,180,101,114, 47,202, 66, 26, 67,
+ 8, 68, 14,130, 22, 57, 66, 33, 81, 71,108, 52, 70, 63, 16, 20, 38,173,129, 50, 37,112,132,199,225, 49, 9, 86, 47,242, 5,195,
+225, 48, 5,227, 90, 18,232, 36,123,204,233,114,119, 74,160,182, 10,109,165,176,171, 36, 42, 39,161,116, 70,142, 64, 8, 9,201,
+ 10,180, 85, 5,171, 50,222, 63, 14,240, 49,192, 79, 9, 86, 42, 72, 35, 81, 87, 6,181,117,232,156,193,161,177, 56,212, 6,251,
+218,225,213,190,194,174, 49,216, 53, 10,149, 17,240,126,192,215,111,223,225,237,135, 19,124, 18,200,210, 64,200, 0, 32, 32,243,
+ 88, 92, 20, 40,208,178,115,150,144,138,108,108, 86, 74,192,251, 50,134,206,172,204,102, 51, 30, 95,161,145, 62, 24, 89, 0, 49,
+195, 74, 9,229,170,114,153,133,144,241,212,247,240, 8, 16, 82, 32,100, 2,206, 10,238,150,230, 48, 99,246, 51,237, 10,185, 67,
+239,186, 22,109,219, 2,239, 31,168,107,225, 73,129, 49,134, 27,128,180,177,129, 45, 34,194,205,184,157,127,101, 42, 37, 46,172,
+111, 23, 10, 80,126,214,100,222,122,171,243,198,109, 32, 94,224,159,111, 34,119,196,102, 95,158,243,179, 17,249,154,230,134,203,
+206, 94,172,147,163,101,164,159,211, 37,115, 65,220, 28, 97,137,139,164,190,111, 75,103,187, 21, 10,243,109,137,110,183,138,158,
+188,121,109, 34,103,222,151, 46,141,216, 37,162,119,123,177,203,144,161, 4, 32,178, 71, 37, 19,254,252, 71, 63,194,255,252,239,
+126, 5,219,247,144, 90,224, 52,246, 8,198, 33,142, 19,238,170, 26, 95,197, 17, 73, 4, 76,115, 68, 72, 1,206,237, 17,252, 4,
+ 85, 50,251, 18,130,159, 73, 68,150, 18,180,181,152,198,137, 2,131, 64,227, 97,231, 28,140,214,176,218,176, 7,157,126,191,203,
+153,198,236, 50, 21, 15,175, 82, 10,167,211, 19,250,126,134,144, 10, 83,240, 16,179,225,145,164,130,204, 1,136,192,216,143, 8,
+ 49,210,254, 52,147,218, 24,156, 89,176, 56, 44, 40,161, 79, 81,131,176, 76, 3, 35, 25, 33, 22,241,108,193,156,242, 5,174,181,
+ 44,217, 21, 34,139,213,201, 83, 50, 18,152,124, 73,240, 60,100,100, 24, 43, 0, 78, 89, 76,153,158, 55,178, 72,129, 82, 36,119,
+ 59, 76,222,147, 64,143,215,129,139,246, 99,246, 51, 4, 95, 38, 49, 70,178,151, 57, 10,138,209, 90, 35,129,198,226, 85,101,209,
+117, 7,124,120,120,143, 73, 1, 2,134,246,232,129,190,143, 97, 24,113, 30, 6, 30,255, 46, 93, 60,217, 4, 79,167, 19,246,251,
+ 29,148, 82,232,251,158,130,121, 98,128, 53, 10,206, 25,248, 8, 60, 61,145,187, 32,166,136,167,227, 19,246,251,123, 60,126,248,
+ 64,144, 27, 87,211,202, 36, 38,188,126,117,192,195,195, 17,206, 89,204, 60, 61,161, 72, 85, 98, 17,244,253, 25, 18, 10,105,138,
+168, 42, 98,118,132, 16, 33, 53, 96,180,165, 29,116, 76,232, 79, 3,190,247,233,247, 32,133,194,239,191,252, 26,143,199, 39,212,
+ 77,135,119, 15,143,240, 49, 99,156, 61, 62,250,232, 53,222,191,251,134,246,242, 74,162,221, 19,235, 32,166,136, 97, 26,161,189,
+132, 49,182, 8,232, 14,135, 61,140, 85,200, 32, 49,164, 16, 26, 22,132,210,141, 42, 33,106, 69, 69,129, 39, 0, 14, 17,247, 72,
+199, 49, 13, 35, 50, 50,234,154,118,235,129, 73,164,117, 93,175, 86, 80,161, 16, 82,198,215,111,223,195,186,138,255,206, 3,114,
+204, 72, 49, 97, 24,134,130,193, 93,232,123,101,253,200,122, 44, 5,113, 1,124,219,250,100,179,192, 38,152, 10, 80, 78,219,191,
+ 88,119,153, 43, 0, 70, 10,249, 12, 47,121,185, 71, 23,171, 95,184,116,191,171,101,235, 86,247, 36,228, 21,214,179, 88,189, 8,
+177, 35,132,192,155,195, 61,254,236,151,255, 13,126,248,253,207,113,215,238,160, 32, 87,248, 13, 50,139, 76,152,106,198,130,131,
+229,146, 79,105,217, 2, 80, 50, 88, 94,108,104, 66, 96,152, 38,248, 64, 42, 83,170,174, 35,217,216,114,164,196,178, 68,185,199,
+106, 81,231,167,124,161,168, 22,200,252,250, 41,200, 65,243, 88,211,106,137,202, 42,212, 78,163,171, 21,218, 90,163,113, 18,214,
+ 8, 24, 3, 40,145, 96,148, 64,237, 44,186,182, 3, 24, 95, 25,124,128, 72, 25, 34, 5,168,156,224,100,134, 85, 25,157, 83,216,
+213, 6,109,173,113,232,232,223,206, 0,209,247,120,120,120,135,135,227, 17, 99,200, 24,163,192,148,128,113, 14, 24,167,128, 97,
+246,232,125,192, 20, 34,164,182,208,218, 66, 73,139,140, 4,107,137,131,109,149,100,232,199,130,165, 85,188, 75,150, 43,159,124,
+227,247,150, 0, 52,255,124,148, 50,128, 80, 72, 89, 98, 14,137, 70,241,229,103, 78,226,151,186,114, 24,250,158, 98, 96,171, 26,
+167,211, 9, 74, 81,120, 71, 85, 85,136, 57, 97,158,103, 24,107,161,180, 70, 72, 1,167,254, 92, 18,206, 22,178, 84,161,185,229,
+109,160, 74,226, 17,147,220,216,178,158,143,167,228, 85,167, 42,110,178,204,197, 11,157, 51,127, 96,214,228,160,242,193, 18,133,
+ 82, 39,111,118,234,107, 81,176, 78, 6,174,247,212,215, 59,117,177,161,233, 93, 59,232,111,121,212,191, 13, 62,179, 29,187, 63,
+ 31,217, 95, 22, 66,139,110, 69,222,232, 6,110,193,159,150,113,160, 18, 17, 78, 36,252,199,159,253, 12,255,211,159,253, 91, 52,
+243,140,225,233, 9, 67, 10, 56, 78, 35,178,116,232,170, 6,253,135,247,216,181, 14, 82,120,104, 36,136, 20,208,180, 21,166,105,
+ 64, 10, 36, 12, 2, 50, 38,239, 11,115, 66, 27,135,224,125,121,143,140,177, 69, 48,164,249,247, 75, 1, 22, 25,129, 18,221, 50,
+ 48,207, 19,229, 46,112, 48, 74, 63, 76,176,174,194, 48,142,144, 66, 99,154, 60,140,182, 8,115,228,181, 30,160,132,132, 51,154,
+138, 26,182,148,146, 47, 92, 66, 75,205,174,144, 12,149, 19,172, 18,176,138, 86,105, 36, 48,205, 48,138, 45,168, 66,194, 41, 5,
+ 39, 37,233, 85,216, 37,160, 1, 24, 1,104, 78, 31, 67,206, 48, 70, 17, 93, 46, 39,238,202,233,255,231,156,225,196,183,181,252,
+146, 74,161, 97,238,125, 63,210,164,193,115,150, 58,161, 82,103, 26, 27, 75,137, 48, 17, 88,138,210,204,168, 11,175,154, 10, 85,
+101,225,163, 71, 78,212, 1,142,227,136, 28,105,180, 28, 66, 64,219,118,196,169,183, 26, 16, 20,254, 2, 36, 22,149,101, 4, 22,
+138,145, 82,158,137,114,214, 81,227, 32, 73,188, 26, 67,198, 48,206, 28,175, 75,107,185,221,254,128,211,241, 9, 82,100,178,110,
+ 41, 1, 99, 53, 98,206, 56, 30,143,168,170, 6,125, 63,208,232, 91,107, 76, 19, 9,237,250,126, 68, 74, 64, 8, 20,121,186,248,
+251,115, 2, 1,108,250,129, 98, 84,103,143,121,246,248,222,167, 31,227,233,244,132, 24, 19,246,135, 3, 38,239, 49,249,153,201,
+160, 1,119,135, 29,134,177, 71,213, 16,188,167, 90,192, 59,146,124,244,203,202,141,146,212, 60,172, 83, 56, 28,118, 20,136, 51,
+145, 62, 33,179,254, 71,107, 77, 28,247, 68,225, 95,195, 48,194, 90, 83, 20,246, 11, 46,153, 72,136,178,252, 29,146, 9,137,153,
+237,220, 0, 21, 7,231,115, 79, 17,190, 49,113, 2,157,227,175, 1,104, 99,138,142,105,205,222,144,151,107,196,101,213,178,209,
+ 26, 73,182,210, 1, 88,136,114,105,173, 50, 55, 7,134, 90, 14, 56, 33, 55, 81,147,156,188,182,228,192,114,133, 73,191,214, 42,
+245,154,243, 94,208,155,114, 81,237,109, 59, 95, 58, 63, 95, 29,238,241,167,191,252, 19,252,224,211,207,209, 86,148,203,124, 1,
+250, 40,136, 82,218,117,151,157,247, 34,106, 75,139,199, 55,208,142,125, 19,170,225,189,135,159, 71,218,109,179,119,146,130,102,
+ 56, 70, 52, 5, 72,228,226,169, 22,136,107, 22,119,185,232,200, 26,166, 4,249,178,173, 18,112, 70,160,118, 26,109,165,202, 46,
+189,182, 10,206,106,152, 37, 62, 85,102, 88, 35,209, 53, 14,119,135, 14, 90,100,204,195, 25,113,246,168,180,130, 85, 2, 90, 2,
+ 86, 75,212, 86,160,113, 10,109,101,176,171, 13,156,165,108,230,243,233,140,211,121,196,232,129, 49, 8,140, 62, 97,242, 9,227,
+ 20, 49, 76, 1,253, 28, 49,250, 4,159, 37,180,117, 48,214,177,208, 40,194,106,141,125, 83, 67,231,140, 48, 17,253,106, 75,233,
+ 19, 25, 5,121,187,116,248, 74, 8,202,159,151,228, 5,151,203,222, 55,211, 72,114,152, 71,132, 24, 72,245, 47, 4,186,166,129,
+179, 6,231,227,145,195, 21,106,250, 64, 24, 69,138,120,107,136,186,228, 3,180,209,208, 70, 34,137,140,199,167, 35,179,211, 11,
+148,152, 45,141,145,125,230,155,139, 16,204, 44,207,155,188,128,109,130, 31, 4, 54,203,117,138,105, 23,155,238,116,137,241,221,
+120,211, 23,208, 76,206,236, 80, 40, 59,173,124,179,219,189,178,119,111, 46,194, 53,135,156,222, 95,254, 32, 47, 95,115, 83, 28,
+172, 34,190,245,245,138, 43,228,227,173,208,154, 91, 23,249, 22, 37, 43,113,201,190,191, 16,157, 94,152,249, 86, 53,124,230, 68,
+170, 92, 80, 18,139, 22, 96, 93, 61,252,127,148,189,105,143,109,219,117,158,247,204,110,181,123,239,170, 58,205,109, 72,145,186,
+164, 72,137, 38, 37, 33,254, 18,219,177, 12, 73, 22, 12,197, 65,128, 32, 65,146, 79, 49, 16, 32,200,255,240,175,115, 62, 57, 8,
+ 98, 39,176,101, 73,142, 76,138,188,247,116, 85,181,187,213,204, 46, 31,198, 92,107,239, 58,205,189, 50,137,131,115,238,105,170,
+219,181,230,152, 99,140,247,125,222,172, 51, 48, 83,165,153,255,242,119,127,194,159,252,252,247,105,199, 17,237, 61,129,204,155,
+253,129, 33,102,218,190,231,225,221,189,116,145, 70,241,248,248, 64,211, 72,110,247,233,124, 46, 59, 67, 35,126, 98,165,201, 74,
+139,213,171,252, 48,218, 72, 28,106, 93, 83,215,245, 37,142, 82, 35, 30,240,217, 99,157, 93,115, 39,150,248,213,227,225, 32, 20,
+ 59, 43,204,249,251,135, 71,198, 81, 24,241, 49,102,180, 50,226, 44, 40,157,155,117, 26, 83,116, 48, 26, 73,226, 90,190,243,108,
+129,206,168,156,138, 13, 84, 83, 59,141, 53, 98,233,211, 69, 79, 35, 86, 84,112, 70, 99,138, 95,223, 26, 65,106, 47,138,245,133,
+125,224, 42,209, 20,132, 24, 10,155, 66,179,217,110,200, 57,115,115,119, 87, 24, 28,107, 71, 34,222,124,231,240,193, 83, 57,193,
+144, 90,103,153,166, 9, 99,197,242, 21,188,103,211,245,140,227,185,228,111, 11, 45,210,207,158,219,219,173, 60, 55, 49, 22,175,
+125, 36, 45,217,230, 37,172,164, 45, 84, 56,165, 33,196, 80,152,245,208,212, 13,195, 48,174,121,241, 49,202,107,176,219,108,201,
+ 36,198,113,164,105, 59,225,216,151,245, 90,140,242,186,182,109,195,110,187, 99, 60,159,136,193,211,246, 45,214, 89,124,144,241,
+253,227,227, 30, 87,213,196,132,196,202,246, 61,243, 56,173,207,204,188,104, 36,148,188,222, 90,233, 53,165,239,116, 58,163,140,
+ 5,165, 56,156,142, 24,171,121,254,252, 5, 15,143, 7,172,115,116,125,203,227,254, 88,120,243, 30, 31, 2,125,223,113, 60,158,
+176,136,102,168,107,154, 75,189, 41, 26, 34, 93,244, 5, 49,200,228,177,237, 90,114,138,156,143,103, 89,227,106,153,194,104,163,
+112, 86,132,139,199,211, 64,140,137,182,233, 8, 81,166, 26,231, 97, 44,196,191, 74,198,245,174, 90, 45,141,179, 23, 97,100, 12,
+ 34, 56, 52,250, 2,251, 25, 70, 89, 49, 69, 31, 8, 33, 17,188, 48,226,175, 9,154, 57, 21, 0, 88,121,222, 83,129, 90, 93, 84,
+242, 18,238,181,172, 95,237, 19,130,220,251, 99,117,165,100, 44,180,250,204, 63,164, 97,228,140,168, 97,211,123, 17,141, 31,116,
+ 23, 23,106, 87,206, 98,234, 39, 94, 14,237,103,187,103,252,236,199, 63,225, 7, 95,126,159,174,106, 46, 7, 78, 33, 48,165,156,
+209,107, 81, 15, 23,117,122, 25, 53,171,226,119, 22,128,224, 18,115, 90,212,164, 42,211, 85,142,193,138, 16,103,217, 37,167,197,
+223,167, 46, 89,218,185, 20, 6, 93,210,143, 84, 25,209, 43,173, 74, 50,154, 8, 86,172,145,157,125,101, 21,181,147,194,237,140,
+198, 26,133,211,154, 74, 57,176,137,168, 0, 2, 74, 37,172,245,220,117, 13,207, 55, 47,121,177,177,124,253,205, 61, 42,103, 25,
+191,215,166,140,225, 43,218,170,162, 41, 74,212,121,158,137,209, 51,249, 76,200,142,152, 33, 17, 73, 73,210,133,134, 57, 50,197,
+196,156, 50,190,140, 14,215, 80, 84,157,139,175,213, 96, 53,132, 40,163,114,209, 53,202,229, 37,165,128,213,245, 21, 5,112,217,
+ 99,199, 34,168, 91, 94,211, 76,107, 52,222, 89,206,117,205,182,235, 4,173,155,164, 35,105, 10,172, 35, 20,159,237,233,116,226,
+ 71, 95,253, 54,183, 55, 91,130,159, 57,143, 35,231, 65, 58, 19, 87, 87, 84,181, 33,107, 9,246,240, 37,222,117, 77, 9,204,203,
+ 14,251,210, 13,231, 84,246,238,165,123,126, 42,142,227,106,132,124,201, 14, 16,203,213,101, 4,175, 11, 49,110,161, 57, 93,190,
+ 31,185,166,177, 92,105, 64,158, 2,147,101, 52,187,236,120,205,147, 81,245,117,135,158,159, 4, 19, 47,221,125, 94,173,116,151,
+ 75, 0, 79, 58,180, 79,229,174,127, 27, 14,118,253,243,204,186,122, 89,158,215,247,179,221,223,223, 54,228,171,232,220, 44, 15,
+ 26, 73,103,178,214,168,152,177,121,121,162, 2, 77,246,252,211, 63,248, 67,254,241,207,126,142,122,120,196, 40,197,155,253, 61,
+131,214, 76, 40,180,169,121,220, 63, 50, 17, 25,114,226,124, 56,241,252,249, 11,222, 28, 30,168,156, 19,104, 75,136, 76, 49,130,
+177,156,167, 9,227,156, 76,150,140,140, 28,131,247, 84,174,146,144,150,105,162,109,107,114, 2,239,103, 82,170,113,181, 16,208,
+172,202,108, 54, 66, 14,203, 57, 18, 99,194, 40,139,247, 17, 91,213,178, 99, 70,175,221,100, 52,162, 46,142, 42, 99,172,162,107,
+ 42, 81, 49, 43,133, 31,207, 56, 35, 0, 16,101,220, 42,142,140, 36, 92,101,113, 78,184, 18, 49, 37,114, 10, 24,173,203,138, 79,
+ 60,210,198, 80,252,196,226,192,145, 24, 88,199, 28, 35,196,136, 9,134,190,223,176,187,217,202,164,202,251,130,102,149,226,105,
+172, 92,118,141,157,201, 33,136,127,124,154,153, 39,177,225,110,182, 29, 62,122,234,186, 89, 59,103,177, 87, 5, 65,230, 22, 54,
+ 7, 74,166, 25, 77, 91, 49,141, 35,211, 60,200,186, 68, 65,156,101, 58, 39, 1, 38,162, 12, 31, 75,225, 62, 30, 78,244,155, 30,
+109, 45, 41, 4, 81,232,151,221,185, 66, 52, 11, 98,229,149,230,167,235, 58,129,164, 24,131,181,154,186,113,156, 79, 35,227, 40,
+140,252, 20, 34,181,171,136, 69, 92,103,173, 37, 76,113, 37, 4,158,207,103,154,182,101,255, 56, 23, 77,147,136,249,250,190,231,
+120, 62,163, 53, 56,167,159,184,132, 98, 12,114, 9, 42,207,142,143,129, 87,175,222,240,139, 95,124,129,179,142,183,111,222,241,
+219, 95,253,144,174,173, 57,157, 7, 97,231,135,204,253,253,129,155,237,150,241,116, 66, 13,153,237,110, 67,215, 54, 84,181,229,
+120, 58, 49,143, 94, 38, 66, 90,190,119,200,154,253,227,190, 92, 42,243,234,198, 64, 65,215, 52,160,228,115,237,251, 6,239, 3,
+ 15, 15, 15,236,110,101,226,161,141, 97, 24, 38,234,186,161,170, 26, 89, 41, 25, 35, 31,143,173, 75, 72, 16, 12, 49, 82,149,162,
+ 45,105,135, 53,211, 48,174, 57,245,185, 88,128,157, 19,235,158,179,118, 77,200,188, 94,115,103,205,154, 47,177, 78,212,175,208,
+ 90,223,178,205,187, 20,113, 93,186,244, 15,186,151, 18, 6,243, 93, 59,248, 39, 64,145,114,128, 44,251,211,109,191,229,199, 63,
+250, 17, 63,248,173,223,146,253, 89,190,236, 63,151, 49,251,226, 25,143,233, 35, 9, 97,235, 78, 61,149, 61,247,149, 80, 47,201,
+ 39,221, 84, 21, 77, 85,203,104,237,186, 91, 90, 80,158,198,160, 48, 69, 12, 37,247,118,249,255,229,109, 25, 40,202,112,168,157,
+116,227,181, 51, 43,101,232, 66, 12, 75,232, 69, 36,163, 53,181,182,212, 90,211, 89, 69,163, 60,207,122,195,207,127,250, 5,255,
+224,239,255, 14,127,239,167, 95,240,253,207,123, 94,222,181,220,109,106,250,214, 21, 66,147, 34,134,192, 52,205,204,147,151, 56,
+192,133,112,166, 52, 33,101,102,159, 8, 49, 10,156,101, 97,144, 23,127,179, 50, 26,227,100,180,102,157, 89, 97, 8, 75,161, 94,
+ 17,189,168, 69,110, 8, 73, 68,114, 38,231, 85, 5,111,173,112,163, 43, 39, 83,137,166, 22,235, 94, 95, 11,252, 70, 23, 18, 84,
+ 85, 85,100, 50, 33, 74, 16,206,225,176,103, 26, 71,218,166,165,109, 26,230,113, 40,176, 13, 71, 83, 59, 54,125, 79,215,212, 88,
+205, 26,139,170,184,160, 93,213, 90,161,243,202,109,207,101,205,162,222, 27, 35,175,122,179,180,136, 31, 47,194, 47,115, 53,170,
+ 90,210,222,242,199,138,226,199,188,159,239,141,205,175,115,205, 63,165, 66,121,106, 93,203, 79,152,238,215,121, 7, 79,178,215,
+191,229,109,253,157,246,229,233,162,180,191,126, 30,212, 39,214, 15, 31,227,186,235,114, 57, 47,155, 39,162, 2,159, 3, 58, 69,
+ 54, 9,254,236,103,191,207,159,255,236, 15,232,207, 19,225, 60,112,156, 70,238,253, 76,172, 28,231, 24,240, 57,128, 81, 28,134,
+ 19,119, 47,158, 97,172,140,108,141,210,236,186, 94, 52, 26, 5,215,234, 42, 87,166, 95,153,105, 30, 11,140, 41,175,130, 55,233,
+100, 22,104, 75,186,140, 25, 75, 81,106,219,174,136, 48, 19, 49, 65, 85, 75,192,200,188, 22, 58,181,230, 86, 27,163,203,249,177,
+ 76,228,100, 34,208, 54, 13,206, 10,198, 88,169, 76, 93, 59,250,174,193, 26, 13, 57,210,212,142,182,177, 52,149,197, 25, 69,142,
+129,202,105,156, 85, 52,141,163,174,229,217,111,172,165,118,142,202, 89,140, 53,104,163,176,149,124,142, 77,219,138,189,201, 79,
+146,127,176,184, 12,202, 26,175,170,196, 63,190,219,116,216,242,123,214, 24, 98, 22,193,105, 86,138,172, 13,174,170, 10, 20, 37,
+ 99,173, 91,207,227, 5,113,171,141, 66, 91,205,105, 56, 1, 89,240,215, 41, 16, 83, 40, 45, 78, 44, 31,155,120,246,181,214,156,
+202, 56, 59, 39,228,140,153, 61,167,243, 32, 22,177,166,149, 93,112,193, 66, 87,117, 77, 76,153,211,233,188,194, 91,154, 69,239,
+224,100, 71,111,173, 41,188, 9,153,162,244,125, 79,211,212, 12,227, 72,215,245,228, 4, 55, 55,183,162,164,207, 25,235,204,106,
+ 45, 91,206,162,229,109, 56,231, 72, 41,172,141,198,233,116, 64,145,216,244, 29, 49, 6,182,155,158,105,138,188,121,243,150,155,
+221, 13,155,190,229,237,155, 55,124,241,217, 75,156, 17, 90,219, 34, 38,155,189,167,219,108, 72,100,206,195, 64,136,126, 21,238,
+118, 93, 43, 74,119,165, 10,216,198,211,182, 29,195,121,162,239, 55, 88,235,104,154, 70, 10,107,142, 76,211, 72,215, 53,220,220,
+244, 82,216,131,164,124,198, 57,112,179,149,208,170, 80,108,134,199,211, 68,202,224, 92, 45, 28,255,162, 93,145,201, 75,192,123,
+177,103,250,217,211, 52,109,105,160,243,170,153, 88, 62,166,235,179,103, 57,127,100,141,148, 63,212,217,148,103,223, 52,182,164,
+180,173,105, 57,165, 43, 71,175,194, 14,197,135, 30,246,133,105, 78, 33,143,125,204, 70,116, 25, 17,170,213,223,190,130,107, 80,
+144,160,182, 53, 95,253,240, 43,190,250,193,111,179,109, 55,235,206, 52,151, 84,163,229,199,154, 76,163, 46,170,162, 69,244,246,
+228,172,188, 58, 7,151, 27,206,242, 57,101, 40,226, 45,177, 81, 41,125, 21,115, 87, 58, 56,173,148, 60,128,106,185,129,167,117,
+127,110,181,236,158,156, 81,212,149,252, 92, 25,133, 53,106, 29, 83, 59, 3,206, 26,172, 21,209,157,252, 59,249, 97, 72, 50,138,
+ 55, 80, 91,104,107,205,166,171,232,155, 10,171,197, 19,111, 84,146,191,107, 52, 42,199,149, 62,229,125,100, 10,137,209, 39, 78,
+163,231,116,246, 12,115, 96,142, 16, 51,248, 8, 83,204,132,172,112,117,131,169,108,217, 93, 42,186,182,166,177,154,241,120, 32,
+133,112, 97,140,103,228, 50, 83, 46,108, 86, 43,156,210, 56,163,169,173,166, 42, 5,221, 57,133,179,242,119,146, 82,140,179,103,
+152, 69,163,176,176,186, 55, 59, 9,128, 56, 28, 14,107, 66, 81,206,226,193, 61, 30, 14,178,211,203,148,236,107,195,102,219,145,
+ 82,226, 55,191,249,102,205, 51,190, 98, 30, 94,141,221, 75, 87,187, 80, 91,243,147,217,251, 90,216,197, 50,116,177,188, 93, 23,
+232, 5, 32,115,217, 41,235,167, 22, 17,117,101,215, 33, 63, 9, 79,200,239, 61, 60,107,152,194, 85,161,126, 95, 92,246,254,152,
+124, 45,242,234,170,149,127, 47, 28,230,227,243, 45,190,179, 32, 63,177,237, 93,107, 94,158,216, 73, 65,125,171, 12,111, 25, 24,
+ 20,178, 95,166,112,190, 19, 45,145, 63,253,217, 47,248,111,254,240,191, 32,221,191,195,251,153,153,196,246,197, 11,142,227, 72,
+ 70, 49,140, 35, 63,250,209,143,185,191,127,195,205,237, 13, 83,144,220, 5, 25, 81, 54,236, 79,103,230, 16,232,182, 91,162,130,
+195,241, 72, 86,114, 1, 92,198,192,193,207, 98,171,180, 86,232, 95,139,101, 84, 43,130,247, 52, 69,132,196,138,216,149, 81,242,
+233,116, 38,134,132, 47,248,209,105,242, 34,194, 42,170,116,173,236,122, 78,144, 83,217,215,138, 23,220, 89, 67, 87, 87,196,224,
+233,154, 86, 10, 65,177,220, 85, 70,211, 86,110, 45,182, 75,251, 99,173,147, 68,194,130,118, 54,229,237, 40,205,250,253,104,156,
+195, 22,194,217, 56, 12,164, 40, 33, 43,222,123,250,174, 99, 26, 71,172,177, 37, 24, 6,166,225, 76,244,179, 92,226,103, 79, 68,
+161, 93,181, 38, 0, 58, 91, 49,207, 50,158,149,100, 58,233,158,231, 73, 70,215, 33, 10,187,126, 9, 78,114,206, 92, 89, 50, 11,
+ 35, 10, 69, 85,215,107, 56, 73, 42, 86, 40, 87, 9, 68,167,174,157, 56, 9,202,197,220, 90, 87, 2, 82, 68, 76,217,247, 61,111,
+223,189, 17, 86,122,185,116, 8,237, 78,216, 34, 41, 73, 39,126,179,219, 48, 7,121, 45, 33,179,223,239,217,108, 37, 23, 62, 4,
+153,204,161,138, 98, 95,201,235, 45, 8,213,150,169,184, 29,118,219, 94,152,244, 90, 46,229,195, 56,150,143, 89,180, 22, 25, 9,
+146,121,245,234, 45,191,247,123,191,199,219,183,111,153,231,192,110,183,145,240,148, 81,178, 46, 66,188,160,204,251,141, 76, 24,
+ 42,231, 4, 97, 59,141,162,222,215,162,166, 95, 38,105,195, 48, 18, 66, 96, 24,166,149,250, 39,174, 12, 83,104,165,170,136,224,
+ 18,125,223, 49,156,135,146, 4,120, 68,107, 83, 86, 36, 18, 25, 60,205,190,100, 16, 8, 39,127,179,118,199,246, 3, 0, 0, 32,
+ 0, 73, 68, 65, 84,233, 75,140,111,189, 2,147, 82, 65, 31, 47,228, 68, 85, 50, 3,188,151,104, 99, 73, 33,188,136, 86,245, 18,
+189,154, 63,174,191,201, 57, 99,106,219,252,203,204,197,138,182, 14, 27,181,190,242,206,242, 94, 44,229, 5,228,161,174,186,121,
+165,213, 7, 69,125,165,168,105,181,172, 24,139, 64,197,226,180,229,139,207,190,228, 39, 95,253,132,187,237,205,138, 62, 76,177,
+228,215,190, 39,226, 81, 92,143, 99,151, 79,180,116,102, 41,173,137,114,226, 93,191,194,138,114,217,165,134,146,159,158,214,110,
+142,146,244, 86, 48,174,229,191,109,177,234,217,133, 96,165,165,120, 59, 35, 5,174,178, 10,187, 8,235, 22, 4,108,217,181,155,
+ 2, 14, 16, 62,188, 46,127, 39, 99,149, 70, 23, 34,219,162,234,139, 33, 50,142, 19,227, 56, 74,104, 66, 74,194, 59, 46,140,227,
+224, 35,115,136,140,179,103,244,137,227, 48,113, 60,143, 82,208, 67, 36,103, 65,193,134,172,240, 33,225, 83,162,170,106,170, 66,
+133,179,214,210,119, 13,206,128, 63,159, 74,103,124,137,139, 21, 40, 92, 44,126,123,189,238, 16,107,103,169,156,150,238,196,136,
+214, 64, 23, 11,210, 28, 34,135,243,200, 84,246,106,117, 83,179,221,246,156,207, 39,206,231,243, 26,159, 89, 57, 43,151,157,242,
+218, 25, 99,176,218,209,118, 13,183,119, 59,198,105,228,111,126,249, 27,124, 72,235,101,237,137,150,125,193,172,230,188, 96,224,
+ 47,176,152,171, 44,227,101,146,162,242,123, 50,142,235,215,254,189, 96,244,203, 0, 64,173, 17,192,215,148,185, 39, 20,167, 53,
+ 51, 94, 61,221, 74,231,111,207, 65, 79, 87, 83,165,139, 66, 62, 61, 21,235, 41,158,216, 59,243,119, 32, 97, 63, 84,208,171, 15,
+ 45,126,234, 90,215,242, 52,249,238,195, 73, 64, 94,119,191, 20,125,133,201,178, 35,174,178,231,143,126,254,115,254,236,103,191,
+207,173,213,188,122,251, 27,166,228, 9, 40,148,171,184,127,124,196,218,138,195,195, 3, 63,252,254,111,225,199,129,103,207, 95,
+112, 26, 70,234,182,103,127, 60,224,170,138,215,239,222,209,223,220, 96,154,154,195, 48,112,158, 70, 41,138,117,181,174, 75,130,
+159, 75,166,117, 42,121,234, 18, 64, 66, 74, 5, 85,154, 46,175, 75,193, 86, 15,227, 12,104,137,203,180,174, 20,125, 41, 24,178,
+143,212,229,224,190,208, 6, 41,250, 33,107, 53,219,190, 43,171,152, 76, 83, 11, 92, 37,198, 64, 83, 88,239,206, 25, 92, 93,173,
+ 17,166, 25, 4,101, 90,104,105, 18, 90,100,217,238, 54, 84,117, 37,226, 81,224,230,246,150,156,132, 70, 55, 20,254, 57, 57,161,
+148,124,110,227,112, 38, 69,137,123, 78, 49,200,199, 20,101,239, 29,114,190, 68, 55, 27,195, 56, 77,164,152, 25,167,105,189,158,
+ 57,231,152,166,113,125, 29,171,166, 34, 36, 41, 8, 77, 43, 94,240,156, 19,117, 93,139, 75, 58,171,245,123,222,251, 80,160, 54,
+117, 17,187,102,234,186,193, 88,203,205,110,203,241,120, 90, 11,161, 40,222, 37,136, 38,149,209,187, 46, 13,135, 56, 14,116, 41,
+100, 51,135,195,145,174,235,176, 70, 9, 28,203, 79, 69, 13,238,139,117,207,112, 60,158,200, 89, 70,217, 62,132,130,222, 53,132,
+ 32,137,116, 41,165, 21, 9,172, 77, 81,191,107,225,235,135,144, 10,231, 95, 94,167,148,147, 96, 93,141,161,105,218,149, 0,151,
+163,236,253,231, 16,160, 20, 78,128,105,156,104,154,122,137, 67, 96,211,111,152,198, 9,173, 5,192,211, 52,205, 90,216, 37,238,
+ 87,224, 54,211, 52,202,219, 80, 2,231, 89, 48,180,117,237,152,231,137,166,170,202, 19,166,169, 42,199, 56,142,132,224,201,200,
+196, 67, 27,187,242,252,115, 89, 91, 44, 14, 5,113, 19, 45,250,174, 75,241, 95,143,188,178,211, 79, 41,173,172,137,143,113, 43,
+ 46, 43,244, 66,164,171, 77,253, 47,223,183, 8, 73,156,159, 45,153,182,242, 2, 94, 19,224,180,214,130, 15, 45,221,243,117, 39,
+191,136,143,150,183,185,102,137, 95,131,103, 10,247,229,238,230,142,159,124,245, 59,188,120,246, 2, 87,242,184, 99, 76, 43, 60,
+102, 9,163, 88, 74,123,138, 97, 29, 65, 92,139,149,214,159,139,255, 56, 47,227,228, 44,133,246,130,207,150,157,108, 8, 98,179,
+ 72, 11, 82, 84, 23, 5, 63, 98,243, 48, 90, 50,205, 85,142,232,156, 10,119, 89, 58,117,163, 51,214, 8, 80,192, 60,153,214, 94,
+194, 68,228, 27, 39,173, 7,182, 94,237, 8,170,120,164, 53, 41,194,236, 51,167,243,196,233, 60,113, 60, 14,204, 62,144, 81, 24,
+ 39,183,215, 16, 2,147, 15, 12,163,103,152, 60,195, 52,115, 56,141,156, 7,207, 28, 18, 10,129, 78,200, 67,171,153, 99,194,135,
+132,171,235,114, 27,148, 48,132, 77, 87, 99,178, 71, 71, 79, 91, 89, 9,192, 40, 17,151,210,132,164, 18, 95,169,101,164, 88, 89,
+154, 74, 83, 87,134,218,137, 64, 68, 62,111,185,149,205, 33,177, 63,157, 57,207,158,144, 34,219,221,134,182,171,121,120,120, 96,
+154, 38,156,147, 7,101,187,217, 8, 42,209,136,223,212, 88,139,181,142,205,182,103,123,179,225,221,253, 3,191,250,213,215,132,
+ 88, 10,233, 74,100,121,223, 39,253,148,121, 32, 20, 49,181, 10,208,158, 40,199, 11, 20,238,178, 99,190, 42,240,107,145, 54, 79,
+ 69,104, 87, 64,135,156,179,124, 77, 47,184,164, 39,233,124,121, 41,238,239,141,186, 63,237, 69,127,154, 99,176, 88,222,244, 21,
+202, 86,125, 42,148,229, 59,212,238, 79,144,182,239,179,160, 87,231,194, 53, 71,255,170,131,215, 87,107,132, 50,245, 16,166, 76,
+196,168, 68, 71,228,143,126,250,187,252,207,255,228,143,201,251, 71,190,126,243, 27, 84,107,139, 23,186,231,120, 58,115,251,252,
+ 57,167,113,100, 60,143,188,184,123,206,233,112, 96,119,123,199, 28,225,111,191,249,134,126,187,163,106,106, 78,211, 68,182,134,
+195, 48, 50,204, 19,177,136,220,198,121,194,186,170, 8,146,116, 1, 22, 57,114, 25,155, 43,181,168,210, 37,172, 67,151, 92,243,
+133,205,157,179,140,142,143,231, 97, 5,203, 24, 99, 25,199,153,174,235,105,138,130, 57,198, 88,158, 75, 85,162,142,129,152, 4,
+198,164, 21,164,200,102,219, 67,166,228,151,203,168,179,223,244, 84,117, 93, 46,174, 45, 33,102,182, 55,183,160, 20,214, 85, 43,
+243,161,109,155,117, 7,234,189,132,195,248, 81, 58,239,113, 30, 47, 96,151,156, 72, 49, 23, 32,147,151, 46,184, 52, 79,169, 76,
+ 35, 19, 10,159, 51, 33,178, 70, 11,167,144,137,197,223, 62,205, 94,208,169, 69,137,190,136,165,146,202, 56,235,164,139,188,210,
+162,248,152, 49,214, 17,202, 84, 77,105,197,118,187, 43,248,218,176,142,125,251, 77,143, 45,162,177,119,239,222,177,217,108, 56,
+157, 78,236,247, 7,172, 21, 53,254,233,116, 20,129, 89, 1,211, 52,149, 0, 94,206,167, 51,227,228,177,149,163,107,106, 92,101,
+ 57, 30,143,244, 93, 87,138,117, 46, 5,218,112, 60, 30,185,189,189,193,207,146,134,105,172, 91, 31, 80, 99,132,105, 96,221, 18,
+ 67,170, 49,218,174,170,119, 31, 34, 41,102,110,159,221, 18,163, 20,249,199,199, 71, 94,190,124, 9, 36,198, 97, 88,117, 95, 41,
+179,174,191, 20, 18,184, 50, 79,243,149, 2, 62,178,219,109, 72, 41,113,127,255,184,198,252, 26,163, 75,162,222, 21, 22, 90,171,
+213,139, 47,107, 76, 4,150, 84,214,189,146,201,238,136, 49, 10,202, 55,103,134, 97, 94, 73,136,203, 52, 56,145, 80, 89,116, 17,
+242,182,106, 81,186,151, 38,212,185,234,234, 28, 74, 43,239, 32,167,247,178, 86,174,234,226,117, 81, 95, 48,196,250,169,207, 69,
+125,152, 49,157, 47,105, 89, 31, 30, 92,139,191,249,189,201,247,226,157, 83,234, 73,188,229, 37, 4, 94,216,192,223,251,226, 11,
+158,221,222,137, 15, 29,201,235,142,197,118,182,224, 65, 99, 94,136,113,241,195,189,230, 34,146, 43, 4,188, 69, 80,124, 73, 62,
+ 45, 86, 40,196,186,226,172,166,169, 28,109,137, 0, 93, 71,107,171,221,206,148,131, 55, 21,148, 45,133, 23,188,228,182,231,226,
+ 99, 47,232,212,210,245,199, 24,241, 62, 49,135,204,236, 51,211, 28,153,198,192, 56, 6,166, 41, 72,134,111,148, 64,139, 41, 38,
+ 6,159, 56,207,145,227,217,115, 56,206,236,143, 51,231, 41, 49, 71, 69, 72,138, 97, 10,236, 79, 19,247,135, 51, 15,135,129,135,
+227,192,227,113,226,241, 56,114, 56, 79,140, 62,144,115, 9, 3, 16, 55,224,250,205, 40,187, 59,179,118, 40, 86, 65,165, 97, 83,
+ 59,158,221,116, 60,187,233,184,217, 84,244,181,128,121,186, 90, 44,121, 77,109,112, 14,180,201, 24,155,169,107, 41,232,173, 83,
+180, 86,130,102, 26, 11,173, 83, 52, 86, 97,149,172, 27,140, 81, 66, 87,202,137,224, 39,185,236, 24, 67,215,182,212,101,239,238,
+156, 91,147,182,172, 53, 37, 90, 51,175,233,121,139,218, 90,152,255, 11, 71, 32, 94,232,113,215,185,244, 87,186, 14,149, 64,167,
+101, 52,175,214,239,187, 15,108,102, 31, 89, 77,235,124,249,241,145,127,242,193,239,229,171, 48,153,107, 29,202,199,160, 76, 31,
+ 3,184,100,226,101, 15,127,229, 9,191, 78,118,187, 30,245, 47, 41,109,239, 95, 28,190,149, 98,247,254,199,176, 8,252,138, 19,
+ 32, 82,126, 86,200,222,182,168, 97,178,202, 2, 9,202,242,189, 82,229,192, 63,252,233, 79,248, 23,127,250,103,124,158, 20, 15,
+239,222,146,157,229, 60,122,154,237,142,183,251, 61,253,102,203,195,187,123, 26, 87,241,163,159,254,148, 73,131,174, 26,148,109,
+248,213, 55,175, 24, 67,102,119,247,156,183,239, 30, 49,214,210,111, 68,232,100,157,163,223,108,164,227,180, 18,210,177,216, 30,
+115,241,205, 11,178,186,132, 94, 88, 75, 68,137, 90, 62, 95,194,145,150,174,254,241,241,192, 52, 78,114,153,172, 29,174,182,220,
+222,221,136,167,121, 24,100,247, 94,220, 46, 49, 73, 78, 54, 40,124, 8, 28,143, 71, 98,233,158,114,230, 73,162,152,177,154,166,
+107,203,229,215,113,123,123, 43, 49,160,203, 89,153, 97,187,217,148,221,118, 42,120, 87,131,202,112,218, 31, 32, 70,210,236, 37,
+ 67, 59, 8, 82,148,156, 9,179, 68,113, 42, 9,168, 32,139, 32,166,164,130, 73,250, 90, 70, 10,109,215,246, 76,211, 76,140,153,
+ 24, 18,227, 44, 35, 89,231, 36,126, 52,149, 81,163,177, 18,210, 20, 67,228,116, 56, 73,247,151, 97, 28,167,114, 86,229,117,218,
+160,148,102, 28, 71, 98, 76, 18, 75, 27, 19,195, 89, 46,102,203,100,111, 28,231, 18,105,171,137, 49, 51,142, 51, 57,101,218,182,
+229,112,216, 99,173,185, 80, 70,115, 17,205, 57,195,233, 52, 10,193, 82,201,120, 60, 37, 73,158, 91, 46,177,214,138, 7, 62, 71,
+ 73, 70, 67,201, 40,123, 24,134, 21,156,178,219,237, 10,138,118, 96,154,102, 66, 76,212,109, 75,221,246, 36, 12,227, 60, 51,142,
+ 51,179,247,108,119, 27, 66,200,188,122,253,170, 92, 10, 89,119,254,187,109, 79,223,117, 52,117,117,101, 45,213,156, 78, 35,231,
+243,196, 60,123,166,105,228,230,118,203,243,231,119, 76,211,200,126,191,199, 90,129,233, 44, 22, 70,185,172,137, 48,118,158,101,
+181,115, 60, 30, 49, 74,227,140, 45,194, 95,203,121, 56,130, 74,156,206, 7, 66,244,116, 93, 45, 92,131,224, 87, 55,136,224,202,
+195, 90,199, 66, 8, 40, 35,130,109,165, 53, 33, 69, 66,138, 5,234, 99,214,218,164,175,116, 65, 10, 85, 86, 79,113,157, 66,166,
+116, 65,101, 75, 67,158, 21,105, 25,125, 22, 63,248,197, 66, 36,135, 94,250,216, 33,146, 47, 66, 57,190, 51,100, 66,173,235, 68,
+173, 13, 58,195,179,219, 59, 62,123,241,114,181, 82,164,235, 14,189, 20,232, 68,126,111, 76, 40, 93,239, 37,138,179,192, 97,202,
+126,232,186, 27,201, 2,161,135, 88,152,208,133, 79, 47, 56,215,138, 97,246, 4,194,218,153,169,210,210,201, 56,182, 88, 25,148,
+198, 44,184, 77,181, 4, 5, 44,208, 27, 10, 66,163, 40,181,201,196, 36, 66, 59,149, 51, 36, 91, 68,103,145, 89, 37,178, 53, 36,
+173,209,217,144,179, 96, 86,103, 31, 57, 15, 35,211, 36, 24, 72,103, 12, 33, 41,142,167, 81,236,100, 11,205, 46,101, 98,150,155,
+233, 56,207, 34, 76,179,166,220,202, 68,165,171,117,197,209, 39,140, 55, 34,146,179, 22,109,140,236,248, 85,166,171, 52,109,211,
+ 98,179,224, 33,207,154,226, 55,135, 16,202, 3,225, 52,198, 10, 61,203,152, 68,227, 12,213,178, 82, 49,197,126,164,192,153, 44,
+249,111, 9,233,202,219,154,241,124, 36,148,116,165,202, 58,218,182,145, 46,221, 85,197,215, 42,220,107,103, 37, 78, 48,172,135,
+106, 66,105,241, 12,103,226,123,163,226,107,171, 88,217,119, 47, 58,136,252,116,205,147, 21,151,152, 81,242,199, 25,232, 34,227,
+192,228,111, 1,180,228, 15,125,221,215, 59, 32,157,191, 29, 16,243, 49,148,235, 21,231,142,107,255,136,122, 47, 39, 94,103, 72,
+239,231, 36,103,190, 19, 75,251, 1, 51,126,189,140, 95, 50,228,151,168,212,245,153,186, 98, 58,231,229, 82,156, 19, 85, 8,252,
+253, 31,253, 54,255,235, 63,255,231, 60,211,154,255,243, 95,253, 31,220,126,254,146,199, 97,162,169, 28,199,121, 36, 87,150,100,
+ 20,109,211,240,189,239,255,144,127,243, 23,255,158, 47,191,250, 10,234,134,255,248,155,175,177,155, 29,214,142,188,219, 31, 9,
+ 9, 94,126,246, 5,239,206, 7,178, 82,104,227, 56, 15, 3, 89,137, 80, 44, 71, 17,191, 29, 14, 7,188,247,156,207, 35,119,119,
+119,146, 87, 96,237,170,169, 89,180, 12,137, 76, 76, 30,231, 58,230,121, 90, 15,197,165,211,159,125,224,213,235,215,104,229,138,
+ 87, 88,254,205, 34, 6,140, 49, 98,156, 69,147,241,243,204, 60, 59,113,135, 88, 75,111, 36,105,173,174, 28,231,211,145,170,114,
+ 76,227, 88,226,152, 51,214,106,230,113,146, 24,234,148,200, 24,156,210,204,195,200,120, 30, 74,161, 21, 70,134,178,134,121,217,
+139,106, 25,227, 86,198,226,227,194, 20, 95,114,185, 19, 23,173, 99,105,108,178, 88,127, 31, 30, 30,200, 49, 17,178,160,109,115,
+148, 75,199,233,116,150,175, 93, 46,234,254, 20, 37, 41,175,188,248, 41, 72,224, 82, 74,226,120, 73, 73,146, 43,171,186, 18,114,
+ 92,134,148, 19,181,173,215,175,235,233,116, 98,179,105,214, 81,180, 28,195,154,174,171,201, 57, 50,140, 3, 77, 83,173,108, 3,
+173,138, 5,208,106,170,218,209,199,150,199,131,216,235, 98,200, 84,174, 42,106,238, 72,211, 86, 60,220,239,105,154,142, 23,207,
+159, 23, 6,189, 20, 75,107, 29,179, 95,112,192,150,166,105,120,216, 31,208, 78, 51,249, 25,165, 21, 77, 91, 99, 12, 50, 33,213,
+ 2,186, 57,158, 7, 42,235,120,249,249, 11,246, 15,247, 52, 77,141, 49,154,121, 30,233,187,150,199,227, 9,165, 68,196,168,107,
+135, 46, 81,185,135,195, 94,242, 5, 42, 65,236,206,243,204,179,103, 47,105,219,150,105, 26, 73, 57, 80, 87, 86,194,108,154, 22,
+ 77, 69, 74,153,113,156, 48, 70,201, 5, 39, 36,246,251, 3,183,183,183, 12,197,161, 0,186, 52,163, 77,113, 95,164, 2,235,145,
+231, 46,198,248, 68, 52, 27,130, 68,123,175,240, 39, 22,205,134, 93, 5,193,215, 52, 71,165, 13,196, 82,192,139,251,102, 65,116,
+167,229,250, 94,234,133,229, 63,227,127,203, 72, 92, 95,197,163, 62,153,233, 93, 31,200, 87, 81,148,178, 23, 16, 56,130,216, 62,
+106, 94,190,120, 41,252, 98,173,139,101,226,106, 20,184,140,204,214, 0,143,139, 39,249,125, 5,113,140,113,141, 92,213,250, 98,
+ 29, 18,252,107,186, 98,188, 95,138,178,179, 26, 99,132,146,149,150, 61, 93,202, 43,248, 68,233,136, 50,200,216, 56,137, 62,220,
+ 44,159, 82,129,221,168, 98,132, 78, 41,175,217,219, 41, 5,177, 94, 69,131, 10, 25,157,196,106,151, 18,228, 74,110,179, 90,233,
+226,159, 77, 76,147,140,213,231,144, 68, 75,224, 64, 77, 51, 86, 37, 72,113,221,243, 46, 22, 37,161, 21, 81,118, 59, 86,172,117,
+218,208,186,154, 41,107,236,105, 16, 42,159,147, 63, 83,101,101, 80,105,176, 68, 44, 17,167, 18,214, 42,116, 99,152,188, 34, 24,
+240, 86,186, 35,227, 12, 77, 93, 81, 21, 38,183,181, 53,149, 22,181, 48, 70, 75,119,167,196,190,167, 72,144, 3, 77,219, 98,140,
+ 97, 24,134, 21,222,178, 48,150,171,202,225,156, 41,147, 12, 47,157, 67, 35,135,240, 52,207, 28, 78,167, 75, 32,193, 90,128, 82,
+ 33,110, 45,249,226,165, 24,235,242, 50,114,217,131,155,197,102,118, 61,125, 94, 8,109,249,218,191,145, 63, 22,186,250,180,224,
+ 95, 67,134, 62, 18,162,144,151,142, 57,165,167, 59,159,247,186,242,235, 7,247,186,204, 46,105,114, 79,222,105,190,138,237, 45,
+ 31,162, 1,146, 86, 79,181, 36,139, 56,239, 35, 84,185, 39, 99,254,229,102,191, 50,205,121, 50,185,200, 87,142,149,203, 5, 88,
+151,130,151,209, 41,240,139, 31,252,128,255,237,191,254,111,217,248,192, 95,254,242,175,120, 51,237,209,167,150, 47, 62,255, 1,
+255,234, 95,255,107, 62,255,242, 51,134,227,129, 99, 45,201,106,255,241,151,127,195,237,246,134, 78, 59, 94,165,196,193,123, 84,
+ 85, 51,237, 15,108,183, 27,110,158, 61,227,205,219,123,188, 17, 12,232,148,102,108,229, 74,226,154, 32, 80,207,231,243,218,129,
+100,165, 56,157,207,220,221,238,240,243,149, 21,118, 73,177, 11,145,190,223,176,127, 60, 50,207, 1,173, 13,119,119,119, 12,195,
+128,171,106, 94,191,126, 45,153, 7,177,156, 1, 87, 95,128, 84, 58, 11, 17,159, 89,252, 60,178, 63, 30,185,187,217, 48,142, 19,
+187,221,142,227,241, 68, 93, 89,200, 25, 63, 14, 28, 15, 7,113,183,168,140, 85, 48,205, 35,214, 85, 56,173, 25,142, 71,108, 9,
+161,154,130,140,159,125, 8,132,156,241,243, 68, 76, 98,191, 50,229,156,138, 74,210,224, 4, 45,191,104,127, 32,133,180, 78,255,
+114,217,125,199,194,185,183,214,226,231, 88,148,209,165, 49, 42, 20, 57, 41,176,229,169, 73,137,166,110, 25,142, 71,180,146, 0,
+170, 24,210,202, 2,128,200,249,124, 46,227,240, 72,221, 52,235,153,105,140, 33,248,180, 10,180, 94,190,124,190, 94,164,154, 70,
+162, 89, 99, 12,120,175,232,251, 94,148,220,235,199, 32,108,139,186,174, 80,135,147, 76, 4,230, 25, 16, 66,103,142,162, 37,216,
+237,118,188,126,243,142,190,219, 96,235,154,227,249,140, 43,156, 1, 87, 89,206,231, 19,183,183, 95,202,238, 89,101, 54,155,158,
+183,111,223,137, 63,127,158,216,238, 54,196, 20, 36,200,231,176, 95, 21,251, 33, 4,250,237,150,195,241,200,221,237, 22,239, 35,
+227, 56,210,214,149,156,175,167, 51,125,223, 83, 85,134,211,233,196,118,179, 33,167,196, 52,207,136,179, 76,243, 87,127,245, 87,
+220,222,222,138, 19, 34,149, 60,244,202, 50,156,143,244,219, 29,219,237, 6,231,100,133,113, 58,157,105,107,199,249, 60,114,115,
+ 35,240,163,195,241, 92, 38, 71,145,166,169,168,107, 87, 64, 64, 9,156, 66, 71,195,249,116, 18, 0, 87, 17, 42,107, 37,226,231,
+ 16, 66, 25,233, 11, 60, 73, 28, 59,151,139,125, 74,233, 74, 71,162, 46,246,182,101, 66, 84,254,238,210,185, 3,216,168, 89, 23,
+241, 11,232, 97,249, 53, 37,140, 84, 27,123,213,144,151,145,145, 74, 69,245, 30,177,201,200, 24,207,232, 82,224,196,223,173,244,
+146,132,149,200, 74, 70,172, 86, 89,158,239,158,241,108,251, 12,171,172,116,232, 69,166,191, 50,156, 11, 41,142,171, 64, 10, 99,
+204,218,197,152,245,144, 74, 5, 80, 34, 12,235,101, 12,161,115, 46,145,161, 73,222,119, 10,114,104,169, 76,206, 30,151, 61, 85,
+ 78,204, 57,163,140, 37, 46,226, 8,171, 32,136,216,205,149,155, 97,237, 20, 58,229, 98,187, 50,164, 36, 46,238, 20, 3, 41,148,
+220,228,148, 72, 44,169,110,160,147, 33,153,153, 68,196,103, 75,159, 13,106,201, 70,214, 22,239,229, 5, 28,166,153,105,142,140,
+179, 60, 64,117, 18,225,132, 5,156,214, 96, 82, 81,220, 75, 40, 76, 93, 89,148,214, 52,109,141, 86,178,194, 48,214,160, 76,197,
+126,240,104, 2, 77,109,169,107,139,117,166,112,144, 53, 85, 83, 97,152,137, 83, 40,250,188,146,229,172, 29,181, 51,208,152,149,
+234,230,172,160, 34, 43,173,228,237, 53,181,232, 18, 12,132, 36,179, 9,107, 18, 49, 15, 96, 2, 55,155,158, 20, 60,167,243, 9,
+138,122,185,174, 37,220,165,107, 91, 72,145, 56,207,228, 50,133,137, 89, 20,190,251,227,153,253,126, 44,241,179,146,134, 84, 84,
+ 14,228,101,187,174, 47,118,187,245,254, 24,245,186, 28,138, 87,115,242, 85,104,150, 46,158,242, 15, 16,178, 75,162,159,142, 31,
+133,196,234,178,203, 72, 92, 21,239,235,130,112,245, 92, 88,165, 63, 80,197,191,143, 87,205,165,155,129, 84,112,160, 23,207,250,
+245,197, 33,189,103,207,188,140,251,213, 19,184,204, 19,187,218, 19, 61,192,133, 53,159,175,208,185,145,242, 49, 40,233,172, 18,
+186, 64,242,162,176, 14,180, 34, 5,133, 67, 99,243,196,239,191,184,227,127,255,103,127, 66,123,124,203,215,251, 71,230,156,209,
+ 85,203,243,207, 62,231, 47,254,250, 47,249,234,119,127, 76,136,145,231,141, 64, 78,106,215,225,110,122,126,243,234, 21,223,251,
+106,203,223,254,251,255, 64, 74,153,231,187,150, 47,187, 29,219,110,203,191,251, 79,111, 24,180, 98, 63,142, 68,163,152, 19,212,
+ 24,170,198,202,193,159, 19, 49, 75, 56,136, 49,226, 29,143,222,163,114,166,182, 74, 58,205,178,122,211, 73,190,231,227, 44, 23,
+162,148, 21,109,219,113, 56, 30, 57,157, 71,212,121, 38,121,133, 78, 26, 85,246,144, 57, 39,148, 81, 43,136, 74,105,139,143,137,
+164, 34, 85,227, 24,194,132, 26, 78,160, 51,214, 42,198,195, 17,221,117,152, 4,135,251,135, 18,232, 4,199,135,123,136,129, 28,
+ 3, 62,203,234, 77,165, 76, 86, 90,242, 34,180,248,236, 83, 92, 50, 2,100,231,106, 11,170, 25,165, 57, 79,158,144,210,154, 61,
+144,148, 41,182,177,114, 48, 39, 85,214, 33,172,206,163, 57,148,131,187, 88, 58,149,149,201, 88, 12,145, 48,123,177,179,206, 17,
+219,200, 72, 62, 22, 33,171,209, 66,142, 90,189,214, 73,244, 74, 40,201,136,152,102, 81,119,107, 37, 30,124,109, 53,227, 28,217,
+110,183, 28,246,143,107,161,142, 11, 74, 59, 69, 12, 14,171, 37, 89, 46,132, 36,147, 66,109, 11, 61, 17,158,223,238, 72, 97,190,
+116,250, 69,151,162,148,248,211,187,182, 33,196, 9,165,165,139,183,149, 52, 61, 93, 93, 23, 78,189, 98, 14, 30, 98,192, 85,150,
+231, 55, 91,188,159,201, 58, 51,207,194,231,232, 55, 29,143,135, 3,218,192, 60, 75,129,172,235,134,148, 20,223,188,122,199,110,
+183, 99,219, 24,198,113, 96,179,169, 57, 30, 2,126, 30,164, 1,169, 45, 16, 10, 16, 7,218,118,139, 15,129,221,205, 29,147,159,
+ 24,222, 13,124,249,197, 23,168,130, 48,222,110, 5,139,171, 20,244,109,205, 48,207, 76,147,198,199, 72, 66,115, 60, 79,180, 77,
+ 71, 78, 39,252, 56,163,140,244,134,243,228, 87,107, 94,223,247, 50, 29,105, 42, 66,136, 56, 91,173, 13,144, 49,165,193,243,146,
+ 84,151, 72, 37,138,119, 42, 77, 64,177,117,166,136, 74,225, 42, 4,106,209,230,232,203,179,175, 47,103,157,253,168, 71, 86, 61,
+ 29,195, 95, 44, 59,229,212,204, 23,149,242, 34,175,127, 63, 55, 99,217,117, 47, 40, 76,165,100, 74,109,180,225,249,221, 51,154,
+186, 89,111,152, 11,223,115,121,159,113, 77, 83, 19,191,180,210,250,189,176,143,244,244, 19, 76, 2, 5,185, 56,235, 18, 90,103,
+ 65,191,146,208, 38,175,202,121,185,180,134,210,109, 74,177, 78, 8, 53,168, 50, 6,229,228,240, 55, 42, 99, 93,146,252,241,204,
+ 37,175, 29, 35,152, 89,109, 72, 58,161,163, 18, 81, 75,202,228,164, 87, 10, 86, 52,153, 57, 6,116, 80,248, 8, 54,202, 33, 60,
+205, 51, 49, 82,196,111,194,198,246,169,188, 40,211, 68, 50,210, 21,107, 35,180,170,202, 25,218,202, 81, 87, 22,109, 53,174, 50,
+ 37,175, 92, 82,212,148, 49, 36,229, 56,207,137, 24, 18,117,213, 22,162,156, 35, 6,201, 90,134, 84,190, 62,145, 28,242, 58,146,
+ 51, 74, 18,136,172, 17, 12,172, 0,119, 82,209, 27, 72,232,132,179,154,202,200, 46, 59, 36, 89, 15,148,228, 89,172, 21,171,203,
+195,254, 65,184,197,198,208,214, 53,125,223,173,220,235,180,162, 24, 99, 25, 23, 6,198,113,228,221,253,129,113,144, 32, 10, 93,
+ 20,252,170, 76, 64,210,149, 11, 92,189, 55, 63, 87,234, 59, 40,233,249,226, 33,127, 98, 41, 83,223, 62,194,126, 31, 21, 43,235,
+150,242, 93,158, 21, 20,164,163, 70,173, 10,147, 39,153,229,235,126,235, 34,106, 73, 31, 68, 35,229,167,252,135, 79, 88, 83, 62,
+ 37,138,251,164,165, 45,243,225,215,235,201,133, 68, 72,103, 85, 42,159,138,214,228,171, 76,116, 75,226, 71,183,119,252,143,255,
+236,207,121,124,253,138, 57, 39,246,195,192,235,227,153, 57,193, 95,255,242, 87,204, 41, 96,140,163,113, 45, 95,127,253, 13,182,
+105, 56,198,196,155,135, 71,220,166,231, 47,127,245, 43,230,156,216,244, 27,246,199, 35,174,170,240, 72, 20,240,209, 7,166, 4,
+ 62,122,121, 29,181, 46,254,100, 56, 31, 79,248, 16,112, 85, 93, 38, 88, 97,205,100,168,170,154,249, 28,228,252,200,170,140,178,
+ 13,115, 8,226,179,214,134, 99,137, 86,142, 49, 98,148,248,174, 99,188,176,217,181,186, 26,207, 35,122,147, 16, 19, 49, 43,124,
+ 0,167,107,230, 16,217,159, 70,172,182,226,139, 62, 31,214,195,114,201,190, 70,153,245,123,104,242,190,116, 70,154,168, 46,225,
+ 78,185, 56, 60,252, 24,113,181,193,123,209,211,136,240, 74, 18,221, 22,162, 91, 6,113,249,228,139,107, 40,149, 11,158, 41,228,
+ 52, 97,116,128,169, 45,201, 11, 4,197, 88, 17, 11,186,198,114, 10,146, 1, 31,128, 24, 34,174,173, 24,131, 88, 71,179, 86,184,
+ 2,176, 82, 41,149,181,131, 89,163, 60, 23,107, 91,200, 23,162,226,249, 60,162, 94, 72,106,217, 48,158,105,218, 94,116, 57, 70,
+178, 46,102,239,105,219,237,170, 80,151,177,244, 76,229, 28,243, 60, 20, 37,125,205, 28, 60,117, 93,139,134, 65,129, 53,150,205,
+166,146,194,173,149,136,202, 80,184, 24, 56,159,207, 60,123,246,140, 99, 65,167,118,125,187,218, 24,111,110,132, 59,127, 56, 28,
+214,250,179, 63, 28,184,187,189,229,225,112,160,109, 97,158, 2,211, 40,162,180, 24, 19,175, 95,191,161,109,235, 34,210,173, 80,
+ 40, 66,240,235,212,215, 57,187,162,135, 79,167, 35,125,223,151,179, 73,177,217,108,153,166,145,186, 18,127,250,227,227, 35,149,
+179,101,124, 30,128,196,102,211, 51, 77, 19, 90, 71,198,113, 96,219,223, 65, 11, 3,131,136,175,163, 68, 78,123, 47, 83,132,113,
+ 28,233,186,142,121,246, 24, 83, 68,117,214,136, 85, 57,164, 43,209,106,166,239,219, 21,226,179,138,191, 75,119,190,140,239, 87,
+ 55,206,251, 43,191, 43,104,214,135,227,247, 92,102,243,239, 83,181,174,186, 20,197,181,157,237, 3,101,206,147,236,102,174, 18,
+217, 36,103,183, 97,179,217,136, 8, 99, 37,194,233,245,109, 47,254,210,235, 11, 69, 44, 89,233,198,184,130,139,101, 61,116,229,
+224, 77, 37,123,186,216,200, 72, 18, 50, 98, 19,214, 44, 93,156,236,236,231, 32,118, 50,149,164,232,107,172, 68, 31, 42, 81, 57,
+ 58,109,129, 74,212,226,197,123,190, 8,206, 22,239,103, 44, 10,246, 28,115, 1, 96,152,181,104,105, 16,127,186,137,197,227, 45,
+ 99,240, 92,236, 99, 11,186,210,135, 36, 59,237,184, 40, 53, 19,104,129,216,212,181,165,113, 2,191,232,155,138, 77,215,178,221,
+ 54,104, 3, 89, 95, 60,212,206, 90,180,173,152,163,198, 7,143,143,137,122,211, 97,171, 26,140, 65,165, 68, 93,203, 65, 37,135,
+ 80, 46,214, 37,181,106, 2, 28, 98,167, 49,214,209,214, 77,233,254,228, 33,182, 78,227,156,161,178,242, 85, 54, 89, 49, 37,189,
+190,174, 77,211,160,149, 28,204, 11,253,168,174, 43, 25, 95,150, 56,203, 92,252,172, 33, 9,249, 43,229,192,225,112,226,213,171,
+215, 18, 97,169,101, 37,177, 76,139,214,113,105,202,171,176, 71, 61, 81,117,124, 58,150,116,233,122,175, 47,167, 23, 76,251,183,
+171,212, 63, 40,132, 49, 61, 13, 42, 84,121,157, 17,169, 75, 20,215, 7,244,183,235,143,115,189,124,126,132, 57,127,189, 86,121,
+127, 31,255, 93,177,174, 79, 63, 15,245, 1, 8,231,125,196, 13,101, 68,107,138, 93, 42,100,133,210, 21, 42, 5,108, 10,124,239,
+102,199,255,244, 95,253, 19, 54, 9, 14,195,196,201,123,222, 60, 60, 80,111,118,204,231, 51,159,223,222,242,248,235,175,241, 62,
+242,238,176,167,187,185, 5,107, 57,143,129,237,237, 51,190,126,251,150,144, 6,186,182,199, 26, 71,181,169, 57, 14, 3,141,173,
+249,230,237, 3,147, 6,229, 12, 62, 69,154,206,174, 41,130, 97,158,215,169,145,216,136,140, 68, 39, 7,138,194, 91, 64, 84, 90,
+ 25,217, 63,150,203,147, 15,158,170,114,188,253,230, 13, 85, 45,244,174,190,235,184,127,183,151,238,197,200,186,111, 89, 89,152,
+ 34,236,234,154,150,211,225, 36,164,193, 40, 33, 45,202,106, 66,132,224, 61,112,230,166,111,132,152, 86,236,181, 49,137, 90, 61,
+164, 1, 99, 45, 62,137,189, 42, 21, 33,175, 86, 74, 52, 26,106,177, 47,202,235, 39,214,166,136,210,178,182,202, 5, 30, 37,193,
+ 36,185, 76,163,202,107,183, 76, 94,180,198, 46,194,208,162,208,206,203,129,110,173, 92,250,163,160,110,115,138, 34, 70, 11,144,
+202, 37,163,170,107, 76,129,155,132,144, 48, 54,209,180, 13, 67,241,100, 91,107, 11,180, 39,174,150, 94, 17,220,202, 84, 32,248,
+192,219, 55,239,120,118,119,195,187,251, 7,148,169,169,234, 74,200,112,198,144,162,127, 15,112,148, 86, 53,185,179,142, 16, 70,
+ 98,146,232,217,186,145, 16,168, 24, 19, 49, 78, 52, 77, 67, 93,215,188,122,253,154, 23,159,117,164, 73, 44,140, 15,247, 39,110,
+111, 45,155,109,199,121, 56, 97,172,124,222,135,195,161,248,180,165,113, 16,168,150,101,127, 56, 64, 35,143,205, 56,206,244,157,
+112,227, 67, 12,130, 12,211,150, 24,225,113,127,100,154, 29,125,225, 32, 44, 5, 61, 4, 97, 6,200,184, 27,201,140,175,107,154,
+ 70, 58,232, 20, 43,234, 74,148,236,155,190,231,237,219,183,180, 93, 71,211,182,168, 20,137,133,102,186,164,215,221,223, 63,208,
+247, 29,214, 85, 40, 45,107, 69,193,100, 55,242, 62,252,196, 60, 79,108,183, 91, 30, 31, 15,107,170,101, 87,183, 37, 81, 84, 49,
+ 13, 3, 74, 11,109, 51, 4, 97,219, 63,101,188,200, 5,115, 97,240, 47,171,151, 85,208,158,159,174, 3,237,199,163, 31,129,143,
+ 28,164,234,170, 37, 80, 43,141,150,167, 55,133,172, 86,161, 82,190,194,107, 46, 69,126,187,217, 80, 55,245,250,129,230,171,110,
+ 93,175, 36,169,116,249,198, 41, 35,255,148,203,141,243, 74,205,172, 68, 66, 42, 15, 69, 46,248, 79,149, 10, 49,109,241,141,151,
+140,244,162,246, 21,111,185, 64, 96,156, 82, 76,126,198, 86,173,252, 59,163, 4,173,170,140, 20,241,228,201, 74,248,230, 90,151,
+104, 82, 37, 49,150, 57,107,178,201,152,168,100,108,150, 46,123, 94,103, 20,218, 68, 33, 77, 89, 93,108, 97,101,252,155, 53,211,
+ 24, 86,176,134,144,231, 4, 96,209, 54,134, 93, 87,211,183, 21,155,166,102,211, 57,182, 93,203,110,187,161,235,106, 66,242,156,
+167,179,116, 4,202, 8,153, 75,107,246,239,206,188,189,127,192,216, 6, 83, 53, 24, 87, 19,115, 64,107,217, 3,170, 20, 80, 41,
+226,172, 41,168, 69, 77,133,145,110,223, 54,232, 60,211,212,134,214,137, 7, 54, 68,249, 26,214, 86, 83, 55,150,214, 42, 72, 30,
+159, 20, 54,102,146, 18, 55, 66,215,239,240,126,100, 26, 79, 88,173,168, 43, 71, 91, 87,212,149,252,168, 42,135,159,211,133,161,
+ 15, 40,101, 57,159, 71,246,135, 99,217,155,151,105,229, 85,124,224,194, 26, 88, 70, 47,215, 80,164, 92, 46,115, 60, 65,190,191,
+ 23,161,154,151, 93,242,199, 11,185,202,124, 68, 37,255,180,104,170, 43, 22,194,106, 19, 83, 75,194,220,199,213,241, 31, 43,202,
+ 79,117,164,151,105,131, 34,127,235,229,228, 83, 23,144, 15, 69,113,249, 91,121,144,170, 8, 96, 33, 19,244,242, 60,149,139, 91,
+130,207,186,134,255,238, 31,254, 3,190,208, 6,117, 30, 72, 57,243,230,112,164,221,222, 48,199,196,151, 95,126,143,166,237,121,
+249,197,151, 76, 49,177,123,249,130,186,235, 56, 30,206,236, 31,222,113,251,252, 37, 97, 78,220,188,120,198, 97,154,152, 66,224,
+225,176,231,225,120,226,255,254,245,223,242,183, 15,143,236,158,221,225, 39,207, 56, 30,113,213, 86, 46,108,234, 34,132,147, 81,
+243, 5, 37, 26, 53, 69, 64, 89, 10,219, 85,144, 69,202, 18, 38,212,118, 66,225,242, 62, 20,175,180,167,170,106,198,211, 84,178,
+217,165, 49,113,206, 97, 43,153,108,121,239, 69,180, 25,101,103,109,180, 38,162, 81,202,144,147,226, 52, 6, 96,194,154, 44,142,
+156, 84, 60,252,202,200,212, 75,165,213,230,232, 67,148, 95,103, 89,145, 45,214,178, 24, 34, 33, 9, 1, 91, 8,139,233, 42, 1,
+ 78,222,239, 42, 18, 90, 6,212, 75, 72, 71,121, 6,170,178, 15,142, 37, 86,186,107, 36, 18,116, 17, 3,230, 28,133, 72,215,181,
+ 28,246, 39, 92, 93,225,207,231, 98, 39,173,240, 62,144, 0, 31, 34, 55, 77,131, 62,158, 8,133,191,174,138,234,122,153, 22, 44,
+ 54,203,140,194,251,196,249, 60,242,252,217, 29,231, 97, 34,100,205,247,119, 91,252, 60, 50, 78,129,166,118,235, 36,202, 24,181,
+ 94, 20,166,147, 68,154, 46, 17,176,251,211,137,186,107, 48, 74,232,114, 77,211, 16, 83,100, 44, 65, 40, 33,134,117, 68,223,182,
+ 39,222,221,191,229,238,238,150,135,135, 71,230,121,194, 20,174,121, 8,161,132,207,244,156, 79, 3,109,219,210,214,181,164,187,
+ 5, 25,139,239,247,143,180,109, 79, 85, 85,197, 38, 39, 23,154, 37,138,215, 90, 71, 46,151,146,105,154,104,219,150,253,254,129,
+187,103,207, 48,122, 94,139,179, 82, 34,160,134,204, 48, 12,212,149,184, 50,250, 77,207, 60,123, 65,183,214, 85, 57, 31,148,176,
+235,219,134,113,154, 9,135, 19,169,208, 18, 37, 4,198,150, 73,156, 76, 42,166,121,162,174, 52, 85,101,153, 38,185, 8,121, 63,
+161,148,193,185,154,202,245, 12,231, 65,254, 94, 35,208,161,224,227,202, 90,112,214, 97,136, 79, 38,143,105, 37,111,230,117, 18,
+190, 92, 52,109,126, 15,134, 33,197,248, 2,126, 89, 65, 83, 57, 94,118,148, 87, 16, 26, 74, 38,177,190,246,210,114, 73,158,186,
+196, 74, 10,142,117,211, 11, 53,142, 28, 65, 61,165,229, 72,113,207, 31,137,149, 76,101, 60, 27,151, 88,143,162, 12,103, 13,102,
+ 17,160, 83,129,199, 24,176,203,104,180,168,214,115,177,118, 44,176, 25, 91, 44,110,231,113,194, 81,137,218,220, 92, 91,168,244,
+147,139,203, 50,170,151,102, 65,246,247,165,185, 94,131,106,180,134,170,228, 39, 59, 39, 40,194,198, 89,218, 90, 70,220, 57, 69,
+252, 28, 57,171,113,125,144, 43, 29,112,198,210, 54,150,109, 95,115,179,173,217, 52, 53,125, 91,179,233, 44,219,190,163,239, 90,
+148,209,156,198,136,196,143,139,127,211, 40,205,121,158,121, 60, 28,120, 60, 28,113,221,115, 92, 85,163,172,129, 16,113,149,163,
+115,150, 86, 69,116, 82,212, 90,163, 11, 13, 38,203,113, 70,101, 20, 93,221,178,233,219, 66,194,179,204,211, 76,202,137,202, 26,
+234,198,208,152,140,198, 48, 39,195, 33,120,102, 63,160,141,162,221,116,188,122,251,134,148, 38,106, 87,211,214, 21,109, 83, 83,
+ 45,204,108, 13, 83,140,101,228, 40, 94,122,109, 13,195, 73, 60,249, 23, 42, 96, 92,245, 26, 31,100,156, 63,157, 79,175,221,141,
+226,219, 59,218, 53,225,237, 83,163,235,156, 63, 16,188,165,116,185, 76, 94,255, 67,117,165,198,127,223, 63,254,233,236,243,229,
+130,123,193,156,170, 18, 33,252,105, 40,251,119, 43,219,245,213, 42,106,233, 20,249, 86,184,140,148,240,136,112,142, 51, 25, 34,
+232, 24,185,113,142, 63,249,131, 63,228,119, 54, 27,190,172, 27,254,250, 87,191,228,241,124, 34, 25, 69,210, 26,167, 68,136,121,
+115,115,203,219,195,137,118,187,197, 40,195,253,235,119,204, 33,162,157,227,254,176,231,116, 60,242,249,231, 95, 50,218,204,111,
+222,220, 19,148, 97, 63, 5,126,249,205, 27,250,237, 29, 49, 8, 89,236,238,110, 35,152,204,224, 5, 74,164,229,172, 89, 20,191,
+151,203,141,140,201,167,201, 99,140, 20, 1, 83,236, 69,139,194,220, 7,137,183,124,251,246, 1,208, 88, 99,209, 90, 83, 53, 53,
+126,158, 36,157,208,213,212,109, 11, 10, 81,186, 79, 51,117, 85,113,154, 79,104, 43, 52, 56,227, 12, 36, 77,152, 60,100, 56, 12,
+ 1,107, 50,181,147, 52, 70, 99,116,201, 85, 23,165,185, 82,194,133, 8, 37, 21,114,157, 14, 5,233,158,174, 65, 53,233,202, 38,
+164,203,120, 93,197, 18,144, 85,132, 84,170,128,160,124,241, 65,107, 99,208,214, 50,159,134, 2,124,233, 87,100,104, 76, 9,231,
+164,216, 25,171,145,141,163,140,123, 39, 47,132, 71, 84, 68, 41, 3,200,184,223,135,200,237,237, 13,175, 94,191, 38,101, 41, 60,
+ 97,161, 74, 46,141, 87, 33, 36, 74, 23,111,177,182,194, 89,199,225,112,224,124,190, 65,171, 68, 91, 87,156, 78, 39,186,182,121,
+ 34,224,210,229, 50, 97, 64, 75, 38, 0, 0, 32, 0, 73, 68, 65, 84,127, 56,157,233,251,142, 80, 40,104, 33, 68,162, 18, 71,143,
+247,194,118,223,239, 15,216, 98, 11, 52,133, 57,208,245, 45,191,252,229,111,184,189,189,161,109,107,177,183,105, 75, 83, 82, 30,
+119,187, 45,160, 56, 30, 79,178,222,107, 91,134,225,204,166,107, 75, 54,187,103, 24, 78, 56, 87, 11, 70,182,184,108, 4, 19, 27,
+138,125, 47,112,119,123,131, 82, 21, 49, 5,218,174,229,240,248,192,166,223,173,160,172, 16,130, 92, 40, 10,211, 62,147, 87, 79,
+189,171, 60,231, 97,196,150, 26,229, 42, 43, 26, 3,173,169,170,106,221,237, 47, 83,144, 5,208,179,124,141,189,159, 5,182,230,
+ 92,193, 24,231, 98,165, 84, 76,243,200,110,179, 41,112, 34,169, 43,186,208,248,174,167,214,174,150, 41,203, 7, 41,138,133, 19,
+179,216, 61,149, 2,187, 46,228,212,251,227,244, 43,122, 91, 17,118, 72, 66, 86,254,176,131,127, 47, 56,114, 65,192,138, 56, 78,
+110,229, 70, 41, 42, 91,209,182,173,140, 89,139,184,236, 34,148, 87,107,182,249, 37,244, 98,233,210,179, 36,177, 17,113, 74,198,
+201,194,113, 81, 79, 2, 71,132,224,150,177, 74,226,251,196,164, 47, 15,217, 34,170,178, 86, 81, 59,195,228,147,216,178,114, 34,
+250,169,192, 90, 40, 0, 6, 3, 89,148,161, 42,153,226, 49,102,117,228,231, 98, 37, 96,177, 62,233, 92,186,103,181, 90, 47,156,
+ 81, 52, 86,211, 88, 77, 87, 57,234, 74,196,114,222, 71,156,214, 56, 39,183,183,156, 42, 42, 91,209, 53,142, 77, 87,177,219, 84,
+116,109, 69, 87,215,180,173,161,107, 28,174, 50, 76,179,112,130,151,203, 70, 40,252,224,115, 12,236, 79, 35, 83,140,212,206,130,
+ 41, 66,178, 28,105,140,163,181,154, 94, 27,180,178, 84,165, 55, 48, 78,176,135, 42,131, 85,134,190,115,220,236, 90,154, 74, 98,
+ 39,135, 81,198,249,198,104,172, 73, 88,167, 36,176, 37,106,194, 97,228, 60,141, 84,109, 35,233, 68,167, 35,149, 85,180, 77,197,
+182,111,217,109, 58, 33,216,149, 8,193, 24,202,216, 61,229, 53, 56,225,112, 56,174,217,208,215,164,192,252, 94, 81,204, 87, 44,
+248,203,104,253, 90, 28,246,241, 45,242,117,238,208,229,118,123,161,187,105,174, 11,235,133, 19,127, 81,205,151,223,191,178,164,
+171, 53,230,141, 39, 94,243,139, 58,245,227, 93,191, 86, 2,106,146,189,233, 50, 61,184,110,225,243, 71, 45,112, 31, 43,238, 31,
+187, 68, 92, 39, 17,190,175,196, 95, 24,216,217,232,117,106,145, 10,179,161, 79,153, 63,250,217,207,249,197,231,159,179, 45,224,
+165,253,241, 64,179,217, 48, 14, 35, 95,253,248,199,252,197,191,251, 11,108, 85,243,246,221, 35,111,223,188,229,247, 94,124,198,
+255,243,111,254, 45,159,125,254, 37,227, 52,113,156, 70, 92,223, 83,239,182,252,250,221, 91,222, 29,143, 60, 14, 3,251, 57,240,
+102,127,192,117, 59, 76, 85,243,205, 55,191,166,235,133, 15, 62,156, 7,182,219,110,205,186,134,140, 46,154, 13, 83, 46,209,125,
+215,149,241,232, 44, 29,240, 2,227, 32, 51,249, 25,180,230, 52, 12,226, 42, 73,229,172, 50, 50, 66,215, 90, 68,162,218, 90,186,
+190,199,185,154,119,247,247,204,243,204,118,187,229, 88, 96, 42,153, 32,228,197, 90, 84,205, 62,148,253,183,214, 50,117, 75, 69,
+228, 24, 67, 33,168, 41, 82,152, 37,103, 61, 95,246,226, 57, 39,113, 97, 80,176,210, 70,175,138,125,141, 70, 59, 41, 16,190,168,
+147, 77,165,241, 62,136, 46,167, 8, 50,141, 46, 99,254,148,104,156, 35,148, 63, 91, 92, 34, 97, 8,236,118, 59,137, 48,141,129,
+166,173,153,166,179, 92,102, 74, 64,139, 82,138,152,163,196,217,162,133,243, 30,197, 35, 45,121,225, 50,150,223,237,182,178, 59,
+191, 70, 30,103,161,165, 77, 41, 48,122,207, 52,207,244,253,150,211, 48,113,127,191,231,251, 95,190, 36,103,225,234,135, 40, 99,
+255,211,241,192,102,179,145,110,209, 40,156,147, 75, 85, 14, 34,174,157,231,153,190,107, 37,187, 61, 6,142,199, 3,159,125,246,
+146, 55,111,222,202,186, 45, 68, 66,246,108,251, 30, 99, 52,227,112,102,211,247, 12,231, 83, 57,167,133,100,231,125, 20, 62,128,
+ 18,219,221,221,221, 45,206, 89, 78,143, 66,176,163, 56, 25,134, 97,228,225,225,158,205,166,163,105,156,236,189, 17, 50,156, 53,
+134, 16,102,170,186, 34,132, 25,163, 52,205,102,203,249,124,162,105, 58,198, 34, 76,235,251, 94,166, 24,229, 16,169,170,138,199,
+199, 71,218,182, 43,107,147,184, 78,151, 42,103, 87,203,228, 18, 41, 62, 14,146, 99,224,189, 47,107, 4, 79, 85, 85, 34,142,158,
+ 3, 96,232,186,158,148,202,159, 7,209, 79,104,173,202,228, 65, 23,187, 91, 40,126,127,105,192, 82,138,120, 47, 17,173,195, 48,
+ 60,201, 96,121,186, 22, 47,238,163, 11,105,227, 99,221, 67,126,210,212, 92,135,105, 92,139,228,158,230, 80, 46,214,179, 75, 98,
+214,114, 32, 59, 87,173,164, 51, 57, 96,227, 85, 39,191,248,207, 47,114,125, 74, 81, 94, 66, 93,180, 46,106, 59, 45, 42,112,137,
+140,204, 43,104,198,148, 12, 99, 81,251, 74,116,226,147,128,141,114,142, 90, 91,210,212,172,194, 57, 69,240, 51,138, 10,141,100,
+224,230, 84,118, 65,106,193,129,234,117, 34,176,140, 56,174,169,118,166,252, 61,173,192,154,140,213, 50, 41,176,106, 73,110,211,
+ 84,133,203, 92, 25,233,128,234,202,210,123, 15, 89,124,221, 77,229,104, 27, 67,215, 90,218,202,209,212,150,202,128,213, 2, 86,
+246,243, 2,132, 48,164,132, 60,236, 57, 51, 97, 9,217,128,173,208,214,149,238, 55, 64,140,212,166,166,214,224, 52,130,124, 85,
+170,176,151, 19,182, 82, 52,214,209, 86, 45,117,173,169, 43, 69,109,193,232, 68,119,211,173, 7, 75, 78, 1, 87, 25,154,182,197,
+143,153, 97, 10,204, 49, 81, 53, 45,251,211, 81,110,145,214,210,182, 21, 55, 55, 27,110,110, 54, 5, 79,169,214,180, 39, 9, 47,
+136,104,171, 56,157,199,226, 83,190,158,133,151, 21, 9,122, 13,250,200, 87,236,234,245,210,169, 46, 34,206,111, 13, 56,249,192,
+200,118,197, 74, 80,215,187,238,197, 86,198, 26, 53,122,133, 1,188,242,174,191, 7,156, 89, 22, 80,234,211,185,236,215,112,154,
+245, 93,101,117, 85,212, 63,238,167,255, 88, 97,255,246,177,252,135, 65, 46,235,174,183, 8,107, 98,113, 15,216, 44,121, 2, 46,
+ 78,252,241, 31,252, 33,127,252,179,223,227, 38, 39,172,201,124,253,248,128,106, 90, 30, 14,103,190,248,173, 31,240,245,235,215,
+220,188,120,193, 55, 15,143,156, 39,143,113, 29,175,190,126, 69,187,187,225,205,241,200, 48,207, 96, 43,178,182,124,179,127,195,
+152, 4,101, 60,132,196,227,228, 57,121, 65,122,190,125,243,150,218, 25,140, 74,228,232,177,181, 93,191,118, 70,107, 25,205, 22,
+255,181,181, 34, 2,157,134, 81,138, 90,200,107,182,182,177,174,124, 13, 19,202, 84,196, 56, 51, 12,211,122, 16, 46,144,153, 24,
+ 35,117,219,208,182, 21,198, 58, 78,167, 3,177,136,213, 98, 20, 44,105,140, 1,107,228,227, 48,214,144,114,196,212,138,182,239,
+ 57,159,206,132,152,113,181, 46, 7,244,180,102,156, 95,248, 20,194,109, 16, 60,239, 37, 96, 5, 37, 69,218,186, 74, 60,234,229,
+220, 19, 44,181,124, 71, 90,103, 8, 25,198, 73,232,119, 49, 37,178, 54,216,166, 97, 62,159, 37,101,110, 22,226,165, 66,139, 90,
+190,136,212,154,166,102,127, 24,216,108,110, 24, 39,177,167,205, 62, 20,114, 94,162,105, 91,102, 31, 68,179, 83, 86, 13,211, 52,
+ 51, 12, 3,207,110,239,248,230,213,107,234,170,194, 89, 67, 76, 23,220,246,114,225,173,235,154, 20,133, 31,209,117, 61,153, 55,
+ 88, 43,156,251, 20,229,153,220, 31, 14,188,172, 95, 20, 64,142, 52, 92,117, 93,227,125, 44,196,204, 76,101, 29,179,159, 48,229,
+ 34,235,253, 92, 88, 23,138,113, 26, 69,139,163,165,159, 52, 70,113,187,235, 72, 49,136,158,168,170, 57, 28, 79,220,220,220,209,
+182,173, 92, 36, 66,164,239,123,134,225, 36,196,190,170, 98,183,237, 25,134,129,182,235,152,166,137,155,221, 6, 31, 2,167,147,
+ 20,189,126, 35,180,184,227,225,200,205, 77,143,171, 28,206,218,130,250,150,206,124,211,111, 10,151,160, 98,156, 38,230,121,150,
+200, 91, 63,227,181,162,109,218, 53,234,181,105,219,146,255, 46,204,250,186,170,152,230, 89, 10,175,207,101,189, 81, 86,170, 90,
+151,122,181,216,254,132,170, 55, 77,179,136,228,194, 36,235, 39,103,139,173,219,150,144,151,101,197, 34, 1, 92,214, 56, 98,193,
+233,138,221, 48,148,144,151,244,100,170,184, 64,155, 40, 53,212,242, 45, 41, 81,223, 73,176,186,238,140,212,211, 99, 47, 95,135,
+ 86,148, 49,100, 93,213,162, 80,205,151, 67,123, 85, 38,231,139,114, 57,175, 93,153, 20,210, 92, 18,106, 76,241, 91,162, 18,202,
+ 22,210, 79, 41,244,186, 20,215, 5,218,162, 85, 42,194, 57,177, 98, 45,248,240, 84, 80,177,170, 80,216, 76,177,119,248,105,164,
+178, 53, 58, 27, 73,169, 42,246, 45,101, 45, 57,249,210,164,169, 21, 62, 34,170,227, 11,109, 79, 43, 25,197, 11,185, 52, 23,218,
+155, 36,152,153,178, 11, 51, 86,161, 83,193,249,105,168,156, 34, 39, 41,180,181, 19,238,186, 81, 11, 68, 32,162,112,228, 36,129,
+ 25,199,227, 25,159, 34,166,170, 65,101, 82,142,132, 0,231, 16, 57, 13,158,172, 12,182,170,100, 15,233, 39, 42, 5, 78,129, 70,
+190, 22,149,213, 52,218,208, 84, 53, 77,235,168,106, 69, 95,215, 56,227, 68,249,239, 68,164, 35,147,196, 72, 85, 11, 1,238,116,
+ 62,225,172, 67,105,203,228, 39, 30,246, 39, 18, 22,101, 43, 14,111,223,145, 19, 52, 93, 75,219,212,116,157,140,222,181,134, 16,
+ 22,218,158,168, 82, 67,140,196,224,121,220,239,203, 78,175, 64,127,212, 69,112,179, 20,226,172,174,129, 67, 79, 77,231,234,239,
+ 48,182,126, 26,197, 42,251,252,244, 9,127,247,229, 66,121, 37,234,252,224,239, 61,221,128,103,117, 21, 87,250,169, 93,119, 78,
+176, 6, 34, 93, 44, 85,121,205, 76, 16,103,199,119, 21,244,191,203,239,169, 43, 11,221,106,117, 75,249,226, 2,184, 2,231,180,
+ 1,254,241,223,251, 3,254,251,127,244,143,208,199, 61,141, 49,188,122,247,150,250,230,150,183,127,243,107,190,255,195, 31,115,
+ 60, 14,244, 55, 91,206,222, 51,105,205, 92, 53, 28, 30, 30,241, 86, 51, 5,207,225, 52,112,247,252, 37,131, 15, 60,156, 71,246,
+231, 1, 83,215,196,164, 10,119, 33,163,176,248, 41,224,135,137,221, 93, 7,106, 38, 5, 79, 48,151, 93,127,244,129,166,111,120,
+120,124,192, 58,183, 14, 47,172,115, 68,239, 25,134,145, 86,119,104, 35,107,163, 20, 99, 65,116, 58,252,124, 32,196, 88,138,137,
+ 76,233,150,110,177,239, 27,198,105, 36,207,179,216,137, 82,166,237, 26, 78,167,211,170, 30, 94,226, 49,155,166,102, 14, 19,155,
+109,207, 48,156, 65, 71,234,170, 17,110,120, 17,150,250, 84,166,122,139, 55,219,232, 53, 16,105, 73,131, 75,139,112, 76, 21,138,
+ 88,240, 88,231, 8, 94, 66,102,116,129, 55,101, 5, 49, 10, 68,197, 47,112,156, 34,230, 83, 90,177,217,110,121,247,238, 30, 99,
+109,161,144,230,114,198, 81,178,187, 37,221,236,197,139,231,156,134,145,227,249, 72,204, 2,240, 73,100,249, 58,114,241,181,199,
+ 20,100,135,237,106,250,174,227,176, 63,240,242,197, 11, 94,189,126, 3,234,138,141, 62, 77,236,118, 27,180,170,216,239, 15, 60,
+123,246,188,240,235,107,198,113,192, 25,137, 10, 29,167,169, 36, 63,186, 53,129,109,137, 13,141, 81, 50,216, 83,140,168,146, 48,
+ 22, 99, 16,209,162, 49,196, 28,217,238,182,101,210,232,139, 51, 71,138,170, 82,154,121, 28,185,189,189, 97,152,102,142,167,147,
+ 20,221,178, 50, 16, 28,172,128,107,150, 9, 79, 83, 87, 24,149,169,107, 91, 46,231,134,246,197, 45,227, 56, 49,205, 19,125,223,
+113,107,183,236,247,143, 40,181,161,109,106,201,129, 47, 2, 77,149, 65, 91,137,214,109,219,150,113,154,228, 82, 88, 87,132, 24,
+228, 2, 82,213, 43,108,104,113, 89,180, 77,187,174,194,198, 89, 46, 91, 41, 37,230,201, 23,220,175,172, 64, 86,135,152,177,244,
+253,134,227, 81, 8,154,206, 57, 80, 2, 1, 27,199,145,218, 53,180,133,192, 41,239,191, 94,131,116, 84, 22,125,201,253,195, 97,
+ 13,124,201,139,197,243,138, 5,191,136, 29, 83,138,133, 60, 81, 74,105, 86,241, 73,140,234,199, 37,181, 34,100, 90, 14,190,164,
+196, 50,115,153, 76,230, 21,179,186, 36,178,105,173, 36, 13,167,114,171, 85, 99, 9, 93, 89,126,142, 69,213, 23, 74, 36, 93, 8,
+242,195, 7,177, 6,164, 24,203,152, 44, 50, 39,207, 28,133, 93, 28, 83, 40,194,186,132, 82, 81, 4,114,186, 8,228, 84, 94, 85,
+169,210,237, 39, 82, 12,228, 20, 5,173,186,168,218, 83,100, 30, 39,130,151,183,191,124, 60, 33, 37, 98, 22,159,190,214, 6, 99,
+ 92,129,190, 44,255,189,124,110, 11,146,213,148,184, 86,158,112,239,245, 50, 15,206,203, 78, 95,198,243,149, 53, 52,206,148, 4,
+ 52, 41, 4,105, 77,166,147,155,217,121,154, 57, 14, 19,227, 28, 36, 66,214, 26,106,103,176,194,116,101,156,102, 78,103,241,126,
+ 46,197, 68, 84,163,154,174, 50,244,149,102,215, 86,108,219,150,190,171,105,187,138,231,207,110,248,193,247, 62,227,203, 47,238,
+120,118, 83,177,235, 12,155,109, 75,221, 56, 66,244, 28, 79, 39,134,113, 36,248,128,209, 6,227, 28,167, 57,240,234,241,192,215,
+247, 7,134,144, 57, 30, 79,156,143, 7,156, 49, 52,117, 43, 56, 88,107,174,172,108,129,113, 28,240,126,150,207, 39, 37,142,231,
+129,113,156, 73, 42,163,172,190,162, 17,231,171,206,249,146, 53,174,174, 40,135,107,148,174,186,124,191, 62, 73,114, 81,233,201,
+143, 37,208,111, 65, 39,234,171,144,147, 39, 23,131,245,151,105, 77,242, 34,167,171,113,251,149, 17, 94,229,171, 81, 60, 79, 28,
+ 27, 31, 67,185,234,114,113,201, 11,203,247, 58, 31,225, 35, 29,250, 71,187,116,190,203,214,246, 84, 39,160,150,224,224,114, 97,
+200, 90, 17, 75, 30,129,203,145, 95,124,241, 5,255,203,159,252, 83,238, 80,196,224, 73, 85,197,187,211,192,235,251, 61,187,187,
+151,140, 83, 96,119,251,140,211,232,121,179, 63,240,246,112,100,127, 60,178,185,189,161,221,238, 56,157, 69, 88,234,209,252,237,
+219, 55,188, 57, 60,178,185, 17,150,247,224, 3, 65, 41,142,195,153,110,211,146,137, 52, 93, 77,221, 84,235,254, 53, 35, 92,119,
+ 95,186,215,241, 44,137,101, 41,196,149,176,103,202, 94, 57,150,152,208, 16,101,210,179, 8,145, 98,217,167,215,117,181,158, 87,
+ 41, 75, 55,125,115,123,195,233,116,102,179,217, 49, 14, 19, 41, 10, 86, 53, 20, 49,148, 60,151, 98,237,114,149, 35,102, 25,103,
+143,243,136,209,150,221,238,150,217,207,235,248,155, 18,203, 28, 35,160, 12,174,170, 49,214,149,238, 56, 51,206, 19,211, 28,240,
+ 33, 49,204,129,243, 28, 56, 79,158,105,138, 12, 99,224, 60, 70,230, 8,131,151,132,197,113, 10,196,164,152, 87,177,154,252, 90,
+124,250,150, 97, 56,243,236,217,141,172, 5,114, 36,144, 37, 27, 1,197, 48,140,108,250,158,121, 22,123,225, 60,138,181,108, 56,
+157,113,149, 67, 41,216,109, 55, 8,150, 60, 96, 16,231, 78,240,129,211,120,230,246,217,173, 56, 7,234,186, 20,142,244, 36, 48,
+ 97, 24, 38, 54,155, 13,199,211, 17, 99,117,177, 86,137,238, 40, 2, 85, 85,147, 11,199,189, 42,171,128,156,162,116,243,165, 56,
+203, 88, 58, 10,203,164, 4, 86,237,118, 91,172,214, 4, 31,169, 92,181,118,177, 41, 70,252, 60,113,123,123, 67,136, 94, 38,102,
+ 49,177,219,108,208, 42, 19,227, 76,191,145,120,212,221,110,195,195,195, 61,219,157,140,252, 99,105, 24, 82, 18,235, 99,221, 84,
+184, 74,236,187, 77,227,216,109, 27,252,124,102,211,183,108,183,194,177,127, 60, 28,112,182, 18,210, 91,185,244,143,227,136,247,
+ 51, 90, 43,218,166,190,154,195, 21,155,223, 48, 22, 55, 65, 36, 37, 89, 9,249, 73, 2,184,154,166,198,106, 45, 92, 5, 96,211,
+183,226,216, 40, 34, 76,103, 29, 57, 73, 94,188,247,129,170,114,107,190, 65, 93,183,116,173, 4,209,132, 56,175,239,183,114, 21,
+ 49,200,215,237,176, 63,112, 60, 30,153,231,137,231,207,239,168, 42,183,190, 94, 43, 83,126, 45,232,105,157, 64,106,181,132,174,
+ 83, 0, 42, 57, 93,117,221,234,130,227,188,106,156, 84,190, 48,183,151,244,170,180, 22,244,184, 64,185,229,231, 28,158,132,185,
+ 80, 2, 4, 98,217,239,197, 53, 11, 61,175,196,174,156, 36,134, 52,133, 64, 10, 81, 94,192,178,155,141, 89,236, 81, 62,151,188,
+224, 24, 32, 5, 20, 30,173,147,116,232, 58,163,244,146,207,156,196,134, 16,203,219,137,130, 80,148,152, 84, 69,237,108,121, 97,
+228,193,244, 81,108, 11,145, 68, 82,153,116,181,123, 50, 37,208, 69, 68, 62,194,134,119, 90,227, 74, 65,151,162, 46, 32, 28, 83,
+ 68, 11,228, 40, 93,119,206,232, 84, 14,250, 34,236,179, 74,172, 99, 40,129,178,196, 28,241, 49,224,189, 16,216,230,121,150, 91,
+235, 48, 49,249,136,202,224,200,232, 36,194, 51, 31, 51,195, 48,113, 30,102,148,169, 10, 83, 90,188,233,149,211,108, 91,195,203,
+222,242,249,174,227,217,174,227,197,221,150,187, 93,205,174,183,180, 93,133, 49,137,156, 71, 82, 24, 57, 31, 30,121,245,230, 13,
+223,188,125,199,105,242, 76,115, 96, 28,103, 72,112, 30, 38, 14,227,196, 49, 40, 38,237,200,198, 73, 70, 52,129,202, 10,238,211,
+ 24, 35, 64,158, 24, 72, 41,160, 85, 38,132,249,194,222,206,153,113,246,132,245, 50, 71, 81,178,231,213,107,189,228, 12, 25, 52,
+ 90,153, 75,196,239,117,113, 95,217,254,185,224,124, 47, 63,148, 14,160,228,146,247, 62,240,125, 45,242,232,167,187,248, 92, 38,
+ 50,139,152, 51,101, 72,145,148,194, 10, 61, 89,133,158,197,121,161, 22,139,249, 26, 3,250,137,139,112,185, 96,101, 20, 49, 75,
+ 68,238,133, 0, 95,194,126, 83,250, 36, 94,118, 21,157,230,143, 43,236,151,139, 71, 78, 69,143,146,196,158,184, 62, 79, 11,164,
+ 66, 43, 28,137,223,222,118,252,139, 63,255,167,108,226,196,233,221, 59, 30, 15, 39,116,183, 97,192,240,249,247,126,200, 20, 18,
+155,155, 27,190,121,251,142,175,223, 61, 96,155,158,113, 42,105,105, 49,114,222, 31,233,250, 27, 30, 79, 19, 95,191,187, 39,148,
+130,180, 63,236,185,127,184, 39, 34, 64,141, 20,188,104, 82, 84,228,230,118,203, 28,230, 85, 20,230, 42, 75,204, 17,101, 12, 89,
+ 41, 30,246, 71,156,169, 10, 3, 61,173, 23, 54,235, 44, 93,223, 74, 6,131, 82,248, 89,198,237,214, 86,156, 79,103, 82, 9,207,
+ 80,122,161, 91, 66,191,217, 20,156,105,203,105, 63,160, 17, 49,214,133, 60,169, 86,175,186,113,154,170,117,248, 50, 10, 37, 65,
+223,237,120,124, 56,161,144,113,130, 36,159,105, 20,150,156, 52,243,228,169, 43, 1,239,100, 52,198, 57, 66,202,132,164, 72, 88,
+162, 50,132, 44,249, 13, 40,135,213, 13, 73, 91, 18,150, 16, 53, 25, 75,202,197, 78,154, 10,107, 94, 84, 99,132,148,168,234,154,
+211,233, 64,221, 8,127, 34, 38, 1,243,164,172, 36, 47,126, 22,205,192, 60, 69,156,169, 57, 31, 7,156,118, 12,195, 88,190,175,
+ 51,109, 83,177,219,116,152,210, 36, 84,174, 34,120, 9,114, 57,141, 39,238, 94, 60,231,254,113,207,221,179, 91,121, 38, 52,229,
+236, 21,152,203, 48,142,180,125,135,182,138,155,219, 27, 41,108,167,145,170,233,196,174,151, 20,113, 14,168, 4,125,211,150,213,
+101,166,235, 26,140, 17,120,214, 56, 78,171,213, 42, 23,187,161,236,219, 35,211, 56,173, 54,184, 37,114, 57,248,145,187,187,173,
+ 8, 13, 99,160,109, 43, 32, 16,227, 92,236,198,145,166,117,180, 93,197, 52,141,107,208,142, 54,182,116,245, 66,249, 91,130,102,
+156, 83,232, 28,217,116, 45,190,104, 41,154,182, 99, 24, 38, 14,231, 1,109, 37, 26,119,246,178,243,118,206,173,129, 86,109, 93,
+161,114,166,111,133,163,162,141,140,193,181, 50, 43,240, 75, 40,112,142,121, 18, 5,188,179, 6, 98, 64,229,196,221,237, 13, 93,
+ 83, 19, 11, 67,192, 25,187, 78,146, 98, 20, 93,194, 56, 78,204,147, 88,215, 50,137,113, 28, 48, 70, 62,247, 97, 24, 25,206, 35,
+ 49, 36,180, 18, 81,228,117,242,229, 69, 84,188,136, 13,175,187,117, 57, 31, 53,159,116, 0, 95, 41,127, 11, 55,217,228, 75,173,
+150,230,168, 28,130,159,136,158, 92,118,162,226,142,189, 14,117, 73, 79, 14,179,165,152, 47, 94,239,101,156,149, 96, 45,250, 75,
+200,135,196, 82, 68,114,156, 73,113,186, 36,169,229, 92,118,226, 25,173,115, 73, 90, 10,132, 40,221,254,228,103,102, 63,227,131,
+ 47,251,122,217,173, 87,149,163, 46,225, 16,193, 11,112,127, 81,162,174, 65, 8,165,168, 91, 45,100, 55,163, 86,242,238, 26,137,
+167,175, 33, 60,234, 82, 68, 46, 77,104,225, 79,163, 49,202,172,161, 43,139, 26, 58, 39,137, 89, 93, 16,178, 62, 70, 25, 47,206,
+158,217,123, 34, 34,182, 74, 57,147, 98, 98,154, 61,135,195,192,227,195,137,217, 39, 52,134, 24, 34, 42, 69,172, 78,108, 58,199,
+203,103, 29,159, 63,111,120,118, 99,233, 58,205,205,109,205,203,231, 45,109,157,200, 97,228,254,225,200, 95,255,237, 61,255,246,
+ 63,189,225,255,250, 15,191,226,255,253,255,126,205,175,223, 61, 74, 1, 31, 70, 78,195,192,105, 24,184, 63,156, 56,205,153,179,
+ 79,156, 39,143,182, 22,235, 28, 77,219,210,245,221,130,234, 39,248, 64, 10,137, 28, 50, 26,141,202,162,252, 92, 70, 72,222,135,
+ 15,196,231,151,238,245, 19,195, 33,117,125, 33, 92,138,185, 92,168, 62,174, 79, 83,159,236,112, 63, 9,112,201, 79,135,236, 23,
+ 45,200,127,254, 90,234, 99,221,247,178, 2,200, 43,184,233, 19, 16,153, 79, 69,163,126,228,227, 80, 75, 38,193, 50, 21, 91,130,
+ 57,149, 92, 32,178,181,164,178, 46,170, 83,226,101,229,248, 31,254,244,207,216, 88,203, 56, 13,156,253,196, 15,126,240, 67, 84,
+ 86,124,254,197,151, 4, 5, 94,101,134, 20, 24, 83,194,182, 45,135,211,192,233, 60, 80,183, 45,191,250,230, 27,206,100, 94, 31,
+ 31,121, 28,207, 12,193, 19,114,226,116, 58,201, 8,177,170,215,164, 49,173, 20, 77,211,174,250, 19,239, 61, 77, 91, 23, 90,165,
+ 38,167,139, 10,123,201, 21,208,214, 74,161, 47,221,199, 2, 51,186,142,228,156,231, 89, 18,210,172,227,241,241,145,205,102, 83,
+ 68, 84, 10, 87,153, 85,113, 60, 77, 51, 99,201,224, 22,216,137, 93,227,101,181,213,100, 36,150, 84,101,240,147, 80,224,118,187,
+ 27,246,251, 67, 25, 21,107, 33,173, 69,153,212,229,162,177,168,107, 17, 42,133, 20, 49,214, 72,162, 98, 73,145,147,149,146, 90,
+125,233, 74,169, 50,230, 13, 69, 47, 96, 47,209,213, 43,105,205,202,200,186,170, 57,159,103,154,182, 67, 41,195, 56,206,171,126,
+ 36,167, 37,238, 88,196,117, 18, 34,149, 56, 28,142,124,254,249,231, 76,255, 63,107,111,214,100, 87,150,158,231, 61,107,218,211,
+ 25, 50, 19, 9,160,166,174,234, 46,118, 53, 73,113, 38,109, 7,109, 93, 73,214,133,111,245,147,244,183,124,225,144,239, 44,135,
+ 34, 44, 89, 38, 21,146,217,236,177,170, 26, 83, 78,103,216,227, 26,124,241,173,189,207,201, 4,208, 44, 69,184, 43, 50, 80, 3,
+ 26, 64,102,238,189,214, 55,188,239,243,246, 29,198,104,246,199, 30,109,172,136,237,154,154,122,213, 8, 92, 38, 36,172, 43,240,
+ 97, 90,206,196,148, 60,218, 40,182, 23,235,101,117, 40,207,144,206,224, 30, 41,127,174,159, 93,209,181,109, 38,101, 38,166,113,
+194,230,196,183,132, 34, 7,117,230, 32, 41,179,116,125, 74, 33, 10,113,192,216, 76,147,107, 26,134,126, 16,224, 88,134,250,184,
+162,192, 90,151,153,255, 45,117, 45,220,139,162,112,121,127,221, 51,140,195, 18, 4, 5,208,117, 29,239,222,221,176,217,110,176,
+ 86,225,172, 89,194, 88,140, 49,148,101, 73,223,143, 24,155,185,239, 11,200,102,139, 82,208,181,199,133, 99, 63, 71,157,206,163,
+236,162, 40, 40,179,173,205,123,159, 35, 99, 85,158,242,200,121, 83, 21,229,226,115, 47,138, 34,131,120,138,197,157, 48,140, 61,
+155,237, 70, 34,112,243,154, 49,165,176,100,163,207, 9,112,195, 48,101,159, 58,217,205,225,241,115, 52,107, 94,201,204,246,198,
+ 25,190,214,247,253, 71, 29, 55,243,125,170,148,250, 16,251,253, 76,245,126,150,104,165,158, 68, 85,235,147,214,231,163,110,217,
+101,238,159, 78, 23, 93, 8,129,160,195, 35,145,145, 28,122,143,237, 76, 41, 65, 72, 2, 95,152, 75, 91,163,158, 56,227, 83, 86,
+227, 39, 45,127,198, 28, 59, 39,242,186, 64, 76,158, 41,140, 57,187, 87,212,165,129, 68, 76,106,129, 68, 24,163, 49,214,192, 36,
+192, 11, 12,121,140, 44, 76,250,209, 79,120,151, 61,165, 89, 31, 48,171,237,245,185,104, 75,205, 36, 59,181, 68,227, 45, 7,237,
+147, 9,243,204,241, 93, 8,100,103,187,185,164, 51, 81, 45,201,225, 60,197, 68,136,185, 18,155,225, 3, 73,124,176,109, 63,114,
+232, 60,163, 7, 27, 34,227, 56,162,147,166,136,208, 20, 21, 23, 43,199,170,138,172, 43,233, 20,154,218,225,156,102,234, 70,190,
+253,246, 53,255,254,239,127,201,175,127,119,207,164, 36, 59,122,211,148, 92,109,215,244,193,176, 26, 35, 77, 93,202, 3,109, 11,
+118,195,192,175,223,236,121, 56,180,148,235,107,108, 81,136, 32,169, 17,168, 68, 97, 13, 70,153, 60, 82,155, 80,218, 48,141,158,
+ 48, 9,108,163,109,251, 28, 94,145,137, 72,243, 14,248,145,212, 93, 45, 79,146,226, 20,153,123, 26, 77,207,147, 32,181, 88, 42,
+ 83, 58,223, 49,235, 39, 86, 76,181, 48,206,159,190, 7,122,201, 23,124, 74,174,251, 39,175,234, 31,108, 71,211,217, 42,244, 84,
+193,174,206,242, 17, 62, 70,141, 91,222,141, 89, 40,255, 1,220,237,233,113, 18, 98,156, 81,138,100, 12,104,133, 79, 96, 81,216,
+ 24,185,114,154,127,249,231,127,206, 31, 62,127, 65, 49, 13, 68,149,184,184,126,134, 54, 6,107, 29,117, 89,243,234,237, 91,190,
+248,250,107, 94,223,220,242,208,247,220,238,118,172, 54, 91,162, 54,124,255,230, 45, 94, 43,190,191,187, 97,152, 18,186, 46, 73,
+214,210,247, 45, 67,182,217,148, 69,205,224,167,172,230, 21,255,173,214,150,190, 23,223,184,181,162,228,213,202, 96,109, 65,223,
+ 75,247,177, 90, 55, 76,126, 90,234,187,217,119,174,242,190,119,238, 70,180, 49,180,125, 71,189, 94, 51,236, 14,114,105,207,244,
+ 63, 29,104,154,102,177, 20,137,224,200,136,159,125, 85, 51,140,189, 88, 56,157, 88,216, 98,144,175,222,126,119,192, 88,184,184,
+184, 32, 38,197,161, 61, 8,233, 50,167,216,197, 20,137, 83,194,213, 25,192, 82, 56, 66,128, 66,201, 65, 43,233,100, 2, 12, 9,
+ 62,162,139, 76,157, 59, 35, 14, 90, 99, 69,228, 86, 23,180,199,142,209, 79, 50,250, 21, 47, 44,198,104,134,110,144,157,120,136,
+146, 23,158, 5,116, 50,198,117, 75, 38,134, 66,136,148,115,178,217,229,229, 37,206, 57,209, 13,168, 72,140,150,195, 97,207,213,
+213, 5, 87, 87,219,165,168, 0,208, 86, 49,142,131,164,193, 5,225,163, 75, 68,114, 65,215,143,226,152,143,105, 17,151,125,242,
+220,211,212, 21,101,225, 80, 72,196,233,186,174,185,187,185,229,234,234,146,190, 31, 9, 94,138,181,121, 15, 28,188, 71,107, 69,
+213,148,132, 20,114, 22,187,162,109, 91, 94, 60,127,193,209,118,236,247, 71,202,170,166,235,123,201,113, 55, 10, 91, 20,164, 97,
+ 56, 1,117, 98,162,105,154,133, 69,191,223,239,185,184,184,200,233,142, 98,111,123,253,250, 21,159,125,246, 41,183, 55,247,108,
+ 86, 53,211, 52,177,123,216, 97,172, 97,181, 90,211,181, 71,234,178, 98,229, 28,109,223, 19,166,145,151,215,207,121,216,223,211,
+247, 45,113, 26,185,186,186, 98, 24,134, 5,128,164,148,228,106,104,163,179,211, 40,187,190,148,216,201,134,110, 92,132,157, 50,
+ 1, 22, 86,255, 20, 2, 49,235, 12, 4, 31, 28, 40, 42,241,205,247,253,152, 57,250, 35,214, 22, 89,103,112,178,208,196,140,239,
+157,178,163, 66, 92, 18,249,217,207,169,155, 33, 37,246,251,125, 78,223, 19, 65,233,178,254,206,238,155,115,124,180,229, 3,146,
+ 32, 69,122,143, 82,181, 36, 84,229, 51, 45, 60, 69,120,158,129,105,210, 98, 67,122,212,170,230, 79,104, 34,230,135,246, 81, 71,
+127,242,136,136, 34,147,147,207,120,249, 51,133,176, 32,242,100, 12,126,202,102, 87, 24, 25,219,230,160,149, 20,101,127, 78, 12,
+185, 96,200,187, 86,201,121,203, 74, 86,121,253,140, 22, 56,193,228, 61, 54, 56,148,201,194,148, 24,137,227,192,218, 25,162,229,
+ 44, 47, 93, 47,160,153, 83,238,149, 90,252,168, 42,171,223, 77,222, 35,170,243,245,111,134,205,204,171, 1,173,165,218, 77,137,
+188,195, 82,203,133,174, 80,248, 40,126, 83, 99,178, 63, 54,138,128, 39, 68, 24, 99,162,157, 2, 99, 12, 52, 54,211,182,198, 73,
+ 34, 29,189,199,146,176, 74, 83,104, 67,153, 63,199,113, 76,252,215, 95,189,229,223,254, 31,127,199,223,253,234, 45,237,100, 72,
+ 86, 81, 87,150,109, 83,113,181,243,108,154,150, 85, 45,251, 34,239, 39,140, 43,241,170, 96,194,177,189,184, 98,253,236, 57, 1,
+197,221,195, 61, 93,223, 73,164,162,145, 75,114, 10, 18,150,224,167, 72,215, 15,248,148,232,253, 68, 55,244,115,235, 45,223, 10,
+157,139,178, 57,100, 67,197, 71, 45,252, 92, 16,129, 90, 2, 91,210, 12,119,103, 94,227,228,108,245,200, 50, 5, 58, 69,157,158,
+136,116, 75, 62, 59,115,241,120,190,175, 78,239, 67,224,207, 89,242,249, 57,148, 41,110, 90, 2, 81,126, 72, 15, 31,127,143, 69,
+ 77,125, 96,114,240, 52,172,229, 67,225, 45, 42, 61, 14, 72, 94,236, 23, 97, 22,225, 65,152,159,107,160, 81,154,127,245,215,127,
+197,255,248,135,127, 8,199, 61, 87,215,207,232,195,132, 93,173,248,197,175,127,203,197,197, 53, 97,152, 80, 73,243, 95,255,223,
+159,243,110,183,167,155, 38,108, 89, 17,208,132,236,163, 78, 10,238, 31,246,188,252,244,115,238,118, 7, 30, 30,222,162, 52,184,
+178, 36,250,147, 61,107,202,251, 69, 65,113,202, 46,187,110,106,146,150,145,165, 51,178,103,236,186, 65, 88, 14, 85,157, 51,189,
+167,124,145,157,112,152, 90, 75, 76,168,202,251, 87, 63,201,251,219,182,189,128, 84,148,164, 4, 66,202,240,147,145,174,235,243,
+136, 60,176, 90, 53,140,126,202,108,115,187,112,208,139,162, 96,191,219, 49, 77, 35, 87,235, 43,137, 55,157,197,171,117, 73,223,
+245,216,252, 62,218,194, 9, 73,206,251,101,194, 88,175, 26,180,177, 12, 97, 98,202, 9,145,218,230,142,187,107,115, 65, 18, 41,
+ 11,161, 64,134,156, 68, 7,176, 63,118, 25,211,154, 50,210, 54, 98, 50,195, 66,172, 93,178, 14,216,110,214,244,237, 64, 76,137,
+ 49, 39,185, 37, 37,214,184,117,211, 64,138,188,126,253,154,151, 47, 95,114, 56,182,196, 8,125,223, 49, 78,138,151, 47,159, 17,
+163,103,187, 93,113,127,191,231,242,162, 33, 50, 49,180,178, 63,190,126,246, 44, 79, 73, 36,167,189,170,106, 64,146,228,116,126,
+238, 14,199, 3, 69,105,115, 74,155, 4,163, 92, 95, 92, 73,209,225,196,239,125, 60, 30, 72, 57, 79, 62,165,124, 30,171,236,155,
+ 31,134,156, 27, 46,168,235,113,236,169, 43,199,241, 40, 58,143,110, 28,113,174, 88,236,204,226, 99, 63,112,113,113,137,143,137,
+205,102,179, 20,198, 51,245,109,142,231,125,246,236,138,227,241, 64,215,181,252,248, 39, 95,242,171, 95,254, 82,232,152,182,204,
+ 74,248,130,242,210,113,119,115,195,139, 23, 47,168, 11, 97,203,147, 2,207,175,174,104,219, 22,239, 61,183,183,183, 98,139, 35,
+ 49, 12, 82, 88, 37, 4, 85,172,180,202,148,188,120, 70,129, 84,203,179, 57,249, 41,195, 98,170,101,146, 52,255,156, 37, 40,199,
+ 26,138,210, 50,249, 97,233,180,199,209,103, 69,188,201, 1, 47,146,216,198,252, 76,164,176,232,120,130, 79,132,100,196,138, 55,
+250,220, 8,126, 36,218,249,108, 53,103, 67,182, 51, 24,117,150, 83,117,238,123, 61,139,171, 92, 82,212,180, 38,233, 60,242,139,
+ 31, 83,207,171, 71,243,126,137,136, 19,193, 84,204,187,198,112,118,160,205, 23, 94,204, 23,186,236, 34,197, 71,174,114, 48,139,
+ 85,224,116,162, 48, 9,171, 2,133,145,127,214, 42,123,250,146, 33, 37, 3, 73,118, 59,130, 37, 21,132,163,210,114,200, 73,132,
+ 33, 11,215,217,135,184,236,237,114, 38, 33, 49, 38, 98, 16,193, 94, 28, 6, 54, 85,193,182,114, 34,252, 35,200,195,155, 1,181,
+106,217, 96, 36,180,210,146, 0,167, 78, 60,231,185,151,215,203,232,248,236,235,178, 80,203, 78,200, 81, 53,199, 75,166, 68,152,
+ 34,131, 15, 18, 64,145,192,135,136, 53,150,148,180,216,217,124,160, 29, 71,146, 49,172, 54,107,234,186,100,154, 38, 44, 30,131,
+ 70,133, 72,138,178,223,215, 86,252,210,191,252,246,134,255,245,255,252,207,252,199, 95,188,163, 79, 21, 30,141,138,138,190,131,
+ 93,215,243,246, 97,164, 46, 45, 77, 41,162,151,162, 44,216,108, 43, 46,182, 13,206, 22,216,216,227, 71,121, 97,199,105,192, 25,
+ 77,215,247,242, 96, 59, 1, 20, 77,163,167,235, 69, 15, 48,133,200,113, 24,241,103,143,136, 49, 38, 79, 35,210,147, 78,155,179,
+148,189, 39,194,177,133,119,172, 30,101, 17, 44, 62,241, 39,232, 84,158,178, 19, 84, 6,135,132,244, 65, 78,252,153,172,253, 20,
+150,154,167, 76,105,241,125,103, 21,125,142, 7,126, 44, 84, 73, 31, 28,169,127, 80,181,126, 70,173, 91, 8,118, 79, 2, 93, 30,
+133,196,168, 83,108,241,194,115,152, 65, 76, 90,101, 69, 64,182,130,166,132, 78, 18, 10,212, 36,248,235,111,190,225, 47,191,252,
+138, 75,107, 57, 30,142,132, 8,211, 20,249,213, 47,127,141,110, 86,252,238,221,141,132, 24,217,146,227, 94,132,140,159,254,232,
+ 71,188,122,251,142, 99,219,209, 15, 35,201,104,234,186,228,147,231, 47, 37, 42,115, 28,169,138,130,245,197,134,221,110,151, 41,
+111,158,203,203, 75,222,222, 63, 16, 83,228,112, 60, 48,140,131,228, 82, 23,197,242,253,242, 49, 18,198,145,105,156,184,188,220,
+230,177,176,128,104,180, 53, 20,115,247, 97,204, 2, 23,177,206,190,151,185, 94, 55,117,126,143, 34, 69, 37, 99,214, 16, 38,234,
+186,100,236, 61, 69, 89, 18, 73,140,126,164,168,202,147,213,111, 57,148,125,134,214, 20,185,112, 16,109,200,106, 85, 51, 14, 3,
+227, 52,161, 84,100,189, 89,179,219, 29, 50,234, 56,130, 86, 98,201,204, 84, 49,148,216,206,156,117,121,100, 42, 10,121,239, 3,
+101,153, 69,125, 85,201,241,120,160,174,155, 92,196,207,128,150,184,156, 59,218, 36,124, 28, 49,133, 37, 41, 89, 53, 22,165, 97,
+154, 2, 42,164,229,153,153, 11, 11,178,143, 95, 34, 75, 29,227, 36,176,149,232, 3, 55, 55,247, 92, 95, 95,226,125,100,181,138,
+180, 93,203,229,213, 22, 63,121, 52,145,187, 91, 81,146,107, 99,184,127, 56, 72,238,121, 81,178,217,172,232,250,142,171, 43, 25,
+ 85, 63, 60,220,114,121,121,137, 82,210, 41,222,221,223,242,252,249,245,162, 97,152,133,132, 49, 68,146,159, 71,199,130,139,246,
+126,202, 22,174, 18,107,101,239,111,148,161,112, 14,109, 69,111,180, 59, 30, 88,215, 13,174,176,140,121, 79,189, 63, 28,242,254,
+187,163,201,136,215,178, 44,217,239,247,146, 16,151,139,179,148,207,111, 66,224,199, 95,126,197,183,223,126, 71,219, 30,105, 86,
+107,246,251, 61,207,175,159,113,121,121, 73,219,182,108, 54, 27, 25,189,119, 93, 22,197,105, 46, 47,179, 74,126, 24, 78,133,164,
+158,177,172,115,106,218, 64, 89,214,103,156, 11,205,126,191,227,242,242, 10,159,117, 66,211, 36,147, 19,107,141,104, 27,242, 59,
+127, 2,209,136, 96,110,118,105, 8,226, 87,236,173,109, 43, 17,180,195,228,115,208,147,172, 50,130, 23,166,193,204,143, 7, 40,
+140, 93,180, 59,231,103,205, 57,140,106,233,220,159,166,165,235,244,129,225,226,251, 14,159, 69,237,158, 22, 75, 82, 92,236, 93,
+143,227, 81,103, 35,153,140,125, 38, 47, 73, 69,115, 78,242,188, 11,152,213,166, 11,205, 75,202, 88,201, 36, 87,145,210, 42, 74,
+ 27, 41,180,167, 80, 19,181,243,148, 54, 80, 23,145,186, 76, 20, 38, 0, 19, 41,139,205,124, 8, 12, 83, 96,152,252,242, 5,213,
+ 89,129,124, 14, 36, 9, 62, 64, 2,103, 11, 52, 50,118,153,134,137,161,159,152, 38,177, 37,133, 40, 99,112,159, 32, 42, 9, 31,
+ 89,246,230,249,195, 24, 35,140,105,165,196,155,110,197,151,110,140,206, 74,124, 50,164,128, 69,160, 50, 23, 47, 79, 69, 15,126,
+ 10,140,163,103,202, 23,186,207,187,180,144, 25,234, 62, 37, 17,201, 13, 3, 65, 37,154,205,138,102,211,176, 90,213,108,214, 13,
+171,170,102,211,212,108, 86,226,215, 77, 42,128, 78,188,189,123,224,223,254,251,255,155,255,248,203, 87, 28,116, 77,139, 34, 89,
+141,199,224,113, 76,148,244,177,160,245,142, 99, 40,104, 83,197, 64,195,161, 75,220,239, 91,218,174, 99,179, 90,209, 84, 37, 85,
+ 85, 82, 22, 57,109,201, 24, 92,233, 40,235, 42,219,212, 20,211, 40,156, 47,195, 13, 0, 0, 32, 0, 73, 68, 65, 84, 47,117,136,
+114,224,207, 89,232, 42, 79, 50, 84,246, 28,207,207,135,202, 35,151, 57,203, 92,127, 96, 43, 62, 7,106, 60, 46, 22,207,224, 11,
+203,247,246,164,234,148,119, 37, 46, 10,247,247, 4,116, 89, 47,162,211,123,255,233,212,173,159,143,244, 19, 63, 72,181,254,209,
+ 29,123, 60,165, 15,170, 15, 90,225, 30, 19, 22, 23,136,140,210,153, 23,158, 63,148, 89,138, 13, 61,227, 76,115,125, 89, 38, 40,
+135,137, 63,253,209,231,252,171,191,249, 43,190,184,184,160, 41, 43,202,139, 13,177, 44, 24,162,226,221,221,129, 55, 55,247,152,
+178,166, 29, 35,119,119, 59, 54,151, 87, 84,171, 53,111,239,238,105,187,158,139,139,173,136,143,162,236,190,159, 93, 93,113,247,
+238, 29,171,170,160, 42, 28, 70, 65, 89, 58,172, 49,124,241,249, 23,140,227, 72,138,137,170, 42,105,143,123,188, 31,169,155,154,
+178,172,240, 65,188,217,109, 55,240,176,219, 83, 84, 98, 27,115,206, 73, 90, 91,240, 89,131,225,151, 92,131,243,226, 45,132, 64,
+ 85, 85,188,123,247,142,237,118, 75,204,251,203,178, 46,101,108, 31, 4,216,161,243, 88,187,170,107,142,237,145, 85,211, 44, 74,
+225,105, 18,213,248,126,127, 36, 69,121,231, 83,132,105,244, 12,195,192,170,169,232,142, 71,166, 81,132,125,214, 74,178,214, 52,
+ 78,139,231, 88, 8,101,217, 22, 69,162, 89,173,228,157,205, 7,120, 34,219,211, 20,139, 5,106,204, 41,133,117, 93, 81, 88, 33,
+ 77, 46,156,251,232,137, 41,102, 12,172,146,216, 78, 29, 25,199, 78, 44,102, 90, 99, 51,175,194, 25,139, 31, 60, 67, 39, 22, 87,
+173, 13, 55, 55,119,108, 86,107,225, 82, 88,139, 85,134,238,112,164,114, 21,165,117, 92,110, 86, 84,133,193, 89, 75, 85, 53,172,
+ 86, 27,180,182, 60, 60,236,177,198,240,226,197, 11,180, 22,133,123,159,125,218,135,195,145,126, 28,104,154, 21,119,119, 55, 84,
+ 85,193,231,159,127,142, 82, 98, 75,155,166, 9, 87, 88, 92, 81,228,104,214,220,161,142,163, 76, 70,227, 76,124,148,172,240,113,
+ 58,165,150, 53,171, 6,231, 44,171,213, 74, 26, 16,107, 57, 30,164,115, 46,235, 44,198, 51,102, 1, 15, 25, 99,114, 55,205,114,
+ 95,180,173,196,169,238,247,123,190,253,246, 91, 72,145, 47,127,244,185,100,162,143,114, 73,223,223,223, 83, 85,245, 18,119, 90,
+ 22,197,130,158,157, 98,224,216,119, 2, 10,178,134,213,122, 35,112, 31, 91, 80,215,141, 52, 90, 49,178,106, 42,130, 31, 37, 76,
+ 43,211, 70,103,162,157,206,191, 86, 8, 97,233,252,157,179, 56,103, 41,138, 98,217,157,119, 93, 39, 43,216,148,112,198, 82, 24,
+ 71,229, 74, 9,136,138, 18,187,107,116, 33,226,204,164,113,182, 60, 27,165,235, 60,197,157,131,192, 30,223,153, 39, 10,235,227,
+ 38, 64,127, 80, 48,148, 62,178, 53, 76, 31,243, 4,167,143,118, 39,143,144,154, 49,226,195,136,247,227,123,127,184,115,239,122,
+204,222,116, 9,225, 12,194,105,215,137,202, 6,106,231,169,138, 64, 93, 66, 83, 65, 93, 26, 10, 43,180, 54, 31, 35,173, 15,236,
+251,145,187, 99,199,253,177, 99,223, 14,180,227,196,224, 35, 99,144, 32, 7,137, 16, 61,237,182,141,177, 25, 51,105,240, 62,102,
+111, 43,184,178, 98,181,185, 32,105, 67, 63,121,198,204, 84, 94,168, 51,234,148, 23, 47,214,182,211,143, 38,123,107, 77,166,101,
+205, 63, 71,101, 2,209, 41,103,155,211, 14, 94, 25, 64, 19, 82,100,156, 70, 70,239,241,121,167, 62,133, 72,200, 49,141, 73, 18,
+ 31,152,124, 66, 69, 40,172,101,234, 91,218,118,143, 78,145,186, 80,212, 78,177, 93, 59,154,181,195, 84,142,195, 16,248,119,255,
+233, 31,248,127,126,254, 61, 93, 44, 24,163, 38, 97, 22, 11,159,143, 17,143, 34,106, 71,208, 78, 20,188, 72,206,188,115, 5,117,
+179, 98,187,221, 74, 62,252, 52,176,170, 43,154, 74,128, 12, 85, 85,177, 94,173,104,154, 74,224, 22, 69,177,116,224,147,247,146,
+ 33,172,222,139, 25,201, 23,183,122,124, 33,159, 63,123, 31,124, 14,213,146, 42,245,248,209, 60, 83,112,158,117,233,231,100,194,
+167, 44, 25,217, 26,157,172,107, 39, 78, 58,232,116,234,160,197, 22, 25, 31, 65,135, 62, 28,174,242,131, 21,116,121, 2, 32,223,
+199,148, 11,197,164, 78,255,156,148, 38,207,252, 79, 85,116, 22, 88,165,217,113, 50,107, 11,114,192,235,188,100,176, 33,242,213,
+213, 21,255,203,223,254, 15,188,168, 10, 76,140,180, 93,143,118, 5,175, 30,118,180, 40, 76, 81, 51, 13,145,155,187, 61,177, 44,
+137,165,227,174,109,185,239, 59,246, 93, 75, 81,150,220,222,220, 82, 89,203,139,171, 43, 46, 47, 54,124,255,250,123,202,170, 16,
+213,118,140, 12, 93,203,231,159,188,164, 42, 28,199,221, 3,199,195, 1,235, 44, 33, 76, 76,190,199,149,134,110,232, 8, 41,209,
+182, 3,253, 48, 17, 35, 98, 11, 51, 70, 98,134,179,120,168, 40,138,197,254, 56,219, 50,141,145, 9,147, 50, 58,231, 89,123,233,
+190, 71,217,135,206,194,161,166,169, 25,199,129,170,170, 25,199,137,245,118,205,126,255, 64,211, 52,184, 92,120,198, 24, 41,140,
+163,111,123, 8, 9,165, 13, 38,147,200,108, 81,230,177,125,129,159, 70, 10,235, 8,147,160, 69,199,113,200, 65, 67, 50,161,113,
+ 86,194, 62,186,126,200, 64,154,140, 89, 77,208, 30, 91, 9,129, 9, 81, 70,203,200, 69, 60,141, 35,206, 25,156, 53, 20,133,149,
+ 51, 65, 33,162,172,164,176,153,161, 30, 66,228,112, 56, 96,140,197, 21,142,237,246, 2, 98, 98,221, 52,212,165,131, 24,168,171,
+138,113,244,164,152, 24, 7,207, 56, 76,248, 16, 49, 86, 45, 0,153,170,106,248,249,207,127,201,197,197, 5,214, 9, 11,226,205,
+155, 55,172,215, 13,117, 83,242,252,249, 21,253, 48,240,238,230, 29,205,170, 98,123,181, 69,233,136,177,134,209, 7,124,128,105,
+ 74, 57,144,198,208,118, 61,195, 48,177,189,216,208,182, 50,150, 79,217, 19,239,115, 90,221, 60, 65,216,172, 86,226, 40, 9, 17,
+107,140,104, 44,148, 69, 41,203,110,119,160, 61, 30, 41,157,101, 26,122,154,170,162,159, 70,108, 89,112,104,123,124, 76,172,183,
+ 27,142,199,227,130, 84, 85, 74,229,207,169,226,120,108,151,226, 74, 68,113, 21,187,221,158,227,241,200,106,181,162, 44, 10, 66,
+ 16,132,174,113,150, 87,175,223, 8,206, 91, 9,100,168,105, 42,154, 92,228,141,147,167, 61,118, 76, 99,224, 97,183,163,237, 58,
+142,199, 35, 36,104,234, 26,231, 10, 66, 72,203,202,166,174,196,242,235,156, 35, 32,176,153,170, 42,113, 70, 50, 2,116,130,210,
+186,211,234, 83, 41,116, 74, 52,101, 69,140, 57,200,203,203,228,169, 44,203, 60,133,144,166,178, 42,203,229,252, 59, 30,143, 57,
+ 30,251,100, 93, 83,153,142,122,178, 73, 63, 62,119,100, 50,116, 74,194, 52,206,152,127, 51, 19,145,150,191,212,227,196, 10, 53,
+ 43,223,231,161,179, 62,177,221,245, 76,251,210,106,145, 16,205,254,236,243, 99, 88, 43,189,236, 69,140, 22, 28,233, 83, 65, 16,
+249, 11, 33, 15,136,140,138,204, 98, 61,131,210,142,148, 69,162, 42,228, 50, 47,173, 4,161, 56, 43,123,191,193, 39,238,246, 29,
+ 55,247,123,110,238, 15,236,143, 61,253, 20,241,249, 82,244, 25,130, 50,249,144, 47,119,137, 93,149,210, 65,225, 67,146,138, 27,
+197,106,221,176,222,174, 89,175,106, 12, 9, 21, 39,170, 66, 94, 74,149, 47, 99,147, 47,116,163, 69,121,107,140,116,233,206,168,
+ 76,199,178, 88, 35, 35,121,107, 52, 54,131, 14, 78,170,247, 51,200,238,108,247,203, 95, 11, 31, 68, 97, 26,209,248,236, 48,168,
+115, 87, 52, 69, 56, 12, 19,111,110,118,236,143, 3,245,122,131,210,112,220,223, 67,240, 52,133,230,243,103, 21, 95,189,104, 40,
+108,196, 71,197,127,254,199, 87,252,111,255,238,191,240,253,109,192,211,144,148, 67, 37,233,178, 83,182,152, 24, 43, 15,109, 97,
+173,116, 20, 6, 44, 1,149, 2,195, 48,112,220,239, 56, 28,118, 88,235, 88,111, 47, 24, 70, 15, 49,113,121,177,101,181,146, 11,
+ 62,133,196, 52, 76,210, 13, 41, 37,153,241,211,116,118,207, 42,206,128,107, 11,104,102,185,104,151,121,247, 28, 86,240, 88,153,
+161,158,116,199,239,217,192,102,167,246, 57, 17,137,147, 24, 36,157,161,102,207,152, 54,239,219,223,150,191, 17,181,180, 58, 75,
+ 31, 84,185,154, 75,191,103,247,253,209,203, 92,157,222, 49,149,139,188,223, 87, 16,159,160,184, 58,143,232,212, 73, 31,160, 82,
+118,165,204, 57,220, 10,157, 34, 23,198,241,175,255,229,191,224,235,103,151,216,177,199,143, 35,171,139, 11,238,118, 7,188, 45,
+248,254,221, 45,171,102,203,212,203, 36,104, 48,138, 95,126,251, 61,155, 23,215,188,221,221, 99,139, 66, 32, 72, 49,241,236,242,
+ 2,165, 21,251,246,200, 20, 60,125, 86, 35,239,246, 15,160, 18,187,251, 7,246,187, 29,133, 43,216,183, 61,117,211, 72,192, 72,
+244, 76,126, 68, 27,205,241,112, 16, 60,114, 81, 96,172,202,158, 98,185,164,186,174,149,247, 34,175, 58, 66,144, 93,111, 93, 55,
+103,130, 55,217, 81,142,121, 28, 57,228,108,130,178, 44,115,114,149, 40,236,155,186, 17, 63,187,115,132, 24, 40,202, 2,109,140,
+232, 62, 50,213,107, 26,252, 50,182, 95,109, 54, 36,230,245, 81,192,185,172,158,238,164, 99,189,122,118,201,187,183,239, 68,120,
+ 27,163,160,167,141,202,208, 22,143,118,194, 40, 31,250,129, 24,230, 51, 48,101, 70,187,120,146,171,162,160,235,123,156, 53,172,
+ 55,141,216,112, 99, 90,128, 44, 85, 41,222,111, 57, 63, 12,222,139, 26,127,191, 63, 74,241,161, 68, 3, 52, 83,241, 98,136,143,
+ 46, 1,242,126,119,166,115,134, 32, 74,251,178, 44,232,186,150,205,102, 69, 74,129,195,225,184,116,154, 85, 41, 5,212,177,149,
+113,244,122,179,102,189,222, 48, 77, 81,132, 91, 83,192, 79, 19, 69, 85,176, 94, 53,220,221, 61,176, 89, 11,155,189,239,142, 50,
+165,171, 10,110,111,111, 36,113,172,105,168,171, 98,137,203,174,202,154,224, 35,222, 7,234,186,146,232,211, 36, 28,120, 97, 22,
+200, 25,208,181, 3,202,104,218,182, 91, 24,247,199,182, 99,181,106,150, 17,246,220,137,214,117,205,225,112,148, 64,152, 76,214,
+148, 40,103,185, 92,171,170,226,246,238, 86,116, 54, 74,177,106,214,248, 16,216,239,143,108,183,235, 69,227, 98,173,149, 21,149,
+ 49, 11,253,180,170,100,173, 19, 67, 32,134,144, 93, 21,230,209,185, 49, 39,253, 25, 99, 51,106, 89,196,212,214, 88,166,105, 92,
+ 28, 0,243, 62,125,142, 95,205,176,136,252,245,200,133, 18, 51,154,183,100,202,194,206,201,135, 37,236, 73,127, 32,220, 41,197,
+240,104, 77,119,190,174, 59,223,249, 43,165, 48,206,184,127,115, 26,119,170,133,169,206, 83,181,251,252,139,104,136,231,151,122,
+206,131,125,250,243,230,206,104, 62, 12,173, 54, 20,174,164,176, 37,214,184,133,143,172,208, 39, 21,116,182,252, 68,239, 69,144,
+102,192,153, 68, 97, 19,133,133,210, 69,170, 18,234,210, 82, 59, 67,229, 52, 70, 71,146, 74,244,163,226,219,183,123,254,225,183,
+111,248,238,221,142,219,195, 68, 59,105,250, 73, 17,130, 40, 20,167,224, 25,130, 92,242, 62,137, 37, 35, 36,185,216, 67,138,130,
+153,140, 19,218, 70, 46, 47,214, 92,108, 86, 40, 13,227,208, 67,244,172,202,130, 50, 39,191,153,156,176,102,102, 5,189,209, 88,
+ 45, 1, 41,165,179, 20,198, 96,181,150,203, 49, 91, 50,140,145,189, 13, 90,157, 93, 28,144,244,201, 83, 28,179,254,123,166, 79,
+161, 5,242, 31, 1,235,196, 63, 27,147,226,208,245,188,187,187,231, 56,193,243,207, 62,229,226,242, 18,167, 13, 86,121,182,101,
+226,143,191,124,206, 39, 87, 53, 58, 77,220, 61,244,252,239,255,215, 47,248, 15, 63,127,203,168, 75, 66,222,207,206,249,224, 38,
+251,235,109,214, 9,104,228, 33, 82,209,163, 8,148, 70,243,108,187,225,139,175, 62,229,235,175,191,228,250,242,138,117,189, 33,
+ 38,232,186, 35, 47,158, 93, 80,150, 37,206, 20,248,193,211,119, 61, 93, 63, 50,250,192,254,216,137,162, 83,155, 71,221,245,121,
+ 44,105, 74,167,110, 19,222, 79, 57,123,146,187,114,218, 39,161, 30, 37,166,205,246,115, 53, 59, 16, 30,217, 14,212,105,188,175,
+206,126,189,108,223, 81, 79,158,249, 83,230,121,134,225,204,239,133,154, 59,102,254,201,168,212,144,102,145,231, 9,177,172,243,
+175, 49,119,229,234,108, 23,246,244,243, 83,249,247, 58, 37, 31,166,156,234,149, 5,155,233,177,245, 79,167,196, 10,248, 23,127,
+243, 55,252,201,151, 63,130, 97,144,213,151, 41, 24,163,226,102,127,224, 63,252,221,223, 83,111, 47,121,115,123,207,148, 18,175,
+111,110,217, 62,123,198,195,177,101,119, 60,112,108, 15,108, 55,107, 41, 14,182, 27, 54,151, 27, 30, 14, 59,146,145, 41,193,177,
+237, 24,166,145,132, 98,189,222,202,197,224, 61, 49, 37,234, 74, 84,200,227, 48, 44, 40,214,186,174, 50,122, 57,162, 85,162, 89,
+ 23,184,210,224, 39, 17,109,197, 24, 68, 20,149, 20,193,135,197, 87, 63, 39,172,197,152, 24,250, 33, 75,101,229,107,114, 60, 28,
+113,214, 98,172,140,149,125, 30,227, 26,101, 56,236,247,108, 47,182, 18, 20, 83,184, 60,142, 77, 40,101, 24,250,158,148,228,125,
+ 45, 42,139,113,142,194, 57, 14,251,157,140, 90,131, 23, 76,233,254,200,245,245, 11,246,251, 3, 99, 14,122, 1, 48,121,183,175,
+180,162,112, 22,173,116,238,226,227, 82,156,133, 16, 73, 33, 46, 98,184,102, 45,164, 58, 25, 87, 91,214,171, 85,246,113,107,250,
+ 97,164,174,106,194, 52, 82, 86,114,185,207, 92,130,105,148,220,237,170, 42, 24,179,202, 60, 38,225,116,172,215, 43,124,240,226,
+ 26, 72,121, 82,168,172,196,163,198,200, 56,140,172, 86, 21, 90,195,232,199, 37,119,160,235, 36,227, 98, 24, 58, 94, 62,191,100,
+183, 59, 16,124,100,232, 71, 46,182,235, 12, 7, 74, 76,121,146, 58,121,207,122,213, 80, 56,203,216,119, 92,110, 86,168,108,247,
+ 42,138, 18, 63, 5,186,182,229,217,213, 21,211, 56, 96, 92,198, 18,251, 0, 74, 51, 78, 35, 40, 40, 11,183,172,216,148,150,238,
+115, 28, 39, 41,220, 6,201,180, 40,203,154,162,112, 12, 67, 79, 93,150,164, 40,254,237, 38,199,174,250,105, 98,189,110,114, 66,
+102,202, 8,224,158,162, 44, 25,167,137,245,102,195,246,242, 66,104,155, 49,230, 16, 32,131,177,138,113,154, 40,235, 42,139,163,
+ 69,247, 99,114,206, 71, 85, 56, 74,231,100, 52,238, 36, 93, 50,229,247,201, 58,113,109,196, 36,250,172,185, 91, 54,243,243,140,
+146, 96, 32,107, 25,166,145, 16, 3, 85, 93, 19, 98,160,237,122, 76,118, 62, 20,149,160,209,167, 48,201,228, 72, 41,161, 3,230,
+ 53,147,143,225, 17,109, 93,171, 39,197,254,188,110,204,171,165,249, 93, 56,111,108,230, 70,241,164,126, 79, 79,248,210,234,108,
+119,120, 18,165,147,102,119,154, 18, 59,210,210,233, 36,149,187,153,211, 62,243,164,128, 63, 29,185,146, 5, 43,233, 70, 33, 6,
+116,152,187, 84, 75,202,145,150,230, 12, 47,171, 85, 18,106,155,202,152,198,156,154,100,141,201,138,117,149,137,116,138, 93,215,
+241,219,223,189,227,245, 93,203,148, 20,104, 75,145, 96,140, 17, 31, 71,220, 36,169,108,202,198,156,145,158, 48,198, 45, 54,170,
+ 16, 78, 89,241,179,234,181,237, 59,118, 15, 15,196,113,224,114,149, 41, 68,232,252,255, 7,157, 98,238,216,101,228,238,140,206,
+ 49,140,250, 81,135, 62, 83,231,102, 49, 70, 58,247, 32,235, 25,242, 35, 25,222,243,222,216, 24, 67, 76, 62, 35, 45, 69, 72, 50,
+ 78,147, 28,116,103,241,123,155,139, 45,207, 94, 92,227,180, 97,229, 12,133,105,248,242,178,228,229,229, 86,162, 15,167,196,119,
+175,110,249,251,159,127,199,160, 10,166, 56,143,109, 37,152, 38,229,139,199,204,211,133,194, 80, 22,142,170, 44, 88, 21,150,235,
+237,138,207,159, 95,243,197,103,207,217, 92,173, 32, 6,218,125,143, 87,138,207, 62,123,193,221,195, 91,156,147,172,234, 16,225,
+198,203, 30,125,189, 89,115, 24,238,152,188, 71,105,155,125,185,167,207, 91,163,136, 42, 61,138, 38, 61,165,250,165,243,120,192,
+217,175,176, 40, 52,244,217,168,254, 49,237,240,177,211, 98,190,162,165, 51,155, 69,121,241, 52, 1, 56, 71, 29,115,162, 50,157,
+ 34, 96,231, 44,130,244, 8, 23,155,126,160,173,109, 1,235,156, 21,172,167,252,244, 83, 18,250,211,228,183, 71,255,124,158,151,
+158,226, 82, 0,159, 2,111, 36,206,211, 42, 40, 82,226,155, 31,125,201, 95,253,236,143,152,142,173,248,143,157, 97, 28, 6,186,
+187, 3,175,111,222,177,222, 94, 18,129, 33, 76,236,187,142,168, 18,251,221,142, 55,175, 95,241,197, 87, 95,210,172, 42,142,135,
+ 29, 77, 93,211,212, 21, 55,183,183,130, 13,110, 26, 30,178, 96, 76,105,195,122,189, 34, 69, 89, 25,205, 98,162,105,232,100, 44,
+107,128, 62,208, 13, 61,211, 56, 96,157,163, 61,236, 89,173, 43,148, 46, 73, 73, 14,108,173,117,246, 5,171,197,253,145,136,184,
+236, 83, 22,146, 87,206, 59,200,249,246, 38, 91,246, 66,138,194, 52,127,246, 76,246,175,218,114,115,115,131, 54,210,121, 13, 83,
+159, 15, 99,233,112,251,126, 88,146,217,172, 53, 96,210, 98,183,138, 33, 81,184, 18, 31, 70,238, 31,118,146,107,238, 28, 55,183,
+239,228,247, 77, 73, 38, 90,185,208,118,214,161, 85,196,251,136,213,134, 62, 3,111,124,110, 70,202,178, 88, 2,176,130,140, 67,
+179,190, 49, 46,177,156,210,145,105,186,174,197, 24, 77, 89, 72,158,119, 93, 85,146, 84,150, 18,214, 58,142,199, 22, 87, 73,119,
+ 90,213, 37, 62, 4, 14,199, 3,155,245, 70,212,234, 70,229,188,115, 73, 70,147,128, 21, 56, 30, 91, 94,188,188,166, 31,123,124,
+136,140,222,163,180, 97,232, 7, 92,161,136, 42,114,113,177,102,191,239,137, 62,242,112,127,207,246, 98,139,209,138, 20, 2, 93,
+219, 17, 67,228,254,254,129,207, 62,125,142, 74, 50, 65, 25,199,145,122,213, 44,246,175,253,254, 64,123,108,105, 42,151,145,179,
+242,190,213,141,156,159,105,214,133,104,149,223,129, 89,136, 28, 81, 58,100,198,135, 40,220,235,230, 57,219,237,134,190,109,185,
+216, 94,112,127,127,159, 85,245,154,118,232,217,172,215,196,132, 76, 42,180,101,247,176,227,199, 63,254,138, 55,111,222,242,238,
+246,142,151, 47,159,139, 77,114, 85,115, 56,180,164,152,208, 89,200,219,254, 78, 4,115, 77, 83, 83, 20,154,182, 61, 46,228,203,
+ 20,163,112,248,131,103,154, 70, 86,235, 21,126,156, 64, 37, 54,235, 53, 54,137, 62,194,229,103, 82, 25, 13,206,201,196,200, 7,
+177,247, 82, 48,142, 19,195, 48,200,247, 98,106,241,105,202,129, 68, 9, 91, 24,234, 88, 73,129,153,196,213, 65,158, 96, 27,163,
+ 23,225,157, 60, 99,234,125,150,197,217,100,112, 70,148,159,219, 99,103,109,145, 4, 86,253,240, 69,224,201,175,158,206, 24,232,
+168, 15,116, 23, 31, 23, 10,205, 33,239, 62,155,237,125, 14, 97, 8, 25,227, 26,242,177,169,243,168,203,206, 23,163, 74, 88,171,
+ 79,248,203,172, 6, 15, 82, 3,114,236,122,118,199, 30, 31, 53, 81, 89, 60, 48, 4,207,224, 61,131,143, 12, 83,162, 27, 35,195,
+ 8, 62,104, 66, 48,120, 47,187,163,224, 65, 37,141, 74,154, 20, 53, 49, 57,246, 15, 61,119,183,123,186,182, 71, 41, 77, 85,175,
+112,101, 5,198,229,130,131,133, 66,100,173, 94,246,232,214,154,236,203, 21,154,144, 20, 32,153,253,158,227, 6,103,193, 94,124,
+132, 24,125,108,203,210, 90,227, 76,177,236,225, 10,171,229,161,139, 33, 79, 25, 52, 90, 23,124,242,201, 39, 92, 63,187,162,174,
+ 28, 23,235,154, 23,215,151,188,184,190,100, 85, 57, 72,129, 99,239,249, 47,191,126,197,187,125,135, 79,134,168, 28, 9, 33, 95,
+197, 60,153,137,134,133, 44,100, 76,182, 11, 18,176, 68,240, 3,253,241,129,187,155,215,220,125,247, 91,250,119,175,209,195, 30,
+167, 71,154, 90, 70,169,199, 99, 75, 85, 87, 52, 77, 45, 7,178, 19,228,229,177,149, 17,188, 84,154,234,241,216, 60, 95,150, 74,
+101,128, 10, 49, 63,168,137,199,162,119,245,113,197,166, 58,173,109, 78,151,161,154,207,142,101, 88, 46,191,183,122,100,148,123,
+ 42,116, 59, 7, 34,189,167,123,155, 41, 96,103,106,253, 68,226,108, 29,255, 97,139, 91, 74, 79,130,145,226, 34, 20,152,167, 8,
+143,104,141,203,190, 61,101, 54, 3,143,220, 35, 11,251, 49,157,168,124, 32, 22, 73, 19, 18,151, 85,205,255,252, 63,253,115, 76,
+136, 84,182, 4,101,153,162,166,157, 18, 15,237, 72,179,189,100,244,137,239,190,251,158,205,102,131,207,157,114,223,117,124,243,
+ 7, 63,225,249,245, 21, 54, 37,214,117,195,151, 95,124,193,237,237, 29, 26, 77, 83,175,184,191,125,160,169, 87, 92, 63,123,206,
+245,245,115,172,117,188,121,243, 86, 10, 96,147,249, 4,211,136, 31, 71, 82,240, 40, 34,235,166, 34, 76, 35, 67,119,164,112,134,
+166, 46,177,130, 58,195, 89, 17, 89,109, 54, 91, 98,228, 36,126,204,249,214, 67,230,112,135, 16, 22,118,255,172,120,158,131, 62,
+108, 22,164, 25, 99,164, 73, 48,154,231,207,159,139,240,235,120, 36,120,159,147,185, 38, 25,175, 23,133,196,106,230, 3,209, 57,
+ 71,219,117,146,218,150, 16,230,123,102,136,207, 30,233, 5, 67, 27,188, 96, 81,103,234, 93,190,108, 72, 49,199,145,138,127,216,
+ 58,121, 79, 77, 86,211, 79,163,100,120, 23,133, 69, 27,177,136,206,161, 82,242,255,113,203, 51,238,156,193, 57,131,210,179,248,
+ 88,209,182,157, 88, 1,157,164, 83, 22,133,101,242, 35,101, 89, 44, 4,177, 89,156,108,172,202, 83, 9, 69, 89,214, 12,253, 36,
+171, 4, 91, 80, 20, 18,162,114, 56, 28,209, 90,156, 5, 9,242,206, 89, 2,162,118,247,247,148,133,216, 16, 69, 0, 39,233,113,
+ 51, 32,200,135,192,243, 23,207,151, 78, 91,224, 43,129,182,237, 51, 58,182,100,200,190,236, 24, 66, 86,157,159, 86, 97,214, 22,
+ 57,154, 54, 91,213, 14,123,154,166, 17, 64, 76, 16, 0,141,192,104, 36, 6,117,179, 94,101,151,146,151,134, 39,196,229,235,170,
+141,226,242,106, 75,219,182,172, 87,141, 56,149, 66,128,220, 65, 87,133, 8,121,195,228,177, 90,214,130, 15,119,247,220,221,222,
+179,187, 63,176,174, 55, 34,220,107, 26,202,170,148,233, 77,233, 40,243, 26,193, 57,139,159, 60,251,221,145,174,237,101,138, 50,
+167, 5,138,125,138,170,146, 4, 56,173, 88, 72,162, 68, 89,149,212, 85,181,232,200,134, 65,120,245, 23, 23, 91,177,255,197, 64,
+ 89, 58, 98, 12, 57,141,141,197, 39,111,172,121, 36,146, 93, 88, 38, 79,198,238, 11, 15,229,172, 9,248,160, 80,238,247,121,106,
+ 23, 65,220,172,220, 77, 79, 77, 67, 31,191,208, 83,222,247,205, 22, 36,225,186,135,133,246, 54,121,225,184,203, 5,239, 51,170,
+ 54, 98,180, 36,158, 21, 86, 83, 58,123, 26, 95, 47,112, 26, 25,159,246, 62,208, 15, 19, 33, 41,124,202,162,163,217,142,167,192,
+ 39, 25,183, 15, 94, 49,122, 24,189,168,199, 99,210,104,109, 69,144,148, 71,192,218, 56,188, 23, 64,128, 53,142,117,179, 98,187,
+221,240,236,250,138,170,169,115, 32,140, 90, 70,191, 86,131,155,187,116,163, 40,156,193, 25,179, 92,246,250, 92, 36,167, 78, 83,
+136,185,178, 18,193,224,201, 2, 56, 31,224, 70,159, 40,118,133, 21,206,252, 56, 77,116,163,199, 39,205,190,155,112, 85, 35,135,
+152, 74,148, 78, 98, 90, 55, 77,201,213,102,133,115,226,237,125,117,123,224, 31,191,187,161, 15,146,228,134, 50, 40,107, 37,183,
+217,200, 33,226, 10, 75, 93, 21, 52,149, 21,129, 93,105,120,190, 46,120,185, 45,249,100, 91,241,197,117,195, 79, 62,185,224,143,
+190,124,193, 31,254,232, 57, 63,251,209, 53, 21, 45,253,221, 43,174, 54, 13,183,119,247,220,220,220,144, 72,172,154, 21, 85, 93,
+179,111,143, 34, 38,202,156,237, 15, 61,116,179,141, 81, 58, 97, 41,207, 72,115,102, 0,203,216,112, 62, 20,116,250,192, 51,166,
+206,158,189,229, 33,215, 39, 65, 93,190,228,103,161,217,233, 98, 63, 89, 17,231,164, 63,173, 79, 23,232,163,232, 85,212,114,215,
+158, 32, 57,138, 71,188, 55,245, 49,114,221, 73,100, 39, 23,242,153,232,238,236, 50,127,132,117, 72, 79,139,130,211,148, 64,160,
+ 40, 39, 81,156,209, 74, 4, 84,198,242,183,127,241,151,188,220, 92, 80,104, 77,215, 15,236,219, 17, 83,109,120,187, 59, 96,234,
+ 6, 83, 86, 84,117, 67, 81,148,188,123,247,142,203,203, 75,174,159, 93,243,233, 39, 47, 49, 70,243,221,183,191,229,120,216, 99,
+180,230,112,108,217, 31,143,148, 77, 67, 63, 76,248, 32,123,238,245,122,195, 97,127,228,254,238,129,186,170,105,170, 70, 20,228,
+147,167, 44, 69, 48, 89,151,181,164,150,132,200,186,169,105,170,138,194,185,220,201,140, 11,175,187,170,234, 60, 98,143,185,203,
+148, 67, 83,246,153, 39, 33,162,206,137,104,227, 56,114, 56, 28,208,198,176, 94,175,151, 47, 86,140,242,236,136, 48, 78, 72,100,
+ 48,239, 33, 69, 89, 63,191,127,222, 79, 11,121,108, 24,250, 60,114,134,139,171,103,140, 83,160, 27,228, 66,187,185,185,201, 99,
+ 80, 89, 12,105,163, 50,201, 80,103,110,121,204, 23,137,151,194,219, 57, 17,192, 33, 68,203,178, 20, 37,116, 8, 35, 90,167,236,
+217,142,121,252, 44,207, 94, 81, 56,182,155,117,134,138, 68,138,210,138,230,160,116,121,122, 40, 80,157,217, 37,226, 10, 39,225,
+ 33, 33,100,198,121,153, 45, 79, 9, 31, 38,202,114,166,164,201,207,223,239,247, 20,101, 77,219, 74,132,170, 49, 22,180,102,242,
+129, 20,161,109,123, 54,219, 45,147, 23, 86,185, 92,198,113, 17, 22,162,160, 31, 7,118,135, 3, 49, 41,222,222,188,195, 7, 9,
+ 36, 17,177,223, 28, 79,186,199,185, 18,133, 89,112, 35,174, 40,168,202,146,113, 28,114, 81, 36, 49,163, 83, 38, 3, 78,126, 90,
+152,229,235,245,122,121, 39,140,209, 84, 85,153,255,253, 42, 79,106, 5, 8, 6,113, 89, 99, 66,162,174, 43,166,113, 96,187, 89,
+ 17,166,137,190,237,184,220, 94, 48,116, 61, 85, 89,209,212, 21, 77, 93, 19, 67,192, 26, 75, 89,148,132,201, 51,244, 61,195, 48,
+162,141, 4, 86,105,163,169,234,114,217,163,123, 47,104,228,186,170, 49,198, 48, 12,227,146, 56, 41,171,178, 64,211, 84,185, 8,
+179, 98, 25, 86, 96,141,121, 4,167,169,170, 12,230,114,142,238,120, 92,144,186,106, 17, 76, 75,161,132, 82, 57,185, 78, 63,194,
+192, 46,246,197,167, 96,170, 15, 8,212,207,155, 65,251,223,162,220, 85,103,135,106, 58, 27, 11,136,149, 35, 62,198,116, 46,135,
+227,105,119, 60,143, 95, 5,222, 47,236,238,148, 4,237,154,146,176,160, 83, 78, 21, 51, 90, 68, 34,210,225, 74, 21,107,180,146,
+139, 62, 7, 8,144,196,103, 62, 77,129,126, 10, 57,248, 32,231, 25,107,185, 20,230,144,148,168, 12,218, 26, 98, 86, 13,167,217,
+255,155,245, 0,218,106,148,151,130, 37,248,137,186,190, 96,187, 42,129,137, 85, 83,178, 89,215, 52, 78,113, 8, 45,105,154,150,
+132, 49,157,215, 4,214, 74, 64,139,179, 6,103, 20,206, 40, 25,105,107,157,171,242,179,205,238, 34,120,200,106,230, 36,171,135,
+217,218,150,116,142,147, 77,154,152, 34, 42, 73,117,106,139,146, 99, 63, 49, 30,119, 60, 28,123,158,191,248,132,213,170,194,135,
+137,194, 36, 10,163, 88,213, 37,235,117,131, 66, 88,246,111,119, 45,191,187, 63, 18,181,203,197, 67, 58,185, 28, 84, 64, 39,176,
+ 24, 74,109,184, 94, 87, 60,219,148, 92,173,107,158,173, 43,158,173, 75, 94,108, 27,158, 95,173,185,184,168, 41, 10,131,115,194,
+201, 31, 70,184,187,109,169,147,163,174, 27,126,253,155,223, 50, 76,145,186, 94, 17,147,230,246,238, 1,148, 89,180, 1, 49, 43,
+202, 85,174,106,163,146,184, 85, 57,232, 4, 57,124,222,126,159,210, 78,243, 62, 57,239,149,181,122, 28,109,250,254, 3,175,151,
+ 46,253, 67, 40, 57,153,134,196, 39,161,172,143,145,174,139,149, 42,103, 98,203,165,175, 79,129, 70, 74,157, 73,104,206, 52,112,
+ 31, 44,104,115, 17,172, 37, 52,227,247,145,233,206, 43,238,211,190,236, 9, 82, 55,205,164, 70,149,109,129, 2, 24,250,228,234,
+ 25,255,253,159,255, 37,161, 31,208, 49,209,249,192,230,226, 25,191,125,245, 22,229, 42, 14,253,192,223,253,221,127,226,249,179,
+ 43,126,246,205, 55, 24,171, 41, 43, 73,166, 58,142, 35,223,189,250, 29,198, 73,177, 23, 83,226, 23,191,254, 53, 47, 62,255,140,
+135, 99,203,205,221, 61,171,205, 6,165, 12,175, 94,189,161,159, 70,174, 46,175,152,188, 23,167, 72,182,132,150,101,201,225,120,
+ 96, 10, 19,165, 45, 8, 41,230,164, 66,141, 73,145, 49,140,144,164, 67, 86, 73, 70,222, 18,118, 49, 73, 86,130, 62,185, 33,140,
+ 49, 76,147,167,105, 26,186,126, 0,242, 46,212,216,236,253,181,140,163,168,160,157,147,209,179,104,159, 18, 33,202,161,218, 52,
+ 13,247,247, 15,185, 51,118,121, 23,107, 88,175, 27,250, 73, 60,202, 33, 6, 25,157,135,192,177,237, 72, 9,246,199, 35, 41, 6,
+154,170, 18, 74,163,213,144, 2,198,234, 37,209,172,176, 70,240,183,198,100, 56, 77, 88,246,251, 90,105, 89, 47,152, 9,101,212,
+ 89, 72, 83,200, 41,114, 13, 15, 15,123,140,209,217,186, 37,244,202,210, 22, 89,197, 95, 98,244,129, 97,144, 20,180,113,236, 41,
+ 74,139,202,133, 64, 81, 88,198,113,228,197,139,231, 28, 14,191,206, 30,125, 17, 92,213,181,164,209, 73,161, 64, 38,197, 73,134,
+ 71,215,117, 56, 39, 35,243,103, 87, 23, 57, 50, 85, 48,167, 74, 65,229, 12,125,215,113,117,121, 73,219,118,116,131,156,195,211,
+ 52,137,130,220, 57,250, 97,144,175,119,240,108,214, 23,108,214, 91,190,251,237,247,178,138,200,205, 66, 72, 2, 99,169,235,122,
+ 89,113, 92, 94, 94,210,118,109,166,200,105,218, 99, 71, 85, 85, 75, 94,249,179, 12,196, 57, 28, 14, 24, 45,152,224,102,181,162,
+237, 90,225, 19, 84,130,242,118,206,113,119,119, 79,189, 90,211,212, 53,237,254, 64,219, 30,151, 88,212,194, 57,174,174,174, 56,
+ 30,219,188,174,209, 92, 93, 93,226,189,207,140,117,141,247,129,174,235,105, 86,149,144, 10,143,146,205,190, 94,175,217,239,119,
+ 40, 69,142, 88,213, 24, 83,100,209,230, 40,171,135,186,162,235,123, 80,121, 63, 63, 11, 87, 99, 36,120, 73, 93, 91,231,216, 87,
+ 65, 29,107,156,171, 8,147, 95,194,162,202,186,164,187,223,161,141,100, 42, 72, 30, 73,202,246, 78,114,206, 73,202, 36, 58,181,
+112, 56, 78,115,198,244,222,133,126,158,173,174,127,176,114,151,167, 66,162,247,173,108, 79,193, 25,143,157,112,167,238,212,103,
+191,250,228,229,133,158,166, 81,188,161,211, 68,240, 94, 66, 41, 98,128, 40, 63,198,124, 8, 27,235, 80, 90,216,184, 70,155, 44,
+190,146, 79, 53,166, 19,193, 75,205, 99,222,108, 53,144,241,157,252, 90, 41,206, 97, 23, 73,208,138,130,122, 17, 46,156,150,124,
+ 95,107, 20, 85,161,185,188,104,120,118,181, 97,181, 42, 73,113, 34, 38, 47, 73, 64, 38,239,165,103, 38,188,149,206,220,100, 69,
+188,157,195, 95,230,245, 65, 78,113, 59, 87, 53, 10,100,103,230,225,179,192, 28,206, 69, 15, 73,197,156,150, 36,170, 75, 87, 53,
+140, 65,241,234,230,142,178, 89,241,197, 87, 95,178,202,225, 13, 86, 43,170,178,144,220,223,178,198, 43,199, 97,132,239,222,237,
+217, 15,129,164, 29,164, 12,224, 73, 34,184, 50,100, 80, 73, 72, 84, 40, 54,206,114, 85, 58, 94,172, 44, 47,214,134, 79,215,154,
+ 79,183,154,231,171, 68,227, 70, 92, 49,129, 27,177,149,231,249, 69,193,231,235,130, 50,140, 92, 95, 94,128, 54,188,121,243,150,
+253,177,229, 97,127,224,208,118,114,113, 47,147,135,179,113,243,211, 61, 50,103, 76,119, 53,203, 5, 63,188, 47, 87,233, 35, 76,
+244,165, 75,231, 9,116,230, 67,127,175,150,174,251,156,169,160,158,162,139,159, 20, 3,167, 81,226,188,134, 74,203,184,252,247,
+ 37,188,171,179, 80,160,211, 52, 70, 63,250,253,230,241,243,121, 81,177, 96,112, 79,124,188,229,175,232, 69,141,173, 66,196, 42,
+197,159,255,241, 63,163,113, 37,126,242,116, 33, 18, 10,199,205,241,128,171, 87,244,227,196,161,237,216,108,182,124,246,217,231,
+ 60,127,126,141,181, 98,205,217,181, 45,175,222,189,131,194, 17,180,226,242,250,154,183,119,119,108,158, 93, 49,132,200,187,251,
+123,182, 87, 87, 40,109,184,189,191,163, 31, 71, 46, 47, 46,217,237, 15,220,222,222,101,160,135,128, 54,238,238,239,233,199, 9,
+146,216,144,156,117,148, 69, 41,145,203,182, 0,116,206, 54,144, 46, 81, 68,112, 99,238,144, 98,134,127,156,198,227,114, 97, 75,
+250,216,152,197,112,101, 89, 16,147,116,170,206, 73,222,180,188, 91,178,222,176,121,124,185, 94,175, 25, 51, 88, 68,118,244, 6,
+173, 21,235,237,134,174, 23, 95,113,204,151,255,102,179,230,176, 23,133,190,224, 63,131, 32, 97,103,191,181,214, 20,101,185,252,
+185, 66,214, 6,205, 29,107,221, 8,124,100,134,152, 44,191, 95,102,120, 24,163, 40, 74,183,112,236,171,178, 92,108,150,214,138,
+ 93, 79,105, 73, 97,155, 61,206,117,211, 96,172, 94,196,132,162,218,150,177,175,117,150,253, 65, 40,107,171, 85, 13, 89, 19, 20,
+ 99, 88, 32, 61, 51, 33,205,135,176, 0, 91,102,231, 64,225,100,127, 47, 90,131, 46,119,151,158, 42, 7,145,116,109,139, 54, 54,
+123,187,237,162, 55,218,110, 47, 50,180, 71,190, 79,227, 56,178,221,172,120,241,242,138, 99,123,200, 22, 68,147,173,104,162, 94,
+ 55, 26,154, 70,244, 6,214,136, 3, 97,182,153,121,239,243,168,125,196,100,199,212, 60,110,182, 86, 38, 29, 41, 39,158,173, 50,
+249, 13,160,172, 74, 72,145,105, 28, 50, 75, 65, 2,165, 30, 30, 30, 56,182, 45, 33, 38, 92, 33, 95,175,113,234,137,209,163, 20,
+ 98,123, 43, 75,214,235, 85,102,224,203,247,203, 58, 81,176, 79,211,200,118,187,205, 92, 3, 57,163,103, 77, 71, 93,215,139, 38,
+170,105,170,229,251,202, 89,132,120, 85,149, 34,224,204, 76,249,249,189,152, 87, 61,178,179, 31, 24,199,129,166,169,168,234,234,
+ 44,219, 64, 24, 8,195, 48,200,164,195,137,213,243, 60, 3, 66,101, 61,144,250, 39, 4,186,250,135,109,211,255,255,251, 95,156,
+ 5,115,222,203, 24, 62,248, 37,102, 53,120, 79,244, 19,193, 79,132, 12,147,152, 71, 66, 49, 36,249,200,102,124,109, 44,214,138,
+197,235,220,199,135,138, 11,237,110, 49,231,199, 83,134, 92, 82,103,251,253,148,233,118,139, 76, 95,102,176,214,137, 79,180,172,
+ 74, 82, 10, 28,143, 7,110,238,238,217, 31, 90,116, 81, 97,138,154,128, 70, 91, 39,136,200, 44,222,115, 86,231, 46, 29,108,134,
+ 76,204,251,246, 57, 52,129,165,200, 56,223,223,102,241, 72, 82,156,255, 81,208,121,252,103, 52, 74, 25,166, 0,247,251, 22, 76,
+193,231, 95,125,201,213,245, 21,133,211, 56,171, 40, 11, 67, 89,149, 40,227, 80, 69, 67,112, 13, 55, 93,228,237,126, 32, 32,204,
+106,155,243,121,151, 68,180,236,169,111, 10,203,166,114,172, 10,195,186, 52,108, 10,195,182,212,108,107,195,182,210,148, 46,161,
+109, 66,217,132, 42, 21,212,154,122,107,249,236,197,134,149,139,164,225,200,102,189, 33, 41,195,183,191,123,205,247,175, 94, 51,
+ 78, 97, 17,193,233,115, 39,197,233, 30, 60, 27,131,171, 71, 17, 44, 74,241, 36, 13,231, 44,177, 76,125,128,212,182,172,120, 88,
+132,109, 90, 63,185,156,213, 19,114,220,227,122,224,227, 20, 56, 37,207,219,163, 24,214,101,136,175,150, 15,245, 17, 54,195,226,
+ 33, 87,167,137, 69,122,164, 3, 76, 31,236,214, 79,250,131,184,160,136, 83,154,125,252, 10,147,144, 11, 29,197,245,122,195,215,
+ 95,124,201,238,110,199,221,195,158,253, 48,241,250,225,129,251,227,145,195,241, 64,138, 17,103, 52,127,252,205,207,248,250,171,
+175, 68,149,190,106,232,134,145,100, 44,183,135, 3, 83,130,155,187, 7, 30, 14, 71,154,205,150,119,183,119,124,247,234, 53,101,
+211,208,172,215, 28,142, 71,218, 78,144,173,251,195, 81, 46,186,162,200, 33, 24, 37, 93,223,102, 23, 73,194,229, 92,232,152, 47,
+217,152,164,144, 87,218,146,146,201,188,235,108, 21,202, 86, 46, 25, 75,171,133,196,184, 92,160,185,187, 85,103, 30,221,162,144,
+174,187, 46, 43,250,238,152,133,171,162,111,153,166,145,245,122, 37, 10,242, 73, 84,218, 46, 31,142,101, 89, 50,142,194,127, 16,
+203,212,192,122, 45, 23,242,177,109,179,125, 81,180, 60,101, 85, 16, 65,118,201, 94,236,103, 51, 64,219, 24,139,182,162, 27, 73,
+217, 22,149,178, 77, 74,212,254,114,137,235,101, 28,175,115,241,111,151, 80, 26,165,101,140,107, 44, 84,149,203,163,106, 15, 24,
+186,110, 96,187,221,144, 82,160, 44, 69,159, 51,123,249, 67, 8, 18,167,234, 5,152,179,217,108,242,250,129, 71, 32,171,148,210,
+130,106, 45, 10,183,232, 90,166, 65,210, 31,157,115, 18,191,154, 27, 40, 17,116, 9,223, 62, 1,251,253,195, 89, 96, 73,201,208,
+ 15, 57, 75, 93, 49,228,145,186, 82,224,195, 68,211, 8,116, 74, 66,178, 76,246,220, 75,202,218,213,213, 37, 83,246, 7,236, 28,
+ 24, 0, 0, 32, 0, 73, 68, 65, 84,155, 91,107, 25,135, 17,173, 68, 61, 62,179, 8,228,249,233,100,138,187,100,134, 39, 65, 12,
+215, 37,126, 18, 23,135,179,150, 24, 3,133,115,160,146,104, 52,178,117,216,100,150,193, 48,142,236, 15, 7, 89, 85,205, 57,247,
+ 74, 62, 38,239, 49,214, 18, 83, 20,173, 69,110,240, 92, 33, 44,255, 97, 24, 56, 30,143,121,207,175,115,188,182, 17,123,117, 46,
+ 54,187,174, 91,130,134,206,209,176,114,105, 11,187,126, 28,199,108, 73,150,223,179,235,132,115, 47,159,159,192,136, 68,251, 35,
+107, 40,249,112,143,104,116, 98, 51, 62,219,163,159, 37, 66, 62, 10, 66,251, 80,228,243, 63,121,161,191, 79,220,124,255,191,255,
+128, 30, 95, 47,187,206,211,165, 42, 35, 41,185,192,163,159, 8, 97,202, 73, 86, 39, 81,140,207, 31,131,159,178, 26, 54,230,170,
+ 52, 46,232, 76,147,119,207, 74, 37, 81, 84,231,161,167, 36, 28, 25,162, 50,143,214, 5,234, 28,137,123,246, 99, 72,154,164, 12,
+205,122,133,173, 74,238,119, 59,246,135,150,182, 27,232,199, 64, 55, 65, 80, 5,174, 90,163,141,147,236,185,101,247,173,150, 61,
+186,181,162,124,215,249, 50, 95,240,131,231, 37,210,217,229,150,146, 58, 83, 69,207, 32,158,184, 20, 33, 17, 69,215,143,220,220,
+ 62, 48,248,200,151, 95,255,132,151,159,125,130, 54,114,232,203, 46, 95,198,243,182,172,136,166,192,109,174, 73,197, 26,183,186,
+228,242,197,103, 96, 12,167,248,100, 5,218,160,180, 69,103,159,127, 85, 58,170,194, 80,149,150,170,116,212,101, 65, 85, 22,114,
+ 32, 26, 3,198,145,116, 65,114, 37,169, 48,168, 70,179,125,222,112,181,118, 60,188,249,142, 20, 2,235,237, 37,247, 15,123, 30,
+118, 7, 89, 80,167, 51, 53,251,163,192,158,133,104, 32,172,254,217,135,157,212,227, 77,181, 58, 71,196, 62,206, 65,255,125,250,
+ 13, 84, 58, 41,217, 31,161,226,226, 25,132, 70,189,215,229,127,248, 98, 85, 31,129, 32,191,255,241,126,242,234, 44,190, 83, 75,
+229,127, 18,241,229,127, 62,231,213,127,224, 37, 77,138, 71,207, 6, 57, 43,221,100, 93, 71, 83, 20,252,245, 63,251, 83, 54,101,
+141, 31, 60, 9, 67,208,134, 67, 63,210, 15, 35,187,251, 7,234,194,113,177,217,240,226,249, 53,135,221,142, 87,175,126,199,205,
+205, 45,191,250,205,111,120,125,123, 71, 31, 19, 73, 27,124,130,135,251, 29,199, 99,203, 56, 5,214,155, 13, 85, 85,113,216, 31,
+ 48,198,176, 90,175, 41,138,130,113, 26,152,252,136,143, 30,180,236,186, 83, 30, 43,110, 47, 55,140,211,144,191, 7, 30,148,144,
+223,180,145, 11, 96,154, 60, 68,141,179,197, 35,241,172, 49, 74, 58,167,179, 73,213, 44,168,149, 78,246, 36,164, 19, 1, 82,202,
+ 99,252,115,109,134, 98,204, 29,170,160, 54,133,223, 45,225, 50, 50,237, 26,134, 33, 95,238,242,227,197,197,150,253,126,151,187,
+170,152, 33, 37,141,164,173,229,169, 98, 89, 85, 28,187, 78,242,180,115,210, 96, 89, 86, 98,115, 50, 46, 79, 16, 21,174,112,104,
+ 43,103,205, 12, 2, 57, 79, 1, 59,145,237, 36,194,213, 24, 81, 97, 23,165, 69,105,201, 35, 87,104,186, 86,132, 85, 69, 97, 41,
+ 43,217,163,207,200,208, 34,147,209,166,113,134,119,201, 25, 40,187,102, 73, 44,235,251,126,233,164,143,199,227,137, 3, 16,229,
+162,136, 33, 46,201,151,117, 93,139, 39, 61,219,255,154,166,206,136, 92,185, 88, 11,231, 24,135, 65,118,238, 62, 82, 20,242,121,
+247,125,135,177, 10,165,162, 96, 94,167,129, 41,140, 89, 63,148,117, 50, 49,224,172, 68, 50,203,222,223, 83,213, 85,190,224, 93,
+118, 63,148,203,243,174,181, 94,220, 1,211, 36, 83,150,170, 42, 49, 54,175, 39,242,154, 32,132,128, 81, 48,141, 35, 69,233,132,
+ 53, 63, 14,242,181,207,205, 80,219, 15,244,131, 23,205,213, 48, 49,102,213,250, 48,141, 40, 99,151,226, 90, 44,113, 82,184, 72,
+122,218,192,195,195,142,178,172,242,197, 46,221,248, 56,246, 39,196,117,126,175,103, 77,200, 60, 9,217, 29, 14, 68,230, 9,142,
+ 89, 28, 75,125,223, 11,216, 6,177,105,166,236,151, 63,182,173, 92,224, 89, 71, 34, 83, 41, 41,116,103,251,221, 76,210, 83, 31,
+ 40,248, 63,184, 50,252,160,250,253, 3,184,204,199,147,206,243, 67, 46,125, 16,251,245,126,220,197,185, 98,239,244, 2, 46,140,
+247, 28,226,178,112,215, 57,101,172, 79, 49,228,140,243,132, 79, 66,131,155,124,202, 0, 25,201, 24,151,172, 91,117, 22,157,153,
+ 63,249,185,229,205,149,137,202, 99,112,163, 77,174,188, 13, 49,106, 98, 50, 68,164, 27,118, 69,201,106,179, 37,248,200,237,221,
+ 3,109, 55,226, 3,248,168, 24,167,196, 56, 65, 50, 5,182,106, 64, 91, 17,158, 41, 17, 61,232,249,215, 55, 57, 90,245,236,243,
+ 94, 48,176,143,140,213,105,137, 88,140,103, 95, 55,129, 72,136,197,109, 24, 38,238, 30, 14,124,255,246,150,135, 67,199, 23, 95,
+126,205,143,127,242, 7,148,249, 65, 86, 68,234,178, 92,196, 72,226,101, 52,152,106,205,103, 63,253, 35,254,230,111,255, 57,159,
+124,246,153,216,130,146,164,192,165, 51, 46,189,209, 6,109,245,162,188,117, 78, 2, 24,202,194, 81, 88,135,182,150,100, 29,201,
+ 58, 84, 81,162,138, 18,170,130, 84, 23,216, 77,193, 39,159, 92, 16, 71, 73, 77,186,185,189,231,120,108, 23, 95,250,172,106, 84,
+191,119,220,163, 79, 10,245, 71,183,227,227, 78, 61, 61, 42, 8,210,239,153, 39,157, 43,218,210, 89, 23, 30,255,137,202,243,241,
+165,190,252, 10,191, 47,148, 37,157, 62,206,203,132,152, 5,154, 74,157,208,191,179, 16,243, 60, 11, 93, 41,253,145, 81,191,250,
+ 96,178,219, 66,148, 74,162,229,168,141,229,191,251,179, 63,227,143,127,250, 53, 26,185, 44,180,113,188,125,251,142,103, 87,215,
+ 20,206,242,197,231,159, 82,151, 5,171,170,224,251,239,127,203,221,253, 29,227, 56,241,221,171, 87, 68,165, 88,109,215, 66, 0,
+ 68,241,252,250, 57, 62, 38,108, 81, 9,198, 85, 41,238,238,238,184,187,187, 37,166,196,126,191, 19,127,109,126,150,173,181,116,
+125,199, 20,132,127, 61,211,230, 70, 63,160, 76, 66,105, 57,200,125,158,186,137, 45,168, 16,108,112, 98, 25,143,235,243,201, 74,
+254,156, 79,216,228,132,205, 46,146, 20,211,233,114, 82,138, 20,252, 34,196,180,198, 44,171,170, 25,116,165,206, 14, 81, 17,127,
+ 9,106,118,222, 99,111, 54, 27,166,105,162,239,250, 76,176,148,139, 85, 68,116,131, 20, 14,214, 49,100, 56,136,143, 49,135,219,
+200,251,174,140,166, 40, 5, 92,226,172,205,211, 2, 75,225, 28, 85, 85,231, 14,172,144, 98, 65,219,101,141,115, 78, 74,155, 67,
+174,172, 49, 2, 35,241, 1,157,199,212,206, 57, 18,113, 73, 39, 75, 73, 84,234, 85, 93,163, 52, 11,178,214, 57,137, 12,157,199,
+235, 51,113,141,108, 1, 30, 51, 28,101, 86,238,143,163,240,207, 31, 30,238, 69, 32,102,205, 82, 48, 79,211,196,106, 45,223, 75,
+149,157, 21,115,100,178,202, 86,212,170,170, 25,251,129,105, 24,151, 36, 54,242,212,105, 24, 6,170,170,194,231,207, 49,197,112,
+ 10,109,138,178, 70,245, 62, 44,162,191,148,247,239,115, 17,183, 90,205,233,108,210, 29, 79,227, 68,233, 10,170,162, 92, 84,245,
+ 42, 87,113,137, 72,244, 98, 19,108,154,102,105, 6,231,203,121,213,172, 49, 90,214, 62, 49,230, 21, 69, 72,244, 93,207, 56,100,
+116,173, 41, 40, 93, 33, 86, 63, 39, 22,231,105,242,180, 25,204,147, 50,228,104,190,124,103,174,255,140,243,158,215,106,198, 26,
+ 73,125,235,123, 98,138, 11,120,104,118,180, 72, 33, 0,198,216,133, 18, 87, 87,242,156,197,224,153, 6,137,165, 53,153, 93,225,
+ 39,177,218,169, 60,133,122,234, 71,255,152,187, 76,126, 78, 86, 21,167,108, 25, 80, 79, 66,171, 84, 74,168, 40,153,229,179, 26,
+ 84,250,195, 32, 88,206, 89,181, 60, 39, 80,171, 51,184, 72, 2,163,236,242, 47,181,150,112, 17,171, 53,202,136,124,223,204,150,
+ 47, 99, 23,115, 61, 74, 19,146, 34,228,205,111, 68,147,180, 33, 68,205,228, 21, 83, 80,120,159, 59, 49, 36,200, 37,198,180, 92,
+ 10, 82, 92,201,159, 45, 18, 73, 90, 14, 88,163, 11, 10, 91,160,141, 67,153, 18,116, 73,210, 13, 73,215, 36, 10,140, 21, 69,174,
+138,138,195,174, 99,232, 35,253, 24, 25,199, 64,244, 66,155,235, 71,207,113,242,164,178,130,178, 38, 26, 71, 68, 84,244, 38, 43,
+202,103, 30,186, 49,106,217,247,201,206, 48,157,216,239, 51,132, 4, 73, 95,155,115,231, 39, 47,130,191, 24, 12,227, 0,247,247,
+ 3,191,249,221, 3,239,246,158,235, 47,126,194, 87,127,240, 13, 46, 31, 58, 67,223,163, 82,164,180,150,202, 90,234,194, 97,173,
+ 34,229,108,231,205,167,159,243,197, 79,127,140,138, 19, 58,142,104,147,136, 38,130, 78,216,148, 48, 49, 98,146,194, 26,151, 65,
+ 57,154,210, 41,106,151,168, 85,160, 52,137,100, 21,201, 42, 40, 52, 84, 10,138, 0,133, 34,214, 37,106, 85,112,113, 85, 81,149,
+134,215,175,126,199, 63,254,227, 47,216, 29, 15, 96,100,202, 96,180, 91, 96, 54, 26, 37,122,136, 71,112,162,120, 6, 41,146,239,
+181,143, 42,247,237,130,120,209, 42, 46,126,111,209,202,169,179, 34, 81, 47,163,250,167, 9,109, 42,119, 11,143, 98, 89,159,168,
+222, 31,187, 51, 36, 61,106,233,140,207,104,111,239, 93,236, 42, 61, 81,211,255,158, 91,255, 9,151,249,188, 72,153, 1, 60, 31,
+179,131, 62, 77,111, 59, 23,156, 58,165,249,211,159,126,195, 95,252,244, 27,202, 4,109,123, 32,106,197,232, 61,127,244,245,207,
+184, 40, 43, 94, 94, 61,227,208,237,177, 86,113, 56, 60,208,142, 3,161,112,252,195,111,127, 67,212,154,102,189, 18,177,105,127,
+ 68, 5, 79, 34,210,251,145, 87, 55,111, 9, 73, 44,166, 41, 38, 46,175,174,168,155,154, 16,229,130,118, 69, 65,210,134,110, 20,
+ 1, 85, 89,150,148,149,112,211,135,238, 72, 74,146,114,165,108, 65, 55, 76,178, 75, 31, 61,165,171,136, 62, 17, 39, 57,152, 67,
+ 24,113, 78,137,192, 45,197,101,114,193, 25,195, 95, 10,226,217, 62,106, 33,202,193,183,221,110, 57,180, 29,202, 88, 70, 31,233,
+ 71,143, 82, 18, 37, 59,243,245,157,115,178,171, 77, 1,103, 20, 42, 5,140, 81,196,232, 89,111, 86,148,182,224,184,235,208,201,
+160, 34,148, 86,179, 94,173, 24,186,145,228,229,249, 51,198, 50, 76,129,148,223,115,208, 66,216,212,185,189,137, 30,103, 64,235,
+148, 51,186,101, 93, 38,221,187, 93,116, 4,202, 56, 38, 47,148,187,152,228,253,112,206,209,212,181,140,164,243,185, 17, 82,206,
+106, 79, 98,133,138, 33, 80,216, 2,103, 75,140,118, 28,246, 7, 89,125, 84, 5,129,136,143, 94,152, 1,128, 79, 57,255, 61, 23,
+ 30,174, 40,112,198, 18, 70,161,237,105,163, 37, 44, 70, 43,166,168,232, 70,207, 48,141,140,211, 72, 76, 98,131,243,222,179,110,
+ 42, 74, 39, 74,236,126, 28,169,154,154, 46,135, 56,169, 24, 41,180,101, 85,173,196, 98,150,245, 16, 72, 80, 32, 90, 41, 10,107,
+169,235, 58, 79, 96, 12,117, 85,229,130,204, 44, 60, 14,163,181,140,181, 13, 76,209, 11,170, 59,163,114,235, 85,141, 45,132,220,
+118, 60,182,196,164,228,115,201, 19,208,178, 48, 4, 21, 40,234,134, 99,219,209,182, 29,117, 85, 80, 87, 37, 4,143, 31, 6, 10,
+227,136,126,194, 25, 69,229, 74,156,182, 16,160,176,142, 85,221,160, 81,132, 97,160,107, 15,217,185, 96,233,186,145,186, 94, 1,
+154,113,156,242,206, 95,244, 1, 77,211,200, 26, 70, 89,134, 94, 82, 40,103,151, 64,140, 30,173,160, 46,157,216,240, 98,192,144,
+ 40,109, 65,229, 74, 86,171,149, 36, 14,118, 3, 49, 40, 42, 87, 97, 16,199,212,102, 85, 82, 21, 22,167,228,207, 99, 85,166, 86,
+133, 8, 62,162, 83, 66,167,199, 56,245,217, 53,117,142,141, 61,255,159,253, 96, 20,228,147, 94, 72,125,228,223, 63, 78,187, 58,
+237, 76, 23,105,220,114, 88,105,156, 19, 1,136, 83, 54,119,172,210,225,107, 76,190,232,237,114, 1,206,202,248, 57, 58, 83,144,
+124,230,212,225,103,172,168,248,189, 5,249,184, 4,173, 44, 27, 72,185,104,149, 41, 80,166, 64,219, 10,227,106,180,115, 24,227,
+ 36,108, 32, 95, 52,204,219, 50, 37, 40,217,221,254, 72, 24, 71,140,133, 36, 12, 2,156, 53,248, 28, 43,234,138,154, 41, 25,172,
+ 45, 1, 67, 80, 19, 33,223,214,115,128, 11, 90,161,149,193,156,209,203,164, 27,136,121, 30, 31,137,103,173,158, 28,104,179, 61,
+ 89,209,247, 3, 55,199,142,119,247, 59,162, 46,248,209, 31,252,148,175,191,249, 6,165, 21, 15,119,239, 8,126, 20, 32,143,147,
+ 17,185,120, 55,201,144,140,148,149,153,146,131,252,246,205,155,247, 84,146,179, 14, 65, 33,107,131, 98,166,224, 25, 65,239, 22,
+214,138,216,199,106, 40, 12,170,116, 80, 89, 40,228, 80, 32, 42,168, 52,205,197,154,205,118, 69,138,119, 76,113, 34,101,106, 20,
+225, 44,156,132,152,175,117,253,232,217, 72,105, 6,187,164,101,106,241, 62, 34,254, 49, 97, 70,205,113,187,255, 68,167,125,206,
+162, 21,241,232,185,255,252,195, 33, 44,106, 78, 64,123,178, 38,120,175, 50, 78,234, 17,193,238,233,159, 84,167,143,115, 26,222,
+ 83,172,126,160, 40,120, 36, 64,157,119,204, 49, 45, 0, 19, 69,226,179,231, 47,249,147,159,126,195,186,172, 80,147,196,237, 22,
+174,164, 40, 43,140,179, 28,218,150,113,236,233,251, 3,101, 97,121,115,115,195,143,126,242, 19,126,247,230, 45, 30,201,126,238,
+135,158,187,183, 15,148,101,193,171, 55,175,217,108, 46,153,124,224,197,203,151, 12,195,200,205,205, 13, 87, 87, 87, 56,231,120,
+119,115,195, 56, 77,108,235,102, 9,232,216,110,215,104,165,216, 63,220,179,222,172, 24,253, 68, 89,174, 24, 38, 67, 64,172,104,
+ 83, 55,202,104, 63,239,109,167,105, 98, 28, 61, 85,178,212,171,117,246,141,203,138, 66,246,146,137,201, 79, 75, 17, 51,227, 86,
+ 85, 38, 19, 21, 69,185,192,128,230,105, 65, 68, 98, 45,231, 52,183, 25,137, 90,228, 46,125,177,250, 88, 67, 24, 6, 54,219, 85,
+238, 96,167,101, 5,102,157,165,105,106, 72, 73,212,205,200,136,116,244,147, 8,151,230, 78,119, 9,134,177, 25, 70, 50,177,217,
+172,177,214, 48, 12, 19, 70, 91, 18,211,130, 14,141,209, 46,235, 9,239, 35,219,237,134,195,113,143, 43,156,160,101,179, 70,160,
+109,143,148,101,195,205,253, 61, 77, 83, 47, 35, 93,107,100, 28, 93, 88, 75, 23,134, 44, 44,158,100,231, 30,131,128,164,141, 76,
+ 13,172,113, 76, 81,138,168,174, 27,184,188,220,160,213,105,215, 94, 87, 21,109,215,162,173,101,200,221,122,200, 88, 83, 97, 3,
+ 8,143,126,242, 35, 77,179, 34,198, 68,219,118,236,246, 71, 62,255,252, 5, 4,207,177,109, 89,173, 87,184,178, 64,145,112,218,
+112, 8,129, 85,221, 8,103, 36, 91,214,230,119,102,254,123, 17,236, 57,148, 53,144, 60, 73, 37,241,241, 79,129, 24,167,156,138,
+ 54, 82,215, 37,164,176,228,169,199,188,199, 22, 86,126, 73,140,129,209,143, 18, 38,133,163,200,208, 30,103,215, 2,196, 41, 11,
+140,113,164, 40, 83, 3,173,221, 41, 99, 35, 7,238,104, 13,235, 77, 67,244,114,113,119, 93,183, 76,114,198,113,226,242,242, 50,
+115, 18,124, 46,174, 38,234,186, 22,242,165,210,121, 5,144, 56, 28, 14,249,207, 36,130,199,213,106,181,172,217,166, 32,176,154,
+152, 34,109,219, 99,243,189,115,123,123,143,115, 69,102,199, 87, 56, 87, 82, 58, 69, 10,173,172,163,125, 88, 68,213,231, 13,192,
+121,102,250,204, 52,153,119,236, 79,155,134,255, 6,248,204,249,233, 23,159,140, 85,159,140, 74,211, 41,243, 36,165,136, 65,229,
+189,143,197, 90,249,162, 91, 83, 8, 84,193, 90, 73, 72,179, 89,124,146,109, 17,198, 22,121, 95, 46,150,145,217,222, 38,240, 22,
+ 9, 95, 81, 90,236, 55, 49,219,196,150,191,230,104, 76,109, 49,174,166,168,182,216,114,139,182, 13,145, 18, 31, 53,163, 79,244,
+163,151,209, 90, 10, 76,105,162, 31, 91, 14,135,221,146, 3, 62,250,204,139,143,146, 59,156, 25,164,248,144,232,199,200,144, 52,
+163,113, 4, 91, 49,105,203,148, 83,235,180, 57, 19, 56,204,251,165,121,154,145, 87,203, 81,130,104, 9, 41,102, 81,135,162,159,
+ 34,251,206,243,246,225,200,111,222,222,243,237,125,199, 84,110,248,241, 31,255, 9, 95,255,244,103, 40,173,216, 61,220,113,216,
+221, 19,167, 17,151,253,187, 58, 91, 55,156,179,178,203,119, 26,109, 21, 49,120,238,111,239, 56,118, 61, 9,157,163, 59,207, 90,
+ 83,228, 1,181,138,172, 9, 0,155,167, 11,198,106,148,213, 40,103, 80,133, 5,103,193, 26,112, 6, 85, 90,116, 97,160,208,216,
+166,164,110,202, 92,132,165,101,125, 46, 15,221,217,165, 13, 79, 68,110, 89, 0,166, 30,203, 40, 5, 70,115, 46,150, 59, 75, 95,
+225,195, 54,142,243,212,179, 71, 53,128, 74,103,233,111,231,158,241,143,232, 62,222, 27,125,115,102,143,211,143,132,125,231,208,
+153,244, 3,197,164,231, 10,119,165, 62, 62,126,127,111,175, 30, 79, 90, 1,157, 18,165,210,252,205,159,253, 41, 54, 6, 24, 39,
+136,137,178, 40,120,249,201, 75, 17, 2, 17,233,134, 30, 79,100,125,121,197,183,175, 95,211,135,192,253,241,200, 67,123,228,229,
+103,159,114,191,223, 81, 86, 21,174,112,248, 40, 73,134,104,197,197,229,197, 2,126,249,228,147, 79, 24,199,145,251,124,209,108,
+ 55,155, 44, 8, 21, 21,250,118,187,149,177,124,123, 92, 92, 45,194, 62, 40, 8, 94, 70,157, 9,217, 77,219,162,160,168, 74, 48,
+ 90, 0, 83,106,126,206,220,242,117,152,199,146,230, 44, 74, 23, 18,211, 56, 97,141, 93, 46, 64, 87, 88,180,134,170, 46, 64, 69,
+166,124, 65, 9, 84, 69,124,198, 40,150, 48,151,186,172,150,221,228, 52, 73,160,134,247,158, 99,215,201,133,168,193, 22,142,106,
+213,112,191,127,200,175,185,206,162,176, 17,235,236,162,200,158,245, 60, 49,158,132, 75,195, 56,101, 93,140,196,123, 54,117,147,
+149,203, 2,204,138, 25,173, 26, 99,164,110,234, 5, 5, 58, 14,125, 70,193,214, 34, 20, 14, 98, 47,243,211, 72,223,119,108,183,
+219,101,244, 11,145,170,176, 20,214,226,199,145,117,211, 16,131,164,210,237, 15, 7,202,162,202,251, 88, 39, 84, 74,163, 24,199,
+ 9,109, 13, 62, 73,113,223, 52, 13,101, 89, 81,184,130,169, 31,240, 99, 88,120, 9,235,213, 26,239, 39, 14,135,163,196,221,230,
+ 51,119,181,106, 40,139,130,190,159,176,182,164, 27,196, 10,104,157, 99,244,226,177,158, 11,144, 89,204,120, 30,214, 53,199, 73,
+ 75, 88,143, 7,212,226, 82, 50, 90, 83, 20,178, 19, 95,158,247,152, 50, 54, 86, 86, 19,101, 85, 18,147,140,206, 39, 31, 48,198,
+178, 94,109, 25,251, 1,165, 18,151, 23, 23, 66,156,235, 90,121,150, 67, 96,204,133,207,156, 11,178,106,202, 12, 62, 18,171,177,
+ 66,210, 63,203,186, 18,151, 67,146,244,203, 72, 98, 10, 35, 15,251,123,148, 81,148,101,181,236,185,103, 21,251,252, 12,205,239,
+179,247, 62, 23, 36,158,155,155,219, 12, 10,146, 9,229, 48,244,226,117,183,194, 14,152, 5,118,242,220,192,126,215, 74, 26,168,
+151,239,131,117,197, 2,185,250, 80, 19,112,114,132,216, 69, 68,247,116, 44,175,181,254, 33,151,250,249,152,113, 38,127,125, 64,
+ 40,148,206,108, 71,231,135,109,134,137,232,188,203, 22,171,130,168,214,173, 41,176,249,139, 32,182, 4,139,177, 14, 84, 38,175,
+ 41,185,192,141, 54,185,147,211,203, 69,175,179, 7, 58, 68, 73, 47,243, 57,115, 92,165,179,131, 55, 9, 99,119,138,158,193, 79,
+ 28,135,142, 99,223,114,232, 90,218,161, 99,152, 6,250,161,163,239, 90,250,174, 99, 26,199, 60, 26, 19, 21, 44,218, 16,114,154,
+123, 0, 66, 76,167,145, 75,138,140, 62,210, 77,145, 46,105,186,100,232,177,116,104,198,148, 73,250,234,188, 19,147,219, 78,198,
+140,226, 67,140, 73,198, 96,253, 24,217,183, 19,119,251,129,215,247, 71,126,245,230,142,183,237, 68,115,253,146,111,254,228, 47,
+120,254,233,103,116, 67,207,237,205,141, 96,107, 39,159, 95, 8, 1, 27, 56,103,176,206,136,176,205, 24,193, 82,150, 34,112, 27,
+134,145,161, 31,243, 78,215,160, 49, 39,224,201, 98,179,146, 37,135,205,190,122, 99, 20,198, 25,140,179, 96, 52,209,104,146,157,
+ 19,108,242,135,213,130,218, 44, 21,117,105,177,250, 68,111, 63,239,186,213,226,237,214,185,103,143,143,186,245, 83, 48,197,217,
+173,156,211,214,212, 19,101,250,227, 86,254,247,167, 3,159, 4, 34,241,204, 2,247,254,114,255, 28,230,240,168,211,215,122,169,
+202,207,105,120,115,165, 44,203,157,180,124,196, 31,112,173, 63, 21,197,241, 3, 98, 91,117, 6,122,204, 95, 34,147, 18, 95,125,
+254, 57,219,170,162,113, 5,165,115,212,205,138,178,174,121,119,251,142,164, 19,175, 94,191,166,237,123,124,140,188,187,189,195,
+ 86, 53,151, 47, 94,240,155,239,191, 39, 26,197, 47,126,243, 43,186,105, 96, 12,130, 33,222,239,143, 84,205, 10,107, 29,125, 55,
+176,123, 16,225,216,219,155,119,130, 99,237,123,186, 94,200,104,251,195, 30,109, 36,196,163,235, 58,218,246,192,229,229, 5, 81,
+193,118,189, 65, 39, 77, 12, 48,244, 99,198, 65, 71,172, 43,100,165,150,197, 82,206, 89,172, 43,240, 17,198,113, 90,222,171, 16,
+ 2,201, 7,194, 56, 17, 38, 79, 97,100,138, 55, 3,138,170,178, 32, 70, 47,226,218,232,177, 86, 58,204,224,195,162,108,159,233,
+148,214,101, 11, 88, 38,189,137, 94,103, 6,157,136,254, 64, 41, 41,174,147, 98, 17,204,157, 3, 63, 66, 12,152,194,102,225, 82,
+ 34,248,144,197,186,242,163,182, 5,221, 32,106,246,182,237,168,202,154,152,146,176,198,203,114,201, 87, 72, 9,134, 97,204, 92,
+244, 60, 46, 79,129, 58,171,183,101, 95,171, 8, 81,254,221, 60,138,154,213,238,126,156,240,163, 4,189, 92, 94,110, 23, 65,113,
+ 89, 8,179, 60,228, 75,172,170,170,211,133,105, 36, 38,117,158,238,132,140,124,189,216,110,169,202, 82, 10, 33, 5,227, 48, 81,
+231,162,162, 44, 27,172, 53,236,118,187, 37, 68,229,120,236,152,166,128,159,100,215,111, 93, 33, 57, 26, 94,200,126,253,208,179,
+170,106,166, 97,196, 40, 77, 83,175,169,170,250,145,125,211, 89, 39, 93, 44,167,247,122,222, 77, 23,133,156, 89,201,123,156, 22,
+ 17, 90, 89, 22, 75, 44,235,255, 71,219,155,246, 88,118,165, 87,122,107,143,103,186, 67, 68,206, 36,171, 52,203,144,208,176,253,
+179, 13, 27,253, 73,112,255,130, 6, 12, 72,238, 6, 4,184, 33,187, 27, 82,151,170, 74, 85, 69,102, 70, 70,220,233,140,123,242,
+135,247,221,251,158, 27,140, 44,146, 82, 53,129, 68, 50,201,204,140,136, 27,231,238,253, 14,107, 61,139,254, 46,197, 76,129,136,
+ 97,162, 66,108,187,217, 98,236, 7, 72, 9,188,122,117,207,211,134,133, 58,103,208,180, 39,198,196,224,152, 5,214, 90,180,109,
+ 77, 69,161,209,180,138,140,145,191, 79,215,162, 18, 0,119,239, 3, 66,244,104,219,166, 4,188,228,149, 80, 78, 12,204,224,164,
+245,165,250,249,243, 35, 82, 74,104,219,174,216, 28,201,175,159,144, 16,176,221,110, 86,170,118,186,171, 22,231, 48, 47,203,141,
+215, 60,198,116, 83, 24,173,199,236, 47, 49,223,215,211, 79,141, 31,219, 97,176,183,240,234,199,185,149,205,221,166, 98,137,188,
+144, 47,113,163, 69, 60, 38,115,199,173, 33, 84, 14, 20,209,188, 11,207,214,180, 76,248, 98, 17, 85,186, 6,166,232,178,235,100,
+ 86, 46,200, 55, 26,179,218, 61,177,138, 58, 81,151,140, 20,225,221,136, 0,199,159, 7, 5, 49,228, 93,130,228,170, 54,165, 8,
+173, 64,185,182,200,116, 50,185,130, 11,128,131, 86,136,226,101,181, 64, 12, 14, 83,140, 36,150,147, 26, 34, 42,192,211,248, 89,
+203,116, 77,188,131, 64, 44, 73,113, 36,244,155,151,132, 97,138,152,166,136, 83, 63,227, 60, 76, 56, 79, 19, 46,139, 67,181,219,
+227,253, 87, 63,195,155,183,239,176,219,110, 48,244, 3,220, 60, 64,196, 8,196, 4,109, 13,180,182,168,235, 6, 77, 99,208, 86,
+ 6,214, 40,212, 21, 33, 90,117, 93, 65, 84, 21,146,214,232,251, 17, 62,144,192, 39,196,120,163,254, 95, 37,200,210,222, 58, 81,
+199,174,152, 85,159, 47,111,161, 69,185,208,147, 22,100, 25, 12, 9,208,128, 48, 18, 93, 93, 65,130, 53, 23, 49, 71, 81,230,195,
+ 49,178, 21, 77,114,178,152, 40,143, 81,222,147,139,213, 51,147,255, 95, 90,105,222,174,191,255,246,150,207,135,175, 44, 94,255,
+116,195, 75,160, 49,187,224,221,250,181, 67, 79,207, 59,254,248,236,178,149,215,157,110,124,102,239,184,174, 20,158, 37, 25, 10,
+241,131,237,122, 62, 0,158,239,185,214, 40,200,117, 71,127,219,213, 83,110,186, 17, 2,127,245,167,127, 14,145,157, 32, 49, 96,
+113,180, 22,114, 62,224,241,233, 4,109, 13,148,214, 72, 62, 33,184,128, 79,231, 51,118,119,123, 12,222,161, 69,133, 36, 21,162,
+144, 24,198, 9,167, 75,143,144, 4,218,174, 5, 36, 93,188, 77,211, 64,105,139,243,101,128,119, 20, 82,225, 22,186, 72,172, 33,
+245,245,249,124,198,211,211, 19, 54,155, 22,109,215,112, 68,169,194,227,225, 51, 92, 12, 48,166, 34, 8,185,160,120,223,102,211,
+240,133,110,208,180, 21,172,145,124, 1,201, 27, 33,224, 85, 72,152, 99,111,169, 32,179,134,220, 38,139, 91,200,194,102, 77, 1,
+186,212,141,101,145,214, 84, 84,213,154, 71,227,130,195, 51,132, 4,172,162, 6,194,197, 64, 30,127, 69,239,203,122,211, 96,152,
+ 6, 76,203, 72,246, 59, 31,209,116, 29,173, 1, 98,196,180, 44,168,140, 33,141, 1, 18,146,143, 32, 36, 60,117,119, 77,215,226,
+112, 58,114, 58,155,166, 64, 42,198, 73,143,211,132,182,109, 48, 12, 35,172,189,199, 52,205,228,247, 94, 28, 60,171,174,201, 10,
+101,224,220, 2, 83,213, 80, 74, 23,252,109,127, 89,138, 95,218, 88,226,139,231,130,170,107, 59,164,152,240,116, 56,162,239,123,
+220,221,223, 67, 42, 98,185,211,115, 67, 56,215,170,105,208, 95, 38, 56,231,240,240,240,128, 15, 95,125,192, 52,141,116,121, 77,
+ 51, 22, 94,119, 52, 77,205,144, 31,224,124, 57,227,221,219, 15,168,235, 6,151,203, 25, 66, 36, 84,181, 69,109, 45, 82, 12,100,
+237,234,218, 82, 88, 89, 67, 90, 6, 93,145,248, 77,152, 28, 34, 51,114, 17,181,160,170,106, 8, 33, 49,197, 8, 91, 91,204,203,
+196,150, 57,131,203,153, 68,140,209,123,152,186, 45,182,185,174,219, 80,160, 79, 4, 18,175, 40,199,113,160,201, 13,128,190,239,
+ 81,215, 53,154,182, 70,223, 95,208,118, 53,102,231, 10,110,150,168,123, 20,167,221, 52, 21, 23,234,100, 45, 75,194, 67, 41, 18,
+236,245,253,192,201,105,182, 92,238,206,205,152, 89,236,105,173,165,144, 32, 67, 66, 76,169,192,128,157,154,232,116,124,175,213,
+181,198,211,211, 83,225, 51, 64, 74, 44,227,200,221,117,132, 86,153,160, 72,197, 97,140,190, 88,224,192, 77,107, 74,223,143,169,
+142, 43,188,238, 45,199,226, 5,170,220,143,195,196, 62, 7,207, 68, 50,194,167, 76,201, 34, 31,224,247,253, 62,164,234,166,144,
+ 20, 13,165, 12,141,225,133, 46, 57,202,138,205,250, 42,143,145,121,191, 46,215,254,101, 65, 10,247,220,253,226,153,148, 63, 38,
+142, 42, 77,130, 77, 82,153, 66, 70, 48, 19,186,112, 60,148,240,144,112,128,240, 0, 60, 32, 2,139,172,200, 92, 37,161,137,255,
+206, 10,122, 41, 20, 91,136, 52,100, 86, 45, 2,132,132, 21, 36,164,137,222, 99, 90, 60, 46,139,199,105,137, 56, 57,129,227,162,
+112, 92,128,227, 18,113, 92, 2,206, 75,196,105, 14, 56, 76, 1, 15,253,130,239, 14, 3,126,247,249,130,127,249,238,140,127,254,
+237, 35,126,249,237, 35,126,251,212,227,236, 5,182,111,222,227,235, 63,249,115,220,189,121, 3,129,136,254,124,192,112, 57,193,
+ 45, 51, 41,102,173, 37,127,190, 49, 48,214,160,107, 26,116, 13, 85,160, 85, 69,202, 93,211, 84, 16, 21, 29,130,167,243, 5, 62,
+ 68,164,103,249, 99, 55,214, 50, 46,160,100,193,223, 94, 81,169, 81, 68, 64, 70, 8, 25,145, 84, 66, 82,162,248,231,161, 37,160,
+129,166,178,208, 28,216, 32, 86, 57,230,105, 53,152, 22,105, 5,126,225,130, 41, 62,235,145,111,213,239, 55, 25,129,183,132,182,
+159,146, 93,190, 94,201,220,168,237, 81,198,125, 47, 67,147,210, 45, 93, 65,252,128,125,243, 71,204,223,159,243,155, 95, 4, 53,
+ 61, 3, 58,229,194, 57,133, 0,149, 18,222,238,239, 80, 75,137,133,121,212,211,188, 96, 92, 28,164, 49,120, 58,159, 16,101, 68,
+183,221, 96,187,221,192,133,136,211,249,130,105,118, 56, 13, 3, 46,227,136,167,227, 1, 31,190,249, 6,218, 24,156,250, 30, 62,
+ 1,155,221, 14,218, 84, 56,247, 67,129, 34, 81,183,209,162,235, 54,104,219,142,179, 8, 12,172,169, 48,141, 19,162,247,188, 19,
+ 52, 24,199,145,132,155,222,193,212, 21,218,174,131, 54,116,168, 10, 78,235, 74, 44,158,149, 74, 16, 84, 4,185,243,117, 55, 56,
+ 62, 31, 3, 61, 31, 74, 33, 34, 21,247, 72,211,146,240, 74, 48,115, 93,172, 58, 82,165, 20, 98, 32,154,154, 16, 2,218, 40, 42,
+232, 5, 1, 65, 4, 68, 57,111,178,213, 75, 73, 98,214, 91,163, 89, 73, 62,148,105,154, 53, 26,117, 93,149,157,112,197,126,109,
+ 91, 87, 52,118,151, 18,167,126,192,226, 29,199, 21, 91,142,134, 93, 56,135, 59,178,170, 31, 24, 71, 34,140, 81, 68,167, 43,151,
+ 82,182,103,121,239, 48, 78,212, 73, 42,173,184, 59,172,153, 8,119, 61,188,167,105,130,177,134, 41,101, 26,227, 56, 23, 20, 41,
+125,218,129, 72,152, 12,182,137, 49, 66, 74, 82,114, 79,227,140,166,235, 0, 65, 23,209,233,120,130, 49, 22,239,222,189,131, 82,
+ 10,211, 52, 97, 28, 71,124,254,252, 25, 91,182, 49, 14,195,128,113,236,241,238,221, 27,104, 77,145,162,195, 48, 92, 1, 95, 82,
+150, 60,123,161,136, 6, 26,216,129, 97,217,174,151,197, 92,121, 68, 63, 12, 3, 49, 61, 52,173, 87,172, 49,244,223, 56,170, 52,
+134,171,133, 75, 10, 89,156, 14,132, 21,182,236,138,208,112, 46, 64,107,133,237,110,139,148, 18,134, 97, 64,101, 45, 23,163,146,
+187,105,130,215,208,235, 32, 25,238,178,176,251,192, 35, 49,221,145, 60,227,169, 76, 77, 50,192, 39,187, 47,180,209,252,125,162,
+ 84,181,113, 28, 32, 36,174, 86,236, 24,112,127,191,103,221, 78,100, 55,130,193,249,114,193,233,116, 46,216,221,124,241,135,232,
+ 33,100,194,102,211,161,170, 40, 34, 88,107, 13, 1,137,224,195,138,249, 30, 11,172, 44,242, 58,227,247,157, 41,235, 6, 64,227,
+ 39,253,147,158, 9,230,196, 23,176,151,215,223,145, 16, 1,137,242,134,146, 82,173,138, 4,113, 83, 48,144, 74,250,153,144, 75,
+ 48,121, 77,146, 39, 82, 66,114,132,223,117,196, 79,113,131, 51, 11,232,242, 37,125, 37,114, 69,128,139, 6,121, 69,135, 62, 39,
+132, 49,124, 1,171, 20, 46,165, 52,188, 99,159,233,250,247,114,194,151,144, 84,237, 39,208,222,125,246,233,154,151, 46, 53, 68,
+112,240,203,140,101, 30, 49, 79, 51,230,217, 97,152, 22,140,227,140, 97,116, 88, 60, 16,160, 0,213,160,217,119,184,123,125,135,
+186,107, 16, 83, 68,127, 57, 67, 35,113, 82, 29,211,232,180,228,136, 73,192, 26, 82,171,215, 21, 37,170, 37, 17, 8,228, 80, 87,
+136,117, 5, 88,139,120,161, 81,106, 96, 63, 43,141,123,174,185,189,133,113,158,114,252,233, 77,236,121,217,171, 36, 73, 77, 23,
+ 20, 32,180, 88, 89, 5, 19,132, 6, 1, 55, 50,175, 62, 73,132, 20,215,132,215,149,215, 92,174,194,101,197, 53,227,124, 93,112,
+136,107, 42, 89,137, 30, 93, 9,197,158, 91,211,196,247,188,227,162, 92, 32, 47, 14,233,211, 42, 45,110,245, 35,189,232,125, 79,
+215,144,152,231,151, 61,179,177,197,218,130,247, 3,197,198,243,202,250, 37,161,220,243, 17,155, 82,128,247, 1, 90, 8,232, 4,
+252,252,253, 87,168,181,129, 8, 2,210, 88, 4, 33,160,180,198,249,124,193,165, 63,227,235,111,126,134,167,227, 1, 49, 8,124,
+122,252,140,105,154,209,237, 55,240, 41,160,221,116,104, 55, 27,124,251,241, 59,156, 14, 71,132,152, 80, 55, 45,180, 5,134,158,
+128, 29,145,115,176, 83, 34,107,210,226, 29,142,159, 62, 66, 10,160,107, 91,204, 57,108, 37, 70,236,239,239, 32, 68,194,124,158,
+ 48, 12, 3,234,138, 4,103,211, 60, 99, 94, 28, 98,162, 29,100, 93,213,101,223,106, 45,237, 3,231,105, 70, 93,105, 40,105,224,
+157,135, 81, 38,231, 78,242,235, 77,150, 86,197, 5, 96,240,142,138,233,166, 65, 76, 1,222,121,248, 68,151,218, 52, 77, 12,176,
+ 33, 95,177, 54, 6,199,243,133,194, 51,124,160, 39, 34, 69, 40,101,138,157,139,138, 2,114,168,156,135,254, 42, 66,148, 2,109,
+219,194,205, 20, 78, 83, 25,139,105,156, 24, 53,171,233, 44,208,138, 34, 53,153,254,150, 57,237, 82, 74, 72,158,250,197, 24,139,
+162,221,179,191,251,116, 60, 99,183,219, 32,133,200,241,170, 20, 63, 74,209,164, 40,175,119,126, 3,122, 79,175,221, 60, 59, 76,
+243, 25, 41, 9, 52, 77,203,132,183,132,126, 24, 80,215, 13, 94,189,190,195,229, 50, 34,177,101,111,228,179, 48,239,253,231,121,
+129,181, 21,170,186,193, 60,142, 8, 33,225,120, 60,226,195,135,247,168,234, 26, 19,219,169, 98, 76,212,217, 87, 53,180, 38, 27,
+162, 21, 9, 31, 62,188,199,241,120,192, 60, 77,152,172, 65,101, 73,208,104, 42,131,167,167, 39,188,121,243, 6, 46, 46,152,134,
+ 17,122, 67, 33, 43, 74,211,247, 94,107, 77, 19, 66, 45, 16,199, 1, 11, 91,222,134,137,208,174, 82, 72,120,231,208,181, 45,250,
+126,128,224, 95,103,196,236,178, 44,216,111,119, 24,134,190,176, 62, 50, 40, 39,173, 70,225,211, 56,150,192,175,202, 90,136, 36,
+ 16, 35,223, 33,146,166,121, 33, 6, 40, 40,104, 99,152,194, 71, 23,117, 6,130,109, 55, 29,169,237,131, 71,246,224,184,197,163,
+174,218,162,228, 71,154,113, 58,246,133,193,175, 21, 77,147,104,172, 79,249, 6, 66, 4,102, 34, 44,144,114, 66, 20, 9,243,236,
+ 48,207, 14,109,219, 80, 2, 94, 20, 69, 81, 63,141,243, 53, 11, 93,105, 72,153,184, 32,138,120, 73, 0, 36, 87, 22,183,117,115,
+155,255,251,191, 66, 40,151,110, 15,209,244,188, 39,186, 78,223,243,225, 44,149, 98,161,139,188,249,132,174, 9,111, 88,117,214,
+ 40,217,238,215,139, 52,149, 14, 61,135,200, 43,246,132, 19,110,144, 12,254,241, 89,114, 86, 54,197,167, 36,232,128,137, 18, 49,
+ 74,226,204,231,221,187, 80, 20,232, 34, 37,237,205,197, 21, 55, 75,224,136, 60,246, 16, 72, 44,146, 89, 66,132, 11, 52,242, 47,
+150, 60,222,185, 59, 31, 49, 44, 17,167,168, 49,200, 13,122,217,224,130, 26,231, 84,225,148, 42, 28, 67,133, 81,109, 33, 54,175,
+177,121,247, 21, 94,253,236,231,184,255,230, 27,108,222,190,133,100,117,234,229,124,192,116, 57,193,185,153,198,211, 82, 65, 26,
+ 67, 65, 44, 90,193,104, 1, 37, 35,140, 2,172,165,177,187,181,134,148,231, 90, 19,233,206, 90, 44,206,227,120, 60,149,157,240,
+250, 1, 17, 55,183, 46, 71,155,166, 43,202, 85, 0,197,214, 37, 40, 64, 30, 66,145,120, 78, 26, 5,104,222,179, 27,133,186,109,
+216, 70,152,158,137,209,211, 85,236,150,110, 53, 26, 73,200, 18,253,154, 94,240, 90, 18,195,253,150, 52,119,155, 90, 38,174,193,
+ 66,107, 84, 66,206,199, 92, 23,150, 69,249,190,170,104,159, 93,168, 55,201, 72, 55, 31, 44,125,185, 21,191,154,217,127,112, 55,
+254, 82, 39,254, 67,191, 39,191, 89,137, 4,152,208, 84, 21,190,126,247, 1,141,174, 81, 87, 53, 66, 2,206,151, 1, 41, 68,252,
+226,191,255, 19,241,208,221,130,126,236,177, 68, 15,143, 8,221,212,104,186, 22, 79,143,143,132,248, 20,192,101,232, 97,235, 10,
+221,102,131,170,110,224, 67,194,238,238, 30, 66, 72, 56, 46, 98, 73,201, 75, 74,111,178, 94,181,144, 74,193,241,110,119,187, 33,
+ 97,213,211,225,137, 70,165,242, 74,237,202, 33, 21, 49,210,228,134,246,209,190, 4,230,120, 79,113,168,109,211,150,221,182,214,
+154,147,222, 28,141,131,149, 42,151, 18,216,254, 87,215, 85, 17, 91,105, 77, 19,171,188,123,206, 14,150,170,182, 36,110,211,122,
+ 21,117,203, 74,246,101,230,139,132,248, 12,214,104, 76,227, 8,201,126,110, 41, 37,118,187, 45,154,182, 97, 69, 53, 21, 28, 4,
+105,161,160,142,146,174,200,171, 56, 41, 37,156,247,168,234,171, 24, 47,119,121, 25,178,130, 4, 2,160, 44,174,164,193,101, 10,
+ 25, 41,250, 77,225,183, 3, 64, 93,209,228,173,239,123, 10, 97, 97,110,194,195,195,103, 24, 99,153,138, 70,211,207, 97, 24,209,
+182, 29, 20,195,174,134,113,196,166,107,137,188,102, 43,214, 0, 37, 12,227,132,166,161, 20,197,121,153,136,210, 25,249, 44,213,
+138, 39,157, 52, 46,175,171, 26,167, 19,165,220,133,224, 97,140, 66,211, 86, 20, 91,106, 44,250, 75, 15,239, 60,117,208,188,195,
+ 38,193,224,140,105, 36,239,124,215,110,158, 21,172,244, 76, 17,163, 32, 22,126, 64, 83,215, 69, 19, 97,173, 33, 31, 58, 4,230,
+105, 34, 1, 29, 99,117,115,203,161, 88,215,176,254, 0, 0, 32, 0, 73, 68, 65, 84, 74,161,116,253,123,242,247,110, 94,102,110,
+222, 88, 80,105,100,153,218, 72, 69, 41,118,203, 50,195, 86,164,229,178,198, 64,128,166,159, 41,102, 65,166,226, 92,129,153,195,
+ 93, 18,188, 7, 82,146, 24,134, 5, 85,213,194,152, 10, 90, 87,180,222,112, 11, 82, 74,148, 72,201,214, 51, 89,104,139, 21,113,
+ 3,124,130,119, 17,211, 56, 35, 69, 74,124, 28,199, 9, 79, 79, 71, 44,139, 47,193, 56,198,216, 21,176, 40,174, 52, 56,233,230,
+140,122,169, 75, 95, 55, 36, 82, 94,147,217, 11, 24, 37, 61, 67,131,228,195, 45,137, 91,172, 76, 66,226,140,117,174, 20, 86, 80,
+149, 24, 67, 57,211,181, 80,208, 66, 93,199,226, 44, 66,202, 7,237,117, 50, 42,202, 40,127,205,233, 22,156,238, 6,182, 75, 73,
+ 5,246,174, 38, 32, 5, 4, 79, 17,171, 20,212, 34,203,155, 32,174, 34, 27, 75,178, 22,163, 32,215,167,114,209, 3, 8,201, 29,
+171,224, 74,217, 23, 65,131, 18,100,121, 72,156,123, 27, 67,198, 3, 90,174,108,137, 34, 20, 1,204,206,225, 50,206,184,204, 11,
+ 28, 52,116,123,135,106,255, 26,221,253, 91,108, 95,191,193,254,237, 59,236,222,190,129,217,180, 16,214, 64,104, 1,231, 22,244,
+ 61,101, 19, 7, 23,201, 14, 39,105,220,153, 81,151, 90, 82, 18, 28,137, 54, 20,185, 5, 88, 61,218, 88, 11,105, 13,146, 82, 16,
+214, 0,149, 65,112, 30,253,113, 96,101,110, 68, 76,190, 60, 36, 41, 43,193,113,133,246, 64, 16, 15, 94, 51, 1, 15, 74, 66, 88,
+ 5,161, 21,146, 17, 72, 6,180, 91, 87, 18, 48, 52, 57,128, 53,176,149,134, 22, 57,185, 44, 3,103,120,255,152,196, 77,176,137,
+ 44,185, 36, 89,142,152,174,222, 48, 22,142,164,231,184,220,140,126, 21, 47, 88,195, 50, 40, 38,231, 13,139,239,247,238, 72,234,
+ 42,244, 20, 28,241,202, 76,117, 72,218, 32,173,159,227,226,107, 23,217,134, 39,110, 62, 30,110, 70, 94,184,121,142,111, 21,243,
+ 47,195, 33,214,149, 79,252,158,253, 83, 20, 2,163, 22,146, 41,116, 9, 42, 38,124,120,253, 14,247,247,175,112,158, 38,244,222,
+225,227,211, 19, 92,138,248,197,175,126,133,118,179, 65,221,180, 5,115,249,219,223,253, 6,178,178, 8, 10,248,246,227, 39, 8,
+161, 81,219, 6,253,105,128,155, 60,154,186,131,213, 21,172, 50,112,211, 12, 37, 19,198,177, 39, 46,117,215,160,110, 8,110, 68,
+177,165, 17, 33, 69, 76,243, 4,165, 37, 62,124,245, 30,117, 75, 56,212,190,239, 97,171, 10,218, 84,104,154, 22,219,253, 14,139,
+119,100, 45,226,149, 76, 70,198,210,100, 45,194, 47, 11,186,118,131,133, 49,174,243,226,177,120, 10,181,200, 20,177, 24,232,192,
+118, 46, 64, 43, 3,107, 91, 44,236,139,207,120, 81, 41, 36,243, 53, 18,106, 91,163,107, 41, 29,142,178, 27, 72,129, 76,212, 55,
+ 85,168,133, 49, 68, 32, 82, 42,214,226,102, 72, 77, 36, 56,163, 12,148,164, 66,195, 47,180, 18,144, 66, 81,124,171,181,212,189,
+ 59, 26,147,167,152, 74,122, 23, 0, 12,253,128, 29,219,218, 74, 50,100,244,156,147,174, 17,162,131,173, 13,180, 53,172,175,137,
+ 56,158,206, 72, 66, 96,156, 23,220,191,186,227,209, 61, 13, 78,149, 86, 92,168,128,105,124,116,152, 79,243, 12, 91, 53, 72, 32,
+113,157,177, 22,167,243, 5,227, 52,225,213,253,107,184,197,193,112, 68,243,166,107, 41,166,213,185, 82, 12,157, 78,103, 52,109,
+ 87,112,169,227, 48,160,174, 42, 72, 0,141,181,240,193,227,120, 62, 67, 72, 74, 27, 59, 28,143,132, 92, 21, 2,214,214, 28,172,
+ 35,208,182, 29, 66,200,200, 84, 70,240, 90, 82,213, 63, 30,143, 8,137,180, 30,182,178,236, 26,160,175,155, 98, 87,175,235,176,
+ 24, 34,137,123,141, 68,138,158,249,252,146, 39,139,137,186,111,163, 33, 36,141,199, 37,159, 89,149,181, 72, 33, 80, 74, 94,116,
+101,159, 77,130,106,186,111, 66,233,182,169, 1,164, 14,159,180, 38,243, 60,179,149,151,210,245,202,235, 32, 4,217, 26,145,208,
+180,117, 73, 84, 92,150,153,199,255,177,208,221, 82, 76,196,240, 79, 2, 79,159,159, 96,117, 5, 64,162,170, 26,108, 54, 91,104,
+ 94,215, 54, 77, 5, 41,128,237,118, 11,165, 52,150,197, 67, 43, 91, 66, 90,230,105,134,115,158,189,231,190, 68,176,174, 83, 39,
+ 37,175, 3,214, 83,188,236, 85,207,196,194,219, 88,214,107,118, 37, 93,134, 66,124, 81, 69,252, 61, 52,152, 72,108,202, 21, 37,
+ 28, 99,141,249,204,217,235, 70,106, 24,169, 41, 23, 93, 82, 54, 47,214, 68,173, 28,252, 33, 37, 2,167,168, 65,102, 17,221, 85,
+180, 68,211,115, 10, 57,209,146, 47,142,232, 48,187, 5,179, 75, 4,169, 89,229,104, 95, 83,229,210,205, 15,178, 77,173, 79, 96,
+198,111,178,144, 79, 9, 93,126, 45,132,162, 80,131,213,139,136, 72,127, 70, 41, 13, 99,236,234, 98,215, 84,176, 24, 9, 5, 32,
+ 58, 10, 44, 24,198, 17,227, 56,225, 50,244,152,150, 9, 46,204, 36, 18,137,228,209,156,167, 17,203, 60, 34,250, 0,163, 43,212,
+117, 7,169, 45, 89,247, 4, 49,173,141, 82, 52,126,148,138,161, 61,154, 97, 46, 10,218,104, 84, 77, 3,101, 13,132, 53, 32, 58,
+174, 66,127, 62,227,116,186,176,101, 59,191,126,204,223, 79,177,144,251,232,235, 15,180,222, 16,128, 22,130,252,233, 70,130,125,
+110,128, 81,128,145, 72, 82,210,100, 67,145,144, 78, 40, 5, 91,105,216,124, 91, 11,201, 82, 67,246, 85,151, 24, 84,178, 99, 61,
+ 11, 44,189,221,112, 39,121, 21, 42, 22, 26, 92, 40,176,142,194,206,127,166,134, 79,215,201,250,106,250,144,138,192,241, 22, 58,
+ 19, 75, 57, 23, 17,233,181,226,130, 54,221,184,231,196, 21,239,138,171, 2,254,185, 56,174,164,237,229, 80,158, 76, 69,140,233,
+135,119, 96, 32,224, 13,196,237,234, 33,166, 68, 83, 33, 31,232, 61,226, 35, 42,105,240,103, 63,255, 99,132, 24, 49,199,136, 67,
+223, 3, 90,145, 31, 61, 80, 81, 75, 24,215, 10,191,254,245,191, 64, 40,122, 46,102,239, 17, 18, 80, 87, 45,230,209,225,243,227,
+ 1,117,221, 97, 28, 23,124,247,241, 19, 98,136,120,255,246, 29,220, 60, 67, 43,137,186, 38, 1,218,195,195, 39,246, 99, 43,116,
+ 93,135,221,110,199,144, 18, 58,176, 31, 62, 63,224,233,233, 9,219,221, 14, 2, 18,219,237, 30,227, 56,226,225,225, 51,117, 73,
+154,240,153, 90, 41, 74, 46, 83,154,190, 46,182,134, 17,255,156, 0, 54, 82, 42, 58,200,133, 64,211, 52, 64, 4,130, 11,228,227,
+230, 34, 47, 37,178,149,230,195, 85,107,206, 49,224, 67, 91, 43,133, 20, 18,140,162, 40,204,192, 86, 35,239, 29, 18, 4, 22,231,
+ 97,140,197, 50,123,220,237,246,232,199,161, 64,138, 2, 71, 62,223,223,221,195, 45, 30,211, 48,162,169, 42,120, 71,140,116,242,
+ 40,211,247,215,123,135,166,174,232, 92, 74, 52, 77,236, 47,103, 66,177,106, 69,244,203, 20, 33,165,130,177, 6, 77, 91,179,248,
+ 55,150, 9, 32,117,115, 10,117,219, 65, 25,133,105,158, 0,166,144,245, 61,117,193,164,124,247,144, 90,160,109, 43,108, 54, 13,
+234,166,197,199, 79,159,161,149, 65,221,116,184,244, 3,180, 85,152,151, 25,195, 48, 96,191,223, 99,153, 40,192,164,235, 90,182,
+197,109, 74,198, 67, 74,145, 85,229, 22, 62, 68, 28,143, 39,108, 54, 27,154, 50, 6, 18,237, 41,169,209, 15, 35,170,186,134,210,
+ 6, 82, 41, 28,158, 14,172,230,182,248,248,240,176,138, 10,213, 24,121,175,190,204, 11,220, 52,227,238,254, 30,199,211, 25,227,
+ 52,160,105,106, 52, 13, 17,252, 34,127,205,218, 80,188, 44, 18, 96, 52,117,217, 90, 1,222, 83, 58,157,173,106, 36, 33, 33, 53,
+197,180, 82, 81,232,168,137,211,170, 0,137, 36,128,166,174,224,252,130,121, 25, 32,181,130, 53, 21,175, 58, 44, 78,199, 19, 3,
+199, 36, 41,243, 89,124,232, 25,145, 59, 14, 99,241,234,103,214,123,224, 28,146,221,126,139,170,174,202,247, 52, 68,143,113, 26,
+ 96,173, 97,166,125,128, 91,102,254,217, 83, 10,158,144, 56,157, 46, 24,199, 9,142,189,238, 41, 69,156, 47,103,132,232, 32,100,
+ 66, 85,181,228,122, 98,213,125,182, 13,102,218, 30, 77, 10, 35, 7, 13,133, 50, 53,204,107,226, 92,188,172,161, 51,107,151,193,
+ 79, 18,202,253,216,161,252,245, 71, 42,157,139,144, 18,218,152,226, 7, 21,171,124,113, 89, 20,239, 44,207,207,221,124, 90,197,
+181, 38, 38, 59, 9, 64,164,200,255, 78,104,201,252,145,198,105, 46,233, 65,207, 18,224,139,202,250, 58,206,140, 72, 43, 40,254,
+173,112,233,122,177,231, 84, 46,197, 80,255, 16, 72, 77, 10,200,178,163, 86,138,118,104,148,210,166,138,170,158,176,129,186,248,
+100,137, 76,228,110,162,244,140, 49,208,130,232, 84,185, 98,172,170, 10,166,178, 69, 60, 40, 57,102, 86,114,124, 43,137, 63, 8,
+225,106,140, 46,107, 8,161, 13, 68,101,168, 88,178, 10,194, 40, 36, 23,240,248,240, 25,167,203,133, 63,239,188,138, 64, 9, 5,
+ 17,171,139,235, 42, 74,188,166,207, 9,201, 33,227,188,175, 20, 89, 32,199, 69, 87,190,216,173, 53,132,154, 92, 21, 72,224,172,
+123,177,194, 4,255, 40,203,215,139, 75, 30,220,196,158,254, 62,254,123,186, 98,144, 86,221,115,252, 30,114, 54, 23, 0, 95, 26,
+135,199,130,118, 92, 79,123,240,130,253, 13,171, 2, 36,221,238,216, 95,216,133,173,223,124,235,212,185,148, 18, 49, 11,178, 86,
+131, 3, 50, 16, 41,141,237,245,253, 61, 54,155,142, 4, 53, 49, 97,179,217, 97, 89,104,237, 4, 8,236,118,119,232,251, 1, 15,
+159, 31,209,118, 91,188,123,247, 30,206,121,116, 93, 7, 83, 85, 72, 74,226,216, 95,240,246,253,123,248, 24,176,120,135,237,126,
+ 7,161, 21, 78,253, 5,191,251,246, 59,236,118,123, 74,111, 11,129, 57,232, 26,219,221, 14, 82, 74,156,207,103,116,221, 6,219,
+237, 14, 33,208,222,125,183,223,195, 24,139,237,150,125,195, 16,104,170, 10,187,205,142,236, 62,129,230, 51, 74,106, 76,195, 8,
+191,120,184,197,209,184,215, 59, 62,188, 8, 59,155,223,167,130,167, 19, 42,171,215, 37, 32, 36,113,228,105,149,154, 74,160, 75,
+206, 72,207,136,217, 60,112,179,214, 96, 89,230,114, 81, 1,100,147, 90,220,130,253,126,135,190,239, 25, 44,146, 74,140,107,215,
+117,172,242, 22, 55,171,163,182,105, 56, 51,252,192,186, 32,194, 66, 47,243, 66, 41,110, 82,149, 21, 23,157, 65, 52,114,207,207,
+ 76,101, 43, 44,203,132,101, 89, 80,215, 85,249, 92, 51,216,164,109, 91,154, 72,240, 84, 48, 70,130,246, 12,195,128,186,166, 49,
+125,221, 52,216,237,118, 72, 41,225,116, 60,151,125,254,211,211,129,119,176, 10,195,208,163,235, 90,128,189,212,199,227, 19,246,
+251, 29,249,245,141,198,118,187,129, 82,146,195, 69,200,254,167,181,198,233,120,194,253,253,171, 82,180,214,117,195,236,120,226,
+200,207,243,140, 77,215, 98,153, 38,188,123,251, 6, 41, 70, 60, 61, 61, 22, 75,151, 53, 22,167,211,153,252,211,108,193,171,234,
+ 10,211, 52,227,114,185,176,194, 59, 66, 10, 82,201,167, 72,202,243,121, 89,120,218, 49, 83,129, 83,215,133,235,190,182,105,101,
+ 95,119, 78,138,203,172,128,108,131,110, 26,162,224,101,145,157, 49, 26,125,127,193,253,253, 61, 46,151, 51, 82,140,252, 60, 76,
+ 68,250, 99,123,162, 49, 26, 66, 10,248, 24, 11,235, 94,107,133,101,158,113, 56, 28, 8, 23, 92, 91,104,163,209,180, 13, 18, 0,
+231, 29, 66, 12,112,193, 33,138, 4,161, 4, 54,155, 14,214, 86, 56,159, 47,136, 49,226,233,233, 9,195, 56,224,116, 58,225,237,
+219,183,216,237,182,156,192, 55,150,179, 33,211,234, 72,187, 18,191,200,171, 88, 55, 6, 47, 37, 72,190, 68,160,252,131, 93,234,
+233, 25,110, 51,166, 84, 58, 40, 33, 73,152, 32,164, 92,141, 71, 83, 73,239,146, 0,193,105,196, 58, 88, 50,127,146,169, 4, 60,
+ 72, 14, 76, 49, 74, 80,100, 40,247, 79, 49, 1,227,188,240, 55, 93,124,241,179, 75,153,179,254, 12,185,119, 67, 43, 19, 87,200,
+ 72,126,161,165, 82,101, 15,114, 29,209, 99, 5, 52,225,189,148,144, 12, 59,160, 49,188,210,178, 16,174,242, 30, 72,101,143,190,
+214,168, 12, 41,215,219,166,129, 49,186,136,110,136,182,199,197,143,202, 9, 77, 68,195,178,214, 80,128, 65, 85,161,170, 12,180,
+150,176, 90, 67, 24,141,100, 52, 96, 12, 96,233,231, 56, 46,248,237,111,191,197,101,156, 41,141, 8, 2, 33, 93,167, 34,229,162,
+ 73, 2, 49,208,142, 48,173,118,214,185,235, 46,137, 52, 98, 37,144, 83,178,136,210,147, 4,116,101, 74, 12, 33, 86,252,250,235,
+119, 51,253, 43,202,195,231,164,183,151,163,125, 95,170, 21,200,166,151,187,126,249,236, 57, 16, 37,109,107,237, 63,127, 89,140,
+ 34, 56, 30, 87, 60, 39,191, 22,168, 13,189, 41,113,243, 67,202,235, 69,243,146, 79,189,124,188, 18,222,179, 26, 73, 50, 69, 43,
+242,231,167, 33, 97,165,198,207,191,254, 6, 86,155,146,215,252,233,225,129, 82,194,248, 43,107,218, 6, 79,199, 51,148,177,168,
+235, 22,135,195, 9, 31, 31, 30,136,200, 53, 79,120, 60, 60, 33, 9,224,233,233, 9,227, 52,209, 46, 52, 37,252,250, 55,255,130,
+199,195, 1,175, 95,191,193,102,187, 67,219,118, 16, 66,161,109, 59,116, 93,199,190, 93, 18,254,188,123,247, 30,117,221,160,109,
+ 91,220,221,221,195,154, 10, 90,105, 92, 46, 61, 98, 4,255,153, 13,148, 84,148, 91,176, 56,206, 92, 80,176,166,166, 1, 56,179,
+196,179, 8,170,170,106, 72,173,139,109,241,234,237, 94,143, 20,105, 39,106, 43, 3, 99,105, 71, 74,130,183,235,247, 38, 71, 85,
+ 70,238,186,109,101,177,221,110, 96,173, 46,177,151,214, 82,186, 87,136, 30,214, 16,220, 10,145, 14,248, 44,182,115,110,166,180,
+ 56,145,208, 52, 22,109, 87, 97, 28,122,116, 93,199,127,135,197,194, 57,236,244,190, 32,210,100,136,192,225,120,161, 17,181,148,
+ 88,120,109,145,231, 60,235,189,121, 74, 17,247,175,238,160, 53,165,186, 57,231,176,217,108,112, 56, 92, 10,195, 61,147,244,242,
+142, 85,107,131,154,147,190, 30, 30, 30,176,221,110, 17, 66,228, 31, 1,154, 51,206, 77,165, 81, 85, 84,244,159, 79, 71, 24, 67,
+157,102, 74, 1,117,109,209, 52,150, 5, 88,116,185, 12,195, 4, 1,137,253,110, 15,169, 40, 54,213,251, 0, 37, 21, 54,221, 6,
+243, 56,225,116,120,194, 56, 92, 48,141, 3,222,189,127, 11, 33, 40,239,156, 50,203,101, 57, 19,133, 32,149,119, 2,104, 90,161,
+232,204, 90,167, 25,130, 53, 34, 82,136,194, 80, 15, 33,114,200,141,133,100, 31,123,246,221,103, 17, 98,142,224, 37,245,191,226,
+ 41, 92, 66, 91, 55,104,155, 22,137,109, 98, 74, 73,118, 11,140,120,245,234,142,154, 13,214, 80,196, 16, 8,216, 37,105,221, 25,
+248,189,225,131,135, 91,133,229,164, 16,209, 95, 46, 68,243, 75, 9,193, 59,196, 64, 92, 4, 74, 83, 35, 1,248, 60, 79, 20,110,
+179, 44,104,218, 14,139,163, 12,249, 97, 24,224,188, 67, 63,246,148,156,201,103,216,249,124, 38, 24, 82,125,229,139, 72,214,132,
+121,239, 11,222, 56, 91, 50,115, 16,207,115, 20,236,139,205,204, 90, 48,247, 7,235,211,159,227, 50, 69, 30, 27, 40, 34,198, 61,
+ 51,207,139,152, 86, 62,247,184,202,165, 78, 55, 70, 38, 41,105,199,171, 21, 80, 25, 5,171, 5,172, 18, 80,124,186,186,144, 48,
+206, 11, 92, 76, 55, 42,234,151,173, 77,177, 4, 70, 60, 23, 35,221, 84, 72,129,177,173,252,181,248, 64, 21,102, 90, 81,175,214,
+234,104, 98, 61, 83,199,218, 84, 22, 86, 17,182, 53, 39, 39,229,136, 74,107, 76,249, 57, 91, 46,140, 81,168,140, 38,102,180, 36,
+239,107, 74,145, 66, 86,172,230, 67,137, 46,253,156, 72, 84,213, 22, 77, 93,243,229, 94, 17,237,205, 90, 8,109,144,180,132, 48,
+ 26,227,227, 9,255,240, 15,255, 13,147, 11, 76,220, 3,239,180, 86,187,223,130,166, 77,136, 81, 60,211, 75,228,113,118,190,192,
+229,234, 7,239,214, 5, 0, 45,160, 43, 2,116, 96,197, 51,191,237,178, 25,188,243,251,124, 96,207,109, 94,235,190, 88,188, 92,
+149,102,119,195,151,186,245,244,162, 7, 77, 60, 79, 94,189, 10,236,110,126,185, 10,153,121, 86, 49,188,196,114,255,146, 69,237,
+165, 55,222,139,140,119, 94, 63,209,132, 68, 94, 47,179,152,240,106,183,199, 31,125,243, 51, 52, 85,141,221,118,139,167,167, 39,
+116,219, 13,193,119,141,193,238,110,143,203, 48, 98,241, 30,151,126,192,231,167, 39,204,110,225,206, 41, 98,113, 11, 94,189,126,
+ 13, 0,184,191,191, 47,251,218,188, 54,218,108,182, 8, 49,226,215,191,254, 53, 90, 30,225,231, 3, 85, 8,137,221,110,143, 63,
+253,211, 63,195, 60,207,152,166, 9,191,249,151,223, 20, 27,155,146,138,208,150,138, 46,242,101,156,145, 66,194,216, 83, 78,183,
+228,124,243,124,153,143,243, 84, 32, 49,229,107,228,201, 4, 9,197,200,105, 18, 87, 76, 5,185,122, 61,180,210,229,215,116,105,
+134,242, 30,145, 82,194, 26,139, 24, 34, 91, 63, 21, 23, 11,161, 4, 22, 81,218,214,213, 78, 71, 0,145, 0,169, 4,154,182,134,
+119, 11,218,166, 70,219,214,216,109, 59,156, 78, 7,104, 77, 7,111,142, 78,245,206, 83,241,174, 53, 66, 34,184,142,247,129,222,
+ 99, 33,209, 72,150,217,243, 90, 43, 36, 36,180, 29,169,246, 19,104,125,145, 5,130, 57,188,134, 10, 28,189,122, 93, 4,123,219,
+ 45, 43,170,169,147,172,106, 18,147, 37,134,113,101,210, 26, 37,148,229, 41, 70,228,179, 71, 64,177,253,202, 88,242, 71, 91,107,
+ 81,215, 21, 9,200, 56, 27,254,227,199, 79, 80, 70, 99,154, 39,154, 64, 74,250, 58,165,144,216,239,182,204, 46, 39,145, 89, 94,
+ 71,228,156,139,156, 72, 23, 19,104, 92, 47,201,254, 22, 60,173,205,148,214,164, 54, 79,188,131, 38,100, 26,234, 28,207, 27, 81,
+ 72,105, 82, 10,180, 77, 3, 1,186,248, 73, 59,161,203, 37,151,131,109, 28,127,110,118,197,249, 23, 72,197, 70,183,221,110, 96,
+ 43, 67, 72, 92, 41,208,118,204,198,247,129,119,217,180,203,151,146, 69,114,172,217,210,122, 5,147, 17,178,104, 43,144,128,224,
+ 61,148, 84,232,218, 22, 93,211,192, 40, 13,239, 28,250, 97, 40,182,206,186,174, 73,175,160,200, 74, 71, 30,125,106, 48,172, 49,
+120,117,119, 15,196,136,121,162,212,187,202, 90,158,188,210,157, 64,227,248, 21, 12, 43, 95,212, 49,222, 64,145,114,209,155,201,
+125,121,175, 94, 62,247, 31,171,218,253, 65, 64, 77, 25,101, 70,218,223,176, 5, 41,143,101,214,244, 27, 33,196, 53, 79,252, 5,
+ 14,119, 70,171,230, 8, 63, 33, 35,148, 76,208, 90,208,154, 87, 94, 59,180,197, 71,244,147, 67, 18, 57, 21,236,165,139,253, 26,
+197,185, 86, 80,223,136, 14,120,103,151,177,179,185, 74,150, 82,192,199, 0, 81, 4,106,162,140,161,229,179,100, 54,202,150,182,
+133, 82, 68,170, 94,170,238, 26,238,202,155,170, 66, 93, 85,229,162,207,163,248, 28,215,151, 56,129, 75, 51, 14,208, 90,186,192,
+ 43,107, 56,142,145,247, 80, 90,209,254, 80, 73, 70,226, 42, 36,169, 0,109,128, 40,240,171,127,252, 5,254,241, 31,127, 73, 33,
+ 20, 66, 20,208, 71, 74, 98, 53, 98,164, 61,219,149,228, 38,138, 18, 30, 18,136,249,130, 38, 36, 96, 65,103,102, 6, 65, 82, 2,
+ 66, 11, 8, 35, 57,243,253,217, 85, 30,227,109, 55,205, 59,233,252, 44, 32,221,134,149,172,145,178, 98, 5, 96, 33, 22,130,248,
+222, 24,191,252,187,184, 85,217, 10,188, 36, 88,139, 87, 75, 27,110,199, 88,249,243, 76,156,176, 22,112,181,184,125,121,109, 32,
+ 94, 36, 58,253, 84,159,250, 77,113,153, 13,127, 49, 21,177,156, 18, 18,127,252,179,159,163,174, 42, 12,125, 79, 29,186,214,152,
+150, 5, 62,134,162,245, 88,156,135,177, 21, 92,136, 24,198, 17, 1, 2,111,222,188, 37, 13, 69,136,232,251, 30, 41, 37,124,251,
+237,183,184,191,191,199,253,253, 43,180,109,135, 87,175, 95,227,213,171, 87, 16, 66, 97,127,247,138, 64, 38,227,136,115, 79,184,
+ 80,107, 13,182,219, 14,199,227, 1,159, 62,125,194, 48, 12,216,237,119,216,110,183, 28, 65, 90, 97,191,219,225,110,183,167,116,
+172,105,194, 50, 78,216,111,119,204,218,150,208,182, 34,101,177,160,200,208,190,239,203,133, 10, 16,206, 52,198, 4,231, 2,241,
+ 34, 86, 44,138,236, 87, 15, 49, 32,122, 18,197, 26, 77,239,159, 24, 61,180, 81,220,189,115,172,104, 76, 55,168, 89, 89,242, 34,
+ 88,176,199,157,124,140, 17, 93,219, 66, 41,197,130, 88,122, 2,170,138,138,103,218, 73, 19,177,172,109, 27,216,202,112,135,234,
+161,185,128,168,172,197, 60, 47, 52,178,158, 23, 52, 77,139,166,109,203,179,147, 85,208,249, 44,104,154, 26,227, 48, 32,248,128,
+134,197,107, 57, 82,149, 8,110, 53,191, 30, 75,185,128,215, 66, 40,231, 73,244,150,187,215,251,251, 61,134, 97,162, 75,135,157,
+ 57,217, 89,144,199,216, 25, 22,228,157, 67, 93, 25, 44,243,136,186, 34, 18, 97, 68,128, 84, 64, 18,244,218, 88, 91,193,185,229,
+166,177, 89,102, 7,231,169, 3,237, 54, 29, 42, 78,165, 27,199,145, 20,227,206,113, 10, 26,169,233,181,210, 8, 62,176, 80,174,
+194, 48,142,148,135,161, 20,154,170, 46, 17,220,148, 68,201,170,247,202,150, 41, 11,100,130, 46,130, 65, 89,114, 26,188,119, 5,
+115, 77,171, 10, 94,147, 38,194,205,230, 66,206,123, 15,201, 25,237,198,144, 40,206, 57,143,205,102,139,101, 89, 48,241,154,104,
+ 94, 22, 14,145, 2, 7,232,208,107,218, 52, 13, 93,176,146,186,104,153,128,202, 24,212,182,194, 52,142,156, 18, 39,208,212, 84,
+ 96,135, 16,112, 62,159, 41, 75,129,133,132,158,223,143,243,180,192, 45, 30,175, 94,191,134, 49,182, 92,242, 49, 6, 92, 46,180,
+ 2,202,119,200,151, 80,209,241,217,133,190,134,209,228, 98,121,125, 6,133, 16,254, 0,157,122,194,179,228, 45, 20,172, 35, 98,
+ 66,101, 44,148,212, 4,114,137,162,192, 62, 4,110,111,128,178,199,226,174, 78, 32, 66,138, 4,173, 18, 89,184, 20,239,224,101,
+130, 18,164,156,142, 41, 97,152, 23, 92,198,153,112,174,233,251,187,135,132,240,204, 42,148, 85,244,215,233, 66, 66,174,134,242,
+248,147,246, 38, 36,162,241, 5,100, 33, 57,161, 14, 9,101,231,153, 99, 85,181,214, 37,182,209, 90, 93,170,174,156, 17,108,173,
+ 41, 35,118,205, 59,243,188,159,206,196,189,140,208,181,133,137, 79,191, 55, 87,113,154,255, 27,141,244,137,207, 30, 37,200, 94,
+150, 0, 88, 13, 81, 85, 24, 30, 14,248,219,255,235, 63,225,243,231, 51,184,144,189,122,242, 89,121, 14,166,117,229, 34,230,102,
+ 71, 44,104,108, 40,175,196, 93,118, 14,100, 81,153,188,170,224, 37, 8,165,201,111, 64,113, 67, 27, 20, 63, 26,204,242,147,162,
+ 7,158, 93,136,184, 73,246,186,245,164, 63, 47,240, 18, 91,208, 72,171,129, 2,120,184,126,237,180,102,200,241,169, 47,108,219,
+ 11,199,255, 15,253,143,128,128,224, 11, 61,250, 0, 17,129,215,251, 59,252,241, 55, 63, 35, 84, 40,143, 8, 61,139,202,146,144,
+216,238,118, 8, 49, 96,154, 7,120,239,240,120,120,194,219,247, 31,224,189,199,249,114,193, 48,244,104,218, 22, 77,219,224,237,
+219,183,120,243,230, 13,154,166,197,249,124,193, 52,207, 24,167, 9,255,252,235, 95, 98,152,136,166,182,217,108, 96, 12, 61, 95,
+ 31, 62,188,199,219,183,111, 17, 35, 21, 5,116,176,202,114,217,196, 16,248,191,123,156, 78, 39,204, 51,217,128,148, 16,168, 88,
+ 27, 34,181, 42, 99,242, 80,252,217,190,236,206,151,101,161,144,146,197,115, 60,112, 34,197,183, 20,204, 4,143,101, 68,155, 47,
+173,121,154, 48, 14, 3,140,214,168, 45,117,127,209,211,231,131,148,232, 64,102, 45, 75,224, 68,176,252,188,208,193, 93, 51,100,
+133,246,177, 34, 81,228, 42, 82,132,209,170,100,153,167,148,208,118,100,187,171,109,133,190,239,241,246,205, 43,108,183,155,194,
+139,191, 12, 3,139, 97,137, 72, 70,251,104, 42,202,231,121, 44,171, 55, 18, 98, 69,158, 48,144,127, 59,119,142,199,227, 17, 21,
+ 71,139,210,197,158,185, 30,130,129, 53,148, 16,153, 11, 8,107,171,114,121, 75, 33, 48,207, 11,195, 93, 38, 0, 18,166,100,158,
+207,240,222,163,173,169,251,205, 77, 82,140, 1,202,208,106, 47,231,151, 15, 67,143, 77,219,150,157,111, 63,140,232,251, 17, 33,
+ 81,184,212,239,126,247, 29,101, 86,132,136,215,175, 95, 23,216,206,178, 44,232,199, 17,144, 10,138, 59,103, 37, 37,154,154, 96,
+ 65,195, 56, 98, 24, 71, 76, 19,209,227,242, 5, 70,248,106,135,121,113,152,231,165,228,137,123,231,233,252,179, 6, 51,255, 25,
+130,194,120,246,131,219, 50,201,201,217,230,119,187, 61,106,107,225,157,131, 86, 2,193, 47,180,174, 52, 21,220, 18, 48,143, 51,
+ 41,237,235,166,172, 43,168, 40,140, 5, 64,181, 38,181, 69,166, 74,206,243,140,161,239,225, 23, 71,223, 83,173,121, 55, 78,255,
+ 47, 1,184,191,191,131, 16, 2,231,211,165, 76,114,242,156, 89, 8,133,105,154, 57,203,196, 80, 99,164, 36,148, 49,144, 90, 98,
+241, 30,211, 60, 99,113,142,116, 90,223, 19,255,178,165,152,239,135,245, 61,246,252, 50, 95, 23, 5,127,152,241, 59,207, 51,139,
+ 24,158, 15, 38, 36,192,154,138, 46,244,180,254,144, 87, 53,114,182, 21,199,213,222, 91,148,203, 18,229,135,214, 76,156,227,241,
+ 73, 66, 66,136, 17,227,226, 48, 45,129,232,100, 66,188, 40, 34, 88, 99, 67,145, 40,206, 46,183,114,107,111,114,102, 36,167, 20,
+105, 15, 21, 35,188, 95,174,251, 83, 65,189, 20,173,219, 73, 65,174, 20,121, 33,141, 38,209,136,201, 57,208,207,147,115,248, 27,
+179,222,149, 37,238, 72,213,234,194,110,170, 10, 77, 85,195,106, 82, 16, 91,107,217,210, 32, 57, 87,154, 88,248,165,227,227, 78,
+ 29, 41, 65, 86, 21,194,236,240, 95,254,239,191,199,223,254,221,127,198,236,249,154, 37,198,226,205,208, 59,219,253, 2, 66,177,
+ 44,145,197, 45, 94, 87, 36,217,230,120, 35,154,227, 61,123, 1,210, 72, 8,173,202,107,114, 27, 95, 38,126, 18,113,237,167, 92,
+234,235,239,115,202, 23,226,247,236,108, 18,207, 36,237, 55, 26,139, 23,151, 1, 2,191, 7, 34, 19,241, 63,226,159,117,118,123,
+182, 86, 27,161,160,133,192,159,253,201,159, 66, 73,133,101,154, 75,126,121,221, 54,152,157,195,183, 31, 63,178, 10,253, 17, 93,
+215,225,116,185,160,110, 26,124,250,252,128,158, 1, 32,247,247,119,104,183, 45,126,247,241, 35, 54,187, 45,102,183,224,243,211,
+ 35, 22,239,224,130, 67,146, 18, 66, 41,116,155, 13,154,166,193, 56,246,101,122, 20, 99,196,195,195, 3,126,243,155,127,129,181,
+ 26,155, 77,135,182, 37,208,208,120, 57, 99,211, 54, 20, 52, 82,219,114, 97,108,186, 14, 77, 91, 99,113,174, 28,142,224, 75, 53,
+240,136,186,105, 90, 56,231,145, 4, 93,214, 82, 42,184, 16,209,117, 91, 30, 51, 19,105,146,200, 98, 10,151,115,207, 23,179,224,
+110,208,176, 10, 94, 20, 53,240,181,120, 85,180,167,103,138,152,181,213,149,180,197,145,160,217, 43, 31, 60,217,158,148,186,190,
+127,173,181,140,254, 36, 32, 75,165,201,221, 50,207,115,209,195, 0, 17,243, 50, 18, 85,140, 87, 15, 70, 81,172,179, 95, 34, 54,
+ 45,197,146, 78,172, 93,104,154, 6,227, 48,209,234,128,147,234, 46,253,128,105,162,142,124,191,223, 83, 44,106,226,224,151, 16,
+ 49, 12, 67,233,242,105,223, 79, 34,175,105, 26, 81,215, 21, 46,151, 30, 41,145,213, 44,231, 72, 44, 46, 64, 72,141,113,156,176,
+223,223, 33,132,136,113,156,217,127,191,131,214, 26,155,205, 22,211, 52,194, 24,137,221,126, 3,169,128,170, 54, 16,130,186,238,
+ 92,180, 85, 21,101,187, 95,250, 1, 85,211, 1, 74,225, 50,244,184,244, 23,108,186, 14,117, 93,243,250,129,186,246,105,154, 88,
+ 23, 5, 10, 29, 50, 6, 67, 63,148,231,219,167,136, 37,120,104, 99, 80, 91, 91,248,240, 84,216,232,146,148,214,214,213, 53,125,
+ 47,198, 82, 72,102, 95,251, 60,207, 44,180,244, 37, 76, 37, 49, 53,206,114, 3,148, 93, 74,134,201,128,203,226, 40,139, 32,128,
+ 59,120,130, 16,181,220,149,135, 24,202, 30, 63,165, 84, 66,116, 98, 74,152,189,195,101, 28, 32,164, 68,219,117,128, 16,232,167,
+ 17,144, 18, 62, 82,195,120,255,106,143,186,161,105,116, 93,215,168, 42,242,167,159, 47, 3,134, 97,196,111,127,251, 59,124,251,
+237, 39,134,228,204, 88,230, 5,222,199,226,176,137, 49,221,160,161,159,115,221,215,231,221,243,117,241,173, 8, 60,253,148, 75,
+ 61,221, 30,122,207, 89,114,207, 46,210, 4, 18,188,208,232,221,112,142, 46,131, 88, 5,253, 16,185, 27, 90,155,156,210, 85,120,
+164,181,228, 24, 83,138, 50,205,254,108,178,210, 19, 96,212,199,132,211,101, 96,143, 43, 94,228,224, 94, 71, 24,225,122,175, 39,
+ 42, 8,202,133, 30, 83,177, 42, 36, 14,107, 73, 41,194,249, 5, 46, 44, 8,209,149, 49,117,174,182,115,247,107,120, 63,110, 43,
+205, 85,175,184,218,159, 20, 93,134, 89, 44,183, 22,195,105, 30,183, 87,121,223, 94,118,237,164,130,175, 56,170,182, 48,218,179,
+244, 75,169,171, 58, 94, 73,206, 24, 79, 80,166,130,144, 10,255,244, 15,255, 21,255,225,111,254, 3, 62, 63,158,224, 67, 30, 93,
+223,234, 10,114,183,126,251,160,196,103, 78, 49,238,196, 21, 11, 26, 86,147,133, 27,130,218, 51, 5,121,222, 5,137,127,243,101,
+ 46, 94,228,197,125,233,153, 19, 55,123,119,241,162,240,174,144,243,152, 56, 40,211, 85,248, 86, 46,213, 31,194,193,254,193,187,
+243, 23,226,147, 18, 21, 98, 31,222,190,199,215,239, 63, 96,102,219,208, 60,207,168,155, 26,135,195, 1,159, 30, 62, 65, 72,137,
+227,249,140,118,179,193, 48,140,197, 82,153,132,192,235,183,111,176,217,108, 48, 78, 19,158,142, 71,188,253,240, 14,199,203, 25,
+223,126,250, 4, 83,215,216,221,223,193, 50,193,108,127,127,135,186,109, 32, 52, 93, 44,155,205, 6, 95,127,253, 53, 41,200, 35,
+141,155,115,146,214,249,124,198,175,126,245, 43,178,158, 1, 16, 49,225,240,249, 17,143, 15,159, 75,180,170, 82, 10,110, 33,223,
+245,200,140,113, 82, 24,211, 25,160, 88, 92, 55, 12, 35,237,131, 37, 93,196,243,188,148, 93,116,166,145,205,243, 76, 0,143, 0,
+ 26,207, 75,205, 99, 97, 95, 28, 42,249, 89, 8, 62, 18, 84, 70, 91,200, 36, 41, 83,155,187,177,124,137,208, 8,158,248,246, 11,
+ 7, 56,101, 68,178,229,244,171,140, 23,181,188,151,167,189,246,130,166, 38, 0, 11,141,168, 51,197, 11,215,207,217,147, 32, 77,
+242, 68,140, 98, 96, 47,120,245,234, 85,249, 60,180,162,215, 82,107,141, 77,215,224,116, 58,161,170, 42,156, 78,103,246,125,171,
+155, 51, 99, 89, 28,124, 72,120,120,120, 68, 93,213,104,219,134, 41,122,115,153,188,117,155, 13, 62,127,126, 98,161,161,196, 60,
+123, 44, 46,176,173, 42,225,116,186, 96, 89, 72,120,230,253,130,166,161, 63, 31, 66, 64,215,117, 68,249, 83, 2,221,166, 45, 34,
+184,148,136,112, 87,215, 53, 46,151, 30,117,211,224,112, 56, 34,248,128,199,167, 39,188,125,247,142,178, 51,164,198,166,221,226,
+116,188,160,239, 39, 84,198, 66,128,206,197,105,154, 8, 28,195,160,157,121,158,203, 52, 44, 99,173,179,226, 61,143,148,149,162,
+112, 42, 41, 36, 23,110, 28,141,203,194,177, 28,198,227, 98, 96,110,124,197,177,174, 26,167,211,105,149, 7, 33,216,137,160,177,
+219,109,153,254,166, 40,152, 70,106,198,210, 70,248,197,145, 14,131,239, 3,210, 25, 4,216,186,162,228,190,166,129,144, 18,143,
+199, 3,206,253, 5,117, 71, 74,248,203, 56,208,186,150,201,129,148,128,103,209, 52, 45,172,169,176,219,238, 80,217, 10,211,188,
+224,124,190,176, 38,193, 97, 28,167,178,130, 12,252,241,110,117, 90,120,177, 11,207,107,152,231, 22,182, 92,220,196,149,163, 75,
+ 70,241, 12,156,181, 82,249,170,148,169,141, 9, 81, 8, 68,153, 16, 50,171, 38, 1, 34, 31,130,217,200, 36,174,248, 87, 4, 10,
+106, 49,138, 70, 68, 34,195, 34, 82, 40,227, 75,210, 39, 11,136, 40, 24,129, 34,120,124, 7,168, 20, 97,101, 68,165, 19,197,120,
+203, 4, 37, 19, 68,242,144,140,142, 93,124, 66, 63, 56,120,159, 10,161, 46, 36,226, 71,251,228, 17, 57,161,139, 72,115, 4, 70,
+185, 25,171,174,246,109, 41,120,202,249, 77, 30,136, 14, 18, 1, 33, 82,151, 78, 2, 23,162,107,105,109, 33,160,175, 30,117, 91,
+ 81, 52,172, 18,136, 8,215, 44,119, 33,138, 95,155, 46, 28, 82,209, 39, 8, 68, 65, 95, 99,165, 13,239,107, 44,154,170,134,209,
+228, 19,213, 90, 67, 25, 66,208, 74, 45,145,164,128, 80,154,169,110,140, 72,148, 18,145,127,208,165, 11,124,251, 79,191,194,223,
+252,239,127,131,255,239,191,254, 10,206,107, 72, 65,212,163, 43,197, 69, 20,194, 87, 76, 52,121,136, 32,117,103,128, 71,132, 71,
+ 72,129, 69,189,226,170, 86, 84, 9, 73,103,238,123, 30,207, 7,234,254, 35,217,159,124, 10, 72,130, 2,101, 75,215,158, 86, 29,
+174,224,152,213, 68, 23, 65, 74, 9, 73, 10,242,105,231, 66,128, 89,253,215,184, 84,172,118,219,248, 94,184, 65, 17, 90, 9, 81,
+ 2, 93,168,219,141, 16, 34, 64, 72,207, 15,182, 4, 18, 23, 72, 34, 33,202,132, 40,185,239,142, 20, 1,160, 34, 89, 11,233,113,
+ 95,237,246, 25, 85,172,144,160, 94, 76, 63,255, 55,232, 80,178,125, 99, 21, 68,163, 32,160, 98, 66,171, 43,252, 47,127,253,239,
+208, 24, 11,132,132, 97, 28,240,120, 58, 96,156, 71,124,122,248, 22, 70, 43,244,227, 8, 99, 27,116,205,150,242,200,173,101,244,
+107,131,186,109, 16, 19,112,120, 60, 96,215,237,240,246,205, 59,156,207, 61,190,254,234, 27,116, 13,165,106,105,169,208,213, 53,
+ 54,117,139,233, 50, 33, 44, 1,117,213, 96,211,118, 24,134, 11, 30, 15,143,232,167, 30,170, 82, 56,143, 23,244,211,128,207, 79,
+143,184,123,253, 26,119,175,223,192, 54, 45,160, 52,102,231,209,108, 54, 88, 98, 64, 20, 64,223,143,144, 9,120,179,191, 71,171,
+ 45,144, 0, 31,232,253, 87, 91,141,176,204, 80, 66, 98,236, 71, 30,145,123, 32, 6, 44,115,102,207, 43,120,198,213,198, 24,209,
+182, 29,231,110, 3,243,226, 17, 24,100, 83, 25,131,200,236,120, 31, 2,117,142,206,195, 59, 79,193, 71,138,188,236,214, 90, 24,
+173,232,217, 74,192,253,126, 95, 20,204, 70, 19, 89,206,154,204,209, 72, 72,240, 48, 86,243, 65, 9, 84, 70, 66,201,136,202,200,
+ 98,165,205, 2, 46, 82, 63,123,204,139,227, 12, 11,192,242, 78, 88,155, 10,139, 15,148,187,109, 20, 42,173,208, 54, 53,180,182,
+152,134, 25,136, 64,215, 52,136,136,112, 33, 0, 66,163,178, 21, 18,127,221,206, 69,120,167,177,120,141, 99, 63,193,115,234,220,
+241,120,162, 34,104, 9,128, 82, 24,166, 11, 82, 92, 16,252,130,170,182, 80, 58,225,241,233, 1, 77,215, 66, 41, 1,239, 23,140,
+243, 0, 31, 29,217,179, 18,104,220,239, 34,206,167, 11,140,174,225, 93,194,120, 25,177,219,110, 97,173,134,210, 9,202, 10,232,
+138,128, 58,116,246,105, 40, 69,156,252,121, 30,177,223,111,161, 68, 66, 83, 25, 52,117, 13, 31, 60, 38,239,208,110, 55,152, 70,
+135,228,129,105,152,161, 57,220, 38, 38,202, 25, 23,146, 76, 58,214, 8, 84, 21,233, 33,206, 67, 79,157,110, 85,177, 6,151, 89,
+ 4,172,105,242, 49,209,101,108, 12, 11,168, 85,233,254,125,138,144, 70, 67, 87,150,210, 4,235,150,158,163,228, 33, 84,194,226,
+ 39,212,109, 5,201,178,171,203,212,163, 95, 38, 44,110, 97,187, 50,145, 2, 29, 91,237, 4,103,171,251,224, 89,252,167, 97,148,
+133, 95, 2,230, 97,129,134, 65,152, 34,220,228,233,162,238, 73, 95,224,157,131,155, 39,156, 79, 7, 72, 68,108,218, 10, 93, 91,
+115,134, 72,164,181,172,145,204,227,144, 76, 76,197,247, 92, 61,235,253,121,161,200,241, 68, 52,111, 20,215,116,185, 53,193, 16,
+140,203,250,193, 78, 34,119,232, 81,136,223,219,120, 93,119,156,116,200,210,110,216,148, 3, 57,138, 21,215, 93,174, 88,227,226,
+ 42,130,186,170, 92,217, 34,166, 36,180, 22,156,243,125,221,123,146, 85,199,225,233,120,102,232,140, 40, 80, 58,113,211,169,135,
+162,108,206, 47,194,245,255,209,254, 60,139,246,168,138,207, 99,247, 0, 36,129,224, 19,144, 36,121,110,121, 61,160, 20, 80, 85,
+ 36,126,203, 42,219, 44, 82,112,206,193, 5, 18,222,249, 72, 56,217,197, 69, 44,206, 23, 97,147,128, 40, 23, 90, 82,146,216,234,
+ 90, 33, 73, 1,105, 12,176,170,212, 37, 87,114, 16,128,145, 10,136,177,236,173, 52, 43, 75, 19, 36,190,253,197,239,240,239,255,
+183,191,193,223,253,237,127,193,228, 21,146,182,116,121, 33,222, 8,198, 74, 32, 3,114,122, 92, 42,107,135,152,109,127,121,148,
+157,147,218,212,213,191,126,149,206, 11,144, 23, 46, 2, 33, 82,130, 85,202, 80,151,151,144,197,233,167, 58,217,190,220,206,222,
+136, 69,190, 36,244, 72,207,246,223,226, 75, 91,163,239,205, 3,190,112,253,254, 15, 25,187, 23,154, 97, 18, 20, 27, 28,233,231,
+ 63,250,230,143,240,230,254, 53,230,113, 98,111, 44, 65, 77,126,249,235, 95,193, 86, 67, 42, 5,208, 0, 0, 32, 0, 73, 68, 65,
+ 84, 21,132, 36,154, 33,164,196,231,195, 1,237,102, 3,239, 35,218,174,131, 53,196,228, 62,159,122,236,247,247, 0, 4,198, 97,
+196,119,223,125,135,221,126,135,205,102, 75,254, 93, 99,208, 53, 45,144, 18,166,121,160, 72, 76, 79,123,242,105,154, 96,181, 41,
+120,231, 97, 24, 9, 25,107, 45,118, 59, 82,224,207, 51, 99, 87,121, 61, 52,142, 3, 46,151, 11, 37,122, 85,134,121,235,196,122,
+160, 98,148, 56,232,198, 84, 36, 26, 2,237,212, 19, 18,166,105,224, 20, 71,218, 53,135, 64, 52, 56,205,121,235,203,226, 49,114,
+ 32, 71, 74,137, 24,235,220, 93, 57,142,202, 76, 41, 64,241,132,143,192, 55,215,224,168,124, 88,110,183, 29,180, 98,150, 60, 79,
+203,242, 58,204, 23,235, 20,237,227, 41, 46,149,222,215,214, 24, 22,237,138,226,109, 15,156,103,158, 65, 33,222,123,108,183,155,
+219,245, 95, 78,168,100,117,119,126,110,115,172,232, 48, 12, 8, 46,192,106, 3,183, 44,164,140,182, 6,202, 24, 26,169,123,143,
+143,159, 62,211, 68, 67, 73,194,215, 26,130,247, 76, 51, 37,175, 73,173,201,110, 42, 5,166,113,134,146, 20,117, 26,188,199,110,
+183,131,228,175,125,230, 8,210,121,158,208,117, 45,141,166,103,178,176, 85,117,141, 97, 24,233,251, 39, 81,148,243, 74, 0,155,
+174, 35, 22,194,102,135,254, 66,161, 44,100,233, 3,180,164,238, 89,107, 89, 38,173, 49, 37, 24,166,231,121,231,139, 16, 85, 43,
+197,140, 3, 22, 42,118,180,235, 55,214, 34,197,136,243,229, 2, 33, 37, 44,235, 26,138,170,155, 99, 90, 83,162, 9, 75,182,149,
+ 45,203, 82,166, 58,121,189, 73,185, 4,137,241,190, 96, 76,110, 96,194,105, 36,123,176, 33,189,196, 50, 47, 24,199, 17,222,135,
+226, 29,167,176, 24,154, 50, 16,204,198,151,239, 89, 8,161,136, 24,145, 18,166, 97,130,247, 36,122,187, 92, 46, 8,254,250,121,
+140,211, 8,169, 72, 91, 98,141, 45, 22,233, 12,152,202, 69,124, 6,206,188,116,177,175, 99, 93,149,224,188, 2, 38, 76,222, 58,
+128,114,147,150,161,109,207, 7,156,226,167, 31, 77,235,106, 99,253,243,250, 13,243,195,170,224, 91, 37, 61, 61, 84, 60,130, 23,
+138,109, 6,215, 55,139,143,192,121, 24,209, 79, 11, 34, 36, 4, 43, 35,139,150, 11,130, 38, 9, 41, 19,228,192, 85,118, 44, 63,
+ 82, 10, 5,128, 65,217,203,148,142,157,147,125,178, 17, 91, 66, 35, 70,208, 42, 65, 11,216, 90,163,169, 13, 42,171, 75,176, 76,
+ 76,100, 45,153, 22, 79, 2,139,105, 65, 63,204,232,199, 9,227, 60, 99, 90,150,146, 67,236, 67,132, 7, 48, 35, 96, 73, 30, 14,
+ 17, 75,244,152,131, 47,163, 55,138,225,163,139, 84,177,178, 60,239,221,172,177,216,116, 91,116,109,139,224, 35,254,233,255,249,
+111,248,247,255,199,255,137,255,248, 31,255, 30,203,108,145,208,192, 65,192,203, 76,141,123,193, 35,189,254, 94,241, 78, 50,239,
+ 37,203,131,144,247,161,236, 87, 23,101,125, 65,127, 32,133,196,244, 47,143, 16, 86,208, 23, 6,207,224, 70, 40, 39,126,218,180,
+253,247, 5, 10,137, 31,130,217,136, 31, 40, 38,196, 23,234,137,223,239,255,252, 67, 57, 69,110, 68,123, 66,150,234,130,245,152,
+216, 52, 45,254,226,207,255,188, 0,124,165, 86,232,199, 1,253, 48, 82,135,194,170,233,105, 30,241,240,244, 25,194, 90, 36,169,
+ 80, 53, 13,217,107,166, 25, 90, 91, 40,166, 11,126,126,122,196, 47,126,241, 11,188,127,255,158,210,184, 30, 63,151,221, 97, 8,
+129, 20,237,187, 29, 94,221,223,161,109, 41, 32,101, 26,102,116, 93, 7,173, 52,218,186,229,221,177,198,155, 55,111, 75, 7,125,
+ 62,159,113, 60, 62, 97,187,237,224,150, 5, 90, 74,218,185, 43, 58, 86, 62,125,250,200, 5,118,164,137,157, 50,112, 81,192, 39,
+208,197,165, 53,230,121,226,117, 13,197,180,134, 16, 17,124, 38,242, 17,197, 98, 89,232,235,149, 66, 51,114, 52, 93,199,182, 44,
+ 62,106,186, 22, 82, 43, 40,163, 89, 23,114, 27, 79,153, 47, 0, 33, 5, 66,164, 78,188,156, 79,172,168,166, 88,211, 13, 21,187,
+ 60, 18,166, 75,225, 42,202,210,138, 64, 41,214, 26, 46,140, 40,106, 85, 74, 58,192,137,101,238, 89, 24, 24, 80, 49,183, 34,143,
+152,179,152,110,154, 38, 12,227,136,126, 24,224, 29,217,165,148, 20,104,155,182,116,181,195, 56, 82, 62, 55, 8,160,146,133,102,
+ 89, 27, 20,188, 99, 24,143, 69,211,109,176,184,192,176, 41,138,161, 30,135, 17, 74, 72,178,164, 9, 32,134,128,121,158,112,183,
+223, 34,120, 71, 64, 22, 73, 19, 11,231, 23, 52, 93,131,197, 17,208, 40, 37,242,118,247,125, 79,226, 92, 65,233,118,109,219, 17,
+235,129, 77, 51,185, 72,200,194,190,101,153,233,220, 74,169, 20, 87, 62,120, 30,171,107,246,144,207, 37,225,205, 90,139,224, 61,
+182,219, 45, 57, 3, 88,196,102,180,226, 51,156, 67,154,184,153,161,124,242, 26, 70,170, 66, 12,205, 14,130,138, 93, 69,125,223,
+195, 48,160, 40,132,192,193, 41,180, 94, 93,143,188, 37,195,126,168, 96, 0,206,231, 30, 33, 68, 28, 15, 39,104, 93,241, 90,150,
+190,111, 57,201,142,210,175, 73,143, 36,100,134, 5, 41,244,253,128,203,101,128,115, 17,134, 89, 17,211,188,240,189, 65,168,239,
+235,121,152, 74, 97,243,252, 28,123,110,183,198,202, 73,148,158, 69, 68,223,238,211,179, 0, 26,208, 41,165,231, 18,244, 31, 39,
+140, 43, 60,239,116,147, 99,157, 85,214, 66,210, 56, 80,200,219, 36,153, 40,210, 45, 26,180,140,134, 19,123, 84, 51,219, 36,225,
+170,211, 34, 15,183, 34,131, 22, 66, 76, 88, 66,196,225, 52, 98,114, 17, 81,152,107,231,243,236,142, 16, 0, 82,160,174, 91, 40,
+138, 26, 75, 69, 65, 40, 86,127, 42, 34, 70, 89, 38, 1,130,248,161, 48, 74, 33,196,128, 74,106,182,167, 41, 52,141, 65,221,214,
+ 48,214, 20, 10,212, 60, 59, 76,227,194,187,170, 72,235, 10,182,207,208, 5, 77,133,200, 60,207,136,209, 67, 25, 5,176,198, 77,
+ 43, 69, 35,170, 36, 75, 96,132,139, 1, 22,134,112,174, 41,193, 26, 13, 83, 87,208, 66,160,110,106, 36, 0, 31, 63,126,198, 47,
+126,245,107,252,167,191,255, 7,252,221,127,254,127, 49, 78, 9, 16, 21, 2, 18, 60,104,244, 44,217,105,112,179,131, 78,226,198,
+143, 77, 13, 55, 67, 79,210, 51,193,216,106,116,143,117, 78, 74, 14, 56, 23, 18,222, 5, 4,255, 18, 39, 64,148, 78, 55,221,110,
+245,191,215, 85, 63, 7, 1,253, 88, 5,252,143,101, 39,124,249, 47, 74,215,156,247,155,143, 47,190, 52,179,250,131,119,234,153,
+ 62, 43, 25, 54,243, 87,127,249, 87,120,247,230, 29,146,243,240,129, 2, 82, 2,103, 31, 72, 41, 41,241,111,153,201, 78, 36,129,
+ 57, 6,232,224, 81, 53, 45,164,247,120, 58,158, 48, 44, 51, 90, 78,190,170, 42,242,157,191,122,245, 10,199, 35,101,111,127,243,
+213,215, 56, 28, 14,165,147,253,240,254, 29,206,167, 19, 31, 92, 17, 85, 67, 65, 27,222, 5, 76,105,194,118,179, 69,221, 52,136,
+ 49,225,241,241,145,194, 65,140, 65,215,209,110,122, 94,102,188,123,247, 22,138,187,179,211,249,132, 97, 28, 97,154, 14,154, 11,
+ 67, 31, 34, 32, 13,134,121,193,253,253, 22,227,116, 66,219, 53, 68, 23, 19,146, 25,237,156,236,184, 58,208,134, 97, 96,125, 14,
+ 81,206, 22, 63, 65, 1, 72, 90,195, 50,171, 33,242, 97, 41, 1,222,183, 11,196, 20, 72,127,147, 18,106, 91,209,112, 41,239, 30,
+133, 64,215,181,184, 92, 46, 64, 4, 57, 10,184,195,116,195, 66,170,241,182,225,169, 33,217,177,188,247,240,110, 1, 18,101, 64,
+248,144, 80, 85, 53,172,214,184,156, 78,184,219,239,160, 13,117,139, 21,235,103, 32, 18,166,121,164,169,163,161,110,221, 90,131,
+105, 14, 48,150, 58,248,121, 89, 10,243,190,170, 44, 46,135, 1,109,211,226,112,248, 12, 33, 64,133,146, 20, 28,162, 66, 23, 27,
+249,204, 19,148, 36,180,238,227, 52, 97,154,103,138,129,213, 26,195,229, 2, 41, 18,166,105,196,219,215,175,240,240,244,136, 97,
+ 28,161,165, 68,183,223, 35,248, 19,148, 4,234,198, 34, 38, 15,200, 4, 23, 28,108,109, 17, 99,192, 48,142,184,219,111, 41,116,
+103,158, 97,180, 66,138, 1,203,180,144, 5,172,161,181,164,181, 26, 93,215, 22, 98,158,227,188, 0,176,189, 44,167,218, 53, 90,
+ 67, 70, 73,160, 21,231,209, 54, 13,230,121, 65,101,107,248, 56,150,174,124,158, 38, 88,187,129,209, 26,209, 82, 1, 20,125, 40,
+196, 78,169, 8,251,154,197,139, 90, 73, 90,119,240, 74,198, 90,131,197,121, 44,243, 82,224, 95,212, 40,145, 40, 79,115,120,141,
+ 16, 10, 81, 0, 73, 36, 44,110,225,156,115,176, 53,212, 96, 28, 39,214, 46, 25, 40, 41,177,217,236,112,185,156,139,237, 45,132,
+ 64,217, 8,145, 18,248,186, 13, 77,115, 47,253,192,103, 44,221, 49,222, 5, 44,252, 58,144, 8,251,138, 84,255, 33,186,230,186,
+ 33, 94,223,151, 47,137,193,179, 96, 56,165, 4,157, 63,129,223, 59, 82, 23,171,234, 32, 51,219, 83,188, 54,101,207,192, 27, 49,
+ 70, 24,197,163,119,200, 27, 99,124, 90,141,199,111, 4, 79, 92, 32,136,148,253,185, 2, 90,230,125, 65,198,115,243,200, 92, 72,
+140,139,199,105,152, 49, 57,202, 55,142, 47,116,101,197,194,197, 42,246, 24, 37,164,178,132, 86, 21,130, 5,225, 98,117,192,114,
+215, 45, 19, 82, 80,144,194, 0,130, 60,225,109, 91,163,174, 13,186,109,141,186,109,174, 96,143,101,193, 50, 77,184,244, 61,250,
+203, 64, 7,153,169, 96,235, 26, 82,209,133, 15, 17,225,221,130,203,185,199,227,227, 35,148, 0,238,246, 27, 52, 77, 5, 32, 64,
+ 41, 1,107, 27,212,117,131,228, 3,144, 2,108,101,200,198,226, 28,133,159,168, 10,151, 97,132, 76, 17,143,135, 39,156,143, 39,
+ 60, 62, 29,240,187,135, 3,126,249,235,239, 48,204, 14, 1, 9, 72,196,186,150,130, 87, 7, 47,161, 4,139, 98, 80,176,231, 53,
+242, 24, 62, 19, 1, 25,173,154,194, 85, 57, 95, 46,121, 94,175, 72,197,119,189, 44, 15,236,181, 96,138, 69,160, 39,120,159, 84,
+ 2,124, 50, 69, 54, 82,183, 69, 59,212,103, 36, 58, 33,111,208,174,185,240,204, 19,145,151,124,234,233,197,135,152,125,241,248,
+ 2, 14,118,253, 53,241,106,226,185,126,244, 90, 17,139,103,140,154,244, 19, 10,140, 47, 21, 38, 40, 49,180, 34,210,133,244,205,
+ 87, 31,240, 23,127,242,103,208,202,224,241,241,128, 16, 61,206,253,137,246,149, 51, 93,230, 74,107, 40,173, 40, 43, 92, 27,244,
+243, 8,239, 28, 94,223,191,193,211,225,128,152, 18,246,251, 59,204,206,193,197,136,251,205, 14,155, 77, 87, 60,217, 95,125,245,
+ 21, 14,167, 35,230,113,194,215, 95,127, 13,107, 12,166,113,196,127,255,231, 95, 96,191, 35,196,235,221,221, 29,217,144, 78, 1,
+ 41, 38,108,119, 59, 28,142, 71,108,183,219, 34, 34, 3, 18,190,251,248, 29, 0,178,126,229,212,171,105, 89,224, 98,128,177, 26,
+ 66, 36,108,187, 22,167,126,130, 47, 88, 32, 89,118,224, 74, 83,193, 55,140, 19,150,217, 99,183,107,177, 44, 35,251,148,175,194,
+ 40,218,173, 55, 24,134, 30,202, 82, 2,219, 52, 45, 80,218, 96,114, 30, 49, 17, 79,219, 71, 79,226, 62,101,216, 74,167, 74,225,
+125,253, 59,232,146,205,108, 5,109,136, 41, 30, 4,241,197, 51,234, 52, 7,109,180,117, 75, 96,157,101,193, 6,192,221,118,135,
+143, 15,159,224, 22, 2,141, 40, 9,204,211,136,205, 55, 95, 33,196,128,121,158,177, 44, 11,236, 42, 51, 93, 8, 20, 43,234,250,
+215,117,221, 20,214,187, 97, 37,246, 50, 59,104,229, 32,165,134,214, 9, 77,109,153,234,167,120, 21, 50, 65, 91, 42,168, 98,240,
+ 84, 84,205,142, 2,104,184, 8, 52,172,228,159,166,137,212,234,214, 98, 24, 7, 38,164,121, 84,149,129, 15, 14,186, 34, 68,173,
+159, 2,198,105,194,110,183, 3, 0,140,125,143,121, 94, 72,127,177, 44,204,142,151,220,164, 92, 47,157,188,130,201, 72,219,106,
+211,178, 48,177, 94,165,169,145,192,114,179,221,160,170,106,156,143, 39, 68,203,205, 32,239,247,199,105, 68,219,182,152,230, 25,
+ 93, 36,126, 64, 85, 9,122,221,103,130,181, 4,239,161,249, 92, 52, 70, 48,221,111, 66,219,212, 8,140,162,205, 81,175,203,226,
+ 48,141,148, 65, 95,215,121,162, 74,231,142, 20, 2,218, 88, 4, 65,147, 15,183,120, 68, 73,235, 23,130,231, 4, 78,140,139,236,
+ 61,167,152,220,152, 0,231, 3, 52, 39,212,229,243,108, 28,168, 0, 72,145,224, 67,203, 66, 86,194,156, 52, 26, 10,158,252,122,
+ 78,228,201,207,247, 59,238,244, 61,215, 84, 78,216, 20,207,214,223,235,223,155,196,245,156,212, 63,220, 77, 92, 79, 98,241,133,
+166, 93,172, 84,229,249,178,200, 76,226,239,143, 49,129, 64, 3,243,103, 99,224, 4, 41,215,209,170,121, 2,204,168, 88,228, 49,
+ 55,224,163,192,121, 90,240,120, 26, 16,160, 24,113,154,243,198,174, 61, 97,140,171, 41,112, 81,188, 39,164, 66,165,122, 54,210,
+205,246,152, 20,233,122, 18, 2, 74, 89,212,149, 70, 93,147,202,221,121,143,195,241,140,167,199, 39, 12,125,143,203,153, 84,171,
+211, 56, 97,154, 23, 72,169,177,191,187, 67,203, 20, 38, 33, 37, 34,143,118, 62,125,247, 17,167,227, 17,247,119,123, 88,165, 33,
+ 3,121,193,147,150, 16, 30,240, 51,137,126,108,109,161,140,196,209, 26, 24,173, 72, 52,162, 20,132,136, 37,216, 69, 64,194, 71,
+133,195,197,227,183, 31, 31, 49, 46, 4,224, 17,201, 19,120, 55, 82,202, 87, 38,185,149,139,135, 95,158,192,253,115, 2,117, 41,
+ 49, 37,122,248,214,223,220,144,138, 24, 46,197, 8, 81,210,206, 88, 76,198,247,174,243, 1, 33, 94,115,216,138, 24, 82,144,250,
+159, 30,230,156,192,247,108, 64, 35,226, 74,125, 47,190,172,233,248,177,172,226, 23,198, 88,171, 80,247,162, 39, 40, 95,169,100,
+118, 66, 38, 56, 9,249,189,207, 35, 71,136,190, 12, 70,198,247,222,136, 63,229,159, 24, 3, 52, 20, 84, 74,232,234, 22,255,235,
+191,251,159,113,183,223, 99, 25, 38, 76,227,136,113,185, 16,146,114,153,139,157, 39,132,128,205,102,131, 20, 19, 78,151, 51,148,
+ 49,216,236, 91,156, 78, 39, 92, 46, 23,216,182, 70, 63,244, 8, 49,162,169,107,216,202,226,112,120, 66,215,181,104,219,134,157,
+ 30, 30,218,106,132, 20,112, 60, 13,240,203, 76, 73, 82, 90, 99,179,219,225,120, 62,225,225,211, 3,172, 49,216,110,183,228,143,
+247, 14,143,143,143,204, 29,127,130, 15, 30,253, 64,169,112,247,247,247,136,142,152,242, 79,199, 3,132, 0,222,191,123,139,223,
+126,251,145,130, 53,120, 2, 55, 79,148, 55, 29,131, 69,136, 17, 94, 0,182,169, 33, 68,196,226, 3,134,113,130, 82,228,149,142,
+105, 34,165,246,236, 80,215, 36,100, 50, 21, 29,224,199,211, 9,187,205, 6, 9, 18,159, 63, 31,176,221,111, 81, 65, 34, 4,183,
+154,252,241,235,171, 52,130,136, 48, 82,115,115, 1,196,152, 47, 63,205, 7, 52,117,189,222, 57,182, 69,145,170, 88, 49, 95, 62,
+197, 8,173, 52,134,190,199,118,187,197,221,126,143,223,124,251, 17,206, 59, 64, 73,180,109,195,187,102, 95,242,212,243, 51, 65,
+205, 13,138,250,222,121,143,170,178,101, 71, 91, 91,138, 68,165,137,135,131,214, 6,227,200,222,104, 75, 89, 15, 20, 13, 74,123,
+245, 24, 35,134,161,199,235,215,175,113, 58,158, 32, 5,185,132,178, 94,166,109, 91, 76, 61,185, 11,218,166,194,226, 28, 18,211,
+231,172,173,112,185,156,177,221,110,177,221,108, 48,177,215,188,109,106,204,211,204, 73,136,130,115,202, 29, 22,199, 34, 66, 41,
+225,184,152, 91,150, 9,231,243, 25,219,109, 87,214, 19,132, 19,246,104, 27,178,240, 65, 8,230,238,147,109,119,156,105,124, 93,
+177,162,126, 89, 28,218,166,161,181,138, 97,148,175, 15,112,126,161,139,189,109, 48,142, 51, 77, 49, 91,154, 4, 44,129,166, 27,
+ 77,219, 32, 56, 15,173, 36,147, 62,105,149, 52, 12, 35,229,117, 40,242,118, 71,166, 6, 54, 77,205, 23, 98, 68,240,129,232,133,
+222, 67, 10, 58,226, 20, 67,122, 0, 96,153,201,181,225,150,165, 12, 35,115,210,223,167,239, 62, 65, 41,137,237,102,135,166,173,
+ 17, 34,112, 57,159, 1,154, 27,149,160, 30,234,129,228,141,134,233, 57, 60, 43,143,245, 95,212,164, 61,179,237,230,139,253, 86,
+ 32, 44,174, 41,164,160,179, 88,112, 88,215, 15, 94,234,226,102, 37, 42, 94, 94,126,166,239,119, 44, 25,119,153,138,149, 40,219,
+203,168,179, 22,223, 27,165,230, 47, 64,144,152, 59,243, 77, 68, 86,224,115, 39,149,136, 34,119,238,103, 28, 47, 3, 2,232,210,
+132, 72, 16,130, 50,206,229, 74, 20,166,147,188, 2,103,104, 57, 65, 59,244,120,187,203, 23, 2, 8, 17, 69, 8, 19, 34, 89, 73,
+220, 2, 92,206, 14,126,233,241,244, 8, 56,191, 32,120, 7,239,151, 18, 31,152, 85,211, 49, 1,214,106,124,126, 58,226,225,233,
+ 68,133,138,162, 0,142,105,114,152,135, 9, 82, 86,240, 1,120,248,252,132,222,144, 26,184,237,106, 84, 76,221,139, 49, 98, 26,
+ 21, 18,184,242,228,177,227,221,126, 75, 89,207,117, 5,163, 13,130,143, 56, 31,123,124,252,120,192,185,119,164,205, 22,170,140,
+214,197, 13, 95,141,225, 49,105, 5,135,201,177,227,140,141,141,121, 13,147,167,236,249, 27,231, 3, 82,136,164, 88,143,145, 96,
+ 8,145, 46,252,228, 3,132, 19,112,227,140,232,175,224,161,196, 68,193,117, 70,123,190,208,175,124,249,231, 69, 99,250,130,141,
+237,217,115,242,111,158,128,191,208,213,179, 0, 48,177,113, 48,189,192, 56,184, 29,121,137, 50,213,249, 82,184,194,143, 29,192,
+ 43, 65,149,181,145, 10,127,253, 23,127,137,159,125,248,138, 38, 63,231, 51,139,183,124, 97, 67,103,116,171,155, 38,182,140, 25,
+124,120,251, 22, 82, 91, 24,165, 49,187,153,198,191,188, 23,221,237,118,232,218, 14, 33, 44, 72,137, 0, 50, 66, 8, 28, 14, 79,
+208, 90,227,221,187,119,116,121, 69,178,156,109,119, 59,196,148,240,116, 60, 64, 41,133,182,235,240,225,253,123,244,151, 11, 30,
+ 62,125, 42, 84,175,166,233, 48, 12, 3, 32, 5,246,251, 59,238,110, 35, 62, 61, 60,160,105, 27,212, 77,131,174,107,208,247,103,
+ 32, 56,204,227,128, 8,137,170,170, 17,162,134, 54, 21,134,126, 68, 76, 14,213,221, 22,211,228, 32,164,130, 18, 10,144, 36, 14,
+243,145,220, 55,227,236,208, 15, 19, 32, 36,238, 95,147,176,235,116,190,176, 24, 87,225,112,188,192,214, 45,170,170,197, 52,205,
+136,129, 46,150,105, 36, 37,119, 85, 17,102,213, 26,195,176,170,137, 73,102, 52,105, 75, 70, 97, 26,103, 52, 13, 89,175,130,247,
+136,193,163,107, 91, 58,179, 2,176,112,228,234,208, 79,176, 70, 96, 26, 71, 84,117,197, 93,183, 7, 18, 80,217, 22,145,237,162,
+ 90, 43, 56, 79,112, 29,164, 84,172,170,217,235, 78, 29,233, 4,109, 12, 42, 83,151, 14,126, 24, 71, 84,182, 65,223,143,104,155,
+ 14,243,178,224,245,155, 59,140,227, 64,227,226, 8, 44,203,204, 72, 93, 90, 5,236,182,244,250, 73,238,252,171,186,194,229,124,
+134,150,180, 3, 79, 41, 97,179,221, 64, 27,139,105,114,164, 14,175,168, 64,147, 66,194, 72,133,218, 90, 56, 31,176,233, 90,164,
+ 72, 46,131,170,170,208,247, 23,180,117, 67, 62,240,156, 61, 97, 44,148, 18, 88,220, 66,177,187,150, 26,164,236, 91,207, 22,189,
+190,191, 92,189,229,110, 41, 19, 11, 29, 52,154,174,197,120,238,203,229,150,152,141,191,196,132,168, 53, 46,125,143,221,110, 91,
+108,179,153, 37,176,184, 25, 49, 37, 74,116,144,215, 75,114,156, 39, 52,204,153, 15,188,243,214,154, 10, 72,136, 88,194,107,134,
+254, 2,109, 42,206, 30, 80, 69, 40, 72,162, 60,135,187,253,190, 8, 17,221,226,176,184, 5, 66, 42, 4, 31,209,181, 27,108, 55,
+ 59,156,207, 61,158,158, 78, 16, 74,195,249, 0,107,235,210,205,123, 23,160, 20,217, 42,165,210, 76,219,123,174, 1,190, 69,140,
+175, 3,158,214,133,224, 13,135, 35,165, 50,193, 44, 92, 45, 92, 69,201,249, 60, 74, 12,176,209, 63,106, 70,248,130,162,105,157,
+195,157, 86, 42,246,117, 40, 72, 25,123,138,116, 19,248,158,253,192,226, 38,215,156,179, 66, 4,195,255,139, 48, 14,183, 24,205,
+ 4, 44,222,227,112,186, 96,246,137,243,209,193,217,220,162,200,224,178, 74, 54,164, 88,178,179,165,188, 34, 99,197,106,236, 42,
+ 56,150, 16,137,197, 98,158, 84, 75, 62, 69,244,126,198, 60, 73,104, 38, 10, 9, 8, 64, 94,191,150, 24, 19,124,204, 93, 65,194,
+236,103, 86, 71, 82, 8,133,144,156,225, 30,129, 36, 52, 53,134, 81, 96, 90, 60, 82,162, 29,145, 13, 17,202, 57,104, 41, 41,131,
+218, 57,202,109, 23, 26, 65, 70,104, 8, 36, 23,145, 92,132,131,199,176,140, 88, 22,135,199, 99,143,195,231, 39,132, 57, 2,202,
+ 0,146, 2, 62, 68, 2,146, 8, 44, 16, 20,101,124,115, 51,182, 89,125,227, 18,152, 77,195,204, 99,153, 31,158, 72, 93,186, 8,
+ 17, 8, 1, 34, 23,151, 4,146, 7, 66, 64, 92,128, 48,249,155,209,122,174,138, 19,219,218, 18,178, 58, 83,254,168, 75,247,182,
+178,205, 75,254,244,163,246,237,162,164,243,229,103, 42,173, 42, 24,241,114,239, 47,202, 44,124, 21, 26,252,220,199,143,155,160,
+ 17, 82,172,226, 95,221,161,103,241,139,224,159,223,190,253,128, 63,250,250,107, 12,231, 11,150,105,134, 53, 85, 25, 61,167, 20,
+ 9,136,178, 44, 24,199, 9,155,110, 3,173, 37,234,170,194,249,124,198, 52, 46,192,187,247, 20, 4, 82, 91,156,143, 39,212, 29,
+165,127, 33, 6, 60,126,126, 36,145,167, 82, 24,134, 1,175, 94,189, 66, 8,228,243, 61, 28, 14,168,235, 26,253, 48,161,217,108,
+ 49,140, 35,188,119, 4,154,233, 90, 28, 14, 7, 24,173,113, 56, 62, 97,179,219, 66, 73,133,113,236,169, 8,140, 9,222,147, 66,
+221,123,143,101, 38, 37,246,228, 39,156,250, 19, 68, 32,129,153, 72, 36,230,154, 83, 32,149,116,140, 84,148,158,123,236,183,148,
+ 36, 54, 46, 35,137,205,234, 14, 33, 56, 76,147, 71, 74, 10, 49, 58,104, 67,133,240, 60,147,208,116,158, 22,236,119,119,152,102,
+ 7,109, 45, 98,138, 60,190,159, 72,117,207,221,154,181,150,163, 70,105,207, 29, 19, 10, 96, 69, 73, 74,100, 28,199,249, 26, 15,
+ 26,105,213,164, 36,141,200,173, 49,112,137, 70,173,121,159, 93,158,239, 24,209,117, 27,244,227,200,214,208, 88, 18,194,148,209,
+208, 33,192,185, 5,155,174, 33, 68,174,214,240,222,227,114,185,160,110, 27,138,115,101,129, 30,248,140, 84,156,230,149,189,199,
+ 53, 83,217, 98, 76,104,219, 26,199,241, 66,172,130,186,194,188, 56, 98, 2, 72,195, 88, 92, 98,195,199, 64,182,172,168, 52,180,
+ 37,174,189,115, 30,155,221, 14,198, 26,156, 47,103, 84,246,158, 40,121, 85,133,138,215,136,193, 5,116, 13,141,191,199,121,132,
+ 49,166,124,252,217, 19, 27,127,215,109,112, 60, 28,177,217,110, 86,103, 58,157,123,231,203, 5,247,175, 94, 65, 36,102,234, 43,
+162,171, 93,211,214,136, 93, 32,149, 66,101,175, 0,152,188, 10,245,142,138, 86,114, 51, 80,183, 94,213, 21,166,113,130,150,154,
+206, 73, 73,123,244,166,105, 41, 82,117,113, 80, 70,195,104,195,235,142,170,248,192,149, 84,156, 70, 71,104, 87,205,148,187,217,
+185,114,239, 12,195,192,226,190, 80,132,126,251,253,158,119,231, 36, 94,156,231, 25,227,228, 33,132,198,253,253, 43, 76,147,199,
+188,204, 56,158, 46,232,186, 22, 62, 57,108,186, 13,124,240,152, 49, 23, 17, 92, 62, 27, 40,111, 67,222,136, 99,115, 26,161,148,
+226, 69,152,204,243, 64,163,245,250,145, 6,168,177, 52,203, 57,200, 77,176, 37, 24, 0,180, 76,183, 99,244,239,229, 99, 37,222,
+ 49,198, 72,227,228,155,197,168,224, 96,150, 84, 22,248, 41,239,196,165, 42, 34,185,152,200,151,157, 45, 97,105,213, 21,230,143,
+147,119,230,178, 8,228, 68,129, 66,208, 72,136, 14,192,144,128, 97,241,120, 60, 93, 48,135,136,112, 19, 1,195, 99, 97,145,120,
+252, 65,133,128, 92,101,178, 95, 63,236,181,184,144, 43,225, 88, 30,190, 42,102,186,107, 73,133, 6,196, 85, 25, 78,150, 2,193,
+ 17,172,196,250,165,106, 91, 23,102,187, 20,146,242,186, 99,162, 9,128, 22,136, 50, 64,196,192,190, 88, 10, 92, 0, 63,212, 70,
+107,104, 41,160, 4,141, 12, 3, 18, 68,164,143, 45, 66,196,120,238, 17,150, 5, 49,177,121, 92, 40,124,122,120, 34,176,129,146,
+112,145,253,218, 55,187,226,196,223,191,231,221,251, 42, 81,143,215, 13,217,138, 18, 18, 21, 51, 49, 70, 8, 31, 32, 92, 34, 75,
+186, 79, 16,129,255, 36,197,186,209, 19,229,242,216, 94,177, 45,139, 8, 4, 73,144,150, 32,242, 8, 35, 9, 89,160, 52,105,181,
+155,206,223, 39, 33, 82,177,196,137,213,234, 39,173,171,213, 31, 49,123, 79,107,218, 48, 23,122, 55,192, 28, 60,203,100, 47,246,
+146,181,214,227, 86,156, 66,206, 11,241,226,152,172, 92,254,171, 34,181,216, 43,229,122, 71,149, 86,226,210,108,191, 84,144, 49,
+160,171, 27,252,245, 95,254, 79,184,219,239,225,103, 15, 31, 22,156, 46, 7,156,206,103, 64, 36,140, 19, 17,187, 8,228, 68,175,
+227,110,187,195,225,240,132,227,211, 1,119,247,175,105,132,218,117, 56,156, 79, 80, 90, 66,178, 21,232,243,225, 0, 99, 52,170,
+186,198, 50,207,104,234, 6, 34, 1,187,237,142, 49,178, 35,148,210,248,230,231,223,208,126,112, 28, 49,207, 11,238,238,238,224,
+131,199,241,120, 68,140,100,101, 67, 4, 22, 79, 22,168,124,192,236,247,123, 24,182,208, 9, 45,113, 25, 46,104,187, 6,195,255,
+ 95,219,123,245, 72,150,101, 89,122,235,200,171,204,204, 85,100, 70, 86, 85,139,170,174,233,230,176,197,160, 89, 51, 32, 7, 4,
+136,121,224, 31,171,255, 70,240,129, 36, 8, 18,131, 1,134, 28, 73,150, 72, 25,225,238, 38,174, 58,146, 15,123,159, 99,215, 60,
+162, 68, 79,131, 72, 56,144, 25,233,225,194,236,222,187,207,222,123,173,111, 57, 71, 15,111,101,224, 98,194,176, 31,112,254,238,
+ 59,100,165,145, 5,152, 90,214,194,249,132, 24, 9,114,211,118,150,238,151, 40, 32,165,193,229, 76,241,163,198, 52, 88,215,133,
+149,226,132,225,164,248, 77,139,203,101,132,210, 10, 58,179, 99, 68, 72,196, 64,226,165,242, 96,156,151,153,198,174,172,202, 39,
+130,156,198,234, 29,233, 89,140, 70,138, 1,166,109,185,155,214, 88, 47, 23,180,253, 0,100, 73,171, 0, 0,166,209, 12, 96, 34,
+145,173, 53, 26,139,147, 72,209,211,154, 43,209, 33,191,109,104,151, 45,100,177, 66,177,192,141, 73,152, 25,148, 37, 62, 77,180,
+227,166,152, 89, 18,212, 46, 43, 65,132, 74, 40,203,178,144,178, 92, 21,239, 52,191,246, 90,155,250,251, 27, 99, 33, 20, 37,195,
+ 41, 69, 84,181,224, 3,250,190, 65, 78,132, 42,109, 58, 7,219, 24,164, 64,226,214,152, 50,219,228,136,119, 79,214, 94, 58, 88,
+ 12,125,203,182,183, 1,110, 89, 48,244, 29,188, 91,113, 74, 39,220, 63,220,241,129,160,133,243, 43, 91,250, 18,164,210,152,167,
+ 9,187,190, 71, 74,180,214, 88,152, 52, 55,236,119,112,222, 97, 89, 9, 7,236, 87,135, 97, 24, 48,142, 35, 86,190,174,181,209,
+149, 5,159, 82, 64,224,131,129,214,196,146,151,138,228,213, 49,208,228, 74, 25, 11,169, 8,196,162, 5,224,188,135,140,148, 46,
+ 87,240,187,133, 35, 16, 19,139,115,165, 36,187, 90,112, 80, 41,213,240, 25,128,192, 70, 33,174, 48, 38,160, 31,122,198, 17,175,
+ 72, 73, 98, 89, 60,188, 59, 33,236,129,251,251,123,188, 30,143, 20,110, 36, 22, 36,166, 30,106, 77,169,118,151,203, 5, 74,209,
+ 84,136,108,127,226,118,121,189,157, 92,102,124, 70,187,115,187, 58, 44, 63,159, 20,106,195,225,192,173,182, 72,242,131,156,191,
+135, 22,249, 42,134, 78, 27,240,140,168,163, 81, 9,153, 36, 32, 18, 37,163,229, 34,117, 81, 87, 47,148,188, 29,110, 10,228,234,
+201,204,226, 74, 88,163, 4, 50,121,197,168, 22,235,155,144, 27, 72, 11,179,221, 69,190,102,179, 11,208,104, 61, 5,248,152,113,
+ 26,103,188,142, 11,124, 77,220, 42,187,220, 92,225, 16, 98, 99,181,203,155,177,173, 40,106,231, 58,182,184, 42, 12,165,144, 4,
+ 54, 96, 1, 71,230, 56,215, 36,202,215, 74, 85,241, 95, 60,210,214, 18,171,217, 52,133,215,174,160,149, 4, 68,134, 91, 51,141,
+ 18, 61,249,225,115, 34, 5,128, 81, 9, 70,117,176,182,229,155,149, 59,217,124,109, 28,181,208, 16, 28, 35,152, 98,196,186, 68,
+204,243, 10,161, 53, 76,211, 35,228,128,231,227, 5,179,247, 68,183, 23, 2, 89, 68, 26,125,151,195, 77,206, 92, 96,100,229,246,
+109, 15, 86,145,127,223,148, 50,124,202, 88, 99,196,226,201,150,231,157,135, 88, 21,212, 28,144,155,136,108, 50, 96,248,112,148,
+ 37, 67,100, 36, 68,144,144,194, 32, 11, 67,224, 20, 0, 49, 43,134,253, 4,250,158,124,209,137,156,144, 33,107,130, 31,237,170,
+ 21,131,136, 74,144, 74, 70,190, 25,204, 51,181,174, 28,170,242,239,219, 17,149,115,155,172, 35,117, 42,216,183,199,213, 44,182,
+192,151,171,167, 79, 8, 74,212,146, 72,181, 48,127, 78, 73,178, 21,206,213, 33, 88, 61, 43, 72,206,168,231, 4, 63, 72, 62, 81,
+ 71,100, 73,163, 14, 37, 20, 16,121, 34,149, 51,254,242,167,255, 4,127,254,227, 63,197,114, 33,172,230,101,186, 32,164,128,211,
+244, 66,157,140,164, 93,173,159,124,189, 94,231,121,193,186, 56,220, 63, 60,160,105, 27, 76,227,132,251,199, 7,232, 89, 35,172,
+ 1,141, 53, 88,215, 25,182, 33, 43,217,241,116, 65,138, 17,187,182,131,150, 26,211,121,194,241,120, 68,215,245,248,242,203,247,
+ 72,193,227,187,239,190,133,210, 22, 63,249,209, 79,208,116, 13,190,253,246,107,140,203, 8,169, 36, 58,165, 48,141, 51, 89,178,
+152,108, 23, 98,128, 91, 86, 60,127,248,136,195,221, 30,115, 48,128,207,184,156, 79, 56, 12,123,104,105,176,172, 4,101,249,248,
+195,119, 16, 57, 64,100,129, 12,133, 36, 37,238,238,239, 33,181,198,188, 78,208, 10,136,222,195,173, 26,171,163,128,149,144, 2,
+164, 38, 52,170, 84, 18,151,113, 68, 10, 52,197, 58,198, 35, 30,159,190, 64, 18, 10,110, 13, 80,193, 67,138,132,156, 2, 36,128,
+195,195, 3,143,170,105, 28, 43, 53, 41,240,141,166,123, 42,178,221,169,181, 13,148,148,232,153,242, 22,130,163,113,114,211, 82,
+195, 34, 0, 23, 35,132, 86,104,100, 11, 81,216, 15,156,197, 29,131,199,110,104, 97, 52, 61, 15,101,190,138,242,246,251, 1, 57,
+ 71,196,224, 73, 79,176,174,196,161,224, 78, 13, 9,184,187,219,115,199,168,160,149, 69, 76, 68,149, 75, 57, 65,101,129, 20, 34,
+164,213,240,193, 49,127,156,114,201,239,239, 31,136, 51, 46, 36, 98,162,164,184,148, 29,164, 84,136,222,147, 39,220,147,149,172,
+181, 6, 2, 9, 79, 15,247,248,238,155,239, 17,124, 36, 63,179, 1, 16, 3,238,246, 59,164,236,225,214,128,190,181,112,145,196,
+126,228,229,167,125,186, 84,134,199,223, 17, 77, 75,122, 0, 3, 74,141,244,222,211, 36,132,133,113, 69,171,148, 82, 68, 22,164,
+ 40, 23,210,192, 90, 18,246,249,213, 97,134,224,221, 58, 29,232, 16, 50, 12,239,224,181, 82, 8,206, 67, 55,116,128,141,153,188,
+227,101,202, 34, 33,224, 99, 64,195,161, 56,165,139, 37, 41, 15, 55, 33, 41, 0, 72,244, 57, 41, 67, 72, 18,101,166,236,107,162,
+ 36, 33,113, 91,228,164,224, 99, 64, 88, 87,226,217,123,135,221,110,143,182,215,240, 1,200,233,130,144, 34,206,231, 11, 0, 42,
+236, 31,157,163,120,225,213, 3, 57, 84,141,214, 48, 12, 56,158,206,117,181,153, 54,104, 77,145,105,157,252, 54,148,229,115,129,
+ 80,114,147, 87,144, 56, 93, 51,150,198,186,172,175, 55,141,116,226,116,195, 79,169, 26,226,247, 88,136,243,231, 60,191, 91, 85,
+112,174, 29,120, 17,110,148,121, 67,133,192,108, 69, 76, 55,191, 80,174,118, 20, 37,175,157,155,100,227,110,230,200,194,144, 3,
+ 92, 8, 56,141, 11, 46,243, 74, 29, 97, 22,155, 84,174, 79, 13, 83,111,247,161,159, 4,205,191,113, 64,145, 42, 85,144,136,172,
+162,100,169,240,133, 72,158, 70,239, 35,156,139,240, 62, 97,156,103,204,206, 97,154, 87,246, 50, 46, 12,113, 24, 49, 49, 34,179,
+156,180,180, 54, 12,234, 32,229,109,204,128,103,108,101,226, 55, 41,150, 14, 83, 73, 40, 35, 33, 20,144,101, 70, 4,241,217, 93,
+140, 24,215, 5,231,121,194,184, 44,220, 37, 83,225,139,197,174,147,242,141, 48,241,106,239,186,254,146,133,181,159, 50, 16,133,
+198,228,128,243,148,112, 28, 3, 94, 79, 43,206,175, 11,252,197, 35, 79, 30, 98,244,144, 83,130, 88, 2,178, 11, 52,170, 79, 2,
+240, 25,112, 25, 93,214,144, 50, 33, 33, 32,139, 68, 97, 57, 55,193, 42,138,222,171,183, 81,166,242,170,230,188,158, 90,197,239,
+214,110,252,209,254,239,252, 95, 0,144, 17,248, 47,199,197, 9,220, 68,218,110,198,146,249, 38, 93, 86,222,184, 72,100, 18,120,
+119,247,132, 95,252,221,127,131,232, 72,196,227,220, 10,173, 21,156,119,244, 96,141, 17,243, 60, 51,247,157, 64, 52,101,116, 88,
+ 80,195,207,207,207, 72, 41,225,251,239,191,199,120,190, 64, 74,137,211,233, 68,221, 41, 31,214,181,209,184,191,187,195,253,211,
+ 35, 81,200,220,130,144, 18,132, 82,120, 61,159,112, 60, 29, 33,164,196,176, 31, 96,172,198,243,199,143, 16, 66,224,225,238, 30,
+247,251, 3,114,206, 56, 94,206,128,146,184,123,184,195,195,227, 3,134, 93,143,132, 8,101, 37,180, 53,112,171, 35, 78, 57,167,
+164,245, 61,229, 92,207,211, 8,183, 46,104,173,165,131, 93, 8,144, 25, 53, 62,179,239,118,104,108,143,105,114,152,166, 21,227,
+ 56, 98,158, 23, 8,161,177,174, 1, 41, 9,120,151,176, 78, 30,206, 37, 44, 43,221,123, 68,152,115,112, 97,197, 52, 79, 88,150,
+153, 14,206, 74,194, 88,131, 16, 3, 98,138, 28,103, 74, 99,127,163,245,245,192, 37, 73,212, 73, 9,106, 29,230,121,162,103, 23,
+167, 33, 74, 41, 17,124,224,188,114,197,168,233,235,254,115, 93,102, 14, 69, 49,252,222,230, 10,165, 41,251,228,243,249,140,221,
+110, 7,239, 61,137,228,120,204,223, 48, 62,181, 96,117,141,214, 12, 37, 41, 89,241,242, 77,174,122,162,136,103,165, 43,254,116,
+ 94,104, 76,158,145, 43,126, 90,176, 39, 95,177,128,173,216,139, 99, 34, 69,255,221,221, 1,231,243,185,186,152,230,121,169, 41,
+108,206, 17, 97,109,232,123, 2,194,228,140,198,104,182,208, 81, 54,133,115, 14,151, 11, 93, 99,196, 56, 95, 43, 2,123, 97, 91,
+ 29,253,190,196,221,167, 36, 62, 90, 49, 21,244,175,170,177,170,170, 34,115,233,185,149,106, 2, 90,201,158, 47,159, 23, 99,228,
+233,169,170,255, 77, 69, 94, 85,174, 72, 96,160, 16, 5,192,208,123, 77,254,255,114,216,160, 6,201, 26,203,239, 97,196,229,114,
+134,177,154, 50,217, 51, 96,152, 89,191, 46, 43,230,105, 70,215,118, 24,134, 93,133, 11,173, 43, 9, 11,133,162,198,165,136,193,
+139, 94,140, 2, 92,228,141,168,237, 45, 29,238,115,245,232, 45, 30,118,139,134,205, 57, 83,195, 35,192,205,210, 85,105, 44, 74,
+243,178, 89,123,255,255,132,202,218, 68, 82,138, 63,210,107, 92, 35, 57,197,213,222, 86,201,240, 4,138,137, 57, 97,241, 30, 47,
+167, 17,139,163,174, 31, 60, 49,160, 29,110,250, 52,198,245,205, 11,151, 19,117,154,169,230,136,223, 70,192, 22,241,136, 42, 22,
+ 58, 6, 16,196, 72, 40, 71, 23,136, 16, 71, 35,102, 73,194, 12,254, 28, 23, 18, 66,140,240,145, 96,253,106,147, 3, 92, 62, 10,
+159,219,121,143,211,120, 34,142, 52, 63,132,148, 86, 76,147,147,180,143, 39, 94, 46, 32,169,248,175, 49, 96, 90, 87,156,167, 25,
+199,113,194,236, 92, 21, 15,214,105, 75,101,215,111,121,250,121, 35,176,200, 20, 76, 83, 70,239, 66,192, 67, 99,116, 2,207,151,
+136,111, 62,174,248,245,119, 51,126,245,205, 5,223,124,125,194,135,223,156, 48,125,253,138,248,221, 11,242,135, 11,240, 50, 66,
+156, 29,176, 36, 50,222, 39,143,108, 18,132, 1,146, 8, 72,155,126, 91,108,130,123, 40,155, 92, 92, 73,110,226, 77,220,232, 70,
+212,247, 15, 46,232,249,247,231,151,255,177,123,252,252,143,197,213,127, 2, 83,202,155,216,196,107, 94, 0,135,217,195, 40,141,
+191,255,235,127,134,199,187, 7, 40, 8,228, 64, 64,151,121,154,225,189, 71,223,247, 21,150,177,174, 43, 21, 26, 69,254,107,239,
+ 87, 28, 14, 7, 56,239,209,216, 22, 63,250,209,143, 24, 40, 67,227,234,148, 50, 82, 8, 72, 49,227,120, 58, 33,129, 58,161,148,
+ 51,190,251,225,123,116,125, 79, 66,186,253, 14, 25, 25, 31,158,159,113,184,191,131, 98,129, 79, 8, 1,231,227, 9,110,117,164,
+ 6,231,177,111,136, 1, 66, 74,156,206, 71, 28, 79, 71,188,156, 94, 97, 26,139,175,191,253, 26,203, 50,163,239,122,104, 99,145,
+ 1,188,188, 60,195,185,133, 52, 44,124,172,211, 18, 72, 97,133,202,145, 58,174,213, 67, 43, 11,165, 26, 40,221, 66, 8,141,198,
+246,200, 73, 64, 73,139, 20,129, 24,128, 24, 50, 4, 52,114, 82, 80,170,133, 84, 22,227, 60, 99,154, 71,164,228,161, 20,112,119,
+127,144,119, 90,210, 0, 0, 32, 0, 73, 68, 65, 84,192, 48, 12, 36,128,242,142,197,179,130, 25,226, 87,110,118, 14, 17,193,211,
+190, 87,105,234,130, 51, 34,156,119,213, 62, 87,120,220, 20,231, 26,217,195,174, 33, 65, 95, 47,197, 8,193,255, 94,190,135,100,
+183,135,224,110,211, 24, 83,185,241,198, 24,236,119, 59, 28, 14, 7,180,109,139,121,158, 25,120, 67, 63,199,194, 92,116,242,178,
+ 83, 6,186,181,186, 78, 23,181, 54, 0, 23, 29, 33, 0, 31,168,227,244,193,193,218,134,146,215, 56,233, 81, 41, 5,207, 7, 2,
+130, 20,209, 65,113, 93, 22,236, 15, 59,104, 37, 17,188,167,249, 93,206, 88, 23, 7, 41, 52,250,158, 70,226, 16, 2, 15,247, 7,
+210,163,240,132,108,154,103,116,125,207, 26, 5,141,151,151,151, 10, 24,243,222,227,225,225,129,192, 71,211,196,154, 0,207,137,
+117,180, 59, 86,156,214,151, 57,105,143, 44,145,168,212,183, 90,184, 11, 46,121, 43, 52,227,251,184, 28, 92,242,155,113,245, 53,
+245, 18, 53, 4,166,229,174, 95, 41,130, 59,103,230,188, 55,182,169,247,104,202, 17, 82, 10,166,232, 9, 60, 61, 61, 66, 10,178,
+ 25,206,243, 66, 25, 5,227,136,199,199, 7, 40,171, 17, 50,173,112, 46,243,116,155,242,182,121,222,172, 43, 37,194,137,223, 67,
+ 95,253, 28,204,170,116,230,111,179,210,171,134,135,169,106, 89, 20,141, 82,174,193, 53,111, 71,247, 85, 40,151, 54,245, 55,139,
+ 63,158,221,241,201,130, 63,149, 61,168,172,200, 81,148, 40,214, 55, 2,188, 43,209,108, 99,155, 43,235,118,121,165,213, 21,101,
+ 95, 72, 9,227,178,226,245, 60,193, 39,137,156, 37, 79, 94,153, 37, 47,197,239,180, 7, 92, 59,164, 92,199,238, 34, 23, 72, 0,
+217, 92,132,102,169, 29,191, 89,133, 42, 37,148,164, 93, 54,143,114, 83,206,236,113,207,196, 90,102,210, 27,157, 70,175,137, 59,
+101,159,155,145,169, 67,225, 67,132,181, 22,125,219,194,187, 5, 90,137, 58,178,111,140,130, 64,134,174, 66, 10, 82, 98, 79,211,
+ 12,231, 23, 36,161, 16,147,192, 18, 2,166,197, 81, 42,147,210,228, 17, 47, 23,216,141,224, 11,245,112, 68, 57,234, 87, 97, 28,
+ 21, 89,137, 40, 36, 2, 36,230, 0,124,127, 92,225,215,136,215,227,130,223,124, 47,209, 91,137,174,215,120,184, 27,240,238,113,
+192,195,151, 7, 28, 30, 15, 24,238,118,208,131,130, 52, 2,240, 18, 16, 26,218, 54,128,140, 55,222,255,106, 31,123, 35,212, 67,
+ 77,130,139,219, 19, 29,240,123, 11,240, 31,103,110,219,238,172, 63, 95,252,243,239, 59, 7,224, 31,134,192,121, 59, 29, 16,245,
+215, 16,228,155,170,158, 94,210,159, 16, 41, 81, 32, 35,249,128,159,255,229, 95,225,231,127,246, 83,132,197, 17,144, 73, 10,216,
+166,193,225,254,128,127,255,159,254, 61, 46,151, 11,118,187, 61, 94, 95,143, 84,152,144,161,141,193,229, 50,226, 47,126,246, 83,
+156,207,103, 52,141,197,253,221, 19, 46,151, 11,145,195,164,198,180, 46,216,113,224, 74, 8, 52,142,110, 53, 21,162, 15, 47, 47,
+ 20,134,228, 61,250,161,199,180, 44, 24, 47, 23, 44, 75,137,199, 76,184, 92, 46,240,222, 99,232, 90, 32, 38,188,124,120,198,135,
+231,103,252,217,159,255, 20,222, 59, 52, 70,227,227, 15,223, 67, 25, 69,226,169,151,143, 36,124,146,148,118,214,237, 6,180,166,
+193,235,235, 9,113,156, 32,149,128, 54,138, 56,223, 62, 99, 69,132, 18, 9, 41,172,124, 40, 54,116,232,208, 13,188, 95, 25,108,
+ 99,161,148,198, 60,205, 64, 34,250, 87,140, 25, 93,191,199,226, 87,154,216,253,240,129, 82, 28, 53, 77,193,188, 91,209, 49,195,
+125, 27,185,220, 52, 77,165,202,229,156,209,180,180,183, 85,165, 64, 8,242,214,199,156, 97,148,166, 53,146, 84,176, 67,139, 35,
+ 79, 62,114,206,208,138,108, 99, 82, 72, 90, 25, 24, 69,118, 57,239,209, 12, 29, 89,166,248, 0, 64,208, 43,234,200,151,121,102,
+ 97, 98, 68,204, 30,119, 93, 7,151, 60, 2,139, 32,201, 79,159, 97,109, 3, 53,205,140, 92,229,206, 77,129, 15,116,116,109,164,
+152, 72,139,131,140,253,126,135,215,215, 35,101,191,175,158, 8,111, 77, 91, 19,207,230,121, 65,223,119, 88,150, 5,235,106,241,
+238,241, 9,223,126,253, 13,158,158, 30,112, 60,157, 49,205, 35,118,195,142, 2,115,186,140,253,126, 79,175,211, 60,195, 52,212,
+213,143,231, 11, 55, 39, 10,211, 52, 98, 24, 6, 42,222,188, 47,223,239,247, 8,193,225,124, 62,226,203, 47,191,192,215,191,253,
+ 53,148, 82, 53,112, 38,103,186,214,140,229, 46,148, 11,216,150, 0, 23, 34,219,234,250,190, 62, 59,181, 82, 8,245, 80, 69,207,
+205,101, 89, 48,116, 61, 9,223, 88,120,184, 45,134, 69,192, 74, 9,115, 1, 41, 69, 90,169,106,178, 34,151, 34,223, 88, 11,183,
+174,144, 90, 84, 77,205, 52,141,144,146, 38, 7,199,227,145,118,239,171, 67, 22,192,101, 30,241,254,253,123,124,248,240,145, 39,
+ 19, 18, 41, 39,210,104, 36, 84,221,152,172,209,214,252,228,147,183, 28,119, 41, 37,100,198, 39,135,129,162,217, 73,165, 43,127,
+ 67, 51, 20,146,190,214,117,141,125, 61, 16, 40,165, 72,112, 43,174, 8, 98,213, 74,253,203, 13,132,253,147,193,186,172, 98,185,
+ 18, 57, 90,254, 84,214, 5,188,144,229, 68,161,104,219, 46, 52,134, 97, 95, 35, 16,101, 77,205,201,181, 88,145, 24,142,199, 74,
+ 60,242, 86, 34,193,106,192,168,140,198, 72, 24, 69,208,127, 37, 34, 82, 12, 88, 92,196, 15,167, 25,255,225,215, 31,112,113, 2,
+144,150,119,243, 36,196,163,127, 87,252,179,137,155, 9,192,141, 48,170, 20,145, 98,223,146,160,145,157, 38,193,131, 20,215, 4,
+ 55, 72, 42,228,185,236,225, 82, 38,171, 30,243,167,173,213,204,229,165,155,173, 4,128,212,253, 6,199,197,106,173, 72,112,151,
+136, 79,109,140,132,165,140, 22, 24, 5,244,157,133,173,251,248, 2,107,163, 78,119,245, 17, 19,103, 15, 47, 62, 97, 94, 3, 78,
+231, 17,243,178, 34,161,252, 60,229,226,144, 27,134, 62, 71, 33, 10,201,157,121,233,210,175,225, 46,130, 5, 24, 9, 25, 33, 75,
+ 44, 1, 56,175, 25, 47,115,198,215, 47, 11,126,243, 97,198,175,126,152,240,171,239,103,124,251,205, 5, 31,191, 91,112,121, 77,
+240,103, 1,229, 13,116,234,176, 56,141,127,251,255,124,143,111, 63,156,144,133, 69,228,224,154,194, 93, 46,123,124, 8, 18,208,
+ 85, 17, 8, 59, 19,182,157,114,126, 43, 28, 41,152,200,223,105, 49,147, 55, 34, 58, 33, 4, 29,214, 54, 32,155,235,120,255,202,
+227,174,208,151,141,210,148,126, 72,201,221,244, 63,108,244, 94,243,234,235,100, 76,178, 96, 83,212, 12,119, 37, 37, 82, 12,208,
+ 89,226,253,227, 23,248, 31,255,135,127,133,199,253, 61,220,186, 96,188,156,177,186, 5,199,243, 17, 31, 62,126, 64, 63,244, 56,
+157,206, 68, 39,107, 26, 64,146, 32,211, 90, 11,193,145,149,151,243, 5,251,253, 30,167, 51,113,167,127,248,240,140,110, 55,144,
+133,199, 90,104,163, 57,170,179,197,126, 63, 96, 93,102,234,214,246, 3, 98,138,120,121,126,198,229,124,134, 82, 2, 95,125,245,
+ 21,246,135, 61, 78,199, 35,150,101,198,227,227, 3, 4,227, 49,115,206,248,234,253,151,184, 59,236, 97,181,198,119,223,124,131,
+ 16, 61, 30, 31, 31,177,223, 15,152,198, 17,227,249,130,174,223,225,225,241, 1,200,192,175,126,245,107, 26,133, 26,141,182,107,
+ 33, 68,134,115, 51,188, 91,121, 60,174, 48,141, 23,196, 20, 17,130,195, 50,207,149, 17, 30,153,210, 5,208,120, 58,113,150,184,
+148, 18,199,215, 19, 46,211,136, 24, 3, 39, 39, 82, 80, 70,203, 48, 28,163, 53,134,161,131, 15, 30,227, 56, 66, 10, 74,230,242,
+ 46,208,179, 73,211, 53,233,156,195,110,183,171,184,210, 16, 2, 89,147, 50,141,226,155,166,193,233,124,198, 60,175,132, 2,213,
+170, 82,203,180, 34,116,109,219,180, 72, 57,193, 26,133,221,110, 7, 33, 36, 11,219, 56,167,156, 39, 5,203,188,192, 24, 67,113,
+168, 41, 97, 89, 23,196,152, 24,220, 66, 86, 44,183, 58, 52,109, 11,169, 21,188,119, 92,188, 37,134,190, 39,148, 46, 31, 52,200,
+135, 45, 48, 94,206,120,184,191,167,245, 64,138, 48,250,154,130,214,182, 13, 89,116, 67,160, 4, 73,107, 16, 35,101,141,239,247,
+123,156,207,164,147,200,165, 8, 8, 98,139, 43,173,224,156, 99,127, 62,145,219,186,182,165, 14,154, 89,245,231,241, 2, 8,160,
+239,187,106,209, 75, 41,214,215,112,183,219, 83, 58,223, 76, 44,127,165,105,106, 96,109, 83, 69,139, 74,211, 14, 27,188,110,157,
+151,137, 86, 53,236,246, 40,196, 54,112,199, 62,207, 51,139, 9, 57, 26,214, 88, 44, 51, 69,227, 26, 22, 17, 74,113, 61, 48, 44,
+203,194,211,153, 4,231,214,122,159, 26, 99,224,248,126, 10,129,128, 69, 49,101, 24,211, 0,137,210,249,104,252, 79, 81,185, 33,
+ 16,203, 32,231,204,211, 21, 82,203,247,195, 14,151,113,170,100,194,188, 33,108,166,162, 90,199, 45,152,141,166,196, 87, 45,207,
+ 54,133,109, 43,141, 47,190,118,169, 20,178, 32,252,121, 6,213,158,244,153,134,101, 27,217, 90,190,223, 63,174,168,139, 43,230,
+179,122,232, 50, 96,148,193, 48,236, 96,109, 83,133, 13, 85,205, 46, 21,125,212,140,245, 84, 21,238, 90, 1, 86, 11, 24,149, 96,
+ 13,160,117,134,150,212,105,134, 16,176, 4,224,255,253,246, 5,191,254,254,140, 53, 41,100,169,168,203,206,165, 39,189,142,118,
+ 83,174, 4,232,155,143,235,100,151,148,252,148, 48, 74, 55,170,214, 4,189, 41, 78,126,194, 86, 82,183,156,217, 5, 80, 0,252,
+ 90, 9,104, 41, 48,116, 29,246, 67,135,190,111, 48, 12,228,207,221, 13, 61, 26, 78,126,106,172, 65,215, 90,236,134, 30,125,223,
+ 66,107,137,213,173,216,245, 13,246,125,135,198, 42, 12, 93,139,182,161,236,228,196,251,147,144, 50,124,204,240, 33,193,249,136,
+121,117, 88, 92,196,101,114, 24,231, 5,227,180, 34,196,196,158,128,207,139,185,202,238,246,138, 95,103, 43,162,144, 84,204,121,
+ 34, 32,232, 42, 66, 76,128,203, 2, 46, 75, 44, 73, 97,142, 26, 43, 44, 22, 52, 88, 34, 48,173, 17,175,147,195,135,243,130,143,
+227,130,211, 56,193,103,160, 59, 60,226, 39,127,241, 87,200,210,224,183,191,253, 30, 46, 36,102,241,243,148,160, 92,140, 55, 52,
+182, 50, 93, 16,159, 20,117,113,187,100, 71,222,152, 39, 63,183, 94,185, 85,198,139,218,145,231,188,157,210,108,190,100, 81,164,
+110, 28, 31,185,226,115,197, 39,183,206,118,188,245, 15,131,192,110,130,115, 5, 93,111, 50,103,236,219, 30,255,221, 47,254, 5,
+190,122,250, 2,211,229,132, 20, 3,142,167, 87,184,224, 16,145,112, 58,159,112,190, 92, 24, 43,153,153,174,213,146,203, 66, 74,
+216,198,194,173, 14, 67,223,195,114,188,227,188,204,213,103, 94,199,128,172,190,181,198,224,244,250,138,101,154,113,199,185,218,
+211, 60, 81,145, 60, 30,145, 98, 66,219,181,248,205,111,126, 67,185,209, 93,143,182,109,241,252,242,130,203,120, 65,215,247,212,
+145, 38,143, 31,126,248, 30, 82, 74, 60, 62, 61, 98,117, 14,211, 52,211, 3,211, 90,236,246, 7,204,243,140,121, 89, 16,120, 28,
+ 12, 8,156,207, 39,178, 43,229,136,182,239,200,119,239, 40,190,212,187,181, 98, 80, 95, 79, 47,152,152,139, 78,133, 40,192, 45,
+ 11,214,117,134,115, 11,137,170, 98, 64,211,104, 88,173,161,140, 36,120, 76,240, 4,142, 9, 1, 95,190,123,130, 84,154, 10,127,
+ 18,208,166,161,215,206,123, 46, 60, 84, 24,186,166,165,123, 95,107, 44,171,195,234, 61,220,234,168,160,132,136,174,109,113,153,
+ 70, 4,190,150,125, 8, 24, 24, 27,155, 56,195,161,109, 26,228,148,208,182, 77,141,107, 13,158, 70,188, 41,209,104,119, 94,215,
+ 26,245,219,182, 61,125, 78, 36,203, 83, 12, 84,184,154,198, 82,166,183,224,135, 57,119,239, 57, 39, 30, 5,143,172,126, 22,117,
+ 26,169, 88,140, 59,244, 61,142,175,175, 80, 90, 85, 80, 74, 25,101, 75, 37,161,153,191,158,249,192,131, 68,147, 10,165, 85, 21,
+ 43, 75,214, 65, 17,191,222, 32, 36, 74, 82,107,172, 69,136,129, 99, 84,215, 26, 74, 35, 4,208,112, 20,111, 99,105,196,111,173,
+ 5, 68,194,186,208, 78, 61,243,206, 59,115,129,210, 90,211,202,128, 3,112, 74, 94,186,228,108,139,210, 68,149, 98,103,217, 38,
+ 25, 99,168, 43, 40,128, 14, 42,109,211,213, 32,157, 45,197,148, 70,214,164,159,144, 74, 85,221, 80,253,135, 65, 51,100, 77, 20,
+208, 70,227,249,249, 21,222, 71,180, 13, 9,254,202, 52,167,235,218,202,223, 39, 93, 64, 70,223,119,120,121, 57,242,225,138, 51,
+ 72, 66,228,168, 11, 82,218, 23, 45,217,103, 39,129, 5, 7, 93, 32,103,111,137,114,117,160, 40,106,150, 73,185,159,139,253, 85,
+124,166,152, 23,171,101,230,106,160,183,223, 60,255,142, 24,214,223, 15,175,222, 62, 92,217,164, 36,137, 38,119,237, 22,197,205,
+ 23,173,158,223, 42,106,203,245,217,158,216,131,151, 82, 66,138, 2, 33, 82,193,143, 73, 96,154, 19, 94,142, 19,214,144, 16,178,
+132,100,132, 41,125, 29,141, 66,149,223,118,101,197, 19, 72,197, 32,109, 60,245,220, 61, 50,175, 94, 41, 81,199, 96, 9, 68,188,
+201, 73, 32, 51,180, 38,179, 55,181, 76, 25, 4, 18,186,182,195,195,221, 30,187,161, 67,129,231, 53,141, 37,223,174,247,240,171,
+171,184,203,190,239, 97,140,198, 52, 77,248,246, 91,242,154, 30,238, 40, 45, 75, 2,136, 89, 32,184,194,138,167,145,147,224,184,
+216,105,113,120, 29,103, 76,139, 71, 76, 18, 62, 2,158,249,242,185,160,132, 68,177,147,241,107,154,229, 6, 60,179,169,167,204,
+107,207,140,113,205, 82, 85,177,157,224,232,207,200,165,200,104, 13,169, 13,172, 54,104, 76, 70,219, 72,216,174, 1,154, 14, 94,
+ 24,140,139,199,243,203, 9,187,251, 71,252,237, 47,254, 6, 95,254,236,103,184,204, 14,255,243,255,242,127, 32,179, 40,229,186,
+ 14, 16,159, 92, 51,127,116, 35,204, 43,157,219,122, 46,254, 96,247,252,118, 52,254,199, 92,206,111,132,242,255,136, 16, 23,222,
+163, 51, 86,183,192,124,140, 84,248,217,159,252, 57,246, 77,135, 31,190,253,134, 70,186, 49,225,120,166,221,116, 55,116,216,199,
+ 61,190,254,250, 91, 52,214, 34, 69, 26,221, 47,139,131,146,148, 67,254,248,244, 72, 69, 33, 38,188,190,190, 34, 68, 74,186, 58,
+157, 47,240, 49, 84, 17, 83,136, 30,251,253, 30,145, 19,174, 86,239,160,173,193,215,223,126, 3, 33, 37,198,113,196,225,254,174,
+ 10,185,200,206,182,226,253,251,247,248,238,135,239, 17, 83, 68,191,223, 97,119, 56, 96,153, 39,124,120,253, 64, 33, 47, 90, 99,
+ 94, 87,104,109,112, 58, 95,208,180, 13, 30,238,238,145,165,192,233,124,194,178,210, 8,189,239, 7,156, 79,103,132, 72, 2, 34,
+109, 45,156,139,128, 80,200, 41,192, 42,133,172, 4,199,218, 38,104,214, 87,196,156,240,225,195,119,232, 88, 68,165,141,132,177,
+ 45,114, 78, 80, 90,163,107, 91,248, 64,216, 92, 9, 9, 72, 3,239, 19,238, 14, 3, 76,211, 96,113, 14,206, 69, 40,105,240,250,
+114, 66,215, 53,176, 90,145,141,106, 58, 19,194,148, 81,181,231,243,165,114,223,133,148,104,154,142,227, 91,201, 30,101,173,133,
+ 80, 26,238,124,162, 98,233, 29,167,199,105, 94, 9, 68, 52,205,174,142, 77,135, 97, 64,240,129, 59, 74,131,211,121,132,200, 25,
+139, 15,216,239, 35,188, 99,106,164,177, 88, 72, 9, 92, 87,114,108, 86, 66,215,117,104,219,140,203,101,164,226,218, 52, 88, 23,
+ 66,187,122, 31, 88, 1, 77,107,195,166,181,148, 63, 46, 11,174, 57,212,231, 46,137,240, 4,194,186,224,176,223, 97, 89, 86,100,
+ 75,119,226,254,112,192,183,223,127, 15,219, 80,212,171,247, 30, 41, 71, 60, 60,220, 65, 47, 26, 82,100,138, 9, 21, 6, 41,102,
+216,182, 1,132,128,209, 4,174, 89,215, 21,182,105,120, 31, 46, 49,205,180,254, 73, 57,225,116, 58, 97,104, 59,140,227,136,214,
+104, 4, 38,231, 41,165, 16,146,227,194, 78, 34, 77,194,186, 82, 49,143, 12,186,242, 41,192,116,150, 18,251,188,135,224, 40, 94,
+ 74,199, 83, 53, 95,189,248,249, 53, 11,248,154,166, 33,150, 63, 64,113,222, 92,184,147,247,144, 9,252,218, 73,116,109,139,249,
+124,134,182, 6,143,143, 79,248,240,195, 51, 86,231,208, 54, 22, 96,222,128, 16,244,254, 53,214, 98,158,151,170,157,120,122,186,
+ 71, 8, 5,228, 36, 97,140,197,226, 28, 29,216, 21, 3,135,196,231,181, 99, 66,138,107,236,244,134, 22, 39, 54, 90, 35,228, 77,
+163,177,125,146, 8,241, 25, 96,219,109,126, 74,249, 12,213, 40,253,203, 27, 0,199, 39,250,227,178,231, 78,236,187,101,159,116,
+ 22, 85,165, 94,198, 76,229,129,218,152, 6,187,221,174, 42, 55,149, 20,236, 21, 87, 87,227, 61, 68, 29,189, 75,201,221,178, 22,
+ 52,114,231, 14, 93, 43, 9, 37,168, 79, 11, 33,224,135,215, 9,255,241, 55,223,227,236, 18,178,182,117,188, 93,205, 71, 82,177,
+ 26,254, 26,111,119, 59, 22, 21,204, 49,207,215, 16, 13, 30,167, 25,163,104,161,144,169,168, 39, 62, 24,164,148,170, 48,129, 26,
+ 90, 42,234, 70, 73, 60, 62,222, 99,232, 91, 12,157, 37,159,185, 18,104,223,220,100, 90, 43, 30,235,203, 58, 10,243,222, 35,120,
+ 87, 99, 11, 67,138, 88, 61,217,245,200, 80, 37,169,200,167,140,217, 5, 92,150, 21,151,121,197,234, 3,132,182,240,145, 34, 93,
+107, 33,202,105,227,185,190,218,248,110, 46,132, 26,206, 34,175,162,180,204, 7, 30,144,162, 86,129,118,190, 90, 9, 72,126,200,
+138, 72, 9,118, 49, 71, 72, 36,216,198,162, 31, 6,220, 13,123, 60,237,118, 56,180, 29,164,144,104, 15, 45, 30,126,242, 35, 32,
+ 68,252,239,255,231,191,230, 68,214,196,227,169,173, 96,142, 68, 98, 87,159, 37,143,203,111, 66,130,176,129, 2,136, 55, 26,140,
+219, 2, 93,225, 12, 69,139,177,253, 90,249,246,186,196, 77,167,158,111,227,100,203, 21, 95, 87, 19, 87, 65,203,246, 84,252, 15,
+233,212, 19,175, 56,144,137,183, 32,114,198, 79,222,191,199, 63,251,175,255, 26, 22, 10, 47, 31, 62, 64, 42,129,211,233,136,140,
+140,217, 81,135,251,195,135, 15,124, 40, 86, 56, 28,238,177,174,164,132, 55,214, 50,122, 83, 84, 80,199,101, 28,161,173,197,226,
+ 86, 76,243,140, 97, 24,208, 51, 86,147,186, 55,129,151,151,103, 52, 45,141,138, 35, 72, 56, 71,164,177, 61,118,251, 61, 78,231,
+ 51, 62,124,160,130, 45,132,192,241,120,132,115, 14,211, 52,113,218, 88,194,241,244,138,197,209,110,120,245, 14, 47,175,175,220,
+145, 39,216,134,120,234,211, 60,225,124, 57, 87, 53,248, 52, 47, 88, 87,242,149, 91,107,209, 48,252, 35,134, 72, 93,113,107, 57,
+ 46,115,169,105, 93,166,163,142,169,168,216,231,121,130, 15, 43, 39,108,121,196, 24,208,183, 29, 41,176, 5,217,187,186,182, 67,
+ 78,180,154,184,191, 59,224,116, 58,225,124, 26, 33, 4,221,135, 41, 82,178,151,247,132, 0, 53, 70, 35,248,200,202,121, 62, 68,
+199,140, 97, 24,160, 36, 41,209,189,243,240,161,128,111, 18,127,159, 6, 57, 17, 31,188,236,183, 83,138,216,237, 6, 8,145, 49,
+ 47, 19, 19,252,168, 75, 54, 90, 97,245, 1,109,211,112, 71, 74,202,248,107,200, 21, 16,248,103,210, 60,166,214,154, 16,165,146,
+ 87,106, 69,104, 87,166,107, 84,188, 44,197,136, 26,205,182, 44,139,105,154, 96,140, 37,104, 74,197, 96,211, 51, 58,132,128,174,
+107, 33,153,135, 49, 79, 19,164, 82, 24,134, 30,207,207, 47,216,239,118, 12,238, 74,156, 62, 71, 62,111,205, 17,162, 74,105,242,
+176, 27, 93,121, 38, 41,197, 58,250, 46,190,250,148, 18,186,150,200,126,187,161,167,189,120, 12, 12,183,162,221,176,226,103, 94,
+ 81,109,103,230,241, 95,199,237,244, 12, 47,136,217,146,172,150,185,201, 16, 60, 70,151, 82,178,168,177,196,229, 94, 59,118, 33,
+105, 12, 46, 57, 44,167, 80, 66,137,204, 24, 33, 57, 3, 65,155, 6, 41, 18,218,117, 93, 72,136, 58,207, 35, 5,136, 9,226, 19,
+ 0,140,148,149, 2,211, 60, 19, 74, 89, 17, 87, 32,248, 72,177,183,165,147,254, 3, 32,170, 50, 21,217, 22,243,237, 46, 60,111,
+176,178,165,151, 40, 82,113,185,197,153,227,202,212,184, 89, 31,242, 36, 83,181, 90,254, 18, 34,111, 16, 46, 36,234, 18, 27,127,
+ 56, 68,102,152,136,184, 42,218,249,207, 11,116, 67,224,186,215,237,154, 22, 67, 63, 16, 82, 80,104, 30,237,148, 15,190,224,144,
+ 42,100, 70, 41, 1,173, 1,171,128, 70, 75, 40, 69,163,119,171, 51, 52,251,202,167, 16,241,219, 31, 78,248,230,195, 17,107,146,
+200,210, 16, 58,145,125,201,229,240, 33,184,139, 46, 5, 59,191, 97,115,211,239, 39, 25,182,127, 21, 41,148, 7,124,213,220,215,
+148, 28,238,239,121,239,174,148,128, 17, 2,173, 53,184,219, 15,104,141, 70, 99, 45, 71,197, 10, 74,103,146,101,132,182,225,203,
+243,215, 83, 74,163,107, 90, 52, 77, 3,169, 21,180,177, 48,198,194,216, 6,109, 63,192,182, 29,160, 52, 0, 5, 31, 19, 22,231,
+ 49,205,174, 90,123, 32,232,130,242, 62,112, 29, 75,184,113, 84,111,118,195,159, 96, 86, 63, 9,223,185, 10,250, 4,239,192,181,
+ 50, 80,252, 48, 84,124,128, 65, 38,100, 45, 88, 8, 41,114,198, 48, 52,184,127,216,227,171,175,222, 97,223, 55, 8,110, 65,163,
+ 0,155, 51,254,221,255,245, 31,241,253,135, 19,144, 21,141,143, 68,201,229, 35,191,254,239,178,154,101,108, 80,173,184,254, 14,
+ 73,224,166,160, 23,141,198, 91,122,220,237, 88,226, 26, 20,147,197,245,144,246,230,156,112, 21,159, 36,108, 94, 11, 84,127,105,
+126,243,186,225, 6,191,123,179,237,223,172, 59,168,144, 11,246,147,145,213, 8,184, 27,118,248,251,191,254, 91, 28,218, 30, 8,
+161, 74, 60,231,121,193,101, 26,241,122, 58, 97,117, 43,241,248, 3,101,120, 7,208,161, 79, 42,197,163, 61,193,176, 12,135,151,
+151, 23,236,239,238, 32,148, 38,240,145, 38, 78,123, 66,134,181,212,229, 36,239,137, 44,198, 19, 35,183, 58,196, 24,241,248,240,
+128,253,110,135,227,241,200,156,235,140,126,183,195,196,221,186, 98,107, 86,223,117, 56,241,207, 37,164, 68, 66,198,233, 76,255,
+ 29, 51,249,183,143,231, 35, 66,240, 56,189,158, 32, 65,105, 85,235, 76, 66, 41, 74,187, 34, 69,241,234, 29, 94, 95,159,235, 40,
+148, 70,179, 26,145, 11,130, 20,244,192, 6,195,144, 72,109, 31,145,133, 98, 88, 74, 38,178,220, 50,115,131, 64, 1, 66,109,219,
+210,158,119,232, 32,164,160,195,132,243,208,198, 48,220, 69, 85, 98,155,101,165,116,102, 17,225,186, 44,149,106,182,235,123, 42,
+ 78,200, 24,231, 25, 41,147,117,108, 89, 22,228, 20,208,183, 45, 11, 78,233,153,177,250, 21,109, 71, 94,233,142, 61,215,187,221,
+ 0,207,145,168,137, 51,235, 51,255, 12, 82,210, 78,223, 90, 11,193,150, 42,129, 12, 99, 20,131,153, 4,140,210, 4,171, 9, 17,
+ 86, 91,122,178,213, 41,161, 66,102,171,175,210,178,250,188,133, 80, 28,230,146,234, 61, 97,141, 33,188, 51, 63,227,154,134,112,
+180, 49, 69,216,198, 98,158, 39,236,119, 3, 69, 40, 35,163,237, 58, 8, 13,216,214, 86, 60,170, 82, 26, 62,198,186, 74,209, 74,
+ 33,103, 2,196,140, 23, 82,185,239,119,123, 88,163,225,189, 35, 75,178,178,172, 98,151,176, 13, 5, 15,101,118,228,164,148,249,
+ 25, 74,133,221,104, 77,194,194,148, 97, 56,227, 60,229, 4,211,152,138,242, 93, 22,186, 31, 34,143,236,233,115, 9,238,226, 67,
+ 64, 22, 25, 74,203,171, 77, 56,209,189, 28, 57, 90,248,124, 58,195,104, 11,173, 12,214,101,173,235, 71,239, 61,230,105, 65,215,
+210,129,194,232,235, 56,127, 93, 61,186,190,163,140,117,118, 66, 56,231,200,177,116, 58, 35,198, 76,169,133,109,207,147,131,140,
+ 20, 3,215, 32, 81, 54,210,155,124,147,124,141,145, 45, 46,140, 77,214, 72,206,249,186, 30,102,120,213,205,242,145,153,242, 66,
+ 8,126, 92,230, 26, 72,150, 19,115, 56, 18, 55, 39, 25, 80,189, 86,191, 44, 17,167, 90, 16,209, 76,178,138,183, 60, 60, 41, 57,
+145,126, 8, 89,197, 87,162, 10,179,228,102,204,174, 36,137, 59,250,174,131,209,134, 61,235,138,233, 63,186, 6,190,215,239,169,
+ 37,172, 86,176, 90,192,106,129, 70, 73,104,157, 97, 52, 96,100,130, 22,212, 37,159,150, 21,255,233,183, 31,240, 50, 46,200,202,
+ 64, 8,141,204,224,150, 92, 85,221,215, 49, 68,253,119, 41, 63, 73,145, 19,178,196,223,201,122,106,162,113,154, 98,175,120, 38,
+116, 29,119,252, 74,147,224,195, 26, 34,198,181,172, 94,239,218,150,232,112,214,112,118,176,226, 61, 98,174, 57,232,219,228, 29,
+242, 76,210,205, 98,140,102,161,157,133,109, 26, 66, 91,106,141,148,233,162,242, 33,193,185,128,105, 92, 48, 78, 51,188, 35,153,
+ 68, 74, 25, 62, 6,184, 64,227, 50, 81,124,250,226,141,234, 92,108,137,128,121,115, 24,147, 69, 41,113,243,186, 72, 37,161,165,
+169,171,147,242,218,101, 41, 32,181, 70,219,117,176,198,242,137,215, 65,138,128,198, 72,252,228,253, 59,188,255,234, 11, 24,161,
+225,231, 11, 58, 99,176, 44, 17,255,230,223,253,103,114,188,137,132,164,174,105,127, 25,121,163,228,188,145,227,111, 70, 78,114,
+211,157,127,126,151,126,229,251,227,138,171,225,139, 90,148,118, 66, 94,111,169,156, 55,154,145, 27,241,228,166,211,175,234,117,
+113,195, 87, 22,159,141, 74, 20, 5, 53,115, 45,236,114,163, 55,201,215, 41,128,200,128, 17, 18,127,243, 87,255, 20, 63,254,226,
+ 75, 68,231,224,230,133,121,252, 2,243,178,192, 39,194,138, 26,206,223, 78,137, 44, 60,171,247,128, 20, 28,107,233, 48,244, 67,
+141, 71,237,251, 30,198, 54,228, 98, 8,212, 57,181,109,139,121, 93, 48,141, 23,242, 82,207,212,109, 55,109,195,142,142,132,187,
+195, 29,158, 30,159,112, 62,157,112,100,226, 28,152, 21,238,156, 67, 99, 45, 30,238,239,241,238,233, 9,200, 64,207,163,116,109,
+ 57, 28, 36,101, 8,165, 32, 88, 0,186,174, 43,197, 89,110,237, 58, 2,152,151, 5,198,106,228,148,224,157,195,233,124, 70,200,
+100,195,209,138,224, 74, 62, 6,196, 76,150, 45,205, 5,205,104, 77,118,190, 24, 41,178,149, 81,155, 84,188, 36,239, 88,175,197,
+193, 7, 7,205, 59,101, 32, 99, 93, 29,117,151, 41,145,166,165,107, 25, 43,186, 98,232, 7, 26,191, 46,107,141,116,213, 90, 3,
+ 57,163,103,129,150,247,164, 21,216,237, 14, 20,175, 25, 60, 26, 75,169,111, 53, 87, 93,107,228, 76, 9,139, 57, 69,242,236,243,
+ 24, 61, 4, 7,107, 44,230,121,198, 48,244,100, 91, 45,246, 42,246,203,151, 41,101,228,130, 89, 58,197, 2,165,201,153, 14, 4,
+235,186,160,109, 91, 4, 79,162, 45,169,104, 69,216,117,109, 21,216, 5, 23,234,142,187, 20,140,226,147, 7,119,251,222,123, 38,
+199,145, 6, 64, 74, 26, 77,151,195, 4, 69,101,107, 52,182,129,115,158, 70,220,138,176,179,158, 67,110,148,146, 60, 81, 37,202,
+ 91,185, 73,250,129, 20,233, 33,120, 36,182,242,118,172,186,111, 26, 74, 0,148, 82,242,129, 13,245,245, 43,185,230,193,121,116,
+ 61, 77,146,180,214,172, 97, 74, 87,254, 8,223,135, 82, 82, 20,182,228,233, 17, 0, 44,203,204,175, 27,119,180, 66, 18,219,157,
+245, 73,229,177,145,153,220, 55,142, 51,135,191, 76, 88,150, 21,195, 48,212,134,129,210,243,100,213,223, 72,165, 41, 7,157,191,
+ 54, 89, 29,105,236,127, 62, 95, 16, 83,224,104,220, 30, 67, 63,144,243, 43, 38,164, 16, 57, 3, 62,215, 70, 75,150,169,252,150,
+ 78,185,137, 43,167, 3,219,198, 9,244,217, 6, 44, 87, 91,114,237, 78,120,103, 88,219, 81, 1,168, 59,107,126, 89,213,143, 12,
+141, 80, 82,194, 40,122, 1, 21,143,207,149,228,255,207,197,138, 16,170,252,231,138,189,136, 82,194, 40,141,221,176, 67,215, 13,
+208, 60, 6,162, 46,131,138,133, 82,234,166,168, 91, 30, 79, 91, 35,208,104, 1,171, 72,253,174, 53, 96, 24,155, 26, 82,194,135,
+227, 9,255,249,187, 87,204, 62, 65,152,134,242,202, 51,141,191,136, 58, 71,232,212,250, 2, 8,177, 17,243,189,177, 43,109, 98,
+237, 20, 7, 1, 20, 96, 64,241,164,163,210,111, 69,221,163,151,159,189, 49, 6, 77, 67, 30, 84, 58,121,107,226, 13, 43,186,112,
+ 19,174,152,219, 2,128, 40,223,171,188, 97,137,163, 69,149,210,200, 89,212, 4, 57, 31, 2,229, 1, 59,135,101, 94, 49,142, 51,
+150,197,209,174,134, 73, 74,129,197, 35,249, 77,175,184,213, 55,136, 77, 70,125,141,248,172,194,184, 66,224, 99,235, 33, 63,216,
+196,246, 53,205,101,143, 45,144,149,130, 52,188, 91,111, 27, 52, 93,131,135,195, 14, 77, 78,208, 57, 96, 55, 12, 24,158, 30,160,
+122, 11,169, 20,172,233,240,111,254,239,255,128,215,203, 25, 96,104, 78,174, 7,140,173,248, 76, 94,199,112, 57,223, 76,200,111,
+ 71,230,249, 54,224,224, 77,130, 96,218,132, 14, 93,245, 20,226, 26, 66,180,249,243, 58,118,191, 21,157,110, 8,131, 87,184,131,
+ 16,226, 6,234,240,251, 44,118, 37, 92, 33,111,186,253,204,233,122, 6, 2,127,254,227, 63,193, 63,253,139,191,132, 76, 64,116,
+ 30,235,178,214, 46,112, 94, 38, 74,251, 2,141, 12,205,102,228,234,188, 39,225, 78,219,193, 40,141,187,187,187,170,240, 37,126,
+246, 90, 11,109,223,247, 56,159,207,120, 57,190,226,231, 63,255, 57, 46,103, 2,208, 20, 85,236,233,120,194,126, 24,208,117,148,
+ 35,126, 58,157, 0, 0,195,126, 7,173, 20,142,199, 35,223,207,116,223, 75, 8, 56,231, 8, 5,107, 13,132,164,132,172,182,109,
+ 49,244, 59, 12,125,143, 20, 41,200,194, 40, 3,219,183,220, 9, 72,204,203,140,142, 51,217, 75, 92,103, 76, 9,146, 71,243,141,
+181, 88,157, 7,196, 53,229,143, 0, 79,158,152,222,146,180, 6,195,208,115, 92,102, 70,142, 1, 74, 0, 66, 93, 51, 38,148, 82,
+ 8,209,179, 82,188, 69,211, 24,140,151, 11,237,141,119, 59, 40, 41, 96,148,194, 52,142, 80, 74,226,233,233, 9,227, 52,113,225,
+ 87, 55, 32,154,190,239,107, 58, 23,120,199, 78, 34,179, 84, 11,135,115,174,198,206,230,156,106,110,196,126, 55, 96,225,221,171,
+ 98,145,104,226,244,195,194, 57,151, 82,113,113, 37,102,127,199,182, 67,101, 52, 86,183,162, 31, 6, 38,196,209,100,166,105,169,
+248, 52, 77, 91, 89, 5,138, 29, 58,186,116,192,252,172, 50,214,144, 34, 33,165, 26, 89, 75,227,121,142, 43,206,168,211, 2,183,
+174, 20,199,202,226,176,242,140, 66, 6,235,103, 44,220,178,192, 26,178,126, 81,114,157, 37,239,183, 40,207, 44,226,225,211,250,
+148, 96, 61, 36,206, 20,232,186, 22, 77,219, 96,158, 73, 68,169,140,161,164,179,194,121,231, 56, 86,195, 56, 91,193,147,167,174,
+235,234,186,147,166,185,130, 86, 10, 41,209, 65, 14,130, 14,131,140,133, 37, 65, 96,168,216, 92, 74,218, 83,204,143, 15, 85,216,
+ 71,196,206, 92,213,245,197,189,244,250,122,172,235, 11, 18,239,113,142,186,162,189,253, 52, 78,220,217,211, 33,201,242,228,167,
+109, 44,180, 38, 48,209,178, 44, 24,167, 17,235,178,226,241,241,137,166, 39,171,171, 66, 73,193,206,163,183, 25,143,185,118,232,
+ 87, 8, 87, 25,193,191,229,171,200, 55,150,236, 26,129,142,109,214, 10, 45,110,133, 0,212,189, 53,191, 84,146,138,117, 81,161,
+151, 29,184, 4,167,164,201,107, 90, 90,121, 19,181,226,191,195,133, 87, 49, 52, 69,107, 75,136,189,182,133, 54,134,132, 46, 74,
+ 87, 18, 80,161, 2,105, 45,107,192,189, 53, 10,141,145,104,141,130,149, 2, 70, 75,104, 67,197, 94, 9, 10, 63,249,238,249, 5,
+191,121, 30, 17,133, 38,213,187, 0,219, 90, 50,191,112, 36,110,168, 97, 36, 37,247,125, 83,232,202,133, 34, 4,161, 55,133,100,
+ 53, 39, 68, 29,253,208,233, 74,113, 33,167, 78, 68, 42, 81, 79, 88, 82, 72, 52, 70,195, 88, 98,183, 75, 37, 56,234,175, 64, 16,
+216,203, 42,213, 77,238,112,129, 38, 4,246, 32,198, 68,160,154,178,223,117,222, 35,196,196, 5,221, 99, 26, 39, 76, 19,161, 64,
+ 19, 39, 15,197, 76,153,191,180,167,202, 85, 16,119,131,197,251, 68,224,117, 5,175, 82, 17,149,181, 88,146, 23, 86,177,202,159,
+126,255,196,177,169,213,107,203, 83,139,228, 35,114, 12, 48, 70,226,126,215,225,253,227, 29,238, 15, 29,132, 34, 91, 81,119, 24,
+208,252,244,199,144,109, 3,119, 26,241,171, 95,127,141, 95,253,246, 27, 42,138, 9, 53,106,239,106, 29, 19,117,180,253, 22,142,
+115, 45,152,226,150,175,190, 9, 24,202,111,167,237, 55, 10, 83,113,163,132,207,216,230,180,231, 55,148,167, 55,161,172,219, 80,
+162,237, 87, 18,226,179,121,111, 55, 34,211,122,224,184, 38, 5,138,148,241,180, 63,224,159,255,221,223,163, 21, 10, 8, 17,129,
+195, 56, 98, 8, 88, 87,178,235,208,184,153,174, 17, 23,104,116, 76,133,219, 82,128, 6,231, 96, 23, 91,143,247, 30, 79, 79,143,
+ 88, 87,135,182,109, 41,147,250, 50, 34, 1,248,233, 79,127,138,105,158, 48, 77,211,109,148,100,164,145,254,249,124,130, 15,158,
+108, 71,156,203,126, 62,159,233,160,174, 40, 40,198,106,234, 18,187,174, 5,144,113, 25, 71,188,188,188, 16, 79,193, 90,244, 93,
+143, 47,158,222,225,245,229, 21,239,191,124, 15,163, 45, 98, 78,240,129,246,222, 20, 32,163, 25,190, 19,153,153, 46,144,138,106,
+ 56, 70,250, 72,169,218,117, 50,163,153,115, 78,149, 22, 70,172,123,154, 34,106, 41, 73,204, 36,101,125,240, 38,100,134,171,200,
+186, 47, 95,215, 21, 70, 73,154, 48, 2, 48, 70,227,112,216, 51, 75,125,133,181, 77,157, 74,208,131, 95,214, 14,220, 90,203, 60,
+242, 6,227, 52, 49, 16, 70,163,237,232,239,100,100,104, 46,106,130,131, 74, 4, 8, 15,186, 46, 11,233, 75,154,134,178,191,149,
+162,130,196, 76,115,173,205, 13, 85,173,132,144,152,198,194, 7, 34,215,245, 67, 15,231,121,242, 32, 69,229,172, 23,134,124,230,
+223,167, 76, 1, 5,235,124, 32,233, 89, 28, 83,160,255,135,180, 65,141, 94, 11,165,214, 10, 57, 68,182, 54,238, 43,185,109, 93,
+ 87,180, 13,189,215, 52,214,119, 88, 87,135,253,129, 48,182, 70,107, 6,103,137, 27, 58,154,109, 72, 11, 97,139,123,135,211, 25,
+193,225, 57, 11, 7,176,104,182,164, 85, 30,255, 60, 67, 8,210,134, 32,101,206, 59,167,206, 29,146,106,207,202,130,203,121, 89,
+217,147, 78,122,159,138, 42,151,146,240,203, 12,166, 73,188,162, 0,255, 93,202,179, 23,181, 9, 42, 77, 75,211,118,228,166,154,
+215,106,159, 43,226, 71, 2, 47, 69, 62,124,181,240, 62, 96,158, 38,164,250, 30,170,106, 93,238,187,134, 26, 22, 22,173,158,207,
+103,238,218,123, 90,163,229,223, 29, 91, 94,237,112,165, 33,133,248,108,128, 90,190,125, 64,109,158,245,242, 83,176, 6,163,213,
+181,146,183,227,218,107,119, 87, 68,102,249,211,232,203, 26,135, 42,110, 71,189, 28, 21,170,181,174, 56, 84,205,185,234,154,247,
+180,146,223, 12,195, 7, 5,163, 5,172,150,176, 54,195, 42, 64,230, 4,101, 5,164, 74, 16, 42, 34, 5, 15, 31, 5,198, 37, 32,
+ 68, 64, 40, 77, 93,102, 10, 16, 41, 67,129,224, 39,129,189,228,185,142, 47,242,213,186,198, 84,163,235,200, 84, 94, 33, 36, 28,
+ 18, 35,114, 98, 0,136,134, 16, 10, 90, 10, 10,152,209,146,118,135,108,147, 83,197, 54,199,136, 87,157,104, 28,168, 64, 29,111,
+100,165,119, 65,182, 86,189, 87,181, 38,208,247,117,222,179,199, 95, 34, 68, 48, 96,129, 48,180,203,188, 98, 89, 28,188, 11,136,
+145, 58,209,152,249, 32,144, 98,205, 63,191,102,164,139, 26, 45,187,141,237,123,203, 42,223,230,150,147, 74,147,201,235, 28, 32,
+ 35, 11, 9,141,125,218,215,113,118,130,204, 9, 73, 39,136, 20, 48, 8, 96, 48, 18,247,143, 59,188,127,127,143,187,161,135,247,
+ 43,194,178, 64, 53, 29, 18, 18,250,222,242, 1,193,114, 82,221,149,179,158,182,156,153,124,165, 86,165,155, 36,212, 91, 13,104,
+185,198,210, 70, 30,122, 83,208, 63, 35,162,171, 83,245, 58, 86,207,127, 16, 55, 83,239,161, 92,206, 30,226, 77,120, 11, 54, 88,
+159,107,152, 17, 54,167,230, 34,184, 20, 57,163, 55, 13,254,219, 95,252,115,188,187,187, 67, 90, 61,141,147,151,133,237, 58,148,
+153,237,130, 7, 32, 48, 47, 43,141,218,187, 14, 46,120, 8,102,128,159,207,103, 72,144,160,179, 76,147,136, 54,151, 49,236,118,
+156,201,109,145, 66,196,238,254, 14,235,178,226,114,161, 36,181,210,157,121,183,226,254,241,158,166, 68,107,132, 85,154, 10,182,
+ 20,184,156, 79, 88,230, 9, 90,209, 42, 9, 57, 97, 89,103,210,164,228,136,243,121, 4,164,132,148, 9,214,104, 4,239,144, 83,
+192, 60,157, 97, 52,179,197,115,134,209, 10, 13, 19,198,148,214,184,140, 23,218, 95,134, 8,169, 13, 18, 72,244, 36,121,159,173,
+181,174, 7, 91, 18,144,129,167,125, 4,254, 16,144, 8,129, 14,218, 33, 20, 27, 84,134,150, 10,107,240, 85,123, 65,221, 95,100,
+136,200, 12,203,214,173, 28, 34,118,135, 3,246,251, 29,166,105,164,238, 92, 27, 72,229,171,248, 85,137, 43, 12,165,216, 7,219,
+182,197,137, 99,106, 73, 27, 67,227,113,163,245, 53,195,164, 23,236, 0, 0, 17,119, 73, 68, 65, 84,172,100, 89,120,244, 94,198,
+192, 11,218,166,229,238, 57,242, 24, 62, 32, 7, 18,174,209, 56,127,207, 49,159,129,167,116,212,105, 74,126,143,168,184, 4, 88,
+107,170,117,182, 8,141, 27,107, 73, 75,195,192,149,200, 48, 21,173, 53,214,213,179, 29,205, 34, 70, 26, 33,211,235,139,218,101,
+134, 16,232,138,101, 44,181, 82, 18,227, 56, 17, 37,143,139,128, 15, 68, 49,235,122,192, 54, 13,156,191, 32, 35,163,235,123, 64,
+ 0, 33, 6,138,145,101,177,111,209, 13, 68,239,145, 82,199,197,137, 14, 15, 33, 70, 24,107, 49, 29, 39, 60, 63,191,224,225,225,
+190,174, 84, 78,167, 19,186,174,140,231,155, 10,217,241,222, 87,251, 88, 89,231, 22,113,227,178,174, 88,221,138,174, 49,108,147,
+138,245,126, 36, 52,111,170, 7,179,156,105,178,226,220,202, 56, 94, 2, 93,197,136,122,128,110, 26,139, 97,216,177, 62,197, 87,
+ 12,236,253,253, 61,190,249,230, 91, 0, 18, 33, 78,216,237,246, 85,101, 95,112,205,153,211, 6,189,247,184,191, 59, 96,156, 22,
+ 92, 46, 19,124, 10,120,125,125,193, 97,191,199,187,119,143,120,126,126,102,183,195,166, 25,169, 90,173,107,125, 42, 40,114, 8,
+241, 89, 10,102,126,243,172,207,137, 87,153,169, 8,190, 5,242,198,250,171,149,150, 55, 34,170,124,157, 85,210, 73,119, 27,134,
+130, 98,165,184,182,252,219,206, 75,128, 60,177,214, 88, 24,109, 96,120, 79, 38,133,132,150, 12, 9,216,236,212,149, 96,239,187,
+ 32, 32,132,231, 37,105, 0, 32,100, 66,144, 25, 58, 11,248, 40,177,122,226,167, 71,238,188, 82,200, 76,148, 99, 81, 18,179,164,
+111,206, 68,101, 60, 38,128,196,189,147,200,180,211,149, 66, 86,254, 47,193, 98, 88,184,192, 54,136,146, 24,167,180, 64,228, 40,
+ 86, 33, 4,211,229,184,115,142, 9,177, 8,233, 32,233,225,195,228,184,124,131,249,147, 53,166, 85,112,222,109,241, 74,122, 31,
+249,130,242, 8, 62, 50, 4,195,115,160, 2,248,123,209, 71, 8,145, 88,241, 27,174,187,216, 56, 15, 18, 47,131,228, 27,198,253,
+214, 1, 16, 83,102,193, 26, 21, 9, 72,193,193, 53,212,244, 67, 74,228, 36,106, 36,168, 84,138,196,146, 50,163, 49, 10,187, 78,
+ 97,223, 43,220,183, 10,247, 70,226,177, 49,216,189,187, 67, 82, 18,113, 93,160,108,131, 57, 56,204,211,136, 4,129,144, 37,178,
+148,136,252, 14,188,221,115,221,174,168,243, 31,166, 22,230,202,121,216,122,222, 88, 84,159,175,224,153, 82,160,171,126, 66, 84,
+151,192, 86, 53,154,243, 22,253, 46,234,154, 99,219,153, 95,255,238,213, 5,241,214, 84,151, 55,130,195,114,157, 89,161,240,139,
+191,251, 59,252,197,159,254, 41,226,188, 66, 52,192,154, 2, 66, 88,208,247, 22, 49,145, 86, 99,252,225, 7,184, 16,233,250,147,
+ 18,243,186, 34,112,244, 35, 37, 73, 81,196,164, 20,146,168, 95,220,137,156,206,167, 58,182, 27, 47, 35,250, 97, 7,183,174,248,
+248,250,130, 53,120,124,249,238, 29, 94, 95,158,177,172, 11, 21, 87,102,143, 55,109, 87,167, 92,116,205,121,246, 90,211, 62,127,
+ 28, 71,164,148,176,219,237,176,186,149, 70,231,193,163,111, 91, 60, 61, 61,224,227,135,143, 64,206, 56,190,190,226,112, 56,224,
+248,250, 2, 64,224,244,122,134,177, 6,251,253, 14, 66,210,110,211, 5,143, 97,183,103,177, 83, 34,125, 45,175,249,180,210,240,
+236,217,214, 90, 83,120,137,228,131, 49,191,254,116,248,165,240, 20,201,239, 41,197, 98,106,172, 43, 89,244, 40, 82, 53, 32, 4,
+ 10,157,114,193, 99,104, 91, 88,219,194,218, 6,227, 56, 50, 64,197, 16, 33,108,154, 32, 4, 17,193, 40,148,133, 58,179,253,126,
+ 95,223,239, 24, 2,148,214, 0,174, 44,117,197,234,235, 34,226, 19,124,232, 49,198,220,168,145, 11, 98, 54,114,106,152, 16,146,
+118,179, 72,245, 80, 45, 57,250,213,249, 80,247,218,101,116,108, 13,117,152,151,203,185, 62,131,181,102,155, 98,240,212,204,112,
+ 66, 89,138, 36, 0, 4, 18, 82, 36,165,253, 82, 14, 32, 49, 85,174,186,110, 26,214, 93,152, 26, 35, 75,197, 63,214,145,183,243,
+142, 41,123, 20,149,171,141,129,243,142,214, 0,243, 4, 25, 1,221,182,200,145,214, 74,129, 39, 59, 57, 10,162,189, 13, 3,243,
+ 0,174, 58, 37,165, 40,239,226,116, 58,227,225,225, 1, 41, 70,178, 89,114,178,229, 52,142,104,109, 67,186, 34, 48, 77,109,131,
+150, 45, 7,173,235,243,139,189,216, 70, 49,152, 40, 35, 73,186, 38, 96, 24,253,170, 36, 21,221,121, 69,100, 76,108,138,137,234,
+ 76, 76,144,146, 56, 0,125,223, 85,140,243, 56,142, 24,134, 29,124, 8,216, 31,238,240,241,227, 75, 69,200, 22,190,202, 60, 47,
+144,146,214, 11, 5,227,186,174, 43,134, 97, 7, 41, 21, 94,158,143, 53, 94,183,239,123, 60, 60, 60,112, 18,157, 35, 39, 80,190,
+ 54,119, 69, 23, 82, 38,200, 33, 38, 62, 68,223, 78, 18,197,134, 47,178,125,210,164,156, 55, 77,205, 53,107,130, 82,218, 68,190,
+229, 85,151, 24,201,250,223,168, 10,204,183, 17,235,117,238, 47,175, 15, 53,107, 27, 88, 67,106, 67,173, 12, 76,233,212,249, 34,
+ 46, 44, 94,228,107, 10,155,139,137,132, 97, 5, 72, 34, 51, 32, 3,140,136,176, 2,136, 89,163,105, 15, 80, 98, 68, 72,145,226,
+ 65,147, 64, 98, 47,162,132,224,131,130,124,115,194,145, 87, 68,103, 1,128, 8,108,138, 92,162, 3, 1,147,141, 8,140, 67,187,
+113,193, 66, 22, 33, 50,140,166,131,129, 81, 4,189,160,145, 27,105, 9,104,164, 75, 47,114, 8,137,199,136, 36,152, 40, 97, 46,
+165,153,203,213,178,145, 57, 96,128, 4, 78,196, 43, 38, 47,167,247, 1,222, 69, 6,143, 92,209,187, 33, 70,248, 68,187,199, 43,
+130, 23, 55, 54,176, 44, 54, 29,106,161,184,161,120,210,115,189, 56,232,193,194, 0,132, 34,182, 19, 10, 66,106, 72, 69,163, 65,
+ 35, 37, 68,142,208, 82, 32,193, 65, 26, 96,232, 12,118,157,134,177, 25, 8, 35, 90,111, 32,166, 51,176, 52, 80, 95, 60, 64, 12,
+ 22, 98,215,194, 30,122,188, 30, 95,161,165, 70,136, 10, 42, 73, 68,145, 89,212,118, 59, 77,200,159,233,154, 63, 91,244,111, 22,
+ 82,249, 70, 76,146,147,164, 3, 92,150,159, 57, 22,136, 63,232, 53, 47, 59,170,207, 89,230,174,159,147,110,161, 18,249, 54,194,
+149,183, 93,100, 14,204, 2, 6, 18, 63,251,201,159,226,239,255,230,111, 17,151, 21,110,158, 32,145, 16,194, 2, 30, 54,193,187,
+132,243,249, 66, 34,185,232,145, 89,160,184, 46, 43,169,145,185, 64, 20, 23, 5, 69,109, 94,176, 58, 71, 2, 51, 86, 87, 91,107,
+113,184,191,195,249,114, 70, 98,161,231, 87, 95,125,133,233, 66,187, 62,199, 29,208, 56,205,252,146, 16, 66, 51,198, 12,239,137,
+195, 61, 12, 29, 21,176,149,174,193,135,135, 7, 30,159, 46,120,122,124,130,247, 52,230, 63, 29, 95, 49,142, 23,104,173,208,182,
+228,250, 56, 79, 19,114, 34,178,219, 48, 12, 80, 90,227,229,245,149, 68, 89, 77,131,166,109,113,124,125,133,110, 59,100,145,224,
+150, 21,186, 33,219, 93,219,112,226,151,214, 88,124,184,233,102, 18,135, 88,164,156, 32,181, 98,237,161, 64,112, 68, 91,203, 66,
+ 64, 42, 90,187, 41, 41,113, 62,143,120,122,184,131, 18, 18, 9, 2,218, 88,124,248,248,140,199,199,187,186,190,114,108,177,235,
+186,166,146,229,202,189,154, 82, 98,208,202, 66,251, 83,169, 72, 19, 18, 2,175, 35,214,235,154,142, 71,167,229,253, 9, 33,208,
+ 46,154,237,104,214, 26,204,203, 68, 15,111,206,147,167,212,220,124,115,168,140, 33, 64, 52, 45, 23,227,133, 85,211, 60, 98,103,
+161,234, 21,202,130, 58, 2, 47,133, 51,114, 80,137,148, 2,193,123, 90, 3,204,107,221,227, 35,229, 58,225, 81,155,176,144,226,
+236,161,223,119,166,164, 52, 41, 97, 53, 17,220,238, 14, 7,152,117, 33, 44,176, 53,176, 86,211,225,159, 11, 82,219, 52,112,235,
+138,196, 83,163, 98,187,148, 18,104, 27,139,105, 94,152, 85,208, 99,158,103, 24,173, 49,141, 35,134,190,175, 44,133,242,255,138,
+246,136,166, 24, 52, 21, 21, 9, 60, 97,160,204, 15, 41, 73,187, 17,124, 32,183,145,144,112, 21,180,147,170,134, 97,113, 43,118,
+251, 29,173, 74,249,231, 83, 44,238, 38, 97,155,168,200, 89, 36, 85, 17,194,165,123, 22,130, 38, 24,214, 26,126,118, 36, 10,105,
+ 17, 10, 90,211,170,129,206, 29, 4, 92,154, 23,143,188,172,104,154, 22,247,247, 2,231,211, 25,222,123, 28,143, 71, 52, 77, 75,
+ 19,129, 93,207,182, 53, 96, 93, 86, 98,218, 11, 65,165,174,120,219,111, 88, 49, 98,147,152,129,171, 34, 62, 95, 39,154,185,130,
+105,210, 13,234, 10,220, 52,126,158,151, 14,241, 71, 69,107, 20,176, 71, 98, 54,114,217,165, 25,109, 96,148,169, 98, 59,193, 88,
+216,171, 29, 40, 95,139, 77, 78,200, 89, 34,112,250, 87, 66, 0, 68,198,154, 2, 12,200,178,208,245,119, 24,250, 87, 44,167, 17,
+ 62, 0, 33, 43, 8,150,249,231,140, 79, 10,250,118,236,172,132,102,209, 66, 81,233,167,107, 82,150, 84,164, 33,224,255, 95,148,
+176, 20,202, 64, 55,143,209, 6, 16,180, 75,179,197,123, 95,196,101, 16,136, 33, 33, 32, 80,158,242, 38,177, 39,134,192,220,247,
+130,141,189, 38, 60,133, 16, 40,119, 55,209,200, 45, 4,218, 35,122, 23,121,175, 40,234,216, 62, 68, 26,187, 69, 30,183, 92, 45,
+122, 28, 35,250, 38,255,251,118,148, 44,174, 59,245, 55,211,228, 34,136,147,176,208,170,129,182, 29,180,105,232,176,146, 34,114,
+ 88,144, 69,130,130,128,230, 88, 91,129, 8, 35, 50,172, 4,180,204, 80, 26, 72,126,130, 8,134,176,189, 6,216,189,127,130, 79,
+132,229, 20, 74, 3, 41, 65,214,208,218, 63,156, 33,144, 55,177,168, 91,129,220,246, 20, 80,186,236,171,114, 93, 66,178, 83, 34,
+191, 21,193,101, 81,201, 82, 55, 20,186,173, 8, 79,252, 97, 64, 77,186,225, 61,228, 55, 66, 21, 81,109, 44, 50, 39, 60, 28,238,
+241,175,254,229,127, 15, 3,137,209,173,120,125,249,128,174,179,112,235, 2, 41, 51, 86,183, 16, 33,206,104,216,174,225, 20, 38,
+133,101,117,220, 33,210, 3,124,158,103, 70, 84,142,232,251, 30,199,243, 9,195, 48,160, 83, 18, 11, 99, 58,219,190, 33,202,128,
+164,180, 52,165, 20,190,254,250,107,156,143, 39, 52,198,162, 29, 58, 40,173, 16, 67,192, 52, 78, 53, 46, 51,112, 68,167,146,138,
+174, 97, 78,161,186,191,123, 64, 78,192,101,156,234,116, 71, 8,133,156, 50,150,197,177,106,184,199,110,183,195, 60,207,156,162,
+ 8,180,187, 30, 75,116, 16, 46, 96, 90, 70,244,195,128,161,239,240,252,241, 35,117,118,129,118,237,237,126, 7,164, 12,163, 20,
+ 34, 40,186,217,175, 43, 90, 75, 12,248,182,107,112, 25, 71, 86,188,231,202,104,175, 36, 48, 69,135,207,180, 58, 86, 69,147,126,
+101,157, 87,200, 39,133,215,227,153,118,236,156,205, 61, 47,107,189,151,214,149, 30,208,125,223,214, 46, 77, 73, 81,199,176, 0,
+224, 89,164, 40,149,130,247, 17,141,177, 55,196, 51,163, 27, 56, 63,177, 51, 70,215, 93,172,212, 10,113, 38,129, 84, 6,169,204,
+231,117,172, 74,116,173,205, 39,227,212,174,235,106,122, 92,212,154,184,252,193, 99,183,235,177, 27,122,222, 61,243,131, 94, 16,
+202, 52,101, 34,167, 53,182,193, 18, 22, 66,176, 42,130, 61,153,205,243, 41,132, 8,163, 45,167,148,249, 42,112, 43,207, 69,250,
+ 26, 61, 70, 81, 31, 8, 16, 25, 8,171,199, 58,207,232,172,133, 95,103, 74, 63,227, 67, 84, 78,169, 10, 91, 75, 7, 77,163,120,
+ 9, 37, 84,213,125, 12,253, 0,239, 2,118,195,129,166, 40,206, 65,101,212,107,160, 8,244,202,207, 91,238,201,174, 35,235,227,
+ 53, 38,250,106,183,133, 16, 52,130,111,201,158,167,148,130, 95, 28,180, 33, 4,109, 98, 1,178,247, 30,141,177,104,140,197, 56,
+141,232,122, 6, 38,157,207,104,251,190, 34,172,231,121,173,171,172,113,154, 48, 78, 19, 98,202, 56, 28, 14,248,237,111,190,161,
+157,188, 18,100, 51, 6, 77, 6,178, 84, 72,160,194,223,117, 77, 85,195,143,227, 68, 48,178,135, 7,172, 51, 57, 43,214,197,193,
+173, 43,251,228, 9, 29,220,182, 45,172,181, 24,231, 5,142,147,251, 74, 32, 80,105, 12, 69,153,234,110,104,153, 41, 3, 49,225,
+134,158,153,111,160, 94,185,174,202,213, 99,107,126, 41, 54,162,160,237,135, 20,146,189,117, 37,156,228,119, 61,136,233,115,181,
+ 50, 24,134, 61,186,118,128, 49, 77, 29,189,151,177, 61,237, 3, 82,197,181,222, 32, 62,217,115,142,140,122, 34, 47,138,122, 72,
+130,242, 11, 9, 28,199, 9,107,200,200, 82, 67, 72,195, 86,128,171,117,173,124,148, 11,133, 78,210,234, 42, 10, 19,183,161, 27,
+114,227, 73, 47,150, 21,129, 4, 37,169,168, 55,214, 64, 40,130, 54, 88, 62,164,208,196,129,227,101,243,213, 46, 22, 67, 68, 98,
+ 88, 2, 54, 39, 43,200,114, 51,144,133, 41, 4,234,196, 83,202,112, 43,141,221, 99, 76,240, 28,243,152, 34,174, 60,246, 24,217,
+ 43,154,106,193, 18,159,141, 11,205,213,147,122, 77, 71,147, 87,101, 56, 54,250,135,124,181,149,145, 99,192, 66,155, 22, 74,119,
+144,138, 79,199, 33, 32,121, 15, 32,226,208, 26,188,127, 56,224, 71, 95,189,195,251,119,247,248,179, 47,223,225,221,195, 30,135,
+135, 29,204,190,133,106, 13,132, 17, 16, 74, 67,180, 45, 36, 52,254,183,255,233,127,197,175,126,251, 1, 43, 52,162,224, 72,220,
+ 98, 23, 17, 21,113,240,230,148,121,251, 81,166, 13, 69,189,143, 92,148,160,226, 54,209, 45,179, 48,173, 96, 94, 75, 98, 93,254,
+252, 36,224, 58,117,202,117, 55, 47,110,246, 87,216,184, 7,176,113, 43,108,195,135, 80,157, 4,153,175, 55,228, 12,145, 50,118,
+ 77,135,127,249,139,127,129, 31, 63,190,195,124, 57,227,229,249, 35,140, 81, 24,167, 17,211, 60, 50,222,212,192,167,136, 44, 4,
+ 66, 76,128, 32, 80,201,234, 28,180,214,245, 97, 95,214, 98, 77, 67,150,165,195,221,158,186,206,148, 96,155, 6, 33, 6,122, 24,
+197,132,213, 81, 23, 42, 20,225, 95,165,148,248,226,139, 47,144,145,177,122,122,184, 4, 31,216, 34,229,107,242, 90,121, 29,215,
+149, 45, 61, 16,112, 62, 18, 46,181,235,209,182, 61,130,247, 56,159, 78,117,183,173,141,134,143,212,201,167,156,176,219,239,224,
+ 82,196,188, 46,152,215,133,186, 37, 37,177,172, 11,142,199, 87,104, 41,235, 61, 31,188,231,180, 47,133,213,205,176,134,136, 96,
+ 5, 2, 37,144, 9,120,196,197, 78,148, 45, 74,142,124,201, 83, 54,250,178,146,208, 44, 35, 35,167, 88, 11,226,178,174,144, 82,
+225,238,110,127, 85,130,107,141,121,166,232, 90, 89,129, 41, 60, 43, 76,153, 0, 53,125, 71,157, 46, 71,222,114,107, 13,195, 16,
+ 31, 33, 9, 29,157, 65,241,168,164, 66,215,213, 73, 83,120,226, 69, 60,214,245, 61,214, 98, 15,211,154, 50,210,185, 51,163,130,
+ 70,191,119,215,209,174, 57,179,174,165,140,247, 1, 48,201,236,218,205, 85,165, 58, 50,145,245,120,103,107,180,102,145, 30, 29,
+216,148,148,112,139,171,201,144,137, 85,241, 21, 89,204, 13, 76,215,181, 8, 33,144,227, 64, 40,158,218,209,149,110, 25,150, 19,
+ 24,160,163,164,130, 91, 87, 42,202,193, 19, 74,149, 19, 42,131,167,209,190,210, 10,203, 60,195, 88, 11,173,136,160,105,173,198,
+229,114,225,230, 73,162,105, 73,116, 88, 18,198, 80, 66,118,184,192,229,146, 17,194, 19,201,204, 16, 26,193,252,116,195, 2,236,
+101, 93,107,129,166,189,188,132,243,174, 30,214,140,210,200,153,226,121,155,166, 67,224,213,165,226,137, 88,240,177,238,245,207,
+231, 11, 82,206,152,231, 5, 67,191, 71,223, 15, 85, 96, 55,142,172,199, 16, 18,109,219, 1, 60,105,157,166,137,213,248,244,122,
+142, 35, 9,234,138, 37,211, 90,131,204,135,197,192, 66, 72,210, 13, 88, 52,109,139,149,215, 58,197, 82, 28, 82, 98,141,134,216,
+216,196,137,151, 86, 86,190, 37, 46,187, 88,121,183, 83,115, 5,176, 22,172,140,208, 83, 9,113,231,157,247,198,130,180,141,202,
+124,171, 2, 22,130, 71,223, 41, 67,102, 64, 11, 69,254, 71,149, 17,101, 66, 20, 17, 73,144,192,203, 39,207,227,233, 72,208,131,
+ 68, 35, 83,145, 20,141,208,217, 59,105,180, 70, 99, 12,172,105, 96,218, 6,182,213, 24, 58,131,119, 79, 15,120,188,219, 67,203,
+ 4, 45, 2, 4, 60,241,215,114,134, 72,180,115, 47, 80,138, 50, 94,174,187, 47, 73, 16,147,200,177,163,108,194, 7, 74,232,188,
+ 40, 49,125, 44,118,210, 18,210, 40, 72,163, 33,165,134,210, 22, 82,107, 64,169,234,217,143, 57, 19,242, 82, 40,164,204,249,232,
+ 41, 87, 65, 91,228, 66, 32,179, 0,146, 68,138,132,158,141, 81, 32, 37, 9,183, 4,172, 46,194, 39,129,144, 4, 34, 20, 34,138,
+ 6,128,196,107, 73,210,206, 62,229,171, 34,253,102, 74,146,232,107, 3,148, 36,151,178, 64, 68, 70, 20,244,218,103,145, 64, 47,
+ 7, 3,132, 50, 29, 88, 84,193,231, 18, 85, 7, 89, 88, 36, 24,190,193,103,196,117,134, 76, 1,143,125,139,175,190,120,192,211,
+227, 29, 84,142, 88,214, 25, 31,221,140,179, 86,152, 97,144, 85, 11,217,239, 33,146, 70,158, 86,164,121,132,105, 12,254,236, 79,
+254, 4, 26, 30, 90, 80,122,148,204,134,126,247,242, 61, 33,160, 75,176,174, 84,200,194, 80,140, 46,120,157,145, 18,151,208,128,
+ 4,135, 44, 19,146, 76, 52,198, 71, 68, 74,225,170,172,231,196,185,196,193, 7,101, 52, 46,106,104, 93,186, 73,237,170, 54, 38,
+102, 44, 40,113,245,121, 42,153, 33, 69, 2,178, 71, 78, 1, 25, 1, 33,251, 13,124, 73,114, 49,167,157, 83,226,175, 77, 19, 15,
+ 5, 35, 52,254,250,159,252, 37,254,171,159,253, 20,110,190, 32,186, 21, 50, 1,211, 56, 99,154,102,248,156,176, 6,250, 72, 41,
+227,114,185,208, 94, 48,210,184,145, 30, 6,182, 30, 74,250,190,131, 0,101, 13,164,224, 17,125,192,235,203, 11,166,121,198,101,
+ 36, 96,141,177, 13, 46,211,136,253,221, 1,243, 74,177,144,198, 24, 60, 62, 61, 2,146,246,195, 41, 68,204,211,140,182, 37, 94,
+121, 10,129, 40,138, 26,184,123, 60,224,114,161,238,182,235, 26,184,117, 1, 88, 28, 42, 36, 16,130,131,243, 43, 66, 10, 8, 57,
+ 2, 90, 98,114, 51,198,101, 70, 18, 2,237, 48, 96, 13, 1,211,116, 70, 12, 30,214, 42, 40,171,240,114, 58,226, 52,158,161, 27,
+ 13,105, 21,148, 81,152,166,153, 14, 65, 90, 19,165, 80,102,172,110, 66,206,180,130,176, 70, 99, 93,103, 88,171,209, 53, 6,119,
+ 93,135, 94, 73,116,146, 24, 22, 86, 11,208, 51, 57,161,233, 44,144, 35,180, 68,157,134, 93,198, 5,128,134,115,180,207,151,138,
+ 58,118, 31, 51,230,197,195,135, 8,109, 13,197,195,102, 9,153, 37,214,133, 2,112,164, 49,152,220, 2,159, 60,164, 85,240,209,
+ 65, 42,114,202, 16,226,148,214, 0,228,139,151,168,167, 13, 65,197, 55, 33, 35, 75, 81, 15,224,193,123,244,173, 5, 16, 97, 12,
+233, 39,200,117, 67,207,157,152, 57, 40, 70,210, 53, 45, 9, 18, 2,205,157,108,103, 27, 68,231,209, 54,154, 52, 0,252,220, 81,
+202,208, 20, 35, 11, 88,169,208,106,139, 28,129,198, 16,254,182,181, 13, 36, 8,115, 90,108,127,133, 20,103,141, 65,103, 27, 40,
+242, 24, 2, 41, 65, 11, 3, 45, 45,173, 15, 83, 70, 74, 2,211,228,224,214,128,174,221, 33, 39,129,224, 51,148, 52,136, 1, 80,
+176, 8, 46, 67, 9, 42,226,182,209,208,141,130, 79, 1,182,109, 17, 65,236, 5, 72, 64,106,129,197,173,184,123,188,131,207, 1,
+ 33, 5,100,102,113,148, 28,244,105, 93,176,186,192, 1, 62, 1,128,134, 98, 60,109, 78,168, 90, 44, 8, 1,101,168, 51,118,158,
+106, 73,146, 9, 73,102,248,228,153,234, 70,214,230,243, 56, 97,241, 17, 80, 26, 66,107,172,193, 67,107, 11, 64, 65,106, 3, 41,
+ 8, 79, 11, 33, 49,205, 43,229,107,204,116, 24, 36,162,163, 36, 26,157, 0, 30,239, 30,112, 55,236,145, 99,194,249,120, 68,219,
+118, 48,218, 2, 17,152,206, 23,248,121, 5,144, 41, 27, 0, 25,243,124,193, 52,157, 0,153, 48, 28,122,220, 31, 14,232,154,166,
+106,201,166,113,132, 72, 17,119,187, 1,217,123, 8, 14, 53, 66, 12, 92,131, 55,154,168,196,200,240, 44,160,202, 63, 82, 65, 75,
+ 69, 58, 53, 81, 62, 72, 80, 41,132,192,255, 7, 3,238,150, 17, 62,123,156,230, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
0};
diff --git a/source/blender/editors/datafiles/startup.blend.c b/source/blender/editors/datafiles/startup.blend.c
index f34cf16430b..0a7f5b3ba7b 100644
--- a/source/blender/editors/datafiles/startup.blend.c
+++ b/source/blender/editors/datafiles/startup.blend.c
@@ -1,871 +1,962 @@
/* DataToC output of file <startup_blend> */
-int datatoc_startup_blend_size= 240980;
+int datatoc_startup_blend_size= 366764;
char datatoc_startup_blend[]= {
- 66, 76, 69, 78, 68, 69, 82, 45,118, 50, 53, 50, 82, 69, 78, 68, 32, 0, 0, 0,
-144,181, 39,248,255,127, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 83, 99,101,110,101, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 76, 79, 66, 24, 1, 0, 0,144,180, 39,248,255,127, 0, 0,
-201, 0, 0, 0, 1, 0, 0, 0, 32, 32, 32, 53, 5, 0, 0, 0,250, 0, 0, 0, 1, 0, 0, 1,200,187, 85, 3, 0, 0, 0, 0,
-120,159, 89, 3, 0, 0, 0, 0, 0, 16, 0, 0,128, 32, 4, 0, 47,104,111,109,101, 47, 98,114,101, 99,104,116, 47, 46, 98,108,
-101,110,100,101,114, 47, 50, 46, 53, 50, 47, 99,111,110,102,105,103, 47,115,116, 97,114,116,117,112, 46, 98,108,101,110,100, 0,
- 61,117,232, 0, 0, 0, 0, 0, 40, 0, 0, 0, 48, 0, 0, 0,208,181, 39,248, 32, 0, 0, 0,144,181, 39,248,255,127, 0, 0,
- 40,102,128, 4, 0, 0, 0, 0, 64,181, 39,248,255,127, 0, 0,104, 14,145, 4, 0, 0, 0, 0,112,181, 39,248,255,127, 0, 0,
-133,119,232, 0, 0, 0, 0, 0,252, 0, 0, 0, 0, 0, 0, 0,144,181, 39,248,255,127, 0, 0, 32, 0, 0, 0, 82, 69, 78, 68,
- 40,102,128, 4, 0, 0, 0, 0, 82, 69, 78, 68, 32, 0, 0, 0,144,181, 39,248,255,127, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
-152,212, 83, 3, 0, 0, 0, 0,192,181, 39,248,255,127, 0, 0, 67,126,232, 0, 0, 0, 0, 0,104,209, 83, 3, 0, 0, 0, 0,
- 40,102,128, 4, 0, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 83, 99,101,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 87, 77, 0, 0, 24, 1, 0, 0,152,212, 83, 3, 0, 0, 0, 0,111, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 77, 87,105,110, 77, 97,110,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-248,213, 83, 3, 0, 0, 0, 0,248,213, 83, 3, 0, 0, 0, 0,248,213, 83, 3, 0, 0, 0, 0,248,213, 83, 3, 0, 0, 0, 0,
- 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 2, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 88,173, 70, 3, 0, 0, 0, 0, 88,173, 70, 3, 0, 0, 0, 0, 88,173, 70, 3, 0, 0, 0, 0, 88,225, 90, 3, 0, 0, 0, 0,
- 88,225, 90, 3, 0, 0, 0, 0, 88,225, 90, 3, 0, 0, 0, 0, 68, 65, 84, 65,224, 0, 0, 0,248,213, 83, 3, 0, 0, 0, 0,
-112, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,174, 70, 3, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,200,187, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,115, 99,114,101,101,110, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 30, 0,118, 7, 97, 4,
- 0, 0, 0, 0, 1, 0,238, 3, 0, 0, 1, 0, 0, 0, 0, 0,248, 1, 94, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,136, 21, 55, 3, 0, 0, 0, 0,104,177,126, 4, 0, 0, 0, 0,
-104,177,126, 4, 0, 0, 0, 0, 88, 3, 94, 3, 0, 0, 0, 0,232, 4, 94, 3, 0, 0, 0, 0,120, 6, 94, 3, 0, 0, 0, 0,
-120, 6, 94, 3, 0, 0, 0, 0, 72, 7, 94, 3, 0, 0, 0, 0,120, 76, 94, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0,208, 0, 0, 0, 40,215, 83, 3, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,
-200,234, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 76, 69, 78, 68, 69, 82, 95,118, 50, 53, 51,
+ 82, 69, 78, 68, 32, 0, 0, 0,136,108,137,191, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 83, 99,101,110,
+101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 76, 79, 66, 16, 1, 0, 0,160,107,137,191,
+202, 0, 0, 0, 1, 0, 0, 0, 32, 32, 32, 49, 1, 0, 0, 0,250, 0, 0, 0, 1, 0, 0, 1, 24, 81, 88, 10, 16,228, 90, 10,
+ 0, 16, 0, 0,128, 32, 4, 0, 47,114,111,111,116, 47, 46, 98,108,101,110,100,101,114, 47, 50, 46, 53, 51, 47, 99,111,110,102,
+105,103, 47,115,116, 97,114,116,117,112, 46, 98,108,101,110,100, 0,108,137,191,224,108,137,191, 0, 0, 0, 0, 1,128,173,251,
+220,117,137,191, 42,230,132, 8,176, 8, 93, 10,136,108,137,191, 32, 0, 0, 0,255,255,255,255,224,108,137,191,255,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,236,127,188, 8,104,108,137,191,115,232,132, 8,176,100, 64, 10,136,108,137,191,
+ 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 14, 45,190, 82, 69, 78, 68, 32, 0, 0, 0,136,108,137,191,
+ 0, 0, 0, 0, 1, 0, 0, 0,224,104, 78, 9,220,117,137,191,184,108,137,191, 49,239,132, 8,176,100, 64, 10, 82, 69, 78, 68,
+ 32, 0, 0, 0,136,108,137,191,128, 63,168, 8,236,127,188, 8, 1, 0, 0, 0,250, 0, 0, 0, 83, 99,101,110,101, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 81, 88, 10, 0, 0, 0, 0, 87, 77, 0, 0,168, 0, 0, 0,
+ 0,140, 81, 9,110, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 77, 87,105,
+110, 77, 97,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+160,180, 80, 10,160,180, 80, 10,160,180, 80, 10,160,180, 80, 10, 3, 0, 0, 0, 0, 0, 0, 0, 16,163, 79, 9,136,145, 79, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0,184,141, 88, 9,184, 35, 81, 10, 16, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,177, 64, 10,
+ 8,177, 64, 10, 8,177, 64, 10,248, 54, 88, 9,248, 54, 88, 9,248, 54, 88, 9, 68, 65, 84, 65,148, 0, 0, 0,160,180, 80, 10,
+111, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 81, 82, 9, 1, 0, 0, 0, 0, 0, 0, 0, 24, 81, 88, 10,
+ 0, 0, 0, 0,115, 99,114,101,101,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 5, 56, 0,246, 4,226, 3, 0, 0, 0, 0, 1, 0,238, 3, 0, 0, 1, 0, 0, 0, 0, 0,168, 48, 84, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,232,200, 87, 9,208,185, 87, 9,208,185, 87, 9,112, 55, 88, 9,
+232, 55, 88, 9, 96, 56, 88, 9, 96, 56, 88, 9,216, 56, 88, 9,184, 58, 85, 10, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0,
+140, 0, 0, 0, 88,159, 78, 10,196, 0, 0, 0, 1, 0, 0, 0,224,212, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
83, 82, 65,110,105,109, 97,116,105,111,110, 0, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 72,216, 83, 3, 0, 0, 0, 0,184,223, 83, 3, 0, 0, 0, 0, 40,224, 83, 3, 0, 0, 0, 0,
-104,236, 83, 3, 0, 0, 0, 0,216,236, 83, 3, 0, 0, 0, 0, 72,215, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,120,159, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72,216, 83, 3, 0, 0, 0, 0,
-196, 0, 0, 0, 1, 0, 0, 0,184,216, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184,216, 83, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,
- 40,217, 83, 3, 0, 0, 0, 0, 72,216, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214, 2, 0, 0, 0, 0,
- 68, 65, 84, 65, 32, 0, 0, 0, 40,217, 83, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,152,217, 83, 3, 0, 0, 0, 0,
-184,216, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4,214, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
-152,217, 83, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 8,218, 83, 3, 0, 0, 0, 0, 40,217, 83, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 8,218, 83, 3, 0, 0, 0, 0,
-196, 0, 0, 0, 1, 0, 0, 0,120,218, 83, 3, 0, 0, 0, 0,152,217, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,187, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,120,218, 83, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,
-232,218, 83, 3, 0, 0, 0, 0, 8,218, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4,187, 2, 1, 0, 0, 0,
- 68, 65, 84, 65, 32, 0, 0, 0,232,218, 83, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 88,219, 83, 3, 0, 0, 0, 0,
-120,218, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 4, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
- 88,219, 83, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,200,219, 83, 3, 0, 0, 0, 0,232,218, 83, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 32, 4,187, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,200,219, 83, 3, 0, 0, 0, 0,
-196, 0, 0, 0, 1, 0, 0, 0, 56,220, 83, 3, 0, 0, 0, 0, 88,219, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 32, 4, 52, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56,220, 83, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,
-168,220, 83, 3, 0, 0, 0, 0,200,219, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 52, 1, 0, 0, 0, 0,
- 68, 65, 84, 65, 32, 0, 0, 0,168,220, 83, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 24,221, 83, 3, 0, 0, 0, 0,
- 56,220, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
- 24,221, 83, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,136,221, 83, 3, 0, 0, 0, 0,168,220, 83, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 32, 4, 84, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136,221, 83, 3, 0, 0, 0, 0,
-196, 0, 0, 0, 1, 0, 0, 0,248,221, 83, 3, 0, 0, 0, 0, 24,221, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-192, 1, 84, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248,221, 83, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,
-104,222, 83, 3, 0, 0, 0, 0,136,221, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 1,187, 2, 1, 0, 0, 0,
- 68, 65, 84, 65, 32, 0, 0, 0,104,222, 83, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,216,222, 83, 3, 0, 0, 0, 0,
-248,221, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
-216,222, 83, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 72,223, 83, 3, 0, 0, 0, 0,104,222, 83, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,192, 1, 0, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72,223, 83, 3, 0, 0, 0, 0,
-196, 0, 0, 0, 1, 0, 0, 0,184,223, 83, 3, 0, 0, 0, 0,216,222, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 32, 4, 48, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184,223, 83, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 72,223, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 48, 2, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0, 40,224, 83, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,152,224, 83, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,184,216, 83, 3, 0, 0, 0, 0, 40,217, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,152,224, 83, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 8,225, 83, 3, 0, 0, 0, 0,
- 40,224, 83, 3, 0, 0, 0, 0,184,216, 83, 3, 0, 0, 0, 0, 8,218, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0, 8,225, 83, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,120,225, 83, 3, 0, 0, 0, 0,
-152,224, 83, 3, 0, 0, 0, 0, 40,217, 83, 3, 0, 0, 0, 0,120,218, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,120,225, 83, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,232,225, 83, 3, 0, 0, 0, 0,
- 8,225, 83, 3, 0, 0, 0, 0, 8,218, 83, 3, 0, 0, 0, 0,120,218, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,232,225, 83, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 88,226, 83, 3, 0, 0, 0, 0,
-120,225, 83, 3, 0, 0, 0, 0, 72,216, 83, 3, 0, 0, 0, 0,232,218, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0, 88,226, 83, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,200,226, 83, 3, 0, 0, 0, 0,
-232,225, 83, 3, 0, 0, 0, 0,152,217, 83, 3, 0, 0, 0, 0,232,218, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,200,226, 83, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 56,227, 83, 3, 0, 0, 0, 0,
- 88,226, 83, 3, 0, 0, 0, 0,120,218, 83, 3, 0, 0, 0, 0, 88,219, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0, 56,227, 83, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,168,227, 83, 3, 0, 0, 0, 0,
-200,226, 83, 3, 0, 0, 0, 0,232,218, 83, 3, 0, 0, 0, 0,200,219, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,168,227, 83, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 24,228, 83, 3, 0, 0, 0, 0,
- 56,227, 83, 3, 0, 0, 0, 0,152,217, 83, 3, 0, 0, 0, 0, 56,220, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0, 24,228, 83, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,136,228, 83, 3, 0, 0, 0, 0,
-168,227, 83, 3, 0, 0, 0, 0,200,219, 83, 3, 0, 0, 0, 0, 56,220, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,136,228, 83, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,248,228, 83, 3, 0, 0, 0, 0,
- 24,228, 83, 3, 0, 0, 0, 0, 72,216, 83, 3, 0, 0, 0, 0,168,220, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,248,228, 83, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,104,229, 83, 3, 0, 0, 0, 0,
-136,228, 83, 3, 0, 0, 0, 0, 88,219, 83, 3, 0, 0, 0, 0, 24,221, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,104,229, 83, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,216,229, 83, 3, 0, 0, 0, 0,
-248,228, 83, 3, 0, 0, 0, 0,232,218, 83, 3, 0, 0, 0, 0, 24,221, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,216,229, 83, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 72,230, 83, 3, 0, 0, 0, 0,
-104,229, 83, 3, 0, 0, 0, 0,168,220, 83, 3, 0, 0, 0, 0, 24,221, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0, 72,230, 83, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,184,230, 83, 3, 0, 0, 0, 0,
-216,229, 83, 3, 0, 0, 0, 0,168,220, 83, 3, 0, 0, 0, 0,136,221, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,184,230, 83, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 40,231, 83, 3, 0, 0, 0, 0,
- 72,230, 83, 3, 0, 0, 0, 0, 24,221, 83, 3, 0, 0, 0, 0,136,221, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0, 40,231, 83, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,152,231, 83, 3, 0, 0, 0, 0,
-184,230, 83, 3, 0, 0, 0, 0, 8,218, 83, 3, 0, 0, 0, 0,248,221, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,152,231, 83, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 8,232, 83, 3, 0, 0, 0, 0,
- 40,231, 83, 3, 0, 0, 0, 0, 88,219, 83, 3, 0, 0, 0, 0,248,221, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0, 8,232, 83, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,120,232, 83, 3, 0, 0, 0, 0,
-152,231, 83, 3, 0, 0, 0, 0,136,221, 83, 3, 0, 0, 0, 0,248,221, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,120,232, 83, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,232,232, 83, 3, 0, 0, 0, 0,
- 8,232, 83, 3, 0, 0, 0, 0,168,220, 83, 3, 0, 0, 0, 0,104,222, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,232,232, 83, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 88,233, 83, 3, 0, 0, 0, 0,
-120,232, 83, 3, 0, 0, 0, 0,136,221, 83, 3, 0, 0, 0, 0,216,222, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0, 88,233, 83, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,200,233, 83, 3, 0, 0, 0, 0,
-232,232, 83, 3, 0, 0, 0, 0,104,222, 83, 3, 0, 0, 0, 0,216,222, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,200,233, 83, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 56,234, 83, 3, 0, 0, 0, 0,
- 88,233, 83, 3, 0, 0, 0, 0,200,219, 83, 3, 0, 0, 0, 0, 72,223, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0, 56,234, 83, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,168,234, 83, 3, 0, 0, 0, 0,
-200,233, 83, 3, 0, 0, 0, 0, 88,219, 83, 3, 0, 0, 0, 0, 72,223, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,168,234, 83, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 24,235, 83, 3, 0, 0, 0, 0,
- 56,234, 83, 3, 0, 0, 0, 0,120,218, 83, 3, 0, 0, 0, 0,184,223, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0, 24,235, 83, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,136,235, 83, 3, 0, 0, 0, 0,
-168,234, 83, 3, 0, 0, 0, 0, 56,220, 83, 3, 0, 0, 0, 0,184,223, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,136,235, 83, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,248,235, 83, 3, 0, 0, 0, 0,
- 24,235, 83, 3, 0, 0, 0, 0, 72,223, 83, 3, 0, 0, 0, 0,184,223, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,248,235, 83, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,104,236, 83, 3, 0, 0, 0, 0,
-136,235, 83, 3, 0, 0, 0, 0, 8,218, 83, 3, 0, 0, 0, 0,104,222, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,104,236, 83, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-248,235, 83, 3, 0, 0, 0, 0,248,221, 83, 3, 0, 0, 0, 0,216,222, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,160, 0, 0, 0,216,236, 83, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0,168,240, 83, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 8,218, 83, 3, 0, 0, 0, 0,184,216, 83, 3, 0, 0, 0, 0, 40,217, 83, 3, 0, 0, 0, 0,
-120,218, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 0, 0,188, 2, 0, 0,214, 2, 0, 0,
- 7, 7,255, 4, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,234, 84, 3, 0, 0, 0, 0,
- 56,234, 84, 3, 0, 0, 0, 0,200,237, 83, 3, 0, 0, 0, 0, 56,239, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-200,237, 83, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 56,239, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,224,162, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,159, 68, 0, 0, 0, 0, 0, 0,208, 65,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,254, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,255, 4, 26, 0,255, 4, 26, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 0, 0,188, 2, 0, 0,213, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
- 56,239, 83, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,237, 83, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,
-112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
- 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,129, 7, 2, 0,112, 7, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214, 2, 0, 0,214, 2, 0, 0,
+ 0, 0, 0, 0,248, 15, 55, 10,192, 37, 85, 10,192,225, 87, 9,136,149, 60, 10,208,149, 60, 10, 0,205, 60, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 16,228, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 20, 0, 0, 0,248, 15, 55, 10,197, 0, 0, 0, 1, 0, 0, 0, 88,180, 84, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 88,180, 84, 10,197, 0, 0, 0, 1, 0, 0, 0, 40,197, 80, 9,248, 15, 55, 10,
+ 0, 0, 0, 0, 0, 0, 97, 4, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 40,197, 80, 9,197, 0, 0, 0, 1, 0, 0, 0,
+ 16,160, 78, 10, 88,180, 84, 10, 0, 0, 0, 0,118, 7, 97, 4, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 16,160, 78, 10,
+197, 0, 0, 0, 1, 0, 0, 0, 16,228, 79, 9, 40,197, 80, 9, 0, 0, 0, 0,118, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 20, 0, 0, 0, 16,228, 79, 9,197, 0, 0, 0, 1, 0, 0, 0,184, 29, 79, 9, 16,160, 78, 10, 0, 0, 0, 0, 0, 0, 70, 4,
+ 1, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,184, 29, 79, 9,197, 0, 0, 0, 1, 0, 0, 0, 48,141, 84, 10, 16,228, 79, 9,
+ 0, 0, 0, 0,118, 7, 70, 4, 1, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 48,141, 84, 10,197, 0, 0, 0, 1, 0, 0, 0,
+240,152, 88, 9,184, 29, 79, 9, 0, 0, 0, 0, 44, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,240,152, 88, 9,
+197, 0, 0, 0, 1, 0, 0, 0,240,203, 80, 9, 48,141, 84, 10, 0, 0, 0, 0, 44, 6, 70, 4, 1, 0, 0, 0, 68, 65, 84, 65,
+ 20, 0, 0, 0,240,203, 80, 9,197, 0, 0, 0, 1, 0, 0, 0,208,171, 79, 9,240,152, 88, 9, 0, 0, 0, 0, 44, 6,220, 1,
+ 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,208,171, 79, 9,197, 0, 0, 0, 1, 0, 0, 0, 96,211, 87, 9,240,203, 80, 9,
+ 0, 0, 0, 0,118, 7,220, 1, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 96,211, 87, 9,197, 0, 0, 0, 1, 0, 0, 0,
+ 88, 68, 81, 10,208,171, 79, 9, 0, 0, 0, 0, 0, 0,132, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 88, 68, 81, 10,
+197, 0, 0, 0, 1, 0, 0, 0,160,154, 61, 10, 96,211, 87, 9, 0, 0, 0, 0, 44, 6,132, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 20, 0, 0, 0,160,154, 61, 10,197, 0, 0, 0, 1, 0, 0, 0,224, 27, 77, 10, 88, 68, 81, 10, 0, 0, 0, 0,160, 2,132, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,224, 27, 77, 10,197, 0, 0, 0, 1, 0, 0, 0,104,177, 80, 9,160,154, 61, 10,
+ 0, 0, 0, 0,160, 2, 70, 4, 1, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,104,177, 80, 9,197, 0, 0, 0, 1, 0, 0, 0,
+104, 32, 59, 10,224, 27, 77, 10, 0, 0, 0, 0, 0, 0,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,104, 32, 59, 10,
+197, 0, 0, 0, 1, 0, 0, 0, 8, 40, 82, 9,104,177, 80, 9, 0, 0, 0, 0,160, 2,140, 1, 0, 0, 0, 0, 68, 65, 84, 65,
+ 20, 0, 0, 0, 8, 40, 82, 9,197, 0, 0, 0, 1, 0, 0, 0,192, 37, 85, 10,104, 32, 59, 10, 0, 0, 0, 0, 44, 6,100, 3,
+ 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,192, 37, 85, 10,197, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 8, 40, 82, 9,
+ 0, 0, 0, 0,118, 7,100, 3, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,192,225, 87, 9,198, 0, 0, 0, 1, 0, 0, 0,
+248,115, 56, 10, 0, 0, 0, 0, 40,197, 80, 9, 88,180, 84, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,
+248,115, 56, 10,198, 0, 0, 0, 1, 0, 0, 0,112, 2, 84, 10,192,225, 87, 9, 16,228, 79, 9, 88,180, 84, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,112, 2, 84, 10,198, 0, 0, 0, 1, 0, 0, 0,240,180, 81, 10,248,115, 56, 10,
+184, 29, 79, 9, 40,197, 80, 9, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,240,180, 81, 10,198, 0, 0, 0,
+ 1, 0, 0, 0, 96,181, 80, 10,112, 2, 84, 10,184, 29, 79, 9, 16,228, 79, 9, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 24, 0, 0, 0, 96,181, 80, 10,198, 0, 0, 0, 1, 0, 0, 0, 16,143, 60, 10,240,180, 81, 10,248, 15, 55, 10, 48,141, 84, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 16,143, 60, 10,198, 0, 0, 0, 1, 0, 0, 0, 88,143, 60, 10,
+ 96,181, 80, 10, 16,160, 78, 10, 48,141, 84, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 88,143, 60, 10,
+198, 0, 0, 0, 1, 0, 0, 0,160,143, 60, 10, 16,143, 60, 10,184, 29, 79, 9,240,152, 88, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 24, 0, 0, 0,160,143, 60, 10,198, 0, 0, 0, 1, 0, 0, 0,232,143, 60, 10, 88,143, 60, 10,240,203, 80, 9,
+ 48,141, 84, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,232,143, 60, 10,198, 0, 0, 0, 1, 0, 0, 0,
+ 48,144, 60, 10,160,143, 60, 10,208,171, 79, 9, 16,160, 78, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,
+ 48,144, 60, 10,198, 0, 0, 0, 1, 0, 0, 0,120,144, 60, 10,232,143, 60, 10,208,171, 79, 9,240,203, 80, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,120,144, 60, 10,198, 0, 0, 0, 1, 0, 0, 0,192,144, 60, 10, 48,144, 60, 10,
+ 96,211, 87, 9,248, 15, 55, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,192,144, 60, 10,198, 0, 0, 0,
+ 1, 0, 0, 0, 8,145, 60, 10,120,144, 60, 10,240,152, 88, 9, 88, 68, 81, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 24, 0, 0, 0, 8,145, 60, 10,198, 0, 0, 0, 1, 0, 0, 0, 80,145, 60, 10,192,144, 60, 10, 88, 68, 81, 10, 48,141, 84, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 80,145, 60, 10,198, 0, 0, 0, 1, 0, 0, 0,152,145, 60, 10,
+ 8,145, 60, 10, 96,211, 87, 9, 88, 68, 81, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,152,145, 60, 10,
+198, 0, 0, 0, 1, 0, 0, 0,224,145, 60, 10, 80,145, 60, 10, 96,211, 87, 9,160,154, 61, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 24, 0, 0, 0,224,145, 60, 10,198, 0, 0, 0, 1, 0, 0, 0, 40,146, 60, 10,152,145, 60, 10,160,154, 61, 10,
+ 88, 68, 81, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 40,146, 60, 10,198, 0, 0, 0, 1, 0, 0, 0,
+112,146, 60, 10,224,145, 60, 10, 16,228, 79, 9,224, 27, 77, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,
+112,146, 60, 10,198, 0, 0, 0, 1, 0, 0, 0,184,146, 60, 10, 40,146, 60, 10,240,152, 88, 9,224, 27, 77, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,184,146, 60, 10,198, 0, 0, 0, 1, 0, 0, 0, 0,147, 60, 10,112,146, 60, 10,
+160,154, 61, 10,224, 27, 77, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 0,147, 60, 10,198, 0, 0, 0,
+ 1, 0, 0, 0, 72,147, 60, 10,184,146, 60, 10,104,177, 80, 9, 96,211, 87, 9, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 24, 0, 0, 0, 72,147, 60, 10,198, 0, 0, 0, 1, 0, 0, 0,144,147, 60, 10, 0,147, 60, 10,104, 32, 59, 10,160,154, 61, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,144,147, 60, 10,198, 0, 0, 0, 1, 0, 0, 0,216,147, 60, 10,
+ 72,147, 60, 10,104,177, 80, 9,104, 32, 59, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,216,147, 60, 10,
+198, 0, 0, 0, 1, 0, 0, 0, 32,148, 60, 10,144,147, 60, 10,240,203, 80, 9, 8, 40, 82, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 24, 0, 0, 0, 32,148, 60, 10,198, 0, 0, 0, 1, 0, 0, 0,104,148, 60, 10,216,147, 60, 10, 8, 40, 82, 9,
+240,152, 88, 9, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,104,148, 60, 10,198, 0, 0, 0, 1, 0, 0, 0,
+176,148, 60, 10, 32,148, 60, 10,184, 29, 79, 9,192, 37, 85, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,
+176,148, 60, 10,198, 0, 0, 0, 1, 0, 0, 0,248,148, 60, 10,104,148, 60, 10,208,171, 79, 9,192, 37, 85, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,248,148, 60, 10,198, 0, 0, 0, 1, 0, 0, 0, 64,149, 60, 10,176,148, 60, 10,
+ 8, 40, 82, 9,192, 37, 85, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 64,149, 60, 10,198, 0, 0, 0,
+ 1, 0, 0, 0,136,149, 60, 10,248,148, 60, 10, 16,228, 79, 9,104,177, 80, 9, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 24, 0, 0, 0,136,149, 60, 10,198, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64,149, 60, 10,104, 32, 59, 10,224, 27, 77, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0,208,149, 60, 10,200, 0, 0, 0, 1, 0, 0, 0,176,152, 60, 10,
+ 0, 0, 0, 0, 16,228, 79, 9, 88,180, 84, 10, 40,197, 80, 9,184, 29, 79, 9, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0,
+ 71, 4, 0, 0, 97, 4, 0, 0, 7, 7,119, 7, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0,128,212, 60, 10,
+128,212, 60, 10, 96,150, 60, 10,136,151, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+248, 0, 0, 0, 96,150, 60, 10,201, 0, 0, 0, 1, 0, 0, 0,136,151, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,148, 68,
+ 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,238, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0,
+ 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,119, 7, 26, 0,119, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0, 71, 4, 0, 0, 96, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,119, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,136,151, 60, 10,201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 96,150, 60, 10, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192,
+ 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0,
+ 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,129, 7, 2, 0,112, 7,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 4, 0, 0, 97, 4, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0,176,152, 60, 10,
+200, 0, 0, 0, 1, 0, 0, 0,216,173, 60, 10,208,149, 60, 10, 48,141, 84, 10,240,203, 80, 9,208,171, 79, 9, 16,160, 78, 10,
+ 0, 0, 0, 0, 45, 6, 0, 0,118, 7, 0, 0, 0, 0, 0, 0,219, 1, 0, 0, 4, 4, 74, 1,220, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,208,172, 60, 10,208,172, 60, 10, 64,153, 60, 10,104,154, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 64,153, 60, 10,201, 0, 0, 0, 1, 0, 0, 0,104,154, 60, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,165, 67, 0, 0, 0, 0,
+ 0, 0,248, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67,
+ 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 74, 1, 31, 0, 74, 1,
+ 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 6, 0, 0,118, 7, 0, 0,189, 1, 0, 0,219, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 1, 31, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,104,154, 60, 10,
+201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64,153, 60, 10, 0, 0, 0, 0, 0, 0,165, 67, 0,128, 86,196, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1,128,156, 67, 2,128,222,195, 0, 0, 0, 0, 57, 1, 0, 0, 74, 1, 0, 0, 0, 0, 0, 0,188, 1, 0, 0,
+ 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 56, 1, 0, 0, 0, 0, 0, 0,188, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0,
+ 18, 0, 0, 4, 6, 0, 74, 1,189, 1, 57, 1,189, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 6, 0, 0,
+118, 7, 0, 0, 0, 0, 0, 0,188, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 1,189, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,
-168,240, 83, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0,200, 23, 84, 3, 0, 0, 0, 0,216,236, 83, 3, 0, 0, 0, 0,
-232,218, 83, 3, 0, 0, 0, 0,200,219, 83, 3, 0, 0, 0, 0, 56,220, 83, 3, 0, 0, 0, 0,152,217, 83, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 33, 4, 0, 0,254, 4, 0, 0, 0, 0, 0, 0, 51, 1, 0, 0, 4, 4,222, 0, 52, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 14, 84, 3, 0, 0, 0, 0, 72, 22, 84, 3, 0, 0, 0, 0,
-152,241, 83, 3, 0, 0, 0, 0, 8,243, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152,241, 83, 3, 0, 0, 0, 0,
-200, 0, 0, 0, 1, 0, 0, 0, 8,243, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67,
- 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 55, 0, 0, 94, 67, 0, 0, 0, 0, 0, 0,248, 65, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,221, 0, 0, 0,
- 0, 0, 0, 0, 30, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,222, 0, 31, 0,222, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 33, 4, 0, 0,254, 4, 0, 0, 21, 1, 0, 0, 51, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,222, 0, 31, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8,243, 83, 3, 0, 0, 0, 0,
-200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,241, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 67,
- 0, 64, 80,196, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 77, 67, 1,128,138,195, 0, 0, 0, 0,205, 0, 0, 0,222, 0, 0, 0,
- 0, 0, 0, 0, 20, 1, 0, 0, 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,204, 0, 0, 0,
- 0, 0, 0, 0, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64,
- 10, 1, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,222, 0, 21, 1,205, 0, 21, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 33, 4, 0, 0,254, 4, 0, 0, 0, 0, 0, 0, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,222, 0, 21, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,120, 14, 84, 3, 0, 0, 0, 0,
-165, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,144,155, 60, 10, 96,171, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 64, 1, 0, 0,144,155, 60, 10,199, 0, 0, 0, 1, 0, 0, 0, 0,157, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 67,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,220,255, 57, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,160, 0, 0, 0,200, 23, 84, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0,200, 36, 84, 3, 0, 0, 0, 0,
-168,240, 83, 3, 0, 0, 0, 0, 72,216, 83, 3, 0, 0, 0, 0,168,220, 83, 3, 0, 0, 0, 0, 24,221, 83, 3, 0, 0, 0, 0,
-232,218, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 4, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0,
- 15, 15, 32, 4, 84, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 27, 84, 3, 0, 0, 0, 0,
- 72, 35, 84, 3, 0, 0, 0, 0,184, 24, 84, 3, 0, 0, 0, 0, 40, 26, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-184, 24, 84, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 40, 26, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,128,140, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,132, 68, 0, 0, 0, 0, 0, 0,208, 65,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, 0,157, 60, 10,
+199, 0, 0, 0, 1, 0, 0, 0,112,158, 60, 10,144,155, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 31, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 32, 4, 26, 0, 32, 4, 26, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, 57, 1, 61, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
- 40, 26, 84, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 24, 84, 3, 0, 0, 0, 0,
- 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
- 0, 0, 0, 0, 31, 4, 0, 0, 18, 0, 0, 0, 57, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,
-205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0, 32, 4, 58, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 4, 0, 0, 26, 0, 0, 0, 83, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 4, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,112,158, 60, 10,199, 0, 0, 0, 1, 0, 0, 0,224,159, 60, 10,
+ 0,157, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,
-152, 27, 84, 3, 0, 0, 0, 0,176, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255, 57, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 64, 1, 0, 0,224,159, 60, 10,199, 0, 0, 0, 1, 0, 0, 0, 80,161, 60, 10,112,158, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,200, 36, 84, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0,
-184, 55, 84, 3, 0, 0, 0, 0,200, 23, 84, 3, 0, 0, 0, 0,200,219, 83, 3, 0, 0, 0, 0, 72,223, 83, 3, 0, 0, 0, 0,
-184,223, 83, 3, 0, 0, 0, 0, 56,220, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 4, 0, 0,254, 4, 0, 0,
- 53, 1, 0, 0, 47, 2, 0, 0, 3, 3,222, 0,251, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-152, 40, 84, 3, 0, 0, 0, 0, 56, 54, 84, 3, 0, 0, 0, 0,184, 37, 84, 3, 0, 0, 0, 0, 40, 39, 84, 3, 0, 0, 0, 0,
+ 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,184, 37, 84, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 40, 39, 84, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,163, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 94, 67,
- 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,221, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 66, 67, 0, 0,200, 65,
- 0, 0, 66, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,222, 0,
- 26, 0,222, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 4, 0, 0,254, 4, 0, 0,
- 22, 2, 0, 0, 47, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,222, 0, 26, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,140,254, 57, 1,203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0, 40, 39, 84, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-184, 37, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,131, 67, 0, 0,228,194, 0, 0, 0, 0, 0, 0,100, 66, 0, 0,131, 67,
- 0, 0, 79,195, 0, 0, 0, 0,205, 0, 0, 0,222, 0, 0, 0, 18, 0, 0, 0,224, 0, 0, 0, 0, 0, 0, 0,204, 0, 0, 0,
- 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,204, 0, 0, 0, 18, 0, 0, 0,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 2, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0,222, 0,
-225, 0,205, 0,207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 4, 0, 0,254, 4, 0, 0,
- 53, 1, 0, 0, 21, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,222, 0,225, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, 80,161, 60, 10,199, 0, 0, 0,
+ 1, 0, 0, 0,192,162, 60, 10,224,159, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,
+116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,
+116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,110,116,105, 45, 65,108,105, 97,115,105,110,
+103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,254, 57, 1, 58, 0, 20, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,192,162, 60, 10,199, 0, 0, 0, 1, 0, 0, 0, 48,164, 60, 10, 80,161, 60, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 32, 1, 0, 0,152, 40, 84, 3, 0, 0, 0, 0,169, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 70,117,108,108, 32, 83, 97,109,112,108,101, 32, 77,111,116,105,111,110, 32, 66,108,117,114, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,254, 57, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,
+ 48,164, 60, 10,199, 0, 0, 0, 1, 0, 0, 0,160,165, 60, 10,192,162, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
+ 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
+ 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,
+105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,164,253,
+ 57, 1,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 42, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0,
- 8, 42, 84, 3, 0, 0, 0, 0,223, 0, 0, 0, 1, 0, 0, 0, 13, 0, 0, 0, 13, 0, 0, 0,104, 42, 84, 3, 0, 0, 0, 0,
- 68, 65, 84, 65,208, 0, 0, 0,104, 42, 84, 3, 0, 0, 0, 0,222, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
-120,159, 89, 3, 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0,120,159, 89, 3, 0, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0,
-120,159, 89, 3, 0, 0, 0, 0, 21, 0, 1, 0, 1, 0, 1, 0,120,159, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
-104,181, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 40,189, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
- 72,129, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,232,200, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
-200,110, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,200,195, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
-232,176, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 8,184, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
- 24,176, 89, 3, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,184, 55, 84, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0,
-104, 84, 84, 3, 0, 0, 0, 0,200, 36, 84, 3, 0, 0, 0, 0,136,221, 83, 3, 0, 0, 0, 0,248,221, 83, 3, 0, 0, 0, 0,
- 88,219, 83, 3, 0, 0, 0, 0, 24,221, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 1, 0, 0, 31, 4, 0, 0,
- 85, 0, 0, 0,186, 2, 0, 0, 1, 1, 95, 2,102, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-232, 78, 84, 3, 0, 0, 0, 0, 72, 83, 84, 3, 0, 0, 0, 0,168, 56, 84, 3, 0, 0, 0, 0,200, 73, 84, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,160,165, 60, 10,199, 0, 0, 0, 1, 0, 0, 0,
+ 16,167, 60, 10, 48,164, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,168, 56, 84, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 24, 58, 84, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,117, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192, 23, 68,
- 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65,
- 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 95, 2,
- 26, 0, 95, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 1, 0, 0, 31, 4, 0, 0,
- 85, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 2, 26, 0, 0, 0, 1, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0, 24, 58, 84, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,136, 59, 84, 3, 0, 0, 0, 0,
-168, 56, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,
-255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0,
- 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0,
- 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 1, 0, 0,193, 1, 0, 0,
-111, 0, 0, 0,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 76, 2, 0, 0, 5, 0,
- 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,253, 57, 1,130, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,136, 59, 84, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,248, 60, 84, 3, 0, 0, 0, 0,
- 24, 58, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67,
- 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0,
- 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,
-120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 1, 0, 0, 31, 4, 0, 0,
-111, 0, 0, 0,111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0,
- 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 64, 1, 0, 0, 16,167, 60, 10,199, 0, 0, 0, 1, 0, 0, 0,128,168, 60, 10,160,165, 60, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,248, 60, 84, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,200, 73, 84, 3, 0, 0, 0, 0,
-136, 59, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128, 96,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67,
- 0,128, 96,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,147, 3, 0, 0, 0, 0, 0, 0,162, 0, 0, 0,
- 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,147, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,
-148, 3,163, 0,130, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 4, 0, 0, 31, 4, 0, 0,
-111, 0, 0, 0,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0,
- 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,242,252, 57, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,200, 73, 84, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-248, 60, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,128,168, 60, 10,
+199, 0, 0, 0, 1, 0, 0, 0,240,169, 60, 10, 16,167, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111,
+ 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218,252, 57, 1, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193, 1, 0, 0, 31, 4, 0, 0,
-111, 0, 0, 0,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 2, 76, 2, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,240,169, 60, 10,199, 0, 0, 0, 1, 0, 0, 0, 96,171, 60, 10,
+128,168, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 75, 84, 3, 0, 0, 0, 0,
- 68, 65, 84, 65,104, 3, 0, 0, 56, 75, 84, 3, 0, 0, 0, 0,159, 0, 0, 0, 1, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25,134,144, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 28, 13,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, 74,215, 76,190, 0, 0, 0, 0, 68,239,209, 62, 51,177,205,190,
-184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63,
- 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,
-176, 84, 89,188, 0, 0, 0, 0, 53,177,205,190,142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190,
- 43, 61,228, 62, 0, 0, 0, 0,164, 96, 68, 65,111,121,173,192,248,209,213, 64, 0, 0,128, 63,178,157,229, 62,215, 62,232,190,
- 48,180, 81,191,184,158, 81,191,117, 90,127, 63,158,227, 95, 62, 26, 63,185, 62, 35, 44,185, 62,145,180,109,188,243, 90,129, 63,
-138, 84,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 9,185,108, 65,214,211,111, 65, 99,240,191, 62,110,116, 85, 63,
- 80,185, 70,188, 0, 0, 82,180,206, 44,182,190,198,158, 47, 62, 36,239, 74, 63, 0, 0, 8,179, 67,108,117,194,183,204,216, 65,
-104,156, 5,194,212,247,159,192,235, 62,114, 66, 59,254,213,193,157,225, 3, 66, 55, 8,160, 64, 68,239,209, 62, 51,177,205,190,
-184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63,
- 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63,178,157,229, 62,215, 62,232,190,
- 48,180, 81,191,184,158, 81,191,117, 90,127, 63,158,227, 95, 62, 26, 63,185, 62, 35, 44,185, 62,145,180,109,188,243, 90,129, 63,
-138, 84,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 9,185,108, 65,214,211,111, 65,255,189, 88, 64, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,189, 88, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-255,189, 88, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 92, 62, 55, 63, 56,186,224,190,
-237,203,148,190, 3,236,234,190,214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0,234,108, 69, 59, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194,252, 57, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
+ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 64, 1, 0, 0, 96,171, 60, 10,199, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,240,169, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,170,252, 57, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,208,172, 60, 10,165, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 32, 33, 12, 66, 85,152,137, 66,116, 27,126, 66, 0, 0, 0, 0,
- 68, 65, 84, 65, 48, 1, 0, 0,232, 78, 84, 3, 0, 0, 0, 0,160, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 8,184, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0,205,204,204, 61, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0,255,255, 25, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,104, 84, 84, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0,
- 8,147, 84, 3, 0, 0, 0, 0,184, 55, 84, 3, 0, 0, 0, 0,168,220, 83, 3, 0, 0, 0, 0,104,222, 83, 3, 0, 0, 0, 0,
-216,222, 83, 3, 0, 0, 0, 0,136,221, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0,
- 85, 0, 0, 0,255, 0, 0, 0, 2, 2,192, 1,171, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 24, 91, 84, 3, 0, 0, 0, 0,232,145, 84, 3, 0, 0, 0, 0, 88, 85, 84, 3, 0, 0, 0, 0,168, 89, 84, 3, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0, 88, 85, 84, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,200, 86, 84, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 93, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,224, 67,
- 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,103, 68, 0, 0,200, 65,
- 0,192,103, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,192, 1,
- 26, 0,192, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0,
- 85, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 1, 26, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 96, 0, 0, 0,216,173, 60, 10,200, 0, 0, 0, 1, 0, 0, 0,160,177, 60, 10,176,152, 60, 10,248, 15, 55, 10, 96,211, 87, 9,
+ 88, 68, 81, 10, 48,141, 84, 10, 0, 0, 0, 0, 0, 0, 0, 0, 43, 6, 0, 0, 0, 0, 0, 0,131, 0, 0, 0, 15, 15, 44, 6,
+132, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,176, 60, 10,184,176, 60, 10,104,174, 60, 10,144,175, 60, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,104,174, 60, 10,201, 0, 0, 0,
+ 1, 0, 0, 0,144,175, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,137, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
+ 0,128,197, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68,
+ 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4,
+ 10, 0, 44, 6, 26, 0, 44, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 6, 0, 0,
+ 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 6, 26, 0, 0, 0, 1, 0,
2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+248, 0, 0, 0,144,175, 60, 10,201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,104,174, 60, 10, 0, 0, 64,192, 0, 0,126, 67,
+ 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 43, 6, 0, 0,
+ 18, 0, 0, 0,105, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65,
+ 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0, 44, 6,106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 43, 6, 0, 0, 26, 0, 0, 0,131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 44, 6,106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,188, 0, 0, 0,184,176, 60, 10,176, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,200, 86, 84, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 56, 88, 84, 3, 0, 0, 0, 0,
- 88, 85, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,112,193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67,
- 0, 0,254,194, 0, 0, 0, 0,200, 0, 0, 0,217, 0, 0, 0, 18, 0, 0, 0,144, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0,
- 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 18, 0, 0, 0,144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 10, 6, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0,217, 0,
-145, 0,200, 0,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 0, 0,
-111, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,217, 0,145, 0, 0, 0, 2, 0,
- 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0, 56, 88, 84, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,168, 89, 84, 3, 0, 0, 0, 0,
-200, 86, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0,
+160,177, 60, 10,200, 0, 0, 0, 1, 0, 0, 0,128,182, 60, 10,216,173, 60, 10,240,203, 80, 9, 8, 40, 82, 9,192, 37, 85, 10,
+208,171, 79, 9, 0, 0, 0, 0, 45, 6, 0, 0,118, 7, 0, 0,221, 1, 0, 0, 99, 3, 0, 0, 3, 3, 74, 1,135, 1, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,180, 60, 10,128,180, 60, 10, 48,178, 60, 10, 88,179, 60, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 48,178, 60, 10,201, 0, 0, 0, 1, 0, 0, 0,
+ 88,179, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,244, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,165, 67,
+ 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 66, 67, 0, 0,200, 65,
+ 0, 0, 66, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 74, 1,
+ 26, 0, 74, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 6, 0, 0,118, 7, 0, 0, 74, 3, 0, 0,
+ 99, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 1, 26, 0, 0, 0, 1, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,
+ 88,179, 60, 10,201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 48,178, 60, 10, 0, 0, 0, 0, 0,128,131, 67, 0, 0,228,194,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,128,156, 67, 0,128,173,195, 0, 0, 0, 0, 57, 1, 0, 0, 74, 1, 0, 0, 18, 0, 0, 0,
+108, 1, 0, 0, 0, 0, 0, 0, 56, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 56, 1, 0, 0, 18, 0, 0, 0,
+108, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 6, 0, 0,
+ 2, 0, 3, 3, 0, 0, 0, 4, 6, 0, 74, 1,109, 1, 57, 1, 91, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 45, 6, 0, 0,118, 7, 0, 0,221, 1, 0, 0, 73, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 74, 1,109, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65,252, 0, 0, 0,128,180, 60, 10,169, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 41, 82, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, 12, 0, 0, 0,152, 41, 82, 9,
+224, 0, 0, 0, 1, 0, 0, 0, 14, 0, 0, 0, 14, 0, 0, 0,168,181, 60, 10, 68, 65, 84, 65,168, 0, 0, 0,168,181, 60, 10,
+223, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 16,228, 90, 10, 19, 0, 0, 0, 1, 0, 1, 0, 16,228, 90, 10,
+ 20, 0, 0, 0, 1, 0, 1, 0, 16,228, 90, 10, 21, 0, 1, 0, 1, 0, 0, 0, 16,228, 90, 10, 0, 0, 0, 0, 1, 0, 1, 0,
+224,243, 90, 10, 0, 0, 0, 0, 1, 0, 1, 0,152,250, 90, 10, 0, 0, 0, 0, 1, 0, 1, 0,240, 74, 92, 10, 0, 0, 0, 0,
+ 1, 0, 1, 0, 40, 4, 91, 10, 0, 0, 0, 0, 1, 0, 1, 0,224,168, 91, 10, 0, 0, 0, 0, 1, 0, 1, 0, 96,255, 90, 10,
+ 0, 0, 0, 0, 1, 0, 1, 0,112,240, 90, 10, 0, 0, 0, 0, 1, 0, 1, 0,208,245, 90, 10, 0, 0, 0, 0, 1, 0, 1, 0,
+216,239, 90, 10, 21, 0, 0, 0, 1, 0, 1, 0, 16,228, 90, 10, 68, 65, 84, 65, 96, 0, 0, 0,128,182, 60, 10,200, 0, 0, 0,
+ 1, 0, 0, 0,120,193, 60, 10,160,177, 60, 10,160,154, 61, 10,224, 27, 77, 10,240,152, 88, 9, 88, 68, 81, 10, 0, 0, 0, 0,
+161, 2, 0, 0, 43, 6, 0, 0,133, 0, 0, 0, 69, 4, 0, 0, 1, 1,139, 3,193, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 80,192, 60, 10, 80,192, 60, 10, 16,183, 60, 10,176,187, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 16,183, 60, 10,201, 0, 0, 0, 1, 0, 0, 0, 56,184, 60, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,117, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192, 98, 68, 0, 0, 0, 0, 0, 0,208, 65,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,138, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,139, 3, 26, 0,139, 3, 26, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 2, 0, 0, 43, 6, 0, 0,133, 0, 0, 0,158, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,139, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 56,184, 60, 10,201, 0, 0, 0,
+ 1, 0, 0, 0, 96,185, 60, 10, 16,183, 60, 10, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,
+142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0,
+ 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 2, 0, 0,161, 2, 0, 0,
+159, 0, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,167, 3, 0, 0, 5, 0,
+ 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+248, 0, 0, 0, 96,185, 60, 10,201, 0, 0, 0, 1, 0, 0, 0,136,186, 60, 10, 56,184, 60, 10, 0, 0, 0, 0, 0, 0, 16, 67,
+ 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0,
+ 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0,
+ 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64,
+ 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,161, 2, 0, 0, 43, 6, 0, 0,159, 0, 0, 0,159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,136,186, 60, 10,201, 0, 0, 0, 1, 0, 0, 0,176,187, 60, 10,
+ 96,185, 60, 10, 0, 0, 0, 0, 0, 0, 35, 67, 0,128, 96,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128, 96,196,
+ 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,147, 3, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0,
+ 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,147, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,148, 3,163, 0,
+130, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 6, 0, 0, 43, 6, 0, 0,159, 0, 0, 0, 69, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,176,187, 60, 10,
+201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,136,186, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0,191, 1, 0, 0,
-111, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0,
- 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,161, 2, 0, 0,
+ 43, 6, 0, 0,159, 0, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,139, 3,167, 3,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,168, 89, 84, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 56, 88, 84, 3, 0, 0, 0, 0, 0, 0, 16,193, 0, 0,130, 67, 0, 0,160,192, 0, 0,160, 64, 0, 0, 0, 0, 0, 0,122, 67,
- 0, 0, 16,193, 0, 0, 32, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,144, 0, 0, 0, 18, 0, 0, 0,230, 0, 0, 0,
- 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,230, 0, 0, 0, 18, 0, 0, 0,144, 0, 0, 0,111, 18,131, 58,111, 18,131, 58,
- 0,124,146, 72, 0, 80, 67, 71, 0, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,231, 0,
-145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,217, 0, 0, 0,191, 1, 0, 0,
-111, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,231, 0,145, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,188, 60, 10,
+ 68, 65, 84, 65, 72, 3, 0, 0,216,188, 60, 10,159, 0, 0, 0, 1, 0, 0, 0,107, 82,144, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 13,128,191,
+ 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, 74,215, 76,190, 0, 0, 0, 0, 68,239,209, 62, 51,177,205,190,184,158, 81, 63,
+ 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,176, 84, 89,188,
+ 0, 0, 0, 0, 53,177,205,190,142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62,
+ 0, 0, 0, 0,164, 96, 68, 65,111,121,173,192,248,209,213, 64, 0, 0,128, 63, 89,180,236, 62,209,249,224,190, 48,180, 81,191,
+184,158, 81,191, 65,158,131, 63,142,225, 88, 62, 26, 63,185, 62, 35, 44,185, 62, 38, 11,117,188,207,156,122, 63,138, 84,228,190,
+ 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 9,185,108, 65,214,211,111, 65,211, 48,186, 62, 11, 16, 79, 63,144,199, 64,188,
+ 0, 0,135,180,163, 15,188,190,102, 75, 53, 62,223,125, 81, 63, 0, 0,104, 51,207,107,117,194, 81,204,216, 65, 40,156, 5,194,
+136,247,159,192,121, 62,114, 66,214,253,213,193, 94,225, 3, 66,236, 7,160, 64, 68,239,209, 62, 51,177,205,190,184,158, 81, 63,
+ 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63, 89,180,236, 62,209,249,224,190, 48,180, 81,191,
+184,158, 81,191, 65,158,131, 63,142,225, 88, 62, 26, 63,185, 62, 35, 44,185, 62, 38, 11,117,188,207,156,122, 63,138, 84,228,190,
+ 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 9,185,108, 65,214,211,111, 65, 99,181, 12, 64, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 99,181, 12, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99,181, 12, 64,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 92, 62, 55, 63, 56,186,224,190,237,203,148,190,
+ 3,236,234,190,214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 14, 43, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,255,255, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,240, 0, 0, 0, 24, 91, 84, 3, 0, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 30, 33, 12, 66, 85,152,137, 66,116, 27,126, 66, 0, 0, 0, 0, 68, 65, 84, 65,
+248, 0, 0, 0, 80,192, 60, 10,160, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,208,245, 90, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0,
+ 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,205,204,204, 61, 0, 0,250, 67,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 3, 0,255,255, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0,120,193, 60, 10,200, 0, 0, 0, 1, 0, 0, 0,240,199, 60, 10,
+128,182, 60, 10, 96,211, 87, 9,104,177, 80, 9,104, 32, 59, 10,160,154, 61, 10, 0, 0, 0, 0, 0, 0, 0, 0,159, 2, 0, 0,
+133, 0, 0, 0,139, 1, 0, 0, 2, 2,160, 2, 7, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,198, 60, 10,
+168,198, 60, 10, 8,194, 60, 10,128,197, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+248, 0, 0, 0, 8,194, 60, 10,201, 0, 0, 0, 1, 0, 0, 0, 48,195, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,100, 68,
+ 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 40, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 2, 0, 0,
+ 0, 0, 0, 0, 25, 0, 0, 0, 0,192,103, 68, 0, 0,200, 65, 0,192,103, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,160, 2, 26, 0,160, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,159, 2, 0, 0,133, 0, 0, 0,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,160, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 48,195, 60, 10,201, 0, 0, 0, 1, 0, 0, 0, 88,196, 60, 10,
+ 8,194, 60, 10, 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,112,193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0, 0, 91,195,
+ 0, 0, 0, 0,200, 0, 0, 0,217, 0, 0, 0, 18, 0, 0, 0,236, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 0, 0, 0, 0,
+ 17, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 18, 0, 0, 0,236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 10, 6, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0,217, 0,237, 0,200, 0,
+219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 0, 0,159, 0, 0, 0,139, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,217, 0,237, 0, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 88,196, 60, 10,
+201, 0, 0, 0, 1, 0, 0, 0,128,197, 60, 10, 48,195, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 2, 0, 0,
+159, 2, 0, 0,159, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
+ 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,248, 0, 0, 0,128,197, 60, 10,201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 88,196, 60, 10, 0, 0, 16,193,
+ 0, 0,130, 67, 0, 0,160,192, 0, 0,160, 64, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 16,193, 0, 0, 32, 65, 0, 0, 0, 0,
+ 17, 0, 0, 0, 18, 0, 0, 0,236, 0, 0, 0, 18, 0, 0, 0,198, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,
+198, 1, 0, 0, 18, 0, 0, 0,236, 0, 0, 0,111, 18,131, 58,111, 18,131, 58, 0,124,146, 72, 0, 80, 67, 71, 0, 0, 0, 0,
+ 0, 0, 0, 0,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,199, 1,237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,217, 0, 0, 0,159, 2, 0, 0,159, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,199, 1,237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0,168,198, 60, 10,164, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 88, 92, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88, 92, 84, 3, 0, 0, 0, 0, 24, 1, 0, 0, 1, 0, 0, 0,
-120,159, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 8,147, 84, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0,
- 72,215, 84, 3, 0, 0, 0, 0,104, 84, 84, 3, 0, 0, 0, 0,104,222, 83, 3, 0, 0, 0, 0, 8,218, 83, 3, 0, 0, 0, 0,
-248,221, 83, 3, 0, 0, 0, 0,216,222, 83, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0,
- 1, 1, 0, 0,186, 2, 0, 0, 12, 12,192, 1,186, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 72,152, 84, 3, 0, 0, 0, 0, 40,214, 84, 3, 0, 0, 0, 0,248,147, 84, 3, 0, 0, 0, 0,216,150, 84, 3, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,248,147, 84, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,104,149, 84, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 98, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,224, 67,
- 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,103, 68, 0, 0,200, 65,
- 0,192,103, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,192, 1,
- 26, 0,192, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0,
- 1, 1, 0, 0, 26, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 1, 26, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,199, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,168,199, 60, 10, 23, 1, 0, 0,
+ 1, 0, 0, 0, 16,228, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 96, 0, 0, 0,240,199, 60, 10,200, 0, 0, 0, 1, 0, 0, 0, 0,205, 60, 10,120,193, 60, 10,104,177, 80, 9, 16,228, 79, 9,
+224, 27, 77, 10,104, 32, 59, 10, 0, 0, 0, 0, 0, 0, 0, 0,159, 2, 0, 0,141, 1, 0, 0, 69, 4, 0, 0, 12, 12,160, 2,
+185, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,203, 60, 10,248,203, 60, 10,128,200, 60, 10,208,202, 60, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,128,200, 60, 10,201, 0, 0, 0,
+ 1, 0, 0, 0,168,201, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,106, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
+ 0, 0, 40, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,103, 68,
+ 0, 0,200, 65, 0,192,103, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4,
+ 10, 0,160, 2, 26, 0,160, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 2, 0, 0,
+141, 1, 0, 0,166, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 2, 26, 0, 0, 0, 1, 0,
2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+248, 0, 0, 0,168,201, 60, 10,201, 0, 0, 0, 1, 0, 0, 0,208,202, 60, 10,128,200, 60, 10, 0, 0, 0, 0, 0, 0, 55, 67,
+ 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0, 64, 35,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0,
+ 18, 0, 0, 0,158, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 8, 4, 0, 0, 2, 0, 3, 3, 0, 0, 2, 4, 6, 0,200, 0,159, 2,200, 0,141, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0,167, 1, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,200, 0,159, 2, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,208,202, 60, 10,201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+168,201, 60, 10, 0, 0, 32,193, 0, 0,104, 68, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,104, 68, 0, 64, 35,196,
+ 0, 0, 0, 0,199, 1, 0, 0,216, 1, 0, 0, 18, 0, 0, 0,158, 2, 0, 0, 0, 0, 0, 0,198, 1, 0, 0, 0, 0, 0, 0,
+ 17, 0, 0, 0, 0, 0, 0, 0,198, 1, 0, 0, 18, 0, 0, 0,158, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124,146, 72,
+ 0, 64, 28, 70, 10,215, 35, 60, 0, 0, 72, 66, 74, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 4, 4, 0,216, 1,159, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 0, 0, 0,159, 2, 0, 0,167, 1, 0, 0, 69, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 1,159, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,104,149, 84, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,216,150, 84, 3, 0, 0, 0, 0,
-248,147, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 67, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67,
- 0, 0,199,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0,
- 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 18, 0, 0, 0,159, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 8, 4, 0, 0, 2, 0, 3, 3, 0, 0, 2, 4, 6, 0,200, 0,
-160, 1,200, 0,142, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0,
- 27, 1, 0, 0,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 0,160, 1, 0, 0, 2, 0,
- 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,248,203, 60, 10,
+ 24, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,216,150, 84, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-104,149, 84, 3, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,104, 68, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,104, 68,
- 0, 0,199,195, 0, 0, 0, 0,231, 0, 0, 0,248, 0, 0, 0, 18, 0, 0, 0,159, 1, 0, 0, 0, 0, 0, 0,230, 0, 0, 0,
- 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,230, 0, 0, 0, 18, 0, 0, 0,159, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,124,146, 72, 0, 64, 28, 70, 10,215, 35, 60, 0, 0, 72, 66, 74, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 4, 4, 0,248, 0,
-160, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 0, 0, 0,191, 1, 0, 0,
- 27, 1, 0, 0,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 0,160, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 0, 1, 0, 0, 72,152, 84, 3, 0, 0, 0, 0, 25, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0,
+ 16,228, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 2, 0, 0, 0, 0,
+ 68, 65, 84, 65, 96, 0, 0, 0, 0,205, 60, 10,200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,240,199, 60, 10, 8, 40, 82, 9,
+240,152, 88, 9,184, 29, 79, 9,192, 37, 85, 10, 0, 0, 0, 0, 45, 6, 0, 0,118, 7, 0, 0,101, 3, 0, 0, 69, 4, 0, 0,
+ 1, 1, 74, 1,225, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,211, 60, 10, 88,211, 60, 10,144,205, 60, 10,
+184,206, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,144,205, 60, 10,
+201, 0, 0, 0, 1, 0, 0, 0,184,206, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,102, 68, 0, 0, 0, 0, 0, 0,208, 65,
+ 0, 0, 0, 0, 0, 0,165, 67, 0, 0, 0, 64, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0,
+ 0,128,164, 67, 0, 0,200, 65, 0,128,164, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3,
+ 4, 0, 12, 0, 10, 0, 74, 1, 24, 0, 74, 1, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 6, 0, 0,
+118, 7, 0, 0,101, 3, 0, 0,101, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
+ 0, 0, 1, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,248, 0, 0, 0,184,206, 60, 10,201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,144,205, 60, 10, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,120,159, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 2, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,
- 72,215, 84, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,147, 84, 3, 0, 0, 0, 0,
- 72,223, 83, 3, 0, 0, 0, 0, 88,219, 83, 3, 0, 0, 0, 0,120,218, 83, 3, 0, 0, 0, 0,184,223, 83, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 33, 4, 0, 0,254, 4, 0, 0, 49, 2, 0, 0,186, 2, 0, 0, 1, 1,222, 0,138, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,222, 84, 3, 0, 0, 0, 0,248,232, 84, 3, 0, 0, 0, 0,
- 56,216, 84, 3, 0, 0, 0, 0,168,217, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56,216, 84, 3, 0, 0, 0, 0,
-200, 0, 0, 0, 1, 0, 0, 0,168,217, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 68,
- 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,194, 67, 0, 0, 0, 64, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,131, 1, 0, 0,
- 0, 0, 0, 0, 23, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,132, 1, 24, 0,132, 1, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 33, 4, 0, 0,254, 4, 0, 0, 49, 2, 0, 0, 49, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 45, 6, 0, 0,118, 7, 0, 0,101, 3, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 74, 1,225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,224,207, 60, 10, 68, 65, 84, 65, 72, 3, 0, 0,224,207, 60, 10,159, 0, 0, 0, 1, 0, 0, 0,
+ 24,255, 13, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 66, 80, 64, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,154, 65,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, 72, 1, 77,190, 0, 0, 0, 0,
+221,149, 47, 63, 85,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62,149, 84, 28,191, 0, 0, 0, 0,
+191, 56, 49,188, 54, 53,101, 63, 50,247,227, 62, 0, 0, 0, 0, 90, 38,173,190,254,221,192,190,152, 9, 52,193, 0, 0,128, 63,
+223,149, 47, 63, 55, 70, 58, 63,192, 56, 49,188, 0, 0, 0, 0, 87,126,162,190,228,251,159, 62, 56, 53,101, 63, 0, 0, 0, 0,
+ 7,165, 39, 63,150, 84, 28,191, 50,247,227, 62, 0, 0, 0, 0,110,101,239, 64,151, 62,208,192, 77,255,170, 64, 0, 0,128, 63,
+ 3,201,194, 63, 34, 49,132,191,244,250, 39,191, 8,165, 39,191,143,164,206, 63,124, 38,130, 63,180,164, 28, 63,149, 84, 28, 63,
+179,153,196,188, 42,119, 58, 64, 8,108,228,190, 50,247,227,190, 82, 21, 64,191,204,230,156,191,216, 49, 49, 65,152, 9, 52, 65,
+231, 70,158, 62, 23,234,167, 62,128,206,159,187, 0, 0,168,180, 59,189,199,189,147,167,196, 61,206,223,140, 62, 0, 0,248, 51,
+211,120, 21,194,145, 5, 2, 66, 10,136,213,193,193,214,159,192,219, 38, 19, 66,197,173,255,193,158,101,210, 65,173, 40,160, 64,
+221,149, 47, 63, 85,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62,149, 84, 28,191, 0, 0, 0, 0,
+191, 56, 49,188, 54, 53,101, 63, 50,247,227, 62, 0, 0, 0, 0, 90, 38,173,190,254,221,192,190,152, 9, 52,193, 0, 0,128, 63,
+ 3,201,194, 63, 34, 49,132,191,244,250, 39,191, 8,165, 39,191,143,164,206, 63,124, 38,130, 63,180,164, 28, 63,149, 84, 28, 63,
+179,153,196,188, 42,119, 58, 64, 8,108,228,190, 50,247,227,190, 82, 21, 64,191,204,230,156,191,216, 49, 49, 65,152, 9, 52, 65,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168,217, 84, 3, 0, 0, 0, 0,
-200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,216, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+241, 22, 72, 63, 78,162,246,190, 44, 8, 90,190, 3, 35,171,190, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+202, 4, 51, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 33, 4, 0, 0,254, 4, 0, 0, 49, 2, 0, 0,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,222, 0,138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 24,219, 84, 3, 0, 0, 0, 0, 68, 65, 84, 65,104, 3, 0, 0, 24,219, 84, 3, 0, 0, 0, 0,
-159, 0, 0, 0, 1, 0, 0, 0, 23,255, 13, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,109,100, 64,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154, 65,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,
- 72, 1, 77,190, 0, 0, 0, 0,221,149, 47, 63, 85,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62,
-149, 84, 28,191, 0, 0, 0, 0,191, 56, 49,188, 54, 53,101, 63, 50,247,227, 62, 0, 0, 0, 0, 90, 38,173,190,254,221,192,190,
-152, 9, 52,193, 0, 0,128, 63,223,149, 47, 63, 55, 70, 58, 63,192, 56, 49,188, 0, 0, 0, 0, 87,126,162,190,228,251,159, 62,
- 56, 53,101, 63, 0, 0, 0, 0, 7,165, 39, 63,150, 84, 28,191, 50,247,227, 62, 0, 0, 0, 0,110,101,239, 64,151, 62,208,192,
- 77,255,170, 64, 0, 0,128, 63, 2,201,194, 63, 61,254,144,191,244,250, 39,191, 8,165, 39,191,142,164,206, 63,250,192,142, 63,
-180,164, 28, 63,149, 84, 28, 63,177,153,196,188,189,133, 76, 64, 8,108,228,190, 50,247,227,190, 81, 21, 64,191,119, 24,172,191,
-216, 49, 49, 65,152, 9, 52, 65,231, 70,158, 62, 24,234,167, 62,160,206,159,187, 0, 0,170,180,243, 26,182,189,252, 74,179, 61,
-195,111,128, 62, 0, 0,124, 51,211,120, 21,194,144, 5, 2, 66, 10,136,213,193,193,214,159,192,219, 38, 19, 66,196,173,255,193,
-158,101,210, 65,173, 40,160, 64,221,149, 47, 63, 85,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62,
-149, 84, 28,191, 0, 0, 0, 0,191, 56, 49,188, 54, 53,101, 63, 50,247,227, 62, 0, 0, 0, 0, 90, 38,173,190,254,221,192,190,
-152, 9, 52,193, 0, 0,128, 63, 2,201,194, 63, 61,254,144,191,244,250, 39,191, 8,165, 39,191,142,164,206, 63,250,192,142, 63,
-180,164, 28, 63,149, 84, 28, 63,177,153,196,188,189,133, 76, 64, 8,108,228,190, 50,247,227,190, 81, 21, 64,191,119, 24,172,191,
-216, 49, 49, 65,152, 9, 52, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,241, 22, 72, 63, 78,162,246,190, 44, 8, 90,190, 2, 35,171,190, 0, 0, 32, 65, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,240, 13,133, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 88,211, 60, 10,160, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0,
+ 1, 0, 7, 0,208,245, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0,140, 0, 0, 0,224,212, 60, 10,
+196, 0, 0, 0, 1, 0, 0, 0, 24, 81, 88, 10, 88,159, 78, 10, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 67,111,109,112,111,115,
+105,116,105,110,103, 0,103, 46, 48, 48, 49, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,213, 60, 10,
+216,216, 60, 10, 24,217, 60, 10, 0,223, 60, 10, 72,223, 60, 10,200, 43, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 16,228, 90, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,152,213, 60, 10,
+197, 0, 0, 0, 1, 0, 0, 0,216,213, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 20, 0, 0, 0,216,213, 60, 10,197, 0, 0, 0, 1, 0, 0, 0, 24,214, 60, 10,152,213, 60, 10, 0, 0, 0, 0, 0, 0, 97, 4,
+ 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 24,214, 60, 10,197, 0, 0, 0, 1, 0, 0, 0, 88,214, 60, 10,216,213, 60, 10,
+ 0, 0, 0, 0,118, 7, 97, 4, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 88,214, 60, 10,197, 0, 0, 0, 1, 0, 0, 0,
+152,214, 60, 10, 24,214, 60, 10, 0, 0, 0, 0,118, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,152,214, 60, 10,
+197, 0, 0, 0, 1, 0, 0, 0,216,214, 60, 10, 88,214, 60, 10, 0, 0, 0, 0, 0, 0, 70, 4, 1, 0, 0, 0, 68, 65, 84, 65,
+ 20, 0, 0, 0,216,214, 60, 10,197, 0, 0, 0, 1, 0, 0, 0, 24,215, 60, 10,152,214, 60, 10, 0, 0, 0, 0,118, 7, 70, 4,
+ 1, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 24,215, 60, 10,197, 0, 0, 0, 1, 0, 0, 0, 88,215, 60, 10,216,214, 60, 10,
+ 0, 0, 0, 0, 24, 6,100, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 88,215, 60, 10,197, 0, 0, 0, 1, 0, 0, 0,
+152,215, 60, 10, 24,215, 60, 10, 0, 0, 0, 0,118, 7,100, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,152,215, 60, 10,
+197, 0, 0, 0, 1, 0, 0, 0,216,215, 60, 10, 88,215, 60, 10, 0, 0, 0, 0, 24, 6, 70, 4, 1, 0, 0, 0, 68, 65, 84, 65,
+ 20, 0, 0, 0,216,215, 60, 10,197, 0, 0, 0, 1, 0, 0, 0, 24,216, 60, 10,152,215, 60, 10, 0, 0, 0, 0, 0, 0,172, 1,
+ 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 24,216, 60, 10,197, 0, 0, 0, 1, 0, 0, 0, 88,216, 60, 10,216,215, 60, 10,
+ 0, 0, 0, 0, 24, 6,172, 1, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 88,216, 60, 10,197, 0, 0, 0, 1, 0, 0, 0,
+152,216, 60, 10, 24,216, 60, 10, 0, 0, 0, 0, 0, 3,172, 1, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,152,216, 60, 10,
+197, 0, 0, 0, 1, 0, 0, 0,216,216, 60, 10, 88,216, 60, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 20, 0, 0, 0,216,216, 60, 10,197, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,152,216, 60, 10, 0, 0, 0, 0, 24, 6, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 24,217, 60, 10,198, 0, 0, 0, 1, 0, 0, 0, 96,217, 60, 10, 0, 0, 0, 0,
+216,213, 60, 10, 24,214, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 96,217, 60, 10,198, 0, 0, 0,
+ 1, 0, 0, 0,168,217, 60, 10, 24,217, 60, 10,216,213, 60, 10,152,214, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 24, 0, 0, 0,168,217, 60, 10,198, 0, 0, 0, 1, 0, 0, 0,240,217, 60, 10, 96,217, 60, 10, 24,214, 60, 10,216,214, 60, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,240,217, 60, 10,198, 0, 0, 0, 1, 0, 0, 0, 56,218, 60, 10,
+168,217, 60, 10,152,214, 60, 10,216,214, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 56,218, 60, 10,
+198, 0, 0, 0, 1, 0, 0, 0,128,218, 60, 10,240,217, 60, 10, 88,214, 60, 10, 88,215, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 24, 0, 0, 0,128,218, 60, 10,198, 0, 0, 0, 1, 0, 0, 0,200,218, 60, 10, 56,218, 60, 10, 24,215, 60, 10,
+ 88,215, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,200,218, 60, 10,198, 0, 0, 0, 1, 0, 0, 0,
+ 16,219, 60, 10,128,218, 60, 10,216,214, 60, 10,152,215, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,
+ 16,219, 60, 10,198, 0, 0, 0, 1, 0, 0, 0, 88,219, 60, 10,200,218, 60, 10,152,214, 60, 10,152,215, 60, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 88,219, 60, 10,198, 0, 0, 0, 1, 0, 0, 0,160,219, 60, 10, 16,219, 60, 10,
+ 24,215, 60, 10,152,215, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,160,219, 60, 10,198, 0, 0, 0,
+ 1, 0, 0, 0,232,219, 60, 10, 88,219, 60, 10,216,214, 60, 10, 88,215, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 24, 0, 0, 0,232,219, 60, 10,198, 0, 0, 0, 1, 0, 0, 0, 48,220, 60, 10,160,219, 60, 10,152,214, 60, 10,216,215, 60, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 48,220, 60, 10,198, 0, 0, 0, 1, 0, 0, 0,120,220, 60, 10,
+232,219, 60, 10,152,215, 60, 10, 24,216, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,120,220, 60, 10,
+198, 0, 0, 0, 1, 0, 0, 0,192,220, 60, 10, 48,220, 60, 10,216,215, 60, 10, 24,216, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 24, 0, 0, 0,192,220, 60, 10,198, 0, 0, 0, 1, 0, 0, 0, 8,221, 60, 10,120,220, 60, 10,216,215, 60, 10,
+ 88,216, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 8,221, 60, 10,198, 0, 0, 0, 1, 0, 0, 0,
+ 80,221, 60, 10,192,220, 60, 10, 24,216, 60, 10, 88,216, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,
+ 80,221, 60, 10,198, 0, 0, 0, 1, 0, 0, 0,152,221, 60, 10, 8,221, 60, 10,152,213, 60, 10,152,216, 60, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,152,221, 60, 10,198, 0, 0, 0, 1, 0, 0, 0,224,221, 60, 10, 80,221, 60, 10,
+152,216, 60, 10,216,216, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,224,221, 60, 10,198, 0, 0, 0,
+ 1, 0, 0, 0, 40,222, 60, 10,152,221, 60, 10, 88,214, 60, 10,216,216, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 24, 0, 0, 0, 40,222, 60, 10,198, 0, 0, 0, 1, 0, 0, 0,112,222, 60, 10,224,221, 60, 10, 24,215, 60, 10,216,216, 60, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,112,222, 60, 10,198, 0, 0, 0, 1, 0, 0, 0,184,222, 60, 10,
+ 40,222, 60, 10, 88,216, 60, 10,152,216, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,184,222, 60, 10,
+198, 0, 0, 0, 1, 0, 0, 0, 0,223, 60, 10,112,222, 60, 10, 24,216, 60, 10,216,216, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 24, 0, 0, 0, 0,223, 60, 10,198, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,184,222, 60, 10,152,213, 60, 10,
+216,215, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0, 72,223, 60, 10,200, 0, 0, 0, 1, 0, 0, 0,
+ 40,226, 60, 10, 0, 0, 0, 0,152,214, 60, 10,216,213, 60, 10, 24,214, 60, 10,216,214, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+118, 7, 0, 0, 71, 4, 0, 0, 97, 4, 0, 0, 7, 7,119, 7, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0,
+240, 8, 61, 10,240, 8, 61, 10,216,223, 60, 10, 0,225, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,248, 0, 0, 0,216,223, 60, 10,201, 0, 0, 0, 1, 0, 0, 0, 0,225, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 32,148, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,238, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+118, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,119, 7, 26, 0,119, 7, 26, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0, 71, 4, 0, 0, 96, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,119, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 0,225, 60, 10,201, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0,216,223, 60, 10, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69,
+ 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0,
+ 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,129, 7,
+ 2, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 4, 0, 0,
+ 97, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0,
+ 40,226, 60, 10,200, 0, 0, 0, 1, 0, 0, 0,240,229, 60, 10, 72,223, 60, 10,216,216, 60, 10, 24,215, 60, 10, 88,215, 60, 10,
+ 88,214, 60, 10, 0, 0, 0, 0, 25, 6, 0, 0,118, 7, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 15, 15, 94, 1,100, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8,229, 60, 10, 8,229, 60, 10,184,226, 60, 10,224,227, 60, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,184,226, 60, 10,201, 0, 0, 0, 1, 0, 0, 0,
+224,227, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,110, 68, 0, 0, 0, 0, 0, 0,208, 65, 0,128,161, 67, 0, 64, 40, 68,
+ 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65,
+ 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 94, 1,
+ 26, 0, 94, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 6, 0, 0,118, 7, 0, 0, 0, 0, 0, 0,
+ 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,
+224,227, 60, 10,201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,184,226, 60, 10, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0,
+ 0, 0, 72, 66, 50, 51, 74,193,154,209,131, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 93, 1, 0, 0, 18, 0, 0, 0,
+ 73, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0,
+ 0, 0, 0, 2, 4, 0, 0, 4, 8, 0, 94, 1, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 25, 6, 0, 0,118, 7, 0, 0, 26, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 94, 1, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65,188, 0, 0, 0, 8,229, 60, 10,176, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0,240,229, 60, 10,
+200, 0, 0, 0, 1, 0, 0, 0, 24,251, 60, 10, 40,226, 60, 10, 24,215, 60, 10,152,215, 60, 10,216,214, 60, 10, 88,215, 60, 10,
+ 0, 0, 0, 0, 25, 6, 0, 0,118, 7, 0, 0,101, 0, 0, 0, 69, 4, 0, 0, 4, 4, 94, 1,225, 3, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 16,250, 60, 10, 16,250, 60, 10,128,230, 60, 10,168,231, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,128,230, 60, 10,201, 0, 0, 0, 1, 0, 0, 0,168,231, 60, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,175, 67, 0, 0, 0, 0,
+ 0, 0,248, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67,
+ 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 94, 1, 31, 0, 94, 1,
+ 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 6, 0, 0,118, 7, 0, 0, 39, 4, 0, 0, 69, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 1, 31, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,168,231, 60, 10,
+201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,128,230, 60, 10, 0, 0, 0, 0, 0,128,174, 67, 0, 64,112,196, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,127,166, 67,254,127,112,196, 0, 0, 0, 0, 77, 1, 0, 0, 94, 1, 0, 0, 0, 0, 0, 0,193, 3, 0, 0,
+ 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 0, 0,193, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0,
+ 18, 0, 0, 4, 6, 0, 94, 1,194, 3, 77, 1,194, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 6, 0, 0,
+118, 7, 0, 0,101, 0, 0, 0, 38, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 1,194, 3,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 1, 0, 0,200,222, 84, 3, 0, 0, 0, 0,
-160, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,
- 8,184, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,208,232, 60, 10,160,248, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 64, 1, 0, 0,208,232, 60, 10,199, 0, 0, 0, 1, 0, 0, 0, 64,234, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0,208, 0, 0, 0,
-200,234, 84, 3, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,200,187, 85, 3, 0, 0, 0, 0, 40,215, 83, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 67,111,109,112,111,115,105,116,105,110,103, 0,103, 46,
- 48, 48, 49, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,235, 84, 3, 0, 0, 0, 0,
-152,241, 84, 3, 0, 0, 0, 0, 8,242, 84, 3, 0, 0, 0, 0, 56,251, 84, 3, 0, 0, 0, 0,168,251, 84, 3, 0, 0, 0, 0,
-184,120, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,159, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 32, 0, 0, 0,232,235, 84, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 88,236, 84, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
- 88,236, 84, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,200,236, 84, 3, 0, 0, 0, 0,232,235, 84, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,200,236, 84, 3, 0, 0, 0, 0,
-196, 0, 0, 0, 1, 0, 0, 0, 56,237, 84, 3, 0, 0, 0, 0, 88,236, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-254, 4,214, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56,237, 84, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,
-168,237, 84, 3, 0, 0, 0, 0,200,236, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 32, 0, 0, 0,168,237, 84, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 24,238, 84, 3, 0, 0, 0, 0,
- 56,237, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,187, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
- 24,238, 84, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,136,238, 84, 3, 0, 0, 0, 0,168,237, 84, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,254, 4,187, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136,238, 84, 3, 0, 0, 0, 0,
-196, 0, 0, 0, 1, 0, 0, 0,248,238, 84, 3, 0, 0, 0, 0, 24,238, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 20, 4, 64, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248,238, 84, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,
-104,239, 84, 3, 0, 0, 0, 0,136,238, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 64, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 32, 0, 0, 0,104,239, 84, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,216,239, 84, 3, 0, 0, 0, 0,
-248,238, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 4,187, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
-216,239, 84, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 72,240, 84, 3, 0, 0, 0, 0,104,239, 84, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72,240, 84, 3, 0, 0, 0, 0,
-196, 0, 0, 0, 1, 0, 0, 0,184,240, 84, 3, 0, 0, 0, 0,216,239, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 20, 4, 20, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184,240, 84, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,
- 40,241, 84, 3, 0, 0, 0, 0, 72,240, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 20, 1, 0, 0, 0, 0,
- 68, 65, 84, 65, 32, 0, 0, 0, 40,241, 84, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,152,241, 84, 3, 0, 0, 0, 0,
-184,240, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
-152,241, 84, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,241, 84, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8,242, 84, 3, 0, 0, 0, 0,
-197, 0, 0, 0, 1, 0, 0, 0,120,242, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,236, 84, 3, 0, 0, 0, 0,
-200,236, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120,242, 84, 3, 0, 0, 0, 0,
-197, 0, 0, 0, 1, 0, 0, 0,232,242, 84, 3, 0, 0, 0, 0, 8,242, 84, 3, 0, 0, 0, 0, 88,236, 84, 3, 0, 0, 0, 0,
-168,237, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232,242, 84, 3, 0, 0, 0, 0,
-197, 0, 0, 0, 1, 0, 0, 0, 88,243, 84, 3, 0, 0, 0, 0,120,242, 84, 3, 0, 0, 0, 0,200,236, 84, 3, 0, 0, 0, 0,
- 24,238, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88,243, 84, 3, 0, 0, 0, 0,
-197, 0, 0, 0, 1, 0, 0, 0,200,243, 84, 3, 0, 0, 0, 0,232,242, 84, 3, 0, 0, 0, 0,168,237, 84, 3, 0, 0, 0, 0,
- 24,238, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200,243, 84, 3, 0, 0, 0, 0,
-197, 0, 0, 0, 1, 0, 0, 0, 56,244, 84, 3, 0, 0, 0, 0, 88,243, 84, 3, 0, 0, 0, 0, 56,237, 84, 3, 0, 0, 0, 0,
-248,238, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56,244, 84, 3, 0, 0, 0, 0,
-197, 0, 0, 0, 1, 0, 0, 0,168,244, 84, 3, 0, 0, 0, 0,200,243, 84, 3, 0, 0, 0, 0,136,238, 84, 3, 0, 0, 0, 0,
-248,238, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168,244, 84, 3, 0, 0, 0, 0,
-197, 0, 0, 0, 1, 0, 0, 0, 24,245, 84, 3, 0, 0, 0, 0, 56,244, 84, 3, 0, 0, 0, 0, 24,238, 84, 3, 0, 0, 0, 0,
-104,239, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24,245, 84, 3, 0, 0, 0, 0,
-197, 0, 0, 0, 1, 0, 0, 0,136,245, 84, 3, 0, 0, 0, 0,168,244, 84, 3, 0, 0, 0, 0,168,237, 84, 3, 0, 0, 0, 0,
-104,239, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136,245, 84, 3, 0, 0, 0, 0,
-197, 0, 0, 0, 1, 0, 0, 0,248,245, 84, 3, 0, 0, 0, 0, 24,245, 84, 3, 0, 0, 0, 0,136,238, 84, 3, 0, 0, 0, 0,
-104,239, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248,245, 84, 3, 0, 0, 0, 0,
-197, 0, 0, 0, 1, 0, 0, 0,104,246, 84, 3, 0, 0, 0, 0,136,245, 84, 3, 0, 0, 0, 0, 24,238, 84, 3, 0, 0, 0, 0,
-248,238, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104,246, 84, 3, 0, 0, 0, 0,
-197, 0, 0, 0, 1, 0, 0, 0,216,246, 84, 3, 0, 0, 0, 0,248,245, 84, 3, 0, 0, 0, 0,168,237, 84, 3, 0, 0, 0, 0,
-216,239, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216,246, 84, 3, 0, 0, 0, 0,
-197, 0, 0, 0, 1, 0, 0, 0, 72,247, 84, 3, 0, 0, 0, 0,104,246, 84, 3, 0, 0, 0, 0,104,239, 84, 3, 0, 0, 0, 0,
- 72,240, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72,247, 84, 3, 0, 0, 0, 0,
-197, 0, 0, 0, 1, 0, 0, 0,184,247, 84, 3, 0, 0, 0, 0,216,246, 84, 3, 0, 0, 0, 0,216,239, 84, 3, 0, 0, 0, 0,
- 72,240, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184,247, 84, 3, 0, 0, 0, 0,
-197, 0, 0, 0, 1, 0, 0, 0, 40,248, 84, 3, 0, 0, 0, 0, 72,247, 84, 3, 0, 0, 0, 0,216,239, 84, 3, 0, 0, 0, 0,
-184,240, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40,248, 84, 3, 0, 0, 0, 0,
-197, 0, 0, 0, 1, 0, 0, 0,152,248, 84, 3, 0, 0, 0, 0,184,247, 84, 3, 0, 0, 0, 0, 72,240, 84, 3, 0, 0, 0, 0,
-184,240, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152,248, 84, 3, 0, 0, 0, 0,
-197, 0, 0, 0, 1, 0, 0, 0, 8,249, 84, 3, 0, 0, 0, 0, 40,248, 84, 3, 0, 0, 0, 0,232,235, 84, 3, 0, 0, 0, 0,
- 40,241, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8,249, 84, 3, 0, 0, 0, 0,
-197, 0, 0, 0, 1, 0, 0, 0,120,249, 84, 3, 0, 0, 0, 0,152,248, 84, 3, 0, 0, 0, 0, 40,241, 84, 3, 0, 0, 0, 0,
-152,241, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120,249, 84, 3, 0, 0, 0, 0,
-197, 0, 0, 0, 1, 0, 0, 0,232,249, 84, 3, 0, 0, 0, 0, 8,249, 84, 3, 0, 0, 0, 0, 56,237, 84, 3, 0, 0, 0, 0,
-152,241, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232,249, 84, 3, 0, 0, 0, 0,
-197, 0, 0, 0, 1, 0, 0, 0, 88,250, 84, 3, 0, 0, 0, 0,120,249, 84, 3, 0, 0, 0, 0,136,238, 84, 3, 0, 0, 0, 0,
-152,241, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88,250, 84, 3, 0, 0, 0, 0,
-197, 0, 0, 0, 1, 0, 0, 0,200,250, 84, 3, 0, 0, 0, 0,232,249, 84, 3, 0, 0, 0, 0,184,240, 84, 3, 0, 0, 0, 0,
- 40,241, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200,250, 84, 3, 0, 0, 0, 0,
-197, 0, 0, 0, 1, 0, 0, 0, 56,251, 84, 3, 0, 0, 0, 0, 88,250, 84, 3, 0, 0, 0, 0, 72,240, 84, 3, 0, 0, 0, 0,
-152,241, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56,251, 84, 3, 0, 0, 0, 0,
-197, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,250, 84, 3, 0, 0, 0, 0,232,235, 84, 3, 0, 0, 0, 0,
-216,239, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,168,251, 84, 3, 0, 0, 0, 0,
-199, 0, 0, 0, 1, 0, 0, 0,120,255, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,237, 84, 3, 0, 0, 0, 0,
- 88,236, 84, 3, 0, 0, 0, 0,200,236, 84, 3, 0, 0, 0, 0, 24,238, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,254, 4, 0, 0,188, 2, 0, 0,214, 2, 0, 0, 7, 7,255, 4, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 56,187, 85, 3, 0, 0, 0, 0, 56,187, 85, 3, 0, 0, 0, 0,152,252, 84, 3, 0, 0, 0, 0,
- 8,254, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152,252, 84, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,
- 8,254, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,162, 68, 0, 0, 0, 0, 0, 0,208, 65,
- 0, 0, 0, 0, 0,224,159, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,
- 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3,
- 4, 0, 12, 4, 10, 0,255, 4, 26, 0,255, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,254, 4, 0, 0,188, 2, 0, 0,213, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-255, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8,254, 84, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,152,252, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0,
- 18, 0, 0, 4, 6, 0,129, 7, 2, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,214, 2, 0, 0,214, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 67,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,120,255, 84, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0,
-120, 12, 85, 3, 0, 0, 0, 0,168,251, 84, 3, 0, 0, 0, 0,152,241, 84, 3, 0, 0, 0, 0,136,238, 84, 3, 0, 0, 0, 0,
-248,238, 84, 3, 0, 0, 0, 0, 56,237, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 4, 0, 0,254, 4, 0, 0,
- 0, 0, 0, 0, 63, 0, 0, 0, 15, 15,234, 0, 64, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 72, 3, 85, 3, 0, 0, 0, 0,248, 10, 85, 3, 0, 0, 0, 0,104, 0, 85, 3, 0, 0, 0, 0,216, 1, 85, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,220,255, 76, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,104, 0, 85, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,216, 1, 85, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,116, 68, 0, 0, 0, 0, 0, 0,208, 65, 0,128,190, 67, 0,192, 25, 68,
- 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65,
- 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,234, 0,
- 26, 0,234, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 4, 0, 0,254, 4, 0, 0,
- 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,234, 0, 26, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, 64,234, 60, 10,
+199, 0, 0, 0, 1, 0, 0, 0,176,235, 60, 10,208,232, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, 76, 1, 61, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,176,235, 60, 10,199, 0, 0, 0, 1, 0, 0, 0, 32,237, 60, 10,
+ 64,234, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 64, 1, 0, 0, 32,237, 60, 10,199, 0, 0, 0, 1, 0, 0, 0,144,238, 60, 10,176,235, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,216, 1, 85, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-104, 0, 85, 3, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66, 50, 51, 74,193,154,209,131, 67,
- 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233, 0, 0, 0,
- 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,233, 0, 0, 0, 18, 0, 0, 0, 37, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66,
- 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0,234, 0,
- 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 4, 0, 0,254, 4, 0, 0,
- 26, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,234, 0, 38, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,140,254, 76, 1,203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,216, 0, 0, 0, 72, 3, 85, 3, 0, 0, 0, 0,176, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,144,238, 60, 10,199, 0, 0, 0,
+ 1, 0, 0, 0, 0,240, 60, 10, 32,237, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,
+116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,
+116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,110,116,105, 45, 65,108,105, 97,115,105,110,
+103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,254, 76, 1, 58, 0, 20, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, 0,240, 60, 10,199, 0, 0, 0, 1, 0, 0, 0,112,241, 60, 10,144,238, 60, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 31, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,120, 12, 85, 3, 0, 0, 0, 0,
-199, 0, 0, 0, 1, 0, 0, 0, 24, 52, 85, 3, 0, 0, 0, 0,120,255, 84, 3, 0, 0, 0, 0,136,238, 84, 3, 0, 0, 0, 0,
-104,239, 84, 3, 0, 0, 0, 0, 24,238, 84, 3, 0, 0, 0, 0,248,238, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 21, 4, 0, 0,254, 4, 0, 0, 65, 0, 0, 0,186, 2, 0, 0, 4, 4,234, 0,122, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,200, 35, 85, 3, 0, 0, 0, 0,152, 50, 85, 3, 0, 0, 0, 0,104, 13, 85, 3, 0, 0, 0, 0,
-216, 14, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104, 13, 85, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,
-216, 14, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,208, 65,
- 0, 0, 0, 55, 0, 0,106, 67, 0, 0, 0, 0, 0, 0,248, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0,
- 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3,
- 4, 0, 12, 4, 10, 0,234, 0, 31, 0,234, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 21, 4, 0, 0,254, 4, 0, 0,156, 2, 0, 0,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-234, 0, 31, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 70,117,108,108, 32, 83, 97,109,112,108,101, 32, 77,111,116,105,111,110, 32, 66,108,117,114, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,254, 76, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,216, 14, 85, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,104, 13, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,105, 67, 0, 64, 80,196, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255, 88, 67, 0,192, 22,196, 0, 0, 0, 0,217, 0, 0, 0,234, 0, 0, 0, 0, 0, 0, 0, 90, 2, 0, 0,
- 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,216, 0, 0, 0, 0, 0, 0, 0, 90, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0,
- 18, 0, 0, 4, 6, 0,234, 0, 91, 2,217, 0, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 21, 4, 0, 0,254, 4, 0, 0, 65, 0, 0, 0,155, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-234, 0, 91, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,
+112,241, 60, 10,199, 0, 0, 0, 1, 0, 0, 0,224,242, 60, 10, 0,240, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
+ 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
+ 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,
+105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,164,253,
+ 76, 1,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,200, 35, 85, 3, 0, 0, 0, 0,165, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,224,242, 60, 10,199, 0, 0, 0, 1, 0, 0, 0,
+ 80,244, 60, 10,112,241, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,253, 76, 1,130, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,
- 24, 52, 85, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0, 24, 92, 85, 3, 0, 0, 0, 0,120, 12, 85, 3, 0, 0, 0, 0,
- 40,241, 84, 3, 0, 0, 0, 0,184,240, 84, 3, 0, 0, 0, 0, 72,240, 84, 3, 0, 0, 0, 0,152,241, 84, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 19, 4, 0, 0, 0, 0, 0, 0, 19, 1, 0, 0, 1, 1, 19, 2, 20, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 75, 85, 3, 0, 0, 0, 0,248, 90, 85, 3, 0, 0, 0, 0,
- 8, 53, 85, 3, 0, 0, 0, 0, 40, 70, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8, 53, 85, 3, 0, 0, 0, 0,
-200, 0, 0, 0, 1, 0, 0, 0,120, 54, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,102, 68,
- 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192, 4, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 2, 0, 0,
- 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 19, 2, 26, 0, 19, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 19, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 19, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 64, 1, 0, 0, 80,244, 60, 10,199, 0, 0, 0, 1, 0, 0, 0,192,245, 60, 10,224,242, 60, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,242,252, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,120, 54, 85, 3, 0, 0, 0, 0,
-200, 0, 0, 0, 1, 0, 0, 0,232, 55, 85, 3, 0, 0, 0, 0, 8, 53, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,192,245, 60, 10,
+199, 0, 0, 0, 1, 0, 0, 0, 48,247, 60, 10, 80,244, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111,
+ 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218,252, 76, 1, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, 48,247, 60, 10,199, 0, 0, 0, 1, 0, 0, 0,160,248, 60, 10,
+192,245, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194,252, 76, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
+ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 64, 1, 0, 0,160,248, 60, 10,199, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 48,247, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,170,252, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 16,250, 60, 10,165, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 96, 0, 0, 0, 24,251, 60, 10,200, 0, 0, 0, 1, 0, 0, 0, 16, 6, 61, 10,240,229, 60, 10,152,216, 60, 10, 88,216, 60, 10,
+ 24,216, 60, 10,216,216, 60, 10, 0, 0, 0, 0, 1, 3, 0, 0, 23, 6, 0, 0, 0, 0, 0, 0,171, 1, 0, 0, 1, 1, 23, 3,
+172, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 4, 61, 10,232, 4, 61, 10,168,251, 60, 10, 72, 0, 61, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,168,251, 60, 10,201, 0, 0, 0,
+ 1, 0, 0, 0,208,252, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,102, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
+ 0,192, 69, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68,
+ 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4,
+ 10, 0, 23, 3, 26, 0, 23, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 23, 6, 0, 0,
+ 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 3, 26, 0, 0, 0, 1, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+248, 0, 0, 0,208,252, 60, 10,201, 0, 0, 0, 1, 0, 0, 0,248,253, 60, 10,168,251, 60, 10, 0, 0, 0, 0, 0, 0, 15, 67,
0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0,
18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0,
18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64,
10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 26, 0, 0, 0, 19, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,250, 0, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 3, 0, 0, 1, 3, 0, 0, 26, 0, 0, 0,171, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0,146, 1, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,248,253, 60, 10,201, 0, 0, 0, 1, 0, 0, 0, 32,255, 60, 10,
+208,252, 60, 10, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194,
+ 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,
+ 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,
+102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 23, 6, 0, 0, 26, 0, 0, 0, 26, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 32,255, 60, 10,
+201, 0, 0, 0, 1, 0, 0, 0, 72, 0, 61, 10,248,253, 60, 10, 0, 0, 0, 0, 0, 0, 35, 67, 0,192,108,196, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 35, 67, 0, 0,184,195, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,129, 1, 0, 0,
+ 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,129, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0,
+ 18, 0, 0, 0, 6, 0,180, 0,130, 1,163, 0,112, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 6, 0, 0,
+ 23, 6, 0, 0, 26, 0, 0, 0,171, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
+ 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,232, 55, 85, 3, 0, 0, 0, 0,
-200, 0, 0, 0, 1, 0, 0, 0, 88, 57, 85, 3, 0, 0, 0, 0,120, 54, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67,
- 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0,
- 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0,
- 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64,
- 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 19, 4, 0, 0, 26, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,248, 0, 0, 0, 72, 0, 61, 10,201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 32,255, 60, 10, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 88, 57, 85, 3, 0, 0, 0, 0,
-200, 0, 0, 0, 1, 0, 0, 0, 40, 70, 85, 3, 0, 0, 0, 0,232, 55, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67,
- 0,192,108,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0,184,195, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0,
- 18, 0, 0, 0,129, 1, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0,
- 18, 0, 0, 0,129, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64,
- 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,130, 1,163, 0,112, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 19, 4, 0, 0, 19, 4, 0, 0, 26, 0, 0, 0, 19, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40, 70, 85, 3, 0, 0, 0, 0,
-200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 57, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 23, 6, 0, 0, 26, 0, 0, 0,171, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 23, 3,146, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,112, 1, 61, 10, 68, 65, 84, 65, 72, 3, 0, 0,112, 1, 61, 10,159, 0, 0, 0, 1, 0, 0, 0,
+ 36,101,230, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118,171, 98, 64, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,154, 65,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, 72, 1, 77,190, 0, 0, 0, 0,
+221,149, 47, 63, 85,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62,149, 84, 28,191, 0, 0, 0, 0,
+191, 56, 49,188, 54, 53,101, 63, 50,247,227, 62, 0, 0, 0, 0, 90, 38,173,190,254,221,192,190,152, 9, 52,193, 0, 0,128, 63,
+223,149, 47, 63, 55, 70, 58, 63,192, 56, 49,188, 0, 0, 0, 0, 87,126,162,190,228,251,159, 62, 56, 53,101, 63, 0, 0, 0, 0,
+ 7,165, 39, 63,150, 84, 28,191, 50,247,227, 62, 0, 0, 0, 0,110,101,239, 64,151, 62,208,192, 77,255,170, 64, 0, 0,128, 63,
+ 3, 6,158, 63, 92,224,143,191,244,250, 39,191, 8,165, 39,191,170,164,167, 63,132,167,141, 63,180,164, 28, 63,149, 84, 28, 63,
+ 0,127,159,188,126,242, 74, 64, 8,108,228,190, 50,247,227,190,221,212, 27,191, 39,197,170,191,216, 49, 49, 65,152, 9, 52, 65,
+ 25, 25,195, 62, 12,250,206, 62, 0,247,196,187, 0, 0,150,180,203,132,183,189, 61,175,180, 61,245,110,129, 62, 0, 0,120, 51,
+211,120, 21,194,144, 5, 2, 66, 9,136,213,193,193,214,159,192,219, 38, 19, 66,196,173,255,193,157,101,210, 65,173, 40,160, 64,
+221,149, 47, 63, 85,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62,149, 84, 28,191, 0, 0, 0, 0,
+191, 56, 49,188, 54, 53,101, 63, 50,247,227, 62, 0, 0, 0, 0, 90, 38,173,190,254,221,192,190,152, 9, 52,193, 0, 0,128, 63,
+ 3, 6,158, 63, 92,224,143,191,244,250, 39,191, 8,165, 39,191,170,164,167, 63,132,167,141, 63,180,164, 28, 63,149, 84, 28, 63,
+ 0,127,159,188,126,242, 74, 64, 8,108,228,190, 50,247,227,190,221,212, 27,191, 39,197,170,191,216, 49, 49, 65,152, 9, 52, 65,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+241, 22, 72, 63, 78,162,246,190, 44, 8, 90,190, 3, 35,171,190,214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0,
+162, 30,184, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 19, 4, 0, 0, 26, 0, 0, 0, 19, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 19, 2,250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,152, 71, 85, 3, 0, 0, 0, 0, 68, 65, 84, 65,104, 3, 0, 0,152, 71, 85, 3, 0, 0, 0, 0,
-159, 0, 0, 0, 1, 0, 0, 0, 37,101,230, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,249,173,116, 64,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154, 65,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,
- 72, 1, 77,190, 0, 0, 0, 0,221,149, 47, 63, 85,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62,
-149, 84, 28,191, 0, 0, 0, 0,191, 56, 49,188, 54, 53,101, 63, 50,247,227, 62, 0, 0, 0, 0, 90, 38,173,190,254,221,192,190,
-152, 9, 52,193, 0, 0,128, 63,223,149, 47, 63, 55, 70, 58, 63,192, 56, 49,188, 0, 0, 0, 0, 87,126,162,190,228,251,159, 62,
- 56, 53,101, 63, 0, 0, 0, 0, 7,165, 39, 63,150, 84, 28,191, 50,247,227, 62, 0, 0, 0, 0,110,101,239, 64,151, 62,208,192,
- 77,255,170, 64, 0, 0,128, 63, 4, 6,158, 63,214, 78,155,191,244,250, 39,191, 8,165, 39,191,170,164,167, 63,203,232,152, 63,
-180,164, 28, 63,149, 84, 28, 63, 1,127,159,188,123, 18, 91, 64, 8,108,228,190, 50,247,227,190,222,212, 27,191,168, 86,184,191,
-216, 49, 49, 65,152, 9, 52, 65, 80, 25,195, 62,218,249,206, 62, 0,237,196,187, 0, 0, 96,179,234, 2,170,189,191, 98,167, 61,
- 1,208,111, 62, 0, 0,224, 49,254,120, 21,194,182, 5, 2, 66, 70,136,213,193,239,214,159,192, 5, 39, 19, 66, 15,174,255,193,
-217,101,210, 65,219, 40,160, 64,221,149, 47, 63, 85,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62,
-149, 84, 28,191, 0, 0, 0, 0,191, 56, 49,188, 54, 53,101, 63, 50,247,227, 62, 0, 0, 0, 0, 90, 38,173,190,254,221,192,190,
-152, 9, 52,193, 0, 0,128, 63, 4, 6,158, 63,214, 78,155,191,244,250, 39,191, 8,165, 39,191,170,164,167, 63,203,232,152, 63,
-180,164, 28, 63,149, 84, 28, 63, 1,127,159,188,123, 18, 91, 64, 8,108,228,190, 50,247,227,190,222,212, 27,191,168, 86,184,191,
-216, 49, 49, 65,152, 9, 52, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,241, 22, 72, 63, 78,162,246,190, 44, 8, 90,190, 2, 35,171,190,214,211,111, 65,214,211,111, 65,
- 0, 0, 0, 0, 0, 0, 0, 0,223, 34, 9, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, 1, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,232, 4, 61, 10,160, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0,
+ 1, 0, 7, 0,208,245, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0,205,204,204, 61, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0, 16, 6, 61, 10,
+200, 0, 0, 0, 1, 0, 0, 0,200, 43, 88, 10, 24,251, 60, 10,216,215, 60, 10,152,214, 60, 10,152,215, 60, 10, 24,216, 60, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 23, 6, 0, 0,173, 1, 0, 0, 69, 4, 0, 0, 16, 16, 24, 6,153, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,168, 42, 88, 10,168, 42, 88, 10,160, 6, 61, 10,200, 7, 61, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,160, 6, 61, 10,201, 0, 0, 0, 1, 0, 0, 0,200, 7, 61, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 41, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,195, 68, 0, 0, 0, 0,
+ 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 23, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68,
+ 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 24, 6, 26, 0, 24, 6,
+ 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 6, 0, 0,173, 1, 0, 0,198, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,200, 7, 61, 10,
+201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,160, 6, 61, 10, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68,
+128,195,217,195,192,225,108, 68,240,130,178,193, 24,148, 5, 68, 7, 6, 0, 0, 24, 6, 0, 0, 18, 0, 0, 0,126, 2, 0, 0,
+ 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 18, 0, 0, 0,126, 2, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,236, 81,184, 61, 10,215, 19, 64, 10, 0, 0, 0, 0, 0, 3, 0,
+ 0, 0, 0, 4, 0, 0, 24, 6,127, 2, 7, 6,109, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 23, 6, 0, 0,199, 1, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 6,127, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,244, 0, 0, 0,168, 42, 88, 10,177, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10,215, 19, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 16,228, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0,123,246, 98, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0,200, 43, 88, 10,200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 16, 6, 61, 10,152,213, 60, 10,216,215, 60, 10, 88,216, 60, 10,152,216, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0,255, 2, 0, 0,
+ 0, 0, 0, 0,171, 1, 0, 0, 6, 6, 0, 3,172, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 47, 88, 10,
+208, 47, 88, 10, 88, 44, 88, 10,168, 46, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+248, 0, 0, 0, 88, 44, 88, 10,201, 0, 0, 0, 1, 0, 0, 0,128, 45, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,215, 67,
+ 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 64, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 2, 0, 0,
+ 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 63, 68, 0, 0,200, 65, 0,192, 63, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 0, 3, 26, 0, 0, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,255, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,128, 45, 88, 10,201, 0, 0, 0, 1, 0, 0, 0,168, 46, 88, 10,
+ 88, 44, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, 1, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 1, 0, 0, 72, 75, 85, 3, 0, 0, 0, 0,
-160, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,
- 8,184, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0,171, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 3, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,205,204,204, 61, 0, 0,250, 67,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,
- 24, 92, 85, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0,184,120, 85, 3, 0, 0, 0, 0, 24, 52, 85, 3, 0, 0, 0, 0,
-216,239, 84, 3, 0, 0, 0, 0,168,237, 84, 3, 0, 0, 0, 0,104,239, 84, 3, 0, 0, 0, 0, 72,240, 84, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 4, 0, 0, 21, 1, 0, 0,186, 2, 0, 0, 16, 16, 20, 4,166, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 95, 85, 3, 0, 0, 0, 0,152,119, 85, 3, 0, 0, 0, 0,
- 8, 93, 85, 3, 0, 0, 0, 0,120, 94, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8, 93, 85, 3, 0, 0, 0, 0,
-200, 0, 0, 0, 1, 0, 0, 0,120, 94, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 37, 68,
- 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,130, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 4, 0, 0,
- 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 4, 26, 0, 20, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 4, 0, 0, 21, 1, 0, 0, 46, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,120, 94, 85, 3, 0, 0, 0, 0,
-200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 93, 85, 3, 0, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68,
- 0, 0, 32,193, 0, 0, 0, 68,110,142,241,195, 55,199,120, 68,240, 80,128,193,136, 2, 4, 68, 3, 4, 0, 0, 20, 4, 0, 0,
- 18, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0,
- 18, 0, 0, 0,139, 1, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,236, 81,184, 61, 10,215, 19, 64,
- 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 20, 4,140, 1, 3, 4,122, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 4, 0, 0, 47, 1, 0, 0,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 20, 4,140, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,232, 95, 85, 3, 0, 0, 0, 0,
-177, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 10,215, 19, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,159, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 6, 61,181, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,184,120, 85, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 24, 92, 85, 3, 0, 0, 0, 0,232,235, 84, 3, 0, 0, 0, 0,216,239, 84, 3, 0, 0, 0, 0,
-184,240, 84, 3, 0, 0, 0, 0, 40,241, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 1, 0, 0,
- 0, 0, 0, 0, 19, 1, 0, 0, 6, 6, 0, 2, 20, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-248,125, 85, 3, 0, 0, 0, 0, 24,186, 85, 3, 0, 0, 0, 0,168,121, 85, 3, 0, 0, 0, 0,136,124, 85, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,168,121, 85, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 24,123, 85, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,202, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 68,
- 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 63, 68, 0, 0,200, 65,
- 0,192, 63, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 0, 2,
- 26, 0, 0, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 1, 0, 0,
- 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 26, 0, 0, 0, 1, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,168, 46, 88, 10,
+201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 45, 88, 10, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67,
+ 0, 0,128,191, 0, 0, 0, 64, 0, 0,146,190, 0,128,164, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,146, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0, 24,123, 85, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,136,124, 85, 3, 0, 0, 0, 0,
-168,121, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+255, 2, 0, 0, 26, 0, 0, 0,171, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,146, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 24, 33, 0, 0,208, 47, 88, 10,170, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 65, 0, 0, 0, 0,154,153,153, 62, 0, 0, 0, 0,
+100, 0, 0, 0,154,153,153, 62,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 26, 0, 0, 0, 19, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0,
- 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,136,124, 85, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 24,123, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0,191, 0, 0,192, 63,
- 0, 0, 64, 60, 0, 0,125, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 1, 0, 0,
- 26, 0, 0, 0, 19, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,250, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 72, 33, 0, 0,248,125, 85, 3, 0, 0, 0, 0,170, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 65, 0, 0, 0, 0,154,153,153, 62,
- 0, 0, 0, 0,100, 0, 0, 0,154,153,153, 62,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -986,6 +1077,7 @@ char datatoc_startup_blend[]= {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -994,7 +1086,6 @@ char datatoc_startup_blend[]= {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -1116,1184 +1207,2053 @@ char datatoc_startup_blend[]= {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0,140, 0, 0, 0, 24, 81, 88, 10,196, 0, 0, 0, 1, 0, 0, 0,
+168, 85, 89, 10,224,212, 60, 10, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 68,101,102, 97,117,108,116, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 81, 88, 10,144, 84, 88, 10,208, 84, 88, 10,
+152, 89, 88, 10,224, 89, 88, 10, 24, 35, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0, 16,228, 90, 10, 0, 0, 0, 0, 0, 0, 1, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 74, 84, 8, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,208, 81, 88, 10,197, 0, 0, 0, 1, 0, 0, 0,
+ 16, 82, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 16, 82, 88, 10,
+197, 0, 0, 0, 1, 0, 0, 0, 80, 82, 88, 10,208, 81, 88, 10, 0, 0, 0, 0, 0, 0,226, 3, 0, 0, 0, 0, 68, 65, 84, 65,
+ 20, 0, 0, 0, 80, 82, 88, 10,197, 0, 0, 0, 1, 0, 0, 0,144, 82, 88, 10, 16, 82, 88, 10, 0, 0, 0, 0,246, 4,226, 3,
+ 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,144, 82, 88, 10,197, 0, 0, 0, 1, 0, 0, 0,208, 82, 88, 10, 80, 82, 88, 10,
+ 0, 0, 0, 0,246, 4, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,208, 82, 88, 10,197, 0, 0, 0, 1, 0, 0, 0,
+ 16, 83, 88, 10,144, 82, 88, 10, 0, 0, 0, 0, 0, 0,199, 3, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 16, 83, 88, 10,
+197, 0, 0, 0, 1, 0, 0, 0, 80, 83, 88, 10,208, 82, 88, 10, 0, 0, 0, 0,246, 4,199, 3, 0, 0, 0, 0, 68, 65, 84, 65,
+ 20, 0, 0, 0, 80, 83, 88, 10,197, 0, 0, 0, 1, 0, 0, 0,144, 83, 88, 10, 16, 83, 88, 10, 0, 0, 0, 0, 20, 4, 0, 0,
+ 1, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,144, 83, 88, 10,197, 0, 0, 0, 1, 0, 0, 0,208, 83, 88, 10, 80, 83, 88, 10,
+ 0, 0, 0, 0, 20, 4,199, 3, 1, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,208, 83, 88, 10,197, 0, 0, 0, 1, 0, 0, 0,
+ 16, 84, 88, 10,144, 83, 88, 10, 0, 0, 0, 0, 20, 4, 24, 3, 1, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 16, 84, 88, 10,
+197, 0, 0, 0, 1, 0, 0, 0, 80, 84, 88, 10,208, 83, 88, 10, 0, 0, 0, 0,246, 4, 24, 3, 0, 0, 0, 0, 68, 65, 84, 65,
+ 20, 0, 0, 0, 80, 84, 88, 10,197, 0, 0, 0, 1, 0, 0, 0,144, 84, 88, 10, 16, 84, 88, 10, 0, 0, 0, 0, 0, 0, 92, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,144, 84, 88, 10,197, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 80, 84, 88, 10,
+ 0, 0, 0, 0, 20, 4, 92, 0, 1, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,208, 84, 88, 10,198, 0, 0, 0, 1, 0, 0, 0,
+ 24, 85, 88, 10, 0, 0, 0, 0, 16, 82, 88, 10, 80, 82, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,
+ 24, 85, 88, 10,198, 0, 0, 0, 1, 0, 0, 0, 96, 85, 88, 10,208, 84, 88, 10, 16, 82, 88, 10,208, 82, 88, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 96, 85, 88, 10,198, 0, 0, 0, 1, 0, 0, 0,168, 85, 88, 10, 24, 85, 88, 10,
+ 80, 82, 88, 10, 16, 83, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,168, 85, 88, 10,198, 0, 0, 0,
+ 1, 0, 0, 0,240, 85, 88, 10, 96, 85, 88, 10,208, 82, 88, 10, 16, 83, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 24, 0, 0, 0,240, 85, 88, 10,198, 0, 0, 0, 1, 0, 0, 0, 56, 86, 88, 10,168, 85, 88, 10,208, 81, 88, 10, 80, 83, 88, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 56, 86, 88, 10,198, 0, 0, 0, 1, 0, 0, 0,128, 86, 88, 10,
+240, 85, 88, 10,144, 82, 88, 10, 80, 83, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,128, 86, 88, 10,
+198, 0, 0, 0, 1, 0, 0, 0,200, 86, 88, 10, 56, 86, 88, 10,208, 82, 88, 10,144, 83, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 24, 0, 0, 0,200, 86, 88, 10,198, 0, 0, 0, 1, 0, 0, 0, 16, 87, 88, 10,128, 86, 88, 10, 16, 83, 88, 10,
+144, 83, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 16, 87, 88, 10,198, 0, 0, 0, 1, 0, 0, 0,
+ 88, 87, 88, 10,200, 86, 88, 10, 80, 83, 88, 10,208, 83, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,
+ 88, 87, 88, 10,198, 0, 0, 0, 1, 0, 0, 0,160, 87, 88, 10, 16, 87, 88, 10,144, 83, 88, 10,208, 83, 88, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,160, 87, 88, 10,198, 0, 0, 0, 1, 0, 0, 0,232, 87, 88, 10, 88, 87, 88, 10,
+ 16, 83, 88, 10, 16, 84, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,232, 87, 88, 10,198, 0, 0, 0,
+ 1, 0, 0, 0, 48, 88, 88, 10,160, 87, 88, 10,144, 82, 88, 10, 16, 84, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 24, 0, 0, 0, 48, 88, 88, 10,198, 0, 0, 0, 1, 0, 0, 0,120, 88, 88, 10,232, 87, 88, 10,208, 83, 88, 10, 16, 84, 88, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,120, 88, 88, 10,198, 0, 0, 0, 1, 0, 0, 0,192, 88, 88, 10,
+ 48, 88, 88, 10,208, 81, 88, 10, 80, 84, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,192, 88, 88, 10,
+198, 0, 0, 0, 1, 0, 0, 0, 8, 89, 88, 10,120, 88, 88, 10,208, 82, 88, 10, 80, 84, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 24, 0, 0, 0, 8, 89, 88, 10,198, 0, 0, 0, 1, 0, 0, 0, 80, 89, 88, 10,192, 88, 88, 10,144, 83, 88, 10,
+144, 84, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 80, 89, 88, 10,198, 0, 0, 0, 1, 0, 0, 0,
+152, 89, 88, 10, 8, 89, 88, 10, 80, 83, 88, 10,144, 84, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,
+152, 89, 88, 10,198, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 80, 89, 88, 10, 80, 84, 88, 10,144, 84, 88, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0,224, 89, 88, 10,200, 0, 0, 0, 1, 0, 0, 0,192, 92, 88, 10, 0, 0, 0, 0,
+208, 82, 88, 10, 16, 82, 88, 10, 80, 82, 88, 10, 16, 83, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0,246, 4, 0, 0,200, 3, 0, 0,
+226, 3, 0, 0, 7, 7,247, 4, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 8, 0,160,135, 60, 9, 72, 85, 89, 10, 72, 85, 89, 10,
+112, 90, 88, 10,152, 91, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 32, 57, 88, 9,208, 57, 88, 9, 68, 65, 84, 65,248, 0, 0, 0,
+112, 90, 88, 10,201, 0, 0, 0, 1, 0, 0, 0,152, 91, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,148, 68, 0, 0, 0, 0,
+ 0, 0,208, 65, 0, 0, 0, 0, 0,224,158, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,246, 4, 0, 0, 0, 0, 0, 0,
+ 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,247, 4, 26, 0,247, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,246, 4, 0, 0,200, 3, 0, 0,225, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+247, 4, 26, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+224,136, 60, 9, 16,134, 80, 10, 16,134, 80, 10, 0, 0, 0, 0, 0, 0, 0, 0,112, 58, 88, 9,216, 59, 88, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,152, 91, 88, 10,201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,112, 90, 88, 10,
+ 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,
+112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
+ 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,129, 7, 2, 0,112, 7, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,226, 3, 0, 0,226, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,136, 60, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0,192, 92, 88, 10,200, 0, 0, 0,
+ 1, 0, 0, 0, 32,149, 88, 10,224, 89, 88, 10, 80, 83, 88, 10,208, 83, 88, 10, 16, 84, 88, 10,144, 82, 88, 10, 0, 0, 0, 0,
+ 21, 4, 0, 0,246, 4, 0, 0, 0, 0, 0, 0, 23, 3, 0, 0, 4, 4,226, 0, 24, 3, 1, 0, 0, 0, 0, 0, 0, 0, 8, 0,
+184,132, 60, 9, 16,143, 88, 10,184,148, 88, 10, 80, 93, 88, 10,120, 94, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0,200, 97, 81, 10,
+ 8,197, 65, 10, 68, 65, 84, 65,248, 0, 0, 0, 80, 93, 88, 10,201, 0, 0, 0, 1, 0, 0, 0,120, 94, 88, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,160, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 98, 67, 0, 0, 0, 0, 0, 0,248, 65,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,225, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,226, 0, 31, 0,226, 0, 31, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 4, 0, 0,246, 4, 0, 0,249, 2, 0, 0, 23, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,226, 0, 31, 0, 3, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,135, 60, 9, 8, 84, 78, 9, 8, 84, 78, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+200,244, 80, 10, 48,246, 80, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,120, 94, 88, 10,201, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 80, 93, 88, 10, 0, 0, 0, 0, 0, 0, 98, 67, 0,128, 86,196, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 81, 67, 0, 64, 62,196, 0, 0, 0, 0,209, 0, 0, 0,226, 0, 0, 0, 0, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0,
+ 74, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,208, 0, 0, 0, 0, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4,
+ 6, 0,226, 0,249, 2,209, 0,249, 2, 0, 0,216, 14, 82, 9, 11, 0, 0, 0, 0, 0, 0, 0, 21, 4, 0, 0,246, 4, 0, 0,
+ 0, 0, 0, 0,248, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,226, 0,249, 2, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,133, 60, 9,224,115, 84, 10,
+ 32, 15, 76, 10,160, 95, 88, 10, 8,150, 84, 10,240,246, 80, 10, 88,248, 80, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 64, 1, 0, 0,160, 95, 88, 10,199, 0, 0, 0, 1, 0, 0, 0, 16, 97, 88, 10, 0, 0, 0, 0,248,133, 60, 9, 0, 0, 0, 0,
+ 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 67,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,220,255,209, 0, 36, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, 16, 97, 88, 10,199, 0, 0, 0,
+ 1, 0, 0, 0,128, 98, 88, 10,160, 95, 88, 10,152,106,165, 9, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,
+110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,
+110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255,209, 0, 61, 0, 0, 0, 0, 0,
+ 0, 0, 2, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 83, 78, 0, 0,208, 0, 0, 0,200,187, 85, 3, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 40,202, 86, 3, 0, 0, 0, 0,
-200,234, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 68,101,102, 97,117,108,
-116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-232,188, 85, 3, 0, 0, 0, 0,184,193, 85, 3, 0, 0, 0, 0, 40,194, 85, 3, 0, 0, 0, 0,152,201, 85, 3, 0, 0, 0, 0,
- 8,202, 85, 3, 0, 0, 0, 0,152,126, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-120,159, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92,100,177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232,188, 85, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,
- 88,189, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 32, 0, 0, 0, 88,189, 85, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,200,189, 85, 3, 0, 0, 0, 0,
-232,188, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
-200,189, 85, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 56,190, 85, 3, 0, 0, 0, 0, 88,189, 85, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 97, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56,190, 85, 3, 0, 0, 0, 0,
-196, 0, 0, 0, 1, 0, 0, 0,168,190, 85, 3, 0, 0, 0, 0,200,189, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-118, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168,190, 85, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,
- 24,191, 85, 3, 0, 0, 0, 0, 56,190, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 4, 1, 0, 0, 0,
- 68, 65, 84, 65, 32, 0, 0, 0, 24,191, 85, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,136,191, 85, 3, 0, 0, 0, 0,
-168,190, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 70, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
-136,191, 85, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,248,191, 85, 3, 0, 0, 0, 0, 24,191, 85, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 48, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248,191, 85, 3, 0, 0, 0, 0,
-196, 0, 0, 0, 1, 0, 0, 0,104,192, 85, 3, 0, 0, 0, 0,136,191, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 48, 6, 70, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,104,192, 85, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,
-216,192, 85, 3, 0, 0, 0, 0,248,191, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 6,116, 3, 0, 0, 0, 0,
- 68, 65, 84, 65, 32, 0, 0, 0,216,192, 85, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 72,193, 85, 3, 0, 0, 0, 0,
-104,192, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7,116, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
- 72,193, 85, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,184,193, 85, 3, 0, 0, 0, 0,216,192, 85, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184,193, 85, 3, 0, 0, 0, 0,
-196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,193, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 48, 6, 92, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40,194, 85, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
-152,194, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,189, 85, 3, 0, 0, 0, 0,200,189, 85, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152,194, 85, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
- 8,195, 85, 3, 0, 0, 0, 0, 40,194, 85, 3, 0, 0, 0, 0, 88,189, 85, 3, 0, 0, 0, 0,168,190, 85, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8,195, 85, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
-120,195, 85, 3, 0, 0, 0, 0,152,194, 85, 3, 0, 0, 0, 0,200,189, 85, 3, 0, 0, 0, 0, 24,191, 85, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120,195, 85, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
-232,195, 85, 3, 0, 0, 0, 0, 8,195, 85, 3, 0, 0, 0, 0,168,190, 85, 3, 0, 0, 0, 0, 24,191, 85, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232,195, 85, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
- 88,196, 85, 3, 0, 0, 0, 0,120,195, 85, 3, 0, 0, 0, 0,232,188, 85, 3, 0, 0, 0, 0,136,191, 85, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88,196, 85, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
-200,196, 85, 3, 0, 0, 0, 0,232,195, 85, 3, 0, 0, 0, 0, 56,190, 85, 3, 0, 0, 0, 0,136,191, 85, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200,196, 85, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
- 56,197, 85, 3, 0, 0, 0, 0, 88,196, 85, 3, 0, 0, 0, 0,168,190, 85, 3, 0, 0, 0, 0,248,191, 85, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56,197, 85, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
-168,197, 85, 3, 0, 0, 0, 0,200,196, 85, 3, 0, 0, 0, 0, 24,191, 85, 3, 0, 0, 0, 0,248,191, 85, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168,197, 85, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
- 24,198, 85, 3, 0, 0, 0, 0, 56,197, 85, 3, 0, 0, 0, 0,136,191, 85, 3, 0, 0, 0, 0,104,192, 85, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24,198, 85, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
-136,198, 85, 3, 0, 0, 0, 0,168,197, 85, 3, 0, 0, 0, 0,248,191, 85, 3, 0, 0, 0, 0,104,192, 85, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136,198, 85, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
-248,198, 85, 3, 0, 0, 0, 0, 24,198, 85, 3, 0, 0, 0, 0, 24,191, 85, 3, 0, 0, 0, 0,216,192, 85, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248,198, 85, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
-104,199, 85, 3, 0, 0, 0, 0,136,198, 85, 3, 0, 0, 0, 0, 56,190, 85, 3, 0, 0, 0, 0,216,192, 85, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104,199, 85, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
-216,199, 85, 3, 0, 0, 0, 0,248,198, 85, 3, 0, 0, 0, 0,104,192, 85, 3, 0, 0, 0, 0,216,192, 85, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216,199, 85, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
- 72,200, 85, 3, 0, 0, 0, 0,104,199, 85, 3, 0, 0, 0, 0,232,188, 85, 3, 0, 0, 0, 0, 72,193, 85, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72,200, 85, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
-184,200, 85, 3, 0, 0, 0, 0,216,199, 85, 3, 0, 0, 0, 0,168,190, 85, 3, 0, 0, 0, 0, 72,193, 85, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184,200, 85, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
- 40,201, 85, 3, 0, 0, 0, 0, 72,200, 85, 3, 0, 0, 0, 0,248,191, 85, 3, 0, 0, 0, 0,184,193, 85, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40,201, 85, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
-152,201, 85, 3, 0, 0, 0, 0,184,200, 85, 3, 0, 0, 0, 0,136,191, 85, 3, 0, 0, 0, 0,184,193, 85, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152,201, 85, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 40,201, 85, 3, 0, 0, 0, 0, 72,193, 85, 3, 0, 0, 0, 0,184,193, 85, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 8,202, 85, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0,
-216,205, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,190, 85, 3, 0, 0, 0, 0, 88,189, 85, 3, 0, 0, 0, 0,
-200,189, 85, 3, 0, 0, 0, 0, 24,191, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0,
- 71, 4, 0, 0, 97, 4, 0, 0, 7, 7,119, 7, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 40,193, 55, 3, 0, 0, 0, 0,
-152,201, 86, 3, 0, 0, 0, 0,152,201, 86, 3, 0, 0, 0, 0,248,202, 85, 3, 0, 0, 0, 0,104,204, 85, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,104, 96, 3, 0, 0, 0, 0, 72, 22, 94, 3, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,248,202, 85, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,104,204, 85, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,148, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,238, 68,
- 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65,
- 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,119, 7,
- 26, 0,119, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0,
- 71, 4, 0, 0, 96, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,119, 7, 26, 0, 2, 0, 1, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,195, 55, 3, 0, 0, 0, 0,
-120, 77,142, 4, 0, 0, 0, 0,120, 77,142, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 56, 24, 94, 3, 0, 0, 0, 0,232, 28, 94, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,104,204, 85, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-248,202, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69,
- 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0,
- 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,129, 7,
- 2, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 97, 4, 0, 0, 97, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,194, 55, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,160, 0, 0, 0,216,205, 85, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0,152, 94, 86, 3, 0, 0, 0, 0,
- 8,202, 85, 3, 0, 0, 0, 0,136,191, 85, 3, 0, 0, 0, 0,104,192, 85, 3, 0, 0, 0, 0,216,192, 85, 3, 0, 0, 0, 0,
- 56,190, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 6, 0, 0,118, 7, 0, 0, 0, 0, 0, 0,115, 3, 0, 0,
- 4, 4, 70, 1,116, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,188, 55, 3, 0, 0, 0, 0, 72, 85, 86, 3, 0, 0, 0, 0,
- 24, 93, 86, 3, 0, 0, 0, 0,200,206, 85, 3, 0, 0, 0, 0, 56,208, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,200, 22, 94, 3, 0, 0, 0, 0,184, 29, 94, 3, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-200,206, 85, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 56,208, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,160, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,163, 67, 0, 0, 0, 0, 0, 0,248, 65,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 70, 1, 31, 0, 70, 1, 31, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 6, 0, 0,118, 7, 0, 0, 85, 3, 0, 0,115, 3, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 1, 31, 0, 3, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,192, 55, 3, 0, 0, 0, 0,248, 24,142, 4, 0, 0, 0, 0,
-248, 24,142, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 31, 94, 3, 0, 0, 0, 0,
- 24, 34, 94, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
- 56,208, 85, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,206, 85, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,163, 67, 0, 64, 85,196, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,154, 67, 0, 64, 85,196, 0, 0, 0, 0,
- 53, 1, 0, 0, 70, 1, 0, 0, 0, 0, 0, 0, 84, 3, 0, 0, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
- 0, 0, 0, 0, 52, 1, 0, 0, 0, 0, 0, 0, 84, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0, 70, 1, 85, 3, 53, 1, 85, 3, 0, 0,
-104, 88,127, 4, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 49, 6, 0, 0,118, 7, 0, 0, 0, 0, 0, 0, 84, 3, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 1, 85, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,189, 55, 3, 0, 0, 0, 0,152, 68,129, 4, 0, 0, 0, 0,
- 40, 15, 54, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 35, 94, 3, 0, 0, 0, 0,
- 72, 39, 94, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,
- 72, 85, 86, 3, 0, 0, 0, 0,165, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0,184,172,127, 4, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,152, 94, 86, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0,
-152,107, 86, 3, 0, 0, 0, 0,216,205, 85, 3, 0, 0, 0, 0,232,188, 85, 3, 0, 0, 0, 0, 72,193, 85, 3, 0, 0, 0, 0,
-184,193, 85, 3, 0, 0, 0, 0,136,191, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0,
- 0, 0, 0, 0, 91, 0, 0, 0, 15, 15, 48, 6, 92, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,147, 55, 3, 0, 0, 0, 0,
-104, 98, 86, 3, 0, 0, 0, 0, 24,106, 86, 3, 0, 0, 0, 0,136, 95, 86, 3, 0, 0, 0, 0,248, 96, 86, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 30, 94, 3, 0, 0, 0, 0, 24, 40, 94, 3, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,136, 95, 86, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,248, 96, 86, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,137, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,198, 68,
- 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65,
- 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 48, 6,
- 26, 0, 48, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0,
- 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 6, 26, 0, 5, 0, 1, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,149, 55, 3, 0, 0, 0, 0,
-200,111,129, 4, 0, 0, 0, 0,200,111,129, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 8, 42, 94, 3, 0, 0, 0, 0,120, 44, 94, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,248, 96, 86, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-136, 95, 86, 3, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67,
- 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0,
- 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0, 18, 0, 0, 0, 65, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66,
- 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0, 48, 6,
- 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0,
- 26, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 6, 66, 0, 6, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,148, 55, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-184, 45, 94, 3, 0, 0, 0, 0, 56, 51, 94, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,216, 0, 0, 0,104, 98, 86, 3, 0, 0, 0, 0,176, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 31, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,152,107, 86, 3, 0, 0, 0, 0,
-199, 0, 0, 0, 1, 0, 0, 0,152,126, 86, 3, 0, 0, 0, 0,152, 94, 86, 3, 0, 0, 0, 0,104,192, 85, 3, 0, 0, 0, 0,
-248,191, 85, 3, 0, 0, 0, 0, 24,191, 85, 3, 0, 0, 0, 0,216,192, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 49, 6, 0, 0,118, 7, 0, 0,117, 3, 0, 0, 69, 4, 0, 0, 3, 3, 70, 1,209, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 88,144, 55, 3, 0, 0, 0, 0,104,111, 86, 3, 0, 0, 0, 0, 24,125, 86, 3, 0, 0, 0, 0,136,108, 86, 3, 0, 0, 0, 0,
-248,109, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 40, 94, 3, 0, 0, 0, 0,
- 8, 52, 94, 3, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136,108, 86, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,
-248,109, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,244, 67, 0, 0, 0, 0, 0, 0,208, 65,
- 0, 0, 0, 0, 0, 0,163, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,
- 0, 0, 66, 67, 0, 0,200, 65, 0, 0, 66, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3,
- 4, 0, 12, 4, 10, 0, 70, 1, 26, 0, 70, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 49, 6, 0, 0,118, 7, 0, 0, 44, 4, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 70, 1, 26, 0, 7, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-104,146, 55, 3, 0, 0, 0, 0, 56,223,128, 4, 0, 0, 0, 0, 56,223,128, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,248, 53, 94, 3, 0, 0, 0, 0,104, 56, 94, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248,109, 86, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,136,108, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,131, 67, 0, 0,228,194, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,128,154, 67, 0, 0, 37,195, 0, 0, 0, 0, 53, 1, 0, 0, 70, 1, 0, 0, 18, 0, 0, 0,182, 0, 0, 0,
- 0, 0, 0, 0, 52, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 52, 1, 0, 0, 18, 0, 0, 0,182, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 6, 0, 0, 2, 0, 3, 3,
- 0, 0, 0, 4, 6, 0, 70, 1,183, 0, 53, 1,165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 49, 6, 0, 0,118, 7, 0, 0,117, 3, 0, 0, 43, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 70, 1,183, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-120,145, 55, 3, 0, 0, 0, 0,184, 89,128, 4, 0, 0, 0, 0,184, 89,128, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,168, 57, 94, 3, 0, 0, 0, 0, 8, 60, 94, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,104,111, 86, 3, 0, 0, 0, 0,169, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,128, 98, 88, 10,199, 0, 0, 0, 1, 0, 0, 0,240, 99, 88, 10, 16, 97, 88, 10,
+136,110,165, 9, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255,209, 0, 0, 0, 0, 0, 0, 0, 4, 0, 2, 0, 0, 0, 0, 0, 32, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,248, 87,141, 4, 0, 0, 0, 0,248, 87,141, 4, 0, 0, 0, 0,216,112, 86, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,
+240, 99, 88, 10,199, 0, 0, 0, 1, 0, 0, 0, 96,101, 88, 10,128, 98, 88, 10,168,147,165, 9, 0, 0, 0, 0, 82, 69, 78, 68,
+ 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
+ 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,
+110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,254,
+209, 0,203, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 68, 65, 84, 65, 16, 0, 0, 0,216,112, 86, 3, 0, 0, 0, 0,223, 0, 0, 0, 1, 0, 0, 0, 14, 0, 0, 0, 14, 0, 0, 0,
- 56,113, 86, 3, 0, 0, 0, 0, 68, 65, 84, 65,224, 0, 0, 0, 56,113, 86, 3, 0, 0, 0, 0,222, 0, 0, 0, 14, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,120,159, 89, 3, 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0,120,159, 89, 3, 0, 0, 0, 0,
- 20, 0, 0, 0, 1, 0, 1, 0,120,159, 89, 3, 0, 0, 0, 0, 21, 0, 1, 0, 1, 0, 0, 0,120,159, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 1, 0,104,181, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 40,189, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 1, 0, 72,129, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,232,200, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 1, 0,200,110, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,200,195, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 1, 0,232,176, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 8,184, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 1, 0, 24,176, 89, 3, 0, 0, 0, 0, 21, 0, 0, 0, 1, 0, 1, 0,120,159, 89, 3, 0, 0, 0, 0,
- 68, 65, 84, 65,160, 0, 0, 0,152,126, 86, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-152,107, 86, 3, 0, 0, 0, 0, 72,193, 85, 3, 0, 0, 0, 0,168,190, 85, 3, 0, 0, 0, 0,248,191, 85, 3, 0, 0, 0, 0,
-184,193, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0, 93, 0, 0, 0, 69, 4, 0, 0,
- 1, 1, 48, 6,233, 3, 1, 0, 0, 0, 0, 0, 0, 0, 8, 0, 88,150, 55, 3, 0, 0, 0, 0,232,183, 86, 3, 0, 0, 0, 0,
-120,200, 86, 3, 0, 0, 0, 0,136,127, 86, 3, 0, 0, 0, 0,200,178, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,136, 52, 94, 3, 0, 0, 0, 0, 8, 21, 55, 3, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-136,127, 86, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,248,128, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 64,123, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,198, 68, 0, 0, 0, 0, 0, 0,208, 65,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 47, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 48, 6, 26, 0, 48, 6, 26, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0, 93, 0, 0, 0,118, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 6, 26, 0, 9, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,160, 55, 3, 0, 0, 0, 0,152, 81,128, 4, 0, 0, 0, 0,
-152, 81,128, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 64, 94, 3, 0, 0, 0, 0,
- 72, 68, 94, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-248,128, 86, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,200,154, 86, 3, 0, 0, 0, 0,136,127, 86, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 32, 67, 0,192, 37,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0,192, 37,196, 0, 0, 0, 0,
-143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,150, 2, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
- 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,150, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,151, 2,143, 0,151, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0,175, 1, 0, 0, 69, 4, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,151, 2, 10, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,157, 55, 3, 0, 0, 0, 0,136, 13,129, 4, 0, 0, 0, 0,
-136, 13,129, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 69, 94, 3, 0, 0, 0, 0,
-248, 71, 94, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-200,154, 86, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,216,157, 86, 3, 0, 0, 0, 0,248,128, 86, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 33, 67, 0,128,157,195, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67,136,135,157,195, 0, 0, 0, 0,
-143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
- 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0, 56, 1,143, 0, 56, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0,119, 0, 0, 0,174, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 56, 1, 11, 0, 6, 0, 34, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 56, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,158, 55, 3, 0, 0, 0, 0,248, 8, 54, 3, 0, 0, 0, 0,
-248, 8, 54, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 73, 94, 3, 0, 0, 0, 0,
-168, 75, 94, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-216,157, 86, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,200,178, 86, 3, 0, 0, 0, 0,200,154, 86, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 52, 67, 0,192,115,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,192,115,196, 0, 0, 0, 0,
-163, 0, 0, 0,180, 0, 0, 0, 0, 0, 0, 0,206, 3, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
- 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0,206, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,207, 3,163, 0,207, 3, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0, 47, 6, 0, 0,119, 0, 0, 0, 69, 4, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,152, 55, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-200,178, 86, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,157, 86, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, 96,101, 88, 10,199, 0, 0, 0, 1, 0, 0, 0,
+208,102, 88, 10,240, 99, 88, 10, 32,137,165, 9, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,
+105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,
+105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,254,209, 0, 58, 0, 20, 0, 0, 0, 0, 0, 2, 0,
+ 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 64, 1, 0, 0,208,102, 88, 10,199, 0, 0, 0, 1, 0, 0, 0, 64,104, 88, 10, 96,101, 88, 10,112,141,165, 9,
+ 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 0, 0, 47, 6, 0, 0,119, 0, 0, 0, 69, 4, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 5,207, 3, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,151, 55, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,106, 94, 3, 0, 0, 0, 0,
-216,105, 94, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,180, 86, 3, 0, 0, 0, 0, 68, 65, 84, 65,104, 3, 0, 0,
- 56,180, 86, 3, 0, 0, 0, 0,159, 0, 0, 0, 1, 0, 0, 0,255,255,139, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,200,120,204, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191,
- 0, 0, 0, 0, 0, 0, 0, 0,218,205, 76,190, 0, 0, 0, 0, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0,
- 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,176, 84, 89,188, 0, 0, 0, 0,
- 53,177,205,190,142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0,
-164, 96, 68, 65,111,121,173,192,248,209,213, 64, 0, 0,128, 63,177,157,229, 62, 64, 74, 36,191,222,160, 81,191,184,158, 81,191,
-115, 90,127, 63,248, 96,158, 62, 9, 46,185, 62, 35, 44,185, 62,143,180,109,188,235, 2,183, 63,129, 63,228,190, 42, 61,228,190,
- 0, 0, 0, 0, 0, 0, 0, 0, 21,163,108, 65,214,211,111, 65, 39,240,191, 62,125,116, 85, 63, 96,189, 70,188, 0, 0,186,180,
- 34,195,128,190, 66, 66,248, 61,254,111, 15, 63, 0, 0,150, 52, 61,119,117,194,106,214,216, 65, 98,162, 5,194,251,254,159,192,
- 72, 51,114, 66,244,243,213,193, 71,219, 3, 66,160, 0,160, 64, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0,
- 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63,177,157,229, 62, 64, 74, 36,191,222,160, 81,191,184,158, 81,191,
-115, 90,127, 63,248, 96,158, 62, 9, 46,185, 62, 35, 44,185, 62,143,180,109,188,235, 2,183, 63,129, 63,228,190, 42, 61,228,190,
- 0, 0, 0, 0, 0, 0, 0, 0, 21,163,108, 65,214,211,111, 65, 97,199,184, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 97,199,184, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97,199,184, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190,
-214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0,142, 79,168, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 70,117,108,108, 32, 83, 97,109,112,108,101, 32, 77,111,116,105,111,110, 32, 66,108,117,114, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 34,254,209, 0, 0, 0, 20, 0, 0, 0, 4, 0, 2, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, 64,104, 88, 10,
+199, 0, 0, 0, 1, 0, 0, 0,176,105, 88, 10,208,102, 88, 10,160,114,165, 9, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,164,253,209, 0,102, 0,
+ 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,176,105, 88, 10,199, 0, 0, 0, 1, 0, 0, 0, 32,107, 88, 10,
+ 64,104, 88, 10,160,126,165, 9, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 30, 33, 12, 66, 85,152,137, 66,116, 27,126, 66, 0, 0, 0, 0, 68, 65, 84, 65, 48, 1, 0, 0,
-232,183, 86, 3, 0, 0, 0, 0,160, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 7, 0, 8,184, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 24, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
-205,204,204, 61, 0, 64,156, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0,255,255, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 83, 78, 0, 0,208, 0, 0, 0, 40,202, 86, 3, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,184,185, 87, 3, 0, 0, 0, 0,
-200,187, 85, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 71, 97,109,101, 32, 76,
-111,103,105, 99, 0, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 72,203, 86, 3, 0, 0, 0, 0,248,208, 86, 3, 0, 0, 0, 0,104,209, 86, 3, 0, 0, 0, 0, 40,218, 86, 3, 0, 0, 0, 0,
-152,218, 86, 3, 0, 0, 0, 0,184,150, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-120,159, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72,203, 86, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,
-184,203, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 32, 0, 0, 0,184,203, 86, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 40,204, 86, 3, 0, 0, 0, 0,
- 72,203, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
- 40,204, 86, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,152,204, 86, 3, 0, 0, 0, 0,184,203, 86, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,254, 4,214, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,152,204, 86, 3, 0, 0, 0, 0,
-196, 0, 0, 0, 1, 0, 0, 0, 8,205, 86, 3, 0, 0, 0, 0, 40,204, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-254, 4, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 8,205, 86, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,
-120,205, 86, 3, 0, 0, 0, 0,152,204, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,187, 2, 1, 0, 0, 0,
- 68, 65, 84, 65, 32, 0, 0, 0,120,205, 86, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,232,205, 86, 3, 0, 0, 0, 0,
- 8,205, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4,187, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
-232,205, 86, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 88,206, 86, 3, 0, 0, 0, 0,120,205, 86, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 88,206, 86, 3, 0, 0, 0, 0,
-196, 0, 0, 0, 1, 0, 0, 0,200,206, 86, 3, 0, 0, 0, 0,232,205, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 20, 4, 20, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,200,206, 86, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,
- 56,207, 86, 3, 0, 0, 0, 0, 88,206, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 32, 0, 0, 0, 56,207, 86, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,168,207, 86, 3, 0, 0, 0, 0,
-200,206, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 20, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
-168,207, 86, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 24,208, 86, 3, 0, 0, 0, 0, 56,207, 86, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,124, 3, 20, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 24,208, 86, 3, 0, 0, 0, 0,
-196, 0, 0, 0, 1, 0, 0, 0,136,208, 86, 3, 0, 0, 0, 0,168,207, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-124, 3,187, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136,208, 86, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,
-248,208, 86, 3, 0, 0, 0, 0, 24,208, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,212, 0, 20, 1, 0, 0, 0, 0,
- 68, 65, 84, 65, 32, 0, 0, 0,248,208, 86, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-136,208, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,212, 0,187, 2, 1, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
-104,209, 86, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,216,209, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-184,203, 86, 3, 0, 0, 0, 0, 40,204, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
-216,209, 86, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 72,210, 86, 3, 0, 0, 0, 0,104,209, 86, 3, 0, 0, 0, 0,
-184,203, 86, 3, 0, 0, 0, 0, 8,205, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
- 72,210, 86, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,184,210, 86, 3, 0, 0, 0, 0,216,209, 86, 3, 0, 0, 0, 0,
- 40,204, 86, 3, 0, 0, 0, 0,120,205, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
-184,210, 86, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 40,211, 86, 3, 0, 0, 0, 0, 72,210, 86, 3, 0, 0, 0, 0,
- 8,205, 86, 3, 0, 0, 0, 0,120,205, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
- 40,211, 86, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,152,211, 86, 3, 0, 0, 0, 0,184,210, 86, 3, 0, 0, 0, 0,
- 8,205, 86, 3, 0, 0, 0, 0,232,205, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
-152,211, 86, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 8,212, 86, 3, 0, 0, 0, 0, 40,211, 86, 3, 0, 0, 0, 0,
-232,205, 86, 3, 0, 0, 0, 0, 88,206, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
- 8,212, 86, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,120,212, 86, 3, 0, 0, 0, 0,152,211, 86, 3, 0, 0, 0, 0,
-152,204, 86, 3, 0, 0, 0, 0,200,206, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
-120,212, 86, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,232,212, 86, 3, 0, 0, 0, 0, 8,212, 86, 3, 0, 0, 0, 0,
- 88,206, 86, 3, 0, 0, 0, 0,200,206, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
-232,212, 86, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 88,213, 86, 3, 0, 0, 0, 0,120,212, 86, 3, 0, 0, 0, 0,
- 72,203, 86, 3, 0, 0, 0, 0,232,205, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
- 88,213, 86, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,200,213, 86, 3, 0, 0, 0, 0,232,212, 86, 3, 0, 0, 0, 0,
- 72,203, 86, 3, 0, 0, 0, 0,200,206, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
-200,213, 86, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 56,214, 86, 3, 0, 0, 0, 0, 88,213, 86, 3, 0, 0, 0, 0,
-120,205, 86, 3, 0, 0, 0, 0, 56,207, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
- 56,214, 86, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,168,214, 86, 3, 0, 0, 0, 0,200,213, 86, 3, 0, 0, 0, 0,
-152,204, 86, 3, 0, 0, 0, 0, 56,207, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
-168,214, 86, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 24,215, 86, 3, 0, 0, 0, 0, 56,214, 86, 3, 0, 0, 0, 0,
- 88,206, 86, 3, 0, 0, 0, 0, 56,207, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
- 24,215, 86, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,136,215, 86, 3, 0, 0, 0, 0,168,214, 86, 3, 0, 0, 0, 0,
-168,207, 86, 3, 0, 0, 0, 0, 24,208, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
-136,215, 86, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,248,215, 86, 3, 0, 0, 0, 0, 24,215, 86, 3, 0, 0, 0, 0,
-120,205, 86, 3, 0, 0, 0, 0, 24,208, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
-248,215, 86, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,104,216, 86, 3, 0, 0, 0, 0,136,215, 86, 3, 0, 0, 0, 0,
- 56,207, 86, 3, 0, 0, 0, 0,168,207, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
-104,216, 86, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,216,216, 86, 3, 0, 0, 0, 0,248,215, 86, 3, 0, 0, 0, 0,
-232,205, 86, 3, 0, 0, 0, 0,136,208, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
-216,216, 86, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 72,217, 86, 3, 0, 0, 0, 0,104,216, 86, 3, 0, 0, 0, 0,
-168,207, 86, 3, 0, 0, 0, 0,136,208, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
- 72,217, 86, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,184,217, 86, 3, 0, 0, 0, 0,216,216, 86, 3, 0, 0, 0, 0,
- 8,205, 86, 3, 0, 0, 0, 0,248,208, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
-184,217, 86, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 40,218, 86, 3, 0, 0, 0, 0, 72,217, 86, 3, 0, 0, 0, 0,
- 24,208, 86, 3, 0, 0, 0, 0,248,208, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,
- 40,218, 86, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,217, 86, 3, 0, 0, 0, 0,
-136,208, 86, 3, 0, 0, 0, 0,248,208, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,
-152,218, 86, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0,104,222, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 8,205, 86, 3, 0, 0, 0, 0,184,203, 86, 3, 0, 0, 0, 0, 40,204, 86, 3, 0, 0, 0, 0,120,205, 86, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 0, 0,188, 2, 0, 0,214, 2, 0, 0, 7, 7,255, 4, 27, 0, 1, 0,
- 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,185, 87, 3, 0, 0, 0, 0, 40,185, 87, 3, 0, 0, 0, 0,
-136,219, 86, 3, 0, 0, 0, 0,248,220, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136,219, 86, 3, 0, 0, 0, 0,
-200, 0, 0, 0, 1, 0, 0, 0,248,220, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,162, 68,
- 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,159, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 0, 0,
- 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,255, 4, 26, 0,255, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 0, 0,188, 2, 0, 0,213, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,255, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248,220, 86, 3, 0, 0, 0, 0,
-200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,219, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69,
- 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0,
- 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0,
- 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64,
- 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,129, 7, 2, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214, 2, 0, 0,214, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,104,222, 86, 3, 0, 0, 0, 0,
-199, 0, 0, 0, 1, 0, 0, 0, 8, 6, 87, 3, 0, 0, 0, 0,152,218, 86, 3, 0, 0, 0, 0,200,206, 86, 3, 0, 0, 0, 0,
- 88,206, 86, 3, 0, 0, 0, 0, 56,207, 86, 3, 0, 0, 0, 0,152,204, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 21, 4, 0, 0,254, 4, 0, 0, 0, 0, 0, 0, 19, 1, 0, 0, 4, 4,234, 0, 20, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,184,245, 86, 3, 0, 0, 0, 0,136, 4, 87, 3, 0, 0, 0, 0, 88,223, 86, 3, 0, 0, 0, 0,
-200,224, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 88,223, 86, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,
-200,224, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67, 0, 0, 0, 0, 0, 0,208, 65,
- 0, 0, 0, 55, 0, 0,106, 67, 0, 0, 0, 0, 0, 0,248, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0,
- 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3,
- 4, 0, 12, 4, 10, 0,234, 0, 31, 0,234, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 21, 4, 0, 0,254, 4, 0, 0,245, 0, 0, 0, 19, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-234, 0, 31, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200,224, 86, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 88,223, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,105, 67, 0, 64, 80,196, 0, 0, 0, 0,
- 0, 0, 0, 0,254,255, 88, 67,254,255,116,195, 0, 0, 0, 0,217, 0, 0, 0,234, 0, 0, 0, 0, 0, 0, 0,244, 0, 0, 0,
- 0, 0, 0, 0, 78, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,216, 0, 0, 0, 0, 0, 0, 0,244, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0,
- 18, 0, 0, 4, 6, 0,234, 0,245, 0,217, 0,245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 21, 4, 0, 0,254, 4, 0, 0, 0, 0, 0, 0,244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-234, 0,245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,253,209, 0,130, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,184,245, 86, 3, 0, 0, 0, 0,165, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 64, 1, 0, 0, 32,107, 88, 10,199, 0, 0, 0, 1, 0, 0, 0,144,108, 88, 10,176,105, 88, 10,144,118,165, 9, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,242,252,209, 0, 0, 0, 0, 0, 0, 0, 4, 0, 2, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,
- 8, 6, 87, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0, 8, 79, 87, 3, 0, 0, 0, 0,104,222, 86, 3, 0, 0, 0, 0,
- 72,203, 86, 3, 0, 0, 0, 0,232,205, 86, 3, 0, 0, 0, 0, 88,206, 86, 3, 0, 0, 0, 0,200,206, 86, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 4, 0, 0, 0, 0, 0, 0, 19, 1, 0, 0, 17, 17, 20, 4, 20, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 12, 87, 3, 0, 0, 0, 0,232, 77, 87, 3, 0, 0, 0, 0,
-248, 6, 87, 3, 0, 0, 0, 0,120, 11, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248, 6, 87, 3, 0, 0, 0, 0,
-200, 0, 0, 0, 1, 0, 0, 0,104, 8, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,150, 67,
- 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,130, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 4, 0, 0,
- 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 63, 68, 0, 0,200, 65, 0,192, 63, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 4, 26, 0, 20, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104, 8, 87, 3, 0, 0, 0, 0,
-200, 0, 0, 0, 1, 0, 0, 0,120, 11, 87, 3, 0, 0, 0, 0,248, 6, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 67,
- 0, 0,122,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, 0, 0,122,195, 0, 0, 0, 0,203, 0, 0, 0,220, 0, 0, 0,
- 0, 0, 0, 0,249, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0,
- 0, 0, 0, 0,249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64,
- 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,220, 0,250, 0,203, 0,250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,219, 0, 0, 0, 26, 0, 0, 0, 19, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,220, 0,250, 0, 0, 0, 4, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,120, 11, 87, 3, 0, 0, 0, 0,
-200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 8, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 68,
- 0, 0, 0, 0, 0, 0,112, 67, 4, 0, 39,195, 0,224,180, 68, 1, 0,224,194, 0, 0,176, 67, 39, 3, 0, 0, 56, 3, 0, 0,
- 18, 0, 0, 0,249, 0, 0, 0, 0, 0, 0, 0, 38, 3, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 38, 3, 0, 0,
- 18, 0, 0, 0,249, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70, 0, 0, 0, 63, 72,225,154, 63,
- 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 56, 3,250, 0, 39, 3,232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,220, 0, 0, 0, 19, 4, 0, 0, 26, 0, 0, 0, 19, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 56, 3,250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 72, 0, 0, 0,232, 12, 87, 3, 0, 0, 0, 0,
-178, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,255, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 8, 79, 87, 3, 0, 0, 0, 0,
-199, 0, 0, 0, 1, 0, 0, 0,184,110, 87, 3, 0, 0, 0, 0, 8, 6, 87, 3, 0, 0, 0, 0,168,207, 86, 3, 0, 0, 0, 0,
- 24,208, 86, 3, 0, 0, 0, 0,120,205, 86, 3, 0, 0, 0, 0, 56,207, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-125, 3, 0, 0,254, 4, 0, 0, 21, 1, 0, 0,186, 2, 0, 0, 9, 9,130, 1,166, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,216, 82, 87, 3, 0, 0, 0, 0, 56,109, 87, 3, 0, 0, 0, 0,248, 79, 87, 3, 0, 0, 0, 0,
-104, 81, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248, 79, 87, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,
-104, 81, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209, 67, 0, 0, 0, 0, 0, 0,208, 65,
- 0, 0, 0, 0, 0, 0,193, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,
- 0,128,181, 67, 0, 0,200, 65, 0,128,181, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3,
- 4, 0, 12, 4, 10, 0,130, 1, 26, 0,130, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-125, 3, 0, 0,254, 4, 0, 0, 21, 1, 0, 0, 46, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-130, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,144,108, 88, 10,199, 0, 0, 0,
+ 1, 0, 0, 0, 0,110, 88, 10, 32,107, 88, 10,176,122,165, 9, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,
+115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,
+115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111, 99,101,115,115,
+105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218,252,209, 0, 0, 0, 0, 0, 0, 0,
+ 4, 0, 2, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104, 81, 87, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,248, 79, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,181, 67, 0, 0, 0, 0, 0,128,218, 67,
- 0, 0, 0, 0,131,248, 1, 68, 0, 0, 0, 0,126, 86, 5, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 1, 0, 0, 0, 0, 0, 0,139, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0,
- 0, 0, 0, 4, 10, 0,130, 1,140, 1,130, 1,140, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-125, 3, 0, 0,254, 4, 0, 0, 47, 1, 0, 0,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-130, 1,140, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, 0,110, 88, 10,199, 0, 0, 0, 1, 0, 0, 0,112,111, 88, 10,144,108, 88, 10,
+192,151,165, 9, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,144, 2, 0, 0,216, 82, 87, 3, 0, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194,252,209, 0, 0, 0, 20, 0, 0, 0, 4, 0, 2, 0, 0, 0, 0, 0, 40, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,
+112,111, 88, 10,199, 0, 0, 0, 1, 0, 0, 0,224,112, 88, 10, 0,110, 88, 10, 40,158,165, 9, 0, 0, 0, 0, 82, 69, 78, 68,
+ 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
+ 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 97,107,101,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,170,252,
+209, 0, 0, 0, 0, 0, 0, 0, 4, 0, 3, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,224,112, 88, 10,199, 0, 0, 0, 1, 0, 0, 0,
+ 80,114, 88, 10,112,111, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95, 99,111,110,116,101,
+120,116, 95,116,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95, 99,111,110,116,101,
+120,116, 95,116,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41,255, 7, 1,179, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 64, 1, 0, 0, 80,114, 88, 10,199, 0, 0, 0, 1, 0, 0, 0,192,115, 88, 10,224,112, 88, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,109, 97,112,112,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,109, 97,112,112,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 77, 97,112,112,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,102,254, 7, 1,171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,192,115, 88, 10,
+199, 0, 0, 0, 1, 0, 0, 0, 48,117, 88, 10, 80,114, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95,
+ 80, 84, 95,105,110,102,108,117,101,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95,
+ 80, 84, 95,105,110,102,108,117,101,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73,110,102,108,117,101,110, 99,
+101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42,253, 7, 1, 36, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, 48,117, 88, 10,199, 0, 0, 0, 1, 0, 0, 0,160,118, 88, 10,
+192,115, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95, 99,117,115,116,111,109, 95,112,114,
+111,112,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95, 99,117,115,116,111,109, 95,112,114,
+111,112,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,117,115,116,111,109, 32, 80,114,111,112,101,114,116,105,101,115, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,184,110, 87, 3, 0, 0, 0, 0,
-199, 0, 0, 0, 1, 0, 0, 0,184,150, 87, 3, 0, 0, 0, 0, 8, 79, 87, 3, 0, 0, 0, 0,136,208, 86, 3, 0, 0, 0, 0,
-248,208, 86, 3, 0, 0, 0, 0, 24,208, 86, 3, 0, 0, 0, 0,168,207, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-213, 0, 0, 0,123, 3, 0, 0, 21, 1, 0, 0,186, 2, 0, 0, 1, 1,167, 2,166, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,232,133, 87, 3, 0, 0, 0, 0,152,149, 87, 3, 0, 0, 0, 0,168,111, 87, 3, 0, 0, 0, 0,
-200,128, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168,111, 87, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,
- 24,113, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,102, 68, 0, 0, 0, 0, 0, 0,208, 65,
- 0, 0, 0, 56, 0,192, 41, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,166, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,
- 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3,
- 4, 0, 12, 4, 10, 0,167, 2, 26, 0,167, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-213, 0, 0, 0,123, 3, 0, 0, 21, 1, 0, 0, 46, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-167, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18,253, 7, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
+ 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 64, 1, 0, 0,160,118, 88, 10,199, 0, 0, 0, 1, 0, 0, 0, 16,120, 88, 10, 48,117, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,112,114,101,118,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 24,113, 87, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,
-136,114, 87, 3, 0, 0, 0, 0,168,111, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0,
- 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0,
- 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-213, 0, 0, 0,213, 0, 0, 0, 47, 1, 0, 0,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0,140, 1, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,112,114,101,118,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 80,114,101,118,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136,114, 87, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,
-248,115, 87, 3, 0, 0, 0, 0, 24,113, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0,
- 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0,
- 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0,
- 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-213, 0, 0, 0,123, 3, 0, 0, 47, 1, 0, 0, 47, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 87,254, 7, 1,186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248,115, 87, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,
-200,128, 87, 3, 0, 0, 0, 0,136,114, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,192,108,196, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 35, 67, 0,128, 23,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,111, 2, 0, 0,
- 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,111, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0,
- 18, 0, 0, 0, 6, 0,180, 0,112, 2,163, 0, 94, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-123, 3, 0, 0,123, 3, 0, 0, 47, 1, 0, 0,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, 16,120, 88, 10,199, 0, 0, 0,
+ 1, 0, 0, 0,128,121, 88, 10,160,118, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,105,
+109, 97,103,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,105,
+109, 97,103,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73,109, 97,103,101, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,253, 7, 1, 36, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200,128, 87, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,248,115, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,128,121, 88, 10,199, 0, 0, 0, 1, 0, 0, 0,240,122, 88, 10, 16,120, 88, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,105,109, 97,103,101, 95,115, 97,109,112,108,105,110,
+103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,105,109, 97,103,101, 95,115, 97,109,112,108,105,110,
+103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 73,109, 97,103,101, 32, 83, 97,109,112,108,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,252, 7, 1,212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-213, 0, 0, 0,123, 3, 0, 0, 47, 1, 0, 0,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-167, 2,140, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,
+240,122, 88, 10,199, 0, 0, 0, 1, 0, 0, 0, 96,124, 88, 10,128,121, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84,
+ 85, 82, 69, 95, 80, 84, 95,105,109, 97,103,101, 95,109, 97,112,112,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84,
+ 85, 82, 69, 95, 80, 84, 95,105,109, 97,103,101, 95,109, 97,112,112,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73,109, 97,103,
+101, 32, 77, 97,112,112,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251,
+ 7, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 56,130, 87, 3, 0, 0, 0, 0, 68, 65, 84, 65,104, 3, 0, 0, 56,130, 87, 3, 0, 0, 0, 0,159, 0, 0, 0, 1, 0, 0, 0,
-190, 35, 30, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167,147,135, 61, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,111, 18,131,187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
-190, 35, 30, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167,147,135, 61, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,111, 18,131,187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
-149, 53,207, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126,177,113, 65, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,255,255,121,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
-190, 35, 30, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167,147,135, 61, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,111, 18,131,187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, 96,124, 88, 10,199, 0, 0, 0, 1, 0, 0, 0,
+208,125, 88, 10,240,122, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95, 99,111,108,111,114,
+115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95, 99,111,108,111,114,
+115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,108,111,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,254, 7, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
+ 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,149, 53,207, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 63,156, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 64, 1, 0, 0,208,125, 88, 10,199, 0, 0, 0, 1, 0, 0, 0, 64,127, 88, 10, 96,124, 88, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95, 99,108,111,117,100,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95, 99,108,111,117,100,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 67,108,111,117,100,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,161,253, 7, 1,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, 64,127, 88, 10,
+199, 0, 0, 0, 1, 0, 0, 0,176,128, 88, 10,208,125, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95,
+ 80, 84, 95,119,111,111,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95,
+ 80, 84, 95,119,111,111,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,111,111,100, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,139,253, 7, 1,180, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, 1, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 1, 0, 0,232,133, 87, 3, 0, 0, 0, 0,160, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 8,184, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0,
- 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,205,204,204, 61, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,184,150, 87, 3, 0, 0, 0, 0,
-199, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,110, 87, 3, 0, 0, 0, 0,232,205, 86, 3, 0, 0, 0, 0,
- 8,205, 86, 3, 0, 0, 0, 0,248,208, 86, 3, 0, 0, 0, 0,136,208, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,211, 0, 0, 0, 21, 1, 0, 0,186, 2, 0, 0, 3, 3,212, 0,166, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,136,154, 87, 3, 0, 0, 0, 0, 8,184, 87, 3, 0, 0, 0, 0,168,151, 87, 3, 0, 0, 0, 0,
- 24,153, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168,151, 87, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,
- 24,153, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,163, 67, 0, 0, 0, 0, 0, 0,208, 65,
- 0, 0, 0, 0, 0, 0, 84, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,211, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,
- 0, 0, 83, 67, 0, 0,200, 65, 0, 0, 83, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3,
- 4, 0, 12, 4, 10, 0,212, 0, 26, 0,212, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,211, 0, 0, 0, 21, 1, 0, 0, 46, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-212, 0, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 24,153, 87, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,168,151, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,131, 67, 0, 0,228,194, 0, 0, 0, 0,
- 0, 0, 80, 66, 0, 0,119, 67, 0, 0,189,195, 0, 0, 0, 0,195, 0, 0, 0,212, 0, 0, 0, 18, 0, 0, 0,139, 1, 0, 0,
- 0, 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,194, 0, 0, 0, 18, 0, 0, 0,139, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 2, 0, 0, 2, 0, 3, 3,
- 0, 0, 0, 4, 6, 0,212, 0,140, 1,195, 0,122, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,211, 0, 0, 0, 47, 1, 0, 0,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-212, 0,140, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,136,154, 87, 3, 0, 0, 0, 0,169, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,176,128, 88, 10,199, 0, 0, 0, 1, 0, 0, 0, 32,130, 88, 10,
+ 64,127, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,112,108,117,103,105,110, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,112,108,117,103,105,110, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,108,117,103,105,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27,254, 7, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 64, 1, 0, 0, 32,130, 88, 10,199, 0, 0, 0, 1, 0, 0, 0,144,131, 88, 10,176,128, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,118,111,114,111,110,111,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,155, 87, 3, 0, 0, 0, 0,
+ 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,118,111,114,111,110,111,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 68, 65, 84, 65, 16, 0, 0, 0,248,155, 87, 3, 0, 0, 0, 0,223, 0, 0, 0, 1, 0, 0, 0, 13, 0, 0, 0, 13, 0, 0, 0,
- 88,156, 87, 3, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, 88,156, 87, 3, 0, 0, 0, 0,222, 0, 0, 0, 13, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,120,159, 89, 3, 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0,120,159, 89, 3, 0, 0, 0, 0,
- 20, 0, 0, 0, 1, 0, 1, 0,120,159, 89, 3, 0, 0, 0, 0, 21, 0, 1, 0, 1, 0, 1, 0,120,159, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 1, 0,104,181, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 40,189, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 1, 0, 72,129, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,232,200, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 1, 0,200,110, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,200,195, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 1, 0,232,176, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 8,184, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 1, 0, 24,176, 89, 3, 0, 0, 0, 0, 83, 78, 0, 0,208, 0, 0, 0,184,185, 87, 3, 0, 0, 0, 0,
-195, 0, 0, 0, 1, 0, 0, 0,104,164, 88, 3, 0, 0, 0, 0, 40,202, 86, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 83, 99,114,105,112,116,105,110,103, 0,103, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,186, 87, 3, 0, 0, 0, 0,248,192, 87, 3, 0, 0, 0, 0,
-104,193, 87, 3, 0, 0, 0, 0, 8,203, 87, 3, 0, 0, 0, 0,120,203, 87, 3, 0, 0, 0, 0,120,129, 88, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,159, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
-216,186, 87, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 72,187, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72,187, 87, 3, 0, 0, 0, 0,
-196, 0, 0, 0, 1, 0, 0, 0,184,187, 87, 3, 0, 0, 0, 0,216,186, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,214, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184,187, 87, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,
- 40,188, 87, 3, 0, 0, 0, 0, 72,187, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4,214, 2, 0, 0, 0, 0,
- 68, 65, 84, 65, 32, 0, 0, 0, 40,188, 87, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,152,188, 87, 3, 0, 0, 0, 0,
-184,187, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
-152,188, 87, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 8,189, 87, 3, 0, 0, 0, 0, 40,188, 87, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,187, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 8,189, 87, 3, 0, 0, 0, 0,
-196, 0, 0, 0, 1, 0, 0, 0,120,189, 87, 3, 0, 0, 0, 0,152,188, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-254, 4,187, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,120,189, 87, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,
-232,189, 87, 3, 0, 0, 0, 0, 8,189, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,244, 3,187, 2, 0, 0, 0, 0,
- 68, 65, 84, 65, 32, 0, 0, 0,232,189, 87, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 88,190, 87, 3, 0, 0, 0, 0,
-120,189, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,244, 3, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
- 88,190, 87, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,200,190, 87, 3, 0, 0, 0, 0,232,189, 87, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,200,190, 87, 3, 0, 0, 0, 0,
-196, 0, 0, 0, 1, 0, 0, 0, 56,191, 87, 3, 0, 0, 0, 0, 88,190, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-244, 3, 28, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56,191, 87, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,
-168,191, 87, 3, 0, 0, 0, 0,200,190, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 1, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 32, 0, 0, 0,168,191, 87, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 24,192, 87, 3, 0, 0, 0, 0,
- 56,191, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 1, 28, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
- 24,192, 87, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,136,192, 87, 3, 0, 0, 0, 0,168,191, 87, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,244, 3, 12, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136,192, 87, 3, 0, 0, 0, 0,
-196, 0, 0, 0, 1, 0, 0, 0,248,192, 87, 3, 0, 0, 0, 0, 24,192, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-254, 4, 12, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248,192, 87, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,136,192, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 1,187, 2, 1, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,104,193, 87, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,216,193, 87, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 72,187, 87, 3, 0, 0, 0, 0,184,187, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,216,193, 87, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 72,194, 87, 3, 0, 0, 0, 0,
-104,193, 87, 3, 0, 0, 0, 0, 72,187, 87, 3, 0, 0, 0, 0,152,188, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0, 72,194, 87, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,184,194, 87, 3, 0, 0, 0, 0,
-216,193, 87, 3, 0, 0, 0, 0,184,187, 87, 3, 0, 0, 0, 0, 8,189, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,184,194, 87, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 40,195, 87, 3, 0, 0, 0, 0,
- 72,194, 87, 3, 0, 0, 0, 0,152,188, 87, 3, 0, 0, 0, 0, 8,189, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0, 40,195, 87, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,152,195, 87, 3, 0, 0, 0, 0,
-184,194, 87, 3, 0, 0, 0, 0, 8,189, 87, 3, 0, 0, 0, 0,120,189, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,152,195, 87, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 8,196, 87, 3, 0, 0, 0, 0,
- 40,195, 87, 3, 0, 0, 0, 0, 40,188, 87, 3, 0, 0, 0, 0,232,189, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0, 8,196, 87, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,120,196, 87, 3, 0, 0, 0, 0,
-152,195, 87, 3, 0, 0, 0, 0,216,186, 87, 3, 0, 0, 0, 0, 88,190, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,120,196, 87, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,232,196, 87, 3, 0, 0, 0, 0,
- 8,196, 87, 3, 0, 0, 0, 0,152,188, 87, 3, 0, 0, 0, 0, 88,190, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,232,196, 87, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 88,197, 87, 3, 0, 0, 0, 0,
-120,196, 87, 3, 0, 0, 0, 0,120,189, 87, 3, 0, 0, 0, 0,200,190, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0, 88,197, 87, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,200,197, 87, 3, 0, 0, 0, 0,
-232,196, 87, 3, 0, 0, 0, 0,232,189, 87, 3, 0, 0, 0, 0,200,190, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,200,197, 87, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 56,198, 87, 3, 0, 0, 0, 0,
- 88,197, 87, 3, 0, 0, 0, 0,216,186, 87, 3, 0, 0, 0, 0, 56,191, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0, 56,198, 87, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,168,198, 87, 3, 0, 0, 0, 0,
-200,197, 87, 3, 0, 0, 0, 0,232,189, 87, 3, 0, 0, 0, 0, 56,191, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,168,198, 87, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 24,199, 87, 3, 0, 0, 0, 0,
- 56,198, 87, 3, 0, 0, 0, 0, 88,190, 87, 3, 0, 0, 0, 0,168,191, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0, 24,199, 87, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,136,199, 87, 3, 0, 0, 0, 0,
-168,198, 87, 3, 0, 0, 0, 0,200,190, 87, 3, 0, 0, 0, 0,168,191, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,136,199, 87, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,248,199, 87, 3, 0, 0, 0, 0,
- 24,199, 87, 3, 0, 0, 0, 0, 56,191, 87, 3, 0, 0, 0, 0,168,191, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,248,199, 87, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,104,200, 87, 3, 0, 0, 0, 0,
-136,199, 87, 3, 0, 0, 0, 0,232,189, 87, 3, 0, 0, 0, 0, 24,192, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,104,200, 87, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,216,200, 87, 3, 0, 0, 0, 0,
-248,199, 87, 3, 0, 0, 0, 0,120,189, 87, 3, 0, 0, 0, 0, 24,192, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,216,200, 87, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 72,201, 87, 3, 0, 0, 0, 0,
-104,200, 87, 3, 0, 0, 0, 0, 8,189, 87, 3, 0, 0, 0, 0,136,192, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0, 72,201, 87, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,184,201, 87, 3, 0, 0, 0, 0,
-216,200, 87, 3, 0, 0, 0, 0, 40,188, 87, 3, 0, 0, 0, 0,136,192, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,184,201, 87, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 40,202, 87, 3, 0, 0, 0, 0,
- 72,201, 87, 3, 0, 0, 0, 0, 24,192, 87, 3, 0, 0, 0, 0,136,192, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0, 40,202, 87, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,152,202, 87, 3, 0, 0, 0, 0,
-184,201, 87, 3, 0, 0, 0, 0,152,188, 87, 3, 0, 0, 0, 0,248,192, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,152,202, 87, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 8,203, 87, 3, 0, 0, 0, 0,
- 40,202, 87, 3, 0, 0, 0, 0,120,189, 87, 3, 0, 0, 0, 0,248,192, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0, 8,203, 87, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-152,202, 87, 3, 0, 0, 0, 0,168,191, 87, 3, 0, 0, 0, 0,248,192, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,160, 0, 0, 0,120,203, 87, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0, 72,207, 87, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,152,188, 87, 3, 0, 0, 0, 0, 72,187, 87, 3, 0, 0, 0, 0,184,187, 87, 3, 0, 0, 0, 0,
- 8,189, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 0, 0,188, 2, 0, 0,214, 2, 0, 0,
- 7, 7,255, 4, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,163, 88, 3, 0, 0, 0, 0,
-216,163, 88, 3, 0, 0, 0, 0,104,204, 87, 3, 0, 0, 0, 0,216,205, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-104,204, 87, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,216,205, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,224,162, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,159, 68, 0, 0, 0, 0, 0, 0,208, 65,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,254, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,255, 4, 26, 0,255, 4, 26, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 0, 0,188, 2, 0, 0,213, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-216,205, 87, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,204, 87, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,
-112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
- 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,129, 7, 2, 0,112, 7, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214, 2, 0, 0,214, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 86,111,114,111,110,111,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,123,253, 7, 1,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,
- 72,207, 87, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0,232,246, 87, 3, 0, 0, 0, 0,120,203, 87, 3, 0, 0, 0, 0,
-232,189, 87, 3, 0, 0, 0, 0, 24,192, 87, 3, 0, 0, 0, 0,136,192, 87, 3, 0, 0, 0, 0, 40,188, 87, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,245, 3, 0, 0,254, 4, 0, 0, 0, 0, 0, 0, 11, 2, 0, 0, 4, 4, 10, 1, 12, 2, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,230, 87, 3, 0, 0, 0, 0,104,245, 87, 3, 0, 0, 0, 0,
- 56,208, 87, 3, 0, 0, 0, 0,168,209, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56,208, 87, 3, 0, 0, 0, 0,
-200, 0, 0, 0, 1, 0, 0, 0,168,209, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205, 67,
- 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,133, 67, 0, 0, 0, 0, 0, 0,248, 65, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 1, 0, 0,
- 0, 0, 0, 0, 30, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 10, 1, 31, 0, 10, 1, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,245, 3, 0, 0,254, 4, 0, 0,237, 1, 0, 0, 11, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 10, 1, 31, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168,209, 87, 3, 0, 0, 0, 0,
-200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,208, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,132, 67,
- 0, 64, 80,196, 0, 0, 0, 0, 0, 0, 0, 0,255,255,120, 67,255,127,246,195, 0, 0, 0, 0,249, 0, 0, 0, 10, 1, 0, 0,
- 0, 0, 0, 0,236, 1, 0, 0, 0, 0, 0, 0,126, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,248, 0, 0, 0,
- 0, 0, 0, 0,236, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64,
- 10, 1, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0, 10, 1,237, 1,249, 0,237, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,245, 3, 0, 0,254, 4, 0, 0, 0, 0, 0, 0,236, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 10, 1,237, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,152,230, 87, 3, 0, 0, 0, 0,
-165, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,144,131, 88, 10,199, 0, 0, 0,
+ 1, 0, 0, 0, 0,133, 88, 10, 32,130, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,112,
+111,105,110,116,100,101,110,115,105,116,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,112,
+111,105,110,116,100,101,110,115,105,116,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,111,105,110,116, 32, 68,101,110,115,105,116,
+121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,253, 7, 1,179, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, 0,133, 88, 10,199, 0, 0, 0, 1, 0, 0, 0,112,134, 88, 10,144,131, 88, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,112,111,105,110,116,100,101,110,115,105,116,121, 95,
+116,117,114, 98,117,108,101,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,112,111,105,110,116,100,101,110,115,105,116,121, 95,
+116,117,114, 98,117,108,101,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 84,117,114, 98,117,108,101,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14,253, 7, 1,102, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,160, 0, 0, 0,232,246, 87, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0, 8, 30, 88, 3, 0, 0, 0, 0,
- 72,207, 87, 3, 0, 0, 0, 0, 56,191, 87, 3, 0, 0, 0, 0,168,191, 87, 3, 0, 0, 0, 0,200,190, 87, 3, 0, 0, 0, 0,
-232,189, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,249, 1, 0, 0,243, 3, 0, 0, 0, 0, 0, 0, 27, 1, 0, 0,
- 18, 18,251, 1, 28, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,250, 87, 3, 0, 0, 0, 0,
-232, 28, 88, 3, 0, 0, 0, 0,216,247, 87, 3, 0, 0, 0, 0, 72,249, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-216,247, 87, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 72,249, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 76, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,253, 67, 0, 0, 0, 0, 0, 0,208, 65,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,250, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,251, 1, 26, 0,251, 1, 26, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,249, 1, 0, 0,243, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,
+112,134, 88, 10,199, 0, 0, 0, 1, 0, 0, 0,224,135, 88, 10, 0,133, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84,
+ 85, 82, 69, 95, 80, 84, 95,109,117,115,103,114, 97,118,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84,
+ 85, 82, 69, 95, 80, 84, 95,109,117,115,103,114, 97,118,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77,117,115,103,
+114, 97,118,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,139,253,
+ 7, 1,180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
- 72,249, 87, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,247, 87, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,253, 67, 0, 0, 0, 0, 0, 0, 48, 65, 0, 0, 0, 0, 0, 0,245, 67, 0, 0, 0, 0, 0, 0,129, 67,
-234, 1, 0, 0,251, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,233, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 2, 2, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,251, 1, 2, 1,234, 1, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,249, 1, 0, 0,243, 3, 0, 0, 26, 0, 0, 0, 27, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,224,135, 88, 10,199, 0, 0, 0, 1, 0, 0, 0,
+ 80,137, 88, 10,112,134, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,109, 97,114, 98,108,
+101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,109, 97,114, 98,108,
+101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 97,114, 98,108,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,253, 7, 1,183, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,144, 1, 0, 0,
-184,250, 87, 3, 0, 0, 0, 0,181, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 32, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 64, 1, 0, 0, 80,137, 88, 10,199, 0, 0, 0, 1, 0, 0, 0,192,138, 88, 10,224,135, 88, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,109, 97,103,105, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,109, 97,103,105, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 77, 97,103,105, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 27,254, 7, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,192,138, 88, 10,
+199, 0, 0, 0, 1, 0, 0, 0, 48,140, 88, 10, 80,137, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95,
+ 80, 84, 95,100,105,115,116,111,114,116,101,100,110,111,105,115,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95,
+ 80, 84, 95,100,105,115,116,111,114,116,101,100,110,111,105,115,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,115,116,111,114,116,101,
+100, 32, 78,111,105,115,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,211,253, 7, 1,108, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, 48,140, 88, 10,199, 0, 0, 0, 1, 0, 0, 0,160,141, 88, 10,
+192,138, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95, 98,108,101,110,100, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,160, 0, 0, 0, 8, 30, 88, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0,104, 64, 88, 3, 0, 0, 0, 0,
-232,246, 87, 3, 0, 0, 0, 0,168,191, 87, 3, 0, 0, 0, 0,248,192, 87, 3, 0, 0, 0, 0,120,189, 87, 3, 0, 0, 0, 0,
-200,190, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,249, 1, 0, 0,243, 3, 0, 0, 29, 1, 0, 0,186, 2, 0, 0,
- 1, 1,251, 1,158, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 41, 88, 3, 0, 0, 0, 0,
- 72, 63, 88, 3, 0, 0, 0, 0,248, 30, 88, 3, 0, 0, 0, 0,184, 36, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-248, 30, 88, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,104, 32, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,128,102, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,253, 67, 0, 0, 0, 0, 0, 0,208, 65,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95, 98,108,101,110,100, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,250, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,251, 1, 26, 0,251, 1, 26, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,249, 1, 0, 0,243, 3, 0, 0, 29, 1, 0, 0, 54, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,108,101,110,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,254, 7, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-104, 32, 88, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,216, 33, 88, 3, 0, 0, 0, 0,248, 30, 88, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,
-143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
- 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,249, 1, 0, 0,249, 1, 0, 0, 55, 1, 0, 0,186, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,132, 1, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 64, 1, 0, 0,160,141, 88, 10,199, 0, 0, 0, 1, 0, 0, 0,216,242, 87, 9, 48,140, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,115,116,117, 99, 99,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,115,116,117, 99, 99,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-216, 33, 88, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 72, 35, 88, 3, 0, 0, 0, 0,104, 32, 88, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,
-143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
- 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,249, 1, 0, 0,243, 3, 0, 0, 55, 1, 0, 0, 55, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0,
+ 83,116,117, 99, 99,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,183,253, 7, 1,136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
- 72, 35, 88, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,184, 36, 88, 3, 0, 0, 0, 0,216, 33, 88, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0,
-163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
- 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,122, 2,163, 0,104, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,243, 3, 0, 0,243, 3, 0, 0, 55, 1, 0, 0,186, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,216,242, 87, 9,199, 0, 0, 0,
+ 1, 0, 0, 0,128, 20, 85, 10,160,141, 88, 10,112,180,163, 9, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,109,111,100,105,
+102,105,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,109,111,100,105,
+102,105,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77,111,100,105,102,105,101,114,115, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-184, 36, 88, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 35, 88, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,255,209, 0, 36, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,128, 20, 85, 10,199, 0, 0, 0, 1, 0, 0, 0, 32,118, 88, 9,216,242, 87, 9,
+ 80,127,163, 9, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,109,101,115,104, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,109,101,115,104, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,249, 1, 0, 0,243, 3, 0, 0, 55, 1, 0, 0,186, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251, 1,132, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 38, 88, 3, 0, 0, 0, 0, 68, 65, 84, 65,104, 3, 0, 0,
- 40, 38, 88, 3, 0, 0, 0, 0,159, 0, 0, 0, 1, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 42,240,182, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191,
- 0, 0, 0, 0, 0, 0, 0, 0,225,215,163,188, 0, 0, 0, 0, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0,
- 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,176, 84, 89,188, 0, 0, 0, 0,
- 53,177,205,190,142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0,
-164, 96, 68, 65,111,121,173,192,248,209,213, 64, 0, 0,128, 63,178,157,229, 62,242,252, 18,191,222,160, 81,191,184,158, 81,191,
-117, 90,127, 63, 8,179,141, 62, 9, 46,185, 62, 35, 44,185, 62,145,180,109,188,225,188,163, 63,129, 63,228,190, 42, 61,228,190,
- 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65,217,236,191, 62, 54,117, 85, 63, 0,247, 70,188, 0,192, 32,182,
- 15,232,143,190,210,186, 10, 62, 44, 83, 32, 63, 0,192, 24, 54,215,104, 25,196,133,132,135, 67, 37, 9,167,195,136,252, 71,194,
- 3, 54, 25, 68,158, 87,135,195,205,209,166, 67,151,254, 71, 66, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0,
- 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63,178,157,229, 62,242,252, 18,191,222,160, 81,191,184,158, 81,191,
-117, 90,127, 63, 8,179,141, 62, 9, 46,185, 62, 35, 44,185, 62,145,180,109,188,225,188,163, 63,129, 63,228,190, 42, 61,228,190,
- 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,255,209, 0, 36, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190,
-214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0,138, 93,108, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,
+ 32,118, 88, 9,199, 0, 0, 0, 1, 0, 0, 0,216,168, 85, 10,128, 20, 85, 10, 64,131,163, 9, 0, 0, 0, 0, 68, 65, 84, 65,
+ 95, 80, 84, 95, 99,117,115,116,111,109, 95,112,114,111,112,115, 95,109,101,115,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 95, 80, 84, 95, 99,117,115,116,111,109, 95,112,114,111,112,115, 95,109,101,115,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,117,115,116,
+111,109, 32, 80,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,255,
+209, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,216,168, 85, 10,199, 0, 0, 0, 1, 0, 0, 0,
+ 56,155, 87, 9, 32,118, 88, 9, 48,135,163, 9, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,110,111,114,109, 97,108,115, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,110,111,114,109, 97,108,115, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78,111,114,109, 97,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78,255,209, 0, 58, 0, 0, 0, 0, 0, 0, 0, 4, 0,
+ 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 1, 0, 0,
-216, 41, 88, 3, 0, 0, 0, 0,160, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 7, 0, 8,184, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 64, 1, 0, 0, 56,155, 87, 9,199, 0, 0, 0, 1, 0, 0, 0,232, 33, 81, 10,216,168, 85, 10, 32,139,163, 9,
+ 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,115,101,116,116,105,110,103,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,115,101,116,116,105,110,103,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 83,101,116,116,105,110,103,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 18,255,209, 0, 36, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,232, 33, 81, 10,
+199, 0, 0, 0, 1, 0, 0, 0,152,148, 84, 10, 56,155, 87, 9, 64,143,163, 9, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,
+118,101,114,116,101,120, 95,103,114,111,117,112,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,
+118,101,114,116,101,120, 95,103,114,111,117,112,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86,101,114,116,101,120, 32, 71,
+114,111,117,112,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,174,254,209, 0, 76, 0,
+ 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,160, 0, 0, 0,104, 64, 88, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0,136,103, 88, 3, 0, 0, 0, 0,
- 8, 30, 88, 3, 0, 0, 0, 0,216,186, 87, 3, 0, 0, 0, 0, 88,190, 87, 3, 0, 0, 0, 0,168,191, 87, 3, 0, 0, 0, 0,
- 56,191, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 1, 0, 0, 0, 0, 0, 0, 27, 1, 0, 0,
- 18, 18,248, 1, 28, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 68, 88, 3, 0, 0, 0, 0,
-104,102, 88, 3, 0, 0, 0, 0, 88, 65, 88, 3, 0, 0, 0, 0,200, 66, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
- 88, 65, 88, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,200, 66, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,128,231, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,252, 67, 0, 0, 0, 0, 0, 0,208, 65,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,247, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,248, 1, 26, 0,248, 1, 26, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,152,148, 84, 10,199, 0, 0, 0, 1, 0, 0, 0,232, 43, 84, 10,
+232, 33, 81, 10, 48,147,163, 9, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,115,104, 97,112,101, 95,107,101,121,115, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,115,104, 97,112,101, 95,107,101,121,115, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-200, 66, 88, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 65, 88, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,128,251, 67, 0, 0, 0, 0, 0, 0, 65, 67, 0, 0, 0, 0, 0,128,243, 67, 0, 0, 0, 0, 0, 0,129, 67,
-231, 1, 0, 0,248, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,230, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 2, 2, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,248, 1, 2, 1,231, 1, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 1, 0, 0, 26, 0, 0, 0, 27, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,112,101, 32, 75,101,121,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74,254,209, 0, 76, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0,
+ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,144, 1, 0, 0,
- 56, 68, 88, 3, 0, 0, 0, 0,181, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 32, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 64, 1, 0, 0,232, 43, 84, 10,199, 0, 0, 0, 1, 0, 0, 0, 8,150, 84, 10,152,148, 84, 10, 32,151,163, 9, 0, 0, 0, 0,
+ 68, 65, 84, 65, 95, 80, 84, 95,117,118, 95,116,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 95, 80, 84, 95,117,118, 95,116,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 85, 86, 32, 84,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,237,253,209, 0, 69, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, 8,150, 84, 10,199, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0,232, 43, 84, 10, 64,155,163, 9, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,118,101,114,116,
+101,120, 95, 99,111,108,111,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,118,101,114,116,
+101,120, 95, 99,111,108,111,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86,101,114,116,101,120, 32, 67,111,108,111,114,
+115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,253,209, 0, 69, 0, 0, 0, 0, 0,
+ 0, 0, 4, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0, 16,143, 88, 10,165, 0, 0, 0, 1, 0, 0, 0,184,148, 88, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,121,116,104,111,110, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,160, 0, 0, 0,136,103, 88, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0,120,129, 88, 3, 0, 0, 0, 0,
-104, 64, 88, 3, 0, 0, 0, 0, 24,192, 87, 3, 0, 0, 0, 0,120,189, 87, 3, 0, 0, 0, 0, 8,189, 87, 3, 0, 0, 0, 0,
-136,192, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,245, 3, 0, 0,254, 4, 0, 0, 13, 2, 0, 0,186, 2, 0, 0,
- 3, 3, 10, 1,174, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,107, 88, 3, 0, 0, 0, 0,
-248,127, 88, 3, 0, 0, 0, 0,120,104, 88, 3, 0, 0, 0, 0,232,105, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-120,104, 88, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,232,105, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,128,163, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,133, 67, 0, 0, 0, 0, 0, 0,208, 65,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,149, 67, 0, 0,200, 65, 0,128,149, 67, 0, 0,200, 65,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 10, 1, 26, 0, 10, 1, 26, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,245, 3, 0, 0,254, 4, 0, 0, 13, 2, 0, 0, 38, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0,
+ 96,139, 79, 9,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 24,144, 88, 10,201, 0, 0, 0,
+ 1, 0, 0, 0, 64,145, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
+ 0, 32,209, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0,209, 68,
+ 0, 0,200, 65, 0, 0,209, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4,
+ 10, 0,137, 6, 26, 0,137, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 6, 0, 0,
+149, 3, 0, 0,174, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,137, 6, 26, 0, 0, 0, 1, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+248, 0, 0, 0, 64,145, 88, 10,201, 0, 0, 0, 1, 0, 0, 0,104,146, 88, 10, 24,144, 88, 10, 0, 0, 0, 0, 0, 0,112, 67,
+ 0, 64,101,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 67, 0, 64,101,196, 0, 0, 0, 0,223, 0, 0, 0,240, 0, 0, 0,
+ 0, 0, 0, 0,148, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,222, 0, 0, 0,
+ 0, 0, 0, 0,148, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64,
+ 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,240, 0,149, 3,223, 0,149, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,239, 0, 0, 0, 0, 0, 0, 0,148, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,240, 0,149, 3, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,104,146, 88, 10,201, 0, 0, 0, 1, 0, 0, 0,144,147, 88, 10,
+ 64,145, 88, 10, 0, 0, 0, 0, 0, 32,179, 68, 0, 0, 0, 0, 0, 0,112, 66, 0, 0, 0, 0, 0, 32,179, 68, 0, 0, 0, 0,
+ 0, 0,112, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,152, 5, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0,179, 68, 0, 0,108, 66, 0, 0,179, 68,
+ 0, 0,108, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,153, 5, 60, 0,153, 5,
+ 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 0, 0, 0,136, 6, 0, 0, 89, 3, 0, 0,148, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153, 5, 60, 0, 0, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,144,147, 88, 10,
+201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,104,146, 88, 10, 0, 0, 0, 0, 0,128,175, 68, 0, 0,137,195, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,177, 68, 0, 64, 86,196, 0, 0, 0, 0,136, 5, 0, 0,153, 5, 0, 0, 0, 0, 0, 0, 88, 3, 0, 0,
+ 0, 0, 0, 0,135, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,135, 5, 0, 0, 0, 0, 0, 0, 88, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 2, 0, 0, 2, 0, 3, 3,
+ 2, 0, 0, 4, 6, 0,153, 5, 89, 3,136, 5, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 0, 0, 0,
+136, 6, 0, 0, 0, 0, 0, 0, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153, 5, 89, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 60, 0, 0, 0,184,148, 88, 10,168, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 16,143, 88, 10, 24,144, 88, 10,
+144,147, 88, 10, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 5, 0,255,255,255,255, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0, 32,149, 88, 10,200, 0, 0, 0,
+ 1, 0, 0, 0,232,152, 88, 10,192, 92, 88, 10,208, 81, 88, 10, 80, 84, 88, 10,144, 84, 88, 10, 80, 83, 88, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 19, 4, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 15, 15, 20, 4, 92, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 32,104, 60, 9, 0,152, 88, 10, 0,152, 88, 10,176,149, 88, 10,216,150, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0,208,248, 80, 10,
+128,249, 80, 10, 68, 65, 84, 65,248, 0, 0, 0,176,149, 88, 10,201, 0, 0, 0, 1, 0, 0, 0,216,150, 88, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,160,137, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,130, 68, 0, 0, 0, 0, 0, 0,208, 65,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 19, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 4, 26, 0, 20, 4, 26, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 26, 0, 5, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,105, 60, 9, 16, 28, 82, 9, 16, 28, 82, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 32,250, 80, 10,136,251, 80, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,216,150, 88, 10,201, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0,176,149, 88, 10, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,
+246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 19, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 19, 4, 0, 0, 18, 0, 0, 0, 65, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4,
+ 8, 0, 20, 4, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 4, 0, 0,
+ 26, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 66, 0, 6, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,104, 60, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,252, 80, 10, 40,254, 80, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+188, 0, 0, 0, 0,152, 88, 10,176, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0,232,152, 88, 10,200, 0, 0, 0, 1, 0, 0, 0,
+ 24, 35, 89, 10, 32,149, 88, 10,208, 83, 88, 10,144, 83, 88, 10, 16, 83, 88, 10, 16, 84, 88, 10, 0, 0, 0, 0, 21, 4, 0, 0,
+246, 4, 0, 0, 25, 3, 0, 0,198, 3, 0, 0, 3, 3,226, 0,174, 0, 1, 0, 0, 0, 0, 0, 0, 0, 8, 0, 88,102, 60, 9,
+200,155, 88, 10,200,155, 88, 10,120,153, 88, 10,160,154, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0,160,254, 80, 10, 80,255, 80, 10,
+ 68, 65, 84, 65,248, 0, 0, 0,120,153, 88, 10,201, 0, 0, 0, 1, 0, 0, 0,160,154, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,128,244, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 98, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+225, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 66, 67, 0, 0,200, 65, 0, 0, 66, 67, 0, 0,200, 65, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,226, 0, 26, 0,226, 0, 26, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 21, 4, 0, 0,246, 4, 0, 0,173, 3, 0, 0,198, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,226, 0, 26, 0, 7, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,152,103, 60, 9,232,161, 84, 10,232,161, 84, 10, 0, 0, 0, 0, 0, 0, 0, 0,240,255, 80, 10,
+ 88, 1, 81, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,160,154, 88, 10,201, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0,120,153, 88, 10, 0, 0, 0, 0, 0,128,131, 67, 0, 0,228,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 67,
+ 0, 0, 2,195, 0, 0, 0, 0,209, 0, 0, 0,226, 0, 0, 0, 18, 0, 0, 0,147, 0, 0, 0, 0, 0, 0, 0,208, 0, 0, 0,
+ 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,208, 0, 0, 0, 18, 0, 0, 0,147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 2, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0,226, 0,
+148, 0,209, 0,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 4, 0, 0,246, 4, 0, 0, 25, 3, 0, 0,
+172, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,226, 0,148, 0, 8, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,103, 60, 9, 96, 94, 84, 9, 96, 94, 84, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 24, 2, 81, 10, 8, 3, 81, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,252, 0, 0, 0,
+200,155, 88, 10,169, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+128, 11, 65, 10,128, 11, 65, 10, 0,142, 88, 9, 0,115,101, 32, 83, 99,117,108,112,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, 12, 0, 0, 0, 0,142, 88, 9,224, 0, 0, 0, 1, 0, 0, 0, 42, 11, 0, 0,
+ 42, 11, 0, 0,240,156, 88, 10, 68, 65, 84, 65,248,133, 0, 0,240,156, 88, 10,223, 0, 0, 0, 42, 11, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 16,228, 90, 10, 19, 0, 0, 0, 1, 0, 1, 0, 16,228, 90, 10, 20, 0, 0, 0, 1, 0, 1, 0, 16,228, 90, 10,
+ 21, 0, 1, 0, 1, 0, 0, 0, 16,228, 90, 10, 0, 0, 0, 0, 1, 0, 1, 0,224,243, 90, 10, 0, 0, 0, 0, 1, 0, 1, 0,
+152,250, 90, 10, 0, 0, 0, 0, 1, 0, 1, 0,240, 74, 92, 10, 0, 0, 0, 0, 1, 0, 1, 0, 40, 4, 91, 10, 0, 0, 0, 0,
+ 1, 0, 1, 0,224,168, 91, 10, 0, 0, 0, 0, 1, 0, 1, 0, 96,255, 90, 10, 0, 0, 0, 0, 1, 0, 1, 0,112,240, 90, 10,
+ 0, 0, 0, 0, 1, 0, 1, 0,208,245, 90, 10, 0, 0, 0, 0, 1, 0, 1, 0,216,239, 90, 10, 21, 0, 0, 0, 1, 0, 1, 0,
+ 16,228, 90, 10, 30, 0,255,255, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 0, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 1, 0,
+ 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 2, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 3, 0, 1, 0, 0, 0, 16,228, 90, 10,
+ 31, 0, 4, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 5, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 6, 0, 1, 0, 0, 0,
+ 16,228, 90, 10, 31, 0, 7, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 8, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 9, 0,
+ 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 10, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 11, 0, 1, 0, 0, 0, 16,228, 90, 10,
+ 31, 0, 12, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 13, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 14, 0, 1, 0, 0, 0,
+ 16,228, 90, 10, 31, 0, 15, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 16, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 17, 0,
+ 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 18, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 19, 0, 1, 0, 0, 0, 16,228, 90, 10,
+ 31, 0, 20, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 21, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 22, 0, 1, 0, 0, 0,
+ 16,228, 90, 10, 31, 0, 23, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 24, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 25, 0,
+ 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 26, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 27, 0, 1, 0, 0, 0, 16,228, 90, 10,
+ 31, 0, 28, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 29, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 30, 0, 1, 0, 0, 0,
+ 16,228, 90, 10, 31, 0, 31, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 32, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 33, 0,
+ 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 34, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 35, 0, 1, 0, 0, 0, 16,228, 90, 10,
+ 31, 0, 36, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 37, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 38, 0, 1, 0, 0, 0,
+ 16,228, 90, 10, 31, 0, 39, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 40, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 41, 0,
+ 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 42, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 43, 0, 1, 0, 0, 0, 16,228, 90, 10,
+ 31, 0, 44, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 45, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 46, 0, 1, 0, 0, 0,
+ 16,228, 90, 10, 31, 0, 47, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 48, 0, 1, 0, 0, 0, 16,228, 90, 10, 30, 0,255,255,
+ 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 0, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 1, 0, 1, 0, 0, 0, 16,228, 90, 10,
+ 31, 0, 2, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 3, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 4, 0, 1, 0, 0, 0,
+ 16,228, 90, 10, 31, 0, 5, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 6, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 7, 0,
+ 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 8, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 9, 0, 1, 0, 0, 0, 16,228, 90, 10,
+ 31, 0, 10, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 11, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 12, 0, 1, 0, 0, 0,
+ 16,228, 90, 10, 31, 0, 13, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 14, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 15, 0,
+ 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 16, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 17, 0, 1, 0, 0, 0, 16,228, 90, 10,
+ 31, 0, 18, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 19, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 20, 0, 1, 0, 0, 0,
+ 16,228, 90, 10, 31, 0, 21, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 22, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 23, 0,
+ 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 24, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 25, 0, 1, 0, 0, 0, 16,228, 90, 10,
+ 31, 0, 26, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 27, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 28, 0, 1, 0, 0, 0,
+ 16,228, 90, 10, 31, 0, 29, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 30, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 31, 0,
+ 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 32, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 33, 0, 1, 0, 0, 0, 16,228, 90, 10,
+ 31, 0, 34, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 35, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 36, 0, 1, 0, 0, 0,
+ 16,228, 90, 10, 31, 0, 37, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 38, 0, 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 39, 0,
+ 1, 0, 0, 0, 16,228, 90, 10, 31, 0, 40, 0, 1, 0, 0, 0, 16,228, 90, 10, 30, 0,255,255, 1, 0, 0, 0,232, 84, 92, 10,
+ 30, 0,255,255, 1, 0, 0, 0,168, 90, 92, 10, 30, 0,255,255, 1, 0, 0, 0, 48, 95, 92, 10, 30, 0,255,255, 1, 0, 0, 0,
+184, 99, 92, 10, 30, 0,255,255, 1, 0, 0, 0, 64,104, 92, 10, 30, 0,255,255, 1, 0, 0, 0,200,108, 92, 10, 30, 0,255,255,
+ 1, 0, 0, 0, 80,113, 92, 10, 30, 0,255,255, 1, 0, 0, 0,216,117, 92, 10, 30, 0,255,255, 1, 0, 0, 0, 96,122, 92, 10,
+ 30, 0,255,255, 1, 0, 0, 0,232,126, 92, 10, 30, 0,255,255, 1, 0, 0, 0,112,131, 92, 10, 30, 0,255,255, 1, 0, 0, 0,
+248,135, 92, 10, 30, 0,255,255, 1, 0, 0, 0,128,140, 92, 10, 30, 0,255,255, 1, 0, 0, 0, 8,145, 92, 10, 30, 0,255,255,
+ 1, 0, 0, 0,144,149, 92, 10, 30, 0,255,255, 1, 0, 0, 0, 24,154, 92, 10, 30, 0,255,255, 1, 0, 0, 0,160,158, 92, 10,
+ 30, 0,255,255, 1, 0, 0, 0, 40,163, 92, 10, 30, 0,255,255, 1, 0, 0, 0,176,167, 92, 10, 30, 0,255,255, 1, 0, 0, 0,
+ 56,172, 92, 10, 30, 0,255,255, 1, 0, 0, 0,192,176, 92, 10, 30, 0,255,255, 1, 0, 0, 0, 72,181, 92, 10, 30, 0,255,255,
+ 1, 0, 0, 0,208,185, 92, 10, 30, 0,255,255, 1, 0, 0, 0, 88,190, 92, 10, 30, 0,255,255, 1, 0, 0, 0,224,194, 92, 10,
+ 30, 0,255,255, 1, 0, 0, 0,104,199, 92, 10, 30, 0,255,255, 1, 0, 0, 0,240,203, 92, 10, 30, 0,255,255, 1, 0, 0, 0,
+120,208, 92, 10, 30, 0,255,255, 1, 0, 0, 0, 0,213, 92, 10, 30, 0,255,255, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 0, 0,
+ 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 1, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 2, 0, 1, 0, 0, 0,232, 84, 92, 10,
+ 31, 0, 3, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 4, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 5, 0, 1, 0, 0, 0,
+232, 84, 92, 10, 31, 0, 6, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 7, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 8, 0,
+ 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 9, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 10, 0, 1, 0, 0, 0,232, 84, 92, 10,
+ 31, 0, 11, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 12, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 13, 0, 1, 0, 0, 0,
+232, 84, 92, 10, 31, 0, 14, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 15, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 16, 0,
+ 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 17, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 18, 0, 1, 0, 0, 0,232, 84, 92, 10,
+ 31, 0, 19, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 20, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 21, 0, 1, 0, 0, 0,
+232, 84, 92, 10, 31, 0, 22, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 23, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 24, 0,
+ 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 25, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 26, 0, 1, 0, 0, 0,232, 84, 92, 10,
+ 31, 0, 27, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 28, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 29, 0, 1, 0, 0, 0,
+232, 84, 92, 10, 31, 0, 30, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 31, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 32, 0,
+ 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 33, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 34, 0, 1, 0, 0, 0,232, 84, 92, 10,
+ 31, 0, 35, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 36, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 37, 0, 1, 0, 0, 0,
+232, 84, 92, 10, 31, 0, 38, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 39, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 40, 0,
+ 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 41, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 42, 0, 1, 0, 0, 0,232, 84, 92, 10,
+ 31, 0, 43, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 44, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 45, 0, 1, 0, 0, 0,
+232, 84, 92, 10, 31, 0, 46, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 47, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 48, 0,
+ 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 49, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 50, 0, 1, 0, 0, 0,232, 84, 92, 10,
+ 31, 0, 51, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 52, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 53, 0, 1, 0, 0, 0,
+232, 84, 92, 10, 31, 0, 54, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 55, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 56, 0,
+ 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 57, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 58, 0, 1, 0, 0, 0,232, 84, 92, 10,
+ 31, 0, 59, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 60, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 61, 0, 1, 0, 0, 0,
+232, 84, 92, 10, 31, 0, 62, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 63, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 64, 0,
+ 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 65, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 66, 0, 1, 0, 0, 0,232, 84, 92, 10,
+ 31, 0, 67, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 68, 0, 1, 0, 0, 0,232, 84, 92, 10, 31, 0, 69, 0, 1, 0, 0, 0,
+232, 84, 92, 10, 30, 0,255,255, 1, 0, 0, 0,216,239, 90, 10, 30, 0,255,255, 1, 0, 0, 0,112,240, 90, 10, 30, 0,255,255,
+ 1, 0, 0, 0, 40, 4, 91, 10, 30, 0,255,255, 1, 0, 0, 0,240, 74, 92, 10, 30, 0,255,255, 3, 0, 0, 0,208,245, 90, 10,
+ 30, 0,255,255, 1, 0, 0, 0,152,250, 90, 10, 30, 0,255,255, 1, 0, 0, 0, 96,255, 90, 10, 30, 0,255,255, 1, 0, 0, 0,
+ 88,159, 78, 10, 30, 0,255,255, 1, 0, 0, 0,224,212, 60, 10, 30, 0,255,255, 1, 0, 0, 0, 24, 81, 88, 10, 30, 0,255,255,
+ 1, 0, 0, 0,168, 85, 89, 10, 30, 0,255,255, 1, 0, 0, 0,248, 63, 90, 10, 30, 0,255,255, 1, 0, 0, 0, 64,130, 90, 10,
+ 30, 0,255,255, 1, 0, 0, 0,232,191, 90, 10, 30, 0,255,255, 1, 0, 0, 0,224,168, 91, 10, 30, 0,255,255, 1, 0, 0, 0,
+ 0,140, 81, 9, 30, 0,255,255, 1, 0, 0, 0,224,243, 90, 10, 31, 0, 0, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 1, 0,
+ 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 2, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 3, 0, 1, 0, 0, 0,168, 90, 92, 10,
+ 31, 0, 4, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 5, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 6, 0, 1, 0, 0, 0,
+168, 90, 92, 10, 31, 0, 7, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 8, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 9, 0,
+ 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 10, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 11, 0, 1, 0, 0, 0,168, 90, 92, 10,
+ 31, 0, 12, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 13, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 14, 0, 1, 0, 0, 0,
+168, 90, 92, 10, 31, 0, 15, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 16, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 17, 0,
+ 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 18, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 19, 0, 1, 0, 0, 0,168, 90, 92, 10,
+ 31, 0, 20, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 21, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 22, 0, 1, 0, 0, 0,
+168, 90, 92, 10, 31, 0, 23, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 24, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 25, 0,
+ 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 26, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 27, 0, 1, 0, 0, 0,168, 90, 92, 10,
+ 31, 0, 28, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 29, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 30, 0, 1, 0, 0, 0,
+168, 90, 92, 10, 31, 0, 31, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 32, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 33, 0,
+ 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 34, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 35, 0, 1, 0, 0, 0,168, 90, 92, 10,
+ 31, 0, 36, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 37, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 38, 0, 1, 0, 0, 0,
+168, 90, 92, 10, 31, 0, 39, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 40, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 41, 0,
+ 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 42, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 43, 0, 1, 0, 0, 0,168, 90, 92, 10,
+ 31, 0, 44, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 45, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 46, 0, 1, 0, 0, 0,
+168, 90, 92, 10, 31, 0, 47, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 48, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 49, 0,
+ 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 50, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 51, 0, 1, 0, 0, 0,168, 90, 92, 10,
+ 31, 0, 52, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 53, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 54, 0, 1, 0, 0, 0,
+168, 90, 92, 10, 31, 0, 55, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 56, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 57, 0,
+ 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 58, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 59, 0, 1, 0, 0, 0,168, 90, 92, 10,
+ 31, 0, 60, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 61, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 62, 0, 1, 0, 0, 0,
+168, 90, 92, 10, 31, 0, 63, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 64, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 65, 0,
+ 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 66, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 67, 0, 1, 0, 0, 0,168, 90, 92, 10,
+ 31, 0, 68, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 69, 0, 1, 0, 0, 0,168, 90, 92, 10, 31, 0, 0, 0, 1, 0, 0, 0,
+ 48, 95, 92, 10, 31, 0, 1, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 2, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 3, 0,
+ 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 4, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 5, 0, 1, 0, 0, 0, 48, 95, 92, 10,
+ 31, 0, 6, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 7, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 8, 0, 1, 0, 0, 0,
+ 48, 95, 92, 10, 31, 0, 9, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 10, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 11, 0,
+ 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 12, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 13, 0, 1, 0, 0, 0, 48, 95, 92, 10,
+ 31, 0, 14, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 15, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 16, 0, 1, 0, 0, 0,
+ 48, 95, 92, 10, 31, 0, 17, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 18, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 19, 0,
+ 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 20, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 21, 0, 1, 0, 0, 0, 48, 95, 92, 10,
+ 31, 0, 22, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 23, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 24, 0, 1, 0, 0, 0,
+ 48, 95, 92, 10, 31, 0, 25, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 26, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 27, 0,
+ 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 28, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 29, 0, 1, 0, 0, 0, 48, 95, 92, 10,
+ 31, 0, 30, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 31, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 32, 0, 1, 0, 0, 0,
+ 48, 95, 92, 10, 31, 0, 33, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 34, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 35, 0,
+ 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 36, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 37, 0, 1, 0, 0, 0, 48, 95, 92, 10,
+ 31, 0, 38, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 39, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 40, 0, 1, 0, 0, 0,
+ 48, 95, 92, 10, 31, 0, 41, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 42, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 43, 0,
+ 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 44, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 45, 0, 1, 0, 0, 0, 48, 95, 92, 10,
+ 31, 0, 46, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 47, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 48, 0, 1, 0, 0, 0,
+ 48, 95, 92, 10, 31, 0, 49, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 50, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 51, 0,
+ 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 52, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 53, 0, 1, 0, 0, 0, 48, 95, 92, 10,
+ 31, 0, 54, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 55, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 56, 0, 1, 0, 0, 0,
+ 48, 95, 92, 10, 31, 0, 57, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 58, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 59, 0,
+ 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 60, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 61, 0, 1, 0, 0, 0, 48, 95, 92, 10,
+ 31, 0, 62, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 63, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 64, 0, 1, 0, 0, 0,
+ 48, 95, 92, 10, 31, 0, 65, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 66, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 67, 0,
+ 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 68, 0, 1, 0, 0, 0, 48, 95, 92, 10, 31, 0, 69, 0, 1, 0, 0, 0, 48, 95, 92, 10,
+ 31, 0, 0, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 1, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 2, 0, 1, 0, 0, 0,
+184, 99, 92, 10, 31, 0, 3, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 4, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 5, 0,
+ 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 6, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 7, 0, 1, 0, 0, 0,184, 99, 92, 10,
+ 31, 0, 8, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 9, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 10, 0, 1, 0, 0, 0,
+184, 99, 92, 10, 31, 0, 11, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 12, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 13, 0,
+ 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 14, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 15, 0, 1, 0, 0, 0,184, 99, 92, 10,
+ 31, 0, 16, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 17, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 18, 0, 1, 0, 0, 0,
+184, 99, 92, 10, 31, 0, 19, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 20, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 21, 0,
+ 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 22, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 23, 0, 1, 0, 0, 0,184, 99, 92, 10,
+ 31, 0, 24, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 25, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 26, 0, 1, 0, 0, 0,
+184, 99, 92, 10, 31, 0, 27, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 28, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 29, 0,
+ 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 30, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 31, 0, 1, 0, 0, 0,184, 99, 92, 10,
+ 31, 0, 32, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 33, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 34, 0, 1, 0, 0, 0,
+184, 99, 92, 10, 31, 0, 35, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 36, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 37, 0,
+ 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 38, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 39, 0, 1, 0, 0, 0,184, 99, 92, 10,
+ 31, 0, 40, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 41, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 42, 0, 1, 0, 0, 0,
+184, 99, 92, 10, 31, 0, 43, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 44, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 45, 0,
+ 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 46, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 47, 0, 1, 0, 0, 0,184, 99, 92, 10,
+ 31, 0, 48, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 49, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 50, 0, 1, 0, 0, 0,
+184, 99, 92, 10, 31, 0, 51, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 52, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 53, 0,
+ 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 54, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 55, 0, 1, 0, 0, 0,184, 99, 92, 10,
+ 31, 0, 56, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 57, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 58, 0, 1, 0, 0, 0,
+184, 99, 92, 10, 31, 0, 59, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 60, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 61, 0,
+ 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 62, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 63, 0, 1, 0, 0, 0,184, 99, 92, 10,
+ 31, 0, 64, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 65, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 66, 0, 1, 0, 0, 0,
+184, 99, 92, 10, 31, 0, 67, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 68, 0, 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 69, 0,
+ 1, 0, 0, 0,184, 99, 92, 10, 31, 0, 0, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 1, 0, 1, 0, 0, 0, 64,104, 92, 10,
+ 31, 0, 2, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 3, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 4, 0, 1, 0, 0, 0,
+ 64,104, 92, 10, 31, 0, 5, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 6, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 7, 0,
+ 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 8, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 9, 0, 1, 0, 0, 0, 64,104, 92, 10,
+ 31, 0, 10, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 11, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 12, 0, 1, 0, 0, 0,
+ 64,104, 92, 10, 31, 0, 13, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 14, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 15, 0,
+ 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 16, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 17, 0, 1, 0, 0, 0, 64,104, 92, 10,
+ 31, 0, 18, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 19, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 20, 0, 1, 0, 0, 0,
+ 64,104, 92, 10, 31, 0, 21, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 22, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 23, 0,
+ 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 24, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 25, 0, 1, 0, 0, 0, 64,104, 92, 10,
+ 31, 0, 26, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 27, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 28, 0, 1, 0, 0, 0,
+ 64,104, 92, 10, 31, 0, 29, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 30, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 31, 0,
+ 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 32, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 33, 0, 1, 0, 0, 0, 64,104, 92, 10,
+ 31, 0, 34, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 35, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 36, 0, 1, 0, 0, 0,
+ 64,104, 92, 10, 31, 0, 37, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 38, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 39, 0,
+ 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 40, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 41, 0, 1, 0, 0, 0, 64,104, 92, 10,
+ 31, 0, 42, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 43, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 44, 0, 1, 0, 0, 0,
+ 64,104, 92, 10, 31, 0, 45, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 46, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 47, 0,
+ 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 48, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 49, 0, 1, 0, 0, 0, 64,104, 92, 10,
+ 31, 0, 50, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 51, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 52, 0, 1, 0, 0, 0,
+ 64,104, 92, 10, 31, 0, 53, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 54, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 55, 0,
+ 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 56, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 57, 0, 1, 0, 0, 0, 64,104, 92, 10,
+ 31, 0, 58, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 59, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 60, 0, 1, 0, 0, 0,
+ 64,104, 92, 10, 31, 0, 61, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 62, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 63, 0,
+ 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 64, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 65, 0, 1, 0, 0, 0, 64,104, 92, 10,
+ 31, 0, 66, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 67, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 68, 0, 1, 0, 0, 0,
+ 64,104, 92, 10, 31, 0, 69, 0, 1, 0, 0, 0, 64,104, 92, 10, 31, 0, 0, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 1, 0,
+ 1, 0, 0, 0,200,108, 92, 10, 31, 0, 2, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 3, 0, 1, 0, 0, 0,200,108, 92, 10,
+ 31, 0, 4, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 5, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 6, 0, 1, 0, 0, 0,
+200,108, 92, 10, 31, 0, 7, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 8, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 9, 0,
+ 1, 0, 0, 0,200,108, 92, 10, 31, 0, 10, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 11, 0, 1, 0, 0, 0,200,108, 92, 10,
+ 31, 0, 12, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 13, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 14, 0, 1, 0, 0, 0,
+200,108, 92, 10, 31, 0, 15, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 16, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 17, 0,
+ 1, 0, 0, 0,200,108, 92, 10, 31, 0, 18, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 19, 0, 1, 0, 0, 0,200,108, 92, 10,
+ 31, 0, 20, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 21, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 22, 0, 1, 0, 0, 0,
+200,108, 92, 10, 31, 0, 23, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 24, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 25, 0,
+ 1, 0, 0, 0,200,108, 92, 10, 31, 0, 26, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 27, 0, 1, 0, 0, 0,200,108, 92, 10,
+ 31, 0, 28, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 29, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 30, 0, 1, 0, 0, 0,
+200,108, 92, 10, 31, 0, 31, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 32, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 33, 0,
+ 1, 0, 0, 0,200,108, 92, 10, 31, 0, 34, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 35, 0, 1, 0, 0, 0,200,108, 92, 10,
+ 31, 0, 36, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 37, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 38, 0, 1, 0, 0, 0,
+200,108, 92, 10, 31, 0, 39, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 40, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 41, 0,
+ 1, 0, 0, 0,200,108, 92, 10, 31, 0, 42, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 43, 0, 1, 0, 0, 0,200,108, 92, 10,
+ 31, 0, 44, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 45, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 46, 0, 1, 0, 0, 0,
+200,108, 92, 10, 31, 0, 47, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 48, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 49, 0,
+ 1, 0, 0, 0,200,108, 92, 10, 31, 0, 50, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 51, 0, 1, 0, 0, 0,200,108, 92, 10,
+ 31, 0, 52, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 53, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 54, 0, 1, 0, 0, 0,
+200,108, 92, 10, 31, 0, 55, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 56, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 57, 0,
+ 1, 0, 0, 0,200,108, 92, 10, 31, 0, 58, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 59, 0, 1, 0, 0, 0,200,108, 92, 10,
+ 31, 0, 60, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 61, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 62, 0, 1, 0, 0, 0,
+200,108, 92, 10, 31, 0, 63, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 64, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 65, 0,
+ 1, 0, 0, 0,200,108, 92, 10, 31, 0, 66, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 67, 0, 1, 0, 0, 0,200,108, 92, 10,
+ 31, 0, 68, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 69, 0, 1, 0, 0, 0,200,108, 92, 10, 31, 0, 0, 0, 1, 0, 0, 0,
+ 80,113, 92, 10, 31, 0, 1, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 2, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 3, 0,
+ 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 4, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 5, 0, 1, 0, 0, 0, 80,113, 92, 10,
+ 31, 0, 6, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 7, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 8, 0, 1, 0, 0, 0,
+ 80,113, 92, 10, 31, 0, 9, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 10, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 11, 0,
+ 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 12, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 13, 0, 1, 0, 0, 0, 80,113, 92, 10,
+ 31, 0, 14, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 15, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 16, 0, 1, 0, 0, 0,
+ 80,113, 92, 10, 31, 0, 17, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 18, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 19, 0,
+ 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 20, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 21, 0, 1, 0, 0, 0, 80,113, 92, 10,
+ 31, 0, 22, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 23, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 24, 0, 1, 0, 0, 0,
+ 80,113, 92, 10, 31, 0, 25, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 26, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 27, 0,
+ 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 28, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 29, 0, 1, 0, 0, 0, 80,113, 92, 10,
+ 31, 0, 30, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 31, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 32, 0, 1, 0, 0, 0,
+ 80,113, 92, 10, 31, 0, 33, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 34, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 35, 0,
+ 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 36, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 37, 0, 1, 0, 0, 0, 80,113, 92, 10,
+ 31, 0, 38, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 39, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 40, 0, 1, 0, 0, 0,
+ 80,113, 92, 10, 31, 0, 41, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 42, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 43, 0,
+ 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 44, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 45, 0, 1, 0, 0, 0, 80,113, 92, 10,
+ 31, 0, 46, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 47, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 48, 0, 1, 0, 0, 0,
+ 80,113, 92, 10, 31, 0, 49, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 50, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 51, 0,
+ 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 52, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 53, 0, 1, 0, 0, 0, 80,113, 92, 10,
+ 31, 0, 54, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 55, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 56, 0, 1, 0, 0, 0,
+ 80,113, 92, 10, 31, 0, 57, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 58, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 59, 0,
+ 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 60, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 61, 0, 1, 0, 0, 0, 80,113, 92, 10,
+ 31, 0, 62, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 63, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 64, 0, 1, 0, 0, 0,
+ 80,113, 92, 10, 31, 0, 65, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 66, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 67, 0,
+ 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 68, 0, 1, 0, 0, 0, 80,113, 92, 10, 31, 0, 69, 0, 1, 0, 0, 0, 80,113, 92, 10,
+ 31, 0, 0, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 1, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 2, 0, 1, 0, 0, 0,
+216,117, 92, 10, 31, 0, 3, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 4, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 5, 0,
+ 1, 0, 0, 0,216,117, 92, 10, 31, 0, 6, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 7, 0, 1, 0, 0, 0,216,117, 92, 10,
+ 31, 0, 8, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 9, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 10, 0, 1, 0, 0, 0,
+216,117, 92, 10, 31, 0, 11, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 12, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 13, 0,
+ 1, 0, 0, 0,216,117, 92, 10, 31, 0, 14, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 15, 0, 1, 0, 0, 0,216,117, 92, 10,
+ 31, 0, 16, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 17, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 18, 0, 1, 0, 0, 0,
+216,117, 92, 10, 31, 0, 19, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 20, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 21, 0,
+ 1, 0, 0, 0,216,117, 92, 10, 31, 0, 22, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 23, 0, 1, 0, 0, 0,216,117, 92, 10,
+ 31, 0, 24, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 25, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 26, 0, 1, 0, 0, 0,
+216,117, 92, 10, 31, 0, 27, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 28, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 29, 0,
+ 1, 0, 0, 0,216,117, 92, 10, 31, 0, 30, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 31, 0, 1, 0, 0, 0,216,117, 92, 10,
+ 31, 0, 32, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 33, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 34, 0, 1, 0, 0, 0,
+216,117, 92, 10, 31, 0, 35, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 36, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 37, 0,
+ 1, 0, 0, 0,216,117, 92, 10, 31, 0, 38, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 39, 0, 1, 0, 0, 0,216,117, 92, 10,
+ 31, 0, 40, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 41, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 42, 0, 1, 0, 0, 0,
+216,117, 92, 10, 31, 0, 43, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 44, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 45, 0,
+ 1, 0, 0, 0,216,117, 92, 10, 31, 0, 46, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 47, 0, 1, 0, 0, 0,216,117, 92, 10,
+ 31, 0, 48, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 49, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 50, 0, 1, 0, 0, 0,
+216,117, 92, 10, 31, 0, 51, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 52, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 53, 0,
+ 1, 0, 0, 0,216,117, 92, 10, 31, 0, 54, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 55, 0, 1, 0, 0, 0,216,117, 92, 10,
+ 31, 0, 56, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 57, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 58, 0, 1, 0, 0, 0,
+216,117, 92, 10, 31, 0, 59, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 60, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 61, 0,
+ 1, 0, 0, 0,216,117, 92, 10, 31, 0, 62, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 63, 0, 1, 0, 0, 0,216,117, 92, 10,
+ 31, 0, 64, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 65, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 66, 0, 1, 0, 0, 0,
+216,117, 92, 10, 31, 0, 67, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 68, 0, 1, 0, 0, 0,216,117, 92, 10, 31, 0, 69, 0,
+ 1, 0, 0, 0,216,117, 92, 10, 31, 0, 0, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 1, 0, 1, 0, 0, 0, 96,122, 92, 10,
+ 31, 0, 2, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 3, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 4, 0, 1, 0, 0, 0,
+ 96,122, 92, 10, 31, 0, 5, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 6, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 7, 0,
+ 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 8, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 9, 0, 1, 0, 0, 0, 96,122, 92, 10,
+ 31, 0, 10, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 11, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 12, 0, 1, 0, 0, 0,
+ 96,122, 92, 10, 31, 0, 13, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 14, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 15, 0,
+ 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 16, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 17, 0, 1, 0, 0, 0, 96,122, 92, 10,
+ 31, 0, 18, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 19, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 20, 0, 1, 0, 0, 0,
+ 96,122, 92, 10, 31, 0, 21, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 22, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 23, 0,
+ 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 24, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 25, 0, 1, 0, 0, 0, 96,122, 92, 10,
+ 31, 0, 26, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 27, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 28, 0, 1, 0, 0, 0,
+ 96,122, 92, 10, 31, 0, 29, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 30, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 31, 0,
+ 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 32, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 33, 0, 1, 0, 0, 0, 96,122, 92, 10,
+ 31, 0, 34, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 35, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 36, 0, 1, 0, 0, 0,
+ 96,122, 92, 10, 31, 0, 37, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 38, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 39, 0,
+ 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 40, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 41, 0, 1, 0, 0, 0, 96,122, 92, 10,
+ 31, 0, 42, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 43, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 44, 0, 1, 0, 0, 0,
+ 96,122, 92, 10, 31, 0, 45, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 46, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 47, 0,
+ 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 48, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 49, 0, 1, 0, 0, 0, 96,122, 92, 10,
+ 31, 0, 50, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 51, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 52, 0, 1, 0, 0, 0,
+ 96,122, 92, 10, 31, 0, 53, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 54, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 55, 0,
+ 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 56, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 57, 0, 1, 0, 0, 0, 96,122, 92, 10,
+ 31, 0, 58, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 59, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 60, 0, 1, 0, 0, 0,
+ 96,122, 92, 10, 31, 0, 61, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 62, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 63, 0,
+ 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 64, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 65, 0, 1, 0, 0, 0, 96,122, 92, 10,
+ 31, 0, 66, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 67, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 68, 0, 1, 0, 0, 0,
+ 96,122, 92, 10, 31, 0, 69, 0, 1, 0, 0, 0, 96,122, 92, 10, 31, 0, 0, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 1, 0,
+ 1, 0, 0, 0,232,126, 92, 10, 31, 0, 2, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 3, 0, 1, 0, 0, 0,232,126, 92, 10,
+ 31, 0, 4, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 5, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 6, 0, 1, 0, 0, 0,
+232,126, 92, 10, 31, 0, 7, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 8, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 9, 0,
+ 1, 0, 0, 0,232,126, 92, 10, 31, 0, 10, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 11, 0, 1, 0, 0, 0,232,126, 92, 10,
+ 31, 0, 12, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 13, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 14, 0, 1, 0, 0, 0,
+232,126, 92, 10, 31, 0, 15, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 16, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 17, 0,
+ 1, 0, 0, 0,232,126, 92, 10, 31, 0, 18, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 19, 0, 1, 0, 0, 0,232,126, 92, 10,
+ 31, 0, 20, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 21, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 22, 0, 1, 0, 0, 0,
+232,126, 92, 10, 31, 0, 23, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 24, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 25, 0,
+ 1, 0, 0, 0,232,126, 92, 10, 31, 0, 26, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 27, 0, 1, 0, 0, 0,232,126, 92, 10,
+ 31, 0, 28, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 29, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 30, 0, 1, 0, 0, 0,
+232,126, 92, 10, 31, 0, 31, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 32, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 33, 0,
+ 1, 0, 0, 0,232,126, 92, 10, 31, 0, 34, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 35, 0, 1, 0, 0, 0,232,126, 92, 10,
+ 31, 0, 36, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 37, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 38, 0, 1, 0, 0, 0,
+232,126, 92, 10, 31, 0, 39, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 40, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 41, 0,
+ 1, 0, 0, 0,232,126, 92, 10, 31, 0, 42, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 43, 0, 1, 0, 0, 0,232,126, 92, 10,
+ 31, 0, 44, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 45, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 46, 0, 1, 0, 0, 0,
+232,126, 92, 10, 31, 0, 47, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 48, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 49, 0,
+ 1, 0, 0, 0,232,126, 92, 10, 31, 0, 50, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 51, 0, 1, 0, 0, 0,232,126, 92, 10,
+ 31, 0, 52, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 53, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 54, 0, 1, 0, 0, 0,
+232,126, 92, 10, 31, 0, 55, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 56, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 57, 0,
+ 1, 0, 0, 0,232,126, 92, 10, 31, 0, 58, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 59, 0, 1, 0, 0, 0,232,126, 92, 10,
+ 31, 0, 60, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 61, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 62, 0, 1, 0, 0, 0,
+232,126, 92, 10, 31, 0, 63, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 64, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 65, 0,
+ 1, 0, 0, 0,232,126, 92, 10, 31, 0, 66, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 67, 0, 1, 0, 0, 0,232,126, 92, 10,
+ 31, 0, 68, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 69, 0, 1, 0, 0, 0,232,126, 92, 10, 31, 0, 0, 0, 1, 0, 0, 0,
+112,131, 92, 10, 31, 0, 1, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 2, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 3, 0,
+ 1, 0, 0, 0,112,131, 92, 10, 31, 0, 4, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 5, 0, 1, 0, 0, 0,112,131, 92, 10,
+ 31, 0, 6, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 7, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 8, 0, 1, 0, 0, 0,
+112,131, 92, 10, 31, 0, 9, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 10, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 11, 0,
+ 1, 0, 0, 0,112,131, 92, 10, 31, 0, 12, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 13, 0, 1, 0, 0, 0,112,131, 92, 10,
+ 31, 0, 14, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 15, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 16, 0, 1, 0, 0, 0,
+112,131, 92, 10, 31, 0, 17, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 18, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 19, 0,
+ 1, 0, 0, 0,112,131, 92, 10, 31, 0, 20, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 21, 0, 1, 0, 0, 0,112,131, 92, 10,
+ 31, 0, 22, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 23, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 24, 0, 1, 0, 0, 0,
+112,131, 92, 10, 31, 0, 25, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 26, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 27, 0,
+ 1, 0, 0, 0,112,131, 92, 10, 31, 0, 28, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 29, 0, 1, 0, 0, 0,112,131, 92, 10,
+ 31, 0, 30, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 31, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 32, 0, 1, 0, 0, 0,
+112,131, 92, 10, 31, 0, 33, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 34, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 35, 0,
+ 1, 0, 0, 0,112,131, 92, 10, 31, 0, 36, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 37, 0, 1, 0, 0, 0,112,131, 92, 10,
+ 31, 0, 38, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 39, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 40, 0, 1, 0, 0, 0,
+112,131, 92, 10, 31, 0, 41, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 42, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 43, 0,
+ 1, 0, 0, 0,112,131, 92, 10, 31, 0, 44, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 45, 0, 1, 0, 0, 0,112,131, 92, 10,
+ 31, 0, 46, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 47, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 48, 0, 1, 0, 0, 0,
+112,131, 92, 10, 31, 0, 49, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 50, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 51, 0,
+ 1, 0, 0, 0,112,131, 92, 10, 31, 0, 52, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 53, 0, 1, 0, 0, 0,112,131, 92, 10,
+ 31, 0, 54, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 55, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 56, 0, 1, 0, 0, 0,
+112,131, 92, 10, 31, 0, 57, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 58, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 59, 0,
+ 1, 0, 0, 0,112,131, 92, 10, 31, 0, 60, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 61, 0, 1, 0, 0, 0,112,131, 92, 10,
+ 31, 0, 62, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 63, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 64, 0, 1, 0, 0, 0,
+112,131, 92, 10, 31, 0, 65, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 66, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 67, 0,
+ 1, 0, 0, 0,112,131, 92, 10, 31, 0, 68, 0, 1, 0, 0, 0,112,131, 92, 10, 31, 0, 69, 0, 1, 0, 0, 0,112,131, 92, 10,
+ 31, 0, 0, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 1, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 2, 0, 1, 0, 0, 0,
+248,135, 92, 10, 31, 0, 3, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 4, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 5, 0,
+ 1, 0, 0, 0,248,135, 92, 10, 31, 0, 6, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 7, 0, 1, 0, 0, 0,248,135, 92, 10,
+ 31, 0, 8, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 9, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 10, 0, 1, 0, 0, 0,
+248,135, 92, 10, 31, 0, 11, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 12, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 13, 0,
+ 1, 0, 0, 0,248,135, 92, 10, 31, 0, 14, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 15, 0, 1, 0, 0, 0,248,135, 92, 10,
+ 31, 0, 16, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 17, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 18, 0, 1, 0, 0, 0,
+248,135, 92, 10, 31, 0, 19, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 20, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 21, 0,
+ 1, 0, 0, 0,248,135, 92, 10, 31, 0, 22, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 23, 0, 1, 0, 0, 0,248,135, 92, 10,
+ 31, 0, 24, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 25, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 26, 0, 1, 0, 0, 0,
+248,135, 92, 10, 31, 0, 27, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 28, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 29, 0,
+ 1, 0, 0, 0,248,135, 92, 10, 31, 0, 30, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 31, 0, 1, 0, 0, 0,248,135, 92, 10,
+ 31, 0, 32, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 33, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 34, 0, 1, 0, 0, 0,
+248,135, 92, 10, 31, 0, 35, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 36, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 37, 0,
+ 1, 0, 0, 0,248,135, 92, 10, 31, 0, 38, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 39, 0, 1, 0, 0, 0,248,135, 92, 10,
+ 31, 0, 40, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 41, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 42, 0, 1, 0, 0, 0,
+248,135, 92, 10, 31, 0, 43, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 44, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 45, 0,
+ 1, 0, 0, 0,248,135, 92, 10, 31, 0, 46, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 47, 0, 1, 0, 0, 0,248,135, 92, 10,
+ 31, 0, 48, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 49, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 50, 0, 1, 0, 0, 0,
+248,135, 92, 10, 31, 0, 51, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 52, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 53, 0,
+ 1, 0, 0, 0,248,135, 92, 10, 31, 0, 54, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 55, 0, 1, 0, 0, 0,248,135, 92, 10,
+ 31, 0, 56, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 57, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 58, 0, 1, 0, 0, 0,
+248,135, 92, 10, 31, 0, 59, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 60, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 61, 0,
+ 1, 0, 0, 0,248,135, 92, 10, 31, 0, 62, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 63, 0, 1, 0, 0, 0,248,135, 92, 10,
+ 31, 0, 64, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 65, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 66, 0, 1, 0, 0, 0,
+248,135, 92, 10, 31, 0, 67, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 68, 0, 1, 0, 0, 0,248,135, 92, 10, 31, 0, 69, 0,
+ 1, 0, 0, 0,248,135, 92, 10, 31, 0, 0, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 1, 0, 1, 0, 0, 0,128,140, 92, 10,
+ 31, 0, 2, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 3, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 4, 0, 1, 0, 0, 0,
+128,140, 92, 10, 31, 0, 5, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 6, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 7, 0,
+ 1, 0, 0, 0,128,140, 92, 10, 31, 0, 8, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 9, 0, 1, 0, 0, 0,128,140, 92, 10,
+ 31, 0, 10, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 11, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 12, 0, 1, 0, 0, 0,
+128,140, 92, 10, 31, 0, 13, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 14, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 15, 0,
+ 1, 0, 0, 0,128,140, 92, 10, 31, 0, 16, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 17, 0, 1, 0, 0, 0,128,140, 92, 10,
+ 31, 0, 18, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 19, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 20, 0, 1, 0, 0, 0,
+128,140, 92, 10, 31, 0, 21, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 22, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 23, 0,
+ 1, 0, 0, 0,128,140, 92, 10, 31, 0, 24, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 25, 0, 1, 0, 0, 0,128,140, 92, 10,
+ 31, 0, 26, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 27, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 28, 0, 1, 0, 0, 0,
+128,140, 92, 10, 31, 0, 29, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 30, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 31, 0,
+ 1, 0, 0, 0,128,140, 92, 10, 31, 0, 32, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 33, 0, 1, 0, 0, 0,128,140, 92, 10,
+ 31, 0, 34, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 35, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 36, 0, 1, 0, 0, 0,
+128,140, 92, 10, 31, 0, 37, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 38, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 39, 0,
+ 1, 0, 0, 0,128,140, 92, 10, 31, 0, 40, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 41, 0, 1, 0, 0, 0,128,140, 92, 10,
+ 31, 0, 42, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 43, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 44, 0, 1, 0, 0, 0,
+128,140, 92, 10, 31, 0, 45, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 46, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 47, 0,
+ 1, 0, 0, 0,128,140, 92, 10, 31, 0, 48, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 49, 0, 1, 0, 0, 0,128,140, 92, 10,
+ 31, 0, 50, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 51, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 52, 0, 1, 0, 0, 0,
+128,140, 92, 10, 31, 0, 53, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 54, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 55, 0,
+ 1, 0, 0, 0,128,140, 92, 10, 31, 0, 56, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 57, 0, 1, 0, 0, 0,128,140, 92, 10,
+ 31, 0, 58, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 59, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 60, 0, 1, 0, 0, 0,
+128,140, 92, 10, 31, 0, 61, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 62, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 63, 0,
+ 1, 0, 0, 0,128,140, 92, 10, 31, 0, 64, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 65, 0, 1, 0, 0, 0,128,140, 92, 10,
+ 31, 0, 66, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 67, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 68, 0, 1, 0, 0, 0,
+128,140, 92, 10, 31, 0, 69, 0, 1, 0, 0, 0,128,140, 92, 10, 31, 0, 0, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 1, 0,
+ 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 2, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 3, 0, 1, 0, 0, 0, 8,145, 92, 10,
+ 31, 0, 4, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 5, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 6, 0, 1, 0, 0, 0,
+ 8,145, 92, 10, 31, 0, 7, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 8, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 9, 0,
+ 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 10, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 11, 0, 1, 0, 0, 0, 8,145, 92, 10,
+ 31, 0, 12, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 13, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 14, 0, 1, 0, 0, 0,
+ 8,145, 92, 10, 31, 0, 15, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 16, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 17, 0,
+ 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 18, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 19, 0, 1, 0, 0, 0, 8,145, 92, 10,
+ 31, 0, 20, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 21, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 22, 0, 1, 0, 0, 0,
+ 8,145, 92, 10, 31, 0, 23, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 24, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 25, 0,
+ 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 26, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 27, 0, 1, 0, 0, 0, 8,145, 92, 10,
+ 31, 0, 28, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 29, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 30, 0, 1, 0, 0, 0,
+ 8,145, 92, 10, 31, 0, 31, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 32, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 33, 0,
+ 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 34, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 35, 0, 1, 0, 0, 0, 8,145, 92, 10,
+ 31, 0, 36, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 37, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 38, 0, 1, 0, 0, 0,
+ 8,145, 92, 10, 31, 0, 39, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 40, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 41, 0,
+ 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 42, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 43, 0, 1, 0, 0, 0, 8,145, 92, 10,
+ 31, 0, 44, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 45, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 46, 0, 1, 0, 0, 0,
+ 8,145, 92, 10, 31, 0, 47, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 48, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 49, 0,
+ 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 50, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 51, 0, 1, 0, 0, 0, 8,145, 92, 10,
+ 31, 0, 52, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 53, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 54, 0, 1, 0, 0, 0,
+ 8,145, 92, 10, 31, 0, 55, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 56, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 57, 0,
+ 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 58, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 59, 0, 1, 0, 0, 0, 8,145, 92, 10,
+ 31, 0, 60, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 61, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 62, 0, 1, 0, 0, 0,
+ 8,145, 92, 10, 31, 0, 63, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 64, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 65, 0,
+ 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 66, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 67, 0, 1, 0, 0, 0, 8,145, 92, 10,
+ 31, 0, 68, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 69, 0, 1, 0, 0, 0, 8,145, 92, 10, 31, 0, 0, 0, 1, 0, 0, 0,
+144,149, 92, 10, 31, 0, 1, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 2, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 3, 0,
+ 1, 0, 0, 0,144,149, 92, 10, 31, 0, 4, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 5, 0, 1, 0, 0, 0,144,149, 92, 10,
+ 31, 0, 6, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 7, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 8, 0, 1, 0, 0, 0,
+144,149, 92, 10, 31, 0, 9, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 10, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 11, 0,
+ 1, 0, 0, 0,144,149, 92, 10, 31, 0, 12, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 13, 0, 1, 0, 0, 0,144,149, 92, 10,
+ 31, 0, 14, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 15, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 16, 0, 1, 0, 0, 0,
+144,149, 92, 10, 31, 0, 17, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 18, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 19, 0,
+ 1, 0, 0, 0,144,149, 92, 10, 31, 0, 20, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 21, 0, 1, 0, 0, 0,144,149, 92, 10,
+ 31, 0, 22, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 23, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 24, 0, 1, 0, 0, 0,
+144,149, 92, 10, 31, 0, 25, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 26, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 27, 0,
+ 1, 0, 0, 0,144,149, 92, 10, 31, 0, 28, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 29, 0, 1, 0, 0, 0,144,149, 92, 10,
+ 31, 0, 30, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 31, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 32, 0, 1, 0, 0, 0,
+144,149, 92, 10, 31, 0, 33, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 34, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 35, 0,
+ 1, 0, 0, 0,144,149, 92, 10, 31, 0, 36, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 37, 0, 1, 0, 0, 0,144,149, 92, 10,
+ 31, 0, 38, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 39, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 40, 0, 1, 0, 0, 0,
+144,149, 92, 10, 31, 0, 41, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 42, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 43, 0,
+ 1, 0, 0, 0,144,149, 92, 10, 31, 0, 44, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 45, 0, 1, 0, 0, 0,144,149, 92, 10,
+ 31, 0, 46, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 47, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 48, 0, 1, 0, 0, 0,
+144,149, 92, 10, 31, 0, 49, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 50, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 51, 0,
+ 1, 0, 0, 0,144,149, 92, 10, 31, 0, 52, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 53, 0, 1, 0, 0, 0,144,149, 92, 10,
+ 31, 0, 54, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 55, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 56, 0, 1, 0, 0, 0,
+144,149, 92, 10, 31, 0, 57, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 58, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 59, 0,
+ 1, 0, 0, 0,144,149, 92, 10, 31, 0, 60, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 61, 0, 1, 0, 0, 0,144,149, 92, 10,
+ 31, 0, 62, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 63, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 64, 0, 1, 0, 0, 0,
+144,149, 92, 10, 31, 0, 65, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 66, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 67, 0,
+ 1, 0, 0, 0,144,149, 92, 10, 31, 0, 68, 0, 1, 0, 0, 0,144,149, 92, 10, 31, 0, 69, 0, 1, 0, 0, 0,144,149, 92, 10,
+ 31, 0, 0, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 1, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 2, 0, 1, 0, 0, 0,
+ 24,154, 92, 10, 31, 0, 3, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 4, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 5, 0,
+ 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 6, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 7, 0, 1, 0, 0, 0, 24,154, 92, 10,
+ 31, 0, 8, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 9, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 10, 0, 1, 0, 0, 0,
+ 24,154, 92, 10, 31, 0, 11, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 12, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 13, 0,
+ 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 14, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 15, 0, 1, 0, 0, 0, 24,154, 92, 10,
+ 31, 0, 16, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 17, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 18, 0, 1, 0, 0, 0,
+ 24,154, 92, 10, 31, 0, 19, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 20, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 21, 0,
+ 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 22, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 23, 0, 1, 0, 0, 0, 24,154, 92, 10,
+ 31, 0, 24, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 25, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 26, 0, 1, 0, 0, 0,
+ 24,154, 92, 10, 31, 0, 27, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 28, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 29, 0,
+ 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 30, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 31, 0, 1, 0, 0, 0, 24,154, 92, 10,
+ 31, 0, 32, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 33, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 34, 0, 1, 0, 0, 0,
+ 24,154, 92, 10, 31, 0, 35, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 36, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 37, 0,
+ 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 38, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 39, 0, 1, 0, 0, 0, 24,154, 92, 10,
+ 31, 0, 40, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 41, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 42, 0, 1, 0, 0, 0,
+ 24,154, 92, 10, 31, 0, 43, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 44, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 45, 0,
+ 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 46, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 47, 0, 1, 0, 0, 0, 24,154, 92, 10,
+ 31, 0, 48, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 49, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 50, 0, 1, 0, 0, 0,
+ 24,154, 92, 10, 31, 0, 51, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 52, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 53, 0,
+ 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 54, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 55, 0, 1, 0, 0, 0, 24,154, 92, 10,
+ 31, 0, 56, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 57, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 58, 0, 1, 0, 0, 0,
+ 24,154, 92, 10, 31, 0, 59, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 60, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 61, 0,
+ 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 62, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 63, 0, 1, 0, 0, 0, 24,154, 92, 10,
+ 31, 0, 64, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 65, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 66, 0, 1, 0, 0, 0,
+ 24,154, 92, 10, 31, 0, 67, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 68, 0, 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 69, 0,
+ 1, 0, 0, 0, 24,154, 92, 10, 31, 0, 0, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 1, 0, 1, 0, 0, 0,160,158, 92, 10,
+ 31, 0, 2, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 3, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 4, 0, 1, 0, 0, 0,
+160,158, 92, 10, 31, 0, 5, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 6, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 7, 0,
+ 1, 0, 0, 0,160,158, 92, 10, 31, 0, 8, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 9, 0, 1, 0, 0, 0,160,158, 92, 10,
+ 31, 0, 10, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 11, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 12, 0, 1, 0, 0, 0,
+160,158, 92, 10, 31, 0, 13, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 14, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 15, 0,
+ 1, 0, 0, 0,160,158, 92, 10, 31, 0, 16, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 17, 0, 1, 0, 0, 0,160,158, 92, 10,
+ 31, 0, 18, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 19, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 20, 0, 1, 0, 0, 0,
+160,158, 92, 10, 31, 0, 21, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 22, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 23, 0,
+ 1, 0, 0, 0,160,158, 92, 10, 31, 0, 24, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 25, 0, 1, 0, 0, 0,160,158, 92, 10,
+ 31, 0, 26, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 27, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 28, 0, 1, 0, 0, 0,
+160,158, 92, 10, 31, 0, 29, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 30, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 31, 0,
+ 1, 0, 0, 0,160,158, 92, 10, 31, 0, 32, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 33, 0, 1, 0, 0, 0,160,158, 92, 10,
+ 31, 0, 34, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 35, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 36, 0, 1, 0, 0, 0,
+160,158, 92, 10, 31, 0, 37, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 38, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 39, 0,
+ 1, 0, 0, 0,160,158, 92, 10, 31, 0, 40, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 41, 0, 1, 0, 0, 0,160,158, 92, 10,
+ 31, 0, 42, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 43, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 44, 0, 1, 0, 0, 0,
+160,158, 92, 10, 31, 0, 45, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 46, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 47, 0,
+ 1, 0, 0, 0,160,158, 92, 10, 31, 0, 48, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 49, 0, 1, 0, 0, 0,160,158, 92, 10,
+ 31, 0, 50, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 51, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 52, 0, 1, 0, 0, 0,
+160,158, 92, 10, 31, 0, 53, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 54, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 55, 0,
+ 1, 0, 0, 0,160,158, 92, 10, 31, 0, 56, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 57, 0, 1, 0, 0, 0,160,158, 92, 10,
+ 31, 0, 58, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 59, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 60, 0, 1, 0, 0, 0,
+160,158, 92, 10, 31, 0, 61, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 62, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 63, 0,
+ 1, 0, 0, 0,160,158, 92, 10, 31, 0, 64, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 65, 0, 1, 0, 0, 0,160,158, 92, 10,
+ 31, 0, 66, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 67, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 68, 0, 1, 0, 0, 0,
+160,158, 92, 10, 31, 0, 69, 0, 1, 0, 0, 0,160,158, 92, 10, 31, 0, 0, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 1, 0,
+ 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 2, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 3, 0, 1, 0, 0, 0, 40,163, 92, 10,
+ 31, 0, 4, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 5, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 6, 0, 1, 0, 0, 0,
+ 40,163, 92, 10, 31, 0, 7, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 8, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 9, 0,
+ 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 10, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 11, 0, 1, 0, 0, 0, 40,163, 92, 10,
+ 31, 0, 12, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 13, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 14, 0, 1, 0, 0, 0,
+ 40,163, 92, 10, 31, 0, 15, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 16, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 17, 0,
+ 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 18, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 19, 0, 1, 0, 0, 0, 40,163, 92, 10,
+ 31, 0, 20, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 21, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 22, 0, 1, 0, 0, 0,
+ 40,163, 92, 10, 31, 0, 23, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 24, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 25, 0,
+ 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 26, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 27, 0, 1, 0, 0, 0, 40,163, 92, 10,
+ 31, 0, 28, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 29, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 30, 0, 1, 0, 0, 0,
+ 40,163, 92, 10, 31, 0, 31, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 32, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 33, 0,
+ 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 34, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 35, 0, 1, 0, 0, 0, 40,163, 92, 10,
+ 31, 0, 36, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 37, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 38, 0, 1, 0, 0, 0,
+ 40,163, 92, 10, 31, 0, 39, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 40, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 41, 0,
+ 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 42, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 43, 0, 1, 0, 0, 0, 40,163, 92, 10,
+ 31, 0, 44, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 45, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 46, 0, 1, 0, 0, 0,
+ 40,163, 92, 10, 31, 0, 47, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 48, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 49, 0,
+ 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 50, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 51, 0, 1, 0, 0, 0, 40,163, 92, 10,
+ 31, 0, 52, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 53, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 54, 0, 1, 0, 0, 0,
+ 40,163, 92, 10, 31, 0, 55, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 56, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 57, 0,
+ 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 58, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 59, 0, 1, 0, 0, 0, 40,163, 92, 10,
+ 31, 0, 60, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 61, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 62, 0, 1, 0, 0, 0,
+ 40,163, 92, 10, 31, 0, 63, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 64, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 65, 0,
+ 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 66, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 67, 0, 1, 0, 0, 0, 40,163, 92, 10,
+ 31, 0, 68, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 69, 0, 1, 0, 0, 0, 40,163, 92, 10, 31, 0, 0, 0, 1, 0, 0, 0,
+176,167, 92, 10, 31, 0, 1, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 2, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 3, 0,
+ 1, 0, 0, 0,176,167, 92, 10, 31, 0, 4, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 5, 0, 1, 0, 0, 0,176,167, 92, 10,
+ 31, 0, 6, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 7, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 8, 0, 1, 0, 0, 0,
+176,167, 92, 10, 31, 0, 9, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 10, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 11, 0,
+ 1, 0, 0, 0,176,167, 92, 10, 31, 0, 12, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 13, 0, 1, 0, 0, 0,176,167, 92, 10,
+ 31, 0, 14, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 15, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 16, 0, 1, 0, 0, 0,
+176,167, 92, 10, 31, 0, 17, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 18, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 19, 0,
+ 1, 0, 0, 0,176,167, 92, 10, 31, 0, 20, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 21, 0, 1, 0, 0, 0,176,167, 92, 10,
+ 31, 0, 22, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 23, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 24, 0, 1, 0, 0, 0,
+176,167, 92, 10, 31, 0, 25, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 26, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 27, 0,
+ 1, 0, 0, 0,176,167, 92, 10, 31, 0, 28, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 29, 0, 1, 0, 0, 0,176,167, 92, 10,
+ 31, 0, 30, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 31, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 32, 0, 1, 0, 0, 0,
+176,167, 92, 10, 31, 0, 33, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 34, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 35, 0,
+ 1, 0, 0, 0,176,167, 92, 10, 31, 0, 36, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 37, 0, 1, 0, 0, 0,176,167, 92, 10,
+ 31, 0, 38, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 39, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 40, 0, 1, 0, 0, 0,
+176,167, 92, 10, 31, 0, 41, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 42, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 43, 0,
+ 1, 0, 0, 0,176,167, 92, 10, 31, 0, 44, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 45, 0, 1, 0, 0, 0,176,167, 92, 10,
+ 31, 0, 46, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 47, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 48, 0, 1, 0, 0, 0,
+176,167, 92, 10, 31, 0, 49, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 50, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 51, 0,
+ 1, 0, 0, 0,176,167, 92, 10, 31, 0, 52, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 53, 0, 1, 0, 0, 0,176,167, 92, 10,
+ 31, 0, 54, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 55, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 56, 0, 1, 0, 0, 0,
+176,167, 92, 10, 31, 0, 57, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 58, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 59, 0,
+ 1, 0, 0, 0,176,167, 92, 10, 31, 0, 60, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 61, 0, 1, 0, 0, 0,176,167, 92, 10,
+ 31, 0, 62, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 63, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 64, 0, 1, 0, 0, 0,
+176,167, 92, 10, 31, 0, 65, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 66, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 67, 0,
+ 1, 0, 0, 0,176,167, 92, 10, 31, 0, 68, 0, 1, 0, 0, 0,176,167, 92, 10, 31, 0, 69, 0, 1, 0, 0, 0,176,167, 92, 10,
+ 31, 0, 0, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 1, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 2, 0, 1, 0, 0, 0,
+ 56,172, 92, 10, 31, 0, 3, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 4, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 5, 0,
+ 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 6, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 7, 0, 1, 0, 0, 0, 56,172, 92, 10,
+ 31, 0, 8, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 9, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 10, 0, 1, 0, 0, 0,
+ 56,172, 92, 10, 31, 0, 11, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 12, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 13, 0,
+ 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 14, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 15, 0, 1, 0, 0, 0, 56,172, 92, 10,
+ 31, 0, 16, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 17, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 18, 0, 1, 0, 0, 0,
+ 56,172, 92, 10, 31, 0, 19, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 20, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 21, 0,
+ 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 22, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 23, 0, 1, 0, 0, 0, 56,172, 92, 10,
+ 31, 0, 24, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 25, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 26, 0, 1, 0, 0, 0,
+ 56,172, 92, 10, 31, 0, 27, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 28, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 29, 0,
+ 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 30, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 31, 0, 1, 0, 0, 0, 56,172, 92, 10,
+ 31, 0, 32, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 33, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 34, 0, 1, 0, 0, 0,
+ 56,172, 92, 10, 31, 0, 35, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 36, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 37, 0,
+ 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 38, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 39, 0, 1, 0, 0, 0, 56,172, 92, 10,
+ 31, 0, 40, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 41, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 42, 0, 1, 0, 0, 0,
+ 56,172, 92, 10, 31, 0, 43, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 44, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 45, 0,
+ 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 46, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 47, 0, 1, 0, 0, 0, 56,172, 92, 10,
+ 31, 0, 48, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 49, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 50, 0, 1, 0, 0, 0,
+ 56,172, 92, 10, 31, 0, 51, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 52, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 53, 0,
+ 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 54, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 55, 0, 1, 0, 0, 0, 56,172, 92, 10,
+ 31, 0, 56, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 57, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 58, 0, 1, 0, 0, 0,
+ 56,172, 92, 10, 31, 0, 59, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 60, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 61, 0,
+ 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 62, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 63, 0, 1, 0, 0, 0, 56,172, 92, 10,
+ 31, 0, 64, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 65, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 66, 0, 1, 0, 0, 0,
+ 56,172, 92, 10, 31, 0, 67, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 68, 0, 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 69, 0,
+ 1, 0, 0, 0, 56,172, 92, 10, 31, 0, 0, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 1, 0, 1, 0, 0, 0,192,176, 92, 10,
+ 31, 0, 2, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 3, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 4, 0, 1, 0, 0, 0,
+192,176, 92, 10, 31, 0, 5, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 6, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 7, 0,
+ 1, 0, 0, 0,192,176, 92, 10, 31, 0, 8, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 9, 0, 1, 0, 0, 0,192,176, 92, 10,
+ 31, 0, 10, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 11, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 12, 0, 1, 0, 0, 0,
+192,176, 92, 10, 31, 0, 13, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 14, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 15, 0,
+ 1, 0, 0, 0,192,176, 92, 10, 31, 0, 16, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 17, 0, 1, 0, 0, 0,192,176, 92, 10,
+ 31, 0, 18, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 19, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 20, 0, 1, 0, 0, 0,
+192,176, 92, 10, 31, 0, 21, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 22, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 23, 0,
+ 1, 0, 0, 0,192,176, 92, 10, 31, 0, 24, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 25, 0, 1, 0, 0, 0,192,176, 92, 10,
+ 31, 0, 26, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 27, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 28, 0, 1, 0, 0, 0,
+192,176, 92, 10, 31, 0, 29, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 30, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 31, 0,
+ 1, 0, 0, 0,192,176, 92, 10, 31, 0, 32, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 33, 0, 1, 0, 0, 0,192,176, 92, 10,
+ 31, 0, 34, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 35, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 36, 0, 1, 0, 0, 0,
+192,176, 92, 10, 31, 0, 37, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 38, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 39, 0,
+ 1, 0, 0, 0,192,176, 92, 10, 31, 0, 40, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 41, 0, 1, 0, 0, 0,192,176, 92, 10,
+ 31, 0, 42, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 43, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 44, 0, 1, 0, 0, 0,
+192,176, 92, 10, 31, 0, 45, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 46, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 47, 0,
+ 1, 0, 0, 0,192,176, 92, 10, 31, 0, 48, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 49, 0, 1, 0, 0, 0,192,176, 92, 10,
+ 31, 0, 50, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 51, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 52, 0, 1, 0, 0, 0,
+192,176, 92, 10, 31, 0, 53, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 54, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 55, 0,
+ 1, 0, 0, 0,192,176, 92, 10, 31, 0, 56, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 57, 0, 1, 0, 0, 0,192,176, 92, 10,
+ 31, 0, 58, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 59, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 60, 0, 1, 0, 0, 0,
+192,176, 92, 10, 31, 0, 61, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 62, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 63, 0,
+ 1, 0, 0, 0,192,176, 92, 10, 31, 0, 64, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 65, 0, 1, 0, 0, 0,192,176, 92, 10,
+ 31, 0, 66, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 67, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 68, 0, 1, 0, 0, 0,
+192,176, 92, 10, 31, 0, 69, 0, 1, 0, 0, 0,192,176, 92, 10, 31, 0, 0, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 1, 0,
+ 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 2, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 3, 0, 1, 0, 0, 0, 72,181, 92, 10,
+ 31, 0, 4, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 5, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 6, 0, 1, 0, 0, 0,
+ 72,181, 92, 10, 31, 0, 7, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 8, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 9, 0,
+ 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 10, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 11, 0, 1, 0, 0, 0, 72,181, 92, 10,
+ 31, 0, 12, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 13, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 14, 0, 1, 0, 0, 0,
+ 72,181, 92, 10, 31, 0, 15, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 16, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 17, 0,
+ 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 18, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 19, 0, 1, 0, 0, 0, 72,181, 92, 10,
+ 31, 0, 20, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 21, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 22, 0, 1, 0, 0, 0,
+ 72,181, 92, 10, 31, 0, 23, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 24, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 25, 0,
+ 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 26, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 27, 0, 1, 0, 0, 0, 72,181, 92, 10,
+ 31, 0, 28, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 29, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 30, 0, 1, 0, 0, 0,
+ 72,181, 92, 10, 31, 0, 31, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 32, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 33, 0,
+ 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 34, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 35, 0, 1, 0, 0, 0, 72,181, 92, 10,
+ 31, 0, 36, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 37, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 38, 0, 1, 0, 0, 0,
+ 72,181, 92, 10, 31, 0, 39, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 40, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 41, 0,
+ 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 42, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 43, 0, 1, 0, 0, 0, 72,181, 92, 10,
+ 31, 0, 44, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 45, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 46, 0, 1, 0, 0, 0,
+ 72,181, 92, 10, 31, 0, 47, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 48, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 49, 0,
+ 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 50, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 51, 0, 1, 0, 0, 0, 72,181, 92, 10,
+ 31, 0, 52, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 53, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 54, 0, 1, 0, 0, 0,
+ 72,181, 92, 10, 31, 0, 55, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 56, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 57, 0,
+ 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 58, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 59, 0, 1, 0, 0, 0, 72,181, 92, 10,
+ 31, 0, 60, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 61, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 62, 0, 1, 0, 0, 0,
+ 72,181, 92, 10, 31, 0, 63, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 64, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 65, 0,
+ 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 66, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 67, 0, 1, 0, 0, 0, 72,181, 92, 10,
+ 31, 0, 68, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 69, 0, 1, 0, 0, 0, 72,181, 92, 10, 31, 0, 0, 0, 1, 0, 0, 0,
+208,185, 92, 10, 31, 0, 1, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 2, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 3, 0,
+ 1, 0, 0, 0,208,185, 92, 10, 31, 0, 4, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 5, 0, 1, 0, 0, 0,208,185, 92, 10,
+ 31, 0, 6, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 7, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 8, 0, 1, 0, 0, 0,
+208,185, 92, 10, 31, 0, 9, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 10, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 11, 0,
+ 1, 0, 0, 0,208,185, 92, 10, 31, 0, 12, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 13, 0, 1, 0, 0, 0,208,185, 92, 10,
+ 31, 0, 14, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 15, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 16, 0, 1, 0, 0, 0,
+208,185, 92, 10, 31, 0, 17, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 18, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 19, 0,
+ 1, 0, 0, 0,208,185, 92, 10, 31, 0, 20, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 21, 0, 1, 0, 0, 0,208,185, 92, 10,
+ 31, 0, 22, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 23, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 24, 0, 1, 0, 0, 0,
+208,185, 92, 10, 31, 0, 25, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 26, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 27, 0,
+ 1, 0, 0, 0,208,185, 92, 10, 31, 0, 28, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 29, 0, 1, 0, 0, 0,208,185, 92, 10,
+ 31, 0, 30, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 31, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 32, 0, 1, 0, 0, 0,
+208,185, 92, 10, 31, 0, 33, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 34, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 35, 0,
+ 1, 0, 0, 0,208,185, 92, 10, 31, 0, 36, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 37, 0, 1, 0, 0, 0,208,185, 92, 10,
+ 31, 0, 38, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 39, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 40, 0, 1, 0, 0, 0,
+208,185, 92, 10, 31, 0, 41, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 42, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 43, 0,
+ 1, 0, 0, 0,208,185, 92, 10, 31, 0, 44, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 45, 0, 1, 0, 0, 0,208,185, 92, 10,
+ 31, 0, 46, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 47, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 48, 0, 1, 0, 0, 0,
+208,185, 92, 10, 31, 0, 49, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 50, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 51, 0,
+ 1, 0, 0, 0,208,185, 92, 10, 31, 0, 52, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 53, 0, 1, 0, 0, 0,208,185, 92, 10,
+ 31, 0, 54, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 55, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 56, 0, 1, 0, 0, 0,
+208,185, 92, 10, 31, 0, 57, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 58, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 59, 0,
+ 1, 0, 0, 0,208,185, 92, 10, 31, 0, 60, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 61, 0, 1, 0, 0, 0,208,185, 92, 10,
+ 31, 0, 62, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 63, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 64, 0, 1, 0, 0, 0,
+208,185, 92, 10, 31, 0, 65, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 66, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 67, 0,
+ 1, 0, 0, 0,208,185, 92, 10, 31, 0, 68, 0, 1, 0, 0, 0,208,185, 92, 10, 31, 0, 69, 0, 1, 0, 0, 0,208,185, 92, 10,
+ 31, 0, 0, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 1, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 2, 0, 1, 0, 0, 0,
+ 88,190, 92, 10, 31, 0, 3, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 4, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 5, 0,
+ 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 6, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 7, 0, 1, 0, 0, 0, 88,190, 92, 10,
+ 31, 0, 8, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 9, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 10, 0, 1, 0, 0, 0,
+ 88,190, 92, 10, 31, 0, 11, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 12, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 13, 0,
+ 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 14, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 15, 0, 1, 0, 0, 0, 88,190, 92, 10,
+ 31, 0, 16, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 17, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 18, 0, 1, 0, 0, 0,
+ 88,190, 92, 10, 31, 0, 19, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 20, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 21, 0,
+ 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 22, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 23, 0, 1, 0, 0, 0, 88,190, 92, 10,
+ 31, 0, 24, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 25, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 26, 0, 1, 0, 0, 0,
+ 88,190, 92, 10, 31, 0, 27, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 28, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 29, 0,
+ 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 30, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 31, 0, 1, 0, 0, 0, 88,190, 92, 10,
+ 31, 0, 32, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 33, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 34, 0, 1, 0, 0, 0,
+ 88,190, 92, 10, 31, 0, 35, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 36, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 37, 0,
+ 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 38, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 39, 0, 1, 0, 0, 0, 88,190, 92, 10,
+ 31, 0, 40, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 41, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 42, 0, 1, 0, 0, 0,
+ 88,190, 92, 10, 31, 0, 43, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 44, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 45, 0,
+ 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 46, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 47, 0, 1, 0, 0, 0, 88,190, 92, 10,
+ 31, 0, 48, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 49, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 50, 0, 1, 0, 0, 0,
+ 88,190, 92, 10, 31, 0, 51, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 52, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 53, 0,
+ 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 54, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 55, 0, 1, 0, 0, 0, 88,190, 92, 10,
+ 31, 0, 56, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 57, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 58, 0, 1, 0, 0, 0,
+ 88,190, 92, 10, 31, 0, 59, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 60, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 61, 0,
+ 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 62, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 63, 0, 1, 0, 0, 0, 88,190, 92, 10,
+ 31, 0, 64, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 65, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 66, 0, 1, 0, 0, 0,
+ 88,190, 92, 10, 31, 0, 67, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 68, 0, 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 69, 0,
+ 1, 0, 0, 0, 88,190, 92, 10, 31, 0, 0, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 1, 0, 1, 0, 0, 0,224,194, 92, 10,
+ 31, 0, 2, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 3, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 4, 0, 1, 0, 0, 0,
+224,194, 92, 10, 31, 0, 5, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 6, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 7, 0,
+ 1, 0, 0, 0,224,194, 92, 10, 31, 0, 8, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 9, 0, 1, 0, 0, 0,224,194, 92, 10,
+ 31, 0, 10, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 11, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 12, 0, 1, 0, 0, 0,
+224,194, 92, 10, 31, 0, 13, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 14, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 15, 0,
+ 1, 0, 0, 0,224,194, 92, 10, 31, 0, 16, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 17, 0, 1, 0, 0, 0,224,194, 92, 10,
+ 31, 0, 18, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 19, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 20, 0, 1, 0, 0, 0,
+224,194, 92, 10, 31, 0, 21, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 22, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 23, 0,
+ 1, 0, 0, 0,224,194, 92, 10, 31, 0, 24, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 25, 0, 1, 0, 0, 0,224,194, 92, 10,
+ 31, 0, 26, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 27, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 28, 0, 1, 0, 0, 0,
+224,194, 92, 10, 31, 0, 29, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 30, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 31, 0,
+ 1, 0, 0, 0,224,194, 92, 10, 31, 0, 32, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 33, 0, 1, 0, 0, 0,224,194, 92, 10,
+ 31, 0, 34, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 35, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 36, 0, 1, 0, 0, 0,
+224,194, 92, 10, 31, 0, 37, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 38, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 39, 0,
+ 1, 0, 0, 0,224,194, 92, 10, 31, 0, 40, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 41, 0, 1, 0, 0, 0,224,194, 92, 10,
+ 31, 0, 42, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 43, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 44, 0, 1, 0, 0, 0,
+224,194, 92, 10, 31, 0, 45, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 46, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 47, 0,
+ 1, 0, 0, 0,224,194, 92, 10, 31, 0, 48, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 49, 0, 1, 0, 0, 0,224,194, 92, 10,
+ 31, 0, 50, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 51, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 52, 0, 1, 0, 0, 0,
+224,194, 92, 10, 31, 0, 53, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 54, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 55, 0,
+ 1, 0, 0, 0,224,194, 92, 10, 31, 0, 56, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 57, 0, 1, 0, 0, 0,224,194, 92, 10,
+ 31, 0, 58, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 59, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 60, 0, 1, 0, 0, 0,
+224,194, 92, 10, 31, 0, 61, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 62, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 63, 0,
+ 1, 0, 0, 0,224,194, 92, 10, 31, 0, 64, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 65, 0, 1, 0, 0, 0,224,194, 92, 10,
+ 31, 0, 66, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 67, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 68, 0, 1, 0, 0, 0,
+224,194, 92, 10, 31, 0, 69, 0, 1, 0, 0, 0,224,194, 92, 10, 31, 0, 0, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 1, 0,
+ 1, 0, 0, 0,104,199, 92, 10, 31, 0, 2, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 3, 0, 1, 0, 0, 0,104,199, 92, 10,
+ 31, 0, 4, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 5, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 6, 0, 1, 0, 0, 0,
+104,199, 92, 10, 31, 0, 7, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 8, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 9, 0,
+ 1, 0, 0, 0,104,199, 92, 10, 31, 0, 10, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 11, 0, 1, 0, 0, 0,104,199, 92, 10,
+ 31, 0, 12, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 13, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 14, 0, 1, 0, 0, 0,
+104,199, 92, 10, 31, 0, 15, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 16, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 17, 0,
+ 1, 0, 0, 0,104,199, 92, 10, 31, 0, 18, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 19, 0, 1, 0, 0, 0,104,199, 92, 10,
+ 31, 0, 20, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 21, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 22, 0, 1, 0, 0, 0,
+104,199, 92, 10, 31, 0, 23, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 24, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 25, 0,
+ 1, 0, 0, 0,104,199, 92, 10, 31, 0, 26, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 27, 0, 1, 0, 0, 0,104,199, 92, 10,
+ 31, 0, 28, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 29, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 30, 0, 1, 0, 0, 0,
+104,199, 92, 10, 31, 0, 31, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 32, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 33, 0,
+ 1, 0, 0, 0,104,199, 92, 10, 31, 0, 34, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 35, 0, 1, 0, 0, 0,104,199, 92, 10,
+ 31, 0, 36, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 37, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 38, 0, 1, 0, 0, 0,
+104,199, 92, 10, 31, 0, 39, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 40, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 41, 0,
+ 1, 0, 0, 0,104,199, 92, 10, 31, 0, 42, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 43, 0, 1, 0, 0, 0,104,199, 92, 10,
+ 31, 0, 44, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 45, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 46, 0, 1, 0, 0, 0,
+104,199, 92, 10, 31, 0, 47, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 48, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 49, 0,
+ 1, 0, 0, 0,104,199, 92, 10, 31, 0, 50, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 51, 0, 1, 0, 0, 0,104,199, 92, 10,
+ 31, 0, 52, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 53, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 54, 0, 1, 0, 0, 0,
+104,199, 92, 10, 31, 0, 55, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 56, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 57, 0,
+ 1, 0, 0, 0,104,199, 92, 10, 31, 0, 58, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 59, 0, 1, 0, 0, 0,104,199, 92, 10,
+ 31, 0, 60, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 61, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 62, 0, 1, 0, 0, 0,
+104,199, 92, 10, 31, 0, 63, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 64, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 65, 0,
+ 1, 0, 0, 0,104,199, 92, 10, 31, 0, 66, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 67, 0, 1, 0, 0, 0,104,199, 92, 10,
+ 31, 0, 68, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 69, 0, 1, 0, 0, 0,104,199, 92, 10, 31, 0, 0, 0, 1, 0, 0, 0,
+240,203, 92, 10, 31, 0, 1, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 2, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 3, 0,
+ 1, 0, 0, 0,240,203, 92, 10, 31, 0, 4, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 5, 0, 1, 0, 0, 0,240,203, 92, 10,
+ 31, 0, 6, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 7, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 8, 0, 1, 0, 0, 0,
+240,203, 92, 10, 31, 0, 9, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 10, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 11, 0,
+ 1, 0, 0, 0,240,203, 92, 10, 31, 0, 12, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 13, 0, 1, 0, 0, 0,240,203, 92, 10,
+ 31, 0, 14, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 15, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 16, 0, 1, 0, 0, 0,
+240,203, 92, 10, 31, 0, 17, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 18, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 19, 0,
+ 1, 0, 0, 0,240,203, 92, 10, 31, 0, 20, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 21, 0, 1, 0, 0, 0,240,203, 92, 10,
+ 31, 0, 22, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 23, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 24, 0, 1, 0, 0, 0,
+240,203, 92, 10, 31, 0, 25, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 26, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 27, 0,
+ 1, 0, 0, 0,240,203, 92, 10, 31, 0, 28, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 29, 0, 1, 0, 0, 0,240,203, 92, 10,
+ 31, 0, 30, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 31, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 32, 0, 1, 0, 0, 0,
+240,203, 92, 10, 31, 0, 33, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 34, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 35, 0,
+ 1, 0, 0, 0,240,203, 92, 10, 31, 0, 36, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 37, 0, 1, 0, 0, 0,240,203, 92, 10,
+ 31, 0, 38, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 39, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 40, 0, 1, 0, 0, 0,
+240,203, 92, 10, 31, 0, 41, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 42, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 43, 0,
+ 1, 0, 0, 0,240,203, 92, 10, 31, 0, 44, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 45, 0, 1, 0, 0, 0,240,203, 92, 10,
+ 31, 0, 46, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 47, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 48, 0, 1, 0, 0, 0,
+240,203, 92, 10, 31, 0, 49, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 50, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 51, 0,
+ 1, 0, 0, 0,240,203, 92, 10, 31, 0, 52, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 53, 0, 1, 0, 0, 0,240,203, 92, 10,
+ 31, 0, 54, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 55, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 56, 0, 1, 0, 0, 0,
+240,203, 92, 10, 31, 0, 57, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 58, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 59, 0,
+ 1, 0, 0, 0,240,203, 92, 10, 31, 0, 60, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 61, 0, 1, 0, 0, 0,240,203, 92, 10,
+ 31, 0, 62, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 63, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 64, 0, 1, 0, 0, 0,
+240,203, 92, 10, 31, 0, 65, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 66, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 67, 0,
+ 1, 0, 0, 0,240,203, 92, 10, 31, 0, 68, 0, 1, 0, 0, 0,240,203, 92, 10, 31, 0, 69, 0, 1, 0, 0, 0,240,203, 92, 10,
+ 31, 0, 0, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 1, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 2, 0, 1, 0, 0, 0,
+120,208, 92, 10, 31, 0, 3, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 4, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 5, 0,
+ 1, 0, 0, 0,120,208, 92, 10, 31, 0, 6, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 7, 0, 1, 0, 0, 0,120,208, 92, 10,
+ 31, 0, 8, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 9, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 10, 0, 1, 0, 0, 0,
+120,208, 92, 10, 31, 0, 11, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 12, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 13, 0,
+ 1, 0, 0, 0,120,208, 92, 10, 31, 0, 14, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 15, 0, 1, 0, 0, 0,120,208, 92, 10,
+ 31, 0, 16, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 17, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 18, 0, 1, 0, 0, 0,
+120,208, 92, 10, 31, 0, 19, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 20, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 21, 0,
+ 1, 0, 0, 0,120,208, 92, 10, 31, 0, 22, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 23, 0, 1, 0, 0, 0,120,208, 92, 10,
+ 31, 0, 24, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 25, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 26, 0, 1, 0, 0, 0,
+120,208, 92, 10, 31, 0, 27, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 28, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 29, 0,
+ 1, 0, 0, 0,120,208, 92, 10, 31, 0, 30, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 31, 0, 1, 0, 0, 0,120,208, 92, 10,
+ 31, 0, 32, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 33, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 34, 0, 1, 0, 0, 0,
+120,208, 92, 10, 31, 0, 35, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 36, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 37, 0,
+ 1, 0, 0, 0,120,208, 92, 10, 31, 0, 38, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 39, 0, 1, 0, 0, 0,120,208, 92, 10,
+ 31, 0, 40, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 41, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 42, 0, 1, 0, 0, 0,
+120,208, 92, 10, 31, 0, 43, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 44, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 45, 0,
+ 1, 0, 0, 0,120,208, 92, 10, 31, 0, 46, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 47, 0, 1, 0, 0, 0,120,208, 92, 10,
+ 31, 0, 48, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 49, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 50, 0, 1, 0, 0, 0,
+120,208, 92, 10, 31, 0, 51, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 52, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 53, 0,
+ 1, 0, 0, 0,120,208, 92, 10, 31, 0, 54, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 55, 0, 1, 0, 0, 0,120,208, 92, 10,
+ 31, 0, 56, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 57, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 58, 0, 1, 0, 0, 0,
+120,208, 92, 10, 31, 0, 59, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 60, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 61, 0,
+ 1, 0, 0, 0,120,208, 92, 10, 31, 0, 62, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 63, 0, 1, 0, 0, 0,120,208, 92, 10,
+ 31, 0, 64, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 65, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 66, 0, 1, 0, 0, 0,
+120,208, 92, 10, 31, 0, 67, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 68, 0, 1, 0, 0, 0,120,208, 92, 10, 31, 0, 69, 0,
+ 1, 0, 0, 0,120,208, 92, 10, 31, 0, 0, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 1, 0, 1, 0, 0, 0, 0,213, 92, 10,
+ 31, 0, 2, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 3, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 4, 0, 1, 0, 0, 0,
+ 0,213, 92, 10, 31, 0, 5, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 6, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 7, 0,
+ 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 8, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 9, 0, 1, 0, 0, 0, 0,213, 92, 10,
+ 31, 0, 10, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 11, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 12, 0, 1, 0, 0, 0,
+ 0,213, 92, 10, 31, 0, 13, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 14, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 15, 0,
+ 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 16, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 17, 0, 1, 0, 0, 0, 0,213, 92, 10,
+ 31, 0, 18, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 19, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 20, 0, 1, 0, 0, 0,
+ 0,213, 92, 10, 31, 0, 21, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 22, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 23, 0,
+ 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 24, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 25, 0, 1, 0, 0, 0, 0,213, 92, 10,
+ 31, 0, 26, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 27, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 28, 0, 1, 0, 0, 0,
+ 0,213, 92, 10, 31, 0, 29, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 30, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 31, 0,
+ 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 32, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 33, 0, 1, 0, 0, 0, 0,213, 92, 10,
+ 31, 0, 34, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 35, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 36, 0, 1, 0, 0, 0,
+ 0,213, 92, 10, 31, 0, 37, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 38, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 39, 0,
+ 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 40, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 41, 0, 1, 0, 0, 0, 0,213, 92, 10,
+ 31, 0, 42, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 43, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 44, 0, 1, 0, 0, 0,
+ 0,213, 92, 10, 31, 0, 45, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 46, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 47, 0,
+ 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 48, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 49, 0, 1, 0, 0, 0, 0,213, 92, 10,
+ 31, 0, 50, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 51, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 52, 0, 1, 0, 0, 0,
+ 0,213, 92, 10, 31, 0, 53, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 54, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 55, 0,
+ 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 56, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 57, 0, 1, 0, 0, 0, 0,213, 92, 10,
+ 31, 0, 58, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 59, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 60, 0, 1, 0, 0, 0,
+ 0,213, 92, 10, 31, 0, 61, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 62, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 63, 0,
+ 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 64, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 65, 0, 1, 0, 0, 0, 0,213, 92, 10,
+ 31, 0, 66, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 67, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 68, 0, 1, 0, 0, 0,
+ 0,213, 92, 10, 31, 0, 69, 0, 1, 0, 0, 0, 0,213, 92, 10, 31, 0, 0, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 1, 0,
+ 1, 0, 0, 0,136,217, 92, 10, 31, 0, 2, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 3, 0, 1, 0, 0, 0,136,217, 92, 10,
+ 31, 0, 4, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 5, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 6, 0, 1, 0, 0, 0,
+136,217, 92, 10, 31, 0, 7, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 8, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 9, 0,
+ 1, 0, 0, 0,136,217, 92, 10, 31, 0, 10, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 11, 0, 1, 0, 0, 0,136,217, 92, 10,
+ 31, 0, 12, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 13, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 14, 0, 1, 0, 0, 0,
+136,217, 92, 10, 31, 0, 15, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 16, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 17, 0,
+ 1, 0, 0, 0,136,217, 92, 10, 31, 0, 18, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 19, 0, 1, 0, 0, 0,136,217, 92, 10,
+ 31, 0, 20, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 21, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 22, 0, 1, 0, 0, 0,
+136,217, 92, 10, 31, 0, 23, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 24, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 25, 0,
+ 1, 0, 0, 0,136,217, 92, 10, 31, 0, 26, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 27, 0, 1, 0, 0, 0,136,217, 92, 10,
+ 31, 0, 28, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 29, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 30, 0, 1, 0, 0, 0,
+136,217, 92, 10, 31, 0, 31, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 32, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 33, 0,
+ 1, 0, 0, 0,136,217, 92, 10, 31, 0, 34, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 35, 0, 1, 0, 0, 0,136,217, 92, 10,
+ 31, 0, 36, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 37, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 38, 0, 1, 0, 0, 0,
+136,217, 92, 10, 31, 0, 39, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 40, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 41, 0,
+ 1, 0, 0, 0,136,217, 92, 10, 31, 0, 42, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 43, 0, 1, 0, 0, 0,136,217, 92, 10,
+ 31, 0, 44, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 45, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 46, 0, 1, 0, 0, 0,
+136,217, 92, 10, 31, 0, 47, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 48, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 49, 0,
+ 1, 0, 0, 0,136,217, 92, 10, 31, 0, 50, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 51, 0, 1, 0, 0, 0,136,217, 92, 10,
+ 31, 0, 52, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 53, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 54, 0, 1, 0, 0, 0,
+136,217, 92, 10, 31, 0, 55, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 56, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 57, 0,
+ 1, 0, 0, 0,136,217, 92, 10, 31, 0, 58, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 59, 0, 1, 0, 0, 0,136,217, 92, 10,
+ 31, 0, 60, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 61, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 62, 0, 1, 0, 0, 0,
+136,217, 92, 10, 31, 0, 63, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 64, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 65, 0,
+ 1, 0, 0, 0,136,217, 92, 10, 31, 0, 66, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 67, 0, 1, 0, 0, 0,136,217, 92, 10,
+ 31, 0, 68, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 69, 0, 1, 0, 0, 0,136,217, 92, 10, 31, 0, 0, 0, 1, 0, 0, 0,
+216,239, 90, 10, 31, 0, 1, 0, 1, 0, 0, 0,216,239, 90, 10, 31, 0, 2, 0, 1, 0, 0, 0,216,239, 90, 10, 31, 0, 3, 0,
+ 1, 0, 0, 0,216,239, 90, 10, 31, 0, 4, 0, 1, 0, 0, 0,216,239, 90, 10, 31, 0, 5, 0, 1, 0, 0, 0,216,239, 90, 10,
+ 31, 0, 6, 0, 1, 0, 0, 0,216,239, 90, 10, 31, 0, 7, 0, 1, 0, 0, 0,216,239, 90, 10, 31, 0, 8, 0, 1, 0, 0, 0,
+216,239, 90, 10, 31, 0, 9, 0, 1, 0, 0, 0,216,239, 90, 10, 31, 0, 10, 0, 1, 0, 0, 0,216,239, 90, 10, 31, 0, 11, 0,
+ 1, 0, 0, 0,216,239, 90, 10, 31, 0, 12, 0, 1, 0, 0, 0,216,239, 90, 10, 31, 0, 13, 0, 1, 0, 0, 0,216,239, 90, 10,
+ 31, 0, 14, 0, 1, 0, 0, 0,216,239, 90, 10, 31, 0, 15, 0, 1, 0, 0, 0,216,239, 90, 10, 31, 0, 16, 0, 1, 0, 0, 0,
+216,239, 90, 10, 31, 0, 17, 0, 1, 0, 0, 0,216,239, 90, 10, 31, 0, 18, 0, 1, 0, 0, 0,216,239, 90, 10, 31, 0, 19, 0,
+ 1, 0, 0, 0,216,239, 90, 10, 31, 0, 20, 0, 1, 0, 0, 0,216,239, 90, 10, 31, 0, 21, 0, 1, 0, 0, 0,216,239, 90, 10,
+ 31, 0, 22, 0, 1, 0, 0, 0,216,239, 90, 10, 31, 0, 23, 0, 1, 0, 0, 0,216,239, 90, 10, 31, 0, 24, 0, 1, 0, 0, 0,
+216,239, 90, 10, 31, 0, 25, 0, 1, 0, 0, 0,216,239, 90, 10, 31, 0, 0, 0, 1, 0, 0, 0,112,240, 90, 10, 31, 0, 1, 0,
+ 1, 0, 0, 0,112,240, 90, 10, 31, 0, 2, 0, 1, 0, 0, 0,112,240, 90, 10, 31, 0, 3, 0, 1, 0, 0, 0,112,240, 90, 10,
+ 31, 0, 4, 0, 1, 0, 0, 0,112,240, 90, 10, 31, 0, 5, 0, 1, 0, 0, 0,112,240, 90, 10, 31, 0, 6, 0, 1, 0, 0, 0,
+112,240, 90, 10, 31, 0, 7, 0, 1, 0, 0, 0,112,240, 90, 10, 31, 0, 8, 0, 1, 0, 0, 0,112,240, 90, 10, 31, 0, 9, 0,
+ 1, 0, 0, 0,112,240, 90, 10, 31, 0, 10, 0, 1, 0, 0, 0,112,240, 90, 10, 31, 0, 11, 0, 1, 0, 0, 0,112,240, 90, 10,
+ 31, 0, 12, 0, 1, 0, 0, 0,112,240, 90, 10, 31, 0, 13, 0, 1, 0, 0, 0,112,240, 90, 10, 31, 0, 14, 0, 1, 0, 0, 0,
+112,240, 90, 10, 31, 0, 15, 0, 1, 0, 0, 0,112,240, 90, 10, 31, 0, 16, 0, 1, 0, 0, 0,112,240, 90, 10, 31, 0, 17, 0,
+ 1, 0, 0, 0,112,240, 90, 10, 31, 0, 18, 0, 1, 0, 0, 0,112,240, 90, 10, 31, 0, 19, 0, 1, 0, 0, 0,112,240, 90, 10,
+ 31, 0, 20, 0, 1, 0, 0, 0,112,240, 90, 10, 31, 0, 21, 0, 1, 0, 0, 0,112,240, 90, 10, 31, 0, 22, 0, 1, 0, 0, 0,
+112,240, 90, 10, 31, 0, 23, 0, 1, 0, 0, 0,112,240, 90, 10, 31, 0, 24, 0, 1, 0, 0, 0,112,240, 90, 10, 31, 0, 25, 0,
+ 1, 0, 0, 0,112,240, 90, 10, 31, 0, 26, 0, 1, 0, 0, 0,112,240, 90, 10, 31, 0, 27, 0, 1, 0, 0, 0,112,240, 90, 10,
+ 31, 0, 28, 0, 1, 0, 0, 0,112,240, 90, 10, 31, 0, 29, 0, 1, 0, 0, 0,112,240, 90, 10, 31, 0, 30, 0, 1, 0, 0, 0,
+112,240, 90, 10, 31, 0, 0, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 1, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 2, 0,
+ 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 3, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 4, 0, 1, 0, 0, 0, 40, 4, 91, 10,
+ 31, 0, 5, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 6, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 7, 0, 1, 0, 0, 0,
+ 40, 4, 91, 10, 31, 0, 8, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 9, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 10, 0,
+ 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 11, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 12, 0, 1, 0, 0, 0, 40, 4, 91, 10,
+ 31, 0, 13, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 14, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 15, 0, 1, 0, 0, 0,
+ 40, 4, 91, 10, 31, 0, 16, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 17, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 18, 0,
+ 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 19, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 20, 0, 1, 0, 0, 0, 40, 4, 91, 10,
+ 31, 0, 21, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 22, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 23, 0, 1, 0, 0, 0,
+ 40, 4, 91, 10, 31, 0, 24, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 25, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 26, 0,
+ 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 27, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 28, 0, 1, 0, 0, 0, 40, 4, 91, 10,
+ 31, 0, 29, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 30, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 31, 0, 1, 0, 0, 0,
+ 40, 4, 91, 10, 31, 0, 32, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 33, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 34, 0,
+ 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 35, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 36, 0, 1, 0, 0, 0, 40, 4, 91, 10,
+ 31, 0, 37, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 38, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 39, 0, 1, 0, 0, 0,
+ 40, 4, 91, 10, 31, 0, 40, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 41, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 42, 0,
+ 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 43, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 44, 0, 1, 0, 0, 0, 40, 4, 91, 10,
+ 31, 0, 45, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 46, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 47, 0, 1, 0, 0, 0,
+ 40, 4, 91, 10, 31, 0, 48, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 49, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 50, 0,
+ 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 51, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 52, 0, 1, 0, 0, 0, 40, 4, 91, 10,
+ 31, 0, 53, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 54, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 55, 0, 1, 0, 0, 0,
+ 40, 4, 91, 10, 31, 0, 56, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 57, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 58, 0,
+ 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 59, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 60, 0, 1, 0, 0, 0, 40, 4, 91, 10,
+ 31, 0, 61, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 62, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 63, 0, 1, 0, 0, 0,
+ 40, 4, 91, 10, 31, 0, 64, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 65, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 66, 0,
+ 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 67, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 68, 0, 1, 0, 0, 0, 40, 4, 91, 10,
+ 31, 0, 69, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 70, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 71, 0, 1, 0, 0, 0,
+ 40, 4, 91, 10, 31, 0, 72, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 73, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 74, 0,
+ 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 75, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 76, 0, 1, 0, 0, 0, 40, 4, 91, 10,
+ 31, 0, 77, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 78, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 79, 0, 1, 0, 0, 0,
+ 40, 4, 91, 10, 31, 0, 80, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 81, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 82, 0,
+ 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 83, 0, 1, 0, 0, 0, 40, 4, 91, 10, 31, 0, 0, 0, 1, 0, 0, 0,240, 74, 92, 10,
+ 31, 0, 1, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 2, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 3, 0, 1, 0, 0, 0,
+240, 74, 92, 10, 31, 0, 4, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 5, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 6, 0,
+ 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 7, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 8, 0, 1, 0, 0, 0,240, 74, 92, 10,
+ 31, 0, 9, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 10, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 11, 0, 1, 0, 0, 0,
+240, 74, 92, 10, 31, 0, 12, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 13, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 14, 0,
+ 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 15, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 16, 0, 1, 0, 0, 0,240, 74, 92, 10,
+ 31, 0, 17, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 18, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 19, 0, 1, 0, 0, 0,
+240, 74, 92, 10, 31, 0, 20, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 21, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 22, 0,
+ 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 23, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 24, 0, 1, 0, 0, 0,240, 74, 92, 10,
+ 31, 0, 25, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 26, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 27, 0, 1, 0, 0, 0,
+240, 74, 92, 10, 31, 0, 28, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 29, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 30, 0,
+ 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 31, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 32, 0, 1, 0, 0, 0,240, 74, 92, 10,
+ 31, 0, 33, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 34, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 35, 0, 1, 0, 0, 0,
+240, 74, 92, 10, 31, 0, 36, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 37, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 38, 0,
+ 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 39, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 40, 0, 1, 0, 0, 0,240, 74, 92, 10,
+ 31, 0, 41, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 42, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 43, 0, 1, 0, 0, 0,
+240, 74, 92, 10, 31, 0, 44, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 45, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 46, 0,
+ 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 47, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 48, 0, 1, 0, 0, 0,240, 74, 92, 10,
+ 31, 0, 49, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 50, 0, 1, 0, 0, 0,240, 74, 92, 10, 31, 0, 51, 0, 1, 0, 0, 0,
+240, 74, 92, 10, 31, 0, 0, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 1, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 2, 0,
+ 1, 0, 0, 0,208,245, 90, 10, 31, 0, 3, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 4, 0, 1, 0, 0, 0,208,245, 90, 10,
+ 31, 0, 5, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 6, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 7, 0, 1, 0, 0, 0,
+208,245, 90, 10, 31, 0, 8, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 9, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 10, 0,
+ 1, 0, 0, 0,208,245, 90, 10, 31, 0, 11, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 12, 0, 1, 0, 0, 0,208,245, 90, 10,
+ 31, 0, 13, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 14, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 15, 0, 1, 0, 0, 0,
+208,245, 90, 10, 31, 0, 16, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 17, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 18, 0,
+ 1, 0, 0, 0,208,245, 90, 10, 31, 0, 19, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 20, 0, 1, 0, 0, 0,208,245, 90, 10,
+ 31, 0, 21, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 22, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 23, 0, 1, 0, 0, 0,
+208,245, 90, 10, 31, 0, 24, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 25, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 26, 0,
+ 1, 0, 0, 0,208,245, 90, 10, 31, 0, 27, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 28, 0, 1, 0, 0, 0,208,245, 90, 10,
+ 31, 0, 29, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 30, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 31, 0, 1, 0, 0, 0,
+208,245, 90, 10, 31, 0, 32, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 33, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 34, 0,
+ 1, 0, 0, 0,208,245, 90, 10, 31, 0, 35, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 36, 0, 1, 0, 0, 0,208,245, 90, 10,
+ 31, 0, 37, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 38, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 39, 0, 1, 0, 0, 0,
+208,245, 90, 10, 31, 0, 40, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 41, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 42, 0,
+ 1, 0, 0, 0,208,245, 90, 10, 31, 0, 43, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 44, 0, 1, 0, 0, 0,208,245, 90, 10,
+ 31, 0, 45, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 46, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 47, 0, 1, 0, 0, 0,
+208,245, 90, 10, 31, 0, 48, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 49, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 50, 0,
+ 1, 0, 0, 0,208,245, 90, 10, 31, 0, 51, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 52, 0, 1, 0, 0, 0,208,245, 90, 10,
+ 31, 0, 53, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 54, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 55, 0, 1, 0, 0, 0,
+208,245, 90, 10, 31, 0, 56, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 57, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 58, 0,
+ 1, 0, 0, 0,208,245, 90, 10, 31, 0, 59, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 60, 0, 1, 0, 0, 0,208,245, 90, 10,
+ 31, 0, 61, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 62, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 63, 0, 1, 0, 0, 0,
+208,245, 90, 10, 31, 0, 64, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 65, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 66, 0,
+ 1, 0, 0, 0,208,245, 90, 10, 31, 0, 67, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 68, 0, 1, 0, 0, 0,208,245, 90, 10,
+ 31, 0, 69, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 70, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 71, 0, 1, 0, 0, 0,
+208,245, 90, 10, 31, 0, 72, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 73, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 74, 0,
+ 1, 0, 0, 0,208,245, 90, 10, 31, 0, 75, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 76, 0, 1, 0, 0, 0,208,245, 90, 10,
+ 31, 0, 77, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 78, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 79, 0, 1, 0, 0, 0,
+208,245, 90, 10, 31, 0, 80, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 81, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 82, 0,
+ 1, 0, 0, 0,208,245, 90, 10, 31, 0, 83, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 84, 0, 1, 0, 0, 0,208,245, 90, 10,
+ 31, 0, 85, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 86, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 87, 0, 1, 0, 0, 0,
+208,245, 90, 10, 31, 0, 88, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 89, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 90, 0,
+ 1, 0, 0, 0,208,245, 90, 10, 31, 0, 91, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 92, 0, 1, 0, 0, 0,208,245, 90, 10,
+ 31, 0, 93, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 94, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 95, 0, 1, 0, 0, 0,
+208,245, 90, 10, 31, 0, 96, 0, 1, 0, 0, 0,208,245, 90, 10, 31, 0, 0, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 1, 0,
+ 1, 0, 0, 0,152,250, 90, 10, 31, 0, 2, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 3, 0, 1, 0, 0, 0,152,250, 90, 10,
+ 31, 0, 4, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 5, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 6, 0, 1, 0, 0, 0,
+152,250, 90, 10, 31, 0, 7, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 8, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 9, 0,
+ 1, 0, 0, 0,152,250, 90, 10, 31, 0, 10, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 11, 0, 1, 0, 0, 0,152,250, 90, 10,
+ 31, 0, 12, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 13, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 14, 0, 1, 0, 0, 0,
+152,250, 90, 10, 31, 0, 15, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 16, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 17, 0,
+ 1, 0, 0, 0,152,250, 90, 10, 31, 0, 18, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 19, 0, 1, 0, 0, 0,152,250, 90, 10,
+ 31, 0, 20, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 21, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 22, 0, 1, 0, 0, 0,
+152,250, 90, 10, 31, 0, 23, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 24, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 25, 0,
+ 1, 0, 0, 0,152,250, 90, 10, 31, 0, 26, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 27, 0, 1, 0, 0, 0,152,250, 90, 10,
+ 31, 0, 28, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 29, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 30, 0, 1, 0, 0, 0,
+152,250, 90, 10, 31, 0, 31, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 32, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 33, 0,
+ 1, 0, 0, 0,152,250, 90, 10, 31, 0, 34, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 35, 0, 1, 0, 0, 0,152,250, 90, 10,
+ 31, 0, 36, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 37, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 38, 0, 1, 0, 0, 0,
+152,250, 90, 10, 31, 0, 39, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 40, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 41, 0,
+ 1, 0, 0, 0,152,250, 90, 10, 31, 0, 42, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 43, 0, 1, 0, 0, 0,152,250, 90, 10,
+ 31, 0, 44, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 45, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 46, 0, 1, 0, 0, 0,
+152,250, 90, 10, 31, 0, 47, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 48, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 49, 0,
+ 1, 0, 0, 0,152,250, 90, 10, 31, 0, 50, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 51, 0, 1, 0, 0, 0,152,250, 90, 10,
+ 31, 0, 52, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 53, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 54, 0, 1, 0, 0, 0,
+152,250, 90, 10, 31, 0, 55, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 56, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 57, 0,
+ 1, 0, 0, 0,152,250, 90, 10, 31, 0, 58, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 59, 0, 1, 0, 0, 0,152,250, 90, 10,
+ 31, 0, 60, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 61, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 62, 0, 1, 0, 0, 0,
+152,250, 90, 10, 31, 0, 63, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 64, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 65, 0,
+ 1, 0, 0, 0,152,250, 90, 10, 31, 0, 66, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 67, 0, 1, 0, 0, 0,152,250, 90, 10,
+ 31, 0, 68, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 69, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 70, 0, 1, 0, 0, 0,
+152,250, 90, 10, 31, 0, 71, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 72, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 73, 0,
+ 1, 0, 0, 0,152,250, 90, 10, 31, 0, 74, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 75, 0, 1, 0, 0, 0,152,250, 90, 10,
+ 31, 0, 76, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 77, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 78, 0, 1, 0, 0, 0,
+152,250, 90, 10, 31, 0, 79, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 80, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 81, 0,
+ 1, 0, 0, 0,152,250, 90, 10, 31, 0, 82, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 83, 0, 1, 0, 0, 0,152,250, 90, 10,
+ 31, 0, 84, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 85, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 86, 0, 1, 0, 0, 0,
+152,250, 90, 10, 31, 0, 87, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 88, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 89, 0,
+ 1, 0, 0, 0,152,250, 90, 10, 31, 0, 90, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 91, 0, 1, 0, 0, 0,152,250, 90, 10,
+ 31, 0, 92, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 93, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 94, 0, 1, 0, 0, 0,
+152,250, 90, 10, 31, 0, 95, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 96, 0, 1, 0, 0, 0,152,250, 90, 10, 31, 0, 0, 0,
+ 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 1, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 2, 0, 1, 0, 0, 0, 96,255, 90, 10,
+ 31, 0, 3, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 4, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 5, 0, 1, 0, 0, 0,
+ 96,255, 90, 10, 31, 0, 6, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 7, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 8, 0,
+ 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 9, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 10, 0, 1, 0, 0, 0, 96,255, 90, 10,
+ 31, 0, 11, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 12, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 13, 0, 1, 0, 0, 0,
+ 96,255, 90, 10, 31, 0, 14, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 15, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 16, 0,
+ 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 17, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 18, 0, 1, 0, 0, 0, 96,255, 90, 10,
+ 31, 0, 19, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 20, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 21, 0, 1, 0, 0, 0,
+ 96,255, 90, 10, 31, 0, 22, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 23, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 24, 0,
+ 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 25, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 26, 0, 1, 0, 0, 0, 96,255, 90, 10,
+ 31, 0, 27, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 28, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 29, 0, 1, 0, 0, 0,
+ 96,255, 90, 10, 31, 0, 30, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 31, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 32, 0,
+ 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 33, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 34, 0, 1, 0, 0, 0, 96,255, 90, 10,
+ 31, 0, 35, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 36, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 37, 0, 1, 0, 0, 0,
+ 96,255, 90, 10, 31, 0, 38, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 39, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 40, 0,
+ 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 41, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 42, 0, 1, 0, 0, 0, 96,255, 90, 10,
+ 31, 0, 43, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 44, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 45, 0, 1, 0, 0, 0,
+ 96,255, 90, 10, 31, 0, 46, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 47, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 48, 0,
+ 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 49, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 50, 0, 1, 0, 0, 0, 96,255, 90, 10,
+ 31, 0, 51, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 52, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 53, 0, 1, 0, 0, 0,
+ 96,255, 90, 10, 31, 0, 54, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 55, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 56, 0,
+ 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 57, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 58, 0, 1, 0, 0, 0, 96,255, 90, 10,
+ 31, 0, 59, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 60, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 61, 0, 1, 0, 0, 0,
+ 96,255, 90, 10, 31, 0, 62, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 63, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 64, 0,
+ 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 65, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 66, 0, 1, 0, 0, 0, 96,255, 90, 10,
+ 31, 0, 67, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 68, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 69, 0, 1, 0, 0, 0,
+ 96,255, 90, 10, 31, 0, 70, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 71, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 72, 0,
+ 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 73, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 74, 0, 1, 0, 0, 0, 96,255, 90, 10,
+ 31, 0, 75, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 76, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 77, 0, 1, 0, 0, 0,
+ 96,255, 90, 10, 31, 0, 78, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 79, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 80, 0,
+ 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 81, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 82, 0, 1, 0, 0, 0, 96,255, 90, 10,
+ 31, 0, 83, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 84, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 85, 0, 1, 0, 0, 0,
+ 96,255, 90, 10, 31, 0, 86, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 87, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 88, 0,
+ 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 89, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 90, 0, 1, 0, 0, 0, 96,255, 90, 10,
+ 31, 0, 91, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 92, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 93, 0, 1, 0, 0, 0,
+ 96,255, 90, 10, 31, 0, 94, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 95, 0, 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 96, 0,
+ 1, 0, 0, 0, 96,255, 90, 10, 31, 0, 0, 0, 1, 0, 0, 0, 88,159, 78, 10, 31, 0, 1, 0, 1, 0, 0, 0, 88,159, 78, 10,
+ 31, 0, 2, 0, 1, 0, 0, 0, 88,159, 78, 10, 31, 0, 3, 0, 1, 0, 0, 0, 88,159, 78, 10, 31, 0, 4, 0, 1, 0, 0, 0,
+ 88,159, 78, 10, 31, 0, 5, 0, 1, 0, 0, 0, 88,159, 78, 10, 31, 0, 6, 0, 1, 0, 0, 0, 88,159, 78, 10, 31, 0, 7, 0,
+ 1, 0, 0, 0, 88,159, 78, 10, 31, 0, 8, 0, 1, 0, 0, 0, 88,159, 78, 10, 31, 0, 9, 0, 1, 0, 0, 0, 88,159, 78, 10,
+ 31, 0, 0, 0, 1, 0, 0, 0,224,212, 60, 10, 31, 0, 1, 0, 1, 0, 0, 0,224,212, 60, 10, 31, 0, 2, 0, 1, 0, 0, 0,
+224,212, 60, 10, 31, 0, 3, 0, 1, 0, 0, 0,224,212, 60, 10, 31, 0, 4, 0, 1, 0, 0, 0,224,212, 60, 10, 31, 0, 5, 0,
+ 1, 0, 0, 0,224,212, 60, 10, 31, 0, 6, 0, 1, 0, 0, 0,224,212, 60, 10, 31, 0, 7, 0, 1, 0, 0, 0,224,212, 60, 10,
+ 31, 0, 8, 0, 1, 0, 0, 0,224,212, 60, 10, 31, 0, 9, 0, 1, 0, 0, 0,224,212, 60, 10, 31, 0, 0, 0, 1, 0, 0, 0,
+ 24, 81, 88, 10, 31, 0, 1, 0, 1, 0, 0, 0, 24, 81, 88, 10, 31, 0, 2, 0, 1, 0, 0, 0, 24, 81, 88, 10, 31, 0, 3, 0,
+ 1, 0, 0, 0, 24, 81, 88, 10, 31, 0, 4, 0, 1, 0, 0, 0, 24, 81, 88, 10, 31, 0, 5, 0, 1, 0, 0, 0, 24, 81, 88, 10,
+ 31, 0, 6, 0, 1, 0, 0, 0, 24, 81, 88, 10, 31, 0, 7, 0, 1, 0, 0, 0, 24, 81, 88, 10, 31, 0, 8, 0, 1, 0, 0, 0,
+ 24, 81, 88, 10, 31, 0, 9, 0, 1, 0, 0, 0, 24, 81, 88, 10, 31, 0, 0, 0, 1, 0, 0, 0,168, 85, 89, 10, 31, 0, 1, 0,
+ 1, 0, 0, 0,168, 85, 89, 10, 31, 0, 2, 0, 1, 0, 0, 0,168, 85, 89, 10, 31, 0, 3, 0, 1, 0, 0, 0,168, 85, 89, 10,
+ 31, 0, 4, 0, 1, 0, 0, 0,168, 85, 89, 10, 31, 0, 5, 0, 1, 0, 0, 0,168, 85, 89, 10, 31, 0, 6, 0, 1, 0, 0, 0,
+168, 85, 89, 10, 31, 0, 7, 0, 1, 0, 0, 0,168, 85, 89, 10, 31, 0, 8, 0, 1, 0, 0, 0,168, 85, 89, 10, 31, 0, 9, 0,
+ 1, 0, 0, 0,168, 85, 89, 10, 31, 0, 0, 0, 1, 0, 0, 0,248, 63, 90, 10, 31, 0, 1, 0, 1, 0, 0, 0,248, 63, 90, 10,
+ 31, 0, 2, 0, 1, 0, 0, 0,248, 63, 90, 10, 31, 0, 3, 0, 1, 0, 0, 0,248, 63, 90, 10, 31, 0, 4, 0, 1, 0, 0, 0,
+248, 63, 90, 10, 31, 0, 5, 0, 1, 0, 0, 0,248, 63, 90, 10, 31, 0, 6, 0, 1, 0, 0, 0,248, 63, 90, 10, 31, 0, 7, 0,
+ 1, 0, 0, 0,248, 63, 90, 10, 31, 0, 8, 0, 1, 0, 0, 0,248, 63, 90, 10, 31, 0, 9, 0, 1, 0, 0, 0,248, 63, 90, 10,
+ 31, 0, 0, 0, 1, 0, 0, 0, 64,130, 90, 10, 31, 0, 1, 0, 1, 0, 0, 0, 64,130, 90, 10, 31, 0, 2, 0, 1, 0, 0, 0,
+ 64,130, 90, 10, 31, 0, 3, 0, 1, 0, 0, 0, 64,130, 90, 10, 31, 0, 4, 0, 1, 0, 0, 0, 64,130, 90, 10, 31, 0, 5, 0,
+ 1, 0, 0, 0, 64,130, 90, 10, 31, 0, 6, 0, 1, 0, 0, 0, 64,130, 90, 10, 31, 0, 7, 0, 1, 0, 0, 0, 64,130, 90, 10,
+ 31, 0, 8, 0, 1, 0, 0, 0, 64,130, 90, 10, 31, 0, 9, 0, 1, 0, 0, 0, 64,130, 90, 10, 31, 0, 0, 0, 1, 0, 0, 0,
+232,191, 90, 10, 31, 0, 1, 0, 1, 0, 0, 0,232,191, 90, 10, 31, 0, 2, 0, 1, 0, 0, 0,232,191, 90, 10, 31, 0, 3, 0,
+ 1, 0, 0, 0,232,191, 90, 10, 31, 0, 4, 0, 1, 0, 0, 0,232,191, 90, 10, 31, 0, 5, 0, 1, 0, 0, 0,232,191, 90, 10,
+ 31, 0, 6, 0, 1, 0, 0, 0,232,191, 90, 10, 31, 0, 7, 0, 1, 0, 0, 0,232,191, 90, 10, 31, 0, 8, 0, 1, 0, 0, 0,
+232,191, 90, 10, 31, 0, 9, 0, 1, 0, 0, 0,232,191, 90, 10, 31, 0, 0, 0, 1, 0, 0, 0,224,168, 91, 10, 31, 0, 1, 0,
+ 1, 0, 0, 0,224,168, 91, 10, 31, 0, 2, 0, 1, 0, 0, 0,224,168, 91, 10, 31, 0, 3, 0, 1, 0, 0, 0,224,168, 91, 10,
+ 31, 0, 4, 0, 1, 0, 0, 0,224,168, 91, 10, 31, 0, 5, 0, 1, 0, 0, 0,224,168, 91, 10, 31, 0, 6, 0, 1, 0, 0, 0,
+224,168, 91, 10, 31, 0, 7, 0, 1, 0, 0, 0,224,168, 91, 10, 31, 0, 8, 0, 1, 0, 0, 0,224,168, 91, 10, 31, 0, 9, 0,
+ 1, 0, 0, 0,224,168, 91, 10, 31, 0, 10, 0, 1, 0, 0, 0,224,168, 91, 10, 31, 0, 11, 0, 1, 0, 0, 0,224,168, 91, 10,
+ 31, 0, 12, 0, 1, 0, 0, 0,224,168, 91, 10, 31, 0, 13, 0, 1, 0, 0, 0,224,168, 91, 10, 31, 0, 14, 0, 1, 0, 0, 0,
+224,168, 91, 10, 31, 0, 15, 0, 1, 0, 0, 0,224,168, 91, 10, 31, 0, 16, 0, 1, 0, 0, 0,224,168, 91, 10, 31, 0, 17, 0,
+ 1, 0, 0, 0,224,168, 91, 10, 31, 0, 18, 0, 1, 0, 0, 0,224,168, 91, 10, 31, 0, 0, 0, 1, 0, 0, 0, 0,140, 81, 9,
+ 31, 0, 1, 0, 1, 0, 0, 0, 0,140, 81, 9, 31, 0, 2, 0, 1, 0, 0, 0, 0,140, 81, 9, 31, 0, 3, 0, 1, 0, 0, 0,
+ 0,140, 81, 9, 31, 0, 4, 0, 1, 0, 0, 0, 0,140, 81, 9, 31, 0, 5, 0, 1, 0, 0, 0, 0,140, 81, 9, 31, 0, 6, 0,
+ 1, 0, 0, 0, 0,140, 81, 9, 31, 0, 7, 0, 1, 0, 0, 0, 0,140, 81, 9, 31, 0, 8, 0, 1, 0, 0, 0, 0,140, 81, 9,
+ 31, 0, 9, 0, 1, 0, 0, 0, 0,140, 81, 9, 31, 0, 10, 0, 1, 0, 0, 0, 0,140, 81, 9, 31, 0, 0, 0, 1, 0, 0, 0,
+224,243, 90, 10, 31, 0, 1, 0, 1, 0, 0, 0,224,243, 90, 10, 31, 0, 2, 0, 1, 0, 0, 0,224,243, 90, 10, 31, 0, 3, 0,
+ 1, 0, 0, 0,224,243, 90, 10, 31, 0, 4, 0, 1, 0, 0, 0,224,243, 90, 10, 31, 0, 5, 0, 1, 0, 0, 0,224,243, 90, 10,
+ 31, 0, 6, 0, 1, 0, 0, 0,224,243, 90, 10, 31, 0, 7, 0, 1, 0, 0, 0,224,243, 90, 10, 31, 0, 8, 0, 1, 0, 0, 0,
+224,243, 90, 10, 31, 0, 9, 0, 1, 0, 0, 0,224,243, 90, 10, 31, 0, 10, 0, 1, 0, 0, 0,224,243, 90, 10, 31, 0, 11, 0,
+ 1, 0, 0, 0,224,243, 90, 10, 31, 0, 12, 0, 1, 0, 0, 0,224,243, 90, 10, 31, 0, 13, 0, 1, 0, 0, 0,224,243, 90, 10,
+ 31, 0, 14, 0, 1, 0, 0, 0,224,243, 90, 10, 31, 0, 15, 0, 1, 0, 0, 0,224,243, 90, 10, 31, 0, 16, 0, 1, 0, 0, 0,
+224,243, 90, 10, 31, 0, 17, 0, 1, 0, 0, 0,224,243, 90, 10, 31, 0, 18, 0, 1, 0, 0, 0,224,243, 90, 10, 31, 0, 19, 0,
+ 1, 0, 0, 0,224,243, 90, 10, 31, 0, 20, 0, 1, 0, 0, 0,224,243, 90, 10, 68, 65, 84, 65, 96, 0, 0, 0, 24, 35, 89, 10,
+200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,232,152, 88, 10, 80, 84, 88, 10,208, 82, 88, 10,144, 83, 88, 10,144, 84, 88, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 19, 4, 0, 0, 93, 0, 0, 0,198, 3, 0, 0, 1, 1, 20, 4,106, 3, 1, 0, 0, 0, 0, 0,
+ 0, 0, 8, 0,232,105, 60, 9,120, 66, 89, 10,224, 84, 89, 10,168, 35, 89, 10,216, 61, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+128, 3, 81, 10, 56, 5, 81, 10, 68, 65, 84, 65,248, 0, 0, 0,168, 35, 89, 10,201, 0, 0, 0, 1, 0, 0, 0,208, 36, 89, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,113, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,130, 68, 0, 0, 0, 0,
+ 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 19, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68,
+ 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 20, 4, 26, 0, 20, 4,
+ 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 4, 0, 0, 93, 0, 0, 0,118, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 26, 0, 9, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,113, 60, 9,192,146, 84, 10,192,146, 84, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0,216, 5, 81, 10,184, 7, 81, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,208, 36, 89, 10,
+201, 0, 0, 0, 1, 0, 0, 0, 24, 58, 89, 10,168, 35, 89, 10, 0, 0, 0, 0, 0, 0, 32, 67, 0, 0, 30,196, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 30,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,119, 2, 0, 0,
+ 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,119, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0,
+ 18, 0, 0, 4, 6, 0,160, 0,120, 2,143, 0,120, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+159, 0, 0, 0, 79, 1, 0, 0,198, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,120, 2,
+ 10, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0,160, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,111, 60, 9,
+ 8, 52, 82, 9, 8, 52, 82, 9,248, 37, 89, 10,168, 56, 89, 10,176, 54, 85, 10, 24, 56, 85, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 64, 1, 0, 0,248, 37, 89, 10,199, 0, 0, 0, 1, 0, 0, 0,104, 39, 89, 10, 0, 0, 0, 0,144,184,170, 9,
+ 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,111, 98,106,101, 99,116,109,111,100,101, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,111, 98,106,101, 99,116,109,111,100,101, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 79, 98,106,101, 99,116, 32, 84,111,111,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 42,254,143, 0,190, 1, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,104, 39, 89, 10,
+199, 0, 0, 0, 1, 0, 0, 0,216, 40, 89, 10,248, 37, 89, 10,224,234,170, 9, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80,
+ 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80,
+ 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,114,117,115,104, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,211,254,143, 0, 21, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,216, 40, 89, 10,199, 0, 0, 0, 1, 0, 0, 0, 72, 42, 89, 10,
+104, 39, 89, 10,248,238,170, 9, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,
+104, 95,116,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,
+104, 95,116,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,252,143, 0,213, 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 64, 1, 0, 0, 72, 42, 89, 10,199, 0, 0, 0, 1, 0, 0, 0,184, 43, 89, 10,216, 40, 89, 10, 0,247,170, 9, 0, 0, 0, 0,
+ 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95,115,116,114,111,107,101, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-232,105, 88, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,104, 88, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,128,131, 67, 0, 0,228,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,121, 67, 0, 0, 2,195, 0, 0, 0, 0,
-249, 0, 0, 0, 10, 1, 0, 0, 18, 0, 0, 0,147, 0, 0, 0, 0, 0, 0, 0,248, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
- 0, 0, 0, 0,248, 0, 0, 0, 18, 0, 0, 0,147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 18, 2, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0, 10, 1,148, 0,249, 0,130, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,245, 3, 0, 0,254, 4, 0, 0, 39, 2, 0, 0,186, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 1,148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95,115,116,114,111,107,101, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 83,116,114,111,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 1, 0, 0,
- 88,107, 88, 3, 0, 0, 0, 0,169, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 66,254,143, 0,121, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,184, 43, 89, 10,199, 0, 0, 0,
+ 1, 0, 0, 0, 40, 45, 89, 10, 72, 42, 89, 10, 24,251,170, 9, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,
+111,108,115, 95, 98,114,117,115,104, 95, 99,117,114,118,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,
+111,108,115, 95, 98,114,117,115,104, 95, 99,117,114,118,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,117,114,118,101, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,164,253,143, 0,231, 0, 0, 0, 0, 0,
+ 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,200,108, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, 40, 45, 89, 10,199, 0, 0, 0, 1, 0, 0, 0,152, 46, 89, 10,184, 43, 89, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95, 97,112,
+112,101, 97,114, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95, 97,112,
+112,101, 97,114, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 65,112,112,101, 97,114, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0,200,108, 88, 3, 0, 0, 0, 0,
-223, 0, 0, 0, 1, 0, 0, 0, 13, 0, 0, 0, 13, 0, 0, 0, 40,109, 88, 3, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0,
- 40,109, 88, 3, 0, 0, 0, 0,222, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,120,159, 89, 3, 0, 0, 0, 0,
- 19, 0, 0, 0, 1, 0, 1, 0,120,159, 89, 3, 0, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0,120,159, 89, 3, 0, 0, 0, 0,
- 21, 0, 1, 0, 1, 0, 1, 0,120,159, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,104,181, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 1, 0, 40,189, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 72,129, 90, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 1, 0,232,200, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,200,110, 90, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 1, 0,200,195, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,232,176, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 1, 0, 8,184, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 24,176, 89, 3, 0, 0, 0, 0,
- 68, 65, 84, 65,160, 0, 0, 0,120,129, 88, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-136,103, 88, 3, 0, 0, 0, 0, 88,190, 87, 3, 0, 0, 0, 0,152,188, 87, 3, 0, 0, 0, 0,248,192, 87, 3, 0, 0, 0, 0,
-168,191, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 1, 0, 0, 29, 1, 0, 0,186, 2, 0, 0,
- 9, 9,248, 1,158, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,133, 88, 3, 0, 0, 0, 0,
-184,162, 88, 3, 0, 0, 0, 0,104,130, 88, 3, 0, 0, 0, 0,216,131, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-104,130, 88, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,216,131, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 64, 73, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,252, 67, 0, 0, 0, 0, 0, 0,208, 65,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,253,143, 0,133, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,247, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,248, 1, 26, 0,248, 1, 26, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 1, 0, 0, 29, 1, 0, 0, 54, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,
+152, 46, 89, 10,199, 0, 0, 0, 1, 0, 0, 0, 8, 48, 89, 10, 40, 45, 89, 10,232,242,170, 9, 0, 0, 0, 0, 86, 73, 69, 87,
+ 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95,116,111,111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87,
+ 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95,116,111,111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,111,111,108,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-216,131, 88, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,130, 88, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,224,189, 68, 0, 0, 0, 0, 0,192, 22, 68,236,140, 21, 68, 20, 51,102, 68,120, 83, 49, 67, 68,214,212, 67,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55,254,
+143, 0, 36, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,247, 1, 0, 0, 0, 0, 0, 0,131, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4, 10, 0,248, 1,132, 1,248, 1,132, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 1, 0, 0, 55, 1, 0, 0,186, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 1,132, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, 8, 48, 89, 10,199, 0, 0, 0, 1, 0, 0, 0,
+120, 49, 89, 10,152, 46, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,115, 99,117,108,112,116,
+ 95,115,121,109,109,101,116,114,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,115, 99,117,108,112,116,
+ 95,115,121,109,109,101,116,114,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,121,109,109,101,116,114,121, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,144, 2, 0, 0,
- 72,133, 88, 3, 0, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,204,204, 61,231, 1, 0, 0,243, 1, 0, 0,
-122, 1, 0, 0,124, 1, 0, 0,231, 1, 0, 0,243, 1, 0, 0, 4, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52,253,143, 0,225, 0, 0, 0, 0, 0, 4, 0, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 64, 1, 0, 0,120, 49, 89, 10,199, 0, 0, 0, 1, 0, 0, 0,232, 50, 89, 10, 8, 48, 89, 10, 8,255,170, 9,
+ 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,115, 99,117,108,112,116, 95,111,112,116,105,111,110,115, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,115, 99,117,108,112,116, 95,111,112,116,105,111,110,115, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 79,112,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,145,253,143, 0,132, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,232, 50, 89, 10,
+199, 0, 0, 0, 1, 0, 0, 0, 88, 52, 89, 10,120, 49, 89, 10, 40, 3,171, 9, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80,
+ 84, 95,116,111,111,108,115, 95,119,101,105,103,104,116,112, 97,105,110,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80,
+ 84, 95,116,111,111,108,115, 95,119,101,105,103,104,116,112, 97,105,110,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,101,105,103,104,116, 32, 84,
+111,111,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39,254,143, 0,124, 0,
+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, 88, 52, 89, 10,199, 0, 0, 0, 1, 0, 0, 0,200, 53, 89, 10,
+232, 50, 89, 10, 64, 7,171, 9, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,119,101,105,103,
+104,116,112, 97,105,110,116, 95,111,112,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,119,101,105,103,
+104,116,112, 97,105,110,116, 95,111,112,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,112,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,181,253,143, 0,190, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 64, 1, 0, 0,200, 53, 89, 10,199, 0, 0, 0, 1, 0, 0, 0, 56, 55, 89, 10, 88, 52, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,112,114,111,106,101, 99,116,112, 97,105,110,116, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,112,114,111,106,101, 99,116,112, 97,105,110,116, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 80,114,111,106,101, 99,116, 32, 80, 97,105,110,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,241,252,143, 0, 9, 1, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, 56, 55, 89, 10,199, 0, 0, 0,
+ 1, 0, 0, 0,168, 56, 89, 10,200, 53, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,
+111,108,115, 95,118,101,114,116,101,120,112, 97,105,110,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,
+111,108,115, 95,118,101,114,116,101,120,112, 97,105,110,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,112,116,105,111,110,115, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,197,253,143, 0,146, 0, 0, 0, 0, 0,
+ 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,168, 56, 89, 10,199, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 56, 55, 89, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,105,109, 97,103,101,112, 97,105,110,116, 95,111,112,116,
+105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,105,109, 97,103,101,112, 97,105,110,116, 95,111,112,116,
+105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 79,112,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,146,253,143, 0, 80, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,
+ 24, 58, 89, 10,201, 0, 0, 0, 1, 0, 0, 0,176, 60, 89, 10,208, 36, 89, 10, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0, 90,195,
+ 0, 0, 0, 0, 0, 0, 0, 0,227,102, 16, 67, 24, 30, 90,195, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,
+215, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,
+215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0,
+ 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,216, 0,143, 0,216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,159, 0, 0, 0,119, 0, 0, 0, 78, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+160, 0,216, 0, 11, 0, 6, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+152,111, 60, 9, 16, 42, 84, 10, 16, 42, 84, 10, 64, 59, 89, 10, 64, 59, 89, 10,216, 56, 85, 10, 64, 58, 85, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, 64, 59, 89, 10,199, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 32,112, 60, 9, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82,101,109,111,118,101, 32, 86,101,114,116,101,120, 32, 67,111,108,111,114, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,255,144, 0, 16, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,
+176, 60, 89, 10,201, 0, 0, 0, 1, 0, 0, 0,216, 61, 89, 10, 24, 58, 89, 10, 0, 0, 0, 0, 0, 0, 52, 67, 0,192,115,196,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,192,115,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 0, 0, 0, 0,
+206, 3, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0,
+206, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0,
+ 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,207, 3,163, 0,207, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 19, 4, 0, 0, 19, 4, 0, 0,119, 0, 0, 0,198, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 40,107, 60, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,216, 61, 89, 10,201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,176, 60, 89, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 0, 0, 19, 4, 0, 0,119, 0, 0, 0,198, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,116, 3, 80, 3, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,106, 60, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+240, 68, 85, 10,120, 68, 85, 10, 0, 0, 0, 0, 0, 63, 89, 10, 68, 65, 84, 65, 72, 3, 0, 0, 0, 63, 89, 10,159, 0, 0, 0,
+ 1, 0, 0, 0,255,255,139, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,130,241,145, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,218,205, 76,190,
+ 0, 0, 0, 0, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190,
+ 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,158,210,111,193,
+ 0, 0,128, 63, 68,239,209, 62, 70,119,105, 63,192, 84, 89,188, 0, 0, 0, 0, 53,177,205,190,144, 74, 70, 62,166, 33,101, 63,
+ 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 42, 61,228, 62, 0, 0, 0, 0,164, 95, 68, 65,141,120,173,192,225,208,213, 64,
+ 0, 0,128, 63,177,157,229, 62,212,134,234,190,222,160, 81,191,184,158, 81,191,115, 90,127, 63,152, 22, 98, 62, 9, 46,185, 62,
+ 35, 44,185, 62,143,180,109,188, 56,160,130, 63,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0,220,161,108, 65,
+158,210,111, 65,130,240,191, 62,105,116, 85, 63, 64,183, 70,188, 0, 0, 2,180, 25,103,180,190,101,233, 45, 62,215,245, 72, 63,
+ 0, 0,128, 50,230,117,117,194, 59,213,216, 65,167,161, 5,194,236,254,159,192,240, 49,114, 66,196,242,213,193,140,218, 3, 66,
+145, 0,160, 64, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190,
+ 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,158,210,111,193,
+ 0, 0,128, 63,177,157,229, 62,212,134,234,190,222,160, 81,191,184,158, 81,191,115, 90,127, 63,152, 22, 98, 62, 9, 46,185, 62,
+ 35, 44,185, 62,143,180,109,188, 56,160,130, 63,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0,220,161,108, 65,
+158,210,111, 65,204,210, 20, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,204,210, 20, 64, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,204,210, 20, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190,158,210,111, 65,215,134, 91, 65, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1,144, 7, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 83, 78, 0, 0,208, 0, 0, 0,104,164, 88, 3, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0,248, 10, 89, 3, 0, 0, 0, 0,
-184,185, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 85, 86, 32, 69,100,105,
-116,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-136,165, 88, 3, 0, 0, 0, 0,152,168, 88, 3, 0, 0, 0, 0, 8,169, 88, 3, 0, 0, 0, 0,104,173, 88, 3, 0, 0, 0, 0,
-216,173, 88, 3, 0, 0, 0, 0,120,234, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-120,159, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136,165, 88, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,
-248,165, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 32, 0, 0, 0,248,165, 88, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,104,166, 88, 3, 0, 0, 0, 0,
-136,165, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
-104,166, 88, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,216,166, 88, 3, 0, 0, 0, 0,248,165, 88, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,254, 4,214, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,216,166, 88, 3, 0, 0, 0, 0,
-196, 0, 0, 0, 1, 0, 0, 0, 72,167, 88, 3, 0, 0, 0, 0,104,166, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-254, 4, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72,167, 88, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,
-184,167, 88, 3, 0, 0, 0, 0,216,166, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,187, 2, 1, 0, 0, 0,
- 68, 65, 84, 65, 32, 0, 0, 0,184,167, 88, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 40,168, 88, 3, 0, 0, 0, 0,
- 72,167, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4,187, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
- 40,168, 88, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,152,168, 88, 3, 0, 0, 0, 0,184,167, 88, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,132, 2,187, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,152,168, 88, 3, 0, 0, 0, 0,
-196, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,168, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-132, 2, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8,169, 88, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
-120,169, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,165, 88, 3, 0, 0, 0, 0,104,166, 88, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120,169, 88, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
-232,169, 88, 3, 0, 0, 0, 0, 8,169, 88, 3, 0, 0, 0, 0,248,165, 88, 3, 0, 0, 0, 0, 72,167, 88, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232,169, 88, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
- 88,170, 88, 3, 0, 0, 0, 0,120,169, 88, 3, 0, 0, 0, 0,104,166, 88, 3, 0, 0, 0, 0,184,167, 88, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88,170, 88, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
-200,170, 88, 3, 0, 0, 0, 0,232,169, 88, 3, 0, 0, 0, 0, 72,167, 88, 3, 0, 0, 0, 0,184,167, 88, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200,170, 88, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
- 56,171, 88, 3, 0, 0, 0, 0, 88,170, 88, 3, 0, 0, 0, 0, 72,167, 88, 3, 0, 0, 0, 0, 40,168, 88, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56,171, 88, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
-168,171, 88, 3, 0, 0, 0, 0,200,170, 88, 3, 0, 0, 0, 0,136,165, 88, 3, 0, 0, 0, 0,152,168, 88, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168,171, 88, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
- 24,172, 88, 3, 0, 0, 0, 0, 56,171, 88, 3, 0, 0, 0, 0,136,165, 88, 3, 0, 0, 0, 0, 72,167, 88, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24,172, 88, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
-136,172, 88, 3, 0, 0, 0, 0,168,171, 88, 3, 0, 0, 0, 0, 40,168, 88, 3, 0, 0, 0, 0,152,168, 88, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136,172, 88, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
-248,172, 88, 3, 0, 0, 0, 0, 24,172, 88, 3, 0, 0, 0, 0,184,167, 88, 3, 0, 0, 0, 0, 40,168, 88, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248,172, 88, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
-104,173, 88, 3, 0, 0, 0, 0,136,172, 88, 3, 0, 0, 0, 0,216,166, 88, 3, 0, 0, 0, 0,152,168, 88, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104,173, 88, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,248,172, 88, 3, 0, 0, 0, 0,216,166, 88, 3, 0, 0, 0, 0,184,167, 88, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,216,173, 88, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0,
-168,177, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,167, 88, 3, 0, 0, 0, 0,248,165, 88, 3, 0, 0, 0, 0,
-104,166, 88, 3, 0, 0, 0, 0,184,167, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 0, 0,
-188, 2, 0, 0,214, 2, 0, 0, 7, 7,255, 4, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-104, 10, 89, 3, 0, 0, 0, 0,104, 10, 89, 3, 0, 0, 0, 0,200,174, 88, 3, 0, 0, 0, 0, 56,176, 88, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 30, 33, 12, 66,
+ 85,152,137, 66,113, 27,126, 66, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,120, 66, 89, 10,160, 0, 0, 0, 1, 0, 0, 0,
+240, 69, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0,
+ 1, 0, 0, 0, 1, 0, 7, 0,208,245, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0,200,174, 88, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 56,176, 88, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,162, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,159, 68,
- 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65,
- 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,255, 4,
- 26, 0,255, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 0, 0,
-188, 2, 0, 0,213, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 4, 26, 0, 0, 0, 1, 0,
+ 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 0, 0, 8, 24, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0,205,204,204, 61, 0, 64,156, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0,255,255, 25, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,
+160, 67, 89, 10,201, 0, 0, 0, 1, 0, 0, 0,200, 68, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 48, 68, 0, 0, 0, 0,
+ 0, 0,208, 65, 0, 0, 0, 0, 0, 0,198, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0, 0, 0, 0, 0,
+ 25, 0, 0, 0, 0,224,197, 68, 0, 0,200, 65, 0,224,197, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 48, 6, 26, 0, 48, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 47, 6, 0, 0, 93, 0, 0, 0,118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 48, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,200, 68, 89, 10,201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,160, 67, 89, 10,
+ 0, 0, 0, 0, 0,128,241, 67, 0,128, 90,196, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,195, 68, 0, 64,111,196, 0, 0, 0, 0,
+ 31, 6, 0, 0, 48, 6, 0, 0, 18, 0, 0, 0,206, 3, 0, 0, 0, 0, 0, 0, 30, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
+ 0, 0, 0, 0, 30, 6, 0, 0, 18, 0, 0, 0,206, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 18, 6, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0, 48, 6,207, 3, 31, 6,189, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0,119, 0, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 6,207, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,252, 0, 0, 0,240, 69, 89, 10,169, 0, 0, 0,
+ 1, 0, 0, 0, 96,241, 89, 10,120, 66, 89, 10,160, 67, 89, 10,200, 68, 89, 10, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8,140, 79, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 1, 0, 0, 0,
+ 68, 65, 84, 65, 12, 0, 0, 0, 8,140, 79, 9,224, 0, 0, 0, 1, 0, 0, 0, 93, 0, 0, 0, 93, 0, 0, 0, 24, 71, 89, 10,
+ 68, 65, 84, 65, 92, 4, 0, 0, 24, 71, 89, 10,223, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,228, 90, 10,
+ 19, 0, 0, 0, 1, 0, 0, 0, 16,228, 90, 10, 20, 0, 0, 0, 1, 0, 0, 0, 16,228, 90, 10, 21, 0, 0, 0, 1, 0, 0, 0,
+ 16,228, 90, 10, 0, 0, 0, 0, 1, 0, 0, 0,224,243, 90, 10, 0, 0, 0, 0, 1, 0, 0, 0,152,250, 90, 10, 0, 0, 0, 0,
+ 1, 0, 0, 0,240, 74, 92, 10, 0, 0, 0, 0, 1, 0, 0, 0, 40, 4, 91, 10, 0, 0, 0, 0, 1, 0, 0, 0,224,168, 91, 10,
+ 0, 0, 0, 0, 1, 0, 0, 0, 96,255, 90, 10, 0, 0, 0, 0, 1, 0, 0, 0,112,240, 90, 10, 0, 0, 0, 0, 1, 0, 0, 0,
+208,245, 90, 10, 0, 0, 0, 0, 1, 0, 0, 0,216,239, 90, 10, 30, 0,255,255, 0, 0, 1, 0, 0, 0, 0, 0, 31, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 1, 0, 0, 0, 0, 0,
+ 31, 0, 3, 0, 1, 0, 1, 0, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 1, 0, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 1, 0,
+ 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 1, 0, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 1, 0, 0, 0, 0, 0, 31, 0, 8, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 1, 0, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 1, 0, 0, 0, 0, 0,
+ 31, 0, 11, 0, 0, 0, 1, 0, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 1, 0, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 1, 0,
+ 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 1, 0, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 1, 0, 0, 0, 0, 0, 31, 0, 16, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 1, 0, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 1, 0, 0, 0, 0, 0,
+ 31, 0, 19, 0, 1, 0, 1, 0, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 1, 0, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 1, 0,
+ 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 1, 0, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 1, 0, 0, 0, 0, 0, 31, 0, 24, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 1, 0, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 1, 0, 0, 0, 0, 0,
+ 31, 0, 27, 0, 1, 0, 1, 0, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 1, 0, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 1, 0,
+ 0, 0, 0, 0, 30, 0,255,255, 1, 0, 1, 0, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 1, 0, 0, 0, 0, 0, 30, 0,255,255,
+ 1, 0, 1, 0, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 1, 0, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 1, 0, 0, 0, 0, 0,
+ 30, 0,255,255, 1, 0, 1, 0, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 1, 0, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 1, 0,
+ 0, 0, 0, 0, 30, 0,255,255, 1, 0, 1, 0, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 1, 0, 0, 0, 0, 0, 30, 0,255,255,
+ 1, 0, 1, 0, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 1, 0, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 1, 0, 0, 0, 0, 0,
+ 30, 0,255,255, 1, 0, 1, 0, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 1, 0, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 31, 0, 3, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 31, 0, 6, 0, 1, 0, 0, 0, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 0, 0, 0, 0, 31, 0, 11, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 31, 0, 14, 0, 1, 0, 0, 0, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 0, 0, 0, 0, 31, 0, 19, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 31, 0, 22, 0, 1, 0, 0, 0, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 0, 0, 0, 0, 31, 0, 27, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 31, 0, 30, 0, 1, 0, 0, 0, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,160, 75, 89, 10,201, 0, 0, 0,
+ 1, 0, 0, 0,200, 76, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,215, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
+ 0, 0,198, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,197, 68,
+ 0, 0,200, 65, 0,224,197, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4,
+ 10, 0, 48, 6, 26, 0, 48, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0,
+ 93, 0, 0, 0,118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 6, 26, 0, 0, 0, 1, 0,
2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+248, 0, 0, 0,200, 76, 89, 10,201, 0, 0, 0, 1, 0, 0, 0,240, 77, 89, 10,160, 75, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 1, 0, 0, 56,176, 88, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-200,174, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69,
- 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0,
- 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,129, 7,
- 2, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-214, 2, 0, 0,214, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,160, 0, 0, 0,168,177, 88, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0,120,234, 88, 3, 0, 0, 0, 0,
-216,173, 88, 3, 0, 0, 0, 0,136,165, 88, 3, 0, 0, 0, 0, 72,167, 88, 3, 0, 0, 0, 0, 40,168, 88, 3, 0, 0, 0, 0,
-152,168, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,131, 2, 0, 0, 0, 0, 0, 0,186, 2, 0, 0,
- 6, 6,132, 2,187, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,184, 88, 3, 0, 0, 0, 0,
- 88,233, 88, 3, 0, 0, 0, 0,152,178, 88, 3, 0, 0, 0, 0, 24,183, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-152,178, 88, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 8,180, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,202, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 33, 68, 0, 0, 0, 0, 0, 0,208, 65,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,131, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 41, 68, 0, 0,200, 65, 0,192, 41, 68, 0, 0,200, 65,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,132, 2, 26, 0,132, 2, 26, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,131, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,132, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,240, 77, 89, 10,201, 0, 0, 0, 1, 0, 0, 0, 24, 79, 89, 10,
+200, 76, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
- 8,180, 88, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 24,183, 88, 3, 0, 0, 0, 0,152,178, 88, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 91, 67, 0, 0, 40,196, 0, 0, 0, 0, 0, 0, 0, 0,254,255, 74, 67,254, 63, 40,196, 0, 0, 0, 0,
-203, 0, 0, 0,220, 0, 0, 0, 0, 0, 0, 0,160, 2, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
- 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0,160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,220, 0,161, 2,203, 0,161, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,219, 0, 0, 0, 26, 0, 0, 0,186, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0,161, 2, 0, 0, 4, 0, 3, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 6, 0, 0, 47, 6, 0, 0,119, 0, 0, 0, 69, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 7, 0, 4, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
- 24,183, 88, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,180, 88, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67,102,102, 38,190,205,204,148, 63, 51, 51, 13,191,154,153,198, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 24, 79, 89, 10,
+201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,240, 77, 89, 10, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67,
+ 0, 0, 38,192, 0, 0,102, 64, 0,192,179,191, 0,224, 25, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 6, 0, 0, 0, 0, 0, 0,207, 3, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,168, 1, 0, 0, 0, 0, 0, 0,161, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0, 0, 0,131, 2, 0, 0, 26, 0, 0, 0,186, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 1,161, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 47, 6, 0, 0,119, 0, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 6,207, 3,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 72, 33, 0, 0,
-136,184, 88, 3, 0, 0, 0, 0,170, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 65, 0, 0, 0, 0,154,153,153, 62, 0, 0, 0, 0,100, 0, 0, 0,
-154,153,153, 62,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 24, 33, 0, 0, 96,241, 89, 10,170, 0, 0, 0, 1, 0, 0, 0,224, 84, 89, 10,240, 69, 89, 10,160, 75, 89, 10,
+ 24, 79, 89, 10, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 65, 0, 0, 0, 0,154,153,153, 62, 0, 0, 0, 0,
+100, 0, 0, 0,154,153,153, 62,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -2422,7 +3382,7 @@ char datatoc_startup_blend[]= {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -2552,81 +3512,798 @@ char datatoc_startup_blend[]= {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,
-120,234, 88, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,177, 88, 3, 0, 0, 0, 0,
-152,168, 88, 3, 0, 0, 0, 0, 40,168, 88, 3, 0, 0, 0, 0,184,167, 88, 3, 0, 0, 0, 0,216,166, 88, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,133, 2, 0, 0,254, 4, 0, 0, 0, 0, 0, 0,186, 2, 0, 0, 1, 1,122, 2,187, 2, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 4, 89, 3, 0, 0, 0, 0, 72, 9, 89, 3, 0, 0, 0, 0,
-104,235, 88, 3, 0, 0, 0, 0,200,255, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104,235, 88, 3, 0, 0, 0, 0,
-200, 0, 0, 0, 1, 0, 0, 0,216,236, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,102, 68,
- 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128, 30, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,121, 2, 0, 0,
- 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,122, 2, 26, 0,122, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,133, 2, 0, 0,254, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,122, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,216,236, 88, 3, 0, 0, 0, 0,
-200, 0, 0, 0, 1, 0, 0, 0,136,241, 88, 3, 0, 0, 0, 0,104,235, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 67,
- 0, 64, 10,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 10,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0,
- 0, 0, 0, 0, 40, 2, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0,
- 0, 0, 0, 0, 40, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64,
- 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0, 41, 2,143, 0, 41, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,133, 2, 0, 0, 36, 3, 0, 0,146, 0, 0, 0,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 41, 2, 0, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136,241, 88, 3, 0, 0, 0, 0,
-200, 0, 0, 0, 1, 0, 0, 0,152,244, 88, 3, 0, 0, 0, 0,216,236, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 67,
- 0, 0,242,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 91, 90,242,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0,
- 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0,
- 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64,
- 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,133, 2, 0, 0, 36, 3, 0, 0, 26, 0, 0, 0,145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,160, 0,120, 0, 0, 0, 6, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152,244, 88, 3, 0, 0, 0, 0,
-200, 0, 0, 0, 1, 0, 0, 0,200,255, 88, 3, 0, 0, 0, 0,136,241, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67,
- 0,128,126,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67,255,191,126,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0,
- 18, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0,
- 18, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64,
- 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0, 13, 4,163, 0,251, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 0, 0,254, 4, 0, 0, 26, 0, 0, 0,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 64, 80, 89, 10,201, 0, 0, 0, 1, 0, 0, 0,
+104, 81, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,209, 68,
+ 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0,209, 68, 0, 0,200, 65,
+ 0, 0,209, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,137, 6,
+ 26, 0,137, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 6, 0, 0,149, 3, 0, 0,
+174, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,137, 6, 26, 0, 0, 0, 1, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,
+104, 81, 89, 10,201, 0, 0, 0, 1, 0, 0, 0,144, 82, 89, 10, 64, 80, 89, 10, 0, 0, 0, 0, 0, 0,112, 67, 0, 64,101,196,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 67, 0, 64,101,196, 0, 0, 0, 0,223, 0, 0, 0,240, 0, 0, 0, 0, 0, 0, 0,
+148, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,222, 0, 0, 0, 0, 0, 0, 0,
+148, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0,
+ 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,240, 0,149, 3,223, 0,149, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,239, 0, 0, 0, 0, 0, 0, 0,148, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+240, 0,149, 3, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,144, 82, 89, 10,201, 0, 0, 0, 1, 0, 0, 0,184, 83, 89, 10,104, 81, 89, 10,
+ 0, 0, 0, 0, 0, 32,179, 68, 0, 0, 0, 0, 0, 0,112, 66, 0, 0, 0, 0, 0, 32,179, 68, 0, 0, 0, 0, 0, 0,112, 66,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,152, 5, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0,179, 68, 0, 0,108, 66, 0, 0,179, 68, 0, 0,108, 66,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,153, 5, 60, 0,153, 5, 60, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 0, 0, 0,136, 6, 0, 0, 89, 3, 0, 0,148, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153, 5, 60, 0, 0, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,184, 83, 89, 10,201, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0,144, 82, 89, 10, 0, 0, 0, 0, 0,128,175, 68, 0, 0,137,195, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,177, 68, 0, 64, 86,196, 0, 0, 0, 0,136, 5, 0, 0,153, 5, 0, 0, 0, 0, 0, 0, 88, 3, 0, 0, 0, 0, 0, 0,
+135, 5, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,135, 5, 0, 0, 0, 0, 0, 0, 88, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 2, 0, 0, 2, 0, 3, 3, 2, 0, 0, 4,
+ 6, 0,153, 5, 89, 3,136, 5, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 0, 0, 0,136, 6, 0, 0,
+ 0, 0, 0, 0, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153, 5, 89, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 60, 0, 0, 0,224, 84, 89, 10,168, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 96,241, 89, 10, 64, 80, 89, 10,184, 83, 89, 10,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 0,255,255,255,255, 0, 0, 83, 78, 0, 0,140, 0, 0, 0,168, 85, 89, 10,196, 0, 0, 0, 1, 0, 0, 0,
+248, 63, 90, 10, 24, 81, 88, 10, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 71, 97,109,101, 32, 76,111,103,105, 99, 0, 46, 48, 48,
+ 49, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 86, 89, 10,160, 89, 89, 10,224, 89, 89, 10,
+128, 95, 89, 10,200, 95, 89, 10,184, 58, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 16,228, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 96, 86, 89, 10,197, 0, 0, 0, 1, 0, 0, 0,
+160, 86, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,160, 86, 89, 10,
+197, 0, 0, 0, 1, 0, 0, 0,224, 86, 89, 10, 96, 86, 89, 10, 0, 0, 0, 0, 0, 0, 97, 4, 0, 0, 0, 0, 68, 65, 84, 65,
+ 20, 0, 0, 0,224, 86, 89, 10,197, 0, 0, 0, 1, 0, 0, 0, 32, 87, 89, 10,160, 86, 89, 10, 0, 0, 0, 0,118, 7, 97, 4,
+ 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 32, 87, 89, 10,197, 0, 0, 0, 1, 0, 0, 0, 96, 87, 89, 10,224, 86, 89, 10,
+ 0, 0, 0, 0,118, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 96, 87, 89, 10,197, 0, 0, 0, 1, 0, 0, 0,
+160, 87, 89, 10, 32, 87, 89, 10, 0, 0, 0, 0, 0, 0, 70, 4, 1, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,160, 87, 89, 10,
+197, 0, 0, 0, 1, 0, 0, 0,224, 87, 89, 10, 96, 87, 89, 10, 0, 0, 0, 0,118, 7, 70, 4, 1, 0, 0, 0, 68, 65, 84, 65,
+ 20, 0, 0, 0,224, 87, 89, 10,197, 0, 0, 0, 1, 0, 0, 0, 32, 88, 89, 10,160, 87, 89, 10, 0, 0, 0, 0, 0, 0,172, 1,
+ 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 32, 88, 89, 10,197, 0, 0, 0, 1, 0, 0, 0, 96, 88, 89, 10,224, 87, 89, 10,
+ 0, 0, 0, 0, 24, 6,172, 1, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 96, 88, 89, 10,197, 0, 0, 0, 1, 0, 0, 0,
+160, 88, 89, 10, 32, 88, 89, 10, 0, 0, 0, 0, 24, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,160, 88, 89, 10,
+197, 0, 0, 0, 1, 0, 0, 0,224, 88, 89, 10, 96, 88, 89, 10, 0, 0, 0, 0,118, 7,172, 1, 0, 0, 0, 0, 68, 65, 84, 65,
+ 20, 0, 0, 0,224, 88, 89, 10,197, 0, 0, 0, 1, 0, 0, 0, 32, 89, 89, 10,160, 88, 89, 10, 0, 0, 0, 0, 56, 5,172, 1,
+ 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 32, 89, 89, 10,197, 0, 0, 0, 1, 0, 0, 0, 96, 89, 89, 10,224, 88, 89, 10,
+ 0, 0, 0, 0, 56, 5, 70, 4, 1, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 96, 89, 89, 10,197, 0, 0, 0, 1, 0, 0, 0,
+160, 89, 89, 10, 32, 89, 89, 10, 0, 0, 0, 0, 64, 1,172, 1, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,160, 89, 89, 10,
+197, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 96, 89, 89, 10, 0, 0, 0, 0, 64, 1, 70, 4, 1, 0, 0, 0, 68, 65, 84, 65,
+ 24, 0, 0, 0,224, 89, 89, 10,198, 0, 0, 0, 1, 0, 0, 0, 40, 90, 89, 10, 0, 0, 0, 0,160, 86, 89, 10,224, 86, 89, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 40, 90, 89, 10,198, 0, 0, 0, 1, 0, 0, 0,112, 90, 89, 10,
+224, 89, 89, 10,160, 86, 89, 10, 96, 87, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,112, 90, 89, 10,
+198, 0, 0, 0, 1, 0, 0, 0,184, 90, 89, 10, 40, 90, 89, 10,224, 86, 89, 10,160, 87, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 24, 0, 0, 0,184, 90, 89, 10,198, 0, 0, 0, 1, 0, 0, 0, 0, 91, 89, 10,112, 90, 89, 10, 96, 87, 89, 10,
+160, 87, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 0, 91, 89, 10,198, 0, 0, 0, 1, 0, 0, 0,
+ 72, 91, 89, 10,184, 90, 89, 10, 96, 87, 89, 10,224, 87, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,
+ 72, 91, 89, 10,198, 0, 0, 0, 1, 0, 0, 0,144, 91, 89, 10, 0, 91, 89, 10,224, 87, 89, 10, 32, 88, 89, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,144, 91, 89, 10,198, 0, 0, 0, 1, 0, 0, 0,216, 91, 89, 10, 72, 91, 89, 10,
+ 32, 87, 89, 10, 96, 88, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,216, 91, 89, 10,198, 0, 0, 0,
+ 1, 0, 0, 0, 32, 92, 89, 10,144, 91, 89, 10, 32, 88, 89, 10, 96, 88, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 24, 0, 0, 0, 32, 92, 89, 10,198, 0, 0, 0, 1, 0, 0, 0,104, 92, 89, 10,216, 91, 89, 10, 96, 86, 89, 10,224, 87, 89, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,104, 92, 89, 10,198, 0, 0, 0, 1, 0, 0, 0,176, 92, 89, 10,
+ 32, 92, 89, 10, 96, 86, 89, 10, 96, 88, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,176, 92, 89, 10,
+198, 0, 0, 0, 1, 0, 0, 0,248, 92, 89, 10,104, 92, 89, 10,160, 87, 89, 10,160, 88, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 24, 0, 0, 0,248, 92, 89, 10,198, 0, 0, 0, 1, 0, 0, 0, 64, 93, 89, 10,176, 92, 89, 10, 32, 87, 89, 10,
+160, 88, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 64, 93, 89, 10,198, 0, 0, 0, 1, 0, 0, 0,
+136, 93, 89, 10,248, 92, 89, 10, 32, 88, 89, 10,160, 88, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,
+136, 93, 89, 10,198, 0, 0, 0, 1, 0, 0, 0,208, 93, 89, 10, 64, 93, 89, 10,224, 88, 89, 10, 32, 89, 89, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,208, 93, 89, 10,198, 0, 0, 0, 1, 0, 0, 0, 24, 94, 89, 10,136, 93, 89, 10,
+160, 87, 89, 10, 32, 89, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 24, 94, 89, 10,198, 0, 0, 0,
+ 1, 0, 0, 0, 96, 94, 89, 10,208, 93, 89, 10,160, 88, 89, 10,224, 88, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 24, 0, 0, 0, 96, 94, 89, 10,198, 0, 0, 0, 1, 0, 0, 0,168, 94, 89, 10, 24, 94, 89, 10,224, 87, 89, 10, 96, 89, 89, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,168, 94, 89, 10,198, 0, 0, 0, 1, 0, 0, 0,240, 94, 89, 10,
+ 96, 94, 89, 10,224, 88, 89, 10, 96, 89, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,240, 94, 89, 10,
+198, 0, 0, 0, 1, 0, 0, 0, 56, 95, 89, 10,168, 94, 89, 10, 96, 87, 89, 10,160, 89, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 24, 0, 0, 0, 56, 95, 89, 10,198, 0, 0, 0, 1, 0, 0, 0,128, 95, 89, 10,240, 94, 89, 10, 32, 89, 89, 10,
+160, 89, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,128, 95, 89, 10,198, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 56, 95, 89, 10, 96, 89, 89, 10,160, 89, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0,
+200, 95, 89, 10,200, 0, 0, 0, 1, 0, 0, 0,168, 98, 89, 10, 0, 0, 0, 0, 96, 87, 89, 10,160, 86, 89, 10,224, 86, 89, 10,
+160, 87, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0, 71, 4, 0, 0, 97, 4, 0, 0, 7, 7,119, 7, 27, 0, 1, 0,
+ 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0,152, 63, 90, 10,152, 63, 90, 10, 88, 96, 89, 10,128, 97, 89, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 88, 96, 89, 10,201, 0, 0, 0, 1, 0, 0, 0,
+128, 97, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,148, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,238, 68,
+ 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65,
+ 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,119, 7,
+ 26, 0,119, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0, 71, 4, 0, 0,
+ 96, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,119, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,
+128, 97, 89, 10,201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 88, 96, 89, 10, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192,
+ 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0,
+ 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,129, 7, 2, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 97, 4, 0, 0, 97, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0,168, 98, 89, 10,200, 0, 0, 0, 1, 0, 0, 0,240, 36, 90, 10,200, 95, 89, 10,
+ 96, 88, 89, 10, 32, 88, 89, 10,160, 88, 89, 10, 32, 87, 89, 10, 0, 0, 0, 0, 25, 6, 0, 0,118, 7, 0, 0, 0, 0, 0, 0,
+171, 1, 0, 0, 4, 4, 94, 1,172, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 35, 90, 10,232, 35, 90, 10,
+ 56, 99, 89, 10, 96,100, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,
+ 56, 99, 89, 10,201, 0, 0, 0, 1, 0, 0, 0, 96,100, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 67, 0, 0, 0, 0,
+ 0, 0,208, 65, 0, 0, 0, 0, 0, 0,175, 67, 0, 0, 0, 0, 0, 0,248, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 0, 0,
+ 30, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 94, 1, 31, 0, 94, 1, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 25, 6, 0, 0,118, 7, 0, 0,141, 1, 0, 0,171, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 94, 1, 31, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 96,100, 89, 10,201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 56, 99, 89, 10,
+ 0, 0, 0, 0, 0,128,174, 67, 0,128, 86,196, 0, 0, 0, 0, 0, 0, 0, 0,255,127,166, 67,255,127,198,195, 0, 0, 0, 0,
+ 77, 1, 0, 0, 94, 1, 0, 0, 0, 0, 0, 0,140, 1, 0, 0, 0, 0, 0, 0, 78, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
+ 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 0, 0,140, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0, 94, 1,141, 1, 77, 1,141, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 6, 0, 0,118, 7, 0, 0, 0, 0, 0, 0,140, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 1,141, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 18, 90, 10,120, 34, 90, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,168, 18, 90, 10,199, 0, 0, 0,
+ 1, 0, 0, 0, 24, 20, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,
+111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,
+111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,110,116,101,120,116, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,255, 76, 1, 36, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, 24, 20, 90, 10,199, 0, 0, 0, 1, 0, 0, 0,136, 21, 90, 10,168, 18, 90, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, 76, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,
+136, 21, 90, 10,199, 0, 0, 0, 1, 0, 0, 0,248, 22, 90, 10, 24, 20, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
+ 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
+ 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101,
+114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255,
+ 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,248, 22, 90, 10,199, 0, 0, 0, 1, 0, 0, 0,
+104, 24, 90, 10,136, 21, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,
+105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,
+105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,254, 76, 1,203, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200,255, 88, 3, 0, 0, 0, 0,
-200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,244, 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 64, 1, 0, 0,104, 24, 90, 10,199, 0, 0, 0, 1, 0, 0, 0,216, 25, 90, 10,248, 22, 90, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 58,254, 76, 1, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,216, 25, 90, 10,
+199, 0, 0, 0, 1, 0, 0, 0, 72, 27, 90, 10,104, 24, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70,117,108,108, 32, 83, 97,109,
+112,108,101, 32, 77,111,116,105,111,110, 32, 66,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,254, 76, 1, 0, 0,
+ 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, 72, 27, 90, 10,199, 0, 0, 0, 1, 0, 0, 0,184, 28, 90, 10,
+216, 25, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,164,253, 76, 1,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 64, 1, 0, 0,184, 28, 90, 10,199, 0, 0, 0, 1, 0, 0, 0, 40, 30, 90, 10, 72, 27, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10,253, 76, 1,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, 40, 30, 90, 10,199, 0, 0, 0,
+ 1, 0, 0, 0,152, 31, 90, 10,184, 28, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,
+114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,
+114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,242,252, 76, 1, 0, 0, 0, 0, 0, 0,
+ 4, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,152, 31, 90, 10,199, 0, 0, 0, 1, 0, 0, 0, 8, 33, 90, 10, 40, 30, 90, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,
+103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,
+103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218,252, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,
+ 8, 33, 90, 10,199, 0, 0, 0, 1, 0, 0, 0,120, 34, 90, 10,152, 31, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
+ 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
+ 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,
+112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194,252,
+ 76, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,120, 34, 90, 10,199, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 8, 33, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,170,252, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
+ 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,216, 0, 0, 0,232, 35, 90, 10,165, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0,240, 36, 90, 10,200, 0, 0, 0, 1, 0, 0, 0,
+200, 42, 90, 10,168, 98, 89, 10, 96, 86, 89, 10,224, 87, 89, 10, 32, 88, 89, 10, 96, 88, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 23, 6, 0, 0, 0, 0, 0, 0,171, 1, 0, 0, 17, 17, 24, 6,172, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+104, 42, 90, 10,104, 42, 90, 10,128, 37, 90, 10, 64, 41, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,248, 0, 0, 0,128, 37, 90, 10,201, 0, 0, 0, 1, 0, 0, 0,168, 38, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,151, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,195, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 23, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 63, 68, 0, 0,200, 65, 0,192, 63, 68, 0, 0,200, 65, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 24, 6, 26, 0, 24, 6, 26, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 24, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,168, 38, 90, 10,201, 0, 0, 0, 1, 0, 0, 0,
+ 64, 41, 90, 10,128, 37, 90, 10, 0, 0, 0, 0, 0, 0, 92, 67, 0, 0,201,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67,
+ 0, 0,201,195, 0, 0, 0, 0,203, 0, 0, 0,220, 0, 0, 0, 0, 0, 0, 0,145, 1, 0, 0, 0, 0, 0, 0,202, 0, 0, 0,
+ 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0,145, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,220, 0,
+146, 1,203, 0,146, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,219, 0, 0, 0, 26, 0, 0, 0,
+171, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0,146, 1, 0, 0, 4, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+208, 39, 90, 10,208, 39, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,
+208, 39, 90, 10,199, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 79, 71, 73,
+ 67, 95, 80, 84, 95,112,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 79, 71, 73,
+ 67, 95, 80, 84, 95,112,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,114,111,112,
+101,114,116,105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,196,255,
+203, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 64, 41, 90, 10,201, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0,168, 38, 90, 10, 0, 0, 0, 0, 0, 0,160, 68, 0, 0, 0, 0, 0, 0,112, 67, 0, 80, 31,195, 0,234,179, 68,
+ 1, 0,224,194, 0, 0,176, 67, 43, 5, 0, 0, 60, 5, 0, 0, 18, 0, 0, 0,145, 1, 0, 0, 0, 0, 0, 0, 42, 5, 0, 0,
+ 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 42, 5, 0, 0, 18, 0, 0, 0,145, 1, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,250, 70, 0, 0,250, 70, 0, 0, 0, 63, 72,225,154, 63, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 60, 5,
+146, 1, 43, 5,128, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0, 0, 0, 23, 6, 0, 0, 26, 0, 0, 0,
+171, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 5,146, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 52, 0, 0, 0,
+104, 42, 90, 10,178, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 7, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 96, 0, 0, 0,200, 42, 90, 10,200, 0, 0, 0, 1, 0, 0, 0,136,101, 89, 10,240, 36, 90, 10,224, 88, 89, 10,
+ 32, 89, 89, 10,160, 87, 89, 10,160, 88, 89, 10, 0, 0, 0, 0, 57, 5, 0, 0,118, 7, 0, 0,173, 1, 0, 0, 69, 4, 0, 0,
+ 9, 9, 62, 2,153, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 45, 90, 10,168, 45, 90, 10, 88, 43, 90, 10,
+128, 44, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 88, 43, 90, 10,
+201, 0, 0, 0, 1, 0, 0, 0,128, 44, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,210, 67, 0, 0, 0, 0, 0, 0,208, 65,
+ 0, 0, 0, 0, 0,128, 15, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,
+ 0,128,181, 67, 0, 0,200, 65, 0,128,181, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3,
+ 4, 0, 12, 4, 10, 0, 62, 2, 26, 0, 62, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 5, 0, 0,
+118, 7, 0, 0,173, 1, 0, 0,198, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 2, 26, 0,
+ 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,248, 0, 0, 0,128, 44, 90, 10,201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 88, 43, 90, 10, 0, 0, 0, 0,
+ 0,128,181, 67, 0, 0, 0, 0, 0,128,218, 67, 0, 0, 0, 0,131,248, 1, 68, 0, 0, 0, 0, 78,176, 16, 68, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 61, 2, 0, 0, 0, 0, 0, 0,126, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60,
+ 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4, 10, 0, 62, 2,127, 2, 62, 2,127, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 57, 5, 0, 0,118, 7, 0, 0,199, 1, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 62, 2,127, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,124, 2, 0, 0,168, 45, 90, 10,172, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 96, 0, 0, 0,136,101, 89, 10,200, 0, 0, 0, 1, 0, 0, 0,184, 58, 90, 10,200, 42, 90, 10, 96, 89, 89, 10,160, 89, 89, 10,
+ 32, 89, 89, 10,224, 88, 89, 10, 0, 0, 0, 0, 65, 1, 0, 0, 55, 5, 0, 0,173, 1, 0, 0, 69, 4, 0, 0, 1, 1,247, 3,
+153, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 57, 90, 10,144, 57, 90, 10, 80, 48, 90, 10,240, 52, 90, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 80, 48, 90, 10,201, 0, 0, 0,
+ 1, 0, 0, 0,120, 49, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,102, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
+ 0,192,125, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,246, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68,
+ 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4,
+ 10, 0,247, 3, 26, 0,247, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 1, 0, 0, 55, 5, 0, 0,
+173, 1, 0, 0,198, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 3, 26, 0, 0, 0, 1, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+248, 0, 0, 0,120, 49, 90, 10,201, 0, 0, 0, 1, 0, 0, 0,160, 50, 90, 10, 80, 48, 90, 10, 0, 0, 0, 0, 0, 0, 15, 67,
+ 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0,
+ 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0,
+ 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64,
+ 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 65, 1, 0, 0, 65, 1, 0, 0,199, 1, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0,127, 2, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,160, 50, 90, 10,201, 0, 0, 0, 1, 0, 0, 0,200, 51, 90, 10,
+120, 49, 90, 10, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194,
+ 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,
+ 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,
+102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 1, 0, 0, 55, 5, 0, 0,199, 1, 0, 0,199, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,200, 51, 90, 10,
+201, 0, 0, 0, 1, 0, 0, 0,240, 52, 90, 10,160, 50, 90, 10, 0, 0, 0, 0, 0, 0, 35, 67, 0,192,108,196, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 35, 67, 0,128, 23,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,111, 2, 0, 0,
+ 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,111, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0,
+ 18, 0, 0, 0, 6, 0,180, 0,112, 2,163, 0, 94, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 5, 0, 0,
+ 55, 5, 0, 0,199, 1, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
+ 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,248, 0, 0, 0,240, 52, 90, 10,201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,200, 51, 90, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 65, 1, 0, 0, 55, 5, 0, 0,199, 1, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,247, 3,127, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 24, 54, 90, 10, 68, 65, 84, 65, 72, 3, 0, 0, 24, 54, 90, 10,159, 0, 0, 0, 1, 0, 0, 0,
+190, 35, 30, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 49,123, 61, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,111, 18,131,187, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,128, 0, 0, 0,128, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+190, 35, 30, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 49,123, 61, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,111, 18,131,187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+149, 53,207, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51,115,130, 65, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,255,255,121,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+190, 35, 30, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 49,123, 61, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,111, 18,131,187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,149, 53,207, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0,
+240, 11, 81, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 37, 3, 0, 0,254, 4, 0, 0, 26, 0, 0, 0,186, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,218, 1,161, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 56, 1, 89, 3, 0, 0, 0, 0, 68, 65, 84, 65,104, 3, 0, 0, 56, 1, 89, 3, 0, 0, 0, 0,
-159, 0, 0, 0, 1, 0, 0, 0,193,198,198, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 13,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,
- 74,215, 76,190, 0, 0, 0, 0, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, 1, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,144, 57, 90, 10,160, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0,
+ 1, 0, 7, 0,208,245, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0,205,204,204, 61, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0,184, 58, 90, 10,
+200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,136,101, 89, 10,224, 87, 89, 10, 96, 87, 89, 10,160, 89, 89, 10, 96, 89, 89, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63, 1, 0, 0,173, 1, 0, 0, 69, 4, 0, 0, 3, 3, 64, 1,153, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,152, 61, 90, 10,152, 61, 90, 10, 72, 59, 90, 10,112, 60, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 72, 59, 90, 10,201, 0, 0, 0, 1, 0, 0, 0,112, 60, 90, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,128,244, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,160, 67, 0, 0, 0, 0,
+ 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 83, 67, 0, 0,200, 65, 0, 0, 83, 67,
+ 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 64, 1, 26, 0, 64, 1,
+ 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 1, 0, 0,173, 1, 0, 0,198, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,112, 60, 90, 10,
+201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 72, 59, 90, 10, 0, 0, 0, 0, 0,128,131, 67, 0, 0,228,194, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,128,151, 67, 0, 64, 27,196, 0, 0, 0, 0, 47, 1, 0, 0, 64, 1, 0, 0, 18, 0, 0, 0,126, 2, 0, 0,
+ 0, 0, 0, 0, 46, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 46, 1, 0, 0, 18, 0, 0, 0,126, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 6, 0, 0, 2, 0, 3, 3,
+ 0, 0, 0, 4, 6, 0, 64, 1,127, 2, 47, 1,109, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 63, 1, 0, 0,199, 1, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 1,127, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,252, 0, 0, 0,152, 61, 90, 10,169, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,173, 79, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, 12, 0, 0, 0, 0,173, 79, 9,224, 0, 0, 0,
+ 1, 0, 0, 0, 14, 0, 0, 0, 14, 0, 0, 0,192, 62, 90, 10, 68, 65, 84, 65,168, 0, 0, 0,192, 62, 90, 10,223, 0, 0, 0,
+ 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 16,228, 90, 10, 19, 0, 0, 0, 1, 0, 1, 0, 16,228, 90, 10, 20, 0, 0, 0,
+ 1, 0, 1, 0, 16,228, 90, 10, 21, 0, 1, 0, 1, 0, 0, 0, 16,228, 90, 10, 0, 0, 0, 0, 1, 0, 1, 0,224,243, 90, 10,
+ 0, 0, 0, 0, 1, 0, 1, 0,152,250, 90, 10, 0, 0, 0, 0, 1, 0, 1, 0,240, 74, 92, 10, 0, 0, 0, 0, 1, 0, 1, 0,
+ 40, 4, 91, 10, 0, 0, 0, 0, 1, 0, 1, 0,224,168, 91, 10, 0, 0, 0, 0, 1, 0, 1, 0, 96,255, 90, 10, 0, 0, 0, 0,
+ 1, 0, 1, 0,112,240, 90, 10, 0, 0, 0, 0, 1, 0, 1, 0,208,245, 90, 10, 0, 0, 0, 0, 1, 0, 1, 0,216,239, 90, 10,
+ 21, 0, 0, 0, 1, 0, 1, 0, 16,228, 90, 10, 83, 78, 0, 0,140, 0, 0, 0,248, 63, 90, 10,196, 0, 0, 0, 1, 0, 0, 0,
+ 64,130, 90, 10,168, 85, 89, 10, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 83, 99,114,105,112,116,105,110,103, 0,103, 46, 48, 48,
+ 49, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 64, 90, 10, 48, 68, 90, 10,112, 68, 90, 10,
+160, 74, 90, 10,232, 74, 90, 10, 88,124, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 16,228, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,176, 64, 90, 10,197, 0, 0, 0, 1, 0, 0, 0,
+240, 64, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,240, 64, 90, 10,
+197, 0, 0, 0, 1, 0, 0, 0, 48, 65, 90, 10,176, 64, 90, 10, 0, 0, 0, 0, 0, 0, 97, 4, 0, 0, 0, 0, 68, 65, 84, 65,
+ 20, 0, 0, 0, 48, 65, 90, 10,197, 0, 0, 0, 1, 0, 0, 0,112, 65, 90, 10,240, 64, 90, 10, 0, 0, 0, 0,118, 7, 97, 4,
+ 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,112, 65, 90, 10,197, 0, 0, 0, 1, 0, 0, 0,176, 65, 90, 10, 48, 65, 90, 10,
+ 0, 0, 0, 0,118, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,176, 65, 90, 10,197, 0, 0, 0, 1, 0, 0, 0,
+240, 65, 90, 10,112, 65, 90, 10, 0, 0, 0, 0, 0, 0, 70, 4, 1, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,240, 65, 90, 10,
+197, 0, 0, 0, 1, 0, 0, 0, 48, 66, 90, 10,176, 65, 90, 10, 0, 0, 0, 0,118, 7, 70, 4, 1, 0, 0, 0, 68, 65, 84, 65,
+ 20, 0, 0, 0, 48, 66, 90, 10,197, 0, 0, 0, 1, 0, 0, 0,112, 66, 90, 10,240, 65, 90, 10, 0, 0, 0, 0,232, 5, 70, 4,
+ 1, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,112, 66, 90, 10,197, 0, 0, 0, 1, 0, 0, 0,176, 66, 90, 10, 48, 66, 90, 10,
+ 0, 0, 0, 0,232, 5, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,176, 66, 90, 10,197, 0, 0, 0, 1, 0, 0, 0,
+240, 66, 90, 10,112, 66, 90, 10, 0, 0, 0, 0, 0, 0,184, 1, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,240, 66, 90, 10,
+197, 0, 0, 0, 1, 0, 0, 0, 48, 67, 90, 10,176, 66, 90, 10, 0, 0, 0, 0,232, 5,184, 1, 0, 0, 0, 0, 68, 65, 84, 65,
+ 20, 0, 0, 0, 48, 67, 90, 10,197, 0, 0, 0, 1, 0, 0, 0,112, 67, 90, 10,240, 66, 90, 10, 0, 0, 0, 0,244, 2, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,112, 67, 90, 10,197, 0, 0, 0, 1, 0, 0, 0,176, 67, 90, 10, 48, 67, 90, 10,
+ 0, 0, 0, 0,244, 2,184, 1, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,176, 67, 90, 10,197, 0, 0, 0, 1, 0, 0, 0,
+240, 67, 90, 10,112, 67, 90, 10, 0, 0, 0, 0,232, 5, 44, 3, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,240, 67, 90, 10,
+197, 0, 0, 0, 1, 0, 0, 0, 48, 68, 90, 10,176, 67, 90, 10, 0, 0, 0, 0,118, 7, 44, 3, 0, 0, 0, 0, 68, 65, 84, 65,
+ 20, 0, 0, 0, 48, 68, 90, 10,197, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,240, 67, 90, 10, 0, 0, 0, 0,244, 2, 70, 4,
+ 1, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,112, 68, 90, 10,198, 0, 0, 0, 1, 0, 0, 0,184, 68, 90, 10, 0, 0, 0, 0,
+240, 64, 90, 10, 48, 65, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,184, 68, 90, 10,198, 0, 0, 0,
+ 1, 0, 0, 0, 0, 69, 90, 10,112, 68, 90, 10,240, 64, 90, 10,176, 65, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 24, 0, 0, 0, 0, 69, 90, 10,198, 0, 0, 0, 1, 0, 0, 0, 72, 69, 90, 10,184, 68, 90, 10, 48, 65, 90, 10,240, 65, 90, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 72, 69, 90, 10,198, 0, 0, 0, 1, 0, 0, 0,144, 69, 90, 10,
+ 0, 69, 90, 10,176, 65, 90, 10,240, 65, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,144, 69, 90, 10,
+198, 0, 0, 0, 1, 0, 0, 0,216, 69, 90, 10, 72, 69, 90, 10,240, 65, 90, 10, 48, 66, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 24, 0, 0, 0,216, 69, 90, 10,198, 0, 0, 0, 1, 0, 0, 0, 32, 70, 90, 10,144, 69, 90, 10,112, 65, 90, 10,
+112, 66, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 32, 70, 90, 10,198, 0, 0, 0, 1, 0, 0, 0,
+104, 70, 90, 10,216, 69, 90, 10,176, 64, 90, 10,176, 66, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,
+104, 70, 90, 10,198, 0, 0, 0, 1, 0, 0, 0,176, 70, 90, 10, 32, 70, 90, 10,176, 65, 90, 10,176, 66, 90, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,176, 70, 90, 10,198, 0, 0, 0, 1, 0, 0, 0,248, 70, 90, 10,104, 70, 90, 10,
+ 48, 66, 90, 10,240, 66, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,248, 70, 90, 10,198, 0, 0, 0,
+ 1, 0, 0, 0, 64, 71, 90, 10,176, 70, 90, 10,112, 66, 90, 10,240, 66, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 24, 0, 0, 0, 64, 71, 90, 10,198, 0, 0, 0, 1, 0, 0, 0,136, 71, 90, 10,248, 70, 90, 10,176, 64, 90, 10, 48, 67, 90, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,136, 71, 90, 10,198, 0, 0, 0, 1, 0, 0, 0,208, 71, 90, 10,
+ 64, 71, 90, 10,112, 66, 90, 10, 48, 67, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,208, 71, 90, 10,
+198, 0, 0, 0, 1, 0, 0, 0, 24, 72, 90, 10,136, 71, 90, 10,176, 66, 90, 10,112, 67, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 24, 0, 0, 0, 24, 72, 90, 10,198, 0, 0, 0, 1, 0, 0, 0, 96, 72, 90, 10,208, 71, 90, 10,240, 66, 90, 10,
+112, 67, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 96, 72, 90, 10,198, 0, 0, 0, 1, 0, 0, 0,
+168, 72, 90, 10, 24, 72, 90, 10, 48, 67, 90, 10,112, 67, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,
+168, 72, 90, 10,198, 0, 0, 0, 1, 0, 0, 0,240, 72, 90, 10, 96, 72, 90, 10,112, 66, 90, 10,176, 67, 90, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,240, 72, 90, 10,198, 0, 0, 0, 1, 0, 0, 0, 56, 73, 90, 10,168, 72, 90, 10,
+ 48, 66, 90, 10,176, 67, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 56, 73, 90, 10,198, 0, 0, 0,
+ 1, 0, 0, 0,128, 73, 90, 10,240, 72, 90, 10,240, 65, 90, 10,240, 67, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 24, 0, 0, 0,128, 73, 90, 10,198, 0, 0, 0, 1, 0, 0, 0,200, 73, 90, 10, 56, 73, 90, 10,112, 65, 90, 10,240, 67, 90, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,200, 73, 90, 10,198, 0, 0, 0, 1, 0, 0, 0, 16, 74, 90, 10,
+128, 73, 90, 10,176, 67, 90, 10,240, 67, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 16, 74, 90, 10,
+198, 0, 0, 0, 1, 0, 0, 0, 88, 74, 90, 10,200, 73, 90, 10,176, 65, 90, 10, 48, 68, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 24, 0, 0, 0, 88, 74, 90, 10,198, 0, 0, 0, 1, 0, 0, 0,160, 74, 90, 10, 16, 74, 90, 10, 48, 66, 90, 10,
+ 48, 68, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,160, 74, 90, 10,198, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 88, 74, 90, 10,112, 67, 90, 10, 48, 68, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0,
+232, 74, 90, 10,200, 0, 0, 0, 1, 0, 0, 0,200, 77, 90, 10, 0, 0, 0, 0,176, 65, 90, 10,240, 64, 90, 10, 48, 65, 90, 10,
+240, 65, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0, 71, 4, 0, 0, 97, 4, 0, 0, 7, 7,119, 7, 27, 0, 1, 0,
+ 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0,224,129, 90, 10,224,129, 90, 10,120, 75, 90, 10,160, 76, 90, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,120, 75, 90, 10,201, 0, 0, 0, 1, 0, 0, 0,
+160, 76, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,148, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,238, 68,
+ 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65,
+ 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,119, 7,
+ 26, 0,119, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0, 71, 4, 0, 0,
+ 96, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,119, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,
+160, 76, 90, 10,201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,120, 75, 90, 10, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192,
+ 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0,
+ 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,129, 7, 2, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 97, 4, 0, 0, 97, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0,200, 77, 90, 10,200, 0, 0, 0, 1, 0, 0, 0,240, 98, 90, 10,232, 74, 90, 10,
+112, 66, 90, 10,176, 67, 90, 10,240, 67, 90, 10,112, 65, 90, 10, 0, 0, 0, 0,233, 5, 0, 0,118, 7, 0, 0, 0, 0, 0, 0,
+ 43, 3, 0, 0, 4, 4,142, 1, 44, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 97, 90, 10,232, 97, 90, 10,
+ 88, 78, 90, 10,128, 79, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,
+ 88, 78, 90, 10,201, 0, 0, 0, 1, 0, 0, 0,128, 79, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 67, 0, 0, 0, 0,
+ 0, 0,208, 65, 0, 0, 0, 0, 0, 0,199, 67, 0, 0, 0, 0, 0, 0,248, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,141, 1, 0, 0, 0, 0, 0, 0,
+ 30, 0, 0, 0, 0,128,137, 67, 0, 0,200, 65, 0,128,137, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,142, 1, 31, 0,142, 1, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+233, 5, 0, 0,118, 7, 0, 0, 13, 3, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+142, 1, 31, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,128, 79, 90, 10,201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 88, 78, 90, 10,
+ 0, 0, 0, 0, 0,128,198, 67, 0,128, 86,196, 0, 0, 0, 0, 0, 0, 0, 0,254,127,190, 67,254, 63, 67,196, 0, 0, 0, 0,
+125, 1, 0, 0,142, 1, 0, 0, 0, 0, 0, 0, 12, 3, 0, 0, 0, 0, 0, 0,126, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
+ 0, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 12, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,142, 1, 13, 3,125, 1, 13, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233, 5, 0, 0,118, 7, 0, 0, 0, 0, 0, 0, 12, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 1, 13, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 80, 90, 10,120, 96, 90, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,168, 80, 90, 10,199, 0, 0, 0,
+ 1, 0, 0, 0, 24, 82, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,
+111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,
+111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,110,116,101,120,116, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,255,124, 1, 36, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, 24, 82, 90, 10,199, 0, 0, 0, 1, 0, 0, 0,136, 83, 90, 10,168, 80, 90, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255,124, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,
+136, 83, 90, 10,199, 0, 0, 0, 1, 0, 0, 0,248, 84, 90, 10, 24, 82, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
+ 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
+ 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101,
+114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255,
+124, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,248, 84, 90, 10,199, 0, 0, 0, 1, 0, 0, 0,
+104, 86, 90, 10,136, 83, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,
+105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,
+105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,254,124, 1,203, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 64, 1, 0, 0,104, 86, 90, 10,199, 0, 0, 0, 1, 0, 0, 0,216, 87, 90, 10,248, 84, 90, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 58,254,124, 1, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,216, 87, 90, 10,
+199, 0, 0, 0, 1, 0, 0, 0, 72, 89, 90, 10,104, 86, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80,
+ 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70,117,108,108, 32, 83, 97,109,
+112,108,101, 32, 77,111,116,105,111,110, 32, 66,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,254,124, 1, 0, 0,
+ 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, 72, 89, 90, 10,199, 0, 0, 0, 1, 0, 0, 0,184, 90, 90, 10,
+216, 87, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,164,253,124, 1,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 64, 1, 0, 0,184, 90, 90, 10,199, 0, 0, 0, 1, 0, 0, 0, 40, 92, 90, 10, 72, 89, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 10,253,124, 1,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, 40, 92, 90, 10,199, 0, 0, 0,
+ 1, 0, 0, 0,152, 93, 90, 10,184, 90, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,
+114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,
+114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,242,252,124, 1, 0, 0, 0, 0, 0, 0,
+ 4, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,152, 93, 90, 10,199, 0, 0, 0, 1, 0, 0, 0, 8, 95, 90, 10, 40, 92, 90, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,
+103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,
+103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218,252,124, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,
+ 8, 95, 90, 10,199, 0, 0, 0, 1, 0, 0, 0,120, 96, 90, 10,152, 93, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
+ 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68,
+ 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,
+112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194,252,
+124, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,120, 96, 90, 10,199, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 8, 95, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,170,252,124, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
+ 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,216, 0, 0, 0,232, 97, 90, 10,165, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0,240, 98, 90, 10,200, 0, 0, 0, 1, 0, 0, 0,
+184,103, 90, 10,200, 77, 90, 10, 48, 67, 90, 10,112, 67, 90, 10,240, 66, 90, 10,112, 66, 90, 10, 0, 0, 0, 0,245, 2, 0, 0,
+231, 5, 0, 0, 0, 0, 0, 0,183, 1, 0, 0, 18, 18,243, 2,184, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 24,102, 90, 10, 24,102, 90, 10,128, 99, 90, 10,168,100, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,248, 0, 0, 0,128, 99, 90, 10,201, 0, 0, 0, 1, 0, 0, 0,168,100, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,192, 77, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192, 60, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+242, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,243, 2, 26, 0,243, 2, 26, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,245, 2, 0, 0,231, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,243, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,168,100, 90, 10,201, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0,128, 99, 90, 10, 0, 0, 0, 0, 0,128, 60, 68, 0, 0, 0, 0, 0, 0, 48, 65, 0, 0, 0, 0, 0,128, 56, 68,
+ 0, 0, 0, 0, 0, 0,207, 67,226, 2, 0, 0,243, 2, 0, 0, 0, 0, 0, 0,157, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,225, 2, 0, 0, 0, 0, 0, 0,157, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 2, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,243, 2,
+158, 1,226, 2,158, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,245, 2, 0, 0,231, 5, 0, 0, 26, 0, 0, 0,
+183, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,243, 2,158, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 28, 0, 0, 0,
+208,101, 90, 10,180, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0,208,142, 85, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,208,142, 85, 10, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,112, 1, 0, 0, 24,102, 90, 10,181, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 4, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,101, 90, 10,208,101, 90, 10, 62, 62, 62, 32,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0,184,103, 90, 10,200, 0, 0, 0, 1, 0, 0, 0,176,114, 90, 10,240, 98, 90, 10,
+112, 67, 90, 10, 48, 68, 90, 10, 48, 66, 90, 10,240, 66, 90, 10, 0, 0, 0, 0,245, 2, 0, 0,231, 5, 0, 0,185, 1, 0, 0,
+ 69, 4, 0, 0, 1, 1,243, 2,141, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,113, 90, 10,136,113, 90, 10,
+ 72,104, 90, 10,232,108, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,
+ 72,104, 90, 10,201, 0, 0, 0, 1, 0, 0, 0,112,105, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,102, 68, 0, 0, 0, 0,
+ 0, 0,208, 65, 0, 0, 0, 0, 0,192, 60, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,242, 2, 0, 0, 0, 0, 0, 0,
+ 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,243, 2, 26, 0,243, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+245, 2, 0, 0,231, 5, 0, 0,185, 1, 0, 0,210, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+243, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,112,105, 90, 10,201, 0, 0, 0, 1, 0, 0, 0,152,106, 90, 10, 72,104, 90, 10,
+ 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,
+143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
+ 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,245, 2, 0, 0,245, 2, 0, 0,211, 1, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,115, 2, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,152,106, 90, 10,201, 0, 0, 0,
+ 1, 0, 0, 0,192,107, 90, 10,112,105, 90, 10, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,
+231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,
+142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4,
+ 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,245, 2, 0, 0,231, 5, 0, 0,
+211, 1, 0, 0,211, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0,
+ 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+248, 0, 0, 0,192,107, 90, 10,201, 0, 0, 0, 1, 0, 0, 0,232,108, 90, 10,152,106, 90, 10, 0, 0, 0, 0, 0, 0, 35, 67,
+ 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0,
+ 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0,
+ 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64,
+ 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,122, 2,163, 0,104, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,231, 5, 0, 0,231, 5, 0, 0,211, 1, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,232,108, 90, 10,201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+192,107, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,245, 2, 0, 0,231, 5, 0, 0,211, 1, 0, 0, 69, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,243, 2,115, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,110, 90, 10, 68, 65, 84, 65, 72, 3, 0, 0, 16,110, 90, 10,
+159, 0, 0, 0, 1, 0, 0, 0, 1, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159,148,168, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0,
+225,215,163,188, 0, 0, 0, 0, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62,
35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 25, 95,192, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,160, 84, 89,188, 0, 0, 0, 0, 52,177,205,190,142, 74, 70, 62,
-166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0,188,173, 54, 64,136, 95,161,191,
-147,231,198, 63, 0, 0,128, 63, 12, 2, 35, 63,208,249,224,190, 48,180, 81,191,184,158, 81,191,130, 71,181, 63,140,225, 88, 62,
- 26, 63,185, 62, 35, 44,185, 62, 49,192,168,188,206,156,122, 63,138, 84,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0,
-101, 98, 82, 64, 0, 25, 95, 64,101, 47,135, 62,134, 86, 22, 63, 32,243, 11,188, 0, 0,160,179,195, 15,188,190,132, 75, 53, 62,
-216,125, 81, 63, 0, 0,192,179,115, 77,100,193, 17,173,201, 64,181,148,248,192,202,247,159,192,233, 74, 87, 65,247, 46,190,192,
- 88,106,234, 64, 44, 8,160, 64, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62,
+214,211,111,193, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,176, 84, 89,188, 0, 0, 0, 0, 53,177,205,190,142, 74, 70, 62,
+166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0,164, 96, 68, 65,111,121,173,192,
+248,209,213, 64, 0, 0,128, 63,180,157,229, 62,180,115, 7,191,222,160, 81,191,184,158, 81,191,118, 90,127, 63, 12,148,130, 62,
+ 9, 46,185, 62, 35, 44,185, 62,147,180,109,188, 27,227,150, 63,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0,
+ 96,132,111, 65,214,211,111, 65,116,234,191, 62,189,117, 85, 63,128, 32, 71,188, 0, 64,130,182,126, 42,156,190, 75,140, 22, 62,
+123,250, 45, 63, 0, 0, 2, 54,215,104, 25,196,135,132,135, 67, 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68,160, 87,135,195,
+205,209,166, 67,151,254, 71, 66, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62,
35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 25, 95,192, 0, 0,128, 63, 12, 2, 35, 63,208,249,224,190, 48,180, 81,191,184,158, 81,191,130, 71,181, 63,140,225, 88, 62,
- 26, 63,185, 62, 35, 44,185, 62, 49,192,168,188,206,156,122, 63,138, 84,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0,
-101, 98, 82, 64, 0, 25, 95, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+214,211,111,193, 0, 0,128, 63,180,157,229, 62,180,115, 7,191,222,160, 81,191,184,158, 81,191,118, 90,127, 63, 12,148,130, 62,
+ 9, 46,185, 62, 35, 44,185, 62,147,180,109,188, 27,227,150, 63,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0,
+ 96,132,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, 0, 25, 95, 64, 0, 25, 95, 64,
- 0, 0, 0, 0, 0, 0, 0, 0,116, 16, 50, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190,214,211,111, 65,214,211,111, 65,
+ 0, 0, 0, 0, 0, 0, 0, 0,143,185, 30, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -2634,515 +4311,995 @@ char datatoc_startup_blend[]= {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 1, 0, 0,232, 4, 89, 3, 0, 0, 0, 0,
-160, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,
- 8,184, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,136,113, 90, 10,160, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,
+ 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,208,245, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 96, 0, 0, 0,176,114, 90, 10,200, 0, 0, 0, 1, 0, 0, 0,120,119, 90, 10,184,103, 90, 10,176, 64, 90, 10,176, 66, 90, 10,
+112, 67, 90, 10, 48, 67, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0,243, 2, 0, 0, 0, 0, 0, 0,183, 1, 0, 0, 18, 18,244, 2,
+184, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,117, 90, 10,216,117, 90, 10, 64,115, 90, 10,104,116, 90, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 64,115, 90, 10,201, 0, 0, 0,
+ 1, 0, 0, 0,104,116, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
+ 0, 0, 61, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,243, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68,
+ 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4,
+ 10, 0,244, 2, 26, 0,244, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,243, 2, 0, 0,
+ 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,244, 2, 26, 0, 0, 0, 1, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+248, 0, 0, 0,104,116, 90, 10,201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64,115, 90, 10, 0, 0, 0, 0, 0,192, 60, 68,
+ 0, 0, 0, 0, 0, 0, 65, 67, 0, 0, 0, 0, 0,192, 56, 68, 0, 0, 0, 0, 0, 0,207, 67,227, 2, 0, 0,244, 2, 0, 0,
+ 0, 0, 0, 0,157, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,226, 2, 0, 0,
+ 0, 0, 0, 0,157, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 2, 2, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,244, 2,158, 1,227, 2,158, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,243, 2, 0, 0, 26, 0, 0, 0,183, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,244, 2,158, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,205,204,204, 61, 0, 0,250, 67,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 7, 0, 10, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0,208, 0, 0, 0,
-248, 10, 89, 3, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,164, 88, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 86,105,100,101,111, 32, 69,100,105,116,105,110,103, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 12, 89, 3, 0, 0, 0, 0,
-232, 16, 89, 3, 0, 0, 0, 0, 88, 17, 89, 3, 0, 0, 0, 0,200, 24, 89, 3, 0, 0, 0, 0, 56, 25, 89, 3, 0, 0, 0, 0,
-152,134, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,159, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 32, 0, 0, 0, 24, 12, 89, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,136, 12, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
-136, 12, 89, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,248, 12, 89, 3, 0, 0, 0, 0, 24, 12, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248, 12, 89, 3, 0, 0, 0, 0,
-196, 0, 0, 0, 1, 0, 0, 0,104, 13, 89, 3, 0, 0, 0, 0,136, 12, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-254, 4,214, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,104, 13, 89, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,
-216, 13, 89, 3, 0, 0, 0, 0,248, 12, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 32, 0, 0, 0,216, 13, 89, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 72, 14, 89, 3, 0, 0, 0, 0,
-104, 13, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,187, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
- 72, 14, 89, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,184, 14, 89, 3, 0, 0, 0, 0,216, 13, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,254, 4,187, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184, 14, 89, 3, 0, 0, 0, 0,
-196, 0, 0, 0, 1, 0, 0, 0, 40, 15, 89, 3, 0, 0, 0, 0, 72, 14, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-254, 4, 84, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 40, 15, 89, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,
-152, 15, 89, 3, 0, 0, 0, 0,184, 14, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 32, 0, 0, 0,152, 15, 89, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0, 8, 16, 89, 3, 0, 0, 0, 0,
- 40, 15, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 2,187, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,
- 8, 16, 89, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,120, 16, 89, 3, 0, 0, 0, 0,152, 15, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,120, 16, 89, 3, 0, 0, 0, 0,
-196, 0, 0, 0, 1, 0, 0, 0,232, 16, 89, 3, 0, 0, 0, 0, 8, 16, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 52, 2, 84, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232, 16, 89, 3, 0, 0, 0, 0,196, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,120, 16, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 64, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0, 88, 17, 89, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,200, 17, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,136, 12, 89, 3, 0, 0, 0, 0,248, 12, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,200, 17, 89, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 56, 18, 89, 3, 0, 0, 0, 0,
- 88, 17, 89, 3, 0, 0, 0, 0,136, 12, 89, 3, 0, 0, 0, 0,216, 13, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0, 56, 18, 89, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,168, 18, 89, 3, 0, 0, 0, 0,
-200, 17, 89, 3, 0, 0, 0, 0,248, 12, 89, 3, 0, 0, 0, 0, 72, 14, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,168, 18, 89, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 24, 19, 89, 3, 0, 0, 0, 0,
- 56, 18, 89, 3, 0, 0, 0, 0,216, 13, 89, 3, 0, 0, 0, 0, 72, 14, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0, 24, 19, 89, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,136, 19, 89, 3, 0, 0, 0, 0,
-168, 18, 89, 3, 0, 0, 0, 0, 72, 14, 89, 3, 0, 0, 0, 0,184, 14, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,136, 19, 89, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,248, 19, 89, 3, 0, 0, 0, 0,
- 24, 19, 89, 3, 0, 0, 0, 0, 24, 12, 89, 3, 0, 0, 0, 0, 40, 15, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,248, 19, 89, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,104, 20, 89, 3, 0, 0, 0, 0,
-136, 19, 89, 3, 0, 0, 0, 0,216, 13, 89, 3, 0, 0, 0, 0,152, 15, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,104, 20, 89, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,216, 20, 89, 3, 0, 0, 0, 0,
-248, 19, 89, 3, 0, 0, 0, 0, 40, 15, 89, 3, 0, 0, 0, 0, 8, 16, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,216, 20, 89, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 72, 21, 89, 3, 0, 0, 0, 0,
-104, 20, 89, 3, 0, 0, 0, 0, 8, 16, 89, 3, 0, 0, 0, 0,120, 16, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0, 72, 21, 89, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,184, 21, 89, 3, 0, 0, 0, 0,
-216, 20, 89, 3, 0, 0, 0, 0,152, 15, 89, 3, 0, 0, 0, 0,120, 16, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,184, 21, 89, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 40, 22, 89, 3, 0, 0, 0, 0,
- 72, 21, 89, 3, 0, 0, 0, 0,184, 14, 89, 3, 0, 0, 0, 0,232, 16, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0, 40, 22, 89, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,152, 22, 89, 3, 0, 0, 0, 0,
-184, 21, 89, 3, 0, 0, 0, 0,104, 13, 89, 3, 0, 0, 0, 0,232, 16, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,152, 22, 89, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 8, 23, 89, 3, 0, 0, 0, 0,
- 40, 22, 89, 3, 0, 0, 0, 0, 40, 15, 89, 3, 0, 0, 0, 0,232, 16, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0, 8, 23, 89, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,120, 23, 89, 3, 0, 0, 0, 0,
-152, 22, 89, 3, 0, 0, 0, 0, 24, 12, 89, 3, 0, 0, 0, 0,104, 13, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,120, 23, 89, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,232, 23, 89, 3, 0, 0, 0, 0,
- 8, 23, 89, 3, 0, 0, 0, 0, 72, 14, 89, 3, 0, 0, 0, 0,152, 15, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,232, 23, 89, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 88, 24, 89, 3, 0, 0, 0, 0,
-120, 23, 89, 3, 0, 0, 0, 0,184, 14, 89, 3, 0, 0, 0, 0,120, 16, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0, 88, 24, 89, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0,200, 24, 89, 3, 0, 0, 0, 0,
-232, 23, 89, 3, 0, 0, 0, 0,216, 13, 89, 3, 0, 0, 0, 0, 8, 16, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0,200, 24, 89, 3, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 88, 24, 89, 3, 0, 0, 0, 0,184, 14, 89, 3, 0, 0, 0, 0, 8, 16, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,160, 0, 0, 0, 56, 25, 89, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0, 8, 29, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,216, 13, 89, 3, 0, 0, 0, 0,136, 12, 89, 3, 0, 0, 0, 0,248, 12, 89, 3, 0, 0, 0, 0,
- 72, 14, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 0, 0,188, 2, 0, 0,214, 2, 0, 0,
- 7, 7,255, 4, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,158, 89, 3, 0, 0, 0, 0,
-232,158, 89, 3, 0, 0, 0, 0, 40, 26, 89, 3, 0, 0, 0, 0,152, 27, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
- 40, 26, 89, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,152, 27, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,224,162, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,159, 68, 0, 0, 0, 0, 0, 0,208, 65,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,254, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,255, 4, 26, 0,255, 4, 26, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 0, 0,188, 2, 0, 0,213, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-152, 27, 89, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 26, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,
-112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
- 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,129, 7, 2, 0,112, 7, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214, 2, 0, 0,214, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 28, 0, 0, 0,144,117, 90, 10,180, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0,112, 60, 44, 9, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,
+112, 60, 44, 9, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,112, 1, 0, 0,216,117, 90, 10,181, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,144,117, 90, 10,144,117, 90, 10, 62, 62, 62, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,
- 8, 29, 89, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0, 8, 42, 89, 3, 0, 0, 0, 0, 56, 25, 89, 3, 0, 0, 0, 0,
- 24, 12, 89, 3, 0, 0, 0, 0, 40, 15, 89, 3, 0, 0, 0, 0,232, 16, 89, 3, 0, 0, 0, 0,104, 13, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 15, 15,255, 4, 64, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 32, 89, 3, 0, 0, 0, 0,136, 40, 89, 3, 0, 0, 0, 0,
-248, 29, 89, 3, 0, 0, 0, 0,104, 31, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248, 29, 89, 3, 0, 0, 0, 0,
-200, 0, 0, 0, 1, 0, 0, 0,104, 31, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,140, 68,
- 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,159, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 0, 0,
- 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,255, 4, 26, 0,255, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,255, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104, 31, 89, 3, 0, 0, 0, 0,
-200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 29, 89, 3, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67,
- 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,254, 4, 0, 0,
- 18, 0, 0, 0, 37, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65,
- 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0,255, 4, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 0, 0, 26, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,255, 4, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,216, 32, 89, 3, 0, 0, 0, 0,
-176, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,121,116,104,111,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0,120,119, 90, 10,
+200, 0, 0, 0, 1, 0, 0, 0, 88,124, 90, 10,176,114, 90, 10,176, 67, 90, 10, 48, 66, 90, 10,240, 65, 90, 10,240, 67, 90, 10,
+ 0, 0, 0, 0,233, 5, 0, 0,118, 7, 0, 0, 45, 3, 0, 0, 69, 4, 0, 0, 3, 3,142, 1, 25, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 88,122, 90, 10, 88,122, 90, 10, 8,120, 90, 10, 48,121, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 8,120, 90, 10,201, 0, 0, 0, 1, 0, 0, 0, 48,121, 90, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,128,244, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,199, 67, 0, 0, 0, 0,
+ 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,141, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,149, 67, 0, 0,200, 65, 0,128,149, 67,
+ 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,142, 1, 26, 0,142, 1,
+ 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233, 5, 0, 0,118, 7, 0, 0, 45, 3, 0, 0, 70, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0,
- 68, 65, 84, 65,160, 0, 0, 0, 8, 42, 89, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0, 88, 66, 89, 3, 0, 0, 0, 0,
- 8, 29, 89, 3, 0, 0, 0, 0, 40, 15, 89, 3, 0, 0, 0, 0, 8, 16, 89, 3, 0, 0, 0, 0,184, 14, 89, 3, 0, 0, 0, 0,
-232, 16, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 0, 0, 65, 0, 0, 0, 83, 1, 0, 0,
- 8, 8,255, 4, 19, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 48, 89, 3, 0, 0, 0, 0,
- 56, 65, 89, 3, 0, 0, 0, 0,248, 42, 89, 3, 0, 0, 0, 0, 72, 47, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-248, 42, 89, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,104, 44, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 64, 39, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,159, 68, 0, 0, 0, 0, 0, 0,208, 65,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 48,121, 90, 10,
+201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 8,120, 90, 10, 0, 0, 0, 0, 0,128,131, 67, 0, 0,228,194, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,128,190, 67, 0, 0,109,195, 0, 0, 0, 0,125, 1, 0, 0,142, 1, 0, 0, 18, 0, 0, 0,254, 0, 0, 0,
+ 0, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 18, 0, 0, 0,254, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 6, 0, 0, 2, 0, 3, 3,
+ 0, 0, 0, 4, 6, 0,142, 1,255, 0,125, 1,237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233, 5, 0, 0,
+118, 7, 0, 0, 71, 3, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 1,255, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,254, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 96,191, 68, 0, 0,200, 65, 0, 96,191, 68, 0, 0,200, 65,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,255, 4, 26, 0,255, 4, 26, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 0, 0, 65, 0, 0, 0, 90, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,252, 0, 0, 0, 88,122, 90, 10,169, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-104, 44, 89, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,216, 45, 89, 3, 0, 0, 0, 0,248, 42, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 92, 67, 0, 0,121,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, 0, 0,121,195, 0, 0, 0, 0,
-203, 0, 0, 0,220, 0, 0, 0, 0, 0, 0, 0,248, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
- 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0,248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,220, 0,249, 0,203, 0,249, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 4, 0, 0,254, 4, 0, 0, 91, 0, 0, 0, 83, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0,249, 0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-216, 45, 89, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 72, 47, 89, 3, 0, 0, 0, 0,104, 44, 89, 3, 0, 0, 0, 0,
- 0, 0,112,196, 0, 0,112, 68, 0, 0, 7,196, 0, 0, 7, 68, 0, 0,112,196, 0, 0,112, 68, 0, 0, 7,196, 0, 0, 7, 68,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 59, 70, 0,128, 59, 70,
-172,197, 39, 55, 0, 80,195, 71, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 4, 0, 0, 83, 1, 0, 0, 83, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 7, 0, 1, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 16, 55, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, 12, 0, 0, 0,184, 16, 55, 10,224, 0, 0, 0,
+ 1, 0, 0, 0, 14, 0, 0, 0, 14, 0, 0, 0,128,123, 90, 10, 68, 65, 84, 65,168, 0, 0, 0,128,123, 90, 10,223, 0, 0, 0,
+ 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 16,228, 90, 10, 19, 0, 0, 0, 1, 0, 1, 0, 16,228, 90, 10, 20, 0, 0, 0,
+ 1, 0, 1, 0, 16,228, 90, 10, 21, 0, 1, 0, 1, 0, 0, 0, 16,228, 90, 10, 0, 0, 0, 0, 1, 0, 1, 0,224,243, 90, 10,
+ 0, 0, 0, 0, 1, 0, 1, 0,152,250, 90, 10, 0, 0, 0, 0, 1, 0, 1, 0,240, 74, 92, 10, 0, 0, 0, 0, 1, 0, 1, 0,
+ 40, 4, 91, 10, 0, 0, 0, 0, 1, 0, 1, 0,224,168, 91, 10, 0, 0, 0, 0, 1, 0, 1, 0, 96,255, 90, 10, 0, 0, 0, 0,
+ 1, 0, 1, 0,112,240, 90, 10, 0, 0, 0, 0, 1, 0, 1, 0,208,245, 90, 10, 0, 0, 0, 0, 1, 0, 1, 0,216,239, 90, 10,
+ 21, 0, 0, 0, 1, 0, 1, 0, 16,228, 90, 10, 68, 65, 84, 65, 96, 0, 0, 0, 88,124, 90, 10,200, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0,120,119, 90, 10,176, 66, 90, 10,176, 65, 90, 10, 48, 68, 90, 10,112, 67, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+243, 2, 0, 0,185, 1, 0, 0, 69, 4, 0, 0, 9, 9,244, 2,141, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 56,127, 90, 10, 56,127, 90, 10,232,124, 90, 10, 16,126, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,248, 0, 0, 0,232,124, 90, 10,201, 0, 0, 0, 1, 0, 0, 0, 16,126, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,210, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 61, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
- 72, 47, 89, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 45, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65,
- 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,248, 0, 0, 0, 18, 0, 0, 0, 34, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
- 18, 0, 0, 0, 34, 4, 0, 0, 18, 0, 0, 0,248, 0, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 0,124,146, 72, 0, 0, 0, 66,
- 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 0, 35, 4,249, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 4, 0, 0, 91, 0, 0, 0, 83, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 4,249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+243, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,244, 2, 26, 0,244, 2, 26, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,243, 2, 0, 0,185, 1, 0, 0,210, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,244, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 16,126, 90, 10,201, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0,232,124, 90, 10, 0, 0, 0, 0, 0,224,189, 68, 0, 0, 0, 0, 0,192, 22, 68,248,150, 23, 68, 8, 41,100, 68,
+120,125, 46, 67, 68, 65,214, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,243, 2, 0, 0, 0, 0, 0, 0,114, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4, 10, 0,244, 2,
+115, 2,244, 2,115, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,243, 2, 0, 0,211, 1, 0, 0,
+ 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,244, 2,115, 2, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,
-184, 48, 89, 3, 0, 0, 0, 0,166, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,124, 2, 0, 0,
+ 56,127, 90, 10,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0,
+ 0, 0, 0, 0, 12, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,204,204, 61,
+231, 1, 0, 0,243, 1, 0, 0,122, 1, 0, 0,124, 1, 0, 0,231, 1, 0, 0,243, 1, 0, 0, 4, 0, 0, 0,124, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,160, 0, 0, 0, 88, 66, 89, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0,152,134, 89, 3, 0, 0, 0, 0,
- 8, 42, 89, 3, 0, 0, 0, 0, 8, 16, 89, 3, 0, 0, 0, 0,216, 13, 89, 3, 0, 0, 0, 0,152, 15, 89, 3, 0, 0, 0, 0,
-120, 16, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 2, 0, 0, 85, 1, 0, 0,186, 2, 0, 0,
- 2, 2, 52, 2,102, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 73, 89, 3, 0, 0, 0, 0,
-120,133, 89, 3, 0, 0, 0, 0, 72, 67, 89, 3, 0, 0, 0, 0,152, 71, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
- 72, 67, 89, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,184, 68, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 64, 93, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 13, 68, 0, 0, 0, 0, 0, 0,208, 65,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 51, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,103, 68, 0, 0,200, 65, 0,192,103, 68, 0, 0,200, 65,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 52, 2, 26, 0, 52, 2, 26, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 2, 0, 0, 85, 1, 0, 0,110, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-184, 68, 89, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 40, 70, 89, 3, 0, 0, 0, 0, 72, 67, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,112,193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,157,195, 0, 0, 0, 0,
-200, 0, 0, 0,217, 0, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
- 0, 0, 0, 0,199, 0, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 10, 6, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, 6, 0,217, 0, 76, 1,200, 0, 58, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 0, 0,111, 1, 0, 0,186, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,217, 0, 76, 1, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
- 40, 70, 89, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,152, 71, 89, 3, 0, 0, 0, 0,184, 68, 89, 3, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 2, 0, 0, 51, 2, 0, 0,111, 1, 0, 0,186, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-152, 71, 89, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 70, 89, 3, 0, 0, 0, 0,
- 0, 0, 16,193, 0, 0,130, 67, 0, 0,160,192, 0, 0,160, 64, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 16,193, 0, 0, 32, 65,
- 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0, 18, 0, 0, 0, 90, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
- 18, 0, 0, 0, 90, 1, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0,111, 18,131, 58,111, 18,131, 58, 0,124,146, 72, 0, 80, 67, 71,
- 0, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 91, 1, 76, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,217, 0, 0, 0, 51, 2, 0, 0,111, 1, 0, 0,186, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 1, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0,140, 0, 0, 0, 64,130, 90, 10,196, 0, 0, 0, 1, 0, 0, 0,232,191, 90, 10,
+248, 63, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 85, 86, 32, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,130, 90, 10,184,132, 90, 10,248,132, 90, 10,200,135, 90, 10,
+ 16,136, 90, 10,176,177, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 16,228, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,248,130, 90, 10,197, 0, 0, 0, 1, 0, 0, 0, 56,131, 90, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 56,131, 90, 10,197, 0, 0, 0,
+ 1, 0, 0, 0,120,131, 90, 10,248,130, 90, 10, 0, 0, 0, 0, 0, 0, 97, 4, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,
+120,131, 90, 10,197, 0, 0, 0, 1, 0, 0, 0,184,131, 90, 10, 56,131, 90, 10, 0, 0, 0, 0,118, 7, 97, 4, 0, 0, 0, 0,
+ 68, 65, 84, 65, 20, 0, 0, 0,184,131, 90, 10,197, 0, 0, 0, 1, 0, 0, 0,248,131, 90, 10,120,131, 90, 10, 0, 0, 0, 0,
+118, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,248,131, 90, 10,197, 0, 0, 0, 1, 0, 0, 0, 56,132, 90, 10,
+184,131, 90, 10, 0, 0, 0, 0, 0, 0, 70, 4, 1, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 56,132, 90, 10,197, 0, 0, 0,
+ 1, 0, 0, 0,120,132, 90, 10,248,131, 90, 10, 0, 0, 0, 0,118, 7, 70, 4, 1, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,
+120,132, 90, 10,197, 0, 0, 0, 1, 0, 0, 0,184,132, 90, 10, 56,132, 90, 10, 0, 0, 0, 0,196, 3, 70, 4, 1, 0, 0, 0,
+ 68, 65, 84, 65, 20, 0, 0, 0,184,132, 90, 10,197, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,120,132, 90, 10, 0, 0, 0, 0,
+196, 3, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,248,132, 90, 10,198, 0, 0, 0, 1, 0, 0, 0, 64,133, 90, 10,
+ 0, 0, 0, 0, 56,131, 90, 10,120,131, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 64,133, 90, 10,
+198, 0, 0, 0, 1, 0, 0, 0,136,133, 90, 10,248,132, 90, 10, 56,131, 90, 10,248,131, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 24, 0, 0, 0,136,133, 90, 10,198, 0, 0, 0, 1, 0, 0, 0,208,133, 90, 10, 64,133, 90, 10,120,131, 90, 10,
+ 56,132, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,208,133, 90, 10,198, 0, 0, 0, 1, 0, 0, 0,
+ 24,134, 90, 10,136,133, 90, 10,248,131, 90, 10, 56,132, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,
+ 24,134, 90, 10,198, 0, 0, 0, 1, 0, 0, 0, 96,134, 90, 10,208,133, 90, 10,248,131, 90, 10,120,132, 90, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 96,134, 90, 10,198, 0, 0, 0, 1, 0, 0, 0,168,134, 90, 10, 24,134, 90, 10,
+248,130, 90, 10,184,132, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,168,134, 90, 10,198, 0, 0, 0,
+ 1, 0, 0, 0,240,134, 90, 10, 96,134, 90, 10,248,130, 90, 10,248,131, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 24, 0, 0, 0,240,134, 90, 10,198, 0, 0, 0, 1, 0, 0, 0, 56,135, 90, 10,168,134, 90, 10,120,132, 90, 10,184,132, 90, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 56,135, 90, 10,198, 0, 0, 0, 1, 0, 0, 0,128,135, 90, 10,
+240,134, 90, 10, 56,132, 90, 10,120,132, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,128,135, 90, 10,
+198, 0, 0, 0, 1, 0, 0, 0,200,135, 90, 10, 56,135, 90, 10,184,131, 90, 10,184,132, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 24, 0, 0, 0,200,135, 90, 10,198, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,128,135, 90, 10,184,131, 90, 10,
+ 56,132, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0, 16,136, 90, 10,200, 0, 0, 0, 1, 0, 0, 0,
+240,138, 90, 10, 0, 0, 0, 0,248,131, 90, 10, 56,131, 90, 10,120,131, 90, 10, 56,132, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+118, 7, 0, 0, 71, 4, 0, 0, 97, 4, 0, 0, 7, 7,119, 7, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0,
+136,191, 90, 10,136,191, 90, 10,160,136, 90, 10,200,137, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,248, 0, 0, 0,160,136, 90, 10,201, 0, 0, 0, 1, 0, 0, 0,200,137, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 32,148, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,238, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,
- 8, 73, 89, 3, 0, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+118, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,119, 7, 26, 0,119, 7, 26, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0, 71, 4, 0, 0, 96, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,119, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,200,137, 90, 10,201, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0,160,136, 90, 10, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69,
+ 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0,
+ 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,129, 7,
+ 2, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 4, 0, 0,
+ 97, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0,
+240,138, 90, 10,200, 0, 0, 0, 1, 0, 0, 0,176,177, 90, 10, 16,136, 90, 10,248,130, 90, 10,248,131, 90, 10,120,132, 90, 10,
+184,132, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0,195, 3, 0, 0, 0, 0, 0, 0, 69, 4, 0, 0, 6, 6,196, 3, 70, 4, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,144, 90, 10,104,144, 90, 10,128,139, 90, 10, 64,143, 90, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,128,139, 90, 10,201, 0, 0, 0, 1, 0, 0, 0,
+168,140, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,215, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,113, 68,
+ 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 41, 68, 0, 0,200, 65,
+ 0,192, 41, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,196, 3,
+ 26, 0,196, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 3, 0, 0, 0, 0, 0, 0,
+ 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,196, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,
+168,140, 90, 10,201, 0, 0, 0, 1, 0, 0, 0, 64,143, 90, 10,128,139, 90, 10, 0, 0, 0, 0, 0, 0, 91, 67, 0, 96,133,196,
+ 0, 0, 0, 0, 0, 0, 0, 0,254,255, 74, 67,254,127,133,196, 0, 0, 0, 0,203, 0, 0, 0,220, 0, 0, 0, 0, 0, 0, 0,
+ 43, 4, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0,
+ 43, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0,
+ 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,220, 0, 44, 4,203, 0, 44, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,219, 0, 0, 0, 26, 0, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+220, 0, 44, 4, 0, 0, 4, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,141, 90, 10,208,141, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0,208,141, 90, 10,199, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 73, 77, 65, 71, 69, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 73, 77, 65, 71, 69, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 74, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 40, 0, 0, 0, 72, 74, 89, 3, 0, 0, 0, 0, 24, 1, 0, 0, 1, 0, 0, 0,120,159, 89, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 71,114,101, 97,115,101, 32, 80,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,160, 0, 0, 0,152,134, 89, 3, 0, 0, 0, 0,199, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 88, 66, 89, 3, 0, 0, 0, 0,120, 16, 89, 3, 0, 0, 0, 0,152, 15, 89, 3, 0, 0, 0, 0, 72, 14, 89, 3, 0, 0, 0, 0,
-184, 14, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 2, 0, 0,254, 4, 0, 0, 85, 1, 0, 0,186, 2, 0, 0,
- 8, 8,202, 2,102, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,141, 89, 3, 0, 0, 0, 0,
-200,157, 89, 3, 0, 0, 0, 0,136,135, 89, 3, 0, 0, 0, 0,216,139, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-136,135, 89, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,248,136, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,192, 15, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128, 50, 68, 0, 0, 0, 0, 0, 0,208, 65,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,174,255,202, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,201, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 64, 50, 68, 0, 0,200, 65, 0, 64, 50, 68, 0, 0,200, 65,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,202, 2, 26, 0,202, 2, 26, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 2, 0, 0,254, 4, 0, 0, 85, 1, 0, 0,110, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,202, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-248,136, 89, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,104,138, 89, 3, 0, 0, 0, 0,136,135, 89, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,
+ 64,143, 90, 10,201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,168,140, 90, 10, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0,
+ 0, 0,128, 67,154,153, 41,191,205,204,212, 63,154,153,149,191,205,204, 10, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 2, 0, 0, 0, 0, 0, 0,
+ 44, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+220, 0, 0, 0,195, 3, 0, 0, 26, 0, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+232, 2, 44, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 24, 33, 0, 0,104,144, 90, 10,170, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 65, 0, 0, 0, 0,154,153,153, 62,
+ 0, 0, 0, 0,100, 0, 0, 0,154,153,153, 62,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 4, 0, 0,254, 4, 0, 0,111, 1, 0, 0,186, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-104,138, 89, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0,216,139, 89, 3, 0, 0, 0, 0,248,136, 89, 3, 0, 0, 0, 0,
- 0, 0,112,195, 0, 0,112, 67, 0, 0, 7,195, 0, 0, 7, 67,105, 42,145,196,105, 42,145, 68, 0, 0, 7,196, 0, 0, 7, 68,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,201, 2, 0, 0, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 59, 70, 0,128, 59, 70,
-172,197, 39, 55, 0, 80,195, 71, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 4, 0, 0,202, 2, 76, 1,202, 2, 76, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 2, 0, 0,254, 4, 0, 0,111, 1, 0, 0,186, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,202, 2, 76, 1, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,
-216,139, 89, 3, 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,138, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65,
- 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0, 18, 0, 0, 0,201, 2, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0,
- 18, 0, 0, 0,201, 2, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 0,124,146, 72, 0, 0, 0, 66,
- 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0,202, 2, 76, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,
- 72,141, 89, 3, 0, 0, 0, 0,166, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 83, 67, 0, 0, 8, 6, 0, 0,120,159, 89, 3, 0, 0, 0, 0,157, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 83, 99,101,110,101, 0,
-116, 97,103,101, 0, 97,105,110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,200,165, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 8,184, 89, 3, 0, 0, 0, 0,104,181, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 56,168, 89, 3, 0, 0, 0, 0, 24,169, 89, 3, 0, 0, 0, 0, 56,168, 89, 3, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,169, 89, 3, 0, 0, 0, 0,
-184, 55,127, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,172, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
-250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0,100, 0, 0, 0, 0, 0, 1, 0, 0, 0,128, 63,
- 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 2,224, 1, 60, 0, 32, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 6, 0, 50, 0,141, 0,128, 7, 56, 4, 8, 0, 8, 0, 0, 0, 24, 0, 17, 0, 0, 0, 0, 0, 90, 0, 1, 0,
- 0, 0, 0, 0, 81, 0, 0, 0, 23, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 8, 0, 24, 0, 10, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,175, 89, 3, 0, 0, 0, 0, 40,175, 89, 3, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 1, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 5, 0, 2, 0, 1, 0, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 47, 47, 98, 97, 99,107, 98,117,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 47,116,109,112, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 31, 5, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,205,204, 76, 63,205,204, 76, 63,205,204, 76, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 16, 0, 0, 0,128, 63, 0, 0,128, 63,
-173, 2, 95, 0,154,153,217, 63, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 1, 0,180, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 66, 76, 69, 78, 68, 69, 82, 95, 82, 69, 78, 68, 69, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68,172, 0, 0, 0, 0,128, 63,102,166,171, 67, 0, 0,128, 63, 2, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-144,175, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,141, 90, 3, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,204, 28, 65, 0, 0, 0, 0, 32, 0, 32, 0, 1, 0, 0, 0,
- 0, 0, 0, 0,128, 0, 5, 0, 60, 0, 5, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 2,224, 1, 60, 0, 32, 0, 0, 0, 0, 0, 0, 0, 4, 0, 1, 0,180, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0,128, 7, 56, 4,205,204,204, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195,245, 28,193, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 96, 0, 0, 0,200,165, 89, 3, 0, 0, 0, 0, 16, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,166, 89, 3, 0, 0, 0, 0,
-120,166, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0,
-120,166, 89, 3, 0, 0, 0, 0, 16, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 0, 0, 0,110,101,116,119,111,114,107, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,167, 89, 3, 0, 0, 0, 0, 40,167, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0, 40,167, 89, 3, 0, 0, 0, 0,
- 16, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,115,101,114,118,
-101,114, 95, 97,100,100,114,101,115,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-216,167, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 10, 0, 0, 0, 10, 0, 0, 0, 68, 65, 84, 65, 12, 0, 0, 0,216,167, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 91,100,101,102, 97,117,108,116, 93, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56,168, 89, 3, 0, 0, 0, 0,133, 0, 0, 0,
- 1, 0, 0, 0,168,168, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
-200, 2,231, 1, 40,189, 89, 3, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168,168, 89, 3, 0, 0, 0, 0,133, 0, 0, 0,
- 1, 0, 0, 0, 24,169, 89, 3, 0, 0, 0, 0, 56,168, 89, 3, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 4, 0, 0,
-152, 3, 37, 3,200,195, 89, 3, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24,169, 89, 3, 0, 0, 0, 0,133, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,168, 89, 3, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0,
-157, 0, 72, 2, 8,184, 89, 3, 0, 0, 0, 0, 68, 65, 84, 65,184, 1, 0, 0,136,169, 89, 3, 0, 0, 0, 0,153, 0, 0, 0,
- 1, 0, 0, 0,136,171, 89, 3, 0, 0, 0, 0,152,172, 89, 3, 0, 0, 0, 0,168,173, 89, 3, 0, 0, 0, 0, 0, 0,128, 63,
- 1, 0, 1, 0,205,204, 76, 63, 0, 0,180, 66, 9, 0, 1, 0, 0, 0,128, 63,111, 18,131, 58,205,204,204, 61, 0, 0, 1, 0,
- 32, 0, 32, 0, 32, 0, 1, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0,184,174, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128,
- 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 80, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 5, 0,
- 5, 0,255,255, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,200, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 10,215, 35, 60,205,204,204, 61, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 0,205,204,204, 61,
-205,204,204, 61,102,102,166, 63, 0, 0,192, 63, 0, 0,240, 65, 72,225,122, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 67, 2, 0, 3, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0,176,177, 90, 10,200, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0,240,138, 90, 10,184,132, 90, 10,120,132, 90, 10, 56,132, 90, 10,184,131, 90, 10, 0, 0, 0, 0,
+197, 3, 0, 0,118, 7, 0, 0, 0, 0, 0, 0, 69, 4, 0, 0, 1, 1,178, 3, 70, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 96,190, 90, 10, 96,190, 90, 10, 64,178, 90, 10,192,185, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 64,178, 90, 10,201, 0, 0, 0, 1, 0, 0, 0,104,179, 90, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,102, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,108, 68, 0, 0, 0, 0, 0, 0,208, 65,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,177, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,178, 3, 26, 0,178, 3, 26, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,197, 3, 0, 0,118, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,178, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,104,179, 90, 10,201, 0, 0, 0,
+ 1, 0, 0, 0, 0,182, 90, 10, 64,178, 90, 10, 0, 0, 0, 0, 0, 0, 32, 67, 0, 0,109,196, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 15, 67, 0, 0,109,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,179, 3, 0, 0, 0, 0, 0, 0,
+142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,179, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4,
+ 6, 0,160, 0,180, 3,143, 0,180, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,197, 3, 0, 0,100, 4, 0, 0,
+146, 0, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,180, 3, 0, 0, 5, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,144,180, 90, 10,144,180, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 64, 1, 0, 0,144,180, 90, 10,199, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,111, 98,106,101, 99,116,109,111,100,101, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,111, 98,106,101, 99,116,109,111,100,101, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 79, 98,106,101, 99,116, 32, 84,111,111,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 42,254,143, 0,190, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 0,182, 90, 10,201, 0, 0, 0,
+ 1, 0, 0, 0,152,184, 90, 10,104,179, 90, 10, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0,242,194, 0, 0, 0, 0, 0, 0, 0, 0,
+231,102, 16, 67, 91, 90,242,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,
+142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4,
+ 6, 0,160, 0,120, 0,143, 0,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,197, 3, 0, 0,100, 4, 0, 0,
+ 26, 0, 0, 0,145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,120, 0, 0, 0, 6, 0,
+ 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 40,183, 90, 10, 40,183, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 64, 1, 0, 0, 40,183, 90, 10,199, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 79,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,216,255,144, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,152,184, 90, 10,201, 0, 0, 0,
+ 1, 0, 0, 0,192,185, 90, 10, 0,182, 90, 10, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,126,196, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 35, 67,255,191,126,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0,
+162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0,
+ 6, 0,180, 0, 13, 4,163, 0,251, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0,118, 7, 0, 0,
+ 26, 0, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0,
+ 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 64, 0, 0, 0,136,171, 89, 3, 0, 0, 0, 0,152, 0, 0, 0, 1, 0, 0, 0, 24,172, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 1, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 0, 0, 0, 24,172, 89, 3,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,184,184, 90, 3, 0, 0, 0, 0, 88,139, 90, 3, 0, 0, 0, 0,184,208, 90, 3,
- 0, 0, 0, 0,184,188, 90, 3, 0, 0, 0, 0,184,144, 90, 3, 0, 0, 0, 0,184,180, 90, 3, 0, 0, 0, 0,184,156, 90, 3,
- 0, 0, 0, 0, 68, 65, 84, 65, 64, 0, 0, 0,152,172, 89, 3, 0, 0, 0, 0,152, 0, 0, 0, 1, 0, 0, 0, 40,173, 89, 3,
- 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,200,255,128, 1, 0, 0, 0, 2, 0, 0, 0,
+248, 0, 0, 0,192,185, 90, 10,201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,152,184, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,101, 4, 0, 0,118, 7, 0, 0, 26, 0, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 18, 3, 44, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,232,186, 90, 10, 68, 65, 84, 65, 72, 3, 0, 0,232,186, 90, 10,159, 0, 0, 0, 1, 0, 0, 0,161, 58,190, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 28, 13,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, 74,215, 76,190, 0, 0, 0, 0, 68,239,209, 62,
+ 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,
+166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 95,192, 0, 0,128, 63, 69,239,209, 62,
+ 70,119,105, 63,160, 84, 89,188, 0, 0, 0, 0, 52,177,205,190,142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63,
+ 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0,188,173, 54, 64,136, 95,161,191,147,231,198, 63, 0, 0,128, 63,169,255, 27, 63,
+208,249,224,190, 48,180, 81,191,184,158, 81,191,254,123,173, 63,140,225, 88, 62, 26, 63,185, 62, 35, 44,185, 62,150,126,161,188,
+206,156,122, 63,138, 84,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0,100, 98, 82, 64, 0, 25, 95, 64, 97, 66,141, 62,
+204, 23, 29, 63,192, 60, 18,188, 0, 0, 96,179,195, 15,188,190,130, 75, 53, 62,216,125, 81, 63, 0, 0,192,179,115, 77,100,193,
+ 16,173,201, 64,181,148,248,192,203,247,159,192,233, 74, 87, 65,246, 46,190,192, 88,106,234, 64, 45, 8,160, 64, 68,239,209, 62,
+ 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,
+166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 95,192, 0, 0,128, 63,169,255, 27, 63,
+208,249,224,190, 48,180, 81,191,184,158, 81,191,254,123,173, 63,140,225, 88, 62, 26, 63,185, 62, 35, 44,185, 62,150,126,161,188,
+206,156,122, 63,138, 84,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0,100, 98, 82, 64, 0, 25, 95, 64, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 62, 55, 63,
+ 56,186,224,190,237,203,148,190, 3,236,234,190, 0, 25, 95, 64, 0, 25, 95, 64, 0, 0, 0, 0, 0, 0, 0, 0, 18,106,224, 58,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 96,190, 90, 10,160, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,
+208,245, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
+ 3, 0, 0, 0, 1, 0, 3, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 12, 66, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+205,204,204, 61, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 16, 0, 0, 0, 7, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0,140, 0, 0, 0,232,191, 90, 10,196, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 64,130, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 86,105,100,101,111, 32, 69,100,105,116,
+105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,192, 90, 10, 96,195, 90, 10,
+160,195, 90, 10,104,200, 90, 10,176,200, 90, 10,120,221, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 16,228, 90, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,160,192, 90, 10,197, 0, 0, 0,
+ 1, 0, 0, 0,224,192, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,
+224,192, 90, 10,197, 0, 0, 0, 1, 0, 0, 0, 32,193, 90, 10,160,192, 90, 10, 0, 0, 0, 0, 0, 0, 97, 4, 0, 0, 0, 0,
+ 68, 65, 84, 65, 20, 0, 0, 0, 32,193, 90, 10,197, 0, 0, 0, 1, 0, 0, 0, 96,193, 90, 10,224,192, 90, 10, 0, 0, 0, 0,
+118, 7, 97, 4, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 96,193, 90, 10,197, 0, 0, 0, 1, 0, 0, 0,160,193, 90, 10,
+ 32,193, 90, 10, 0, 0, 0, 0,118, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,160,193, 90, 10,197, 0, 0, 0,
+ 1, 0, 0, 0,224,193, 90, 10, 96,193, 90, 10, 0, 0, 0, 0, 0, 0, 70, 4, 1, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,
+224,193, 90, 10,197, 0, 0, 0, 1, 0, 0, 0, 32,194, 90, 10,160,193, 90, 10, 0, 0, 0, 0,118, 7, 70, 4, 1, 0, 0, 0,
+ 68, 65, 84, 65, 20, 0, 0, 0, 32,194, 90, 10,197, 0, 0, 0, 1, 0, 0, 0, 96,194, 90, 10,224,193, 90, 10, 0, 0, 0, 0,
+118, 7, 16, 2, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 96,194, 90, 10,197, 0, 0, 0, 1, 0, 0, 0,160,194, 90, 10,
+ 32,194, 90, 10, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,160,194, 90, 10,197, 0, 0, 0,
+ 1, 0, 0, 0,224,194, 90, 10, 96,194, 90, 10, 0, 0, 0, 0, 76, 3, 70, 4, 1, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0,
+224,194, 90, 10,197, 0, 0, 0, 1, 0, 0, 0, 32,195, 90, 10,160,194, 90, 10, 0, 0, 0, 0, 0, 0, 16, 2, 0, 0, 0, 0,
+ 68, 65, 84, 65, 20, 0, 0, 0, 32,195, 90, 10,197, 0, 0, 0, 1, 0, 0, 0, 96,195, 90, 10,224,194, 90, 10, 0, 0, 0, 0,
+ 76, 3, 16, 2, 0, 0, 0, 0, 68, 65, 84, 65, 20, 0, 0, 0, 96,195, 90, 10,197, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 32,195, 90, 10, 0, 0, 0, 0,118, 7,100, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,160,195, 90, 10,198, 0, 0, 0,
+ 1, 0, 0, 0,232,195, 90, 10, 0, 0, 0, 0,224,192, 90, 10, 32,193, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 24, 0, 0, 0,232,195, 90, 10,198, 0, 0, 0, 1, 0, 0, 0, 48,196, 90, 10,160,195, 90, 10,224,192, 90, 10,160,193, 90, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 48,196, 90, 10,198, 0, 0, 0, 1, 0, 0, 0,120,196, 90, 10,
+232,195, 90, 10, 32,193, 90, 10,224,193, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,120,196, 90, 10,
+198, 0, 0, 0, 1, 0, 0, 0,192,196, 90, 10, 48,196, 90, 10,160,193, 90, 10,224,193, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 24, 0, 0, 0,192,196, 90, 10,198, 0, 0, 0, 1, 0, 0, 0, 8,197, 90, 10,120,196, 90, 10,224,193, 90, 10,
+ 32,194, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 8,197, 90, 10,198, 0, 0, 0, 1, 0, 0, 0,
+ 80,197, 90, 10,192,196, 90, 10,160,192, 90, 10, 96,194, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,
+ 80,197, 90, 10,198, 0, 0, 0, 1, 0, 0, 0,152,197, 90, 10, 8,197, 90, 10,160,193, 90, 10,160,194, 90, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,152,197, 90, 10,198, 0, 0, 0, 1, 0, 0, 0,224,197, 90, 10, 80,197, 90, 10,
+ 96,194, 90, 10,224,194, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,224,197, 90, 10,198, 0, 0, 0,
+ 1, 0, 0, 0, 40,198, 90, 10,152,197, 90, 10,224,194, 90, 10, 32,195, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 24, 0, 0, 0, 40,198, 90, 10,198, 0, 0, 0, 1, 0, 0, 0,112,198, 90, 10,224,197, 90, 10,160,194, 90, 10, 32,195, 90, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,112,198, 90, 10,198, 0, 0, 0, 1, 0, 0, 0,184,198, 90, 10,
+ 40,198, 90, 10, 32,194, 90, 10, 96,195, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,184,198, 90, 10,
+198, 0, 0, 0, 1, 0, 0, 0, 0,199, 90, 10,112,198, 90, 10, 96,193, 90, 10, 96,195, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 24, 0, 0, 0, 0,199, 90, 10,198, 0, 0, 0, 1, 0, 0, 0, 72,199, 90, 10,184,198, 90, 10, 96,194, 90, 10,
+ 96,195, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 72,199, 90, 10,198, 0, 0, 0, 1, 0, 0, 0,
+144,199, 90, 10, 0,199, 90, 10,160,192, 90, 10, 96,193, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,
+144,199, 90, 10,198, 0, 0, 0, 1, 0, 0, 0,216,199, 90, 10, 72,199, 90, 10,224,193, 90, 10,160,194, 90, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,216,199, 90, 10,198, 0, 0, 0, 1, 0, 0, 0, 32,200, 90, 10,144,199, 90, 10,
+ 32,194, 90, 10, 32,195, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 32,200, 90, 10,198, 0, 0, 0,
+ 1, 0, 0, 0,104,200, 90, 10,216,199, 90, 10,160,193, 90, 10,224,194, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 24, 0, 0, 0,104,200, 90, 10,198, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 32,200, 90, 10, 32,194, 90, 10,224,194, 90, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0,176,200, 90, 10,200, 0, 0, 0, 1, 0, 0, 0,144,203, 90, 10,
+ 0, 0, 0, 0,160,193, 90, 10,224,192, 90, 10, 32,193, 90, 10,224,193, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0,
+ 71, 4, 0, 0, 97, 4, 0, 0, 7, 7,119, 7, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0,176,227, 90, 10,
+176,227, 90, 10, 64,201, 90, 10,104,202, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+248, 0, 0, 0, 64,201, 90, 10,201, 0, 0, 0, 1, 0, 0, 0,104,202, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,148, 68,
+ 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,238, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0,
+ 0, 0, 0, 0, 25, 0, 0, 0, 0,128,237, 68, 0, 0,200, 65, 0,128,237, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,119, 7, 26, 0,119, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0, 71, 4, 0, 0, 96, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,119, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,104,202, 90, 10,201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 64,201, 90, 10, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192,
+ 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0,
+ 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,129, 7, 2, 0,112, 7,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 4, 0, 0, 97, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0,144,203, 90, 10,
+200, 0, 0, 0, 1, 0, 0, 0, 88,207, 90, 10,176,200, 90, 10,160,192, 90, 10, 96,194, 90, 10, 96,195, 90, 10, 96,193, 90, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 15, 15,119, 7,100, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,112,206, 90, 10,112,206, 90, 10, 32,204, 90, 10, 72,205, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 32,204, 90, 10,201, 0, 0, 0, 1, 0, 0, 0, 72,205, 90, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,160,137, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,238, 68, 0, 0, 0, 0,
+ 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,202, 68, 0, 0,200, 65, 0,224,202, 68,
+ 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,119, 7, 26, 0,119, 7,
+ 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,119, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 72,205, 90, 10,
+201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 32,204, 90, 10, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,
+112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,118, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0, 18, 0, 0, 0, 73, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2,
+ 4, 0, 0, 4, 8, 0,119, 7, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+118, 7, 0, 0, 26, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,119, 7, 74, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,188, 0, 0, 0,112,206, 90, 10,176, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 31, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0, 88,207, 90, 10,200, 0, 0, 0,
+ 1, 0, 0, 0, 0,215, 90, 10,144,203, 90, 10, 96,194, 90, 10,224,194, 90, 10, 32,194, 90, 10, 96,195, 90, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0,118, 7, 0, 0,101, 0, 0, 0, 15, 2, 0, 0, 8, 8,119, 7,171, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,248,213, 90, 10,248,213, 90, 10,232,207, 90, 10,208,212, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,232,207, 90, 10,201, 0, 0, 0, 1, 0, 0, 0, 16,209, 90, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 28, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,238, 68, 0, 0, 0, 0, 0, 0,208, 65,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,118, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 96,191, 68, 0, 0,200, 65, 0, 96,191, 68, 0, 0,200, 65,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0,119, 7, 26, 0,119, 7, 26, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0,101, 0, 0, 0,126, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,119, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 16,209, 90, 10,201, 0, 0, 0,
+ 1, 0, 0, 0,168,211, 90, 10,232,207, 90, 10, 0, 0, 0, 0, 0, 0, 92, 67, 0,128,200,195, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 75, 67, 0,128,200,195, 0, 0, 0, 0,203, 0, 0, 0,220, 0, 0, 0, 0, 0, 0, 0,144, 1, 0, 0, 0, 0, 0, 0,
+202, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0,144, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4,
+ 6, 0,220, 0,145, 1,203, 0,145, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,155, 6, 0, 0,118, 7, 0, 0,
+127, 0, 0, 0, 15, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0,145, 1, 0, 0, 4, 0,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 56,210, 90, 10, 56,210, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 64, 1, 0, 0, 56,210, 90, 10,199, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 83, 69, 81, 85, 69, 78, 67, 69, 82, 95, 80, 84, 95,112,114,101,118,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 83, 69, 81, 85, 69, 78, 67, 69, 82, 95, 80, 84, 95,112,114,101,118,105,101,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 83, 99,101,110,101, 32, 80,114,101,118,105,101,119, 47, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,171,255,203, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,168,211, 90, 10,201, 0, 0, 0,
+ 1, 0, 0, 0,208,212, 90, 10, 16,209, 90, 10, 0, 0,112,196, 0, 0,112, 68, 0, 0, 7,196, 0, 0, 7, 68, 0, 0,112,196,
+ 0, 0,112, 68, 0, 0, 7,196, 0, 0, 7, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,128, 59, 70, 0,128, 59, 70,172,197, 39, 55, 0, 80,195, 71, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154, 6, 0, 0,
+ 15, 2, 0, 0, 15, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 7, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 56, 0, 0, 0, 40,173, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,184,184, 90, 3, 0, 0, 0, 0, 88,139, 90, 3,
- 0, 0, 0, 0,184,208, 90, 3, 0, 0, 0, 0,184,188, 90, 3, 0, 0, 0, 0,184,144, 90, 3, 0, 0, 0, 0,184,180, 90, 3,
- 0, 0, 0, 0,184,156, 90, 3, 0, 0, 0, 0, 68, 65, 84, 65, 56, 0, 0, 0,168,173, 89, 3, 0, 0, 0, 0,151, 0, 0, 0,
- 1, 0, 0, 0, 40,174, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,100,100,128,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
- 64, 0, 0, 0, 40,174, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,184,160, 90, 3, 0, 0, 0, 0,184,200, 90, 3,
- 0, 0, 0, 0,184,192, 90, 3, 0, 0, 0, 0,184,172, 90, 3, 0, 0, 0, 0,184,168, 90, 3, 0, 0, 0, 0,184,176, 90, 3,
- 0, 0, 0, 0,184,164, 90, 3, 0, 0, 0, 0,184,148, 90, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184,174, 89, 3,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,184,160, 90, 3, 0, 0, 0, 0,184,204, 90, 3, 0, 0, 0, 0,184,152, 90, 3,
- 0, 0, 0, 0,184,196, 90, 3, 0, 0, 0, 0, 68, 65, 84, 65, 88, 0, 0, 0, 40,175, 89, 3, 0, 0, 0, 0,139, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 76, 97,121,101,114, 0,
-114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255, 15, 0, 0, 0, 0, 0,255,127, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 67, 65, 0, 0,
-136, 0, 0, 0, 24,176, 89, 3, 0, 0, 0, 0, 29, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 65, 67, 97,109,101,114, 97, 0, 97,109,101,
-114, 97, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 63,205,204,204, 61, 0, 0,200, 66, 0, 0, 12, 66,161, 14,234, 64, 0, 0, 0, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0,
-216, 1, 0, 0,232,176, 89, 3, 0, 0, 0, 0, 41, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 76, 97,109,112, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,247,255,239, 65, 0, 0,150, 66,154,153, 25, 62,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 8,179, 89, 3, 0, 0, 0, 0, 2, 0, 0, 0, 46, 26,128, 63, 25, 4,240, 65,
- 0, 0, 52, 66, 0, 0,128, 63, 0, 0, 64, 64,205,204, 76, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 11, 3, 0,
- 1, 0, 0, 0, 0, 2, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,111, 18,131, 58,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+248, 0, 0, 0,208,212, 90, 10,201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,168,211, 90, 10, 0, 0, 0, 0, 0, 0,122, 67,
+ 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0,
+ 18, 0, 0, 0,144, 1, 0, 0, 18, 0, 0, 0,154, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,154, 6, 0, 0,
+ 18, 0, 0, 0,144, 1, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66,
+105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 0,155, 6,145, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,154, 6, 0, 0,127, 0, 0, 0, 15, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,155, 6,145, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,248,213, 90, 10,166, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,248,180, 89, 3, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, 8,179, 89, 3, 0, 0, 0, 0, 83, 1, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 1, 0, 0, 0,128, 67, 0, 0, 0, 0,
- 0, 0,128, 63,243, 4, 53,191,242, 4, 53, 63,242, 4, 53,191,243, 4, 53, 63,152,180, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0, 0,215, 90, 10,
+200, 0, 0, 0, 1, 0, 0, 0,120,221, 90, 10, 88,207, 90, 10,224,194, 90, 10,160,193, 90, 10,160,194, 90, 10, 32,195, 90, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 75, 3, 0, 0, 17, 2, 0, 0, 69, 4, 0, 0, 2, 2, 76, 3, 53, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 48,220, 90, 10, 48,220, 90, 10,144,215, 90, 10, 8,219, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,144,215, 90, 10,201, 0, 0, 0, 1, 0, 0, 0,184,216, 90, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,128,100, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 83, 68, 0, 0, 0, 0,
+ 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 75, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,103, 68, 0, 0,200, 65, 0,192,103, 68,
+ 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 76, 3, 26, 0, 76, 3,
+ 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 3, 0, 0, 17, 2, 0, 0, 42, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,184,216, 90, 10,
+201, 0, 0, 0, 1, 0, 0, 0,224,217, 90, 10,144,215, 90, 10, 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,112,193, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 72, 67, 0, 64, 2,196, 0, 0, 0, 0,200, 0, 0, 0,217, 0, 0, 0, 18, 0, 0, 0, 26, 2, 0, 0,
+ 0, 0, 0, 0,199, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 18, 0, 0, 0, 26, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 10, 6, 0, 0, 2, 0, 3, 3,
+ 0, 0, 0, 4, 6, 0,217, 0, 27, 2,200, 0, 9, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+216, 0, 0, 0, 43, 2, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,217, 0, 27, 2,
+ 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,248, 0, 0, 0,224,217, 90, 10,201, 0, 0, 0, 1, 0, 0, 0, 8,219, 90, 10,184,216, 90, 10, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,152,180, 89, 3, 0, 0, 0, 0, 81, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248,180, 89, 3,
- 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 0, 0,232, 1, 0, 0,104,181, 89, 3,
- 0, 0, 0, 0,132, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 87,111,114,108,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,114, 99, 80, 61,114, 99, 80, 61,114, 99, 80, 61, 0, 0, 0, 0,199, 54, 36, 60,199, 54, 36, 60,199, 54, 36, 60,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,205,204, 28, 65, 0, 0, 0, 0, 0, 0, 32, 0,128, 0, 5, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 64, 0, 0,200, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0,112, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,
- 0, 0, 0, 0, 0, 0,128, 63,205,204, 76, 61, 0, 0, 5, 0, 0, 0, 0, 0, 10,215,163, 59, 0, 0, 0, 0, 0, 0,128, 62,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 75, 3, 0, 0, 75, 3, 0, 0, 43, 2, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 8,219, 90, 10,201, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0,224,217, 90, 10, 0, 0, 16,193, 0, 0,130, 67, 0, 0,160,192, 0, 0,160, 64, 0, 0, 0, 0, 0, 0,122, 67,
+ 0, 0, 16,193, 0, 0, 32, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 26, 2, 0, 0, 18, 0, 0, 0,114, 2, 0, 0,
+ 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,114, 2, 0, 0, 18, 0, 0, 0, 26, 2, 0, 0,111, 18,131, 58,111, 18,131, 58,
+ 0,124,146, 72, 0, 80, 67, 71, 0, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,115, 2,
+ 27, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,217, 0, 0, 0, 75, 3, 0, 0, 43, 2, 0, 0,
+ 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,115, 2, 27, 2, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0,
+ 48,220, 90, 10,164, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,183, 89, 3, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152,183, 89, 3,
- 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0,208, 4, 0, 0, 8,184, 89, 3,
- 0, 0, 0, 0,121, 0, 0, 0, 1, 0, 0, 0, 40,189, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 67, 97,109,101,114, 97, 0, 97,109,101,114, 97, 46, 48, 48, 49, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 48,221, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 24, 0, 0, 0, 48,221, 90, 10, 23, 1, 0, 0, 1, 0, 0, 0, 16,228, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0,120,221, 90, 10,200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0,215, 90, 10, 32,195, 90, 10,160,194, 90, 10,224,193, 90, 10, 32,194, 90, 10, 0, 0, 0, 0, 77, 3, 0, 0,118, 7, 0, 0,
+ 17, 2, 0, 0, 69, 4, 0, 0, 8, 8, 42, 4, 53, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,226, 90, 10,
+168,226, 90, 10, 8,222, 90, 10,128,225, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+248, 0, 0, 0, 8,222, 90, 10,201, 0, 0, 0, 1, 0, 0, 0, 48,223, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 67,
+ 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 64,133, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 4, 0, 0,
+ 0, 0, 0, 0, 25, 0, 0, 0, 0, 64, 50, 68, 0, 0,200, 65, 0, 64, 50, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 4, 10, 0, 42, 4, 26, 0, 42, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 77, 3, 0, 0,118, 7, 0, 0, 17, 2, 0, 0, 42, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 42, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,176, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
-250, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 0, 0, 0, 1, 0, 0, 0,
-250, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 48,223, 90, 10,201, 0, 0, 0, 1, 0, 0, 0, 88,224, 90, 10,
+ 8,222, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,110,101,239, 64,150, 62,208,192, 78,255,170, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 42,254,141, 63,192, 57, 49, 60, 34,159, 80, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,222,149, 47, 63, 53, 70, 58, 63,
-222, 56, 49,188, 0, 0, 0, 0, 86,126,162,190,227,251,159, 62, 55, 53,101, 63, 0, 0, 0, 0, 7,165, 39, 63,149, 84, 28,191,
- 51,247,227, 62, 0, 0, 0, 0,110,101,239, 64,150, 62,208,192, 78,255,170, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 1, 0,128, 63, 1, 0,128, 51,
- 1, 0, 0,179, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0,128, 63, 1, 0,128, 51, 0, 0, 0, 0, 2, 0, 0,179, 2, 0, 0,167,
- 1, 0,128, 63, 0, 0, 0, 0, 1, 0, 0, 53, 1, 0, 0, 41, 1, 0,128,168, 0, 0,128, 63, 0, 0,128, 63,157,190,215, 49,
-167,170, 4, 52, 0, 0, 0,128,129,116,157,178, 1, 0,128, 63, 33, 69, 15, 51, 0, 0, 0,128, 73,254, 67, 51,243, 97,106, 49,
- 0, 0,128, 63, 0, 0, 0,128, 3, 0, 64, 52,183,164,157, 39, 0, 0,128, 53, 0, 0,128, 63, 1, 0, 0, 0, 0, 4, 0, 0,
- 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 0, 0, 79, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
-100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63,187,225, 16, 63, 0, 0,128, 63,205,204,204, 62,237, 54, 32, 63,
- 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 1, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118, 7, 0, 0,118, 7, 0, 0, 43, 2, 0, 0, 69, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 88,224, 90, 10,
+201, 0, 0, 0, 1, 0, 0, 0,128,225, 90, 10, 48,223, 90, 10, 0, 0,240,195, 0, 0,240, 67, 0, 0,135,195, 0, 0,135, 67,
+ 96,187,216,196, 96,187,216, 68,244, 43, 91,196,244, 43, 91, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 4, 0, 0, 0, 0, 0, 0, 26, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 59, 70, 0,128, 59, 70,172,197, 39, 55, 0, 80,195, 71, 0, 0, 0, 0, 0, 0, 6, 0,
+ 0, 0, 0, 4, 0, 0, 42, 4, 27, 2, 42, 4, 27, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 3, 0, 0,
+118, 7, 0, 0, 43, 2, 0, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 4, 27, 2,
+ 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,248, 0, 0, 0,128,225, 90, 10,201, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 88,224, 90, 10, 0, 0, 0, 0,
+ 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0,
+ 17, 0, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0, 18, 0, 0, 0,201, 2, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,
+201, 2, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0, 0, 0, 32, 65, 0, 0,128, 64, 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60,
+ 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0,202, 2, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,216, 0, 0, 0,168,226, 90, 10,166, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0,
-208, 4, 0, 0, 40,189, 89, 3, 0, 0, 0, 0,121, 0, 0, 0, 1, 0, 0, 0,200,195, 89, 3, 0, 0, 0, 0, 8,184, 89, 3,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 67,117, 98,101, 0,112,104,101,114,101,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 40, 54, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,129, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 0, 0,120, 5, 0, 0,
+ 16,228, 90, 10,157, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 83, 99,
+101,110,101, 0,116, 97,103,101, 0, 97,105,110, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,184,233, 90, 10,
+ 0, 0, 0, 0,208,245, 90, 10,224,243, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0,152,235, 90, 10, 40,236, 90, 10,152,235, 90, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,236, 90, 10,240, 64, 80, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,172, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
+250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0,100, 0, 0, 0, 0, 0, 1, 0, 0, 0,128, 63,
+ 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 2,224, 1, 60, 0, 32, 0, 0, 0, 0, 0, 1, 0,
+ 1, 0, 0, 0, 6, 0, 50, 0,141, 0,128, 7, 56, 4, 8, 0, 8, 0, 0, 0, 24, 0, 17, 0, 0, 0, 0, 0, 90, 0, 1, 0,
+ 0, 0, 0, 0, 81, 0, 0, 0, 23, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 8, 0, 24, 0, 10, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,239, 90, 10, 96,239, 90, 10, 0, 0, 1, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 1, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 5, 0, 2, 0, 1, 0, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 98, 97, 99,107, 98,117,
+102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47,116,109,112, 47, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 5, 0, 0, 12, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+205,204, 76, 63,205,204, 76, 63,205,204, 76, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 16, 0, 0, 0,128, 63, 0, 0,128, 63,173, 2, 95, 0,154,153,217, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 1, 0,180, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 76, 69, 78,
+ 68, 69, 82, 95, 82, 69, 78, 68, 69, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,172, 0, 0,
+ 0, 0,128, 63,102,166,171, 67, 0, 0,128, 63, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,176,203, 64, 10, 0, 0, 0, 0, 0, 0, 0, 0,144, 10, 85, 10, 1, 0, 0, 0, 1, 0, 10, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,204, 28, 65,
+ 0, 0, 0, 0, 32, 0, 32, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 0, 5, 0, 60, 0, 5, 0, 1, 0, 5, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 2,224, 1, 60, 0, 32, 0, 0, 0, 0, 0, 0, 0, 4, 0, 1, 0,
+180, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0,128, 7, 56, 4,205,204,204, 61, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195,245, 28,193, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 76, 0, 0, 0,184,233, 90, 10, 16, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,234, 90, 10, 32,235, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 76, 0, 0, 0, 48,234, 90, 10, 16, 0, 0, 0, 1, 0, 0, 0, 32,235, 90, 10, 0, 0, 0, 0,
+ 6, 0, 0, 0,110,101,116,119,111,114,107, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,234, 90, 10,168,234, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 76, 0, 0, 0,168,234, 90, 10, 16, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,115,101,114,118,101,114, 95, 97,100,100,114,101,115,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,152, 39, 59, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0,
+ 10, 0, 0, 0, 68, 65, 84, 65, 12, 0, 0, 0,152, 39, 59, 10, 0, 0, 0, 0, 1, 0, 0, 0, 91,100,101,102, 97,117,108,116,
+ 93, 0, 0, 0, 68, 65, 84, 65, 76, 0, 0, 0, 32,235, 90, 10, 16, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 48,234, 90, 10,
+ 6, 0, 0, 0,112,111,115,101, 95,116,101,109,112,108, 97,116,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 28, 0, 0, 0,152,235, 90, 10,133, 0, 0, 0, 1, 0, 0, 0,224,235, 90, 10, 0, 0, 0, 0,
+ 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,186, 1,168, 1,152,250, 90, 10, 68, 65, 84, 65, 28, 0, 0, 0,224,235, 90, 10,
+133, 0, 0, 0, 1, 0, 0, 0, 40,236, 90, 10,152,235, 90, 10, 1, 0, 0, 0, 2, 0, 0, 0, 0, 4, 0, 0, 59, 2,109, 2,
+ 96,255, 90, 10, 68, 65, 84, 65, 28, 0, 0, 0, 40,236, 90, 10,133, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,224,235, 90, 10,
+ 1, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 97, 0,228, 1,208,245, 90, 10, 68, 65, 84, 65,152, 1, 0, 0,112,236, 90, 10,
+153, 0, 0, 0, 1, 0, 0, 0, 56,238, 90, 10,136,238, 90, 10,216,238, 90, 10, 0, 0,128, 63, 1, 0, 1, 0,205,204, 76, 63,
+ 0, 0,180, 66, 9, 0, 1, 0, 0, 0,128, 63,111, 18,131, 58,205,204,204, 61, 0, 0, 1, 0, 32, 0, 32, 0, 32, 0, 1, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,120,208, 92, 10,
+ 0, 0, 0, 0,255,255,255,128, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 80, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 0, 5, 0, 5, 0,255,255, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,200, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0,128, 62,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 10,215, 35, 60,205,204,204, 61, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 0,205,204,204, 61,205,204,204, 61,102,102,166, 63,
+ 0, 0,192, 63, 0, 0,240, 65, 72,225,122, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 67, 2, 0, 3,
+ 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 35, 0, 0, 0,204,197,121, 63, 0, 0, 0, 63,
+ 68, 65, 84, 65, 36, 0, 0, 0, 56,238, 90, 10,152, 0, 0, 0, 1, 0, 0, 0, 96,122, 92, 10,152, 75, 85, 10,255,255,255,128,
+ 1, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 36, 0, 0, 0,
+136,238, 90, 10,152, 0, 0, 0, 1, 0, 0, 0, 96,122, 92, 10,248,175, 88, 9,200,200,255,128, 1, 0, 0, 0, 2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 0, 0, 0,216,238, 90, 10,151, 0, 0, 0,
+ 1, 0, 0, 0, 72,181, 92, 10,216,191, 75, 10,255,100,100,128, 1, 0, 0, 0,128, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
+ 1, 0, 0, 0,124, 7,231, 65,255, 74, 20, 65, 54, 86,123, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 72, 0, 0, 0, 96,239, 90, 10,139, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 76, 97,
+121,101,114, 0,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+255,255, 15, 0, 0, 0, 0, 0,255,127, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 67, 65, 0, 0,104, 0, 0, 0,
+216,239, 90, 10, 29, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 65, 67, 97,
+109,101,114, 97, 0, 97,109,101,114, 97, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 63,205,204,204, 61, 0, 0,200, 66, 0, 0, 12, 66,161, 14,234, 64, 0, 0, 0, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0,108, 1, 0, 0,112,240, 90, 10,
+ 41, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 76, 97,109,112, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,247,255,239, 65, 0, 0,150, 66,154,153, 25, 62, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 8,242, 90, 10, 2, 0, 0, 0, 46, 26,128, 63, 25, 4,240, 65, 0, 0, 52, 66, 0, 0,128, 63,
+ 0, 0, 64, 64,205,204, 76, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 11, 3, 0, 1, 0, 0, 0, 0, 2, 1, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,111, 18,131, 58, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 64,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,243, 90, 10, 68, 65, 84, 65, 16, 1, 0, 0, 8,242, 90, 10,
+ 82, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 1, 0, 0, 0,128, 67,
+ 0, 0, 0, 0, 0, 0,128, 63,243, 4, 53,191,242, 4, 53, 63,242, 4, 53,191,243, 4, 53, 63, 72,243, 90, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0,
+ 72,243, 90, 10, 80, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,144,243, 90, 10, 19, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 0, 0,112, 1, 0, 0,
+224,243, 90, 10,132, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 87,111,
+114,108,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114, 99, 80, 61,114, 99, 80, 61,114, 99, 80, 61,199, 54, 36, 60,199, 54, 36, 60,
+199, 54, 36, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,205,204, 28, 65, 0, 0, 0, 0, 0, 0, 32, 0,128, 0, 5, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 64, 0, 0,200, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0,112, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,
+ 0, 0, 0, 0, 0, 0,128, 63,205,204, 76, 61, 0, 0, 5, 0, 0, 0, 0, 0, 10,215,163, 59, 0, 0, 0, 0, 0, 0,128, 62,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,245, 90, 10, 68, 65, 84, 65,
+ 32, 0, 0, 0,128,245, 90, 10, 19, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0,220, 3, 0, 0,208,245, 90, 10,121, 0, 0, 0,
+ 1, 0, 0, 0,152,250, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 67, 97,109,101,114, 97, 0, 97,109,101,
+114, 97, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,239, 90, 10,
0, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0,
6, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,110,101,239, 64,150, 62,208,192,
+ 78,255,170, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42,254,141, 63,192, 57, 49, 60, 34,159, 80, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,222,149, 47, 63, 53, 70, 58, 63,222, 56, 49,188, 0, 0, 0, 0, 86,126,162,190,
+227,251,159, 62, 55, 53,101, 63, 0, 0, 0, 0, 7,165, 39, 63,149, 84, 28,191, 51,247,227, 62, 0, 0, 0, 0,110,101,239, 64,
+150, 62,208,192, 78,255,170, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,125,103,133, 51,176,219,194,178, 0, 0, 0, 0,190, 32, 66, 51,
+ 1, 0,128, 63,168,200,153, 51, 0, 0, 0, 0, 32,206, 18,179,126,126,149, 50, 1, 0,128, 63, 0, 0, 0, 0,241,251,133, 52,
+172,182, 27,180,174,236,252, 51, 0, 0,128, 63, 0, 0,128, 63,157,190,215, 49,167,170, 4, 52, 0, 0, 0,128,129,116,157,178,
+ 1, 0,128, 63, 33, 69, 15, 51, 0, 0, 0,128, 73,254, 67, 51,243, 97,106, 49, 0, 0,128, 63, 0, 0, 0,128, 3, 0, 64, 52,
+183,164,157, 39, 0, 0,128, 53, 0, 0,128, 63, 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 0, 0,
+ 79, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201,
+ 0, 0,128, 63,187,225, 16, 63, 0, 0,128, 63,205,204,204, 62,237, 54, 32, 63, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,249, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,144, 0, 0, 0,216,249, 90, 10,124, 0, 0, 0, 1, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,204,204, 61,205,204, 76, 62, 10,215,163, 60, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 0, 0, 79, 66, 0, 0,220, 3, 0, 0,152,250, 90, 10,121, 0, 0, 0, 1, 0, 0, 0, 96,255, 90, 10,208,245, 90, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 67,117, 98,101, 0,112,104,101,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,194, 89, 3, 0, 0, 0, 0,152,194, 89, 3,
- 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+112, 83, 78, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 74, 92, 10, 0, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0,
+ 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0,
+ 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 32, 60, 9,
+192, 93, 44, 9, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -3159,100 +5316,88 @@ char datatoc_startup_blend[]= {
0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63,169, 19,208, 60, 0, 0,128, 63,
205,204,204, 62,229,208, 34, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0,
1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,194, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,181,126, 4,
- 0, 0, 0, 0,184,189,126, 4, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 8, 0, 0, 0, 72,194, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,152,194, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65,152, 0, 0, 0,232,194, 89, 3, 0, 0, 0, 0,124, 0, 0, 0, 1, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,160,254, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0,232,178, 61, 10, 40, 53, 85, 10, 25, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0, 24, 32, 60, 9,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,192, 93, 44, 9, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65,144, 0, 0, 0,160,254, 90, 10,124, 0, 0, 0, 1, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,204,204, 61,205,204, 76, 62, 10,215,163, 60, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 79, 66, 0, 0,208, 4, 0, 0,200,195, 89, 3, 0, 0, 0, 0,
-121, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,189, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,232,176, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0,
- 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0,
- 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-154,112,130, 64,183,178,128, 63,112,236,188, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,229,123, 38, 63,
- 87, 43, 98, 61,229,229,238, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54,236,148,190, 25,134,116, 63,236, 13, 98,189,
- 0, 0, 0, 0,221,102, 69,191, 57,174, 76,190, 34,194, 26, 63, 0, 0, 0, 0, 37,255, 16, 63,241,161, 95, 62,164,111, 75, 63,
- 0, 0, 0, 0,154,112,130, 64,183,178,128, 63,112,236,188, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 1, 0,128, 50, 0, 0, 0,179,
- 0, 0, 0, 0, 1, 0,128, 50, 1, 0,128, 63, 1, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 1, 0, 0, 39, 1, 0, 0, 52, 1, 0,128, 39, 0, 0,128, 63, 53,236,148,190,222,102, 69,191, 37,255, 16, 63,
- 0, 0, 0,128, 24,134,116, 63, 57,174, 76,190,240,161, 95, 62, 0, 0, 0,128,235, 13, 98,189, 34,194, 26, 63,166,111, 75, 63,
- 0, 0, 0,128,208, 19, 13, 63,234, 65,102,190, 10, 10,231,192, 0, 0,128, 63, 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0,
- 5, 0, 1, 0, 0, 0, 68, 0, 79, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0,
- 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63,169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,229,208, 34, 62, 0, 0, 0, 0,
-143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 72, 0, 0, 0, 79, 66, 0, 0,220, 3, 0, 0, 96,255, 90, 10,121, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+152,250, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,240, 90, 10, 0, 0, 0, 0, 1, 0, 0, 0,
+250, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 0, 0, 0, 1, 0, 0, 0,
+250, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 0, 0, 32, 3, 0, 0,
-232,200, 89, 3, 0, 0, 0, 0, 44, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 77, 97,116,101,114,105, 97,108, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0,205,204, 76, 63,205,204, 76, 63,205,204, 76, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,205,204, 76, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 10,215, 35, 60, 0, 0, 0, 0,
- 0, 0, 8, 0, 1, 0, 50, 0,205,204, 76, 62, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,160, 63,
- 0, 0, 0, 0, 0, 0,160, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 2, 0, 50, 0, 0, 6, 0, 0,128, 63,
- 0, 0,128, 63, 18, 0, 18, 0, 10,215,163, 59, 10,215,163, 59, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 4, 0, 67, 0, 64, 3,
- 67, 0, 64, 3, 1, 0, 4, 0, 12, 0, 4, 0, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0,128, 64, 0, 0, 0, 63,
-205,204,204, 61, 0, 0, 0, 63,205,204,204, 61,205,204,204, 61, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 88,204, 89, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-184,205, 89, 3, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,111,148, 26, 63,111,148, 26, 63,111,148, 26, 63,205,204, 76, 61,205,204,204, 61,
-102,102,166, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 16, 1, 0, 0, 88,204, 89, 3, 0, 0, 0, 0,
- 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,110, 90, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
-144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154,112,130, 64,183,178,128, 63,112,236,188, 64, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,229,123, 38, 63, 87, 43, 98, 61,229,229,238, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 54,236,148,190, 25,134,116, 63,236, 13, 98,189, 0, 0, 0, 0,221,102, 69,191, 57,174, 76,190, 34,194, 26, 63,
+ 0, 0, 0, 0, 37,255, 16, 63,241,161, 95, 62,164,111, 75, 63, 0, 0, 0, 0,154,112,130, 64,183,178,128, 63,112,236,188, 64,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 35,233,134, 49,251,110, 17,179, 0, 0, 0, 0, 49,158,141, 50, 1, 0,128, 63,126,214,237, 50,
+ 0, 0, 0, 0,155,248, 28,178,199,139, 96,177,254,255,127, 63, 0, 0, 0, 0, 80,136,159,178,192, 4,158,178,209,114,143,179,
+ 0, 0,128, 63, 53,236,148,190,222,102, 69,191, 37,255, 16, 63, 0, 0, 0,128, 24,134,116, 63, 57,174, 76,190,240,161, 95, 62,
+ 0, 0, 0,128,235, 13, 98,189, 34,194, 26, 63,166,111, 75, 63, 0, 0, 0,128,208, 19, 13, 63,234, 65,102,190, 10, 10,231,192,
+ 0, 0,128, 63, 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 68, 0, 79, 66, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63,169, 19,208, 60,
+ 0, 0,128, 63,205,204,204, 62,229,208, 34, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 5, 0, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 3, 91, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,144, 0, 0, 0,
+104, 3, 91, 10,124, 0, 0, 0, 1, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,205,204,204, 61,205,204, 76, 62, 10,215,163, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 77, 65, 0, 0,
+160, 2, 0, 0, 40, 4, 91, 10, 43, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 77, 65, 77, 97,116,101,114,105, 97,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,204, 76, 63,205,204, 76, 63,205,204, 76, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,205,204, 76, 63, 0, 0, 0, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 10,215, 35, 60, 0, 0, 0, 0, 0, 0, 8, 0, 1, 0, 50, 0,205,204, 76, 62, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
+ 0, 0, 0, 0, 0, 0,160, 63, 0, 0, 0, 0, 0, 0,160, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 2, 0,
+ 50, 0, 0, 6, 0, 0,128, 63, 0, 0,128, 63, 18, 0, 18, 0, 10,215,163, 59, 10,215,163, 59, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 4, 0, 67, 0, 64, 3, 67, 0, 64, 3, 1, 0, 4, 0, 12, 0, 4, 0, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,
+ 0, 0,128, 64, 0, 0, 0, 63,205,204,204, 61, 0, 0, 0, 63,205,204,204, 61,205,204,204, 61, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,248, 6, 91, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 8, 91, 10, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,111,148, 26, 63,111,148, 26, 63,111,148, 26, 63,
+205,204, 76, 61,205,204,204, 61,102,102,166, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0,248, 6, 91, 10, 32, 0, 0, 0,
+ 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,168, 91, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 40, 0, 0, 0,
-184,205, 89, 3, 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 0, 0, 32, 0, 0, 0, 96, 0, 0, 0, 32, 0, 0, 0, 96, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 40,206, 89, 3, 0, 0, 0, 0,120,222, 89, 3, 0, 0, 0, 0, 68, 65, 84, 65, 0, 16, 0, 0,
- 40,206, 89, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 32, 0, 0, 0, 48, 8, 91, 10, 19, 0, 0, 0, 1, 0, 0, 0,
+ 32, 0, 0, 0, 96, 0, 0, 0, 32, 0, 0, 0, 96, 0, 0, 0, 1, 0, 1, 0, 49, 0, 49, 0,128, 8, 91, 10,176, 24, 91, 10,
+ 68, 65, 84, 65, 0, 16, 0, 0,128, 8, 91, 10, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -3380,7 +5525,7 @@ char datatoc_startup_blend[]= {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0,144, 0, 0,120,222, 89, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0,144, 0, 0,176, 24, 91, 10,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -4533,21 +6678,147 @@ char datatoc_startup_blend[]= {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 0, 0,112, 1, 0, 0,200,110, 90, 3, 0, 0, 0, 0, 39, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 84, 69, 84,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0,160, 64, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 64,
- 0, 0, 0, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 32, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 5, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 8, 0, 0, 0, 1, 0, 1, 0, 3, 0, 2, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,205,204,204, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,112, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136,112, 90, 3, 0, 0, 0, 0,
- 19, 0, 0, 0, 1, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
-248,112, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 16, 0, 0,248,112, 90, 3, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 0, 0, 48, 1, 0, 0,224,168, 91, 10, 39, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 84,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0,160, 64, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 64, 0, 0, 0, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 7, 0, 8, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 8, 0, 0, 0, 1, 0, 1, 0, 3, 0, 2, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,205,204,204, 60, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,170, 91, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 64,170, 91, 10, 19, 0, 0, 0, 1, 0, 0, 0,
+ 32, 0, 0, 0, 96, 0, 0, 0, 32, 0, 0, 0, 96, 0, 0, 0, 0, 0, 1, 0, 14, 0, 13, 0,144,170, 91, 10,192,186, 91, 10,
+ 68, 65, 84, 65, 0, 16, 0, 0,144,170, 91, 10, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 68, 65, 84, 65, 0,144, 0, 0,192,186, 91, 10,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
@@ -4676,61 +6947,1102 @@ char datatoc_startup_blend[]= {
0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
- 0, 0, 0,255, 0, 0, 0,255, 77, 69, 0, 0,176, 1, 0, 0, 72,129, 90, 3, 0, 0, 0, 0, 54, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 77, 69, 0, 0, 40, 1, 0, 0,240, 74, 92, 10, 54, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 67,117, 98,101, 0,112,104,101,114,101, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,128,233, 80, 9,120, 82, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0,200, 77, 92, 10, 56, 80, 92, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 76, 92, 10, 1, 0, 0, 0,
+ 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 78, 92, 10, 1, 0, 0, 0, 5, 0, 0, 0,
+ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 80, 92, 10, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0,128, 51, 0, 0, 0,180, 0, 0, 0, 0, 4, 0,128, 63, 4, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 6, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0,128,233, 80, 9, 0, 0, 0, 0, 1, 0, 0, 0, 40, 4, 91, 10, 68, 65, 84, 65,
+ 84, 1, 0, 0, 72, 76, 92, 10, 87, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 77, 69, 67,117, 98,101, 0,112,104,101,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 77, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,131, 90, 3, 0, 0, 0, 0,
-152,138, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,133, 90, 3, 0, 0, 0, 0,
- 8,136, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,131, 90, 3, 0, 0, 0, 0,
- 1, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 88,134, 90, 3, 0, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,232,136, 90, 3, 0, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,128, 51, 0, 0, 0,180, 0, 0, 0, 0, 4, 0,128, 63, 4, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 30, 0, 6, 0, 1, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 0, 0, 0, 72,131, 90, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,232,200, 89, 3, 0, 0, 0, 0, 68, 65, 84, 65,104, 1, 0, 0,152,131, 90, 3, 0, 0, 0, 0,
- 88, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 72,133, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65,192, 0, 0, 0,200, 77, 92, 10, 60, 0, 0, 0, 8, 0, 0, 0, 0, 0,128, 63,255,255,127, 63,
+ 0, 0,128,191,230, 73,230, 73, 26,182,255,127, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,128,191, 0, 0,128,191,230, 73, 26,182,
+ 26,182,255,127, 1, 0, 0, 0, 1, 0,128,191,253,255,127,191, 0, 0,128,191, 26,182, 26,182, 26,182,255,127, 1, 0, 0, 0,
+250,255,127,191, 3, 0,128, 63, 0, 0,128,191, 26,182,230, 73, 26,182,255,127, 1, 0, 0, 0, 4, 0,128, 63,247,255,127, 63,
+ 0, 0,128, 63,230, 73,230, 73,230, 73,255,127, 1, 0, 0, 0,245,255,127, 63, 5, 0,128,191, 0, 0,128, 63,230, 73, 26,182,
+230, 73,255,127, 1, 0, 0, 0, 3, 0,128,191,250,255,127,191, 0, 0,128, 63, 26,182, 26,182,230, 73,255,127, 1, 0, 0, 0,
+255,255,127,191, 0, 0,128, 63, 0, 0,128, 63, 26,182,230, 73,230, 73,255,127, 1, 0, 0, 0, 68, 65, 84, 65, 84, 1, 0, 0,
+184, 78, 92, 10, 87, 1, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 80, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,192, 0, 0, 0, 72,133, 90, 3, 0, 0, 0, 0,
- 60, 0, 0, 0, 8, 0, 0, 0, 0, 0,128, 63,255,255,127, 63, 0, 0,128,191,230, 73,230, 73, 26,182,255,127, 1, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128,191, 0, 0,128,191,230, 73, 26,182, 26,182,255,127, 1, 0, 0, 0, 1, 0,128,191,253,255,127,191,
- 0, 0,128,191, 26,182, 26,182, 26,182,255,127, 1, 0, 0, 0,250,255,127,191, 3, 0,128, 63, 0, 0,128,191, 26,182,230, 73,
- 26,182,255,127, 1, 0, 0, 0, 4, 0,128, 63,247,255,127, 63, 0, 0,128, 63,230, 73,230, 73,230, 73,255,127, 1, 0, 0, 0,
-245,255,127, 63, 5, 0,128,191, 0, 0,128, 63,230, 73, 26,182,230, 73,255,127, 1, 0, 0, 0, 3, 0,128,191,250,255,127,191,
- 0, 0,128, 63, 26,182, 26,182,230, 73,255,127, 1, 0, 0, 0,255,255,127,191, 0, 0,128, 63, 0, 0,128, 63, 26,182,230, 73,
-230, 73,255,127, 1, 0, 0, 0, 68, 65, 84, 65,104, 1, 0, 0, 88,134, 90, 3, 0, 0, 0, 0, 88, 1, 0, 0, 5, 0, 0, 0,
- 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 8,136, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65,144, 0, 0, 0, 56, 80, 92, 10, 57, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 35, 0,
+ 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0, 2, 0, 0, 0,
+ 0, 0, 35, 0, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0,
+ 6, 0, 0, 0, 0, 0, 35, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 35, 0,
+ 4, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, 6, 0, 0, 0, 0, 0, 35, 0, 6, 0, 0, 0, 7, 0, 0, 0,
+ 0, 0, 35, 0, 68, 65, 84, 65, 84, 1, 0, 0,248, 80, 92, 10, 87, 1, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 82, 92, 10, 6, 0, 0, 0,
+ 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,108, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 84, 92, 10,
+ 6, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 67,111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 88, 84, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,144, 0, 0, 0, 8,136, 90, 3, 0, 0, 0, 0, 57, 0, 0, 0, 12, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 4, 0, 0, 0,
- 0, 0, 35, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0,
- 3, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, 6, 0, 0, 0, 0, 0, 35, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0,
- 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, 6, 0, 0, 0,
- 0, 0, 35, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 68, 65, 84, 65,104, 1, 0, 0,232,136, 90, 3, 0, 0, 0, 0,
- 88, 1, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,120, 0, 0, 0,120, 82, 92, 10, 56, 0, 0, 0, 6, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0,
+ 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0,
+ 5, 0, 0, 0, 6, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 2, 66, 82, 0, 0,188, 2, 0, 0,
+232, 84, 92, 10, 86, 1, 0, 0, 1, 0, 0, 0,168, 90, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 65,100,
+100, 0,104, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 12, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 8, 89, 92, 10, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,152,138, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -4738,53 +8050,54 @@ char datatoc_startup_blend[]= {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0,
+ 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,
+ 0, 0, 0, 63, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0, 52, 85, 92, 10, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,120, 0, 0, 0,152,138, 90, 3, 0, 0, 0, 0,
- 56, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0,
- 7, 0, 0, 0, 6, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 2, 1, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 6, 0, 0, 0,
- 7, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 2,
- 66, 82, 0, 0,168, 1, 0, 0, 88,139, 90, 3, 0, 0, 0, 0, 87, 1, 0, 0, 1, 0, 0, 0,184,144, 90, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 65,100,100, 0,104, 46,
- 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,168,142, 90, 3, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,
- 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 4, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 64,
- 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 1, 1, 0, 0,
- 68, 65, 84, 65, 16, 1, 0, 0,192,139, 90, 3, 0, 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 68, 65, 84, 65, 16, 1, 0, 0, 8, 89, 92, 10, 82, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61,
+ 14,215,126,191, 46,189,194, 61, 72, 90, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 72, 90, 92, 10, 80, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,188, 2, 0, 0,168, 90, 92, 10, 86, 1, 0, 0, 1, 0, 0, 0,
+ 48, 95, 92, 10,232, 84, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 66,108,111, 98, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 13, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 0,144, 93, 92, 10, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,168,142, 90, 3, 0, 0, 0, 0, 83, 1, 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,
- 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61, 56,144, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 48, 0, 0, 0, 56,144, 90, 3, 0, 0, 0, 0, 81, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,168, 1, 0, 0,184,144, 90, 3, 0, 0, 0, 0, 87, 1, 0, 0, 1, 0, 0, 0,
-184,148, 90, 3, 0, 0, 0, 0, 88,139, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 66, 82, 66,108,117,114, 0, 46, 48, 48, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,
-168,146, 90, 3, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0,
+ 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 33, 0, 0, 0,
+ 0, 0, 0, 62, 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65,
+ 8, 1, 0, 0,244, 90, 92, 10, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
@@ -4792,82 +8105,84 @@ char datatoc_startup_blend[]= {
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 4, 0, 0, 25, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 96, 64, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
-205,204, 76, 62, 1, 4, 0, 0, 68, 65, 84, 65, 16, 1, 0, 0, 32,145, 90, 3, 0, 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 16, 1, 0, 0,
+144, 93, 92, 10, 82, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0,
+ 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186,208, 94, 92, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 48, 0, 0, 0,208, 94, 92, 10, 80, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,
+215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 82, 0, 0,188, 2, 0, 0, 48, 95, 92, 10, 86, 1, 0, 0, 1, 0, 0, 0,184, 99, 92, 10,168, 90, 92, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66, 82, 66,108,117,114, 0, 46, 48, 48, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2,
+ 14, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 24, 98, 92, 10,
1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,
- 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,168,146, 90, 3, 0, 0, 0, 0,
- 83, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67,
- 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61, 56,148, 90, 3, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 56,148, 90, 3, 0, 0, 0, 0, 81, 1, 0, 0, 4, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,168, 1, 0, 0,184,148, 90, 3, 0, 0, 0, 0,
- 87, 1, 0, 0, 1, 0, 0, 0,184,152, 90, 3, 0, 0, 0, 0,184,144, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 67,108, 97,121, 0, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 63, 0, 0, 0, 0,168,150, 90, 3, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
-205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 12, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
+205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0,124, 95, 92, 10, 32, 0, 0, 0,
+ 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 4, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 64, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 8, 0, 0, 0, 68, 65, 84, 65, 16, 1, 0, 0, 32,149, 90, 3, 0, 0, 0, 0,
- 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 16, 1, 0, 0, 24, 98, 92, 10, 82, 1, 0, 0, 1, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,
+ 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61, 88, 99, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
-128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 88, 99, 92, 10, 80, 1, 0, 0,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63,
+ 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,188, 2, 0, 0,184, 99, 92, 10,
+ 86, 1, 0, 0, 1, 0, 0, 0, 64,104, 92, 10, 48, 95, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 66,114,117,115,104, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 30, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,160,102, 92, 10, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,
-168,150, 90, 3, 0, 0, 0, 0, 83, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61,
- 56,152, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 56,152, 90, 3, 0, 0, 0, 0,
- 81, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0,
- 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,168, 1, 0, 0,
-184,152, 90, 3, 0, 0, 0, 0, 87, 1, 0, 0, 1, 0, 0, 0,184,156, 90, 3, 0, 0, 0, 0,184,148, 90, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 67,108,111,110,101, 0, 48, 48, 49, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,168,154, 90, 3, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 4, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 64, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 1, 0, 3, 0, 68, 65, 84, 65, 16, 1, 0, 0,
- 32,153, 90, 3, 0, 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 35, 0, 0, 0,
+ 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
+ 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62,
+ 0, 0,128, 63, 68, 65, 84, 65, 8, 1, 0, 0, 4,100, 92, 10, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
@@ -4876,24 +8191,21 @@ char datatoc_startup_blend[]= {
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 68, 65, 84, 65, 64, 1, 0, 0,168,154, 90, 3, 0, 0, 0, 0, 83, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61,
- 14,215,126,191, 46,189,194, 61, 56,156, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 16, 1, 0, 0,160,102, 92, 10, 82, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,
+114, 97,255,186,224,103, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,
- 56,156, 90, 3, 0, 0, 0, 0, 81, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,
- 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 66, 82, 0, 0,168, 1, 0, 0,184,156, 90, 3, 0, 0, 0, 0, 87, 1, 0, 0, 1, 0, 0, 0,184,160, 90, 3, 0, 0, 0, 0,
-184,152, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 68, 97,114,107,101,110,
- 0, 48, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,168,158, 90, 3, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,224,103, 92, 10, 80, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,188, 2, 0, 0, 64,104, 92, 10, 86, 1, 0, 0, 1, 0, 0, 0,200,108, 92, 10,
+184, 99, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 67,108, 97,121, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 3, 15, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,
+ 0, 0, 0, 0, 40,107, 92, 10, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,
3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
@@ -4901,10 +8213,62 @@ char datatoc_startup_blend[]= {
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 4, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 64,
- 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 1, 6, 0, 0,
- 68, 65, 84, 65, 16, 1, 0, 0, 32,157, 90, 3, 0, 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 35, 0, 0, 0, 4, 4, 4, 8, 0, 0, 0, 0, 10, 0, 0, 0,
+ 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62,
+ 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 8, 1, 0, 0,
+140,104, 92, 10, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 16, 1, 0, 0, 40,107, 92, 10,
+ 82, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67,
+ 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186,104,108, 92, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,
+104,108, 92, 10, 80, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63,
+ 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,
+188, 2, 0, 0,200,108, 92, 10, 86, 1, 0, 0, 1, 0, 0, 0, 80,113, 92, 10, 64,104, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 82, 67,108,111,110,101, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,176,111, 92, 10, 1, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 16, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0, 20,109, 92, 10, 32, 0, 0, 0, 1, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
@@ -4912,24 +8276,21 @@ char datatoc_startup_blend[]= {
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,168,158, 90, 3, 0, 0, 0, 0, 83, 1, 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,
- 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61, 56,160, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 16, 1, 0, 0,176,111, 92, 10, 82, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191,
+ 54,189,194, 61, 14,215,126,191, 46,189,194, 61,240,112, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 48, 0, 0, 0, 56,160, 90, 3, 0, 0, 0, 0, 81, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,168, 1, 0, 0,184,160, 90, 3, 0, 0, 0, 0, 87, 1, 0, 0, 1, 0, 0, 0,
-184,164, 90, 3, 0, 0, 0, 0,184,156, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 66, 82, 68,114, 97,119, 0, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,
-168,162, 90, 3, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,240,112, 92, 10, 80, 1, 0, 0, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,188, 2, 0, 0, 80,113, 92, 10, 86, 1, 0, 0,
+ 1, 0, 0, 0,216,117, 92, 10,200,108, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 67,114,101, 97,115,101, 0, 48, 48, 49,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 17, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 56,116, 92, 10, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
@@ -4937,10 +8298,62 @@ char datatoc_startup_blend[]= {
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 4, 0, 0, 25, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 96, 64, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
-205,204, 76, 62, 1, 0, 0, 0, 68, 65, 84, 65, 16, 1, 0, 0, 32,161, 90, 3, 0, 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 35, 0, 0, 0, 4, 6, 4, 0,
+ 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0,
+ 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63,
+ 68, 65, 84, 65, 8, 1, 0, 0,156,113, 92, 10, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65,
+ 16, 1, 0, 0, 56,116, 92, 10, 82, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,228, 97,175,190, 50,131,112, 63,218,243,127,191, 10,183,157,188,
+120,117, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 48, 0, 0, 0,120,117, 92, 10, 80, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 62, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215, 35, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66, 82, 0, 0,188, 2, 0, 0,216,117, 92, 10, 86, 1, 0, 0, 1, 0, 0, 0, 96,122, 92, 10, 80,113, 92, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 68, 97,114,107,101,110, 0, 48, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 2, 18, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,
+192,120, 92, 10, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,
+102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0, 36,118, 92, 10,
+ 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,
3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
@@ -4948,24 +8361,21 @@ char datatoc_startup_blend[]= {
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,168,162, 90, 3, 0, 0, 0, 0,
- 83, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67,
- 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61, 56,164, 90, 3, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 16, 1, 0, 0,192,120, 92, 10, 82, 1, 0, 0,
+ 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0,
+ 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61, 0,122, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 56,164, 90, 3, 0, 0, 0, 0, 81, 1, 0, 0, 4, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,168, 1, 0, 0,184,164, 90, 3, 0, 0, 0, 0,
- 87, 1, 0, 0, 1, 0, 0, 0,184,168, 90, 3, 0, 0, 0, 0,184,160, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 70,108, 97,116,116,101,110, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 63, 0, 0, 0, 0,168,166, 90, 3, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 0,122, 92, 10,
+ 80, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0,
+ 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,188, 2, 0, 0,
+ 96,122, 92, 10, 86, 1, 0, 0, 1, 0, 0, 0,232,126, 92, 10,216,117, 92, 10, 5, 0,109, 0, 0, 0, 0, 0, 66, 82, 68,114,
+ 97,119, 0, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 30, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 72,125, 92, 10, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
@@ -4974,9 +8384,61 @@ char datatoc_startup_blend[]= {
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 4, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 64, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 7, 0, 0, 0, 68, 65, 84, 65, 16, 1, 0, 0, 32,165, 90, 3, 0, 0, 0, 0,
- 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0,
+ 35, 0, 0, 0, 0, 4, 0, 8, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,
+ 0, 0, 0, 63, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62,
+ 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 8, 1, 0, 0,172,122, 92, 10, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 68, 65, 84, 65, 16, 1, 0, 0, 72,125, 92, 10, 82, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,
+224,255,127,191,114, 97,255,186,136,126, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,136,126, 92, 10, 80, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,188, 2, 0, 0,232,126, 92, 10, 86, 1, 0, 0, 1, 0, 0, 0,
+112,131, 92, 10, 96,122, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 70,105,108,108, 47, 68,101,101,112,101,110, 0, 48, 48,
+ 49, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 19, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 0,208,129, 92, 10, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0,
+ 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 33, 0, 0, 0,
+ 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 20,174,199, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65,
+ 8, 1, 0, 0, 52,127, 92, 10, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
@@ -4984,25 +8446,22 @@ char datatoc_startup_blend[]= {
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,
-168,166, 90, 3, 0, 0, 0, 0, 83, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61,
- 56,168, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 16, 1, 0, 0,
+208,129, 92, 10, 82, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0,
+ 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186, 16,131, 92, 10,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 56,168, 90, 3, 0, 0, 0, 0,
- 81, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0,
- 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,168, 1, 0, 0,
-184,168, 90, 3, 0, 0, 0, 0, 87, 1, 0, 0, 1, 0, 0, 0,184,172, 90, 3, 0, 0, 0, 0,184,164, 90, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 71,114, 97, 98, 0, 46, 48, 48, 49, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,168,170, 90, 3, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 48, 0, 0, 0, 16,131, 92, 10, 80, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,
+215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 82, 0, 0,188, 2, 0, 0,112,131, 92, 10, 86, 1, 0, 0, 1, 0, 0, 0,248,135, 92, 10,232,126, 92, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66, 82, 70,108, 97,116,116,101,110, 47, 67,111,110,116,114, 97,115,116, 0, 48, 48, 49, 0, 0, 1, 0, 0, 3,
+ 20, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 88,134, 92, 10,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
@@ -5010,9 +8469,61 @@ char datatoc_startup_blend[]= {
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 4, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 64, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 5, 0, 0, 0, 68, 65, 84, 65, 16, 1, 0, 0,
- 32,169, 90, 3, 0, 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
+205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63,
+ 20,174,199, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 8, 1, 0, 0,188,131, 92, 10, 32, 0, 0, 0,
+ 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 16, 1, 0, 0, 88,134, 92, 10, 82, 1, 0, 0, 1, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,
+224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186,152,135, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,152,135, 92, 10, 80, 1, 0, 0,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,
+143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,188, 2, 0, 0,248,135, 92, 10,
+ 86, 1, 0, 0, 1, 0, 0, 0,128,140, 92, 10,112,131, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 71,114, 97, 98, 0, 48,
+ 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 21, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,224,138, 92, 10, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 75, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
+ 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0, 68,136, 92, 10, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
@@ -5021,24 +8532,21 @@ char datatoc_startup_blend[]= {
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 68, 65, 84, 65, 64, 1, 0, 0,168,170, 90, 3, 0, 0, 0, 0, 83, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61,
- 14,215,126,191, 46,189,194, 61, 56,172, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 16, 1, 0, 0,224,138, 92, 10, 82, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,
+114, 97,255,186, 32,140, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,
- 56,172, 90, 3, 0, 0, 0, 0, 81, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,
- 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 66, 82, 0, 0,168, 1, 0, 0,184,172, 90, 3, 0, 0, 0, 0, 87, 1, 0, 0, 1, 0, 0, 0,184,176, 90, 3, 0, 0, 0, 0,
-184,168, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 73,110,102,108, 97,116,
-101, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,168,174, 90, 3, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 32,140, 92, 10, 80, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,188, 2, 0, 0,128,140, 92, 10, 86, 1, 0, 0, 1, 0, 0, 0, 8,145, 92, 10,
+248,135, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 73,110,102,108, 97,116,101, 47, 68,101,102,108, 97,116,101, 0, 48, 48,
+ 49, 0, 0, 0, 1, 0, 0, 3, 22, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,
+ 0, 0, 0, 0,104,143, 92, 10, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,
3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
@@ -5046,10 +8554,62 @@ char datatoc_startup_blend[]= {
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 4, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 64,
- 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 4, 0, 0, 0,
- 68, 65, 84, 65, 16, 1, 0, 0, 32,173, 90, 3, 0, 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0,
+ 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62,
+ 0, 0, 64, 63, 0, 0, 64, 63, 0, 0, 64, 63, 0, 0,128, 62, 0, 0,128, 62, 0, 0,128, 62, 68, 65, 84, 65, 8, 1, 0, 0,
+204,140, 92, 10, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 16, 1, 0, 0,104,143, 92, 10,
+ 82, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67,
+ 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186,168,144, 92, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,
+168,144, 92, 10, 80, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63,
+ 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,
+188, 2, 0, 0, 8,145, 92, 10, 86, 1, 0, 0, 1, 0, 0, 0,144,149, 92, 10,128,140, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 82, 76, 97,121,101,114, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 23, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,240,147, 92, 10, 1, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0, 84,145, 92, 10, 32, 0, 0, 0, 1, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
@@ -5057,24 +8617,21 @@ char datatoc_startup_blend[]= {
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,168,174, 90, 3, 0, 0, 0, 0, 83, 1, 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,
- 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61, 56,176, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 16, 1, 0, 0,240,147, 92, 10, 82, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191,
+ 46, 95,255,186,224,255,127,191,114, 97,255,186, 48,149, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 48, 0, 0, 0, 56,176, 90, 3, 0, 0, 0, 0, 81, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,168, 1, 0, 0,184,176, 90, 3, 0, 0, 0, 0, 87, 1, 0, 0, 1, 0, 0, 0,
-184,180, 90, 3, 0, 0, 0, 0,184,172, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 66, 82, 76, 97,121,101,114, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,
-168,178, 90, 3, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 48,149, 92, 10, 80, 1, 0, 0, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,188, 2, 0, 0,144,149, 92, 10, 86, 1, 0, 0,
+ 1, 0, 0, 0, 24,154, 92, 10, 8,145, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 76,105,103,104,116,101,110, 0, 53, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 24, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,120,152, 92, 10, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
@@ -5082,10 +8639,62 @@ char datatoc_startup_blend[]= {
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 4, 0, 0, 25, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 96, 64, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
-205,204, 76, 62, 6, 0, 0, 0, 68, 65, 84, 65, 16, 1, 0, 0, 32,177, 90, 3, 0, 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 35, 0, 0, 0, 4, 4, 0, 0,
+ 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0,
+ 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 8, 1, 0, 0,220,149, 92, 10, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65,
+ 16, 1, 0, 0,120,152, 92, 10, 82, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61,
+184,153, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 48, 0, 0, 0,184,153, 92, 10, 80, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66, 82, 0, 0,188, 2, 0, 0, 24,154, 92, 10, 86, 1, 0, 0, 1, 0, 0, 0,160,158, 92, 10,144,149, 92, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 77,105,120, 0,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 2, 25, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,
+ 0,157, 92, 10, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,
+102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0,100,154, 92, 10,
+ 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,
3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
@@ -5093,24 +8702,21 @@ char datatoc_startup_blend[]= {
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,168,178, 90, 3, 0, 0, 0, 0,
- 83, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67,
- 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61, 56,180, 90, 3, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 16, 1, 0, 0, 0,157, 92, 10, 82, 1, 0, 0,
+ 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0,
+ 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61, 64,158, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 56,180, 90, 3, 0, 0, 0, 0, 81, 1, 0, 0, 4, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,168, 1, 0, 0,184,180, 90, 3, 0, 0, 0, 0,
- 87, 1, 0, 0, 1, 0, 0, 0,184,184, 90, 3, 0, 0, 0, 0,184,176, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 76,105,103,104,116,101,110, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 63, 0, 0, 0, 0,168,182, 90, 3, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 64,158, 92, 10,
+ 80, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0,
+ 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,188, 2, 0, 0,
+160,158, 92, 10, 86, 1, 0, 0, 1, 0, 0, 0, 40,163, 92, 10, 24,154, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 77,117,
+108,116,105,112,108,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 26, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,136,161, 92, 10, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
@@ -5119,9 +8725,61 @@ char datatoc_startup_blend[]= {
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 4, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 64, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 1, 5, 0, 0, 68, 65, 84, 65, 16, 1, 0, 0, 32,181, 90, 3, 0, 0, 0, 0,
- 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0,
+ 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,
+ 0, 0, 0, 63, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0,236,158, 92, 10, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 68, 65, 84, 65, 16, 1, 0, 0,136,161, 92, 10, 82, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61,
+ 14,215,126,191, 46,189,194, 61,200,162, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,200,162, 92, 10, 80, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,188, 2, 0, 0, 40,163, 92, 10, 86, 1, 0, 0, 1, 0, 0, 0,
+176,167, 92, 10,160,158, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 78,117,100,103,101, 0, 48, 48, 49, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 27, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 0, 16,166, 92, 10, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0,
+ 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 33, 0, 0, 0,
+ 0, 0, 0, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 8, 1, 0, 0,116,163, 92, 10, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
@@ -5129,25 +8787,22 @@ char datatoc_startup_blend[]= {
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,
-168,182, 90, 3, 0, 0, 0, 0, 83, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61,
- 56,184, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 16, 1, 0, 0,
+ 16,166, 92, 10, 82, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0,
+ 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186, 80,167, 92, 10,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 56,184, 90, 3, 0, 0, 0, 0,
- 81, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0,
- 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,168, 1, 0, 0,
-184,184, 90, 3, 0, 0, 0, 0, 87, 1, 0, 0, 1, 0, 0, 0,184,188, 90, 3, 0, 0, 0, 0,184,180, 90, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 77,105,120, 0,104, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,168,186, 90, 3, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 48, 0, 0, 0, 80,167, 92, 10, 80, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,
+215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 82, 0, 0,188, 2, 0, 0,176,167, 92, 10, 86, 1, 0, 0, 1, 0, 0, 0, 56,172, 92, 10, 40,163, 92, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66, 82, 80,105,110, 99,104, 47, 77, 97,103,110,105,102,121, 0, 48, 48, 49, 0, 0, 0, 0, 0, 1, 0, 0, 3,
+ 28, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,152,170, 92, 10,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
@@ -5155,9 +8810,61 @@ char datatoc_startup_blend[]= {
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 4, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 64, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 1, 0, 0, 0, 68, 65, 84, 65, 16, 1, 0, 0,
- 32,185, 90, 3, 0, 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
+205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0, 64, 63, 0, 0, 64, 63,
+ 0, 0, 64, 63, 0, 0,128, 62, 0, 0,128, 62, 0, 0,128, 62, 68, 65, 84, 65, 8, 1, 0, 0,252,167, 92, 10, 32, 0, 0, 0,
+ 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 16, 1, 0, 0,152,170, 92, 10, 82, 1, 0, 0, 1, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,
+224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186,216,171, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,216,171, 92, 10, 80, 1, 0, 0,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,
+143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,188, 2, 0, 0, 56,172, 92, 10,
+ 86, 1, 0, 0, 1, 0, 0, 0,192,176, 92, 10,176,167, 92, 10, 65,119, 13, 0, 0, 0, 0, 0, 66, 82, 80,111,108,105,115,104,
+ 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 20, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 32,175, 92, 10, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 35, 0, 0, 0,
+ 4, 4, 4, 1, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 63,
+ 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 20,174,199, 62, 0, 0,128, 62, 0, 0,128, 63,
+ 0, 0,128, 63, 68, 65, 84, 65, 8, 1, 0, 0,132,172, 92, 10, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
@@ -5166,24 +8873,21 @@ char datatoc_startup_blend[]= {
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 68, 65, 84, 65, 64, 1, 0, 0,168,186, 90, 3, 0, 0, 0, 0, 83, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61,
- 14,215,126,191, 46,189,194, 61, 56,188, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 16, 1, 0, 0, 32,175, 92, 10, 82, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,
+114, 97,255,186, 96,176, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,
- 56,188, 90, 3, 0, 0, 0, 0, 81, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,
- 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 66, 82, 0, 0,168, 1, 0, 0,184,188, 90, 3, 0, 0, 0, 0, 87, 1, 0, 0, 1, 0, 0, 0,184,192, 90, 3, 0, 0, 0, 0,
-184,184, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 77,117,108,116,105,112,
-108,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,168,190, 90, 3, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 96,176, 92, 10, 80, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,188, 2, 0, 0,192,176, 92, 10, 86, 1, 0, 0, 1, 0, 0, 0, 72,181, 92, 10,
+ 56,172, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83, 99,114, 97,112,101, 47, 80,101, 97,107,115, 0, 48, 48, 49, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 3, 29, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,
+ 0, 0, 0, 0,168,179, 92, 10, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,
3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
@@ -5191,10 +8895,62 @@ char datatoc_startup_blend[]= {
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 4, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 64,
- 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 1, 3, 0, 0,
- 68, 65, 84, 65, 16, 1, 0, 0, 32,189, 90, 3, 0, 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0,
+ 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62,
+ 0, 0,128, 63, 0, 0,128, 63, 20,174,199, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 8, 1, 0, 0,
+ 12,177, 92, 10, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 16, 1, 0, 0,168,179, 92, 10,
+ 82, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67,
+ 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186,232,180, 92, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,
+232,180, 92, 10, 80, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63,
+ 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,
+188, 2, 0, 0, 72,181, 92, 10, 86, 1, 0, 0, 1, 0, 0, 0,208,185, 92, 10,192,176, 92, 10, 52,195, 13, 0, 0, 0, 0, 0,
+ 66, 82, 83, 99,117,108,112,116, 68,114, 97,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 30, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 48,184, 92, 10, 1, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 0, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 33, 0, 0, 0,160,119, 78, 63, 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62,
+ 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 8, 1, 0, 0,148,181, 92, 10, 32, 0, 0, 0, 1, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
@@ -5202,24 +8958,21 @@ char datatoc_startup_blend[]= {
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,168,190, 90, 3, 0, 0, 0, 0, 83, 1, 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,
- 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61, 56,192, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 16, 1, 0, 0, 48,184, 92, 10, 82, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191,
+ 46, 95,255,186,224,255,127,191,114, 97,255,186,112,185, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 48, 0, 0, 0, 56,192, 90, 3, 0, 0, 0, 0, 81, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,168, 1, 0, 0,184,192, 90, 3, 0, 0, 0, 0, 87, 1, 0, 0, 1, 0, 0, 0,
-184,196, 90, 3, 0, 0, 0, 0,184,188, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 66, 82, 80,105,110, 99,104, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,
-168,194, 90, 3, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,112,185, 92, 10, 80, 1, 0, 0, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,188, 2, 0, 0,208,185, 92, 10, 86, 1, 0, 0,
+ 1, 0, 0, 0, 88,190, 92, 10, 72,181, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,109,101, 97,114, 0, 48, 48, 49, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,184,188, 92, 10, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
@@ -5227,10 +8980,62 @@ char datatoc_startup_blend[]= {
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 4, 0, 0, 25, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 96, 64, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
-205,204, 76, 62, 3, 0, 0, 0, 68, 65, 84, 65, 16, 1, 0, 0, 32,193, 90, 3, 0, 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 35, 0, 0, 0, 4, 4, 0, 0,
+ 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0,
+ 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 8, 1, 0, 0, 28,186, 92, 10, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65,
+ 16, 1, 0, 0,184,188, 92, 10, 82, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61,
+248,189, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 48, 0, 0, 0,248,189, 92, 10, 80, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66, 82, 0, 0,188, 2, 0, 0, 88,190, 92, 10, 86, 1, 0, 0, 1, 0, 0, 0,224,194, 92, 10,208,185, 92, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,109,111,111,116,104, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 3, 32, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,
+ 64,193, 92, 10, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 75, 0, 0, 0,
+102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0, 64, 63,
+ 0, 0, 64, 63, 0, 0, 64, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0,164,190, 92, 10,
+ 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,
3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
@@ -5238,24 +9043,21 @@ char datatoc_startup_blend[]= {
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,168,194, 90, 3, 0, 0, 0, 0,
- 83, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67,
- 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61, 56,196, 90, 3, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 16, 1, 0, 0, 64,193, 92, 10, 82, 1, 0, 0,
+ 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0,
+ 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186,128,194, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 56,196, 90, 3, 0, 0, 0, 0, 81, 1, 0, 0, 4, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,168, 1, 0, 0,184,196, 90, 3, 0, 0, 0, 0,
- 87, 1, 0, 0, 1, 0, 0, 0,184,200, 90, 3, 0, 0, 0, 0,184,192, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,109,101, 97,114, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 63, 0, 0, 0, 0,168,198, 90, 3, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,128,194, 92, 10,
+ 80, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0,
+ 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,188, 2, 0, 0,
+224,194, 92, 10, 86, 1, 0, 0, 1, 0, 0, 0,104,199, 92, 10, 88,190, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,110,
+ 97,107,101, 32, 72,111,111,107, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 33, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,200,197, 92, 10, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
@@ -5264,9 +9066,61 @@ char datatoc_startup_blend[]= {
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 4, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 64, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 1, 0, 2, 0, 68, 65, 84, 65, 16, 1, 0, 0, 32,197, 90, 3, 0, 0, 0, 0,
- 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,
+ 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,
+ 0, 0, 0, 63, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0, 44,195, 92, 10, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 68, 65, 84, 65, 16, 1, 0, 0,200,197, 92, 10, 82, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,
+224,255,127,191,114, 97,255,186, 8,199, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 8,199, 92, 10, 80, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,188, 2, 0, 0,104,199, 92, 10, 86, 1, 0, 0, 1, 0, 0, 0,
+240,203, 92, 10,224,194, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,111,102,116,101,110, 0, 48, 49, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 0, 80,202, 92, 10, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0,
+ 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 33, 0, 0, 0,
+ 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 8, 1, 0, 0,180,199, 92, 10, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
@@ -5274,25 +9128,22 @@ char datatoc_startup_blend[]= {
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,
-168,198, 90, 3, 0, 0, 0, 0, 83, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61,
- 56,200, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 16, 1, 0, 0,
+ 80,202, 92, 10, 82, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0,
+ 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61,144,203, 92, 10,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 56,200, 90, 3, 0, 0, 0, 0,
- 81, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0,
- 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,168, 1, 0, 0,
-184,200, 90, 3, 0, 0, 0, 0, 87, 1, 0, 0, 1, 0, 0, 0,184,204, 90, 3, 0, 0, 0, 0,184,196, 90, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,109,111,111,116,104, 0, 48, 49, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,168,202, 90, 3, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,
+ 48, 0, 0, 0,144,203, 92, 10, 80, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,
+ 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 82, 0, 0,188, 2, 0, 0,240,203, 92, 10, 86, 1, 0, 0, 1, 0, 0, 0,120,208, 92, 10,104,199, 92, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 66, 82, 83,117, 98,116,114, 97, 99,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2,
+ 35, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,216,206, 92, 10,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
@@ -5300,9 +9151,61 @@ char datatoc_startup_blend[]= {
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 4, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 64, 75, 0, 0, 0,102,102,102, 63,
-205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 2, 0, 0, 0, 68, 65, 84, 65, 16, 1, 0, 0,
- 32,201, 90, 3, 0, 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 12, 0, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,
+205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0, 60,204, 92, 10, 32, 0, 0, 0,
+ 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 16, 1, 0, 0,216,206, 92, 10, 82, 1, 0, 0, 1, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,
+ 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61, 24,208, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 24,208, 92, 10, 80, 1, 0, 0,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63,
+ 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,188, 2, 0, 0,120,208, 92, 10,
+ 86, 1, 0, 0, 1, 0, 0, 0, 0,213, 92, 10,240,203, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 84,101,120, 68,114, 97,
+119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 96,211, 92, 10, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 35, 0, 0, 0,
+ 4, 4, 0, 8, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
+ 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62,
+ 0, 0,128, 63, 68, 65, 84, 65, 8, 1, 0, 0,196,208, 92, 10, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
@@ -5311,24 +9214,21 @@ char datatoc_startup_blend[]= {
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 68, 65, 84, 65, 64, 1, 0, 0,168,202, 90, 3, 0, 0, 0, 0, 83, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61,
- 14,215,126,191, 46,189,194, 61, 56,204, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 68, 65, 84, 65, 16, 1, 0, 0, 96,211, 92, 10, 82, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,
+114, 97,255,186,160,212, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,
- 56,204, 90, 3, 0, 0, 0, 0, 81, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,
- 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 66, 82, 0, 0,168, 1, 0, 0,184,204, 90, 3, 0, 0, 0, 0, 87, 1, 0, 0, 1, 0, 0, 0,184,208, 90, 3, 0, 0, 0, 0,
-184,200, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,111,102,116,101,110,
- 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,168,206, 90, 3, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,160,212, 92, 10, 80, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,188, 2, 0, 0, 0,213, 92, 10, 86, 1, 0, 0, 1, 0, 0, 0,136,217, 92, 10,
+120,208, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 84,104,117,109, 98, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 3, 37, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,
+ 0, 0, 0, 0,232,215, 92, 10, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,
3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
@@ -5336,87 +9236,97 @@ char datatoc_startup_blend[]= {
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 4, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 64,
- 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 1, 0, 1, 0,
- 68, 65, 84, 65, 16, 1, 0, 0, 32,205, 90, 3, 0, 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,168,206, 90, 3, 0, 0, 0, 0, 83, 1, 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,
- 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61, 56,208, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 68, 65, 84, 65, 48, 0, 0, 0, 56,208, 90, 3, 0, 0, 0, 0, 81, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,168, 1, 0, 0,184,208, 90, 3, 0, 0, 0, 0, 87, 1, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,184,204, 90, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 66, 82, 83,117, 98,116,114, 97, 99,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,
-168,210, 90, 3, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
-128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 75, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0,
+ 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62,
+ 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0,
+ 76,213, 92, 10, 32, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 4, 0, 0, 25, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 96, 64, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
-205,204, 76, 62, 1, 2, 0, 0, 68, 65, 84, 65, 16, 1, 0, 0, 32,209, 90, 3, 0, 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,
- 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 16, 1, 0, 0,232,215, 92, 10,
+ 82, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67,
+ 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186, 40,217, 92, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,
+ 40,217, 92, 10, 80, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63,
+ 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0,
+188, 2, 0, 0,136,217, 92, 10, 86, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,213, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 66, 82, 84,119,105,115,116, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 38, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,112,220, 92, 10, 1, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,168,210, 90, 3, 0, 0, 0, 0,
- 83, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67,
- 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61, 56,212, 90, 3, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 56,212, 90, 3, 0, 0, 0, 0, 81, 1, 0, 0, 4, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61,
- 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 85, 83, 69, 82, 8, 13, 0, 0, 96,119,163, 2, 0, 0, 0, 0,
-194, 0, 0, 0, 1, 0, 0, 0, 33, 8, 17, 1, 63, 2, 0, 0, 5, 0, 0, 0, 47,116,109,112, 47, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 0, 75, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 62,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 1, 0, 0,212,217, 92, 10, 32, 0, 0, 0, 1, 0, 0, 0,
+ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 16, 1, 0, 0,112,220, 92, 10, 82, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,
+ 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191,
+ 46, 95,255,186,224,255,127,191,114, 97,255,186,176,221, 92, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 0, 85,115,101,114,115, 47,116,111,110,
- 47, 68,101,115,107,116,111,112, 47, 0, 45,112,111,119,101,114,112, 99, 47, 98,105,110, 47, 98,108,101,110,100,101,114, 46, 97,
-112,112, 47, 67,111,110,116,101,110,116,115, 47, 82,101,115,111,117,114, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,176,221, 92, 10, 80, 1, 0, 0, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61,
+ 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 85, 83, 69, 82,240, 12, 0, 0, 32, 31,246, 8,195, 0, 0, 0,
+ 1, 0, 0, 0, 33, 8, 17, 1, 63, 2, 0, 0, 5, 0, 0, 0, 47,116,109,112, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 0, 85,115,101,114,115, 47,116,111,110, 47, 68,101,115,
+107,116,111,112, 47, 0, 45,112,111,119,101,114,112, 99, 47, 98,105,110, 47, 98,108,101,110,100,101,114, 46, 97,112,112, 47, 67,
+111,110,116,101,110,116,115, 47, 82,101,115,111,117,114, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -5432,11 +9342,11 @@ char datatoc_startup_blend[]= {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -5452,126 +9362,140 @@ char datatoc_startup_blend[]= {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 35, 0, 0, 0, 2, 0, 94, 1,
- 8, 0, 0, 0, 3, 0, 0, 0, 56, 52, 39, 1, 0, 0, 0, 0, 2, 0, 2, 0, 0, 8, 0, 0, 2, 0, 0, 0, 68,172, 0, 0,
- 36, 0, 0, 0, 2, 0, 0, 0,128, 0, 0, 0, 72, 0, 0, 0, 0, 0, 64, 0, 5, 0, 2, 0, 8,226, 90, 3, 0, 0, 0, 0,
- 8,226, 90, 3, 0, 0, 0, 0,120,107, 94, 3, 0, 0, 0, 0,120,107, 94, 3, 0, 0, 0, 0,152,219, 94, 3, 0, 0, 0, 0,
-152,219, 94, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 1, 0, 2, 0, 25, 0, 1, 0, 20, 0, 20, 0, 1, 0, 0, 0, 0, 0, 0, 0,
-205,204, 76, 63,205,204, 76, 63,205,204, 76, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63,
- 30, 90,100,191,154,153,153, 62,102,102,102, 63, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 31,250,254, 62, 9, 0, 0, 63,
-156,153, 25, 63, 0, 0, 0, 0,205,204, 76, 62,205,204, 76, 62,205,204, 76, 62, 0, 0,128, 63, 44,135, 22, 63, 32,133,235, 62,
-184,243,125, 62, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,195, 73, 76, 63, 42,135, 86, 63, 0, 0,128, 63, 0, 0, 0, 0,
- 1, 43,135, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 16, 47, 93, 62, 58,180,200,190, 24, 47, 93,190, 0, 0, 0, 0,
- 14, 0, 0, 0, 25, 0, 15, 0,120, 0, 60, 0, 3, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,144, 31, 15, 0, 6, 0, 25, 0,
- 8, 0, 10, 0,200, 0, 0, 0,100, 0,100, 0, 0, 0, 0, 0, 2, 0, 1, 0, 10, 0, 50, 0,200, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 35, 0, 0, 0, 2, 0, 94, 1, 8, 0, 0, 0,
+ 3, 0, 0, 0, 56, 52, 39, 1, 0, 0, 0, 0, 2, 0, 2, 0, 0, 8, 0, 0, 2, 0, 0, 0, 68,172, 0, 0, 36, 0, 0, 0,
+ 2, 0, 0, 0,128, 0, 0, 0, 72, 0, 0, 0, 0, 0, 64, 0, 5, 0, 2, 0, 48,235, 92, 10, 48,235, 92, 10,104, 69, 85, 10,
+104, 69, 85, 10,168, 70, 85, 10,168, 70, 85, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0,
+ 1, 0, 2, 0, 25, 0, 1, 0, 20, 0, 20, 0, 1, 0, 0, 0, 0, 0, 0, 0,205,204, 76, 63,205,204, 76, 63,205,204, 76, 63,
+ 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 30, 90,100,191,154,153,153, 62,102,102,102, 63,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 31,250,254, 62, 9, 0, 0, 63,156,153, 25, 63, 0, 0, 0, 0,205,204, 76, 62,
+205,204, 76, 62,205,204, 76, 62, 0, 0,128, 63, 44,135, 22, 63, 32,133,235, 62,184,243,125, 62, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0,195, 73, 76, 63, 42,135, 86, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 43,135, 61, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128, 63, 16, 47, 93, 62, 58,180,200,190, 24, 47, 93,190, 0, 0, 0, 0, 14, 0, 0, 0, 25, 0, 15, 0,120, 0, 60, 0,
+ 3, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,144, 31, 15, 0, 6, 0, 25, 0, 8, 0, 10, 0,200, 0, 0, 0,100, 0,100, 0,
+ 0, 0, 0, 0, 2, 0, 1, 0, 10, 0, 50, 0,200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
- 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63,
- 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0,
- 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
- 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63,
- 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0,
- 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
- 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63,
- 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0,
- 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
- 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63,
- 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0,
- 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
- 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63,
- 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0,
- 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
- 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63,
- 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0,
- 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
- 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63,
- 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0,
- 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
- 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63,
- 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 29, 0, 0, 8,226, 90, 3, 0, 0, 0, 0,
-191, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,101,102, 97,117,108,116, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25,255,153,153,153,255,
-100,100,100,255, 25, 25, 25,255, 0, 0, 0,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25,255,153,153,153,255,
-100,100,100,255, 25, 25, 25,255, 0, 0, 0,255,255,255,255,255, 1, 0, 15, 0,241,255, 0, 0, 25, 25, 25,255,153,153,153,255,
-153,153,153,255, 90, 90, 90,255, 0, 0, 0,255,255,255,255,255, 1, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0,255, 70, 70, 70,255,
- 86,128,194,255,255,255,255,255,255,255,255,255, 0, 0, 0,255, 1, 0, 15, 0,241,255, 0, 0, 0, 0, 0,255, 70, 70, 70,255,
- 70, 70, 70,255,255,255,255,255, 0, 0, 0,255,255,255,255,255, 1, 0, 15, 0,241,255, 0, 0, 25, 25, 25,255,153,153,153,255,
-100,100,100,255, 25, 25, 25,255, 0, 0, 0,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25,255,180,180,180,255,
-153,153,153,255, 90, 90, 90,255, 0, 0, 0,255,255,255,255,255, 1, 0,236,255, 0, 0, 0, 0, 25, 25, 25,255,180,180,180,255,
-153,153,153,255,128,128,128,255, 0, 0, 0,255,255,255,255,255, 1, 0,236,255, 0, 0, 0, 0, 0, 0, 0,255, 70, 70, 70,255,
- 70, 70, 70,255,255,255,255,255,255,255,255,255,204,204,204,255, 1, 0, 15, 0,241,255, 0, 0, 0, 0, 0,255, 63, 63, 63,255,
- 86,128,194,255,255,255,255,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 25, 0,236,255, 0, 0, 0, 0, 0,255, 25, 25, 25,230,
- 45, 45, 45,230,100,100,100,255,160,160,160,255,255,255,255,255, 0, 0, 25, 0,236,255, 0, 0, 0, 0, 0,255, 0, 0, 0, 0,
- 86,128,194,255,255,255,255,255,255,255,255,255, 0, 0, 0,255, 0, 0, 38, 0, 0, 0, 0, 0, 25, 25, 25,255,128,128,128,255,
-100,100,100,255, 25, 25, 25,255, 0, 0, 0,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50,180, 80, 80, 80,180,
-100,100,100,180,128,128,128,255, 0, 0, 0,255,255,255,255,255, 1, 0, 5, 0,251,255, 0, 0, 0, 0, 0,255,190,190,190,255,
-100,100,100,180, 68, 68, 68,255, 0, 0, 0,255,255,255,255,255, 0, 0, 5, 0,251,255, 0, 0, 0, 0, 0,255, 0, 0, 0, 0,
- 86,128,194,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0,115,190, 76,255, 90,166, 51,255,
-240,235,100,255,215,211, 75,255,180, 0,255,255,153, 0,230,255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 8, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,
+ 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63,
+ 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63,
+ 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,
+ 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63,
+ 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63,
+ 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,
+ 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63,
+ 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63,
+ 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,
+ 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63,
+ 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63,
+ 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,
+ 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63,
+ 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63,
+ 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,
+ 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63,
+ 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63,
+ 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,
+ 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63,
+ 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63,
+ 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63,
+ 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63,
+ 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 29, 0, 0, 48,235, 92, 10,
+192, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,101,102, 97,117,108,116, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25,255,153,153,153,255,100,100,100,255, 25, 25, 25,255,
+ 0, 0, 0,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25,255,153,153,153,255,100,100,100,255, 25, 25, 25,255,
+ 0, 0, 0,255,255,255,255,255, 1, 0, 15, 0,241,255, 0, 0, 25, 25, 25,255,153,153,153,255,153,153,153,255, 90, 90, 90,255,
+ 0, 0, 0,255,255,255,255,255, 1, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0,255, 70, 70, 70,255, 86,128,194,255,255,255,255,255,
+255,255,255,255, 0, 0, 0,255, 1, 0, 15, 0,241,255, 0, 0, 0, 0, 0,255, 70, 70, 70,255, 70, 70, 70,255,255,255,255,255,
+ 0, 0, 0,255,255,255,255,255, 1, 0, 15, 0,241,255, 0, 0, 25, 25, 25,255,153,153,153,255,100,100,100,255, 25, 25, 25,255,
+ 0, 0, 0,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25,255,180,180,180,255,153,153,153,255, 90, 90, 90,255,
+ 0, 0, 0,255,255,255,255,255, 1, 0,236,255, 0, 0, 0, 0, 25, 25, 25,255,180,180,180,255,153,153,153,255,128,128,128,255,
+ 0, 0, 0,255,255,255,255,255, 1, 0,236,255, 0, 0, 0, 0, 0, 0, 0,255, 70, 70, 70,255, 70, 70, 70,255,255,255,255,255,
+255,255,255,255,204,204,204,255, 1, 0, 15, 0,241,255, 0, 0, 0, 0, 0,255, 63, 63, 63,255, 86,128,194,255,255,255,255,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 25, 0,236,255, 0, 0, 0, 0, 0,255, 25, 25, 25,230, 45, 45, 45,230,100,100,100,255,
+160,160,160,255,255,255,255,255, 0, 0, 25, 0,236,255, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 86,128,194,255,255,255,255,255,
+255,255,255,255, 0, 0, 0,255, 0, 0, 38, 0, 0, 0, 0, 0, 25, 25, 25,255,128,128,128,255,100,100,100,255, 25, 25, 25,255,
+ 0, 0, 0,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50,180, 80, 80, 80,180,100,100,100,180,128,128,128,255,
+ 0, 0, 0,255,255,255,255,255, 1, 0, 5, 0,251,255, 0, 0, 0, 0, 0,255,190,190,190,255,100,100,100,180, 68, 68, 68,255,
+ 0, 0, 0,255,255,255,255,255, 0, 0, 5, 0,251,255, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 86,128,194,255, 0, 0, 0,255,
+ 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0,115,190, 76,255, 90,166, 51,255,240,235,100,255,215,211, 75,255,
+180, 0,255,255,153, 0,230,255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,
+114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,
+130,130,130,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255,
+ 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,
+255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,
+255,133, 0, 60,255,133, 0,255, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0,
+ 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,
+144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 57, 57, 57,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255,
- 0, 0, 0,255,255,255,255,255,130,130,130,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100,
+ 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100,
0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,
255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255,
- 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80,
+204, 0,153,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80,
0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255,
- 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,
+255,255,255,255, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,
240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 57, 57,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 76, 76,255, 0, 0, 0, 0,250,250,250,255, 15, 15, 15,255,
114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,
-165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,
-160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255,
+102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,
+160,160,160,100,127,112,112,100,255,140, 25,255,250,250,250,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,130,130,130,255,
8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,
-255, 32, 32,255, 75, 75, 75,255,204, 0,153,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, 35, 97,221,255,
+255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, 35, 97,221,255,
200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,
-240,255, 64,255,240,144,160,255,255,255,255,255, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0,255,
+240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0,255,
240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 76, 76,255, 0, 0, 0, 0,
-250,250,250,255, 15, 15, 15,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
- 0, 0, 0,255,255,255,255,255,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,255, 0, 0, 0,255,
- 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100,255,140, 25,255,250,250,250,255, 0, 0, 0,255,241, 88, 0,255,
- 0, 0, 0, 40,130,130,130,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,
+250,250,250,255,250,250,250,255,250,250,250,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,107,107,255, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,255,255,255,150, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,150,150,150,100,112,112,112,100, 96,192, 64,255, 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255,
+ 0, 0, 0, 40,255,140, 25,255, 79,101, 73,255,135,177,125,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,
255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255,
34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,
128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,
-128, 48, 96,255, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+128, 48, 96,255, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 82, 96,110,255,124,137,150,255, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,250,250,250,255,250,250,250,255,250,250,250,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,
-114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,
-255,255,255,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,150,150,150,100,112,112,112,100, 96,192, 64,255, 94, 94, 94,255,
- 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 79,101, 73,255,135,177,125,255,255,255,255,255, 0, 0, 0,255,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0,255,255,133, 0,255, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,
+114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,
+165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255,
+ 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,
255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,
255,133, 0, 60,255,133, 0,255, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0,
96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,
-144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 82, 96,110,255,
-124,137,150,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0,
+144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0,255,255,133, 0,255, 3, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255,
- 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100,
- 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,
+ 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,173,173,173,255,127,112,112,100,
+ 0, 0, 0, 0, 91, 91, 91,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,
255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255,
0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80,
0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255,
@@ -5579,18 +9503,18 @@ char datatoc_startup_blend[]= {
240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,
114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,
-165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,
-173,173,173,255,127,112,112,100, 0, 0, 0, 0, 91, 91, 91,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255,
- 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,
+102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,255,255,255,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,
+150,150,150,100,112,112,112,100, 96,192, 64,255, 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255,
+ 79,101, 73,255,135,177,125,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,
255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, 35, 97,221,255,
-200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,
+200,200,200,255, 80,200,255, 80, 12, 10, 10,128,255,140, 0,255, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,
240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0,255,
-240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+240,255, 64,255, 64,192, 48,255,240,144,160,255, 82, 96,110,255,124,137,150,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,107,107,255, 0, 0, 0, 0,
+255,255,255,128, 0, 0, 0,255,255,133, 0,255, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,107,107,255, 0, 0, 0, 0,
0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
0, 0, 0,255,255,255,255,255,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,255,255,255,150, 0, 0, 0,255,
0, 0, 0,255,255,255,255,255,150,150,150,100,112,112,112,100, 96,192, 64,255, 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255,
@@ -5602,66 +9526,66 @@ char datatoc_startup_blend[]= {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0,255,255,133, 0,255, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,
-114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,
-255,255,255,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,150,150,150,100,112,112,112,100, 96,192, 64,255, 94, 94, 94,255,
- 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 79,101, 73,255,135,177,125,255,255,255,255,255, 0, 0, 0,255,
+116,116,116,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,
+114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,
+165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255,
+ 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,
255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,
-255,133, 0, 60,255,133, 0,255, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 12, 10, 10,128,255,140, 0,255,
+255,133, 0, 60,255,133, 0,255, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0,
96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,
-144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 82, 96,110,255,
-124,137,150,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0,255,255,133, 0,255, 3, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,116,116,116,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
+144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81,105,135,255,109, 88,129,255, 78,152, 62,255, 46,143,143,255,
+169, 84,124,255,126,126, 80,255,162, 95,111,255,109,145,131,255,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255,
0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100,
0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,
255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255,
- 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80,
+ 0, 0, 0, 0,255,255,255, 10,255,133, 0, 60,255,133, 0,255, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80,
0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255,
0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,
240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81,105,135,255,109, 88,129,255,
- 78,152, 62,255, 46,143,143,255,169, 84,124,255,126,126, 80,255,162, 95,111,255,109,145,131,255,255,255,255,128, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,
+ 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,255,110,110,110,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,
114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,
-165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,
-160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255,
+165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,132,132,132,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,
+ 94, 94, 94,255,172,172,172,255, 17, 27, 60,100, 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,195,195,195,255,
8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,
-255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0,255,255,255, 10,255,133, 0, 60,255,133, 0,255, 34,221,221,255, 35, 97,221,255,
+255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, 35, 97,221,255,
200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,
240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0,255,
240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,255,110,110,110,255, 0, 0, 0, 0,
+255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153,153,153,255, 0, 0, 0, 0,
0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
- 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,132,132,132,255, 0, 0, 0,255,
- 0, 0, 0,255,255,255,255,255, 94, 94, 94,255,172,172,172,255, 17, 27, 60,100, 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255,
- 0, 0, 0, 40,195,195,195,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255,
+ 0, 0, 0,255,255,255,255,255,143,143,143,255,198,119,119,255,255, 0, 0,255, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255,
+ 0, 0, 0, 40,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,
255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255,
34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,
128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,
128, 48, 96,255, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0,100, 0, 0,255, 0, 0,200,255,128, 0, 80,255,
+ 95, 95, 0,255, 0,100, 50,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-153,153,153,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,
+114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,
114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,
-165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,143,143,143,255,198,119,119,255,255, 0, 0,255, 64, 64, 64,255,
+165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255,
0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,
255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,
255,133, 0, 60,255,133, 0,255, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0,
96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,
144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0,100, 0, 0,255,
- 0, 0,200,255,128, 0, 80,255, 95, 95, 0,255, 0,100, 50,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255,
- 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100,
- 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,
+ 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,173,173,173,255,127,112,112,100,
+ 0, 0, 0, 0, 91, 91, 91,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,
255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255,
0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80,
0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255,
@@ -5669,30 +9593,30 @@ char datatoc_startup_blend[]= {
240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 57, 57,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,
114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,
165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,
-173,173,173,255,127,112,112,100, 0, 0, 0, 0, 91, 91, 91,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255,
- 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,
+160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255,
+ 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,255,255,255,219, 37, 18,255,
255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, 35, 97,221,255,
200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,
240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0,255,
240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0,155,155,155,160,100,100,100,255,108,105,111,255,104,106,117,255,105,117,110,255,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 57, 57,255, 0, 0, 0, 0,
+255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100,100,100,255, 0, 0, 0, 0,
0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255,
0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255,
0, 0, 0, 40,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,
-255,255,255,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255,
+255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255,
34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,
128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,
128, 48, 96,255, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0,155,155,155,160,100,100,100,255,108,105,111,255,
-104,106,117,255,105,117,110,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-100,100,100,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,
+114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,
114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,
165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255,
0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,
@@ -5703,7 +9627,7 @@ char datatoc_startup_blend[]= {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255,
0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255,
0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100,
0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,
@@ -5711,1827 +9635,1834 @@ char datatoc_startup_blend[]= {
0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80,
0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255,
0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,
-240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 96,128,255,255,255,255,255,255, 0,170, 0,255,220, 96, 96,255,220, 96, 96,255,
3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,
-114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,
-165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,
-160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40,255,140, 25,255,
- 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,
-255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 34,221,221,255, 35, 97,221,255,
-200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,
-240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0,255,
-240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 96,128,255,255,255,255,255,255, 0,170, 0,255,
-220, 96, 96,255,220, 96, 96,255, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154, 0, 0,255,189, 17, 17,255,
-247, 10, 10,255, 0, 0, 0, 0,247, 64, 24,255,246,105, 19,255,250,153, 0,255, 0, 0, 0, 0, 30,145, 9,255, 89,183, 11,255,
-131,239, 29,255, 0, 0, 0, 0, 10, 54,148,255, 54,103,223,255, 94,193,239,255, 0, 0, 0, 0,169, 41, 78,255,193, 65,106,255,
-240, 93,145,255, 0, 0, 0, 0, 67, 12,120,255, 84, 58,163,255,135,100,213,255, 0, 0, 0, 0, 36,120, 90,255, 60,149,121,255,
-111,182,171,255, 0, 0, 0, 0, 75,112,124,255,106,134,145,255,155,194,205,255, 0, 0, 0, 0,244,201, 12,255,238,194, 54,255,
-243,255, 0,255, 0, 0, 0, 0, 30, 32, 36,255, 72, 76, 86,255,255,255,255,255, 0, 0, 0, 0,111, 47,106,255,152, 69,190,255,
-211, 48,214,255, 0, 0, 0, 0,108,142, 34,255,127,176, 34,255,187,239, 91,255, 0, 0, 0, 0,141,141,141,255,176,176,176,255,
-222,222,222,255, 0, 0, 0, 0,131, 67, 38,255,139, 88, 17,255,189,106, 17,255, 0, 0, 0, 0, 8, 49, 14,255, 28, 67, 11,255,
- 52, 98, 43,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 68, 78, 65, 49,112,224, 0, 0,200,207,143, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 83, 68, 78, 65, 78, 65, 77, 69,
-179, 11, 0, 0, 42,110,101,120,116, 0, 42,112,114,101,118, 0, 42,100, 97,116, 97, 0, 42,102,105,114,115,116, 0, 42,108, 97,
-115,116, 0,120, 0,121, 0,122, 0,119, 0,120,109,105,110, 0,120,109, 97,120, 0,121,109,105,110, 0,121,109, 97,120, 0, 42,
-112,111,105,110,116,101,114, 0,103,114,111,117,112, 0,118, 97,108, 0,118, 97,108, 50, 0,116,121,112,101, 0,115,117, 98,116,
-121,112,101, 0,102,108, 97,103, 0,110, 97,109,101, 91, 51, 50, 93, 0,115, 97,118,101,100, 0,100, 97,116, 97, 0,108,101,110,
- 0,116,111,116, 97,108,108,101,110, 0, 42,110,101,119,105,100, 0, 42,108,105, 98, 0,110, 97,109,101, 91, 50, 52, 93, 0,117,
-115, 0,105, 99,111,110, 95,105,100, 0, 42,112,114,111,112,101,114,116,105,101,115, 0,105,100, 0, 42,105,100, 98,108,111, 99,
-107, 0, 42,102,105,108,101,100, 97,116, 97, 0,110, 97,109,101, 91, 50, 52, 48, 93, 0,102,105,108,101,112, 97,116,104, 91, 50,
- 52, 48, 93, 0,116,111,116, 0,112, 97,100, 0, 42,112, 97,114,101,110,116, 0,119, 91, 50, 93, 0,104, 91, 50, 93, 0, 99,104,
- 97,110,103,101,100, 91, 50, 93, 0,112, 97,100, 48, 0,112, 97,100, 49, 0, 42,114,101, 99,116, 91, 50, 93, 0, 42,111, 98, 0,
- 98,108,111, 99,107,116,121,112,101, 0, 97,100,114, 99,111,100,101, 0,110, 97,109,101, 91, 49, 50, 56, 93, 0, 42, 98,112, 0,
- 42, 98,101,122,116, 0,109, 97,120,114, 99,116, 0,116,111,116,114, 99,116, 0,118, 97,114,116,121,112,101, 0,116,111,116,118,
-101,114,116, 0,105,112,111, 0,101,120,116,114, 97,112, 0,114,116, 0, 98,105,116,109, 97,115,107, 0,115,108,105,100,101, 95,
-109,105,110, 0,115,108,105,100,101, 95,109, 97,120, 0, 99,117,114,118, 97,108, 0, 42,100,114,105,118,101,114, 0, 99,117,114,
-118,101, 0, 99,117,114, 0,115,104,111,119,107,101,121, 0,109,117,116,101,105,112,111, 0,112,111,115, 0,114,101,108, 97,116,
-105,118,101, 0,116,111,116,101,108,101,109, 0,112, 97,100, 50, 0, 42,119,101,105,103,104,116,115, 0,118,103,114,111,117,112,
- 91, 51, 50, 93, 0,115,108,105,100,101,114,109,105,110, 0,115,108,105,100,101,114,109, 97,120, 0, 42, 97,100,116, 0, 42,114,
-101,102,107,101,121, 0,101,108,101,109,115,116,114, 91, 51, 50, 93, 0,101,108,101,109,115,105,122,101, 0, 98,108,111, 99,107,
- 0, 42,105,112,111, 0, 42,102,114,111,109, 0,116,111,116,107,101,121, 0,115,108,117,114,112,104, 0, 42,108,105,110,101, 0,
- 42,102,111,114,109, 97,116, 0, 98,108,101,110, 0,108,105,110,101,110,111, 0,115,116, 97,114,116, 0,101,110,100, 0,102,108,
- 97,103,115, 0, 99,111,108,111,114, 91, 52, 93, 0,112, 97,100, 91, 52, 93, 0, 42,110, 97,109,101, 0,110,108,105,110,101,115,
- 0,108,105,110,101,115, 0, 42, 99,117,114,108, 0, 42,115,101,108,108, 0, 99,117,114, 99, 0,115,101,108, 99, 0,109, 97,114,
-107,101,114,115, 0, 42,117,110,100,111, 95, 98,117,102, 0,117,110,100,111, 95,112,111,115, 0,117,110,100,111, 95,108,101,110,
- 0, 42, 99,111,109,112,105,108,101,100, 0,109,116,105,109,101, 0,115,105,122,101, 0,115,101,101,107, 0,112, 97,115,115,101,
-112, 97,114,116, 97,108,112,104, 97, 0, 99,108,105,112,115,116, 97, 0, 99,108,105,112,101,110,100, 0,108,101,110,115, 0,111,
-114,116,104,111, 95,115, 99, 97,108,101, 0,100,114, 97,119,115,105,122,101, 0,115,104,105,102,116,120, 0,115,104,105,102,116,
-121, 0, 89, 70, 95,100,111,102,100,105,115,116, 0, 42,100,111,102, 95,111, 98, 0,102,114, 97,109,101,110,114, 0,102,114, 97,
-109,101,115, 0,111,102,102,115,101,116, 0,115,102,114, 97, 0,102,105,101, 95,105,109, 97, 0, 99,121, 99,108, 0,111,107, 0,
-109,117,108,116,105, 95,105,110,100,101,120, 0,108, 97,121,101,114, 0,112, 97,115,115, 0,109,101,110,117,110,114, 0, 42,115,
- 99,101,110,101, 0,105, 98,117,102,115, 0, 42,103,112,117,116,101,120,116,117,114,101, 0, 42, 97,110,105,109, 0, 42,114,114,
- 0, 42,114,101,110,100,101,114,115, 91, 56, 93, 0,114,101,110,100,101,114, 95,115,108,111,116, 0,108, 97,115,116, 95,114,101,
-110,100,101,114, 95,115,108,111,116, 0,115,111,117,114, 99,101, 0,108, 97,115,116,102,114, 97,109,101, 0,116,112, 97,103,101,
-102,108, 97,103, 0,116,111,116, 98,105,110,100, 0,120,114,101,112, 0,121,114,101,112, 0,116,119,115,116, 97, 0,116,119,101,
-110,100, 0, 98,105,110,100, 99,111,100,101, 0, 42,114,101,112, 98,105,110,100, 0, 42,112, 97, 99,107,101,100,102,105,108,101,
- 0, 42,112,114,101,118,105,101,119, 0,108, 97,115,116,117,112,100, 97,116,101, 0,108, 97,115,116,117,115,101,100, 0, 97,110,
-105,109,115,112,101,101,100, 0,103,101,110, 95,120, 0,103,101,110, 95,121, 0,103,101,110, 95,116,121,112,101, 0, 97,115,112,
-120, 0, 97,115,112,121, 0,116,101,120, 99,111, 0,109, 97,112,116,111, 0,109, 97,112,116,111,110,101,103, 0, 98,108,101,110,
-100,116,121,112,101, 0, 42,111, 98,106,101, 99,116, 0, 42,116,101,120, 0,117,118,110, 97,109,101, 91, 51, 50, 93, 0,112,114,
-111,106,120, 0,112,114,111,106,121, 0,112,114,111,106,122, 0,109, 97,112,112,105,110,103, 0,111,102,115, 91, 51, 93, 0,115,
-105,122,101, 91, 51, 93, 0,114,111,116, 0,116,101,120,102,108, 97,103, 0, 99,111,108,111,114,109,111,100,101,108, 0,112,109,
- 97,112,116,111, 0,112,109, 97,112,116,111,110,101,103, 0,110,111,114,109, 97,112,115,112, 97, 99,101, 0,119,104,105, 99,104,
- 95,111,117,116,112,117,116, 0, 98,114,117,115,104, 95,109, 97,112, 95,109,111,100,101, 0,112, 97,100, 91, 55, 93, 0,114, 0,
-103, 0, 98, 0,107, 0,100,101,102, 95,118, 97,114, 0, 99,111,108,102, 97, 99, 0,118, 97,114,102, 97, 99, 0,110,111,114,102,
- 97, 99, 0,100,105,115,112,102, 97, 99, 0,119, 97,114,112,102, 97, 99, 0, 99,111,108,115,112,101, 99,102, 97, 99, 0,109,105,
-114,114,102, 97, 99, 0, 97,108,112,104, 97,102, 97, 99, 0,100,105,102,102,102, 97, 99, 0,115,112,101, 99,102, 97, 99, 0,101,
-109,105,116,102, 97, 99, 0,104, 97,114,100,102, 97, 99, 0,114, 97,121,109,105,114,114,102, 97, 99, 0,116,114, 97,110,115,108,
-102, 97, 99, 0, 97,109, 98,102, 97, 99, 0, 99,111,108,101,109,105,116,102, 97, 99, 0, 99,111,108,114,101,102,108,102, 97, 99,
- 0, 99,111,108,116,114, 97,110,115,102, 97, 99, 0,100,101,110,115,102, 97, 99, 0,115, 99, 97,116,116,101,114,102, 97, 99, 0,
-114,101,102,108,102, 97, 99, 0,116,105,109,101,102, 97, 99, 0,108,101,110,103,116,104,102, 97, 99, 0, 99,108,117,109,112,102,
- 97, 99, 0,107,105,110,107,102, 97, 99, 0,114,111,117,103,104,102, 97, 99, 0,112, 97,100,101,110,115,102, 97, 99, 0,108,105,
-102,101,102, 97, 99, 0,115,105,122,101,102, 97, 99, 0,105,118,101,108,102, 97, 99, 0,112,118,101,108,102, 97, 99, 0,115,104,
- 97,100,111,119,102, 97, 99, 0,122,101,110,117,112,102, 97, 99, 0,122,101,110,100,111,119,110,102, 97, 99, 0, 98,108,101,110,
-100,102, 97, 99, 0,110, 97,109,101, 91, 49, 54, 48, 93, 0, 42,104, 97,110,100,108,101, 0, 42,112,110, 97,109,101, 0, 42,115,
-116,110, 97,109,101,115, 0,115,116,121,112,101,115, 0,118, 97,114,115, 0, 42,118, 97,114,115,116,114, 0, 42,114,101,115,117,
-108,116, 0, 42, 99,102,114, 97, 0,100, 97,116, 97, 91, 51, 50, 93, 0, 40, 42,100,111,105,116, 41, 40, 41, 0, 40, 42,105,110,
-115,116, 97,110, 99,101, 95,105,110,105,116, 41, 40, 41, 0, 40, 42, 99, 97,108,108, 98, 97, 99,107, 41, 40, 41, 0,118,101,114,
-115,105,111,110, 0, 97, 0,105,112,111,116,121,112,101, 0, 42,105,109, 97, 0, 42, 99,117, 98,101, 91, 54, 93, 0,105,109, 97,
-116, 91, 52, 93, 91, 52, 93, 0,111, 98,105,109, 97,116, 91, 51, 93, 91, 51, 93, 0,115,116,121,112,101, 0,118,105,101,119,115,
- 99, 97,108,101, 0,110,111,116,108, 97,121, 0, 99,117, 98,101,114,101,115, 0,100,101,112,116,104, 0,114,101, 99, 97,108, 99,
- 0,108, 97,115,116,115,105,122,101, 0,102, 97,108,108,111,102,102, 95,116,121,112,101, 0,102, 97,108,108,111,102,102, 95,115,
-111,102,116,110,101,115,115, 0,114, 97,100,105,117,115, 0, 99,111,108,111,114, 95,115,111,117,114, 99,101, 0,116,111,116,112,
-111,105,110,116,115, 0,112,100,112, 97,100, 0,112,115,121,115, 0,112,115,121,115, 95, 99, 97, 99,104,101, 95,115,112, 97, 99,
-101, 0,111, 98, 95, 99, 97, 99,104,101, 95,115,112, 97, 99,101, 0, 42,112,111,105,110,116, 95,116,114,101,101, 0, 42,112,111,
-105,110,116, 95,100, 97,116, 97, 0,110,111,105,115,101, 95,115,105,122,101, 0,110,111,105,115,101, 95,100,101,112,116,104, 0,
-110,111,105,115,101, 95,105,110,102,108,117,101,110, 99,101, 0,110,111,105,115,101, 95, 98, 97,115,105,115, 0,112,100,112, 97,
-100, 51, 91, 51, 93, 0,110,111,105,115,101, 95,102, 97, 99, 0,115,112,101,101,100, 95,115, 99, 97,108,101, 0, 42, 99,111, 98,
- 97, 0,114,101,115,111,108, 91, 51, 93, 0,105,110,116,101,114,112, 95,116,121,112,101, 0,102,105,108,101, 95,102,111,114,109,
- 97,116, 0,101,120,116,101,110,100, 0,115,109,111,107,101,100, 95,116,121,112,101, 0,105,110,116, 95,109,117,108,116,105,112,
-108,105,101,114, 0,115,116,105,108,108, 95,102,114, 97,109,101, 0,115,111,117,114, 99,101, 95,112, 97,116,104, 91, 50, 52, 48,
- 93, 0, 42,100, 97,116, 97,115,101,116, 0, 99, 97, 99,104,101,100,102,114, 97,109,101, 0,110,111,105,115,101,115,105,122,101,
- 0,116,117,114, 98,117,108, 0, 98,114,105,103,104,116, 0, 99,111,110,116,114, 97,115,116, 0,115, 97,116,117,114, 97,116,105,
-111,110, 0,114,102, 97, 99, 0,103,102, 97, 99, 0, 98,102, 97, 99, 0,102,105,108,116,101,114,115,105,122,101, 0,109,103, 95,
- 72, 0,109,103, 95,108, 97, 99,117,110, 97,114,105,116,121, 0,109,103, 95,111, 99,116, 97,118,101,115, 0,109,103, 95,111,102,
-102,115,101,116, 0,109,103, 95,103, 97,105,110, 0,100,105,115,116, 95, 97,109,111,117,110,116, 0,110,115, 95,111,117,116,115,
- 99, 97,108,101, 0,118,110, 95,119, 49, 0,118,110, 95,119, 50, 0,118,110, 95,119, 51, 0,118,110, 95,119, 52, 0,118,110, 95,
-109,101,120,112, 0,118,110, 95,100,105,115,116,109, 0,118,110, 95, 99,111,108,116,121,112,101, 0,110,111,105,115,101,100,101,
-112,116,104, 0,110,111,105,115,101,116,121,112,101, 0,110,111,105,115,101, 98, 97,115,105,115, 0,110,111,105,115,101, 98, 97,
-115,105,115, 50, 0,105,109, 97,102,108, 97,103, 0, 99,114,111,112,120,109,105,110, 0, 99,114,111,112,121,109,105,110, 0, 99,
-114,111,112,120,109, 97,120, 0, 99,114,111,112,121,109, 97,120, 0,116,101,120,102,105,108,116,101,114, 0, 97,102,109, 97,120,
- 0,120,114,101,112,101, 97,116, 0,121,114,101,112,101, 97,116, 0, 99,104,101, 99,107,101,114,100,105,115,116, 0,110, 97, 98,
-108, 97, 0,105,117,115,101,114, 0, 42,110,111,100,101,116,114,101,101, 0, 42,112,108,117,103,105,110, 0, 42,101,110,118, 0,
- 42,112,100, 0, 42,118,100, 0,117,115,101, 95,110,111,100,101,115, 0,108,111, 99, 91, 51, 93, 0,114,111,116, 91, 51, 93, 0,
-109, 97,116, 91, 52, 93, 91, 52, 93, 0,109,105,110, 91, 51, 93, 0,109, 97,120, 91, 51, 93, 0,109,111,100,101, 0,116,111,116,
-101,120, 0,115,104,100,119,114, 0,115,104,100,119,103, 0,115,104,100,119, 98, 0,115,104,100,119,112, 97,100, 0,101,110,101,
-114,103,121, 0,100,105,115,116, 0,115,112,111,116,115,105,122,101, 0,115,112,111,116, 98,108,101,110,100, 0,104, 97,105,110,
-116, 0, 97,116,116, 49, 0, 97,116,116, 50, 0, 42, 99,117,114,102, 97,108,108,111,102,102, 0,115,104, 97,100,115,112,111,116,
-115,105,122,101, 0, 98,105, 97,115, 0,115,111,102,116, 0, 99,111,109,112,114,101,115,115,116,104,114,101,115,104, 0,112, 97,
-100, 53, 91, 51, 93, 0, 98,117,102,115,105,122,101, 0,115, 97,109,112, 0, 98,117,102,102,101,114,115, 0,102,105,108,116,101,
-114,116,121,112,101, 0, 98,117,102,102,108, 97,103, 0, 98,117,102,116,121,112,101, 0,114, 97,121, 95,115, 97,109,112, 0,114,
- 97,121, 95,115, 97,109,112,121, 0,114, 97,121, 95,115, 97,109,112,122, 0,114, 97,121, 95,115, 97,109,112, 95,116,121,112,101,
- 0, 97,114,101, 97, 95,115,104, 97,112,101, 0, 97,114,101, 97, 95,115,105,122,101, 0, 97,114,101, 97, 95,115,105,122,101,121,
- 0, 97,114,101, 97, 95,115,105,122,101,122, 0, 97,100, 97,112,116, 95,116,104,114,101,115,104, 0,114, 97,121, 95,115, 97,109,
-112, 95,109,101,116,104,111,100, 0,116,101,120, 97, 99,116, 0,115,104, 97,100,104, 97,108,111,115,116,101,112, 0,115,117,110,
- 95,101,102,102,101, 99,116, 95,116,121,112,101, 0,115,107,121, 98,108,101,110,100,116,121,112,101, 0,104,111,114,105,122,111,
-110, 95, 98,114,105,103,104,116,110,101,115,115, 0,115,112,114,101, 97,100, 0,115,117,110, 95, 98,114,105,103,104,116,110,101,
-115,115, 0,115,117,110, 95,115,105,122,101, 0, 98, 97, 99,107,115, 99, 97,116,116,101,114,101,100, 95,108,105,103,104,116, 0,
-115,117,110, 95,105,110,116,101,110,115,105,116,121, 0, 97,116,109, 95,116,117,114, 98,105,100,105,116,121, 0, 97,116,109, 95,
-105,110,115, 99, 97,116,116,101,114,105,110,103, 95,102, 97, 99,116,111,114, 0, 97,116,109, 95,101,120,116,105,110, 99,116,105,
-111,110, 95,102, 97, 99,116,111,114, 0, 97,116,109, 95,100,105,115,116, 97,110, 99,101, 95,102, 97, 99,116,111,114, 0,115,107,
-121, 98,108,101,110,100,102, 97, 99, 0,115,107,121, 95,101,120,112,111,115,117,114,101, 0,115,107,121, 95, 99,111,108,111,114,
-115,112, 97, 99,101, 0,112, 97,100, 52, 91, 54, 93, 0, 42,109,116,101,120, 91, 49, 56, 93, 0,112,114, 95,116,101,120,116,117,
-114,101, 0,112, 97,100, 54, 91, 54, 93, 0,100,101,110,115,105,116,121, 0,101,109,105,115,115,105,111,110, 0,115, 99, 97,116,
-116,101,114,105,110,103, 0,114,101,102,108,101, 99,116,105,111,110, 0,101,109,105,115,115,105,111,110, 95, 99,111,108, 91, 51,
- 93, 0,116,114, 97,110,115,109,105,115,115,105,111,110, 95, 99,111,108, 91, 51, 93, 0,114,101,102,108,101, 99,116,105,111,110,
- 95, 99,111,108, 91, 51, 93, 0,100,101,110,115,105,116,121, 95,115, 99, 97,108,101, 0,100,101,112,116,104, 95, 99,117,116,111,
-102,102, 0, 97,115,121,109,109,101,116,114,121, 0,115,116,101,112,115,105,122,101, 95,116,121,112,101, 0,115,104, 97,100,101,
-102,108, 97,103, 0,115,104, 97,100,101, 95,116,121,112,101, 0,112,114,101, 99, 97, 99,104,101, 95,114,101,115,111,108,117,116,
-105,111,110, 0,115,116,101,112,115,105,122,101, 0,109,115, 95,100,105,102,102, 0,109,115, 95,105,110,116,101,110,115,105,116,
-121, 0,109,115, 95,115,112,114,101, 97,100, 0,109, 97,116,101,114,105, 97,108, 95,116,121,112,101, 0,115,112,101, 99,114, 0,
-115,112,101, 99,103, 0,115,112,101, 99, 98, 0,109,105,114,114, 0,109,105,114,103, 0,109,105,114, 98, 0, 97,109, 98,114, 0,
- 97,109, 98, 98, 0, 97,109, 98,103, 0, 97,109, 98, 0,101,109,105,116, 0, 97,110,103, 0,115,112,101, 99,116,114, 97, 0,114,
- 97,121, 95,109,105,114,114,111,114, 0, 97,108,112,104, 97, 0,114,101,102, 0,115,112,101, 99, 0,122,111,102,102,115, 0, 97,
-100,100, 0,116,114, 97,110,115,108,117, 99,101,110, 99,121, 0,118,111,108, 0,102,114,101,115,110,101,108, 95,109,105,114, 0,
-102,114,101,115,110,101,108, 95,109,105,114, 95,105, 0,102,114,101,115,110,101,108, 95,116,114, 97, 0,102,114,101,115,110,101,
-108, 95,116,114, 97, 95,105, 0,102,105,108,116,101,114, 0,116,120, 95,108,105,109,105,116, 0,116,120, 95,102, 97,108,108,111,
-102,102, 0,114, 97,121, 95,100,101,112,116,104, 0,114, 97,121, 95,100,101,112,116,104, 95,116,114, 97, 0,104, 97,114, 0,115,
-101,101,100, 49, 0,115,101,101,100, 50, 0,103,108,111,115,115, 95,109,105,114, 0,103,108,111,115,115, 95,116,114, 97, 0,115,
- 97,109,112, 95,103,108,111,115,115, 95,109,105,114, 0,115, 97,109,112, 95,103,108,111,115,115, 95,116,114, 97, 0, 97,100, 97,
-112,116, 95,116,104,114,101,115,104, 95,109,105,114, 0, 97,100, 97,112,116, 95,116,104,114,101,115,104, 95,116,114, 97, 0, 97,
-110,105,115,111, 95,103,108,111,115,115, 95,109,105,114, 0,100,105,115,116, 95,109,105,114, 0,102, 97,100,101,116,111, 95,109,
-105,114, 0,115,104, 97,100,101, 95,102,108, 97,103, 0,109,111,100,101, 95,108, 0,102,108, 97,114,101, 99, 0,115,116, 97,114,
- 99, 0,108,105,110,101, 99, 0,114,105,110,103, 99, 0,104, 97,115,105,122,101, 0,102,108, 97,114,101,115,105,122,101, 0,115,
-117, 98,115,105,122,101, 0,102,108, 97,114,101, 98,111,111,115,116, 0,115,116,114, 97,110,100, 95,115,116, 97, 0,115,116,114,
- 97,110,100, 95,101,110,100, 0,115,116,114, 97,110,100, 95,101, 97,115,101, 0,115,116,114, 97,110,100, 95,115,117,114,102,110,
-111,114, 0,115,116,114, 97,110,100, 95,109,105,110, 0,115,116,114, 97,110,100, 95,119,105,100,116,104,102, 97,100,101, 0,115,
-116,114, 97,110,100, 95,117,118,110, 97,109,101, 91, 51, 50, 93, 0,115, 98,105, 97,115, 0,108, 98,105, 97,115, 0,115,104, 97,
-100, 95, 97,108,112,104, 97, 0,115,101,112,116,101,120, 0,114,103, 98,115,101,108, 0,112,114, 95,116,121,112,101, 0,112,114,
- 95, 98, 97, 99,107, 0,112,114, 95,108, 97,109,112, 0,109,108, 95,102,108, 97,103, 0,100,105,102,102, 95,115,104, 97,100,101,
-114, 0,115,112,101, 99, 95,115,104, 97,100,101,114, 0,114,111,117,103,104,110,101,115,115, 0,114,101,102,114, 97, 99, 0,112,
- 97,114, 97,109, 91, 52, 93, 0,114,109,115, 0,100, 97,114,107,110,101,115,115, 0, 42,114, 97,109,112, 95, 99,111,108, 0, 42,
-114, 97,109,112, 95,115,112,101, 99, 0,114, 97,109,112,105,110, 95, 99,111,108, 0,114, 97,109,112,105,110, 95,115,112,101, 99,
- 0,114, 97,109,112, 98,108,101,110,100, 95, 99,111,108, 0,114, 97,109,112, 98,108,101,110,100, 95,115,112,101, 99, 0,114, 97,
-109,112, 95,115,104,111,119, 0,112, 97,100, 51, 0,114, 97,109,112,102, 97, 99, 95, 99,111,108, 0,114, 97,109,112,102, 97, 99,
- 95,115,112,101, 99, 0, 42,103,114,111,117,112, 0,102,114,105, 99,116,105,111,110, 0,102,104, 0,114,101,102,108,101, 99,116,
- 0,102,104,100,105,115,116, 0,120,121,102,114,105, 99,116, 0,100,121,110, 97,109,111,100,101, 0,115,115,115, 95,114, 97,100,
-105,117,115, 91, 51, 93, 0,115,115,115, 95, 99,111,108, 91, 51, 93, 0,115,115,115, 95,101,114,114,111,114, 0,115,115,115, 95,
-115, 99, 97,108,101, 0,115,115,115, 95,105,111,114, 0,115,115,115, 95, 99,111,108,102, 97, 99, 0,115,115,115, 95,116,101,120,
-102, 97, 99, 0,115,115,115, 95,102,114,111,110,116, 0,115,115,115, 95, 98, 97, 99,107, 0,115,115,115, 95,102,108, 97,103, 0,
-115,115,115, 95,112,114,101,115,101,116, 0,109, 97,112,116,111, 95,116,101,120,116,117,114,101,100, 0,112, 97,100, 52, 0,103,
-112,117,109, 97,116,101,114,105, 97,108, 0,110, 97,109,101, 91, 50, 53, 54, 93, 0, 42, 98, 98, 0,105, 49, 0,106, 49, 0,107,
- 49, 0,105, 50, 0,106, 50, 0,107, 50, 0,115,101,108, 99,111,108, 49, 0,115,101,108, 99,111,108, 50, 0,113,117, 97,116, 91,
- 52, 93, 0,101,120,112,120, 0,101,120,112,121, 0,101,120,112,122, 0,114, 97,100, 0,114, 97,100, 50, 0,115, 0, 42,109, 97,
-116, 0, 42,105,109, 97,116, 0,101,108,101,109,115, 0,100,105,115,112, 0, 42,101,100,105,116,101,108,101,109,115, 0, 42, 42,
-109, 97,116, 0,102,108, 97,103, 50, 0,116,111,116, 99,111,108, 0,119,105,114,101,115,105,122,101, 0,114,101,110,100,101,114,
-115,105,122,101, 0,116,104,114,101,115,104, 0, 42,108, 97,115,116,101,108,101,109, 0,118,101, 99, 91, 51, 93, 91, 51, 93, 0,
- 97,108,102, 97, 0,119,101,105,103,104,116, 0,104, 49, 0,104, 50, 0,102, 49, 0,102, 50, 0,102, 51, 0,104,105,100,101, 0,
-118,101, 99, 91, 52, 93, 0,109, 97,116, 95,110,114, 0,112,110,116,115,117, 0,112,110,116,115,118, 0,114,101,115,111,108,117,
- 0,114,101,115,111,108,118, 0,111,114,100,101,114,117, 0,111,114,100,101,114,118, 0,102,108, 97,103,117, 0,102,108, 97,103,
-118, 0, 42,107,110,111,116,115,117, 0, 42,107,110,111,116,115,118, 0,116,105,108,116, 95,105,110,116,101,114,112, 0,114, 97,
-100,105,117,115, 95,105,110,116,101,114,112, 0, 99,104, 97,114,105,100,120, 0,107,101,114,110, 0,104, 0,110,117,114, 98, 0,
- 42,101,100,105,116,110,117,114, 98, 0, 42, 98,101,118,111, 98,106, 0, 42,116, 97,112,101,114,111, 98,106, 0, 42,116,101,120,
-116,111,110, 99,117,114,118,101, 0, 42,112, 97,116,104, 0, 42,107,101,121, 0, 98,101,118, 0,100,114, 97,119,102,108, 97,103,
- 0,116,119,105,115,116, 95,109,111,100,101, 0,112, 97,100, 91, 50, 93, 0,116,119,105,115,116, 95,115,109,111,111,116,104, 0,
-112, 97,116,104,108,101,110, 0, 98,101,118,114,101,115,111,108, 0,119,105,100,116,104, 0,101,120,116, 49, 0,101,120,116, 50,
- 0,114,101,115,111,108,117, 95,114,101,110, 0,114,101,115,111,108,118, 95,114,101,110, 0, 97, 99,116,110,117, 0, 42,108, 97,
-115,116,115,101,108, 0,115,112, 97, 99,101,109,111,100,101, 0,115,112, 97, 99,105,110,103, 0,108,105,110,101,100,105,115,116,
- 0,115,104,101, 97,114, 0,102,115,105,122,101, 0,119,111,114,100,115,112, 97, 99,101, 0,117,108,112,111,115, 0,117,108,104,
-101,105,103,104,116, 0,120,111,102, 0,121,111,102, 0,108,105,110,101,119,105,100,116,104, 0, 42,115,116,114, 0, 42,115,101,
-108, 98,111,120,101,115, 0, 42,101,100,105,116,102,111,110,116, 0,102, 97,109,105,108,121, 91, 50, 52, 93, 0, 42,118,102,111,
-110,116, 0, 42,118,102,111,110,116, 98, 0, 42,118,102,111,110,116,105, 0, 42,118,102,111,110,116, 98,105, 0,115,101,112, 99,
-104, 97,114, 0, 99,116,105,109,101, 0,116,111,116, 98,111,120, 0, 97, 99,116, 98,111,120, 0, 42,116, 98, 0,115,101,108,115,
-116, 97,114,116, 0,115,101,108,101,110,100, 0, 42,115,116,114,105,110,102,111, 0, 99,117,114,105,110,102,111, 0,101,102,102,
-101, 99,116, 0, 42,109,102, 97, 99,101, 0, 42,109,116,102, 97, 99,101, 0, 42,116,102, 97, 99,101, 0, 42,109,118,101,114,116,
- 0, 42,109,101,100,103,101, 0, 42,100,118,101,114,116, 0, 42,109, 99,111,108, 0, 42,109,115,116,105, 99,107,121, 0, 42,116,
-101,120, 99,111,109,101,115,104, 0, 42,109,115,101,108,101, 99,116, 0, 42,101,100,105,116, 95,109,101,115,104, 0,118,100, 97,
-116, 97, 0,101,100, 97,116, 97, 0,102,100, 97,116, 97, 0,116,111,116,101,100,103,101, 0,116,111,116,102, 97, 99,101, 0,116,
-111,116,115,101,108,101, 99,116, 0, 97, 99,116, 95,102, 97, 99,101, 0,101,100,105,116,102,108, 97,103, 0, 99,117, 98,101,109,
- 97,112,115,105,122,101, 0,115,109,111,111,116,104,114,101,115,104, 0,115,117, 98,100,105,118, 0,115,117, 98,100,105,118,114,
- 0,115,117, 98,115,117,114,102,116,121,112,101, 0, 42,109,114, 0, 42,112,118, 0, 42,116,112, 97,103,101, 0,117,118, 91, 52,
- 93, 91, 50, 93, 0, 99,111,108, 91, 52, 93, 0,116,114, 97,110,115,112, 0,116,105,108,101, 0,117,110,119,114, 97,112, 0,118,
- 49, 0,118, 50, 0,118, 51, 0,118, 52, 0,101,100, 99,111,100,101, 0, 99,114,101, 97,115,101, 0, 98,119,101,105,103,104,116,
- 0,100,101,102, 95,110,114, 0, 42,100,119, 0,116,111,116,119,101,105,103,104,116, 0, 99,111, 91, 51, 93, 0,110,111, 91, 51,
- 93, 0,117,118, 91, 50, 93, 0, 99,111, 91, 50, 93, 0,105,110,100,101,120, 0,102, 0,105, 0,115, 91, 50, 53, 54, 93, 0,116,
-111,116,100,105,115,112, 0, 40, 42,100,105,115,112,115, 41, 40, 41, 0,118, 91, 52, 93, 0,109,105,100, 0,118, 91, 50, 93, 0,
- 42,102, 97, 99,101,115, 0, 42, 99,111,108,102, 97, 99,101,115, 0, 42,101,100,103,101,115, 0, 42,118,101,114,116,115, 0,108,
-101,118,101,108,115, 0,108,101,118,101,108, 95, 99,111,117,110,116, 0, 99,117,114,114,101,110,116, 0,110,101,119,108,118,108,
- 0,101,100,103,101,108,118,108, 0,112,105,110,108,118,108, 0,114,101,110,100,101,114,108,118,108, 0,117,115,101, 95, 99,111,
-108, 0, 42,101,100,103,101, 95,102,108, 97,103,115, 0, 42,101,100,103,101, 95, 99,114,101, 97,115,101,115, 0, 42,118,101,114,
-116, 95,109, 97,112, 0, 42,101,100,103,101, 95,109, 97,112, 0, 42,111,108,100, 95,102, 97, 99,101,115, 0, 42,111,108,100, 95,
-101,100,103,101,115, 0,115,116, 97, 99,107,105,110,100,101,120, 0, 42,101,114,114,111,114, 0,109,111,100,105,102,105,101,114,
- 0,115,117, 98,100,105,118, 84,121,112,101, 0,114,101,110,100,101,114, 76,101,118,101,108,115, 0, 42,101,109, 67, 97, 99,104,
-101, 0, 42,109, 67, 97, 99,104,101, 0,100,101,102, 97,120,105,115, 0,112, 97,100, 91, 54, 93, 0,108,101,110,103,116,104, 0,
-114, 97,110,100,111,109,105,122,101, 0,115,101,101,100, 0, 42,111, 98, 95, 97,114,109, 0, 42,115,116, 97,114,116, 95, 99, 97,
-112, 0, 42,101,110,100, 95, 99, 97,112, 0, 42, 99,117,114,118,101, 95,111, 98, 0, 42,111,102,102,115,101,116, 95,111, 98, 0,
-111,102,102,115,101,116, 91, 51, 93, 0,115, 99, 97,108,101, 91, 51, 93, 0,109,101,114,103,101, 95,100,105,115,116, 0,102,105,
-116, 95,116,121,112,101, 0,111,102,102,115,101,116, 95,116,121,112,101, 0, 99,111,117,110,116, 0, 97,120,105,115, 0,116,111,
-108,101,114, 97,110, 99,101, 0, 42,109,105,114,114,111,114, 95,111, 98, 0,115,112,108,105,116, 95, 97,110,103,108,101, 0,118,
- 97,108,117,101, 0,114,101,115, 0,118, 97,108, 95,102,108, 97,103,115, 0,108,105,109, 95,102,108, 97,103,115, 0,101, 95,102,
-108, 97,103,115, 0, 98,101,118,101,108, 95, 97,110,103,108,101, 0,100,101,102,103,114,112, 95,110, 97,109,101, 91, 51, 50, 93,
- 0, 42,100,111,109, 97,105,110, 0, 42,102,108,111,119, 0, 42, 99,111,108,108, 0,116,105,109,101, 0, 42,116,101,120,116,117,
-114,101, 0,115,116,114,101,110,103,116,104, 0,100,105,114,101, 99,116,105,111,110, 0,109,105,100,108,101,118,101,108, 0,116,
-101,120,109, 97,112,112,105,110,103, 0, 42,109, 97,112, 95,111, 98,106,101, 99,116, 0,117,118,108, 97,121,101,114, 95,110, 97,
-109,101, 91, 51, 50, 93, 0,117,118,108, 97,121,101,114, 95,116,109,112, 0, 42,112,114,111,106,101, 99,116,111,114,115, 91, 49,
- 48, 93, 0, 42,105,109, 97,103,101, 0,110,117,109, 95,112,114,111,106,101, 99,116,111,114,115, 0, 97,115,112,101, 99,116,120,
- 0, 97,115,112,101, 99,116,121, 0,115, 99, 97,108,101,120, 0,115, 99, 97,108,101,121, 0,112,101,114, 99,101,110,116, 0,102,
- 97, 99,101, 67,111,117,110,116, 0,102, 97, 99, 0,114,101,112,101, 97,116, 0, 42,111, 98,106,101, 99,116, 99,101,110,116,101,
-114, 0,115,116, 97,114,116,120, 0,115,116, 97,114,116,121, 0,104,101,105,103,104,116, 0,110, 97,114,114,111,119, 0,115,112,
-101,101,100, 0,100, 97,109,112, 0,102, 97,108,108,111,102,102, 0,116,105,109,101,111,102,102,115, 0,108,105,102,101,116,105,
-109,101, 0,100,101,102,111,114,109,102,108, 97,103, 0,109,117,108,116,105, 0, 42,112,114,101,118, 67,111,115, 0,115,117, 98,
-116, 97,114,103,101,116, 91, 51, 50, 93, 0,112, 97,114,101,110,116,105,110,118, 91, 52, 93, 91, 52, 93, 0, 99,101,110,116, 91,
- 51, 93, 0, 42,105,110,100,101,120, 97,114, 0,116,111,116,105,110,100,101,120, 0,102,111,114, 99,101, 0, 42, 99,108,111,116,
-104, 79, 98,106,101, 99,116, 0, 42,115,105,109, 95,112, 97,114,109,115, 0, 42, 99,111,108,108, 95,112, 97,114,109,115, 0, 42,
-112,111,105,110,116, 95, 99, 97, 99,104,101, 0,112,116, 99, 97, 99,104,101,115, 0, 42,120, 0, 42,120,110,101,119, 0, 42,120,
-111,108,100, 0, 42, 99,117,114,114,101,110,116, 95,120,110,101,119, 0, 42, 99,117,114,114,101,110,116, 95,120, 0, 42, 99,117,
-114,114,101,110,116, 95,118, 0, 42,109,102, 97, 99,101,115, 0,110,117,109,118,101,114,116,115, 0,110,117,109,102, 97, 99,101,
-115, 0, 42, 98,118,104,116,114,101,101, 0, 42,118, 0, 42,100,109, 0, 99,102,114, 97, 0,111,112,101,114, 97,116,105,111,110,
- 0,118,101,114,116,101,120, 0,116,111,116,105,110,102,108,117,101,110, 99,101, 0,103,114,105,100,115,105,122,101, 0, 42, 98,
-105,110,100,105,110,102,108,117,101,110, 99,101,115, 0, 42, 98,105,110,100,111,102,102,115,101,116,115, 0, 42, 98,105,110,100,
- 99, 97,103,101, 99,111,115, 0,116,111,116, 99, 97,103,101,118,101,114,116, 0, 42,100,121,110,103,114,105,100, 0, 42,100,121,
-110,105,110,102,108,117,101,110, 99,101,115, 0, 42,100,121,110,118,101,114,116,115, 0, 42,112, 97,100, 50, 0,100,121,110,103,
-114,105,100,115,105,122,101, 0,100,121,110, 99,101,108,108,109,105,110, 91, 51, 93, 0,100,121,110, 99,101,108,108,119,105,100,
-116,104, 0, 98,105,110,100,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 42, 98,105,110,100,119,101,105,103,104,116,115, 0, 42, 98,
-105,110,100, 99,111,115, 0, 40, 42, 98,105,110,100,102,117,110, 99, 41, 40, 41, 0, 42,112,115,121,115, 0,116,111,116,100,109,
-118,101,114,116, 0,116,111,116,100,109,101,100,103,101, 0,116,111,116,100,109,102, 97, 99,101, 0,112,111,115,105,116,105,111,
-110, 0,114, 97,110,100,111,109, 95,112,111,115,105,116,105,111,110, 0, 42,102, 97, 99,101,112, 97, 0,118,103,114,111,117,112,
- 0,112,114,111,116,101, 99,116, 0,108,118,108, 0,115, 99,117,108,112,116,108,118,108, 0,116,111,116,108,118,108, 0,115,105,
-109,112,108,101, 0, 42,102,115,115, 0, 42,116, 97,114,103,101,116, 0, 42, 97,117,120, 84, 97,114,103,101,116, 0,118,103,114,
-111,117,112, 95,110, 97,109,101, 91, 51, 50, 93, 0,107,101,101,112, 68,105,115,116, 0,115,104,114,105,110,107, 84,121,112,101,
- 0,115,104,114,105,110,107, 79,112,116,115, 0,112,114,111,106, 65,120,105,115, 0,115,117, 98,115,117,114,102, 76,101,118,101,
-108,115, 0, 42,111,114,105,103,105,110, 0,102, 97, 99,116,111,114, 0,108,105,109,105,116, 91, 50, 93, 0,111,114,105,103,105,
-110, 79,112,116,115, 0,111,102,102,115,101,116, 95,102, 97, 99, 0, 99,114,101, 97,115,101, 95,105,110,110,101,114, 0, 99,114,
-101, 97,115,101, 95,111,117,116,101,114, 0, 99,114,101, 97,115,101, 95,114,105,109, 0, 42,111, 98, 95, 97,120,105,115, 0,115,
-116,101,112,115, 0,114,101,110,100,101,114, 95,115,116,101,112,115, 0,105,116,101,114, 0,115, 99,114,101,119, 95,111,102,115,
- 0, 97,110,103,108,101, 0,112,110,116,115,119, 0,111,112,110,116,115,117, 0,111,112,110,116,115,118, 0,111,112,110,116,115,
-119, 0,116,121,112,101,117, 0,116,121,112,101,118, 0,116,121,112,101,119, 0,102,117, 0,102,118, 0,102,119, 0,100,117, 0,
-100,118, 0,100,119, 0, 42,100,101,102, 0, 42,108, 97,116,116,105, 99,101,100, 97,116, 97, 0,108, 97,116,109, 97,116, 91, 52,
- 93, 91, 52, 93, 0, 42,101,100,105,116,108, 97,116,116, 0,118,101, 99, 91, 56, 93, 91, 51, 93, 0, 42,115, 99,117,108,112,116,
- 0,112, 97,114,116,121,112,101, 0,112, 97,114, 49, 0,112, 97,114, 50, 0,112, 97,114, 51, 0,112, 97,114,115,117, 98,115,116,
-114, 91, 51, 50, 93, 0, 42,116,114, 97, 99,107, 0, 42,112,114,111,120,121, 0, 42,112,114,111,120,121, 95,103,114,111,117,112,
- 0, 42,112,114,111,120,121, 95,102,114,111,109, 0, 42, 97, 99,116,105,111,110, 0, 42,112,111,115,101,108,105, 98, 0, 42,112,
-111,115,101, 0, 42,103,112,100, 0, 97,118,115, 0, 42,109,112, 97,116,104, 0, 99,111,110,115,116,114, 97,105,110,116, 67,104,
- 97,110,110,101,108,115, 0,100,101,102, 98, 97,115,101, 0,109,111,100,105,102,105,101,114,115, 0,114,101,115,116,111,114,101,
- 95,109,111,100,101, 0, 42,109, 97,116, 98,105,116,115, 0, 97, 99,116, 99,111,108, 0,100,108,111, 99, 91, 51, 93, 0,111,114,
-105,103, 91, 51, 93, 0,100,115,105,122,101, 91, 51, 93, 0,100,114,111,116, 91, 51, 93, 0,100,113,117, 97,116, 91, 52, 93, 0,
-114,111,116, 65,120,105,115, 91, 51, 93, 0,100,114,111,116, 65,120,105,115, 91, 51, 93, 0,114,111,116, 65,110,103,108,101, 0,
-100,114,111,116, 65,110,103,108,101, 0,111, 98,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 99,111,110,115,116,105,110,118, 91, 52,
- 93, 91, 52, 93, 0,108, 97,121, 0, 99,111,108, 98,105,116,115, 0,116,114, 97,110,115,102,108, 97,103, 0,112,114,111,116,101,
- 99,116,102,108, 97,103, 0,116,114, 97, 99,107,102,108, 97,103, 0,117,112,102,108, 97,103, 0,110,108, 97,102,108, 97,103, 0,
-105,112,111,102,108, 97,103, 0,105,112,111,119,105,110, 0,115, 99, 97,102,108, 97,103, 0,115, 99, 97,118,105,115,102,108, 97,
-103, 0, 98,111,117,110,100,116,121,112,101, 0,100,117,112,111,110, 0,100,117,112,111,102,102, 0,100,117,112,115,116, 97, 0,
-100,117,112,101,110,100, 0,115,102, 0,109, 97,115,115, 0,100, 97,109,112,105,110,103, 0,105,110,101,114,116,105, 97, 0,102,
-111,114,109,102, 97, 99,116,111,114, 0,114,100, 97,109,112,105,110,103, 0,109, 97,114,103,105,110, 0,109, 97,120, 95,118,101,
-108, 0,109,105,110, 95,118,101,108, 0,109, 95, 99,111,110,116, 97, 99,116, 80,114,111, 99,101,115,115,105,110,103, 84,104,114,
-101,115,104,111,108,100, 0,114,111,116,109,111,100,101, 0,100,116, 0,100,116,120, 0,101,109,112,116,121, 95,100,114, 97,119,
-116,121,112,101, 0,112, 97,100, 49, 91, 51, 93, 0,101,109,112,116,121, 95,100,114, 97,119,115,105,122,101, 0,100,117,112,102,
- 97, 99,101,115, 99, 97, 0,112,114,111,112, 0,115,101,110,115,111,114,115, 0, 99,111,110,116,114,111,108,108,101,114,115, 0,
- 97, 99,116,117, 97,116,111,114,115, 0, 98, 98,115,105,122,101, 91, 51, 93, 0, 97, 99,116,100,101,102, 0,103, 97,109,101,102,
-108, 97,103, 0,103, 97,109,101,102,108, 97,103, 50, 0, 42, 98,115,111,102,116, 0,115,111,102,116,102,108, 97,103, 0, 97,110,
-105,115,111,116,114,111,112,105, 99, 70,114,105, 99,116,105,111,110, 91, 51, 93, 0, 99,111,110,115,116,114, 97,105,110,116,115,
- 0,110,108, 97,115,116,114,105,112,115, 0,104,111,111,107,115, 0,112, 97,114,116,105, 99,108,101,115,121,115,116,101,109, 0,
- 42,115,111,102,116, 0, 42,100,117,112, 95,103,114,111,117,112, 0,102,108,117,105,100,115,105,109, 70,108, 97,103, 0,114,101,
-115,116,114,105, 99,116,102,108, 97,103, 0,115,104, 97,112,101,110,114, 0,115,104, 97,112,101,102,108, 97,103, 0,114,101, 99,
- 97,108, 99,111, 0, 98,111,100,121, 95,116,121,112,101, 0, 42,102,108,117,105,100,115,105,109, 83,101,116,116,105,110,103,115,
- 0, 42,100,101,114,105,118,101,100, 68,101,102,111,114,109, 0, 42,100,101,114,105,118,101,100, 70,105,110, 97,108, 0,108, 97,
-115,116, 68, 97,116, 97, 77, 97,115,107, 0,115,116, 97,116,101, 0,105,110,105,116, 95,115,116, 97,116,101, 0,103,112,117,108,
- 97,109,112, 0,112, 99, 95,105,100,115, 0, 42,100,117,112,108,105,108,105,115,116, 0, 99,117,114,105,110,100,101,120, 0, 97,
- 99,116,105,118,101, 0,111,114,105,103,108, 97,121, 0,110,111, 95,100,114, 97,119, 0, 97,110,105,109, 97,116,101,100, 0,111,
-109, 97,116, 91, 52, 93, 91, 52, 93, 0,111,114, 99,111, 91, 51, 93, 0,100,101,102,108,101, 99,116, 0,102,111,114, 99,101,102,
-105,101,108,100, 0,115,104, 97,112,101, 0,116,101,120, 95,109,111,100,101, 0,107,105,110,107, 0,107,105,110,107, 95, 97,120,
-105,115, 0,122,100,105,114, 0,102, 95,115,116,114,101,110,103,116,104, 0,102, 95,100, 97,109,112, 0,102, 95,102,108,111,119,
- 0,102, 95,115,105,122,101, 0,102, 95,112,111,119,101,114, 0,109, 97,120,100,105,115,116, 0,109,105,110,100,105,115,116, 0,
-102, 95,112,111,119,101,114, 95,114, 0,109, 97,120,114, 97,100, 0,109,105,110,114, 97,100, 0,112,100,101,102, 95,100, 97,109,
-112, 0,112,100,101,102, 95,114,100, 97,109,112, 0,112,100,101,102, 95,112,101,114,109, 0,112,100,101,102, 95,102,114,105, 99,
-116, 0,112,100,101,102, 95,114,102,114,105, 99,116, 0,112,100,101,102, 95,115,116,105, 99,107,110,101,115,115, 0, 97, 98,115,
-111,114,112,116,105,111,110, 0,112,100,101,102, 95,115, 98,100, 97,109,112, 0,112,100,101,102, 95,115, 98,105,102,116, 0,112,
-100,101,102, 95,115, 98,111,102,116, 0, 99,108,117,109,112, 95,102, 97, 99, 0, 99,108,117,109,112, 95,112,111,119, 0,107,105,
-110,107, 95,102,114,101,113, 0,107,105,110,107, 95,115,104, 97,112,101, 0,107,105,110,107, 95, 97,109,112, 0,102,114,101,101,
- 95,101,110,100, 0,116,101,120, 95,110, 97, 98,108, 97, 0, 42,114,110,103, 0,102, 95,110,111,105,115,101, 0,119,101,105,103,
-104,116, 91, 49, 51, 93, 0,103,108,111, 98, 97,108, 95,103,114, 97,118,105,116,121, 0,114,116, 91, 51, 93, 0,102,114, 97,109,
-101, 0,116,111,116,112,111,105,110,116, 0,100, 97,116, 97, 95,116,121,112,101,115, 0, 42,105,110,100,101,120, 95, 97,114,114,
- 97,121, 0, 42,100, 97,116, 97, 91, 56, 93, 0, 42, 99,117,114, 91, 56, 93, 0,115,116,101,112, 0,115,105,109,102,114, 97,109,
-101, 0,115,116, 97,114,116,102,114, 97,109,101, 0,101,110,100,102,114, 97,109,101, 0,101,100,105,116,102,114, 97,109,101, 0,
-108, 97,115,116, 95,101,120, 97, 99,116, 0,110, 97,109,101, 91, 54, 52, 93, 0,112,114,101,118, 95,110, 97,109,101, 91, 54, 52,
- 93, 0,105,110,102,111, 91, 54, 52, 93, 0,112, 97,116,104, 91, 50, 52, 48, 93, 0,109,101,109, 95, 99, 97, 99,104,101, 0, 42,
-101,100,105,116, 0, 40, 42,102,114,101,101, 95,101,100,105,116, 41, 40, 41, 0,108,105,110, 83,116,105,102,102, 0, 97,110,103,
- 83,116,105,102,102, 0,118,111,108,117,109,101, 0,118,105,116,101,114, 97,116,105,111,110,115, 0,112,105,116,101,114, 97,116,
-105,111,110,115, 0,100,105,116,101,114, 97,116,105,111,110,115, 0, 99,105,116,101,114, 97,116,105,111,110,115, 0,107, 83, 82,
- 72, 82, 95, 67, 76, 0,107, 83, 75, 72, 82, 95, 67, 76, 0,107, 83, 83, 72, 82, 95, 67, 76, 0,107, 83, 82, 95, 83, 80, 76, 84,
- 95, 67, 76, 0,107, 83, 75, 95, 83, 80, 76, 84, 95, 67, 76, 0,107, 83, 83, 95, 83, 80, 76, 84, 95, 67, 76, 0,107, 86, 67, 70,
- 0,107, 68, 80, 0,107, 68, 71, 0,107, 76, 70, 0,107, 80, 82, 0,107, 86, 67, 0,107, 68, 70, 0,107, 77, 84, 0,107, 67, 72,
- 82, 0,107, 75, 72, 82, 0,107, 83, 72, 82, 0,107, 65, 72, 82, 0, 99,111,108,108,105,115,105,111,110,102,108, 97,103,115, 0,
-110,117,109, 99,108,117,115,116,101,114,105,116,101,114, 97,116,105,111,110,115, 0,119,101,108,100,105,110,103, 0,116,111,116,
-115,112,114,105,110,103, 0, 42, 98,112,111,105,110,116, 0, 42, 98,115,112,114,105,110,103, 0,109,115,103, 95,108,111, 99,107,
- 0,109,115,103, 95,118, 97,108,117,101, 0,110,111,100,101,109, 97,115,115, 0,110, 97,109,101,100, 86, 71, 95, 77, 97,115,115,
- 91, 51, 50, 93, 0,103,114, 97,118, 0,109,101,100,105, 97,102,114,105, 99,116, 0,114,107,108,105,109,105,116, 0,112,104,121,
-115,105, 99,115, 95,115,112,101,101,100, 0,103,111, 97,108,115,112,114,105,110,103, 0,103,111, 97,108,102,114,105, 99,116, 0,
-109,105,110,103,111, 97,108, 0,109, 97,120,103,111, 97,108, 0,100,101,102,103,111, 97,108, 0,118,101,114,116,103,114,111,117,
-112, 0,110, 97,109,101,100, 86, 71, 95, 83,111,102,116,103,111, 97,108, 91, 51, 50, 93, 0,102,117,122,122,121,110,101,115,115,
- 0,105,110,115,112,114,105,110,103, 0,105,110,102,114,105, 99,116, 0,110, 97,109,101,100, 86, 71, 95, 83,112,114,105,110,103,
- 95, 75, 91, 51, 50, 93, 0,101,102,114, 97, 0,105,110,116,101,114,118, 97,108, 0,108,111, 99, 97,108, 0,115,111,108,118,101,
-114,102,108, 97,103,115, 0, 42, 42,107,101,121,115, 0,116,111,116,112,111,105,110,116,107,101,121, 0,115,101, 99,111,110,100,
-115,112,114,105,110,103, 0, 99,111,108, 98, 97,108,108, 0, 98, 97,108,108,100, 97,109,112, 0, 98, 97,108,108,115,116,105,102,
-102, 0,115, 98, 99, 95,109,111,100,101, 0, 97,101,114,111,101,100,103,101, 0,109,105,110,108,111,111,112,115, 0,109, 97,120,
-108,111,111,112,115, 0, 99,104,111,107,101, 0,115,111,108,118,101,114, 95, 73, 68, 0,112,108, 97,115,116,105, 99, 0,115,112,
-114,105,110,103,112,114,101,108,111, 97,100, 0, 42,115, 99,114, 97,116, 99,104, 0,115,104,101, 97,114,115,116,105,102,102, 0,
-105,110,112,117,115,104, 0, 42,112,111,105,110,116, 99, 97, 99,104,101, 0, 42,101,102,102,101, 99,116,111,114, 95,119,101,105,
-103,104,116,115, 0,108, 99,111,109, 91, 51, 93, 0,108,114,111,116, 91, 51, 93, 91, 51, 93, 0,108,115, 99, 97,108,101, 91, 51,
- 93, 91, 51, 93, 0,112, 97,100, 52, 91, 52, 93, 0, 42,102,109,100, 0,115,104,111,119, 95, 97,100,118, 97,110, 99,101,100,111,
-112,116,105,111,110,115, 0,114,101,115,111,108,117,116,105,111,110,120,121,122, 0,112,114,101,118,105,101,119,114,101,115,120,
-121,122, 0,114,101, 97,108,115,105,122,101, 0,103,117,105, 68,105,115,112,108, 97,121, 77,111,100,101, 0,114,101,110,100,101,
-114, 68,105,115,112,108, 97,121, 77,111,100,101, 0,118,105,115, 99,111,115,105,116,121, 86, 97,108,117,101, 0,118,105,115, 99,
-111,115,105,116,121, 77,111,100,101, 0,118,105,115, 99,111,115,105,116,121, 69,120,112,111,110,101,110,116, 0,103,114, 97,118,
-120, 0,103,114, 97,118,121, 0,103,114, 97,118,122, 0, 97,110,105,109, 83,116, 97,114,116, 0, 97,110,105,109, 69,110,100, 0,
- 98, 97,107,101, 83,116, 97,114,116, 0, 98, 97,107,101, 69,110,100, 0,103,115,116, 97,114, 0,109, 97,120, 82,101,102,105,110,
-101, 0,105,110,105, 86,101,108,120, 0,105,110,105, 86,101,108,121, 0,105,110,105, 86,101,108,122, 0, 42,111,114,103, 77,101,
-115,104, 0, 42,109,101,115,104, 83,117,114,102, 97, 99,101, 0, 42,109,101,115,104, 66, 66, 0,115,117,114,102,100, 97,116, 97,
- 80, 97,116,104, 91, 50, 52, 48, 93, 0, 98, 98, 83,116, 97,114,116, 91, 51, 93, 0, 98, 98, 83,105,122,101, 91, 51, 93, 0,116,
-121,112,101, 70,108, 97,103,115, 0,100,111,109, 97,105,110, 78,111,118,101, 99,103,101,110, 0,118,111,108,117,109,101, 73,110,
-105,116, 84,121,112,101, 0,112, 97,114,116, 83,108,105,112, 86, 97,108,117,101, 0,103,101,110,101,114, 97,116,101, 84,114, 97,
- 99,101,114,115, 0,103,101,110,101,114, 97,116,101, 80, 97,114,116,105, 99,108,101,115, 0,115,117,114,102, 97, 99,101, 83,109,
-111,111,116,104,105,110,103, 0,115,117,114,102, 97, 99,101, 83,117, 98,100,105,118,115, 0,112, 97,114,116,105, 99,108,101, 73,
-110,102, 83,105,122,101, 0,112, 97,114,116,105, 99,108,101, 73,110,102, 65,108,112,104, 97, 0,102, 97,114, 70,105,101,108,100,
- 83,105,122,101, 0, 42,109,101,115,104, 83,117,114,102, 78,111,114,109, 97,108,115, 0, 99,112,115, 84,105,109,101, 83,116, 97,
-114,116, 0, 99,112,115, 84,105,109,101, 69,110,100, 0, 99,112,115, 81,117, 97,108,105,116,121, 0, 97,116,116,114, 97, 99,116,
-102,111,114, 99,101, 83,116,114,101,110,103,116,104, 0, 97,116,116,114, 97, 99,116,102,111,114, 99,101, 82, 97,100,105,117,115,
- 0,118,101,108,111, 99,105,116,121,102,111,114, 99,101, 83,116,114,101,110,103,116,104, 0,118,101,108,111, 99,105,116,121,102,
-111,114, 99,101, 82, 97,100,105,117,115, 0,108, 97,115,116,103,111,111,100,102,114, 97,109,101, 0,109,105,115,116,121,112,101,
- 0,104,111,114,114, 0,104,111,114,103, 0,104,111,114, 98, 0,104,111,114,107, 0,122,101,110,114, 0,122,101,110,103, 0,122,
-101,110, 98, 0,122,101,110,107, 0, 97,109, 98,107, 0,102, 97,115,116, 99,111,108, 0,101,120,112,111,115,117,114,101, 0,101,
-120,112, 0,114, 97,110,103,101, 0,108,105,110,102, 97, 99, 0,108,111,103,102, 97, 99, 0,103,114, 97,118,105,116,121, 0, 97,
- 99,116,105,118,105,116,121, 66,111,120, 82, 97,100,105,117,115, 0,115,107,121,116,121,112,101, 0,111, 99, 99,108,117,115,105,
-111,110, 82,101,115, 0,112,104,121,115,105, 99,115, 69,110,103,105,110,101, 0,116,105, 99,114, 97,116,101, 0,109, 97,120,108,
-111,103,105, 99,115,116,101,112, 0,112,104,121,115,117, 98,115,116,101,112, 0,109, 97,120,112,104,121,115,116,101,112, 0,109,
-105,115,105, 0,109,105,115,116,115,116, 97, 0,109,105,115,116,100,105,115,116, 0,109,105,115,116,104,105, 0,115,116, 97,114,
-114, 0,115,116, 97,114,103, 0,115,116, 97,114, 98, 0,115,116, 97,114,107, 0,115,116, 97,114,115,105,122,101, 0,115,116, 97,
-114,109,105,110,100,105,115,116, 0,115,116, 97,114,100,105,115,116, 0,115,116, 97,114, 99,111,108,110,111,105,115,101, 0,100,
-111,102,115,116, 97, 0,100,111,102,101,110,100, 0,100,111,102,109,105,110, 0,100,111,102,109, 97,120, 0, 97,111,100,105,115,
-116, 0, 97,111,100,105,115,116,102, 97, 99, 0, 97,111,101,110,101,114,103,121, 0, 97,111, 98,105, 97,115, 0, 97,111,109,111,
-100,101, 0, 97,111,115, 97,109,112, 0, 97,111,109,105,120, 0, 97,111, 99,111,108,111,114, 0, 97,111, 95, 97,100, 97,112,116,
- 95,116,104,114,101,115,104, 0, 97,111, 95, 97,100, 97,112,116, 95,115,112,101,101,100, 95,102, 97, 99, 0, 97,111, 95, 97,112,
-112,114,111,120, 95,101,114,114,111,114, 0, 97,111, 95, 97,112,112,114,111,120, 95, 99,111,114,114,101, 99,116,105,111,110, 0,
- 97,111, 95,105,110,100,105,114,101, 99,116, 95,101,110,101,114,103,121, 0, 97,111, 95,101,110,118, 95,101,110,101,114,103,121,
- 0, 97,111, 95,112, 97,100, 50, 0, 97,111, 95,105,110,100,105,114,101, 99,116, 95, 98,111,117,110, 99,101,115, 0, 97,111, 95,
-112, 97,100, 0, 97,111, 95,115, 97,109,112, 95,109,101,116,104,111,100, 0, 97,111, 95,103, 97,116,104,101,114, 95,109,101,116,
-104,111,100, 0, 97,111, 95, 97,112,112,114,111,120, 95,112, 97,115,115,101,115, 0, 42, 97,111,115,112,104,101,114,101, 0, 42,
- 97,111,116, 97, 98,108,101,115, 0,112, 97,100, 91, 51, 93, 0,115,101,108, 99,111,108, 0,115,120, 0,115,121, 0, 42,108,112,
- 70,111,114,109, 97,116, 0, 42,108,112, 80, 97,114,109,115, 0, 99, 98, 70,111,114,109, 97,116, 0, 99, 98, 80, 97,114,109,115,
- 0,102, 99, 99, 84,121,112,101, 0,102, 99, 99, 72, 97,110,100,108,101,114, 0,100,119, 75,101,121, 70,114, 97,109,101, 69,118,
-101,114,121, 0,100,119, 81,117, 97,108,105,116,121, 0,100,119, 66,121,116,101,115, 80,101,114, 83,101, 99,111,110,100, 0,100,
-119, 70,108, 97,103,115, 0,100,119, 73,110,116,101,114,108,101, 97,118,101, 69,118,101,114,121, 0, 97,118,105, 99,111,100,101,
- 99,110, 97,109,101, 91, 49, 50, 56, 93, 0, 42, 99,100, 80, 97,114,109,115, 0, 42,112, 97,100, 0, 99,100, 83,105,122,101, 0,
-113,116, 99,111,100,101, 99,110, 97,109,101, 91, 49, 50, 56, 93, 0, 99,111,100,101, 99, 84,121,112,101, 0, 99,111,100,101, 99,
- 83,112, 97,116,105, 97,108, 81,117, 97,108,105,116,121, 0, 99,111,100,101, 99, 0, 99,111,100,101, 99, 70,108, 97,103,115, 0,
- 99,111,108,111,114, 68,101,112,116,104, 0, 99,111,100,101, 99, 84,101,109,112,111,114, 97,108, 81,117, 97,108,105,116,121, 0,
-109,105,110, 83,112, 97,116,105, 97,108, 81,117, 97,108,105,116,121, 0,109,105,110, 84,101,109,112,111,114, 97,108, 81,117, 97,
-108,105,116,121, 0,107,101,121, 70,114, 97,109,101, 82, 97,116,101, 0, 98,105,116, 82, 97,116,101, 0, 97,117,100,105,111, 99,
-111,100,101, 99, 84,121,112,101, 0, 97,117,100,105,111, 83, 97,109,112,108,101, 82, 97,116,101, 0, 97,117,100,105,111, 66,105,
-116, 68,101,112,116,104, 0, 97,117,100,105,111, 67,104, 97,110,110,101,108,115, 0, 97,117,100,105,111, 67,111,100,101, 99, 70,
-108, 97,103,115, 0, 97,117,100,105,111, 66,105,116, 82, 97,116,101, 0, 97,117,100,105,111, 95, 99,111,100,101, 99, 0,118,105,
-100,101,111, 95, 98,105,116,114, 97,116,101, 0, 97,117,100,105,111, 95, 98,105,116,114, 97,116,101, 0, 97,117,100,105,111, 95,
-109,105,120,114, 97,116,101, 0, 97,117,100,105,111, 95,118,111,108,117,109,101, 0,103,111,112, 95,115,105,122,101, 0,114, 99,
- 95,109,105,110, 95,114, 97,116,101, 0,114, 99, 95,109, 97,120, 95,114, 97,116,101, 0,114, 99, 95, 98,117,102,102,101,114, 95,
-115,105,122,101, 0,109,117,120, 95,112, 97, 99,107,101,116, 95,115,105,122,101, 0,109,117,120, 95,114, 97,116,101, 0,109,105,
-120,114, 97,116,101, 0,109, 97,105,110, 0,115,112,101,101,100, 95,111,102, 95,115,111,117,110,100, 0,100,111,112,112,108,101,
-114, 95,102, 97, 99,116,111,114, 0,100,105,115,116, 97,110, 99,101, 95,109,111,100,101,108, 0, 42,109, 97,116, 95,111,118,101,
-114,114,105,100,101, 0, 42,108,105,103,104,116, 95,111,118,101,114,114,105,100,101, 0,108, 97,121, 95,122,109, 97,115,107, 0,
-108, 97,121,102,108, 97,103, 0,112, 97,115,115,102,108, 97,103, 0,112, 97,115,115, 95,120,111,114, 0, 42, 97,118,105, 99,111,
-100,101, 99,100, 97,116, 97, 0, 42,113,116, 99,111,100,101, 99,100, 97,116, 97, 0,113,116, 99,111,100,101, 99,115,101,116,116,
-105,110,103,115, 0,102,102, 99,111,100,101, 99,100, 97,116, 97, 0,115,117, 98,102,114, 97,109,101, 0,112,115,102,114, 97, 0,
-112,101,102,114, 97, 0,105,109, 97,103,101,115, 0,102,114, 97,109, 97,112,116,111, 0,116,104,114,101, 97,100,115, 0,102,114,
- 97,109,101,108,101,110, 0, 98,108,117,114,102, 97, 99, 0,101,100,103,101, 82, 0,101,100,103,101, 71, 0,101,100,103,101, 66,
- 0,102,117,108,108,115, 99,114,101,101,110, 0,120,112,108, 97,121, 0,121,112,108, 97,121, 0,102,114,101,113,112,108, 97,121,
- 0, 97,116,116,114,105, 98, 0,114,116, 50, 0,102,114, 97,109,101, 95,115,116,101,112, 0,115,116,101,114,101,111,109,111,100,
-101, 0,100,105,109,101,110,115,105,111,110,115,112,114,101,115,101,116, 0,109, 97,120,105,109,115,105,122,101, 0,120,115, 99,
-104, 0,121,115, 99,104, 0,120,112, 97,114,116,115, 0,121,112, 97,114,116,115, 0,119,105,110,112,111,115, 0,112,108, 97,110,
-101,115, 0,105,109,116,121,112,101, 0,115,117, 98,105,109,116,121,112,101, 0,113,117, 97,108,105,116,121, 0,100,105,115,112,
-108, 97,121,109,111,100,101, 0,114,112, 97,100, 49, 0,114,112, 97,100, 50, 0,115, 99,101,109,111,100,101, 0,114, 97,121,116,
-114, 97, 99,101, 95,111,112,116,105,111,110,115, 0,114, 97,121,116,114, 97, 99,101, 95,115,116,114,117, 99,116,117,114,101, 0,
-114,101,110,100,101,114,101,114, 0,111, 99,114,101,115, 0, 97,108,112,104, 97,109,111,100,101, 0,111,115, 97, 0,102,114,115,
- 95,115,101, 99, 0,101,100,103,101,105,110,116, 0,115, 97,102,101,116,121, 0, 98,111,114,100,101,114, 0,100,105,115,112,114,
-101, 99,116, 0,108, 97,121,101,114,115, 0, 97, 99,116,108, 97,121, 0,109, 98,108,117,114, 95,115, 97,109,112,108,101,115, 0,
-120, 97,115,112, 0,121, 97,115,112, 0,102,114,115, 95,115,101, 99, 95, 98, 97,115,101, 0,103, 97,117,115,115, 0, 99,111,108,
-111,114, 95,109,103,116, 95,102,108, 97,103, 0,112,111,115,116,103, 97,109,109, 97, 0,112,111,115,116,104,117,101, 0,112,111,
-115,116,115, 97,116, 0,100,105,116,104,101,114, 95,105,110,116,101,110,115,105,116,121, 0, 98, 97,107,101, 95,111,115, 97, 0,
- 98, 97,107,101, 95,102,105,108,116,101,114, 0, 98, 97,107,101, 95,109,111,100,101, 0, 98, 97,107,101, 95,102,108, 97,103, 0,
- 98, 97,107,101, 95,110,111,114,109, 97,108, 95,115,112, 97, 99,101, 0, 98, 97,107,101, 95,113,117, 97,100, 95,115,112,108,105,
-116, 0, 98, 97,107,101, 95,109, 97,120,100,105,115,116, 0, 98, 97,107,101, 95, 98,105, 97,115,100,105,115,116, 0, 98, 97,107,
-101, 95,112, 97,100, 0, 98, 97, 99,107, 98,117,102, 91, 49, 54, 48, 93, 0,112,105, 99, 91, 49, 54, 48, 93, 0,115,116, 97,109,
-112, 0,115,116, 97,109,112, 95,102,111,110,116, 95,105,100, 0,115,116, 97,109,112, 95,117,100, 97,116, 97, 91, 49, 54, 48, 93,
- 0,102,103, 95,115,116, 97,109,112, 91, 52, 93, 0, 98,103, 95,115,116, 97,109,112, 91, 52, 93, 0,115,101,113, 95,112,114,101,
-118, 95,116,121,112,101, 0,115,101,113, 95,114,101,110,100, 95,116,121,112,101, 0,115,101,113, 95,102,108, 97,103, 0,112, 97,
-100, 53, 91, 53, 93, 0,115,105,109,112,108,105,102,121, 95,102,108, 97,103, 0,115,105,109,112,108,105,102,121, 95,115,117, 98,
-115,117,114,102, 0,115,105,109,112,108,105,102,121, 95,115,104, 97,100,111,119,115, 97,109,112,108,101,115, 0,115,105,109,112,
-108,105,102,121, 95,112, 97,114,116,105, 99,108,101,115, 0,115,105,109,112,108,105,102,121, 95, 97,111,115,115,115, 0, 99,105,
-110,101,111,110,119,104,105,116,101, 0, 99,105,110,101,111,110, 98,108, 97, 99,107, 0, 99,105,110,101,111,110,103, 97,109,109,
- 97, 0,106,112, 50, 95,112,114,101,115,101,116, 0,106,112, 50, 95,100,101,112,116,104, 0,114,112, 97,100, 51, 0,100,111,109,
-101,114,101,115, 0,100,111,109,101,109,111,100,101, 0,100,111,109,101, 97,110,103,108,101, 0,100,111,109,101,116,105,108,116,
- 0,100,111,109,101,114,101,115, 98,117,102, 0, 42,100,111,109,101,116,101,120,116, 0,101,110,103,105,110,101, 91, 51, 50, 93,
- 0,112, 97,114,116,105, 99,108,101, 95,112,101,114, 99, 0,115,117, 98,115,117,114,102, 95,109, 97,120, 0,115,104, 97,100, 98,
-117,102,115, 97,109,112,108,101, 95,109, 97,120, 0, 97,111, 95,101,114,114,111,114, 0,116,105,108,116, 0,114,101,115, 98,117,
-102, 0, 42,119, 97,114,112,116,101,120,116, 0, 99,111,108, 91, 51, 93, 0,109, 97,116,109,111,100,101, 0,102,114, 97,109,105,
-110,103, 0,114,116, 49, 0,100,111,109,101, 0,115,116,101,114,101,111,102,108, 97,103, 0,101,121,101,115,101,112, 97,114, 97,
-116,105,111,110, 0, 42, 99, 97,109,101,114, 97, 0, 42, 42, 98,114,117,115,104,101,115, 0, 97, 99,116,105,118,101, 95, 98,114,
-117,115,104, 95,105,110,100,101,120, 0, 98,114,117,115,104, 95, 99,111,117,110,116, 0, 42,112, 97,105,110,116, 95, 99,117,114,
-115,111,114, 0,112, 97,105,110,116, 95, 99,117,114,115,111,114, 95, 99,111,108, 91, 52, 93, 0,112, 97,105,110,116, 0,115,101,
- 97,109, 95, 98,108,101,101,100, 0,110,111,114,109, 97,108, 95, 97,110,103,108,101, 0,115, 99,114,101,101,110, 95,103,114, 97,
- 98, 95,115,105,122,101, 91, 50, 93, 0, 42,112, 97,105,110,116, 99,117,114,115,111,114, 0,105,110,118,101,114,116, 0,116,111,
-116,114,101,107,101,121, 0,116,111,116, 97,100,100,107,101,121, 0, 98,114,117,115,104,116,121,112,101, 0, 98,114,117,115,104,
- 91, 55, 93, 0,101,109,105,116,116,101,114,100,105,115,116, 0,115,101,108,101, 99,116,109,111,100,101, 0,101,100,105,116,116,
-121,112,101, 0,100,114, 97,119, 95,115,116,101,112, 0,102, 97,100,101, 95,102,114, 97,109,101,115, 0,110, 97,109,101, 91, 51,
- 54, 93, 0,109, 97,116, 91, 51, 93, 91, 51, 93, 0,112,105,118,111,116, 91, 51, 93, 0,116, 97, 98,108,101,116, 95,115,105,122,
-101, 0,116, 97, 98,108,101,116, 95,115,116,114,101,110,103,116,104, 0, 42,118,112, 97,105,110,116, 95,112,114,101,118, 0, 42,
-119,112, 97,105,110,116, 95,112,114,101,118, 0, 42,118,112, 97,105,110,116, 0, 42,119,112, 97,105,110,116, 0,118,103,114,111,
-117,112, 95,119,101,105,103,104,116, 0, 99,111,114,110,101,114,116,121,112,101, 0,101,100,105,116, 98,117,116,102,108, 97,103,
- 0,106,111,105,110,116,114,105,108,105,109,105,116, 0,100,101,103,114, 0,116,117,114,110, 0,101,120,116,114, 95,111,102,102,
-115, 0,100,111,117, 98,108,105,109,105,116, 0,110,111,114,109, 97,108,115,105,122,101, 0, 97,117,116,111,109,101,114,103,101,
- 0,115,101,103,109,101,110,116,115, 0,114,105,110,103,115, 0,118,101,114,116,105, 99,101,115, 0,117,110,119,114, 97,112,112,
-101,114, 0,117,118, 99, 97,108, 99, 95,114, 97,100,105,117,115, 0,117,118, 99, 97,108, 99, 95, 99,117, 98,101,115,105,122,101,
- 0,117,118, 99, 97,108, 99, 95,109, 97,114,103,105,110, 0,117,118, 99, 97,108, 99, 95,109, 97,112,100,105,114, 0,117,118, 99,
- 97,108, 99, 95,109, 97,112, 97,108,105,103,110, 0,117,118, 99, 97,108, 99, 95,102,108, 97,103, 0,117,118, 95,102,108, 97,103,
- 0,117,118, 95,115,101,108,101, 99,116,109,111,100,101, 0,117,118, 95,112, 97,100, 91, 50, 93, 0, 97,117,116,111,105,107, 95,
- 99,104, 97,105,110,108,101,110, 0,105,109, 97,112, 97,105,110,116, 0,112, 97,114,116,105, 99,108,101, 0,112,114,111,112,111,
-114,116,105,111,110, 97,108, 95,115,105,122,101, 0,115,101,108,101, 99,116, 95,116,104,114,101,115,104, 0, 99,108,101, 97,110,
- 95,116,104,114,101,115,104, 0, 97,117,116,111,107,101,121, 95,109,111,100,101, 0, 97,117,116,111,107,101,121, 95,102,108, 97,
-103, 0,114,101,116,111,112,111, 95,109,111,100,101, 0,114,101,116,111,112,111, 95,112, 97,105,110,116, 95,116,111,111,108, 0,
-108,105,110,101, 95,100,105,118, 0,101,108,108,105,112,115,101, 95,100,105,118, 0,114,101,116,111,112,111, 95,104,111,116,115,
-112,111,116, 0,109,117,108,116,105,114,101,115, 95,115,117, 98,100,105,118, 95,116,121,112,101, 0,115,107,103,101,110, 95,114,
-101,115,111,108,117,116,105,111,110, 0,115,107,103,101,110, 95,116,104,114,101,115,104,111,108,100, 95,105,110,116,101,114,110,
- 97,108, 0,115,107,103,101,110, 95,116,104,114,101,115,104,111,108,100, 95,101,120,116,101,114,110, 97,108, 0,115,107,103,101,
-110, 95,108,101,110,103,116,104, 95,114, 97,116,105,111, 0,115,107,103,101,110, 95,108,101,110,103,116,104, 95,108,105,109,105,
-116, 0,115,107,103,101,110, 95, 97,110,103,108,101, 95,108,105,109,105,116, 0,115,107,103,101,110, 95, 99,111,114,114,101,108,
- 97,116,105,111,110, 95,108,105,109,105,116, 0,115,107,103,101,110, 95,115,121,109,109,101,116,114,121, 95,108,105,109,105,116,
- 0,115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95, 97,110,103,108,101, 95,119,101,105,103,104,116, 0,115,107,103,
-101,110, 95,114,101,116, 97,114,103,101,116, 95,108,101,110,103,116,104, 95,119,101,105,103,104,116, 0,115,107,103,101,110, 95,
-114,101,116, 97,114,103,101,116, 95,100,105,115,116, 97,110, 99,101, 95,119,101,105,103,104,116, 0,115,107,103,101,110, 95,111,
-112,116,105,111,110,115, 0,115,107,103,101,110, 95,112,111,115,116,112,114,111, 0,115,107,103,101,110, 95,112,111,115,116,112,
-114,111, 95,112, 97,115,115,101,115, 0,115,107,103,101,110, 95,115,117, 98,100,105,118,105,115,105,111,110,115, 91, 51, 93, 0,
-115,107,103,101,110, 95,109,117,108,116,105, 95,108,101,118,101,108, 0, 42,115,107,103,101,110, 95,116,101,109,112,108, 97,116,
-101, 0, 98,111,110,101, 95,115,107,101,116, 99,104,105,110,103, 0, 98,111,110,101, 95,115,107,101,116, 99,104,105,110,103, 95,
- 99,111,110,118,101,114,116, 0,115,107,103,101,110, 95,115,117, 98,100,105,118,105,115,105,111,110, 95,110,117,109, 98,101,114,
- 0,115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95,111,112,116,105,111,110,115, 0,115,107,103,101,110, 95,114,101,
-116, 97,114,103,101,116, 95,114,111,108,108, 0,115,107,103,101,110, 95,115,105,100,101, 95,115,116,114,105,110,103, 91, 56, 93,
- 0,115,107,103,101,110, 95,110,117,109, 95,115,116,114,105,110,103, 91, 56, 93, 0,101,100,103,101, 95,109,111,100,101, 0,115,
-110, 97,112, 95,109,111,100,101, 0,115,110, 97,112, 95,102,108, 97,103, 0,115,110, 97,112, 95,116, 97,114,103,101,116, 0,112,
-114,111,112,111,114,116,105,111,110, 97,108, 0,112,114,111,112, 95,109,111,100,101, 0, 97,117,116,111, 95,110,111,114,109, 97,
-108,105,122,101, 0,105,110,116,112, 97,100, 0,116,111,116,111, 98,106, 0,116,111,116,108, 97,109,112, 0,116,111,116,111, 98,
-106,115,101,108, 0,116,111,116, 99,117,114,118,101, 0,116,111,116,109,101,115,104, 0,116,111,116, 97,114,109, 97,116,117,114,
-101, 0,115, 99, 97,108,101, 95,108,101,110,103,116,104, 0,115,121,115,116,101,109, 0,103,114, 97,118,105,116,121, 91, 51, 93,
- 0,113,117,105, 99,107, 95, 99, 97, 99,104,101, 95,115,116,101,112, 0, 42,119,111,114,108,100, 0, 42,115,101,116, 0, 98, 97,
-115,101, 0, 42, 98, 97,115, 97, 99,116, 0, 42,111, 98,101,100,105,116, 0, 99,117,114,115,111,114, 91, 51, 93, 0,116,119, 99,
-101,110,116, 91, 51, 93, 0,116,119,109,105,110, 91, 51, 93, 0,116,119,109, 97,120, 91, 51, 93, 0,108, 97,121, 97, 99,116, 0,
- 42,101,100, 0, 42,116,111,111,108,115,101,116,116,105,110,103,115, 0, 42,115,116, 97,116,115, 0, 97,117,100,105,111, 0,116,
-114, 97,110,115,102,111,114,109, 95,115,112, 97, 99,101,115, 0, 42,115,111,117,110,100, 95,115, 99,101,110,101, 0, 42,115,111,
-117,110,100, 95,115, 99,101,110,101, 95,104, 97,110,100,108,101, 0, 42,102,112,115, 95,105,110,102,111, 0, 42,116,104,101, 68,
- 97,103, 0,100, 97,103,105,115,118, 97,108,105,100, 0,100, 97,103,102,108, 97,103,115, 0,106,117,109,112,102,114, 97,109,101,
- 0,112, 97,100, 53, 0, 97, 99,116,105,118,101, 95,107,101,121,105,110,103,115,101,116, 0,107,101,121,105,110,103,115,101,116,
-115, 0,103,109, 0,117,110,105,116, 0,112,104,121,115,105, 99,115, 95,115,101,116,116,105,110,103,115, 0, 98,108,101,110,100,
- 0,118,105,101,119, 0,119,105,110,109, 97,116, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,109, 97,116, 91, 52, 93, 91, 52, 93,
- 0,118,105,101,119,105,110,118, 91, 52, 93, 91, 52, 93, 0,112,101,114,115,109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,101,114,
-115,105,110,118, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,109, 97,116,111, 98, 91, 52, 93, 91, 52, 93, 0,112,101,114,115,109,
- 97,116,111, 98, 91, 52, 93, 91, 52, 93, 0,116,119,109, 97,116, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,113,117, 97,116, 91,
- 52, 93, 0,122,102, 97, 99, 0, 99, 97,109,100,120, 0, 99, 97,109,100,121, 0,112,105,120,115,105,122,101, 0, 99, 97,109,122,
-111,111,109, 0,118,105,101,119, 98,117,116, 0,116,119,100,114, 97,119,102,108, 97,103, 0,114,102,108, 97,103, 0,118,105,101,
-119,108,111, 99,107, 0,112,101,114,115,112, 0, 99,108,105,112, 91, 54, 93, 91, 52, 93, 0, 99,108,105,112, 95,108,111, 99, 97,
-108, 91, 54, 93, 91, 52, 93, 0, 42, 99,108,105,112, 98, 98, 0, 42,108,111, 99, 97,108,118,100, 0, 42,114,105, 0, 42,114,101,
-116,111,112,111, 95,118,105,101,119, 95,100, 97,116, 97, 0, 42,100,101,112,116,104,115, 0, 42,115,109,115, 0, 42,115,109,111,
-111,116,104, 95,116,105,109,101,114, 0,108,118,105,101,119,113,117, 97,116, 91, 52, 93, 0,108,112,101,114,115,112, 0,108,118,
-105,101,119, 0,103,114,105,100,118,105,101,119, 0,116,119, 97,110,103,108,101, 91, 51, 93, 0,112, 97,100,102, 0,114,101,103,
-105,111,110, 98, 97,115,101, 0,115,112, 97, 99,101,116,121,112,101, 0, 98,108,111, 99,107,115, 99, 97,108,101, 0, 98,108,111,
- 99,107,104, 97,110,100,108,101,114, 91, 56, 93, 0,108, 97,121, 95,117,115,101,100, 0, 42,111, 98, 95, 99,101,110,116,114,101,
- 0, 98,103,112,105, 99, 98, 97,115,101, 0, 42, 98,103,112,105, 99, 0,111, 98, 95, 99,101,110,116,114,101, 95, 98,111,110,101,
- 91, 51, 50, 93, 0,100,114, 97,119,116,121,112,101, 0,115, 99,101,110,101,108,111, 99,107, 0, 97,114,111,117,110,100, 0,112,
-105,118,111,116, 95,108, 97,115,116, 0,103,114,105,100, 0,110,101, 97,114, 0,102, 97,114, 0,103,114,105,100,108,105,110,101,
-115, 0,103,114,105,100,102,108, 97,103, 0,103,114,105,100,115,117, 98,100,105,118, 0,109,111,100,101,115,101,108,101, 99,116,
- 0,107,101,121,102,108, 97,103,115, 0,116,119,116,121,112,101, 0,116,119,109,111,100,101, 0,116,119,102,108, 97,103, 0, 99,
-117,115,116,111,109,100, 97,116, 97, 95,109, 97,115,107, 0, 97,102,116,101,114,100,114, 97,119, 0,122, 98,117,102, 0,120,114,
- 97,121, 0,110,100,111,102,109,111,100,101, 0,110,100,111,102,102,105,108,116,101,114, 0, 42,112,114,111,112,101,114,116,105,
-101,115, 95,115,116,111,114, 97,103,101, 0,118,101,114,116, 0,104,111,114, 0,109, 97,115,107, 0,109,105,110, 91, 50, 93, 0,
-109, 97,120, 91, 50, 93, 0,109,105,110,122,111,111,109, 0,109, 97,120,122,111,111,109, 0,115, 99,114,111,108,108, 0,115, 99,
-114,111,108,108, 95,117,105, 0,107,101,101,112,116,111,116, 0,107,101,101,112,122,111,111,109, 0,107,101,101,112,111,102,115,
- 0, 97,108,105,103,110, 0,119,105,110,120, 0,119,105,110,121, 0,111,108,100,119,105,110,120, 0,111,108,100,119,105,110,121,
- 0, 42,116, 97, 98, 95,111,102,102,115,101,116, 0,116, 97, 98, 95,110,117,109, 0,116, 97, 98, 95, 99,117,114, 0, 42,115, 99,
-114,101,101,110, 0,118, 50,100, 0, 42, 97,100,115, 0,103,104,111,115,116, 67,117,114,118,101,115, 0, 97,117,116,111,115,110,
- 97,112, 0, 99,117,114,115,111,114, 86, 97,108, 0,109, 97,105,110, 98, 0,109, 97,105,110, 98,111, 0,109, 97,105,110, 98,117,
-115,101,114, 0,114,101, 95, 97,108,105,103,110, 0,112,114,101,118,105,101,119, 0,112, 97,116,104,102,108, 97,103, 0,100, 97,
-116, 97,105, 99,111,110, 0, 42,112,105,110,105,100, 0,114,101,110,100,101,114, 95,115,105,122,101, 0, 99,104, 97,110,115,104,
-111,119,110, 0,122,101, 98,114, 97, 0,122,111,111,109, 0,116,105,116,108,101, 91, 50, 52, 93, 0,100,105,114, 91, 50, 52, 48,
- 93, 0,102,105,108,101, 91, 56, 48, 93, 0,114,101,110, 97,109,101,102,105,108,101, 91, 56, 48, 93, 0,115,111,114,116, 0,100,
-105,115,112,108, 97,121, 0, 97, 99,116,105,118,101, 95, 98,111,111,107,109, 97,114,107, 0, 97, 99,116,105,118,101, 95,102,105,
-108,101, 0,115,101,108,115,116, 97,116,101, 0,102, 95,102,112, 0,102,112, 95,115,116,114, 91, 56, 93, 0,115, 99,114,111,108,
-108, 95,111,102,102,115,101,116, 0, 42,112, 97,114, 97,109,115, 0, 42,102,105,108,101,115, 0, 42,102,111,108,100,101,114,115,
- 95,112,114,101,118, 0, 42,102,111,108,100,101,114,115, 95,110,101,120,116, 0, 42,111,112, 0, 42,115,109,111,111,116,104,115,
- 99,114,111,108,108, 95,116,105,109,101,114, 0, 42,108, 97,121,111,117,116, 0,114,101, 99,101,110,116,110,114, 0, 98,111,111,
-107,109, 97,114,107,110,114, 0,115,121,115,116,101,109,110,114, 0,116,114,101,101, 0, 42,116,114,101,101,115,116,111,114,101,
- 0,115,101, 97,114, 99,104, 95,115,116,114,105,110,103, 91, 51, 50, 93, 0,115,101, 97,114, 99,104, 95,116,115,101, 0,115,101,
- 97,114, 99,104, 95,102,108, 97,103,115, 0,100,111, 95, 0,111,117,116,108,105,110,101,118,105,115, 0,115,116,111,114,101,102,
-108, 97,103, 0, 42, 99,117,109, 97,112, 0,105,109, 97,110,114, 0, 99,117,114,116,105,108,101, 0,105,109,116,121,112,101,110,
-114, 0,108,111, 99,107, 0,112,105,110, 0,100,116, 95,117,118, 0,115,116,105, 99,107,121, 0,100,116, 95,117,118,115,116,114,
-101,116, 99,104, 0, 99,117,114,115,111,114, 91, 50, 93, 0, 99,101,110,116,120, 0, 99,101,110,116,121, 0,115, 99,111,112,101,
-115, 0,115, 97,109,112,108,101, 95,108,105,110,101, 95,104,105,115,116, 0, 42,116,101,120,116, 0,116,111,112, 0,118,105,101,
-119,108,105,110,101,115, 0,108,104,101,105,103,104,116, 0, 99,119,105,100,116,104, 0,108,105,110,101,110,114,115, 95,116,111,
-116, 0,108,101,102,116, 0,115,104,111,119,108,105,110,101,110,114,115, 0,116, 97, 98,110,117,109, 98,101,114, 0,115,104,111,
-119,115,121,110,116, 97,120, 0,111,118,101,114,119,114,105,116,101, 0,108,105,118,101, 95,101,100,105,116, 0,112,105,120, 95,
-112,101,114, 95,108,105,110,101, 0,116,120,116,115, 99,114,111,108,108, 0,116,120,116, 98, 97,114, 0,119,111,114,100,119,114,
- 97,112, 0,100,111,112,108,117,103,105,110,115, 0,102,105,110,100,115,116,114, 91, 50, 53, 54, 93, 0,114,101,112,108, 97, 99,
-101,115,116,114, 91, 50, 53, 54, 93, 0, 42,112,121, 95,100,114, 97,119, 0, 42,112,121, 95,101,118,101,110,116, 0, 42,112,121,
- 95, 98,117,116,116,111,110, 0, 42,112,121, 95, 98,114,111,119,115,101,114, 99, 97,108,108, 98, 97, 99,107, 0, 42,112,121, 95,
-103,108,111, 98, 97,108,100,105, 99,116, 0,108, 97,115,116,115,112, 97, 99,101, 0,115, 99,114,105,112,116,110, 97,109,101, 91,
- 50, 53, 54, 93, 0,115, 99,114,105,112,116, 97,114,103, 91, 50, 53, 54, 93, 0, 42,115, 99,114,105,112,116, 0, 42, 98,117,116,
- 95,114,101,102,115, 0, 42, 97,114,114, 97,121, 0, 99, 97, 99,104,101,115, 0, 99, 97, 99,104,101, 95,100,105,115,112,108, 97,
-121, 0,114,101,100,114, 97,119,115, 0, 42,105,100, 0, 97,115,112,101, 99,116, 0, 42, 99,117,114,102,111,110,116, 0,109,120,
- 0,109,121, 0, 42,101,100,105,116,116,114,101,101, 0,116,114,101,101,116,121,112,101, 0,116,101,120,102,114,111,109, 0,109,
-101,110,117, 0,110,117,109,116,105,108,101,115,120, 0,110,117,109,116,105,108,101,115,121, 0,118,105,101,119,114,101, 99,116,
- 0, 98,111,111,107,109, 97,114,107,114,101, 99,116, 0,115, 99,114,111,108,108,112,111,115, 0,115, 99,114,111,108,108,104,101,
-105,103,104,116, 0,115, 99,114,111,108,108, 97,114,101, 97, 0,114,101,116,118, 97,108, 0,112,114,118, 95,119, 0,112,114,118,
- 95,104, 0, 40, 42,114,101,116,117,114,110,102,117,110, 99, 41, 40, 41, 0, 40, 42,114,101,116,117,114,110,102,117,110, 99, 95,
-101,118,101,110,116, 41, 40, 41, 0, 40, 42,114,101,116,117,114,110,102,117,110, 99, 95, 97,114,103,115, 41, 40, 41, 0, 42, 97,
-114,103, 49, 0, 42, 97,114,103, 50, 0, 42,109,101,110,117,112, 0, 42,112,117,112,109,101,110,117, 0, 42,105,109,103, 0,108,
-101,110, 95, 97,108,108,111, 99, 0, 99,117,114,115,111,114, 0,114,112,116, 95,109, 97,115,107, 0,115, 99,114,111,108,108, 98,
- 97, 99,107, 0,104,105,115,116,111,114,121, 0,112,114,111,109,112,116, 91, 50, 53, 54, 93, 0,108, 97,110,103,117, 97,103,101,
- 91, 51, 50, 93, 0,115,101,108, 95,115,116, 97,114,116, 0,115,101,108, 95,101,110,100, 0,102,105,108,116,101,114, 91, 54, 52,
- 93, 0,102,105,108,101,110, 97,109,101, 91, 50, 53, 54, 93, 0, 98,108,102, 95,105,100, 0,117,105,102,111,110,116, 95,105,100,
- 0,114, 95,116,111, 95,108, 0,112,111,105,110,116,115, 0,107,101,114,110,105,110,103, 0,105,116, 97,108,105, 99, 0, 98,111,
-108,100, 0,115,104, 97,100,111,119, 0,115,104, 97,100,120, 0,115,104, 97,100,121, 0,115,104, 97,100,111,119, 97,108,112,104,
- 97, 0,115,104, 97,100,111,119, 99,111,108,111,114, 0,112, 97,110,101,108,116,105,116,108,101, 0,103,114,111,117,112,108, 97,
- 98,101,108, 0,119,105,100,103,101,116,108, 97, 98,101,108, 0,119,105,100,103,101,116, 0,112, 97,110,101,108,122,111,111,109,
- 0,109,105,110,108, 97, 98,101,108, 99,104, 97,114,115, 0,109,105,110,119,105,100,103,101,116, 99,104, 97,114,115, 0, 99,111,
-108,117,109,110,115,112, 97, 99,101, 0,116,101,109,112,108, 97,116,101,115,112, 97, 99,101, 0, 98,111,120,115,112, 97, 99,101,
- 0, 98,117,116,116,111,110,115,112, 97, 99,101,120, 0, 98,117,116,116,111,110,115,112, 97, 99,101,121, 0,112, 97,110,101,108,
-115,112, 97, 99,101, 0,112, 97,110,101,108,111,117,116,101,114, 0,112, 97,100, 91, 49, 93, 0,111,117,116,108,105,110,101, 91,
- 52, 93, 0,105,110,110,101,114, 91, 52, 93, 0,105,110,110,101,114, 95,115,101,108, 91, 52, 93, 0,105,116,101,109, 91, 52, 93,
- 0,116,101,120,116, 91, 52, 93, 0,116,101,120,116, 95,115,101,108, 91, 52, 93, 0,115,104, 97,100,101,100, 0,115,104, 97,100,
-101,116,111,112, 0,115,104, 97,100,101,100,111,119,110, 0, 97,108,112,104, 97, 95, 99,104,101, 99,107, 0,105,110,110,101,114,
- 95, 97,110,105,109, 91, 52, 93, 0,105,110,110,101,114, 95, 97,110,105,109, 95,115,101,108, 91, 52, 93, 0,105,110,110,101,114,
- 95,107,101,121, 91, 52, 93, 0,105,110,110,101,114, 95,107,101,121, 95,115,101,108, 91, 52, 93, 0,105,110,110,101,114, 95,100,
-114,105,118,101,110, 91, 52, 93, 0,105,110,110,101,114, 95,100,114,105,118,101,110, 95,115,101,108, 91, 52, 93, 0,119, 99,111,
-108, 95,114,101,103,117,108, 97,114, 0,119, 99,111,108, 95,116,111,111,108, 0,119, 99,111,108, 95,116,101,120,116, 0,119, 99,
-111,108, 95,114, 97,100,105,111, 0,119, 99,111,108, 95,111,112,116,105,111,110, 0,119, 99,111,108, 95,116,111,103,103,108,101,
- 0,119, 99,111,108, 95,110,117,109, 0,119, 99,111,108, 95,110,117,109,115,108,105,100,101,114, 0,119, 99,111,108, 95,109,101,
-110,117, 0,119, 99,111,108, 95,112,117,108,108,100,111,119,110, 0,119, 99,111,108, 95,109,101,110,117, 95, 98, 97, 99,107, 0,
-119, 99,111,108, 95,109,101,110,117, 95,105,116,101,109, 0,119, 99,111,108, 95, 98,111,120, 0,119, 99,111,108, 95,115, 99,114,
-111,108,108, 0,119, 99,111,108, 95,112,114,111,103,114,101,115,115, 0,119, 99,111,108, 95,108,105,115,116, 95,105,116,101,109,
- 0,119, 99,111,108, 95,115,116, 97,116,101, 0,105, 99,111,110,102,105,108,101, 91, 56, 48, 93, 0, 98, 97, 99,107, 91, 52, 93,
- 0,116,105,116,108,101, 91, 52, 93, 0,116,101,120,116, 95,104,105, 91, 52, 93, 0,104,101, 97,100,101,114, 91, 52, 93, 0,104,
-101, 97,100,101,114, 95,116,105,116,108,101, 91, 52, 93, 0,104,101, 97,100,101,114, 95,116,101,120,116, 91, 52, 93, 0,104,101,
- 97,100,101,114, 95,116,101,120,116, 95,104,105, 91, 52, 93, 0, 98,117,116,116,111,110, 91, 52, 93, 0, 98,117,116,116,111,110,
- 95,116,105,116,108,101, 91, 52, 93, 0, 98,117,116,116,111,110, 95,116,101,120,116, 91, 52, 93, 0, 98,117,116,116,111,110, 95,
-116,101,120,116, 95,104,105, 91, 52, 93, 0,108,105,115,116, 91, 52, 93, 0,108,105,115,116, 95,116,105,116,108,101, 91, 52, 93,
- 0,108,105,115,116, 95,116,101,120,116, 91, 52, 93, 0,108,105,115,116, 95,116,101,120,116, 95,104,105, 91, 52, 93, 0,112, 97,
-110,101,108, 91, 52, 93, 0,112, 97,110,101,108, 95,116,105,116,108,101, 91, 52, 93, 0,112, 97,110,101,108, 95,116,101,120,116,
- 91, 52, 93, 0,112, 97,110,101,108, 95,116,101,120,116, 95,104,105, 91, 52, 93, 0,115,104, 97,100,101, 49, 91, 52, 93, 0,115,
-104, 97,100,101, 50, 91, 52, 93, 0,104,105,108,105,116,101, 91, 52, 93, 0,103,114,105,100, 91, 52, 93, 0,119,105,114,101, 91,
- 52, 93, 0,115,101,108,101, 99,116, 91, 52, 93, 0,108, 97,109,112, 91, 52, 93, 0, 97, 99,116,105,118,101, 91, 52, 93, 0,103,
-114,111,117,112, 91, 52, 93, 0,103,114,111,117,112, 95, 97, 99,116,105,118,101, 91, 52, 93, 0,116,114, 97,110,115,102,111,114,
-109, 91, 52, 93, 0,118,101,114,116,101,120, 91, 52, 93, 0,118,101,114,116,101,120, 95,115,101,108,101, 99,116, 91, 52, 93, 0,
-101,100,103,101, 91, 52, 93, 0,101,100,103,101, 95,115,101,108,101, 99,116, 91, 52, 93, 0,101,100,103,101, 95,115,101, 97,109,
- 91, 52, 93, 0,101,100,103,101, 95,115,104, 97,114,112, 91, 52, 93, 0,101,100,103,101, 95,102, 97, 99,101,115,101,108, 91, 52,
- 93, 0,101,100,103,101, 95, 99,114,101, 97,115,101, 91, 52, 93, 0,102, 97, 99,101, 91, 52, 93, 0,102, 97, 99,101, 95,115,101,
-108,101, 99,116, 91, 52, 93, 0,102, 97, 99,101, 95,100,111,116, 91, 52, 93, 0,110,111,114,109, 97,108, 91, 52, 93, 0,118,101,
-114,116,101,120, 95,110,111,114,109, 97,108, 91, 52, 93, 0, 98,111,110,101, 95,115,111,108,105,100, 91, 52, 93, 0, 98,111,110,
-101, 95,112,111,115,101, 91, 52, 93, 0,115,116,114,105,112, 91, 52, 93, 0,115,116,114,105,112, 95,115,101,108,101, 99,116, 91,
- 52, 93, 0, 99,102,114, 97,109,101, 91, 52, 93, 0,110,117,114, 98, 95,117,108,105,110,101, 91, 52, 93, 0,110,117,114, 98, 95,
-118,108,105,110,101, 91, 52, 93, 0, 97, 99,116, 95,115,112,108,105,110,101, 91, 52, 93, 0,110,117,114, 98, 95,115,101,108, 95,
-117,108,105,110,101, 91, 52, 93, 0,110,117,114, 98, 95,115,101,108, 95,118,108,105,110,101, 91, 52, 93, 0,108, 97,115,116,115,
-101,108, 95,112,111,105,110,116, 91, 52, 93, 0,104, 97,110,100,108,101, 95,102,114,101,101, 91, 52, 93, 0,104, 97,110,100,108,
-101, 95, 97,117,116,111, 91, 52, 93, 0,104, 97,110,100,108,101, 95,118,101, 99,116, 91, 52, 93, 0,104, 97,110,100,108,101, 95,
- 97,108,105,103,110, 91, 52, 93, 0,104, 97,110,100,108,101, 95,115,101,108, 95,102,114,101,101, 91, 52, 93, 0,104, 97,110,100,
-108,101, 95,115,101,108, 95, 97,117,116,111, 91, 52, 93, 0,104, 97,110,100,108,101, 95,115,101,108, 95,118,101, 99,116, 91, 52,
- 93, 0,104, 97,110,100,108,101, 95,115,101,108, 95, 97,108,105,103,110, 91, 52, 93, 0,100,115, 95, 99,104, 97,110,110,101,108,
- 91, 52, 93, 0,100,115, 95,115,117, 98, 99,104, 97,110,110,101,108, 91, 52, 93, 0, 99,111,110,115,111,108,101, 95,111,117,116,
-112,117,116, 91, 52, 93, 0, 99,111,110,115,111,108,101, 95,105,110,112,117,116, 91, 52, 93, 0, 99,111,110,115,111,108,101, 95,
-105,110,102,111, 91, 52, 93, 0, 99,111,110,115,111,108,101, 95,101,114,114,111,114, 91, 52, 93, 0, 99,111,110,115,111,108,101,
- 95, 99,117,114,115,111,114, 91, 52, 93, 0,118,101,114,116,101,120, 95,115,105,122,101, 0,102, 97, 99,101,100,111,116, 95,115,
-105,122,101, 0, 98,112, 97,100, 91, 50, 93, 0,115,121,110,116, 97,120,108, 91, 52, 93, 0,115,121,110,116, 97,120,110, 91, 52,
- 93, 0,115,121,110,116, 97,120, 98, 91, 52, 93, 0,115,121,110,116, 97,120,118, 91, 52, 93, 0,115,121,110,116, 97,120, 99, 91,
- 52, 93, 0,109,111,118,105,101, 91, 52, 93, 0,105,109, 97,103,101, 91, 52, 93, 0,115, 99,101,110,101, 91, 52, 93, 0, 97,117,
-100,105,111, 91, 52, 93, 0,101,102,102,101, 99,116, 91, 52, 93, 0,112,108,117,103,105,110, 91, 52, 93, 0,116,114, 97,110,115,
-105,116,105,111,110, 91, 52, 93, 0,109,101,116, 97, 91, 52, 93, 0,101,100,105,116,109,101,115,104, 95, 97, 99,116,105,118,101,
- 91, 52, 93, 0,104, 97,110,100,108,101, 95,118,101,114,116,101,120, 91, 52, 93, 0,104, 97,110,100,108,101, 95,118,101,114,116,
-101,120, 95,115,101,108,101, 99,116, 91, 52, 93, 0,104, 97,110,100,108,101, 95,118,101,114,116,101,120, 95,115,105,122,101, 0,
-104,112, 97,100, 91, 55, 93, 0,112,114,101,118,105,101,119, 95, 98, 97, 99,107, 91, 52, 93, 0,115,111,108,105,100, 91, 52, 93,
- 0,116,117,105, 0,116, 98,117,116,115, 0,116,118, 51,100, 0,116,102,105,108,101, 0,116,105,112,111, 0,116,105,110,102,111,
- 0,116,115,110,100, 0,116, 97, 99,116, 0,116,110,108, 97, 0,116,115,101,113, 0,116,105,109, 97, 0,116,105,109, 97,115,101,
-108, 0,116,101,120,116, 0,116,111,111,112,115, 0,116,116,105,109,101, 0,116,110,111,100,101, 0,116,108,111,103,105, 99, 0,
-116,117,115,101,114,112,114,101,102, 0,116, 99,111,110,115,111,108,101, 0,116, 97,114,109, 91, 50, 48, 93, 0, 97, 99,116,105,
-118,101, 95,116,104,101,109,101, 95, 97,114,101, 97, 0,109,111,100,117,108,101, 91, 54, 52, 93, 0,115,112,101, 99, 91, 52, 93,
- 0,100,117,112,102,108, 97,103, 0,115, 97,118,101,116,105,109,101, 0,116,101,109,112,100,105,114, 91, 49, 54, 48, 93, 0,102,
-111,110,116,100,105,114, 91, 49, 54, 48, 93, 0,114,101,110,100,101,114,100,105,114, 91, 49, 54, 48, 93, 0,116,101,120,116,117,
-100,105,114, 91, 49, 54, 48, 93, 0,112,108,117,103,116,101,120,100,105,114, 91, 49, 54, 48, 93, 0,112,108,117,103,115,101,113,
-100,105,114, 91, 49, 54, 48, 93, 0,112,121,116,104,111,110,100,105,114, 91, 49, 54, 48, 93, 0,115,111,117,110,100,100,105,114,
- 91, 49, 54, 48, 93, 0,105,109, 97,103,101, 95,101,100,105,116,111,114, 91, 50, 52, 48, 93, 0, 97,110,105,109, 95,112,108, 97,
-121,101,114, 91, 50, 52, 48, 93, 0, 97,110,105,109, 95,112,108, 97,121,101,114, 95,112,114,101,115,101,116, 0,118, 50,100, 95,
-109,105,110, 95,103,114,105,100,115,105,122,101, 0,116,105,109,101, 99,111,100,101, 95,115,116,121,108,101, 0,118,101,114,115,
-105,111,110,115, 0,100, 98,108, 95, 99,108,105, 99,107, 95,116,105,109,101, 0,103, 97,109,101,102,108, 97,103,115, 0,119,104,
-101,101,108,108,105,110,101,115, 99,114,111,108,108, 0,117,105,102,108, 97,103, 0,108, 97,110,103,117, 97,103,101, 0,117,115,
-101,114,112,114,101,102, 0,118,105,101,119,122,111,111,109, 0,109,105,120, 98,117,102,115,105,122,101, 0, 97,117,100,105,111,
-100,101,118,105, 99,101, 0, 97,117,100,105,111,114, 97,116,101, 0, 97,117,100,105,111,102,111,114,109, 97,116, 0, 97,117,100,
-105,111, 99,104, 97,110,110,101,108,115, 0,100,112,105, 0,101,110, 99,111,100,105,110,103, 0,116,114, 97,110,115,111,112,116,
-115, 0,109,101,110,117,116,104,114,101,115,104,111,108,100, 49, 0,109,101,110,117,116,104,114,101,115,104,111,108,100, 50, 0,
-116,104,101,109,101,115, 0,117,105,102,111,110,116,115, 0,117,105,115,116,121,108,101,115, 0,107,101,121,109, 97,112,115, 0,
- 97,100,100,111,110,115, 0,107,101,121, 99,111,110,102,105,103,115,116,114, 91, 54, 52, 93, 0,117,110,100,111,115,116,101,112,
-115, 0,117,110,100,111,109,101,109,111,114,121, 0,103,112, 95,109, 97,110,104, 97,116,116,101,110,100,105,115,116, 0,103,112,
- 95,101,117, 99,108,105,100,101, 97,110,100,105,115,116, 0,103,112, 95,101,114, 97,115,101,114, 0,103,112, 95,115,101,116,116,
-105,110,103,115, 0,116, 98, 95,108,101,102,116,109,111,117,115,101, 0,116, 98, 95,114,105,103,104,116,109,111,117,115,101, 0,
-108,105,103,104,116, 91, 51, 93, 0,116,119, 95,104,111,116,115,112,111,116, 0,116,119, 95,102,108, 97,103, 0,116,119, 95,104,
- 97,110,100,108,101,115,105,122,101, 0,116,119, 95,115,105,122,101, 0,116,101,120,116,105,109,101,111,117,116, 0,116,101,120,
- 99,111,108,108,101, 99,116,114, 97,116,101, 0,119,109,100,114, 97,119,109,101,116,104,111,100, 0,119,109,112, 97,100, 0,109,
-101,109, 99, 97, 99,104,101,108,105,109,105,116, 0,112,114,101,102,101,116, 99,104,102,114, 97,109,101,115, 0,102,114, 97,109,
-101,115,101,114,118,101,114,112,111,114,116, 0,112, 97,100, 95,114,111,116, 95, 97,110,103,108,101, 0,111, 98, 99,101,110,116,
-101,114, 95,100,105, 97, 0,114,118,105,115,105,122,101, 0,114,118,105, 98,114,105,103,104,116, 0,114,101, 99,101,110,116, 95,
-102,105,108,101,115, 0,115,109,111,111,116,104, 95,118,105,101,119,116,120, 0,103,108,114,101,115,108,105,109,105,116, 0,110,
-100,111,102, 95,112, 97,110, 0,110,100,111,102, 95,114,111,116, 97,116,101, 0, 99,117,114,115,115,105,122,101, 0, 99,111,108,
-111,114, 95,112,105, 99,107,101,114, 95,116,121,112,101, 0,105,112,111, 95,110,101,119, 0,107,101,121,104, 97,110,100,108,101,
-115, 95,110,101,119, 0,115, 99,114, 99, 97,115,116,102,112,115, 0,115, 99,114, 99, 97,115,116,119, 97,105,116, 0,112,114,111,
-112,119,105,100,116,104, 0,118,101,114,115,101,109, 97,115,116,101,114, 91, 49, 54, 48, 93, 0,118,101,114,115,101,117,115,101,
-114, 91, 49, 54, 48, 93, 0,103,108, 97,108,112,104, 97, 99,108,105,112, 0, 99,111, 98, 97, 95,119,101,105,103,104,116, 0,118,
-101,114,116, 98, 97,115,101, 0,101,100,103,101, 98, 97,115,101, 0, 97,114,101, 97, 98, 97,115,101, 0, 42,110,101,119,115, 99,
-101,110,101, 0,102,117,108,108, 0,119,105,110,105,100, 0,100,111, 95,100,114, 97,119, 0,100,111, 95,114,101,102,114,101,115,
-104, 0,100,111, 95,100,114, 97,119, 95,103,101,115,116,117,114,101, 0,100,111, 95,100,114, 97,119, 95,112, 97,105,110,116, 99,
-117,114,115,111,114, 0,100,111, 95,100,114, 97,119, 95,100,114, 97,103, 0,115,119, 97,112, 0,109, 97,105,110,119,105,110, 0,
-115,117, 98,119,105,110, 97, 99,116,105,118,101, 0, 42, 97,110,105,109,116,105,109,101,114, 0, 42, 99,111,110,116,101,120,116,
- 0,104, 97,110,100,108,101,114, 91, 56, 93, 0, 42,110,101,119,118, 0,118,101, 99, 0, 42,118, 49, 0, 42,118, 50, 0, 42,116,
-121,112,101, 0,112, 97,110,101,108,110, 97,109,101, 91, 54, 52, 93, 0,116, 97, 98,110, 97,109,101, 91, 54, 52, 93, 0,100,114,
- 97,119,110, 97,109,101, 91, 54, 52, 93, 0,111,102,115,120, 0,111,102,115,121, 0,115,105,122,101,120, 0,115,105,122,101,121,
- 0,108, 97, 98,101,108,111,102,115, 0,114,117,110,116,105,109,101, 95,102,108, 97,103, 0, 99,111,110,116,114,111,108, 0,115,
-110, 97,112, 0,115,111,114,116,111,114,100,101,114, 0, 42,112, 97,110,101,108,116, 97, 98, 0, 42, 97, 99,116,105,118,101,100,
- 97,116, 97, 0,108,105,115,116, 95,115, 99,114,111,108,108, 0,108,105,115,116, 95,115,105,122,101, 0,108,105,115,116, 95,108,
- 97,115,116, 95,108,101,110, 0,108,105,115,116, 95,103,114,105,112, 95,115,105,122,101, 0,108,105,115,116, 95,115,101, 97,114,
- 99,104, 91, 54, 52, 93, 0, 42,118, 51, 0, 42,118, 52, 0, 42,102,117,108,108, 0, 98,117,116,115,112, 97, 99,101,116,121,112,
-101, 0,104,101, 97,100,101,114,116,121,112,101, 0,115,112, 97, 99,101,100, 97,116, 97, 0,104, 97,110,100,108,101,114,115, 0,
- 97, 99,116,105,111,110,122,111,110,101,115, 0,119,105,110,114, 99,116, 0,100,114, 97,119,114, 99,116, 0,115,119,105,110,105,
-100, 0,114,101,103,105,111,110,116,121,112,101, 0, 97,108,105,103,110,109,101,110,116, 0,100,111, 95,100,114, 97,119, 95,111,
-118,101,114,108, 97,121, 0,117,105, 98,108,111, 99,107,115, 0,112, 97,110,101,108,115, 0, 42,104,101, 97,100,101,114,115,116,
-114, 0, 42,114,101,103,105,111,110,100, 97,116, 97, 0,115,117, 98,118,115,116,114, 91, 52, 93, 0,115,117, 98,118,101,114,115,
-105,111,110, 0,112, 97,100,115, 0,109,105,110,118,101,114,115,105,111,110, 0,109,105,110,115,117, 98,118,101,114,115,105,111,
-110, 0, 42, 99,117,114,115, 99,114,101,101,110, 0, 42, 99,117,114,115, 99,101,110,101, 0,102,105,108,101,102,108, 97,103,115,
- 0,103,108,111, 98, 97,108,102, 0,102,105,108,101,110, 97,109,101, 91, 50, 52, 48, 93, 0,110, 97,109,101, 91, 56, 48, 93, 0,
- 42,105, 98,117,102, 0, 42,105, 98,117,102, 95, 99,111,109,112, 0, 42,115,101, 49, 0, 42,115,101, 50, 0, 42,115,101, 51, 0,
-110,114, 0, 98,111,116,116,111,109, 0,114,105,103,104,116, 0,120,111,102,115, 0,121,111,102,115, 0,108,105,102,116, 91, 51,
- 93, 0,103, 97,109,109, 97, 91, 51, 93, 0,103, 97,105,110, 91, 51, 93, 0,100,105,114, 91, 49, 54, 48, 93, 0,100,111,110,101,
- 0,115,116, 97,114,116,115,116,105,108,108, 0,101,110,100,115,116,105,108,108, 0, 42,115,116,114,105,112,100, 97,116, 97, 0,
-111,114,120, 0,111,114,121, 0, 42, 99,114,111,112, 0, 42,116,114, 97,110,115,102,111,114,109, 0, 42, 99,111,108,111,114, 95,
- 98, 97,108, 97,110, 99,101, 0, 42,116,115,116,114,105,112,100, 97,116, 97, 0, 42,116,115,116,114,105,112,100, 97,116, 97, 95,
-115,116, 97,114,116,115,116,105,108,108, 0, 42,116,115,116,114,105,112,100, 97,116, 97, 95,101,110,100,115,116,105,108,108, 0,
- 42,105, 98,117,102, 95,115,116, 97,114,116,115,116,105,108,108, 0, 42,105, 98,117,102, 95,101,110,100,115,116,105,108,108, 0,
- 42,105,110,115,116, 97,110, 99,101, 95,112,114,105,118, 97,116,101, 95,100, 97,116, 97, 0, 42, 42, 99,117,114,114,101,110,116,
- 95,112,114,105,118, 97,116,101, 95,100, 97,116, 97, 0, 42,116,109,112, 0,115,116, 97,114,116,111,102,115, 0,101,110,100,111,
-102,115, 0,109, 97, 99,104,105,110,101, 0,115,116, 97,114,116,100,105,115,112, 0,101,110,100,100,105,115,112, 0,109,117,108,
- 0,104, 97,110,100,115,105,122,101, 0, 97,110,105,109, 95,112,114,101,115,101,101,107, 0, 42,115,116,114,105,112, 0, 42,115,
- 99,101,110,101, 95, 99, 97,109,101,114, 97, 0,101,102,102,101, 99,116, 95,102, 97,100,101,114, 0,115,112,101,101,100, 95,102,
- 97,100,101,114, 0, 42,115,101,113, 49, 0, 42,115,101,113, 50, 0, 42,115,101,113, 51, 0,115,101,113, 98, 97,115,101, 0, 42,
-115,111,117,110,100, 0, 42,115, 99,101,110,101, 95,115,111,117,110,100, 0,108,101,118,101,108, 0,112, 97,110, 0,115, 99,101,
-110,101,110,114, 0,109,117,108,116,105, 99, 97,109, 95,115,111,117,114, 99,101, 0,115,116,114,111, 98,101, 0, 42,101,102,102,
-101, 99,116,100, 97,116, 97, 0, 97,110,105,109, 95,115,116, 97,114,116,111,102,115, 0, 97,110,105,109, 95,101,110,100,111,102,
-115, 0, 98,108,101,110,100, 95,109,111,100,101, 0, 98,108,101,110,100, 95,111,112, 97, 99,105,116,121, 0, 42,111,108,100, 98,
- 97,115,101,112, 0, 42,112, 97,114,115,101,113, 0, 42,115,101,113, 98, 97,115,101,112, 0,109,101,116, 97,115,116, 97, 99,107,
- 0, 42, 97, 99,116, 95,115,101,113, 0, 97, 99,116, 95,105,109, 97,103,101,100,105,114, 91, 50, 53, 54, 93, 0, 97, 99,116, 95,
-115,111,117,110,100,100,105,114, 91, 50, 53, 54, 93, 0,111,118,101,114, 95,111,102,115, 0,111,118,101,114, 95, 99,102,114, 97,
- 0,111,118,101,114, 95,102,108, 97,103, 0,111,118,101,114, 95, 98,111,114,100,101,114, 0,101,100,103,101, 87,105,100,116,104,
- 0,102,111,114,119, 97,114,100, 0,119,105,112,101,116,121,112,101, 0,102, 77,105,110,105, 0,102, 67,108, 97,109,112, 0,102,
- 66,111,111,115,116, 0,100, 68,105,115,116, 0,100, 81,117, 97,108,105,116,121, 0, 98, 78,111, 67,111,109,112, 0, 83, 99, 97,
-108,101,120, 73,110,105, 0, 83, 99, 97,108,101,121, 73,110,105, 0, 83, 99, 97,108,101,120, 70,105,110, 0, 83, 99, 97,108,101,
-121, 70,105,110, 0,120, 73,110,105, 0,120, 70,105,110, 0,121, 73,110,105, 0,121, 70,105,110, 0,114,111,116, 73,110,105, 0,
-114,111,116, 70,105,110, 0,105,110,116,101,114,112,111,108, 97,116,105,111,110, 0,117,110,105,102,111,114,109, 95,115, 99, 97,
-108,101, 0, 42,102,114, 97,109,101, 77, 97,112, 0,103,108,111, 98, 97,108, 83,112,101,101,100, 0,108, 97,115,116, 86, 97,108,
-105,100, 70,114, 97,109,101, 0, 98,117,116,116,121,112,101, 0,117,115,101,114,106,105,116, 0,115,116, 97, 0,116,111,116,112,
- 97,114,116, 0,110,111,114,109,102, 97, 99, 0,111, 98,102, 97, 99, 0,114, 97,110,100,102, 97, 99, 0,116,101,120,102, 97, 99,
- 0,114, 97,110,100,108,105,102,101, 0,102,111,114, 99,101, 91, 51, 93, 0,118,101, 99,116,115,105,122,101, 0,109, 97,120,108,
-101,110, 0,100,101,102,118,101, 99, 91, 51, 93, 0,109,117,108,116, 91, 52, 93, 0,108,105,102,101, 91, 52, 93, 0, 99,104,105,
-108,100, 91, 52, 93, 0,109, 97,116, 91, 52, 93, 0,116,101,120,109, 97,112, 0, 99,117,114,109,117,108,116, 0,115,116, 97,116,
-105, 99,115,116,101,112, 0,111,109, 97,116, 0,116,105,109,101,116,101,120, 0,115,112,101,101,100,116,101,120, 0,102,108, 97,
-103, 50,110,101,103, 0,118,101,114,116,103,114,111,117,112, 95,118, 0,118,103,114,111,117,112,110, 97,109,101, 91, 51, 50, 93,
- 0,118,103,114,111,117,112,110, 97,109,101, 95,118, 91, 51, 50, 93, 0, 42,107,101,121,115, 0,109,105,110,102, 97, 99, 0,117,
-115,101,100, 0,117,115,101,100,101,108,101,109, 0, 42,112,111,105,110, 0,114,101,115,101,116,100,105,115,116, 0,108, 97,115,
-116,118, 97,108, 0, 42,109, 97, 0,107,101,121, 0,113,117, 97,108, 0,113,117, 97,108, 50, 0,116, 97,114,103,101,116, 78, 97,
-109,101, 91, 51, 50, 93, 0,116,111,103,103,108,101, 78, 97,109,101, 91, 51, 50, 93, 0,118, 97,108,117,101, 91, 51, 50, 93, 0,
-109, 97,120,118, 97,108,117,101, 91, 51, 50, 93, 0,100,101,108, 97,121, 0,100,117,114, 97,116,105,111,110, 0,109, 97,116,101,
-114,105, 97,108, 78, 97,109,101, 91, 51, 50, 93, 0,100, 97,109,112,116,105,109,101,114, 0,112,114,111,112,110, 97,109,101, 91,
- 51, 50, 93, 0,109, 97,116,110, 97,109,101, 91, 51, 50, 93, 0, 97,120,105,115,102,108, 97,103, 0,112,111,115,101, 99,104, 97,
-110,110,101,108, 91, 51, 50, 93, 0, 99,111,110,115,116,114, 97,105,110,116, 91, 51, 50, 93, 0, 42,102,114,111,109, 79, 98,106,
-101, 99,116, 0,115,117, 98,106,101, 99,116, 91, 51, 50, 93, 0, 98,111,100,121, 91, 51, 50, 93, 0,111,116,121,112,101, 0,112,
-117,108,115,101, 0,102,114,101,113, 0,116,111,116,108,105,110,107,115, 0, 42, 42,108,105,110,107,115, 0,116, 97,112, 0,106,
-111,121,105,110,100,101,120, 0, 97,120,105,115, 95,115,105,110,103,108,101, 0, 97,120,105,115,102, 0, 98,117,116,116,111,110,
- 0,104, 97,116, 0,104, 97,116,102, 0,112,114,101, 99,105,115,105,111,110, 0,115,116,114, 91, 49, 50, 56, 93, 0, 42,109,121,
-110,101,119, 0,105,110,112,117,116,115, 0,116,111,116,115,108,105,110,107,115, 0, 42, 42,115,108,105,110,107,115, 0,118, 97,
-108,111, 0,115,116, 97,116,101, 95,109, 97,115,107, 0, 42, 97, 99,116, 0,102,114, 97,109,101, 80,114,111,112, 91, 51, 50, 93,
- 0, 98,108,101,110,100,105,110, 0,112,114,105,111,114,105,116,121, 0,101,110,100, 95,114,101,115,101,116, 0,115,116,114,105,
-100,101, 97,120,105,115, 0,115,116,114,105,100,101,108,101,110,103,116,104, 0,115,110,100,110,114, 0,112, 97,100, 51, 91, 50,
- 93, 0,112,105,116, 99,104, 0,115,111,117,110,100, 51, 68, 0,112, 97,100, 54, 91, 49, 93, 0, 42,109,101, 0,108,105,110, 86,
-101,108,111, 99,105,116,121, 91, 51, 93, 0, 97,110,103, 86,101,108,111, 99,105,116,121, 91, 51, 93, 0,108,111, 99, 97,108,102,
-108, 97,103, 0,100,121,110, 95,111,112,101,114, 97,116,105,111,110, 0,102,111,114, 99,101,108,111, 99, 91, 51, 93, 0,102,111,
-114, 99,101,114,111,116, 91, 51, 93, 0,108,105,110,101, 97,114,118,101,108,111, 99,105,116,121, 91, 51, 93, 0, 97,110,103,117,
-108, 97,114,118,101,108,111, 99,105,116,121, 91, 51, 93, 0, 42,114,101,102,101,114,101,110, 99,101, 0,109,105,110, 0,109, 97,
-120, 0,114,111,116,100, 97,109,112, 0,109,105,110,108,111, 99, 91, 51, 93, 0,109, 97,120,108,111, 99, 91, 51, 93, 0,109,105,
-110,114,111,116, 91, 51, 93, 0,109, 97,120,114,111,116, 91, 51, 93, 0,109, 97,116,112,114,111,112, 91, 51, 50, 93, 0, 98,117,
-116,115,116, 97, 0, 98,117,116,101,110,100, 0,100,105,115,116,114,105, 98,117,116,105,111,110, 0,105,110,116, 95, 97,114,103,
- 95, 49, 0,105,110,116, 95, 97,114,103, 95, 50, 0,102,108,111, 97,116, 95, 97,114,103, 95, 49, 0,102,108,111, 97,116, 95, 97,
-114,103, 95, 50, 0,116,111, 80,114,111,112, 78, 97,109,101, 91, 51, 50, 93, 0, 42,116,111, 79, 98,106,101, 99,116, 0, 98,111,
-100,121, 84,121,112,101, 0,102,105,108,101,110, 97,109,101, 91, 54, 52, 93, 0,108,111, 97,100, 97,110,105,110, 97,109,101, 91,
- 54, 52, 93, 0,105,110,116, 95, 97,114,103, 0,102,108,111, 97,116, 95, 97,114,103, 0, 42,115,117, 98,116, 97,114,103,101,116,
- 0,103,111, 0, 97, 99, 99,101,108,108,101,114, 97,116,105,111,110, 0,109, 97,120,115,112,101,101,100, 0,109, 97,120,114,111,
-116,115,112,101,101,100, 0,109, 97,120,116,105,108,116,115,112,101,101,100, 0,116,105,108,116,100, 97,109,112, 0,115,112,101,
-101,100,100, 97,109,112, 0,109,105,110, 95,103, 97,105,110, 0,109, 97,120, 95,103, 97,105,110, 0,114,101,102,101,114,101,110,
- 99,101, 95,100,105,115,116, 97,110, 99,101, 0,109, 97,120, 95,100,105,115,116, 97,110, 99,101, 0,114,111,108,108,111,102,102,
- 95,102, 97, 99,116,111,114, 0, 99,111,110,101, 95,105,110,110,101,114, 95, 97,110,103,108,101, 0, 99,111,110,101, 95,111,117,
-116,101,114, 95, 97,110,103,108,101, 0, 99,111,110,101, 95,111,117,116,101,114, 95,103, 97,105,110, 0, 42,110,101,119,112, 97,
- 99,107,101,100,102,105,108,101, 0, 97,116,116,101,110,117, 97,116,105,111,110, 0,100,105,115,116, 97,110, 99,101, 0, 42, 99,
- 97, 99,104,101, 0, 42,112,108, 97,121, 98, 97, 99,107, 95,104, 97,110,100,108,101, 0, 42, 97,114,101, 97, 0, 42,108, 97,109,
-112,114,101,110, 0,103,111, 98,106,101, 99,116, 0,100,117,112,108,105, 95,111,102,115, 91, 51, 93, 0, 42,112,114,111,112, 0,
- 99,104,105,108,100, 98, 97,115,101, 0,114,111,108,108, 0,104,101, 97,100, 91, 51, 93, 0,116, 97,105,108, 91, 51, 93, 0, 98,
-111,110,101, 95,109, 97,116, 91, 51, 93, 91, 51, 93, 0, 97,114,109, 95,104,101, 97,100, 91, 51, 93, 0, 97,114,109, 95,116, 97,
-105,108, 91, 51, 93, 0, 97,114,109, 95,109, 97,116, 91, 52, 93, 91, 52, 93, 0,120,119,105,100,116,104, 0,122,119,105,100,116,
-104, 0,101, 97,115,101, 49, 0,101, 97,115,101, 50, 0,114, 97,100, 95,104,101, 97,100, 0,114, 97,100, 95,116, 97,105,108, 0,
- 98,111,110,101, 98, 97,115,101, 0, 99,104, 97,105,110, 98, 97,115,101, 0, 42,101,100, 98,111, 0, 42, 97, 99,116, 95, 98,111,
-110,101, 0, 42, 97, 99,116, 95,101,100, 98,111,110,101, 0, 42,115,107,101,116, 99,104, 0,108, 97,121,101,114, 95,112,114,111,
-116,101, 99,116,101,100, 0,103,104,111,115,116,101,112, 0,103,104,111,115,116,115,105,122,101, 0,103,104,111,115,116,116,121,
-112,101, 0,112, 97,116,104,115,105,122,101, 0,103,104,111,115,116,115,102, 0,103,104,111,115,116,101,102, 0,112, 97,116,104,
-115,102, 0,112, 97,116,104,101,102, 0,112, 97,116,104, 98, 99, 0,112, 97,116,104, 97, 99, 0, 42,112,111,105,110,116,115, 0,
-115,116, 97,114,116, 95,102,114, 97,109,101, 0,101,110,100, 95,102,114, 97,109,101, 0,103,104,111,115,116, 95,115,102, 0,103,
-104,111,115,116, 95,101,102, 0,103,104,111,115,116, 95, 98, 99, 0,103,104,111,115,116, 95, 97, 99, 0,103,104,111,115,116, 95,
-116,121,112,101, 0,103,104,111,115,116, 95,115,116,101,112, 0,103,104,111,115,116, 95,102,108, 97,103, 0,112, 97,116,104, 95,
-116,121,112,101, 0,112, 97,116,104, 95,115,116,101,112, 0,112, 97,116,104, 95,118,105,101,119,102,108, 97,103, 0,112, 97,116,
-104, 95, 98, 97,107,101,102,108, 97,103, 0,112, 97,116,104, 95,115,102, 0,112, 97,116,104, 95,101,102, 0,112, 97,116,104, 95,
- 98, 99, 0,112, 97,116,104, 95, 97, 99, 0, 99,111,110,115,116,102,108, 97,103, 0,105,107,102,108, 97,103, 0,115,101,108,101,
- 99,116,102,108, 97,103, 0, 97,103,114,112, 95,105,110,100,101,120, 0, 42, 98,111,110,101, 0, 42, 99,104,105,108,100, 0,105,
-107,116,114,101,101, 0, 42, 98, 95, 98,111,110,101, 95,109, 97,116,115, 0, 42,100,117, 97,108, 95,113,117, 97,116, 0, 42, 98,
- 95, 98,111,110,101, 95,100,117, 97,108, 95,113,117, 97,116,115, 0,101,117,108, 91, 51, 93, 0, 99,104, 97,110, 95,109, 97,116,
- 91, 52, 93, 91, 52, 93, 0,112,111,115,101, 95,109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,111,115,101, 95,104,101, 97,100, 91,
- 51, 93, 0,112,111,115,101, 95,116, 97,105,108, 91, 51, 93, 0,108,105,109,105,116,109,105,110, 91, 51, 93, 0,108,105,109,105,
-116,109, 97,120, 91, 51, 93, 0,115,116,105,102,102,110,101,115,115, 91, 51, 93, 0,105,107,115,116,114,101,116, 99,104, 0,105,
-107,114,111,116,119,101,105,103,104,116, 0,105,107,108,105,110,119,101,105,103,104,116, 0, 42, 99,117,115,116,111,109, 0, 42,
- 99,117,115,116,111,109, 95,116,120, 0, 99,104, 97,110, 98, 97,115,101, 0, 42, 99,104, 97,110,104, 97,115,104, 0,112,114,111,
-120,121, 95,108, 97,121,101,114, 0,115,116,114,105,100,101, 95,111,102,102,115,101,116, 91, 51, 93, 0, 99,121, 99,108,105, 99,
- 95,111,102,102,115,101,116, 91, 51, 93, 0, 97,103,114,111,117,112,115, 0, 97, 99,116,105,118,101, 95,103,114,111,117,112, 0,
-105,107,115,111,108,118,101,114, 0, 42,105,107,100, 97,116, 97, 0, 42,105,107,112, 97,114, 97,109, 0,112,114,111,120,121, 95,
- 97, 99,116, 95, 98,111,110,101, 91, 51, 50, 93, 0,110,117,109,105,116,101,114, 0,110,117,109,115,116,101,112, 0,109,105,110,
-115,116,101,112, 0,109, 97,120,115,116,101,112, 0,115,111,108,118,101,114, 0,102,101,101,100, 98, 97, 99,107, 0,109, 97,120,
-118,101,108, 0,100, 97,109,112,109, 97,120, 0,100, 97,109,112,101,112,115, 0, 99,104, 97,110,110,101,108,115, 0, 99,117,115,
-116,111,109, 67,111,108, 0, 99,115, 0, 99,117,114,118,101,115, 0,103,114,111,117,112,115, 0, 97, 99,116,105,118,101, 95,109,
- 97,114,107,101,114, 0, 42,115,111,117,114, 99,101, 0, 42,102,105,108,116,101,114, 95,103,114,112, 0,102,105,108,116,101,114,
-102,108, 97,103, 0, 97,100,115, 0,116,105,109,101,115,108,105,100,101, 0, 42,103,114,112, 0,116,101,109,112, 0,110, 97,109,
-101, 91, 51, 48, 93, 0,111,119,110,115,112, 97, 99,101, 0,116, 97,114,115,112, 97, 99,101, 0,101,110,102,111,114, 99,101, 0,
-104,101, 97,100,116, 97,105,108, 0,108,105,110, 95,101,114,114,111,114, 0,114,111,116, 95,101,114,114,111,114, 0, 42,116, 97,
-114, 0,109, 97,116,114,105,120, 91, 52, 93, 91, 52, 93, 0,115,112, 97, 99,101, 0,114,111,116, 79,114,100,101,114, 0,116, 97,
-114,110,117,109, 0,116, 97,114,103,101,116,115, 0,105,116,101,114, 97,116,105,111,110,115, 0,114,111,111,116, 98,111,110,101,
- 0,109, 97,120, 95,114,111,111,116, 98,111,110,101, 0, 42,112,111,108,101,116, 97,114, 0,112,111,108,101,115,117, 98,116, 97,
-114,103,101,116, 91, 51, 50, 93, 0,112,111,108,101, 97,110,103,108,101, 0,111,114,105,101,110,116,119,101,105,103,104,116, 0,
-103,114, 97, 98,116, 97,114,103,101,116, 91, 51, 93, 0,110,117,109,112,111,105,110,116,115, 0, 99,104, 97,105,110,108,101,110,
- 0,120,122, 83, 99, 97,108,101, 77,111,100,101, 0,114,101,115,101,114,118,101,100, 49, 0,114,101,115,101,114,118,101,100, 50,
- 0,109,105,110,109, 97,120,102,108, 97,103, 0,115,116,117, 99,107, 0, 99, 97, 99,104,101, 91, 51, 93, 0,108,111, 99,107,102,
-108, 97,103, 0,102,111,108,108,111,119,102,108, 97,103, 0,118,111,108,109,111,100,101, 0,112,108, 97,110,101, 0,111,114,103,
-108,101,110,103,116,104, 0, 98,117,108,103,101, 0,112,105,118, 88, 0,112,105,118, 89, 0,112,105,118, 90, 0, 97,120, 88, 0,
- 97,120, 89, 0, 97,120, 90, 0,109,105,110, 76,105,109,105,116, 91, 54, 93, 0,109, 97,120, 76,105,109,105,116, 91, 54, 93, 0,
-101,120,116,114, 97, 70,122, 0,105,110,118,109, 97,116, 91, 52, 93, 91, 52, 93, 0,102,114,111,109, 0,116,111, 0,109, 97,112,
- 91, 51, 93, 0,101,120,112,111, 0,102,114,111,109, 95,109,105,110, 91, 51, 93, 0,102,114,111,109, 95,109, 97,120, 91, 51, 93,
- 0,116,111, 95,109,105,110, 91, 51, 93, 0,116,111, 95,109, 97,120, 91, 51, 93, 0,114,111,116, 65,120,105,115, 0,122,109,105,
-110, 0,122,109, 97,120, 0,112, 97,100, 91, 57, 93, 0, 99,104, 97,110,110,101,108, 91, 51, 50, 93, 0,110,111, 95,114,111,116,
- 95, 97,120,105,115, 0,115,116,114,105,100,101, 95, 97,120,105,115, 0, 99,117,114,109,111,100, 0, 97, 99,116,115,116, 97,114,
-116, 0, 97, 99,116,101,110,100, 0, 97, 99,116,111,102,102,115, 0,115,116,114,105,100,101,108,101,110, 0,115, 99, 97,108,101,
- 0, 98,108,101,110,100,111,117,116, 0,115,116,114,105,100,101, 99,104, 97,110,110,101,108, 91, 51, 50, 93, 0,111,102,102,115,
- 95, 98,111,110,101, 91, 51, 50, 93, 0,104, 97,115,105,110,112,117,116, 0,104, 97,115,111,117,116,112,117,116, 0,100, 97,116,
- 97,116,121,112,101, 0,115,111, 99,107,101,116,116,121,112,101, 0, 42,110,101,119, 95,115,111, 99,107, 0,110,115, 0,108,105,
-109,105,116, 0,115,116, 97, 99,107, 95,105,110,100,101,120, 0,105,110,116,101,114,110, 0,115,116, 97, 99,107, 95,105,110,100,
-101,120, 95,101,120,116, 0,108,111, 99,120, 0,108,111, 99,121, 0,111,119,110, 95,105,110,100,101,120, 0,116,111, 95,105,110,
-100,101,120, 0, 42,116,111,115,111, 99,107, 0, 42,108,105,110,107, 0, 42,110,101,119, 95,110,111,100,101, 0,108, 97,115,116,
-121, 0,111,117,116,112,117,116,115, 0, 42,115,116,111,114, 97,103,101, 0,109,105,110,105,119,105,100,116,104, 0, 99,117,115,
-116,111,109, 49, 0, 99,117,115,116,111,109, 50, 0, 99,117,115,116,111,109, 51, 0, 99,117,115,116,111,109, 52, 0,110,101,101,
-100, 95,101,120,101, 99, 0,101,120,101, 99, 0, 42,116,104,114,101, 97,100,100, 97,116, 97, 0,116,111,116,114, 0, 98,117,116,
-114, 0,112,114,118,114, 0, 42, 98,108,111, 99,107, 0, 42,116,121,112,101,105,110,102,111, 0, 42,102,114,111,109,110,111,100,
-101, 0, 42,116,111,110,111,100,101, 0, 42,102,114,111,109,115,111, 99,107, 0,110,111,100,101,115, 0,108,105,110,107,115, 0,
- 42,115,116, 97, 99,107, 0, 42,116,104,114,101, 97,100,115,116, 97, 99,107, 0,105,110,105,116, 0,115,116, 97, 99,107,115,105,
-122,101, 0, 99,117,114, 95,105,110,100,101,120, 0, 97,108,108,116,121,112,101,115, 0, 42,111,119,110,116,121,112,101, 0,112,
- 97,100, 50, 91, 50, 93, 0, 40, 42,112,114,111,103,114,101,115,115, 41, 40, 41, 0, 40, 42,115,116, 97,116,115, 95,100,114, 97,
-119, 41, 40, 41, 0, 40, 42,116,101,115,116, 95, 98,114,101, 97,107, 41, 40, 41, 0, 42,116, 98,104, 0, 42,112,114,104, 0, 42,
-115,100,104, 0, 99,121, 99,108,105, 99, 0,109,111,118,105,101, 0,115, 97,109,112,108,101,115, 0,109,105,110,115,112,101,101,
-100, 0,112,101,114, 99,101,110,116,120, 0,112,101,114, 99,101,110,116,121, 0, 98,111,107,101,104, 0,103, 97,109,109, 97, 0,
- 99,117,114,118,101,100, 0,105,109, 97,103,101, 95,105,110, 95,119,105,100,116,104, 0,105,109, 97,103,101, 95,105,110, 95,104,
-101,105,103,104,116, 0, 99,101,110,116,101,114, 95,120, 0, 99,101,110,116,101,114, 95,121, 0,115,112,105,110, 0,119,114, 97,
-112, 0,115,105,103,109, 97, 95, 99,111,108,111,114, 0,115,105,103,109, 97, 95,115,112, 97, 99,101, 0,104,117,101, 0,115, 97,
-116, 0,116, 49, 0,116, 50, 0,116, 51, 0,102,115,116,114,101,110,103,116,104, 0,102, 97,108,112,104, 97, 0,107,101,121, 91,
- 52, 93, 0, 97,108,103,111,114,105,116,104,109, 0, 99,104, 97,110,110,101,108, 0,120, 49, 0,120, 50, 0,121, 49, 0,121, 50,
- 0, 99,111,108,110, 97,109,101, 91, 51, 50, 93, 0, 98,107,116,121,112,101, 0,114,111,116, 97,116,105,111,110, 0,103, 97,109,
- 99,111, 0,110,111, 95,122, 98,117,102, 0,102,115,116,111,112, 0,109, 97,120, 98,108,117,114, 0, 98,116,104,114,101,115,104,
- 0, 42,100,105, 99,116, 0, 42,110,111,100,101, 0, 97,110,103,108,101, 95,111,102,115, 0, 99,111,108,109,111,100, 0,109,105,
-120, 0,116,104,114,101,115,104,111,108,100, 0,102, 97,100,101, 0,109, 0, 99, 0,106,105,116, 0,112,114,111,106, 0,102,105,
-116, 0,115,108,111,112,101, 91, 51, 93, 0,112,111,119,101,114, 91, 51, 93, 0,108,105,102,116, 95,108,103,103, 91, 51, 93, 0,
-108,105,109, 99,104, 97,110, 0,117,110,115,112,105,108,108, 0,108,105,109,115, 99, 97,108,101, 0,117,115,112,105,108,108,114,
- 0,117,115,112,105,108,108,103, 0,117,115,112,105,108,108, 98, 0,115,104,111,114,116,121, 0,109,105,110,116, 97, 98,108,101,
- 0,109, 97,120,116, 97, 98,108,101, 0,101,120,116, 95,105,110, 91, 50, 93, 0,101,120,116, 95,111,117,116, 91, 50, 93, 0, 42,
- 99,117,114,118,101, 0, 42,116, 97, 98,108,101, 0, 42,112,114,101,109,117,108,116, 97, 98,108,101, 0,112,114,101,115,101,116,
- 0, 99,117,114,114, 0, 99,108,105,112,114, 0, 99,109, 91, 52, 93, 0, 98,108, 97, 99,107, 91, 51, 93, 0,119,104,105,116,101,
- 91, 51, 93, 0, 98,119,109,117,108, 91, 51, 93, 0,115, 97,109,112,108,101, 91, 51, 93, 0,120, 95,114,101,115,111,108,117,116,
-105,111,110, 0,100, 97,116, 97, 95,114, 91, 50, 53, 54, 93, 0,100, 97,116, 97, 95,103, 91, 50, 53, 54, 93, 0,100, 97,116, 97,
- 95, 98, 91, 50, 53, 54, 93, 0,100, 97,116, 97, 95,108,117,109, 97, 91, 50, 53, 54, 93, 0,115, 97,109,112,108,101, 95,102,117,
-108,108, 0,115, 97,109,112,108,101, 95,108,105,110,101,115, 0, 97, 99, 99,117,114, 97, 99,121, 0,119, 97,118,101,102,114,109,
- 95,109,111,100,101, 0,119, 97,118,101,102,114,109, 95, 97,108,112,104, 97, 0,119, 97,118,101,102,114,109, 95,121,102, 97, 99,
- 0,119, 97,118,101,102,114,109, 95,104,101,105,103,104,116, 0,118,101, 99,115, 99,111,112,101, 95, 97,108,112,104, 97, 0,118,
-101, 99,115, 99,111,112,101, 95,104,101,105,103,104,116, 0,109,105,110,109, 97,120, 91, 51, 93, 91, 50, 93, 0,104,105,115,116,
- 0, 42,119, 97,118,101,102,111,114,109, 95, 49, 0, 42,119, 97,118,101,102,111,114,109, 95, 50, 0, 42,119, 97,118,101,102,111,
-114,109, 95, 51, 0, 42,118,101, 99,115, 99,111,112,101, 0,119, 97,118,101,102,111,114,109, 95,116,111,116, 0,111,102,102,115,
-101,116, 91, 50, 93, 0, 99,108,111,110,101, 0,109,116,101,120, 0,106,105,116,116,101,114, 0,115,109,111,111,116,104, 95,115,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154, 0, 0,255,189, 17, 17,255,247, 10, 10,255, 0, 0, 0, 0,
+247, 64, 24,255,246,105, 19,255,250,153, 0,255, 0, 0, 0, 0, 30,145, 9,255, 89,183, 11,255,131,239, 29,255, 0, 0, 0, 0,
+ 10, 54,148,255, 54,103,223,255, 94,193,239,255, 0, 0, 0, 0,169, 41, 78,255,193, 65,106,255,240, 93,145,255, 0, 0, 0, 0,
+ 67, 12,120,255, 84, 58,163,255,135,100,213,255, 0, 0, 0, 0, 36,120, 90,255, 60,149,121,255,111,182,171,255, 0, 0, 0, 0,
+ 75,112,124,255,106,134,145,255,155,194,205,255, 0, 0, 0, 0,244,201, 12,255,238,194, 54,255,243,255, 0,255, 0, 0, 0, 0,
+ 30, 32, 36,255, 72, 76, 86,255,255,255,255,255, 0, 0, 0, 0,111, 47,106,255,152, 69,190,255,211, 48,214,255, 0, 0, 0, 0,
+108,142, 34,255,127,176, 34,255,187,239, 91,255, 0, 0, 0, 0,141,141,141,255,176,176,176,255,222,222,222,255, 0, 0, 0, 0,
+131, 67, 38,255,139, 88, 17,255,189,106, 17,255, 0, 0, 0, 0, 8, 49, 14,255, 28, 67, 11,255, 52, 98, 43,255, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 78, 65, 49,192,226, 0, 0,
+ 80,179, 85, 10, 0, 0, 0, 0, 1, 0, 0, 0, 83, 68, 78, 65, 78, 65, 77, 69,204, 11, 0, 0, 42,110,101,120,116, 0, 42,112,
+114,101,118, 0, 42,100, 97,116, 97, 0, 42,102,105,114,115,116, 0, 42,108, 97,115,116, 0,120, 0,121, 0,122, 0,119, 0,120,
+109,105,110, 0,120,109, 97,120, 0,121,109,105,110, 0,121,109, 97,120, 0, 42,112,111,105,110,116,101,114, 0,103,114,111,117,
+112, 0,118, 97,108, 0,118, 97,108, 50, 0,116,121,112,101, 0,115,117, 98,116,121,112,101, 0,102,108, 97,103, 0,110, 97,109,
+101, 91, 51, 50, 93, 0,115, 97,118,101,100, 0,100, 97,116, 97, 0,108,101,110, 0,116,111,116, 97,108,108,101,110, 0, 42,110,
+101,119,105,100, 0, 42,108,105, 98, 0,110, 97,109,101, 91, 50, 52, 93, 0,117,115, 0,105, 99,111,110, 95,105,100, 0, 42,112,
+114,111,112,101,114,116,105,101,115, 0,105,100, 0, 42,105,100, 98,108,111, 99,107, 0, 42,102,105,108,101,100, 97,116, 97, 0,
+110, 97,109,101, 91, 50, 52, 48, 93, 0,102,105,108,101,112, 97,116,104, 91, 50, 52, 48, 93, 0,116,111,116, 0,112, 97,100, 0,
+ 42,112, 97,114,101,110,116, 0,119, 91, 50, 93, 0,104, 91, 50, 93, 0, 99,104, 97,110,103,101,100, 91, 50, 93, 0, 99,104, 97,
+110,103,101,100, 95,116,105,109,101,115,116, 97,109,112, 91, 50, 93, 0, 42,114,101, 99,116, 91, 50, 93, 0, 42,111, 98, 0, 98,
+108,111, 99,107,116,121,112,101, 0, 97,100,114, 99,111,100,101, 0,110, 97,109,101, 91, 49, 50, 56, 93, 0, 42, 98,112, 0, 42,
+ 98,101,122,116, 0,109, 97,120,114, 99,116, 0,116,111,116,114, 99,116, 0,118, 97,114,116,121,112,101, 0,116,111,116,118,101,
+114,116, 0,105,112,111, 0,101,120,116,114, 97,112, 0,114,116, 0, 98,105,116,109, 97,115,107, 0,115,108,105,100,101, 95,109,
+105,110, 0,115,108,105,100,101, 95,109, 97,120, 0, 99,117,114,118, 97,108, 0, 42,100,114,105,118,101,114, 0, 99,117,114,118,
+101, 0, 99,117,114, 0,115,104,111,119,107,101,121, 0,109,117,116,101,105,112,111, 0,112,111,115, 0,114,101,108, 97,116,105,
+118,101, 0,116,111,116,101,108,101,109, 0,112, 97,100, 50, 0, 42,119,101,105,103,104,116,115, 0,118,103,114,111,117,112, 91,
+ 51, 50, 93, 0,115,108,105,100,101,114,109,105,110, 0,115,108,105,100,101,114,109, 97,120, 0, 42, 97,100,116, 0, 42,114,101,
+102,107,101,121, 0,101,108,101,109,115,116,114, 91, 51, 50, 93, 0,101,108,101,109,115,105,122,101, 0, 98,108,111, 99,107, 0,
+ 42,105,112,111, 0, 42,102,114,111,109, 0,116,111,116,107,101,121, 0,115,108,117,114,112,104, 0, 42,108,105,110,101, 0, 42,
+102,111,114,109, 97,116, 0, 98,108,101,110, 0,108,105,110,101,110,111, 0,115,116, 97,114,116, 0,101,110,100, 0,112, 97,100,
+ 49, 0,102,108, 97,103,115, 0, 99,111,108,111,114, 91, 52, 93, 0,112, 97,100, 91, 52, 93, 0, 42,110, 97,109,101, 0,110,108,
+105,110,101,115, 0,108,105,110,101,115, 0, 42, 99,117,114,108, 0, 42,115,101,108,108, 0, 99,117,114, 99, 0,115,101,108, 99,
+ 0,109, 97,114,107,101,114,115, 0, 42,117,110,100,111, 95, 98,117,102, 0,117,110,100,111, 95,112,111,115, 0,117,110,100,111,
+ 95,108,101,110, 0, 42, 99,111,109,112,105,108,101,100, 0,109,116,105,109,101, 0,115,105,122,101, 0,115,101,101,107, 0,112,
+ 97,115,115,101,112, 97,114,116, 97,108,112,104, 97, 0, 99,108,105,112,115,116, 97, 0, 99,108,105,112,101,110,100, 0,108,101,
+110,115, 0,111,114,116,104,111, 95,115, 99, 97,108,101, 0,100,114, 97,119,115,105,122,101, 0,115,104,105,102,116,120, 0,115,
+104,105,102,116,121, 0, 89, 70, 95,100,111,102,100,105,115,116, 0, 42,100,111,102, 95,111, 98, 0,102,114, 97,109,101,110,114,
+ 0,102,114, 97,109,101,115, 0,111,102,102,115,101,116, 0,115,102,114, 97, 0,102,105,101, 95,105,109, 97, 0, 99,121, 99,108,
+ 0,111,107, 0,109,117,108,116,105, 95,105,110,100,101,120, 0,108, 97,121,101,114, 0,112, 97,115,115, 0,109,101,110,117,110,
+114, 0, 42,115, 99,101,110,101, 0,105, 98,117,102,115, 0, 42,103,112,117,116,101,120,116,117,114,101, 0, 42, 97,110,105,109,
+ 0, 42,114,114, 0, 42,114,101,110,100,101,114,115, 91, 56, 93, 0,114,101,110,100,101,114, 95,115,108,111,116, 0,108, 97,115,
+116, 95,114,101,110,100,101,114, 95,115,108,111,116, 0,115,111,117,114, 99,101, 0,108, 97,115,116,102,114, 97,109,101, 0,116,
+112, 97,103,101,102,108, 97,103, 0,116,111,116, 98,105,110,100, 0,120,114,101,112, 0,121,114,101,112, 0,116,119,115,116, 97,
+ 0,116,119,101,110,100, 0, 98,105,110,100, 99,111,100,101, 0, 42,114,101,112, 98,105,110,100, 0, 42,112, 97, 99,107,101,100,
+102,105,108,101, 0, 42,112,114,101,118,105,101,119, 0,108, 97,115,116,117,112,100, 97,116,101, 0,108, 97,115,116,117,115,101,
+100, 0, 97,110,105,109,115,112,101,101,100, 0,103,101,110, 95,120, 0,103,101,110, 95,121, 0,103,101,110, 95,116,121,112,101,
+ 0, 97,115,112,120, 0, 97,115,112,121, 0,116,101,120, 99,111, 0,109, 97,112,116,111, 0,109, 97,112,116,111,110,101,103, 0,
+ 98,108,101,110,100,116,121,112,101, 0, 42,111, 98,106,101, 99,116, 0, 42,116,101,120, 0,117,118,110, 97,109,101, 91, 51, 50,
+ 93, 0,112,114,111,106,120, 0,112,114,111,106,121, 0,112,114,111,106,122, 0,109, 97,112,112,105,110,103, 0,111,102,115, 91,
+ 51, 93, 0,115,105,122,101, 91, 51, 93, 0,114,111,116, 0,116,101,120,102,108, 97,103, 0, 99,111,108,111,114,109,111,100,101,
+108, 0,112,109, 97,112,116,111, 0,112,109, 97,112,116,111,110,101,103, 0,110,111,114,109, 97,112,115,112, 97, 99,101, 0,119,
+104,105, 99,104, 95,111,117,116,112,117,116, 0, 98,114,117,115,104, 95,109, 97,112, 95,109,111,100,101, 0,112, 97,100, 91, 55,
+ 93, 0,114, 0,103, 0, 98, 0,107, 0,100,101,102, 95,118, 97,114, 0, 99,111,108,102, 97, 99, 0,118, 97,114,102, 97, 99, 0,
+110,111,114,102, 97, 99, 0,100,105,115,112,102, 97, 99, 0,119, 97,114,112,102, 97, 99, 0, 99,111,108,115,112,101, 99,102, 97,
+ 99, 0,109,105,114,114,102, 97, 99, 0, 97,108,112,104, 97,102, 97, 99, 0,100,105,102,102,102, 97, 99, 0,115,112,101, 99,102,
+ 97, 99, 0,101,109,105,116,102, 97, 99, 0,104, 97,114,100,102, 97, 99, 0,114, 97,121,109,105,114,114,102, 97, 99, 0,116,114,
+ 97,110,115,108,102, 97, 99, 0, 97,109, 98,102, 97, 99, 0, 99,111,108,101,109,105,116,102, 97, 99, 0, 99,111,108,114,101,102,
+108,102, 97, 99, 0, 99,111,108,116,114, 97,110,115,102, 97, 99, 0,100,101,110,115,102, 97, 99, 0,115, 99, 97,116,116,101,114,
+102, 97, 99, 0,114,101,102,108,102, 97, 99, 0,116,105,109,101,102, 97, 99, 0,108,101,110,103,116,104,102, 97, 99, 0, 99,108,
+117,109,112,102, 97, 99, 0,107,105,110,107,102, 97, 99, 0,114,111,117,103,104,102, 97, 99, 0,112, 97,100,101,110,115,102, 97,
+ 99, 0,108,105,102,101,102, 97, 99, 0,115,105,122,101,102, 97, 99, 0,105,118,101,108,102, 97, 99, 0,112,118,101,108,102, 97,
+ 99, 0,115,104, 97,100,111,119,102, 97, 99, 0,122,101,110,117,112,102, 97, 99, 0,122,101,110,100,111,119,110,102, 97, 99, 0,
+ 98,108,101,110,100,102, 97, 99, 0,110, 97,109,101, 91, 49, 54, 48, 93, 0, 42,104, 97,110,100,108,101, 0, 42,112,110, 97,109,
+101, 0, 42,115,116,110, 97,109,101,115, 0,115,116,121,112,101,115, 0,118, 97,114,115, 0, 42,118, 97,114,115,116,114, 0, 42,
+114,101,115,117,108,116, 0, 42, 99,102,114, 97, 0,100, 97,116, 97, 91, 51, 50, 93, 0, 40, 42,100,111,105,116, 41, 40, 41, 0,
+ 40, 42,105,110,115,116, 97,110, 99,101, 95,105,110,105,116, 41, 40, 41, 0, 40, 42, 99, 97,108,108, 98, 97, 99,107, 41, 40, 41,
+ 0,118,101,114,115,105,111,110, 0, 97, 0,105,112,111,116,121,112,101, 0, 42,105,109, 97, 0, 42, 99,117, 98,101, 91, 54, 93,
+ 0,105,109, 97,116, 91, 52, 93, 91, 52, 93, 0,111, 98,105,109, 97,116, 91, 51, 93, 91, 51, 93, 0,115,116,121,112,101, 0,118,
+105,101,119,115, 99, 97,108,101, 0,110,111,116,108, 97,121, 0, 99,117, 98,101,114,101,115, 0,100,101,112,116,104, 0,114,101,
+ 99, 97,108, 99, 0,108, 97,115,116,115,105,122,101, 0,102, 97,108,108,111,102,102, 95,116,121,112,101, 0,102, 97,108,108,111,
+102,102, 95,115,111,102,116,110,101,115,115, 0,114, 97,100,105,117,115, 0, 99,111,108,111,114, 95,115,111,117,114, 99,101, 0,
+116,111,116,112,111,105,110,116,115, 0,112,100,112, 97,100, 0,112,115,121,115, 0,112,115,121,115, 95, 99, 97, 99,104,101, 95,
+115,112, 97, 99,101, 0,111, 98, 95, 99, 97, 99,104,101, 95,115,112, 97, 99,101, 0, 42,112,111,105,110,116, 95,116,114,101,101,
+ 0, 42,112,111,105,110,116, 95,100, 97,116, 97, 0,110,111,105,115,101, 95,115,105,122,101, 0,110,111,105,115,101, 95,100,101,
+112,116,104, 0,110,111,105,115,101, 95,105,110,102,108,117,101,110, 99,101, 0,110,111,105,115,101, 95, 98, 97,115,105,115, 0,
+112,100,112, 97,100, 51, 91, 51, 93, 0,110,111,105,115,101, 95,102, 97, 99, 0,115,112,101,101,100, 95,115, 99, 97,108,101, 0,
+ 42, 99,111, 98, 97, 0,114,101,115,111,108, 91, 51, 93, 0,105,110,116,101,114,112, 95,116,121,112,101, 0,102,105,108,101, 95,
+102,111,114,109, 97,116, 0,101,120,116,101,110,100, 0,115,109,111,107,101,100, 95,116,121,112,101, 0,105,110,116, 95,109,117,
+108,116,105,112,108,105,101,114, 0,115,116,105,108,108, 95,102,114, 97,109,101, 0,115,111,117,114, 99,101, 95,112, 97,116,104,
+ 91, 50, 52, 48, 93, 0, 42,100, 97,116, 97,115,101,116, 0, 99, 97, 99,104,101,100,102,114, 97,109,101, 0,110,111,105,115,101,
+115,105,122,101, 0,116,117,114, 98,117,108, 0, 98,114,105,103,104,116, 0, 99,111,110,116,114, 97,115,116, 0,115, 97,116,117,
+114, 97,116,105,111,110, 0,114,102, 97, 99, 0,103,102, 97, 99, 0, 98,102, 97, 99, 0,102,105,108,116,101,114,115,105,122,101,
+ 0,109,103, 95, 72, 0,109,103, 95,108, 97, 99,117,110, 97,114,105,116,121, 0,109,103, 95,111, 99,116, 97,118,101,115, 0,109,
+103, 95,111,102,102,115,101,116, 0,109,103, 95,103, 97,105,110, 0,100,105,115,116, 95, 97,109,111,117,110,116, 0,110,115, 95,
+111,117,116,115, 99, 97,108,101, 0,118,110, 95,119, 49, 0,118,110, 95,119, 50, 0,118,110, 95,119, 51, 0,118,110, 95,119, 52,
+ 0,118,110, 95,109,101,120,112, 0,118,110, 95,100,105,115,116,109, 0,118,110, 95, 99,111,108,116,121,112,101, 0,110,111,105,
+115,101,100,101,112,116,104, 0,110,111,105,115,101,116,121,112,101, 0,110,111,105,115,101, 98, 97,115,105,115, 0,110,111,105,
+115,101, 98, 97,115,105,115, 50, 0,105,109, 97,102,108, 97,103, 0, 99,114,111,112,120,109,105,110, 0, 99,114,111,112,121,109,
+105,110, 0, 99,114,111,112,120,109, 97,120, 0, 99,114,111,112,121,109, 97,120, 0,116,101,120,102,105,108,116,101,114, 0, 97,
+102,109, 97,120, 0,120,114,101,112,101, 97,116, 0,121,114,101,112,101, 97,116, 0, 99,104,101, 99,107,101,114,100,105,115,116,
+ 0,110, 97, 98,108, 97, 0,105,117,115,101,114, 0, 42,110,111,100,101,116,114,101,101, 0, 42,112,108,117,103,105,110, 0, 42,
+101,110,118, 0, 42,112,100, 0, 42,118,100, 0,117,115,101, 95,110,111,100,101,115, 0,108,111, 99, 91, 51, 93, 0,114,111,116,
+ 91, 51, 93, 0,109, 97,116, 91, 52, 93, 91, 52, 93, 0,109,105,110, 91, 51, 93, 0,109, 97,120, 91, 51, 93, 0,109,111,100,101,
+ 0,116,111,116,101,120, 0,115,104,100,119,114, 0,115,104,100,119,103, 0,115,104,100,119, 98, 0,115,104,100,119,112, 97,100,
+ 0,101,110,101,114,103,121, 0,100,105,115,116, 0,115,112,111,116,115,105,122,101, 0,115,112,111,116, 98,108,101,110,100, 0,
+104, 97,105,110,116, 0, 97,116,116, 49, 0, 97,116,116, 50, 0, 42, 99,117,114,102, 97,108,108,111,102,102, 0,115,104, 97,100,
+115,112,111,116,115,105,122,101, 0, 98,105, 97,115, 0,115,111,102,116, 0, 99,111,109,112,114,101,115,115,116,104,114,101,115,
+104, 0,112, 97,100, 53, 91, 51, 93, 0, 98,117,102,115,105,122,101, 0,115, 97,109,112, 0, 98,117,102,102,101,114,115, 0,102,
+105,108,116,101,114,116,121,112,101, 0, 98,117,102,102,108, 97,103, 0, 98,117,102,116,121,112,101, 0,114, 97,121, 95,115, 97,
+109,112, 0,114, 97,121, 95,115, 97,109,112,121, 0,114, 97,121, 95,115, 97,109,112,122, 0,114, 97,121, 95,115, 97,109,112, 95,
+116,121,112,101, 0, 97,114,101, 97, 95,115,104, 97,112,101, 0, 97,114,101, 97, 95,115,105,122,101, 0, 97,114,101, 97, 95,115,
+105,122,101,121, 0, 97,114,101, 97, 95,115,105,122,101,122, 0, 97,100, 97,112,116, 95,116,104,114,101,115,104, 0,114, 97,121,
+ 95,115, 97,109,112, 95,109,101,116,104,111,100, 0,116,101,120, 97, 99,116, 0,115,104, 97,100,104, 97,108,111,115,116,101,112,
+ 0,115,117,110, 95,101,102,102,101, 99,116, 95,116,121,112,101, 0,115,107,121, 98,108,101,110,100,116,121,112,101, 0,104,111,
+114,105,122,111,110, 95, 98,114,105,103,104,116,110,101,115,115, 0,115,112,114,101, 97,100, 0,115,117,110, 95, 98,114,105,103,
+104,116,110,101,115,115, 0,115,117,110, 95,115,105,122,101, 0, 98, 97, 99,107,115, 99, 97,116,116,101,114,101,100, 95,108,105,
+103,104,116, 0,115,117,110, 95,105,110,116,101,110,115,105,116,121, 0, 97,116,109, 95,116,117,114, 98,105,100,105,116,121, 0,
+ 97,116,109, 95,105,110,115, 99, 97,116,116,101,114,105,110,103, 95,102, 97, 99,116,111,114, 0, 97,116,109, 95,101,120,116,105,
+110, 99,116,105,111,110, 95,102, 97, 99,116,111,114, 0, 97,116,109, 95,100,105,115,116, 97,110, 99,101, 95,102, 97, 99,116,111,
+114, 0,115,107,121, 98,108,101,110,100,102, 97, 99, 0,115,107,121, 95,101,120,112,111,115,117,114,101, 0,115,107,121, 95, 99,
+111,108,111,114,115,112, 97, 99,101, 0,112, 97,100, 52, 91, 54, 93, 0, 42,109,116,101,120, 91, 49, 56, 93, 0,112,114, 95,116,
+101,120,116,117,114,101, 0,112, 97,100, 54, 91, 54, 93, 0,100,101,110,115,105,116,121, 0,101,109,105,115,115,105,111,110, 0,
+115, 99, 97,116,116,101,114,105,110,103, 0,114,101,102,108,101, 99,116,105,111,110, 0,101,109,105,115,115,105,111,110, 95, 99,
+111,108, 91, 51, 93, 0,116,114, 97,110,115,109,105,115,115,105,111,110, 95, 99,111,108, 91, 51, 93, 0,114,101,102,108,101, 99,
+116,105,111,110, 95, 99,111,108, 91, 51, 93, 0,100,101,110,115,105,116,121, 95,115, 99, 97,108,101, 0,100,101,112,116,104, 95,
+ 99,117,116,111,102,102, 0, 97,115,121,109,109,101,116,114,121, 0,115,116,101,112,115,105,122,101, 95,116,121,112,101, 0,115,
+104, 97,100,101,102,108, 97,103, 0,115,104, 97,100,101, 95,116,121,112,101, 0,112,114,101, 99, 97, 99,104,101, 95,114,101,115,
+111,108,117,116,105,111,110, 0,115,116,101,112,115,105,122,101, 0,109,115, 95,100,105,102,102, 0,109,115, 95,105,110,116,101,
+110,115,105,116,121, 0,109,115, 95,115,112,114,101, 97,100, 0,109, 97,116,101,114,105, 97,108, 95,116,121,112,101, 0,115,112,
+101, 99,114, 0,115,112,101, 99,103, 0,115,112,101, 99, 98, 0,109,105,114,114, 0,109,105,114,103, 0,109,105,114, 98, 0, 97,
+109, 98,114, 0, 97,109, 98, 98, 0, 97,109, 98,103, 0, 97,109, 98, 0,101,109,105,116, 0, 97,110,103, 0,115,112,101, 99,116,
+114, 97, 0,114, 97,121, 95,109,105,114,114,111,114, 0, 97,108,112,104, 97, 0,114,101,102, 0,115,112,101, 99, 0,122,111,102,
+102,115, 0, 97,100,100, 0,116,114, 97,110,115,108,117, 99,101,110, 99,121, 0,118,111,108, 0,102,114,101,115,110,101,108, 95,
+109,105,114, 0,102,114,101,115,110,101,108, 95,109,105,114, 95,105, 0,102,114,101,115,110,101,108, 95,116,114, 97, 0,102,114,
+101,115,110,101,108, 95,116,114, 97, 95,105, 0,102,105,108,116,101,114, 0,116,120, 95,108,105,109,105,116, 0,116,120, 95,102,
+ 97,108,108,111,102,102, 0,114, 97,121, 95,100,101,112,116,104, 0,114, 97,121, 95,100,101,112,116,104, 95,116,114, 97, 0,104,
+ 97,114, 0,115,101,101,100, 49, 0,115,101,101,100, 50, 0,103,108,111,115,115, 95,109,105,114, 0,103,108,111,115,115, 95,116,
+114, 97, 0,115, 97,109,112, 95,103,108,111,115,115, 95,109,105,114, 0,115, 97,109,112, 95,103,108,111,115,115, 95,116,114, 97,
+ 0, 97,100, 97,112,116, 95,116,104,114,101,115,104, 95,109,105,114, 0, 97,100, 97,112,116, 95,116,104,114,101,115,104, 95,116,
+114, 97, 0, 97,110,105,115,111, 95,103,108,111,115,115, 95,109,105,114, 0,100,105,115,116, 95,109,105,114, 0,102, 97,100,101,
+116,111, 95,109,105,114, 0,115,104, 97,100,101, 95,102,108, 97,103, 0,109,111,100,101, 95,108, 0,102,108, 97,114,101, 99, 0,
+115,116, 97,114, 99, 0,108,105,110,101, 99, 0,114,105,110,103, 99, 0,104, 97,115,105,122,101, 0,102,108, 97,114,101,115,105,
+122,101, 0,115,117, 98,115,105,122,101, 0,102,108, 97,114,101, 98,111,111,115,116, 0,115,116,114, 97,110,100, 95,115,116, 97,
+ 0,115,116,114, 97,110,100, 95,101,110,100, 0,115,116,114, 97,110,100, 95,101, 97,115,101, 0,115,116,114, 97,110,100, 95,115,
+117,114,102,110,111,114, 0,115,116,114, 97,110,100, 95,109,105,110, 0,115,116,114, 97,110,100, 95,119,105,100,116,104,102, 97,
+100,101, 0,115,116,114, 97,110,100, 95,117,118,110, 97,109,101, 91, 51, 50, 93, 0,115, 98,105, 97,115, 0,108, 98,105, 97,115,
+ 0,115,104, 97,100, 95, 97,108,112,104, 97, 0,115,101,112,116,101,120, 0,114,103, 98,115,101,108, 0,112,114, 95,116,121,112,
+101, 0,112,114, 95, 98, 97, 99,107, 0,112,114, 95,108, 97,109,112, 0,109,108, 95,102,108, 97,103, 0,100,105,102,102, 95,115,
+104, 97,100,101,114, 0,115,112,101, 99, 95,115,104, 97,100,101,114, 0,114,111,117,103,104,110,101,115,115, 0,114,101,102,114,
+ 97, 99, 0,112, 97,114, 97,109, 91, 52, 93, 0,114,109,115, 0,100, 97,114,107,110,101,115,115, 0, 42,114, 97,109,112, 95, 99,
+111,108, 0, 42,114, 97,109,112, 95,115,112,101, 99, 0,114, 97,109,112,105,110, 95, 99,111,108, 0,114, 97,109,112,105,110, 95,
+115,112,101, 99, 0,114, 97,109,112, 98,108,101,110,100, 95, 99,111,108, 0,114, 97,109,112, 98,108,101,110,100, 95,115,112,101,
+ 99, 0,114, 97,109,112, 95,115,104,111,119, 0,112, 97,100, 51, 0,114, 97,109,112,102, 97, 99, 95, 99,111,108, 0,114, 97,109,
+112,102, 97, 99, 95,115,112,101, 99, 0, 42,103,114,111,117,112, 0,102,114,105, 99,116,105,111,110, 0,102,104, 0,114,101,102,
+108,101, 99,116, 0,102,104,100,105,115,116, 0,120,121,102,114,105, 99,116, 0,100,121,110, 97,109,111,100,101, 0,115,115,115,
+ 95,114, 97,100,105,117,115, 91, 51, 93, 0,115,115,115, 95, 99,111,108, 91, 51, 93, 0,115,115,115, 95,101,114,114,111,114, 0,
+115,115,115, 95,115, 99, 97,108,101, 0,115,115,115, 95,105,111,114, 0,115,115,115, 95, 99,111,108,102, 97, 99, 0,115,115,115,
+ 95,116,101,120,102, 97, 99, 0,115,115,115, 95,102,114,111,110,116, 0,115,115,115, 95, 98, 97, 99,107, 0,115,115,115, 95,102,
+108, 97,103, 0,115,115,115, 95,112,114,101,115,101,116, 0,109, 97,112,116,111, 95,116,101,120,116,117,114,101,100, 0,112, 97,
+100, 52, 0,103,112,117,109, 97,116,101,114,105, 97,108, 0,110, 97,109,101, 91, 50, 53, 54, 93, 0, 42, 98, 98, 0,105, 49, 0,
+106, 49, 0,107, 49, 0,105, 50, 0,106, 50, 0,107, 50, 0,115,101,108, 99,111,108, 49, 0,115,101,108, 99,111,108, 50, 0,113,
+117, 97,116, 91, 52, 93, 0,101,120,112,120, 0,101,120,112,121, 0,101,120,112,122, 0,114, 97,100, 0,114, 97,100, 50, 0,115,
+ 0, 42,109, 97,116, 0, 42,105,109, 97,116, 0,101,108,101,109,115, 0,100,105,115,112, 0, 42,101,100,105,116,101,108,101,109,
+115, 0, 42, 42,109, 97,116, 0,102,108, 97,103, 50, 0,116,111,116, 99,111,108, 0,119,105,114,101,115,105,122,101, 0,114,101,
+110,100,101,114,115,105,122,101, 0,116,104,114,101,115,104, 0, 42,108, 97,115,116,101,108,101,109, 0,118,101, 99, 91, 51, 93,
+ 91, 51, 93, 0, 97,108,102, 97, 0,119,101,105,103,104,116, 0,104, 49, 0,104, 50, 0,102, 49, 0,102, 50, 0,102, 51, 0,104,
+105,100,101, 0,118,101, 99, 91, 52, 93, 0,109, 97,116, 95,110,114, 0,112,110,116,115,117, 0,112,110,116,115,118, 0,114,101,
+115,111,108,117, 0,114,101,115,111,108,118, 0,111,114,100,101,114,117, 0,111,114,100,101,114,118, 0,102,108, 97,103,117, 0,
+102,108, 97,103,118, 0, 42,107,110,111,116,115,117, 0, 42,107,110,111,116,115,118, 0,116,105,108,116, 95,105,110,116,101,114,
+112, 0,114, 97,100,105,117,115, 95,105,110,116,101,114,112, 0, 99,104, 97,114,105,100,120, 0,107,101,114,110, 0,104, 0,110,
+117,114, 98,115, 0, 42,107,101,121,105,110,100,101,120, 0,110,117,114, 98, 0, 42,101,100,105,116,110,117,114, 98, 0, 42, 98,
+101,118,111, 98,106, 0, 42,116, 97,112,101,114,111, 98,106, 0, 42,116,101,120,116,111,110, 99,117,114,118,101, 0, 42,112, 97,
+116,104, 0, 42,107,101,121, 0, 98,101,118, 0,100,114, 97,119,102,108, 97,103, 0,116,119,105,115,116, 95,109,111,100,101, 0,
+112, 97,100, 91, 50, 93, 0,116,119,105,115,116, 95,115,109,111,111,116,104, 0,115,109, 97,108,108, 99, 97,112,115, 95,115, 99,
+ 97,108,101, 0,112, 97,116,104,108,101,110, 0, 98,101,118,114,101,115,111,108, 0,119,105,100,116,104, 0,101,120,116, 49, 0,
+101,120,116, 50, 0,114,101,115,111,108,117, 95,114,101,110, 0,114,101,115,111,108,118, 95,114,101,110, 0, 97, 99,116,110,117,
+ 0, 42,108, 97,115,116,115,101,108, 0,115,112, 97, 99,101,109,111,100,101, 0,115,112, 97, 99,105,110,103, 0,108,105,110,101,
+100,105,115,116, 0,115,104,101, 97,114, 0,102,115,105,122,101, 0,119,111,114,100,115,112, 97, 99,101, 0,117,108,112,111,115,
+ 0,117,108,104,101,105,103,104,116, 0,120,111,102, 0,121,111,102, 0,108,105,110,101,119,105,100,116,104, 0, 42,115,116,114,
+ 0, 42,115,101,108, 98,111,120,101,115, 0, 42,101,100,105,116,102,111,110,116, 0,102, 97,109,105,108,121, 91, 50, 52, 93, 0,
+ 42,118,102,111,110,116, 0, 42,118,102,111,110,116, 98, 0, 42,118,102,111,110,116,105, 0, 42,118,102,111,110,116, 98,105, 0,
+115,101,112, 99,104, 97,114, 0, 99,116,105,109,101, 0,116,111,116, 98,111,120, 0, 97, 99,116, 98,111,120, 0, 42,116, 98, 0,
+115,101,108,115,116, 97,114,116, 0,115,101,108,101,110,100, 0, 42,115,116,114,105,110,102,111, 0, 99,117,114,105,110,102,111,
+ 0,101,102,102,101, 99,116, 0, 42,109,102, 97, 99,101, 0, 42,109,116,102, 97, 99,101, 0, 42,116,102, 97, 99,101, 0, 42,109,
+118,101,114,116, 0, 42,109,101,100,103,101, 0, 42,100,118,101,114,116, 0, 42,109, 99,111,108, 0, 42,109,115,116,105, 99,107,
+121, 0, 42,116,101,120, 99,111,109,101,115,104, 0, 42,109,115,101,108,101, 99,116, 0, 42,101,100,105,116, 95,109,101,115,104,
+ 0,118,100, 97,116, 97, 0,101,100, 97,116, 97, 0,102,100, 97,116, 97, 0,116,111,116,101,100,103,101, 0,116,111,116,102, 97,
+ 99,101, 0,116,111,116,115,101,108,101, 99,116, 0, 97, 99,116, 95,102, 97, 99,101, 0,101,100,105,116,102,108, 97,103, 0, 99,
+117, 98,101,109, 97,112,115,105,122,101, 0,115,109,111,111,116,104,114,101,115,104, 0,115,117, 98,100,105,118, 0,115,117, 98,
+100,105,118,114, 0,115,117, 98,115,117,114,102,116,121,112,101, 0, 42,109,114, 0, 42,112,118, 0, 42,116,112, 97,103,101, 0,
+117,118, 91, 52, 93, 91, 50, 93, 0, 99,111,108, 91, 52, 93, 0,116,114, 97,110,115,112, 0,116,105,108,101, 0,117,110,119,114,
+ 97,112, 0,118, 49, 0,118, 50, 0,118, 51, 0,118, 52, 0,101,100, 99,111,100,101, 0, 99,114,101, 97,115,101, 0, 98,119,101,
+105,103,104,116, 0,100,101,102, 95,110,114, 0, 42,100,119, 0,116,111,116,119,101,105,103,104,116, 0, 99,111, 91, 51, 93, 0,
+110,111, 91, 51, 93, 0,117,118, 91, 50, 93, 0, 99,111, 91, 50, 93, 0,105,110,100,101,120, 0,102, 0,105, 0,115, 91, 50, 53,
+ 54, 93, 0,116,111,116,100,105,115,112, 0, 40, 42,100,105,115,112,115, 41, 40, 41, 0,118, 91, 52, 93, 0,109,105,100, 0,118,
+ 91, 50, 93, 0, 42,102, 97, 99,101,115, 0, 42, 99,111,108,102, 97, 99,101,115, 0, 42,101,100,103,101,115, 0, 42,118,101,114,
+116,115, 0,108,101,118,101,108,115, 0,108,101,118,101,108, 95, 99,111,117,110,116, 0, 99,117,114,114,101,110,116, 0,110,101,
+119,108,118,108, 0,101,100,103,101,108,118,108, 0,112,105,110,108,118,108, 0,114,101,110,100,101,114,108,118,108, 0,117,115,
+101, 95, 99,111,108, 0, 42,101,100,103,101, 95,102,108, 97,103,115, 0, 42,101,100,103,101, 95, 99,114,101, 97,115,101,115, 0,
+ 42,118,101,114,116, 95,109, 97,112, 0, 42,101,100,103,101, 95,109, 97,112, 0, 42,111,108,100, 95,102, 97, 99,101,115, 0, 42,
+111,108,100, 95,101,100,103,101,115, 0,115,116, 97, 99,107,105,110,100,101,120, 0, 42,101,114,114,111,114, 0,109,111,100,105,
+102,105,101,114, 0,115,117, 98,100,105,118, 84,121,112,101, 0,114,101,110,100,101,114, 76,101,118,101,108,115, 0, 42,101,109,
+ 67, 97, 99,104,101, 0, 42,109, 67, 97, 99,104,101, 0,100,101,102, 97,120,105,115, 0,112, 97,100, 91, 54, 93, 0,108,101,110,
+103,116,104, 0,114, 97,110,100,111,109,105,122,101, 0,115,101,101,100, 0, 42,111, 98, 95, 97,114,109, 0, 42,115,116, 97,114,
+116, 95, 99, 97,112, 0, 42,101,110,100, 95, 99, 97,112, 0, 42, 99,117,114,118,101, 95,111, 98, 0, 42,111,102,102,115,101,116,
+ 95,111, 98, 0,111,102,102,115,101,116, 91, 51, 93, 0,115, 99, 97,108,101, 91, 51, 93, 0,109,101,114,103,101, 95,100,105,115,
+116, 0,102,105,116, 95,116,121,112,101, 0,111,102,102,115,101,116, 95,116,121,112,101, 0, 99,111,117,110,116, 0, 97,120,105,
+115, 0,116,111,108,101,114, 97,110, 99,101, 0, 42,109,105,114,114,111,114, 95,111, 98, 0,115,112,108,105,116, 95, 97,110,103,
+108,101, 0,118, 97,108,117,101, 0,114,101,115, 0,118, 97,108, 95,102,108, 97,103,115, 0,108,105,109, 95,102,108, 97,103,115,
+ 0,101, 95,102,108, 97,103,115, 0, 98,101,118,101,108, 95, 97,110,103,108,101, 0,100,101,102,103,114,112, 95,110, 97,109,101,
+ 91, 51, 50, 93, 0, 42,100,111,109, 97,105,110, 0, 42,102,108,111,119, 0, 42, 99,111,108,108, 0,116,105,109,101, 0, 42,116,
+101,120,116,117,114,101, 0,115,116,114,101,110,103,116,104, 0,100,105,114,101, 99,116,105,111,110, 0,109,105,100,108,101,118,
+101,108, 0,116,101,120,109, 97,112,112,105,110,103, 0, 42,109, 97,112, 95,111, 98,106,101, 99,116, 0,117,118,108, 97,121,101,
+114, 95,110, 97,109,101, 91, 51, 50, 93, 0,117,118,108, 97,121,101,114, 95,116,109,112, 0, 42,112,114,111,106,101, 99,116,111,
+114,115, 91, 49, 48, 93, 0, 42,105,109, 97,103,101, 0,110,117,109, 95,112,114,111,106,101, 99,116,111,114,115, 0, 97,115,112,
+101, 99,116,120, 0, 97,115,112,101, 99,116,121, 0,115, 99, 97,108,101,120, 0,115, 99, 97,108,101,121, 0,112,101,114, 99,101,
+110,116, 0,102, 97, 99,101, 67,111,117,110,116, 0,102, 97, 99, 0,114,101,112,101, 97,116, 0, 42,111, 98,106,101, 99,116, 99,
+101,110,116,101,114, 0,115,116, 97,114,116,120, 0,115,116, 97,114,116,121, 0,104,101,105,103,104,116, 0,110, 97,114,114,111,
+119, 0,115,112,101,101,100, 0,100, 97,109,112, 0,102, 97,108,108,111,102,102, 0,116,105,109,101,111,102,102,115, 0,108,105,
+102,101,116,105,109,101, 0,100,101,102,111,114,109,102,108, 97,103, 0,109,117,108,116,105, 0, 42,112,114,101,118, 67,111,115,
+ 0,115,117, 98,116, 97,114,103,101,116, 91, 51, 50, 93, 0,112, 97,114,101,110,116,105,110,118, 91, 52, 93, 91, 52, 93, 0, 99,
+101,110,116, 91, 51, 93, 0, 42,105,110,100,101,120, 97,114, 0,116,111,116,105,110,100,101,120, 0,102,111,114, 99,101, 0, 42,
+ 99,108,111,116,104, 79, 98,106,101, 99,116, 0, 42,115,105,109, 95,112, 97,114,109,115, 0, 42, 99,111,108,108, 95,112, 97,114,
+109,115, 0, 42,112,111,105,110,116, 95, 99, 97, 99,104,101, 0,112,116, 99, 97, 99,104,101,115, 0, 42,120, 0, 42,120,110,101,
+119, 0, 42,120,111,108,100, 0, 42, 99,117,114,114,101,110,116, 95,120,110,101,119, 0, 42, 99,117,114,114,101,110,116, 95,120,
+ 0, 42, 99,117,114,114,101,110,116, 95,118, 0, 42,109,102, 97, 99,101,115, 0,110,117,109,118,101,114,116,115, 0,110,117,109,
+102, 97, 99,101,115, 0, 42, 98,118,104,116,114,101,101, 0, 42,118, 0, 42,100,109, 0, 99,102,114, 97, 0,111,112,101,114, 97,
+116,105,111,110, 0,118,101,114,116,101,120, 0,116,111,116,105,110,102,108,117,101,110, 99,101, 0,103,114,105,100,115,105,122,
+101, 0, 42, 98,105,110,100,105,110,102,108,117,101,110, 99,101,115, 0, 42, 98,105,110,100,111,102,102,115,101,116,115, 0, 42,
+ 98,105,110,100, 99, 97,103,101, 99,111,115, 0,116,111,116, 99, 97,103,101,118,101,114,116, 0, 42,100,121,110,103,114,105,100,
+ 0, 42,100,121,110,105,110,102,108,117,101,110, 99,101,115, 0, 42,100,121,110,118,101,114,116,115, 0, 42,112, 97,100, 50, 0,
+100,121,110,103,114,105,100,115,105,122,101, 0,100,121,110, 99,101,108,108,109,105,110, 91, 51, 93, 0,100,121,110, 99,101,108,
+108,119,105,100,116,104, 0, 98,105,110,100,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 42, 98,105,110,100,119,101,105,103,104,116,
+115, 0, 42, 98,105,110,100, 99,111,115, 0, 40, 42, 98,105,110,100,102,117,110, 99, 41, 40, 41, 0, 42,112,115,121,115, 0,116,
+111,116,100,109,118,101,114,116, 0,116,111,116,100,109,101,100,103,101, 0,116,111,116,100,109,102, 97, 99,101, 0,112,111,115,
+105,116,105,111,110, 0,114, 97,110,100,111,109, 95,112,111,115,105,116,105,111,110, 0, 42,102, 97, 99,101,112, 97, 0,118,103,
+114,111,117,112, 0,112,114,111,116,101, 99,116, 0,108,118,108, 0,115, 99,117,108,112,116,108,118,108, 0,116,111,116,108,118,
+108, 0,115,105,109,112,108,101, 0, 42,102,115,115, 0, 42,116, 97,114,103,101,116, 0, 42, 97,117,120, 84, 97,114,103,101,116,
+ 0,118,103,114,111,117,112, 95,110, 97,109,101, 91, 51, 50, 93, 0,107,101,101,112, 68,105,115,116, 0,115,104,114,105,110,107,
+ 84,121,112,101, 0,115,104,114,105,110,107, 79,112,116,115, 0,112,114,111,106, 65,120,105,115, 0,115,117, 98,115,117,114,102,
+ 76,101,118,101,108,115, 0, 42,111,114,105,103,105,110, 0,102, 97, 99,116,111,114, 0,108,105,109,105,116, 91, 50, 93, 0,111,
+114,105,103,105,110, 79,112,116,115, 0,111,102,102,115,101,116, 95,102, 97, 99, 0, 99,114,101, 97,115,101, 95,105,110,110,101,
+114, 0, 99,114,101, 97,115,101, 95,111,117,116,101,114, 0, 99,114,101, 97,115,101, 95,114,105,109, 0, 42,111, 98, 95, 97,120,
+105,115, 0,115,116,101,112,115, 0,114,101,110,100,101,114, 95,115,116,101,112,115, 0,105,116,101,114, 0,115, 99,114,101,119,
+ 95,111,102,115, 0, 97,110,103,108,101, 0,112,110,116,115,119, 0,111,112,110,116,115,117, 0,111,112,110,116,115,118, 0,111,
+112,110,116,115,119, 0,116,121,112,101,117, 0,116,121,112,101,118, 0,116,121,112,101,119, 0,102,117, 0,102,118, 0,102,119,
+ 0,100,117, 0,100,118, 0,100,119, 0, 42,100,101,102, 0, 42,108, 97,116,116,105, 99,101,100, 97,116, 97, 0,108, 97,116,109,
+ 97,116, 91, 52, 93, 91, 52, 93, 0, 42,101,100,105,116,108, 97,116,116, 0,118,101, 99, 91, 56, 93, 91, 51, 93, 0, 42,115, 99,
+117,108,112,116, 0,112, 97,114,116,121,112,101, 0,112, 97,114, 49, 0,112, 97,114, 50, 0,112, 97,114, 51, 0,112, 97,114,115,
+117, 98,115,116,114, 91, 51, 50, 93, 0, 42,116,114, 97, 99,107, 0, 42,112,114,111,120,121, 0, 42,112,114,111,120,121, 95,103,
+114,111,117,112, 0, 42,112,114,111,120,121, 95,102,114,111,109, 0, 42, 97, 99,116,105,111,110, 0, 42,112,111,115,101,108,105,
+ 98, 0, 42,112,111,115,101, 0, 42,103,112,100, 0, 97,118,115, 0, 42,109,112, 97,116,104, 0, 99,111,110,115,116,114, 97,105,
+110,116, 67,104, 97,110,110,101,108,115, 0,100,101,102, 98, 97,115,101, 0,109,111,100,105,102,105,101,114,115, 0,114,101,115,
+116,111,114,101, 95,109,111,100,101, 0, 42,109, 97,116, 98,105,116,115, 0, 97, 99,116, 99,111,108, 0,100,108,111, 99, 91, 51,
+ 93, 0,111,114,105,103, 91, 51, 93, 0,100,115,105,122,101, 91, 51, 93, 0,100,114,111,116, 91, 51, 93, 0,100,113,117, 97,116,
+ 91, 52, 93, 0,114,111,116, 65,120,105,115, 91, 51, 93, 0,100,114,111,116, 65,120,105,115, 91, 51, 93, 0,114,111,116, 65,110,
+103,108,101, 0,100,114,111,116, 65,110,103,108,101, 0,111, 98,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 99,111,110,115,116,105,
+110,118, 91, 52, 93, 91, 52, 93, 0,108, 97,121, 0, 99,111,108, 98,105,116,115, 0,116,114, 97,110,115,102,108, 97,103, 0,112,
+114,111,116,101, 99,116,102,108, 97,103, 0,116,114, 97, 99,107,102,108, 97,103, 0,117,112,102,108, 97,103, 0,110,108, 97,102,
+108, 97,103, 0,105,112,111,102,108, 97,103, 0,105,112,111,119,105,110, 0,115, 99, 97,102,108, 97,103, 0,115, 99, 97,118,105,
+115,102,108, 97,103, 0, 98,111,117,110,100,116,121,112,101, 0,100,117,112,111,110, 0,100,117,112,111,102,102, 0,100,117,112,
+115,116, 97, 0,100,117,112,101,110,100, 0,115,102, 0,109, 97,115,115, 0,100, 97,109,112,105,110,103, 0,105,110,101,114,116,
+105, 97, 0,102,111,114,109,102, 97, 99,116,111,114, 0,114,100, 97,109,112,105,110,103, 0,109, 97,114,103,105,110, 0,109, 97,
+120, 95,118,101,108, 0,109,105,110, 95,118,101,108, 0,109, 95, 99,111,110,116, 97, 99,116, 80,114,111, 99,101,115,115,105,110,
+103, 84,104,114,101,115,104,111,108,100, 0,114,111,116,109,111,100,101, 0,100,116, 0,100,116,120, 0,101,109,112,116,121, 95,
+100,114, 97,119,116,121,112,101, 0,112, 97,100, 49, 91, 51, 93, 0,101,109,112,116,121, 95,100,114, 97,119,115,105,122,101, 0,
+100,117,112,102, 97, 99,101,115, 99, 97, 0,112,114,111,112, 0,115,101,110,115,111,114,115, 0, 99,111,110,116,114,111,108,108,
+101,114,115, 0, 97, 99,116,117, 97,116,111,114,115, 0, 98, 98,115,105,122,101, 91, 51, 93, 0, 97, 99,116,100,101,102, 0,103,
+ 97,109,101,102,108, 97,103, 0,103, 97,109,101,102,108, 97,103, 50, 0, 42, 98,115,111,102,116, 0,115,111,102,116,102,108, 97,
+103, 0, 97,110,105,115,111,116,114,111,112,105, 99, 70,114,105, 99,116,105,111,110, 91, 51, 93, 0, 99,111,110,115,116,114, 97,
+105,110,116,115, 0,110,108, 97,115,116,114,105,112,115, 0,104,111,111,107,115, 0,112, 97,114,116,105, 99,108,101,115,121,115,
+116,101,109, 0, 42,115,111,102,116, 0, 42,100,117,112, 95,103,114,111,117,112, 0,102,108,117,105,100,115,105,109, 70,108, 97,
+103, 0,114,101,115,116,114,105, 99,116,102,108, 97,103, 0,115,104, 97,112,101,110,114, 0,115,104, 97,112,101,102,108, 97,103,
+ 0,114,101, 99, 97,108, 99,111, 0, 98,111,100,121, 95,116,121,112,101, 0, 42,102,108,117,105,100,115,105,109, 83,101,116,116,
+105,110,103,115, 0, 42,100,101,114,105,118,101,100, 68,101,102,111,114,109, 0, 42,100,101,114,105,118,101,100, 70,105,110, 97,
+108, 0,108, 97,115,116, 68, 97,116, 97, 77, 97,115,107, 0,115,116, 97,116,101, 0,105,110,105,116, 95,115,116, 97,116,101, 0,
+103,112,117,108, 97,109,112, 0,112, 99, 95,105,100,115, 0, 42,100,117,112,108,105,108,105,115,116, 0, 99,117,114,105,110,100,
+101,120, 0, 97, 99,116,105,118,101, 0,111,114,105,103,108, 97,121, 0,110,111, 95,100,114, 97,119, 0, 97,110,105,109, 97,116,
+101,100, 0,111,109, 97,116, 91, 52, 93, 91, 52, 93, 0,111,114, 99,111, 91, 51, 93, 0,100,101,102,108,101, 99,116, 0,102,111,
+114, 99,101,102,105,101,108,100, 0,115,104, 97,112,101, 0,116,101,120, 95,109,111,100,101, 0,107,105,110,107, 0,107,105,110,
+107, 95, 97,120,105,115, 0,122,100,105,114, 0,102, 95,115,116,114,101,110,103,116,104, 0,102, 95,100, 97,109,112, 0,102, 95,
+102,108,111,119, 0,102, 95,115,105,122,101, 0,102, 95,112,111,119,101,114, 0,109, 97,120,100,105,115,116, 0,109,105,110,100,
+105,115,116, 0,102, 95,112,111,119,101,114, 95,114, 0,109, 97,120,114, 97,100, 0,109,105,110,114, 97,100, 0,112,100,101,102,
+ 95,100, 97,109,112, 0,112,100,101,102, 95,114,100, 97,109,112, 0,112,100,101,102, 95,112,101,114,109, 0,112,100,101,102, 95,
+102,114,105, 99,116, 0,112,100,101,102, 95,114,102,114,105, 99,116, 0,112,100,101,102, 95,115,116,105, 99,107,110,101,115,115,
+ 0, 97, 98,115,111,114,112,116,105,111,110, 0,112,100,101,102, 95,115, 98,100, 97,109,112, 0,112,100,101,102, 95,115, 98,105,
+102,116, 0,112,100,101,102, 95,115, 98,111,102,116, 0, 99,108,117,109,112, 95,102, 97, 99, 0, 99,108,117,109,112, 95,112,111,
+119, 0,107,105,110,107, 95,102,114,101,113, 0,107,105,110,107, 95,115,104, 97,112,101, 0,107,105,110,107, 95, 97,109,112, 0,
+102,114,101,101, 95,101,110,100, 0,116,101,120, 95,110, 97, 98,108, 97, 0, 42,114,110,103, 0,102, 95,110,111,105,115,101, 0,
+119,101,105,103,104,116, 91, 49, 51, 93, 0,103,108,111, 98, 97,108, 95,103,114, 97,118,105,116,121, 0,114,116, 91, 51, 93, 0,
+102,114, 97,109,101, 0,116,111,116,112,111,105,110,116, 0,100, 97,116, 97, 95,116,121,112,101,115, 0, 42,105,110,100,101,120,
+ 95, 97,114,114, 97,121, 0, 42,100, 97,116, 97, 91, 56, 93, 0, 42, 99,117,114, 91, 56, 93, 0,115,116,101,112, 0,115,105,109,
+102,114, 97,109,101, 0,115,116, 97,114,116,102,114, 97,109,101, 0,101,110,100,102,114, 97,109,101, 0,101,100,105,116,102,114,
+ 97,109,101, 0,108, 97,115,116, 95,101,120, 97, 99,116, 0,110, 97,109,101, 91, 54, 52, 93, 0,112,114,101,118, 95,110, 97,109,
+101, 91, 54, 52, 93, 0,105,110,102,111, 91, 54, 52, 93, 0,112, 97,116,104, 91, 50, 52, 48, 93, 0,109,101,109, 95, 99, 97, 99,
+104,101, 0, 42,101,100,105,116, 0, 40, 42,102,114,101,101, 95,101,100,105,116, 41, 40, 41, 0,108,105,110, 83,116,105,102,102,
+ 0, 97,110,103, 83,116,105,102,102, 0,118,111,108,117,109,101, 0,118,105,116,101,114, 97,116,105,111,110,115, 0,112,105,116,
+101,114, 97,116,105,111,110,115, 0,100,105,116,101,114, 97,116,105,111,110,115, 0, 99,105,116,101,114, 97,116,105,111,110,115,
+ 0,107, 83, 82, 72, 82, 95, 67, 76, 0,107, 83, 75, 72, 82, 95, 67, 76, 0,107, 83, 83, 72, 82, 95, 67, 76, 0,107, 83, 82, 95,
+ 83, 80, 76, 84, 95, 67, 76, 0,107, 83, 75, 95, 83, 80, 76, 84, 95, 67, 76, 0,107, 83, 83, 95, 83, 80, 76, 84, 95, 67, 76, 0,
+107, 86, 67, 70, 0,107, 68, 80, 0,107, 68, 71, 0,107, 76, 70, 0,107, 80, 82, 0,107, 86, 67, 0,107, 68, 70, 0,107, 77, 84,
+ 0,107, 67, 72, 82, 0,107, 75, 72, 82, 0,107, 83, 72, 82, 0,107, 65, 72, 82, 0, 99,111,108,108,105,115,105,111,110,102,108,
+ 97,103,115, 0,110,117,109, 99,108,117,115,116,101,114,105,116,101,114, 97,116,105,111,110,115, 0,119,101,108,100,105,110,103,
+ 0,116,111,116,115,112,114,105,110,103, 0, 42, 98,112,111,105,110,116, 0, 42, 98,115,112,114,105,110,103, 0,109,115,103, 95,
+108,111, 99,107, 0,109,115,103, 95,118, 97,108,117,101, 0,110,111,100,101,109, 97,115,115, 0,110, 97,109,101,100, 86, 71, 95,
+ 77, 97,115,115, 91, 51, 50, 93, 0,103,114, 97,118, 0,109,101,100,105, 97,102,114,105, 99,116, 0,114,107,108,105,109,105,116,
+ 0,112,104,121,115,105, 99,115, 95,115,112,101,101,100, 0,103,111, 97,108,115,112,114,105,110,103, 0,103,111, 97,108,102,114,
+105, 99,116, 0,109,105,110,103,111, 97,108, 0,109, 97,120,103,111, 97,108, 0,100,101,102,103,111, 97,108, 0,118,101,114,116,
+103,114,111,117,112, 0,110, 97,109,101,100, 86, 71, 95, 83,111,102,116,103,111, 97,108, 91, 51, 50, 93, 0,102,117,122,122,121,
+110,101,115,115, 0,105,110,115,112,114,105,110,103, 0,105,110,102,114,105, 99,116, 0,110, 97,109,101,100, 86, 71, 95, 83,112,
+114,105,110,103, 95, 75, 91, 51, 50, 93, 0,101,102,114, 97, 0,105,110,116,101,114,118, 97,108, 0,108,111, 99, 97,108, 0,115,
+111,108,118,101,114,102,108, 97,103,115, 0, 42, 42,107,101,121,115, 0,116,111,116,112,111,105,110,116,107,101,121, 0,115,101,
+ 99,111,110,100,115,112,114,105,110,103, 0, 99,111,108, 98, 97,108,108, 0, 98, 97,108,108,100, 97,109,112, 0, 98, 97,108,108,
+115,116,105,102,102, 0,115, 98, 99, 95,109,111,100,101, 0, 97,101,114,111,101,100,103,101, 0,109,105,110,108,111,111,112,115,
+ 0,109, 97,120,108,111,111,112,115, 0, 99,104,111,107,101, 0,115,111,108,118,101,114, 95, 73, 68, 0,112,108, 97,115,116,105,
+ 99, 0,115,112,114,105,110,103,112,114,101,108,111, 97,100, 0, 42,115, 99,114, 97,116, 99,104, 0,115,104,101, 97,114,115,116,
+105,102,102, 0,105,110,112,117,115,104, 0, 42,112,111,105,110,116, 99, 97, 99,104,101, 0, 42,101,102,102,101, 99,116,111,114,
+ 95,119,101,105,103,104,116,115, 0,108, 99,111,109, 91, 51, 93, 0,108,114,111,116, 91, 51, 93, 91, 51, 93, 0,108,115, 99, 97,
+108,101, 91, 51, 93, 91, 51, 93, 0,112, 97,100, 52, 91, 52, 93, 0, 42,102,109,100, 0,115,104,111,119, 95, 97,100,118, 97,110,
+ 99,101,100,111,112,116,105,111,110,115, 0,114,101,115,111,108,117,116,105,111,110,120,121,122, 0,112,114,101,118,105,101,119,
+114,101,115,120,121,122, 0,114,101, 97,108,115,105,122,101, 0,103,117,105, 68,105,115,112,108, 97,121, 77,111,100,101, 0,114,
+101,110,100,101,114, 68,105,115,112,108, 97,121, 77,111,100,101, 0,118,105,115, 99,111,115,105,116,121, 86, 97,108,117,101, 0,
+118,105,115, 99,111,115,105,116,121, 77,111,100,101, 0,118,105,115, 99,111,115,105,116,121, 69,120,112,111,110,101,110,116, 0,
+103,114, 97,118,120, 0,103,114, 97,118,121, 0,103,114, 97,118,122, 0, 97,110,105,109, 83,116, 97,114,116, 0, 97,110,105,109,
+ 69,110,100, 0, 98, 97,107,101, 83,116, 97,114,116, 0, 98, 97,107,101, 69,110,100, 0,103,115,116, 97,114, 0,109, 97,120, 82,
+101,102,105,110,101, 0,105,110,105, 86,101,108,120, 0,105,110,105, 86,101,108,121, 0,105,110,105, 86,101,108,122, 0, 42,111,
+114,103, 77,101,115,104, 0, 42,109,101,115,104, 83,117,114,102, 97, 99,101, 0, 42,109,101,115,104, 66, 66, 0,115,117,114,102,
+100, 97,116, 97, 80, 97,116,104, 91, 50, 52, 48, 93, 0, 98, 98, 83,116, 97,114,116, 91, 51, 93, 0, 98, 98, 83,105,122,101, 91,
+ 51, 93, 0,116,121,112,101, 70,108, 97,103,115, 0,100,111,109, 97,105,110, 78,111,118,101, 99,103,101,110, 0,118,111,108,117,
+109,101, 73,110,105,116, 84,121,112,101, 0,112, 97,114,116, 83,108,105,112, 86, 97,108,117,101, 0,103,101,110,101,114, 97,116,
+101, 84,114, 97, 99,101,114,115, 0,103,101,110,101,114, 97,116,101, 80, 97,114,116,105, 99,108,101,115, 0,115,117,114,102, 97,
+ 99,101, 83,109,111,111,116,104,105,110,103, 0,115,117,114,102, 97, 99,101, 83,117, 98,100,105,118,115, 0,112, 97,114,116,105,
+ 99,108,101, 73,110,102, 83,105,122,101, 0,112, 97,114,116,105, 99,108,101, 73,110,102, 65,108,112,104, 97, 0,102, 97,114, 70,
+105,101,108,100, 83,105,122,101, 0, 42,109,101,115,104, 83,117,114,102, 78,111,114,109, 97,108,115, 0, 99,112,115, 84,105,109,
+101, 83,116, 97,114,116, 0, 99,112,115, 84,105,109,101, 69,110,100, 0, 99,112,115, 81,117, 97,108,105,116,121, 0, 97,116,116,
+114, 97, 99,116,102,111,114, 99,101, 83,116,114,101,110,103,116,104, 0, 97,116,116,114, 97, 99,116,102,111,114, 99,101, 82, 97,
+100,105,117,115, 0,118,101,108,111, 99,105,116,121,102,111,114, 99,101, 83,116,114,101,110,103,116,104, 0,118,101,108,111, 99,
+105,116,121,102,111,114, 99,101, 82, 97,100,105,117,115, 0,108, 97,115,116,103,111,111,100,102,114, 97,109,101, 0,109,105,115,
+116,121,112,101, 0,104,111,114,114, 0,104,111,114,103, 0,104,111,114, 98, 0,122,101,110,114, 0,122,101,110,103, 0,122,101,
+110, 98, 0,102, 97,115,116, 99,111,108, 0,101,120,112,111,115,117,114,101, 0,101,120,112, 0,114, 97,110,103,101, 0,108,105,
+110,102, 97, 99, 0,108,111,103,102, 97, 99, 0,103,114, 97,118,105,116,121, 0, 97, 99,116,105,118,105,116,121, 66,111,120, 82,
+ 97,100,105,117,115, 0,115,107,121,116,121,112,101, 0,111, 99, 99,108,117,115,105,111,110, 82,101,115, 0,112,104,121,115,105,
+ 99,115, 69,110,103,105,110,101, 0,116,105, 99,114, 97,116,101, 0,109, 97,120,108,111,103,105, 99,115,116,101,112, 0,112,104,
+121,115,117, 98,115,116,101,112, 0,109, 97,120,112,104,121,115,116,101,112, 0,109,105,115,105, 0,109,105,115,116,115,116, 97,
+ 0,109,105,115,116,100,105,115,116, 0,109,105,115,116,104,105, 0,115,116, 97,114,114, 0,115,116, 97,114,103, 0,115,116, 97,
+114, 98, 0,115,116, 97,114,107, 0,115,116, 97,114,115,105,122,101, 0,115,116, 97,114,109,105,110,100,105,115,116, 0,115,116,
+ 97,114,100,105,115,116, 0,115,116, 97,114, 99,111,108,110,111,105,115,101, 0,100,111,102,115,116, 97, 0,100,111,102,101,110,
+100, 0,100,111,102,109,105,110, 0,100,111,102,109, 97,120, 0, 97,111,100,105,115,116, 0, 97,111,100,105,115,116,102, 97, 99,
+ 0, 97,111,101,110,101,114,103,121, 0, 97,111, 98,105, 97,115, 0, 97,111,109,111,100,101, 0, 97,111,115, 97,109,112, 0, 97,
+111,109,105,120, 0, 97,111, 99,111,108,111,114, 0, 97,111, 95, 97,100, 97,112,116, 95,116,104,114,101,115,104, 0, 97,111, 95,
+ 97,100, 97,112,116, 95,115,112,101,101,100, 95,102, 97, 99, 0, 97,111, 95, 97,112,112,114,111,120, 95,101,114,114,111,114, 0,
+ 97,111, 95, 97,112,112,114,111,120, 95, 99,111,114,114,101, 99,116,105,111,110, 0, 97,111, 95,105,110,100,105,114,101, 99,116,
+ 95,101,110,101,114,103,121, 0, 97,111, 95,101,110,118, 95,101,110,101,114,103,121, 0, 97,111, 95,112, 97,100, 50, 0, 97,111,
+ 95,105,110,100,105,114,101, 99,116, 95, 98,111,117,110, 99,101,115, 0, 97,111, 95,112, 97,100, 0, 97,111, 95,115, 97,109,112,
+ 95,109,101,116,104,111,100, 0, 97,111, 95,103, 97,116,104,101,114, 95,109,101,116,104,111,100, 0, 97,111, 95, 97,112,112,114,
+111,120, 95,112, 97,115,115,101,115, 0, 42, 97,111,115,112,104,101,114,101, 0, 42, 97,111,116, 97, 98,108,101,115, 0,112, 97,
+100, 91, 51, 93, 0,115,101,108, 99,111,108, 0,115,120, 0,115,121, 0, 42,108,112, 70,111,114,109, 97,116, 0, 42,108,112, 80,
+ 97,114,109,115, 0, 99, 98, 70,111,114,109, 97,116, 0, 99, 98, 80, 97,114,109,115, 0,102, 99, 99, 84,121,112,101, 0,102, 99,
+ 99, 72, 97,110,100,108,101,114, 0,100,119, 75,101,121, 70,114, 97,109,101, 69,118,101,114,121, 0,100,119, 81,117, 97,108,105,
+116,121, 0,100,119, 66,121,116,101,115, 80,101,114, 83,101, 99,111,110,100, 0,100,119, 70,108, 97,103,115, 0,100,119, 73,110,
+116,101,114,108,101, 97,118,101, 69,118,101,114,121, 0, 97,118,105, 99,111,100,101, 99,110, 97,109,101, 91, 49, 50, 56, 93, 0,
+ 42, 99,100, 80, 97,114,109,115, 0, 42,112, 97,100, 0, 99,100, 83,105,122,101, 0,113,116, 99,111,100,101, 99,110, 97,109,101,
+ 91, 49, 50, 56, 93, 0, 99,111,100,101, 99, 84,121,112,101, 0, 99,111,100,101, 99, 83,112, 97,116,105, 97,108, 81,117, 97,108,
+105,116,121, 0, 99,111,100,101, 99, 0, 99,111,100,101, 99, 70,108, 97,103,115, 0, 99,111,108,111,114, 68,101,112,116,104, 0,
+ 99,111,100,101, 99, 84,101,109,112,111,114, 97,108, 81,117, 97,108,105,116,121, 0,109,105,110, 83,112, 97,116,105, 97,108, 81,
+117, 97,108,105,116,121, 0,109,105,110, 84,101,109,112,111,114, 97,108, 81,117, 97,108,105,116,121, 0,107,101,121, 70,114, 97,
+109,101, 82, 97,116,101, 0, 98,105,116, 82, 97,116,101, 0, 97,117,100,105,111, 99,111,100,101, 99, 84,121,112,101, 0, 97,117,
+100,105,111, 83, 97,109,112,108,101, 82, 97,116,101, 0, 97,117,100,105,111, 66,105,116, 68,101,112,116,104, 0, 97,117,100,105,
+111, 67,104, 97,110,110,101,108,115, 0, 97,117,100,105,111, 67,111,100,101, 99, 70,108, 97,103,115, 0, 97,117,100,105,111, 66,
+105,116, 82, 97,116,101, 0, 97,117,100,105,111, 95, 99,111,100,101, 99, 0,118,105,100,101,111, 95, 98,105,116,114, 97,116,101,
+ 0, 97,117,100,105,111, 95, 98,105,116,114, 97,116,101, 0, 97,117,100,105,111, 95,109,105,120,114, 97,116,101, 0, 97,117,100,
+105,111, 95,118,111,108,117,109,101, 0,103,111,112, 95,115,105,122,101, 0,114, 99, 95,109,105,110, 95,114, 97,116,101, 0,114,
+ 99, 95,109, 97,120, 95,114, 97,116,101, 0,114, 99, 95, 98,117,102,102,101,114, 95,115,105,122,101, 0,109,117,120, 95,112, 97,
+ 99,107,101,116, 95,115,105,122,101, 0,109,117,120, 95,114, 97,116,101, 0,109,105,120,114, 97,116,101, 0,109, 97,105,110, 0,
+115,112,101,101,100, 95,111,102, 95,115,111,117,110,100, 0,100,111,112,112,108,101,114, 95,102, 97, 99,116,111,114, 0,100,105,
+115,116, 97,110, 99,101, 95,109,111,100,101,108, 0, 42,109, 97,116, 95,111,118,101,114,114,105,100,101, 0, 42,108,105,103,104,
+116, 95,111,118,101,114,114,105,100,101, 0,108, 97,121, 95,122,109, 97,115,107, 0,108, 97,121,102,108, 97,103, 0,112, 97,115,
+115,102,108, 97,103, 0,112, 97,115,115, 95,120,111,114, 0, 42, 97,118,105, 99,111,100,101, 99,100, 97,116, 97, 0, 42,113,116,
+ 99,111,100,101, 99,100, 97,116, 97, 0,113,116, 99,111,100,101, 99,115,101,116,116,105,110,103,115, 0,102,102, 99,111,100,101,
+ 99,100, 97,116, 97, 0,115,117, 98,102,114, 97,109,101, 0,112,115,102,114, 97, 0,112,101,102,114, 97, 0,105,109, 97,103,101,
+115, 0,102,114, 97,109, 97,112,116,111, 0,116,104,114,101, 97,100,115, 0,102,114, 97,109,101,108,101,110, 0, 98,108,117,114,
+102, 97, 99, 0,101,100,103,101, 82, 0,101,100,103,101, 71, 0,101,100,103,101, 66, 0,102,117,108,108,115, 99,114,101,101,110,
+ 0,120,112,108, 97,121, 0,121,112,108, 97,121, 0,102,114,101,113,112,108, 97,121, 0, 97,116,116,114,105, 98, 0,114,116, 50,
+ 0,102,114, 97,109,101, 95,115,116,101,112, 0,115,116,101,114,101,111,109,111,100,101, 0,100,105,109,101,110,115,105,111,110,
+115,112,114,101,115,101,116, 0,109, 97,120,105,109,115,105,122,101, 0,120,115, 99,104, 0,121,115, 99,104, 0,120,112, 97,114,
+116,115, 0,121,112, 97,114,116,115, 0,119,105,110,112,111,115, 0,112,108, 97,110,101,115, 0,105,109,116,121,112,101, 0,115,
+117, 98,105,109,116,121,112,101, 0,113,117, 97,108,105,116,121, 0,100,105,115,112,108, 97,121,109,111,100,101, 0,114,112, 97,
+100, 49, 0,114,112, 97,100, 50, 0,115, 99,101,109,111,100,101, 0,114, 97,121,116,114, 97, 99,101, 95,111,112,116,105,111,110,
+115, 0,114, 97,121,116,114, 97, 99,101, 95,115,116,114,117, 99,116,117,114,101, 0,114,101,110,100,101,114,101,114, 0,111, 99,
+114,101,115, 0, 97,108,112,104, 97,109,111,100,101, 0,111,115, 97, 0,102,114,115, 95,115,101, 99, 0,101,100,103,101,105,110,
+116, 0,115, 97,102,101,116,121, 0, 98,111,114,100,101,114, 0,100,105,115,112,114,101, 99,116, 0,108, 97,121,101,114,115, 0,
+ 97, 99,116,108, 97,121, 0,109, 98,108,117,114, 95,115, 97,109,112,108,101,115, 0,120, 97,115,112, 0,121, 97,115,112, 0,102,
+114,115, 95,115,101, 99, 95, 98, 97,115,101, 0,103, 97,117,115,115, 0, 99,111,108,111,114, 95,109,103,116, 95,102,108, 97,103,
+ 0,112,111,115,116,103, 97,109,109, 97, 0,112,111,115,116,104,117,101, 0,112,111,115,116,115, 97,116, 0,100,105,116,104,101,
+114, 95,105,110,116,101,110,115,105,116,121, 0, 98, 97,107,101, 95,111,115, 97, 0, 98, 97,107,101, 95,102,105,108,116,101,114,
+ 0, 98, 97,107,101, 95,109,111,100,101, 0, 98, 97,107,101, 95,102,108, 97,103, 0, 98, 97,107,101, 95,110,111,114,109, 97,108,
+ 95,115,112, 97, 99,101, 0, 98, 97,107,101, 95,113,117, 97,100, 95,115,112,108,105,116, 0, 98, 97,107,101, 95,109, 97,120,100,
+105,115,116, 0, 98, 97,107,101, 95, 98,105, 97,115,100,105,115,116, 0, 98, 97,107,101, 95,112, 97,100, 0, 98, 97, 99,107, 98,
+117,102, 91, 49, 54, 48, 93, 0,112,105, 99, 91, 49, 54, 48, 93, 0,115,116, 97,109,112, 0,115,116, 97,109,112, 95,102,111,110,
+116, 95,105,100, 0,115,116, 97,109,112, 95,117,100, 97,116, 97, 91, 49, 54, 48, 93, 0,102,103, 95,115,116, 97,109,112, 91, 52,
+ 93, 0, 98,103, 95,115,116, 97,109,112, 91, 52, 93, 0,115,101,113, 95,112,114,101,118, 95,116,121,112,101, 0,115,101,113, 95,
+114,101,110,100, 95,116,121,112,101, 0,115,101,113, 95,102,108, 97,103, 0,112, 97,100, 53, 91, 53, 93, 0,115,105,109,112,108,
+105,102,121, 95,102,108, 97,103, 0,115,105,109,112,108,105,102,121, 95,115,117, 98,115,117,114,102, 0,115,105,109,112,108,105,
+102,121, 95,115,104, 97,100,111,119,115, 97,109,112,108,101,115, 0,115,105,109,112,108,105,102,121, 95,112, 97,114,116,105, 99,
+108,101,115, 0,115,105,109,112,108,105,102,121, 95, 97,111,115,115,115, 0, 99,105,110,101,111,110,119,104,105,116,101, 0, 99,
+105,110,101,111,110, 98,108, 97, 99,107, 0, 99,105,110,101,111,110,103, 97,109,109, 97, 0,106,112, 50, 95,112,114,101,115,101,
+116, 0,106,112, 50, 95,100,101,112,116,104, 0,114,112, 97,100, 51, 0,100,111,109,101,114,101,115, 0,100,111,109,101,109,111,
+100,101, 0,100,111,109,101, 97,110,103,108,101, 0,100,111,109,101,116,105,108,116, 0,100,111,109,101,114,101,115, 98,117,102,
+ 0, 42,100,111,109,101,116,101,120,116, 0,101,110,103,105,110,101, 91, 51, 50, 93, 0,112, 97,114,116,105, 99,108,101, 95,112,
+101,114, 99, 0,115,117, 98,115,117,114,102, 95,109, 97,120, 0,115,104, 97,100, 98,117,102,115, 97,109,112,108,101, 95,109, 97,
+120, 0, 97,111, 95,101,114,114,111,114, 0,116,105,108,116, 0,114,101,115, 98,117,102, 0, 42,119, 97,114,112,116,101,120,116,
+ 0, 99,111,108, 91, 51, 93, 0,109, 97,116,109,111,100,101, 0,102,114, 97,109,105,110,103, 0,114,116, 49, 0,100,111,109,101,
+ 0,115,116,101,114,101,111,102,108, 97,103, 0,101,121,101,115,101,112, 97,114, 97,116,105,111,110, 0, 42, 99, 97,109,101,114,
+ 97, 0, 42, 98,114,117,115,104, 0, 42,112, 97,105,110,116, 95, 99,117,114,115,111,114, 0,112, 97,105,110,116, 95, 99,117,114,
+115,111,114, 95, 99,111,108, 91, 52, 93, 0,112, 97,105,110,116, 0,115,101, 97,109, 95, 98,108,101,101,100, 0,110,111,114,109,
+ 97,108, 95, 97,110,103,108,101, 0,115, 99,114,101,101,110, 95,103,114, 97, 98, 95,115,105,122,101, 91, 50, 93, 0, 42,112, 97,
+105,110,116, 99,117,114,115,111,114, 0,105,110,118,101,114,116, 0,116,111,116,114,101,107,101,121, 0,116,111,116, 97,100,100,
+107,101,121, 0, 98,114,117,115,104,116,121,112,101, 0, 98,114,117,115,104, 91, 55, 93, 0,101,109,105,116,116,101,114,100,105,
+115,116, 0,115,101,108,101, 99,116,109,111,100,101, 0,101,100,105,116,116,121,112,101, 0,100,114, 97,119, 95,115,116,101,112,
+ 0,102, 97,100,101, 95,102,114, 97,109,101,115, 0,110, 97,109,101, 91, 51, 54, 93, 0,109, 97,116, 91, 51, 93, 91, 51, 93, 0,
+114, 97,100,105, 97,108, 95,115,121,109,109, 91, 51, 93, 0,108, 97,115,116, 95,120, 0,108, 97,115,116, 95,121, 0,108, 97,115,
+116, 95, 97,110,103,108,101, 0,100,114, 97,119, 95, 97,110, 99,104,111,114,101,100, 0, 97,110, 99,104,111,114,101,100, 95,115,
+105,122,101, 0, 97,110, 99,104,111,114,101,100, 95,108,111, 99, 97,116,105,111,110, 91, 51, 93, 0, 97,110, 99,104,111,114,101,
+100, 95,105,110,105,116,105, 97,108, 95,109,111,117,115,101, 91, 50, 93, 0,100,114, 97,119, 95,112,114,101,115,115,117,114,101,
+ 0,112,114,101,115,115,117,114,101, 95,118, 97,108,117,101, 0,115,112,101, 99,105, 97,108, 95,114,111,116, 97,116,105,111,110,
+ 0, 42,118,112, 97,105,110,116, 95,112,114,101,118, 0, 42,119,112, 97,105,110,116, 95,112,114,101,118, 0, 42,118,112, 97,105,
+110,116, 0, 42,119,112, 97,105,110,116, 0,118,103,114,111,117,112, 95,119,101,105,103,104,116, 0, 99,111,114,110,101,114,116,
+121,112,101, 0,101,100,105,116, 98,117,116,102,108, 97,103, 0,106,111,105,110,116,114,105,108,105,109,105,116, 0,100,101,103,
+114, 0,116,117,114,110, 0,101,120,116,114, 95,111,102,102,115, 0,100,111,117, 98,108,105,109,105,116, 0,110,111,114,109, 97,
+108,115,105,122,101, 0, 97,117,116,111,109,101,114,103,101, 0,115,101,103,109,101,110,116,115, 0,114,105,110,103,115, 0,118,
+101,114,116,105, 99,101,115, 0,117,110,119,114, 97,112,112,101,114, 0,117,118, 99, 97,108, 99, 95,114, 97,100,105,117,115, 0,
+117,118, 99, 97,108, 99, 95, 99,117, 98,101,115,105,122,101, 0,117,118, 99, 97,108, 99, 95,109, 97,114,103,105,110, 0,117,118,
+ 99, 97,108, 99, 95,109, 97,112,100,105,114, 0,117,118, 99, 97,108, 99, 95,109, 97,112, 97,108,105,103,110, 0,117,118, 99, 97,
+108, 99, 95,102,108, 97,103, 0,117,118, 95,102,108, 97,103, 0,117,118, 95,115,101,108,101, 99,116,109,111,100,101, 0,117,118,
+ 95,112, 97,100, 91, 50, 93, 0, 97,117,116,111,105,107, 95, 99,104, 97,105,110,108,101,110, 0,105,109, 97,112, 97,105,110,116,
+ 0,112, 97,114,116,105, 99,108,101, 0,112,114,111,112,111,114,116,105,111,110, 97,108, 95,115,105,122,101, 0,115,101,108,101,
+ 99,116, 95,116,104,114,101,115,104, 0, 99,108,101, 97,110, 95,116,104,114,101,115,104, 0, 97,117,116,111,107,101,121, 95,109,
+111,100,101, 0, 97,117,116,111,107,101,121, 95,102,108, 97,103, 0,114,101,116,111,112,111, 95,109,111,100,101, 0,114,101,116,
+111,112,111, 95,112, 97,105,110,116, 95,116,111,111,108, 0,108,105,110,101, 95,100,105,118, 0,101,108,108,105,112,115,101, 95,
+100,105,118, 0,114,101,116,111,112,111, 95,104,111,116,115,112,111,116, 0,109,117,108,116,105,114,101,115, 95,115,117, 98,100,
+105,118, 95,116,121,112,101, 0,115,107,103,101,110, 95,114,101,115,111,108,117,116,105,111,110, 0,115,107,103,101,110, 95,116,
+104,114,101,115,104,111,108,100, 95,105,110,116,101,114,110, 97,108, 0,115,107,103,101,110, 95,116,104,114,101,115,104,111,108,
+100, 95,101,120,116,101,114,110, 97,108, 0,115,107,103,101,110, 95,108,101,110,103,116,104, 95,114, 97,116,105,111, 0,115,107,
+103,101,110, 95,108,101,110,103,116,104, 95,108,105,109,105,116, 0,115,107,103,101,110, 95, 97,110,103,108,101, 95,108,105,109,
+105,116, 0,115,107,103,101,110, 95, 99,111,114,114,101,108, 97,116,105,111,110, 95,108,105,109,105,116, 0,115,107,103,101,110,
+ 95,115,121,109,109,101,116,114,121, 95,108,105,109,105,116, 0,115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95, 97,
+110,103,108,101, 95,119,101,105,103,104,116, 0,115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95,108,101,110,103,116,
+104, 95,119,101,105,103,104,116, 0,115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95,100,105,115,116, 97,110, 99,101,
+ 95,119,101,105,103,104,116, 0,115,107,103,101,110, 95,111,112,116,105,111,110,115, 0,115,107,103,101,110, 95,112,111,115,116,
+112,114,111, 0,115,107,103,101,110, 95,112,111,115,116,112,114,111, 95,112, 97,115,115,101,115, 0,115,107,103,101,110, 95,115,
+117, 98,100,105,118,105,115,105,111,110,115, 91, 51, 93, 0,115,107,103,101,110, 95,109,117,108,116,105, 95,108,101,118,101,108,
+ 0, 42,115,107,103,101,110, 95,116,101,109,112,108, 97,116,101, 0, 98,111,110,101, 95,115,107,101,116, 99,104,105,110,103, 0,
+ 98,111,110,101, 95,115,107,101,116, 99,104,105,110,103, 95, 99,111,110,118,101,114,116, 0,115,107,103,101,110, 95,115,117, 98,
+100,105,118,105,115,105,111,110, 95,110,117,109, 98,101,114, 0,115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95,111,
+112,116,105,111,110,115, 0,115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95,114,111,108,108, 0,115,107,103,101,110,
+ 95,115,105,100,101, 95,115,116,114,105,110,103, 91, 56, 93, 0,115,107,103,101,110, 95,110,117,109, 95,115,116,114,105,110,103,
+ 91, 56, 93, 0,101,100,103,101, 95,109,111,100,101, 0,115,110, 97,112, 95,109,111,100,101, 0,115,110, 97,112, 95,102,108, 97,
+103, 0,115,110, 97,112, 95,116, 97,114,103,101,116, 0,112,114,111,112,111,114,116,105,111,110, 97,108, 0,112,114,111,112, 95,
+109,111,100,101, 0,112,114,111,112,111,114,116,105,111,110, 97,108, 95,111, 98,106,101, 99,116,115, 0, 97,117,116,111, 95,110,
+111,114,109, 97,108,105,122,101, 0,115, 99,117,108,112,116, 95,112, 97,105,110,116, 95,115,101,116,116,105,110,103,115, 0,115,
+ 99,117,108,112,116, 95,112, 97,105,110,116, 95,117,110,105,102,105,101,100, 95,115,105,122,101, 0,115, 99,117,108,112,116, 95,
+112, 97,105,110,116, 95,117,110,105,102,105,101,100, 95,117,110,112,114,111,106,101, 99,116,101,100, 95,114, 97,100,105,117,115,
+ 0,115, 99,117,108,112,116, 95,112, 97,105,110,116, 95,117,110,105,102,105,101,100, 95, 97,108,112,104, 97, 0,116,111,116,111,
+ 98,106, 0,116,111,116,108, 97,109,112, 0,116,111,116,111, 98,106,115,101,108, 0,116,111,116, 99,117,114,118,101, 0,116,111,
+116,109,101,115,104, 0,116,111,116, 97,114,109, 97,116,117,114,101, 0,115, 99, 97,108,101, 95,108,101,110,103,116,104, 0,115,
+121,115,116,101,109, 0,103,114, 97,118,105,116,121, 91, 51, 93, 0,113,117,105, 99,107, 95, 99, 97, 99,104,101, 95,115,116,101,
+112, 0, 42,119,111,114,108,100, 0, 42,115,101,116, 0, 98, 97,115,101, 0, 42, 98, 97,115, 97, 99,116, 0, 42,111, 98,101,100,
+105,116, 0, 99,117,114,115,111,114, 91, 51, 93, 0,116,119, 99,101,110,116, 91, 51, 93, 0,116,119,109,105,110, 91, 51, 93, 0,
+116,119,109, 97,120, 91, 51, 93, 0,108, 97,121, 97, 99,116, 0, 42,101,100, 0, 42,116,111,111,108,115,101,116,116,105,110,103,
+115, 0, 42,115,116, 97,116,115, 0, 97,117,100,105,111, 0,116,114, 97,110,115,102,111,114,109, 95,115,112, 97, 99,101,115, 0,
+ 42,115,111,117,110,100, 95,115, 99,101,110,101, 0, 42,115,111,117,110,100, 95,115, 99,101,110,101, 95,104, 97,110,100,108,101,
+ 0, 42,102,112,115, 95,105,110,102,111, 0, 42,116,104,101, 68, 97,103, 0,100, 97,103,105,115,118, 97,108,105,100, 0,100, 97,
+103,102,108, 97,103,115, 0,106,117,109,112,102,114, 97,109,101, 0,112, 97,100, 53, 0, 97, 99,116,105,118,101, 95,107,101,121,
+105,110,103,115,101,116, 0,107,101,121,105,110,103,115,101,116,115, 0,103,109, 0,117,110,105,116, 0,112,104,121,115,105, 99,
+115, 95,115,101,116,116,105,110,103,115, 0, 98,108,101,110,100, 0,118,105,101,119, 0,119,105,110,109, 97,116, 91, 52, 93, 91,
+ 52, 93, 0,118,105,101,119,109, 97,116, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,105,110,118, 91, 52, 93, 91, 52, 93, 0,112,
+101,114,115,109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,101,114,115,105,110,118, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,109,
+ 97,116,111, 98, 91, 52, 93, 91, 52, 93, 0,112,101,114,115,109, 97,116,111, 98, 91, 52, 93, 91, 52, 93, 0,116,119,109, 97,116,
+ 91, 52, 93, 91, 52, 93, 0,118,105,101,119,113,117, 97,116, 91, 52, 93, 0,122,102, 97, 99, 0, 99, 97,109,100,120, 0, 99, 97,
+109,100,121, 0,112,105,120,115,105,122,101, 0, 99, 97,109,122,111,111,109, 0,118,105,101,119, 98,117,116, 0,116,119,100,114,
+ 97,119,102,108, 97,103, 0,114,102,108, 97,103, 0,118,105,101,119,108,111, 99,107, 0,112,101,114,115,112, 0, 99,108,105,112,
+ 91, 54, 93, 91, 52, 93, 0, 99,108,105,112, 95,108,111, 99, 97,108, 91, 54, 93, 91, 52, 93, 0, 42, 99,108,105,112, 98, 98, 0,
+ 42,108,111, 99, 97,108,118,100, 0, 42,114,105, 0, 42,114,101,116,111,112,111, 95,118,105,101,119, 95,100, 97,116, 97, 0, 42,
+100,101,112,116,104,115, 0, 42,115,109,115, 0, 42,115,109,111,111,116,104, 95,116,105,109,101,114, 0,108,118,105,101,119,113,
+117, 97,116, 91, 52, 93, 0,108,112,101,114,115,112, 0,108,118,105,101,119, 0,103,114,105,100,118,105,101,119, 0,116,119, 97,
+110,103,108,101, 91, 51, 93, 0,112, 97,100,102, 0,114,101,103,105,111,110, 98, 97,115,101, 0,115,112, 97, 99,101,116,121,112,
+101, 0, 98,108,111, 99,107,115, 99, 97,108,101, 0, 98,108,111, 99,107,104, 97,110,100,108,101,114, 91, 56, 93, 0,108, 97,121,
+ 95,117,115,101,100, 0, 42,111, 98, 95, 99,101,110,116,114,101, 0, 98,103,112,105, 99, 98, 97,115,101, 0, 42, 98,103,112,105,
+ 99, 0,111, 98, 95, 99,101,110,116,114,101, 95, 98,111,110,101, 91, 51, 50, 93, 0,100,114, 97,119,116,121,112,101, 0,115, 99,
+101,110,101,108,111, 99,107, 0, 97,114,111,117,110,100, 0,112,105,118,111,116, 95,108, 97,115,116, 0,103,114,105,100, 0,110,
+101, 97,114, 0,102, 97,114, 0,103,114,105,100,108,105,110,101,115, 0,103,114,105,100,102,108, 97,103, 0,103,114,105,100,115,
+117, 98,100,105,118, 0,109,111,100,101,115,101,108,101, 99,116, 0,107,101,121,102,108, 97,103,115, 0,116,119,116,121,112,101,
+ 0,116,119,109,111,100,101, 0,116,119,102,108, 97,103, 0, 99,117,115,116,111,109,100, 97,116, 97, 95,109, 97,115,107, 0, 97,
+102,116,101,114,100,114, 97,119, 0,122, 98,117,102, 0,120,114, 97,121, 0,110,100,111,102,109,111,100,101, 0,110,100,111,102,
+102,105,108,116,101,114, 0, 42,112,114,111,112,101,114,116,105,101,115, 95,115,116,111,114, 97,103,101, 0,118,101,114,116, 0,
+104,111,114, 0,109, 97,115,107, 0,109,105,110, 91, 50, 93, 0,109, 97,120, 91, 50, 93, 0,109,105,110,122,111,111,109, 0,109,
+ 97,120,122,111,111,109, 0,115, 99,114,111,108,108, 0,115, 99,114,111,108,108, 95,117,105, 0,107,101,101,112,116,111,116, 0,
+107,101,101,112,122,111,111,109, 0,107,101,101,112,111,102,115, 0, 97,108,105,103,110, 0,119,105,110,120, 0,119,105,110,121,
+ 0,111,108,100,119,105,110,120, 0,111,108,100,119,105,110,121, 0, 42,116, 97, 98, 95,111,102,102,115,101,116, 0,116, 97, 98,
+ 95,110,117,109, 0,116, 97, 98, 95, 99,117,114, 0, 42,115, 99,114,101,101,110, 0,118, 50,100, 0, 42, 97,100,115, 0,103,104,
+111,115,116, 67,117,114,118,101,115, 0, 97,117,116,111,115,110, 97,112, 0, 99,117,114,115,111,114, 86, 97,108, 0,109, 97,105,
+110, 98, 0,109, 97,105,110, 98,111, 0,109, 97,105,110, 98,117,115,101,114, 0,114,101, 95, 97,108,105,103,110, 0,112,114,101,
+118,105,101,119, 0,112, 97,116,104,102,108, 97,103, 0,100, 97,116, 97,105, 99,111,110, 0, 42,112,105,110,105,100, 0,114,101,
+110,100,101,114, 95,115,105,122,101, 0, 99,104, 97,110,115,104,111,119,110, 0,122,101, 98,114, 97, 0,122,111,111,109, 0,116,
+105,116,108,101, 91, 50, 52, 93, 0,100,105,114, 91, 50, 52, 48, 93, 0,102,105,108,101, 91, 56, 48, 93, 0,114,101,110, 97,109,
+101,102,105,108,101, 91, 56, 48, 93, 0,115,111,114,116, 0,100,105,115,112,108, 97,121, 0, 97, 99,116,105,118,101, 95, 98,111,
+111,107,109, 97,114,107, 0, 97, 99,116,105,118,101, 95,102,105,108,101, 0,115,101,108,115,116, 97,116,101, 0,102, 95,102,112,
+ 0,102,112, 95,115,116,114, 91, 56, 93, 0,115, 99,114,111,108,108, 95,111,102,102,115,101,116, 0, 42,112, 97,114, 97,109,115,
+ 0, 42,102,105,108,101,115, 0, 42,102,111,108,100,101,114,115, 95,112,114,101,118, 0, 42,102,111,108,100,101,114,115, 95,110,
+101,120,116, 0, 42,111,112, 0, 42,115,109,111,111,116,104,115, 99,114,111,108,108, 95,116,105,109,101,114, 0, 42,108, 97,121,
+111,117,116, 0,114,101, 99,101,110,116,110,114, 0, 98,111,111,107,109, 97,114,107,110,114, 0,115,121,115,116,101,109,110,114,
+ 0,116,114,101,101, 0, 42,116,114,101,101,115,116,111,114,101, 0,115,101, 97,114, 99,104, 95,115,116,114,105,110,103, 91, 51,
+ 50, 93, 0,115,101, 97,114, 99,104, 95,116,115,101, 0,115,101, 97,114, 99,104, 95,102,108, 97,103,115, 0,100,111, 95, 0,111,
+117,116,108,105,110,101,118,105,115, 0,115,116,111,114,101,102,108, 97,103, 0, 42, 99,117,109, 97,112, 0,105,109, 97,110,114,
+ 0, 99,117,114,116,105,108,101, 0,105,109,116,121,112,101,110,114, 0,108,111, 99,107, 0,112,105,110, 0,100,116, 95,117,118,
+ 0,115,116,105, 99,107,121, 0,100,116, 95,117,118,115,116,114,101,116, 99,104, 0, 99,117,114,115,111,114, 91, 50, 93, 0, 99,
+101,110,116,120, 0, 99,101,110,116,121, 0,115, 99,111,112,101,115, 0,115, 97,109,112,108,101, 95,108,105,110,101, 95,104,105,
+115,116, 0, 42,116,101,120,116, 0,116,111,112, 0,118,105,101,119,108,105,110,101,115, 0,108,104,101,105,103,104,116, 0, 99,
+119,105,100,116,104, 0,108,105,110,101,110,114,115, 95,116,111,116, 0,108,101,102,116, 0,115,104,111,119,108,105,110,101,110,
+114,115, 0,116, 97, 98,110,117,109, 98,101,114, 0,115,104,111,119,115,121,110,116, 97,120, 0,111,118,101,114,119,114,105,116,
+101, 0,108,105,118,101, 95,101,100,105,116, 0,112,105,120, 95,112,101,114, 95,108,105,110,101, 0,116,120,116,115, 99,114,111,
+108,108, 0,116,120,116, 98, 97,114, 0,119,111,114,100,119,114, 97,112, 0,100,111,112,108,117,103,105,110,115, 0,102,105,110,
+100,115,116,114, 91, 50, 53, 54, 93, 0,114,101,112,108, 97, 99,101,115,116,114, 91, 50, 53, 54, 93, 0, 42,112,121, 95,100,114,
+ 97,119, 0, 42,112,121, 95,101,118,101,110,116, 0, 42,112,121, 95, 98,117,116,116,111,110, 0, 42,112,121, 95, 98,114,111,119,
+115,101,114, 99, 97,108,108, 98, 97, 99,107, 0, 42,112,121, 95,103,108,111, 98, 97,108,100,105, 99,116, 0,108, 97,115,116,115,
+112, 97, 99,101, 0,115, 99,114,105,112,116,110, 97,109,101, 91, 50, 53, 54, 93, 0,115, 99,114,105,112,116, 97,114,103, 91, 50,
+ 53, 54, 93, 0, 42,115, 99,114,105,112,116, 0, 42, 98,117,116, 95,114,101,102,115, 0, 42, 97,114,114, 97,121, 0, 99, 97, 99,
+104,101,115, 0, 99, 97, 99,104,101, 95,100,105,115,112,108, 97,121, 0,114,101,100,114, 97,119,115, 0, 42,105,100, 0, 97,115,
+112,101, 99,116, 0, 42, 99,117,114,102,111,110,116, 0,109,120, 0,109,121, 0, 42,101,100,105,116,116,114,101,101, 0,116,114,
+101,101,116,121,112,101, 0,116,101,120,102,114,111,109, 0,109,101,110,117, 0,110,117,109,116,105,108,101,115,120, 0,110,117,
+109,116,105,108,101,115,121, 0,118,105,101,119,114,101, 99,116, 0, 98,111,111,107,109, 97,114,107,114,101, 99,116, 0,115, 99,
+114,111,108,108,112,111,115, 0,115, 99,114,111,108,108,104,101,105,103,104,116, 0,115, 99,114,111,108,108, 97,114,101, 97, 0,
+114,101,116,118, 97,108, 0,112,114,118, 95,119, 0,112,114,118, 95,104, 0, 40, 42,114,101,116,117,114,110,102,117,110, 99, 41,
+ 40, 41, 0, 40, 42,114,101,116,117,114,110,102,117,110, 99, 95,101,118,101,110,116, 41, 40, 41, 0, 40, 42,114,101,116,117,114,
+110,102,117,110, 99, 95, 97,114,103,115, 41, 40, 41, 0, 42, 97,114,103, 49, 0, 42, 97,114,103, 50, 0, 42,109,101,110,117,112,
+ 0, 42,112,117,112,109,101,110,117, 0, 42,105,109,103, 0,108,101,110, 95, 97,108,108,111, 99, 0, 99,117,114,115,111,114, 0,
+114,112,116, 95,109, 97,115,107, 0,115, 99,114,111,108,108, 98, 97, 99,107, 0,104,105,115,116,111,114,121, 0,112,114,111,109,
+112,116, 91, 50, 53, 54, 93, 0,108, 97,110,103,117, 97,103,101, 91, 51, 50, 93, 0,115,101,108, 95,115,116, 97,114,116, 0,115,
+101,108, 95,101,110,100, 0,102,105,108,116,101,114, 91, 54, 52, 93, 0, 42, 97,114,101, 97, 0, 42,115,111,117,110,100, 0,115,
+110,100,110,114, 0,102,105,108,101,110, 97,109,101, 91, 50, 53, 54, 93, 0, 98,108,102, 95,105,100, 0,117,105,102,111,110,116,
+ 95,105,100, 0,114, 95,116,111, 95,108, 0,112,111,105,110,116,115, 0,107,101,114,110,105,110,103, 0,105,116, 97,108,105, 99,
+ 0, 98,111,108,100, 0,115,104, 97,100,111,119, 0,115,104, 97,100,120, 0,115,104, 97,100,121, 0,115,104, 97,100,111,119, 97,
+108,112,104, 97, 0,115,104, 97,100,111,119, 99,111,108,111,114, 0,112, 97,110,101,108,116,105,116,108,101, 0,103,114,111,117,
+112,108, 97, 98,101,108, 0,119,105,100,103,101,116,108, 97, 98,101,108, 0,119,105,100,103,101,116, 0,112, 97,110,101,108,122,
+111,111,109, 0,109,105,110,108, 97, 98,101,108, 99,104, 97,114,115, 0,109,105,110,119,105,100,103,101,116, 99,104, 97,114,115,
+ 0, 99,111,108,117,109,110,115,112, 97, 99,101, 0,116,101,109,112,108, 97,116,101,115,112, 97, 99,101, 0, 98,111,120,115,112,
+ 97, 99,101, 0, 98,117,116,116,111,110,115,112, 97, 99,101,120, 0, 98,117,116,116,111,110,115,112, 97, 99,101,121, 0,112, 97,
+110,101,108,115,112, 97, 99,101, 0,112, 97,110,101,108,111,117,116,101,114, 0,112, 97,100, 91, 49, 93, 0,111,117,116,108,105,
+110,101, 91, 52, 93, 0,105,110,110,101,114, 91, 52, 93, 0,105,110,110,101,114, 95,115,101,108, 91, 52, 93, 0,105,116,101,109,
+ 91, 52, 93, 0,116,101,120,116, 91, 52, 93, 0,116,101,120,116, 95,115,101,108, 91, 52, 93, 0,115,104, 97,100,101,100, 0,115,
+104, 97,100,101,116,111,112, 0,115,104, 97,100,101,100,111,119,110, 0, 97,108,112,104, 97, 95, 99,104,101, 99,107, 0,105,110,
+110,101,114, 95, 97,110,105,109, 91, 52, 93, 0,105,110,110,101,114, 95, 97,110,105,109, 95,115,101,108, 91, 52, 93, 0,105,110,
+110,101,114, 95,107,101,121, 91, 52, 93, 0,105,110,110,101,114, 95,107,101,121, 95,115,101,108, 91, 52, 93, 0,105,110,110,101,
+114, 95,100,114,105,118,101,110, 91, 52, 93, 0,105,110,110,101,114, 95,100,114,105,118,101,110, 95,115,101,108, 91, 52, 93, 0,
+119, 99,111,108, 95,114,101,103,117,108, 97,114, 0,119, 99,111,108, 95,116,111,111,108, 0,119, 99,111,108, 95,116,101,120,116,
+ 0,119, 99,111,108, 95,114, 97,100,105,111, 0,119, 99,111,108, 95,111,112,116,105,111,110, 0,119, 99,111,108, 95,116,111,103,
+103,108,101, 0,119, 99,111,108, 95,110,117,109, 0,119, 99,111,108, 95,110,117,109,115,108,105,100,101,114, 0,119, 99,111,108,
+ 95,109,101,110,117, 0,119, 99,111,108, 95,112,117,108,108,100,111,119,110, 0,119, 99,111,108, 95,109,101,110,117, 95, 98, 97,
+ 99,107, 0,119, 99,111,108, 95,109,101,110,117, 95,105,116,101,109, 0,119, 99,111,108, 95, 98,111,120, 0,119, 99,111,108, 95,
+115, 99,114,111,108,108, 0,119, 99,111,108, 95,112,114,111,103,114,101,115,115, 0,119, 99,111,108, 95,108,105,115,116, 95,105,
+116,101,109, 0,119, 99,111,108, 95,115,116, 97,116,101, 0,105, 99,111,110,102,105,108,101, 91, 56, 48, 93, 0, 98, 97, 99,107,
+ 91, 52, 93, 0,116,105,116,108,101, 91, 52, 93, 0,116,101,120,116, 95,104,105, 91, 52, 93, 0,104,101, 97,100,101,114, 91, 52,
+ 93, 0,104,101, 97,100,101,114, 95,116,105,116,108,101, 91, 52, 93, 0,104,101, 97,100,101,114, 95,116,101,120,116, 91, 52, 93,
+ 0,104,101, 97,100,101,114, 95,116,101,120,116, 95,104,105, 91, 52, 93, 0, 98,117,116,116,111,110, 91, 52, 93, 0, 98,117,116,
+116,111,110, 95,116,105,116,108,101, 91, 52, 93, 0, 98,117,116,116,111,110, 95,116,101,120,116, 91, 52, 93, 0, 98,117,116,116,
+111,110, 95,116,101,120,116, 95,104,105, 91, 52, 93, 0,108,105,115,116, 91, 52, 93, 0,108,105,115,116, 95,116,105,116,108,101,
+ 91, 52, 93, 0,108,105,115,116, 95,116,101,120,116, 91, 52, 93, 0,108,105,115,116, 95,116,101,120,116, 95,104,105, 91, 52, 93,
+ 0,112, 97,110,101,108, 91, 52, 93, 0,112, 97,110,101,108, 95,116,105,116,108,101, 91, 52, 93, 0,112, 97,110,101,108, 95,116,
+101,120,116, 91, 52, 93, 0,112, 97,110,101,108, 95,116,101,120,116, 95,104,105, 91, 52, 93, 0,115,104, 97,100,101, 49, 91, 52,
+ 93, 0,115,104, 97,100,101, 50, 91, 52, 93, 0,104,105,108,105,116,101, 91, 52, 93, 0,103,114,105,100, 91, 52, 93, 0,119,105,
+114,101, 91, 52, 93, 0,115,101,108,101, 99,116, 91, 52, 93, 0,108, 97,109,112, 91, 52, 93, 0, 97, 99,116,105,118,101, 91, 52,
+ 93, 0,103,114,111,117,112, 91, 52, 93, 0,103,114,111,117,112, 95, 97, 99,116,105,118,101, 91, 52, 93, 0,116,114, 97,110,115,
+102,111,114,109, 91, 52, 93, 0,118,101,114,116,101,120, 91, 52, 93, 0,118,101,114,116,101,120, 95,115,101,108,101, 99,116, 91,
+ 52, 93, 0,101,100,103,101, 91, 52, 93, 0,101,100,103,101, 95,115,101,108,101, 99,116, 91, 52, 93, 0,101,100,103,101, 95,115,
+101, 97,109, 91, 52, 93, 0,101,100,103,101, 95,115,104, 97,114,112, 91, 52, 93, 0,101,100,103,101, 95,102, 97, 99,101,115,101,
+108, 91, 52, 93, 0,101,100,103,101, 95, 99,114,101, 97,115,101, 91, 52, 93, 0,102, 97, 99,101, 91, 52, 93, 0,102, 97, 99,101,
+ 95,115,101,108,101, 99,116, 91, 52, 93, 0,102, 97, 99,101, 95,100,111,116, 91, 52, 93, 0,110,111,114,109, 97,108, 91, 52, 93,
+ 0,118,101,114,116,101,120, 95,110,111,114,109, 97,108, 91, 52, 93, 0, 98,111,110,101, 95,115,111,108,105,100, 91, 52, 93, 0,
+ 98,111,110,101, 95,112,111,115,101, 91, 52, 93, 0,115,116,114,105,112, 91, 52, 93, 0,115,116,114,105,112, 95,115,101,108,101,
+ 99,116, 91, 52, 93, 0, 99,102,114, 97,109,101, 91, 52, 93, 0,110,117,114, 98, 95,117,108,105,110,101, 91, 52, 93, 0,110,117,
+114, 98, 95,118,108,105,110,101, 91, 52, 93, 0, 97, 99,116, 95,115,112,108,105,110,101, 91, 52, 93, 0,110,117,114, 98, 95,115,
+101,108, 95,117,108,105,110,101, 91, 52, 93, 0,110,117,114, 98, 95,115,101,108, 95,118,108,105,110,101, 91, 52, 93, 0,108, 97,
+115,116,115,101,108, 95,112,111,105,110,116, 91, 52, 93, 0,104, 97,110,100,108,101, 95,102,114,101,101, 91, 52, 93, 0,104, 97,
+110,100,108,101, 95, 97,117,116,111, 91, 52, 93, 0,104, 97,110,100,108,101, 95,118,101, 99,116, 91, 52, 93, 0,104, 97,110,100,
+108,101, 95, 97,108,105,103,110, 91, 52, 93, 0,104, 97,110,100,108,101, 95,115,101,108, 95,102,114,101,101, 91, 52, 93, 0,104,
+ 97,110,100,108,101, 95,115,101,108, 95, 97,117,116,111, 91, 52, 93, 0,104, 97,110,100,108,101, 95,115,101,108, 95,118,101, 99,
+116, 91, 52, 93, 0,104, 97,110,100,108,101, 95,115,101,108, 95, 97,108,105,103,110, 91, 52, 93, 0,100,115, 95, 99,104, 97,110,
+110,101,108, 91, 52, 93, 0,100,115, 95,115,117, 98, 99,104, 97,110,110,101,108, 91, 52, 93, 0, 99,111,110,115,111,108,101, 95,
+111,117,116,112,117,116, 91, 52, 93, 0, 99,111,110,115,111,108,101, 95,105,110,112,117,116, 91, 52, 93, 0, 99,111,110,115,111,
+108,101, 95,105,110,102,111, 91, 52, 93, 0, 99,111,110,115,111,108,101, 95,101,114,114,111,114, 91, 52, 93, 0, 99,111,110,115,
+111,108,101, 95, 99,117,114,115,111,114, 91, 52, 93, 0,118,101,114,116,101,120, 95,115,105,122,101, 0,102, 97, 99,101,100,111,
+116, 95,115,105,122,101, 0, 98,112, 97,100, 91, 50, 93, 0,115,121,110,116, 97,120,108, 91, 52, 93, 0,115,121,110,116, 97,120,
+110, 91, 52, 93, 0,115,121,110,116, 97,120, 98, 91, 52, 93, 0,115,121,110,116, 97,120,118, 91, 52, 93, 0,115,121,110,116, 97,
+120, 99, 91, 52, 93, 0,109,111,118,105,101, 91, 52, 93, 0,105,109, 97,103,101, 91, 52, 93, 0,115, 99,101,110,101, 91, 52, 93,
+ 0, 97,117,100,105,111, 91, 52, 93, 0,101,102,102,101, 99,116, 91, 52, 93, 0,112,108,117,103,105,110, 91, 52, 93, 0,116,114,
+ 97,110,115,105,116,105,111,110, 91, 52, 93, 0,109,101,116, 97, 91, 52, 93, 0,101,100,105,116,109,101,115,104, 95, 97, 99,116,
+105,118,101, 91, 52, 93, 0,104, 97,110,100,108,101, 95,118,101,114,116,101,120, 91, 52, 93, 0,104, 97,110,100,108,101, 95,118,
+101,114,116,101,120, 95,115,101,108,101, 99,116, 91, 52, 93, 0,104, 97,110,100,108,101, 95,118,101,114,116,101,120, 95,115,105,
+122,101, 0,104,112, 97,100, 91, 55, 93, 0,112,114,101,118,105,101,119, 95, 98, 97, 99,107, 91, 52, 93, 0,115,111,108,105,100,
+ 91, 52, 93, 0,116,117,105, 0,116, 98,117,116,115, 0,116,118, 51,100, 0,116,102,105,108,101, 0,116,105,112,111, 0,116,105,
+110,102,111, 0,116,115,110,100, 0,116, 97, 99,116, 0,116,110,108, 97, 0,116,115,101,113, 0,116,105,109, 97, 0,116,105,109,
+ 97,115,101,108, 0,116,101,120,116, 0,116,111,111,112,115, 0,116,116,105,109,101, 0,116,110,111,100,101, 0,116,108,111,103,
+105, 99, 0,116,117,115,101,114,112,114,101,102, 0,116, 99,111,110,115,111,108,101, 0,116, 97,114,109, 91, 50, 48, 93, 0, 97,
+ 99,116,105,118,101, 95,116,104,101,109,101, 95, 97,114,101, 97, 0,109,111,100,117,108,101, 91, 54, 52, 93, 0,115,112,101, 99,
+ 91, 52, 93, 0,100,117,112,102,108, 97,103, 0,115, 97,118,101,116,105,109,101, 0,116,101,109,112,100,105,114, 91, 49, 54, 48,
+ 93, 0,102,111,110,116,100,105,114, 91, 49, 54, 48, 93, 0,114,101,110,100,101,114,100,105,114, 91, 49, 54, 48, 93, 0,116,101,
+120,116,117,100,105,114, 91, 49, 54, 48, 93, 0,112,108,117,103,116,101,120,100,105,114, 91, 49, 54, 48, 93, 0,112,108,117,103,
+115,101,113,100,105,114, 91, 49, 54, 48, 93, 0,112,121,116,104,111,110,100,105,114, 91, 49, 54, 48, 93, 0,115,111,117,110,100,
+100,105,114, 91, 49, 54, 48, 93, 0,105,109, 97,103,101, 95,101,100,105,116,111,114, 91, 50, 52, 48, 93, 0, 97,110,105,109, 95,
+112,108, 97,121,101,114, 91, 50, 52, 48, 93, 0, 97,110,105,109, 95,112,108, 97,121,101,114, 95,112,114,101,115,101,116, 0,118,
+ 50,100, 95,109,105,110, 95,103,114,105,100,115,105,122,101, 0,116,105,109,101, 99,111,100,101, 95,115,116,121,108,101, 0,118,
+101,114,115,105,111,110,115, 0,100, 98,108, 95, 99,108,105, 99,107, 95,116,105,109,101, 0,103, 97,109,101,102,108, 97,103,115,
+ 0,119,104,101,101,108,108,105,110,101,115, 99,114,111,108,108, 0,117,105,102,108, 97,103, 0,108, 97,110,103,117, 97,103,101,
+ 0,117,115,101,114,112,114,101,102, 0,118,105,101,119,122,111,111,109, 0,109,105,120, 98,117,102,115,105,122,101, 0, 97,117,
+100,105,111,100,101,118,105, 99,101, 0, 97,117,100,105,111,114, 97,116,101, 0, 97,117,100,105,111,102,111,114,109, 97,116, 0,
+ 97,117,100,105,111, 99,104, 97,110,110,101,108,115, 0,100,112,105, 0,101,110, 99,111,100,105,110,103, 0,116,114, 97,110,115,
+111,112,116,115, 0,109,101,110,117,116,104,114,101,115,104,111,108,100, 49, 0,109,101,110,117,116,104,114,101,115,104,111,108,
+100, 50, 0,116,104,101,109,101,115, 0,117,105,102,111,110,116,115, 0,117,105,115,116,121,108,101,115, 0,107,101,121,109, 97,
+112,115, 0, 97,100,100,111,110,115, 0,107,101,121, 99,111,110,102,105,103,115,116,114, 91, 54, 52, 93, 0,117,110,100,111,115,
+116,101,112,115, 0,117,110,100,111,109,101,109,111,114,121, 0,103,112, 95,109, 97,110,104, 97,116,116,101,110,100,105,115,116,
+ 0,103,112, 95,101,117, 99,108,105,100,101, 97,110,100,105,115,116, 0,103,112, 95,101,114, 97,115,101,114, 0,103,112, 95,115,
+101,116,116,105,110,103,115, 0,116, 98, 95,108,101,102,116,109,111,117,115,101, 0,116, 98, 95,114,105,103,104,116,109,111,117,
+115,101, 0,108,105,103,104,116, 91, 51, 93, 0,116,119, 95,104,111,116,115,112,111,116, 0,116,119, 95,102,108, 97,103, 0,116,
+119, 95,104, 97,110,100,108,101,115,105,122,101, 0,116,119, 95,115,105,122,101, 0,116,101,120,116,105,109,101,111,117,116, 0,
+116,101,120, 99,111,108,108,101, 99,116,114, 97,116,101, 0,119,109,100,114, 97,119,109,101,116,104,111,100, 0,109,101,109, 99,
+ 97, 99,104,101,108,105,109,105,116, 0,112,114,101,102,101,116, 99,104,102,114, 97,109,101,115, 0,102,114, 97,109,101,115,101,
+114,118,101,114,112,111,114,116, 0,112, 97,100, 95,114,111,116, 95, 97,110,103,108,101, 0,111, 98, 99,101,110,116,101,114, 95,
+100,105, 97, 0,114,118,105,115,105,122,101, 0,114,118,105, 98,114,105,103,104,116, 0,114,101, 99,101,110,116, 95,102,105,108,
+101,115, 0,115,109,111,111,116,104, 95,118,105,101,119,116,120, 0,103,108,114,101,115,108,105,109,105,116, 0,110,100,111,102,
+ 95,112, 97,110, 0,110,100,111,102, 95,114,111,116, 97,116,101, 0, 99,117,114,115,115,105,122,101, 0, 99,111,108,111,114, 95,
+112,105, 99,107,101,114, 95,116,121,112,101, 0,105,112,111, 95,110,101,119, 0,107,101,121,104, 97,110,100,108,101,115, 95,110,
+101,119, 0,115, 99,114, 99, 97,115,116,102,112,115, 0,115, 99,114, 99, 97,115,116,119, 97,105,116, 0,112,114,111,112,119,105,
+100,116,104, 0,118,101,114,115,101,109, 97,115,116,101,114, 91, 49, 54, 48, 93, 0,118,101,114,115,101,117,115,101,114, 91, 49,
+ 54, 48, 93, 0,103,108, 97,108,112,104, 97, 99,108,105,112, 0, 99,111, 98, 97, 95,119,101,105,103,104,116, 0,115, 99,117,108,
+112,116, 95,112, 97,105,110,116, 95,111,118,101,114,108, 97,121, 95, 99,111,108, 91, 51, 93, 0,118,101,114,116, 98, 97,115,101,
+ 0,101,100,103,101, 98, 97,115,101, 0, 97,114,101, 97, 98, 97,115,101, 0, 42,110,101,119,115, 99,101,110,101, 0,102,117,108,
+108, 0,119,105,110,105,100, 0,100,111, 95,100,114, 97,119, 0,100,111, 95,114,101,102,114,101,115,104, 0,100,111, 95,100,114,
+ 97,119, 95,103,101,115,116,117,114,101, 0,100,111, 95,100,114, 97,119, 95,112, 97,105,110,116, 99,117,114,115,111,114, 0,100,
+111, 95,100,114, 97,119, 95,100,114, 97,103, 0,115,119, 97,112, 0,109, 97,105,110,119,105,110, 0,115,117, 98,119,105,110, 97,
+ 99,116,105,118,101, 0, 42, 97,110,105,109,116,105,109,101,114, 0, 42, 99,111,110,116,101,120,116, 0,104, 97,110,100,108,101,
+114, 91, 56, 93, 0, 42,110,101,119,118, 0,118,101, 99, 0, 42,118, 49, 0, 42,118, 50, 0, 42,116,121,112,101, 0,112, 97,110,
+101,108,110, 97,109,101, 91, 54, 52, 93, 0,116, 97, 98,110, 97,109,101, 91, 54, 52, 93, 0,100,114, 97,119,110, 97,109,101, 91,
+ 54, 52, 93, 0,111,102,115,120, 0,111,102,115,121, 0,115,105,122,101,120, 0,115,105,122,101,121, 0,108, 97, 98,101,108,111,
+102,115, 0,114,117,110,116,105,109,101, 95,102,108, 97,103, 0, 99,111,110,116,114,111,108, 0,115,110, 97,112, 0,115,111,114,
+116,111,114,100,101,114, 0, 42,112, 97,110,101,108,116, 97, 98, 0, 42, 97, 99,116,105,118,101,100, 97,116, 97, 0,108,105,115,
+116, 95,115, 99,114,111,108,108, 0,108,105,115,116, 95,115,105,122,101, 0,108,105,115,116, 95,108, 97,115,116, 95,108,101,110,
+ 0,108,105,115,116, 95,103,114,105,112, 95,115,105,122,101, 0,108,105,115,116, 95,115,101, 97,114, 99,104, 91, 54, 52, 93, 0,
+ 42,118, 51, 0, 42,118, 52, 0, 42,102,117,108,108, 0, 98,117,116,115,112, 97, 99,101,116,121,112,101, 0,104,101, 97,100,101,
+114,116,121,112,101, 0,115,112, 97, 99,101,100, 97,116, 97, 0,104, 97,110,100,108,101,114,115, 0, 97, 99,116,105,111,110,122,
+111,110,101,115, 0,119,105,110,114, 99,116, 0,100,114, 97,119,114, 99,116, 0,115,119,105,110,105,100, 0,114,101,103,105,111,
+110,116,121,112,101, 0, 97,108,105,103,110,109,101,110,116, 0,100,111, 95,100,114, 97,119, 95,111,118,101,114,108, 97,121, 0,
+117,105, 98,108,111, 99,107,115, 0,112, 97,110,101,108,115, 0, 42,104,101, 97,100,101,114,115,116,114, 0, 42,114,101,103,105,
+111,110,100, 97,116, 97, 0,115,117, 98,118,115,116,114, 91, 52, 93, 0,115,117, 98,118,101,114,115,105,111,110, 0,112, 97,100,
+115, 0,109,105,110,118,101,114,115,105,111,110, 0,109,105,110,115,117, 98,118,101,114,115,105,111,110, 0, 42, 99,117,114,115,
+ 99,114,101,101,110, 0, 42, 99,117,114,115, 99,101,110,101, 0,102,105,108,101,102,108, 97,103,115, 0,103,108,111, 98, 97,108,
+102, 0,102,105,108,101,110, 97,109,101, 91, 50, 52, 48, 93, 0,110, 97,109,101, 91, 56, 48, 93, 0, 42,105, 98,117,102, 0, 42,
+105, 98,117,102, 95, 99,111,109,112, 0, 42,115,101, 49, 0, 42,115,101, 50, 0, 42,115,101, 51, 0,110,114, 0, 98,111,116,116,
+111,109, 0,114,105,103,104,116, 0,120,111,102,115, 0,121,111,102,115, 0,108,105,102,116, 91, 51, 93, 0,103, 97,109,109, 97,
+ 91, 51, 93, 0,103, 97,105,110, 91, 51, 93, 0,100,105,114, 91, 49, 54, 48, 93, 0,100,111,110,101, 0,115,116, 97,114,116,115,
+116,105,108,108, 0,101,110,100,115,116,105,108,108, 0, 42,115,116,114,105,112,100, 97,116, 97, 0,111,114,120, 0,111,114,121,
+ 0, 42, 99,114,111,112, 0, 42,116,114, 97,110,115,102,111,114,109, 0, 42, 99,111,108,111,114, 95, 98, 97,108, 97,110, 99,101,
+ 0, 42,116,115,116,114,105,112,100, 97,116, 97, 0, 42,116,115,116,114,105,112,100, 97,116, 97, 95,115,116, 97,114,116,115,116,
+105,108,108, 0, 42,116,115,116,114,105,112,100, 97,116, 97, 95,101,110,100,115,116,105,108,108, 0, 42,105, 98,117,102, 95,115,
+116, 97,114,116,115,116,105,108,108, 0, 42,105, 98,117,102, 95,101,110,100,115,116,105,108,108, 0, 42,105,110,115,116, 97,110,
+ 99,101, 95,112,114,105,118, 97,116,101, 95,100, 97,116, 97, 0, 42, 42, 99,117,114,114,101,110,116, 95,112,114,105,118, 97,116,
+101, 95,100, 97,116, 97, 0, 42,116,109,112, 0,115,116, 97,114,116,111,102,115, 0,101,110,100,111,102,115, 0,109, 97, 99,104,
+105,110,101, 0,115,116, 97,114,116,100,105,115,112, 0,101,110,100,100,105,115,112, 0,115, 97,116, 0,109,117,108, 0,104, 97,
+110,100,115,105,122,101, 0, 97,110,105,109, 95,112,114,101,115,101,101,107, 0, 42,115,116,114,105,112, 0, 42,115, 99,101,110,
+101, 95, 99, 97,109,101,114, 97, 0,101,102,102,101, 99,116, 95,102, 97,100,101,114, 0,115,112,101,101,100, 95,102, 97,100,101,
+114, 0, 42,115,101,113, 49, 0, 42,115,101,113, 50, 0, 42,115,101,113, 51, 0,115,101,113, 98, 97,115,101, 0, 42,115, 99,101,
+110,101, 95,115,111,117,110,100, 0,108,101,118,101,108, 0,112, 97,110, 0,115, 99,101,110,101,110,114, 0,109,117,108,116,105,
+ 99, 97,109, 95,115,111,117,114, 99,101, 0,115,116,114,111, 98,101, 0, 42,101,102,102,101, 99,116,100, 97,116, 97, 0, 97,110,
+105,109, 95,115,116, 97,114,116,111,102,115, 0, 97,110,105,109, 95,101,110,100,111,102,115, 0, 98,108,101,110,100, 95,109,111,
+100,101, 0, 98,108,101,110,100, 95,111,112, 97, 99,105,116,121, 0, 42,111,108,100, 98, 97,115,101,112, 0, 42,112, 97,114,115,
+101,113, 0, 42,115,101,113, 98, 97,115,101,112, 0,109,101,116, 97,115,116, 97, 99,107, 0, 42, 97, 99,116, 95,115,101,113, 0,
+ 97, 99,116, 95,105,109, 97,103,101,100,105,114, 91, 50, 53, 54, 93, 0, 97, 99,116, 95,115,111,117,110,100,100,105,114, 91, 50,
+ 53, 54, 93, 0,111,118,101,114, 95,111,102,115, 0,111,118,101,114, 95, 99,102,114, 97, 0,111,118,101,114, 95,102,108, 97,103,
+ 0,111,118,101,114, 95, 98,111,114,100,101,114, 0,101,100,103,101, 87,105,100,116,104, 0,102,111,114,119, 97,114,100, 0,119,
+105,112,101,116,121,112,101, 0,102, 77,105,110,105, 0,102, 67,108, 97,109,112, 0,102, 66,111,111,115,116, 0,100, 68,105,115,
+116, 0,100, 81,117, 97,108,105,116,121, 0, 98, 78,111, 67,111,109,112, 0, 83, 99, 97,108,101,120, 73,110,105, 0, 83, 99, 97,
+108,101,121, 73,110,105, 0, 83, 99, 97,108,101,120, 70,105,110, 0, 83, 99, 97,108,101,121, 70,105,110, 0,120, 73,110,105, 0,
+120, 70,105,110, 0,121, 73,110,105, 0,121, 70,105,110, 0,114,111,116, 73,110,105, 0,114,111,116, 70,105,110, 0,105,110,116,
+101,114,112,111,108, 97,116,105,111,110, 0,117,110,105,102,111,114,109, 95,115, 99, 97,108,101, 0, 42,102,114, 97,109,101, 77,
+ 97,112, 0,103,108,111, 98, 97,108, 83,112,101,101,100, 0,108, 97,115,116, 86, 97,108,105,100, 70,114, 97,109,101, 0, 98,117,
+116,116,121,112,101, 0,117,115,101,114,106,105,116, 0,115,116, 97, 0,116,111,116,112, 97,114,116, 0,110,111,114,109,102, 97,
+ 99, 0,111, 98,102, 97, 99, 0,114, 97,110,100,102, 97, 99, 0,116,101,120,102, 97, 99, 0,114, 97,110,100,108,105,102,101, 0,
+102,111,114, 99,101, 91, 51, 93, 0,118,101, 99,116,115,105,122,101, 0,109, 97,120,108,101,110, 0,100,101,102,118,101, 99, 91,
+ 51, 93, 0,109,117,108,116, 91, 52, 93, 0,108,105,102,101, 91, 52, 93, 0, 99,104,105,108,100, 91, 52, 93, 0,109, 97,116, 91,
+ 52, 93, 0,116,101,120,109, 97,112, 0, 99,117,114,109,117,108,116, 0,115,116, 97,116,105, 99,115,116,101,112, 0,111,109, 97,
+116, 0,116,105,109,101,116,101,120, 0,115,112,101,101,100,116,101,120, 0,102,108, 97,103, 50,110,101,103, 0,118,101,114,116,
+103,114,111,117,112, 95,118, 0,118,103,114,111,117,112,110, 97,109,101, 91, 51, 50, 93, 0,118,103,114,111,117,112,110, 97,109,
+101, 95,118, 91, 51, 50, 93, 0, 42,107,101,121,115, 0,109,105,110,102, 97, 99, 0,117,115,101,100, 0,117,115,101,100,101,108,
+101,109, 0, 42,112,111,105,110, 0,114,101,115,101,116,100,105,115,116, 0,108, 97,115,116,118, 97,108, 0, 42,109, 97, 0,107,
+101,121, 0,113,117, 97,108, 0,113,117, 97,108, 50, 0,116, 97,114,103,101,116, 78, 97,109,101, 91, 51, 50, 93, 0,116,111,103,
+103,108,101, 78, 97,109,101, 91, 51, 50, 93, 0,118, 97,108,117,101, 91, 51, 50, 93, 0,109, 97,120,118, 97,108,117,101, 91, 51,
+ 50, 93, 0,100,101,108, 97,121, 0,100,117,114, 97,116,105,111,110, 0,109, 97,116,101,114,105, 97,108, 78, 97,109,101, 91, 51,
+ 50, 93, 0,100, 97,109,112,116,105,109,101,114, 0,112,114,111,112,110, 97,109,101, 91, 51, 50, 93, 0,109, 97,116,110, 97,109,
+101, 91, 51, 50, 93, 0, 97,120,105,115,102,108, 97,103, 0,112,111,115,101, 99,104, 97,110,110,101,108, 91, 51, 50, 93, 0, 99,
+111,110,115,116,114, 97,105,110,116, 91, 51, 50, 93, 0, 42,102,114,111,109, 79, 98,106,101, 99,116, 0,115,117, 98,106,101, 99,
+116, 91, 51, 50, 93, 0, 98,111,100,121, 91, 51, 50, 93, 0,111,116,121,112,101, 0,112,117,108,115,101, 0,102,114,101,113, 0,
+116,111,116,108,105,110,107,115, 0, 42, 42,108,105,110,107,115, 0,116, 97,112, 0,106,111,121,105,110,100,101,120, 0, 97,120,
+105,115, 95,115,105,110,103,108,101, 0, 97,120,105,115,102, 0, 98,117,116,116,111,110, 0,104, 97,116, 0,104, 97,116,102, 0,
+112,114,101, 99,105,115,105,111,110, 0,115,116,114, 91, 49, 50, 56, 93, 0, 42,109,121,110,101,119, 0,105,110,112,117,116,115,
+ 0,116,111,116,115,108,105,110,107,115, 0, 42, 42,115,108,105,110,107,115, 0,118, 97,108,111, 0,115,116, 97,116,101, 95,109,
+ 97,115,107, 0, 42, 97, 99,116, 0,102,114, 97,109,101, 80,114,111,112, 91, 51, 50, 93, 0, 98,108,101,110,100,105,110, 0,112,
+114,105,111,114,105,116,121, 0,101,110,100, 95,114,101,115,101,116, 0,115,116,114,105,100,101, 97,120,105,115, 0,115,116,114,
+105,100,101,108,101,110,103,116,104, 0,109,105,110, 95,103, 97,105,110, 0,109, 97,120, 95,103, 97,105,110, 0,114,101,102,101,
+114,101,110, 99,101, 95,100,105,115,116, 97,110, 99,101, 0,109, 97,120, 95,100,105,115,116, 97,110, 99,101, 0,114,111,108,108,
+111,102,102, 95,102, 97, 99,116,111,114, 0, 99,111,110,101, 95,105,110,110,101,114, 95, 97,110,103,108,101, 0, 99,111,110,101,
+ 95,111,117,116,101,114, 95, 97,110,103,108,101, 0, 99,111,110,101, 95,111,117,116,101,114, 95,103, 97,105,110, 0,112, 97,100,
+ 51, 91, 50, 93, 0,112,105,116, 99,104, 0,115,111,117,110,100, 51, 68, 0,112, 97,100, 54, 91, 49, 93, 0, 42,109,101, 0,108,
+105,110, 86,101,108,111, 99,105,116,121, 91, 51, 93, 0, 97,110,103, 86,101,108,111, 99,105,116,121, 91, 51, 93, 0,108,111, 99,
+ 97,108,102,108, 97,103, 0,100,121,110, 95,111,112,101,114, 97,116,105,111,110, 0,102,111,114, 99,101,108,111, 99, 91, 51, 93,
+ 0,102,111,114, 99,101,114,111,116, 91, 51, 93, 0,108,105,110,101, 97,114,118,101,108,111, 99,105,116,121, 91, 51, 93, 0, 97,
+110,103,117,108, 97,114,118,101,108,111, 99,105,116,121, 91, 51, 93, 0, 42,114,101,102,101,114,101,110, 99,101, 0,109,105,110,
+ 0,109, 97,120, 0,114,111,116,100, 97,109,112, 0,109,105,110,108,111, 99, 91, 51, 93, 0,109, 97,120,108,111, 99, 91, 51, 93,
+ 0,109,105,110,114,111,116, 91, 51, 93, 0,109, 97,120,114,111,116, 91, 51, 93, 0,109, 97,116,112,114,111,112, 91, 51, 50, 93,
+ 0, 98,117,116,115,116, 97, 0, 98,117,116,101,110,100, 0,100,105,115,116,114,105, 98,117,116,105,111,110, 0,105,110,116, 95,
+ 97,114,103, 95, 49, 0,105,110,116, 95, 97,114,103, 95, 50, 0,102,108,111, 97,116, 95, 97,114,103, 95, 49, 0,102,108,111, 97,
+116, 95, 97,114,103, 95, 50, 0,116,111, 80,114,111,112, 78, 97,109,101, 91, 51, 50, 93, 0, 42,116,111, 79, 98,106,101, 99,116,
+ 0, 98,111,100,121, 84,121,112,101, 0,102,105,108,101,110, 97,109,101, 91, 54, 52, 93, 0,108,111, 97,100, 97,110,105,110, 97,
+109,101, 91, 54, 52, 93, 0,105,110,116, 95, 97,114,103, 0,102,108,111, 97,116, 95, 97,114,103, 0, 42,115,117, 98,116, 97,114,
+103,101,116, 0,103,111, 0, 42,110,101,119,112, 97, 99,107,101,100,102,105,108,101, 0, 97,116,116,101,110,117, 97,116,105,111,
+110, 0,100,105,115,116, 97,110, 99,101, 0, 42, 99, 97, 99,104,101, 0, 42,112,108, 97,121, 98, 97, 99,107, 95,104, 97,110,100,
+108,101, 0, 42,108, 97,109,112,114,101,110, 0,103,111, 98,106,101, 99,116, 0,100,117,112,108,105, 95,111,102,115, 91, 51, 93,
+ 0, 42,112,114,111,112, 0, 99,104,105,108,100, 98, 97,115,101, 0,114,111,108,108, 0,104,101, 97,100, 91, 51, 93, 0,116, 97,
+105,108, 91, 51, 93, 0, 98,111,110,101, 95,109, 97,116, 91, 51, 93, 91, 51, 93, 0, 97,114,109, 95,104,101, 97,100, 91, 51, 93,
+ 0, 97,114,109, 95,116, 97,105,108, 91, 51, 93, 0, 97,114,109, 95,109, 97,116, 91, 52, 93, 91, 52, 93, 0,120,119,105,100,116,
+104, 0,122,119,105,100,116,104, 0,101, 97,115,101, 49, 0,101, 97,115,101, 50, 0,114, 97,100, 95,104,101, 97,100, 0,114, 97,
+100, 95,116, 97,105,108, 0, 98,111,110,101, 98, 97,115,101, 0, 99,104, 97,105,110, 98, 97,115,101, 0, 42,101,100, 98,111, 0,
+ 42, 97, 99,116, 95, 98,111,110,101, 0, 42, 97, 99,116, 95,101,100, 98,111,110,101, 0, 42,115,107,101,116, 99,104, 0,108, 97,
+121,101,114, 95,112,114,111,116,101, 99,116,101,100, 0,103,104,111,115,116,101,112, 0,103,104,111,115,116,115,105,122,101, 0,
+103,104,111,115,116,116,121,112,101, 0,112, 97,116,104,115,105,122,101, 0,103,104,111,115,116,115,102, 0,103,104,111,115,116,
+101,102, 0,112, 97,116,104,115,102, 0,112, 97,116,104,101,102, 0,112, 97,116,104, 98, 99, 0,112, 97,116,104, 97, 99, 0, 42,
+112,111,105,110,116,115, 0,115,116, 97,114,116, 95,102,114, 97,109,101, 0,101,110,100, 95,102,114, 97,109,101, 0,103,104,111,
+115,116, 95,115,102, 0,103,104,111,115,116, 95,101,102, 0,103,104,111,115,116, 95, 98, 99, 0,103,104,111,115,116, 95, 97, 99,
+ 0,103,104,111,115,116, 95,116,121,112,101, 0,103,104,111,115,116, 95,115,116,101,112, 0,103,104,111,115,116, 95,102,108, 97,
+103, 0,112, 97,116,104, 95,116,121,112,101, 0,112, 97,116,104, 95,115,116,101,112, 0,112, 97,116,104, 95,118,105,101,119,102,
+108, 97,103, 0,112, 97,116,104, 95, 98, 97,107,101,102,108, 97,103, 0,112, 97,116,104, 95,115,102, 0,112, 97,116,104, 95,101,
+102, 0,112, 97,116,104, 95, 98, 99, 0,112, 97,116,104, 95, 97, 99, 0, 99,111,110,115,116,102,108, 97,103, 0,105,107,102,108,
+ 97,103, 0,115,101,108,101, 99,116,102,108, 97,103, 0, 97,103,114,112, 95,105,110,100,101,120, 0, 42, 98,111,110,101, 0, 42,
+ 99,104,105,108,100, 0,105,107,116,114,101,101, 0, 42, 98, 95, 98,111,110,101, 95,109, 97,116,115, 0, 42,100,117, 97,108, 95,
+113,117, 97,116, 0, 42, 98, 95, 98,111,110,101, 95,100,117, 97,108, 95,113,117, 97,116,115, 0,101,117,108, 91, 51, 93, 0, 99,
+104, 97,110, 95,109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,111,115,101, 95,109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,111,115,
+101, 95,104,101, 97,100, 91, 51, 93, 0,112,111,115,101, 95,116, 97,105,108, 91, 51, 93, 0,108,105,109,105,116,109,105,110, 91,
+ 51, 93, 0,108,105,109,105,116,109, 97,120, 91, 51, 93, 0,115,116,105,102,102,110,101,115,115, 91, 51, 93, 0,105,107,115,116,
+114,101,116, 99,104, 0,105,107,114,111,116,119,101,105,103,104,116, 0,105,107,108,105,110,119,101,105,103,104,116, 0, 42, 99,
+117,115,116,111,109, 0, 42, 99,117,115,116,111,109, 95,116,120, 0, 99,104, 97,110, 98, 97,115,101, 0, 42, 99,104, 97,110,104,
+ 97,115,104, 0,112,114,111,120,121, 95,108, 97,121,101,114, 0,115,116,114,105,100,101, 95,111,102,102,115,101,116, 91, 51, 93,
+ 0, 99,121, 99,108,105, 99, 95,111,102,102,115,101,116, 91, 51, 93, 0, 97,103,114,111,117,112,115, 0, 97, 99,116,105,118,101,
+ 95,103,114,111,117,112, 0,105,107,115,111,108,118,101,114, 0, 42,105,107,100, 97,116, 97, 0, 42,105,107,112, 97,114, 97,109,
+ 0,112,114,111,120,121, 95, 97, 99,116, 95, 98,111,110,101, 91, 51, 50, 93, 0,110,117,109,105,116,101,114, 0,110,117,109,115,
+116,101,112, 0,109,105,110,115,116,101,112, 0,109, 97,120,115,116,101,112, 0,115,111,108,118,101,114, 0,102,101,101,100, 98,
+ 97, 99,107, 0,109, 97,120,118,101,108, 0,100, 97,109,112,109, 97,120, 0,100, 97,109,112,101,112,115, 0, 99,104, 97,110,110,
+101,108,115, 0, 99,117,115,116,111,109, 67,111,108, 0, 99,115, 0, 99,117,114,118,101,115, 0,103,114,111,117,112,115, 0, 97,
+ 99,116,105,118,101, 95,109, 97,114,107,101,114, 0, 42,115,111,117,114, 99,101, 0, 42,102,105,108,116,101,114, 95,103,114,112,
+ 0,102,105,108,116,101,114,102,108, 97,103, 0, 97,100,115, 0,116,105,109,101,115,108,105,100,101, 0, 42,103,114,112, 0,116,
+101,109,112, 0,110, 97,109,101, 91, 51, 48, 93, 0,111,119,110,115,112, 97, 99,101, 0,116, 97,114,115,112, 97, 99,101, 0,101,
+110,102,111,114, 99,101, 0,104,101, 97,100,116, 97,105,108, 0,108,105,110, 95,101,114,114,111,114, 0,114,111,116, 95,101,114,
+114,111,114, 0, 42,116, 97,114, 0,109, 97,116,114,105,120, 91, 52, 93, 91, 52, 93, 0,115,112, 97, 99,101, 0,114,111,116, 79,
+114,100,101,114, 0,116, 97,114,110,117,109, 0,116, 97,114,103,101,116,115, 0,105,116,101,114, 97,116,105,111,110,115, 0,114,
+111,111,116, 98,111,110,101, 0,109, 97,120, 95,114,111,111,116, 98,111,110,101, 0, 42,112,111,108,101,116, 97,114, 0,112,111,
+108,101,115,117, 98,116, 97,114,103,101,116, 91, 51, 50, 93, 0,112,111,108,101, 97,110,103,108,101, 0,111,114,105,101,110,116,
+119,101,105,103,104,116, 0,103,114, 97, 98,116, 97,114,103,101,116, 91, 51, 93, 0,110,117,109,112,111,105,110,116,115, 0, 99,
+104, 97,105,110,108,101,110, 0,120,122, 83, 99, 97,108,101, 77,111,100,101, 0,114,101,115,101,114,118,101,100, 49, 0,114,101,
+115,101,114,118,101,100, 50, 0,109,105,110,109, 97,120,102,108, 97,103, 0,115,116,117, 99,107, 0, 99, 97, 99,104,101, 91, 51,
+ 93, 0,108,111, 99,107,102,108, 97,103, 0,102,111,108,108,111,119,102,108, 97,103, 0,118,111,108,109,111,100,101, 0,112,108,
+ 97,110,101, 0,111,114,103,108,101,110,103,116,104, 0, 98,117,108,103,101, 0,112,105,118, 88, 0,112,105,118, 89, 0,112,105,
+118, 90, 0, 97,120, 88, 0, 97,120, 89, 0, 97,120, 90, 0,109,105,110, 76,105,109,105,116, 91, 54, 93, 0,109, 97,120, 76,105,
+109,105,116, 91, 54, 93, 0,101,120,116,114, 97, 70,122, 0,105,110,118,109, 97,116, 91, 52, 93, 91, 52, 93, 0,102,114,111,109,
+ 0,116,111, 0,109, 97,112, 91, 51, 93, 0,101,120,112,111, 0,102,114,111,109, 95,109,105,110, 91, 51, 93, 0,102,114,111,109,
+ 95,109, 97,120, 91, 51, 93, 0,116,111, 95,109,105,110, 91, 51, 93, 0,116,111, 95,109, 97,120, 91, 51, 93, 0,114,111,116, 65,
+120,105,115, 0,122,109,105,110, 0,122,109, 97,120, 0,112, 97,100, 91, 57, 93, 0, 99,104, 97,110,110,101,108, 91, 51, 50, 93,
+ 0,110,111, 95,114,111,116, 95, 97,120,105,115, 0,115,116,114,105,100,101, 95, 97,120,105,115, 0, 99,117,114,109,111,100, 0,
+ 97, 99,116,115,116, 97,114,116, 0, 97, 99,116,101,110,100, 0, 97, 99,116,111,102,102,115, 0,115,116,114,105,100,101,108,101,
+110, 0,115, 99, 97,108,101, 0, 98,108,101,110,100,111,117,116, 0,115,116,114,105,100,101, 99,104, 97,110,110,101,108, 91, 51,
+ 50, 93, 0,111,102,102,115, 95, 98,111,110,101, 91, 51, 50, 93, 0,104, 97,115,105,110,112,117,116, 0,104, 97,115,111,117,116,
+112,117,116, 0,100, 97,116, 97,116,121,112,101, 0,115,111, 99,107,101,116,116,121,112,101, 0, 42,110,101,119, 95,115,111, 99,
+107, 0,110,115, 0,108,105,109,105,116, 0,115,116, 97, 99,107, 95,105,110,100,101,120, 0,105,110,116,101,114,110, 0,115,116,
+ 97, 99,107, 95,105,110,100,101,120, 95,101,120,116, 0,108,111, 99,120, 0,108,111, 99,121, 0,111,119,110, 95,105,110,100,101,
+120, 0,116,111, 95,105,110,100,101,120, 0, 42,116,111,115,111, 99,107, 0, 42,108,105,110,107, 0, 42,110,101,119, 95,110,111,
+100,101, 0,108, 97,115,116,121, 0,111,117,116,112,117,116,115, 0, 42,115,116,111,114, 97,103,101, 0,109,105,110,105,119,105,
+100,116,104, 0, 99,117,115,116,111,109, 49, 0, 99,117,115,116,111,109, 50, 0, 99,117,115,116,111,109, 51, 0, 99,117,115,116,
+111,109, 52, 0,110,101,101,100, 95,101,120,101, 99, 0,101,120,101, 99, 0, 42,116,104,114,101, 97,100,100, 97,116, 97, 0,116,
+111,116,114, 0, 98,117,116,114, 0,112,114,118,114, 0, 42, 98,108,111, 99,107, 0, 42,116,121,112,101,105,110,102,111, 0, 42,
+102,114,111,109,110,111,100,101, 0, 42,116,111,110,111,100,101, 0, 42,102,114,111,109,115,111, 99,107, 0,110,111,100,101,115,
+ 0,108,105,110,107,115, 0, 42,115,116, 97, 99,107, 0, 42,116,104,114,101, 97,100,115,116, 97, 99,107, 0,105,110,105,116, 0,
+115,116, 97, 99,107,115,105,122,101, 0, 99,117,114, 95,105,110,100,101,120, 0, 97,108,108,116,121,112,101,115, 0, 42,111,119,
+110,116,121,112,101, 0,112, 97,100, 50, 91, 50, 93, 0, 40, 42,112,114,111,103,114,101,115,115, 41, 40, 41, 0, 40, 42,115,116,
+ 97,116,115, 95,100,114, 97,119, 41, 40, 41, 0, 40, 42,116,101,115,116, 95, 98,114,101, 97,107, 41, 40, 41, 0, 42,116, 98,104,
+ 0, 42,112,114,104, 0, 42,115,100,104, 0, 99,121, 99,108,105, 99, 0,109,111,118,105,101, 0,115, 97,109,112,108,101,115, 0,
+109, 97,120,115,112,101,101,100, 0,109,105,110,115,112,101,101,100, 0,112,101,114, 99,101,110,116,120, 0,112,101,114, 99,101,
+110,116,121, 0, 98,111,107,101,104, 0,103, 97,109,109, 97, 0, 99,117,114,118,101,100, 0,105,109, 97,103,101, 95,105,110, 95,
+119,105,100,116,104, 0,105,109, 97,103,101, 95,105,110, 95,104,101,105,103,104,116, 0, 99,101,110,116,101,114, 95,120, 0, 99,
+101,110,116,101,114, 95,121, 0,115,112,105,110, 0,119,114, 97,112, 0,115,105,103,109, 97, 95, 99,111,108,111,114, 0,115,105,
+103,109, 97, 95,115,112, 97, 99,101, 0,104,117,101, 0,116, 49, 0,116, 50, 0,116, 51, 0,102,115,116,114,101,110,103,116,104,
+ 0,102, 97,108,112,104, 97, 0,107,101,121, 91, 52, 93, 0, 97,108,103,111,114,105,116,104,109, 0, 99,104, 97,110,110,101,108,
+ 0,120, 49, 0,120, 50, 0,121, 49, 0,121, 50, 0, 99,111,108,110, 97,109,101, 91, 51, 50, 93, 0, 98,107,116,121,112,101, 0,
+114,111,116, 97,116,105,111,110, 0,103, 97,109, 99,111, 0,110,111, 95,122, 98,117,102, 0,102,115,116,111,112, 0,109, 97,120,
+ 98,108,117,114, 0, 98,116,104,114,101,115,104, 0, 42,100,105, 99,116, 0, 42,110,111,100,101, 0, 97,110,103,108,101, 95,111,
+102,115, 0, 99,111,108,109,111,100, 0,109,105,120, 0,116,104,114,101,115,104,111,108,100, 0,102, 97,100,101, 0,109, 0, 99,
+ 0,106,105,116, 0,112,114,111,106, 0,102,105,116, 0,115,108,111,112,101, 91, 51, 93, 0,112,111,119,101,114, 91, 51, 93, 0,
+108,105,102,116, 95,108,103,103, 91, 51, 93, 0,103, 97,109,109, 97, 95,105,110,118, 91, 51, 93, 0,108,105,109, 99,104, 97,110,
+ 0,117,110,115,112,105,108,108, 0,108,105,109,115, 99, 97,108,101, 0,117,115,112,105,108,108,114, 0,117,115,112,105,108,108,
+103, 0,117,115,112,105,108,108, 98, 0,115,104,111,114,116,121, 0,109,105,110,116, 97, 98,108,101, 0,109, 97,120,116, 97, 98,
+108,101, 0,101,120,116, 95,105,110, 91, 50, 93, 0,101,120,116, 95,111,117,116, 91, 50, 93, 0, 42, 99,117,114,118,101, 0, 42,
+116, 97, 98,108,101, 0, 42,112,114,101,109,117,108,116, 97, 98,108,101, 0,112,114,101,115,101,116, 0, 99,104, 97,110,103,101,
+100, 95,116,105,109,101,115,116, 97,109,112, 0, 99,117,114,114, 0, 99,108,105,112,114, 0, 99,109, 91, 52, 93, 0, 98,108, 97,
+ 99,107, 91, 51, 93, 0,119,104,105,116,101, 91, 51, 93, 0, 98,119,109,117,108, 91, 51, 93, 0,115, 97,109,112,108,101, 91, 51,
+ 93, 0,120, 95,114,101,115,111,108,117,116,105,111,110, 0,100, 97,116, 97, 95,114, 91, 50, 53, 54, 93, 0,100, 97,116, 97, 95,
+103, 91, 50, 53, 54, 93, 0,100, 97,116, 97, 95, 98, 91, 50, 53, 54, 93, 0,100, 97,116, 97, 95,108,117,109, 97, 91, 50, 53, 54,
+ 93, 0,115, 97,109,112,108,101, 95,102,117,108,108, 0,115, 97,109,112,108,101, 95,108,105,110,101,115, 0, 97, 99, 99,117,114,
+ 97, 99,121, 0,119, 97,118,101,102,114,109, 95,109,111,100,101, 0,119, 97,118,101,102,114,109, 95, 97,108,112,104, 97, 0,119,
+ 97,118,101,102,114,109, 95,121,102, 97, 99, 0,119, 97,118,101,102,114,109, 95,104,101,105,103,104,116, 0,118,101, 99,115, 99,
+111,112,101, 95, 97,108,112,104, 97, 0,118,101, 99,115, 99,111,112,101, 95,104,101,105,103,104,116, 0,109,105,110,109, 97,120,
+ 91, 51, 93, 91, 50, 93, 0,104,105,115,116, 0, 42,119, 97,118,101,102,111,114,109, 95, 49, 0, 42,119, 97,118,101,102,111,114,
+109, 95, 50, 0, 42,119, 97,118,101,102,111,114,109, 95, 51, 0, 42,118,101, 99,115, 99,111,112,101, 0,119, 97,118,101,102,111,
+114,109, 95,116,111,116, 0,111,102,102,115,101,116, 91, 50, 93, 0, 99,108,111,110,101, 0,109,116,101,120, 0, 42,105, 99,111,
+110, 95,105,109, 98,117,102, 0,105, 99,111,110, 95,102,105,108,101,112, 97,116,104, 91, 50, 52, 48, 93, 0,110,111,114,109, 97,
+108, 95,119,101,105,103,104,116, 0,111, 98, 95,109,111,100,101, 0,106,105,116,116,101,114, 0,115,109,111,111,116,104, 95,115,
116,114,111,107,101, 95,114, 97,100,105,117,115, 0,115,109,111,111,116,104, 95,115,116,114,111,107,101, 95,102, 97, 99,116,111,
-114, 0,114, 97,116,101, 0,114,103, 98, 91, 51, 93, 0,115, 99,117,108,112,116, 95,116,111,111,108, 0,118,101,114,116,101,120,
-112, 97,105,110,116, 95,116,111,111,108, 0,105,109, 97,103,101,112, 97,105,110,116, 95,116,111,111,108, 0, 97, 99,116,105,118,
-101, 95,114,110,100, 0, 97, 99,116,105,118,101, 95, 99,108,111,110,101, 0, 97, 99,116,105,118,101, 95,109, 97,115,107, 0, 42,
-108, 97,121,101,114,115, 0,116,111,116,108, 97,121,101,114, 0,109, 97,120,108, 97,121,101,114, 0,116,111,116,115,105,122,101,
- 0, 42,112,111,111,108, 0, 42,101,120,116,101,114,110, 97,108, 0,118,101,108, 91, 51, 93, 0,114,111,116, 91, 52, 93, 0, 97,
-118,101, 91, 51, 93, 0, 42,103,114,111,117,110,100, 0,119, 97,110,100,101,114, 91, 51, 93, 0,110,117,109, 0,112, 97,114,101,
-110,116, 0,112, 97, 91, 52, 93, 0,119, 91, 52, 93, 0,102,117,118, 91, 52, 93, 0,102,111,102,102,115,101,116, 0,114,116, 91,
- 50, 93, 0,112,114,101,118, 95,115,116, 97,116,101, 0, 42,104, 97,105,114, 0, 42, 98,111,105,100, 0,100,105,101,116,105,109,
-101, 0,110,117,109, 95,100,109, 99, 97, 99,104,101, 0,104, 97,105,114, 95,105,110,100,101,120, 0, 97,108,105,118,101, 0,115,
-112,114,105,110,103, 95,107, 0,114,101,115,116, 95,108,101,110,103,116,104, 0,118,105,115, 99,111,115,105,116,121, 95,111,109,
-101,103, 97, 0,118,105,115, 99,111,115,105,116,121, 95, 98,101,116, 97, 0,115,116,105,102,102,110,101,115,115, 95,107, 0,115,
-116,105,102,102,110,101,115,115, 95,107,110,101, 97,114, 0,114,101,115,116, 95,100,101,110,115,105,116,121, 0, 98,117,111,121,
- 97,110, 99,121, 0, 42, 98,111,105,100,115, 0, 42,102,108,117,105,100, 0,100,105,115,116,114, 0,112,104,121,115,116,121,112,
-101, 0, 97,118,101,109,111,100,101, 0,114,101, 97, 99,116,101,118,101,110,116, 0,100,114, 97,119, 0,100,114, 97,119, 95, 97,
-115, 0,100,114, 97,119, 95,115,105,122,101, 0, 99,104,105,108,100,116,121,112,101, 0,114,101,110, 95, 97,115, 0,115,117, 98,
-102,114, 97,109,101,115, 0,114,101,110, 95,115,116,101,112, 0,104, 97,105,114, 95,115,116,101,112, 0,107,101,121,115, 95,115,
-116,101,112, 0, 97,100, 97,112,116, 95, 97,110,103,108,101, 0, 97,100, 97,112,116, 95,112,105,120, 0,114,111,116,102,114,111,
-109, 0,105,110,116,101,103,114, 97,116,111,114, 0, 98, 98, 95, 97,108,105,103,110, 0, 98, 98, 95,117,118, 95,115,112,108,105,
-116, 0, 98, 98, 95, 97,110,105,109, 0, 98, 98, 95,115,112,108,105,116, 95,111,102,102,115,101,116, 0, 98, 98, 95,116,105,108,
-116, 0, 98, 98, 95,114, 97,110,100, 95,116,105,108,116, 0, 98, 98, 95,111,102,102,115,101,116, 91, 50, 93, 0,115,105,109,112,
-108,105,102,121, 95,114,101,102,115,105,122,101, 0,115,105,109,112,108,105,102,121, 95,114, 97,116,101, 0,115,105,109,112,108,
-105,102,121, 95,116,114, 97,110,115,105,116,105,111,110, 0,115,105,109,112,108,105,102,121, 95,118,105,101,119,112,111,114,116,
- 0,116,105,109,101,116,119,101, 97,107, 0,106,105,116,102, 97, 99, 0,101,102,102, 95,104, 97,105,114, 0,103,114,105,100, 95,
-114,101,115, 0,112, 97,114,116,102, 97, 99, 0,116, 97,110,102, 97, 99, 0,116, 97,110,112,104, 97,115,101, 0,114,101, 97, 99,
-116,102, 97, 99, 0,111, 98, 95,118,101,108, 91, 51, 93, 0, 97,118,101,102, 97, 99, 0,112,104, 97,115,101,102, 97, 99, 0,114,
- 97,110,100,114,111,116,102, 97, 99, 0,114, 97,110,100,112,104, 97,115,101,102, 97, 99, 0,114, 97,110,100,115,105,122,101, 0,
-114,101, 97, 99,116,115,104, 97,112,101, 0, 97, 99, 99, 91, 51, 93, 0,100,114, 97,103,102, 97, 99, 0, 98,114,111,119,110,102,
- 97, 99, 0,100, 97,109,112,102, 97, 99, 0,114, 97,110,100,108,101,110,103,116,104, 0, 99,104,105,108,100, 95,110, 98,114, 0,
-114,101,110, 95, 99,104,105,108,100, 95,110, 98,114, 0,112, 97,114,101,110,116,115, 0, 99,104,105,108,100,115,105,122,101, 0,
- 99,104,105,108,100,114, 97,110,100,115,105,122,101, 0, 99,104,105,108,100,114, 97,100, 0, 99,104,105,108,100,102,108, 97,116,
- 0, 99,108,117,109,112,112,111,119, 0,114,111,117,103,104, 49, 0,114,111,117,103,104, 49, 95,115,105,122,101, 0,114,111,117,
-103,104, 50, 0,114,111,117,103,104, 50, 95,115,105,122,101, 0,114,111,117,103,104, 50, 95,116,104,114,101,115, 0,114,111,117,
-103,104, 95,101,110,100, 0,114,111,117,103,104, 95,101,110,100, 95,115,104, 97,112,101, 0, 99,108,101,110,103,116,104, 0, 99,
-108,101,110,103,116,104, 95,116,104,114,101,115, 0, 98,114, 97,110, 99,104, 95,116,104,114,101,115, 0,100,114, 97,119, 95,108,
-105,110,101, 91, 50, 93, 0,112, 97,116,104, 95,115,116, 97,114,116, 0,112, 97,116,104, 95,101,110,100, 0,116,114, 97,105,108,
- 95, 99,111,117,110,116, 0,107,101,121,101,100, 95,108,111,111,112,115, 0,100,117,112,108,105,119,101,105,103,104,116,115, 0,
- 42,101,102,102, 95,103,114,111,117,112, 0, 42,100,117,112, 95,111, 98, 0, 42, 98, 98, 95,111, 98, 0, 42,112,100, 50, 0, 42,
-112, 97,114,116, 0, 42,112, 97,114,116,105, 99,108,101,115, 0, 42, 42,112, 97,116,104, 99, 97, 99,104,101, 0, 42, 42, 99,104,
-105,108,100, 99, 97, 99,104,101, 0,112, 97,116,104, 99, 97, 99,104,101, 98,117,102,115, 0, 99,104,105,108,100, 99, 97, 99,104,
-101, 98,117,102,115, 0, 42, 99,108,109,100, 0, 42,104, 97,105,114, 95,105,110, 95,100,109, 0, 42,104, 97,105,114, 95,111,117,
-116, 95,100,109, 0, 42,116, 97,114,103,101,116, 95,111, 98, 0, 42,108, 97,116,116,105, 99,101, 0,116,114,101,101, 95,102,114,
- 97,109,101, 0,116,111,116, 99,104,105,108,100, 0,116,111,116, 99, 97, 99,104,101,100, 0,116,111,116, 99,104,105,108,100, 99,
- 97, 99,104,101, 0,116, 97,114,103,101,116, 95,112,115,121,115, 0,116,111,116,107,101,121,101,100, 0, 98, 97,107,101,115,112,
- 97, 99,101, 0, 98, 98, 95,117,118,110, 97,109,101, 91, 51, 93, 91, 51, 50, 93, 0,118,103,114,111,117,112, 91, 49, 50, 93, 0,
-118,103, 95,110,101,103, 0,114,116, 51, 0, 42,114,101,110,100,101,114,100, 97,116, 97, 0, 42,101,102,102,101, 99,116,111,114,
-115, 0, 42,116,114,101,101, 0, 42,112,100,100, 0, 42,102,114, 97,110,100, 0, 67,100,105,115, 0, 67,118,105, 0,115,116,114,
-117, 99,116,117,114, 97,108, 0, 98,101,110,100,105,110,103, 0,109, 97,120, 95, 98,101,110,100, 0,109, 97,120, 95,115,116,114,
-117, 99,116, 0,109, 97,120, 95,115,104,101, 97,114, 0, 97,118,103, 95,115,112,114,105,110,103, 95,108,101,110, 0,116,105,109,
-101,115, 99, 97,108,101, 0,101,102,102, 95,102,111,114, 99,101, 95,115, 99, 97,108,101, 0,101,102,102, 95,119,105,110,100, 95,
-115, 99, 97,108,101, 0,115,105,109, 95,116,105,109,101, 95,111,108,100, 0,118,101,108,111, 99,105,116,121, 95,115,109,111,111,
-116,104, 0, 99,111,108,108,105,100,101,114, 95,102,114,105, 99,116,105,111,110, 0,115,116,101,112,115, 80,101,114, 70,114, 97,
-109,101, 0,112,114,101,114,111,108,108, 0,109, 97,120,115,112,114,105,110,103,108,101,110, 0,115,111,108,118,101,114, 95,116,
-121,112,101, 0,118,103,114,111,117,112, 95, 98,101,110,100, 0,118,103,114,111,117,112, 95,109, 97,115,115, 0,118,103,114,111,
-117,112, 95,115,116,114,117, 99,116, 0,115,104, 97,112,101,107,101,121, 95,114,101,115,116, 0,112,114,101,115,101,116,115, 0,
-114,101,115,101,116, 0, 42, 99,111,108,108,105,115,105,111,110, 95,108,105,115,116, 0,101,112,115,105,108,111,110, 0,115,101,
-108,102, 95,102,114,105, 99,116,105,111,110, 0,115,101,108,102,101,112,115,105,108,111,110, 0,115,101,108,102, 95,108,111,111,
-112, 95, 99,111,117,110,116, 0,108,111,111,112, 95, 99,111,117,110,116, 0,112,114,101,115,115,117,114,101, 0,116,104,105, 99,
-107,110,101,115,115, 0,115,116,114,111,107,101,115, 0,102,114, 97,109,101,110,117,109, 0, 42, 97, 99,116,102,114, 97,109,101,
- 0,103,115,116,101,112, 0,105,110,102,111, 91, 49, 50, 56, 93, 0,115, 98,117,102,102,101,114, 95,115,105,122,101, 0,115, 98,
-117,102,102,101,114, 95,115,102,108, 97,103, 0, 42,115, 98,117,102,102,101,114, 0, 42,116,121,112,101,115,116,114, 0, 42,109,
-101,115,115, 97,103,101, 0,108,105,115,116, 0,112,114,105,110,116,108,101,118,101,108, 0,115,116,111,114,101,108,101,118,101,
-108, 0, 42,114,101,112,111,114,116,116,105,109,101,114, 0,103,114,101,121,115, 99, 97,108,101, 0,119,105,100,116,104,102, 97,
- 99, 0, 42,119,105,110,100,114, 97,119, 97, 98,108,101, 0, 42,119,105,110, 97, 99,116,105,118,101, 0,119,105,110,100,111,119,
-115, 0,105,110,105,116,105, 97,108,105,122,101,100, 0,102,105,108,101, 95,115, 97,118,101,100, 0,111,112, 95,117,110,100,111,
- 95,100,101,112,116,104, 0,111,112,101,114, 97,116,111,114,115, 0,113,117,101,117,101, 0,114,101,112,111,114,116,115, 0,106,
-111, 98,115, 0,112, 97,105,110,116, 99,117,114,115,111,114,115, 0,100,114, 97,103,115, 0,107,101,121, 99,111,110,102,105,103,
-115, 0, 42,100,101,102, 97,117,108,116, 99,111,110,102, 0,116,105,109,101,114,115, 0, 42, 97,117,116,111,115, 97,118,101,116,
-105,109,101,114, 0, 42,103,104,111,115,116,119,105,110, 0,103,114, 97, 98, 99,117,114,115,111,114, 0, 42,110,101,119,115, 99,
-114,101,101,110, 0,115, 99,114,101,101,110,110, 97,109,101, 91, 51, 50, 93, 0,112,111,115,120, 0,112,111,115,121, 0,119,105,
-110,100,111,119,115,116, 97,116,101, 0,109,111,110,105,116,111,114, 0,108, 97,115,116, 99,117,114,115,111,114, 0, 97,100,100,
-109,111,117,115,101,109,111,118,101, 0, 42,101,118,101,110,116,115,116, 97,116,101, 0, 42, 99,117,114,115,119,105,110, 0, 42,
-116,119,101, 97,107, 0,100,114, 97,119,109,101,116,104,111,100, 0,100,114, 97,119,102, 97,105,108, 0, 42,100,114, 97,119,100,
- 97,116, 97, 0,109,111,100, 97,108,104, 97,110,100,108,101,114,115, 0,115,117, 98,119,105,110,100,111,119,115, 0,103,101,115,
-116,117,114,101, 0,105,100,110, 97,109,101, 91, 54, 52, 93, 0,112,114,111,112,118, 97,108,117,101, 0,115,104,105,102,116, 0,
- 99,116,114,108, 0, 97,108,116, 0,111,115,107,101,121, 0,107,101,121,109,111,100,105,102,105,101,114, 0,109, 97,112,116,121,
-112,101, 0, 42,112,116,114, 0,105,116,101,109,115, 0,115,112, 97, 99,101,105,100, 0,114,101,103,105,111,110,105,100, 0,107,
-109,105, 95,105,100, 0, 40, 42,112,111,108,108, 41, 40, 41, 0, 42,109,111,100, 97,108, 95,105,116,101,109,115, 0, 98, 97,115,
-101,110, 97,109,101, 91, 54, 52, 93, 0, 97, 99,116,107,101,121,109, 97,112, 0, 42, 99,117,115,116,111,109,100, 97,116, 97, 0,
- 42,112,121, 95,105,110,115,116, 97,110, 99,101, 0, 42,114,101,112,111,114,116,115, 0,109, 97, 99,114,111, 0, 42,111,112,109,
- 0, 42,101,100, 97,116, 97, 0,105,110,102,108,117,101,110, 99,101, 0, 42, 99,111,101,102,102,105, 99,105,101,110,116,115, 0,
- 97,114,114, 97,121,115,105,122,101, 0,112,111,108,121, 95,111,114,100,101,114, 0, 97,109,112,108,105,116,117,100,101, 0,112,
-104, 97,115,101, 95,109,117,108,116,105,112,108,105,101,114, 0,112,104, 97,115,101, 95,111,102,102,115,101,116, 0,118, 97,108,
-117,101, 95,111,102,102,115,101,116, 0,109,105,100,118, 97,108, 0, 98,101,102,111,114,101, 95,109,111,100,101, 0, 97,102,116,
-101,114, 95,109,111,100,101, 0, 98,101,102,111,114,101, 95, 99,121, 99,108,101,115, 0, 97,102,116,101,114, 95, 99,121, 99,108,
-101,115, 0,114,101, 99,116, 0,112,104, 97,115,101, 0,109,111,100,105,102,105, 99, 97,116,105,111,110, 0,115,116,101,112, 95,
-115,105,122,101, 0, 42,114,110, 97, 95,112, 97,116,104, 0,112, 99,104, 97,110, 95,110, 97,109,101, 91, 51, 50, 93, 0,116,114,
- 97,110,115, 67,104, 97,110, 0,105,100,116,121,112,101, 0,116, 97,114,103,101,116,115, 91, 56, 93, 0,110,117,109, 95,116, 97,
-114,103,101,116,115, 0,118, 97,114,105, 97, 98,108,101,115, 0,101,120,112,114,101,115,115,105,111,110, 91, 50, 53, 54, 93, 0,
- 42,101,120,112,114, 95, 99,111,109,112, 0,118,101, 99, 91, 50, 93, 0, 42,102,112,116, 0, 97,114,114, 97,121, 95,105,110,100,
-101,120, 0, 99,111,108,111,114, 95,109,111,100,101, 0, 99,111,108,111,114, 91, 51, 93, 0,102,114,111,109, 91, 49, 50, 56, 93,
- 0,116,111, 91, 49, 50, 56, 93, 0,109, 97,112,112,105,110,103,115, 0,115,116,114,105,112,115, 0, 42,114,101,109, 97,112, 0,
-102, 99,117,114,118,101,115, 0,115,116,114,105,112, 95,116,105,109,101, 0, 98,108,101,110,100,109,111,100,101, 0,101,120,116,
-101,110,100,109,111,100,101, 0,103,114,111,117,112, 91, 54, 52, 93, 0,103,114,111,117,112,109,111,100,101, 0,107,101,121,105,
-110,103,102,108, 97,103, 0,112, 97,116,104,115, 0,116,121,112,101,105,110,102,111, 91, 54, 52, 93, 0, 97, 99,116,105,118,101,
- 95,112, 97,116,104, 0, 42,116,109,112, 97, 99,116, 0,110,108, 97, 95,116,114, 97, 99,107,115, 0, 42, 97, 99,116,115,116,114,
-105,112, 0,100,114,105,118,101,114,115, 0,111,118,101,114,114,105,100,101,115, 0, 97, 99,116, 95, 98,108,101,110,100,109,111,
-100,101, 0, 97, 99,116, 95,101,120,116,101,110,100,109,111,100,101, 0, 97, 99,116, 95,105,110,102,108,117,101,110, 99,101, 0,
-114,117,108,101, 0,111,112,116,105,111,110,115, 0,102,101, 97,114, 95,102, 97, 99,116,111,114, 0,115,105,103,110, 97,108, 95,
-105,100, 0,108,111,111,107, 95, 97,104,101, 97,100, 0,111,108,111, 99, 91, 51, 93, 0,113,117,101,117,101, 95,115,105,122,101,
- 0,119, 97,110,100,101,114, 0,102,108,101,101, 95,100,105,115,116, 97,110, 99,101, 0,104,101, 97,108,116,104, 0,115,116, 97,
-116,101, 95,105,100, 0,114,117,108,101,115, 0, 99,111,110,100,105,116,105,111,110,115, 0, 97, 99,116,105,111,110,115, 0,114,
-117,108,101,115,101,116, 95,116,121,112,101, 0,114,117,108,101, 95,102,117,122,122,105,110,101,115,115, 0,108, 97,115,116, 95,
-115,116, 97,116,101, 95,105,100, 0,108, 97,110,100,105,110,103, 95,115,109,111,111,116,104,110,101,115,115, 0, 98, 97,110,107,
-105,110,103, 0, 97,103,103,114,101,115,115,105,111,110, 0, 97,105,114, 95,109,105,110, 95,115,112,101,101,100, 0, 97,105,114,
- 95,109, 97,120, 95,115,112,101,101,100, 0, 97,105,114, 95,109, 97,120, 95, 97, 99, 99, 0, 97,105,114, 95,109, 97,120, 95, 97,
-118,101, 0, 97,105,114, 95,112,101,114,115,111,110, 97,108, 95,115,112, 97, 99,101, 0,108, 97,110,100, 95,106,117,109,112, 95,
-115,112,101,101,100, 0,108, 97,110,100, 95,109, 97,120, 95,115,112,101,101,100, 0,108, 97,110,100, 95,109, 97,120, 95, 97, 99,
- 99, 0,108, 97,110,100, 95,109, 97,120, 95, 97,118,101, 0,108, 97,110,100, 95,112,101,114,115,111,110, 97,108, 95,115,112, 97,
- 99,101, 0,108, 97,110,100, 95,115,116,105, 99,107, 95,102,111,114, 99,101, 0,115,116, 97,116,101,115, 0, 42,115,109,100, 0,
- 42,102,108,117,105,100, 95,103,114,111,117,112, 0, 42, 99,111,108,108, 95,103,114,111,117,112, 0, 42,119,116, 0, 42,116,101,
-120, 95,119,116, 0, 42,116,101,120, 95,115,104, 97,100,111,119, 0, 42,115,104, 97,100,111,119, 0,112, 48, 91, 51, 93, 0,112,
- 49, 91, 51, 93, 0,100,120, 0,111,109,101,103, 97, 0,116,101,109,112, 65,109, 98, 0, 98,101,116, 97, 0,114,101,115, 91, 51,
- 93, 0, 97,109,112,108,105,102,121, 0,109, 97,120,114,101,115, 0,118,105,101,119,115,101,116,116,105,110,103,115, 0,110,111,
-105,115,101, 0,100,105,115,115, 95,112,101,114, 99,101,110,116, 0,100,105,115,115, 95,115,112,101,101,100, 0,114,101,115, 95,
-119,116, 91, 51, 93, 0,100,120, 95,119,116, 0,118, 51,100,110,117,109, 0, 99, 97, 99,104,101, 95, 99,111,109,112, 0, 99, 97,
- 99,104,101, 95,104,105,103,104, 95, 99,111,109,112, 0, 42,112,111,105,110,116, 95, 99, 97, 99,104,101, 91, 50, 93, 0,112,116,
- 99, 97, 99,104,101,115, 91, 50, 93, 0,118,101,108,111, 99,105,116,121, 91, 51, 93, 0,118,103,114,112, 95,104,101, 97,116, 95,
-115, 99, 97,108,101, 91, 50, 93, 0,118,103,114,111,117,112, 95,102,108,111,119, 0,118,103,114,111,117,112, 95,100,101,110,115,
-105,116,121, 0,118,103,114,111,117,112, 95,104,101, 97,116, 0, 42,112,111,105,110,116,115, 95,111,108,100, 0, 42,118,101,108,
- 0,109, 97,116, 95,111,108,100, 91, 52, 93, 91, 52, 93, 0, 0, 84, 89, 80, 69,212, 1, 0, 0, 99,104, 97,114, 0,117, 99,104,
- 97,114, 0,115,104,111,114,116, 0,117,115,104,111,114,116, 0,105,110,116, 0,108,111,110,103, 0,117,108,111,110,103, 0,102,
-108,111, 97,116, 0,100,111,117, 98,108,101, 0,118,111,105,100, 0, 76,105,110,107, 0, 76,105,110,107, 68, 97,116, 97, 0, 76,
-105,115,116, 66, 97,115,101, 0,118,101, 99, 50,115, 0,118,101, 99, 50,102, 0,118,101, 99, 50,105, 0,118,101, 99, 50,100, 0,
-118,101, 99, 51,105, 0,118,101, 99, 51,102, 0,118,101, 99, 51,100, 0,118,101, 99, 52,105, 0,118,101, 99, 52,102, 0,118,101,
- 99, 52,100, 0,114, 99,116,105, 0,114, 99,116,102, 0, 73, 68, 80,114,111,112,101,114,116,121, 68, 97,116, 97, 0, 73, 68, 80,
-114,111,112,101,114,116,121, 0, 73, 68, 0, 76,105, 98,114, 97,114,121, 0, 70,105,108,101, 68, 97,116, 97, 0, 80,114,101,118,
-105,101,119, 73,109, 97,103,101, 0, 73,112,111, 68,114,105,118,101,114, 0, 79, 98,106,101, 99,116, 0, 73,112,111, 67,117,114,
-118,101, 0, 66, 80,111,105,110,116, 0, 66,101,122, 84,114,105,112,108,101, 0, 73,112,111, 0, 75,101,121, 66,108,111, 99,107,
- 0, 75,101,121, 0, 65,110,105,109, 68, 97,116, 97, 0, 84,101,120,116, 76,105,110,101, 0, 84,101,120,116, 77, 97,114,107,101,
-114, 0, 84,101,120,116, 0, 80, 97, 99,107,101,100, 70,105,108,101, 0, 67, 97,109,101,114, 97, 0, 73,109, 97,103,101, 85,115,
-101,114, 0, 83, 99,101,110,101, 0, 73,109, 97,103,101, 0, 71, 80, 85, 84,101,120,116,117,114,101, 0, 97,110,105,109, 0, 82,
-101,110,100,101,114, 82,101,115,117,108,116, 0, 77, 84,101,120, 0, 84,101,120, 0, 80,108,117,103,105,110, 84,101,120, 0, 67,
- 66, 68, 97,116, 97, 0, 67,111,108,111,114, 66, 97,110,100, 0, 69,110,118, 77, 97,112, 0, 73,109, 66,117,102, 0, 80,111,105,
-110,116, 68,101,110,115,105,116,121, 0, 86,111,120,101,108, 68, 97,116, 97, 0, 98, 78,111,100,101, 84,114,101,101, 0, 84,101,
-120, 77, 97,112,112,105,110,103, 0, 76, 97,109,112, 0, 67,117,114,118,101, 77, 97,112,112,105,110,103, 0, 87, 97,118,101, 0,
- 86,111,108,117,109,101, 83,101,116,116,105,110,103,115, 0, 77, 97,116,101,114,105, 97,108, 0, 71,114,111,117,112, 0, 86, 70,
-111,110,116, 0, 86, 70,111,110,116, 68, 97,116, 97, 0, 77,101,116, 97, 69,108,101,109, 0, 66,111,117,110,100, 66,111,120, 0,
- 77,101,116, 97, 66, 97,108,108, 0, 78,117,114, 98, 0, 67,104, 97,114, 73,110,102,111, 0, 84,101,120,116, 66,111,120, 0, 67,
-117,114,118,101, 0, 80, 97,116,104, 0, 83,101,108, 66,111,120, 0, 69,100,105,116, 70,111,110,116, 0, 77,101,115,104, 0, 77,
- 70, 97, 99,101, 0, 77, 84, 70, 97, 99,101, 0, 84, 70, 97, 99,101, 0, 77, 86,101,114,116, 0, 77, 69,100,103,101, 0, 77, 68,
-101,102,111,114,109, 86,101,114,116, 0, 77, 67,111,108, 0, 77, 83,116,105, 99,107,121, 0, 77, 83,101,108,101, 99,116, 0, 69,
-100,105,116, 77,101,115,104, 0, 67,117,115,116,111,109, 68, 97,116, 97, 0, 77,117,108,116,105,114,101,115, 0, 80, 97,114,116,
-105, 97,108, 86,105,115,105, 98,105,108,105,116,121, 0, 77, 68,101,102,111,114,109, 87,101,105,103,104,116, 0, 77, 84,101,120,
- 80,111,108,121, 0, 77, 76,111,111,112, 85, 86, 0, 77, 76,111,111,112, 67,111,108, 0, 77, 70,108,111, 97,116, 80,114,111,112,
-101,114,116,121, 0, 77, 73,110,116, 80,114,111,112,101,114,116,121, 0, 77, 83,116,114,105,110,103, 80,114,111,112,101,114,116,
-121, 0, 79,114,105,103, 83,112, 97, 99,101, 70, 97, 99,101, 0, 77, 68,105,115,112,115, 0, 77,117,108,116,105,114,101,115, 67,
-111,108, 0, 77,117,108,116,105,114,101,115, 67,111,108, 70, 97, 99,101, 0, 77,117,108,116,105,114,101,115, 70, 97, 99,101, 0,
- 77,117,108,116,105,114,101,115, 69,100,103,101, 0, 77,117,108,116,105,114,101,115, 76,101,118,101,108, 0, 77,111,100,105,102,
-105,101,114, 68, 97,116, 97, 0, 83,117, 98,115,117,114,102, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 76, 97,116,116,
-105, 99,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67,117,114,118,101, 77,111,100,105,102,105,101,114, 68, 97,116,
- 97, 0, 66,117,105,108,100, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77, 97,115,107, 77,111,100,105,102,105,101,114,
- 68, 97,116, 97, 0, 65,114,114, 97,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77,105,114,114,111,114, 77,111,100,
-105,102,105,101,114, 68, 97,116, 97, 0, 69,100,103,101, 83,112,108,105,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0,
- 66,101,118,101,108, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 66, 77,101,115,104, 77,111,100,105,102,105,101,114, 68,
- 97,116, 97, 0, 83,109,111,107,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,109,111,107,101, 68,111,109, 97,105,
-110, 83,101,116,116,105,110,103,115, 0, 83,109,111,107,101, 70,108,111,119, 83,101,116,116,105,110,103,115, 0, 83,109,111,107,
-101, 67,111,108,108, 83,101,116,116,105,110,103,115, 0, 68,105,115,112,108, 97, 99,101, 77,111,100,105,102,105,101,114, 68, 97,
-116, 97, 0, 85, 86, 80,114,111,106,101, 99,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 68,101, 99,105,109, 97,116,
-101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,109,111,111,116,104, 77,111,100,105,102,105,101,114, 68, 97,116, 97,
- 0, 67, 97,115,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 87, 97,118,101, 77,111,100,105,102,105,101,114, 68, 97,
-116, 97, 0, 65,114,109, 97,116,117,114,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 72,111,111,107, 77,111,100,105,
-102,105,101,114, 68, 97,116, 97, 0, 83,111,102,116, 98,111,100,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67,108,
-111,116,104, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67,108,111,116,104, 0, 67,108,111,116,104, 83,105,109, 83,101,
-116,116,105,110,103,115, 0, 67,108,111,116,104, 67,111,108,108, 83,101,116,116,105,110,103,115, 0, 80,111,105,110,116, 67, 97,
- 99,104,101, 0, 67,111,108,108,105,115,105,111,110, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 66, 86, 72, 84,114,101,
-101, 0, 83,117,114,102, 97, 99,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 68,101,114,105,118,101,100, 77,101,115,
-104, 0, 66, 86, 72, 84,114,101,101, 70,114,111,109, 77,101,115,104, 0, 66,111,111,108,101, 97,110, 77,111,100,105,102,105,101,
-114, 68, 97,116, 97, 0, 77, 68,101,102, 73,110,102,108,117,101,110, 99,101, 0, 77, 68,101,102, 67,101,108,108, 0, 77,101,115,
-104, 68,101,102,111,114,109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,121,115,116,
-101,109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,121,115,116,101,109, 0, 80, 97,
-114,116,105, 99,108,101, 73,110,115,116, 97,110, 99,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 69,120,112,108,111,
-100,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77,117,108,116,105,114,101,115, 77,111,100,105,102,105,101,114, 68,
- 97,116, 97, 0, 70,108,117,105,100,115,105,109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 70,108,117,105,100,115,105,
-109, 83,101,116,116,105,110,103,115, 0, 83,104,114,105,110,107,119,114, 97,112, 77,111,100,105,102,105,101,114, 68, 97,116, 97,
- 0, 83,105,109,112,108,101, 68,101,102,111,114,109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,104, 97,112,101, 75,
-101,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,111,108,105,100,105,102,121, 77,111,100,105,102,105,101,114, 68,
- 97,116, 97, 0, 83, 99,114,101,119, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 76, 97,116,116,105, 99,101, 0, 98, 68,
-101,102,111,114,109, 71,114,111,117,112, 0, 83, 99,117,108,112,116, 83,101,115,115,105,111,110, 0, 98, 65, 99,116,105,111,110,
- 0, 98, 80,111,115,101, 0, 98, 71, 80,100, 97,116, 97, 0, 98, 65,110,105,109, 86,105,122, 83,101,116,116,105,110,103,115, 0,
- 98, 77,111,116,105,111,110, 80, 97,116,104, 0, 66,117,108,108,101,116, 83,111,102,116, 66,111,100,121, 0, 80, 97,114,116, 68,
-101,102,108,101, 99,116, 0, 83,111,102,116, 66,111,100,121, 0, 79, 98, 72,111,111,107, 0, 68,117,112,108,105, 79, 98,106,101,
- 99,116, 0, 82, 78, 71, 0, 69,102,102,101, 99,116,111,114, 87,101,105,103,104,116,115, 0, 80, 84, 67, 97, 99,104,101, 77,101,
-109, 0, 80, 84, 67, 97, 99,104,101, 69,100,105,116, 0, 83, 66, 86,101,114,116,101,120, 0, 66,111,100,121, 80,111,105,110,116,
- 0, 66,111,100,121, 83,112,114,105,110,103, 0, 83, 66, 83, 99,114, 97,116, 99,104, 0, 87,111,114,108,100, 0, 66, 97,115,101,
- 0, 65,118,105, 67,111,100,101, 99, 68, 97,116, 97, 0, 81,117,105, 99,107,116,105,109,101, 67,111,100,101, 99, 68, 97,116, 97,
- 0, 81,117,105, 99,107,116,105,109,101, 67,111,100,101, 99, 83,101,116,116,105,110,103,115, 0, 70, 70, 77,112,101,103, 67,111,
-100,101, 99, 68, 97,116, 97, 0, 65,117,100,105,111, 68, 97,116, 97, 0, 83, 99,101,110,101, 82,101,110,100,101,114, 76, 97,121,
-101,114, 0, 82,101,110,100,101,114, 68, 97,116, 97, 0, 82,101,110,100,101,114, 80,114,111,102,105,108,101, 0, 71, 97,109,101,
- 68,111,109,101, 0, 71, 97,109,101, 70,114, 97,109,105,110,103, 0, 71, 97,109,101, 68, 97,116, 97, 0, 84,105,109,101, 77, 97,
-114,107,101,114, 0, 80, 97,105,110,116, 0, 66,114,117,115,104, 0, 73,109, 97,103,101, 80, 97,105,110,116, 83,101,116,116,105,
-110,103,115, 0, 80, 97,114,116,105, 99,108,101, 66,114,117,115,104, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 69,100,
-105,116, 83,101,116,116,105,110,103,115, 0, 84,114, 97,110,115,102,111,114,109, 79,114,105,101,110,116, 97,116,105,111,110, 0,
- 83, 99,117,108,112,116, 0, 86, 80, 97,105,110,116, 0, 84,111,111,108, 83,101,116,116,105,110,103,115, 0, 98, 83,116, 97,116,
-115, 0, 85,110,105,116, 83,101,116,116,105,110,103,115, 0, 80,104,121,115,105, 99,115, 83,101,116,116,105,110,103,115, 0, 69,
-100,105,116,105,110,103, 0, 83, 99,101,110,101, 83,116, 97,116,115, 0, 68, 97,103, 70,111,114,101,115,116, 0, 66, 71,112,105,
- 99, 0, 82,101,103,105,111,110, 86,105,101,119, 51, 68, 0, 82,101,110,100,101,114, 73,110,102,111, 0, 82,101,116,111,112,111,
- 86,105,101,119, 68, 97,116, 97, 0, 86,105,101,119, 68,101,112,116,104,115, 0, 83,109,111,111,116,104, 86,105,101,119, 83,116,
-111,114,101, 0,119,109, 84,105,109,101,114, 0, 86,105,101,119, 51, 68, 0, 83,112, 97, 99,101, 76,105,110,107, 0, 86,105,101,
-119, 50, 68, 0, 83,112, 97, 99,101, 73,110,102,111, 0, 98, 83, 99,114,101,101,110, 0, 83,112, 97, 99,101, 73,112,111, 0, 98,
- 68,111,112,101, 83,104,101,101,116, 0, 83,112, 97, 99,101, 66,117,116,115, 0, 83,112, 97, 99,101, 83,101,113, 0, 70,105,108,
-101, 83,101,108,101, 99,116, 80, 97,114, 97,109,115, 0, 83,112, 97, 99,101, 70,105,108,101, 0, 70,105,108,101, 76,105,115,116,
- 0,119,109, 79,112,101,114, 97,116,111,114, 0, 70,105,108,101, 76, 97,121,111,117,116, 0, 83,112, 97, 99,101, 79,111,112,115,
- 0, 84,114,101,101, 83,116,111,114,101, 0, 84,114,101,101, 83,116,111,114,101, 69,108,101,109, 0, 83,112, 97, 99,101, 73,109,
- 97,103,101, 0, 83, 99,111,112,101,115, 0, 72,105,115,116,111,103,114, 97,109, 0, 83,112, 97, 99,101, 78,108, 97, 0, 83,112,
- 97, 99,101, 84,101,120,116, 0, 83, 99,114,105,112,116, 0, 83,112, 97, 99,101, 83, 99,114,105,112,116, 0, 83,112, 97, 99,101,
- 84,105,109,101, 67, 97, 99,104,101, 0, 83,112, 97, 99,101, 84,105,109,101, 0, 83,112, 97, 99,101, 78,111,100,101, 0, 83,112,
- 97, 99,101, 76,111,103,105, 99, 0, 83,112, 97, 99,101, 73,109, 97, 83,101,108, 0, 67,111,110,115,111,108,101, 76,105,110,101,
- 0, 83,112, 97, 99,101, 67,111,110,115,111,108,101, 0, 83,112, 97, 99,101, 85,115,101,114, 80,114,101,102, 0,117,105, 70,111,
-110,116, 0,117,105, 70,111,110,116, 83,116,121,108,101, 0,117,105, 83,116,121,108,101, 0,117,105, 87,105,100,103,101,116, 67,
-111,108,111,114,115, 0,117,105, 87,105,100,103,101,116, 83,116, 97,116,101, 67,111,108,111,114,115, 0, 84,104,101,109,101, 85,
- 73, 0, 84,104,101,109,101, 83,112, 97, 99,101, 0, 84,104,101,109,101, 87,105,114,101, 67,111,108,111,114, 0, 98, 84,104,101,
-109,101, 0, 98, 65,100,100,111,110, 0, 83,111,108,105,100, 76,105,103,104,116, 0, 85,115,101,114, 68,101,102, 0, 83, 99,114,
- 86,101,114,116, 0, 83, 99,114, 69,100,103,101, 0, 80, 97,110,101,108, 0, 80, 97,110,101,108, 84,121,112,101, 0,117,105, 76,
- 97,121,111,117,116, 0, 83, 99,114, 65,114,101, 97, 0, 83,112, 97, 99,101, 84,121,112,101, 0, 65, 82,101,103,105,111,110, 0,
- 65, 82,101,103,105,111,110, 84,121,112,101, 0, 70,105,108,101, 71,108,111, 98, 97,108, 0, 83,116,114,105,112, 69,108,101,109,
- 0, 84, 83,116,114,105,112, 69,108,101,109, 0, 83,116,114,105,112, 67,114,111,112, 0, 83,116,114,105,112, 84,114, 97,110,115,
-102,111,114,109, 0, 83,116,114,105,112, 67,111,108,111,114, 66, 97,108, 97,110, 99,101, 0, 83,116,114,105,112, 80,114,111,120,
-121, 0, 83,116,114,105,112, 0, 80,108,117,103,105,110, 83,101,113, 0, 83,101,113,117,101,110, 99,101, 0, 98, 83,111,117,110,
-100, 0, 77,101,116, 97, 83,116, 97, 99,107, 0, 87,105,112,101, 86, 97,114,115, 0, 71,108,111,119, 86, 97,114,115, 0, 84,114,
- 97,110,115,102,111,114,109, 86, 97,114,115, 0, 83,111,108,105,100, 67,111,108,111,114, 86, 97,114,115, 0, 83,112,101,101,100,
- 67,111,110,116,114,111,108, 86, 97,114,115, 0, 69,102,102,101, 99,116, 0, 66,117,105,108,100, 69,102,102, 0, 80, 97,114,116,
- 69,102,102, 0, 80, 97,114,116,105, 99,108,101, 0, 87, 97,118,101, 69,102,102, 0, 98, 80,114,111,112,101,114,116,121, 0, 98,
- 78,101, 97,114, 83,101,110,115,111,114, 0, 98, 77,111,117,115,101, 83,101,110,115,111,114, 0, 98, 84,111,117, 99,104, 83,101,
-110,115,111,114, 0, 98, 75,101,121, 98,111, 97,114,100, 83,101,110,115,111,114, 0, 98, 80,114,111,112,101,114,116,121, 83,101,
-110,115,111,114, 0, 98, 65, 99,116,117, 97,116,111,114, 83,101,110,115,111,114, 0, 98, 68,101,108, 97,121, 83,101,110,115,111,
-114, 0, 98, 67,111,108,108,105,115,105,111,110, 83,101,110,115,111,114, 0, 98, 82, 97,100, 97,114, 83,101,110,115,111,114, 0,
- 98, 82, 97,110,100,111,109, 83,101,110,115,111,114, 0, 98, 82, 97,121, 83,101,110,115,111,114, 0, 98, 65,114,109, 97,116,117,
-114,101, 83,101,110,115,111,114, 0, 98, 77,101,115,115, 97,103,101, 83,101,110,115,111,114, 0, 98, 83,101,110,115,111,114, 0,
- 98, 67,111,110,116,114,111,108,108,101,114, 0, 98, 74,111,121,115,116,105, 99,107, 83,101,110,115,111,114, 0, 98, 69,120,112,
-114,101,115,115,105,111,110, 67,111,110,116, 0, 98, 80,121,116,104,111,110, 67,111,110,116, 0, 98, 65, 99,116,117, 97,116,111,
-114, 0, 98, 65,100,100, 79, 98,106,101, 99,116, 65, 99,116,117, 97,116,111,114, 0, 98, 65, 99,116,105,111,110, 65, 99,116,117,
- 97,116,111,114, 0, 98, 83,111,117,110,100, 65, 99,116,117, 97,116,111,114, 0, 83,111,117,110,100, 51, 68, 0, 98, 69,100,105,
-116, 79, 98,106,101, 99,116, 65, 99,116,117, 97,116,111,114, 0, 98, 83, 99,101,110,101, 65, 99,116,117, 97,116,111,114, 0, 98,
- 80,114,111,112,101,114,116,121, 65, 99,116,117, 97,116,111,114, 0, 98, 79, 98,106,101, 99,116, 65, 99,116,117, 97,116,111,114,
- 0, 98, 73,112,111, 65, 99,116,117, 97,116,111,114, 0, 98, 67, 97,109,101,114, 97, 65, 99,116,117, 97,116,111,114, 0, 98, 67,
-111,110,115,116,114, 97,105,110,116, 65, 99,116,117, 97,116,111,114, 0, 98, 71,114,111,117,112, 65, 99,116,117, 97,116,111,114,
- 0, 98, 82, 97,110,100,111,109, 65, 99,116,117, 97,116,111,114, 0, 98, 77,101,115,115, 97,103,101, 65, 99,116,117, 97,116,111,
-114, 0, 98, 71, 97,109,101, 65, 99,116,117, 97,116,111,114, 0, 98, 86,105,115,105, 98,105,108,105,116,121, 65, 99,116,117, 97,
-116,111,114, 0, 98, 84,119,111, 68, 70,105,108,116,101,114, 65, 99,116,117, 97,116,111,114, 0, 98, 80, 97,114,101,110,116, 65,
- 99,116,117, 97,116,111,114, 0, 98, 83,116, 97,116,101, 65, 99,116,117, 97,116,111,114, 0, 98, 65,114,109, 97,116,117,114,101,
- 65, 99,116,117, 97,116,111,114, 0, 70,114,101,101, 67, 97,109,101,114, 97, 0, 83,112, 97, 99,101, 83,111,117,110,100, 0, 71,
-114,111,117,112, 79, 98,106,101, 99,116, 0, 66,111,110,101, 0, 98, 65,114,109, 97,116,117,114,101, 0, 98, 77,111,116,105,111,
-110, 80, 97,116,104, 86,101,114,116, 0, 98, 80,111,115,101, 67,104, 97,110,110,101,108, 0, 71, 72, 97,115,104, 0, 98, 73, 75,
- 80, 97,114, 97,109, 0, 98, 73,116, 97,115, 99, 0, 98, 65, 99,116,105,111,110, 71,114,111,117,112, 0, 83,112, 97, 99,101, 65,
- 99,116,105,111,110, 0, 98, 65, 99,116,105,111,110, 67,104, 97,110,110,101,108, 0, 98, 67,111,110,115,116,114, 97,105,110,116,
- 67,104, 97,110,110,101,108, 0, 98, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 67,111,110,115,116,114, 97,105,110,116, 84,
- 97,114,103,101,116, 0, 98, 80,121,116,104,111,110, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 75,105,110,101,109, 97,116,
-105, 99, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,112,108,105,110,101, 73, 75, 67,111,110,115,116,114, 97,105,110,116,
- 0, 98, 84,114, 97, 99,107, 84,111, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 82,111,116, 97,116,101, 76,105,107,101, 67,
-111,110,115,116,114, 97,105,110,116, 0, 98, 76,111, 99, 97,116,101, 76,105,107,101, 67,111,110,115,116,114, 97,105,110,116, 0,
- 98, 83,105,122,101, 76,105,107,101, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83, 97,109,101, 86,111,108,117,109,101, 67,
-111,110,115,116,114, 97,105,110,116, 0, 98, 84,114, 97,110,115, 76,105,107,101, 67,111,110,115,116,114, 97,105,110,116, 0, 98,
- 77,105,110, 77, 97,120, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 65, 99,116,105,111,110, 67,111,110,115,116,114, 97,105,
-110,116, 0, 98, 76,111, 99,107, 84,114, 97, 99,107, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 68, 97,109,112, 84,114, 97,
- 99,107, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 70,111,108,108,111,119, 80, 97,116,104, 67,111,110,115,116,114, 97,105,
-110,116, 0, 98, 83,116,114,101,116, 99,104, 84,111, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 82,105,103,105,100, 66,111,
-100,121, 74,111,105,110,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 67,108, 97,109,112, 84,111, 67,111,110,115,116,114,
- 97,105,110,116, 0, 98, 67,104,105,108,100, 79,102, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 84,114, 97,110,115,102,111,
-114,109, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 80,105,118,111,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 76,
-111, 99, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 82,111,116, 76,105,109,105,116, 67,111,110,115,116,
-114, 97,105,110,116, 0, 98, 83,105,122,101, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 68,105,115,116,
- 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,104,114,105,110,107,119,114, 97,112, 67,111,110,115,116,
-114, 97,105,110,116, 0, 98, 65, 99,116,105,111,110, 77,111,100,105,102,105,101,114, 0, 98, 65, 99,116,105,111,110, 83,116,114,
-105,112, 0, 98, 78,111,100,101, 83,116, 97, 99,107, 0, 98, 78,111,100,101, 83,111, 99,107,101,116, 0, 98, 78,111,100,101, 76,
-105,110,107, 0, 98, 78,111,100,101, 0, 98, 78,111,100,101, 80,114,101,118,105,101,119, 0,117,105, 66,108,111, 99,107, 0, 98,
- 78,111,100,101, 84,121,112,101, 0, 78,111,100,101, 73,109, 97,103,101, 65,110,105,109, 0, 78,111,100,101, 66,108,117,114, 68,
- 97,116, 97, 0, 78,111,100,101, 68, 66,108,117,114, 68, 97,116, 97, 0, 78,111,100,101, 66,105,108, 97,116,101,114, 97,108, 66,
-108,117,114, 68, 97,116, 97, 0, 78,111,100,101, 72,117,101, 83, 97,116, 0, 78,111,100,101, 73,109, 97,103,101, 70,105,108,101,
- 0, 78,111,100,101, 67,104,114,111,109, 97, 0, 78,111,100,101, 84,119,111, 88, 89,115, 0, 78,111,100,101, 84,119,111, 70,108,
-111, 97,116,115, 0, 78,111,100,101, 71,101,111,109,101,116,114,121, 0, 78,111,100,101, 86,101,114,116,101,120, 67,111,108, 0,
- 78,111,100,101, 68,101,102,111, 99,117,115, 0, 78,111,100,101, 83, 99,114,105,112,116, 68,105, 99,116, 0, 78,111,100,101, 71,
-108, 97,114,101, 0, 78,111,100,101, 84,111,110,101,109, 97,112, 0, 78,111,100,101, 76,101,110,115, 68,105,115,116, 0, 78,111,
-100,101, 67,111,108,111,114, 66, 97,108, 97,110, 99,101, 0, 78,111,100,101, 67,111,108,111,114,115,112,105,108,108, 0, 84,101,
-120, 78,111,100,101, 79,117,116,112,117,116, 0, 67,117,114,118,101, 77, 97,112, 80,111,105,110,116, 0, 67,117,114,118,101, 77,
- 97,112, 0, 66,114,117,115,104, 67,108,111,110,101, 0, 67,117,115,116,111,109, 68, 97,116, 97, 76, 97,121,101,114, 0, 67,117,
-115,116,111,109, 68, 97,116, 97, 69,120,116,101,114,110, 97,108, 0, 72, 97,105,114, 75,101,121, 0, 80, 97,114,116,105, 99,108,
-101, 75,101,121, 0, 66,111,105,100, 80, 97,114,116,105, 99,108,101, 0, 66,111,105,100, 68, 97,116, 97, 0, 67,104,105,108,100,
- 80, 97,114,116,105, 99,108,101, 0, 80, 97,114,116,105, 99,108,101, 84, 97,114,103,101,116, 0, 80, 97,114,116,105, 99,108,101,
- 68,117,112,108,105, 87,101,105,103,104,116, 0, 80, 97,114,116,105, 99,108,101, 68, 97,116, 97, 0, 83, 80, 72, 70,108,117,105,
-100, 83,101,116,116,105,110,103,115, 0, 80, 97,114,116,105, 99,108,101, 83,101,116,116,105,110,103,115, 0, 66,111,105,100, 83,
-101,116,116,105,110,103,115, 0, 80, 97,114,116,105, 99,108,101, 67, 97, 99,104,101, 75,101,121, 0, 75, 68, 84,114,101,101, 0,
- 80, 97,114,116,105, 99,108,101, 68,114, 97,119, 68, 97,116, 97, 0, 76,105,110,107, 78,111,100,101, 0, 98, 71, 80, 68,115,112,
-111,105,110,116, 0, 98, 71, 80, 68,115,116,114,111,107,101, 0, 98, 71, 80, 68,102,114, 97,109,101, 0, 98, 71, 80, 68,108, 97,
-121,101,114, 0, 82,101,112,111,114,116, 0, 82,101,112,111,114,116, 76,105,115,116, 0, 82,101,112,111,114,116, 84,105,109,101,
-114, 73,110,102,111, 0,119,109, 87,105,110,100,111,119, 77, 97,110, 97,103,101,114, 0,119,109, 87,105,110,100,111,119, 0,119,
-109, 75,101,121, 67,111,110,102,105,103, 0,119,109, 69,118,101,110,116, 0,119,109, 83,117, 98, 87,105,110,100,111,119, 0,119,
-109, 71,101,115,116,117,114,101, 0,119,109, 75,101,121, 77, 97,112, 73,116,101,109, 0, 80,111,105,110,116,101,114, 82, 78, 65,
- 0,119,109, 75,101,121, 77, 97,112, 0,119,109, 79,112,101,114, 97,116,111,114, 84,121,112,101, 0, 70, 77,111,100,105,102,105,
-101,114, 0, 70, 77,111,100, 95, 71,101,110,101,114, 97,116,111,114, 0, 70, 77,111,100, 95, 70,117,110, 99,116,105,111,110, 71,
-101,110,101,114, 97,116,111,114, 0, 70, 67, 77, 95, 69,110,118,101,108,111,112,101, 68, 97,116, 97, 0, 70, 77,111,100, 95, 69,
-110,118,101,108,111,112,101, 0, 70, 77,111,100, 95, 67,121, 99,108,101,115, 0, 70, 77,111,100, 95, 80,121,116,104,111,110, 0,
- 70, 77,111,100, 95, 76,105,109,105,116,115, 0, 70, 77,111,100, 95, 78,111,105,115,101, 0, 70, 77,111,100, 95, 83,116,101,112,
-112,101,100, 0, 68,114,105,118,101,114, 84, 97,114,103,101,116, 0, 68,114,105,118,101,114, 86, 97,114, 0, 67,104, 97,110,110,
-101,108, 68,114,105,118,101,114, 0, 70, 80,111,105,110,116, 0, 70, 67,117,114,118,101, 0, 65,110,105,109, 77, 97,112, 80, 97,
-105,114, 0, 65,110,105,109, 77, 97,112,112,101,114, 0, 78,108, 97, 83,116,114,105,112, 0, 78,108, 97, 84,114, 97, 99,107, 0,
- 75, 83, 95, 80, 97,116,104, 0, 75,101,121,105,110,103, 83,101,116, 0, 65,110,105,109, 79,118,101,114,114,105,100,101, 0, 73,
-100, 65,100,116, 84,101,109,112,108, 97,116,101, 0, 66,111,105,100, 82,117,108,101, 0, 66,111,105,100, 82,117,108,101, 71,111,
- 97,108, 65,118,111,105,100, 0, 66,111,105,100, 82,117,108,101, 65,118,111,105,100, 67,111,108,108,105,115,105,111,110, 0, 66,
-111,105,100, 82,117,108,101, 70,111,108,108,111,119, 76,101, 97,100,101,114, 0, 66,111,105,100, 82,117,108,101, 65,118,101,114,
- 97,103,101, 83,112,101,101,100, 0, 66,111,105,100, 82,117,108,101, 70,105,103,104,116, 0, 66,111,105,100, 83,116, 97,116,101,
- 0, 70, 76, 85, 73, 68, 95, 51, 68, 0, 87, 84, 85, 82, 66, 85, 76, 69, 78, 67, 69, 0, 0, 0, 84, 76, 69, 78, 1, 0, 1, 0,
- 2, 0, 2, 0, 4, 0, 4, 0, 4, 0, 4, 0, 8, 0, 0, 0, 16, 0, 24, 0, 16, 0, 4, 0, 8, 0, 8, 0, 16, 0, 12, 0,
- 12, 0, 24, 0, 16, 0, 16, 0, 32, 0, 16, 0, 16, 0, 32, 0, 96, 0, 72, 0, 72, 2, 0, 0, 40, 0,144, 0,208, 4,112, 0,
- 36, 0, 56, 0,112, 0,128, 0,168, 0, 96, 0, 40, 0, 48, 0,176, 0, 16, 0,136, 0, 40, 0, 8, 6,240, 1, 0, 0, 0, 0,
- 0, 0, 16, 1,112, 1,120, 1, 24, 0, 8, 3,200, 0, 0, 0, 88, 0, 40, 1,240, 0,136, 0,216, 1, 64, 1, 80, 0, 88, 0,
- 32, 3,104, 0, 88, 1, 0, 0,128, 0,104, 0,208, 0, 80, 0, 8, 0, 16, 0,216, 1, 0, 0, 0, 0, 0, 0,176, 1, 20, 0,
- 48, 0, 64, 0, 24, 0, 12, 0, 16, 0, 4, 0, 8, 0, 8, 0, 0, 0, 40, 0,128, 0, 48, 0, 8, 0, 16, 0, 8, 0, 8, 0,
- 4, 0, 4, 0, 0, 1, 32, 0, 16, 0, 16, 0, 64, 0, 24, 0, 12, 0, 64, 0, 80, 0,104, 0,120, 0,128, 0, 96, 0,128, 0,
-160, 0, 96, 0, 88, 0,136, 0, 88, 0,112, 0, 0, 1, 56, 0,192, 0,184, 0,232, 0, 88, 0,120, 0,136, 0,224, 0,136, 0,
-248, 0, 80, 0,136, 0, 0, 0,152, 0, 40, 0, 8, 2,160, 0, 0, 0,120, 0, 0, 0, 0, 0, 96, 0, 8, 0, 8, 0, 48, 1,
-112, 0,240, 1,104, 0, 96, 0, 88, 0, 96, 0,200, 1,144, 0,136, 0, 80, 0,136, 0,112, 0, 8, 1, 48, 0, 0, 0,144, 0,
-176, 0,104, 0, 48, 0, 24, 0,120, 0,152, 0,120, 1,224, 0,192, 0, 0, 0, 72, 0,168, 0, 0, 0, 16, 0, 0, 0, 0, 0,
- 0, 0,232, 1, 40, 0,184, 0,152, 0, 64, 0, 64, 0, 24, 0, 88, 0, 0, 4, 64, 0, 24, 0, 16, 0,104, 0, 96, 0, 32, 0,
-168, 1, 56, 0, 16, 0,168, 0, 88, 0, 56, 0, 64, 0,184, 1, 32, 0, 8, 0, 24, 0, 80, 2, 0, 0, 0, 0, 88, 0,104, 3,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 1, 56, 0,144, 0, 72, 0,208, 0,240, 0, 40, 0,248, 0,240, 0,200, 1,104, 0,
- 0, 0,168, 0, 0, 0, 32, 1, 16, 0, 16, 0, 72, 33,128, 16, 24, 16,216, 0,144, 2,120, 2, 64, 0, 48, 0,216, 0, 32, 1,
- 72, 0,200, 2, 40, 0,144, 1,104, 0, 24, 1, 32, 0,232, 0, 32, 0, 32, 0,112, 2,104, 1, 16, 0, 56, 29, 80, 0, 56, 0,
- 8, 13, 32, 0, 40, 0, 88, 1, 0, 0, 0, 0,160, 0, 0, 0, 40, 1, 0, 0, 24, 1, 80, 0, 48, 0, 16, 0, 8, 0, 44, 0,
- 0, 1, 32, 1,200, 1, 24, 1,136, 1, 32, 0, 12, 0, 24, 0, 52, 0, 16, 0, 24, 0, 24, 0, 32, 0, 72, 1, 0, 0, 64, 0,
- 64, 0, 48, 0, 8, 0, 48, 0, 72, 0,104, 0, 40, 0, 8, 0, 72, 0, 44, 0, 40, 0,108, 0, 72, 0, 72, 0, 96, 0,104, 0,
- 60, 0,128, 0, 80, 0, 80, 0, 16, 0, 96, 0, 72, 0, 32, 0, 88, 0, 24, 0, 80, 0,112, 0, 84, 0, 32, 0, 96, 0, 56, 0,
- 56, 0,112, 0,140, 0, 4, 0, 24, 0, 16, 0, 8, 0, 88, 0, 40, 0,216, 0, 40, 0, 40, 1,200, 0, 16, 0, 16, 2, 0, 0,
- 4, 0, 40, 0,120, 0, 0, 1, 88, 0, 56, 0, 88, 0,128, 0, 80, 0,120, 0, 24, 0, 56, 0, 48, 0, 48, 0, 48, 0, 8, 0,
- 40, 0, 72, 0, 72, 0, 48, 0, 48, 0, 24, 0, 56, 0,104, 0, 16, 0,112, 0, 96, 0, 56, 0, 28, 0, 28, 0, 28, 0, 56, 0,
- 24, 0, 72, 0,168, 0, 40, 0,144, 0, 56, 0,232, 0, 0, 0, 0, 0, 0, 0, 16, 0, 40, 0, 28, 0, 12, 0, 12, 0, 16, 1,
- 44, 0, 8, 0, 8, 0, 64, 0, 32, 0, 24, 0, 16, 0, 24, 0, 32, 0, 8, 0, 84, 0, 20, 0, 32, 0, 12, 0, 56, 0, 24, 0,
- 72, 0,240, 0, 24, 0, 56, 0, 56, 0, 20, 0, 64, 0, 40, 0, 32, 0,192, 0, 36, 0, 16, 2,104, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 16, 0, 32, 0, 40, 0,192, 0, 40, 0, 40, 0, 20, 0, 24, 1,224, 0,168, 0, 0, 0, 0, 0, 0, 0,120, 0, 0, 0,
-120, 0, 0, 0,104, 0, 24, 0, 24, 0, 16, 0, 24, 0, 8, 0, 16, 0, 24, 0, 20, 0, 20, 0, 56, 0, 24, 2, 40, 1, 16, 0,
-104, 0, 0, 1, 40, 0,200, 0,104, 0,112, 0,168, 0, 32, 0, 80, 0, 56, 0, 80, 0, 64, 0,104, 0, 72, 0, 64, 0,128, 0,
- 0, 0, 0, 0, 83, 84, 82, 67,153, 1, 0, 0, 10, 0, 2, 0, 10, 0, 0, 0, 10, 0, 1, 0, 11, 0, 3, 0, 11, 0, 0, 0,
- 11, 0, 1, 0, 9, 0, 2, 0, 12, 0, 2, 0, 9, 0, 3, 0, 9, 0, 4, 0, 13, 0, 2, 0, 2, 0, 5, 0, 2, 0, 6, 0,
- 14, 0, 2, 0, 7, 0, 5, 0, 7, 0, 6, 0, 15, 0, 2, 0, 4, 0, 5, 0, 4, 0, 6, 0, 16, 0, 2, 0, 8, 0, 5, 0,
- 8, 0, 6, 0, 17, 0, 3, 0, 4, 0, 5, 0, 4, 0, 6, 0, 4, 0, 7, 0, 18, 0, 3, 0, 7, 0, 5, 0, 7, 0, 6, 0,
- 7, 0, 7, 0, 19, 0, 3, 0, 8, 0, 5, 0, 8, 0, 6, 0, 8, 0, 7, 0, 20, 0, 4, 0, 4, 0, 5, 0, 4, 0, 6, 0,
- 4, 0, 7, 0, 4, 0, 8, 0, 21, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 0, 8, 0, 22, 0, 4, 0,
- 8, 0, 5, 0, 8, 0, 6, 0, 8, 0, 7, 0, 8, 0, 8, 0, 23, 0, 4, 0, 4, 0, 9, 0, 4, 0, 10, 0, 4, 0, 11, 0,
- 4, 0, 12, 0, 24, 0, 4, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 25, 0, 4, 0, 9, 0, 13, 0,
- 12, 0, 14, 0, 4, 0, 15, 0, 4, 0, 16, 0, 26, 0, 10, 0, 26, 0, 0, 0, 26, 0, 1, 0, 0, 0, 17, 0, 0, 0, 18, 0,
- 2, 0, 19, 0, 0, 0, 20, 0, 4, 0, 21, 0, 25, 0, 22, 0, 4, 0, 23, 0, 4, 0, 24, 0, 27, 0, 9, 0, 9, 0, 0, 0,
- 9, 0, 1, 0, 27, 0, 25, 0, 28, 0, 26, 0, 0, 0, 27, 0, 2, 0, 28, 0, 2, 0, 19, 0, 4, 0, 29, 0, 26, 0, 30, 0,
- 28, 0, 8, 0, 27, 0, 31, 0, 27, 0, 32, 0, 29, 0, 33, 0, 0, 0, 34, 0, 0, 0, 35, 0, 4, 0, 36, 0, 4, 0, 37, 0,
- 28, 0, 38, 0, 30, 0, 6, 0, 4, 0, 39, 0, 4, 0, 40, 0, 2, 0, 41, 0, 2, 0, 42, 0, 2, 0, 43, 0, 4, 0, 44, 0,
- 31, 0, 6, 0, 32, 0, 45, 0, 2, 0, 46, 0, 2, 0, 47, 0, 2, 0, 17, 0, 2, 0, 19, 0, 0, 0, 48, 0, 33, 0, 21, 0,
- 33, 0, 0, 0, 33, 0, 1, 0, 34, 0, 49, 0, 35, 0, 50, 0, 24, 0, 51, 0, 24, 0, 52, 0, 2, 0, 46, 0, 2, 0, 47, 0,
- 2, 0, 53, 0, 2, 0, 54, 0, 2, 0, 55, 0, 2, 0, 56, 0, 2, 0, 19, 0, 2, 0, 57, 0, 7, 0, 11, 0, 7, 0, 12, 0,
- 4, 0, 58, 0, 7, 0, 59, 0, 7, 0, 60, 0, 7, 0, 61, 0, 31, 0, 62, 0, 36, 0, 7, 0, 27, 0, 31, 0, 12, 0, 63, 0,
- 24, 0, 64, 0, 2, 0, 46, 0, 2, 0, 65, 0, 2, 0, 66, 0, 2, 0, 37, 0, 37, 0, 16, 0, 37, 0, 0, 0, 37, 0, 1, 0,
- 7, 0, 67, 0, 7, 0, 61, 0, 2, 0, 17, 0, 2, 0, 47, 0, 2, 0, 68, 0, 2, 0, 19, 0, 4, 0, 69, 0, 4, 0, 70, 0,
- 9, 0, 2, 0, 7, 0, 71, 0, 0, 0, 20, 0, 0, 0, 72, 0, 7, 0, 73, 0, 7, 0, 74, 0, 38, 0, 13, 0, 27, 0, 31, 0,
- 39, 0, 75, 0, 37, 0, 76, 0, 0, 0, 77, 0, 4, 0, 78, 0, 7, 0, 61, 0, 12, 0, 79, 0, 36, 0, 80, 0, 27, 0, 81, 0,
- 2, 0, 17, 0, 2, 0, 82, 0, 2, 0, 83, 0, 2, 0, 19, 0, 40, 0, 6, 0, 40, 0, 0, 0, 40, 0, 1, 0, 0, 0, 84, 0,
- 0, 0, 85, 0, 4, 0, 23, 0, 4, 0, 86, 0, 41, 0, 10, 0, 41, 0, 0, 0, 41, 0, 1, 0, 4, 0, 87, 0, 4, 0, 88, 0,
- 4, 0, 89, 0, 4, 0, 43, 0, 4, 0, 14, 0, 4, 0, 90, 0, 0, 0, 91, 0, 0, 0, 92, 0, 42, 0, 15, 0, 27, 0, 31, 0,
- 0, 0, 93, 0, 4, 0, 90, 0, 4, 0, 94, 0, 12, 0, 95, 0, 40, 0, 96, 0, 40, 0, 97, 0, 4, 0, 98, 0, 4, 0, 99, 0,
- 12, 0,100, 0, 0, 0,101, 0, 4, 0,102, 0, 4, 0,103, 0, 9, 0,104, 0, 8, 0,105, 0, 43, 0, 3, 0, 4, 0,106, 0,
- 4, 0,107, 0, 9, 0, 2, 0, 44, 0, 15, 0, 27, 0, 31, 0, 39, 0, 75, 0, 2, 0, 17, 0, 2, 0, 19, 0, 7, 0,108, 0,
- 7, 0,109, 0, 7, 0,110, 0, 7, 0,111, 0, 7, 0,112, 0, 7, 0,113, 0, 7, 0,114, 0, 7, 0,115, 0, 7, 0,116, 0,
- 36, 0, 80, 0, 32, 0,117, 0, 45, 0, 13, 0, 4, 0,118, 0, 4, 0,119, 0, 4, 0,120, 0, 4, 0,121, 0, 2, 0,122, 0,
- 2, 0,123, 0, 2, 0, 19, 0, 2, 0,124, 0, 2, 0,125, 0, 2, 0,126, 0, 2, 0,127, 0, 2, 0,128, 0, 46, 0,129, 0,
- 47, 0, 32, 0, 27, 0, 31, 0, 0, 0, 34, 0, 12, 0,130, 0, 48, 0,131, 0, 49, 0,132, 0, 50, 0,133, 0, 50, 0,134, 0,
- 2, 0,135, 0, 2, 0,136, 0, 2, 0,124, 0, 2, 0, 19, 0, 2, 0,137, 0, 2, 0, 17, 0, 4, 0,138, 0, 2, 0,139, 0,
- 2, 0,140, 0, 2, 0,141, 0, 2, 0,142, 0, 2, 0,143, 0, 2, 0,144, 0, 4, 0,145, 0, 4, 0,146, 0, 43, 0,147, 0,
- 30, 0,148, 0, 7, 0,149, 0, 4, 0,150, 0, 2, 0,151, 0, 2, 0,152, 0, 2, 0,153, 0, 2, 0,154, 0, 7, 0,155, 0,
- 7, 0,156, 0, 51, 0, 63, 0, 2, 0,157, 0, 2, 0,158, 0, 2, 0,159, 0, 2, 0,160, 0, 32, 0,161, 0, 52, 0,162, 0,
- 0, 0,163, 0, 0, 0,164, 0, 0, 0,165, 0, 0, 0,166, 0, 0, 0,167, 0, 7, 0,168, 0, 7, 0,169, 0, 7, 0,170, 0,
- 2, 0,171, 0, 2, 0,172, 0, 2, 0,173, 0, 2, 0,174, 0, 2, 0,175, 0, 2, 0,176, 0, 0, 0,177, 0, 0, 0,178, 0,
- 7, 0,179, 0, 7, 0,180, 0, 7, 0,181, 0, 7, 0,182, 0, 7, 0,183, 0, 7, 0, 57, 0, 7, 0,184, 0, 7, 0,185, 0,
- 7, 0,186, 0, 7, 0,187, 0, 7, 0,188, 0, 7, 0,189, 0, 7, 0,190, 0, 7, 0,191, 0, 7, 0,192, 0, 7, 0,193, 0,
- 7, 0,194, 0, 7, 0,195, 0, 7, 0,196, 0, 7, 0,197, 0, 7, 0,198, 0, 7, 0,199, 0, 7, 0,200, 0, 7, 0,201, 0,
- 7, 0,202, 0, 7, 0,203, 0, 7, 0,204, 0, 7, 0,205, 0, 7, 0,206, 0, 7, 0,207, 0, 7, 0,208, 0, 7, 0,209, 0,
- 7, 0,210, 0, 7, 0,211, 0, 7, 0,212, 0, 7, 0,213, 0, 7, 0,214, 0, 7, 0,215, 0, 7, 0,216, 0, 7, 0,217, 0,
- 7, 0,218, 0, 53, 0, 15, 0, 0, 0,219, 0, 9, 0,220, 0, 0, 0,221, 0, 0, 0,222, 0, 4, 0,223, 0, 4, 0,224, 0,
- 9, 0,225, 0, 7, 0,226, 0, 7, 0,227, 0, 7, 0,228, 0, 4, 0,229, 0, 9, 0,230, 0, 9, 0,231, 0, 4, 0,232, 0,
- 4, 0, 37, 0, 54, 0, 6, 0, 7, 0,179, 0, 7, 0,180, 0, 7, 0,181, 0, 7, 0,233, 0, 7, 0, 67, 0, 4, 0, 64, 0,
- 55, 0, 5, 0, 2, 0, 19, 0, 2, 0, 36, 0, 2, 0, 64, 0, 2, 0,234, 0, 54, 0,228, 0, 56, 0, 17, 0, 32, 0,161, 0,
- 47, 0,235, 0, 57, 0,236, 0, 7, 0,237, 0, 7, 0,238, 0, 2, 0, 17, 0, 2, 0,239, 0, 7, 0,109, 0, 7, 0,110, 0,
- 7, 0,240, 0, 4, 0,241, 0, 2, 0,242, 0, 2, 0,243, 0, 4, 0,124, 0, 4, 0,138, 0, 2, 0,244, 0, 2, 0,245, 0,
- 58, 0, 22, 0, 2, 0, 19, 0, 2, 0,246, 0, 7, 0,247, 0, 7, 0,248, 0, 2, 0,137, 0, 2, 0,249, 0, 4, 0,250, 0,
- 4, 0,251, 0, 32, 0,161, 0, 4, 0,252, 0, 2, 0,253, 0, 2, 0,254, 0, 9, 0,255, 0, 7, 0, 0, 1, 7, 0, 1, 1,
- 2, 0, 2, 1, 2, 0, 3, 1, 2, 0, 4, 1, 2, 0, 5, 1, 7, 0, 6, 1, 7, 0, 7, 1, 55, 0, 8, 1, 59, 0, 13, 0,
- 4, 0, 9, 1, 4, 0, 10, 1, 2, 0, 11, 1, 2, 0, 19, 0, 2, 0, 12, 1, 2, 0, 13, 1, 32, 0,161, 0, 7, 0, 14, 1,
- 4, 0, 15, 1, 0, 0, 16, 1, 7, 0, 17, 1, 4, 0, 18, 1, 4, 0,124, 0, 52, 0, 63, 0, 27, 0, 31, 0, 39, 0, 75, 0,
- 7, 0, 19, 1, 7, 0, 20, 1, 7, 0, 21, 1, 7, 0, 22, 1, 7, 0, 23, 1, 7, 0, 24, 1, 7, 0, 25, 1, 7, 0, 26, 1,
- 7, 0, 27, 1, 7, 0, 70, 0, 7, 0, 28, 1, 7, 0, 29, 1, 7, 0, 30, 1, 7, 0, 31, 1, 7, 0, 32, 1, 7, 0, 33, 1,
- 7, 0, 34, 1, 7, 0, 35, 1, 7, 0, 36, 1, 7, 0, 37, 1, 7, 0, 38, 1, 7, 0, 39, 1, 2, 0, 40, 1, 2, 0, 41, 1,
- 2, 0, 42, 1, 2, 0, 43, 1, 2, 0, 44, 1, 2, 0, 45, 1, 2, 0, 46, 1, 2, 0, 19, 0, 2, 0, 17, 0, 2, 0,239, 0,
- 7, 0, 47, 1, 7, 0, 48, 1, 7, 0, 49, 1, 7, 0, 50, 1, 4, 0, 51, 1, 4, 0, 52, 1, 2, 0, 53, 1, 2, 0, 54, 1,
- 2, 0, 12, 1, 2, 0,122, 0, 4, 0, 23, 0, 4, 0,119, 0, 4, 0,120, 0, 4, 0,121, 0, 7, 0, 55, 1, 7, 0, 56, 1,
- 7, 0, 43, 0, 45, 0, 57, 1, 60, 0, 58, 1, 36, 0, 80, 0, 47, 0,235, 0, 53, 0, 59, 1, 55, 0, 8, 1, 56, 0, 60, 1,
- 30, 0,148, 0, 58, 0, 61, 1, 59, 0, 62, 1, 0, 0, 63, 1, 0, 0,178, 0, 61, 0, 8, 0, 7, 0, 64, 1, 7, 0, 65, 1,
- 7, 0,169, 0, 4, 0, 19, 0, 7, 0, 66, 1, 7, 0, 67, 1, 7, 0, 68, 1, 32, 0, 45, 0, 62, 0, 72, 0, 27, 0, 31, 0,
- 39, 0, 75, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 69, 1, 2, 0,172, 0, 2, 0, 70, 1, 7, 0,179, 0, 7, 0,180, 0,
- 7, 0,181, 0, 7, 0,182, 0, 7, 0, 71, 1, 7, 0, 72, 1, 7, 0, 73, 1, 7, 0, 74, 1, 7, 0, 75, 1, 7, 0, 76, 1,
- 7, 0, 77, 1, 7, 0, 78, 1, 7, 0, 79, 1, 7, 0, 80, 1, 7, 0, 81, 1, 63, 0, 82, 1, 2, 0,246, 0, 2, 0, 70, 0,
- 7, 0,109, 0, 7, 0,110, 0, 7, 0, 83, 1, 7, 0, 84, 1, 7, 0, 85, 1, 7, 0, 86, 1, 7, 0, 87, 1, 2, 0, 88, 1,
- 2, 0, 89, 1, 2, 0, 90, 1, 2, 0, 91, 1, 0, 0, 92, 1, 0, 0, 93, 1, 2, 0, 94, 1, 2, 0, 95, 1, 2, 0, 96, 1,
- 2, 0, 97, 1, 2, 0, 98, 1, 7, 0, 99, 1, 7, 0,100, 1, 7, 0,101, 1, 7, 0,102, 1, 2, 0,103, 1, 2, 0, 43, 0,
- 2, 0,104, 1, 2, 0,105, 1, 2, 0,106, 1, 2, 0,107, 1, 7, 0,108, 1, 7, 0,109, 1, 7, 0,110, 1, 7, 0,111, 1,
- 7, 0,112, 1, 7, 0,113, 1, 7, 0,114, 1, 7, 0,115, 1, 7, 0,116, 1, 7, 0,117, 1, 7, 0,118, 1, 7, 0,119, 1,
- 2, 0,120, 1, 0, 0,121, 1, 36, 0, 80, 0, 51, 0,122, 1, 2, 0,123, 1, 0, 0,124, 1, 30, 0,148, 0, 64, 0, 2, 0,
- 27, 0, 31, 0, 36, 0, 80, 0, 65, 0, 18, 0, 7, 0,125, 1, 7, 0,126, 1, 7, 0,127, 1, 7, 0,128, 1, 7, 0,129, 1,
- 7, 0,130, 1, 7, 0,131, 1, 7, 0,132, 1, 7, 0,133, 1, 7, 0,134, 1, 2, 0,135, 1, 2, 0,136, 1, 2, 0,137, 1,
- 2, 0,138, 1, 7, 0,139, 1, 7, 0,140, 1, 7, 0,141, 1, 7, 0,142, 1, 66, 0,124, 0, 27, 0, 31, 0, 39, 0, 75, 0,
- 2, 0,143, 1, 2, 0, 19, 0, 7, 0,179, 0, 7, 0,180, 0, 7, 0,181, 0, 7, 0,144, 1, 7, 0,145, 1, 7, 0,146, 1,
- 7, 0,147, 1, 7, 0,148, 1, 7, 0,149, 1, 7, 0,150, 1, 7, 0,151, 1, 7, 0,152, 1, 7, 0,153, 1, 7, 0,154, 1,
- 7, 0,155, 1, 7, 0,156, 1, 7, 0,157, 1, 7, 0,158, 1, 7, 0,159, 1, 7, 0,160, 1, 7, 0,161, 1, 7, 0,162, 1,
- 7, 0,163, 1, 65, 0,164, 1, 7, 0,165, 1, 7, 0,166, 1, 7, 0,167, 1, 7, 0,168, 1, 7, 0,169, 1, 7, 0,170, 1,
- 7, 0,171, 1, 2, 0,172, 1, 2, 0,173, 1, 2, 0,174, 1, 0, 0,175, 1, 0, 0,176, 1, 7, 0,177, 1, 7, 0,178, 1,
- 2, 0,179, 1, 2, 0,180, 1, 7, 0,181, 1, 7, 0,182, 1, 7, 0,183, 1, 7, 0,184, 1, 2, 0,185, 1, 2, 0,186, 1,
- 4, 0, 69, 1, 4, 0,187, 1, 2, 0,188, 1, 2, 0,189, 1, 2, 0,190, 1, 2, 0,191, 1, 7, 0,192, 1, 7, 0,193, 1,
- 7, 0,194, 1, 7, 0,195, 1, 7, 0,196, 1, 7, 0,197, 1, 7, 0,198, 1, 7, 0,199, 1, 7, 0,200, 1, 7, 0,201, 1,
- 0, 0,202, 1, 7, 0,203, 1, 7, 0,204, 1, 7, 0,205, 1, 4, 0,206, 1, 0, 0,207, 1, 0, 0,104, 1, 0, 0,208, 1,
- 0, 0, 63, 1, 2, 0,209, 1, 2, 0,210, 1, 2, 0,123, 1, 2, 0,211, 1, 2, 0,212, 1, 2, 0,213, 1, 7, 0,214, 1,
- 7, 0,215, 1, 7, 0,216, 1, 7, 0,217, 1, 7, 0,218, 1, 2, 0,157, 0, 2, 0,158, 0, 55, 0,219, 1, 55, 0,220, 1,
- 0, 0,221, 1, 0, 0,222, 1, 0, 0,223, 1, 0, 0,224, 1, 2, 0,225, 1, 2, 0,226, 1, 7, 0,227, 1, 7, 0,228, 1,
- 51, 0,122, 1, 60, 0, 58, 1, 36, 0, 80, 0, 67, 0,229, 1, 30, 0,148, 0, 7, 0,230, 1, 7, 0,231, 1, 7, 0,232, 1,
- 7, 0,233, 1, 7, 0,234, 1, 2, 0,235, 1, 2, 0, 70, 0, 7, 0,236, 1, 7, 0,237, 1, 7, 0,238, 1, 7, 0,239, 1,
- 7, 0,240, 1, 7, 0,241, 1, 7, 0,242, 1, 7, 0,243, 1, 7, 0,244, 1, 2, 0,245, 1, 2, 0,246, 1, 4, 0,247, 1,
- 4, 0,248, 1, 12, 0,249, 1, 68, 0, 4, 0, 27, 0, 31, 0, 0, 0,250, 1, 69, 0, 2, 0, 43, 0,147, 0, 70, 0, 26, 0,
- 70, 0, 0, 0, 70, 0, 1, 0, 71, 0,251, 1, 4, 0,252, 1, 4, 0,253, 1, 4, 0,254, 1, 4, 0,255, 1, 4, 0, 0, 2,
- 4, 0, 1, 2, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 2, 2, 2, 0, 3, 2, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0,
- 7, 0, 4, 2, 7, 0, 5, 2, 7, 0, 6, 2, 7, 0, 7, 2, 7, 0, 8, 2, 7, 0, 9, 2, 7, 0, 10, 2, 7, 0, 23, 0,
- 7, 0, 11, 2, 7, 0, 12, 2, 72, 0, 20, 0, 27, 0, 31, 0, 39, 0, 75, 0, 71, 0,251, 1, 12, 0, 13, 2, 12, 0, 14, 2,
- 12, 0, 15, 2, 36, 0, 80, 0, 66, 0, 16, 2, 0, 0, 19, 0, 0, 0, 17, 2, 2, 0, 18, 2, 2, 0,171, 0, 2, 0, 37, 0,
- 7, 0, 64, 1, 7, 0,169, 0, 7, 0, 65, 1, 7, 0, 19, 2, 7, 0, 20, 2, 7, 0, 21, 2, 70, 0, 22, 2, 35, 0, 11, 0,
- 7, 0, 23, 2, 7, 0, 24, 2, 7, 0, 25, 2, 7, 0,248, 0, 2, 0, 55, 0, 0, 0, 26, 2, 0, 0, 27, 2, 0, 0, 28, 2,
- 0, 0, 29, 2, 0, 0, 30, 2, 0, 0, 31, 2, 34, 0, 7, 0, 7, 0, 32, 2, 7, 0, 24, 2, 7, 0, 25, 2, 2, 0, 28, 2,
- 2, 0, 31, 2, 7, 0,248, 0, 7, 0, 37, 0, 73, 0, 21, 0, 73, 0, 0, 0, 73, 0, 1, 0, 2, 0, 17, 0, 2, 0, 33, 2,
- 2, 0, 31, 2, 2, 0, 19, 0, 2, 0, 34, 2, 2, 0, 35, 2, 2, 0, 36, 2, 2, 0, 37, 2, 2, 0, 38, 2, 2, 0, 39, 2,
- 2, 0, 40, 2, 2, 0, 41, 2, 7, 0, 42, 2, 7, 0, 43, 2, 34, 0, 49, 0, 35, 0, 50, 0, 2, 0, 44, 2, 2, 0, 45, 2,
- 4, 0, 46, 2, 74, 0, 5, 0, 2, 0, 47, 2, 2, 0, 33, 2, 0, 0, 19, 0, 0, 0, 37, 0, 2, 0, 70, 0, 75, 0, 4, 0,
- 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 8, 0, 7, 0, 48, 2, 76, 0, 68, 0, 27, 0, 31, 0, 39, 0, 75, 0, 71, 0,251, 1,
- 12, 0, 49, 2, 12, 0, 14, 2, 12, 0, 50, 2, 32, 0, 51, 2, 32, 0, 52, 2, 32, 0, 53, 2, 36, 0, 80, 0, 77, 0, 54, 2,
- 38, 0, 55, 2, 66, 0, 16, 2, 12, 0, 56, 2, 7, 0, 64, 1, 7, 0,169, 0, 7, 0, 65, 1, 2, 0,171, 0, 2, 0, 43, 0,
- 2, 0, 57, 2, 2, 0, 58, 2, 2, 0, 59, 2, 7, 0, 60, 2, 7, 0, 70, 0, 2, 0, 61, 2, 2, 0, 18, 2, 2, 0, 19, 0,
- 2, 0, 62, 2, 7, 0, 63, 2, 7, 0, 64, 2, 7, 0, 65, 2, 2, 0, 36, 2, 2, 0, 37, 2, 2, 0, 66, 2, 2, 0, 67, 2,
- 4, 0, 68, 2, 9, 0, 69, 2, 2, 0, 23, 0, 2, 0, 95, 0, 2, 0, 67, 0, 2, 0, 70, 2, 7, 0, 71, 2, 7, 0, 72, 2,
- 7, 0, 73, 2, 7, 0, 74, 2, 7, 0, 75, 2, 7, 0, 76, 2, 7, 0, 77, 2, 7, 0, 78, 2, 7, 0, 79, 2, 7, 0, 80, 2,
- 0, 0, 81, 2, 78, 0, 82, 2, 79, 0, 83, 2, 0, 0, 84, 2, 68, 0, 85, 2, 68, 0, 86, 2, 68, 0, 87, 2, 68, 0, 88, 2,
- 4, 0, 89, 2, 7, 0, 90, 2, 4, 0, 91, 2, 4, 0, 92, 2, 75, 0, 93, 2, 4, 0, 94, 2, 4, 0, 95, 2, 74, 0, 96, 2,
- 74, 0, 97, 2, 80, 0, 41, 0, 27, 0, 31, 0, 39, 0, 75, 0, 71, 0,251, 1, 12, 0, 98, 2, 36, 0, 80, 0, 38, 0, 55, 2,
- 66, 0, 16, 2, 81, 0, 99, 2, 82, 0,100, 2, 83, 0,101, 2, 84, 0,102, 2, 85, 0,103, 2, 86, 0,104, 2, 87, 0,105, 2,
- 88, 0,106, 2, 80, 0,107, 2, 89, 0,108, 2, 90, 0,109, 2, 91, 0,110, 2, 91, 0,111, 2, 91, 0,112, 2, 4, 0, 54, 0,
- 4, 0,113, 2, 4, 0,114, 2, 4, 0,115, 2, 4, 0,116, 2, 2, 0,171, 0, 2, 0,117, 2, 7, 0, 64, 1, 7, 0,169, 0,
- 7, 0, 65, 1, 7, 0,118, 2, 4, 0, 57, 2, 2, 0,119, 2, 2, 0, 19, 0, 2, 0,120, 2, 2, 0,121, 2, 2, 0, 18, 2,
- 2, 0,122, 2, 92, 0,123, 2, 93, 0,124, 2, 83, 0, 8, 0, 9, 0,125, 2, 7, 0,126, 2, 4, 0,127, 2, 0, 0, 19, 0,
- 0, 0,128, 2, 2, 0, 69, 1, 2, 0,129, 2, 2, 0,130, 2, 81, 0, 7, 0, 4, 0,131, 2, 4, 0,132, 2, 4, 0,133, 2,
- 4, 0,134, 2, 2, 0, 33, 2, 0, 0,135, 2, 0, 0, 19, 0, 85, 0, 5, 0, 4, 0,131, 2, 4, 0,132, 2, 0, 0,136, 2,
- 0, 0,137, 2, 2, 0, 19, 0, 94, 0, 2, 0, 4, 0,138, 2, 7, 0, 25, 2, 86, 0, 3, 0, 94, 0,139, 2, 4, 0,140, 2,
- 4, 0, 19, 0, 84, 0, 6, 0, 7, 0,141, 2, 2, 0,142, 2, 2, 0, 33, 2, 0, 0, 19, 0, 0, 0,137, 2, 0, 0, 59, 2,
- 87, 0, 4, 0, 0, 0,233, 0, 0, 0,179, 0, 0, 0,180, 0, 0, 0,181, 0, 95, 0, 6, 0, 47, 0,125, 2, 0, 0, 19, 0,
- 0, 0,128, 2, 2, 0, 69, 1, 2, 0,129, 2, 2, 0,130, 2, 96, 0, 1, 0, 7, 0,143, 2, 97, 0, 5, 0, 0, 0,233, 0,
- 0, 0,179, 0, 0, 0,180, 0, 0, 0,181, 0, 4, 0, 37, 0, 88, 0, 1, 0, 7, 0,144, 2, 89, 0, 2, 0, 4, 0,145, 2,
- 4, 0, 17, 0, 82, 0, 7, 0, 7, 0,126, 2, 47, 0,125, 2, 0, 0, 19, 0, 0, 0,128, 2, 2, 0, 69, 1, 2, 0,129, 2,
- 2, 0,130, 2, 98, 0, 1, 0, 7, 0,146, 2, 99, 0, 1, 0, 4, 0,147, 2,100, 0, 1, 0, 0, 0,148, 2,101, 0, 1, 0,
- 7, 0,126, 2,102, 0, 3, 0, 4, 0,149, 2, 0, 0, 92, 0, 7, 0,150, 2,103, 0, 4, 0, 7, 0,233, 0, 7, 0,179, 0,
- 7, 0,180, 0, 7, 0,181, 0,104, 0, 1, 0,103, 0,127, 2,105, 0, 5, 0, 4, 0,151, 2, 4, 0,152, 2, 0, 0, 19, 0,
- 0, 0, 33, 2, 0, 0, 59, 2,106, 0, 2, 0, 4, 0,153, 2, 4, 0,152, 2,107, 0, 10, 0,107, 0, 0, 0,107, 0, 1, 0,
-105, 0,154, 2,104, 0,155, 2,106, 0,156, 2, 4, 0, 54, 0, 4, 0,114, 2, 4, 0,113, 2, 4, 0, 37, 0, 84, 0,157, 2,
- 92, 0, 14, 0, 12, 0,158, 2, 84, 0,157, 2, 0, 0,159, 2, 0, 0,160, 2, 0, 0,161, 2, 0, 0,162, 2, 0, 0,163, 2,
- 0, 0,164, 2, 0, 0,165, 2, 0, 0, 19, 0, 91, 0,110, 2, 91, 0,112, 2, 2, 0,166, 2, 0, 0,167, 2, 93, 0, 8, 0,
- 4, 0,168, 2, 4, 0,169, 2, 81, 0,170, 2, 85, 0,171, 2, 4, 0,114, 2, 4, 0,113, 2, 4, 0, 54, 0, 4, 0, 37, 0,
-108, 0, 9, 0,108, 0, 0, 0,108, 0, 1, 0, 4, 0, 17, 0, 4, 0, 69, 1, 4, 0,172, 2, 4, 0, 37, 0, 0, 0, 20, 0,
- 46, 0,129, 0, 0, 0,173, 2,109, 0, 7, 0,108, 0,174, 2, 2, 0,175, 2, 2, 0,158, 2, 2, 0,176, 2, 2, 0, 90, 0,
- 9, 0,177, 2, 9, 0,178, 2,110, 0, 3, 0,108, 0,174, 2, 32, 0,161, 0, 0, 0, 20, 0,111, 0, 5, 0,108, 0,174, 2,
- 32, 0,161, 0, 0, 0, 20, 0, 2, 0,179, 2, 0, 0,180, 2,112, 0, 5, 0,108, 0,174, 2, 7, 0, 88, 0, 7, 0,181, 2,
- 4, 0,182, 2, 4, 0,183, 2,113, 0, 5, 0,108, 0,174, 2, 32, 0,184, 2, 0, 0, 72, 0, 4, 0, 69, 1, 4, 0, 19, 0,
-114, 0, 13, 0,108, 0,174, 2, 32, 0,185, 2, 32, 0,186, 2, 32, 0,187, 2, 32, 0,188, 2, 7, 0,189, 2, 7, 0,190, 2,
- 7, 0,181, 2, 7, 0,191, 2, 4, 0,192, 2, 4, 0,193, 2, 4, 0, 90, 0, 4, 0,194, 2,115, 0, 5, 0,108, 0,174, 2,
- 2, 0,195, 2, 2, 0, 19, 0, 7, 0,196, 2, 32, 0,197, 2,116, 0, 3, 0,108, 0,174, 2, 7, 0,198, 2, 4, 0, 90, 0,
-117, 0, 10, 0,108, 0,174, 2, 7, 0,199, 2, 4, 0,200, 2, 4, 0, 37, 0, 2, 0, 90, 0, 2, 0,201, 2, 2, 0,202, 2,
- 2, 0,203, 2, 7, 0,204, 2, 0, 0,205, 2,118, 0, 3, 0,108, 0,174, 2, 7, 0, 37, 0, 4, 0, 17, 0,119, 0, 6, 0,
-108, 0,174, 2,120, 0,206, 2,121, 0,207, 2,122, 0,208, 2, 7, 0,209, 2, 4, 0, 17, 0,123, 0, 11, 0,108, 0,174, 2,
- 52, 0,210, 2, 7, 0,211, 2, 4, 0,212, 2, 0, 0,205, 2, 7, 0,213, 2, 4, 0,214, 2, 32, 0,215, 2, 0, 0,216, 2,
- 4, 0,217, 2, 4, 0, 37, 0,124, 0, 12, 0,108, 0,174, 2, 32, 0,218, 2, 47, 0,219, 2, 4, 0, 90, 0, 4, 0,220, 2,
- 7, 0,221, 2, 7, 0,222, 2, 7, 0,223, 2, 7, 0,224, 2, 0, 0,216, 2, 4, 0,217, 2, 4, 0, 37, 0,125, 0, 3, 0,
-108, 0,174, 2, 7, 0,225, 2, 4, 0,226, 2,126, 0, 5, 0,108, 0,174, 2, 7, 0,227, 2, 0, 0,205, 2, 2, 0, 19, 0,
- 2, 0,228, 2,127, 0, 8, 0,108, 0,174, 2, 32, 0,161, 0, 7, 0,227, 2, 7, 0,248, 0, 7, 0,106, 0, 0, 0,205, 2,
- 2, 0, 19, 0, 2, 0, 17, 0,128, 0, 21, 0,108, 0,174, 2, 32, 0,229, 2, 0, 0,205, 2, 52, 0,210, 2, 32, 0,215, 2,
- 2, 0, 19, 0, 2, 0, 37, 0, 7, 0,230, 2, 7, 0,231, 2, 7, 0,232, 2, 7, 0, 63, 2, 7, 0,233, 2, 7, 0,234, 2,
- 7, 0,235, 2, 7, 0,236, 2, 4, 0,214, 2, 4, 0,217, 2, 0, 0,216, 2, 7, 0,237, 2, 7, 0,238, 2, 7, 0, 43, 0,
-129, 0, 7, 0,108, 0,174, 2, 2, 0,239, 2, 2, 0,240, 2, 4, 0, 70, 0, 32, 0,161, 0, 7, 0,241, 2, 0, 0,205, 2,
-130, 0, 10, 0,108, 0,174, 2, 32, 0,161, 0, 0, 0,242, 2, 7, 0,243, 2, 7, 0,244, 2, 7, 0,236, 2, 4, 0,245, 2,
- 4, 0,246, 2, 7, 0,247, 2, 0, 0, 20, 0,131, 0, 1, 0,108, 0,174, 2,132, 0, 7, 0,108, 0,174, 2, 46, 0,129, 0,
-133, 0,248, 2,134, 0,249, 2,135, 0,250, 2,136, 0,251, 2, 12, 0,252, 2,137, 0, 13, 0,108, 0,174, 2, 84, 0,253, 2,
- 84, 0,254, 2, 84, 0,255, 2, 84, 0, 0, 3, 84, 0, 1, 3, 84, 0, 2, 3, 81, 0, 3, 3, 4, 0, 4, 3, 4, 0, 5, 3,
- 7, 0,209, 2, 7, 0, 37, 0,138, 0, 6, 3,139, 0, 7, 0,108, 0,174, 2, 84, 0,253, 2, 84, 0, 7, 3,140, 0, 8, 3,
-141, 0, 6, 3, 4, 0, 9, 3, 4, 0, 4, 3,142, 0, 4, 0,108, 0,174, 2, 32, 0,161, 0, 4, 0, 10, 3, 4, 0, 37, 0,
-143, 0, 2, 0, 4, 0, 11, 3, 7, 0, 25, 2,144, 0, 2, 0, 4, 0,120, 0, 4, 0, 12, 3,145, 0, 24, 0,108, 0,174, 2,
- 32, 0,161, 0, 0, 0,205, 2, 2, 0, 13, 3, 2, 0, 19, 0, 2, 0, 69, 1, 2, 0, 37, 0,143, 0, 14, 3, 4, 0, 15, 3,
- 7, 0, 16, 3, 4, 0, 54, 0, 4, 0, 17, 3,144, 0, 18, 3,143, 0, 19, 3, 4, 0, 20, 3, 4, 0, 21, 3, 4, 0, 22, 3,
- 4, 0, 12, 3, 7, 0, 23, 3, 7, 0, 24, 3, 7, 0, 25, 3, 7, 0, 26, 3, 7, 0, 27, 3, 9, 0, 28, 3,146, 0, 8, 0,
-108, 0,174, 2,147, 0, 29, 3,140, 0, 8, 3, 4, 0, 30, 3, 4, 0, 31, 3, 4, 0, 32, 3, 2, 0, 19, 0, 2, 0, 57, 0,
-148, 0, 8, 0,108, 0,174, 2, 32, 0, 45, 0, 2, 0,252, 0, 2, 0, 19, 0, 2, 0,195, 2, 2, 0, 57, 0, 7, 0, 33, 3,
- 7, 0, 34, 3,149, 0, 5, 0,108, 0,174, 2, 4, 0, 35, 3, 2, 0, 19, 0, 2, 0, 36, 3, 7, 0, 37, 3,150, 0, 8, 0,
-108, 0,174, 2, 0, 0, 38, 3, 0, 0, 39, 3, 0, 0,164, 2, 0, 0, 40, 3, 0, 0, 41, 3, 0, 0, 90, 0, 0, 0, 59, 2,
-151, 0, 3, 0,108, 0,174, 2,152, 0, 42, 3,136, 0,251, 2,153, 0, 10, 0,108, 0,174, 2, 32, 0, 43, 3, 32, 0, 44, 3,
- 0, 0, 45, 3, 7, 0, 46, 3, 2, 0, 47, 3, 2, 0, 48, 3, 0, 0, 49, 3, 0, 0, 50, 3, 0, 0,180, 2,154, 0, 9, 0,
-108, 0,174, 2, 32, 0, 51, 3, 0, 0, 45, 3, 7, 0, 52, 3, 7, 0, 53, 3, 0, 0, 69, 1, 0, 0,195, 2, 0, 0, 54, 3,
- 0, 0, 37, 0,155, 0, 1, 0,108, 0,174, 2,156, 0, 8, 0,108, 0,174, 2, 0, 0,205, 2, 7, 0,120, 0, 7, 0, 55, 3,
- 7, 0, 56, 3, 7, 0, 57, 3, 7, 0, 58, 3, 4, 0, 19, 0,157, 0, 9, 0,108, 0,174, 2, 32, 0, 59, 3, 4, 0, 60, 3,
- 4, 0, 61, 3, 4, 0, 62, 3, 7, 0, 63, 3, 7, 0, 64, 3, 2, 0,195, 2, 2, 0, 19, 0,158, 0, 28, 0, 27, 0, 31, 0,
- 2, 0, 34, 2, 2, 0, 35, 2, 2, 0, 65, 3, 2, 0, 19, 0, 2, 0, 66, 3, 2, 0, 67, 3, 2, 0, 68, 3, 2, 0, 70, 0,
- 0, 0, 69, 3, 0, 0, 70, 3, 0, 0, 71, 3, 0, 0, 17, 0, 4, 0, 37, 0, 7, 0, 72, 3, 7, 0, 73, 3, 7, 0, 74, 3,
- 7, 0, 75, 3, 7, 0, 76, 3, 7, 0, 77, 3, 34, 0, 78, 3, 36, 0, 80, 0, 38, 0, 55, 2, 86, 0,104, 2, 0, 0, 72, 0,
- 7, 0, 79, 3, 7, 0, 80, 3,158, 0, 81, 3,159, 0, 3, 0,159, 0, 0, 0,159, 0, 1, 0, 0, 0, 20, 0, 71, 0, 3, 0,
- 7, 0, 82, 3, 4, 0, 19, 0, 4, 0, 37, 0, 32, 0,126, 0, 27, 0, 31, 0, 39, 0, 75, 0,160, 0, 83, 3, 2, 0, 17, 0,
- 2, 0, 84, 3, 4, 0, 85, 3, 4, 0, 86, 3, 4, 0, 87, 3, 0, 0, 88, 3, 32, 0, 38, 0, 32, 0, 89, 3, 32, 0, 90, 3,
- 32, 0, 91, 3, 32, 0, 92, 3, 36, 0, 80, 0, 77, 0, 54, 2, 71, 0,251, 1,161, 0, 93, 3,161, 0, 94, 3,162, 0, 95, 3,
- 9, 0, 2, 0,163, 0, 96, 3,164, 0, 97, 3,165, 0, 98, 3, 12, 0, 99, 3, 12, 0, 98, 2, 12, 0, 14, 2, 12, 0,100, 3,
- 12, 0,101, 3, 4, 0, 69, 1, 4, 0,102, 3, 66, 0, 16, 2, 0, 0,103, 3, 4, 0, 18, 2, 4, 0,104, 3, 7, 0, 64, 1,
- 7, 0,105, 3, 7, 0,106, 3, 7, 0,169, 0, 7, 0,107, 3, 7, 0, 65, 1, 7, 0,108, 3, 7, 0, 4, 2, 7, 0,109, 3,
- 7, 0,110, 3, 7, 0,111, 3, 7, 0,112, 3, 7, 0,113, 3, 7, 0,114, 3, 7, 0,243, 2, 7, 0,115, 3, 7, 0,237, 0,
- 4, 0,116, 3, 2, 0, 19, 0, 2, 0,117, 3, 2, 0,118, 3, 2, 0,119, 3, 2, 0,120, 3, 2, 0,121, 3, 2, 0,122, 3,
- 2, 0,123, 3, 2, 0,124, 3, 2, 0,125, 3, 2, 0,126, 3, 2, 0,127, 3, 4, 0,128, 3, 4, 0,129, 3, 4, 0,130, 3,
- 4, 0,131, 3, 7, 0,132, 3, 7, 0, 90, 2, 7, 0,133, 3, 7, 0,134, 3, 7, 0,135, 3, 7, 0,136, 3, 7, 0,137, 3,
- 7, 0,212, 0, 7, 0,138, 3, 7, 0,139, 3, 7, 0,140, 3, 7, 0,141, 3, 2, 0,142, 3, 0, 0,143, 3, 0, 0,144, 3,
- 0, 0,145, 3, 0, 0,146, 3, 7, 0,147, 3, 7, 0,148, 3, 12, 0,149, 3, 12, 0,150, 3, 12, 0,151, 3, 12, 0,152, 3,
- 7, 0,153, 3, 2, 0,145, 2, 2, 0,154, 3, 7, 0,127, 2, 4, 0,155, 3, 4, 0,156, 3,166, 0,157, 3, 2, 0,158, 3,
- 2, 0,244, 0, 7, 0,159, 3, 12, 0,160, 3, 12, 0,161, 3, 12, 0,162, 3, 12, 0,163, 3,167, 0, 61, 1,168, 0,164, 3,
- 67, 0,165, 3, 2, 0,166, 3, 2, 0,167, 3, 2, 0,168, 3, 2, 0,169, 3, 7, 0,119, 2, 2, 0,170, 3, 2, 0,171, 3,
-152, 0,172, 3,140, 0,173, 3,140, 0,174, 3, 4, 0,175, 3, 4, 0,176, 3, 4, 0,177, 3, 4, 0, 70, 0, 12, 0,178, 3,
- 12, 0,179, 3, 12, 0,180, 3,169, 0, 14, 0,169, 0, 0, 0,169, 0, 1, 0, 32, 0, 38, 0, 7, 0,243, 2, 7, 0, 66, 1,
- 7, 0,244, 2, 7, 0,236, 2, 0, 0, 20, 0, 4, 0,245, 2, 4, 0,246, 2, 4, 0,181, 3, 2, 0, 17, 0, 2, 0,182, 3,
- 7, 0,247, 2,170, 0, 12, 0,170, 0, 0, 0,170, 0, 1, 0, 32, 0, 45, 0, 4, 0,183, 3, 4, 0,145, 2, 4, 0,184, 3,
- 4, 0, 17, 0, 4, 0,185, 3, 7, 0, 66, 1, 7, 0,186, 3, 7, 0,187, 3, 7, 0,143, 2,167, 0, 40, 0, 4, 0, 19, 0,
- 2, 0,188, 3, 2, 0,189, 3, 2, 0,236, 2, 2, 0,190, 3, 2, 0,191, 3, 2, 0,192, 3, 2, 0,193, 3, 2, 0,194, 3,
- 7, 0,195, 3, 7, 0,196, 3, 7, 0,197, 3, 7, 0,198, 3, 7, 0,199, 3, 7, 0,200, 3, 7, 0,201, 3, 7, 0,202, 3,
- 7, 0,203, 3, 7, 0,204, 3, 7, 0,205, 3, 7, 0,206, 3, 7, 0,207, 3, 7, 0,208, 3, 7, 0,209, 3, 7, 0,210, 3,
- 7, 0,211, 3, 7, 0,212, 3, 7, 0,213, 3, 7, 0,214, 3, 7, 0,215, 3, 7, 0,216, 3, 7, 0,217, 3, 7, 0,218, 3,
- 7, 0,219, 3, 7, 0,220, 3, 7, 0,221, 3, 52, 0,162, 0,171, 0,222, 3, 7, 0,223, 3, 4, 0,183, 2,172, 0, 5, 0,
- 67, 0,229, 1, 7, 0,224, 3, 7, 0,225, 3, 2, 0, 19, 0, 2, 0,226, 3,173, 0, 9, 0,173, 0, 0, 0,173, 0, 1, 0,
- 4, 0,227, 3, 4, 0,228, 3, 4, 0,229, 3, 4, 0, 19, 0, 4, 0,230, 3, 9, 0,231, 3, 9, 0,232, 3,136, 0, 19, 0,
-136, 0, 0, 0,136, 0, 1, 0, 4, 0, 19, 0, 4, 0,233, 3, 4, 0,234, 3, 4, 0,235, 3, 4, 0,236, 3, 4, 0,237, 3,
- 4, 0,238, 3, 4, 0,228, 3, 4, 0,145, 2, 4, 0, 57, 0, 0, 0,239, 3, 0, 0,240, 3, 0, 0,241, 3, 0, 0,242, 3,
- 12, 0,243, 3,174, 0,244, 3, 9, 0,245, 3,175, 0, 1, 0, 7, 0, 32, 2,166, 0, 30, 0, 4, 0, 19, 0, 7, 0,246, 3,
- 7, 0,247, 3, 7, 0,248, 3, 4, 0,249, 3, 4, 0,250, 3, 4, 0,251, 3, 4, 0,252, 3, 7, 0,253, 3, 7, 0,254, 3,
- 7, 0,255, 3, 7, 0, 0, 4, 7, 0, 1, 4, 7, 0, 2, 4, 7, 0, 3, 4, 7, 0, 4, 4, 7, 0, 5, 4, 7, 0, 6, 4,
- 7, 0, 7, 4, 7, 0, 8, 4, 7, 0, 9, 4, 7, 0, 10, 4, 7, 0, 11, 4, 7, 0, 12, 4, 7, 0, 13, 4, 7, 0, 14, 4,
- 4, 0, 15, 4, 4, 0, 16, 4, 7, 0, 17, 4, 7, 0,138, 3,168, 0, 54, 0, 4, 0,228, 3, 4, 0, 18, 4,176, 0, 19, 4,
-177, 0, 20, 4, 0, 0, 37, 0, 0, 0, 21, 4, 2, 0, 22, 4, 7, 0, 23, 4, 0, 0, 24, 4, 7, 0, 25, 4, 7, 0, 26, 4,
- 7, 0, 27, 4, 7, 0, 28, 4, 7, 0, 29, 4, 7, 0, 30, 4, 7, 0, 31, 4, 7, 0, 32, 4, 7, 0, 33, 4, 2, 0, 34, 4,
- 0, 0, 35, 4, 2, 0, 36, 4, 7, 0, 37, 4, 7, 0, 38, 4, 0, 0, 39, 4, 4, 0,121, 0, 4, 0, 40, 4, 4, 0, 41, 4,
- 2, 0, 42, 4, 2, 0, 43, 4,175, 0, 44, 4, 4, 0, 45, 4, 4, 0, 82, 0, 7, 0, 46, 4, 7, 0, 47, 4, 7, 0, 48, 4,
- 7, 0, 49, 4, 2, 0, 50, 4, 2, 0, 51, 4, 2, 0, 52, 4, 2, 0, 53, 4, 2, 0, 54, 4, 2, 0, 55, 4, 2, 0, 56, 4,
- 2, 0, 57, 4,178, 0, 58, 4, 7, 0, 59, 4, 7, 0, 60, 4,136, 0, 61, 4, 12, 0,252, 2,172, 0, 62, 4, 7, 0, 63, 4,
- 7, 0, 64, 4, 7, 0, 65, 4, 0, 0, 66, 4,152, 0, 51, 0,151, 0, 67, 4, 2, 0, 17, 0, 2, 0, 68, 4, 2, 0, 69, 4,
- 2, 0, 70, 4, 7, 0, 71, 4, 2, 0, 72, 4, 2, 0, 73, 4, 7, 0, 74, 4, 2, 0, 75, 4, 2, 0, 76, 4, 7, 0, 77, 4,
- 7, 0, 78, 4, 7, 0, 79, 4, 7, 0, 80, 4, 7, 0, 81, 4, 4, 0, 82, 4, 4, 0, 83, 4, 7, 0, 84, 4, 4, 0, 85, 4,
- 7, 0, 86, 4, 7, 0, 87, 4, 7, 0, 88, 4, 80, 0, 89, 4, 80, 0, 90, 4, 80, 0, 91, 4, 0, 0, 92, 4, 7, 0, 93, 4,
- 7, 0, 94, 4, 36, 0, 80, 0, 2, 0, 95, 4, 0, 0, 96, 4, 0, 0, 97, 4, 7, 0, 98, 4, 4, 0, 99, 4, 7, 0,100, 4,
- 7, 0,101, 4, 4, 0,102, 4, 4, 0, 19, 0, 7, 0,103, 4, 7, 0,104, 4, 7, 0,105, 4, 84, 0,106, 4, 7, 0,107, 4,
- 7, 0,108, 4, 7, 0,109, 4, 7, 0,110, 4, 7, 0,111, 4, 7, 0,112, 4, 7, 0,113, 4, 4, 0,114, 4,179, 0, 78, 0,
- 27, 0, 31, 0, 39, 0, 75, 0, 2, 0,172, 0, 2, 0, 70, 1, 2, 0,104, 1, 2, 0,115, 4, 7, 0,116, 4, 7, 0,117, 4,
- 7, 0,118, 4, 7, 0,119, 4, 7, 0,120, 4, 7, 0,121, 4, 7, 0,122, 4, 7, 0,123, 4, 7, 0,150, 1, 7, 0,152, 1,
- 7, 0,151, 1, 7, 0,124, 4, 4, 0,125, 4, 7, 0,126, 4, 7, 0,127, 4, 7, 0,128, 4, 7, 0,129, 4, 7, 0,130, 4,
- 7, 0,131, 4, 7, 0,132, 4, 2, 0,133, 4, 2, 0, 69, 1, 2, 0,134, 4, 2, 0,135, 4, 2, 0,136, 4, 2, 0,137, 4,
- 2, 0,138, 4, 2, 0,139, 4, 7, 0,140, 4, 7, 0,141, 4, 7, 0,142, 4, 7, 0,143, 4, 7, 0,144, 4, 7, 0,145, 4,
- 7, 0,146, 4, 7, 0,147, 4, 7, 0,148, 4, 7, 0,149, 4, 7, 0,150, 4, 7, 0,151, 4, 2, 0,152, 4, 2, 0,153, 4,
- 2, 0,154, 4, 2, 0,155, 4, 7, 0,156, 4, 7, 0,157, 4, 7, 0,158, 4, 7, 0,159, 4, 2, 0,160, 4, 2, 0,161, 4,
- 2, 0,162, 4, 2, 0,163, 4, 7, 0,164, 4, 7, 0,165, 4, 7, 0,166, 4, 7, 0,167, 4, 7, 0,168, 4, 7, 0,169, 4,
- 7, 0,170, 4, 2, 0,171, 4, 2, 0,172, 4, 2, 0,173, 4, 2, 0,174, 4, 2, 0,175, 4, 2, 0, 19, 0, 7, 0,176, 4,
- 7, 0,177, 4, 36, 0, 80, 0, 51, 0,122, 1, 2, 0,123, 1, 2, 0,178, 4, 30, 0,148, 0,180, 0, 8, 0,180, 0, 0, 0,
-180, 0, 1, 0, 4, 0,116, 3, 4, 0,179, 4, 4, 0, 19, 0, 2, 0,180, 4, 2, 0,181, 4, 32, 0,161, 0,181, 0, 13, 0,
- 9, 0,182, 4, 9, 0,183, 4, 4, 0,184, 4, 4, 0,185, 4, 4, 0,186, 4, 4, 0,187, 4, 4, 0,188, 4, 4, 0,189, 4,
- 4, 0,190, 4, 4, 0,191, 4, 4, 0,192, 4, 4, 0, 37, 0, 0, 0,193, 4,182, 0, 5, 0, 9, 0,194, 4, 9, 0,195, 4,
- 4, 0,196, 4, 4, 0, 70, 0, 0, 0,197, 4,183, 0, 17, 0, 4, 0,198, 4, 4, 0,199, 4, 4, 0,200, 4, 4, 0,201, 4,
- 4, 0,202, 4, 4, 0,203, 4, 4, 0,204, 4, 4, 0,205, 4, 4, 0,206, 4, 4, 0,207, 4, 4, 0,208, 4, 4, 0,209, 4,
- 2, 0,210, 4, 2, 0,211, 4, 4, 0,212, 4, 4, 0,213, 4, 4, 0, 43, 0,184, 0, 15, 0, 4, 0, 17, 0, 4, 0,200, 4,
- 4, 0,214, 4, 4, 0,215, 4, 4, 0,216, 4, 4, 0,217, 4, 7, 0,218, 4, 4, 0,219, 4, 4, 0, 90, 0, 4, 0,220, 4,
- 4, 0,221, 4, 4, 0,222, 4, 4, 0,223, 4, 4, 0,224, 4, 26, 0, 30, 0,185, 0, 7, 0, 4, 0,225, 4, 7, 0,226, 4,
- 7, 0,227, 4, 7, 0,228, 4, 4, 0,229, 4, 2, 0, 19, 0, 2, 0, 37, 0,186, 0, 11, 0,186, 0, 0, 0,186, 0, 1, 0,
- 0, 0, 20, 0, 66, 0,230, 4, 67, 0,231, 4, 4, 0,116, 3, 4, 0,232, 4, 4, 0,233, 4, 4, 0, 37, 0, 4, 0,234, 4,
- 4, 0,235, 4,187, 0,111, 0,181, 0,236, 4,182, 0,237, 4,183, 0,238, 4,184, 0,239, 4, 4, 0, 9, 3, 4, 0,121, 0,
- 4, 0, 40, 4, 7, 0,240, 4, 4, 0,241, 4, 4, 0,242, 4, 4, 0,243, 4, 4, 0,244, 4, 2, 0, 19, 0, 2, 0,245, 4,
- 7, 0,246, 4, 7, 0,247, 4, 7, 0,248, 4, 7, 0,249, 4, 7, 0,250, 4, 2, 0,251, 4, 2, 0,252, 4, 2, 0,253, 4,
- 2, 0,254, 4, 2, 0,243, 0, 2, 0,255, 4, 2, 0, 0, 5, 2, 0, 1, 5, 2, 0, 2, 5, 2, 0, 3, 5, 2, 0, 91, 1,
- 2, 0,106, 0, 2, 0, 4, 5, 2, 0, 5, 5, 2, 0, 6, 5, 2, 0, 7, 5, 2, 0, 8, 5, 2, 0, 9, 5, 2, 0, 10, 5,
- 2, 0, 11, 5, 2, 0, 12, 5, 2, 0, 92, 1, 2, 0, 13, 5, 2, 0, 14, 5, 2, 0, 15, 5, 2, 0, 16, 5, 4, 0, 17, 5,
- 4, 0, 69, 1, 4, 0, 18, 5, 2, 0, 19, 5, 2, 0, 20, 5, 2, 0, 21, 5, 2, 0,248, 1, 2, 0, 22, 5, 2, 0, 23, 5,
- 2, 0, 24, 5, 2, 0, 25, 5, 24, 0, 26, 5, 24, 0, 27, 5, 23, 0, 28, 5, 12, 0, 29, 5, 2, 0, 30, 5, 2, 0, 31, 5,
- 7, 0, 32, 5, 7, 0, 33, 5, 7, 0, 34, 5, 7, 0, 35, 5, 4, 0, 36, 5, 7, 0, 37, 5, 7, 0, 38, 5, 7, 0, 39, 5,
- 7, 0, 40, 5, 2, 0, 41, 5, 2, 0, 42, 5, 2, 0, 43, 5, 2, 0, 44, 5, 2, 0, 45, 5, 2, 0, 46, 5, 7, 0, 47, 5,
- 7, 0, 48, 5, 7, 0, 49, 5, 0, 0, 50, 5, 0, 0, 51, 5, 4, 0, 52, 5, 2, 0, 53, 5, 2, 0,226, 1, 0, 0, 54, 5,
- 7, 0, 55, 5, 7, 0, 56, 5, 0, 0, 57, 5, 0, 0, 58, 5, 0, 0, 59, 5, 0, 0, 60, 5, 4, 0, 61, 5, 2, 0, 62, 5,
- 2, 0, 63, 5, 7, 0, 64, 5, 7, 0, 65, 5, 2, 0, 66, 5, 2, 0, 67, 5, 7, 0, 68, 5, 2, 0, 69, 5, 2, 0, 70, 5,
- 4, 0, 71, 5, 2, 0, 72, 5, 2, 0, 73, 5, 2, 0, 74, 5, 2, 0, 75, 5, 7, 0, 76, 5, 7, 0, 70, 0, 42, 0, 77, 5,
- 0, 0, 78, 5,188, 0, 9, 0,188, 0, 0, 0,188, 0, 1, 0, 0, 0, 20, 0, 2, 0, 79, 5, 2, 0, 80, 5, 2, 0, 81, 5,
- 2, 0, 43, 0, 7, 0, 82, 5, 7, 0, 70, 0,189, 0, 7, 0, 2, 0,200, 2, 2, 0, 69, 1, 2, 0, 64, 3, 2, 0, 83, 5,
- 7, 0, 84, 5, 7, 0, 70, 0, 42, 0, 85, 5,190, 0, 5, 0, 7, 0, 86, 5, 0, 0, 17, 0, 0, 0, 43, 0, 0, 0, 70, 0,
- 0, 0,226, 1,191, 0, 28, 0, 7, 0,131, 4, 7, 0,132, 4, 2, 0, 69, 1, 2, 0, 19, 0, 2, 0, 87, 5, 2, 0,178, 4,
- 2, 0,134, 4, 2, 0,135, 4, 2, 0,136, 4, 2, 0,137, 4, 2, 0,138, 4, 2, 0,139, 4,190, 0, 88, 5, 2, 0,251, 4,
- 2, 0,252, 4, 2, 0,253, 4, 2, 0,254, 4, 2, 0,243, 0, 2, 0,255, 4, 2, 0, 89, 5, 2, 0, 0, 5,189, 0, 90, 5,
- 2, 0, 91, 5, 2, 0, 2, 5, 2, 0, 5, 5, 2, 0, 6, 5, 7, 0, 92, 5, 7, 0, 43, 0,192, 0, 6, 0,192, 0, 0, 0,
-192, 0, 1, 0, 4, 0,227, 3, 0, 0,239, 3, 4, 0, 19, 0, 32, 0, 93, 5,193, 0, 6, 0,194, 0, 94, 5, 4, 0, 95, 5,
- 4, 0, 96, 5, 9, 0, 97, 5, 0, 0, 98, 5, 4, 0, 90, 0,195, 0, 8, 0,193, 0, 99, 5, 2, 0, 19, 0, 2, 0, 37, 0,
- 2, 0,100, 5, 2, 0,101, 5, 2, 0,102, 5, 4, 0, 43, 0, 9, 0,103, 5,196, 0, 6, 0, 2, 0,106, 0, 2, 0,233, 3,
- 2, 0,104, 5, 2, 0,194, 2, 4, 0, 19, 0, 7, 0,211, 2,197, 0, 14, 0, 2, 0, 19, 0, 2, 0,105, 5, 2, 0,106, 5,
- 2, 0,107, 5,196, 0,108, 5, 9, 0,103, 5, 7, 0,109, 5, 7, 0, 57, 0, 4, 0,110, 5, 4, 0,111, 5, 4, 0,112, 5,
- 4, 0,113, 5, 46, 0,129, 0, 32, 0,161, 0,198, 0, 4, 0,198, 0, 0, 0,198, 0, 1, 0, 0, 0,114, 5, 7, 0,115, 5,
-199, 0, 6, 0,193, 0, 99, 5, 7, 0,116, 5, 4, 0, 90, 0, 0, 0,117, 5, 0, 0,118, 5, 0, 0,180, 2,200, 0, 7, 0,
-193, 0, 99, 5, 2, 0, 19, 0, 2, 0, 37, 0, 4, 0, 36, 0, 4, 0,119, 5, 86, 0,120, 5, 9, 0,103, 5,201, 0, 74, 0,
-200, 0,121, 5,200, 0,122, 5,199, 0, 83, 3, 7, 0,123, 5, 2, 0,124, 5, 2, 0,125, 5, 7, 0,126, 5, 7, 0,127, 5,
- 2, 0,233, 3, 2, 0,128, 5, 7, 0,129, 5, 7, 0,130, 5, 7, 0,131, 5, 2, 0,132, 5, 2, 0,110, 5, 2, 0,133, 5,
- 2, 0,134, 5, 2, 0,135, 5, 2, 0,136, 5, 7, 0,137, 5, 7, 0,138, 5, 7, 0,139, 5, 2, 0,140, 5, 2, 0,141, 5,
- 2, 0,142, 5, 2, 0,143, 5, 2, 0,144, 5, 2, 0,145, 5, 2, 0,146, 5,195, 0,147, 5,197, 0,148, 5, 7, 0,149, 5,
- 7, 0,150, 5, 7, 0,151, 5, 2, 0,152, 5, 2, 0,153, 5, 0, 0,154, 5, 0, 0,155, 5, 0, 0,156, 5, 0, 0,157, 5,
- 0, 0,158, 5, 0, 0,159, 5, 2, 0,160, 5, 7, 0,161, 5, 7, 0,162, 5, 7, 0,163, 5, 7, 0,164, 5, 7, 0,165, 5,
- 7, 0,166, 5, 7, 0,167, 5, 7, 0,168, 5, 7, 0,169, 5, 7, 0,170, 5, 2, 0,171, 5, 0, 0,172, 5, 0, 0,173, 5,
- 0, 0,174, 5, 0, 0,175, 5, 32, 0,176, 5, 0, 0,177, 5, 0, 0,178, 5, 0, 0,179, 5, 0, 0,180, 5, 0, 0,181, 5,
- 0, 0,182, 5, 0, 0,183, 5, 0, 0,184, 5, 2, 0,185, 5, 2, 0,186, 5, 2, 0,187, 5, 2, 0,188, 5, 2, 0,189, 5,
- 4, 0,190, 5, 4, 0,191, 5,202, 0, 8, 0, 4, 0,192, 5, 4, 0,193, 5, 4, 0,194, 5, 4, 0,195, 5, 4, 0,196, 5,
- 4, 0,197, 5, 4, 0, 54, 0, 4, 0,114, 2,203, 0, 3, 0, 7, 0,198, 5, 2, 0,199, 5, 2, 0, 19, 0,204, 0, 4, 0,
- 7, 0,200, 5, 4, 0, 19, 0, 4, 0,201, 5, 4, 0, 57, 0, 46, 0, 42, 0, 27, 0, 31, 0, 39, 0, 75, 0, 32, 0, 93, 5,
-179, 0,202, 5, 46, 0,203, 5, 47, 0,235, 0, 12, 0,204, 5,180, 0,205, 5, 32, 0,206, 5, 7, 0,207, 5, 7, 0,208, 5,
- 7, 0,209, 5, 7, 0,210, 5, 4, 0,116, 3, 4, 0,211, 5, 4, 0, 43, 0, 2, 0, 19, 0, 2, 0, 63, 1, 60, 0, 58, 1,
-205, 0,212, 5,201, 0,213, 5,206, 0,214, 5,187, 0,179, 0,185, 0,215, 5, 12, 0,100, 0, 12, 0,216, 5, 9, 0,217, 5,
- 9, 0,218, 5, 9, 0,219, 5,207, 0,220, 5, 2, 0,221, 5, 2, 0,222, 5, 2, 0,244, 0, 2, 0,223, 5, 4, 0,224, 5,
- 4, 0,225, 5, 12, 0,226, 5,190, 0, 88, 5,191, 0,227, 5,203, 0,228, 5,163, 0, 96, 3,204, 0,229, 5,208, 0, 11, 0,
-208, 0, 0, 0,208, 0, 1, 0, 47, 0,235, 0, 45, 0, 57, 1, 7, 0, 78, 2, 7, 0, 79, 2, 7, 0,106, 0, 7, 0,230, 5,
- 2, 0,231, 5, 2, 0, 19, 0, 7, 0, 70, 0,209, 0, 39, 0, 7, 0,232, 5, 7, 0,233, 5, 7, 0,234, 5, 7, 0,235, 5,
- 7, 0,236, 5, 7, 0,237, 5, 7, 0,238, 5, 7, 0,239, 5, 7, 0,240, 5, 7, 0, 76, 1, 7, 0,241, 5, 7, 0,242, 5,
- 7, 0,243, 5, 7, 0,244, 5, 7, 0,168, 0, 2, 0,245, 5, 2, 0,246, 5, 2, 0,247, 5, 2, 0, 37, 0, 2, 0,248, 5,
- 2, 0,249, 5, 2, 0,250, 5, 2, 0,231, 5, 7, 0,251, 5, 7, 0,252, 5, 71, 0,253, 5,163, 0, 96, 3,209, 0,254, 5,
-210, 0,255, 5,211, 0, 0, 6,212, 0, 1, 6,213, 0, 2, 6,214, 0, 3, 6, 7, 0, 4, 6, 2, 0, 5, 6, 2, 0, 6, 6,
- 7, 0, 7, 6, 7, 0, 8, 6, 7, 0, 9, 6,215, 0, 55, 0,216, 0, 0, 0,216, 0, 1, 0, 12, 0, 10, 6, 4, 0, 11, 6,
- 7, 0, 12, 6, 2, 0, 13, 6, 7, 0,240, 5, 7, 0, 76, 1, 7, 0, 43, 0, 4, 0, 14, 6, 2, 0,250, 5, 2, 0,231, 5,
- 32, 0, 93, 5, 32, 0, 15, 6, 12, 0, 16, 6,208, 0, 17, 6,215, 0,254, 5, 0, 0, 18, 6, 4, 0,116, 3, 4, 0,211, 5,
- 2, 0, 19, 6, 2, 0, 70, 0, 2, 0, 20, 6, 2, 0, 21, 6, 2, 0,226, 1, 2, 0, 19, 0, 2, 0, 17, 2, 2, 0, 22, 6,
- 7, 0,111, 0, 7, 0, 23, 6, 7, 0, 7, 6, 7, 0, 9, 6, 7, 0, 24, 6, 7, 0, 25, 6, 7, 0,168, 0, 7, 0,207, 5,
- 2, 0, 26, 6, 2, 0,248, 1, 2, 0, 27, 6, 2, 0, 28, 6, 2, 0, 29, 6, 2, 0, 30, 6, 2, 0, 31, 6, 2, 0, 32, 6,
- 2, 0, 33, 6, 2, 0,247, 5, 4, 0, 34, 6, 12, 0, 35, 6, 2, 0, 36, 6, 2, 0,128, 2, 2, 0, 37, 6, 0, 0, 38, 6,
- 0, 0, 39, 6, 9, 0, 40, 6,163, 0, 96, 3,217, 0, 24, 0, 24, 0, 36, 0, 24, 0, 64, 0, 23, 0, 41, 6, 23, 0, 42, 6,
- 23, 0, 43, 6, 7, 0, 44, 6, 7, 0, 45, 6, 7, 0, 46, 6, 7, 0, 47, 6, 2, 0, 48, 6, 2, 0, 49, 6, 2, 0, 50, 6,
- 2, 0, 51, 6, 2, 0, 52, 6, 2, 0, 19, 0, 2, 0, 53, 6, 2, 0, 54, 6, 2, 0, 55, 6, 2, 0, 56, 6, 2, 0, 57, 6,
- 2, 0, 21, 6, 7, 0, 58, 6, 4, 0, 59, 6, 4, 0, 60, 6,216, 0, 6, 0,216, 0, 0, 0,216, 0, 1, 0, 12, 0, 10, 6,
- 4, 0, 11, 6, 7, 0, 12, 6, 2, 0, 13, 6,218, 0, 8, 0,216, 0, 0, 0,216, 0, 1, 0, 12, 0, 10, 6, 4, 0, 11, 6,
- 7, 0, 12, 6, 2, 0, 13, 6,219, 0, 61, 6, 46, 0,129, 0,220, 0, 14, 0,216, 0, 0, 0,216, 0, 1, 0, 12, 0, 10, 6,
- 4, 0, 11, 6, 7, 0, 12, 6, 2, 0, 13, 6,217, 0, 62, 6,221, 0, 63, 6, 12, 0, 64, 6, 2, 0, 69, 1, 2, 0, 65, 6,
- 4, 0, 19, 0, 7, 0, 66, 6, 4, 0, 21, 6,222, 0, 20, 0,216, 0, 0, 0,216, 0, 1, 0, 12, 0, 10, 6, 4, 0, 11, 6,
- 7, 0, 12, 6, 2, 0, 13, 6,210, 0,255, 5,217, 0, 62, 6, 2, 0, 67, 6, 2, 0, 68, 6, 2, 0, 69, 6, 2, 0, 70, 6,
- 2, 0, 53, 6, 2, 0, 71, 6, 0, 0, 19, 0, 0, 0,178, 4, 9, 0, 54, 2, 4, 0, 72, 6, 4, 0, 73, 6, 27, 0, 74, 6,
-223, 0, 18, 0,216, 0, 0, 0,216, 0, 1, 0, 12, 0, 10, 6, 4, 0, 11, 6, 7, 0, 12, 6, 2, 0, 13, 6,217, 0, 62, 6,
- 7, 0, 78, 2, 7, 0, 79, 2, 2, 0, 67, 6, 2, 0, 75, 6, 2, 0, 76, 6, 2, 0, 77, 6, 4, 0, 19, 0, 7, 0, 78, 6,
- 4, 0,231, 5, 4, 0, 37, 0,163, 0, 96, 3,224, 0, 15, 0, 0, 0, 79, 6, 0, 0, 80, 6, 0, 0, 81, 6, 0, 0, 82, 6,
- 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 83, 6, 2, 0, 84, 6, 2, 0,169, 1, 2, 0, 85, 6, 4, 0, 86, 6, 4, 0, 87, 6,
- 2, 0, 88, 6, 2, 0, 37, 0, 0, 0, 89, 6,225, 0, 16, 0,216, 0, 0, 0,216, 0, 1, 0, 12, 0, 10, 6, 4, 0, 11, 6,
- 4, 0, 90, 6,224, 0, 91, 6,226, 0, 92, 6, 12, 0, 93, 6, 12, 0, 94, 6,227, 0, 95, 6,214, 0, 96, 6,228, 0, 97, 6,
- 2, 0, 98, 6, 2, 0, 99, 6, 2, 0,100, 6, 2, 0, 70, 0,229, 0, 17, 0,216, 0, 0, 0,216, 0, 1, 0, 12, 0, 10, 6,
- 4, 0, 11, 6, 7, 0, 12, 6, 2, 0, 13, 6,217, 0, 62, 6, 12, 0,101, 6,230, 0,102, 6, 0, 0,103, 6,231, 0,104, 6,
- 4, 0,105, 6, 4, 0,106, 6, 2, 0, 19, 0, 2, 0,107, 6, 2, 0,108, 6, 2, 0, 37, 0,232, 0, 32, 0,216, 0, 0, 0,
-216, 0, 1, 0, 12, 0, 10, 6, 4, 0, 11, 6, 7, 0, 12, 6, 2, 0, 13, 6, 47, 0,219, 2, 45, 0, 57, 1, 63, 0,109, 6,
- 2, 0,128, 0, 2, 0,110, 6, 2, 0, 70, 0, 2, 0,111, 6, 4, 0, 19, 0, 2, 0,112, 6, 2, 0,113, 6, 2, 0,114, 6,
- 2, 0,226, 1, 0, 0,115, 6, 0, 0,116, 6, 0, 0,117, 6, 0, 0, 21, 6, 7, 0,118, 6, 7, 0, 78, 2, 7, 0, 79, 2,
- 7, 0, 78, 6, 7, 0,248, 1, 7, 0,119, 6, 7, 0,120, 6,163, 0, 96, 3,233, 0,121, 6,234, 0,122, 6,235, 0, 11, 0,
-216, 0, 0, 0,216, 0, 1, 0, 12, 0, 10, 6, 4, 0, 11, 6, 7, 0, 12, 6, 2, 0, 13, 6, 2, 0, 65, 6, 2, 0, 19, 0,
- 4, 0, 37, 0,221, 0, 63, 6,217, 0, 62, 6,236, 0, 27, 0,216, 0, 0, 0,216, 0, 1, 0, 12, 0, 10, 6, 4, 0, 11, 6,
- 7, 0, 12, 6, 2, 0, 13, 6, 42, 0,123, 6, 4, 0,124, 6, 4, 0,125, 6, 2, 0, 90, 0, 2, 0,128, 0, 2, 0,126, 6,
- 0, 0,127, 6, 0, 0,128, 6, 4, 0,129, 6, 4, 0,130, 6, 4, 0,131, 6, 4, 0,132, 6, 2, 0,133, 6, 2, 0,134, 6,
- 7, 0,135, 6, 23, 0,136, 6, 23, 0,137, 6, 4, 0,138, 6, 4, 0,139, 6, 0, 0,140, 6, 0, 0,141, 6,237, 0, 10, 0,
- 27, 0, 31, 0, 9, 0,142, 6, 9, 0,143, 6, 9, 0,144, 6, 9, 0,145, 6, 9, 0,146, 6, 4, 0, 90, 0, 4, 0,147, 6,
- 0, 0,148, 6, 0, 0,149, 6,238, 0, 10, 0,216, 0, 0, 0,216, 0, 1, 0, 12, 0, 10, 6, 4, 0, 11, 6, 7, 0, 12, 6,
-237, 0,150, 6, 2, 0, 90, 0, 2, 0,128, 0, 4, 0, 43, 0, 9, 0,151, 6,239, 0, 9, 0,239, 0, 0, 0,239, 0, 1, 0,
- 4, 0, 17, 0, 4, 0, 19, 0, 7, 0,152, 6, 4, 0, 23, 0, 4, 0,235, 3, 4, 0,236, 3, 4, 0,124, 0,240, 0, 11, 0,
-216, 0, 0, 0,216, 0, 1, 0, 12, 0, 10, 6, 4, 0, 11, 6, 7, 0, 12, 6,217, 0, 62, 6, 12, 0,153, 6, 4, 0,154, 6,
- 4, 0, 37, 0, 4, 0, 19, 0, 4, 0,155, 6,241, 0, 25, 0,216, 0, 0, 0,216, 0, 1, 0, 12, 0, 10, 6, 4, 0, 11, 6,
- 7, 0, 12, 6, 2, 0, 13, 6,217, 0, 62, 6, 27, 0,156, 6, 27, 0, 81, 0, 2, 0, 19, 0, 2, 0,128, 0, 7, 0,157, 6,
- 9, 0,158, 6, 7, 0, 78, 2, 7, 0, 79, 2, 7, 0, 78, 6, 7, 0, 9, 6, 7, 0,159, 6, 7, 0,160, 6, 60, 0, 58, 1,
- 60, 0,161, 6, 4, 0,162, 6, 2, 0,163, 6, 2, 0, 37, 0,163, 0, 96, 3,242, 0, 10, 0,216, 0, 0, 0,216, 0, 1, 0,
- 12, 0, 10, 6, 4, 0, 11, 6, 7, 0, 12, 6, 2, 0, 13, 6, 2, 0, 19, 0, 2, 0,125, 3, 4, 0, 37, 0,163, 0, 96, 3,
-243, 0, 42, 0,216, 0, 0, 0,216, 0, 1, 0, 12, 0, 10, 6, 4, 0, 11, 6, 7, 0, 12, 6, 2, 0, 13, 6,217, 0, 62, 6,
-226, 0, 92, 6, 0, 0, 79, 6, 0, 0, 80, 6, 0, 0, 81, 6, 2, 0, 17, 0, 2, 0,164, 6, 2, 0, 19, 0, 2, 0, 83, 6,
- 9, 0,158, 6, 4, 0, 86, 6, 4, 0,165, 6, 4, 0,166, 6, 4, 0, 87, 6, 23, 0,167, 6, 23, 0,168, 6, 7, 0,169, 6,
- 7, 0,170, 6, 7, 0,171, 6, 7, 0,157, 6, 2, 0,172, 6, 2, 0,234, 0, 2, 0,169, 1, 2, 0, 85, 6, 2, 0, 37, 0,
- 2, 0, 43, 0, 2, 0,173, 6, 2, 0,174, 6, 9, 0,175, 6, 9, 0,176, 6, 9, 0,177, 6, 9, 0,178, 6, 9, 0,179, 6,
- 2, 0,180, 6, 0, 0,181, 6, 57, 0,182, 6,244, 0, 7, 0,244, 0, 0, 0,244, 0, 1, 0, 4, 0,183, 6, 4, 0, 23, 0,
- 0, 0, 84, 0, 4, 0,184, 6, 4, 0, 17, 0,245, 0, 16, 0,216, 0, 0, 0,216, 0, 1, 0, 12, 0, 10, 6, 4, 0, 11, 6,
- 7, 0, 12, 6, 2, 0, 13, 6, 4, 0, 17, 0, 4, 0,185, 6, 4, 0, 19, 0, 4, 0,126, 6, 12, 0,186, 6, 12, 0,187, 6,
- 0, 0,188, 6, 0, 0,189, 6, 4, 0,190, 6, 4, 0,191, 6,246, 0, 6, 0,216, 0, 0, 0,216, 0, 1, 0, 12, 0, 10, 6,
- 4, 0, 11, 6, 4, 0, 37, 0, 0, 0,192, 6,247, 0, 7, 0,247, 0, 0, 0,247, 0, 1, 0, 0, 0,193, 6, 2, 0,194, 6,
- 2, 0,195, 6, 2, 0,196, 6, 2, 0, 37, 0,248, 0, 12, 0, 2, 0,195, 6, 2, 0,197, 6, 2, 0,198, 6, 0, 0,180, 2,
- 2, 0,199, 6, 2, 0,200, 6, 2, 0,201, 6, 2, 0,202, 6, 2, 0,203, 6, 2, 0, 53, 6, 7, 0,204, 6, 7, 0,205, 6,
-249, 0, 18, 0,249, 0, 0, 0,249, 0, 1, 0, 0, 0,239, 3,248, 0,206, 6,248, 0,207, 6,248, 0,208, 6,248, 0,209, 6,
- 7, 0,210, 6, 2, 0,211, 6, 2, 0,212, 6, 2, 0,213, 6, 2, 0,214, 6, 2, 0,215, 6, 2, 0,216, 6, 2, 0,217, 6,
- 2, 0,218, 6, 2, 0,219, 6, 2, 0,220, 6,250, 0, 10, 0, 0, 0,221, 6, 0, 0,222, 6, 0, 0,223, 6, 0, 0,224, 6,
- 0, 0,225, 6, 0, 0,226, 6, 2, 0,227, 6, 2, 0,228, 6, 2, 0,229, 6, 2, 0,230, 6,251, 0, 8, 0, 0, 0,231, 6,
- 0, 0,232, 6, 0, 0,233, 6, 0, 0,234, 6, 0, 0,235, 6, 0, 0,236, 6, 7, 0,230, 5, 7, 0, 37, 0,252, 0, 18, 0,
-250, 0,237, 6,250, 0,238, 6,250, 0,239, 6,250, 0,240, 6,250, 0,241, 6,250, 0,242, 6,250, 0,243, 6,250, 0,244, 6,
-250, 0,245, 6,250, 0,246, 6,250, 0,247, 6,250, 0,248, 6,250, 0,249, 6,250, 0,250, 6,250, 0,251, 6,250, 0,252, 6,
-251, 0,253, 6, 0, 0,254, 6,253, 0, 92, 0, 0, 0,255, 6, 0, 0, 0, 7, 0, 0,225, 6, 0, 0, 1, 7, 0, 0, 2, 7,
- 0, 0, 3, 7, 0, 0, 4, 7, 0, 0, 5, 7, 0, 0, 6, 7, 0, 0, 7, 7, 0, 0, 8, 7, 0, 0, 9, 7, 0, 0, 10, 7,
- 0, 0, 11, 7, 0, 0, 12, 7, 0, 0, 13, 7, 0, 0, 14, 7, 0, 0, 15, 7, 0, 0, 16, 7, 0, 0, 17, 7, 0, 0, 18, 7,
- 0, 0, 19, 7, 0, 0, 20, 7, 0, 0, 21, 7, 0, 0, 22, 7, 0, 0, 23, 7, 0, 0, 24, 7, 0, 0, 25, 7, 0, 0, 26, 7,
- 0, 0, 27, 7, 0, 0, 28, 7, 0, 0, 29, 7, 0, 0, 30, 7, 0, 0, 31, 7, 0, 0, 32, 7, 0, 0, 33, 7, 0, 0, 34, 7,
- 0, 0, 35, 7, 0, 0, 36, 7, 0, 0, 37, 7, 0, 0, 38, 7, 0, 0, 39, 7, 0, 0, 40, 7, 0, 0, 41, 7, 0, 0, 42, 7,
- 0, 0, 43, 7, 0, 0, 44, 7, 0, 0, 45, 7, 0, 0, 46, 7, 0, 0, 47, 7, 0, 0, 48, 7, 0, 0, 49, 7, 0, 0, 50, 7,
- 0, 0, 51, 7, 0, 0, 52, 7, 0, 0, 53, 7, 0, 0, 54, 7, 0, 0, 55, 7, 0, 0, 56, 7, 0, 0, 57, 7, 0, 0, 58, 7,
- 0, 0, 59, 7, 0, 0, 60, 7, 0, 0, 61, 7, 0, 0, 62, 7, 0, 0, 63, 7, 0, 0, 64, 7, 0, 0, 65, 7, 0, 0, 66, 7,
- 0, 0, 67, 7, 0, 0, 68, 7, 0, 0, 69, 7, 0, 0, 70, 7, 0, 0, 71, 7, 0, 0, 72, 7, 0, 0, 73, 7, 0, 0, 74, 7,
- 0, 0, 75, 7, 0, 0, 76, 7, 0, 0, 77, 7, 0, 0, 78, 7, 0, 0, 79, 7, 0, 0, 80, 7, 0, 0, 81, 7, 0, 0, 82, 7,
- 0, 0, 83, 7, 0, 0, 84, 7, 0, 0, 85, 7, 0, 0, 86, 7, 0, 0, 87, 7, 0, 0, 88, 7, 0, 0, 89, 7,254, 0, 5, 0,
- 0, 0, 90, 7, 0, 0, 23, 7, 0, 0, 25, 7, 2, 0, 19, 0, 2, 0, 37, 0,255, 0, 25, 0,255, 0, 0, 0,255, 0, 1, 0,
- 0, 0, 20, 0,252, 0, 91, 7,253, 0, 92, 7,253, 0, 93, 7,253, 0, 94, 7,253, 0, 95, 7,253, 0, 96, 7,253, 0, 97, 7,
-253, 0, 98, 7,253, 0, 99, 7,253, 0,100, 7,253, 0,101, 7,253, 0,102, 7,253, 0,103, 7,253, 0,104, 7,253, 0,105, 7,
-253, 0,106, 7,253, 0,107, 7,253, 0,108, 7,253, 0,109, 7,254, 0,110, 7, 4, 0,111, 7, 4, 0, 37, 0, 0, 1, 3, 0,
- 0, 1, 0, 0, 0, 1, 1, 0, 0, 0,112, 7, 1, 1, 5, 0, 4, 0, 19, 0, 4, 0, 37, 0, 7, 0,127, 2, 7, 0,113, 7,
- 7, 0, 32, 2, 2, 1, 84, 0, 4, 0, 19, 0, 4, 0,114, 7, 4, 0,115, 7, 0, 0,116, 7, 0, 0,117, 7, 0, 0,118, 7,
- 0, 0,119, 7, 0, 0,120, 7, 0, 0,121, 7, 0, 0,122, 7, 0, 0,123, 7, 0, 0,124, 7, 0, 0,125, 7, 4, 0,126, 7,
- 2, 0,127, 7, 2, 0,128, 7, 2, 0,129, 7, 2, 0,130, 7, 4, 0,131, 7, 4, 0,132, 7, 4, 0,133, 7, 4, 0,134, 7,
- 2, 0,135, 7, 2, 0,136, 7, 4, 0,137, 7, 4, 0,138, 7, 4, 0,139, 7, 4, 0,140, 7, 4, 0,141, 7, 4, 0,186, 6,
- 4, 0,142, 7, 2, 0,143, 7, 2, 0,144, 7, 2, 0,145, 7, 2, 0,146, 7, 12, 0,147, 7, 12, 0,148, 7, 12, 0,149, 7,
- 12, 0,150, 7, 12, 0,151, 7, 0, 0,152, 7, 2, 0,153, 7, 2, 0,154, 7, 2, 0,155, 7, 2, 0,156, 7, 2, 0,157, 7,
- 2, 0,158, 7, 2, 0,159, 7, 2, 0,160, 7, 1, 1,161, 7, 2, 0,162, 7, 2, 0,163, 7, 2, 0,164, 7, 2, 0,165, 7,
- 2, 0,166, 7, 2, 0,167, 7, 2, 0,168, 7, 2, 0,169, 7, 4, 0,170, 7, 4, 0,171, 7, 2, 0,172, 7, 2, 0,173, 7,
- 2, 0,174, 7, 2, 0,175, 7, 2, 0,176, 7, 2, 0,177, 7, 2, 0,178, 7, 2, 0,179, 7, 2, 0,180, 7, 2, 0,181, 7,
- 2, 0,182, 7, 2, 0,183, 7, 2, 0,184, 7, 2, 0,185, 7, 2, 0,186, 7, 2, 0,187, 7, 2, 0,188, 7, 2, 0,178, 4,
- 0, 0,189, 7, 0, 0,190, 7, 7, 0,191, 7, 2, 0,152, 5, 2, 0,153, 5, 55, 0,192, 7,219, 0, 21, 0, 27, 0, 31, 0,
- 12, 0,193, 7, 12, 0,194, 7, 12, 0,195, 7, 12, 0, 10, 6, 46, 0,129, 0, 46, 0,196, 7, 2, 0,197, 7, 2, 0,198, 7,
- 2, 0,199, 7, 2, 0,200, 7, 2, 0,201, 7, 2, 0,202, 7, 2, 0,203, 7, 2, 0,204, 7, 2, 0,205, 7, 2, 0,206, 7,
- 4, 0, 70, 0,214, 0,207, 7, 9, 0,208, 7, 2, 0,209, 7, 3, 1, 5, 0, 3, 1, 0, 0, 3, 1, 1, 0, 3, 1,210, 7,
- 13, 0,211, 7, 4, 0, 19, 0, 4, 1, 7, 0, 4, 1, 0, 0, 4, 1, 1, 0, 3, 1,212, 7, 3, 1,213, 7, 2, 0, 27, 5,
- 2, 0, 19, 0, 4, 0, 37, 0, 5, 1, 25, 0, 5, 1, 0, 0, 5, 1, 1, 0, 6, 1,214, 7, 7, 1, 97, 6, 0, 0,215, 7,
- 0, 0,216, 7, 0, 0,217, 7, 2, 0,218, 7, 2, 0,219, 7, 2, 0,220, 7, 2, 0,221, 7, 2, 0,222, 7, 2, 0, 37, 0,
- 2, 0, 19, 0, 2, 0,223, 7, 2, 0,224, 7, 2, 0,225, 7, 4, 0,226, 7, 5, 1,227, 7, 9, 0,228, 7, 4, 0,229, 7,
- 4, 0,230, 7, 4, 0,231, 7, 4, 0,232, 7, 0, 0,233, 7, 8, 1, 22, 0, 8, 1, 0, 0, 8, 1, 1, 0, 3, 1,212, 7,
- 3, 1,213, 7, 3, 1,234, 7, 3, 1,235, 7,219, 0,236, 7, 23, 0, 52, 0, 0, 0, 11, 6, 0, 0,237, 7, 2, 0, 54, 6,
- 2, 0, 55, 6, 2, 0,238, 7, 2, 0, 37, 0, 2, 0,200, 7, 2, 0,184, 6, 2, 0, 19, 0, 9, 1,214, 7, 12, 0,239, 7,
- 12, 0, 10, 6, 12, 0,240, 7, 12, 0,241, 7, 10, 1, 24, 0, 10, 1, 0, 0, 10, 1, 1, 0,217, 0, 62, 6, 23, 0,242, 7,
- 23, 0,243, 7, 2, 0, 54, 6, 2, 0, 55, 6, 2, 0,244, 7, 2, 0,245, 7, 2, 0,246, 7, 2, 0, 19, 0, 7, 0, 74, 2,
- 2, 0,220, 7, 2, 0,221, 7, 2, 0,199, 7, 2, 0,247, 7, 2, 0,204, 7, 2, 0,178, 4, 11, 1,214, 7, 12, 0,248, 7,
- 12, 0,249, 7, 12, 0,240, 7, 0, 0,250, 7, 9, 0,251, 7, 12, 1, 12, 0, 0, 0,252, 7, 2, 0,253, 7, 2, 0,254, 7,
- 2, 0,255, 7, 2, 0, 0, 8, 2, 0, 14, 5, 2, 0, 9, 5,219, 0, 1, 8, 46, 0, 2, 8, 4, 0, 3, 8, 4, 0, 4, 8,
- 0, 0, 5, 8, 13, 1, 1, 0, 0, 0, 6, 8, 14, 1, 8, 0, 57, 0, 7, 8, 57, 0, 8, 8, 14, 1, 9, 8, 14, 1, 10, 8,
- 14, 1, 11, 8, 2, 0,124, 0, 2, 0, 19, 0, 4, 0, 12, 8, 15, 1, 4, 0, 4, 0,124, 6, 4, 0, 13, 8, 4, 0,129, 6,
- 4, 0, 14, 8, 16, 1, 2, 0, 4, 0, 15, 8, 4, 0, 16, 8, 17, 1, 5, 0, 7, 0, 17, 8, 7, 0, 18, 8, 7, 0, 19, 8,
- 4, 0, 19, 0, 4, 0, 37, 0, 18, 1, 6, 0, 0, 0, 20, 8, 0, 0, 81, 6, 49, 0,132, 0, 2, 0,106, 0, 2, 0, 13, 5,
- 4, 0, 37, 0, 19, 1, 21, 0, 19, 1, 0, 0, 19, 1, 1, 0, 4, 0, 57, 0, 4, 0, 23, 0, 4, 0, 28, 0, 4, 0, 21, 8,
- 4, 0, 22, 8, 4, 0, 23, 8, 13, 1, 24, 8, 0, 0, 20, 8, 4, 0, 25, 8, 4, 0, 26, 8, 18, 1, 90, 3, 15, 1, 27, 8,
- 16, 1, 28, 8, 17, 1, 29, 8, 14, 1, 30, 8, 14, 1, 31, 8, 14, 1, 32, 8, 57, 0, 33, 8, 57, 0, 34, 8, 20, 1, 12, 0,
- 0, 0,250, 1, 9, 0,220, 0, 0, 0,221, 0, 4, 0,224, 0, 4, 0,232, 0, 9, 0,225, 0, 7, 0,227, 0, 7, 0,228, 0,
- 9, 0, 35, 8, 9, 0, 36, 8, 9, 0,229, 0, 9, 0,231, 0, 21, 1, 46, 0, 21, 1, 0, 0, 21, 1, 1, 0, 9, 0, 37, 8,
- 9, 0, 26, 0, 0, 0, 27, 0, 4, 0, 19, 0, 4, 0, 17, 0, 4, 0, 23, 0, 4, 0, 88, 0, 4, 0, 38, 8, 4, 0, 39, 8,
- 4, 0, 22, 8, 4, 0, 23, 8, 4, 0, 40, 8, 4, 0,243, 0, 4, 0, 41, 8, 4, 0, 42, 8, 7, 0, 43, 8, 7, 0, 44, 8,
- 4, 0,121, 0, 4, 0, 45, 8, 19, 1, 46, 8, 36, 0, 80, 0, 46, 0,129, 0, 32, 0, 47, 8, 49, 0,132, 0, 7, 0, 48, 8,
- 7, 0, 49, 8, 20, 1, 59, 1, 21, 1, 50, 8, 21, 1, 51, 8, 21, 1, 52, 8, 12, 0, 53, 8, 22, 1, 54, 8, 9, 0, 55, 8,
- 7, 0,248, 3, 7, 0, 56, 8, 7, 0, 57, 8, 4, 0, 58, 8, 4, 0, 59, 8, 7, 0, 60, 8, 9, 0, 61, 8, 4, 0, 62, 8,
- 4, 0, 63, 8, 4, 0, 64, 8, 7, 0, 65, 8, 23, 1, 4, 0, 23, 1, 0, 0, 23, 1, 1, 0, 12, 0, 66, 8, 21, 1, 67, 8,
-205, 0, 11, 0, 12, 0, 68, 8, 12, 0, 53, 8, 12, 0, 69, 8, 21, 1, 70, 8, 0, 0, 71, 8, 0, 0, 72, 8, 4, 0, 73, 8,
- 4, 0, 74, 8, 4, 0, 75, 8, 4, 0, 37, 0, 24, 0, 76, 8, 24, 1, 4, 0, 7, 0, 77, 8, 7, 0, 64, 3, 2, 0, 78, 8,
- 2, 0, 79, 8, 25, 1, 6, 0, 7, 0, 80, 8, 7, 0, 81, 8, 7, 0, 82, 8, 7, 0, 83, 8, 4, 0, 84, 8, 4, 0, 85, 8,
- 26, 1, 13, 0, 7, 0, 86, 8, 7, 0, 87, 8, 7, 0, 88, 8, 7, 0, 89, 8, 7, 0, 90, 8, 7, 0, 91, 8, 7, 0, 92, 8,
- 7, 0, 93, 8, 7, 0, 94, 8, 7, 0, 95, 8, 4, 0,225, 2, 4, 0, 96, 8, 4, 0, 97, 8, 27, 1, 2, 0, 7, 0, 86, 5,
- 7, 0, 37, 0, 28, 1, 5, 0, 7, 0, 98, 8, 7, 0, 99, 8, 4, 0, 90, 0, 4, 0,181, 2, 4, 0,100, 8, 29, 1, 6, 0,
- 29, 1, 0, 0, 29, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,101, 8, 2, 0, 57, 0, 30, 1, 8, 0, 30, 1, 0, 0,
- 30, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,101, 8, 2, 0, 57, 0, 7, 0, 23, 0, 7, 0,121, 0, 31, 1, 45, 0,
- 31, 1, 0, 0, 31, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,101, 8, 2, 0,239, 0, 2, 0, 34, 4, 2, 0,102, 8,
- 7, 0,103, 8, 7, 0, 89, 0, 7, 0,238, 2, 4, 0,104, 8, 4, 0, 82, 0, 4, 0,183, 2, 7, 0,105, 8, 7, 0,106, 8,
- 7, 0,107, 8, 7, 0,108, 8, 7, 0,109, 8, 7, 0,110, 8, 7, 0,235, 2, 7, 0, 56, 1, 7, 0,111, 8, 7, 0,112, 8,
- 7, 0, 37, 0, 7, 0,113, 8, 7, 0,114, 8, 7, 0,115, 8, 2, 0,116, 8, 2, 0,117, 8, 2, 0,118, 8, 2, 0,119, 8,
- 2, 0,120, 8, 2, 0,121, 8, 2, 0,122, 8, 2, 0,123, 8, 2, 0, 17, 2, 2, 0,124, 8, 2, 0, 14, 2, 2, 0,125, 8,
- 0, 0,126, 8, 0, 0,127, 8, 7, 0,237, 0, 32, 1,128, 8, 67, 0,229, 1, 33, 1, 16, 0, 33, 1, 0, 0, 33, 1, 1, 0,
- 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,101, 8, 2, 0,239, 0, 7, 0,230, 2, 7, 0,231, 2, 7, 0,232, 2, 7, 0, 63, 2,
- 7, 0,233, 2, 7, 0,234, 2, 7, 0,129, 8, 7, 0,235, 2, 7, 0,237, 2, 7, 0,238, 2,231, 0, 5, 0, 2, 0, 17, 0,
- 2, 0, 12, 8, 2, 0, 19, 0, 2, 0,130, 8, 27, 0,156, 6,230, 0, 3, 0, 4, 0, 69, 0, 4, 0,131, 8,231, 0, 2, 0,
- 34, 1, 7, 0, 34, 1, 0, 0, 34, 1, 1, 0, 0, 0, 20, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 22, 0, 9, 0,132, 8,
- 35, 1, 5, 0, 0, 0, 20, 0, 7, 0, 76, 1, 7, 0,133, 8, 4, 0,134, 8, 4, 0, 37, 0, 36, 1, 4, 0, 2, 0, 17, 0,
- 2, 0, 19, 0, 2, 0, 43, 0, 2, 0, 70, 0, 37, 1, 4, 0, 0, 0, 20, 0, 66, 0,135, 8, 7, 0, 76, 1, 7, 0, 37, 0,
- 38, 1, 6, 0, 2, 0,136, 8, 2, 0,137, 8, 2, 0, 17, 0, 2, 0,138, 8, 0, 0,139, 8, 0, 0,140, 8, 39, 1, 5, 0,
- 4, 0, 17, 0, 4, 0, 37, 0, 0, 0, 20, 0, 0, 0,141, 8, 0, 0,142, 8, 40, 1, 3, 0, 4, 0, 17, 0, 4, 0, 37, 0,
- 0, 0, 20, 0, 41, 1, 4, 0, 2, 0,143, 8, 2, 0,144, 8, 2, 0, 19, 0, 2, 0, 37, 0, 42, 1, 6, 0, 0, 0, 20, 0,
- 0, 0,145, 8, 2, 0,146, 8, 2, 0,235, 2, 2, 0, 69, 1, 2, 0, 70, 0, 43, 1, 5, 0, 0, 0, 20, 0, 7, 0, 64, 3,
- 7, 0,128, 4, 2, 0, 19, 0, 2, 0,195, 2, 44, 1, 3, 0, 0, 0, 20, 0, 4, 0,183, 2, 4, 0,143, 8, 45, 1, 7, 0,
- 0, 0, 20, 0, 7, 0,128, 4, 0, 0,147, 8, 0, 0,148, 8, 2, 0, 69, 1, 2, 0, 43, 0, 4, 0,149, 8, 46, 1, 4, 0,
- 0, 0,150, 8, 0, 0,151, 8, 4, 0, 17, 0, 7, 0,199, 2, 47, 1, 3, 0, 32, 0,152, 8, 0, 0,153, 8, 0, 0,154, 8,
- 48, 1, 18, 0, 48, 1, 0, 0, 48, 1, 1, 0, 2, 0, 17, 0, 2, 0,155, 8, 2, 0, 19, 0, 2, 0,156, 8, 2, 0,157, 8,
- 2, 0,158, 8, 2, 0, 43, 0, 2, 0, 70, 0, 0, 0, 20, 0, 9, 0, 2, 0, 49, 1,159, 8, 32, 0, 45, 0, 2, 0,104, 5,
- 2, 0, 56, 8, 2, 0,160, 8, 2, 0, 37, 0, 50, 1, 11, 0, 0, 0, 20, 0, 0, 0, 17, 0, 0, 0,161, 8, 2, 0, 19, 0,
- 2, 0,195, 2, 2, 0,162, 8, 4, 0,163, 8, 4, 0,164, 8, 4, 0,165, 8, 4, 0,166, 8, 4, 0,167, 8, 51, 1, 1, 0,
- 0, 0,168, 8, 52, 1, 4, 0, 42, 0,123, 6, 0, 0,112, 7, 4, 0, 69, 1, 4, 0, 19, 0, 49, 1, 18, 0, 49, 1, 0, 0,
- 49, 1, 1, 0, 49, 1,169, 8, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,170, 8, 2, 0,158, 8, 2, 0,155, 8, 2, 0,171, 8,
- 2, 0, 70, 0, 2, 0,226, 1, 0, 0, 20, 0, 9, 0, 2, 0, 53, 1,159, 8, 48, 1,172, 8, 2, 0, 15, 0, 2, 0,173, 8,
- 4, 0,174, 8, 54, 1, 3, 0, 4, 0,209, 2, 4, 0, 37, 0, 32, 0, 45, 0, 55, 1, 12, 0,161, 0,175, 8, 2, 0, 17, 0,
- 2, 0, 19, 0, 4, 0,103, 8, 4, 0, 89, 0, 0, 0, 20, 0, 0, 0,176, 8, 2, 0,177, 8, 2, 0,178, 8, 2, 0,179, 8,
- 2, 0,180, 8, 7, 0,181, 8, 56, 1, 13, 0, 2, 0, 19, 0, 2, 0,182, 8, 4, 0, 43, 0, 4, 0, 70, 0, 2, 0,183, 8,
- 7, 0,248, 3, 7, 0,184, 8, 22, 1, 54, 8, 57, 1,185, 8, 2, 0, 17, 0, 2, 0,248, 1, 2, 0,224, 5, 2, 0,186, 8,
- 58, 1, 11, 0, 4, 0,209, 2, 2, 0, 17, 0, 2, 0, 19, 0, 32, 0, 45, 0, 80, 0,187, 8, 0, 0, 20, 0, 7, 0,188, 8,
- 7, 0,189, 8, 7, 0,133, 3, 2, 0,190, 8, 2, 0,191, 8, 59, 1, 5, 0, 2, 0, 17, 0, 2, 0, 43, 0, 4, 0, 37, 0,
- 46, 0,129, 0, 32, 0, 93, 5, 60, 1, 5, 0, 4, 0, 37, 0, 4, 0, 17, 0, 0, 0, 20, 0, 0, 0,141, 8, 32, 0, 45, 0,
- 61, 1, 13, 0, 2, 0, 19, 0, 2, 0, 17, 0, 2, 0,155, 8, 2, 0,134, 3, 7, 0,192, 8, 7, 0,193, 8, 7, 0,178, 4,
- 7, 0,146, 3, 7, 0,105, 3, 7, 0,108, 3, 7, 0,194, 8, 7, 0,195, 8, 32, 0,196, 8, 62, 1, 10, 0, 2, 0, 19, 0,
- 2, 0, 17, 0, 4, 0,103, 8, 4, 0, 89, 0, 0, 0, 20, 0, 0, 0,176, 8, 2, 0, 43, 0, 2, 0, 70, 0, 2, 0,226, 1,
- 2, 0,248, 1, 63, 1, 8, 0, 32, 0, 45, 0, 7, 0,232, 2, 7, 0,197, 8, 7, 0,198, 8, 7, 0, 37, 0, 2, 0, 43, 0,
- 2, 0,195, 2, 7, 0, 70, 0, 64, 1, 12, 0, 2, 0, 17, 0, 2, 0, 69, 1, 2, 0, 19, 0, 2, 0,235, 2, 2, 0,209, 2,
- 2, 0,199, 8, 4, 0, 37, 0, 7, 0,200, 8, 7, 0,201, 8, 7, 0,202, 8, 7, 0,203, 8, 0, 0,204, 8, 65, 1, 9, 0,
- 2, 0, 19, 0, 2, 0, 17, 0, 4, 0,103, 8, 4, 0, 89, 0, 0, 0, 20, 0, 2, 0,178, 4, 2, 0, 64, 0, 2, 0,205, 8,
- 2, 0,206, 8, 66, 1, 7, 0, 4, 0,183, 2, 4, 0,207, 8, 4, 0,208, 8, 4, 0,209, 8, 7, 0,210, 8, 7, 0,211, 8,
- 0, 0,147, 8, 67, 1, 7, 0, 0, 0,212, 8, 32, 0,213, 8, 0, 0,153, 8, 2, 0,214, 8, 2, 0, 43, 0, 4, 0, 70, 0,
- 0, 0,154, 8, 68, 1, 6, 0, 2, 0, 19, 0, 2, 0, 17, 0, 4, 0,103, 8, 4, 0, 89, 0, 0, 0,215, 8, 0, 0,216, 8,
- 69, 1, 1, 0, 4, 0, 19, 0, 70, 1, 6, 0, 0, 0, 92, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0,217, 8, 7, 0,218, 8,
- 42, 0,123, 6, 71, 1, 4, 0, 0, 0, 59, 2, 2, 0, 19, 0, 4, 0, 17, 0, 32, 0, 45, 0, 72, 1, 2, 0, 4, 0, 17, 0,
- 4, 0, 43, 6, 73, 1, 6, 0, 0, 0,150, 8, 0, 0,151, 8, 4, 0, 17, 0, 7, 0, 25, 2, 32, 0, 43, 3, 32, 0,219, 8,
- 53, 1, 10, 0, 53, 1, 0, 0, 53, 1, 1, 0, 53, 1,169, 8, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,155, 8, 2, 0,220, 8,
- 0, 0, 20, 0, 9, 0, 2, 0, 32, 0, 45, 0, 74, 1, 10, 0, 7, 0,133, 3, 7, 0,221, 8, 7, 0,222, 8, 7, 0,223, 8,
- 7, 0,224, 8, 4, 0, 19, 0, 7, 0,199, 8, 7, 0,225, 8, 7, 0,226, 8, 7, 0, 37, 0, 57, 1, 8, 0, 7, 0,227, 8,
- 7, 0,228, 8, 7, 0,229, 8, 7, 0,230, 8, 7, 0,231, 8, 7, 0,232, 8, 7, 0,233, 8, 7, 0,234, 8, 22, 1, 16, 0,
- 27, 0, 31, 0, 0, 0, 34, 0, 43, 0,147, 0, 9, 0,220, 0, 43, 0,235, 8, 36, 0, 80, 0, 7, 0,248, 3, 7, 0,236, 8,
- 7, 0,184, 8, 7, 0,227, 8, 7, 0,228, 8, 7, 0,237, 8, 4, 0, 90, 0, 4, 0, 37, 0, 9, 0,238, 8, 9, 0,239, 8,
- 75, 1, 15, 0,216, 0, 0, 0,216, 0, 1, 0, 12, 0, 10, 6, 4, 0, 11, 6, 7, 0, 12, 6, 8, 1,240, 8,217, 0, 62, 6,
- 22, 1, 54, 8, 2, 0, 69, 1, 2, 0,182, 8, 2, 0, 78, 2, 2, 0, 79, 2, 2, 0, 19, 0, 2, 0,113, 6, 4, 0, 70, 0,
- 76, 1, 6, 0, 76, 1, 0, 0, 76, 1, 1, 0, 32, 0, 45, 0, 9, 0,241, 8, 4, 0,244, 0, 4, 0, 37, 0, 67, 0, 4, 0,
- 27, 0, 31, 0, 12, 0,242, 8, 4, 0,126, 0, 7, 0,243, 8, 77, 1, 27, 0, 77, 1, 0, 0, 77, 1, 1, 0, 26, 0,244, 8,
- 77, 1, 38, 0, 12, 0,245, 8, 0, 0, 20, 0, 7, 0,246, 8, 7, 0,247, 8, 7, 0,248, 8, 7, 0,249, 8, 4, 0, 19, 0,
- 7, 0,250, 8, 7, 0,251, 8, 7, 0,252, 8, 7, 0, 76, 1, 7, 0, 25, 2, 7, 0,253, 8, 7, 0,181, 2, 7, 0,254, 8,
- 7, 0,255, 8, 7, 0, 0, 9, 7, 0, 1, 9, 7, 0, 2, 9, 7, 0,169, 0, 4, 0,126, 0, 2, 0,133, 5, 2, 0,178, 4,
- 78, 1, 25, 0, 27, 0, 31, 0, 39, 0, 75, 0, 12, 0, 3, 9, 12, 0, 4, 9, 12, 0, 5, 9, 77, 1, 6, 9, 9, 0, 7, 9,
- 9, 0, 8, 9, 4, 0, 19, 0, 4, 0, 19, 6, 2, 0,239, 2, 2, 0, 72, 6, 4, 0, 37, 0, 4, 0,126, 0, 4, 0, 9, 9,
- 2, 0, 10, 9, 2, 0, 11, 9, 2, 0, 12, 9, 2, 0, 13, 9, 4, 0, 14, 9, 4, 0, 15, 9, 4, 0, 16, 9, 4, 0, 17, 9,
- 4, 0, 18, 9, 4, 0, 19, 9, 79, 1, 2, 0, 7, 0,141, 2, 4, 0, 19, 0,165, 0, 5, 0, 79, 1, 20, 9, 4, 0,181, 2,
- 4, 0, 21, 9, 4, 0, 22, 9, 4, 0, 19, 0,164, 0, 16, 0, 4, 0, 23, 9, 4, 0, 24, 9, 4, 0, 25, 9, 4, 0, 26, 9,
- 2, 0, 27, 9, 2, 0, 28, 9, 2, 0, 29, 9, 2, 0,244, 0, 2, 0, 30, 9, 2, 0, 31, 9, 2, 0, 32, 9, 2, 0, 33, 9,
- 4, 0, 34, 9, 4, 0, 35, 9, 4, 0, 36, 9, 4, 0, 37, 9, 80, 1, 44, 0, 80, 1, 0, 0, 80, 1, 1, 0, 26, 0,244, 8,
- 12, 0,160, 3, 0, 0, 20, 0, 2, 0, 19, 0, 2, 0, 38, 9, 2, 0, 39, 9, 2, 0, 40, 9, 2, 0,119, 3, 2, 0, 41, 9,
- 4, 0, 61, 2, 4, 0, 16, 9, 4, 0, 17, 9, 77, 1, 42, 9, 80, 1, 38, 0, 80, 1, 43, 9, 12, 0, 44, 9, 9, 0, 45, 9,
- 9, 0, 46, 9, 9, 0, 47, 9, 7, 0, 64, 1, 7, 0,169, 0, 7, 0, 48, 9, 7, 0, 4, 2, 7, 0,110, 3, 7, 0,112, 3,
- 2, 0,142, 3, 2, 0, 37, 0, 7, 0, 49, 9, 7, 0, 50, 9, 7, 0,115, 3, 7, 0, 51, 9, 7, 0, 52, 9, 7, 0, 53, 9,
- 7, 0, 54, 9, 7, 0, 55, 9, 7, 0, 56, 9, 7, 0, 57, 9, 7, 0, 58, 9, 7, 0, 54, 2,165, 0, 98, 3, 32, 0, 59, 9,
- 80, 1, 60, 9,162, 0, 14, 0, 12, 0, 61, 9, 81, 1, 62, 9, 2, 0, 19, 0, 2, 0, 63, 9, 7, 0, 90, 2, 7, 0, 64, 9,
- 7, 0, 65, 9, 12, 0, 66, 9, 4, 0, 67, 9, 4, 0, 68, 9, 9, 0, 69, 9, 9, 0, 70, 9,164, 0, 97, 3, 0, 0, 71, 9,
- 82, 1, 1, 0, 4, 0, 68, 9, 83, 1, 12, 0, 4, 0, 68, 9, 7, 0,167, 8, 2, 0, 72, 9, 2, 0, 73, 9, 7, 0, 74, 9,
- 7, 0, 75, 9, 2, 0, 76, 9, 2, 0, 19, 0, 7, 0, 77, 9, 7, 0, 78, 9, 7, 0, 79, 9, 7, 0, 80, 9, 84, 1, 7, 0,
- 84, 1, 0, 0, 84, 1, 1, 0, 12, 0, 81, 9, 4, 0, 19, 0, 4, 0, 82, 9, 0, 0,239, 3,254, 0, 83, 9,161, 0, 7, 0,
- 27, 0, 31, 0, 12, 0, 84, 9, 12, 0, 61, 9, 12, 0, 85, 9, 12, 0,100, 0, 4, 0, 19, 0, 4, 0, 86, 9,221, 0, 5, 0,
- 27, 0, 87, 9, 12, 0, 61, 9, 67, 0, 88, 9, 4, 0, 89, 9, 4, 0, 19, 0, 85, 1, 13, 0,216, 0, 0, 0,216, 0, 1, 0,
- 12, 0, 10, 6, 4, 0, 11, 6, 7, 0, 12, 6, 2, 0, 13, 6,217, 0, 62, 6,161, 0, 93, 3,221, 0, 90, 9, 0, 0, 69, 1,
- 0, 0, 65, 6, 2, 0, 19, 0, 7, 0, 91, 9, 86, 1, 8, 0, 86, 1, 0, 0, 86, 1, 1, 0, 84, 1, 92, 9, 36, 0, 80, 0,
- 12, 0, 99, 3, 4, 0, 19, 0, 0, 0, 20, 0, 4, 0, 93, 9, 87, 1, 5, 0, 87, 1, 0, 0, 87, 1, 1, 0, 36, 0, 80, 0,
- 2, 0, 19, 0, 0, 0, 94, 9, 88, 1, 14, 0, 88, 1, 0, 0, 88, 1, 1, 0, 9, 0, 2, 0, 2, 0, 17, 0, 2, 0, 19, 0,
- 0, 0, 95, 9, 0, 0, 96, 9, 0, 0, 94, 9, 7, 0, 97, 9, 7, 0, 98, 9, 4, 0, 37, 0, 36, 0, 80, 0, 7, 0, 99, 9,
- 7, 0,100, 9, 89, 1, 9, 0, 89, 1, 0, 0, 89, 1, 1, 0, 32, 0,101, 9, 0, 0,242, 2, 7, 0,102, 9, 2, 0,103, 9,
- 2, 0, 19, 0, 2, 0, 17, 0, 2, 0,104, 9, 90, 1, 7, 0, 42, 0,123, 6, 26, 0,244, 8, 4, 0, 19, 0, 4, 0,105, 9,
- 12, 0,106, 9, 32, 0,101, 9, 0, 0,242, 2, 91, 1, 15, 0, 32, 0,101, 9, 2, 0,107, 9, 2, 0, 19, 0, 2, 0,108, 9,
- 2, 0,109, 9, 0, 0,242, 2, 32, 0,110, 9, 0, 0,111, 9, 7, 0,112, 9, 7, 0, 25, 2, 7, 0,113, 9, 7, 0,114, 9,
- 2, 0, 17, 0, 2, 0, 69, 1, 7, 0, 76, 1, 92, 1, 6, 0, 32, 0,101, 9, 7, 0, 20, 9, 2, 0,115, 9, 2, 0,116, 9,
- 2, 0, 19, 0, 2, 0,117, 9, 93, 1, 6, 0, 32, 0,101, 9, 4, 0,118, 9, 4, 0,119, 9, 4, 0, 90, 0, 4, 0, 37, 0,
- 0, 0,242, 2, 94, 1, 4, 0, 32, 0,101, 9, 4, 0, 19, 0, 4, 0,118, 9, 0, 0,242, 2, 95, 1, 4, 0, 32, 0,101, 9,
- 4, 0, 19, 0, 4, 0,118, 9, 0, 0,242, 2, 96, 1, 4, 0, 32, 0,101, 9, 4, 0, 19, 0, 4, 0,118, 9, 0, 0,242, 2,
- 97, 1, 2, 0, 4, 0, 19, 0, 7, 0,248, 3, 98, 1, 2, 0, 32, 0,101, 9, 0, 0,242, 2, 99, 1, 10, 0, 32, 0,101, 9,
- 4, 0,120, 9, 7, 0,120, 0, 4, 0, 19, 0, 2, 0,116, 6, 2, 0,121, 9, 2, 0, 43, 0, 2, 0, 70, 0, 7, 0,122, 9,
- 0, 0,242, 2,100, 1, 10, 0, 32, 0,101, 9, 2, 0, 17, 0, 2, 0, 42, 4, 4, 0, 88, 0, 4, 0, 89, 0, 7, 0,197, 8,
- 7, 0,198, 8, 4, 0, 37, 0,161, 0,175, 8, 0, 0,242, 2,101, 1, 4, 0, 32, 0,101, 9, 4, 0,120, 3, 4, 0,123, 9,
- 0, 0,242, 2,102, 1, 4, 0, 32, 0,101, 9, 4, 0,120, 3, 4, 0, 37, 0, 0, 0,242, 2,103, 1, 6, 0, 32, 0,101, 9,
- 7, 0,120, 0, 7, 0, 55, 3, 4, 0,124, 9, 2, 0,120, 3, 2, 0,121, 3,104, 1, 6, 0, 32, 0,101, 9, 4, 0,125, 9,
- 4, 0,126, 9, 7, 0,127, 9, 7, 0,128, 9, 0, 0,242, 2,105, 1, 16, 0, 32, 0,101, 9, 32, 0, 43, 9, 4, 0, 17, 0,
- 7, 0,129, 9, 7, 0,130, 9, 7, 0,131, 9, 7, 0,132, 9, 7, 0,133, 9, 7, 0,134, 9, 7, 0,135, 9, 7, 0,136, 9,
- 7, 0,137, 9, 2, 0, 19, 0, 2, 0, 37, 0, 2, 0, 43, 0, 2, 0, 70, 0,106, 1, 3, 0, 32, 0,101, 9, 4, 0, 19, 0,
- 4, 0, 17, 2,107, 1, 5, 0, 32, 0,101, 9, 4, 0, 19, 0, 4, 0, 37, 0, 7, 0,138, 9, 0, 0,242, 2,108, 1, 10, 0,
- 32, 0,101, 9, 0, 0,242, 2, 2, 0,139, 9, 2, 0,140, 9, 0, 0,141, 9, 0, 0,142, 9, 7, 0,143, 9, 7, 0,144, 9,
- 7, 0,145, 9, 7, 0,146, 9,109, 1, 5, 0, 32, 0,101, 9, 0, 0,242, 2, 7, 0,189, 2, 2, 0,147, 9, 2, 0, 19, 0,
-110, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 7, 0,148, 9, 7, 0,149, 9, 2, 0, 19, 0,
- 2, 0, 17, 2,111, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 7, 0,148, 9, 7, 0,149, 9,
- 2, 0, 19, 0, 2, 0, 17, 2,112, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 7, 0,148, 9,
- 7, 0,149, 9, 2, 0, 19, 0, 2, 0, 17, 2,113, 1, 7, 0, 32, 0,101, 9, 0, 0,242, 2, 7, 0, 76, 1, 7, 0, 85, 1,
- 2, 0, 19, 0, 2, 0, 69, 1, 4, 0, 37, 0,114, 1, 5, 0, 32, 0, 43, 3, 7, 0, 76, 1, 2, 0, 47, 3, 0, 0, 49, 3,
- 0, 0,150, 9,115, 1, 10, 0,115, 1, 0, 0,115, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 0, 0,151, 9, 7, 0, 19, 1,
- 7, 0, 20, 1, 2, 0, 81, 9, 2, 0,152, 9, 32, 0, 45, 0,116, 1, 22, 0,116, 1, 0, 0,116, 1, 1, 0, 2, 0, 19, 0,
- 2, 0, 69, 1, 2, 0,153, 9, 2, 0,154, 9, 36, 0, 80, 0,161, 0,175, 8, 32, 0,161, 0, 7, 0, 88, 0, 7, 0, 89, 0,
- 7, 0,155, 9, 7, 0,156, 9, 7, 0,157, 9, 7, 0,158, 9, 7, 0,228, 2, 7, 0,159, 9, 7, 0,177, 8, 7, 0,160, 9,
- 0, 0,161, 9, 0, 0,162, 9, 12, 0,101, 3,117, 1, 8, 0, 7, 0, 32, 2, 7, 0,197, 8, 7, 0,198, 8, 9, 0, 2, 0,
- 2, 0,163, 9, 2, 0,164, 9, 2, 0,165, 9, 2, 0,166, 9,118, 1, 18, 0,118, 1, 0, 0,118, 1, 1, 0,118, 1,167, 9,
- 0, 0, 20, 0,117, 1,168, 9, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,169, 9, 2, 0,170, 9, 2, 0,171, 9, 2, 0,172, 9,
- 4, 0, 43, 0, 7, 0,173, 9, 7, 0,174, 9, 4, 0,175, 9, 4, 0,176, 9,118, 1,177, 9,119, 1,178, 9,120, 1, 33, 0,
-120, 1, 0, 0,120, 1, 1, 0,120, 1,179, 9, 0, 0, 20, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 21, 8, 2, 0, 56, 8,
- 2, 0,180, 9, 2, 0,128, 0, 2, 0,170, 9, 2, 0, 12, 8, 12, 0,170, 8, 12, 0,181, 9, 27, 0,156, 6, 9, 0,182, 9,
- 7, 0,173, 9, 7, 0,174, 9, 7, 0, 63, 2, 7, 0,183, 9, 2, 0,184, 9, 2, 0,185, 9, 7, 0,186, 9, 7, 0,187, 9,
- 2, 0,188, 9, 2, 0,189, 9, 9, 0,190, 9, 24, 0,191, 9, 24, 0,192, 9, 24, 0,193, 9,121, 1,148, 0,122, 1,194, 9,
-123, 1,195, 9,119, 1, 8, 0,119, 1, 0, 0,119, 1, 1, 0,120, 1,196, 9,120, 1,197, 9,118, 1,198, 9,118, 1,177, 9,
- 4, 0, 19, 0, 4, 0, 37, 0, 60, 0, 22, 0, 27, 0, 31, 0, 39, 0, 75, 0,163, 0, 96, 3, 12, 0,199, 9, 12, 0,200, 9,
-117, 1,201, 9, 12, 0,202, 9, 4, 0, 17, 0, 4, 0,203, 9, 4, 0,204, 9, 4, 0,205, 9, 4, 0, 19, 0, 4, 0, 37, 0,
- 12, 0,206, 9,123, 1,207, 9, 4, 0,208, 9, 9, 0,209, 9, 9, 0,210, 9, 4, 0,211, 9, 9, 0,212, 9, 9, 0,213, 9,
- 9, 0,214, 9,124, 1, 6, 0, 4, 0,119, 0, 4, 0,121, 0, 4, 0, 12, 8, 0, 0,215, 9, 0, 0,216, 9, 2, 0, 37, 0,
-125, 1, 16, 0, 2, 0,220, 7, 2, 0,221, 7, 2, 0,217, 9, 2, 0,222, 8, 2, 0,218, 9, 2, 0, 68, 0, 7, 0,227, 2,
- 7, 0,219, 9, 7, 0,220, 9, 2, 0, 91, 1, 0, 0,221, 9, 0, 0,222, 9, 2, 0,223, 9, 2, 0, 37, 0, 4, 0,224, 9,
- 4, 0,225, 9,126, 1, 9, 0, 7, 0,226, 9, 7, 0,227, 9, 7, 0,237, 8, 7, 0, 64, 3, 7, 0,228, 9, 7, 0, 78, 6,
- 2, 0, 62, 3, 0, 0,229, 9, 0, 0, 37, 0,127, 1, 4, 0, 7, 0,230, 9, 7, 0,231, 9, 2, 0, 62, 3, 2, 0, 37, 0,
-128, 1, 3, 0, 7, 0,232, 9, 7, 0,233, 9, 7, 0, 15, 0,129, 1, 7, 0, 0, 0,250, 1, 2, 0, 11, 5, 2, 0, 12, 5,
- 2, 0, 13, 5, 2, 0,200, 4, 4, 0,121, 0, 4, 0, 40, 4,130, 1, 9, 0, 7, 0,234, 9, 7, 0,235, 9, 7, 0,236, 9,
- 7, 0, 74, 2, 7, 0,237, 9, 7, 0,238, 9, 7, 0,239, 9, 2, 0,240, 9, 2, 0,241, 9,131, 1, 4, 0, 2, 0,242, 9,
- 2, 0,243, 9, 2, 0,244, 9, 2, 0,245, 9,132, 1, 2, 0, 7, 0, 5, 0, 7, 0, 6, 0,133, 1, 2, 0, 0, 0,163, 0,
- 0, 0,246, 9,134, 1, 1, 0, 0, 0, 20, 0,135, 1, 10, 0, 0, 0,247, 9, 0, 0,248, 9, 0, 0, 71, 6, 0, 0,249, 9,
- 2, 0,217, 9, 2, 0,250, 9, 7, 0,251, 9, 7, 0,252, 9, 7, 0,253, 9, 7, 0,159, 9,136, 1, 2, 0, 9, 0,254, 9,
- 9, 0,255, 9,137, 1, 11, 0, 0, 0, 13, 5, 0, 0, 17, 0, 0, 0, 62, 3, 0, 0, 64, 3, 0, 0, 0, 10, 0, 0,106, 0,
- 0, 0, 59, 2, 7, 0, 1, 10, 7, 0, 2, 10, 7, 0, 3, 10, 7, 0, 4, 10,138, 1, 8, 0, 7, 0,136, 8, 7, 0,120, 0,
- 7, 0,222, 9, 7, 0,146, 2, 7, 0, 5, 10, 7, 0,233, 0, 7, 0, 6, 10, 4, 0, 17, 0,139, 1, 4, 0, 2, 0, 7, 10,
- 2, 0, 8, 10, 2, 0, 9, 10, 2, 0, 37, 0,140, 1, 7, 0, 7, 0, 10, 10, 7, 0,189, 2, 7, 0, 11, 10, 7, 0, 17, 8,
- 7, 0, 18, 8, 7, 0, 19, 8, 7, 0, 12, 10,141, 1, 6, 0, 2, 0, 13, 10, 2, 0, 14, 10, 7, 0, 15, 10, 7, 0, 16, 10,
- 7, 0, 17, 10, 7, 0, 18, 10,142, 1, 1, 0, 0, 0, 20, 0,143, 1, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 2, 0, 19, 0,
- 2, 0, 19, 10,144, 1, 10, 0, 2, 0,228, 3, 2, 0, 19, 0, 7, 0,128, 4, 7, 0, 20, 10, 7, 0, 21, 10, 7, 0, 22, 10,
- 7, 0, 23, 10,143, 1, 24, 10,143, 1, 25, 10,143, 1, 26, 10, 63, 0, 11, 0, 4, 0, 19, 0, 4, 0, 64, 0, 4, 0, 27, 10,
- 4, 0, 37, 0, 24, 0, 28, 10, 24, 0, 29, 10,144, 1, 30, 10, 7, 0, 31, 10, 7, 0, 32, 10, 7, 0, 33, 10, 7, 0, 34, 10,
-234, 0, 10, 0, 4, 0, 81, 9, 4, 0, 35, 10, 7, 0, 36, 10, 7, 0, 37, 10, 7, 0, 38, 10, 7, 0, 39, 10, 7, 0, 10, 0,
- 7, 0, 12, 0, 4, 0, 69, 1, 4, 0,232, 2,233, 0, 18, 0, 4, 0,124, 0, 4, 0, 40, 10, 4, 0, 41, 10, 7, 0, 42, 10,
- 4, 0, 43, 10, 7, 0, 44, 10, 7, 0, 45, 10, 4, 0, 46, 10, 7, 0, 47, 10, 4, 0, 48, 10, 7, 0, 49, 10,234, 0, 50, 10,
- 7, 0, 51, 10, 7, 0, 52, 10, 7, 0, 53, 10, 7, 0, 54, 10, 4, 0, 55, 10, 4, 0, 37, 0,145, 1, 4, 0, 47, 0,219, 2,
- 7, 0, 56, 10, 7, 0,158, 1, 7, 0, 37, 0,194, 0, 18, 0, 27, 0, 31, 0,145, 1, 57, 10, 63, 0, 24, 10, 51, 0, 58, 10,
- 2, 0, 19, 0, 2, 0,230, 5, 4, 0,106, 0, 7, 0, 59, 10, 7, 0, 71, 2, 4, 0, 60, 10, 7, 0, 61, 10, 7, 0, 62, 10,
- 7, 0, 63, 10, 7, 0,158, 1, 0, 0, 64, 10, 0, 0, 65, 10, 0, 0, 66, 10, 0, 0, 70, 0,146, 1, 10, 0, 4, 0, 17, 0,
- 4, 0,120, 0, 4, 0, 19, 0, 4, 0,182, 3, 4, 0, 67, 10, 4, 0, 68, 10, 4, 0, 69, 10, 0, 0, 92, 0, 0, 0, 20, 0,
- 9, 0, 2, 0,147, 1, 1, 0, 0, 0, 5, 8, 91, 0, 7, 0,146, 1, 70, 10, 4, 0, 71, 10, 4, 0, 72, 10, 4, 0, 73, 10,
- 4, 0, 37, 0, 9, 0, 74, 10,147, 1, 75, 10,148, 1, 5, 0, 7, 0,141, 2, 7, 0,209, 2, 7, 0, 25, 2, 2, 0,117, 2,
- 2, 0, 37, 0,149, 1, 5, 0, 7, 0,141, 2, 7, 0, 76, 10, 7, 0, 77, 10, 7, 0, 78, 10, 7, 0,209, 2,150, 1, 5, 0,
- 32, 0, 79, 10,151, 1, 22, 0, 7, 0,200, 5, 7, 0, 80, 10, 7, 0, 57, 0,152, 1, 7, 0, 4, 0, 81, 10, 4, 0, 82, 10,
- 4, 0, 83, 10, 7, 0, 84, 10, 7, 0, 85, 10, 7, 0, 86, 10, 7, 0, 57, 0,153, 1, 8, 0,153, 1, 0, 0,153, 1, 1, 0,
- 32, 0, 45, 0, 4, 0,252, 0, 2, 0, 19, 0, 2, 0, 69, 1, 7, 0,209, 2, 7, 0,144, 8,154, 1, 6, 0,154, 1, 0, 0,
-154, 1, 1, 0, 32, 0, 45, 0, 2, 0,194, 2, 2, 0, 19, 0, 2, 0, 87, 10,155, 1, 17, 0,149, 1,176, 3,149, 1, 88, 10,
-148, 1, 89, 10,149, 1,128, 8,150, 1, 90, 10, 4, 0, 82, 0, 7, 0,209, 2, 7, 0,238, 2, 7, 0, 91, 10, 4, 0, 81, 10,
- 4, 0, 92, 10, 7, 0, 85, 10, 7, 0, 86, 10, 7, 0,106, 0, 4, 0, 93, 10, 2, 0, 19, 0, 2, 0, 94, 10,156, 1, 9, 0,
- 7, 0, 95, 10, 7, 0,248, 0, 7, 0, 96, 10, 7, 0, 97, 10, 7, 0, 98, 10, 7, 0, 99, 10, 7, 0,100, 10, 7, 0,101, 10,
- 7, 0,102, 10,157, 1,111, 0, 27, 0, 31, 0, 39, 0, 75, 0,158, 1,103, 10,156, 1,104, 10,172, 0, 62, 4, 4, 0, 19, 0,
- 2, 0, 17, 0, 2, 0,139, 9, 2, 0,105, 10, 2, 0,106, 10, 2, 0,142, 3, 2, 0,107, 10, 2, 0,108, 10, 2, 0,109, 10,
- 2, 0,110, 10, 2, 0,111, 10, 2, 0,112, 10, 2, 0,113, 10, 2, 0,114, 10, 2, 0,112, 5, 2, 0,115, 10, 2, 0,116, 10,
- 2, 0,117, 10, 2, 0,118, 10, 2, 0,119, 10, 2, 0, 14, 2, 2, 0,121, 8, 2, 0, 96, 8, 2, 0,120, 10, 2, 0,121, 10,
- 2, 0,192, 3, 2, 0,193, 3, 2, 0,122, 10, 2, 0,123, 10, 2, 0,124, 10, 2, 0,125, 10, 7, 0,126, 10, 7, 0,127, 10,
- 7, 0,128, 10, 2, 0, 61, 5, 2, 0,129, 10, 7, 0,130, 10, 7, 0,131, 10, 7, 0,132, 10, 7, 0,103, 8, 7, 0, 89, 0,
- 7, 0,238, 2, 7, 0,109, 8, 7, 0,133, 10, 7, 0,134, 10, 7, 0,135, 10, 4, 0,104, 8, 4, 0,102, 8, 4, 0,136, 10,
- 7, 0,105, 8, 7, 0,106, 8, 7, 0,107, 8, 7, 0,137, 10, 7, 0,138, 10, 7, 0,139, 10, 7, 0,140, 10, 7, 0,141, 10,
- 7, 0, 57, 0, 7, 0,142, 10, 7, 0,143, 10, 7, 0,144, 10, 7, 0,145, 10, 7, 0,133, 3, 7, 0,106, 0, 7, 0,146, 10,
- 7, 0,147, 10, 7, 0,148, 10, 7, 0,149, 10, 7, 0,150, 10, 7, 0,151, 10, 7, 0,152, 10, 4, 0,153, 10, 4, 0,154, 10,
- 7, 0,155, 10, 7, 0,156, 10, 7, 0,157, 10, 7, 0,158, 10, 7, 0,159, 10, 7, 0,207, 0, 7, 0,160, 10, 7, 0,219, 3,
- 7, 0,217, 3, 7, 0,218, 3, 7, 0,161, 10, 7, 0,162, 10, 7, 0,163, 10, 7, 0,164, 10, 7, 0,165, 10, 7, 0,166, 10,
- 7, 0,167, 10, 7, 0,168, 10, 7, 0,169, 10, 7, 0,170, 10, 7, 0,171, 10, 7, 0,172, 10, 7, 0,173, 10, 4, 0,174, 10,
- 4, 0,175, 10, 67, 0,165, 3, 12, 0,176, 10, 67, 0,177, 10, 32, 0,178, 10, 32, 0,179, 10, 36, 0, 80, 0,167, 0, 61, 1,
-167, 0,180, 10,147, 0, 44, 0,147, 0, 0, 0,147, 0, 1, 0,157, 1,181, 10,155, 1,182, 10,152, 1, 43, 9,174, 0,244, 3,
- 9, 0,245, 3,159, 1,183, 10,159, 1,184, 10, 12, 0,185, 10, 12, 0,186, 10,132, 0,187, 10,140, 0,188, 10,140, 0,189, 10,
- 32, 0,190, 10, 32, 0,191, 10, 32, 0, 38, 0, 12, 0,106, 9, 0, 0, 20, 0, 7, 0,237, 0, 7, 0, 9, 3, 7, 0,192, 10,
- 4, 0,183, 2, 4, 0, 57, 0, 4, 0, 19, 0, 4, 0,104, 8, 4, 0,193, 10, 4, 0,194, 10, 4, 0,195, 10, 2, 0,244, 0,
- 2, 0,196, 10, 2, 0,197, 10, 2, 0,198, 10, 0, 0,199, 10, 2, 0,200, 10, 2, 0,201, 10, 2, 0,202, 10, 9, 0,203, 10,
-136, 0, 61, 4, 12, 0,252, 2, 12, 0,204, 10,160, 1,205, 10,161, 1,206, 10, 7, 0,207, 10,134, 0, 37, 0,162, 1,238, 8,
- 7, 0, 31, 4, 7, 0,208, 10, 7, 0,209, 10, 7, 0,200, 5, 7, 0,143, 3, 7, 0,133, 3, 7, 0,210, 10, 7, 0, 73, 2,
- 7, 0,211, 10, 7, 0,212, 10, 7, 0,213, 10, 7, 0,214, 10, 7, 0,215, 10, 7, 0,216, 10, 7, 0, 32, 4, 7, 0,217, 10,
- 7, 0,218, 10, 7, 0,219, 10, 7, 0, 33, 4, 7, 0, 29, 4, 7, 0, 30, 4, 7, 0,220, 10, 7, 0,221, 10, 4, 0,222, 10,
- 4, 0, 90, 0, 4, 0,223, 10, 4, 0,224, 10, 2, 0,225, 10, 2, 0,226, 10, 2, 0,227, 10, 2, 0,228, 10, 2, 0,229, 10,
- 2, 0,230, 10, 2, 0,231, 10, 2, 0,178, 4,172, 0, 62, 4,135, 0, 9, 0,162, 1,232, 10, 7, 0,233, 10, 7, 0,234, 10,
- 7, 0,230, 1, 7, 0,235, 10, 4, 0, 90, 0, 2, 0,236, 10, 2, 0,237, 10, 67, 0,229, 1,163, 1, 4, 0, 7, 0, 5, 0,
- 7, 0, 6, 0, 7, 0, 7, 0, 7, 0,238, 10,164, 1, 6, 0,164, 1, 0, 0,164, 1, 1, 0,163, 1, 20, 9, 4, 0,250, 0,
- 2, 0,239, 10, 2, 0, 19, 0,165, 1, 5, 0,165, 1, 0, 0,165, 1, 1, 0, 12, 0,240, 10, 4, 0,241, 10, 4, 0, 19, 0,
-166, 1, 9, 0,166, 1, 0, 0,166, 1, 1, 0, 12, 0,119, 0,165, 1,242, 10, 4, 0, 19, 0, 2, 0,239, 10, 2, 0,243, 10,
- 7, 0, 91, 0, 0, 0,244, 10,163, 0, 6, 0, 27, 0, 31, 0, 12, 0, 29, 5, 4, 0, 19, 0, 2, 0,245, 10, 2, 0,246, 10,
- 9, 0,247, 10,167, 1, 7, 0,167, 1, 0, 0,167, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 23, 0, 0, 0,248, 10,
- 0, 0,249, 10,168, 1, 6, 0, 12, 0,250, 10, 4, 0,251, 10, 4, 0,252, 10, 4, 0, 19, 0, 4, 0, 37, 0,214, 0,253, 10,
-169, 1, 3, 0, 7, 0, 86, 5, 7, 0,254, 10, 7, 0,255, 10,170, 1, 17, 0, 27, 0, 31, 0,171, 1, 0, 11,171, 1, 1, 11,
- 12, 0, 2, 11, 4, 0, 3, 11, 2, 0, 4, 11, 2, 0, 5, 11, 12, 0, 6, 11, 12, 0, 7, 11,168, 1, 8, 11, 12, 0, 9, 11,
- 12, 0, 10, 11, 12, 0, 11, 11, 12, 0, 12, 11,172, 1, 13, 11, 12, 0, 14, 11,214, 0, 15, 11,171, 1, 31, 0,171, 1, 0, 0,
-171, 1, 1, 0, 9, 0, 16, 11, 4, 0,198, 7, 2, 0, 17, 11, 2, 0, 37, 0,219, 0, 61, 6,219, 0, 18, 11, 0, 0, 19, 11,
- 2, 0, 20, 11, 2, 0, 21, 11, 2, 0,220, 7, 2, 0,221, 7, 2, 0, 22, 11, 2, 0, 23, 11, 2, 0,182, 3, 2, 0,184, 6,
- 2, 0, 24, 11, 2, 0, 25, 11, 2, 0,208, 9,173, 1, 26, 11,174, 1, 27, 11,175, 1, 28, 11, 4, 0, 29, 11, 4, 0, 30, 11,
- 9, 0, 31, 11, 12, 0, 7, 11, 12, 0,240, 7, 12, 0, 32, 11, 12, 0, 33, 11, 12, 0, 34, 11,176, 1, 17, 0,176, 1, 0, 0,
-176, 1, 1, 0, 0, 0, 35, 11, 26, 0, 30, 0, 2, 0, 36, 11, 2, 0, 17, 0, 2, 0, 15, 0, 2, 0, 37, 11, 2, 0, 38, 11,
- 2, 0, 39, 11, 2, 0, 40, 11, 2, 0, 41, 11, 2, 0, 19, 0, 2, 0, 42, 11, 2, 0, 31, 0, 2, 0, 37, 0,177, 1, 43, 11,
-178, 1, 10, 0,178, 1, 0, 0,178, 1, 1, 0, 12, 0, 44, 11, 0, 0, 35, 11, 2, 0, 45, 11, 2, 0, 46, 11, 2, 0, 19, 0,
- 2, 0, 47, 11, 4, 0, 48, 11, 9, 0, 49, 11,172, 1, 7, 0,172, 1, 0, 0,172, 1, 1, 0, 0, 0, 35, 11, 0, 0, 50, 11,
- 12, 0,150, 7, 4, 0, 51, 11, 4, 0, 19, 0,227, 0, 14, 0,227, 0, 0, 0,227, 0, 1, 0, 0, 0, 35, 11, 26, 0, 30, 0,
-179, 1,214, 7, 9, 0, 52, 11, 9, 0, 53, 11,177, 1, 43, 11,168, 1, 54, 11, 12, 0, 55, 11,227, 0, 56, 11, 7, 1, 97, 6,
- 2, 0, 19, 0, 2, 0,178, 4,180, 1, 8, 0,180, 1, 0, 0,180, 1, 1, 0, 9, 0, 2, 0, 9, 0, 57, 11, 0, 0,239, 3,
- 2, 0, 17, 0, 2, 0, 19, 0, 7, 0, 58, 11,181, 1, 5, 0, 7, 0, 59, 11, 4, 0, 60, 11, 4, 0, 61, 11, 4, 0, 69, 1,
- 4, 0, 19, 0,182, 1, 6, 0, 7, 0, 62, 11, 7, 0, 63, 11, 7, 0, 64, 11, 7, 0, 65, 11, 4, 0, 17, 0, 4, 0, 19, 0,
-183, 1, 5, 0, 7, 0,197, 8, 7, 0,198, 8, 7, 0,209, 2, 2, 0, 28, 2, 2, 0, 29, 2,184, 1, 5, 0,183, 1, 2, 0,
- 4, 0, 54, 0, 7, 0, 66, 11, 7, 0,197, 8, 7, 0,198, 8,185, 1, 4, 0, 2, 0, 67, 11, 2, 0, 68, 11, 2, 0, 69, 11,
- 2, 0, 70, 11,186, 1, 2, 0, 42, 0,150, 6, 26, 0,244, 8,187, 1, 3, 0, 24, 0, 71, 11, 4, 0, 19, 0, 4, 0, 37, 0,
-188, 1, 6, 0, 7, 0,106, 0, 7, 0,211, 2, 7, 0, 72, 11, 7, 0, 37, 0, 2, 0,243, 0, 2, 0, 73, 11,189, 1, 5, 0,
- 7, 0, 74, 11, 7, 0,120, 0, 7, 0, 21, 9, 7, 0, 22, 9, 4, 0, 19, 0,190, 1, 6, 0, 27, 0,156, 6, 0, 0, 75, 11,
- 0, 0, 76, 11, 2, 0, 77, 11, 2, 0, 19, 0, 4, 0, 78, 11,191, 1, 7, 0,191, 1, 0, 0,191, 1, 1, 0, 0, 0,239, 3,
-190, 1, 79, 11, 2, 0, 80, 11, 2, 0, 17, 0, 7, 0, 61, 0,192, 1, 7, 0, 12, 0, 81, 11, 0, 0, 82, 11, 9, 0, 83, 11,
- 7, 0, 61, 0, 7, 0, 58, 11, 4, 0, 17, 0, 4, 0, 19, 0,193, 1, 3, 0, 7, 0, 84, 11, 4, 0, 19, 0, 4, 0, 37, 0,
-194, 1, 15, 0,194, 1, 0, 0,194, 1, 1, 0, 84, 1, 92, 9,192, 1, 62, 0, 12, 0,101, 3, 35, 0, 50, 0,193, 1, 85, 11,
- 4, 0, 54, 0, 7, 0, 61, 0, 2, 0, 19, 0, 2, 0, 12, 1, 4, 0, 86, 11, 0, 0, 75, 11, 4, 0, 87, 11, 7, 0, 88, 11,
-195, 1, 2, 0, 0, 0, 89, 11, 0, 0, 90, 11,196, 1, 4, 0,196, 1, 0, 0,196, 1, 1, 0,161, 0, 43, 3, 12, 0, 91, 11,
-197, 1, 24, 0,197, 1, 0, 0,197, 1, 1, 0, 12, 0, 92, 11,161, 0,175, 8,196, 1, 93, 11, 12, 0, 94, 11, 12, 0,101, 3,
- 0, 0,239, 3, 7, 0, 58, 11, 7, 0, 95, 11, 7, 0, 88, 0, 7, 0, 89, 0, 7, 0,155, 9, 7, 0,156, 9, 7, 0,228, 2,
- 7, 0,159, 9, 7, 0,177, 8, 7, 0,160, 9, 2, 0, 96, 11, 2, 0, 97, 11, 2, 0, 43, 0, 2, 0, 17, 0, 4, 0, 19, 0,
- 4, 0, 70, 0,198, 1, 6, 0,198, 1, 0, 0,198, 1, 1, 0, 12, 0, 92, 11, 4, 0, 19, 0, 4, 0,145, 2, 0, 0,239, 3,
-199, 1, 11, 0,199, 1, 0, 0,199, 1, 1, 0, 27, 0,156, 6, 0, 0, 98, 11, 4, 0, 78, 11, 2, 0, 99, 11, 2, 0, 37, 0,
- 0, 0, 75, 11, 4, 0, 86, 11, 2, 0, 19, 0, 2, 0,100, 11,200, 1, 8, 0,200, 1, 0, 0,200, 1, 1, 0, 12, 0,101, 11,
- 0, 0,239, 3, 0, 0,102, 11, 2, 0, 19, 0, 2, 0,100, 11, 4, 0,103, 11,201, 1, 5, 0,201, 1, 0, 0,201, 1, 1, 0,
- 0, 0, 75, 11, 4, 0, 86, 11, 7, 0,199, 2, 39, 0, 12, 0,161, 0, 93, 3,161, 0,104, 11,196, 1, 93, 11, 12, 0,105, 11,
-197, 1,106, 11, 12, 0,107, 11, 12, 0,108, 11, 4, 0, 19, 0, 4, 0,244, 0, 2, 0,109, 11, 2, 0,110, 11, 7, 0,111, 11,
-202, 1, 2, 0, 27, 0, 31, 0, 39, 0, 75, 0,203, 1, 5, 0,203, 1, 0, 0,203, 1, 1, 0, 4, 0, 17, 0, 4, 0, 19, 0,
- 0, 0, 20, 0,204, 1, 6, 0,203, 1,112, 11, 32, 0, 45, 0, 4, 0,113, 11, 7, 0,114, 11, 4, 0,115, 11, 4, 0, 81, 9,
-205, 1, 3, 0,203, 1,112, 11, 4, 0,113, 11, 7, 0,116, 11,206, 1, 8, 0,203, 1,112, 11, 32, 0, 45, 0, 7, 0, 64, 1,
- 7, 0,117, 11, 7, 0, 9, 3, 7, 0,237, 8, 4, 0,113, 11, 4, 0,118, 11,207, 1, 5, 0,203, 1,112, 11, 7, 0,119, 11,
- 7, 0, 56, 8, 7, 0,234, 2, 7, 0, 57, 0,208, 1, 3, 0,203, 1,112, 11, 7, 0,237, 8, 7, 0,120, 11,151, 1, 4, 0,
- 7, 0,121, 11, 7, 0,148, 10, 2, 0,122, 11, 2, 0, 69, 1,209, 1, 14, 0,209, 1, 0, 0,209, 1, 1, 0, 12, 0,123, 11,
- 12, 0,124, 11, 12, 0,125, 11, 0, 0, 20, 0, 4, 0, 31, 0, 4, 0, 19, 0, 4, 0,126, 11, 7, 0,127, 11, 4, 0,115, 11,
- 4, 0, 81, 9, 7, 0,248, 3, 7, 0,236, 2,158, 1, 23, 0, 4, 0,113, 11, 4, 0,128, 11, 7, 0,129, 11, 7, 0, 57, 0,
- 7, 0,130, 11, 7, 0,232, 2, 7, 0,121, 11, 7, 0,131, 11, 7, 0,211, 2, 7, 0, 42, 10, 7, 0,128, 4, 7, 0,132, 11,
- 7, 0,133, 11, 7, 0,134, 11, 7, 0,135, 11, 7, 0,136, 11, 7, 0,137, 11, 7, 0,138, 11, 7, 0,139, 11, 7, 0,140, 11,
- 7, 0,141, 11, 7, 0,142, 11, 12, 0,143, 11,120, 0, 36, 0,119, 0,144, 11,210, 1,104, 10, 67, 0,145, 11, 67, 0,177, 10,
- 67, 0,146, 11,211, 1,147, 11, 48, 0,162, 0, 48, 0,148, 11, 48, 0,149, 11, 7, 0,150, 11, 7, 0,151, 11, 7, 0,152, 11,
- 7, 0,153, 11, 7, 0,154, 11, 7, 0, 93, 9, 7, 0,155, 11, 7, 0,158, 1, 7, 0,156, 11, 4, 0,157, 11, 4, 0,158, 11,
- 4, 0,159, 11, 4, 0, 90, 0, 4, 0, 37, 0, 4, 0,160, 11, 2, 0,161, 11, 2, 0,162, 11, 4, 0,163, 11, 7, 0,211, 2,
- 4, 0,164, 11, 7, 0,165, 11, 4, 0,166, 11, 4, 0,167, 11, 4, 0,168, 11,136, 0,169, 11, 12, 0,170, 11,172, 0, 62, 4,
-121, 0, 11, 0,119, 0,144, 11,147, 0, 29, 3, 7, 0,125, 1, 7, 0, 93, 9, 7, 0,171, 11, 7, 0,172, 11, 2, 0,173, 11,
- 2, 0,174, 11, 2, 0,175, 11, 2, 0, 17, 0, 4, 0, 37, 0,122, 0, 13, 0,119, 0,144, 11,138, 0, 6, 3,140, 0, 8, 3,
- 7, 0, 20, 9, 7, 0,176, 11, 7, 0,177, 11, 7, 0, 66, 1, 7, 0,178, 11, 4, 0,115, 9, 4, 0, 4, 3, 2, 0, 17, 0,
- 2, 0, 37, 0, 4, 0, 70, 0, 69, 78, 68, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+114, 0,114, 97,116,101, 0,114,103, 98, 91, 51, 93, 0,115, 99,117,108,112,116, 95,112,108, 97,110,101, 0,112,108, 97,110,101,
+ 95,111,102,102,115,101,116, 0,115, 99,117,108,112,116, 95,116,111,111,108, 0,118,101,114,116,101,120,112, 97,105,110,116, 95,
+116,111,111,108, 0,105,109, 97,103,101,112, 97,105,110,116, 95,116,111,111,108, 0, 97,117,116,111,115,109,111,111,116,104, 95,
+102, 97, 99,116,111,114, 0, 99,114,101, 97,115,101, 95,112,105,110, 99,104, 95,102, 97, 99,116,111,114, 0,112,108, 97,110,101,
+ 95,116,114,105,109, 0,116,101,120,116,117,114,101, 95,115, 97,109,112,108,101, 95, 98,105, 97,115, 0,116,101,120,116,117,114,
+101, 95,111,118,101,114,108, 97,121, 95, 97,108,112,104, 97, 0,117,110,112,114,111,106,101, 99,116,101,100, 95,114, 97,100,105,
+117,115, 0, 97,100,100, 95, 99,111,108, 91, 51, 93, 0,115,117, 98, 95, 99,111,108, 91, 51, 93, 0, 97, 99,116,105,118,101, 95,
+114,110,100, 0, 97, 99,116,105,118,101, 95, 99,108,111,110,101, 0, 97, 99,116,105,118,101, 95,109, 97,115,107, 0, 42,108, 97,
+121,101,114,115, 0,116,111,116,108, 97,121,101,114, 0,109, 97,120,108, 97,121,101,114, 0,116,111,116,115,105,122,101, 0, 42,
+112,111,111,108, 0, 42,101,120,116,101,114,110, 97,108, 0,118,101,108, 91, 51, 93, 0,114,111,116, 91, 52, 93, 0, 97,118,101,
+ 91, 51, 93, 0, 42,103,114,111,117,110,100, 0,119, 97,110,100,101,114, 91, 51, 93, 0,110,117,109, 0,112, 97,114,101,110,116,
+ 0,112, 97, 91, 52, 93, 0,119, 91, 52, 93, 0,102,117,118, 91, 52, 93, 0,102,111,102,102,115,101,116, 0,114,116, 91, 50, 93,
+ 0,112,114,101,118, 95,115,116, 97,116,101, 0, 42,104, 97,105,114, 0, 42, 98,111,105,100, 0,100,105,101,116,105,109,101, 0,
+110,117,109, 95,100,109, 99, 97, 99,104,101, 0,104, 97,105,114, 95,105,110,100,101,120, 0, 97,108,105,118,101, 0,115,112,114,
+105,110,103, 95,107, 0,114,101,115,116, 95,108,101,110,103,116,104, 0,118,105,115, 99,111,115,105,116,121, 95,111,109,101,103,
+ 97, 0,118,105,115, 99,111,115,105,116,121, 95, 98,101,116, 97, 0,115,116,105,102,102,110,101,115,115, 95,107, 0,115,116,105,
+102,102,110,101,115,115, 95,107,110,101, 97,114, 0,114,101,115,116, 95,100,101,110,115,105,116,121, 0, 98,117,111,121, 97,110,
+ 99,121, 0, 42, 98,111,105,100,115, 0, 42,102,108,117,105,100, 0,100,105,115,116,114, 0,112,104,121,115,116,121,112,101, 0,
+ 97,118,101,109,111,100,101, 0,114,101, 97, 99,116,101,118,101,110,116, 0,100,114, 97,119, 0,100,114, 97,119, 95, 97,115, 0,
+100,114, 97,119, 95,115,105,122,101, 0, 99,104,105,108,100,116,121,112,101, 0,114,101,110, 95, 97,115, 0,115,117, 98,102,114,
+ 97,109,101,115, 0,114,101,110, 95,115,116,101,112, 0,104, 97,105,114, 95,115,116,101,112, 0,107,101,121,115, 95,115,116,101,
+112, 0, 97,100, 97,112,116, 95, 97,110,103,108,101, 0, 97,100, 97,112,116, 95,112,105,120, 0,114,111,116,102,114,111,109, 0,
+105,110,116,101,103,114, 97,116,111,114, 0, 98, 98, 95, 97,108,105,103,110, 0, 98, 98, 95,117,118, 95,115,112,108,105,116, 0,
+ 98, 98, 95, 97,110,105,109, 0, 98, 98, 95,115,112,108,105,116, 95,111,102,102,115,101,116, 0, 98, 98, 95,116,105,108,116, 0,
+ 98, 98, 95,114, 97,110,100, 95,116,105,108,116, 0, 98, 98, 95,111,102,102,115,101,116, 91, 50, 93, 0,115,105,109,112,108,105,
+102,121, 95,114,101,102,115,105,122,101, 0,115,105,109,112,108,105,102,121, 95,114, 97,116,101, 0,115,105,109,112,108,105,102,
+121, 95,116,114, 97,110,115,105,116,105,111,110, 0,115,105,109,112,108,105,102,121, 95,118,105,101,119,112,111,114,116, 0,116,
+105,109,101,116,119,101, 97,107, 0,106,105,116,102, 97, 99, 0,101,102,102, 95,104, 97,105,114, 0,103,114,105,100, 95,114,101,
+115, 0,112, 97,114,116,102, 97, 99, 0,116, 97,110,102, 97, 99, 0,116, 97,110,112,104, 97,115,101, 0,114,101, 97, 99,116,102,
+ 97, 99, 0,111, 98, 95,118,101,108, 91, 51, 93, 0, 97,118,101,102, 97, 99, 0,112,104, 97,115,101,102, 97, 99, 0,114, 97,110,
+100,114,111,116,102, 97, 99, 0,114, 97,110,100,112,104, 97,115,101,102, 97, 99, 0,114, 97,110,100,115,105,122,101, 0,114,101,
+ 97, 99,116,115,104, 97,112,101, 0, 97, 99, 99, 91, 51, 93, 0,100,114, 97,103,102, 97, 99, 0, 98,114,111,119,110,102, 97, 99,
+ 0,100, 97,109,112,102, 97, 99, 0,114, 97,110,100,108,101,110,103,116,104, 0, 99,104,105,108,100, 95,110, 98,114, 0,114,101,
+110, 95, 99,104,105,108,100, 95,110, 98,114, 0,112, 97,114,101,110,116,115, 0, 99,104,105,108,100,115,105,122,101, 0, 99,104,
+105,108,100,114, 97,110,100,115,105,122,101, 0, 99,104,105,108,100,114, 97,100, 0, 99,104,105,108,100,102,108, 97,116, 0, 99,
+108,117,109,112,112,111,119, 0,114,111,117,103,104, 49, 0,114,111,117,103,104, 49, 95,115,105,122,101, 0,114,111,117,103,104,
+ 50, 0,114,111,117,103,104, 50, 95,115,105,122,101, 0,114,111,117,103,104, 50, 95,116,104,114,101,115, 0,114,111,117,103,104,
+ 95,101,110,100, 0,114,111,117,103,104, 95,101,110,100, 95,115,104, 97,112,101, 0, 99,108,101,110,103,116,104, 0, 99,108,101,
+110,103,116,104, 95,116,104,114,101,115, 0, 98,114, 97,110, 99,104, 95,116,104,114,101,115, 0,100,114, 97,119, 95,108,105,110,
+101, 91, 50, 93, 0,112, 97,116,104, 95,115,116, 97,114,116, 0,112, 97,116,104, 95,101,110,100, 0,116,114, 97,105,108, 95, 99,
+111,117,110,116, 0,107,101,121,101,100, 95,108,111,111,112,115, 0,100,117,112,108,105,119,101,105,103,104,116,115, 0, 42,101,
+102,102, 95,103,114,111,117,112, 0, 42,100,117,112, 95,111, 98, 0, 42, 98, 98, 95,111, 98, 0, 42,112,100, 50, 0, 42,112, 97,
+114,116, 0, 42,112, 97,114,116,105, 99,108,101,115, 0, 42, 42,112, 97,116,104, 99, 97, 99,104,101, 0, 42, 42, 99,104,105,108,
+100, 99, 97, 99,104,101, 0,112, 97,116,104, 99, 97, 99,104,101, 98,117,102,115, 0, 99,104,105,108,100, 99, 97, 99,104,101, 98,
+117,102,115, 0, 42, 99,108,109,100, 0, 42,104, 97,105,114, 95,105,110, 95,100,109, 0, 42,104, 97,105,114, 95,111,117,116, 95,
+100,109, 0, 42,116, 97,114,103,101,116, 95,111, 98, 0, 42,108, 97,116,116,105, 99,101, 0,116,114,101,101, 95,102,114, 97,109,
+101, 0,116,111,116, 99,104,105,108,100, 0,116,111,116, 99, 97, 99,104,101,100, 0,116,111,116, 99,104,105,108,100, 99, 97, 99,
+104,101, 0,116, 97,114,103,101,116, 95,112,115,121,115, 0,116,111,116,107,101,121,101,100, 0, 98, 97,107,101,115,112, 97, 99,
+101, 0, 98, 98, 95,117,118,110, 97,109,101, 91, 51, 93, 91, 51, 50, 93, 0,118,103,114,111,117,112, 91, 49, 50, 93, 0,118,103,
+ 95,110,101,103, 0,114,116, 51, 0, 42,114,101,110,100,101,114,100, 97,116, 97, 0, 42,101,102,102,101, 99,116,111,114,115, 0,
+ 42,116,114,101,101, 0, 42,112,100,100, 0, 42,102,114, 97,110,100, 0, 67,100,105,115, 0, 67,118,105, 0,115,116,114,117, 99,
+116,117,114, 97,108, 0, 98,101,110,100,105,110,103, 0,109, 97,120, 95, 98,101,110,100, 0,109, 97,120, 95,115,116,114,117, 99,
+116, 0,109, 97,120, 95,115,104,101, 97,114, 0, 97,118,103, 95,115,112,114,105,110,103, 95,108,101,110, 0,116,105,109,101,115,
+ 99, 97,108,101, 0,101,102,102, 95,102,111,114, 99,101, 95,115, 99, 97,108,101, 0,101,102,102, 95,119,105,110,100, 95,115, 99,
+ 97,108,101, 0,115,105,109, 95,116,105,109,101, 95,111,108,100, 0,118,101,108,111, 99,105,116,121, 95,115,109,111,111,116,104,
+ 0, 99,111,108,108,105,100,101,114, 95,102,114,105, 99,116,105,111,110, 0,115,116,101,112,115, 80,101,114, 70,114, 97,109,101,
+ 0,112,114,101,114,111,108,108, 0,109, 97,120,115,112,114,105,110,103,108,101,110, 0,115,111,108,118,101,114, 95,116,121,112,
+101, 0,118,103,114,111,117,112, 95, 98,101,110,100, 0,118,103,114,111,117,112, 95,109, 97,115,115, 0,118,103,114,111,117,112,
+ 95,115,116,114,117, 99,116, 0,115,104, 97,112,101,107,101,121, 95,114,101,115,116, 0,112,114,101,115,101,116,115, 0,114,101,
+115,101,116, 0, 42, 99,111,108,108,105,115,105,111,110, 95,108,105,115,116, 0,101,112,115,105,108,111,110, 0,115,101,108,102,
+ 95,102,114,105, 99,116,105,111,110, 0,115,101,108,102,101,112,115,105,108,111,110, 0,115,101,108,102, 95,108,111,111,112, 95,
+ 99,111,117,110,116, 0,108,111,111,112, 95, 99,111,117,110,116, 0,112,114,101,115,115,117,114,101, 0,116,104,105, 99,107,110,
+101,115,115, 0,115,116,114,111,107,101,115, 0,102,114, 97,109,101,110,117,109, 0, 42, 97, 99,116,102,114, 97,109,101, 0,103,
+115,116,101,112, 0,105,110,102,111, 91, 49, 50, 56, 93, 0,115, 98,117,102,102,101,114, 95,115,105,122,101, 0,115, 98,117,102,
+102,101,114, 95,115,102,108, 97,103, 0, 42,115, 98,117,102,102,101,114, 0, 42,116,121,112,101,115,116,114, 0, 42,109,101,115,
+115, 97,103,101, 0,108,105,115,116, 0,112,114,105,110,116,108,101,118,101,108, 0,115,116,111,114,101,108,101,118,101,108, 0,
+ 42,114,101,112,111,114,116,116,105,109,101,114, 0,103,114,101,121,115, 99, 97,108,101, 0,119,105,100,116,104,102, 97, 99, 0,
+ 42,119,105,110,100,114, 97,119, 97, 98,108,101, 0, 42,119,105,110, 97, 99,116,105,118,101, 0,119,105,110,100,111,119,115, 0,
+105,110,105,116,105, 97,108,105,122,101,100, 0,102,105,108,101, 95,115, 97,118,101,100, 0,111,112, 95,117,110,100,111, 95,100,
+101,112,116,104, 0,111,112,101,114, 97,116,111,114,115, 0,113,117,101,117,101, 0,114,101,112,111,114,116,115, 0,106,111, 98,
+115, 0,112, 97,105,110,116, 99,117,114,115,111,114,115, 0,100,114, 97,103,115, 0,107,101,121, 99,111,110,102,105,103,115, 0,
+ 42,100,101,102, 97,117,108,116, 99,111,110,102, 0,116,105,109,101,114,115, 0, 42, 97,117,116,111,115, 97,118,101,116,105,109,
+101,114, 0, 42,103,104,111,115,116,119,105,110, 0,103,114, 97, 98, 99,117,114,115,111,114, 0, 42,110,101,119,115, 99,114,101,
+101,110, 0,115, 99,114,101,101,110,110, 97,109,101, 91, 51, 50, 93, 0,112,111,115,120, 0,112,111,115,121, 0,119,105,110,100,
+111,119,115,116, 97,116,101, 0,109,111,110,105,116,111,114, 0,108, 97,115,116, 99,117,114,115,111,114, 0, 97,100,100,109,111,
+117,115,101,109,111,118,101, 0, 42,101,118,101,110,116,115,116, 97,116,101, 0, 42, 99,117,114,115,119,105,110, 0, 42,116,119,
+101, 97,107, 0,100,114, 97,119,109,101,116,104,111,100, 0,100,114, 97,119,102, 97,105,108, 0, 42,100,114, 97,119,100, 97,116,
+ 97, 0,109,111,100, 97,108,104, 97,110,100,108,101,114,115, 0,115,117, 98,119,105,110,100,111,119,115, 0,103,101,115,116,117,
+114,101, 0,105,100,110, 97,109,101, 91, 54, 52, 93, 0,112,114,111,112,118, 97,108,117,101, 0,115,104,105,102,116, 0, 99,116,
+114,108, 0, 97,108,116, 0,111,115,107,101,121, 0,107,101,121,109,111,100,105,102,105,101,114, 0,109, 97,112,116,121,112,101,
+ 0, 42,112,116,114, 0,105,116,101,109,115, 0,115,112, 97, 99,101,105,100, 0,114,101,103,105,111,110,105,100, 0,107,109,105,
+ 95,105,100, 0, 40, 42,112,111,108,108, 41, 40, 41, 0, 42,109,111,100, 97,108, 95,105,116,101,109,115, 0, 98, 97,115,101,110,
+ 97,109,101, 91, 54, 52, 93, 0, 97, 99,116,107,101,121,109, 97,112, 0, 42, 99,117,115,116,111,109,100, 97,116, 97, 0, 42,112,
+121, 95,105,110,115,116, 97,110, 99,101, 0, 42,114,101,112,111,114,116,115, 0,109, 97, 99,114,111, 0, 42,111,112,109, 0, 42,
+101,100, 97,116, 97, 0,105,110,102,108,117,101,110, 99,101, 0, 42, 99,111,101,102,102,105, 99,105,101,110,116,115, 0, 97,114,
+114, 97,121,115,105,122,101, 0,112,111,108,121, 95,111,114,100,101,114, 0, 97,109,112,108,105,116,117,100,101, 0,112,104, 97,
+115,101, 95,109,117,108,116,105,112,108,105,101,114, 0,112,104, 97,115,101, 95,111,102,102,115,101,116, 0,118, 97,108,117,101,
+ 95,111,102,102,115,101,116, 0,109,105,100,118, 97,108, 0, 98,101,102,111,114,101, 95,109,111,100,101, 0, 97,102,116,101,114,
+ 95,109,111,100,101, 0, 98,101,102,111,114,101, 95, 99,121, 99,108,101,115, 0, 97,102,116,101,114, 95, 99,121, 99,108,101,115,
+ 0,114,101, 99,116, 0,112,104, 97,115,101, 0,109,111,100,105,102,105, 99, 97,116,105,111,110, 0,115,116,101,112, 95,115,105,
+122,101, 0, 42,114,110, 97, 95,112, 97,116,104, 0,112, 99,104, 97,110, 95,110, 97,109,101, 91, 51, 50, 93, 0,116,114, 97,110,
+115, 67,104, 97,110, 0,105,100,116,121,112,101, 0,116, 97,114,103,101,116,115, 91, 56, 93, 0,110,117,109, 95,116, 97,114,103,
+101,116,115, 0,118, 97,114,105, 97, 98,108,101,115, 0,101,120,112,114,101,115,115,105,111,110, 91, 50, 53, 54, 93, 0, 42,101,
+120,112,114, 95, 99,111,109,112, 0,118,101, 99, 91, 50, 93, 0, 42,102,112,116, 0, 97,114,114, 97,121, 95,105,110,100,101,120,
+ 0, 99,111,108,111,114, 95,109,111,100,101, 0, 99,111,108,111,114, 91, 51, 93, 0,102,114,111,109, 91, 49, 50, 56, 93, 0,116,
+111, 91, 49, 50, 56, 93, 0,109, 97,112,112,105,110,103,115, 0,115,116,114,105,112,115, 0, 42,114,101,109, 97,112, 0,102, 99,
+117,114,118,101,115, 0,115,116,114,105,112, 95,116,105,109,101, 0, 98,108,101,110,100,109,111,100,101, 0,101,120,116,101,110,
+100,109,111,100,101, 0,103,114,111,117,112, 91, 54, 52, 93, 0,103,114,111,117,112,109,111,100,101, 0,107,101,121,105,110,103,
+102,108, 97,103, 0,112, 97,116,104,115, 0,116,121,112,101,105,110,102,111, 91, 54, 52, 93, 0, 97, 99,116,105,118,101, 95,112,
+ 97,116,104, 0, 42,116,109,112, 97, 99,116, 0,110,108, 97, 95,116,114, 97, 99,107,115, 0, 42, 97, 99,116,115,116,114,105,112,
+ 0,100,114,105,118,101,114,115, 0,111,118,101,114,114,105,100,101,115, 0, 97, 99,116, 95, 98,108,101,110,100,109,111,100,101,
+ 0, 97, 99,116, 95,101,120,116,101,110,100,109,111,100,101, 0, 97, 99,116, 95,105,110,102,108,117,101,110, 99,101, 0,114,117,
+108,101, 0,111,112,116,105,111,110,115, 0,102,101, 97,114, 95,102, 97, 99,116,111,114, 0,115,105,103,110, 97,108, 95,105,100,
+ 0,108,111,111,107, 95, 97,104,101, 97,100, 0,111,108,111, 99, 91, 51, 93, 0,113,117,101,117,101, 95,115,105,122,101, 0,119,
+ 97,110,100,101,114, 0,102,108,101,101, 95,100,105,115,116, 97,110, 99,101, 0,104,101, 97,108,116,104, 0,115,116, 97,116,101,
+ 95,105,100, 0,114,117,108,101,115, 0, 99,111,110,100,105,116,105,111,110,115, 0, 97, 99,116,105,111,110,115, 0,114,117,108,
+101,115,101,116, 95,116,121,112,101, 0,114,117,108,101, 95,102,117,122,122,105,110,101,115,115, 0,108, 97,115,116, 95,115,116,
+ 97,116,101, 95,105,100, 0,108, 97,110,100,105,110,103, 95,115,109,111,111,116,104,110,101,115,115, 0, 98, 97,110,107,105,110,
+103, 0, 97,103,103,114,101,115,115,105,111,110, 0, 97,105,114, 95,109,105,110, 95,115,112,101,101,100, 0, 97,105,114, 95,109,
+ 97,120, 95,115,112,101,101,100, 0, 97,105,114, 95,109, 97,120, 95, 97, 99, 99, 0, 97,105,114, 95,109, 97,120, 95, 97,118,101,
+ 0, 97,105,114, 95,112,101,114,115,111,110, 97,108, 95,115,112, 97, 99,101, 0,108, 97,110,100, 95,106,117,109,112, 95,115,112,
+101,101,100, 0,108, 97,110,100, 95,109, 97,120, 95,115,112,101,101,100, 0,108, 97,110,100, 95,109, 97,120, 95, 97, 99, 99, 0,
+108, 97,110,100, 95,109, 97,120, 95, 97,118,101, 0,108, 97,110,100, 95,112,101,114,115,111,110, 97,108, 95,115,112, 97, 99,101,
+ 0,108, 97,110,100, 95,115,116,105, 99,107, 95,102,111,114, 99,101, 0,115,116, 97,116,101,115, 0, 42,115,109,100, 0, 42,102,
+108,117,105,100, 95,103,114,111,117,112, 0, 42, 99,111,108,108, 95,103,114,111,117,112, 0, 42,119,116, 0, 42,116,101,120, 95,
+119,116, 0, 42,116,101,120, 95,115,104, 97,100,111,119, 0, 42,115,104, 97,100,111,119, 0,112, 48, 91, 51, 93, 0,112, 49, 91,
+ 51, 93, 0,100,120, 0,111,109,101,103, 97, 0,116,101,109,112, 65,109, 98, 0, 98,101,116, 97, 0,114,101,115, 91, 51, 93, 0,
+ 97,109,112,108,105,102,121, 0,109, 97,120,114,101,115, 0,118,105,101,119,115,101,116,116,105,110,103,115, 0,110,111,105,115,
+101, 0,100,105,115,115, 95,112,101,114, 99,101,110,116, 0,100,105,115,115, 95,115,112,101,101,100, 0,114,101,115, 95,119,116,
+ 91, 51, 93, 0,100,120, 95,119,116, 0,118, 51,100,110,117,109, 0, 99, 97, 99,104,101, 95, 99,111,109,112, 0, 99, 97, 99,104,
+101, 95,104,105,103,104, 95, 99,111,109,112, 0, 42,112,111,105,110,116, 95, 99, 97, 99,104,101, 91, 50, 93, 0,112,116, 99, 97,
+ 99,104,101,115, 91, 50, 93, 0, 98,111,114,100,101,114, 95, 99,111,108,108,105,115,105,111,110,115, 0,116,105,109,101, 95,115,
+ 99, 97,108,101, 0,118,111,114,116,105, 99,105,116,121, 0,118,101,108,111, 99,105,116,121, 91, 50, 93, 0,118,101,108, 95,109,
+117,108,116,105, 0,118,103,114,112, 95,104,101, 97,116, 95,115, 99, 97,108,101, 91, 50, 93, 0,118,103,114,111,117,112, 95,102,
+108,111,119, 0,118,103,114,111,117,112, 95,100,101,110,115,105,116,121, 0,118,103,114,111,117,112, 95,104,101, 97,116, 0, 42,
+112,111,105,110,116,115, 95,111,108,100, 0, 42,118,101,108, 0,109, 97,116, 95,111,108,100, 91, 52, 93, 91, 52, 93, 0, 0, 0,
+ 84, 89, 80, 69,211, 1, 0, 0, 99,104, 97,114, 0,117, 99,104, 97,114, 0,115,104,111,114,116, 0,117,115,104,111,114,116, 0,
+105,110,116, 0,108,111,110,103, 0,117,108,111,110,103, 0,102,108,111, 97,116, 0,100,111,117, 98,108,101, 0,118,111,105,100,
+ 0, 76,105,110,107, 0, 76,105,110,107, 68, 97,116, 97, 0, 76,105,115,116, 66, 97,115,101, 0,118,101, 99, 50,115, 0,118,101,
+ 99, 50,102, 0,118,101, 99, 50,105, 0,118,101, 99, 50,100, 0,118,101, 99, 51,105, 0,118,101, 99, 51,102, 0,118,101, 99, 51,
+100, 0,118,101, 99, 52,105, 0,118,101, 99, 52,102, 0,118,101, 99, 52,100, 0,114, 99,116,105, 0,114, 99,116,102, 0, 73, 68,
+ 80,114,111,112,101,114,116,121, 68, 97,116, 97, 0, 73, 68, 80,114,111,112,101,114,116,121, 0, 73, 68, 0, 76,105, 98,114, 97,
+114,121, 0, 70,105,108,101, 68, 97,116, 97, 0, 80,114,101,118,105,101,119, 73,109, 97,103,101, 0, 73,112,111, 68,114,105,118,
+101,114, 0, 79, 98,106,101, 99,116, 0, 73,112,111, 67,117,114,118,101, 0, 66, 80,111,105,110,116, 0, 66,101,122, 84,114,105,
+112,108,101, 0, 73,112,111, 0, 75,101,121, 66,108,111, 99,107, 0, 75,101,121, 0, 65,110,105,109, 68, 97,116, 97, 0, 84,101,
+120,116, 76,105,110,101, 0, 84,101,120,116, 77, 97,114,107,101,114, 0, 84,101,120,116, 0, 80, 97, 99,107,101,100, 70,105,108,
+101, 0, 67, 97,109,101,114, 97, 0, 73,109, 97,103,101, 85,115,101,114, 0, 83, 99,101,110,101, 0, 73,109, 97,103,101, 0, 71,
+ 80, 85, 84,101,120,116,117,114,101, 0, 97,110,105,109, 0, 82,101,110,100,101,114, 82,101,115,117,108,116, 0, 77, 84,101,120,
+ 0, 84,101,120, 0, 80,108,117,103,105,110, 84,101,120, 0, 67, 66, 68, 97,116, 97, 0, 67,111,108,111,114, 66, 97,110,100, 0,
+ 69,110,118, 77, 97,112, 0, 73,109, 66,117,102, 0, 80,111,105,110,116, 68,101,110,115,105,116,121, 0, 86,111,120,101,108, 68,
+ 97,116, 97, 0, 98, 78,111,100,101, 84,114,101,101, 0, 84,101,120, 77, 97,112,112,105,110,103, 0, 76, 97,109,112, 0, 67,117,
+114,118,101, 77, 97,112,112,105,110,103, 0, 86,111,108,117,109,101, 83,101,116,116,105,110,103,115, 0, 77, 97,116,101,114,105,
+ 97,108, 0, 71,114,111,117,112, 0, 86, 70,111,110,116, 0, 86, 70,111,110,116, 68, 97,116, 97, 0, 77,101,116, 97, 69,108,101,
+109, 0, 66,111,117,110,100, 66,111,120, 0, 77,101,116, 97, 66, 97,108,108, 0, 78,117,114, 98, 0, 67,104, 97,114, 73,110,102,
+111, 0, 84,101,120,116, 66,111,120, 0, 69,100,105,116, 78,117,114, 98, 0, 71, 72, 97,115,104, 0, 67,117,114,118,101, 0, 80,
+ 97,116,104, 0, 83,101,108, 66,111,120, 0, 69,100,105,116, 70,111,110,116, 0, 77,101,115,104, 0, 77, 70, 97, 99,101, 0, 77,
+ 84, 70, 97, 99,101, 0, 84, 70, 97, 99,101, 0, 77, 86,101,114,116, 0, 77, 69,100,103,101, 0, 77, 68,101,102,111,114,109, 86,
+101,114,116, 0, 77, 67,111,108, 0, 77, 83,116,105, 99,107,121, 0, 77, 83,101,108,101, 99,116, 0, 69,100,105,116, 77,101,115,
+104, 0, 67,117,115,116,111,109, 68, 97,116, 97, 0, 77,117,108,116,105,114,101,115, 0, 80, 97,114,116,105, 97,108, 86,105,115,
+105, 98,105,108,105,116,121, 0, 77, 68,101,102,111,114,109, 87,101,105,103,104,116, 0, 77, 84,101,120, 80,111,108,121, 0, 77,
+ 76,111,111,112, 85, 86, 0, 77, 76,111,111,112, 67,111,108, 0, 77, 70,108,111, 97,116, 80,114,111,112,101,114,116,121, 0, 77,
+ 73,110,116, 80,114,111,112,101,114,116,121, 0, 77, 83,116,114,105,110,103, 80,114,111,112,101,114,116,121, 0, 79,114,105,103,
+ 83,112, 97, 99,101, 70, 97, 99,101, 0, 77, 68,105,115,112,115, 0, 77,117,108,116,105,114,101,115, 67,111,108, 0, 77,117,108,
+116,105,114,101,115, 67,111,108, 70, 97, 99,101, 0, 77,117,108,116,105,114,101,115, 70, 97, 99,101, 0, 77,117,108,116,105,114,
+101,115, 69,100,103,101, 0, 77,117,108,116,105,114,101,115, 76,101,118,101,108, 0, 77,111,100,105,102,105,101,114, 68, 97,116,
+ 97, 0, 83,117, 98,115,117,114,102, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 76, 97,116,116,105, 99,101, 77,111,100,
+105,102,105,101,114, 68, 97,116, 97, 0, 67,117,114,118,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 66,117,105,108,
+100, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77, 97,115,107, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 65,
+114,114, 97,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77,105,114,114,111,114, 77,111,100,105,102,105,101,114, 68,
+ 97,116, 97, 0, 69,100,103,101, 83,112,108,105,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 66,101,118,101,108, 77,
+111,100,105,102,105,101,114, 68, 97,116, 97, 0, 66, 77,101,115,104, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,109,
+111,107,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,109,111,107,101, 68,111,109, 97,105,110, 83,101,116,116,105,
+110,103,115, 0, 83,109,111,107,101, 70,108,111,119, 83,101,116,116,105,110,103,115, 0, 83,109,111,107,101, 67,111,108,108, 83,
+101,116,116,105,110,103,115, 0, 68,105,115,112,108, 97, 99,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 85, 86, 80,
+114,111,106,101, 99,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 68,101, 99,105,109, 97,116,101, 77,111,100,105,102,
+105,101,114, 68, 97,116, 97, 0, 83,109,111,111,116,104, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67, 97,115,116, 77,
+111,100,105,102,105,101,114, 68, 97,116, 97, 0, 87, 97,118,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 65,114,109,
+ 97,116,117,114,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 72,111,111,107, 77,111,100,105,102,105,101,114, 68, 97,
+116, 97, 0, 83,111,102,116, 98,111,100,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67,108,111,116,104, 77,111,100,
+105,102,105,101,114, 68, 97,116, 97, 0, 67,108,111,116,104, 0, 67,108,111,116,104, 83,105,109, 83,101,116,116,105,110,103,115,
+ 0, 67,108,111,116,104, 67,111,108,108, 83,101,116,116,105,110,103,115, 0, 80,111,105,110,116, 67, 97, 99,104,101, 0, 67,111,
+108,108,105,115,105,111,110, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 66, 86, 72, 84,114,101,101, 0, 83,117,114,102,
+ 97, 99,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 68,101,114,105,118,101,100, 77,101,115,104, 0, 66, 86, 72, 84,
+114,101,101, 70,114,111,109, 77,101,115,104, 0, 66,111,111,108,101, 97,110, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0,
+ 77, 68,101,102, 73,110,102,108,117,101,110, 99,101, 0, 77, 68,101,102, 67,101,108,108, 0, 77,101,115,104, 68,101,102,111,114,
+109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,121,115,116,101,109, 77,111,100,105,
+102,105,101,114, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,121,115,116,101,109, 0, 80, 97,114,116,105, 99,108,101,
+ 73,110,115,116, 97,110, 99,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 69,120,112,108,111,100,101, 77,111,100,105,
+102,105,101,114, 68, 97,116, 97, 0, 77,117,108,116,105,114,101,115, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 70,108,
+117,105,100,115,105,109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 70,108,117,105,100,115,105,109, 83,101,116,116,105,
+110,103,115, 0, 83,104,114,105,110,107,119,114, 97,112, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,105,109,112,108,
+101, 68,101,102,111,114,109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,104, 97,112,101, 75,101,121, 77,111,100,105,
+102,105,101,114, 68, 97,116, 97, 0, 83,111,108,105,100,105,102,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83, 99,
+114,101,119, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 76, 97,116,116,105, 99,101, 0, 98, 68,101,102,111,114,109, 71,
+114,111,117,112, 0, 83, 99,117,108,112,116, 83,101,115,115,105,111,110, 0, 98, 65, 99,116,105,111,110, 0, 98, 80,111,115,101,
+ 0, 98, 71, 80,100, 97,116, 97, 0, 98, 65,110,105,109, 86,105,122, 83,101,116,116,105,110,103,115, 0, 98, 77,111,116,105,111,
+110, 80, 97,116,104, 0, 66,117,108,108,101,116, 83,111,102,116, 66,111,100,121, 0, 80, 97,114,116, 68,101,102,108,101, 99,116,
+ 0, 83,111,102,116, 66,111,100,121, 0, 79, 98, 72,111,111,107, 0, 68,117,112,108,105, 79, 98,106,101, 99,116, 0, 82, 78, 71,
+ 0, 69,102,102,101, 99,116,111,114, 87,101,105,103,104,116,115, 0, 80, 84, 67, 97, 99,104,101, 77,101,109, 0, 80, 84, 67, 97,
+ 99,104,101, 69,100,105,116, 0, 83, 66, 86,101,114,116,101,120, 0, 66,111,100,121, 80,111,105,110,116, 0, 66,111,100,121, 83,
+112,114,105,110,103, 0, 83, 66, 83, 99,114, 97,116, 99,104, 0, 87,111,114,108,100, 0, 66, 97,115,101, 0, 65,118,105, 67,111,
+100,101, 99, 68, 97,116, 97, 0, 81,117,105, 99,107,116,105,109,101, 67,111,100,101, 99, 68, 97,116, 97, 0, 81,117,105, 99,107,
+116,105,109,101, 67,111,100,101, 99, 83,101,116,116,105,110,103,115, 0, 70, 70, 77,112,101,103, 67,111,100,101, 99, 68, 97,116,
+ 97, 0, 65,117,100,105,111, 68, 97,116, 97, 0, 83, 99,101,110,101, 82,101,110,100,101,114, 76, 97,121,101,114, 0, 82,101,110,
+100,101,114, 68, 97,116, 97, 0, 82,101,110,100,101,114, 80,114,111,102,105,108,101, 0, 71, 97,109,101, 68,111,109,101, 0, 71,
+ 97,109,101, 70,114, 97,109,105,110,103, 0, 71, 97,109,101, 68, 97,116, 97, 0, 84,105,109,101, 77, 97,114,107,101,114, 0, 80,
+ 97,105,110,116, 0, 66,114,117,115,104, 0, 73,109, 97,103,101, 80, 97,105,110,116, 83,101,116,116,105,110,103,115, 0, 80, 97,
+114,116,105, 99,108,101, 66,114,117,115,104, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 69,100,105,116, 83,101,116,116,
+105,110,103,115, 0, 84,114, 97,110,115,102,111,114,109, 79,114,105,101,110,116, 97,116,105,111,110, 0, 83, 99,117,108,112,116,
+ 0, 86, 80, 97,105,110,116, 0, 84,111,111,108, 83,101,116,116,105,110,103,115, 0, 98, 83,116, 97,116,115, 0, 85,110,105,116,
+ 83,101,116,116,105,110,103,115, 0, 80,104,121,115,105, 99,115, 83,101,116,116,105,110,103,115, 0, 69,100,105,116,105,110,103,
+ 0, 83, 99,101,110,101, 83,116, 97,116,115, 0, 68, 97,103, 70,111,114,101,115,116, 0, 66, 71,112,105, 99, 0, 82,101,103,105,
+111,110, 86,105,101,119, 51, 68, 0, 82,101,110,100,101,114, 73,110,102,111, 0, 82,101,116,111,112,111, 86,105,101,119, 68, 97,
+116, 97, 0, 86,105,101,119, 68,101,112,116,104,115, 0, 83,109,111,111,116,104, 86,105,101,119, 83,116,111,114,101, 0,119,109,
+ 84,105,109,101,114, 0, 86,105,101,119, 51, 68, 0, 83,112, 97, 99,101, 76,105,110,107, 0, 86,105,101,119, 50, 68, 0, 83,112,
+ 97, 99,101, 73,110,102,111, 0, 98, 83, 99,114,101,101,110, 0, 83,112, 97, 99,101, 73,112,111, 0, 98, 68,111,112,101, 83,104,
+101,101,116, 0, 83,112, 97, 99,101, 66,117,116,115, 0, 83,112, 97, 99,101, 83,101,113, 0, 70,105,108,101, 83,101,108,101, 99,
+116, 80, 97,114, 97,109,115, 0, 83,112, 97, 99,101, 70,105,108,101, 0, 70,105,108,101, 76,105,115,116, 0,119,109, 79,112,101,
+114, 97,116,111,114, 0, 70,105,108,101, 76, 97,121,111,117,116, 0, 83,112, 97, 99,101, 79,111,112,115, 0, 84,114,101,101, 83,
+116,111,114,101, 0, 84,114,101,101, 83,116,111,114,101, 69,108,101,109, 0, 83,112, 97, 99,101, 73,109, 97,103,101, 0, 83, 99,
+111,112,101,115, 0, 72,105,115,116,111,103,114, 97,109, 0, 83,112, 97, 99,101, 78,108, 97, 0, 83,112, 97, 99,101, 84,101,120,
+116, 0, 83, 99,114,105,112,116, 0, 83,112, 97, 99,101, 83, 99,114,105,112,116, 0, 83,112, 97, 99,101, 84,105,109,101, 67, 97,
+ 99,104,101, 0, 83,112, 97, 99,101, 84,105,109,101, 0, 83,112, 97, 99,101, 78,111,100,101, 0, 83,112, 97, 99,101, 76,111,103,
+105, 99, 0, 83,112, 97, 99,101, 73,109, 97, 83,101,108, 0, 67,111,110,115,111,108,101, 76,105,110,101, 0, 83,112, 97, 99,101,
+ 67,111,110,115,111,108,101, 0, 83,112, 97, 99,101, 85,115,101,114, 80,114,101,102, 0, 83,112, 97, 99,101, 83,111,117,110,100,
+ 0, 83, 99,114, 65,114,101, 97, 0, 98, 83,111,117,110,100, 0,117,105, 70,111,110,116, 0,117,105, 70,111,110,116, 83,116,121,
+108,101, 0,117,105, 83,116,121,108,101, 0,117,105, 87,105,100,103,101,116, 67,111,108,111,114,115, 0,117,105, 87,105,100,103,
+101,116, 83,116, 97,116,101, 67,111,108,111,114,115, 0, 84,104,101,109,101, 85, 73, 0, 84,104,101,109,101, 83,112, 97, 99,101,
+ 0, 84,104,101,109,101, 87,105,114,101, 67,111,108,111,114, 0, 98, 84,104,101,109,101, 0, 98, 65,100,100,111,110, 0, 83,111,
+108,105,100, 76,105,103,104,116, 0, 85,115,101,114, 68,101,102, 0, 83, 99,114, 86,101,114,116, 0, 83, 99,114, 69,100,103,101,
+ 0, 80, 97,110,101,108, 0, 80, 97,110,101,108, 84,121,112,101, 0,117,105, 76, 97,121,111,117,116, 0, 83,112, 97, 99,101, 84,
+121,112,101, 0, 65, 82,101,103,105,111,110, 0, 65, 82,101,103,105,111,110, 84,121,112,101, 0, 70,105,108,101, 71,108,111, 98,
+ 97,108, 0, 83,116,114,105,112, 69,108,101,109, 0, 84, 83,116,114,105,112, 69,108,101,109, 0, 83,116,114,105,112, 67,114,111,
+112, 0, 83,116,114,105,112, 84,114, 97,110,115,102,111,114,109, 0, 83,116,114,105,112, 67,111,108,111,114, 66, 97,108, 97,110,
+ 99,101, 0, 83,116,114,105,112, 80,114,111,120,121, 0, 83,116,114,105,112, 0, 80,108,117,103,105,110, 83,101,113, 0, 83,101,
+113,117,101,110, 99,101, 0, 77,101,116, 97, 83,116, 97, 99,107, 0, 87,105,112,101, 86, 97,114,115, 0, 71,108,111,119, 86, 97,
+114,115, 0, 84,114, 97,110,115,102,111,114,109, 86, 97,114,115, 0, 83,111,108,105,100, 67,111,108,111,114, 86, 97,114,115, 0,
+ 83,112,101,101,100, 67,111,110,116,114,111,108, 86, 97,114,115, 0, 69,102,102,101, 99,116, 0, 66,117,105,108,100, 69,102,102,
+ 0, 80, 97,114,116, 69,102,102, 0, 80, 97,114,116,105, 99,108,101, 0, 87, 97,118,101, 69,102,102, 0, 98, 80,114,111,112,101,
+114,116,121, 0, 98, 78,101, 97,114, 83,101,110,115,111,114, 0, 98, 77,111,117,115,101, 83,101,110,115,111,114, 0, 98, 84,111,
+117, 99,104, 83,101,110,115,111,114, 0, 98, 75,101,121, 98,111, 97,114,100, 83,101,110,115,111,114, 0, 98, 80,114,111,112,101,
+114,116,121, 83,101,110,115,111,114, 0, 98, 65, 99,116,117, 97,116,111,114, 83,101,110,115,111,114, 0, 98, 68,101,108, 97,121,
+ 83,101,110,115,111,114, 0, 98, 67,111,108,108,105,115,105,111,110, 83,101,110,115,111,114, 0, 98, 82, 97,100, 97,114, 83,101,
+110,115,111,114, 0, 98, 82, 97,110,100,111,109, 83,101,110,115,111,114, 0, 98, 82, 97,121, 83,101,110,115,111,114, 0, 98, 65,
+114,109, 97,116,117,114,101, 83,101,110,115,111,114, 0, 98, 77,101,115,115, 97,103,101, 83,101,110,115,111,114, 0, 98, 83,101,
+110,115,111,114, 0, 98, 67,111,110,116,114,111,108,108,101,114, 0, 98, 74,111,121,115,116,105, 99,107, 83,101,110,115,111,114,
+ 0, 98, 69,120,112,114,101,115,115,105,111,110, 67,111,110,116, 0, 98, 80,121,116,104,111,110, 67,111,110,116, 0, 98, 65, 99,
+116,117, 97,116,111,114, 0, 98, 65,100,100, 79, 98,106,101, 99,116, 65, 99,116,117, 97,116,111,114, 0, 98, 65, 99,116,105,111,
+110, 65, 99,116,117, 97,116,111,114, 0, 83,111,117,110,100, 51, 68, 0, 98, 83,111,117,110,100, 65, 99,116,117, 97,116,111,114,
+ 0, 98, 69,100,105,116, 79, 98,106,101, 99,116, 65, 99,116,117, 97,116,111,114, 0, 98, 83, 99,101,110,101, 65, 99,116,117, 97,
+116,111,114, 0, 98, 80,114,111,112,101,114,116,121, 65, 99,116,117, 97,116,111,114, 0, 98, 79, 98,106,101, 99,116, 65, 99,116,
+117, 97,116,111,114, 0, 98, 73,112,111, 65, 99,116,117, 97,116,111,114, 0, 98, 67, 97,109,101,114, 97, 65, 99,116,117, 97,116,
+111,114, 0, 98, 67,111,110,115,116,114, 97,105,110,116, 65, 99,116,117, 97,116,111,114, 0, 98, 71,114,111,117,112, 65, 99,116,
+117, 97,116,111,114, 0, 98, 82, 97,110,100,111,109, 65, 99,116,117, 97,116,111,114, 0, 98, 77,101,115,115, 97,103,101, 65, 99,
+116,117, 97,116,111,114, 0, 98, 71, 97,109,101, 65, 99,116,117, 97,116,111,114, 0, 98, 86,105,115,105, 98,105,108,105,116,121,
+ 65, 99,116,117, 97,116,111,114, 0, 98, 84,119,111, 68, 70,105,108,116,101,114, 65, 99,116,117, 97,116,111,114, 0, 98, 80, 97,
+114,101,110,116, 65, 99,116,117, 97,116,111,114, 0, 98, 83,116, 97,116,101, 65, 99,116,117, 97,116,111,114, 0, 98, 65,114,109,
+ 97,116,117,114,101, 65, 99,116,117, 97,116,111,114, 0, 71,114,111,117,112, 79, 98,106,101, 99,116, 0, 66,111,110,101, 0, 98,
+ 65,114,109, 97,116,117,114,101, 0, 98, 77,111,116,105,111,110, 80, 97,116,104, 86,101,114,116, 0, 98, 80,111,115,101, 67,104,
+ 97,110,110,101,108, 0, 98, 73, 75, 80, 97,114, 97,109, 0, 98, 73,116, 97,115, 99, 0, 98, 65, 99,116,105,111,110, 71,114,111,
+117,112, 0, 83,112, 97, 99,101, 65, 99,116,105,111,110, 0, 98, 65, 99,116,105,111,110, 67,104, 97,110,110,101,108, 0, 98, 67,
+111,110,115,116,114, 97,105,110,116, 67,104, 97,110,110,101,108, 0, 98, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 67,111,
+110,115,116,114, 97,105,110,116, 84, 97,114,103,101,116, 0, 98, 80,121,116,104,111,110, 67,111,110,115,116,114, 97,105,110,116,
+ 0, 98, 75,105,110,101,109, 97,116,105, 99, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,112,108,105,110,101, 73, 75, 67,
+111,110,115,116,114, 97,105,110,116, 0, 98, 84,114, 97, 99,107, 84,111, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 82,111,
+116, 97,116,101, 76,105,107,101, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 76,111, 99, 97,116,101, 76,105,107,101, 67,111,
+110,115,116,114, 97,105,110,116, 0, 98, 83,105,122,101, 76,105,107,101, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83, 97,
+109,101, 86,111,108,117,109,101, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 84,114, 97,110,115, 76,105,107,101, 67,111,110,
+115,116,114, 97,105,110,116, 0, 98, 77,105,110, 77, 97,120, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 65, 99,116,105,111,
+110, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 76,111, 99,107, 84,114, 97, 99,107, 67,111,110,115,116,114, 97,105,110,116,
+ 0, 98, 68, 97,109,112, 84,114, 97, 99,107, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 70,111,108,108,111,119, 80, 97,116,
+104, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,116,114,101,116, 99,104, 84,111, 67,111,110,115,116,114, 97,105,110,116,
+ 0, 98, 82,105,103,105,100, 66,111,100,121, 74,111,105,110,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 67,108, 97,109,
+112, 84,111, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 67,104,105,108,100, 79,102, 67,111,110,115,116,114, 97,105,110,116,
+ 0, 98, 84,114, 97,110,115,102,111,114,109, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 80,105,118,111,116, 67,111,110,115,
+116,114, 97,105,110,116, 0, 98, 76,111, 99, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 82,111,116, 76,
+105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,105,122,101, 76,105,109,105,116, 67,111,110,115,116,114, 97,
+105,110,116, 0, 98, 68,105,115,116, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,104,114,105,110,107,
+119,114, 97,112, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 65, 99,116,105,111,110, 77,111,100,105,102,105,101,114, 0, 98,
+ 65, 99,116,105,111,110, 83,116,114,105,112, 0, 98, 78,111,100,101, 83,116, 97, 99,107, 0, 98, 78,111,100,101, 83,111, 99,107,
+101,116, 0, 98, 78,111,100,101, 76,105,110,107, 0, 98, 78,111,100,101, 0, 98, 78,111,100,101, 80,114,101,118,105,101,119, 0,
+117,105, 66,108,111, 99,107, 0, 98, 78,111,100,101, 84,121,112,101, 0, 78,111,100,101, 73,109, 97,103,101, 65,110,105,109, 0,
+ 78,111,100,101, 66,108,117,114, 68, 97,116, 97, 0, 78,111,100,101, 68, 66,108,117,114, 68, 97,116, 97, 0, 78,111,100,101, 66,
+105,108, 97,116,101,114, 97,108, 66,108,117,114, 68, 97,116, 97, 0, 78,111,100,101, 72,117,101, 83, 97,116, 0, 78,111,100,101,
+ 73,109, 97,103,101, 70,105,108,101, 0, 78,111,100,101, 67,104,114,111,109, 97, 0, 78,111,100,101, 84,119,111, 88, 89,115, 0,
+ 78,111,100,101, 84,119,111, 70,108,111, 97,116,115, 0, 78,111,100,101, 71,101,111,109,101,116,114,121, 0, 78,111,100,101, 86,
+101,114,116,101,120, 67,111,108, 0, 78,111,100,101, 68,101,102,111, 99,117,115, 0, 78,111,100,101, 83, 99,114,105,112,116, 68,
+105, 99,116, 0, 78,111,100,101, 71,108, 97,114,101, 0, 78,111,100,101, 84,111,110,101,109, 97,112, 0, 78,111,100,101, 76,101,
+110,115, 68,105,115,116, 0, 78,111,100,101, 67,111,108,111,114, 66, 97,108, 97,110, 99,101, 0, 78,111,100,101, 67,111,108,111,
+114,115,112,105,108,108, 0, 84,101,120, 78,111,100,101, 79,117,116,112,117,116, 0, 67,117,114,118,101, 77, 97,112, 80,111,105,
+110,116, 0, 67,117,114,118,101, 77, 97,112, 0, 66,114,117,115,104, 67,108,111,110,101, 0, 67,117,115,116,111,109, 68, 97,116,
+ 97, 76, 97,121,101,114, 0, 67,117,115,116,111,109, 68, 97,116, 97, 69,120,116,101,114,110, 97,108, 0, 72, 97,105,114, 75,101,
+121, 0, 80, 97,114,116,105, 99,108,101, 75,101,121, 0, 66,111,105,100, 80, 97,114,116,105, 99,108,101, 0, 66,111,105,100, 68,
+ 97,116, 97, 0, 67,104,105,108,100, 80, 97,114,116,105, 99,108,101, 0, 80, 97,114,116,105, 99,108,101, 84, 97,114,103,101,116,
+ 0, 80, 97,114,116,105, 99,108,101, 68,117,112,108,105, 87,101,105,103,104,116, 0, 80, 97,114,116,105, 99,108,101, 68, 97,116,
+ 97, 0, 83, 80, 72, 70,108,117,105,100, 83,101,116,116,105,110,103,115, 0, 80, 97,114,116,105, 99,108,101, 83,101,116,116,105,
+110,103,115, 0, 66,111,105,100, 83,101,116,116,105,110,103,115, 0, 80, 97,114,116,105, 99,108,101, 67, 97, 99,104,101, 75,101,
+121, 0, 75, 68, 84,114,101,101, 0, 80, 97,114,116,105, 99,108,101, 68,114, 97,119, 68, 97,116, 97, 0, 76,105,110,107, 78,111,
+100,101, 0, 98, 71, 80, 68,115,112,111,105,110,116, 0, 98, 71, 80, 68,115,116,114,111,107,101, 0, 98, 71, 80, 68,102,114, 97,
+109,101, 0, 98, 71, 80, 68,108, 97,121,101,114, 0, 82,101,112,111,114,116, 0, 82,101,112,111,114,116, 76,105,115,116, 0, 82,
+101,112,111,114,116, 84,105,109,101,114, 73,110,102,111, 0,119,109, 87,105,110,100,111,119, 77, 97,110, 97,103,101,114, 0,119,
+109, 87,105,110,100,111,119, 0,119,109, 75,101,121, 67,111,110,102,105,103, 0,119,109, 69,118,101,110,116, 0,119,109, 83,117,
+ 98, 87,105,110,100,111,119, 0,119,109, 71,101,115,116,117,114,101, 0,119,109, 75,101,121, 77, 97,112, 73,116,101,109, 0, 80,
+111,105,110,116,101,114, 82, 78, 65, 0,119,109, 75,101,121, 77, 97,112, 0,119,109, 79,112,101,114, 97,116,111,114, 84,121,112,
+101, 0, 70, 77,111,100,105,102,105,101,114, 0, 70, 77,111,100, 95, 71,101,110,101,114, 97,116,111,114, 0, 70, 77,111,100, 95,
+ 70,117,110, 99,116,105,111,110, 71,101,110,101,114, 97,116,111,114, 0, 70, 67, 77, 95, 69,110,118,101,108,111,112,101, 68, 97,
+116, 97, 0, 70, 77,111,100, 95, 69,110,118,101,108,111,112,101, 0, 70, 77,111,100, 95, 67,121, 99,108,101,115, 0, 70, 77,111,
+100, 95, 80,121,116,104,111,110, 0, 70, 77,111,100, 95, 76,105,109,105,116,115, 0, 70, 77,111,100, 95, 78,111,105,115,101, 0,
+ 70, 77,111,100, 95, 83,116,101,112,112,101,100, 0, 68,114,105,118,101,114, 84, 97,114,103,101,116, 0, 68,114,105,118,101,114,
+ 86, 97,114, 0, 67,104, 97,110,110,101,108, 68,114,105,118,101,114, 0, 70, 80,111,105,110,116, 0, 70, 67,117,114,118,101, 0,
+ 65,110,105,109, 77, 97,112, 80, 97,105,114, 0, 65,110,105,109, 77, 97,112,112,101,114, 0, 78,108, 97, 83,116,114,105,112, 0,
+ 78,108, 97, 84,114, 97, 99,107, 0, 75, 83, 95, 80, 97,116,104, 0, 75,101,121,105,110,103, 83,101,116, 0, 65,110,105,109, 79,
+118,101,114,114,105,100,101, 0, 73,100, 65,100,116, 84,101,109,112,108, 97,116,101, 0, 66,111,105,100, 82,117,108,101, 0, 66,
+111,105,100, 82,117,108,101, 71,111, 97,108, 65,118,111,105,100, 0, 66,111,105,100, 82,117,108,101, 65,118,111,105,100, 67,111,
+108,108,105,115,105,111,110, 0, 66,111,105,100, 82,117,108,101, 70,111,108,108,111,119, 76,101, 97,100,101,114, 0, 66,111,105,
+100, 82,117,108,101, 65,118,101,114, 97,103,101, 83,112,101,101,100, 0, 66,111,105,100, 82,117,108,101, 70,105,103,104,116, 0,
+ 66,111,105,100, 83,116, 97,116,101, 0, 70, 76, 85, 73, 68, 95, 51, 68, 0, 87, 84, 85, 82, 66, 85, 76, 69, 78, 67, 69, 0, 0,
+ 84, 76, 69, 78, 1, 0, 1, 0, 2, 0, 2, 0, 4, 0, 4, 0, 4, 0, 4, 0, 8, 0, 0, 0, 8, 0, 12, 0, 8, 0, 4, 0,
+ 8, 0, 8, 0, 16, 0, 12, 0, 12, 0, 24, 0, 16, 0, 16, 0, 32, 0, 16, 0, 16, 0, 20, 0, 76, 0, 52, 0, 40, 2, 0, 0,
+ 32, 0,140, 0,220, 3, 92, 0, 36, 0, 56, 0, 84, 0,112, 0,124, 0, 56, 0, 24, 0, 40, 0,120, 0, 12, 0,104, 0, 36, 0,
+120, 5,156, 1, 0, 0, 0, 0, 0, 0, 8, 1, 48, 1, 84, 1, 24, 0, 8, 3,168, 0, 0, 0, 72, 0, 32, 1,152, 0,132, 0,
+108, 1, 16, 1, 88, 0,160, 2, 76, 0, 60, 1, 0, 0,108, 0,104, 0,148, 0, 56, 0, 8, 0, 16, 0, 12, 0, 0, 0, 92, 1,
+ 0, 0, 0, 0, 0, 0, 40, 1, 20, 0, 44, 0, 60, 0, 24, 0, 12, 0, 12, 0, 4, 0, 8, 0, 8, 0, 0, 0, 28, 0, 84, 0,
+ 32, 0, 8, 0, 12, 0, 8, 0, 8, 0, 4, 0, 4, 0, 0, 1, 32, 0, 12, 0, 16, 0, 64, 0, 24, 0, 12, 0, 40, 0, 64, 0,
+ 80, 0,100, 0,108, 0, 80, 0,108, 0,128, 0, 76, 0, 72, 0,120, 0, 72, 0, 84, 0,204, 0, 48, 0,168, 0,160, 0,172, 0,
+ 72, 0,104, 0,116, 0,196, 0,112, 0,224, 0, 64, 0, 92, 0, 0, 0,144, 0, 32, 0,240, 1,112, 0, 0, 0, 88, 0, 0, 0,
+ 0, 0, 76, 0, 8, 0, 8, 0,244, 0, 88, 0,124, 1, 84, 0, 76, 0, 72, 0, 72, 0,176, 1,120, 0,116, 0, 64, 0,120, 0,
+ 92, 0,220, 0, 40, 0, 0, 0, 92, 0,148, 0, 72, 0, 48, 0, 20, 0,120, 0,144, 0, 88, 1,208, 0,180, 0, 0, 0, 68, 0,
+ 92, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0,112, 1, 28, 0,176, 0,144, 0, 64, 0, 60, 0, 24, 0, 72, 0,232, 3, 56, 0,
+ 20, 0, 16, 0,100, 0, 84, 0, 16, 0,188, 2, 36, 0, 16, 0,156, 0, 80, 0, 88, 0, 36, 0,152, 1, 32, 0, 8, 0, 24, 0,
+ 56, 2, 0, 0, 0, 0, 72, 0, 72, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 0, 40, 0,140, 0, 48, 0,140, 0,208, 0,
+ 24, 0,216, 0,216, 0,200, 1, 60, 0, 0, 0,120, 0, 0, 0,252, 0, 12, 0, 12, 0, 24, 33,112, 16, 24, 16,192, 0,124, 2,
+ 80, 2, 40, 0, 36, 0,188, 0,244, 0, 52, 0,140, 2, 28, 0,112, 1, 88, 0,188, 0, 96, 0, 92, 1, 16, 1, 32, 0,224, 0,
+ 32, 0, 32, 0,112, 2,104, 1, 16, 0, 48, 29, 72, 0, 56, 0,240, 12, 20, 0, 24, 0, 64, 1, 0, 0, 0, 0, 0, 0,248, 0,
+ 0, 0, 16, 1, 80, 0, 28, 0, 16, 0, 8, 0, 44, 0,252, 0,240, 0,168, 1,216, 0, 16, 0, 12, 0, 24, 0, 52, 0, 16, 0,
+ 20, 0, 16, 0, 24, 0, 56, 1, 0, 0, 56, 0, 52, 0, 48, 0, 8, 0, 44, 0, 72, 0,104, 0, 40, 0, 8, 0, 72, 0, 44, 0,
+ 40, 0,108, 0, 72, 0, 68, 0, 76, 0, 80, 0, 60, 0,128, 0, 76, 0, 60, 0, 12, 0, 92, 0, 32, 0, 68, 0, 80, 0, 16, 0,
+ 76, 0,108, 0, 84, 0, 28, 0, 96, 0, 56, 0, 56, 0,108, 0,140, 0, 4, 0, 20, 0, 12, 0, 8, 0, 80, 0, 24, 0, 16, 1,
+144, 0, 16, 0,204, 1, 4, 0, 40, 0,104, 0,216, 0, 64, 0, 44, 0, 72, 0,116, 0, 60, 0,112, 0, 16, 0, 52, 0, 44, 0,
+ 44, 0, 44, 0, 8, 0, 36, 0, 68, 0, 64, 0, 44, 0, 44, 0, 20, 0, 52, 0, 96, 0, 12, 0,108, 0, 92, 0, 52, 0, 28, 0,
+ 28, 0, 28, 0, 52, 0, 20, 0, 60, 0,140, 0, 36, 0,120, 0, 32, 0,180, 0, 0, 0, 0, 0, 0, 0, 16, 0, 40, 0, 28, 0,
+ 12, 0, 12, 0, 16, 1, 44, 0, 8, 0, 8, 0, 64, 0, 32, 0, 24, 0, 8, 0, 24, 0, 32, 0, 8, 0, 96, 0, 20, 0, 32, 0,
+ 12, 0, 44, 0, 20, 0, 68, 0,240, 0, 24, 0, 56, 0, 52, 0, 20, 0, 64, 0, 28, 0, 20, 0,180, 0, 36, 0,200, 1, 96, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 20, 0, 24, 0,172, 0, 24, 0, 28, 0, 20, 0,168, 0,148, 0,152, 0, 0, 0, 0, 0,
+ 0, 0,104, 0, 0, 0, 96, 0, 0, 0, 88, 0, 20, 0, 24, 0, 16, 0, 20, 0, 8, 0, 8, 0, 24, 0, 20, 0, 20, 0, 48, 0,
+208, 1, 28, 1, 16, 0, 68, 0, 0, 1, 20, 0,160, 0, 88, 0, 96, 0,152, 0, 20, 0, 56, 0, 48, 0, 68, 0, 56, 0, 92, 0,
+ 64, 0, 56, 0, 96, 0, 0, 0, 0, 0, 0, 0, 83, 84, 82, 67,152, 1, 0, 0, 10, 0, 2, 0, 10, 0, 0, 0, 10, 0, 1, 0,
+ 11, 0, 3, 0, 11, 0, 0, 0, 11, 0, 1, 0, 9, 0, 2, 0, 12, 0, 2, 0, 9, 0, 3, 0, 9, 0, 4, 0, 13, 0, 2, 0,
+ 2, 0, 5, 0, 2, 0, 6, 0, 14, 0, 2, 0, 7, 0, 5, 0, 7, 0, 6, 0, 15, 0, 2, 0, 4, 0, 5, 0, 4, 0, 6, 0,
+ 16, 0, 2, 0, 8, 0, 5, 0, 8, 0, 6, 0, 17, 0, 3, 0, 4, 0, 5, 0, 4, 0, 6, 0, 4, 0, 7, 0, 18, 0, 3, 0,
+ 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 19, 0, 3, 0, 8, 0, 5, 0, 8, 0, 6, 0, 8, 0, 7, 0, 20, 0, 4, 0,
+ 4, 0, 5, 0, 4, 0, 6, 0, 4, 0, 7, 0, 4, 0, 8, 0, 21, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0,
+ 7, 0, 8, 0, 22, 0, 4, 0, 8, 0, 5, 0, 8, 0, 6, 0, 8, 0, 7, 0, 8, 0, 8, 0, 23, 0, 4, 0, 4, 0, 9, 0,
+ 4, 0, 10, 0, 4, 0, 11, 0, 4, 0, 12, 0, 24, 0, 4, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0,
+ 25, 0, 4, 0, 9, 0, 13, 0, 12, 0, 14, 0, 4, 0, 15, 0, 4, 0, 16, 0, 26, 0, 10, 0, 26, 0, 0, 0, 26, 0, 1, 0,
+ 0, 0, 17, 0, 0, 0, 18, 0, 2, 0, 19, 0, 0, 0, 20, 0, 4, 0, 21, 0, 25, 0, 22, 0, 4, 0, 23, 0, 4, 0, 24, 0,
+ 27, 0, 9, 0, 9, 0, 0, 0, 9, 0, 1, 0, 27, 0, 25, 0, 28, 0, 26, 0, 0, 0, 27, 0, 2, 0, 28, 0, 2, 0, 19, 0,
+ 4, 0, 29, 0, 26, 0, 30, 0, 28, 0, 8, 0, 27, 0, 31, 0, 27, 0, 32, 0, 29, 0, 33, 0, 0, 0, 34, 0, 0, 0, 35, 0,
+ 4, 0, 36, 0, 4, 0, 37, 0, 28, 0, 38, 0, 30, 0, 5, 0, 4, 0, 39, 0, 4, 0, 40, 0, 2, 0, 41, 0, 2, 0, 42, 0,
+ 4, 0, 43, 0, 31, 0, 6, 0, 32, 0, 44, 0, 2, 0, 45, 0, 2, 0, 46, 0, 2, 0, 17, 0, 2, 0, 19, 0, 0, 0, 47, 0,
+ 33, 0, 21, 0, 33, 0, 0, 0, 33, 0, 1, 0, 34, 0, 48, 0, 35, 0, 49, 0, 24, 0, 50, 0, 24, 0, 51, 0, 2, 0, 45, 0,
+ 2, 0, 46, 0, 2, 0, 52, 0, 2, 0, 53, 0, 2, 0, 54, 0, 2, 0, 55, 0, 2, 0, 19, 0, 2, 0, 56, 0, 7, 0, 11, 0,
+ 7, 0, 12, 0, 4, 0, 57, 0, 7, 0, 58, 0, 7, 0, 59, 0, 7, 0, 60, 0, 31, 0, 61, 0, 36, 0, 7, 0, 27, 0, 31, 0,
+ 12, 0, 62, 0, 24, 0, 63, 0, 2, 0, 45, 0, 2, 0, 64, 0, 2, 0, 65, 0, 2, 0, 37, 0, 37, 0, 16, 0, 37, 0, 0, 0,
+ 37, 0, 1, 0, 7, 0, 66, 0, 7, 0, 60, 0, 2, 0, 17, 0, 2, 0, 46, 0, 2, 0, 67, 0, 2, 0, 19, 0, 4, 0, 68, 0,
+ 4, 0, 69, 0, 9, 0, 2, 0, 7, 0, 70, 0, 0, 0, 20, 0, 0, 0, 71, 0, 7, 0, 72, 0, 7, 0, 73, 0, 38, 0, 13, 0,
+ 27, 0, 31, 0, 39, 0, 74, 0, 37, 0, 75, 0, 0, 0, 76, 0, 4, 0, 77, 0, 7, 0, 60, 0, 12, 0, 78, 0, 36, 0, 79, 0,
+ 27, 0, 80, 0, 2, 0, 17, 0, 2, 0, 81, 0, 2, 0, 82, 0, 2, 0, 19, 0, 40, 0, 6, 0, 40, 0, 0, 0, 40, 0, 1, 0,
+ 0, 0, 83, 0, 0, 0, 84, 0, 4, 0, 23, 0, 4, 0, 85, 0, 41, 0, 10, 0, 41, 0, 0, 0, 41, 0, 1, 0, 4, 0, 86, 0,
+ 4, 0, 87, 0, 4, 0, 88, 0, 4, 0, 89, 0, 4, 0, 14, 0, 4, 0, 90, 0, 0, 0, 91, 0, 0, 0, 92, 0, 42, 0, 15, 0,
+ 27, 0, 31, 0, 0, 0, 93, 0, 4, 0, 90, 0, 4, 0, 94, 0, 12, 0, 95, 0, 40, 0, 96, 0, 40, 0, 97, 0, 4, 0, 98, 0,
+ 4, 0, 99, 0, 12, 0,100, 0, 0, 0,101, 0, 4, 0,102, 0, 4, 0,103, 0, 9, 0,104, 0, 8, 0,105, 0, 43, 0, 3, 0,
+ 4, 0,106, 0, 4, 0,107, 0, 9, 0, 2, 0, 44, 0, 15, 0, 27, 0, 31, 0, 39, 0, 74, 0, 2, 0, 17, 0, 2, 0, 19, 0,
+ 7, 0,108, 0, 7, 0,109, 0, 7, 0,110, 0, 7, 0,111, 0, 7, 0,112, 0, 7, 0,113, 0, 7, 0,114, 0, 7, 0,115, 0,
+ 7, 0,116, 0, 36, 0, 79, 0, 32, 0,117, 0, 45, 0, 13, 0, 4, 0,118, 0, 4, 0,119, 0, 4, 0,120, 0, 4, 0,121, 0,
+ 2, 0,122, 0, 2, 0,123, 0, 2, 0, 19, 0, 2, 0,124, 0, 2, 0,125, 0, 2, 0,126, 0, 2, 0,127, 0, 2, 0,128, 0,
+ 46, 0,129, 0, 47, 0, 32, 0, 27, 0, 31, 0, 0, 0, 34, 0, 12, 0,130, 0, 48, 0,131, 0, 49, 0,132, 0, 50, 0,133, 0,
+ 50, 0,134, 0, 2, 0,135, 0, 2, 0,136, 0, 2, 0,124, 0, 2, 0, 19, 0, 2, 0,137, 0, 2, 0, 17, 0, 4, 0,138, 0,
+ 2, 0,139, 0, 2, 0,140, 0, 2, 0,141, 0, 2, 0,142, 0, 2, 0,143, 0, 2, 0,144, 0, 4, 0,145, 0, 4, 0,146, 0,
+ 43, 0,147, 0, 30, 0,148, 0, 7, 0,149, 0, 4, 0,150, 0, 2, 0,151, 0, 2, 0,152, 0, 2, 0,153, 0, 2, 0,154, 0,
+ 7, 0,155, 0, 7, 0,156, 0, 51, 0, 63, 0, 2, 0,157, 0, 2, 0,158, 0, 2, 0,159, 0, 2, 0,160, 0, 32, 0,161, 0,
+ 52, 0,162, 0, 0, 0,163, 0, 0, 0,164, 0, 0, 0,165, 0, 0, 0,166, 0, 0, 0,167, 0, 7, 0,168, 0, 7, 0,169, 0,
+ 7, 0,170, 0, 2, 0,171, 0, 2, 0,172, 0, 2, 0,173, 0, 2, 0,174, 0, 2, 0,175, 0, 2, 0,176, 0, 0, 0,177, 0,
+ 0, 0,178, 0, 7, 0,179, 0, 7, 0,180, 0, 7, 0,181, 0, 7, 0,182, 0, 7, 0,183, 0, 7, 0, 56, 0, 7, 0,184, 0,
+ 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0,188, 0, 7, 0,189, 0, 7, 0,190, 0, 7, 0,191, 0, 7, 0,192, 0,
+ 7, 0,193, 0, 7, 0,194, 0, 7, 0,195, 0, 7, 0,196, 0, 7, 0,197, 0, 7, 0,198, 0, 7, 0,199, 0, 7, 0,200, 0,
+ 7, 0,201, 0, 7, 0,202, 0, 7, 0,203, 0, 7, 0,204, 0, 7, 0,205, 0, 7, 0,206, 0, 7, 0,207, 0, 7, 0,208, 0,
+ 7, 0,209, 0, 7, 0,210, 0, 7, 0,211, 0, 7, 0,212, 0, 7, 0,213, 0, 7, 0,214, 0, 7, 0,215, 0, 7, 0,216, 0,
+ 7, 0,217, 0, 7, 0,218, 0, 53, 0, 15, 0, 0, 0,219, 0, 9, 0,220, 0, 0, 0,221, 0, 0, 0,222, 0, 4, 0,223, 0,
+ 4, 0,224, 0, 9, 0,225, 0, 7, 0,226, 0, 7, 0,227, 0, 7, 0,228, 0, 4, 0,229, 0, 9, 0,230, 0, 9, 0,231, 0,
+ 4, 0,232, 0, 4, 0, 37, 0, 54, 0, 6, 0, 7, 0,179, 0, 7, 0,180, 0, 7, 0,181, 0, 7, 0,233, 0, 7, 0, 66, 0,
+ 4, 0, 63, 0, 55, 0, 5, 0, 2, 0, 19, 0, 2, 0, 36, 0, 2, 0, 63, 0, 2, 0,234, 0, 54, 0,228, 0, 56, 0, 17, 0,
+ 32, 0,161, 0, 47, 0,235, 0, 57, 0,236, 0, 7, 0,237, 0, 7, 0,238, 0, 2, 0, 17, 0, 2, 0,239, 0, 7, 0,109, 0,
+ 7, 0,110, 0, 7, 0,240, 0, 4, 0,241, 0, 2, 0,242, 0, 2, 0,243, 0, 4, 0,124, 0, 4, 0,138, 0, 2, 0,244, 0,
+ 2, 0,245, 0, 58, 0, 22, 0, 2, 0, 19, 0, 2, 0,246, 0, 7, 0,247, 0, 7, 0,248, 0, 2, 0,137, 0, 2, 0,249, 0,
+ 4, 0,250, 0, 4, 0,251, 0, 32, 0,161, 0, 4, 0,252, 0, 2, 0,253, 0, 2, 0,254, 0, 9, 0,255, 0, 7, 0, 0, 1,
+ 7, 0, 1, 1, 2, 0, 2, 1, 2, 0, 3, 1, 2, 0, 4, 1, 2, 0, 5, 1, 7, 0, 6, 1, 7, 0, 7, 1, 55, 0, 8, 1,
+ 59, 0, 13, 0, 4, 0, 9, 1, 4, 0, 10, 1, 2, 0, 11, 1, 2, 0, 19, 0, 2, 0, 12, 1, 2, 0, 13, 1, 32, 0,161, 0,
+ 7, 0, 14, 1, 4, 0, 15, 1, 0, 0, 16, 1, 7, 0, 17, 1, 4, 0, 18, 1, 4, 0,124, 0, 52, 0, 63, 0, 27, 0, 31, 0,
+ 39, 0, 74, 0, 7, 0, 19, 1, 7, 0, 20, 1, 7, 0, 21, 1, 7, 0, 22, 1, 7, 0, 23, 1, 7, 0, 24, 1, 7, 0, 25, 1,
+ 7, 0, 26, 1, 7, 0, 27, 1, 7, 0, 69, 0, 7, 0, 28, 1, 7, 0, 29, 1, 7, 0, 30, 1, 7, 0, 31, 1, 7, 0, 32, 1,
+ 7, 0, 33, 1, 7, 0, 34, 1, 7, 0, 35, 1, 7, 0, 36, 1, 7, 0, 37, 1, 7, 0, 38, 1, 7, 0, 39, 1, 2, 0, 40, 1,
+ 2, 0, 41, 1, 2, 0, 42, 1, 2, 0, 43, 1, 2, 0, 44, 1, 2, 0, 45, 1, 2, 0, 46, 1, 2, 0, 19, 0, 2, 0, 17, 0,
+ 2, 0,239, 0, 7, 0, 47, 1, 7, 0, 48, 1, 7, 0, 49, 1, 7, 0, 50, 1, 4, 0, 51, 1, 4, 0, 52, 1, 2, 0, 53, 1,
+ 2, 0, 54, 1, 2, 0, 12, 1, 2, 0,122, 0, 4, 0, 23, 0, 4, 0,119, 0, 4, 0,120, 0, 4, 0,121, 0, 7, 0, 55, 1,
+ 7, 0, 56, 1, 7, 0, 89, 0, 45, 0, 57, 1, 60, 0, 58, 1, 36, 0, 79, 0, 47, 0,235, 0, 53, 0, 59, 1, 55, 0, 8, 1,
+ 56, 0, 60, 1, 30, 0,148, 0, 58, 0, 61, 1, 59, 0, 62, 1, 0, 0, 63, 1, 0, 0,178, 0, 61, 0, 8, 0, 7, 0, 64, 1,
+ 7, 0, 65, 1, 7, 0,169, 0, 4, 0, 19, 0, 7, 0, 66, 1, 7, 0, 67, 1, 7, 0, 68, 1, 32, 0, 44, 0, 62, 0, 72, 0,
+ 27, 0, 31, 0, 39, 0, 74, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 69, 1, 2, 0,172, 0, 2, 0, 70, 1, 7, 0,179, 0,
+ 7, 0,180, 0, 7, 0,181, 0, 7, 0,182, 0, 7, 0, 71, 1, 7, 0, 72, 1, 7, 0, 73, 1, 7, 0, 74, 1, 7, 0, 75, 1,
+ 7, 0, 76, 1, 7, 0, 77, 1, 7, 0, 78, 1, 7, 0, 79, 1, 7, 0, 80, 1, 7, 0, 81, 1, 63, 0, 82, 1, 2, 0,246, 0,
+ 2, 0, 69, 0, 7, 0,109, 0, 7, 0,110, 0, 7, 0, 83, 1, 7, 0, 84, 1, 7, 0, 85, 1, 7, 0, 86, 1, 7, 0, 87, 1,
+ 2, 0, 88, 1, 2, 0, 89, 1, 2, 0, 90, 1, 2, 0, 91, 1, 0, 0, 92, 1, 0, 0, 93, 1, 2, 0, 94, 1, 2, 0, 95, 1,
+ 2, 0, 96, 1, 2, 0, 97, 1, 2, 0, 98, 1, 7, 0, 99, 1, 7, 0,100, 1, 7, 0,101, 1, 7, 0,102, 1, 2, 0,103, 1,
+ 2, 0, 89, 0, 2, 0,104, 1, 2, 0,105, 1, 2, 0,106, 1, 2, 0,107, 1, 7, 0,108, 1, 7, 0,109, 1, 7, 0,110, 1,
+ 7, 0,111, 1, 7, 0,112, 1, 7, 0,113, 1, 7, 0,114, 1, 7, 0,115, 1, 7, 0,116, 1, 7, 0,117, 1, 7, 0,118, 1,
+ 7, 0,119, 1, 2, 0,120, 1, 0, 0,121, 1, 36, 0, 79, 0, 51, 0,122, 1, 2, 0,123, 1, 0, 0,124, 1, 30, 0,148, 0,
+ 64, 0, 18, 0, 7, 0,125, 1, 7, 0,126, 1, 7, 0,127, 1, 7, 0,128, 1, 7, 0,129, 1, 7, 0,130, 1, 7, 0,131, 1,
+ 7, 0,132, 1, 7, 0,133, 1, 7, 0,134, 1, 2, 0,135, 1, 2, 0,136, 1, 2, 0,137, 1, 2, 0,138, 1, 7, 0,139, 1,
+ 7, 0,140, 1, 7, 0,141, 1, 7, 0,142, 1, 65, 0,124, 0, 27, 0, 31, 0, 39, 0, 74, 0, 2, 0,143, 1, 2, 0, 19, 0,
+ 7, 0,179, 0, 7, 0,180, 0, 7, 0,181, 0, 7, 0,144, 1, 7, 0,145, 1, 7, 0,146, 1, 7, 0,147, 1, 7, 0,148, 1,
+ 7, 0,149, 1, 7, 0,150, 1, 7, 0,151, 1, 7, 0,152, 1, 7, 0,153, 1, 7, 0,154, 1, 7, 0,155, 1, 7, 0,156, 1,
+ 7, 0,157, 1, 7, 0,158, 1, 7, 0,159, 1, 7, 0,160, 1, 7, 0,161, 1, 7, 0,162, 1, 7, 0,163, 1, 64, 0,164, 1,
+ 7, 0,165, 1, 7, 0,166, 1, 7, 0,167, 1, 7, 0,168, 1, 7, 0,169, 1, 7, 0,170, 1, 7, 0,171, 1, 2, 0,172, 1,
+ 2, 0,173, 1, 2, 0,174, 1, 0, 0,175, 1, 0, 0,176, 1, 7, 0,177, 1, 7, 0,178, 1, 2, 0,179, 1, 2, 0,180, 1,
+ 7, 0,181, 1, 7, 0,182, 1, 7, 0,183, 1, 7, 0,184, 1, 2, 0,185, 1, 2, 0,186, 1, 4, 0, 69, 1, 4, 0,187, 1,
+ 2, 0,188, 1, 2, 0,189, 1, 2, 0,190, 1, 2, 0,191, 1, 7, 0,192, 1, 7, 0,193, 1, 7, 0,194, 1, 7, 0,195, 1,
+ 7, 0,196, 1, 7, 0,197, 1, 7, 0,198, 1, 7, 0,199, 1, 7, 0,200, 1, 7, 0,201, 1, 0, 0,202, 1, 7, 0,203, 1,
+ 7, 0,204, 1, 7, 0,205, 1, 4, 0,206, 1, 0, 0,207, 1, 0, 0,104, 1, 0, 0,208, 1, 0, 0, 63, 1, 2, 0,209, 1,
+ 2, 0,210, 1, 2, 0,123, 1, 2, 0,211, 1, 2, 0,212, 1, 2, 0,213, 1, 7, 0,214, 1, 7, 0,215, 1, 7, 0,216, 1,
+ 7, 0,217, 1, 7, 0,218, 1, 2, 0,157, 0, 2, 0,158, 0, 55, 0,219, 1, 55, 0,220, 1, 0, 0,221, 1, 0, 0,222, 1,
+ 0, 0,223, 1, 0, 0,224, 1, 2, 0,225, 1, 2, 0,226, 1, 7, 0,227, 1, 7, 0,228, 1, 51, 0,122, 1, 60, 0, 58, 1,
+ 36, 0, 79, 0, 66, 0,229, 1, 30, 0,148, 0, 7, 0,230, 1, 7, 0,231, 1, 7, 0,232, 1, 7, 0,233, 1, 7, 0,234, 1,
+ 2, 0,235, 1, 2, 0, 69, 0, 7, 0,236, 1, 7, 0,237, 1, 7, 0,238, 1, 7, 0,239, 1, 7, 0,240, 1, 7, 0,241, 1,
+ 7, 0,242, 1, 7, 0,243, 1, 7, 0,244, 1, 2, 0,245, 1, 2, 0,246, 1, 4, 0,247, 1, 4, 0,248, 1, 12, 0,249, 1,
+ 67, 0, 4, 0, 27, 0, 31, 0, 0, 0,250, 1, 68, 0, 2, 0, 43, 0,147, 0, 69, 0, 26, 0, 69, 0, 0, 0, 69, 0, 1, 0,
+ 70, 0,251, 1, 4, 0,252, 1, 4, 0,253, 1, 4, 0,254, 1, 4, 0,255, 1, 4, 0, 0, 2, 4, 0, 1, 2, 2, 0, 17, 0,
+ 2, 0, 19, 0, 2, 0, 2, 2, 2, 0, 3, 2, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 0, 4, 2, 7, 0, 5, 2,
+ 7, 0, 6, 2, 7, 0, 7, 2, 7, 0, 8, 2, 7, 0, 9, 2, 7, 0, 10, 2, 7, 0, 23, 0, 7, 0, 11, 2, 7, 0, 12, 2,
+ 71, 0, 20, 0, 27, 0, 31, 0, 39, 0, 74, 0, 70, 0,251, 1, 12, 0, 13, 2, 12, 0, 14, 2, 12, 0, 15, 2, 36, 0, 79, 0,
+ 65, 0, 16, 2, 0, 0, 19, 0, 0, 0, 17, 2, 2, 0, 18, 2, 2, 0,171, 0, 2, 0, 37, 0, 7, 0, 64, 1, 7, 0,169, 0,
+ 7, 0, 65, 1, 7, 0, 19, 2, 7, 0, 20, 2, 7, 0, 21, 2, 69, 0, 22, 2, 35, 0, 11, 0, 7, 0, 23, 2, 7, 0, 24, 2,
+ 7, 0, 25, 2, 7, 0,248, 0, 2, 0, 54, 0, 0, 0, 26, 2, 0, 0, 27, 2, 0, 0, 28, 2, 0, 0, 29, 2, 0, 0, 30, 2,
+ 0, 0, 31, 2, 34, 0, 7, 0, 7, 0, 32, 2, 7, 0, 24, 2, 7, 0, 25, 2, 2, 0, 28, 2, 2, 0, 31, 2, 7, 0,248, 0,
+ 7, 0, 37, 0, 72, 0, 21, 0, 72, 0, 0, 0, 72, 0, 1, 0, 2, 0, 17, 0, 2, 0, 33, 2, 2, 0, 31, 2, 2, 0, 19, 0,
+ 2, 0, 34, 2, 2, 0, 35, 2, 2, 0, 36, 2, 2, 0, 37, 2, 2, 0, 38, 2, 2, 0, 39, 2, 2, 0, 40, 2, 2, 0, 41, 2,
+ 7, 0, 42, 2, 7, 0, 43, 2, 34, 0, 48, 0, 35, 0, 49, 0, 2, 0, 44, 2, 2, 0, 45, 2, 4, 0, 46, 2, 73, 0, 5, 0,
+ 2, 0, 47, 2, 2, 0, 33, 2, 0, 0, 19, 0, 0, 0, 37, 0, 2, 0, 69, 0, 74, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0,
+ 7, 0, 8, 0, 7, 0, 48, 2, 75, 0, 2, 0, 12, 0, 49, 2, 76, 0, 50, 2, 77, 0, 68, 0, 27, 0, 31, 0, 39, 0, 74, 0,
+ 70, 0,251, 1, 12, 0, 51, 2, 12, 0, 14, 2, 75, 0, 52, 2, 32, 0, 53, 2, 32, 0, 54, 2, 32, 0, 55, 2, 36, 0, 79, 0,
+ 78, 0, 56, 2, 38, 0, 57, 2, 65, 0, 16, 2, 12, 0, 58, 2, 7, 0, 64, 1, 7, 0,169, 0, 7, 0, 65, 1, 2, 0,171, 0,
+ 2, 0, 89, 0, 2, 0, 59, 2, 2, 0, 60, 2, 2, 0, 61, 2, 7, 0, 62, 2, 7, 0, 63, 2, 2, 0, 64, 2, 2, 0, 18, 2,
+ 2, 0, 19, 0, 2, 0, 65, 2, 7, 0, 66, 2, 7, 0, 67, 2, 7, 0, 68, 2, 2, 0, 36, 2, 2, 0, 37, 2, 2, 0, 69, 2,
+ 2, 0, 70, 2, 4, 0, 71, 2, 9, 0, 72, 2, 2, 0, 23, 0, 2, 0, 95, 0, 2, 0, 66, 0, 2, 0, 73, 2, 7, 0, 74, 2,
+ 7, 0, 75, 2, 7, 0, 76, 2, 7, 0, 77, 2, 7, 0, 78, 2, 7, 0, 79, 2, 7, 0, 80, 2, 7, 0, 81, 2, 7, 0, 82, 2,
+ 7, 0, 83, 2, 0, 0, 84, 2, 79, 0, 85, 2, 80, 0, 86, 2, 0, 0, 87, 2, 67, 0, 88, 2, 67, 0, 89, 2, 67, 0, 90, 2,
+ 67, 0, 91, 2, 4, 0, 92, 2, 7, 0, 93, 2, 4, 0, 94, 2, 4, 0, 95, 2, 74, 0, 96, 2, 4, 0, 97, 2, 4, 0, 98, 2,
+ 73, 0, 99, 2, 73, 0,100, 2, 81, 0, 41, 0, 27, 0, 31, 0, 39, 0, 74, 0, 70, 0,251, 1, 12, 0,101, 2, 36, 0, 79, 0,
+ 38, 0, 57, 2, 65, 0, 16, 2, 82, 0,102, 2, 83, 0,103, 2, 84, 0,104, 2, 85, 0,105, 2, 86, 0,106, 2, 87, 0,107, 2,
+ 88, 0,108, 2, 89, 0,109, 2, 81, 0,110, 2, 90, 0,111, 2, 91, 0,112, 2, 92, 0,113, 2, 92, 0,114, 2, 92, 0,115, 2,
+ 4, 0, 53, 0, 4, 0,116, 2, 4, 0,117, 2, 4, 0,118, 2, 4, 0,119, 2, 2, 0,171, 0, 2, 0,120, 2, 7, 0, 64, 1,
+ 7, 0,169, 0, 7, 0, 65, 1, 7, 0,121, 2, 4, 0, 59, 2, 2, 0,122, 2, 2, 0, 19, 0, 2, 0,123, 2, 2, 0,124, 2,
+ 2, 0, 18, 2, 2, 0,125, 2, 93, 0,126, 2, 94, 0,127, 2, 84, 0, 8, 0, 9, 0,128, 2, 7, 0,129, 2, 4, 0,130, 2,
+ 0, 0, 19, 0, 0, 0,131, 2, 2, 0, 69, 1, 2, 0,132, 2, 2, 0,133, 2, 82, 0, 7, 0, 4, 0,134, 2, 4, 0,135, 2,
+ 4, 0,136, 2, 4, 0,137, 2, 2, 0, 33, 2, 0, 0,138, 2, 0, 0, 19, 0, 86, 0, 5, 0, 4, 0,134, 2, 4, 0,135, 2,
+ 0, 0,139, 2, 0, 0,140, 2, 2, 0, 19, 0, 95, 0, 2, 0, 4, 0,141, 2, 7, 0, 25, 2, 87, 0, 3, 0, 95, 0,142, 2,
+ 4, 0,143, 2, 4, 0, 19, 0, 85, 0, 6, 0, 7, 0,144, 2, 2, 0,145, 2, 2, 0, 33, 2, 0, 0, 19, 0, 0, 0,140, 2,
+ 0, 0, 61, 2, 88, 0, 4, 0, 0, 0,233, 0, 0, 0,179, 0, 0, 0,180, 0, 0, 0,181, 0, 96, 0, 6, 0, 47, 0,128, 2,
+ 0, 0, 19, 0, 0, 0,131, 2, 2, 0, 69, 1, 2, 0,132, 2, 2, 0,133, 2, 97, 0, 1, 0, 7, 0,146, 2, 98, 0, 5, 0,
+ 0, 0,233, 0, 0, 0,179, 0, 0, 0,180, 0, 0, 0,181, 0, 4, 0, 37, 0, 89, 0, 1, 0, 7, 0,147, 2, 90, 0, 2, 0,
+ 4, 0,148, 2, 4, 0, 17, 0, 83, 0, 7, 0, 7, 0,129, 2, 47, 0,128, 2, 0, 0, 19, 0, 0, 0,131, 2, 2, 0, 69, 1,
+ 2, 0,132, 2, 2, 0,133, 2, 99, 0, 1, 0, 7, 0,149, 2,100, 0, 1, 0, 4, 0,150, 2,101, 0, 1, 0, 0, 0,151, 2,
+102, 0, 1, 0, 7, 0,129, 2,103, 0, 3, 0, 4, 0,152, 2, 0, 0, 92, 0, 7, 0,153, 2,104, 0, 4, 0, 7, 0,233, 0,
+ 7, 0,179, 0, 7, 0,180, 0, 7, 0,181, 0,105, 0, 1, 0,104, 0,130, 2,106, 0, 5, 0, 4, 0,154, 2, 4, 0,155, 2,
+ 0, 0, 19, 0, 0, 0, 33, 2, 0, 0, 61, 2,107, 0, 2, 0, 4, 0,156, 2, 4, 0,155, 2,108, 0, 10, 0,108, 0, 0, 0,
+108, 0, 1, 0,106, 0,157, 2,105, 0,158, 2,107, 0,159, 2, 4, 0, 53, 0, 4, 0,117, 2, 4, 0,116, 2, 4, 0, 37, 0,
+ 85, 0,160, 2, 93, 0, 14, 0, 12, 0,161, 2, 85, 0,160, 2, 0, 0,162, 2, 0, 0,163, 2, 0, 0,164, 2, 0, 0,165, 2,
+ 0, 0,166, 2, 0, 0,167, 2, 0, 0,168, 2, 0, 0, 19, 0, 92, 0,113, 2, 92, 0,115, 2, 2, 0,169, 2, 0, 0,170, 2,
+ 94, 0, 8, 0, 4, 0,171, 2, 4, 0,172, 2, 82, 0,173, 2, 86, 0,174, 2, 4, 0,117, 2, 4, 0,116, 2, 4, 0, 53, 0,
+ 4, 0, 37, 0,109, 0, 9, 0,109, 0, 0, 0,109, 0, 1, 0, 4, 0, 17, 0, 4, 0, 69, 1, 4, 0,175, 2, 4, 0, 37, 0,
+ 0, 0, 20, 0, 46, 0,129, 0, 0, 0,176, 2,110, 0, 7, 0,109, 0,177, 2, 2, 0,178, 2, 2, 0,161, 2, 2, 0,179, 2,
+ 2, 0, 90, 0, 9, 0,180, 2, 9, 0,181, 2,111, 0, 3, 0,109, 0,177, 2, 32, 0,161, 0, 0, 0, 20, 0,112, 0, 5, 0,
+109, 0,177, 2, 32, 0,161, 0, 0, 0, 20, 0, 2, 0,182, 2, 0, 0,183, 2,113, 0, 5, 0,109, 0,177, 2, 7, 0, 87, 0,
+ 7, 0,184, 2, 4, 0,185, 2, 4, 0,186, 2,114, 0, 5, 0,109, 0,177, 2, 32, 0,187, 2, 0, 0, 71, 0, 4, 0, 69, 1,
+ 4, 0, 19, 0,115, 0, 13, 0,109, 0,177, 2, 32, 0,188, 2, 32, 0,189, 2, 32, 0,190, 2, 32, 0,191, 2, 7, 0,192, 2,
+ 7, 0,193, 2, 7, 0,184, 2, 7, 0,194, 2, 4, 0,195, 2, 4, 0,196, 2, 4, 0, 90, 0, 4, 0,197, 2,116, 0, 5, 0,
+109, 0,177, 2, 2, 0,198, 2, 2, 0, 19, 0, 7, 0,199, 2, 32, 0,200, 2,117, 0, 3, 0,109, 0,177, 2, 7, 0,201, 2,
+ 4, 0, 90, 0,118, 0, 10, 0,109, 0,177, 2, 7, 0,202, 2, 4, 0,203, 2, 4, 0, 37, 0, 2, 0, 90, 0, 2, 0,204, 2,
+ 2, 0,205, 2, 2, 0,206, 2, 7, 0,207, 2, 0, 0,208, 2,119, 0, 3, 0,109, 0,177, 2, 7, 0, 37, 0, 4, 0, 17, 0,
+120, 0, 6, 0,109, 0,177, 2,121, 0,209, 2,122, 0,210, 2,123, 0,211, 2, 7, 0,212, 2, 4, 0, 17, 0,124, 0, 11, 0,
+109, 0,177, 2, 52, 0,213, 2, 7, 0,214, 2, 4, 0,215, 2, 0, 0,208, 2, 7, 0,216, 2, 4, 0,217, 2, 32, 0,218, 2,
+ 0, 0,219, 2, 4, 0,220, 2, 4, 0, 37, 0,125, 0, 12, 0,109, 0,177, 2, 32, 0,221, 2, 47, 0,222, 2, 4, 0, 90, 0,
+ 4, 0,223, 2, 7, 0,224, 2, 7, 0,225, 2, 7, 0,226, 2, 7, 0,227, 2, 0, 0,219, 2, 4, 0,220, 2, 4, 0, 37, 0,
+126, 0, 3, 0,109, 0,177, 2, 7, 0,228, 2, 4, 0,229, 2,127, 0, 5, 0,109, 0,177, 2, 7, 0,230, 2, 0, 0,208, 2,
+ 2, 0, 19, 0, 2, 0,231, 2,128, 0, 8, 0,109, 0,177, 2, 32, 0,161, 0, 7, 0,230, 2, 7, 0,248, 0, 7, 0,106, 0,
+ 0, 0,208, 2, 2, 0, 19, 0, 2, 0, 17, 0,129, 0, 21, 0,109, 0,177, 2, 32, 0,232, 2, 0, 0,208, 2, 52, 0,213, 2,
+ 32, 0,218, 2, 2, 0, 19, 0, 2, 0, 37, 0, 7, 0,233, 2, 7, 0,234, 2, 7, 0,235, 2, 7, 0, 66, 2, 7, 0,236, 2,
+ 7, 0,237, 2, 7, 0,238, 2, 7, 0,239, 2, 4, 0,217, 2, 4, 0,220, 2, 0, 0,219, 2, 7, 0,240, 2, 7, 0,241, 2,
+ 7, 0, 89, 0,130, 0, 7, 0,109, 0,177, 2, 2, 0,242, 2, 2, 0,243, 2, 4, 0, 69, 0, 32, 0,161, 0, 7, 0,244, 2,
+ 0, 0,208, 2,131, 0, 10, 0,109, 0,177, 2, 32, 0,161, 0, 0, 0,245, 2, 7, 0,246, 2, 7, 0,247, 2, 7, 0,239, 2,
+ 4, 0,248, 2, 4, 0,249, 2, 7, 0,250, 2, 0, 0, 20, 0,132, 0, 1, 0,109, 0,177, 2,133, 0, 7, 0,109, 0,177, 2,
+ 46, 0,129, 0,134, 0,251, 2,135, 0,252, 2,136, 0,253, 2,137, 0,254, 2, 12, 0,255, 2,138, 0, 13, 0,109, 0,177, 2,
+ 85, 0, 0, 3, 85, 0, 1, 3, 85, 0, 2, 3, 85, 0, 3, 3, 85, 0, 4, 3, 85, 0, 5, 3, 82, 0, 6, 3, 4, 0, 7, 3,
+ 4, 0, 8, 3, 7, 0,212, 2, 7, 0, 37, 0,139, 0, 9, 3,140, 0, 7, 0,109, 0,177, 2, 85, 0, 0, 3, 85, 0, 10, 3,
+141, 0, 11, 3,142, 0, 9, 3, 4, 0, 12, 3, 4, 0, 7, 3,143, 0, 4, 0,109, 0,177, 2, 32, 0,161, 0, 4, 0, 13, 3,
+ 4, 0, 37, 0,144, 0, 2, 0, 4, 0, 14, 3, 7, 0, 25, 2,145, 0, 2, 0, 4, 0,120, 0, 4, 0, 15, 3,146, 0, 24, 0,
+109, 0,177, 2, 32, 0,161, 0, 0, 0,208, 2, 2, 0, 16, 3, 2, 0, 19, 0, 2, 0, 69, 1, 2, 0, 37, 0,144, 0, 17, 3,
+ 4, 0, 18, 3, 7, 0, 19, 3, 4, 0, 53, 0, 4, 0, 20, 3,145, 0, 21, 3,144, 0, 22, 3, 4, 0, 23, 3, 4, 0, 24, 3,
+ 4, 0, 25, 3, 4, 0, 15, 3, 7, 0, 26, 3, 7, 0, 27, 3, 7, 0, 28, 3, 7, 0, 29, 3, 7, 0, 30, 3, 9, 0, 31, 3,
+147, 0, 8, 0,109, 0,177, 2,148, 0, 32, 3,141, 0, 11, 3, 4, 0, 33, 3, 4, 0, 34, 3, 4, 0, 35, 3, 2, 0, 19, 0,
+ 2, 0, 56, 0,149, 0, 8, 0,109, 0,177, 2, 32, 0, 44, 0, 2, 0,252, 0, 2, 0, 19, 0, 2, 0,198, 2, 2, 0, 56, 0,
+ 7, 0, 36, 3, 7, 0, 37, 3,150, 0, 5, 0,109, 0,177, 2, 4, 0, 38, 3, 2, 0, 19, 0, 2, 0, 39, 3, 7, 0, 40, 3,
+151, 0, 8, 0,109, 0,177, 2, 0, 0, 41, 3, 0, 0, 42, 3, 0, 0,167, 2, 0, 0, 43, 3, 0, 0, 44, 3, 0, 0, 90, 0,
+ 0, 0, 61, 2,152, 0, 3, 0,109, 0,177, 2,153, 0, 45, 3,137, 0,254, 2,154, 0, 10, 0,109, 0,177, 2, 32, 0, 46, 3,
+ 32, 0, 47, 3, 0, 0, 48, 3, 7, 0, 49, 3, 2, 0, 50, 3, 2, 0, 51, 3, 0, 0, 52, 3, 0, 0, 53, 3, 0, 0,183, 2,
+155, 0, 9, 0,109, 0,177, 2, 32, 0, 54, 3, 0, 0, 48, 3, 7, 0, 55, 3, 7, 0, 56, 3, 0, 0, 69, 1, 0, 0,198, 2,
+ 0, 0, 57, 3, 0, 0, 37, 0,156, 0, 1, 0,109, 0,177, 2,157, 0, 8, 0,109, 0,177, 2, 0, 0,208, 2, 7, 0,120, 0,
+ 7, 0, 58, 3, 7, 0, 59, 3, 7, 0, 60, 3, 7, 0, 61, 3, 4, 0, 19, 0,158, 0, 9, 0,109, 0,177, 2, 32, 0, 62, 3,
+ 4, 0, 63, 3, 4, 0, 64, 3, 4, 0, 65, 3, 7, 0, 66, 3, 7, 0, 67, 3, 2, 0,198, 2, 2, 0, 19, 0,159, 0, 28, 0,
+ 27, 0, 31, 0, 2, 0, 34, 2, 2, 0, 35, 2, 2, 0, 68, 3, 2, 0, 19, 0, 2, 0, 69, 3, 2, 0, 70, 3, 2, 0, 71, 3,
+ 2, 0, 69, 0, 0, 0, 72, 3, 0, 0, 73, 3, 0, 0, 74, 3, 0, 0, 17, 0, 4, 0, 37, 0, 7, 0, 75, 3, 7, 0, 76, 3,
+ 7, 0, 77, 3, 7, 0, 78, 3, 7, 0, 79, 3, 7, 0, 80, 3, 34, 0, 81, 3, 36, 0, 79, 0, 38, 0, 57, 2, 87, 0,107, 2,
+ 0, 0, 71, 0, 7, 0, 82, 3, 7, 0, 83, 3,159, 0, 84, 3,160, 0, 3, 0,160, 0, 0, 0,160, 0, 1, 0, 0, 0, 20, 0,
+ 70, 0, 3, 0, 7, 0, 85, 3, 4, 0, 19, 0, 4, 0, 37, 0, 32, 0,126, 0, 27, 0, 31, 0, 39, 0, 74, 0,161, 0, 86, 3,
+ 2, 0, 17, 0, 2, 0, 87, 3, 4, 0, 88, 3, 4, 0, 89, 3, 4, 0, 90, 3, 0, 0, 91, 3, 32, 0, 38, 0, 32, 0, 92, 3,
+ 32, 0, 93, 3, 32, 0, 94, 3, 32, 0, 95, 3, 36, 0, 79, 0, 78, 0, 56, 2, 70, 0,251, 1,162, 0, 96, 3,162, 0, 97, 3,
+163, 0, 98, 3, 9, 0, 2, 0,164, 0, 99, 3,165, 0,100, 3,166, 0,101, 3, 12, 0,102, 3, 12, 0,101, 2, 12, 0, 14, 2,
+ 12, 0,103, 3, 12, 0,104, 3, 4, 0, 69, 1, 4, 0,105, 3, 65, 0, 16, 2, 0, 0,106, 3, 4, 0, 18, 2, 4, 0,107, 3,
+ 7, 0, 64, 1, 7, 0,108, 3, 7, 0,109, 3, 7, 0,169, 0, 7, 0,110, 3, 7, 0, 65, 1, 7, 0,111, 3, 7, 0, 4, 2,
+ 7, 0,112, 3, 7, 0,113, 3, 7, 0,114, 3, 7, 0,115, 3, 7, 0,116, 3, 7, 0,117, 3, 7, 0,246, 2, 7, 0,118, 3,
+ 7, 0,237, 0, 4, 0,119, 3, 2, 0, 19, 0, 2, 0,120, 3, 2, 0,121, 3, 2, 0,122, 3, 2, 0,123, 3, 2, 0,124, 3,
+ 2, 0,125, 3, 2, 0,126, 3, 2, 0,127, 3, 2, 0,128, 3, 2, 0,129, 3, 2, 0,130, 3, 4, 0,131, 3, 4, 0,132, 3,
+ 4, 0,133, 3, 4, 0,134, 3, 7, 0,135, 3, 7, 0, 93, 2, 7, 0,136, 3, 7, 0,137, 3, 7, 0,138, 3, 7, 0,139, 3,
+ 7, 0,140, 3, 7, 0,212, 0, 7, 0,141, 3, 7, 0,142, 3, 7, 0,143, 3, 7, 0,144, 3, 2, 0,145, 3, 0, 0,146, 3,
+ 0, 0,147, 3, 0, 0,148, 3, 0, 0,149, 3, 7, 0,150, 3, 7, 0,151, 3, 12, 0,152, 3, 12, 0,153, 3, 12, 0,154, 3,
+ 12, 0,155, 3, 7, 0,156, 3, 2, 0,148, 2, 2, 0,157, 3, 7, 0,130, 2, 4, 0,158, 3, 4, 0,159, 3,167, 0,160, 3,
+ 2, 0,161, 3, 2, 0,244, 0, 7, 0,162, 3, 12, 0,163, 3, 12, 0,164, 3, 12, 0,165, 3, 12, 0,166, 3,168, 0, 61, 1,
+169, 0,167, 3, 66, 0,168, 3, 2, 0,169, 3, 2, 0,170, 3, 2, 0,171, 3, 2, 0,172, 3, 7, 0,122, 2, 2, 0,173, 3,
+ 2, 0,174, 3,153, 0,175, 3,141, 0,176, 3,141, 0,177, 3, 4, 0,178, 3, 4, 0,179, 3, 4, 0,180, 3, 4, 0, 69, 0,
+ 12, 0,181, 3, 12, 0,182, 3, 12, 0,183, 3,170, 0, 14, 0,170, 0, 0, 0,170, 0, 1, 0, 32, 0, 38, 0, 7, 0,246, 2,
+ 7, 0, 66, 1, 7, 0,247, 2, 7, 0,239, 2, 0, 0, 20, 0, 4, 0,248, 2, 4, 0,249, 2, 4, 0,184, 3, 2, 0, 17, 0,
+ 2, 0,185, 3, 7, 0,250, 2,171, 0, 12, 0,171, 0, 0, 0,171, 0, 1, 0, 32, 0, 44, 0, 4, 0,186, 3, 4, 0,148, 2,
+ 4, 0,187, 3, 4, 0, 17, 0, 4, 0,188, 3, 7, 0, 66, 1, 7, 0,189, 3, 7, 0,190, 3, 7, 0,146, 2,168, 0, 40, 0,
+ 4, 0, 19, 0, 2, 0,191, 3, 2, 0,192, 3, 2, 0,239, 2, 2, 0,193, 3, 2, 0,194, 3, 2, 0,195, 3, 2, 0,196, 3,
+ 2, 0,197, 3, 7, 0,198, 3, 7, 0,199, 3, 7, 0,200, 3, 7, 0,201, 3, 7, 0,202, 3, 7, 0,203, 3, 7, 0,204, 3,
+ 7, 0,205, 3, 7, 0,206, 3, 7, 0,207, 3, 7, 0,208, 3, 7, 0,209, 3, 7, 0,210, 3, 7, 0,211, 3, 7, 0,212, 3,
+ 7, 0,213, 3, 7, 0,214, 3, 7, 0,215, 3, 7, 0,216, 3, 7, 0,217, 3, 7, 0,218, 3, 7, 0,219, 3, 7, 0,220, 3,
+ 7, 0,221, 3, 7, 0,222, 3, 7, 0,223, 3, 7, 0,224, 3, 52, 0,162, 0,172, 0,225, 3, 7, 0,226, 3, 4, 0,186, 2,
+173, 0, 5, 0, 66, 0,229, 1, 7, 0,227, 3, 7, 0,228, 3, 2, 0, 19, 0, 2, 0,229, 3,174, 0, 9, 0,174, 0, 0, 0,
+174, 0, 1, 0, 4, 0,230, 3, 4, 0,231, 3, 4, 0,232, 3, 4, 0, 19, 0, 4, 0,233, 3, 9, 0,234, 3, 9, 0,235, 3,
+137, 0, 19, 0,137, 0, 0, 0,137, 0, 1, 0, 4, 0, 19, 0, 4, 0,236, 3, 4, 0,237, 3, 4, 0,238, 3, 4, 0,239, 3,
+ 4, 0,240, 3, 4, 0,241, 3, 4, 0,231, 3, 4, 0,148, 2, 4, 0, 56, 0, 0, 0,242, 3, 0, 0,243, 3, 0, 0,244, 3,
+ 0, 0,245, 3, 12, 0,246, 3,175, 0,247, 3, 9, 0,248, 3,176, 0, 1, 0, 7, 0, 32, 2,167, 0, 30, 0, 4, 0, 19, 0,
+ 7, 0,249, 3, 7, 0,250, 3, 7, 0,251, 3, 4, 0,252, 3, 4, 0,253, 3, 4, 0,254, 3, 4, 0,255, 3, 7, 0, 0, 4,
+ 7, 0, 1, 4, 7, 0, 2, 4, 7, 0, 3, 4, 7, 0, 4, 4, 7, 0, 5, 4, 7, 0, 6, 4, 7, 0, 7, 4, 7, 0, 8, 4,
+ 7, 0, 9, 4, 7, 0, 10, 4, 7, 0, 11, 4, 7, 0, 12, 4, 7, 0, 13, 4, 7, 0, 14, 4, 7, 0, 15, 4, 7, 0, 16, 4,
+ 7, 0, 17, 4, 4, 0, 18, 4, 4, 0, 19, 4, 7, 0, 20, 4, 7, 0,141, 3,169, 0, 54, 0, 4, 0,231, 3, 4, 0, 21, 4,
+177, 0, 22, 4,178, 0, 23, 4, 0, 0, 37, 0, 0, 0, 24, 4, 2, 0, 25, 4, 7, 0, 26, 4, 0, 0, 27, 4, 7, 0, 28, 4,
+ 7, 0, 29, 4, 7, 0, 30, 4, 7, 0, 31, 4, 7, 0, 32, 4, 7, 0, 33, 4, 7, 0, 34, 4, 7, 0, 35, 4, 7, 0, 36, 4,
+ 2, 0, 37, 4, 0, 0, 38, 4, 2, 0, 39, 4, 7, 0, 40, 4, 7, 0, 41, 4, 0, 0, 42, 4, 4, 0,121, 0, 4, 0, 43, 4,
+ 4, 0, 44, 4, 2, 0, 45, 4, 2, 0, 46, 4,176, 0, 47, 4, 4, 0, 48, 4, 4, 0, 81, 0, 7, 0, 49, 4, 7, 0, 50, 4,
+ 7, 0, 51, 4, 7, 0, 52, 4, 2, 0, 53, 4, 2, 0, 54, 4, 2, 0, 55, 4, 2, 0, 56, 4, 2, 0, 57, 4, 2, 0, 58, 4,
+ 2, 0, 59, 4, 2, 0, 60, 4,179, 0, 61, 4, 7, 0, 62, 4, 7, 0, 63, 4,137, 0, 64, 4, 12, 0,255, 2,173, 0, 65, 4,
+ 7, 0, 66, 4, 7, 0, 67, 4, 7, 0, 68, 4, 0, 0, 69, 4,153, 0, 51, 0,152, 0, 70, 4, 2, 0, 17, 0, 2, 0, 71, 4,
+ 2, 0, 72, 4, 2, 0, 73, 4, 7, 0, 74, 4, 2, 0, 75, 4, 2, 0, 76, 4, 7, 0, 77, 4, 2, 0, 78, 4, 2, 0, 79, 4,
+ 7, 0, 80, 4, 7, 0, 81, 4, 7, 0, 82, 4, 7, 0, 83, 4, 7, 0, 84, 4, 4, 0, 85, 4, 4, 0, 86, 4, 7, 0, 87, 4,
+ 4, 0, 88, 4, 7, 0, 89, 4, 7, 0, 90, 4, 7, 0, 91, 4, 81, 0, 92, 4, 81, 0, 93, 4, 81, 0, 94, 4, 0, 0, 95, 4,
+ 7, 0, 96, 4, 7, 0, 97, 4, 36, 0, 79, 0, 2, 0, 98, 4, 0, 0, 99, 4, 0, 0,100, 4, 7, 0,101, 4, 4, 0,102, 4,
+ 7, 0,103, 4, 7, 0,104, 4, 4, 0,105, 4, 4, 0, 19, 0, 7, 0,106, 4, 7, 0,107, 4, 7, 0,108, 4, 85, 0,109, 4,
+ 7, 0,110, 4, 7, 0,111, 4, 7, 0,112, 4, 7, 0,113, 4, 7, 0,114, 4, 7, 0,115, 4, 7, 0,116, 4, 4, 0,117, 4,
+180, 0, 76, 0, 27, 0, 31, 0, 39, 0, 74, 0, 2, 0,172, 0, 2, 0, 70, 1, 2, 0,104, 1, 2, 0,118, 4, 7, 0,119, 4,
+ 7, 0,120, 4, 7, 0,121, 4, 7, 0,122, 4, 7, 0,123, 4, 7, 0,124, 4, 7, 0,150, 1, 7, 0,152, 1, 7, 0,151, 1,
+ 7, 0, 69, 0, 4, 0,125, 4, 7, 0,126, 4, 7, 0,127, 4, 7, 0,128, 4, 7, 0,129, 4, 7, 0,130, 4, 7, 0,131, 4,
+ 7, 0,132, 4, 2, 0,133, 4, 2, 0, 69, 1, 2, 0,134, 4, 2, 0,135, 4, 2, 0,136, 4, 2, 0,137, 4, 2, 0,138, 4,
+ 2, 0,139, 4, 7, 0,140, 4, 7, 0,141, 4, 7, 0,142, 4, 7, 0,143, 4, 7, 0,144, 4, 7, 0,145, 4, 7, 0,146, 4,
+ 7, 0,147, 4, 7, 0,148, 4, 7, 0,149, 4, 7, 0,150, 4, 7, 0,151, 4, 2, 0,152, 4, 2, 0,153, 4, 2, 0,154, 4,
+ 2, 0,155, 4, 7, 0,156, 4, 7, 0,157, 4, 7, 0,158, 4, 7, 0,159, 4, 2, 0,160, 4, 2, 0,161, 4, 2, 0,162, 4,
+ 2, 0,163, 4, 7, 0,164, 4, 7, 0,165, 4, 7, 0,166, 4, 7, 0,167, 4, 7, 0,168, 4, 7, 0,169, 4, 7, 0,170, 4,
+ 2, 0,171, 4, 2, 0,172, 4, 2, 0,173, 4, 2, 0,174, 4, 2, 0,175, 4, 2, 0, 19, 0, 7, 0,176, 4, 7, 0,177, 4,
+ 36, 0, 79, 0, 51, 0,122, 1, 2, 0,123, 1, 2, 0,178, 4, 30, 0,148, 0,181, 0, 8, 0,181, 0, 0, 0,181, 0, 1, 0,
+ 4, 0,119, 3, 4, 0,179, 4, 4, 0, 19, 0, 2, 0,180, 4, 2, 0,181, 4, 32, 0,161, 0,182, 0, 13, 0, 9, 0,182, 4,
+ 9, 0,183, 4, 4, 0,184, 4, 4, 0,185, 4, 4, 0,186, 4, 4, 0,187, 4, 4, 0,188, 4, 4, 0,189, 4, 4, 0,190, 4,
+ 4, 0,191, 4, 4, 0,192, 4, 4, 0, 37, 0, 0, 0,193, 4,183, 0, 5, 0, 9, 0,194, 4, 9, 0,195, 4, 4, 0,196, 4,
+ 4, 0, 69, 0, 0, 0,197, 4,184, 0, 17, 0, 4, 0,198, 4, 4, 0,199, 4, 4, 0,200, 4, 4, 0,201, 4, 4, 0,202, 4,
+ 4, 0,203, 4, 4, 0,204, 4, 4, 0,205, 4, 4, 0,206, 4, 4, 0,207, 4, 4, 0,208, 4, 4, 0,209, 4, 2, 0,210, 4,
+ 2, 0,211, 4, 4, 0,212, 4, 4, 0,213, 4, 4, 0, 89, 0,185, 0, 15, 0, 4, 0, 17, 0, 4, 0,200, 4, 4, 0,214, 4,
+ 4, 0,215, 4, 4, 0,216, 4, 4, 0,217, 4, 7, 0,218, 4, 4, 0,219, 4, 4, 0, 90, 0, 4, 0,220, 4, 4, 0,221, 4,
+ 4, 0,222, 4, 4, 0,223, 4, 4, 0,224, 4, 26, 0, 30, 0,186, 0, 7, 0, 4, 0,225, 4, 7, 0,226, 4, 7, 0,227, 4,
+ 7, 0,228, 4, 4, 0,229, 4, 2, 0, 19, 0, 2, 0, 37, 0,187, 0, 11, 0,187, 0, 0, 0,187, 0, 1, 0, 0, 0, 20, 0,
+ 65, 0,230, 4, 66, 0,231, 4, 4, 0,119, 3, 4, 0,232, 4, 4, 0,233, 4, 4, 0, 37, 0, 4, 0,234, 4, 4, 0,235, 4,
+188, 0,111, 0,182, 0,236, 4,183, 0,237, 4,184, 0,238, 4,185, 0,239, 4, 4, 0, 12, 3, 4, 0,121, 0, 4, 0, 43, 4,
+ 7, 0,240, 4, 4, 0,241, 4, 4, 0,242, 4, 4, 0,243, 4, 4, 0,244, 4, 2, 0, 19, 0, 2, 0,245, 4, 7, 0,246, 4,
+ 7, 0,247, 4, 7, 0,248, 4, 7, 0,249, 4, 7, 0,250, 4, 2, 0,251, 4, 2, 0,252, 4, 2, 0,253, 4, 2, 0,254, 4,
+ 2, 0,243, 0, 2, 0,255, 4, 2, 0, 0, 5, 2, 0, 1, 5, 2, 0, 2, 5, 2, 0, 3, 5, 2, 0, 91, 1, 2, 0,106, 0,
+ 2, 0, 4, 5, 2, 0, 5, 5, 2, 0, 6, 5, 2, 0, 7, 5, 2, 0, 8, 5, 2, 0, 9, 5, 2, 0, 10, 5, 2, 0, 11, 5,
+ 2, 0, 12, 5, 2, 0, 92, 1, 2, 0, 13, 5, 2, 0, 14, 5, 2, 0, 15, 5, 2, 0, 16, 5, 4, 0, 17, 5, 4, 0, 69, 1,
+ 4, 0, 18, 5, 2, 0, 19, 5, 2, 0, 20, 5, 2, 0, 21, 5, 2, 0,248, 1, 2, 0, 22, 5, 2, 0, 23, 5, 2, 0, 24, 5,
+ 2, 0, 25, 5, 24, 0, 26, 5, 24, 0, 27, 5, 23, 0, 28, 5, 12, 0, 29, 5, 2, 0, 30, 5, 2, 0, 31, 5, 7, 0, 32, 5,
+ 7, 0, 33, 5, 7, 0, 34, 5, 7, 0, 35, 5, 4, 0, 36, 5, 7, 0, 37, 5, 7, 0, 38, 5, 7, 0, 39, 5, 7, 0, 40, 5,
+ 2, 0, 41, 5, 2, 0, 42, 5, 2, 0, 43, 5, 2, 0, 44, 5, 2, 0, 45, 5, 2, 0, 46, 5, 7, 0, 47, 5, 7, 0, 48, 5,
+ 7, 0, 49, 5, 0, 0, 50, 5, 0, 0, 51, 5, 4, 0, 52, 5, 2, 0, 53, 5, 2, 0,226, 1, 0, 0, 54, 5, 7, 0, 55, 5,
+ 7, 0, 56, 5, 0, 0, 57, 5, 0, 0, 58, 5, 0, 0, 59, 5, 0, 0, 60, 5, 4, 0, 61, 5, 2, 0, 62, 5, 2, 0, 63, 5,
+ 7, 0, 64, 5, 7, 0, 65, 5, 2, 0, 66, 5, 2, 0, 67, 5, 7, 0, 68, 5, 2, 0, 69, 5, 2, 0, 70, 5, 4, 0, 71, 5,
+ 2, 0, 72, 5, 2, 0, 73, 5, 2, 0, 74, 5, 2, 0, 75, 5, 7, 0, 76, 5, 7, 0, 69, 0, 42, 0, 77, 5, 0, 0, 78, 5,
+189, 0, 9, 0,189, 0, 0, 0,189, 0, 1, 0, 0, 0, 20, 0, 2, 0, 79, 5, 2, 0, 80, 5, 2, 0, 81, 5, 2, 0, 89, 0,
+ 7, 0, 82, 5, 7, 0, 69, 0,190, 0, 7, 0, 2, 0,203, 2, 2, 0, 69, 1, 2, 0, 67, 3, 2, 0, 83, 5, 7, 0, 84, 5,
+ 7, 0, 69, 0, 42, 0, 85, 5,191, 0, 5, 0, 7, 0, 86, 5, 0, 0, 17, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0,226, 1,
+192, 0, 28, 0, 7, 0,131, 4, 7, 0,132, 4, 2, 0, 69, 1, 2, 0, 19, 0, 2, 0, 87, 5, 2, 0,178, 4, 2, 0,134, 4,
+ 2, 0,135, 4, 2, 0,136, 4, 2, 0,137, 4, 2, 0,138, 4, 2, 0,139, 4,191, 0, 88, 5, 2, 0,251, 4, 2, 0,252, 4,
+ 2, 0,253, 4, 2, 0,254, 4, 2, 0,243, 0, 2, 0,255, 4, 2, 0, 89, 5, 2, 0, 0, 5,190, 0, 90, 5, 2, 0, 91, 5,
+ 2, 0, 2, 5, 2, 0, 5, 5, 2, 0, 6, 5, 7, 0, 92, 5, 7, 0, 89, 0,193, 0, 6, 0,193, 0, 0, 0,193, 0, 1, 0,
+ 4, 0,230, 3, 0, 0,242, 3, 4, 0, 19, 0, 32, 0, 93, 5,194, 0, 4, 0,195, 0, 94, 5, 9, 0, 95, 5, 0, 0, 96, 5,
+ 4, 0, 90, 0,196, 0, 8, 0,194, 0, 97, 5, 2, 0, 19, 0, 2, 0, 37, 0, 2, 0, 98, 5, 2, 0, 99, 5, 2, 0,100, 5,
+ 4, 0, 89, 0, 9, 0,101, 5,197, 0, 6, 0, 2, 0,106, 0, 2, 0,236, 3, 2, 0,102, 5, 2, 0,197, 2, 4, 0, 19, 0,
+ 7, 0,214, 2,198, 0, 14, 0, 2, 0, 19, 0, 2, 0,103, 5, 2, 0,104, 5, 2, 0,105, 5,197, 0,106, 5, 9, 0,101, 5,
+ 7, 0,107, 5, 7, 0, 56, 0, 4, 0,108, 5, 4, 0,109, 5, 4, 0,110, 5, 4, 0,111, 5, 46, 0,129, 0, 32, 0,161, 0,
+199, 0, 4, 0,199, 0, 0, 0,199, 0, 1, 0, 0, 0,112, 5, 7, 0,113, 5,200, 0, 14, 0,194, 0, 97, 5, 4, 0, 90, 0,
+ 4, 0,114, 5, 7, 0,115, 5, 7, 0,116, 5, 7, 0,117, 5, 4, 0,118, 5, 4, 0,119, 5, 7, 0,120, 5, 7, 0,121, 5,
+ 4, 0,122, 5, 7, 0,123, 5, 7, 0,124, 5, 4, 0, 37, 0,201, 0, 7, 0,194, 0, 97, 5, 2, 0, 19, 0, 2, 0, 37, 0,
+ 4, 0, 36, 0, 4, 0,125, 5, 87, 0,126, 5, 9, 0,101, 5,202, 0, 80, 0,201, 0,127, 5,201, 0,128, 5,200, 0, 86, 3,
+ 7, 0,129, 5, 2, 0,130, 5, 2, 0,131, 5, 7, 0,132, 5, 7, 0,133, 5, 2, 0,236, 3, 2, 0,134, 5, 7, 0,135, 5,
+ 7, 0,136, 5, 7, 0,137, 5, 2, 0,138, 5, 2, 0,108, 5, 2, 0,139, 5, 2, 0,140, 5, 2, 0,141, 5, 2, 0,142, 5,
+ 7, 0,143, 5, 7, 0,144, 5, 7, 0,145, 5, 2, 0,146, 5, 2, 0,147, 5, 2, 0,148, 5, 2, 0,149, 5, 2, 0,150, 5,
+ 2, 0,151, 5, 2, 0,152, 5,196, 0,153, 5,198, 0,154, 5, 7, 0,155, 5, 7, 0,156, 5, 7, 0,157, 5, 2, 0,158, 5,
+ 2, 0,159, 5, 0, 0,160, 5, 0, 0,161, 5, 0, 0,162, 5, 0, 0,163, 5, 0, 0,164, 5, 0, 0,165, 5, 2, 0,166, 5,
+ 7, 0,167, 5, 7, 0,168, 5, 7, 0,169, 5, 7, 0,170, 5, 7, 0,171, 5, 7, 0,172, 5, 7, 0,173, 5, 7, 0,174, 5,
+ 7, 0,175, 5, 7, 0,176, 5, 2, 0,177, 5, 0, 0,178, 5, 0, 0,179, 5, 0, 0,180, 5, 0, 0,181, 5, 32, 0,182, 5,
+ 0, 0,183, 5, 0, 0,184, 5, 0, 0,185, 5, 0, 0,186, 5, 0, 0,187, 5, 0, 0,188, 5, 0, 0,189, 5, 0, 0,190, 5,
+ 2, 0,191, 5, 2, 0,192, 5, 2, 0,193, 5, 2, 0,194, 5, 2, 0,195, 5, 0, 0,196, 5, 0, 0,178, 4, 4, 0,197, 5,
+ 2, 0,198, 5, 2, 0, 89, 0, 4, 0,199, 5, 7, 0,200, 5, 7, 0,201, 5,203, 0, 8, 0, 4, 0,202, 5, 4, 0,203, 5,
+ 4, 0,204, 5, 4, 0,205, 5, 4, 0,206, 5, 4, 0,207, 5, 4, 0, 53, 0, 4, 0,117, 2,204, 0, 3, 0, 7, 0,208, 5,
+ 2, 0,209, 5, 2, 0, 19, 0,205, 0, 4, 0, 7, 0,210, 5, 4, 0, 19, 0, 4, 0,211, 5, 4, 0, 56, 0, 46, 0, 42, 0,
+ 27, 0, 31, 0, 39, 0, 74, 0, 32, 0, 93, 5,180, 0,212, 5, 46, 0,213, 5, 47, 0,235, 0, 12, 0,214, 5,181, 0,215, 5,
+ 32, 0,216, 5, 7, 0,217, 5, 7, 0,218, 5, 7, 0,219, 5, 7, 0,220, 5, 4, 0,119, 3, 4, 0,221, 5, 4, 0, 89, 0,
+ 2, 0, 19, 0, 2, 0, 63, 1, 60, 0, 58, 1,206, 0,222, 5,202, 0,223, 5,207, 0,224, 5,188, 0,179, 0,186, 0,225, 5,
+ 12, 0,100, 0, 12, 0,226, 5, 9, 0,227, 5, 9, 0,228, 5, 9, 0,229, 5,208, 0,230, 5, 2, 0,231, 5, 2, 0,232, 5,
+ 2, 0,244, 0, 2, 0,233, 5, 4, 0,234, 5, 4, 0,235, 5, 12, 0,236, 5,191, 0, 88, 5,192, 0,237, 5,204, 0,238, 5,
+164, 0, 99, 3,205, 0,239, 5,209, 0, 11, 0,209, 0, 0, 0,209, 0, 1, 0, 47, 0,235, 0, 45, 0, 57, 1, 7, 0, 81, 2,
+ 7, 0, 82, 2, 7, 0,106, 0, 7, 0,240, 5, 2, 0,241, 5, 2, 0, 19, 0, 7, 0, 69, 0,210, 0, 39, 0, 7, 0,242, 5,
+ 7, 0,243, 5, 7, 0,244, 5, 7, 0,245, 5, 7, 0,246, 5, 7, 0,247, 5, 7, 0,248, 5, 7, 0,249, 5, 7, 0,250, 5,
+ 7, 0, 76, 1, 7, 0,251, 5, 7, 0,252, 5, 7, 0,253, 5, 7, 0,254, 5, 7, 0,168, 0, 2, 0,255, 5, 2, 0, 0, 6,
+ 2, 0, 1, 6, 2, 0, 37, 0, 2, 0, 2, 6, 2, 0, 3, 6, 2, 0, 4, 6, 2, 0,241, 5, 7, 0, 5, 6, 7, 0, 6, 6,
+ 70, 0, 7, 6,164, 0, 99, 3,210, 0, 8, 6,211, 0, 9, 6,212, 0, 10, 6,213, 0, 11, 6,214, 0, 12, 6,215, 0, 13, 6,
+ 7, 0, 14, 6, 2, 0, 15, 6, 2, 0, 16, 6, 7, 0, 17, 6, 7, 0, 18, 6, 7, 0, 19, 6,216, 0, 55, 0,217, 0, 0, 0,
+217, 0, 1, 0, 12, 0, 20, 6, 4, 0, 21, 6, 7, 0, 22, 6, 2, 0, 23, 6, 7, 0,250, 5, 7, 0, 76, 1, 7, 0, 89, 0,
+ 4, 0, 24, 6, 2, 0, 4, 6, 2, 0,241, 5, 32, 0, 93, 5, 32, 0, 25, 6, 12, 0, 26, 6,209, 0, 27, 6,216, 0, 8, 6,
+ 0, 0, 28, 6, 4, 0,119, 3, 4, 0,221, 5, 2, 0, 29, 6, 2, 0, 69, 0, 2, 0, 30, 6, 2, 0, 31, 6, 2, 0,226, 1,
+ 2, 0, 19, 0, 2, 0, 17, 2, 2, 0, 32, 6, 7, 0,111, 0, 7, 0, 33, 6, 7, 0, 17, 6, 7, 0, 19, 6, 7, 0, 34, 6,
+ 7, 0, 35, 6, 7, 0,168, 0, 7, 0,217, 5, 2, 0, 36, 6, 2, 0,248, 1, 2, 0, 37, 6, 2, 0, 38, 6, 2, 0, 39, 6,
+ 2, 0, 40, 6, 2, 0, 41, 6, 2, 0, 42, 6, 2, 0, 43, 6, 2, 0, 1, 6, 4, 0, 44, 6, 12, 0, 45, 6, 2, 0, 46, 6,
+ 2, 0,131, 2, 2, 0, 47, 6, 0, 0, 48, 6, 0, 0, 49, 6, 9, 0, 50, 6,164, 0, 99, 3,218, 0, 24, 0, 24, 0, 36, 0,
+ 24, 0, 63, 0, 23, 0, 51, 6, 23, 0, 52, 6, 23, 0, 53, 6, 7, 0, 54, 6, 7, 0, 55, 6, 7, 0, 56, 6, 7, 0, 57, 6,
+ 2, 0, 58, 6, 2, 0, 59, 6, 2, 0, 60, 6, 2, 0, 61, 6, 2, 0, 62, 6, 2, 0, 19, 0, 2, 0, 63, 6, 2, 0, 64, 6,
+ 2, 0, 65, 6, 2, 0, 66, 6, 2, 0, 67, 6, 2, 0, 31, 6, 7, 0, 68, 6, 4, 0, 69, 6, 4, 0, 70, 6,217, 0, 6, 0,
+217, 0, 0, 0,217, 0, 1, 0, 12, 0, 20, 6, 4, 0, 21, 6, 7, 0, 22, 6, 2, 0, 23, 6,219, 0, 8, 0,217, 0, 0, 0,
+217, 0, 1, 0, 12, 0, 20, 6, 4, 0, 21, 6, 7, 0, 22, 6, 2, 0, 23, 6,220, 0, 71, 6, 46, 0,129, 0,221, 0, 14, 0,
+217, 0, 0, 0,217, 0, 1, 0, 12, 0, 20, 6, 4, 0, 21, 6, 7, 0, 22, 6, 2, 0, 23, 6,218, 0, 72, 6,222, 0, 73, 6,
+ 12, 0, 74, 6, 2, 0, 69, 1, 2, 0, 75, 6, 4, 0, 19, 0, 7, 0, 76, 6, 4, 0, 31, 6,223, 0, 20, 0,217, 0, 0, 0,
+217, 0, 1, 0, 12, 0, 20, 6, 4, 0, 21, 6, 7, 0, 22, 6, 2, 0, 23, 6,211, 0, 9, 6,218, 0, 72, 6, 2, 0, 77, 6,
+ 2, 0, 78, 6, 2, 0, 79, 6, 2, 0, 80, 6, 2, 0, 63, 6, 2, 0, 81, 6, 0, 0, 19, 0, 0, 0,178, 4, 9, 0, 56, 2,
+ 4, 0, 82, 6, 4, 0, 83, 6, 27, 0, 84, 6,224, 0, 18, 0,217, 0, 0, 0,217, 0, 1, 0, 12, 0, 20, 6, 4, 0, 21, 6,
+ 7, 0, 22, 6, 2, 0, 23, 6,218, 0, 72, 6, 7, 0, 81, 2, 7, 0, 82, 2, 2, 0, 77, 6, 2, 0, 85, 6, 2, 0, 86, 6,
+ 2, 0, 87, 6, 4, 0, 19, 0, 7, 0, 88, 6, 4, 0,241, 5, 4, 0, 37, 0,164, 0, 99, 3,225, 0, 15, 0, 0, 0, 89, 6,
+ 0, 0, 90, 6, 0, 0, 91, 6, 0, 0, 92, 6, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 93, 6, 2, 0, 94, 6, 2, 0,169, 1,
+ 2, 0, 95, 6, 4, 0, 96, 6, 4, 0, 97, 6, 2, 0, 98, 6, 2, 0, 37, 0, 0, 0, 99, 6,226, 0, 16, 0,217, 0, 0, 0,
+217, 0, 1, 0, 12, 0, 20, 6, 4, 0, 21, 6, 4, 0,100, 6,225, 0,101, 6,227, 0,102, 6, 12, 0,103, 6, 12, 0,104, 6,
+228, 0,105, 6,215, 0,106, 6,229, 0,107, 6, 2, 0,108, 6, 2, 0,109, 6, 2, 0,110, 6, 2, 0, 69, 0,230, 0, 17, 0,
+217, 0, 0, 0,217, 0, 1, 0, 12, 0, 20, 6, 4, 0, 21, 6, 7, 0, 22, 6, 2, 0, 23, 6,218, 0, 72, 6, 12, 0,111, 6,
+231, 0,112, 6, 0, 0,113, 6,232, 0,114, 6, 4, 0,115, 6, 4, 0,116, 6, 2, 0, 19, 0, 2, 0,117, 6, 2, 0,118, 6,
+ 2, 0, 37, 0,233, 0, 32, 0,217, 0, 0, 0,217, 0, 1, 0, 12, 0, 20, 6, 4, 0, 21, 6, 7, 0, 22, 6, 2, 0, 23, 6,
+ 47, 0,222, 2, 45, 0, 57, 1, 63, 0,119, 6, 2, 0,128, 0, 2, 0,120, 6, 2, 0, 69, 0, 2, 0,121, 6, 4, 0, 19, 0,
+ 2, 0,122, 6, 2, 0,123, 6, 2, 0,124, 6, 2, 0,226, 1, 0, 0,125, 6, 0, 0,126, 6, 0, 0,127, 6, 0, 0, 31, 6,
+ 7, 0,128, 6, 7, 0, 81, 2, 7, 0, 82, 2, 7, 0, 88, 6, 7, 0,248, 1, 7, 0,129, 6, 7, 0,130, 6,164, 0, 99, 3,
+234, 0,131, 6,235, 0,132, 6,236, 0, 11, 0,217, 0, 0, 0,217, 0, 1, 0, 12, 0, 20, 6, 4, 0, 21, 6, 7, 0, 22, 6,
+ 2, 0, 23, 6, 2, 0, 75, 6, 2, 0, 19, 0, 4, 0, 37, 0,222, 0, 73, 6,218, 0, 72, 6,237, 0, 27, 0,217, 0, 0, 0,
+217, 0, 1, 0, 12, 0, 20, 6, 4, 0, 21, 6, 7, 0, 22, 6, 2, 0, 23, 6, 42, 0,133, 6, 4, 0,134, 6, 4, 0,135, 6,
+ 2, 0, 90, 0, 2, 0,128, 0, 2, 0,136, 6, 0, 0,137, 6, 0, 0,138, 6, 4, 0,139, 6, 4, 0,140, 6, 4, 0,141, 6,
+ 4, 0,142, 6, 2, 0,143, 6, 2, 0,144, 6, 7, 0,145, 6, 23, 0,146, 6, 23, 0,147, 6, 4, 0,148, 6, 4, 0,149, 6,
+ 0, 0,150, 6, 0, 0,151, 6,238, 0, 10, 0, 27, 0, 31, 0, 9, 0,152, 6, 9, 0,153, 6, 9, 0,154, 6, 9, 0,155, 6,
+ 9, 0,156, 6, 4, 0, 90, 0, 4, 0,157, 6, 0, 0,158, 6, 0, 0,159, 6,239, 0, 10, 0,217, 0, 0, 0,217, 0, 1, 0,
+ 12, 0, 20, 6, 4, 0, 21, 6, 7, 0, 22, 6,238, 0,160, 6, 2, 0, 90, 0, 2, 0,128, 0, 4, 0, 89, 0, 9, 0,161, 6,
+240, 0, 9, 0,240, 0, 0, 0,240, 0, 1, 0, 4, 0, 17, 0, 4, 0, 19, 0, 7, 0,162, 6, 4, 0, 23, 0, 4, 0,238, 3,
+ 4, 0,239, 3, 4, 0,124, 0,241, 0, 11, 0,217, 0, 0, 0,217, 0, 1, 0, 12, 0, 20, 6, 4, 0, 21, 6, 7, 0, 22, 6,
+218, 0, 72, 6, 12, 0,163, 6, 4, 0,164, 6, 4, 0, 37, 0, 4, 0, 19, 0, 4, 0,165, 6,242, 0, 25, 0,217, 0, 0, 0,
+217, 0, 1, 0, 12, 0, 20, 6, 4, 0, 21, 6, 7, 0, 22, 6, 2, 0, 23, 6,218, 0, 72, 6, 27, 0,166, 6, 27, 0, 80, 0,
+ 2, 0, 19, 0, 2, 0,128, 0, 7, 0,167, 6, 9, 0,168, 6, 7, 0, 81, 2, 7, 0, 82, 2, 7, 0, 88, 6, 7, 0, 19, 6,
+ 7, 0,169, 6, 7, 0,170, 6, 60, 0, 58, 1, 60, 0,171, 6, 4, 0,172, 6, 2, 0,173, 6, 2, 0, 37, 0,164, 0, 99, 3,
+243, 0, 10, 0,217, 0, 0, 0,217, 0, 1, 0, 12, 0, 20, 6, 4, 0, 21, 6, 7, 0, 22, 6, 2, 0, 23, 6, 2, 0, 19, 0,
+ 2, 0,128, 3, 4, 0, 37, 0,164, 0, 99, 3,244, 0, 42, 0,217, 0, 0, 0,217, 0, 1, 0, 12, 0, 20, 6, 4, 0, 21, 6,
+ 7, 0, 22, 6, 2, 0, 23, 6,218, 0, 72, 6,227, 0,102, 6, 0, 0, 89, 6, 0, 0, 90, 6, 0, 0, 91, 6, 2, 0, 17, 0,
+ 2, 0,174, 6, 2, 0, 19, 0, 2, 0, 93, 6, 9, 0,168, 6, 4, 0, 96, 6, 4, 0,175, 6, 4, 0,176, 6, 4, 0, 97, 6,
+ 23, 0,177, 6, 23, 0,178, 6, 7, 0,179, 6, 7, 0,180, 6, 7, 0,181, 6, 7, 0,167, 6, 2, 0,182, 6, 2, 0,234, 0,
+ 2, 0,169, 1, 2, 0, 95, 6, 2, 0, 37, 0, 2, 0, 89, 0, 2, 0,183, 6, 2, 0,184, 6, 9, 0,185, 6, 9, 0,186, 6,
+ 9, 0,187, 6, 9, 0,188, 6, 9, 0,189, 6, 2, 0,190, 6, 0, 0,191, 6, 57, 0,192, 6,245, 0, 7, 0,245, 0, 0, 0,
+245, 0, 1, 0, 4, 0,193, 6, 4, 0, 23, 0, 0, 0, 83, 0, 4, 0,194, 6, 4, 0, 17, 0,246, 0, 16, 0,217, 0, 0, 0,
+217, 0, 1, 0, 12, 0, 20, 6, 4, 0, 21, 6, 7, 0, 22, 6, 2, 0, 23, 6, 4, 0, 17, 0, 4, 0,195, 6, 4, 0, 19, 0,
+ 4, 0,136, 6, 12, 0,196, 6, 12, 0,197, 6, 0, 0,198, 6, 0, 0,199, 6, 4, 0,200, 6, 4, 0,201, 6,247, 0, 6, 0,
+217, 0, 0, 0,217, 0, 1, 0, 12, 0, 20, 6, 4, 0, 21, 6, 4, 0, 37, 0, 0, 0,202, 6,248, 0, 15, 0,217, 0, 0, 0,
+217, 0, 1, 0, 12, 0, 20, 6, 4, 0, 21, 6, 7, 0, 22, 6,249, 0,203, 6,218, 0, 72, 6,250, 0,204, 6, 2, 0, 69, 1,
+ 2, 0,205, 6, 2, 0, 81, 2, 2, 0, 82, 2, 2, 0, 19, 0, 2, 0,123, 6, 4, 0, 69, 0,251, 0, 7, 0,251, 0, 0, 0,
+251, 0, 1, 0, 0, 0,206, 6, 2, 0,207, 6, 2, 0,208, 6, 2, 0,209, 6, 2, 0, 37, 0,252, 0, 12, 0, 2, 0,208, 6,
+ 2, 0,210, 6, 2, 0,211, 6, 0, 0,183, 2, 2, 0,212, 6, 2, 0,213, 6, 2, 0,214, 6, 2, 0,215, 6, 2, 0,216, 6,
+ 2, 0, 63, 6, 7, 0,217, 6, 7, 0,218, 6,253, 0, 18, 0,253, 0, 0, 0,253, 0, 1, 0, 0, 0,242, 3,252, 0,219, 6,
+252, 0,220, 6,252, 0,221, 6,252, 0,222, 6, 7, 0,223, 6, 2, 0,224, 6, 2, 0,225, 6, 2, 0,226, 6, 2, 0,227, 6,
+ 2, 0,228, 6, 2, 0,229, 6, 2, 0,230, 6, 2, 0,231, 6, 2, 0,232, 6, 2, 0,233, 6,254, 0, 10, 0, 0, 0,234, 6,
+ 0, 0,235, 6, 0, 0,236, 6, 0, 0,237, 6, 0, 0,238, 6, 0, 0,239, 6, 2, 0,240, 6, 2, 0,241, 6, 2, 0,242, 6,
+ 2, 0,243, 6,255, 0, 8, 0, 0, 0,244, 6, 0, 0,245, 6, 0, 0,246, 6, 0, 0,247, 6, 0, 0,248, 6, 0, 0,249, 6,
+ 7, 0,240, 5, 7, 0, 37, 0, 0, 1, 18, 0,254, 0,250, 6,254, 0,251, 6,254, 0,252, 6,254, 0,253, 6,254, 0,254, 6,
+254, 0,255, 6,254, 0, 0, 7,254, 0, 1, 7,254, 0, 2, 7,254, 0, 3, 7,254, 0, 4, 7,254, 0, 5, 7,254, 0, 6, 7,
+254, 0, 7, 7,254, 0, 8, 7,254, 0, 9, 7,255, 0, 10, 7, 0, 0, 11, 7, 1, 1, 92, 0, 0, 0, 12, 7, 0, 0, 13, 7,
+ 0, 0,238, 6, 0, 0, 14, 7, 0, 0, 15, 7, 0, 0, 16, 7, 0, 0, 17, 7, 0, 0, 18, 7, 0, 0, 19, 7, 0, 0, 20, 7,
+ 0, 0, 21, 7, 0, 0, 22, 7, 0, 0, 23, 7, 0, 0, 24, 7, 0, 0, 25, 7, 0, 0, 26, 7, 0, 0, 27, 7, 0, 0, 28, 7,
+ 0, 0, 29, 7, 0, 0, 30, 7, 0, 0, 31, 7, 0, 0, 32, 7, 0, 0, 33, 7, 0, 0, 34, 7, 0, 0, 35, 7, 0, 0, 36, 7,
+ 0, 0, 37, 7, 0, 0, 38, 7, 0, 0, 39, 7, 0, 0, 40, 7, 0, 0, 41, 7, 0, 0, 42, 7, 0, 0, 43, 7, 0, 0, 44, 7,
+ 0, 0, 45, 7, 0, 0, 46, 7, 0, 0, 47, 7, 0, 0, 48, 7, 0, 0, 49, 7, 0, 0, 50, 7, 0, 0, 51, 7, 0, 0, 52, 7,
+ 0, 0, 53, 7, 0, 0, 54, 7, 0, 0, 55, 7, 0, 0, 56, 7, 0, 0, 57, 7, 0, 0, 58, 7, 0, 0, 59, 7, 0, 0, 60, 7,
+ 0, 0, 61, 7, 0, 0, 62, 7, 0, 0, 63, 7, 0, 0, 64, 7, 0, 0, 65, 7, 0, 0, 66, 7, 0, 0, 67, 7, 0, 0, 68, 7,
+ 0, 0, 69, 7, 0, 0, 70, 7, 0, 0, 71, 7, 0, 0, 72, 7, 0, 0, 73, 7, 0, 0, 74, 7, 0, 0, 75, 7, 0, 0, 76, 7,
+ 0, 0, 77, 7, 0, 0, 78, 7, 0, 0, 79, 7, 0, 0, 80, 7, 0, 0, 81, 7, 0, 0, 82, 7, 0, 0, 83, 7, 0, 0, 84, 7,
+ 0, 0, 85, 7, 0, 0, 86, 7, 0, 0, 87, 7, 0, 0, 88, 7, 0, 0, 89, 7, 0, 0, 90, 7, 0, 0, 91, 7, 0, 0, 92, 7,
+ 0, 0, 93, 7, 0, 0, 94, 7, 0, 0, 95, 7, 0, 0, 96, 7, 0, 0, 97, 7, 0, 0, 98, 7, 0, 0, 99, 7, 0, 0,100, 7,
+ 0, 0,101, 7, 0, 0,102, 7, 2, 1, 5, 0, 0, 0,103, 7, 0, 0, 36, 7, 0, 0, 38, 7, 2, 0, 19, 0, 2, 0, 37, 0,
+ 3, 1, 25, 0, 3, 1, 0, 0, 3, 1, 1, 0, 0, 0, 20, 0, 0, 1,104, 7, 1, 1,105, 7, 1, 1,106, 7, 1, 1,107, 7,
+ 1, 1,108, 7, 1, 1,109, 7, 1, 1,110, 7, 1, 1,111, 7, 1, 1,112, 7, 1, 1,113, 7, 1, 1,114, 7, 1, 1,115, 7,
+ 1, 1,116, 7, 1, 1,117, 7, 1, 1,118, 7, 1, 1,119, 7, 1, 1,120, 7, 1, 1,121, 7, 1, 1,122, 7, 2, 1,123, 7,
+ 4, 0,124, 7, 4, 0, 37, 0, 4, 1, 3, 0, 4, 1, 0, 0, 4, 1, 1, 0, 0, 0,125, 7, 5, 1, 5, 0, 4, 0, 19, 0,
+ 4, 0, 37, 0, 7, 0,130, 2, 7, 0,126, 7, 7, 0, 32, 2, 6, 1, 86, 0, 4, 0, 19, 0, 4, 0,127, 7, 4, 0,128, 7,
+ 0, 0,129, 7, 0, 0,130, 7, 0, 0,131, 7, 0, 0,132, 7, 0, 0,133, 7, 0, 0,134, 7, 0, 0,135, 7, 0, 0,136, 7,
+ 0, 0,137, 7, 0, 0,138, 7, 4, 0,139, 7, 2, 0,140, 7, 2, 0,141, 7, 2, 0,142, 7, 2, 0,143, 7, 4, 0,144, 7,
+ 4, 0,145, 7, 4, 0,146, 7, 4, 0,147, 7, 2, 0,148, 7, 2, 0,149, 7, 4, 0,150, 7, 4, 0,151, 7, 4, 0,152, 7,
+ 4, 0,153, 7, 4, 0,154, 7, 4, 0,196, 6, 4, 0,155, 7, 2, 0,156, 7, 2, 0,157, 7, 2, 0,158, 7, 2, 0,159, 7,
+ 12, 0,160, 7, 12, 0,161, 7, 12, 0,162, 7, 12, 0,163, 7, 12, 0,164, 7, 0, 0,165, 7, 2, 0,166, 7, 2, 0,167, 7,
+ 2, 0,168, 7, 2, 0,169, 7, 2, 0,170, 7, 2, 0,171, 7, 2, 0,172, 7, 2, 0,173, 7, 5, 1,174, 7, 2, 0,175, 7,
+ 2, 0,176, 7, 2, 0,177, 7, 2, 0,178, 7, 2, 0,179, 7, 2, 0,180, 7, 2, 0,181, 7, 2, 0, 69, 0, 4, 0,182, 7,
+ 4, 0,183, 7, 2, 0,184, 7, 2, 0,185, 7, 2, 0,186, 7, 2, 0,187, 7, 2, 0,188, 7, 2, 0,189, 7, 2, 0,190, 7,
+ 2, 0,191, 7, 2, 0,192, 7, 2, 0,193, 7, 2, 0,194, 7, 2, 0,195, 7, 2, 0,196, 7, 2, 0,197, 7, 2, 0,198, 7,
+ 2, 0,199, 7, 2, 0,200, 7, 2, 0,178, 4, 0, 0,201, 7, 0, 0,202, 7, 7, 0,203, 7, 2, 0,158, 5, 2, 0,159, 5,
+ 55, 0,204, 7, 7, 0,205, 7, 4, 0,226, 1,220, 0, 21, 0, 27, 0, 31, 0, 12, 0,206, 7, 12, 0,207, 7, 12, 0,208, 7,
+ 12, 0, 20, 6, 46, 0,129, 0, 46, 0,209, 7, 2, 0,210, 7, 2, 0,211, 7, 2, 0,212, 7, 2, 0,213, 7, 2, 0,214, 7,
+ 2, 0,215, 7, 2, 0,216, 7, 2, 0,217, 7, 2, 0,218, 7, 2, 0,219, 7, 4, 0, 69, 0,215, 0,220, 7, 9, 0,221, 7,
+ 2, 0,222, 7, 7, 1, 5, 0, 7, 1, 0, 0, 7, 1, 1, 0, 7, 1,223, 7, 13, 0,224, 7, 4, 0, 19, 0, 8, 1, 7, 0,
+ 8, 1, 0, 0, 8, 1, 1, 0, 7, 1,225, 7, 7, 1,226, 7, 2, 0, 27, 5, 2, 0, 19, 0, 4, 0, 37, 0, 9, 1, 25, 0,
+ 9, 1, 0, 0, 9, 1, 1, 0, 10, 1,227, 7, 11, 1,107, 6, 0, 0,228, 7, 0, 0,229, 7, 0, 0,230, 7, 2, 0,231, 7,
+ 2, 0,232, 7, 2, 0,233, 7, 2, 0,234, 7, 2, 0,235, 7, 2, 0, 37, 0, 2, 0, 19, 0, 2, 0,236, 7, 2, 0,237, 7,
+ 2, 0,238, 7, 4, 0,239, 7, 9, 1,240, 7, 9, 0,241, 7, 4, 0,242, 7, 4, 0,243, 7, 4, 0,244, 7, 4, 0,245, 7,
+ 0, 0,246, 7,249, 0, 22, 0,249, 0, 0, 0,249, 0, 1, 0, 7, 1,225, 7, 7, 1,226, 7, 7, 1,247, 7, 7, 1,248, 7,
+220, 0,249, 7, 23, 0, 51, 0, 0, 0, 21, 6, 0, 0,250, 7, 2, 0, 64, 6, 2, 0, 65, 6, 2, 0,251, 7, 2, 0, 37, 0,
+ 2, 0,213, 7, 2, 0,194, 6, 2, 0, 19, 0, 12, 1,227, 7, 12, 0,252, 7, 12, 0, 20, 6, 12, 0,253, 7, 12, 0,254, 7,
+ 13, 1, 24, 0, 13, 1, 0, 0, 13, 1, 1, 0,218, 0, 72, 6, 23, 0,255, 7, 23, 0, 0, 8, 2, 0, 64, 6, 2, 0, 65, 6,
+ 2, 0, 1, 8, 2, 0, 2, 8, 2, 0, 3, 8, 2, 0, 19, 0, 7, 0, 77, 2, 2, 0,233, 7, 2, 0,234, 7, 2, 0,212, 7,
+ 2, 0, 4, 8, 2, 0,217, 7, 2, 0,178, 4, 14, 1,227, 7, 12, 0, 5, 8, 12, 0, 6, 8, 12, 0,253, 7, 0, 0, 7, 8,
+ 9, 0, 8, 8, 15, 1, 12, 0, 0, 0, 9, 8, 2, 0, 10, 8, 2, 0, 11, 8, 2, 0, 12, 8, 2, 0, 13, 8, 2, 0, 14, 5,
+ 2, 0, 9, 5,220, 0, 14, 8, 46, 0, 15, 8, 4, 0, 16, 8, 4, 0, 17, 8, 0, 0, 18, 8, 16, 1, 1, 0, 0, 0, 19, 8,
+ 17, 1, 8, 0, 57, 0, 20, 8, 57, 0, 21, 8, 17, 1, 22, 8, 17, 1, 23, 8, 17, 1, 24, 8, 2, 0,124, 0, 2, 0, 19, 0,
+ 4, 0, 25, 8, 18, 1, 4, 0, 4, 0,134, 6, 4, 0, 26, 8, 4, 0,139, 6, 4, 0, 27, 8, 19, 1, 2, 0, 4, 0, 28, 8,
+ 4, 0, 29, 8, 20, 1, 5, 0, 7, 0, 30, 8, 7, 0, 31, 8, 7, 0, 32, 8, 4, 0, 19, 0, 4, 0, 37, 0, 21, 1, 6, 0,
+ 0, 0, 33, 8, 0, 0, 91, 6, 49, 0,132, 0, 2, 0,106, 0, 2, 0, 13, 5, 4, 0, 37, 0, 22, 1, 21, 0, 22, 1, 0, 0,
+ 22, 1, 1, 0, 4, 0, 56, 0, 4, 0, 23, 0, 4, 0, 28, 0, 4, 0, 34, 8, 4, 0, 35, 8, 4, 0, 36, 8, 16, 1, 37, 8,
+ 0, 0, 33, 8, 4, 0, 38, 8, 4, 0, 39, 8, 21, 1, 93, 3, 18, 1, 40, 8, 19, 1, 41, 8, 20, 1, 42, 8, 17, 1, 43, 8,
+ 17, 1, 44, 8, 17, 1, 45, 8, 57, 0, 46, 8, 57, 0, 47, 8, 23, 1, 12, 0, 0, 0,250, 1, 9, 0,220, 0, 0, 0,221, 0,
+ 4, 0,224, 0, 4, 0,232, 0, 9, 0,225, 0, 7, 0,227, 0, 7, 0,228, 0, 9, 0, 48, 8, 9, 0, 49, 8, 9, 0,229, 0,
+ 9, 0,231, 0, 24, 1, 48, 0, 24, 1, 0, 0, 24, 1, 1, 0, 9, 0, 50, 8, 9, 0, 26, 0, 0, 0, 27, 0, 4, 0, 19, 0,
+ 4, 0, 17, 0, 4, 0, 23, 0, 4, 0, 87, 0, 4, 0, 51, 8, 4, 0, 52, 8, 4, 0, 35, 8, 4, 0, 36, 8, 4, 0, 53, 8,
+ 4, 0,243, 0, 4, 0, 54, 8, 4, 0, 55, 8, 7, 0, 56, 8, 7, 0, 37, 0, 7, 0, 57, 8, 7, 0, 58, 8, 4, 0,121, 0,
+ 4, 0, 59, 8, 22, 1, 60, 8, 36, 0, 79, 0, 46, 0,129, 0, 32, 0, 61, 8, 49, 0,132, 0, 7, 0, 62, 8, 7, 0, 63, 8,
+ 23, 1, 59, 1, 24, 1, 64, 8, 24, 1, 65, 8, 24, 1, 66, 8, 12, 0, 67, 8,250, 0,204, 6, 9, 0, 68, 8, 7, 0,251, 3,
+ 7, 0, 69, 8, 7, 0, 70, 8, 4, 0, 71, 8, 4, 0, 72, 8, 7, 0, 73, 8, 9, 0, 74, 8, 4, 0, 75, 8, 4, 0, 76, 8,
+ 4, 0, 77, 8, 7, 0, 78, 8, 25, 1, 4, 0, 25, 1, 0, 0, 25, 1, 1, 0, 12, 0, 79, 8, 24, 1, 80, 8,206, 0, 11, 0,
+ 12, 0, 81, 8, 12, 0, 67, 8, 12, 0, 82, 8, 24, 1, 83, 8, 0, 0, 84, 8, 0, 0, 85, 8, 4, 0, 86, 8, 4, 0, 87, 8,
+ 4, 0, 88, 8, 4, 0, 37, 0, 24, 0, 89, 8, 26, 1, 4, 0, 7, 0, 90, 8, 7, 0, 67, 3, 2, 0, 91, 8, 2, 0, 92, 8,
+ 27, 1, 6, 0, 7, 0, 93, 8, 7, 0, 94, 8, 7, 0, 95, 8, 7, 0, 96, 8, 4, 0, 97, 8, 4, 0, 98, 8, 28, 1, 13, 0,
+ 7, 0, 99, 8, 7, 0,100, 8, 7, 0,101, 8, 7, 0,102, 8, 7, 0,103, 8, 7, 0,104, 8, 7, 0,105, 8, 7, 0,106, 8,
+ 7, 0,107, 8, 7, 0,108, 8, 4, 0,228, 2, 4, 0,109, 8, 4, 0,110, 8, 29, 1, 2, 0, 7, 0, 86, 5, 7, 0, 37, 0,
+ 30, 1, 5, 0, 7, 0,111, 8, 7, 0,112, 8, 4, 0, 90, 0, 4, 0,184, 2, 4, 0,113, 8, 31, 1, 6, 0, 31, 1, 0, 0,
+ 31, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,114, 8, 2, 0, 56, 0, 32, 1, 8, 0, 32, 1, 0, 0, 32, 1, 1, 0,
+ 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,114, 8, 2, 0, 56, 0, 7, 0, 23, 0, 7, 0,121, 0, 33, 1, 45, 0, 33, 1, 0, 0,
+ 33, 1, 1, 0, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,114, 8, 2, 0,239, 0, 2, 0, 37, 4, 2, 0,115, 8, 7, 0,116, 8,
+ 7, 0, 88, 0, 7, 0,241, 2, 4, 0,117, 8, 4, 0, 81, 0, 4, 0,186, 2, 7, 0,118, 8, 7, 0,119, 8, 7, 0,120, 8,
+ 7, 0,121, 8, 7, 0,122, 8, 7, 0,123, 8, 7, 0,238, 2, 7, 0, 56, 1, 7, 0,124, 8, 7, 0,125, 8, 7, 0, 37, 0,
+ 7, 0,126, 8, 7, 0,127, 8, 7, 0,128, 8, 2, 0,129, 8, 2, 0,130, 8, 2, 0,131, 8, 2, 0,132, 8, 2, 0,133, 8,
+ 2, 0,134, 8, 2, 0,135, 8, 2, 0,136, 8, 2, 0, 17, 2, 2, 0,137, 8, 2, 0, 14, 2, 2, 0,138, 8, 0, 0,139, 8,
+ 0, 0,140, 8, 7, 0,237, 0, 34, 1,141, 8, 66, 0,229, 1, 35, 1, 16, 0, 35, 1, 0, 0, 35, 1, 1, 0, 2, 0, 17, 0,
+ 2, 0, 19, 0, 2, 0,114, 8, 2, 0,239, 0, 7, 0,233, 2, 7, 0,234, 2, 7, 0,235, 2, 7, 0, 66, 2, 7, 0,236, 2,
+ 7, 0,237, 2, 7, 0,142, 8, 7, 0,238, 2, 7, 0,240, 2, 7, 0,241, 2,232, 0, 5, 0, 2, 0, 17, 0, 2, 0, 25, 8,
+ 2, 0, 19, 0, 2, 0,143, 8, 27, 0,166, 6,231, 0, 3, 0, 4, 0, 68, 0, 4, 0,144, 8,232, 0, 2, 0, 36, 1, 7, 0,
+ 36, 1, 0, 0, 36, 1, 1, 0, 0, 0, 20, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 22, 0, 9, 0,145, 8, 37, 1, 5, 0,
+ 0, 0, 20, 0, 7, 0, 76, 1, 7, 0,146, 8, 4, 0,147, 8, 4, 0, 37, 0, 38, 1, 4, 0, 2, 0, 17, 0, 2, 0, 19, 0,
+ 2, 0, 89, 0, 2, 0, 69, 0, 39, 1, 4, 0, 0, 0, 20, 0, 65, 0,148, 8, 7, 0, 76, 1, 7, 0, 37, 0, 40, 1, 6, 0,
+ 2, 0,149, 8, 2, 0,150, 8, 2, 0, 17, 0, 2, 0,151, 8, 0, 0,152, 8, 0, 0,153, 8, 41, 1, 5, 0, 4, 0, 17, 0,
+ 4, 0, 37, 0, 0, 0, 20, 0, 0, 0,154, 8, 0, 0,155, 8, 42, 1, 3, 0, 4, 0, 17, 0, 4, 0, 37, 0, 0, 0, 20, 0,
+ 43, 1, 4, 0, 2, 0,156, 8, 2, 0,157, 8, 2, 0, 19, 0, 2, 0, 37, 0, 44, 1, 6, 0, 0, 0, 20, 0, 0, 0,158, 8,
+ 2, 0,159, 8, 2, 0,238, 2, 2, 0, 69, 1, 2, 0, 69, 0, 45, 1, 5, 0, 0, 0, 20, 0, 7, 0, 67, 3, 7, 0,128, 4,
+ 2, 0, 19, 0, 2, 0,198, 2, 46, 1, 3, 0, 0, 0, 20, 0, 4, 0,186, 2, 4, 0,156, 8, 47, 1, 7, 0, 0, 0, 20, 0,
+ 7, 0,128, 4, 0, 0,160, 8, 0, 0,161, 8, 2, 0, 69, 1, 2, 0, 89, 0, 4, 0,162, 8, 48, 1, 4, 0, 0, 0,163, 8,
+ 0, 0,164, 8, 4, 0, 17, 0, 7, 0,202, 2, 49, 1, 3, 0, 32, 0,165, 8, 0, 0,166, 8, 0, 0,167, 8, 50, 1, 18, 0,
+ 50, 1, 0, 0, 50, 1, 1, 0, 2, 0, 17, 0, 2, 0,168, 8, 2, 0, 19, 0, 2, 0,169, 8, 2, 0,170, 8, 2, 0,171, 8,
+ 2, 0, 89, 0, 2, 0, 69, 0, 0, 0, 20, 0, 9, 0, 2, 0, 51, 1,172, 8, 32, 0, 44, 0, 2, 0,102, 5, 2, 0, 69, 8,
+ 2, 0,173, 8, 2, 0, 37, 0, 52, 1, 11, 0, 0, 0, 20, 0, 0, 0, 17, 0, 0, 0,174, 8, 2, 0, 19, 0, 2, 0,198, 2,
+ 2, 0,175, 8, 4, 0,176, 8, 4, 0,177, 8, 4, 0,178, 8, 4, 0,179, 8, 4, 0,180, 8, 53, 1, 1, 0, 0, 0,181, 8,
+ 54, 1, 4, 0, 42, 0,133, 6, 0, 0,125, 7, 4, 0, 69, 1, 4, 0, 19, 0, 51, 1, 18, 0, 51, 1, 0, 0, 51, 1, 1, 0,
+ 51, 1,182, 8, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,183, 8, 2, 0,171, 8, 2, 0,168, 8, 2, 0,184, 8, 2, 0, 69, 0,
+ 2, 0,226, 1, 0, 0, 20, 0, 9, 0, 2, 0, 55, 1,172, 8, 50, 1,185, 8, 2, 0, 15, 0, 2, 0,186, 8, 4, 0,187, 8,
+ 56, 1, 3, 0, 4, 0,212, 2, 4, 0, 37, 0, 32, 0, 44, 0, 57, 1, 12, 0,162, 0,188, 8, 2, 0, 17, 0, 2, 0, 19, 0,
+ 4, 0,116, 8, 4, 0, 88, 0, 0, 0, 20, 0, 0, 0,189, 8, 2, 0,190, 8, 2, 0,191, 8, 2, 0,192, 8, 2, 0,193, 8,
+ 7, 0,194, 8, 58, 1, 8, 0, 7, 0,195, 8, 7, 0,196, 8, 7, 0,197, 8, 7, 0,198, 8, 7, 0,199, 8, 7, 0,200, 8,
+ 7, 0,201, 8, 7, 0,202, 8, 59, 1, 13, 0, 2, 0, 19, 0, 2, 0,205, 6, 4, 0, 89, 0, 4, 0, 69, 0, 2, 0,203, 8,
+ 7, 0,251, 3, 7, 0,204, 8,250, 0,204, 6, 58, 1,205, 8, 2, 0, 17, 0, 2, 0,248, 1, 2, 0,234, 5, 2, 0,206, 8,
+ 60, 1, 11, 0, 4, 0,212, 2, 2, 0, 17, 0, 2, 0, 19, 0, 32, 0, 44, 0, 81, 0,207, 8, 0, 0, 20, 0, 7, 0,208, 8,
+ 7, 0,209, 8, 7, 0,136, 3, 2, 0,210, 8, 2, 0,211, 8, 61, 1, 5, 0, 2, 0, 17, 0, 2, 0, 89, 0, 4, 0, 37, 0,
+ 46, 0,129, 0, 32, 0, 93, 5, 62, 1, 5, 0, 4, 0, 37, 0, 4, 0, 17, 0, 0, 0, 20, 0, 0, 0,154, 8, 32, 0, 44, 0,
+ 63, 1, 13, 0, 2, 0, 19, 0, 2, 0, 17, 0, 2, 0,168, 8, 2, 0,137, 3, 7, 0,212, 8, 7, 0,213, 8, 7, 0,178, 4,
+ 7, 0,149, 3, 7, 0,108, 3, 7, 0,111, 3, 7, 0,214, 8, 7, 0,215, 8, 32, 0,216, 8, 64, 1, 10, 0, 2, 0, 19, 0,
+ 2, 0, 17, 0, 4, 0,116, 8, 4, 0, 88, 0, 0, 0, 20, 0, 0, 0,189, 8, 2, 0, 89, 0, 2, 0, 69, 0, 2, 0,226, 1,
+ 2, 0,248, 1, 65, 1, 8, 0, 32, 0, 44, 0, 7, 0,235, 2, 7, 0,217, 8, 7, 0,218, 8, 7, 0, 37, 0, 2, 0, 89, 0,
+ 2, 0,198, 2, 7, 0, 69, 0, 66, 1, 12, 0, 2, 0, 17, 0, 2, 0, 69, 1, 2, 0, 19, 0, 2, 0,238, 2, 2, 0,212, 2,
+ 2, 0,219, 8, 4, 0, 37, 0, 7, 0,220, 8, 7, 0,221, 8, 7, 0,222, 8, 7, 0,223, 8, 0, 0,224, 8, 67, 1, 9, 0,
+ 2, 0, 19, 0, 2, 0, 17, 0, 4, 0,116, 8, 4, 0, 88, 0, 0, 0, 20, 0, 2, 0,178, 4, 2, 0, 63, 0, 2, 0,225, 8,
+ 2, 0,226, 8, 68, 1, 7, 0, 4, 0,186, 2, 4, 0,227, 8, 4, 0,228, 8, 4, 0,229, 8, 7, 0,230, 8, 7, 0,231, 8,
+ 0, 0,160, 8, 69, 1, 7, 0, 0, 0,232, 8, 32, 0,233, 8, 0, 0,166, 8, 2, 0,234, 8, 2, 0, 89, 0, 4, 0, 69, 0,
+ 0, 0,167, 8, 70, 1, 6, 0, 2, 0, 19, 0, 2, 0, 17, 0, 4, 0,116, 8, 4, 0, 88, 0, 0, 0,235, 8, 0, 0,236, 8,
+ 71, 1, 1, 0, 4, 0, 19, 0, 72, 1, 6, 0, 0, 0, 92, 0, 2, 0, 17, 0, 2, 0, 19, 0, 4, 0,237, 8, 7, 0,238, 8,
+ 42, 0,133, 6, 73, 1, 4, 0, 0, 0, 61, 2, 2, 0, 19, 0, 4, 0, 17, 0, 32, 0, 44, 0, 74, 1, 2, 0, 4, 0, 17, 0,
+ 4, 0, 53, 6, 75, 1, 6, 0, 0, 0,163, 8, 0, 0,164, 8, 4, 0, 17, 0, 7, 0, 25, 2, 32, 0, 46, 3, 32, 0,239, 8,
+ 55, 1, 10, 0, 55, 1, 0, 0, 55, 1, 1, 0, 55, 1,182, 8, 2, 0, 17, 0, 2, 0, 19, 0, 2, 0,168, 8, 2, 0,240, 8,
+ 0, 0, 20, 0, 9, 0, 2, 0, 32, 0, 44, 0,250, 0, 16, 0, 27, 0, 31, 0, 0, 0, 34, 0, 43, 0,147, 0, 9, 0,220, 0,
+ 43, 0,241, 8, 36, 0, 79, 0, 7, 0,251, 3, 7, 0,242, 8, 7, 0,204, 8, 7, 0,195, 8, 7, 0,196, 8, 7, 0,243, 8,
+ 4, 0, 90, 0, 4, 0, 37, 0, 9, 0,244, 8, 9, 0,245, 8, 76, 1, 6, 0, 76, 1, 0, 0, 76, 1, 1, 0, 32, 0, 44, 0,
+ 9, 0,246, 8, 4, 0,244, 0, 4, 0, 37, 0, 66, 0, 4, 0, 27, 0, 31, 0, 12, 0,247, 8, 4, 0,126, 0, 7, 0,248, 8,
+ 77, 1, 27, 0, 77, 1, 0, 0, 77, 1, 1, 0, 26, 0,249, 8, 77, 1, 38, 0, 12, 0,250, 8, 0, 0, 20, 0, 7, 0,251, 8,
+ 7, 0,252, 8, 7, 0,253, 8, 7, 0,254, 8, 4, 0, 19, 0, 7, 0,255, 8, 7, 0, 0, 9, 7, 0, 1, 9, 7, 0, 76, 1,
+ 7, 0, 25, 2, 7, 0, 2, 9, 7, 0,184, 2, 7, 0, 3, 9, 7, 0, 4, 9, 7, 0, 5, 9, 7, 0, 6, 9, 7, 0, 7, 9,
+ 7, 0,169, 0, 4, 0,126, 0, 2, 0,139, 5, 2, 0,178, 4, 78, 1, 25, 0, 27, 0, 31, 0, 39, 0, 74, 0, 12, 0, 8, 9,
+ 12, 0, 9, 9, 12, 0, 10, 9, 77, 1, 11, 9, 9, 0, 12, 9, 9, 0, 13, 9, 4, 0, 19, 0, 4, 0, 29, 6, 2, 0,242, 2,
+ 2, 0, 82, 6, 4, 0, 37, 0, 4, 0,126, 0, 4, 0, 14, 9, 2, 0, 15, 9, 2, 0, 16, 9, 2, 0, 17, 9, 2, 0, 18, 9,
+ 4, 0, 19, 9, 4, 0, 20, 9, 4, 0, 21, 9, 4, 0, 22, 9, 4, 0, 23, 9, 4, 0, 24, 9, 79, 1, 2, 0, 7, 0,144, 2,
+ 4, 0, 19, 0,166, 0, 5, 0, 79, 1, 25, 9, 4, 0,184, 2, 4, 0, 26, 9, 4, 0, 27, 9, 4, 0, 19, 0,165, 0, 16, 0,
+ 4, 0, 28, 9, 4, 0, 29, 9, 4, 0, 30, 9, 4, 0, 31, 9, 2, 0, 32, 9, 2, 0, 33, 9, 2, 0, 34, 9, 2, 0,244, 0,
+ 2, 0, 35, 9, 2, 0, 36, 9, 2, 0, 37, 9, 2, 0, 38, 9, 4, 0, 39, 9, 4, 0, 40, 9, 4, 0, 41, 9, 4, 0, 42, 9,
+ 80, 1, 44, 0, 80, 1, 0, 0, 80, 1, 1, 0, 26, 0,249, 8, 12, 0,163, 3, 0, 0, 20, 0, 2, 0, 19, 0, 2, 0, 43, 9,
+ 2, 0, 44, 9, 2, 0, 45, 9, 2, 0,122, 3, 2, 0, 46, 9, 4, 0, 64, 2, 4, 0, 21, 9, 4, 0, 22, 9, 77, 1, 47, 9,
+ 80, 1, 38, 0, 80, 1, 48, 9, 12, 0, 49, 9, 9, 0, 50, 9, 9, 0, 51, 9, 9, 0, 52, 9, 7, 0, 64, 1, 7, 0,169, 0,
+ 7, 0, 53, 9, 7, 0, 4, 2, 7, 0,113, 3, 7, 0,115, 3, 2, 0,145, 3, 2, 0, 37, 0, 7, 0, 54, 9, 7, 0, 55, 9,
+ 7, 0,118, 3, 7, 0, 56, 9, 7, 0, 57, 9, 7, 0, 58, 9, 7, 0, 59, 9, 7, 0, 60, 9, 7, 0, 61, 9, 7, 0, 62, 9,
+ 7, 0, 63, 9, 7, 0, 56, 2,166, 0,101, 3, 32, 0, 64, 9, 80, 1, 65, 9,163, 0, 14, 0, 12, 0, 66, 9, 76, 0, 67, 9,
+ 2, 0, 19, 0, 2, 0, 68, 9, 7, 0, 93, 2, 7, 0, 69, 9, 7, 0, 70, 9, 12, 0, 71, 9, 4, 0, 72, 9, 4, 0, 73, 9,
+ 9, 0, 74, 9, 9, 0, 75, 9,165, 0,100, 3, 0, 0, 76, 9, 81, 1, 1, 0, 4, 0, 73, 9, 82, 1, 12, 0, 4, 0, 73, 9,
+ 7, 0,180, 8, 2, 0, 77, 9, 2, 0, 78, 9, 7, 0, 79, 9, 7, 0, 80, 9, 2, 0, 81, 9, 2, 0, 19, 0, 7, 0, 82, 9,
+ 7, 0, 83, 9, 7, 0, 84, 9, 7, 0, 85, 9, 83, 1, 7, 0, 83, 1, 0, 0, 83, 1, 1, 0, 12, 0, 86, 9, 4, 0, 19, 0,
+ 4, 0, 87, 9, 0, 0,242, 3, 2, 1, 88, 9,162, 0, 7, 0, 27, 0, 31, 0, 12, 0, 89, 9, 12, 0, 66, 9, 12, 0, 90, 9,
+ 12, 0,100, 0, 4, 0, 19, 0, 4, 0, 91, 9,222, 0, 5, 0, 27, 0, 92, 9, 12, 0, 66, 9, 66, 0, 93, 9, 4, 0, 94, 9,
+ 4, 0, 19, 0, 84, 1, 13, 0,217, 0, 0, 0,217, 0, 1, 0, 12, 0, 20, 6, 4, 0, 21, 6, 7, 0, 22, 6, 2, 0, 23, 6,
+218, 0, 72, 6,162, 0, 96, 3,222, 0, 95, 9, 0, 0, 69, 1, 0, 0, 75, 6, 2, 0, 19, 0, 7, 0, 96, 9, 85, 1, 8, 0,
+ 85, 1, 0, 0, 85, 1, 1, 0, 83, 1, 97, 9, 36, 0, 79, 0, 12, 0,102, 3, 4, 0, 19, 0, 0, 0, 20, 0, 4, 0, 98, 9,
+ 86, 1, 5, 0, 86, 1, 0, 0, 86, 1, 1, 0, 36, 0, 79, 0, 2, 0, 19, 0, 0, 0, 99, 9, 87, 1, 14, 0, 87, 1, 0, 0,
+ 87, 1, 1, 0, 9, 0, 2, 0, 2, 0, 17, 0, 2, 0, 19, 0, 0, 0,100, 9, 0, 0,101, 9, 0, 0, 99, 9, 7, 0,102, 9,
+ 7, 0,103, 9, 4, 0, 37, 0, 36, 0, 79, 0, 7, 0,104, 9, 7, 0,105, 9, 88, 1, 9, 0, 88, 1, 0, 0, 88, 1, 1, 0,
+ 32, 0,106, 9, 0, 0,245, 2, 7, 0,107, 9, 2, 0,108, 9, 2, 0, 19, 0, 2, 0, 17, 0, 2, 0,109, 9, 89, 1, 7, 0,
+ 42, 0,133, 6, 26, 0,249, 8, 4, 0, 19, 0, 4, 0,110, 9, 12, 0,111, 9, 32, 0,106, 9, 0, 0,245, 2, 90, 1, 15, 0,
+ 32, 0,106, 9, 2, 0,112, 9, 2, 0, 19, 0, 2, 0,113, 9, 2, 0,114, 9, 0, 0,245, 2, 32, 0,115, 9, 0, 0,116, 9,
+ 7, 0,117, 9, 7, 0, 25, 2, 7, 0,118, 9, 7, 0,119, 9, 2, 0, 17, 0, 2, 0, 69, 1, 7, 0, 76, 1, 91, 1, 6, 0,
+ 32, 0,106, 9, 7, 0, 25, 9, 2, 0,120, 9, 2, 0,121, 9, 2, 0, 19, 0, 2, 0,122, 9, 92, 1, 6, 0, 32, 0,106, 9,
+ 4, 0,123, 9, 4, 0,124, 9, 4, 0, 90, 0, 4, 0, 37, 0, 0, 0,245, 2, 93, 1, 4, 0, 32, 0,106, 9, 4, 0, 19, 0,
+ 4, 0,123, 9, 0, 0,245, 2, 94, 1, 4, 0, 32, 0,106, 9, 4, 0, 19, 0, 4, 0,123, 9, 0, 0,245, 2, 95, 1, 4, 0,
+ 32, 0,106, 9, 4, 0, 19, 0, 4, 0,123, 9, 0, 0,245, 2, 96, 1, 2, 0, 4, 0, 19, 0, 7, 0,251, 3, 97, 1, 2, 0,
+ 32, 0,106, 9, 0, 0,245, 2, 98, 1, 10, 0, 32, 0,106, 9, 4, 0,125, 9, 7, 0,120, 0, 4, 0, 19, 0, 2, 0,126, 6,
+ 2, 0,126, 9, 2, 0, 89, 0, 2, 0, 69, 0, 7, 0,127, 9, 0, 0,245, 2, 99, 1, 10, 0, 32, 0,106, 9, 2, 0, 17, 0,
+ 2, 0, 45, 4, 4, 0, 87, 0, 4, 0, 88, 0, 7, 0,217, 8, 7, 0,218, 8, 4, 0, 37, 0,162, 0,188, 8, 0, 0,245, 2,
+100, 1, 4, 0, 32, 0,106, 9, 4, 0,123, 3, 4, 0,128, 9, 0, 0,245, 2,101, 1, 4, 0, 32, 0,106, 9, 4, 0,123, 3,
+ 4, 0, 37, 0, 0, 0,245, 2,102, 1, 6, 0, 32, 0,106, 9, 7, 0,120, 0, 7, 0, 58, 3, 4, 0,129, 9, 2, 0,123, 3,
+ 2, 0,124, 3,103, 1, 6, 0, 32, 0,106, 9, 4, 0,130, 9, 4, 0,131, 9, 7, 0,132, 9, 7, 0,133, 9, 0, 0,245, 2,
+104, 1, 16, 0, 32, 0,106, 9, 32, 0, 48, 9, 4, 0, 17, 0, 7, 0,134, 9, 7, 0,135, 9, 7, 0,136, 9, 7, 0,137, 9,
+ 7, 0,138, 9, 7, 0,139, 9, 7, 0,140, 9, 7, 0,141, 9, 7, 0,142, 9, 2, 0, 19, 0, 2, 0, 37, 0, 2, 0, 89, 0,
+ 2, 0, 69, 0,105, 1, 3, 0, 32, 0,106, 9, 4, 0, 19, 0, 4, 0, 17, 2,106, 1, 5, 0, 32, 0,106, 9, 4, 0, 19, 0,
+ 4, 0, 37, 0, 7, 0,143, 9, 0, 0,245, 2,107, 1, 10, 0, 32, 0,106, 9, 0, 0,245, 2, 2, 0,144, 9, 2, 0,145, 9,
+ 0, 0,146, 9, 0, 0,147, 9, 7, 0,148, 9, 7, 0,149, 9, 7, 0,150, 9, 7, 0,151, 9,108, 1, 5, 0, 32, 0,106, 9,
+ 0, 0,245, 2, 7, 0,192, 2, 2, 0,152, 9, 2, 0, 19, 0,109, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0,
+ 7, 0, 12, 0, 7, 0,153, 9, 7, 0,154, 9, 2, 0, 19, 0, 2, 0, 17, 2,110, 1, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0,
+ 7, 0, 11, 0, 7, 0, 12, 0, 7, 0,153, 9, 7, 0,154, 9, 2, 0, 19, 0, 2, 0, 17, 2,111, 1, 8, 0, 7, 0, 9, 0,
+ 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 12, 0, 7, 0,153, 9, 7, 0,154, 9, 2, 0, 19, 0, 2, 0, 17, 2,112, 1, 7, 0,
+ 32, 0,106, 9, 0, 0,245, 2, 7, 0, 76, 1, 7, 0, 85, 1, 2, 0, 19, 0, 2, 0, 69, 1, 4, 0, 37, 0,113, 1, 5, 0,
+ 32, 0, 46, 3, 7, 0, 76, 1, 2, 0, 50, 3, 0, 0, 52, 3, 0, 0,155, 9,114, 1, 10, 0,114, 1, 0, 0,114, 1, 1, 0,
+ 2, 0, 17, 0, 2, 0, 19, 0, 0, 0,156, 9, 7, 0, 19, 1, 7, 0, 20, 1, 2, 0, 86, 9, 2, 0,157, 9, 32, 0, 44, 0,
+115, 1, 22, 0,115, 1, 0, 0,115, 1, 1, 0, 2, 0, 19, 0, 2, 0, 69, 1, 2, 0,158, 9, 2, 0,159, 9, 36, 0, 79, 0,
+162, 0,188, 8, 32, 0,161, 0, 7, 0, 87, 0, 7, 0, 88, 0, 7, 0,160, 9, 7, 0,161, 9, 7, 0,162, 9, 7, 0,163, 9,
+ 7, 0,231, 2, 7, 0,164, 9, 7, 0,190, 8, 7, 0,165, 9, 0, 0,166, 9, 0, 0,167, 9, 12, 0,104, 3,116, 1, 8, 0,
+ 7, 0, 32, 2, 7, 0,217, 8, 7, 0,218, 8, 9, 0, 2, 0, 2, 0,168, 9, 2, 0,169, 9, 2, 0,170, 9, 2, 0,171, 9,
+117, 1, 18, 0,117, 1, 0, 0,117, 1, 1, 0,117, 1,172, 9, 0, 0, 20, 0,116, 1,173, 9, 2, 0, 17, 0, 2, 0, 19, 0,
+ 2, 0,174, 9, 2, 0,175, 9, 2, 0,176, 9, 2, 0,177, 9, 4, 0, 89, 0, 7, 0,178, 9, 7, 0,179, 9, 4, 0,180, 9,
+ 4, 0,181, 9,117, 1,182, 9,118, 1,183, 9,119, 1, 33, 0,119, 1, 0, 0,119, 1, 1, 0,119, 1,184, 9, 0, 0, 20, 0,
+ 2, 0, 17, 0, 2, 0, 19, 0, 2, 0, 34, 8, 2, 0, 69, 8, 2, 0,185, 9, 2, 0,128, 0, 2, 0,175, 9, 2, 0, 25, 8,
+ 12, 0,183, 8, 12, 0,186, 9, 27, 0,166, 6, 9, 0,187, 9, 7, 0,178, 9, 7, 0,179, 9, 7, 0, 66, 2, 7, 0,188, 9,
+ 2, 0,189, 9, 2, 0,190, 9, 7, 0,191, 9, 7, 0,192, 9, 2, 0,193, 9, 2, 0,194, 9, 9, 0,195, 9, 24, 0,196, 9,
+ 24, 0,197, 9, 24, 0,198, 9,120, 1,148, 0,121, 1,199, 9,122, 1,200, 9,118, 1, 8, 0,118, 1, 0, 0,118, 1, 1, 0,
+119, 1,201, 9,119, 1,202, 9,117, 1,203, 9,117, 1,182, 9, 4, 0, 19, 0, 4, 0, 37, 0, 60, 0, 22, 0, 27, 0, 31, 0,
+ 39, 0, 74, 0,164, 0, 99, 3, 12, 0,204, 9, 12, 0,205, 9,116, 1,206, 9, 12, 0,207, 9, 4, 0, 17, 0, 4, 0,208, 9,
+ 4, 0,209, 9, 4, 0,210, 9, 4, 0, 19, 0, 4, 0, 37, 0, 12, 0,211, 9,122, 1,212, 9, 4, 0,213, 9, 9, 0,214, 9,
+ 9, 0,215, 9, 4, 0,216, 9, 9, 0,217, 9, 9, 0,218, 9, 9, 0,219, 9,123, 1, 6, 0, 4, 0,119, 0, 4, 0,121, 0,
+ 4, 0, 25, 8, 0, 0,220, 9, 0, 0,221, 9, 2, 0, 37, 0,124, 1, 16, 0, 2, 0,233, 7, 2, 0,234, 7, 2, 0,222, 9,
+ 2, 0,223, 9, 2, 0,224, 9, 2, 0, 67, 0, 7, 0,230, 2, 7, 0,225, 9, 7, 0,226, 9, 2, 0, 91, 1, 0, 0,227, 9,
+ 0, 0,228, 9, 2, 0,229, 9, 2, 0, 37, 0, 4, 0,230, 9, 4, 0,231, 9,125, 1, 9, 0, 7, 0,232, 9, 7, 0,233, 9,
+ 7, 0,243, 8, 7, 0, 67, 3, 7, 0,234, 9, 7, 0, 88, 6, 2, 0, 65, 3, 0, 0,235, 9, 0, 0, 37, 0,126, 1, 4, 0,
+ 7, 0,236, 9, 7, 0,237, 9, 2, 0, 65, 3, 2, 0, 37, 0,127, 1, 3, 0, 7, 0,238, 9, 7, 0, 56, 8, 7, 0, 15, 0,
+128, 1, 7, 0, 0, 0,250, 1, 2, 0, 11, 5, 2, 0, 12, 5, 2, 0, 13, 5, 2, 0,200, 4, 4, 0,121, 0, 4, 0, 43, 4,
+129, 1, 9, 0, 7, 0,239, 9, 7, 0,240, 9, 7, 0,241, 9, 7, 0, 77, 2, 7, 0,242, 9, 7, 0,243, 9, 7, 0,244, 9,
+ 2, 0,245, 9, 2, 0,246, 9,130, 1, 4, 0, 2, 0,247, 9, 2, 0,248, 9, 2, 0,249, 9, 2, 0,250, 9,131, 1, 2, 0,
+ 7, 0, 5, 0, 7, 0, 6, 0,132, 1, 2, 0, 0, 0,163, 0, 0, 0,251, 9,133, 1, 1, 0, 0, 0, 20, 0,134, 1, 10, 0,
+ 0, 0,252, 9, 0, 0,253, 9, 0, 0, 81, 6, 0, 0,254, 9, 2, 0,222, 9, 2, 0,255, 9, 7, 0, 0, 10, 7, 0, 1, 10,
+ 7, 0, 2, 10, 7, 0,164, 9,135, 1, 2, 0, 9, 0, 3, 10, 9, 0, 4, 10,136, 1, 11, 0, 0, 0, 13, 5, 0, 0, 17, 0,
+ 0, 0, 65, 3, 0, 0, 67, 3, 0, 0, 5, 10, 0, 0,106, 0, 0, 0, 61, 2, 7, 0, 6, 10, 7, 0, 7, 10, 7, 0, 8, 10,
+ 7, 0, 9, 10,137, 1, 8, 0, 7, 0,149, 8, 7, 0,120, 0, 7, 0,228, 9, 7, 0,149, 2, 7, 0, 10, 10, 7, 0,233, 0,
+ 7, 0, 11, 10, 4, 0, 17, 0,138, 1, 4, 0, 2, 0, 12, 10, 2, 0, 13, 10, 2, 0, 14, 10, 2, 0, 37, 0,139, 1, 8, 0,
+ 7, 0, 15, 10, 7, 0,192, 2, 7, 0, 16, 10, 7, 0, 30, 8, 7, 0, 31, 8, 7, 0, 32, 8, 7, 0, 17, 10, 7, 0, 18, 10,
+140, 1, 6, 0, 2, 0, 19, 10, 2, 0, 20, 10, 7, 0, 21, 10, 7, 0, 22, 10, 7, 0, 23, 10, 7, 0, 24, 10,141, 1, 1, 0,
+ 0, 0, 20, 0,142, 1, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 2, 0, 19, 0, 2, 0, 25, 10,143, 1, 10, 0, 2, 0,231, 3,
+ 2, 0, 19, 0, 7, 0,128, 4, 7, 0, 26, 10, 7, 0, 27, 10, 7, 0, 28, 10, 7, 0, 29, 10,142, 1, 30, 10,142, 1, 31, 10,
+142, 1, 32, 10, 63, 0, 11, 0, 4, 0, 19, 0, 4, 0, 63, 0, 4, 0, 33, 10, 4, 0, 34, 10, 24, 0, 35, 10, 24, 0, 36, 10,
+143, 1, 37, 10, 7, 0, 38, 10, 7, 0, 39, 10, 7, 0, 40, 10, 7, 0, 41, 10,235, 0, 10, 0, 4, 0, 86, 9, 4, 0, 42, 10,
+ 7, 0, 43, 10, 7, 0, 44, 10, 7, 0, 45, 10, 7, 0, 46, 10, 7, 0, 10, 0, 7, 0, 12, 0, 4, 0, 69, 1, 4, 0,235, 2,
+234, 0, 18, 0, 4, 0,124, 0, 4, 0, 47, 10, 4, 0, 48, 10, 7, 0, 49, 10, 4, 0, 50, 10, 7, 0, 51, 10, 7, 0, 52, 10,
+ 4, 0, 53, 10, 7, 0, 54, 10, 4, 0, 55, 10, 7, 0, 56, 10,235, 0, 57, 10, 7, 0, 58, 10, 7, 0, 59, 10, 7, 0, 60, 10,
+ 7, 0, 61, 10, 4, 0, 62, 10, 4, 0, 37, 0,144, 1, 4, 0, 47, 0,222, 2, 7, 0, 63, 10, 7, 0,158, 1, 7, 0, 37, 0,
+195, 0, 33, 0, 27, 0, 31, 0,144, 1, 64, 10, 63, 0, 30, 10, 51, 0, 65, 10, 57, 0, 66, 10, 30, 0,148, 0, 0, 0, 67, 10,
+ 7, 0, 68, 10, 2, 0,240, 5, 2, 0, 69, 10, 4, 0,106, 0, 4, 0, 19, 0, 7, 0, 70, 10, 4, 0, 74, 2, 4, 0, 71, 10,
+ 7, 0, 72, 10, 7, 0, 73, 10, 7, 0, 74, 10, 7, 0,158, 1, 4, 0, 75, 10, 7, 0, 76, 10, 0, 0, 77, 10, 0, 0, 78, 10,
+ 0, 0, 79, 10, 0, 0,226, 1, 7, 0, 80, 10, 7, 0, 81, 10, 7, 0, 82, 10, 7, 0, 83, 10, 4, 0, 84, 10, 7, 0, 85, 10,
+ 7, 0, 86, 10, 7, 0, 87, 10,145, 1, 10, 0, 4, 0, 17, 0, 4, 0,120, 0, 4, 0, 19, 0, 4, 0,185, 3, 4, 0, 88, 10,
+ 4, 0, 89, 10, 4, 0, 90, 10, 0, 0, 92, 0, 0, 0, 20, 0, 9, 0, 2, 0,146, 1, 1, 0, 0, 0, 18, 8, 92, 0, 7, 0,
+145, 1, 91, 10, 4, 0, 92, 10, 4, 0, 93, 10, 4, 0, 94, 10, 4, 0, 37, 0, 9, 0, 95, 10,146, 1, 96, 10,147, 1, 5, 0,
+ 7, 0,144, 2, 7, 0,212, 2, 7, 0, 25, 2, 2, 0,120, 2, 2, 0, 37, 0,148, 1, 5, 0, 7, 0,144, 2, 7, 0, 97, 10,
+ 7, 0, 98, 10, 7, 0, 99, 10, 7, 0,212, 2,149, 1, 5, 0, 32, 0,100, 10,150, 1, 22, 0, 7, 0,210, 5, 7, 0,101, 10,
+ 7, 0, 56, 0,151, 1, 7, 0, 4, 0,102, 10, 4, 0,103, 10, 4, 0,104, 10, 7, 0,105, 10, 7, 0,106, 10, 7, 0,107, 10,
+ 7, 0, 56, 0,152, 1, 8, 0,152, 1, 0, 0,152, 1, 1, 0, 32, 0, 44, 0, 4, 0,252, 0, 2, 0, 19, 0, 2, 0, 69, 1,
+ 7, 0,212, 2, 7, 0,157, 8,153, 1, 6, 0,153, 1, 0, 0,153, 1, 1, 0, 32, 0, 44, 0, 2, 0,197, 2, 2, 0, 19, 0,
+ 2, 0,108, 10,154, 1, 17, 0,148, 1,179, 3,148, 1,109, 10,147, 1,110, 10,148, 1,141, 8,149, 1,111, 10, 4, 0, 81, 0,
+ 7, 0,212, 2, 7, 0,241, 2, 7, 0,112, 10, 4, 0,102, 10, 4, 0,113, 10, 7, 0,106, 10, 7, 0,107, 10, 7, 0,106, 0,
+ 4, 0,114, 10, 2, 0, 19, 0, 2, 0,115, 10,155, 1, 9, 0, 7, 0,116, 10, 7, 0,248, 0, 7, 0,117, 10, 7, 0,118, 10,
+ 7, 0,119, 10, 7, 0,120, 10, 7, 0,121, 10, 7, 0,122, 10, 7, 0,123, 10,156, 1,111, 0, 27, 0, 31, 0, 39, 0, 74, 0,
+157, 1,124, 10,155, 1,125, 10,173, 0, 65, 4, 4, 0, 19, 0, 2, 0, 17, 0, 2, 0,144, 9, 2, 0,126, 10, 2, 0,127, 10,
+ 2, 0,145, 3, 2, 0,128, 10, 2, 0,129, 10, 2, 0,130, 10, 2, 0,131, 10, 2, 0,132, 10, 2, 0,133, 10, 2, 0,134, 10,
+ 2, 0,135, 10, 2, 0,110, 5, 2, 0,136, 10, 2, 0,137, 10, 2, 0,138, 10, 2, 0,139, 10, 2, 0,140, 10, 2, 0, 14, 2,
+ 2, 0,134, 8, 2, 0,109, 8, 2, 0,141, 10, 2, 0,142, 10, 2, 0,195, 3, 2, 0,196, 3, 2, 0,143, 10, 2, 0,144, 10,
+ 2, 0,145, 10, 2, 0,146, 10, 7, 0,147, 10, 7, 0,148, 10, 7, 0,149, 10, 2, 0, 61, 5, 2, 0,150, 10, 7, 0,151, 10,
+ 7, 0,152, 10, 7, 0,153, 10, 7, 0,116, 8, 7, 0, 88, 0, 7, 0,241, 2, 7, 0,122, 8, 7, 0,154, 10, 7, 0,155, 10,
+ 7, 0,156, 10, 4, 0,117, 8, 4, 0,115, 8, 4, 0,157, 10, 7, 0,118, 8, 7, 0,119, 8, 7, 0,120, 8, 7, 0,158, 10,
+ 7, 0,159, 10, 7, 0,160, 10, 7, 0,161, 10, 7, 0,162, 10, 7, 0, 56, 0, 7, 0,163, 10, 7, 0,164, 10, 7, 0,165, 10,
+ 7, 0,166, 10, 7, 0,136, 3, 7, 0,106, 0, 7, 0,167, 10, 7, 0,168, 10, 7, 0,169, 10, 7, 0,170, 10, 7, 0,171, 10,
+ 7, 0,172, 10, 7, 0,173, 10, 4, 0,174, 10, 4, 0,175, 10, 7, 0,176, 10, 7, 0,177, 10, 7, 0,178, 10, 7, 0,179, 10,
+ 7, 0,180, 10, 7, 0,207, 0, 7, 0,181, 10, 7, 0,222, 3, 7, 0,220, 3, 7, 0,221, 3, 7, 0,182, 10, 7, 0,183, 10,
+ 7, 0,184, 10, 7, 0,185, 10, 7, 0,186, 10, 7, 0,187, 10, 7, 0,188, 10, 7, 0,189, 10, 7, 0,190, 10, 7, 0,191, 10,
+ 7, 0,192, 10, 7, 0,193, 10, 7, 0,194, 10, 4, 0,195, 10, 4, 0,196, 10, 66, 0,168, 3, 12, 0,197, 10, 66, 0,198, 10,
+ 32, 0,199, 10, 32, 0,200, 10, 36, 0, 79, 0,168, 0, 61, 1,168, 0,201, 10,148, 0, 44, 0,148, 0, 0, 0,148, 0, 1, 0,
+156, 1,202, 10,154, 1,203, 10,151, 1, 48, 9,175, 0,247, 3, 9, 0,248, 3,158, 1,204, 10,158, 1,205, 10, 12, 0,206, 10,
+ 12, 0,207, 10,133, 0,208, 10,141, 0,209, 10,141, 0,210, 10, 32, 0,211, 10, 32, 0,212, 10, 32, 0, 38, 0, 12, 0,111, 9,
+ 0, 0, 20, 0, 7, 0,237, 0, 7, 0, 12, 3, 7, 0,213, 10, 4, 0,186, 2, 4, 0, 56, 0, 4, 0, 19, 0, 4, 0,117, 8,
+ 4, 0,214, 10, 4, 0,215, 10, 4, 0,216, 10, 2, 0,244, 0, 2, 0,217, 10, 2, 0,218, 10, 2, 0,219, 10, 0, 0,220, 10,
+ 2, 0,221, 10, 2, 0,222, 10, 2, 0,223, 10, 9, 0,224, 10,137, 0, 64, 4, 12, 0,255, 2, 12, 0,225, 10,159, 1,226, 10,
+160, 1,227, 10, 7, 0,228, 10,135, 0, 37, 0,161, 1,244, 8, 7, 0, 34, 4, 7, 0,229, 10, 7, 0,230, 10, 7, 0,210, 5,
+ 7, 0,146, 3, 7, 0,136, 3, 7, 0,231, 10, 7, 0, 76, 2, 7, 0,232, 10, 7, 0,233, 10, 7, 0,234, 10, 7, 0,235, 10,
+ 7, 0,236, 10, 7, 0,237, 10, 7, 0, 35, 4, 7, 0,238, 10, 7, 0,239, 10, 7, 0,240, 10, 7, 0, 36, 4, 7, 0, 32, 4,
+ 7, 0, 33, 4, 7, 0,241, 10, 7, 0,242, 10, 4, 0,243, 10, 4, 0, 90, 0, 4, 0,244, 10, 4, 0,245, 10, 2, 0,246, 10,
+ 2, 0,247, 10, 2, 0,248, 10, 2, 0,249, 10, 2, 0,250, 10, 2, 0,251, 10, 2, 0,252, 10, 2, 0,178, 4,173, 0, 65, 4,
+136, 0, 9, 0,161, 1,253, 10, 7, 0,254, 10, 7, 0,255, 10, 7, 0,230, 1, 7, 0, 0, 11, 4, 0, 90, 0, 2, 0, 1, 11,
+ 2, 0, 2, 11, 66, 0,229, 1,162, 1, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 0, 3, 11,163, 1, 6, 0,
+163, 1, 0, 0,163, 1, 1, 0,162, 1, 25, 9, 4, 0,250, 0, 2, 0, 4, 11, 2, 0, 19, 0,164, 1, 5, 0,164, 1, 0, 0,
+164, 1, 1, 0, 12, 0, 5, 11, 4, 0, 6, 11, 4, 0, 19, 0,165, 1, 9, 0,165, 1, 0, 0,165, 1, 1, 0, 12, 0,119, 0,
+164, 1, 7, 11, 4, 0, 19, 0, 2, 0, 4, 11, 2, 0, 8, 11, 7, 0, 91, 0, 0, 0, 9, 11,164, 0, 6, 0, 27, 0, 31, 0,
+ 12, 0, 29, 5, 4, 0, 19, 0, 2, 0, 10, 11, 2, 0, 11, 11, 9, 0, 12, 11,166, 1, 7, 0,166, 1, 0, 0,166, 1, 1, 0,
+ 2, 0, 17, 0, 2, 0, 19, 0, 4, 0, 23, 0, 0, 0, 13, 11, 0, 0, 14, 11,167, 1, 6, 0, 12, 0, 15, 11, 4, 0, 16, 11,
+ 4, 0, 17, 11, 4, 0, 19, 0, 4, 0, 37, 0,215, 0, 18, 11,168, 1, 3, 0, 7, 0, 86, 5, 7, 0, 19, 11, 7, 0, 20, 11,
+169, 1, 17, 0, 27, 0, 31, 0,170, 1, 21, 11,170, 1, 22, 11, 12, 0, 23, 11, 4, 0, 24, 11, 2, 0, 25, 11, 2, 0, 26, 11,
+ 12, 0, 27, 11, 12, 0, 28, 11,167, 1, 29, 11, 12, 0, 30, 11, 12, 0, 31, 11, 12, 0, 32, 11, 12, 0, 33, 11,171, 1, 34, 11,
+ 12, 0, 35, 11,215, 0, 36, 11,170, 1, 31, 0,170, 1, 0, 0,170, 1, 1, 0, 9, 0, 37, 11, 4, 0,211, 7, 2, 0, 38, 11,
+ 2, 0, 37, 0,220, 0, 71, 6,220, 0, 39, 11, 0, 0, 40, 11, 2, 0, 41, 11, 2, 0, 42, 11, 2, 0,233, 7, 2, 0,234, 7,
+ 2, 0, 43, 11, 2, 0, 44, 11, 2, 0,185, 3, 2, 0,194, 6, 2, 0, 45, 11, 2, 0, 46, 11, 2, 0,213, 9,172, 1, 47, 11,
+173, 1, 48, 11,174, 1, 49, 11, 4, 0, 50, 11, 4, 0, 51, 11, 9, 0, 52, 11, 12, 0, 28, 11, 12, 0,253, 7, 12, 0, 53, 11,
+ 12, 0, 54, 11, 12, 0, 55, 11,175, 1, 17, 0,175, 1, 0, 0,175, 1, 1, 0, 0, 0, 56, 11, 26, 0, 30, 0, 2, 0, 57, 11,
+ 2, 0, 17, 0, 2, 0, 15, 0, 2, 0, 58, 11, 2, 0, 59, 11, 2, 0, 60, 11, 2, 0, 61, 11, 2, 0, 62, 11, 2, 0, 19, 0,
+ 2, 0, 63, 11, 2, 0, 31, 0, 2, 0, 37, 0,176, 1, 64, 11,177, 1, 10, 0,177, 1, 0, 0,177, 1, 1, 0, 12, 0, 65, 11,
+ 0, 0, 56, 11, 2, 0, 66, 11, 2, 0, 67, 11, 2, 0, 19, 0, 2, 0, 68, 11, 4, 0, 69, 11, 9, 0, 70, 11,171, 1, 7, 0,
+171, 1, 0, 0,171, 1, 1, 0, 0, 0, 56, 11, 0, 0, 71, 11, 12, 0,163, 7, 4, 0, 72, 11, 4, 0, 19, 0,228, 0, 14, 0,
+228, 0, 0, 0,228, 0, 1, 0, 0, 0, 56, 11, 26, 0, 30, 0,178, 1,227, 7, 9, 0, 73, 11, 9, 0, 74, 11,176, 1, 64, 11,
+167, 1, 75, 11, 12, 0, 76, 11,228, 0, 77, 11, 11, 1,107, 6, 2, 0, 19, 0, 2, 0,178, 4,179, 1, 8, 0,179, 1, 0, 0,
+179, 1, 1, 0, 9, 0, 2, 0, 9, 0, 78, 11, 0, 0,242, 3, 2, 0, 17, 0, 2, 0, 19, 0, 7, 0, 79, 11,180, 1, 5, 0,
+ 7, 0, 80, 11, 4, 0, 81, 11, 4, 0, 82, 11, 4, 0, 69, 1, 4, 0, 19, 0,181, 1, 6, 0, 7, 0, 83, 11, 7, 0, 84, 11,
+ 7, 0, 85, 11, 7, 0, 86, 11, 4, 0, 17, 0, 4, 0, 19, 0,182, 1, 5, 0, 7, 0,217, 8, 7, 0,218, 8, 7, 0,212, 2,
+ 2, 0, 28, 2, 2, 0, 29, 2,183, 1, 5, 0,182, 1, 2, 0, 4, 0, 53, 0, 7, 0, 87, 11, 7, 0,217, 8, 7, 0,218, 8,
+184, 1, 4, 0, 2, 0, 88, 11, 2, 0, 89, 11, 2, 0, 90, 11, 2, 0, 91, 11,185, 1, 2, 0, 42, 0,160, 6, 26, 0,249, 8,
+186, 1, 3, 0, 24, 0, 92, 11, 4, 0, 19, 0, 4, 0, 37, 0,187, 1, 6, 0, 7, 0,106, 0, 7, 0,214, 2, 7, 0, 93, 11,
+ 7, 0, 37, 0, 2, 0,243, 0, 2, 0, 94, 11,188, 1, 5, 0, 7, 0, 95, 11, 7, 0,120, 0, 7, 0, 26, 9, 7, 0, 27, 9,
+ 4, 0, 19, 0,189, 1, 6, 0, 27, 0,166, 6, 0, 0, 96, 11, 0, 0, 97, 11, 2, 0, 98, 11, 2, 0, 19, 0, 4, 0, 99, 11,
+190, 1, 7, 0,190, 1, 0, 0,190, 1, 1, 0, 0, 0,242, 3,189, 1,100, 11, 2, 0,101, 11, 2, 0, 17, 0, 7, 0, 60, 0,
+191, 1, 7, 0, 12, 0,102, 11, 0, 0,103, 11, 9, 0,104, 11, 7, 0, 60, 0, 7, 0, 79, 11, 4, 0, 17, 0, 4, 0, 19, 0,
+192, 1, 3, 0, 7, 0,105, 11, 4, 0, 19, 0, 4, 0, 37, 0,193, 1, 15, 0,193, 1, 0, 0,193, 1, 1, 0, 83, 1, 97, 9,
+191, 1, 61, 0, 12, 0,104, 3, 35, 0, 49, 0,192, 1,106, 11, 4, 0, 53, 0, 7, 0, 60, 0, 2, 0, 19, 0, 2, 0, 12, 1,
+ 4, 0,107, 11, 0, 0, 96, 11, 4, 0,108, 11, 7, 0,109, 11,194, 1, 2, 0, 0, 0,110, 11, 0, 0,111, 11,195, 1, 4, 0,
+195, 1, 0, 0,195, 1, 1, 0,162, 0, 46, 3, 12, 0,112, 11,196, 1, 24, 0,196, 1, 0, 0,196, 1, 1, 0, 12, 0,113, 11,
+162, 0,188, 8,195, 1,114, 11, 12, 0,115, 11, 12, 0,104, 3, 0, 0,242, 3, 7, 0, 79, 11, 7, 0,116, 11, 7, 0, 87, 0,
+ 7, 0, 88, 0, 7, 0,160, 9, 7, 0,161, 9, 7, 0,231, 2, 7, 0,164, 9, 7, 0,190, 8, 7, 0,165, 9, 2, 0,117, 11,
+ 2, 0,118, 11, 2, 0, 89, 0, 2, 0, 17, 0, 4, 0, 19, 0, 4, 0, 69, 0,197, 1, 6, 0,197, 1, 0, 0,197, 1, 1, 0,
+ 12, 0,113, 11, 4, 0, 19, 0, 4, 0,148, 2, 0, 0,242, 3,198, 1, 11, 0,198, 1, 0, 0,198, 1, 1, 0, 27, 0,166, 6,
+ 0, 0,119, 11, 4, 0, 99, 11, 2, 0,120, 11, 2, 0, 37, 0, 0, 0, 96, 11, 4, 0,107, 11, 2, 0, 19, 0, 2, 0,121, 11,
+199, 1, 8, 0,199, 1, 0, 0,199, 1, 1, 0, 12, 0,122, 11, 0, 0,242, 3, 0, 0,123, 11, 2, 0, 19, 0, 2, 0,121, 11,
+ 4, 0,124, 11,200, 1, 5, 0,200, 1, 0, 0,200, 1, 1, 0, 0, 0, 96, 11, 4, 0,107, 11, 7, 0,202, 2, 39, 0, 12, 0,
+162, 0, 96, 3,162, 0,125, 11,195, 1,114, 11, 12, 0,126, 11,196, 1,127, 11, 12, 0,128, 11, 12, 0,129, 11, 4, 0, 19, 0,
+ 4, 0,244, 0, 2, 0,130, 11, 2, 0,131, 11, 7, 0,132, 11,201, 1, 2, 0, 27, 0, 31, 0, 39, 0, 74, 0,202, 1, 5, 0,
+202, 1, 0, 0,202, 1, 1, 0, 4, 0, 17, 0, 4, 0, 19, 0, 0, 0, 20, 0,203, 1, 6, 0,202, 1,133, 11, 32, 0, 44, 0,
+ 4, 0,134, 11, 7, 0,135, 11, 4, 0,136, 11, 4, 0, 86, 9,204, 1, 3, 0,202, 1,133, 11, 4, 0,134, 11, 7, 0,137, 11,
+205, 1, 8, 0,202, 1,133, 11, 32, 0, 44, 0, 7, 0, 64, 1, 7, 0,138, 11, 7, 0, 12, 3, 7, 0,243, 8, 4, 0,134, 11,
+ 4, 0,139, 11,206, 1, 5, 0,202, 1,133, 11, 7, 0,140, 11, 7, 0, 69, 8, 7, 0,237, 2, 7, 0, 56, 0,207, 1, 3, 0,
+202, 1,133, 11, 7, 0,243, 8, 7, 0,141, 11,150, 1, 4, 0, 7, 0,142, 11, 7, 0,169, 10, 2, 0,143, 11, 2, 0, 69, 1,
+208, 1, 14, 0,208, 1, 0, 0,208, 1, 1, 0, 12, 0,144, 11, 12, 0,145, 11, 12, 0,146, 11, 0, 0, 20, 0, 4, 0, 31, 0,
+ 4, 0, 19, 0, 4, 0,147, 11, 7, 0,148, 11, 4, 0,136, 11, 4, 0, 86, 9, 7, 0,251, 3, 7, 0,239, 2,157, 1, 23, 0,
+ 4, 0,134, 11, 4, 0,149, 11, 7, 0,150, 11, 7, 0, 56, 0, 7, 0,151, 11, 7, 0,235, 2, 7, 0,142, 11, 7, 0,152, 11,
+ 7, 0,214, 2, 7, 0, 49, 10, 7, 0,128, 4, 7, 0,153, 11, 7, 0,154, 11, 7, 0,155, 11, 7, 0,156, 11, 7, 0,157, 11,
+ 7, 0,158, 11, 7, 0,159, 11, 7, 0,160, 11, 7, 0,161, 11, 7, 0,162, 11, 7, 0,163, 11, 12, 0,164, 11,121, 0, 40, 0,
+120, 0,165, 11,209, 1,125, 10, 66, 0,166, 11, 66, 0,198, 10, 66, 0,167, 11,210, 1,168, 11, 48, 0,162, 0, 48, 0,169, 11,
+ 48, 0,170, 11, 7, 0,171, 11, 7, 0,172, 11, 7, 0,173, 11, 7, 0,174, 11, 7, 0,175, 11, 7, 0, 98, 9, 7, 0,176, 11,
+ 7, 0,158, 1, 7, 0,177, 11, 4, 0,178, 11, 4, 0,179, 11, 4, 0,180, 11, 4, 0, 90, 0, 4, 0, 37, 0, 4, 0,181, 11,
+ 2, 0,182, 11, 2, 0,183, 11, 4, 0,184, 11, 7, 0,214, 2, 4, 0,185, 11, 7, 0,186, 11, 4, 0,187, 11, 4, 0,188, 11,
+ 4, 0,189, 11,137, 0,190, 11, 12, 0,191, 11,173, 0, 65, 4, 4, 0,192, 11, 7, 0,193, 11, 7, 0,194, 11, 4, 0, 69, 0,
+122, 0, 12, 0,120, 0,165, 11,148, 0, 32, 3, 7, 0,125, 1, 7, 0, 98, 9, 7, 0,195, 11, 7, 0,196, 11, 7, 0,197, 11,
+ 2, 0,198, 11, 2, 0,199, 11, 2, 0,200, 11, 2, 0, 17, 0, 4, 0, 90, 0,123, 0, 13, 0,120, 0,165, 11,139, 0, 9, 3,
+141, 0, 11, 3, 7, 0, 25, 9, 7, 0,201, 11, 7, 0,202, 11, 7, 0, 66, 1, 7, 0,203, 11, 4, 0,120, 9, 4, 0, 7, 3,
+ 2, 0, 17, 0, 2, 0, 37, 0, 4, 0, 69, 0, 69, 78, 68, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0};
diff --git a/source/blender/editors/datafiles/subtract.png.c b/source/blender/editors/datafiles/subtract.png.c
new file mode 100644
index 00000000000..475f20b3eff
--- /dev/null
+++ b/source/blender/editors/datafiles/subtract.png.c
@@ -0,0 +1,324 @@
+/* DataToC output of file <subtract_png> */
+
+int datatoc_subtract_png_size= 10173;
+char datatoc_subtract_png[]= {
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 96, 0, 0, 0, 96, 8, 2, 0, 0, 1,
+ 26,253,208,249, 0, 0, 0, 4,103, 65, 77, 65, 0, 0,177,143, 11,252, 97, 5, 0, 0, 0, 6, 98, 75, 71, 68, 0, 0, 0, 0,
+ 0, 0,249, 67,187,127, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 0, 7,116,
+ 73, 77, 69, 7,218, 7, 21, 0, 4, 18, 61, 67, 90, 24, 0, 0, 32, 0, 73, 68, 65, 84,120,218,237,125,107,144,101,215, 85,222,
+247,173,189,207,125,245, 99,186,123, 52, 15, 73,150, 61,163, 7,214, 3, 84,150, 98, 25,108,112, 98, 10,227, 84,153,184,192,174,
+178, 9,166, 98, 8,143,144, 63, 38,188, 13,150, 13, 69,112, 66, 32,127,120, 36, 36, 85,137, 19, 72, 12, 1, 12, 85,240, 43,132,
+ 10, 69, 72, 72, 72, 48,182, 83,216,178,101,189, 40,235, 57, 51,210,204,244,244,227,190,206,217,107,229,199,218,251,156,115, 91,
+ 45, 33, 7,147, 10, 85,186, 83,234,190,125,187,239,185,251,236,199, 90,223,250,214,183,150,128, 47,244,113,246,250,235,207,159,
+191,249,249,175, 19,192,251,126,248,253, 41, 53, 4, 68,132, 34, 49,198, 42,198, 88, 85,247,191,255, 71,252,143,194,119,255,131,
+239,169,235,101, 74,141,170, 38, 85,213,116,237,218,181,221,221,221,139, 23, 46,168,166, 24,227,254,254,126, 92, 46, 23, 48, 0,
+144, 32, 66,249,221,223,253, 79,170, 26,130,144, 52,200,183,254,221,111,251,167, 63,253, 83,241,242,238,236,211,143, 76,247,103,
+137,148, 48,123,144,169, 9,129,170, 8,129, 48,133,225,254,251, 63, 16,174, 54,175, 92,212,201,204, 76,237,217, 11,143,204,230,
+105, 80,137, 8, 0,188,250,213,175,222,217,217, 49, 51, 81, 77,166,106,170,254, 36,169, 61,183,187,104,172,186,227,142, 59,206,
+157, 59, 95, 55,117, 83,215, 17,166,106, 70,210,239,212,204, 70, 27, 55, 52,227, 87, 61,115,109,124,118, 89, 15, 96, 48,132,181,
+173, 91, 72, 3,140,192, 98,250,236,218,214,249,225,218, 41,146, 7,135,233,145, 39,103, 77,194,117, 91, 21, 79,221,252, 53, 68,
+128, 0, 70,144,164,144, 32, 2, 67, 32,133, 20, 72,140,166,102, 76, 72, 20, 33, 76, 12, 9, 16, 64,125, 94,140, 12,208,151,180,
+ 92,161,125, 54, 30, 79,110,186,233, 38, 17,206,102,179,163,107,119,239,189,247,126,205,155,191,214,204,132,164, 72, 8,193, 23,
+238,119,126,231, 63,254,247, 63,252,195,124,165,119,190,243, 93, 77, 83,107, 74,170,170,154,230,179,217,238,238,238,213, 43, 87,
+154,212,140,134,163, 75,151, 46, 2,136,203,229, 18, 0,133, 34,242,208,231, 30,122,236,207, 30, 19, 97,144, 96,160, 16,255,240,
+ 39, 62,244,163, 31,252, 0,223,244, 55,191,249,145, 39,231, 36,163, 64,247,254, 36,132, 16, 72,138,144,114,250,244,233, 55,189,
+233, 77,195,209, 40, 44,226,121, 0,170, 54,221,191,116,245,202,101, 85, 29, 84, 2,160,170,170, 55,190,241,141, 66,170, 89, 84,
+168,168, 2,162,245, 12,208,195,153,153,133,155,207,157,121,205,107,190,212,204,150, 77,109, 64, 52, 85, 3, 65, 5, 9,133,196,
+170, 58,241,234,203,139,141,253, 41, 6,131,218,204,215,110,231,102,192, 12, 0,116, 57,125,238,196,217,187, 37, 14,146,218,147,
+ 23,150, 79, 94, 90,156,217, 25, 84, 21,121,234,252,155, 41, 2, 10, 1, 3,132, 2, 33, 24,136, 64, 9, 65, 2, 36, 70,133,138,
+ 25, 13, 6, 64,104,170, 4, 41, 2, 36, 2, 6,138, 41,190, 88, 15,246,127,248,158,239,253,190,181,201,154,193,136,252,143, 66,
+161, 72, 16,146, 65,194,207,253,220,207, 92,188,120,241,248, 11,253,192, 15,254, 80,210, 4, 3,212,252,178, 4, 40, 36,132, 66,
+128, 20, 4, 9, 20, 6, 9,126,192,133,114,225,226,133, 95,248,231,255,172,127,161, 56,157, 78, 1,191,123, 0, 96,239, 1,226,
+169, 39,159,122,234,169, 39,175,237,237,165,166, 1, 72,162,124,197,157,119,222,245,174,111,252,198, 95,254,229,143, 60,252,208,
+ 67, 0, 98,189, 92, 2, 80,179,197,210,246,167,141, 26,215,198,225,196,122,188,116,241,210,167, 62,245,167,102, 6, 80,196, 47,
+155, 47, 1,243, 79,182,212, 52,239,126,247, 55,135, 16,126,244,131, 31,224,185,187,223,145,212, 82,242,155, 34, 0, 19,166,249,
+254,193,149,135, 5,245,218, 40, 12,135, 18, 68, 72,136,136,143, 84,213, 98, 12,175,127,253,235, 79,157, 62, 19, 68, 68, 36, 84,
+ 49, 46,230, 13,104, 32, 13, 20, 51,136, 88,178,229,226, 90,106, 22, 9,118,237,192,194, 12, 85, 37,227, 97, 24, 84, 54,168,226,
+250,198,198,217,179,103,111,184,254,134,141,141,245,166,174, 85, 68, 68,146,106, 52, 36,152, 65,197,104, 70,129, 54,102, 52,109,
+204,140,132, 65,155, 68, 53, 38,140, 55, 71, 39,111,186,233,250,155, 95,185, 51, 26,134, 42, 74,221, 52, 66, 17, 17, 10, 69, 53,
+154, 54, 48,129, 36, 51,154, 53,160,152, 41,165, 2,168,154, 36, 84,147,205, 87, 12,198, 59, 12, 3, 21, 62,246, 76,250,179, 11,
+207,141, 71,241,149,103, 71,175,186,126, 60,172, 66,140,126, 53,229,169, 91,190, 22, 32, 65,243,111, 20, 0,166,233,224,202,163,
+195,241, 78, 53,185,142,190, 19, 64,131, 80, 4,230,198, 43,248,132,146,178, 62,137, 59, 91,195,168,154,124, 65, 0, 0, 98,154,
+ 32, 48,114,253,228,173,244, 21, 2,168,102, 36, 8, 36,131,228, 79,242,205,166,134,131, 89,115, 56,215,104,166,190,147, 65,129,
+ 41, 8, 83, 10, 45, 95,195,104, 66, 49, 64,220, 48, 10, 44, 1, 66,136, 65, 97, 36,205, 20, 38,134,255,239, 30, 60,246,213,237,
+237,237,173,173,109, 0,139,197,124,119,119,119, 58,157,126, 1, 23,186,245,182,219,222,249,206,119,181,199, 41, 47, 9, 69,130,
+136, 72, 8, 97,119,247,218, 63,253,233,127,242, 98, 23,250,225, 31,121,191, 38, 53,183,135,249,244,251,193, 39, 37, 63,130, 95,
+ 76, 66,172,226,251,126,232, 7,143,241, 55,223,247,253, 63,144,154,148, 52,185, 55, 85, 51,115,127, 9, 51, 83, 3,160, 90,126,
+ 86, 53, 75, 77,186,251,203,238, 62,119,254,252, 3, 15,124,122,197,140, 52, 77,227,239,205, 91,134, 36,105, 44, 35, 82,155, 45,
+151,203,122,169, 73, 85, 83, 93, 55,187,187, 87,159,120,226,201,186,169,255,246, 55,189,251, 87,255,195,175,172, 92, 40, 27,118,
+191,213,114,194, 9,166,148,158,126,250,169, 39,158,120,114,111,111, 15,176,108, 68, 72, 33, 72, 46, 23,139,159,248,208, 63,250,
+224, 7,238,247, 55, 74,113,125,170,170,106,106,106,166,102,170,251,251,251,159,249,204,103, 62,253,233, 79,239,238, 94, 53, 51,
+186,137, 32,105, 52,133,170,165,148,234,229,242, 39,127,242,167,242,133, 82, 74, 73,211,108, 94, 95,120,110,246,212,197,249,229,
+221,249,124,209, 92,187,118,237,137, 39,158,120,252,137,199, 83, 74,128, 25, 76,205,124,224, 70,115,172, 32, 66,144,203,122,249,
+222,239,254,110, 0,113,247, 96,249,240,227,243,203,187,117,158, 33, 48,136, 5,189,170,179,103,180,105, 68,168, 10,138, 9, 73,
+ 90,222, 46,170, 27, 91, 91,227,241, 88, 83,130,217,117, 39,175, 35,200,115,119,191,163,110,204,204,237,168, 1, 76,245,124, 57,
+189,180,156, 62, 43, 76,147, 81, 24, 13, 67, 16, 58,118,162,136,169,133, 32,175,190,253,246, 87,188,226, 21,155, 27,155,190, 43,
+ 6,195, 97, 92, 44,147, 91,144,188,137,136,148,230, 77,179,104,154,134,176, 3, 69,147,108,109, 28, 42, 31, 79, 74, 85, 85,189,
+242,149,175, 60,117,221,169,209, 96,148, 52,249, 16,150,203,101,132,153,249,152,243,102,132,166,100,154,204,204, 8, 36,157, 47,
+ 12,192,218, 8, 33,112,243,196,137, 51,103,206,158, 61,123,118, 60, 30, 27, 77,147, 66,128,166,129, 33,170, 37,130,132,193, 8,
+ 49, 53,194,146, 89,242,181, 86, 51, 36, 76,231, 41,198,120,102,123,231,134, 27,206,156, 57,115,102, 60,153,144,212,148,140,101,
+ 9,208, 68,250, 90,128,160,193, 64, 67,111,127, 90,158, 97, 86, 11,221, 28,108,220,180,125,221,169, 88, 5, 83, 83,170,169, 4,
+ 49, 85,245,251, 8,107, 39,111, 53, 51, 16,221,160,154, 69, 90, 78,181, 94, 0, 48, 72,168, 6,163,141,235, 39, 39,110, 58,152,
+203,225, 44,141,135, 18,131,111,124,199,150,121, 37,195,218,246, 45, 20,150, 19, 76,192, 52,213,169,158,107, 51, 51, 82, 66, 53,
+222,188,105,180,118,202,135, 61,155,235,179,215,234,101,173, 85,148, 24,203,251,232, 35,218,185,197, 64, 88,177,218, 0, 76, 53,
+ 45, 82, 51, 23, 9,147,173,115,195,241, 54, 0,250,176,193, 38,233,181,189,116,113,183,217,221,111,150,141,141, 6, 18, 3, 65,
+242,244,205,111, 1, 13,144,214, 33,171,105, 61,187,218, 44,246, 6,227,173,193,228, 58,152,123, 22, 97,129,137, 0, 8, 49,146,
+100, 8, 97,125, 18,119, 78, 12,120,234,230, 55,103, 12, 3,177,226, 79,172, 51, 87, 36,197, 15, 89,190, 7, 7, 2, 32,253,179,
+ 69,128, 32,194, 8, 51,248, 70,162,250,212,169, 27, 71,144,102, 32,220, 71,152, 1, 2,128,180,124,132, 77, 76, 72, 24, 32,166,
+128, 24,212,151,221,242,178, 27, 13, 84,131,169, 18,102, 70,152,154,219, 54,133,153,194, 64, 5, 64,133,101,115, 97, 52,136, 25,
+ 96,166,166, 6,131,169, 42, 12, 10, 26, 0,154,250, 7,148, 97,148,193,107,222,101, 62, 17, 68, 25,195,203,143, 47,220,207,182,
+143,155,111,190,229,206, 59,239, 60,127,203, 45, 59,219,219,221,171,150, 79, 1, 29, 60,231,111,178,187,187,251,208, 67,159,251,
+212,167,254,244,209, 71, 31,253,226, 12,104,125,125,253,157,239,124,215,245,215,223,160,170,214, 1,102, 43, 24,181, 96,120,244,
+ 96,114,239, 33,221, 51, 17, 10,136, 88, 85,191,241,235,191,254, 39,127,242,177,151,190, 57,248,182,183,189,237,206, 59,239, 82,
+119, 53,217,243,175,188,187,152, 9,174, 98,245,252,100,117, 72, 30,112,116,195, 42, 3, 21,146, 23, 46, 94,248,181, 95,253,213,
+139, 23, 47,188,248,128,226, 45,183,126,201, 98,177, 44,243,113,204,141,176, 13,110,122,176,191, 63,184,186,174, 65,164,166, 41,
+247, 4,148, 51,219,164, 4,179,253,253,125, 51,123,250,233,167,207,157, 59,119,203, 45, 55,199, 88,253,209, 31,253,143,186,174,
+143, 31, 80,106,234, 50,136, 46,168,233,141,134,182, 50,160,110,241, 82,147,118,119,175,154,225,185,231,158, 83,213,217,108,166,
+154,138, 15,113,183, 6, 53,245, 17,155,217,124,190, 48, 83, 7, 93, 95,255, 13,111,191,231,158,123,254,205,135, 63,252,232,163,
+143, 28, 29,144,223,196,241,187, 43, 3, 15,182, 70,210,173, 99, 93, 47,247,247, 15,154,166,126,230,153,167, 85,109,111,111, 79,
+ 85,253, 83,219,187, 48, 72,241, 37, 14, 21,252, 34,230, 62, 42, 53,205,124, 62,255, 59,239,121,207,112, 56,252,151,255,226, 23,
+ 62,255,249,207,247,103,168,233,157,158,124,201,166,201, 3, 2, 17,131,128,136, 66, 6,106,147,154, 38, 77,167,211,199,159,120,
+ 60, 53,233,242,229,231, 12, 6, 53, 3, 68,104, 70, 17, 90,246,114,101, 36,249, 66, 86,176,160, 2,162,170,154, 26, 0,245,114,
+249, 29,223,249,247, 6,213,224,125,239,203,120, 52,214, 77, 2,144,212,212,160,201,150, 9,150,236,112,150,204,193, 39, 57, 26,
+136, 8,199, 67,198,200,233,193,193,225,225,222,116,122,120,225,153,103,156,112,112,223, 40,238, 31,104,150,125,187, 16,170,160,
+120, 0, 9,154, 99, 0, 90, 21, 29,100, 11, 41, 48,107,154,134, 34,170,250,161, 15,253,227,143,124,228,223, 63,248,224,103,227,
+238, 94,109,176,231,118,155,189,131,102, 94,235,193,212,209, 71,198, 54, 38,160,145, 48,210, 64, 11,233,106,154, 63, 75, 75,166,
+137, 57,188, 33, 64,165, 49,123, 78,245,216,211, 77,149,195,106, 22, 75, 1, 96, 99, 99, 99, 52, 26, 79, 70,227,148, 82, 62,146,
+166,170, 98, 98,223,244, 77,239,254,131, 63,248,125, 94,127,199,215,103, 34,169,133, 15,190,208,171,103,188, 89, 78,205,154,229,
+236,202,114,122,217, 84, 5, 74,193,100, 20, 88,166,144,204,254, 28, 64, 6,135,100,223,252, 56,181,115,199, 29,119,158, 60,121,
+114, 52, 26,141, 39, 99, 41,142, 91,178,233, 34, 69,220, 77, 3, 44,228,131,105, 47,166,247,235,209, 12,154, 22,154, 22,169, 89,
+104,106, 72, 52,102, 76,220, 63, 72, 16,155, 47,132,130,181, 81, 12, 65,131,144, 68, 65, 92,234,150,169,138, 81, 68,110,189,245,
+214,209,104,188,115,114,103, 50,158, 0,208,164, 70, 43,193, 69,187,218, 22,225, 36,141,101, 88, 7,131,137, 90, 94, 50,136,154,
+101, 52,221,104,170, 29,151, 22,107,105, 74, 19,229,162, 81, 24,155,166, 1,108, 60, 10,195, 74, 68, 24, 2, 7, 85,117,242,228,
+201, 24,227,185,115,231, 68,194,250,250,186, 4, 18,162,154, 28,224,101,155,233, 70,215, 73, 57,179, 88, 80, 7, 64,152, 41, 73,
+ 24,125,107,192,104,204,219,194, 76,213, 18, 76,203,145,201, 38,192,193, 4,161,141, 10, 13,179, 69, 92,164,184,177,177,117,211,
+185, 27,199,195,234,214, 87,157,244,149,200,168, 88,141, 80, 51,144, 2,154, 64, 84,146,219, 58, 2, 52, 10, 45,170, 25,115,196,
+ 64,230, 99, 73, 24,141, 48, 40, 65, 26, 97, 70, 80, 76, 82, 14, 62, 60,158,207,166, 93, 68, 0, 25,174,237, 72, 24, 86,163,173,
+106,176, 6,242,243, 23, 57,168,236,218,116,175, 10,124,213,141,227, 24,184, 54,138, 65,252,148, 8,153, 64, 1, 82, 62, 53, 66,
+ 38, 35,105,194, 88, 78,164,127, 35,213, 90,186,214,143,172,185, 91,161, 88,136,144,144, 71,171, 52, 64, 36, 80, 56, 90,191, 94,
+ 66,140,195, 19,148, 40, 12,134, 12, 12,151,181, 93,188,188, 0,121,101,191, 22,242,236,201, 97, 85,241,186,173,193,120, 20,130,
+ 72, 21, 77, 41, 68, 2,200,148, 9, 93,170, 68, 67,114,158,131,166,238,173,204, 20, 45,131, 68,245,201, 19, 6,132, 74, 25,132,
+162,102, 10, 13, 18,135, 27,215, 11, 67, 53, 58, 65, 4,100,150, 69,205,196, 12,100, 50,136,170,145, 56,156, 41,192,249, 82, 41,
+120,250,217,101,140,156,140,226,198, 36,140, 6,225,228, 86, 21,132,195, 65, 96, 33,116, 98, 49, 91,176, 22,202, 59,248,148,236,
+222, 50,253, 36,145, 38, 12, 3,178, 10, 33,132,106, 68,198,106,120,130, 20, 48, 66,114,128, 96, 16,152,163,105, 49, 83, 2,102,
+162, 73, 77,168, 75,184, 95, 35,185,127,208, 60, 23, 37, 6, 62,126, 41, 4,114, 60, 12, 34,178, 62, 14, 18,196,121,110, 35, 72,
+ 37,169, 80, 26,105,254, 13, 52, 53,159, 36,136,208, 24, 7, 19,143, 18, 36, 14, 1,161, 84, 20,231,219, 13,102, 38,198,140,147,
+197, 84, 37, 27, 67,117,236, 14,168, 1, 73,133,166, 41, 9,150, 10, 16,135, 73,128,170, 10, 36, 71,195, 16, 68, 98,222,162,166,
+ 6,154,145, 80,154,144, 78, 41,161,132, 11,150, 15,103,156,132, 56,233, 12, 38, 13, 6, 69,134,248, 48, 51,163,137, 9,140, 6,
+ 19,122, 44, 65,183,220, 30, 9,153,111, 82,203,177,151, 66, 5,203,101,162,200,178, 54,128,177,236,103,231,203,124,231,104,193,
+168, 96,246, 65, 4,204,138,207, 46, 48,133,240,165,246,115, 97, 38, 37,106,209,124,147, 70,136,230,168, 67, 8,168,106,158, 81,
+ 24, 32, 48,191, 37,102, 47, 8,152, 32,194,105, 57,161, 65, 13, 66, 85,182,254, 2,166,153, 68,204,198,180,184,111,203,215,202,
+ 23,119, 42, 79, 90, 44,148,143, 39,125,103,102, 11,151,157,153,209,119, 8,160, 70, 18, 2, 51,131, 18, 98,226, 97,154, 27, 34,
+ 53,152,229, 0,202, 93,134, 89,119,242, 97,112, 56, 96,166, 25,231, 90, 70,251, 78,181, 16, 48,133,153, 91, 81,100,143, 3, 53,
+ 5, 1, 45,134, 63,131,182, 2, 79, 51,222,177,188, 70,118, 12, 66,124,249,241,242,227,139, 29,185,118,216,187,138,147,241,100,
+ 48, 24,140, 70,227,170,170, 50,106,107,234,249,124,177, 88,204, 15, 15, 15,147,103, 61,254, 82, 7, 84, 85,213,107, 94,115,207,
+237,119,220,241,170, 87,190, 42,196,146,113, 52, 66,242, 57,243,116,160,195, 61, 51,123,236,177,199, 62,251,153, 7, 62,254,241,
+143,123,178,240,139, 57,160,175,251, 91,111,187,235,174,187,170, 88,181,177, 2,187,164, 15,142, 68,142,109,108,154,113,170,112,
+185, 92,126,242, 19,159,248,237,223,254,173,191,208,128, 98,140,119,221,117,215, 91,223,250,117,214, 98,215,146,180, 64, 47,164,
+239, 71,248,171,145,253,106,104, 79,138,200,222,222,222,207,253,236,207, 28, 30, 30,126, 97, 3,218,217,217,121,235, 91,223,122,
+195, 13,175,112,206,168,135,166,123,127,212, 7,253,189,175, 47, 56, 38, 71,167, 64,136,225,210,197,139,191,244,139,191,120,229,
+202,149,151, 52,160,247,190,247,189,227,241, 90, 49,159, 71, 35,252, 46,146,239,130,232,254, 44, 21,182, 79, 36,103,252, 58,130,
+161,191,152,172,235,230,147,159,252,248,111,255,214,159,191,136,225,141,127,253,111,104, 82,131, 37, 75,217,152,103,135,208,254,
+144, 71,168,217,147,228, 31,114, 44,166, 14,164,108, 37, 66, 69,123, 37,103,249,108,185, 92, 12,170,234, 13,111,248,202, 79,125,
+250, 83, 47, 68, 51,148, 80, 58, 37,148, 79,213, 99, 87,180, 44, 13, 8,237,239,106,133,130,170,234, 7,190,105,154,194, 46, 80,
+ 77, 1,106, 74, 6,204,231,179,229, 98, 49,157,206, 46, 94,186, 40,148,123, 94,115,207, 51,207, 60,253,216, 99,143,189,224,128,
+ 84, 53,231, 32, 50, 53,214,251,165,161, 77, 23,244, 95,234, 63,245, 1, 25,172,105, 26, 18, 41, 37,128,170, 10, 32,165, 70,205,
+102,179,249,124, 54,155, 78,167,211,195,169,199, 62, 59, 39, 79,126,245, 87,127,205,135, 63,252,175,142, 31,144,169, 90, 75,212,
+ 97,229,195,145,129,148,241,136,117, 48, 24,236,224, 96,127,177, 88, 76,103,179,189,189, 61, 83,157,205,102, 64,198,227, 25, 44,
+169, 1,150, 60, 57,147, 84,181,241,152, 86, 83, 58,123,253,217, 31,255,241,159,248,177, 31,251,224,113, 75,166,138,227,153, 42,
+180,251,182,195, 48, 61, 91, 52,159, 47,166,211,233,193,193,193,149, 43, 87, 84,245,240,224,160,108,163,204, 62,116,167,162, 99,
+ 1, 53, 37,170, 33,165,100,149, 29, 59, 38,177,156,152,122,209,135,231,249, 52,239,209,221,221,221,231,158,123,238,217,103,159,
+189,244,236,165,221,221,171,139,249,124,185, 88,180,147, 76,146, 45,179,196, 78, 27,208, 25, 54,211,212, 36, 53,163,240,135,127,
+228,253,207, 27,208, 11,141,167,152,129,124,234,218, 87,212,174, 92,189,242,236,165,103, 47, 93,186,120,241,194,133, 43, 87,174,
+204,231,243,197, 98,161,106,109,130,255,232, 52, 23,136,231,176, 79,205,146, 38,109, 26, 83,219, 88,223,248,246,239,248,206,149,
+ 1,105,239,145, 82,106, 52, 45,150,105,190, 72,243, 69, 51,155, 55,243, 69, 90,214,218,212,201, 53, 74,243,249,124, 62,159,207,
+166,179,217,108,218, 52,141,106,223,140,230,128,169,183,231,203,147,156,102,128,153, 81, 50, 18,247,233, 78,154,206,159, 59,255,
+218,215,222,215,219,212,221,238,177,186, 49, 3, 14,167,218,168, 31, 62,198,128,225, 48, 68,225,250, 4, 41,233,213,171, 87, 82,
+210, 75,151, 46,206,166,179,140,222,187,124,123, 11,252, 61, 5, 39,173,217,232, 29, 89,192,224,217,220, 24,130,153,153,170, 10,
+222,254,142,119,124,230, 51, 15,120,214, 89,154,164, 77,210,217, 50,205,230,122, 56, 79,211, 89,154, 45,211,124,174,243,133,206,
+ 23, 58, 91,170,191,126, 48,109,166,179, 52,157, 45,167,179,121,210,146,208, 0,125,122,156, 81, 65,206,141,148,175,101, 28,106,
+ 80,117, 73, 19, 67, 8, 18, 68, 93,134,101,166,170,166,218, 52,205,247,126,223,247,231, 25, 58,152, 53, 77, 99,159,191,176, 80,
+197,238, 94,221,104,207, 32,118, 12,176, 5,130, 76, 54,125,210,172,177,102,145,153, 51, 15,112,224, 49,157, 82,196, 79,171,115,
+183, 78, 55, 58,175,225, 14,187, 10,213,214,214, 86, 53,168, 0,154, 26, 68, 21, 98,170, 65,100, 56, 28,222,119,223,235, 62,246,
+177, 63,150,186,214,186,209,148, 44,165,148,178,161, 55, 83, 51,207, 17,155,169,106, 74,214,184, 57,209,148, 82,249,131, 28,152,
+244,162,140, 34,184,241, 8,164,252,157, 58, 95,225,228, 99,136, 65, 36,192, 74,242, 89,213, 84,147,170,169,125,195,219,223, 78,
+ 50,204,227, 45, 23,175, 44, 15,103,105,182,112, 3,155,189,103,182, 60,230,145,151, 54,139,195,186, 94,236, 95,123,110, 54, 91,
+206, 22,245,124,169, 41,127, 16, 68, 8,215,184,149,128,142, 34, 57, 81,233, 12,152,193,117, 63,227,209,232,246, 87,223,190,179,
+179, 61,153,172, 21,147,208,227,105,213, 54, 79,108,198, 69,157,186, 20,163,103,222, 84,139, 51,207,113,171,199,114, 6, 95,120,
+ 21,223,241,177,164, 93, 91, 2,182, 92,166,248, 90,109,189, 99,230, 6,201, 16, 66, 8, 33, 71,100, 10, 80, 33,180, 18, 46,222,
+119,223,235, 34,172,253,115, 20,149,139,167,253,114,116, 75, 82, 53,165,122,225,171,103,214, 36, 51,128,243,101, 90,214, 12, 34,
+203,202,130, 96, 52,140, 68, 22, 36,170,170,179,190, 6,248, 8,214,214,214,206,158, 61, 91, 85,131,245,245,117,199, 73,106, 42,
+ 20, 51, 80, 97, 98, 65, 85, 41, 41,165,232, 9, 61,235, 72,189,124, 94, 60,221, 13, 80,221, 76, 67, 97, 41,219, 53,167,124, 19,
+154,204, 2, 10, 66, 97,149, 58,144,169, 90,152, 92, 51,196, 16,199,147,201,160,170, 92,194,145, 33,140,106, 22, 51, 42, 84,132,
+ 80, 42, 99,222,144,142, 44,140, 57,215,220,243,145,164, 42, 76,181,177,162,236,160,223, 33,243, 9,175,147,169,153,205, 33,228,
+120, 8,130, 33, 16,192,100, 50,142, 49,110,108,110,108,172,111, 12,135,163,205,205, 19,193,117, 63, 62,243, 61, 87, 77, 49, 83,
+117,227, 17, 93,140,198, 50, 69,206,100,104,222,158, 70,205, 60,136,185, 37,233, 49,158,249, 62, 12, 72,170, 10, 85, 19,225, 32,
+194, 67, 16, 82, 6,131,225, 96, 56,220,222,218,222,222,222,174,170,106, 60, 30, 23,224, 6,201,185,224, 54,220, 55,241,235, 58,
+ 11,235,172,130, 31, 9,131, 49, 15, 39,143,204,247,228, 11,103,104,205,169, 26, 53, 64,209,104, 16,147, 19,155, 27,177, 10, 91,
+ 91, 91,227,241,104, 60,158,132, 24, 69, 66,127,153, 20,164,150,251,162,155, 88,122,142, 33, 58, 77, 1,131, 81,173,147,121,100,
+188,234, 83,167,200,118, 7,102, 43, 89,244,214, 39,152,121, 98,100,182,140,148,112,195,230, 13,227,225,240,236, 13, 91, 39, 54,
+ 70,109,234, 47, 39,101,172, 80, 77,118, 4, 98,229, 44, 91,244, 84,123,217, 24,190,125, 44,123,130, 76, 12,175,142,193,250,190,
+147,121,131,139, 72,136,132, 72, 28, 81, 66,157, 40, 13,102,115, 13,161,169,162,196, 32, 20,132, 32,206, 79,201,234, 56,164,189,
+170,106,150,127,250, 13, 88,150,193, 20,138, 26,218,203,149, 25,133, 80,194, 50,143,157, 83,116,158,223, 16, 6, 25, 14,215, 78,
+ 82,226,112,237,180, 80,174, 28, 16,148,101, 90, 12,170,250,212,206,224,228,102, 21,163,140, 71,206,207, 49, 51, 98,197,184,228,
+205,236,233, 53,213, 88,148, 39, 78,188,177,165,242,152, 67,139,110,127,183, 27, 25, 45,189,110,158,152,142,148, 0,134,204,210,
+ 73,203,237, 91, 72, 90,215,186,108,212, 12, 49,128,100, 12,146,231,133,153,143,207, 14, 47,107,139,252,216,231, 79,101,161, 38,
+137, 44,100,202, 3, 51,128, 18,178, 0,161,176,106,100, 16, 50, 12, 54, 6,147,109,145, 42, 14, 55, 51, 74, 85,223,121,188,182,
+223,144,184,118,152,158,188,180, 24,143,194,169,173,170,138,114,230,228, 80,136, 65, 5,168,148, 73,234, 80, 29, 85, 99, 15, 77,
+ 59,243, 38,112,134, 46,187,154, 50, 21,214,201, 65,114, 22,172, 64, 28, 66, 0,241, 40,209,204, 72,133,137,154, 66,132,202,148,
+180, 38,171, 70,155,198,200, 44,237, 78,106,194, 36, 18,124,167,187,164,208, 32, 32, 99, 81, 34,154,147,166,158,168, 51,192,148,
+ 57,207,224,235, 18, 43,203,134,213, 25,113,171,198, 91,113,176, 30,194, 40, 84, 19,138,228, 48, 67, 28, 56, 58,111,171, 6,105,
+ 18,146, 54,203, 90, 14,231, 41, 80, 46, 94, 94,138,112,231, 68, 21, 69, 78,109, 15, 6, 3,169, 34, 99,132, 66, 4, 6,179, 88,
+196, 75,142,205, 11, 2,116,198, 26,160, 58,235,219,197,139,208, 54,211, 27,201, 10, 33, 82,130,111, 2, 99, 89,124, 87,158, 72,
+230, 10, 12,164,234, 82,133, 33,129, 22, 68,214,198,161, 9,150, 84, 53,193,130,155, 40, 53,136,154, 69,120, 34,129,229, 27,128,
+ 60, 19,217, 16,101,159, 34, 21, 76,132,209, 2, 7,113, 19, 12,113,184, 17,171, 73,182,184,150,133,218, 38, 6, 79,240, 0, 90,
+168, 98, 24,148, 20, 83, 75, 50, 95,170,192, 46, 94, 94,146,184,186, 87, 75,144,209, 32,196,192, 97, 21, 70,195, 64,145, 88, 80,
+157, 50, 39,157,138, 79, 84, 43, 26, 2, 87, 16, 7, 40, 33, 1,201, 36,142, 40, 49,132,129,132,170,213,130,100,207,163,128,168,
+159,231,178,193, 73,143,174,133, 2,213,134, 42, 86,207, 64, 98, 58, 83, 35, 70,195, 16,133,227, 81, 92, 27, 27,201, 2,242, 75,
+182,172,168, 0,178,230,206, 47, 89, 34, 20, 86,163, 45,104,114,235, 7, 6, 55, 34,190,191, 11, 43, 79, 31, 83,206,116,137,148,
+152,132, 84, 83, 55,117,133,132,247,227,216, 52,102, 2, 93,164,164, 0, 37,118,212,120,155,141,214, 66,214,147, 37,167, 64, 82,
+ 12, 24,140,119,250, 17,151, 26,197,127,237,129, 6, 51,111,239, 86,163,252,178, 20, 75, 64,114, 98,181,203, 49, 27,200,186,209,
+134,130, 70,103, 51, 35, 41,238,242,178,251,242, 92, 78,139, 96, 29,252,144,173,254,205, 60, 56, 66, 89, 8,170,171,185,178, 74,
+170,120,219, 76, 8, 20, 5, 85, 14,217,104, 62, 98,115,114,191, 68,158,101,138, 29, 45,155,160,133,153, 84,207,119,100,117, 60,
+ 21,157, 69, 80,133,170, 59,144, 22,164,102, 99,164, 78, 49, 20, 75,101, 57,243,226,126, 49,251, 99,144,150,211,201,102,180,146,
+ 86, 45,191,118,121, 25, 29,125, 27, 91,210, 44,231,116,161, 68,155,141,128,162,104, 1,216,202,248, 50, 7,235,225,150,123, 16,
+ 67,201,129,228,208, 25,132, 26,203,116,100, 47, 81, 54, 90,206, 46,187,173,200,113, 93,222,201,194, 60, 1,158,104, 67,190,186,
+150, 74, 21,135,250, 62, 44,181, 50, 56, 20,251,130,108,150, 60, 25,153, 35,107,127,115, 70,228,176,156, 97,204,121, 25,247, 71,
+214, 70, 79,180,156, 78,134,153, 41, 85, 10,132, 53, 45, 14,206,138,232, 47,203,242, 90,224, 81,146,195, 94, 47, 4, 99, 86,232,
+161, 68,101, 62, 9,237, 28, 21,108, 80,162, 19,151, 85,180,105,101, 67,209,237,193,247,106,206, 69,250, 59,125,122,253, 28,107,
+ 59, 8,203,159,234, 49, 75,135,206, 88,210,214, 68,151,173,202,233,227, 82, 6, 84, 20, 19, 30, 40,177,139, 40, 29, 55, 48, 79,
+161,101,126,185,148,133,136, 79,122, 62, 19, 6, 66,149,104,233,151, 76, 92, 24, 77,169,128,154,235, 75,242, 58,101, 87,147,103,
+ 86, 51,255, 87,206, 11,243,194,117,138,239,172,139,205, 57, 90,150,197,233,139,237, 94, 78,152,189,252,120,249,241,242,227,175,
+ 68,190,245,197, 46, 65,174,111,108,108,110,108,172,173,173,159,216, 58,177,179,189,115, 98,107,235,196,230,230,100,109,125,109,
+109, 60, 24, 12, 61, 71,213,203,228,172, 36, 45,154,166,153,205,166,123,251,123,251,251, 7,151, 46, 93, 60,216, 63,184,182,119,
+109,127,111,111,119,119,119,127,127,255,175,222, 4, 77, 38,147, 91,111,251,146, 27,111,188,241,204,233,211, 39, 78,108, 77,214,
+ 38, 49,198, 99,217,251,126, 78,228,121,201,147,213, 39,173,184,245,121,122,232,166,105,166,135,211,107,123,215,158,126,250,169,
+135, 62,247,185,135, 31,122,168,249, 34,101,190,191,104, 19,116,250,244,233,123,238,189,247, 75,191,244,238,225,112, 80,202,132,
+236, 37, 93,183,132,180, 61, 94, 42,255,200,142,175,245, 64,157,232, 37, 75,251, 9,221, 92,203,201,156, 95, 53,152, 87,117, 61,
+254,248,231,255,203,239,255,254,131, 15,126, 86, 85,255,159, 78,208,250,250,250,153, 51,103,190,236,203,238,190,245,214,219,156,
+209,177, 54, 49,220, 99,132,142,204, 17,143,221, 52,157,138,117,133,113,230,106,194,253, 5,191,174, 86,205,229, 90, 87,118,153,
+232, 54, 23,127,245,234,213,255,246, 95,255,224,193, 7, 31,188,124,249,242, 95,202, 4,157, 62,125,250,174,187,238, 58,127,254,
+252,233, 51,103, 82,210, 44,166, 93,153, 20, 3, 94,108,219,176,111,144,122,150,166,255,250,138,241,193, 49,178,254, 99,197, 0,
+127,222,139, 57,228,244,162, 67, 0,143, 62,250,232, 31,255,175,255,249,192, 3, 15, 52, 61,125,248, 95,104,130,238,191,255,254,
+197,178,110, 51,186, 29,239,216,227, 32, 95,218, 60,175,222,237,145, 23,143,249,179, 35,178,141, 23,217, 74, 71,164, 11,253, 99,
+216,158, 62,144, 98,176,229,124,177,127,176, 95, 55, 77, 93, 47, 63,241,241, 79,124,236, 99,127,252, 23,156,160, 56,155, 47, 90,
+193,137,181, 2,183, 99,102,229,121,150,167,159,154, 94,157,151,222,139,207,223, 74, 71, 15, 97,183, 83,201,254,167, 20, 34,162,
+119,229,222, 83,235, 81,193,158,224,242, 48,117, 62,159,239,239,237, 45,235, 37,193,219,110,187,237,206,187,238, 50,213,223,251,
+189,255,252,212, 83, 79,253, 95, 78, 80,150, 67, 29, 41, 45, 57,142,169,183, 35, 22, 43,151,124,117,242,134,146,122, 88,253,187,
+ 30, 99,148,231, 57,167,223,188,247,128,105,210,124, 28, 72,115,113, 68, 9,169,188, 8, 7,173,220,220, 82, 97,196, 45, 37,175,
+140,132,169,205,230,179,197,124,225, 97,230,108,122,120,245,234,213,229,114,217, 47,254, 56,121,242,186, 27,111,124, 69,136,225,
+193, 7, 31,188,250,210,148, 57,199,201, 43, 94, 72,211,240, 34,103,108, 53, 43,192, 86,128,101,171,147,186,250,170,153,105, 74,
+185, 69, 3, 80,215, 77, 93, 55, 46,112, 87,213, 38, 53, 94, 53, 92,242,231,218, 6,206,101,120,244, 12,182,251, 47, 51, 44,151,
+139,197,114,233, 1,104, 93,215, 41,103,236, 11, 43,100,102,176,148,210,249,243,231,223,242,150,183,212,203,230,163, 31,253,181,
+135, 31,126,248, 37,239,160, 85,185,199,138,238,231,216, 23, 90,134, 26,173, 8,196,201, 50,116, 52, 74, 46,188,183, 35,135,209,
+205,127,147,154,189,189,189,249,108,230,217,192,195,195,195,189,189,107, 77,211,144, 76, 41, 45, 22,139,190,125,181, 78,179,113,
+140, 87,224,113, 40,165, 88,136, 14, 68,136, 79,125,211, 44,151,245,104, 52,124,207,123,190,213,128,127,247, 75,255,246,145, 71,
+ 30,121, 73, 59,232,121, 59,197,142,223, 60,199,168,116,218, 74,148,222,111, 45,167,133,142,252,117,210, 12,240,154,212,212,117,
+ 93,215,181, 79, 80,211, 52, 41,165, 34, 50,242,167,109,142, 46,167,151, 74,193,166, 87, 91,116,226,222,146, 95, 46,228, 18, 51,
+ 37,200,150, 74,105, 41, 25,223,115, 73, 85,205,152, 68,228,219,190,253, 59,166,211,233,111,124,244,163, 15, 62,248,217, 23,157,
+160,206, 95, 29,185,203,231,193,223,231, 21,158,149,218,227, 94, 29, 50, 74, 90,167,144, 43, 4, 84,109, 62,155, 93,190,124,121,
+177, 88, 2,214, 52,205,238,238,238,225,116,234, 18, 39, 51, 75,170,153,127,182,231,221,121, 95,146,125, 12,172,101,145,106,183,
+105,164,204,237,228,105, 83,104,201, 23,154,105,211,212,169,137, 36, 85,196,204, 70,195,209,183,124,203,183, 62,253,204,211,191,
+242,203, 31,121, 33, 12, 21,254,218,107, 95,219,171,246,178,149,218,175,254, 79,157,168, 40,111,158,162, 40,180, 30,112, 94,165,
+155,252, 77, 48, 51, 91, 44,151,135, 7, 7,203,229, 82, 85,235,166,158, 78,103,139,197, 92,181,105,213, 21,249,210,189,105,206,
+ 66, 40,172, 72, 36,208,137,162, 86,162,193, 14,179,163,208,214,133, 54,244,123, 8, 18,183,182,182,183,183,183, 67, 8, 86,250,
+ 45,120,122,119, 99, 99,243, 43,191,234,171,214,215, 54, 62,247,185, 7, 95, 64,148,119,172, 79,207, 42,120, 0, 72,138,101,163,
+ 77,147,111, 32,191, 78, 16, 12,194, 24,115,229,181,144,131, 1,163,100, 59,234, 98, 39,159,204,131,131,131,139, 23, 47,206,231,
+115,159, 83, 63, 86,153,198,239,234,188, 74,158,208,186, 68,102, 87, 69,213, 21, 36,148,120,101,229,228,247,215,137, 45, 78, 0,
+ 32, 18,144, 75,186,233,189, 5,124,202, 97, 89, 27,144, 52,169,233,125,247,221,247,186,215,189,238,231,127,254,103, 47, 92, 88,
+ 41, 43, 13,247,222,123,239,177,126, 75,205, 84, 51,151,169,106,139,165, 11,120, 44,153, 37,181, 70,205,107, 6, 91, 12,229, 94,
+ 41,102, 97, 41,204,180,174,151,243,249,162,105,154,166, 73,243,249,108,239,218,181,217,124,222, 52,141,139,113,242, 20,231, 35,
+218,202, 35, 45, 87, 19,174, 36,228, 74,193,101,241, 11, 57, 71, 93,182, 71, 91, 18, 81,210, 24,101,223,103,189, 43, 92,180,188,
+181,189,189,179,179, 19,171,170,243,169, 61, 61,170, 63,190,226,203, 95, 63,158, 76,188,169, 78,222, 65,211, 89,182,157, 73,205,
+ 37, 67,126,120,154,198,230, 11,109,249,229,148,250, 54,185, 71, 78,211,183,106, 70,131, 33, 34, 72, 38,205,155,229,254,114,126,
+205, 11,226, 52, 45,231,139,101,219,248, 32, 59,110,101,183, 27,172, 28, 8,148,130,186, 44, 94,201,162,195,222, 62,178,190,206,
+237, 8,138,200, 4,180,139,206, 69, 70,163, 81, 21, 43, 18, 85, 85, 13, 6, 67, 79,131,180, 26, 47,191,100, 42,210, 97, 5, 76,
+236, 13,175,127,195,169,235, 78,253,230,111,126,212,201,150,184,172,253,136,177, 73,182,119,216,236, 31,230,229, 93, 52, 54,157,
+165,164,207,243, 97,180,118, 80, 61,133, 67,238, 91, 32,244,218, 36,146, 38,105,170,203,125,213,134, 70, 34,153, 37, 20,236,211,
+154,212,236,158,138,195, 54,205,123, 37, 87,197, 48,207,134,176, 21,131, 20,136,109,157,127,232,251, 3,230,220,142,121,206,166,
+138,213,104, 52, 4, 24, 99, 12, 34, 46, 2,117, 84,226, 45,126,218, 82, 72, 35,133, 52,213, 70,245,214, 91,111,253,174,239,250,
+251, 31,254,240,191,190,122,245,106,216, 62,123,251,193, 84, 15,166,205,193, 52,237, 79,211,108,161,117,178, 38,105,221, 88,163,
+197,135, 48,215, 31,185,253,203,206,180,228,150,208,214, 13,153, 90,106,212, 5,143,169,105,150,211,229,252,176,169, 83,147, 82,
+157, 82,106, 82,157, 52, 37,164,146,158,241,222, 9,158,136,205, 14,160,131, 59, 69,215, 80, 18,218, 37,190,183,246, 85,182,133,
+111,232,135, 34, 89,229, 14,160,170,134, 39,182, 78,108,110,110, 78,198,227,201,100,178,177,177, 49,153, 76,188,215, 80, 31,169,
+ 88, 15, 59, 21,117,146,141,199,227, 47,255,138,175,248,223,159,252, 36,175,191,253, 27, 86,125, 38,143, 65,209,171,225, 85, 11,
+ 80,217, 53,250,240, 87, 82,106, 22,150,106,247,122,205,124,119, 57,223,181, 12,127, 60, 41,229, 6, 4,131, 74, 98,200,142, 42,
+ 8,243,115,152,137,183,197, 96, 41, 8,205,231,160,245, 98,157,186,110,101, 76, 69,224,106,222, 25, 43, 23,213, 77, 38,147,115,
+231,206,109,111,239,120,121,194, 96, 56, 24,141, 70,210,231, 76,112,132, 23,232,177, 5,164, 4,177,148, 37, 12, 71,208,142,245,
+ 68,170,171,113, 88, 81, 7, 23, 33, 79, 73,101, 34,203,153,161,234,193,129, 89, 82,104,139, 6,202,101, 77,205,113,173,119,126,
+ 49, 2, 22,172,176, 98,121, 98, 68,114,121,166, 21,145,153, 67,199, 86, 44, 3, 35, 4,236,166,134,237,164,196, 24, 7,131, 97,
+ 16, 49, 98, 60, 26,199, 88,121,251,194,226, 59, 58,198,162, 36,142,179, 78, 54,187,182, 86,186,101,166, 6, 9, 18, 75, 14,213,
+218, 82,190,110,223,244, 96,106,150, 19,180, 25,248,226,154,173,111,177,161,170,203,212, 44,115,140,157,106,211,198,235,203,243,
+ 97, 53, 2,150, 20, 41, 25,208,248,101,130, 48,132,220,170, 37, 4, 14, 43, 9,193, 45,141, 9, 91,107,215, 6, 85, 25, 44, 81,
+205, 74, 33,179,247,137, 35, 32,194,245,141,205, 51,167,207,140, 70, 35, 16, 85,172, 54, 54, 55,198,227,113,187, 95,124,125,217,
+253,203,194,207,220,145,204,122, 53,218, 36,161, 72,136,244,104,240,104, 77, 2,122,105,212,236,246, 59,104,209, 7, 33, 89, 84,
+215, 9,208,243, 89,110,147,203, 40, 50,176, 46,172,207, 92,108,217,122,174,202,244,219,134,154,229,162, 12, 2,226,230,185, 67,
+216, 44, 41,221, 82,102, 77,239,145, 25, 66, 36, 33,100, 21, 99, 8, 34, 94,223, 34, 36,160, 73, 69,164,171, 29, 56, 26, 99,246,
+ 78, 9,219, 34,203,108,122, 85, 16, 59,208,220,227, 36,242, 86, 98, 87, 36,170,171,244, 13,173, 55, 95, 89, 21, 81, 68,245,218,
+ 56, 8, 43,248,216, 37, 80, 96,207, 89,101, 10,131, 52, 99, 65, 91,222, 10, 17,203, 58,183, 93, 18,225,176,146, 42,102,139, 43,
+132,132,172,161, 10, 33,172,175,175, 87, 89,174, 26,182,182,183, 78,108,110,134, 16,189,208,108, 56, 26,198, 32,165, 87,207,209,
+110, 3, 47, 68,222,160, 5,170,185, 14, 21, 52, 19, 48,106,161, 5,216, 73,131,209,106,108, 74,118, 61, 55, 87,202, 83, 70, 88,
+145,198,162,156,225, 82, 51, 4,152, 30,249,108,242,200, 22, 45,141,145,114, 62,188,173,135,207,101,185,101,235,231,173,227,178,
+160,190, 42,219,155,177,133, 16, 0,132,144, 91,178, 73, 16,162,173,207, 96,235,237, 58,201,245,234,233,234,254,229,174, 78,108,
+ 83, 9,249, 37,210, 52, 69,182, 58,235,172, 50,237,109, 22,235,240,152, 65, 75,227,211,190,102, 81,179,197, 46,231,170,212,231,
+104,174,181,181, 86,109,105,171, 97, 65, 75, 53, 50,203, 97,178,135, 96, 46, 16, 55,170, 49,241, 80,159, 0, 0, 7, 46, 73, 68,
+ 65, 84,209,150,161,142,149,215,182,175,173,173,109,159,218, 25, 14, 7, 4,135,131,120,234,228,198,100, 28, 69,132,160,196, 16,
+ 36, 20,132, 37, 45, 19,185, 82, 11, 87,100, 66,207,231,175,218, 40,197, 74,184, 76,235, 26,101, 69, 80,143,242,238, 90, 74,179,
+139,162,142, 61,167, 86, 48,125,158,200,182, 19, 76, 91, 74,147,101,241, 71,121,209, 35,103,190,167,117,228, 10, 1,238, 42,162,
+226, 50,153,212,119, 12,213,196, 88, 81, 6, 0, 36,196, 16,171,225,112,208,231,242,209,231, 54, 13, 29,175,224, 45, 18, 88,240,
+ 99,249,111, 37,123, 85, 0,142, 29,225,108, 66,136,153,185, 97,143,198, 97, 47,222,179, 14,136,185,108,205, 86, 89, 25,162,204,
+175,153,171,182, 10,130,211,231, 29,242,190,149,180,142, 55,114, 92,103, 52, 66,164,138,131,137,248,168, 24,227, 96, 18,170, 81,
+238, 72, 22,195,181,233,240, 96, 46, 32,170,200,105,189, 24, 13, 26, 82, 66,192,250, 36,172,143, 67, 8,185,250,112,224,102,203,
+ 37,242,230,146,204,172,153,114,121, 16,148, 40,146,113,151, 51,230, 70, 30, 34,157,101,242, 77,148, 82,204,131,109, 59,205,181,
+187,162,109,200,198,214, 31,117,182, 39,219,155, 50,181,165, 92, 44,171,154,228,136, 85,212, 23,224,106,217,127, 15,104, 66, 17,
+ 9, 3, 9, 3,239,137, 17,170, 73,168,198,126,187, 6, 44, 50,209,200,170, 49,145,180,172, 13, 64,140, 18, 2,134,149,119,164,
+ 96,136,226, 29, 2, 50,224, 97,150,150,247,165,139,230,181, 13, 94, 25,103,214, 14,198, 11, 22, 87, 1, 61,162, 15,255,136, 19,
+212,220, 30,176, 68,167, 68, 23,118,177,103, 65, 92,219,148,207,124, 86,181,130, 1, 4, 44,229,198, 23,176,188, 92,214,219,187,
+ 38,109,234, 84,226, 48,196, 49,157,148, 8, 85, 28,172, 81, 42, 87,249, 74,136,200, 70, 95,219,136,198,204,146, 98,186, 72,139,
+ 70, 9,138,164,186,209,131,105,242,120,127, 88,201,218, 88,170, 64, 35,162,200,104, 40, 85,108,155,103,153, 59,196,174,247, 80,
+ 71,250, 61,175,224,173, 76,113,236,142, 66, 79, 13,215, 85, 37,248, 49,104, 29, 31,209,243,131, 64,219,223,166,107,152, 32, 69,
+180, 37, 46,242, 43, 62, 93, 11,143,142, 46,172, 2, 40, 18,194, 48, 14, 55,252, 88, 5,169, 66, 53,166, 68,228, 58,171, 98,199,
+145,209,144,175, 76, 50,232,194,218,188,197,108,161,215, 14, 26,247,113,227, 81,216, 90,143, 85, 20,208, 6, 49, 0,129, 12, 25,
+ 33, 11, 87,107,141,250,145,246,241,233,116, 2, 49, 83, 14,174,242,179,182,221,134,181, 68, 37,250,199,204,138,140,177,168,223,
+105,253, 98, 9,203,126, 4,200, 44, 66, 7, 52,189,159, 71, 9, 12,194, 32, 72,149,121,189, 56, 10, 97, 64, 6, 8, 40, 1,109,
+113, 78,145,201,150, 36, 71, 47,171,164,102, 93,122,205, 52, 33, 21, 93,238,162,230,193, 52,197,168, 36, 98, 80, 53,157, 46,114,
+191,164, 42,202,160,242,209, 33, 10,171, 40,185, 67, 50,225,253,125,218, 77,210,221, 23,219,214, 57,173,222,145, 93,204, 85, 98,
+244,118, 40,218,203,110,181,213, 75,154, 19, 93, 30,231, 73,200, 93,170,130, 80, 2, 68,160, 86, 96,124, 14, 55, 68, 66, 53,220,
+140,131,245,188,243,101, 32,113, 88,244, 49,185,252, 32,251, 74, 23,180,183,100, 90,143, 35, 51,230,234, 36, 5,213, 52,105, 30,
+235, 98, 97, 7,211, 38,119,219, 22, 14, 34, 29, 30, 9,177, 54, 10,107,227,224,212,226,104, 40,219, 27,113, 48, 16,223,243, 85,
+ 37,161,101,151, 90, 82,211, 12,170,177, 5,107,108, 69,174,160,118,129,156,245, 92, 61,209, 37, 11,172,212,193,184,106,212,221,
+ 93, 47,202,181, 54, 31,196,210, 14,190, 72,132, 24, 61,122,234,107, 85,187, 47, 69,138,155,223,157,219,199,168,177, 37,206, 74,
+175,180,174,207,101,209,179,146,232, 74,132, 0, 47,254,241,209, 8,154,100,139, 70,165,108,130,131,216, 12,154,224, 24,189,138,
+ 33,134,146,192, 46,205,178, 65, 8, 36, 22, 16,219,134,169,109, 45, 97, 41,120, 68, 97,207,189,210, 45, 75, 85,218,196,134,118,
+140, 61, 4, 82,185,132, 31,170, 12, 67,198,129,104,130,153,132, 42, 84, 19,250, 58, 49,196,193, 26,195,144,108,131,158, 92, 81,
+163, 52, 41,213, 79,204, 21, 0,180,214, 26,169,182,105,157, 82,117,167, 43, 49,181,151, 45,229,115,163,154,184, 80, 0,222,209,
+142,135,243,132,189,214, 29,149,150, 89,204, 59, 40,230,162, 19, 14, 7, 28, 15,131, 87,185,129,140,154,123, 64,181, 27,215,143,
+148,182, 56,144,197, 81,107,143, 25,179, 44,203,230,106,250, 46,135,169, 5,184, 33, 43,123,189, 87, 54, 5,222, 24,187,120,183,
+ 85, 93,130,122, 47, 84,165,177,107,186,147, 71,194,220, 50,201,235, 56, 50,172,200,152, 44,151,180,117, 17, 59, 75,239, 32,119,
+227, 61, 35, 97,240,235,171,135,234,154,243, 69, 98, 49,243,140, 76, 38, 41, 49, 53,102, 33, 79, 11, 79,221,252,230, 86,239,143,
+182,125, 33,250,221, 0,203, 44,172, 70,168, 40,137,172,174, 76,116, 53, 6, 52,239,134,102,125, 78,182,229,253,164,196, 62,165,
+ 18,195,250,253,136,218,238, 74,165, 6,190, 28,186,194, 36,247,159,173, 32,187, 54,162, 42,193,167, 71,113,189, 86, 0, 37,100,
+151,156, 30, 98,169, 67,110,123,130,228,201,246,121,136,109, 8,202,174,115, 23,114,123, 59, 95,166,150, 69,211,118,193, 11,236,
+233,183,211,107, 13,143,181, 61, 28,104,125, 9,144,172, 74, 26,242, 10,176, 56,132, 82, 3,208, 21,211,101,242,137,109,166,167,
+212, 87,195,178,149, 44, 84,127, 75,223,101,158,191, 53, 2,212, 18, 31, 20,254,187,245,244, 89, 45,215, 2,223, 78, 92,226,126,
+ 39,223, 79,180,182, 2,146,157,171,206, 77,187,114,189,154,161,167,172,207,139,220, 43,242,177, 18,214,246, 99, 80, 31,248, 74,
+149,161, 42,251,121, 62, 22,159,208, 26,251,214,103,229,181, 86,122,129,195, 74,159, 69, 15,248,141,237,252,162,180,174, 47, 8,
+174,203, 25,101,167, 45, 93,174,183,224, 29,230,122,155,174,162, 32,151, 76,119,241,155, 47,139,198, 46, 48,180,182, 86,148,173,
+ 59,243,113,106, 41,244, 45,251,191,155, 77,180, 77, 25, 91, 92,144,111,187, 31, 99,180, 91,187,253, 95, 50,104,169, 7, 37, 90,
+ 76, 67,159, 38,235, 25,196,242, 14, 69, 41,144,235, 78, 11,219, 8,157,185, 96,190, 59, 67,150,219, 70, 50,215,142,117, 25, 52,
+ 43,155, 38,159, 69,107, 27, 35,244, 66, 80,107,139,157, 25,139,155,236, 66,233,150,161, 45, 29,204,138,132,195,237, 88, 57, 76,
+109,189,117,143,130,180,213,248,190,195, 76, 37, 56,239,218,184,161, 21, 36, 20,107,156,131, 22,138,149,196, 88, 1,240,190,149,
+218,140, 87,169,247,213,174,166,173,157,149, 46, 54, 44,229, 78, 45,119,211, 58, 77,143,139, 97,173,129, 66,187, 28,165,253, 64,
+167,125,138,221, 42,103,100,150,249, 29,239, 61, 73, 48, 27,202,214,249,230,214, 52, 93, 40,210,210,187,199,169, 30,218,158,108,
+ 71, 80,190,217,106,115,242, 82, 42, 95, 28, 62,218, 3,215,118, 76, 40,117,171,229,185, 21,213, 77,233, 65,199,174,220, 56,179,
+128,217,176,161,205,200,230,183,150, 76, 36, 74,179,143, 50,183, 69, 25,128,246,134,162,181, 65,167,246, 67, 3,181, 54, 66,247,
+153,234, 42,140,181, 53,248,208, 54,123,103,173, 65, 93,161,155,142, 36,208, 59,190, 40,187, 69, 53,244,132,138,102,109, 77,161,
+ 83, 43,121,232,173,153,212,150, 4, 87,168, 64,202, 28,161, 80,111,210,217, 80,118,205, 40, 80, 14, 19,139,244, 68,115,148,184,
+114,206, 58, 69,161,177,148,141, 51,230,150,135,109,138, 59, 55, 51,237,247, 9, 44,182,172,109, 99,128, 35, 51,101, 37, 58,200,
+ 52,124, 30,197, 17,101,112, 75,139,247,236, 87,219,176,200,218, 70, 1, 29, 88,176, 35,134,169,141, 78,253,134,181,164,174,209,
+137,172,188,187,164, 21,203,226,141,107,197,186,201, 42,149,214,130,174,153,112,161,155,133,221,206,108,241,104, 68,103,165, 75,
+231,250, 92,188, 70,176,175,148,207,160, 37, 27, 14,162,139, 18,218,179,214,235, 4,217, 63,106,218, 2, 42, 98,133,123,165,117,
+ 96,161,221,119, 44, 0,190,164,179,243, 54,178, 62, 52, 45, 81, 77, 11, 80,122,103, 35,199,209, 61, 97,104,107,141, 90,128,148,
+157, 96,255,207,108,165,155, 84, 59,202,255, 3, 12,217, 15,142, 80,147,252, 33, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+ 0};
+
diff --git a/source/blender/editors/datafiles/texdraw.png.c b/source/blender/editors/datafiles/texdraw.png.c
new file mode 100644
index 00000000000..42f9f08d1d7
--- /dev/null
+++ b/source/blender/editors/datafiles/texdraw.png.c
@@ -0,0 +1,302 @@
+/* DataToC output of file <texdraw_png> */
+
+int datatoc_texdraw_png_size= 9462;
+char datatoc_texdraw_png[]= {
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 96, 0, 0,
+ 0, 96, 8, 2, 0, 0, 1, 26,253,208,249, 0, 0, 0, 4,103, 65, 77, 65, 0, 0,177,143, 11,252, 97, 5, 0, 0, 0, 6, 98,
+ 75, 71, 68, 0, 0, 0, 0, 0, 0,249, 67,187,127, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, 40,
+155,120, 0, 0, 0, 7,116, 73, 77, 69, 7,218, 7, 21, 0, 4, 18, 61, 67, 90, 24, 0, 0, 32, 0, 73, 68, 65, 84,120,218,237,
+124, 89,140,101,215,117,221, 90,251,222, 87,213, 53,177,122, 98, 55,123,160, 40, 78,146,200,166, 68, 54, 69, 89,116, 34, 91, 1,
+100,249, 67,142,156,200,128, 12, 88, 9, 16,219,178,243, 39,217,150, 7, 13,148, 29, 32, 81, 44, 39,254,113,236, 12, 6,226, 64,
+118, 2, 36,158, 62,226, 32, 48,132,124, 68,113,108,121,136, 6,202,146, 69, 54, 71,113,234,110,178,217, 67,117,205,245,222, 61,
+123,229, 99,159,115,238,125, 85,221, 20, 21, 75, 1, 12,232,117,163,234,189, 91,247,221,123,238, 57,123, 92,123,237, 3,124,163,
+175,155,142, 29,187,245,214,219,246, 30, 39,128, 15,127,228, 99, 41,117, 4,204,140,102,109,219,142,218,182, 29,141, 30,250,216,
+ 71,243, 73, 31,252,137,159,148, 4,200,104, 52, 51,227,129,253,155,183,222,118,254,200,209,171, 51,163,209, 15,253,208, 95,157,
+ 63,119,174, 57,125,255,105, 79,201,147, 11,146,235, 45, 15,254,233, 77, 55, 93,184,225,134, 29, 51, 73,233,232,145, 31,252,236,
+103,255,164,157, 76, 38,140,107,122,243,192, 3, 95, 24,111,211,224,105,198, 73,235, 58,237,140,199, 15, 61,244,241,182,155,116,
+ 4, 73,154,249,100,226,238, 0, 65,235, 70,173,253,249,159,253, 45,114, 44,247, 54,165,142, 4, 96,116, 78, 38,158, 18,165,110,
+107,115,223, 35, 95,125,179, 53,147,166,113, 72,109,151, 58, 3,105, 34,109, 50, 73, 77, 99, 15,127,241,116,211,182, 77, 51,105,
+212, 72,130,208,122, 74,162, 25, 0,120, 74,250,203, 47,189,209,204,129, 14, 18, 4, 72, 20,219,148, 18, 9, 73,102,246,165,135,
+ 79,145, 73,114,176, 5, 32, 0,104,193,174, 77, 93, 50, 19,208, 72, 34, 41, 37,160, 97,114, 8, 0,157,201,220, 94,213,114, 53,
+245,221,220,220,252,205, 55,223,108,198,173,173,173,221,107,119,255,253,247,191,227,123,222, 41,201, 72,154, 53, 77, 19, 11,247,
+233, 79,127,250,179,127,242,199,101,237, 62,248, 19,130, 8,154, 25,141,198,246,245,111,120,230,240,161,245,253, 7,183,215,215,
+142,124,255,187,127, 27, 64,115,250,244,253,158,220,229,146,110,191,237,177, 59, 95,127,102,255,254,245,185,249,206, 61,153,141,
+223,240,250, 31,253,204,103,254,103, 59,233, 38,177, 44, 52, 91, 88,186, 56, 30,219,168, 85, 26,137,192,231,254,226,158, 46,141,
+ 63,241,207,127,177,237, 38, 19,210, 72,156, 60,121,126,188,147,148, 96,132, 75, 4,215, 54, 70,173,141, 5,180, 93, 74, 70, 55,
+179,197,165,139,227,177,187,195,229,127,241,231,223, 1,140,154,102,226,173, 11,101, 89,228,190,114,101,225,224,161, 43,227, 29,
+ 59,115,230,222,166, 77,141, 65, 82, 94,187,148,146,209,101,246,236,179,199,151,150,174, 60,242,200, 93,102,157, 4, 52,121, 93,
+ 64,182, 41,185,140,148, 72,126,249,203,167, 72, 7, 64,118,137, 18,133, 68, 26, 91,247, 14,104,204, 12,128,148,204,152,146, 72,
+ 18, 78,154,211,221,133,111,214,139,195, 15, 63,249, 83, 31, 90,152, 95,136, 69,138,127, 12, 61,107,140,100, 99,205,175,254,234,
+175,188,244,210, 75,215,190,208,207,252,236,207, 37, 79, 16,224,138,203, 18,160,145, 48, 26, 1, 90, 67, 51, 35,173,105, 26, 35,
+155,166,161, 53,223,253,246, 63,127,251,119,253,183,225,133,218,205,205, 77, 64, 40,207,200,193, 11,196,137,227,231,111,189,253,
+185,166,229,168,177,182,165,153, 89, 3, 51,166,100,159,254, 31,239,250,252,231,222,246, 91,191,245,155, 79, 60,254, 56,128,118,
+ 50, 30,215,135, 20, 65,210, 72,146, 75,139,235,119,221,115,198,140,227, 49, 90, 55,155,145, 53, 52,200,157,238,130,186,181,117,
+238,108,111,191,239,125,255,160,105,154, 95,248,249,143,243,135,127,228, 71,242, 3, 17,140, 31,180,209,104,114,239,125, 95,134,
+193,104,109,195,118,132,153,145,141, 70, 77,211,194, 72, 1, 18,254,244,179,111, 35,173, 49, 51,179,102,212,182, 41,117,136,165,
+ 4,104,128,104,244, 59,238,124,108, 60,150,153, 72, 36, 67,215,113, 50, 81,219,168,105,184,189, 61,255,149, 47,223, 75,163,113,
+ 66,154,155,153, 89,114,111,187,206,141,121,249, 76, 0,204,161,201, 36, 77, 38, 78,130, 76,102, 52,195, 35, 15,191, 41,117,251,
+ 66,225,204, 38,161, 49,217,112, 26,205,189,245,212, 9,164, 65,162, 59,205, 4,233,249,231,142,223,126,199,211, 18, 82,106,207,
+ 60,122,143, 25,105, 70,116,214, 24, 65,107,140,176,166,241, 68,107,104,108,104,230,109,215, 37, 35, 40, 3, 65,152,119, 50,179,
+213,213,125,151, 46, 46,158, 61,123,179,212, 0,201, 29,102, 70,210,221,154,134,238,214,152,185,104,102, 34, 41,107,172,105, 83,
+ 74, 78,210, 69,194,204, 73, 75, 41,145,124,246,217,147, 0, 72, 39, 33, 81,130, 25,105, 82, 50, 51, 40,201, 96,146,100,141,193,
+ 9,182,201,147, 21,193, 9, 43, 24, 19, 31, 47, 51, 3,104,161,120, 48,130, 36, 40,201,140, 14,144, 2,129, 70,252,230,233,218,
+183, 70,105,235,235,192,129, 3,251,247, 31, 0,176,179,179,189,178,178,178,185,185,249, 13, 92,232,142, 59,239,124,239,123,127,
+ 48, 75,102,249, 21,170,111,102, 77,211,172,172, 92,253,229,127,249, 75,175,116,161,143,124,244, 99,158, 60,219,195,172,253, 70,
+100,255, 25,175, 38, 46,102, 77, 59,106, 63,252,115, 63,123,141, 11,125,232,167,127, 6,138,127, 2, 66, 91, 66,111, 65,128,108,
+104,108,154,108, 70, 26, 51,154, 29, 59,246,242,250,250,151,126,234, 39,255,104,202,140,116, 93, 39,197,226,169,154, 17,177,142,
+ 72,163,198,143,220,120,113,121,121, 99,126, 97,188,184,184, 61, 55, 55,161, 53,228,220, 39,127,233,151, 63,250,145,159,157,186,
+ 16,212, 75, 65, 54, 34,116,130,102,120,240,173,255,167,109,217,182,108, 90,180,173, 53, 13, 83,162,161, 51,106, 50, 30,255,226,
+ 39,127,233, 99, 31,253, 72,150, 56, 79,201, 7, 47,185,228,146,187,212,189,249,129, 63,115,143,191, 11,162, 32, 57, 4,165,164,
+228, 93,151,186,174,235, 62,249,201,127,145, 47,148,250,151,187,123,125,127,223,233,207,165,164, 46,197,215,228,138,105,148, 28,
+158,212, 77,144,186,212, 77, 38,227,201,248, 3, 31,252, 32,128,214,229, 0, 8, 1,134,248, 41, 46, 31, 88,145, 82, 74, 20, 64,
+192,146, 60,193, 27,101,255, 9, 64,146,146,187,161,235, 14, 31, 58, 76,176,185,247,222,123, 1,193,243,210,197,164,191,254, 13,
+143,130,121, 13,138, 92, 9,160, 4,185,220,245,197, 47,220, 59, 30,143,234,204,190,243,123,191,183,149,187,226,220,176,253,110,
+ 4,132, 46,117, 52,139,167, 33,201, 49, 36,135, 53, 36,112,241,229,195,171,171,115,180, 20,207, 10,114, 60, 30,183, 82,156,234,
+146,133,117, 3,149, 18,204, 36,193, 4, 52, 28,195, 91,209,221, 27,195,153, 71, 78,173,173,239,143,101,205,243,209,117,225,216,
+ 61,198,109,150, 28,164, 32, 67, 74,113, 39, 72, 8,129,119,199,185,179,175,121,249,229, 99, 70,144,137,164,137,162,178, 28,163,
+107, 35, 26, 53,131,187, 1, 50, 35,220,221, 35, 4,176,152,213,149,203,203,207, 60,123,167, 25,105, 41,244,144, 70,185, 53,166,
+ 28,125, 2,173,146,195,232, 14, 32,145,230, 46,128,238,146, 8,200, 76, 79, 63,117,219,230,230, 50, 45, 73,164, 20, 6,214,100,
+ 48, 37,193, 20,106,175,214, 33,184, 19,102, 6,151, 83,164, 33, 37,146, 48,211,163,143,188,110, 60,158, 55, 38,201,104, 4, 41,
+ 37, 71, 3,115,138, 4,225, 4, 9,184,121,242, 8,133,220, 37,119, 64,238,190,185,177, 15,240,103,190,118,114,107,107,214,221,
+ 93, 2,228,146,220, 93,114,121,114,185, 43, 84,193, 61,201,213,220,125,247,221,202, 10, 27,113,171, 0,172,173, 46,202,121,233,
+210,225, 28, 4, 0,146,178,216,130, 16,136, 48,211,170, 62,186, 13,253, 33, 41,208,165,248,210,120,220,158, 63,127, 83,118,206,
+146,153,145,144,220,105,230, 14, 51,119,192,156,106, 76,249,213,186,156,180,124, 9,119,101,207, 1,119,207,102,128,116,119,154,
+ 81, 50, 72,150,227, 39, 9, 12, 99, 40, 73,222,202, 5,246,223,175,151, 40, 70, 42, 66,250,134,241, 21, 48,155, 63, 65, 12,173,
+ 98,136, 90, 43, 57, 64,130,238, 94,220,169, 23, 55,151, 67, 77, 41, 70,108,114,137,132,229, 47,185,212, 32, 39, 19,248,246,235,
+255,201,207,214,215,109,183,221,126,247,221,119,223,122,251,237, 7, 15, 28,232,143,134, 93, 64,132,155,198,252,203, 86, 86, 86,
+ 30,127,252,177,175,124,229,203, 79, 61,245,212, 55,103, 64,139,139,139,239,125,239, 15, 30, 59,118, 60,156, 70, 9,152, 21, 58,
+ 80, 84,161, 88,222, 93,145,116,137,133,107, 72, 8,162, 29,141,126,255,119,127,247,243,159,255,156, 94,181,112,240,221,239,126,
+247,221,119,159,114,207,114, 30,154,171, 61, 67, 38,217, 15,162,198,245,187,135, 20, 9, 71, 63,172, 50, 80, 51,179,174,235, 62,
+245,169, 95,123,250,233, 23, 95,121, 64,237,237,119,188,110,103,103, 92,230,227, 26, 15,194,154,220,128,187, 70,131, 62,205,232,
+ 71,224,117,144,230, 70, 52,173,246,205,111,222,242,218,231, 15, 29,188,242,221,111, 63, 45, 52, 23, 47, 30,255,135,239,251,143,
+219,219,219,215, 30, 80,234, 38,101, 16,125, 82, 51, 24, 13, 53, 53,160,169,197, 19, 48, 63,191,125,219,109,207, 44,239,191,218,
+ 54,176, 6,102, 48,210,154,152,169,136,142, 16, 51, 5, 89, 82, 50,216,194,252, 75, 15, 61,244, 79, 70,163,230, 55,126,227,223,
+ 63,249,228, 19,187, 7,212,165,116,109,237, 39,194,100,230, 73, 97, 89, 34, 8, 32,205,239,188,227,169, 67,135, 46,179,129,145,
+ 18, 60, 89,118,237, 6, 58,101,222, 68, 46, 2,164,206, 35, 99,128, 32, 35,141, 41,117, 66,250, 71, 63,252,195,109,219,254,250,
+191,251,183,207, 62,251,236,112,134,186,235,137,187, 33, 28,178,209, 4, 15, 55, 73,128, 39, 79, 62,119,252,196, 57,107,144,156,
+ 4, 69, 81, 64,227,141, 91, 56,112, 25,195,116,210,225,113, 45, 23,195,240, 38,159,140,217,165,206,194, 49,186,255,216,143,255,
+227,153,209,204,135, 63,156,131,190,230,244,253,247,103,203, 93,144,151, 60, 97, 66, 47, 88,245, 39,211, 93,119,253,213,129,131,
+ 87, 0,120, 53,248,168, 41,176,216, 39,141,156,214, 96,201,227, 6,122,225,185,227, 43, 87,151,161,254,149, 60,125,207, 59,222,
+121,238,220,185,139, 23, 47, 54,247,221,119, 58, 32,145, 8, 54,228,249, 30,200, 49, 30,114, 16, 34,136,186,253,246, 39,230, 23,
+214, 34, 36,137,152, 3,160,138, 83,205,254, 33,198, 39, 72,240,236,134,229, 14,119,184,107,109,125,225,209, 71,238,202,142,171,
+222, 84,130,240,198, 55,190,201,140,173,187,135,176, 0,128,135,195,203,239, 68, 17,112, 17, 6,136,251,151, 86,150, 22, 86,228,
+ 76, 16, 9, 56,104,144, 68, 65, 78,153,187,152,220, 91,193,147,153,201,108, 74, 47, 37, 63,251,194,137,231,158,125, 45,152,168,
+108, 32, 82,142,228, 21,136,211,119,125,247,219, 91,247, 4,130, 78, 69,174, 31,227,112,138,130, 74,148,224,128,236,224,225, 11,
+ 73, 82,151,179, 65, 51,193,225, 36, 13, 70,210,208,200,140,242, 4, 51,208, 96,150, 19, 34,137,231,206,158,120,254,249,155, 65,
+ 18, 94,236, 71, 86,194,252,166,224,109,109, 89,144,144, 2, 41,166,136, 66, 14, 48, 25,193, 52,169, 81,187,149, 82,120,127, 2,
+ 46, 49, 75,140,228,144, 53,225,231, 97, 70, 99, 2,217, 77,102,206,157, 61,121,233,242,141,144,129, 36, 20,234, 71,131,152, 51,
+166, 28,176,229,140,150,148, 90, 79,174, 12, 34,193, 61,199, 81,200,177, 45,144,143, 16,150,146, 35,165, 42,222,138, 51,205,172,
+ 60, 33, 72, 31,167,209,133, 11, 55, 93,124,249,168,148,109, 17,160, 88,153,226,120,196, 64, 22, 40,131,121,196,179, 34,129, 88,
+187, 54, 73,132, 67,161,225, 0, 92,158, 39, 90,101,198, 37, 82,216,222, 30,141, 70, 59, 17,214, 88, 36, 4,144,187,204,228,206,
+151,206, 31,123,249,226,209,226, 78, 16,147, 20, 90,103,217,166, 91,224, 45,148,145, 9, 52, 32, 81, 22, 3, 97, 10,236,129, 45,
+220,197,176, 25,202, 3, 85, 32,190,148, 59, 24, 33,176, 75,188,122,101,113,110,110,205, 12, 36,106, 92, 62,153, 52,207, 63,123,
+235,230,214, 2, 64,179,156,126, 64,116,203,235, 77, 42, 5, 6, 28,169, 67, 34, 45, 81, 70,198,122, 36, 68,230, 96, 36, 72,183,
+152,161, 88, 35, 18,238,234,103, 7,253, 1,146,186,178,178,124,248,200, 75, 77, 19,243,143,148,154,103,190,246,218,173,173,197,
+200, 7, 4, 41, 85,247, 42, 36,154,133,137, 44, 56, 20, 74,204,130, 44, 33, 64,196, 4,197, 45,131, 52,180, 49, 13,164,220, 51,
+ 34, 25,191, 36, 65, 6,134,195, 21,192,241,164,189,244,242,161,195, 71, 46, 16,186,248,242,141, 47, 93, 56, 22,114, 67,196,132,
+ 1, 89,146,100,102,128,220, 73, 36,153, 1,146,211,152, 4, 35, 32, 7, 41,138,180, 36, 55, 3,100, 50,143,123,121, 43,169,168,
+ 12, 99, 58, 88,164, 71,112, 43,233,103, 60,195,249, 23,143,190,248,210, 17,228, 83,178,182,138,132,187,153,197, 91,137,201,195,
+167, 24, 0,203,206, 35,188,138,195, 16,106, 42,196,236,184,131,116, 42,252,158,163,117,143, 5, 12,241,164,187,194,197,196, 83,
+ 38,247, 88,222,154,246, 73, 10,143,239, 69, 39, 3, 52, 9, 39, 96,102,146,147,160, 89,104,135, 36,193, 44,166,197, 4,183, 28,
+245, 19,238,160, 85,207,162,200, 97, 91,149,201, 37,178,218,199,189, 7,201,135,163,204, 83, 22,147, 88, 24,149, 12,204, 29,229,
+ 38,145, 85, 72,121,178, 5,185, 44,223, 58,194,135,234,102, 66,198,179,110, 20,127, 9,180, 74,169,172,189, 65,217,186, 84,203,
+185, 43,155,137,143, 53, 50, 75, 41,153,153,187,155,101, 72, 15,178,108,225, 64,129, 20, 97,249,158,161,178, 40,153, 97, 8, 39,
+ 11, 26,159,179,229,152, 33, 40,124,164, 27,203,146,169,207, 63,135,225,240,174, 35,197, 91,195, 29, 8, 87,211,191, 11,113,138,
+ 15,204,254, 22, 49, 39, 22, 46, 74, 78, 88,201,119,161,234, 71,191,253,250,246,235, 91,153,185,246,177,247,168,157,159,155,159,
+153,153,217,183,111,110, 52,202, 80, 92,215, 77,182,183,119,118,118,182, 55, 54, 54, 82, 74,223,242, 1,141, 70,163,251,238, 59,
+253,134,187,238,186,229, 53,183, 52,109,169, 56,138,176, 28,124, 71, 10, 24,153,170,164,167,159,126,250,209, 71,190,250,133, 47,
+124, 97, 92, 10, 60,223,180, 1,125,223,223,125,247,169, 83,167, 70,237, 72, 21, 55, 46,201,216, 32,161,174, 9, 98,206,240, 1,
+ 52, 77, 67,227,120, 60,126,248,139, 95,252,131, 63,248,175,127,173, 1,181,109,123,234,212,169,119,189,235,251, 84, 45, 77, 65,
+183, 48, 72,233,135, 25,254,116,102, 63,157,218,147,102,182,186,186,250,171,255,234, 87, 54, 54, 54,190,177, 1, 29, 60,120,240,
+ 93,239,122,215,241,227, 39, 35,134,197, 46,107,136,105,116, 97,250,231,117,199, 20,209, 41,208,180,205,133,151, 94,250,173,223,
+252,205,203,151, 47,191,170, 1,125,224, 3, 31,152,155, 91,112,249, 84, 34,182,107, 2, 75, 2, 63,200,234, 7, 11, 22,254, 53,
+215, 54,109, 26, 9,201,112, 77,211, 52,207,124,237, 43,191,254,235,255,233,235, 14,200,102,102,247,117, 93,231,238,157,119, 3,
+ 92,191,226,154, 30,112,167, 92, 73,174, 2,125, 42,197, 71,151, 39,185,123,242,242, 41,197, 23,147,123,138, 11,165,228,201,201,
+173,191,247,158,237, 63,249,211,247, 44, 47,239,251, 58,213,250,183,190,245,193, 0, 97, 17,249,226,244,171,122,175,138, 70, 84,
+204,102, 8, 78, 12,214, 55,231,141,225,194, 73,159,153,217, 57,114,244,165,187,238,122,100,118,223,182,164, 31,122,223,157, 47,
+190,120,219,147, 79, 62,121, 93,251,226,238, 80,133,116, 53,165,118,202, 11,164,233, 67,195,183,225,150,231,231, 54, 23, 22,183,
+150,150, 54,102,103, 38,163, 89, 31,181,221,104,148,102,102,211,204,204,164, 29,165, 40, 74, 22, 8,216,191,247,157, 15,222,126,
+251, 29,255,230, 95,255,218,181, 7,164, 90, 61,239, 53,107, 10, 0,185,134, 23, 22, 20, 40, 13,252,248,177, 23, 79,156, 60, 63,
+ 59, 59,105, 90, 25, 13,166, 38, 36, 7, 96, 3,163, 1,114, 69,124, 99, 49,252,166,221, 58,113,252,196, 39, 62,241,139, 31,255,
+248,199,174, 33, 67,185, 38, 52, 93, 27,218, 85, 39, 42,210,228,105,112,112,102,180,121,207, 27,191,124,243, 45, 95, 27,141,118,
+ 4,121,130,187,195,163,112, 41, 17,114, 38,119,137, 65,107,112, 36, 41, 73,221,104,180,149, 60,129,248,167,255,236, 19,215, 24,
+144,114, 97,234, 21, 95,129,116,120,255, 97,113,113,229,212, 27,191, 50, 55,183, 17,193, 80, 65, 43, 42,136,192, 0, 27,114, 64,
+ 39, 65, 84,145, 83,160,147,123,196,187, 31,249,232,199,246, 12,232,122,227, 41,168, 71, 15,179,151,194,225,226,226,213, 59, 94,
+247,152,217,196,229,114,148, 11,160, 72,123, 64,234,181,202, 68, 1,201,221, 29,114, 8, 73,234,234, 52, 47, 45, 46,189,255,199,
+126,124,106, 64,215, 93, 41, 5,136,146,239,233,165,186,209,216,248,182,219,159, 48,166,228,242, 20,127, 65, 12, 75,187, 13, 42,
+ 60,229,255,145, 30, 39,119, 79,220,217, 25,185,203,227, 2,158,110,125,237,173, 15, 60,240,150,225,146, 93,103,122,188,174, 85,
+ 94, 16,151,128,116,203,173, 79, 53,205, 88,146,156, 46,121, 66, 62,193, 37, 7, 16,211,144, 77, 2, 35,153,207, 41,186,228,112,
+215,230,230,172, 71,181, 39,165,120,208,247,252,192, 15,204,207,207, 15, 6,132, 93, 8, 26, 74, 45, 76,125,161, 80,144,176,188,
+124,105,233,134,149, 82,195,114,136,249,183,211, 75,253,178, 18,109,242, 60, 3,217,132, 10,146, 82,194,230,198,190, 90, 78,141,
+137,239,186,238,167, 62,244,211,101, 64,152, 22,155,236, 68,202,148,148, 63,187, 36,164,163, 55,157,143, 83, 92,144, 24,235, 25,
+182, 89, 14, 87,145, 39,135, 59,178,104, 59, 80, 70,236,142,171, 87,151, 60, 46,157, 61,128,146, 59,164,217,217,217,183,188,229,
+ 59,166,100, 40,251,132,124, 90,118, 23, 85,235,229, 62, 63,183, 49,187,111, 83,130, 39,184,163,200,144,148, 24,112,157,135, 35,
+ 73, 97, 36,144,220,187, 20, 62, 68, 41, 10,107,174,175, 61,125, 11, 6, 94,201,139,159,145,235,239,191,231, 61, 36,219, 2, 81,
+229,196,199,115, 2, 51, 0,136, 2,217, 19,246, 47, 95,166,164,114, 32, 50,109,115,186, 57,220, 8,209,123, 8,207, 36, 90,182,
+167, 37,243,242,171, 43, 7,174,174, 46, 21, 37, 68,164, 68, 14,152,123, 2, 52,214,187,191,255,251, 91, 8,130,163, 36,189, 1,
+ 94, 1, 84,225, 23, 85,199,180,180,180,226, 81, 5,140,146, 27, 97, 78,207, 8,143,187, 27, 83, 31, 67,101, 52,180, 86, 34,132,
+201,184,125,236,177, 59,242,101,195, 31, 57, 64,135, 81, 48, 72,130,191,229, 45,223,209, 66, 94, 92, 6, 75, 42, 89,252, 69, 92,
+216, 36,161,109, 82, 51, 26,231, 42, 94,224,145,100, 98,198, 13,144,128, 70,112, 9,185,230,235, 25, 89, 51,194, 1,164,212,126,
+245,175,238,222,217, 30, 1,110, 52, 88, 96,232, 38,129, 14,153, 26,119,167,165,148, 90, 15,240,192,233, 37,219,206,248,162,136,
+200,208,157, 0,218,217, 49,233, 1,217,132, 9, 70,153,117,135, 96, 68, 10, 77,119,136,222,176, 81,172,159, 19,216,222,158,123,
+236,204,235,183,182,231,153,231,196, 99, 73, 10, 92, 65, 56,220,140,112, 58, 91,197, 41,204,178, 3,201,115,160,234,238,117,150,
+ 56,106,199,114,193, 88,102, 40,123, 6, 51,193,233,168, 64,134,114,169,193, 8,192,197,151, 47, 28, 61,251,194, 73,247, 81, 64,
+ 13,185, 98, 49,116,226, 2, 77, 1, 83,137,108, 51,166, 24,227, 18, 11, 82, 45,151, 2, 0,130, 83,144, 53,147,129, 29,166, 59,
+154, 38,103,245,102, 80, 2, 26, 71, 50,135, 26,137,134,228, 88, 89, 57,112,246,249,215,140,119,230,162, 54,162,126,200,176,128,
+ 94,170, 65,151,172, 8, 77,155, 45, 16,251, 80, 3,185, 26, 27, 71,242, 31, 73, 79, 25,113,132,228, 36, 83, 65, 53,131,248,228,
+ 9, 50,183,196, 9,176,182,186,124,238,236,205,219,219,243, 1,159, 0,153, 87,232, 37, 8,247, 56,194,252, 63,163,120,102,238,
+222,122, 22, 95,167, 51,107,116, 6,119,242,170,197, 45, 61,213, 48,142, 5,128, 84,185,100, 84,208,165,196,181,245,197,179,103,
+111,222,218, 94, 36,242, 80, 84, 10, 72,101,177,114,112,178,171, 20, 86,104, 37,106, 33, 40,132,168,192,194,129, 91, 35, 20, 52,
+ 36, 65,236,146,185, 98,154, 3,191,202, 50, 29, 81, 4,224, 59, 59,163,115, 47,156, 92,185,122, 40,170, 70, 96, 37,185, 76,229,
+ 20,130,108,122, 28, 86,140, 64,148,251,195, 48,106,176, 66, 33, 80, 10, 4, 44, 32,123,128,147,201, 40,206, 82, 33,176,196,194,
+145, 76,201,183,183, 22,158,125,246,214,241,120, 95, 48,206,242,156, 40, 89,158,201,160,122,132, 62,208,115,166,146, 71,156,133,
+217, 66, 11,188, 69, 65,126, 49, 20,111, 71,121,227, 1,252, 79, 38,173, 18,100, 94, 19,178,140,186, 38, 93, 94, 57,116,238,236,
+205,174,166, 32,116,189,116, 56, 81,140,132, 50,226, 88, 16,222, 33,160,149,197, 2, 16,217,102,131, 92,141, 66,145,176,188,102,
+129, 90,187, 38, 19, 27,119,237,104, 52,137,147,226,236,148,112,229,210,161,115,231, 79,230,213,201, 92,205,140,207,149,196,132,
+153,186,107,232,147, 62,230,149, 71,134,208,122,237,109, 3,107,206,163,201, 86, 59,202, 41,128,101, 48, 63, 8,213, 59, 59, 51,
+109, 59,169, 53,123, 64,151, 95, 62,116,238,197, 19,129,178,102,254, 80, 84, 18, 97,130, 12,245, 61,242,161,140,189,154, 73,178,
+112, 2,206,176,213,144, 96, 25,232,204, 97, 24,228, 53, 12, 26,148, 18, 51, 28, 41,108,110,204,245, 1,182,116,249,242,129, 23,
+206,157, 8,203, 20,174, 27,146, 23,182, 77, 84,247, 74, 73, 16,168, 49,132, 4,149,104,202,107,120,227, 30,166, 70, 50, 40, 80,
+248,248, 29,194,238, 21,208, 12, 69, 10,206,206,250,250, 66,160,252,146, 54,214,231,207,190,112, 60, 22,160,112, 72, 2,106,206,
+105, 85,133, 8, 34,228,243,105,200, 84,152,170, 37,246,228,152, 76, 98, 21,242, 87,138,210,171,255, 88,164, 88,218,218,220,215,
+ 77, 26,119, 77,118,218, 23, 94, 56,153, 82,227, 57,102, 85, 69,183, 75,117, 52,207,142,231, 31, 57, 36, 70,189,125,120,192,202,
+ 94, 40,149, 94,186, 55,119,223,125,119, 1, 61, 56,149,185,230,148, 53, 43,148, 36,151, 37, 55, 72,231, 95, 60,190,181, 53,151,
+ 75,102, 69,166,128,222,102, 68, 48,147, 47,145,143,177, 74,124, 1,206, 57,164, 77,176, 92,165, 85,248, 64,230, 39, 37, 16, 53,
+134, 82,148,129, 42,218, 14, 94,190,124,232,242,229,131, 40,148, 87,101,149,246, 98,156, 2,230, 14,206, 30, 45,164,156,153, 9,
+ 37, 25,227, 30, 81, 64,161, 23, 80, 93, 46, 55, 88, 32, 78, 38,215,112,205, 60,207,191,134, 75,150, 3,190, 28,165, 10,211,197,
+243,154,249,196, 59, 47, 50,229,142,190,194,237, 83,186,130, 26,120, 85,186, 87,184,125,151,213,154,120,176,186,170, 32, 74,125,
+121, 37,131, 50,253,226,160, 10, 89,172,127, 63,110,120,113, 83,222,123, 40, 40, 34,208, 72,207,132,162, 97,170,238,187,230,162,
+200, 60, 49,213,135,233,181,204,195, 92,214,242, 84,166, 18,198,249, 69,219, 89, 13,124, 49, 17,229,169,144, 11, 95,145,169, 57,
+242, 80,156, 10, 71,215,231,198,168,137,156, 36,171,143, 18, 15, 25, 90, 86,150,204,251,144,165,228, 38, 37, 27,208,160, 30,194,
+242, 12, 57,188,139,177,245, 92,200, 28,208,213,146, 59,250,180, 59,236, 31,188,180,179,208, 84, 20,180,136, 78,240, 28, 85,133,
+ 35, 38,169, 18,132,194, 44, 97,247, 92,230,239,214, 55,138, 55, 89, 30, 6,179, 5, 22,122, 93, 15, 0, 81, 44,243,164,200, 92,
+123,209, 25,216, 52,148,193, 97,119,158,189,103, 52,152,134, 38,149, 35,188,106,232,131, 26, 88,171,111,121, 25, 7, 67, 82, 77,
+153, 45,166, 44,155,227,162,101, 67,155,139,222, 88,151,162,243,148, 53, 47, 81, 91,141,177,138, 12,168,136,181,215,133,202,202,
+ 51,192,155, 81,197, 40,175,161,161,103,196,176,146, 61, 7,224,162,170, 80,103,173,118, 31, 50, 29, 75,189,204,217,135,220, 89,
+192,195, 42, 10, 34, 60,142,149,124, 75,117, 40,194,110,192,240,219,175,111,191,190,253,250,246,235,111, 66,189,245,149, 46, 65,
+ 46, 46, 45,221,176,180,180,176,176,184,188,127,249,224,129,131,203,251,247, 47,223,112,195,252,194,226,194,194,220,204,204, 44,
+ 11,147,169,148,221,166,138, 22, 93,215,109,109,109,174,174,173,174,173,173, 95,184,240,210,250,218,250,213,213,171,107,171,171,
+ 43, 43, 43,107,107,107,127,243, 38,104,126,126,254,142, 59, 95,119,226,196,137,163, 71,142, 44, 47,239,159, 95,152,111,219,118,
+208, 94,178,235,234,220,123,147,105, 42,237,160,149,176, 86, 79, 7,175,174,235, 54, 55, 54,175,174, 94, 61,119,238,236,227,143,
+ 61,246,196,227,143,119,223,164,202,247, 55,109,130,142, 28, 57,114,250,254,251,239,185,231, 77,179,179, 51,170,196,146, 87,115,
+ 93, 21, 16,191,199,165, 88,138,107, 42,212,236, 12, 27, 98, 80, 44, 29, 22,116,115, 47,103,161,177, 10,138,174,174,231,158,123,
+246,127,125,230, 51,103,206, 60, 58,136,155,255,191, 76,208,226,226,226,209,163, 71,223,248,198, 55,221,113,199,157,214, 54, 70,
+147,124, 74, 64,116, 13,206, 53,175, 41, 52,228,174, 18,242,224,227, 30, 14,253,222,159,211, 93,115,145, 28,245,132,223,202, 21,
+ 48,187,114,229,202, 31,255,239, 63, 58,115,230,204,165, 75,151,190, 37, 19,116,228,200,145, 83,167, 78,221,122,235,173, 71,142,
+ 30,205,141, 75,210,244,164,232,149,163, 38, 14, 13,210,192,210, 12,143, 79, 25, 31, 92,131,214,127, 77, 50,192,215, 59,200,204,
+231,162, 89, 99, 0,159,123,246,153,207,127,238,115, 95,124,248,225,174,155,124,115, 38,232,161,135, 30,218, 25, 79,122, 34,247,
+174, 56, 93,175, 46,158,156, 18, 24,114,239,193,107,156,182,139,182,241, 10,162,180,139,186, 48, 84,195,170,125,133, 36, 8,142,
+ 70,233,232,177, 11, 55,220,240,252,239,252,246, 35,255,229, 63,159,249,235, 78,208,135,126,250,103, 52,100,186, 95, 87, 94,246,
+ 88,158, 33, 77,102,122, 94, 6, 7,247,138,210,180, 18,238,225,181,244, 84,240, 93, 76,142,235,107, 98,136,149,153,239,155,219,
+185,241,240,165, 35, 71, 47,204,205,109,211, 12, 50,107,108,125, 13, 31,127,232, 75, 95,248,194,243,195,108,247,213,191,218, 76,
+135,218,213, 90,114,173,110, 10,237,178, 88,202,156,166, 30,117, 0,185,247, 60,101, 10,101,197, 53, 50,243, 64, 5,148, 14,212,
+ 93,125,137,133, 20, 12,134,220, 65, 78,147, 17,102, 50, 19, 77,141,201,168,118,148,218,153,110,166,157,204,204, 78,230,230,182,
+227,127, 59,138, 61, 34,172,228, 95,201, 19,231,230,155,159,255,133,191,243,228,147,175,255,203, 47, 61,246,135,127,248,223,191,
+ 81, 59, 53,160, 87,224,186, 61,102,122, 5,205,210,158, 79,195,131,186,230, 81,212,142, 59, 33, 86,126,123,113,113, 99,105,105,
+125,110,110,123,102,118,220,142, 82,219,120,211,120, 76, 13, 1, 35, 96,160,129, 65,191,204, 4,231,218,245, 82, 84, 49,216,224,
+ 72,170, 76, 86, 18,210,104,180, 97,182,249,134,187,238, 62,117,207,169,213,213,181,223,251,221,223,121,226,137,199, 95,181, 4,
+101,176, 82,195,135,220,243,212,218, 27,224,228,166,134,232, 34, 8, 48, 81, 83,187, 18, 12,182, 76, 24,124, 37,215, 92,104, 77,
+183,188,124,245,200,145,139, 75, 55,172,141, 70, 29, 41, 51,128,104,162, 27,209,130,190, 93,104,170,102, 65,145,160,130, 88,155,
+231,151,164,213, 82, 67, 80,172,163,104,161,204,255, 23, 8, 87,211,108,207,140,182, 54,214,231, 33, 44,204,207,253,232,143,190,
+223,165, 79,125,234, 63, 60,249,196, 19,175, 74,130,246, 72,202,117, 18,254, 61, 44,157, 66, 26,210,148, 90,245,245,218, 93,202,
+ 25,242,162,133,133,245, 35,135, 95, 94, 62,180, 50, 59, 59,102,113, 77,202, 72, 13, 83, 52,135, 68, 65,153, 8,202,174, 43,207,
+151, 35,100,138,114,132, 77, 78,185,102,150, 11, 23,174,194, 76,142, 98, 73,198, 55, 58,107,118, 2,208, 33, 41, 79, 36,223,255,
+254, 31,219,216,216,248,253,223,251,189, 51,103, 30,125, 37,142, 87,101,126, 76, 27, 97, 93, 59, 38,158, 62,179, 55,183,234, 79,
+ 24, 58,244,193,223, 65,106,113,113,237,228,205,207, 29, 63,249,194,226, 13,235, 77,147, 66,245, 6,174, 51, 46,100, 5, 31,207,
+237, 78, 54,236,173,235,187, 8,242,189, 74,235, 73,174,169, 85, 62, 78, 6,189, 8, 64,201,237,202,149,253,235,235,139,195,231,
+242,228,163,209,232,244,233,251,239, 62,117,234,169, 39,159,220,187, 15, 77,158,160, 55, 63,240,128, 48,132,142,116, 29,155, 51,
+245,167, 74,246,212,215,141,199, 5, 65,243,115, 27, 55,223,252,252,137, 19, 47,204, 45,108,152, 13, 5, 47, 58, 9, 88,120, 47,
+181,139, 78, 28,120,195,210,160, 83, 92, 34,251,205, 41, 88,119, 79, 97,229, 77, 72,125,157,152, 16, 38, 93,123,233,226,161,141,
+141,121, 12,220,116, 41,232,248,210,210, 13,127,251,109,111, 91, 92, 88,122,236,177,107,196, 4,205,253,247,191,249,235, 51,188,
+ 6, 29,157, 5,211,155,170,146, 76,253,125, 80,214,145, 96,150, 14, 29,184,116,243,107,158, 95, 92, 94, 45,197,179,178,224,185,
+ 63, 43,170,135,236,169,242,196, 32, 18, 64,109,149,171,147, 55,152,142,126,225,242,172, 56, 49,232,180,143, 27,237,108,207,188,
+244,226,209,157,237,125,125, 92,151, 75,184,253, 3,156, 56,113,226, 29,239,248,158, 71, 30,249,234,250,250,250,174, 9,186,255,
+213, 38, 35,197, 17, 21,149,138, 54,237,162,108,131,174,220, 82,217,193,204,104,251,166, 99,231,143, 29, 59, 63,154,217,137, 83,
+170, 66, 21, 62, 77,111,164,138,214,228, 66, 81,105,210,201, 21, 24, 98,224, 0,202, 54, 23,152, 6,160,243, 20,105, 88,178, 3,
+ 18,174, 92,222,255,226,139, 55,185,219,174,147, 75,201,171, 87,153, 7,223,250,157,115,243,243,177,169, 78, 47, 65,215,115,237,
+ 28,218,163,129,105, 17, 6, 45, 16,187,213,171,132, 59,194,236,204,206,177,155,206, 31, 58,124,209,154,174, 84,105, 11, 97, 79,
+ 53,238,225,192,196, 15,219,102,167, 53,167,244,208,214,150,180,216,190,193, 43, 39, 13, 8,193,169, 27,150,196,141,220, 53,233,
+ 70,207,191,112,243,250,218, 98, 38, 11, 13, 59, 62, 6, 31, 75,245, 31,183,188,230,150,215,188,230,150,167,158,122, 50, 56,233,
+205,125,247,157,190,150, 54,169,215, 37,214,245, 40,157,254, 3,109, 66, 22,165,202, 89,204,218, 53, 26, 77,110,188,241,229,131,
+135, 47,133, 49, 86,222,158, 38,138,103,121,134,226,187,170,225,102,189,222, 32,118, 66,127, 76,189, 81,175, 10,165, 97, 13,130,
+125,109,161,108,225,144,220,158,127,254,228, 75, 47,222,164,178,241, 66, 29, 35,123, 29,211,128, 60, 12,119, 63,124,248,240, 61,
+247,220,243,232,163,143,110,111,111, 55,247,221,119,122,151, 54,105,202, 65,245,189,147, 44, 27, 32,212, 53,166,122,242, 1, 7,
+124, 93,179,180,127,121,229,240,145, 11,163,153,113,126, 10, 14,116, 64,153, 83,161, 50, 77,253, 61,250, 13,103,178,178,229,185,
+ 25, 54,254,102, 25,100, 45, 68, 40,183,207, 70,177,139,117,214, 82,215,156, 63,119,236,236, 11, 39,220,219,222,195,104, 24,198,
+ 78,177,215,203, 52, 81,210,220,220,220, 91, 31,124,240, 75, 15, 63,220,156, 62,125,223,180,103,175,225,222,192,162,228,193,150,
+ 29,187, 6,188,105, 85, 66, 3,170, 37,213,190,125, 91, 55, 30,190, 48, 63,191,153,249,220,177,135, 71,221, 92,162, 92, 43,134,
+ 50, 29,106,103, 29,210,160, 54, 84,181, 72,197,250,214, 10,186,132,235,120, 20,108,111,237,251,218, 51,183,156, 59,119, 60,229,
+217,153,182, 31,211, 76,193,169, 50, 84,185, 42,141, 15,190,245, 59, 91,185, 52, 21,232,212,241, 23,102,111,212,246,195, 76, 6,
+195, 41,102, 81,238, 12,242, 25, 74, 91, 27, 73,153,165,249,249,245,217,185,205, 82,145, 84,223,138, 82, 74,244, 46, 49,111,160,
+ 66,243,184,151, 44, 64, 52,115,166,192,104,229,177,213,134,101, 2,165, 49,183,145,246,105, 6,175,145, 18,117, 93,115,233,226,
+225,115,103,143,111,239,204,149,176,106, 15, 7,189,200,123,105,105,171,237,194,181,169, 91, 46, 88, 99,173, 52, 37,188,131,182,
+239, 92,127,172,129, 85,175,130,213, 48,230,210,110,233,165, 70,108, 35, 51,153,159, 95,107,155, 73,207,148, 40,115,111,166,126,
+181, 60, 11, 75, 42, 76, 38, 55, 64,110,193, 40, 40,101,227,224,119,132,163,151,169,196, 64,153, 48, 57,148, 5,129,105,210, 94,
+ 94, 57,112,225,197,155,214, 55,150, 74,123,161,188,154,127,245, 65,169,114,239,119, 25, 61, 88,113,206,190, 89, 27,142,132, 54,
+183,127, 86,199,148,203,195,136, 94,207, 65,219, 30, 21, 76, 74, 15, 98,157, 74,154,148,121, 62, 44,172,132,182, 29,143,102,130,
+ 87, 93, 49, 9,175,156,194,190,227, 1,153,143,136,146,204, 71, 19,114,148, 68, 45,199,203, 42,192,172,140,240, 76, 11,172,172,
+144, 82,199, 79,205,230,198,194,197,139, 55, 94,185,114, 96, 50,153,201, 67,239,249,177,188, 86,232,203,222,230,244,122, 87, 92,
+106, 37, 32, 26,218,202,172,203, 9,103,232, 66,144, 38, 11,134,156,165,163,231,235, 85,153,130, 42,223, 50,214,216,124,212,142,
+205,146, 15,146,143,194,203,200,150,151,185, 48,158, 27,192,251, 0, 56,139,183, 7, 61, 14,140,142,125,193,138, 15,200,115,147,
+ 73, 87,221,100,102,117,117,105,229,202,129,245,141,165,201,100,148, 89,125,187, 16,115, 94, 15,139,208,222,220, 50,211,139, 43,
+ 4, 35, 25, 24, 18,132,216, 68, 78,213, 72,136,154,186,194, 0, 46,202,209,112,213,203, 41, 6,171, 75,100, 2, 82,225,120,244,
+ 33, 71,105,141,173, 88,169, 23, 38, 47, 51, 11, 40,247,234,147, 68,217,161,169,242, 44, 51,115,174, 75,163,173,141,197,213,171,
+203,171,107, 55,236,140,103,161, 6,125,104,224,152, 34, 69, 23, 14, 99, 13,174,122,205,154,254,151,125, 5,123, 90,104,105,194,
+150,167, 54, 58, 9,178,164,135,155, 64, 15, 51,136, 94, 29, 79,161,196,130,193,206,157,138,247, 75, 86,149, 55, 53, 83,105, 33,
+ 71,109,239,174,100,235,154,239, 3, 85,137,234,249,101,166, 19, 4,209, 32,183,174, 27,109,109, 44,172,173, 45,109,108, 44,237,
+108,239, 75,222, 84,172, 21,185, 21,190,239,255,185,150,108,244,150,243,154,248, 85,159, 30, 84, 26,229,128,125,212,102,115,238,
+133, 98, 95,194,165, 26,155,170,238, 23, 17, 54,105, 10, 16,116, 12,167, 15,112,209, 19,221, 89,152,199, 40,107, 83, 98,136,158,
+137,150, 5,174, 80, 70, 84,152, 98, 33,113, 54, 30,207,174,173, 46,175,174, 46,111,109,205,167,212, 14, 64, 86, 13,170, 79,123,
+227,248,222, 26, 86,186,104,222,135,131, 61,191,109,119,245,106, 15,145, 59, 79, 83,211,180,240, 48,187, 44,168,151, 19,168,205,
+ 7,197,128,171, 82, 97,213, 67,167,153, 39, 87, 73, 49, 33,149,169,179,201,196,154, 81,159, 39, 4,205, 59,247, 25, 20,250, 51,
+251, 29, 17,242,118, 7, 16,146, 48,153,204,172,174, 46,175, 92, 57,184,189, 61,231,110, 5,117, 86,225,163, 98,232,148,119,187,
+238,168,191,197, 32,153, 13,133, 25, 10, 99,170,236, 60,233,133,233, 26,116,236,210,216, 96, 25,103, 24, 0,200, 41,181,234, 57,
+138,232, 27,109,166, 2,139, 98, 77,250,196,110,176, 75,227,128, 57, 29,246,120,103, 50,154, 76,218,125,249,162,213, 8, 49,194,
+188,186, 11, 72,217,159,163,162, 51,205,198,198,194,149,149,131,235,107, 75, 41,141,106, 74, 55,104,170, 43, 91,230,105,136,129,
+215, 13, 2, 67,201, 61,118, 68,170,180, 35,148, 77,123, 81,187,244,197,186, 74,145, 35,213,112,200,229,165, 5,164, 15,176, 90,
+ 71,133, 48, 93,189,235,170,198,181,158, 94,165,164, 28, 41,183,173,153, 13,115,156,214,238,108,207, 46, 44,172, 91,211,155,169,
+ 74, 81, 85, 33,137,123,110, 94, 65,234,154,213,213,229, 43, 87, 14,110,109, 45,184, 71,187,105,201,104, 80,226,139,188, 69,237,
+ 32,179, 44,187, 48, 84, 46, 85,153,152,169, 32, 57,147, 83, 75, 83, 65,133,238,250,185,221, 91, 41,102,239,135, 4,148, 36,197,
+235,230,135,197,124,248,174, 78, 72, 47,188,238,190,183,193, 33, 78,151, 79, 37,165,196,141,141,185,133,197,153,217,125,219,232,
+ 79, 24,226,141, 81, 40,224,100,220,174,174, 46, 95,185,114,104,123,107, 78,176, 2, 13,102,102, 98,111,146, 88,218,118,114,124,
+ 86,102,198, 7, 32, 82,198,197, 89,211,197, 42, 73,177,239, 80,142, 30,234,108,230,188,169,112,223,175, 83, 78, 39,208,150,202,
+242,180,113, 87, 73,226,243,151,171, 31,204,168,110, 78, 80,138,115, 34,250,118,191,148,184,181,189,111,107,123,118, 52, 19,219,
+146,107, 32,126,153, 67,155, 82,187,182,186,124,241,226,225,237,237,125,213,235,103,153,234, 97,176, 32,216, 87, 95, 62,247, 29,
+ 89, 0, 0, 4,103, 73, 68, 65, 84,147,239, 68, 13, 87, 42,111,200,212,231,117, 25, 79,202,156,219,210,160, 17,141, 23, 17,251,
+ 70,252,144,191, 68, 71, 52,135,244,113,101,237,122, 34, 64,182, 37,210, 43, 65, 2,228, 62,160, 20,132,215, 30,250,243,194,192,
+237,247,115, 84,109, 77,202, 71,199,227,209,198,250,194,252,252,230,104, 52, 46,156,101, 47, 94,204,214,215, 23, 47, 95, 58,180,
+177,190,232,170, 82,195,190,199, 73, 94,195,129,220,173,225,117, 7,224,114,119, 86,210, 50,167, 70, 69, 40,228, 42,199,113,225,
+117, 98, 27, 30,213,108, 25,101,127,201,204,121, 21, 7, 40, 59,106,155, 68,172,103, 59,132,156,171, 90, 21,187, 49,192,121, 57,
+216, 8, 6, 85, 77,134,181, 81, 84, 10, 46,201,141,245,185,249,249,185,165, 27, 58,179,222,217,143,199,179, 87, 46, 29, 88,185,
+122,160,235,218,129,187, 80,191, 9, 74,217,190,165,234, 87,109,128,168,155,175,228,111,168, 98, 73, 67,238,123,207,241, 29,164,
+ 4, 89,112, 48,220,240,196,203, 30,161,170, 37,135, 34, 94,101,215,182, 24, 68, 59, 69,183,141,199,151, 15, 63, 50,243, 77, 69,
+214,118, 42,159, 14,255,122,242,105,209, 64,236,236,204, 94, 93, 89,110,218,110,110,110,139, 84, 74,163,141,245,133, 75,151, 14,
+109,109,205,215,148, 48,179,134,107, 93,162,108,222,131,126,151,207,193, 78, 48, 28, 52, 37, 69, 93,144, 86,244,146,213, 89,169,
+148, 16,163, 91,174,198,134,158,205, 87,217, 7, 44, 82,185,176,188,189, 57,203, 96,208, 48,142,108, 81,207,171,201,106, 9,112,
+122,226, 51,114, 58,237,131, 20,171, 44,178, 15,189, 98, 53,173, 73,182,178,122,195,250,198,252,104, 52, 49,250,164, 27,149,116,
+105,104,167,203,166,229,234,247,156, 26,200,109, 47,179,101, 87,157,188,153, 82,110, 85,200,253, 65, 83,252,228, 10,164, 21,138,
+ 74,197,106, 51,200,147, 63, 69, 99, 39,138, 33,231,148,191,239,131, 64,160,205,101,201, 92,170,244,234,194, 49,220,144,175, 40,
+ 15, 89,107,234,253,196,144,123, 16, 94,102,111,210,117,109,215,181, 3,128, 93,213,205, 23, 1,156,202,249,134, 51, 50,168,204,
+160,223,224, 44, 47,218,112, 58,250,202, 88,191, 65, 91,126,186, 48,210, 97,133, 43, 40, 17, 5,204, 2,206,213, 93,155,140,112,
+200, 6,233, 25,137, 65,155, 91,222, 47,180,224, 60,158,219,116, 80,197,164, 90,101,247,218, 28, 49, 32,153, 87, 9,226,148, 69,
+ 31,246, 14, 12,133, 55, 31, 67,191, 22, 61, 31,188,146,198,170, 71, 80,101, 16,168, 86,130,189,239, 72,202, 16,116,105, 98,240,
+210, 56, 18, 93, 79, 94, 64,117, 85,192, 85, 24, 66,212, 40, 8, 54,119,111,228, 8, 21, 27,164, 62,190,173,205,125, 57,155,241,
+221,187, 66, 85, 35,202,193, 3,104,239,202, 79, 23, 13,114, 40,144,187,211, 6, 6, 94,197, 14, 85, 91, 86,206, 41,130,168, 97,
+ 99, 29,106,175,157, 13,122,239, 50, 83, 97,208, 41,227,101, 11, 66,102,180,170, 48, 62,152,253,181, 77, 51,254, 65, 70, 79, 86,
+117,243,225,200,218, 60,146, 58, 71,165, 91,181,191,109,201, 75,166,173,131,166, 42,191,154,138,119,246,176, 96,167, 38,108,152,
+116, 14,171,163, 53, 71, 27,168,118,222, 92,109, 24, 65,123,169, 22, 13, 12,101, 69, 30,250,142, 93, 14,246,108, 6,122, 16, 48,
+ 3,149,209, 74, 62,149,153, 42,182, 34, 45,179,147,115, 27,243,126, 22,179, 24, 23, 11, 51,236, 36,241,129,140,212, 22,160,190,
+217,101, 56, 19,211,155, 67,100,221,169, 90,179,107, 66,209, 43,201,112, 16,172,157, 19, 28,180,101,213, 47,201, 75,251,142,250,
+ 86,151,108,123, 7,237, 40, 67, 58,134, 6, 70, 85,136,198,234, 82, 49,170, 59,168, 12, 48,252,138,228, 91,193,240,189,180, 29,
+106,208,104, 51,236,176,193,180,117,216,245, 81,195, 46,156,225, 14, 28,187, 97, 25,105,216, 16, 88,155,171,234, 22,146, 3, 21,
+ 28, 52,173,101, 43, 88,192,244, 26, 89, 99,112,114,233,166,244, 65, 65, 28,253, 46, 36, 25,232,201, 7,157, 61, 55, 32,171,164,
+247, 38,170,230, 5, 82,219, 3,129,125,159, 87, 5,119,250, 60,184,166, 2,117,180,149,129, 90, 31,152,123, 88,138,195,121,153,
+ 78,146, 49, 8,118,170,159,231,148, 35,171, 33, 78,209,166,108, 12,242,223,204, 6, 59, 51,100,197, 43,123, 96,202, 75,200,232,
+ 44,101, 13, 49,239, 62, 26,118, 52,123,172,156,197,229,221, 91,221,242, 65, 86,204,172,237,239, 90, 58,148,243,186,168,175,135,
+228,251,151,197, 29,198, 41,187, 56,131,123,119,248,219, 53, 95, 67, 75, 52,180,121,131,202, 63,135,117, 26, 47, 86, 8, 83,219,
+ 12,129,125, 31,123,223,242,148,183,253,239,243,241, 72, 52,172,135,137,132, 10,216, 13,206, 41,225, 79,222,227,162, 79,143,115,
+135, 64,237,187,202,122,239,185,169,110,215, 19,198,158,191, 67,137, 24,206,203,208, 24,237, 98,203, 15,191, 50,252, 86,153,223,
+124, 1,105,154,234,152,125,123, 45,154,199, 73,125,122,194,254, 75,131,125,104,114, 64,153,153, 21, 37, 20,232,107,206,220,179,
+239,120,245,252,224, 52,179, 87,146,251,255, 5, 5, 25,118,136, 86,164,160,133, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+ 0};
+
diff --git a/source/blender/editors/datafiles/thumb.png.c b/source/blender/editors/datafiles/thumb.png.c
new file mode 100644
index 00000000000..132ee0788fa
--- /dev/null
+++ b/source/blender/editors/datafiles/thumb.png.c
@@ -0,0 +1,291 @@
+/* DataToC output of file <thumb_png> */
+
+int datatoc_thumb_png_size= 9098;
+char datatoc_thumb_png[]= {
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0,
+ 0, 13, 73, 72, 68, 82, 0, 0, 0, 96, 0, 0, 0, 96, 8, 2, 0, 0, 1, 26,253,208,249, 0, 0, 0, 4,103, 65, 77, 65, 0,
+ 0,177,143, 11,252, 97, 5, 0, 0, 0, 6, 98, 75, 71, 68, 0, 0, 0, 0, 0, 0,249, 67,187,127, 0, 0, 0, 9,112, 72, 89,
+115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 0, 7,116, 73, 77, 69, 7,218, 7, 19, 0, 34, 14,207,247,218,
+175, 0, 0, 32, 0, 73, 68, 65, 84,120,218,237,124,123,208, 93, 87,117,223, 90,107,239,115,206,189,223,251, 37,125,210,103, 75,
+223,167,151,223, 22, 66,182,121,197, 22,114, 18, 8, 49,133, 16, 48, 73, 27,167, 6,146, 97, 74, 27, 90, 72, 39,227,166,195, 36,
+105, 59,147,153, 38, 77, 66,167,147, 87, 73,219, 60, 11,100,218, 48,147, 54,208,192,132,242, 10, 73, 1, 27,131,177,141, 9,150,
+173,135, 45,217,178,164,239,253,221,123,206,222,107,173,254,177,247, 62,231,220, 79,178,229, 39, 54, 25,238, 92, 93,157,239,222,
+115,207, 93,103,237,245, 94,191,181,241,208,161, 67,112,209,199,211, 57,137,234,163,183,188, 54,158,125,199,167,206,109, 58,201,
+214, 71,119,252,232,225, 27,119, 79,220,127,252,212,175,190,126,106,211, 73,102,126,126,254,216,177, 99,255,233,125,239,190,230,
+229,135,119,205,239, 91, 63,119, 98,231,204,196,125,143,156,102,150,230, 74, 34,242,141, 63,253,136,205,187, 72, 6,200,188,230,
+134,155, 58,249,151, 10,107, 86,251,213, 31,126,230,206,134,166,172, 51,204,190,220, 88, 62,221, 95, 61,195,174,191,111,110,235,
+203,247,238,156, 25, 29,122,231,205,215,183, 9, 87, 21, 81, 97,118,125,223, 95,101,225,137,225,238,229, 59,182,111,155, 28,189,
+253,240,117,145,112,246, 78,216,137,175,216, 87,204, 37,139, 42, 64,102,104,235,196, 24,179,190,253, 53,215, 18, 0,112,213,231,
+170,199,174, 39,213, 58, 59,199, 34,158, 89, 84, 17, 49,207,237, 80,145, 91, 0,240,229,154,239,175,187,222,138,235,175, 86,222,
+ 85,206, 59,207,222,179,103, 97, 17, 66,180, 0,224, 54,150, 93,185,230, 54,150,250, 85, 85, 58, 46, 61, 59,207, 21,179,243,222,
+179, 48, 11, 62,173,181,123,102,143,159, 56,116, 29, 0, 28,252,145,119, 63,213, 73,247,254,233,135,255,249, 45,223, 55, 57, 58,
+116,253, 91,255,233,230,181, 11,255,221,247,103,255,211,218,124,223,182,201, 17,170,134,151, 30,254,218,195, 39, 7, 78,186,231,
+163,255,253,189,255,240, 39,108, 94,168, 10, 32,206,118,252,218, 70,127,207,236,212,221,173,243,204,251,223,241,211, 34,236,250,
+107,229,250,146,219, 88, 1,245,163, 29,131,128,187,182, 76, 92, 54,183,229,222,227,143, 1, 0, 33, 0,128,138,176,248,202, 85,
+235,190, 90,207, 50,123,201,204,196,158,185, 45,147, 35,221,183,189,234, 26, 0,176,204, 78,188, 19,239,132,157,250, 74, 88,132,
+133,136,198,135,135,182, 77,248,202,249,195, 87, 45,144, 84,125,113,125,118, 61,174,214,125,181,225,153,153, 89, 68, 0, 52,179,
+102,164, 91, 76,142, 14, 91, 87,174,251,106,195,247, 87, 93,111,197,185,190, 99,174,152, 43,207,206,179,103, 81, 85, 66,180,213,
+198,178, 47,215, 93,127,165,236,175,151,206,151,206, 87,142, 43,239,157,103,207,236, 88, 68, 4,158,175,181,163,231,107,229,237,
+249,111,253,245,111,124,224,129,135, 31,252,234,183,143,247, 42,255,251,255,247, 43, 0,240,179,255,235,145,172,232,254,234, 15,
+ 77, 63,197,133,240,208,161, 67,159,255,252,231, 27, 10, 9,239,250,111,191, 75, 54,247,190,252,204,231, 62,126,234,236,202,242,
+ 70,175,114,252, 71,159,187,235,169, 41,194, 67,135, 14,189,251,198, 3,151,239,218, 87, 12, 79, 20,195, 19,182,232, 34, 0,187,
+178,234,175,185,222,234,210,169, 7,238, 61,242,208,233,197,149, 39, 86,215,202,202,123,129, 63,254,236,157, 23,188,144,217,177,
+ 99,199,123,222,126, 91,222, 29, 37,178,202,206,149,235,174,191,238,202,117,118,125,241, 21,153,108,203,248,240,150,209,206,104,
+167, 83,100, 86, 85,175,217,185,109,255,252,246,110,167,120,228,204,210,102, 30, 25, 91,136,120,118,149,170,138,175,216, 85,194,
+ 21, 87, 61,239,122, 82,245,184,234, 21,153,221, 62, 53, 54, 54,212,217, 54, 53,126,102,101,237,236,202, 90,145,217,203,183, 79,
+247,171,234,163, 95,188,167,185,144,136, 87,246, 32,172,236, 85, 88,197, 43, 59, 97,167,236,153, 43,246,142, 69, 68,213, 26, 26,
+ 42,242, 45,227,163,195,157, 98,121,109, 99,181,215, 95, 90,239,223,118,211,203,151,214,215, 63,254,213,191,179, 0, 32,174, 20,
+246,194, 94,124, 37,190, 98, 95,138,235,179, 43,197,245,196,245, 88,132, 89,194,181, 68, 21, 1, 44,209, 80,167, 64, 68, 36, 50,
+132, 0,122,203,193,203, 44, 0,248,170,167,222,177, 56,113, 78,124,233, 93, 95, 92,223,187, 30,187,158,247,226,216,123, 22,239,
+213,113,176, 85,220,190,168, 33,202,179,172,155, 7,251,214, 95,101,231, 84, 28,251,138, 93,159, 93,159, 93, 47,104,148, 19,246,
+ 94, 60,139,243,222,177,120,230,202,115,229,217, 51,123,150, 96, 0, 85, 69, 85, 45, 0,150,107,231, 84, 28,187, 74,124,201, 92,
+121,207,172,226,189,120, 17,207,226, 37,126,199,121, 31,108, 99,229,125,229,124,208, 53,231,217,177,248, 23,198, 78, 62,135,199,
+206,157, 59,159, 55,165,189,200,133,206,183,207,207,224,241,239,223,241,166,177,225,161,198, 97,127,234,220, 91,255,221,135, 47,
+122,107, 23,120,247,129, 63,255,243,127,253,182, 31,120,247,235, 94,217, 92,235,147,103,207,143, 13, 54, 93, 8, 55,189,245,187,
+ 63,243, 99,215,237,127,213,226,217,147,159,187,251,107,167,151, 86, 43,231,255,240,179,119,141,204,108, 95, 59,115,234,153, 49,
+251,218,189,151, 23,163,211, 91,119, 92,113,205,252,220, 37, 83,227, 67, 69,254,174,239,191, 94,215, 23, 47,202, 16, 83, 31,109,
+155,154,248,194,127,254,173,209,173,187,178, 98, 24,201, 76, 77,109,115,235,167, 89,196,121,190,108,110,230,192,194,220,215,142,
+158,124,178,171,140,143,143,227,158,185,217, 15,255,226,191,178,221,209, 98,120,162, 24, 26, 67,147,169, 56,223,223,112,253,213,
+114,109,241,129,251,191,252,200,153,165,211,203,171,171, 27,125,207,252,145, 47,222, 83, 86,238,130,183,102, 62,255,123, 31,178,
+157, 17,155,119,137, 44,128, 40,179, 48,107,136, 83,216,141, 14,117,165,234, 17, 33,139, 56,230,171,119,108,187,102,199,236, 61,
+199, 30, 59,159, 34,155, 15,141, 50,179, 10,131,178,175,156,170, 42,179,138, 99,239, 68, 4,209, 92,186,101,138, 16, 50, 99,140,
+161,165,213, 13, 4,184,253,240,193, 63,250,236, 87, 55, 11, 36,153,220,144, 69, 50, 0,168,194,236, 74,239,122,174,220,240,253,
+ 53,174,122,194, 14,128, 38,199,134,167,199,134,119,206, 76,206,140,143,116,139,204, 16,221,126,248, 32,209,192, 66, 17, 34, 42,
+ 34, 34, 2,168,170,130, 42, 4, 35,199, 21,187,158,184,158,136, 35,192,225, 78, 49, 50,212,153,155,158,152, 26, 29, 30,237,118,
+ 12,209,109, 55, 29,184,114,225,210, 1,155,141,170,170, 10,160,160,170, 42,162,170,194,233,233, 89, 85, 84, 9,177,176, 86, 10,
+217, 58, 62,138,136,134,104,105,125,227,229, 59,102,148,253, 3, 39, 30, 3, 0, 27, 66, 68, 21, 9,102, 15,210, 83, 85, 84, 88,
+ 69, 18,169,128, 8,134,168,200,179,241,225,110,248,225,179, 43,235,215,238,216,114,122,121, 21, 0, 72,153, 85, 88,162,205,103,
+ 21, 22,246, 42,193, 11,176, 4, 19,152, 30, 33,202,201,141, 25, 42,242,161,162, 24, 27,234,100,198,188,102,239, 14, 17,177, 34,
+ 78,197,131,120, 21, 22,241,194, 78,197,135,181, 23,169,194,157,166, 39, 40,168, 2, 0,130, 49,100,141,201,243,172,155,231,165,
+243,123,183, 77, 91, 97,175,236,133,157,120,167,236,148,157,248, 74,188, 83,174,212, 59, 81, 21, 17, 81, 16, 81,137,156, 84, 80,
+ 0, 5, 34, 48,136,214, 80,102,140, 81,178,234, 43, 97,207, 62,196, 89, 21,251, 74,184, 18, 46,217,149, 44,193,188,107,112, 28,
+ 34,225, 86, 85, 90,119,138, 8, 68, 72,136,150,189, 99,239,132, 43,102,167,174, 20, 95,138, 47,217,245, 89, 60,199,111, 50,139,
+178,138,168,134,171,132,117, 12,175, 26, 34, 8, 0, 43,174, 47,222,137, 56,113,129,156, 62,187, 30,251,138, 69,131,183, 9,212,
+ 48,107, 60,144,244, 86, 32, 44,188, 2, 90,239,251,236,157,122,199, 92,137, 47,185,234,121, 95,177,136, 99,241,202,204,226, 69,
+ 19,105,245, 83, 89, 85, 68, 89, 34,141, 0,106,185,236, 49, 59,241,149,114,197,174,244,236, 35,107, 88,194, 85, 68,194,181,152,
+ 85, 61,107,112,223,137, 88,102,141,164,193, 75,202,175,237,216,177,131,224,165,244, 64,196,151, 22, 65,207, 67,180, 62, 61,127,
+249, 29,159, 60,123,203,207,253,230, 11, 24,245,159,255,248,210,135, 62,120,250,209, 7,191,116,255,183, 22,215, 54, 42,207,255,
+251,206,111, 62,182,184, 18, 62, 58,123,236, 91,191,250, 67,211,239,250,221, 47,220,241,201,179,128, 8, 0,223,254,155, 79,124,
+226,215,126,166, 92, 91,126,161, 8,250,129, 3,151,151,139,143,204,239,187,110,246,146,125,127,251,229,207, 61,190,184,242,182,
+ 87, 94, 93, 49, 51,203,201,197,181,191,188,251, 1, 0,248,253,247,220, 84,215, 31, 62,253,219, 63,255,172,169,185, 64, 58,115,
+254,227,147,255,246,159, 77,206,238,182, 89,129, 38,163,188,123,228, 27,159, 63,114,234,244,202, 70,127,117,163,223,171,156,103,
+102,209, 39,214,250, 31,255,202,189,207, 75,240, 24,203, 35, 79,118,198,103,126,253, 23,167,182,239, 45, 70,167,243,238,168,201,
+ 58, 0, 48, 57,115,233,165,219,182, 83,181, 98,141, 41, 50,107, 13,129, 66, 55, 55, 47, 91,152, 59,176,176,125,108,120,232,216,
+ 19,139,207,154,160,241,241,241,129, 37,123,253,193,171,127,246,237,111,154,156,216,146, 15,143,231, 67, 19, 89, 49, 68, 54,195,
+224,122,153, 85,188,120,199, 84,117,136,174,216,127,227,206,197, 71,143, 30,127,232,220,234,198, 90,191,191,209,175,214,250, 85,
+191,114,251,182, 77,237,153,157, 84,128, 71, 22,215,255,234,238,111, 62, 27, 25, 18,145,175,254,193,135, 0, 17,208,144, 49,104,
+172,161, 12,109, 70,198,134, 74, 79, 16, 85, 0,128,232, 40, 16,144,136,108,119,108,118,223,190,145,245,197,147, 39,207,156, 89,
+237,245,215,122,213, 90,175,191, 94, 86,189,178,170, 60,239,156, 26,121,215,205,215, 43,232, 87, 30, 58,117,223,177,147,207, 76,
+168,139,177,105, 21, 13, 63,136,170,138,168,226, 69, 69, 33,185, 42,133,232,109, 36,133, 4, 42, 0,128,100,186,163, 51,243,121,
+103, 99,125,249,204,202,218,122,191,187, 81,150,107,189,114,173, 95,246, 74, 87, 58,231, 69, 95,177,231,146, 27,118,207,177,240,
+103,238, 59,246,200,153,115, 79,139,160, 44,239, 42,139,132, 16, 6, 20,133, 85, 85,196, 67,140,110, 84, 36, 4,132, 42,202, 32,
+ 82,147, 21, 41, 67,211,233,116,103,137, 54,202,106,173,215, 31,237,118,123,149, 91,235,245, 87,123,253, 94,233,250,206, 57,207,
+ 68,248,131,251,119, 11, 47, 56,209,143,124,225,238,139, 16, 68,100, 4,128, 4, 68, 17,149, 21, 9,148, 81, 65, 84, 33, 36,176,
+194, 34, 30, 84, 98,184, 34, 62,228,208,194, 94,197, 9, 87,202, 12, 8, 69,102,137,186,121,230, 58,185, 29, 46,178,241,225,238,
+106,175,191,214, 43,123, 85, 85, 86,190,116,222, 3, 18,233,237,135, 15, 58,207,159,190,239,232,233,197,229,167,178, 67, 10,128,
+ 16, 34, 80,141,111,196, 35, 85, 21, 76,124, 10,175,202, 78,216, 43, 59,241,165,176,171,227, 37, 4,200,173, 69, 4, 66, 52,214,
+228,214, 14,119,138,245, 94,185, 94, 86,125, 87, 85, 21,247,157, 43, 29, 83, 70,175,223,191,187,114,124,228,137,149,187,190,125,
+116, 51, 65, 33,122, 5, 17, 5, 5, 16, 80,137, 33, 30,196, 56, 52, 44, 86, 19,244,133,248, 72, 66, 88,212, 4, 51, 77,188, 5,
+104, 13, 1, 0, 90, 69,204, 66,208,218, 43,109, 47,243, 69,101, 43,207,165,243, 27,101,137, 25,238,219, 58,190, 99,226,202,187,
+ 30,126,236,196,153,197, 54, 65,241,199, 64,235, 98,128,168, 48,212,252, 16, 6,145, 16,228,130,112, 56, 80, 77, 5,143, 68,166,
+170, 42,130,106,237,185, 17, 17, 9,193, 18,169, 53, 8,133, 49, 38, 51, 84, 57,206,172,201, 44,245, 74,167,160, 67, 88,220,176,
+123,251,229,115, 83,159,255,230,177, 80, 48, 0,101, 14, 34, 12, 73,143, 66,121, 48,253,188,151, 80,111,209, 40, 64, 49,234, 14,
+225,183,138, 40, 72,124,141,153, 66,136,125, 35,187, 32, 36, 37, 64, 8,153, 33,200, 44, 32, 2, 6,122,137, 16, 55,170, 42,215,
+108, 68,225,230,171,118,173,155, 78, 32,200, 69, 30,132, 24, 90, 25, 36, 44, 10,171,120,169, 67,127,102, 17,151,194,240, 42, 70,
+242, 18,126, 59,174, 51, 11, 72,204, 94,162, 88, 53, 97, 51, 98, 32, 35, 4,227, 44, 98, 13,102,214, 20,154,105,186, 25, 71,198,
+ 2, 64,248, 61,145, 32, 61, 41,126, 22, 86,150,200,143,112, 66,208, 47,246,202,149,176,139, 57, 79,124, 13, 95,144,200,158,250,
+153, 36, 64, 91,111,214, 4, 18, 32, 17, 26, 66, 99,200, 10,177, 33,131,100, 1, 64,124, 21, 66,121, 80, 85,101, 97, 6, 21,142,
+153, 81,204,108,148, 93, 84,120,239, 84,189,136,176,138, 10,164,100, 9, 88, 53,150,163, 0, 36,165, 21,225,206, 68,129,165,201,
+168, 18,173,218, 44,106, 35,117,177,206, 95,178, 68, 41,142,119, 37, 12,226, 67,194, 38,204, 42, 73,201,195, 10, 54,130,162,162,
+194,113,213,218,127, 70,237, 96, 17, 73, 41, 65,164, 50,100, 46,146,210,210,148,234, 38, 3,131, 22, 0,216,149, 34, 94,155,172,
+ 85, 84,147, 44, 7, 3, 24, 8,138, 43, 18, 50,181,102,117, 56, 81,195, 41,137, 11,233, 13,135,196, 41, 81,230, 89, 99,250, 35,
+ 42,172,137,110,173,179, 81, 81, 5, 84, 11,128, 92,245,162,122, 71, 27, 19,114,149, 64,147,211,120,145,182, 6,133,188, 89, 5,
+106,202,164,254,136,181,197,161, 84,170, 12, 36,250,118, 50,165,202,170,161, 64, 24,188,129,168, 42,168, 69,132, 79,221,115,159,
+138, 2, 72,210,138,152,160, 71,126, 66,253,218,252, 89,191,132,111,136,106,180,232,154, 28,113,252, 62, 4,238,197, 36, 90, 55,
+173, 32,176, 24, 22,100, 37, 70,203, 70, 60,218,151, 88,189, 49,228,102, 47, 29, 98, 14, 29, 58, 68,136,248,247, 42, 47,251, 30,
+ 65,223, 93, 4,189,241,142,223, 25,223, 54,255,252, 23,246,159,203,215,127,238, 19,143,223,241,169,115,157,145,137,231, 77,203,
+ 46,158,219, 2,252,201, 29,239,126,255,155, 15,223,120,245,222,243, 63,253,181, 91,102, 1,224, 95,124,236,161,247,125,236,225,
+ 75,175,121,245,119, 98,201,182, 77, 77, 92,247,234, 91, 22,182,140, 95,191,123,251,123, 94,255,170,155,175,221,183,233,132,223,
+120,211, 28, 0, 20, 35,227, 63,241,235,127,113,199,167,206, 45, 28, 60,252, 92, 8, 50,227,227,227,203,203, 79, 85, 27,248,229,
+127,252,198,157, 59,118,143, 22,102,105,101,177,172,252, 88, 55, 63,176,107, 46,207,139, 71,207,198,198,160,176, 63,122,215,103,
+246,191,225, 39, 67, 74,105,178,226, 91, 95,248,243,103, 71,205,252,252,252,197, 9,122,223,155, 94,155,219,108,250,210, 43,253,
+242,163, 27,101, 37,162, 94,100,203,104,247,218,249,237, 15, 61,190, 88,121, 15, 0,171, 79, 60,154,117,134, 46,185,234, 21, 75,
+143, 29,251,240,191,188,229, 89,179,103,126,126,254, 34, 75, 54, 58,212, 45,242, 66,216,151,235,231, 46,123,217,225,185,233,137,
+137,209,161,177,110, 55,179, 38,179,230,214, 87, 95,115,248,154, 40, 88,159,253,189, 95, 90, 58,117,244, 67,239, 56,248,194,202,
+208,117,123, 46,237, 12, 79,100,157, 17,241, 37,128, 94,125,213,117, 91,198, 71,198,135, 59,227, 67,221, 78,102, 13,209,238,217,
+201,119,220,124, 93,145,103, 0,240,161,119, 94,247,220,133,250, 34, 75,246, 31,126,234, 45,211, 91,231,179,238,152,201, 58, 42,
+146,229, 67,163, 5,173,174,175, 40, 40, 33, 73, 10, 60,174,217,177,117,199,214,153,191,123,244,244,115,164,230, 34, 50,116,245,
+194,165,239,120,243,143, 22,195,147,182,232, 26,155, 35, 89, 0,205,187,163, 93,168, 54,250, 61, 5, 32, 66, 80, 16, 21, 64,236,
+102,102,255,194,220,177, 51,203,253, 11,181,159,158, 62, 65, 23, 40,233, 13, 21,249,117,151,239,249,229,127,242, 83, 19,211,151,
+218,162, 64, 32, 34, 84, 85, 36, 6, 4, 5,157,154,219,183,203,149,199, 30, 59, 77,136,132,104,136,214,203,210, 3,160,232, 91,
+110,184,242,232,185,213,207,126,253, 91,207, 79,209,243, 55,223,123,251,254,189,251,186,163, 83, 89,119,172, 24, 26, 55,121, 97,
+208, 40,136,170, 40,179, 0, 16, 89, 69, 54,182,152,153,187,140,197,227,153, 69, 10, 68, 17,246,250,101,201, 2,204, 11, 83, 35,
+183,191,246,186,143,124,241,235,206,251,103, 67,144,103,121,239, 91,222,112,219,235, 14,155,188, 75, 38, 55, 89, 97,243,142,201,
+187,100, 45, 34, 1, 33,128, 69,101, 80, 5, 33, 64, 68, 34, 32, 34, 91, 76,207,238, 18, 17, 12, 76, 66, 52,136, 88, 86, 21,128,
+ 23, 65,212,219, 14,189,236, 91, 39,207,253,237, 3, 15, 63, 99,161,254,192, 79,223,126,235,205,135,109, 62,108,242,174,205, 58,
+ 38, 43,208,228,100, 44, 2,214,181, 42, 72,205, 48, 80, 9, 9, 36,168, 0, 64,158,101,192, 37,171,214, 89,105,138,187, 1, 20,
+167, 71, 59,251, 23,230,238, 59,113, 90, 82,186,255,180,100,136,108,110,139, 33, 0, 4,164,144,111, 67, 40,229, 9,160, 10, 74,
+ 11,197,197,172, 34, 16,250,125,160,136,104,178,206,212,196,180,170, 18,128, 33, 36, 66, 66, 48,132,253,202, 59, 96, 86, 52, 10,
+183,221,116,224, 75, 71, 78, 62,112,226,212,211, 93, 50, 50, 25,217, 78, 44, 32, 42, 32, 40,128, 42, 51,160, 72,200, 41, 99, 59,
+ 48,100,109, 34,236,235, 20, 15, 0, 77, 86, 76,140,142, 40, 0, 34, 25, 34, 67, 68,225,190, 42,168, 60, 48, 9, 10,190,114,207,
+220,158,173, 19, 31,191,235,155, 79,143, 32, 50,198,102,161, 8, 4, 80,103, 52,162, 45,238, 55, 89, 81,200,254, 82, 18, 7,170,
+138, 68, 54, 31,235, 22,170, 26,150,205, 24, 36, 12, 84,185,202, 51,131,168,194,204,232,208,109, 55, 29,248,216,151,239,239,149,
+213, 69, 8, 66, 34, 34,163, 64,161,250,161,164,164, 34, 26,179, 44, 85,142,237, 83, 17, 17, 78, 7,177, 9, 26, 42,107, 8,100,
+140, 25, 46,114, 85, 13, 50, 30, 95, 16, 13,249,126,229, 60, 51, 17, 90, 52,111,123,229,213, 95,248,246,163,199, 78,157,126,106,
+181, 71, 64, 2, 21, 64, 2, 85, 66, 80,197,192, 22, 4, 81, 21, 8,201, 93,200, 54,153, 65, 88, 52,148,102, 66,205,132, 85, 69,
+ 1, 12, 81, 39,207, 68, 21, 66, 61,143, 48, 20,246, 16,161, 95,161,243, 76, 8, 64,116,211,190, 75,246,110,155,249,244,221,247,
+ 63,185, 47,139,250,129,161,254, 16, 58,212,177,234, 24,215,176,110, 48,135, 18, 91,232,128,199,254, 62,136,135, 96, 20, 16, 12,
+ 81,110,109, 97,109,145,219,161, 34,159, 24,238, 14,119,138,110,145, 15, 21,121,145,153, 64,156, 53,180,125,180,120,243,171,247,
+ 63,133,115, 85, 8,109,119,128,230, 25, 84, 9,131, 60, 65,170, 80,164, 66, 79, 40, 23, 71,202,124, 44, 84,168, 2,128, 33,204,
+ 66,175,217,154, 78,158,141, 15,119,134,139,162,147,219,110,145,119, 66, 31, 2,192, 16,141,101,230,214,215,236,127,114,111, 31,
+126,114, 48, 97,212,196,161,244, 47,200,184,164,228,159, 85, 20,148, 67, 1,180,174,244, 0, 0, 17,217,134,166,124,164, 91, 12,
+ 21,121, 39,203, 58, 69,222,201, 50,107, 12, 32, 18, 81, 70,248, 35,175,184,234, 66, 4,213,235, 83, 23, 84,131,213,139, 69, 27,
+ 85, 84, 76, 53, 28,141, 26, 23,126, 95, 52,125, 15, 0, 20, 49,149, 96, 33,250, 56, 99,172,161, 34,179, 97,225, 58,153,237, 20,
+121,183,200,114, 67, 0,106,173,233,100,246, 31, 92,127,229, 5, 56,132,218,148,117, 49,150, 48,106, 3, 8, 88, 87, 65, 34, 4,
+ 64, 1, 20, 21,180,117,142,170,130,132,187, 64, 13,229, 58,162,128,234,178,100,114,107,187, 69, 86,228,182,176,166,147,101,157,
+ 60, 43,178, 76, 21,172, 49, 29,107,222,112,224,178,205, 50,164,170,168,128,162, 0, 18,126, 47,217,201,186,192, 34, 45, 25, 10,
+ 28,148, 26,155,161,173,206, 76,253, 63,166, 50,103,168, 34,102,214, 22, 54,203, 51,155, 89,211,201,179,194,218,142, 53, 8,144,
+103,182,147,219,239,191,102,119, 67, 80, 42,244,132, 31, 14,213,243,184,110,113,117, 98, 37, 41,214, 90, 33, 86,174, 2,123, 2,
+161, 65,201,146,177, 79, 56,143, 84, 56, 4, 34, 50,132,153, 53,185, 53,185,181,214, 80,167,176,121,102, 51, 99, 16,160,176,182,
+155,103, 55,236,221,209, 42,156,139, 52,186, 19,129, 1, 18,127, 50, 21,175, 98,141, 86, 21, 52, 52, 98,234,210,101, 52,231,146,
+234,171,155, 89, 6, 0,160,132, 72, 68,134,200, 26,101, 49,170, 80,100, 89, 93, 74, 43,172,153, 28, 46,118,205, 78, 5,161, 78,
+197,218, 96, 6, 65, 84, 56,150,228, 85, 68, 20,161,109,138, 88,146, 9, 0,101, 85,129, 36,234,181,216,183,244,161, 41,176, 2,
+ 0,130, 18, 33, 17, 26, 67,245, 58,102,153, 13,180,102,198,204,207,140, 69, 45, 11, 77,133, 88,103,147,228, 40, 66,119,161,230,
+ 7, 8,136,128, 50, 36,240, 71,170, 59, 38,180, 75,162, 40, 22, 6,163,129,213, 1,148, 0,196,224, 41, 82, 70,100,137,172, 49,
+198,144, 53,148,147, 85, 0, 27,251, 2, 53,234, 39,149, 62,211,129,196,130,100, 42,170,198, 26,109,160,181,105,185, 68, 14, 53,
+118,160, 6,211, 12, 6, 67, 33,112, 34, 64,130, 16,171, 80, 8,130,173, 49,198,112,224, 80,114,230, 3,109,151,200, 33, 77, 61,
+ 6,168, 91, 31,161, 86,220,212,193,227, 2, 73,124,213,218, 60, 52,210, 84,115,178, 49,180, 65, 9, 9, 17,130, 79, 33,138, 13,
+ 36, 27, 76, 72,236, 56, 5, 34, 84, 84, 67, 47, 38,112,194,167,242, 57,215,181,253, 32, 76, 81,238, 84, 3, 70,166,221,220, 72,
+ 13,144, 16, 56, 68, 35, 6,181, 57,133, 16,120, 69,219, 64,105, 53, 19, 92, 75,124,210,112, 78, 77, 76, 81,142,112,161, 72, 74,
+116,248,109,106, 6, 30, 18, 73,169,123,103,129, 86,128,218,180, 71, 14, 97,160, 47,152,121,108,140, 86,248, 7, 54,208, 17, 20,
+ 93,153, 67,163, 66, 57,182,195,132,155,190, 88,130,131, 57, 17,142,191, 23,144,232,173,198, 69, 98, 82, 34, 47, 26, 46, 24,160,
+189, 17, 51,168, 59, 88,233, 37, 44, 89,146, 27, 8, 87,102, 31,242,158, 36, 46, 9,162,166,177,105, 20,106,236,161,207, 18,241,
+101,181,109,141,138, 6,233, 83,221, 36,106, 45, 58, 20, 90, 14,161,182, 92, 86, 85, 98, 35,161,150,161, 22, 78, 47, 50, 41,244,
+ 24,184,238,188, 72,224, 64,221, 78, 24, 92,187,218,247, 54,212,200, 96, 4,147,208,108,218, 16,147,200,179,161,215, 28,237, 97,
+144,232,212, 5, 7, 21, 73, 93, 41,229,176, 82, 81,128, 7,251, 95,160,109,219,170,173, 14, 69, 3,168,139,212, 67,171,125,150,
+ 16,139,208, 54,237, 54,234, 84, 92, 35, 81,136, 82, 12,202,161,121,168,226,106, 61,111,186,113,210,178, 63,209,221, 36,106, 0,
+ 3, 35,147, 83,132,205,178, 95,103, 49,186, 73,190, 2, 65,177,123, 26,205,157,138,168,250,212, 11,247, 17,142, 40,172, 9,164,
+ 87, 31,164,227,216,104,225,122,237, 68,107, 73,111,119,236,218, 43, 42, 77,250,217,102,149, 38, 25,242, 46,217,235,160, 95, 97,
+201, 92,221, 53,107, 4,165,213, 24,108,173, 29,180,126, 58,182, 96,155, 94,103,125, 90, 10, 24,154, 11, 52, 81, 31, 52, 28, 2,
+ 17, 85,151, 90,190,131,173, 59,241, 50,176,228,161,245, 12, 44,237,251,134,214, 57, 65,185, 80, 6,160,157,205, 71,210, 58,185,
+181,112, 3,107,102, 31,124,252,140, 10, 43, 72,242, 33,245, 57, 2,122,129, 78, 89, 18, 89,208,193,150, 89, 91,158,234,119,218,
+242,219,234,240, 73,232, 37,138, 16,139,245, 74,130,134, 77,230,129, 35,194,106,113,113,113,105,105,233,165,214, 22,122,113, 31,
+170, 58, 49, 49, 49, 57, 57,105, 1, 96,121,121,249,196,137, 19,223, 99,202,249, 32,207,201,201, 73,250, 30, 35,190,203,186,119,
+223, 99,208,247, 24,244,244, 30, 35, 83,179, 1,184,244, 18,127,188,104, 36,174,157,123,188, 59, 62,125,219, 7,255,143,205,138,
+135,238,252,244,255,251,232, 7, 87, 30, 63,241,247,153, 65,134,104,118,114, 44,183,118,189,172,150,214, 54,158, 78,203,165,183,
+124,246,191,252,212, 43,246,190,250,135,223,250,111,254,228,192, 27,223, 25,222,188,243, 99,191,115,223, 95,253,233,227, 71,190,
+ 1, 79,187, 19,241,194,250,178, 67,135, 14, 29, 61,122,244,248,241,227,207,229, 42, 69,150,253,197,127,252,181, 49, 43,247,220,
+243, 55,143,156, 89, 94,235,245, 43,207, 94,228,161,211,203,159,187,247,219, 23,109,229, 33,210,155, 63,240, 95, 47,191,233,205,
+ 49, 73, 84, 13, 7,167, 30,184,235, 47, 63,248,190, 39, 30,190,255, 69, 97,205,206,157, 59, 23, 22, 22,158, 31, 6,253,248,107,
+175,127,255,173,111,153,220,249,178,213, 51,199,255,238,254,191, 61,121,118,121,113,109, 99,189, 95, 57,239,189,136, 42, 84,158,
+ 31, 91, 94,251,242,183, 79, 44,174,174, 63,217, 69,134, 39,183,220,254, 91,159, 25,157,153,107,135,107,129, 83, 42,252,177, 95,
+250,201, 35, 95,250,228,119,158, 65,102,126,126,126,105,105,233,169, 17, 4, 79,253,152, 30, 27,249,133, 31,123, 93, 70,136,160,
+ 67,227,219,102,182,238,200,120, 13,148, 13, 34, 17, 17, 66, 24,114, 31, 31, 42,174,152,219,242,242,221,115,123,183,111,233, 85,
+110,105,189,183,233, 58,174,191,113,231,159,253,118,185,190,178,235,250, 31,168, 89, 3,136,199,191,254,215, 31,122,199,193,197,
+ 71,143,124,135, 37,104,124,124,124, 98, 98,226,121, 96,208,207,223,250,131,123,182, 77,231,121, 7, 0, 84,188,205,187, 83,219,
+247,140,229,164,126, 29, 0,195,108,157, 33, 76,209, 41,230,214, 44,108,157,124,217,174,185,107,119,110, 91, 43,221,242,122,175,
+109,108, 78,126,243,206, 47,254,241,175,204, 93,121,195,228, 37,187,153,221,199,126,225, 31,125,225, 15,126,249, 69, 81,177,192,
+160,231,106,164, 23,102,167, 47,191,100, 75,222, 25,177,157, 81, 50, 57,251, 10,122, 75,134,135, 39,102,247, 92, 53, 54,115,242,
+232,189,167,206,156, 93,222,232,247,171,170,244,190,172,194,180,118, 68,238, 18,226,107,175, 90, 56,116,229,124,207,249,111, 28,
+ 63,125,255,241,166, 23,251, 63, 62,240,246,209,153,185,213, 51, 39, 95,116, 35,253,156, 36, 8, 17,111,125,205,129,215, 92,181,
+175, 51, 50,147,117, 70,109,103,200,216, 2,201,134, 82,128,201, 58, 99, 83,219,199,135,187, 86,251, 1,138, 97,141,201,172, 13,
+ 67,183, 88,215,133, 1, 51,107, 46,153, 26, 61,176,176,253,138, 29,219,156,232,217,149,117, 0,168, 54, 86, 95, 92,214, 60, 15,
+ 42,118,235,247,189,252, 61,111,126, 93, 62,178, 37,239, 78,216, 98,200,100, 29,147, 21,148, 21,198,100, 72, 70, 65, 17, 32,239,
+142,142, 79,108, 29,201,128,148,195,160,109,104,232,101,214, 24, 34,131, 4,161,125,137,136,136,150,112,199,244,248,129,133,237,
+215,204,111, 95,238, 87,171,189,254,139,232,235,159,189,138,229,121,254,227,223,127,227, 59,111,249,225,169,137, 73, 52,153, 33,
+139,241,102, 41,180, 87, 66, 37, 8, 67, 11, 64, 56,203,113,106,110,223,240,196,236,242,153,227,167,207, 45,174,246,250,253,202,
+ 85,206, 23,153,175, 88,156,243,149, 79,251,200,164, 50, 88,102,240,230,171,118, 41,236, 42, 61,223,249,240,169, 7, 31,121,236,
+ 37, 26, 40,110,157, 24,187,110,223,194,238,185,217,253,187, 23,174, 88,152, 31,234,142,216,206,136, 41,134,108,222, 37, 99, 3,
+ 6, 6, 99,133, 89,155, 62, 70, 40,152, 33, 41, 50, 33, 10, 34, 49, 20, 67,227,211,219, 47, 27, 25, 59,183,116,238,212,185,149,
+213,181,126, 85, 86,174,242,190,202,172,243,222,249,172, 12, 59, 73, 48, 51, 99,172,247,169,118, 51,115,227,190, 75,111,220,119,
+233,122,197,119, 63,252,232,131, 39, 79,127,231, 25,212, 8,241,232, 80,119,126,118,230, 71,111,188,254,240,254,171,135,134,134,
+208,228,136,198,100, 5,145, 37,155,135,167,177, 25, 25,139, 20, 32, 25,148,188,113,171, 4, 46,130,200,194,169,227,174,138,164,
+ 0, 22, 21, 76, 6,197,200,204, 76, 49, 60, 50,122,102,121,233,236,242,250,198, 70,233, 74,231,194,158, 54,133,183, 97,251,155,
+202,123,199,204, 28,219, 62,161, 84, 56, 82,152, 27,175,216,121,227,229, 59,215,157,255,220,189, 71,158, 88, 94,211,239,136,250,
+ 89, 81,248,201,215,189,246,245,215, 94,217, 29, 26, 38, 50,136, 9, 52,133, 81,107, 2,232, 6,201,164, 3, 2, 68, 0, 9,173,
+105,136,248,135,129, 94, 97,236,100,214, 3,131, 74, 0, 18, 58,116,100, 12, 64,167, 51,186,197, 22,195, 35,107,231, 86,214, 86,
+194,236,103,218,247, 39,168,155,141, 59,157, 4,129,210,212,211, 82, 85,132,225,204,190,241,224,101, 34,184,230,220,167,191,254,
+224,210,218,250, 11, 44, 65,170,227,227,211,147, 51,115,169, 63,139, 72,209,104, 2, 80, 48, 43, 1,251, 3,128,161,107, 14, 1,
+132,131, 20,206,110, 23, 42, 83,139,163,105,225,135,254, 52, 0, 0,214,163,248, 64,104,173,237,224,200,116,150, 15, 13,119,150,
+ 87, 55, 54,214,251, 85,233, 92, 45, 65, 97,227,150,202,115,229,216, 51, 59,207,126, 96, 12, 31,137,116, 52,183,111,185,225, 74,
+ 5,125, 98,165,247, 55,223, 58,186,180,182,241, 66,217, 32,178,153, 45,186,173, 62,127,148, 2,172, 39,134, 98,208, 47, 32, 40,
+168, 77,103,173,221,101,131, 6,122, 21,186,252,113, 50,173, 6,207, 72,221, 40, 79, 46,158,172,201, 58,157, 33,204,178,124,184,
+179,177,222,175, 54,202,170,116,222,179,117,158, 75,199,206,251, 50,227, 36, 86, 97, 15, 28, 78,173,239,128, 44, 1, 80,216, 58,
+ 54,244, 35, 55, 92, 41,162, 71, 78, 47,125,245,200,137,231,130,226,124, 18, 6, 25,107,108,193, 42,117, 63, 47,128, 90,106, 96,
+ 11,168, 6,173, 18, 12, 51,148,218,150,153,150, 94, 53, 77,135,216,249,175,155,139,145, 71, 13,250,161,169, 72, 25,163, 90, 20,
+136,134, 76, 39,207, 54, 74,215,175,170,202,113,158,177, 99,219,241, 92, 57,174,156,175, 77,184,247, 28,182, 13, 10,173, 54,150,
+ 48,216, 9,134,112,223,236,228,222,217,137,202,241, 61, 39, 6,194,206,231,202, 32, 68, 34,155, 65,108,221, 70, 49,160,180, 27,
+ 73,224, 21, 32, 40, 8,134,110, 50, 40,198, 62,160, 34, 66,221,214,106,183,150,218,179, 76, 0, 65,124,106, 68, 95,187,243, 30,
+182,173, 64, 68,178, 54, 11, 88,158,194,154,210,185,210,121,199,226, 44,119, 50,169,124,220, 51,169,244,222, 57,118, 97, 23, 38,
+207, 94, 24, 17,155,171, 40,168, 98,145,227,245,187,183, 31, 92,216,182,212,171,238, 60,242,232, 99,231,150,158, 59,131, 16,137,
+ 2, 80,146, 0, 20, 4,195,125,163, 82, 61,161,170, 10, 74, 10, 2,160,152, 76, 38, 70, 36, 97, 51,240, 5,173,102, 84,187,177,
+213,192,176,164,198,213,112,195,172, 8,150, 66, 32, 50,160,121,102, 67,216, 93,121,118,236,157, 23,107, 77,193,198,101,153, 99,
+ 95, 58, 95, 86,190,242,236,172,247,108,146,222, 33,167,145,242,176,158,100,116,106,184,248,193,107,118, 9,192, 3,143, 47,125,
+253,193, 99,237,141, 11,159,105, 28,132, 41,232, 71, 5, 69,192,104, 42,194,150,130, 0,113,128,156, 34, 80, 41, 58,239,228,216,
+ 17, 84,133, 35,198, 81, 89,235,182,189, 52, 35,223, 53, 35, 82,211,149, 19,246, 40, 54,116, 65, 2, 60, 50, 0,195,212, 16,170,
+ 53,136,104, 8, 13,137,103,102, 67,214, 72, 46,166,200,178, 42,243,165, 15,123,222,121,207,236,188, 97,149,196, 41,101,145,192,
+ 38, 2, 36,163,170,112,213,236,196,229, 91,198,214,156,124,246,190,135, 87,215,214,158, 57,131, 16, 16, 80,234,144, 47,140, 17,
+215, 27, 7, 5,143,166, 26,118,231, 1, 0, 1, 12, 55,131, 80, 59, 95,168,251,168,208,112, 65, 48,182,119,185, 6,106, 69,172,
+172, 8,212,216,164,122,156,183, 65, 64, 40, 0, 18,134,189, 9, 77, 24, 99,102, 33, 34, 17, 17, 75, 98, 13,230,108, 59,153,143,
+ 91, 3,214, 91,159,137,225,120, 16,182,161,137,234, 27,176, 63,227, 68,111, 60,176,167, 20,253,202,145,147,143, 60,126,230, 89,
+ 68,210,105,249,106,200,107,148,174,184,127, 27, 34, 6, 4, 32,160,168,214,160,131, 6, 15, 80, 71,210, 45,232,210, 32,119,154,
+253,144, 26,172, 68,152, 11,143,211,225,241,103,177,193,244, 37,112,127, 88, 60, 9,225, 6,161, 33, 53, 68,214,218,220, 70, 30,
+ 85, 33, 89,177,196,172,181, 33, 15, 96,182,152,234,169, 34,162, 33,253,190,189,115,229,194,182,111,156, 56,125,228,212, 19, 23,
+ 45,236, 14,164, 26, 24,108, 93,194, 58, 97,130,253,212,228, 70,164,138, 0,212,104,169, 22,158,165,134,145, 0, 68,148, 12, 54,
+188,171,221,153, 70,241,105,176,216, 65,227,218, 60,110,163,193, 52,206,194, 19, 24, 32, 16, 65, 99, 80,132, 65, 16, 13, 49, 26,
+ 68, 99, 40,243,156,123, 19,182,192,243,196,150,136, 85,211, 30,125,234,153,189,136, 2, 16, 2,106, 8,223,240,224,252,236,213,
+151, 76, 31, 59,187,122,207,195,143, 62, 69, 80,110,107, 15, 13, 45, 84, 88, 91,112, 32, 56,120, 80,132,136,236, 68,108,112,185,
+ 3,207, 22,244, 45, 28,203, 0, 86, 66,161,129, 8,213,152,161, 6,242, 5,136, 42, 18,194, 81,109,144, 67, 24,192, 86,225,246,
+ 20, 81, 0,194, 86, 98,168,138, 72,200, 65,202, 40,192,249, 44,147,115,228,140, 48,179, 33,202, 36, 88,113, 10,251,180, 86,158,
+ 5, 52,104, 92,136,242,118,207,140, 93, 58, 49,124,244,220,218,125, 71, 31,125, 10, 9,170,189,187,164,200, 38, 80,154, 16, 90,
+160,160, 34,160, 13, 74,184,193, 34,214,184, 68,109, 97, 82, 19, 52,119, 0, 45,219, 48,171, 57, 51,200, 81, 75, 98,180,165,176,
+ 33, 28,132,182,190,161, 34,164,242,136,106,216,246, 68, 65, 12, 80,192,176, 7,200,168,241,236, 13, 25,102,207, 72,136,214,144,
+103, 49, 68,198, 24,239,185,242,172,170,134,144,130,238, 34,238,158, 25,221, 62,182,247,158,227,167, 79, 47,173, 60,137,138,105,
+216, 45, 3,106, 48, 45, 38,220, 72, 61,182,141, 13,168, 45,222,191, 36, 70,212,160, 93,109, 1,183,130, 42, 66, 27, 99,213,240,
+ 78, 90, 81, 82, 27, 17, 26,192,228, 56,176,155, 71, 99, 35,195,230,109,218,148,111, 65, 65,129,130, 52, 32, 66,144,172,112,200,
+ 1,148, 41,158,132, 89, 8,209, 24, 50,204,129,137, 33,125, 97, 84, 3,212,177,232, 16, 17,240,224,194,214,141,114,234, 43, 71,
+ 78,246,170,106,128, 65, 53,250, 70, 2, 52, 27, 84, 37, 72,181, 64, 90,202,232,235,181,133,165, 14,113,163,138,130,160, 38,102,
+165, 60, 35,150,132,226,236, 64,120,159,161, 5, 44,106, 28, 89,130,202, 2, 70, 9, 78, 40,198, 56,234, 19,205,227,160, 33,104,
+236,102,218, 88, 46,101,143,168, 68, 38, 70,115,128, 28, 49,153, 36, 72, 34, 20,148, 17,125,152,227,112,222,123, 20, 32, 52, 74,
+121, 22, 37,243,213,251, 46,121, 98,173,255,141, 99,167,194, 42,215, 42, 22,240,190, 42,160, 40,141, 99,138,137,133, 10, 4,244,
+123, 11, 99, 94, 79,243,107,130, 94,182,118, 6,104,237,222, 87, 3,153, 85, 65,227,102, 29,113,203,142, 40,142, 81, 91,235,109,
+244, 68, 18,147, 90, 74, 9,208, 88, 51, 29,200, 27, 49, 33, 66, 21,163, 69, 15,222,138, 80, 65,169,117, 86, 52,183,138, 96, 17,
+ 57,110,132,226,189,103, 81, 66, 21,178, 4, 96,128,114,156, 29,165,177, 43,118,174, 98, 23,195,110,209, 16, 49,106,130,245,246,
+ 5, 80, 35, 68,219, 73, 67, 13, 5,100,104, 5,202,173,251,151, 54,143, 6,249,213, 98, 95, 68, 54,135,188, 12, 20, 33,102,102,
+117,200,144, 28,105, 11,121, 13, 45,156, 94, 29, 89,192, 32,108,125, 64,172,162,162, 97,180,237,138, 4, 38,212, 21, 8, 90,187,
+100, 68,102,121, 4, 96, 85, 36, 69, 2,178, 10, 29, 80, 91, 20, 50,168, 98,162, 45,193,105,204,106, 26, 12, 80, 5, 72,254, 56,
+ 97,189,181, 45, 44, 17,197, 27,211,119,142,188,171,177,225, 49, 83,101, 80, 78,199,117,174, 87, 59, 54,136,147, 89,141,183,219,
+132, 15, 31,200,148, 55, 97, 64,181,150, 38, 12,153,126,212,187, 16,106,106, 12, 24, 48,132, 14, 68, 72, 66, 68, 96, 84,213,132,
+178, 30, 54,144, 14, 99,132, 72,146,155,111, 76, 3,194, 0,144, 24, 90,137, 21,180, 3,229,246, 16, 69, 0,186,139,192, 32, 44,
+ 29,234,116,180, 78,226,211, 86, 30, 90, 15,206, 68, 70,196,200, 51, 77,137,161,182,210,230,182,215,108,113,173, 29,150,104, 91,
+146, 90, 5, 96,104, 11, 25, 98,170,206, 32, 80,208, 67, 66, 2, 36, 37, 82, 37, 85,131,170,132, 22, 12, 0, 42, 72, 68,147, 67,
+218,194,172, 53,217,211, 64,139,161, 13,234,173, 13,144,164,215,100,110,195, 6, 40,205,104,135, 72, 51,229,144,152, 37, 3,239,
+ 52,170, 91,163,170, 5,106, 12,124, 27,127,169, 3,210, 4, 13,172, 57, 5, 17,208,150,178,198, 38,212,115, 18,208, 66, 98,107,
+189,177, 81,204,102, 4,227,172, 26, 33, 9, 1,106,152, 19,131, 24, 42, 37, 21,107,240,177,168, 42, 49,217, 75,140, 80, 21, 16,
+ 28,136, 95,194, 71,181,185,141,154,122, 0,245,192, 0, 0, 2,251, 73, 68, 65, 84, 5, 16,124, 86,154,106,104,164, 70, 65,106,
+163,211,108,224, 35,218,216, 23, 77,116,132, 76, 99, 0, 43, 15,144,120, 8,137, 5, 3, 27,192, 36,178, 34,103,164, 29,114, 13,
+236, 25, 3, 77, 20,219, 12, 76,164,153, 57, 4, 2, 32, 68,129,102, 92, 17, 90, 42,198, 17,171, 27, 36,157,107,179, 32,245,254,
+180,237, 0, 79,131, 1,106, 56,146,166, 44, 6,236, 78, 45, 47, 41, 29,131, 1,128,238, 32, 26,184,149,200, 73,226,194, 38, 21,
+ 27, 28, 31,104,237,255,163, 50,144, 17,214, 46,175,197,153, 90, 39,234,218,239,133, 26,161, 81, 19,235, 32,171,150, 32,137,192,
+246, 22,217, 18,135,200,210,178,166,173,127, 82,160,168,109,121, 73,158,123,147,102, 13, 84, 54, 0, 67, 65,168, 61, 30, 4, 97,
+158, 42, 69,220,225,134, 68, 54,107,123,237,182,100,147,224,180, 96,211, 82,103,128,105,216, 32, 70,107,205, 80, 11,198,203, 98,
+107,183, 90,104,219,252,243,222, 74, 18, 36,202, 94, 64, 99,241,176, 38, 48,213, 52, 82,249,189,237,179, 82,245, 11, 6,103,206,
+130, 66,105,152,190,229, 88,247, 8, 69,146, 24,240, 64, 93,140,148,148, 20,183, 66,161,118,112, 93,255, 25,203,152, 77, 28, 52,
+ 40, 77, 82,139, 56, 12,204, 26,180, 49,234,210,250,146, 8, 12, 0,210,117,160,112,188,137, 73,141,155, 15, 64,250, 68,136, 12,
+ 0,213,245, 60,220,187, 4,171,172,210,216,154,182,243,226,166, 14,208,214,142,129,131,122,234, 76,106,163, 42, 73, 69,164,205,
+136, 36, 26, 33,225,169,199, 23, 68, 55,113,109, 96,135, 55,105,205,207, 52, 3, 91,218, 6,230, 67, 43,205, 1,109,217,244,214,
+244, 98,154, 60, 12,163,232,173,219,105,124,121, 12,145, 55, 43,218,249, 82,195,233, 52,142, 99,202, 0,231,141, 10,212,142, 6,
+154, 65,169, 1, 61,130,129,113,137, 20, 88, 55,100, 13, 76,236,192,249, 3, 26,173, 73,141,129, 96,165, 53,240, 10,178,105, 36,
+170,101,242,181, 53,208, 9,181, 13,130, 48,205, 44,173,185,221, 84,105,199,104, 41, 90,227, 50,173,202, 97, 26,165, 23, 17, 65,
+168,119, 56,211, 52,130, 27, 92, 85,168,154,132,141, 11,176,214,185,116,130,138,132,184, 7, 68, 2,223, 32, 49,164,169,198,139,
+ 14, 88, 37, 25,152,152, 27, 16,156,214, 0, 77, 51, 5,217,244,124, 7, 69,104,224,139, 45,185,106, 13,152,130, 13,219,186, 11,
+187,129, 32, 16, 6, 38, 63, 6,203,239, 45, 6,213, 60, 2,229, 88,191,111, 12,123,187, 73, 22,228, 28,218,187,141, 55, 21,178,
+ 86,236, 9,237, 48,172, 30, 80,106, 2,107,105, 21,151,218,190, 44, 14,210, 52, 99,135,131, 31,165, 17,191, 40,113, 48, 48,130,
+ 36, 58,216,138,105,139,116,203,139, 57, 9,229,212,232,158, 90, 49,116,171, 24,168, 3, 41,232,192,160, 83,109, 59, 0, 46,176,
+ 69, 93,138,114, 96, 64,249, 47,156, 73,108,118, 79, 77, 87, 68,234, 90,193,192,144, 90,173, 29, 45,181,109, 20,173, 45, 54,155,
+ 38,181, 54,205,255, 36,115, 62,176,120, 54, 56, 24, 16, 7, 10, 77,107,172, 73,217, 67, 18,159,118, 57,213,122, 63, 78, 73,236,
+104, 68,180,101,224, 90, 26,212, 74,169, 66,181, 22, 54,111,251,215,200,116, 99,171, 90,150, 40,197,102, 3, 5,217, 77,243, 80,
+146,196, 73,146, 14, 15, 76,170, 53,179,108, 23, 26, 98,211,218, 79, 65,237,196,235,202, 33, 30, 58,116, 72,117,176, 38,251, 93,
+ 53, 22,133,207,215, 55, 46,244, 54,170,254,127,136, 44, 69, 54,247,214,151,234, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+ 0};
+
diff --git a/source/blender/editors/datafiles/twist.png.c b/source/blender/editors/datafiles/twist.png.c
new file mode 100644
index 00000000000..ee5f6a105ba
--- /dev/null
+++ b/source/blender/editors/datafiles/twist.png.c
@@ -0,0 +1,347 @@
+/* DataToC output of file <twist_png> */
+
+int datatoc_twist_png_size= 10889;
+char datatoc_twist_png[]= {
+137, 80, 78, 71, 13, 10, 26, 10, 0,
+ 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 96, 0, 0, 0, 96, 8, 2, 0, 0, 1, 26,253,208,249, 0, 0, 0, 4,103, 65, 77, 65,
+ 0, 0,177,143, 11,252, 97, 5, 0, 0, 0, 6, 98, 75, 71, 68, 0, 0, 0, 0, 0, 0,249, 67,187,127, 0, 0, 0, 9,112, 72,
+ 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 0, 7,116, 73, 77, 69, 7,218, 7, 20, 5, 32, 44,179,189,
+ 3,155, 0, 0, 32, 0, 73, 68, 65, 84,120,218,237,125,121,180,165, 87, 85,231,222,251,156,239,187,111,172,247,106, 78, 42,149,
+ 87,153, 67, 37,129, 4, 8, 24, 66,165, 80, 32,129, 24, 20,193,197,160, 66, 3, 45,189, 80,108, 17,167,232,106,249,195,181,218,
+ 70,141,141,141,237,128, 40, 14,140,203,169, 69, 68,198, 32, 67, 24,132, 5,100, 36,132,140, 85,169, 34, 53,215,155,238,244,125,
+231,236,161,255, 56,231,251,238,125,149, 74, 72, 65, 80,232,213, 55, 85,245,238,244,190,123,238, 62,123,252,237,223, 62,193,221,
+187,119,195,183,186,121, 0,184,233,166,155,218,199,215,127,236, 56, 32, 2,192, 13,215,108, 24,189,107,252, 74,215,127,124,241,
+228,151, 74,111,122,222, 83,118,110,223,188,190,125,242, 93,111,252,201,183,191,254,165, 91,214,175, 75, 15,113,215,174, 93,127,
+240, 95, 94, 37,117,191,119,108, 79,111,208, 95,238, 87, 29,239, 88,100, 24,184, 95,133, 55,189,247, 67,221, 97, 77, 0, 80, 78,
+204,148, 83,243,179, 91,206, 23,209,167,237,126,241,161,165,174,136,153, 41,162,189,233, 37,207, 5, 0, 2, 0, 36, 50,101, 87,
+ 20,151,236,122,201,234,225, 7,186,131,225,173,251,151, 68, 13,129,136, 40,127,187,186,183, 24,135,221,114,106, 93, 28,246, 14,
+236,187,235,200,106,119,121, 40,123, 22, 7, 95,255,198,109,155,214,205,228, 55,113,221, 23,174,235,222,162,137,172,244, 6,203,
+189,225,209,229, 85,166,169, 39,236,188, 56, 46, 31,205, 31,167, 28, 52, 12, 66,255,120,247,200, 61, 71, 87,251, 83,101, 49,209,
+ 41, 99,181,242,181,175,221, 97, 96, 79, 63,247, 12, 15,128,113,184, 82, 87,221, 97, 29,122,195,122,178,240,115,211,147,206,209,
+198,217,233,153,201, 78,136, 92, 56, 34, 64, 24, 14, 86,251, 85,232, 87,161, 10, 17, 9, 39, 59,229, 68, 89, 76,117,202, 77,235,
+102,147,244,241,177,236, 29,142, 63,120,221,187,111,157,219,186, 32,177, 54,131,223,127,193,233, 39,121,251,171,223,246, 25, 87,
+116, 30,241, 74,151,159,191,224,157,255,226, 55, 30, 72, 79, 61,253,130,179, 94,247,188, 43,234,200,175,255,211,127,200,111,186,
+249, 93,127,161, 92,215,189,227,221,197,135,186,195,154,133, 17, 41, 48,247,171, 48,172,195, 47,253,229, 7, 0,128,202,201,217,
+114,114,174, 51,179,105,114,122,253,101,207,122,249,114,191,122,224,232,138,136,130,153,170,190,249, 21,215, 2, 0,145, 47, 76,
+217, 57,183,241,172, 75, 1, 96,165, 63, 24, 12,235,187,143, 13, 13,192, 59,247,153,111,236, 3, 0,207,195,110,221, 95, 52, 21,
+ 87, 78,134,222,210,234,160, 58,188,220,173,112,106,190,152,249,226, 93, 15,124,236, 43, 95, 7, 0, 10,195, 85, 13, 21,215,253,
+225,242,161,254,226,190,238,176, 90,234,246,143, 28,222,255,169,187,143,171,217, 51, 47, 92, 0, 0,175,177, 18,174, 56, 12, 98,
+181,178,218, 93, 45,156,155,158, 40,251,117, 56,122,104, 79,167, 44,166, 59, 37, 0,248, 88,247,194,112,169,174, 67,175,170,187,
+131,106,253,204,180,153, 77,150,229,150,185,217,135,142, 47,155,217, 83,206, 58,205, 87,221,163, 85,136,195, 16, 7,117,136, 34,
+147,157,162,172, 61, 34,122,231,102, 38, 58,221, 65,117,162,181,124, 39, 55,122,164, 23,174,255,248,226,245, 31, 59,254,157, 94,
+232,103,223,123, 7, 0,220,240,188,141, 15,127,233,202, 39, 62,129, 8, 79,162, 39,187,118,237,250,131,215,190, 82,133,149,171,
+ 88,245,194, 96, 41,132,170, 14, 49,176, 84, 33, 62,120,100,233,112,119,248,204, 39, 44,152,154,168,138, 72, 96,101, 85,102,185,
+225,253,159,220,127,108,185,189,144, 91, 88, 88,248,145,103, 92, 73,190,116,197, 68,209,153,246,229, 52,152,152, 4, 0,115,228,
+ 46,126,202,179, 58, 97,177, 63, 12, 19,133, 51, 0, 3, 80, 51, 51,101,181,167,157,127,230,115,159,116,254,141,183,221, 51,242,
+ 95, 69,103,202, 84, 36, 6, 53, 43, 38,102, 59,179,155,182, 78,173, 67, 68,242,197,112,229,232,202, 96, 24, 89,142,118,135,203,
+149,238, 60,109, 86,212,212,128, 16, 16,192, 16,222,252,138,107, 1,240,191,189,231,195, 30, 0, 76,133,195,128,195, 80, 57, 40,
+135, 98, 98, 86,124,233, 59,147, 26,227,225,251,190,180,216,237, 71,150, 42, 90,173,238,115,247,199, 43,206, 90,151, 44,167, 91,
+203,111,190,239, 67,107, 60,106,221, 91,148, 56, 84, 14, 34, 76,136, 18,171,186,191, 40,113, 82, 99,181, 58,232,247, 6,245,234,
+ 96,216,171, 66, 96, 22, 55,245,145, 59,135,195, 24,143, 31,122,112, 97,243,250,171,159,116,222,151,238, 63,176,218, 31,228, 11,
+ 73, 72, 87, 9, 38, 49, 42,199,186, 79,228,156,239,212,189,227,251,143, 44,177,170,154,137,234,160, 14,117, 28,136, 40,144, 91,
+191,113, 83, 21,235,201,178,120,234, 89, 91,191,113,104,241,224,241, 21, 15,128, 18, 43,137, 67,137,149, 72, 48, 14,162, 22, 69,
+ 2,115,119, 80,137,234,244, 68, 9, 0,133,247, 83,157, 50, 68,142, 34,221, 97,125,232,200,145,137,210,175,155,154, 32,196,179,
+ 55,204, 30, 93,238,122, 0, 8,131, 69, 9,195, 40,204,162,129,153, 89,163, 72,250,157,137, 78,177, 97,118,186,240,190, 14, 49,
+ 78,148,162,166,170,155, 69,183,204,205, 46,118,123, 81,205,140, 9,241,210, 51,183,122, 64, 24,244, 87, 69, 53,176,176, 40,139,
+ 68, 17, 22, 21, 17, 86, 85, 53, 0, 32, 68, 5, 48, 3, 4, 75, 94,145, 28,121,239, 98, 29,213,204, 0, 0, 31,155,159,252,247,
+187, 45, 44, 44,248, 71,121,185, 13,157,117,127,181, 51,189, 14, 0,126,239,121,155,204,244, 20, 62,161,156,154,189,254,227,139,
+175,123,215, 45, 15,127,169,232, 76,158,116, 69, 39,183,254, 55,190,127, 47, 0,188,253, 63, 61,249,225, 47,197,122,120, 42,254,
+ 8,241,189,191,120,237,201,158,198,183,253,220,203, 30, 45,112,157,181,117,227,121,167,111, 22,149, 3,139,171,251,143, 45, 15,
+170,250,132,247,253,229, 27,126, 2, 1, 88, 84, 84,213,172,141, 68,237, 87,195, 91,222,249, 14,145,168, 18, 37, 12,195,112, 37,
+ 12,151, 67,228,192, 92, 71, 94,234, 13, 63,113,251,125, 47,123,230,165,166, 42,102, 44, 18, 69, 89, 52,178,152,217,207,255,249,
+ 63,174,145, 17, 58, 71,190,112, 69,233, 39,166,203,169,185,206,228, 92,225, 93,233,125,167, 40,214,207, 76, 61,255,210,243, 52,
+107, 28, 32, 34, 17, 34, 34, 32,136,217, 91,254,243, 11,215,200,200,249,142, 43, 58,174,152,244,229, 84, 57,177,206, 79,204, 58,
+114, 6, 0, 96, 14,241, 89, 63,252,154,238,160,234,214,172, 0, 6,205, 95, 3, 51, 83,149,223,126,229,117, 99, 23, 42, 74,114,
+ 37,249, 2,169, 64,231,203,201,185,153,205,103,139, 8, 21, 83,151,238,126,233,226,209,253,129,121,101, 80,245,130,153, 90, 90,
+ 29,128, 1,152, 2,154,217,203,159,245,212,236,143,200, 21, 0,160, 98, 6, 12,128,190, 51, 53, 57,183,249, 9,167, 95,136,206,
+155,196,227,135,247,214,145,131,216,254,227, 43,103,111,156, 86, 53, 53, 0, 68, 68,116, 0,138,240,196, 51,183,254, 31,239, 0,
+128,144,200, 0, 76,197,140, 17, 77, 57,132,170,167,202, 68,164,194,135,142, 29,169, 66, 12, 33,198,200, 95,121,112, 89,213,192,
+ 12, 1, 8,145, 16,189,163,223,120,207,135, 35, 11, 0,120, 83, 81, 14, 28,134, 18, 43,225,128,228, 38, 59, 83, 96,170, 28,227,
+176,219,171, 98,191, 10, 81,164, 98, 16,245, 31,191,235,240,115,158,176, 25, 17, 8,233,157, 55,125,245,182,251,247,141, 92,173,
+132,138,235,228,176,107, 21,246,157, 41,225,136,177, 6,131,186,119,124,249,248,145,192,220,175,234, 65, 20,134,210,251,114,223,
+ 16,255,229,147, 55,129,217, 25, 27,231,111, 71,106, 77,143, 56, 12, 36, 86,198, 65,149, 65, 69, 99,144, 56,224,170,207,117, 63,
+ 14, 22,135,117,232,215,161, 59,172,251,131, 97,175,183, 90, 85,213,157,123, 14,171,200,121,167,111, 46, 28, 93,121,193,246,209,
+138,148,131, 10,155,177,169,152,178, 69, 85,101, 95,178,196,138,195, 32,138,196, 40,145,165,138, 92,135,104,117,192,114,118,225,
+156, 11,187, 43,135,102, 58, 19, 19,101, 49, 63, 51,185,220, 27, 2,128, 55, 73,151, 16, 83, 81, 97, 48, 65,137,166, 17,205,122,
+189, 30, 33, 18,161,115, 72, 8,162,202,113, 40,195, 1,145,143, 28,166, 59,157,194,209, 69,219, 54,125,225,158,253, 0,224, 85,
+ 25,148, 85,216, 56, 40, 7, 48, 53,168,176,182, 16,234,227,221,190,119,228, 29, 77, 20, 5,139,138, 90, 21, 98,168,194,241,213,
+229,201, 78, 89,133,232,136,188,163,185,153,169,180,162, 40, 18,133,107,141,181, 72,173,162,162, 18, 68,135, 85, 93,133, 48, 81,
+150,117,100, 4, 64, 0,239,220, 84,167,156,158,232,120, 71,171,131, 97, 20, 1, 4, 4, 60,111,243,220, 81, 1, 47, 28,148, 43,
+ 13, 21,115,149,178,131,192, 82, 71, 14,204,106, 48, 61, 81, 70,102, 71, 68, 68,222, 59, 81, 21,177, 78,225, 74,239, 16,193,204,
+ 0,129, 16, 84,213, 75, 28,114,221,231, 24,218,248, 17,152, 89, 68, 68,205,172,112,110,162, 44,213, 12,192,136, 80, 69,213,155,
+ 35, 20,209,126, 29, 69, 36, 69,144,237, 27,230, 40, 14, 87, 98,168, 99,186, 10, 75,136, 28, 89, 88, 68, 52, 71, 26, 71, 72,128,
+ 0, 72,136, 68, 14,147, 78,123, 71, 96, 6, 0,102,136,104, 96, 62, 68,102,213, 28,209, 88,162,136,136,138,154,168,169,153, 53,
+246,174,150, 30,130, 2,136, 25,152, 1,162, 89, 54,226,199, 51,135,124, 92,110,103,158,121,166,255,182,127,121, 98,102,254, 57,
+ 63,247, 59, 23, 63,231,165,249,177,229, 96, 14, 0, 31,254,159,255,245,238,207,188,255,145,194,205,163, 85, 62,136,254,219, 88,
+199, 27,254,241,129,180, 95,128,248,161, 27,126,246,206, 79,252,237, 73,223,185,109,231,229, 79,122,254, 43, 79,187,240,201,127,
+253, 51,167,176, 9,167,182,160, 54, 21,224, 80,255,254,143,108,123,244, 55, 31,184,235, 43, 7,238,250,202,227, 86, 62,156,112,
+115, 69,231,148, 86,243,109,223, 30,171,132, 36,214, 55, 92,179,129,156,191,234,213,191,241,197,191,125,235,183,124,255,107,175,
+190,226,178,115,206, 40,157,227,180,185,102,191,252,151, 31, 24,134,248,173,213,232,170,171,174,122,209,165, 23,236,122,226, 69,
+ 0, 36,202,104, 38,202, 26, 43,174, 7, 49, 12,146, 39, 97,205, 25,106, 96, 25,212,252,145,155,191,254,137, 91,239,169, 98, 76,
+ 73,106,202, 9, 94,120,229,101, 47,127,230,165,102,166,102,170,154,204, 91,212, 84, 76,147,181,171,153,233,111,255,195,191, 30,
+ 88, 92,121,148,228, 17,119,237,218,245, 71,175,123,141,170, 54, 62, 66, 77, 85, 37, 42, 71,149, 32,177,146, 88,113,172, 68, 68,
+ 84, 53, 85, 89, 77,110, 83,135, 56,168,234,237,155,215,135, 40,152,115,103,131,102, 53,105, 17,249,183,204, 68,213, 76, 69, 1,
+ 1,126,247,253,159, 62,112,124,233, 17,179, 89,114, 5,160, 26, 24, 90,186, 41,185,194, 10, 85, 9,228, 74, 34,135, 0, 8, 67,
+ 68, 20, 16, 53, 36, 0, 66,244, 68,212, 41,183,156,113,254,210,161,251,213, 0,137, 58,142, 16,209, 90, 11, 6, 0, 52,132, 84,
+137,165, 36, 8,205, 84, 84,127,233, 71,119,153,193,175,254,245, 7, 79,174, 67,174,232,160,106,118, 38,166,166, 9, 92, 16,114,
+ 5, 82, 65,190,164, 98, 2,250, 75, 92,117,197,204, 16, 8,177, 67,254,156,167,188,160, 40,138,225,176,123,104,255,221,169,198,
+ 88, 20,155,158,154,158,242,150, 54, 46,249, 97,131, 84,112,142,254, 36,191,172,170,191,253,202,235,204,236,191,189,231,195, 39,
+ 46,136,124,137, 89,204,134,166, 10, 98,170,136,106, 0,228, 10,114, 69, 49, 57, 59, 53,183,205,149, 29,242,101, 49, 53,139, 42,
+ 96,160, 42,113,216, 93, 58,188,183,138,162,166,162,198, 10, 71, 87,186, 85,144,133,205,235, 28,152,229,239,151,238,101,169, 33,
+ 32, 34, 90,242,162,166, 6,240,223, 95,241,195,127,247,217, 91,239,120,240,192,200,236,137, 28, 16, 1, 18, 32,166,228, 18, 76,
+192,140, 8,201,121,231, 75, 87,116,124, 89, 2, 24, 18,130, 48,162, 67,114, 96, 18,134,221,195,135,246,214, 33,132,200,237, 31,
+ 53,251,198,129,165,155,247, 45,169,168,136,169,230, 37,101,168, 10,145,112,116, 35, 4, 7,118,206,182,205,107,205, 62,127, 23,
+ 49,137,170,172, 34,160,162, 41,191, 49, 1, 3,242, 5,148, 83,190, 51, 73,232,154,175,173, 28,170,238,145,251, 22,123,195, 97,
+136,170, 38,166,106,192,138, 81, 33, 42,138,194,231, 31, 88,188,100,251,252,180,135,166, 30,180, 36, 34, 34, 34,176,251,142,245,
+255,240,159,110, 60,185, 14,169, 4,225,168, 28, 84,162, 74, 52, 97, 51, 81, 17, 48, 5, 4,242, 29, 34,143,136, 42, 12, 9, 41,
+ 32, 81,225,186,191,212,237, 46,117,187,221, 42,178,168, 70, 22, 81,141,172,108,164, 72,108,164,230,190,186,119,145, 85,158,125,
+193, 38, 67, 64,160,229,126,253,190, 79,126,177, 44,220,250,233,201, 91, 30, 60,252,136,142,145,195, 64, 56, 10,199, 36, 33, 83,
+ 81, 19, 84, 83, 83, 36,135, 34,130, 1,208, 80,188, 57, 54,141,136, 78,226, 48,244,142,213,117,236,174,174,138,106, 21, 98, 29,
+ 57,138, 84, 33,154, 25,155, 83,116,224, 74, 67, 39,134, 31,186,227,208,189, 15,220, 13, 42,165,119,219, 55,207, 79,150, 69,100,
+185,108,199,214,229, 65,125,203,158, 3, 39, 89,144,196, 90, 36,170,176, 42,131,176,170, 2,164, 82,202, 82, 13, 96,202, 42, 30,
+145,156, 47,136, 75, 64,144,186,207,117, 95,193, 42,230, 16,185,142, 92,199, 88,231,100, 74,197, 84,196,144, 10,117, 37,184, 2,
+201,159,115,246,133,251,246,222,181,113,195,124,202, 7, 28, 81,167,240,115,147,240,180,115,182,125,249,129, 3, 39,217, 50, 19,
+ 49, 97,200,233,148,162,170,153,128,170,162,161, 68, 69, 66, 34, 4, 82,239,145, 60,168, 72,232,199,186,119,120,185,155,172, 88,
+155, 50, 41,161, 38, 81, 36,178,152, 69,128, 1, 32,130,235,144,239,108, 59,227,172, 45,219, 78,123,232,158, 59, 61, 57,239,201,
+ 59, 87, 22,102, 86, 60,237,236,211,191,188,231,224,154, 5,153, 36,123, 16, 83, 1,149,244,216, 84,193, 68, 85, 0,172,181, 16,
+138, 14, 0,148,235,186,234, 47,247,135, 85,136,228,136, 4,189, 39, 3,151,180, 55,187, 64,181,168, 42,170,194, 26,171,202, 12,
+ 68,101,121,241,176, 48, 59,162, 9,243, 68,228,137,196,185,137,178,184,252,156,109, 95,105,228,228, 1, 80,149, 77, 89, 69, 76,
+163,169,168,178, 73,178, 47, 85,149, 81,218,105, 32,102,106, 26, 34, 15,235,208,171, 2, 0,116,188, 79, 78, 16, 1, 28,145,115,
+ 82, 56,199,226, 99,169, 41, 14,138, 72, 21,165,138,177, 10,177,215, 93,157,158,156,232, 13,107, 3, 40, 28, 37,199, 68,142, 10,
+165,203, 22,182,222,186,239,112,179,101, 28,146, 2,153,178,114, 76,117, 76,250,122,201,225,170, 42, 55,129, 44,101,240,201,166,
+ 60,209, 84,167, 76, 30, 69, 84, 84,141,197,113,145,150, 98,106, 9,247, 50, 51,171, 35, 87, 33,246,170,186, 14,209, 59, 7,102,
+154, 50,242,198, 67, 21,142,206, 63,109, 99,101,230, 1, 64,179, 82, 71,149,104, 26, 85, 53,165,248, 57,148,170,169,153,136,178,
+170,153,114, 78,221,213,204,188,119, 19, 0,136,224, 8, 35, 11,171,122, 73,223,195,105,206,237,147,142, 89,250, 14,211, 19,229,
+176,142,129,179, 26,168,230,172, 55,185,239,217, 78,161,228, 60, 32,112,232, 9,135,180,140, 20, 4,204,172,149, 79, 94, 83, 35,
+177,156, 90,168,153,181,101,181, 75,206,216, 12,140, 12,209, 33,162, 81, 27,179,204,204, 8,137,114,198,141,128, 33, 21, 36, 0,
+102,170, 89, 69, 17, 1, 97,211,236,148, 7,128, 80, 15, 82,146, 96, 57,137,209,241,204, 97,252, 25,205,129, 32,215, 55, 41,128,
+166,154, 31, 17, 0,193, 12,198,194,106, 10, 86,109, 13, 96, 72,152,138,122,105,222,168,134,205, 21, 44,229, 7, 30, 1, 62,125,
+223,225,124,145,124, 57,107,226,190, 1,180, 31, 96,163,207,111,222,161, 6,106,106,106,172,166,170, 44,154, 74,173, 22, 43, 73,
+ 63,213, 0,140,196, 64,148, 24,137,189, 40,169,182,245,154, 25, 42, 56, 51, 52,165,114,242,123, 12,111, 76,181,217,247,206, 98,
+118,239,222, 77,136,248, 61, 37,160,111,191,114, 61,243,137, 87,254,248,111,253, 77, 57, 57,115,194,243,123,191,250,169, 79,252,
+241,245,139,223,188,255,219,187, 44, 46, 44, 44,236,219,183,239,148,126,103,219,206,203, 95,241,214,143,229,194,185,169,160,235,
+254, 42, 0, 36, 32, 57,105,252,231,223,125,195, 23,222,115,195,169,110,217, 41, 75,232, 37,111,254,135,179,159,250, 67,105, 17,
+ 71, 30,248,218,251,127,243,149, 43,135, 30,124,248,219, 38,231, 54,158,251,244,107, 94,255, 55,119,125,240,205,175,221,127,251,
+231,191, 91, 18,122,213,159,124,106,235,185, 79, 74,171,121,207, 47, 92,243, 24, 43,101, 95,118, 56,212,143,191,132, 46,126,238,
+203,182,158,119,105,186,255, 39, 63,113, 81,239,248,161,199,248,139,143,113, 53,167, 86,219,251,206,196,117,215,191, 45,221, 95,
+ 62,176,231,177,175,230,187, 5, 54,188,252,134,127,110,239,255,217,171,159,250,221, 51,251,199,186,160, 47,253,221,255, 54,149,
+ 83,118, 42,142, 94,119,237,174,159,190,250,138,199,223, 15,221,251,249,127,249,189,231,111,222,176,253,188, 23,190,233,175,190,
+229,155,119,110,223,250,202, 31,186,124,243,186,153, 4, 60, 0,226,214,249,117,111,254,251,143,159,178,149,173,159,157, 62,109,
+126,118,243,220,204,100, 89, 42, 88, 29,120,165, 63, 92,233, 15,122, 85, 56,182,218,251,150,215,234, 20,254,181,215, 92,249,140,
+ 11,206,140, 41,113, 80, 85,131, 6,117,208, 61,135,143,191,229,159, 62,253, 45,173, 12, 95,116,245,179,127,229,199,158, 87,248,
+ 34,199,105,101,149,192,161,146,186, 27, 98, 20, 81, 54, 21,150, 90, 68, 69,235, 40, 95,219,127,232,253, 95,188,253,161, 99, 43,
+129,185,189,208,204, 68,231,237,175,127, 41, 17,168,129,141,112,143,132,164,164,226, 21, 76,161, 91,213,191,254,174, 15,126, 11,
+179,255,129, 75, 46,153,152, 94, 15, 38,205,151, 98, 36,135,228,144, 60, 21,169,155,202,236, 92,161, 42,162,157, 82,127,224,194,
+ 29, 79, 61,247,204, 42,132,238,176, 62,184,220,125,239,167,191,250, 91, 63,121,237,212, 68,153,155, 71,166,169,173, 9,104,150,
+155,154,233, 31, 51,208,169,137,226,119, 95,245,130, 95,123,231,191, 60, 26, 84,119,245,149, 87,156,123,218,105, 13,122,130,185,
+ 13, 5,132,148, 58, 45,136, 25,181,200, 47, 34,128, 67,240, 68,133,119,179, 19,229,115, 47,191,116,221,100,105,166,109,136,182,
+244,241,102, 0,152,193,233,166, 26, 81, 5, 71,248,244, 11, 22, 62,115,231,201, 35,221,142, 29, 59,168,105,135, 57,164, 12,217,
+147, 47,200,151,206,119, 92, 49, 65,190, 67,174,112,132,142,136, 8,157, 35, 34, 2, 68, 34, 42,188, 47,189,159,232,148,117,168,
+ 13,169, 65, 56,160, 5,104, 1,108, 60,145,200,200,158,217,220,244,228,175,252,216, 15, 61,162,217, 99, 2, 36,136,210, 54, 33,
+121,116, 5,249, 2,125,233,124,233, 92,137,174, 64,164,212,168, 24, 33, 43, 0, 4,224, 8, 61,185, 40,210, 31, 14, 21, 41,231,
+136, 99,249, 12, 54,192, 85,179, 24, 51, 68, 51,219, 58, 63,243, 51,215, 94,249, 8, 11, 66, 74, 32, 16, 57,143,222,147, 47,136,
+ 60,185,194,249,146,138, 14, 21, 19,206,119,208, 21, 56,214, 0, 72,221, 29,242,197, 51,174,121, 85, 61,236, 39,248,113,185,219,
+211,241,196,181, 45, 57, 64,215, 8, 73,115, 58,125,246,150, 13,151,159,191,112, 50, 63, 68, 68,206,153, 25, 0,165, 98,222, 16,
+ 77, 69, 17,201, 12,124, 9, 48,109,166, 18,235,196,187, 64, 0,239,168,152, 90,127,254,147,175,142,213, 32,198, 58,117,100, 89,
+236,224, 82,119,235,220, 84,171, 49, 96, 99, 77,205,164, 93,169, 30,104, 82,244, 23, 95,113,201,190, 99, 43, 71,150,214, 96,160,
+ 68, 72, 64, 14,137,128, 40, 1, 72,136,132, 72,152,208, 28,231, 93, 49, 57, 49,187,105,106,253,118,231, 72,213, 84,229,204, 75,
+158,123,222,165,207,150, 80,115, 28, 36, 48, 84, 52, 21,222,182,239,120, 63, 9,103, 28,196,107,251, 6,227,187,153,108,239,141,
+215, 61,243, 97, 18,194, 12,106,153,154,162, 0, 1,104,163,153,136, 72, 62,117,128,202,169,245,235,182,158,235,202,137,178, 51,
+ 37, 28,193, 76,149,165,174,196,128, 69,213, 84, 20,204, 32,170, 62,112,108,184,176, 97,210, 18,134,210,148, 68, 89,159,218,142,
+120,194,243, 12, 13,224,183,126,234,218, 55,189,247, 35, 99,177, 12,145,144,114,231, 11,176,209,190,116,143,200, 57,231, 75,223,
+153, 42, 38,166,125,103, 10, 1,132, 3, 18, 1,162,169,114,221,151,124, 75, 21,173,130,218, 48,196, 67,221,168, 73,121,218,229,
+ 36,101,111,161, 60, 0, 74,149,163,129, 1,252,236,117, 87,173,177, 50, 32, 36,162,180,191,205, 14, 43, 34, 16,229, 75,152,169,
+134, 74,234,126, 18, 90,146,188, 42,215,189,197, 40,194,170, 81, 68, 52, 87,217, 96,118,112,169, 63, 96, 83, 83,203,114,193, 49,
+163,203, 14,173,145,155, 17,226, 95,221,248,197,147, 96,140, 0, 96,214,128, 50,208, 86,142,198, 28, 17,201,138,137,178,236,100,
+ 20, 21, 64, 77,149,195,202,202,145,132, 80,105, 66,211,149,162,152, 24, 2,216,109,251,150,175, 56,123,189,168, 2,102, 34, 74,
+227,137,144, 82,215, 15,145, 21,254,224,159,111, 58, 33, 74,250,166,177,175,109, 11, 55,223, 81, 1, 21, 3, 3, 68, 95, 76,146,
+115, 77, 86,175, 9, 60,230,122,208, 15, 49,178,176,138, 40, 88, 66, 79,196,216, 72, 21,136,240,166,251,142, 61,243,156, 13,166,
+136,168,134,136,218,168, 53,146, 41,188,227, 51,183,220,179,119,255, 73,211, 15,131,164,148, 18,149, 89, 37,154,113,198,175, 76,
+ 16,144,124,137,228, 16, 16, 76, 85, 57, 75,136, 67, 28,174, 12, 3,143,109,150,170, 65, 96, 16, 64, 6, 50, 69, 3,188,127, 57,
+158, 51,239, 0, 18, 48,109, 8, 72,104,127,251,133, 59, 62,119,231,125,143,232,169,155, 8, 31, 85,162,106, 48,141,202,209, 50,
+222, 40, 0,136,148,160, 96, 81, 97, 80, 49, 97, 85, 17,174,185,234, 86,145,185, 97,115, 4,150, 16, 98, 29, 67,136, 28,163,164,
+ 50,127,207,161,229, 94, 68, 48, 32,196,210, 23, 31,248,210, 29,127,248,207,159,156,242,116,229,133,143, 88, 46,123, 83,149,220,
+106, 97, 21, 54, 97, 19, 78, 72, 99, 14, 72,154, 86, 76, 35,165, 4,211, 80,113,172,204,176,197, 73, 34, 11,179,212,194, 10, 94,
+128, 0,189,130, 67,162,155,238, 61,122,221, 69,155,191,112,215,222,207,220,113,247, 84,167,220,182,101, 99,233,104,194,251, 39,
+158,181,237,142,189, 7, 78,182, 32, 83,229,180,148,152,249, 0, 73,159, 76, 1,208,136,204, 68,197, 1,112, 42,255, 28,152,154,
+113, 24, 10, 7,174, 7,170, 26, 69, 2, 75,136, 28, 88, 34,179,130,176, 57,112, 6,104,138,206, 1,220,184,103,245,182,175,223,
+ 55,213, 41, 39,203, 98,227,244,100,100, 46,188,159,235,200,100,167, 28,214,225, 97, 91,166, 98, 18, 19,186,152, 87, 99, 10,169,
+ 51, 4,154, 41, 15, 26, 85, 66, 34,100, 40,179,198, 74,185, 86,229, 97, 93,179, 90,100,137,204,145, 51,101, 44,198, 24, 99, 21,
+234, 42,196,200,204, 98, 86,247, 43, 34, 44, 28,205,205,206,152,105, 74, 47, 10,239, 46, 62, 99,227,201,116, 72,213, 82, 95, 32,
+245, 95, 84, 18,149, 70, 65,179,178, 51,107, 12, 26,131,112, 48, 9,194,181,196, 90, 56,128, 89,191,170,165, 81,106, 22, 17, 77,
+ 4, 2,225, 24, 57, 12, 99,168, 66,168,133,163,170,158,125,222,206,194, 57, 66,100, 73,170,141,142,104,162,240, 91,230,103, 79,
+ 98,101, 54,130, 90,147,187, 87, 48,195,132, 84,137,161,169,153, 67,117,100, 14, 12,144,216, 36, 42,215,106, 22, 89, 45,217,104,
+238,216,129,170,101, 70,156, 25,176,128,235,160, 47,129, 10, 68,114, 68,189, 94,183, 51,183,174, 44, 60, 17, 58, 34,239,220,142,
+ 13,179, 71,150,187, 15,183,178, 22,248, 53, 88, 3, 13, 42, 88, 82,243,104, 18,148,131,114,157,186,159, 82,247,135,117, 76,221,
+186,212,163,107, 66, 66,246,178,162, 38, 34,137, 36, 35, 97,168, 18,230, 54,109, 1, 87,136,168,169,165, 48, 78, 68,133,119,219,
+ 54,111, 88, 43,161, 54, 0, 38,188,217, 52,161,120,208, 52, 42, 17,209, 20,129, 28,105,234,163,129,132, 97, 8,131, 94, 85,167,
+110, 33, 33, 80,202,240,168,161, 98, 37,175,175,233,251, 9,196,138,156,175,196, 68, 76,204,196,204, 33, 18,145, 39,115, 68,167,
+207,116, 14, 28, 61,193, 83,155,130,106, 94, 83,106,190,174, 85,112, 0, 68, 97, 35, 66,140, 0, 26,135,189, 65, 85, 39,242, 54,
+165,116,147,212,147, 19,178, 68,153,105, 4,174,162, 32, 42, 44, 34,117,232, 14,170, 13,235,166,251, 85,237,157,195, 20, 67, 17,
+ 28, 81,225,221,220,244,228, 74,127,216,154,125, 75, 17,145,172, 76,202, 42,130, 32, 96, 10, 9,223, 78, 50, 19, 64, 64,145, 80,
+135, 56, 8,145, 89, 8,144, 40, 37,228,104, 14,189,145,153, 51,176, 20, 77, 73,144, 80,205,140, 69,234, 16, 35, 75, 29, 34, 33,
+214, 49, 2, 20,142, 16, 1, 9,129, 16,207,221, 60,119,115,187,160,180, 26, 72,134,102,106,202, 38, 12,166,162, 2, 38,173,134,
+101, 92, 86,141, 85,170,192, 33, 70, 86, 37, 66, 79,200, 68,226,168,192, 20, 69, 19,240,171,142, 48,197, 19, 71,148,140, 43,136,
+ 12,234, 48,213,233,176,168,119, 77,206,133,136, 8,142,104,118,114,162, 59,172, 0,192, 39,216, 57, 69, 46, 75,228, 38,101,211,
+228, 27, 57,119,169, 83, 7, 94, 83,170,170, 85,228,200, 10, 6,142,168,112,142,157,154, 81,170,131, 16, 1,209, 19,138,119,148,
+128,246, 78,161,157,194, 19,161,119, 84,133, 64,132,185,127,169,185,127,157,170,173,133,141, 51,119,126,179,106,148, 90,197, 84,
+115,191, 76,217,154,230,139, 26, 72,198,147, 33,121, 26, 53, 99, 22, 22, 73, 61,203,212, 98,138,146,251, 16,152, 43, 24,113, 68,
+ 25,116, 7, 19,209,210, 59, 68, 76,124, 45, 83,243,148,251, 9, 48,150, 77, 78,120, 63,138,101,102, 73, 42,108,146,156, 50, 91,
+211, 52, 17, 85, 85,101,205, 29, 43,145,166,255, 96,134,136,222, 59, 53,237, 20, 14, 0, 68, 21, 37, 91, 63,137, 58,162,220, 44,
+119, 38,106,136,232,136, 16,145, 89, 91, 75, 76,169,119, 83,154,194,214,185,105, 51,243, 96,106,204, 42,172, 26, 85,130, 9,139,
+101,230, 98,234, 40,100,162, 84,179,154,140,192,167,207, 64,244,206,121,159,197, 3, 0,160,154,182, 64, 91,228,223, 76,205, 40,
+123, 41,171,144,179, 55,176,177, 84, 18, 0, 17,183,206,205, 32,162, 55,147,220, 4,106,250, 47,214, 52,167,242,150, 37, 16, 35,
+253,108,158, 73,101, 69,138, 0, 30, 81, 28, 41,128, 51, 3, 67, 32, 2, 52,210,156,195,171, 25,170,162,119, 25, 58, 80, 11, 34,
+106,134,154,195, 66,211, 64, 7,143,208,176, 34,165, 86, 73, 93,169, 70,133,115, 28, 72,134, 7,163, 38, 85,219, 10, 89, 75,139,
+162, 6, 26, 0, 4, 52, 32, 68, 69, 68, 64, 5, 37, 64,203,221,113,116,228,136,132, 84, 77, 49, 39,200, 57,187,197,182,120,243,
+ 42, 44, 92,171,130,168, 66,219,116,109, 86, 48,222,149,106, 87,211,196,152, 81,193,140,136, 52, 38,255, 92,187,166,229,217, 24,
+ 25, 4,129, 26,141, 86, 29, 75,230,155, 86, 16, 0,120, 53, 21,209,148,106, 36, 93, 94,211,155,210,100,129, 77, 88,201,255,170,
+182,189,161,177, 50,217, 70,125,163,166, 68,109,111,237,238, 52, 59,100, 99,192,196, 8,140, 72,158, 58,227, 92,186,134, 99, 51,
+218,187,230,195,199,214,212,180,195, 70,157,170, 52,224, 0,163,199,184,182,126,109,118,122,172,252,111,159, 88, 83, 42,249,189,
+ 75,125,213,166,228,105,107,159,209,253,230,251,105,187, 89, 39,166, 4,105, 79,147,207, 28,251,224,102,179, 12, 21,200,204, 68,
+ 81,140, 34, 57, 46, 84,157,182,226, 68, 51, 50,243,106,148, 68,184,123,247,238,165,165,165,229,229,229,239,181,182,208,127,236,
+205,204,230,231,231,215,175, 95,239, 1, 96,101,101,101,255,254,253,255, 95, 40, 15, 39,121,102, 1,253, 7,222, 54,159,115,241,
+ 57,151, 63,103,211,217, 23,109, 62,251,162,233,249, 45,228, 61, 18,197, 97,127,245,232, 67,171, 71,190,121,240, 27, 95,221,119,
+235,103,143, 60,240,181,239,203,254,230,183,243, 97,157,137,167,191,228, 13,231, 61,227,249,167,157,127, 25,156,136,215,142,232,
+189, 19, 51,243,179,155,207, 56,227,162,167,239,252,193, 23,143, 19,126, 99, 61,124,232,206, 47,237,249,242, 39,110,251,200,187,
+195,160,251,255,142,128, 92,209,121,230, 43,175,191,226,229,191,184,134,225,220,224,105,221,163, 15, 45, 62,116,255,254,219, 62,
+255,224, 45,159, 89,252,230,125,195,213, 19, 39,104,167,215,111, 94,183,101,251,150,115,159,116,250,133, 79,217,116,214,206,203,
+ 94,240,154, 43,127,234, 87, 59, 51,115,117,111,229,163,255,235, 23, 30,248,242, 39, 98, 53,248,126, 21, 16, 34,189,238,221,183,
+174,219,178,125,252,169,244,243,163,111,125,227,237, 31,121,247, 99,185, 72,127,233,104,127,233,232,193,187,111,185,237,195,239,
+ 60,225,226,128,184,113,225,130,167,253,248,235,247,221,254,249, 59,111,252,155,239, 39, 1, 33,210,143,254,198, 95, 92,184,251,
+133,163,220,194, 12, 16,123,199, 14,190,239,151,175, 91, 62,184,247,241, 8, 52, 10, 6,199,246,222,245,145,183,252,252,247,153,
+ 6,109, 92,184,224,167,223,241,197, 53, 42, 99,102, 96,255,250,199,191,126,243, 7,254,252,251, 43,150,209,227,126,197,139,159,
+243,210,215,188,253,115, 15,215,168,143,188,229, 13,223,119,210,121,252, 53,232,220, 31,120,222,117,191,246,182, 76, 66, 27,203,
+ 60,111,254,192,159,127,237,227,239,251,126,204,134, 30,103, 1,221,255,165,143,221,112,205, 70, 0,184, 96,215,143, 92,114,245,
+203,119, 60,249, 89,197,196,148,114,252,220,187,126,231,241,250,136,169,178, 56,115,243,252,121,219, 78,187,100,199,233,103,110,
+ 92, 87, 16, 26,128,152, 17,226,151,239,221,247,206, 79,126, 89, 84, 31,199,111,132,187,119,239,222,187,119,239,169, 50,171,254,
+253, 92, 0,161, 67,124,209, 85,151,255,224, 69, 59,166, 10,175, 6, 98,134, 6,106,154,244, 84, 97, 84, 20, 26, 34, 1, 28, 89,
+233,254,222, 63,126,170, 87,213,223,225, 71, 47, 44, 44,156,117,214, 89, 30, 0, 88, 50,213,101,219,198,245, 79, 60,103,251,249,
+103,156,126,241,142,237, 51, 19, 19,147,157,162,244,222, 19,122,135, 4, 6,198,166, 44,194, 44, 38,146, 96, 44,101,150,212, 78,
+ 96,209,154,165, 14,177, 14,188,216, 31,236, 57,188,120, 96,105,117,207,225,227, 71,151, 79, 61,163, 67,252,241, 43, 47,123,198,
+133, 59,182,204,207, 56,196, 76,235, 76,189,105, 0, 4, 80, 4, 50, 74,252, 4,108, 82,205, 84,103, 26,192,198,117, 51,191,251,
+234, 23,244,134,241,143, 62,252,217,253, 71,151,190, 83, 13,218,181,107,215,143, 62,237,201,215, 92,246,196,196,255,197,182,199,
+158, 90,103, 25,114,205,210, 48, 17,213, 52, 59, 16, 77,162,168,180,240,154,181,128, 64,134, 5,214, 96, 22,105,228,177, 31,226,
+193,197,213, 61,135, 23,247, 29, 93,254,230,226,242,161,165,110,140,121, 98,105,199,150,141,207,120,194, 89,207,121,210, 5,243,
+211, 19,170,218,234, 5,180,221,236, 49,156,162,197, 22,154,143, 72, 84, 91,109,137, 29,205,239,225,241,110,255,237, 31,251,183,
+ 71, 25, 64,122, 76, 26,100, 64,128, 14, 9, 17, 8,199,150, 1, 72,185,223,137,100, 74, 68, 94, 73, 72, 11,115,156,132,229,140,
+ 85,216, 11, 55, 83, 75, 32, 13, 37,223, 64, 19, 23, 57, 67,101, 0,166, 58, 51,209,217, 52, 51,189,115,251,150, 24, 37,136, 4,
+102, 17,241,229,228, 89, 91, 54, 12,171, 42,245,223, 18, 94,137,102, 8,160, 77, 51, 90,205,172, 69, 34, 51,143, 4, 27, 58, 66,
+238,102,167, 55, 88, 75, 43, 1, 48,213,249,233,169,235, 95,252,236,126, 85,255,209,135, 63,119,112,113,245,219,117,210,152,211,
+ 82, 51, 4,180,134,198,162,134,169,135, 76,128,138,228,212,148,140, 76,156,169, 67,243,230, 68,133,209,177, 9, 35, 71,132,152,
+230, 27, 52, 3,174,148,204, 82, 21, 82,215, 93,140,144,140, 8, 72,209, 17,121,113,101,225,153,121,122,102,182,174,135,206, 33,
+128, 83, 97, 24, 27,184, 26,175,215,208,198, 49,186, 4,253,101, 76, 46,207,187,140,209, 38, 44,163,204,105,182, 28,167, 58,229,
+175,189,232,217,221, 42,252,143,191,187,177,138,241,148, 5,148,250, 37,137, 57, 3, 35, 26, 14, 97,102, 33,153,129,166, 89, 48,
+ 48,167,100, 96, 98, 34,170, 2, 72, 38,164,128,148,117, 60,102,132,211,144,146, 2, 25, 98,219,167, 71, 75,110, 53, 97,212, 25,
+144, 86,245,158, 66, 45,102,102, 16, 29, 57, 71,152,190,149,166,239,253, 8, 78, 42,129,114,121,206,183, 81, 58, 91,131,231,140,
+128,197,196,246,154, 40,253,111,189,226,218,123, 14, 30,255,179,143,158, 2,245,213, 45, 44, 44, 92,120,230,246,243,207, 56,163,
+ 97, 49, 17, 18, 66,195,104, 34, 36, 64, 66,114,233, 85, 64,151, 27, 80,232, 48,145,103,218,174, 0, 52, 40, 99,174, 2, 96,140,
+221,181,182,112,207, 80, 52,109, 60,253,220,167,236,250,177, 3,123,191, 30, 67,149, 0,249,200, 92,197,168,128,142, 40,185,147,
+ 60,193,103,102,227, 68,154,230, 24,131,180,125,136, 96,176,246,115, 90,196,179, 65, 29,161, 65,236,215,207, 76, 94,115,217, 5,
+157,194,223, 51,222,148, 59,217,109,110,110,110,126,126, 62,107, 16,145,211,150,180, 2,105,183, 19,169,194,154,147, 26, 72, 51,
+ 59,203,208,212, 72, 77, 9,145,210, 12,156,178, 3,116,136, 21,128, 26,179, 54,251,102, 99, 91,158,142,144, 50, 48, 95, 76,238,
+184,120,247,204,186, 13, 38, 28,170, 94, 93, 13, 56,117,101, 18, 33,192, 32,112,221,171,170, 78, 81, 78, 79,120,203,232,117,114,
+ 78,163,248, 49, 38,163,113, 45,179, 53,181, 90,251,100,246, 81,137,155,133, 98,118,213, 69,103, 95,117,209, 57,111,253,224, 77,
+ 7,151, 86, 31,155,137, 57, 79,173,111, 78,251, 98,128,100,102, 70,105,255, 32,207,137, 36,150,211,168, 74, 65,116,232,201,151,
+164,108, 60, 41,113, 50,214, 61,171, 7,121,120,162, 25, 62, 73,156,147,249, 51,118,110,217,190,211, 57,167,194, 26,131,114,168,
+170,158, 48,183,253, 11, 51, 83, 5, 53, 80,176, 42,214,203,253,106,118,106,114,166,147, 34,122, 98, 31,141,161,220, 99,232,252,
+ 90,233, 24,160,161, 1,142,203,104, 45, 99, 48, 77,123,188,225, 5,187, 30, 90, 92,125,199,141, 95,170, 30,121,252,215,167,108,
+140,200, 37, 83, 69, 92, 35,166, 28, 22, 70,198, 49,182, 20, 68, 34,103, 70, 64, 0, 96, 14, 74, 40, 17, 0, 38, 17,205, 84,170,
+222,234,202,209, 1,139,243,157,217,249,173,219, 22,118, 18,130,138, 32,130, 8,155, 70,225, 32,161, 26,244,151,217, 52,147,158,
+ 52,181,122,211,234,193,204, 88,236,232, 74,255, 40,225,105,115, 83, 29, 7,205,145, 1,102, 48,110,205, 54,210, 22, 27, 39, 39,
+ 90,107,206,208,244, 4,114,155, 73, 21,146, 59, 52, 60,109,126,246, 55, 95,118,245, 71,111,189,247,211,119,220,251, 40, 26,132,
+ 72,148,114,210, 68,132, 3, 52, 2, 80,211,236, 13,113,172,189,144, 59, 17,136,237, 4,102, 50, 31, 36, 36, 71,228,201,121,116,
+133,243,197,134, 29,205, 84,165, 25,170,164, 38, 94,234,187,171,168,114,228, 48, 28,246,150, 19, 85,173, 73, 8,146,140, 72, 21,
+ 20, 82, 55,222,152,237,129, 35,171,147,157,114,251, 92,167,253,218, 10, 41,226, 54,255, 1,142,187,232,204,152,109,115,130,102,
+219,199,202, 67,204,130, 66,100,181,171, 47, 61,255, 25, 23,238,248,211,143,126, 97,169, 55, 56, 73, 53,223, 68,121,164,212,223,
+ 66,164,113,215,155, 59, 43,169, 91,159,141, 46, 45,129,146, 35,119,158,168,200,196, 80,114,128, 8, 38, 18,134,177,234,113, 24,
+130, 25, 16, 37, 37, 77,202, 6,102,160, 34, 18,227,112,165,223, 93, 76,228, 39, 78,115,149,137,215, 39,194,150,199,194,219,198,
+205,202,160,190,253,161,213,227, 67,205, 99, 79,233,167,142,251, 34, 24, 7, 42,161, 29, 49,182,134, 1,136,136, 13,239,181,121,
+ 29, 40, 9,218,108,118,178,124,227, 11,127,112, 97,203,198,147, 22,171,141,196,155,119,231, 92, 53,141, 57, 54,116, 11, 77,227,
+ 94,102, 45,219, 55, 79,101, 41, 42, 42, 24, 34,131, 34, 0, 56,116,206, 21, 29, 34,151,230,154, 51, 67, 19, 16, 65,193,204, 76,
+ 69,162,212,253,254,234,209, 94, 85,165,147, 55,154,158, 87, 30, 19, 83, 0, 85, 84, 48,209,108,113, 41,177,217,115,100,245, 96,
+233, 47,216, 50, 77,208, 26, 21, 26,166,145,181,108, 86, 77, 75, 46, 39, 9, 72,136,154,245,142, 16, 45, 53,163, 85, 83,247,190,
+ 91,241,221, 7,142,125,242,246,123, 22, 31,129, 59,239, 91,165, 52,205,221,199,164,218,137, 70, 5,150, 88,188,105,216, 54,251,
+103, 85,197, 38, 85,205, 65, 53, 73,129, 13,121, 25, 42, 0, 0, 9,250, 73, 68, 65, 84,156,115, 5,122,231, 92, 65, 13, 39,188,
+229, 74, 54,102,170, 42, 34,177,170,122,199, 86,122,171,131, 42, 68, 22, 81, 1, 64,205, 13, 67,208, 20,177, 0, 89, 77, 13, 20,
+ 64,148, 52, 55,208,173, 55,140,159,191,247,216, 5,219,231, 79,155,164,180, 86, 52,107, 12,206,192,176, 73,185, 70,217, 55, 34,
+165, 4, 76, 84, 19,123,238,174, 67, 43,127,255,217,175, 12,134,213, 99,132, 59, 44, 87,122, 57,146, 72, 67,241,200, 36,157,164,
+ 68,102,146,100,212,254,219,120,111, 34,114, 72, 72,228,208,249,196, 60,111, 82, 95,179,148, 79, 26, 98, 26,133, 20,214, 88,199,
+ 97,183,238, 47, 85,172,193, 44, 50,171,129,154,180,228,130,156, 2, 27,138,154, 24, 40, 96, 34,108, 72, 18, 5,152,247,238,238,
+135,150,191, 57, 81, 62,105,219,180, 3, 83, 4, 64, 69, 64,107,147, 81,200, 26,155,118,220, 17,162,115,247, 31,237,126,238,235,
+247,223,118,255,131, 33,196, 83,203,164, 51,195,168,165, 5,106,203,132,107, 73, 57,210, 88,156, 90, 34, 47, 52, 89, 14,145,107,
+184,190, 4, 68,141,162,136,170, 33, 16, 96,170, 57,210,166, 38,249, 4,142, 3,174, 86, 67,168, 6, 85, 93, 87,117,100, 25, 17,
+201, 70, 85,110,162, 41, 36, 13, 66, 0, 84, 32, 5, 84, 3, 53, 74, 42,187, 58, 8, 55,222,213,127,242,217,155, 79,155, 76,231,
+ 74,180,229, 89, 34,218, 0, 1, 30, 88,236,222,182,247,224, 93,123,247,207, 76,118,230,166, 38,143, 30, 95, 57, 37,233,180,148,
+ 96, 85,201,199, 39, 89,162,247, 38, 97, 73,162,118, 73, 83, 34,103, 15,210,232, 14,102,151,156, 15, 80, 0, 80, 53, 96, 48, 2,
+115, 64, 6,102,144, 37,166, 57,226,168,104,172, 36, 12,185,238,215,129,217,176, 30, 12,180,225,123, 55,103,117,140,168, 1, 44,
+218, 8,136, 12,201, 12, 20,156,161, 26, 98, 10, 64,165,247,183,236, 57,186,101,126,250,210,211,167, 93, 62,255,206,234, 40,255,
+246,141, 7,191,114,247, 3,133, 71,135,174,240,238,220,109, 91, 61, 90,100,217,177, 97,110,203,186,233,175, 62,112,224,177,131,
+106,233,196, 67, 77,100,156,196,158, 55, 17, 77, 39,150, 52,100, 60,104,136,131, 54, 98,173, 24, 2, 66,242,218, 42,185, 82, 76,
+ 98, 36,135, 96,152, 40, 59,166,249, 16,177,196, 4,231,192,177,146, 48, 20,174, 69,196, 36, 86,117,101,136,121,131,204, 88, 68,
+ 50,147, 67, 69, 45,209,164, 44,219, 14, 41,144, 1, 3, 58, 32, 2, 32, 5, 52, 67, 71,116,120,177,247,217,136, 37,198,155,111,
+185,121, 24, 56, 17, 33, 39, 75,239, 28, 77,117, 58,219, 54,204,101,233, 59, 43, 0, 0,225,105,231,110,219,191,216,123,232,248,
+242, 99, 21,144, 38,215, 48, 34,223,106, 67,193, 29, 63,198,201,214,144, 26,243,145, 38,154, 11,103, 1,112,105,248,217,208, 36,
+ 85, 33,128, 76,228, 16, 29,146, 2,130,137, 8,215, 18, 42,137, 3, 97, 86,128, 80, 13, 89, 36,209,142, 88,148, 53,211,247,155,
+105,121,225,134, 48,162, 96,106, 96, 64, 0,100,232,128, 28,146, 51,160, 36, 59, 36, 26,116,123,125,128,233,249,141,225,216, 17,
+231,200, 19,121,231, 38, 59,229,150,245,235, 48,243,223,208, 57,215, 6,223, 51, 55,204,148,222,237, 57,124,252, 49,106,144, 24,
+199,116, 56, 71,227,146,181, 61,149, 37, 7, 53, 51,108,224, 77,104,217, 43,170,102, 14, 49, 89,189, 2,146, 33,167, 34, 54,141,
+125, 0, 41, 58, 1, 37, 0, 51, 97,229, 96, 92, 43, 71, 51, 65,128,126, 85,139, 36,246, 95,202,128, 68,212, 88, 84, 84, 36,241,
+218, 26, 91,107,232,128, 96,128, 6, 14,156, 3,244,128,173,129, 39, 73,193,214,205,219, 66,168,226,176, 95,120, 87,120,183,113,
+211, 38,169,251,232,124, 58,211, 36,177,190,156, 97,225, 29, 0,108,157,157,152,155,220,118,235,201, 88,219, 15,247, 65,166, 38,
+ 38,210, 56,154,230, 79, 59,122,145,206,189,105,196,211, 22,207,150, 17, 79, 74,120, 67,170, 89, 76, 18, 81, 10,145, 28,152, 67,
+165,156,251, 10,155, 4,225, 96,202, 0, 16,152,135,117,204,234,218, 80,216,164,185,151,168, 91,105,218, 97,228,191, 51,118, 24,
+ 65, 8,192, 3, 57,200,169,150, 3,114,136, 24, 85, 79,219,178,125,121,245, 24,247, 86, 54,110, 57,125,233,216,225,233,201, 9,
+ 68, 77, 67, 34,105, 28,194,136,200,212, 59, 50,243, 8,188,243,140,205,247, 30, 58,206,162,143, 30,197, 52,113,127, 27, 78,176,
+230,180,176, 65, 23,115, 19,211, 12, 50, 38, 59,198,218, 74,241,212,192,144, 0,208, 52, 3, 61, 73,143, 44, 77, 21, 37, 51,150,
+168, 82, 75, 28, 10,135,200,178, 58,168,173, 45, 34, 83,250, 99,227, 51, 85,163, 18,211,198,143, 60,104,230, 75, 0, 35, 2, 2,
+ 58, 67,135,228,147,209, 33, 18, 32,205, 78,207, 85,160, 51,243, 27,142, 31,250,102,148,130, 8,139,140,203, 16,161, 1,170, 17,
+129,153, 57, 2,112,115,147,229, 69,219,183,222,254,224,161, 71,130,158,124,147, 6,229, 8,213,136,105,156,205,165,205,185, 7,
+ 45,151, 79,219,227, 68,108,140, 26,152, 16,190,156,201, 43, 33, 17,170,203,185,154,138, 73,148, 88, 73, 28,132, 24,122, 85, 21,
+ 98,108, 82,248, 84,222, 0, 97,147,210, 17,153,170, 34, 18,162,162, 1,158, 64,171,107, 79, 88, 0,128,102,178, 22, 9,208,147,
+ 43, 18,204, 55, 61,183,113,229,248, 81, 55, 49, 35,194,234, 76, 84, 17, 40, 79, 84,228, 3,128,200, 37,233, 59,152, 4,120,202,
+ 57,219,110,221,123, 80, 79, 22,218,154, 68, 49,107,208,184, 18, 89,126,152, 38,147,198, 51, 73, 48, 28, 79, 20,243, 37, 48, 3,
+ 55,205, 84, 85, 26,103,130,102, 78, 72,185,146, 88, 71,230,126, 21, 6,117,140,162, 9,112, 83,179, 36, 84, 2, 50, 26,241,131,
+ 1,128,193, 28, 16, 24, 0,129,169, 38, 9,230, 34,209,198,105,119, 96, 38, 6, 17,113,152,182,251,232,177, 35,155, 55,111,150,
+ 80, 5, 77,196, 90,200,211, 88,121, 47,140, 8,205, 80, 9, 29,144, 1,128,241,133,167,111,188,247,208, 98,219,224, 57, 49, 81,
+ 28,139,229,121, 68, 55, 69,255,166,162,110,146,184, 38,216,103,199,212,160, 87, 0,227,219,220,144, 34,145, 26,233,139, 74, 72,
+164,230, 58,114, 21, 67, 29, 89,213, 18, 12,128,169, 68, 66, 52, 50, 80, 66, 74,254, 76, 27,221, 82, 68, 32, 69, 18, 20, 84,194,
+ 53,124,202, 84,126, 36,158,119,242, 98,145, 69,205,134, 33, 30, 58,116,104,221,212,164,153,245,171,160,102,165, 55,239,156,195,
+ 92,176,166,225, 65, 2, 72,135,162, 24,209, 76,233,119,110,223,218,158,147, 53, 46,160, 84,180,231,124, 45,149, 93,173,171,206,
+163, 9,144,234, 15,107,207,111, 28,227,144,142, 33,160,163,147,124,198, 24, 24, 54,162,161, 7,230,116,216,165,136, 24,130, 67,
+114,142, 90,192, 2, 0, 0, 20, 45,183, 52,144, 80, 20,137, 72, 68,149, 76,156,170,168, 36,166,185, 53,171,108, 56,167,196,192,
+ 72, 44, 12,205, 40, 69, 37,140, 84,151,206, 1,104,136,156,170, 14, 77, 39,208,143, 99, 30, 13, 39,223, 57, 42, 77, 46, 94, 56,
+253,206,125, 7, 79,166, 65, 77, 93,106, 77,152, 79,248,103,190,211,168,146,154,102,216, 51, 21, 28,201,224,208, 18,132,148, 48,
+188,228,177,160, 97, 66,167,141, 77,228,120,102,137,170, 41, 63, 78, 58,239,243, 81,228,104,156, 12,148,204,192,153, 41, 33,169,
+ 17,162,145, 9,145,168,122,163,228, 77,204,155,142, 60,100,115,186, 79,161,162, 22,197, 23,158,163,168,119, 46, 48,171,170, 32,
+ 34, 82,158,182,161, 28,139,243, 39, 54, 24,121, 59, 0,227,156,235,128,156,185,113,110,255,241,149, 19, 75, 13, 27, 37, 62,109,
+ 14, 45,109,116,107, 13,208, 90, 51,108, 66,141, 90,142,112,144, 78,223,109, 77, 49,115,139, 19,253, 92, 84,141, 91,210,117,234,
+145, 18,122, 34,240,142, 4,193, 12, 60,145,128, 52,232,143,170, 17,170,115,168,106, 78, 19,132,214,124,182,142,183,238, 26,152,
+205, 76, 85,163,104,233, 89, 84, 67,225, 3,115,130,186,211, 7, 33,141,186,106,154,167,190,112, 52,205, 10,214, 76,163,227,166,
+217,201,238,176, 94, 30, 84,107,163, 88,158,168,201,185, 98, 83,181, 54, 82,131, 60,102, 15, 35, 74, 63,140,245, 57,155, 26,100,
+204, 53,140, 50,151, 92,242,154,182,140,107,128,212, 21, 41,188,145, 2, 35, 26, 0,170, 48, 18, 53, 24,152,161, 42,161, 26, 88,
+115,226,143,182, 0,194, 88,235,180,193,105, 33,145,224, 75,213,210, 59, 81,141,133, 79,230,156,182, 42,159,201, 75,148, 49,175,
+230, 52,163,182,161,144,207,156, 71, 64, 64, 2, 59,123,203,252,109,251, 14,167, 15,105, 76, 76, 88,243,160,141, 53, 71,227,229,
+220, 13,155,243,150,180, 37,101, 91, 83,218,235, 26, 6,119, 58,172, 48, 87, 6, 13, 27, 92,109,228,213, 91,217, 33, 66,242, 62,
+216,160,127, 44, 72,168,162, 40,152,210, 45,164, 36, 83,112,154,134,237, 40, 95,191, 61,176, 54,153,180, 54,243,249, 73,144,133,
+247, 34, 18,189, 20,236, 75,201, 13,129, 81,240, 64,104,164,131, 6, 99,125,109,204, 39, 66,166, 31,168,186,243,244, 77,203, 99,
+ 2, 18,205, 7, 43,107, 51,251, 35,201, 91,235,216,169, 95, 89, 34, 13,249,109,172, 81, 99,163, 84, 50, 13,230, 52,161, 78,155,
+ 81, 20,107,244,171, 77, 13,146, 62, 3,129, 3, 50,151,159,194,180, 58, 5,164,140, 92, 38,228,139,242, 32,164, 81,158, 27, 24,
+249,245,214,210,129, 80, 13,156,169,164,193,109, 18, 47, 20,137, 88,114,137, 96,163,110,226,201, 40,243,216, 52,100, 1, 0,177,
+112,184,113,106, 18, 0, 60, 32,152,138,198,160,105, 20,202, 56,127,253,102,231, 97,173, 77,173,169,140, 50,204,216,160,214,107,
+ 95, 26,191, 51, 82, 31, 88,123, 38, 37, 0,165,233,116, 66, 3, 2, 3, 75,224, 15,128,166,198,128, 26, 53,237,112,108,206,143,
+132,241,108,219,154,254,162, 25,154,161, 81, 35,129, 38,190,166,179,224, 19,234,150,253,243,216,137, 8, 99, 19, 19,205, 52,125,
+ 62,126,124,162, 44,218, 98,149,149,171, 20, 67, 27,209, 96,235,100, 70, 90,211, 58,197, 70,197,181, 61, 20,163, 33,168,228,131,
+ 68,154,103, 32, 25, 5,172, 57,138, 12,218,110,231,120,135, 1,113,237,144,189,225,216,241,158,227,147, 39,150, 24, 4,205, 95,
+179,212, 96, 25, 17,174, 41, 89, 40, 18,146,145, 26, 17, 17, 89, 54,206,172,206,216, 72, 24,173, 77,114,219,163, 7,210,248, 84,
+ 59,239, 3, 0,170,194, 28,218,184,160,185,152, 0, 61,241,140, 53,104,121, 58, 99,150, 53, 46,181,241,129,160,209,209,170,109,
+203,118,236, 37, 91,155, 47,229,110, 46,226,168,131,213, 72,176, 61,246, 52,255,155,239,102,172, 30,198,155, 95, 99, 77,194,156,
+210, 35,174, 61,190, 35,229, 64,169,143,155,168, 13, 0, 15, 91, 8,140, 55,250,147, 6,153,140,177,148,198,190,146,173, 61,138,
+110,220,196,224, 97,207, 52,190, 96,252, 72,187,118,122, 10,214,156,118, 55, 86,142, 54,165,234, 88,227,207,210, 49, 6, 9,224,
+109, 43,154,246,136,137,166,208,200, 77,206,209,100, 85, 83, 88,143, 55,164,109,212, 53, 28, 85,197, 77,163, 81, 1, 79,156, 55,
+ 67, 56, 65,220,190,217,173,124, 54,242,200,124,160,189, 51,230,107, 96,141,116,116,228,160, 96,220,107,218,248,255, 37, 97,172,
+153,126,226,106,218,239,156,150,142,185,163, 10,173,220,199, 88, 83, 10, 13,106,169, 13,255,101,236,115, 70, 9,189,141, 57,189,
+145,224,146,114,106, 91, 21,217, 88,131,118,188, 47,157, 93,244,216,255,223, 3,119,239,222,253,240,177,189,127,191,137,154,239,
+210,123, 79,241, 55,240, 17,185,234,246,127, 1,113,167, 34, 48, 36, 75,123,196, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+ 0};
+
diff --git a/source/blender/editors/datafiles/vertexdraw.png.c b/source/blender/editors/datafiles/vertexdraw.png.c
new file mode 100644
index 00000000000..65977d10d99
--- /dev/null
+++ b/source/blender/editors/datafiles/vertexdraw.png.c
@@ -0,0 +1,327 @@
+/* DataToC output of file <vertexdraw_png> */
+
+int datatoc_vertexdraw_png_size= 10253;
+char datatoc_vertexdraw_png[]= {
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73,
+ 72, 68, 82, 0, 0, 0, 96, 0, 0, 0, 96, 8, 2, 0, 0, 1, 26,253,208,249, 0, 0, 0, 4,103, 65, 77, 65, 0, 0,177,143,
+ 11,252, 97, 5, 0, 0, 0, 6, 98, 75, 71, 68, 0, 0, 0, 0, 0, 0,249, 67,187,127, 0, 0, 0, 9,112, 72, 89,115, 0, 0,
+ 13,215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 0, 7,116, 73, 77, 69, 7,218, 7, 21, 0, 4, 18, 61, 67, 90, 24, 0, 0,
+ 32, 0, 73, 68, 65, 84,120,218,237,125,105,176,101,215, 85,222,247,173,125,238,189,111,236,225,169,213,173,209,178, 60,202,150,
+ 44,100, 97, 25, 12,132, 36,101,187,138, 24, 76, 2, 21,243,131, 84, 2, 4,200,143, 36, 54, 96, 6,131,141, 73, 42, 6,131,147,
+144, 98,168, 2, 42,144, 64, 8, 73, 5,108,170, 24,138, 64,254, 0, 33,102, 50,120, 32,128, 53, 11, 73,150, 90,234,185,251,141,
+247,158,179,247,250,242, 99,239,125,206,185,175, 91,182, 12, 38, 85, 84,249,232,245,235,115, 79,223,123,238, 62,107,175,189,134,
+111,125,107, 11,248,116,143, 27,110,188,241,246,219, 95,116,245,117, 2,120,199,119,190, 51,165, 72,192,204,104,214, 52,205,164,
+105,154,201,228, 93,239,252,174,252,166,230,109,223,244,205,251,251,123,128,140, 70, 51,163, 29, 93, 59,119,244, 72,187,117,100,
+255,220,199,110,190,251,239,233,153,103, 78, 55,109,187,128, 0,192,130, 25,237,107,190,236,231,214, 39,190,126, 52,204, 38,112,
+226,173,255,242,159,255,171,127,253,190,166,235, 58,230, 47,246,240,166, 47,248, 95,237,194, 27,195, 74,244, 22,166, 78,187,123,
+120,215,187,190,187,137, 93, 36, 72,146,166,149,112,249, 96,145, 71,170, 73,240,143, 62,122,111,215,117,146, 55, 41, 69, 18,128,
+209,173, 75, 73, 11,200,121,229,242,230, 99,103, 94,254,224, 83,119,133,208, 66, 77, 19, 83, 52,144, 38, 82, 93, 84,234,120,255,
+227, 47,253,248, 19,175, 14, 33,132, 16, 37, 65,104, 60, 37,209, 12, 0,180,187, 63,253,179, 71, 63,231,217,139,183,134, 16, 33,
+ 65,128, 68,177, 73, 41,145,144,100,102,255,243,119,223, 72,154, 89, 4, 27, 32, 63,116, 3,198, 38,197,100, 38, 32, 72, 34, 41,
+ 37, 32, 48, 57, 4,128,206,100,110,207,107,186, 66,127,182,186,186,118,235,173,183,154,241,224,224,224,240,220,221,123,239,189,
+175,127,195, 27, 37, 25, 73,179, 16, 66,158,184,223,248,141, 95,255,221, 15,126,176,188,233,109,111,251, 38, 65, 68,158, 55,110,
+172, 45,182, 54, 15,142,108,182, 47,190,229,169, 87,188,232,201, 83,119, 61, 6,160,105,219, 22, 64,158,220,207,127,229,135,238,
+126,241, 67,235, 27, 88, 93, 51, 2,161,211,123,222,243,189,239,126,247,119, 55, 93,236,242,180, 76,154,116,251,205,247,207,163,
+ 77, 34,167, 9, 18,158, 56,119,115,219,182,223,251,125,239,109, 98,215,145, 70,226,182, 27,159,152,239, 33,206, 64, 66, 93,106,
+125,229,151,127,231, 13, 80, 43,160,137, 41, 25,221,204,166,182, 51,159, 35, 72,109, 27, 30,217,185,229, 79, 30,126,205,188, 69,
+104, 58,161, 78,139,220, 23, 45,218, 14, 93, 55,251,131, 63,255,226,221,249, 86,176,209,220,165,148,140, 46,179, 51, 23,183, 94,
+118,139,126,237, 15,222, 0, 76, 66, 72, 8,101, 94, 64,134, 59,238,120, 5, 0, 73,251,243,213, 7,158,188,195,157, 36, 72,129,
+ 16, 65,144,198,198, 61, 2,193,204, 0, 72,201,140, 41,137, 36,225,164, 57,221, 93,248, 76, 29, 28,191,248,230,111,121,251,250,
+218,186,202, 88,202,120,140,102,193, 72, 6, 11, 63,242, 35, 63,116,230,204,153,107,223,232,219,190,253, 59,146, 39, 8,112,229,
+219, 18,160,145, 48, 26, 1, 90,160,153,145, 12, 33, 24,205, 66, 48,179,151,223,246,196, 87,253,227,255, 56,190, 81,179,191,191,
+ 15, 8,245, 25, 57, 58, 64,220,113,219, 35,119,220,246,240,137,173,203,235,211,110, 26,212, 24, 44, 32, 24, 56, 11,231, 63,118,
+234, 39,127,253, 95,252,231,159,254,185,135, 31,122, 8, 64,211,181,109,255,144, 34,152,213,129,124,209, 77,143,127,225, 61,191,
+215, 72, 97,106, 74,136, 98, 8,102, 13, 28,136, 0,119, 83, 10,182,191,159,190,250,171,255, 81, 8,225,123,222,253,221,225,238,
+207,185, 91,238,238,114,185,242, 47,225,250, 99,207,190,230, 21,127, 96, 49, 38,154, 28, 2, 33, 73, 76, 9, 49,201,231,126,208,
+ 77,126,245,131, 95,114,121,119, 67,238,238,254,119, 95,255,250, 38,165,136, 60,149, 0, 13, 16, 73, 63,178,122, 78,222,206, 35,
+ 77, 48, 67,211,169, 93, 96, 18, 92, 12, 59,243,227,159, 56,243,130,199,159,125,209,238,254, 49,178,115, 51, 51, 75,238, 77,140,
+110, 44,211,103, 2, 96, 0,132, 69,156, 59, 72,139,226, 20,251, 62,221,222,221, 58,127,229,228,211,231,110,219,155, 31, 51,203,
+134, 44, 26, 45,175, 64,115,111, 60, 69,129, 52, 72,116,167,153, 36,108,239,173, 30, 36, 11,174,200,230,129,135,239, 60,125,225,
+230, 46,174, 17,180, 96, 68,103,193, 8, 11,193, 19, 45,208, 24,104,230, 77,140,201, 8,202, 64, 16,230, 81,164, 61,117,230,228,
+173, 39, 55,158, 58,251,130,199,159,185, 93, 50, 18,102,145,164,187,133, 64,119, 11,102, 46,154,153, 72,202,130,133, 38,165,228,
+ 36, 93, 36,204,156, 52, 41, 45,218,201,111,127,248,139, 0,146, 34,147, 68, 9,102,249, 31,205, 12, 74, 50,152, 36, 89, 48, 56,
+193, 38,121,178,170, 56,217, 10,102,193,231,195,204, 0, 26, 37, 10, 48,130, 36, 40,201,140,142,178, 40, 17,196,207,220, 90,251,
+235, 89,180,253,113,252,248,241, 99,199,142, 3, 88, 44,230,151, 47, 95,222,223,223,255, 52,110,244,146,151,190,244, 45,111,249,
+170,162,153,245,175,188,244,205, 44,132,112,249,242,149,127,247,111,127,224,147,221,232, 59,191,235,157,158, 92,217, 30,150,213,
+111,204,183,179,114,132,124, 51, 11,205,164,121,199,119,124,251, 53,252,205,219,191,245,219, 82, 76,201,147,123,146,187, 75,202,
+ 38, 19,146, 60,255, 5,244,103,114,247,175,251,234, 59, 94,126,199,237, 31,252,189, 63, 95, 50, 35, 49,198,252,217,108,127,139,
+ 30,176,140, 8,196,145,149,253,245,217, 98,182, 26, 87,167,113,117,165,187,233,196,153,151,221,252, 23, 95,242, 58,188,241,139,
+255,225,235,223,252,129,165, 27, 65,131, 22,176, 40,149, 19,156, 77,187,151,190,224,177, 59, 94,248,200,169,173, 11, 43, 84, 51,
+ 65, 19, 64,194,102,198,104,106, 15,126,224,125,239,253,206,119,188,179,104,156,167,228,163, 35,219, 18,185,111,172, 92,122,205,
+ 29,191,255,185, 47,251,195,227, 43,231,208,185, 55, 84, 99, 41, 88,164,197,136, 36,135,230, 30, 23,223,255,253,239, 43, 55, 74,
+195,225,238,158,207, 54, 86, 47,222,126,243,195,183,156,124,220,219,212,137, 29,204, 29, 18, 36,128,240,133, 47,156,139,136,249,
+130,109,215,190,245,109,111, 3,208,184, 60, 7, 52,128, 1, 2,140,244,235,142,156, 57,181,245,148, 60,117,193,224,112, 87,114,
+166,122, 47, 38,156,187,178,117,113,231,136,123, 66,212,137,235, 78, 16, 53, 40,161, 8, 38,130, 52, 63,178,126,101, 99,245,242,
+204,246,227, 66, 97, 38,146, 22, 97, 45, 36, 5, 83, 72,234, 82,120,232,137, 23, 62,113,250,134,148, 82,158,168,247,124,223,247,
+ 53,114, 87, 86,190,108,251,221,166, 97,127,210, 28, 0, 93, 76,240, 14, 53,160,145, 58, 5, 67,139,233,163, 79,189,228,241,103,
+110,222,222, 91, 7,147, 36,144,109,219, 54, 82,126,167, 75,150,173, 27,173, 53,182,201, 5,193, 45, 79,169,156, 64,208,246, 98,
+235, 19,103,111,125,242,236,109, 87,118,143,184,100,116, 24, 16, 99,118,236, 78, 82,128, 89,242, 98, 23,146, 39,119, 7, 36, 38,
+119, 55, 73,243, 56,189,188,127,226,194,149, 83, 79,158,125,225,254,124, 83,160, 89, 18,203, 4, 0,177, 17, 36,151, 25,220, 13,
+144, 25, 83, 66,114,164, 86,110, 12, 2, 39,190,179, 88,187,184,125,242,161, 79,220,113,101,247,132, 25, 73,208, 92,110,193,228,
+238,121,157, 53, 74, 14,163, 59,128, 68,154,187,220,225,174, 72, 50, 42, 25,219,118,237,145,167, 94,246,232,233,151, 25, 73, 75,
+146,153,201,100, 48, 37,193,148,151,189, 26,135,224, 78,152, 25, 92, 78,113,209, 54,109, 55,137, 17, 38,155,119, 43,247, 63,113,
+231,233,179,183,130, 78, 35, 72, 41, 57, 2,204, 41, 18,132, 19, 36,224,141, 39, 55,131, 32,119, 0,162,217,254,124,186,123,176,
+210,117, 77,114,251,147, 71,239, 62,123,241, 6, 51, 25,229,130,185, 59, 73,185,220, 12, 32, 29, 70, 56,136,208, 72, 74, 14,194,
+ 73,152,153,187,239,205, 87,183,247,214,207, 92, 58,113,230,226, 13,103, 46,156,202,161,111, 74,201, 44, 64, 78, 51,202,205, 36,
+ 25, 76, 14, 35,232, 84,163,236,146, 73,129, 46, 17,136,209, 30, 63,253,130, 39, 78,223, 6,102, 55, 39, 51, 35, 33,185,211,204,
+ 29,102,238,128, 57, 21, 76,229,104, 92, 78, 90,190, 5,220, 85, 60, 7, 92, 78,208,157, 36,221,243, 64,100,144,172,196, 79, 18,
+168, 98,183, 36,111,228, 2,135,207, 3, 40,114,168,182, 69,146, 89,160,202, 58,203,250, 73, 65,132,160,124, 42,161,145, 28, 32,
+ 65,119,207, 1, 85,190,209,232, 94,148,242,136, 77, 46,145,176,242, 33,151, 2, 74, 50,129,207, 30,127, 41, 63,219, 31, 47,122,
+209,139, 95,249,202, 87,222,254,226, 23,111, 29, 63, 62, 92,149, 80,189,168,101, 95, 97, 52,218,229,203,151, 31,122,232,193, 63,
+253,211,255,251,232,163,143,126,102, 6,180,177,177,241,150,183,124,213,141, 55,222,228,238, 26, 2,102, 1,172,241, 55,203,233,
+224,215,135,195,134, 51, 51, 26,136,102, 50,249,192, 47,252,194, 31,255,241, 31,233,121, 43, 7,223,252,230, 55,191,242,149,119,
+122,113,199,121, 16, 75,159,102, 13,226,135, 65,244,113,253,225, 33,229,132, 99, 24, 86, 29,168,153,241,186,163, 79,191,239,223,
+255,252,163,143,157,253,228, 3,106, 94,252,146,151, 45, 22,109,149,199, 53, 30,132,125,114, 3, 30, 26, 77,142,124, 86,103, 11,
+ 51, 77,155, 24, 2,154, 38, 53, 65,193,208, 4, 15,166,233,180, 51, 98,107,243, 74,104,240,194, 27, 63,241,134,159, 63,233,126,
+115,210,234,189,175,255,208,222, 94,188,246,128, 82,236,234, 32,134,164,102, 52, 26,106,105, 64,195,228, 53, 22, 79,109,157, 13,
+ 65,183,156, 60, 61,105,210,145,141,221,198,212,152, 7, 34, 24,130,137,166,208,184, 25, 86,155,133, 5,172,109,204,141, 18, 27,
+ 34,252,210,207,126,233, 71, 30,121,221, 79,254,212, 79, 61,242,240, 35,135, 7, 20, 83,186,246,234, 39,178,201, 44, 66, 97,157,
+ 34,104, 58,105, 79, 28,189, 48,157,116, 47,186,249,241, 96,186,238,200,197, 73,240,181,149,197,100,226, 77, 80, 8, 52, 67,254,
+225,224,186,243,147,200, 98, 7, 25,113,144,210,193,215,125,237, 63,177, 48,251,137, 31,255,177, 39,158,120, 98, 44,161,248, 92,
+234,110,160, 19,132,209, 4, 39,141,193,226,108,210, 30, 93,223,126,241, 45, 15, 78, 39,241,134,173,179, 77,147, 2, 96, 0, 65,
+ 37,120, 0, 41, 6,138,148,101, 91, 12,119, 0, 8,169,248,124,163, 98, 74,177,139, 32, 82,106,191,225, 27,255,217,116, 50,125,
+199, 59, 74, 60, 26, 94,125,239,189,197,114, 87,228,165, 8, 76, 24, 20,171,196,159, 56,190,113,241,212,214,179,215, 31, 63,251,
+194, 27, 30, 95, 91,217,181,148,224, 72, 52, 25, 65,184, 85, 61, 46,107,129, 99,173, 84, 43, 37, 44,124, 18,221, 78,159,191,241,
+ 19,103,110,117,207,254, 66,201,211, 27, 94,255,198,211,167, 79,159, 63,127, 62,220,115,207,171, 75,214,153,255,228, 55,161,198,
+193,101, 60, 48,139,193,186, 83, 91,207,188,232,166, 71,143,174, 95,158, 78, 22,217, 30,168,100, 51, 5,189, 82,191, 16, 36, 1,
+ 41, 49, 57,146, 35,185,148,152,132,243, 87,182, 46,110, 31,123,230,220,169,115,151, 79,244,129,118,126,218, 87,189,234,110, 51,
+ 54, 57,250, 41, 83,237, 69,200,249, 76, 20, 1, 23, 65, 30,221,188,180, 50,105, 55,215, 46, 77,155,125,163,167,133, 0,113, 98,
+ 38,152, 36,135, 11,202,193,101,163,152,104,164, 25, 72,145,176,232, 34, 58, 76, 8,220,255, 23, 47,121,246,194, 13,251,237,122,
+ 74,201,204, 82,137,228,149, 17,167,191,245,197,127,187,113, 79,200,174, 63,231,250,121, 28, 78, 81,217, 34, 10,132, 48, 13, 7,
+235, 43,187, 43,211, 61,179, 5,201,152,161, 52,194, 12,150,127, 59,220,196,196, 24, 25,204,131,148,195, 48,128, 11,173,200,237,
+207, 30,187,107,190, 88,125,230,226, 77,123,243, 13, 22,151,170,154, 92,144, 53, 60,109,178,184,212,203, 60,139,136,130, 51,143,
+134,112,137,134,174,105, 22,242,228, 46, 51,165,148, 83, 12, 73, 76, 0,137, 96,136, 68, 67, 23,225,134, 72,116, 62,189,176,115,
+ 34,122,243,241,199,238, 74,106,182,119,143, 58, 2,101,180, 36,102, 76,129,198,113, 70, 75, 74,141, 39, 87, 1,145,144,129, 39,
+ 64, 40,177, 45, 80,174,192,225, 41, 42,117, 74,173, 84,140, 34,232, 50,115, 52, 70, 66, 9, 6,236,182,235,173,175, 92,186,178,
+245,196,153, 23, 38,159, 92,222,221,234, 13, 7, 73,208, 9, 49, 35, 11,148,193,220, 82, 73,222,129, 60,119, 77,146, 8,135,242,
+ 10, 47, 33, 21,137, 18,226,231, 19, 89, 86, 79, 39, 18, 24,133,160, 1, 90,138,177, 1,241,244,217, 23,204,219,213,179,151,110,
+184,180,179, 69, 88,245, 41, 9,164, 21,155,110, 25,111,161,140, 76,160, 1,137,178, 60, 16,166,140, 61,176,129,187, 50, 16,151,
+131, 38, 48, 71, 77, 32,229,142, 12,213,201,219, 69,216,231,202,124,165,233, 18,141, 66,130, 12, 81, 19,239,194, 99, 79,191,184,
+243,233,217,139, 55,180,221,170, 96,128, 8,207, 32, 67,214,144,148, 49, 96,129,132, 18,105,137, 50,230, 48, 18, 9, 32, 83, 69,
+169,220,178,132,242, 28,145,112,215, 32, 29, 12, 23, 56,111,167, 14,109, 46,166,237,188,177,224,147,105,108,219,233,131, 79,188,
+220,213,156,189,116, 42,169, 73,113, 34,128,116,210, 72, 33,209, 12, 25,143, 41, 56, 20,208, 79,117,214, 16, 32,199, 4,213, 45,
+131, 52, 52, 89, 12,164,220, 11, 34,153,255,146, 4, 25,152, 77,155, 14, 22,179, 54, 54,251,235,171,139, 56,105,231,147,157,115,
+155, 93,156, 61,125,254, 70,201,186, 56, 43,120, 28, 93, 2, 41, 51, 3,228, 78, 34,201, 12,144,156,198, 36, 24, 1, 57, 72, 81,
+164,165,156, 47,200,100,158,191,203, 27, 73,128,103,241,102,113,176,106,143,224,134, 18, 17,207,219,134, 54, 57,119,105,171,139,
+ 22, 83,179,187,191,225, 8,243,197,172,132, 74,114, 51,147,148,141, 65,114,103, 70,178, 0,131,231, 5,233, 4,225, 48, 72,102,
+132,144,165,227, 14,210, 41,203,107, 8,141,123,158, 64,185,203,140,238, 50, 51,185,231,167, 76,158,167, 0,238,130,235,226,246,
+241,139,219,199, 48, 40,189,114,242, 84, 84, 63,231,109,114, 18, 52,203,171, 67,146, 96,150,197, 98,130, 91,137,250, 9,119,208,
+250, 32, 84, 57,167,111, 84,133, 75,148,101,239,238,203,201,135,163,202, 73, 74,121, 58, 49, 88, 50,193, 29,245, 75,114, 86, 33,
+ 21, 97, 11,114, 89,249,234, 28, 62,100,111, 84, 66, 9,168,228,172, 40,247, 7, 26,165, 4, 82, 61,234, 72,100,155,213,155,209,
+113, 54,147, 95,246,177,107, 54,255,238,110,101, 77, 9,178, 98,225, 64,129, 20, 97,229, 59,243,146, 5, 85,131, 98, 72, 57,198,
+ 41, 3, 98, 25, 80,241,200,204,210, 44, 83,214, 63,125, 29,123, 47,216,241,149,154, 38,194, 29,200,174,102, 56, 43,190,133,130,
+ 74, 84,151, 61,145,103,188, 81,148,156, 5,185, 45,177, 5, 63, 85,206,241,217,227,179,199, 95, 61,115, 29, 98,239, 73,179,182,
+186, 54,157, 78, 87, 86, 86, 39,147, 73,190, 24, 99, 55,159, 47, 22,139,249,222,222, 94,202, 17,201, 95,235,128, 38,147,201, 61,
+247,188,250,142, 87,188,226,182, 23,220, 22,154, 90,113, 20, 97, 37,248, 46, 41, 32,153, 23,230, 99,143, 61,118,255,199,255,252,
+195, 31,254,112, 91, 11, 60,159,177, 1,125,233,151,189,249,206, 59,239,156, 52, 19,245,184,113,205,164, 71, 9, 53,171, 99, 44,
+ 25, 62,128, 16, 2,141,109,219,126,244, 35, 31,249,229, 95,254,165,191,210,128,154,166,185,243,206, 59,223,244,166, 47, 85,111,
+105,132,190,138,216,167,244,227, 12,127, 57,179, 95, 78,237, 73, 51,219,222,222,254,145, 31,254,161,189,189,189, 79,111, 64, 91,
+ 91, 91,111,122,211,155,110,186,233, 22,176, 31,202, 85,233,253, 56,177, 31,253,126,206, 49,229,232, 20, 8, 77, 56,123,230,204,
+127,249,153,159,185,120,241,226,243, 26,208, 91,223,250,214,213,213,117,151, 47, 37, 98,135, 4, 88,234,132, 28,101,245,163, 9,
+203, 69,137, 82,219,180,101, 36,164,192, 53, 27,171,237,233,167, 62,252,190, 31,252,149, 79, 57, 32,155,206, 86, 98,140,238, 30,
+ 61,142,112,253,242,227,185,124,225, 46, 87,146, 75, 42, 5,141,148, 95,186,114,137, 35,213,178, 98, 74,249, 83,201, 61,185,187,
+146,167,228, 41, 9,139,123,239, 62,249, 63,254,235,219, 54, 55,215, 62,197,114, 78, 41,245, 46,202,175, 57,163,117,106,144, 33,
+215, 94, 60, 14, 7, 67,227,211,105,219, 24, 38, 77, 52,195,180,233, 44,112, 26, 18,200,217, 52, 26,181,190, 58, 95, 95, 57,216,
+ 88,219,191,229,212,179, 52,251,232,111,222,249,227, 63,125,246, 7,127,236,137,231,164, 15,188,246,243, 62,175,166,173, 37, 56,
+ 28,126,164,171,214,225,216,209, 2, 98,176, 52, 9, 29,169,105,211, 5,243,166,137,193, 20, 66,108, 66,154, 78, 22, 77,147,214,
+ 87,246,214,215,118, 55, 87,119, 79,110,158,157,134,118,182, 50,127,237,189,235, 92,251,251,191,255,251, 31,185,182,132,212, 87,
+207,135,149,181, 4,128, 92,195, 11, 11,130,142, 31,185,180,190,122,112,116,125,231,186, 99,151,154,224, 71,215,119,205,208,192,
+205, 24,130,140, 8, 19, 15,166, 73,136,147, 16,155,153,115,218, 10, 13, 32,122,123,219,173, 55,188,247,189,239,121,231, 59,223,
+125,173, 41,203,216,196,115, 32, 50, 89,111, 75, 86,189,100,139,184, 50, 61,216, 88,217, 62,186,121,249,196,209,179,211, 73, 58,
+190,126,197, 26, 76,160, 96,176, 80,128,152,156,215,150,236, 7, 70, 70,180,169,139,141, 43,146,211,127,243,158,247,124,207,187,
+ 15,143,201, 84, 10, 83,159,244,200,117,190,250,174,173,163,231,110,220,122,250,198,173,167, 78, 93,119,250,248,250,249,153, 29,
+ 76, 57, 23, 32,135,136, 68, 58, 40,163,140, 34, 19,232,164,131,121,113, 0, 14, 36, 41, 18,110,102,223,249, 93,239,188,106, 64,
+207, 53,158,130,192,104,128,217, 43, 62,114,234,216,233, 23,156,124,252,198,235,159,190,229,228,147,215, 31, 59,187, 58,221,155,
+ 77, 14,144,156,201,221,152,211,101, 25, 17,202,185,147, 9, 76,137, 74,144, 18, 20,225,238,158, 32,223,220,216,252,250,111,248,
+198,165, 1,249,115, 28, 82, 46,197,200,229,240,188,216,125,214,236,175, 76,247,103,211,249,116,122,208,216,194,144, 98,162, 92,
+238,116, 49, 11,105,124, 36,135, 11, 73,200, 79, 29,165, 14,150,132,232, 74, 73, 41,121,242,116,251, 11,111,127,205,107,238, 27,
+ 41,245,115,225,121,158,211,146,250,155,128,252,250, 99,103, 66, 19,111, 57,245,228,250,202, 62,129,212,194, 76,113, 98,129, 18,
+ 13,228, 20,144, 59,130,229,187, 86, 52, 16, 18,208,194, 13, 9,161, 85,232, 98,104, 99, 48, 42, 87,180,190,226, 43,191,242,227,
+ 31,255,243, 92,117,182, 49,124, 86, 17,180, 90,140,132,132, 98,193,243,149, 16,218, 73, 88,120,100, 74,148, 35,195, 66,238,112,
+103, 6,189, 92,144,152,215,173,251,240,163, 34, 42, 38,103, 76,148,187,202, 31,151,123,140,241, 91,222,254,173, 85, 66, 99, 70,
+ 9,160,188,202,115,113, 69,176, 28,164, 11, 77,232, 38, 77,119,219, 13,127, 49,157,180, 43, 43,123, 57,173, 72,102, 36,130,195,
+ 11,197,128,238,185,246,165, 84, 97,210,190,210,204,164, 46,134,179,219, 39,218,110,214, 37, 43, 5, 47,152,220,131,217,108, 54,
+187,239,190,215,254,209, 31,125,200,198,238,162, 40,183, 23, 23, 33, 87,207, 53, 1, 28,244, 92,201,141,157,185, 35, 57,139,119,
+144, 60,193,157,238,202,149, 68, 47,213, 90,197, 84,240, 60, 23, 28,140,145, 49,134, 24,131,138, 91, 42, 18, 74,238,114,253,131,
+175,248, 10,146, 77,133,168, 74,226,227, 37,129, 25, 1, 68,162,133,116,108,227,226,116,210,173,205,246, 38,147, 22,158,212, 58,
+ 38,116,163,185,188,162, 26,116,128, 98,130, 68, 43, 80,148,211, 1, 87,162,165, 20,118, 15,214, 63,246,224,171,146, 55,109, 23,
+114, 21, 31, 48, 7,204, 61, 1,106,245,230, 47,255,242, 6,130,224,168, 73,111, 6,175, 0,170,242,139,178, 46, 17, 9,200,166,
+132, 34, 28,164, 23,132, 33, 87, 8,225, 96, 2,129, 8,152, 43, 4,122,198, 61, 92, 25,142,139, 98, 76, 60,104, 39, 41, 53,238,
+ 2, 4, 7,232, 48, 10, 6, 73,240,251,238,123,109, 3,121,117, 25,172,169,100,245, 23,217,167,153,192,180, 50,219,159, 54,209,
+216, 25,163,164,148, 51,211, 4, 51,144, 68, 18,192, 4, 73, 12, 66,227, 66, 80,134, 88, 58, 52, 73,205,206,254,198,147,207,190,
+160,237,102,151,182,143, 58,130, 59, 65, 55,154, 4, 58,100, 10,238, 78, 75, 41, 53, 46,101,208,211,107,182, 93,240, 69, 17, 57,
+ 67,119, 66,110, 22,205, 58,192,115, 93, 48,235,173, 5,184,128, 4, 4, 32,121,206,237,165,156,243,150, 0, 51,138, 9,152,183,
+147,203, 59,155,109,156,181,109, 3, 22, 68,222, 11,132, 72, 56,220,140,112, 58, 27, 1,116, 56,139,238, 64, 89, 39,144,223,143,
+194,165, 81, 64, 52,166,146, 72,139,146,104, 76, 9,102,117, 61, 26, 67, 33, 19, 42, 2, 38,236,118, 27,209, 39, 87,118,142, 93,
+222, 61,118,176, 88, 59,115,241,132,100, 25,184,224, 82,216, 0,154, 50, 76, 37,178, 41,152, 98, 30,151, 88,145,106,185,148,225,
+ 90, 56, 36, 89,136,100, 89,119,116, 9,185, 72,174,148, 96, 70, 21,109,227,196, 61, 5,203,211,189,119,176,210,198,233,179, 23,
+174, 63,115,241, 84,244,233,206,254, 17,203,136, 97, 38,100,141,216,149, 46, 89, 85,154,166, 56, 46, 14,161, 6, 74, 53, 54, 95,
+201,236, 22,121,130,215,101,159, 28, 36, 61, 9,150, 81,191, 98,145,205,185, 31,167,164, 93,217, 63, 14,242,226,238,117, 93, 55,
+187,178,187, 49, 95, 76,162, 38,114,247, 26,132,231, 53, 1,150,159,130,226,153,185,123,227, 69,125,157,158,225,242,170, 58,117,
+214,202, 68, 66, 46, 42,149,233, 34, 51,220, 2,132, 76,146,162,146, 34,108,123,190, 9,183, 7, 62,241,210, 69,183,186,189,119,
+172, 75,179, 62,218,228,128,131, 28,154,179, 97, 45, 75,106, 32, 40, 43, 81,133,133, 51,110,141,188,238,153,203, 12,217,241,187,
+171, 64, 76, 82, 22,185,228, 52, 67, 20, 23,221,170, 20,182,119,215,221,155, 69, 59,233,146, 37, 7,228, 26, 96, 25,100,164,198,
+150,199, 97,168, 40,145,187,178,115,205,201, 79,157,161,172, 80,229, 78, 4, 92,114, 71, 76,141,209,157, 76,102,140, 3,132,233,
+ 8,105, 30,218,184,250,212,217, 91,186, 52,121,252,153,151, 72,161,175,174, 25, 11,167,132, 68, 94,227, 20,189,100, 42,133,150,
+ 83,148,217, 44,163, 90, 86, 6, 86, 32,115,212,177,246, 39,222, 43, 94,242, 44,213, 84, 29, 42, 28,236, 34,163,135,182, 11,109,
+215,116, 93,227, 9, 62, 68, 87,240, 10, 30,150, 20, 98,200,250, 84,210, 81, 13,215,242, 89, 83, 12,114,111, 20,170,134,149, 57,
+203, 39,142,131,118, 58, 73,150,156, 72, 33,192, 33,117,104,208,217,165,221,173,103,207,223,212,198,217,153, 75, 55, 0, 6,101,
+100,176,208, 84,160,161, 90, 82, 88, 74,125,230,224,189,144, 6,247, 78,247, 70, 2,251,209, 20,171,205, 76, 9,129, 21, 48, 63,
+ 19,132,242,218,115, 21, 0, 81,160, 8,119,107, 83,104,213,164, 20, 64, 88,182, 27, 48, 65, 86, 22,173,101, 68,209, 74,117,201,
+ 29,153,132,162, 28, 64, 51,219,234, 18, 91,176, 41, 64, 97,173,191, 17, 61,162, 58,130, 94,101, 7,243, 89,215,132,197,124, 50,
+153, 68, 78,220, 26,157,126,230,198, 75,187, 91,123, 7,235,151,247,142, 75,150,165,226,162,153,128,252, 53, 52, 1,200, 72, 98,
+169, 83, 8, 48, 20,108, 26,197,208,101,104, 50,211,116,100,133,170,147, 63, 49,210,155, 60,206, 30,128,118,167,187, 57,173,200,
+ 41,162,141,205,124, 49,155,119,211,174,155,196, 24,170,182,148,180,106, 80, 22, 64, 37,178, 29, 49,248,176, 84, 75, 28,200, 49,
+ 21,133, 5, 80,172, 91,134,207, 85, 42, 66, 5,173,118, 15,123,139,181, 73,236,218,174,145,116,246,210,245, 73,225,204,133,147,
+ 87,246,142, 58, 38,133,187,233, 62,192,183,249,129,145,167, 65,185,162,224, 69, 95, 40,136,162,155,204,145, 45,116,149, 19,205,
+115,105,161, 47,220,229, 53, 56, 64, 49,142, 74,208,233, 98,128,171,139, 13,128,189,249, 90,219,205,246, 22,171,139,110,198, 90,
+247,203,163, 55,179, 92,166, 48,119,229, 18,128,104,230,101, 76,132,101, 8,154,164,155, 83, 86,236,114,161,106, 85, 9,149, 18,
+ 80,177,136, 69, 72,165, 40,147,215, 43, 99,108, 20,236,233,115, 55, 5,243,157,189, 13, 87,104,187,105,246, 57,101, 17, 1, 44,
+ 48,119, 14,117,104,244,140,161,103, 38,148,100,204,223,145, 11, 40,244, 10,170,203,229,134, 82,229,111, 84,220, 4,114,225,161,
+175,120,148,139,131, 49, 64,231,225,137,103,110,205,201,132,161,134, 7, 82, 79, 7,169, 92, 61, 24,242,210,133,229, 18, 65, 25,
+ 83,153, 6,214,143, 20,207,153, 89, 6,217, 57,187,172,175,137,103, 86, 87,175,136,210, 48, 26,175,225,246,144,214,192, 7,128,
+ 77, 35,251, 9,175,110,202, 7, 15, 5,229, 8, 20, 18,115,249, 26,114, 21,104, 99, 72,123,106,253, 5,153,173, 95, 77,106,191,
+202, 60,155,203, 98, 19,202,244,229, 53,234, 82,149, 95,173,137,214,199, 96,125, 42,148,194, 87, 78,177, 29,101, 40, 78, 9,197,
+166,245, 5,232,146,125, 65,146,245,143,146, 31, 50,187,214,234, 77,134, 60,180,207, 77,208,179, 45,135,122, 8,235, 51,148,240,
+ 46,143,173, 60, 64,249,126,228,202, 37,203,215, 21,146, 66, 97,236,194,107, 59, 11, 77,125,108,145,139, 98,144,215,137,235,197,
+208, 87,134,178,210,244, 19, 52,146,101,249,108,127,162,124, 82,244, 97, 36, 45,176,210,235, 6, 0,136, 98,149,147,108,217, 9,
+142,109, 26,234,224,112, 24,134,184,106, 52, 88,134, 38, 85, 34,188, 58,139,121, 24,234,171,111,101, 26, 71, 67, 82,159, 50, 91,
+ 22, 89,193, 14,203,148, 97,108,115,243,128,250, 44,178, 87,243,193,107,231,224,179,143,177,170, 14, 12,177, 67, 63, 81,101,241,
+140,240,102,244,106, 84,230,208, 70,232, 93,209, 71,119, 31, 97,124,234,149,186,183,126, 99,166, 99,173,151, 57, 7, 44,185, 40,
+120, 14, 13,133,156,198,169,215,154,161,102, 7,105, 25,179,251, 44,139,241,179,199,103,143,207, 30,127, 67,234,173,159,236, 22,
+228,198,230,230,145,205,205,245,245,141,163,199,142,110, 29,223, 58,122,236,216,209, 35, 71,214,214, 55,214,215, 87,167,211, 25,
+ 43,147,105,196, 36, 28,138, 22, 49,198,131,131,253,237,157,237,157,157,221,179,103,207,236,238,236, 94,217,190,178,179,189,125,
+249,242,229,157,157,157,191,121, 2, 90, 91, 91,123,201, 75, 95,118,243,205, 55,159, 58,121,242,232,209, 99,107,235,107, 77,211,
+ 64,215,226,208,142,234,179, 87, 21, 79,150, 79, 70, 28,181, 67,124,232, 24,227,254,222,254,149,237, 43,167, 79, 63,253,208,131,
+ 15, 62,252,208, 67,241, 51, 84,249,254,140, 9,232,228,201,147,175,190,247,222,187,238,186,123, 54,155,170, 39,150, 60,159,251,
+170, 4,202, 35, 92,170,188,100, 37,147,229,232, 58,215,146,251, 98,233,184,160, 91,122, 57, 89,234,171,130,114, 87,215,147, 79,
+ 62,241,219,191,245, 91, 15, 60,112,255, 40,110,254,255, 34,160,141,141,141, 83,167, 78,189,234, 85,119,191,228, 37, 47,181, 38,
+ 24, 77,125, 97,120, 20, 27, 28,146, 17,175,169, 52,228,161, 18,242,232,229, 85, 28,250,171,127, 47,119,205,177,100, 57, 67, 37,
+186,175,197, 95,186,116,233,255,252,206,255,126,224,129, 7, 46, 92,184,240,215, 34,160,147, 39, 79,222,121,231,157,183,223,126,
+251,201, 83,167, 74,227,146,180, 44, 20,125,242,168,137, 99,131, 52,178, 52,227,235, 75,198, 7,215,160,245, 95,147, 12,240,169,
+ 46,178,240,185,104, 22, 12,192,233,167, 31,253,200,135,255,224, 67, 31,250,179,182,251, 12,113, 80,222,245,174,119, 45,218,110,
+ 32,114, 31,138,211,245,252,226,201, 37,133, 33,175,190,120,141,183, 29,162,109,124, 18, 85, 58, 68, 93, 88, 34,213, 86,157, 42,
+157,149,107, 43,251, 91, 71,174, 76, 38,233,224,160,251,165, 95,253,200,175,252,218, 31,255, 85, 5,244,246,111,253, 54,141,153,
+238,207,169, 47, 87, 89,158,113,105,122, 89, 46,163,139, 87,171,210,242, 34, 36, 72, 24, 43,237,152, 50, 86,112,180,252, 83,145,
+131, 81,134,194,118, 36, 21,130,122, 21,106, 66, 10,150,204, 72,106,125,229,224,196,177, 11,179,105, 36,152, 60,116,105,109,239,
+192,255,195,143,254,230, 31,254,241, 51,127, 57, 99,213, 20, 58,212,161,214,146,107, 85, 95,117,200, 98,169,112,154, 56,124,134,
+188,250,125, 42, 20,202, 30,215, 40,133,255, 66, 96, 68,104,226,116,210, 25, 5, 34, 80, 77, 19,131, 57, 65, 35,154, 38,133,144,
+202, 66, 50, 53,150,169,171, 8,196,100,210,101, 9,134,224,235,179,253,141,181,189,252,158,141,149,189, 83, 71,207,207,166, 45,
+ 50,252, 76, 35,237,239,252,244,230, 65,119,195,207,126, 96,250, 67, 63,241,240,249,243, 23, 63, 61, 1,105,188, 57,193,115,180,
+ 17,233,147,172, 44, 93,245,106,124, 81,215,188,138, 16, 98, 8, 41,131,170,147, 73, 92,153, 45,242,195, 7,211,108,178, 48, 2,
+132, 17,193, 60, 4,207,134, 39,208, 45, 40,131, 81, 52, 53,150, 26, 19, 32, 11, 90,155, 30, 76,195,194,232, 36, 38, 54, 39, 91,
+176, 19, 67, 41,191,137, 64,100,180,215,221,119,251,230,117, 95,114,230,124,122,255, 47,252,252,195, 15, 63,252,188, 53,104,153,
+238,193, 81,122,123,237, 11,117,161,148,166,134,220, 69, 64, 1, 21, 29,100,253,215,113,129,187,255, 8, 48,157,180,215,109, 94,
+216,220,216, 11,150,140, 58,186,177,125,221,209,139, 77, 19,131,161,177,184,190,118, 48,177,206, 8, 26,140, 40,125, 43,203, 63,
+ 0, 66, 63, 96, 67,174, 91,100,232,141,185,168, 89,128, 85,162, 3, 68,209, 12, 1,222, 18,237,145,141,213,111,252,134,175, 77,
+194,127,250,169,159,121,228,145,135,159,151, 6, 93,165, 41,207,145,240, 95,131,165,147, 91, 61,180,180,172,134,122,237,184, 74,
+ 8, 50,102,163,106,214, 77,154,182,177,121, 99, 10,150, 26,107,205, 34,145, 32, 26, 19,114, 17, 62,228, 77, 36, 96,133,157, 92,
+154,157, 32, 24,203,164, 89,207,128, 7,232,181,198, 37,106, 82,192,226, 33,152,146, 67,209, 61,165,220, 49,239, 9, 8,255,244,
+ 27,190,126,127,111,255, 3,239,127,255, 3, 15,220,255, 73, 5, 52,248,171, 67, 79,121, 85,248,123, 85,227, 89,207, 70,206,165,
+184,210,169,207, 81, 69,142,101,149,109,174,108,223,124,226,244,218,108, 95,228,108,210,158, 56,126,225,200,198, 54, 5, 26, 2,
+ 20,232,217, 78, 91,128, 81, 20, 24, 69, 66, 13, 20,138,108, 50,170,198, 92,211, 45, 56,113, 97, 35,249,208, 25, 3, 16,150, 10,
+106,101, 25, 8, 76,185, 0, 22,137, 88,200, 56,160,224, 41,249,202,202,202,215,124,205,215,158,126,230,244,127,255,111, 63,247,
+ 92, 49, 84,248,220,215,188, 70, 24, 67, 71,122, 14,155,179,244, 79, 61, 25, 77,207, 29,143,247, 36, 54, 66,211,233,252,216,198,
+229,217,244,192, 44, 77,154,184,185,182,179, 50,157,195,100,230,141, 37, 74,165,219, 5,165,207, 2,130, 81, 8,165,181,133, 86,
+156,159,245,123,165,112, 28, 96,149,106,109, 63,155,153, 6, 83,154,129, 37, 0, 41,133,115,151, 79,156,189,116,170, 77, 77, 38,
+180,184, 44, 3,216,155,155, 71,190,240,139,190,104, 99,125,243,193, 7, 31,184,134, 6,121,173,249, 60,143,136,155, 35,157, 46,
+181,184,225,100,120,149, 27, 23,180,177,186,187,177,186, 27,204, 73, 63,182,177,125,211,201,167,143,172,237,228, 27, 77, 67,244,
+232,217,184, 36, 3, 67,105, 46,204, 13, 39,129, 32,161,192, 80,138, 1, 67,121,160,122,202, 97, 14,250, 18,248,224,103,218,242,
+ 56,201, 40,154,216, 80,104,101,209,217, 69,235,186, 80, 36,108,185,183,156,201,147,203,239,187,239,190,215,190,246,181, 63,250,
+163, 63,252,236,179,207, 46,105,208,189,247,222,251,124,147,145,165,117,147,109,116, 53,238, 99,155, 92,106,126,190, 50, 61, 88,
+157,237, 55, 33,134,144, 86,103,251, 39,142,158, 95,153,206, 73, 5,115,203,196,137,106,177,124,136,179,115, 69, 47,135,199, 53,
+ 82,174,177,226, 33,186, 98,223,124, 57, 6,159, 5, 40,229, 33, 64,153,140, 7, 0,232,226,228,220,165,235,159,185,112, 67, 27,
+167,227,112, 88,203,254,245,243, 63,239,117,171,107,107,121, 83,157,162, 65,207,165, 61,189, 65, 42, 15, 94, 77, 11,106,173, 86,
+189, 49,214, 56, 67, 83,142,104,204,226,250,234,206,201, 99,103, 38,147,142,208,234,236,128,140,146, 7,203,136, 60,243,174, 55,
+185, 18,158, 43,172,133,215,208,119,172, 64, 18, 83,190,154, 75, 92,227,248,225,234, 64,182,206, 86, 33,147,128, 93, 12,251,139,
+181, 46,206,204,212,198,201,206,193,106,242,218, 91, 4,244,109, 49,169, 82,135, 29,144,233, 11, 94,247, 5,215,159,184,254, 23,
+127,241,253, 25,108, 9,247,220,243,234,107,144, 21,235,111,149,250, 35, 6,208, 95,172,253,211, 42,118,157,245,146,104,116,154,
+ 19,106, 66,220, 58,114,241,250,227,231,214,215,246, 86,166,139,217,116, 62,181,150, 33, 23,128, 12,163,248, 91,189, 37, 95, 10,
+200, 75,190, 95, 48,129,122,177,148, 65, 36, 87,173,139,151, 26,132, 4,150,218, 68,130, 4, 39,187,212, 28, 28,172,206,227, 52,
+198,102,209, 78, 47, 93, 57,126,225,202, 86,114, 43,228,136,222, 94,212, 2, 10,107,121,228,196,137, 19,119,221,117,215,253,247,
+223, 63,159,207,195, 61,247,188,250,208,106,210, 82, 82, 62,120, 8,214, 13, 16,106, 10,149,175,100,161,229, 86,172, 52,155,182,
+211, 73, 59, 9,113, 58,105,143,109, 92, 57,182,113,169,105, 58,163, 2, 83, 8,201,114, 35, 95, 41, 26,114,144, 57,176, 36, 38,
+ 13, 75,167, 80,116, 84, 93,184, 10,235, 68, 85,129,251, 10,183, 82,158, 84, 58,205, 65, 23,231,221,236,220,229,235, 46, 92,222,
+218,222, 63,178,189,183,121,113,231,248,238,254,102, 74, 65,203,145,138, 48, 30, 70, 97, 2,172,174,174,126,222,231,127,254,199,
+ 62,250,209, 6,135,189,119, 14,247,202,134, 68,197,254,130,116, 8,165, 58, 58, 10,129, 10, 75, 37,155,209, 0,159, 77,247,103,
+147,150,192, 36,116, 43,147,189, 73,179,152, 88, 7,194, 76,136,222, 83,108, 20,152, 3,188,188, 17, 93, 94,169,181,219,174,120,
+116,137,116, 88,112,137, 86,170,135,185,109,183,199, 66,234,188,122,102,109,230, 94, 61,211,130,105, 98,148,246,231,179,211,231,
+ 79,157,189,120,131, 68,201, 14,186, 89, 23,173, 84,206,200, 94, 30,165, 15,173,246, 76, 59, 5, 50,239,134,242,205,223,252,246,
+ 70, 46, 45,101,157, 85, 52,172,237,140, 14,193,243,150, 63,200, 12,167, 44, 69,121,110,202, 44, 91,118,201, 36, 55, 36, 99, 52,
+136,140, 64, 97,228,231,122,162,135,106,191,115,151,163,143, 93, 53, 9, 48,137, 4,141,162, 92, 12,153,167, 37, 6, 67, 38,243,
+160,210,182,250,120,154,189, 81, 76,153,141,192,216, 78, 14, 22, 43, 73, 1,192,238,193,198,124, 62,105,187, 32, 80,178,148, 66,
+174,176,177,164,132,131,210, 14,221,160, 99, 73, 9, 22,172,209, 40,151,207,202,210,191, 35,219,177,190,220, 59,182,218,234, 41,
+ 14,181,222, 75,136,230,147,176, 88,157,238,129,152,132, 56,157,204,131,117, 22, 98,105,181, 78, 46, 99,173,112,103,174, 57, 0,
+ 40,149, 7,206, 45,147, 38,207,105, 39,106,159,178, 27, 72, 26, 20,178,229,224, 8,110,132, 0, 70, 52,209, 67,182, 7,151,118,
+143, 63,117,246,150,131,249, 42,192, 54, 78, 47, 92,185,110,127,190,177,132,179,176,246,159,171,239,197,206, 46, 18, 28,247,104,
+103, 34,105, 66,211,211, 0, 56, 54,130, 40,253, 16,163,182, 61, 42,115, 70,157, 94, 22, 98, 85,169,236,211, 74, 23,170, 56,112,
+173,115, 57, 54,191,207, 37,120,170,177, 20, 15,109,146, 80,220, 34, 89,182,134, 43, 36,159, 28, 25,169,132,136, 3,233, 46, 87,
+169,235,230, 10, 93,154,116,105, 82,250,128, 23,211,249,162, 89,116, 13,129, 54,154, 11,181,127, 25, 16,113,141, 28,115,148, 60,
+176,152,220, 76,187, 0,233,134,102,160,185,176,134,199,165, 35, 89,125,134,161,108,141, 7,190, 94,175, 83,197,100,176, 58,151,
+ 16, 58, 90, 12,230,102, 94,235,222, 94,156,132, 23,160, 35,147,188,122, 22, 1, 71,109,201,227,112, 49,139,201, 10,135, 15, 94,
+100, 39,144, 93,154,236,204,143,116,113, 34, 48,166,201,249,203,215, 95,184,114, 93, 74, 13,192,182,155,238, 47,214,146, 55,172,
+ 11,250, 57,240, 8, 93,163, 47,165,108,209, 40, 84,133, 50, 48,107, 16,242, 38,114,101,231,129, 44,146,165, 59,140,224, 34, 22,
+229, 31,217,240,234,130, 60,215,196, 11,197, 50,199,251,169, 6,234,230,101,195,131,108, 0,232,125,131,105,222, 55,168, 54,254,
+143, 36, 37,140, 66,103, 14,111,201, 16, 0, 0, 7,126, 73, 68, 65, 84,179,210,210, 78,116, 30, 22, 93,232, 98, 3,177, 75,205,
+ 98, 17, 22,109,147,188,129,216,121,232,162,245,150,129, 84, 38, 7, 12, 51,125,245,127,185, 80, 95,247,216,203, 45,184, 57, 74,
+146,167, 6, 25,147, 47,114, 99,191, 55, 92,181,100, 78,229,154,127, 79,137, 5, 51, 59,119, 4, 34,102,237, 40,122,146,121,188,
+148,146,208, 41, 43, 16, 43,239,187, 64, 20,157,242, 46, 20, 2, 97, 98, 83, 54, 65, 67,202,137,164,114,184,180,159, 86, 59,159,
+230,221, 13,118, 14,142,156,187,116,125,219,173,208, 20,227,100,239, 96,163,141,179,186, 45, 98,112,133,202, 57, 15,153, 91,120,
+ 77,240,225,154,248,213,144, 30,244, 73,205, 40,163,105,138, 57,247, 74,177, 7, 7, 46, 78,150, 87,191, 95, 4,138,171, 31, 1,
+130,245,202, 40,150,205,174,220, 84, 50,198,164, 18,132, 19,189,238, 22,146, 93,245,150, 84, 38,196,231,111,139, 53,177, 16, 99,
+ 98,140, 33,147, 78,219, 69,115, 48,159, 45,186,153, 64,247,176, 55, 95,137,105,122, 21,208, 91, 40,107, 82,255,188, 68,191, 15,
+ 71, 49, 67,229,207, 82,245,106,180, 12,150, 48,155, 16, 26,120, 54,187,172,168,151, 19, 80,161, 42,215, 6,114,170,103,122,107,
+128, 78, 11, 79,174,216, 78, 65, 80,114,166,196, 76,242,140, 98, 26, 21, 4,205, 51, 77,188, 56,248,222, 7, 73,244, 24, 16, 72,
+215, 34,206,182,247,142,117,113, 10, 32,121,115,121,231,248,238,124,195,189,201, 47, 23,221, 76, 10,217, 48, 39,239, 55,126, 29,
+131,184,134,222,133,179, 24, 10,179,190,147,161,238, 60,233,149,233,154,233,216, 80,221,154,210, 6,187,146,149, 40,165,226,230,
+ 57,222,162,230, 80, 13,172, 54,218,140,240,211,209, 46,141,245,175,158,186,230, 66,144,195, 84,188, 88,141,174,146,171,150, 2,
+107,251,124, 30,131, 81, 78, 68,128, 33,201,246,231,171,243,118, 6, 49,250,244,210,238,145, 43,187,199, 37,187, 86,157, 40,235,
+136,106, 20, 87,152,239,121, 71,164,158,118,132, 66, 90,172,251,230,100,169,161,144,212,115,142,212,135, 67,121, 83,182,129, 5,
+ 85,224, 14,244,105,178,107,112, 93, 61,117,170,127,123,225, 43, 14, 87,234,215,170,210,145,221,145, 82, 72, 41,120, 50,137, 41,
+ 5, 12, 35, 40, 91, 56,228,237, 61, 28,161, 95,186, 7,251,107, 59, 7, 71,220, 3,169,182,157, 93,220,185,110,222,174,128,148,
+236, 96,190,234,222, 79,222,120, 11,183,236,148, 75, 44, 80,218, 50,138, 96,150,252, 86, 33, 20,215,166,130,154,218,213, 61, 28,
+ 14,225, 16, 99, 24,176, 26,220,166,132, 3, 78, 31, 44, 11,234, 22,119,227,207,121,229,117, 15,189, 13,142,165,109, 85, 37,122,
+ 98,151, 66,222,231, 32, 37, 75,202, 49,110,222, 50, 83, 86,186, 46,144,148,187,107, 32,218,238,124,253,220,165,235, 98,156,192,
+176, 88,172,108,239, 31, 93,180, 43,163, 90,152,138,207,173, 58,128, 26,221, 13,233,127, 1,196,251,206,147, 66,231,237,119,125,
+240, 28, 57,136,222, 75,179, 20,100,106,103,196,115,148,211, 9, 52,181,178,188,108,220, 85,147,120, 12, 97, 96, 79,146,204, 61,
+ 84, 67, 70, 89,183, 73,113,169, 75, 22,218, 64,163, 11, 93, 12, 49, 6,203,253,105,102, 65, 73, 38, 23, 82,178,253,118, 53,249,
+ 68,176,148,108,103,119,125,255, 96, 37,166,169,136,148, 38, 41, 89, 69,105, 92,232, 19,250,146,175,147,160,198, 51, 85, 56,227,
+172,190,186,228, 10,204,140,226, 10, 47,149,198,139, 28,251, 82,100,229, 25,147,142,220, 28,210,167,201,236,187,158, 42, 21,120,
+ 20,251,212, 20,107,160, 20,228,109,170, 6, 61, 25,154, 96,250, 37,215, 15,221,157, 93,156,228,173, 83,166, 19,107,187, 73,236,
+154,172,169, 22, 28,193, 13, 98, 64,140,205,153, 75,167, 46,110, 31,151, 12,178,253,118,117,239, 96,195, 61,140, 80,246, 98,227,
+ 74,183,134,247, 59, 0,215,111,103,101,192,214,245,212, 95,207, 13, 96, 53,142,203, 94, 39,135,157, 37,254,170, 27, 19,144, 61,
+231, 85, 28,161,236,125,119, 33, 33, 33, 59,136, 30,114,238,151,213, 50, 79,186,218,176,250,154,133,158,175,165,194,129, 0, 33,
+ 57,187, 24, 72,116,157,197,100,209,141,209,114, 89,193,211,196, 76, 0,230,221,180,235, 66,138, 37,120, 73,201, 52, 20, 12,122,
+ 30,248, 16, 55,140, 59,126,122, 49, 21,207, 51, 24,155,234, 47,122,143, 53,164, 4, 69,113, 48,222,240,196,235, 30,161,234,193,
+ 98, 14,177,126, 6, 75,201,190,170, 49, 44,240,186, 81,202,240,146,133,111, 42,178,111,167,170, 11,172,154,191, 60,131,201,121,
+176, 88, 89,132, 41,169,198,226, 70,187,186,232,166,128, 92, 54,111, 87,182,119,143,100,255,221,197,230,242,238,214,222,124,195,
+243, 94,248,133,129, 32,176, 80,217,251,201, 89,218, 9,134,163,166,164, 44,114, 26,139, 97,100,239,172, 42,188,166,220,188,213,
+199,134, 94,204, 87,221, 7, 44,231,162,217,242, 14,230,108,104, 11,233, 93,116,131,254,125,125,178, 90, 3,156,129,248, 92,109,
+129,247,189, 82,195, 36,123,239, 21, 51, 5, 89,117,155,235,152,172,237, 26,185, 92,161,139, 77, 23,155,148, 76,100,242, 38, 57,
+221,139, 87,206,125, 16,101,207,169,161,189,102,153,235, 95, 10, 73, 5,138, 45,173, 10,165, 63,104,137,159,156, 21,176,247, 82,
+ 5, 0, 43,102,168,210,155, 80, 50,224,226,172, 52, 50,221, 61, 68, 90,195,205, 38,119,245,212,205, 87,189,119,225,149,203,221,
+219,174,234,197, 42,130,226,131,255,239,251, 85, 20,147, 33, 25,136, 14,205,211,103,111,124,246,252,169,130,154,203,114, 99, 40,
+ 4,135, 85,247, 60,254,142,195, 18,233,215,126,223, 21, 85,165,211,111,196,230,253,125, 10, 11,187,223,160,173, 60, 93, 54,210,
+217, 10,247,160, 4,164,220,253,195, 26, 6,148, 94, 74, 56,100,163,244,140, 4,212, 44,141,173,194, 65,114, 31,216, 96,181, 51,
+161, 14,189, 54,118, 93, 21, 41, 29, 98,187,184, 55,135,216,114,203, 4,153,186, 60, 70,166, 62, 55,233,244, 55, 28, 85,123,250,
+150,177,170,221, 40,221, 41,213, 60,179,246,125,169,174, 78,175,106,103,125,254,193,222, 69,201,170, 49,174, 70,200,115,199,247,
+ 32,157,108,231,155,190,205,130, 21,245, 40, 0, 69,205,102,252,240,174, 80, 25,180, 41, 12,246,222, 6, 93, 61,243,203,123,166,
+176, 87,230, 67, 6, 62,175,219,156,124,140,164,163, 94, 97,115,199,197, 82, 51,164,188, 90,160,126,214,150,235,188,213,153,229,
+ 22,155, 10,229,104, 8,166, 41, 91,102,252,131,148, 3,166, 65,134, 36,164,166,239, 47, 27,218, 66,106, 11,142,234, 86, 95,249,
+210,178,117,168,150,105, 20, 95,143,115,129,195,178, 25,245,140,245,129,185, 70,219, 86, 14,126,187,239,162, 67,209, 6, 91,142,
+160,189, 50, 31, 71,134,178, 71, 30, 10,153,118, 8,103, 80, 91,159, 43, 8, 88, 90, 47, 61,255,111, 13,198,153,169,242,255,190,
+161,223, 68,160,108,104,230,131, 20, 11, 17,166, 90,152,113, 39,137,143,116,164,111, 1, 26,154, 93,198,146, 88,214,156,220,231,
+225, 61,213,242,144, 64,235, 59,198, 77, 41, 61,146, 94,227,197,250,217,254, 67,242,218,190, 51,244,117,214,116,106,212,142, 50,
+166, 99,104,100, 84,133,220, 88, 93,187, 86,250, 29, 84, 52, 42,185,213, 16,194,106,119, 84, 95,130,214,168,209,102,220, 97,179,
+212,233,115,213, 75,141,187,112,198, 59,112, 92, 85,222, 27, 90,118, 48,106,174,170, 86, 86,163, 37, 56, 52,241,228,105, 25,192,
+244, 62,178,198,232,205, 42,157, 70, 94,125,241,168,187, 69, 61,208, 83,247,226, 97,223, 69,163,178, 36,189,175,236,140, 90,107,
+213,168,134,103, 28,250,188,170,118,140,242, 96,114,200,197, 70,113,208, 82,235, 15,175, 98, 41,142,229,178,156, 36, 99, 20,236,
+160,138,134,203,109,124, 53,196,169,171, 73,125, 29, 62, 55, 90,142,118,102, 40, 11,175, 34, 47,242, 26, 50,122,238,237, 45,254,
+203,135,116,169,120,172,146,197,149,221, 91,221,202, 69,246,152, 89, 51,124, 43, 75, 96, 82, 65,246,161, 30, 50,242, 98,195,147,
+244,162, 57,148,236, 95,181,202,176,156,208, 14,150,104,108,243, 70,149,127,142,235,202, 94,173, 16,150,182, 25, 2,135, 62,246,
+161,229,137, 86, 21,139,125, 71, 99,222,102,164,199,141, 80,218,205,151,222, 83,195,159,108,152,122, 72, 58,111, 58, 94,191,211,
+107, 91, 86, 62, 93,170,126,247,201, 79, 79,182, 58,100,149,251,142,178,241, 71,134,125,186, 71, 31, 25,127,170,202,183,220, 64,
+ 90,166, 58, 74,213, 30,121,223, 40, 60, 44,175, 90,129, 30,122,207,107, 5,161,194,158, 53, 50, 28,154,137, 11,216,126,104, 43,
+ 48,245, 27, 42,114,153,217, 43,201,253,255, 1,198,119,120,131, 48,187, 25,202, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+ 0};
+
diff --git a/source/blender/editors/gpencil/Makefile b/source/blender/editors/gpencil/Makefile
index 9bc5f491a83..f3e781a0369 100644
--- a/source/blender/editors/gpencil/Makefile
+++ b/source/blender/editors/gpencil/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/gpencil/drawgpencil.c b/source/blender/editors/gpencil/drawgpencil.c
index 2b26f4a295d..284dac7a0ae 100644
--- a/source/blender/editors/gpencil/drawgpencil.c
+++ b/source/blender/editors/gpencil/drawgpencil.c
@@ -32,7 +32,6 @@
#include <math.h>
#include <float.h>
-#include "MEM_guardedalloc.h"
#include "IMB_imbuf_types.h"
@@ -44,11 +43,9 @@
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
-#include "BKE_blender.h"
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_gpencil.h"
-#include "BKE_sequencer.h"
#include "BKE_utildefines.h"
diff --git a/source/blender/editors/gpencil/editaction_gpencil.c b/source/blender/editors/gpencil/editaction_gpencil.c
index dff0839b5bd..d76e5fcf17c 100644
--- a/source/blender/editors/gpencil/editaction_gpencil.c
+++ b/source/blender/editors/gpencil/editaction_gpencil.c
@@ -31,23 +31,9 @@
#include <stddef.h>
#include <math.h>
-#include "MEM_guardedalloc.h"
-
#include "BLI_math.h"
#include "BLI_blenlib.h"
-
-#include "BKE_global.h"
-#include "BKE_utildefines.h"
-#include "BKE_blender.h"
-#include "BKE_fcurve.h"
-#include "BKE_gpencil.h"
-
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
-
-
-
#include "gpencil_intern.h"
#if 0 // XXX disabled until grease pencil code stabilises again
diff --git a/source/blender/editors/gpencil/gpencil_buttons.c b/source/blender/editors/gpencil/gpencil_buttons.c
index 17bafa3d399..87a9c3cd52f 100644
--- a/source/blender/editors/gpencil/gpencil_buttons.c
+++ b/source/blender/editors/gpencil/gpencil_buttons.c
@@ -30,7 +30,6 @@
#include <stdlib.h>
#include <stddef.h>
-#include "MEM_guardedalloc.h"
#include "BLI_math.h"
#include "BLI_blenlib.h"
@@ -41,15 +40,12 @@
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_gpencil.h"
-#include "BKE_utildefines.h"
#include "WM_api.h"
#include "WM_types.h"
#include "RNA_access.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "ED_gpencil.h"
@@ -126,7 +122,7 @@ static void gp_drawui_layer (uiLayout *layout, bGPdata *gpd, bGPDlayer *gpl)
/* locked */
icon= (gpl->flag & GP_LAYER_LOCKED) ? ICON_LOCKED : ICON_UNLOCKED;
- uiItemR(subrow, &ptr, "locked", 0, "", icon);
+ uiItemR(subrow, &ptr, "lock", 0, "", icon);
/* when layer is locked or hidden, only draw header */
if (gpl->flag & (GP_LAYER_LOCKED|GP_LAYER_HIDE)) {
@@ -164,7 +160,7 @@ static void gp_drawui_layer (uiLayout *layout, bGPdata *gpd, bGPDlayer *gpl)
/* frame locking */
// TODO: this needs its own icons...
icon= (gpl->flag & GP_LAYER_FRAMELOCK) ? ICON_RENDER_STILL : ICON_RENDER_ANIMATION;
- uiItemR(subrow, &ptr, "frame_lock", 0, "", icon);
+ uiItemR(subrow, &ptr, "lock_frame", 0, "", icon);
uiBlockSetEmboss(block, UI_EMBOSS);
@@ -194,11 +190,11 @@ static void gp_drawui_layer (uiLayout *layout, bGPdata *gpd, bGPDlayer *gpl)
/* color */
subcol= uiLayoutColumn(col, 1);
uiItemR(subcol, &ptr, "color", 0, "", 0);
- uiItemR(subcol, &ptr, "opacity", UI_ITEM_R_SLIDER, NULL, 0);
+ uiItemR(subcol, &ptr, "alpha", UI_ITEM_R_SLIDER, NULL, 0);
/* stroke thickness */
subcol= uiLayoutColumn(col, 1);
- uiItemR(subcol, &ptr, "line_thickness", UI_ITEM_R_SLIDER, NULL, 0);
+ uiItemR(subcol, &ptr, "line_width", UI_ITEM_R_SLIDER, NULL, 0);
/* debugging options */
if (G.f & G_DEBUG) {
@@ -212,7 +208,7 @@ static void gp_drawui_layer (uiLayout *layout, bGPdata *gpd, bGPDlayer *gpl)
/* onion-skinning */
subcol= uiLayoutColumn(col, 1);
uiItemR(subcol, &ptr, "use_onion_skinning", 0, "Onion Skinning", 0);
- uiItemR(subcol, &ptr, "max_ghost_range", 0, "Frames", 0); // XXX shorter name here? i.e. GStep
+ uiItemR(subcol, &ptr, "ghost_range_max", 0, "Frames", 0); // XXX shorter name here? i.e. GStep
/* additional options... */
subcol= uiLayoutColumn(col, 1);
@@ -243,7 +239,7 @@ static void draw_gpencil_panel (bContext *C, uiLayout *layout, bGPdata *gpd, Poi
col= uiLayoutColumn(layout, 0);
/* current Grease Pencil block */
// TODO: show some info about who owns this?
- uiTemplateID(col, C, ctx_ptr, "grease_pencil", "GPENCIL_OT_data_add", NULL, "GPENCIL_OT_data_unlink", NULL);
+ uiTemplateID(col, C, ctx_ptr, "grease_pencil", "GPENCIL_OT_data_add", NULL, "GPENCIL_OT_data_unlink");
/* add new layer button - can be used even when no data, since it can add a new block too */
uiItemO(col, NULL, 0, "GPENCIL_OT_layer_add");
diff --git a/source/blender/editors/gpencil/gpencil_edit.c b/source/blender/editors/gpencil/gpencil_edit.c
index c487c0469ba..e0d257ca3bf 100644
--- a/source/blender/editors/gpencil/gpencil_edit.c
+++ b/source/blender/editors/gpencil/gpencil_edit.c
@@ -45,21 +45,15 @@
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
#include "DNA_view3d_types.h"
+#include "DNA_gpencil_types.h"
-#include "BKE_armature.h"
-#include "BKE_blender.h"
#include "BKE_context.h"
#include "BKE_curve.h"
-#include "BKE_global.h"
#include "BKE_gpencil.h"
-#include "BKE_image.h"
#include "BKE_library.h"
#include "BKE_object.h"
#include "BKE_report.h"
-#include "BKE_utildefines.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "WM_api.h"
#include "WM_types.h"
diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c
index b52297a319c..cfa7af99d2a 100644
--- a/source/blender/editors/gpencil/gpencil_paint.c
+++ b/source/blender/editors/gpencil/gpencil_paint.c
@@ -40,10 +40,10 @@
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_report.h"
-#include "BKE_utildefines.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
+#include "DNA_gpencil_types.h"
#include "UI_view2d.h"
diff --git a/source/blender/editors/include/ED_armature.h b/source/blender/editors/include/ED_armature.h
index d2d1e2a1d69..52db36e188d 100644
--- a/source/blender/editors/include/ED_armature.h
+++ b/source/blender/editors/include/ED_armature.h
@@ -120,7 +120,7 @@ void ED_armature_edit_bone_remove(struct bArmature *arm, EditBone *exBone);
void transform_armature_mirror_update(struct Object *obedit);
void clear_armature(struct Scene *scene, struct Object *ob, char mode);
-void docenter_armature (struct Scene *scene, struct View3D *v3d, struct Object *ob, int centermode);
+void docenter_armature (struct Scene *scene, struct Object *ob, float cursor[3], int centermode, int around);
void ED_armature_apply_transform(struct Object *ob, float mat[4][4]);
diff --git a/source/blender/editors/include/ED_curve.h b/source/blender/editors/include/ED_curve.h
index a229d919e77..0ff98b504d0 100644
--- a/source/blender/editors/include/ED_curve.h
+++ b/source/blender/editors/include/ED_curve.h
@@ -37,6 +37,10 @@ struct Text;
struct View3D;
struct wmOperator;
struct wmKeyConfig;
+struct Curve;
+struct EditNurb;
+struct BezTriple;
+struct BPoint;
/* curve_ops.c */
void ED_operatortypes_curve(void);
@@ -55,6 +59,8 @@ void load_editNurb (struct Object *obedit);
void make_editNurb (struct Object *obedit);
void free_editNurb (struct Object *obedit);
+void free_curve_editNurb (struct Curve *cu);
+
int mouse_nurb (struct bContext *C, short mval[2], int extend);
struct Nurb *add_nurbs_primitive(struct bContext *C, float mat[4][4], int type, int newname);
@@ -72,6 +78,10 @@ void free_editText (struct Object *obedit);
void ED_text_to_object(struct bContext *C, struct Text *text, int split_lines);
int CU_select_nth(struct Object *obedit, int nth);
+ListBase *ED_curve_editnurbs(struct Curve *cu);
+
+void ED_curve_beztcpy(struct EditNurb *editnurb, struct BezTriple *dst, struct BezTriple *src, int count);
+void ED_curve_bpcpy(struct EditNurb *editnurb, struct BPoint *dst, struct BPoint *src, int count);
#endif /* ED_CURVE_H */
diff --git a/source/blender/editors/include/ED_datafiles.h b/source/blender/editors/include/ED_datafiles.h
index 9a5a1a5bea6..2c352abcd00 100644
--- a/source/blender/editors/include/ED_datafiles.h
+++ b/source/blender/editors/include/ED_datafiles.h
@@ -52,5 +52,93 @@ extern char datatoc_bfont_ttf[];
extern int datatoc_bmonofont_ttf_size;
extern char datatoc_bmonofont_ttf[];
+/* Brush icon datafiles */
+/* TODO: this could be simplified by putting all
+ the brush icons in one file */
+extern int datatoc_add_png_size;
+extern char datatoc_add_png[];
+
+extern int datatoc_blob_png_size;
+extern char datatoc_blob_png[];
+
+extern int datatoc_blur_png_size;
+extern char datatoc_blur_png[];
+
+extern int datatoc_clay_png_size;
+extern char datatoc_clay_png[];
+
+extern int datatoc_clone_png_size;
+extern char datatoc_clone_png[];
+
+extern int datatoc_crease_png_size;
+extern char datatoc_crease_png[];
+
+extern int datatoc_darken_png_size;
+extern char datatoc_darken_png[];
+
+extern int datatoc_draw_png_size;
+extern char datatoc_draw_png[];
+
+extern int datatoc_fill_png_size;
+extern char datatoc_fill_png[];
+
+extern int datatoc_flatten_png_size;
+extern char datatoc_flatten_png[];
+
+extern int datatoc_grab_png_size;
+extern char datatoc_grab_png[];
+
+extern int datatoc_inflate_png_size;
+extern char datatoc_inflate_png[];
+
+extern int datatoc_layer_png_size;
+extern char datatoc_layer_png[];
+
+extern int datatoc_lighten_png_size;
+extern char datatoc_lighten_png[];
+
+extern int datatoc_mix_png_size;
+extern char datatoc_mix_png[];
+
+extern int datatoc_multiply_png_size;
+extern char datatoc_multiply_png[];
+
+extern int datatoc_nudge_png_size;
+extern char datatoc_nudge_png[];
+
+extern int datatoc_pinch_png_size;
+extern char datatoc_pinch_png[];
+
+extern int datatoc_scrape_png_size;
+extern char datatoc_scrape_png[];
+
+extern int datatoc_smear_png_size;
+extern char datatoc_smear_png[];
+
+extern int datatoc_smooth_png_size;
+extern char datatoc_smooth_png[];
+
+extern int datatoc_snake_hook_png_size;
+extern char datatoc_snake_hook_png[];
+
+extern int datatoc_soften_png_size;
+extern char datatoc_soften_png[];
+
+extern int datatoc_subtract_png_size;
+extern char datatoc_subtract_png[];
+
+extern int datatoc_texdraw_png_size;
+extern char datatoc_texdraw_png[];
+
+extern int datatoc_thumb_png_size;
+extern char datatoc_thumb_png[];
+
+extern int datatoc_twist_png_size;
+extern char datatoc_twist_png[];
+
+extern int datatoc_vertexdraw_png_size;
+extern char datatoc_vertexdraw_png[];
+
+
#endif /* ED_DATAFILES_H */
diff --git a/source/blender/makesdna/DNA_wave_types.h b/source/blender/editors/include/ED_lattice.h
index b05ae862108..bebd6c5f3ab 100644
--- a/source/blender/makesdna/DNA_wave_types.h
+++ b/source/blender/editors/include/ED_lattice.h
@@ -1,14 +1,12 @@
/**
- * blenlib/DNA_wave_types.h (mar-2001 nzc)
- *
- * $Id$
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
+ * of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -19,32 +17,17 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * The Original Code is Copyright (C) 2008 Blender Foundation.
* All rights reserved.
*
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
+ *
+ * Contributor(s): Blender Foundation
*
* ***** END GPL LICENSE BLOCK *****
*/
-#ifndef DNA_WAVE_TYPES_H
-#define DNA_WAVE_TYPES_H
-
-#include "DNA_ID.h"
-
-struct Ipo;
-
-
-/* a Wave has never been implemented... it was meant as a 'free' mathematical
- deformation object type (ton) */
-
-typedef struct Wave {
- ID id;
-
- struct Ipo *ipo;
-
-} Wave;
-#endif
+struct Object;
+void free_editLatt(struct Object *ob);
+void make_editLatt(struct Object *obedit);
+void load_editLatt(struct Object *obedit);
diff --git a/source/blender/editors/include/ED_mesh.h b/source/blender/editors/include/ED_mesh.h
index 68eb8566759..ff7ce874303 100644
--- a/source/blender/editors/include/ED_mesh.h
+++ b/source/blender/editors/include/ED_mesh.h
@@ -61,6 +61,7 @@ struct UvMapVert;
struct Material;
struct Object;
struct rcti;
+struct wmOperator;
// edge and face flag both
#define EM_FGON 2
diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h
index a03cd135f1c..f243b4cc497 100644
--- a/source/blender/editors/include/ED_object.h
+++ b/source/blender/editors/include/ED_object.h
@@ -28,24 +28,25 @@
#ifndef ED_OBJECT_H
#define ED_OBJECT_H
-struct wmKeyConfig;
-struct wmKeyMap;
-struct Scene;
-struct Object;
-struct bContext;
struct Base;
-struct View3D;
struct bConstraint;
+struct bContext;
struct bPoseChannel;
+struct Curve;
struct KeyBlock;
struct Lattice;
+struct Main;
struct Mesh;
-struct Curve;
-struct ReportList;
struct ModifierData;
-struct wmOperatorType;
-struct wmOperator;
+struct Object;
+struct ReportList;
+struct Scene;
+struct View3D;
struct wmEvent;
+struct wmKeyConfig;
+struct wmKeyMap;
+struct wmOperator;
+struct wmOperatorType;
/* object_edit.c */
struct Object *ED_object_active_context(struct bContext *C);
@@ -55,7 +56,13 @@ void ED_operatortypes_object(void);
void ED_operatormacros_object(void);
void ED_keymap_object(struct wmKeyConfig *keyconf);
-/* generic editmode keys like pet */
+/* generic editmode keys like pet
+ * do_pet
+ * 0: No
+ * 1: Object
+ * 2: Edit
+ * 3: Edit with connected
+ * */
void ED_object_generic_keymap(struct wmKeyConfig *keyconf, struct wmKeyMap *keymap, int do_pet);
/* send your own notifier for select! */
@@ -63,10 +70,10 @@ void ED_base_object_select(struct Base *base, short mode);
/* includes notifier */
void ED_base_object_activate(struct bContext *C, struct Base *base);
-void ED_base_object_free_and_unlink(struct Scene *scene, struct Base *base);
+void ED_base_object_free_and_unlink(struct Main *bmain, struct Scene *scene, struct Base *base);
/* single object duplicate, if dupflag==0, fully linked, else it uses the flags given */
-struct Base *ED_object_add_duplicate(struct Scene *scene, struct Base *base, int dupflag);
+struct Base *ED_object_add_duplicate(struct Main *bmain, struct Scene *scene, struct Base *base, int dupflag);
void ED_object_parent(struct Object *ob, struct Object *parent, int type, const char *substr);
@@ -91,7 +98,7 @@ int ED_object_add_generic_invoke(struct bContext *C, struct wmOperator *op, stru
int ED_object_add_generic_get_opts(struct bContext *C, struct wmOperator *op, float *loc, float *rot, int *enter_editmode, unsigned int *layer);
struct Object *ED_object_add_type(struct bContext *C, int type, float *loc, float *rot, int enter_editmode, unsigned int layer);
-void ED_object_single_users(struct Scene *scene, int full);
+void ED_object_single_users(struct Main *bmain, struct Scene *scene, int full);
/* cleanup */
int object_is_libdata(struct Object *ob);
@@ -110,7 +117,7 @@ void object_test_constraints(struct Object *ob);
void ED_object_constraint_set_active(struct Object *ob, struct bConstraint *con);
void ED_object_constraint_update(struct Object *ob);
-void ED_object_constraint_dependency_update(struct Scene *scene, struct Object *ob);
+void ED_object_constraint_dependency_update(struct Main *bmain, struct Scene *scene, struct Object *ob);
/* object_lattice.c */
int mouse_lattice(struct bContext *C, short mval[2], int extend);
@@ -126,11 +133,11 @@ enum {
MODIFIER_APPLY_SHAPE,
} eModifier_Apply_Mode;
-struct ModifierData *ED_object_modifier_add(struct ReportList *reports, struct Scene *scene, struct Object *ob, char *name, int type);
-int ED_object_modifier_remove(struct ReportList *reports, struct Scene *scene, struct Object *ob, struct ModifierData *md);
+struct ModifierData *ED_object_modifier_add(struct ReportList *reports, struct Main *bmain, struct Scene *scene, struct Object *ob, char *name, int type);
+int ED_object_modifier_remove(struct ReportList *reports, struct Main *bmain, struct Scene *scene, struct Object *ob, struct ModifierData *md);
int ED_object_modifier_move_down(struct ReportList *reports, struct Object *ob, struct ModifierData *md);
int ED_object_modifier_move_up(struct ReportList *reports, struct Object *ob, struct ModifierData *md);
-int ED_object_modifier_convert(struct ReportList *reports, struct Scene *scene, struct Object *ob, struct ModifierData *md);
+int ED_object_modifier_convert(struct ReportList *reports, struct Main *bmain, struct Scene *scene, struct Object *ob, struct ModifierData *md);
int ED_object_modifier_apply(struct ReportList *reports, struct Scene *scene, struct Object *ob, struct ModifierData *md, int mode);
int ED_object_modifier_copy(struct ReportList *reports, struct Object *ob, struct ModifierData *md);
diff --git a/source/blender/editors/include/ED_sculpt.h b/source/blender/editors/include/ED_sculpt.h
index db2013fb411..506813ce626 100644
--- a/source/blender/editors/include/ED_sculpt.h
+++ b/source/blender/editors/include/ED_sculpt.h
@@ -49,7 +49,7 @@ void ED_keymap_paint(struct wmKeyConfig *keyconf);
#define UNDO_PAINT_IMAGE 0
#define UNDO_PAINT_MESH 1
-void ED_undo_paint_step(struct bContext *C, int type, int step);
+int ED_undo_paint_step(struct bContext *C, int type, int step, const char *name);
void ED_undo_paint_free(void);
#endif
diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h
index 85539abd00a..471ce965d4c 100644
--- a/source/blender/editors/include/ED_view3d.h
+++ b/source/blender/editors/include/ED_view3d.h
@@ -54,7 +54,7 @@ struct ViewContext;
/* for derivedmesh drawing callbacks, for view3d_select, .... */
typedef struct ViewContext {
- Scene *scene;
+ struct Scene *scene;
struct Object *obact;
struct Object *obedit;
struct ARegion *ar;
@@ -75,7 +75,7 @@ typedef struct ViewDepths {
float *give_cursor(struct Scene *scene, struct View3D *v3d);
-void initgrabz(struct RegionView3D *rv3d, float x, float y, float z);
+int initgrabz(struct RegionView3D *rv3d, float x, float y, float z);
void window_to_3d(struct ARegion *ar, float *vec, short mx, short my);
void window_to_3d_delta(struct ARegion *ar, float *vec, short mx, short my);
void view3d_unproject(struct bglMats *mats, float out[3], const short x, const short y, const float z);
diff --git a/source/blender/editors/include/UI_icons.h b/source/blender/editors/include/UI_icons.h
index fd459def112..6a139b124a6 100644
--- a/source/blender/editors/include/UI_icons.h
+++ b/source/blender/editors/include/UI_icons.h
@@ -27,8 +27,8 @@
*/
/* Note: this is included twice with different #defines for DEF_ICON
- once from UI_resources.h for the internal icon enum and once fro interface_api.c for
- definition of the RNA enum for he icons */
+ once from UI_resources.h for the internal icon enum and
+ once for interface_api.c for the definition of the RNA enum for the icons */
DEF_ICON(ICON_BLENDER)
DEF_ICON(ICON_QUESTION)
@@ -869,6 +869,37 @@ DEF_ICON(ICON_BLANK345)
DEF_ICON(ICON_BLANK346)
DEF_ICON(ICON_BLANK346b)
+ /* brush icons */
+
+DEF_ICON(ICON_BRUSH_ADD)
+DEF_ICON(ICON_BRUSH_BLOB)
+DEF_ICON(ICON_BRUSH_BLUR)
+DEF_ICON(ICON_BRUSH_CLAY)
+DEF_ICON(ICON_BRUSH_CLONE)
+DEF_ICON(ICON_BRUSH_CREASE)
+DEF_ICON(ICON_BRUSH_DARKEN)
+DEF_ICON(ICON_BRUSH_FILL)
+DEF_ICON(ICON_BRUSH_FLATTEN)
+DEF_ICON(ICON_BRUSH_GRAB)
+DEF_ICON(ICON_BRUSH_INFLATE)
+DEF_ICON(ICON_BRUSH_LAYER)
+DEF_ICON(ICON_BRUSH_LIGHTEN)
+DEF_ICON(ICON_BRUSH_MIX)
+DEF_ICON(ICON_BRUSH_MULTIPLY)
+DEF_ICON(ICON_BRUSH_NUDGE)
+DEF_ICON(ICON_BRUSH_PINCH)
+DEF_ICON(ICON_BRUSH_SCRAPE)
+DEF_ICON(ICON_BRUSH_SCULPT_DRAW)
+DEF_ICON(ICON_BRUSH_SMEAR)
+DEF_ICON(ICON_BRUSH_SMOOTH)
+DEF_ICON(ICON_BRUSH_SNAKE_HOOK)
+DEF_ICON(ICON_BRUSH_SOFTEN)
+DEF_ICON(ICON_BRUSH_SUBTRACT)
+DEF_ICON(ICON_BRUSH_TEXDRAW)
+DEF_ICON(ICON_BRUSH_THUMB)
+DEF_ICON(ICON_BRUSH_ROTATE)
+DEF_ICON(ICON_BRUSH_VERTEXDRAW)
+
/* vector icons */
DEF_ICON(VICO_VIEW3D_VEC)
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index 4b6b396483d..b126c6235d5 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -669,17 +669,17 @@ uiBlock *uiLayoutAbsoluteBlock(uiLayout *layout);
void uiTemplateHeader(uiLayout *layout, struct bContext *C, int menus);
void uiTemplateDopeSheetFilter(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr);
void uiTemplateID(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname,
- char *newop, char *openop, char *unlinkop, char *filterop);
+ char *newop, char *openop, char *unlinkop);
void uiTemplateIDBrowse(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname,
- char *newop, char *openop, char *unlinkop, char *filterop);
+ char *newop, char *openop, char *unlinkop);
void uiTemplateIDPreview(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname,
- char *newop, char *openop, char *unlinkop, char *filterop, int rows, int cols);
+ char *newop, char *openop, char *unlinkop, int rows, int cols);
void uiTemplateAnyID(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname,
char *proptypename, char *text);
void uiTemplatePathBuilder(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname,
struct PointerRNA *root_ptr, char *text);
-uiLayout *uiTemplateModifier(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, int compact);
-uiLayout *uiTemplateConstraint(uiLayout *layout, struct PointerRNA *ptr, int compact);
+uiLayout *uiTemplateModifier(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr);
+uiLayout *uiTemplateConstraint(uiLayout *layout, struct PointerRNA *ptr);
void uiTemplatePreview(uiLayout *layout, struct ID *id, struct ID *parent, struct MTex *slot);
void uiTemplateColorRamp(uiLayout *layout, struct PointerRNA *ptr, char *propname, int expand);
void uiTemplateHistogram(uiLayout *layout, struct PointerRNA *ptr, char *propname, int expand);
diff --git a/source/blender/editors/interface/Makefile b/source/blender/editors/interface/Makefile
index 115740a8403..7b5d4e60fbd 100644
--- a/source/blender/editors/interface/Makefile
+++ b/source/blender/editors/interface/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index 3f0cd3bee78..4c86b9480d4 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -41,15 +41,10 @@
#include "BLI_dynstr.h"
#include "BKE_context.h"
-#include "BKE_idprop.h"
#include "BKE_library.h"
-#include "BKE_screen.h"
-#include "BKE_texture.h"
-#include "BKE_utildefines.h"
#include "BKE_unit.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "BLF_api.h"
@@ -1464,13 +1459,13 @@ static void ui_get_but_string_unit(uiBut *but, char *str, int len_max, double va
bUnit_AsString(str, len_max, ui_get_but_scale_unit(but, value), precision, scene->unit.system, unit_type, do_split, pad);
}
-static float ui_get_but_step_unit(uiBut *but, double value, float step_default)
+static float ui_get_but_step_unit(uiBut *but, float step_default)
{
Scene *scene= CTX_data_scene((bContext *)but->block->evil_C);
int unit_type= RNA_SUBTYPE_UNIT_VALUE(RNA_property_subtype(but->rnaprop));
float step;
- step = bUnit_ClosestScalar(ui_get_but_scale_unit(but, value), scene->unit.system, unit_type);
+ step = bUnit_ClosestScalar(ui_get_but_scale_unit(but, step_default), scene->unit.system, unit_type);
if(step > 0.0) { /* -1 is an error value */
return (step/ui_get_but_scale_unit(but, 1.0))*100;
@@ -1644,7 +1639,7 @@ int ui_set_but_string(bContext *C, uiBut *but, const char *str)
value= atof(str);
#endif
- if(!ui_is_but_float(but)) value= (int)value;
+ if(!ui_is_but_float(but)) value= (int)floor(value + 0.5);
if(but->type==NUMABS) value= fabs(value);
/* not that we use hard limits here */
@@ -2563,7 +2558,7 @@ uiBut *ui_def_but_rna(uiBlock *block, int type, int retval, char *str, short x1,
/* If this button uses units, calculate the step from this */
if(ui_is_but_unit(but))
- but->a1= ui_get_but_step_unit(but, ui_get_but_val(but), but->a1);
+ but->a1= ui_get_but_step_unit(but, but->a1);
if(freestr)
MEM_freeN(str);
diff --git a/source/blender/editors/interface/interface_anim.c b/source/blender/editors/interface/interface_anim.c
index 4108e1c8532..c99622c7518 100644
--- a/source/blender/editors/interface/interface_anim.c
+++ b/source/blender/editors/interface/interface_anim.c
@@ -3,7 +3,6 @@
#include <stdlib.h>
#include <string.h>
-#include "MEM_guardedalloc.h"
#include "DNA_anim_types.h"
#include "DNA_scene_types.h"
@@ -12,7 +11,6 @@
#include "BLI_listbase.h"
#include "BLI_string.h"
-#include "BKE_animsys.h"
#include "BKE_context.h"
#include "BKE_fcurve.h"
diff --git a/source/blender/editors/interface/interface_draw.c b/source/blender/editors/interface/interface_draw.c
index 0dd333dc387..2a9a1335b1f 100644
--- a/source/blender/editors/interface/interface_draw.c
+++ b/source/blender/editors/interface/interface_draw.c
@@ -35,7 +35,6 @@
#include "BLI_math.h"
#include "BKE_colortools.h"
-#include "BKE_global.h"
#include "BKE_texture.h"
#include "BKE_utildefines.h"
@@ -1147,7 +1146,7 @@ void ui_draw_but_COLORBAND(uiBut *but, uiWidgetColors *wcol, rcti *rect)
glColor4fv( &cbd->r );
glVertex2fv(v1); glVertex2fv(v2);
- for( a = 1; a < sizex; a++ ) {
+ for( a = 1; a <= sizex; a++ ) {
pos = ((float)a) / (sizex-1);
do_colorband( coba, pos, colf );
if (but->block->color_profile != BLI_PR_NONE)
@@ -1164,19 +1163,8 @@ void ui_draw_but_COLORBAND(uiBut *but, uiWidgetColors *wcol, rcti *rect)
glDisable(GL_BLEND);
/* outline */
- v1[0]= x1; v1[1]= y1;
-
- cpack(0x0);
- glBegin(GL_LINE_LOOP);
- glVertex2fv(v1);
- v1[0]+= sizex;
- glVertex2fv(v1);
- v1[1]+= sizey;
- glVertex2fv(v1);
- v1[0]-= sizex;
- glVertex2fv(v1);
- glEnd();
-
+ glColor4f(0.0, 0.0, 0.0, 1.0);
+ fdrawbox(x1, y1, x1+sizex, y1+sizey);
/* help lines */
v1[0]= v2[0]=v3[0]= x1;
@@ -1232,6 +1220,7 @@ void ui_draw_but_COLORBAND(uiBut *but, uiWidgetColors *wcol, rcti *rect)
}
}
glEnd();
+
}
void ui_draw_but_NORMAL(uiBut *but, uiWidgetColors *wcol, rcti *rect)
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 7eda0920534..9d99409a741 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -28,6 +28,7 @@
#include <math.h>
#include <stdlib.h>
#include <string.h>
+#include <ctype.h>
#include "MEM_guardedalloc.h"
@@ -43,7 +44,6 @@
#include "BKE_idprop.h"
#include "BKE_report.h"
#include "BKE_texture.h"
-#include "BKE_utildefines.h"
#include "ED_screen.h"
#include "ED_util.h"
@@ -1155,7 +1155,7 @@ static int ui_textedit_delete_selection(uiBut *but, uiHandleButtonData *data)
int len= strlen(str);
int change= 0;
if(but->selsta != but->selend && len) {
- memmove( str+but->selsta, str+but->selend, len+1 );
+ memmove( str+but->selsta, str+but->selend, len-but->selsta+1 );
change= 1;
}
@@ -1535,6 +1535,19 @@ static void ui_textedit_begin(bContext *C, uiBut *but, uiHandleButtonData *data)
data->str= MEM_callocN(sizeof(char)*data->maxlen + 1, "textedit str");
ui_get_but_string(but, data->str, data->maxlen);
+ if(ELEM3(but->type, NUM, NUMABS, NUMSLI)) {
+ /* XXX: we dont have utf editing yet so for numbers its best to strip out utf chars
+ * this is so the deg' synbol isnt included in number editing fields: bug 22274 */
+ int i;
+ for(i=0; data->str[i]; i++) {
+ if(!isascii(data->str[i])) {
+ data->str[i]= '\0';
+ break;
+ }
+ }
+ }
+
+
data->origstr= BLI_strdup(data->str);
data->selextend= 0;
data->selstartx= 0;
@@ -3237,24 +3250,8 @@ static int ui_do_but_COLORBAND(bContext *C, uiBlock *block, uiBut *but, uiHandle
if(event->ctrl) {
/* insert new key on mouse location */
- if(coba->tot < MAXCOLORBAND-1) {
- float pos= ((float)(mx - but->x1))/(but->x2-but->x1);
- float col[4];
-
- do_colorband(coba, pos, col); /* executes it */
-
- coba->tot++;
- coba->cur= coba->tot-1;
-
- coba->data[coba->cur].r= col[0];
- coba->data[coba->cur].g= col[1];
- coba->data[coba->cur].b= col[2];
- coba->data[coba->cur].a= col[3];
- coba->data[coba->cur].pos= pos;
-
- ui_colorband_update(coba);
- }
-
+ float pos= ((float)(mx - but->x1))/(but->x2-but->x1);
+ colorband_element_add(coba, pos);
button_activate_state(C, but, BUTTON_STATE_EXIT);
}
else {
@@ -4265,7 +4262,7 @@ static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, wmEvent *event)
return WM_UI_HANDLER_BREAK;
}
/* reset to default */
- else if(event->type == ZEROKEY && event->val == KM_PRESS) {
+ else if(ELEM(event->type, ZEROKEY,PAD0) && event->val == KM_PRESS) {
if (!(ELEM3(but->type, HSVCIRCLE, HSVCUBE, HISTOGRAM)))
ui_set_but_default(C, but);
}
@@ -5192,7 +5189,8 @@ static void ui_handle_button_return_submenu(bContext *C, wmEvent *event, uiBut *
button_activate_state(C, but, BUTTON_STATE_HIGHLIGHT);
}
else {
- if(event->type != MOUSEMOVE) {
+ if (ISKEYBOARD(event->type)) {
+ /* keyboard menu hierarchy navigation, going back to previous level */
but->active->used_mouse= 0;
button_activate_state(C, but, BUTTON_STATE_HIGHLIGHT);
}
diff --git a/source/blender/editors/interface/interface_icons.c b/source/blender/editors/interface/interface_icons.c
index 232b6f7f317..499c676bf6f 100644
--- a/source/blender/editors/interface/interface_icons.c
+++ b/source/blender/editors/interface/interface_icons.c
@@ -44,13 +44,15 @@
#include "BLI_blenlib.h"
#include "BLI_storage_types.h"
-#include "DNA_screen_types.h"
-#include "DNA_userdef_types.h"
#include "DNA_brush_types.h"
+#include "DNA_object_types.h"
+#include "DNA_screen_types.h"
+
+#include "RNA_access.h"
+#include "RNA_enum_types.h"
#include "BKE_context.h"
#include "BKE_global.h"
-#include "BKE_image.h"
#include "BKE_icons.h"
#include "BKE_utildefines.h"
@@ -58,7 +60,6 @@
#include "IMB_imbuf_types.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "ED_datafiles.h"
#include "ED_render.h"
@@ -452,6 +453,51 @@ static void vicon_move_down_draw(int x, int y, int w, int h, float alpha)
glDisable(GL_LINE_SMOOTH);
}
+static void init_brush_icons()
+{
+
+#define INIT_BRUSH_ICON(icon_id, name) \
+ bbuf = IMB_ibImageFromMemory((unsigned char*)datatoc_ ##name## _png, \
+ datatoc_ ##name## _png_size, IB_rect); \
+ def_internal_icon(bbuf, icon_id, 0, 0, w, ICON_TYPE_BUFFER); \
+ IMB_freeImBuf(bbuf);
+ // end INIT_BRUSH_ICON
+
+ ImBuf *bbuf;
+ const int w = 96;
+
+ INIT_BRUSH_ICON(ICON_BRUSH_ADD, add);
+ INIT_BRUSH_ICON(ICON_BRUSH_BLOB, blob);
+ INIT_BRUSH_ICON(ICON_BRUSH_BLUR, blur);
+ INIT_BRUSH_ICON(ICON_BRUSH_CLAY, clay);
+ INIT_BRUSH_ICON(ICON_BRUSH_CLONE, clone);
+ INIT_BRUSH_ICON(ICON_BRUSH_CREASE, crease);
+ INIT_BRUSH_ICON(ICON_BRUSH_DARKEN, darken);
+ INIT_BRUSH_ICON(ICON_BRUSH_SCULPT_DRAW, draw);
+ INIT_BRUSH_ICON(ICON_BRUSH_FILL, fill);
+ INIT_BRUSH_ICON(ICON_BRUSH_FLATTEN, flatten);
+ INIT_BRUSH_ICON(ICON_BRUSH_GRAB, grab);
+ INIT_BRUSH_ICON(ICON_BRUSH_INFLATE, inflate);
+ INIT_BRUSH_ICON(ICON_BRUSH_LAYER, layer);
+ INIT_BRUSH_ICON(ICON_BRUSH_LIGHTEN, lighten);
+ INIT_BRUSH_ICON(ICON_BRUSH_MIX, mix);
+ INIT_BRUSH_ICON(ICON_BRUSH_MULTIPLY, multiply);
+ INIT_BRUSH_ICON(ICON_BRUSH_NUDGE, nudge);
+ INIT_BRUSH_ICON(ICON_BRUSH_PINCH, pinch);
+ INIT_BRUSH_ICON(ICON_BRUSH_SCRAPE, scrape);
+ INIT_BRUSH_ICON(ICON_BRUSH_SMEAR, smear);
+ INIT_BRUSH_ICON(ICON_BRUSH_SMOOTH, smooth);
+ INIT_BRUSH_ICON(ICON_BRUSH_SNAKE_HOOK, snake_hook);
+ INIT_BRUSH_ICON(ICON_BRUSH_SOFTEN, soften);
+ INIT_BRUSH_ICON(ICON_BRUSH_SUBTRACT, subtract);
+ INIT_BRUSH_ICON(ICON_BRUSH_TEXDRAW, texdraw);
+ INIT_BRUSH_ICON(ICON_BRUSH_THUMB, thumb);
+ INIT_BRUSH_ICON(ICON_BRUSH_ROTATE, twist);
+ INIT_BRUSH_ICON(ICON_BRUSH_VERTEXDRAW, vertexdraw);
+
+#undef INIT_BRUSH_ICON
+}
+
static void init_internal_icons()
{
bTheme *btheme= U.themes.first;
@@ -739,6 +785,7 @@ void UI_icons_init(int first_dyn_id)
init_iconfile_list(&iconfilelist);
BKE_icons_init(first_dyn_id);
init_internal_icons();
+ init_brush_icons();
}
/* Render size for preview images at level miplevel */
@@ -962,6 +1009,43 @@ void ui_id_icon_render(bContext *C, ID *id, int preview)
}
}
+static int ui_id_brush_get_icon(bContext *C, ID *id, int preview)
+{
+ Brush *br = (Brush*)id;
+
+ if(br->flag & BRUSH_CUSTOM_ICON) {
+ BKE_icon_getid(id);
+ ui_id_icon_render(C, id, preview);
+ }
+ else if(!id->icon_id) {
+ /* no icon found, reset it */
+
+ /* this is not nice, should probably make
+ brushes be strictly in one paint mode only
+ to avoid this kind of thing */
+ Object *ob = CTX_data_active_object(C);
+ EnumPropertyItem *items;
+ int tool;
+
+ if(ob && (ob->mode & OB_MODE_SCULPT)) {
+ items = brush_sculpt_tool_items;
+ tool = br->sculpt_tool;
+ }
+ else if(ob && (ob->mode & (OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT))) {
+ items = brush_vertexpaint_tool_items;
+ tool = br->vertexpaint_tool;
+ }
+ else {
+ items = brush_imagepaint_tool_items;
+ tool = br->imagepaint_tool;
+ }
+
+ RNA_enum_icon_from_value(items, tool, &id->icon_id);
+ }
+
+ return id->icon_id;
+}
+
int ui_id_icon_get(bContext *C, ID *id, int preview)
{
int iconid= 0;
@@ -969,6 +1053,9 @@ int ui_id_icon_get(bContext *C, ID *id, int preview)
/* icon */
switch(GS(id->name))
{
+ case ID_BR:
+ iconid= ui_id_brush_get_icon(C, id, preview);
+ break;
case ID_MA: /* fall through */
case ID_TE: /* fall through */
case ID_IM: /* fall through */
@@ -978,16 +1065,6 @@ int ui_id_icon_get(bContext *C, ID *id, int preview)
/* checks if not exists, or changed */
ui_id_icon_render(C, id, preview);
break;
- case ID_BR:
- { /* use the image in the brush as the icon */
- /* XXX redundancy here can be reduced be rewriting this switch as an if */
- ID* ima_id = (ID*)((Brush*)id)->image_icon;
- id = ima_id ? ima_id : id;
- iconid= BKE_icon_getid(id);
- /* checks if not exists, or changed */
- ui_id_icon_render(C, id, preview);
- }
- break;
default:
break;
}
diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c
index b7b9a2156ef..1d98b1f22c1 100644
--- a/source/blender/editors/interface/interface_layout.c
+++ b/source/blender/editors/interface/interface_layout.c
@@ -38,9 +38,7 @@
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_idprop.h"
-#include "BKE_library.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
@@ -978,7 +976,7 @@ void uiItemR(uiLayout *layout, PointerRNA *ptr, char *propname, int flag, char *
if(!prop) {
ui_item_disabled(layout, propname);
- printf("uiItemR: property not found: %s\n", propname);
+ printf("uiItemR: property not found: %s.%s\n", RNA_struct_identifier(ptr->type), propname);
return;
}
@@ -991,7 +989,7 @@ void uiItemEnumR(uiLayout *layout, char *name, int icon, struct PointerRNA *ptr,
if(!prop || RNA_property_type(prop) != PROP_ENUM) {
ui_item_disabled(layout, propname);
- printf("uiItemEnumR: enum property not found: %s\n", propname);
+ printf("uiItemEnumR: property not found: %s.%s\n", RNA_struct_identifier(ptr->type), propname);
return;
}
@@ -1006,7 +1004,7 @@ void uiItemEnumR_string(uiLayout *layout, struct PointerRNA *ptr, char *propname
if(!prop || RNA_property_type(prop) != PROP_ENUM) {
ui_item_disabled(layout, propname);
- printf("uiItemEnumR: enum property not found: %s\n", propname);
+ printf("uiItemEnumR_string: enum property not found: %s.%s\n", RNA_struct_identifier(ptr->type), propname);
return;
}
@@ -1111,13 +1109,29 @@ static void rna_search_cb(const struct bContext *C, void *arg_but, char *str, ui
if(itemptr.data == but->rnapoin.id.data)
continue;
- if(itemptr.type && RNA_struct_is_ID(itemptr.type))
- iconid= ui_id_icon_get((bContext*)C, itemptr.data, 1);
- else
+ /* use filter */
+ if(RNA_property_type(but->rnaprop)==PROP_POINTER) {
+ if(RNA_property_pointer_poll(&but->rnapoin, but->rnaprop, &itemptr)==0)
+ continue;
+ }
+
+ if(itemptr.type && RNA_struct_is_ID(itemptr.type)) {
+ ID *id= itemptr.data;
+ char name_ui[32];
+
+#if 0 /* this name is used for a string comparison and can't be modified, TODO */
+ name_uiprefix_id(name_ui, id);
+#else
+ strcpy(name_ui, id->name+2);
+#endif
+ name= BLI_strdup(name_ui);
+ iconid= ui_id_icon_get((bContext*)C, id, 1);
+ }
+ else {
+ name= RNA_struct_name_get_alloc(&itemptr, NULL, 0);
iconid = 0;
-
- name= RNA_struct_name_get_alloc(&itemptr, NULL, 0);
-
+ }
+
if(name) {
if(BLI_strcasestr(name, str)) {
cis = MEM_callocN(sizeof(CollItemSearch), "CollectionItemSearch");
@@ -1126,9 +1140,9 @@ static void rna_search_cb(const struct bContext *C, void *arg_but, char *str, ui
cis->iconid = iconid;
BLI_addtail(items_list, cis);
}
- MEM_freeN(name);
- }
-
+ MEM_freeN(name);
+ }
+
i++;
}
RNA_PROP_END;
@@ -1211,7 +1225,7 @@ void uiItemPointerR(uiLayout *layout, struct PointerRNA *ptr, char *propname, st
prop= RNA_struct_find_property(ptr, propname);
if(!prop) {
- printf("uiItemPointerR: property not found: %s\n", propname);
+ printf("uiItemPointerR: property not found: %s.%s\n", RNA_struct_identifier(ptr->type), propname);
return;
}
@@ -1224,7 +1238,7 @@ void uiItemPointerR(uiLayout *layout, struct PointerRNA *ptr, char *propname, st
searchprop= RNA_struct_find_property(searchptr, searchpropname);
if(!searchprop || RNA_property_type(searchprop) != PROP_COLLECTION) {
- printf("uiItemPointerR: search collection property not found: %s\n", searchpropname);
+ printf("uiItemPointerR: search collection property not found: %s.%s\n", RNA_struct_identifier(ptr->type), searchpropname);
return;
}
@@ -2002,6 +2016,7 @@ uiLayout *uiLayoutRow(uiLayout *layout, int align)
litem->enabled= 1;
litem->context= layout->context;
litem->space= (align)? 0: layout->root->style->buttonspacex;
+ litem->w = layout->w;
BLI_addtail(&layout->items, litem);
uiBlockSetCurLayout(layout->root->block, litem);
@@ -2021,6 +2036,7 @@ uiLayout *uiLayoutColumn(uiLayout *layout, int align)
litem->enabled= 1;
litem->context= layout->context;
litem->space= (litem->align)? 0: layout->root->style->buttonspacey;
+ litem->w = layout->w;
BLI_addtail(&layout->items, litem);
uiBlockSetCurLayout(layout->root->block, litem);
@@ -2040,6 +2056,7 @@ uiLayout *uiLayoutColumnFlow(uiLayout *layout, int number, int align)
flow->litem.enabled= 1;
flow->litem.context= layout->context;
flow->litem.space= (flow->litem.align)? 0: layout->root->style->columnspace;
+ flow->litem.w = layout->w;
flow->number= number;
BLI_addtail(&layout->items, flow);
@@ -2059,6 +2076,7 @@ static uiLayoutItemBx *ui_layout_box(uiLayout *layout, int type)
box->litem.enabled= 1;
box->litem.context= layout->context;
box->litem.space= layout->root->style->columnspace;
+ box->litem.w = layout->w;
BLI_addtail(&layout->items, box);
uiBlockSetCurLayout(layout->root->block, &box->litem);
diff --git a/source/blender/editors/interface/interface_ops.c b/source/blender/editors/interface/interface_ops.c
index 20752099814..caee3c1c2fe 100644
--- a/source/blender/editors/interface/interface_ops.c
+++ b/source/blender/editors/interface/interface_ops.c
@@ -39,7 +39,6 @@
#include "BLI_math_color.h"
#include "BKE_context.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
#include "RNA_define.h"
diff --git a/source/blender/editors/interface/interface_panel.c b/source/blender/editors/interface/interface_panel.c
index 61694b859c5..9d22f3c5212 100644
--- a/source/blender/editors/interface/interface_panel.c
+++ b/source/blender/editors/interface/interface_panel.c
@@ -43,7 +43,6 @@
#include "BKE_context.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "BIF_gl.h"
#include "BIF_glutil.h"
diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c
index f17a3371df1..50b85360196 100644
--- a/source/blender/editors/interface/interface_regions.c
+++ b/source/blender/editors/interface/interface_regions.c
@@ -38,11 +38,7 @@
#include "BLI_ghash.h"
#include "BKE_context.h"
-#include "BKE_icons.h"
-#include "BKE_report.h"
#include "BKE_screen.h"
-#include "BKE_texture.h"
-#include "BKE_utildefines.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -1745,11 +1741,11 @@ static void circle_picker(uiBlock *block, PointerRNA *ptr, const char *propname)
uiBut *bt;
/* HS circle */
- bt= uiDefButR(block, HSVCIRCLE, 0, "", 0, 0, PICKER_H, PICKER_W, ptr, propname, 0, 0.0, 0.0, 0, 0, "");
+ bt= uiDefButR(block, HSVCIRCLE, 0, "", 0, 0, PICKER_H, PICKER_W, ptr, propname, 0, 0.0, 0.0, 0, 0, "Color");
uiButSetFunc(bt, do_picker_rna_cb, bt, NULL);
/* value */
- bt= uiDefButR(block, HSVCUBE, 0, "", PICKER_W+PICKER_SPACE,0,PICKER_BAR,PICKER_H, ptr, propname, 0, 0.0, 0.0, UI_GRAD_V_ALT, 0, "");
+ bt= uiDefButR(block, HSVCUBE, 0, "", PICKER_W+PICKER_SPACE,0,PICKER_BAR,PICKER_H, ptr, propname, 0, 0.0, 0.0, UI_GRAD_V_ALT, 0, "Value");
uiButSetFunc(bt, do_picker_rna_cb, bt, NULL);
}
@@ -1760,11 +1756,11 @@ static void square_picker(uiBlock *block, PointerRNA *ptr, const char *propname,
int bartype = type + 3;
/* HS square */
- bt= uiDefButR(block, HSVCUBE, 0, "", 0, PICKER_BAR+PICKER_SPACE, PICKER_TOTAL_W, PICKER_H, ptr, propname, 0, 0.0, 0.0, type, 0, "");
+ bt= uiDefButR(block, HSVCUBE, 0, "", 0, PICKER_BAR+PICKER_SPACE, PICKER_TOTAL_W, PICKER_H, ptr, propname, 0, 0.0, 0.0, type, 0, "Color");
uiButSetFunc(bt, do_picker_rna_cb, bt, NULL);
/* value */
- bt= uiDefButR(block, HSVCUBE, 0, "", 0, 0, PICKER_TOTAL_W, PICKER_BAR, ptr, propname, 0, 0.0, 0.0, bartype, 0, "");
+ bt= uiDefButR(block, HSVCUBE, 0, "", 0, 0, PICKER_TOTAL_W, PICKER_BAR, ptr, propname, 0, 0.0, 0.0, bartype, 0, "Value");
uiButSetFunc(bt, do_picker_rna_cb, bt, NULL);
}
@@ -1832,11 +1828,11 @@ static void uiBlockPicker(uiBlock *block, float *rgb, PointerRNA *ptr, PropertyR
/* RGB values */
uiBlockBeginAlign(block);
- bt= uiDefButR(block, NUMSLI, 0, "R ", 0, -60, butwidth, UI_UNIT_Y, ptr, propname, 0, 0.0, 0.0, 0, 3, "");
+ bt= uiDefButR(block, NUMSLI, 0, "R ", 0, -60, butwidth, UI_UNIT_Y, ptr, propname, 0, 0.0, 0.0, 0, 3, "Red");
uiButSetFunc(bt, do_picker_rna_cb, bt, NULL);
- bt= uiDefButR(block, NUMSLI, 0, "G ", 0, -80, butwidth, UI_UNIT_Y, ptr, propname, 1, 0.0, 0.0, 0, 3, "");
+ bt= uiDefButR(block, NUMSLI, 0, "G ", 0, -80, butwidth, UI_UNIT_Y, ptr, propname, 1, 0.0, 0.0, 0, 3, "Green");
uiButSetFunc(bt, do_picker_rna_cb, bt, NULL);
- bt= uiDefButR(block, NUMSLI, 0, "B ", 0, -100, butwidth, UI_UNIT_Y, ptr, propname, 2, 0.0, 0.0, 0, 3, "");
+ bt= uiDefButR(block, NUMSLI, 0, "B ", 0, -100, butwidth, UI_UNIT_Y, ptr, propname, 2, 0.0, 0.0, 0, 3, "Blue");
uiButSetFunc(bt, do_picker_rna_cb, bt, NULL);
// could use uiItemFullR(col, ptr, prop, -1, 0, UI_ITEM_R_EXPAND|UI_ITEM_R_SLIDER, "", 0);
@@ -1844,16 +1840,16 @@ static void uiBlockPicker(uiBlock *block, float *rgb, PointerRNA *ptr, PropertyR
/* HSV values */
uiBlockBeginAlign(block);
- bt= uiDefButF(block, NUMSLI, 0, "H ", 0, -60, butwidth, UI_UNIT_Y, hsv, 0.0, 1.0, 10, 3, "");
+ bt= uiDefButF(block, NUMSLI, 0, "H ", 0, -60, butwidth, UI_UNIT_Y, hsv, 0.0, 1.0, 10, 3, "Hue");
uiButSetFunc(bt, do_hsv_rna_cb, bt, hsv);
- bt= uiDefButF(block, NUMSLI, 0, "S ", 0, -80, butwidth, UI_UNIT_Y, hsv+1, 0.0, 1.0, 10, 3, "");
+ bt= uiDefButF(block, NUMSLI, 0, "S ", 0, -80, butwidth, UI_UNIT_Y, hsv+1, 0.0, 1.0, 10, 3, "Saturation");
uiButSetFunc(bt, do_hsv_rna_cb, bt, hsv);
- bt= uiDefButF(block, NUMSLI, 0, "V ", 0, -100, butwidth, UI_UNIT_Y, hsv+2, 0.0, max, 10, 3, "");
+ bt= uiDefButF(block, NUMSLI, 0, "V ", 0, -100, butwidth, UI_UNIT_Y, hsv+2, 0.0, max, 10, 3, "Value");
uiButSetFunc(bt, do_hsv_rna_cb, bt, hsv);
uiBlockEndAlign(block);
if(rgb[3] != FLT_MAX) {
- bt= uiDefButR(block, NUMSLI, 0, "A ", 0, -120, butwidth, UI_UNIT_Y, ptr, propname, 3, 0.0, 0.0, 0, 0, "");
+ bt= uiDefButR(block, NUMSLI, 0, "A ", 0, -120, butwidth, UI_UNIT_Y, ptr, propname, 3, 0.0, 0.0, 0, 0, "Alpha");
uiButSetFunc(bt, do_picker_rna_cb, bt, NULL);
}
else {
diff --git a/source/blender/editors/interface/interface_style.c b/source/blender/editors/interface/interface_style.c
index e3317e5598f..03676ae5e06 100644
--- a/source/blender/editors/interface/interface_style.c
+++ b/source/blender/editors/interface/interface_style.c
@@ -38,12 +38,8 @@
#include "BLI_rect.h"
#include "BLI_string.h"
-#include "BKE_context.h"
#include "BKE_global.h"
-#include "BKE_utildefines.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "BLF_api.h"
@@ -264,7 +260,7 @@ void UI_DrawString(float x, float y, char *str)
/* ************** init exit ************************ */
-/* called on each .B.blend read */
+/* called on each startup.blend read */
/* reading without uifont will create one */
void uiStyleInit(void)
{
diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c
index f951def739f..4b522c9ddcb 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -30,18 +30,15 @@
#include "DNA_scene_types.h"
#include "DNA_userdef_types.h"
-#include "DNA_windowmanager_types.h"
#include "BLI_string.h"
#include "BKE_colortools.h"
#include "BKE_context.h"
-#include "BKE_icons.h"
#include "BKE_global.h"
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_texture.h"
-#include "BKE_utildefines.h"
#include "BKE_report.h"
#include "ED_screen.h"
@@ -84,53 +81,53 @@ void uiTemplateDopeSheetFilter(uiLayout *layout, bContext *C, PointerRNA *ptr)
/* most 'generic' filtering options */
row= uiLayoutRow(layout, 1);
- uiItemR(row, ptr, "only_selected", 0, "", 0);
- uiItemR(row, ptr, "display_hidden", 0, "", 0);
+ uiItemR(row, ptr, "show_only_selected", 0, "", 0);
+ uiItemR(row, ptr, "show_hidden", 0, "", 0);
/* object-level filtering options */
row= uiLayoutRow(layout, 1);
- uiItemR(row, ptr, "display_transforms", 0, "", 0);
+ uiItemR(row, ptr, "show_transforms", 0, "", 0);
if (nlaActive)
- uiItemR(row, ptr, "include_missing_nla", 0, "", 0);
+ uiItemR(row, ptr, "show_missing_nla", 0, "", 0);
/* datatype based - only available datatypes are shown */
row= uiLayoutRow(layout, 1);
- uiItemR(row, ptr, "display_scene", 0, "", 0);
- uiItemR(row, ptr, "display_world", 0, "", 0);
- uiItemR(row, ptr, "display_node", 0, "", 0);
+ uiItemR(row, ptr, "show_scenes", 0, "", 0);
+ uiItemR(row, ptr, "show_worlds", 0, "", 0);
+ uiItemR(row, ptr, "show_nodes", 0, "", 0);
if (mainptr && mainptr->mesh.first)
- uiItemR(row, ptr, "display_mesh", 0, "", 0);
+ uiItemR(row, ptr, "show_meshes", 0, "", 0);
if (mainptr && mainptr->key.first)
- uiItemR(row, ptr, "display_shapekeys", 0, "", 0);
+ uiItemR(row, ptr, "show_shapekeys", 0, "", 0);
if (mainptr && mainptr->mat.first)
- uiItemR(row, ptr, "display_material", 0, "", 0);
+ uiItemR(row, ptr, "show_materials", 0, "", 0);
if (mainptr && mainptr->lamp.first)
- uiItemR(row, ptr, "display_lamp", 0, "", 0);
+ uiItemR(row, ptr, "show_lamps", 0, "", 0);
if (mainptr && mainptr->tex.first)
- uiItemR(row, ptr, "display_texture", 0, "", 0);
+ uiItemR(row, ptr, "show_textures", 0, "", 0);
if (mainptr && mainptr->camera.first)
- uiItemR(row, ptr, "display_camera", 0, "", 0);
+ uiItemR(row, ptr, "show_cameras", 0, "", 0);
if (mainptr && mainptr->curve.first)
- uiItemR(row, ptr, "display_curve", 0, "", 0);
+ uiItemR(row, ptr, "show_curves", 0, "", 0);
if (mainptr && mainptr->mball.first)
- uiItemR(row, ptr, "display_metaball", 0, "", 0);
+ uiItemR(row, ptr, "show_metaballs", 0, "", 0);
if (mainptr && mainptr->armature.first)
- uiItemR(row, ptr, "display_armature", 0, "", 0);
+ uiItemR(row, ptr, "show_armatures", 0, "", 0);
if (mainptr && mainptr->particle.first)
- uiItemR(row, ptr, "display_particle", 0, "", 0);
+ uiItemR(row, ptr, "show_particles", 0, "", 0);
/* group-based filtering (only when groups are available */
if (mainptr && mainptr->group.first) {
row= uiLayoutRow(layout, 1);
- uiItemR(row, ptr, "only_group_objects", 0, "", 0);
+ uiItemR(row, ptr, "show_only_group_objects", 0, "", 0);
/* if enabled, show the group selection field too */
- if (RNA_boolean_get(ptr, "only_group_objects"))
- uiItemR(row, ptr, "filtering_group", 0, "", 0);
+ if (RNA_boolean_get(ptr, "show_only_group_objects"))
+ uiItemR(row, ptr, "filter_group", 0, "", 0);
}
}
@@ -142,8 +139,6 @@ typedef struct TemplateID {
ListBase *idlb;
int prv_rows, prv_cols;
-
- char filterop[64];
} TemplateID;
/* Search browse menu, assign */
@@ -173,54 +168,27 @@ static void id_search_cb(const bContext *C, void *arg_template, char *str, uiSea
/* ID listbase */
for(id= lb->first; id; id= id->next) {
if(!((flag & PROP_ID_SELF_CHECK) && id == id_from)) {
- int filter_yes;
-
- filter_yes= 0;
/* use filter */
- if (template->filterop[0] != 0) {
+ if(RNA_property_type(template->prop)==PROP_POINTER) {
PointerRNA ptr;
- ReportList reports;
- FunctionRNA *func;
- ParameterList parms;
-
RNA_id_pointer_create(id, &ptr);
-
- BKE_reports_init(&reports, RPT_PRINT);
-
- func= RNA_struct_find_function(&ptr, template->filterop);
-
- if (func) {
- RNA_parameter_list_create(&parms, &ptr, func);
-
- RNA_parameter_set_lookup(&parms, "context", &C);
-
- if (RNA_function_call(C, &reports, &ptr, func, &parms) == 0) {
- int* ret;
- RNA_parameter_get_lookup(&parms, "ret", (void **)&ret);
-
- if (!(*ret)) {
- RNA_parameter_list_free(&parms);
- continue;
- }
- else {
- filter_yes= 1;
- }
- }
-
- RNA_parameter_list_free(&parms);
- }
+ if(RNA_property_pointer_poll(&template->ptr, template->prop, &ptr)==0)
+ continue;
}
/* hide dot-datablocks, but only if filter does not force it visible */
- if(!filter_yes && U.uiflag & USER_HIDE_DOT)
+ if(U.uiflag & USER_HIDE_DOT)
if ((id->name[2]=='.') && (str[0] != '.'))
continue;
if(BLI_strcasestr(id->name+2, str)) {
+ char name_ui[32];
+ name_uiprefix_id(name_ui, id);
+
iconid= ui_id_icon_get((bContext*)C, id, 1);
- if(!uiSearchItemAdd(items, id->name+2, id, iconid))
+ if(!uiSearchItemAdd(items, name_ui, id, iconid))
break;
}
}
@@ -381,7 +349,7 @@ static void template_id_cb(bContext *C, void *arg_litem, void *arg_event)
}
}
-static void template_ID(bContext *C, uiLayout *layout, TemplateID *template, StructRNA *type, int flag, char *newop, char *openop, char *unlinkop, char *filterop)
+static void template_ID(bContext *C, uiLayout *layout, TemplateID *template, StructRNA *type, int flag, char *newop, char *openop, char *unlinkop)
{
uiBut *but;
uiBlock *block;
@@ -467,6 +435,10 @@ static void template_ID(bContext *C, uiLayout *layout, TemplateID *template, Str
if(!id_copy(id, NULL, 1 /* test only */) || (idfrom && idfrom->lib))
uiButSetFlag(but, UI_BUT_DISABLED);
}
+
+ if(id->lib == NULL && !(ELEM4(GS(id->name), ID_GR, ID_SCE, ID_SCR, ID_TXT))) {
+ uiDefButR(block, TOG, 0, "F", 0, 0, UI_UNIT_X, UI_UNIT_Y, &idptr, "use_fake_user", -1, 0, 0, -1, -1, NULL);
+ }
}
if(flag & UI_ID_ADD_NEW) {
@@ -521,7 +493,7 @@ static void template_ID(bContext *C, uiLayout *layout, TemplateID *template, Str
uiBlockEndAlign(block);
}
-static void ui_template_id(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propname, char *newop, char *openop, char *unlinkop, char* filterop, int flag, int prv_rows, int prv_cols)
+static void ui_template_id(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propname, char *newop, char *openop, char *unlinkop, int flag, int prv_rows, int prv_cols)
{
TemplateID *template;
PropertyRNA *prop;
@@ -530,7 +502,7 @@ static void ui_template_id(uiLayout *layout, bContext *C, PointerRNA *ptr, char
prop= RNA_struct_find_property(ptr, propname);
if(!prop || RNA_property_type(prop) != PROP_POINTER) {
- printf("uiTemplateID: pointer property not found: %s\n", propname);
+ printf("uiTemplateID: pointer property not found: %s.%s\n", RNA_struct_identifier(ptr->type), propname);
return;
}
@@ -540,11 +512,6 @@ static void ui_template_id(uiLayout *layout, bContext *C, PointerRNA *ptr, char
template->prv_rows = prv_rows;
template->prv_cols = prv_cols;
- if (filterop)
- BLI_strncpy(template->filterop, filterop, sizeof(template->filterop));
- else
- template->filterop[0] = 0;
-
if(newop)
flag |= UI_ID_ADD_NEW;
if(openop)
@@ -558,25 +525,25 @@ static void ui_template_id(uiLayout *layout, bContext *C, PointerRNA *ptr, char
*/
if(template->idlb) {
uiLayoutRow(layout, 1);
- template_ID(C, layout, template, type, flag, newop, openop, unlinkop, filterop);
+ template_ID(C, layout, template, type, flag, newop, openop, unlinkop);
}
MEM_freeN(template);
}
-void uiTemplateID(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propname, char *newop, char *openop, char *unlinkop, char *filterop)
+void uiTemplateID(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propname, char *newop, char *openop, char *unlinkop)
{
- ui_template_id(layout, C, ptr, propname, newop, openop, unlinkop, filterop, UI_ID_BROWSE|UI_ID_RENAME|UI_ID_DELETE, 0, 0);
+ ui_template_id(layout, C, ptr, propname, newop, openop, unlinkop, UI_ID_BROWSE|UI_ID_RENAME|UI_ID_DELETE, 0, 0);
}
-void uiTemplateIDBrowse(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propname, char *newop, char *openop, char *unlinkop, char *filterop)
+void uiTemplateIDBrowse(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propname, char *newop, char *openop, char *unlinkop)
{
- ui_template_id(layout, C, ptr, propname, newop, openop, unlinkop, filterop, UI_ID_BROWSE|UI_ID_RENAME, 0, 0);
+ ui_template_id(layout, C, ptr, propname, newop, openop, unlinkop, UI_ID_BROWSE|UI_ID_RENAME, 0, 0);
}
-void uiTemplateIDPreview(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propname, char *newop, char *openop, char *unlinkop, char *filterop, int rows, int cols)
+void uiTemplateIDPreview(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propname, char *newop, char *openop, char *unlinkop, int rows, int cols)
{
- ui_template_id(layout, C, ptr, propname, newop, openop, unlinkop, filterop, UI_ID_BROWSE|UI_ID_RENAME|UI_ID_DELETE|UI_ID_PREVIEWS, rows, cols);
+ ui_template_id(layout, C, ptr, propname, newop, openop, unlinkop, UI_ID_BROWSE|UI_ID_RENAME|UI_ID_DELETE|UI_ID_PREVIEWS, rows, cols);
}
/************************ ID Chooser Template ***************************/
@@ -596,11 +563,11 @@ void uiTemplateAnyID(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propn
propType= RNA_struct_find_property(ptr, proptypename);
if (!propID || RNA_property_type(propID) != PROP_POINTER) {
- printf("uiTemplateAnyID: pointer property not found: %s\n", propname);
+ printf("uiTemplateAnyID: pointer property not found: %s.%s\n", RNA_struct_identifier(ptr->type), propname);
return;
}
if (!propType || RNA_property_type(propType) != PROP_ENUM) {
- printf("uiTemplateAnyID: pointer-type property not found: %s\n", proptypename);
+ printf("uiTemplateAnyID: pointer-type property not found: %s.%s\n", RNA_struct_identifier(ptr->type), proptypename);
return;
}
@@ -639,7 +606,7 @@ void uiTemplatePathBuilder(uiLayout *layout, bContext *C, PointerRNA *ptr, char
/* check that properties are valid */
propPath= RNA_struct_find_property(ptr, propname);
if (!propPath || RNA_property_type(propPath) != PROP_STRING) {
- printf("uiTemplatePathBuilder: path property not found: %s\n", propname);
+ printf("uiTemplatePathBuilder: path property not found: %s.%s\n", RNA_struct_identifier(ptr->type), propname);
return;
}
@@ -661,12 +628,8 @@ void uiTemplatePathBuilder(uiLayout *layout, bContext *C, PointerRNA *ptr, char
#include "DNA_object_force.h"
#include "BKE_depsgraph.h"
-#include "BKE_DerivedMesh.h"
-#include "BKE_global.h"
#include "BKE_modifier.h"
-#include "BKE_object.h"
#include "BKE_particle.h"
-#include "BKE_report.h"
#include "ED_util.h"
@@ -728,13 +691,13 @@ static int modifier_can_delete(ModifierData *md)
return 1;
}
-static uiLayout *draw_modifier(uiLayout *layout, Scene *scene, Object *ob, ModifierData *md, int index, int cageIndex, int lastCageIndex, int compact)
+static uiLayout *draw_modifier(uiLayout *layout, Scene *scene, Object *ob, ModifierData *md, int index, int cageIndex, int lastCageIndex)
{
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
PointerRNA ptr;
uiBut *but;
uiBlock *block;
- uiLayout *box, *column, *row, *col;
+ uiLayout *box, *column, *row;
uiLayout *result= NULL;
int isVirtual = (md->mode & eModifierMode_Virtual);
char str[128];
@@ -762,65 +725,31 @@ static uiLayout *draw_modifier(uiLayout *layout, Scene *scene, Object *ob, Modif
}
else {
/* REAL MODIFIER */
- uiLayout *split;
-
- split = uiLayoutSplit(box, 0.16, 0);
-
- col= uiLayoutColumn(split, 0);
- row = uiLayoutRow(col, 1);
-
+ row = uiLayoutRow(box, 0);
block = uiLayoutGetBlock(row);
uiBlockSetEmboss(block, UI_EMBOSSN);
-
/* Open/Close ................................. */
- uiItemR(row, &ptr, "expanded", 0, "", 0);
+ uiItemR(row, &ptr, "show_expanded", 0, "", 0);
/* modifier-type icon */
uiItemL(row, "", RNA_struct_ui_icon(ptr.type));
-
uiBlockSetEmboss(block, UI_EMBOSS);
-
- /* 'Middle Column' ............................
- * - first row is the name of the modifier
- * - second row is the visibility settings, since the layouts were not wide enough to show all
- */
- col= uiLayoutColumn(split, 0);
-
- row= uiLayoutRow(col, 0);
- uiLayoutSetAlignment(row, UI_LAYOUT_ALIGN_EXPAND);
-
- block = uiLayoutGetBlock(row);
-
/* modifier name */
uiItemR(row, &ptr, "name", 0, "", 0);
- if (compact) {
- /* insert delete button at end of top row before splitting to second line */
- uiBlockSetEmboss(block, UI_EMBOSSN);
- if (modifier_can_delete(md))
- uiItemO(row, "", ICON_X, "OBJECT_OT_modifier_remove");
- uiBlockSetEmboss(block, UI_EMBOSS);
-
- split = uiLayoutSplit(box, 0.17, 0);
- col= uiLayoutColumn(split, 0);
- uiItemL(col, "", 0);
- col= uiLayoutColumn(split, 0);
- row = uiLayoutRow(col, 1);
- }
-
/* mode enabling buttons */
uiBlockBeginAlign(block);
/* Softbody not allowed in this situation, enforce! */
if ( ((md->type!=eModifierType_Softbody && md->type!=eModifierType_Collision) || !(ob->pd && ob->pd->deflect))
&& (md->type!=eModifierType_Surface) )
{
- uiItemR(row, &ptr, "render", 0, "", 0);
- uiItemR(row, &ptr, "realtime", 0, "", 0);
+ uiItemR(row, &ptr, "show_render", 0, "", 0);
+ uiItemR(row, &ptr, "show_viewport", 0, "", 0);
if (mti->flags & eModifierTypeFlag_SupportsEditmode)
- uiItemR(row, &ptr, "editmode", 0, "", 0);
+ uiItemR(row, &ptr, "show_in_editmode", 0, "", 0);
}
if ((ob->type==OB_MESH) && modifier_couldBeCage(scene, md) && (index <= lastCageIndex))
{
@@ -838,12 +767,10 @@ static uiLayout *draw_modifier(uiLayout *layout, Scene *scene, Object *ob, Modif
uiItemO(row, "", ICON_TRIA_DOWN, "OBJECT_OT_modifier_move_down");
uiBlockEndAlign(block);
- if(!compact) {
- uiBlockSetEmboss(block, UI_EMBOSSN);
- if (modifier_can_delete(md))
- uiItemO(row, "", ICON_X, "OBJECT_OT_modifier_remove");
- uiBlockSetEmboss(block, UI_EMBOSS);
- }
+ uiBlockSetEmboss(block, UI_EMBOSSN);
+ if (modifier_can_delete(md))
+ uiItemO(row, "", ICON_X, "OBJECT_OT_modifier_remove");
+ uiBlockSetEmboss(block, UI_EMBOSS);
}
@@ -878,7 +805,7 @@ static uiLayout *draw_modifier(uiLayout *layout, Scene *scene, Object *ob, Modif
uiBlockClearButLock(block);
uiBlockSetButLock(block, ob && ob->id.lib, ERROR_LIBDATA_MESSAGE);
- if (!ELEM4(md->type, eModifierType_Fluidsim, eModifierType_Softbody, eModifierType_ParticleSystem, eModifierType_Cloth))
+ if (!ELEM5(md->type, eModifierType_Fluidsim, eModifierType_Softbody, eModifierType_ParticleSystem, eModifierType_Cloth, eModifierType_Smoke))
uiItemO(row, "Copy", 0, "OBJECT_OT_modifier_copy");
}
@@ -897,7 +824,7 @@ static uiLayout *draw_modifier(uiLayout *layout, Scene *scene, Object *ob, Modif
return result;
}
-uiLayout *uiTemplateModifier(uiLayout *layout, bContext *C, PointerRNA *ptr, int compact)
+uiLayout *uiTemplateModifier(uiLayout *layout, bContext *C, PointerRNA *ptr)
{
Scene *scene = CTX_data_scene(C);
Object *ob;
@@ -928,7 +855,7 @@ uiLayout *uiTemplateModifier(uiLayout *layout, bContext *C, PointerRNA *ptr, int
for(i=0; vmd; i++, vmd=vmd->next) {
if(md == vmd)
- return draw_modifier(layout, scene, ob, md, i, cageIndex, lastCageIndex, compact);
+ return draw_modifier(layout, scene, ob, md, i, cageIndex, lastCageIndex);
else if(vmd->mode & eModifierMode_Virtual)
i--;
}
@@ -954,6 +881,7 @@ uiLayout *uiTemplateModifier(uiLayout *layout, bContext *C, PointerRNA *ptr, int
void do_constraint_panels(bContext *C, void *arg, int event)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
Object *ob= CTX_data_active_object(C);
@@ -965,7 +893,7 @@ void do_constraint_panels(bContext *C, void *arg, int event)
break; // no handling
case B_CONSTRAINT_CHANGETARGET:
if (ob->pose) ob->pose->flag |= POSE_RECALC; // checks & sorts pose channels
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
break;
default:
break;
@@ -993,12 +921,12 @@ static void constraint_active_func(bContext *C, void *ob_v, void *con_v)
}
/* draw panel showing settings for a constraint */
-static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con, int compact)
+static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con)
{
bPoseChannel *pchan= get_active_posechannel(ob);
bConstraintTypeInfo *cti;
uiBlock *block;
- uiLayout *result= NULL, *col, *box, *row, *subrow;
+ uiLayout *result= NULL, *col, *box, *row;
PointerRNA ptr;
char typestr[32];
short proxy_protected, xco=0, yco=0;
@@ -1043,7 +971,7 @@ static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con,
/* open/close */
uiBlockSetEmboss(block, UI_EMBOSSN);
- uiItemR(row, &ptr, "expanded", UI_ITEM_R_ICON_ONLY, "", 0);
+ uiItemR(row, &ptr, "show_expanded", UI_ITEM_R_ICON_ONLY, "", 0);
uiBlockSetEmboss(block, UI_EMBOSS);
/* XXX if (con->flag & CONSTRAINT_DISABLE)
@@ -1090,32 +1018,22 @@ static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con,
show_upbut= ((prev_proxylock == 0) && (con->prev));
show_downbut= (con->next) ? 1 : 0;
-
- /* Code for compact Constraint UI */
- if (compact) {
- subrow = uiLayoutRow(box, 0);
- }
- else {
- subrow = row;
- }
- uiLayoutSetOperatorContext(subrow, WM_OP_INVOKE_DEFAULT);
+ uiLayoutSetOperatorContext(row, WM_OP_INVOKE_DEFAULT);
/* up/down */
if (show_upbut || show_downbut) {
uiBlockBeginAlign(block);
if (show_upbut)
- uiItemO(subrow, "", ICON_TRIA_UP, "CONSTRAINT_OT_move_up");
+ uiItemO(row, "", ICON_TRIA_UP, "CONSTRAINT_OT_move_up");
if (show_downbut)
- uiItemO(subrow, "", ICON_TRIA_DOWN, "CONSTRAINT_OT_move_down");
+ uiItemO(row, "", ICON_TRIA_DOWN, "CONSTRAINT_OT_move_down");
uiBlockEndAlign(block);
}
/* enabled */
- uiItemR(subrow, &ptr, "enabled", 0, "", 0);
-
- uiLayoutSetOperatorContext(row, WM_OP_INVOKE_DEFAULT);
+ uiItemR(row, &ptr, "mute", 0, "", 0);
/* Close 'button' - emboss calls here disable drawing of 'button' behind X */
uiBlockSetEmboss(block, UI_EMBOSSN);
@@ -1143,7 +1061,7 @@ static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con,
return result;
}
-uiLayout *uiTemplateConstraint(uiLayout *layout, PointerRNA *ptr, int compact)
+uiLayout *uiTemplateConstraint(uiLayout *layout, PointerRNA *ptr)
{
Object *ob;
bConstraint *con;
@@ -1171,7 +1089,7 @@ uiLayout *uiTemplateConstraint(uiLayout *layout, PointerRNA *ptr, int compact)
return NULL;
}
- return draw_constraint(layout, ob, con, compact);
+ return draw_constraint(layout, ob, con);
}
@@ -1179,7 +1097,6 @@ uiLayout *uiTemplateConstraint(uiLayout *layout, PointerRNA *ptr, int compact)
#include "DNA_lamp_types.h"
#include "DNA_material_types.h"
-#include "DNA_texture_types.h"
#include "DNA_world_types.h"
#define B_MATPRV 1
@@ -1279,7 +1196,6 @@ void uiTemplatePreview(uiLayout *layout, ID *id, ID *parent, MTex *slot)
/********************** ColorRamp Template **************************/
-#include "BKE_texture.h"
typedef struct RNAUpdateCb {
PointerRNA ptr;
@@ -1298,89 +1214,30 @@ static void rna_update_cb(bContext *C, void *arg_cb, void *arg_unused)
#define B_BANDCOL 1
-static int vergcband(const void *a1, const void *a2)
-{
- const CBData *x1=a1, *x2=a2;
-
- if( x1->pos > x2->pos ) return 1;
- else if( x1->pos < x2->pos) return -1;
- return 0;
-}
-
-static void colorband_pos_cb(bContext *C, void *cb_v, void *coba_v)
-{
- ColorBand *coba= coba_v;
- int a;
-
- if(coba->tot<2) return;
-
- for(a=0; a<coba->tot; a++) coba->data[a].cur= a;
- qsort(coba->data, coba->tot, sizeof(CBData), vergcband);
- for(a=0; a<coba->tot; a++) {
- if(coba->data[a].cur==coba->cur) {
- coba->cur= a;
- break;
- }
- }
-
- rna_update_cb(C, cb_v, NULL);
-}
-
static void colorband_add_cb(bContext *C, void *cb_v, void *coba_v)
{
ColorBand *coba= coba_v;
+ float pos= 0.5f;
- if(coba->tot > 0) {
- CBData *xnew, *x1, *x2;
- float col[4];
-
- xnew= &coba->data[coba->tot];
-
- if(coba->tot > 1) {
- if(coba->cur > 0) {
- x1= &coba->data[coba->cur-1];
- x2= &coba->data[coba->cur];
- }
- else {
- x1= &coba->data[coba->cur];
- x2= &coba->data[coba->cur+1];
- }
-
- xnew->pos = x1->pos + ((x2->pos - x1->pos) / 2);
- }
-
- do_colorband(coba, xnew->pos, col);
-
- xnew->r= col[0];
- xnew->g= col[1];
- xnew->b= col[2];
- xnew->a= col[3];
+ if(coba->tot > 1) {
+ if(coba->cur > 0) pos= (coba->data[coba->cur-1].pos + coba->data[coba->cur].pos) * 0.5f;
+ else pos= (coba->data[coba->cur+1].pos + coba->data[coba->cur].pos) * 0.5f;
}
- if(coba->tot < MAXCOLORBAND-1) coba->tot++;
- coba->cur= coba->tot-1;
-
- colorband_pos_cb(C, cb_v, coba_v);
-
- ED_undo_push(C, "Add colorband");
+ if(colorband_element_add(coba, pos)) {
+ rna_update_cb(C, cb_v, NULL);
+ ED_undo_push(C, "Add colorband");
+ }
}
static void colorband_del_cb(bContext *C, void *cb_v, void *coba_v)
{
ColorBand *coba= coba_v;
- int a;
-
- if(coba->tot<2) return;
- for(a=coba->cur; a<coba->tot; a++) {
- coba->data[a]= coba->data[a+1];
+ if(colorband_element_remove(coba, coba->cur)) {
+ ED_undo_push(C, "Delete colorband");
+ rna_update_cb(C, cb_v, NULL);
}
- if(coba->cur) coba->cur--;
- coba->tot--;
-
- ED_undo_push(C, "Delete colorband");
-
- rna_update_cb(C, cb_v, NULL);
}
static void colorband_flip_cb(bContext *C, void *cb_v, void *coba_v)
@@ -1634,7 +1491,6 @@ void uiTemplateVectorscope(uiLayout *layout, PointerRNA *ptr, char *propname, in
/********************* CurveMapping Template ************************/
-#include "BKE_colortools.h"
static void curvemap_buttons_zoom_in(bContext *C, void *cumap_v, void *unused)
{
@@ -1743,7 +1599,7 @@ static void curvemap_tools_dofunc(bContext *C, void *cumap_v, int event)
switch(event) {
case 0: /* reset */
- curvemap_reset(cuma, &cumap->clipr, cumap->preset);
+ curvemap_reset(cuma, &cumap->clipr, cumap->preset, CURVEMAP_SLOPE_POSITIVE);
curvemapping_changed(cumap, 0);
break;
case 1:
@@ -1823,7 +1679,7 @@ static void curvemap_buttons_reset(bContext *C, void *cb_v, void *cumap_v)
cumap->preset = CURVE_PRESET_LINE;
for(a=0; a<CM_TOT; a++)
- curvemap_reset(cumap->cm+a, &cumap->clipr, cumap->preset);
+ curvemap_reset(cumap->cm+a, &cumap->clipr, cumap->preset, CURVEMAP_SLOPE_POSITIVE);
cumap->black[0]=cumap->black[1]=cumap->black[2]= 0.0f;
cumap->white[0]=cumap->white[1]=cumap->white[2]= 1.0f;
@@ -1997,7 +1853,7 @@ void uiTemplateColorWheel(uiLayout *layout, PointerRNA *ptr, char *propname, int
float softmin, softmax, step, precision;
if (!prop) {
- printf("uiTemplateColorWheel: property not found: %s\n", propname);
+ printf("uiTemplateColorWheel: property not found: %s.%s\n", RNA_struct_identifier(ptr->type), propname);
return;
}
@@ -2038,7 +1894,7 @@ void uiTemplateTriColorSet(uiLayout *layout, PointerRNA *ptr, char *propname)
PointerRNA csPtr;
if (!prop) {
- printf("uiTemplateTriColorSet: property not found: %s\n", propname);
+ printf("uiTemplateTriColorSet: property not found: %s.%s\n", RNA_struct_identifier(ptr->type), propname);
return;
}
@@ -2049,7 +1905,7 @@ void uiTemplateTriColorSet(uiLayout *layout, PointerRNA *ptr, char *propname)
csPtr= RNA_property_pointer_get(ptr, prop);
uiItemR(row, &csPtr, "normal", 0, "", 0);
- uiItemR(row, &csPtr, "selected", 0, "", 0);
+ uiItemR(row, &csPtr, "select", 0, "", 0);
uiItemR(row, &csPtr, "active", 0, "", 0);
}
@@ -2090,7 +1946,7 @@ void uiTemplateLayers(uiLayout *layout, PointerRNA *ptr, char *propname,
prop= RNA_struct_find_property(ptr, propname);
if (!prop) {
- printf("uiTemplateLayer: layers property not found: %s\n", propname);
+ printf("uiTemplateLayer: layers property not found: %s.%s\n", RNA_struct_identifier(ptr->type), propname);
return;
}
@@ -2109,7 +1965,7 @@ void uiTemplateLayers(uiLayout *layout, PointerRNA *ptr, char *propname,
if(used_ptr && used_propname) {
used_prop= RNA_struct_find_property(used_ptr, used_propname);
if (!used_prop) {
- printf("uiTemplateLayer: used layers property not found: %s\n", used_propname);
+ printf("uiTemplateLayer: used layers property not found: %s.%s\n", RNA_struct_identifier(ptr->type), used_propname);
return;
}
@@ -2195,12 +2051,6 @@ static void list_item_row(bContext *C, uiLayout *layout, PointerRNA *ptr, Pointe
/* list item behind label & other buttons */
sub= uiLayoutRow(overlap, 0);
- if(itemptr->type == &RNA_ShapeKey) {
- ob= (Object*)activeptr->data;
- if(ob->mode == OB_MODE_EDIT && !(ob->type == OB_MESH))
- uiLayoutSetEnabled(sub, 0);
- }
-
but= uiDefButR(block, LISTROW, 0, "", 0,0, UI_UNIT_X*10,UI_UNIT_Y, activeptr, activepropname, 0, 0, i, 0, 0, "");
uiButSetFlag(but, UI_BUT_NO_TOOLTIP);
@@ -2229,7 +2079,7 @@ static void list_item_row(bContext *C, uiLayout *layout, PointerRNA *ptr, Pointe
else if(RNA_struct_is_a(itemptr->type, &RNA_SceneRenderLayer)) {
uiItemL(sub, name, icon);
uiBlockSetEmboss(block, UI_EMBOSS);
- uiDefButR(block, OPTION, 0, "", 0, 0, UI_UNIT_X, UI_UNIT_Y, itemptr, "enabled", 0, 0, 0, 0, 0, NULL);
+ uiDefButR(block, OPTION, 0, "", 0, 0, UI_UNIT_X, UI_UNIT_Y, itemptr, "use", 0, 0, 0, 0, 0, NULL);
}
else if(itemptr->type == &RNA_ShapeKey) {
ob= (Object*)activeptr->data;
@@ -2284,14 +2134,14 @@ void uiTemplateList(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propna
if(ptr->data) {
prop= RNA_struct_find_property(ptr, propname);
if(!prop) {
- printf("uiTemplateList: property not found: %s\n", propname);
+ printf("uiTemplateList: property not found: %s.%s\n", RNA_struct_identifier(ptr->type), propname);
return;
}
}
activeprop= RNA_struct_find_property(activeptr, activepropname);
if(!activeprop) {
- printf("uiTemplateList: property not found: %s\n", activepropname);
+ printf("uiTemplateList: property not found: %s.%s\n", RNA_struct_identifier(ptr->type), activepropname);
return;
}
diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c
index d2860adbf50..6b7d88d3c28 100644
--- a/source/blender/editors/interface/interface_widgets.c
+++ b/source/blender/editors/interface/interface_widgets.c
@@ -28,7 +28,6 @@
#include <stdlib.h>
#include <string.h>
-#include "MEM_guardedalloc.h"
#include "DNA_screen_types.h"
#include "DNA_userdef_types.h"
@@ -39,7 +38,6 @@
#include "BKE_context.h"
#include "BKE_curve.h"
-#include "BKE_global.h"
#include "BKE_utildefines.h"
#include "RNA_access.h"
@@ -747,11 +745,10 @@ static void widgetbase_draw(uiWidgetBase *wtb, uiWidgetColors *wcol)
static void widget_draw_preview(BIFIconID icon, float aspect, float alpha, rcti *rect)
{
int w, h, x, y, size;
-
- /* only display previews for actual preview images .. ? */
- if (icon < BIFICONID_LAST)
+
+ if(!icon)
return;
-
+
w = rect->xmax - rect->xmin;
h = rect->ymax - rect->ymin;
size = MIN2(w, h);
diff --git a/source/blender/editors/interface/resources.c b/source/blender/editors/interface/resources.c
index 58357bc67cf..227f3a4de1d 100644
--- a/source/blender/editors/interface/resources.c
+++ b/source/blender/editors/interface/resources.c
@@ -987,6 +987,7 @@ void UI_make_axis_color(char *src_col, char *dst_col, char axis)
/* patching UserDef struct and Themes */
void init_userdef_do_versions(void)
{
+ Main *bmain= G.main;
// countall();
/* the UserDef struct is not corrected with do_versions() .... ugh! */
@@ -1007,7 +1008,7 @@ void init_userdef_do_versions(void)
}
if (U.savetime <= 0) {
U.savetime = 1;
-// XXX error(".B.blend is buggy, please consider removing it.\n");
+// XXX error("startup.blend is buggy, please consider removing it.\n");
}
/* transform widget settings */
if(U.tw_hotspot==0) {
@@ -1021,18 +1022,18 @@ void init_userdef_do_versions(void)
if(U.flag & USER_CUSTOM_RANGE)
vDM_ColorBand_store(&U.coba_weight); /* signal for derivedmesh to use colorband */
- if (G.main->versionfile <= 191) {
+ if (bmain->versionfile <= 191) {
strcpy(U.plugtexdir, U.textudir);
strcpy(U.sounddir, "/");
}
/* patch to set Dupli Armature */
- if (G.main->versionfile < 220) {
+ if (bmain->versionfile < 220) {
U.dupflag |= USER_DUP_ARM;
}
/* added seam, normal color, undo */
- if (G.main->versionfile <= 234) {
+ if (bmain->versionfile <= 234) {
bTheme *btheme;
U.uiflag |= USER_GLOBALUNDO;
@@ -1055,12 +1056,12 @@ void init_userdef_do_versions(void)
}
}
}
- if (G.main->versionfile <= 235) {
+ if (bmain->versionfile <= 235) {
/* illegal combo... */
if (U.flag & USER_LMOUSESELECT)
U.flag &= ~USER_TWOBUTTONMOUSE;
}
- if (G.main->versionfile <= 236) {
+ if (bmain->versionfile <= 236) {
bTheme *btheme;
/* new space type */
for(btheme= U.themes.first; btheme; btheme= btheme->next) {
@@ -1077,7 +1078,7 @@ void init_userdef_do_versions(void)
}
}
}
- if (G.main->versionfile <= 237) {
+ if (bmain->versionfile <= 237) {
bTheme *btheme;
/* bone colors */
for(btheme= U.themes.first; btheme; btheme= btheme->next) {
@@ -1088,7 +1089,7 @@ void init_userdef_do_versions(void)
}
}
}
- if (G.main->versionfile <= 238) {
+ if (bmain->versionfile <= 238) {
bTheme *btheme;
/* bone colors */
for(btheme= U.themes.first; btheme; btheme= btheme->next) {
@@ -1099,7 +1100,7 @@ void init_userdef_do_versions(void)
}
}
}
- if (G.main->versionfile <= 239) {
+ if (bmain->versionfile <= 239) {
bTheme *btheme;
for(btheme= U.themes.first; btheme; btheme= btheme->next) {
@@ -1113,7 +1114,7 @@ void init_userdef_do_versions(void)
}
if(U.obcenter_dia==0) U.obcenter_dia= 6;
}
- if (G.main->versionfile <= 241) {
+ if (bmain->versionfile <= 241) {
bTheme *btheme;
for(btheme= U.themes.first; btheme; btheme= btheme->next) {
/* Node editor theme, check for alpha==0 is safe, then color was never set */
@@ -1146,7 +1147,7 @@ void init_userdef_do_versions(void)
}
/* set defaults for 3D View rotating axis indicator */
- /* since size can't be set to 0, this indicates it's not saved in .B.blend */
+ /* since size can't be set to 0, this indicates it's not saved in startup.blend */
if (U.rvisize == 0) {
U.rvisize = 15;
U.rvibright = 8;
@@ -1154,7 +1155,7 @@ void init_userdef_do_versions(void)
}
}
- if (G.main->versionfile <= 242) {
+ if (bmain->versionfile <= 242) {
bTheme *btheme;
for(btheme= U.themes.first; btheme; btheme= btheme->next) {
@@ -1172,11 +1173,11 @@ void init_userdef_do_versions(void)
}
}
}
- if (G.main->versionfile <= 243) {
+ if (bmain->versionfile <= 243) {
/* set default number of recently-used files (if not set) */
if (U.recent_files == 0) U.recent_files = 10;
}
- if (G.main->versionfile < 245 || (G.main->versionfile == 245 && G.main->subversionfile < 3)) {
+ if (bmain->versionfile < 245 || (bmain->versionfile == 245 && bmain->subversionfile < 3)) {
bTheme *btheme;
for(btheme= U.themes.first; btheme; btheme= btheme->next) {
SETCOL(btheme->tv3d.editmesh_active, 255, 255, 255, 128);
@@ -1184,7 +1185,7 @@ void init_userdef_do_versions(void)
if(U.coba_weight.tot==0)
init_colorband(&U.coba_weight, 1);
}
- if ((G.main->versionfile < 245) || (G.main->versionfile == 245 && G.main->subversionfile < 11)) {
+ if ((bmain->versionfile < 245) || (bmain->versionfile == 245 && bmain->subversionfile < 11)) {
bTheme *btheme;
for (btheme= U.themes.first; btheme; btheme= btheme->next) {
/* these should all use the same colour */
@@ -1197,7 +1198,7 @@ void init_userdef_do_versions(void)
SETCOL(btheme->ttime.cframe, 0x60, 0xc0, 0x40, 255);
}
}
- if ((G.main->versionfile < 245) || (G.main->versionfile == 245 && G.main->subversionfile < 13)) {
+ if ((bmain->versionfile < 245) || (bmain->versionfile == 245 && bmain->subversionfile < 13)) {
bTheme *btheme;
for (btheme= U.themes.first; btheme; btheme= btheme->next) {
/* action channel groups (recolor anyway) */
@@ -1270,10 +1271,10 @@ void init_userdef_do_versions(void)
}
}
}
- if ((G.main->versionfile < 245) || (G.main->versionfile == 245 && G.main->subversionfile < 16)) {
+ if ((bmain->versionfile < 245) || (bmain->versionfile == 245 && bmain->subversionfile < 16)) {
U.flag |= USER_ADD_VIEWALIGNED|USER_ADD_EDITMODE;
}
- if ((G.main->versionfile < 247) || (G.main->versionfile == 247 && G.main->subversionfile <= 2)) {
+ if ((bmain->versionfile < 247) || (bmain->versionfile == 247 && bmain->subversionfile <= 2)) {
bTheme *btheme;
/* adjust themes */
@@ -1295,7 +1296,7 @@ void init_userdef_do_versions(void)
SETCOL(btheme->tseq.vertex_select, col[0], col[1], col[2], 255);
}
}
- if (G.main->versionfile < 250) {
+ if (bmain->versionfile < 250) {
bTheme *btheme;
for(btheme= U.themes.first; btheme; btheme= btheme->next) {
@@ -1336,7 +1337,7 @@ void init_userdef_do_versions(void)
U.ipo_new= BEZT_IPO_BEZ;
}
- if (G.main->versionfile < 250 || (G.main->versionfile == 250 && G.main->subversionfile < 1)) {
+ if (bmain->versionfile < 250 || (bmain->versionfile == 250 && bmain->subversionfile < 1)) {
bTheme *btheme;
for(btheme= U.themes.first; btheme; btheme= btheme->next) {
@@ -1359,7 +1360,7 @@ void init_userdef_do_versions(void)
}
}
- if (G.main->versionfile < 250 || (G.main->versionfile == 250 && G.main->subversionfile < 3)) {
+ if (bmain->versionfile < 250 || (bmain->versionfile == 250 && bmain->subversionfile < 3)) {
/* new audio system */
if(U.audiochannels == 0)
U.audiochannels = 2;
@@ -1377,10 +1378,10 @@ void init_userdef_do_versions(void)
U.audiorate = 44100;
}
- if (G.main->versionfile < 250 || (G.main->versionfile == 250 && G.main->subversionfile < 5))
+ if (bmain->versionfile < 250 || (bmain->versionfile == 250 && bmain->subversionfile < 5))
U.gameflags |= USER_DISABLE_VBO;
- if (G.main->versionfile < 250 || (G.main->versionfile == 250 && G.main->subversionfile < 8)) {
+ if (bmain->versionfile < 250 || (bmain->versionfile == 250 && bmain->subversionfile < 8)) {
wmKeyMap *km;
for(km=U.keymaps.first; km; km=km->next) {
@@ -1420,16 +1421,16 @@ void init_userdef_do_versions(void)
strcpy(km->idname, "Property Editor");
}
}
- if (G.main->versionfile < 250 || (G.main->versionfile == 250 && G.main->subversionfile < 16)) {
+ if (bmain->versionfile < 250 || (bmain->versionfile == 250 && bmain->subversionfile < 16)) {
if(U.wmdrawmethod == USER_DRAW_TRIPLE)
U.wmdrawmethod = USER_DRAW_AUTOMATIC;
}
- if (G.main->versionfile < 252 || (G.main->versionfile == 252 && G.main->subversionfile < 3)) {
+ if (bmain->versionfile < 252 || (bmain->versionfile == 252 && bmain->subversionfile < 3)) {
if (U.flag & USER_LMOUSESELECT)
U.flag &= ~USER_TWOBUTTONMOUSE;
}
- if (G.main->versionfile < 252 || (G.main->versionfile == 252 && G.main->subversionfile < 4)) {
+ if (bmain->versionfile < 252 || (bmain->versionfile == 252 && bmain->subversionfile < 4)) {
bTheme *btheme;
/* default new handle type is auto handles */
@@ -1462,7 +1463,7 @@ void init_userdef_do_versions(void)
SETCOLF(btheme->tv3d.edge_crease, 0.8, 0, 0.6, 1.0);
}
}
- if (G.main->versionfile <= 252) {
+ if (bmain->versionfile <= 252) {
bTheme *btheme;
/* init new curve colors */
@@ -1471,7 +1472,7 @@ void init_userdef_do_versions(void)
SETCOL(btheme->tv3d.lastsel_point, 0xff, 0xff, 0xff, 255);
}
}
- if (G.main->versionfile < 252 || (G.main->versionfile == 252 && G.main->subversionfile < 5)) {
+ if (bmain->versionfile < 252 || (bmain->versionfile == 252 && bmain->subversionfile < 5)) {
bTheme *btheme;
/* interface_widgets.c */
@@ -1518,25 +1519,10 @@ void init_userdef_do_versions(void)
if (U.v2d_min_gridsize == 0) {
U.v2d_min_gridsize= 35;
}
-
- /* Single Column UI Value */
- if (U.propwidth == 0) {
- U.propwidth = 200;
- }
/* funny name, but it is GE stuff, moves userdef stuff to engine */
// XXX space_set_commmandline_options();
/* this timer uses U */
// XXX reset_autosave();
- /* GSOC Sculpt 2010 - Sanity check on Sculpt/Paint settings */
-
- if (U.sculpt_paint_unified_alpha == 0)
- U.sculpt_paint_unified_alpha = 0.5f;
-
- if (U.sculpt_paint_unified_unprojected_radius == 0)
- U.sculpt_paint_unified_unprojected_radius = 0.125f;
-
- if (U.sculpt_paint_unified_size == 0)
- U.sculpt_paint_unified_size = 35;
}
diff --git a/source/blender/editors/interface/view2d.c b/source/blender/editors/interface/view2d.c
index 9a88a52d4b4..14ec7c6d0d6 100644
--- a/source/blender/editors/interface/view2d.c
+++ b/source/blender/editors/interface/view2d.c
@@ -44,7 +44,6 @@
#include "WM_api.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "BLF_api.h"
diff --git a/source/blender/editors/interface/view2d_ops.c b/source/blender/editors/interface/view2d_ops.c
index a5ed57a9ee8..de1b26e987b 100644
--- a/source/blender/editors/interface/view2d_ops.c
+++ b/source/blender/editors/interface/view2d_ops.c
@@ -34,7 +34,6 @@
#include "BLI_blenlib.h"
#include "BKE_context.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
#include "RNA_define.h"
@@ -42,7 +41,6 @@
#include "WM_api.h"
#include "WM_types.h"
-#include "BIF_gl.h"
#include "ED_screen.h"
diff --git a/source/blender/editors/mesh/Makefile b/source/blender/editors/mesh/Makefile
index 8ae40e1b957..be57f72329a 100644
--- a/source/blender/editors/mesh/Makefile
+++ b/source/blender/editors/mesh/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/mesh/editface.c b/source/blender/editors/mesh/editface.c
index 0ee1e97ee77..b11eeebfb2a 100644
--- a/source/blender/editors/mesh/editface.c
+++ b/source/blender/editors/mesh/editface.c
@@ -44,22 +44,13 @@
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
-#include "BKE_brush.h"
-#include "BKE_customdata.h"
-#include "BKE_depsgraph.h"
#include "BKE_DerivedMesh.h"
-#include "BKE_displist.h"
#include "BKE_global.h"
#include "BKE_mesh.h"
-#include "BKE_object.h"
-#include "BKE_texture.h"
-#include "BKE_utildefines.h"
-#include "BKE_customdata.h"
#include "BKE_context.h"
#include "BKE_tessmesh.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#ifndef DISABLE_PYTHON
diff --git a/source/blender/editors/mesh/loopcut.c b/source/blender/editors/mesh/loopcut.c
index b92e73ac77d..68ef56ad3ab 100644
--- a/source/blender/editors/mesh/loopcut.c
+++ b/source/blender/editors/mesh/loopcut.c
@@ -53,7 +53,6 @@
#include "BKE_context.h"
#include "BKE_depsgraph.h"
#include "BKE_scene.h"
-#include "BKE_utildefines.h"
#include "BKE_mesh.h"
#include "BKE_tessmesh.h"
#include "BKE_depsgraph.h"
@@ -64,7 +63,6 @@
#include "IMB_imbuf_types.h"
#include "ED_screen.h"
-#include "ED_util.h"
#include "ED_space_api.h"
#include "ED_view3d.h"
#include "ED_mesh.h"
diff --git a/source/blender/editors/mesh/mesh_data.c b/source/blender/editors/mesh/mesh_data.c
index 6f6af2d84a5..80dc5331cf8 100644
--- a/source/blender/editors/mesh/mesh_data.c
+++ b/source/blender/editors/mesh/mesh_data.c
@@ -39,10 +39,8 @@
#include "DNA_view3d_types.h"
#include "BKE_context.h"
-#include "BKE_customdata.h"
#include "BKE_depsgraph.h"
#include "BKE_displist.h"
-#include "BKE_global.h"
#include "BKE_image.h"
#include "BKE_library.h"
#include "BKE_material.h"
diff --git a/source/blender/editors/mesh/mesh_intern.h b/source/blender/editors/mesh/mesh_intern.h
index 13299405a57..271cd8a8524 100644
--- a/source/blender/editors/mesh/mesh_intern.h
+++ b/source/blender/editors/mesh/mesh_intern.h
@@ -68,7 +68,8 @@ int EDBM_CallOpf(struct BMEditMesh *em, struct wmOperator *op, char *fmt, ...);
/*calls a bmesh op, reporting errors to the user, etc.
selects an output slot specified by selslot*/
-int EDBM_CallAndSelectOpf(struct BMEditMesh *em, struct wmOperator *op, char *selslot, char *fmt, ...);
+//int EDBM_CallAndSelectOpf(struct BMEditMesh *em, struct wmOperator *op, char *selslot, char *fmt, ...);
+//moved to ED_mesh.h
/*same as above, but doesn't report errors.*/
int EDBM_CallOpfSilent(struct BMEditMesh *em, char *fmt, ...);
diff --git a/source/blender/editors/mesh/mesh_ops.c b/source/blender/editors/mesh/mesh_ops.c
index 0e034c8ca6d..648e4f04302 100644
--- a/source/blender/editors/mesh/mesh_ops.c
+++ b/source/blender/editors/mesh/mesh_ops.c
@@ -29,7 +29,6 @@
#include <stdlib.h>
#include <math.h>
-#include "MEM_guardedalloc.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
@@ -39,9 +38,6 @@
#include "BLI_editVert.h"
#include "BKE_context.h"
-#include "BKE_global.h"
-#include "BKE_mesh.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
@@ -297,7 +293,6 @@ void ED_keymap_mesh(wmKeyConfig *keyconf)
WM_keymap_add_item(keymap, "MESH_OT_delete", XKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "MESH_OT_delete", DELKEY, KM_PRESS, 0, 0);
- WM_keymap_add_item(keymap, "MESH_OT_delete", BACKSPACEKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "MESH_OT_knife_cut", LEFTMOUSE, KM_PRESS, 0, KKEY);
RNA_enum_set(WM_keymap_add_item(keymap, "MESH_OT_knife_cut", LEFTMOUSE, KM_PRESS, KM_SHIFT, KKEY)->ptr, "type", 2/*KNIFE_MIDPOINT*/);
@@ -313,6 +308,6 @@ void ED_keymap_mesh(wmKeyConfig *keyconf)
WM_keymap_add_menu(keymap, "VIEW3D_MT_uv_map", UKEY, KM_PRESS, 0, 0);
WM_keymap_add_menu(keymap, "VIEW3D_MT_vertex_group", GKEY, KM_PRESS, KM_CTRL, 0);
- ED_object_generic_keymap(keyconf, keymap, 2);
+ ED_object_generic_keymap(keyconf, keymap, 3);
}
diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c
index bcc00e0640a..35e1a0975e5 100644
--- a/source/blender/editors/mesh/meshtools.c
+++ b/source/blender/editors/mesh/meshtools.c
@@ -44,7 +44,6 @@
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
-#include "DNA_view3d_types.h"
#include "BLI_math.h"
#include "BLI_blenlib.h"
@@ -54,20 +53,15 @@
#include "BLI_threads.h"
-#include "BKE_blender.h"
#include "BKE_context.h"
#include "BKE_depsgraph.h"
+#include "BKE_deform.h"
#include "BKE_DerivedMesh.h"
-#include "BKE_customdata.h"
-#include "BKE_global.h"
-#include "BKE_image.h"
#include "BKE_key.h"
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_mesh.h"
#include "BKE_material.h"
-#include "BKE_object.h"
-#include "BKE_utildefines.h"
#include "BKE_report.h"
#include "BKE_tessmesh.h"
@@ -93,6 +87,7 @@ return 0 if no join is made (error) and 1 of the join is done */
int join_mesh_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
Object *ob= CTX_data_active_object(C);
Material **matar, *ma;
@@ -195,12 +190,7 @@ int join_mesh_exec(bContext *C, wmOperator *op)
/* Join this object's vertex groups to the base one's */
for(dg=base->object->defbase.first; dg; dg=dg->next) {
/* See if this group exists in the object (if it doesn't, add it to the end) */
- for(odg=ob->defbase.first; odg; odg=odg->next) {
- if(!strcmp(odg->name, dg->name)) {
- break;
- }
- }
- if(!odg) {
+ if(!defgroup_find_name(ob, dg->name)) {
odg = MEM_callocN(sizeof(bDeformGroup), "join deformGroup");
memcpy(odg, dg, sizeof(bDeformGroup));
BLI_addtail(&ob->defbase, odg);
@@ -492,7 +482,7 @@ int join_mesh_exec(bContext *C, wmOperator *op)
/* free base, now that data is merged */
if(base->object != ob)
- ED_base_object_free_and_unlink(scene, base);
+ ED_base_object_free_and_unlink(bmain, scene, base);
}
}
CTX_DATA_END;
@@ -558,17 +548,17 @@ int join_mesh_exec(bContext *C, wmOperator *op)
/* free it's ipo too - both are not actually freed from memory yet as ID-blocks */
if(nkey->ipo) {
free_ipo(nkey->ipo);
- BLI_remlink(&G.main->ipo, nkey->ipo);
+ BLI_remlink(&bmain->ipo, nkey->ipo);
MEM_freeN(nkey->ipo);
}
#endif
free_key(nkey);
- BLI_remlink(&G.main->key, nkey);
+ BLI_remlink(&bmain->key, nkey);
MEM_freeN(nkey);
}
- DAG_scene_sort(scene); // removed objects, need to rebuild dag before editmode call
+ DAG_scene_sort(bmain, scene); // removed objects, need to rebuild dag before editmode call
ED_object_enter_editmode(C, EM_WAITCURSOR);
ED_object_exit_editmode(C, EM_FREEDATA|EM_WAITCURSOR|EM_DO_UNDO);
diff --git a/source/blender/editors/metaball/Makefile b/source/blender/editors/metaball/Makefile
index d971ec9b412..c28ef59e9db 100644
--- a/source/blender/editors/metaball/Makefile
+++ b/source/blender/editors/metaball/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/metaball/mball_edit.c b/source/blender/editors/metaball/mball_edit.c
index 1d76717e9eb..d097caac63d 100644
--- a/source/blender/editors/metaball/mball_edit.c
+++ b/source/blender/editors/metaball/mball_edit.c
@@ -43,11 +43,8 @@
#include "RNA_define.h"
#include "RNA_access.h"
-#include "BKE_utildefines.h"
#include "BKE_depsgraph.h"
-#include "BKE_object.h"
#include "BKE_context.h"
-#include "BKE_library.h"
#include "ED_screen.h"
#include "ED_view3d.h"
@@ -204,7 +201,7 @@ static int select_all_exec(bContext *C, wmOperator *op)
void MBALL_OT_select_all(wmOperatorType *ot)
{
/* identifiers */
- ot->name= "Select/Deselect All";
+ ot->name= "Select or Deselect All";
ot->description= "Change selection of all meta elements";
ot->idname= "MBALL_OT_select_all";
@@ -550,7 +547,7 @@ int mouse_mball(bContext *C, short mval[2], int extend)
if(ml==startelem) break;
}
- /* When some metaelem was found, then it is neccessary to select or
+ /* When some metaelem was found, then it is necessary to select or
* deselet it. */
if(act) {
if(extend==0) {
diff --git a/source/blender/editors/metaball/mball_ops.c b/source/blender/editors/metaball/mball_ops.c
index e8d2237d8a2..14402d7dae6 100644
--- a/source/blender/editors/metaball/mball_ops.c
+++ b/source/blender/editors/metaball/mball_ops.c
@@ -64,7 +64,6 @@ void ED_keymap_metaball(wmKeyConfig *keyconf)
WM_keymap_add_item(keymap, "MBALL_OT_delete_metaelems", XKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "MBALL_OT_delete_metaelems", DELKEY, KM_PRESS, 0, 0);
- WM_keymap_add_item(keymap, "MBALL_OT_delete_metaelems", BACKSPACEKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "MBALL_OT_duplicate_metaelems", DKEY, KM_PRESS, KM_SHIFT, 0);
WM_keymap_add_item(keymap, "MBALL_OT_select_all", AKEY, KM_PRESS, 0, 0);
diff --git a/source/blender/editors/object/Makefile b/source/blender/editors/object/Makefile
index 7c081355ed5..4694653b115 100644
--- a/source/blender/editors/object/Makefile
+++ b/source/blender/editors/object/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index 5fa643200f4..e60f9db79f6 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -49,12 +49,10 @@
#include "BKE_constraint.h"
#include "BKE_context.h"
#include "BKE_curve.h"
-#include "BKE_customdata.h"
#include "BKE_depsgraph.h"
#include "BKE_DerivedMesh.h"
#include "BKE_displist.h"
#include "BKE_effect.h"
-#include "BKE_global.h"
#include "BKE_group.h"
#include "BKE_lattice.h"
#include "BKE_library.h"
@@ -67,9 +65,7 @@
#include "BKE_particle.h"
#include "BKE_report.h"
#include "BKE_sca.h"
-#include "BKE_scene.h"
#include "BKE_texture.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
#include "RNA_define.h"
@@ -183,7 +179,7 @@ void ED_object_add_generic_props(wmOperatorType *ot, int do_editmode)
RNA_def_float_vector(ot->srna, "location", 3, NULL, -FLT_MAX, FLT_MAX, "Location", "Location for the newly added object.", -FLT_MAX, FLT_MAX);
RNA_def_float_rotation(ot->srna, "rotation", 3, NULL, -FLT_MAX, FLT_MAX, "Rotation", "Rotation for the newly added object", -FLT_MAX, FLT_MAX);
- prop = RNA_def_boolean_layer_member(ot->srna, "layer", 20, NULL, "Layer", "");
+ prop = RNA_def_boolean_layer_member(ot->srna, "layers", 20, NULL, "Layer", "");
RNA_def_property_flag(prop, PROP_HIDDEN);
}
@@ -200,7 +196,7 @@ static void object_add_generic_invoke_options(bContext *C, wmOperator *op)
RNA_float_set_array(op->ptr, "location", loc);
}
- if(!RNA_property_is_set(op->ptr, "layer")) {
+ if(!RNA_property_is_set(op->ptr, "layers")) {
View3D *v3d = CTX_wm_view3d(C);
Scene *scene = CTX_data_scene(C);
int a, values[20], layer;
@@ -218,7 +214,7 @@ static void object_add_generic_invoke_options(bContext *C, wmOperator *op)
values[a]= (layer & (1<<a));
}
- RNA_boolean_set_array(op->ptr, "layer", values);
+ RNA_boolean_set_array(op->ptr, "layers", values);
}
}
@@ -239,9 +235,9 @@ int ED_object_add_generic_get_opts(bContext *C, wmOperator *op, float *loc, floa
*enter_editmode = TRUE;
}
- if(RNA_property_is_set(op->ptr, "layer")) {
- RNA_boolean_get_array(op->ptr, "layer", layer_values);
-
+ if(RNA_property_is_set(op->ptr, "layers")) {
+ RNA_boolean_get_array(op->ptr, "layers", layer_values);
+ *layer= 0;
for(a=0; a<20; a++) {
if(layer_values[a])
*layer |= (1 << a);
@@ -284,6 +280,7 @@ int ED_object_add_generic_get_opts(bContext *C, wmOperator *op, float *loc, floa
/* for object add primitive operators */
Object *ED_object_add_type(bContext *C, int type, float *loc, float *rot, int enter_editmode, unsigned int layer)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
Object *ob;
@@ -300,8 +297,8 @@ Object *ED_object_add_type(bContext *C, int type, float *loc, float *rot, int en
/* more editor stuff */
ED_object_base_init_transform(C, BASACT, loc, rot);
- DAG_scene_sort(scene);
- ED_render_id_flush_update(G.main, ob->data);
+ DAG_scene_sort(bmain, scene);
+ ED_render_id_flush_update(bmain, ob->data);
if(enter_editmode)
ED_object_enter_editmode(C, EM_IGNORE_LAYER);
@@ -750,13 +747,18 @@ static int group_instance_add_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
if(group) {
+ Main *bmain= CTX_data_main(C);
+ Scene *scene= CTX_data_scene(C);
Object *ob= ED_object_add_type(C, OB_EMPTY, loc, rot, FALSE, layer);
rename_id(&ob->id, group->id.name+2);
ob->dup_group= group;
ob->transflag |= OB_DUPLIGROUP;
id_lib_extern(&group->id);
- WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob);
+ /* works without this except if you try render right after, see: 22027 */
+ DAG_scene_sort(bmain, scene);
+
+ WM_event_add_notifier(C, NC_SCENE|ND_OB_ACTIVE, CTX_data_scene(C));
return OPERATOR_FINISHED;
}
@@ -794,16 +796,17 @@ void OBJECT_OT_group_instance_add(wmOperatorType *ot)
/* remove base from a specific scene */
/* note: now unlinks constraints as well */
-void ED_base_object_free_and_unlink(Scene *scene, Base *base)
+void ED_base_object_free_and_unlink(Main *bmain, Scene *scene, Base *base)
{
BLI_remlink(&scene->base, base);
- free_libblock_us(&G.main->object, base->object);
+ free_libblock_us(&bmain->object, base->object);
if(scene->basact==base) scene->basact= NULL;
MEM_freeN(base);
}
static int object_delete_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
int islamp= 0;
@@ -814,14 +817,14 @@ static int object_delete_exec(bContext *C, wmOperator *op)
if(base->object->type==OB_LAMP) islamp= 1;
/* remove from current scene only */
- ED_base_object_free_and_unlink(scene, base);
+ ED_base_object_free_and_unlink(bmain, scene, base);
}
CTX_DATA_END;
if(islamp) reshadeall_displist(scene); /* only frees displist */
- DAG_scene_sort(scene);
- DAG_ids_flush_update(0);
+ DAG_scene_sort(bmain, scene);
+ DAG_ids_flush_update(bmain, 0);
WM_event_add_notifier(C, NC_SCENE|ND_OB_ACTIVE, CTX_data_scene(C));
@@ -856,6 +859,7 @@ static void copy_object__forwardModifierLinks(void *userData, Object *ob,
/* after copying objects, copied data should get new pointers */
static void copy_object_set_idnew(bContext *C, int dupflag)
{
+ Main *bmain= CTX_data_main(C);
Material *ma, *mao;
ID *id;
int a;
@@ -878,7 +882,7 @@ static void copy_object_set_idnew(bContext *C, int dupflag)
/* materials */
if( dupflag & USER_DUP_MAT) {
- mao= G.main->mat.first;
+ mao= bmain->mat.first;
while(mao) {
if(mao->id.newid) {
@@ -912,7 +916,7 @@ static void copy_object_set_idnew(bContext *C, int dupflag)
#if 0 // XXX old animation system
/* lamps */
if( dupflag & USER_DUP_IPO) {
- Lamp *la= G.main->lamp.first;
+ Lamp *la= bmain->lamp.first;
while(la) {
if(la->id.newid) {
Lamp *lan= (Lamp *)la->id.newid;
@@ -928,7 +932,7 @@ static void copy_object_set_idnew(bContext *C, int dupflag)
}
/* ipos */
- ipo= G.main->ipo.first;
+ ipo= bmain->ipo.first;
while(ipo) {
if(ipo->id.lib==NULL && ipo->id.newid) {
Ipo *ipon= (Ipo *)ipo->id.newid;
@@ -973,7 +977,8 @@ static void make_object_duplilist_real(bContext *C, Scene *scene, Base *base)
if(ob->mat==NULL) ob->totcol= 0;
basen= MEM_dupallocN(base);
- basen->flag &= ~OB_FROMDUPLI;
+ basen->flag &= ~(OB_FROMDUPLI|OB_FROMGROUP);
+ ob->flag= basen->flag;
basen->lay= base->lay;
BLI_addhead(&scene->base, basen); /* addhead: othwise eternal loop */
basen->object= ob;
@@ -996,6 +1001,7 @@ static void make_object_duplilist_real(bContext *C, Scene *scene, Base *base)
static int object_duplicates_make_real_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
clear_id_newpoins();
@@ -1005,8 +1011,8 @@ static int object_duplicates_make_real_exec(bContext *C, wmOperator *op)
}
CTX_DATA_END;
- DAG_scene_sort(scene);
- DAG_ids_flush_update(0);
+ DAG_scene_sort(bmain, scene);
+ DAG_ids_flush_update(bmain, 0);
WM_event_add_notifier(C, NC_SCENE, scene);
WM_main_add_notifier(NC_OBJECT|ND_DRAW, NULL);
@@ -1085,6 +1091,7 @@ static Base *duplibase_for_convert(Scene *scene, Base *base, Object *ob)
static int convert_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
Base *basen=NULL, *basact=NULL, *basedel=NULL;
Object *ob, *ob1, *newob, *obact= CTX_data_active_object(C);
@@ -1210,7 +1217,7 @@ static int convert_exec(bContext *C, wmOperator *op)
if (!keep_original) {
/* other users */
if(cu->id.us>1) {
- for(ob1= G.main->object.first; ob1; ob1=ob1->id.next) {
+ for(ob1= bmain->object.first; ob1; ob1=ob1->id.next) {
if(ob1->data==ob->data) {
ob1->type= OB_CURVE;
ob1->recalc |= OB_RECALC_ALL;
@@ -1317,7 +1324,7 @@ static int convert_exec(bContext *C, wmOperator *op)
/* delete original if needed */
if(basedel) {
if(!keep_original)
- ED_base_object_free_and_unlink(scene, basedel);
+ ED_base_object_free_and_unlink(bmain, scene, basedel);
basedel = NULL;
}
@@ -1333,13 +1340,13 @@ static int convert_exec(bContext *C, wmOperator *op)
base= base->next;
if (ob->type == OB_MBALL) {
- ED_base_object_free_and_unlink(scene, tmpbase);
+ ED_base_object_free_and_unlink(bmain, scene, tmpbase);
}
}
}
/* delete object should renew depsgraph */
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
}
// XXX ED_object_enter_editmode(C, 0);
@@ -1353,7 +1360,7 @@ static int convert_exec(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER|ND_DATA, BASACT->object);
}
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
WM_event_add_notifier(C, NC_SCENE|NC_OBJECT|ND_DRAW, scene); /* is NC_SCENE needed ? */
return OPERATOR_FINISHED;
@@ -1390,7 +1397,7 @@ void OBJECT_OT_convert(wmOperatorType *ot)
/* used below, assumes id.new is correct */
/* leaves selection of base/object unaltered */
-static Base *object_add_duplicate_internal(Scene *scene, Base *base, int dupflag)
+static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base, int dupflag)
{
Base *basen= NULL;
Material ***matarar;
@@ -1413,7 +1420,7 @@ static Base *object_add_duplicate_internal(Scene *scene, Base *base, int dupflag
if(basen->flag & OB_FROMGROUP) {
Group *group;
- for(group= G.main->group.first; group; group= group->id.next) {
+ for(group= bmain->group.first; group; group= group->id.next) {
if(object_in_group(ob, group))
add_to_group(group, obn, scene, basen);
}
@@ -1592,7 +1599,7 @@ static Base *object_add_duplicate_internal(Scene *scene, Base *base, int dupflag
/* single object duplicate, if dupflag==0, fully linked, else it uses the flags given */
/* leaves selection of base/object unaltered */
-Base *ED_object_add_duplicate(Scene *scene, Base *base, int dupflag)
+Base *ED_object_add_duplicate(Main *bmain, Scene *scene, Base *base, int dupflag)
{
Base *basen;
Object *ob;
@@ -1600,15 +1607,15 @@ Base *ED_object_add_duplicate(Scene *scene, Base *base, int dupflag)
clear_id_newpoins();
clear_sca_new_poins(); /* sensor/contr/act */
- basen= object_add_duplicate_internal(scene, base, dupflag);
+ basen= object_add_duplicate_internal(bmain, scene, base, dupflag);
if (basen == NULL) {
return NULL;
}
ob= basen->object;
- DAG_scene_sort(scene);
- ED_render_id_flush_update(G.main, ob->data);
+ DAG_scene_sort(bmain, scene);
+ ED_render_id_flush_update(bmain, ob->data);
return basen;
}
@@ -1616,6 +1623,7 @@ Base *ED_object_add_duplicate(Scene *scene, Base *base, int dupflag)
/* contextual operator dupli */
static int duplicate_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
int linked= RNA_boolean_get(op->ptr, "linked");
int dupflag= (linked)? 0: U.dupflag;
@@ -1624,7 +1632,7 @@ static int duplicate_exec(bContext *C, wmOperator *op)
clear_sca_new_poins(); /* sensor/contr/act */
CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) {
- Base *basen= object_add_duplicate_internal(scene, base, dupflag);
+ Base *basen= object_add_duplicate_internal(bmain, scene, base, dupflag);
/* note that this is safe to do with this context iterator,
the list is made in advance */
@@ -1638,14 +1646,14 @@ static int duplicate_exec(bContext *C, wmOperator *op)
if(BASACT==base)
ED_base_object_activate(C, basen);
- ED_render_id_flush_update(G.main, basen->object->data);
+ ED_render_id_flush_update(bmain, basen->object->data);
}
CTX_DATA_END;
copy_object_set_idnew(C, dupflag);
- DAG_scene_sort(scene);
- DAG_ids_flush_update(0);
+ DAG_scene_sort(bmain, scene);
+ DAG_ids_flush_update(bmain, 0);
WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene);
@@ -1693,6 +1701,7 @@ static int add_named_poll(bContext *C)
static int add_named_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
Base *basen, *base;
Object *ob;
@@ -1714,7 +1723,7 @@ static int add_named_exec(bContext *C, wmOperator *op)
clear_id_newpoins();
clear_sca_new_poins(); /* sensor/contr/act */
- basen= object_add_duplicate_internal(scene, base, dupflag);
+ basen= object_add_duplicate_internal(bmain, scene, base, dupflag);
if (basen == NULL) {
MEM_freeN(base);
@@ -1728,8 +1737,8 @@ static int add_named_exec(bContext *C, wmOperator *op)
copy_object_set_idnew(C, dupflag);
- DAG_scene_sort(scene);
- DAG_ids_flush_update(0);
+ DAG_scene_sort(bmain, scene);
+ DAG_ids_flush_update(bmain, 0);
MEM_freeN(base);
diff --git a/source/blender/editors/object/object_bake.c b/source/blender/editors/object/object_bake.c
index 9f9d41147b6..a03d1a29333 100644
--- a/source/blender/editors/object/object_bake.c
+++ b/source/blender/editors/object/object_bake.c
@@ -48,8 +48,6 @@
#include "BKE_global.h"
#include "BKE_image.h"
#include "BKE_main.h"
-#include "BKE_object.h"
-#include "BKE_utildefines.h"
#include "BKE_report.h"
#include "RE_pipeline.h"
@@ -94,6 +92,7 @@ static ScrArea *biggest_image_area(bScreen *screen)
typedef struct BakeRender {
Render *re;
+ Main *main;
Scene *scene;
struct Object *actob;
int tot, ready;
@@ -139,6 +138,7 @@ static void init_bake_internal(BakeRender *bkr, bContext *C)
Scene *scene= CTX_data_scene(C);
bkr->sa= biggest_image_area(CTX_wm_screen(C)); /* can be NULL */
+ bkr->main= CTX_data_main(C);
bkr->scene= scene;
bkr->actob= (scene->r.bake_flag & R_BAKE_TO_ACTIVE) ? OBACT : NULL;
bkr->re= RE_NewRender("_Bake View_");
@@ -196,6 +196,7 @@ static void bake_startjob(void *bkv, short *stop, short *do_update, float *progr
{
BakeRender *bkr= bkv;
Scene *scene= bkr->scene;
+ Main *bmain= bkr->main;
bkr->stop= stop;
bkr->do_update= do_update;
@@ -204,7 +205,7 @@ static void bake_startjob(void *bkv, short *stop, short *do_update, float *progr
RE_test_break_cb(bkr->re, NULL, thread_break);
G.afbreek= 0; /* blender_test_break uses this global */
- RE_Database_Baking(bkr->re, scene, scene->lay, scene->r.bake_mode, bkr->actob);
+ RE_Database_Baking(bkr->re, bmain, scene, scene->lay, scene->r.bake_mode, bkr->actob);
/* baking itself is threaded, cannot use test_break in threads. we also update optional imagewindow */
bkr->tot= RE_bake_shade_all_selected(bkr->re, scene->r.bake_mode, bkr->actob, bkr->do_update, bkr->progress);
@@ -224,11 +225,11 @@ static void bake_update(void *bkv)
static void bake_freejob(void *bkv)
{
BakeRender *bkr= bkv;
- BLI_end_threads(&bkr->threads);
finish_bake_internal(bkr);
if(bkr->tot==0) BKE_report(bkr->reports, RPT_ERROR, "No Images found to bake to");
MEM_freeN(bkr);
+ G.rendering = 0;
}
/* catch esc */
@@ -268,6 +269,7 @@ static int objects_bake_render_invoke(bContext *C, wmOperator *op, wmEvent *_eve
WM_jobs_callbacks(steve, bake_startjob, NULL, bake_update, NULL);
G.afbreek= 0;
+ G.rendering = 1;
WM_jobs_start(CTX_wm_manager(C), steve);
@@ -284,6 +286,7 @@ static int objects_bake_render_invoke(bContext *C, wmOperator *op, wmEvent *_eve
static int bake_image_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
@@ -302,7 +305,7 @@ static int bake_image_exec(bContext *C, wmOperator *op)
RE_test_break_cb(bkr.re, NULL, thread_break);
G.afbreek= 0; /* blender_test_break uses this global */
- RE_Database_Baking(bkr.re, scene, scene->lay, scene->r.bake_mode, (scene->r.bake_flag & R_BAKE_TO_ACTIVE)? OBACT: NULL);
+ RE_Database_Baking(bkr.re, bmain, scene, scene->lay, scene->r.bake_mode, (scene->r.bake_flag & R_BAKE_TO_ACTIVE)? OBACT: NULL);
/* baking itself is threaded, cannot use test_break in threads */
BLI_init_threads(&threads, do_bake_render, 1);
diff --git a/source/blender/editors/object/object_constraint.c b/source/blender/editors/object/object_constraint.c
index 8d48b76fb51..e3944883482 100644
--- a/source/blender/editors/object/object_constraint.c
+++ b/source/blender/editors/object/object_constraint.c
@@ -40,6 +40,7 @@
#include "DNA_curve_types.h"
#include "DNA_scene_types.h"
#include "DNA_text_types.h"
+#include "DNA_object_types.h"
#include "BKE_action.h"
#include "BKE_armature.h"
@@ -50,7 +51,6 @@
#include "BKE_main.h"
#include "BKE_object.h"
#include "BKE_report.h"
-#include "BKE_utildefines.h"
#include "BIK_api.h"
#ifndef DISABLE_PYTHON
@@ -779,12 +779,12 @@ void ED_object_constraint_update(Object *ob)
else DAG_id_flush_update(&ob->id, OB_RECALC_OB);
}
-void ED_object_constraint_dependency_update(Scene *scene, Object *ob)
+void ED_object_constraint_dependency_update(Main *bmain, Scene *scene, Object *ob)
{
ED_object_constraint_update(ob);
if(ob->pose) ob->pose->flag |= POSE_RECALC; // checks & sorts pose channels
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
}
static int constraint_poll(bContext *C)
@@ -931,8 +931,9 @@ void CONSTRAINT_OT_move_up (wmOperatorType *ot)
static int pose_constraints_clear_exec(bContext *C, wmOperator *op)
{
- Object *ob= CTX_data_active_object(C);
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
+ Object *ob= CTX_data_active_object(C);
/* free constraints for all selected bones */
CTX_DATA_BEGIN(C, bPoseChannel*, pchan, selected_pose_bones)
@@ -943,7 +944,7 @@ static int pose_constraints_clear_exec(bContext *C, wmOperator *op)
CTX_DATA_END;
/* force depsgraph to get recalculated since relationships removed */
- DAG_scene_sort(scene); /* sort order of objects */
+ DAG_scene_sort(bmain, scene); /* sort order of objects */
/* do updates */
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
@@ -967,6 +968,7 @@ void POSE_OT_constraints_clear(wmOperatorType *ot)
static int object_constraints_clear_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
/* do freeing */
@@ -978,7 +980,7 @@ static int object_constraints_clear_exec(bContext *C, wmOperator *op)
CTX_DATA_END;
/* force depsgraph to get recalculated since relationships removed */
- DAG_scene_sort(scene); /* sort order of objects */
+ DAG_scene_sort(bmain, scene); /* sort order of objects */
/* do updates */
WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, NULL);
@@ -1002,8 +1004,9 @@ void OBJECT_OT_constraints_clear(wmOperatorType *ot)
static int pose_constraint_copy_exec(bContext *C, wmOperator *op)
{
- bPoseChannel *pchan = CTX_data_active_pose_bone(C);
+ Main *bmain= CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
+ bPoseChannel *pchan = CTX_data_active_pose_bone(C);
/* don't do anything if bone doesn't exist or doesn't have any constraints */
if (ELEM(NULL, pchan, pchan->constraints.first)) {
@@ -1021,7 +1024,7 @@ static int pose_constraint_copy_exec(bContext *C, wmOperator *op)
CTX_DATA_END;
/* force depsgraph to get recalculated since new relationships added */
- DAG_scene_sort(scene); /* sort order of objects/bones */
+ DAG_scene_sort(bmain, scene); /* sort order of objects/bones */
return OPERATOR_FINISHED;
}
@@ -1043,8 +1046,9 @@ void POSE_OT_constraints_copy(wmOperatorType *ot)
static int object_constraint_copy_exec(bContext *C, wmOperator *op)
{
- Object *obact = ED_object_active_context(C);
+ Main *bmain= CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
+ Object *obact = ED_object_active_context(C);
/* copy all constraints from active object to all selected objects */
CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects)
@@ -1056,7 +1060,7 @@ static int object_constraint_copy_exec(bContext *C, wmOperator *op)
CTX_DATA_END;
/* force depsgraph to get recalculated since new relationships added */
- DAG_scene_sort(scene); /* sort order of objects */
+ DAG_scene_sort(bmain, scene); /* sort order of objects */
return OPERATOR_FINISHED;
}
@@ -1219,6 +1223,7 @@ static short get_new_constraint_target(bContext *C, int con_type, Object **tar_o
/* used by add constraint operators to add the constraint required */
static int constraint_add_exec(bContext *C, wmOperator *op, Object *ob, ListBase *list, int type, short setTarget)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
bPoseChannel *pchan;
bConstraint *con;
@@ -1316,7 +1321,7 @@ static int constraint_add_exec(bContext *C, wmOperator *op, Object *ob, ListBase
/* force depsgraph to get recalculated since new relationships added */
- DAG_scene_sort(scene); /* sort order of objects */
+ DAG_scene_sort(bmain, scene); /* sort order of objects */
if ((ob->type==OB_ARMATURE) && (pchan)) {
ob->pose->flag |= POSE_RECALC; /* sort pose channels */
diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c
index fcd3a73c84d..8a0fc56fa87 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -34,7 +34,11 @@
#include "MEM_guardedalloc.h"
-#include "IMB_imbuf_types.h"
+#include "BLI_blenlib.h"
+#include "BLI_math.h"
+#include "BLI_editVert.h"
+#include "BLI_ghash.h"
+#include "BLI_rand.h"
#include "DNA_armature_types.h"
#include "DNA_curve_types.h"
@@ -43,51 +47,31 @@
#include "DNA_material_types.h"
#include "DNA_meta_types.h"
#include "DNA_property_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
+#include "DNA_meshdata_types.h"
#include "DNA_vfont_types.h"
-#include "BLI_blenlib.h"
-#include "BLI_math.h"
-#include "BLI_editVert.h"
-#include "BLI_ghash.h"
-#include "BLI_rand.h"
+#include "IMB_imbuf_types.h"
-#include "BKE_action.h"
#include "BKE_anim.h"
-#include "BKE_armature.h"
#include "BKE_constraint.h"
#include "BKE_context.h"
-#include "BKE_customdata.h"
-#include "BKE_blender.h"
-#include "BKE_cloth.h"
#include "BKE_curve.h"
-#include "BKE_displist.h"
#include "BKE_depsgraph.h"
-#include "BKE_DerivedMesh.h"
-#include "BKE_effect.h"
#include "BKE_font.h"
-#include "BKE_global.h"
-#include "BKE_group.h"
#include "BKE_image.h"
-#include "BKE_key.h"
-#include "BKE_lattice.h"
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_material.h"
#include "BKE_mball.h"
#include "BKE_mesh.h"
-#include "BKE_nla.h"
#include "BKE_object.h"
#include "BKE_paint.h"
-#include "BKE_particle.h"
#include "BKE_pointcache.h"
#include "BKE_property.h"
-#include "BKE_report.h"
#include "BKE_sca.h"
-#include "BKE_scene.h"
#include "BKE_softbody.h"
-#include "BKE_subsurf.h"
-#include "BKE_texture.h"
-#include "BKE_utildefines.h"
#include "BKE_modifier.h"
#include "BKE_tessmesh.h"
@@ -95,6 +79,7 @@
#include "ED_curve.h"
#include "ED_mesh.h"
#include "ED_mball.h"
+#include "ED_lattice.h"
#include "ED_object.h"
#include "ED_screen.h"
#include "ED_util.h"
@@ -136,8 +121,9 @@ Object *ED_object_active_context(bContext *C)
/* ********* clear/set restrict view *********/
-static int object_restrictview_clear_exec(bContext *C, wmOperator *op)
+static int object_hide_view_clear_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
ScrArea *sa= CTX_wm_area(C);
View3D *v3d= sa->spacedata.first;
Scene *scene= CTX_data_scene(C);
@@ -154,31 +140,32 @@ static int object_restrictview_clear_exec(bContext *C, wmOperator *op)
}
}
if (changed) {
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene);
}
return OPERATOR_FINISHED;
}
-void OBJECT_OT_restrictview_clear(wmOperatorType *ot)
+void OBJECT_OT_hide_view_clear(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Clear Restrict View";
- ot->description = "Reveal the object by setting the restrictview flag";
- ot->idname= "OBJECT_OT_restrictview_clear";
+ ot->description = "Reveal the object by setting the hide flag";
+ ot->idname= "OBJECT_OT_hide_view_clear";
/* api callbacks */
- ot->exec= object_restrictview_clear_exec;
+ ot->exec= object_hide_view_clear_exec;
ot->poll= ED_operator_view3d_active;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
-static int object_restrictview_set_exec(bContext *C, wmOperator *op)
+static int object_hide_view_set_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
short changed = 0;
int unselected= RNA_boolean_get(op->ptr, "unselected");
@@ -205,7 +192,7 @@ static int object_restrictview_set_exec(bContext *C, wmOperator *op)
CTX_DATA_END;
if (changed) {
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, CTX_data_scene(C));
@@ -214,15 +201,15 @@ static int object_restrictview_set_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void OBJECT_OT_restrictview_set(wmOperatorType *ot)
+void OBJECT_OT_hide_view_set(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Set Restrict View";
- ot->description = "Hide the object by setting the restrictview flag";
- ot->idname= "OBJECT_OT_restrictview_set";
+ ot->description = "Hide the object by setting the hide flag";
+ ot->idname= "OBJECT_OT_hide_view_set";
/* api callbacks */
- ot->exec= object_restrictview_set_exec;
+ ot->exec= object_hide_view_set_exec;
ot->poll= ED_operator_view3d_active;
/* flags */
@@ -233,7 +220,7 @@ void OBJECT_OT_restrictview_set(wmOperatorType *ot)
}
/* 99% same as above except no need for scene refreshing (TODO, update render preview) */
-static int object_restrictrender_clear_exec(bContext *C, wmOperator *op)
+static int object_hide_render_clear_exec(bContext *C, wmOperator *op)
{
short changed= 0;
@@ -252,23 +239,23 @@ static int object_restrictrender_clear_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void OBJECT_OT_restrictrender_clear(wmOperatorType *ot)
+void OBJECT_OT_hide_render_clear(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Clear Restrict Render";
- ot->description = "Reveal the render object by setting the restrictrender flag";
- ot->idname= "OBJECT_OT_restrictrender_clear";
+ ot->description = "Reveal the render object by setting the hide render flag";
+ ot->idname= "OBJECT_OT_hide_render_clear";
/* api callbacks */
- ot->exec= object_restrictrender_clear_exec;
+ ot->exec= object_hide_render_clear_exec;
ot->poll= ED_operator_view3d_active;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
-static int object_restrictrender_set_exec(bContext *C, wmOperator *op)
+static int object_hide_render_set_exec(bContext *C, wmOperator *op)
{
int unselected= RNA_boolean_get(op->ptr, "unselected");
@@ -289,15 +276,15 @@ static int object_restrictrender_set_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void OBJECT_OT_restrictrender_set(wmOperatorType *ot)
+void OBJECT_OT_hide_render_set(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Set Restrict Render";
- ot->description = "Hide the render object by setting the restrictrender flag";
- ot->idname= "OBJECT_OT_restrictrender_set";
+ ot->description = "Hide the render object by setting the hide render flag";
+ ot->idname= "OBJECT_OT_hide_render_set";
/* api callbacks */
- ot->exec= object_restrictrender_set_exec;
+ ot->exec= object_hide_render_set_exec;
ot->poll= ED_operator_view3d_active;
/* flags */
@@ -437,7 +424,12 @@ void ED_object_enter_editmode(bContext *C, int flag)
if(flag & EM_WAITCURSOR) waitcursor(1);
ob->restore_mode = ob->mode;
- ED_object_toggle_modes(C, ob->mode);
+
+ /* note, when switching scenes the object can have editmode data but
+ * not be scene->obedit: bug 22954, this avoids calling self eternally */
+ if((ob->restore_mode & OB_MODE_EDIT)==0)
+ ED_object_toggle_modes(C, ob->mode);
+
ob->mode= OB_MODE_EDIT;
if(ob->type==OB_MESH) {
@@ -949,157 +941,20 @@ void special_editmenu(Scene *scene, View3D *v3d)
static float weight= 1.0f;
{ // XXX
// XXX if(fbutton(&weight, 0.0f, 1.0f, 10, 10, "Set Weight")) {
- int a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
- BPoint *bp= lt->editlatt->def;
+ Lattice *editlt= lt->editlatt->latt;
+ int a= editlt->pntsu*editlt->pntsv*editlt->pntsw;
+ BPoint *bp= editlt->def;
while(a--) {
if(bp->f1 & SELECT)
bp->weight= weight;
bp++;
- }
- }
- }
-
-}
-
-/* Change subdivision or particle properties of mesh object ob, if level==-1
- * then toggle subsurf, else set to level set allows to toggle multiple
- * selections */
-
-static void object_has_subdivision_particles(Object *ob, int *havesubdiv, int *havepart, int depth)
-{
- if(ob->type==OB_MESH) {
- if(modifiers_findByType(ob, eModifierType_Subsurf))
- *havesubdiv= 1;
- if(modifiers_findByType(ob, eModifierType_ParticleSystem))
- *havepart= 1;
- }
-
- if(ob->dup_group && depth <= 4) {
- GroupObject *go;
-
- for(go= ob->dup_group->gobject.first; go; go= go->next)
- object_has_subdivision_particles(go->ob, havesubdiv, havepart, depth+1);
- }
-}
-
-static void object_flip_subdivison_particles(Scene *scene, Object *ob, int *set, int level, int mode, int particles, int depth)
-{
- ModifierData *md;
-
- if(ob->type==OB_MESH) {
- if(particles) {
- for(md=ob->modifiers.first; md; md=md->next) {
- if(md->type == eModifierType_ParticleSystem) {
- ParticleSystemModifierData *psmd = (ParticleSystemModifierData*)md;
-
- if(*set == -1)
- *set= psmd->modifier.mode&(mode);
-
- if (*set)
- psmd->modifier.mode &= ~(mode);
- else
- psmd->modifier.mode |= (mode);
- }
- }
- }
- else {
- md = modifiers_findByType(ob, eModifierType_Subsurf);
-
- if (md) {
- SubsurfModifierData *smd = (SubsurfModifierData*) md;
-
- if (level == -1) {
- if(*set == -1)
- *set= smd->modifier.mode&(mode);
-
- if (*set)
- smd->modifier.mode &= ~(mode);
- else
- smd->modifier.mode |= (mode);
- } else {
- smd->levels = level;
- }
- }
- else if(depth == 0 && *set != 0) {
- SubsurfModifierData *smd = (SubsurfModifierData*) modifier_new(eModifierType_Subsurf);
-
- BLI_addtail(&ob->modifiers, smd);
- modifier_unique_name(&ob->modifiers, (ModifierData*)smd);
-
- if (level!=-1) {
- smd->levels = level;
- }
-
- if(*set == -1)
- *set= 1;
}
}
-
- DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
}
- if(ob->dup_group && depth<=4) {
- GroupObject *go;
-
- for(go= ob->dup_group->gobject.first; go; go= go->next)
- object_flip_subdivison_particles(scene, go->ob, set, level, mode, particles, depth+1);
- }
}
-/* Change subdivision properties of mesh object ob, if
-* level==-1 then toggle subsurf, else set to level.
-*/
-
-void flip_subdivison(Scene *scene, View3D *v3d, int level)
-{
- Base *base;
- int set= -1;
- int mode, pupmode, particles= 0, havesubdiv= 0, havepart= 0;
- int alt= 0; // XXX
-
- if(alt)
- mode= eModifierMode_Realtime;
- else
- mode= eModifierMode_Render|eModifierMode_Realtime;
-
- if(level == -1) {
- if (scene->obedit) { // XXX get from context
- object_has_subdivision_particles(scene->obedit, &havesubdiv, &havepart, 0);
- } else {
- for(base= scene->base.first; base; base= base->next) {
- if(((level==-1) && (TESTBASE(v3d, base))) || (TESTBASELIB(v3d, base))) {
- object_has_subdivision_particles(base->object, &havesubdiv, &havepart, 0);
- }
- }
- }
- }
- else
- havesubdiv= 1;
-
- if(havesubdiv && havepart) {
- pupmode= pupmenu("Switch%t|Subsurf %x1|Particle Systems %x2");
- if(pupmode <= 0)
- return;
- else if(pupmode == 2)
- particles= 1;
- }
- else if(havepart)
- particles= 1;
-
- if (scene->obedit) { // XXX get from context
- object_flip_subdivison_particles(scene, scene->obedit, &set, level, mode, particles, 0);
- } else {
- for(base= scene->base.first; base; base= base->next) {
- if(((level==-1) && (TESTBASE(v3d, base))) || (TESTBASELIB(v3d, base))) {
- object_flip_subdivison_particles(scene, base->object, &set, level, mode, particles, 0);
- }
- }
- }
-
- DAG_ids_flush_update(0);
-}
-
static void copymenu_properties(Scene *scene, View3D *v3d, Object *ob)
{
//XXX no longer used - to be removed - replaced by game_properties_copy_exec
@@ -1194,7 +1049,7 @@ static void copymenu_logicbricks(Scene *scene, View3D *v3d, Object *ob)
}
}
-static void copymenu_modifiers(Scene *scene, View3D *v3d, Object *ob)
+static void copymenu_modifiers(Main *bmain, Scene *scene, View3D *v3d, Object *ob)
{
Base *base;
int i, event;
@@ -1293,7 +1148,7 @@ static void copymenu_modifiers(Scene *scene, View3D *v3d, Object *ob)
// if(errorstr) notice(errorstr);
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
}
@@ -1341,7 +1196,7 @@ static void copy_texture_space(Object *to, Object *ob)
}
-void copy_attr(Scene *scene, View3D *v3d, short event)
+void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
{
Object *ob;
Base *base;
@@ -1366,7 +1221,7 @@ void copy_attr(Scene *scene, View3D *v3d, short event)
return;
}
else if(event==24) {
- copymenu_modifiers(scene, v3d, ob);
+ copymenu_modifiers(bmain, scene, v3d, ob);
return;
}
@@ -1584,12 +1439,12 @@ void copy_attr(Scene *scene, View3D *v3d, short event)
}
if(do_scene_sort)
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
- DAG_ids_flush_update(0);
+ DAG_ids_flush_update(bmain, 0);
}
-void copy_attr_menu(Scene *scene, View3D *v3d)
+void copy_attr_menu(Main *bmain, Scene *scene, View3D *v3d)
{
Object *ob;
short event;
@@ -1640,7 +1495,7 @@ void copy_attr_menu(Scene *scene, View3D *v3d)
event= pupmenu(str);
if(event<= 0) return;
- copy_attr(scene, v3d, event);
+ copy_attr(bmain, scene, v3d, event);
}
/* ********************************************** */
diff --git a/source/blender/editors/object/object_group.c b/source/blender/editors/object/object_group.c
index ba609bd9bb3..f000485466f 100644
--- a/source/blender/editors/object/object_group.c
+++ b/source/blender/editors/object/object_group.c
@@ -29,7 +29,6 @@
#include <string.h>
-#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
@@ -39,11 +38,9 @@
#include "BKE_context.h"
#include "BKE_depsgraph.h"
-#include "BKE_global.h"
#include "BKE_group.h"
#include "BKE_main.h"
#include "BKE_report.h"
-#include "BKE_scene.h"
#include "ED_screen.h"
@@ -60,6 +57,7 @@
static int objects_add_active_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
Object *ob= OBACT;
Group *group;
@@ -70,7 +68,7 @@ static int objects_add_active_exec(bContext *C, wmOperator *op)
/* linking to same group requires its own loop so we can avoid
looking up the active objects groups each time */
- for(group= G.main->group.first; group; group=group->id.next) {
+ for(group= bmain->group.first; group; group=group->id.next) {
if(object_in_group(ob, group)) {
/* Assign groups to selected objects */
CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) {
@@ -83,7 +81,7 @@ static int objects_add_active_exec(bContext *C, wmOperator *op)
if(!ok) BKE_report(op->reports, RPT_ERROR, "Active Object contains no groups");
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
WM_event_add_notifier(C, NC_GROUP|NA_EDITED, NULL);
return OPERATOR_FINISHED;
@@ -106,6 +104,7 @@ void GROUP_OT_objects_add_active(wmOperatorType *ot)
static int objects_remove_active_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
Object *ob= OBACT;
Group *group;
@@ -116,7 +115,7 @@ static int objects_remove_active_exec(bContext *C, wmOperator *op)
/* linking to same group requires its own loop so we can avoid
looking up the active objects groups each time */
- for(group= G.main->group.first; group; group=group->id.next) {
+ for(group= bmain->group.first; group; group=group->id.next) {
if(object_in_group(ob, group)) {
/* Assign groups to selected objects */
CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) {
@@ -129,7 +128,7 @@ static int objects_remove_active_exec(bContext *C, wmOperator *op)
if(!ok) BKE_report(op->reports, RPT_ERROR, "Active Object contains no groups");
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
WM_event_add_notifier(C, NC_GROUP|NA_EDITED, NULL);
return OPERATOR_FINISHED;
@@ -152,6 +151,7 @@ void GROUP_OT_objects_remove_active(wmOperatorType *ot)
static int group_objects_remove_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
Group *group= NULL;
@@ -162,7 +162,7 @@ static int group_objects_remove_exec(bContext *C, wmOperator *op)
}
CTX_DATA_END;
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
WM_event_add_notifier(C, NC_GROUP|NA_EDITED, NULL);
return OPERATOR_FINISHED;
@@ -185,6 +185,7 @@ void GROUP_OT_objects_remove(wmOperatorType *ot)
static int group_create_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
Group *group= NULL;
char name[32]; /* id name */
@@ -198,7 +199,7 @@ static int group_create_exec(bContext *C, wmOperator *op)
}
CTX_DATA_END;
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
WM_event_add_notifier(C, NC_GROUP|NA_EDITED, NULL);
return OPERATOR_FINISHED;
diff --git a/source/blender/editors/object/object_hook.c b/source/blender/editors/object/object_hook.c
index 8b171bae34d..3db44660269 100644
--- a/source/blender/editors/object/object_hook.c
+++ b/source/blender/editors/object/object_hook.c
@@ -43,14 +43,13 @@
#include "BKE_action.h"
#include "BKE_context.h"
-#include "BKE_customdata.h"
#include "BKE_depsgraph.h"
+#include "BKE_main.h"
#include "BKE_mesh.h"
#include "BKE_modifier.h"
#include "BKE_object.h"
#include "BKE_report.h"
#include "BKE_scene.h"
-#include "BKE_utildefines.h"
#include "BKE_tessmesh.h"
#include "RNA_define.h"
@@ -197,13 +196,14 @@ static int return_editlattice_indexar(Lattice *editlatt, int *tot, int **indexar
static void select_editlattice_hook(Object *obedit, HookModifierData *hmd)
{
- Lattice *lt= obedit->data;
+ Lattice *lt= obedit->data, *editlt;
BPoint *bp;
int index=0, nr=0, a;
-
+
+ editlt= lt->editlatt->latt;
/* count */
- a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
- bp= lt->editlatt->def;
+ a= editlt->pntsu*editlt->pntsv*editlt->pntsw;
+ bp= editlt->def;
while(a--) {
if(hmd->indexar[index]==nr) {
bp->f1 |= SELECT;
@@ -317,7 +317,7 @@ static int object_hook_index_array(Object *obedit, int *tot, int **indexar, char
case OB_LATTICE:
{
Lattice *lt= obedit->data;
- return return_editlattice_indexar(lt->editlatt, tot, indexar, cent_r);
+ return return_editlattice_indexar(lt->editlatt->latt, tot, indexar, cent_r);
}
default:
return 0;
@@ -416,7 +416,7 @@ static Object *add_hook_object_new(Scene *scene, Object *obedit)
return ob;
}
-static void add_hook_object(Scene *scene, Object *obedit, Object *ob, int mode)
+static void add_hook_object(Main *bmain, Scene *scene, Object *obedit, Object *ob, int mode)
{
ModifierData *md=NULL;
HookModifierData *hmd = NULL;
@@ -462,11 +462,12 @@ static void add_hook_object(Scene *scene, Object *obedit, Object *ob, int mode)
mul_serie_m4(hmd->parentinv, ob->imat, obedit->obmat, NULL,
NULL, NULL, NULL, NULL, NULL);
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
}
static int object_add_hook_selob_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
Object *obedit = CTX_data_edit_object(C);
Object *obsel=NULL;
@@ -485,7 +486,7 @@ static int object_add_hook_selob_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
- add_hook_object(scene, obedit, obsel, OBJECT_ADDHOOK_SELOB);
+ add_hook_object(bmain, scene, obedit, obsel, OBJECT_ADDHOOK_SELOB);
WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, obedit);
return OPERATOR_FINISHED;
@@ -508,10 +509,11 @@ void OBJECT_OT_hook_add_selobj(wmOperatorType *ot)
static int object_add_hook_newob_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
Object *obedit = CTX_data_edit_object(C);
- add_hook_object(scene, obedit, NULL, OBJECT_ADDHOOK_NEWOB);
+ add_hook_object(bmain, scene, obedit, NULL, OBJECT_ADDHOOK_NEWOB);
WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene);
WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, obedit);
diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h
index 8bd0da3b43f..ed75c4060a2 100644
--- a/source/blender/editors/object/object_intern.h
+++ b/source/blender/editors/object/object_intern.h
@@ -75,10 +75,10 @@ void OBJECT_OT_drop_named_material(struct wmOperatorType *ot);
void OBJECT_OT_mode_set(struct wmOperatorType *ot);
void OBJECT_OT_editmode_toggle(struct wmOperatorType *ot);
void OBJECT_OT_posemode_toggle(struct wmOperatorType *ot);
-void OBJECT_OT_restrictview_set(struct wmOperatorType *ot);
-void OBJECT_OT_restrictview_clear(struct wmOperatorType *ot);
-void OBJECT_OT_restrictrender_set(struct wmOperatorType *ot);
-void OBJECT_OT_restrictrender_clear(struct wmOperatorType *ot);
+void OBJECT_OT_hide_view_set(struct wmOperatorType *ot);
+void OBJECT_OT_hide_view_clear(struct wmOperatorType *ot);
+void OBJECT_OT_hide_render_set(struct wmOperatorType *ot);
+void OBJECT_OT_hide_render_clear(struct wmOperatorType *ot);
void OBJECT_OT_proxy_make(struct wmOperatorType *ot);
void OBJECT_OT_shade_smooth(struct wmOperatorType *ot);
void OBJECT_OT_shade_flat(struct wmOperatorType *ot);
@@ -131,11 +131,6 @@ void OBJECT_OT_hook_reset(struct wmOperatorType *ot);
void OBJECT_OT_hook_recenter(struct wmOperatorType *ot);
/* object_lattice.c */
-void free_editLatt(Object *ob);
-void make_editLatt(Object *obedit);
-void load_editLatt(Object *obedit);
-void remake_editLatt(Object *obedit);
-
void LATTICE_OT_select_all(struct wmOperatorType *ot);
void LATTICE_OT_make_regular(struct wmOperatorType *ot);
diff --git a/source/blender/editors/object/object_lattice.c b/source/blender/editors/object/object_lattice.c
index afd4f7a88a7..5997ff96f83 100644
--- a/source/blender/editors/object/object_lattice.c
+++ b/source/blender/editors/object/object_lattice.c
@@ -45,7 +45,8 @@
#include "BKE_key.h"
#include "BKE_lattice.h"
#include "BKE_mesh.h"
-#include "BKE_utildefines.h"
+
+#include "BLI_listbase.h"
#include "ED_screen.h"
#include "ED_view3d.h"
@@ -63,12 +64,16 @@ void free_editLatt(Object *ob)
Lattice *lt= ob->data;
if(lt->editlatt) {
- if(lt->editlatt->def)
- MEM_freeN(lt->editlatt->def);
- if(lt->editlatt->dvert)
- free_dverts(lt->editlatt->dvert, lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw);
-
+ Lattice *editlt= lt->editlatt->latt;
+
+ if(editlt->def)
+ MEM_freeN(editlt->def);
+ if(editlt->dvert)
+ free_dverts(editlt->dvert, editlt->pntsu*editlt->pntsv*editlt->pntsw);
+
+ MEM_freeN(editlt);
MEM_freeN(lt->editlatt);
+
lt->editlatt= NULL;
}
}
@@ -77,47 +82,51 @@ void make_editLatt(Object *obedit)
{
Lattice *lt= obedit->data;
KeyBlock *actkey;
-
+
free_editLatt(obedit);
-
+
lt= obedit->data;
actkey= ob_get_keyblock(obedit);
if(actkey)
key_to_latt(actkey, lt);
- lt->editlatt= MEM_dupallocN(lt);
- lt->editlatt->def= MEM_dupallocN(lt->def);
-
+ lt->editlatt= MEM_callocN(sizeof(EditLatt), "editlatt");
+ lt->editlatt->latt= MEM_dupallocN(lt);
+ lt->editlatt->latt->def= MEM_dupallocN(lt->def);
+
if(lt->dvert) {
int tot= lt->pntsu*lt->pntsv*lt->pntsw;
- lt->editlatt->dvert = MEM_mallocN (sizeof (MDeformVert)*tot, "Lattice MDeformVert");
- copy_dverts(lt->editlatt->dvert, lt->dvert, tot);
+ lt->editlatt->latt->dvert = MEM_mallocN (sizeof (MDeformVert)*tot, "Lattice MDeformVert");
+ copy_dverts(lt->editlatt->latt->dvert, lt->dvert, tot);
}
+
+ if(lt->key) lt->editlatt->shapenr= obedit->shapenr;
}
void load_editLatt(Object *obedit)
{
- Lattice *lt;
+ Lattice *lt, *editlt;
KeyBlock *actkey;
BPoint *bp;
float *fp;
int tot;
-
+
lt= obedit->data;
-
- actkey= ob_get_keyblock(obedit);
+ editlt= lt->editlatt->latt;
+
+ if(lt->editlatt->shapenr) {
+ actkey= BLI_findlink(&lt->key->block, lt->editlatt->shapenr-1);
- if(actkey) {
/* active key: vertices */
- tot= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
+ tot= editlt->pntsu*editlt->pntsv*editlt->pntsw;
if(actkey->data) MEM_freeN(actkey->data);
fp=actkey->data= MEM_callocN(lt->key->elemsize*tot, "actkey->data");
actkey->totelem= tot;
-
- bp= lt->editlatt->def;
+
+ bp= editlt->def;
while(tot--) {
VECCOPY(fp, bp->vec);
fp+= 3;
@@ -126,30 +135,30 @@ void load_editLatt(Object *obedit)
}
else {
MEM_freeN(lt->def);
-
- lt->def= MEM_dupallocN(lt->editlatt->def);
- lt->flag= lt->editlatt->flag;
+ lt->def= MEM_dupallocN(editlt->def);
- lt->pntsu= lt->editlatt->pntsu;
- lt->pntsv= lt->editlatt->pntsv;
- lt->pntsw= lt->editlatt->pntsw;
+ lt->flag= editlt->flag;
+
+ lt->pntsu= editlt->pntsu;
+ lt->pntsv= editlt->pntsv;
+ lt->pntsw= editlt->pntsw;
- lt->typeu= lt->editlatt->typeu;
- lt->typev= lt->editlatt->typev;
- lt->typew= lt->editlatt->typew;
+ lt->typeu= editlt->typeu;
+ lt->typev= editlt->typev;
+ lt->typew= editlt->typew;
}
-
+
if(lt->dvert) {
free_dverts(lt->dvert, lt->pntsu*lt->pntsv*lt->pntsw);
lt->dvert= NULL;
}
-
- if(lt->editlatt->dvert) {
+
+ if(editlt->dvert) {
int tot= lt->pntsu*lt->pntsv*lt->pntsw;
-
+
lt->dvert = MEM_mallocN (sizeof (MDeformVert)*tot, "Lattice MDeformVert");
- copy_dverts(lt->dvert, lt->editlatt->dvert, tot);
+ copy_dverts(lt->dvert, editlt->dvert, tot);
}
}
@@ -161,9 +170,9 @@ void ED_setflagsLatt(Object *obedit, int flag)
BPoint *bp;
int a;
- bp= lt->editlatt->def;
+ bp= lt->editlatt->latt->def;
- a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
+ a= lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw;
while(a--) {
if(bp->hide==0) {
@@ -184,8 +193,8 @@ int select_all_exec(bContext *C, wmOperator *op)
if (action == SEL_TOGGLE) {
action = SEL_SELECT;
- bp= lt->editlatt->def;
- a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
+ bp= lt->editlatt->latt->def;
+ a= lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw;
while(a--) {
if(bp->hide==0) {
@@ -206,8 +215,8 @@ int select_all_exec(bContext *C, wmOperator *op)
ED_setflagsLatt(obedit, 0);
break;
case SEL_INVERT:
- bp= lt->editlatt->def;
- a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
+ bp= lt->editlatt->latt->def;
+ a= lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw;
while(a--) {
if(bp->hide==0) {
@@ -257,7 +266,7 @@ int make_regular_exec(bContext *C, wmOperator *op)
if(ob) {
lt= ob->data;
- resizelattice(lt->editlatt, lt->pntsu, lt->pntsv, lt->pntsw, NULL);
+ resizelattice(lt->editlatt->latt, lt->pntsu, lt->pntsv, lt->pntsw, NULL);
}
else {
ob= CTX_data_active_object(C);
@@ -355,21 +364,21 @@ typedef struct UndoLattice {
static void undoLatt_to_editLatt(void *data, void *edata, void *obdata)
{
UndoLattice *ult= (UndoLattice*)data;
- Lattice *editlatt= (Lattice *)edata;
- int a= editlatt->pntsu*editlatt->pntsv*editlatt->pntsw;
+ EditLatt *editlatt= (EditLatt *)edata;
+ int a= editlatt->latt->pntsu*editlatt->latt->pntsv*editlatt->latt->pntsw;
- memcpy(editlatt->def, ult->def, a*sizeof(BPoint));
+ memcpy(editlatt->latt->def, ult->def, a*sizeof(BPoint));
}
static void *editLatt_to_undoLatt(void *edata, void *obdata)
{
UndoLattice *ult= MEM_callocN(sizeof(UndoLattice), "UndoLattice");
- Lattice *editlatt= (Lattice *)edata;
+ EditLatt *editlatt= (EditLatt *)edata;
- ult->def= MEM_dupallocN(editlatt->def);
- ult->pntsu= editlatt->pntsu;
- ult->pntsv= editlatt->pntsv;
- ult->pntsw= editlatt->pntsw;
+ ult->def= MEM_dupallocN(editlatt->latt->def);
+ ult->pntsu= editlatt->latt->pntsu;
+ ult->pntsv= editlatt->latt->pntsv;
+ ult->pntsw= editlatt->latt->pntsw;
return ult;
}
@@ -385,11 +394,11 @@ static void free_undoLatt(void *data)
static int validate_undoLatt(void *data, void *edata)
{
UndoLattice *ult= (UndoLattice*)data;
- Lattice *editlatt= (Lattice *)edata;
+ EditLatt *editlatt= (EditLatt *)edata;
- return (ult->pntsu == editlatt->pntsu &&
- ult->pntsv == editlatt->pntsv &&
- ult->pntsw == editlatt->pntsw);
+ return (ult->pntsu == editlatt->latt->pntsu &&
+ ult->pntsv == editlatt->latt->pntsv &&
+ ult->pntsw == editlatt->latt->pntsw);
}
static void *get_editlatt(bContext *C)
diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c
index 8792803bf0c..8bbfce4dd99 100644
--- a/source/blender/editors/object/object_modifier.c
+++ b/source/blender/editors/object/object_modifier.c
@@ -43,7 +43,6 @@
#include "BLI_string.h"
#include "BLI_path_util.h"
-#include "BKE_action.h"
#include "BKE_curve.h"
#include "BKE_context.h"
#include "BKE_depsgraph.h"
@@ -53,6 +52,7 @@
#include "BKE_global.h"
#include "BKE_key.h"
#include "BKE_lattice.h"
+#include "BKE_main.h"
#include "BKE_mesh.h"
#include "BKE_modifier.h"
#include "BKE_multires.h"
@@ -60,7 +60,6 @@
#include "BKE_object.h"
#include "BKE_particle.h"
#include "BKE_softbody.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
#include "RNA_define.h"
@@ -77,7 +76,7 @@
/******************************** API ****************************/
-ModifierData *ED_object_modifier_add(ReportList *reports, Scene *scene, Object *ob, char *name, int type)
+ModifierData *ED_object_modifier_add(ReportList *reports, Main *bmain, Scene *scene, Object *ob, char *name, int type)
{
ModifierData *md=NULL, *new_md=NULL;
ModifierTypeInfo *mti = modifierType_getInfo(type);
@@ -129,10 +128,10 @@ ModifierData *ED_object_modifier_add(ReportList *reports, Scene *scene, Object *
ob->pd= object_add_collision_fields(0);
ob->pd->deflect= 1;
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
}
else if(type == eModifierType_Surface)
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
}
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
@@ -140,7 +139,7 @@ ModifierData *ED_object_modifier_add(ReportList *reports, Scene *scene, Object *
return new_md;
}
-int ED_object_modifier_remove(ReportList *reports, Scene *scene, Object *ob, ModifierData *md)
+int ED_object_modifier_remove(ReportList *reports, Main *bmain, Scene *scene, Object *ob, ModifierData *md)
{
ModifierData *obmd;
@@ -175,13 +174,13 @@ int ED_object_modifier_remove(ReportList *reports, Scene *scene, Object *ob, Mod
if(ob->pd)
ob->pd->deflect= 0;
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
}
else if(md->type == eModifierType_Surface) {
if(ob->pd && ob->pd->shape == PFIELD_SHAPE_SURFACE)
ob->pd->shape = PFIELD_SHAPE_PLANE;
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
}
else if(md->type == eModifierType_Smoke) {
ob->dt = OB_TEXTURE;
@@ -243,7 +242,7 @@ int ED_object_modifier_move_down(ReportList *reports, Object *ob, ModifierData *
return 1;
}
-int ED_object_modifier_convert(ReportList *reports, Scene *scene, Object *ob, ModifierData *md)
+int ED_object_modifier_convert(ReportList *reports, Main *bmain, Scene *scene, Object *ob, ModifierData *md)
{
Object *obn;
ParticleSystem *psys;
@@ -341,7 +340,7 @@ int ED_object_modifier_convert(ReportList *reports, Scene *scene, Object *ob, Mo
}
}
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
return 1;
}
@@ -511,11 +510,12 @@ int ED_object_modifier_copy(ReportList *reports, Object *ob, ModifierData *md)
static int modifier_add_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
Object *ob = ED_object_active_context(C);
int type= RNA_enum_get(op->ptr, "type");
- if(!ED_object_modifier_add(op->reports, scene, ob, NULL, type))
+ if(!ED_object_modifier_add(op->reports, bmain, scene, ob, NULL, type))
return OPERATOR_CANCELLED;
WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob);
@@ -637,11 +637,12 @@ static ModifierData *edit_modifier_property_get(bContext *C, wmOperator *op, Obj
static int modifier_remove_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
Object *ob = ED_object_active_context(C);
ModifierData *md = edit_modifier_property_get(C, op, ob, 0);
- if(!ob || !md || !ED_object_modifier_remove(op->reports, scene, ob, md))
+ if(!ob || !md || !ED_object_modifier_remove(op->reports, bmain, scene, ob, md))
return OPERATOR_CANCELLED;
WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob);
@@ -803,11 +804,12 @@ void OBJECT_OT_modifier_apply(wmOperatorType *ot)
static int modifier_convert_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
Object *ob = ED_object_active_context(C);
ModifierData *md = edit_modifier_property_get(C, op, ob, 0);
- if(!ob || !md || !ED_object_modifier_convert(op->reports, scene, ob, md))
+ if(!ob || !md || !ED_object_modifier_convert(op->reports, bmain, scene, ob, md))
return OPERATOR_CANCELLED;
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c
index ba706a0d4b9..6e9e8eeb5e5 100644
--- a/source/blender/editors/object/object_ops.c
+++ b/source/blender/editors/object/object_ops.c
@@ -29,7 +29,6 @@
#include <stdlib.h>
#include <math.h>
-#include "MEM_guardedalloc.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
@@ -38,8 +37,6 @@
#include "BLI_blenlib.h"
#include "BKE_context.h"
-#include "BKE_global.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
#include "RNA_define.h"
@@ -72,10 +69,10 @@ void ED_operatortypes_object(void)
WM_operatortype_append(OBJECT_OT_editmode_toggle);
WM_operatortype_append(OBJECT_OT_posemode_toggle);
WM_operatortype_append(OBJECT_OT_proxy_make);
- WM_operatortype_append(OBJECT_OT_restrictview_clear);
- WM_operatortype_append(OBJECT_OT_restrictview_set);
- WM_operatortype_append(OBJECT_OT_restrictrender_clear);
- WM_operatortype_append(OBJECT_OT_restrictrender_set);
+ WM_operatortype_append(OBJECT_OT_hide_view_clear);
+ WM_operatortype_append(OBJECT_OT_hide_view_set);
+ WM_operatortype_append(OBJECT_OT_hide_render_clear);
+ WM_operatortype_append(OBJECT_OT_hide_render_set);
WM_operatortype_append(OBJECT_OT_shade_smooth);
WM_operatortype_append(OBJECT_OT_shade_flat);
WM_operatortype_append(OBJECT_OT_paths_calculate);
@@ -318,20 +315,19 @@ void ED_keymap_object(wmKeyConfig *keyconf)
WM_keymap_verify_item(keymap, "OBJECT_OT_scale_clear", SKEY, KM_PRESS, KM_ALT, 0);
WM_keymap_verify_item(keymap, "OBJECT_OT_origin_clear", OKEY, KM_PRESS, KM_ALT, 0);
- WM_keymap_add_item(keymap, "OBJECT_OT_restrictview_clear", HKEY, KM_PRESS, KM_ALT, 0);
- WM_keymap_add_item(keymap, "OBJECT_OT_restrictview_set", HKEY, KM_PRESS, 0, 0);
- RNA_boolean_set(WM_keymap_add_item(keymap, "OBJECT_OT_restrictview_set", HKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "unselected", 1);
+ WM_keymap_add_item(keymap, "OBJECT_OT_hide_view_clear", HKEY, KM_PRESS, KM_ALT, 0);
+ WM_keymap_add_item(keymap, "OBJECT_OT_hide_view_set", HKEY, KM_PRESS, 0, 0);
+ RNA_boolean_set(WM_keymap_add_item(keymap, "OBJECT_OT_hide_view_set", HKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "unselected", 1);
/* same as above but for rendering */
- WM_keymap_add_item(keymap, "OBJECT_OT_restrictrender_clear", HKEY, KM_PRESS, KM_ALT|KM_CTRL, 0);
- WM_keymap_add_item(keymap, "OBJECT_OT_restrictrender_set", HKEY, KM_PRESS, KM_CTRL, 0);
-// RNA_boolean_set(WM_keymap_add_item(keymap, "OBJECT_OT_restrictrender_set", HKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0)->ptr, "unselected", 1); // conflicts, removing
+ WM_keymap_add_item(keymap, "OBJECT_OT_hide_render_clear", HKEY, KM_PRESS, KM_ALT|KM_CTRL, 0);
+ WM_keymap_add_item(keymap, "OBJECT_OT_hide_render_set", HKEY, KM_PRESS, KM_CTRL, 0);
+// RNA_boolean_set(WM_keymap_add_item(keymap, "OBJECT_OT_hide_render_set", HKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0)->ptr, "unselected", 1); // conflicts, removing
WM_keymap_add_item(keymap, "OBJECT_OT_move_to_layer", MKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "OBJECT_OT_delete", XKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "OBJECT_OT_delete", DELKEY, KM_PRESS, 0, 0);
- WM_keymap_add_item(keymap, "OBJECT_OT_delete", BACKSPACEKEY, KM_PRESS, 0, 0);
WM_keymap_add_menu(keymap, "INFO_MT_add", AKEY, KM_PRESS, KM_SHIFT, 0);
WM_keymap_add_item(keymap, "OBJECT_OT_duplicates_make_real", AKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0);
@@ -365,7 +361,10 @@ void ED_keymap_object(wmKeyConfig *keyconf)
RNA_int_set(kmi->ptr, "level", i);
}
- /* Lattice -------------------------------------------------------------------- */
+ /* ############################################################################ */
+ /* ################################ LATTICE ################################### */
+ /* ############################################################################ */
+
keymap= WM_keymap_find(keyconf, "Lattice", 0, 0);
keymap->poll= ED_operator_editlattice;
@@ -376,7 +375,7 @@ void ED_keymap_object(wmKeyConfig *keyconf)
/* menus */
WM_keymap_add_menu(keymap, "VIEW3D_MT_hook", HKEY, KM_PRESS, KM_CTRL, 0);
- ED_object_generic_keymap(keyconf, keymap, 1);
+ ED_object_generic_keymap(keyconf, keymap, 2);
}
void ED_object_generic_keymap(struct wmKeyConfig *keyconf, struct wmKeyMap *keymap, int do_pet)
@@ -384,22 +383,31 @@ void ED_object_generic_keymap(struct wmKeyConfig *keyconf, struct wmKeyMap *keym
wmKeyMapItem *kmi;
/* used by mesh, curve & lattice only */
- if(do_pet > 0) {
+ if(do_pet) {
/* context ops */
kmi = WM_keymap_add_item(keymap, "WM_OT_context_cycle_enum", OKEY, KM_PRESS, KM_SHIFT, 0);
- RNA_string_set(kmi->ptr, "data_path", "tool_settings.proportional_editing_falloff");
+ RNA_string_set(kmi->ptr, "data_path", "tool_settings.proportional_edit_falloff");
+
+ // Object mode
+ if (do_pet == 1) {
+
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle", OKEY, KM_PRESS, 0, 0);
+ RNA_string_set(kmi->ptr, "data_path", "tool_settings.use_proportional_edit_objects");
- kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle_enum", OKEY, KM_PRESS, 0, 0);
- RNA_string_set(kmi->ptr, "data_path", "tool_settings.proportional_editing");
- RNA_string_set(kmi->ptr, "value_1", "DISABLED");
- RNA_string_set(kmi->ptr, "value_2", "ENABLED");
+ } else { // Edit mode
- /* for modes/object types that allow 'conencted' mode, add the Alt O key */
- if (do_pet > 1) {
- kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle_enum", OKEY, KM_PRESS, KM_ALT, 0);
- RNA_string_set(kmi->ptr, "data_path", "tool_settings.proportional_editing");
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle_enum", OKEY, KM_PRESS, 0, 0);
+ RNA_string_set(kmi->ptr, "data_path", "tool_settings.proportional_edit");
RNA_string_set(kmi->ptr, "value_1", "DISABLED");
- RNA_string_set(kmi->ptr, "value_2", "CONNECTED");
+ RNA_string_set(kmi->ptr, "value_2", "ENABLED");
+
+ /* for modes/object types that allow 'connected' mode, add the Alt O key */
+ if (do_pet == 3) {
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle_enum", OKEY, KM_PRESS, KM_ALT, 0);
+ RNA_string_set(kmi->ptr, "data_path", "tool_settings.proportional_edit");
+ RNA_string_set(kmi->ptr, "value_1", "DISABLED");
+ RNA_string_set(kmi->ptr, "value_2", "CONNECTED");
+ }
}
}
}
diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c
index cc9df09dc38..76330477418 100644
--- a/source/blender/editors/object/object_relations.c
+++ b/source/blender/editors/object/object_relations.c
@@ -41,6 +41,7 @@
#include "DNA_particle_types.h"
#include "DNA_scene_types.h"
#include "DNA_world_types.h"
+#include "DNA_object_types.h"
#include "BLI_math.h"
#include "BLI_editVert.h"
@@ -68,7 +69,6 @@
#include "BKE_sca.h"
#include "BKE_scene.h"
#include "BKE_texture.h"
-#include "BKE_utildefines.h"
#include "BKE_tessmesh.h"
#include "WM_api.h"
@@ -98,6 +98,7 @@ static int vertex_parent_set_poll(bContext *C)
static int vertex_parent_set_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
Object *obedit= CTX_data_edit_object(C);
BMVert *eve;
@@ -168,8 +169,8 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op)
else if(obedit->type==OB_LATTICE) {
Lattice *lt= obedit->data;
- a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
- bp= lt->editlatt->def;
+ a= lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw;
+ bp= lt->editlatt->latt->def;
while(a--) {
if(bp->f1 & SELECT) {
if(v1==0) v1= nr;
@@ -227,7 +228,7 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op)
}
CTX_DATA_END;
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
WM_event_add_notifier(C, NC_OBJECT, NULL);
@@ -292,6 +293,7 @@ static int make_proxy_invoke (bContext *C, wmOperator *op, wmEvent *evt)
static int make_proxy_exec (bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Object *ob, *gob= CTX_data_active_object(C);
GroupObject *go;
Scene *scene= CTX_data_scene(C);
@@ -335,7 +337,7 @@ static int make_proxy_exec (bContext *C, wmOperator *op)
object_make_proxy(newob, ob, gob);
/* depsgraph flushes are needed for the new data */
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
DAG_id_flush_update(&newob->id, OB_RECALC_ALL);
WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, newob);
}
@@ -410,6 +412,8 @@ static EnumPropertyItem prop_clear_parent_types[] = {
/* note, poll should check for editable scene */
static int parent_clear_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
+ Scene *scene= CTX_data_scene(C);
int type= RNA_enum_get(op->ptr, "type");
CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) {
@@ -428,8 +432,8 @@ static int parent_clear_exec(bContext *C, wmOperator *op)
}
CTX_DATA_END;
- DAG_scene_sort(CTX_data_scene(C));
- DAG_ids_flush_update(0);
+ DAG_scene_sort(bmain, scene);
+ DAG_ids_flush_update(bmain, 0);
WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
return OPERATOR_FINISHED;
@@ -514,6 +518,7 @@ void ED_object_parent(Object *ob, Object *par, int type, const char *substr)
static int parent_set_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
Object *par= CTX_data_active_object(C);
bPoseChannel *pchan= NULL;
@@ -591,15 +596,15 @@ static int parent_set_exec(bContext *C, wmOperator *op)
switch (partype) {
case PAR_CURVE: /* curve deform */
- md= ED_object_modifier_add(op->reports, scene, ob, NULL, eModifierType_Curve);
+ md= ED_object_modifier_add(op->reports, bmain, scene, ob, NULL, eModifierType_Curve);
((CurveModifierData *)md)->object= par;
break;
case PAR_LATTICE: /* lattice deform */
- md= ED_object_modifier_add(op->reports, scene, ob, NULL, eModifierType_Lattice);
+ md= ED_object_modifier_add(op->reports, bmain, scene, ob, NULL, eModifierType_Lattice);
((LatticeModifierData *)md)->object= par;
break;
default: /* armature deform */
- md= ED_object_modifier_add(op->reports, scene, ob, NULL, eModifierType_Armature);
+ md= ED_object_modifier_add(op->reports, bmain, scene, ob, NULL, eModifierType_Armature);
((ArmatureModifierData *)md)->object= par;
break;
}
@@ -654,8 +659,8 @@ static int parent_set_exec(bContext *C, wmOperator *op)
}
CTX_DATA_END;
- DAG_scene_sort(scene);
- DAG_ids_flush_update(0);
+ DAG_scene_sort(bmain, scene);
+ DAG_ids_flush_update(bmain, 0);
WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
return OPERATOR_FINISHED;
@@ -716,6 +721,7 @@ void OBJECT_OT_parent_set(wmOperatorType *ot)
static int parent_noinv_set_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Object *par= CTX_data_active_object(C);
par->recalc |= OB_RECALC_OB;
@@ -742,8 +748,8 @@ static int parent_noinv_set_exec(bContext *C, wmOperator *op)
}
CTX_DATA_END;
- DAG_scene_sort(CTX_data_scene(C));
- DAG_ids_flush_update(0);
+ DAG_scene_sort(bmain, CTX_data_scene(C));
+ DAG_ids_flush_update(bmain, 0);
WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
return OPERATOR_FINISHED;
@@ -769,6 +775,7 @@ void OBJECT_OT_parent_no_inverse_set(wmOperatorType *ot)
static int object_slow_parent_clear_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) {
@@ -783,7 +790,7 @@ static int object_slow_parent_clear_exec(bContext *C, wmOperator *op)
}
CTX_DATA_END;
- DAG_ids_flush_update(0);
+ DAG_ids_flush_update(bmain, 0);
WM_event_add_notifier(C, NC_SCENE, scene);
return OPERATOR_FINISHED;
@@ -810,6 +817,7 @@ void OBJECT_OT_slow_parent_clear(wmOperatorType *ot)
static int object_slow_parent_set_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) {
@@ -821,7 +829,7 @@ static int object_slow_parent_set_exec(bContext *C, wmOperator *op)
}
CTX_DATA_END;
- DAG_ids_flush_update(0);
+ DAG_ids_flush_update(bmain, 0);
WM_event_add_notifier(C, NC_SCENE, scene);
return OPERATOR_FINISHED;
@@ -855,6 +863,8 @@ static EnumPropertyItem prop_clear_track_types[] = {
/* note, poll should check for editable scene */
static int object_track_clear_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
+ Scene *scene= CTX_data_scene(C);
int type= RNA_enum_get(op->ptr, "type");
if(CTX_data_edit_object(C)) {
@@ -880,8 +890,8 @@ static int object_track_clear_exec(bContext *C, wmOperator *op)
}
CTX_DATA_END;
- DAG_ids_flush_update(0);
- DAG_scene_sort(CTX_data_scene(C));
+ DAG_ids_flush_update(bmain, 0);
+ DAG_scene_sort(bmain, scene);
WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
return OPERATOR_FINISHED;
@@ -917,6 +927,7 @@ static EnumPropertyItem prop_make_track_types[] = {
static int track_set_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
Object *obact= CTX_data_active_object(C);
@@ -984,8 +995,8 @@ static int track_set_exec(bContext *C, wmOperator *op)
CTX_DATA_END;
}
- DAG_scene_sort(scene);
- DAG_ids_flush_update(0);
+ DAG_scene_sort(bmain, scene);
+ DAG_ids_flush_update(bmain, 0);
WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
return OPERATOR_FINISHED;
@@ -1018,7 +1029,7 @@ static unsigned int move_to_layer_init(bContext *C, wmOperator *op)
int values[20], a;
unsigned int lay= 0;
- if(!RNA_property_is_set(op->ptr, "layer")) {
+ if(!RNA_property_is_set(op->ptr, "layers")) {
CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) {
lay |= base->lay;
}
@@ -1027,10 +1038,10 @@ static unsigned int move_to_layer_init(bContext *C, wmOperator *op)
for(a=0; a<20; a++)
values[a]= (lay & (1<<a));
- RNA_boolean_set_array(op->ptr, "layer", values);
+ RNA_boolean_set_array(op->ptr, "layers", values);
}
else {
- RNA_boolean_get_array(op->ptr, "layer", values);
+ RNA_boolean_get_array(op->ptr, "layers", values);
for(a=0; a<20; a++)
if(values[a])
@@ -1054,6 +1065,7 @@ static int move_to_layer_invoke(bContext *C, wmOperator *op, wmEvent *event)
static int move_to_layer_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
View3D *v3d= CTX_wm_view3d(C);
unsigned int lay, local;
@@ -1094,7 +1106,7 @@ static int move_to_layer_exec(bContext *C, wmOperator *op)
/* warning, active object may be hidden now */
WM_event_add_notifier(C, NC_SCENE|NC_OBJECT|ND_DRAW, scene); /* is NC_SCENE needed ? */
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
return OPERATOR_FINISHED;
}
@@ -1115,15 +1127,15 @@ void OBJECT_OT_move_to_layer(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
/* properties */
- RNA_def_boolean_layer_member(ot->srna, "layer", 20, NULL, "Layer", "");
+ RNA_def_boolean_layer_member(ot->srna, "layers", 20, NULL, "Layer", "");
}
/************************** Link to Scene Operator *****************************/
-void link_to_scene(unsigned short nr)
+void link_to_scene(Main *bmain, unsigned short nr)
{
#if 0
- Scene *sce= (Scene*) BLI_findlink(&G.main->scene, G.curscreen->scenenr-1);
+ Scene *sce= (Scene*) BLI_findlink(&bmain->scene, G.curscreen->scenenr-1);
Base *base, *nbase;
if(sce==0) return;
@@ -1143,6 +1155,7 @@ void link_to_scene(unsigned short nr)
static int make_links_scene_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene_to= BLI_findlink(&CTX_data_main(C)->scene, RNA_enum_get(op->ptr, "scene"));
if(scene_to==NULL) {
@@ -1171,7 +1184,7 @@ static int make_links_scene_exec(bContext *C, wmOperator *op)
}
CTX_DATA_END;
- DAG_ids_flush_update(0);
+ DAG_ids_flush_update(bmain, 0);
/* one day multiple scenes will be visible, then we should have some update function for them */
return OPERATOR_FINISHED;
@@ -1211,6 +1224,7 @@ static int allow_make_links_data(int ev, Object *ob, Object *obt)
static int make_links_data_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
int event = RNA_int_get(op->ptr, "type");
Object *ob;
ID *id;
@@ -1263,7 +1277,7 @@ static int make_links_data_exec(bContext *C, wmOperator *op)
}
CTX_DATA_END;
- DAG_ids_flush_update(0);
+ DAG_ids_flush_update(bmain, 0);
WM_event_add_notifier(C, NC_SPACE|ND_SPACE_VIEW3D, CTX_wm_view3d(C));
return OPERATOR_FINISHED;
}
@@ -1393,7 +1407,7 @@ void new_id_matar(Material **matar, int totcol)
}
}
-void single_obdata_users(Scene *scene, int flag)
+void single_obdata_users(Main *bmain, Scene *scene, int flag)
{
Object *ob;
Lamp *la;
@@ -1509,7 +1523,7 @@ void single_obdata_users(Scene *scene, int flag)
}
}
- me= G.main->mesh.first;
+ me= bmain->mesh.first;
while(me) {
ID_NEW(me->texcomesh);
me= me->id.next;
@@ -1607,10 +1621,9 @@ void do_single_tex_user(Tex **from)
}
}
-void single_tex_users_expand()
+void single_tex_users_expand(Main *bmain)
{
/* only when 'parent' blocks are LIB_NEW */
- Main *bmain= G.main;
Material *ma;
Lamp *la;
World *wo;
@@ -1647,10 +1660,9 @@ void single_tex_users_expand()
}
}
-static void single_mat_users_expand(void)
+static void single_mat_users_expand(Main *bmain)
{
/* only when 'parent' blocks are LIB_NEW */
- Main *bmain= G.main;
Object *ob;
Mesh *me;
Curve *cu;
@@ -1683,14 +1695,14 @@ static void single_mat_users_expand(void)
}
/* used for copying scenes */
-void ED_object_single_users(Scene *scene, int full)
+void ED_object_single_users(Main *bmain, Scene *scene, int full)
{
single_object_users(scene, NULL, 0);
if(full) {
- single_obdata_users(scene, 0);
- single_mat_users_expand();
- single_tex_users_expand();
+ single_obdata_users(bmain, scene, 0);
+ single_mat_users_expand(bmain);
+ single_tex_users_expand(bmain);
}
clear_id_newpoins();
@@ -1825,6 +1837,7 @@ void OBJECT_OT_make_local(wmOperatorType *ot)
static int make_single_user_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
View3D *v3d= CTX_wm_view3d(C); /* ok if this is NULL */
int flag= RNA_enum_get(op->ptr, "type"); /* 0==ALL, SELECTED==selected objecs */
@@ -1833,7 +1846,7 @@ static int make_single_user_exec(bContext *C, wmOperator *op)
single_object_users(scene, v3d, flag);
if(RNA_boolean_get(op->ptr, "obdata"))
- single_obdata_users(scene, flag);
+ single_obdata_users(bmain, scene, flag);
if(RNA_boolean_get(op->ptr, "material"))
single_mat_users(scene, flag, FALSE);
@@ -1882,6 +1895,7 @@ void OBJECT_OT_make_single_user(wmOperatorType *ot)
static int drop_named_material_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
+ Main *bmain= CTX_data_main(C);
Base *base= ED_view3d_give_base_under_cursor(C, event->mval);
Material *ma;
char name[32];
@@ -1893,7 +1907,7 @@ static int drop_named_material_invoke(bContext *C, wmOperator *op, wmEvent *even
assign_material(base->object, ma, 1);
- DAG_ids_flush_update(0);
+ DAG_ids_flush_update(bmain, 0);
WM_event_add_notifier(C, NC_SPACE|ND_SPACE_VIEW3D, CTX_wm_view3d(C));
return OPERATOR_FINISHED;
diff --git a/source/blender/editors/object/object_select.c b/source/blender/editors/object/object_select.c
index 8e3d613e02e..fa9a97f4e74 100644
--- a/source/blender/editors/object/object_select.c
+++ b/source/blender/editors/object/object_select.c
@@ -44,7 +44,6 @@
#include "BLI_string.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_group.h"
#include "BKE_main.h"
#include "BKE_material.h"
@@ -52,7 +51,7 @@
#include "BKE_property.h"
#include "BKE_report.h"
#include "BKE_scene.h"
-#include "BKE_utildefines.h"
+#include "BKE_deform.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -636,7 +635,7 @@ static int object_select_by_layer_exec(bContext *C, wmOperator *op)
short extend;
extend= RNA_boolean_get(op->ptr, "extend");
- layernum = RNA_int_get(op->ptr, "layer");
+ layernum = RNA_int_get(op->ptr, "layers");
if (extend == 0) {
CTX_DATA_BEGIN(C, Base*, base, visible_bases) {
@@ -674,7 +673,7 @@ void OBJECT_OT_select_by_layer(wmOperatorType *ot)
/* properties */
RNA_def_boolean(ot->srna, "extend", FALSE, "Extend", "Extend selection instead of deselecting everything first.");
- RNA_def_int(ot->srna, "layer", 1, 1, 20, "Layer", "", 1, 20);
+ RNA_def_int(ot->srna, "layers", 1, 1, 20, "Layer", "", 1, 20);
}
/************************** Select Inverse *************************/
@@ -760,7 +759,7 @@ void OBJECT_OT_select_all(wmOperatorType *ot)
{
/* identifiers */
- ot->name= "deselect all";
+ ot->name= "Select or Deselect All";
ot->description = "Change selection of all visible objects in scene";
ot->idname= "OBJECT_OT_select_all";
@@ -824,130 +823,17 @@ void OBJECT_OT_select_same_group(wmOperatorType *ot)
}
/**************************** Select Mirror ****************************/
-
-/* finds the best possible flipped name. For renaming; check for unique names afterwards */
-/* if strip_number: removes number extensions */
-void object_flip_name (char *name)
-{
- int len;
- char prefix[128]={""}; /* The part before the facing */
- char suffix[128]={""}; /* The part after the facing */
- char replace[128]={""}; /* The replacement string */
- char number[128]={""}; /* The number extension string */
- char *index=NULL;
-
- len= strlen(name);
- if(len<3) return; // we don't do names like .R or .L
-
- /* We first check the case with a .### extension, let's find the last period */
- if(isdigit(name[len-1])) {
- index= strrchr(name, '.'); // last occurrence
- if (index && isdigit(index[1]) ) { // doesnt handle case bone.1abc2 correct..., whatever!
- strcpy(number, index);
- *index= 0;
- len= strlen(name);
- }
- }
-
- strcpy (prefix, name);
-
-#define IS_SEPARATOR(a) ((a)=='.' || (a)==' ' || (a)=='-' || (a)=='_')
-
- /* first case; separator . - _ with extensions r R l L */
- if( IS_SEPARATOR(name[len-2]) ) {
- switch(name[len-1]) {
- case 'l':
- prefix[len-1]= 0;
- strcpy(replace, "r");
- break;
- case 'r':
- prefix[len-1]= 0;
- strcpy(replace, "l");
- break;
- case 'L':
- prefix[len-1]= 0;
- strcpy(replace, "R");
- break;
- case 'R':
- prefix[len-1]= 0;
- strcpy(replace, "L");
- break;
- }
- }
- /* case; beginning with r R l L , with separator after it */
- else if( IS_SEPARATOR(name[1]) ) {
- switch(name[0]) {
- case 'l':
- strcpy(replace, "r");
- strcpy(suffix, name+1);
- prefix[0]= 0;
- break;
- case 'r':
- strcpy(replace, "l");
- strcpy(suffix, name+1);
- prefix[0]= 0;
- break;
- case 'L':
- strcpy(replace, "R");
- strcpy(suffix, name+1);
- prefix[0]= 0;
- break;
- case 'R':
- strcpy(replace, "L");
- strcpy(suffix, name+1);
- prefix[0]= 0;
- break;
- }
- }
- else if(len > 5) {
- /* hrms, why test for a separator? lets do the rule 'ultimate left or right' */
- index = BLI_strcasestr(prefix, "right");
- if (index==prefix || index==prefix+len-5) {
- if(index[0]=='r')
- strcpy (replace, "left");
- else {
- if(index[1]=='I')
- strcpy (replace, "LEFT");
- else
- strcpy (replace, "Left");
- }
- *index= 0;
- strcpy (suffix, index+5);
- }
- else {
- index = BLI_strcasestr(prefix, "left");
- if (index==prefix || index==prefix+len-4) {
- if(index[0]=='l')
- strcpy (replace, "right");
- else {
- if(index[1]=='E')
- strcpy (replace, "RIGHT");
- else
- strcpy (replace, "Right");
- }
- *index= 0;
- strcpy (suffix, index+4);
- }
- }
- }
-
-#undef IS_SEPARATOR
-
- sprintf (name, "%s%s%s%s", prefix, replace, suffix, number);
-}
-
static int object_select_mirror_exec(bContext *C, wmOperator *op)
{
- char tmpname[32];
short extend;
extend= RNA_boolean_get(op->ptr, "extend");
CTX_DATA_BEGIN(C, Base*, primbase, selected_bases) {
- strcpy(tmpname, primbase->object->id.name+2);
- object_flip_name(tmpname);
-
+ char tmpname[32];
+ flip_side_name(tmpname, primbase->object->id.name+2, TRUE);
+
CTX_DATA_BEGIN(C, Base*, secbase, visible_bases) {
if(!strcmp(secbase->object->id.name+2, tmpname)) {
ED_base_object_select(secbase, BA_SELECT);
diff --git a/source/blender/editors/object/object_shapekey.c b/source/blender/editors/object/object_shapekey.c
index 6735d07b591..7b1ab933e28 100644
--- a/source/blender/editors/object/object_shapekey.c
+++ b/source/blender/editors/object/object_shapekey.c
@@ -45,20 +45,14 @@
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
-#include "BKE_action.h"
-#include "BKE_anim.h"
#include "BKE_context.h"
-#include "BKE_curve.h"
#include "BKE_depsgraph.h"
-#include "BKE_global.h"
-#include "BKE_ipo.h"
#include "BKE_key.h"
#include "BKE_library.h"
#include "BKE_main.h"
-#include "BKE_mesh.h"
#include "BKE_object.h"
-#include "BKE_utildefines.h"
#include "BLO_sys_types.h" // for intptr_t support
diff --git a/source/blender/editors/object/object_transform.c b/source/blender/editors/object/object_transform.c
index 50764aeb192..0b52b84a7f9 100644
--- a/source/blender/editors/object/object_transform.c
+++ b/source/blender/editors/object/object_transform.c
@@ -34,6 +34,7 @@
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
+#include "DNA_group_types.h"
#include "BLI_math.h"
#include "BLI_editVert.h"
@@ -42,12 +43,10 @@
#include "BKE_context.h"
#include "BKE_curve.h"
#include "BKE_depsgraph.h"
-#include "BKE_global.h"
#include "BKE_main.h"
#include "BKE_mesh.h"
#include "BKE_object.h"
#include "BKE_report.h"
-#include "BKE_utildefines.h"
#include "BKE_tessmesh.h"
#include "RNA_define.h"
@@ -57,7 +56,6 @@
#include "WM_types.h"
#include "ED_armature.h"
-#include "ED_curve.h"
#include "ED_keyframing.h"
#include "ED_mesh.h"
#include "ED_screen.h"
@@ -69,6 +67,7 @@
static int object_location_clear_exec(bContext *C, wmOperator *op)
{
+ Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, "Location");
@@ -103,7 +102,7 @@ static int object_location_clear_exec(bContext *C, wmOperator *op)
CTX_DATA_END;
/* this is needed so children are also updated */
- DAG_ids_flush_update(0);
+ DAG_ids_flush_update(bmain, 0);
WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
@@ -127,6 +126,7 @@ void OBJECT_OT_location_clear(wmOperatorType *ot)
static int object_rotation_clear_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, "Rotation");
@@ -183,7 +183,7 @@ static int object_rotation_clear_exec(bContext *C, wmOperator *op)
axis_angle_to_eulO( oldeul, EULER_ORDER_DEFAULT,ob->rotAxis, ob->rotAngle);
}
else {
- VECCOPY(oldeul, ob->rot);
+ copy_v3_v3(oldeul, ob->rot);
}
eul[0]= eul[1]= eul[2]= 0.0f;
@@ -206,7 +206,7 @@ static int object_rotation_clear_exec(bContext *C, wmOperator *op)
eulO_to_axis_angle( ob->rotAxis, &ob->rotAngle,eul, EULER_ORDER_DEFAULT);
}
else {
- VECCOPY(ob->rot, eul);
+ copy_v3_v3(ob->rot, eul);
}
}
} // Duplicated in source/blender/editors/armature/editarmature.c
@@ -245,7 +245,7 @@ static int object_rotation_clear_exec(bContext *C, wmOperator *op)
CTX_DATA_END;
/* this is needed so children are also updated */
- DAG_ids_flush_update(0);
+ DAG_ids_flush_update(bmain, 0);
WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
@@ -269,6 +269,7 @@ void OBJECT_OT_rotation_clear(wmOperatorType *ot)
static int object_scale_clear_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, "Scaling");
@@ -308,7 +309,7 @@ static int object_scale_clear_exec(bContext *C, wmOperator *op)
CTX_DATA_END;
/* this is needed so children are also updated */
- DAG_ids_flush_update(0);
+ DAG_ids_flush_update(bmain, 0);
WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
@@ -332,6 +333,7 @@ void OBJECT_OT_scale_clear(wmOperatorType *ot)
static int object_origin_clear_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
float *v1, *v3, mat[3][3];
int armature_clear= 0;
@@ -341,10 +343,7 @@ static int object_origin_clear_exec(bContext *C, wmOperator *op)
v3= ob->parentinv[3];
copy_m3_m4(mat, ob->parentinv);
- VECCOPY(v3, v1);
- v3[0]= -v3[0];
- v3[1]= -v3[1];
- v3[2]= -v3[2];
+ negate_v3_v3(v3, v1);
mul_m3_v3(mat, v3);
}
ob->recalc |= OB_RECALC_OB;
@@ -352,7 +351,7 @@ static int object_origin_clear_exec(bContext *C, wmOperator *op)
CTX_DATA_END;
if(armature_clear==0) /* in this case flush was done */
- DAG_ids_flush_update(0);
+ DAG_ids_flush_update(bmain, 0);
WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
@@ -698,338 +697,293 @@ void texspace_edit(Scene *scene, View3D *v3d)
/********************* Set Object Center ************************/
-static EnumPropertyItem prop_set_center_types[] = {
- {0, "GEOMETRY_ORIGIN", 0, "Geometry to Origin", "Move object geometry to object origin"},
- {1, "ORIGIN_GEOMETRY", 0, "Origin to Geometry", "Move object origin to center of object geometry"},
- {2, "ORIGIN_CURSOR", 0, "Origin to 3D Cursor", "Move object origin to position of the 3d cursor"},
- {0, NULL, 0, NULL, NULL}
+enum {
+ GEOMETRY_TO_ORIGIN=0,
+ ORIGIN_TO_GEOMETRY,
+ ORIGIN_TO_CURSOR
};
-/* 0 == do center, 1 == center new, 2 == center cursor */
static int object_origin_set_exec(bContext *C, wmOperator *op)
{
Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
- ScrArea *sa= CTX_wm_area(C);
- View3D *v3d= sa->spacedata.first;
Object *obedit= CTX_data_edit_object(C);
- Mesh *me, *tme;
- Curve *cu;
-/* BezTriple *bezt;
- BPoint *bp; */
- Nurb *nu, *nu1;
- float cent[3], centn[3], min[3], max[3], omat[3][3];
- int a, total= 0;
- int centermode = RNA_enum_get(op->ptr, "type");
+ Object *tob;
+ float cursor[3], cent[3], cent_neg[3], centn[3], min[3], max[3];
+ int centermode = RNA_enum_get(op->ptr, "type");
+ int around = RNA_enum_get(op->ptr, "center"); /* initialized from v3d->around */
+
/* keep track of what is changed */
int tot_change=0, tot_lib_error=0, tot_multiuser_arm_error=0;
- MVert *mvert;
- if(scene->id.lib || v3d==NULL){
- BKE_report(op->reports, RPT_ERROR, "Operation cannot be performed on Lib data");
- return OPERATOR_CANCELLED;
- }
- if (obedit && centermode > 0) {
+ if (obedit && centermode != GEOMETRY_TO_ORIGIN) {
BKE_report(op->reports, RPT_ERROR, "Operation cannot be performed in EditMode");
return OPERATOR_CANCELLED;
- }
- cent[0]= cent[1]= cent[2]= 0.0;
-
+ }
+ else {
+ /* get the view settings if 'around' isnt set and the view is available */
+ View3D *v3d= CTX_wm_view3d(C);
+ copy_v3_v3(cursor, give_cursor(scene, v3d));
+ if(v3d && !RNA_property_is_set(op->ptr, "around"))
+ around= v3d->around;
+ }
+ zero_v3(cent);
+
if(obedit) {
- INIT_MINMAX(min, max);
-
- if(obedit->type==OB_MESH) {
+ INIT_MINMAX(min, max);
+
+ if(obedit->type==OB_MESH) {
Mesh *me= obedit->data;
BMEditMesh *em = me->edit_btmesh;
BMVert *eve;
BMIter iter;
-
- BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) {
- if(v3d->around==V3D_CENTROID) {
- total++;
- VECADD(cent, cent, eve->co);
- }
- else {
- DO_MINMAX(eve->co, min, max);
- }
- }
+ int total = 0;
- if(v3d->around==V3D_CENTROID) {
- mul_v3_fl(cent, 1.0f/(float)total);
- }
- else {
- cent[0]= (min[0]+max[0])/2.0f;
- cent[1]= (min[1]+max[1])/2.0f;
- cent[2]= (min[2]+max[2])/2.0f;
+ if(centermode == ORIGIN_TO_CURSOR) {
+ copy_v3_v3(cent, cursor);
+ invert_m4_m4(obedit->imat, obedit->obmat);
+ mul_m4_v3(obedit->imat, cent);
+ } else {
+ BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) {
+ if(around==V3D_CENTROID) {
+ total++;
+ add_v3_v3(cent, eve->co);
+ mul_v3_fl(cent, 1.0f/(float)total);
+ }
+ else {
+ DO_MINMAX(eve->co, min, max);
+ mid_v3_v3v3(cent, min, max);
+ }
+ }
}
BM_ITER(eve, &iter, em->bm, BM_VERTS_OF_MESH, NULL) {
- sub_v3_v3(eve->co, cent);
+ sub_v3_v3(eve->co, cent);
}
-
+
EDBM_RecalcNormals(em);
tot_change++;
DAG_id_flush_update(&obedit->id, OB_RECALC_DATA);
- }
+ }
}
-
+
/* reset flags */
CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) {
ob->flag &= ~OB_DONE;
}
CTX_DATA_END;
-
- for (me= G.main->mesh.first; me; me= me->id.next) {
- me->flag &= ~ME_ISDONE;
+
+ for (tob= bmain->object.first; tob; tob= tob->id.next) {
+ if(tob->data)
+ ((ID *)tob->data)->flag &= ~LIB_DOIT;
+ if(tob->dup_group)
+ ((ID *)tob->dup_group)->flag &= ~LIB_DOIT;
}
-
+
CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) {
if((ob->flag & OB_DONE)==0) {
+ int do_inverse_offset = FALSE;
ob->flag |= OB_DONE;
-
- if(obedit==NULL && (me=get_mesh(ob)) ) {
- if (me->id.lib) {
- tot_lib_error++;
- } else {
- if(centermode==2) {
- VECCOPY(cent, give_cursor(scene, v3d));
- invert_m4_m4(ob->imat, ob->obmat);
- mul_m4_v3(ob->imat, cent);
- } else {
- INIT_MINMAX(min, max);
- mvert= me->mvert;
- for(a=0; a<me->totvert; a++, mvert++) {
- DO_MINMAX(mvert->co, min, max);
- }
-
- cent[0]= (min[0]+max[0])/2.0f;
- cent[1]= (min[1]+max[1])/2.0f;
- cent[2]= (min[2]+max[2])/2.0f;
- }
- mvert= me->mvert;
- for(a=0; a<me->totvert; a++, mvert++) {
- sub_v3_v3(mvert->co, cent);
+ if(centermode == ORIGIN_TO_CURSOR) {
+ copy_v3_v3(cent, cursor);
+ invert_m4_m4(ob->imat, ob->obmat);
+ mul_m4_v3(ob->imat, cent);
+ }
+
+ if(ob->data == NULL) {
+ /* special support for dupligroups */
+ if((ob->transflag & OB_DUPLIGROUP) && ob->dup_group && (ob->dup_group->id.flag & LIB_DOIT)==0) {
+ if(ob->dup_group->id.lib) {
+ tot_lib_error++;
}
-
- if (me->key) {
- KeyBlock *kb;
- for (kb=me->key->block.first; kb; kb=kb->next) {
- float *fp= kb->data;
-
- for (a=0; a<kb->totelem; a++, fp+=3) {
- sub_v3_v3(fp, cent);
- }
+ else {
+ if(centermode == ORIGIN_TO_CURSOR) { /* done */ }
+ else {
+ /* only bounds support */
+ INIT_MINMAX(min, max);
+ minmax_object_duplis(scene, ob, min, max);
+ mid_v3_v3v3(cent, min, max);
+ invert_m4_m4(ob->imat, ob->obmat);
+ mul_m4_v3(ob->imat, cent);
}
- }
-
- me->flag |= ME_ISDONE;
-
- if(centermode) {
- copy_m3_m4(omat, ob->obmat);
-
- VECCOPY(centn, cent);
- mul_m3_v3(omat, centn);
- ob->loc[0]+= centn[0];
- ob->loc[1]+= centn[1];
- ob->loc[2]+= centn[2];
- where_is_object(scene, ob);
- ignore_parent_tx(bmain, scene, ob);
-
- /* other users? */
- CTX_DATA_BEGIN(C, Object*, ob_other, selected_editable_objects) {
- if((ob_other->flag & OB_DONE)==0) {
- tme= get_mesh(ob_other);
-
- if(tme==me) {
-
- ob_other->flag |= OB_DONE;
- ob_other->recalc= OB_RECALC_OB|OB_RECALC_DATA;
-
- copy_m3_m4(omat, ob_other->obmat);
- VECCOPY(centn, cent);
- mul_m3_v3(omat, centn);
- ob_other->loc[0]+= centn[0];
- ob_other->loc[1]+= centn[1];
- ob_other->loc[2]+= centn[2];
-
- where_is_object(scene, ob_other);
- ignore_parent_tx(bmain, scene, ob_other);
-
- if(tme && (tme->flag & ME_ISDONE)==0) {
- mvert= tme->mvert;
- for(a=0; a<tme->totvert; a++, mvert++) {
- sub_v3_v3(mvert->co, cent);
- }
-
- if (tme->key) {
- KeyBlock *kb;
- for (kb=tme->key->block.first; kb; kb=kb->next) {
- float *fp= kb->data;
-
- for (a=0; a<kb->totelem; a++, fp+=3) {
- sub_v3_v3(fp, cent);
- }
- }
- }
-
- tme->flag |= ME_ISDONE;
- }
- }
- }
- }
- CTX_DATA_END;
+ add_v3_v3(ob->dup_group->dupli_ofs, cent);
+
+ tot_change++;
+ ob->dup_group->id.flag |= LIB_DOIT;
+ do_inverse_offset= TRUE;
}
- tot_change++;
}
}
+ else if (((ID *)ob->data)->lib) {
+ tot_lib_error++;
+ }
+
+ if(obedit==NULL && ob->type==OB_MESH) {
+ Mesh *me= ob->data;
+
+ if(centermode == ORIGIN_TO_CURSOR) { /* done */ }
+ else if(around==V3D_CENTROID) { mesh_center_median(me, cent); }
+ else { mesh_center_bounds(me, cent); }
+
+ negate_v3_v3(cent_neg, cent);
+ mesh_translate(me, cent_neg, 1);
+
+ tot_change++;
+ me->id.flag |= LIB_DOIT;
+ do_inverse_offset= TRUE;
+ }
else if (ELEM(ob->type, OB_CURVE, OB_SURF)) {
-
- /* weak code here... (ton) */
- if(obedit==ob) {
- ListBase *editnurb= curve_get_editcurve(obedit);
+ Curve *cu= ob->data;
- nu1= editnurb->first;
- cu= obedit->data;
- }
- else {
- cu= ob->data;
- nu1= cu->nurb.first;
- }
-
- if (cu->id.lib) {
- tot_lib_error++;
- } else {
- if(centermode==2) {
- VECCOPY(cent, give_cursor(scene, v3d));
- invert_m4_m4(ob->imat, ob->obmat);
- mul_m4_v3(ob->imat, cent);
-
- /* don't allow Z change if curve is 2D */
- if( !( cu->flag & CU_3D ) )
- cent[2] = 0.0;
- }
- else {
- INIT_MINMAX(min, max);
-
- nu= nu1;
- while(nu) {
- minmaxNurb(nu, min, max);
- nu= nu->next;
- }
-
- cent[0]= (min[0]+max[0])/2.0f;
- cent[1]= (min[1]+max[1])/2.0f;
- cent[2]= (min[2]+max[2])/2.0f;
- }
-
- nu= nu1;
- while(nu) {
- if(nu->type == CU_BEZIER) {
- a= nu->pntsu;
- while (a--) {
- sub_v3_v3(nu->bezt[a].vec[0], cent);
- sub_v3_v3(nu->bezt[a].vec[1], cent);
- sub_v3_v3(nu->bezt[a].vec[2], cent);
- }
- }
- else {
- a= nu->pntsu*nu->pntsv;
- while (a--)
- sub_v3_v3(nu->bp[a].vec, cent);
- }
- nu= nu->next;
- }
-
- if(centermode && obedit==NULL) {
- copy_m3_m4(omat, ob->obmat);
-
- mul_m3_v3(omat, cent);
- ob->loc[0]+= cent[0];
- ob->loc[1]+= cent[1];
- ob->loc[2]+= cent[2];
-
- where_is_object(scene, ob);
- ignore_parent_tx(bmain, scene, ob);
- }
-
- tot_change++;
- if(obedit) {
- if (centermode==0) {
- DAG_id_flush_update(&obedit->id, OB_RECALC_DATA);
- }
- break;
+ if(centermode == ORIGIN_TO_CURSOR) { /* done */ }
+ else if(around==V3D_CENTROID) { curve_center_median(cu, cent); }
+ else { curve_center_bounds(cu, cent); }
+
+ /* don't allow Z change if curve is 2D */
+ if((ob->type == OB_CURVE) && !(cu->flag & CU_3D))
+ cent[2] = 0.0;
+
+ negate_v3_v3(cent_neg, cent);
+ curve_translate(cu, cent_neg, 1);
+
+ tot_change++;
+ cu->id.flag |= LIB_DOIT;
+ do_inverse_offset= TRUE;
+
+ if(obedit) {
+ if (centermode == GEOMETRY_TO_ORIGIN) {
+ DAG_id_flush_update(&obedit->id, OB_RECALC_DATA);
}
+ break;
}
}
else if(ob->type==OB_FONT) {
/* get from bb */
-
- cu= ob->data;
-
- if(cu->bb==NULL) {
+
+ Curve *cu= ob->data;
+
+ if(cu->bb==NULL && (centermode != ORIGIN_TO_CURSOR)) {
/* do nothing*/
- } else if (cu->id.lib) {
- tot_lib_error++;
- } else {
- cu->xof= -0.5f*( cu->bb->vec[4][0] - cu->bb->vec[0][0]);
- cu->yof= -0.5f -0.5f*( cu->bb->vec[0][1] - cu->bb->vec[2][1]); /* extra 0.5 is the height o above line */
-
- /* not really ok, do this better once! */
- cu->xof /= cu->fsize;
- cu->yof /= cu->fsize;
+ }
+ else {
+ if(centermode == ORIGIN_TO_CURSOR) {
+ /* done */
+ }
+ else {
+ cent[0]= 0.5f * ( cu->bb->vec[4][0] + cu->bb->vec[0][0]);
+ cent[1]= 0.5f * ( cu->bb->vec[0][1] + cu->bb->vec[2][1]) - 0.5f; /* extra 0.5 is the height o above line */
+ }
+
+ cent[2]= 0.0f;
+
+ cu->xof= cu->xof - (cent[0] / cu->fsize);
+ cu->yof= cu->yof - (cent[1] / cu->fsize);
tot_change++;
+ cu->id.flag |= LIB_DOIT;
+ do_inverse_offset= TRUE;
}
}
else if(ob->type==OB_ARMATURE) {
bArmature *arm = ob->data;
-
- if (arm->id.lib) {
- tot_lib_error++;
- } else if(ID_REAL_USERS(arm) > 1) {
+
+ if(ID_REAL_USERS(arm) > 1) {
/*BKE_report(op->reports, RPT_ERROR, "Can't apply to a multi user armature");
return;*/
tot_multiuser_arm_error++;
- } else {
- /* Function to recenter armatures in editarmature.c
+ }
+ else {
+ /* Function to recenter armatures in editarmature.c
* Bone + object locations are handled there.
*/
- docenter_armature(scene, v3d, ob, centermode);
+ docenter_armature(scene, ob, cursor, centermode, around);
+
tot_change++;
-
+ arm->id.flag |= LIB_DOIT;
+ /* do_inverse_offset= TRUE; */ /* docenter_armature() handles this */
+
where_is_object(scene, ob);
ignore_parent_tx(bmain, scene, ob);
-
- if(obedit)
+
+ if(obedit)
break;
}
}
- ob->recalc= OB_RECALC_OB|OB_RECALC_DATA;
+
+ /* offset other selected objects */
+ if(do_inverse_offset && (centermode != GEOMETRY_TO_ORIGIN)) {
+ /* was the object data modified
+ * note: the functions above must set 'cent' */
+ copy_v3_v3(centn, cent);
+ mul_mat3_m4_v3(ob->obmat, centn); /* ommit translation part */
+ add_v3_v3(ob->loc, centn);
+
+ where_is_object(scene, ob);
+ ignore_parent_tx(bmain, scene, ob);
+
+ /* other users? */
+ CTX_DATA_BEGIN(C, Object*, ob_other, selected_editable_objects) {
+ if( (ob_other->flag & OB_DONE)==0 &&
+ ( (ob->data && (ob->data == ob_other->data)) ||
+ (ob->dup_group==ob_other->dup_group && (ob->transflag|ob_other->transflag) & OB_DUPLIGROUP) )
+ ) {
+ ob_other->flag |= OB_DONE;
+ ob_other->recalc= OB_RECALC_OB|OB_RECALC_DATA;
+
+ copy_v3_v3(centn, cent);
+ mul_mat3_m4_v3(ob_other->obmat, centn); /* ommit translation part */
+ add_v3_v3(ob_other->loc, centn);
+
+ where_is_object(scene, ob_other);
+ ignore_parent_tx(bmain, scene, ob_other);
+ }
+ }
+ CTX_DATA_END;
+ }
}
}
CTX_DATA_END;
-
+
+ for (tob= bmain->object.first; tob; tob= tob->id.next) {
+ if(tob->data && (((ID *)tob->data)->flag & LIB_DOIT)) {
+ tob->recalc= OB_RECALC_OB|OB_RECALC_DATA;
+ }
+ }
+
if (tot_change) {
- DAG_ids_flush_update(0);
+ DAG_ids_flush_update(bmain, 0);
WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
}
-
- /* Warn if any errors occured */
+
+ /* Warn if any errors occurred */
if (tot_lib_error+tot_multiuser_arm_error) {
- BKE_reportf(op->reports, RPT_WARNING, "%i Object(s) Not Centered, %i Changed:",tot_lib_error+tot_multiuser_arm_error, tot_change);
+ BKE_reportf(op->reports, RPT_WARNING, "%i Object(s) Not Centered, %i Changed:",tot_lib_error+tot_multiuser_arm_error, tot_change);
if (tot_lib_error)
BKE_reportf(op->reports, RPT_WARNING, "|%i linked library objects",tot_lib_error);
if (tot_multiuser_arm_error)
BKE_reportf(op->reports, RPT_WARNING, "|%i multiuser armature object(s)",tot_multiuser_arm_error);
}
-
+
return OPERATOR_FINISHED;
}
void OBJECT_OT_origin_set(wmOperatorType *ot)
{
+ static EnumPropertyItem prop_set_center_types[] = {
+ {GEOMETRY_TO_ORIGIN, "GEOMETRY_ORIGIN", 0, "Geometry to Origin", "Move object geometry to object origin"},
+ {ORIGIN_TO_GEOMETRY, "ORIGIN_GEOMETRY", 0, "Origin to Geometry", "Move object origin to center of object geometry"},
+ {ORIGIN_TO_CURSOR, "ORIGIN_CURSOR", 0, "Origin to 3D Cursor", "Move object origin to position of the 3d cursor"},
+ {0, NULL, 0, NULL, NULL}
+ };
+
+ static EnumPropertyItem prop_set_bounds_types[] = {
+ {V3D_CENTROID, "MEDIAN", 0, "Median Center", ""},
+ {V3D_CENTER, "BOUNDS", 0, "Bounds Center", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
+
/* identifiers */
ot->name= "Set Origin";
ot->description = "Set the object's origin, by either moving the data, or set to center of data, or use 3d cursor";
@@ -1039,12 +993,12 @@ void OBJECT_OT_origin_set(wmOperatorType *ot)
ot->invoke= WM_menu_invoke;
ot->exec= object_origin_set_exec;
- ot->poll= ED_operator_view3d_active;
+ ot->poll= ED_operator_scene_editable;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
ot->prop= RNA_def_enum(ot->srna, "type", prop_set_center_types, 0, "Type", "");
-
+ RNA_def_enum(ot->srna, "center", prop_set_bounds_types, V3D_CENTROID, "Center", "");
}
diff --git a/source/blender/editors/object/object_vgroup.c b/source/blender/editors/object/object_vgroup.c
index ea118602c6c..43de351e4c1 100644
--- a/source/blender/editors/object/object_vgroup.c
+++ b/source/blender/editors/object/object_vgroup.c
@@ -51,13 +51,8 @@
#include "BKE_customdata.h"
#include "BKE_deform.h"
#include "BKE_depsgraph.h"
-#include "BKE_DerivedMesh.h"
-#include "BKE_displist.h"
#include "BKE_global.h"
-#include "BKE_lattice.h"
#include "BKE_mesh.h"
-#include "BKE_paint.h"
-#include "BKE_utildefines.h"
#include "BKE_tessmesh.h"
#include "BKE_report.h"
@@ -80,7 +75,7 @@ static Lattice *vgroup_edit_lattice(Object *ob)
{
if(ob->type==OB_LATTICE) {
Lattice *lt= ob->data;
- return (lt->editlatt)? lt->editlatt: lt;
+ return (lt->editlatt)? lt->editlatt->latt: lt;
}
return NULL;
@@ -177,7 +172,7 @@ int ED_vgroup_give_parray(ID *id, MDeformVert ***dvert_arr, int *dvert_tot)
int i=0;
Lattice *lt= (Lattice *)id;
- lt= (lt->editlatt)? lt->editlatt: lt;
+ lt= (lt->editlatt)? lt->editlatt->latt: lt;
*dvert_tot= lt->pntsu*lt->pntsv*lt->pntsw;
*dvert_arr= MEM_mallocN(sizeof(void*)*(*dvert_tot), "vgroup parray from me");
@@ -211,7 +206,7 @@ int ED_vgroup_give_array(ID *id, MDeformVert **dvert_arr, int *dvert_tot)
case ID_LT:
{
Lattice *lt= (Lattice *)id;
- lt= (lt->editlatt)? lt->editlatt: lt;
+ lt= (lt->editlatt)? lt->editlatt->latt: lt;
*dvert_arr= lt->dvert;
*dvert_tot= lt->pntsu*lt->pntsv*lt->pntsw;
return TRUE;
@@ -541,18 +536,8 @@ float ED_vgroup_vert_weight(Object *ob, bDeformGroup *dg, int vertnum)
}
void ED_vgroup_select_by_name(Object *ob, char *name)
-{
- bDeformGroup *curdef;
- int actdef= 1;
-
- for(curdef = ob->defbase.first; curdef; curdef=curdef->next, actdef++){
- if(!strcmp(curdef->name, name)) {
- ob->actdef= actdef;
- return;
- }
- }
-
- ob->actdef= 0; // this signals on painting to create a new one, if a bone in posemode is selected */
+{ /* note: ob->actdef==0 signals on painting to create a new one, if a bone in posemode is selected */
+ ob->actdef= defgroup_name_index(ob, name) + 1;
}
/********************** Operator Implementations *********************/
diff --git a/source/blender/editors/physics/CMakeLists.txt b/source/blender/editors/physics/CMakeLists.txt
index ebe3f913508..be826654311 100644
--- a/source/blender/editors/physics/CMakeLists.txt
+++ b/source/blender/editors/physics/CMakeLists.txt
@@ -32,9 +32,9 @@ SET(INC
../../../../intern/guardedalloc
)
-IF(NOT WITH_ELBEEM)
+IF(NOT WITH_FLUID)
ADD_DEFINITIONS(-DDISABLE_ELBEEM)
-ENDIF(NOT WITH_ELBEEM)
+ENDIF(NOT WITH_FLUID)
IF(WITH_OPENMP)
ADD_DEFINITIONS(-DPARALLEL=1)
diff --git a/source/blender/editors/physics/Makefile b/source/blender/editors/physics/Makefile
index e9260b66087..9ffc3a5b372 100644
--- a/source/blender/editors/physics/Makefile
+++ b/source/blender/editors/physics/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/physics/particle_boids.c b/source/blender/editors/physics/particle_boids.c
index 37de0d8f873..a18890881a8 100644
--- a/source/blender/editors/physics/particle_boids.c
+++ b/source/blender/editors/physics/particle_boids.c
@@ -35,6 +35,7 @@
#include "BKE_boids.h"
#include "BKE_context.h"
#include "BKE_depsgraph.h"
+#include "BKE_main.h"
#include "BKE_particle.h"
#include "BLI_listbase.h"
@@ -99,6 +100,7 @@ void BOID_OT_rule_add(wmOperatorType *ot)
}
static int rule_del_exec(bContext *C, wmOperator *op)
{
+ Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem);
ParticleSystem *psys= ptr.data;
@@ -125,7 +127,7 @@ static int rule_del_exec(bContext *C, wmOperator *op)
if(rule)
rule->flag |= BOIDRULE_CURRENT;
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
DAG_id_flush_update(&psys->part->id, OB_RECALC_DATA|PSYS_RECALC_RESET);
WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob);
@@ -266,6 +268,7 @@ void BOID_OT_state_add(wmOperatorType *ot)
}
static int state_del_exec(bContext *C, wmOperator *op)
{
+ Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem);
ParticleSystem *psys= ptr.data;
@@ -297,7 +300,7 @@ static int state_del_exec(bContext *C, wmOperator *op)
state->flag |= BOIDSTATE_CURRENT;
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
DAG_id_flush_update(&psys->part->id, OB_RECALC_DATA|PSYS_RECALC_RESET);
WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob);
diff --git a/source/blender/editors/physics/particle_edit.c b/source/blender/editors/physics/particle_edit.c
index da0034ac2f9..d3f9926cf8c 100644
--- a/source/blender/editors/physics/particle_edit.c
+++ b/source/blender/editors/physics/particle_edit.c
@@ -2098,6 +2098,7 @@ static void remove_tagged_keys(Scene *scene, Object *ob, ParticleSystem *psys)
ParticleData *pa;
HairKey *hkey, *nhkey, *new_hkeys=0;
POINT_P; KEY_K;
+ PTCacheEditKey *nkey, *new_keys;
ParticleSystemModifierData *psmd;
short new_totkey;
@@ -2133,9 +2134,10 @@ static void remove_tagged_keys(Scene *scene, Object *ob, ParticleSystem *psys)
}
if(new_totkey != pa->totkey) {
- hkey= pa->hair;
nhkey= new_hkeys= MEM_callocN(new_totkey*sizeof(HairKey), "HairKeys");
+ nkey= new_keys= MEM_callocN(new_totkey*sizeof(PTCacheEditKey), "particle edit keys");
+ hkey= pa->hair;
LOOP_KEYS {
while(key->flag & PEK_TAG && hkey < pa->hair + pa->totkey) {
key++;
@@ -2144,29 +2146,36 @@ static void remove_tagged_keys(Scene *scene, Object *ob, ParticleSystem *psys)
if(hkey < pa->hair + pa->totkey) {
VECCOPY(nhkey->co, hkey->co);
+ nhkey->editflag = hkey->editflag;
nhkey->time= hkey->time;
nhkey->weight= hkey->weight;
+
+ nkey->co= nhkey->co;
+ nkey->time= &nhkey->time;
+ /* these can be copied from old edit keys */
+ nkey->flag = key->flag;
+ nkey->ftime = key->ftime;
+ nkey->length = key->length;
+ VECCOPY(nkey->world_co, key->world_co);
}
- hkey++;
+ nkey++;
nhkey++;
+ hkey++;
}
+
if(pa->hair)
MEM_freeN(pa->hair);
+
+ if(point->keys)
+ MEM_freeN(point->keys);
pa->hair= new_hkeys;
+ point->keys= new_keys;
point->totkey= pa->totkey= new_totkey;
- if(point->keys)
- MEM_freeN(point->keys);
- key= point->keys= MEM_callocN(new_totkey*sizeof(PTCacheEditKey), "particle edit keys");
-
- hkey = pa->hair;
- LOOP_KEYS {
- key->co= hkey->co;
- key->time= &hkey->time;
- hkey++;
- }
+ /* flag for recalculating length */
+ point->flag |= PEP_EDIT_RECALC;
}
}
}
@@ -3327,7 +3336,7 @@ static void brush_edit_apply(bContext *C, wmOperator *op, PointerRNA *itemptr)
RNA_float_get_array(itemptr, "mouse", mousef);
mouse[0] = mousef[0];
mouse[1] = mousef[1];
- flip= RNA_boolean_get(itemptr, "flip");
+ flip= RNA_boolean_get(itemptr, "pen_flip");
if(bedit->first) {
bedit->lastmouse[0]= mouse[0];
diff --git a/source/blender/editors/physics/particle_object.c b/source/blender/editors/physics/particle_object.c
index bb30d30fd0e..4885a8b04ec 100644
--- a/source/blender/editors/physics/particle_object.c
+++ b/source/blender/editors/physics/particle_object.c
@@ -166,7 +166,7 @@ static int new_particle_settings_exec(bContext *C, wmOperator *op)
psys_check_boid_data(psys);
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
@@ -193,6 +193,7 @@ void PARTICLE_OT_new(wmOperatorType *ot)
static int new_particle_target_exec(bContext *C, wmOperator *op)
{
+ Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem);
ParticleSystem *psys= ptr.data;
@@ -214,7 +215,7 @@ static int new_particle_target_exec(bContext *C, wmOperator *op)
BLI_addtail(&psys->targets, pt);
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
@@ -238,6 +239,7 @@ void PARTICLE_OT_new_target(wmOperatorType *ot)
static int remove_particle_target_exec(bContext *C, wmOperator *op)
{
+ Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem);
ParticleSystem *psys= ptr.data;
@@ -262,7 +264,7 @@ static int remove_particle_target_exec(bContext *C, wmOperator *op)
if(pt)
pt->flag |= PTARGET_CURRENT;
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
diff --git a/source/blender/editors/physics/physics_fluid.c b/source/blender/editors/physics/physics_fluid.c
index 23f604d8c12..f411f92d395 100644
--- a/source/blender/editors/physics/physics_fluid.c
+++ b/source/blender/editors/physics/physics_fluid.c
@@ -77,7 +77,6 @@
#include "LBM_fluidsim.h"
-#include "BIF_gl.h"
#include "ED_screen.h"
@@ -563,7 +562,6 @@ static void export_fluid_objects(ListBase *fobjects, Scene *scene, int length)
if(verts) MEM_freeN(verts);
if(tris) MEM_freeN(tris);
- if(fsmesh.channelVertices) MEM_freeN(fsmesh.channelVertices);
}
}
diff --git a/source/blender/editors/physics/physics_ops.c b/source/blender/editors/physics/physics_ops.c
index 28839693e2c..2b7f8e9d5a2 100644
--- a/source/blender/editors/physics/physics_ops.c
+++ b/source/blender/editors/physics/physics_ops.c
@@ -100,7 +100,6 @@ static void keymap_particle(wmKeyConfig *keyconf)
WM_keymap_add_item(keymap, "PARTICLE_OT_delete", XKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "PARTICLE_OT_delete", DELKEY, KM_PRESS, 0, 0);
- WM_keymap_add_item(keymap, "PARTICLE_OT_delete", BACKSPACEKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "PARTICLE_OT_reveal", HKEY, KM_PRESS, KM_ALT, 0);
WM_keymap_add_item(keymap, "PARTICLE_OT_hide", HKEY, KM_PRESS, 0, 0);
@@ -115,7 +114,7 @@ static void keymap_particle(wmKeyConfig *keyconf)
WM_keymap_add_item(keymap, "PARTICLE_OT_weight_set", KKEY, KM_PRESS, KM_SHIFT, 0);
- ED_object_generic_keymap(keyconf, keymap, 1);
+ ED_object_generic_keymap(keyconf, keymap, 2);
}
/******************************* boids *************************************/
diff --git a/source/blender/editors/physics/physics_pointcache.c b/source/blender/editors/physics/physics_pointcache.c
index 8e53e3c6f50..35f86a49aa7 100644
--- a/source/blender/editors/physics/physics_pointcache.c
+++ b/source/blender/editors/physics/physics_pointcache.c
@@ -33,15 +33,15 @@
#include "DNA_scene_types.h"
-#include "BKE_anim.h"
#include "BKE_context.h"
+#include "BKE_global.h"
+#include "BKE_main.h"
+#include "BKE_modifier.h"
#include "BKE_particle.h"
+#include "BKE_pointcache.h"
#include "BKE_report.h"
#include "BKE_scene.h"
#include "BKE_utildefines.h"
-#include "BKE_pointcache.h"
-#include "BKE_global.h"
-#include "BKE_modifier.h"
#include "BLI_blenlib.h"
@@ -88,11 +88,12 @@ void bake_console_progress_end(void *arg)
static int ptcache_bake_all_exec(bContext *C, wmOperator *op)
{
+ Main *bmain = CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
wmWindow *win = G.background ? NULL : CTX_wm_window(C);
PTCacheBaker baker;
-
+ baker.main = bmain;
baker.scene = scene;
baker.pid = NULL;
baker.bake = RNA_boolean_get(op->ptr, "bake");
@@ -173,6 +174,7 @@ void PTCACHE_OT_free_bake_all(wmOperatorType *ot)
}
static int ptcache_bake_exec(bContext *C, wmOperator *op)
{
+ Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
wmWindow *win = G.background ? NULL : CTX_wm_window(C);
PointerRNA ptr= CTX_data_pointer_get_type(C, "point_cache", &RNA_PointCache);
@@ -189,6 +191,7 @@ static int ptcache_bake_exec(bContext *C, wmOperator *op)
break;
}
+ baker.main = bmain;
baker.scene = scene;
baker.pid = pid;
baker.bake = RNA_boolean_get(op->ptr, "bake");
diff --git a/source/blender/editors/render/Makefile b/source/blender/editors/render/Makefile
index 85b70172e0a..510e5372e22 100644
--- a/source/blender/editors/render/Makefile
+++ b/source/blender/editors/render/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c
index 7110c3aa7a7..083202e5a03 100644
--- a/source/blender/editors/render/render_internal.c
+++ b/source/blender/editors/render/render_internal.c
@@ -38,7 +38,6 @@
#include "DNA_scene_types.h"
#include "BKE_blender.h"
-#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_image.h"
@@ -46,9 +45,7 @@
#include "BKE_main.h"
#include "BKE_multires.h"
#include "BKE_report.h"
-#include "BKE_scene.h"
-#include "BKE_screen.h"
-#include "BKE_utildefines.h"
+#include "BKE_sequencer.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -403,6 +400,7 @@ static int screen_render_exec(bContext *C, wmOperator *op)
Render *re= RE_NewRender(scene->id.name);
Image *ima;
View3D *v3d= CTX_wm_view3d(C);
+ Main *mainp= CTX_data_main(C);
int lay= (v3d)? v3d->lay: scene->lay;
if(re==NULL) {
@@ -417,10 +415,16 @@ static int screen_render_exec(bContext *C, wmOperator *op)
BKE_image_signal(ima, NULL, IMA_SIGNAL_FREE);
BKE_image_backup_render(scene, ima);
+ /* cleanup sequencer caches before starting user triggered render.
+ otherwise, invalidated cache entries can make their way into
+ the output rendering. We can't put that into RE_BlenderFrame,
+ since sequence rendering can call that recursively... (peter) */
+ seq_stripelem_cache_cleanup();
+
if(RNA_boolean_get(op->ptr, "animation"))
- RE_BlenderAnim(re, scene, lay, scene->r.sfra, scene->r.efra, scene->r.frame_step, op->reports);
+ RE_BlenderAnim(re, mainp, scene, lay, scene->r.sfra, scene->r.efra, scene->r.frame_step, op->reports);
else
- RE_BlenderFrame(re, scene, NULL, lay, scene->r.cfra);
+ RE_BlenderFrame(re, mainp, scene, NULL, lay, scene->r.cfra);
// no redraw needed, we leave state as we entered it
ED_update_for_newframe(C, 1);
@@ -431,6 +435,7 @@ static int screen_render_exec(bContext *C, wmOperator *op)
}
typedef struct RenderJob {
+ Main *main;
Scene *scene;
Render *re;
wmWindow *win;
@@ -555,23 +560,24 @@ static void image_rect_update(void *rjv, RenderResult *rr, volatile rcti *renrec
static void render_startjob(void *rjv, short *stop, short *do_update, float *progress)
{
RenderJob *rj= rjv;
-// Main *mainp= BKE_undo_get_main(&rj->scene);
rj->stop= stop;
rj->do_update= do_update;
rj->progress= progress;
if(rj->anim)
- RE_BlenderAnim(rj->re, rj->scene, rj->lay, rj->scene->r.sfra, rj->scene->r.efra, rj->scene->r.frame_step, rj->reports);
+ RE_BlenderAnim(rj->re, rj->main, rj->scene, rj->lay, rj->scene->r.sfra, rj->scene->r.efra, rj->scene->r.frame_step, rj->reports);
else
- RE_BlenderFrame(rj->re, rj->scene, rj->srl, rj->lay, rj->scene->r.cfra);
-
-// if(mainp)
-// free_main(mainp);
+ RE_BlenderFrame(rj->re, rj->main, rj->scene, rj->srl, rj->lay, rj->scene->r.cfra);
}
static void render_endjob(void *rjv)
{
+ RenderJob *rj= rjv;
+
+ if(rj->main != G.main)
+ free_main(rj->main);
+
/* XXX render stability hack */
G.rendering = 0;
WM_main_add_notifier(NC_WINDOW, NULL);
@@ -610,6 +616,7 @@ static int screen_render_modal(bContext *C, wmOperator *op, wmEvent *event)
static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
/* new render clears all callbacks */
+ Main *mainp;
Scene *scene= CTX_data_scene(C);
SceneRenderLayer *srl=NULL;
bScreen *screen= CTX_wm_screen(C);
@@ -626,6 +633,14 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event)
/* stop all running jobs, currently previews frustrate Render */
WM_jobs_stop_all(CTX_wm_manager(C));
+ /* get main */
+ if(G.rt == 101) {
+ /* thread-safety experiment, copy main from the undo buffer */
+ mainp= BKE_undo_get_main(&scene);
+ }
+ else
+ mainp= CTX_data_main(C);
+
/* cancel animation playback */
if (screen->animtimer)
ED_screen_animation_play(C, 0, 0);
@@ -636,6 +651,12 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event)
/* flush multires changes (for sculpt) */
multires_force_render_update(CTX_data_active_object(C));
+ /* cleanup sequencer caches before starting user triggered render.
+ otherwise, invalidated cache entries can make their way into
+ the output rendering. We can't put that into RE_BlenderFrame,
+ since sequence rendering can call that recursively... (peter) */
+ seq_stripelem_cache_cleanup();
+
/* get editmode results */
ED_object_exit_editmode(C, 0); /* 0 = does not exit editmode */
@@ -655,7 +676,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event)
RNA_string_get(op->ptr, "layer", rl_name);
RNA_string_get(op->ptr, "scene", scene_name);
- scn = (Scene *)BLI_findstring(&CTX_data_main(C)->scene, scene_name, offsetof(ID, name) + 2);
+ scn = (Scene *)BLI_findstring(&mainp->scene, scene_name, offsetof(ID, name) + 2);
rl = (SceneRenderLayer *)BLI_findstring(&scene->r.layers, rl_name, offsetof(SceneRenderLayer, name));
if (scn && rl) {
@@ -666,6 +687,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event)
/* job custom data */
rj= MEM_callocN(sizeof(RenderJob), "render job");
+ rj->main= mainp;
rj->scene= scene;
rj->win= CTX_wm_window(C);
rj->srl = srl;
diff --git a/source/blender/editors/render/render_opengl.c b/source/blender/editors/render/render_opengl.c
index 5881d50c309..c0e6ea66bc4 100644
--- a/source/blender/editors/render/render_opengl.c
+++ b/source/blender/editors/render/render_opengl.c
@@ -40,19 +40,11 @@
#include "DNA_scene_types.h"
#include "DNA_object_types.h"
-#include "BKE_blender.h"
-#include "BKE_object.h"
#include "BKE_context.h"
-#include "BKE_global.h"
#include "BKE_image.h"
-#include "BKE_library.h"
#include "BKE_main.h"
-#include "BKE_mesh.h"
-#include "BKE_multires.h"
#include "BKE_report.h"
#include "BKE_scene.h"
-#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "BKE_writeavi.h"
#include "WM_api.h"
@@ -241,6 +233,7 @@ static int screen_opengl_render_init(bContext *C, wmOperator *op)
static void screen_opengl_render_end(bContext *C, OGLRender *oglrender)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= oglrender->scene;
if(oglrender->mh) {
@@ -250,7 +243,7 @@ static void screen_opengl_render_end(bContext *C, OGLRender *oglrender)
if(oglrender->timer) { /* exec will not have a timer */
scene->r.cfra= oglrender->cfrao;
- scene_update_for_newframe(scene, screen_opengl_layers(oglrender));
+ scene_update_for_newframe(bmain, scene, screen_opengl_layers(oglrender));
WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), oglrender->timer);
}
@@ -297,6 +290,7 @@ static int screen_opengl_render_anim_initialize(bContext *C, wmOperator *op)
}
static int screen_opengl_render_anim_step(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
OGLRender *oglrender= op->customdata;
Scene *scene= oglrender->scene;
ImBuf *ibuf;
@@ -316,11 +310,11 @@ static int screen_opengl_render_anim_step(bContext *C, wmOperator *op)
if(lay & 0xFF000000)
lay &= 0xFF000000;
- scene_update_for_newframe(scene, lay);
+ scene_update_for_newframe(bmain, scene, lay);
CFRA++;
}
- scene_update_for_newframe(scene, screen_opengl_layers(oglrender));
+ scene_update_for_newframe(bmain, scene, screen_opengl_layers(oglrender));
if(view_context) {
if(oglrender->rv3d->persp==RV3D_CAMOB && oglrender->v3d->camera && oglrender->v3d->scenelock) {
diff --git a/source/blender/editors/render/render_preview.c b/source/blender/editors/render/render_preview.c
index ae2462b95f8..71bee8c5b08 100644
--- a/source/blender/editors/render/render_preview.c
+++ b/source/blender/editors/render/render_preview.c
@@ -54,6 +54,7 @@
#include "DNA_space_types.h"
#include "DNA_view3d_types.h"
#include "DNA_scene_types.h"
+#include "DNA_brush_types.h"
#include "DNA_screen_types.h"
#include "BKE_context.h"
@@ -63,12 +64,8 @@
#include "BKE_icons.h"
#include "BKE_library.h"
#include "BKE_main.h"
-#include "BKE_texture.h"
#include "BKE_material.h"
#include "BKE_node.h"
-#include "BKE_world.h"
-#include "BKE_texture.h"
-#include "BKE_utildefines.h"
#include "IMB_imbuf.h"
#include "IMB_imbuf_types.h"
@@ -100,6 +97,47 @@
static int qtest() {return 0;}
/* XXX */
+ImBuf* get_brush_icon(Brush *brush)
+{
+ static const int flags = IB_rect|IB_multilayer|IB_metadata;
+
+ char path[240];
+ char *folder;
+
+ if (!(brush->icon_imbuf)) {
+ if (brush->flag & BRUSH_CUSTOM_ICON) {
+
+ if (brush->icon_filepath[0]) {
+ // first use the path directly to try and load the file
+
+ BLI_strncpy(path, brush->icon_filepath, sizeof(brush->icon_filepath));
+ BLI_path_abs(path, G.sce);
+
+ brush->icon_imbuf= IMB_loadiffname(path, flags);
+
+ // otherwise lets try to find it in other directories
+ if (!(brush->icon_imbuf)) {
+ folder= BLI_get_folder(BLENDER_DATAFILES, "brushicons");
+
+ path[0]= 0;
+
+ BLI_make_file_string(G.sce, path, folder, brush->icon_filepath);
+
+ if (path[0])
+ brush->icon_imbuf= IMB_loadiffname(path, flags);
+ }
+ }
+ }
+ }
+
+ if (!(brush->icon_imbuf))
+ brush->id.icon_id = 0;
+ else
+ BKE_icon_changed(BKE_icon_getid(&(brush->id)));
+
+ return brush->icon_imbuf;
+}
+
typedef struct ShaderPreview {
/* from wmJob */
void *owner;
@@ -510,8 +548,8 @@ void ED_preview_draw(const bContext *C, void *idp, void *parentp, void *slotp, r
newrect.ymax= rect->ymin;
if(parent) {
- ok = ed_preview_draw_rect(sa, sce, parent, 1, 1, rect, &newrect);
- ok &= ed_preview_draw_rect(sa, sce, id, 1, 0, rect, &newrect);
+ ok = ed_preview_draw_rect(sa, sce, id, 1, 1, rect, &newrect);
+ ok &= ed_preview_draw_rect(sa, sce, parent, 1, 0, rect, &newrect);
}
else
ok = ed_preview_draw_rect(sa, sce, id, 0, 0, rect, &newrect);
@@ -661,7 +699,7 @@ void BIF_view3d_previewrender_clear(ScrArea *sa)
}
/* afterqueue call */
-void BIF_view3d_previewrender(Scene *scene, ScrArea *sa)
+void BIF_view3d_previewrender(Main *bmain, Scene *scene, ScrArea *sa)
{
View3D *v3d= sa->spacedata.first;
RegionView3D *rv3d= NULL; // XXX
@@ -752,7 +790,7 @@ void BIF_view3d_previewrender(Scene *scene, ScrArea *sa)
lay |= v3d->lay;
else lay= v3d->lay;
- RE_Database_FromScene(re, scene, lay, 0); // 0= dont use camera view
+ RE_Database_FromScene(re, bmain, scene, lay, 0); // 0= dont use camera view
rstats= RE_GetStats(re);
if(rstats->convertdone)
@@ -761,7 +799,7 @@ void BIF_view3d_previewrender(Scene *scene, ScrArea *sa)
/* database can have created render-resol data... */
if(rstats->convertdone)
- DAG_scene_flush_update(scene, scene->lay, 0);
+ DAG_scene_flush_update(bmain, scene, scene->lay, 0);
//printf("dbase update\n");
}
@@ -932,7 +970,7 @@ static void shader_preview_render(ShaderPreview *sp, ID *id, int split, int firs
((Camera *)sce->camera->data)->lens *= (float)sp->sizey/(float)sizex;
/* entire cycle for render engine */
- RE_PreviewRender(re, sce);
+ RE_PreviewRender(re, G.main, sce);
((Camera *)sce->camera->data)->lens= oldlens;
@@ -961,8 +999,8 @@ static void shader_preview_startjob(void *customdata, short *stop, short *do_upd
sp->do_update= do_update;
if(sp->parent) {
- shader_preview_render(sp, sp->parent, 1, 1);
- shader_preview_render(sp, sp->id, 1, 0);
+ shader_preview_render(sp, sp->id, 1, 1);
+ shader_preview_render(sp, sp->parent, 1, 0);
}
else
shader_preview_render(sp, sp->id, 0, 0);
@@ -1069,6 +1107,19 @@ static void icon_preview_startjob(void *customdata, short *stop, short *do_updat
*do_update= 1;
}
+ else if(idtype == ID_BR) {
+ Brush *br= (Brush*)id;
+
+ br->icon_imbuf= get_brush_icon(br);
+
+ if(!(br->icon_imbuf) || !(br->icon_imbuf->rect))
+ return;
+
+ memset(sp->pr_rect, 0x888888, sp->sizex*sp->sizey*sizeof(unsigned int));
+ icon_copy_rect(br->icon_imbuf, sp->sizex, sp->sizey, sp->pr_rect);
+
+ *do_update= 1;
+ }
else {
/* re-use shader job */
shader_preview_startjob(customdata, stop, do_update);
@@ -1100,6 +1151,14 @@ static void common_preview_startjob(void *customdata, short *stop, short *do_upd
shader_preview_startjob(customdata, stop, do_update);
}
+static void common_preview_endjob(void *customdata)
+{
+ ShaderPreview *sp= customdata;
+
+ if(sp->id && GS(sp->id->name) == ID_BR)
+ WM_main_add_notifier(NC_BRUSH|NA_EDITED, sp->id);
+}
+
/* exported functions */
void ED_preview_icon_job(const bContext *C, void *owner, ID *id, unsigned int *rect, int sizex, int sizey)
@@ -1122,7 +1181,7 @@ void ED_preview_icon_job(const bContext *C, void *owner, ID *id, unsigned int *r
/* setup job */
WM_jobs_customdata(steve, sp, shader_preview_free);
WM_jobs_timer(steve, 0.1, NC_MATERIAL, NC_MATERIAL);
- WM_jobs_callbacks(steve, common_preview_startjob, NULL, NULL, NULL);
+ WM_jobs_callbacks(steve, common_preview_startjob, NULL, NULL, common_preview_endjob);
WM_jobs_start(CTX_wm_manager(C), steve);
}
diff --git a/source/blender/editors/render/render_shading.c b/source/blender/editors/render/render_shading.c
index f96e82a30f4..27ab8d06b04 100644
--- a/source/blender/editors/render/render_shading.c
+++ b/source/blender/editors/render/render_shading.c
@@ -52,7 +52,6 @@
#include "BKE_report.h"
#include "BKE_scene.h"
#include "BKE_texture.h"
-#include "BKE_utildefines.h"
#include "BKE_world.h"
#include "BKE_tessmesh.h"
@@ -210,6 +209,21 @@ static void image_changed(Main *bmain, Image *ima)
texture_changed(bmain, tex);
}
+static void scene_changed(Main *bmain, Scene *sce)
+{
+ Object *ob;
+ Material *ma;
+
+ /* glsl */
+ for(ob=bmain->object.first; ob; ob=ob->id.next)
+ if(ob->gpulamp.first)
+ GPU_lamp_free(ob);
+
+ for(ma=bmain->mat.first; ma; ma=ma->id.next)
+ if(ma->gpumaterial.first)
+ GPU_material_free(ma);
+}
+
void ED_render_id_flush_update(Main *bmain, ID *id)
{
if(!id)
@@ -231,6 +245,9 @@ void ED_render_id_flush_update(Main *bmain, ID *id)
case ID_IM:
image_changed(bmain, (Image*)id);
break;
+ case ID_SCE:
+ scene_changed(bmain, (Scene*)id);
+ break;
default:
break;
}
@@ -313,11 +330,11 @@ static int material_slot_assign_exec(bContext *C, wmOperator *op)
}
}
else if(ELEM(ob->type, OB_CURVE, OB_SURF)) {
- ListBase *editnurb= ((Curve*)ob->data)->editnurb;
Nurb *nu;
+ ListBase *nurbs= ED_curve_editnurbs((Curve*)ob->data);
- if(editnurb) {
- for(nu= editnurb->first; nu; nu= nu->next)
+ if(nurbs) {
+ for(nu= nurbs->first; nu; nu= nu->next)
if(isNurbsel(nu))
nu->mat_nr= nu->charidx= ob->actcol-1;
}
@@ -372,13 +389,13 @@ static int material_slot_de_select(bContext *C, int select)
*/
}
else if ELEM(ob->type, OB_CURVE, OB_SURF) {
- ListBase *editnurb= ((Curve*)ob->data)->editnurb;
+ ListBase *nurbs= ED_curve_editnurbs((Curve*)ob->data);
Nurb *nu;
BPoint *bp;
BezTriple *bezt;
int a;
- for(nu= editnurb->first; nu; nu=nu->next) {
+ for(nu= nurbs->first; nu; nu=nu->next) {
if(nu->mat_nr==ob->actcol-1) {
if(nu->bezt) {
a= nu->pntsu;
diff --git a/source/blender/editors/screen/Makefile b/source/blender/editors/screen/Makefile
index c763b4ecb5e..85b9e069620 100644
--- a/source/blender/editors/screen/Makefile
+++ b/source/blender/editors/screen/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c
index fa7064b817d..90f9d5683c2 100644
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@ -40,7 +40,6 @@
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -48,6 +47,7 @@
#include "ED_screen.h"
#include "ED_screen_types.h"
+#include "ED_space_api.h"
#include "ED_types.h"
#include "ED_fileselect.h"
@@ -117,12 +117,6 @@ void ED_region_do_listen(ARegion *ar, wmNotifier *note)
case NC_WINDOW:
ED_region_tag_redraw(ar);
break;
-#ifndef WM_FAST_DRAW
- case NC_SCREEN:
- if(note->action==NA_EDITED)
- ED_region_tag_redraw(ar);
- break;
-#endif
}
if(ar->type && ar->type->listener)
@@ -349,6 +343,8 @@ void ED_region_do_draw(bContext *C, ARegion *ar)
else if(at->draw) {
at->draw(C, ar);
}
+
+ ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST_PIXEL);
uiFreeInactiveBlocks(C, &ar->uiblocks);
@@ -1427,7 +1423,7 @@ void ED_region_header(const bContext *C, ARegion *ar)
/* draw all headers types */
for(ht= ar->type->headertypes.first; ht; ht= ht->next) {
- block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS);
+ block= uiBeginBlock(C, ar, ht->idname, UI_EMBOSS);
layout= uiBlockLayout(block, UI_LAYOUT_HORIZONTAL, UI_LAYOUT_HEADER, xco, yco, HEADERY-6, 1, style);
if(ht->draw) {
diff --git a/source/blender/editors/screen/screen_context.c b/source/blender/editors/screen/screen_context.c
index 1c570d98744..fbc83b1de65 100644
--- a/source/blender/editors/screen/screen_context.c
+++ b/source/blender/editors/screen/screen_context.c
@@ -35,7 +35,6 @@
#include "BKE_context.h"
#include "BKE_utildefines.h"
-#include "BKE_global.h"
#include "BKE_action.h"
#include "BKE_sequencer.h"
diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c
index a3f97a7c5ce..8874c5d1bc8 100644
--- a/source/blender/editors/screen/screen_edit.c
+++ b/source/blender/editors/screen/screen_edit.c
@@ -25,6 +25,8 @@
*/
#include <string.h>
+#include <math.h>
+
#include "MEM_guardedalloc.h"
@@ -40,7 +42,6 @@
#include "BKE_node.h"
#include "BKE_screen.h"
#include "BKE_scene.h"
-#include "BKE_utildefines.h"
#include "BIF_gl.h"
#include "BIF_glutil.h"
@@ -49,7 +50,7 @@
#include "WM_types.h"
#include "ED_image.h"
-#include "ED_view3d.h"
+#include "ED_object.h"
#include "ED_screen.h"
#include "ED_screen_types.h"
@@ -1367,6 +1368,8 @@ void ED_screen_set_scene(bContext *C, Scene *scene)
bScreen *sc;
bScreen *curscreen= CTX_wm_screen(C);
+ ED_object_exit_editmode(C, EM_FREEDATA|EM_DO_UNDO);
+
for(sc= CTX_data_main(C)->screen.first; sc; sc= sc->id.next) {
if((U.flag & USER_SCENEGLOBAL) || sc==curscreen) {
@@ -1421,7 +1424,7 @@ void ED_screen_set_scene(bContext *C, Scene *scene)
}
CTX_data_scene_set(C, scene);
- set_scene_bg(scene);
+ set_scene_bg(CTX_data_main(C), scene);
ED_update_for_newframe(C, 1);
@@ -1666,12 +1669,14 @@ void ED_screen_animation_timer(bContext *C, int redraws, int refresh, int sync,
ScreenAnimData *sad= MEM_callocN(sizeof(ScreenAnimData), "ScreenAnimData");
screen->animtimer= WM_event_add_timer(wm, win, TIMER0, (1.0/FPS));
+
sad->ar= CTX_wm_region(C);
sad->sfra = scene->r.cfra;
sad->redraws= redraws;
sad->refresh= refresh;
sad->flag |= (enable < 0)? ANIMPLAY_FLAG_REVERSE: 0;
sad->flag |= (sync == 0)? ANIMPLAY_FLAG_NO_SYNC: (sync == 1)? ANIMPLAY_FLAG_SYNC: 0;
+
screen->animtimer->customdata= sad;
}
@@ -1720,6 +1725,7 @@ void ED_screen_animation_timer_update(bScreen *screen, int redraws, int refresh)
/* results in fully updated anim system */
void ED_update_for_newframe(const bContext *C, int mute)
{
+ Main *bmain= CTX_data_main(C);
bScreen *screen= CTX_wm_screen(C);
Scene *scene= CTX_data_scene(C);
@@ -1743,7 +1749,7 @@ void ED_update_for_newframe(const bContext *C, int mute)
/* this function applies the changes too */
/* XXX future: do all windows */
- scene_update_for_newframe(scene, BKE_screen_visible_layers(screen, scene)); /* BKE_scene.h */
+ scene_update_for_newframe(bmain, scene, BKE_screen_visible_layers(screen, scene)); /* BKE_scene.h */
//if ( (CFRA>1) && (!mute) && (scene->r.audio.flag & AUDIO_SCRUB))
// audiostream_scrub( CFRA );
diff --git a/source/blender/editors/screen/screen_intern.h b/source/blender/editors/screen/screen_intern.h
index 5c104521a60..79789b1876e 100644
--- a/source/blender/editors/screen/screen_intern.h
+++ b/source/blender/editors/screen/screen_intern.h
@@ -58,9 +58,6 @@ void ed_screen_context(const bContext *C, const char *member, bContextDataResult
void SCREEN_OT_screenshot(struct wmOperatorType *ot);
void SCREEN_OT_screencast(struct wmOperatorType *ot);
-/* partial updates, much faster then drawing everything, ton is away so allow easy undo'ing - campbell */
-#define WM_FAST_DRAW
-
#endif /* ED_SCREEN_INTERN_H */
diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c
index b70cb03869d..2b9a929d4bf 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -41,20 +41,13 @@
#include "DNA_scene_types.h"
#include "DNA_meta_types.h"
-#include "BKE_blender.h"
-#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_customdata.h"
-#include "BKE_global.h"
-#include "BKE_idprop.h"
-#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_mesh.h"
-#include "BKE_multires.h"
#include "BKE_report.h"
#include "BKE_scene.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "BKE_tessmesh.h"
#include "BKE_sound.h"
@@ -608,10 +601,8 @@ static int area_swap_modal(bContext *C, wmOperator *op, wmEvent *event)
return area_swap_cancel(C, op);
}
-#ifdef WM_FAST_DRAW
ED_area_tag_redraw(sad->sa1);
ED_area_tag_redraw(sad->sa2);
-#endif
ED_area_swapspace(C, sad->sa1, sad->sa2);
@@ -684,10 +675,8 @@ static int area_dupli_invoke(bContext *C, wmOperator *op, wmEvent *event)
/* copy area to new screen */
area_copy_data((ScrArea *)newsc->areabase.first, sa, 0);
-
-#ifdef WM_FAST_DRAW
+
ED_area_tag_redraw((ScrArea *)newsc->areabase.first);
-#endif
/* screen, areas init */
WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
@@ -813,6 +802,7 @@ static void area_move_apply_do(bContext *C, int origval, int delta, int dir, int
wmWindow *win= CTX_wm_window(C);
bScreen *sc= CTX_wm_screen(C);
ScrVert *v1;
+ ScrArea *sa;
delta= CLAMPIS(delta, -smaller, bigger);
@@ -835,15 +825,12 @@ static void area_move_apply_do(bContext *C, int origval, int delta, int dir, int
}
}
}
-#ifdef WM_FAST_DRAW
- {
- ScrArea *sa;
- for(sa= sc->areabase.first; sa; sa= sa->next)
- if(sa->v1->flag || sa->v2->flag || sa->v3->flag || sa->v4->flag)
- ED_area_tag_redraw(sa);
+
+ for(sa= sc->areabase.first; sa; sa= sa->next) {
+ if(sa->v1->flag || sa->v2->flag || sa->v3->flag || sa->v4->flag)
+ ED_area_tag_redraw(sa);
}
-#endif
WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL); /* redraw everything */
}
@@ -1106,10 +1093,9 @@ static int area_split_apply(bContext *C, wmOperator *op)
if(dir=='h') sd->origval= sd->nedge->v1->vec.y;
else sd->origval= sd->nedge->v1->vec.x;
-#ifdef WM_FAST_DRAW
ED_area_tag_redraw(sd->sarea);
ED_area_tag_redraw(sd->narea);
-#endif
+
WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
return 1;
@@ -1121,11 +1107,9 @@ static int area_split_apply(bContext *C, wmOperator *op)
static void area_split_exit(bContext *C, wmOperator *op)
{
if (op->customdata) {
-#ifdef WM_FAST_DRAW
sAreaSplitData *sd= (sAreaSplitData *)op->customdata;
if(sd->sarea) ED_area_tag_redraw(sd->sarea);
if(sd->narea) ED_area_tag_redraw(sd->narea);
-#endif
MEM_freeN(op->customdata);
op->customdata = NULL;
@@ -1437,9 +1421,7 @@ static int region_scale_modal(bContext *C, wmOperator *op, wmEvent *event)
else if(rmd->ar->flag & RGN_FLAG_HIDDEN)
ED_region_toggle_hidden(C, rmd->ar);
}
-#ifdef WM_FAST_DRAW
ED_area_tag_redraw(rmd->sa);
-#endif
WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
break;
@@ -1450,9 +1432,7 @@ static int region_scale_modal(bContext *C, wmOperator *op, wmEvent *event)
if(ABS(event->x - rmd->origx) < 2 && ABS(event->y - rmd->origy) < 2) {
if(rmd->ar->flag & RGN_FLAG_HIDDEN) {
ED_region_toggle_hidden(C, rmd->ar);
-#ifdef WM_FAST_DRAW
ED_area_tag_redraw(rmd->sa);
-#endif
WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
}
}
@@ -1547,7 +1527,7 @@ static void SCREEN_OT_frame_jump(wmOperatorType *ot)
ot->exec= frame_jump_exec;
ot->poll= ED_operator_screenactive;
- ot->flag= 0;
+ ot->flag= OPTYPE_UNDO;
/* rna */
RNA_def_boolean(ot->srna, "end", 0, "Last Frame", "Jump to the last frame of the frame range.");
@@ -1626,7 +1606,7 @@ static void SCREEN_OT_keyframe_jump(wmOperatorType *ot)
ot->exec= keyframe_jump_exec;
ot->poll= ED_operator_screenactive;
- ot->flag= 0;
+ ot->flag= OPTYPE_UNDO;
/* rna */
RNA_def_boolean(ot->srna, "next", 1, "Next Keyframe", "");
@@ -1761,10 +1741,10 @@ static int area_join_init(bContext *C, wmOperator *op)
int x2, y2;
/* required properties, make negative to get return 0 if not set by caller */
- x1= RNA_int_get(op->ptr, "x1");
- y1= RNA_int_get(op->ptr, "y1");
- x2= RNA_int_get(op->ptr, "x2");
- y2= RNA_int_get(op->ptr, "y2");
+ x1= RNA_int_get(op->ptr, "min_x");
+ y1= RNA_int_get(op->ptr, "min_y");
+ x2= RNA_int_get(op->ptr, "max_x");
+ y2= RNA_int_get(op->ptr, "max_y");
sa1 = screen_areahascursor(CTX_wm_screen(C), x1, y1);
sa2 = screen_areahascursor(CTX_wm_screen(C), x2, y2);
@@ -1845,10 +1825,10 @@ static int area_join_invoke(bContext *C, wmOperator *op, wmEvent *event)
return OPERATOR_PASS_THROUGH;
/* prepare operator state vars */
- RNA_int_set(op->ptr, "x1", sad->x);
- RNA_int_set(op->ptr, "y1", sad->y);
- RNA_int_set(op->ptr, "x2", event->x);
- RNA_int_set(op->ptr, "y2", event->y);
+ RNA_int_set(op->ptr, "min_x", sad->x);
+ RNA_int_set(op->ptr, "min_y", sad->y);
+ RNA_int_set(op->ptr, "max_x", event->x);
+ RNA_int_set(op->ptr, "max_y", event->y);
if(!area_join_init(C, op))
return OPERATOR_PASS_THROUGH;
@@ -1955,10 +1935,9 @@ static int area_join_modal(bContext *C, wmOperator *op, wmEvent *event)
break;
case LEFTMOUSE:
if(event->val==KM_RELEASE) {
-#ifdef WM_FAST_DRAW
ED_area_tag_redraw(jd->sa1);
ED_area_tag_redraw(jd->sa2);
-#endif
+
area_join_apply(C, op);
WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
area_join_exit(C, op);
@@ -1991,10 +1970,10 @@ static void SCREEN_OT_area_join(wmOperatorType *ot)
ot->flag= OPTYPE_BLOCKING;
/* rna */
- RNA_def_int(ot->srna, "x1", -100, INT_MIN, INT_MAX, "X 1", "", INT_MIN, INT_MAX);
- RNA_def_int(ot->srna, "y1", -100, INT_MIN, INT_MAX, "Y 1", "", INT_MIN, INT_MAX);
- RNA_def_int(ot->srna, "x2", -100, INT_MIN, INT_MAX, "X 2", "", INT_MIN, INT_MAX);
- RNA_def_int(ot->srna, "y2", -100, INT_MIN, INT_MAX, "Y 2", "", INT_MIN, INT_MAX);
+ RNA_def_int(ot->srna, "min_x", -100, INT_MIN, INT_MAX, "X 1", "", INT_MIN, INT_MAX);
+ RNA_def_int(ot->srna, "min_y", -100, INT_MIN, INT_MAX, "Y 1", "", INT_MIN, INT_MAX);
+ RNA_def_int(ot->srna, "max_x", -100, INT_MIN, INT_MAX, "X 2", "", INT_MIN, INT_MAX);
+ RNA_def_int(ot->srna, "max_y", -100, INT_MIN, INT_MAX, "Y 2", "", INT_MIN, INT_MAX);
}
/* ************** repeat last operator ***************************** */
@@ -2141,9 +2120,7 @@ static int region_quadview_exec(bContext *C, wmOperator *op)
MEM_freeN(ar);
}
}
-#ifdef WM_FAST_DRAW
ED_area_tag_redraw(sa);
-#endif
WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
}
else if(ar->next)
@@ -2183,10 +2160,7 @@ static int region_quadview_exec(bContext *C, wmOperator *op)
rv3d->view= RV3D_VIEW_CAMERA; rv3d->persp= RV3D_CAMOB;
if (rv3d->localvd) {rv3d->localvd->view = rv3d->view; rv3d->localvd->persp = rv3d->persp; }
}
-
-#ifdef WM_FAST_DRAW
ED_area_tag_redraw(sa);
-#endif
WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
}
@@ -2228,10 +2202,8 @@ static int region_flip_exec(bContext *C, wmOperator *op)
ar->alignment= RGN_ALIGN_RIGHT;
else if(ar->alignment==RGN_ALIGN_RIGHT)
ar->alignment= RGN_ALIGN_LEFT;
-
-#ifdef WM_FAST_DRAW
- ED_area_tag_redraw(CTX_wm_area(C));
-#endif
+
+ ED_area_tag_redraw(CTX_wm_area(C));
WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
return OPERATOR_FINISHED;
@@ -2283,10 +2255,8 @@ static int header_flip_exec(bContext *C, wmOperator *op)
ar->alignment= RGN_ALIGN_RIGHT;
else if(ar->alignment==RGN_ALIGN_RIGHT)
ar->alignment= RGN_ALIGN_LEFT;
-
-#ifdef WM_FAST_DRAW
+
ED_area_tag_redraw(CTX_wm_area(C));
-#endif
WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
@@ -2434,20 +2404,20 @@ static int screen_animation_step(bContext *C, wmOperator *op, wmEvent *event)
ScrArea *sa;
int sync;
float time;
-
+
/* sync, don't sync, or follow scene setting */
- if(sad->flag & ANIMPLAY_FLAG_SYNC) sync= 1;
- else if(sad->flag & ANIMPLAY_FLAG_NO_SYNC) sync= 0;
+ if (sad->flag & ANIMPLAY_FLAG_SYNC) sync= 1;
+ else if (sad->flag & ANIMPLAY_FLAG_NO_SYNC) sync= 0;
else sync= (scene->flag & SCE_FRAME_DROP);
if((scene->audio.flag & AUDIO_SYNC) && !(sad->flag & ANIMPLAY_FLAG_REVERSE) && finite(time = sound_sync_scene(scene)))
- scene->r.cfra = round(time * FPS);
+ scene->r.cfra = time * FPS + 0.5;
else
{
- if(sync) {
+ if (sync) {
int step = floor(wt->duration * FPS);
/* skip frames */
- if(sad->flag & ANIMPLAY_FLAG_REVERSE)
+ if (sad->flag & ANIMPLAY_FLAG_REVERSE)
scene->r.cfra -= step;
else
scene->r.cfra += step;
@@ -2455,7 +2425,7 @@ static int screen_animation_step(bContext *C, wmOperator *op, wmEvent *event)
}
else {
/* one frame +/- */
- if(sad->flag & ANIMPLAY_FLAG_REVERSE)
+ if (sad->flag & ANIMPLAY_FLAG_REVERSE)
scene->r.cfra--;
else
scene->r.cfra++;
@@ -2496,19 +2466,19 @@ static int screen_animation_step(bContext *C, wmOperator *op, wmEvent *event)
}
}
- if(sad->flag & ANIMPLAY_FLAG_JUMPED)
+ if (sad->flag & ANIMPLAY_FLAG_JUMPED)
sound_seek_scene(C);
/* since we follow drawflags, we can't send notifier but tag regions ourselves */
ED_update_for_newframe(C, 1);
- for(sa= screen->areabase.first; sa; sa= sa->next) {
+ for (sa= screen->areabase.first; sa; sa= sa->next) {
ARegion *ar;
- for(ar= sa->regionbase.first; ar; ar= ar->next) {
- if(ar==sad->ar)
+ for (ar= sa->regionbase.first; ar; ar= ar->next) {
+ if (ar==sad->ar)
ED_region_tag_redraw(ar);
else
- if(match_region_with_redraws(sa->spacetype, ar->regiontype, sad->redraws))
+ if (match_region_with_redraws(sa->spacetype, ar->regiontype, sad->redraws))
ED_region_tag_redraw(ar);
}
@@ -2553,9 +2523,9 @@ static void SCREEN_OT_animation_step(wmOperatorType *ot)
int ED_screen_animation_play(bContext *C, int sync, int mode)
{
bScreen *screen= CTX_wm_screen(C);
- struct Scene* scene = CTX_data_scene(C);
+ Scene *scene = CTX_data_scene(C);
- if(screen->animtimer) {
+ if (screen->animtimer) {
/* stop playback now */
ED_screen_animation_timer(C, 0, 0, 0, 0);
sound_stop_scene(scene);
@@ -2563,33 +2533,33 @@ int ED_screen_animation_play(bContext *C, int sync, int mode)
else {
ScrArea *sa= CTX_wm_area(C);
int refresh= SPACE_TIME;
-
- if(mode == 1) // XXX only play audio forwards!?
+
+ if (mode == 1) // XXX only play audio forwards!?
sound_play_scene(scene);
-
+
/* timeline gets special treatment since it has it's own menu for determining redraws */
if ((sa) && (sa->spacetype == SPACE_TIME)) {
SpaceTime *stime= (SpaceTime *)sa->spacedata.first;
-
+
ED_screen_animation_timer(C, stime->redraws, refresh, sync, mode);
-
+
/* update region if TIME_REGION was set, to leftmost 3d window */
ED_screen_animation_timer_update(screen, stime->redraws, refresh);
}
else {
int redraws = TIME_REGION|TIME_ALL_3D_WIN;
-
+
/* XXX - would like a better way to deal with this situation - Campbell */
- if((!sa) || (sa->spacetype == SPACE_SEQ)) {
+ if ((!sa) || (sa->spacetype == SPACE_SEQ)) {
redraws |= TIME_SEQ;
}
-
+
ED_screen_animation_timer(C, redraws, refresh, sync, mode);
-
+
if(screen->animtimer) {
wmTimer *wt= screen->animtimer;
ScreenAnimData *sad= wt->customdata;
-
+
sad->ar= CTX_wm_region(C);
}
}
@@ -2602,10 +2572,10 @@ static int screen_animation_play_exec(bContext *C, wmOperator *op)
{
int mode= (RNA_boolean_get(op->ptr, "reverse")) ? -1 : 1;
int sync= -1;
-
- if(RNA_property_is_set(op->ptr, "sync"))
+
+ if (RNA_property_is_set(op->ptr, "sync"))
sync= (RNA_boolean_get(op->ptr, "sync"));
-
+
return ED_screen_animation_play(C, sync, mode);
}
@@ -2854,9 +2824,9 @@ static int scene_new_exec(bContext *C, wmOperator *op)
/* these can't be handled in blenkernel curently, so do them here */
if(type == SCE_COPY_LINK_DATA)
- ED_object_single_users(newscene, 0);
+ ED_object_single_users(bmain, newscene, 0);
else if(type == SCE_COPY_FULL)
- ED_object_single_users(newscene, 1);
+ ED_object_single_users(bmain, newscene, 1);
WM_event_add_notifier(C, NC_SCENE|ND_SCENEBROWSE, newscene);
@@ -2992,6 +2962,7 @@ static void keymap_modal_set(wmKeyConfig *keyconf)
void ED_keymap_screen(wmKeyConfig *keyconf)
{
wmKeyMap *keymap;
+ //wmKeyMapItem *kmi;
/* Screen Editing ------------------------------------------------ */
keymap= WM_keymap_find(keyconf, "Screen Editing", 0, 0);
@@ -3087,10 +3058,22 @@ void ED_keymap_screen(wmKeyConfig *keyconf)
/* play (forward and backwards) */
WM_keymap_add_item(keymap, "SCREEN_OT_animation_play", AKEY, KM_PRESS, KM_ALT, 0);
- WM_keymap_add_item(keymap, "SCREEN_OT_animation_play", KKEY, KM_PRESS, 0, LKEY);
RNA_boolean_set(WM_keymap_add_item(keymap, "SCREEN_OT_animation_play", AKEY, KM_PRESS, KM_ALT|KM_SHIFT, 0)->ptr, "reverse", 1);
WM_keymap_add_item(keymap, "SCREEN_OT_animation_cancel", ESCKEY, KM_PRESS, 0, 0);
+ /* Alternative keys for animation and sequencer playing */
+#if 0 // XXX: disabled for restoring later... bad implementation
+ keymap= WM_keymap_find(keyconf, "Frames", 0, 0);
+ kmi = WM_keymap_add_item(keymap, "SCREEN_OT_animation_play", RIGHTARROWKEY, KM_PRESS, KM_ALT, 0);
+ RNA_boolean_set(kmi->ptr, "cycle_speed", 1);
+
+ kmi = WM_keymap_add_item(keymap, "SCREEN_OT_animation_play", LEFTARROWKEY, KM_PRESS, KM_ALT, 0);
+ RNA_boolean_set(kmi->ptr, "reverse", 1);
+ RNA_boolean_set(kmi->ptr, "cycle_speed", 1);
+
+ WM_keymap_add_item(keymap, "SCREEN_OT_animation_play", DOWNARROWKEY, KM_PRESS, KM_ALT, 0);
+#endif
+
keymap_modal_set(keyconf);
}
diff --git a/source/blender/editors/screen/screendump.c b/source/blender/editors/screen/screendump.c
index d5cd8285515..56efa0a5a83 100644
--- a/source/blender/editors/screen/screendump.c
+++ b/source/blender/editors/screen/screendump.c
@@ -44,7 +44,6 @@
#include "BKE_global.h"
#include "BKE_image.h"
#include "BKE_report.h"
-#include "BKE_utildefines.h"
#include "BKE_writeavi.h"
#include "BIF_gl.h"
diff --git a/source/blender/editors/sculpt_paint/Makefile b/source/blender/editors/sculpt_paint/Makefile
index 012a39b8d25..f9f39fea7eb 100644
--- a/source/blender/editors/sculpt_paint/Makefile
+++ b/source/blender/editors/sculpt_paint/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/sculpt_paint/paint_image.c b/source/blender/editors/sculpt_paint/paint_image.c
index 12326843734..7e922076f4b 100644
--- a/source/blender/editors/sculpt_paint/paint_image.c
+++ b/source/blender/editors/sculpt_paint/paint_image.c
@@ -54,18 +54,16 @@
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
+#include "DNA_brush_types.h"
#include "BKE_context.h"
#include "BKE_idprop.h"
#include "BKE_object.h"
#include "BKE_brush.h"
-#include "BKE_global.h"
#include "BKE_image.h"
#include "BKE_main.h"
#include "BKE_mesh.h"
-#include "BKE_node.h"
#include "BKE_paint.h"
-#include "BKE_utildefines.h"
#include "BKE_DerivedMesh.h"
#include "BKE_report.h"
#include "BKE_depsgraph.h"
@@ -1334,7 +1332,7 @@ float project_paint_uvpixel_mask(
// This only works when the opacity dosnt change while painting, stylus pressure messes with this
// so dont use it.
- // if (ps->is_airbrush==0) mask *= ps->brush->alpha;
+ // if (ps->is_airbrush==0) mask *= brush_alpha(ps->brush);
return mask;
}
@@ -1444,7 +1442,7 @@ static ProjPixel *project_paint_uvpixel_init(
sub_v2_v2v2(co, projPixel->projCoSS, (float *)ps->cloneOffset);
/* no need to initialize the bucket, we're only checking buckets faces and for this
- * the faces are alredy initialized in project_paint_delayed_face_init(...) */
+ * the faces are already initialized in project_paint_delayed_face_init(...) */
if (ibuf->rect_float) {
if (!project_paint_PickColor(ps, co, ((ProjPixelClone *)projPixel)->clonepx.f, NULL, 1)) {
((ProjPixelClone *)projPixel)->clonepx.f[3] = 0; /* zero alpha - ignore */
@@ -1694,7 +1692,7 @@ static float Vec2Lenf_nosqrt_other(const float *v1, const float v2_1, const floa
static int project_bucket_isect_circle(const int bucket_x, const int bucket_y, const float cent[2], const float radius_squared, rctf *bucket_bounds)
{
- /* Would normally to a simple intersection test, however we know the bounds of these 2 alredy intersect
+ /* Would normally to a simple intersection test, however we know the bounds of these 2 already intersect
* so we only need to test if the center is inside the vertical or horizontal bounds on either axis,
* this is even less work then an intersection test
*
@@ -2809,6 +2807,8 @@ static void project_paint_begin(ProjPaintState *ps)
MVert *mv;
MemArena *arena; /* at the moment this is just ps->arena_mt[0], but use this to show were not multithreading */
+
+ const int diameter= 2*brush_size(ps->brush);
/* ---- end defines ---- */
@@ -3030,11 +3030,11 @@ static void project_paint_begin(ProjPaintState *ps)
if(ps->source==PROJ_SRC_VIEW) {
#ifdef PROJ_DEBUG_WINCLIP
- CLAMP(ps->screenMin[0], (float)(-ps->brush->size), (float)(ps->winx + ps->brush->size));
- CLAMP(ps->screenMax[0], (float)(-ps->brush->size), (float)(ps->winx + ps->brush->size));
+ CLAMP(ps->screenMin[0], (float)(-diameter), (float)(ps->winx + diameter));
+ CLAMP(ps->screenMax[0], (float)(-diameter), (float)(ps->winx + diameter));
- CLAMP(ps->screenMin[1], (float)(-ps->brush->size), (float)(ps->winy + ps->brush->size));
- CLAMP(ps->screenMax[1], (float)(-ps->brush->size), (float)(ps->winy + ps->brush->size));
+ CLAMP(ps->screenMin[1], (float)(-diameter), (float)(ps->winy + diameter));
+ CLAMP(ps->screenMax[1], (float)(-diameter), (float)(ps->winy + diameter));
#endif
}
else { /* reprojection, use bounds */
@@ -3049,8 +3049,8 @@ static void project_paint_begin(ProjPaintState *ps)
ps->screen_width = ps->screenMax[0] - ps->screenMin[0];
ps->screen_height = ps->screenMax[1] - ps->screenMin[1];
- ps->buckets_x = (int)(ps->screen_width / (((float)ps->brush->size) / PROJ_BUCKET_BRUSH_DIV));
- ps->buckets_y = (int)(ps->screen_height / (((float)ps->brush->size) / PROJ_BUCKET_BRUSH_DIV));
+ ps->buckets_x = (int)(ps->screen_width / (((float)diameter) / PROJ_BUCKET_BRUSH_DIV));
+ ps->buckets_y = (int)(ps->screen_height / (((float)diameter) / PROJ_BUCKET_BRUSH_DIV));
/* printf("\tscreenspace bucket division x:%d y:%d\n", ps->buckets_x, ps->buckets_y); */
@@ -3448,16 +3448,16 @@ static int project_bucket_iter_init(ProjPaintState *ps, const float mval_f[2])
{
if(ps->source==PROJ_SRC_VIEW) {
float min_brush[2], max_brush[2];
- float size_half = ((float)ps->brush->size) * 0.5f;
+ const float radius = (float)brush_size(ps->brush);
/* so we dont have a bucket bounds that is way too small to paint into */
- // if (size_half < 1.0f) size_half = 1.0f; // this dosnt work yet :/
+ // if (radius < 1.0f) radius = 1.0f; // this doesn't work yet :/
- min_brush[0] = mval_f[0] - size_half;
- min_brush[1] = mval_f[1] - size_half;
+ min_brush[0] = mval_f[0] - radius;
+ min_brush[1] = mval_f[1] - radius;
- max_brush[0] = mval_f[0] + size_half;
- max_brush[1] = mval_f[1] + size_half;
+ max_brush[0] = mval_f[0] + radius;
+ max_brush[1] = mval_f[1] + radius;
/* offset to make this a valid bucket index */
project_paint_bucket_bounds(ps, min_brush, max_brush, ps->bucketMin, ps->bucketMax);
@@ -3486,6 +3486,8 @@ static int project_bucket_iter_init(ProjPaintState *ps, const float mval_f[2])
static int project_bucket_iter_next(ProjPaintState *ps, int *bucket_index, rctf *bucket_bounds, const float mval[2])
{
+ const int diameter= 2*brush_size(ps->brush);
+
if (ps->thread_tot > 1)
BLI_lock_thread(LOCK_CUSTOM1);
@@ -3498,7 +3500,7 @@ static int project_bucket_iter_next(ProjPaintState *ps, int *bucket_index, rctf
project_bucket_bounds(ps, ps->context_bucket_x, ps->context_bucket_y, bucket_bounds);
if ( (ps->source != PROJ_SRC_VIEW) ||
- project_bucket_isect_circle(ps->context_bucket_x, ps->context_bucket_y, mval, (float)(ps->brush->size * ps->brush->size), bucket_bounds)
+ project_bucket_isect_circle(ps->context_bucket_x, ps->context_bucket_y, mval, (float)(diameter*diameter), bucket_bounds)
) {
*bucket_index = ps->context_bucket_x + (ps->context_bucket_y * ps->buckets_x);
ps->context_bucket_x++;
@@ -3685,7 +3687,6 @@ static void *do_projectpaint_thread(void *ph_v)
float rgba[4], alpha, dist_nosqrt, dist;
- float brush_size_sqared;
float falloff;
int bucket_index;
int is_floatbuf = 0;
@@ -3697,14 +3698,15 @@ static void *do_projectpaint_thread(void *ph_v)
float co[2];
float mask = 1.0f; /* airbrush wont use mask */
unsigned short mask_short;
- float size_half = ((float)ps->brush->size) * 0.5f;
+ const float radius= (float)brush_size(ps->brush);
+ const float radius_squared= radius*radius; /* avoid a square root with every dist comparison */
+
short lock_alpha= ELEM(ps->brush->blend, IMB_BLEND_ERASE_ALPHA, IMB_BLEND_ADD_ALPHA) ? 0 : ps->brush->flag & BRUSH_LOCK_ALPHA;
LinkNode *smearPixels = NULL;
LinkNode *smearPixels_f = NULL;
MemArena *smearArena = NULL; /* mem arena for this brush projection only */
-
if (tool==PAINT_TOOL_SMEAR) {
pos_ofs[0] = pos[0] - lastpos[0];
pos_ofs[1] = pos[1] - lastpos[1];
@@ -3712,9 +3714,6 @@ static void *do_projectpaint_thread(void *ph_v)
smearArena = BLI_memarena_new(1<<16, "paint smear arena");
}
- /* avoid a square root with every dist comparison */
- brush_size_sqared = (float)(ps->brush->size * ps->brush->size);
-
/* printf("brush bounds %d %d %d %d\n", bucketMin[0], bucketMin[1], bucketMax[0], bucketMax[1]); */
while (project_bucket_iter_next(ps, &bucket_index, &bucket_bounds, pos)) {
@@ -3735,7 +3734,7 @@ static void *do_projectpaint_thread(void *ph_v)
bicubic_interpolation_color(ps->reproject_ibuf, projPixel->newColor.ch, NULL, projPixel->projCoSS[0], projPixel->projCoSS[1]);
if(projPixel->newColor.ch[3]) {
mask = ((float)projPixel->mask)/65535.0f;
- blend_color_mix_accum(projPixel->pixel.ch_pt, projPixel->origColor.ch, projPixel->newColor.ch, (mask*projPixel->newColor.ch[3]));
+ blend_color_mix_accum(projPixel->pixel.ch_pt, projPixel->origColor.ch, projPixel->newColor.ch, (int)(mask*projPixel->newColor.ch[3]));
}
}
@@ -3750,9 +3749,11 @@ static void *do_projectpaint_thread(void *ph_v)
/*dist = len_v2v2(projPixel->projCoSS, pos);*/ /* correct but uses a sqrtf */
dist_nosqrt = Vec2Lenf_nosqrt(projPixel->projCoSS, pos);
- /*if (dist < s->brush->size) {*/ /* correct but uses a sqrtf */
- if (dist_nosqrt < brush_size_sqared && (dist=sqrtf(dist_nosqrt)) < size_half) {
- falloff = brush_curve_strength_clamp(ps->brush, dist, size_half);
+ /*if (dist < radius) {*/ /* correct but uses a sqrtf */
+ if (dist_nosqrt <= radius_squared) {
+ dist=sqrtf(dist_nosqrt);
+
+ falloff = brush_curve_strength_clamp(ps->brush, dist, radius);
if (falloff > 0.0f) {
if (ps->is_texbrush) {
@@ -3764,7 +3765,7 @@ static void *do_projectpaint_thread(void *ph_v)
if (ps->is_airbrush) {
/* for an aurbrush there is no real mask, so just multiply the alpha by it */
- alpha *= falloff * ps->brush->alpha;
+ alpha *= falloff * brush_alpha(ps->brush);
mask = ((float)projPixel->mask)/65535.0f;
}
else {
@@ -3772,7 +3773,7 @@ static void *do_projectpaint_thread(void *ph_v)
falloff = 1.0f - falloff;
falloff = 1.0f - (falloff * falloff);
- mask_short = (unsigned short)(projPixel->mask * (ps->brush->alpha * falloff));
+ mask_short = (unsigned short)(projPixel->mask * (brush_alpha(ps->brush) * falloff));
if (mask_short > projPixel->mask_max) {
mask = ((float)mask_short)/65535.0f;
projPixel->mask_max = mask_short;
@@ -4520,7 +4521,7 @@ typedef struct PaintOperation {
int first;
int prevmouse[2];
float prev_pressure; /* need this since we dont get tablet events for pressure change */
- int brush_size_orig;
+ int orig_brush_size;
double starttime;
ViewContext vc;
@@ -4653,7 +4654,7 @@ static int texture_paint_init(bContext *C, wmOperator *op)
if(pop->mode == PAINT_MODE_3D && (pop->s.tool == PAINT_TOOL_CLONE))
pop->s.tool = PAINT_TOOL_DRAW;
pop->s.blend = brush->blend;
- pop->brush_size_orig= brush->size;
+ pop->orig_brush_size= brush_size(brush);
if(pop->mode != PAINT_MODE_2D) {
Mesh *me;
@@ -4702,8 +4703,8 @@ static int texture_paint_init(bContext *C, wmOperator *op)
return 0;
/* Dont allow brush size below 2 */
- if (brush->size <= 1)
- brush->size = 2;
+ if (brush_size(brush) < 2)
+ brush_set_size(brush, 2);
/* allocate and initialize spacial data structures */
project_paint_begin(&pop->ps);
@@ -4713,7 +4714,7 @@ static int texture_paint_init(bContext *C, wmOperator *op)
}
settings->imapaint.flag |= IMAGEPAINT_DRAWING;
- undo_paint_push_begin(UNDO_PAINT_IMAGE, "Image Paint",
+ undo_paint_push_begin(UNDO_PAINT_IMAGE, op->type->name,
image_undo_restore, image_undo_free);
/* create painter */
@@ -4773,7 +4774,7 @@ static void paint_exit(bContext *C, wmOperator *op)
brush_painter_free(pop->painter);
if(pop->mode == PAINT_MODE_3D_PROJECT) {
- pop->ps.brush->size = pop->brush_size_orig;
+ brush_set_size(pop->ps.brush, pop->orig_brush_size);
project_paint_end(&pop->ps);
}
@@ -4844,8 +4845,15 @@ static void paint_apply_event(bContext *C, wmOperator *op, wmEvent *event)
/* special exception here for too high pressure values on first touch in
windows for some tablets, then we just skip first touch .. */
- if ((pop->s.brush->flag & (BRUSH_ALPHA_PRESSURE|BRUSH_SIZE_PRESSURE|BRUSH_SPACING_PRESSURE)) && tablet && (pressure >= 0.99f))
+ if (tablet && (pressure >= 0.99f) && ((pop->s.brush->flag & BRUSH_SPACING_PRESSURE) || brush_use_alpha_pressure(pop->s.brush) || brush_use_size_pressure(pop->s.brush)))
+ return;
+
+ /* This can be removed once fixed properly in
+ brush_painter_paint(BrushPainter *painter, BrushFunc func, float *pos, double time, float pressure, void *user)
+ at zero pressure we should do nothing 1/2^12 is .0002 which is the sensitivity of the most sensitive pen tablet available*/
+ if (tablet && (pressure < .0002f) && ((pop->s.brush->flag & BRUSH_SPACING_PRESSURE) || brush_use_alpha_pressure(pop->s.brush) || brush_use_size_pressure(pop->s.brush)))
return;
+
}
/* fill in stroke */
@@ -4956,9 +4964,14 @@ static int get_imapaint_zoom(bContext *C, float *zoomx, float *zoomy)
static void brush_drawcursor(bContext *C, int x, int y, void *customdata)
{
Brush *brush= image_paint_brush(C);
+ Paint *paint= paint_get_active(CTX_data_scene(C));
- if(brush) {
+ if(paint && brush) {
float zoomx, zoomy;
+
+ if(!(paint->flags & PAINT_SHOW_BRUSH))
+ return;
+
glPushMatrix();
glTranslatef((float)x, (float)y, 0.0f);
@@ -4966,13 +4979,13 @@ static void brush_drawcursor(bContext *C, int x, int y, void *customdata)
if(get_imapaint_zoom(C, &zoomx, &zoomy))
glScalef(zoomx, zoomy, 1.0f);
- glColor4ub(255, 255, 255, 128);
+ glColor4f(brush->add_col[0], brush->add_col[1], brush->add_col[2], 0.5f);
glEnable( GL_LINE_SMOOTH );
glEnable(GL_BLEND);
- glutil_draw_lined_arc(0, (float)(M_PI*2.0), brush->size*0.5f, 40);
+ glutil_draw_lined_arc(0, (float)(M_PI*2.0), (float)brush_size(brush), 40);
glDisable(GL_BLEND);
glDisable( GL_LINE_SMOOTH );
-
+
glPopMatrix();
}
}
@@ -4996,7 +5009,7 @@ static int paint_radial_control_invoke(bContext *C, wmOperator *op, wmEvent *eve
ToolSettings *ts = CTX_data_scene(C)->toolsettings;
get_imapaint_zoom(C, &zoom, &zoom);
toggle_paint_cursor(C, !ts->imapaint.paintcursor);
- brush_radial_control_invoke(op, paint_brush(&ts->imapaint.paint), 0.5f * zoom);
+ brush_radial_control_invoke(op, paint_brush(&ts->imapaint.paint), zoom);
return WM_radial_control_invoke(C, op, event);
}
@@ -5016,7 +5029,7 @@ static int paint_radial_control_exec(bContext *C, wmOperator *op)
int ret;
char str[256];
get_imapaint_zoom(C, &zoom, &zoom);
- ret = brush_radial_control_exec(op, brush, 2.0f / zoom);
+ ret = brush_radial_control_exec(op, brush, 1.0f / zoom);
WM_radial_control_string(op, str, 256);
WM_event_add_notifier(C, NC_BRUSH|NA_EDITED, brush);
@@ -5323,14 +5336,14 @@ static int texture_paint_radial_control_invoke(bContext *C, wmOperator *op, wmEv
{
ToolSettings *ts = CTX_data_scene(C)->toolsettings;
toggle_paint_cursor(C, !ts->imapaint.paintcursor);
- brush_radial_control_invoke(op, paint_brush(&ts->imapaint.paint), 0.5);
+ brush_radial_control_invoke(op, paint_brush(&ts->imapaint.paint), 1);
return WM_radial_control_invoke(C, op, event);
}
static int texture_paint_radial_control_exec(bContext *C, wmOperator *op)
{
Brush *brush = paint_brush(&CTX_data_scene(C)->toolsettings->imapaint.paint);
- int ret = brush_radial_control_exec(op, brush, 2);
+ int ret = brush_radial_control_exec(op, brush, 1);
char str[256];
WM_radial_control_string(op, str, 256);
@@ -5366,7 +5379,7 @@ void PAINT_OT_texture_paint_radial_control(wmOperatorType *ot)
ot->poll= texture_paint_poll;
/* flags */
- ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING;
}
@@ -5435,21 +5448,21 @@ static int texture_paint_camera_project_exec(bContext *C, wmOperator *op)
/* override */
ps.is_texbrush= 0;
ps.is_airbrush= 1;
- orig_brush_size= ps.brush->size;
- ps.brush->size= 32; /* cover the whole image */
+ orig_brush_size= brush_size(ps.brush);
+ brush_set_size(ps.brush, 32); /* cover the whole image */
ps.tool= PAINT_TOOL_DRAW; /* so pixels are initialized with minimal info */
scene->toolsettings->imapaint.flag |= IMAGEPAINT_DRAWING;
- undo_paint_push_begin(UNDO_PAINT_IMAGE, "Image Paint",
+ undo_paint_push_begin(UNDO_PAINT_IMAGE, op->type->name,
image_undo_restore, image_undo_free);
/* allocate and initialize spacial data structures */
project_paint_begin(&ps);
if(ps.dm==NULL) {
- ps.brush->size= orig_brush_size;
+ brush_set_size(ps.brush, orig_brush_size);
return OPERATOR_CANCELLED;
}
else {
@@ -5473,7 +5486,7 @@ static int texture_paint_camera_project_exec(bContext *C, wmOperator *op)
project_paint_end(&ps);
scene->toolsettings->imapaint.flag &= ~IMAGEPAINT_DRAWING;
- ps.brush->size= orig_brush_size;
+ brush_set_size(ps.brush, orig_brush_size);
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/sculpt_paint/paint_intern.h b/source/blender/editors/sculpt_paint/paint_intern.h
index 0ae7c7fac19..3ed314095ef 100644
--- a/source/blender/editors/sculpt_paint/paint_intern.h
+++ b/source/blender/editors/sculpt_paint/paint_intern.h
@@ -121,7 +121,7 @@ typedef enum wmBrushStrokeMode {
typedef void (*UndoRestoreCb)(struct bContext *C, struct ListBase *lb);
typedef void (*UndoFreeCb)(struct ListBase *lb);
-void undo_paint_push_begin(int type, char *name, UndoRestoreCb restore, UndoFreeCb free);
+void undo_paint_push_begin(int type, const char *name, UndoRestoreCb restore, UndoFreeCb free);
struct ListBase *undo_paint_push_get_list(int type);
void undo_paint_push_count_alloc(int type, int size);
void undo_paint_push_end(int type);
diff --git a/source/blender/editors/sculpt_paint/paint_ops.c b/source/blender/editors/sculpt_paint/paint_ops.c
index 5d52b0a3272..b5cadb9c484 100644
--- a/source/blender/editors/sculpt_paint/paint_ops.c
+++ b/source/blender/editors/sculpt_paint/paint_ops.c
@@ -46,7 +46,7 @@ static int brush_add_exec(bContext *C, wmOperator *op)
{
/*int type = RNA_enum_get(op->ptr, "type");*/
Paint *paint = paint_get_active(CTX_data_scene(C));
- Brush *br = paint_brush(paint);
+ struct Brush *br = paint_brush(paint);
if (br)
br = copy_brush(br);
@@ -69,23 +69,44 @@ void BRUSH_OT_add(wmOperatorType *ot)
ot->exec= brush_add_exec;
/* flags */
- ot->flag= OPTYPE_UNDO;
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
static int brush_scale_size_exec(bContext *C, wmOperator *op)
{
- /*int type = RNA_enum_get(op->ptr, "type");*/
- Paint *paint = paint_get_active(CTX_data_scene(C));
- Brush *br = paint_brush(paint);
- float factor = RNA_float_get(op->ptr, "scalar");
-
- if (br) {
- if (U.sculpt_paint_settings & SCULPT_PAINT_USE_UNIFIED_SIZE) {
- U.sculpt_paint_unified_size *= factor;
+ Paint *paint= paint_get_active(CTX_data_scene(C));
+ struct Brush *brush= paint_brush(paint);
+ // Object *ob= CTX_data_active_object(C);
+ float scalar= RNA_float_get(op->ptr, "scalar");
+
+ if (brush) {
+ // pixel radius
+ {
+ const int old_size= brush_size(brush);
+ int size= (int)(scalar*old_size);
+
+ if (old_size == size) {
+ if (scalar > 1) {
+ size++;
+ }
+ else if (scalar < 1) {
+ size--;
+ }
+ }
+ CLAMP(size, 1, 2000); // XXX magic number
+
+ brush_set_size(brush, size);
}
- else {
- br->size *= factor;
+
+ // unprojected radius
+ {
+ float unprojected_radius= scalar*brush_unprojected_radius(brush);
+
+ if (unprojected_radius < 0.001) // XXX magic number
+ unprojected_radius= 0.001f;
+
+ brush_set_unprojected_radius(brush, unprojected_radius);
}
}
@@ -103,7 +124,7 @@ void BRUSH_OT_scale_size(wmOperatorType *ot)
ot->exec= brush_scale_size_exec;
/* flags */
- ot->flag= OPTYPE_UNDO;
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
RNA_def_float(ot->srna, "scalar", 1, 0, 2, "Scalar", "Factor to scale brush size by", 0, 2);
}
@@ -133,6 +154,35 @@ void PAINT_OT_vertex_color_set(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
+static int brush_reset_exec(bContext *C, wmOperator *op)
+{
+ Paint *paint = paint_get_active(CTX_data_scene(C));
+ struct Brush *brush = paint_brush(paint);
+ Object *ob = CTX_data_active_object(C);
+
+ if(!ob) return OPERATOR_CANCELLED;
+
+ if(ob->mode & OB_MODE_SCULPT)
+ brush_reset_sculpt(brush);
+ /* TODO: other modes */
+
+ return OPERATOR_FINISHED;
+}
+
+void BRUSH_OT_reset(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Reset Brush";
+ ot->description= "Return brush to defaults based on current tool";
+ ot->idname= "BRUSH_OT_reset";
+
+ /* api callbacks */
+ ot->exec= brush_reset_exec;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+}
+
/**************************** registration **********************************/
void ED_operatortypes_paint(void)
@@ -141,7 +191,7 @@ void ED_operatortypes_paint(void)
WM_operatortype_append(BRUSH_OT_add);
WM_operatortype_append(BRUSH_OT_scale_size);
WM_operatortype_append(BRUSH_OT_curve_preset);
-
+ WM_operatortype_append(BRUSH_OT_reset);
/* image */
WM_operatortype_append(PAINT_OT_texture_paint_toggle);
@@ -154,7 +204,6 @@ void ED_operatortypes_paint(void)
WM_operatortype_append(PAINT_OT_project_image);
WM_operatortype_append(PAINT_OT_image_from_view);
-
/* weight */
WM_operatortype_append(PAINT_OT_weight_paint_toggle);
WM_operatortype_append(PAINT_OT_weight_paint_radial_control);
@@ -209,6 +258,36 @@ static void ed_keymap_paint_brush_switch(wmKeyMap *keymap, const char *path)
kmi= WM_keymap_add_item(keymap, "WM_OT_context_set_int", ZEROKEY, KM_PRESS, 0, 0);
RNA_string_set(kmi->ptr, "data_path", path);
RNA_int_set(kmi->ptr, "value", 9);
+ kmi= WM_keymap_add_item(keymap, "WM_OT_context_set_int", ONEKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_string_set(kmi->ptr, "data_path", path);
+ RNA_int_set(kmi->ptr, "value", 10);
+ kmi= WM_keymap_add_item(keymap, "WM_OT_context_set_int", TWOKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_string_set(kmi->ptr, "data_path", path);
+ RNA_int_set(kmi->ptr, "value", 11);
+ kmi= WM_keymap_add_item(keymap, "WM_OT_context_set_int", THREEKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_string_set(kmi->ptr, "data_path", path);
+ RNA_int_set(kmi->ptr, "value", 12);
+ kmi= WM_keymap_add_item(keymap, "WM_OT_context_set_int", FOURKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_string_set(kmi->ptr, "data_path", path);
+ RNA_int_set(kmi->ptr, "value", 13);
+ kmi= WM_keymap_add_item(keymap, "WM_OT_context_set_int", FIVEKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_string_set(kmi->ptr, "data_path", path);
+ RNA_int_set(kmi->ptr, "value", 14);
+ kmi= WM_keymap_add_item(keymap, "WM_OT_context_set_int", SIXKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_string_set(kmi->ptr, "data_path", path);
+ RNA_int_set(kmi->ptr, "value", 15);
+ kmi= WM_keymap_add_item(keymap, "WM_OT_context_set_int", SEVENKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_string_set(kmi->ptr, "data_path", path);
+ RNA_int_set(kmi->ptr, "value", 16);
+ kmi= WM_keymap_add_item(keymap, "WM_OT_context_set_int", EIGHTKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_string_set(kmi->ptr, "data_path", path);
+ RNA_int_set(kmi->ptr, "value", 17);
+ kmi= WM_keymap_add_item(keymap, "WM_OT_context_set_int", NINEKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_string_set(kmi->ptr, "data_path", path);
+ RNA_int_set(kmi->ptr, "value", 18);
+ kmi= WM_keymap_add_item(keymap, "WM_OT_context_set_int", ZEROKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_string_set(kmi->ptr, "data_path", path);
+ RNA_int_set(kmi->ptr, "value", 19);
}
static void ed_keymap_paint_brush_size(wmKeyMap *keymap, const char *path)
@@ -271,29 +350,41 @@ void ED_keymap_paint(wmKeyConfig *keyconf)
RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.brush.use_airbrush");
/* brush switching */
- kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", DKEY, KM_PRESS, 0, 0);
- RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.active_brush_name");
- RNA_string_set(kmi->ptr, "value", "Draw");
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_id", DKEY, KM_PRESS, 0, 0);
+ RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.brush");
+ RNA_string_set(kmi->ptr, "value", "SculptDraw");
- kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", SKEY, KM_PRESS, 0, 0);
- RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.active_brush_name");
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_id", SKEY, KM_PRESS, 0, 0);
+ RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.brush");
RNA_string_set(kmi->ptr, "value", "Smooth");
- kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", PKEY, KM_PRESS, 0, 0);
- RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.active_brush_name");
- RNA_string_set(kmi->ptr, "value", "Pinch");
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_id", PKEY, KM_PRESS, 0, 0);
+ RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.brush");
+ RNA_string_set(kmi->ptr, "value", "Pinch/Magnify");
- kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", GKEY, KM_PRESS, 0, 0);
- RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.active_brush_name");
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_id", GKEY, KM_PRESS, 0, 0);
+ RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.brush");
RNA_string_set(kmi->ptr, "value", "Grab");
- kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", LKEY, KM_PRESS, 0, 0);
- RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.active_brush_name");
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_id", LKEY, KM_PRESS, 0, 0);
+ RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.brush");
RNA_string_set(kmi->ptr, "value", "Layer");
- kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", TKEY, KM_PRESS, KM_SHIFT, 0); // was just T in 2.4x
- RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.active_brush_name");
- RNA_string_set(kmi->ptr, "value", "Flatten");
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_id", CKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.brush");
+ RNA_string_set(kmi->ptr, "value", "Crease");
+
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_id", CKEY, KM_PRESS, 0, 0);
+ RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.brush");
+ RNA_string_set(kmi->ptr, "value", "Clay");
+
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_id", IKEY, KM_PRESS, 0, 0);
+ RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.brush");
+ RNA_string_set(kmi->ptr, "value", "Inflate/Deflate");
+
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_id", TKEY, KM_PRESS, KM_SHIFT, 0); // was just T in 2.4x
+ RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.brush");
+ RNA_string_set(kmi->ptr, "value", "Flatten/Contrast");
/* Vertex Paint mode */
keymap= WM_keymap_find(keyconf, "Vertex Paint", 0, 0);
diff --git a/source/blender/editors/sculpt_paint/paint_stroke.c b/source/blender/editors/sculpt_paint/paint_stroke.c
index 7b8d7c4b7ef..6d58731d79c 100644
--- a/source/blender/editors/sculpt_paint/paint_stroke.c
+++ b/source/blender/editors/sculpt_paint/paint_stroke.c
@@ -30,6 +30,7 @@
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
+#include "DNA_brush_types.h"
#include "RNA_access.h"
@@ -52,7 +53,6 @@
#include "paint_intern.h"
#include "sculpt_intern.h" // XXX, for expedience in getting this working, refactor later (or this just shows that this needs unification)
-#include "BKE_image.h"
#include <float.h>
#include <math.h>
@@ -69,7 +69,7 @@ typedef struct PaintStroke {
float last_mouse_position[2];
- /* Set whether any stroke step has yet occured
+ /* Set whether any stroke step has yet occurred
e.g. in sculpt mode, stroke doesn't start until cursor
passes over the mesh */
int stroke_started;
@@ -227,7 +227,7 @@ static int same_snap(Snapshot* snap, Brush* brush, ViewContext* vc)
mtex->size[1] == snap->size[1] &&
mtex->size[2] == snap->size[2] &&
mtex->rot == snap->rot) &&
- ((mtex->brush_map_mode == MTEX_MAP_MODE_FIXED && sculpt_get_brush_size(brush) <= snap->brush_size) || (sculpt_get_brush_size(brush) == snap->brush_size)) && // make brush smaller shouldn't cause a resample
+ ((mtex->brush_map_mode == MTEX_MAP_MODE_FIXED && brush_size(brush) <= snap->brush_size) || (brush_size(brush) == snap->brush_size)) && // make brush smaller shouldn't cause a resample
mtex->brush_map_mode == snap->brush_map_mode &&
vc->ar->winx == snap->winx &&
vc->ar->winy == snap->winy;
@@ -248,7 +248,7 @@ static void make_snap(Snapshot* snap, Brush* brush, ViewContext* vc)
snap->rot = -1;
}
- snap->brush_size = sculpt_get_brush_size(brush);
+ snap->brush_size = brush_size(brush);
snap->winx = vc->ar->winx;
snap->winy = vc->ar->winy;
}
@@ -289,7 +289,7 @@ int load_tex(Sculpt *sd, Brush* br, ViewContext* vc)
make_snap(&snap, br, vc);
if (br->mtex.brush_map_mode == MTEX_MAP_MODE_FIXED) {
- int s = sculpt_get_brush_size(br);
+ int s = brush_size(br);
int r = 1;
for (s >>= 1; s > 0; s >>= 1)
@@ -330,7 +330,7 @@ int load_tex(Sculpt *sd, Brush* br, ViewContext* vc)
// largely duplicated from tex_strength
const float rotation = -br->mtex.rot;
- float diameter = sculpt_get_brush_size(br);
+ float radius = brush_size(br);
int index = j*size + i;
float x;
float avg;
@@ -342,8 +342,8 @@ int load_tex(Sculpt *sd, Brush* br, ViewContext* vc)
y -= 0.5f;
if (br->mtex.brush_map_mode == MTEX_MAP_MODE_TILED) {
- x *= vc->ar->winx / diameter;
- y *= vc->ar->winy / diameter;
+ x *= vc->ar->winx / radius;
+ y *= vc->ar->winy / radius;
}
else {
x *= 2;
@@ -376,7 +376,7 @@ int load_tex(Sculpt *sd, Brush* br, ViewContext* vc)
if (br->mtex.brush_map_mode == MTEX_MAP_MODE_FIXED)
avg *= brush_curve_strength(br, len, 1); /* Falloff curve */
- buffer[index] = (GLubyte)(255*avg);
+ buffer[index] = 255 - (GLubyte)(255*avg);
}
else {
buffer[index] = 0;
@@ -488,10 +488,10 @@ int sculpt_get_brush_geometry(bContext* C, int x, int y, int* pixel_radius, floa
memcpy(viewport, stroke->mats.viewport, sizeof(int[4]));
if (stroke->vc.obact->sculpt && stroke->vc.obact->sculpt->pbvh && sculpt_stroke_get_location(C, stroke, location, window)) {
- *pixel_radius = project_brush_radius(stroke->vc.rv3d, sculpt_get_brush_unprojected_radius(stroke->brush), location, &stroke->mats);
+ *pixel_radius = project_brush_radius(stroke->vc.rv3d, brush_unprojected_radius(stroke->brush), location, &stroke->mats);
if (*pixel_radius == 0)
- *pixel_radius = sculpt_get_brush_size(stroke->brush);
+ *pixel_radius = brush_size(stroke->brush);
mul_m4_v3(stroke->vc.obact->sculpt->ob->obmat, location);
@@ -501,7 +501,7 @@ int sculpt_get_brush_geometry(bContext* C, int x, int y, int* pixel_radius, floa
Sculpt* sd = CTX_data_tool_settings(C)->sculpt;
Brush* brush = paint_brush(&sd->paint);
- *pixel_radius = sculpt_get_brush_size(brush);
+ *pixel_radius = brush_size(brush);
hit = 0;
}
@@ -556,7 +556,8 @@ static void paint_draw_cursor(bContext *C, int x, int y, void *unused)
float* col;
float alpha;
- float visual_strength = sculpt_get_brush_alpha(brush)*sculpt_get_brush_alpha(brush);
+ const float root_alpha = brush_alpha(brush);
+ float visual_strength = root_alpha*root_alpha;
const float min_alpha = 0.20f;
const float max_alpha = 0.80f;
@@ -577,13 +578,13 @@ static void paint_draw_cursor(bContext *C, int x, int y, void *unused)
}
}
- if(!sculpt_get_lock_brush_size(brush) && !(paint->flags & PAINT_SHOW_BRUSH))
+ if(!brush_use_locked_size(brush) && !(paint->flags & PAINT_SHOW_BRUSH))
return;
hit = sculpt_get_brush_geometry(C, x, y, &pixel_radius, location, modelview, projection, viewport);
- if (sculpt_get_lock_brush_size(brush))
- sculpt_set_brush_size(brush, pixel_radius);
+ if (brush_use_locked_size(brush))
+ brush_set_size(brush, pixel_radius);
// XXX: no way currently to know state of pen flip or invert key modifier without starting a stroke
flip = 1;
@@ -633,7 +634,7 @@ static void paint_draw_cursor(bContext *C, int x, int y, void *unused)
glTranslatef(-0.5f, -0.5f, 0);
- if (sd->draw_pressure && (brush->flag & BRUSH_SIZE_PRESSURE)) {
+ if (sd->draw_pressure && brush_use_size_pressure(brush)) {
glTranslatef(0.5f, 0.5f, 0);
glScalef(1.0f/sd->pressure_value, 1.0f/sd->pressure_value, 1);
glTranslatef(-0.5f, -0.5f, 0);
@@ -662,17 +663,19 @@ static void paint_draw_cursor(bContext *C, int x, int y, void *unused)
glVertex2f(sd->anchored_initial_mouse[0]-sd->anchored_size - vc.ar->winrct.xmin, sd->anchored_initial_mouse[1]+sd->anchored_size - vc.ar->winrct.ymin);
}
else {
+ const int radius= brush_size(brush);
+
glTexCoord2f(0, 0);
- glVertex2f((float)x-sculpt_get_brush_size(brush), (float)y-sculpt_get_brush_size(brush));
+ glVertex2f((float)x-radius, (float)y-radius);
glTexCoord2f(1, 0);
- glVertex2f((float)x+sculpt_get_brush_size(brush), (float)y-sculpt_get_brush_size(brush));
+ glVertex2f((float)x+radius, (float)y-radius);
glTexCoord2f(1, 1);
- glVertex2f((float)x+sculpt_get_brush_size(brush), (float)y+sculpt_get_brush_size(brush));
+ glVertex2f((float)x+radius, (float)y+radius);
glTexCoord2f(0, 1);
- glVertex2f((float)x-sculpt_get_brush_size(brush), (float)y+sculpt_get_brush_size(brush));
+ glVertex2f((float)x-radius, (float)y+radius);
}
}
else {
@@ -702,7 +705,7 @@ static void paint_draw_cursor(bContext *C, int x, int y, void *unused)
// XXX duplicated from brush_strength & paint_stroke_add_step, refactor later
//wmEvent* event = CTX_wm_window(C)->eventstate;
- if (sd->draw_pressure && (brush->flag & BRUSH_ALPHA_PRESSURE))
+ if (sd->draw_pressure && brush_use_alpha_pressure(brush))
visual_strength *= sd->pressure_value;
// don't show effect of strength past the soft limit
@@ -715,14 +718,14 @@ static void paint_draw_cursor(bContext *C, int x, int y, void *unused)
if (brush->flag & BRUSH_ANCHORED)
unprojected_radius = unproject_brush_radius(CTX_data_active_object(C), &vc, location, 8);
else
- unprojected_radius = unproject_brush_radius(CTX_data_active_object(C), &vc, location, sculpt_get_brush_size(brush));
+ unprojected_radius = unproject_brush_radius(CTX_data_active_object(C), &vc, location, brush_size(brush));
}
- if (sd->draw_pressure && (brush->flag & BRUSH_SIZE_PRESSURE))
+ if (sd->draw_pressure && brush_use_size_pressure(brush))
unprojected_radius *= sd->pressure_value;
- if (!sculpt_get_lock_brush_size(brush))
- sculpt_set_brush_unprojected_radius(brush, unprojected_radius);
+ if (!brush_use_locked_size(brush))
+ brush_set_unprojected_radius(brush, unprojected_radius);
if(!(paint->flags & PAINT_SHOW_BRUSH))
return;
@@ -754,7 +757,7 @@ static void paint_draw_cursor(bContext *C, int x, int y, void *unused)
}
else {
glTranslatef((float)x, (float)y, 0.0f);
- glutil_draw_lined_arc(0.0, M_PI*2.0, sculpt_get_brush_size(brush), 40);
+ glutil_draw_lined_arc(0.0, M_PI*2.0, brush_size(brush), 40);
glTranslatef(-(float)x, -(float)y, 0.0f);
}
@@ -767,12 +770,12 @@ static void paint_draw_cursor(bContext *C, int x, int y, void *unused)
if(!(paint->flags & PAINT_SHOW_BRUSH))
return;
- glColor4ubv(paint_get_active(CTX_data_scene(C))->paint_cursor_col);
+ glColor4f(brush->add_col[0], brush->add_col[1], brush->add_col[2], 0.5f);
glEnable(GL_LINE_SMOOTH);
glEnable(GL_BLEND);
glTranslatef((float)x, (float)y, 0.0f);
- glutil_draw_lined_arc(0.0, M_PI*2.0, brush->size, 40); // XXX: for now use the brushes size instead of potentially using the unified size because the feature has been enabled for sculpt
+ glutil_draw_lined_arc(0.0, M_PI*2.0, brush_size(brush), 40); // XXX: for now use the brushes size instead of potentially using the unified size because the feature has been enabled for sculpt
glTranslatef((float)-x, (float)-y, 0.0f);
glDisable(GL_BLEND);
@@ -786,7 +789,7 @@ static void paint_brush_stroke_add_step(bContext *C, wmOperator *op, wmEvent *ev
Paint *paint = paint_get_active(CTX_data_scene(C)); // XXX
Brush *brush = paint_brush(paint); // XXX
- float mouse[2];
+ float mouse[3];
PointerRNA itemptr;
@@ -909,10 +912,10 @@ static int paint_space_stroke(bContext *C, wmOperator *op, wmEvent *event, const
if(event->custom == EVT_DATA_TABLET) {
wmTabletData *wmtab= event->customdata;
if(wmtab->Active != EVT_TABLET_NONE)
- pressure = stroke->brush->flag & BRUSH_SIZE_PRESSURE ? wmtab->Pressure : 1;
+ pressure = brush_use_size_pressure(stroke->brush) ? wmtab->Pressure : 1;
}
- scale = (sculpt_get_brush_size(stroke->brush)*pressure*stroke->brush->spacing/50.0f) / length;
+ scale = (brush_size(stroke->brush)*pressure*stroke->brush->spacing/50.0f) / length;
mul_v2_fl(vec, scale);
steps = (int)(1.0f / scale);
@@ -1002,8 +1005,9 @@ int paint_stroke_modal(bContext *C, wmOperator *op, wmEvent *event)
paint_brush_stroke_add_step(C, op, event, mouse);
}
}
- else
+ else {
;//ED_region_tag_redraw(ar);
+ }
}
}
diff --git a/source/blender/editors/sculpt_paint/paint_undo.c b/source/blender/editors/sculpt_paint/paint_undo.c
index 5da988f1ae1..c2f82b8e2e0 100644
--- a/source/blender/editors/sculpt_paint/paint_undo.c
+++ b/source/blender/editors/sculpt_paint/paint_undo.c
@@ -76,7 +76,7 @@ static void undo_elem_free(UndoStack *stack, UndoElem *uel)
}
}
-static void undo_stack_push_begin(UndoStack *stack, char *name, UndoRestoreCb restore, UndoFreeCb free)
+static void undo_stack_push_begin(UndoStack *stack, const char *name, UndoRestoreCb restore, UndoFreeCb free)
{
UndoElem *uel;
int nr;
@@ -145,27 +145,35 @@ static void undo_stack_push_end(UndoStack *stack)
}
}
-static void undo_stack_step(bContext *C, UndoStack *stack, int step)
+static int undo_stack_step(bContext *C, UndoStack *stack, int step, const char *name)
{
UndoElem *undo;
if(step==1) {
if(stack->current==NULL);
else {
- if(G.f & G_DEBUG) printf("undo %s\n", stack->current->name);
- undo_restore(C, stack, stack->current);
- stack->current= stack->current->prev;
+ if(!name || strcmp(stack->current->name, name) == 0) {
+ if(G.f & G_DEBUG) printf("undo %s\n", stack->current->name);
+ undo_restore(C, stack, stack->current);
+ stack->current= stack->current->prev;
+ return 1;
+ }
}
}
else if(step==-1) {
if((stack->current!=NULL && stack->current->next==NULL) || stack->elems.first==NULL);
else {
- undo= (stack->current && stack->current->next)? stack->current->next: stack->elems.first;
- undo_restore(C, stack, undo);
- stack->current= undo;
- if(G.f & G_DEBUG) printf("redo %s\n", undo->name);
+ if(!name || strcmp(stack->current->name, name) == 0) {
+ undo= (stack->current && stack->current->next)? stack->current->next: stack->elems.first;
+ undo_restore(C, stack, undo);
+ stack->current= undo;
+ if(G.f & G_DEBUG) printf("redo %s\n", undo->name);
+ return 1;
+ }
}
}
+
+ return 0;
}
static void undo_stack_free(UndoStack *stack)
@@ -181,7 +189,7 @@ static void undo_stack_free(UndoStack *stack)
/* Exported Functions */
-void undo_paint_push_begin(int type, char *name, UndoRestoreCb restore, UndoFreeCb free)
+void undo_paint_push_begin(int type, const char *name, UndoRestoreCb restore, UndoFreeCb free)
{
if(type == UNDO_PAINT_IMAGE)
undo_stack_push_begin(&ImageUndoStack, name, restore, free);
@@ -219,12 +227,14 @@ void undo_paint_push_end(int type)
undo_stack_push_end(&MeshUndoStack);
}
-void ED_undo_paint_step(bContext *C, int type, int step)
+int ED_undo_paint_step(bContext *C, int type, int step, const char *name)
{
if(type == UNDO_PAINT_IMAGE)
- undo_stack_step(C, &ImageUndoStack, step);
+ return undo_stack_step(C, &ImageUndoStack, step, name);
else if(type == UNDO_PAINT_MESH)
- undo_stack_step(C, &MeshUndoStack, step);
+ return undo_stack_step(C, &MeshUndoStack, step, name);
+
+ return 0;
}
void ED_undo_paint_free(void)
diff --git a/source/blender/editors/sculpt_paint/paint_utils.c b/source/blender/editors/sculpt_paint/paint_utils.c
index 9baa8e6f95e..47170dfdbdf 100644
--- a/source/blender/editors/sculpt_paint/paint_utils.c
+++ b/source/blender/editors/sculpt_paint/paint_utils.c
@@ -7,6 +7,7 @@
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
+#include "DNA_brush_types.h"
#include "RNA_access.h"
#include "RNA_define.h"
@@ -14,13 +15,10 @@
#include "BLI_math.h"
#include "BKE_brush.h"
-#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_DerivedMesh.h"
-#include "BKE_global.h"
#include "BKE_paint.h"
-#include "BKE_utildefines.h"
#include "BIF_gl.h"
@@ -216,7 +214,6 @@ void BRUSH_OT_curve_preset(wmOperatorType *ot)
{CURVE_PRESET_SHARP, "SHARP", 0, "Sharp", ""},
{CURVE_PRESET_SMOOTH, "SMOOTH", 0, "Smooth", ""},
{CURVE_PRESET_MAX, "MAX", 0, "Max", ""},
- {CURVE_PRESET_MID9, "MID9", 0, "Mid9", ""},
{CURVE_PRESET_LINE, "LINE", 0, "Line", ""},
{CURVE_PRESET_ROUND, "ROUND", 0, "Round", ""},
{CURVE_PRESET_ROOT, "ROOT", 0, "Root", ""},
@@ -229,7 +226,7 @@ void BRUSH_OT_curve_preset(wmOperatorType *ot)
ot->exec= brush_curve_preset_exec;
ot->poll= brush_curve_preset_poll;
- ot->flag= OPTYPE_UNDO;
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
RNA_def_enum(ot->srna, "shape", prop_shape_items, CURVE_PRESET_SMOOTH, "Mode", "");
}
diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c b/source/blender/editors/sculpt_paint/paint_vertex.c
index fde2d95cf29..4361f4f2fb4 100644
--- a/source/blender/editors/sculpt_paint/paint_vertex.c
+++ b/source/blender/editors/sculpt_paint/paint_vertex.c
@@ -38,44 +38,40 @@
#include "MEM_guardedalloc.h"
-#include "IMB_imbuf.h"
-#include "IMB_imbuf_types.h"
-
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BLI_memarena.h"
#include "BLI_cellalloc.h"
#include "BLI_ghash.h"
+#include "IMB_imbuf.h"
+#include "IMB_imbuf_types.h"
+
#include "DNA_armature_types.h"
#include "DNA_mesh_types.h"
#include "DNA_particle_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_brush_types.h"
+#include "DNA_object_types.h"
+#include "DNA_meshdata_types.h"
#include "RNA_access.h"
#include "RNA_define.h"
-#include "BKE_armature.h"
+#include "BKE_DerivedMesh.h"
#include "BKE_action.h"
#include "BKE_brush.h"
-#include "BKE_DerivedMesh.h"
-#include "BKE_cloth.h"
#include "BKE_context.h"
-#include "BKE_customdata.h"
#include "BKE_depsgraph.h"
#include "BKE_deform.h"
-#include "BKE_displist.h"
-#include "BKE_global.h"
#include "BKE_mesh.h"
#include "BKE_modifier.h"
#include "BKE_object.h"
#include "BKE_paint.h"
-#include "BKE_utildefines.h"
#include "WM_api.h"
#include "WM_types.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "ED_armature.h"
#include "ED_mesh.h"
@@ -101,7 +97,7 @@ int vertex_paint_mode_poll(bContext *C)
{
Object *ob = CTX_data_active_object(C);
- return ob && ob->mode == OB_MODE_VERTEX_PAINT;
+ return ob && ob->mode == OB_MODE_VERTEX_PAINT && ((Mesh *)ob->data)->totface;
}
int vertex_paint_poll(bContext *C)
@@ -113,8 +109,8 @@ int vertex_paint_poll(bContext *C)
ARegion *ar= CTX_wm_region(C);
if(ar->regiontype==RGN_TYPE_WINDOW)
return 1;
+ }
}
- }
return 0;
}
@@ -122,7 +118,7 @@ int weight_paint_mode_poll(bContext *C)
{
Object *ob = CTX_data_active_object(C);
- return ob && ob->mode == OB_MODE_WEIGHT_PAINT;
+ return ob && ob->mode == OB_MODE_WEIGHT_PAINT && ((Mesh *)ob->data)->totface;
}
int weight_paint_poll(bContext *C)
@@ -461,9 +457,8 @@ void wpaint_fill(VPaint *wp, Object *ob, float paintweight)
int actdef= 0;
char name[32];
- BLI_strncpy(name, defgroup->name, 32);
- bone_flip_name(name, 0); /* 0 = don't strip off number extensions */
-
+ flip_side_name(name, defgroup->name, FALSE);
+
for (curdef = ob->defbase.first; curdef; curdef=curdef->next, actdef++)
if (!strcmp(curdef->name, name))
break;
@@ -738,7 +733,7 @@ static void vpaint_blend(VPaint *vp, unsigned int *col, unsigned int *colorig, u
unsigned int testcol=0, a;
char *cp, *ct, *co;
- alpha= (int)(255.0*brush->alpha);
+ alpha= (int)(255.0*brush_alpha(brush));
if(brush->vertexpaint_tool==VP_MIX || brush->vertexpaint_tool==VP_BLUR) testcol= mcol_blend( *colorig, paintcol, alpha);
else if(brush->vertexpaint_tool==VP_ADD) testcol= mcol_add( *colorig, paintcol, alpha);
@@ -808,23 +803,24 @@ static float calc_vp_alpha_dl(VPaint *vp, ViewContext *vc, float vpimat[][3], fl
float fac, fac_2, size, dx, dy;
float alpha;
short vertco[2];
-
+ const int radius= brush_size(brush);
+
project_short_noclip(vc->ar, vert_nor, vertco);
dx= mval[0]-vertco[0];
dy= mval[1]-vertco[1];
- if (brush->flag & BRUSH_SIZE_PRESSURE)
- size = pressure * brush->size;
+ if (brush_use_size_pressure(brush))
+ size = pressure * radius;
else
- size = brush->size;
+ size = radius;
fac_2= dx*dx + dy*dy;
if(fac_2 > size*size) return 0.f;
fac = sqrtf(fac_2);
- alpha= brush->alpha * brush_curve_strength_clamp(brush, fac, size);
+ alpha= brush_alpha(brush) * brush_curve_strength_clamp(brush, fac, size);
- if (brush->flag & BRUSH_ALPHA_PRESSURE)
+ if (brush_use_alpha_pressure(brush))
alpha *= pressure;
if(vp->flag & VP_NORMALS) {
@@ -888,7 +884,7 @@ static void wpaint_blend(VPaint *wp, MDeformWeight *dw, MDeformWeight *uw, float
if((wp->flag & VP_SPRAY)==0) {
float testw=0.0f;
- alpha= brush->alpha;
+ alpha= brush_alpha(brush);
if(tool==VP_MIX || tool==VP_BLUR)
testw = paintval*alpha + uw->weight*(1.0-alpha);
else if(tool==VP_ADD)
@@ -1207,10 +1203,16 @@ static int vpaint_radial_control_invoke(bContext *C, wmOperator *op, wmEvent *ev
{
Paint *p = paint_get_active(CTX_data_scene(C));
Brush *brush = paint_brush(p);
+ float col[4];
WM_paint_cursor_end(CTX_wm_manager(C), p->paint_cursor);
p->paint_cursor = NULL;
brush_radial_control_invoke(op, brush, 1);
+
+ copy_v3_v3(col, brush->add_col);
+ col[3]= 0.5f;
+ RNA_float_set_array(op->ptr, "color", col);
+
return WM_radial_control_invoke(C, op, event);
}
@@ -1236,10 +1238,16 @@ static int wpaint_radial_control_invoke(bContext *C, wmOperator *op, wmEvent *ev
{
Paint *p = paint_get_active(CTX_data_scene(C));
Brush *brush = paint_brush(p);
+ float col[4];
WM_paint_cursor_end(CTX_wm_manager(C), p->paint_cursor);
p->paint_cursor = NULL;
brush_radial_control_invoke(op, brush, 1);
+
+ copy_v3_v3(col, brush->add_col);
+ col[3]= 0.5f;
+ RNA_float_set_array(op->ptr, "color", col);
+
return WM_radial_control_invoke(C, op, event);
}
@@ -1455,10 +1463,9 @@ static int wpaint_stroke_test_start(bContext *C, wmOperator *op, wmEvent *event)
bDeformGroup *curdef;
int actdef= 0;
char name[32];
-
- BLI_strncpy(name, defgroup->name, 32);
- bone_flip_name(name, 0); /* 0 = don't strip off number extensions */
-
+
+ flip_side_name(name, defgroup->name, FALSE);
+
for (curdef = ob->defbase.first; curdef; curdef=curdef->next, actdef++)
if (!strcmp(curdef->name, name))
break;
@@ -1510,7 +1517,7 @@ static void wpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, P
/* load projection matrix */
mul_m4_m4m4(mat, ob->obmat, vc->rv3d->persmat);
- flip = RNA_boolean_get(itemptr, "flip");
+ flip = RNA_boolean_get(itemptr, "pen_flip");
pressure = RNA_float_get(itemptr, "pressure");
RNA_float_get_array(itemptr, "mouse", mval);
mval[0]-= vc->ar->winrct.xmin;
@@ -1520,7 +1527,7 @@ static void wpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, P
/* which faces are involved */
if(wp->flag & VP_AREA) {
- totindex= sample_backbuf_area(vc, indexar, me->totface, mval[0], mval[1], brush->size);
+ totindex= sample_backbuf_area(vc, indexar, me->totface, mval[0], mval[1], brush_size(brush));
}
else {
indexar[0]= view3d_sample_backbuf(vc, mval[0], mval[1]);
@@ -1776,7 +1783,6 @@ void PAINT_OT_vertex_paint_toggle(wmOperatorType *ot)
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
-
}
@@ -1950,7 +1956,7 @@ static void vpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, P
float pressure, mval[2];
RNA_float_get_array(itemptr, "mouse", mval);
- flip = RNA_boolean_get(itemptr, "flip");
+ flip = RNA_boolean_get(itemptr, "pen_flip");
pressure = RNA_float_get(itemptr, "pressure");
view3d_operator_needs_opengl(C);
@@ -1964,7 +1970,7 @@ static void vpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, P
/* which faces are involved */
if(vp->flag & VP_AREA) {
- totindex= sample_backbuf_area(vc, indexar, me->totpoly, mval[0], mval[1], brush->size);
+ totindex= sample_backbuf_area(vc, indexar, me->totpoly, mval[0], mval[1], brush_size(brush));
}
else {
indexar[0]= view3d_sample_backbuf(vc, mval[0], mval[1]);
diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c
index 46980fdbd36..b1fd32c7607 100644
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@ -41,31 +41,22 @@
#include "BLI_editVert.h"
#include "BLI_rand.h"
-#include "DNA_key_types.h"
-#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
+#include "DNA_brush_types.h"
#include "BKE_brush.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_context.h"
-#include "BKE_customdata.h"
-#include "BKE_DerivedMesh.h"
#include "BKE_depsgraph.h"
-#include "BKE_global.h"
-#include "BKE_image.h"
#include "BKE_key.h"
#include "BKE_library.h"
-#include "BKE_main.h"
#include "BKE_mesh.h"
#include "BKE_modifier.h"
#include "BKE_multires.h"
#include "BKE_paint.h"
#include "BKE_report.h"
-#include "BKE_texture.h"
-#include "BKE_utildefines.h"
-#include "BKE_colortools.h"
#include "BIF_gl.h"
#include "BIF_glutil.h"
@@ -73,9 +64,7 @@
#include "WM_api.h"
#include "WM_types.h"
#include "ED_screen.h"
-#include "ED_sculpt.h"
#include "ED_view3d.h"
-#include "ED_mesh.h"
#include "paint_intern.h"
#include "sculpt_intern.h"
@@ -112,8 +101,14 @@ void ED_sculpt_force_update(bContext *C)
it's the last modifier on the stack and it is not on the first level */
struct MultiresModifierData *sculpt_multires_active(Scene *scene, Object *ob)
{
+ Mesh *me= (Mesh*)ob->data;
ModifierData *md, *nmd;
-
+
+ if(!CustomData_get_layer(&me->fdata, CD_MDISPS)) {
+ /* multires can't work without displacement layer */
+ return NULL;
+ }
+
for(md= modifiers_getVirtualModifierList(ob); md; md= md->next) {
if(md->type == eModifierType_Multires) {
MultiresModifierData *mmd= (MultiresModifierData*)md;
@@ -270,7 +265,7 @@ int sculpt_get_redraw_rect(ARegion *ar, RegionView3D *rv3d,
float bb_min[3], bb_max[3], pmat[4][4];
int i, j, k;
- if (G.rt == 1) {
+/* if (G.rt == 1) {
rect->xmin = cache->prect.xmin;
rect->xmax = cache->prect.xmax;
rect->ymin = cache->prect.ymin;
@@ -278,7 +273,7 @@ int sculpt_get_redraw_rect(ARegion *ar, RegionView3D *rv3d,
return rect->xmin < rect->xmax && rect->ymin < rect->ymax;;
}
-
+*/
view3d_get_object_project_mat(rv3d, ob, pmat);
if(!pbvh)
@@ -402,7 +397,7 @@ static int sculpt_brush_test_fast(SculptBrushTest *test, float co[3])
static int sculpt_brush_test_cube(SculptBrushTest *test, float co[3], float local[4][4])
{
- const static float side = 0.70710678118654752440084436210485; // sqrt(.5);
+ static const float side = 0.70710678118654752440084436210485; // sqrt(.5);
float local_co[3];
@@ -603,9 +598,10 @@ static float brush_strength(Sculpt *sd, StrokeCache *cache, float feather)
Brush *brush = paint_brush(&sd->paint);
/* Primary strength input; square it to make lower values more sensitive */
- float alpha = sculpt_get_brush_alpha(brush)*sculpt_get_brush_alpha(brush);
+ const float root_alpha = brush_alpha(brush);
+ float alpha = root_alpha*root_alpha;
float dir = brush->flag & BRUSH_DIR_IN ? -1 : 1;
- float pressure = brush->flag & BRUSH_ALPHA_PRESSURE ? cache->pressure : 1;
+ float pressure = brush_use_alpha_pressure(brush) ? cache->pressure : 1;
float pen_flip = cache->pen_flip ? -1 : 1;
float invert = cache->invert ? -1 : 1;
float accum = integrate_overlap(brush);
@@ -753,7 +749,7 @@ static float tex_strength(SculptSession *ss, Brush *br, float *point, const floa
else if(ss->texcache) {
float rotation = -mtex->rot;
float x, y, point_2d[3];
- float diameter;
+ float radius;
/* if the active area is being applied for symmetry, flip it
across the symmetry axis and rotate it back to the orignal
@@ -774,7 +770,7 @@ static float tex_strength(SculptSession *ss, Brush *br, float *point, const floa
point_2d[0] -= ss->cache->tex_mouse[0];
point_2d[1] -= ss->cache->tex_mouse[1];
- diameter = ss->cache->pixel_radius; // use pressure adjusted size for fixed mode
+ radius = ss->cache->pixel_radius; // use pressure adjusted size for fixed mode
x = point_2d[0];
y = point_2d[1];
@@ -782,7 +778,7 @@ static float tex_strength(SculptSession *ss, Brush *br, float *point, const floa
else /* else (mtex->brush_map_mode == MTEX_MAP_MODE_TILED),
leave the coordinates relative to the screen */
{
- diameter = sculpt_get_brush_size(br); // use unadjusted size for tiled mode
+ radius = brush_size(br); // use unadjusted size for tiled mode
x = point_2d[0] - ss->cache->vc->ar->winrct.xmin;
y = point_2d[1] - ss->cache->vc->ar->winrct.ymin;
@@ -796,8 +792,8 @@ static float tex_strength(SculptSession *ss, Brush *br, float *point, const floa
y -= 0.5f;
}
- x *= ss->cache->vc->ar->winx / diameter;
- y *= ss->cache->vc->ar->winy / diameter;
+ x *= ss->cache->vc->ar->winx / radius;
+ y *= ss->cache->vc->ar->winy / radius;
/* it is probably worth optimizing for those cases where
the texture is not rotated by skipping the calls to
@@ -1189,7 +1185,7 @@ static void smooth(Sculpt *sd, SculptSession *ss, PBVHNode **nodes, int totnode,
count = (int)(bstrength*max_iterations);
last = max_iterations*(bstrength - count*fract);
- for(iteration = 1; iteration <= count; ++iteration) {
+ for(iteration = 0; iteration <= count; ++iteration) {
#pragma omp parallel for schedule(guided) if (sd->flags & SCULPT_USE_OPENMP)
for(n=0; n<totnode; n++) {
if(ss->multires) {
@@ -1267,8 +1263,8 @@ static void do_crease_brush(Sculpt *sd, SculptSession *ss, PBVHNode **nodes, int
/* we divide out the squared alpha and multiply by the squared crease to give us the pinch strength */
- if(sculpt_get_brush_alpha(brush) > 0.0f)
- crease_correction = brush->crease_pinch_factor*brush->crease_pinch_factor/(sculpt_get_brush_alpha(brush)*sculpt_get_brush_alpha(brush));
+ if(brush_alpha(brush) > 0.0f)
+ crease_correction = brush->crease_pinch_factor*brush->crease_pinch_factor/(brush_alpha(brush)*brush_alpha(brush));
else
crease_correction = brush->crease_pinch_factor*brush->crease_pinch_factor;
@@ -1821,7 +1817,12 @@ static void calc_area_normal_and_flatten_center(Sculpt *sd, SculptSession *ss, P
normalize_v3(an);
// fc
- mul_v3_fl(fc, 1.0f / count);
+ if (count != 0) {
+ mul_v3_fl(fc, 1.0f / count);
+ }
+ else {
+ zero_v3(fc);
+ }
}
static void calc_sculpt_plane(Sculpt *sd, SculptSession *ss, PBVHNode **nodes, int totnode, float an[3], float fc[3])
@@ -2629,6 +2630,7 @@ static void do_symmetrical_brush_actions(Sculpt *sd, SculptSession *ss)
static void sculpt_update_tex(Sculpt *sd, SculptSession *ss)
{
Brush *brush = paint_brush(&sd->paint);
+ const int radius= brush_size(brush);
if(ss->texcache) {
MEM_freeN(ss->texcache);
@@ -2636,9 +2638,9 @@ static void sculpt_update_tex(Sculpt *sd, SculptSession *ss)
}
/* Need to allocate a bigger buffer for bigger brush size */
- ss->texcache_side = 2*sculpt_get_brush_size(brush);
+ ss->texcache_side = 2*radius;
if(!ss->texcache || ss->texcache_side > ss->texcache_actual) {
- ss->texcache = brush_gen_texture_cache(brush, sculpt_get_brush_size(brush));
+ ss->texcache = brush_gen_texture_cache(brush, radius);
ss->texcache_actual = ss->texcache_side;
}
}
@@ -2745,10 +2747,24 @@ static int sculpt_radial_control_invoke(bContext *C, wmOperator *op, wmEvent *ev
{
Paint *p = paint_get_active(CTX_data_scene(C));
Brush *brush = paint_brush(p);
+ float col[4], tex_col[4];
WM_paint_cursor_end(CTX_wm_manager(C), p->paint_cursor);
p->paint_cursor = NULL;
brush_radial_control_invoke(op, brush, 1);
+
+ if((brush->flag & BRUSH_DIR_IN) && ELEM4(brush->sculpt_tool, SCULPT_TOOL_DRAW, SCULPT_TOOL_INFLATE, SCULPT_TOOL_CLAY, SCULPT_TOOL_PINCH))
+ copy_v3_v3(col, brush->sub_col);
+ else
+ copy_v3_v3(col, brush->add_col);
+ col[3]= 0.5f;
+
+ copy_v3_v3(tex_col, U.sculpt_paint_overlay_col);
+ tex_col[3]= (brush->texture_overlay_alpha / 100.0f);
+
+ RNA_float_set_array(op->ptr, "color", col);
+ RNA_float_set_array(op->ptr, "texture_color", tex_col);
+
return WM_radial_control_invoke(C, op, event);
}
@@ -2812,50 +2828,6 @@ static void sculpt_cache_free(StrokeCache *cache)
MEM_freeN(cache);
}
-int sculpt_get_brush_size(Brush *brush)
-{
- return (U.sculpt_paint_settings & SCULPT_PAINT_USE_UNIFIED_SIZE) ? U.sculpt_paint_unified_size : brush->size;
-}
-
-void sculpt_set_brush_size(Brush *brush, int size)
-{
- if (U.sculpt_paint_settings & SCULPT_PAINT_USE_UNIFIED_SIZE)
- U.sculpt_paint_unified_size = size;
- else
- brush->size = size;
-}
-
-int sculpt_get_lock_brush_size(Brush *brush)
-{
- return (U.sculpt_paint_settings & SCULPT_PAINT_USE_UNIFIED_SIZE) ? (U.sculpt_paint_settings & SCULPT_PAINT_UNIFIED_LOCK_BRUSH_SIZE) : (brush->flag & BRUSH_LOCK_SIZE);
-}
-
-float sculpt_get_brush_unprojected_radius(Brush *brush)
-{
- return (U.sculpt_paint_settings & SCULPT_PAINT_USE_UNIFIED_SIZE) ? U.sculpt_paint_unified_unprojected_radius : brush->unprojected_radius;
-}
-
-void sculpt_set_brush_unprojected_radius(Brush *brush, float unprojected_radius)
-{
- if (U.sculpt_paint_settings & SCULPT_PAINT_USE_UNIFIED_SIZE)
- U.sculpt_paint_unified_unprojected_radius = unprojected_radius;
- else
- brush->unprojected_radius = unprojected_radius;
-}
-
-float sculpt_get_brush_alpha(Brush *brush)
-{
- return (U.sculpt_paint_settings & SCULPT_PAINT_USE_UNIFIED_ALPHA) ? U.sculpt_paint_unified_alpha : brush->alpha;
-}
-
-void sculpt_set_brush_alpha(Brush *brush, float alpha)
-{
- if (U.sculpt_paint_settings & SCULPT_PAINT_USE_UNIFIED_ALPHA)
- U.sculpt_paint_unified_alpha = alpha;
- else
- brush->alpha = alpha;
-}
-
/* Initialize the stroke cache invariants from operator properties */
static void sculpt_update_cache_invariants(bContext* C, Sculpt *sd, SculptSession *ss, wmOperator *op, wmEvent *event)
{
@@ -2916,18 +2888,13 @@ static void sculpt_update_cache_invariants(bContext* C, Sculpt *sd, SculptSessio
if (ss->cache->alt_smooth) {
Paint *p= &sd->paint;
Brush *br;
- int i;
BLI_strncpy(cache->saved_active_brush_name, brush->id.name+2, sizeof(cache->saved_active_brush_name));
- for(i = 0; i < p->brush_count; ++i) {
- br = p->brushes[i];
-
- if (strcmp(br->id.name+2, "Smooth")==0) {
- paint_brush_set(p, br);
- brush = br;
- break;
- }
+ br= (Brush *)find_id("BR", "Smooth");
+ if(br) {
+ paint_brush_set(p, br);
+ brush = br;
}
}
@@ -2982,6 +2949,78 @@ static void sculpt_update_cache_invariants(bContext* C, Sculpt *sd, SculptSessio
cache->vertex_rotation= 0;
}
+static void sculpt_update_brush_delta(Sculpt *sd, SculptSession *ss, Brush *brush)
+{
+ StrokeCache *cache = ss->cache;
+ int tool = brush->sculpt_tool;
+
+ if(ELEM5(tool,
+ SCULPT_TOOL_GRAB, SCULPT_TOOL_NUDGE,
+ SCULPT_TOOL_CLAY_TUBES, SCULPT_TOOL_SNAKE_HOOK,
+ SCULPT_TOOL_THUMB)) {
+ float grab_location[3], imat[4][4], delta[3];
+
+ if(cache->first_time) {
+ copy_v3_v3(cache->orig_grab_location,
+ cache->true_location);
+ }
+ else if(tool == SCULPT_TOOL_SNAKE_HOOK)
+ add_v3_v3(cache->true_location, cache->grab_delta);
+
+ /* compute 3d coordinate at same z from original location + mouse */
+ initgrabz(cache->vc->rv3d,
+ cache->orig_grab_location[0],
+ cache->orig_grab_location[1],
+ cache->orig_grab_location[2]);
+
+ window_to_3d_delta(cache->vc->ar, grab_location,
+ cache->mouse[0], cache->mouse[1]);
+
+ /* compute delta to move verts by */
+ if(!cache->first_time) {
+ switch(tool) {
+ case SCULPT_TOOL_GRAB:
+ case SCULPT_TOOL_THUMB:
+ sub_v3_v3v3(delta, grab_location, cache->old_grab_location);
+ invert_m4_m4(imat, ss->ob->obmat);
+ mul_mat3_m4_v3(imat, delta);
+ add_v3_v3(cache->grab_delta, delta);
+ break;
+ case SCULPT_TOOL_CLAY_TUBES:
+ case SCULPT_TOOL_NUDGE:
+ sub_v3_v3v3(cache->grab_delta, grab_location, cache->old_grab_location);
+ invert_m4_m4(imat, ss->ob->obmat);
+ mul_mat3_m4_v3(imat, cache->grab_delta);
+ break;
+ case SCULPT_TOOL_SNAKE_HOOK:
+ sub_v3_v3v3(cache->grab_delta, grab_location, cache->old_grab_location);
+ invert_m4_m4(imat, ss->ob->obmat);
+ mul_mat3_m4_v3(imat, cache->grab_delta);
+ break;
+ }
+ }
+ else {
+ zero_v3(cache->grab_delta);
+ }
+
+ copy_v3_v3(cache->old_grab_location, grab_location);
+
+ if(tool == SCULPT_TOOL_GRAB)
+ copy_v3_v3(sd->anchored_location, cache->true_location);
+ else if(tool == SCULPT_TOOL_THUMB)
+ copy_v3_v3(sd->anchored_location, cache->orig_grab_location);
+
+ if(ELEM(tool, SCULPT_TOOL_GRAB, SCULPT_TOOL_THUMB)) {
+ /* location stays the same for finding vertices in brush radius */
+ copy_v3_v3(cache->true_location, cache->orig_grab_location);
+
+ sd->draw_anchored = 1;
+ copy_v3_v3(sd->anchored_initial_mouse, cache->initial_mouse);
+ sd->anchored_size = cache->pixel_radius;
+ }
+ }
+}
+
/* Initialize the stroke cache variants from operator properties */
static void sculpt_update_cache_variants(bContext *C, Sculpt *sd, SculptSession *ss, struct PaintStroke *stroke, PointerRNA *ptr)
{
@@ -3012,22 +3051,22 @@ static void sculpt_update_cache_variants(bContext *C, Sculpt *sd, SculptSession
sd->pressure_value= cache->pressure;
cache->previous_pixel_radius = cache->pixel_radius;
- cache->pixel_radius = sculpt_get_brush_size(brush);
+ cache->pixel_radius = brush_size(brush);
if(cache->first_time) {
- if (!sculpt_get_lock_brush_size(brush)) {
- cache->initial_radius= unproject_brush_radius(ss->ob, cache->vc, cache->true_location, sculpt_get_brush_size(brush));
- sculpt_set_brush_unprojected_radius(brush, cache->initial_radius);
+ if (!brush_use_locked_size(brush)) {
+ cache->initial_radius= unproject_brush_radius(ss->ob, cache->vc, cache->true_location, brush_size(brush));
+ brush_set_unprojected_radius(brush, cache->initial_radius);
}
else {
- cache->initial_radius= sculpt_get_brush_unprojected_radius(brush);
+ cache->initial_radius= brush_unprojected_radius(brush);
}
if (ELEM(brush->sculpt_tool, SCULPT_TOOL_GRAB, SCULPT_TOOL_SNAKE_HOOK))
cache->initial_radius *= 2.0f;
}
- if(brush->flag & BRUSH_SIZE_PRESSURE) {
+ if(brush_use_size_pressure(brush)) {
cache->pixel_radius *= cache->pressure;
cache->radius= cache->initial_radius * cache->pressure;
}
@@ -3058,20 +3097,15 @@ static void sculpt_update_cache_variants(bContext *C, Sculpt *sd, SculptSession
cache->special_rotation = atan2(dx, dy) + M_PI;
if (brush->flag & BRUSH_EDGE_TO_EDGE) {
- float d[3];
- float halfway[3];
+ float halfway[2];
float out[3];
- d[0] = dx;
- d[1] = dy;
- d[2] = 0;
-
- mul_v3_v3fl(halfway, d, 0.5f);
- add_v3_v3(halfway, cache->initial_mouse);
+ halfway[0] = dx*0.5 + cache->initial_mouse[0];
+ halfway[1] = dy*0.5 + cache->initial_mouse[1];
if (sculpt_stroke_get_location(C, stroke, out, halfway)) {
copy_v3_v3(sd->anchored_location, out);
- copy_v3_v3(sd->anchored_initial_mouse, halfway);
+ copy_v2_v2(sd->anchored_initial_mouse, halfway);
copy_v2_v2(cache->tex_mouse, halfway);
copy_v3_v3(cache->true_location, sd->anchored_location);
sd->anchored_size /= 2.0f;
@@ -3099,7 +3133,7 @@ static void sculpt_update_cache_variants(bContext *C, Sculpt *sd, SculptSession
const float dy = cache->last_rake[1] - cache->mouse[1];
if (cache->first_time) {
- copy_v3_v3(cache->last_rake, cache->mouse);
+ copy_v2_v2(cache->last_rake, cache->mouse);
}
else if (dx*dx + dy*dy >= r*r) {
cache->special_rotation = atan2(dx, dy);
@@ -3109,129 +3143,13 @@ static void sculpt_update_cache_variants(bContext *C, Sculpt *sd, SculptSession
}
}
- /* Find the grab delta */
- if(brush->sculpt_tool == SCULPT_TOOL_GRAB) {
- float grab_location[3], imat[4][4];
-
- if(cache->first_time)
- copy_v3_v3(cache->orig_grab_location, cache->true_location);
-
- /* compute 3d coordinate at same z from original location + mouse */
- initgrabz(cache->vc->rv3d, cache->orig_grab_location[0],
- cache->orig_grab_location[1], cache->orig_grab_location[2]);
- window_to_3d_delta(cache->vc->ar, grab_location, cache->mouse[0], cache->mouse[1]);
-
- /* compute delta to move verts by */
- if(!cache->first_time) {
- float delta[3];
- sub_v3_v3v3(delta, grab_location, cache->old_grab_location);
- invert_m4_m4(imat, ss->ob->obmat);
- mul_mat3_m4_v3(imat, delta);
- add_v3_v3(cache->grab_delta, delta);
- }
- else {
- zero_v3(cache->grab_delta);
- }
-
- copy_v3_v3(cache->old_grab_location, grab_location);
-
- /* location stays the same for finding vertices in brush radius */
- copy_v3_v3(cache->true_location, cache->orig_grab_location);
-
- sd->draw_anchored = 1;
- copy_v3_v3(sd->anchored_location, cache->true_location);
- copy_v3_v3(sd->anchored_initial_mouse, cache->initial_mouse);
- sd->anchored_size = cache->pixel_radius;
- }
- /* Find the nudge/clay tubes delta */
- else if(brush->sculpt_tool == SCULPT_TOOL_NUDGE || brush->sculpt_tool == SCULPT_TOOL_CLAY_TUBES) {
- float grab_location[3], imat[4][4];
-
- if(cache->first_time)
- copy_v3_v3(cache->orig_grab_location, cache->true_location);
-
- /* compute 3d coordinate at same z from original location + mouse */
- initgrabz(cache->vc->rv3d, cache->orig_grab_location[0],
- cache->orig_grab_location[1], cache->orig_grab_location[2]);
- window_to_3d_delta(cache->vc->ar, grab_location, cache->mouse[0], cache->mouse[1]);
-
- /* compute delta to move verts by */
- if (!cache->first_time) {
- sub_v3_v3v3(cache->grab_delta, grab_location, cache->old_grab_location);
- invert_m4_m4(imat, ss->ob->obmat);
- mul_mat3_m4_v3(imat, cache->grab_delta);
- }
- else {
- zero_v3(cache->grab_delta);
- }
-
- copy_v3_v3(cache->old_grab_location, grab_location);
- }
- /* Find the snake hook delta */
- else if(brush->sculpt_tool == SCULPT_TOOL_SNAKE_HOOK) {
- float grab_location[3], imat[4][4];
-
- if(cache->first_time)
- copy_v3_v3(cache->orig_grab_location, cache->true_location);
- else
- add_v3_v3(cache->true_location, cache->grab_delta);
-
- /* compute 3d coordinate at same z from original location + mouse */
- initgrabz(cache->vc->rv3d, cache->orig_grab_location[0],
- cache->orig_grab_location[1], cache->orig_grab_location[2]);
- window_to_3d_delta(cache->vc->ar, grab_location, cache->mouse[0], cache->mouse[1]);
-
- /* compute delta to move verts by */
- if (!cache->first_time) {
- sub_v3_v3v3(cache->grab_delta, grab_location, cache->old_grab_location);
- invert_m4_m4(imat, ss->ob->obmat);
- mul_mat3_m4_v3(imat, cache->grab_delta);
- }
- else {
- zero_v3(cache->grab_delta);
- }
-
- copy_v3_v3(cache->old_grab_location, grab_location);
- }
- /* Find the thumb delta */
- else if(brush->sculpt_tool == SCULPT_TOOL_THUMB) {
- float grab_location[3], imat[4][4];
-
- if(cache->first_time)
- copy_v3_v3(cache->orig_grab_location, cache->true_location);
+ sculpt_update_brush_delta(sd, ss, brush);
- /* compute 3d coordinate at same z from original location + mouse */
- initgrabz(cache->vc->rv3d, cache->orig_grab_location[0],
- cache->orig_grab_location[1], cache->orig_grab_location[2]);
- window_to_3d_delta(cache->vc->ar, grab_location, cache->mouse[0], cache->mouse[1]);
-
- /* compute delta to move verts by */
- if (!cache->first_time) {
- float delta[3];
- sub_v3_v3v3(delta, grab_location, cache->old_grab_location);
- invert_m4_m4(imat, ss->ob->obmat);
- mul_mat3_m4_v3(imat, delta);
- add_v3_v3(cache->grab_delta, delta);
- }
- else {
- zero_v3(cache->grab_delta);
- }
-
- copy_v3_v3(cache->old_grab_location, grab_location);
-
- /* location stays the same for finding vertices in brush radius */
- copy_v3_v3(cache->true_location, cache->orig_grab_location);
-
- sd->draw_anchored = 1;
- copy_v3_v3(sd->anchored_location, cache->orig_grab_location);
- copy_v3_v3(sd->anchored_initial_mouse, cache->initial_mouse);
- sd->anchored_size = cache->pixel_radius;
- }
- else if(brush->sculpt_tool == SCULPT_TOOL_ROTATE) {
+ if(brush->sculpt_tool == SCULPT_TOOL_ROTATE) {
dx = cache->mouse[0] - cache->initial_mouse[0];
dy = cache->mouse[1] - cache->initial_mouse[1];
- cache->vertex_rotation = -atan2(dx, dy) / 4.0f;
+ cache->vertex_rotation = -atan2(dx, dy);
sd->draw_anchored = 1;
copy_v2_v2(sd->anchored_initial_mouse, cache->initial_mouse);
@@ -3354,7 +3272,7 @@ static void sculpt_restore_mesh(Sculpt *sd, SculptSession *ss)
/* Restore the mesh before continuing with anchored stroke */
if((brush->flag & BRUSH_ANCHORED) ||
- (brush->sculpt_tool == SCULPT_TOOL_GRAB && (brush->flag & BRUSH_SIZE_PRESSURE)) ||
+ (brush->sculpt_tool == SCULPT_TOOL_GRAB && brush_use_size_pressure(brush)) ||
(brush->flag & BRUSH_RESTORE_MESH))
{
StrokeCache *cache = ss->cache;
@@ -3406,6 +3324,8 @@ static void sculpt_flush_update(bContext *C)
if(mmd)
multires_mark_as_modified(ob);
+ if(ob->derivedFinal) /* VBO no longer valid */
+ GPU_drawobject_free(ob->derivedFinal);
if(ss->modifiers_active) {
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
@@ -3518,16 +3438,9 @@ static void sculpt_stroke_done(bContext *C, struct PaintStroke *unused)
/* Alt-Smooth */
if (ss->cache->alt_smooth) {
Paint *p= &sd->paint;
- Brush *br;
- int i;
-
- for(i = 0; i < p->brush_count; ++i) {
- br = p->brushes[i];
-
- if (strcmp(br->id.name+2, ss->cache->saved_active_brush_name)==0) {
- paint_brush_set(p, br);
- break;
- }
+ Brush *br= (Brush *)find_id("BR", ss->cache->saved_active_brush_name);
+ if(br) {
+ paint_brush_set(p, br);
}
}
@@ -3669,7 +3582,7 @@ static void SCULPT_OT_set_persistent_base(wmOperatorType *ot)
ot->exec= sculpt_set_persistent_base;
ot->poll= sculpt_mode_poll;
- ot->flag= 0;//OPTYPE_REGISTER;
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
/**** Toggle operator for turning sculpt mode on or off ****/
@@ -3677,8 +3590,8 @@ static void SCULPT_OT_set_persistent_base(wmOperatorType *ot)
static void sculpt_init_session(Scene *scene, Object *ob)
{
ob->sculpt = MEM_callocN(sizeof(SculptSession), "sculpt session");
- ob->sculpt->ob = ob;
-
+ ob->sculpt->ob = ob;
+
sculpt_update_mesh_elements(scene, ob, 0);
}
@@ -3750,7 +3663,7 @@ static void SCULPT_OT_sculptmode_toggle(wmOperatorType *ot)
ot->exec= sculpt_toggle_mode;
ot->poll= ED_operator_object_active;
- ot->flag= 0;
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
void ED_operatortypes_sculpt()
diff --git a/source/blender/editors/sculpt_paint/sculpt_intern.h b/source/blender/editors/sculpt_paint/sculpt_intern.h
index a46823a0b28..254876d9b68 100644
--- a/source/blender/editors/sculpt_paint/sculpt_intern.h
+++ b/source/blender/editors/sculpt_paint/sculpt_intern.h
@@ -111,6 +111,6 @@ struct MultiresModifierData *sculpt_multires_active(struct Scene *scene, struct
int sculpt_modifiers_active(Scene *scene, Object *ob);
void sculpt_vertcos_to_key(Object *ob, KeyBlock *kb, float (*vertCos)[3]);
-void brush_jitter_pos(Brush *brush, float *pos, float *jitterpos);
+void brush_jitter_pos(struct Brush *brush, float *pos, float *jitterpos);
#endif
diff --git a/source/blender/editors/sculpt_paint/sculpt_undo.c b/source/blender/editors/sculpt_paint/sculpt_undo.c
index e4121c9c76a..e92740678fd 100644
--- a/source/blender/editors/sculpt_paint/sculpt_undo.c
+++ b/source/blender/editors/sculpt_paint/sculpt_undo.c
@@ -30,6 +30,8 @@
*
*/
+#include "MEM_guardedalloc.h"
+
#include "BLI_math.h"
#include "BLI_ghash.h"
#include "BLI_threads.h"
@@ -38,7 +40,6 @@
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_mesh_types.h"
-#include "DNA_key_types.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_context.h"
@@ -46,7 +47,6 @@
#include "BKE_modifier.h"
#include "BKE_multires.h"
#include "BKE_paint.h"
-#include "BKE_mesh.h"
#include "BKE_key.h"
#include "WM_api.h"
diff --git a/source/blender/editors/sound/Makefile b/source/blender/editors/sound/Makefile
index 10145035eb4..f51e15627a2 100644
--- a/source/blender/editors/sound/Makefile
+++ b/source/blender/editors/sound/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
@@ -37,6 +37,8 @@ CFLAGS += $(LEVEL_1_C_WARNINGS)
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
+CPPFLAGS += -I$(NAN_PYTHON)/include/python$(NAN_PYTHON_VERSION)
+
CPPFLAGS += -I../../windowmanager
CPPFLAGS += -I../../blenkernel
CPPFLAGS += -I../../blenloader
diff --git a/source/blender/editors/sound/sound_ops.c b/source/blender/editors/sound/sound_ops.c
index 678295376ba..fe1fe3266bc 100644
--- a/source/blender/editors/sound/sound_ops.c
+++ b/source/blender/editors/sound/sound_ops.c
@@ -36,15 +36,14 @@
#include "DNA_scene_types.h"
#include "DNA_space_types.h"
#include "DNA_sequence_types.h"
+#include "DNA_sound_types.h"
#include "DNA_userdef_types.h"
#include "BKE_context.h"
#include "BKE_global.h"
-#include "BKE_main.h"
#include "BKE_report.h"
#include "BKE_packedFile.h"
#include "BKE_sound.h"
-#include "BKE_utildefines.h"
#include "BLI_blenlib.h"
diff --git a/source/blender/editors/space_action/Makefile b/source/blender/editors/space_action/Makefile
index e856587acca..19aeb54cc2f 100644
--- a/source/blender/editors/space_action/Makefile
+++ b/source/blender/editors/space_action/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/space_action/action_draw.c b/source/blender/editors/space_action/action_draw.c
index 7ed07372e96..d2067790b2f 100644
--- a/source/blender/editors/space_action/action_draw.c
+++ b/source/blender/editors/space_action/action_draw.c
@@ -34,7 +34,6 @@
#include <string.h>
#include <float.h>
-#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
@@ -45,19 +44,12 @@
#include "DNA_screen_types.h"
#include "BKE_action.h"
-#include "BKE_depsgraph.h"
-#include "BKE_fcurve.h"
-#include "BKE_key.h"
-#include "BKE_material.h"
-#include "BKE_object.h"
-#include "BKE_global.h" // XXX remove me!
#include "BKE_context.h"
#include "BKE_utildefines.h"
/* Everything from source (BIF, BDR, BSE) ------------------------------ */
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "UI_interface.h"
#include "UI_resources.h"
diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c
index 0e2a7f690c5..916b0032f17 100644
--- a/source/blender/editors/space_action/action_edit.c
+++ b/source/blender/editors/space_action/action_edit.c
@@ -32,7 +32,6 @@
#include <string.h>
#include <float.h>
-#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
@@ -46,15 +45,10 @@
#include "RNA_enum_types.h"
#include "BKE_action.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
-#include "BKE_key.h"
-#include "BKE_material.h"
#include "BKE_nla.h"
-#include "BKE_object.h"
#include "BKE_context.h"
#include "BKE_report.h"
-#include "BKE_utildefines.h"
#include "UI_view2d.h"
diff --git a/source/blender/editors/space_action/action_ops.c b/source/blender/editors/space_action/action_ops.c
index fa9968b2524..19dd4512909 100644
--- a/source/blender/editors/space_action/action_ops.c
+++ b/source/blender/editors/space_action/action_ops.c
@@ -29,14 +29,11 @@
#include <stdlib.h>
#include <math.h>
-#include "MEM_guardedalloc.h"
#include "DNA_space_types.h"
#include "BLI_blenlib.h"
-#include "BKE_context.h"
-#include "BKE_utildefines.h"
#include "ED_transform.h"
@@ -145,7 +142,6 @@ static void action_keymap_keyframes (wmKeyConfig *keyconf, wmKeyMap *keymap)
WM_keymap_add_item(keymap, "ACTION_OT_delete", XKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "ACTION_OT_delete", DELKEY, KM_PRESS, 0, 0);
- WM_keymap_add_item(keymap, "ACTION_OT_delete", BACKSPACEKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "ACTION_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0);
WM_keymap_add_item(keymap, "ACTION_OT_keyframe_insert", IKEY, KM_PRESS, 0, 0);
diff --git a/source/blender/editors/space_action/action_select.c b/source/blender/editors/space_action/action_select.c
index e852afa9a87..b2c47194384 100644
--- a/source/blender/editors/space_action/action_select.c
+++ b/source/blender/editors/space_action/action_select.c
@@ -42,15 +42,9 @@
#include "RNA_access.h"
#include "RNA_define.h"
-#include "BKE_action.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
-#include "BKE_key.h"
-#include "BKE_material.h"
#include "BKE_nla.h"
-#include "BKE_object.h"
#include "BKE_context.h"
-#include "BKE_utildefines.h"
#include "UI_view2d.h"
@@ -65,6 +59,7 @@
#include "action_intern.h"
+
/* ************************************************************************** */
/* KEYFRAMES STUFF */
@@ -994,7 +989,7 @@ static void mouse_action_keys (bAnimContext *ac, int mval[2], short select_mode,
return;
}
else if (ale->type == ANIMTYPE_GPLAYER) {
- bGPDlayer *gpl= (bGPDlayer *)ale->data;
+ struct bGPDlayer *gpl= (struct bGPDlayer *)ale->data;
gpl_to_keylist(ads, gpl, &anim_keys, NULL);
}
diff --git a/source/blender/editors/space_action/space_action.c b/source/blender/editors/space_action/space_action.c
index bad35d9d3e6..7b96618d923 100644
--- a/source/blender/editors/space_action/space_action.c
+++ b/source/blender/editors/space_action/space_action.c
@@ -38,10 +38,8 @@
#include "BLI_math.h"
#include "BLI_rand.h"
-#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "ED_screen.h"
diff --git a/source/blender/editors/space_api/Makefile b/source/blender/editors/space_api/Makefile
index 474fbe89053..deaa46a9582 100644
--- a/source/blender/editors/space_api/Makefile
+++ b/source/blender/editors/space_api/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/space_api/space.c b/source/blender/editors/space_api/space.c
index 66cb88ebf70..e862358c465 100644
--- a/source/blender/editors/space_api/space.c
+++ b/source/blender/editors/space_api/space.c
@@ -29,13 +29,10 @@
#include <string.h>
#include <stdio.h>
-#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
-#include "BKE_context.h"
-#include "BKE_screen.h"
/* */
diff --git a/source/blender/editors/space_api/spacetypes.c b/source/blender/editors/space_api/spacetypes.c
index b0f6d456dcc..1ed00b43e2b 100644
--- a/source/blender/editors/space_api/spacetypes.c
+++ b/source/blender/editors/space_api/spacetypes.c
@@ -39,7 +39,6 @@
#include "UI_interface.h"
#include "UI_view2d.h"
-#include "BIF_gl.h"
#include "ED_anim_api.h"
#include "ED_armature.h"
diff --git a/source/blender/editors/space_buttons/Makefile b/source/blender/editors/space_buttons/Makefile
index a4894ede06b..28758fb168b 100644
--- a/source/blender/editors/space_buttons/Makefile
+++ b/source/blender/editors/space_buttons/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/space_buttons/buttons_context.c b/source/blender/editors/space_buttons/buttons_context.c
index da6f9fa3f1e..343237dee5e 100644
--- a/source/blender/editors/space_buttons/buttons_context.c
+++ b/source/blender/editors/space_buttons/buttons_context.c
@@ -36,11 +36,11 @@
#include "DNA_node_types.h"
#include "DNA_scene_types.h"
#include "DNA_world_types.h"
+#include "DNA_brush_types.h"
#include "BLI_listbase.h"
#include "BKE_context.h"
-#include "BKE_global.h"
#include "BKE_action.h"
#include "BKE_material.h"
#include "BKE_modifier.h"
@@ -49,7 +49,6 @@
#include "BKE_screen.h"
#include "BKE_texture.h"
#include "BKE_utildefines.h"
-#include "BKE_world.h"
#include "RNA_access.h"
@@ -342,7 +341,7 @@ static int buttons_context_path_brush(const bContext *C, ButsContextPath *path)
br= paint_brush(paint_get_active(scene));
if(br) {
- RNA_id_pointer_create(&br->id, &path->ptr[path->len]);
+ RNA_id_pointer_create((ID *)br, &path->ptr[path->len]);
path->len++;
return 1;
diff --git a/source/blender/editors/space_buttons/buttons_header.c b/source/blender/editors/space_buttons/buttons_header.c
index d8cbbb0cbae..ab756b638fa 100644
--- a/source/blender/editors/space_buttons/buttons_header.c
+++ b/source/blender/editors/space_buttons/buttons_header.c
@@ -30,20 +30,15 @@
#include <stdio.h>
-#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BKE_context.h"
-#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "ED_screen.h"
#include "ED_types.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "UI_interface.h"
#include "UI_resources.h"
diff --git a/source/blender/editors/space_buttons/buttons_ops.c b/source/blender/editors/space_buttons/buttons_ops.c
index ebdc0d37b43..c4357008a9c 100644
--- a/source/blender/editors/space_buttons/buttons_ops.c
+++ b/source/blender/editors/space_buttons/buttons_ops.c
@@ -35,7 +35,6 @@
#include "BLI_fileops.h"
#include "BKE_context.h"
-#include "BKE_global.h" /* G.sce only */
#include "WM_api.h"
#include "WM_types.h"
diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c
index e28fcf8c28a..9d34b827ff9 100644
--- a/source/blender/editors/space_buttons/space_buttons.c
+++ b/source/blender/editors/space_buttons/space_buttons.c
@@ -36,7 +36,6 @@
#include "BLI_math.h"
#include "BLI_rand.h"
-#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_screen.h"
@@ -191,24 +190,14 @@ void buttons_keymap(struct wmKeyConfig *keyconf)
WM_keymap_add_item(keymap, "BUTTONS_OT_toolbox", RIGHTMOUSE, KM_PRESS, 0, 0);
}
-//#define PY_HEADER
/* add handlers, stuff you only do once or on area/region changes */
static void buttons_header_area_init(wmWindowManager *wm, ARegion *ar)
{
-#ifdef PY_HEADER
- ED_region_header_init(ar);
-#else
UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_HEADER, ar->winx, ar->winy);
-#endif
}
static void buttons_header_area_draw(const bContext *C, ARegion *ar)
{
-#ifdef PY_HEADER
- ED_region_header(C, ar);
-#else
-
-
/* clear */
UI_ThemeClearColor(ED_screen_area_active(C)?TH_HEADER:TH_HEADERDESEL);
glClear(GL_COLOR_BUFFER_BIT);
@@ -217,7 +206,6 @@ static void buttons_header_area_draw(const bContext *C, ARegion *ar)
UI_view2d_view_ortho(C, &ar->v2d);
buttons_header_buttons(C, ar);
-#endif
/* restore view matrix? */
UI_view2d_view_restore(C);
@@ -341,7 +329,6 @@ static void buttons_area_listener(ScrArea *sa, wmNotifier *wmn)
break;
case NC_BRUSH:
buttons_area_redraw(sa, BCONTEXT_TEXTURE);
- sbuts->preview= 1;
break;
case NC_TEXTURE:
case NC_IMAGE:
@@ -363,6 +350,10 @@ static void buttons_area_listener(ScrArea *sa, wmNotifier *wmn)
ED_area_tag_redraw(sa);
break;
}
+ /* Listener for preview render, when doing an global undo. */
+ case NC_WINDOW:
+ ED_area_tag_redraw(sa);
+ sbuts->preview= 1;
}
if(wmn->data == ND_KEYS)
diff --git a/source/blender/editors/space_console/Makefile b/source/blender/editors/space_console/Makefile
index 3f760b1ad67..4ae157507e0 100644
--- a/source/blender/editors/space_console/Makefile
+++ b/source/blender/editors/space_console/Makefile
@@ -17,7 +17,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2009 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/space_console/console_draw.c b/source/blender/editors/space_console/console_draw.c
index 2fab998b9b6..74d47ad675d 100644
--- a/source/blender/editors/space_console/console_draw.c
+++ b/source/blender/editors/space_console/console_draw.c
@@ -33,7 +33,6 @@
#include <sys/stat.h>
#include <limits.h>
-#include "MEM_guardedalloc.h"
#include "BLF_api.h"
@@ -42,10 +41,7 @@
#include "DNA_space_types.h"
#include "DNA_screen_types.h"
-#include "BKE_global.h"
-#include "BKE_main.h"
// #include "BKE_suggestions.h"
-#include "BKE_text.h"
#include "BKE_report.h"
#include "BKE_utildefines.h"
diff --git a/source/blender/editors/space_console/console_ops.c b/source/blender/editors/space_console/console_ops.c
index 089e769e0d9..9a53531ba73 100644
--- a/source/blender/editors/space_console/console_ops.c
+++ b/source/blender/editors/space_console/console_ops.c
@@ -39,13 +39,7 @@
#include "BLI_blenlib.h"
#include "BLI_dynstr.h"
-#include "BKE_utildefines.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
-#include "BKE_global.h"
-#include "BKE_library.h"
-#include "BKE_main.h"
-#include "BKE_report.h"
#include "BKE_text.h" /* only for character utility funcs */
#include "WM_api.h"
diff --git a/source/blender/editors/space_console/console_report.c b/source/blender/editors/space_console/console_report.c
index 50829e4365c..51bffa5b981 100644
--- a/source/blender/editors/space_console/console_report.c
+++ b/source/blender/editors/space_console/console_report.c
@@ -36,13 +36,7 @@
#include "BLI_blenlib.h"
#include "BLI_dynstr.h"
-#include "BKE_utildefines.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
-#include "BKE_global.h"
-#include "BKE_library.h"
-#include "BKE_main.h"
-#include "BKE_report.h"
#include "WM_api.h"
#include "WM_types.h"
diff --git a/source/blender/editors/space_console/space_console.c b/source/blender/editors/space_console/space_console.c
index c04f8183bee..4ee69bbd809 100644
--- a/source/blender/editors/space_console/space_console.c
+++ b/source/blender/editors/space_console/space_console.c
@@ -35,14 +35,12 @@
#include "MEM_guardedalloc.h"
-#include "BLO_readfile.h" /* get the ID name for dnd*/
-
#include "BLI_blenlib.h"
#include "BLI_math.h"
-#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_screen.h"
+#include "BKE_idcode.h"
#include "ED_screen.h"
@@ -178,7 +176,7 @@ static void id_drop_copy(wmDrag *drag, wmDropBox *drop)
char text[64];
ID *id= drag->poin;
- snprintf(text, sizeof(text), "bpy.data.%s['%s']", BLO_idcode_to_name_plural(GS(id->name)), id->name+2);
+ snprintf(text, sizeof(text), "bpy.data.%s['%s']", BKE_idcode_to_name_plural(GS(id->name)), id->name+2);
/* copy drag path to properties */
RNA_string_set(drop->ptr, "text", text);
diff --git a/source/blender/editors/space_file/CMakeLists.txt b/source/blender/editors/space_file/CMakeLists.txt
index 021e25953b0..5cbe9bbe0ba 100644
--- a/source/blender/editors/space_file/CMakeLists.txt
+++ b/source/blender/editors/space_file/CMakeLists.txt
@@ -36,21 +36,29 @@ SET(INC
../../windowmanager
)
-IF(WITH_OPENEXR)
+IF(WITH_IMAGE_OPENEXR)
ADD_DEFINITIONS(-DWITH_OPENEXR)
-ENDIF(WITH_OPENEXR)
+ENDIF(WITH_IMAGE_OPENEXR)
-IF(WITH_TIFF)
+IF(WITH_IMAGE_TIFF)
ADD_DEFINITIONS(-DWITH_TIFF)
-ENDIF(WITH_TIFF)
+ENDIF(WITH_IMAGE_TIFF)
-IF(WITH_OPENJPEG)
+IF(WITH_IMAGE_OPENJPEG)
ADD_DEFINITIONS(-DWITH_OPENJPEG)
-ENDIF(WITH_OPENJPEG)
+ENDIF(WITH_IMAGE_OPENJPEG)
-IF(WITH_DDS)
+IF(WITH_IMAGE_DDS)
ADD_DEFINITIONS(-DWITH_DDS)
-ENDIF(WITH_DDS)
+ENDIF(WITH_IMAGE_DDS)
+
+IF(WITH_IMAGE_CINEON)
+ ADD_DEFINITIONS(-DWITH_CINEON)
+ENDIF(WITH_IMAGE_CINEON)
+
+IF(WITH_IMAGE_HDR)
+ ADD_DEFINITIONS(-DWITH_HDR)
+ENDIF(WITH_IMAGE_HDR)
IF(WIN32)
SET(INC ${INC} ${PTHREADS_INC})
diff --git a/source/blender/editors/space_file/Makefile b/source/blender/editors/space_file/Makefile
index 29548b51222..1fc27795f08 100644
--- a/source/blender/editors/space_file/Makefile
+++ b/source/blender/editors/space_file/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
@@ -67,3 +67,10 @@ ifeq ($(WITH_TIFF), true)
CPPFLAGS += -DWITH_TIFF
endif
+ifeq ($(WITH_CINEON), true)
+ CPPFLAGS += -DWITH_CINEON
+endif
+
+ifeq ($(WITH_HDR), true)
+ CPPFLAGS += -DWITH_HDR
+endif \ No newline at end of file
diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c
index 03ab42b467d..f25fab45c7c 100644
--- a/source/blender/editors/space_file/file_draw.c
+++ b/source/blender/editors/space_file/file_draw.c
@@ -38,11 +38,8 @@
#include "BIF_gl.h"
#include "BIF_glutil.h"
-#include "BKE_colortools.h"
#include "BKE_context.h"
-#include "BKE_screen.h"
#include "BKE_global.h"
-#include "BKE_utildefines.h"
#include "BLF_api.h"
@@ -429,21 +426,25 @@ static void renamebutton_cb(bContext *C, void *arg1, char *oldname)
SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C);
ARegion* ar = CTX_wm_region(C);
+#if 0
struct direntry *file = (struct direntry *)arg1;
+#endif
BLI_make_file_string(G.sce, orgname, sfile->params->dir, oldname);
- BLI_strncpy(filename, file->relname, sizeof(filename));
+ BLI_strncpy(filename, sfile->params->renameedit, sizeof(filename));
BLI_make_file_string(G.sce, newname, sfile->params->dir, filename);
if( strcmp(orgname, newname) != 0 ) {
if (!BLI_exists(newname)) {
BLI_rename(orgname, newname);
/* to make sure we show what is on disk */
+#if 0 /* this is cleared anyway, no need */
+ MEM_freeN(file->relname);
+ file->relname= BLI_strdup(sfile->params->renameedit);
+#endif
ED_fileselect_clear(C, sfile);
- } else {
- BLI_strncpy(file->relname, oldname, strlen(oldname)+1);
}
-
+
ED_region_tag_redraw(ar);
}
}
@@ -538,7 +539,7 @@ void file_draw_list(const bContext *C, ARegion *ar)
int but_width = (FILE_IMGDISPLAY == params->display) ? layout->tile_w : layout->column_widths[COLUMN_NAME];
uiBut *but = uiDefBut(block, TEX, 1, "", spos, sy-layout->tile_h-3,
- but_width, layout->textheight*2, file->relname, 1.0f, (float)FILE_MAX,0,0,"");
+ but_width, layout->textheight*2, sfile->params->renameedit, 1.0f, (float)sizeof(sfile->params->renameedit),0,0,"");
uiButSetRenameFunc(but, renamebutton_cb, file);
if ( 0 == uiButActiveOnly(C, block, but)) {
file->flags &= ~EDITING;
diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c
index 55a44b36a52..2a50b505c57 100644
--- a/source/blender/editors/space_file/file_ops.c
+++ b/source/blender/editors/space_file/file_ops.c
@@ -333,7 +333,7 @@ static int file_select_all_exec(bContext *C, wmOperator *op)
void FILE_OT_select_all_toggle(wmOperatorType *ot)
{
/* identifiers */
- ot->name= "Select/Deselect all files";
+ ot->name= "Select/Deselect All Files";
ot->description= "Select/deselect all files";
ot->idname= "FILE_OT_select_all_toggle";
@@ -945,7 +945,7 @@ int file_directory_exec(bContext *C, wmOperator *unused)
if ( sfile->params->dir[0] == '~' ) {
char tmpstr[sizeof(sfile->params->dir)-1];
strncpy(tmpstr, sfile->params->dir+1, sizeof(tmpstr));
- BLI_join_dirfile(sfile->params->dir, BLI_gethome(), tmpstr);
+ BLI_join_dirfile(sfile->params->dir, BLI_getDefaultDocumentFolder(), tmpstr);
}
#ifdef WIN32
diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c
index 70ef857699a..c3bea2a5bea 100644
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@ -52,25 +52,14 @@
#endif
#include "BKE_context.h"
-#include "BKE_utildefines.h"
#include "BKE_global.h"
#include "BKE_library.h"
-#include "BKE_global.h"
#include "BKE_main.h"
#include "BKE_report.h"
#include "BLO_readfile.h"
+#include "BKE_idcode.h"
#include "DNA_space_types.h"
-#include "DNA_ipo_types.h"
-#include "DNA_ID.h"
-#include "DNA_object_types.h"
-#include "DNA_listBase.h"
-#include "DNA_lamp_types.h"
-#include "DNA_material_types.h"
-#include "DNA_texture_types.h"
-#include "DNA_world_types.h"
-#include "DNA_scene_types.h"
-#include "DNA_userdef_types.h"
#include "ED_datafiles.h"
@@ -828,133 +817,13 @@ void filelist_setfiletypes(struct FileList* filelist, short has_quicktime)
file->flags |= BTXFILE;
} else if(BLI_testextensie(file->relname, ".dae")) {
file->flags |= COLLADAFILE;
- } else if (has_quicktime){
- if( BLI_testextensie(file->relname, ".int")
- || BLI_testextensie(file->relname, ".inta")
- || BLI_testextensie(file->relname, ".jpg")
-#ifdef WITH_OPENJPEG
- || BLI_testextensie(file->relname, ".jp2")
-#endif
- || BLI_testextensie(file->relname, ".jpeg")
- || BLI_testextensie(file->relname, ".tga")
- || BLI_testextensie(file->relname, ".rgb")
- || BLI_testextensie(file->relname, ".rgba")
- || BLI_testextensie(file->relname, ".bmp")
- || BLI_testextensie(file->relname, ".png")
- || BLI_testextensie(file->relname, ".iff")
- || BLI_testextensie(file->relname, ".lbm")
- || BLI_testextensie(file->relname, ".gif")
- || BLI_testextensie(file->relname, ".psd")
- || BLI_testextensie(file->relname, ".tif")
- || BLI_testextensie(file->relname, ".tiff")
- || BLI_testextensie(file->relname, ".tx")
- || BLI_testextensie(file->relname, ".pct")
- || BLI_testextensie(file->relname, ".pict")
- || BLI_testextensie(file->relname, ".pntg") //macpaint
- || BLI_testextensie(file->relname, ".qtif")
- || BLI_testextensie(file->relname, ".sgi")
- || BLI_testextensie(file->relname, ".hdr")
-#ifdef WITH_DDS
- || BLI_testextensie(file->relname, ".dds")
-#endif
-#ifdef WITH_OPENEXR
- || BLI_testextensie(file->relname, ".exr")
-#endif
- ) {
- file->flags |= IMAGEFILE;
- }
- else if(BLI_testextensie(file->relname, ".avi")
- || BLI_testextensie(file->relname, ".flc")
- || BLI_testextensie(file->relname, ".mov")
- || BLI_testextensie(file->relname, ".movie")
- || BLI_testextensie(file->relname, ".mp4")
- || BLI_testextensie(file->relname, ".m4v")
- || BLI_testextensie(file->relname, ".mv")
- || BLI_testextensie(file->relname, ".wmv")
- || BLI_testextensie(file->relname, ".ogv")
- || BLI_testextensie(file->relname, ".mpeg")
- || BLI_testextensie(file->relname, ".dv")
- || BLI_testextensie(file->relname, ".mpg")
- || BLI_testextensie(file->relname, ".mpg2")
- || BLI_testextensie(file->relname, ".vob")
- || BLI_testextensie(file->relname, ".mkv")
- || BLI_testextensie(file->relname, ".flv")
- || BLI_testextensie(file->relname, ".divx")
- || BLI_testextensie(file->relname, ".xvid")) {
- file->flags |= MOVIEFILE;
- }
- else if(BLI_testextensie(file->relname, ".wav")
- || BLI_testextensie(file->relname, ".ogg")
- || BLI_testextensie(file->relname, ".oga")
- || BLI_testextensie(file->relname, ".mp3")
- || BLI_testextensie(file->relname, ".mp2")
- || BLI_testextensie(file->relname, ".ac3")
- || BLI_testextensie(file->relname, ".aac")
- || BLI_testextensie(file->relname, ".flac")
- || BLI_testextensie(file->relname, ".wma")
- || BLI_testextensie(file->relname, ".eac3")) {
- file->flags |= SOUNDFILE;
- }
- } else { // no quicktime
- if(BLI_testextensie(file->relname, ".int")
- || BLI_testextensie(file->relname, ".inta")
- || BLI_testextensie(file->relname, ".jpg")
- || BLI_testextensie(file->relname, ".jpeg")
-#ifdef WITH_OPENJPEG
- || BLI_testextensie(file->relname, ".jp2")
-#endif
- || BLI_testextensie(file->relname, ".tga")
- || BLI_testextensie(file->relname, ".rgb")
- || BLI_testextensie(file->relname, ".rgba")
- || BLI_testextensie(file->relname, ".bmp")
- || BLI_testextensie(file->relname, ".png")
- || BLI_testextensie(file->relname, ".iff")
- || BLI_testextensie(file->relname, ".tif")
- || BLI_testextensie(file->relname, ".tiff")
- || BLI_testextensie(file->relname, ".tx")
- || BLI_testextensie(file->relname, ".hdr")
-#ifdef WITH_DDS
- || BLI_testextensie(file->relname, ".dds")
-#endif
-#ifdef WITH_OPENEXR
- || BLI_testextensie(file->relname, ".exr")
-#endif
- || BLI_testextensie(file->relname, ".lbm")
- || BLI_testextensie(file->relname, ".sgi")) {
+ } else if(BLI_testextensie_array(file->relname, imb_ext_image)
+ || (has_quicktime && BLI_testextensie_array(file->relname, imb_ext_image_qt))) {
file->flags |= IMAGEFILE;
- }
- else if(BLI_testextensie(file->relname, ".avi")
- || BLI_testextensie(file->relname, ".flc")
- || BLI_testextensie(file->relname, ".mov")
- || BLI_testextensie(file->relname, ".movie")
- || BLI_testextensie(file->relname, ".mp4")
- || BLI_testextensie(file->relname, ".m4v")
- || BLI_testextensie(file->relname, ".mv")
- || BLI_testextensie(file->relname, ".wmv")
- || BLI_testextensie(file->relname, ".ogv")
- || BLI_testextensie(file->relname, ".dv")
- || BLI_testextensie(file->relname, ".mpeg")
- || BLI_testextensie(file->relname, ".mpg")
- || BLI_testextensie(file->relname, ".mpg2")
- || BLI_testextensie(file->relname, ".vob")
- || BLI_testextensie(file->relname, ".mkv")
- || BLI_testextensie(file->relname, ".flv")
- || BLI_testextensie(file->relname, ".divx")
- || BLI_testextensie(file->relname, ".xvid")) {
- file->flags |= MOVIEFILE;
- }
- else if(BLI_testextensie(file->relname, ".wav")
- || BLI_testextensie(file->relname, ".ogg")
- || BLI_testextensie(file->relname, ".oga")
- || BLI_testextensie(file->relname, ".mp3")
- || BLI_testextensie(file->relname, ".mp2")
- || BLI_testextensie(file->relname, ".ac3")
- || BLI_testextensie(file->relname, ".aac")
- || BLI_testextensie(file->relname, ".flac")
- || BLI_testextensie(file->relname, ".wma")
- || BLI_testextensie(file->relname, ".eac3")) {
- file->flags |= SOUNDFILE;
- }
+ } else if(BLI_testextensie_array(file->relname, imb_ext_movie)) {
+ file->flags |= MOVIEFILE;
+ } else if(BLI_testextensie_array(file->relname, imb_ext_audio)) {
+ file->flags |= SOUNDFILE;
}
}
}
@@ -1013,7 +882,7 @@ static int groupname_to_code(char *group)
if (lslash)
lslash[0]= '\0';
- return BLO_idcode_from_name(buf);
+ return BKE_idcode_from_name(buf);
}
void filelist_from_library(struct FileList* filelist)
diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c
index 086d4f9cce2..52d59270663 100644
--- a/source/blender/editors/space_file/filesel.c
+++ b/source/blender/editors/space_file/filesel.c
@@ -62,10 +62,7 @@
#include "BLI_storage_types.h"
#include "BLI_dynstr.h"
-#include "BLO_readfile.h"
-
#include "BKE_context.h"
-#include "BKE_screen.h"
#include "BKE_global.h"
#include "BLF_api.h"
@@ -76,8 +73,6 @@
#include "WM_api.h"
#include "WM_types.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "RNA_access.h"
@@ -207,6 +202,13 @@ short ED_fileselect_set_params(SpaceFile *sfile)
params->filter = 0;
params->sort = FILE_SORT_ALPHA;
}
+
+
+ /* initialize the list with previous folders */
+ if (!sfile->folders_prev)
+ sfile->folders_prev = folderlist_new();
+ folderlist_pushdir(sfile->folders_prev, sfile->params->dir);
+
return 1;
}
diff --git a/source/blender/editors/space_file/fsmenu.c b/source/blender/editors/space_file/fsmenu.c
index 6699c0b8bc7..8211257da02 100644
--- a/source/blender/editors/space_file/fsmenu.c
+++ b/source/blender/editors/space_file/fsmenu.c
@@ -55,7 +55,6 @@
#define ID ID_
#include <CoreServices/CoreServices.h>
-#include "BKE_utildefines.h"
#endif
#ifdef __linux__
@@ -338,7 +337,7 @@ void fsmenu_read_system(struct FSMenu* fsmenu)
/* As 10.4 doesn't provide proper API to retrieve the favorite places,
assume they are the standard ones
TODO : replace hardcoded paths with proper BLI_get_folder calls */
- home = BLI_gethome();
+ home = getenv("HOME");
if(home) {
BLI_snprintf(line, 256, "%s/", home);
fsmenu_insert_entry(fsmenu, FS_CATEGORY_BOOKMARKS, line, 1, 0);
@@ -458,7 +457,7 @@ void fsmenu_read_system(struct FSMenu* fsmenu)
#else
/* unix */
{
- char *home= BLI_gethome();
+ char *home= getenv("HOME");
if(home) {
BLI_snprintf(line, FILE_MAXDIR, "%s/", home);
diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c
index 261b7058151..7b9423332f2 100644
--- a/source/blender/editors/space_file/space_file.c
+++ b/source/blender/editors/space_file/space_file.c
@@ -43,7 +43,6 @@
#include "BLI_rand.h"
#include "BLI_storage_types.h"
-#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_screen.h"
@@ -233,6 +232,7 @@ static void file_refresh(const bContext *C, ScrArea *sa)
file->flags |= EDITING;
}
}
+ BLI_strncpy(sfile->params->renameedit, sfile->params->renamefile, sizeof(sfile->params->renameedit));
params->renamefile[0] = '\0';
}
if (sfile->layout) sfile->layout->dirty= 1;
@@ -393,8 +393,6 @@ void file_keymap(struct wmKeyConfig *keyconf)
WM_keymap_add_item(keymap, "FILE_OT_directory_new", IKEY, KM_PRESS, 0, 0); /* XXX needs button */
WM_keymap_add_item(keymap, "FILE_OT_delete", XKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "FILE_OT_delete", DELKEY, KM_PRESS, 0, 0);
- WM_keymap_add_item(keymap, "FILE_OT_delete", BACKSPACEKEY, KM_PRESS, KM_CTRL, 0);
- WM_keymap_add_item(keymap, "FILE_OT_delete", BACKSPACEKEY, KM_PRESS, KM_OSKEY, 0);
WM_keymap_verify_item(keymap, "FILE_OT_smoothscroll", TIMER1, KM_ANY, KM_ANY, 0);
/* keys for main area */
diff --git a/source/blender/editors/space_file/writeimage.c b/source/blender/editors/space_file/writeimage.c
index 05efdc12596..b69bfdc0231 100644
--- a/source/blender/editors/space_file/writeimage.c
+++ b/source/blender/editors/space_file/writeimage.c
@@ -29,7 +29,6 @@
#include <string.h>
-#include "MEM_guardedalloc.h"
#include "IMB_imbuf.h"
#include "IMB_imbuf_types.h"
@@ -43,7 +42,6 @@
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_image.h"
-#include "BKE_utildefines.h"
#include "RE_pipeline.h"
@@ -125,9 +123,11 @@ static void save_rendered_image_cb_real(char *name, int confirm)
void save_image_filesel_str(Scene *scene, char *str)
{
switch(scene->r.imtype) {
+#ifdef WITH_HDR
case R_RADHDR:
strcpy(str, "Save Radiance HDR");
break;
+#endif
case R_FFMPEG:
case R_H264:
case R_XVID:
@@ -153,12 +153,14 @@ void save_image_filesel_str(Scene *scene, char *str)
strcpy(str, "Save OpenEXR");
break;
#endif
+#ifdef WITH_CINEON
case R_CINEON:
strcpy(str, "Save Cineon");
break;
case R_DPX:
strcpy(str, "Save DPX");
break;
+#endif
case R_RAWTGA:
strcpy(str, "Save Raw Targa");
break;
@@ -168,9 +170,6 @@ void save_image_filesel_str(Scene *scene, char *str)
case R_IRIZ:
strcpy(str, "Save IRIS");
break;
- case R_HAMX:
- strcpy(str, "Save HAMX");
- break;
case R_TARGA:
strcpy(str, "Save Targa");
break;
diff --git a/source/blender/editors/space_graph/Makefile b/source/blender/editors/space_graph/Makefile
index 65cdf1a3ffb..1ac744af239 100644
--- a/source/blender/editors/space_graph/Makefile
+++ b/source/blender/editors/space_graph/Makefile
@@ -17,7 +17,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
@@ -37,6 +37,8 @@ include nan_compile.mk
CFLAGS += $(LEVEL_1_C_WARNINGS)
+CPPFLAGS += -I$(NAN_PYTHON)/include/python$(NAN_PYTHON_VERSION)
+
CPPFLAGS += -I$(NAN_GLEW)/include
CPPFLAGS += -I$(OPENGL_HEADERS)
CPPFLAGS += -I$(NAN_AUDASPACE)/include
diff --git a/source/blender/editors/space_graph/graph_buttons.c b/source/blender/editors/space_graph/graph_buttons.c
index bf433923707..14f684dd9e3 100644
--- a/source/blender/editors/space_graph/graph_buttons.c
+++ b/source/blender/editors/space_graph/graph_buttons.c
@@ -42,21 +42,12 @@
#include "BLI_editVert.h"
#include "BLI_rand.h"
-#include "BKE_action.h"
-#include "BKE_animsys.h"
#include "BKE_context.h"
-#include "BKE_curve.h"
-#include "BKE_customdata.h"
#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
-#include "BKE_library.h"
#include "BKE_main.h"
-#include "BKE_object.h"
-#include "BKE_scene.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
-#include "BIF_gl.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -159,7 +150,7 @@ static void graph_panel_view(const bContext *C, Panel *pa)
uiItemR(row, &sceneptr, "frame_current", 0, "Cursor X", 0);
uiItemEnumO(row, "GRAPH_OT_snap", "To Keys", 0, "type", GRAPHKEYS_SNAP_CFRA);
row= uiLayoutSplit(subcol, 0.7, 1);
- uiItemR(row, &spaceptr, "cursor_value", 0, "Cursor Y", 0);
+ uiItemR(row, &spaceptr, "cursor_position_y", 0, "Cursor Y", 0);
uiItemEnumO(row, "GRAPH_OT_snap", "To Keys", 0, "type", GRAPHKEYS_SNAP_VALUE);
}
@@ -281,11 +272,11 @@ static void graph_panel_key_properties(const bContext *C, Panel *pa)
/* previous handle - only if previous was Bezier interpolation */
if ((prevbezt) && (prevbezt->ipo == BEZT_IPO_BEZ))
- uiItemR(col, &bezt_ptr, "handle1", 0, NULL, 0);
+ uiItemR(col, &bezt_ptr, "handle_left", 0, NULL, 0);
/* next handle - only if current is Bezier interpolation */
if (bezt->ipo == BEZT_IPO_BEZ)
- uiItemR(col, &bezt_ptr, "handle2", 0, NULL, 0);
+ uiItemR(col, &bezt_ptr, "handle_right", 0, NULL, 0);
}
else
uiItemL(layout, "No active keyframe on F-Curve", 0);
@@ -299,16 +290,17 @@ static void graph_panel_key_properties(const bContext *C, Panel *pa)
static void do_graph_region_driver_buttons(bContext *C, void *arg, int event)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
switch (event) {
case B_IPO_DEPCHANGE:
{
/* rebuild depsgraph for the new deps */
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
/* force an update of depsgraph */
- DAG_ids_flush_update(0);
+ DAG_ids_flush_update(bmain, 0);
}
break;
}
@@ -465,7 +457,7 @@ static void graph_panel_driverVar__locDiff(const bContext *C, uiLayout *layout,
uiItemPointerR(col, &dtar_ptr, "bone_target", &tar_ptr, "bones", "", ICON_BONE_DATA);
}
- uiItemR(col, &dtar_ptr, "use_local_space_transforms", 0, NULL, 0);
+ uiItemR(col, &dtar_ptr, "use_local_space_transform", 0, NULL, 0);
col= uiLayoutColumn(layout, 1);
uiTemplateAnyID(col, (bContext *)C, &dtar2_ptr, "id", "id_type", "Ob/Bone 2:");
@@ -477,7 +469,7 @@ static void graph_panel_driverVar__locDiff(const bContext *C, uiLayout *layout,
uiItemPointerR(col, &dtar2_ptr, "bone_target", &tar_ptr, "bones", "", ICON_BONE_DATA);
}
- uiItemR(col, &dtar2_ptr, "use_local_space_transforms", 0, NULL, 0);
+ uiItemR(col, &dtar2_ptr, "use_local_space_transform", 0, NULL, 0);
}
/* settings for 'transform channel' driver variable type */
@@ -504,7 +496,7 @@ static void graph_panel_driverVar__transChan(const bContext *C, uiLayout *layout
row= uiLayoutRow(layout, 1);
uiItemR(row, &dtar_ptr, "transform_type", 0, "", 0);
- uiItemR(row, &dtar_ptr, "use_local_space_transforms", 0, NULL, 0);
+ uiItemR(row, &dtar_ptr, "use_local_space_transform", 0, NULL, 0);
}
/* driver settings for active F-Curve (only for 'Drivers' mode) */
diff --git a/source/blender/editors/space_graph/graph_draw.c b/source/blender/editors/space_graph/graph_draw.c
index 543bd8b9964..f780a6c31ee 100644
--- a/source/blender/editors/space_graph/graph_draw.c
+++ b/source/blender/editors/space_graph/graph_draw.c
@@ -35,7 +35,6 @@
#include <io.h>
#endif
-#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
@@ -46,15 +45,9 @@
#include "DNA_space_types.h"
#include "DNA_windowmanager_types.h"
-#include "BKE_animsys.h"
#include "BKE_context.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
-#include "BKE_global.h"
-#include "BKE_key.h"
-#include "BKE_object.h"
-#include "BKE_screen.h"
#include "BKE_utildefines.h"
#include "BIF_gl.h"
diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c
index 6249edc1090..5c692ba1112 100644
--- a/source/blender/editors/space_graph/graph_edit.c
+++ b/source/blender/editors/space_graph/graph_edit.c
@@ -47,16 +47,10 @@
#include "RNA_define.h"
#include "RNA_enum_types.h"
-#include "BKE_action.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
-#include "BKE_key.h"
-#include "BKE_material.h"
#include "BKE_nla.h"
-#include "BKE_object.h"
#include "BKE_context.h"
#include "BKE_report.h"
-#include "BKE_utildefines.h"
#include "UI_interface.h"
#include "UI_view2d.h"
@@ -1049,7 +1043,7 @@ static int graphkeys_sound_bake_exec(bContext *C, wmOperator *op)
RNA_float_get(op->ptr, "release"),
RNA_float_get(op->ptr, "threshold"),
RNA_boolean_get(op->ptr, "accumulate"),
- RNA_boolean_get(op->ptr, "additive"),
+ RNA_boolean_get(op->ptr, "use_additive"),
RNA_boolean_get(op->ptr, "square"),
RNA_float_get(op->ptr, "sthreshold"),
FPS, &sbi.length);
@@ -1124,7 +1118,7 @@ void GRAPH_OT_sound_bake (wmOperatorType *ot)
RNA_def_float(ot->srna, "release", 0.2, 0.0, 5.0, "Release time", "", 0.01, 0.2);
RNA_def_float(ot->srna, "threshold", 0.0, 0.0, 1.0, "Threshold", "", 0.01, 0.1);
RNA_def_boolean(ot->srna, "accumulate", 0, "Accumulate", "");
- RNA_def_boolean(ot->srna, "additive", 0, "Additive", "");
+ RNA_def_boolean(ot->srna, "use_additive", 0, "Additive", "");
RNA_def_boolean(ot->srna, "square", 0, "Square", "");
RNA_def_float(ot->srna, "sthreshold", 0.1, 0.0, 1.0, "Square Threshold", "", 0.01, 0.1);
}
diff --git a/source/blender/editors/space_graph/graph_ops.c b/source/blender/editors/space_graph/graph_ops.c
index fa9acb282c7..0069e6e0675 100644
--- a/source/blender/editors/space_graph/graph_ops.c
+++ b/source/blender/editors/space_graph/graph_ops.c
@@ -29,7 +29,6 @@
#include <stdlib.h>
#include <math.h>
-#include "MEM_guardedalloc.h"
#include "DNA_scene_types.h"
@@ -37,7 +36,6 @@
#include "BKE_context.h"
#include "BKE_sound.h"
-#include "BKE_utildefines.h"
#include "UI_view2d.h"
@@ -174,7 +172,7 @@ void GRAPH_OT_cursor_set(wmOperatorType *ot)
ot->poll= ED_operator_ipo_active;
/* flags */
- ot->flag= OPTYPE_BLOCKING;
+ ot->flag= OPTYPE_BLOCKING|OPTYPE_UNDO;
/* rna */
RNA_def_int(ot->srna, "frame", 0, MINAFRAME, MAXFRAME, "Frame", "", MINAFRAME, MAXFRAME);
@@ -347,7 +345,6 @@ static void graphedit_keymap_keyframes (wmKeyConfig *keyconf, wmKeyMap *keymap)
WM_keymap_add_item(keymap, "GRAPH_OT_delete", XKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "GRAPH_OT_delete", DELKEY, KM_PRESS, 0, 0);
- WM_keymap_add_item(keymap, "GRAPH_OT_delete", BACKSPACEKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "GRAPH_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0);
diff --git a/source/blender/editors/space_graph/graph_select.c b/source/blender/editors/space_graph/graph_select.c
index 6a9d8801e28..cdc8166f2d6 100644
--- a/source/blender/editors/space_graph/graph_select.c
+++ b/source/blender/editors/space_graph/graph_select.c
@@ -43,15 +43,9 @@
#include "RNA_access.h"
#include "RNA_define.h"
-#include "BKE_action.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
-#include "BKE_key.h"
-#include "BKE_material.h"
#include "BKE_nla.h"
-#include "BKE_object.h"
#include "BKE_context.h"
-#include "BKE_utildefines.h"
#include "UI_view2d.h"
diff --git a/source/blender/editors/space_graph/graph_utils.c b/source/blender/editors/space_graph/graph_utils.c
index ad96370e4fa..927149a268d 100644
--- a/source/blender/editors/space_graph/graph_utils.c
+++ b/source/blender/editors/space_graph/graph_utils.c
@@ -42,20 +42,9 @@
#include "BLI_editVert.h"
#include "BLI_rand.h"
-#include "BKE_animsys.h"
-#include "BKE_action.h"
#include "BKE_context.h"
-#include "BKE_curve.h"
-#include "BKE_customdata.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
-#include "BKE_object.h"
-#include "BKE_global.h"
-#include "BKE_scene.h"
-#include "BKE_screen.h"
-#include "BKE_utildefines.h"
-#include "BIF_gl.h"
#include "WM_api.h"
diff --git a/source/blender/editors/space_graph/space_graph.c b/source/blender/editors/space_graph/space_graph.c
index 1e006ca38ec..ca372d74da6 100644
--- a/source/blender/editors/space_graph/space_graph.c
+++ b/source/blender/editors/space_graph/space_graph.c
@@ -43,7 +43,6 @@
#include "BKE_main.h"
#include "BKE_fcurve.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "ED_screen.h"
#include "ED_anim_api.h"
diff --git a/source/blender/editors/space_image/CMakeLists.txt b/source/blender/editors/space_image/CMakeLists.txt
index fce56b9c239..59749a47afd 100644
--- a/source/blender/editors/space_image/CMakeLists.txt
+++ b/source/blender/editors/space_image/CMakeLists.txt
@@ -34,13 +34,13 @@ SET(INC
../../windowmanager
)
-IF(WITH_OPENEXR)
+IF(WITH_IMAGE_OPENEXR)
ADD_DEFINITIONS(-DWITH_OPENEXR)
-ENDIF(WITH_OPENEXR)
+ENDIF(WITH_IMAGE_OPENEXR)
-IF(WITH_TIFF)
+IF(WITH_IMAGE_TIFF)
ADD_DEFINITIONS(-DWITH_TIFF)
-ENDIF(WITH_TIFF)
+ENDIF(WITH_IMAGE_TIFF)
IF(WITH_LCMS)
SET(INC ${INC} ${LCMS_INCLUDE_DIR})
diff --git a/source/blender/editors/space_image/Makefile b/source/blender/editors/space_image/Makefile
index ab30ff607ec..51a29115813 100644
--- a/source/blender/editors/space_image/Makefile
+++ b/source/blender/editors/space_image/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
@@ -58,7 +58,20 @@ ifeq ($(WITH_OPENEXR), true)
CPPFLAGS += -DWITH_OPENEXR
endif
-ifeq ($(WHITH_TIFF), true)
+ifeq ($(WITH_TIFF), true)
CPPFLAGS += -DWITH_TIFF
endif
+ifeq ($(WITH_LCMS), true)
+ CPPFLAGS += -DWITH_LCMS
+ CPPFLAGS += -I$(BF_LCMS_INC)
+endif
+
+ifeq ($(WITH_CINEON), true)
+ CPPFLAGS += -DWITH_CINEON
+endif
+
+ifeq ($(WITH_HDR), true)
+ CPPFLAGS += -DWITH_HDR
+endif
+
diff --git a/source/blender/editors/space_image/image_buttons.c b/source/blender/editors/space_image/image_buttons.c
index e9b094ee8fb..44f3f5f5764 100644
--- a/source/blender/editors/space_image/image_buttons.c
+++ b/source/blender/editors/space_image/image_buttons.c
@@ -45,15 +45,9 @@
#include "BKE_context.h"
#include "BKE_customdata.h"
#include "BKE_image.h"
-#include "BKE_global.h"
-#include "BKE_library.h"
-#include "BKE_main.h"
#include "BKE_mesh.h"
#include "BKE_node.h"
-#include "BKE_packedFile.h"
-#include "BKE_paint.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "BKE_tessmesh.h"
#include "RE_pipeline.h"
@@ -66,8 +60,6 @@
#include "ED_screen.h"
#include "ED_uvedit.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "RNA_access.h"
@@ -759,7 +751,7 @@ void uiTemplateImage(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propn
prop= RNA_struct_find_property(ptr, propname);
if(!prop) {
- printf("uiTemplateImage: property not found: %s\n", propname);
+ printf("uiTemplateImage: property not found: %s.%s\n", RNA_struct_identifier(ptr->type), propname);
return;
}
@@ -777,7 +769,7 @@ void uiTemplateImage(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propn
uiLayoutSetContextPointer(layout, "edit_image", &imaptr);
if(!compact)
- uiTemplateID(layout, C, ptr, propname, "IMAGE_OT_new", "IMAGE_OT_open", NULL, NULL);
+ uiTemplateID(layout, C, ptr, propname, "IMAGE_OT_new", "IMAGE_OT_open", NULL);
// XXX missing: reload, pack
@@ -871,13 +863,13 @@ void uiTemplateImage(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propn
split= uiLayoutSplit(layout, 0, 0);
col= uiLayoutColumn(split, 0);
- uiItemR(col, &imaptr, "fields", 0, NULL, 0);
+ uiItemR(col, &imaptr, "use_fields", 0, NULL, 0);
row= uiLayoutRow(col, 0);
uiItemR(row, &imaptr, "field_order", UI_ITEM_R_EXPAND, NULL, 0);
- uiLayoutSetActive(row, RNA_boolean_get(&imaptr, "fields"));
+ uiLayoutSetActive(row, RNA_boolean_get(&imaptr, "use_fields"));
col= uiLayoutColumn(split, 0);
- uiItemR(col, &imaptr, "premultiply", 0, NULL, 0);
+ uiItemR(col, &imaptr, "use_premultiply", 0, NULL, 0);
}
}
@@ -890,7 +882,7 @@ void uiTemplateImage(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propn
sprintf(str, "(%d) Frames", iuser->framenr);
row= uiLayoutRow(col, 1);
- uiItemR(col, userptr, "frames", 0, str, 0);
+ uiItemR(col, userptr, "frame_duration", 0, str, 0);
if(ima->anim) {
block= uiLayoutGetBlock(row);
but= uiDefBut(block, BUT, 0, "Match Movie Length", 0, 0, UI_UNIT_X*2, UI_UNIT_Y, 0, 0, 0, 0, 0, "Set the number of frames to match the movie or sequence.");
@@ -898,12 +890,12 @@ void uiTemplateImage(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propn
}
uiItemR(col, userptr, "frame_start", 0, "Start", 0);
- uiItemR(col, userptr, "offset", 0, NULL, 0);
+ uiItemR(col, userptr, "frame_offset", 0, NULL, 0);
col= uiLayoutColumn(split, 0);
uiItemR(col, userptr, "fields_per_frame", 0, "Fields", 0);
- uiItemR(col, userptr, "auto_refresh", 0, NULL, 0);
- uiItemR(col, userptr, "cyclic", 0, NULL, 0);
+ uiItemR(col, userptr, "use_auto_refresh", 0, NULL, 0);
+ uiItemR(col, userptr, "use_cyclic", 0, NULL, 0);
}
else if(ima->source==IMA_SRC_GENERATED) {
split= uiLayoutSplit(layout, 0, 0);
diff --git a/source/blender/editors/space_image/image_draw.c b/source/blender/editors/space_image/image_draw.c
index 309c0061130..6a77d4da067 100644
--- a/source/blender/editors/space_image/image_draw.c
+++ b/source/blender/editors/space_image/image_draw.c
@@ -36,6 +36,7 @@
#include "DNA_space_types.h"
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
+#include "DNA_brush_types.h"
#include "PIL_time.h"
#include "BLI_threads.h"
@@ -44,11 +45,9 @@
#include "IMB_imbuf_types.h"
#include "BKE_context.h"
-#include "BKE_colortools.h"
#include "BKE_global.h"
#include "BKE_image.h"
#include "BKE_paint.h"
-#include "BKE_utildefines.h"
#include "BIF_gl.h"
#include "BIF_glutil.h"
@@ -215,7 +214,7 @@ static void draw_image_grid(ARegion *ar, float zoomx, float zoomy)
glEnd();
}
-static void sima_draw_alpha_backdrop(float x1, float y1, float xsize, float ysize, float zoomx, float zoomy)
+static void sima_draw_alpha_backdrop(float x1, float y1, float xsize, float ysize, float zoomx, float zoomy, unsigned char col1[3], unsigned char col2[3])
{
GLubyte checker_stipple[32*32/8] =
{
@@ -229,9 +228,9 @@ static void sima_draw_alpha_backdrop(float x1, float y1, float xsize, float ysiz
0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255, \
};
- glColor3ub(100, 100, 100);
+ glColor3ubv(col1);
glRectf(x1, y1, x1 + zoomx*xsize, y1 + zoomy*ysize);
- glColor3ub(160, 160, 160);
+ glColor3ubv(col2);
glEnable(GL_POLYGON_STIPPLE);
glPolygonStipple(checker_stipple);
@@ -271,11 +270,16 @@ static void sima_draw_alpha_pixelsf(float x1, float y1, int rectx, int recty, fl
}
#ifdef WITH_LCMS
-static void sima_draw_colorcorrected_pixels(float x1, float y1, ImBuf *ibuf)
+static int sima_draw_colorcorrected_pixels(float x1, float y1, ImBuf *ibuf)
{
colorcorrection_do_ibuf(ibuf, "MONOSCNR.ICM"); /* path is hardcoded here, find some place better */
-
- glaDrawPixelsSafe(x1, y1, ibuf->x, ibuf->y, ibuf->x, GL_RGBA, GL_UNSIGNED_BYTE, ibuf->crect);
+
+ if(ibuf->crect) {
+ glaDrawPixelsSafe(x1, y1, ibuf->x, ibuf->y, ibuf->x, GL_RGBA, GL_UNSIGNED_BYTE, ibuf->crect);
+ return 1;
+ }
+
+ return 0;
}
#endif
@@ -361,13 +365,17 @@ static void draw_image_buffer(SpaceImage *sima, ARegion *ar, Scene *scene, Image
else if(sima->flag & SI_COLOR_CORRECTION) {
image_verify_buffer_float(sima, ima, ibuf, color_manage);
- sima_draw_colorcorrected_pixels(x, y, ibuf);
+ if(sima_draw_colorcorrected_pixels(x, y, ibuf)==0) {
+ unsigned char col1[3]= {100, 0, 100}, col2[3]= {160, 0, 160}; /* pink says 'warning' in blender land */
+ sima_draw_alpha_backdrop(x, y, ibuf->x, ibuf->y, zoomx, zoomy, col1, col2);
+ }
}
#endif
else {
if(sima->flag & SI_USE_ALPHA) {
- sima_draw_alpha_backdrop(x, y, ibuf->x, ibuf->y, zoomx, zoomy);
+ unsigned char col1[3]= {100, 100, 100}, col2[3]= {160, 160, 160};
+ sima_draw_alpha_backdrop(x, y, ibuf->x, ibuf->y, zoomx, zoomy, col1, col2);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
@@ -521,7 +529,7 @@ static void draw_image_view_tool(Scene *scene)
if(draw) {
getmouseco_areawin(mval);
- radius= brush->size*G.sima->zoom/2;
+ radius= brush_size(brush)*G.sima->zoom;
fdrawXORcirc(mval[0], mval[1], radius);
if (brush->innerradius != 1.0) {
diff --git a/source/blender/editors/space_image/image_header.c b/source/blender/editors/space_image/image_header.c
index efe832040c7..0ec917846fd 100644
--- a/source/blender/editors/space_image/image_header.c
+++ b/source/blender/editors/space_image/image_header.c
@@ -33,17 +33,11 @@
#include "DNA_space_types.h"
#include "DNA_windowmanager_types.h"
-#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_editVert.h"
#include "BKE_context.h"
-#include "BKE_customdata.h"
-#include "BKE_image.h"
-#include "BKE_mesh.h"
-#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "BKE_mesh.h"
@@ -51,8 +45,6 @@
#include "WM_types.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "UI_interface.h"
diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c
index a8e231bfae9..818a6181626 100644
--- a/source/blender/editors/space_image/image_ops.c
+++ b/source/blender/editors/space_image/image_ops.c
@@ -33,6 +33,7 @@
#include "MEM_guardedalloc.h"
#include "DNA_object_types.h"
+#include "DNA_node_types.h"
#include "DNA_packedFile_types.h"
#include "DNA_scene_types.h"
#include "DNA_meshdata_types.h"
@@ -41,7 +42,6 @@
#include "BKE_context.h"
#include "BKE_image.h"
#include "BKE_global.h"
-#include "BKE_image.h"
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_node.h"
@@ -131,10 +131,15 @@ static int space_image_file_exists_poll(bContext *C)
SpaceImage *sima= CTX_wm_space_image(C);
ImBuf *ibuf;
void *lock;
- int poll;
-
+ int poll= 0;
+ char name[FILE_MAX];
+
ibuf= ED_space_image_acquire_buffer(sima, &lock);
- poll= (ibuf && BLI_exists(ibuf->name) && BLI_is_writable(ibuf->name));
+ if(ibuf) {
+ BLI_strncpy(name, ibuf->name, FILE_MAX);
+ BLI_path_abs(name, G.sce);
+ poll= (BLI_exists(name) && BLI_is_writable(name));
+ }
ED_space_image_release_buffer(sima, lock);
return poll;
@@ -646,9 +651,13 @@ static const EnumPropertyItem image_file_type_items[] = {
#ifdef WITH_TIFF
{R_TIFF, "TIFF", 0, "Tiff", ""},
#endif
+#ifdef WITH_DDS
{R_RADHDR, "RADIANCE_HDR", 0, "Radiance HDR", ""},
+#endif
+#ifdef WITH_CINEON
{R_CINEON, "CINEON", 0, "Cineon", ""},
{R_DPX, "DPX", 0, "DPX", ""},
+#endif
#ifdef WITH_OPENEXR
{R_OPENEXR, "OPENEXR", 0, "OpenEXR", ""},
/* saving sequences of multilayer won't work, they copy buffers */
@@ -734,7 +743,22 @@ static int open_exec(bContext *C, wmOperator *op)
static int open_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
SpaceImage *sima= CTX_wm_space_image(C);
- char *path= (sima && sima->image)? sima->image->name: U.textudir;
+ char *path=U.textudir;
+ Image *ima= NULL;
+
+ if(sima) {
+ ima= sima->image;
+ }
+
+ if (ima==NULL) {
+ Tex *tex= CTX_data_pointer_get_type(C, "texture", &RNA_Texture).data;
+ if(tex && tex->type==TEX_IMAGE)
+ ima= tex->ima;
+ }
+
+ if(ima)
+ path= ima->name;
+
if(!RNA_property_is_set(op->ptr, "relative_path"))
RNA_boolean_set(op->ptr, "relative_path", U.flag & USER_RELPATHS);
@@ -1034,6 +1058,8 @@ static int save_exec(bContext *C, wmOperator *op)
BLI_strncpy(name, ibuf->name, FILE_MAX);
if(name[0]==0)
BLI_strncpy(name, G.ima, FILE_MAX);
+ else
+ BLI_path_abs(name, G.sce);
if(BLI_exists(name) && BLI_is_writable(name)) {
rr= BKE_image_acquire_renderresult(scene, ima);
@@ -1241,7 +1267,7 @@ static int new_exec(bContext *C, wmOperator *op)
void IMAGE_OT_new(wmOperatorType *ot)
{
PropertyRNA *prop;
- float default_color[4]= {0.0f, 0.0f, 0.0f, 1.0f};
+ static float default_color[4]= {0.0f, 0.0f, 0.0f, 1.0f};
/* identifiers */
ot->name= "New";
@@ -2056,8 +2082,10 @@ void IMAGE_OT_cycle_render_slot(wmOperatorType *ot)
void ED_image_update_frame(const bContext *C)
{
- Main *mainp = CTX_data_main(C);
+ Main *mainp= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
+ wmWindowManager *wm= CTX_wm_manager(C);
+ wmWindow *win;
Tex *tex;
/* texture users */
@@ -2070,41 +2098,40 @@ void ED_image_update_frame(const bContext *C)
}
}
-#if 0
/* image window, compo node users */
- if(G.curscreen) {
- ScrArea *sa;
- for(sa= G.curscreen->areabase.first; sa; sa= sa->next) {
- if(sa->spacetype==SPACE_VIEW3D) {
- View3D *v3d= sa->spacedata.first;
- if(v3d->bgpic)
- if(v3d->bgpic->iuser.flag & IMA_ANIM_ALWAYS)
- BKE_image_user_calc_frame(&v3d->bgpic->iuser, scene->r.cfra, 0);
- }
- else if(sa->spacetype==SPACE_IMAGE) {
- SpaceImage *sima= sa->spacedata.first;
- if(sima->iuser.flag & IMA_ANIM_ALWAYS)
- BKE_image_user_calc_frame(&sima->iuser, scene->r.cfra, 0);
- }
- else if(sa->spacetype==SPACE_NODE) {
- SpaceNode *snode= sa->spacedata.first;
- if((snode->treetype==NTREE_COMPOSIT) && (snode->nodetree)) {
- bNode *node;
- for(node= snode->nodetree->nodes.first; node; node= node->next) {
- if(node->id && node->type==CMP_NODE_IMAGE) {
- Image *ima= (Image *)node->id;
- ImageUser *iuser= node->storage;
- if(ELEM(ima->source, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE))
- if(iuser->flag & IMA_ANIM_ALWAYS)
- BKE_image_user_calc_frame(iuser, scene->r.cfra, 0);
+ if(wm) {
+ for(win= wm->windows.first; win; win= win->next) {
+ ScrArea *sa;
+ for(sa= win->screen->areabase.first; sa; sa= sa->next) {
+ if(sa->spacetype==SPACE_VIEW3D) {
+ View3D *v3d= sa->spacedata.first;
+ BGpic *bgpic;
+ for(bgpic= v3d->bgpicbase.first; bgpic; bgpic= bgpic->next)
+ if(bgpic->iuser.flag & IMA_ANIM_ALWAYS)
+ BKE_image_user_calc_frame(&bgpic->iuser, scene->r.cfra, 0);
+ }
+ else if(sa->spacetype==SPACE_IMAGE) {
+ SpaceImage *sima= sa->spacedata.first;
+ if(sima->iuser.flag & IMA_ANIM_ALWAYS)
+ BKE_image_user_calc_frame(&sima->iuser, scene->r.cfra, 0);
+ }
+ else if(sa->spacetype==SPACE_NODE) {
+ SpaceNode *snode= sa->spacedata.first;
+ if((snode->treetype==NTREE_COMPOSIT) && (snode->nodetree)) {
+ bNode *node;
+ for(node= snode->nodetree->nodes.first; node; node= node->next) {
+ if(node->id && node->type==CMP_NODE_IMAGE) {
+ Image *ima= (Image *)node->id;
+ ImageUser *iuser= node->storage;
+ if(ELEM(ima->source, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE))
+ if(iuser->flag & IMA_ANIM_ALWAYS)
+ BKE_image_user_calc_frame(iuser, scene->r.cfra, 0);
+ }
}
}
}
}
}
}
-#endif
}
-
-
diff --git a/source/blender/editors/space_image/image_render.c b/source/blender/editors/space_image/image_render.c
index 18e42ce8797..be9d60a5adb 100644
--- a/source/blender/editors/space_image/image_render.c
+++ b/source/blender/editors/space_image/image_render.c
@@ -32,9 +32,7 @@
#include "DNA_space_types.h"
#include "BKE_context.h"
-#include "BKE_global.h"
#include "BKE_image.h"
-#include "BKE_screen.h"
#include "BIF_gl.h"
#include "BIF_glutil.h"
diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c
index 28669847814..32e8be83bc5 100644
--- a/source/blender/editors/space_image/space_image.c
+++ b/source/blender/editors/space_image/space_image.c
@@ -45,10 +45,8 @@
#include "BKE_image.h"
#include "BKE_mesh.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "BKE_tessmesh.h"
-#include "IMB_imbuf.h"
#include "IMB_imbuf_types.h"
#include "ED_mesh.h"
@@ -57,7 +55,6 @@
#include "ED_uvedit.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "RNA_access.h"
@@ -773,8 +770,6 @@ static void image_main_area_draw(const bContext *C, ARegion *ar)
/* draw Grease Pencil - screen space only */
draw_image_grease_pencil((bContext *)C, 0);
-
- ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST_PIXEL);
/* scrollers? */
/*scrollers= UI_view2d_scrollers_calc(C, v2d, V2D_UNIT_VALUES, V2D_GRID_CLAMP, V2D_ARG_DUMMY, V2D_ARG_DUMMY);
diff --git a/source/blender/editors/space_info/Makefile b/source/blender/editors/space_info/Makefile
index 99ab1d2c514..0a9d3e3396d 100644
--- a/source/blender/editors/space_info/Makefile
+++ b/source/blender/editors/space_info/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/space_info/info_ops.c b/source/blender/editors/space_info/info_ops.c
index 62e82f83e58..51767d3e006 100644
--- a/source/blender/editors/space_info/info_ops.c
+++ b/source/blender/editors/space_info/info_ops.c
@@ -45,14 +45,11 @@
#include "BKE_main.h"
#include "BKE_packedFile.h"
#include "BKE_report.h"
-#include "BKE_screen.h"
#include "WM_api.h"
#include "WM_types.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "UI_interface.h"
diff --git a/source/blender/editors/space_info/info_stats.c b/source/blender/editors/space_info/info_stats.c
index 68058a5315d..7ffa68a9be1 100644
--- a/source/blender/editors/space_info/info_stats.c
+++ b/source/blender/editors/space_info/info_stats.c
@@ -35,7 +35,6 @@
#include "DNA_scene_types.h"
#include "BKE_anim.h"
-#include "BKE_context.h"
#include "BKE_displist.h"
#include "BKE_DerivedMesh.h"
#include "BKE_key.h"
@@ -46,6 +45,7 @@
#include "ED_armature.h"
#include "ED_mesh.h"
+#include "ED_curve.h" /* for ED_curve_editnurbs */
#include "BLI_editVert.h"
@@ -178,8 +178,9 @@ static void stats_object_edit(Object *obedit, SceneStats *stats)
BezTriple *bezt;
BPoint *bp;
int a;
+ ListBase *nurbs= ED_curve_editnurbs(cu);
- for(nu=cu->editnurb->first; nu; nu=nu->next) {
+ for(nu=nurbs->first; nu; nu=nu->next) {
if(nu->type == CU_BEZIER) {
bezt= nu->bezt;
a= nu->pntsu;
@@ -215,7 +216,7 @@ static void stats_object_edit(Object *obedit, SceneStats *stats)
else if(obedit->type==OB_LATTICE) {
/* Lattice Edit */
Lattice *lt= obedit->data;
- Lattice *editlatt= lt->editlatt;
+ Lattice *editlatt= lt->editlatt->latt;
BPoint *bp;
int a;
diff --git a/source/blender/editors/space_info/space_info.c b/source/blender/editors/space_info/space_info.c
index 0f483f4bcec..b47c8e8d189 100644
--- a/source/blender/editors/space_info/space_info.c
+++ b/source/blender/editors/space_info/space_info.c
@@ -37,10 +37,8 @@
#include "BLI_rand.h"
#include "BKE_context.h"
-#include "BKE_colortools.h"
#include "BKE_global.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "ED_screen.h"
@@ -52,6 +50,7 @@
#include "UI_resources.h"
#include "UI_interface.h"
+
#include "info_intern.h" // own include
/* ******************** default callbacks for info space ***************** */
diff --git a/source/blender/editors/space_logic/Makefile b/source/blender/editors/space_logic/Makefile
index 90cd73bd62a..9b72e132be8 100644
--- a/source/blender/editors/space_logic/Makefile
+++ b/source/blender/editors/space_logic/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/space_logic/logic_buttons.c b/source/blender/editors/space_logic/logic_buttons.c
index 6fb019cda35..4f68dfb3804 100644
--- a/source/blender/editors/space_logic/logic_buttons.c
+++ b/source/blender/editors/space_logic/logic_buttons.c
@@ -27,27 +27,17 @@
#include <string.h>
#include <stdio.h>
-#include "DNA_object_types.h"
#include "DNA_meshdata_types.h"
-#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BKE_context.h"
-#include "BKE_global.h"
-#include "BKE_library.h"
-#include "BKE_main.h"
-#include "BKE_mesh.h"
-#include "BKE_node.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "ED_screen.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "RNA_access.h"
#include "RNA_define.h"
diff --git a/source/blender/editors/space_logic/logic_header.c b/source/blender/editors/space_logic/logic_header.c
deleted file mode 100644
index 3e38eb815fb..00000000000
--- a/source/blender/editors/space_logic/logic_header.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/**
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2009 Blender Foundation.
- * All rights reserved.
- *
- *
- * Contributor(s): Blender Foundation
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#include <string.h>
-#include <stdio.h>
-
-
-#include "MEM_guardedalloc.h"
-
-#include "BLI_blenlib.h"
-
-#include "BKE_context.h"
-#include "BKE_screen.h"
-#include "BKE_main.h"
-
-#include "ED_screen.h"
-#include "ED_types.h"
-#include "ED_util.h"
-
-
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
-
-#include "UI_interface.h"
-#include "UI_resources.h"
-#include "UI_view2d.h"
-
-#include "logic_intern.h"
-
-/* ************************ header area region *********************** */
-
-
-static void do_logic_buttons(bContext *C, void *arg, int event)
-{
-// SpaceLogic *slogic= CTX_wm_space_logic(C);
-}
-
-static uiBlock *logic_addmenu(bContext *C, ARegion *ar, void *arg_unused)
-{
-// SpaceLogic *slogic= CTX_wm_space_logic(C);
- uiBlock *block;
- short yco= 0, menuwidth=120;
-
- block= uiBeginBlock(C, ar, "logic_addmenu", UI_EMBOSSP);
-// uiBlockSetButmFunc(block, do_logic_addmenu, NULL);
-
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Nothing yet", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
-
- uiTextBoundsBlock(block, 50);
- uiBlockSetDirection(block, UI_TOP);
- uiEndBlock(C, block);
-
- return block;
-}
-
-void logic_header_buttons(const bContext *C, ARegion *ar)
-{
- ScrArea *sa= CTX_wm_area(C);
-// SpaceLogic *slogic= CTX_wm_space_logic(C);
- uiBlock *block;
- short xco, yco= 3;
-
- block= uiBeginBlock(C, ar, "header logic", UI_EMBOSS);
- uiBlockSetHandleFunc(block, do_logic_buttons, NULL);
-
- xco= ED_area_header_standardbuttons(C, block, yco);
-
- if((sa->flag & HEADER_NO_PULLDOWN)==0) {
- int xmax;
-
- xmax= GetButStringLength("View");
- uiDefPulldownBut(block, logic_addmenu, NULL,
- "View", xco, yco, xmax-3, 20, "");
- xco+= xmax;
-
- xmax= GetButStringLength("Select");
- uiDefPulldownBut(block, logic_addmenu, NULL,
- "Select", xco, yco, xmax-3, 20, "");
- xco+= xmax;
-
- xmax= GetButStringLength("Add");
- uiDefPulldownBut(block, logic_addmenu, NULL,
- "Add", xco, yco, xmax-3, 20, "");
- xco+= xmax;
- }
-
- uiBlockSetEmboss(block, UI_EMBOSS);
-
- UI_view2d_totRect_set(&ar->v2d, xco+XIC+100, (int)(ar->v2d.tot.ymax-ar->v2d.tot.ymin));
-
- uiEndBlock(C, block);
- uiDrawBlock(C, block);
-}
-
-
diff --git a/source/blender/editors/space_logic/logic_intern.h b/source/blender/editors/space_logic/logic_intern.h
index 3b2b6497cdc..0c30aa711f1 100644
--- a/source/blender/editors/space_logic/logic_intern.h
+++ b/source/blender/editors/space_logic/logic_intern.h
@@ -42,9 +42,6 @@ struct Scene;
/* space_logic.c */
struct ARegion *logic_has_buttons_region(struct ScrArea *sa);
-/* logic_header.c */
-void logic_header_buttons(const struct bContext *C, struct ARegion *ar);
-
/* logic_ops.c */
/* logic_buttons.c */
diff --git a/source/blender/editors/space_logic/logic_ops.c b/source/blender/editors/space_logic/logic_ops.c
index 2a179ac281c..4641fd2ce61 100644
--- a/source/blender/editors/space_logic/logic_ops.c
+++ b/source/blender/editors/space_logic/logic_ops.c
@@ -28,7 +28,6 @@
#include <stddef.h>
#include "DNA_object_types.h"
-#include "DNA_scene_types.h"
#include "DNA_sensor_types.h"
#include "DNA_controller_types.h"
#include "DNA_actuator_types.h"
diff --git a/source/blender/editors/space_logic/logic_window.c b/source/blender/editors/space_logic/logic_window.c
index c4a42d89758..8a703c510c4 100644
--- a/source/blender/editors/space_logic/logic_window.c
+++ b/source/blender/editors/space_logic/logic_window.c
@@ -40,6 +40,7 @@
#include "DNA_sensor_types.h"
#include "DNA_constraint_types.h"
#include "DNA_windowmanager_types.h"
+#include "DNA_object_types.h"
#include "MEM_guardedalloc.h"
@@ -49,17 +50,13 @@
#include "BKE_global.h"
#include "BKE_library.h"
#include "BKE_main.h"
-#include "BKE_property.h"
-#include "BKE_screen.h"
#include "BKE_sca.h"
-#include "BKE_utildefines.h"
#include "ED_util.h"
#include "WM_types.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "UI_interface.h"
@@ -359,6 +356,7 @@ static void old_sca_move_actuator(bContext *C, void *datav, void *move_up)
void do_logic_buts(bContext *C, void *arg, int event)
{
+ Main *bmain= CTX_data_main(C);
bSensor *sens;
bController *cont;
bActuator *act;
@@ -382,7 +380,7 @@ void do_logic_buts(bContext *C, void *arg, int event)
break;
case B_ADD_SENS:
- for(ob=G.main->object.first; ob; ob=ob->id.next) {
+ for(ob=bmain->object.first; ob; ob=ob->id.next) {
if(ob->scaflag & OB_ADDSENS) {
ob->scaflag &= ~OB_ADDSENS;
sens= new_sensor(SENS_ALWAYS);
@@ -396,7 +394,7 @@ void do_logic_buts(bContext *C, void *arg, int event)
break;
case B_CHANGE_SENS:
- for(ob=G.main->object.first; ob; ob=ob->id.next) {
+ for(ob=bmain->object.first; ob; ob=ob->id.next) {
sens= ob->sensors.first;
while(sens) {
if(sens->type != sens->otype) {
@@ -410,7 +408,7 @@ void do_logic_buts(bContext *C, void *arg, int event)
break;
case B_DEL_SENS:
- for(ob=G.main->object.first; ob; ob=ob->id.next) {
+ for(ob=bmain->object.first; ob; ob=ob->id.next) {
sens= ob->sensors.first;
while(sens) {
if(sens->flag & SENS_DEL) {
@@ -425,7 +423,7 @@ void do_logic_buts(bContext *C, void *arg, int event)
break;
case B_ADD_CONT:
- for(ob=G.main->object.first; ob; ob=ob->id.next) {
+ for(ob=bmain->object.first; ob; ob=ob->id.next) {
if(ob->scaflag & OB_ADDCONT) {
ob->scaflag &= ~OB_ADDCONT;
cont= new_controller(CONT_LOGIC_AND);
@@ -450,7 +448,7 @@ void do_logic_buts(bContext *C, void *arg, int event)
break;
case B_SET_STATE_BIT:
- for(ob=G.main->object.first; ob; ob=ob->id.next) {
+ for(ob=bmain->object.first; ob; ob=ob->id.next) {
if(ob->scaflag & OB_ALLSTATE) {
ob->scaflag &= ~OB_ALLSTATE;
ob->state = 0x3FFFFFFF;
@@ -459,7 +457,7 @@ void do_logic_buts(bContext *C, void *arg, int event)
break;
case B_INIT_STATE_BIT:
- for(ob=G.main->object.first; ob; ob=ob->id.next) {
+ for(ob=bmain->object.first; ob; ob=ob->id.next) {
if(ob->scaflag & OB_INITSTBIT) {
ob->scaflag &= ~OB_INITSTBIT;
ob->state = ob->init_state;
@@ -470,7 +468,7 @@ void do_logic_buts(bContext *C, void *arg, int event)
break;
case B_CHANGE_CONT:
- for(ob=G.main->object.first; ob; ob=ob->id.next) {
+ for(ob=bmain->object.first; ob; ob=ob->id.next) {
cont= ob->controllers.first;
while(cont) {
if(cont->type != cont->otype) {
@@ -485,7 +483,7 @@ void do_logic_buts(bContext *C, void *arg, int event)
case B_DEL_CONT:
- for(ob=G.main->object.first; ob; ob=ob->id.next) {
+ for(ob=bmain->object.first; ob; ob=ob->id.next) {
cont= ob->controllers.first;
while(cont) {
if(cont->flag & CONT_DEL) {
@@ -501,7 +499,7 @@ void do_logic_buts(bContext *C, void *arg, int event)
break;
case B_ADD_ACT:
- for(ob=G.main->object.first; ob; ob=ob->id.next) {
+ for(ob=bmain->object.first; ob; ob=ob->id.next) {
if(ob->scaflag & OB_ADDACT) {
ob->scaflag &= ~OB_ADDACT;
act= new_actuator(ACT_OBJECT);
@@ -514,7 +512,7 @@ void do_logic_buts(bContext *C, void *arg, int event)
break;
case B_CHANGE_ACT:
- for(ob=G.main->object.first; ob; ob=ob->id.next) {
+ for(ob=bmain->object.first; ob; ob=ob->id.next) {
act= ob->actuators.first;
while(act) {
if(act->type != act->otype) {
@@ -528,7 +526,7 @@ void do_logic_buts(bContext *C, void *arg, int event)
break;
case B_DEL_ACT:
- for(ob=G.main->object.first; ob; ob=ob->id.next) {
+ for(ob=bmain->object.first; ob; ob=ob->id.next) {
act= ob->actuators.first;
while(act) {
if(act->flag & ACT_DEL) {
@@ -546,7 +544,7 @@ void do_logic_buts(bContext *C, void *arg, int event)
case B_SOUNDACT_BROWSE:
/* since we don't know which... */
didit= 0;
- for(ob=G.main->object.first; ob; ob=ob->id.next) {
+ for(ob=bmain->object.first; ob; ob=ob->id.next) {
act= ob->actuators.first;
while(act)
{
@@ -555,11 +553,11 @@ void do_logic_buts(bContext *C, void *arg, int event)
bSoundActuator *sa= act->data;
if(sa->sndnr)
{
- bSound *sound= G.main->sound.first;
+ ID *sound= bmain->sound.first;
int nr= 1;
if(sa->sndnr == -2) {
-// XXX activate_databrowse((ID *)G.main->sound.first, ID_SO, 0, B_SOUNDACT_BROWSE,
+// XXX activate_databrowse((ID *)bmain->sound.first, ID_SO, 0, B_SOUNDACT_BROWSE,
// &sa->sndnr, do_logic_buts);
break;
}
@@ -569,16 +567,16 @@ void do_logic_buts(bContext *C, void *arg, int event)
if(nr==sa->sndnr)
break;
nr++;
- sound= sound->id.next;
+ sound= sound->next;
}
if(sa->sound)
- sa->sound->id.us--;
+ ((ID *)sa->sound)->us--;
- sa->sound= sound;
+ sa->sound= (struct bSound *)sound;
if(sound)
- sound->id.us++;
+ sound->us++;
sa->sndnr= 0;
didit= 1;
@@ -768,6 +766,7 @@ static void set_sca_ob(Object *ob)
static ID **get_selected_and_linked_obs(bContext *C, short *count, short scavisflag)
{
Base *base;
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
Object *ob, *obt, *obact= CTX_data_active_object(C);
ID **idar;
@@ -784,7 +783,7 @@ static ID **get_selected_and_linked_obs(bContext *C, short *count, short scavisf
if(scene==NULL) return NULL;
- ob= G.main->object.first;
+ ob= bmain->object.first;
while(ob) {
ob->scavisflag= 0;
set_sca_ob(ob);
@@ -818,7 +817,7 @@ static ID **get_selected_and_linked_obs(bContext *C, short *count, short scavisf
while(doit) {
doit= 0;
- ob= G.main->object.first;
+ ob= bmain->object.first;
while(ob) {
/* 1st case: select sensor when controller selected */
@@ -899,7 +898,7 @@ static ID **get_selected_and_linked_obs(bContext *C, short *count, short scavisf
}
/* now we count */
- ob= G.main->object.first;
+ ob= bmain->object.first;
while(ob) {
if( ob->scavisflag ) (*count)++;
ob= ob->id.next;
@@ -910,7 +909,7 @@ static ID **get_selected_and_linked_obs(bContext *C, short *count, short scavisf
idar= MEM_callocN( (*count)*sizeof(void *), "idar");
- ob= G.main->object.first;
+ ob= bmain->object.first;
nr= 0;
/* make the active object always the first one of the list */
@@ -1610,7 +1609,7 @@ static short draw_sensorbuttons(Object *ob, bSensor *sens, uiBlock *block, short
str = "Type %t|Up Axis %x1 |Down Axis %x3|Left Axis %x2|Right Axis %x0";
uiDefButI(block, MENU, B_REDR, str, xco+10 + 0.6 * (width-20), yco-68, 0.4 * (width-20), 19,
&joy->axisf, 2.0, 31, 0, 0,
- "The direction of the axis, use 'All Events' to recieve events on any direction");
+ "The direction of the axis, use 'All Events' to receive events on any direction");
}
}
else if (joy->type == SENS_JOY_HAT)
@@ -1623,7 +1622,7 @@ static short draw_sensorbuttons(Object *ob, bSensor *sens, uiBlock *block, short
str = "Direction%t|Up%x1|Down%x4|Left%x8|Right%x2|%l|Up/Right%x3|Down/Left%x12|Up/Left%x9|Down/Right%x6";
uiDefButI(block, MENU, 0, str, xco+10 + 0.6 * (width-20), yco-68, 0.4 * (width-20), 19,
&joy->hatf, 2.0, 31, 0, 0,
- "The direction of the hat, use 'All Events' to recieve events on any direction");
+ "The direction of the hat, use 'All Events' to receive events on any direction");
}
}
else { /* (joy->type == SENS_JOY_AXIS_SINGLE)*/
@@ -1817,7 +1816,7 @@ static void check_armature_actuator(bContext *C, void *arg1_but, void *arg2_act)
}
-static short draw_actuatorbuttons(Object *ob, bActuator *act, uiBlock *block, short xco, short yco, short width)
+static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlock *block, short xco, short yco, short width)
{
bSoundActuator *sa = NULL;
bObjectActuator *oa = NULL;
@@ -1926,7 +1925,7 @@ static short draw_actuatorbuttons(Object *ob, bActuator *act, uiBlock *block, sh
uiDefButBitS(block, TOG, ACT_LIN_VEL_LOCAL, 0, "L", xco+45+3*wval, yco-129, 15, 19, &oa->flag, 0.0, 0.0, 0, 0, "Local transformation");
uiDefButBitS(block, TOG, ACT_ANG_VEL_LOCAL, 0, "L", xco+45+3*wval, yco-148, 15, 19, &oa->flag, 0.0, 0.0, 0, 0, "Local transformation");
- uiDefButBitS(block, TOG, ACT_ADD_LIN_VEL, 0, "add",xco+45+3*wval+15, yco-129, 35, 19, &oa->flag, 0.0, 0.0, 0, 0, "Toggles between ADD and SET linV");
+ uiDefButBitS(block, TOG, ACT_ADD_LIN_VEL, 0, "use_additive",xco+45+3*wval+15, yco-129, 35, 19, &oa->flag, 0.0, 0.0, 0, 0, "Toggles between ADD and SET linV");
}
} else if (oa->type == ACT_OBJECT_SERVO)
{
@@ -2142,8 +2141,8 @@ static short draw_actuatorbuttons(Object *ob, bActuator *act, uiBlock *block, sh
glRects(xco, yco-ysize, xco+width, yco);
uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1);
- if(G.main->sound.first) {
- IDnames_to_pupstring(&str, "Sound files", NULL, &(G.main->sound), (ID *)sa->sound, &(sa->sndnr));
+ if(bmain->sound.first) {
+ IDnames_to_pupstring(&str, "Sound files", NULL, &(bmain->sound), (ID *)sa->sound, &(sa->sndnr));
/* reset this value, it is for handling the event */
sa->sndnr = 0;
uiDefButS(block, MENU, B_SOUNDACT_BROWSE, str, xco+10,yco-22,20,19, &(sa->sndnr), 0, 0, 0, 0, "");
@@ -2151,7 +2150,7 @@ static short draw_actuatorbuttons(Object *ob, bActuator *act, uiBlock *block, sh
if(sa->sound) {
char dummy_str[] = "Sound mode %t|Play Stop %x0|Play End %x1|Loop Stop %x2|Loop End %x3|Loop Ping Pong Stop %x5|Loop Ping Pong %x4";
- uiDefBut(block, TEX, B_IDNAME, "SO:",xco+30,yco-22,wval-20,19, sa->sound->id.name+2, 0.0, 21.0, 0, 0, "");
+ uiDefBut(block, TEX, B_IDNAME, "SO:",xco+30,yco-22,wval-20,19, ((ID *)sa->sound)->name+2, 0.0, 21.0, 0, 0, "");
uiDefButS(block, MENU, 1, dummy_str,xco+10,yco-44,width-20, 19, &sa->type, 0.0, 0.0, 0, 0, "");
uiDefButF(block, NUM, 0, "Volume:", xco+10,yco-66,wval, 19, &sa->volume, 0.0, 1.0, 0, 0, "Sets the volume of this sound");
uiDefButF(block, NUM, 0, "Pitch:",xco+wval+10,yco-66,wval, 19, &sa->pitch,-12.0, 12.0, 0, 0, "Sets the pitch of this sound");
@@ -2530,7 +2529,7 @@ static short draw_actuatorbuttons(Object *ob, bActuator *act, uiBlock *block, sh
}
//str = "Scene %t|Load game%x0|Start loaded game%x1|Restart this game%x2|Quit this game %x3";
- str = "Scene %t|Start new game%x0|Restart this game%x2|Quit this game %x3|Save GameLogic.globalDict %x4|Load GameLogic.globalDict %x5";
+ str = "Scene %t|Start new game%x0|Restart this game%x2|Quit this game %x3|Save bge.logic.globalDict %x4|Load bge.logic.globalDict %x5";
uiDefButS(block, MENU, B_REDR, str, xco+40, yco-24, (width-80), 19, &gma->type, 0.0, 0.0, 0, 0, "");
yco -= ysize;
@@ -3174,12 +3173,6 @@ static int is_sensor_linked(uiBlock *block, bSensor *sens)
return 0;
}
-/* never used, see CVS 1.134 for the code */
-/* static FreeCamera *new_freecamera(void) */
-
-/* never used, see CVS 1.120 for the code */
-/* static uiBlock *freecamera_menu(void) */
-
/* Sensors code */
static void draw_sensor_header(uiLayout *layout, PointerRNA *ptr, PointerRNA *logic_ptr)
@@ -3190,8 +3183,8 @@ static void draw_sensor_header(uiLayout *layout, PointerRNA *ptr, PointerRNA *lo
box= uiLayoutBox(layout);
row= uiLayoutRow(box, 0);
- uiItemR(row, ptr, "expanded", UI_ITEM_R_NO_BG, "", 0);
- if(RNA_boolean_get(ptr, "expanded")) {
+ uiItemR(row, ptr, "show_expanded", UI_ITEM_R_NO_BG, "", 0);
+ if(RNA_boolean_get(ptr, "show_expanded")) {
uiItemR(row, ptr, "type", 0, "", 0);
uiItemR(row, ptr, "name", 0, "", 0);
} else {
@@ -3200,11 +3193,11 @@ static void draw_sensor_header(uiLayout *layout, PointerRNA *ptr, PointerRNA *lo
}
subrow= uiLayoutRow(row, 0);
- uiLayoutSetActive(subrow, ((RNA_boolean_get(logic_ptr, "sensors_show_active_states")
- && RNA_boolean_get(ptr, "expanded")) || RNA_boolean_get(ptr, "pinned")));
- uiItemR(subrow, ptr, "pinned", UI_ITEM_R_NO_BG, "", 0);
+ uiLayoutSetActive(subrow, ((RNA_boolean_get(logic_ptr, "show_sensors_active_states")
+ && RNA_boolean_get(ptr, "show_expanded")) || RNA_boolean_get(ptr, "pin")));
+ uiItemR(subrow, ptr, "pin", UI_ITEM_R_NO_BG, "", 0);
- if(RNA_boolean_get(ptr, "expanded")==0) {
+ if(RNA_boolean_get(ptr, "show_expanded")==0) {
subrow= uiLayoutRow(row, 1);
uiItemEnumO(subrow, "LOGIC_OT_sensor_move", "", ICON_TRIA_UP, "direction", 1); // up
uiItemEnumO(subrow, "LOGIC_OT_sensor_move", "", ICON_TRIA_DOWN, "direction", 2); // down
@@ -3221,13 +3214,13 @@ static void draw_sensor_internal_header(uiLayout *layout, PointerRNA *ptr)
split = uiLayoutSplit(box, 0.45, 0);
row= uiLayoutRow(split, 1);
- uiItemR(row, ptr, "pulse_true_level", 0, "", ICON_DOTSUP);
- uiItemR(row, ptr, "pulse_false_level", 0, "", ICON_DOTSDOWN);
+ uiItemR(row, ptr, "use_pulse_true_level", 0, "", ICON_DOTSUP);
+ uiItemR(row, ptr, "use_pulse_false_level", 0, "", ICON_DOTSDOWN);
uiItemR(row, ptr, "frequency", 0, "Freq", 0);
row= uiLayoutRow(split, 1);
- uiItemR(row, ptr, "level", UI_ITEM_R_TOGGLE, NULL, 0);
- uiItemR(row, ptr, "tap", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(row, ptr, "use_level", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(row, ptr, "use_tap", UI_ITEM_R_TOGGLE, NULL, 0);
row= uiLayoutRow(split, 1);
uiItemR(row, ptr, "invert", UI_ITEM_R_TOGGLE, "Invert", 0);
@@ -3282,10 +3275,10 @@ static void draw_sensor_collision(uiLayout *layout, PointerRNA *ptr, bContext *C
split = uiLayoutSplit(layout, 0.3, 0);
row = uiLayoutRow(split, 1);
- uiItemR(row, ptr, "pulse", UI_ITEM_R_TOGGLE, NULL, 0);
- uiItemR(row, ptr, "collision_type", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(row, ptr, "use_pulse", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(row, ptr, "use_material", UI_ITEM_R_TOGGLE, NULL, 0);
- switch (RNA_enum_get(ptr, "collision_type")) {
+ switch (RNA_enum_get(ptr, "use_material")) {
case SENS_COLLISION_PROPERTY:
uiItemR(split, ptr, "property", 0, NULL, 0);
break;
@@ -3303,7 +3296,7 @@ static void draw_sensor_delay(uiLayout *layout, PointerRNA *ptr)
uiItemR(row, ptr, "delay", 0, NULL, 0);
uiItemR(row, ptr, "duration", 0, NULL, 0);
- uiItemR(row, ptr, "repeat", 0, NULL, 0);
+ uiItemR(row, ptr, "use_repeat", 0, NULL, 0);
}
static void draw_sensor_joystick(uiLayout *layout, PointerRNA *ptr)
@@ -3315,10 +3308,10 @@ static void draw_sensor_joystick(uiLayout *layout, PointerRNA *ptr)
switch (RNA_enum_get(ptr, "event_type")) {
case SENS_JOY_BUTTON:
- uiItemR(layout, ptr, "all_events", 0, NULL, 0);
+ uiItemR(layout, ptr, "use_all_events", 0, NULL, 0);
col = uiLayoutColumn(layout, 0);
- uiLayoutSetActive(col, RNA_boolean_get(ptr, "all_events")==0);
+ uiLayoutSetActive(col, RNA_boolean_get(ptr, "use_all_events")==0);
uiItemR(col, ptr, "button_number", 0, NULL, 0);
break;
case SENS_JOY_AXIS:
@@ -3326,17 +3319,17 @@ static void draw_sensor_joystick(uiLayout *layout, PointerRNA *ptr)
uiItemR(row, ptr, "axis_number", 0, NULL, 0);
uiItemR(row, ptr, "axis_threshold", 0, NULL, 0);
- uiItemR(layout, ptr, "all_events", 0, NULL, 0);
+ uiItemR(layout, ptr, "use_all_events", 0, NULL, 0);
col = uiLayoutColumn(layout, 0);
- uiLayoutSetActive(col, RNA_boolean_get(ptr, "all_events")==0);
+ uiLayoutSetActive(col, RNA_boolean_get(ptr, "use_all_events")==0);
uiItemR(col, ptr, "axis_direction", 0, NULL, 0);
break;
case SENS_JOY_HAT:
uiItemR(layout, ptr, "hat_number", 0, NULL, 0);
- uiItemR(layout, ptr, "all_events", 0, NULL, 0);
+ uiItemR(layout, ptr, "use_all_events", 0, NULL, 0);
col = uiLayoutColumn(layout, 0);
- uiLayoutSetActive(col, RNA_boolean_get(ptr, "all_events")==0);
+ uiLayoutSetActive(col, RNA_boolean_get(ptr, "use_all_events")==0);
uiItemR(col, ptr, "hat_direction", 0, NULL, 0);
break;
case SENS_JOY_AXIS_SINGLE:
@@ -3356,20 +3349,20 @@ static void draw_sensor_keyboard(uiLayout *layout, PointerRNA *ptr)
row = uiLayoutRow(layout, 0);
uiItemL(row, "Key:", 0);
col = uiLayoutColumn(row, 0);
- uiLayoutSetActive(col, RNA_boolean_get(ptr, "all_keys")==0);
+ uiLayoutSetActive(col, RNA_boolean_get(ptr, "use_all_keys")==0);
uiItemR(col, ptr, "key", UI_ITEM_R_EVENT, "", 0);
col = uiLayoutColumn(row, 0);
- uiItemR(col, ptr, "all_keys", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(col, ptr, "use_all_keys", UI_ITEM_R_TOGGLE, NULL, 0);
col = uiLayoutColumn(layout, 0);
- uiLayoutSetActive(col, RNA_boolean_get(ptr, "all_keys")==0);
+ uiLayoutSetActive(col, RNA_boolean_get(ptr, "use_all_keys")==0);
row = uiLayoutRow(col, 0);
uiItemL(row, "First Modifier:", 0);
- uiItemR(row, ptr, "modifier_key", UI_ITEM_R_EVENT, "", 0);
+ uiItemR(row, ptr, "modifier_key_1", UI_ITEM_R_EVENT, "", 0);
row = uiLayoutRow(col, 0);
uiItemL(row, "Second Modifier:", 0);
- uiItemR(row, ptr, "second_modifier_key", UI_ITEM_R_EVENT, "", 0);
+ uiItemR(row, ptr, "modifier_key_2", UI_ITEM_R_EVENT, "", 0);
RNA_pointer_create((ID *)ob, &RNA_GameObjectSettings, ob, &settings_ptr);
uiItemPointerR(layout, ptr, "target", &settings_ptr, "properties", NULL, 0);
@@ -3411,8 +3404,8 @@ static void draw_sensor_property(uiLayout *layout, PointerRNA *ptr)
switch (RNA_enum_get(ptr, "evaluation_type")) {
case SENS_PROP_INTERVAL:
row = uiLayoutRow(layout, 0);
- uiItemR(row, ptr, "min_value", 0, NULL, 0);
- uiItemR(row, ptr, "max_value", 0, NULL, 0);
+ uiItemR(row, ptr, "value_min", 0, NULL, 0);
+ uiItemR(row, ptr, "value_max", 0, NULL, 0);
break;
case SENS_PROP_EQUAL:
uiItemR(layout, ptr, "value", 0, NULL, 0);
@@ -3463,7 +3456,7 @@ static void draw_sensor_ray(uiLayout *layout, PointerRNA *ptr, bContext *C)
uiItemR(split, ptr, "axis", 0, "", 0);
row= uiLayoutRow(split, 0);
uiItemR(row, ptr, "range", 0, NULL, 0);
- uiItemR(row, ptr, "x_ray_mode", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(row, ptr, "use_x_ray", UI_ITEM_R_TOGGLE, NULL, 0);
}
static void draw_sensor_touch(uiLayout *layout, PointerRNA *ptr)
@@ -3475,7 +3468,7 @@ void draw_brick_sensor(uiLayout *layout, PointerRNA *ptr, bContext *C)
{
uiLayout *box;
- if (!RNA_boolean_get(ptr, "expanded"))
+ if (!RNA_boolean_get(ptr, "show_expanded"))
return;
draw_sensor_internal_header(layout, ptr);
@@ -3538,13 +3531,13 @@ static void draw_controller_header(uiLayout *layout, PointerRNA *ptr, int xco, i
bController *cont= (bController *)ptr->data;
char state[3];
- sprintf(state, "%d", RNA_int_get(ptr, "state"));
+ sprintf(state, "%d", RNA_int_get(ptr, "states"));
box= uiLayoutBox(layout);
row= uiLayoutRow(box, 0);
- uiItemR(row, ptr, "expanded", UI_ITEM_R_NO_BG, "", 0);
- if(RNA_boolean_get(ptr, "expanded")) {
+ uiItemR(row, ptr, "show_expanded", UI_ITEM_R_NO_BG, "", 0);
+ if(RNA_boolean_get(ptr, "show_expanded")) {
uiItemR(row, ptr, "type", 0, "", 0);
uiItemR(row, ptr, "name", 0, "", 0);
/* XXX provisory for Blender 2.50Beta */
@@ -3555,9 +3548,9 @@ static void draw_controller_header(uiLayout *layout, PointerRNA *ptr, int xco, i
uiItemL(row, state, 0);
}
- uiItemR(row, ptr, "priority", 0, "", 0);
+ uiItemR(row, ptr, "use_priority", 0, "", 0);
- if(RNA_boolean_get(ptr, "expanded")==0) {
+ if(RNA_boolean_get(ptr, "show_expanded")==0) {
subrow= uiLayoutRow(row, 1);
uiItemEnumO(subrow, "LOGIC_OT_controller_move", "", ICON_TRIA_UP, "direction", 1); // up
uiItemEnumO(subrow, "LOGIC_OT_controller_move", "", ICON_TRIA_DOWN, "direction", 2); // down
@@ -3582,7 +3575,7 @@ static void draw_controller_python(uiLayout *layout, PointerRNA *ptr)
else {
subsplit = uiLayoutSplit(split, 0.8, 0);
uiItemR(subsplit, ptr, "module", 0, "", 0);
- uiItemR(subsplit, ptr, "debug", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(subsplit, ptr, "use_debug", UI_ITEM_R_TOGGLE, NULL, 0);
}
}
@@ -3595,7 +3588,7 @@ void draw_brick_controller(uiLayout *layout, PointerRNA *ptr)
{
uiLayout *box;
- if (!RNA_boolean_get(ptr, "expanded"))
+ if (!RNA_boolean_get(ptr, "show_expanded"))
return;
box = uiLayoutBox(layout);
@@ -3633,8 +3626,8 @@ static void draw_actuator_header(uiLayout *layout, PointerRNA *ptr, PointerRNA *
box= uiLayoutBox(layout);
row= uiLayoutRow(box, 0);
- uiItemR(row, ptr, "expanded", UI_ITEM_R_NO_BG, "", 0);
- if(RNA_boolean_get(ptr, "expanded")) {
+ uiItemR(row, ptr, "show_expanded", UI_ITEM_R_NO_BG, "", 0);
+ if(RNA_boolean_get(ptr, "show_expanded")) {
uiItemR(row, ptr, "type", 0, "", 0);
uiItemR(row, ptr, "name", 0, "", 0);
} else {
@@ -3643,11 +3636,11 @@ static void draw_actuator_header(uiLayout *layout, PointerRNA *ptr, PointerRNA *
}
subrow= uiLayoutRow(row, 0);
- uiLayoutSetActive(subrow, ((RNA_boolean_get(logic_ptr, "actuators_show_active_states")
- && RNA_boolean_get(ptr, "expanded")) || RNA_boolean_get(ptr, "pinned")));
- uiItemR(subrow, ptr, "pinned", UI_ITEM_R_NO_BG, "", 0);
+ uiLayoutSetActive(subrow, ((RNA_boolean_get(logic_ptr, "show_actuators_active_states")
+ && RNA_boolean_get(ptr, "show_expanded")) || RNA_boolean_get(ptr, "pin")));
+ uiItemR(subrow, ptr, "pin", UI_ITEM_R_NO_BG, "", 0);
- if(RNA_boolean_get(ptr, "expanded")==0) {
+ if(RNA_boolean_get(ptr, "show_expanded")==0) {
subrow= uiLayoutRow(row, 1);
uiItemEnumO(subrow, "LOGIC_OT_actuator_move", "", ICON_TRIA_UP, "direction", 1); // up
uiItemEnumO(subrow, "LOGIC_OT_actuator_move", "", ICON_TRIA_DOWN, "direction", 2); // down
@@ -3668,9 +3661,9 @@ static void draw_actuator_action(uiLayout *layout, PointerRNA *ptr)
RNA_pointer_create((ID *)ob, &RNA_GameObjectSettings, ob, &settings_ptr);
row= uiLayoutRow(layout, 0);
- uiItemR(row, ptr, "mode", 0, "", 0);
+ uiItemR(row, ptr, "play_mode", 0, "", 0);
uiItemR(row, ptr, "action", 0, NULL, 0);
- uiItemR(row, ptr, "continue_last_frame", 0, NULL, 0);
+ uiItemR(row, ptr, "use_continue_last_frame", 0, NULL, 0);
row= uiLayoutRow(layout, 0);
if((RNA_enum_get(ptr, "mode") == ACT_ACTION_FROM_PROP))
@@ -3682,7 +3675,7 @@ static void draw_actuator_action(uiLayout *layout, PointerRNA *ptr)
}
row= uiLayoutRow(layout, 0);
- uiItemR(row, ptr, "blendin", 0, NULL, 0);
+ uiItemR(row, ptr, "frame_blend_in", 0, NULL, 0);
uiItemR(row, ptr, "priority", 0, NULL, 0);
row= uiLayoutRow(layout, 0);
@@ -3788,8 +3781,8 @@ static void draw_actuator_constraint(uiLayout *layout, PointerRNA *ptr, bContext
split = uiLayoutSplit(layout, 0.8, 0);
uiItemR(split, ptr, "direction", 0, NULL, 0);
row = uiLayoutRow(split, 1);
- uiItemR(row, ptr, "local", UI_ITEM_R_TOGGLE, NULL, 0);
- uiItemR(row, ptr, "normal", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(row, ptr, "use_local", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(row, ptr, "use_normal", UI_ITEM_R_TOGGLE, NULL, 0);
row = uiLayoutRow(layout, 0);
col = uiLayoutColumn(row, 0);
@@ -3797,22 +3790,22 @@ static void draw_actuator_constraint(uiLayout *layout, PointerRNA *ptr, bContext
uiItemR(col, ptr, "range", 0, "", 0);
col = uiLayoutColumn(row, 1);
- uiItemR(col, ptr, "force_distance", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(col, ptr, "use_force_distance", UI_ITEM_R_TOGGLE, NULL, 0);
subcol = uiLayoutColumn(col, 0);
- uiLayoutSetActive(subcol, RNA_boolean_get(ptr, "force_distance")==1);
+ uiLayoutSetActive(subcol, RNA_boolean_get(ptr, "use_force_distance")==1);
uiItemR(subcol, ptr, "distance", 0, "", 0);
uiItemR(layout, ptr, "damping", UI_ITEM_R_SLIDER , NULL, 0);
split = uiLayoutSplit(layout, 0.15, 0);
- uiItemR(split, ptr, "detect_material", UI_ITEM_R_TOGGLE, NULL, 0);
- if (RNA_boolean_get(ptr, "detect_material"))
+ uiItemR(split, ptr, "use_material_detect", UI_ITEM_R_TOGGLE, NULL, 0);
+ if (RNA_boolean_get(ptr, "use_material_detect"))
uiItemPointerR(split, ptr, "material", &main_ptr, "materials", NULL, ICON_MATERIAL_DATA);
else
uiItemR(split, ptr, "property", 0, NULL, 0);
split = uiLayoutSplit(layout, 0.15, 0);
- uiItemR(split, ptr, "persistent", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(split, ptr, "use_persistent", UI_ITEM_R_TOGGLE, NULL, 0);
row = uiLayoutRow(split, 1);
uiItemR(row, ptr, "time", 0, NULL, 0);
@@ -3827,11 +3820,11 @@ static void draw_actuator_constraint(uiLayout *layout, PointerRNA *ptr, bContext
uiItemR(row, ptr, "time", 0, NULL, 0);
row=uiLayoutRow(layout, 0);
- uiItemR(row, ptr, "max_rotation", 0, NULL, 0);
+ uiItemR(row, ptr, "rotation_max", 0, NULL, 0);
row=uiLayoutRow(layout, 1);
- uiItemR(row, ptr, "min_angle", 0, NULL, 0);
- uiItemR(row, ptr, "max_angle", 0, NULL, 0);
+ uiItemR(row, ptr, "angle_min", 0, NULL, 0);
+ uiItemR(row, ptr, "angle_max", 0, NULL, 0);
break;
case ACT_CONST_TYPE_FH:
@@ -3840,23 +3833,23 @@ static void draw_actuator_constraint(uiLayout *layout, PointerRNA *ptr, bContext
uiItemR(row, ptr, "fh_damping", UI_ITEM_R_SLIDER , NULL, 0);
uiItemR(row, ptr, "fh_height", 0, NULL, 0);
- uiItemR(split, ptr, "fh_paralel_axis", UI_ITEM_R_TOGGLE , NULL, 0);
+ uiItemR(split, ptr, "use_fh_paralel_axis", UI_ITEM_R_TOGGLE , NULL, 0);
row = uiLayoutRow(layout, 0);
uiItemR(row, ptr, "direction_axis", 0, NULL, 0);
split = uiLayoutSplit(row, 0.9, 0);
uiItemR(split, ptr, "spring", 0, NULL, 0);
- uiItemR(split, ptr, "fh_normal", UI_ITEM_R_TOGGLE , NULL, 0);
+ uiItemR(split, ptr, "use_fh_normal", UI_ITEM_R_TOGGLE , NULL, 0);
split = uiLayoutSplit(layout, 0.15, 0);
- uiItemR(split, ptr, "detect_material", UI_ITEM_R_TOGGLE, NULL, 0);
- if (RNA_boolean_get(ptr, "detect_material"))
+ uiItemR(split, ptr, "use_material_detect", UI_ITEM_R_TOGGLE, NULL, 0);
+ if (RNA_boolean_get(ptr, "use_material_detect"))
uiItemPointerR(split, ptr, "material", &main_ptr, "materials", NULL, ICON_MATERIAL_DATA);
else
uiItemR(split, ptr, "property", 0, NULL, 0);
split = uiLayoutSplit(layout, 0.15, 0);
- uiItemR(split, ptr, "persistent", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(split, ptr, "use_persistent", UI_ITEM_R_TOGGLE, NULL, 0);
row = uiLayoutRow(split, 0);
uiItemR(row, ptr, "time", 0, NULL, 0);
@@ -3881,12 +3874,12 @@ static void draw_actuator_edit_object(uiLayout *layout, PointerRNA *ptr)
split = uiLayoutSplit(layout, 0.9, 0);
row = uiLayoutRow(split, 0);
uiItemR(row, ptr, "linear_velocity", 0, NULL, 0);
- uiItemR(split, ptr, "local_linear_velocity", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(split, ptr, "use_local_linear_velocity", UI_ITEM_R_TOGGLE, NULL, 0);
split = uiLayoutSplit(layout, 0.9, 0);
row = uiLayoutRow(split, 0);
uiItemR(row, ptr, "angular_velocity", 0, NULL, 0);
- uiItemR(split, ptr, "local_angular_velocity", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(split, ptr, "use_local_angular_velocity", UI_ITEM_R_TOGGLE, NULL, 0);
break;
case ACT_EDOB_END_OBJECT:
break;
@@ -3898,15 +3891,15 @@ static void draw_actuator_edit_object(uiLayout *layout, PointerRNA *ptr)
split = uiLayoutSplit(layout, 0.6, 0);
uiItemR(split, ptr, "mesh", 0, NULL, 0);
row = uiLayoutRow(split, 0);
- uiItemR(row, ptr, "replace_display_mesh", UI_ITEM_R_TOGGLE, NULL, 0);
- uiItemR(row, ptr, "replace_physics_mesh", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(row, ptr, "use_replace_display_mesh", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(row, ptr, "use_replace_physics_mesh", UI_ITEM_R_TOGGLE, NULL, 0);
break;
case ACT_EDOB_TRACK_TO:
split = uiLayoutSplit(layout, 0.5, 0);
uiItemR(split, ptr, "track_object", 0, NULL, 0);
subsplit = uiLayoutSplit(split, 0.7, 0);
uiItemR(subsplit, ptr, "time", 0, NULL, 0);
- uiItemR(subsplit, ptr, "enable_3d_tracking", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(subsplit, ptr, "use_3d_tracking", UI_ITEM_R_TOGGLE, NULL, 0);
break;
case ACT_EDOB_DYNAMICS:
if(ob->type != OB_MESH) {
@@ -3934,9 +3927,9 @@ static void draw_actuator_filter_2d(uiLayout *layout, PointerRNA *ptr)
case ACT_2DFILTER_MOTIONBLUR:
split=uiLayoutSplit(layout, 0.75, 1);
row= uiLayoutRow(split, 0);
- uiLayoutSetActive(row, RNA_boolean_get(ptr, "enable_motion_blur")==1);
- uiItemR(row, ptr, "motion_blur_value", 0, NULL, 0);
- uiItemR(split, ptr, "enable_motion_blur", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiLayoutSetActive(row, RNA_boolean_get(ptr, "use_motion_blur")==1);
+ uiItemR(row, ptr, "motion_blur_factor", 0, NULL, 0);
+ uiItemR(split, ptr, "use_motion_blur", UI_ITEM_R_TOGGLE, NULL, 0);
break;
default: // all other 2D Filters
uiItemR(layout, ptr, "filter_pass", 0, NULL, 0);
@@ -3963,12 +3956,12 @@ static void draw_actuator_ipo(uiLayout *layout, PointerRNA *ptr)
row= uiLayoutRow(layout, 0);
uiItemR(row, ptr, "play_type", 0, "", 0);
subrow= uiLayoutRow(row, 1);
- uiItemR(subrow, ptr, "force", UI_ITEM_R_TOGGLE, NULL, 0);
- uiItemR(subrow, ptr, "add", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(subrow, ptr, "use_force", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(subrow, ptr, "use_additive", UI_ITEM_R_TOGGLE, NULL, 0);
col = uiLayoutColumn(subrow, 0);
- uiLayoutSetActive(col, (RNA_boolean_get(ptr, "add") || RNA_boolean_get(ptr, "force")));
- uiItemR(col, ptr, "local", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiLayoutSetActive(col, (RNA_boolean_get(ptr, "use_additive") || RNA_boolean_get(ptr, "use_force")));
+ uiItemR(col, ptr, "use_local", UI_ITEM_R_TOGGLE, NULL, 0);
row= uiLayoutRow(layout, 0);
if((RNA_enum_get(ptr, "play_type") == ACT_IPO_FROM_PROP))
@@ -3978,7 +3971,7 @@ static void draw_actuator_ipo(uiLayout *layout, PointerRNA *ptr)
uiItemR(row, ptr, "frame_start", 0, NULL, 0);
uiItemR(row, ptr, "frame_end", 0, NULL, 0);
}
- uiItemR(row, ptr, "child", 0, NULL, 0);
+ uiItemR(row, ptr, "apply_to_children", 0, NULL, 0);
row= uiLayoutRow(layout, 0);
uiItemPointerR(row, ptr, "frame_property", &settings_ptr, "properties", NULL, 0);
@@ -4024,37 +4017,37 @@ static void draw_actuator_motion(uiLayout *layout, PointerRNA *ptr)
case ACT_OBJECT_NORMAL:
split = uiLayoutSplit(layout, 0.9, 0);
row = uiLayoutRow(split, 0);
- uiItemR(row, ptr, "loc", 0, NULL, 0);
- uiItemR(split, ptr, "local_location", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(row, ptr, "offset_location", 0, NULL, 0);
+ uiItemR(split, ptr, "use_local_location", UI_ITEM_R_TOGGLE, NULL, 0);
split = uiLayoutSplit(layout, 0.9, 0);
row = uiLayoutRow(split, 0);
- uiItemR(row, ptr, "rot", 0, NULL, 0);
- uiItemR(split, ptr, "local_rotation", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(row, ptr, "offset_rotation", 0, NULL, 0);
+ uiItemR(split, ptr, "use_local_rotation", UI_ITEM_R_TOGGLE, NULL, 0);
if (ELEM3(physics_type, OB_BODY_TYPE_DYNAMIC, OB_BODY_TYPE_RIGID, OB_BODY_TYPE_SOFT)) {
uiItemL(layout, "Dynamic Object Settings:", 0);
split = uiLayoutSplit(layout, 0.9, 0);
row = uiLayoutRow(split, 0);
uiItemR(row, ptr, "force", 0, NULL, 0);
- uiItemR(split, ptr, "local_force", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(split, ptr, "use_local_force", UI_ITEM_R_TOGGLE, NULL, 0);
split = uiLayoutSplit(layout, 0.9, 0);
row = uiLayoutRow(split, 0);
uiItemR(row, ptr, "torque", 0, NULL, 0);
- uiItemR(split, ptr, "local_torque", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(split, ptr, "use_local_torque", UI_ITEM_R_TOGGLE, NULL, 0);
split = uiLayoutSplit(layout, 0.9, 0);
row = uiLayoutRow(split, 0);
uiItemR(row, ptr, "linear_velocity", 0, NULL, 0);
row = uiLayoutRow(split, 1);
- uiItemR(row, ptr, "local_linear_velocity", UI_ITEM_R_TOGGLE, NULL, 0);
- uiItemR(row, ptr, "add_linear_velocity", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(row, ptr, "use_local_linear_velocity", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(row, ptr, "use_add_linear_velocity", UI_ITEM_R_TOGGLE, NULL, 0);
split = uiLayoutSplit(layout, 0.9, 0);
row = uiLayoutRow(split, 0);
uiItemR(row, ptr, "angular_velocity", 0, NULL, 0);
- uiItemR(split, ptr, "local_angular_velocity", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(split, ptr, "use_local_angular_velocity", UI_ITEM_R_TOGGLE, NULL, 0);
uiItemR(layout, ptr, "damping", 0, NULL, 0);
}
@@ -4065,27 +4058,27 @@ static void draw_actuator_motion(uiLayout *layout, PointerRNA *ptr)
split = uiLayoutSplit(layout, 0.9, 0);
row = uiLayoutRow(split, 0);
uiItemR(row, ptr, "linear_velocity", 0, NULL, 0);
- uiItemR(split, ptr, "local_linear_velocity", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(split, ptr, "use_local_linear_velocity", UI_ITEM_R_TOGGLE, NULL, 0);
row = uiLayoutRow(layout, 0);
col = uiLayoutColumn(row, 0);
- uiItemR(col, ptr, "servo_limit_x", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(col, ptr, "use_servo_limit_x", UI_ITEM_R_TOGGLE, NULL, 0);
subcol = uiLayoutColumn(col, 1);
- uiLayoutSetActive(subcol, RNA_boolean_get(ptr, "servo_limit_x")==1);
+ uiLayoutSetActive(subcol, RNA_boolean_get(ptr, "use_servo_limit_x")==1);
uiItemR(subcol, ptr, "force_max_x", 0, NULL, 0);
uiItemR(subcol, ptr, "force_min_x", 0, NULL, 0);
col = uiLayoutColumn(row, 0);
- uiItemR(col, ptr, "servo_limit_y", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(col, ptr, "use_servo_limit_y", UI_ITEM_R_TOGGLE, NULL, 0);
subcol = uiLayoutColumn(col, 1);
- uiLayoutSetActive(subcol, RNA_boolean_get(ptr, "servo_limit_y")==1);
+ uiLayoutSetActive(subcol, RNA_boolean_get(ptr, "use_servo_limit_y")==1);
uiItemR(subcol, ptr, "force_max_y", 0, NULL, 0);
uiItemR(subcol, ptr, "force_min_y", 0, NULL, 0);
col = uiLayoutColumn(row, 0);
- uiItemR(col, ptr, "servo_limit_z", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(col, ptr, "use_servo_limit_z", UI_ITEM_R_TOGGLE, NULL, 0);
subcol = uiLayoutColumn(col, 1);
- uiLayoutSetActive(subcol, RNA_boolean_get(ptr, "servo_limit_z")==1);
+ uiLayoutSetActive(subcol, RNA_boolean_get(ptr, "use_servo_limit_z")==1);
uiItemR(subcol, ptr, "force_max_z", 0, NULL, 0);
uiItemR(subcol, ptr, "force_min_z", 0, NULL, 0);
@@ -4109,8 +4102,8 @@ static void draw_actuator_parent(uiLayout *layout, PointerRNA *ptr)
uiItemR(layout, ptr, "object", 0, NULL, 0);
row = uiLayoutRow(layout, 0);
- uiItemR(row, ptr, "compound", 0, NULL, 0);
- uiItemR(row, ptr, "ghost", 0, NULL, 0);
+ uiItemR(row, ptr, "use_compound", 0, NULL, 0);
+ uiItemR(row, ptr, "use_ghost", 0, NULL, 0);
}
static void draw_actuator_property(uiLayout *layout, PointerRNA *ptr)
@@ -4175,7 +4168,7 @@ static void draw_actuator_random(uiLayout *layout, PointerRNA *ptr)
switch (RNA_enum_get(ptr, "distribution")){
case ACT_RANDOM_BOOL_CONST:
- uiItemR(row, ptr, "always_true", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(row, ptr, "use_always_true", UI_ITEM_R_TOGGLE, NULL, 0);
break;
case ACT_RANDOM_BOOL_UNIFORM:
@@ -4251,7 +4244,7 @@ static void draw_actuator_shape_action(uiLayout *layout, PointerRNA *ptr)
row= uiLayoutRow(layout, 0);
uiItemR(row, ptr, "mode", 0, "", 0);
uiItemR(row, ptr, "action", 0, NULL, 0);
- uiItemR(row, ptr, "continue_last_frame", 0, NULL, 0);
+ uiItemR(row, ptr, "use_continue_last_frame", 0, NULL, 0);
row= uiLayoutRow(layout, 0);
if((RNA_enum_get(ptr, "mode") == ACT_ACTION_FROM_PROP))
@@ -4263,7 +4256,7 @@ static void draw_actuator_shape_action(uiLayout *layout, PointerRNA *ptr)
}
row= uiLayoutRow(layout, 0);
- uiItemR(row, ptr, "blendin", 0, NULL, 0);
+ uiItemR(row, ptr, "frame_blend_in", 0, NULL, 0);
uiItemR(row, ptr, "priority", 0, NULL, 0);
row= uiLayoutRow(layout, 0);
@@ -4278,7 +4271,7 @@ static void draw_actuator_sound(uiLayout *layout, PointerRNA *ptr, bContext *C)
{
uiLayout *row, *col;
- uiTemplateID(layout, C, ptr, "sound", NULL, "SOUND_OT_open", NULL, NULL);
+ uiTemplateID(layout, C, ptr, "sound", NULL, "SOUND_OT_open", NULL);
if (!RNA_pointer_get(ptr, "sound").data)
{
uiItemL(layout, "Select a sound from the list or load a new one", 0);
@@ -4290,18 +4283,18 @@ static void draw_actuator_sound(uiLayout *layout, PointerRNA *ptr, bContext *C)
uiItemR(row, ptr, "volume", 0, NULL, 0);
uiItemR(row, ptr, "pitch", 0, NULL, 0);
- uiItemR(layout, ptr, "enable_sound_3d", 0, NULL, 0);
+ uiItemR(layout, ptr, "use_sound_3d", 0, NULL, 0);
col = uiLayoutColumn(layout, 0);
- uiLayoutSetActive(col, RNA_boolean_get(ptr, "enable_sound_3d")==1);
+ uiLayoutSetActive(col, RNA_boolean_get(ptr, "use_sound_3d")==1);
row = uiLayoutRow(col, 0);
- uiItemR(row, ptr, "minimum_gain_3d", 0, NULL, 0);
- uiItemR(row, ptr, "maximum_gain_3d", 0, NULL, 0);
+ uiItemR(row, ptr, "gain_3d_min", 0, NULL, 0);
+ uiItemR(row, ptr, "gain_3d_max", 0, NULL, 0);
row = uiLayoutRow(col, 0);
- uiItemR(row, ptr, "reference_distance_3d", 0, NULL, 0);
- uiItemR(row, ptr, "max_distance_3d", 0, NULL, 0);
+ uiItemR(row, ptr, "distance_3d_reference", 0, NULL, 0);
+ uiItemR(row, ptr, "distance_3d_max", 0, NULL, 0);
row = uiLayoutRow(col, 0);
uiItemR(row, ptr, "rolloff_factor_3d", 0, NULL, 0);
@@ -4322,7 +4315,7 @@ static void draw_actuator_state(uiLayout *layout, PointerRNA *ptr)
split = uiLayoutSplit(layout, 0.35, 0);
uiItemR(split, ptr, "operation", 0, NULL, 0);
- uiTemplateLayers(split, ptr, "state", &settings_ptr, "used_state", 0);
+ uiTemplateLayers(split, ptr, "states", &settings_ptr, "used_states", 0);
}
static void draw_actuator_visibility(uiLayout *layout, PointerRNA *ptr)
@@ -4330,16 +4323,16 @@ static void draw_actuator_visibility(uiLayout *layout, PointerRNA *ptr)
uiLayout *row;
row = uiLayoutRow(layout, 0);
- uiItemR(row, ptr, "visible", 0, NULL, 0);
- uiItemR(row, ptr, "occlusion", 0, NULL, 0);
- uiItemR(row, ptr, "children", 0, NULL, 0);
+ uiItemR(row, ptr, "use_visible", 0, NULL, 0);
+ uiItemR(row, ptr, "use_occlusion", 0, NULL, 0);
+ uiItemR(row, ptr, "apply_to_children", 0, NULL, 0);
}
void draw_brick_actuator(uiLayout *layout, PointerRNA *ptr, bContext *C)
{
uiLayout *box;
- if (!RNA_boolean_get(ptr, "expanded"))
+ if (!RNA_boolean_get(ptr, "show_expanded"))
return;
box = uiLayoutBox(layout);
@@ -4476,9 +4469,9 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
uiDefBlockBut(block, controller_menu, NULL, "Controllers", xco-10, yco, 300, UI_UNIT_Y, ""); /* replace this with uiLayout stuff later */
- uiItemR(row, &logic_ptr, "controllers_show_selected_objects", 0, "Sel", 0);
- uiItemR(row, &logic_ptr, "controllers_show_active_objects", 0, "Act", 0);
- uiItemR(row, &logic_ptr, "controllers_show_linked_controller", 0, "Link", 0);
+ uiItemR(row, &logic_ptr, "show_controllers_selected_objects", 0, "Sel", 0);
+ uiItemR(row, &logic_ptr, "show_controllers_active_object", 0, "Act", 0);
+ uiItemR(row, &logic_ptr, "show_controllers_linked_controller", 0, "Link", 0);
for(a=0; a<count; a++) {
bController *cont;
@@ -4488,7 +4481,7 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
ob= (Object *)idar[a];
- /* only draw the controller common header if "visible" */
+ /* only draw the controller common header if "use_visible" */
if( (ob->scavisflag & OB_VIS_CONT) == 0) continue;
/* Drawing the Controller Header common to all Selected Objects */
@@ -4515,14 +4508,14 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
subsplit= uiLayoutSplit(split, 0.85, 0);
col= uiLayoutColumn(subsplit, 0);
row= uiLayoutRow(col, 0);
- uiLayoutSetActive(row, RNA_boolean_get(&settings_ptr, "all_states")==0);
- uiTemplateLayers(row, &settings_ptr, "visible_state", &settings_ptr, "used_state", 0);
+ uiLayoutSetActive(row, RNA_boolean_get(&settings_ptr, "use_all_states")==0);
+ uiTemplateLayers(row, &settings_ptr, "states_visible", &settings_ptr, "used_states", 0);
row= uiLayoutRow(col, 0);
- uiTemplateLayers(row, &settings_ptr, "initial_state", &settings_ptr, "used_state", 0);
+ uiTemplateLayers(row, &settings_ptr, "states_initial", &settings_ptr, "used_states", 0);
col= uiLayoutColumn(subsplit, 0);
- uiItemR(col, &settings_ptr, "all_states", UI_ITEM_R_TOGGLE, NULL, 0);
- uiItemR(col, &settings_ptr, "debug_state", 0, "", 0);
+ uiItemR(col, &settings_ptr, "use_all_states", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(col, &settings_ptr, "show_debug_state", 0, "", 0);
}
/* End of Drawing the Controller Header common to all Selected Objects */
@@ -4579,10 +4572,10 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
uiDefBlockBut(block, sensor_menu, NULL, "Sensors", xco-10, yco, 300, UI_UNIT_Y, ""); /* replace this with uiLayout stuff later */
- uiItemR(row, &logic_ptr, "sensors_show_selected_objects", 0, "Sel", 0);
- uiItemR(row, &logic_ptr, "sensors_show_active_objects", 0, "Act", 0);
- uiItemR(row, &logic_ptr, "sensors_show_linked_controller", 0, "Link", 0);
- uiItemR(row, &logic_ptr, "sensors_show_active_states", 0, "State", 0);
+ uiItemR(row, &logic_ptr, "show_sensors_selected_objects", 0, "Sel", 0);
+ uiItemR(row, &logic_ptr, "show_sensors_active_object", 0, "Act", 0);
+ uiItemR(row, &logic_ptr, "show_sensors_linked_controller", 0, "Link", 0);
+ uiItemR(row, &logic_ptr, "show_sensors_active_states", 0, "State", 0);
for(a=0; a<count; a++) {
bSensor *sens;
@@ -4590,7 +4583,7 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
ob= (Object *)idar[a];
- /* only draw the sensor common header if "visible" */
+ /* only draw the sensor common header if "use_visible" */
if((ob->scavisflag & OB_VIS_SENS) == 0) continue;
row = uiLayoutRow(layout, 1);
@@ -4645,10 +4638,10 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
uiDefBlockBut(block, actuator_menu, NULL, "Actuators", xco-10, yco, 300, UI_UNIT_Y, ""); /* replace this with uiLayout stuff later */
- uiItemR(row, &logic_ptr, "actuators_show_selected_objects", 0, "Sel", 0);
- uiItemR(row, &logic_ptr, "actuators_show_active_objects", 0, "Act", 0);
- uiItemR(row, &logic_ptr, "actuators_show_linked_controller", 0, "Link", 0);
- uiItemR(row, &logic_ptr, "actuators_show_active_states", 0, "State", 0);
+ uiItemR(row, &logic_ptr, "show_actuators_selected_objects", 0, "Sel", 0);
+ uiItemR(row, &logic_ptr, "show_actuators_active_object", 0, "Act", 0);
+ uiItemR(row, &logic_ptr, "show_actuators_linked_controller", 0, "Link", 0);
+ uiItemR(row, &logic_ptr, "show_actuators_active_states", 0, "State", 0);
for(a=0; a<count; a++) {
bActuator *act;
@@ -4656,7 +4649,7 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
ob= (Object *)idar[a];
- /* only draw the actuator common header if "visible" */
+ /* only draw the actuator common header if "use_visible" */
if( (ob->scavisflag & OB_VIS_ACT) == 0) continue;
row = uiLayoutRow(layout, 1);
@@ -4715,6 +4708,7 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
void logic_buttons(bContext *C, ARegion *ar)
{
+ Main *bmain= CTX_data_main(C);
SpaceLogic *slogic= CTX_wm_space_logic(C);
Object *ob= CTX_data_active_object(C);
ID **idar;
@@ -5039,7 +5033,7 @@ void logic_buttons(bContext *C, ARegion *ar)
uiButSetFunc(but, make_unique_prop_names_cb, act->name, (void*) 0);
ycoo= yco;
- yco= draw_actuatorbuttons(ob, act, block, xco, yco, width);
+ yco= draw_actuatorbuttons(bmain, ob, act, block, xco, yco, width);
if(yco-6 < ycoo) ycoo= (yco+ycoo-20)/2;
}
else {
diff --git a/source/blender/editors/space_logic/space_logic.c b/source/blender/editors/space_logic/space_logic.c
index ed3d956ce01..01af324334b 100644
--- a/source/blender/editors/space_logic/space_logic.c
+++ b/source/blender/editors/space_logic/space_logic.c
@@ -37,12 +37,10 @@
#include "BKE_context.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "ED_screen.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "WM_api.h"
@@ -296,17 +294,7 @@ static void logic_header_area_init(wmWindowManager *wm, ARegion *ar)
static void logic_header_area_draw(const bContext *C, ARegion *ar)
{
- /* clear */
- UI_ThemeClearColor(ED_screen_area_active(C)?TH_HEADER:TH_HEADERDESEL);
- glClear(GL_COLOR_BUFFER_BIT);
-
- /* set view2d view matrix for scrolling (without scrollers) */
- UI_view2d_view_ortho(C, &ar->v2d);
-
- logic_header_buttons(C, ar);
-
- /* restore view matrix? */
- UI_view2d_view_restore(C);
+ ED_region_header(C, ar);
}
/**************************** spacetype *****************************/
diff --git a/source/blender/editors/space_nla/Makefile b/source/blender/editors/space_nla/Makefile
index d7c9477dc83..fd940081c16 100644
--- a/source/blender/editors/space_nla/Makefile
+++ b/source/blender/editors/space_nla/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/space_nla/nla_buttons.c b/source/blender/editors/space_nla/nla_buttons.c
index 81d4e8b6b01..fc869c4b46f 100644
--- a/source/blender/editors/space_nla/nla_buttons.c
+++ b/source/blender/editors/space_nla/nla_buttons.c
@@ -40,21 +40,10 @@
#include "BLI_editVert.h"
#include "BLI_rand.h"
-#include "BKE_animsys.h"
#include "BKE_nla.h"
-#include "BKE_action.h"
#include "BKE_context.h"
-#include "BKE_curve.h"
-#include "BKE_customdata.h"
-#include "BKE_depsgraph.h"
-#include "BKE_fcurve.h"
-#include "BKE_object.h"
-#include "BKE_global.h"
-#include "BKE_scene.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
-#include "BIF_gl.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -237,7 +226,7 @@ static void nla_panel_animdata (const bContext *C, Panel *pa)
/* Active Action Properties ------------------------------------- */
/* action */
row= uiLayoutRow(layout, 1);
- uiTemplateID(row, (bContext *)C, &adt_ptr, "action", "ACTION_OT_new", NULL, NULL /*"ACTION_OT_unlink"*/, NULL); // XXX: need to make these operators
+ uiTemplateID(row, (bContext *)C, &adt_ptr, "action", "ACTION_OT_new", NULL, NULL /*"ACTION_OT_unlink"*/); // XXX: need to make these operators
/* extrapolation */
row= uiLayoutRow(layout, 1);
@@ -245,7 +234,7 @@ static void nla_panel_animdata (const bContext *C, Panel *pa)
/* blending */
row= uiLayoutRow(layout, 1);
- uiItemR(row, &adt_ptr, "action_blending", 0, NULL, 0);
+ uiItemR(row, &adt_ptr, "action_blend_type", 0, NULL, 0);
/* influence */
row= uiLayoutRow(layout, 1);
@@ -304,26 +293,26 @@ static void nla_panel_properties(const bContext *C, Panel *pa)
/* blending */
row= uiLayoutRow(layout, 1);
- uiItemR(row, &strip_ptr, "blending", 0, NULL, 0);
+ uiItemR(row, &strip_ptr, "blend_type", 0, NULL, 0);
/* blend in/out + autoblending
* - blend in/out can only be set when autoblending is off
*/
column= uiLayoutColumn(layout, 1);
- uiLayoutSetActive(column, RNA_boolean_get(&strip_ptr, "animated_influence")==0);
- uiItemR(column, &strip_ptr, "auto_blending", 0, NULL, 0); // XXX as toggle?
+ uiLayoutSetActive(column, RNA_boolean_get(&strip_ptr, "use_animated_influence")==0);
+ uiItemR(column, &strip_ptr, "use_auto_blend", 0, NULL, 0); // XXX as toggle?
subcol= uiLayoutColumn(column, 1);
- uiLayoutSetActive(subcol, RNA_boolean_get(&strip_ptr, "auto_blending")==0);
+ uiLayoutSetActive(subcol, RNA_boolean_get(&strip_ptr, "use_auto_blend")==0);
uiItemR(subcol, &strip_ptr, "blend_in", 0, NULL, 0);
uiItemR(subcol, &strip_ptr, "blend_out", 0, NULL, 0);
/* settings */
column= uiLayoutColumn(layout, 1);
- uiLayoutSetActive(column, !(RNA_boolean_get(&strip_ptr, "animated_influence") || RNA_boolean_get(&strip_ptr, "animated_time")));
+ uiLayoutSetActive(column, !(RNA_boolean_get(&strip_ptr, "animated_influence") || RNA_boolean_get(&strip_ptr, "use_animated_time")));
uiItemL(column, "Playback Settings:", 0);
- uiItemR(column, &strip_ptr, "muted", 0, NULL, 0);
- uiItemR(column, &strip_ptr, "reversed", 0, NULL, 0);
+ uiItemR(column, &strip_ptr, "mute", 0, NULL, 0);
+ uiItemR(column, &strip_ptr, "use_reverse", 0, NULL, 0);
}
@@ -357,7 +346,7 @@ static void nla_panel_actclip(const bContext *C, Panel *pa)
/* action usage */
column= uiLayoutColumn(layout, 1);
- uiLayoutSetActive(column, RNA_boolean_get(&strip_ptr, "animated_time")==0);
+ uiLayoutSetActive(column, RNA_boolean_get(&strip_ptr, "use_animated_time")==0);
uiItemL(column, "Playback Settings:", 0);
uiItemR(column, &strip_ptr, "scale", 0, NULL, 0);
uiItemR(column, &strip_ptr, "repeat", 0, NULL, 0);
@@ -379,21 +368,21 @@ static void nla_panel_evaluation(const bContext *C, Panel *pa)
uiBlockSetHandleFunc(block, do_nla_region_buttons, NULL);
column= uiLayoutColumn(layout, 1);
- uiItemR(column, &strip_ptr, "animated_influence", 0, NULL, 0);
+ uiItemR(column, &strip_ptr, "use_animated_influence", 0, NULL, 0);
subcolumn= uiLayoutColumn(column, 1);
- uiLayoutSetEnabled(subcolumn, RNA_boolean_get(&strip_ptr, "animated_influence"));
+ uiLayoutSetEnabled(subcolumn, RNA_boolean_get(&strip_ptr, "use_animated_influence"));
uiItemR(subcolumn, &strip_ptr, "influence", 0, NULL, 0);
column= uiLayoutColumn(layout, 1);
subrow= uiLayoutRow(column, 0);
- uiItemR(subrow, &strip_ptr, "animated_time", 0, NULL, 0);
- uiItemR(subrow, &strip_ptr, "animated_time_cyclic", 0, NULL, 0);
+ uiItemR(subrow, &strip_ptr, "use_animated_time", 0, NULL, 0);
+ uiItemR(subrow, &strip_ptr, "use_animated_time_cyclic", 0, NULL, 0);
subcolumn= uiLayoutColumn(column, 1);
subrow= uiLayoutRow(subcolumn, 0);
- uiLayoutSetEnabled(subrow, RNA_boolean_get(&strip_ptr, "animated_time"));
+ uiLayoutSetEnabled(subrow, RNA_boolean_get(&strip_ptr, "use_animated_time"));
uiItemR(subcolumn, &strip_ptr, "strip_time", 0, NULL, 0);
}
diff --git a/source/blender/editors/space_nla/nla_channels.c b/source/blender/editors/space_nla/nla_channels.c
index cf98decb825..b00cba676d0 100644
--- a/source/blender/editors/space_nla/nla_channels.c
+++ b/source/blender/editors/space_nla/nla_channels.c
@@ -35,7 +35,6 @@
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
-#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
@@ -46,7 +45,6 @@
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "ED_anim_api.h"
#include "ED_keyframes_edit.h"
@@ -385,20 +383,22 @@ static int nlaedit_add_tracks_exec (bContext *C, wmOperator *op)
/* add tracks... */
for (ale= anim_data.first; ale; ale= ale->next) {
- NlaTrack *nlt= (NlaTrack *)ale->data;
- AnimData *adt= ale->adt;
-
- /* check if just adding a new track above this one,
- * or whether we're adding a new one to the top of the stack that this one belongs to
- */
- if (above_sel) {
- /* just add a new one above this one */
- add_nlatrack(adt, nlt);
- }
- else if ((lastAdt == NULL) || (adt != lastAdt)) {
- /* add one track to the top of the owning AnimData's stack, then don't add anymore to this stack */
- add_nlatrack(adt, NULL);
- lastAdt= adt;
+ if(ale->type == ANIMTYPE_NLATRACK) {
+ NlaTrack *nlt= (NlaTrack *)ale->data;
+ AnimData *adt= ale->adt;
+
+ /* check if just adding a new track above this one,
+ * or whether we're adding a new one to the top of the stack that this one belongs to
+ */
+ if (above_sel) {
+ /* just add a new one above this one */
+ add_nlatrack(adt, nlt);
+ }
+ else if ((lastAdt == NULL) || (adt != lastAdt)) {
+ /* add one track to the top of the owning AnimData's stack, then don't add anymore to this stack */
+ add_nlatrack(adt, NULL);
+ lastAdt= adt;
+ }
}
}
@@ -451,11 +451,13 @@ static int nlaedit_delete_tracks_exec (bContext *C, wmOperator *op)
/* delete tracks */
for (ale= anim_data.first; ale; ale= ale->next) {
- NlaTrack *nlt= (NlaTrack *)ale->data;
- AnimData *adt= ale->adt;
-
- /* call delete on this track - deletes all strips too */
- free_nlatrack(&adt->nla_tracks, nlt);
+ if(ale->type == ANIMTYPE_NLATRACK) {
+ NlaTrack *nlt= (NlaTrack *)ale->data;
+ AnimData *adt= ale->adt;
+
+ /* call delete on this track - deletes all strips too */
+ free_nlatrack(&adt->nla_tracks, nlt);
+ }
}
/* free temp data */
diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c
index 2314b5ddcfa..f489fc4774f 100644
--- a/source/blender/editors/space_nla/nla_draw.c
+++ b/source/blender/editors/space_nla/nla_draw.c
@@ -37,19 +37,16 @@
#include "DNA_space_types.h"
#include "DNA_windowmanager_types.h"
-#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BLI_rand.h"
#include "BLI_dlrbTree.h"
-#include "BKE_animsys.h"
#include "BKE_fcurve.h"
#include "BKE_nla.h"
#include "BKE_context.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "ED_anim_api.h"
#include "ED_keyframes_draw.h"
@@ -705,7 +702,7 @@ static void draw_nla_channel_list_gl (bAnimContext *ac, ListBase *anim_data, Vie
offset += 7 * indent;
- /* only on top two corners, to show that this channel sits on top of the preceeding ones */
+ /* only on top two corners, to show that this channel sits on top of the preceding ones */
uiSetRoundBox((1|2));
/* draw slightly shifted up vertically to look like it has more separtion from other channels,
diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c
index 38c6ecdca22..247987cda9f 100644
--- a/source/blender/editors/space_nla/nla_edit.c
+++ b/source/blender/editors/space_nla/nla_edit.c
@@ -39,16 +39,13 @@
#include "BLI_math.h"
#include "BLI_rand.h"
-#include "BKE_animsys.h"
#include "BKE_action.h"
#include "BKE_fcurve.h"
#include "BKE_nla.h"
#include "BKE_context.h"
-#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_report.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "ED_anim_api.h"
#include "ED_keyframes_edit.h"
diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c
index dfb50ee33e5..85a169f2bb0 100644
--- a/source/blender/editors/space_nla/nla_ops.c
+++ b/source/blender/editors/space_nla/nla_ops.c
@@ -31,16 +31,12 @@
#include "DNA_scene_types.h"
-#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BLI_rand.h"
-#include "BKE_animsys.h"
-#include "BKE_nla.h"
#include "BKE_context.h"
-#include "BKE_report.h"
#include "BKE_screen.h"
#include "ED_anim_api.h"
@@ -177,7 +173,6 @@ static void nla_keymap_channels (wmKeyConfig *keyconf, wmKeyMap *keymap)
/* delete tracks */
WM_keymap_add_item(keymap, "NLA_OT_delete_tracks", XKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "NLA_OT_delete_tracks", DELKEY, KM_PRESS, 0, 0);
- WM_keymap_add_item(keymap, "NLA_OT_delete_tracks", BACKSPACEKEY, KM_PRESS, 0, 0);
/* General Animation Channels keymap (see anim_channels.c) ----------------------- */
/* selection */
@@ -247,8 +242,7 @@ static void nla_keymap_main (wmKeyConfig *keyconf, wmKeyMap *keymap)
/* delete */
WM_keymap_add_item(keymap, "NLA_OT_delete", XKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "NLA_OT_delete", DELKEY, KM_PRESS, 0, 0);
- WM_keymap_add_item(keymap, "NLA_OT_delete", BACKSPACEKEY, KM_PRESS, 0, 0);
-
+
/* split */
WM_keymap_add_item(keymap, "NLA_OT_split", YKEY, KM_PRESS, 0, 0);
diff --git a/source/blender/editors/space_nla/nla_select.c b/source/blender/editors/space_nla/nla_select.c
index 55463580115..f49897e79fe 100644
--- a/source/blender/editors/space_nla/nla_select.c
+++ b/source/blender/editors/space_nla/nla_select.c
@@ -38,10 +38,8 @@
#include "BLI_math.h"
#include "BLI_rand.h"
-#include "BKE_animsys.h"
#include "BKE_nla.h"
#include "BKE_context.h"
-#include "BKE_report.h"
#include "BKE_screen.h"
#include "ED_anim_api.h"
diff --git a/source/blender/editors/space_nla/space_nla.c b/source/blender/editors/space_nla/space_nla.c
index 64933e3c11a..92c5ef6c410 100644
--- a/source/blender/editors/space_nla/space_nla.c
+++ b/source/blender/editors/space_nla/space_nla.c
@@ -38,15 +38,10 @@
#include "BLI_math.h"
#include "BLI_rand.h"
-#include "BKE_animsys.h"
-#include "BKE_action.h"
-#include "BKE_nla.h"
-#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_main.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "ED_anim_api.h"
#include "ED_markers.h"
diff --git a/source/blender/editors/space_node/Makefile b/source/blender/editors/space_node/Makefile
index 5bd6e95e28c..6c12149a43f 100644
--- a/source/blender/editors/space_node/Makefile
+++ b/source/blender/editors/space_node/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c
index 082f3f97dfd..c1b888fcf83 100644
--- a/source/blender/editors/space_node/drawnode.c
+++ b/source/blender/editors/space_node/drawnode.c
@@ -43,16 +43,9 @@
#include "BKE_context.h"
#include "BKE_curve.h"
-#include "BKE_global.h"
#include "BKE_image.h"
#include "BKE_library.h"
#include "BKE_main.h"
-#include "BKE_material.h"
-#include "BKE_node.h"
-#include "BKE_object.h"
-#include "BKE_texture.h"
-#include "BKE_text.h"
-#include "BKE_utildefines.h"
#include "CMP_node.h"
#include "SHD_node.h"
@@ -81,7 +74,7 @@
void node_buts_group(uiLayout *layout, bContext *C, PointerRNA *ptr)
{
- uiTemplateIDBrowse(layout, C, ptr, "nodetree", NULL, NULL, "", NULL);
+ uiTemplateIDBrowse(layout, C, ptr, "nodetree", NULL, NULL, "");
}
static void node_buts_value(uiLayout *layout, bContext *C, PointerRNA *ptr)
@@ -120,7 +113,7 @@ static void node_buts_mix_rgb(uiLayout *layout, bContext *C, PointerRNA *ptr)
row= uiLayoutRow(layout, 1);
uiItemR(row, ptr, "blend_type", 0, "", 0);
if(ntree->type == NTREE_COMPOSIT)
- uiItemR(row, ptr, "alpha", 0, "", ICON_IMAGE_RGB_ALPHA);
+ uiItemR(row, ptr, "use_alpha", 0, "", ICON_IMAGE_RGB_ALPHA);
}
static void node_buts_time(uiLayout *layout, bContext *C, PointerRNA *ptr)
@@ -141,8 +134,8 @@ static void node_buts_time(uiLayout *layout, bContext *C, PointerRNA *ptr)
uiTemplateCurveMapping(layout, ptr, "curve", 's', 0, 0);
row= uiLayoutRow(layout, 1);
- uiItemR(row, ptr, "start", 0, "Sta", 0);
- uiItemR(row, ptr, "end", 0, "End", 0);
+ uiItemR(row, ptr, "frame_start", 0, "Sta", 0);
+ uiItemR(row, ptr, "frame_end", 0, "End", 0);
}
static void node_buts_colorramp(uiLayout *layout, bContext *C, PointerRNA *ptr)
@@ -190,6 +183,7 @@ static void node_buts_normal(uiLayout *layout, bContext *C, PointerRNA *ptr)
#if 0 // not used in 2.5x yet
static void node_browse_tex_cb(bContext *C, void *ntree_v, void *node_v)
{
+ Main *bmain= CTX_data_main(C);
bNodeTree *ntree= ntree_v;
bNode *node= node_v;
Tex *tex;
@@ -200,7 +194,7 @@ static void node_browse_tex_cb(bContext *C, void *ntree_v, void *node_v)
node->id->us--;
node->id= NULL;
}
- tex= BLI_findlink(&G.main->tex, node->menunr-1);
+ tex= BLI_findlink(&bmain->tex, node->menunr-1);
node->id= &tex->id;
id_us_plus(node->id);
@@ -220,6 +214,7 @@ static void node_browse_tex_cb(bContext *C, void *ntree_v, void *node_v)
#endif
static void node_dynamic_update_cb(bContext *C, void *ntree_v, void *node_v)
{
+ Main *bmain= CTX_data_main(C);
Material *ma;
bNode *node= (bNode *)node_v;
ID *id= node->id;
@@ -229,7 +224,7 @@ static void node_dynamic_update_cb(bContext *C, void *ntree_v, void *node_v)
/* Users only have to press the "update" button in one pynode
* and we also update all others sharing the same script */
- for (ma= G.main->mat.first; ma; ma= ma->id.next) {
+ for (ma= bmain->mat.first; ma; ma= ma->id.next) {
if (ma->nodetree) {
bNode *nd;
for (nd= ma->nodetree->nodes.first; nd; nd= nd->next) {
@@ -277,6 +272,7 @@ static void node_buts_math(uiLayout *layout, bContext *C, PointerRNA *ptr)
static void node_browse_text_cb(bContext *C, void *ntree_v, void *node_v)
{
+ Main *bmain= CTX_data_main(C);
bNodeTree *ntree= ntree_v;
bNode *node= node_v;
ID *oldid;
@@ -287,7 +283,7 @@ static void node_browse_text_cb(bContext *C, void *ntree_v, void *node_v)
node->id->us--;
}
oldid= node->id;
- node->id= BLI_findlink(&G.main->text, node->menunr-1);
+ node->id= BLI_findlink(&bmain->text, node->menunr-1);
id_us_plus(node->id);
BLI_strncpy(node->name, node->id->name+2, 21); /* huh? why 21? */
@@ -306,13 +302,13 @@ static void node_shader_buts_material(uiLayout *layout, bContext *C, PointerRNA
bNode *node= ptr->data;
uiLayout *col;
- uiTemplateID(layout, C, ptr, "material", "MATERIAL_OT_new", NULL, NULL, NULL);
+ uiTemplateID(layout, C, ptr, "material", "MATERIAL_OT_new", NULL, NULL);
if(!node->id) return;
col= uiLayoutColumn(layout, 0);
- uiItemR(col, ptr, "diffuse", 0, NULL, 0);
- uiItemR(col, ptr, "specular", 0, NULL, 0);
+ uiItemR(col, ptr, "use_diffuse", 0, NULL, 0);
+ uiItemR(col, ptr, "use_specular", 0, NULL, 0);
uiItemR(col, ptr, "invert_normal", 0, NULL, 0);
}
@@ -333,12 +329,12 @@ static void node_shader_buts_mapping(uiLayout *layout, bContext *C, PointerRNA *
uiItemR(row, ptr, "scale", 0, "", 0);
row= uiLayoutRow(layout, 1);
- uiItemR(row, ptr, "clamp_minimum", 0, "Min", 0);
- uiItemR(row, ptr, "minimum", 0, "", 0);
+ uiItemR(row, ptr, "use_min", 0, "Min", 0);
+ uiItemR(row, ptr, "min", 0, "", 0);
row= uiLayoutRow(layout, 1);
- uiItemR(row, ptr, "clamp_maximum", 0, "Max", 0);
- uiItemR(row, ptr, "maximum", 0, "", 0);
+ uiItemR(row, ptr, "use_max", 0, "Max", 0);
+ uiItemR(row, ptr, "max", 0, "", 0);
}
@@ -368,6 +364,7 @@ static void node_shader_buts_geometry(uiLayout *layout, bContext *C, PointerRNA
static void node_shader_buts_dynamic(uiLayout *layout, bContext *C, PointerRNA *ptr)
{
+ Main *bmain= CTX_data_main(C);
uiBlock *block= uiLayoutAbsoluteBlock(layout);
bNode *node= ptr->data;
bNodeTree *ntree= ptr->id.data;
@@ -380,7 +377,7 @@ static void node_shader_buts_dynamic(uiLayout *layout, bContext *C, PointerRNA *
/* B_NODE_EXEC is handled in butspace.c do_node_buts */
if(!node->id) {
char *strp;
- IDnames_to_pupstring(&strp, NULL, "", &(G.main->text), NULL, NULL);
+ IDnames_to_pupstring(&strp, NULL, "", &(bmain->text), NULL, NULL);
node->menunr= 0;
bt= uiDefButS(block, MENU, B_NODE_EXEC/*+node->nr*/, strp,
butr->xmin, dy, 19, 19,
@@ -467,7 +464,7 @@ static void node_composit_buts_image(uiLayout *layout, bContext *C, PointerRNA *
PointerRNA imaptr;
PropertyRNA *prop;
- uiTemplateID(layout, C, ptr, "image", NULL, "IMAGE_OT_open", NULL, NULL);
+ uiTemplateID(layout, C, ptr, "image", NULL, "IMAGE_OT_open", NULL);
if(!node->id) return;
@@ -481,11 +478,11 @@ static void node_composit_buts_image(uiLayout *layout, bContext *C, PointerRNA *
if (ELEM(RNA_enum_get(&imaptr, "source"), IMA_SRC_SEQUENCE, IMA_SRC_MOVIE)) {
col= uiLayoutColumn(layout, 1);
- uiItemR(col, ptr, "frames", 0, NULL, 0);
- uiItemR(col, ptr, "start", 0, NULL, 0);
- uiItemR(col, ptr, "offset", 0, NULL, 0);
- uiItemR(col, ptr, "cyclic", 0, NULL, 0);
- uiItemR(col, ptr, "auto_refresh", UI_ITEM_R_ICON_ONLY, NULL, 0);
+ uiItemR(col, ptr, "frame_duration", 0, NULL, 0);
+ uiItemR(col, ptr, "frame_start", 0, NULL, 0);
+ uiItemR(col, ptr, "frame_offset", 0, NULL, 0);
+ uiItemR(col, ptr, "use_cyclic", 0, NULL, 0);
+ uiItemR(col, ptr, "use_auto_refresh", UI_ITEM_R_ICON_ONLY, NULL, 0);
}
col= uiLayoutColumn(layout, 0);
@@ -504,7 +501,7 @@ static void node_composit_buts_renderlayers(uiLayout *layout, bContext *C, Point
const char *layer_name;
char scene_name[19];
- uiTemplateID(layout, C, ptr, "scene", NULL, NULL, NULL, NULL);
+ uiTemplateID(layout, C, ptr, "scene", NULL, NULL, NULL);
if(!node->id) return;
@@ -535,19 +532,19 @@ static void node_composit_buts_blur(uiLayout *layout, bContext *C, PointerRNA *p
uiItemR(col, ptr, "filter_type", 0, "", 0);
if (RNA_enum_get(ptr, "filter_type")!= R_FILTER_FAST_GAUSS) {
- uiItemR(col, ptr, "bokeh", 0, NULL, 0);
- uiItemR(col, ptr, "gamma", 0, NULL, 0);
+ uiItemR(col, ptr, "use_bokeh", 0, NULL, 0);
+ uiItemR(col, ptr, "use_gamma_correction", 0, NULL, 0);
}
- uiItemR(col, ptr, "relative", 0, NULL, 0);
+ uiItemR(col, ptr, "use_relative", 0, NULL, 0);
col= uiLayoutColumn(layout, 1);
- if (RNA_boolean_get(ptr, "relative")) {
+ if (RNA_boolean_get(ptr, "use_relative")) {
uiItemR(col, ptr, "factor_x", 0, "X", 0);
uiItemR(col, ptr, "factor_y", 0, "Y", 0);
}
else {
- uiItemR(col, ptr, "sizex", 0, "X", 0);
- uiItemR(col, ptr, "sizey", 0, "Y", 0);
+ uiItemR(col, ptr, "size_x", 0, "X", 0);
+ uiItemR(col, ptr, "size_y", 0, "Y", 0);
}
}
@@ -594,13 +591,13 @@ static void node_composit_buts_defocus(uiLayout *layout, bContext *C, PointerRNA
uiItemR(col, ptr, "bokeh", 0, "", 0);
uiItemR(col, ptr, "angle", 0, NULL, 0);
- uiItemR(layout, ptr, "gamma_correction", 0, NULL, 0);
+ uiItemR(layout, ptr, "use_gamma_correction", 0, NULL, 0);
col = uiLayoutColumn(layout, 0);
uiLayoutSetActive(col, RNA_boolean_get(ptr, "use_zbuffer")==1);
uiItemR(col, ptr, "f_stop", 0, NULL, 0);
- uiItemR(layout, ptr, "max_blur", 0, NULL, 0);
+ uiItemR(layout, ptr, "blur_max", 0, NULL, 0);
uiItemR(layout, ptr, "threshold", 0, NULL, 0);
col = uiLayoutColumn(layout, 0);
@@ -640,7 +637,7 @@ static void node_composit_buts_glare(uiLayout *layout, bContext *C, PointerRNA *
uiItemR(layout, ptr, "fade", UI_ITEM_R_SLIDER, NULL, 0);
if (RNA_enum_get(ptr, "glare_type")== 0)
- uiItemR(layout, ptr, "rotate_45", 0, NULL, 0);
+ uiItemR(layout, ptr, "use_rotate_45", 0, NULL, 0);
}
if (RNA_enum_get(ptr, "glare_type")== 1) {
uiItemR(layout, ptr, "size", 0, NULL, 0);
@@ -671,12 +668,12 @@ static void node_composit_buts_lensdist(uiLayout *layout, bContext *C, PointerRN
uiLayout *col;
col= uiLayoutColumn(layout, 0);
- uiItemR(col, ptr, "projector", 0, NULL, 0);
+ uiItemR(col, ptr, "use_projector", 0, NULL, 0);
col = uiLayoutColumn(col, 0);
- uiLayoutSetActive(col, RNA_boolean_get(ptr, "projector")==0);
- uiItemR(col, ptr, "jitter", 0, NULL, 0);
- uiItemR(col, ptr, "fit", 0, NULL, 0);
+ uiLayoutSetActive(col, RNA_boolean_get(ptr, "use_projector")==0);
+ uiItemR(col, ptr, "use_jitter", 0, NULL, 0);
+ uiItemR(col, ptr, "use_fit", 0, NULL, 0);
}
static void node_composit_buts_vecblur(uiLayout *layout, bContext *C, PointerRNA *ptr)
@@ -689,10 +686,10 @@ static void node_composit_buts_vecblur(uiLayout *layout, bContext *C, PointerRNA
col= uiLayoutColumn(layout, 1);
uiItemL(col, "Speed:", 0);
- uiItemR(col, ptr, "min_speed", 0, "Min", 0);
- uiItemR(col, ptr, "max_speed", 0, "Max", 0);
+ uiItemR(col, ptr, "speed_min", 0, "Min", 0);
+ uiItemR(col, ptr, "speed_max", 0, "Max", 0);
- uiItemR(layout, ptr, "curved", 0, NULL, 0);
+ uiItemR(layout, ptr, "use_curved", 0, NULL, 0);
}
static void node_composit_buts_filter(uiLayout *layout, bContext *C, PointerRNA *ptr)
@@ -709,13 +706,13 @@ static void node_composit_buts_crop(uiLayout *layout, bContext *C, PointerRNA *p
{
uiLayout *col;
- uiItemR(layout, ptr, "crop_size", 0, NULL, 0);
+ uiItemR(layout, ptr, "use_crop_size", 0, NULL, 0);
col= uiLayoutColumn(layout, 1);
- uiItemR(col, ptr, "x1", 0, "Left", 0);
- uiItemR(col, ptr, "x2", 0, "Right", 0);
- uiItemR(col, ptr, "y1", 0, "Up", 0);
- uiItemR(col, ptr, "y2", 0, "Down", 0);
+ uiItemR(col, ptr, "min_x", 0, "Left", 0);
+ uiItemR(col, ptr, "max_x", 0, "Right", 0);
+ uiItemR(col, ptr, "min_y", 0, "Up", 0);
+ uiItemR(col, ptr, "max_y", 0, "Down", 0);
}
static void node_composit_buts_splitviewer(uiLayout *layout, bContext *C, PointerRNA *ptr)
@@ -754,7 +751,7 @@ static void node_composit_buts_alphaover(uiLayout *layout, bContext *C, PointerR
uiLayout *col;
col =uiLayoutColumn(layout, 1);
- uiItemR(col, ptr, "convert_premul", 0, NULL, 0);
+ uiItemR(col, ptr, "use_premultiply", 0, NULL, 0);
uiItemR(col, ptr, "premul", 0, NULL, 0);
}
@@ -800,17 +797,17 @@ static void node_composit_buts_color_spill(uiLayout *layout, bContext *C, Pointe
uiItemR(row, ptr, "channel", UI_ITEM_R_EXPAND, NULL, 0);
col= uiLayoutColumn(layout, 0);
- uiItemR(col, ptr, "algorithm", 0, NULL, 0);
+ uiItemR(col, ptr, "limit_method", 0, NULL, 0);
- if(RNA_enum_get(ptr, "algorithm")==0) {
+ if(RNA_enum_get(ptr, "limit_method")==0) {
uiItemL(col, "Limiting Channel:", 0);
row=uiLayoutRow(col,0);
uiItemR(row, ptr, "limit_channel", UI_ITEM_R_EXPAND, NULL, 0);
}
uiItemR(col, ptr, "ratio", UI_ITEM_R_SLIDER, NULL, 0);
- uiItemR(col, ptr, "unspill", 0, NULL, 0);
- if (RNA_enum_get(ptr, "unspill")== 1) {
+ uiItemR(col, ptr, "use_unspill", 0, NULL, 0);
+ if (RNA_enum_get(ptr, "use_unspill")== 1) {
uiItemR(col, ptr, "unspill_red", UI_ITEM_R_SLIDER, NULL, 0);
uiItemR(col, ptr, "unspill_green", UI_ITEM_R_SLIDER, NULL, 0);
uiItemR(col, ptr, "unspill_blue", UI_ITEM_R_SLIDER, NULL, 0);
@@ -822,13 +819,13 @@ static void node_composit_buts_chroma_matte(uiLayout *layout, bContext *C, Point
uiLayout *col;
col= uiLayoutColumn(layout, 0);
- uiItemR(col, ptr, "acceptance", 0, NULL, 0);
- uiItemR(col, ptr, "cutoff", 0, NULL, 0);
+ uiItemR(col, ptr, "tolerance", 0, NULL, 0);
+ uiItemR(col, ptr, "threshold", 0, NULL, 0);
col= uiLayoutColumn(layout, 1);
- uiItemR(col, ptr, "lift", UI_ITEM_R_SLIDER, NULL, 0);
+ /*uiItemR(col, ptr, "lift", UI_ITEM_R_SLIDER, NULL, 0); Removed for now */
uiItemR(col, ptr, "gain", UI_ITEM_R_SLIDER, NULL, 0);
- uiItemR(col, ptr, "shadow_adjust", UI_ITEM_R_SLIDER, NULL, 0);
+ /*uiItemR(col, ptr, "shadow_adjust", UI_ITEM_R_SLIDER, NULL, 0); Removed for now*/
}
static void node_composit_buts_color_matte(uiLayout *layout, bContext *C, PointerRNA *ptr)
@@ -836,9 +833,9 @@ static void node_composit_buts_color_matte(uiLayout *layout, bContext *C, Pointe
uiLayout *col;
col= uiLayoutColumn(layout, 1);
- uiItemR(col, ptr, "h", UI_ITEM_R_SLIDER, NULL, 0);
- uiItemR(col, ptr, "s", UI_ITEM_R_SLIDER, NULL, 0);
- uiItemR(col, ptr, "v", UI_ITEM_R_SLIDER, NULL, 0);
+ uiItemR(col, ptr, "color_hue", UI_ITEM_R_SLIDER, NULL, 0);
+ uiItemR(col, ptr, "color_saturation", UI_ITEM_R_SLIDER, NULL, 0);
+ uiItemR(col, ptr, "color_value", UI_ITEM_R_SLIDER, NULL, 0);
}
static void node_composit_buts_channel_matte(uiLayout *layout, bContext *C, PointerRNA *ptr)
@@ -852,19 +849,19 @@ static void node_composit_buts_channel_matte(uiLayout *layout, bContext *C, Poin
col=uiLayoutColumn(layout, 0);
uiItemL(col, "Key Channel:", 0);
row= uiLayoutRow(col, 0);
- uiItemR(row, ptr, "channel", UI_ITEM_R_EXPAND, NULL, 0);
+ uiItemR(row, ptr, "matte_channel", UI_ITEM_R_EXPAND, NULL, 0);
col =uiLayoutColumn(layout, 0);
- uiItemR(col, ptr, "algorithm", 0, NULL, 0);
- if(RNA_enum_get(ptr, "algorithm")==0) {
+ uiItemR(col, ptr, "limit_method", 0, NULL, 0);
+ if(RNA_enum_get(ptr, "limit_method")==0) {
uiItemL(col, "Limiting Channel:", 0);
row=uiLayoutRow(col,0);
uiItemR(row, ptr, "limit_channel", UI_ITEM_R_EXPAND, NULL, 0);
}
- uiItemR(col, ptr, "high", UI_ITEM_R_SLIDER, NULL, 0);
- uiItemR(col, ptr, "low", UI_ITEM_R_SLIDER, NULL, 0);
+ uiItemR(col, ptr, "limit_max", UI_ITEM_R_SLIDER, NULL, 0);
+ uiItemR(col, ptr, "limit_min", UI_ITEM_R_SLIDER, NULL, 0);
}
static void node_composit_buts_luma_matte(uiLayout *layout, bContext *C, PointerRNA *ptr)
@@ -872,8 +869,8 @@ static void node_composit_buts_luma_matte(uiLayout *layout, bContext *C, Pointer
uiLayout *col;
col= uiLayoutColumn(layout, 1);
- uiItemR(col, ptr, "high", UI_ITEM_R_SLIDER, NULL, 0);
- uiItemR(col, ptr, "low", UI_ITEM_R_SLIDER, NULL, 0);
+ uiItemR(col, ptr, "limit_max", UI_ITEM_R_SLIDER, NULL, 0);
+ uiItemR(col, ptr, "limit_min", UI_ITEM_R_SLIDER, NULL, 0);
}
static void node_composit_buts_map_uv(uiLayout *layout, bContext *C, PointerRNA *ptr)
@@ -896,11 +893,14 @@ static void node_composit_buts_file_output(uiLayout *layout, bContext *C, Pointe
row= uiLayoutRow(layout, 0);
if (RNA_enum_get(ptr, "image_type")== R_OPENEXR) {
- uiItemR(row, ptr, "exr_half", 0, NULL, 0);
+ uiItemR(row, ptr, "use_exr_half", 0, NULL, 0);
uiItemR(row, ptr, "exr_codec", 0, "", 0);
}
else if (RNA_enum_get(ptr, "image_type")== R_JPEG90) {
- uiItemR(row, ptr, "quality", UI_ITEM_R_SLIDER, NULL, 0);
+ uiItemR(row, ptr, "quality", UI_ITEM_R_SLIDER, "Quality", 0);
+ }
+ else if (RNA_enum_get(ptr, "image_type")== R_PNG) {
+ uiItemR(row, ptr, "quality", UI_ITEM_R_SLIDER, "Compression", 0);
}
row= uiLayoutRow(layout, 1);
@@ -915,7 +915,7 @@ static void node_composit_buts_scale(uiLayout *layout, bContext *C, PointerRNA *
static void node_composit_buts_rotate(uiLayout *layout, bContext *C, PointerRNA *ptr)
{
- uiItemR(layout, ptr, "filter", 0, "", 0);
+ uiItemR(layout, ptr, "filter_type", 0, "", 0);
}
static void node_composit_buts_invert(uiLayout *layout, bContext *C, PointerRNA *ptr)
@@ -923,8 +923,8 @@ static void node_composit_buts_invert(uiLayout *layout, bContext *C, PointerRNA
uiLayout *col;
col= uiLayoutColumn(layout, 0);
- uiItemR(col, ptr, "rgb", 0, NULL, 0);
- uiItemR(col, ptr, "alpha", 0, NULL, 0);
+ uiItemR(col, ptr, "invert_rgb", 0, NULL, 0);
+ uiItemR(col, ptr, "invert_alpha", 0, NULL, 0);
}
static void node_composit_buts_premulkey(uiLayout *layout, bContext *C, PointerRNA *ptr)
@@ -941,9 +941,9 @@ static void node_composit_buts_colorbalance(uiLayout *layout, bContext *C, Point
{
uiLayout *split, *col, *row;
- uiItemR(layout, ptr, "correction_formula", 0, NULL, 0);
+ uiItemR(layout, ptr, "correction_method", 0, NULL, 0);
- if (RNA_enum_get(ptr, "correction_formula")== 0) {
+ if (RNA_enum_get(ptr, "correction_method")== 0) {
split = uiLayoutSplit(layout, 0, 0);
col = uiLayoutColumn(split, 0);
@@ -1164,7 +1164,7 @@ static void node_texture_buts_proc(uiLayout *layout, bContext *C, PointerRNA *pt
case TEX_BLEND:
uiItemR(col, &tex_ptr, "progression", 0, "", 0);
row= uiLayoutRow(col, 0);
- uiItemR(row, &tex_ptr, "flip_axis", UI_ITEM_R_EXPAND, NULL, 0);
+ uiItemR(row, &tex_ptr, "use_flip_axis", UI_ITEM_R_EXPAND, NULL, 0);
break;
case TEX_MARBLE:
@@ -1173,14 +1173,14 @@ static void node_texture_buts_proc(uiLayout *layout, bContext *C, PointerRNA *pt
row= uiLayoutRow(col, 0);
uiItemR(row, &tex_ptr, "noise_type", UI_ITEM_R_EXPAND, NULL, 0);
row= uiLayoutRow(col, 0);
- uiItemR(row, &tex_ptr, "noisebasis2", UI_ITEM_R_EXPAND, NULL, 0);
+ uiItemR(row, &tex_ptr, "noisebasis_2", UI_ITEM_R_EXPAND, NULL, 0);
break;
case TEX_WOOD:
uiItemR(col, &tex_ptr, "noise_basis", 0, "", 0);
uiItemR(col, &tex_ptr, "stype", 0, "", 0);
row= uiLayoutRow(col, 0);
- uiItemR(row, &tex_ptr, "noisebasis2", UI_ITEM_R_EXPAND, NULL, 0);
+ uiItemR(row, &tex_ptr, "noisebasis_2", UI_ITEM_R_EXPAND, NULL, 0);
row= uiLayoutRow(col, 0);
uiLayoutSetActive(row, !(RNA_enum_get(&tex_ptr, "stype")==TEX_BAND || RNA_enum_get(&tex_ptr, "stype")==TEX_RING));
uiItemR(row, &tex_ptr, "noise_type", UI_ITEM_R_EXPAND, NULL, 0);
@@ -1204,12 +1204,12 @@ static void node_texture_buts_proc(uiLayout *layout, bContext *C, PointerRNA *pt
static void node_texture_buts_image(uiLayout *layout, bContext *C, PointerRNA *ptr)
{
- uiTemplateID(layout, C, ptr, "image", NULL, "IMAGE_OT_open", NULL, NULL);
+ uiTemplateID(layout, C, ptr, "image", NULL, "IMAGE_OT_open", NULL);
}
static void node_texture_buts_output(uiLayout *layout, bContext *C, PointerRNA *ptr)
{
- uiItemR(layout, ptr, "output_name", 0, "", 0);
+ uiItemR(layout, ptr, "filepath", 0, "", 0);
}
/* only once called */
diff --git a/source/blender/editors/space_node/node_buttons.c b/source/blender/editors/space_node/node_buttons.c
index 41cf689407b..11319d817c7 100644
--- a/source/blender/editors/space_node/node_buttons.c
+++ b/source/blender/editors/space_node/node_buttons.c
@@ -41,16 +41,9 @@
#include "BLI_rand.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
-#include "BKE_idprop.h"
-#include "BKE_object.h"
#include "BKE_node.h"
-#include "BKE_global.h"
-#include "BKE_scene.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
-#include "BIF_gl.h"
#include "WM_api.h"
#include "WM_types.h"
diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c
index 5eb6d9cf94a..cc7c966e397 100644
--- a/source/blender/editors/space_node/node_draw.c
+++ b/source/blender/editors/space_node/node_draw.c
@@ -40,20 +40,10 @@
#include "BLI_math.h"
#include "BLI_blenlib.h"
#include "BLI_threads.h"
-#include "MEM_guardedalloc.h"
#include "BKE_context.h"
#include "BKE_depsgraph.h"
-#include "BKE_global.h"
-#include "BKE_image.h"
-#include "BKE_library.h"
#include "BKE_main.h"
-#include "BKE_material.h"
-#include "BKE_node.h"
-#include "BKE_object.h"
-#include "BKE_texture.h"
-#include "BKE_text.h"
-#include "BKE_utildefines.h"
#include "BIF_gl.h"
#include "BIF_glutil.h"
diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c
index cea88c33c5b..829c74fd26d 100644
--- a/source/blender/editors/space_node/node_edit.c
+++ b/source/blender/editors/space_node/node_edit.c
@@ -41,7 +41,6 @@
#include "DNA_scene_types.h"
#include "BKE_context.h"
-#include "BKE_colortools.h"
#include "BKE_global.h"
#include "BKE_image.h"
#include "BKE_library.h"
@@ -51,10 +50,7 @@
#include "BKE_paint.h"
#include "BKE_texture.h"
#include "BKE_report.h"
-#include "BKE_scene.h"
-#include "BKE_utildefines.h"
-#include "BIF_gl.h"
#include "BLI_math.h"
#include "BLI_blenlib.h"
@@ -411,7 +407,7 @@ void snode_set_context(SpaceNode *snode, Scene *scene)
snode->id= &tx->id;
}
else {
- Brush *brush= NULL;
+ struct Brush *brush= NULL;
if(ob && (ob->mode & OB_MODE_SCULPT))
brush= paint_brush(&scene->toolsettings->sculpt->paint);
@@ -1852,6 +1848,7 @@ void NODE_OT_links_cut(wmOperatorType *ot)
/* goes over all scenes, reads render layers */
static int node_read_renderlayers_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
SpaceNode *snode= CTX_wm_space_node(C);
Scene *curscene= CTX_data_scene(C), *scene;
bNode *node;
@@ -1859,7 +1856,7 @@ static int node_read_renderlayers_exec(bContext *C, wmOperator *op)
ED_preview_kill_jobs(C);
/* first tag scenes unread */
- for(scene= G.main->scene.first; scene; scene= scene->id.next)
+ for(scene= bmain->scene.first; scene; scene= scene->id.next)
scene->id.flag |= LIB_DOIT;
for(node= snode->edittree->nodes.first; node; node= node->next) {
diff --git a/source/blender/editors/space_node/node_header.c b/source/blender/editors/space_node/node_header.c
index 3ed719eccc0..17c50b32e98 100644
--- a/source/blender/editors/space_node/node_header.c
+++ b/source/blender/editors/space_node/node_header.c
@@ -42,14 +42,11 @@
#include "BKE_screen.h"
#include "BKE_node.h"
#include "BKE_main.h"
-#include "BKE_utildefines.h"
#include "WM_api.h"
#include "WM_types.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "UI_interface.h"
diff --git a/source/blender/editors/space_node/node_ops.c b/source/blender/editors/space_node/node_ops.c
index 654fdc6800e..46cd8515f23 100644
--- a/source/blender/editors/space_node/node_ops.c
+++ b/source/blender/editors/space_node/node_ops.c
@@ -30,7 +30,6 @@
#include "DNA_scene_types.h"
#include "BKE_context.h"
-#include "BKE_node.h"
#include "ED_screen.h"
#include "ED_transform.h"
@@ -156,7 +155,6 @@ void node_keymap(struct wmKeyConfig *keyconf)
WM_keymap_add_item(keymap, "NODE_OT_select_border", BKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "NODE_OT_delete", XKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "NODE_OT_delete", DELKEY, KM_PRESS, 0, 0);
- WM_keymap_add_item(keymap, "NODE_OT_delete", BACKSPACEKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "NODE_OT_select_all", AKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "NODE_OT_select_linked_to", LKEY, KM_PRESS, KM_SHIFT, 0);
diff --git a/source/blender/editors/space_node/node_select.c b/source/blender/editors/space_node/node_select.c
index ccd1555e1a2..ec08cdf07ac 100644
--- a/source/blender/editors/space_node/node_select.c
+++ b/source/blender/editors/space_node/node_select.c
@@ -32,9 +32,6 @@
#include "DNA_scene_types.h"
#include "BKE_context.h"
-#include "BKE_node.h"
-#include "BKE_global.h"
-#include "BKE_utildefines.h"
#include "BLI_rect.h"
@@ -271,7 +268,7 @@ static int node_select_all_exec(bContext *C, wmOperator *op)
void NODE_OT_select_all(wmOperatorType *ot)
{
/* identifiers */
- ot->name = "Select/Deselect All";
+ ot->name = "Select or Deselect All";
ot->description = "(De)select all nodes";
ot->idname = "NODE_OT_select_all";
diff --git a/source/blender/editors/space_node/node_state.c b/source/blender/editors/space_node/node_state.c
index 6b3cfd11135..b4f09f960d6 100644
--- a/source/blender/editors/space_node/node_state.c
+++ b/source/blender/editors/space_node/node_state.c
@@ -33,7 +33,6 @@
#include "BKE_context.h"
#include "BKE_node.h"
-#include "BKE_global.h"
#include "BLI_rect.h"
@@ -243,7 +242,7 @@ static void snode_home(ScrArea *sa, ARegion *ar, SpaceNode* snode)
cur->xmin= cur->ymin= 0.0f;
cur->xmax=ar->winx;
- cur->xmax= ar->winy;
+ cur->ymax=ar->winy;
if(snode->edittree) {
for(node= snode->edittree->nodes.first; node; node= node->next) {
@@ -261,19 +260,20 @@ static void snode_home(ScrArea *sa, ARegion *ar, SpaceNode* snode)
snode->yof= 0;
width= cur->xmax - cur->xmin;
height= cur->ymax- cur->ymin;
+
if(width > height) {
float newheight;
newheight= oldheight * width/oldwidth;
cur->ymin= cur->ymin - newheight/4;
- cur->ymax= cur->ymin + newheight;
+ cur->ymax= cur->ymax + newheight/4;
}
else {
float newwidth;
newwidth= oldwidth * height/oldheight;
cur->xmin= cur->xmin - newwidth/4;
- cur->xmax= cur->xmin + newwidth;
+ cur->xmax= cur->xmax + newwidth/4;
}
-
+
ar->v2d.tot= ar->v2d.cur;
UI_view2d_curRect_validate(&ar->v2d);
}
diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c
index 5b681958a3a..d9a4dda9d6e 100644
--- a/source/blender/editors/space_node/space_node.c
+++ b/source/blender/editors/space_node/space_node.c
@@ -40,15 +40,12 @@
#include "BLI_math.h"
#include "BLI_rand.h"
-#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_screen.h"
-#include "BKE_node.h"
#include "ED_render.h"
#include "ED_screen.h"
-#include "BIF_gl.h"
#include "WM_api.h"
#include "WM_types.h"
diff --git a/source/blender/editors/space_outliner/Makefile b/source/blender/editors/space_outliner/Makefile
index 8d7cd017e0b..bd6725c5b71 100644
--- a/source/blender/editors/space_outliner/Makefile
+++ b/source/blender/editors/space_outliner/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c
index 95e2cb920fc..3865fd213b4 100644
--- a/source/blender/editors/space_outliner/outliner.c
+++ b/source/blender/editors/space_outliner/outliner.c
@@ -48,6 +48,7 @@
#include "DNA_scene_types.h"
#include "DNA_world_types.h"
#include "DNA_sequence_types.h"
+#include "DNA_object_types.h"
#include "BLI_blenlib.h"
@@ -58,10 +59,8 @@
# include <fnmatch.h>
#endif
-#include "IMB_imbuf_types.h"
#include "BKE_animsys.h"
-#include "BKE_constraint.h"
#include "BKE_context.h"
#include "BKE_deform.h"
#include "BKE_depsgraph.h"
@@ -70,14 +69,10 @@
#include "BKE_group.h"
#include "BKE_library.h"
#include "BKE_main.h"
-#include "BKE_material.h"
#include "BKE_modifier.h"
-#include "BKE_object.h"
#include "BKE_report.h"
-#include "BKE_screen.h"
#include "BKE_scene.h"
#include "BKE_sequencer.h"
-#include "BKE_utildefines.h"
#include "ED_armature.h"
#include "ED_object.h"
@@ -987,8 +982,6 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
else {
if((seq->strip) && (seq->strip->stripdata))
te->name= seq->strip->stripdata->name;
- else if((seq->strip) && (seq->strip->tstripdata) && (seq->strip->tstripdata->ibuf))
- te->name= seq->strip->tstripdata->ibuf->name;
else
te->name= "SQ None";
}
@@ -1561,10 +1554,10 @@ static void outliner_set_flag(SpaceOops *soops, ListBase *lb, short flag, short
void object_toggle_visibility_cb(bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem)
{
Base *base= (Base *)te->directdata;
-
- if(base==NULL) base= object_in_scene((Object *)tselem->id, scene);
- if(base) {
- base->object->restrictflag^=OB_RESTRICT_VIEW;
+ if(base || (base= object_in_scene((Object *)tselem->id, scene))) {
+ if((base->object->restrictflag ^= OB_RESTRICT_VIEW)) {
+ ED_base_object_select(base, BA_DESELECT);
+ }
}
}
@@ -1890,8 +1883,8 @@ static void tree_element_set_active_object(bContext *C, Scene *scene, SpaceOops
}
/* find associated base in current scene */
- for(base= FIRSTBASE; base; base= base->next)
- if(base->object==ob) break;
+ base= object_in_scene(ob, scene);
+
if(base) {
if(set==2) {
/* swap select */
@@ -1901,12 +1894,8 @@ static void tree_element_set_active_object(bContext *C, Scene *scene, SpaceOops
ED_base_object_select(base, BA_SELECT);
}
else {
- Base *b;
/* deleselect all */
- for(b= FIRSTBASE; b; b= b->next) {
- b->flag &= ~SELECT;
- b->object->flag= b->flag;
- }
+ scene_deselect_all(scene);
ED_base_object_select(base, BA_SELECT);
}
if(C)
@@ -2028,6 +2017,7 @@ static int tree_element_active_texture(bContext *C, Scene *scene, SpaceOops *soo
}
}
+ WM_event_add_notifier(C, NC_TEXTURE, NULL);
return 0;
}
@@ -3186,7 +3176,7 @@ static void object_delete_cb(bContext *C, Scene *scene, TreeElement *te, TreeSto
if(scene->obedit==base->object)
ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR|EM_DO_UNDO);
- ED_base_object_free_and_unlink(scene, base);
+ ED_base_object_free_and_unlink(CTX_data_main(C), scene, base);
te->directdata= NULL;
tselem->id= NULL;
}
@@ -3337,7 +3327,7 @@ void outliner_del(bContext *C, Scene *scene, ARegion *ar, SpaceOops *soops)
;// del_seq();
else {
outliner_do_object_operation(C, scene, soops, &soops->tree, object_delete_cb);
- DAG_scene_sort(scene);
+ DAG_scene_sort(CTX_data_main(C), scene);
ED_undo_push(C, "Delete Objects");
}
}
@@ -3356,6 +3346,7 @@ static EnumPropertyItem prop_object_op_types[] = {
static int outliner_object_operation_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
SpaceOops *soops= CTX_wm_space_outliner(C);
int event;
@@ -3382,7 +3373,7 @@ static int outliner_object_operation_exec(bContext *C, wmOperator *op)
}
else if(event==4) {
outliner_do_object_operation(C, scene, soops, &soops->tree, object_delete_cb);
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
str= "Delete Objects";
}
else if(event==5) { /* disabled, see above (ton) */
@@ -4840,7 +4831,6 @@ static void outliner_draw_restrictcols(ARegion *ar, SpaceOops *soops)
static void restrictbutton_view_cb(bContext *C, void *poin, void *poin2)
{
- Base *base;
Scene *scene = (Scene *)poin;
Object *ob = (Object *)poin2;
Object *obedit= CTX_data_edit_object(C);
@@ -4856,15 +4846,9 @@ static void restrictbutton_view_cb(bContext *C, void *poin, void *poin2)
/* deselect objects that are invisible */
if (ob->restrictflag & OB_RESTRICT_VIEW) {
-
/* Ouch! There is no backwards pointer from Object to Base,
* so have to do loop to find it. */
- for(base= FIRSTBASE; base; base= base->next) {
- if(base->object==ob) {
- base->flag &= ~SELECT;
- base->object->flag= base->flag;
- }
- }
+ ED_base_object_select(object_in_scene(ob, scene), BA_DESELECT);
}
WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene);
@@ -4872,21 +4856,14 @@ static void restrictbutton_view_cb(bContext *C, void *poin, void *poin2)
static void restrictbutton_sel_cb(bContext *C, void *poin, void *poin2)
{
- Base *base;
Scene *scene = (Scene *)poin;
Object *ob = (Object *)poin2;
/* if select restriction has just been turned on */
if (ob->restrictflag & OB_RESTRICT_SELECT) {
-
/* Ouch! There is no backwards pointer from Object to Base,
* so have to do loop to find it. */
- for(base= FIRSTBASE; base; base= base->next) {
- if(base->object==ob) {
- base->flag &= ~SELECT;
- base->object->flag= base->flag;
- }
- }
+ ED_base_object_select(object_in_scene(ob, scene), BA_DESELECT);
}
WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene);
@@ -4913,9 +4890,20 @@ static void restrictbutton_modifier_cb(bContext *C, void *poin, void *poin2)
static void restrictbutton_bone_cb(bContext *C, void *poin, void *poin2)
{
+ Bone *bone= (Bone *)poin2;
+ if(bone && (bone->flag & BONE_HIDDEN_P))
+ bone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL);
WM_event_add_notifier(C, NC_OBJECT|ND_POSE, NULL);
}
+static void restrictbutton_ebone_cb(bContext *C, void *poin, void *poin2)
+{
+ EditBone *ebone= (EditBone *)poin2;
+ if(ebone && (ebone->flag & BONE_HIDDEN_A))
+ ebone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL);
+
+ WM_event_add_notifier(C, NC_OBJECT|ND_POSE, NULL);
+}
static int group_restrict_flag(Group *gr, int flag)
{
@@ -5115,17 +5103,17 @@ static void outliner_draw_restrictbuts(uiBlock *block, Scene *scene, ARegion *ar
uiBlockSetEmboss(block, UI_EMBOSSN);
bt= uiDefIconButR(block, ICONTOG, 0, ICON_RESTRICT_VIEW_OFF,
(int)ar->v2d.cur.xmax-OL_TOG_RESTRICT_VIEWX, (short)te->ys, 17, OL_H-1,
- &ptr, "restrict_view", -1, 0, 0, -1, -1, NULL);
+ &ptr, "hide", -1, 0, 0, -1, -1, NULL);
uiButSetFunc(bt, restrictbutton_view_cb, scene, ob);
bt= uiDefIconButR(block, ICONTOG, 0, ICON_RESTRICT_SELECT_OFF,
(int)ar->v2d.cur.xmax-OL_TOG_RESTRICT_SELECTX, (short)te->ys, 17, OL_H-1,
- &ptr, "restrict_select", -1, 0, 0, -1, -1, NULL);
+ &ptr, "hide_select", -1, 0, 0, -1, -1, NULL);
uiButSetFunc(bt, restrictbutton_sel_cb, scene, ob);
bt= uiDefIconButR(block, ICONTOG, 0, ICON_RESTRICT_RENDER_OFF,
(int)ar->v2d.cur.xmax-OL_TOG_RESTRICT_RENDERX, (short)te->ys, 17, OL_H-1,
- &ptr, "restrict_render", -1, 0, 0, -1, -1, NULL);
+ &ptr, "hide_render", -1, 0, 0, -1, -1, NULL);
uiButSetFunc(bt, restrictbutton_rend_cb, scene, ob);
uiBlockSetEmboss(block, UI_EMBOSS);
@@ -5200,7 +5188,7 @@ static void outliner_draw_restrictbuts(uiBlock *block, Scene *scene, ARegion *ar
uiBlockSetEmboss(block, UI_EMBOSSN);
bt= uiDefIconButBitI(block, ICONTOG, BONE_HIDDEN_P, 0, ICON_RESTRICT_VIEW_OFF,
(int)ar->v2d.cur.xmax-OL_TOG_RESTRICT_VIEWX, (short)te->ys, 17, OL_H-1, &(bone->flag), 0, 0, 0, 0, "Restrict/Allow visibility in the 3D View");
- uiButSetFunc(bt, restrictbutton_bone_cb, NULL, NULL);
+ uiButSetFunc(bt, restrictbutton_bone_cb, NULL, bone);
bt= uiDefIconButBitI(block, ICONTOG, BONE_UNSELECTABLE, 0, ICON_RESTRICT_SELECT_OFF,
(int)ar->v2d.cur.xmax-OL_TOG_RESTRICT_SELECTX, (short)te->ys, 17, OL_H-1, &(bone->flag), 0, 0, 0, 0, "Restrict/Allow selection in the 3D View");
@@ -5212,11 +5200,11 @@ static void outliner_draw_restrictbuts(uiBlock *block, Scene *scene, ARegion *ar
uiBlockSetEmboss(block, UI_EMBOSSN);
bt= uiDefIconButBitI(block, ICONTOG, BONE_HIDDEN_A, 0, ICON_RESTRICT_VIEW_OFF,
(int)ar->v2d.cur.xmax-OL_TOG_RESTRICT_VIEWX, (short)te->ys, 17, OL_H-1, &(ebone->flag), 0, 0, 0, 0, "Restrict/Allow visibility in the 3D View");
- uiButSetFunc(bt, restrictbutton_bone_cb, NULL, NULL);
+ uiButSetFunc(bt, restrictbutton_ebone_cb, NULL, ebone);
bt= uiDefIconButBitI(block, ICONTOG, BONE_UNSELECTABLE, 0, ICON_RESTRICT_SELECT_OFF,
(int)ar->v2d.cur.xmax-OL_TOG_RESTRICT_SELECTX, (short)te->ys, 17, OL_H-1, &(ebone->flag), 0, 0, 0, 0, "Restrict/Allow selection in the 3D View");
- uiButSetFunc(bt, restrictbutton_bone_cb, NULL, NULL);
+ uiButSetFunc(bt, restrictbutton_ebone_cb, NULL, NULL);
}
}
diff --git a/source/blender/editors/space_outliner/space_outliner.c b/source/blender/editors/space_outliner/space_outliner.c
index 1c86eb4df70..d3db64d6d03 100644
--- a/source/blender/editors/space_outliner/space_outliner.c
+++ b/source/blender/editors/space_outliner/space_outliner.c
@@ -36,11 +36,8 @@
#include "BLI_math.h"
#include "BLI_rand.h"
-#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_screen.h"
-#include "BKE_texture.h"
-#include "BKE_utildefines.h"
#include "ED_screen.h"
@@ -48,7 +45,6 @@
#include "WM_types.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "UI_resources.h"
#include "UI_view2d.h"
diff --git a/source/blender/editors/space_script/Makefile b/source/blender/editors/space_script/Makefile
index 3322cb61a7f..35462b8c255 100644
--- a/source/blender/editors/space_script/Makefile
+++ b/source/blender/editors/space_script/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/space_script/script_edit.c b/source/blender/editors/space_script/script_edit.c
index 71b37e514d7..610fecaa543 100644
--- a/source/blender/editors/space_script/script_edit.c
+++ b/source/blender/editors/space_script/script_edit.c
@@ -30,15 +30,10 @@
#include <stdio.h>
-#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BKE_context.h"
-#include "BKE_global.h"
-#include "BKE_screen.h"
-#include "BKE_utildefines.h"
-#include "BKE_report.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -90,13 +85,9 @@ static int script_reload_exec(bContext *C, wmOperator *op)
#ifndef DISABLE_PYTHON
/* TODO, this crashes on netrender and keying sets, need to look into why
* disable for now unless running in debug mode */
- if(G.f & G_DEBUG) {
- BPY_eval_string(C, "__import__('bpy').utils.load_scripts(reload_scripts=True)");
- }
- else {
- BKE_reportf(op->reports, RPT_ERROR, "reloading is currently unstable, only operates in debug mode.\n");
- return OPERATOR_CANCELLED;
- }
+ WM_cursor_wait(1);
+ BPY_eval_string(C, "__import__('bpy').utils.load_scripts(reload_scripts=True)");
+ WM_cursor_wait(0);
return OPERATOR_FINISHED;
#endif
return OPERATOR_CANCELLED;
diff --git a/source/blender/editors/space_script/script_header.c b/source/blender/editors/space_script/script_header.c
index 9c23d1b8131..6e65d458451 100644
--- a/source/blender/editors/space_script/script_header.c
+++ b/source/blender/editors/space_script/script_header.c
@@ -30,20 +30,16 @@
#include <stdio.h>
-#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BKE_context.h"
-#include "BKE_screen.h"
#include "ED_screen.h"
#include "ED_types.h"
#include "ED_util.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "UI_interface.h"
#include "UI_resources.h"
diff --git a/source/blender/editors/space_script/script_ops.c b/source/blender/editors/space_script/script_ops.c
index 15140f080e7..a52ffbd0808 100644
--- a/source/blender/editors/space_script/script_ops.c
+++ b/source/blender/editors/space_script/script_ops.c
@@ -29,7 +29,6 @@
#include <stdlib.h>
#include <math.h>
-#include "MEM_guardedalloc.h"
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
@@ -38,8 +37,6 @@
#include "BLI_blenlib.h"
#include "BKE_context.h"
-#include "BKE_global.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
diff --git a/source/blender/editors/space_script/space_script.c b/source/blender/editors/space_script/space_script.c
index 0aba1df47e9..f93ddc6efbe 100644
--- a/source/blender/editors/space_script/space_script.c
+++ b/source/blender/editors/space_script/space_script.c
@@ -36,7 +36,6 @@
#include "BLI_math.h"
#include "BLI_rand.h"
-#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_screen.h"
diff --git a/source/blender/editors/space_sequencer/Makefile b/source/blender/editors/space_sequencer/Makefile
index 2fb3de516b4..bd2b837d499 100644
--- a/source/blender/editors/space_sequencer/Makefile
+++ b/source/blender/editors/space_sequencer/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
@@ -38,6 +38,7 @@ CFLAGS += $(LEVEL_1_C_WARNINGS)
CPPFLAGS += -I$(NAN_GLEW)/include
CPPFLAGS += -I$(OPENGL_HEADERS)
+CPPFLAGS += -I$(NAN_PYTHON)/include/python$(NAN_PYTHON_VERSION)
# not very neat....
CPPFLAGS += -I../../windowmanager
diff --git a/source/blender/editors/space_sequencer/sequencer_add.c b/source/blender/editors/space_sequencer/sequencer_add.c
index 01a99ed2b1f..e58e2ebb328 100644
--- a/source/blender/editors/space_sequencer/sequencer_add.c
+++ b/source/blender/editors/space_sequencer/sequencer_add.c
@@ -47,17 +47,10 @@
#include "BKE_context.h"
#include "BKE_global.h"
-#include "BKE_image.h"
-#include "BKE_library.h"
#include "BKE_main.h"
-#include "BKE_plugin_types.h"
#include "BKE_sequencer.h"
-#include "BKE_scene.h"
-#include "BKE_utildefines.h"
#include "BKE_report.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -181,7 +174,9 @@ static void seq_load_operator_info(SeqLoadInfo *seq_load, wmOperator *op)
/* used for image strip */
/* best guess, first images name */
RNA_BEGIN(op->ptr, itemptr, "files") {
- RNA_string_get(&itemptr, "name", seq_load->name);
+ char *name= RNA_string_get_alloc(&itemptr, "name", NULL, 0);
+ BLI_strncpy(seq_load->name, name, sizeof(seq_load->name));
+ MEM_freeN(name);
break;
}
RNA_END;
@@ -341,6 +336,9 @@ static int sequencer_add_movie_strip_exec(bContext *C, wmOperator *op)
static int sequencer_add_movie_strip_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
+ if(RNA_collection_length(op->ptr, "files") || RNA_property_is_set(op->ptr, "filepath"))
+ return sequencer_add_movie_strip_exec(C, op);
+
if(!ED_operator_sequencer_active(C)) {
BKE_report(op->reports, RPT_ERROR, "Sequencer area not active");
return OPERATOR_CANCELLED;
@@ -349,6 +347,10 @@ static int sequencer_add_movie_strip_invoke(bContext *C, wmOperator *op, wmEvent
if(!RNA_property_is_set(op->ptr, "relative_path"))
RNA_boolean_set(op->ptr, "relative_path", U.flag & USER_RELPATHS);
+ /* This is for drag and drop */
+ if(RNA_property_is_set(op->ptr, "filepath"))
+ return sequencer_add_movie_strip_exec(C, op);
+
sequencer_generic_invoke_xy__internal(C, op, event, 0);
WM_event_add_fileselect(C, op);
@@ -389,6 +391,9 @@ static int sequencer_add_sound_strip_exec(bContext *C, wmOperator *op)
static int sequencer_add_sound_strip_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
+ if(RNA_collection_length(op->ptr, "files") || RNA_property_is_set(op->ptr, "filepath"))
+ return sequencer_add_sound_strip_exec(C, op);
+
if(!ED_operator_sequencer_active(C)) {
BKE_report(op->reports, RPT_ERROR, "Sequencer area not active");
return OPERATOR_CANCELLED;
@@ -397,6 +402,10 @@ static int sequencer_add_sound_strip_invoke(bContext *C, wmOperator *op, wmEvent
if(!RNA_property_is_set(op->ptr, "relative_path"))
RNA_boolean_set(op->ptr, "relative_path", U.flag & USER_RELPATHS);
+ /* This is for drag and drop */
+ if(RNA_property_is_set(op->ptr, "filepath"))
+ return sequencer_add_sound_strip_exec(C, op);
+
sequencer_generic_invoke_xy__internal(C, op, event, 0);
WM_event_add_fileselect(C, op);
@@ -486,6 +495,9 @@ static int sequencer_add_image_strip_exec(bContext *C, wmOperator *op)
static int sequencer_add_image_strip_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
+ if(RNA_collection_length(op->ptr, "files"))
+ return sequencer_add_image_strip_exec(C, op);
+
if(!ED_operator_sequencer_active(C)) {
BKE_report(op->reports, RPT_ERROR, "Sequencer area not active");
return OPERATOR_CANCELLED;
diff --git a/source/blender/editors/space_sequencer/sequencer_buttons.c b/source/blender/editors/space_sequencer/sequencer_buttons.c
index a2aa7e649b9..4394e334614 100644
--- a/source/blender/editors/space_sequencer/sequencer_buttons.c
+++ b/source/blender/editors/space_sequencer/sequencer_buttons.c
@@ -33,10 +33,7 @@
#include "BLI_blenlib.h"
#include "BKE_context.h"
-#include "BKE_global.h"
-#include "BKE_main.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "ED_screen.h"
diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c
index 4f52a17f623..afd8895edd9 100644
--- a/source/blender/editors/space_sequencer/sequencer_draw.c
+++ b/source/blender/editors/space_sequencer/sequencer_draw.c
@@ -39,12 +39,11 @@
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
#include "DNA_userdef_types.h"
+#include "DNA_sound_types.h"
#include "BKE_context.h"
#include "BKE_global.h"
-#include "BKE_plugin_types.h"
#include "BKE_sequencer.h"
-#include "BKE_scene.h"
#include "BKE_utildefines.h"
#include "BKE_sound.h"
@@ -168,7 +167,7 @@ static void get_seq_color3ubv(Scene *curscene, Sequence *seq, char *col)
}
}
-static void drawseqwave(Sequence *seq, float x1, float y1, float x2, float y2, float stepsize)
+static void drawseqwave(Scene *scene, Sequence *seq, float x1, float y1, float x2, float y2, float stepsize)
{
/*
x1 is the starting x value to draw the wave,
@@ -184,7 +183,9 @@ static void drawseqwave(Sequence *seq, float x1, float y1, float x2, float y2, f
float* samples = MEM_mallocN(length * sizeof(float) * 2, "seqwave_samples");
if(!samples)
return;
- if(sound_read_sound_buffer(seq->sound, samples, length) != length)
+ if(sound_read_sound_buffer(seq->sound, samples, length,
+ (seq->startofs + seq->anim_startofs)/FPS,
+ (seq->startofs + seq->anim_startofs + seq->enddisp - seq->startdisp)/FPS) != length)
{
MEM_freeN(samples);
return;
@@ -381,6 +382,8 @@ static void draw_seq_extensions(Scene *scene, ARegion *ar, SpaceSeq *sseq, Seque
pixely = (v2d->cur.ymax - v2d->cur.ymin)/(v2d->mask.ymax - v2d->mask.ymin);
+ if(pixely <= 0) return; /* can happen when the view is split/resized */
+
blendcol[0] = blendcol[1] = blendcol[2] = 120;
if(seq->startofs) {
@@ -588,7 +591,7 @@ static void draw_shadedstrip(Sequence *seq, char *col, float x1, float y1, float
}
/*
-Draw a sequence strip, bounds check alredy made
+Draw a sequence strip, bounds check already made
ARegion is currently only used to get the windows width in pixels
so wave file sample drawing precision is zoom adjusted
*/
@@ -634,7 +637,7 @@ static void draw_seq_strip(Scene *scene, ARegion *ar, SpaceSeq *sseq, Sequence *
x2= seq->enddisp;
/* draw sound wave */
- if(seq->type == SEQ_SOUND) drawseqwave(seq, x1, y1, x2, y2, (ar->v2d.cur.xmax - ar->v2d.cur.xmin)/ar->winx);
+ if(seq->type == SEQ_SOUND) drawseqwave(scene, seq, x1, y1, x2, y2, (ar->v2d.cur.xmax - ar->v2d.cur.xmin)/ar->winx);
get_seq_color3ubv(scene, seq, col);
if (G.moving && (seq->flag & SELECT)) {
@@ -692,12 +695,12 @@ void set_special_seq_update(int val)
void draw_image_seq(const bContext* C, Scene *scene, ARegion *ar, SpaceSeq *sseq, int cfra, int frame_ofs)
{
extern void gl_round_box(int mode, float minx, float miny, float maxx, float maxy, float rad);
- struct ImBuf *ibuf;
+ struct Main *bmain= CTX_data_main(C);
+ struct ImBuf *ibuf = 0;
+ struct ImBuf *scope = 0;
struct View2D *v2d = &ar->v2d;
int rectx, recty;
float viewrectx, viewrecty;
- int free_ibuf = 0;
- static int recursive= 0;
float render_size = 0.0;
float proxy_size = 100.0;
GLuint texid;
@@ -737,33 +740,12 @@ void draw_image_seq(const bContext* C, Scene *scene, ARegion *ar, SpaceSeq *sseq
UI_view2d_totRect_set(v2d, viewrectx + 0.5f, viewrecty + 0.5f);
UI_view2d_curRect_validate(v2d);
- /* BIG PROBLEM: the give_ibuf_seq() can call a rendering, which in turn calls redraws...
- this shouldn't belong in a window drawing....
- So: solve this once event based.
- Now we check for recursion, space type and active area again (ton) */
-
- if(recursive)
- return;
- else {
- recursive= 1;
- if (special_seq_update) {
- ibuf= give_ibuf_seq_direct(scene, rectx, recty, cfra + frame_ofs, proxy_size, special_seq_update);
- }
- else if (!U.prefetchframes) { // XXX || (G.f & G_PLAYANIM) == 0) {
- ibuf= (ImBuf *)give_ibuf_seq(scene, rectx, recty, cfra + frame_ofs, sseq->chanshown, proxy_size);
- }
- else {
- ibuf= (ImBuf *)give_ibuf_seq_threaded(scene, rectx, recty, cfra + frame_ofs, sseq->chanshown, proxy_size);
- }
- recursive= 0;
-
- /* XXX HURMF! the give_ibuf_seq can call image display in this window */
-// if(sa->spacetype!=SPACE_SEQ)
-// return;
-// if(sa!=curarea) {
-// areawinset(sa->win);
-// }
- }
+ if (special_seq_update)
+ ibuf= give_ibuf_seq_direct(bmain, scene, rectx, recty, cfra + frame_ofs, proxy_size, special_seq_update);
+ else if (!U.prefetchframes) // XXX || (G.f & G_PLAYANIM) == 0) {
+ ibuf= (ImBuf *)give_ibuf_seq(bmain, scene, rectx, recty, cfra + frame_ofs, sseq->chanshown, proxy_size);
+ else
+ ibuf= (ImBuf *)give_ibuf_seq_threaded(bmain, scene, rectx, recty, cfra + frame_ofs, sseq->chanshown, proxy_size);
if(ibuf==NULL)
return;
@@ -774,28 +756,29 @@ void draw_image_seq(const bContext* C, Scene *scene, ARegion *ar, SpaceSeq *sseq
switch(sseq->mainb) {
case SEQ_DRAW_IMG_IMBUF:
if (sseq->zebra != 0) {
- ibuf = make_zebra_view_from_ibuf(ibuf, sseq->zebra);
- free_ibuf = 1;
+ scope = make_zebra_view_from_ibuf(ibuf, sseq->zebra);
}
break;
case SEQ_DRAW_IMG_WAVEFORM:
if ((sseq->flag & SEQ_DRAW_COLOR_SEPERATED) != 0) {
- ibuf = make_sep_waveform_view_from_ibuf(ibuf);
+ scope = make_sep_waveform_view_from_ibuf(ibuf);
} else {
- ibuf = make_waveform_view_from_ibuf(ibuf);
+ scope = make_waveform_view_from_ibuf(ibuf);
}
- free_ibuf = 1;
break;
case SEQ_DRAW_IMG_VECTORSCOPE:
- ibuf = make_vectorscope_view_from_ibuf(ibuf);
- free_ibuf = 1;
+ scope = make_vectorscope_view_from_ibuf(ibuf);
break;
case SEQ_DRAW_IMG_HISTOGRAM:
- ibuf = make_histogram_view_from_ibuf(ibuf);
- free_ibuf = 1;
+ scope = make_histogram_view_from_ibuf(ibuf);
break;
}
+ if (scope) {
+ IMB_freeImBuf(ibuf);
+ ibuf = scope;
+ }
+
if(ibuf->rect_float && ibuf->rect==NULL) {
IMB_rect_from_float(ibuf);
}
@@ -838,42 +821,54 @@ void draw_image_seq(const bContext* C, Scene *scene, ARegion *ar, SpaceSeq *sseq
glDisable(GL_TEXTURE_2D);
glDeleteTextures(1, &texid);
- /* safety border */
- if (sseq->mainb == SEQ_DRAW_IMG_IMBUF &&
- (sseq->flag & SEQ_DRAW_SAFE_MARGINS) != 0) {
- float fac= 0.1;
+ if(sseq->mainb == SEQ_DRAW_IMG_IMBUF) {
+
float x1 = v2d->tot.xmin;
float y1 = v2d->tot.ymin;
float x2 = v2d->tot.xmax;
float y2 = v2d->tot.ymax;
-
- float a= fac*(x2-x1);
- x1+= a;
- x2-= a;
-
- a= fac*(y2-y1);
- y1+= a;
- y2-= a;
-
- glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
+
+ /* border */
setlinestyle(3);
UI_ThemeColorBlendShade(TH_WIRE, TH_BACK, 1.0, 0);
-
- uiSetRoundBox(15);
- gl_round_box(GL_LINE_LOOP, x1, y1, x2, y2, 12.0);
+
+ glBegin(GL_LINE_LOOP);
+ glVertex2f(x1-0.5, y1-0.5);
+ glVertex2f(x1-0.5, y2+0.5);
+ glVertex2f(x2+0.5, y2+0.5);
+ glVertex2f(x2+0.5, y1-0.5);
+ glEnd();
+
+ /* safety border */
+ if ((sseq->flag & SEQ_DRAW_SAFE_MARGINS) != 0) {
+ float fac= 0.1;
+
+ float a= fac*(x2-x1);
+ x1+= a;
+ x2-= a;
+
+ a= fac*(y2-y1);
+ y1+= a;
+ y2-= a;
+
+ glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
+
+ uiSetRoundBox(15);
+ gl_round_box(GL_LINE_LOOP, x1, y1, x2, y2, 12.0);
+
+ glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
+
+ }
setlinestyle(0);
- glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
}
/* draw grease-pencil (image aligned) */
// if (sseq->flag & SEQ_DRAW_GPENCIL)
// XXX draw_gpencil_2dimage(sa, ibuf);
- if (free_ibuf) {
- IMB_freeImBuf(ibuf);
- }
+ IMB_freeImBuf(ibuf);
/* draw grease-pencil (screen aligned) */
// if (sseq->flag & SEQ_DRAW_GPENCIL)
diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c
index d3d2fd7e220..d1654dc5d37 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -43,19 +43,13 @@
#include "BLI_storage_types.h"
-#include "DNA_ipo_types.h"
#include "DNA_scene_types.h"
#include "DNA_userdef_types.h"
#include "BKE_context.h"
#include "BKE_global.h"
-#include "BKE_image.h"
-#include "BKE_library.h"
#include "BKE_main.h"
-#include "BKE_plugin_types.h"
#include "BKE_sequencer.h"
-#include "BKE_scene.h"
-#include "BKE_utildefines.h"
#include "BKE_report.h"
#include "BKE_sound.h"
@@ -621,7 +615,7 @@ int seq_effect_find_selected(Scene *scene, Sequence *activeseq, int type, Sequen
for(seq=ed->seqbasep->first; seq; seq=seq->next) {
if(seq->flag & SELECT) {
- if (seq->type == SEQ_SOUND) {
+ if (seq->type == SEQ_SOUND && get_sequence_effect_num_inputs(type) != 0) {
*error_str= "Can't apply effects to audio sequence strips";
return 0;
}
@@ -725,8 +719,9 @@ static void recurs_del_seq_flag(Scene *scene, ListBase *lb, short flag, short de
while(seq) {
seqn= seq->next;
if((seq->flag & flag) || deleteall) {
- if(seq->type==SEQ_SOUND && seq->sound)
- seq->sound->id.us--;
+ if(seq->type==SEQ_SOUND && seq->sound) {
+ ((ID *)seq->sound)->us--; /* TODO, could be moved into seq_free_sequence() */
+ }
BLI_remlink(lb, seq);
if(seq==last_seq) seq_active_set(scene, NULL);
@@ -740,7 +735,7 @@ static void recurs_del_seq_flag(Scene *scene, ListBase *lb, short flag, short de
}
-static Sequence *cut_seq_hard(Scene *scene, Sequence * seq, int cutframe)
+static Sequence *cut_seq_hard(Main *bmain, Scene *scene, Sequence * seq, int cutframe)
{
TransSeq ts;
Sequence *seqn = 0;
@@ -787,8 +782,9 @@ static Sequence *cut_seq_hard(Scene *scene, Sequence * seq, int cutframe)
}
}
- reload_sequence_new_file(scene, seq, FALSE);
+ reload_sequence_new_file(bmain, scene, seq, FALSE);
calc_sequence(scene, seq);
+ new_tstripdata(seq);
if (!skip_dup) {
/* Duplicate AFTER the first change */
@@ -826,13 +822,14 @@ static Sequence *cut_seq_hard(Scene *scene, Sequence * seq, int cutframe)
seqn->startstill = 0;
}
- reload_sequence_new_file(scene, seqn, FALSE);
+ reload_sequence_new_file(bmain, scene, seqn, FALSE);
calc_sequence(scene, seqn);
+ new_tstripdata(seqn);
}
return seqn;
}
-static Sequence *cut_seq_soft(Scene *scene, Sequence * seq, int cutframe)
+static Sequence *cut_seq_soft(Main *bmain, Scene *scene, Sequence * seq, int cutframe)
{
TransSeq ts;
Sequence *seqn = 0;
@@ -878,6 +875,7 @@ static Sequence *cut_seq_soft(Scene *scene, Sequence * seq, int cutframe)
}
calc_sequence(scene, seq);
+ new_tstripdata(seq);
if (!skip_dup) {
/* Duplicate AFTER the first change */
@@ -913,6 +911,7 @@ static Sequence *cut_seq_soft(Scene *scene, Sequence * seq, int cutframe)
}
calc_sequence(scene, seqn);
+ new_tstripdata(seqn);
}
return seqn;
}
@@ -920,8 +919,8 @@ static Sequence *cut_seq_soft(Scene *scene, Sequence * seq, int cutframe)
/* like duplicate, but only duplicate and cut overlapping strips,
* strips to the left of the cutframe are ignored and strips to the right are moved into the new list */
-static int cut_seq_list(Scene *scene, ListBase *old, ListBase *new, int cutframe,
- Sequence * (*cut_seq)(Scene *, Sequence *, int))
+static int cut_seq_list(Main *bmain, Scene *scene, ListBase *old, ListBase *new, int cutframe,
+ Sequence * (*cut_seq)(Main *, Scene *, Sequence *, int))
{
int did_something = FALSE;
Sequence *seq, *seq_next;
@@ -935,7 +934,7 @@ static int cut_seq_list(Scene *scene, ListBase *old, ListBase *new, int cutframe
if(seq->flag & SELECT) {
if(cutframe > seq->startdisp &&
cutframe < seq->enddisp) {
- Sequence * seqn = cut_seq(scene, seq, cutframe);
+ Sequence * seqn = cut_seq(bmain, scene, seq, cutframe);
if (seqn) {
BLI_addtail(new, seqn);
}
@@ -1005,7 +1004,7 @@ void touch_seq_files(Scene *scene)
waitcursor(0);
}
-void set_filter_seq(Scene *scene)
+void set_filter_seq(Main *bmain, Scene *scene)
{
Sequence *seq;
Editing *ed= seq_give_editing(scene, FALSE);
@@ -1019,7 +1018,7 @@ void set_filter_seq(Scene *scene)
if(seq->flag & SELECT) {
if(seq->type==SEQ_MOVIE) {
seq->flag |= SEQ_FILTERY;
- reload_sequence_new_file(scene, seq, FALSE);
+ reload_sequence_new_file(bmain, scene, seq, FALSE);
calc_sequence(scene, seq);
}
@@ -1415,7 +1414,7 @@ static int sequencer_refresh_all_exec(bContext *C, wmOperator *op)
Scene *scene= CTX_data_scene(C);
Editing *ed= seq_give_editing(scene, FALSE);
- free_imbuf_seq(scene, &ed->seqbase, FALSE);
+ free_imbuf_seq(scene, &ed->seqbase, FALSE, FALSE);
WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
@@ -1507,6 +1506,7 @@ static EnumPropertyItem prop_cut_types[] = {
static int sequencer_cut_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
Editing *ed= seq_give_editing(scene, FALSE);
int cut_side, cut_hard, cut_frame;
@@ -1521,10 +1521,10 @@ static int sequencer_cut_exec(bContext *C, wmOperator *op)
newlist.first= newlist.last= NULL;
if (cut_hard==SEQ_CUT_HARD) {
- changed = cut_seq_list(scene,
+ changed = cut_seq_list(bmain, scene,
ed->seqbasep, &newlist, cut_frame, cut_seq_hard);
} else {
- changed = cut_seq_list(scene,
+ changed = cut_seq_list(bmain, scene,
ed->seqbasep, &newlist, cut_frame, cut_seq_soft);
}
@@ -2157,7 +2157,7 @@ static int sequencer_view_zoom_ratio_exec(bContext *C, wmOperator *op)
float facx= (v2d->mask.xmax - v2d->mask.xmin) / winx;
float facy= (v2d->mask.ymax - v2d->mask.ymin) / winy;
- BLI_resize_rctf(&v2d->cur, winx*facx*ratio, winy*facy*ratio);
+ BLI_resize_rctf(&v2d->cur, (int)(winx*facx*ratio) + 1, (int)(winy*facy*ratio) + 1);
ED_region_tag_redraw(CTX_wm_region(C));
@@ -2416,9 +2416,9 @@ void SEQUENCER_OT_previous_edit(wmOperatorType *ot)
static void swap_sequence(Scene* scene, Sequence* seqa, Sequence* seqb)
{
int gap = seqb->startdisp - seqa->enddisp;
- seqb->start = seqa->start;
+ seqb->start = (seqb->start - seqb->startdisp) + seqa->startdisp;
calc_sequence(scene, seqb);
- seqa->start = seqb->enddisp + gap;
+ seqa->start = (seqa->start - seqa->startdisp) + seqb->enddisp + gap;
calc_sequence(scene, seqa);
}
diff --git a/source/blender/editors/space_sequencer/sequencer_ops.c b/source/blender/editors/space_sequencer/sequencer_ops.c
index 82f70eafc0a..6ca0a13f172 100644
--- a/source/blender/editors/space_sequencer/sequencer_ops.c
+++ b/source/blender/editors/space_sequencer/sequencer_ops.c
@@ -30,16 +30,12 @@
#include <stdlib.h>
#include <math.h>
-#include "MEM_guardedalloc.h"
#include "DNA_space_types.h"
#include "BLI_math.h"
#include "BLI_blenlib.h"
-#include "BKE_context.h"
-#include "BKE_global.h"
-#include "BKE_utildefines.h"
#include "WM_api.h"
@@ -146,7 +142,6 @@ void sequencer_keymap(wmKeyConfig *keyconf)
WM_keymap_add_item(keymap, "SEQUENCER_OT_delete", XKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "SEQUENCER_OT_delete", DELKEY, KM_PRESS, 0, 0);
- WM_keymap_add_item(keymap, "SEQUENCER_OT_delete", BACKSPACEKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "SEQUENCER_OT_copy", CKEY, KM_PRESS, KM_CTRL, 0);
WM_keymap_add_item(keymap, "SEQUENCER_OT_paste", VKEY, KM_PRESS, KM_CTRL, 0);
@@ -168,7 +163,18 @@ void sequencer_keymap(wmKeyConfig *keyconf)
RNA_enum_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_swap", RIGHTARROWKEY, KM_PRESS, KM_ALT, 0)->ptr, "side", SEQ_SIDE_RIGHT);
WM_keymap_add_item(keymap, "SEQUENCER_OT_snap", SKEY, KM_PRESS, KM_SHIFT, 0);
-
+
+ /* multicam editing keyboard layout, switch to camera 1-10 using
+ regular number keys */
+ {
+ int keys[] = { ONEKEY, TWOKEY, THREEKEY, FOURKEY, FIVEKEY,
+ SIXKEY, SEVENKEY, EIGHTKEY, NINEKEY, ZEROKEY };
+ int i;
+
+ for (i = 1; i <= 10; i++) {
+ RNA_enum_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_cut_multicam", keys[i-1], KM_PRESS, 0, 0)->ptr, "camera", i);
+ }
+ }
/* Mouse selection, a bit verbose :/ */
WM_keymap_add_item(keymap, "SEQUENCER_OT_select", SELECTMOUSE, KM_PRESS, 0, 0);
@@ -243,12 +249,18 @@ void sequencer_keymap(wmKeyConfig *keyconf)
WM_keymap_add_item(keymap, "SEQUENCER_OT_view_ghost_border", OKEY, KM_PRESS, 0, 0);
/* would prefer to use numpad keys for job */
+ RNA_float_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_view_zoom_ratio", PAD1, KM_PRESS, 0, 0)->ptr, "ratio", 1.0f);
+
+ /* Setting zoom levels is not that useful, except for back to zoom level 1, removing keymap because of conflicts for now */
+#if 0
RNA_float_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_view_zoom_ratio", PAD8, KM_PRESS, KM_SHIFT, 0)->ptr, "ratio", 8.0f);
RNA_float_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_view_zoom_ratio", PAD4, KM_PRESS, KM_SHIFT, 0)->ptr, "ratio", 4.0f);
RNA_float_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_view_zoom_ratio", PAD2, KM_PRESS, KM_SHIFT, 0)->ptr, "ratio", 2.0f);
- RNA_float_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_view_zoom_ratio", PAD1, KM_PRESS, 0, 0)->ptr, "ratio", 1.0f);
+
RNA_float_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_view_zoom_ratio", PAD2, KM_PRESS, 0, 0)->ptr, "ratio", 0.5f);
RNA_float_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_view_zoom_ratio", PAD4, KM_PRESS, 0, 0)->ptr, "ratio", 0.25f);
RNA_float_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_view_zoom_ratio", PAD8, KM_PRESS, 0, 0)->ptr, "ratio", 0.125f);
+#endif
+
}
diff --git a/source/blender/editors/space_sequencer/sequencer_select.c b/source/blender/editors/space_sequencer/sequencer_select.c
index 83fa8bffd58..a61e05517d9 100644
--- a/source/blender/editors/space_sequencer/sequencer_select.c
+++ b/source/blender/editors/space_sequencer/sequencer_select.c
@@ -35,7 +35,6 @@
#endif
#include <sys/types.h>
-#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
@@ -43,12 +42,7 @@
#include "DNA_scene_types.h"
#include "BKE_context.h"
-#include "BKE_global.h"
-#include "BKE_library.h"
-#include "BKE_main.h"
#include "BKE_sequencer.h"
-#include "BKE_scene.h"
-#include "BKE_utildefines.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -247,7 +241,7 @@ static int sequencer_deselect_exec(bContext *C, wmOperator *op)
void SEQUENCER_OT_select_all_toggle(struct wmOperatorType *ot)
{
/* identifiers */
- ot->name= "(De)Select All";
+ ot->name= "Select or Deselect All";
ot->idname= "SEQUENCER_OT_select_all_toggle";
ot->description="Select or deselect all strips";
diff --git a/source/blender/editors/space_sequencer/space_sequencer.c b/source/blender/editors/space_sequencer/space_sequencer.c
index 586b76268e4..4cf25ab9585 100644
--- a/source/blender/editors/space_sequencer/space_sequencer.c
+++ b/source/blender/editors/space_sequencer/space_sequencer.c
@@ -35,6 +35,7 @@
#include "BLI_blenlib.h"
#include "BLI_math.h"
+#include "BLI_path_util.h"
#include "BKE_context.h"
#include "BKE_screen.h"
@@ -322,7 +323,20 @@ static int sound_drop_poll(bContext *C, wmDrag *drag, wmEvent *event)
static void sequencer_drop_copy(wmDrag *drag, wmDropBox *drop)
{
/* copy drag path to properties */
- RNA_string_set(drop->ptr, "filepath", drag->path);
+ if(RNA_struct_find_property(drop->ptr, "filepath"))
+ RNA_string_set(drop->ptr, "filepath", drag->path);
+
+ if(RNA_struct_find_property(drop->ptr, "directory")) {
+ PointerRNA itemptr;
+ char dir[FILE_MAX], file[FILE_MAX];
+
+ BLI_split_dirfile(drag->path, dir, file);
+
+ RNA_string_set(drop->ptr, "directory", dir);
+
+ RNA_collection_add(drop->ptr, "files", &itemptr);
+ RNA_string_set(&itemptr, "name", file);
+ }
}
/* this region dropbox definition */
diff --git a/source/blender/editors/space_sound/Makefile b/source/blender/editors/space_sound/Makefile
index a072684d543..9afda815f59 100644
--- a/source/blender/editors/space_sound/Makefile
+++ b/source/blender/editors/space_sound/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
@@ -38,6 +38,8 @@ CFLAGS += $(LEVEL_1_C_WARNINGS)
CPPFLAGS += -I$(NAN_GLEW)/include
CPPFLAGS += -I$(OPENGL_HEADERS)
+CPPFLAGS += -I$(NAN_PYTHON)/include/python$(NAN_PYTHON_VERSION)
+
# not very neat....
CPPFLAGS += -I../../windowmanager
CPPFLAGS += -I../../blenloader
diff --git a/source/blender/editors/space_sound/sound_header.c b/source/blender/editors/space_sound/sound_header.c
index acc9645af9d..fbf6d8c85c9 100644
--- a/source/blender/editors/space_sound/sound_header.c
+++ b/source/blender/editors/space_sound/sound_header.c
@@ -35,7 +35,6 @@
#include "BLI_blenlib.h"
#include "BKE_context.h"
-#include "BKE_screen.h"
#include "ED_screen.h"
#include "ED_types.h"
diff --git a/source/blender/editors/space_sound/space_sound.c b/source/blender/editors/space_sound/space_sound.c
index 174d686cf73..905e1d6cdd9 100644
--- a/source/blender/editors/space_sound/space_sound.c
+++ b/source/blender/editors/space_sound/space_sound.c
@@ -29,7 +29,6 @@
#include <string.h>
#include <stdio.h>
-#include "DNA_sound_types.h"
#include "DNA_scene_types.h"
#include "MEM_guardedalloc.h"
@@ -38,7 +37,6 @@
#include "BLI_math.h"
#include "BLI_rand.h"
-#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_screen.h"
diff --git a/source/blender/editors/space_text/Makefile b/source/blender/editors/space_text/Makefile
index 50871017085..8bc12852e18 100644
--- a/source/blender/editors/space_text/Makefile
+++ b/source/blender/editors/space_text/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/space_text/space_text.c b/source/blender/editors/space_text/space_text.c
index 7f3741e8e17..c8c19a0bc93 100644
--- a/source/blender/editors/space_text/space_text.c
+++ b/source/blender/editors/space_text/space_text.c
@@ -38,7 +38,6 @@
#include "BLI_math.h"
#include "BLI_rand.h"
-#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_screen.h"
@@ -274,6 +273,8 @@ static void text_keymap(struct wmKeyConfig *keyconf)
RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_move", DOWNARROWKEY, KM_PRESS, 0, 0)->ptr, "type", NEXT_LINE);
RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_move", PAGEUPKEY, KM_PRESS, 0, 0)->ptr, "type", PREV_PAGE);
RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_move", PAGEDOWNKEY, KM_PRESS, 0, 0)->ptr, "type", NEXT_PAGE);
+ RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_move", HOMEKEY, KM_PRESS, KM_CTRL, 0)->ptr, "type", FILE_TOP);
+ RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_move", ENDKEY, KM_PRESS, KM_CTRL, 0)->ptr, "type", FILE_BOTTOM);
RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_move_select", HOMEKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "type", LINE_BEGIN);
RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_move_select", ENDKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "type", LINE_END);
@@ -285,6 +286,8 @@ static void text_keymap(struct wmKeyConfig *keyconf)
RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_move_select", DOWNARROWKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "type", NEXT_LINE);
RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_move_select", PAGEUPKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "type", PREV_PAGE);
RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_move_select", PAGEDOWNKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "type", NEXT_PAGE);
+ RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_move_select", HOMEKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0)->ptr, "type", FILE_TOP);
+ RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_move_select", ENDKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0)->ptr, "type", FILE_BOTTOM);
RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_delete", DELKEY, KM_PRESS, 0, 0)->ptr, "type", DEL_NEXT_CHAR);
RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_delete", DKEY, KM_PRESS, KM_CTRL, 0)->ptr, "type", DEL_NEXT_CHAR);
diff --git a/source/blender/editors/space_text/text_draw.c b/source/blender/editors/space_text/text_draw.c
index 873deb30511..62274fc664a 100644
--- a/source/blender/editors/space_text/text_draw.c
+++ b/source/blender/editors/space_text/text_draw.c
@@ -44,14 +44,11 @@
#include "DNA_userdef_types.h"
#include "BKE_context.h"
-#include "BKE_global.h"
-#include "BKE_main.h"
#include "BKE_suggestions.h"
#include "BKE_text.h"
#include "BKE_utildefines.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "ED_datafiles.h"
#include "UI_interface.h"
@@ -113,8 +110,8 @@ static void flatten_string_append(FlattenString *fs, char c, int accum)
nbuf= MEM_callocN(sizeof(*fs->buf)*fs->len, "fs->buf");
naccum= MEM_callocN(sizeof(*fs->accum)*fs->len, "fs->accum");
- memcpy(nbuf, fs->buf, fs->pos);
- memcpy(naccum, fs->accum, fs->pos);
+ memcpy(nbuf, fs->buf, fs->pos * sizeof(*fs->buf));
+ memcpy(naccum, fs->accum, fs->pos * sizeof(*fs->accum));
if(fs->buf != fs->fixedbuf) {
MEM_freeN(fs->buf);
@@ -174,12 +171,13 @@ void flatten_string_free(FlattenString *fs)
static int find_builtinfunc(char *string)
{
int a, i;
- char builtinfuncs[][11] = {"and", "as", "assert", "break", "class", "continue", "def",
+ char builtinfuncs[][9] = {"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", "yield"};
- for(a=0; a<30; a++) {
+ "raise", "return", "try", "while", "yield", "with"};
+
+ for(a=0; a < sizeof(builtinfuncs)/sizeof(builtinfuncs[0]); a++) {
i = 0;
while(1) {
/* If we hit the end of a keyword... (eg. "def") */
@@ -224,6 +222,18 @@ static int find_specialvar(char *string)
return i;
}
+static int find_decorator(char *string)
+{
+ if(string[0] == '@') {
+ int i = 1;
+ while(text_check_identifier(string[i])) {
+ i++;
+ }
+ return i;
+ }
+ return -1;
+}
+
static int find_bool(char *string)
{
int i = 0;
@@ -377,6 +387,8 @@ static void txt_format_line(SpaceText *st, TextLine *line, int do_next)
prev = 'v';
else if((i=find_builtinfunc(str)) != -1)
prev = 'b';
+ else if((i=find_decorator(str)) != -1)
+ prev = 'v'; /* could have a new color for this */
if(i>0) {
while(i>1) {
*fmt = prev; fmt++; str++;
@@ -1102,6 +1114,22 @@ static void draw_cursor(SpaceText *st, ARegion *ar)
}
}
+ if(st->line_hlight) {
+ y= ar->winy-2 - vsell*st->lheight;
+ if(!(y<0 || y > ar->winy)) { /* check we need to draw */
+ int x1= st->showlinenrs ? TXT_OFFSET + TEXTXLOC : TXT_OFFSET;
+ int x2= x1 + ar->winx;
+ y= ar->winy-2 - vsell*st->lheight;
+
+ glColor4ub(255, 255, 255, 32);
+
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ glEnable(GL_BLEND);
+ glRecti(x1-4, y, x2, y-st->lheight+1);
+ glDisable(GL_BLEND);
+ }
+ }
+
if(!hidden) {
/* Draw the cursor itself (we draw the sel. cursor as this is the leading edge) */
x= st->showlinenrs ? TXT_OFFSET + TEXTXLOC : TXT_OFFSET;
@@ -1132,7 +1160,8 @@ static void draw_brackets(SpaceText *st, ARegion *ar)
int viewc, viewl, offl, offc, x, y;
char ch;
- if(!text->curl) return;
+ // showsyntax must be on or else the format string will be null
+ if(!text->curl || !st->showsyntax) return;
startl= text->curl;
startc= text->curc;
@@ -1146,23 +1175,29 @@ static void draw_brackets(SpaceText *st, ARegion *ar)
endc= -1;
find= -b;
stack= 0;
+
+ /* Dont highlight backets if syntax HL is off or bracket in string or comment. */
+ if(!linep->format || linep->format[c] == 'l' || linep->format[c] == '#')
+ return;
if(b>0) {
/* opening bracket, search forward for close */
c++;
while(linep) {
while(c<linep->len) {
- b= text_check_bracket(linep->line[c]);
- if(b==find) {
- if(stack==0) {
- endl= linep;
- endc= c;
- break;
+ if(linep->format && linep->format[c] != 'l' && linep->format[c] != '#') {
+ b= text_check_bracket(linep->line[c]);
+ if(b==find) {
+ if(stack==0) {
+ endl= linep;
+ endc= c;
+ break;
+ }
+ stack--;
+ }
+ else if(b==-find) {
+ stack++;
}
- stack--;
- }
- else if(b==-find) {
- stack++;
}
c++;
}
@@ -1176,17 +1211,19 @@ static void draw_brackets(SpaceText *st, ARegion *ar)
c--;
while(linep) {
while(c>=0) {
- b= text_check_bracket(linep->line[c]);
- if(b==find) {
- if(stack==0) {
- endl= linep;
- endc= c;
- break;
+ if(linep->format && linep->format[c] != 'l' && linep->format[c] != '#') {
+ b= text_check_bracket(linep->line[c]);
+ if(b==find) {
+ if(stack==0) {
+ endl= linep;
+ endc= c;
+ break;
+ }
+ stack--;
+ }
+ else if(b==-find) {
+ stack++;
}
- stack--;
- }
- else if(b==-find) {
- stack++;
}
c--;
}
@@ -1280,7 +1317,7 @@ void draw_text_main(SpaceText *st, ARegion *ar)
}
y= ar->winy-st->lheight;
winx= ar->winx - TXT_SCROLL_WIDTH;
-
+
/* draw cursor */
draw_cursor(st, ar);
@@ -1348,7 +1385,7 @@ void text_update_cursor_moved(bContext *C)
ARegion *ar;
int i, x, winx= 0;
- if(!st || !st->text || st->text->curl) return;
+ if(ELEM3(NULL, st, st->text, st->text->curl)) return;
text= st->text;
diff --git a/source/blender/editors/space_text/text_header.c b/source/blender/editors/space_text/text_header.c
index 3b1c882ff2f..672940cf3cb 100644
--- a/source/blender/editors/space_text/text_header.c
+++ b/source/blender/editors/space_text/text_header.c
@@ -49,24 +49,15 @@
#include "BLI_blenlib.h"
#include "BKE_context.h"
-#include "BKE_global.h"
-#include "BKE_library.h"
-#include "BKE_main.h"
-#include "BKE_scene.h"
-#include "BKE_screen.h"
-#include "BKE_text.h"
#include "ED_screen.h"
#include "WM_types.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#ifndef DISABLE_PYTHON
-#include "BPY_extern.h"
// XXX #include "BPY_menus.h"
#endif
diff --git a/source/blender/editors/space_text/text_ops.c b/source/blender/editors/space_text/text_ops.c
index a684c4dce0e..d39056c6bbc 100644
--- a/source/blender/editors/space_text/text_ops.c
+++ b/source/blender/editors/space_text/text_ops.c
@@ -34,19 +34,17 @@
#include "MEM_guardedalloc.h"
-#include "DNA_constraint_types.h"
#include "DNA_text_types.h"
+#include "DNA_userdef_types.h"
#include "BLI_blenlib.h"
#include "PIL_time.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_report.h"
-#include "BKE_suggestions.h"
#include "BKE_text.h"
#include "WM_api.h"
@@ -218,7 +216,7 @@ static int open_exec(bContext *C, wmOperator *op)
PropertyPointerRNA *pprop;
PointerRNA idptr;
char str[FILE_MAX];
- short internal = RNA_int_get(op->ptr, "internal");
+ short internal = RNA_boolean_get(op->ptr, "internal");
RNA_string_get(op->ptr, "filepath", str);
@@ -583,14 +581,17 @@ void TEXT_OT_run_script(wmOperatorType *ot)
/* api callbacks */
ot->poll= run_script_poll;
ot->exec= run_script_exec;
-}
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+}
/******************* refresh pyconstraints operator *********************/
static int refresh_pyconstraints_exec(bContext *C, wmOperator *op)
{
#ifndef DISABLE_PYTHON
+#if 0
Text *text= CTX_data_edit_text(C);
Object *ob;
bConstraint *con;
@@ -625,6 +626,7 @@ static int refresh_pyconstraints_exec(bContext *C, wmOperator *op)
}
}
#endif
+#endif
return OPERATOR_FINISHED;
}
@@ -902,15 +904,22 @@ void TEXT_OT_unindent(wmOperatorType *ot)
static int line_break_exec(bContext *C, wmOperator *op)
{
+ SpaceText *st= CTX_wm_space_text(C);
Text *text= CTX_data_edit_text(C);
- int a, curtab;
+ int a, curts;
+ int space = (text->flags & TXT_TABSTOSPACES) ? st->tabnumber : 1;
- // double check tabs before splitting the line
- curtab= setcurr_tab(text);
+ // double check tabs/spaces before splitting the line
+ curts= setcurr_tab_spaces(text, space);
txt_split_curline(text);
- for(a=0; a < curtab; a++)
- txt_add_char(text, '\t');
+ for(a=0; a < curts; a++) {
+ if (text->flags & TXT_TABSTOSPACES) {
+ txt_add_char(text, ' ');
+ } else {
+ txt_add_char(text, '\t');
+ }
+ }
if(text->curl) {
if(text->curl->prev)
@@ -1020,7 +1029,7 @@ static int convert_whitespace_exec(bContext *C, wmOperator *op)
tmp = text->lines.first;
- //first convert to all space, this make it alot easier to convert to tabs because there is no mixtures of ' ' && '\t'
+ //first convert to all space, this make it a lot easier to convert to tabs because there is no mixtures of ' ' && '\t'
while(tmp) {
text_check_line = tmp->line;
number = flatten_string(st, &fs, text_check_line)+1;
@@ -1700,6 +1709,8 @@ static int toggle_overwrite_exec(bContext *C, wmOperator *op)
st->overwrite= !st->overwrite;
+ WM_event_add_notifier(C, NC_TEXT|ND_CURSOR, st->text);
+
return OPERATOR_FINISHED;
}
@@ -2352,9 +2363,11 @@ void TEXT_OT_insert(wmOperatorType *ot)
static int find_and_replace(bContext *C, wmOperator *op, short mode)
{
+ Main *bmain= CTX_data_main(C);
SpaceText *st= CTX_wm_space_text(C);
Text *start= NULL, *text= st->text;
int flags, first= 1;
+ int found = 0;
char *tmp;
if(!st->findstr[0] || (mode == TEXT_REPLACE && !st->replacestr[0]))
@@ -2413,16 +2426,17 @@ static int find_and_replace(bContext *C, wmOperator *op, short mode)
if(text->id.next)
text= st->text= text->id.next;
else
- text= st->text= G.main->text.first;
+ text= st->text= bmain->text.first;
txt_move_toline(text, 0, 0);
text_update_cursor_moved(C);
WM_event_add_notifier(C, NC_TEXT|ND_CURSOR, text);
first= 1;
}
else {
- BKE_reportf(op->reports, RPT_ERROR, "Text not found: %s", st->findstr);
+ if(!found) BKE_reportf(op->reports, RPT_ERROR, "Text not found: %s", st->findstr);
break;
}
+ found = 1;
} while(mode==TEXT_MARK_ALL);
return OPERATOR_FINISHED;
diff --git a/source/blender/editors/space_time/Makefile b/source/blender/editors/space_time/Makefile
index e0bf3943dd8..958c3018f82 100644
--- a/source/blender/editors/space_time/Makefile
+++ b/source/blender/editors/space_time/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/space_time/space_time.c b/source/blender/editors/space_time/space_time.c
index b73c08e6542..d65422ce327 100644
--- a/source/blender/editors/space_time/space_time.c
+++ b/source/blender/editors/space_time/space_time.c
@@ -31,7 +31,6 @@
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
-#include "DNA_particle_types.h"
#include "MEM_guardedalloc.h"
@@ -42,7 +41,6 @@
#include "BKE_global.h"
#include "BKE_screen.h"
#include "BKE_pointcache.h"
-#include "BKE_utildefines.h"
#include "ED_anim_api.h"
#include "ED_keyframes_draw.h"
diff --git a/source/blender/editors/space_time/time_ops.c b/source/blender/editors/space_time/time_ops.c
index 68036d0ea33..fb80d54d5e6 100644
--- a/source/blender/editors/space_time/time_ops.c
+++ b/source/blender/editors/space_time/time_ops.c
@@ -29,14 +29,12 @@
#include <stdlib.h>
#include <math.h>
-#include "MEM_guardedalloc.h"
#include "DNA_scene_types.h"
#include "BLI_blenlib.h"
#include "BKE_context.h"
-#include "BKE_utildefines.h"
#include "ED_screen.h"
diff --git a/source/blender/editors/space_userpref/Makefile b/source/blender/editors/space_userpref/Makefile
index be7206f51ce..8510c355ab4 100644
--- a/source/blender/editors/space_userpref/Makefile
+++ b/source/blender/editors/space_userpref/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/space_userpref/space_userpref.c b/source/blender/editors/space_userpref/space_userpref.c
index 4d6d303625b..8eea83a1083 100644
--- a/source/blender/editors/space_userpref/space_userpref.c
+++ b/source/blender/editors/space_userpref/space_userpref.c
@@ -39,7 +39,6 @@
#include "ED_screen.h"
-#include "BIF_gl.h"
#include "WM_api.h"
#include "WM_types.h"
diff --git a/source/blender/editors/space_view3d/Makefile b/source/blender/editors/space_view3d/Makefile
index 9204f2482c6..58d88194c22 100644
--- a/source/blender/editors/space_view3d/Makefile
+++ b/source/blender/editors/space_view3d/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/space_view3d/drawanimviz.c b/source/blender/editors/space_view3d/drawanimviz.c
index 1bc51de4471..fb271556a9c 100644
--- a/source/blender/editors/space_view3d/drawanimviz.c
+++ b/source/blender/editors/space_view3d/drawanimviz.c
@@ -31,35 +31,22 @@
#include <string.h>
#include <math.h>
-#include "MEM_guardedalloc.h"
#include "DNA_anim_types.h"
#include "DNA_armature_types.h"
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
#include "DNA_view3d_types.h"
+#include "DNA_object_types.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BLI_dlrbTree.h"
-#include "BKE_anim.h"
#include "BKE_animsys.h"
#include "BKE_action.h"
-#include "BKE_armature.h"
-#include "BKE_constraint.h"
-#include "BKE_context.h"
-#include "BKE_depsgraph.h"
-#include "BKE_DerivedMesh.h"
-#include "BKE_global.h"
-#include "BKE_main.h"
-#include "BKE_modifier.h"
-#include "BKE_nla.h"
-#include "BKE_object.h"
-#include "BKE_utildefines.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "ED_armature.h"
#include "ED_keyframes_draw.h"
diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c
index e8f4fc7890f..1d86e0d074f 100644
--- a/source/blender/editors/space_view3d/drawarmature.c
+++ b/source/blender/editors/space_view3d/drawarmature.c
@@ -31,7 +31,6 @@
#include <string.h>
#include <math.h>
-#include "MEM_guardedalloc.h"
#include "DNA_anim_types.h"
#include "DNA_armature_types.h"
@@ -39,6 +38,7 @@
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
#include "DNA_view3d_types.h"
+#include "DNA_object_types.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
@@ -47,15 +47,9 @@
#include "BKE_animsys.h"
#include "BKE_action.h"
#include "BKE_armature.h"
-#include "BKE_constraint.h"
-#include "BKE_context.h"
-#include "BKE_depsgraph.h"
-#include "BKE_DerivedMesh.h"
#include "BKE_global.h"
-#include "BKE_main.h"
#include "BKE_modifier.h"
#include "BKE_nla.h"
-#include "BKE_object.h"
#include "BKE_utildefines.h"
#include "BIF_gl.h"
@@ -1882,15 +1876,12 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
/* Draw additional axes on the bone tail */
if ( (arm->flag & ARM_DRAWAXES) && (arm->flag & ARM_POSEMODE) ) {
- float mat[4][4];
glPushMatrix();
copy_m4_m4(bmat, pchan->pose_mat);
bone_matrix_translate_y(bmat, pchan->bone->length);
glMultMatrixf(bmat);
- mul_m4_m4m4(mat, bmat, rv3d->viewmatob);
-
- drawaxes(rv3d, mat, pchan->bone->length*0.25f, 0, OB_ARROWS);
+ drawaxes(pchan->bone->length*0.25f, 0, OB_ARROWS);
glPopMatrix();
}
@@ -2078,16 +2069,12 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt)
}
/* Draw additional axes */
if (arm->flag & ARM_DRAWAXES) {
- float mat[4][4];
glPushMatrix();
get_matrix_editbone(eBone, bmat);
bone_matrix_translate_y(bmat, eBone->length);
glMultMatrixf(bmat);
- mul_m4_m4m4(mat, bmat, rv3d->viewmatob);
-
- /* do cached text draw immediate to include transform */
- drawaxes(rv3d, mat, eBone->length*0.25f, 0, OB_ARROWS);
+ drawaxes(eBone->length*0.25f, 0, OB_ARROWS);
glPopMatrix();
}
diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c
index e46a5f5efae..9acb7443a8f 100644
--- a/source/blender/editors/space_view3d/drawmesh.c
+++ b/source/blender/editors/space_view3d/drawmesh.c
@@ -43,17 +43,12 @@
#include "DNA_screen_types.h"
#include "DNA_view3d_types.h"
#include "DNA_windowmanager_types.h"
+#include "DNA_object_types.h"
-#include "BKE_bmfont.h"
-#include "BKE_displist.h"
#include "BKE_DerivedMesh.h"
#include "BKE_effect.h"
-#include "BKE_global.h"
#include "BKE_image.h"
-#include "BKE_main.h"
#include "BKE_material.h"
-#include "BKE_mesh.h"
-#include "BKE_object.h"
#include "BKE_paint.h"
#include "BKE_property.h"
#include "BKE_utildefines.h"
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index b737a65e2be..b6983a8c26f 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -49,12 +49,10 @@
#include "BLI_rand.h"
#include "BKE_anim.h" //for the where_on_path function
-#include "BKE_curve.h"
#include "BKE_constraint.h" // for the get_constraint_target function
#include "BKE_DerivedMesh.h"
#include "BKE_deform.h"
#include "BKE_displist.h"
-#include "BKE_effect.h"
#include "BKE_font.h"
#include "BKE_global.h"
#include "BKE_image.h"
@@ -68,9 +66,6 @@
#include "BKE_paint.h"
#include "BKE_particle.h"
#include "BKE_pointcache.h"
-#include "BKE_property.h"
-#include "BKE_softbody.h"
-#include "BKE_smoke.h"
#include "BKE_unit.h"
#include "BKE_utildefines.h"
#include "BKE_tessmesh.h"
@@ -88,6 +83,7 @@
#include "ED_screen.h"
#include "ED_sculpt.h"
#include "ED_types.h"
+#include "ED_curve.h" /* for ED_curve_editnurbs */
#include "UI_resources.h"
@@ -147,7 +143,7 @@ static void view3d_project_short_clip(ARegion *ar, float *vec, short *adr, int l
return;
}
- VECCOPY(vec4, vec);
+ copy_v3_v3(vec4, vec);
vec4[3]= 1.0;
mul_m4_v4(rv3d->persmatob, vec4);
@@ -176,7 +172,7 @@ static void view3d_project_short_noclip(ARegion *ar, float *vec, short *adr)
adr[0]= IS_CLIPPED;
- VECCOPY(vec4, vec);
+ copy_v3_v3(vec4, vec);
vec4[3]= 1.0;
mul_m4_v4(rv3d->persmatob, vec4);
@@ -322,31 +318,12 @@ static float cosval[32] ={
1.00000000
};
-static void draw_xyz_wire(RegionView3D *rv3d, float mat[][4], float *c, float size, int axis)
+static void draw_xyz_wire(float *c, float size, int axis)
{
float v1[3]= {0.f, 0.f, 0.f}, v2[3] = {0.f, 0.f, 0.f};
- float imat[4][4];
- float dim;
- float dx[3], dy[3];
-
- /* hrms, really only works properly after glLoadMatrixf(rv3d->viewmat); */
- float pixscale= rv3d->persmat[0][3]*c[0]+ rv3d->persmat[1][3]*c[1]+ rv3d->persmat[2][3]*c[2] + rv3d->persmat[3][3];
- pixscale*= rv3d->pixsize;
-
- /* halfway blend between fixed size in worldspace vs viewspace -
- * alleviates some of the weirdness due to not using viewmat for gl matrix */
- dim = (0.05*size*0.5) + (size*10.f*pixscale*0.5);
-
- invert_m4_m4(imat, mat);
- normalize_v3(imat[0]);
- normalize_v3(imat[1]);
+ float dim = size * 0.1;
+ float dx[3]={dim, 0.0, 0.0}, dy[3]={0.0, dim, 0.0}, dz[3]={0.0, 0.0, dim};
- copy_v3_v3(dx, imat[0]);
- copy_v3_v3(dy, imat[1]);
-
- mul_v3_fl(dx, dim);
- mul_v3_fl(dy, dim);
-
switch(axis) {
case 0: /* x axis */
glBegin(GL_LINES);
@@ -398,7 +375,7 @@ static void draw_xyz_wire(RegionView3D *rv3d, float mat[][4], float *c, float si
/* start at top left */
sub_v3_v3v3(v1, c, dx);
- add_v3_v3v3(v1, c, dy);
+ add_v3_v3v3(v1, c, dz);
glVertex3fv(v1);
@@ -407,9 +384,9 @@ static void draw_xyz_wire(RegionView3D *rv3d, float mat[][4], float *c, float si
glVertex3fv(v1);
- mul_v3_fl(dy, 2.f);
+ mul_v3_fl(dz, 2.f);
sub_v3_v3(v1, dx);
- sub_v3_v3(v1, dy);
+ sub_v3_v3(v1, dz);
glVertex3fv(v1);
@@ -424,7 +401,7 @@ static void draw_xyz_wire(RegionView3D *rv3d, float mat[][4], float *c, float si
}
/* flag is same as for draw_object */
-void drawaxes(RegionView3D *rv3d, float mat[][4], float size, int flag, char drawtype)
+void drawaxes(float size, int flag, char drawtype)
{
int axis;
float v1[3]= {0.0, 0.0, 0.0};
@@ -466,11 +443,11 @@ void drawaxes(RegionView3D *rv3d, float mat[][4], float size, int flag, char dra
for (axis=0; axis<4; axis++) {
if (axis % 2 == 1) {
- v2[0] *= -1;
- v3[1] *= -1;
+ v2[0] = -v2[0];
+ v3[1] = -v3[1];
} else {
- v2[1] *= -1;
- v3[0] *= -1;
+ v2[1] = -v2[1];
+ v3[0] = -v3[0];
}
glVertex3fv(v1);
@@ -523,7 +500,7 @@ void drawaxes(RegionView3D *rv3d, float mat[][4], float size, int flag, char dra
v2[axis]+= size*0.125;
- draw_xyz_wire(rv3d, mat, v2, size, axis);
+ draw_xyz_wire(v2, size, axis);
}
break;
}
@@ -533,12 +510,10 @@ void drawcircball(int mode, float *cent, float rad, float tmat[][4])
{
float vec[3], vx[3], vy[3];
int a, tot=32;
-
- VECCOPY(vx, tmat[0]);
- VECCOPY(vy, tmat[1]);
- mul_v3_fl(vx, rad);
- mul_v3_fl(vy, rad);
-
+
+ mul_v3_v3fl(vx, tmat[0], rad);
+ mul_v3_v3fl(vy, tmat[1], rad);
+
glBegin(mode);
for(a=0; a<tot; a++) {
vec[0]= cent[0] + *(sinval+a) * vx[0] + *(cosval+a) * vy[0];
@@ -778,14 +753,8 @@ static void drawshadbuflimits(Lamp *la, float mat[][4])
negate_v3_v3(lavec, mat[2]);
normalize_v3(lavec);
- sta[0]= mat[3][0]+ la->clipsta*lavec[0];
- sta[1]= mat[3][1]+ la->clipsta*lavec[1];
- sta[2]= mat[3][2]+ la->clipsta*lavec[2];
-
- end[0]= mat[3][0]+ la->clipend*lavec[0];
- end[1]= mat[3][1]+ la->clipend*lavec[1];
- end[2]= mat[3][2]+ la->clipend*lavec[2];
-
+ madd_v3_v3v3fl(sta, mat[3], lavec, la->clipsta);
+ madd_v3_v3v3fl(end, mat[3], lavec, la->clipend);
glBegin(GL_LINE_STRIP);
glVertex3fv(sta);
@@ -840,10 +809,7 @@ static void spotvolume(float *lvec, float *vvec, float inp)
quat_to_mat3(mat1,q);
/* rotate lamp vector now over acos(inp) degrees */
-
- vvec[0] = lvec[0] ;
- vvec[1] = lvec[1] ;
- vvec[2] = lvec[2] ;
+ copy_v3_v3(vvec, lvec);
unit_m3(mat2);
co = inp;
@@ -909,7 +875,7 @@ static void draw_transp_spot_volume(Lamp *la, float x, float z)
draw_spot_cone(la, x, z);
- /* draw front side lightening */
+ /* draw front side lighting */
glCullFace(GL_BACK);
glBlendFunc(GL_ONE, GL_ONE);
@@ -968,7 +934,7 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
}
/* Inner Circle */
- VECCOPY(vec, ob->obmat[3]);
+ copy_v3_v3(vec, ob->obmat[3]);
glEnable(GL_BLEND);
drawcircball(GL_LINE_LOOP, vec, lampsize, imat);
glDisable(GL_BLEND);
@@ -1007,10 +973,8 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
vec_rot_to_mat3( mat,imat[2], M_PI/4.0f);
/* vectors */
- VECCOPY(v1, imat[0]);
- mul_v3_fl(v1, circrad*1.2f);
- VECCOPY(v2, imat[0]);
- mul_v3_fl(v2, circrad*2.5f);
+ mul_v3_v3fl(v1, imat[0], circrad * 1.2f);
+ mul_v3_v3fl(v2, imat[0], circrad * 2.5f);
/* center */
glTranslatef(vec[0], vec[1], vec[2]);
@@ -1038,7 +1002,7 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
}
glPopMatrix(); /* back in object space */
- vec[0]= vec[1]= vec[2]= 0.0f;
+ zero_v3(vec);
if ((la->type==LA_SPOT) || (la->type==LA_YF_PHOTON)) {
lvec[0]=lvec[1]= 0.0;
@@ -1130,7 +1094,7 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
/* draw the hemisphere curves */
short axis, steps, dir;
float outdist, zdist, mul;
- vec[0]=vec[1]=vec[2]= 0.0;
+ zero_v3(vec);
outdist = 0.14; mul = 1.4; dir = 1;
setlinestyle(4);
@@ -1179,7 +1143,7 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
/* and back to viewspace */
glLoadMatrixf(rv3d->viewmat);
- VECCOPY(vec, ob->obmat[3]);
+ copy_v3_v3(vec, ob->obmat[3]);
setlinestyle(0);
@@ -1249,17 +1213,28 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob
/* a standing up pyramid with (0,0,0) as top */
Camera *cam;
World *wrld;
- float nobmat[4][4], vec[8][4], fac, facx, facy, depth;
+ float nobmat[4][4], vec[8][4], fac, facx, facy, depth, aspx, aspy, caspx, caspy;
int i;
cam= ob->data;
+ aspx= (float) scene->r.xsch*scene->r.xasp;
+ aspy= (float) scene->r.ysch*scene->r.yasp;
+
+ if(aspx < aspy) {
+ caspx= aspx / aspy;
+ caspy= 1.0;
+ }
+ else {
+ caspx= 1.0;
+ caspy= aspy / aspx;
+ }
glDisable(GL_LIGHTING);
glDisable(GL_CULL_FACE);
if(rv3d->persp>=2 && cam->type==CAM_ORTHO && ob==v3d->camera) {
- facx= 0.5*cam->ortho_scale*1.28;
- facy= 0.5*cam->ortho_scale*1.024;
+ facx= 0.5*cam->ortho_scale*caspx;
+ facy= 0.5*cam->ortho_scale*caspy;
depth= -cam->clipsta-0.1;
}
else {
@@ -1267,8 +1242,8 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob
if(rv3d->persp>=2 && ob==v3d->camera) fac= cam->clipsta+0.1; /* that way it's always visible */
depth= - fac*cam->lens/16.0;
- facx= fac*1.28;
- facy= fac*1.024;
+ facx= fac*caspx;
+ facy= fac*caspy;
}
vec[0][0]= 0.0; vec[0][1]= 0.0; vec[0][2]= 0.001; /* GLBUG: for picking at iris Entry (well thats old!) */
@@ -1309,16 +1284,16 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob
else if (i==1 && (ob == v3d->camera)) glBegin(GL_TRIANGLES);
else break;
- vec[0][0]= -0.7*cam->drawsize;
- vec[0][1]= 1.1*cam->drawsize;
+ vec[0][0]= -0.7*cam->drawsize*caspx;
+ vec[0][1]= 1.1*cam->drawsize*caspy;
glVertex3fv(vec[0]);
vec[0][0]= 0.0;
- vec[0][1]= 1.8*cam->drawsize;
+ vec[0][1]= 1.8*cam->drawsize*caspy;
glVertex3fv(vec[0]);
- vec[0][0]= 0.7*cam->drawsize;
- vec[0][1]= 1.1*cam->drawsize;
+ vec[0][0]= 0.7*cam->drawsize*caspx;
+ vec[0][1]= 1.1*cam->drawsize*caspy;
glVertex3fv(vec[0]);
glEnd();
@@ -1384,10 +1359,10 @@ void lattice_foreachScreenVert(ViewContext *vc, void (*func)(void *userData, BPo
{
Object *obedit= vc->obedit;
Lattice *lt= obedit->data;
- BPoint *bp = lt->editlatt->def;
+ BPoint *bp = lt->editlatt->latt->def;
DispList *dl = find_displist(&obedit->disp, DL_VERTS);
float *co = dl?dl->verts:NULL;
- int i, N = lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
+ int i, N = lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw;
short s[2] = {IS_CLIPPED, 0};
ED_view3d_local_clipping(vc->rv3d, obedit->obmat); /* for local clipping lookups */
@@ -1435,7 +1410,7 @@ static void drawlattice(Scene *scene, View3D *v3d, Object *ob)
dl= find_displist(&ob->disp, DL_VERTS);
if(is_edit) {
- lt= lt->editlatt;
+ lt= lt->editlatt->latt;
cpack(0x004000);
@@ -1627,10 +1602,11 @@ void nurbs_foreachScreenVert(ViewContext *vc, void (*func)(void *userData, Nurb
short s[2] = {IS_CLIPPED, 0};
Nurb *nu;
int i;
+ ListBase *nurbs= ED_curve_editnurbs(cu);
ED_view3d_local_clipping(vc->rv3d, vc->obedit->obmat); /* for local clipping lookups */
- for (nu= cu->editnurb->first; nu; nu=nu->next) {
+ for (nu= nurbs->first; nu; nu=nu->next) {
if(nu->type == CU_BEZIER) {
for (i=0; i<nu->pntsu; i++) {
BezTriple *bezt = &nu->bezt[i];
@@ -2263,13 +2239,15 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d,
Mesh *me= ob->data;
EditEdge *eed;
EditFace *efa;
- float v1[3], v2[3], v3[3], v4[3], x, y, z;
+ float v1[3], v2[3], v3[3], v4[3], vmid[3];
float fvec[3];
char val[32]; /* Stores the measurement display text here */
char conv_float[5]; /* Use a float conversion matching the grid size */
float area, col[3]; /* area of the face, color of the text to draw */
float grid= unit->system ? unit->scale_length : v3d->grid;
- int do_split= unit->flag & USER_UNIT_OPT_SPLIT;
+ const int do_split= unit->flag & USER_UNIT_OPT_SPLIT;
+ const int do_global= v3d->flag & V3D_GLOBAL_STATS;
+ const int do_moving= G.moving;
if(v3d->flag2 & V3D_RENDER_OVERRIDE)
return;
@@ -2302,24 +2280,22 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d,
for(eed= em->edges.first; eed; eed= eed->next) {
/* draw non fgon edges, or selected edges, or edges next to selected verts while draging */
- if((eed->h != EM_FGON) && ((eed->f & SELECT) || (G.moving && ((eed->v1->f & SELECT) || (eed->v2->f & SELECT)) ))) {
- VECCOPY(v1, eed->v1->co);
- VECCOPY(v2, eed->v2->co);
-
- x= 0.5f*(v1[0]+v2[0]);
- y= 0.5f*(v1[1]+v2[1]);
- z= 0.5f*(v1[2]+v2[2]);
-
- if(v3d->flag & V3D_GLOBAL_STATS) {
- mul_m4_v3(ob->obmat, v1);
- mul_m4_v3(ob->obmat, v2);
+ if((eed->h != EM_FGON) && ((eed->f & SELECT) || (do_moving && ((eed->v1->f & SELECT) || (eed->v2->f & SELECT)) ))) {
+ copy_v3_v3(v1, eed->v1->co);
+ copy_v3_v3(v2, eed->v2->co);
+
+ interp_v3_v3v3(vmid, v1, v2, 0.5f);
+
+ if(do_global) {
+ mul_mat3_m4_v3(ob->obmat, v1);
+ mul_mat3_m4_v3(ob->obmat, v2);
}
if(unit->system)
bUnit_AsString(val, sizeof(val), len_v3v3(v1, v2)*unit->scale_length, 3, unit->system, B_UNIT_LENGTH, do_split, FALSE);
else
sprintf(val, conv_float, len_v3v3(v1, v2));
- view3d_cached_text_draw_add(x, y, z, val, 0, 0);
+ view3d_cached_text_draw_add(vmid[0], vmid[1], vmid[2], val, 0, 0);
}
}
}
@@ -2334,18 +2310,18 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d,
glColor3fv(col);
for(efa= em->faces.first; efa; efa= efa->next) {
- if((efa->f & SELECT)) { // XXX || (G.moving && faceselectedOR(efa, SELECT)) ) {
- VECCOPY(v1, efa->v1->co);
- VECCOPY(v2, efa->v2->co);
- VECCOPY(v3, efa->v3->co);
+ if((efa->f & SELECT)) { // XXX || (do_moving && faceselectedOR(efa, SELECT)) ) {
+ copy_v3_v3(v1, efa->v1->co);
+ copy_v3_v3(v2, efa->v2->co);
+ copy_v3_v3(v3, efa->v3->co);
if (efa->v4) {
- VECCOPY(v4, efa->v4->co);
+ copy_v3_v3(v4, efa->v4->co);
}
- if(v3d->flag & V3D_GLOBAL_STATS) {
- mul_m4_v3(ob->obmat, v1);
- mul_m4_v3(ob->obmat, v2);
- mul_m4_v3(ob->obmat, v3);
- if (efa->v4) mul_m4_v3(ob->obmat, v4);
+ if(do_global) {
+ mul_mat3_m4_v3(ob->obmat, v1);
+ mul_mat3_m4_v3(ob->obmat, v2);
+ mul_mat3_m4_v3(ob->obmat, v3);
+ if (efa->v4) mul_mat3_m4_v3(ob->obmat, v4);
}
if (efa->v4)
@@ -2373,20 +2349,20 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d,
glColor3fv(col);
for(efa= em->faces.first; efa; efa= efa->next) {
- VECCOPY(v1, efa->v1->co);
- VECCOPY(v2, efa->v2->co);
- VECCOPY(v3, efa->v3->co);
+ copy_v3_v3(v1, efa->v1->co);
+ copy_v3_v3(v2, efa->v2->co);
+ copy_v3_v3(v3, efa->v3->co);
if(efa->v4) {
- VECCOPY(v4, efa->v4->co);
+ copy_v3_v3(v4, efa->v4->co);
}
else {
- VECCOPY(v4, v3);
+ copy_v3_v3(v4, v3);
}
- if(v3d->flag & V3D_GLOBAL_STATS) {
- mul_m4_v3(ob->obmat, v1);
- mul_m4_v3(ob->obmat, v2);
- mul_m4_v3(ob->obmat, v3);
- mul_m4_v3(ob->obmat, v4);
+ if(do_global) {
+ mul_mat3_m4_v3(ob->obmat, v1);
+ mul_mat3_m4_v3(ob->obmat, v2);
+ mul_mat3_m4_v3(ob->obmat, v3);
+ mul_mat3_m4_v3(ob->obmat, v4); /* intentionally executed even for tri's */
}
e1= efa->e1;
@@ -2396,19 +2372,19 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d,
/* Calculate the angles */
- if( (e4->f & e1->f & SELECT) || (G.moving && (efa->v1->f & SELECT)) ) {
+ if( (e4->f & e1->f & SELECT) || (do_moving && (efa->v1->f & SELECT)) ) {
/* Vec 1 */
sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v4, v1, v2)));
interp_v3_v3v3(fvec, efa->cent, efa->v1->co, 0.8f);
view3d_cached_text_draw_add(fvec[0], fvec[1], fvec[2], val, 0, 0);
}
- if( (e1->f & e2->f & SELECT) || (G.moving && (efa->v2->f & SELECT)) ) {
+ if( (e1->f & e2->f & SELECT) || (do_moving && (efa->v2->f & SELECT)) ) {
/* Vec 2 */
sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v1, v2, v3)));
interp_v3_v3v3(fvec, efa->cent, efa->v2->co, 0.8f);
view3d_cached_text_draw_add(fvec[0], fvec[1], fvec[2], val, 0, 0);
}
- if( (e2->f & e3->f & SELECT) || (G.moving && (efa->v3->f & SELECT)) ) {
+ if( (e2->f & e3->f & SELECT) || (do_moving && (efa->v3->f & SELECT)) ) {
/* Vec 3 */
if(efa->v4)
sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v2, v3, v4)));
@@ -2419,7 +2395,7 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d,
}
/* Vec 4 */
if(efa->v4) {
- if( (e3->f & e4->f & SELECT) || (G.moving && (efa->v4->f & SELECT)) ) {
+ if( (e3->f & e4->f & SELECT) || (do_moving && (efa->v4->f & SELECT)) ) {
sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v3, v4, v1)));
interp_v3_v3v3(fvec, efa->cent, efa->v4->co, 0.8f);
view3d_cached_text_draw_add(fvec[0], fvec[1], fvec[2], val, 0, 0);
@@ -2945,7 +2921,8 @@ static int draw_mesh_object(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D
int do_alpha_pass= 0, drawlinked= 0, retval= 0, glsl, check_alpha;
if(obedit && ob!=obedit && ob->data==obedit->data) {
- if(ob_get_key(ob));
+ if(ob_get_key(ob) || ob_get_key(obedit));
+ else if(ob->modifiers.first || obedit->modifiers.first);
else drawlinked= 1;
}
@@ -3325,7 +3302,7 @@ static int drawDispList(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *bas
dl= lb->first;
if(dl==NULL) return 1;
- if(dl->nors==0) addnormalsDispList(ob, lb);
+ if(dl->nors==0) addnormalsDispList(lb);
index3_nors_incr= 0;
if( displist_has_faces(lb)==0) {
@@ -3372,7 +3349,7 @@ static int drawDispList(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *bas
dl= lb->first;
if(dl==NULL) return 1;
- if(dl->nors==NULL) addnormalsDispList(ob, lb);
+ if(dl->nors==NULL) addnormalsDispList(lb);
if(draw_glsl_material(scene, ob, v3d, dt)) {
GPU_begin_object_materials(v3d, rv3d, scene, ob, 1, NULL);
@@ -3475,7 +3452,7 @@ static void draw_particle(ParticleKey *state, int draw_as, short draw, float pix
case PART_DRAW_DOT:
{
if(vd) {
- VECCOPY(vd,state->co) pdd->vd+=3;
+ copy_v3_v3(vd,state->co); pdd->vd+=3;
}
if(cd) {
cd[0]=ma_r;
@@ -3500,7 +3477,7 @@ static void draw_particle(ParticleKey *state, int draw_as, short draw, float pix
cd[14]=cd[17]=1.0;
pdd->cd+=18;
- VECCOPY(vec2,state->co);
+ copy_v3_v3(vec2,state->co);
}
else {
if(cd) {
@@ -3509,47 +3486,47 @@ static void draw_particle(ParticleKey *state, int draw_as, short draw, float pix
cd[2]=cd[5]=cd[8]=cd[11]=cd[14]=cd[17]=ma_b;
pdd->cd+=18;
}
- VECSUB(vec2,state->co,vec);
+ sub_v3_v3v3(vec2, state->co, vec);
}
- VECADD(vec,state->co,vec);
- VECCOPY(pdd->vd,vec); pdd->vd+=3;
- VECCOPY(pdd->vd,vec2); pdd->vd+=3;
+ add_v3_v3(vec, state->co);
+ copy_v3_v3(pdd->vd,vec); pdd->vd+=3;
+ copy_v3_v3(pdd->vd,vec2); pdd->vd+=3;
vec[1]=2.0f*pixsize;
vec[0]=vec[2]=0.0;
mul_qt_v3(state->rot,vec);
if(draw_as==PART_DRAW_AXIS){
- VECCOPY(vec2,state->co);
+ copy_v3_v3(vec2,state->co);
}
- else VECSUB(vec2,state->co,vec);
+ else sub_v3_v3v3(vec2, state->co, vec);
- VECADD(vec,state->co,vec);
- VECCOPY(pdd->vd,vec); pdd->vd+=3;
- VECCOPY(pdd->vd,vec2); pdd->vd+=3;
+ add_v3_v3(vec, state->co);
+ copy_v3_v3(pdd->vd,vec); pdd->vd+=3;
+ copy_v3_v3(pdd->vd,vec2); pdd->vd+=3;
vec[2]=2.0f*pixsize;
vec[0]=vec[1]=0.0;
mul_qt_v3(state->rot,vec);
if(draw_as==PART_DRAW_AXIS){
- VECCOPY(vec2,state->co);
+ copy_v3_v3(vec2,state->co);
}
- else VECSUB(vec2,state->co,vec);
+ else sub_v3_v3v3(vec2, state->co, vec);
- VECADD(vec,state->co,vec);
+ add_v3_v3(vec, state->co);
- VECCOPY(pdd->vd,vec); pdd->vd+=3;
- VECCOPY(pdd->vd,vec2); pdd->vd+=3;
+ copy_v3_v3(pdd->vd,vec); pdd->vd+=3;
+ copy_v3_v3(pdd->vd,vec2); pdd->vd+=3;
break;
}
case PART_DRAW_LINE:
{
- VECCOPY(vec,state->vel);
+ copy_v3_v3(vec,state->vel);
normalize_v3(vec);
if(draw & PART_DRAW_VEL_LENGTH)
mul_v3_fl(vec,len_v3(state->vel));
- VECADDFAC(pdd->vd,state->co,vec,-draw_line[0]); pdd->vd+=3;
- VECADDFAC(pdd->vd,state->co,vec,draw_line[1]); pdd->vd+=3;
+ madd_v3_v3v3fl(pdd->vd, state->co, vec, -draw_line[0]); pdd->vd+=3;
+ madd_v3_v3v3fl(pdd->vd, state->co, vec, draw_line[1]); pdd->vd+=3;
if(cd) {
cd[0]=cd[3]=ma_r;
cd[1]=cd[4]=ma_g;
@@ -3576,27 +3553,27 @@ static void draw_particle(ParticleKey *state, int draw_as, short draw, float pix
}
- VECCOPY(bb->vec, state->co);
- VECCOPY(bb->vel, state->vel);
+ copy_v3_v3(bb->vec, state->co);
+ copy_v3_v3(bb->vel, state->vel);
psys_make_billboard(bb, xvec, yvec, zvec, bb_center);
- VECADD(pdd->vd,bb_center,xvec);
- VECADD(pdd->vd,pdd->vd,yvec); pdd->vd+=3;
+ add_v3_v3v3(pdd->vd, bb_center, xvec);
+ add_v3_v3(pdd->vd, yvec); pdd->vd+=3;
- VECSUB(pdd->vd,bb_center,xvec);
- VECADD(pdd->vd,pdd->vd,yvec); pdd->vd+=3;
+ sub_v3_v3v3(pdd->vd, bb_center, vec);
+ add_v3_v3(pdd->vd, yvec); pdd->vd+=3;
- VECSUB(pdd->vd,bb_center,xvec);
- VECSUB(pdd->vd,pdd->vd,yvec); pdd->vd+=3;
+ sub_v3_v3v3(pdd->vd, bb_center, xvec);
+ sub_v3_v3v3(pdd->vd, pdd->vd,yvec); pdd->vd+=3;
- VECADD(pdd->vd,bb_center,xvec);
- VECSUB(pdd->vd,pdd->vd,yvec); pdd->vd+=3;
+ add_v3_v3v3(pdd->vd, bb_center, xvec);
+ sub_v3_v3v3(pdd->vd, pdd->vd, yvec); pdd->vd+=3;
- VECCOPY(pdd->nd, zvec); pdd->nd+=3;
- VECCOPY(pdd->nd, zvec); pdd->nd+=3;
- VECCOPY(pdd->nd, zvec); pdd->nd+=3;
- VECCOPY(pdd->nd, zvec); pdd->nd+=3;
+ copy_v3_v3(pdd->nd, zvec); pdd->nd+=3;
+ copy_v3_v3(pdd->nd, zvec); pdd->nd+=3;
+ copy_v3_v3(pdd->nd, zvec); pdd->nd+=3;
+ copy_v3_v3(pdd->nd, zvec); pdd->nd+=3;
break;
}
}
@@ -3674,11 +3651,12 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
select=1;
}
- psys_update_children(&sim);
-
psys->flag|=PSYS_DRAWING;
- totchild=psys->totchild*part->disp/100;
+ if(part->type==PART_HAIR && !psys->childcache)
+ totchild=0;
+ else
+ totchild=psys->totchild*part->disp/100;
ma= give_current_material(ob,part->omat);
@@ -3715,16 +3693,8 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
cfra=bsystem_time(scene, 0, (float)CFRA, 0.0f);
- if(draw_as==PART_DRAW_PATH) {
- if(psys->pathcache==NULL && psys->childcache==NULL)
- psys_update_path_cache(&sim, cfra);
-
- /* can't create pathcache for some reason*/
- if(psys->pathcache==NULL && psys->childcache==NULL)
- draw_as=PART_DRAW_DOT;
- else if(psys->childcache==NULL)
- totchild = 0;
- }
+ if(draw_as==PART_DRAW_PATH && psys->pathcache==NULL && psys->childcache==NULL)
+ draw_as=PART_DRAW_DOT;
/* 3. */
switch(draw_as){
@@ -4012,11 +3982,10 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
/* additional things to draw for each particle */
/* (velocity, size and number) */
if((part->draw & PART_DRAW_VEL) && pdd->vedata){
- VECCOPY(pdd->ved,state.co);
- pdd->ved+=3;
- VECCOPY(vel,state.vel);
- mul_v3_fl(vel,timestep);
- VECADD(pdd->ved,state.co,vel);
+ copy_v3_v3(pdd->ved,state.co);
+ pdd->ved += 3;
+ mul_v3_v3fl(vel, state.vel, timestep);
+ add_v3_v3v3(pdd->ved, state.co, vel);
pdd->ved+=3;
totve++;
@@ -4041,7 +4010,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
sprintf(val_pos, (val_pos==val) ? "%.2f" : ":%.2f", pa_health);
/* in path drawing state.co is the end point */
- /* use worldspace beause object matrix is alredy applied */
+ /* use worldspace beause object matrix is already applied */
mul_v3_m4v3(vec_txt, ob->imat, state.co);
view3d_cached_text_draw_add(vec_txt[0], vec_txt[1], vec_txt[2], val, 10, V3D_CACHE_TEXT_WORLDSPACE);
}
@@ -4076,7 +4045,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
UI_ThemeColor(TH_WIRE);
}*/
- if(totchild && ((part->draw&PART_DRAW_PARENT)==0 || psys_in_edit_mode(scene, psys)))
+ if(totchild && (part->draw&PART_DRAW_PARENT)==0)
totpart=0;
else if(psys->pathcache==NULL)
totpart=0;
@@ -4135,7 +4104,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
val[0]= '\0';
sprintf(val, "%i", a);
- /* use worldspace beause object matrix is alredy applied */
+ /* use worldspace beause object matrix is already applied */
mul_v3_m4v3(vec_txt, ob->imat, cache[a]->co);
view3d_cached_text_draw_add(vec_txt[0], vec_txt[1], vec_txt[2], val, 10, V3D_CACHE_TEXT_WORLDSPACE);
}
@@ -4294,7 +4263,7 @@ static void draw_ptcache_edit(Scene *scene, View3D *v3d, RegionView3D *rv3d, Obj
if(timed) {
for(k=0, pcol=pathcol, pkey=path; k<steps; k++, pkey++, pcol+=4){
- VECCOPY(pcol, pkey->col);
+ copy_v3_v3(pcol, pkey->col);
pcol[3] = 1.0f - fabs((float)CFRA - pkey->time)/(float)pset->fade_frames;
}
@@ -4332,15 +4301,15 @@ static void draw_ptcache_edit(Scene *scene, View3D *v3d, RegionView3D *rv3d, Obj
for(k=0, key=point->keys; k<point->totkey; k++, key++){
if(pd) {
- VECCOPY(pd, key->co);
+ copy_v3_v3(pd, key->co);
pd += 3;
}
if(key->flag&PEK_SELECT){
- VECCOPY(cd,sel_col);
+ copy_v3_v3(cd,sel_col);
}
else{
- VECCOPY(cd,nosel_col);
+ copy_v3_v3(cd,nosel_col);
}
if(timed)
@@ -4414,12 +4383,12 @@ static void ob_draw_RE_motion(float com[3],float rotscale[3][3],float itw,float
root[1] = root[2] = 0.0f;
root[0] = -drw_size;
mul_m3_v3(tr,root);
- VECADD(root,root,com);
+ add_v3_v3(root, com);
glVertex3fv(root);
tip[1] = tip[2] = 0.0f;
tip[0] = drw_size;
mul_m3_v3(tr,tip);
- VECADD(tip,tip,com);
+ add_v3_v3(tip, com);
glVertex3fv(tip);
glEnd();
@@ -4427,7 +4396,7 @@ static void ob_draw_RE_motion(float com[3],float rotscale[3][3],float itw,float
root[0] = th;
glBegin(GL_LINES);
mul_m3_v3(tr,root);
- VECADD(root,root,com);
+ add_v3_v3(root, com);
glVertex3fv(root);
glVertex3fv(tip);
glEnd();
@@ -4436,7 +4405,7 @@ static void ob_draw_RE_motion(float com[3],float rotscale[3][3],float itw,float
root[0] = th;
glBegin(GL_LINES);
mul_m3_v3(tr,root);
- VECADD(root,root,com);
+ add_v3_v3(root, com);
glVertex3fv(root);
glVertex3fv(tip);
glEnd();
@@ -4445,7 +4414,7 @@ static void ob_draw_RE_motion(float com[3],float rotscale[3][3],float itw,float
root[0] =th;
glBegin(GL_LINES);
mul_m3_v3(tr,root);
- VECADD(root,root,com);
+ add_v3_v3(root, com);
glVertex3fv(root);
glVertex3fv(tip);
glEnd();
@@ -4454,7 +4423,7 @@ static void ob_draw_RE_motion(float com[3],float rotscale[3][3],float itw,float
root[0] = th;
glBegin(GL_LINES);
mul_m3_v3(tr,root);
- VECADD(root,root,com);
+ add_v3_v3(root, com);
glVertex3fv(root);
glVertex3fv(tip);
glEnd();
@@ -4465,12 +4434,12 @@ static void ob_draw_RE_motion(float com[3],float rotscale[3][3],float itw,float
root[0] = root[2] = 0.0f;
root[1] = -drw_size;
mul_m3_v3(tr,root);
- VECADD(root,root,com);
+ add_v3_v3(root, com);
glVertex3fv(root);
tip[0] = tip[2] = 0.0f;
tip[1] = drw_size;
mul_m3_v3(tr,tip);
- VECADD(tip,tip,com);
+ add_v3_v3(tip, com);
glVertex3fv(tip);
glEnd();
@@ -4478,7 +4447,7 @@ static void ob_draw_RE_motion(float com[3],float rotscale[3][3],float itw,float
root[1] = th;
glBegin(GL_LINES);
mul_m3_v3(tr,root);
- VECADD(root,root,com);
+ add_v3_v3(root, com);
glVertex3fv(root);
glVertex3fv(tip);
glEnd();
@@ -4487,7 +4456,7 @@ static void ob_draw_RE_motion(float com[3],float rotscale[3][3],float itw,float
root[1] = th;
glBegin(GL_LINES);
mul_m3_v3(tr,root);
- VECADD(root,root,com);
+ add_v3_v3(root, com);
glVertex3fv(root);
glVertex3fv(tip);
glEnd();
@@ -4496,7 +4465,7 @@ static void ob_draw_RE_motion(float com[3],float rotscale[3][3],float itw,float
root[1] =th;
glBegin(GL_LINES);
mul_m3_v3(tr,root);
- VECADD(root,root,com);
+ add_v3_v3(root, com);
glVertex3fv(root);
glVertex3fv(tip);
glEnd();
@@ -4505,7 +4474,7 @@ static void ob_draw_RE_motion(float com[3],float rotscale[3][3],float itw,float
root[1] = th;
glBegin(GL_LINES);
mul_m3_v3(tr,root);
- VECADD(root,root,com);
+ add_v3_v3(root, com);
glVertex3fv(root);
glVertex3fv(tip);
glEnd();
@@ -4515,12 +4484,12 @@ static void ob_draw_RE_motion(float com[3],float rotscale[3][3],float itw,float
root[0] = root[1] = 0.0f;
root[2] = -drw_size;
mul_m3_v3(tr,root);
- VECADD(root,root,com);
+ add_v3_v3(root, com);
glVertex3fv(root);
tip[0] = tip[1] = 0.0f;
tip[2] = drw_size;
mul_m3_v3(tr,tip);
- VECADD(tip,tip,com);
+ add_v3_v3(tip, com);
glVertex3fv(tip);
glEnd();
@@ -4528,7 +4497,7 @@ static void ob_draw_RE_motion(float com[3],float rotscale[3][3],float itw,float
root[2] = th;
glBegin(GL_LINES);
mul_m3_v3(tr,root);
- VECADD(root,root,com);
+ add_v3_v3(root, com);
glVertex3fv(root);
glVertex3fv(tip);
glEnd();
@@ -4537,7 +4506,7 @@ static void ob_draw_RE_motion(float com[3],float rotscale[3][3],float itw,float
root[2] = th;
glBegin(GL_LINES);
mul_m3_v3(tr,root);
- VECADD(root,root,com);
+ add_v3_v3(root, com);
glVertex3fv(root);
glVertex3fv(tip);
glEnd();
@@ -4546,7 +4515,7 @@ static void ob_draw_RE_motion(float com[3],float rotscale[3][3],float itw,float
root[2] = th;
glBegin(GL_LINES);
mul_m3_v3(tr,root);
- VECADD(root,root,com);
+ add_v3_v3(root, com);
glVertex3fv(root);
glVertex3fv(tip);
glEnd();
@@ -4555,7 +4524,7 @@ static void ob_draw_RE_motion(float com[3],float rotscale[3][3],float itw,float
root[2] = th;
glBegin(GL_LINES);
mul_m3_v3(tr,root);
- VECADD(root,root,com);
+ add_v3_v3(root, com);
glVertex3fv(root);
glVertex3fv(tip);
glEnd();
@@ -5094,12 +5063,10 @@ static void drawspiral(float *cent, float rad, float tmat[][4], int start)
start *= -1;
}
- VECCOPY(vx, tmat[0]);
- VECCOPY(vy, tmat[1]);
- mul_v3_fl(vx, rad);
- mul_v3_fl(vy, rad);
+ mul_v3_v3fl(vx, tmat[0], rad);
+ mul_v3_v3fl(vy, tmat[1], rad);
- VECCOPY(vec, cent);
+ copy_v3_v3(vec, cent);
if (inverse==0) {
for(a=0; a<tot; a++) {
@@ -5372,7 +5339,7 @@ static void draw_forcefield(Scene *scene, Object *ob, RegionView3D *rv3d)
UI_ThemeColorBlend(curcol, TH_BACK, 0.5);
drawcircball(GL_LINE_LOOP, guidevec1, mindist, imat);
- VECCOPY(vec, guidevec1); /* max center */
+ copy_v3_v3(vec, guidevec1); /* max center */
}
}
@@ -5458,8 +5425,8 @@ void get_local_bounds(Object *ob, float *center, float *size)
BoundBox *bb= object_get_boundbox(ob);
if(bb==NULL) {
- center[0]= center[1]= center[2]= 0.0;
- VECCOPY(size, ob->size);
+ zero_v3(center);
+ copy_v3_v3(size, ob->size);
}
else {
size[0]= 0.5*fabs(bb->vec[0][0] - bb->vec[4][0]);
@@ -5551,13 +5518,13 @@ static void drawtexspace(Object *ob)
}
else if ELEM3(ob->type, OB_CURVE, OB_SURF, OB_FONT) {
Curve *cu= ob->data;
- VECCOPY(size, cu->size);
- VECCOPY(loc, cu->loc);
+ copy_v3_v3(size, cu->size);
+ copy_v3_v3(loc, cu->loc);
}
else if(ob->type==OB_MBALL) {
MetaBall *mb= ob->data;
- VECCOPY(size, mb->size);
- VECCOPY(loc, mb->loc);
+ copy_v3_v3(size, mb->size);
+ copy_v3_v3(loc, mb->loc);
}
else return;
@@ -5702,10 +5669,9 @@ static void draw_hooks(Object *ob)
//<rcruiz>
void drawRBpivot(bRigidBodyJointConstraint *data)
{
- float radsPerDeg = 6.283185307179586232f / 360.f;
int axis;
float v1[3]= {data->pivX, data->pivY, data->pivZ};
- float eu[3]= {radsPerDeg*data->axX, radsPerDeg*data->axY, radsPerDeg*data->axZ};
+ float eu[3]= {data->axX, data->axY, data->axZ};
float mat[4][4];
eul_to_mat4(mat,eu);
@@ -5718,9 +5684,7 @@ void drawRBpivot(bRigidBodyJointConstraint *data)
dir[axis] = 1.f;
glBegin(GL_LINES);
mul_m4_v3(mat,dir);
- v[0] += dir[0];
- v[1] += dir[1];
- v[2] += dir[2];
+ add_v3_v3(v, dir);
glVertex3fv(v1);
glVertex3fv(v);
glEnd();
@@ -6008,8 +5972,8 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
if (cu->linewidth != 0.0) {
cpack(0xff44ff);
UI_ThemeColor(TH_WIRE);
- VECCOPY(vec1, ob->orig);
- VECCOPY(vec2, ob->orig);
+ copy_v3_v3(vec1, ob->orig);
+ copy_v3_v3(vec2, ob->orig);
vec1[0] += cu->linewidth;
vec2[0] += cu->linewidth;
vec1[1] += cu->linedist * cu->fsize;
@@ -6029,8 +5993,8 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
UI_ThemeColor(TH_ACTIVE);
else
UI_ThemeColor(TH_WIRE);
- vec1[0] = cu->tb[i].x;
- vec1[1] = cu->tb[i].y + cu->fsize;
+ vec1[0] = (cu->xof * cu->fsize) + cu->tb[i].x;
+ vec1[1] = (cu->yof * cu->fsize) + cu->tb[i].y + cu->fsize;
vec1[2] = 0.001;
glBegin(GL_LINE_STRIP);
glVertex3fv(vec1);
@@ -6088,7 +6052,8 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
cu= ob->data;
if(cu->editnurb) {
- drawnurb(scene, v3d, rv3d, base, cu->editnurb->first, dt);
+ ListBase *nurbs= ED_curve_editnurbs(cu);
+ drawnurb(scene, v3d, rv3d, base, nurbs->first, dt);
}
else if(dt==OB_BOUNDBOX) {
if((v3d->flag2 & V3D_RENDER_OVERRIDE && v3d->drawtype >= OB_WIRE)==0)
@@ -6117,7 +6082,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
}
case OB_EMPTY:
if((v3d->flag2 & V3D_RENDER_OVERRIDE)==0)
- drawaxes(rv3d, rv3d->viewmatob, ob->empty_drawsize, flag, ob->empty_drawtype);
+ drawaxes(ob->empty_drawsize, flag, ob->empty_drawtype);
break;
case OB_LAMP:
if((v3d->flag2 & V3D_RENDER_OVERRIDE)==0) {
@@ -6143,7 +6108,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
break;
default:
if((v3d->flag2 & V3D_RENDER_OVERRIDE)==0) {
- drawaxes(rv3d, rv3d->viewmatob, 1.0, flag, OB_ARROWS);
+ drawaxes(1.0, flag, OB_ARROWS);
}
}
@@ -6297,7 +6262,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
if(density[index] > FLT_EPSILON)
{
float color[3];
- VECCOPY(tmp, smd->domain->p0);
+ copy_v3_v3(tmp, smd->domain->p0);
tmp[0] += smd->domain->dx * x + smd->domain->dx * 0.5;
tmp[1] += smd->domain->dx * y + smd->domain->dx * 0.5;
tmp[2] += smd->domain->dx * z + smd->domain->dx * 0.5;
@@ -6341,9 +6306,9 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
/* draw extra: after normal draw because of makeDispList */
if(dtx && (G.f & G_RENDER_OGL)==0) {
-
+
if(dtx & OB_AXIS) {
- drawaxes(rv3d, rv3d->viewmatob, 1.0f, flag, OB_ARROWS);
+ drawaxes(1.0f, flag, OB_ARROWS);
}
if(dtx & OB_BOUNDBOX) {
if((v3d->flag2 & V3D_RENDER_OVERRIDE)==0)
@@ -6365,9 +6330,8 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
if(dt<OB_SHADED && (v3d->flag2 & V3D_RENDER_OVERRIDE)==0) {
if((ob->gameflag & OB_DYNAMIC) ||
((ob->gameflag & OB_BOUNDS) && (ob->boundtype == OB_BOUND_SPHERE))) {
- float imat[4][4], vec[3];
+ float imat[4][4], vec[3]= {0.0f, 0.0f, 0.0f};
- vec[0]= vec[1]= vec[2]= 0.0;
invert_m4_m4(imat, rv3d->viewmatob);
setlinestyle(2);
@@ -6725,7 +6689,7 @@ void draw_object_instance(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object
draw_object_mesh_instance(scene, v3d, rv3d, ob, dt, outline);
break;
case OB_EMPTY:
- drawaxes(rv3d, rv3d->viewmatob, ob->empty_drawsize, 0, ob->empty_drawtype);
+ drawaxes(ob->empty_drawsize, 0, ob->empty_drawtype);
break;
}
}
diff --git a/source/blender/editors/space_view3d/drawvolume.c b/source/blender/editors/space_view3d/drawvolume.c
index 420f2d77fed..65786901868 100644
--- a/source/blender/editors/space_view3d/drawvolume.c
+++ b/source/blender/editors/space_view3d/drawvolume.c
@@ -45,7 +45,6 @@
#include "BLI_edgehash.h"
#include "BLI_rand.h"
-#include "BKE_anim.h" //for the where_on_path function
#include "BKE_curve.h"
#include "BKE_constraint.h" // for the get_constraint_target function
#include "BKE_DerivedMesh.h"
@@ -66,12 +65,10 @@
#include "BKE_particle.h"
#include "BKE_property.h"
#include "BKE_smoke.h"
-#include "BKE_unit.h"
#include "BKE_utildefines.h"
#include "smoke_API.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "GPU_extensions.h"
@@ -450,7 +447,7 @@ void draw_volume(Scene *scene, ARegion *ar, View3D *v3d, Base *base, GPUTexture
}
tend();
- printf ( "Draw Time: %f\n",( float ) tval() );
+ // printf ( "Draw Time: %f\n",( float ) tval() );
if(tex_shadow)
GPU_texture_unbind(tex_shadow);
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index caad2afba7f..ac845ec7ea3 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -38,12 +38,8 @@
#include "BLI_math.h"
#include "BLI_rand.h"
-#include "BKE_action.h"
#include "BKE_context.h"
-#include "BKE_global.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
-#include "BKE_image.h"
#include "ED_screen.h"
#include "ED_object.h"
@@ -211,6 +207,7 @@ static SpaceLink *view3d_new(const bContext *C)
v3d->far= 500.0f;
v3d->twtype= V3D_MANIP_TRANSLATE;
+ v3d->around= V3D_CENTROID;
/* header */
ar= MEM_callocN(sizeof(ARegion), "header for view3d");
diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c
index 93a045dad9d..77172ed2c96 100644
--- a/source/blender/editors/space_view3d/view3d_buttons.c
+++ b/source/blender/editors/space_view3d/view3d_buttons.c
@@ -47,22 +47,16 @@
#include "BLI_rand.h"
#include "BKE_action.h"
-#include "BKE_brush.h"
#include "BKE_context.h"
#include "BKE_curve.h"
#include "BKE_customdata.h"
#include "BKE_depsgraph.h"
-#include "BKE_idprop.h"
+#include "BKE_main.h"
#include "BKE_mesh.h"
-#include "BKE_object.h"
-#include "BKE_global.h"
-#include "BKE_scene.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "BKE_tessmesh.h"
#include "BKE_deform.h"
-#include "BIF_gl.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -74,6 +68,7 @@
#include "ED_mesh.h"
#include "ED_screen.h"
#include "ED_transform.h"
+#include "ED_curve.h"
#include "UI_interface.h"
#include "UI_resources.h"
@@ -205,8 +200,9 @@ static void v3d_editvertex_buts(const bContext *C, uiLayout *layout, View3D *v3d
BPoint *bp;
BezTriple *bezt;
int a;
-
- nu= cu->editnurb->first;
+ ListBase *nurbs= ED_curve_editnurbs(cu);
+
+ nu= nurbs->first;
while(nu) {
if(nu->type == CU_BEZIER) {
bezt= nu->bezt;
@@ -258,8 +254,8 @@ static void v3d_editvertex_buts(const bContext *C, uiLayout *layout, View3D *v3d
BPoint *bp;
int a;
- a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
- bp= lt->editlatt->def;
+ a= lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw;
+ bp= lt->editlatt->latt->def;
while(a--) {
if(bp->f1 & SELECT) {
add_v3_v3(median, bp->vec);
@@ -358,7 +354,7 @@ static void v3d_editvertex_buts(const bContext *C, uiLayout *layout, View3D *v3d
if(totedge==1)
uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Crease:", 0, 20, 200, 20, &(tfp->ve_median[3]), 0.0, 1.0, 10, 3, "");
else if(totedge>1)
- uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Median Crease:", 0, 20, 200, 20, &(tfp->ve_median[3]), 0.0, 1.0, 10, 3, "");
+ uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Mean Crease:", 0, 20, 200, 20, &(tfp->ve_median[3]), 0.0, 1.0, 10, 3, "");
}
else { // apply
@@ -410,8 +406,9 @@ static void v3d_editvertex_buts(const bContext *C, uiLayout *layout, View3D *v3d
BPoint *bp;
BezTriple *bezt;
int a;
-
- nu= cu->editnurb->first;
+ ListBase *nurbs= ED_curve_editnurbs(cu);
+
+ nu= nurbs->first;
while(nu) {
if(nu->type == CU_BEZIER) {
bezt= nu->bezt;
@@ -459,8 +456,8 @@ static void v3d_editvertex_buts(const bContext *C, uiLayout *layout, View3D *v3d
BPoint *bp;
int a;
- a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
- bp= lt->editlatt->def;
+ a= lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw;
+ bp= lt->editlatt->latt->def;
while(a--) {
if(bp->f1 & SELECT) {
add_v3_v3(bp->vec, median);
@@ -999,6 +996,7 @@ static int test_parent_loop(Object *par, Object *ob)
static void do_view3d_region_buttons(bContext *C, void *arg, int event)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
// Object *obedit= CTX_data_edit_object(C);
View3D *v3d= CTX_wm_view3d(C);
@@ -1030,7 +1028,7 @@ static void do_view3d_region_buttons(bContext *C, void *arg, int event)
if(ob->id.lib || test_parent_loop(ob->parent, ob) )
ob->parent= NULL;
else {
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
DAG_id_flush_update(&ob->id, OB_RECALC_OB);
}
}
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index 8cc8c976981..d56b2c35773 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -33,6 +33,7 @@
#include "DNA_armature_types.h"
#include "DNA_camera_types.h"
#include "DNA_customdata_types.h"
+#include "DNA_object_types.h"
#include "DNA_group_types.h"
#include "DNA_key_types.h"
#include "DNA_lamp_types.h"
@@ -49,7 +50,6 @@
#include "BKE_context.h"
#include "BKE_customdata.h"
#include "BKE_image.h"
-#include "BKE_ipo.h"
#include "BKE_key.h"
#include "BKE_object.h"
#include "BKE_global.h"
@@ -78,7 +78,6 @@
#include "ED_space_api.h"
#include "ED_screen_types.h"
#include "ED_transform.h"
-#include "ED_gpencil.h"
#include "UI_interface.h"
#include "UI_interface_icons.h"
@@ -190,7 +189,7 @@ void view3d_clr_clipping(void)
static int test_clipping(float *vec, float clip[][4])
{
float view[3];
- VECCOPY(view, vec);
+ copy_v3_v3(view, vec);
if(0.0f < clip[0][3] + INPR(view, clip[0]))
if(0.0f < clip[1][3] + INPR(view, clip[1]))
@@ -212,28 +211,37 @@ int view3d_test_clipping(RegionView3D *rv3d, float *vec, int local)
static void drawgrid_draw(ARegion *ar, float wx, float wy, float x, float y, float dx)
-{
- float fx, fy;
-
+{
+ float v1[2], v2[2];
+
x+= (wx);
y+= (wy);
- fx= x/dx;
- fx= x-dx*floor(fx);
+
+ v1[1]= 0.0f;
+ v2[1]= (float)ar->winy;
+
+ v1[0] = v2[0] = x-dx*floor(x/dx);
+
+ glBegin(GL_LINES);
- while(fx< ar->winx) {
- fdrawline(fx, 0.0, fx, (float)ar->winy);
- fx+= dx;
+ while(v1[0] < ar->winx) {
+ glVertex2fv(v1);
+ glVertex2fv(v2);
+ v1[0] = v2[0] = v1[0] + dx;
}
- fy= y/dx;
- fy= y-dx*floor(fy);
-
+ v1[0]= 0.0f;
+ v2[0]= (float)ar->winx;
+
+ v1[1]= v2[1]= y-dx*floor(y/dx);
- while(fy< ar->winy) {
- fdrawline(0.0, fy, (float)ar->winx, fy);
- fy+= dx;
+ while(v1[1] < ar->winy) {
+ glVertex2fv(v1);
+ glVertex2fv(v2);
+ v1[1] = v2[1] = v1[1] + dx;
}
+ glEnd();
}
#define GRID_MIN_PX 6.0f
@@ -972,6 +980,7 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d)
extern void gl_round_box(int mode, float minx, float miny, float maxx, float maxy, float rad); // interface_panel.c
float fac, a;
float x1, x2, y1, y2;
+ float x1i, x2i, y1i, y2i;
float x3, y3, x4, y4;
rctf viewborder;
Camera *ca= NULL;
@@ -983,11 +992,18 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d)
ca = v3d->camera->data;
calc_viewborder(scene, ar, rv3d, v3d, &viewborder);
+ /* the offsets */
x1= viewborder.xmin;
y1= viewborder.ymin;
x2= viewborder.xmax;
y2= viewborder.ymax;
+ /* apply offsets so the real 3D camera shows through */
+ x1i= (int)(x1 - 1.0f);
+ y1i= (int)(y1 - 1.0f);
+ x2i= (int)(x2 + 1.0f);
+ y2i= (int)(y2 + 1.0f);
+
/* passepartout, specified in camera edit buttons */
if (ca && (ca->flag & CAM_SHOWPASSEPARTOUT) && ca->passepartalpha > 0.000001) {
if (ca->passepartalpha == 1.0) {
@@ -997,29 +1013,29 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d)
glEnable(GL_BLEND);
glColor4f(0, 0, 0, ca->passepartalpha);
}
- if (x1 > 0.0)
- glRectf(0.0, (float)ar->winy, x1, 0.0);
- if (x2 < (float)ar->winx)
- glRectf(x2, (float)ar->winy, (float)ar->winx, 0.0);
- if (y2 < (float)ar->winy)
- glRectf(x1, (float)ar->winy, x2, y2);
- if (y2 > 0.0)
- glRectf(x1, y1, x2, 0.0);
+ if (x1i > 0.0)
+ glRectf(0.0, (float)ar->winy, x1i, 0.0);
+ if (x2i < (float)ar->winx)
+ glRectf(x2i, (float)ar->winy, (float)ar->winx, 0.0);
+ if (y2i < (float)ar->winy)
+ glRectf(x1i, (float)ar->winy, x2i, y2i);
+ if (y2i > 0.0)
+ glRectf(x1i, y1i, x2i, 0.0);
glDisable(GL_BLEND);
}
-
+
/* edge */
- glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
-
+ glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
+
setlinestyle(0);
UI_ThemeColor(TH_BACK);
- glRectf(x1, y1, x2, y2);
+ glRectf(x1i, y1i, x2i, y2i);
setlinestyle(3);
UI_ThemeColor(TH_WIRE);
- glRectf(x1, y1, x2, y2);
-
+ glRectf(x1i, y1i, x2i, y2i);
+
/* border */
if(scene->r.mode & R_BORDER) {
@@ -1032,7 +1048,7 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d)
cpack(0x4040FF);
glRectf(x3, y3, x4, y4);
}
-
+
/* safety border */
if (ca && (ca->flag & CAM_SHOWTITLESAFE)) {
fac= 0.1;
@@ -1050,21 +1066,21 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d)
uiSetRoundBox(15);
gl_round_box(GL_LINE_LOOP, x1, y1, x2, y2, 12.0);
}
-
+
setlinestyle(0);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
-
+
/* camera name - draw in highlighted text color */
if (ca && (ca->flag & CAM_SHOWNAME)) {
UI_ThemeColor(TH_TEXT_HI);
- BLF_draw_default(x1, y1-15, 0.0f, v3d->camera->id.name+2);
+ BLF_draw_default(x1i, y1i-15, 0.0f, v3d->camera->id.name+2);
UI_ThemeColor(TH_WIRE);
}
}
/* *********************** backdraw for selection *************** */
-void backdrawview3d(Scene *scene, ARegion *ar, View3D *v3d)
+static void backdrawview3d(Scene *scene, ARegion *ar, View3D *v3d)
{
RegionView3D *rv3d= ar->regiondata;
struct Base *base = scene->basact;
@@ -1117,6 +1133,7 @@ void backdrawview3d(Scene *scene, ARegion *ar, View3D *v3d)
}
v3d->flag &= ~V3D_INVALID_BACKBUF;
+ ar->swap= 0; /* mark invalid backbuf for wm draw */
G.f &= ~G_BACKBUFSEL;
v3d->zbuf= FALSE;
@@ -1729,8 +1746,12 @@ void draw_depth(Scene *scene, ARegion *ar, View3D *v3d, int (* func)(void *))
if (v3d->afterdraw.first) {
View3DAfter *v3da, *next;
int num = 0;
+ int mask_orig;
v3d->xray= TRUE;
+ /* transp materials can change the depth mask, see #21388 */
+ glGetIntegerv(GL_DEPTH_WRITEMASK, &mask_orig);
+
glDepthFunc(GL_ALWAYS); /* always write into the depth bufer, overwriting front z values */
for(v3da= v3d->afterdraw.first; v3da; v3da= next) {
next= v3da->next;
@@ -1757,6 +1778,8 @@ void draw_depth(Scene *scene, ARegion *ar, View3D *v3d, int (* func)(void *))
}
v3d->xray= FALSE;
v3d->transp= FALSE;
+
+ glDepthMask(mask_orig);
}
if(rv3d->rflag & RV3D_CLIPPING)
@@ -1784,7 +1807,7 @@ static void gpu_render_lamp_update(Scene *scene, View3D *v3d, Object *ob, Object
lamp = GPU_lamp_from_blender(scene, ob, par);
if(lamp) {
- GPU_lamp_update(lamp, ob->lay, obmat);
+ GPU_lamp_update(lamp, ob->lay, (ob->restrictflag & OB_RESTRICT_RENDER), obmat);
GPU_lamp_update_colors(lamp, la->r, la->g, la->b, la->energy);
if((ob->lay & v3d->lay) && GPU_lamp_has_shadow_buffer(lamp)) {
@@ -1931,9 +1954,9 @@ static void view3d_main_area_setup_view(Scene *scene, View3D *v3d, ARegion *ar,
{
float len1, len2, vec[3];
- VECCOPY(vec, rv3d->persinv[0]);
+ copy_v3_v3(vec, rv3d->persinv[0]);
len1= normalize_v3(vec);
- VECCOPY(vec, rv3d->persinv[1]);
+ copy_v3_v3(vec, rv3d->persinv[1]);
len2= normalize_v3(vec);
rv3d->pixsize= 2.0f*(len1>len2?len1:len2);
@@ -1954,6 +1977,7 @@ void ED_view3d_draw_offscreen(Scene *scene, View3D *v3d, ARegion *ar, int winx,
{
Scene *sce;
Base *base;
+ float backcol[3];
int bwinx, bwiny;
glPushMatrix();
@@ -1973,7 +1997,11 @@ void ED_view3d_draw_offscreen(Scene *scene, View3D *v3d, ARegion *ar, int winx,
/* set background color, fallback on the view background color */
if(scene->world) {
- glClearColor(scene->world->horr, scene->world->horg, scene->world->horb, 0.0);
+ if(scene->r.color_mgt_flag & R_COLOR_MANAGEMENT)
+ linearrgb_to_srgb_v3_v3(backcol, &scene->world->horr);
+ else
+ copy_v3_v3(backcol, &scene->world->horr);
+ glClearColor(backcol[0], backcol[1], backcol[2], 0.0);
}
else {
UI_ThemeClearColor(TH_BACK);
@@ -2191,6 +2219,7 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar)
Scene *sce;
Base *base;
Object *ob;
+ float backcol[3];
int retopo= 0, sculptparticle= 0;
Object *obact = OBACT;
char *grid_unit= NULL;
@@ -2209,7 +2238,16 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar)
}
/* clear background */
- UI_ThemeClearColor(TH_BACK);
+ if((v3d->flag2 & V3D_RENDER_OVERRIDE) && scene->world) {
+ if(scene->r.color_mgt_flag & R_COLOR_MANAGEMENT)
+ linearrgb_to_srgb_v3_v3(backcol, &scene->world->horr);
+ else
+ copy_v3_v3(backcol, &scene->world->horr);
+ glClearColor(backcol[0], backcol[1], backcol[2], 0.0);
+ }
+ else
+ UI_ThemeClearColor(TH_BACK);
+
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
/* setup view matrices */
@@ -2394,8 +2432,6 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar)
ob= OBACT;
if(U.uiflag & USER_DRAWVIEWINFO)
draw_selected_name(scene, ob, v3d);
-
- ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST_PIXEL);
/* XXX here was the blockhandlers for floating panels */
diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c
index 0cf2bc492ee..3dfa62215ed 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -41,16 +41,11 @@
#include "BLI_math.h"
#include "BLI_rand.h"
-#include "BKE_action.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_object.h"
-#include "BKE_global.h"
#include "BKE_paint.h"
#include "BKE_report.h"
#include "BKE_scene.h"
-#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "BKE_tessmesh.h"
@@ -207,7 +202,7 @@ void view3d_boxview_copy(ScrArea *sa, ARegion *ar)
if(rv3dtest->viewlock) {
rv3dtest->dist= rv3d->dist;
- VECCOPY(rv3dtest->ofs, rv3d->ofs);
+ copy_v3_v3(rv3dtest->ofs, rv3d->ofs);
ED_region_tag_redraw(artest);
}
}
@@ -311,14 +306,14 @@ static void viewops_data_create(bContext *C, wmOperator *op, wmEvent *event)
vod->ar= CTX_wm_region(C);
vod->rv3d= rv3d= vod->ar->regiondata;
vod->dist0= rv3d->dist;
- QUATCOPY(vod->oldquat, rv3d->viewquat);
+ copy_qt_qt(vod->oldquat, rv3d->viewquat);
vod->origx= vod->oldx= event->x;
vod->origy= vod->oldy= event->y;
vod->origkey= event->type; /* the key that triggered the operator. */
vod->use_dyn_ofs= (U.uiflag & USER_ORBIT_SELECTION) ? 1:0;
if (vod->use_dyn_ofs) {
- VECCOPY(vod->ofs, rv3d->ofs);
+ copy_v3_v3(vod->ofs, rv3d->ofs);
/* If there's no selection, lastofs is unmodified and last value since static */
calculateTransformCenter(C, V3D_CENTROID, lastofs);
negate_v3_v3(vod->dyn_ofs, lastofs);
@@ -337,8 +332,7 @@ static void viewops_data_create(bContext *C, wmOperator *op, wmEvent *event)
float mat[3][3];
float upvec[3];
- VECCOPY(my_origin, rv3d->ofs);
- negate_v3(my_origin); /* ofs is flipped */
+ negate_v3_v3(my_origin, rv3d->ofs); /* ofs is flipped */
/* Set the dist value to be the distance from this 3d point */
/* this means youll always be able to zoom into it and panning wont go bad when dist was zero */
@@ -359,7 +353,7 @@ static void viewops_data_create(bContext *C, wmOperator *op, wmEvent *event)
negate_v3_v3(rv3d->ofs, dvec);
}
negate_v3(vod->dyn_ofs);
- VECCOPY(vod->ofs, rv3d->ofs);
+ copy_v3_v3(vod->ofs, rv3d->ofs);
} else {
vod->ofs[0] = vod->ofs[1] = vod->ofs[2] = 0.0f;
}
@@ -404,49 +398,49 @@ static const float thres = 0.93f; //cos(20 deg);
#define COS45 0.70710678118654746
#define SIN45 COS45
-static float snapquats[39][6] = {
- /*{q0, q1, q3, q4, view, oposite_direction}*/
-{COS45, -SIN45, 0.0, 0.0, RV3D_VIEW_FRONT, 0}, //front
-{0.0, 0.0, -SIN45, -SIN45, RV3D_VIEW_BACK, 0}, //back
-{1.0, 0.0, 0.0, 0.0, RV3D_VIEW_TOP, 0}, //top
-{0.0, -1.0, 0.0, 0.0, RV3D_VIEW_BOTTOM, 0}, //bottom
-{0.5, -0.5, -0.5, -0.5, RV3D_VIEW_LEFT, 0}, //left
-{0.5, -0.5, 0.5, 0.5, RV3D_VIEW_RIGHT, 0}, //right
+static float snapquats[39][5] = {
+ /*{q0, q1, q3, q4, view}*/
+ {COS45, -SIN45, 0.0, 0.0, RV3D_VIEW_FRONT}, //front
+ {0.0, 0.0, -SIN45, -SIN45, RV3D_VIEW_BACK}, //back
+ {1.0, 0.0, 0.0, 0.0, RV3D_VIEW_TOP}, //top
+ {0.0, -1.0, 0.0, 0.0, RV3D_VIEW_BOTTOM}, //bottom
+ {0.5, -0.5, -0.5, -0.5, RV3D_VIEW_RIGHT}, //left
+ {0.5, -0.5, 0.5, 0.5, RV3D_VIEW_LEFT}, //right
/* some more 45 deg snaps */
-{0.65328145027160645, -0.65328145027160645, 0.27059805393218994, 0.27059805393218994, 0, 0},
-{0.92387950420379639, 0.0, 0.0, 0.38268342614173889, 0, 0},
-{0.0, -0.92387950420379639, 0.38268342614173889, 0.0, 0, 0},
-{0.35355335474014282, -0.85355335474014282, 0.35355338454246521, 0.14644660055637360, 0, 0},
-{0.85355335474014282, -0.35355335474014282, 0.14644660055637360, 0.35355338454246521, 0, 0},
-{0.49999994039535522, -0.49999994039535522, 0.49999997019767761, 0.49999997019767761, 0, 0},
-{0.27059802412986755, -0.65328145027160645, 0.65328145027160645, 0.27059802412986755, 0, 0},
-{0.65328145027160645, -0.27059802412986755, 0.27059802412986755, 0.65328145027160645, 0, 0},
-{0.27059799432754517, -0.27059799432754517, 0.65328139066696167, 0.65328139066696167, 0, 0},
-{0.38268336653709412, 0.0, 0.0, 0.92387944459915161, 0, 0},
-{0.0, -0.38268336653709412, 0.92387944459915161, 0.0, 0, 0},
-{0.14644658565521240, -0.35355335474014282, 0.85355335474014282, 0.35355335474014282, 0, 0},
-{0.35355335474014282, -0.14644658565521240, 0.35355335474014282, 0.85355335474014282, 0, 0},
-{0.0, 0.0, 0.92387944459915161, 0.38268336653709412, 0, 0},
-{-0.0, 0.0, 0.38268336653709412, 0.92387944459915161, 0, 0},
-{-0.27059802412986755, 0.27059802412986755, 0.65328133106231689, 0.65328133106231689, 0, 0},
-{-0.38268339633941650, 0.0, 0.0, 0.92387938499450684, 0, 0},
-{0.0, 0.38268339633941650, 0.92387938499450684, 0.0, 0, 0},
-{-0.14644658565521240, 0.35355338454246521, 0.85355329513549805, 0.35355332493782043, 0, 0},
-{-0.35355338454246521, 0.14644658565521240, 0.35355332493782043, 0.85355329513549805, 0, 0},
-{-0.49999991059303284, 0.49999991059303284, 0.49999985098838806, 0.49999985098838806, 0, 0},
-{-0.27059799432754517, 0.65328145027160645, 0.65328139066696167, 0.27059799432754517, 0, 0},
-{-0.65328145027160645, 0.27059799432754517, 0.27059799432754517, 0.65328139066696167, 0, 0},
-{-0.65328133106231689, 0.65328133106231689, 0.27059793472290039, 0.27059793472290039, 0, 0},
-{-0.92387932538986206, 0.0, 0.0, 0.38268333673477173, 0, 0},
-{0.0, 0.92387932538986206, 0.38268333673477173, 0.0, 0, 0},
-{-0.35355329513549805, 0.85355329513549805, 0.35355329513549805, 0.14644657075405121, 0, 0},
-{-0.85355329513549805, 0.35355329513549805, 0.14644657075405121, 0.35355329513549805, 0, 0},
-{-0.38268330693244934, 0.92387938499450684, 0.0, 0.0, 0, 0},
-{-0.92387938499450684, 0.38268330693244934, 0.0, 0.0, 0, 0},
-{-COS45, 0.0, 0.0, SIN45, 0, 0},
-{COS45, 0.0, 0.0, SIN45, 0, 0},
-{0.0, 0.0, 0.0, 1.0, 0, 0}
+ {0.65328145027160645, -0.65328145027160645, 0.27059805393218994, 0.27059805393218994, 0},
+ {0.92387950420379639, 0.0, 0.0, 0.38268342614173889, 0},
+ {0.0, -0.92387950420379639, 0.38268342614173889, 0.0, 0},
+ {0.35355335474014282, -0.85355335474014282, 0.35355338454246521, 0.14644660055637360, 0},
+ {0.85355335474014282, -0.35355335474014282, 0.14644660055637360, 0.35355338454246521, 0},
+ {0.49999994039535522, -0.49999994039535522, 0.49999997019767761, 0.49999997019767761, 0},
+ {0.27059802412986755, -0.65328145027160645, 0.65328145027160645, 0.27059802412986755, 0},
+ {0.65328145027160645, -0.27059802412986755, 0.27059802412986755, 0.65328145027160645, 0},
+ {0.27059799432754517, -0.27059799432754517, 0.65328139066696167, 0.65328139066696167, 0},
+ {0.38268336653709412, 0.0, 0.0, 0.92387944459915161, 0},
+ {0.0, -0.38268336653709412, 0.92387944459915161, 0.0, 0},
+ {0.14644658565521240, -0.35355335474014282, 0.85355335474014282, 0.35355335474014282, 0},
+ {0.35355335474014282, -0.14644658565521240, 0.35355335474014282, 0.85355335474014282, 0},
+ {0.0, 0.0, 0.92387944459915161, 0.38268336653709412, 0},
+ {-0.0, 0.0, 0.38268336653709412, 0.92387944459915161, 0},
+ {-0.27059802412986755, 0.27059802412986755, 0.65328133106231689, 0.65328133106231689, 0},
+ {-0.38268339633941650, 0.0, 0.0, 0.92387938499450684, 0},
+ {0.0, 0.38268339633941650, 0.92387938499450684, 0.0, 0},
+ {-0.14644658565521240, 0.35355338454246521, 0.85355329513549805, 0.35355332493782043, 0},
+ {-0.35355338454246521, 0.14644658565521240, 0.35355332493782043, 0.85355329513549805, 0},
+ {-0.49999991059303284, 0.49999991059303284, 0.49999985098838806, 0.49999985098838806, 0},
+ {-0.27059799432754517, 0.65328145027160645, 0.65328139066696167, 0.27059799432754517, 0},
+ {-0.65328145027160645, 0.27059799432754517, 0.27059799432754517, 0.65328139066696167, 0},
+ {-0.65328133106231689, 0.65328133106231689, 0.27059793472290039, 0.27059793472290039, 0},
+ {-0.92387932538986206, 0.0, 0.0, 0.38268333673477173, 0},
+ {0.0, 0.92387932538986206, 0.38268333673477173, 0.0, 0},
+ {-0.35355329513549805, 0.85355329513549805, 0.35355329513549805, 0.14644657075405121, 0},
+ {-0.85355329513549805, 0.35355329513549805, 0.14644657075405121, 0.35355329513549805, 0},
+ {-0.38268330693244934, 0.92387938499450684, 0.0, 0.0, 0},
+ {-0.92387938499450684, 0.38268330693244934, 0.0, 0.0, 0},
+ {-COS45, 0.0, 0.0, SIN45, 0},
+ {COS45, 0.0, 0.0, SIN45, 0},
+ {0.0, 0.0, 0.0, 1.0, 0}
};
enum {
@@ -491,9 +485,11 @@ void viewrotate_modal_keymap(wmKeyConfig *keyconf)
WM_modalkeymap_add_item(keymap, LEFTALTKEY, KM_PRESS, KM_ANY, 0, VIEWROT_MODAL_AXIS_SNAP_ENABLE);
WM_modalkeymap_add_item(keymap, LEFTALTKEY, KM_RELEASE, KM_ANY, 0, VIEWROT_MODAL_AXIS_SNAP_DISABLE);
+ /* disabled mode switching for now, can re-implement better, later on
WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_PRESS, KM_ANY, 0, VIEWROT_MODAL_SWITCH_ZOOM);
WM_modalkeymap_add_item(keymap, LEFTCTRLKEY, KM_PRESS, KM_ANY, 0, VIEWROT_MODAL_SWITCH_ZOOM);
WM_modalkeymap_add_item(keymap, LEFTSHIFTKEY, KM_PRESS, KM_ANY, 0, VIEWROT_MODAL_SWITCH_MOVE);
+ */
/* assign map to operators */
WM_modalkeymap_assign(keymap, "VIEW3D_OT_rotate");
@@ -537,12 +533,12 @@ static void viewrotate_apply(ViewOpsData *vod, int x, int y)
if (vod->use_dyn_ofs) {
/* compute the post multiplication quat, to rotate the offset correctly */
- QUATCOPY(q1, vod->oldquat);
+ copy_qt_qt(q1, vod->oldquat);
conjugate_qt(q1);
mul_qt_qtqt(q1, q1, rv3d->viewquat);
conjugate_qt(q1); /* conj == inv for unit quat */
- VECCOPY(rv3d->ofs, vod->ofs);
+ copy_v3_v3(rv3d->ofs, vod->ofs);
sub_v3_v3(rv3d->ofs, vod->dyn_ofs);
mul_qt_v3(q1, rv3d->ofs);
add_v3_v3(rv3d->ofs, vod->dyn_ofs);
@@ -599,23 +595,66 @@ static void viewrotate_apply(ViewOpsData *vod, int x, int y)
/* check for view snap */
if (vod->axis_snap){
int i;
- float viewmat[3][3];
+ float viewquat_inv[4];
+ float zaxis[3]={0,0,1};
+ invert_qt_qt(viewquat_inv, rv3d->viewquat);
-
- quat_to_mat3( viewmat,rv3d->viewquat);
+ mul_qt_v3(viewquat_inv, zaxis);
for (i = 0 ; i < 39; i++){
- float snapmat[3][3];
+
float view = (int)snapquats[i][4];
+ float viewquat_inv_test[4];
+ float zaxis_test[3]={0,0,1};
- quat_to_mat3( snapmat,snapquats[i]);
+ invert_qt_qt(viewquat_inv_test, snapquats[i]);
+ mul_qt_v3(viewquat_inv_test, zaxis_test);
+
+ if(angle_v3v3(zaxis_test, zaxis) < DEG2RAD(45/3)) {
+ /* find the best roll */
+ float quat_roll[4], quat_final[4], quat_best[4];
+ float viewquat_align[4]; /* viewquat aligned to zaxis_test */
+ float viewquat_align_inv[4]; /* viewquat aligned to zaxis_test */
+ float best_angle = FLT_MAX;
+ int j;
+
+ /* viewquat_align is the original viewquat aligned to the snapped axis
+ * for testing roll */
+ rotation_between_vecs_to_quat(viewquat_align, zaxis_test, zaxis);
+ normalize_qt(viewquat_align);
+ mul_qt_qtqt(viewquat_align, rv3d->viewquat, viewquat_align);
+ normalize_qt(viewquat_align);
+ invert_qt_qt(viewquat_align_inv, viewquat_align);
+
+ /* find best roll */
+ for(j= 0; j<8; j++) {
+ float angle;
+ float xaxis1[3]={1,0,0};
+ float xaxis2[3]={1,0,0};
+ float quat_final_inv[4];
+
+ axis_angle_to_quat(quat_roll, zaxis_test, j * DEG2RAD(45.0));
+ normalize_qt(quat_roll);
+
+ mul_qt_qtqt(quat_final, snapquats[i], quat_roll);
+ normalize_qt(quat_final);
+
+ /* compare 2 vector angles to find the least roll */
+ invert_qt_qt(quat_final_inv, quat_final);
+ mul_qt_v3(viewquat_align_inv, xaxis1);
+ mul_qt_v3(quat_final_inv, xaxis2);
+ angle= angle_v3v3(xaxis1, xaxis2);
+
+ if(angle <= best_angle) {
+ best_angle= angle;
+ copy_qt_qt(quat_best, quat_final);
+ if(j) view= 0; /* view grid assumes certain up axis */
+ }
+ }
+
+ copy_qt_qt(rv3d->viewquat, quat_best);
+ rv3d->view= view; /* if we snap to a rolled camera the grid is invalid */
- if ((dot_v3v3(snapmat[0], viewmat[0]) > thres) &&
- (dot_v3v3(snapmat[1], viewmat[1]) > thres) &&
- (dot_v3v3(snapmat[2], viewmat[2]) > thres)
- ) {
- copy_qt_qt(rv3d->viewquat, snapquats[i]);
- rv3d->view= view;
break;
}
}
@@ -783,6 +822,9 @@ void viewmove_modal_keymap(wmKeyConfig *keyconf)
{
static EnumPropertyItem modal_items[] = {
{VIEW_MODAL_CONFIRM, "CONFIRM", 0, "Confirm", ""},
+
+ {VIEWROT_MODAL_SWITCH_ZOOM, "SWITCH_TO_ZOOM", 0, "Switch to Zoom"},
+ {VIEWROT_MODAL_SWITCH_ROTATE, "SWITCH_TO_ROTATE", 0, "Switch to Rotate"},
{0, NULL, 0, NULL, NULL}};
@@ -797,9 +839,11 @@ void viewmove_modal_keymap(wmKeyConfig *keyconf)
WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_RELEASE, KM_ANY, 0, VIEW_MODAL_CONFIRM);
WM_modalkeymap_add_item(keymap, ESCKEY, KM_PRESS, KM_ANY, 0, VIEW_MODAL_CONFIRM);
+ /* disabled mode switching for now, can re-implement better, later on
WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_PRESS, KM_ANY, 0, VIEWROT_MODAL_SWITCH_ZOOM);
WM_modalkeymap_add_item(keymap, LEFTCTRLKEY, KM_PRESS, KM_ANY, 0, VIEWROT_MODAL_SWITCH_ZOOM);
WM_modalkeymap_add_item(keymap, LEFTSHIFTKEY, KM_RELEASE, KM_ANY, 0, VIEWROT_MODAL_SWITCH_ROTATE);
+ */
/* assign map to operators */
WM_modalkeymap_assign(keymap, "VIEW3D_OT_move");
@@ -923,6 +967,9 @@ void viewzoom_modal_keymap(wmKeyConfig *keyconf)
{
static EnumPropertyItem modal_items[] = {
{VIEW_MODAL_CONFIRM, "CONFIRM", 0, "Confirm", ""},
+
+ {VIEWROT_MODAL_SWITCH_ROTATE, "SWITCH_TO_ROTATE", 0, "Switch to Rotate"},
+ {VIEWROT_MODAL_SWITCH_MOVE, "SWITCH_TO_MOVE", 0, "Switch to Move"},
{0, NULL, 0, NULL, NULL}};
@@ -937,9 +984,11 @@ void viewzoom_modal_keymap(wmKeyConfig *keyconf)
WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_RELEASE, KM_ANY, 0, VIEW_MODAL_CONFIRM);
WM_modalkeymap_add_item(keymap, ESCKEY, KM_PRESS, KM_ANY, 0, VIEW_MODAL_CONFIRM);
+ /* disabled mode switching for now, can re-implement better, later on
WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_RELEASE, KM_ANY, 0, VIEWROT_MODAL_SWITCH_ROTATE);
WM_modalkeymap_add_item(keymap, LEFTCTRLKEY, KM_RELEASE, KM_ANY, 0, VIEWROT_MODAL_SWITCH_ROTATE);
WM_modalkeymap_add_item(keymap, LEFTSHIFTKEY, KM_PRESS, KM_ANY, 0, VIEWROT_MODAL_SWITCH_MOVE);
+ */
/* assign map to operators */
WM_modalkeymap_assign(keymap, "VIEW3D_OT_zoom");
@@ -976,7 +1025,7 @@ static void view_zoom_mouseloc(ARegion *ar, float dfac, int mx, int my)
/* Offset to target position and dolly */
new_dist = rv3d->dist * dfac;
- VECCOPY(rv3d->ofs, tvec);
+ copy_v3_v3(rv3d->ofs, tvec);
rv3d->dist = new_dist;
/* Calculate final offset */
@@ -1384,11 +1433,9 @@ static int viewselected_exec(bContext *C, wmOperator *op) /* like a localview wi
if(pchan->bone->layer & arm->layer) {
bPoseChannel *pchan_tx= pchan->custom_tx ? pchan->custom_tx : pchan;
ok= 1;
- VECCOPY(vec, pchan_tx->pose_head);
- mul_m4_v3(ob->obmat, vec);
+ mul_v3_m4v3(vec, ob->obmat, pchan_tx->pose_head);
DO_MINMAX(vec, min, max);
- VECCOPY(vec, pchan_tx->pose_tail);
- mul_m4_v3(ob->obmat, vec);
+ mul_v3_m4v3(vec, ob->obmat, pchan_tx->pose_tail);
DO_MINMAX(vec, min, max);
}
}
@@ -1919,11 +1966,12 @@ static int viewnumpad_exec(bContext *C, wmOperator *op)
/* lastview - */
if(rv3d->persp != RV3D_CAMOB) {
+ Object *ob= OBACT;
if (!rv3d->smooth_timer) {
/* store settings of current view before allowing overwriting with camera view
* only if we're not currently in a view transition */
- QUATCOPY(rv3d->lviewquat, rv3d->viewquat);
+ copy_qt_qt(rv3d->lviewquat, rv3d->viewquat);
rv3d->lview= rv3d->view;
rv3d->lpersp= rv3d->persp;
}
@@ -1936,20 +1984,35 @@ static int viewnumpad_exec(bContext *C, wmOperator *op)
handle_view3d_lock();
}
#endif
-
- if(BASACT) {
- /* check both G.vd as G.scene cameras */
- if((v3d->camera==NULL || scene->camera==NULL) && OBACT->type==OB_CAMERA) {
- v3d->camera= OBACT;
- /*handle_view3d_lock();*/
+
+ /* first get the default camera for the view lock type */
+ if(v3d->scenelock) {
+ /* sets the camera view if available */
+ v3d->camera= scene->camera;
+ }
+ else {
+ /* use scene camera if one is not set (even though we're unlocked) */
+ if(v3d->camera==NULL) {
+ v3d->camera= scene->camera;
}
}
- if(v3d->camera==NULL) {
- v3d->camera= scene_find_camera(scene);
- if (v3d->camera == NULL)
- return OPERATOR_CANCELLED;
- }
+ /* if the camera isnt found, check a number of options */
+ if(v3d->camera==NULL && ob && ob->type==OB_CAMERA)
+ v3d->camera= ob;
+
+ if(v3d->camera==NULL)
+ v3d->camera= scene_find_camera(scene);
+
+ /* couldnt find any useful camera, bail out */
+ if(v3d->camera==NULL)
+ return OPERATOR_CANCELLED;
+
+ /* important these dont get out of sync for locked scenes */
+ if(v3d->scenelock)
+ scene->camera= v3d->camera;
+
+ /* finally do snazzy view zooming */
rv3d->persp= RV3D_CAMOB;
smooth_view(C, NULL, v3d->camera, rv3d->ofs, rv3d->viewquat, &rv3d->dist, &v3d->lens);
@@ -2020,7 +2083,7 @@ static int vieworbit_exec(bContext *C, wmOperator *op)
}
else if(orbitdir == V3D_VIEW_STEPDOWN || orbitdir == V3D_VIEW_STEPUP) {
/* horizontal axis */
- VECCOPY(q1+1, rv3d->viewinv[0]);
+ copy_v3_v3(q1+1, rv3d->viewinv[0]);
normalize_v3(q1+1);
phi= (float)(M_PI/360.0)*U.pad_rot_angle;
@@ -2329,17 +2392,26 @@ static int set_3dcursor_invoke(bContext *C, wmOperator *op, wmEvent *event)
float dx, dy, fz, *fp = NULL, dvec[3], oldcurs[3];
short mx, my, mval[2];
// short ctrl= 0; // XXX
-
+ int flip;
fp= give_cursor(scene, v3d);
// if(obedit && ctrl) lr_click= 1;
- VECCOPY(oldcurs, fp);
+ copy_v3_v3(oldcurs, fp);
mx= event->x - ar->winrct.xmin;
my= event->y - ar->winrct.ymin;
+
project_short_noclip(ar, fp, mval);
+ flip= initgrabz(rv3d, fp[0], fp[1], fp[2]);
+
+ /* reset the depth based on the view offset */
+ if(flip) {
+ negate_v3_v3(fp, rv3d->ofs);
- initgrabz(rv3d, fp[0], fp[1], fp[2]);
+ /* re initialize */
+ project_short_noclip(ar, fp, mval);
+ flip= initgrabz(rv3d, fp[0], fp[1], fp[2]);
+ }
if(mval[0]!=IS_CLIPPED) {
short depth_used = 0;
@@ -2875,7 +2947,7 @@ void viewmoveNDOF(Scene *scene, ARegion *ar, View3D *v3d, int mode)
/*----------------------------------------------------
* record how much time has passed. clamp at 10 Hz
- * pretend the previous frame occured at the clamped time
+ * pretend the previous frame occurred at the clamped time
*/
// now = PIL_check_seconds_timer();
// frametime = (now - prevTime);
@@ -2918,7 +2990,7 @@ void viewmoveNDOF(Scene *scene, ARegion *ar, View3D *v3d, int mode)
obofs[2] = -ob->obmat[3][2];
}
else {
- VECCOPY(obofs, rv3d->ofs);
+ copy_v3_v3(obofs, rv3d->ofs);
}
/* calc an adjustment based on distance from camera
diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c
index 71a7031e407..d7c7652e348 100644
--- a/source/blender/editors/space_view3d/view3d_header.c
+++ b/source/blender/editors/space_view3d/view3d_header.c
@@ -31,28 +31,20 @@
#include <stdlib.h>
#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
#include "RNA_access.h"
#include "MEM_guardedalloc.h"
-#include "BKE_action.h"
-#include "BKE_brush.h"
#include "BKE_context.h"
-#include "BKE_curve.h"
#include "BKE_depsgraph.h"
-#include "BKE_displist.h"
#include "BKE_effect.h"
-#include "BKE_global.h"
-#include "BKE_image.h"
-#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_mesh.h"
#include "BKE_modifier.h"
#include "BKE_paint.h"
-#include "BKE_particle.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h" /* for VECCOPY */
#include "BKE_tessmesh.h"
#include "ED_mesh.h"
@@ -67,8 +59,6 @@
#include "RNA_define.h"
#include "RNA_enum_types.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "BLI_math.h"
#include "BLI_blenlib.h"
@@ -153,6 +143,7 @@ static void handle_view3d_lock(bContext *C)
static int layers_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
ScrArea *sa= CTX_wm_area(C);
View3D *v3d= sa->spacedata.first;
@@ -214,7 +205,7 @@ static int layers_exec(bContext *C, wmOperator *op)
if(v3d->scenelock) handle_view3d_lock(C);
/* new layers might need unflushed events events */
- DAG_scene_update_flags(scene, v3d->lay); /* tags all that moves and flushes */
+ DAG_scene_update_flags(bmain, scene, v3d->lay); /* tags all that moves and flushes */
ED_area_tag_redraw(sa);
@@ -475,7 +466,7 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C)
uiBlockEndAlign(block);
/* Draw type */
- uiItemR(layout, &v3dptr, "viewport_shading", UI_ITEM_R_ICON_ONLY, "", 0);
+ uiItemR(layout, &v3dptr, "viewport_shade", UI_ITEM_R_ICON_ONLY, "", 0);
if (obedit==NULL && ((ob && ob->mode & (OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT)))) {
/* Manipulators aren't used in weight paint mode */
@@ -489,7 +480,7 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C)
row= uiLayoutRow(layout, 1);
uiItemR(row, &v3dptr, "pivot_point", UI_ITEM_R_ICON_ONLY, "", 0);
- uiItemR(row, &v3dptr, "pivot_point_align", UI_ITEM_R_ICON_ONLY, "", 0);
+ uiItemR(row, &v3dptr, "use_pivot_point_align", UI_ITEM_R_ICON_ONLY, "", 0);
/* NDOF */
/* Not implemented yet
@@ -504,7 +495,7 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C)
/* Transform widget / manipulators */
row= uiLayoutRow(layout, 1);
- uiItemR(row, &v3dptr, "manipulator", UI_ITEM_R_ICON_ONLY, "", 0);
+ uiItemR(row, &v3dptr, "show_manipulator", UI_ITEM_R_ICON_ONLY, "", 0);
block= uiLayoutGetBlock(row);
if(v3d->twflag & V3D_USE_MANIPULATOR) {
@@ -527,9 +518,9 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C)
/* Layers */
if (v3d->scenelock)
- uiTemplateLayers(layout, &sceneptr, "layers", &v3dptr, "used_layers", ob_lay);
+ uiTemplateLayers(layout, &sceneptr, "layers", &v3dptr, "layers_used", ob_lay);
else
- uiTemplateLayers(layout, &v3dptr, "layers", &v3dptr, "used_layers", ob_lay);
+ uiTemplateLayers(layout, &v3dptr, "layers", &v3dptr, "layers_used", ob_lay);
/* Scene lock */
uiItemR(layout, &v3dptr, "lock_camera_and_layers", UI_ITEM_R_ICON_ONLY, "", 0);
diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h
index 3e8bc71c351..173d8256269 100644
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@ -102,10 +102,10 @@ void draw_motion_paths_cleanup(Scene *scene, View3D *v3d, struct ARegion *ar);
/* drawobject.c */
void draw_object(Scene *scene, struct ARegion *ar, View3D *v3d, Base *base, int flag);
-int draw_glsl_material(Scene *scene, Object *ob, View3D *v3d, int dt);
-void draw_object_instance(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob, int dt, int outline);
-void draw_object_backbufsel(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob);
-void drawaxes(struct RegionView3D *rv3d, float mat[][4], float size, int flag, char drawtype);
+int draw_glsl_material(Scene *scene, struct Object *ob, View3D *v3d, int dt);
+void draw_object_instance(Scene *scene, View3D *v3d, RegionView3D *rv3d, struct Object *ob, int dt, int outline);
+void draw_object_backbufsel(Scene *scene, View3D *v3d, RegionView3D *rv3d, struct Object *ob);
+void drawaxes(float size, int flag, char drawtype);
void view3d_cached_text_draw_begin(void);
void view3d_cached_text_draw_add(float x, float y, float z, char *str, short xoffs, short flag);
@@ -117,7 +117,7 @@ void view3d_cached_text_draw_end(View3D *v3d, ARegion *ar, int depth_write, floa
int draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base, int dt, int flag);
/* drawmesh.c */
-void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob, struct DerivedMesh *dm, int faceselect);
+void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d, struct Object *ob, struct DerivedMesh *dm, int faceselect);
/* view3d_draw.c */
void view3d_main_area_draw(const struct bContext *C, struct ARegion *ar);
@@ -144,7 +144,7 @@ void view3d_settings_from_ob(struct Object *ob, float *ofs, float *quat, float *
void VIEW3D_OT_smoothview(struct wmOperatorType *ot);
void VIEW3D_OT_setcameratoview(struct wmOperatorType *ot);
-void VIEW3D_OT_setobjectascamera(struct wmOperatorType *ot);
+void VIEW3D_OT_object_as_camera(struct wmOperatorType *ot);
void VIEW3D_OT_localview(struct wmOperatorType *ot);
void VIEW3D_OT_game_start(struct wmOperatorType *ot);
void VIEW3D_OT_fly(struct wmOperatorType *ot);
@@ -154,7 +154,7 @@ int boundbox_clip(RegionView3D *rv3d, float obmat[][4], struct BoundBox *bb);
void centerview(struct ARegion *ar, View3D *v3d);
-void smooth_view(struct bContext *C, Object *, Object *, float *ofs, float *quat, float *dist, float *lens);
+void smooth_view(struct bContext *C, struct Object *, struct Object *, float *ofs, float *quat, float *dist, float *lens);
void setwinmatrixview3d(ARegion *ar, View3D *v3d, rctf *rect); /* rect: for picking */
void setviewmatrixview3d(Scene *scene, View3D *v3d, RegionView3D *rv3d);
@@ -174,7 +174,7 @@ void view3d_toolshelf_register(struct ARegionType *art);
void view3d_tool_props_register(struct ARegionType *art);
/* view3d_snap.c */
-int minmax_verts(Object *obedit, float *min, float *max);
+int minmax_verts(struct Object *obedit, float *min, float *max);
void VIEW3D_OT_snap_selected_to_grid(struct wmOperatorType *ot);
void VIEW3D_OT_snap_selected_to_cursor(struct wmOperatorType *ot);
diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c
index faeab482f72..9ee12a8ef1e 100644
--- a/source/blender/editors/space_view3d/view3d_ops.c
+++ b/source/blender/editors/space_view3d/view3d_ops.c
@@ -29,7 +29,6 @@
#include <stdlib.h>
#include <math.h>
-#include "MEM_guardedalloc.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
@@ -40,9 +39,6 @@
#include "BLI_math.h"
#include "BLI_blenlib.h"
-#include "BKE_context.h"
-#include "BKE_global.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
@@ -83,7 +79,7 @@ void view3d_operatortypes(void)
WM_operatortype_append(VIEW3D_OT_cursor3d);
WM_operatortype_append(VIEW3D_OT_select_lasso);
WM_operatortype_append(VIEW3D_OT_setcameratoview);
- WM_operatortype_append(VIEW3D_OT_setobjectascamera);
+ WM_operatortype_append(VIEW3D_OT_object_as_camera);
WM_operatortype_append(VIEW3D_OT_localview);
WM_operatortype_append(VIEW3D_OT_game_start);
WM_operatortype_append(VIEW3D_OT_fly);
@@ -222,12 +218,12 @@ void view3d_keymap(wmKeyConfig *keyconf)
/* drawtype */
kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle_enum", ZKEY, KM_PRESS, 0, 0);
- RNA_string_set(kmi->ptr, "data_path", "space_data.viewport_shading");
+ RNA_string_set(kmi->ptr, "data_path", "space_data.viewport_shade");
RNA_string_set(kmi->ptr, "value_1", "SOLID");
RNA_string_set(kmi->ptr, "value_2", "WIREFRAME");
kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle_enum", ZKEY, KM_PRESS, KM_ALT, 0);
- RNA_string_set(kmi->ptr, "data_path", "space_data.viewport_shading");
+ RNA_string_set(kmi->ptr, "data_path", "space_data.viewport_shade");
RNA_string_set(kmi->ptr, "value_1", "TEXTURED");
RNA_string_set(kmi->ptr, "value_2", "SOLID");
@@ -279,7 +275,7 @@ void view3d_keymap(wmKeyConfig *keyconf)
RNA_string_set(kmi->ptr, "data_path", "space_data.pivot_point_align");
kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle", SPACEKEY, KM_PRESS, KM_CTRL, 0); /* new in 2.5 */
- RNA_string_set(kmi->ptr, "data_path", "space_data.manipulator");
+ RNA_string_set(kmi->ptr, "data_path", "space_data.show_manipulator");
kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", PERIODKEY, KM_PRESS, 0, 0);
RNA_string_set(kmi->ptr, "data_path", "space_data.pivot_point");
diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c
index 4aeb5c2da6d..776048c8f74 100644
--- a/source/blender/editors/space_view3d/view3d_select.c
+++ b/source/blender/editors/space_view3d/view3d_select.c
@@ -55,15 +55,8 @@
#include "BLI_rand.h"
#include "BLI_linklist.h"
-#include "BKE_action.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
-#include "BKE_object.h"
-#include "BKE_global.h"
#include "BKE_paint.h"
-#include "BKE_scene.h"
-#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "BKE_tessmesh.h"
#include "RE_pipeline.h" // make_stars
@@ -361,11 +354,9 @@ static void do_lasso_select_pose(ViewContext *vc, Object *ob, short mcords[][2],
if(ob->type!=OB_ARMATURE || ob->pose==NULL) return;
for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) {
- VECCOPY(vec, pchan->pose_head);
- mul_m4_v3(ob->obmat, vec);
+ mul_v3_m4v3(vec, ob->obmat, pchan->pose_head);
project_short(vc->ar, vec, sco1);
- VECCOPY(vec, pchan->pose_tail);
- mul_m4_v3(ob->obmat, vec);
+ mul_v3_m4v3(vec, ob->obmat, pchan->pose_tail);
project_short(vc->ar, vec, sco2);
if(lasso_inside_edge(mcords, moves, sco1[0], sco1[1], sco2[0], sco2[1])) {
@@ -645,11 +636,9 @@ static void do_lasso_select_armature(ViewContext *vc, short mcords[][2], short m
for (ebone= arm->edbo->first; ebone; ebone=ebone->next) {
- VECCOPY(vec, ebone->head);
- mul_m4_v3(vc->obedit->obmat, vec);
+ mul_v3_m4v3(vec, vc->obedit->obmat, ebone->head);
project_short(vc->ar, vec, sco1);
- VECCOPY(vec, ebone->tail);
- mul_m4_v3(vc->obedit->obmat, vec);
+ mul_v3_m4v3(vec, vc->obedit->obmat, ebone->tail);
project_short(vc->ar, vec, sco2);
didpoint= 0;
@@ -2006,13 +1995,11 @@ static void armature_circle_select(ViewContext *vc, int selecting, short *mval,
float vec[3];
/* project head location to screenspace */
- VECCOPY(vec, ebone->head);
- mul_m4_v3(vc->obedit->obmat, vec);
+ mul_v3_m4v3(vec, vc->obedit->obmat, ebone->head);
project_short(vc->ar, vec, sco1);
/* project tail location to screenspace */
- VECCOPY(vec, ebone->tail);
- mul_m4_v3(vc->obedit->obmat, vec);
+ mul_v3_m4v3(vec, vc->obedit->obmat, ebone->tail);
project_short(vc->ar, vec, sco2);
/* check if the head and/or tail is in the circle
diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c
index 328f78d4f27..48e38c6c419 100644
--- a/source/blender/editors/space_view3d/view3d_snap.c
+++ b/source/blender/editors/space_view3d/view3d_snap.c
@@ -46,26 +46,20 @@
#include "DNA_scene_types.h"
#include "DNA_space_types.h"
#include "DNA_view3d_types.h"
+#include "DNA_object_types.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BLI_editVert.h"
#include "BLI_linklist.h"
-#include "BKE_action.h"
-#include "BKE_anim.h"
-#include "BKE_context.h"
#include "BKE_armature.h"
+#include "BKE_context.h"
#include "BKE_curve.h"
#include "BKE_depsgraph.h"
-#include "BKE_DerivedMesh.h"
-#include "BKE_displist.h"
-#include "BKE_global.h"
#include "BKE_lattice.h"
-#include "BKE_mesh.h"
-#include "BKE_modifier.h"
+#include "BKE_main.h"
#include "BKE_object.h"
-#include "BKE_utildefines.h"
#include "BKE_tessmesh.h"
#include "WM_api.h"
@@ -81,6 +75,7 @@
#include "ED_mesh.h"
#include "ED_screen.h"
#include "ED_view3d.h"
+#include "ED_curve.h" /* for ED_curve_editnurbs */
#include "view3d_intern.h"
@@ -115,8 +110,9 @@ static void special_transvert_update(Scene *scene, Object *obedit)
}
else if (ELEM(obedit->type, OB_CURVE, OB_SURF)) {
Curve *cu= obedit->data;
- Nurb *nu= cu->editnurb->first;
-
+ ListBase *nurbs= ED_curve_editnurbs(cu);
+ Nurb *nu= nurbs->first;
+
while(nu) {
test2DNurb(nu);
testhandlesNurb(nu); /* test for bezier too */
@@ -164,8 +160,8 @@ static void special_transvert_update(Scene *scene, Object *obedit)
else if(obedit->type==OB_LATTICE) {
Lattice *lt= obedit->data;
- if(lt->editlatt->flag & LT_OUTSIDE)
- outside_lattice(lt->editlatt);
+ if(lt->editlatt->latt->flag & LT_OUTSIDE)
+ outside_lattice(lt->editlatt->latt);
}
}
}
@@ -321,8 +317,9 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode)
else if (ELEM(obedit->type, OB_CURVE, OB_SURF)) {
Curve *cu= obedit->data;
int totmalloc= 0;
-
- for(nu= cu->editnurb->first; nu; nu= nu->next) {
+ ListBase *nurbs= ED_curve_editnurbs(cu);
+
+ for(nu= nurbs->first; nu; nu= nu->next) {
if((nu->type & 7)==CU_BEZIER)
totmalloc += 3*nu->pntsu;
else
@@ -330,7 +327,7 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode)
}
tv=transvmain= MEM_callocN(totmalloc*sizeof(TransVert), "maketransverts curve");
- nu= cu->editnurb->first;
+ nu= nurbs->first;
while(nu) {
if((nu->type & 7)==CU_BEZIER) {
a= nu->pntsu;
@@ -395,7 +392,7 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode)
while(ml) {
if(ml->flag & SELECT) {
tv->loc= &ml->x;
- VECCOPY(tv->oldloc, tv->loc);
+ copy_v3_v3(tv->oldloc, tv->loc);
tv->val= &(ml->rad);
tv->oldval= ml->rad;
tv->flag= 1;
@@ -408,16 +405,16 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode)
else if(obedit->type==OB_LATTICE) {
Lattice *lt= obedit->data;
- bp= lt->editlatt->def;
+ bp= lt->editlatt->latt->def;
- a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
+ a= lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw;
tv=transvmain= MEM_callocN(a*sizeof(TransVert), "maketransverts curve");
while(a--) {
if((mode & 1) || (bp->f1 & SELECT)) {
if(bp->hide==0) {
- VECCOPY(tv->oldloc, bp->vec);
+ copy_v3_v3(tv->oldloc, bp->vec);
tv->loc= bp->vec;
tv->flag= bp->f1 & SELECT;
tv++;
@@ -433,23 +430,16 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode)
total= 0.0;
for(a=0; a<tottrans; a++, tv++) {
if(tv->flag & SELECT) {
- centroid[0]+= tv->oldloc[0];
- centroid[1]+= tv->oldloc[1];
- centroid[2]+= tv->oldloc[2];
+ add_v3_v3(centroid, tv->oldloc);
total+= 1.0;
DO_MINMAX(tv->oldloc, min, max);
}
}
if(total!=0.0) {
- centroid[0]/= total;
- centroid[1]/= total;
- centroid[2]/= total;
+ mul_v3_fl(centroid, 1.0f/total);
}
- center[0]= (min[0]+max[0])/2.0;
- center[1]= (min[1]+max[1])/2.0;
- center[2]= (min[2]+max[2])/2.0;
-
+ mid_v3_v3v3(center, min, max);
}
/* *********************** operators ******************** */
@@ -457,6 +447,7 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode)
static int snap_sel_to_grid(bContext *C, wmOperator *op)
{
extern float originmat[3][3]; /* XXX object.c */
+ Main *bmain= CTX_data_main(C);
Object *obedit= CTX_data_edit_object(C);
Scene *scene= CTX_data_scene(C);
RegionView3D *rv3d= CTX_wm_region_data(C);
@@ -563,7 +554,7 @@ static int snap_sel_to_grid(bContext *C, wmOperator *op)
CTX_DATA_END;
}
- DAG_ids_flush_update(0);
+ DAG_ids_flush_update(bmain, 0);
WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
return OPERATOR_FINISHED;
@@ -589,6 +580,7 @@ void VIEW3D_OT_snap_selected_to_grid(wmOperatorType *ot)
static int snap_sel_to_curs(bContext *C, wmOperator *op)
{
extern float originmat[3][3]; /* XXX object.c */
+ Main *bmain= CTX_data_main(C);
Object *obedit= CTX_data_edit_object(C);
Scene *scene= CTX_data_scene(C);
View3D *v3d= CTX_wm_view3d(C);
@@ -687,7 +679,7 @@ static int snap_sel_to_curs(bContext *C, wmOperator *op)
CTX_DATA_END;
}
- DAG_ids_flush_update(0);
+ DAG_ids_flush_update(bmain, 0);
WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
return OPERATOR_FINISHED;
@@ -1075,7 +1067,7 @@ static int snap_selected_to_center(bContext *C, wmOperator *op)
CTX_DATA_END;
}
- DAG_ids_flush_update(0);
+ DAG_ids_flush_update(CTX_data_main(C), 0);
WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
return OPERATOR_FINISHED;
diff --git a/source/blender/editors/space_view3d/view3d_toolbar.c b/source/blender/editors/space_view3d/view3d_toolbar.c
index ac6d61fce18..e47a3af19f1 100644
--- a/source/blender/editors/space_view3d/view3d_toolbar.c
+++ b/source/blender/editors/space_view3d/view3d_toolbar.c
@@ -41,21 +41,11 @@
#include "BLI_editVert.h"
#include "BLI_rand.h"
-#include "BKE_action.h"
-#include "BKE_brush.h"
#include "BKE_context.h"
-#include "BKE_curve.h"
-#include "BKE_customdata.h"
-#include "BKE_depsgraph.h"
#include "BKE_idprop.h"
-#include "BKE_mesh.h"
-#include "BKE_object.h"
#include "BKE_global.h"
-#include "BKE_scene.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
-#include "BIF_gl.h"
#include "WM_api.h"
#include "WM_types.h"
diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c
index 31138b00f17..04a4167175c 100644
--- a/source/blender/editors/space_view3d/view3d_view.c
+++ b/source/blender/editors/space_view3d/view3d_view.c
@@ -35,6 +35,7 @@
#include "DNA_camera_types.h"
#include "DNA_lamp_types.h"
#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
#include "MEM_guardedalloc.h"
@@ -51,8 +52,6 @@
#include "BKE_main.h"
#include "BKE_report.h"
#include "BKE_scene.h"
-#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "BKE_depsgraph.h" /* for fly mode updating */
@@ -194,15 +193,15 @@ void smooth_view(bContext *C, Object *oldcamera, Object *camera, float *ofs, flo
/* initialize sms */
memset(&sms,0,sizeof(struct SmoothViewStore));
- VECCOPY(sms.new_ofs, rv3d->ofs);
- QUATCOPY(sms.new_quat, rv3d->viewquat);
+ copy_v3_v3(sms.new_ofs, rv3d->ofs);
+ copy_qt_qt(sms.new_quat, rv3d->viewquat);
sms.new_dist= rv3d->dist;
sms.new_lens= v3d->lens;
sms.to_camera= 0;
/* store the options we want to end with */
- if(ofs) VECCOPY(sms.new_ofs, ofs);
- if(quat) QUATCOPY(sms.new_quat, quat);
+ if(ofs) copy_v3_v3(sms.new_ofs, ofs);
+ if(quat) copy_qt_qt(sms.new_quat, quat);
if(dist) sms.new_dist= *dist;
if(lens) sms.new_lens= *lens;
@@ -219,46 +218,24 @@ void smooth_view(bContext *C, Object *oldcamera, Object *camera, float *ofs, flo
if (sms.new_lens != v3d->lens)
changed = 1;
- if ((sms.new_ofs[0]!=rv3d->ofs[0]) ||
- (sms.new_ofs[1]!=rv3d->ofs[1]) ||
- (sms.new_ofs[2]!=rv3d->ofs[2]) )
+ if (!equals_v3v3(sms.new_ofs, rv3d->ofs))
changed = 1;
-
- if ((sms.new_quat[0]!=rv3d->viewquat[0]) ||
- (sms.new_quat[1]!=rv3d->viewquat[1]) ||
- (sms.new_quat[2]!=rv3d->viewquat[2]) ||
- (sms.new_quat[3]!=rv3d->viewquat[3]) )
+
+ if (!equals_v4v4(sms.new_quat, rv3d->viewquat))
changed = 1;
/* The new view is different from the old one
* so animate the view */
if (changed) {
-
- sms.time_allowed= (double)U.smooth_viewtx / 1000.0;
-
- /* if this is view rotation only
- * we can decrease the time allowed by
- * the angle between quats
- * this means small rotations wont lag */
- if (quat && !ofs && !dist) {
- float vec1[3], vec2[3];
-
- VECCOPY(vec1, sms.new_quat);
- VECCOPY(vec2, sms.orig_quat);
- normalize_v3(vec1);
- normalize_v3(vec2);
- /* scale the time allowed by the rotation */
- sms.time_allowed *= angle_normalized_v3v3(vec1, vec2)/(M_PI/2);
- }
-
+
/* original values */
if (oldcamera) {
sms.orig_dist= rv3d->dist; // below function does weird stuff with it...
view3d_settings_from_ob(oldcamera, sms.orig_ofs, sms.orig_quat, &sms.orig_dist, &sms.orig_lens);
}
else {
- VECCOPY(sms.orig_ofs, rv3d->ofs);
- QUATCOPY(sms.orig_quat, rv3d->viewquat);
+ copy_v3_v3(sms.orig_ofs, rv3d->ofs);
+ copy_qt_qt(sms.orig_quat, rv3d->viewquat);
sms.orig_dist= rv3d->dist;
sms.orig_lens= v3d->lens;
}
@@ -269,6 +246,26 @@ void smooth_view(bContext *C, Object *oldcamera, Object *camera, float *ofs, flo
rv3d->view= 0;
}
+ sms.time_allowed= (double)U.smooth_viewtx / 1000.0;
+
+ /* if this is view rotation only
+ * we can decrease the time allowed by
+ * the angle between quats
+ * this means small rotations wont lag */
+ if (quat && !ofs && !dist) {
+ float vec1[3]={0,0,1}, vec2[3]= {0,0,1};
+ float q1[4], q2[4];
+
+ invert_qt_qt(q1, sms.new_quat);
+ invert_qt_qt(q2, sms.orig_quat);
+
+ mul_qt_v3(q1, vec1);
+ mul_qt_v3(q2, vec2);
+
+ /* scale the time allowed by the rotation */
+ sms.time_allowed *= angle_v3v3(vec1, vec2) / M_PI; /* 180deg == 1.0 */
+ }
+
/* ensure it shows correct */
if(sms.to_camera) rv3d->persp= RV3D_PERSP;
@@ -289,8 +286,8 @@ void smooth_view(bContext *C, Object *oldcamera, Object *camera, float *ofs, flo
/* if we get here nothing happens */
if(sms.to_camera==0) {
- VECCOPY(rv3d->ofs, sms.new_ofs);
- QUATCOPY(rv3d->viewquat, sms.new_quat);
+ copy_v3_v3(rv3d->ofs, sms.new_ofs);
+ copy_qt_qt(rv3d->viewquat, sms.new_quat);
rv3d->dist = sms.new_dist;
v3d->lens = sms.new_lens;
}
@@ -309,7 +306,10 @@ static int view3d_smoothview_invoke(bContext *C, wmOperator *op, wmEvent *event)
if(rv3d->smooth_timer==NULL || rv3d->smooth_timer!=event->customdata)
return OPERATOR_PASS_THROUGH;
- step = (rv3d->smooth_timer->duration)/sms->time_allowed;
+ if(sms->time_allowed != 0.0f)
+ step = (rv3d->smooth_timer->duration)/sms->time_allowed;
+ else
+ step = 1.0f;
/* end timer */
if(step >= 1.0f) {
@@ -317,14 +317,14 @@ static int view3d_smoothview_invoke(bContext *C, wmOperator *op, wmEvent *event)
/* if we went to camera, store the original */
if(sms->to_camera) {
rv3d->persp= RV3D_CAMOB;
- VECCOPY(rv3d->ofs, sms->orig_ofs);
- QUATCOPY(rv3d->viewquat, sms->orig_quat);
+ copy_v3_v3(rv3d->ofs, sms->orig_ofs);
+ copy_qt_qt(rv3d->viewquat, sms->orig_quat);
rv3d->dist = sms->orig_dist;
v3d->lens = sms->orig_lens;
}
else {
- VECCOPY(rv3d->ofs, sms->new_ofs);
- QUATCOPY(rv3d->viewquat, sms->new_quat);
+ copy_v3_v3(rv3d->ofs, sms->new_ofs);
+ copy_qt_qt(rv3d->viewquat, sms->new_quat);
rv3d->dist = sms->new_dist;
v3d->lens = sms->new_lens;
}
@@ -458,7 +458,7 @@ static int view3d_setobjectascamera_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void VIEW3D_OT_setobjectascamera(wmOperatorType *ot)
+void VIEW3D_OT_object_as_camera(wmOperatorType *ot)
{
/* identifiers */
@@ -571,9 +571,9 @@ void viewvector(RegionView3D *rv3d, float coord[3], float vec[3])
{
float p1[4], p2[4];
- VECCOPY(p1, coord);
+ copy_v3_v3(p1, coord);
p1[3] = 1.0f;
- VECCOPY(p2, p1);
+ copy_v3_v3(p2, p1);
p2[3] = 1.0f;
mul_m4_v4(rv3d->viewmat, p2);
@@ -584,16 +584,18 @@ void viewvector(RegionView3D *rv3d, float coord[3], float vec[3])
sub_v3_v3v3(vec, p1, p2);
}
else {
- VECCOPY(vec, rv3d->viewinv[2]);
+ copy_v3_v3(vec, rv3d->viewinv[2]);
}
normalize_v3(vec);
}
-void initgrabz(RegionView3D *rv3d, float x, float y, float z)
+int initgrabz(RegionView3D *rv3d, float x, float y, float z)
{
- if(rv3d==NULL) return;
+ int flip= FALSE;
+ if(rv3d==NULL) return flip;
rv3d->zfac= rv3d->persmat[0][3]*x+ rv3d->persmat[1][3]*y+ rv3d->persmat[2][3]*z+ rv3d->persmat[3][3];
-
+ if (rv3d->zfac < 0.0f)
+ flip= TRUE;
/* if x,y,z is exactly the viewport offset, zfac is 0 and we don't want that
* (accounting for near zero values)
* */
@@ -606,6 +608,8 @@ void initgrabz(RegionView3D *rv3d, float x, float y, float z)
// -- Aligorith, 2009Aug31
//if (rv3d->zfac < 0.0f) rv3d->zfac = 1.0f;
if (rv3d->zfac < 0.0f) rv3d->zfac= -rv3d->zfac;
+
+ return flip;
}
/* always call initgrabz */
@@ -687,6 +691,7 @@ void view3d_project_float(ARegion *ar, float *vec, float *adr, float mat[4][4])
VECCOPY(vec4, vec);
adr[0]= IS_CLIPPED;
+ copy_v3_v3(vec4, vec);
vec4[3]= 1.0;
mul_m4_v4(mat, vec4);
@@ -733,7 +738,7 @@ int boundbox_clip(RegionView3D *rv3d, float obmat[][4], BoundBox *bb)
mul_m4_m4m4(mat, obmat, rv3d->persmat);
for(a=0; a<8; a++) {
- VECCOPY(vec, bb->vec[a]);
+ copy_v3_v3(vec, bb->vec[a]);
vec[3]= 1.0;
mul_m4_v4(mat, vec);
max= vec[3];
@@ -766,7 +771,7 @@ void project_short(ARegion *ar, float *vec, short *adr) /* clips */
return;
}
- VECCOPY(vec4, vec);
+ copy_v3_v3(vec4, vec);
vec4[3]= 1.0;
mul_m4_v4(rv3d->persmat, vec4);
@@ -791,7 +796,7 @@ void project_int(ARegion *ar, float *vec, int *adr)
float fx, fy, vec4[4];
adr[0]= (int)2140000000.0f;
- VECCOPY(vec4, vec);
+ copy_v3_v3(vec4, vec);
vec4[3]= 1.0;
mul_m4_v4(rv3d->persmat, vec4);
@@ -815,7 +820,7 @@ void project_int_noclip(ARegion *ar, float *vec, int *adr)
RegionView3D *rv3d= ar->regiondata;
float fx, fy, vec4[4];
- VECCOPY(vec4, vec);
+ copy_v3_v3(vec4, vec);
vec4[3]= 1.0;
mul_m4_v4(rv3d->persmat, vec4);
@@ -840,7 +845,7 @@ void project_short_noclip(ARegion *ar, float *vec, short *adr)
float fx, fy, vec4[4];
adr[0]= IS_CLIPPED;
- VECCOPY(vec4, vec);
+ copy_v3_v3(vec4, vec);
vec4[3]= 1.0;
mul_m4_v4(rv3d->persmat, vec4);
@@ -866,7 +871,7 @@ void project_float(ARegion *ar, float *vec, float *adr)
float vec4[4];
adr[0]= IS_CLIPPED;
- VECCOPY(vec4, vec);
+ copy_v3_v3(vec4, vec);
vec4[3]= 1.0;
mul_m4_v4(rv3d->persmat, vec4);
@@ -882,7 +887,7 @@ void project_float_noclip(ARegion *ar, float *vec, float *adr)
RegionView3D *rv3d= ar->regiondata;
float vec4[4];
- VECCOPY(vec4, vec);
+ copy_v3_v3(vec4, vec);
vec4[3]= 1.0;
mul_m4_v4(rv3d->persmat, vec4);
@@ -1129,7 +1134,7 @@ static void obmat_to_viewmat(View3D *v3d, RegionView3D *rv3d, Object *ob, short
float orig_ofs[3];
float orig_dist= rv3d->dist;
float orig_lens= v3d->lens;
- VECCOPY(orig_ofs, rv3d->ofs);
+ copy_v3_v3(orig_ofs, rv3d->ofs);
/* Switch from camera view */
mat3_to_quat( new_quat,tmat);
@@ -1225,11 +1230,11 @@ void setviewmatrixview3d(Scene *scene, View3D *v3d, RegionView3D *rv3d)
Object *ob= v3d->ob_centre;
float vec[3];
- VECCOPY(vec, ob->obmat[3]);
+ copy_v3_v3(vec, ob->obmat[3]);
if(ob->type==OB_ARMATURE && v3d->ob_centre_bone[0]) {
bPoseChannel *pchan= get_pose_channel(ob->pose, v3d->ob_centre_bone);
if(pchan) {
- VECCOPY(vec, pchan->pose_mat[3]);
+ copy_v3_v3(vec, pchan->pose_mat[3]);
mul_m4_v3(ob->obmat, vec);
}
}
@@ -1366,7 +1371,7 @@ short view3d_opengl_select(ViewContext *vc, unsigned int *buffer, unsigned int b
/* ********************** local view operator ******************** */
-static unsigned int free_localbit(void)
+static unsigned int free_localbit(Main *bmain)
{
unsigned int lay;
ScrArea *sa;
@@ -1376,7 +1381,7 @@ static unsigned int free_localbit(void)
/* sometimes we loose a localview: when an area is closed */
/* check all areas: which localviews are in use? */
- for(sc= G.main->screen.first; sc; sc= sc->id.next) {
+ for(sc= bmain->screen.first; sc; sc= sc->id.next) {
for(sa= sc->areabase.first; sa; sa= sa->next) {
SpaceLink *sl= sa->spacedata.first;
for(; sl; sl= sl->next) {
@@ -1438,7 +1443,7 @@ int ED_view3d_scene_layer_set(int lay, const int *values, int *active)
return lay;
}
-static void initlocalview(Scene *scene, ScrArea *sa)
+static void initlocalview(Main *bmain, Scene *scene, ScrArea *sa)
{
View3D *v3d= sa->spacedata.first;
Base *base;
@@ -1450,7 +1455,7 @@ static void initlocalview(Scene *scene, ScrArea *sa)
INIT_MINMAX(min, max);
- locallay= free_localbit();
+ locallay= free_localbit(bmain);
if(locallay==0) {
printf("Sorry, no more than 8 localviews\n"); // XXX error
@@ -1563,8 +1568,8 @@ static void restore_localviewdata(ScrArea *sa, int free)
if(rv3d->localvd) {
rv3d->dist= rv3d->localvd->dist;
- VECCOPY(rv3d->ofs, rv3d->localvd->ofs);
- QUATCOPY(rv3d->viewquat, rv3d->localvd->viewquat);
+ copy_v3_v3(rv3d->ofs, rv3d->localvd->ofs);
+ copy_qt_qt(rv3d->viewquat, rv3d->localvd->viewquat);
rv3d->view= rv3d->localvd->view;
rv3d->persp= rv3d->localvd->persp;
rv3d->camzoom= rv3d->localvd->camzoom;
@@ -1614,7 +1619,7 @@ static int localview_exec(bContext *C, wmOperator *unused)
if(v3d->localvd)
endlocalview(CTX_data_scene(C), CTX_wm_area(C));
else
- initlocalview(CTX_data_scene(C), CTX_wm_area(C));
+ initlocalview(CTX_data_main(C), CTX_data_scene(C), CTX_wm_area(C));
ED_area_tag_redraw(CTX_wm_area(C));
@@ -1827,8 +1832,8 @@ static int game_engine_exec(bContext *C, wmOperator *op)
RestoreState(C);
//XXX restore_all_scene_cfra(scene_cfra_store);
- set_scene_bg(startscene);
- //XXX scene_update_for_newframe(G.scene, G.scene->lay);
+ set_scene_bg(CTX_data_main(C), startscene);
+ //XXX scene_update_for_newframe(bmain, scene, scene->lay);
ED_area_tag_redraw(CTX_wm_area(C));
@@ -2077,7 +2082,7 @@ static int initFlyInfo (bContext *C, FlyInfo *fly, wmOperator *op, wmEvent *even
/* perspective or ortho */
if (fly->rv3d->persp==RV3D_ORTHO)
fly->rv3d->persp= RV3D_PERSP; /*if ortho projection, make perspective */
- QUATCOPY(fly->rot_backup, fly->rv3d->viewquat);
+ copy_qt_qt(fly->rot_backup, fly->rv3d->viewquat);
copy_v3_v3(fly->ofs_backup, fly->rv3d->ofs);
fly->rv3d->dist= 0.0f;
@@ -2121,8 +2126,8 @@ static int flyEnd(bContext *C, FlyInfo *fly)
DAG_id_flush_update(&ob_back->id, OB_RECALC_OB);
} else {
/* Non Camera we need to reset the view back to the original location bacause the user canceled*/
- QUATCOPY(rv3d->viewquat, fly->rot_backup);
- VECCOPY(rv3d->ofs, fly->ofs_backup);
+ copy_qt_qt(rv3d->viewquat, fly->rot_backup);
+ copy_v3_v3(rv3d->ofs, fly->ofs_backup);
rv3d->persp= fly->persp_backup;
}
}
@@ -2242,7 +2247,7 @@ static void flyEvent(FlyInfo *fly, wmEvent *event)
/* impliment WASD keys */
case FLY_MODAL_DIR_FORWARD:
if (fly->speed < 0.0f) fly->speed= -fly->speed; /* flip speed rather then stopping, game like motion */
- else fly->speed += fly->grid; /* increse like mousewheel if were alredy moving in that difection*/
+ else fly->speed += fly->grid; /* increse like mousewheel if were already moving in that difection*/
fly->axis= 2;
break;
case FLY_MODAL_DIR_BACKWARD:
@@ -2610,7 +2615,7 @@ static int flyApply(bContext *C, FlyInfo *fly)
/*were not redrawing but we need to update the time else the view will jump */
fly->time_lastdraw= PIL_check_seconds_timer();
/* end drawing */
- VECCOPY(fly->dvec_prev, dvec);
+ copy_v3_v3(fly->dvec_prev, dvec);
}
/* moved to flyEnd() */
@@ -2723,7 +2728,7 @@ void view3d_align_axis_to_vector(View3D *v3d, RegionView3D *rv3d, int axisidx, f
float orig_dist= rv3d->dist;
float orig_lens= v3d->lens;
- VECCOPY(orig_ofs, rv3d->ofs);
+ copy_v3_v3(orig_ofs, rv3d->ofs);
rv3d->persp= RV3D_PERSP;
rv3d->dist= 0.0;
view3d_settings_from_ob(v3d->camera, rv3d->ofs, NULL, NULL, &v3d->lens);
diff --git a/source/blender/editors/transform/Makefile b/source/blender/editors/transform/Makefile
index 607038b413b..9d23b763cd6 100644
--- a/source/blender/editors/transform/Makefile
+++ b/source/blender/editors/transform/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index da4500907e6..8c08b71eacd 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -63,7 +63,6 @@
//#include "BIF_editsima.h"
//#include "BIF_editparticle.h"
-#include "BKE_action.h"
#include "BKE_nla.h"
//#include "BKE_bad_level_calls.h"/* popmenu and error */
#include "BKE_bmesh.h"
@@ -72,8 +71,6 @@
#include "BKE_global.h"
#include "BKE_particle.h"
#include "BKE_pointcache.h"
-#include "BKE_utildefines.h"
-#include "BKE_context.h"
#include "BKE_unit.h"
//#include "BSE_view.h"
@@ -1367,17 +1364,17 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
}
}
- /* XXX convert stupid flag to enum */
+ /* convert flag to enum */
switch(t->flag & (T_PROP_EDIT|T_PROP_CONNECTED))
{
case (T_PROP_EDIT|T_PROP_CONNECTED):
- proportional = 2;
+ proportional = PROP_EDIT_CONNECTED;
break;
case T_PROP_EDIT:
- proportional = 1;
+ proportional = PROP_EDIT_ON;
break;
default:
- proportional = 0;
+ proportional = PROP_EDIT_OFF;
}
// If modal, save settings back in scene if not set as operator argument
@@ -1385,14 +1382,17 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
/* save settings if not set in operator */
if (RNA_struct_find_property(op->ptr, "proportional") && !RNA_property_is_set(op->ptr, "proportional")) {
- ts->proportional = proportional;
+ if (t->obedit)
+ ts->proportional = proportional;
+ else
+ ts->proportional_objects = (proportional != PROP_EDIT_OFF);
}
if (RNA_struct_find_property(op->ptr, "proportional_size") && !RNA_property_is_set(op->ptr, "proportional_size")) {
ts->proportional_size = t->prop_size;
}
- if (RNA_struct_find_property(op->ptr, "proportional_editing_falloff") && !RNA_property_is_set(op->ptr, "proportional_editing_falloff")) {
+ if (RNA_struct_find_property(op->ptr, "proportional_edit_falloff") && !RNA_property_is_set(op->ptr, "proportional_edit_falloff")) {
ts->prop_mode = t->prop_mode;
}
@@ -1415,7 +1415,7 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
if (RNA_struct_find_property(op->ptr, "proportional"))
{
RNA_enum_set(op->ptr, "proportional", proportional);
- RNA_enum_set(op->ptr, "proportional_editing_falloff", t->prop_mode);
+ RNA_enum_set(op->ptr, "proportional_edit_falloff", t->prop_mode);
RNA_float_set(op->ptr, "proportional_size", t->prop_size);
}
@@ -1457,6 +1457,7 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
}
}
+/* note: caller needs to free 't' on a 0 return */
int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int mode)
{
int options = 0;
@@ -2171,21 +2172,19 @@ void initWarp(TransInfo *t)
/* we need min/max in view space */
for(i = 0; i < t->total; i++) {
float center[3];
- VECCOPY(center, t->data[i].center);
+ copy_v3_v3(center, t->data[i].center);
mul_m3_v3(t->data[i].mtx, center);
mul_m4_v3(t->viewmat, center);
sub_v3_v3(center, t->viewmat[3]);
if (i)
minmax_v3_v3v3(min, max, center);
else {
- VECCOPY(max, center);
- VECCOPY(min, center);
+ copy_v3_v3(max, center);
+ copy_v3_v3(min, center);
}
}
-
- t->center[0]= (min[0]+max[0])/2.0f;
- t->center[1]= (min[1]+max[1])/2.0f;
- t->center[2]= (min[2]+max[2])/2.0f;
+
+ mid_v3_v3v3(t->center, min, max);
if (max[0] == min[0]) max[0] += 0.1; /* not optimal, but flipping is better than invalid garbage (i.e. division by zero!) */
t->val= (max[0]-min[0])/2.0f; /* t->val is X dimension projected boundbox */
@@ -5124,10 +5123,11 @@ int doEdgeSlide(TransInfo *t, float perc)
//Non prop code
look = vertlist;
while(look) {
- float newlen;
+ float newlen, edgelen;
ev = look->link;
tempsv = BLI_ghash_lookup(vertgh,ev);
- newlen = (len / len_v3v3(editedge_getOtherVert(tempsv->up,ev)->co,editedge_getOtherVert(tempsv->down,ev)->co));
+ edgelen = len_v3v3(editedge_getOtherVert(tempsv->up,ev)->co,editedge_getOtherVert(tempsv->down,ev)->co);
+ newlen = (edgelen != 0.0f)? (len / edgelen): 0.0f;
if(newlen > 1.0) {newlen = 1.0;}
if(newlen < 0.0) {newlen = 0.0;}
if(flip == 0) {
diff --git a/source/blender/editors/transform/transform_constraints.c b/source/blender/editors/transform/transform_constraints.c
index 9169d0a87bb..5f097c5d12e 100644
--- a/source/blender/editors/transform/transform_constraints.c
+++ b/source/blender/editors/transform/transform_constraints.c
@@ -38,7 +38,6 @@
#include <io.h>
#endif
-#include "MEM_guardedalloc.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
@@ -50,7 +49,6 @@
#include "BIF_glutil.h"
#include "BKE_context.h"
-#include "BKE_global.h"
#include "BKE_utildefines.h"
#include "ED_image.h"
@@ -620,6 +618,8 @@ void drawConstraint(const struct bContext *C, TransInfo *t)
if (tc->mode & CON_SELECT) {
float vec[3];
char col2[3] = {255,255,255};
+ int depth_test_enabled;
+
convertViewVec(t, vec, (short)(t->mval[0] - t->con.imval[0]), (short)(t->mval[1] - t->con.imval[1]));
add_v3_v3(vec, tc->center);
@@ -629,15 +629,18 @@ void drawConstraint(const struct bContext *C, TransInfo *t)
glColor3ubv((GLubyte *)col2);
- glDisable(GL_DEPTH_TEST);
+ depth_test_enabled = glIsEnabled(GL_DEPTH_TEST);
+ if(depth_test_enabled)
+ glDisable(GL_DEPTH_TEST);
+
setlinestyle(1);
glBegin(GL_LINE_STRIP);
glVertex3fv(tc->center);
glVertex3fv(vec);
glEnd();
setlinestyle(0);
- // TRANSFORM_FIX_ME
- //if(G.vd->zbuf)
+
+ if(depth_test_enabled)
glEnable(GL_DEPTH_TEST);
}
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index 1e207bb5376..befcac13514 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -35,8 +35,6 @@
#include <string.h>
#include <math.h>
-#include "MEM_guardedalloc.h"
-
#include "DNA_anim_types.h"
#include "DNA_armature_types.h"
#include "DNA_lattice_types.h"
@@ -47,42 +45,31 @@
#include "DNA_sequence_types.h"
#include "DNA_view3d_types.h"
#include "DNA_constraint_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_meshdata_types.h"
+
+#include "MEM_guardedalloc.h"
-#include "BKE_anim.h"
#include "BKE_action.h"
#include "BKE_armature.h"
-#include "BKE_blender.h"
-#include "BKE_cloth.h"
#include "BKE_context.h"
#include "BKE_curve.h"
#include "BKE_constraint.h"
#include "BKE_depsgraph.h"
-#include "BKE_displist.h"
-#include "BKE_DerivedMesh.h"
-#include "BKE_effect.h"
-#include "BKE_font.h"
#include "BKE_fcurve.h"
#include "BKE_global.h"
-#include "BKE_lattice.h"
#include "BKE_key.h"
#include "BKE_main.h"
-#include "BKE_mball.h"
-#include "BKE_mesh.h"
#include "BKE_modifier.h"
#include "BKE_nla.h"
#include "BKE_object.h"
#include "BKE_particle.h"
#include "BKE_sequencer.h"
#include "BKE_pointcache.h"
-#include "BKE_softbody.h"
-#include "BKE_utildefines.h"
#include "BKE_bmesh.h"
-#include "BKE_context.h"
-#include "BKE_report.h"
#include "BKE_tessmesh.h"
#include "BKE_scene.h"
-#include "BIF_gl.h"
#include "ED_anim_api.h"
#include "ED_armature.h"
@@ -95,6 +82,7 @@
#include "ED_mesh.h"
#include "ED_types.h"
#include "ED_uvedit.h"
+#include "ED_curve.h" /* for ED_curve_editnurbs */
#include "UI_view2d.h"
@@ -667,7 +655,8 @@ static void bone_children_clear_transflag(int mode, short around, ListBase *lb)
}
}
-/* sets transform flags in the bones, returns total */
+/* sets transform flags in the bones
+ * returns total number of bones with BONE_TRANSFORM */
int count_set_pose_transflags(int *out_mode, short around, Object *ob)
{
bArmature *arm= ob->data;
@@ -1355,12 +1344,14 @@ static void createTransCurveVerts(bContext *C, TransInfo *t)
int count=0, countsel=0;
int propmode = t->flag & T_PROP_EDIT;
short hide_handles = (cu->drawflag & CU_HIDE_HANDLES);
-
+ ListBase *nurbs;
+
/* to be sure */
if(cu->editnurb==NULL) return;
/* count total of vertices, check identical as in 2nd loop for making transdata! */
- for(nu= cu->editnurb->first; nu; nu= nu->next) {
+ nurbs= ED_curve_editnurbs(cu);
+ for(nu= nurbs->first; nu; nu= nu->next) {
if(nu->type == CU_BEZIER) {
for(a=0, bezt= nu->bezt; a<nu->pntsu; a++, bezt++) {
if(bezt->hide==0) {
@@ -1396,7 +1387,7 @@ static void createTransCurveVerts(bContext *C, TransInfo *t)
invert_m3_m3(smtx, mtx);
td = t->data;
- for(nu= cu->editnurb->first; nu; nu= nu->next) {
+ for(nu= nurbs->first; nu; nu= nu->next) {
if(nu->type == CU_BEZIER) {
TransData *head, *tail;
head = tail = td;
@@ -1549,7 +1540,7 @@ static void createTransCurveVerts(bContext *C, TransInfo *t)
static void createTransLatticeVerts(bContext *C, TransInfo *t)
{
- Lattice *latt = ((Lattice*)t->obedit->data)->editlatt;
+ Lattice *latt = ((Lattice*)t->obedit->data)->editlatt->latt;
TransData *td = NULL;
BPoint *bp;
float mtx[3][3], smtx[3][3];
@@ -1780,14 +1771,17 @@ static int connectivity_edge(float mtx[][3], EditVert *v1, EditVert *v2)
float edge_len;
int done = 0;
+ /* note: hidden verts are not being checked for, this assumes
+ * flushing of hidden faces & edges is working right */
+
+ if (v1->f2 + v2->f2 == 4)
+ return 0;
+
sub_v3_v3v3(edge_vec, v1->co, v2->co);
mul_m3_v3(mtx, edge_vec);
edge_len = len_v3(edge_vec);
- if (v1->f2 + v2->f2 == 4)
- return 0;
-
if (v1->f2) {
if (v2->f2) {
if (v2->tmp.fp + edge_len + THRESHOLD < v1->tmp.fp) {
@@ -1853,7 +1847,7 @@ static void editmesh_set_connectivity_distance(EditMesh *em, float mtx[][3])
/* do internal edges for quads */
for(efa= em->faces.first; efa; efa= efa->next) {
- if (efa->v4) {
+ if (efa->v4 && efa->h==0) {
done |= connectivity_edge(mtx, efa->v1, efa->v3);
done |= connectivity_edge(mtx, efa->v2, efa->v4);
}
@@ -2383,7 +2377,7 @@ void flushTransNodes(TransInfo *t)
#define XXX_DURIAN_ANIM_TX_HACK
void flushTransSeq(TransInfo *t)
{
- ListBase *seqbasep= seq_give_editing(t->scene, FALSE)->seqbasep; /* Editing null check alredy done */
+ ListBase *seqbasep= seq_give_editing(t->scene, FALSE)->seqbasep; /* Editing null check already done */
int a, new_frame;
TransData *td= NULL;
TransData2D *td2d= NULL;
@@ -3133,7 +3127,7 @@ static TransData *ActionFCurveToTransData(TransData *td, TransData2D **td2dv, FC
for (i=0, bezt=fcu->bezt; i < fcu->totvert; i++, bezt++) {
/* only add selected keyframes (for now, proportional edit is not enabled) */
- if (BEZSELECTED(bezt)) {
+ if (bezt->f2 & SELECT) { /* note this MUST match count_fcurve_keys(), so can't use BEZSELECTED() macro */
/* only add if on the right 'side' of the current frame */
if (FrameOnMouseSide(side, bezt->vec[1][0], cfra)) {
TimeToTransData(td, bezt->vec[1], adt);
@@ -4477,7 +4471,11 @@ static void set_trans_object_base_flags(bContext *C, TransInfo *t)
/* if parent selected, deselect */
while(parsel) {
- if(parsel->flag & SELECT) break;
+ if(parsel->flag & SELECT) {
+ Base *parbase = object_in_scene(parsel, scene);
+ if TESTBASELIB_BGMODE(v3d, scene, parbase)
+ break;
+ }
parsel= parsel->parent;
}
@@ -4497,7 +4495,7 @@ static void set_trans_object_base_flags(bContext *C, TransInfo *t)
}
/* all recalc flags get flushed to all layers, so a layer flip later on works fine */
- DAG_scene_flush_update(t->scene, -1, 0);
+ DAG_scene_flush_update(G.main, t->scene, -1, 0);
/* and we store them temporal in base (only used for transform code) */
/* this because after doing updates, the object->recalc is cleared */
@@ -4575,7 +4573,7 @@ static int count_proportional_objects(TransInfo *t)
/* all recalc flags get flushed to all layers, so a layer flip later on works fine */
- DAG_scene_flush_update(t->scene, -1, 0);
+ DAG_scene_flush_update(G.main, t->scene, -1, 0);
/* and we store them temporal in base (only used for transform code) */
/* this because after doing updates, the object->recalc is cleared */
diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c
index 1783cc58bee..6d8ae1bb6d3 100644
--- a/source/blender/editors/transform/transform_generics.c
+++ b/source/blender/editors/transform/transform_generics.c
@@ -39,7 +39,11 @@
#include "DNA_lattice_types.h"
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
+#include "DNA_meshdata_types.h"
#include "DNA_view3d_types.h"
+#include "DNA_modifier_types.h"
#include "RNA_access.h"
@@ -54,23 +58,14 @@
#include "BKE_animsys.h"
#include "BKE_action.h"
-#include "BKE_anim.h"
#include "BKE_armature.h"
-#include "BKE_cloth.h"
#include "BKE_curve.h"
#include "BKE_depsgraph.h"
#include "BKE_displist.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
-#include "BKE_global.h"
-#include "BKE_group.h"
#include "BKE_lattice.h"
-#include "BKE_key.h"
#include "BKE_mesh.h"
-#include "BKE_modifier.h"
#include "BKE_nla.h"
-#include "BKE_object.h"
-#include "BKE_utildefines.h"
#include "BKE_context.h"
#include "BKE_tessmesh.h"
@@ -85,6 +80,7 @@
#include "ED_space_api.h"
#include "ED_uvedit.h"
#include "ED_view3d.h"
+#include "ED_curve.h" /* for ED_curve_editnurbs */
//#include "BDR_unwrapper.h"
@@ -635,38 +631,38 @@ void recalcData(TransInfo *t)
}
if (t->obedit) {
- if ELEM(t->obedit->type, OB_CURVE, OB_SURF) {
- Curve *cu= t->obedit->data;
- Nurb *nu= cu->editnurb->first;
+ if ELEM(t->obedit->type, OB_CURVE, OB_SURF) {
+ Curve *cu= t->obedit->data;
+ ListBase *nurbs= ED_curve_editnurbs(cu);
+ Nurb *nu= nurbs->first;
if(t->state != TRANS_CANCEL) {
clipMirrorModifier(t, t->obedit);
}
-
- DAG_id_flush_update(t->obedit->data, OB_RECALC_DATA); /* sets recalc flags */
-
- if (t->state == TRANS_CANCEL) {
- while(nu) {
- calchandlesNurb(nu); /* Cant do testhandlesNurb here, it messes up the h1 and h2 flags */
- nu= nu->next;
- }
- } else {
- /* Normal updating */
- while(nu) {
- test2DNurb(nu);
- calchandlesNurb(nu);
- nu= nu->next;
+#if 0 //XXX - possibly merged out? check if in trunk - joeedh
+ if (t->state == TRANS_CANCEL) {
+ while(nu) {
+ calchandlesNurb(nu); /* Cant do testhandlesNurb here, it messes up the h1 and h2 flags */
+ nu= nu->next;
+ }
+ } else {
+ /* Normal updating */
+ while(nu) {
+ test2DNurb(nu);
+ calchandlesNurb(nu);
+ nu= nu->next;
+ }
}
+#endif
+ } else if(t->obedit->type==OB_LATTICE) {
+ Lattice *la= t->obedit->data;
+ DAG_id_flush_update(t->obedit->data, OB_RECALC_DATA); /* sets recalc flags */
+
+ if(la->editlatt->latt->flag & LT_OUTSIDE) outside_lattice(la->editlatt->latt);
}
- }
- else if(t->obedit->type==OB_LATTICE) {
- Lattice *la= t->obedit->data;
- DAG_id_flush_update(t->obedit->data, OB_RECALC_DATA); /* sets recalc flags */
-
- if(la->editlatt->flag & LT_OUTSIDE) outside_lattice(la->editlatt);
- }
- else if (t->obedit->type == OB_MESH) {
+ else if (t->obedit->type == OB_MESH) {
BMEditMesh *em = ((Mesh*)t->obedit->data)->edit_btmesh;
+
/* mirror modifier clipping? */
if(t->state != TRANS_CANCEL) {
clipMirrorModifier(t, t->obedit);
@@ -759,6 +755,7 @@ void recalcData(TransInfo *t)
}
else
DAG_id_flush_update(t->obedit->data, OB_RECALC_DATA); /* sets recalc flags */
+
}
else if( (t->flag & T_POSE) && t->poseobj) {
Object *ob= t->poseobj;
@@ -1032,13 +1029,14 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event)
{
if (RNA_property_is_set(op->ptr, "proportional"))
{
- switch(RNA_enum_get(op->ptr, "proportional"))
- {
- case 2: /* XXX connected constant */
- t->flag |= T_PROP_CONNECTED;
- case 1: /* XXX prop on constant */
- t->flag |= T_PROP_EDIT;
- break;
+ switch(RNA_enum_get(op->ptr, "proportional"))
+ {
+ case PROP_EDIT_CONNECTED:
+ t->flag |= T_PROP_CONNECTED;
+ case PROP_EDIT_ON:
+ t->flag |= T_PROP_EDIT;
+ break;
+ }
}
}
else
@@ -1046,45 +1044,22 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event)
/* use settings from scene only if modal */
if (t->flag & T_MODAL)
{
- if ((t->options & CTX_NO_PET) == 0 && (ts->proportional != PROP_EDIT_OFF)) {
- t->flag |= T_PROP_EDIT;
+ if ((t->options & CTX_NO_PET) == 0)
+ {
+ if (t->obedit && ts->proportional != PROP_EDIT_OFF)
+ {
+ t->flag |= T_PROP_EDIT;
- if(ts->proportional == PROP_EDIT_CONNECTED)
- t->flag |= T_PROP_CONNECTED;
+ if(ts->proportional == PROP_EDIT_CONNECTED)
+ t->flag |= T_PROP_CONNECTED;
+ }
+ else if (t->obedit == NULL && ts->proportional_objects)
+ {
+ t->flag |= T_PROP_EDIT;
+ }
}
}
}
-
- if (op && RNA_struct_find_property(op->ptr, "proportional_size") && RNA_property_is_set(op->ptr, "proportional_size"))
- {
- t->prop_size = RNA_float_get(op->ptr, "proportional_size");
- }
- else
- {
- t->prop_size = ts->proportional_size;
- }
-
-
- /* TRANSFORM_FIX_ME rna restrictions */
- if (t->prop_size <= 0)
- {
- t->prop_size = 1.0f;
- }
-
- if (op && RNA_struct_find_property(op->ptr, "proportional_editing_falloff") && RNA_property_is_set(op->ptr, "proportional_editing_falloff"))
- {
- t->prop_mode = RNA_enum_get(op->ptr, "proportional_editing_falloff");
- }
- else
- {
- t->prop_mode = ts->prop_mode;
- }
- }
- else /* add not pet option to context when not available */
- {
- t->options |= CTX_NO_PET;
- }
-
setTransformViewMatrices(t);
initNumInput(&t->num);
diff --git a/source/blender/editors/transform/transform_input.c b/source/blender/editors/transform/transform_input.c
index d7ebd28f604..54a86b3dca1 100644
--- a/source/blender/editors/transform/transform_input.c
+++ b/source/blender/editors/transform/transform_input.c
@@ -197,17 +197,17 @@ void InputCustomRatio(TransInfo *t, MouseInput *mi, short mval[2], float output[
mdx = (mi->precision_mval[0] + (float)(mval[0] - mi->precision_mval[0]) / 10.0f) - data[2];
mdy = (mi->precision_mval[1] + (float)(mval[1] - mi->precision_mval[1]) / 10.0f) - data[3];
- distance = (mdx*dx + mdy*dy) / length;
+ distance = (length != 0.0f)? (mdx*dx + mdy*dy) / length: 0.0f;
}
else {
short mdx, mdy;
mdx = mval[0] - data[2];
mdy = mval[1] - data[3];
- distance = (mdx*dx + mdy*dy) / length;
+ distance = (length != 0.0f)? (mdx*dx + mdy*dy) / length: 0.0f;
}
- output[0] = distance / length;
+ output[0] = (length != 0.0f)? distance / length: 0.0f;
}
}
@@ -237,7 +237,7 @@ void InputAngle(TransInfo *t, MouseInput *mi, short mval[2], float output[3])
if( (dx1*dy2-dx2*dy1)>0.0 ) dphi= -dphi;
/* If the angle is zero, because of lack of precision close to the 1.0 value in acos
- * approximate the angle with the oposite side of the normalized triangle
+ * approximate the angle with the opposite side of the normalized triangle
* This is a good approximation here since the smallest acos value seems to be around
* 0.02 degree and lower values don't even have a 0.01% error compared to the approximation
* */
diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c
index fe63ec0e15b..1bf3bab2616 100644
--- a/source/blender/editors/transform/transform_manipulator.c
+++ b/source/blender/editors/transform/transform_manipulator.c
@@ -51,15 +51,11 @@
#include "RNA_access.h"
#include "BKE_action.h"
-#include "BKE_armature.h"
#include "BKE_context.h"
#include "BKE_global.h"
-#include "BKE_lattice.h"
#include "BKE_mesh.h"
-#include "BKE_object.h"
#include "BKE_particle.h"
#include "BKE_pointcache.h"
-#include "BKE_utildefines.h"
#include "BKE_tessmesh.h"
#include "BLI_math.h"
@@ -74,6 +70,7 @@
#include "ED_mesh.h"
#include "ED_particle.h"
#include "ED_view3d.h"
+#include "ED_curve.h" /* for ED_curve_editnurbs */
#include "UI_resources.h"
@@ -294,7 +291,7 @@ int calc_manipulator_stats(const bContext *C)
bArmature *arm= obedit->data;
EditBone *ebo;
for (ebo= arm->edbo->first; ebo; ebo=ebo->next){
- if(ebo->layer & arm->layer) {
+ if(ebo->layer & arm->layer && !(ebo->flag & BONE_HIDDEN_A)) {
if (ebo->flag & BONE_TIPSEL) {
calc_tw_center(scene, ebo->tail);
totsel++;
@@ -314,8 +311,9 @@ int calc_manipulator_stats(const bContext *C)
Nurb *nu;
BezTriple *bezt;
BPoint *bp;
+ ListBase *nurbs= ED_curve_editnurbs(cu);
- nu= cu->editnurb->first;
+ nu= nurbs->first;
while(nu) {
if(nu->type == CU_BEZIER) {
bezt= nu->bezt;
@@ -384,9 +382,9 @@ int calc_manipulator_stats(const bContext *C)
BPoint *bp;
Lattice *lt= obedit->data;
- bp= lt->editlatt->def;
+ bp= lt->editlatt->latt->def;
- a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
+ a= lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw;
while(a--) {
if(bp->f1 & SELECT) {
calc_tw_center(scene, bp->vec);
diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c
index 29bcd4e8592..4cecc41ae5f 100644
--- a/source/blender/editors/transform/transform_ops.c
+++ b/source/blender/editors/transform/transform_ops.c
@@ -32,7 +32,6 @@
#include "BLI_math.h"
-#include "BKE_utildefines.h"
#include "BKE_context.h"
#include "BKE_global.h"
@@ -281,7 +280,7 @@ static int transformops_data(bContext *C, wmOperator *op, wmEvent *event)
int retval = 1;
if (op->customdata == NULL)
{
- TransInfo *t = MEM_callocN(sizeof(TransInfo), "TransInfo data");
+ TransInfo *t = MEM_callocN(sizeof(TransInfo), "TransInfo data2");
TransformModeItem *tmode;
int mode = -1;
@@ -303,7 +302,12 @@ static int transformops_data(bContext *C, wmOperator *op, wmEvent *event)
G.moving = 1;
/* store data */
- op->customdata = t;
+ if(retval) {
+ op->customdata = t;
+ }
+ else {
+ MEM_freeN(t);
+ }
}
return retval; /* return 0 on error */
@@ -417,7 +421,7 @@ void Transform_Properties(struct wmOperatorType *ot, int flags)
if (flags & P_PROPORTIONAL)
{
RNA_def_enum(ot->srna, "proportional", proportional_editing_items, 0, "Proportional Editing", "");
- RNA_def_enum(ot->srna, "proportional_editing_falloff", proportional_falloff_items, 0, "Proportional Editing Falloff", "Falloff type for proportional editing mode.");
+ RNA_def_enum(ot->srna, "proportional_edit_falloff", proportional_falloff_items, 0, "Proportional Editing Falloff", "Falloff type for proportional editing mode.");
RNA_def_float(ot->srna, "proportional_size", 1, 0, FLT_MAX, "Proportional Size", "", 0, 100);
}
diff --git a/source/blender/editors/transform/transform_orientations.c b/source/blender/editors/transform/transform_orientations.c
index 273c0896728..2715f497cc1 100644
--- a/source/blender/editors/transform/transform_orientations.c
+++ b/source/blender/editors/transform/transform_orientations.c
@@ -34,7 +34,6 @@
#include "DNA_screen_types.h"
#include "DNA_view3d_types.h"
-#include "BKE_global.h"
#include "BKE_utildefines.h"
#include "BKE_armature.h"
#include "BKE_context.h"
@@ -52,6 +51,7 @@
#include "ED_armature.h"
#include "ED_mesh.h"
+#include "ED_curve.h" /* for ED_curve_editnurbs */
#include "RNA_define.h"
@@ -744,8 +744,9 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3],
Nurb *nu;
BezTriple *bezt;
int a;
-
- for (nu = cu->editnurb->first; nu; nu = nu->next)
+ ListBase *nurbs= ED_curve_editnurbs(cu);
+
+ for (nu = nurbs->first; nu; nu = nu->next)
{
/* only bezier has a normal */
if(nu->type == CU_BEZIER)
diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c
index a5a02261ffc..3dbd83bfa52 100644
--- a/source/blender/editors/transform/transform_snap.c
+++ b/source/blender/editors/transform/transform_snap.c
@@ -36,6 +36,7 @@
#include "DNA_armature_types.h"
#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
#include "DNA_meshdata_types.h" // Temporary, for snapping to other unselected meshes
#include "DNA_space_types.h"
#include "DNA_screen_types.h"
@@ -53,15 +54,12 @@
//#include "editmesh.h"
//#include "BIF_editsima.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
//#include "BIF_mywindow.h"
//#include "BIF_screen.h"
//#include "BIF_editsima.h"
//#include "BIF_drawimage.h"
//#include "BIF_editmesh.h"
-#include "BKE_global.h"
-#include "BKE_utildefines.h"
#include "BKE_DerivedMesh.h"
#include "BKE_object.h"
#include "BKE_anim.h" /* for duplis */
@@ -444,9 +442,9 @@ void initSnapping(TransInfo *t, wmOperator *op)
normalize_v3(t->tsnap.snapNormal);
}
- if (RNA_struct_find_property(op->ptr, "snap_project"))
+ if (RNA_struct_find_property(op->ptr, "use_snap_project"))
{
- t->tsnap.project = RNA_boolean_get(op->ptr, "snap_project");
+ t->tsnap.project = RNA_boolean_get(op->ptr, "use_snap_project");
}
}
}
diff --git a/source/blender/editors/util/Makefile b/source/blender/editors/util/Makefile
index 303079daeee..8535b3fb402 100644
--- a/source/blender/editors/util/Makefile
+++ b/source/blender/editors/util/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/util/ed_util.c b/source/blender/editors/util/ed_util.c
index 2796e708932..8e2a30b4a69 100644
--- a/source/blender/editors/util/ed_util.c
+++ b/source/blender/editors/util/ed_util.c
@@ -38,7 +38,6 @@
#include "BLI_editVert.h"
#include "BKE_context.h"
-#include "BKE_global.h"
#include "BKE_main.h"
#include "ED_armature.h"
@@ -77,13 +76,17 @@ void ED_editors_init(bContext *C)
/* frees all editmode stuff */
void ED_editors_exit(bContext *C)
{
+ Main *bmain= CTX_data_main(C);
Scene *sce;
+
+ if(!bmain)
+ return;
/* frees all editmode undos */
undo_editmode_clear();
ED_undo_paint_free();
- for(sce=G.main->scene.first; sce; sce= sce->id.next) {
+ for(sce=bmain->scene.first; sce; sce= sce->id.next) {
if(sce->obedit) {
Object *ob= sce->obedit;
diff --git a/source/blender/editors/util/editmode_undo.c b/source/blender/editors/util/editmode_undo.c
index 949bf30c4fd..564439a7bb3 100644
--- a/source/blender/editors/util/editmode_undo.c
+++ b/source/blender/editors/util/editmode_undo.c
@@ -40,12 +40,10 @@
#include "BKE_context.h"
#include "BKE_depsgraph.h"
#include "BKE_global.h"
-#include "BKE_object.h"
#include "BLI_blenlib.h"
#include "BLI_dynstr.h"
-#include "BKE_utildefines.h"
#include "ED_mesh.h"
diff --git a/source/blender/editors/util/numinput.c b/source/blender/editors/util/numinput.c
index a5c0bfeb73a..868aa8ac6af 100644
--- a/source/blender/editors/util/numinput.c
+++ b/source/blender/editors/util/numinput.c
@@ -30,8 +30,6 @@
#include <math.h> /* fabs */
#include <stdio.h> /* for sprintf */
-#include "BKE_global.h" /* for G */
-#include "BKE_utildefines.h" /* ABS */
#include "WM_types.h"
diff --git a/source/blender/editors/util/undo.c b/source/blender/editors/util/undo.c
index 636ce9dcec5..283e2b49f0d 100644
--- a/source/blender/editors/util/undo.c
+++ b/source/blender/editors/util/undo.c
@@ -38,16 +38,11 @@
#include "BKE_blender.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
-#include "BKE_global.h"
-#include "BKE_object.h"
-#include "BKE_text.h"
#include "BLI_blenlib.h"
#include "BLI_editVert.h"
#include "BLI_dynstr.h"
-#include "BKE_utildefines.h"
#include "ED_armature.h"
#include "ED_particle.h"
@@ -116,7 +111,9 @@ static int ed_undo_step(bContext *C, int step, const char *undoname)
SpaceImage *sima= (SpaceImage *)sa->spacedata.first;
if((obact && obact->mode & OB_MODE_TEXTURE_PAINT) || sima->flag & SI_DRAWTOOL) {
- ED_undo_paint_step(C, UNDO_PAINT_IMAGE, step);
+ if(!ED_undo_paint_step(C, UNDO_PAINT_IMAGE, step, undoname) && undoname)
+ if(U.uiflag & USER_GLOBALUNDO)
+ BKE_undo_name(C, undoname);
WM_event_add_notifier(C, NC_WINDOW, NULL);
return OPERATOR_FINISHED;
@@ -139,10 +136,14 @@ static int ed_undo_step(bContext *C, int step, const char *undoname)
else {
int do_glob_undo= 0;
- if(obact && obact->mode & OB_MODE_TEXTURE_PAINT)
- ED_undo_paint_step(C, UNDO_PAINT_IMAGE, step);
- else if(obact && obact->mode & OB_MODE_SCULPT)
- ED_undo_paint_step(C, UNDO_PAINT_MESH, step);
+ if(obact && obact->mode & OB_MODE_TEXTURE_PAINT) {
+ if(!ED_undo_paint_step(C, UNDO_PAINT_IMAGE, step, undoname) && undoname)
+ do_glob_undo= 1;
+ }
+ else if(obact && obact->mode & OB_MODE_SCULPT) {
+ if(!ED_undo_paint_step(C, UNDO_PAINT_MESH, step, undoname) && undoname)
+ do_glob_undo= 1;
+ }
else if(obact && obact->mode & OB_MODE_PARTICLE_EDIT) {
if(step==1)
PE_undo(CTX_data_scene(C));
diff --git a/source/blender/editors/uvedit/Makefile b/source/blender/editors/uvedit/Makefile
index d589bbec3bc..e4b9ae72ccb 100644
--- a/source/blender/editors/uvedit/Makefile
+++ b/source/blender/editors/uvedit/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/uvedit/uvedit_draw.c b/source/blender/editors/uvedit/uvedit_draw.c
index 7c6c37872f7..6e10fe526da 100644
--- a/source/blender/editors/uvedit/uvedit_draw.c
+++ b/source/blender/editors/uvedit/uvedit_draw.c
@@ -39,10 +39,8 @@
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
-#include "BKE_customdata.h"
#include "BKE_DerivedMesh.h"
#include "BKE_mesh.h"
-#include "BKE_object.h"
#include "BKE_utildefines.h"
#include "BKE_tessmesh.h"
diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c
index 92ddc097041..946428d9baf 100644
--- a/source/blender/editors/uvedit/uvedit_ops.c
+++ b/source/blender/editors/uvedit/uvedit_ops.c
@@ -52,7 +52,6 @@
#include "BKE_library.h"
#include "BKE_mesh.h"
#include "BKE_report.h"
-#include "BKE_utildefines.h"
#include "BKE_tessmesh.h"
#include "ED_image.h"
@@ -3284,7 +3283,7 @@ void ED_keymap_uvedit(wmKeyConfig *keyconf)
/* menus */
WM_keymap_add_menu(keymap, "IMAGE_MT_uvs_snap", SKEY, KM_PRESS, KM_SHIFT, 0);
- ED_object_generic_keymap(keyconf, keymap, 1);
+ ED_object_generic_keymap(keyconf, keymap, 2);
transform_keymap_for_space(keyconf, keymap, SPACE_IMAGE);
}
diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
index d0fee1b3620..9b11615130f 100644
--- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c
+++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
@@ -41,10 +41,8 @@
#include "BKE_context.h"
#include "BKE_customdata.h"
#include "BKE_depsgraph.h"
-#include "BKE_global.h"
#include "BKE_image.h"
#include "BKE_mesh.h"
-#include "BKE_utildefines.h"
#include "BKE_tessmesh.h"
#include "BLI_math.h"
diff --git a/source/blender/gpu/GPU_material.h b/source/blender/gpu/GPU_material.h
index 7f6e9d02a80..02a2c3c7bf4 100644
--- a/source/blender/gpu/GPU_material.h
+++ b/source/blender/gpu/GPU_material.h
@@ -158,7 +158,7 @@ int GPU_lamp_has_shadow_buffer(GPULamp *lamp);
void GPU_lamp_shadow_buffer_bind(GPULamp *lamp, float viewmat[][4], int *winsize, float winmat[][4]);
void GPU_lamp_shadow_buffer_unbind(GPULamp *lamp);
-void GPU_lamp_update(GPULamp *lamp, int lay, float obmat[][4]);
+void GPU_lamp_update(GPULamp *lamp, int lay, int hide, float obmat[][4]);
void GPU_lamp_update_colors(GPULamp *lamp, float r, float g, float b, float power);
int GPU_lamp_shadow_layer(GPULamp *lamp);
diff --git a/source/blender/gpu/Makefile b/source/blender/gpu/Makefile
index b9bde147115..eaa8a69bfdd 100644
--- a/source/blender/gpu/Makefile
+++ b/source/blender/gpu/Makefile
@@ -18,7 +18,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/gpu/intern/Makefile b/source/blender/gpu/intern/Makefile
index 2637bff44ac..088b56edbab 100644
--- a/source/blender/gpu/intern/Makefile
+++ b/source/blender/gpu/intern/Makefile
@@ -18,7 +18,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c
index 00df7b57119..46b520be61e 100644
--- a/source/blender/gpu/intern/gpu_buffers.c
+++ b/source/blender/gpu/intern/gpu_buffers.c
@@ -45,7 +45,6 @@
#include "DNA_meshdata_types.h"
#include "BKE_DerivedMesh.h"
-#include "BKE_utildefines.h"
#include "DNA_userdef_types.h"
diff --git a/source/blender/gpu/intern/gpu_codegen.c b/source/blender/gpu/intern/gpu_codegen.c
index a6250650787..d596f573682 100644
--- a/source/blender/gpu/intern/gpu_codegen.c
+++ b/source/blender/gpu/intern/gpu_codegen.c
@@ -36,7 +36,6 @@
#include "DNA_customdata_types.h"
#include "DNA_image_types.h"
-#include "DNA_listBase.h"
#include "DNA_material_types.h"
#include "BLI_dynstr.h"
@@ -44,8 +43,6 @@
#include "BLI_ghash.h"
#include "BLI_heap.h"
-#include "BKE_global.h"
-#include "BKE_utildefines.h"
#include "GPU_material.h"
#include "GPU_extensions.h"
diff --git a/source/blender/gpu/intern/gpu_draw.c b/source/blender/gpu/intern/gpu_draw.c
index 33c4361a01e..3bf1880cf69 100644
--- a/source/blender/gpu/intern/gpu_draw.c
+++ b/source/blender/gpu/intern/gpu_draw.c
@@ -36,7 +36,6 @@
#include "BLI_math.h"
-#include "DNA_image_types.h"
#include "DNA_lamp_types.h"
#include "DNA_material_types.h"
#include "DNA_meshdata_types.h"
@@ -45,7 +44,6 @@
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_smoke_types.h"
-#include "DNA_userdef_types.h"
#include "DNA_view3d_types.h"
#include "MEM_guardedalloc.h"
diff --git a/source/blender/gpu/intern/gpu_extensions.c b/source/blender/gpu/intern/gpu_extensions.c
index a96920aa839..fa8ff7a6354 100644
--- a/source/blender/gpu/intern/gpu_extensions.c
+++ b/source/blender/gpu/intern/gpu_extensions.c
@@ -32,18 +32,13 @@
#include "GL/glew.h"
-#include "DNA_listBase.h"
#include "DNA_image_types.h"
-#include "DNA_userdef_types.h"
#include "MEM_guardedalloc.h"
-#include "BKE_image.h"
#include "BKE_global.h"
#include "BKE_utildefines.h"
-#include "IMB_imbuf.h"
-#include "IMB_imbuf_types.h"
#include "BLI_blenlib.h"
diff --git a/source/blender/gpu/intern/gpu_material.c b/source/blender/gpu/intern/gpu_material.c
index 44ff8d12dff..a86852d6c19 100644
--- a/source/blender/gpu/intern/gpu_material.c
+++ b/source/blender/gpu/intern/gpu_material.c
@@ -34,14 +34,10 @@
#include "MEM_guardedalloc.h"
-#include "DNA_image_types.h"
#include "DNA_lamp_types.h"
-#include "DNA_listBase.h"
#include "DNA_material_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
-#include "DNA_texture_types.h"
-#include "DNA_view3d_types.h"
#include "DNA_world_types.h"
#include "BKE_anim.h"
@@ -103,7 +99,7 @@ struct GPULamp {
Object *par;
Lamp *la;
- int type, mode, lay;
+ int type, mode, lay, hide;
float dynpower, dyncol[3];
float power, col[3];
@@ -256,7 +252,7 @@ void GPU_material_bind(GPUMaterial *material, int oblay, int viewlay, double tim
for(nlink=material->lamps.first; nlink; nlink=nlink->next) {
lamp= nlink->data;
- if((lamp->lay & viewlay) && (!(lamp->mode & LA_LAYER) || (lamp->lay & oblay))) {
+ if(!lamp->hide && (lamp->lay & viewlay) && (!(lamp->mode & LA_LAYER) || (lamp->lay & oblay))) {
lamp->dynpower = lamp->power;
VECCOPY(lamp->dyncol, lamp->col);
}
@@ -995,6 +991,10 @@ static void do_material_tex(GPUShadeInput *shi)
else
GPU_link(mat, "set_value_one", &tin);
}
+
+ if(tex->type==TEX_IMAGE)
+ if(mat->scene->r.color_mgt_flag & R_COLOR_MANAGEMENT)
+ GPU_link(mat, "srgb_to_linearrgb", tcol, &tcol);
if(mtex->mapto & MAP_COL) {
GPUNodeLink *colfac;
@@ -1221,6 +1221,9 @@ void GPU_shaderesult_set(GPUShadeInput *shi, GPUShadeResult *shr)
mat->obcolalpha = 1;
GPU_link(mat, "shade_alpha_obcolor", shr->combined, GPU_builtin(GPU_OBCOLOR), &shr->combined);
}
+
+ if(mat->scene->r.color_mgt_flag & R_COLOR_MANAGEMENT)
+ GPU_link(mat, "linearrgb_to_srgb", shr->combined, &shr->combined);
}
GPUNodeLink *GPU_blender_material(GPUMaterial *mat, Material *ma)
@@ -1287,11 +1290,12 @@ void GPU_materials_free()
/* Lamps and shadow buffers */
-void GPU_lamp_update(GPULamp *lamp, int lay, float obmat[][4])
+void GPU_lamp_update(GPULamp *lamp, int lay, int hide, float obmat[][4])
{
float mat[4][4];
lamp->lay = lay;
+ lamp->hide = hide;
copy_m4_m4(mat, obmat);
normalize_m4(mat);
@@ -1332,7 +1336,7 @@ static void gpu_lamp_from_blender(Scene *scene, Object *ob, Object *par, Lamp *l
lamp->col[1]= la->g*lamp->power;
lamp->col[2]= la->b*lamp->power;
- GPU_lamp_update(lamp, ob->lay, ob->obmat);
+ GPU_lamp_update(lamp, ob->lay, (ob->restrictflag & OB_RESTRICT_RENDER), ob->obmat);
lamp->spotsi= la->spotsize;
if(lamp->mode & LA_HALO)
diff --git a/source/blender/gpu/intern/gpu_shader_material.glsl b/source/blender/gpu/intern/gpu_shader_material.glsl
index a0c37dc5484..2d6df8675e4 100644
--- a/source/blender/gpu/intern/gpu_shader_material.glsl
+++ b/source/blender/gpu/intern/gpu_shader_material.glsl
@@ -75,6 +75,38 @@ void hsv_to_rgb(vec4 hsv, out vec4 outcol)
outcol = vec4(rgb, hsv.w);
}
+float srgb_to_linearrgb(float c)
+{
+ if(c < 0.04045)
+ return (c < 0.0)? 0.0: c * (1.0/12.92);
+ else
+ return pow((c + 0.055)*(1.0/1.055), 2.4);
+}
+
+float linearrgb_to_srgb(float c)
+{
+ if(c < 0.0031308)
+ return (c < 0.0)? 0.0: c * 12.92;
+ else
+ return 1.055 * pow(c, 1.0/2.4) - 0.055;
+}
+
+void srgb_to_linearrgb(vec4 col_from, out vec4 col_to)
+{
+ col_to.r = srgb_to_linearrgb(col_from.r);
+ col_to.g = srgb_to_linearrgb(col_from.g);
+ col_to.b = srgb_to_linearrgb(col_from.b);
+ col_to.a = col_from.a;
+}
+
+void linearrgb_to_srgb(vec4 col_from, out vec4 col_to)
+{
+ col_to.r = linearrgb_to_srgb(col_from.r);
+ col_to.g = linearrgb_to_srgb(col_from.g);
+ col_to.b = linearrgb_to_srgb(col_from.b);
+ col_to.a = col_from.a;
+}
+
#define M_PI 3.14159265358979323846
/*********** SHADER NODES ***************/
diff --git a/source/blender/gpu/intern/gpu_shader_material.glsl.c b/source/blender/gpu/intern/gpu_shader_material.glsl.c
index b407ddad2ee..e11c2700855 100644
--- a/source/blender/gpu/intern/gpu_shader_material.glsl.c
+++ b/source/blender/gpu/intern/gpu_shader_material.glsl.c
@@ -1,105 +1,215 @@
/* DataToC output of file <gpu_shader_material_glsl> */
-int datatoc_gpu_shader_material_glsl_size= 33401;
+int datatoc_gpu_shader_material_glsl_size= 34245;
char datatoc_gpu_shader_material_glsl[]= {
- 10,102,108,111, 97,116, 32,101,120,112, 95, 98,108,101,110,100,101,114, 40,102,108,111, 97,116, 32,
-102, 41, 10,123, 10, 9,114,101,116,117,114,110, 32,112,111,119, 40, 50, 46, 55, 49, 56, 50, 56, 49, 56, 50, 56, 52, 54, 44, 32,
-102, 41, 59, 10,125, 10, 10,118,111,105,100, 32,114,103, 98, 95,116,111, 95,104,115,118, 40,118,101, 99, 52, 32,114,103, 98, 44,
- 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32, 99,109, 97,120, 44,
- 32, 99,109,105,110, 44, 32,104, 44, 32,115, 44, 32,118, 44, 32, 99,100,101,108,116, 97, 59, 10, 9,118,101, 99, 51, 32, 99, 59,
- 10, 10, 9, 99,109, 97,120, 32, 61, 32,109, 97,120, 40,114,103, 98, 91, 48, 93, 44, 32,109, 97,120, 40,114,103, 98, 91, 49, 93,
- 44, 32,114,103, 98, 91, 50, 93, 41, 41, 59, 10, 9, 99,109,105,110, 32, 61, 32,109,105,110, 40,114,103, 98, 91, 48, 93, 44, 32,
-109,105,110, 40,114,103, 98, 91, 49, 93, 44, 32,114,103, 98, 91, 50, 93, 41, 41, 59, 10, 9, 99,100,101,108,116, 97, 32, 61, 32,
- 99,109, 97,120, 45, 99,109,105,110, 59, 10, 10, 9,118, 32, 61, 32, 99,109, 97,120, 59, 10, 9,105,102, 32, 40, 99,109, 97,120,
- 33, 61, 48, 46, 48, 41, 10, 9, 9,115, 32, 61, 32, 99,100,101,108,116, 97, 47, 99,109, 97,120, 59, 10, 9,101,108,115,101, 32,
-123, 10, 9, 9,115, 32, 61, 32, 48, 46, 48, 59, 10, 9, 9,104, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 10, 9,105,102, 32,
- 40,115, 32, 61, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,104, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101,
- 32,123, 10, 9, 9, 99, 32, 61, 32, 40,118,101, 99, 51, 40, 99,109, 97,120, 44, 32, 99,109, 97,120, 44, 32, 99,109, 97,120, 41,
- 32, 45, 32,114,103, 98, 46,120,121,122, 41, 47, 99,100,101,108,116, 97, 59, 10, 10, 9, 9,105,102, 32, 40,114,103, 98, 46,120,
- 61, 61, 99,109, 97,120, 41, 32,104, 32, 61, 32, 99, 91, 50, 93, 32, 45, 32, 99, 91, 49, 93, 59, 10, 9, 9,101,108,115,101, 32,
-105,102, 32, 40,114,103, 98, 46,121, 61, 61, 99,109, 97,120, 41, 32,104, 32, 61, 32, 50, 46, 48, 32, 43, 32, 99, 91, 48, 93, 32,
- 45, 32, 32, 99, 91, 50, 93, 59, 10, 9, 9,101,108,115,101, 32,104, 32, 61, 32, 52, 46, 48, 32, 43, 32, 99, 91, 49, 93, 32, 45,
- 32, 99, 91, 48, 93, 59, 10, 10, 9, 9,104, 32, 47, 61, 32, 54, 46, 48, 59, 10, 10, 9, 9,105,102, 32, 40,104, 60, 48, 46, 48,
- 41, 10, 9, 9, 9,104, 32, 43, 61, 32, 49, 46, 48, 59, 10, 9,125, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99,
- 52, 40,104, 44, 32,115, 44, 32,118, 44, 32,114,103, 98, 46,119, 41, 59, 10,125, 10, 10,118,111,105,100, 32,104,115,118, 95,116,
-111, 95,114,103, 98, 40,118,101, 99, 52, 32,104,115,118, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41,
- 10,123, 10, 9,102,108,111, 97,116, 32,105, 44, 32,102, 44, 32,112, 44, 32,113, 44, 32,116, 44, 32,104, 44, 32,115, 44, 32,118,
- 59, 10, 9,118,101, 99, 51, 32,114,103, 98, 59, 10, 10, 9,104, 32, 61, 32,104,115,118, 91, 48, 93, 59, 10, 9,115, 32, 61, 32,
-104,115,118, 91, 49, 93, 59, 10, 9,118, 32, 61, 32,104,115,118, 91, 50, 93, 59, 10, 10, 9,105,102, 40,115, 61, 61, 48, 46, 48,
- 41, 32,123, 10, 9, 9,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,118, 44, 32,118, 44, 32,118, 41, 59, 10, 9,125, 10, 9,101,
-108,115,101, 32,123, 10, 9, 9,105,102, 40,104, 61, 61, 49, 46, 48, 41, 10, 9, 9, 9,104, 32, 61, 32, 48, 46, 48, 59, 10, 9,
- 9, 10, 9, 9,104, 32, 42, 61, 32, 54, 46, 48, 59, 10, 9, 9,105, 32, 61, 32,102,108,111,111,114, 40,104, 41, 59, 10, 9, 9,
-102, 32, 61, 32,104, 32, 45, 32,105, 59, 10, 9, 9,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,102, 44, 32,102, 44, 32,102, 41,
- 59, 10, 9, 9,112, 32, 61, 32,118, 42, 40, 49, 46, 48, 45,115, 41, 59, 10, 9, 9,113, 32, 61, 32,118, 42, 40, 49, 46, 48, 45,
- 40,115, 42,102, 41, 41, 59, 10, 9, 9,116, 32, 61, 32,118, 42, 40, 49, 46, 48, 45, 40,115, 42, 40, 49, 46, 48, 45,102, 41, 41,
- 41, 59, 10, 9, 9, 10, 9, 9,105,102, 32, 40,105, 32, 61, 61, 32, 48, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51,
- 40,118, 44, 32,116, 44, 32,112, 41, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 49, 46, 48, 41, 32,
-114,103, 98, 32, 61, 32,118,101, 99, 51, 40,113, 44, 32,118, 44, 32,112, 41, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,
-105, 32, 61, 61, 32, 50, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,112, 44, 32,118, 44, 32,116, 41, 59, 10, 9,
- 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 51, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,112,
- 44, 32,113, 44, 32,118, 41, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 52, 46, 48, 41, 32,114,103,
- 98, 32, 61, 32,118,101, 99, 51, 40,116, 44, 32,112, 44, 32,118, 41, 59, 10, 9, 9,101,108,115,101, 32,114,103, 98, 32, 61, 32,
-118,101, 99, 51, 40,118, 44, 32,112, 44, 32,113, 41, 59, 10, 9,125, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99,
- 52, 40,114,103, 98, 44, 32,104,115,118, 46,119, 41, 59, 10,125, 10, 10, 35,100,101,102,105,110,101, 32, 77, 95, 80, 73, 32, 51,
- 46, 49, 52, 49, 53, 57, 50, 54, 53, 51, 53, 56, 57, 55, 57, 51, 50, 51, 56, 52, 54, 10, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42,
- 42, 42, 42, 32, 83, 72, 65, 68, 69, 82, 32, 78, 79, 68, 69, 83, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
- 47, 10, 10,118,111,105,100, 32,118, 99,111,108, 95, 97,116,116,114,105, 98,117,116,101, 40,118,101, 99, 52, 32, 97,116,116,118,
- 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,118, 99,111,108, 41, 10,123, 10, 9,118, 99,111,108, 32, 61, 32,118,101,
- 99, 52, 40, 97,116,116,118, 99,111,108, 46,120, 47, 50, 53, 53, 46, 48, 44, 32, 97,116,116,118, 99,111,108, 46,121, 47, 50, 53,
- 53, 46, 48, 44, 32, 97,116,116,118, 99,111,108, 46,122, 47, 50, 53, 53, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10,125, 10, 10,118,
-111,105,100, 32,117,118, 95, 97,116,116,114,105, 98,117,116,101, 40,118,101, 99, 50, 32, 97,116,116,117,118, 44, 32,111,117,116,
- 32,118,101, 99, 51, 32,117,118, 41, 10,123, 10, 9,117,118, 32, 61, 32,118,101, 99, 51, 40, 97,116,116,117,118, 42, 50, 46, 48,
- 32, 45, 32,118,101, 99, 50, 40, 49, 46, 48, 44, 32, 49, 46, 48, 41, 44, 32, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100,
- 32,103,101,111,109, 40,118,101, 99, 51, 32, 99,111, 44, 32,118,101, 99, 51, 32,110,111,114, 44, 32,109, 97,116, 52, 32,118,105,
-101,119,105,110,118,109, 97,116, 44, 32,118,101, 99, 51, 32, 97,116,116,111,114, 99,111, 44, 32,118,101, 99, 50, 32, 97,116,116,
-117,118, 44, 32,118,101, 99, 52, 32, 97,116,116,118, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,103,108,111, 98, 97,
-108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,108,111, 99, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118,105,101,119,
- 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,114, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32,117,118, 44, 32,111,117,
-116, 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,118, 99,111,108, 44, 32,111,117,
-116, 32,102,108,111, 97,116, 32,102,114,111,110,116, 98, 97, 99,107, 41, 10,123, 10, 9,108,111, 99, 97,108, 32, 61, 32, 99,111,
- 59, 10, 9,118,105,101,119, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,108,111, 99, 97,108, 41, 59, 10, 9,103,108,111,
- 98, 97,108, 32, 61, 32, 40,118,105,101,119,105,110,118,109, 97,116, 42,118,101, 99, 52, 40,108,111, 99, 97,108, 44, 32, 49, 46,
- 48, 41, 41, 46,120,121,122, 59, 10, 9,111,114, 99,111, 32, 61, 32, 97,116,116,111,114, 99,111, 59, 10, 9,117,118, 95, 97,116,
-116,114,105, 98,117,116,101, 40, 97,116,116,117,118, 44, 32,117,118, 41, 59, 10, 9,110,111,114,109, 97,108, 32, 61, 32, 45,110,
-111,114,109, 97,108,105,122,101, 40,110,111,114, 41, 59, 9, 47, 42, 32, 98,108,101,110,100,101,114, 32,114,101,110,100,101,114,
- 32,110,111,114,109, 97,108, 32,105,115, 32,110,101,103, 97,116,101,100, 32, 42, 47, 10, 9,118, 99,111,108, 95, 97,116,116,114,
-105, 98,117,116,101, 40, 97,116,116,118, 99,111,108, 44, 32,118, 99,111,108, 41, 59, 10, 9,102,114,111,110,116, 98, 97, 99,107,
- 32, 61, 32, 49, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,112,112,105,110,103, 40,118,101, 99, 51, 32,118,101, 99,
- 44, 32,109, 97,116, 52, 32,109, 97,116, 44, 32,118,101, 99, 51, 32,109,105,110,118,101, 99, 44, 32,118,101, 99, 51, 32,109, 97,
-120,118,101, 99, 44, 32,102,108,111, 97,116, 32,100,111,109,105,110, 44, 32,102,108,111, 97,116, 32,100,111,109, 97,120, 44, 32,
-111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32, 40,109, 97,
-116, 32, 42, 32,118,101, 99, 52, 40,118,101, 99, 44, 32, 49, 46, 48, 41, 41, 46,120,121,122, 59, 10, 9,105,102, 40,100,111,109,
-105,110, 32, 61, 61, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116,118,101, 99, 32, 61, 32,109, 97,120, 40,111,117,116,118,101, 99,
- 44, 32,109,105,110,118,101, 99, 41, 59, 10, 9,105,102, 40,100,111,109, 97,120, 32, 61, 61, 32, 49, 46, 48, 41, 10, 9, 9,111,
-117,116,118,101, 99, 32, 61, 32,109,105,110, 40,111,117,116,118,101, 99, 44, 32,109, 97,120,118,101, 99, 41, 59, 10,125, 10, 10,
-118,111,105,100, 32, 99, 97,109,101,114, 97, 40,118,101, 99, 51, 32, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,
-116,118,105,101,119, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,100,101,112,116,104, 44, 32,111,117,116, 32,102,
-108,111, 97,116, 32,111,117,116,100,105,115,116, 41, 10,123, 10, 9,111,117,116,100,101,112,116,104, 32, 61, 32, 97, 98,115, 40,
- 99,111, 46,122, 41, 59, 10, 9,111,117,116,100,105,115,116, 32, 61, 32,108,101,110,103,116,104, 40, 99,111, 41, 59, 10, 9,111,
-117,116,118,105,101,119, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,111, 41, 59, 10,125, 10, 10,118,111,105,100, 32,
-109, 97,116,104, 95, 97,100,100, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44,
- 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118,
- 97,108, 49, 32, 43, 32,118, 97,108, 50, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,115,117, 98,116,114, 97, 99,
-116, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,
-111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 45, 32,118,
- 97,108, 50, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,109,117,108,116,105,112,108,121, 40,102,108,111, 97,116,
- 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,
-118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 42, 32,118, 97,108, 50, 59, 10,125, 10,
- 10,118,111,105,100, 32,109, 97,116,104, 95,100,105,118,105,100,101, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,
-111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,
-102, 32, 40,118, 97,108, 50, 32, 61, 61, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,
- 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 47, 32,118, 97,108, 50, 59, 10,125, 10,
- 10,118,111,105,100, 32,109, 97,116,104, 95,115,105,110,101, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,
-108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,115,105,110, 40,118, 97,108,
- 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 99,111,115,105,110,101, 40,102,108,111, 97,116, 32,118, 97,108,
- 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,
- 99,111,115, 40,118, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,116, 97,110,103,101,110,116, 40,102,
-108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,
-117,116,118, 97,108, 32, 61, 32,116, 97,110, 40,118, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 97,
-115,105,110, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41,
- 10,123, 10, 9,105,102, 32, 40,118, 97,108, 32, 60, 61, 32, 49, 46, 48, 32, 38, 38, 32,118, 97,108, 32, 62, 61, 32, 45, 49, 46,
- 48, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 97,115,105,110, 40,118, 97,108, 41, 59, 10, 9,101,108,115,101, 10, 9,
- 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 97, 99,111,115,
+ 10,102,108,111, 97,
+116, 32,101,120,112, 95, 98,108,101,110,100,101,114, 40,102,108,111, 97,116, 32,102, 41, 10,123, 10, 9,114,101,116,117,114,110,
+ 32,112,111,119, 40, 50, 46, 55, 49, 56, 50, 56, 49, 56, 50, 56, 52, 54, 44, 32,102, 41, 59, 10,125, 10, 10,118,111,105,100, 32,
+114,103, 98, 95,116,111, 95,104,115,118, 40,118,101, 99, 52, 32,114,103, 98, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,
+116, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32, 99,109, 97,120, 44, 32, 99,109,105,110, 44, 32,104, 44, 32,115, 44,
+ 32,118, 44, 32, 99,100,101,108,116, 97, 59, 10, 9,118,101, 99, 51, 32, 99, 59, 10, 10, 9, 99,109, 97,120, 32, 61, 32,109, 97,
+120, 40,114,103, 98, 91, 48, 93, 44, 32,109, 97,120, 40,114,103, 98, 91, 49, 93, 44, 32,114,103, 98, 91, 50, 93, 41, 41, 59, 10,
+ 9, 99,109,105,110, 32, 61, 32,109,105,110, 40,114,103, 98, 91, 48, 93, 44, 32,109,105,110, 40,114,103, 98, 91, 49, 93, 44, 32,
+114,103, 98, 91, 50, 93, 41, 41, 59, 10, 9, 99,100,101,108,116, 97, 32, 61, 32, 99,109, 97,120, 45, 99,109,105,110, 59, 10, 10,
+ 9,118, 32, 61, 32, 99,109, 97,120, 59, 10, 9,105,102, 32, 40, 99,109, 97,120, 33, 61, 48, 46, 48, 41, 10, 9, 9,115, 32, 61,
+ 32, 99,100,101,108,116, 97, 47, 99,109, 97,120, 59, 10, 9,101,108,115,101, 32,123, 10, 9, 9,115, 32, 61, 32, 48, 46, 48, 59,
+ 10, 9, 9,104, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 10, 9,105,102, 32, 40,115, 32, 61, 61, 32, 48, 46, 48, 41, 32,123,
+ 10, 9, 9,104, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, 10, 9, 9, 99, 32, 61, 32, 40,118,101,
+ 99, 51, 40, 99,109, 97,120, 44, 32, 99,109, 97,120, 44, 32, 99,109, 97,120, 41, 32, 45, 32,114,103, 98, 46,120,121,122, 41, 47,
+ 99,100,101,108,116, 97, 59, 10, 10, 9, 9,105,102, 32, 40,114,103, 98, 46,120, 61, 61, 99,109, 97,120, 41, 32,104, 32, 61, 32,
+ 99, 91, 50, 93, 32, 45, 32, 99, 91, 49, 93, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,114,103, 98, 46,121, 61, 61, 99,
+109, 97,120, 41, 32,104, 32, 61, 32, 50, 46, 48, 32, 43, 32, 99, 91, 48, 93, 32, 45, 32, 32, 99, 91, 50, 93, 59, 10, 9, 9,101,
+108,115,101, 32,104, 32, 61, 32, 52, 46, 48, 32, 43, 32, 99, 91, 49, 93, 32, 45, 32, 99, 91, 48, 93, 59, 10, 10, 9, 9,104, 32,
+ 47, 61, 32, 54, 46, 48, 59, 10, 10, 9, 9,105,102, 32, 40,104, 60, 48, 46, 48, 41, 10, 9, 9, 9,104, 32, 43, 61, 32, 49, 46,
+ 48, 59, 10, 9,125, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40,104, 44, 32,115, 44, 32,118, 44, 32,114,
+103, 98, 46,119, 41, 59, 10,125, 10, 10,118,111,105,100, 32,104,115,118, 95,116,111, 95,114,103, 98, 40,118,101, 99, 52, 32,104,
+115,118, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,105, 44,
+ 32,102, 44, 32,112, 44, 32,113, 44, 32,116, 44, 32,104, 44, 32,115, 44, 32,118, 59, 10, 9,118,101, 99, 51, 32,114,103, 98, 59,
+ 10, 10, 9,104, 32, 61, 32,104,115,118, 91, 48, 93, 59, 10, 9,115, 32, 61, 32,104,115,118, 91, 49, 93, 59, 10, 9,118, 32, 61,
+ 32,104,115,118, 91, 50, 93, 59, 10, 10, 9,105,102, 40,115, 61, 61, 48, 46, 48, 41, 32,123, 10, 9, 9,114,103, 98, 32, 61, 32,
+118,101, 99, 51, 40,118, 44, 32,118, 44, 32,118, 41, 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, 10, 9, 9,105,102, 40,104,
+ 61, 61, 49, 46, 48, 41, 10, 9, 9, 9,104, 32, 61, 32, 48, 46, 48, 59, 10, 9, 9, 10, 9, 9,104, 32, 42, 61, 32, 54, 46, 48,
+ 59, 10, 9, 9,105, 32, 61, 32,102,108,111,111,114, 40,104, 41, 59, 10, 9, 9,102, 32, 61, 32,104, 32, 45, 32,105, 59, 10, 9,
+ 9,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,102, 44, 32,102, 44, 32,102, 41, 59, 10, 9, 9,112, 32, 61, 32,118, 42, 40, 49,
+ 46, 48, 45,115, 41, 59, 10, 9, 9,113, 32, 61, 32,118, 42, 40, 49, 46, 48, 45, 40,115, 42,102, 41, 41, 59, 10, 9, 9,116, 32,
+ 61, 32,118, 42, 40, 49, 46, 48, 45, 40,115, 42, 40, 49, 46, 48, 45,102, 41, 41, 41, 59, 10, 9, 9, 10, 9, 9,105,102, 32, 40,
+105, 32, 61, 61, 32, 48, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,118, 44, 32,116, 44, 32,112, 41, 59, 10, 9,
+ 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 49, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,113,
+ 44, 32,118, 44, 32,112, 41, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 50, 46, 48, 41, 32,114,103,
+ 98, 32, 61, 32,118,101, 99, 51, 40,112, 44, 32,118, 44, 32,116, 41, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32,
+ 61, 61, 32, 51, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,112, 44, 32,113, 44, 32,118, 41, 59, 10, 9, 9,101,
+108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 52, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,116, 44, 32,
+112, 44, 32,118, 41, 59, 10, 9, 9,101,108,115,101, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,118, 44, 32,112, 44, 32,113,
+ 41, 59, 10, 9,125, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40,114,103, 98, 44, 32,104,115,118, 46,119,
+ 41, 59, 10,125, 10, 10,102,108,111, 97,116, 32,115,114,103, 98, 95,116,111, 95,108,105,110,101, 97,114,114,103, 98, 40,102,108,
+111, 97,116, 32, 99, 41, 10,123, 10, 9,105,102, 40, 99, 32, 60, 32, 48, 46, 48, 52, 48, 52, 53, 41, 10, 9, 9,114,101,116,117,
+114,110, 32, 40, 99, 32, 60, 32, 48, 46, 48, 41, 63, 32, 48, 46, 48, 58, 32, 99, 32, 42, 32, 40, 49, 46, 48, 47, 49, 50, 46, 57,
+ 50, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,114,101,116,117,114,110, 32,112,111,119, 40, 40, 99, 32, 43, 32, 48, 46, 48, 53,
+ 53, 41, 42, 40, 49, 46, 48, 47, 49, 46, 48, 53, 53, 41, 44, 32, 50, 46, 52, 41, 59, 10,125, 10, 10,102,108,111, 97,116, 32,108,
+105,110,101, 97,114,114,103, 98, 95,116,111, 95,115,114,103, 98, 40,102,108,111, 97,116, 32, 99, 41, 10,123, 10, 9,105,102, 40,
+ 99, 32, 60, 32, 48, 46, 48, 48, 51, 49, 51, 48, 56, 41, 10, 9, 9,114,101,116,117,114,110, 32, 40, 99, 32, 60, 32, 48, 46, 48,
+ 41, 63, 32, 48, 46, 48, 58, 32, 99, 32, 42, 32, 49, 50, 46, 57, 50, 59, 10, 9,101,108,115,101, 10, 9, 9,114,101,116,117,114,
+110, 32, 49, 46, 48, 53, 53, 32, 42, 32,112,111,119, 40, 99, 44, 32, 49, 46, 48, 47, 50, 46, 52, 41, 32, 45, 32, 48, 46, 48, 53,
+ 53, 59, 10,125, 10, 10,118,111,105,100, 32,115,114,103, 98, 95,116,111, 95,108,105,110,101, 97,114,114,103, 98, 40,118,101, 99,
+ 52, 32, 99,111,108, 95,102,114,111,109, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108, 95,116,111, 41, 10,123, 10, 9,
+ 99,111,108, 95,116,111, 46,114, 32, 61, 32,115,114,103, 98, 95,116,111, 95,108,105,110,101, 97,114,114,103, 98, 40, 99,111,108,
+ 95,102,114,111,109, 46,114, 41, 59, 10, 9, 99,111,108, 95,116,111, 46,103, 32, 61, 32,115,114,103, 98, 95,116,111, 95,108,105,
+110,101, 97,114,114,103, 98, 40, 99,111,108, 95,102,114,111,109, 46,103, 41, 59, 10, 9, 99,111,108, 95,116,111, 46, 98, 32, 61,
+ 32,115,114,103, 98, 95,116,111, 95,108,105,110,101, 97,114,114,103, 98, 40, 99,111,108, 95,102,114,111,109, 46, 98, 41, 59, 10,
+ 9, 99,111,108, 95,116,111, 46, 97, 32, 61, 32, 99,111,108, 95,102,114,111,109, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,
+108,105,110,101, 97,114,114,103, 98, 95,116,111, 95,115,114,103, 98, 40,118,101, 99, 52, 32, 99,111,108, 95,102,114,111,109, 44,
+ 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108, 95,116,111, 41, 10,123, 10, 9, 99,111,108, 95,116,111, 46,114, 32, 61, 32,
+108,105,110,101, 97,114,114,103, 98, 95,116,111, 95,115,114,103, 98, 40, 99,111,108, 95,102,114,111,109, 46,114, 41, 59, 10, 9,
+ 99,111,108, 95,116,111, 46,103, 32, 61, 32,108,105,110,101, 97,114,114,103, 98, 95,116,111, 95,115,114,103, 98, 40, 99,111,108,
+ 95,102,114,111,109, 46,103, 41, 59, 10, 9, 99,111,108, 95,116,111, 46, 98, 32, 61, 32,108,105,110,101, 97,114,114,103, 98, 95,
+116,111, 95,115,114,103, 98, 40, 99,111,108, 95,102,114,111,109, 46, 98, 41, 59, 10, 9, 99,111,108, 95,116,111, 46, 97, 32, 61,
+ 32, 99,111,108, 95,102,114,111,109, 46, 97, 59, 10,125, 10, 10, 35,100,101,102,105,110,101, 32, 77, 95, 80, 73, 32, 51, 46, 49,
+ 52, 49, 53, 57, 50, 54, 53, 51, 53, 56, 57, 55, 57, 51, 50, 51, 56, 52, 54, 10, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 32, 83, 72, 65, 68, 69, 82, 32, 78, 79, 68, 69, 83, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47, 10,
+ 10,118,111,105,100, 32,118, 99,111,108, 95, 97,116,116,114,105, 98,117,116,101, 40,118,101, 99, 52, 32, 97,116,116,118, 99,111,
+108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,118, 99,111,108, 41, 10,123, 10, 9,118, 99,111,108, 32, 61, 32,118,101, 99, 52,
+ 40, 97,116,116,118, 99,111,108, 46,120, 47, 50, 53, 53, 46, 48, 44, 32, 97,116,116,118, 99,111,108, 46,121, 47, 50, 53, 53, 46,
+ 48, 44, 32, 97,116,116,118, 99,111,108, 46,122, 47, 50, 53, 53, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,
+100, 32,117,118, 95, 97,116,116,114,105, 98,117,116,101, 40,118,101, 99, 50, 32, 97,116,116,117,118, 44, 32,111,117,116, 32,118,
+101, 99, 51, 32,117,118, 41, 10,123, 10, 9,117,118, 32, 61, 32,118,101, 99, 51, 40, 97,116,116,117,118, 42, 50, 46, 48, 32, 45,
+ 32,118,101, 99, 50, 40, 49, 46, 48, 44, 32, 49, 46, 48, 41, 44, 32, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,103,
+101,111,109, 40,118,101, 99, 51, 32, 99,111, 44, 32,118,101, 99, 51, 32,110,111,114, 44, 32,109, 97,116, 52, 32,118,105,101,119,
+105,110,118,109, 97,116, 44, 32,118,101, 99, 51, 32, 97,116,116,111,114, 99,111, 44, 32,118,101, 99, 50, 32, 97,116,116,117,118,
+ 44, 32,118,101, 99, 52, 32, 97,116,116,118, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,103,108,111, 98, 97,108, 44,
+ 32,111,117,116, 32,118,101, 99, 51, 32,108,111, 99, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118,105,101,119, 44, 32,
+111,117,116, 32,118,101, 99, 51, 32,111,114, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32,117,118, 44, 32,111,117,116, 32,
+118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,118, 99,111,108, 44, 32,111,117,116, 32,
+102,108,111, 97,116, 32,102,114,111,110,116, 98, 97, 99,107, 41, 10,123, 10, 9,108,111, 99, 97,108, 32, 61, 32, 99,111, 59, 10,
+ 9,118,105,101,119, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,108,111, 99, 97,108, 41, 59, 10, 9,103,108,111, 98, 97,
+108, 32, 61, 32, 40,118,105,101,119,105,110,118,109, 97,116, 42,118,101, 99, 52, 40,108,111, 99, 97,108, 44, 32, 49, 46, 48, 41,
+ 41, 46,120,121,122, 59, 10, 9,111,114, 99,111, 32, 61, 32, 97,116,116,111,114, 99,111, 59, 10, 9,117,118, 95, 97,116,116,114,
+105, 98,117,116,101, 40, 97,116,116,117,118, 44, 32,117,118, 41, 59, 10, 9,110,111,114,109, 97,108, 32, 61, 32, 45,110,111,114,
+109, 97,108,105,122,101, 40,110,111,114, 41, 59, 9, 47, 42, 32, 98,108,101,110,100,101,114, 32,114,101,110,100,101,114, 32,110,
+111,114,109, 97,108, 32,105,115, 32,110,101,103, 97,116,101,100, 32, 42, 47, 10, 9,118, 99,111,108, 95, 97,116,116,114,105, 98,
+117,116,101, 40, 97,116,116,118, 99,111,108, 44, 32,118, 99,111,108, 41, 59, 10, 9,102,114,111,110,116, 98, 97, 99,107, 32, 61,
+ 32, 49, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,112,112,105,110,103, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,
+109, 97,116, 52, 32,109, 97,116, 44, 32,118,101, 99, 51, 32,109,105,110,118,101, 99, 44, 32,118,101, 99, 51, 32,109, 97,120,118,
+101, 99, 44, 32,102,108,111, 97,116, 32,100,111,109,105,110, 44, 32,102,108,111, 97,116, 32,100,111,109, 97,120, 44, 32,111,117,
+116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32, 40,109, 97,116, 32,
+ 42, 32,118,101, 99, 52, 40,118,101, 99, 44, 32, 49, 46, 48, 41, 41, 46,120,121,122, 59, 10, 9,105,102, 40,100,111,109,105,110,
+ 32, 61, 61, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116,118,101, 99, 32, 61, 32,109, 97,120, 40,111,117,116,118,101, 99, 44, 32,
+109,105,110,118,101, 99, 41, 59, 10, 9,105,102, 40,100,111,109, 97,120, 32, 61, 61, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116,
+118,101, 99, 32, 61, 32,109,105,110, 40,111,117,116,118,101, 99, 44, 32,109, 97,120,118,101, 99, 41, 59, 10,125, 10, 10,118,111,
+105,100, 32, 99, 97,109,101,114, 97, 40,118,101, 99, 51, 32, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,
+105,101,119, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,100,101,112,116,104, 44, 32,111,117,116, 32,102,108,111,
+ 97,116, 32,111,117,116,100,105,115,116, 41, 10,123, 10, 9,111,117,116,100,101,112,116,104, 32, 61, 32, 97, 98,115, 40, 99,111,
+ 46,122, 41, 59, 10, 9,111,117,116,100,105,115,116, 32, 61, 32,108,101,110,103,116,104, 40, 99,111, 41, 59, 10, 9,111,117,116,
+118,105,101,119, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,111, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,
+116,104, 95, 97,100,100, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,
+117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108,
+ 49, 32, 43, 32,118, 97,108, 50, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,115,117, 98,116,114, 97, 99,116, 40,
+102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,
+116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 45, 32,118, 97,108,
+ 50, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,109,117,108,116,105,112,108,121, 40,102,108,111, 97,116, 32,118,
+ 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,
+108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 42, 32,118, 97,108, 50, 59, 10,125, 10, 10,118,
+111,105,100, 32,109, 97,116,104, 95,100,105,118,105,100,101, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,
+116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,102, 32,
+ 40,118, 97,108, 50, 32, 61, 61, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,
+108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 47, 32,118, 97,108, 50, 59, 10,125, 10, 10,118,
+111,105,100, 32,109, 97,116,104, 95,115,105,110,101, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111,
+ 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,115,105,110, 40,118, 97,108, 41, 59,
+ 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 99,111,115,105,110,101, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,
+111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 99,111,
+115, 40,118, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,116, 97,110,103,101,110,116, 40,102,108,111,
+ 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,
+118, 97,108, 32, 61, 32,116, 97,110, 40,118, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 97,115,105,
+110, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123,
+ 10, 9,105,102, 32, 40,118, 97,108, 32, 60, 61, 32, 49, 46, 48, 32, 38, 38, 32,118, 97,108, 32, 62, 61, 32, 45, 49, 46, 48, 41,
+ 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 97,115,105,110, 40,118, 97,108, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,
+117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 97, 99,111,115, 40,102,
+108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,
+102, 32, 40,118, 97,108, 32, 60, 61, 32, 49, 46, 48, 32, 38, 38, 32,118, 97,108, 32, 62, 61, 32, 45, 49, 46, 48, 41, 10, 9, 9,
+111,117,116,118, 97,108, 32, 61, 32, 97, 99,111,115, 40,118, 97,108, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118,
+ 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 97,116, 97,110, 40,102,108,111, 97,
+116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,
+ 97,108, 32, 61, 32, 97,116, 97,110, 40,118, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,112,111,119,
+ 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111,
+ 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,102, 32, 40,118, 97,108, 49, 32, 62, 61, 32, 48, 46, 48, 41, 10, 9,
+ 9,111,117,116,118, 97,108, 32, 61, 32,112,111,119, 40,118, 97,108, 49, 44, 32,118, 97,108, 50, 41, 59, 10, 9,101,108,115,101,
+ 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,108,111,
+103, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,
+111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,102, 40,118, 97,108, 49, 32, 62, 32, 48, 46, 48, 32, 32, 38, 38,
+ 32,118, 97,108, 50, 32, 62, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116,118, 97,108, 61, 32,108,111,103, 50, 40,118, 97,108, 49,
+ 41, 32, 47, 32,108,111,103, 50, 40,118, 97,108, 50, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 61, 32,
+ 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,109, 97,120, 40,102,108,111, 97,116, 32,118, 97,108, 49,
+ 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,
+123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,109, 97,120, 40,118, 97,108, 49, 44, 32,118, 97,108, 50, 41, 59, 10,125, 10, 10,
+118,111,105,100, 32,109, 97,116,104, 95,109,105,110, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,
+118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,
+108, 32, 61, 32,109,105,110, 40,118, 97,108, 49, 44, 32,118, 97,108, 50, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,
+104, 95,114,111,117,110,100, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,
+118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 61, 32,102,108,111,111,114, 40,118, 97,108, 32, 43, 32, 48, 46, 53, 41,
+ 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,108,101,115,115, 95,116,104, 97,110, 40,102,108,111, 97,116, 32,118,
+ 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,
+108, 41, 10,123, 10, 9,105,102, 40,118, 97,108, 49, 32, 60, 32,118, 97,108, 50, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61,
+ 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,
+111,105,100, 32,109, 97,116,104, 95,103,114,101, 97,116,101,114, 95,116,104, 97,110, 40,102,108,111, 97,116, 32,118, 97,108, 49,
+ 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,
+123, 10, 9,105,102, 40,118, 97,108, 49, 32, 62, 32,118, 97,108, 50, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 49, 46,
+ 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100,
+ 32,115,113,117,101,101,122,101, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,102,108,111, 97,116, 32,119,105,100,116,104, 44,
+ 32,102,108,111, 97,116, 32, 99,101,110,116,101,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41,
+ 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 49, 46, 48, 47, 40, 49, 46, 48, 32, 43, 32,112,111,119, 40, 50, 46, 55, 49,
+ 56, 50, 56, 49, 56, 51, 44, 32, 45, 40, 40,118, 97,108, 45, 99,101,110,116,101,114, 41, 42,119,105,100,116,104, 41, 41, 41, 59,
+ 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95, 97,100,100, 40,118,101, 99, 51, 32,118, 49, 44, 32,118,
+101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111,
+ 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118, 49, 32, 43, 32,118, 50, 59, 10,
+ 9,111,117,116,118, 97,108, 32, 61, 32, 40, 97, 98,115, 40,111,117,116,118,101, 99, 91, 48, 93, 41, 32, 43, 32, 97, 98,115, 40,
+111,117,116,118,101, 99, 91, 49, 93, 41, 32, 43, 32, 97, 98,115, 40,111,117,116,118,101, 99, 91, 50, 93, 41, 41, 47, 51, 46, 48,
+ 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95,115,117, 98, 40,118,101, 99, 51, 32,118, 49, 44, 32,
+118,101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,
+111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118, 49, 32, 45, 32,118, 50, 59,
+ 10, 9,111,117,116,118, 97,108, 32, 61, 32, 40, 97, 98,115, 40,111,117,116,118,101, 99, 91, 48, 93, 41, 32, 43, 32, 97, 98,115,
+ 40,111,117,116,118,101, 99, 91, 49, 93, 41, 32, 43, 32, 97, 98,115, 40,111,117,116,118,101, 99, 91, 50, 93, 41, 41, 47, 51, 46,
+ 48, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95, 97,118,101,114, 97,103,101, 40,118,101, 99, 51,
+ 32,118, 49, 44, 32,118,101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,
+117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118, 49, 32,
+ 43, 32,118, 50, 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32,108,101,110,103,116,104, 40,111,117,116,118,101, 99, 41, 59, 10,
+ 9,111,117,116,118,101, 99, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,111,117,116,118,101, 99, 41, 59, 10,125, 10, 10,
+118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95,100,111,116, 40,118,101, 99, 51, 32,118, 49, 44, 32,118,101, 99, 51, 32,
+118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,
+117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118,101, 99, 51, 40, 48, 44, 32, 48, 44, 32, 48, 41,
+ 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32,100,111,116, 40,118, 49, 44, 32,118, 50, 41, 59, 10,125, 10, 10,118,111,105,100,
+ 32,118,101, 99, 95,109, 97,116,104, 95, 99,114,111,115,115, 40,118,101, 99, 51, 32,118, 49, 44, 32,118,101, 99, 51, 32,118, 50,
+ 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,
+118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32, 99,114,111,115,115, 40,118, 49, 44, 32,118, 50, 41, 59, 10,
+ 9,111,117,116,118, 97,108, 32, 61, 32,108,101,110,103,116,104, 40,111,117,116,118,101, 99, 41, 59, 10,125, 10, 10,118,111,105,
+100, 32,118,101, 99, 95,109, 97,116,104, 95,110,111,114,109, 97,108,105,122,101, 40,118,101, 99, 51, 32,118, 44, 32,111,117,116,
+ 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,
+123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,108,101,110,103,116,104, 40,118, 41, 59, 10, 9,111,117,116,118,101, 99, 32, 61,
+ 32,110,111,114,109, 97,108,105,122,101, 40,118, 41, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95,
+110,101,103, 97,116,101, 40,118,101, 99, 51, 32,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118, 41, 10,123, 10,
+ 9,111,117,116,118, 32, 61, 32, 45,118, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,114,109, 97,108, 40,118,101, 99, 51, 32,
+100,105,114, 44, 32,118,101, 99, 51, 32,110,111,114, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,110,111,114, 44, 32,
+111,117,116, 32,102,108,111, 97,116, 32,111,117,116,100,111,116, 41, 10,123, 10, 9,111,117,116,110,111,114, 32, 61, 32,100,105,
+114, 59, 10, 9,111,117,116,100,111,116, 32, 61, 32, 45,100,111,116, 40,100,105,114, 44, 32,110,111,114, 41, 59, 10,125, 10, 10,
+118,111,105,100, 32, 99,117,114,118,101,115, 95,118,101, 99, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 51, 32,
+118,101, 99, 44, 32,115, 97,109,112,108,101,114, 49, 68, 32, 99,117,114,118,101,109, 97,112, 44, 32,111,117,116, 32,118,101, 99,
+ 51, 32,111,117,116,118,101, 99, 41, 10,123, 10, 9,111,117,116,118,101, 99, 46,120, 32, 61, 32,116,101,120,116,117,114,101, 49,
+ 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, 40,118,101, 99, 46,120, 32, 43, 32, 49, 46, 48, 41, 42, 48, 46, 53, 41, 46,120,
+ 59, 10, 9,111,117,116,118,101, 99, 46,121, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112,
+ 44, 32, 40,118,101, 99, 46,121, 32, 43, 32, 49, 46, 48, 41, 42, 48, 46, 53, 41, 46,121, 59, 10, 9,111,117,116,118,101, 99, 46,
+122, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, 40,118,101, 99, 46,122, 32, 43,
+ 32, 49, 46, 48, 41, 42, 48, 46, 53, 41, 46,122, 59, 10, 10, 9,105,102, 32, 40,102, 97, 99, 32, 33, 61, 32, 49, 46, 48, 41, 10,
+ 9, 9,111,117,116,118,101, 99, 32, 61, 32, 40,111,117,116,118,101, 99, 42,102, 97, 99, 41, 32, 43, 32, 40,118,101, 99, 42, 40,
+ 49, 46, 48, 45,102, 97, 99, 41, 41, 59, 10, 10,125, 10, 10,118,111,105,100, 32, 99,117,114,118,101,115, 95,114,103, 98, 40,102,
+108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 44, 32,115, 97,109,112,108,101,114, 49, 68, 32, 99,117,
+114,118,101,109, 97,112, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,
+111,108, 46,114, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,116,101,120,116,117,
+114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, 99,111,108, 46,114, 41, 46, 97, 41, 46,114, 59, 10, 9,111,117,116,
+ 99,111,108, 46,103, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,116,101,120,116,
+117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, 99,111,108, 46,103, 41, 46, 97, 41, 46,103, 59, 10, 9,111,117,
+116, 99,111,108, 46, 98, 32, 61, 32,116,101,120,116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,116,101,120,
+116,117,114,101, 49, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, 99,111,108, 46, 98, 41, 46, 97, 41, 46, 98, 59, 10, 10, 9,
+105,102, 32, 40,102, 97, 99, 32, 33, 61, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 32, 61, 32, 40,111,117,116, 99,
+111,108, 42,102, 97, 99, 41, 32, 43, 32, 40, 99,111,108, 42, 40, 49, 46, 48, 45,102, 97, 99, 41, 41, 59, 10, 10, 9,111,117,116,
+ 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116, 95,118, 97,108,117,101,
40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10,
9,105,102, 32, 40,118, 97,108, 32, 60, 61, 32, 49, 46, 48, 32, 38, 38, 32,118, 97,108, 32, 62, 61, 32, 45, 49, 46, 48, 41, 10,
9, 9,111,117,116,118, 97,108, 32, 61, 32, 97, 99,111,115, 40,118, 97,108, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,
diff --git a/source/blender/ikplugin/Makefile b/source/blender/ikplugin/Makefile
index 370ed418464..28726586cc8 100644
--- a/source/blender/ikplugin/Makefile
+++ b/source/blender/ikplugin/Makefile
@@ -12,7 +12,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/ikplugin/intern/Makefile b/source/blender/ikplugin/intern/Makefile
index 0c54e5d1264..352ab90df9d 100644
--- a/source/blender/ikplugin/intern/Makefile
+++ b/source/blender/ikplugin/intern/Makefile
@@ -12,7 +12,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/ikplugin/intern/ikplugin_api.c b/source/blender/ikplugin/intern/ikplugin_api.c
index fe9d116c8ca..cdc4ee11518 100644
--- a/source/blender/ikplugin/intern/ikplugin_api.c
+++ b/source/blender/ikplugin/intern/ikplugin_api.c
@@ -27,7 +27,6 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#include "MEM_guardedalloc.h"
#include "BIK_api.h"
#include "BLI_blenlib.h"
diff --git a/source/blender/imbuf/CMakeLists.txt b/source/blender/imbuf/CMakeLists.txt
index 98cb3dcefd9..49886bdc46f 100644
--- a/source/blender/imbuf/CMakeLists.txt
+++ b/source/blender/imbuf/CMakeLists.txt
@@ -44,19 +44,19 @@ IF(WIN32)
SET(INC ${INC} ${PTHREADS_INC})
ENDIF(WIN32)
-IF(WITH_OPENEXR)
+IF(WITH_IMAGE_OPENEXR)
ADD_DEFINITIONS(-DWITH_OPENEXR)
-ENDIF(WITH_OPENEXR)
+ENDIF(WITH_IMAGE_OPENEXR)
-IF(WITH_TIFF)
+IF(WITH_IMAGE_TIFF)
SET(INC ${INC} ${TIFF_INCLUDE_DIR})
ADD_DEFINITIONS(-DWITH_TIFF)
-ENDIF(WITH_TIFF)
+ENDIF(WITH_IMAGE_TIFF)
-IF(WITH_OPENJPEG)
+IF(WITH_IMAGE_OPENJPEG)
SET(INC ${INC} ${OPENJPEG_INC})
ADD_DEFINITIONS(-DWITH_OPENJPEG)
-ENDIF(WITH_OPENJPEG)
+ENDIF(WITH_IMAGE_OPENJPEG)
IF(WITH_QUICKTIME)
SET(INC ${INC} ../quicktime ${QUICKTIME_INC})
@@ -68,9 +68,16 @@ IF(WITH_FFMPEG)
ADD_DEFINITIONS(-DWITH_FFMPEG)
ENDIF(WITH_FFMPEG)
-IF(WITH_DDS)
+IF(WITH_IMAGE_DDS)
ADD_DEFINITIONS(-DWITH_DDS)
-ENDIF(WITH_DDS)
+ENDIF(WITH_IMAGE_DDS)
+
+IF(WITH_IMAGE_CINEON)
+ ADD_DEFINITIONS(-DWITH_CINEON)
+ENDIF(WITH_IMAGE_CINEON)
+
+IF(WITH_IMAGE_HDR)
+ ADD_DEFINITIONS(-DWITH_HDR)
+ENDIF(WITH_IMAGE_HDR)
BLENDERLIB(bf_imbuf "${SRC}" "${INC}")
-#env.BlenderLib ( libname = 'bf_imbuf', sources = sources, includes = Split(incs), defines = defs, libtype=['core','player'], priority = [80, 40] )
diff --git a/source/blender/imbuf/IMB_imbuf_types.h b/source/blender/imbuf/IMB_imbuf_types.h
index e0dcc344016..203a7268581 100644
--- a/source/blender/imbuf/IMB_imbuf_types.h
+++ b/source/blender/imbuf/IMB_imbuf_types.h
@@ -173,16 +173,22 @@ typedef struct ImBuf {
#define QUICKTIME (1 << 25)
#endif
+#ifdef WITH_HDR
#define RADHDR (1 << 24)
+#endif
+#ifdef WITH_TIFF
#define TIF (1 << 23)
#define TIF_16BIT (1 << 8 )
+#endif
#define OPENEXR (1 << 22)
#define OPENEXR_HALF (1 << 8 )
#define OPENEXR_COMPRESS (7)
+#ifdef WITH_CINEON
#define CINEON (1 << 21)
#define DPX (1 << 20)
+#endif
#ifdef WITH_DDS
#define DDS (1 << 19)
@@ -216,5 +222,9 @@ typedef struct ImBuf {
#define IB_PROFILE_SRGB 2
#define IB_PROFILE_CUSTOM 3
-#endif
+extern const char *imb_ext_image[];
+extern const char *imb_ext_image_qt[];
+extern const char *imb_ext_movie[];
+extern const char *imb_ext_audio[];
+#endif
diff --git a/source/blender/imbuf/Makefile b/source/blender/imbuf/Makefile
index cc9b56b3cd8..78eea89173f 100644
--- a/source/blender/imbuf/Makefile
+++ b/source/blender/imbuf/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/imbuf/SConscript b/source/blender/imbuf/SConscript
index 439cdecdf5b..6b3360a16c5 100644
--- a/source/blender/imbuf/SConscript
+++ b/source/blender/imbuf/SConscript
@@ -26,6 +26,12 @@ if env['WITH_BF_TIFF']:
if env['WITH_BF_DDS']:
defs.append('WITH_DDS')
+if env['WITH_BF_CINEON']:
+ defs.append('WITH_CINEON')
+
+if env['WITH_BF_HDR']:
+ defs.append('WITH_HDR')
+
if env['WITH_BF_FFMPEG']:
defs.append('WITH_FFMPEG')
incs += ' ' + env['BF_FFMPEG_INC']
diff --git a/source/blender/imbuf/intern/Makefile b/source/blender/imbuf/intern/Makefile
index 5f8029ddf72..8e7272100b9 100644
--- a/source/blender/imbuf/intern/Makefile
+++ b/source/blender/imbuf/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
@@ -36,7 +36,12 @@ include nan_subdirs.mk
include nan_compile.mk
include nan_definitions.mk
-DIRS = cineon
+DIRS =
+
+ifeq ($(WITH_CINEON), true)
+ DIRS += cineon
+ CPPFLAGS += -DWITH_CINEON
+endif
ifeq ($(WITH_OPENEXR), true)
DIRS += openexr
@@ -89,3 +94,7 @@ ifeq ($(WITH_TIFF), true)
CPPFLAGS += -DWITH_TIFF
CPPFLAGS += -I$(NAN_TIFF)/include
endif
+
+ifeq ($(WITH_HDR), true)
+ CPPFLAGS += -DWITH_HDR
+endif
diff --git a/source/blender/imbuf/intern/allocimbuf.c b/source/blender/imbuf/intern/allocimbuf.c
index 606913dd590..3f440c0bf6f 100644
--- a/source/blender/imbuf/intern/allocimbuf.c
+++ b/source/blender/imbuf/intern/allocimbuf.c
@@ -42,6 +42,7 @@
#include "imbuf.h"
#include "MEM_CacheLimiterC-Api.h"
+#include "MEM_guardedalloc.h"
void imb_freemipmapImBuf(ImBuf *ibuf)
{
@@ -77,7 +78,7 @@ void imb_freerectImBuf(ImBuf *ibuf)
{
if(ibuf==NULL) return;
- if(ibuf->crect && ibuf->crect != ibuf->rect)
+ if(ibuf->crect)
MEM_freeN(ibuf->crect);
if(ibuf->rect && (ibuf->mall & IB_rect))
diff --git a/source/blender/imbuf/intern/anim.c b/source/blender/imbuf/intern/anim.c
index bfc3433875d..096ed499f85 100644
--- a/source/blender/imbuf/intern/anim.c
+++ b/source/blender/imbuf/intern/anim.c
@@ -60,6 +60,8 @@
#include "BLI_blenlib.h" /* BLI_remlink BLI_filesize BLI_addtail
BLI_countlist BLI_stringdec */
+#include "MEM_guardedalloc.h"
+
#include "DNA_userdef_types.h"
#include "BKE_global.h"
#include "BKE_depsgraph.h"
@@ -685,6 +687,116 @@ static int startffmpeg(struct anim * anim) {
return (0);
}
+static void ffmpeg_postprocess(struct anim * anim, ImBuf * ibuf,
+ int * filter_y)
+{
+ AVFrame * input = anim->pFrame;
+
+ /* This means the data wasnt read properly,
+ this check stops crashing */
+ if (input->data[0]==0 && input->data[1]==0
+ && input->data[2]==0 && input->data[3]==0){
+ fprintf(stderr, "ffmpeg_fetchibuf: "
+ "data not read properly...\n");
+ return;
+ }
+
+ if (anim->ib_flags & IB_animdeinterlace) {
+ if (avpicture_deinterlace(
+ (AVPicture*)
+ anim->pFrameDeinterlaced,
+ (const AVPicture*)
+ anim->pFrame,
+ anim->pCodecCtx->pix_fmt,
+ anim->pCodecCtx->width,
+ anim->pCodecCtx->height)
+ < 0) {
+ *filter_y = 1;
+ } else {
+ input = anim->pFrameDeinterlaced;
+ }
+ }
+
+ if (ENDIAN_ORDER == B_ENDIAN) {
+ int * dstStride = anim->pFrameRGB->linesize;
+ uint8_t** dst = anim->pFrameRGB->data;
+ int dstStride2[4] = { dstStride[0], 0, 0, 0 };
+ uint8_t* dst2[4] = { dst[0], 0, 0, 0 };
+ int x,y,h,w;
+ unsigned char* bottom;
+ unsigned char* top;
+
+ sws_scale(anim->img_convert_ctx,
+ (const uint8_t * const *)input->data,
+ input->linesize,
+ 0,
+ anim->pCodecCtx->height,
+ dst2,
+ dstStride2);
+
+ /* workaround: sws_scale bug
+ sets alpha = 0 and compensate
+ for altivec-bugs and flipy... */
+
+ bottom = (unsigned char*) ibuf->rect;
+ top = bottom + ibuf->x * (ibuf->y-1) * 4;
+
+ h = (ibuf->y + 1) / 2;
+ w = ibuf->x;
+
+ for (y = 0; y < h; y++) {
+ unsigned char tmp[4];
+ unsigned int * tmp_l =
+ (unsigned int*) tmp;
+ tmp[3] = 0xff;
+
+ for (x = 0; x < w; x++) {
+ tmp[0] = bottom[0];
+ tmp[1] = bottom[1];
+ tmp[2] = bottom[2];
+
+ bottom[0] = top[0];
+ bottom[1] = top[1];
+ bottom[2] = top[2];
+ bottom[3] = 0xff;
+
+ *(unsigned int*) top = *tmp_l;
+
+ bottom +=4;
+ top += 4;
+ }
+ top -= 8 * w;
+ }
+ } else {
+ int * dstStride = anim->pFrameRGB->linesize;
+ uint8_t** dst = anim->pFrameRGB->data;
+ int dstStride2[4] = { -dstStride[0], 0, 0, 0 };
+ uint8_t* dst2[4] = { dst[0] + (anim->y - 1)*dstStride[0],
+ 0, 0, 0 };
+ int i;
+ unsigned char* r;
+
+ sws_scale(anim->img_convert_ctx,
+ (const uint8_t * const *)input->data,
+ input->linesize,
+ 0,
+ anim->pCodecCtx->height,
+ dst2,
+ dstStride2);
+
+ r = (unsigned char*) ibuf->rect;
+
+ /* workaround sws_scale bug: older version of
+ sws_scale set alpha = 0... */
+ if (r[3] == 0) {
+ for (i = 0; i < ibuf->x * ibuf->y; i++) {
+ r[3] = 0xff;
+ r += 4;
+ }
+ }
+ }
+}
+
static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position) {
ImBuf * ibuf;
int frameFinished;
@@ -692,6 +804,8 @@ static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position) {
int64_t pts_to_search = 0;
int pos_found = 1;
int filter_y = 0;
+ int seek_by_bytes= 0;
+ int preseek_count = 0;
if (anim == 0) return (0);
@@ -724,6 +838,8 @@ static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position) {
}
}
+ seek_by_bytes = !!(anim->pFormatCtx->iformat->flags & AVFMT_TS_DISCONT);
+
if (position != anim->curposition + 1) {
#ifdef FFMPEG_OLD_FRAME_RATE
double frame_rate =
@@ -737,21 +853,41 @@ static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position) {
double time_base =
av_q2d(anim->pFormatCtx->streams[anim->videoStream]
->time_base);
- long long pos = (long long) (position - anim->preseek)
- * AV_TIME_BASE / frame_rate;
+ long long pos;
long long st_time = anim->pFormatCtx
->streams[anim->videoStream]->start_time;
+ int ret;
- if (pos < 0) {
- pos = 0;
- }
+ if (seek_by_bytes) {
+ pos = position - anim->preseek;
+ if (pos < 0) {
+ pos = 0;
+ }
+ preseek_count = position - pos;
- if (st_time != AV_NOPTS_VALUE) {
- pos += st_time * AV_TIME_BASE * time_base;
+ pos *= anim->pFormatCtx->bit_rate / frame_rate;
+ pos /= 8;
+ } else {
+ pos = (long long) (position - anim->preseek)
+ * AV_TIME_BASE / frame_rate;
+ if (pos < 0) {
+ pos = 0;
+ }
+
+ if (st_time != AV_NOPTS_VALUE) {
+ pos += st_time * AV_TIME_BASE * time_base;
+ }
}
- av_seek_frame(anim->pFormatCtx, -1,
- pos, AVSEEK_FLAG_BACKWARD);
+ ret = av_seek_frame(anim->pFormatCtx, -1,
+ pos,
+ AVSEEK_FLAG_BACKWARD | (
+ seek_by_bytes
+ ? AVSEEK_FLAG_ANY
+ | AVSEEK_FLAG_BYTE : 0));
+ if (ret < 0) {
+ fprintf(stderr, "error while seeking: %d\n", ret);
+ }
pts_to_search = (long long)
(((double) position) / time_base / frame_rate);
@@ -769,132 +905,28 @@ static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position) {
anim->pFrame, &frameFinished,
packet.data, packet.size);
- if (frameFinished && !pos_found) {
- if (packet.dts >= pts_to_search) {
- pos_found = 1;
- anim->curposition = position;
- }
- }
-
- if(frameFinished && pos_found == 1) {
- AVFrame * input = anim->pFrame;
-
- /* This means the data wasnt read properly,
- this check stops crashing */
- if (input->data[0]==0 && input->data[1]==0
- && input->data[2]==0 && input->data[3]==0){
- av_free_packet(&packet);
- break;
- }
-
- if (anim->ib_flags & IB_animdeinterlace) {
- if (avpicture_deinterlace(
- (AVPicture*)
- anim->pFrameDeinterlaced,
- (const AVPicture*)
- anim->pFrame,
- anim->pCodecCtx->pix_fmt,
- anim->pCodecCtx->width,
- anim->pCodecCtx->height)
- < 0) {
- filter_y = 1;
- } else {
- input = anim->pFrameDeinterlaced;
- }
- }
+ if (seek_by_bytes && preseek_count > 0) {
+ preseek_count--;
+ }
- if (ENDIAN_ORDER == B_ENDIAN) {
- int * dstStride
- = anim->pFrameRGB->linesize;
- uint8_t** dst = anim->pFrameRGB->data;
- int dstStride2[4]
- = { dstStride[0], 0, 0, 0 };
- uint8_t* dst2[4]= {
- dst[0], 0, 0, 0 };
- int x,y,h,w;
- unsigned char* bottom;
- unsigned char* top;
-
- sws_scale(anim->img_convert_ctx,
- (const uint8_t * const *)input->data,
- input->linesize,
- 0,
- anim->pCodecCtx->height,
- dst2,
- dstStride2);
-
- /* workaround: sws_scale
- sets alpha = 0 and compensate
- for altivec-bugs and flipy... */
-
- bottom = (unsigned char*) ibuf->rect;
- top = bottom
- + ibuf->x * (ibuf->y-1) * 4;
-
- h = (ibuf->y + 1) / 2;
- w = ibuf->x;
-
- for (y = 0; y < h; y++) {
- unsigned char tmp[4];
- unsigned int * tmp_l =
- (unsigned int*) tmp;
- tmp[3] = 0xff;
-
- for (x = 0; x < w; x++) {
- tmp[0] = bottom[0];
- tmp[1] = bottom[1];
- tmp[2] = bottom[2];
-
- bottom[0] = top[0];
- bottom[1] = top[1];
- bottom[2] = top[2];
- bottom[3] = 0xff;
-
- *(unsigned int*) top
- = *tmp_l;
-
- bottom +=4;
- top += 4;
- }
- top -= 8 * w;
+ if (frameFinished && !pos_found) {
+ if (seek_by_bytes) {
+ if (!preseek_count) {
+ pos_found = 1;
+ anim->curposition = position;
}
-
- av_free_packet(&packet);
- break;
} else {
- int * dstStride
- = anim->pFrameRGB->linesize;
- uint8_t** dst = anim->pFrameRGB->data;
- int dstStride2[4]
- = { -dstStride[0], 0, 0, 0 };
- uint8_t* dst2[4]= {
- dst[0]
- + (anim->y - 1)*dstStride[0],
- 0, 0, 0 };
- int i;
- unsigned char* r;
-
- sws_scale(anim->img_convert_ctx,
- (const uint8_t * const *)input->data,
- input->linesize,
- 0,
- anim->pCodecCtx->height,
- dst2,
- dstStride2);
-
- /* workaround: sws_scale
- sets alpha = 0... */
-
- r = (unsigned char*) ibuf->rect;
-
- for (i = 0; i < ibuf->x * ibuf->y;i++){
- r[3] = 0xff;
- r+=4;
+ if (packet.dts >= pts_to_search) {
+ pos_found = 1;
+ anim->curposition = position;
}
-
- av_free_packet(&packet);
- break;
}
+ }
+
+ if(frameFinished && pos_found == 1) {
+ ffmpeg_postprocess(anim, ibuf, &filter_y);
+ av_free_packet(&packet);
+ break;
}
}
diff --git a/source/blender/imbuf/intern/cache.c b/source/blender/imbuf/intern/cache.c
index d15826df2f0..77e01d8ebef 100644
--- a/source/blender/imbuf/intern/cache.c
+++ b/source/blender/imbuf/intern/cache.c
@@ -20,6 +20,8 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#include "MEM_guardedalloc.h"
+
#include "BLI_ghash.h"
#include "BLI_listbase.h"
#include "BLI_memarena.h"
diff --git a/source/blender/imbuf/intern/cineon/CMakeLists.txt b/source/blender/imbuf/intern/cineon/CMakeLists.txt
index 588be3305d9..cd887b6fc4e 100644
--- a/source/blender/imbuf/intern/cineon/CMakeLists.txt
+++ b/source/blender/imbuf/intern/cineon/CMakeLists.txt
@@ -38,4 +38,3 @@ SET(INC
)
BLENDERLIB(bf_cineon "${SRC}" "${INC}")
-#env.BlenderLib ('bf_cineon', source_files, incs, defs, libtype=['core','player'], priority = [90, 200])
diff --git a/source/blender/imbuf/intern/cineon/Makefile b/source/blender/imbuf/intern/cineon/Makefile
index 99a9a5dbd46..6e940d530a9 100644
--- a/source/blender/imbuf/intern/cineon/Makefile
+++ b/source/blender/imbuf/intern/cineon/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/imbuf/intern/dds/CMakeLists.txt b/source/blender/imbuf/intern/dds/CMakeLists.txt
index 364dd41e744..376dd3d61f4 100644
--- a/source/blender/imbuf/intern/dds/CMakeLists.txt
+++ b/source/blender/imbuf/intern/dds/CMakeLists.txt
@@ -37,9 +37,8 @@ SET(INC
../../../../../intern/guardedalloc
)
-if(WITH_DDS)
+if(WITH_IMAGE_DDS)
ADD_DEFINITIONS(-DWITH_DDS)
-ENDIF(WITH_DDS)
+ENDIF(WITH_IMAGE_DDS)
BLENDERLIB(bf_dds "${SRC}" "${INC}")
-#env.BlenderLib ('bf_dds', source_files, incs, defs, libtype=['core','player'], priority = [90, 200])
diff --git a/source/blender/imbuf/intern/dds/Makefile b/source/blender/imbuf/intern/dds/Makefile
index e14f9320d19..d4f04382899 100644
--- a/source/blender/imbuf/intern/dds/Makefile
+++ b/source/blender/imbuf/intern/dds/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/imbuf/intern/filetype.c b/source/blender/imbuf/intern/filetype.c
index c2140e12013..db2eef759dc 100644
--- a/source/blender/imbuf/intern/filetype.c
+++ b/source/blender/imbuf/intern/filetype.c
@@ -60,14 +60,18 @@ ImFileType IMB_FILE_TYPES[]= {
{NULL, NULL, imb_is_a_png, imb_ftype_default, imb_loadpng, imb_savepng, NULL, 0, PNG},
{NULL, NULL, imb_is_a_bmp, imb_ftype_default, imb_bmp_decode, imb_savebmp, NULL, 0, BMP},
{NULL, NULL, imb_is_a_targa, imb_ftype_default, imb_loadtarga, imb_savetarga, NULL, 0, TGA},
+#ifdef WITH_CINEON
{NULL, NULL, imb_is_dpx, imb_ftype_default, imb_loaddpx, imb_save_dpx, NULL, IM_FTYPE_FLOAT, DPX},
{NULL, NULL, imb_is_cineon, imb_ftype_default, imb_loadcineon, imb_savecineon, NULL, IM_FTYPE_FLOAT, CINEON},
+#endif
#ifdef WITH_TIFF
{imb_inittiff, NULL, imb_is_a_tiff, imb_ftype_default, imb_loadtiff, imb_savetiff, imb_loadtiletiff, 0, TIF},
#elif defined(__APPLE__) && defined(IMBUF_COCOA)
{NULL, NULL, imb_is_a_cocoa, imb_ftype_cocoa, imb_imb_cocoaLoadImage, imb_savecocoa, NULL, 0, TIF},
#endif
+#ifdef WITH_HDR
{NULL, NULL, imb_is_a_hdr, imb_ftype_default, imb_loadhdr, imb_savehdr, NULL, IM_FTYPE_FLOAT, RADHDR},
+#endif
#ifdef WITH_OPENEXR
{NULL, NULL, imb_is_a_openexr, imb_ftype_default, imb_load_openexr, imb_save_openexr, NULL, IM_FTYPE_FLOAT, OPENEXR},
#endif
diff --git a/source/blender/imbuf/intern/filter.c b/source/blender/imbuf/intern/filter.c
index 3ee05da15c9..3cc266e460e 100644
--- a/source/blender/imbuf/intern/filter.c
+++ b/source/blender/imbuf/intern/filter.c
@@ -30,6 +30,7 @@
*/
#include "BKE_utildefines.h"
+#include "MEM_guardedalloc.h"
#include "IMB_imbuf_types.h"
#include "IMB_imbuf.h"
diff --git a/source/blender/imbuf/intern/imageprocess.c b/source/blender/imbuf/intern/imageprocess.c
index 4450394e9e6..8fa76fa4502 100644
--- a/source/blender/imbuf/intern/imageprocess.c
+++ b/source/blender/imbuf/intern/imageprocess.c
@@ -129,7 +129,7 @@ void bicubic_interpolation_color(struct ImBuf *in, unsigned char *outI, float *o
unsigned char *dataI;
float a,b,w,wx,wy[4], outR,outG,outB,outA,*dataF;
- /* ImBuf in must have a valid rect or rect_float, assume this is alredy checked */
+ /* ImBuf in must have a valid rect or rect_float, assume this is already checked */
i= (int)floor(u);
j= (int)floor(v);
@@ -245,7 +245,7 @@ void bilinear_interpolation_color(struct ImBuf *in, unsigned char *outI, float *
int y1, y2, x1, x2;
- /* ImBuf in must have a valid rect or rect_float, assume this is alredy checked */
+ /* ImBuf in must have a valid rect or rect_float, assume this is already checked */
x1= (int)floor(u);
x2= (int)ceil(u);
@@ -319,7 +319,7 @@ void bilinear_interpolation_color_wrap(struct ImBuf *in, unsigned char *outI, fl
int y1, y2, x1, x2;
- /* ImBuf in must have a valid rect or rect_float, assume this is alredy checked */
+ /* ImBuf in must have a valid rect or rect_float, assume this is already checked */
x1= (int)floor(u);
x2= (int)ceil(u);
@@ -393,7 +393,7 @@ void neareast_interpolation_color(struct ImBuf *in, unsigned char *outI, float *
unsigned char *dataI;
int y1, x1;
- /* ImBuf in must have a valid rect or rect_float, assume this is alredy checked */
+ /* ImBuf in must have a valid rect or rect_float, assume this is already checked */
x1= (int)(u);
y1= (int)(v);
diff --git a/source/blender/imbuf/intern/imbuf.h b/source/blender/imbuf/intern/imbuf.h
index 047795355b3..1e2f3ec461a 100644
--- a/source/blender/imbuf/intern/imbuf.h
+++ b/source/blender/imbuf/intern/imbuf.h
@@ -51,8 +51,6 @@
#include <sys/mman.h>
#endif
-#include "MEM_guardedalloc.h"
-
#if !defined(WIN32)
#define O_BINARY 0
#endif
diff --git a/source/blender/imbuf/intern/iris.c b/source/blender/imbuf/intern/iris.c
index dc9c7a1dc3b..c676c401ccd 100644
--- a/source/blender/imbuf/intern/iris.c
+++ b/source/blender/imbuf/intern/iris.c
@@ -30,7 +30,10 @@
*/
#include <string.h>
+
#include "BLI_blenlib.h"
+#include "MEM_guardedalloc.h"
+
#include "imbuf.h"
#include "IMB_imbuf_types.h"
#include "IMB_imbuf.h"
diff --git a/source/blender/imbuf/intern/jp2.c b/source/blender/imbuf/intern/jp2.c
index a76c6e780ca..558eaedf8b2 100644
--- a/source/blender/imbuf/intern/jp2.c
+++ b/source/blender/imbuf/intern/jp2.c
@@ -23,6 +23,8 @@
#ifdef WITH_OPENJPEG
+#include "MEM_guardedalloc.h"
+
#include "BLI_blenlib.h"
#include "BLI_math.h"
@@ -287,7 +289,7 @@ struct ImBuf *imb_jp2_decode(unsigned char *mem, int size, int flags)
/*
-2048x1080 (2K) at 24 fps or 48 fps, or 4096x2160 (4K) at 24 fps; 3×12 bits per pixel, XYZ color space
+2048x1080 (2K) at 24 fps or 48 fps, or 4096x2160 (4K) at 24 fps; 3x12 bits per pixel, XYZ color space
* In 2K, for Scope (2.39:1) presentation 2048x858 pixels of the imager is used
* In 2K, for Flat (1.85:1) presentation 1998x1080 pixels of the imager is used
diff --git a/source/blender/imbuf/intern/jpeg.c b/source/blender/imbuf/intern/jpeg.c
index 3803aa9a8b2..2bae7228220 100644
--- a/source/blender/imbuf/intern/jpeg.c
+++ b/source/blender/imbuf/intern/jpeg.c
@@ -156,7 +156,10 @@ static void skip_input_data(j_decompress_ptr cinfo, long num_bytes)
{
my_src_ptr src = (my_src_ptr) cinfo->src;
- src->pub.next_input_byte = src->pub.next_input_byte + num_bytes;
+ if(num_bytes > 0) {
+ src->pub.next_input_byte = src->pub.next_input_byte + num_bytes;
+ src->pub.bytes_in_buffer = src->pub.bytes_in_buffer - num_bytes;
+ }
}
diff --git a/source/blender/imbuf/intern/openexr/CMakeLists.txt b/source/blender/imbuf/intern/openexr/CMakeLists.txt
index 7dc295a8aae..cfc977ff155 100644
--- a/source/blender/imbuf/intern/openexr/CMakeLists.txt
+++ b/source/blender/imbuf/intern/openexr/CMakeLists.txt
@@ -38,9 +38,8 @@ SET(INC
${OPENEXR_INC}
)
-IF(WITH_OPENEXR)
+IF(WITH_IMAGE_OPENEXR)
ADD_DEFINITIONS(-DWITH_OPENEXR)
-ENDIF(WITH_OPENEXR)
+ENDIF(WITH_IMAGE_OPENEXR)
BLENDERLIB(bf_openexr "${SRC}" "${INC}")
-#env.BlenderLib ('bf_openexr', source_files, incs, defs, libtype=['core','player'], priority = [90, 200])
diff --git a/source/blender/imbuf/intern/openexr/Makefile b/source/blender/imbuf/intern/openexr/Makefile
index 083089b11d5..820b2aeb003 100644
--- a/source/blender/imbuf/intern/openexr/Makefile
+++ b/source/blender/imbuf/intern/openexr/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/imbuf/intern/openexr/openexr_api.cpp b/source/blender/imbuf/intern/openexr/openexr_api.cpp
index a0969979817..9b68e0e45eb 100644
--- a/source/blender/imbuf/intern/openexr/openexr_api.cpp
+++ b/source/blender/imbuf/intern/openexr/openexr_api.cpp
@@ -267,6 +267,8 @@ static int imb_save_openexr_half(struct ImBuf *ibuf, char *name, int flags)
if(ibuf->profile == IB_PROFILE_LINEAR_RGB) {
for (int i = ibuf->y-1; i >= 0; i--)
{
+ from= (unsigned char *)ibuf->rect + channels*i*width;
+
for (int j = ibuf->x; j > 0; j--)
{
to->r = (float)(from[0])/255.0;
@@ -280,6 +282,8 @@ static int imb_save_openexr_half(struct ImBuf *ibuf, char *name, int flags)
else {
for (int i = ibuf->y-1; i >= 0; i--)
{
+ from= (unsigned char *)ibuf->rect + channels*i*width;
+
for (int j = ibuf->x; j > 0; j--)
{
to->r = srgb_to_linearrgb((float)from[0] / 255.0);
diff --git a/source/blender/imbuf/intern/png.c b/source/blender/imbuf/intern/png.c
index 68a3324816c..6344b227174 100644
--- a/source/blender/imbuf/intern/png.c
+++ b/source/blender/imbuf/intern/png.c
@@ -31,6 +31,7 @@
#include "png.h"
#include "BLI_blenlib.h"
+#include "MEM_guardedalloc.h"
#include "imbuf.h"
@@ -103,6 +104,11 @@ int imb_savepng(struct ImBuf *ibuf, char *name, int flags)
int i, bytesperpixel, color_type = PNG_COLOR_TYPE_GRAY;
FILE *fp = 0;
+ /* use the jpeg quality setting for compression */
+ int compression;
+ compression= (int)(((float)(ibuf->ftype & 0xff) / 11.1111f));
+ compression= compression < 0 ? 0 : (compression > 9 ? 9 : compression);
+
bytesperpixel = (ibuf->depth + 7) >> 3;
if ((bytesperpixel > 4) || (bytesperpixel == 2)) {
printf("imb_savepng: unsupported bytes per pixel: %d\n", bytesperpixel);
@@ -201,10 +207,10 @@ int imb_savepng(struct ImBuf *ibuf, char *name, int flags)
PNG_FILTER_AVG | PNG_FILTER_VALUE_AVG |
PNG_FILTER_PAETH | PNG_FILTER_VALUE_PAETH|
PNG_ALL_FILTERS);
-
- png_set_compression_level(png_ptr, Z_BEST_COMPRESSION);
*/
+ png_set_compression_level(png_ptr, compression);
+
// png image settings
png_set_IHDR(png_ptr,
info_ptr,
diff --git a/source/blender/imbuf/intern/radiance_hdr.c b/source/blender/imbuf/intern/radiance_hdr.c
index dabb6780ea3..c5122ebe46c 100644
--- a/source/blender/imbuf/intern/radiance_hdr.c
+++ b/source/blender/imbuf/intern/radiance_hdr.c
@@ -29,6 +29,8 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#ifdef WITH_HDR
+
/* ----------------------------------------------------------------------
Radiance High Dynamic Range image file IO
For description and code for reading/writing of radiance hdr files
@@ -40,6 +42,9 @@
#ifdef WIN32
#include <io.h>
#endif
+
+#include "MEM_guardedalloc.h"
+
#include "BLI_blenlib.h"
#include "imbuf.h"
@@ -358,3 +363,4 @@ int imb_savehdr(struct ImBuf *ibuf, char *name, int flags)
return 1;
}
+#endif /* WITH_HDR */
diff --git a/source/blender/imbuf/intern/rotate.c b/source/blender/imbuf/intern/rotate.c
index e0e52bb7094..4edb7ac7877 100644
--- a/source/blender/imbuf/intern/rotate.c
+++ b/source/blender/imbuf/intern/rotate.c
@@ -30,7 +30,8 @@
*/
#include "BLI_blenlib.h"
-#include "BKE_utildefines.h"
+#include "BKE_utildefines.h"
+#include "MEM_guardedalloc.h"
#include "imbuf.h"
#include "IMB_imbuf_types.h"
diff --git a/source/blender/imbuf/intern/scaling.c b/source/blender/imbuf/intern/scaling.c
index 335e16402f9..f26eec51b03 100644
--- a/source/blender/imbuf/intern/scaling.c
+++ b/source/blender/imbuf/intern/scaling.c
@@ -30,6 +30,7 @@
*/
#include "BLI_blenlib.h"
+#include "MEM_guardedalloc.h"
#include "imbuf.h"
#include "IMB_imbuf_types.h"
diff --git a/source/blender/imbuf/intern/targa.c b/source/blender/imbuf/intern/targa.c
index 09aaccc1ab6..b5434b85b5a 100644
--- a/source/blender/imbuf/intern/targa.c
+++ b/source/blender/imbuf/intern/targa.c
@@ -31,6 +31,7 @@
#include <io.h>
#endif
#include "BLI_blenlib.h"
+#include "MEM_guardedalloc.h"
#include "imbuf.h"
diff --git a/source/blender/imbuf/intern/thumbs.c b/source/blender/imbuf/intern/thumbs.c
index 234c8837b35..f3415d44ecb 100644
--- a/source/blender/imbuf/intern/thumbs.c
+++ b/source/blender/imbuf/intern/thumbs.c
@@ -29,7 +29,6 @@
#include <stdio.h>
-#include "BKE_global.h"
#include "BKE_utildefines.h"
#include "BLI_blenlib.h"
#include "MEM_guardedalloc.h"
@@ -243,14 +242,14 @@ void IMB_thumb_makedirs()
/* create thumbnail for file and returns new imbuf for thumbnail */
ImBuf* IMB_thumb_create(const char* path, ThumbSize size, ThumbSource source, ImBuf *img)
{
- char uri[URI_MAX];
+ char uri[URI_MAX]= "";
char desc[URI_MAX+22];
char tpath[FILE_MAX];
char tdir[FILE_MAX];
char temp[FILE_MAX];
- char mtime[40];
- char cwidth[40];
- char cheight[40];
+ char mtime[40]= "0"; /* incase we can't stat the file */
+ char cwidth[40]= "0"; /* incase images have no data */
+ char cheight[40]= "0";
char thumb[40];
short tsize = 128;
short ex, ey;
@@ -265,7 +264,7 @@ ImBuf* IMB_thumb_create(const char* path, ThumbSize size, ThumbSource source, Im
tsize = 256;
break;
case THB_FAIL:
- tsize = 0;
+ tsize = 1;
break;
default:
return 0; /* unknown size */
@@ -281,7 +280,7 @@ ImBuf* IMB_thumb_create(const char* path, ThumbSize size, ThumbSource source, Im
return NULL;
}
if (size == THB_FAIL) {
- img = IMB_allocImBuf(0,0,32, IB_rect | IB_metadata, 0);
+ img = IMB_allocImBuf(1,1,32, IB_rect | IB_metadata, 0);
if (!img) return 0;
} else {
if (THB_SOURCE_IMAGE == source || THB_SOURCE_BLEND == source) {
diff --git a/source/blender/imbuf/intern/thumbs_blend.c b/source/blender/imbuf/intern/thumbs_blend.c
index 7f1c903e9de..cb27b1a647f 100644
--- a/source/blender/imbuf/intern/thumbs_blend.c
+++ b/source/blender/imbuf/intern/thumbs_blend.c
@@ -40,16 +40,14 @@
static ImBuf *loadblend_thumb(gzFile gzfile)
{
- char buf[8];
- int code= 0;
+ char buf[12];
+ int bhead[24/sizeof(int)]; /* max size on 64bit */
char endian, pointer_size;
char endian_switch;
- int len, im_len, x, y;
- ImBuf *img= NULL;
-
+ int sizeof_bhead ;
/* read the blend file header */
- if(gzread(gzfile, buf, 8) != 8)
+ if(gzread(gzfile, buf, 12) != 12)
return NULL;
if(strncmp(buf, "BLENDER", 7))
return NULL;
@@ -61,38 +59,23 @@ static ImBuf *loadblend_thumb(gzFile gzfile)
else
return NULL;
- /* read the next 4 bytes, only need the first char, ignore the version */
- /* endian and vertsion (ignored) */
- if(gzread(gzfile, buf, 4) != 4)
- return NULL;
+ sizeof_bhead = 16 + pointer_size;
- if(buf[0]=='V')
+ if(buf[8]=='V')
endian= B_ENDIAN; /* big: PPC */
- else if(buf[0]=='v')
+ else if(buf[8]=='v')
endian= L_ENDIAN; /* little: x86 */
else
return NULL;
- while(gzread(gzfile, &code, sizeof(int)) == sizeof(int)) {
- endian_switch = ((ENDIAN_ORDER != endian)) ? 1 : 0;
-
- if(gzread(gzfile, buf, sizeof(int)) != sizeof(int))
- return NULL;
-
- len = *( (int *)((void *)buf) );
+ endian_switch = ((ENDIAN_ORDER != endian)) ? 1 : 0;
+ while(gzread(gzfile, bhead, sizeof_bhead) == sizeof_bhead) {
if(endian_switch)
- SWITCH_INT(len);
+ SWITCH_INT(bhead[1]); /* length */
- /* finally read the rest of the bhead struct, pointer and 2 ints */
- if(gzread(gzfile, buf, pointer_size) != pointer_size)
- return NULL;
- if(gzread(gzfile, buf, sizeof(int) * 2) != sizeof(int) * 2)
- return NULL;
-
- /* we dont actually care whats in the bhead */
- if (code==REND) {
- gzseek(gzfile, len, SEEK_CUR); /* skip to the next */
+ if (bhead[0]==REND) {
+ gzseek(gzfile, bhead[1], SEEK_CUR); /* skip to the next */
}
else {
break;
@@ -100,35 +83,36 @@ static ImBuf *loadblend_thumb(gzFile gzfile)
}
/* using 'TEST' since new names segfault when loading in old blenders */
- if(code != TEST)
- return NULL;
-
- if(gzread(gzfile, &x, sizeof(int)) != sizeof(int))
- return NULL;
- if(gzread(gzfile, &y, sizeof(int)) != sizeof(int))
- return NULL;
-
- len -= sizeof(int) * 2;
-
- if(endian_switch) {
- SWITCH_INT(x);
- SWITCH_INT(y);
- }
+ if(bhead[0] == TEST) {
+ ImBuf *img= NULL;
+ int size[2];
- /* inconsistant image size, quit early */
- im_len = x * y * sizeof(int);
- if(im_len != len)
- return NULL;
+ if(gzread(gzfile, size, sizeof(size)) != sizeof(size))
+ return NULL;
- /* finally malloc and read the data */
- img= IMB_allocImBuf(x, y, 32, IB_rect | IB_metadata, 0);
+ if(endian_switch) {
+ SWITCH_INT(size[0]);
+ SWITCH_INT(size[1]);
+ }
+ /* length */
+ bhead[1] -= sizeof(int) * 2;
- if(gzread(gzfile, img->rect, len) != len) {
- IMB_freeImBuf(img);
- img= NULL;
+ /* inconsistant image size, quit early */
+ if(bhead[1] != size[0] * size[1] * sizeof(int))
+ return NULL;
+
+ /* finally malloc and read the data */
+ img= IMB_allocImBuf(size[0], size[1], 32, IB_rect | IB_metadata, 0);
+
+ if(gzread(gzfile, img->rect, bhead[1]) != bhead[1]) {
+ IMB_freeImBuf(img);
+ img= NULL;
+ }
+
+ return img;
}
-
- return img;
+
+ return NULL;
}
ImBuf *IMB_loadblend_thumb(const char *path)
diff --git a/source/blender/imbuf/intern/tiff.c b/source/blender/imbuf/intern/tiff.c
index 99f74fea640..6b94583f17d 100644
--- a/source/blender/imbuf/intern/tiff.c
+++ b/source/blender/imbuf/intern/tiff.c
@@ -301,17 +301,6 @@ int imb_is_a_tiff(unsigned char *mem)
(memcmp(lil_endian, mem, IMB_TIFF_NCB) == 0) );
}
-static void scanline_contig_8bit(unsigned char *rect, unsigned char *cbuf, int scanline_w, int spp)
-{
- int i;
- for (i=0; i < scanline_w; i++) {
- rect[i*4 + 0] = cbuf[i*spp + 0];
- rect[i*4 + 1] = cbuf[i*spp + 1];
- rect[i*4 + 2] = cbuf[i*spp + 2];
- rect[i*4 + 3] = (spp==4)?cbuf[i*spp + 3]:255;
- }
-}
-
static void scanline_contig_16bit(float *rectf, unsigned short *sbuf, int scanline_w, int spp)
{
int i;
@@ -334,13 +323,6 @@ static void scanline_contig_32bit(float *rectf, float *fbuf, int scanline_w, int
}
}
-static void scanline_separate_8bit(unsigned char *rect, unsigned char *cbuf, int scanline_w, int chan)
-{
- int i;
- for (i=0; i < scanline_w; i++)
- rect[i*4 + chan] = cbuf[i];
-}
-
static void scanline_separate_16bit(float *rectf, unsigned short *sbuf, int scanline_w, int chan)
{
int i;
@@ -356,40 +338,6 @@ static void scanline_separate_32bit(float *rectf, float *fbuf, int scanline_w, i
}
-#if 0
-/*
- * Use the libTIFF RGBAImage API to read a TIFF image.
- * This function uses the "RGBA Image" support from libtiff, which enables
- * it to load most commonly-encountered TIFF formats. libtiff handles format
- * conversion, color depth conversion, etc.
- */
-static int imb_read_tiff_pixels_rgba(ImBuf *ibuf, TIFF *image, int premul)
-{
- ImBuf *tmpibuf;
- int success;
-
- tmpibuf= IMB_allocImBuf(ibuf->x, ibuf->y, 32, IB_rect, 0);
- success= TIFFReadRGBAImage(image, ibuf->x, ibuf->y, tmpibuf->rect, 0);
-
- if(ENDIAN_ORDER == B_ENDIAN)
- IMB_convert_rgba_to_abgr(tmpibuf);
- if(premul) {
- IMB_premultiply_alpha(tmpibuf);
- ibuf->flags |= IB_premul;
- }
-
- /* assign rect last */
- ibuf->rect= tmpibuf->rect;
- ibuf->mall |= IB_rect;
- ibuf->flags |= IB_rect;
-
- tmpibuf->mall &= ~IB_rect;
- IMB_freeImBuf(tmpibuf);
-
- return success;
-}
-#endif
-
/*
* Use the libTIFF scanline API to read a TIFF image.
* This method is most flexible and can handle multiple different bit depths
@@ -398,13 +346,12 @@ static int imb_read_tiff_pixels_rgba(ImBuf *ibuf, TIFF *image, int premul)
static int imb_read_tiff_pixels(ImBuf *ibuf, TIFF *image, int premul)
{
ImBuf *tmpibuf;
- int success;
+ int success= 0;
short bitspersample, spp, config;
size_t scanline;
int ib_flag=0, row, chan;
float *fbuf=NULL;
unsigned short *sbuf=NULL;
- unsigned char *cbuf=NULL;
TIFFGetField(image, TIFFTAG_BITSPERSAMPLE, &bitspersample);
TIFFGetField(image, TIFFTAG_SAMPLESPERPIXEL, &spp); /* number of 'channels' */
@@ -417,30 +364,28 @@ static int imb_read_tiff_pixels(ImBuf *ibuf, TIFF *image, int premul)
} else if (bitspersample == 16) {
ib_flag = IB_rectfloat;
sbuf = (unsigned short *)_TIFFmalloc(scanline);
- } else if (bitspersample == 8) {
+ } else {
ib_flag = IB_rect;
- cbuf = (unsigned char *)_TIFFmalloc(scanline);
}
tmpibuf= IMB_allocImBuf(ibuf->x, ibuf->y, ibuf->depth, ib_flag, 0);
+ /* simple RGBA image */
+ if (!(bitspersample == 32 || bitspersample == 16)) {
+ success |= TIFFReadRGBAImage(image, ibuf->x, ibuf->y, tmpibuf->rect, 0);
+ }
/* contiguous channels: RGBRGBRGB */
- if (config == PLANARCONFIG_CONTIG) {
+ else if (config == PLANARCONFIG_CONTIG) {
for (row = 0; row < ibuf->y; row++) {
int ib_offset = ibuf->x*ibuf->y*4 - ibuf->x*4 * (row+1);
if (bitspersample == 32) {
- success = TIFFReadScanline(image, fbuf, row, 0);
+ success |= TIFFReadScanline(image, fbuf, row, 0);
scanline_contig_32bit(tmpibuf->rect_float+ib_offset, fbuf, ibuf->x, spp);
} else if (bitspersample == 16) {
- success = TIFFReadScanline(image, sbuf, row, 0);
+ success |= TIFFReadScanline(image, sbuf, row, 0);
scanline_contig_16bit(tmpibuf->rect_float+ib_offset, sbuf, ibuf->x, spp);
-
- } else if (bitspersample == 8) {
- unsigned char *crect = (unsigned char*)tmpibuf->rect;
- success = TIFFReadScanline(image, cbuf, row, 0);
- scanline_contig_8bit(crect+ib_offset, cbuf, ibuf->x, spp);
}
}
/* separate channels: RRRGGGBBB */
@@ -456,53 +401,47 @@ static int imb_read_tiff_pixels(ImBuf *ibuf, TIFF *image, int premul)
if (chan == 3 && spp == 3) /* fill alpha if only RGB TIFF */
memset(fbuf, 1.0, sizeof(fbuf));
else
- success = TIFFReadScanline(image, fbuf, row, chan);
+ success |= TIFFReadScanline(image, fbuf, row, chan);
scanline_separate_32bit(tmpibuf->rect_float+ib_offset, fbuf, ibuf->x, chan);
} else if (bitspersample == 16) {
if (chan == 3 && spp == 3) /* fill alpha if only RGB TIFF */
memset(sbuf, 65535, sizeof(sbuf));
else
- success = TIFFReadScanline(image, sbuf, row, chan);
+ success |= TIFFReadScanline(image, sbuf, row, chan);
scanline_separate_16bit(tmpibuf->rect_float+ib_offset, sbuf, ibuf->x, chan);
- } else if (bitspersample == 8) {
- unsigned char *crect = (unsigned char*)tmpibuf->rect;
- if (chan == 3 && spp == 3) /* fill alpha if only RGB TIFF */
- memset(cbuf, 255, sizeof(cbuf));
- else
- success = TIFFReadScanline(image, cbuf, row, chan);
- scanline_separate_8bit(crect+ib_offset, cbuf, ibuf->x, chan);
}
}
}
}
- ibuf->profile = (bitspersample==32)?IB_PROFILE_LINEAR_RGB:IB_PROFILE_SRGB;
-
if (bitspersample == 32)
_TIFFfree(fbuf);
else if (bitspersample == 16)
_TIFFfree(sbuf);
- else if (bitspersample == 8)
- _TIFFfree(cbuf);
+
+ if(success) {
+ ibuf->profile = (bitspersample==32)?IB_PROFILE_LINEAR_RGB:IB_PROFILE_SRGB;
+
+ if(ENDIAN_ORDER == B_ENDIAN)
+ IMB_convert_rgba_to_abgr(tmpibuf);
+ if(premul) {
+ IMB_premultiply_alpha(tmpibuf);
+ ibuf->flags |= IB_premul;
+ }
- if(ENDIAN_ORDER == B_ENDIAN)
- IMB_convert_rgba_to_abgr(tmpibuf);
- if(premul) {
- IMB_premultiply_alpha(tmpibuf);
- ibuf->flags |= IB_premul;
+ /* assign rect last */
+ if (tmpibuf->rect_float)
+ ibuf->rect_float= tmpibuf->rect_float;
+ else
+ ibuf->rect= tmpibuf->rect;
+ ibuf->mall |= ib_flag;
+ ibuf->flags |= ib_flag;
+
+ tmpibuf->mall &= ~ib_flag;
}
-
- /* assign rect last */
- if (tmpibuf->rect_float)
- ibuf->rect_float= tmpibuf->rect_float;
- else
- ibuf->rect= tmpibuf->rect;
- ibuf->mall |= ib_flag;
- ibuf->flags |= ib_flag;
-
- tmpibuf->mall &= ~ib_flag;
+
IMB_freeImBuf(tmpibuf);
return success;
@@ -847,4 +786,4 @@ int imb_savetiff(ImBuf *ibuf, char *name, int flags)
return (1);
}
-#endif /* WITH_TIFF */ \ No newline at end of file
+#endif /* WITH_TIFF */
diff --git a/source/blender/imbuf/intern/util.c b/source/blender/imbuf/intern/util.c
index e6f4e226caa..cd447e5e43a 100644
--- a/source/blender/imbuf/intern/util.c
+++ b/source/blender/imbuf/intern/util.c
@@ -68,6 +68,80 @@
#define UTIL_DEBUG 0
+const char *imb_ext_image[] = {
+ ".png",
+ ".tga",
+ ".bmp",
+ ".jpg", ".jpeg",
+ ".sgi", ".rgb", ".rgba",
+#ifdef WITH_TIFF
+ ".tif", ".tiff", ".tx",
+#endif
+#ifdef WITH_OPENJPEG
+ ".jp2",
+#endif
+#ifdef WITH_HDR
+ ".hdr",
+#endif
+#ifdef WITH_DDS
+ ".dds",
+#endif
+#ifdef WITH_CINEON
+ ".dpx",
+ ".cin",
+#endif
+#ifdef WITH_OPENEXR
+ ".exr",
+#endif
+ NULL};
+
+const char *imb_ext_image_qt[] = {
+ ".gif",
+ ".psd",
+ ".pct", ".pict",
+ ".pntg",
+ ".qtif",
+ NULL};
+
+const char *imb_ext_movie[] = {
+ ".avi",
+ ".flc",
+ ".mov",
+ ".movie",
+ ".mp4",
+ ".m4v",
+ ".m2v",
+ ".m2t",
+ ".mts",
+ ".mv",
+ ".avs",
+ ".wmv",
+ ".ogv",
+ ".dv",
+ ".mpeg",
+ ".mpg",
+ ".mpg2",
+ ".vob",
+ ".mkv",
+ ".flv",
+ ".divx",
+ ".xvid",
+ NULL};
+
+/* sort of wrong being here... */
+const char *imb_ext_audio[] = {
+ ".wav",
+ ".ogg",
+ ".oga",
+ ".mp3",
+ ".mp2",
+ ".ac3",
+ ".aac",
+ ".flac",
+ ".wma",
+ ".eac3",
+ NULL};
+
static int IMB_ispic_name(char *name)
{
ImFileType *type;
@@ -105,80 +179,16 @@ static int IMB_ispic_name(char *name)
int IMB_ispic(char *filename)
{
if(U.uiflag & USER_FILTERFILEEXTS) {
- if (BLI_testextensie(filename, ".tif")
- || BLI_testextensie(filename, ".tiff")
- || BLI_testextensie(filename, ".tx")) {
- return IMB_ispic_name(filename);
+ if( (BLI_testextensie_array(filename, imb_ext_image)) ||
+ (G.have_quicktime && BLI_testextensie_array(filename, imb_ext_image_qt))
+ ) {
+ return IMB_ispic_name(filename);
}
- if (G.have_quicktime){
- if( BLI_testextensie(filename, ".jpg")
- || BLI_testextensie(filename, ".jpeg")
-#ifdef WITH_TIFF
- || BLI_testextensie(filename, ".tif")
- || BLI_testextensie(filename, ".tiff")
- || BLI_testextensie(filename, ".tx")
-#endif
- || BLI_testextensie(filename, ".hdr")
- || BLI_testextensie(filename, ".tga")
- || BLI_testextensie(filename, ".rgb")
- || BLI_testextensie(filename, ".bmp")
- || BLI_testextensie(filename, ".png")
-#ifdef WITH_DDS
- || BLI_testextensie(filename, ".dds")
-#endif
- || BLI_testextensie(filename, ".iff")
- || BLI_testextensie(filename, ".lbm")
- || BLI_testextensie(filename, ".gif")
- || BLI_testextensie(filename, ".psd")
- || BLI_testextensie(filename, ".pct")
- || BLI_testextensie(filename, ".pict")
- || BLI_testextensie(filename, ".pntg") //macpaint
- || BLI_testextensie(filename, ".qtif")
- || BLI_testextensie(filename, ".cin")
-#ifdef WITH_BF_OPENEXR
- || BLI_testextensie(filename, ".exr")
-#endif
-#ifdef WITH_BF_OPENJPEG
- || BLI_testextensie(filename, ".jp2")
-#endif
- || BLI_testextensie(filename, ".sgi")) {
- return IMB_ispic_name(filename);
- } else {
- return(FALSE);
- }
- } else { /* no quicktime */
- if( BLI_testextensie(filename, ".jpg")
- || BLI_testextensie(filename, ".jpeg")
-#ifdef WITH_TIFF
- || BLI_testextensie(filename, ".tif")
- || BLI_testextensie(filename, ".tiff")
- || BLI_testextensie(filename, ".tx")
-#endif
- || BLI_testextensie(filename, ".hdr")
- || BLI_testextensie(filename, ".tga")
- || BLI_testextensie(filename, ".rgb")
- || BLI_testextensie(filename, ".bmp")
- || BLI_testextensie(filename, ".png")
- || BLI_testextensie(filename, ".cin")
-#ifdef WITH_DDS
- || BLI_testextensie(filename, ".dds")
-#endif
-#ifdef WITH_BF_OPENEXR
- || BLI_testextensie(filename, ".exr")
-#endif
-#ifdef WITH_BF_OPENJPEG
- || BLI_testextensie(filename, ".jp2")
-#endif
- || BLI_testextensie(filename, ".iff")
- || BLI_testextensie(filename, ".lbm")
- || BLI_testextensie(filename, ".sgi")) {
- return IMB_ispic_name(filename);
- }
- else {
- return(FALSE);
- }
+ else {
+ return FALSE;
}
- } else { /* no FILTERFILEEXTS */
+ }
+ else { /* no FILTERFILEEXTS */
return IMB_ispic_name(filename);
}
}
diff --git a/source/blender/makesdna/DNA_ID.h b/source/blender/makesdna/DNA_ID.h
index 76468ada523..49c2df42810 100644
--- a/source/blender/makesdna/DNA_ID.h
+++ b/source/blender/makesdna/DNA_ID.h
@@ -164,7 +164,6 @@ typedef struct PreviewImage {
#define ID_MA MAKE_ID2('M', 'A') /* Material */
#define ID_TE MAKE_ID2('T', 'E') /* Texture */
#define ID_IM MAKE_ID2('I', 'M') /* Image */
-#define ID_WV MAKE_ID2('W', 'V') /* Wave (unused) */
#define ID_LT MAKE_ID2('L', 'T') /* Lattice */
#define ID_LA MAKE_ID2('L', 'A') /* Lamp */
#define ID_CA MAKE_ID2('C', 'A') /* Camera */
diff --git a/source/blender/makesdna/DNA_action_types.h b/source/blender/makesdna/DNA_action_types.h
index d0f15b78ada..f7bbf9235ab 100644
--- a/source/blender/makesdna/DNA_action_types.h
+++ b/source/blender/makesdna/DNA_action_types.h
@@ -33,9 +33,8 @@
#include "DNA_listBase.h"
#include "DNA_ID.h"
-#include "DNA_gpencil_types.h"
#include "DNA_view2d_types.h"
-#include "DNA_userdef_types.h"
+#include "DNA_userdef_types.h" /* ThemeWireColor */
struct SpaceLink;
struct Object;
diff --git a/source/blender/makesdna/DNA_actuator_types.h b/source/blender/makesdna/DNA_actuator_types.h
index 03200b784b4..76bb9a5f96f 100644
--- a/source/blender/makesdna/DNA_actuator_types.h
+++ b/source/blender/makesdna/DNA_actuator_types.h
@@ -37,9 +37,6 @@ struct Scene;
struct Group;
struct Text;
-// for Sound3D
-#include "DNA_sound_types.h"
-
/* ****************** ACTUATORS ********************* */
/* unused now, moved to editobjectactuator in 2.02. Still needed for dna */
@@ -61,6 +58,18 @@ typedef struct bActionActuator {
float stridelength; /* Displacement incurred by cycle */ // not in use
} bActionActuator;
+typedef struct Sound3D
+{
+ float min_gain;
+ float max_gain;
+ float reference_distance;
+ float max_distance;
+ float rolloff_factor;
+ float cone_inner_angle;
+ float cone_outer_angle;
+ float cone_outer_gain;
+} Sound3D;
+
typedef struct bSoundActuator {
short flag, sndnr;
int pad1, pad2;
@@ -236,13 +245,6 @@ typedef struct bActuator {
} bActuator;
-typedef struct FreeCamera {
- float mass, accelleration;
- float maxspeed, maxrotspeed, maxtiltspeed;
- int flag;
- float rotdamp, tiltdamp, speeddamp, pad;
-} FreeCamera;
-
/* objectactuator->flag */
#define ACT_FORCE_LOCAL 1
#define ACT_TORQUE_LOCAL 2
diff --git a/source/blender/makesdna/DNA_brush_types.h b/source/blender/makesdna/DNA_brush_types.h
index 3b2ce6b436e..1492319fe22 100644
--- a/source/blender/makesdna/DNA_brush_types.h
+++ b/source/blender/makesdna/DNA_brush_types.h
@@ -31,7 +31,7 @@
#define DNA_BRUSH_TYPES_H
#include "DNA_ID.h"
-#include "DNA_texture_types.h"
+#include "DNA_texture_types.h" /* for MTex */
//#ifndef MAX_MTEX // XXX Not used?
//#define MAX_MTEX 18
@@ -53,11 +53,15 @@ typedef struct Brush {
struct BrushClone clone;
struct CurveMapping *curve; /* falloff curve */
struct MTex mtex;
- struct Image *image_icon;
+
+ struct ImBuf *icon_imbuf;
+ PreviewImage *preview;
+ char icon_filepath[240];
float normal_weight;
- short blend, pad; /* blend mode */
+ short blend; /* blend mode */
+ short ob_mode; /* & with ob->mode to see if the brush is compatible, use for display only. */
int size; /* brush diameter */
int flag; /* general purpose flag */
float jitter; /* jitter the position of the brush */
@@ -121,6 +125,7 @@ typedef struct Brush {
#define BRUSH_RANDOM_ROTATION (1<<25)
#define BRUSH_PLANE_TRIM (1<<26)
#define BRUSH_FRONTFACE (1<<27)
+#define BRUSH_CUSTOM_ICON (1<<28)
/* Brush.sculpt_tool */
#define SCULPT_TOOL_DRAW 1
diff --git a/source/blender/makesdna/DNA_color_types.h b/source/blender/makesdna/DNA_color_types.h
index 83cd7979ce7..3c1ef478626 100644
--- a/source/blender/makesdna/DNA_color_types.h
+++ b/source/blender/makesdna/DNA_color_types.h
@@ -48,6 +48,8 @@ typedef struct CurveMapPoint {
#define CUMA_SELECT 1
#define CUMA_VECTOR 2
+struct CurveMapPoint;
+
typedef struct CurveMap {
short totpoint, flag;
diff --git a/source/blender/makesdna/DNA_constraint_types.h b/source/blender/makesdna/DNA_constraint_types.h
index f310e5e55e0..dbd9be14c0e 100644
--- a/source/blender/makesdna/DNA_constraint_types.h
+++ b/source/blender/makesdna/DNA_constraint_types.h
@@ -33,7 +33,6 @@
#include "DNA_ID.h"
#include "DNA_listBase.h"
-#include "DNA_object_types.h"
struct Action;
struct Text;
@@ -82,7 +81,7 @@ typedef struct bConstraint {
typedef struct bConstraintTarget {
struct bConstraintTarget *next, *prev;
- Object *tar; /* object to use as target */
+ struct Object *tar; /* object to use as target */
char subtarget[32]; /* subtarget - pchan or vgroup name */
float matrix[4][4]; /* matrix used during constraint solving - should be cleared before each use */
@@ -118,7 +117,7 @@ typedef struct bPythonConstraint {
ListBase targets; /* a list of targets that this constraint has (bConstraintTarget-s) */
- Object *tar; /* target from previous implementation (version-patch sets this to NULL on file-load) */
+ struct Object *tar; /* target from previous implementation (version-patch sets this to NULL on file-load) */
char subtarget[32]; /* subtarger from previous implentation (version-patch sets this to "" on file-load) */
} bPythonConstraint;
@@ -130,13 +129,13 @@ typedef struct bPythonConstraint {
This is indicated in the comments for each field
*/
typedef struct bKinematicConstraint {
- Object *tar; /* All: target object in case constraint needs a target */
+ struct Object *tar; /* All: target object in case constraint needs a target */
short iterations; /* All: Maximum number of iterations to try */
short flag; /* All & CopyPose: some options Like CONSTRAINT_IK_TIP */
short rootbone; /* All: index to rootbone, if zero go all the way to mother bone */
short max_rootbone; /* CopyPose: for auto-ik, maximum length of chain */
char subtarget[32]; /* All: String to specify sub-object target */
- Object *poletar; /* All: Pole vector target */
+ struct Object *poletar; /* All: Pole vector target */
char polesubtarget[32]; /* All: Pole vector sub-object target */
float poleangle; /* All: Pole vector rest angle */
float weight; /* All: Weight of constraint in IK tree */
@@ -160,7 +159,7 @@ typedef enum B_CONSTRAINT_IK_TYPE {
*/
typedef struct bSplineIKConstraint {
/* target(s) */
- Object *tar; /* curve object (with follow path enabled) which drives the bone chain */
+ struct Object *tar; /* curve object (with follow path enabled) which drives the bone chain */
/* binding details */
float *points; /* array of numpoints items, denoting parametric positions along curve that joints should follow */
@@ -177,7 +176,7 @@ typedef struct bSplineIKConstraint {
/* Track To Constraint */
typedef struct bTrackToConstraint {
- Object *tar;
+ struct Object *tar;
int reserved1; /* I'll be using reserved1 and reserved2 as Track and Up flags, not sure if that's what they were intented for anyway. Not sure either if it would create backward incompatibility if I were to rename them. - theeth*/
int reserved2;
int flags;
@@ -187,7 +186,7 @@ typedef struct bTrackToConstraint {
/* Copy Rotation Constraint */
typedef struct bRotateLikeConstraint {
- Object *tar;
+ struct Object *tar;
int flag;
int reserved1;
char subtarget[32];
@@ -195,7 +194,7 @@ typedef struct bRotateLikeConstraint {
/* Copy Location Constraint */
typedef struct bLocateLikeConstraint {
- Object *tar;
+ struct Object *tar;
int flag;
int reserved1;
char subtarget[32];
@@ -203,7 +202,7 @@ typedef struct bLocateLikeConstraint {
/* Copy Scale Constraint */
typedef struct bSizeLikeConstraint {
- Object *tar;
+ struct Object *tar;
int flag;
int reserved1;
char subtarget[32];
@@ -217,13 +216,13 @@ typedef struct bSameVolumeConstraint {
/* Copy Transform Constraint */
typedef struct bTransLikeConstraint {
- Object *tar;
+ struct Object *tar;
char subtarget[32];
} bTransLikeConstraint;
/* Floor Constraint */
typedef struct bMinMaxConstraint {
- Object *tar;
+ struct Object *tar;
int minmaxflag;
float offset;
int flag;
@@ -234,7 +233,7 @@ typedef struct bMinMaxConstraint {
/* Action Constraint */
typedef struct bActionConstraint {
- Object *tar;
+ struct Object *tar;
short type; /* what transform 'channel' drives the result */
short local; /* was used in versions prior to the Constraints recode */
int start;
@@ -248,7 +247,7 @@ typedef struct bActionConstraint {
/* Locked Axis Tracking constraint */
typedef struct bLockTrackConstraint {
- Object *tar;
+ struct Object *tar;
int trackflag;
int lockflag;
char subtarget[32];
@@ -256,7 +255,7 @@ typedef struct bLockTrackConstraint {
/* Damped Tracking constraint */
typedef struct bDampTrackConstraint {
- Object *tar;
+ struct Object *tar;
int trackflag;
int pad;
char subtarget[32];
@@ -264,7 +263,7 @@ typedef struct bDampTrackConstraint {
/* Follow Path constraints */
typedef struct bFollowPathConstraint {
- Object *tar; /* Must be path object */
+ struct Object *tar; /* Must be path object */
float offset; /* Offset in time on the path (in frames), when NOT using 'fixed position' */
float offset_fac; /* Parametric offset factor defining position along path, when using 'fixed position' */
@@ -277,7 +276,7 @@ typedef struct bFollowPathConstraint {
/* Stretch to constraint */
typedef struct bStretchToConstraint {
- Object *tar;
+ struct Object *tar;
int volmode;
int plane;
float orglength;
@@ -287,8 +286,8 @@ typedef struct bStretchToConstraint {
/* Rigid Body constraint */
typedef struct bRigidBodyJointConstraint {
- Object *tar;
- Object *child;
+ struct Object *tar;
+ struct Object *child;
int type;
float pivX;
float pivY;
@@ -307,14 +306,14 @@ typedef struct bRigidBodyJointConstraint {
/* Clamp-To Constraint */
typedef struct bClampToConstraint {
- Object *tar; /* 'target' must be a curve */
+ struct Object *tar; /* 'target' must be a curve */
int flag; /* which axis/plane to compare owner's location on */
int flag2; /* for legacy reasons, this is flag2. used for any extra settings */
} bClampToConstraint;
/* Child Of Constraint */
typedef struct bChildOfConstraint {
- Object *tar; /* object which will act as parent (or target comes from) */
+ struct Object *tar; /* object which will act as parent (or target comes from) */
int flag; /* settings */
int pad;
float invmat[4][4]; /* parent-inverse matrix to use */
@@ -323,7 +322,7 @@ typedef struct bChildOfConstraint {
/* Generic Transform->Transform Constraint */
typedef struct bTransformConstraint {
- Object *tar; /* target (i.e. 'driver' object/bone) */
+ struct Object *tar; /* target (i.e. 'driver' object/bone) */
char subtarget[32];
short from, to; /* can be loc(0) , rot(1), or size(2) */
@@ -342,7 +341,7 @@ typedef struct bPivotConstraint {
/* Pivot Point:
* Either target object + offset, or just offset is used
*/
- Object *tar; /* target object (optional) */
+ struct Object *tar; /* target object (optional) */
char subtarget[32]; /* subtarget name (optional) */
float offset[3]; /* offset from the target to use, regardless of whether it exists */
@@ -385,7 +384,7 @@ typedef struct bSizeLimitConstraint {
/* Limit Distance Constraint */
typedef struct bDistLimitConstraint {
- Object *tar;
+ struct Object *tar;
char subtarget[32];
float dist; /* distance (radius of clamping sphere) from target */
@@ -398,7 +397,7 @@ typedef struct bDistLimitConstraint {
/* ShrinkWrap Constraint */
typedef struct bShrinkwrapConstraint {
- Object *target;
+ struct Object *target;
float dist; /* distance to kept from target */
short shrinkType; /* shrink type (look on MOD shrinkwrap for values) */
char projAxis; /* axis to project over UP_X, UP_Y, UP_Z */
diff --git a/source/blender/makesdna/DNA_curve_types.h b/source/blender/makesdna/DNA_curve_types.h
index d27ab8f125d..8537b703c69 100644
--- a/source/blender/makesdna/DNA_curve_types.h
+++ b/source/blender/makesdna/DNA_curve_types.h
@@ -48,6 +48,7 @@ struct VFont;
struct AnimData;
struct SelBox;
struct EditFont;
+struct GHash;
/* These two Lines with # tell makesdna this struct can be excluded. */
#
@@ -150,6 +151,19 @@ typedef struct TextBox {
float x, y, w, h;
} TextBox;
+typedef struct EditNurb {
+ /* base of nurbs' list (old Curve->editnurb) */
+ ListBase nurbs;
+
+ /* index data for shape keys */
+ struct GHash *keyindex;
+
+ /* shape key being edited */
+ int shapenr;
+
+ char pad[4];
+} EditNurb;
+
typedef struct Curve {
ID id;
struct AnimData *adt; /* animation data (must be immediately after id for utilities to use it) */
@@ -159,7 +173,7 @@ typedef struct Curve {
ListBase nurb; /* actual data, called splines in rna */
ListBase disp;
- ListBase *editnurb; /* edited data, not in file, use pointer so we can check for it */
+ EditNurb *editnurb; /* edited data, not in file, use pointer so we can check for it */
struct Object *bevobj, *taperobj, *textoncurve;
struct Ipo *ipo; // XXX depreceated... old animation system
@@ -236,7 +250,7 @@ typedef struct Curve {
#define CU_PATH 8
#define CU_FOLLOW 16
#define CU_UV_ORCO 32
-#define CU_NOPUNOFLIP 64
+#define CU_DEFORM_BOUNDS_OFF 64
#define CU_STRETCH 128
#define CU_OFFS_PATHDIST 256
#define CU_FAST 512 /* Font: no filling inside editmode */
@@ -328,9 +342,13 @@ typedef enum eBezTriple_KeyframeType {
#define CU_CHINFO_BOLD (1<<0)
#define CU_CHINFO_ITALIC (1<<1)
#define CU_CHINFO_UNDERLINE (1<<2)
-#define CU_CHINFO_WRAP (1<<3) /* wordwrap occured here */
+#define CU_CHINFO_WRAP (1<<3) /* wordwrap occurred here */
#define CU_CHINFO_SMALLCAPS (1<<4)
#define CU_CHINFO_SMALLCAPS_CHECK (1<<5) /* set at runtime, checks if case switching is needed */
+/* mixed with KEY_LINEAR but define here since only curve supports */
+#define KEY_CU_EASE 3
+
+
#endif
diff --git a/source/blender/makesdna/DNA_image_types.h b/source/blender/makesdna/DNA_image_types.h
index 1695ceb73a5..d1aa3c00ac4 100644
--- a/source/blender/makesdna/DNA_image_types.h
+++ b/source/blender/makesdna/DNA_image_types.h
@@ -105,7 +105,7 @@ typedef struct Image {
/* **************** IMAGE ********************* */
-/* flag */
+/* Image.flag */
#define IMA_FIELDS 1
#define IMA_STD_FIELD 2
#define IMA_DO_PREMUL 4
@@ -115,7 +115,7 @@ typedef struct Image {
#define IMA_DEPRECATED 64
#define IMA_OLD_PREMUL 128
-/* tpageflag */
+/* Image.tpageflag */
#define IMA_TILES 1
#define IMA_TWINANIM 2
#define IMA_COLCYCLE 4 /* Depreciated */
diff --git a/source/blender/makesdna/DNA_lattice_types.h b/source/blender/makesdna/DNA_lattice_types.h
index 3a0fcb3c38c..94fc9fefb66 100644
--- a/source/blender/makesdna/DNA_lattice_types.h
+++ b/source/blender/makesdna/DNA_lattice_types.h
@@ -36,6 +36,14 @@ struct Ipo;
struct Key;
struct MDeformVert;
+typedef struct EditLatt {
+ struct Lattice *latt;
+
+ int shapenr;
+
+ char pad[4];
+} EditLatt;
+
typedef struct Lattice {
ID id;
@@ -58,7 +66,7 @@ typedef struct Lattice {
float *latticedata;
float latmat[4][4];
- struct Lattice *editlatt;
+ struct EditLatt *editlatt;
} Lattice;
/* ***************** LATTICE ********************* */
diff --git a/source/blender/makesdna/DNA_mesh_types.h b/source/blender/makesdna/DNA_mesh_types.h
index e29dfd6894b..82a03cb4e1b 100644
--- a/source/blender/makesdna/DNA_mesh_types.h
+++ b/source/blender/makesdna/DNA_mesh_types.h
@@ -145,8 +145,8 @@ typedef struct TFace {
/* me->flag */
-#define ME_ISDONE 1
-#define ME_NOPUNOFLIP 2
+/* #define ME_ISDONE 1 */
+#define ME_DEPRECATED 2
#define ME_TWOSIDED 4
#define ME_UVEFFECT 8
#define ME_VCOLEFFECT 16
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index 722adba1136..27f9c9cd5f3 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -66,6 +66,9 @@ typedef enum ModifierType {
eModifierType_ShapeKey,
eModifierType_Solidify,
eModifierType_Screw,
+ /* placeholder, keep this so durian files load in
+ * trunk with the correct modifier once its merged */
+ eModifierType_Warp,
NUM_MODIFIER_TYPES
} ModifierType;
diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index 872d69f3148..e3ac90bf881 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -314,6 +314,7 @@ typedef struct NodeColorBalance {
/* temp storage for inverted lift */
float lift_lgg[3];
+ float gamma_inv[3];
} NodeColorBalance;
typedef struct NodeColorspill {
diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h
index 4fe1072b673..096fd319a17 100644
--- a/source/blender/makesdna/DNA_object_types.h
+++ b/source/blender/makesdna/DNA_object_types.h
@@ -35,7 +35,7 @@
#include "DNA_listBase.h"
#include "DNA_ID.h"
-#include "DNA_action_types.h"
+#include "DNA_action_types.h" /* bAnimVizSettings */
#ifdef __cplusplus
extern "C" {
@@ -301,7 +301,7 @@ extern Object workob;
#define OB_LAMP 10
#define OB_CAMERA 11
-#define OB_WAVE 21
+// #define OB_WAVE 21
#define OB_LATTICE 22
/* 23 and 24 are for life and sector (old file compat.) */
@@ -556,6 +556,8 @@ typedef enum ObjectMode {
OB_MODE_POSE = 64
} ObjectMode;
+#define MAX_DUPLI_RECUR 8
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index 3ac11eabe54..cc5d256615e 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -36,12 +36,12 @@
extern "C" {
#endif
-#include "DNA_brush_types.h"
#include "DNA_vec_types.h"
#include "DNA_listBase.h"
#include "DNA_ID.h"
struct Object;
+struct Brush;
struct World;
struct Scene;
struct Image;
@@ -345,7 +345,7 @@ typedef struct RenderData {
short bake_normal_space, bake_quad_split;
float bake_maxdist, bake_biasdist, bake_pad;
- /* paths to backbufffer, output, ftype */
+ /* paths to backbufffer, output */
char backbuf[160], pic[160];
/* stamps flags. */
@@ -507,9 +507,7 @@ typedef struct TimeMarker {
} TimeMarker;
typedef struct Paint {
- /* Array of brushes selected for use in this paint mode */
- Brush **brushes;
- int active_brush_index, brush_count;
+ struct Brush *brush;
/* WM Paint cursor */
void *paint_cursor;
@@ -724,8 +722,16 @@ typedef struct ToolSettings {
/* Transform */
short snap_mode, snap_flag, snap_target;
short proportional, prop_mode;
+ char proportional_objects; /* proportional edit, object mode */
+ char pad[3];
- int auto_normalize, intpad; /*auto normalizing mode in wpaint*/
+ int auto_normalize; /*auto normalizing mode in wpaint*/
+
+ short sculpt_paint_settings; /* user preferences for sculpt and paint */
+ short pad1;
+ int sculpt_paint_unified_size; /* unified radius of brush in pixels */
+ float sculpt_paint_unified_unprojected_radius;/* unified radius of brush in Blender units */
+ float sculpt_paint_unified_alpha; /* unified strength of brush */
} ToolSettings;
typedef struct bStats {
@@ -789,6 +795,7 @@ typedef struct Scene {
void *sound_scene;
void *sound_scene_handle;
+ void *sound_scrub_handle;
void *fps_info; /* (runtime) info/cache used for presenting playback framerate info to the user */
@@ -953,8 +960,8 @@ typedef struct Scene {
/* imtype */
#define R_TARGA 0
#define R_IRIS 1
-#define R_HAMX 2
-#define R_FTYPE 3 /* ftype is nomore */
+/* #define R_HAMX 2 */ /* hamx is nomore */
+/* #define R_FTYPE 3 */ /* ftype is nomore */
#define R_JPEG90 4
#define R_MOVIE 5
#define R_IRIZ 7
@@ -1141,6 +1148,13 @@ typedef enum SculptFlags {
SCULPT_USE_OPENMP = (1<<7),
} SculptFlags;
+/* sculpt_paint_settings */
+#define SCULPT_PAINT_USE_UNIFIED_SIZE (1<<0)
+#define SCULPT_PAINT_USE_UNIFIED_ALPHA (1<<1)
+#define SCULPT_PAINT_UNIFIED_LOCK_BRUSH_SIZE (1<<2)
+#define SCULPT_PAINT_UNIFIED_SIZE_PRESSURE (1<<3)
+#define SCULPT_PAINT_UNIFIED_ALPHA_PRESSURE (1<<4)
+
/* ImagePaintSettings.flag */
#define IMAGEPAINT_DRAWING 1
#define IMAGEPAINT_DRAW_TOOL 2
diff --git a/source/blender/makesdna/DNA_sdna_types.h b/source/blender/makesdna/DNA_sdna_types.h
index 9b486e2851d..f2bdfeff9dd 100644
--- a/source/blender/makesdna/DNA_sdna_types.h
+++ b/source/blender/makesdna/DNA_sdna_types.h
@@ -47,7 +47,7 @@ typedef struct SDNA {
short *typelens; /* type lengths */
int nr_structs; /* number of struct types */
- short **structs; /* sp= structs[a] is the adress of a struct definintion
+ short **structs; /* sp= structs[a] is the address of a struct definintion
sp[0] is struct type number, sp[1] amount of members
(sp[2], sp[3]), (sp[4], sp[5]), .. are the member
diff --git a/source/blender/makesdna/DNA_sequence_types.h b/source/blender/makesdna/DNA_sequence_types.h
index a5299ef081d..d51dec97351 100644
--- a/source/blender/makesdna/DNA_sequence_types.h
+++ b/source/blender/makesdna/DNA_sequence_types.h
@@ -32,12 +32,11 @@
#define DNA_SEQUENCE_TYPES_H
#include "DNA_listBase.h"
-
-/* needed for sound support */
-#include "DNA_sound_types.h"
+#include "DNA_vec_types.h"
struct Ipo;
struct Scene;
+struct bSound;
/* strlens; 80= FILE_MAXFILE, 160= FILE_MAXDIR */
@@ -45,15 +44,6 @@ typedef struct StripElem {
char name[80];
} StripElem;
-typedef struct TStripElem {
- struct ImBuf *ibuf;
- struct ImBuf *ibuf_comp;
- struct TStripElem *se1, *se2, *se3;
- short ok;
- short flag;
- int nr;
-} TStripElem;
-
typedef struct StripCrop {
int top;
int bottom;
@@ -96,11 +86,6 @@ typedef struct Strip {
StripCrop *crop;
StripTransform *transform;
StripColorBalance *color_balance;
- TStripElem *tstripdata;
- TStripElem *tstripdata_startstill;
- TStripElem *tstripdata_endstill;
- struct ImBuf *ibuf_startstill;
- struct ImBuf *ibuf_endstill;
} Strip;
diff --git a/source/blender/makesdna/DNA_smoke_types.h b/source/blender/makesdna/DNA_smoke_types.h
index 46e5c10be3b..b8be51b378f 100644
--- a/source/blender/makesdna/DNA_smoke_types.h
+++ b/source/blender/makesdna/DNA_smoke_types.h
@@ -33,8 +33,8 @@
#define MOD_SMOKE_HIGHRES (1<<1) /* enable high resolution */
#define MOD_SMOKE_DISSOLVE (1<<2) /* let smoke dissolve */
#define MOD_SMOKE_DISSOLVE_LOG (1<<3) /* using 1/x for dissolve */
-#define MOD_SMOKE_INITVELOCITY (1<<4) /* passes particles speed to
- the smoke*/
+
+#define MOD_SMOKE_HIGH_SMOOTH (1<<5) /* smoothens high res emission*/
/* noise */
#define MOD_SMOKE_NOISEWAVE (1<<0)
@@ -47,6 +47,11 @@
#define SM_CACHE_LIGHT 0
#define SM_CACHE_HEAVY 1
+/* domain border collision */
+#define SM_BORDER_OPEN 0
+#define SM_BORDER_VERTICAL 1
+#define SM_BORDER_CLOSED 2
+
typedef struct SmokeDomainSettings {
struct SmokeModifierData *smd; /* for fast RNA access */
struct FLUID_3D *fluid;
@@ -84,6 +89,10 @@ typedef struct SmokeDomainSettings {
struct PointCache *point_cache[2]; /* definition is in DNA_object_force.h */
struct ListBase ptcaches[2];
struct EffectorWeights *effector_weights;
+ int border_collisions; /* How domain border collisions are handled */
+ float time_scale;
+ float vorticity;
+ int pad2;
} SmokeDomainSettings;
@@ -92,18 +101,25 @@ typedef struct SmokeDomainSettings {
/* type */
#define MOD_SMOKE_FLOW_TYPE_OUTFLOW (1<<1)
+/* flags */
+#define MOD_SMOKE_FLOW_ABSOLUTE (1<<1) /*old style emission*/
+#define MOD_SMOKE_FLOW_INITVELOCITY (1<<2) /* passes particles speed to
+ the smoke*/
+
+
typedef struct SmokeFlowSettings {
struct SmokeModifierData *smd; /* for fast RNA access */
struct ParticleSystem *psys;
float density;
float temp; /* delta temperature (temp - ambient temp) */
- float velocity[3]; /* UNUSED, velocity taken from particles */
+ float velocity[2]; /* UNUSED, velocity taken from particles */
+ float vel_multi; // Multiplier for particle velocity
float vgrp_heat_scale[2]; /* min and max scaling for vgroup_heat */
short vgroup_flow; /* where inflow/outflow happens - red=1=action */
short vgroup_density;
short vgroup_heat;
short type; /* inflow =0 or outflow = 1 */
- int pad;
+ int flags; /* absolute emission etc*/
} SmokeFlowSettings;
/*
diff --git a/source/blender/makesdna/DNA_sound_types.h b/source/blender/makesdna/DNA_sound_types.h
index 45dff0c96fa..c10d306565b 100644
--- a/source/blender/makesdna/DNA_sound_types.h
+++ b/source/blender/makesdna/DNA_sound_types.h
@@ -41,18 +41,6 @@ struct Ipo;
struct PackedFile;
struct SpaceLink;
-typedef struct Sound3D
-{
- float min_gain;
- float max_gain;
- float reference_distance;
- float max_distance;
- float rolloff_factor;
- float cone_inner_angle;
- float cone_outer_angle;
- float cone_outer_gain;
-} Sound3D;
-
typedef struct bSound {
ID id;
@@ -115,22 +103,6 @@ typedef enum eSound_Type {
#define SND_DRAWFRAMES 1
#define SND_CFRA_NUM 2
-typedef struct SpaceSound {
- struct SpaceLink *next, *prev;
- ListBase regionbase; /* storage of regions for inactive spaces */
- int spacetype;
- float blockscale;
- struct ScrArea *area;
-
- View2D v2d;
-
- bSound *sound;
- short mode, sndnr;
- short xof, yof;
- short flag, lock;
- int pad2;
-} SpaceSound;
-
#define SOUND_FLAGS_3D (1 << 3)
/* to DNA_sound_types.h*/
diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h
index ba9d0380c9f..bf64bc27b48 100644
--- a/source/blender/makesdna/DNA_space_types.h
+++ b/source/blender/makesdna/DNA_space_types.h
@@ -42,6 +42,7 @@
struct ID;
struct Text;
struct Script;
+struct bSound;
struct ImBuf;
struct Image;
struct Scopes;
@@ -160,6 +161,7 @@ typedef struct FileSelectParams {
char dir[240]; /* directory */
char file[80]; /* file */
char renamefile[80];
+ char renameedit[80]; /* annoying but the first is only used for initialization */
short type; /* XXXXX for now store type here, should be moved to the operator */
short flag; /* settings for filter, hiding dots files,... */
@@ -302,7 +304,8 @@ typedef struct SpaceText {
int showlinenrs;
int tabnumber;
- int showsyntax;
+ short showsyntax;
+ short line_hlight;
short overwrite;
short live_edit; /* run python while editing, evil */
float pix_per_line;
@@ -550,6 +553,22 @@ typedef struct SpaceUserPref {
} SpaceUserPref;
+typedef struct SpaceSound {
+ struct SpaceLink *next, *prev;
+ ListBase regionbase; /* storage of regions for inactive spaces */
+ int spacetype;
+ float blockscale;
+ struct ScrArea *area;
+
+ View2D v2d;
+
+ struct bSound *sound;
+ short mode, sndnr;
+ short xof, yof;
+ short flag, lock;
+ int pad2;
+} SpaceSound;
+
/* view3d Now in DNA_view3d_types.h */
diff --git a/source/blender/makesdna/DNA_texture_types.h b/source/blender/makesdna/DNA_texture_types.h
index e7a5a6e5f56..e9e058cbbd6 100644
--- a/source/blender/makesdna/DNA_texture_types.h
+++ b/source/blender/makesdna/DNA_texture_types.h
@@ -32,7 +32,7 @@
#define DNA_TEXTURE_TYPES_H
#include "DNA_ID.h"
-#include "DNA_image_types.h"
+#include "DNA_image_types.h" /* ImageUser */
struct AnimData;
struct Ipo;
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h
index 8a14aaa1820..97dd99c5abe 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -33,7 +33,7 @@
#define DNA_USERDEF_TYPES_H
#include "DNA_listBase.h"
-#include "DNA_texture_types.h"
+#include "DNA_texture_types.h" /* ColorBand */
/* themes; defines in BIF_resource.h */
struct ColorBand;
@@ -344,10 +344,10 @@ typedef struct UserDef {
short gp_settings;
short tb_leftmouse, tb_rightmouse;
struct SolidLight light[3];
- short sculpt_paint_settings; /* user preferences for sculpt and paint */
short tw_hotspot, tw_flag, tw_handlesize, tw_size;
short textimeout,texcollectrate;
short wmdrawmethod; /* removed wmpad */
+ short pad2;
int memcachelimit;
int prefetchframes;
short frameserverport;
@@ -367,7 +367,7 @@ typedef struct UserDef {
short scrcastfps; /* frame rate for screencast to be played back */
short scrcastwait; /* milliseconds between screencast snapshots */
- short propwidth, pad[3]; /* Value for Dual/Single Column UI */
+ short pad8, pad[3]; /* Value for Dual/Single Column UI */
char versemaster[160];
char verseuser[160];
@@ -378,10 +378,8 @@ typedef struct UserDef {
struct ColorBand coba_weight; /* from texture.h */
- int sculpt_paint_unified_size; /* unified radius of brush in pixels */
- float sculpt_paint_unified_unprojected_radius;/* unified radius of brush in Blender units */
- float sculpt_paint_unified_alpha; /* unified strength of brush */
float sculpt_paint_overlay_col[3];
+ int pad3;
} UserDef;
extern UserDef U; /* from blenkernel blender.c */
@@ -533,11 +531,6 @@ extern UserDef U; /* from blenkernel blender.c */
#define GP_PAINT_DOSMOOTH (1<<0)
#define GP_PAINT_DOSIMPLIFY (1<<1)
-/* sculpt_paint_settings */
-#define SCULPT_PAINT_USE_UNIFIED_SIZE (1<<0)
-#define SCULPT_PAINT_USE_UNIFIED_ALPHA (1<<1)
-#define SCULPT_PAINT_UNIFIED_LOCK_BRUSH_SIZE (1<<2)
-
/* color picker types */
#define USER_CP_CIRCLE 0
#define USER_CP_SQUARE_SV 1
diff --git a/source/blender/makesdna/DNA_world_types.h b/source/blender/makesdna/DNA_world_types.h
index 66d31467c4a..42c80f4b8b5 100644
--- a/source/blender/makesdna/DNA_world_types.h
+++ b/source/blender/makesdna/DNA_world_types.h
@@ -52,11 +52,11 @@ typedef struct World {
short colormodel, totex;
short texact, mistype;
-
- /* TODO - hork, zenk and ambk are not used, should remove at some point (Campbell) */
- float horr, horg, horb, hork;
- float zenr, zeng, zenb, zenk;
- float ambr, ambg, ambb, ambk;
+
+ float horr, horg, horb;
+ float zenr, zeng, zenb;
+ float ambr, ambg, ambb;
+ float pad2;
unsigned int fastcol;
diff --git a/source/blender/makesdna/Makefile b/source/blender/makesdna/Makefile
index 82009d2b80a..f83a6288e8d 100644
--- a/source/blender/makesdna/Makefile
+++ b/source/blender/makesdna/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/makesdna/intern/Makefile b/source/blender/makesdna/intern/Makefile
index 01c4d87a4fc..55b0c42acda 100644
--- a/source/blender/makesdna/intern/Makefile
+++ b/source/blender/makesdna/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/makesdna/intern/SConscript b/source/blender/makesdna/intern/SConscript
index fd6f2312fde..897e7c3702b 100644
--- a/source/blender/makesdna/intern/SConscript
+++ b/source/blender/makesdna/intern/SConscript
@@ -63,7 +63,7 @@ if env['OURPLATFORM'] != 'linuxcross':
if env['OURPLATFORM'] in ('win32-vc', 'win64-vc', 'win32-mingw'):
dna.Command ('dna.c', '', "\"" + root_build_dir+os.sep+"makesdna\" $TARGET")
else:
- dna.Command ('dna.c', '', root_build_dir+os.sep+"makesdna $TARGET")
+ dna.Command ('dna.c', '', "\"" + root_build_dir+os.sep+"makesdna\" $TARGET")
else:
if USE_WINE:
dna.Command ('dna.c', '', 'wine ' + ap(root_build_dir+os.sep+"makesdna $TARGET"))
diff --git a/source/blender/makesdna/intern/dna_genfile.c b/source/blender/makesdna/intern/dna_genfile.c
index 89219b114da..fd98fd4ef08 100644
--- a/source/blender/makesdna/intern/dna_genfile.c
+++ b/source/blender/makesdna/intern/dna_genfile.c
@@ -41,9 +41,9 @@
#include "DNA_sdna_types.h" // for SDNA ;-)
-/* gcc 4.1 on mingw was complaining that __int64 was alredy defined
+/* gcc 4.1 on mingw was complaining that __int64 was already defined
actually is saw the line below as typedef long long long long...
-Anyhow, since its alredy defined, its safe to do an ifndef here- Cambpell*/
+Anyhow, since its already defined, its safe to do an ifndef here- Cambpell*/
#ifdef FREE_WINDOWS
#ifndef __int64
typedef long long __int64;
@@ -110,7 +110,7 @@ DONE:
- pointer conversion (32-64 bits)
IMPORTANT:
- - do not use #defines in structs for array lenghts, this cannot be read by the dna functions
+ - do not use #defines in structs for array lengths, this cannot be read by the dna functions
- do not use uint, but unsigned int instead, ushort and ulong are allowed
- only use a long in Blender if you want this to be the size of a pointer. so it is
32 bits or 64 bits, dependant at the cpu architecture
diff --git a/source/blender/makesdna/intern/makesdna.c b/source/blender/makesdna/intern/makesdna.c
index fc5307000e3..4133afffeed 100644
--- a/source/blender/makesdna/intern/makesdna.c
+++ b/source/blender/makesdna/intern/makesdna.c
@@ -78,7 +78,6 @@ char *includefiles[] = {
"DNA_image_types.h",
"DNA_texture_types.h",
"DNA_lamp_types.h",
- "DNA_wave_types.h",
"DNA_material_types.h",
"DNA_vfont_types.h",
// if you add files here, please add them at the end
@@ -138,11 +137,11 @@ int maxdata= 500000, maxnr= 50000;
int nr_names=0;
int nr_types=0;
int nr_structs=0;
-char **names, *namedata; /* at adress names[a] is string a */
-char **types, *typedata; /* at adress types[a] is string a */
+char **names, *namedata; /* at address names[a] is string a */
+char **types, *typedata; /* at address types[a] is string a */
short *typelens; /* at typelens[a] is de length of type a */
short *alphalens; /* contains sizes as they are calculated on the DEC Alpha (64 bits) */
-short **structs, *structdata; /* at sp= structs[a] is the first adress of a struct definition
+short **structs, *structdata; /* at sp= structs[a] is the first address of a struct definition
sp[0] is type number
sp[1] is amount of elements
sp[2] sp[3] is typenr, namenr (etc) */
@@ -203,7 +202,7 @@ static int calculate_structlens(int);
void dna_write(FILE *file, void *pntr, int size);
/**
- * Report all structures found so far, and print their lenghts.
+ * Report all structures found so far, and print their lengths.
*/
void printStructLenghts(void);
@@ -1128,7 +1127,6 @@ int main(int argc, char ** argv)
#include "DNA_image_types.h"
#include "DNA_texture_types.h"
#include "DNA_lamp_types.h"
-#include "DNA_wave_types.h"
#include "DNA_material_types.h"
#include "DNA_vfont_types.h"
#include "DNA_meta_types.h"
diff --git a/source/blender/makesrna/Makefile b/source/blender/makesrna/Makefile
index bed3e85550d..2b025949d77 100644
--- a/source/blender/makesrna/Makefile
+++ b/source/blender/makesrna/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# Contributor(s): Blender Foundation (2008).
#
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index 30cbc512f5a..43697ec5d9e 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -607,8 +607,9 @@ void RNA_struct_py_type_set(StructRNA *srna, void *py_type);
void *RNA_struct_blender_type_get(StructRNA *srna);
void RNA_struct_blender_type_set(StructRNA *srna, void *blender_type);
-struct IDProperty *RNA_struct_idproperties(PointerRNA *ptr, int create);
-int RNA_struct_idproperties_check(StructRNA *srna);
+struct IDProperty *RNA_struct_idprops(PointerRNA *ptr, int create);
+int RNA_struct_idprops_check(StructRNA *srna);
+int RNA_struct_idprops_register_check(StructRNA *type);
PropertyRNA *RNA_struct_find_property(PointerRNA *ptr, const char *identifier);
@@ -670,6 +671,7 @@ int RNA_property_enum_name(struct bContext *C, PointerRNA *ptr, PropertyRNA *pro
int RNA_property_enum_bitflag_identifiers(struct bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value, const char **identifier);
StructRNA *RNA_property_pointer_type(PointerRNA *ptr, PropertyRNA *prop);
+int RNA_property_pointer_poll(PointerRNA *ptr, PropertyRNA *prop, PointerRNA *value);
int RNA_property_editable(PointerRNA *ptr, PropertyRNA *prop);
int RNA_property_editable_index(PointerRNA *ptr, PropertyRNA *prop, int index);
@@ -822,9 +824,10 @@ void RNA_enum_set(PointerRNA *ptr, const char *name, int value);
void RNA_enum_set_identifier(PointerRNA *ptr, const char *name, const char *id);
int RNA_enum_is_equal(struct bContext *C, PointerRNA *ptr, const char *name, const char *enumname);
-/* lower level functions that donr use a PointerRNA */
-int RNA_enum_value_from_id(EnumPropertyItem *item, const char *identifier, int *value);
-int RNA_enum_id_from_value(EnumPropertyItem *item, int value, const char **identifier);
+/* lower level functions that don't use a PointerRNA */
+int RNA_enum_value_from_id(EnumPropertyItem *item, const char *identifier, int *value);
+int RNA_enum_id_from_value(EnumPropertyItem *item, int value, const char **identifier);
+int RNA_enum_icon_from_value(EnumPropertyItem *item, int value, int *icon);
void RNA_string_get(PointerRNA *ptr, const char *name, char *value);
char *RNA_string_get_alloc(PointerRNA *ptr, const char *name, char *fixedbuf, int fixedlen);
diff --git a/source/blender/makesrna/RNA_define.h b/source/blender/makesrna/RNA_define.h
index 88543e4add2..f6ae5dcdbbd 100644
--- a/source/blender/makesrna/RNA_define.h
+++ b/source/blender/makesrna/RNA_define.h
@@ -57,7 +57,7 @@ void RNA_def_struct_nested(BlenderRNA *brna, StructRNA *srna, const char *struct
void RNA_def_struct_flag(StructRNA *srna, int flag);
void RNA_def_struct_clear_flag(StructRNA *srna, int flag);
void RNA_def_struct_refine_func(StructRNA *srna, const char *refine);
-void RNA_def_struct_idproperties_func(StructRNA *srna, const char *refine);
+void RNA_def_struct_idprops_func(StructRNA *srna, const char *refine);
void RNA_def_struct_register_funcs(StructRNA *srna, const char *reg, const char *unreg);
void RNA_def_struct_path_func(StructRNA *srna, const char *path);
void RNA_def_struct_identifier(StructRNA *srna, const char *identifier);
@@ -163,7 +163,7 @@ void RNA_def_property_int_funcs(PropertyRNA *prop, const char *get, const char *
void RNA_def_property_float_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range);
void RNA_def_property_enum_funcs(PropertyRNA *prop, const char *get, const char *set, const char *item);
void RNA_def_property_string_funcs(PropertyRNA *prop, const char *get, const char *length, const char *set);
-void RNA_def_property_pointer_funcs(PropertyRNA *prop, const char *get, const char *set, const char *typef);
+void RNA_def_property_pointer_funcs(PropertyRNA *prop, const char *get, const char *set, const char *typef, const char *poll);
void RNA_def_property_collection_funcs(PropertyRNA *prop, const char *begin, const char *next, const char *end, const char *get, const char *length, const char *lookupint, const char *lookupstring);
void RNA_def_property_srna(PropertyRNA *prop, const char *type);
diff --git a/source/blender/makesrna/RNA_enum_types.h b/source/blender/makesrna/RNA_enum_types.h
index bb0a1ba2c52..38ba44f2c2b 100644
--- a/source/blender/makesrna/RNA_enum_types.h
+++ b/source/blender/makesrna/RNA_enum_types.h
@@ -66,6 +66,8 @@ extern EnumPropertyItem event_type_items[];
extern EnumPropertyItem operator_return_items[];
extern EnumPropertyItem brush_sculpt_tool_items[];
+extern EnumPropertyItem brush_vertexpaint_tool_items[];
+extern EnumPropertyItem brush_imagepaint_tool_items[];
extern EnumPropertyItem texture_type_items[];
@@ -88,7 +90,7 @@ extern EnumPropertyItem wm_report_items[];
extern EnumPropertyItem property_type_items[];
extern EnumPropertyItem property_unit_items[];
-extern EnumPropertyItem viewport_shading_items[];
+extern EnumPropertyItem viewport_shade_items[];
struct bContext;
struct PointerRNA;
diff --git a/source/blender/makesrna/RNA_types.h b/source/blender/makesrna/RNA_types.h
index 88058769f4b..887069d6c00 100644
--- a/source/blender/makesrna/RNA_types.h
+++ b/source/blender/makesrna/RNA_types.h
@@ -298,7 +298,8 @@ typedef enum StructFlag {
/* internal flags */
STRUCT_RUNTIME = 4,
STRUCT_GENERATED = 8,
- STRUCT_FREE_POINTERS = 16
+ STRUCT_FREE_POINTERS = 16,
+ STRUCT_NO_IDPROPERTIES = 32, /* Menu's and Panels don't need properties */
} StructFlag;
typedef int (*StructValidateFunc)(struct PointerRNA *ptr, void *data, int *have_function);
diff --git a/source/blender/makesrna/SConscript b/source/blender/makesrna/SConscript
index 7728152f1f1..b184288f8b1 100644
--- a/source/blender/makesrna/SConscript
+++ b/source/blender/makesrna/SConscript
@@ -6,7 +6,7 @@ objs = []
o = SConscript('intern/SConscript')
objs += o
-incs = '#/intern/guardedalloc #/intern/audaspace/intern ../blenkernel ../blenlib ../makesdna intern .'
+incs = '#/intern/guardedalloc #/intern/memutil #/intern/audaspace/intern ../blenkernel ../blenlib ../makesdna intern .'
incs += ' ../windowmanager ../editors/include ../gpu ../imbuf ../ikplugin'
incs += ' ../render/extern/include ../bmesh'
@@ -24,6 +24,12 @@ if env['WITH_BF_OPENJPEG']:
if env['WITH_BF_DDS']:
defs.append('WITH_DDS')
+if env['WITH_BF_CINEON']:
+ defs.append('WITH_CINEON')
+
+if env['WITH_BF_HDR']:
+ defs.append('WITH_HDR')
+
if env['WITH_BF_FFMPEG']:
defs.append('WITH_FFMPEG')
incs += ' ' + env['BF_FFMPEG_INC']
@@ -45,6 +51,9 @@ if env['WITH_BF_GAMEENGINE']:
if env['BF_UNIT_TEST']:
defs.append('UNIT_TEST')
+if not env['WITH_BF_PYTHON']:
+ defs.append('DISABLE_PYTHON')
+
if env['OURPLATFORM'] == 'linux2':
cflags='-pthread'
incs += ' ../../../extern/binreloc/include'
diff --git a/source/blender/makesrna/intern/CMakeLists.txt b/source/blender/makesrna/intern/CMakeLists.txt
index 27b303c4106..58d59242806 100644
--- a/source/blender/makesrna/intern/CMakeLists.txt
+++ b/source/blender/makesrna/intern/CMakeLists.txt
@@ -42,6 +42,7 @@ SET(SRC
INCLUDE_DIRECTORIES(
../../../../intern/audaspace/intern
../../../../intern/guardedalloc
+ ../../../../intern/memutil
..
../../makesdna
../../blenkernel
@@ -70,21 +71,29 @@ IF(WITH_GAMEENGINE)
ADD_DEFINITIONS(-DGAMEBLENDER)
ENDIF(WITH_GAMEENGINE)
-IF(WITH_OPENEXR)
+IF(WITH_IMAGE_OPENEXR)
ADD_DEFINITIONS(-DWITH_OPENEXR)
-ENDIF(WITH_OPENEXR)
+ENDIF(WITH_IMAGE_OPENEXR)
-IF(WITH_TIFF)
+IF(WITH_IMAGE_TIFF)
ADD_DEFINITIONS(-DWITH_TIFF)
-ENDIF(WITH_TIFF)
+ENDIF(WITH_IMAGE_TIFF)
-IF(WITH_OPENJPEG)
+IF(WITH_IMAGE_OPENJPEG)
ADD_DEFINITIONS(-DWITH_OPENJPEG)
-ENDIF(WITH_OPENJPEG)
+ENDIF(WITH_IMAGE_OPENJPEG)
-IF(WITH_DDS)
+IF(WITH_IMAGE_DDS)
ADD_DEFINITIONS(-DWITH_DDS)
-ENDIF(WITH_DDS)
+ENDIF(WITH_IMAGE_DDS)
+
+IF(WITH_IMAGE_CINEON)
+ ADD_DEFINITIONS(-DWITH_CINEON)
+ENDIF(WITH_IMAGE_CINEON)
+
+IF(WITH_IMAGE_HDR)
+ ADD_DEFINITIONS(-DWITH_HDR)
+ENDIF(WITH_IMAGE_HDR)
IF(WITH_QUICKTIME)
SET(INC ${INC} ../../quicktime)
@@ -101,9 +110,9 @@ IF(WITH_LCMS)
ADD_DEFINITIONS(-DWITH_LCMS)
ENDIF(WITH_LCMS)
-IF(NOT WITH_ELBEEM)
+IF(NOT WITH_FLUID)
ADD_DEFINITIONS(-DDISABLE_ELBEEM)
-ENDIF(NOT WITH_ELBEEM)
+ENDIF(NOT WITH_FLUID)
IF(WITH_FFTW3)
ADD_DEFINITIONS(-DFFTW3=1)
diff --git a/source/blender/makesrna/intern/Makefile b/source/blender/makesrna/intern/Makefile
index 8aef06e762d..69d5581184d 100644
--- a/source/blender/makesrna/intern/Makefile
+++ b/source/blender/makesrna/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# Contributor(s): Blender Foundation (2008).
#
@@ -45,7 +45,10 @@ endif
CFLAGS += $(LEVEL_1_C_WARNINGS)
+CPPFLAGS += -I$(NAN_PYTHON)/include/python$(NAN_PYTHON_VERSION)
+
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
+CPPFLAGS += -I$(NAN_MEMUTIL)/include
CPPFLAGS += -I../../../../intern/audaspace/intern
CPPFLAGS += -I../../blenlib
CPPFLAGS += -I../../blenkernel
@@ -96,6 +99,18 @@ ifeq ($(WITH_TIFF),true)
CPPFLAGS += -DWITH_TIFF
endif
+ifeq ($(WITH_LCMS),true)
+ CPPFLAGS += -DWITH_LCMS
+endif
+
+ifeq ($(WITH_CINEON),true)
+ CPPFLAGS += -DWITH_CINEON
+endif
+
+ifeq ($(WITH_HDR),true)
+ CPPFLAGS += -DWITH_HDR
+endif
+
ifeq ($(OS),windows)
# Windows needs these extra libs because of winstuff... It is not
# _really_ needed, but it is the easiest fix for now. If you have
diff --git a/source/blender/makesrna/intern/SConscript b/source/blender/makesrna/intern/SConscript
index 8caabb3b1c3..cdb9cdd3126 100644
--- a/source/blender/makesrna/intern/SConscript
+++ b/source/blender/makesrna/intern/SConscript
@@ -33,7 +33,7 @@ incs = '#/intern/guardedalloc ../../blenlib ../../blenkernel'
incs += ' ../../imbuf ../../makesdna ../../makesrna ../../ikplugin'
incs += ' ../../windowmanager ../../editors/include'
incs += ' ../../render/extern/include ../../bmesh'
-incs += ' #/intern/audaspace/intern'
+incs += ' #/intern/audaspace/intern '
if env['WITH_BF_OPENEXR']:
defs.append('WITH_OPENEXR')
@@ -47,6 +47,12 @@ if env['WITH_BF_OPENJPEG']:
if env['WITH_BF_DDS']:
defs.append('WITH_DDS')
+if env['WITH_BF_CINEON']:
+ defs.append('WITH_CINEON')
+
+if env['WITH_BF_HDR']:
+ defs.append('WITH_HDR')
+
if env['WITH_BF_FFMPEG']:
defs.append('WITH_FFMPEG')
incs += ' ' + env['BF_FFMPEG_INC']
@@ -84,7 +90,7 @@ if not env['WITH_BF_PYTHON']:
if env['OURPLATFORM'] == 'linux2':
cflags='-pthread'
- incs += ' ../../../extern/binreloc/include'
+ incs += ' ../../../extern/binreloc/include'
if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
incs += ' ' + env['BF_PTHREADS_INC']
@@ -146,7 +152,7 @@ if env['OURPLATFORM'] != 'linuxcross':
if env['OURPLATFORM'] in ('win32-vc', 'win64-vc', 'win32-mingw'):
rna.Command (generated_files, '', "\"" + root_build_dir+os.sep+"makesrna.exe\" \"" + build_dir )
else:
- rna.Command (generated_files, '', root_build_dir+os.sep+"makesrna " + build_dir)
+ rna.Command (generated_files, '', "\"" + root_build_dir+os.sep+"makesrna\" \"" + build_dir + '"' )
else:
rna.Command (generated_files, '', root_build_dir+os.sep+"makesrna.exe " + build_dir)
diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c
index 40f6c1de67e..af0faf5a165 100644
--- a/source/blender/makesrna/intern/makesrna.c
+++ b/source/blender/makesrna/intern/makesrna.c
@@ -628,6 +628,14 @@ static char *rna_def_property_set_func(FILE *f, StructRNA *srna, PropertyRNA *pr
fprintf(f, " if(value.data)\n");
fprintf(f, " id_us_plus((ID*)value.data);\n\n");
}
+ else {
+ PointerPropertyRNA *pprop= (PointerPropertyRNA*)dp->prop;
+ StructRNA *type= rna_find_struct((char*)pprop->type);
+ if(type && (type->flag & STRUCT_ID)) {
+ fprintf(f, " if(value.data)\n");
+ fprintf(f, " id_lib_extern((ID*)value.data);\n\n");
+ }
+ }
fprintf(f, " data->%s= value.data;\n", dp->dnaname);
@@ -2080,7 +2088,7 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr
}
case PROP_POINTER: {
PointerPropertyRNA *pprop= (PointerPropertyRNA*)prop;
- fprintf(f, "\t%s, %s, %s, ", rna_function_string(pprop->get), rna_function_string(pprop->set), rna_function_string(pprop->typef));
+ fprintf(f, "\t%s, %s, %s, %s,", rna_function_string(pprop->get), rna_function_string(pprop->set), rna_function_string(pprop->typef), rna_function_string(pprop->poll));
if(pprop->type) fprintf(f, "&RNA_%s\n", (char*)pprop->type);
else fprintf(f, "NULL\n");
break;
diff --git a/source/blender/makesrna/intern/rna_ID.c b/source/blender/makesrna/intern/rna_ID.c
index 009afec2ded..a8b7fb1540b 100644
--- a/source/blender/makesrna/intern/rna_ID.c
+++ b/source/blender/makesrna/intern/rna_ID.c
@@ -176,7 +176,7 @@ StructRNA *rna_ID_refine(PointerRNA *ptr)
return ID_code_to_RNA_type(GS(id->name));
}
-IDProperty *rna_ID_idproperties(PointerRNA *ptr, int create)
+IDProperty *rna_ID_idprops(PointerRNA *ptr, int create)
{
return IDP_GetProperties(ptr->data, create);
}
@@ -195,7 +195,7 @@ void rna_ID_fake_user_set(PointerRNA *ptr, int value)
}
}
-IDProperty *rna_IDPropertyGroup_idproperties(PointerRNA *ptr, int create)
+IDProperty *rna_IDPropertyGroup_idprops(PointerRNA *ptr, int create)
{
return ptr->data;
}
@@ -317,7 +317,7 @@ static void rna_def_ID_properties(BlenderRNA *brna)
* care of the properties here */
srna= RNA_def_struct(brna, "IDPropertyGroup", NULL);
RNA_def_struct_ui_text(srna, "ID Property Group", "Group of ID properties");
- RNA_def_struct_idproperties_func(srna, "rna_IDPropertyGroup_idproperties");
+ RNA_def_struct_idprops_func(srna, "rna_IDPropertyGroup_idprops");
RNA_def_struct_register_funcs(srna, "rna_IDPropertyGroup_register", "rna_IDPropertyGroup_unregister");
RNA_def_struct_refine_func(srna, "rna_IDPropertyGroup_refine");
@@ -341,7 +341,7 @@ static void rna_def_ID(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "ID", "Base type for datablocks, defining a unique name, linking from other libraries and garbage collection");
RNA_def_struct_flag(srna, STRUCT_ID|STRUCT_ID_REFCOUNT);
RNA_def_struct_refine_func(srna, "rna_ID_refine");
- RNA_def_struct_idproperties_func(srna, "rna_ID_idproperties");
+ RNA_def_struct_idprops_func(srna, "rna_ID_idprops");
prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
RNA_def_property_ui_text(prop, "Name", "Unique datablock ID name");
@@ -356,7 +356,7 @@ static void rna_def_ID(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Users", "Number of times this datablock is referenced");
- prop= RNA_def_property(srna, "fake_user", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_fake_user", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIB_FAKEUSER);
RNA_def_property_ui_text(prop, "Fake User", "Saves this datablock even if it has no users");
RNA_def_property_boolean_funcs(prop, NULL, "rna_ID_fake_user_set");
diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c
index 36c8764b3f4..73af75ca960 100644
--- a/source/blender/makesrna/intern/rna_access.c
+++ b/source/blender/makesrna/intern/rna_access.c
@@ -23,6 +23,7 @@
*/
#include <stdlib.h>
+#include <stddef.h>
#include <string.h>
#include <ctype.h>
@@ -240,7 +241,7 @@ IDProperty *rna_idproperty_ui(PropertyRNA *prop)
return NULL;
}
-IDProperty *RNA_struct_idproperties(PointerRNA *ptr, int create)
+IDProperty *RNA_struct_idprops(PointerRNA *ptr, int create)
{
StructRNA *type= ptr->type;
@@ -250,22 +251,18 @@ IDProperty *RNA_struct_idproperties(PointerRNA *ptr, int create)
return NULL;
}
-int RNA_struct_idproperties_check(StructRNA *srna)
+int RNA_struct_idprops_check(StructRNA *srna)
{
return (srna && srna->idproperties) ? 1 : 0;
}
static IDProperty *rna_idproperty_find(PointerRNA *ptr, const char *name)
{
- IDProperty *group= RNA_struct_idproperties(ptr, 0);
- IDProperty *idprop;
+ IDProperty *group= RNA_struct_idprops(ptr, 0);
+
+ if(group)
+ return IDP_GetPropertyFromGroup(group, name);
- if(group) {
- for(idprop=group->data.group.first; idprop; idprop=idprop->next)
- if(strcmp(idprop->name, name) == 0)
- return idprop;
- }
-
return NULL;
}
@@ -390,7 +387,7 @@ IDProperty *rna_idproperty_check(PropertyRNA **prop, PointerRNA *ptr)
IDProperty *idprop= rna_idproperty_find(ptr, (*prop)->identifier);
if(idprop && !rna_idproperty_verify_valid(ptr, *prop, idprop)) {
- IDProperty *group= RNA_struct_idproperties(ptr, 0);
+ IDProperty *group= RNA_struct_idprops(ptr, 0);
IDP_RemFromGroup(group, idprop);
IDP_FreeProperty(idprop);
@@ -513,6 +510,11 @@ int RNA_struct_is_ID(StructRNA *type)
return (type->flag & STRUCT_ID) != 0;
}
+int RNA_struct_idprops_register_check(StructRNA *type)
+{
+ return (type->flag & STRUCT_NO_IDPROPERTIES) == 0;
+}
+
int RNA_struct_is_a(StructRNA *type, StructRNA *srna)
{
StructRNA *base;
@@ -577,9 +579,9 @@ FunctionRNA *RNA_struct_find_function(PointerRNA *ptr, const char *identifier)
FunctionRNA *func;
StructRNA *type;
for(type= ptr->type; type; type= type->base) {
- for(func= type->functions.first; func; func= func->cont.next) {
- if(strcmp(func->identifier, identifier)==0)
- return func;
+ func= (FunctionRNA *)BLI_findstring_ptr(&type->functions, identifier, offsetof(FunctionRNA, identifier));
+ if(func) {
+ return func;
}
}
return NULL;
@@ -786,6 +788,7 @@ int RNA_property_array_item_index(PropertyRNA *prop, char name)
return -1;
}
+
void RNA_property_int_range(PointerRNA *ptr, PropertyRNA *prop, int *hardmin, int *hardmax)
{
IntPropertyRNA *iprop= (IntPropertyRNA*)rna_ensure_property(prop);
@@ -990,6 +993,22 @@ StructRNA *RNA_property_pointer_type(PointerRNA *ptr, PropertyRNA *prop)
return &RNA_UnknownType;
}
+int RNA_property_pointer_poll(PointerRNA *ptr, PropertyRNA *prop, PointerRNA *value)
+{
+ prop= rna_ensure_property(prop);
+
+ if(prop->type == PROP_POINTER) {
+ PointerPropertyRNA *pprop= (PointerPropertyRNA*)prop;
+ if(pprop->poll)
+ return pprop->poll(ptr, *value);
+
+ return 1;
+ }
+
+ printf("RNA_property_pointer_poll %s: is not a pointer property.\n", prop->identifier);
+ return 0;
+}
+
/* Reuse for dynamic types */
EnumPropertyItem DummyRNA_NULL_items[] = {
{0, NULL, 0, NULL, NULL}
@@ -1291,7 +1310,7 @@ void RNA_property_boolean_set(PointerRNA *ptr, PropertyRNA *prop, int value)
val.i= value;
- group= RNA_struct_idproperties(ptr, 1);
+ group= RNA_struct_idprops(ptr, 1);
if(group)
IDP_AddToGroup(group, IDP_New(IDP_INT, val, (char*)prop->identifier));
}
@@ -1361,7 +1380,7 @@ void RNA_property_boolean_set_array(PointerRNA *ptr, PropertyRNA *prop, const in
val.array.len= prop->totarraylength;
val.array.type= IDP_INT;
- group= RNA_struct_idproperties(ptr, 1);
+ group= RNA_struct_idprops(ptr, 1);
if(group) {
idprop= IDP_New(IDP_ARRAY, val, (char*)prop->identifier);
IDP_AddToGroup(group, idprop);
@@ -1458,7 +1477,7 @@ void RNA_property_int_set(PointerRNA *ptr, PropertyRNA *prop, int value)
val.i= value;
- group= RNA_struct_idproperties(ptr, 1);
+ group= RNA_struct_idprops(ptr, 1);
if(group)
IDP_AddToGroup(group, IDP_New(IDP_INT, val, (char*)prop->identifier));
}
@@ -1528,7 +1547,7 @@ void RNA_property_int_set_array(PointerRNA *ptr, PropertyRNA *prop, const int *v
val.array.len= prop->totarraylength;
val.array.type= IDP_INT;
- group= RNA_struct_idproperties(ptr, 1);
+ group= RNA_struct_idprops(ptr, 1);
if(group) {
idprop= IDP_New(IDP_ARRAY, val, (char*)prop->identifier);
IDP_AddToGroup(group, idprop);
@@ -1634,7 +1653,7 @@ void RNA_property_float_set(PointerRNA *ptr, PropertyRNA *prop, float value)
val.f= value;
- group= RNA_struct_idproperties(ptr, 1);
+ group= RNA_struct_idprops(ptr, 1);
if(group)
IDP_AddToGroup(group, IDP_New(IDP_FLOAT, val, (char*)prop->identifier));
}
@@ -1722,7 +1741,7 @@ void RNA_property_float_set_array(PointerRNA *ptr, PropertyRNA *prop, const floa
val.array.len= prop->totarraylength;
val.array.type= IDP_FLOAT;
- group= RNA_struct_idproperties(ptr, 1);
+ group= RNA_struct_idprops(ptr, 1);
if(group) {
idprop= IDP_New(IDP_ARRAY, val, (char*)prop->identifier);
IDP_AddToGroup(group, idprop);
@@ -1847,7 +1866,7 @@ void RNA_property_string_set(PointerRNA *ptr, PropertyRNA *prop, const char *val
else if(prop->flag & PROP_EDITABLE) {
IDProperty *group;
- group= RNA_struct_idproperties(ptr, 1);
+ group= RNA_struct_idprops(ptr, 1);
if(group)
IDP_AddToGroup(group, IDP_NewString((char*)value, (char*)prop->identifier, RNA_property_string_maxlength(prop) - 1));
}
@@ -1912,7 +1931,7 @@ void RNA_property_enum_set(PointerRNA *ptr, PropertyRNA *prop, int value)
val.i= value;
- group= RNA_struct_idproperties(ptr, 1);
+ group= RNA_struct_idprops(ptr, 1);
if(group)
IDP_AddToGroup(group, IDP_New(IDP_INT, val, (char*)prop->identifier));
}
@@ -1985,7 +2004,7 @@ void RNA_property_pointer_add(PointerRNA *ptr, PropertyRNA *prop)
val.i= 0;
- group= RNA_struct_idproperties(ptr, 1);
+ group= RNA_struct_idprops(ptr, 1);
if(group)
IDP_AddToGroup(group, IDP_New(IDP_GROUP, val, (char*)prop->identifier));
}
@@ -1998,7 +2017,7 @@ void RNA_property_pointer_remove(PointerRNA *ptr, PropertyRNA *prop)
IDProperty *idprop, *group;
if((idprop=rna_idproperty_check(&prop, ptr))) {
- group= RNA_struct_idproperties(ptr, 0);
+ group= RNA_struct_idprops(ptr, 0);
if(group) {
IDP_RemFromGroup(group, idprop);
@@ -2111,7 +2130,7 @@ void RNA_property_collection_add(PointerRNA *ptr, PropertyRNA *prop, PointerRNA
IDProperty *group, *item;
IDPropertyTemplate val = {0};
- group= RNA_struct_idproperties(ptr, 1);
+ group= RNA_struct_idprops(ptr, 1);
if(group) {
idprop= IDP_NewIDPArray(prop->identifier);
IDP_AddToGroup(group, idprop);
@@ -2951,7 +2970,7 @@ int RNA_path_resolve_full(PointerRNA *ptr, const char *path, PointerRNA *r_ptr,
return 0;
if(use_id_prop) { /* look up property name in current struct */
- IDProperty *group= RNA_struct_idproperties(&curptr, 0);
+ IDProperty *group= RNA_struct_idprops(&curptr, 0);
if(group && rna_token_strip_quotes(token))
prop= (PropertyRNA *)IDP_GetPropertyFromGroup(group, token+1);
}
@@ -3424,6 +3443,18 @@ int RNA_enum_id_from_value(EnumPropertyItem *item, int value, const char **ident
return 0;
}
+int RNA_enum_icon_from_value(EnumPropertyItem *item, int value, int *icon)
+{
+ for( ; item->identifier; item++) {
+ if(item->value==value) {
+ *icon = item->icon;
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
void RNA_string_get(PointerRNA *ptr, const char *name, char *value)
{
PropertyRNA *prop= RNA_struct_find_property(ptr, name);
@@ -3563,7 +3594,8 @@ int RNA_property_is_set(PointerRNA *ptr, const char *name)
return 1;
}
else {
- // printf("RNA_property_is_set: %s.%s not found.\n", ptr->type->identifier, name);
+ /* python raises an error */
+ /* printf("RNA_property_is_set: %s.%s not found.\n", ptr->type->identifier, name); */
return 0;
}
}
@@ -3748,27 +3780,12 @@ int RNA_function_defined(FunctionRNA *func)
PropertyRNA *RNA_function_get_parameter(PointerRNA *ptr, FunctionRNA *func, int index)
{
- PropertyRNA *parm;
- int i;
-
- parm= func->cont.properties.first;
- for(i= 0; parm; parm= parm->next, i++)
- if(i==index)
- return parm;
-
- return NULL;
+ return BLI_findlink(&func->cont.properties, index);
}
PropertyRNA *RNA_function_find_parameter(PointerRNA *ptr, FunctionRNA *func, const char *identifier)
{
- PropertyRNA *parm;
-
- parm= func->cont.properties.first;
- for(; parm; parm= parm->next)
- if(strcmp(parm->identifier, identifier)==0)
- return parm;
-
- return NULL;
+ return BLI_findstring(&func->cont.properties, identifier, offsetof(PropertyRNA, identifier));
}
const struct ListBase *RNA_function_defined_parameters(FunctionRNA *func)
@@ -3784,18 +3801,18 @@ ParameterList *RNA_parameter_list_create(ParameterList *parms, PointerRNA *ptr,
void *data;
int alloc_size= 0, size;
- parms->arg_count= 0;
- parms->ret_count= 0;
-
+ parms->arg_count= 0;
+ parms->ret_count= 0;
+
/* allocate data */
for(parm= func->cont.properties.first; parm; parm= parm->next) {
alloc_size += rna_parameter_size_alloc(parm);
- if(parm->flag & PROP_OUTPUT)
- parms->ret_count++;
- else
- parms->arg_count++;
- }
+ if(parm->flag & PROP_OUTPUT)
+ parms->ret_count++;
+ else
+ parms->arg_count++;
+ }
parms->data= MEM_callocN(alloc_size, "RNA_parameter_list_create");
parms->func= func;
diff --git a/source/blender/makesrna/intern/rna_action.c b/source/blender/makesrna/intern/rna_action.c
index 1f542e2babe..623717e469f 100644
--- a/source/blender/makesrna/intern/rna_action.c
+++ b/source/blender/makesrna/intern/rna_action.c
@@ -100,7 +100,7 @@ static FCurve *rna_Action_fcurve_new(bAction *act, ReportList *reports, char *da
/* annoying, check if this exists */
if(verify_fcurve(act, group, data_path, index, 0)) {
- BKE_reportf(reports, RPT_ERROR, "FCurve '%s[%d]' alredy exists in action '%s'", data_path, index, act->id.name+2);
+ BKE_reportf(reports, RPT_ERROR, "FCurve '%s[%d]' already exists in action '%s'", data_path, index, act->id.name+2);
return NULL;
}
return verify_fcurve(act, group, data_path, index, 1);
@@ -108,20 +108,21 @@ static FCurve *rna_Action_fcurve_new(bAction *act, ReportList *reports, char *da
static void rna_Action_fcurve_remove(bAction *act, ReportList *reports, FCurve *fcu)
{
- if(fcu->grp) {
+ if (fcu->grp) {
if (BLI_findindex(&act->groups, fcu->grp) == -1) {
BKE_reportf(reports, RPT_ERROR, "FCurve's ActionGroup '%s' not found in action '%s'", fcu->grp->name, act->id.name+2);
return;
}
-
+
action_groups_remove_channel(act, fcu);
+ free_fcurve(fcu);
}
else {
- if(BLI_findindex(&act->curves, fcu) == -1) {
+ if (BLI_findindex(&act->curves, fcu) == -1) {
BKE_reportf(reports, RPT_ERROR, "FCurve not found in action '%s'", act->id.name+2);
return;
}
-
+
BLI_remlink(&act->curves, fcu);
free_fcurve(fcu);
}
@@ -165,131 +166,131 @@ static void rna_def_dopesheet(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Source", "ID-Block representing source data, currently ID_SCE (for Dopesheet), and ID_SC (for Grease Pencil)");
/* General Filtering Settings */
- prop= RNA_def_property(srna, "only_selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_only_selected", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "filterflag", ADS_FILTER_ONLYSEL);
RNA_def_property_ui_text(prop, "Only Selected", "Only include channels relating to selected objects and data");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_SELECT_OFF, 0);
RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "display_hidden", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_hidden", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "filterflag", ADS_FILTER_INCL_HIDDEN);
RNA_def_property_ui_text(prop, "Display Hidden", "Include channels from objects/bone that aren't visible");
RNA_def_property_ui_icon(prop, ICON_GHOST_ENABLED, 0);
RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
/* Object Group Filtering Settings */
- prop= RNA_def_property(srna, "only_group_objects", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_only_group_objects", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "filterflag", ADS_FILTER_ONLYOBGROUP);
RNA_def_property_ui_text(prop, "Only Objects in Group", "Only include channels from Objects in the specified Group");
RNA_def_property_ui_icon(prop, ICON_GROUP, 0);
RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "filtering_group", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "filter_group", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "filter_grp");
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Filtering Group", "Group that included Object should be a member of");
RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
/* NLA Specific Settings */
- prop= RNA_def_property(srna, "include_missing_nla", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_missing_nla", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NLA_NOACT);
RNA_def_property_ui_text(prop, "Include Missing NLA", "Include Animation Data blocks with no NLA data. (NLA Editor only)");
RNA_def_property_ui_icon(prop, ICON_ACTION, 0);
RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
/* Summary Settings (DopeSheet editors only) */
- prop= RNA_def_property(srna, "display_summary", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_summary", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "filterflag", ADS_FILTER_SUMMARY);
RNA_def_property_ui_text(prop, "Display Summary", "Display an additional 'summary' line. (DopeSheet Editors only)");
RNA_def_property_ui_icon(prop, ICON_BORDERMOVE, 0);
RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "collapse_summary", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", ADS_FLAG_SUMMARY_COLLAPSED);
+ prop= RNA_def_property(srna, "show_expanded_summary", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", ADS_FLAG_SUMMARY_COLLAPSED);
RNA_def_property_ui_text(prop, "Collapse Summary", "Collapse summary when shown, so all other channels get hidden. (DopeSheet Editors Only)");
RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
/* General DataType Filtering Settings */
- prop= RNA_def_property(srna, "display_transforms", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_transforms", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOOBJ);
RNA_def_property_ui_text(prop, "Display Transforms", "Include visualization of Object-level Animation data (mostly Transforms)");
RNA_def_property_ui_icon(prop, ICON_MANIPUL, 0); // XXX?
RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "display_shapekeys", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_shapekeys", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOSHAPEKEYS);
RNA_def_property_ui_text(prop, "Display Shapekeys", "Include visualization of ShapeKey related Animation data");
RNA_def_property_ui_icon(prop, ICON_SHAPEKEY_DATA, 0);
RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "display_mesh", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_meshes", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOMESH);
RNA_def_property_ui_text(prop, "Display Meshes", "Include visualization of Mesh related Animation data");
RNA_def_property_ui_icon(prop, ICON_MESH_DATA, 0);
RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "display_camera", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_cameras", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOCAM);
RNA_def_property_ui_text(prop, "Display Camera", "Include visualization of Camera related Animation data");
RNA_def_property_ui_icon(prop, ICON_CAMERA_DATA, 0);
RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "display_material", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_materials", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOMAT);
RNA_def_property_ui_text(prop, "Display Material", "Include visualization of Material related Animation data");
RNA_def_property_ui_icon(prop, ICON_MATERIAL_DATA, 0);
RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "display_lamp", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_lamps", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOLAM);
RNA_def_property_ui_text(prop, "Display Lamp", "Include visualization of Lamp related Animation data");
RNA_def_property_ui_icon(prop, ICON_LAMP_DATA, 0);
RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "display_texture", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_textures", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOTEX);
RNA_def_property_ui_text(prop, "Display Texture", "Include visualization of Texture related Animation data");
RNA_def_property_ui_icon(prop, ICON_TEXTURE_DATA, 0);
RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "display_curve", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_curves", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOCUR);
RNA_def_property_ui_text(prop, "Display Curve", "Include visualization of Curve related Animation data");
RNA_def_property_ui_icon(prop, ICON_CURVE_DATA, 0);
RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "display_world", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_worlds", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOWOR);
RNA_def_property_ui_text(prop, "Display World", "Include visualization of World related Animation data");
RNA_def_property_ui_icon(prop, ICON_WORLD_DATA, 0);
RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "display_scene", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_scenes", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOSCE);
RNA_def_property_ui_text(prop, "Display Scene", "Include visualization of Scene related Animation data");
RNA_def_property_ui_icon(prop, ICON_SCENE_DATA, 0);
RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "display_particle", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_particles", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOPART);
RNA_def_property_ui_text(prop, "Display Particle", "Include visualization of Particle related Animation data");
RNA_def_property_ui_icon(prop, ICON_PARTICLE_DATA, 0);
RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "display_metaball", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_metaballs", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOMBA);
RNA_def_property_ui_text(prop, "Display Metaball", "Include visualization of Metaball related Animation data");
RNA_def_property_ui_icon(prop, ICON_META_DATA, 0);
RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "display_armature", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_armatures", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOARM);
RNA_def_property_ui_text(prop, "Display Armature", "Include visualization of Armature related Animation data");
RNA_def_property_ui_icon(prop, ICON_ARMATURE_DATA, 0);
RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "display_node", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_nodes", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NONTREE);
RNA_def_property_ui_text(prop, "Display Node", "Include visualization of Node related Animation data");
RNA_def_property_ui_icon(prop, ICON_NODETREE, 0);
@@ -326,17 +327,17 @@ static void rna_def_action_group(BlenderRNA *brna)
RNA_def_property_collection_funcs(prop, 0, "rna_ActionGroup_channels_next", 0, 0, 0, 0, 0);
RNA_def_property_ui_text(prop, "Channels", "F-Curves in this group");
- prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", AGRP_SELECTED);
- RNA_def_property_ui_text(prop, "Selected", "Action Group is selected");
+ RNA_def_property_ui_text(prop, "Select", "Action Group is selected");
RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_SELECTED, NULL);
- prop= RNA_def_property(srna, "locked", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", AGRP_PROTECTED);
- RNA_def_property_ui_text(prop, "Locked", "Action Group is locked");
+ RNA_def_property_ui_text(prop, "Lock", "Action Group is locked");
RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", AGRP_EXPANDED);
RNA_def_property_ui_text(prop, "Expanded", "Action Group is expanded");
RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
diff --git a/source/blender/makesrna/intern/rna_actuator.c b/source/blender/makesrna/intern/rna_actuator.c
index f07cc6fd419..a4becb87e28 100644
--- a/source/blender/makesrna/intern/rna_actuator.c
+++ b/source/blender/makesrna/intern/rna_actuator.c
@@ -70,7 +70,7 @@ static StructRNA* rna_Actuator_refine(struct PointerRNA *ptr)
case ACT_OBJECT:
return &RNA_ObjectActuator;
case ACT_IPO:
- return &RNA_FcurveActuator;
+ return &RNA_FCurveActuator;
case ACT_CAMERA:
return &RNA_CameraActuator;
case ACT_SOUND:
@@ -285,7 +285,7 @@ static void rna_ConstraintActuator_spring_set(struct PointerRNA *ptr, float valu
}
/* ConstraintActuator uses the same property for Material and Property.
- Therefore we need to clear the property when "detect_material" mode changes */
+ Therefore we need to clear the property when "use_material_detect" mode changes */
static void rna_Actuator_constraint_detect_material_set(struct PointerRNA *ptr, int value)
{
bActuator *act = (bActuator*)ptr->data;
@@ -476,13 +476,13 @@ void rna_def_actuator(BlenderRNA *brna)
RNA_def_property_enum_funcs(prop, NULL, "rna_Actuator_type_set", "rna_Actuator_type_itemf");
RNA_def_property_ui_text(prop, "Type", "");
- prop= RNA_def_property(srna, "pinned", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "pin", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_PIN);
RNA_def_property_ui_text(prop, "Pinned", "Display when not linked to a visible states controller");
RNA_def_property_ui_icon(prop, ICON_UNPINNED, 1);
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_SHOW);
RNA_def_property_ui_text(prop, "Expanded", "Set actuator expanded in the user interface");
RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
@@ -510,7 +510,7 @@ static void rna_def_action_actuator(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Action Actuator", "Actuator to control the object movement");
RNA_def_struct_sdna_from(srna, "bActionActuator", "data");
- prop= RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "play_mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "type");
RNA_def_property_enum_items(prop, prop_type_items);
RNA_def_property_ui_text(prop, "Action type", "Action playback type");
@@ -522,10 +522,10 @@ static void rna_def_action_actuator(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Action", "");
/* note: custom set function is ONLY to avoid rna setting a user for this. */
- RNA_def_property_pointer_funcs(prop, NULL, "rna_Actuator_action_action_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_Actuator_action_action_set", NULL, NULL);
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "continue_last_frame", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_continue_last_frame", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "end_reset", 1);
RNA_def_property_ui_text(prop, "Continue", "Restore last frame when switching on/off, otherwise play from the start each time");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -547,7 +547,8 @@ static void rna_def_action_actuator(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "End frame", "");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "blendin", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "frame_blend_in", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "blendin");
RNA_def_property_range(prop, 0, 32767);
RNA_def_property_ui_text(prop, "Blendin", "Number of frames of motion blending");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -606,150 +607,150 @@ static void rna_def_object_actuator(BlenderRNA *brna)
prop= RNA_def_property(srna, "proportional_coefficient", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "forcerot[0]");
- RNA_def_property_ui_range(prop, 0.0, 200.0, 1.0, 0.1);
+ RNA_def_property_ui_range(prop, 0.0, 200.0, 10, 2);
RNA_def_property_ui_text(prop, "Proportional Coefficient", "Typical value is 60x integral coefficient");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "integral_coefficient", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "forcerot[1]");
- RNA_def_property_ui_range(prop, 0.0, 3.0, 0.1, 0.01);
+ RNA_def_property_ui_range(prop, 0.0, 3.0, 10, 2);
RNA_def_property_float_funcs(prop, NULL, "rna_ObjectActuator_integralcoefficient_set", NULL);
RNA_def_property_ui_text(prop, "Integral Coefficient", "Low value (0.01) for slow response, high value (0.5) for fast response");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "derivate_coefficient", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "forcerot[2]");
- RNA_def_property_ui_range(prop, -100.0, 100.0, 1.0, 0.1);
+ RNA_def_property_ui_range(prop, -100.0, 100.0, 10, 2);
RNA_def_property_ui_text(prop, "Derivate Coefficient", "Not required, high values can cause instability");
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* Servo Limit */
prop= RNA_def_property(srna, "force_max_x", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "dloc[0]");
- RNA_def_property_ui_range(prop, -100.0, 100.0, 1.0, 0.1);
+ RNA_def_property_ui_range(prop, -100.0, 100.0, 1, 2);
RNA_def_property_ui_text(prop, "Max", "Set the upper limit for force");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "force_min_x", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "drot[0]");
- RNA_def_property_ui_range(prop, -100.0, 100.0, 1.0, 0.1);
+ RNA_def_property_ui_range(prop, -100.0, 100.0, 1, 2);
RNA_def_property_ui_text(prop, "Min", "Set the lower limit for force");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "force_max_y", PROP_FLOAT, PROP_NONE);
- RNA_def_property_float_sdna(prop, NULL, "dloc[0]");
- RNA_def_property_ui_range(prop, -100.0, 100.0, 1.0, 0.1);
+ RNA_def_property_float_sdna(prop, NULL, "dloc[1]");
+ RNA_def_property_ui_range(prop, -100.0, 100.0, 1, 2);
RNA_def_property_ui_text(prop, "Max", "Set the upper limit for force");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "force_min_y", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "drot[1]");
- RNA_def_property_ui_range(prop, -100.0, 100.0, 1.0, 0.1);
+ RNA_def_property_ui_range(prop, -100.0, 100.0, 1, 2);
RNA_def_property_ui_text(prop, "Min", "Set the lower limit for force");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "force_max_z", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "dloc[2]");
- RNA_def_property_ui_range(prop, -100.0, 100.0, 1.0, 0.1);
+ RNA_def_property_ui_range(prop, -100.0, 100.0, 1, 2);
RNA_def_property_ui_text(prop, "Max", "Set the upper limit for force");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "force_min_z", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "drot[2]");
- RNA_def_property_ui_range(prop, -100.0, 100.0, 1.0, 0.1);
+ RNA_def_property_ui_range(prop, -100.0, 100.0, 1, 2);
RNA_def_property_ui_text(prop, "Min", "Set the lower limit for force");
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* floats 3 Arrays*/
- prop= RNA_def_property(srna, "loc", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "offset_location", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "dloc");
RNA_def_property_array(prop, 3);
- RNA_def_property_ui_range(prop, -10000.0, 10000.0, 0.1, 0.001);
+ RNA_def_property_ui_range(prop, -10000.0, 10000.0, 10, 2);
RNA_def_property_ui_text(prop, "Loc", "Sets the location");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "rot", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "offset_rotation", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "drot");
RNA_def_property_array(prop, 3);
- RNA_def_property_ui_range(prop, -10000.0, 10000.0, 0.1, 0.001);
+ RNA_def_property_ui_range(prop, -10000.0, 10000.0, 10, 2);
RNA_def_property_ui_text(prop, "Rot", "Sets the rotation");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "force", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "force", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "forceloc");
RNA_def_property_array(prop, 3);
- RNA_def_property_ui_range(prop, -10000.0, 10000.0, 0.1, 0.001);
+ RNA_def_property_ui_range(prop, -10000.0, 10000.0, 10, 2);
RNA_def_property_ui_text(prop, "Force", "Sets the force");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "torque", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "torque", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "forcerot");
RNA_def_property_array(prop, 3);
- RNA_def_property_ui_range(prop, -10000.0, 10000.0, 0.1, 0.001);
+ RNA_def_property_ui_range(prop, -10000.0, 10000.0, 10, 2);
RNA_def_property_ui_text(prop, "Torque", "Sets the torque");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "linear_velocity", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "linear_velocity", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "linearvelocity");
RNA_def_property_array(prop, 3);
- RNA_def_property_ui_range(prop, -10000.0, 10000.0, 0.1, 0.001);
+ RNA_def_property_ui_range(prop, -10000.0, 10000.0, 10, 2);
RNA_def_property_ui_text(prop, "Linear Velocity", "Sets the linear velocity (in Servo mode it sets the target relative linear velocity, it will be achieved by automatic application of force. Null velocity is a valid target)");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "angular_velocity", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "angular_velocity", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "angularvelocity");
RNA_def_property_array(prop, 3);
- RNA_def_property_ui_range(prop, -10000.0, 10000.0, 0.1, 0.001);
+ RNA_def_property_ui_range(prop, -10000.0, 10000.0, 10, 2);
RNA_def_property_ui_text(prop, "Angular Velocity", "Sets the angular velocity");
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* booleans */
- prop= RNA_def_property(srna, "local_location", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_local_location", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_DLOC_LOCAL);
RNA_def_property_ui_text(prop, "L", "Location is defined in local coordinates");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "local_rotation", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_local_rotation", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_DROT_LOCAL);
RNA_def_property_ui_text(prop, "L", "Rotation is defined in local coordinates");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "local_force", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_local_force", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_FORCE_LOCAL);
RNA_def_property_ui_text(prop, "L", "Force is defined in local coordinates");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "local_torque", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_local_torque", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_TORQUE_LOCAL);
RNA_def_property_ui_text(prop, "L", "Torque is defined in local coordinates");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "local_linear_velocity", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_local_linear_velocity", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_LIN_VEL_LOCAL);
RNA_def_property_ui_text(prop, "L", "Velocity is defined in local coordinates");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "local_angular_velocity", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_local_angular_velocity", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_ANG_VEL_LOCAL);
RNA_def_property_ui_text(prop, "L", "Angular velocity is defined in local coordinates");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "add_linear_velocity", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_add_linear_velocity", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_ADD_LIN_VEL);
RNA_def_property_ui_text(prop, "Add", "Toggles between ADD and SET linV");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "servo_limit_x", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_servo_limit_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_SERVO_LIMIT_X);
RNA_def_property_ui_text(prop, "X", "Set limit to force along the X axis");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "servo_limit_y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_servo_limit_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_SERVO_LIMIT_Y);
RNA_def_property_ui_text(prop, "Y", "Set limit to force along the Y axis");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "servo_limit_z", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_servo_limit_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_SERVO_LIMIT_Z);
RNA_def_property_ui_text(prop, "Z", "Set limit to force along the Z axis");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -770,7 +771,7 @@ static void rna_def_fcurve_actuator(BlenderRNA *brna)
{ACT_IPO_FROM_PROP, "PROP", 0, "Property", ""},
{0, NULL, 0, NULL, NULL}};
- srna= RNA_def_struct(brna, "FcurveActuator", "Actuator");
+ srna= RNA_def_struct(brna, "FCurveActuator", "Actuator");
RNA_def_struct_ui_text(srna, "F-Curve Actuator", "Actuator to animate the object");
RNA_def_struct_sdna_from(srna, "bIpoActuator", "data");
@@ -802,24 +803,24 @@ static void rna_def_fcurve_actuator(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Frame Property", "Assign the action's current frame number to this property");
/* booleans */
- prop= RNA_def_property(srna, "add", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_additive", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_IPOADD);
RNA_def_property_boolean_funcs(prop, NULL, "rna_FcurveActuator_add_set");
RNA_def_property_ui_text(prop, "Add", "F-Curve is added to the current loc/rot/scale in global or local coordinate according to Local flag");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "force", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_force", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_IPOFORCE);
RNA_def_property_boolean_funcs(prop, NULL, "rna_FcurveActuator_force_set");
RNA_def_property_ui_text(prop, "Force", "Apply F-Curve as a global or local force depending on the local option (dynamic objects only)");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "local", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_local", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_IPOLOCAL);
RNA_def_property_ui_text(prop, "L", "Let the F-Curve act in local coordinates, used in Force and Add mode");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "child", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "apply_to_children", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_IPOCHILD);
RNA_def_property_ui_text(prop, "Child", "Update F-Curve on all children Objects as well");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -848,17 +849,17 @@ static void rna_def_camera_actuator(BlenderRNA *brna)
/* floats */
prop= RNA_def_property(srna, "height", PROP_FLOAT, PROP_NONE);
- RNA_def_property_ui_range(prop, 0.0, 20.0, 0.1, 0.1);
+ RNA_def_property_ui_range(prop, 0.0, 20.0, 1, 2);
RNA_def_property_ui_text(prop, "Height", "");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "min", PROP_FLOAT, PROP_NONE);
- RNA_def_property_ui_range(prop, 0.0, 20.0, 0.1, 0.1);
+ RNA_def_property_ui_range(prop, 0.0, 20.0, 1, 2);
RNA_def_property_ui_text(prop, "Min", "");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "max", PROP_FLOAT, PROP_NONE);
- RNA_def_property_ui_range(prop, 0.0, 20.0, 0.1, 0.1);
+ RNA_def_property_ui_range(prop, 0.0, 20.0, 1, 2);
RNA_def_property_ui_text(prop, "Max", "");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -902,67 +903,67 @@ static void rna_def_sound_actuator(BlenderRNA *brna)
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "volume", PROP_FLOAT, PROP_NONE);
- RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 0.01);
+ RNA_def_property_ui_range(prop, 0.0, 1.0, 1, 2);
RNA_def_property_range(prop, 0.0, 2.0);
RNA_def_property_ui_text(prop, "Volume", "Sets the initial volume of the sound");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "pitch", PROP_FLOAT, PROP_NONE);
- RNA_def_property_ui_range(prop, -12.0, 12.0, 1.0, 0.1);
+ RNA_def_property_ui_range(prop, -12.0, 12.0, 1, 2);
RNA_def_property_ui_text(prop, "Pitch", "Sets the pitch of the sound");
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* floats - 3D Parameters */
- prop= RNA_def_property(srna, "minimum_gain_3d", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "gain_3d_min", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "sound3D.min_gain");
- RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 0.01);
+ RNA_def_property_ui_range(prop, 0.0, 1.0, 1, 2);
RNA_def_property_ui_text(prop, "Minimum Gain", "The minimum gain of the sound, no matter how far it is away");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "maximum_gain_3d", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "gain_3d_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "sound3D.max_gain");
- RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 0.01);
+ RNA_def_property_ui_range(prop, 0.0, 1.0, 1, 2);
RNA_def_property_ui_text(prop, "Maximum Gain", "The maximum gain of the sound, no matter how near it is");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "reference_distance_3d", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "distance_3d_reference", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "sound3D.reference_distance");
- RNA_def_property_ui_range(prop, 0.0, FLT_MAX, 1.0, 0.01);
+ RNA_def_property_ui_range(prop, 0.0, FLT_MAX, 1, 2);
RNA_def_property_ui_text(prop, "Reference Distance", "The distance where the sound has a gain of 1.0");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "max_distance_3d", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "distance_3d_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "sound3D.max_distance");
- RNA_def_property_ui_range(prop, 0.0, FLT_MAX, 1.0, 0.01);
+ RNA_def_property_ui_range(prop, 0.0, FLT_MAX, 1, 2);
RNA_def_property_ui_text(prop, "Maximum Distance", "The maximum distance at which you can hear the sound");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "rolloff_factor_3d", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "sound3D.rolloff_factor");
- RNA_def_property_ui_range(prop, 0.0, 5.0, 1.0, 0.01);
+ RNA_def_property_ui_range(prop, 0.0, 5.0, 1, 2);
RNA_def_property_ui_text(prop, "Rolloff", "The influence factor on volume depending on distance");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "cone_outer_gain_3d", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "sound3D.cone_outer_gain");
- RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 0.01);
+ RNA_def_property_ui_range(prop, 0.0, 1.0, 1, 2);
RNA_def_property_ui_text(prop, "Cone Outer Gain", "The gain outside the outer cone. The gain in the outer cone will be interpolated between this value and the normal gain in the inner cone");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "cone_outer_angle_3d", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "sound3D.cone_outer_angle");
- RNA_def_property_ui_range(prop, 0.0, 360.0, 1.0, 0.01);
+ RNA_def_property_ui_range(prop, 0.0, 360.0, 1, 2);
RNA_def_property_ui_text(prop, "Cone Outer Angle", "The angle of the outer cone");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "cone_inner_angle_3d", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "sound3D.cone_inner_angle");
- RNA_def_property_ui_range(prop, 0.0, 360.0, 1.0, 0.01);
+ RNA_def_property_ui_range(prop, 0.0, 360.0, 1, 2);
RNA_def_property_ui_text(prop, "Cone Inner Angle", "The angle of the inner cone");
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* booleans */
- prop= RNA_def_property(srna, "enable_sound_3d", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_sound_3d", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_SND_3D_SOUND);
RNA_def_property_ui_text(prop, "3D Sound", "Enable/Disable 3D Sound");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -1132,78 +1133,78 @@ static void rna_def_constraint_actuator(BlenderRNA *brna)
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* ACT_CONST_TYPE_ORI */
- prop= RNA_def_property(srna, "max_rotation", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "rotation_max", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "maxrot");
RNA_def_property_array(prop, 3);
- RNA_def_property_ui_range(prop, -2000.0, 2000.0, 0.1, 0.001);
+ RNA_def_property_ui_range(prop, -2000.0, 2000.0, 10, 2);
RNA_def_property_ui_text(prop, "Reference Direction", "Reference Direction");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "min_angle", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "angle_min", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "minloc[0]");
- RNA_def_property_ui_range(prop, 0.0, 180.0, 0.1, 0.01);
+ RNA_def_property_ui_range(prop, 0.0, 180.0, 10, 2);
RNA_def_property_ui_text(prop, "Min Angle", "Minimum angle (in degree) to maintain with target direction. No correction is done if angle with target direction is between min and max");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "max_angle", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "angle_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "maxloc[0]");
- RNA_def_property_ui_range(prop, 0.0, 180.0, 0.1, 0.01);
+ RNA_def_property_ui_range(prop, 0.0, 180.0, 10, 2);
RNA_def_property_ui_text(prop, "Max Angle", "Maximum angle (in degree) allowed with target direction. No correction is done if angle with target direction is between min and max");
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* ACT_CONST_TYPE_FH */
prop= RNA_def_property(srna, "fh_height", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_funcs(prop, "rna_ConstraintActuator_fhheight_get", "rna_ConstraintActuator_fhheight_set", NULL);
- RNA_def_property_ui_range(prop, 0.01, 2000.0, 0.1, 0.01);
+ RNA_def_property_ui_range(prop, 0.01, 2000.0, 10, 2);
RNA_def_property_ui_text(prop, "Distance", "Height of the Fh area");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "spring", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_funcs(prop, "rna_ConstraintActuator_spring_get", "rna_ConstraintActuator_spring_set", NULL);
- RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 0.01);
+ RNA_def_property_ui_range(prop, 0.0, 1.0, 10, 2);
RNA_def_property_ui_text(prop, "Fh", "Spring force within the Fh area");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "fh_damping", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "maxrot[0]");
- RNA_def_property_ui_range(prop, 0.0, 1.0, 1, 1);
+ RNA_def_property_ui_range(prop, 0.0, 1.0, 10, 2);
RNA_def_property_ui_text(prop, "Damping", "Damping factor of the Fh spring force");
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* booleans */
- prop= RNA_def_property(srna, "force_distance", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_force_distance", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_CONST_DISTANCE);
RNA_def_property_ui_text(prop, "Force Distance", "Force distance of object to point of impact of ray");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "local", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_local", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_CONST_LOCAL);
RNA_def_property_ui_text(prop, "L", "Set ray along object's axis or global axis");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "normal", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_normal", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_CONST_NORMAL);
RNA_def_property_ui_text(prop, "N", "Set object axis along (local axis) or parallel (global axis) to the normal at hit position");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "persistent", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_persistent", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_CONST_PERMANENT);
RNA_def_property_ui_text(prop, "PER", "Persistent actuator: stays active even if ray does not reach target");
RNA_def_property_update(prop, NC_LOGIC, NULL);
//XXX to use an enum instead of a flag if possible
- prop= RNA_def_property(srna, "detect_material", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_material_detect", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_CONST_MATERIAL);
RNA_def_property_ui_text(prop, "M/P", "Detect material instead of property");
RNA_def_property_boolean_funcs(prop, NULL, "rna_Actuator_constraint_detect_material_set");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "fh_paralel_axis", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_fh_paralel_axis", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_CONST_DOROTFH);
RNA_def_property_ui_text(prop, "Rot Fh", "Keep object axis parallel to normal");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "fh_normal", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_fh_normal", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_CONST_NORMAL);
RNA_def_property_ui_text(prop, "N", "Add a horizontal spring force on slopes");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -1266,7 +1267,7 @@ static void rna_def_edit_object_actuator(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Mesh", "Replace the existing, when left blank 'Phys' will remake the existing physics mesh");
/* note: custom set function is ONLY to avoid rna setting a user for this. */
- RNA_def_property_pointer_funcs(prop, NULL, "rna_Actuator_editobject_mesh_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_Actuator_editobject_mesh_set", NULL, NULL);
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "time", PROP_INT, PROP_NONE);
@@ -1275,47 +1276,47 @@ static void rna_def_edit_object_actuator(BlenderRNA *brna)
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "mass", PROP_FLOAT, PROP_NONE);
- RNA_def_property_ui_range(prop, 0, 10000, 1, 0.01);
+ RNA_def_property_ui_range(prop, 0, 10000, 1, 2);
RNA_def_property_ui_text(prop, "Mass", "The mass of the object");
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* floats 3 Arrays*/
- prop= RNA_def_property(srna, "linear_velocity", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "linear_velocity", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "linVelocity");
RNA_def_property_array(prop, 3);
- RNA_def_property_ui_range(prop, -100.0, 100.0, 0.1, 0.01);
+ RNA_def_property_ui_range(prop, -100.0, 100.0, 10, 2);
RNA_def_property_ui_text(prop, "Linear Velocity", "Velocity upon creation");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "angular_velocity", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "angular_velocity", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "angVelocity");
RNA_def_property_array(prop, 3);
- RNA_def_property_ui_range(prop, -10000.0, 10000.0, 1.0, 0.01);
+ RNA_def_property_ui_range(prop, -10000.0, 10000.0, 10, 2);
RNA_def_property_ui_text(prop, "Angular Velocity", "Angular velocity upon creation");
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* booleans */
- prop= RNA_def_property(srna, "local_linear_velocity", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_local_linear_velocity", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "localflag", ACT_EDOB_LOCAL_LINV);
RNA_def_property_ui_text(prop, "L", "Apply the transformation locally");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "local_angular_velocity", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_local_angular_velocity", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "localflag", ACT_EDOB_LOCAL_ANGV);
RNA_def_property_ui_text(prop, "L", "Apply the rotation locally");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "replace_display_mesh", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_replace_display_mesh", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_EDOB_REPLACE_MESH_NOGFX);
RNA_def_property_ui_text(prop, "Gfx", "Replace the display mesh");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "replace_physics_mesh", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_replace_physics_mesh", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_EDOB_REPLACE_MESH_PHYS);
RNA_def_property_ui_text(prop, "Phys", "Replace the physics mesh (triangle bounds only - compound shapes not supported)");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "enable_3d_tracking", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_3d_tracking", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_TRACK_3D);
RNA_def_property_ui_text(prop, "3D", "Enable 3D tracking");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -1419,7 +1420,7 @@ static void rna_def_random_actuator(BlenderRNA *brna)
/* int_arg_1, int_arg_2, float_arg_1, float_arg_2 */
/* ACT_RANDOM_BOOL_CONST */
- prop= RNA_def_property(srna, "always_true", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_always_true", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "int_arg_1", 1);
RNA_def_property_ui_text(prop, "Always true", "Always false or always true");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -1557,8 +1558,8 @@ static void rna_def_game_actuator(BlenderRNA *brna)
{ACT_GAME_LOAD, "START", 0, "Start new game", ""},
{ACT_GAME_RESTART, "RESTART", 0, "Restart this game", ""},
{ACT_GAME_QUIT, "QUIT", 0, "Quit this game", ""},
- {ACT_GAME_SAVECFG, "SAVECFG", 0, "Save GameLogic.globalDict", ""},
- {ACT_GAME_LOADCFG, "LOADCFG", 0, "Load GameLogic.globalDict", ""},
+ {ACT_GAME_SAVECFG, "SAVECFG", 0, "Save bge.logic.globalDict", ""},
+ {ACT_GAME_LOADCFG, "LOADCFG", 0, "Load bge.logic.globalDict", ""},
{0, NULL, 0, NULL, NULL}};
srna= RNA_def_struct(brna, "GameActuator", "Actuator");
@@ -1587,17 +1588,17 @@ static void rna_def_visibility_actuator(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Visibility Actuator", "Actuator to set visibility and occlusion of the object");
RNA_def_struct_sdna_from(srna, "bVisibilityActuator", "data");
- prop= RNA_def_property(srna, "visible", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_visible", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", ACT_VISIBILITY_INVISIBLE);
RNA_def_property_ui_text(prop, "Visible", "Set the objects visible. Initialized from the objects render restriction toggle (access in the outliner)");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "occlusion", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_occlusion", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_VISIBILITY_OCCLUSION);
RNA_def_property_ui_text(prop, "Occlusion", "Set the object to occlude objects behind it. Initialized from the object type in physics button");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "children", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "apply_to_children", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_VISIBILITY_RECURSIVE);
RNA_def_property_ui_text(prop, "Children", "Set all the children of this object to the same visibility/occlusion recursively");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -1650,14 +1651,14 @@ static void rna_def_twodfilter_actuator(BlenderRNA *brna)
RNA_def_property_range(prop, 0, 99); //MAX_RENDER_PASS-1
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "motion_blur_value", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "motion_blur_factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "float_arg");
- RNA_def_property_ui_text(prop, "Value", "Set motion blur value");
+ RNA_def_property_ui_text(prop, "Value", "Set motion blur factor");
RNA_def_property_range(prop, 0.0, 1.0);
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* booleans */
- prop= RNA_def_property(srna, "enable_motion_blur", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_motion_blur", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", 1);
RNA_def_property_ui_text(prop, "Enable", "Enable/Disable Motion Blur");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -1691,12 +1692,12 @@ static void rna_def_parent_actuator(BlenderRNA *brna)
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* booleans */
- prop= RNA_def_property(srna, "compound", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_compound", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_PARENT_COMPOUND);
RNA_def_property_ui_text(prop, "Compound", "Add this object shape to the parent shape (only if the parent shape is already compound)");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "ghost", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_ghost", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_PARENT_GHOST);
RNA_def_property_ui_text(prop, "Ghost", "Make this object ghost while parented (only if not compound)");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -1734,10 +1735,10 @@ static void rna_def_shape_action_actuator(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Action", "");
/* note: custom set function is ONLY to avoid rna setting a user for this. */
- RNA_def_property_pointer_funcs(prop, NULL, "rna_Actuator_action_action_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_Actuator_action_action_set", NULL, NULL);
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "continue_last_frame", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_continue_last_frame", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "end_reset", 1);
RNA_def_property_ui_text(prop, "Continue", "Restore last frame when switching on/off, otherwise play from the start each time");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -1759,7 +1760,8 @@ static void rna_def_shape_action_actuator(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "End frame", "");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "blendin", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "frame_blend_in", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "blendin");
RNA_def_property_range(prop, 0, 32767);
RNA_def_property_ui_text(prop, "Blendin", "Number of frames of motion blending");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -1805,7 +1807,7 @@ static void rna_def_state_actuator(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Operation", "Select the bit operation on object state mask");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "state", PROP_BOOLEAN, PROP_LAYER_MEMBER);
+ prop= RNA_def_property(srna, "states", PROP_BOOLEAN, PROP_LAYER_MEMBER);
RNA_def_property_boolean_sdna(prop, NULL, "mask", 1);
RNA_def_property_array(prop, OB_MAX_STATES);
RNA_def_property_ui_text(prop, "State", "");
diff --git a/source/blender/makesrna/intern/rna_animation.c b/source/blender/makesrna/intern/rna_animation.c
index e0cf4f912b1..87a002db828 100644
--- a/source/blender/makesrna/intern/rna_animation.c
+++ b/source/blender/makesrna/intern/rna_animation.c
@@ -327,7 +327,7 @@ static PointerRNA rna_KeyingSet_typeinfo_get(PointerRNA *ptr)
static KS_Path *rna_KeyingSet_paths_add(KeyingSet *keyingset, ReportList *reports,
- ID *id, char rna_path[], int index, int grouping_method, char group_name[])
+ ID *id, char rna_path[], int index, int group_method, char group_name[])
{
KS_Path *ksp = NULL;
short flag = 0;
@@ -340,7 +340,7 @@ static KS_Path *rna_KeyingSet_paths_add(KeyingSet *keyingset, ReportList *report
/* if data is valid, call the API function for this */
if (keyingset) {
- ksp= BKE_keyingset_add_path(keyingset, id, group_name, rna_path, index, flag, grouping_method);
+ ksp= BKE_keyingset_add_path(keyingset, id, group_name, rna_path, index, flag, group_method);
keyingset->active_path= BLI_countlist(&keyingset->paths);
}
else {
@@ -395,17 +395,17 @@ static void rna_def_common_keying_flags(StructRNA *srna, short reg)
{
PropertyRNA *prop;
- prop= RNA_def_property(srna, "insertkey_needed", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_insertkey_needed", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "keyingflag", INSERTKEY_NEEDED);
RNA_def_property_ui_text(prop, "Insert Keyframes - Only Needed", "Only insert keyframes where they're needed in the relevant F-Curves");
if (reg) RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL);
- prop= RNA_def_property(srna, "insertkey_visual", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_insertkey_visual", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "keyingflag", INSERTKEY_MATRIX);
RNA_def_property_ui_text(prop, "Insert Keyframes - Visual", "Insert keyframes based on 'visual transforms'");
if (reg) RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL);
- prop= RNA_def_property(srna, "insertkey_xyz_to_rgb", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_insertkey_xyz_to_rgb", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "keyingflag", INSERTKEY_XYZ2RGB);
RNA_def_property_ui_text(prop, "F-Curve Colors - XYZ to RGB", "Color for newly added transformation F-Curves (Location, Rotation, Scale) and also Color is based on the transform axis");
if (reg) RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL);
@@ -489,7 +489,7 @@ static void rna_def_keyingset_path(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "ID");
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_editable_func(prop, "rna_ksPath_id_editable");
- RNA_def_property_pointer_funcs(prop, NULL, NULL, "rna_ksPath_id_typef");
+ RNA_def_property_pointer_funcs(prop, NULL, NULL, "rna_ksPath_id_typef", NULL);
RNA_def_property_ui_text(prop, "ID-Block", "ID-Block that keyframes for Keying Set should be added to (for Absolute Keying Sets only)");
prop= RNA_def_property(srna, "id_type", PROP_ENUM, PROP_NONE);
@@ -504,7 +504,7 @@ static void rna_def_keyingset_path(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Group Name", "Name of Action Group to assign setting(s) for this path to");
/* Grouping */
- prop= RNA_def_property(srna, "grouping", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "group_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "groupmode");
RNA_def_property_enum_items(prop, keyingset_path_grouping_items);
RNA_def_property_ui_text(prop, "Grouping Method", "Method used to define which Group-name to use");
@@ -519,7 +519,7 @@ static void rna_def_keyingset_path(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "RNA Array Index", "Index to the specific setting if applicable");
/* Flags */
- prop= RNA_def_property(srna, "entire_array", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_entire_array", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", KSP_FLAG_WHOLE_ARRAY);
RNA_def_property_ui_text(prop, "Entire Array", "When an 'array/vector' type is chosen (Location, Rotation, Color, etc.), entire array is to be used");
@@ -559,7 +559,7 @@ static void rna_def_keyingset_paths(BlenderRNA *brna, PropertyRNA *cprop)
/* index (defaults to -1 for entire array) */
parm=RNA_def_int(func, "index", -1, -1, INT_MAX, "Index", "The index of the destination property (i.e. axis of Location/Rotation/etc.), or -1 for the entire array.", 0, INT_MAX);
/* grouping */
- parm=RNA_def_enum(func, "grouping_method", keyingset_path_grouping_items, KSP_GROUP_KSNAME, "Grouping Method", "Method used to define which Group-name to use.");
+ parm=RNA_def_enum(func, "group_method", keyingset_path_grouping_items, KSP_GROUP_KSNAME, "Grouping Method", "Method used to define which Group-name to use.");
parm=RNA_def_string(func, "group_name", "", 64, "Group Name", "Name of Action Group to assign destination to (only if grouping mode is to use this name).");
@@ -595,7 +595,7 @@ static void rna_def_keyingset(BlenderRNA *brna)
/* KeyingSetInfo (Type Info) for Builtin Sets only */
prop= RNA_def_property(srna, "type_info", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "KeyingSetInfo");
- RNA_def_property_pointer_funcs(prop, "rna_KeyingSet_typeinfo_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_KeyingSet_typeinfo_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Type Info", "Callback function defines for built-in Keying Sets");
/* Paths */
@@ -609,7 +609,7 @@ static void rna_def_keyingset(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "KeyingSetPath");
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_editable_func(prop, "rna_KeyingSet_active_ksPath_editable");
- RNA_def_property_pointer_funcs(prop, "rna_KeyingSet_active_ksPath_get", "rna_KeyingSet_active_ksPath_set", NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_KeyingSet_active_ksPath_get", "rna_KeyingSet_active_ksPath_set", NULL, NULL);
RNA_def_property_ui_text(prop, "Active Keying Set", "Active Keying Set used to insert/delete keyframes");
prop= RNA_def_property(srna, "active_path_index", PROP_INT, PROP_NONE);
@@ -618,7 +618,8 @@ static void rna_def_keyingset(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Active Path Index", "Current Keying Set index");
/* Flags */
- prop= RNA_def_property(srna, "absolute", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_path_absolute", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", KEYINGSET_ABSOLUTE);
RNA_def_property_ui_text(prop, "Absolute", "Keying Set defines specific paths/settings to be keyframed (i.e. is not reliant on context info)");
@@ -658,7 +659,7 @@ void rna_def_animdata(BlenderRNA *brna)
/* Active Action */
prop= RNA_def_property(srna, "action", PROP_POINTER, PROP_NONE);
- RNA_def_property_pointer_funcs(prop, NULL, "rna_AnimData_action_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_AnimData_action_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE); /* this flag as well as the dynamic test must be defined for this to be editable... */
RNA_def_property_editable_func(prop, "rna_AnimData_action_editable");
RNA_def_property_ui_text(prop, "Action", "Active Action for this datablock");
@@ -670,7 +671,7 @@ void rna_def_animdata(BlenderRNA *brna)
RNA_def_property_enum_items(prop, nla_mode_extend_items);
RNA_def_property_ui_text(prop, "Action Extrapolation", "Action to take for gaps past the Active Action's range (when evaluating with NLA)");
- prop= RNA_def_property(srna, "action_blending", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "action_blend_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "act_blendmode");
RNA_def_property_enum_items(prop, nla_mode_blend_items);
RNA_def_property_ui_text(prop, "Action Blending", "Method used for combining Active Action's result with result of NLA stack");
@@ -688,7 +689,7 @@ void rna_def_animdata(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Drivers", "The Drivers/Expressions for this datablock");
/* General Settings */
- prop= RNA_def_property(srna, "nla_enabled", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_nla", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", ADT_NLA_EVAL_OFF);
RNA_def_property_ui_text(prop, "NLA Evaluation Enabled", "NLA stack is evaluated when evaluating this block");
}
diff --git a/source/blender/makesrna/intern/rna_animviz.c b/source/blender/makesrna/intern/rna_animviz.c
index 1d9276e7ea2..bbc1c841e47 100644
--- a/source/blender/makesrna/intern/rna_animviz.c
+++ b/source/blender/makesrna/intern/rna_animviz.c
@@ -104,9 +104,9 @@ static void rna_def_animviz_motionpath_vert(BlenderRNA *brna)
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Coordinates", "");
- prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOTIONPATH_VERT_SEL);
- RNA_def_property_ui_text(prop, "Selected", "Path point is selected for editing");
+ RNA_def_property_ui_text(prop, "Select", "Path point is selected for editing");
}
static void rna_def_animviz_motion_path(BlenderRNA *brna)
@@ -145,7 +145,7 @@ static void rna_def_animviz_motion_path(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE); // xxx
RNA_def_property_ui_text(prop, "Use Bone Heads", "For PoseBone paths, use the bone head location when calculating this path");
- prop= RNA_def_property(srna, "editing", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_modified", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOTIONPATH_FLAG_EDIT);
RNA_def_property_ui_text(prop, "Edit Path", "Path is being edited");
}
@@ -178,7 +178,7 @@ static void rna_def_animviz_ghosts(BlenderRNA *brna)
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
/* Settings */
- prop= RNA_def_property(srna, "only_selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_only_selected", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ghost_flag", GHOST_FLAG_ONLYSEL);
RNA_def_property_ui_text(prop, "On Selected Bones Only", "For Pose-Mode drawing, only draw ghosts for selected bones");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
@@ -203,13 +203,13 @@ static void rna_def_animviz_ghosts(BlenderRNA *brna)
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
/* Around Current Ranges */
- prop= RNA_def_property(srna, "before_current", PROP_INT, PROP_TIME);
+ prop= RNA_def_property(srna, "frame_before", PROP_INT, PROP_TIME);
RNA_def_property_int_sdna(prop, NULL, "ghost_bc");
RNA_def_property_range(prop, 0, 30);
RNA_def_property_ui_text(prop, "Before Current", "Number of frames to show before the current frame (only for 'Around Current Frame' Onion-skinning method)");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
- prop= RNA_def_property(srna, "after_current", PROP_INT, PROP_TIME);
+ prop= RNA_def_property(srna, "frame_after", PROP_INT, PROP_TIME);
RNA_def_property_int_sdna(prop, NULL, "ghost_ac");
RNA_def_property_range(prop, 0, 30);
RNA_def_property_ui_text(prop, "After Current", "Number of frames to show after the current frame (only for 'Around Current Frame' Onion-skinning method)");
@@ -254,7 +254,7 @@ static void rna_def_animviz_paths(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Show Frame Numbers", "Show frame numbers on Motion Paths");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
- prop= RNA_def_property(srna, "highlight_keyframes", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_keyframe_highlight", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "path_viewflag", MOTIONPATH_VIEW_KFRAS);
RNA_def_property_ui_text(prop, "Highlight Keyframes", "Emphasize position of keyframes on Motion Paths");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
@@ -264,7 +264,7 @@ static void rna_def_animviz_paths(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Show Keyframe Numbers", "Show frame numbers of Keyframes on Motion Paths");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
- prop= RNA_def_property(srna, "search_all_action_keyframes", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_keyframe_action_all", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "path_viewflag", MOTIONPATH_VIEW_KFACT);
RNA_def_property_ui_text(prop, "All Action Keyframes", "For bone motion paths, search whole Action for keyframes instead of in group with matching name only (is slower)");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
@@ -290,13 +290,13 @@ static void rna_def_animviz_paths(BlenderRNA *brna)
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
/* Around Current Ranges */
- prop= RNA_def_property(srna, "before_current", PROP_INT, PROP_TIME);
+ prop= RNA_def_property(srna, "frame_before", PROP_INT, PROP_TIME);
RNA_def_property_int_sdna(prop, NULL, "path_bc");
RNA_def_property_range(prop, 1, MAXFRAMEF/2);
RNA_def_property_ui_text(prop, "Before Current", "Number of frames to show before the current frame (only for 'Around Current Frame' Onion-skinning method)");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
- prop= RNA_def_property(srna, "after_current", PROP_INT, PROP_TIME);
+ prop= RNA_def_property(srna, "frame_after", PROP_INT, PROP_TIME);
RNA_def_property_int_sdna(prop, NULL, "path_ac");
RNA_def_property_range(prop, 1, MAXFRAMEF/2);
RNA_def_property_ui_text(prop, "After Current", "Number of frames to show after the current frame (only for 'Around Current Frame' Onion-skinning method)");
@@ -325,17 +325,17 @@ static void rna_def_animviz(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Animation Visualisation", "Settings for the visualisation of motion");
/* onion-skinning settings (nested struct) */
- prop= RNA_def_property(srna, "onion_skinning", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "onion_skin_frames", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "AnimVizOnionSkinning");
- RNA_def_property_pointer_funcs(prop, "rna_AnimViz_onion_skinning_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_AnimViz_onion_skinning_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Onion Skinning", "Onion Skinning (ghosting) settings for visualisation");
/* motion path settings (nested struct) */
- prop= RNA_def_property(srna, "motion_paths", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "motion_path", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "AnimVizMotionPaths");
- RNA_def_property_pointer_funcs(prop, "rna_AnimViz_motion_paths_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_AnimViz_motion_paths_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Motion Paths", "Motion Path settings for visualisation");
}
diff --git a/source/blender/makesrna/intern/rna_armature.c b/source/blender/makesrna/intern/rna_armature.c
index 9239378f496..8b21fd2c80a 100644
--- a/source/blender/makesrna/intern/rna_armature.c
+++ b/source/blender/makesrna/intern/rna_armature.c
@@ -123,7 +123,7 @@ static char *rna_Bone_path(PointerRNA *ptr)
return BLI_sprintfN("bones[\"%s\"]", ((Bone*)ptr->data)->name);
}
-static IDProperty *rna_Bone_idproperties(PointerRNA *ptr, int create)
+static IDProperty *rna_Bone_idprops(PointerRNA *ptr, int create)
{
Bone *bone= ptr->data;
@@ -135,7 +135,7 @@ static IDProperty *rna_Bone_idproperties(PointerRNA *ptr, int create)
return bone->prop;
}
-static IDProperty *rna_EditBone_idproperties(PointerRNA *ptr, int create)
+static IDProperty *rna_EditBone_idprops(PointerRNA *ptr, int create)
{
EditBone *ebone= ptr->data;
@@ -393,7 +393,7 @@ static void rna_def_bone_common(StructRNA *srna, int editbone)
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
/* flags */
- prop= RNA_def_property(srna, "layer", PROP_BOOLEAN, PROP_LAYER_MEMBER);
+ prop= RNA_def_property(srna, "layers", PROP_BOOLEAN, PROP_LAYER_MEMBER);
RNA_def_property_boolean_sdna(prop, NULL, "layer", 1);
RNA_def_property_array(prop, 32);
if(editbone) RNA_def_property_boolean_funcs(prop, NULL, "rna_EditBone_layer_set");
@@ -401,49 +401,49 @@ static void rna_def_bone_common(StructRNA *srna, int editbone)
RNA_def_property_ui_text(prop, "Layers", "Layers bone exists in");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
- prop= RNA_def_property(srna, "connected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_connect", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_CONNECTED);
if(editbone) RNA_def_property_boolean_funcs(prop, NULL, "rna_EditBone_connected_set");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Connected", "When bone has a parent, bone's head is struck to the parent's tail");
RNA_def_property_update(prop, 0, "rna_Armature_update_data");
- prop= RNA_def_property(srna, "hinge", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_hinge", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_HINGE);
RNA_def_property_ui_text(prop, "Inherit Rotation", "Bone inherits rotation or scale from parent bone");
RNA_def_property_update(prop, 0, "rna_Armature_update_data");
- prop= RNA_def_property(srna, "multiply_vertexgroup_with_envelope", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_envelope_multiply", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_MULT_VG_ENV);
RNA_def_property_ui_text(prop, "Multiply Vertex Group with Envelope", "When deforming bone, multiply effects of Vertex Group weights with Envelope influence");
RNA_def_property_update(prop, 0, "rna_Armature_update_data");
- prop= RNA_def_property(srna, "deform", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_deform", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_NO_DEFORM);
RNA_def_property_ui_text(prop, "Deform", "Bone does not deform any geometry");
RNA_def_property_update(prop, 0, "rna_Armature_update_data");
- prop= RNA_def_property(srna, "inherit_scale", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_inherit_scale", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_ui_text(prop, "Inherit Scale", "Bone inherits scaling from parent bone");
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_NO_SCALE);
RNA_def_property_update(prop, 0, "rna_Armature_update_data");
- prop= RNA_def_property(srna, "local_location", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_local_location", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_ui_text(prop, "Local Location", "Bone location is set in local space");
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_NO_LOCAL_LOCATION);
RNA_def_property_update(prop, 0, "rna_Armature_update_data");
- prop= RNA_def_property(srna, "draw_wire", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_wire", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_DRAWWIRE);
RNA_def_property_ui_text(prop, "Draw Wire", "Bone is always drawn as Wireframe regardless of viewport draw mode. Useful for non-obstructive custom bone shapes");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
- prop= RNA_def_property(srna, "cyclic_offset", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cyclic_offset", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_NO_CYCLICOFFSET);
RNA_def_property_ui_text(prop, "Cyclic Offset", "When bone doesn't have a parent, it receives cyclic offset effects");
RNA_def_property_update(prop, 0, "rna_Armature_update_data");
- prop= RNA_def_property(srna, "restrict_select", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "hide_select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_UNSELECTABLE);
RNA_def_property_ui_text(prop, "Selectable", "Bone is able to be selected");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
@@ -504,7 +504,7 @@ static void rna_def_bone(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Bone", "Bone in an Armature datablock");
RNA_def_struct_ui_icon(srna, ICON_BONE_DATA);
RNA_def_struct_path_func(srna, "rna_Bone_path");
- RNA_def_struct_idproperties_func(srna, "rna_Bone_idproperties");
+ RNA_def_struct_idprops_func(srna, "rna_Bone_idprops");
/* pointers/collections */
/* parent (pointer) */
@@ -523,14 +523,14 @@ static void rna_def_bone(BlenderRNA *brna)
rna_def_bone_common(srna, 0);
// XXX should we define this in PoseChannel wrapping code instead? but PoseChannels directly get some of their flags from here...
- prop= RNA_def_property(srna, "hidden", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_HIDDEN_P);
- RNA_def_property_ui_text(prop, "Hidden", "Bone is not visible when it is not in Edit Mode (i.e. in Object or Pose Modes)");
+ RNA_def_property_ui_text(prop, "Hide", "Bone is not visible when it is not in Edit Mode (i.e. in Object or Pose Modes)");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
- prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_SELECTED);
- RNA_def_property_ui_text(prop, "Selected", "");
+ RNA_def_property_ui_text(prop, "Select", "");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
/* XXX better matrix descriptions possible (Arystan) */
@@ -572,7 +572,7 @@ static void rna_def_edit_bone(BlenderRNA *brna)
srna= RNA_def_struct(brna, "EditBone", NULL);
RNA_def_struct_sdna(srna, "EditBone");
- RNA_def_struct_idproperties_func(srna, "rna_EditBone_idproperties");
+ RNA_def_struct_idprops_func(srna, "rna_EditBone_idprops");
RNA_def_struct_ui_text(srna, "Edit Bone", "Editmode bone in an Armature datablock");
RNA_def_struct_ui_icon(srna, ICON_BONE_DATA);
@@ -580,7 +580,7 @@ static void rna_def_edit_bone(BlenderRNA *brna)
prop= RNA_def_property(srna, "parent", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "EditBone");
- RNA_def_property_pointer_funcs(prop, "rna_EditBone_parent_get", "rna_EditBone_parent_set", NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_EditBone_parent_get", "rna_EditBone_parent_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Parent", "Parent edit bone (in same Armature)");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
@@ -604,29 +604,29 @@ static void rna_def_edit_bone(BlenderRNA *brna)
rna_def_bone_common(srna, 1);
- prop= RNA_def_property(srna, "hidden", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_HIDDEN_A);
- RNA_def_property_ui_text(prop, "Hidden", "Bone is not visible when in Edit Mode");
+ RNA_def_property_ui_text(prop, "Hide", "Bone is not visible when in Edit Mode");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
- prop= RNA_def_property(srna, "locked", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_EDITMODE_LOCKED);
- RNA_def_property_ui_text(prop, "Locked", "Bone is not able to be transformed when in Edit Mode");
+ RNA_def_property_ui_text(prop, "Lock", "Bone is not able to be transformed when in Edit Mode");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
- prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_SELECTED);
- RNA_def_property_ui_text(prop, "Selected", "");
+ RNA_def_property_ui_text(prop, "Select", "");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
- prop= RNA_def_property(srna, "selected_head", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select_head", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_ROOTSEL);
- RNA_def_property_ui_text(prop, "Head Selected", "");
+ RNA_def_property_ui_text(prop, "Head Select", "");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
- prop= RNA_def_property(srna, "selected_tail", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select_tail", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_TIPSEL);
- RNA_def_property_ui_text(prop, "Tail Selected", "");
+ RNA_def_property_ui_text(prop, "Tail Select", "");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
/* calculated and read only, not actual data access */
@@ -664,7 +664,7 @@ static void rna_def_armature_bones(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_property_pointer_sdna(prop, NULL, "act_bone");
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Active Bone", "Armatures active bone");
- RNA_def_property_pointer_funcs(prop, NULL, "rna_Armature_act_bone_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_Armature_act_bone_set", NULL, NULL);
/* todo, redraw */
// RNA_def_property_collection_active(prop, prop_act);
@@ -690,7 +690,7 @@ static void rna_def_armature_edit_bones(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Active EditBone", "Armatures active edit bone");
//RNA_def_property_update(prop, 0, "rna_Armature_act_editbone_update");
- RNA_def_property_pointer_funcs(prop, NULL, "rna_Armature_act_edit_bone_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_Armature_act_edit_bone_set", NULL, NULL);
/* todo, redraw */
// RNA_def_property_collection_active(prop, prop_act);
@@ -765,7 +765,8 @@ static void rna_def_armature(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Pose Position", "Show armature in binding pose or final posed state");
RNA_def_property_update(prop, 0, "rna_Armature_update_data");
- prop= RNA_def_property(srna, "drawtype", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "draw_type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "drawtype");
RNA_def_property_enum_items(prop, prop_drawtype_items);
RNA_def_property_ui_text(prop, "Draw Type", "");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
@@ -782,7 +783,7 @@ static void rna_def_armature(BlenderRNA *brna)
/* Boolean values */
/* layer */
- prop= RNA_def_property(srna, "layer", PROP_BOOLEAN, PROP_LAYER_MEMBER);
+ prop= RNA_def_property(srna, "layers", PROP_BOOLEAN, PROP_LAYER_MEMBER);
RNA_def_property_boolean_sdna(prop, NULL, "layer", 1);
RNA_def_property_array(prop, 32);
RNA_def_property_ui_text(prop, "Visible Layers", "Armature layer visibility");
@@ -791,54 +792,54 @@ static void rna_def_armature(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_LIB_EXCEPTION);
/* layer protection */
- prop= RNA_def_property(srna, "layer_protection", PROP_BOOLEAN, PROP_LAYER);
+ prop= RNA_def_property(srna, "layers_protected", PROP_BOOLEAN, PROP_LAYER);
RNA_def_property_boolean_sdna(prop, NULL, "layer_protected", 1);
RNA_def_property_array(prop, 32);
RNA_def_property_ui_text(prop, "Layer Proxy Protection", "Protected layers in Proxy Instances are restored to Proxy settings on file reload and undo");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
/* flag */
- prop= RNA_def_property(srna, "draw_axes", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_axes", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ARM_DRAWAXES);
RNA_def_property_ui_text(prop, "Draw Axes", "Draw bone axes");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
RNA_def_property_flag(prop, PROP_LIB_EXCEPTION);
- prop= RNA_def_property(srna, "draw_names", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_names", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ARM_DRAWNAMES);
RNA_def_property_ui_text(prop, "Draw Names", "Draw bone names");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
RNA_def_property_flag(prop, PROP_LIB_EXCEPTION);
- prop= RNA_def_property(srna, "delay_deform", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_deform_delay", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ARM_DELAYDEFORM);
RNA_def_property_ui_text(prop, "Delay Deform", "Don't deform children when manipulating bones in Pose Mode");
RNA_def_property_update(prop, 0, "rna_Armature_update_data");
- prop= RNA_def_property(srna, "x_axis_mirror", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_mirror_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ARM_MIRROR_EDIT);
RNA_def_property_ui_text(prop, "X-Axis Mirror", "Apply changes to matching bone on opposite side of X-Axis");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
RNA_def_property_flag(prop, PROP_LIB_EXCEPTION);
- prop= RNA_def_property(srna, "auto_ik", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_ik", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ARM_AUTO_IK);
RNA_def_property_ui_text(prop, "Auto IK", "Add temporaral IK constraints while grabbing bones in Pose Mode");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
RNA_def_property_flag(prop, PROP_LIB_EXCEPTION);
- prop= RNA_def_property(srna, "draw_custom_bone_shapes", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_bone_custom_shapes", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", ARM_NO_CUSTOM);
RNA_def_property_ui_text(prop, "Draw Custom Bone Shapes", "Draw bones with their custom shapes");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
- prop= RNA_def_property(srna, "draw_group_colors", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_group_colors", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ARM_COL_CUSTOM);
RNA_def_property_ui_text(prop, "Draw Bone Group Colors", "Draw bone group colors");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
// XXX depreceated ....... old animviz for armatures only
- prop= RNA_def_property(srna, "ghost_only_selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_only_ghost_selected", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ARM_GHOST_ONLYSEL);
RNA_def_property_ui_text(prop, "Draw Ghosts on Selected Bones Only", "");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
@@ -846,17 +847,17 @@ static void rna_def_armature(BlenderRNA *brna)
// XXX depreceated ....... old animviz for armatures only
/* deformflag */
- prop= RNA_def_property(srna, "deform_vertexgroups", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_deform_vertex_groups", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "deformflag", ARM_DEF_VGROUP);
RNA_def_property_ui_text(prop, "Deform Vertex Groups", "Enable Vertex Groups when defining deform");
RNA_def_property_update(prop, 0, "rna_Armature_update_data");
- prop= RNA_def_property(srna, "deform_envelope", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_deform_envelopes", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "deformflag", ARM_DEF_ENVELOPE);
RNA_def_property_ui_text(prop, "Deform Envelopes", "Enable Bone Envelopes when defining deform");
RNA_def_property_update(prop, 0, "rna_Armature_update_data");
- prop= RNA_def_property(srna, "deform_quaternion", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_deform_preserve_volume", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "deformflag", ARM_DEF_QUATERNION);
RNA_def_property_ui_text(prop, "Use Dual Quaternion Deformation", "Enable deform rotation with Quaternions");
RNA_def_property_update(prop, 0, "rna_Armature_update_data");
diff --git a/source/blender/makesrna/intern/rna_boid.c b/source/blender/makesrna/intern/rna_boid.c
index 7e52032687c..3afa135d079 100644
--- a/source/blender/makesrna/intern/rna_boid.c
+++ b/source/blender/makesrna/intern/rna_boid.c
@@ -97,7 +97,7 @@ static void rna_Boids_reset_deps(Main *bmain, Scene *scene, PointerRNA *ptr)
else
DAG_id_flush_update(ptr->id.data, OB_RECALC_DATA|PSYS_RECALC_RESET);
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
WM_main_add_notifier(NC_OBJECT|ND_PARTICLE|NA_EDITED, NULL);
}
@@ -238,7 +238,7 @@ static void rna_def_boidrule_goal(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Object", "Goal object");
RNA_def_property_update(prop, 0, "rna_Boids_reset_deps");
- prop= RNA_def_property(srna, "predict", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_predict", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "options", BRULE_GOAL_AVOID_PREDICT);
RNA_def_property_ui_text(prop, "Predict", "Predict target movement");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
@@ -259,7 +259,7 @@ static void rna_def_boidrule_avoid(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Object", "Object to avoid");
RNA_def_property_update(prop, 0, "rna_Boids_reset_deps");
- prop= RNA_def_property(srna, "predict", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_predict", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "options", BRULE_GOAL_AVOID_PREDICT);
RNA_def_property_ui_text(prop, "Predict", "Predict target movement");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
@@ -278,12 +278,12 @@ static void rna_def_boidrule_avoid_collision(BlenderRNA *brna)
srna= RNA_def_struct(brna, "BoidRuleAvoidCollision", "BoidRule");
RNA_def_struct_ui_text(srna, "Avoid Collision", "");
- prop= RNA_def_property(srna, "boids", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_avoid", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "options", BRULE_ACOLL_WITH_BOIDS);
RNA_def_property_ui_text(prop, "Boids", "Avoid collision with other boids");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
- prop= RNA_def_property(srna, "deflectors", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_avoid_collision", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "options", BRULE_ACOLL_WITH_DEFLECTORS);
RNA_def_property_ui_text(prop, "Deflectors", "Avoid collision with deflector objects");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
@@ -313,12 +313,13 @@ static void rna_def_boidrule_follow_leader(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Distance", "Distance behind leader to follow");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
- prop= RNA_def_property(srna, "queue_size", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "queue_count", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "queue_size");
RNA_def_property_range(prop, 0.0f, 100.0f);
RNA_def_property_ui_text(prop, "Queue Size", "How many boids in a line");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
- prop= RNA_def_property(srna, "line", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_line", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "options", BRULE_LEADER_IN_LINE);
RNA_def_property_ui_text(prop, "Line", "Follow leader in a line");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
@@ -391,17 +392,17 @@ static void rna_def_boidrule(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Type", "");
/* flags */
- prop= RNA_def_property(srna, "in_air", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_in_air", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BOIDRULE_IN_AIR);
RNA_def_property_ui_text(prop, "In Air", "Use rule when boid is flying");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
- prop= RNA_def_property(srna, "on_land", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_on_land", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BOIDRULE_ON_LAND);
RNA_def_property_ui_text(prop, "On Land", "Use rule when boid is on land");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
- //prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
+ //prop= RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
//RNA_def_property_boolean_sdna(prop, NULL, "mode", eModifierMode_Expanded);
//RNA_def_property_ui_text(prop, "Expanded", "Set modifier expanded in the user interface");
@@ -436,14 +437,15 @@ static void rna_def_boidstate(BlenderRNA *brna)
prop= RNA_def_property(srna, "active_boid_rule", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "BoidRule");
- RNA_def_property_pointer_funcs(prop, "rna_BoidState_active_boid_rule_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_BoidState_active_boid_rule_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Active Boid Rule", "");
prop= RNA_def_property(srna, "active_boid_rule_index", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_funcs(prop, "rna_BoidState_active_boid_rule_index_get", "rna_BoidState_active_boid_rule_index_set", "rna_BoidState_active_boid_rule_index_range");
RNA_def_property_ui_text(prop, "Active Boid Rule Index", "");
- prop= RNA_def_property(srna, "rule_fuzziness", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "rule_fuzzy", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "rule_fuzziness");
RNA_def_property_range(prop, 0.0, 1.0);
RNA_def_property_ui_text(prop, "Rule Fuzziness", "");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
@@ -466,12 +468,14 @@ static void rna_def_boid_settings(BlenderRNA *brna)
srna = RNA_def_struct(brna, "BoidSettings", NULL);
RNA_def_struct_ui_text(srna, "Boid Settings", "Settings for boid physics");
- prop= RNA_def_property(srna, "landing_smoothness", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "land_smooth", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "landing_smoothness");
RNA_def_property_range(prop, 0.0, 10.0);
RNA_def_property_ui_text(prop, "Landing Smoothness", "How smoothly the boids land");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
- prop= RNA_def_property(srna, "banking", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "bank", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "banking");
RNA_def_property_range(prop, 0.0, 2.0);
RNA_def_property_ui_text(prop, "Banking", "Amount of rotation around velocity vector on turns");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
@@ -488,7 +492,7 @@ static void rna_def_boid_settings(BlenderRNA *brna)
prop= RNA_def_property(srna, "active_boid_state", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "BoidRule");
- RNA_def_property_pointer_funcs(prop, "rna_BoidSettings_active_boid_state_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_BoidSettings_active_boid_state_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Active Boid Rule", "");
prop= RNA_def_property(srna, "active_boid_state_index", PROP_INT, PROP_UNSIGNED);
@@ -522,22 +526,26 @@ static void rna_def_boid_settings(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Boids_reset");
/* physical properties */
- prop= RNA_def_property(srna, "air_min_speed", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "air_speed_min", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "air_min_speed");
RNA_def_property_range(prop, 0.0, 1.0);
RNA_def_property_ui_text(prop, "Min Air Speed", "Minimum speed in air (relative to maximum speed)");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
- prop= RNA_def_property(srna, "air_max_speed", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "air_speed_max", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "air_max_speed");
RNA_def_property_range(prop, 0.0, 100.0);
RNA_def_property_ui_text(prop, "Max Air Speed", "Maximum speed in air");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
- prop= RNA_def_property(srna, "air_max_acc", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "air_acc_max", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "air_max_acc");
RNA_def_property_range(prop, 0.0, 1.0);
RNA_def_property_ui_text(prop, "Max Air Acceleration", "Maximum acceleration in air (relative to maximum speed)");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
- prop= RNA_def_property(srna, "air_max_ave", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "air_ave_max", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "air_max_ave");
RNA_def_property_range(prop, 0.0, 1.0);
RNA_def_property_ui_text(prop, "Max Air Angular Velocity", "Maximum angular velocity in air (relative to 180 degrees)");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
@@ -552,17 +560,20 @@ static void rna_def_boid_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Jump Speed", "Maximum speed for jumping");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
- prop= RNA_def_property(srna, "land_max_speed", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "land_speed_max", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "land_max_speed");
RNA_def_property_range(prop, 0.0, 100.0);
RNA_def_property_ui_text(prop, "Max Land Speed", "Maximum speed on land");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
- prop= RNA_def_property(srna, "land_max_acc", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "land_acc_max", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "land_max_acc");
RNA_def_property_range(prop, 0.0, 1.0);
RNA_def_property_ui_text(prop, "Max Land Acceleration", "Maximum acceleration on land (relative to maximum speed)");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
- prop= RNA_def_property(srna, "land_max_ave", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "land_ave_max", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "land_max_ave");
RNA_def_property_range(prop, 0.0, 1.0);
RNA_def_property_ui_text(prop, "Max Land Angular Velocity", "Maximum angular velocity on land (relative to 180 degrees)");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
@@ -578,17 +589,17 @@ static void rna_def_boid_settings(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Boids_reset");
/* options */
- prop= RNA_def_property(srna, "allow_flight", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_flight", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "options", BOID_ALLOW_FLIGHT);
RNA_def_property_ui_text(prop, "Allow Flight", "Allow boids to move in air");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
- prop= RNA_def_property(srna, "allow_land", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_land", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "options", BOID_ALLOW_LAND);
RNA_def_property_ui_text(prop, "Allow Land", "Allow boids to move on land");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
- prop= RNA_def_property(srna, "allow_climb", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_climb", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "options", BOID_ALLOW_CLIMB);
RNA_def_property_ui_text(prop, "Allow Climbing", "Allow boids to climb goal objects");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c
index 6d5a06d4f81..83d40a3802b 100644
--- a/source/blender/makesrna/intern/rna_brush.c
+++ b/source/blender/makesrna/intern/rna_brush.c
@@ -31,77 +31,265 @@
#include "DNA_brush_types.h"
#include "DNA_texture_types.h"
#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
#include "BLI_math.h"
#include "IMB_imbuf.h"
+
#include "WM_types.h"
+static EnumPropertyItem prop_direction_items[]= {
+ {0, "ADD", 0, "Add", "Add effect of brush"},
+ {BRUSH_DIR_IN, "SUBTRACT", 0, "Subtract", "Subtract effect of brush"},
+ {0, NULL, 0, NULL, NULL}};
+
+EnumPropertyItem brush_sculpt_tool_items[] = {
+ {SCULPT_TOOL_BLOB, "BLOB", ICON_BRUSH_BLOB, "Blob", ""},
+ {SCULPT_TOOL_CLAY, "CLAY", ICON_BRUSH_CLAY, "Clay", ""},
+ {SCULPT_TOOL_CREASE, "CREASE",ICON_BRUSH_CREASE, "Crease", ""},
+ {SCULPT_TOOL_DRAW, "DRAW", ICON_BRUSH_SCULPT_DRAW, "Draw", ""},
+ {SCULPT_TOOL_FILL, "FILL", ICON_BRUSH_FILL, "Fill", ""},
+ {SCULPT_TOOL_FLATTEN, "FLATTEN", ICON_BRUSH_FLATTEN, "Flatten", ""},
+ {SCULPT_TOOL_GRAB, "GRAB", ICON_BRUSH_GRAB, "Grab", ""},
+ {SCULPT_TOOL_INFLATE, "INFLATE", ICON_BRUSH_INFLATE, "Inflate", ""},
+ {SCULPT_TOOL_LAYER, "LAYER", ICON_BRUSH_LAYER, "Layer", ""},
+ {SCULPT_TOOL_NUDGE, "NUDGE", ICON_BRUSH_NUDGE, "Nudge", ""},
+ {SCULPT_TOOL_PINCH, "PINCH", ICON_BRUSH_PINCH, "Pinch", ""},
+ {SCULPT_TOOL_ROTATE, "ROTATE", ICON_BRUSH_ROTATE, "Rotate", ""},
+ {SCULPT_TOOL_SCRAPE, "SCRAPE", ICON_BRUSH_SCRAPE, "Scrape", ""},
+ {SCULPT_TOOL_SMOOTH, "SMOOTH", ICON_BRUSH_SMOOTH, "Smooth", ""},
+ {SCULPT_TOOL_SNAKE_HOOK, "SNAKE_HOOK", ICON_BRUSH_SNAKE_HOOK, "Snake Hook", ""},
+ {SCULPT_TOOL_THUMB, "THUMB", ICON_BRUSH_THUMB, "Thumb", ""},
+ {0, NULL, 0, NULL, NULL}};
+
+
+EnumPropertyItem brush_vertexpaint_tool_items[] = {
+ {0, "MIX", ICON_BRUSH_MIX, "Mix", "Use mix blending mode while painting"},
+ {1, "ADD", ICON_BRUSH_ADD, "Add", "Use add blending mode while painting"},
+ {2, "SUB", ICON_BRUSH_SUBTRACT, "Subtract", "Use subtract blending mode while painting"},
+ {3, "MUL", ICON_BRUSH_MULTIPLY, "Multiply", "Use multiply blending mode while painting"},
+ {4, "BLUR", ICON_BRUSH_BLUR, "Blur", "Blur the color with surrounding values"},
+ {5, "LIGHTEN", ICON_BRUSH_LIGHTEN, "Lighten", "Use lighten blending mode while painting"},
+ {6, "DARKEN", ICON_BRUSH_DARKEN, "Darken", "Use darken blending mode while painting"},
+ {0, NULL, 0, NULL, NULL}};
+
+EnumPropertyItem brush_imagepaint_tool_items[] = {
+ {PAINT_TOOL_DRAW, "DRAW", ICON_BRUSH_TEXDRAW, "Draw", ""},
+ {PAINT_TOOL_SOFTEN, "SOFTEN", ICON_BRUSH_SOFTEN, "Soften", ""},
+ {PAINT_TOOL_SMEAR, "SMEAR", ICON_BRUSH_SMEAR, "Smear", ""},
+ {PAINT_TOOL_CLONE, "CLONE", ICON_BRUSH_CLONE, "Clone", ""},
+ {0, NULL, 0, NULL, NULL}};
+
#ifdef RNA_RUNTIME
#include "MEM_guardedalloc.h"
+#include "DNA_object_types.h"
+
+#include "RNA_access.h"
+
#include "BKE_texture.h"
+#include "BKE_brush.h"
+#include "BKE_icons.h"
+
+#include "BKE_paint.h"
#include "WM_api.h"
+static void rna_Brush_reset_icon(Brush *br, char *type)
+{
+ ID *id = &br->id;
+
+ if(br->flag & BRUSH_CUSTOM_ICON)
+ return;
+
+ if(id->icon_id >= BIFICONID_LAST) {
+ BKE_icon_delete(id);
+ BKE_previewimg_free_id(id);
+ }
+
+ id->icon_id = 0;
+}
+
static void rna_Brush_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
Brush *br= (Brush*)ptr->data;
WM_main_add_notifier(NC_BRUSH|NA_EDITED, br);
+ //WM_main_add_notifier(NC_SPACE|ND_SPACE_VIEW3D, NULL);
+}
+
+static void rna_Brush_sculpt_tool_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+{
+ Brush *br= (Brush*)ptr->data;
+ rna_Brush_reset_icon(br, "sculpt");
+ rna_Brush_update(bmain, scene, ptr);
+}
+
+static void rna_Brush_vertexpaint_tool_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+{
+ Brush *br= (Brush*)ptr->data;
+ rna_Brush_reset_icon(br, "vertex_paint");
+ rna_Brush_update(bmain, scene, ptr);
+}
+
+static void rna_Brush_imagepaint_tool_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+{
+ Brush *br= (Brush*)ptr->data;
+ rna_Brush_reset_icon(br, "texture_paint");
+ rna_Brush_update(bmain, scene, ptr);
}
-static int rna_Brush_is_sculpt_brush(Brush *me, bContext *C)
+static void rna_Brush_icon_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Sculpt *sd = CTX_data_tool_settings(C)->sculpt;
- int i;
+ Brush *br= (Brush*)ptr->data;
- for (i= 0; i < sd->paint.brush_count; i++) {
- if (strcmp(me->id.name+2, sd->paint.brushes[i]->id.name+2) == 0)
- return 1;
+ if(br->icon_imbuf) {
+ IMB_freeImBuf(br->icon_imbuf);
+ br->icon_imbuf= NULL;
}
- return 0;
+ br->id.icon_id = 0;
+
+ if(br->flag & BRUSH_CUSTOM_ICON) {
+ BKE_previewimg_get(&br->id);
+ BKE_icon_changed(BKE_icon_getid(&br->id));
+ }
+
+ WM_main_add_notifier(NC_BRUSH|NA_EDITED, br);
}
-static int rna_Brush_is_vpaint_brush(Brush *me, bContext *C)
+static void rna_Brush_set_size(PointerRNA *ptr, int value)
{
- VPaint *vp = CTX_data_tool_settings(C)->vpaint;
- int i;
+ Brush* me = (Brush*)(ptr->data);
+ brush_set_size(me, value);
+}
- for (i= 0; i < vp->paint.brush_count; i++) {
- if (strcmp(me->id.name+2, vp->paint.brushes[i]->id.name+2) == 0)
- return 1;
- }
+static int rna_Brush_get_size(PointerRNA *ptr)
+{
+ Brush* me = (Brush*)(ptr->data);
+ return brush_size(me);
+}
- return 0;
+static void rna_Brush_set_use_locked_size(PointerRNA *ptr, int value)
+{
+ Brush* me = (Brush*)(ptr->data);
+ brush_set_use_locked_size(me, value);
}
-static int rna_Brush_is_wpaint_brush(Brush *me, bContext *C)
+static int rna_Brush_get_use_locked_size(PointerRNA *ptr)
{
- VPaint *vp = CTX_data_tool_settings(C)->wpaint;
- int i;
+ Brush* me = (Brush*)(ptr->data);
+ return brush_use_locked_size(me);
+}
- for (i= 0; i < vp->paint.brush_count; i++) {
- if (strcmp(me->id.name+2, vp->paint.brushes[i]->id.name+2) == 0)
- return 1;
- }
+static void rna_Brush_set_use_size_pressure(PointerRNA *ptr, int value)
+{
+ Brush* me = (Brush*)(ptr->data);
+ brush_set_use_size_pressure(me, value);
+}
- return 0;
+static int rna_Brush_get_use_size_pressure(PointerRNA *ptr)
+{
+ Brush* me = (Brush*)(ptr->data);
+ return brush_use_size_pressure(me);
}
-static int rna_Brush_is_imapaint_brush(Brush *me, bContext *C)
+static void rna_Brush_set_use_alpha_pressure(PointerRNA *ptr, int value)
{
- ImagePaintSettings *data = &(CTX_data_tool_settings(C)->imapaint);
- int i;
+ Brush* me = (Brush*)(ptr->data);
+ brush_set_use_alpha_pressure(me, value);
+}
- for (i= 0; i < data->paint.brush_count; i++) {
- if (strcmp(me->id.name+2, data->paint.brushes[i]->id.name+2) == 0)
- return 1;
- }
+static int rna_Brush_get_use_alpha_pressure(PointerRNA *ptr)
+{
+ Brush* me = (Brush*)(ptr->data);
+ return brush_use_alpha_pressure(me);
+}
+
+static void rna_Brush_set_unprojected_radius(PointerRNA *ptr, float value)
+{
+ Brush* me = (Brush*)(ptr->data);
+ brush_set_unprojected_radius(me, value);
+}
+
+static float rna_Brush_get_unprojected_radius(PointerRNA *ptr)
+{
+ Brush* me = (Brush*)(ptr->data);
+ return brush_unprojected_radius(me);
+}
- return 0;
+static void rna_Brush_set_alpha(PointerRNA *ptr, float value)
+{
+ Brush* me = (Brush*)(ptr->data);
+ brush_set_alpha(me, value);
+}
+
+static float rna_Brush_get_alpha(PointerRNA *ptr)
+{
+ Brush* me = (Brush*)(ptr->data);
+ return brush_alpha(me);
+}
+
+static EnumPropertyItem *rna_Brush_direction_itemf(bContext *C, PointerRNA *ptr, int *free)
+{
+ static EnumPropertyItem prop_default_items[]= {
+ {0, NULL, 0, NULL, NULL}};
+
+ static EnumPropertyItem prop_flatten_contrast_items[]= {
+ {0, "FLATTEN", 0, "Flatten", "Add effect of brush"},
+ {BRUSH_DIR_IN, "CONTRAST", 0, "Contrast", "Subtract effect of brush"},
+ {0, NULL, 0, NULL, NULL}};
+
+ static EnumPropertyItem prop_fill_deepen_items[]= {
+ {0, "FILL", 0, "Fill", "Add effect of brush"},
+ {BRUSH_DIR_IN, "DEEPEN", 0, "Deepen", "Subtract effect of brush"},
+ {0, NULL, 0, NULL, NULL}};
+
+ static EnumPropertyItem prop_scrape_peaks_items[]= {
+ {0, "SCRAPE", 0, "Scrape", "Add effect of brush"},
+ {BRUSH_DIR_IN, "PEAKS", 0, "Peaks", "Subtract effect of brush"},
+ {0, NULL, 0, NULL, NULL}};
+
+ static EnumPropertyItem prop_pinch_magnify_items[]= {
+ {0, "PINCH", 0, "Pinch", "Add effect of brush"},
+ {BRUSH_DIR_IN, "MAGNIFY", 0, "Magnify", "Subtract effect of brush"},
+ {0, NULL, 0, NULL, NULL}};
+
+ static EnumPropertyItem prop_inflate_deflate_items[]= {
+ {0, "INFLATE", 0, "Inflate", "Add effect of brush"},
+ {BRUSH_DIR_IN, "DEFLATE", 0, "Deflate", "Subtract effect of brush"},
+ {0, NULL, 0, NULL, NULL}};
+
+ Brush *me= (Brush*)(ptr->data);
+
+ switch (me->sculpt_tool) {
+ case SCULPT_TOOL_DRAW:
+ case SCULPT_TOOL_CREASE:
+ case SCULPT_TOOL_BLOB:
+ case SCULPT_TOOL_LAYER:
+ case SCULPT_TOOL_CLAY:
+ return prop_direction_items;
+
+ case SCULPT_TOOL_FLATTEN:
+ return prop_flatten_contrast_items;
+
+ case SCULPT_TOOL_FILL:
+ return prop_fill_deepen_items;
+
+ case SCULPT_TOOL_SCRAPE:
+ return prop_scrape_peaks_items;
+
+ case SCULPT_TOOL_PINCH:
+ return prop_pinch_magnify_items;
+
+ case SCULPT_TOOL_INFLATE:
+ return prop_inflate_deflate_items;
+
+ default:
+ return prop_default_items;
+ }
}
#else
@@ -150,26 +338,6 @@ static void rna_def_brush(BlenderRNA *brna)
{IMB_BLEND_ADD_ALPHA, "ADD_ALPHA", 0, "Add Alpha", "Add alpha while painting"},
{0, NULL, 0, NULL, NULL}};
- static EnumPropertyItem brush_sculpt_tool_items[] = {
- {SCULPT_TOOL_DRAW, "DRAW", 0, "Draw", ""},
- {SCULPT_TOOL_SMOOTH, "SMOOTH", 0, "Smooth", ""},
- {SCULPT_TOOL_CREASE, "CREASE", 0, "Crease", ""},
- {SCULPT_TOOL_BLOB, "BLOB", 0, "Blob", ""},
- {SCULPT_TOOL_PINCH, "PINCH", 0, "Pinch", ""},
- {SCULPT_TOOL_INFLATE, "INFLATE", 0, "Inflate", ""},
- {SCULPT_TOOL_GRAB, "GRAB", 0, "Grab", ""},
- {SCULPT_TOOL_SNAKE_HOOK, "SNAKE_HOOK", 0, "Snake Hook", ""},
- {SCULPT_TOOL_ROTATE, "ROTATE", 0, "Rotate", ""},
- {SCULPT_TOOL_THUMB, "THUMB", 0, "Thumb", ""},
- {SCULPT_TOOL_NUDGE, "NUDGE", 0, "Nudge", ""},
- {SCULPT_TOOL_LAYER, "LAYER", 0, "Layer", ""},
- {SCULPT_TOOL_FLATTEN, "FLATTEN", 0, "Flatten", ""},
- {SCULPT_TOOL_CLAY, "CLAY", 0, "Clay", ""},
- //{SCULPT_TOOL_CLAY_TUBES, "CLAY_TUBES", 0, "Clay Tubes", ""}, XXX: remove clay tubes from UI
- {SCULPT_TOOL_FILL, "FILL", 0, "Fill", ""},
- {SCULPT_TOOL_SCRAPE, "SCRAPE", 0, "Scrape", ""},
- {0, NULL, 0, NULL, NULL}};
-
static EnumPropertyItem brush_stroke_method_items[] = {
{0, "DOTS", 0, "Dots", ""},
{BRUSH_RESTORE_MESH, "DRAG_DOT", 0, "Drag Dot", ""},
@@ -189,53 +357,6 @@ static void rna_def_brush(BlenderRNA *brna)
{BRUSH_RAKE, "RAKE", 0, "Rake", ""},
{0, NULL, 0, NULL, NULL}};
- static EnumPropertyItem brush_vertexpaint_tool_items[] = {
- {0, "MIX", 0, "Mix", "Use mix blending mode while painting"},
- {1, "ADD", 0, "Add", "Use add blending mode while painting"},
- {2, "SUB", 0, "Subtract", "Use subtract blending mode while painting"},
- {3, "MUL", 0, "Multiply", "Use multiply blending mode while painting"},
- {4, "BLUR", 0, "Blur", "Blur the color with surrounding values"},
- {5, "LIGHTEN", 0, "Lighten", "Use lighten blending mode while painting"},
- {6, "DARKEN", 0, "Darken", "Use darken blending mode while painting"},
- {0, NULL, 0, NULL, NULL}};
-
- static EnumPropertyItem brush_imagepaint_tool_items[] = {
- {PAINT_TOOL_DRAW, "DRAW", 0, "Draw", ""},
- {PAINT_TOOL_SOFTEN, "SOFTEN", 0, "Soften", ""},
- {PAINT_TOOL_SMEAR, "SMEAR", 0, "Smear", ""},
- {PAINT_TOOL_CLONE, "CLONE", 0, "Clone", ""},
- {0, NULL, 0, NULL, NULL}};
-
- static const EnumPropertyItem prop_flip_direction_items[]= {
- {0, "ADD", 0, "Add", "Add effect of brush"},
- {BRUSH_DIR_IN, "SUBTRACT", 0, "Subtract", "Subtract effect of brush"},
- {0, NULL, 0, NULL, NULL}};
-
- static const EnumPropertyItem prop_flatten_contrast_items[]= {
- {0, "FLATTEN", 0, "Flatten", "Add effect of brush"},
- {BRUSH_DIR_IN, "CONTRAST", 0, "Contrast", "Subtract effect of brush"},
- {0, NULL, 0, NULL, NULL}};
-
- static const EnumPropertyItem prop_fill_deepen_items[]= {
- {0, "FILL", 0, "Fill", "Add effect of brush"},
- {BRUSH_DIR_IN, "DEEPEN", 0, "Deepen", "Subtract effect of brush"},
- {0, NULL, 0, NULL, NULL}};
-
- static const EnumPropertyItem prop_scrape_peaks_items[]= {
- {0, "SCRAPE", 0, "Scrape", "Add effect of brush"},
- {BRUSH_DIR_IN, "PEAKS", 0, "Peaks", "Subtract effect of brush"},
- {0, NULL, 0, NULL, NULL}};
-
- static const EnumPropertyItem prop_pinch_magnify_items[]= {
- {0, "PINCH", 0, "Pinch", "Add effect of brush"},
- {BRUSH_DIR_IN, "MAGNIFY", 0, "Magnify", "Subtract effect of brush"},
- {0, NULL, 0, NULL, NULL}};
-
- static const EnumPropertyItem prop_inflate_deflate_items[]= {
- {0, "INFLATE", 0, "Inflate", "Add effect of brush"},
- {BRUSH_DIR_IN, "DEFLATE", 0, "Deflate", "Subtract effect of brush"},
- {0, NULL, 0, NULL, NULL}};
-
static EnumPropertyItem brush_sculpt_plane_items[] = {
{SCULPT_DISP_DIR_AREA, "AREA", 0, "Area Plane", ""},
{SCULPT_DISP_DIR_VIEW, "VIEW", 0, "View Plane", ""},
@@ -244,42 +365,10 @@ static void rna_def_brush(BlenderRNA *brna)
{SCULPT_DISP_DIR_Z, "Z", 0, "Z Plane", ""},
{0, NULL, 0, NULL, NULL}};
- FunctionRNA *func;
- PropertyRNA *parm;
-
srna= RNA_def_struct(brna, "Brush", "ID");
RNA_def_struct_ui_text(srna, "Brush", "Brush datablock for storing brush settings for painting and sculpting");
RNA_def_struct_ui_icon(srna, ICON_BRUSH_DATA);
- /* functions */
- func= RNA_def_function(srna, "is_sculpt_brush", "rna_Brush_is_sculpt_brush");
- RNA_def_function_ui_description(func, "Returns true if Brush can be used for sculpting");
- parm= RNA_def_pointer(func, "context", "Context", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED);
- parm= RNA_def_boolean(func, "ret", 0, "", "");
- RNA_def_function_return(func, parm);
-
- func= RNA_def_function(srna, "is_vpaint_brush", "rna_Brush_is_vpaint_brush");
- RNA_def_function_ui_description(func, "Returns true if Brush can be used for vertex painting");
- parm= RNA_def_pointer(func, "context", "Context", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED);
- parm= RNA_def_boolean(func, "ret", 0, "", "");
- RNA_def_function_return(func, parm);
-
- func= RNA_def_function(srna, "is_wpaint_brush", "rna_Brush_is_wpaint_brush");
- RNA_def_function_ui_description(func, "Returns true if Brush can be used for weight painting");
- parm= RNA_def_pointer(func, "context", "Context", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED);
- parm= RNA_def_boolean(func, "ret", 0, "", "");
- RNA_def_function_return(func, parm);
-
- func= RNA_def_function(srna, "is_imapaint_brush", "rna_Brush_is_imapaint_brush");
- RNA_def_function_ui_description(func, "Returns true if Brush can be used for image painting");
- parm= RNA_def_pointer(func, "context", "Context", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED);
- parm= RNA_def_boolean(func, "ret", 0, "", "");
- RNA_def_function_return(func, parm);
-
/* enums */
prop= RNA_def_property(srna, "blend", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, prop_blend_items);
@@ -289,31 +378,32 @@ static void rna_def_brush(BlenderRNA *brna)
prop= RNA_def_property(srna, "sculpt_tool", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, brush_sculpt_tool_items);
RNA_def_property_ui_text(prop, "Sculpt Tool", "");
- RNA_def_property_update(prop, 0, "rna_Brush_update");
+ RNA_def_property_update(prop, 0, "rna_Brush_sculpt_tool_update");
prop= RNA_def_property(srna, "vertexpaint_tool", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, brush_vertexpaint_tool_items);
RNA_def_property_ui_text(prop, "Vertex/Weight Paint Tool", "");
- RNA_def_property_update(prop, 0, "rna_Brush_update");
+ RNA_def_property_update(prop, 0, "rna_Brush_vertexpaint_tool_update");
prop= RNA_def_property(srna, "imagepaint_tool", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, brush_imagepaint_tool_items);
RNA_def_property_ui_text(prop, "Image Paint Tool", "");
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, "rna_Brush_update");
+ RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, "rna_Brush_imagepaint_tool_update");
prop= RNA_def_property(srna, "direction", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
- RNA_def_property_enum_items(prop, prop_flip_direction_items);
+ RNA_def_property_enum_items(prop, prop_direction_items);
+ RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Brush_direction_itemf");
RNA_def_property_ui_text(prop, "Direction", "");
RNA_def_property_update(prop, 0, "rna_Brush_update");
-
+
prop= RNA_def_property(srna, "stroke_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
RNA_def_property_enum_items(prop, brush_stroke_method_items);
RNA_def_property_ui_text(prop, "Stroke Method", "");
RNA_def_property_update(prop, 0, "rna_Brush_update");
- prop= RNA_def_property(srna, "texture_angle_source", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "texture_angle_source_random", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
RNA_def_property_enum_items(prop, texture_angle_source_items);
RNA_def_property_ui_text(prop, "Texture Angle Source", "");
@@ -325,36 +415,6 @@ static void rna_def_brush(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Texture Angle Source", "");
RNA_def_property_update(prop, 0, "rna_Brush_update");
- prop= RNA_def_property(srna, "flatten_contrast", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
- RNA_def_property_enum_items(prop, prop_flatten_contrast_items);
- RNA_def_property_ui_text(prop, "Flatten/Contrast", "");
- RNA_def_property_update(prop, 0, "rna_Brush_update");
-
- prop= RNA_def_property(srna, "inflate_deflate", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
- RNA_def_property_enum_items(prop, prop_inflate_deflate_items);
- RNA_def_property_ui_text(prop, "Inflate/Deflate", "");
- RNA_def_property_update(prop, 0, "rna_Brush_update");
-
- prop= RNA_def_property(srna, "fill_deepen", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
- RNA_def_property_enum_items(prop, prop_fill_deepen_items);
- RNA_def_property_ui_text(prop, "Fill/Deepen", "");
- RNA_def_property_update(prop, 0, "rna_Brush_update");
-
- prop= RNA_def_property(srna, "scrape_peaks", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
- RNA_def_property_enum_items(prop, prop_scrape_peaks_items);
- RNA_def_property_ui_text(prop, "Scrape/Peaks", "");
- RNA_def_property_update(prop, 0, "rna_Brush_update");
-
- prop= RNA_def_property(srna, "pinch_magnify", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
- RNA_def_property_enum_items(prop, prop_pinch_magnify_items);
- RNA_def_property_ui_text(prop, "Pinch/Magnify", "");
- RNA_def_property_update(prop, 0, "rna_Brush_update");
-
prop= RNA_def_property(srna, "sculpt_plane", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, brush_sculpt_plane_items);
RNA_def_property_ui_text(prop, "Sculpt Plane", "");
@@ -362,15 +422,17 @@ static void rna_def_brush(BlenderRNA *brna)
/* number values */
prop= RNA_def_property(srna, "size", PROP_INT, PROP_DISTANCE);
+ RNA_def_property_int_funcs(prop, "rna_Brush_get_size", "rna_Brush_set_size", NULL);
RNA_def_property_range(prop, 1, MAX_BRUSH_PIXEL_RADIUS*10);
RNA_def_property_ui_range(prop, 1, MAX_BRUSH_PIXEL_RADIUS, 1, 0);
RNA_def_property_ui_text(prop, "Size", "Radius of the brush in pixels");
RNA_def_property_update(prop, 0, "rna_Brush_update");
prop= RNA_def_property(srna, "unprojected_radius", PROP_FLOAT, PROP_DISTANCE);
- RNA_def_property_range(prop, 0, FLT_MAX);
- RNA_def_property_ui_range(prop, 0, 1, 0, 0);
- RNA_def_property_ui_text(prop, "Surface Size", "Radius of brush in Blender units");
+ RNA_def_property_float_funcs(prop, "rna_Brush_get_unprojected_radius", "rna_Brush_set_unprojected_radius", NULL);
+ RNA_def_property_range(prop, 0.001, FLT_MAX);
+ RNA_def_property_ui_range(prop, 0.001, 1, 0, 0);
+ RNA_def_property_ui_text(prop, "Unprojected Radius", "Radius of brush in Blender units");
RNA_def_property_update(prop, 0, "rna_Brush_update");
prop= RNA_def_property(srna, "jitter", PROP_FLOAT, PROP_NONE);
@@ -411,6 +473,7 @@ static void rna_def_brush(BlenderRNA *brna)
prop= RNA_def_property(srna, "strength", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, NULL, "alpha");
+ RNA_def_property_float_funcs(prop, "rna_Brush_get_alpha", "rna_Brush_set_alpha", NULL);
RNA_def_property_float_default(prop, 0.5f);
RNA_def_property_range(prop, 0.0f, 10.0f);
RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.001, 0.001);
@@ -453,7 +516,7 @@ static void rna_def_brush(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Crease Brush Pinch Factor", "How much the crease brush pinches");
RNA_def_property_update(prop, 0, "rna_Brush_update");
- prop= RNA_def_property(srna, "autosmooth_factor", PROP_FLOAT, PROP_FACTOR);
+ prop= RNA_def_property(srna, "auto_smooth_factor", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, NULL, "autosmooth_factor");
RNA_def_property_float_default(prop, 0);
RNA_def_property_range(prop, 0.0f, 1.0f);
@@ -477,8 +540,9 @@ static void rna_def_brush(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Wrap", "Enable torus wrapping while painting");
RNA_def_property_update(prop, 0, "rna_Brush_update");
- prop= RNA_def_property(srna, "use_strength_pressure", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pressure_strength", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BRUSH_ALPHA_PRESSURE);
+ RNA_def_property_boolean_funcs(prop, "rna_Brush_get_use_alpha_pressure", "rna_Brush_set_use_alpha_pressure");
RNA_def_property_ui_icon(prop, ICON_STYLUS_PRESSURE, 0);
RNA_def_property_ui_text(prop, "Strength Pressure", "Enable tablet pressure sensitivity for strength");
RNA_def_property_update(prop, 0, "rna_Brush_update");
@@ -489,19 +553,20 @@ static void rna_def_brush(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Plane Offset Pressure", "Enable tablet pressure sensitivity for offset");
RNA_def_property_update(prop, 0, "rna_Brush_update");
- prop= RNA_def_property(srna, "use_size_pressure", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pressure_size", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BRUSH_SIZE_PRESSURE);
+ RNA_def_property_boolean_funcs(prop, "rna_Brush_get_use_size_pressure", "rna_Brush_set_use_size_pressure");
RNA_def_property_ui_icon(prop, ICON_STYLUS_PRESSURE, 0);
RNA_def_property_ui_text(prop, "Size Pressure", "Enable tablet pressure sensitivity for size");
RNA_def_property_update(prop, 0, "rna_Brush_update");
- prop= RNA_def_property(srna, "use_jitter_pressure", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pressure_jitter", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BRUSH_JITTER_PRESSURE);
RNA_def_property_ui_icon(prop, ICON_STYLUS_PRESSURE, 0);
RNA_def_property_ui_text(prop, "Jitter Pressure", "Enable tablet pressure sensitivity for jitter");
RNA_def_property_update(prop, 0, "rna_Brush_update");
- prop= RNA_def_property(srna, "use_spacing_pressure", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pressure_spacing", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BRUSH_SPACING_PRESSURE);
RNA_def_property_ui_icon(prop, ICON_STYLUS_PRESSURE, 0);
RNA_def_property_ui_text(prop, "Spacing Pressure", "Enable tablet pressure sensitivity for spacing");
@@ -569,7 +634,8 @@ static void rna_def_brush(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Adaptive Spacing", "Space daubs according to surface orientation instead of screen space");
RNA_def_property_update(prop, 0, "rna_Brush_update");
- prop= RNA_def_property(srna, "lock_brush_size", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_locked_size", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop, "rna_Brush_get_use_locked_size", "rna_Brush_set_use_locked_size");
RNA_def_property_boolean_sdna(prop, NULL, "flag", BRUSH_LOCK_SIZE);
RNA_def_property_ui_text(prop, "Use Blender Units", "When locked brush stays same size relative to object; when unlocked brush size is given in pixels");
RNA_def_property_update(prop, 0, "rna_Brush_update");
@@ -579,12 +645,12 @@ static void rna_def_brush(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Use Texture Overlay", "Show texture in viewport");
RNA_def_property_update(prop, 0, "rna_Brush_update");
- prop= RNA_def_property(srna, "edge_to_edge", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_edge_to_edge", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BRUSH_EDGE_TO_EDGE);
RNA_def_property_ui_text(prop, "Edge-to-edge", "Drag anchor brush from edge-to-edge");
RNA_def_property_update(prop, 0, "rna_Brush_update");
- prop= RNA_def_property(srna, "restore_mesh", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_restore_mesh", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BRUSH_RESTORE_MESH);
RNA_def_property_ui_text(prop, "Restore Mesh", "Allows a single dot to be carefully positioned");
RNA_def_property_update(prop, 0, "rna_Brush_update");
@@ -606,6 +672,23 @@ static void rna_def_brush(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Curve", "Editable falloff curve");
RNA_def_property_update(prop, 0, "rna_Brush_update");
+ /* paint mode flags */
+ prop= RNA_def_property(srna, "use_paint_sculpt", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "ob_mode", OB_MODE_SCULPT);
+ RNA_def_property_ui_text(prop, "Use Sculpt", "Use this brush in sculpt mode");
+
+ prop= RNA_def_property(srna, "use_paint_vertex", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "ob_mode", OB_MODE_VERTEX_PAINT);
+ RNA_def_property_ui_text(prop, "Use Vertex", "Use this brush in vertex paint mode");
+
+ prop= RNA_def_property(srna, "use_paint_weight", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "ob_mode", OB_MODE_WEIGHT_PAINT);
+ RNA_def_property_ui_text(prop, "Use Weight", "Use this brush in weight paint mode");
+
+ prop= RNA_def_property(srna, "use_paint_texture", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "ob_mode", OB_MODE_TEXTURE_PAINT);
+ RNA_def_property_ui_text(prop, "Use Texture", "Use this brush in texture paint mode");
+
/* texture */
prop= RNA_def_property(srna, "texture_slot", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "BrushTextureSlot");
@@ -625,24 +708,27 @@ static void rna_def_brush(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Texture Overlay Alpha", "");
RNA_def_property_update(prop, 0, "rna_Brush_update");
- prop= RNA_def_property(srna, "add_col", PROP_FLOAT, PROP_COLOR);
+ prop= RNA_def_property(srna, "cursor_color_add", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "add_col");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Add Color", "Color of cursor when adding");
RNA_def_property_update(prop, 0, "rna_Brush_update");
- prop= RNA_def_property(srna, "sub_col", PROP_FLOAT, PROP_COLOR);
+ prop= RNA_def_property(srna, "cursor_color_subtract", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "sub_col");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Subract Color", "Color of cursor when subtracting");
RNA_def_property_update(prop, 0, "rna_Brush_update");
- prop= RNA_def_property(srna, "image_icon", PROP_POINTER, PROP_NONE);
- RNA_def_property_pointer_sdna(prop, NULL, "image_icon");
- RNA_def_property_struct_type(prop, "Image");
- RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_ui_text(prop, "Image Icon", "");
- RNA_def_property_update(prop, 0, "rna_Brush_update");
+ prop= RNA_def_property(srna, "use_custom_icon", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", BRUSH_CUSTOM_ICON);
+ RNA_def_property_ui_text(prop, "Custom Icon", "Set the brush icon from an image file");
+ RNA_def_property_update(prop, 0, "rna_Brush_icon_update");
+
+ prop= RNA_def_property(srna, "icon_filepath", PROP_STRING, PROP_FILEPATH);
+ RNA_def_property_string_sdna(prop, NULL, "icon_filepath");
+ RNA_def_property_ui_text(prop, "Brush Icon Filepath", "File path to brush icon");
+ RNA_def_property_update(prop, 0, "rna_Brush_icon_update");
/* clone tool */
prop= RNA_def_property(srna, "clone_image", PROP_POINTER, PROP_NONE);
diff --git a/source/blender/makesrna/intern/rna_camera.c b/source/blender/makesrna/intern/rna_camera.c
index ef9a0cf040e..9d82c472882 100644
--- a/source/blender/makesrna/intern/rna_camera.c
+++ b/source/blender/makesrna/intern/rna_camera.c
@@ -84,13 +84,13 @@ void RNA_def_camera(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Passepartout Alpha", "Opacity (alpha) of the darkened overlay in Camera view");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
- prop= RNA_def_property(srna, "clip_start", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "clip_start", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "clipsta");
RNA_def_property_range(prop, 0.0f, FLT_MAX);
RNA_def_property_ui_text(prop, "Clip Start", "Camera near clipping distance");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
- prop= RNA_def_property(srna, "clip_end", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "clip_end", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "clipend");
RNA_def_property_range(prop, 1.0f, FLT_MAX);
RNA_def_property_ui_text(prop, "Clip End", "Camera far clipping distance");
@@ -114,7 +114,7 @@ void RNA_def_camera(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Orthographic Scale", "Orthographic Camera scale (similar to zoom)");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
- prop= RNA_def_property(srna, "draw_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "draw_size", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "drawsize");
RNA_def_property_range(prop, 0.1f, 1000.0f);
RNA_def_property_ui_range(prop, 0.01, 100, 1, 1);
@@ -135,7 +135,7 @@ void RNA_def_camera(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Shift Y", "Perspective Camera vertical shift");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
- prop= RNA_def_property(srna, "dof_distance", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "dof_distance", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "YF_dofdist");
RNA_def_property_range(prop, 0.0f, 5000.0f);
RNA_def_property_ui_text(prop, "DOF Distance", "Distance to the focus point for depth of field");
@@ -172,7 +172,7 @@ void RNA_def_camera(BlenderRNA *brna)
RNA_def_property_enum_items(prop, prop_lens_unit_items);
RNA_def_property_ui_text(prop, "Lens Unit", "Unit to edit lens in for the user interface");
- prop= RNA_def_property(srna, "panorama", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_panorama", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CAM_PANORAMA);
RNA_def_property_ui_text(prop, "Panorama", "Render the scene with a cylindrical camera for pseudo-fisheye lens effects");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
diff --git a/source/blender/makesrna/intern/rna_cloth.c b/source/blender/makesrna/intern/rna_cloth.c
index 3518044a601..e40bbcbbf50 100644
--- a/source/blender/makesrna/intern/rna_cloth.c
+++ b/source/blender/makesrna/intern/rna_cloth.c
@@ -273,7 +273,7 @@ static void rna_def_cloth_sim_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Air Damping", "Air has normally some thickness which slows falling things down");
RNA_def_property_update(prop, 0, "rna_cloth_update");
- prop= RNA_def_property(srna, "pin_cloth", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pin_cloth", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", CLOTH_SIMSETTINGS_FLAG_GOAL);
RNA_def_property_ui_text(prop, "Pin Cloth", "Enable pinning of cloth vertices to other objects/positions");
RNA_def_property_update(prop, 0, "rna_cloth_update");
@@ -292,7 +292,7 @@ static void rna_def_cloth_sim_settings(BlenderRNA *brna)
/* springs */
- prop= RNA_def_property(srna, "stiffness_scaling", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stiffness_scale", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", CLOTH_SIMSETTINGS_FLAG_SCALING);
RNA_def_property_ui_text(prop, "Stiffness Scaling", "If enabled, stiffness can be scaled along a weight painted vertex group");
RNA_def_property_update(prop, 0, "rna_cloth_update");
@@ -353,7 +353,7 @@ static void rna_def_cloth_sim_settings(BlenderRNA *brna)
prop= RNA_def_property(srna, "rest_shape_key", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "ShapeKey");
- RNA_def_property_pointer_funcs(prop, "rna_ClothSettings_rest_shape_key_get", "rna_ClothSettings_rest_shape_key_set", NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_ClothSettings_rest_shape_key_get", "rna_ClothSettings_rest_shape_key_set", NULL, NULL);
RNA_def_property_ui_text(prop, "Rest Shade Key", "Shape key to use the rest spring lengths from");
RNA_def_property_update(prop, 0, "rna_cloth_update");
@@ -407,12 +407,12 @@ static void rna_def_cloth_collision_settings(BlenderRNA *brna)
/* general collision */
- prop= RNA_def_property(srna, "enable_collision", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_collision", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", CLOTH_COLLSETTINGS_FLAG_ENABLED);
RNA_def_property_ui_text(prop, "Enable Collision", "Enable collisions with other objects");
RNA_def_property_update(prop, 0, "rna_cloth_update");
- prop= RNA_def_property(srna, "min_distance", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "distance_min", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "epsilon");
RNA_def_property_range(prop, 0.001f, 1.0f);
RNA_def_property_ui_text(prop, "Minimum Distance", "Minimum distance between collision objects before collision response takes in");
@@ -431,12 +431,12 @@ static void rna_def_cloth_collision_settings(BlenderRNA *brna)
/* self collision */
- prop= RNA_def_property(srna, "enable_self_collision", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_self_collision", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", CLOTH_COLLSETTINGS_FLAG_SELF);
RNA_def_property_ui_text(prop, "Enable Self Collision", "Enable self collisions");
RNA_def_property_update(prop, 0, "rna_cloth_update");
- prop= RNA_def_property(srna, "self_min_distance", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "self_distance_min", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "selfepsilon");
RNA_def_property_range(prop, 0.5f, 1.0f);
RNA_def_property_ui_text(prop, "Self Minimum Distance", "0.5 means no distance at all, 1.0 is maximum distance");
diff --git a/source/blender/makesrna/intern/rna_color.c b/source/blender/makesrna/intern/rna_color.c
index 218ca55e72d..ba3f2b09a20 100644
--- a/source/blender/makesrna/intern/rna_color.c
+++ b/source/blender/makesrna/intern/rna_color.c
@@ -29,6 +29,7 @@
#include "rna_internal.h"
#include "DNA_color_types.h"
+#include "DNA_texture_types.h"
#ifdef RNA_RUNTIME
@@ -42,6 +43,7 @@
#include "BKE_colortools.h"
#include "BKE_depsgraph.h"
#include "BKE_node.h"
+#include "BKE_texture.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -270,6 +272,29 @@ static void rna_ColorRamp_update(Main *bmain, Scene *scene, PointerRNA *ptr)
}
}
+static void rna_ColorRamp_eval(struct ColorBand *coba, float position, float color[4])
+{
+ do_colorband(coba, position, color);
+}
+
+static CBData *rna_ColorRampElement_new(struct ColorBand *coba, ReportList *reports, float position)
+{
+ CBData *element= colorband_element_add(coba, position);
+
+ if(element==NULL)
+ BKE_reportf(reports, RPT_ERROR, "Unable to add element to colorband (limit %d)", MAXCOLORBAND);
+
+ return element;
+}
+
+static void rna_ColorRampElement_remove(struct ColorBand *coba, ReportList *reports, CBData *element)
+{
+ int index = (int)(element - coba->data);
+ if(colorband_element_remove(coba, index) == 0)
+ BKE_report(reports, RPT_ERROR, "Element not found in element collection or last element");
+
+}
+
static void rna_Scopes_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
Scopes *s= (Scopes*)ptr->data;
@@ -305,9 +330,9 @@ static void rna_def_curvemappoint(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Handle Type", "Curve interpolation at this point: bezier or vector");
- prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CUMA_SELECT);
- RNA_def_property_ui_text(prop, "Selected", "Selection state of the curve point");
+ RNA_def_property_ui_text(prop, "Select", "Selection state of the curve point");
}
static void rna_def_curvemap(BlenderRNA *brna)
@@ -345,7 +370,7 @@ static void rna_def_curvemapping(BlenderRNA *brna)
srna= RNA_def_struct(brna, "CurveMapping", NULL);
RNA_def_struct_ui_text(srna, "CurveMapping", "Curve mapping to map color, vector and scalar values to other values using a user defined curve");
- prop= RNA_def_property(srna, "clip", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_clip", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CUMA_DO_CLIP);
RNA_def_property_ui_text(prop, "Clip", "Force the curve view to fit a defined boundary");
RNA_def_property_boolean_funcs(prop, NULL, "rna_CurveMapping_clip_set");
@@ -396,7 +421,7 @@ static void rna_def_color_ramp_element(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
-
+
srna= RNA_def_struct(brna, "ColorRampElement", NULL);
RNA_def_struct_sdna(srna, "CBData");
RNA_def_struct_path_func(srna, "rna_ColorRampElement_path");
@@ -415,11 +440,42 @@ static void rna_def_color_ramp_element(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
}
+static void rna_def_color_ramp_element_api(BlenderRNA *brna, PropertyRNA *cprop)
+{
+ StructRNA *srna;
+ PropertyRNA *parm;
+ FunctionRNA *func;
+
+ RNA_def_property_srna(cprop, "ColorRampElements");
+ srna= RNA_def_struct(brna, "ColorRampElements", NULL);
+ RNA_def_struct_sdna(srna, "ColorBand");
+ RNA_def_struct_path_func(srna, "rna_ColorRampElement_path");
+ RNA_def_struct_ui_text(srna, "Color Ramp Elements", "Collection of Color Ramp Elements");
+
+ /* TODO, make these functions generic in texture.c */
+ func = RNA_def_function(srna, "new", "rna_ColorRampElement_new");
+ RNA_def_function_ui_description(func, "Add element to ColorRamp");
+ RNA_def_function_flag(func, FUNC_USE_REPORTS);
+ parm= RNA_def_float(func, "position", 0.0f, 0.0f, 1.0f, "Position", "Position to add element", 0.0f, 1.0f);
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ /* return type */
+ parm= RNA_def_pointer(func, "element", "ColorRampElement", "", "New element.");
+ RNA_def_function_return(func, parm);
+
+ func = RNA_def_function(srna, "remove", "rna_ColorRampElement_remove");
+ RNA_def_function_ui_description(func, "Delete element from ColorRamp");
+ RNA_def_function_flag(func, FUNC_USE_REPORTS);
+ //parm= RNA_def_int(func, "index", 0, 0, 31, "Index", "Element to delete.", 0, 31);
+ parm= RNA_def_pointer(func, "element", "ColorRampElement", "", "Element to remove.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+}
+
static void rna_def_color_ramp(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
-
+ FunctionRNA *func;
+
static EnumPropertyItem prop_interpolation_items[] = {
{1, "EASE", 0, "Ease", ""},
{3, "CARDINAL", 0, "Cardinal", ""},
@@ -438,12 +494,32 @@ static void rna_def_color_ramp(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "ColorRampElement");
RNA_def_property_ui_text(prop, "Elements", "");
RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
-
+ rna_def_color_ramp_element_api(brna, prop);
+
prop= RNA_def_property(srna, "interpolation", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "ipotype");
RNA_def_property_enum_items(prop, prop_interpolation_items);
RNA_def_property_ui_text(prop, "Interpolation", "");
RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
+
+#if 0 // use len(elements)
+ prop= RNA_def_property(srna, "total", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "tot");
+ /* needs a function to do the right thing when adding elements like colorband_add_cb() */
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_range(prop, 0, 31); /* MAXCOLORBAND = 32 */
+ RNA_def_property_ui_text(prop, "Total", "Total number of elements");
+ RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
+#endif
+
+ func = RNA_def_function(srna, "evaluate", "rna_ColorRamp_eval");
+ RNA_def_function_ui_description(func, "Evaluate ColorRamp");
+ prop= RNA_def_float(func, "position", 1.0f, 0.0f, 1.0f, "Position", "Evaluate ColorRamp at position", 0.0f, 1.0f);
+ RNA_def_property_flag(prop, PROP_REQUIRED);
+ /* return */
+ prop = RNA_def_float_color(func, "color", 4, NULL, -FLT_MAX, FLT_MAX, "Color", "Color at given position", -FLT_MAX, FLT_MAX);
+ RNA_def_property_flag(prop, PROP_THICK_WRAP);
+ RNA_def_function_output(func, prop);
}
static void rna_def_histogram(BlenderRNA *brna)
@@ -452,7 +528,7 @@ static void rna_def_histogram(BlenderRNA *brna)
PropertyRNA *prop;
static EnumPropertyItem prop_mode_items[] = {
- {HISTO_MODE_LUMA, "Luma", ICON_COLOR, "Luma", ""},
+ {HISTO_MODE_LUMA, "LUMA", ICON_COLOR, "Luma", ""},
{HISTO_MODE_RGB, "RGB", ICON_COLOR, "Red Green Blue", ""},
{HISTO_MODE_R, "R", ICON_COLOR, "Red", ""},
{HISTO_MODE_G, "G", ICON_COLOR, "Green", ""},
diff --git a/source/blender/makesrna/intern/rna_constraint.c b/source/blender/makesrna/intern/rna_constraint.c
index fb19e8976c3..a58807902d8 100644
--- a/source/blender/makesrna/intern/rna_constraint.c
+++ b/source/blender/makesrna/intern/rna_constraint.c
@@ -214,7 +214,7 @@ static void rna_Constraint_update(Main *bmain, Scene *scene, PointerRNA *ptr)
static void rna_Constraint_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- ED_object_constraint_dependency_update(scene, ptr->id.data);
+ ED_object_constraint_dependency_update(bmain, scene, ptr->id.data);
}
static void rna_Constraint_influence_update(Main *bmain, Scene *scene, PointerRNA *ptr)
@@ -437,7 +437,7 @@ static void rna_def_constraint_python(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "ConstraintTarget");
RNA_def_property_ui_text(prop, "Targets", "Target Objects");
- prop= RNA_def_property(srna, "number_of_targets", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "target_count", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "tarnum");
RNA_def_property_ui_text(prop, "Number of Targets", "Usually only 1-3 are needed");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
@@ -452,7 +452,7 @@ static void rna_def_constraint_python(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Use Targets", "Use the targets indicated in the constraint panel");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
- prop= RNA_def_property(srna, "script_error", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "has_script_error", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PYCON_SCRIPTERROR);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Script Error", "The linked Python script has thrown an error");
@@ -510,7 +510,7 @@ static void rna_def_constraint_kinematic(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Orientation Weight", "For Tree-IK: Weight of orientation control for this target");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "chain_length", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "chain_count", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "rootbone");
RNA_def_property_range(prop, 0, 255);
RNA_def_property_ui_text(prop, "Chain Length", "How many bones are included in the IK effect - 0 uses all bones");
@@ -521,28 +521,28 @@ static void rna_def_constraint_kinematic(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Use Tail", "Include bone's tail as last element in chain");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
- prop= RNA_def_property(srna, "axis_reference", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "reference_axis", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
RNA_def_property_enum_items(prop, constraint_ik_axisref_items);
RNA_def_property_ui_text(prop, "Axis Reference", "Constraint axis Lock options relative to Bone or Target reference");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
- prop= RNA_def_property(srna, "use_position", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_location", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_IK_POS);
RNA_def_property_ui_text(prop, "Position", "Chain follows position of target");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
- prop= RNA_def_property(srna, "pos_lock_x", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock_location_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_IK_NO_POS_X);
RNA_def_property_ui_text(prop, "Lock X Pos", "Constraint position along X axis");
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Constraint_dependency_update");
- prop= RNA_def_property(srna, "pos_lock_y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock_location_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_IK_NO_POS_Y);
RNA_def_property_ui_text(prop, "Lock Y Pos", "Constraint position along Y axis");
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Constraint_dependency_update");
- prop= RNA_def_property(srna, "pos_lock_z", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock_location_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_IK_NO_POS_Z);
RNA_def_property_ui_text(prop, "Lock Z Pos", "Constraint position along Z axis");
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Constraint_dependency_update");
@@ -552,17 +552,17 @@ static void rna_def_constraint_kinematic(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Rotation", "Chain follows rotation of target");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
- prop= RNA_def_property(srna, "rot_lock_x", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock_rotation_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_IK_NO_ROT_X);
RNA_def_property_ui_text(prop, "Lock X Rot", "Constraint rotation along X axis");
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Constraint_dependency_update");
- prop= RNA_def_property(srna, "rot_lock_y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock_rotation_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_IK_NO_ROT_Y);
RNA_def_property_ui_text(prop, "Lock Y Rot", "Constraint rotation along Y axis");
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Constraint_dependency_update");
- prop= RNA_def_property(srna, "rot_lock_z", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock_rotation_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_IK_NO_ROT_Z);
RNA_def_property_ui_text(prop, "Lock Z Rot", "Constraint rotation along Z axis");
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Constraint_dependency_update");
@@ -638,19 +638,19 @@ static void rna_def_constraint_track_to(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Sub-Target", "");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
- prop= RNA_def_property(srna, "track", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "track_axis", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "reserved1");
RNA_def_property_enum_items(prop, track_items);
RNA_def_property_ui_text(prop, "Track Axis", "Axis that points to the target object");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "up", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "up_axis", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "reserved2");
RNA_def_property_enum_items(prop, up_items);
RNA_def_property_ui_text(prop, "Up Axis", "Axis that points upward");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "target_z", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_target_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", TARGET_Z_UP);
RNA_def_property_ui_text(prop, "Target Z", "Target's Z axis, not World Z axis, will constraint the Up direction");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
@@ -832,7 +832,7 @@ static void rna_def_constraint_same_volume(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Maintain Volume Constraint", "Maintains a constant volume along a single scaling axis");
RNA_def_struct_sdna_from(srna, "bSameVolumeConstraint", "data");
- prop= RNA_def_property(srna, "axis", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "free_axis", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "flag");
RNA_def_property_enum_items(prop, volume_items);
RNA_def_property_ui_text(prop, "Free Axis", "The free scaling axis of the object");
@@ -906,7 +906,7 @@ static void rna_def_constraint_minmax(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Floor Location", "Location of target that object will not pass through");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "sticky", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_sticky", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MINMAX_STICKY);
RNA_def_property_ui_text(prop, "Sticky", "Immobilize object while constrained");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
@@ -978,14 +978,14 @@ static void rna_def_constraint_action(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "End Frame", "Last frame of the Action to use");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "maximum", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "max");
RNA_def_property_range(prop, -1000.f, 1000.f);
RNA_def_property_ui_text(prop, "Maximum", "Maximum value for target channel range");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_ActionConstraint_minmax_range");
- prop= RNA_def_property(srna, "minimum", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "min", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "min");
RNA_def_property_range(prop, -1000.f, 1000.f);
RNA_def_property_ui_text(prop, "Minimum", "Minimum value for target channel range");
@@ -1028,13 +1028,13 @@ static void rna_def_constraint_locked_track(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Sub-Target", "");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
- prop= RNA_def_property(srna, "track", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "track_axis", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "trackflag");
RNA_def_property_enum_items(prop, locktrack_items);
RNA_def_property_ui_text(prop, "Track Axis", "Axis that points to the target object");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "locked", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "lock_axis", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "lockflag");
RNA_def_property_enum_items(prop, lock_items);
RNA_def_property_ui_text(prop, "Locked Axis", "Axis that points upward");
@@ -1067,6 +1067,7 @@ static void rna_def_constraint_follow_path(BlenderRNA *brna)
prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "tar");
+ RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_Curve_object_poll");
RNA_def_property_ui_text(prop, "Target", "Target Object");
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
@@ -1082,13 +1083,13 @@ static void rna_def_constraint_follow_path(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Offset Factor", "Percentage value defining target position along length of bone");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "forward", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "forward_axis", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "trackflag");
RNA_def_property_enum_items(prop, forwardpath_items);
RNA_def_property_ui_text(prop, "Forward Axis", "Axis that points forward along the path");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "up", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "up_axis", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "upflag");
RNA_def_property_enum_items(prop, pathup_items);
RNA_def_property_ui_text(prop, "Up Axis", "Axis that points upward");
@@ -1099,7 +1100,7 @@ static void rna_def_constraint_follow_path(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Follow Curve", "Object will follow the heading and banking of the curve");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "use_fixed_position", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_fixed_location", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "followflag", FOLLOWPATH_STATIC);
RNA_def_property_ui_text(prop, "Fixed Position", "Object will stay locked to a single point somewhere along the length of the curve regardless of time");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
@@ -1160,7 +1161,7 @@ static void rna_def_constraint_stretch_to(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Keep Axis", "Axis to maintain during stretch");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "original_length", PROP_FLOAT, PROP_DISTANCE);
+ prop= RNA_def_property(srna, "rest_length", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "orglength");
RNA_def_property_range(prop, 0.0, 100.f);
RNA_def_property_ui_text(prop, "Original Length", "Length at rest position");
@@ -1245,12 +1246,12 @@ static void rna_def_constraint_rigid_body_joint(BlenderRNA *brna)
//float minLimit[6];
//float maxLimit[6];
- prop= RNA_def_property(srna, "disable_linked_collision", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_linked_collision", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_DISABLE_LINKED_COLLISION);
RNA_def_property_ui_text(prop, "Disable Linked Collision", "Disable collision between linked bodies");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "draw_pivot", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_pivot", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_DRAW_PIVOT);
RNA_def_property_ui_text(prop, "Draw Pivot", "Display the pivot point and rotation in 3D view");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
@@ -1273,7 +1274,8 @@ static void rna_def_constraint_clamp_to(BlenderRNA *brna)
RNA_def_struct_sdna_from(srna, "bClampToConstraint", "data");
prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
- RNA_def_property_pointer_sdna(prop, NULL, "tar"); // TODO: curve only!
+ RNA_def_property_pointer_sdna(prop, NULL, "tar"); // TODO: curve only for set function!
+ RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_Curve_object_poll");
RNA_def_property_ui_text(prop, "Target", "Target Object");
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
@@ -1284,7 +1286,7 @@ static void rna_def_constraint_clamp_to(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Main Axis", "Main axis of movement");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "cyclic", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cyclic", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag2", CLAMPTO_CYCLIC);
RNA_def_property_ui_text(prop, "Cyclic", "Treat curve as cyclic curve (no clamping to curve bounding box");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
@@ -1352,7 +1354,7 @@ static void rna_def_constraint_transform(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Map To Z From", "The source axis constrained object's Z axis uses");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "extrapolate_motion", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_motion_extrapolate", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "expo", CLAMPTO_CYCLIC);
RNA_def_property_ui_text(prop, "Extrapolate Motion", "Extrapolate ranges");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
@@ -1439,73 +1441,73 @@ static void rna_def_constraint_location_limit(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Limit Location Constraint", "Limits the location of the constrained object");
RNA_def_struct_sdna_from(srna, "bLocLimitConstraint", "data");
- prop= RNA_def_property(srna, "use_minimum_x", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_min_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMIN);
RNA_def_property_ui_text(prop, "Minimum X", "Use the minimum X value");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "use_minimum_y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_min_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMIN);
RNA_def_property_ui_text(prop, "Minimum Y", "Use the minimum Y value");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "use_minimum_z", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_min_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMIN);
RNA_def_property_ui_text(prop, "Minimum Z", "Use the minimum Z value");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "use_maximum_x", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_max_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMAX);
RNA_def_property_ui_text(prop, "Maximum X", "Use the maximum X value");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "use_maximum_y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_max_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMAX);
RNA_def_property_ui_text(prop, "Maximum Y", "Use the maximum Y value");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "use_maximum_z", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_max_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMAX);
RNA_def_property_ui_text(prop, "Maximum Z", "Use the maximum Z value");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "minimum_x", PROP_FLOAT, PROP_DISTANCE);
+ prop= RNA_def_property(srna, "min_x", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "xmin");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Minimum X", "Lowest X value to allow");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "minimum_y", PROP_FLOAT, PROP_DISTANCE);
+ prop= RNA_def_property(srna, "min_y", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "ymin");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Minimum Y", "Lowest Y value to allow");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "minimum_z", PROP_FLOAT, PROP_DISTANCE);
+ prop= RNA_def_property(srna, "min_z", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "zmin");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Minimum Z", "Lowest Z value to allow");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "maximum_x", PROP_FLOAT, PROP_DISTANCE);
+ prop= RNA_def_property(srna, "max_x", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "xmax");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Maximum X", "Highest X value to allow");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "maximum_y", PROP_FLOAT, PROP_DISTANCE);
+ prop= RNA_def_property(srna, "max_y", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "ymax");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Maximum Y", "Highest Y value to allow");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "maximum_z", PROP_FLOAT, PROP_DISTANCE);
+ prop= RNA_def_property(srna, "max_z", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "zmax");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Maximum Z", "Highest Z value to allow");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "limit_transform", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_transform_limit", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag2", LIMIT_TRANSFORM);
RNA_def_property_ui_text(prop, "For Transform", "Transforms are affected by this constraint as well");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
@@ -1535,43 +1537,43 @@ static void rna_def_constraint_rotation_limit(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Limit Z", "Use the minimum Z value");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "minimum_x", PROP_FLOAT, PROP_ANGLE);
+ prop= RNA_def_property(srna, "min_x", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "xmin");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Minimum X", "Lowest X value to allow");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "minimum_y", PROP_FLOAT, PROP_ANGLE);
+ prop= RNA_def_property(srna, "min_y", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "ymin");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Minimum Y", "Lowest Y value to allow");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "minimum_z", PROP_FLOAT, PROP_ANGLE);
+ prop= RNA_def_property(srna, "min_z", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "zmin");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Minimum Z", "Lowest Z value to allow");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "maximum_x", PROP_FLOAT, PROP_ANGLE);
+ prop= RNA_def_property(srna, "max_x", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "xmax");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Maximum X", "Highest X value to allow");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "maximum_y", PROP_FLOAT, PROP_ANGLE);
+ prop= RNA_def_property(srna, "max_y", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "ymax");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Maximum Y", "Highest Y value to allow");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "maximum_z", PROP_FLOAT, PROP_ANGLE);
+ prop= RNA_def_property(srna, "max_z", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "zmax");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Maximum Z", "Highest Z value to allow");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "limit_transform", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_transform_limit", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag2", LIMIT_TRANSFORM);
RNA_def_property_ui_text(prop, "For Transform", "Transforms are affected by this constraint as well");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
@@ -1586,73 +1588,73 @@ static void rna_def_constraint_size_limit(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Limit Size Constraint", "Limits the scaling of the constrained object");
RNA_def_struct_sdna_from(srna, "bSizeLimitConstraint", "data");
- prop= RNA_def_property(srna, "use_minimum_x", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_min_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMIN);
RNA_def_property_ui_text(prop, "Minimum X", "Use the minimum X value");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "use_minimum_y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_min_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMIN);
RNA_def_property_ui_text(prop, "Minimum Y", "Use the minimum Y value");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "use_minimum_z", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_min_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMIN);
RNA_def_property_ui_text(prop, "Minimum Z", "Use the minimum Z value");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "use_maximum_x", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_max_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_XMAX);
RNA_def_property_ui_text(prop, "Maximum X", "Use the maximum X value");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "use_maximum_y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_max_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_YMAX);
RNA_def_property_ui_text(prop, "Maximum Y", "Use the maximum Y value");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "use_maximum_z", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_max_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIMIT_ZMAX);
RNA_def_property_ui_text(prop, "Maximum Z", "Use the maximum Z value");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "minimum_x", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "min_x", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "xmin");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Minimum X", "Lowest X value to allow");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "minimum_y", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "min_y", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "ymin");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Minimum Y", "Lowest Y value to allow");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "minimum_z", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "min_z", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "zmin");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Minimum Z", "Lowest Z value to allow");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "maximum_x", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "max_x", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "xmax");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Maximum X", "Highest X value to allow");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "maximum_y", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "max_y", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "ymax");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Maximum Y", "Highest Y value to allow");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "maximum_z", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "max_z", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "zmax");
RNA_def_property_range(prop, -1000.0, 1000.f);
RNA_def_property_ui_text(prop, "Maximum Z", "Highest Z value to allow");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "limit_transform", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_transform_limit", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag2", LIMIT_TRANSFORM);
RNA_def_property_ui_text(prop, "For Transform", "Transforms are affected by this constraint as well");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
@@ -1707,7 +1709,8 @@ static void rna_def_constraint_shrinkwrap(BlenderRNA *brna)
RNA_def_struct_sdna_from(srna, "bShrinkwrapConstraint", "data");
prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
- RNA_def_property_pointer_sdna(prop, NULL, "target");
+ RNA_def_property_pointer_sdna(prop, NULL, "target"); /* TODO, mesh type */
+ RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_Mesh_object_poll");
RNA_def_property_ui_text(prop, "Target", "Target Object");
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
@@ -1769,7 +1772,7 @@ static void rna_def_constraint_damped_track(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Sub-Target", "");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
- prop= RNA_def_property(srna, "track", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "track_axis", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "trackflag");
RNA_def_property_enum_items(prop, damptrack_items);
RNA_def_property_ui_text(prop, "Track Axis", "Axis that points to the target object");
@@ -1798,7 +1801,7 @@ static void rna_def_constraint_spline_ik(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
- prop= RNA_def_property(srna, "chain_length", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "chain_count", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "chainlen");
RNA_def_property_range(prop, 1, 255); // TODO: this should really check the max length of the chain the constraint is attached to
RNA_def_property_ui_text(prop, "Chain Length", "How many bones are included in the chain");
@@ -1815,17 +1818,17 @@ static void rna_def_constraint_spline_ik(BlenderRNA *brna)
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
/* settings */
- prop= RNA_def_property(srna, "chain_offset", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_chain_offset", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_SPLINEIK_NO_ROOT);
RNA_def_property_ui_text(prop, "Chain Offset", "Offset the entire chain relative to the root joint");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "even_divisions", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_even_divisions", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_SPLINEIK_EVENSPLITS);
RNA_def_property_ui_text(prop, "Even Divisions", "Ignore the relative lengths of the bones when fitting to the curve");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "y_stretch", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_y_stretch", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_SPLINEIK_SCALE_LIMITED);
RNA_def_property_ui_text(prop, "Y Stretch", "Stretch the Y axis of the bones to fit the curve");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
@@ -1835,7 +1838,7 @@ static void rna_def_constraint_spline_ik(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Use Curve Radius", "Average radius of the endpoints is used to tweak the X and Z Scaling of the bones, on top of XZ Scale mode");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "xz_scaling_mode", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "xz_scale_mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "xzScaleMode");
RNA_def_property_enum_items(prop, splineik_xz_scale_mode);
RNA_def_property_ui_text(prop, "XZ Scale Mode", "Method used for determining the scaling of the X and Z axes of the bones");
@@ -1880,7 +1883,7 @@ static void rna_def_constraint_pivot(BlenderRNA *brna)
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
/* pivot offset */
- prop= RNA_def_property(srna, "use_relative_position", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_relative_location", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", PIVOTCON_FLAG_OFFSET_ABS);
RNA_def_property_ui_text(prop, "Use Relative Offset", "Offset will be an absolute point in space instead of relative to the target");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
@@ -1891,7 +1894,7 @@ static void rna_def_constraint_pivot(BlenderRNA *brna)
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
/* rotation-based activation */
- prop= RNA_def_property(srna, "enabled_rotation_range", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "rotation_range", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "rotAxis");
RNA_def_property_enum_items(prop, pivot_rotAxis_items);
RNA_def_property_ui_text(prop, "Enabled Rotation Range", "Rotation range on which pivoting should occur");
@@ -1937,19 +1940,19 @@ void RNA_def_constraint(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Target Space", "Space that target is evaluated in");
/* flags */
- prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_OFF);
+ prop= RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_OFF);
RNA_def_property_ui_text(prop, "Enabled", "Enable/Disable Constraint");
- prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_EXPAND);
RNA_def_property_ui_text(prop, "Expanded", "Constraint's panel is expanded in UI");
RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
// XXX this is really an internal flag, but it may be useful for some tools to be able to access this...
- prop= RNA_def_property(srna, "disabled", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_valid", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_DISABLE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_DISABLE);
RNA_def_property_ui_text(prop, "Disabled", "Constraint has invalid settings and will not be evaluated");
// TODO: setting this to true must ensure that all others in stack are turned off too...
@@ -1957,7 +1960,7 @@ void RNA_def_constraint(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_ACTIVE);
RNA_def_property_ui_text(prop, "Active", "Constraint is the one being edited ");
- prop= RNA_def_property(srna, "proxy_local", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_proxy_local", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_PROXY_LOCAL);
RNA_def_property_ui_text(prop, "Proxy Local", "Constraint was added in this proxy instance (i.e. did not belong to source Armature)");
@@ -1969,12 +1972,12 @@ void RNA_def_constraint(BlenderRNA *brna)
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_influence_update");
/* readonly values */
- prop= RNA_def_property(srna, "lin_error", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "error_location", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "lin_error");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Lin error", "Amount of residual error in Blender space unit for constraints that work on position");
- prop= RNA_def_property(srna, "rot_error", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "error_rotation", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "rot_error");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Rot error", "Amount of residual error in radiant for constraints that work on orientation");
diff --git a/source/blender/makesrna/intern/rna_context.c b/source/blender/makesrna/intern/rna_context.c
index 9ee2ca1a322..6cc93d088ad 100644
--- a/source/blender/makesrna/intern/rna_context.c
+++ b/source/blender/makesrna/intern/rna_context.c
@@ -76,13 +76,19 @@ static PointerRNA rna_Context_region_get(PointerRNA *ptr)
return newptr;
}
-/*static PointerRNA rna_Context_region_data_get(PointerRNA *ptr)
+static PointerRNA rna_Context_region_data_get(PointerRNA *ptr)
{
bContext *C= (bContext*)ptr->data;
- PointerRNA newptr;
- RNA_pointer_create((ID*)CTX_wm_screen(C), &RNA_RegionData, CTX_wm_region_data(C), &newptr);
- return newptr;
-}*/
+
+ /* only exists for one space still, no generic system yet */
+ if(CTX_wm_view3d(C)) {
+ PointerRNA newptr;
+ RNA_pointer_create((ID*)CTX_wm_screen(C), &RNA_RegionView3D, CTX_wm_region_data(C), &newptr);
+ return newptr;
+ }
+
+ return PointerRNA_NULL;
+}
static PointerRNA rna_Context_main_get(PointerRNA *ptr)
{
@@ -148,58 +154,58 @@ void RNA_def_context(BlenderRNA *brna)
prop= RNA_def_property(srna, "manager", PROP_POINTER, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "WindowManager");
- RNA_def_property_pointer_funcs(prop, "rna_Context_manager_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Context_manager_get", NULL, NULL, NULL);
prop= RNA_def_property(srna, "window", PROP_POINTER, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "Window");
- RNA_def_property_pointer_funcs(prop, "rna_Context_window_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Context_window_get", NULL, NULL, NULL);
prop= RNA_def_property(srna, "screen", PROP_POINTER, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "Screen");
- RNA_def_property_pointer_funcs(prop, "rna_Context_screen_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Context_screen_get", NULL, NULL, NULL);
prop= RNA_def_property(srna, "area", PROP_POINTER, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "Area");
- RNA_def_property_pointer_funcs(prop, "rna_Context_area_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Context_area_get", NULL, NULL, NULL);
prop= RNA_def_property(srna, "space_data", PROP_POINTER, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "Space");
- RNA_def_property_pointer_funcs(prop, "rna_Context_space_data_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Context_space_data_get", NULL, NULL, NULL);
prop= RNA_def_property(srna, "region", PROP_POINTER, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "Region");
- RNA_def_property_pointer_funcs(prop, "rna_Context_region_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Context_region_get", NULL, NULL, NULL);
- /*prop= RNA_def_property(srna, "region_data", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "region_data", PROP_POINTER, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- RNA_def_property_struct_type(prop, "RegionData");
- RNA_def_property_pointer_funcs(prop, "rna_Context_region_data_get", NULL, NULL);*/
+ RNA_def_property_struct_type(prop, "RegionView3D");
+ RNA_def_property_pointer_funcs(prop, "rna_Context_region_data_get", NULL, NULL, NULL);
/* Data */
prop= RNA_def_property(srna, "main", PROP_POINTER, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "Main");
- RNA_def_property_pointer_funcs(prop, "rna_Context_main_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Context_main_get", NULL, NULL, NULL);
prop= RNA_def_property(srna, "scene", PROP_POINTER, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "Scene");
- RNA_def_property_pointer_funcs(prop, "rna_Context_scene_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Context_scene_get", NULL, NULL, NULL);
prop= RNA_def_property(srna, "tool_settings", PROP_POINTER, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "ToolSettings");
- RNA_def_property_pointer_funcs(prop, "rna_Context_tool_settings_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Context_tool_settings_get", NULL, NULL, NULL);
prop= RNA_def_property(srna, "user_preferences", PROP_POINTER, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "UserPreferences");
- RNA_def_property_pointer_funcs(prop, "rna_Context_user_preferences_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Context_user_preferences_get", NULL, NULL, NULL);
prop= RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, mode_items);
diff --git a/source/blender/makesrna/intern/rna_controller.c b/source/blender/makesrna/intern/rna_controller.c
index c66ce532351..ee0707ad0ae 100644
--- a/source/blender/makesrna/intern/rna_controller.c
+++ b/source/blender/makesrna/intern/rna_controller.c
@@ -103,6 +103,7 @@ static void rna_Controller_state_number_set(struct PointerRNA *ptr, const int va
cont->state_mask = (1 << (value - 1));
}
+#if 0 /* editable is set to false, comment for now. */
static void rna_Controller_state_get(PointerRNA *ptr, int *values)
{
bController *cont= (bController *)ptr->data;
@@ -113,7 +114,6 @@ static void rna_Controller_state_get(PointerRNA *ptr, int *values)
values[i] = (cont->state_mask & (1<<i));
}
-#if 0 /* editable is set to false, comment for now. */
static void rna_Controller_state_set(PointerRNA *ptr, const int *values)
{
bController *cont= (bController *)ptr->data;
@@ -170,13 +170,13 @@ void RNA_def_controller(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Type", "");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONT_SHOW);
RNA_def_property_ui_text(prop, "Expanded", "Set controller expanded in the user interface");
RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "priority", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_priority", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONT_PRIO);
RNA_def_property_ui_text(prop, "Priority", "Mark controller for execution before all non-marked controllers (good for startup scripts)");
RNA_def_property_ui_icon(prop, ICON_BOOKMARKS, 1);
@@ -185,7 +185,7 @@ void RNA_def_controller(BlenderRNA *brna)
/* State */
// array of OB_MAX_STATES
- //prop= RNA_def_property(srna, "state", PROP_BOOLEAN, PROP_LAYER_MEMBER);
+ //prop= RNA_def_property(srna, "states", PROP_BOOLEAN, PROP_LAYER_MEMBER);
//RNA_def_property_array(prop, OB_MAX_STATES);
//RNA_def_property_clear_flag(prop, PROP_EDITABLE);
//RNA_def_property_ui_text(prop, "", "Set Controller state index (1 to 30)");
@@ -193,7 +193,7 @@ void RNA_def_controller(BlenderRNA *brna)
//RNA_def_property_update(prop, NC_LOGIC, NULL);
// number of the state
- prop= RNA_def_property(srna, "state", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "states", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_sdna(prop, NULL, "state_mask");
RNA_def_property_range(prop, 1, OB_MAX_STATES);
RNA_def_property_ui_text(prop, "", "Set Controller state index (1 to 30)");
@@ -229,10 +229,9 @@ void RNA_def_controller(BlenderRNA *brna)
prop= RNA_def_property(srna, "module", PROP_STRING, PROP_NONE);
RNA_def_property_ui_text(prop, "Module", "Module name and function to run e.g. \"someModule.main\". Internal texts and external python files can be used");
- RNA_def_struct_name_property(srna, prop);
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "debug", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_debug", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONT_PY_DEBUG);
RNA_def_property_ui_text(prop, "D", "Continuously reload the module from disk for editing external modules without restarting");
RNA_def_property_update(prop, NC_LOGIC, NULL);
diff --git a/source/blender/makesrna/intern/rna_curve.c b/source/blender/makesrna/intern/rna_curve.c
index d8bc683ae12..cfca29aaa83 100644
--- a/source/blender/makesrna/intern/rna_curve.c
+++ b/source/blender/makesrna/intern/rna_curve.c
@@ -29,6 +29,7 @@
#include "rna_internal.h"
#include "DNA_curve_types.h"
+#include "DNA_key_types.h"
#include "DNA_material_types.h"
#include "DNA_scene_types.h"
@@ -36,6 +37,9 @@
#include "WM_types.h"
+#include "BKE_curve.h"
+#include "ED_curve.h"
+
EnumPropertyItem beztriple_handle_type_items[] = {
{HD_FREE, "FREE", 0, "Free", ""},
{HD_AUTO, "AUTO", 0, "Auto", ""},
@@ -71,6 +75,8 @@ EnumPropertyItem curve_type_items[] = {
#include "MEM_guardedalloc.h"
+#include "ED_curve.h" /* for BKE_curve_nurbs */
+
static StructRNA *rna_Curve_refine(PointerRNA *ptr)
{
Curve *cu= (Curve*)ptr->data;
@@ -193,7 +199,8 @@ static void rna_Curve_active_textbox_index_range(PointerRNA *ptr, int *min, int
static void rna_Curve_dimension_set(PointerRNA *ptr, int value)
{
Curve *cu= (Curve*)ptr->id.data;
- Nurb *nu= cu->editnurb ? cu->editnurb->first : cu->nurb.first;
+ ListBase *nurbs= BKE_curve_nurbs(cu);
+ Nurb *nu= nurbs->first;
if(value==CU_3D) {
cu->flag |= CU_3D;
@@ -248,7 +255,7 @@ static void rna_Curve_update_data(Main *bmain, Scene *scene, PointerRNA *ptr)
static void rna_Curve_update_deps(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
rna_Curve_update_data(bmain, scene, ptr);
}
@@ -279,6 +286,20 @@ static void rna_Curve_bevelObject_set(PointerRNA *ptr, PointerRNA value)
}
}
+static int rna_Curve_otherObject_poll(PointerRNA *ptr, PointerRNA value)
+{
+ Curve *cu= (Curve*)ptr->id.data;
+ Object *ob= (Object*)value.data;
+
+ if (ob) {
+ if (ob->type == OB_CURVE && ob->data != cu) {
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
static PointerRNA rna_Curve_taperObject_get(PointerRNA *ptr)
{
Curve *cu= (Curve*)ptr->id.data;
@@ -309,11 +330,9 @@ static void rna_Curve_taperObject_set(PointerRNA *ptr, PointerRNA value)
static void rna_Curve_resolution_u_update_data(Main *bmain, Scene *scene, PointerRNA *ptr)
{
Curve *cu= (Curve*)ptr->id.data;
- Nurb *nu=NULL;
-
- if (cu->editnurb) nu= cu->editnurb->first;
- else nu=cu->nurb.first;
-
+ ListBase *nurbs= BKE_curve_nurbs(cu);
+ Nurb *nu= nurbs->first;
+
while(nu) {
nu->resolu= cu->resolu;
nu= nu->next;
@@ -325,16 +344,15 @@ static void rna_Curve_resolution_u_update_data(Main *bmain, Scene *scene, Pointe
static void rna_Curve_resolution_v_update_data(Main *bmain, Scene *scene, PointerRNA *ptr)
{
Curve *cu= (Curve*)ptr->id.data;
- Nurb *nu=NULL;
-
- if (cu->editnurb) nu= cu->editnurb->first;
- else nu=cu->nurb.first;
-
+ ListBase *nurbs= BKE_curve_nurbs(cu);
+ Nurb *nu=nurbs->first;
+
+
while(nu) {
nu->resolv= cu->resolv;
nu= nu->next;
}
-
+
rna_Curve_update_data(bmain, scene, ptr);
}
@@ -342,13 +360,13 @@ static void rna_Curve_resolution_v_update_data(Main *bmain, Scene *scene, Pointe
void rna_Curve_body_get(PointerRNA *ptr, char *value)
{
Curve *cu= (Curve*)ptr->id.data;
- strcpy(value, cu->str);
+ BLI_strncpy(value, cu->str, cu->len+1);
}
int rna_Curve_body_length(PointerRNA *ptr)
{
Curve *cu= (Curve*)ptr->id.data;
- return strlen(cu->str);
+ return cu->len;
}
/* TODO - check UTF & python play nice */
@@ -357,8 +375,7 @@ void rna_Curve_body_set(PointerRNA *ptr, const char *value)
int len= strlen(value);
Curve *cu= (Curve*)ptr->id.data;
- cu->pos = len;
- cu->len = len;
+ cu->len= cu->pos = len;
if(cu->str) MEM_freeN(cu->str);
if(cu->strinfo) MEM_freeN(cu->strinfo);
@@ -467,12 +484,9 @@ static void rna_Curve_spline_remove(Curve *cu, ReportList *reports, Nurb *nu)
{
/* todo, check we're in the list */
int found= 0;
- if(cu->editnurb) {
- found= BLI_remlink_safe(cu->editnurb, nu);
- }
- else {
- found= BLI_remlink_safe(&cu->nurb, nu);
- }
+ ListBase *nurbs= BKE_curve_nurbs(cu);
+
+ found= BLI_remlink_safe(nurbs, nu);
if(!found) {
BKE_reportf(reports, RPT_ERROR, "Curve \"%s\" does not contain spline given", cu->id.name+2);
@@ -487,11 +501,10 @@ static PointerRNA rna_Curve_active_spline_get(PointerRNA *ptr)
{
Curve *cu= (Curve*)ptr->data;
Nurb *nu;
+ ListBase *nurbs= BKE_curve_nurbs(cu);
- if(cu->editnurb)
- nu= BLI_findlink(cu->editnurb, cu->actnu);
- else
- nu= BLI_findlink(&cu->nurb, cu->actnu); // currently set to -1, should be changed to be allowed outside of editmode.
+ // for curve outside editmode will set to -1, should be changed to be allowed outside of editmode.
+ nu= BLI_findlink(nurbs, cu->actnu);
if(nu)
return rna_pointer_inherit_refine(ptr, &RNA_Spline, nu);
@@ -503,14 +516,25 @@ static void rna_Curve_active_spline_set(PointerRNA *ptr, PointerRNA value)
{
Curve *cu= (Curve*)ptr->data;
Nurb *nu= value.data;
+ ListBase *nubase= BKE_curve_nurbs(cu);
/* -1 is ok for an unset index */
if(nu==NULL)
cu->actnu= -1;
- else if(cu->editnurb)
- cu->actnu= BLI_findindex(cu->editnurb, nu);
else
- cu->actnu= BLI_findindex(&cu->nurb, nu);
+ cu->actnu= BLI_findindex(nubase, nu);
+}
+
+static char *rna_TextBox_path(PointerRNA *ptr)
+{
+ Curve *cu= (Curve*)ptr->id.data;
+ TextBox *tb= ptr->data;
+ int index= (int)(tb - cu->tb);
+
+ if (index >= 0 && index < cu->totbox)
+ return BLI_sprintfN("textboxes[%d]", index);
+ else
+ return BLI_strdup("");
}
#else
@@ -525,14 +549,14 @@ static void rna_def_bpoint(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "SplinePoint", "Spline point without handles");
/* Boolean values */
- prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "f1", 0);
- RNA_def_property_ui_text(prop, "Selected", "Selection status");
+ RNA_def_property_ui_text(prop, "Select", "Selection status");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "hidden", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "hide", 0);
- RNA_def_property_ui_text(prop, "Hidden", "Visibility status");
+ RNA_def_property_ui_text(prop, "Hide", "Visibility status");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
/* Vector value */
@@ -578,41 +602,41 @@ static void rna_def_beztriple(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Bezier Curve Point", "Bezier curve point with two handles");
/* Boolean values */
- prop= RNA_def_property(srna, "selected_handle1", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select_left_handle", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "f1", 0);
RNA_def_property_ui_text(prop, "Handle 1 selected", "Handle 1 selection status");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "selected_handle2", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select_right_handle", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "f3", 0);
RNA_def_property_ui_text(prop, "Handle 2 selected", "Handle 2 selection status");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "selected_control_point", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select_control_point", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "f2", 0);
RNA_def_property_ui_text(prop, "Control Point selected", "Control point selection status");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "hidden", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "hide", 0);
- RNA_def_property_ui_text(prop, "Hidden", "Visibility status");
+ RNA_def_property_ui_text(prop, "Hide", "Visibility status");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
/* Enums */
- prop= RNA_def_property(srna, "handle1_type", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "handle_left_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "h1");
RNA_def_property_enum_items(prop, beztriple_handle_type_items);
RNA_def_property_ui_text(prop, "Handle 1 Type", "Handle types");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "handle2_type", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "handle_right_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "h2");
RNA_def_property_enum_items(prop, beztriple_handle_type_items);
RNA_def_property_ui_text(prop, "Handle 2 Type", "Handle types");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
/* Vector values */
- prop= RNA_def_property(srna, "handle1", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "handle_left", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_array(prop, 3);
RNA_def_property_float_funcs(prop, "rna_BezTriple_handle1_get", "rna_BezTriple_handle1_set", NULL);
RNA_def_property_ui_text(prop, "Handle 1", "Coordinates of the first handle");
@@ -624,7 +648,7 @@ static void rna_def_beztriple(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Control Point", "Coordinates of the control point");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "handle2", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "handle_right", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_array(prop, 3);
RNA_def_property_float_funcs(prop, "rna_BezTriple_handle2_get", "rna_BezTriple_handle2_set", NULL);
RNA_def_property_ui_text(prop, "Handle 2", "Coordinates of the second handle");
@@ -655,7 +679,7 @@ static void rna_def_path(BlenderRNA *brna, StructRNA *srna)
PropertyRNA *prop;
/* number values */
- prop= RNA_def_property(srna, "path_length", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "path_duration", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "pathlen");
RNA_def_property_range(prop, 1, MAXFRAME);
RNA_def_property_ui_text(prop, "Path Length", "The number of frames that are needed to traverse the path, defining the maximum value for the 'Evaluation Time' setting");
@@ -676,7 +700,12 @@ static void rna_def_path(BlenderRNA *brna, StructRNA *srna)
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_STRETCH);
RNA_def_property_ui_text(prop, "Stretch", "Option for curve-deform: makes deformed child to stretch along entire path");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
-
+
+ prop= RNA_def_property(srna, "use_deform_bounds", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CU_DEFORM_BOUNDS_OFF);
+ RNA_def_property_ui_text(prop, "Bounds Clamp", "Use the mesh bounds to clamp the deformation");
+ RNA_def_property_update(prop, 0, "rna_Curve_update_data");
+
prop= RNA_def_property(srna, "use_time_offset", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_OFFS_PATHDIST);
RNA_def_property_ui_text(prop, "Offset Path Distance", "Children will use TimeOffs value as path distance offset");
@@ -693,15 +722,10 @@ static void rna_def_nurbs(BlenderRNA *brna, StructRNA *srna)
PropertyRNA *prop;
/* flags */
- prop= RNA_def_property(srna, "map_along_length", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_on_length", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_UV_ORCO);
RNA_def_property_ui_text(prop, "Map Along Length", "Generate texture mapping coordinates following the curve direction, rather than the local bounding box");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
-
- prop= RNA_def_property(srna, "vertex_normal_flip", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CU_NOPUNOFLIP);
- RNA_def_property_ui_text(prop, "Vertex Normal Flip", "Flip vertex normals towards the camera during render");
- RNA_def_property_update(prop, 0, "rna_Curve_update_data");
}
static void rna_def_font(BlenderRNA *brna, StructRNA *srna)
@@ -717,38 +741,39 @@ static void rna_def_font(BlenderRNA *brna, StructRNA *srna)
{0, NULL, 0, NULL, NULL}};
/* Enums */
- prop= RNA_def_property(srna, "spacemode", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "align", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "spacemode");
RNA_def_property_enum_items(prop, prop_align_items);
RNA_def_property_ui_text(prop, "Text Align", "Text align from the object center");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
/* number values */
- prop= RNA_def_property(srna, "text_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "size", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "fsize");
RNA_def_property_range(prop, 0.0001f, 10000.0f);
- RNA_def_property_ui_range(prop, 0.01, 10, 1, 1);
+ RNA_def_property_ui_range(prop, 0.01, 10, 1, 3);
RNA_def_property_ui_text(prop, "Font size", "");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
prop= RNA_def_property(srna, "small_caps_scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "smallcaps_scale");
- RNA_def_property_ui_range(prop, 0, 1.0, 0.1, 0);
+ RNA_def_property_ui_range(prop, 0, 1.0, 1, 2);
RNA_def_property_ui_text(prop, "Small Caps", "Scale of small capitals");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "line_dist", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "space_line", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "linedist");
RNA_def_property_range(prop, 0.0f, 10.0f);
RNA_def_property_ui_text(prop, "Distance between lines of text", "");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "word_spacing", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "space_word", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "wordspace");
RNA_def_property_range(prop, 0.0f, 10.0f);
RNA_def_property_ui_text(prop, "Spacing between words", "");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "spacing", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "space_character", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "spacing");
RNA_def_property_range(prop, 0.0f, 10.0f);
RNA_def_property_ui_text(prop, "Global spacing between characters", "");
@@ -772,19 +797,19 @@ static void rna_def_font(BlenderRNA *brna, StructRNA *srna)
RNA_def_property_ui_text(prop, "Y Offset", "Vertical offset from the object origin");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "ul_position", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "underline_position", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "ulpos");
RNA_def_property_range(prop, -0.2f, 0.8f);
RNA_def_property_ui_text(prop, "Underline Position", "Vertical position of underline");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "ul_height", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "underline_height", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "ulheight");
RNA_def_property_range(prop, -0.2f, 0.8f);
RNA_def_property_ui_text(prop, "Underline Thickness", "");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "textboxes", PROP_COLLECTION, PROP_NONE);
+ prop= RNA_def_property(srna, "text_boxes", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "tb", "totbox");
RNA_def_property_struct_type(prop, "TextBox");
RNA_def_property_ui_text(prop, "Textboxes", "");
@@ -805,12 +830,17 @@ static void rna_def_font(BlenderRNA *brna, StructRNA *srna)
RNA_def_property_ui_text(prop, "Body Text", "contents of this text object");
RNA_def_property_string_funcs(prop, "rna_Curve_body_get", "rna_Curve_body_length", "rna_Curve_body_set");
RNA_def_property_string_maxlength(prop, 8192); /* note that originally str did not have a limit! */
- RNA_def_struct_name_property(srna, prop);
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
+
+ prop= RNA_def_property(srna, "body_format", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "strinfo", "len");
+ RNA_def_property_struct_type(prop, "TextCharacterFormat");
+ RNA_def_property_ui_text(prop, "Character Info", "Stores the style of each character");
/* pointers */
- prop= RNA_def_property(srna, "text_on_curve", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "follow_curve", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "textoncurve");
+ RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_Curve_otherObject_poll");
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Text on Curve", "Curve deforming text object");
RNA_def_property_update(prop, 0, "rna_Curve_update_deps");
@@ -827,7 +857,7 @@ static void rna_def_font(BlenderRNA *brna, StructRNA *srna)
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
/* flags */
- prop= RNA_def_property(srna, "fast", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_fast_edit", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_FAST);
RNA_def_property_ui_text(prop, "Fast", "Don't fill polygons while editing");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
@@ -840,7 +870,6 @@ static void rna_def_textbox(BlenderRNA *brna)
srna= RNA_def_struct(brna, "TextBox", NULL);
RNA_def_struct_ui_text(srna, "Text Box", "Text bounding box for layout");
- // XXX: still needs path function
/* number values */
prop= RNA_def_property(srna, "x", PROP_FLOAT, PROP_NONE);
@@ -866,6 +895,8 @@ static void rna_def_textbox(BlenderRNA *brna)
RNA_def_property_range(prop, 0.0f, 50.0f);
RNA_def_property_ui_text(prop, "Textbox Height", "");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
+
+ RNA_def_struct_path_func(srna, "rna_TextBox_path");
}
static void rna_def_charinfo(BlenderRNA *brna)
@@ -878,17 +909,17 @@ static void rna_def_charinfo(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Text Character Format", "Text character formatting settings");
/* flags */
- prop= RNA_def_property(srna, "bold", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_bold", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_CHINFO_BOLD);
RNA_def_property_ui_text(prop, "Bold", "");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "italic", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_italic", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_CHINFO_ITALIC);
RNA_def_property_ui_text(prop, "Italic", "");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "underline", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_underline", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_CHINFO_UNDERLINE);
RNA_def_property_ui_text(prop, "Underline", "");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
@@ -1015,7 +1046,7 @@ static void rna_def_curve_splines(BlenderRNA *brna, PropertyRNA *cprop)
prop= RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Object");
- RNA_def_property_pointer_funcs(prop, "rna_Curve_active_spline_get", "rna_Curve_active_spline_set", NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Curve_active_spline_get", "rna_Curve_active_spline_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Active Spline", "Active curve spline");
/* Could call: ED_base_object_activate(C, scene->basact);
@@ -1057,12 +1088,12 @@ static void rna_def_curve(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Splines", "Collection of splines in this curve data object");
rna_def_curve_splines(brna, prop);
- prop= RNA_def_property(srna, "draw_handles", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_handles", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "drawflag", CU_HIDE_HANDLES);
RNA_def_property_ui_text(prop, "Draw Handles", "Display bezier handles in editmode");
RNA_def_property_update(prop, NC_GEOM|ND_DATA, NULL);
- prop= RNA_def_property(srna, "draw_normals", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_normal_face", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "drawflag", CU_HIDE_NORMALS);
RNA_def_property_ui_text(prop, "Draw Normals", "Display 3D curve normals in editmode");
RNA_def_property_update(prop, NC_GEOM|ND_DATA, NULL);
@@ -1077,22 +1108,22 @@ static void rna_def_curve(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Bevel Resolution", "Bevel resolution when depth is non-zero and no specific bevel object has been defined");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "width", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "offset", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "width");
- RNA_def_property_ui_range(prop, 0, 2.0, 0.1, 0);
+ RNA_def_property_ui_range(prop, 0, 2.0, 0.1, 3);
RNA_def_property_ui_text(prop, "Width", "Scale the original width (1.0) based on given factor");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
prop= RNA_def_property(srna, "extrude", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "ext1");
- RNA_def_property_ui_range(prop, 0, 100.0, 0.1, 0);
+ RNA_def_property_ui_range(prop, 0, 100.0, 0.1, 3);
RNA_def_property_range(prop, 0.0, FLT_MAX);
RNA_def_property_ui_text(prop, "Extrude", "Amount of curve extrusion when not using a bevel object");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
prop= RNA_def_property(srna, "bevel_depth", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "ext2");
- RNA_def_property_ui_range(prop, 0, 100.0, 0.1, 0);
+ RNA_def_property_ui_range(prop, 0, 100.0, 0.1, 3);
RNA_def_property_ui_text(prop, "Bevel Depth", "Bevel depth when not using a bevel object");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
@@ -1135,7 +1166,7 @@ static void rna_def_curve(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Bevel Object", "Curve object name that defines the bevel shape");
RNA_def_property_update(prop, 0, "rna_Curve_update_deps");
- RNA_def_property_pointer_funcs(prop, "rna_Curve_bevelObject_get", "rna_Curve_bevelObject_set", NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Curve_bevelObject_get", "rna_Curve_bevelObject_set", NULL, "rna_Curve_otherObject_poll");
prop= RNA_def_property(srna, "taper_object", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Object");
@@ -1143,7 +1174,7 @@ static void rna_def_curve(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Taper Object", "Curve object name that defines the taper (width)");
RNA_def_property_update(prop, 0, "rna_Curve_update_deps");
- RNA_def_property_pointer_funcs(prop, "rna_Curve_taperObject_get", "rna_Curve_taperObject_set", NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Curve_taperObject_get", "rna_Curve_taperObject_set", NULL, "rna_Curve_otherObject_poll");
/* Flags */
@@ -1154,12 +1185,12 @@ static void rna_def_curve(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Dimensions", "Select 2D or 3D curve type");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "front", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_fill_front", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_FRONT);
RNA_def_property_ui_text(prop, "Front", "Draw filled front for extruded/beveled curves");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "back", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_fill_back", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_BACK);
RNA_def_property_ui_text(prop, "Back", "Draw filled back for extruded/beveled curves");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
@@ -1177,17 +1208,17 @@ static void rna_def_curve(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Twist Smooth", "Smoothing iteration for tangents");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "use_deform_fill", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_fill_deform", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_DEFORM_FILL);
RNA_def_property_ui_text(prop, "Fill deformed", "Fill curve after applying deformation");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
/* texture space */
- prop= RNA_def_property(srna, "auto_texspace", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_texspace", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "texflag", CU_AUTOSPACE);
RNA_def_property_ui_text(prop, "Auto Texture Space", "Adjusts active object's texture space automatically when transforming object");
- prop= RNA_def_property(srna, "texspace_loc", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "texspace_location", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Texture Space Location", "Texture space location");
RNA_def_property_editable_func(prop, "rna_Curve_texspace_editable");
@@ -1208,7 +1239,7 @@ static void rna_def_curve(BlenderRNA *brna)
RNA_def_property_editable_func(prop, texspace_editable);
RNA_def_property_update(prop, 0, "rna_Curve_update_data");*/
- prop= RNA_def_property(srna, "map_along_length", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_on_length", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_UV_ORCO);
RNA_def_property_ui_text(prop, "Map Along Length", "Generate texture mapping coordinates following the curve direction, rather than the local bounding box");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
@@ -1223,10 +1254,10 @@ static void rna_def_curve(BlenderRNA *brna)
static void rna_def_curve_nurb(BlenderRNA *brna)
{
static EnumPropertyItem spline_interpolation_items[] = {
- {BEZT_IPO_CONST, "LINEAR", 0, "Linear", ""},
- {BEZT_IPO_LIN, "CARDINAL", 0, "Cardinal", ""},
- {BEZT_IPO_BEZ, "BSPLINE", 0, "BSpline", ""},
- {BEZT_IPO_BEZ, "EASE", 0, "Ease", ""},
+ {KEY_LINEAR, "LINEAR", 0, "Linear", ""},
+ {KEY_CARDINAL, "CARDINAL", 0, "Cardinal", ""},
+ {KEY_BSPLINE, "BSPLINE", 0, "BSpline", ""},
+ {KEY_CU_EASE, "EASE", 0, "Ease", ""}, /* todo, define somewhere, not one of BEZT_IPO_* */
{0, NULL, 0, NULL, NULL}};
StructRNA *srna;
@@ -1309,40 +1340,40 @@ static void rna_def_curve_nurb(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Resolution V", "Surface subdivisions per segment");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "cyclic_u", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cyclic_u", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flagu", CU_NURB_CYCLIC);
RNA_def_property_ui_text(prop, "Cyclic U", "Make this curve or surface a closed loop in the U direction");
RNA_def_property_update(prop, 0, "rna_Nurb_update_handle_data"); /* only needed for cyclic_u because cyclic_v cant do bezier */
- prop= RNA_def_property(srna, "cyclic_v", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cyclic_v", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flagv", CU_NURB_CYCLIC);
RNA_def_property_ui_text(prop, "Cyclic V", "Make this surface a closed loop in the V direction");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
/* Note, endpoint and bezier flags should never be on at the same time! */
- prop= RNA_def_property(srna, "endpoint_u", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_endpoint_u", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flagu", CU_NURB_ENDPOINT);
RNA_def_property_ui_text(prop, "Endpoint U", "Make this nurbs curve or surface meet the endpoints in the U direction (Cyclic U must be disabled)");
RNA_def_property_update(prop, 0, "rna_Nurb_update_knot_u");
- prop= RNA_def_property(srna, "endpoint_v", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_endpoint_v", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flagv", CU_NURB_ENDPOINT);
RNA_def_property_ui_text(prop, "Endpoint V", "Make this nurbs surface meet the endpoints in the V direction (Cyclic V must be disabled)");
RNA_def_property_update(prop, 0, "rna_Nurb_update_knot_v");
- prop= RNA_def_property(srna, "bezier_u", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_bezier_u", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flagu", CU_NURB_BEZIER);
RNA_def_property_ui_text(prop, "Bezier U", "Make this nurbs curve or surface act like a bezier spline in the U direction (Order U must be 3 or 4, Cyclic U must be disabled)");
RNA_def_property_update(prop, 0, "rna_Nurb_update_knot_u");
- prop= RNA_def_property(srna, "bezier_v", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_bezier_v", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flagv", CU_NURB_BEZIER);
RNA_def_property_ui_text(prop, "Bezier V", "Make this nurbs surface act like a bezier spline in the V direction (Order V must be 3 or 4, Cyclic V must be disabled)");
RNA_def_property_update(prop, 0, "rna_Nurb_update_knot_v");
- prop= RNA_def_property(srna, "smooth", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_smooth", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_SMOOTH);
RNA_def_property_ui_text(prop, "Smooth", "Smooth the normals of the surface or beveled curve");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
diff --git a/source/blender/makesrna/intern/rna_define.c b/source/blender/makesrna/intern/rna_define.c
index fbcc3109af4..43bf40d3965 100644
--- a/source/blender/makesrna/intern/rna_define.c
+++ b/source/blender/makesrna/intern/rna_define.c
@@ -476,7 +476,7 @@ void RNA_struct_free(BlenderRNA *brna, StructRNA *srna)
if(srna->flag & STRUCT_RUNTIME) {
if(RNA_struct_py_type_get(srna)) {
- fprintf(stderr, "StructRNA \"%s\" freed while holding a python reference\n", srna->name);
+ fprintf(stderr, "RNA_struct_free '%s' freed while holding a python reference\n", srna->identifier);
}
}
@@ -670,7 +670,7 @@ StructRNA *RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *
if(DefRNA.preprocess) {
RNA_def_property_struct_type(prop, "Struct");
- RNA_def_property_pointer_funcs(prop, "rna_builtin_type_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_builtin_type_get", NULL, NULL, NULL);
}
else {
#ifdef RNA_RUNTIME
@@ -737,7 +737,7 @@ void RNA_def_struct_sdna_from(StructRNA *srna, const char *structname, const cha
void RNA_def_struct_name_property(struct StructRNA *srna, struct PropertyRNA *prop)
{
if(prop->type != PROP_STRING) {
- fprintf(stderr, "RNA_def_struct_name_property: %s.%s, must be a string property.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_struct_name_property: \"%s.%s\", must be a string property.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
}
else
@@ -781,10 +781,10 @@ void RNA_def_struct_refine_func(StructRNA *srna, const char *refine)
if(refine) srna->refine= (StructRefineFunc)refine;
}
-void RNA_def_struct_idproperties_func(StructRNA *srna, const char *idproperties)
+void RNA_def_struct_idprops_func(StructRNA *srna, const char *idproperties)
{
if(!DefRNA.preprocess) {
- fprintf(stderr, "RNA_def_struct_idproperties_func: only during preprocessing.\n");
+ fprintf(stderr, "RNA_def_struct_idprops_func: only during preprocessing.\n");
return;
}
@@ -847,7 +847,7 @@ PropertyRNA *RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier
char error[512];
if (rna_validate_identifier(identifier, error, 1) == 0) {
- fprintf(stderr, "RNA_def_property: property identifier \"%s\" - %s\n", identifier, error);
+ fprintf(stderr, "RNA_def_property: property identifier \"%s.%s\" - %s\n", srna->identifier, identifier, error);
DefRNA.error= 1;
}
@@ -855,7 +855,7 @@ PropertyRNA *RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier
/* XXX - toto, detect supertype collisions */
if(rna_findlink(&dcont->properties, identifier)) {
- fprintf(stderr, "RNA_def_property: duplicate identifier \"%s\"\n", identifier);
+ fprintf(stderr, "RNA_def_property: duplicate identifier \"%s.%s\"\n", srna->identifier, identifier);
DefRNA.error= 1;
}
@@ -913,7 +913,7 @@ PropertyRNA *RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier
case PROP_COLLECTION:
break;
default:
- fprintf(stderr, "RNA_def_property: %s.%s, invalid property type.\n", srna->identifier, identifier);
+ fprintf(stderr, "RNA_def_property: \"%s.%s\", invalid property type.\n", srna->identifier, identifier);
DefRNA.error= 1;
return NULL;
}
@@ -1009,13 +1009,13 @@ void RNA_def_property_array(PropertyRNA *prop, int length)
StructRNA *srna= DefRNA.laststruct;
if(length<0) {
- fprintf(stderr, "RNA_def_property_array: %s.%s, array length must be zero of greater.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_array: \"%s.%s\", array length must be zero of greater.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
return;
}
if(length>RNA_MAX_ARRAY_LENGTH) {
- fprintf(stderr, "RNA_def_property_array: %s.%s, array length must be smaller than %d.\n", srna->identifier, prop->identifier, RNA_MAX_ARRAY_LENGTH);
+ fprintf(stderr, "RNA_def_property_array: \"%s.%s\", array length must be smaller than %d.\n", srna->identifier, prop->identifier, RNA_MAX_ARRAY_LENGTH);
DefRNA.error= 1;
return;
}
@@ -1029,7 +1029,7 @@ void RNA_def_property_array(PropertyRNA *prop, int length)
prop->arraydimension= 1;
break;
default:
- fprintf(stderr, "RNA_def_property_array: %s.%s, only boolean/int/float can be array.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_array: \"%s.%s\", only boolean/int/float can be array.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
break;
}
@@ -1041,7 +1041,7 @@ void RNA_def_property_multi_array(PropertyRNA *prop, int dimension, int length[]
int i;
if (dimension < 1 || dimension > RNA_MAX_ARRAY_DIMENSION) {
- fprintf(stderr, "RNA_def_property_multi_array: %s.%s, array dimension must be between 1 and %d.\n", srna->identifier, prop->identifier, RNA_MAX_ARRAY_DIMENSION);
+ fprintf(stderr, "RNA_def_property_multi_array: \"%s.%s\", array dimension must be between 1 and %d.\n", srna->identifier, prop->identifier, RNA_MAX_ARRAY_DIMENSION);
DefRNA.error= 1;
return;
}
@@ -1052,7 +1052,7 @@ void RNA_def_property_multi_array(PropertyRNA *prop, int dimension, int length[]
case PROP_FLOAT:
break;
default:
- fprintf(stderr, "RNA_def_property_multi_array: %s.%s, only boolean/int/float can be array.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_multi_array: \"%s.%s\", only boolean/int/float can be array.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
break;
}
@@ -1107,7 +1107,7 @@ void RNA_def_property_ui_range(PropertyRNA *prop, double min, double max, double
break;
}
default:
- fprintf(stderr, "RNA_def_property_ui_range: %s.%s, invalid type for ui range.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_ui_range: \"%s.%s\", invalid type for ui range.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
break;
}
@@ -1135,7 +1135,7 @@ void RNA_def_property_range(PropertyRNA *prop, double min, double max)
break;
}
default:
- fprintf(stderr, "RNA_def_property_range: %s.%s, invalid type for range.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_range: \"%s.%s\", invalid type for range.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
break;
}
@@ -1146,7 +1146,7 @@ void RNA_def_property_struct_type(PropertyRNA *prop, const char *type)
StructRNA *srna= DefRNA.laststruct;
if(!DefRNA.preprocess) {
- fprintf(stderr, "RNA_def_property_struct_type %s.%s: only during preprocessing.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_struct_type \"%s.%s\": only during preprocessing.\n", srna->identifier, prop->identifier);
return;
}
@@ -1162,7 +1162,7 @@ void RNA_def_property_struct_type(PropertyRNA *prop, const char *type)
break;
}
default:
- fprintf(stderr, "RNA_def_property_struct_type: %s.%s, invalid type for struct type.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_struct_type: \"%s.%s\", invalid type for struct type.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
break;
}
@@ -1193,7 +1193,7 @@ void RNA_def_property_struct_runtime(PropertyRNA *prop, StructRNA *type)
break;
}
default:
- fprintf(stderr, "RNA_def_property_struct_runtime: %s.%s, invalid type for struct type.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_struct_runtime: \"%s.%s\", invalid type for struct type.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
break;
}
@@ -1228,7 +1228,7 @@ void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item
break;
}
default:
- fprintf(stderr, "RNA_def_property_enum_items: %s.%s, invalid type for struct type.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_enum_items: \"%s.%s\", invalid type for struct type.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
break;
}
@@ -1245,7 +1245,7 @@ void RNA_def_property_string_maxlength(PropertyRNA *prop, int maxlength)
break;
}
default:
- fprintf(stderr, "RNA_def_property_string_maxlength: %s.%s, type is not string.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_string_maxlength: \"%s.%s\", type is not string.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
break;
}
@@ -1262,7 +1262,7 @@ void RNA_def_property_boolean_default(PropertyRNA *prop, int value)
break;
}
default:
- fprintf(stderr, "RNA_def_property_boolean_default: %s.%s, type is not boolean.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_boolean_default: \"%s.%s\", type is not boolean.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
break;
}
@@ -1279,7 +1279,7 @@ void RNA_def_property_boolean_array_default(PropertyRNA *prop, const int *array)
break;
}
default:
- fprintf(stderr, "RNA_def_property_boolean_default: %s.%s, type is not boolean.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_boolean_default: \"%s.%s\", type is not boolean.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
break;
}
@@ -1296,7 +1296,7 @@ void RNA_def_property_int_default(PropertyRNA *prop, int value)
break;
}
default:
- fprintf(stderr, "RNA_def_property_int_default: %s.%s, type is not int.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_int_default: \"%s.%s\", type is not int.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
break;
}
@@ -1313,7 +1313,7 @@ void RNA_def_property_int_array_default(PropertyRNA *prop, const int *array)
break;
}
default:
- fprintf(stderr, "RNA_def_property_int_default: %s.%s, type is not int.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_int_default: \"%s.%s\", type is not int.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
break;
}
@@ -1330,7 +1330,7 @@ void RNA_def_property_float_default(PropertyRNA *prop, float value)
break;
}
default:
- fprintf(stderr, "RNA_def_property_float_default: %s.%s, type is not float.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_float_default: \"%s.%s\", type is not float.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
break;
}
@@ -1347,7 +1347,7 @@ void RNA_def_property_float_array_default(PropertyRNA *prop, const float *array)
break;
}
default:
- fprintf(stderr, "RNA_def_property_float_default: %s.%s, type is not float.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_float_default: \"%s.%s\", type is not float.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
break;
}
@@ -1364,7 +1364,7 @@ void RNA_def_property_string_default(PropertyRNA *prop, const char *value)
break;
}
default:
- fprintf(stderr, "RNA_def_property_string_default: %s.%s, type is not string.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_string_default: \"%s.%s\", type is not string.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
break;
}
@@ -1390,7 +1390,7 @@ void RNA_def_property_enum_default(PropertyRNA *prop, int value)
eprop->defaultvalue= eprop->item[0].value;
}
else {
- fprintf(stderr, "RNA_def_property_enum_default: %s.%s, default is not in items.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_enum_default: \"%s.%s\", default is not in items.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
}
}
@@ -1398,7 +1398,7 @@ void RNA_def_property_enum_default(PropertyRNA *prop, int value)
break;
}
default:
- fprintf(stderr, "RNA_def_property_enum_default: %s.%s, type is not enum.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_enum_default: \"%s.%s\", type is not enum.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
break;
}
@@ -1437,7 +1437,7 @@ static PropertyDefRNA *rna_def_property_sdna(PropertyRNA *prop, const char *stru
return dp;
}
else {
- fprintf(stderr, "rna_def_property_sdna: %s.%s not found.\n", structname, propname);
+ fprintf(stderr, "rna_def_property_sdna: \"%s.%s\" not found.\n", structname, propname);
DefRNA.error= 1;
return NULL;
}
@@ -1475,7 +1475,7 @@ void RNA_def_property_boolean_sdna(PropertyRNA *prop, const char *structname, co
}
if(prop->type != PROP_BOOLEAN) {
- fprintf(stderr, "RNA_def_property_boolean_sdna: %s.%s, type is not boolean.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_boolean_sdna: \"%s.%s\", type is not boolean.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
return;
}
@@ -1508,7 +1508,7 @@ void RNA_def_property_int_sdna(PropertyRNA *prop, const char *structname, const
}
if(prop->type != PROP_INT) {
- fprintf(stderr, "RNA_def_property_int_sdna: %s.%s, type is not int.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_int_sdna: \"%s.%s\", type is not int.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
return;
}
@@ -1546,7 +1546,7 @@ void RNA_def_property_float_sdna(PropertyRNA *prop, const char *structname, cons
}
if(prop->type != PROP_FLOAT) {
- fprintf(stderr, "RNA_def_property_float_sdna: %s.%s, type is not float.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_float_sdna: \"%s.%s\", type is not float.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
return;
}
@@ -1565,7 +1565,7 @@ void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const
}
if(prop->type != PROP_ENUM) {
- fprintf(stderr, "RNA_def_property_enum_sdna: %s.%s, type is not enum.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_enum_sdna: \"%s.%s\", type is not enum.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
return;
}
@@ -1576,7 +1576,7 @@ void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const
prop->totarraylength= 0;
if(!DefRNA.silent) {
- fprintf(stderr, "RNA_def_property_enum_sdna: %s.%s, array not supported for enum type.\n", structname, propname);
+ fprintf(stderr, "RNA_def_property_enum_sdna: \"%s.%s\", array not supported for enum type.\n", structname, propname);
DefRNA.error= 1;
}
}
@@ -1607,7 +1607,7 @@ void RNA_def_property_string_sdna(PropertyRNA *prop, const char *structname, con
}
if(prop->type != PROP_STRING) {
- fprintf(stderr, "RNA_def_property_string_sdna: %s.%s, type is not string.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_string_sdna: \"%s.%s\", type is not string.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
return;
}
@@ -1632,7 +1632,7 @@ void RNA_def_property_pointer_sdna(PropertyRNA *prop, const char *structname, co
}
if(prop->type != PROP_POINTER) {
- fprintf(stderr, "RNA_def_property_pointer_sdna: %s.%s, type is not pointer.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_pointer_sdna: \"%s.%s\", type is not pointer.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
return;
}
@@ -1643,7 +1643,7 @@ void RNA_def_property_pointer_sdna(PropertyRNA *prop, const char *structname, co
prop->totarraylength= 0;
if(!DefRNA.silent) {
- fprintf(stderr, "RNA_def_property_pointer_sdna: %s.%s, array not supported for pointer type.\n", structname, propname);
+ fprintf(stderr, "RNA_def_property_pointer_sdna: \"%s.%s\", array not supported for pointer type.\n", structname, propname);
DefRNA.error= 1;
}
}
@@ -1662,7 +1662,7 @@ void RNA_def_property_collection_sdna(PropertyRNA *prop, const char *structname,
}
if(prop->type != PROP_COLLECTION) {
- fprintf(stderr, "RNA_def_property_collection_sdna: %s.%s, type is not collection.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_collection_sdna: \"%s.%s\", type is not collection.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
return;
}
@@ -1673,7 +1673,7 @@ void RNA_def_property_collection_sdna(PropertyRNA *prop, const char *structname,
prop->totarraylength= 0;
if(!DefRNA.silent) {
- fprintf(stderr, "RNA_def_property_collection_sdna: %s.%s, array of collections not supported.\n", structname, propname);
+ fprintf(stderr, "RNA_def_property_collection_sdna: \"%s.%s\", array of collections not supported.\n", structname, propname);
DefRNA.error= 1;
}
}
@@ -1714,7 +1714,7 @@ void RNA_def_property_collection_sdna(PropertyRNA *prop, const char *structname,
}
else {
if(!DefRNA.silent) {
- fprintf(stderr, "RNA_def_property_collection_sdna: %s.%s not found.\n", structname, lengthpropname);
+ fprintf(stderr, "RNA_def_property_collection_sdna: \"%s.%s\" not found.\n", structname, lengthpropname);
DefRNA.error= 1;
}
}
@@ -1794,7 +1794,7 @@ void RNA_def_property_boolean_funcs(PropertyRNA *prop, const char *get, const ch
break;
}
default:
- fprintf(stderr, "RNA_def_property_boolean_funcs: %s.%s, type is not boolean.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_boolean_funcs: \"%s.%s\", type is not boolean.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
break;
}
@@ -1825,7 +1825,7 @@ void RNA_def_property_int_funcs(PropertyRNA *prop, const char *get, const char *
break;
}
default:
- fprintf(stderr, "RNA_def_property_int_funcs: %s.%s, type is not int.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_int_funcs: \"%s.%s\", type is not int.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
break;
}
@@ -1856,7 +1856,7 @@ void RNA_def_property_float_funcs(PropertyRNA *prop, const char *get, const char
break;
}
default:
- fprintf(stderr, "RNA_def_property_float_funcs: %s.%s, type is not float.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_float_funcs: \"%s.%s\", type is not float.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
break;
}
@@ -1881,7 +1881,7 @@ void RNA_def_property_enum_funcs(PropertyRNA *prop, const char *get, const char
break;
}
default:
- fprintf(stderr, "RNA_def_property_enum_funcs: %s.%s, type is not enum.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_enum_funcs: \"%s.%s\", type is not enum.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
break;
}
@@ -1906,13 +1906,13 @@ void RNA_def_property_string_funcs(PropertyRNA *prop, const char *get, const cha
break;
}
default:
- fprintf(stderr, "RNA_def_property_string_funcs: %s.%s, type is not string.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_string_funcs: \"%s.%s\", type is not string.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
break;
}
}
-void RNA_def_property_pointer_funcs(PropertyRNA *prop, const char *get, const char *set, const char *typef)
+void RNA_def_property_pointer_funcs(PropertyRNA *prop, const char *get, const char *set, const char *typef, const char *poll)
{
StructRNA *srna= DefRNA.laststruct;
@@ -1928,10 +1928,11 @@ void RNA_def_property_pointer_funcs(PropertyRNA *prop, const char *get, const ch
if(get) pprop->get= (PropPointerGetFunc)get;
if(set) pprop->set= (PropPointerSetFunc)set;
if(typef) pprop->typef= (PropPointerTypeFunc)typef;
+ if(poll) pprop->poll= (PropPointerPollFunc)poll;
break;
}
default:
- fprintf(stderr, "RNA_def_property_pointer_funcs: %s.%s, type is not pointer.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_pointer_funcs: \"%s.%s\", type is not pointer.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
break;
}
@@ -1960,7 +1961,7 @@ void RNA_def_property_collection_funcs(PropertyRNA *prop, const char *begin, con
break;
}
default:
- fprintf(stderr, "RNA_def_property_collection_funcs: %s.%s, type is not collection.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "RNA_def_property_collection_funcs: \"%s.%s\", type is not collection.\n", srna->identifier, prop->identifier);
DefRNA.error= 1;
break;
}
@@ -2422,11 +2423,11 @@ FunctionRNA *RNA_def_function_runtime(StructRNA *srna, const char *identifier, C
void RNA_def_function_return(FunctionRNA *func, PropertyRNA *ret)
{
if (ret->flag & PROP_DYNAMIC) {
- fprintf(stderr, "RNA_def_function_return: %s.%s, dynamic values are not allowed as strict returns, use RNA_def_function_output instead.\n", func->identifier, ret->identifier);
+ fprintf(stderr, "RNA_def_function_return: \"%s.%s\", dynamic values are not allowed as strict returns, use RNA_def_function_output instead.\n", func->identifier, ret->identifier);
return;
}
else if (ret->arraydimension) {
- fprintf(stderr, "RNA_def_function_return: %s.%s, arrays are not allowed as strict returns, use RNA_def_function_output instead.\n", func->identifier, ret->identifier);
+ fprintf(stderr, "RNA_def_function_return: \"%s.%s\", arrays are not allowed as strict returns, use RNA_def_function_output instead.\n", func->identifier, ret->identifier);
return;
}
@@ -2727,14 +2728,16 @@ void RNA_def_property_free(StructOrFunctionRNA *cont_, PropertyRNA *prop)
{
ContainerRNA *cont= cont_;
- RNA_def_property_free_pointers(prop);
-
if(prop->flag & PROP_RUNTIME) {
if(cont->prophash)
BLI_ghash_remove(cont->prophash, (void*)prop->identifier, NULL, NULL);
+ RNA_def_property_free_pointers(prop);
rna_freelinkN(&cont->properties, prop);
}
+ else {
+ RNA_def_property_free_pointers(prop);
+ }
}
/* note: only intended for removing dynamic props */
diff --git a/source/blender/makesrna/intern/rna_fcurve.c b/source/blender/makesrna/intern/rna_fcurve.c
index d798753d123..b37e5f91538 100644
--- a/source/blender/makesrna/intern/rna_fcurve.c
+++ b/source/blender/makesrna/intern/rna_fcurve.c
@@ -110,7 +110,7 @@ static void rna_ChannelDriver_update_data(Main *bmain, Scene *scene, PointerRNA
driver->flag &= ~DRIVER_FLAG_INVALID;
// TODO: this really needs an update guard...
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
DAG_id_flush_update(id, OB_RECALC_OB|OB_RECALC_DATA);
WM_main_add_notifier(NC_SCENE|ND_FRAME, scene);
@@ -568,7 +568,7 @@ static void rna_def_fmodifier_generator(BlenderRNA *brna)
RNA_def_struct_sdna_from(srna, "FMod_Generator", "data");
/* define common props */
- prop= RNA_def_property(srna, "additive", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_additive", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FCM_GENERATOR_ADDITIVE);
RNA_def_property_ui_text(prop, "Additive", "Values generated by this modifier are applied on top of the existing values instead of overwriting them");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
@@ -633,7 +633,7 @@ static void rna_def_fmodifier_function_generator(BlenderRNA *brna)
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
/* flags */
- prop= RNA_def_property(srna, "additive", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_additive", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FCM_GENERATOR_ADDITIVE);
RNA_def_property_ui_text(prop, "Additive", "Values generated by this modifier are applied on top of the existing values instead of overwriting them");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
@@ -660,12 +660,12 @@ static void rna_def_fmodifier_envelope_ctrl(BlenderRNA *brna)
* - for now, these are allowed to go past each other, so that we can have inverted action
* - technically, the range is limited by the settings in the envelope-modifier data, not here...
*/
- prop= RNA_def_property(srna, "minimum", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "min", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "min");
RNA_def_property_ui_text(prop, "Minimum Value", "Lower bound of envelope at this control-point");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "maximum", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "max");
RNA_def_property_ui_text(prop, "Maximum Value", "Upper bound of envelope at this control-point");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
@@ -701,12 +701,12 @@ static void rna_def_fmodifier_envelope(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Reference Value", "Value that envelope's influence is centered around / based on");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "default_minimum", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "default_min", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "min");
RNA_def_property_ui_text(prop, "Default Minimum", "Lower distance from Reference Value for 1:1 default influence");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "default_maximum", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "default_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "max");
RNA_def_property_ui_text(prop, "Default Maximum", "Upper distance from Reference Value for 1:1 default influence");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
@@ -731,22 +731,26 @@ static void rna_def_fmodifier_cycles(BlenderRNA *brna)
RNA_def_struct_sdna_from(srna, "FMod_Cycles", "data");
/* before */
- prop= RNA_def_property(srna, "before_mode", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "mode_before", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "before_mode");
RNA_def_property_enum_items(prop, prop_type_items);
RNA_def_property_ui_text(prop, "Before Mode", "Cycling mode to use before first keyframe");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "before_cycles", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "cycles_before", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "before_cycles");
RNA_def_property_ui_text(prop, "Before Cycles", "Maximum number of cycles to allow before first keyframe. (0 = infinite)");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
/* after */
- prop= RNA_def_property(srna, "after_mode", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "mode_after", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "after_mode");
RNA_def_property_enum_items(prop, prop_type_items);
RNA_def_property_ui_text(prop, "After Mode", "Cycling mode to use after last keyframe");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "after_cycles", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "cycles_after", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "after_cycles");
RNA_def_property_ui_text(prop, "After Cycles", "Maximum number of cycles to allow after last keyframe. (0 = infinite)");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
}
@@ -774,45 +778,45 @@ static void rna_def_fmodifier_limits(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Limits F-Modifier", "Limits the time/value ranges of the modified F-Curve");
RNA_def_struct_sdna_from(srna, "FMod_Limits", "data");
- prop= RNA_def_property(srna, "use_minimum_x", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_min_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FCM_LIMIT_XMIN);
RNA_def_property_ui_text(prop, "Minimum X", "Use the minimum X value");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "use_minimum_y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_min_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FCM_LIMIT_YMIN);
RNA_def_property_ui_text(prop, "Minimum Y", "Use the minimum Y value");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "use_maximum_x", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_max_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FCM_LIMIT_XMAX);
RNA_def_property_ui_text(prop, "Maximum X", "Use the maximum X value");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "use_maximum_y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_max_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FCM_LIMIT_YMAX);
RNA_def_property_ui_text(prop, "Maximum Y", "Use the maximum Y value");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "minimum_x", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "min_x", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "rect.xmin");
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_FModifierLimits_minx_range");
RNA_def_property_ui_text(prop, "Minimum X", "Lowest X value to allow");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "minimum_y", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "min_y", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "rect.ymin");
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_FModifierLimits_miny_range");
RNA_def_property_ui_text(prop, "Minimum Y", "Lowest Y value to allow");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "maximum_x", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "max_x", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "rect.xmax");
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_FModifierLimits_maxx_range");
RNA_def_property_ui_text(prop, "Maximum X", "Highest X value to allow");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "maximum_y", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "max_y", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "rect.ymax");
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_FModifierLimits_maxy_range");
RNA_def_property_ui_text(prop, "Maximum Y", "Highest Y value to allow");
@@ -837,14 +841,15 @@ static void rna_def_fmodifier_noise(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Noise F-Modifier", "Gives randomness to the modified F-Curve");
RNA_def_struct_sdna_from(srna, "FMod_Noise", "data");
- prop= RNA_def_property(srna, "modification", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "blend_type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "modification");
RNA_def_property_enum_items(prop, prop_modification_items);
- RNA_def_property_ui_text(prop, "Modification", "Method of modifying the existing F-Curve");
+ RNA_def_property_ui_text(prop, "Blend Type", "Method of modifying the existing F-Curve");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "size");
- RNA_def_property_ui_text(prop, "Size", "Scaling (in time) of the noise");
+ RNA_def_property_ui_text(prop, "Scale", "Scaling (in time) of the noise");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
prop= RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
@@ -876,11 +881,12 @@ static void rna_def_fmodifier_stepped(BlenderRNA *brna)
RNA_def_struct_sdna_from(srna, "FMod_Stepped", "data");
/* properties */
- prop= RNA_def_property(srna, "step_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "frame_step", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "step_size");
RNA_def_property_ui_text(prop, "Step Size", "Number of frames to hold each value");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "offset", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "frame_offset", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "offset");
RNA_def_property_ui_text(prop, "Offset", "Reference number of frames before frames get held. Use to get hold for '1-3' vs '5-7' holding patterns");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
@@ -935,20 +941,20 @@ static void rna_def_fmodifier(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Type", "F-Curve Modifier Type");
/* settings */
- prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FMODIFIER_FLAG_EXPANDED);
RNA_def_property_ui_text(prop, "Expanded", "F-Curve Modifier's panel is expanded in UI");
RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
- prop= RNA_def_property(srna, "muted", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FMODIFIER_FLAG_MUTED);
RNA_def_property_ui_text(prop, "Muted", "F-Curve Modifier will not be evaluated");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME_PROP, NULL);
RNA_def_property_ui_icon(prop, ICON_MUTE_IPO_OFF, 1);
- prop= RNA_def_property(srna, "disabled", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_valid", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", FMODIFIER_FLAG_DISABLED);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", FMODIFIER_FLAG_DISABLED);
RNA_def_property_ui_text(prop, "Disabled", "F-Curve Modifier has invalid settings and will not be evaluated");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME_PROP, NULL);
@@ -989,7 +995,7 @@ static void rna_def_drivertarget(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_editable_func(prop, "rna_DriverTarget_id_editable");
/* note: custom set function is ONLY to avoid rna setting a user for this. */
- RNA_def_property_pointer_funcs(prop, NULL, "rna_DriverTarget_id_set", "rna_DriverTarget_id_typef");
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_DriverTarget_id_set", "rna_DriverTarget_id_typef", NULL);
RNA_def_property_ui_text(prop, "ID", "ID-block that the specific property used can be found from (id_type property must be set first)");
RNA_def_property_update(prop, 0, "rna_DriverTarget_update_data");
@@ -1019,7 +1025,7 @@ static void rna_def_drivertarget(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Type", "Driver variable type");
RNA_def_property_update(prop, 0, "rna_DriverTarget_update_data");
- prop= RNA_def_property(srna, "use_local_space_transforms", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_local_space_transform", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", DTAR_FLAG_LOCALSPACE);
RNA_def_property_ui_text(prop, "Local Space", "Use transforms in Local Space (as opposed to the worldspace default)");
RNA_def_property_update(prop, 0, "rna_DriverTarget_update_data");
@@ -1135,8 +1141,8 @@ static void rna_def_channeldriver(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Show Debug Info", "Show intermediate values for the driver calculations to allow debugging of drivers");
/* State Info (for Debugging) */
- prop= RNA_def_property(srna, "invalid", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", DRIVER_FLAG_INVALID);
+ prop= RNA_def_property(srna, "is_valid", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", DRIVER_FLAG_INVALID);
RNA_def_property_ui_text(prop, "Invalid", "Driver could not be evaluated in past, so should be skipped");
@@ -1156,9 +1162,9 @@ static void rna_def_fpoint(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "F-Curve Sample", "Sample point for F-Curve");
/* Boolean values */
- prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", 1);
- RNA_def_property_ui_text(prop, "Selected", "Selection status");
+ RNA_def_property_ui_text(prop, "Select", "Selection status");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_SELECTED, NULL);
/* Vector value */
@@ -1183,29 +1189,29 @@ static void rna_def_fkeyframe(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Keyframe", "Bezier curve point with two handles defining a Keyframe on an F-Curve");
/* Boolean values */
- prop= RNA_def_property(srna, "selected_handle1", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select_left_handle", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "f1", 0);
RNA_def_property_ui_text(prop, "Handle 1 selected", "Handle 1 selection status");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_SELECTED, NULL);
- prop= RNA_def_property(srna, "selected_handle2", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select_right_handle", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "f3", 0);
RNA_def_property_ui_text(prop, "Handle 2 selected", "Handle 2 selection status");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_SELECTED, NULL);
- prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select_control_point", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "f2", 0);
- RNA_def_property_ui_text(prop, "Selected", "Control point selection status");
+ RNA_def_property_ui_text(prop, "Select", "Control point selection status");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_SELECTED, NULL);
/* Enums */
- prop= RNA_def_property(srna, "handle1_type", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "handle_left_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "h1");
RNA_def_property_enum_items(prop, beztriple_handle_type_items);
RNA_def_property_ui_text(prop, "Handle 1 Type", "Handle types");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME_PROP, NULL);
- prop= RNA_def_property(srna, "handle2_type", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "handle_right_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "h2");
RNA_def_property_enum_items(prop, beztriple_handle_type_items);
RNA_def_property_ui_text(prop, "Handle 2 Type", "Handle types");
@@ -1224,7 +1230,7 @@ static void rna_def_fkeyframe(BlenderRNA *brna)
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME_PROP, NULL);
/* Vector values */
- prop= RNA_def_property(srna, "handle1", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "handle_left", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_array(prop, 2);
RNA_def_property_float_funcs(prop, "rna_FKeyframe_handle1_get", "rna_FKeyframe_handle1_set", NULL);
RNA_def_property_ui_text(prop, "Handle 1", "Coordinates of the first handle");
@@ -1236,7 +1242,7 @@ static void rna_def_fkeyframe(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Control Point", "Coordinates of the control point");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "handle2", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "handle_right", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_array(prop, 2);
RNA_def_property_float_funcs(prop, "rna_FKeyframe_handle2_get", "rna_FKeyframe_handle2_set", NULL);
RNA_def_property_ui_text(prop, "Handle 2", "Coordinates of the second handle");
@@ -1261,7 +1267,7 @@ static void rna_def_fcurve_modifiers(BlenderRNA *brna, PropertyRNA *cprop)
/* Collection active property */
prop= RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "FModifier");
- RNA_def_property_pointer_funcs(prop, "rna_FCurve_active_modifier_get", "rna_FCurve_active_modifier_set", NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_FCurve_active_modifier_get", "rna_FCurve_active_modifier_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Active F-Curve Modifier", "Active F-Curve Modifier");
@@ -1359,7 +1365,7 @@ static void rna_def_fcurve(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "grp");
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Group", "Action Group that this F-Curve belongs to");
- RNA_def_property_pointer_funcs(prop, NULL, "rna_FCurve_group_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_FCurve_group_set", NULL, NULL);
RNA_def_property_update(prop, NC_ANIMATION, NULL);
/* Path + Array Index */
@@ -1384,35 +1390,35 @@ static void rna_def_fcurve(BlenderRNA *brna)
RNA_def_property_update(prop, NC_ANIMATION, NULL);
/* Flags */
- prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FCURVE_SELECTED);
- RNA_def_property_ui_text(prop, "Selected", "F-Curve is selected for editing");
+ RNA_def_property_ui_text(prop, "Select", "F-Curve is selected for editing");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_SELECTED, NULL);
- prop= RNA_def_property(srna, "locked", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FCURVE_PROTECTED);
- RNA_def_property_ui_text(prop, "Locked", "F-Curve's settings cannot be edited");
+ RNA_def_property_ui_text(prop, "Lock", "F-Curve's settings cannot be edited");
RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "muted", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FCURVE_MUTED);
RNA_def_property_ui_text(prop, "Muted", "F-Curve is not evaluated");
RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "auto_clamped_handles", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_handle_clamp", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FCURVE_AUTO_HANDLES);
RNA_def_property_ui_text(prop, "Auto Clamped Handles", "All auto-handles for F-Curve are clamped");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME_PROP, NULL);
- prop= RNA_def_property(srna, "visible", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", FCURVE_VISIBLE);
- RNA_def_property_ui_text(prop, "Visible", "F-Curve and its keyframes are shown in the Graph Editor graphs");
+ prop= RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", FCURVE_VISIBLE);
+ RNA_def_property_ui_text(prop, "Hide", "F-Curve and its keyframes are hidden in the Graph Editor graphs");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
-
+
/* State Info (for Debugging) */
- prop= RNA_def_property(srna, "disabled", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", FCURVE_DISABLED);
- RNA_def_property_ui_text(prop, "Disabled", "F-Curve could not be evaluated in past, so should be skipped when evaluating");
+ prop= RNA_def_property(srna, "is_valid", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", FCURVE_DISABLED);
+ RNA_def_property_ui_text(prop, "Valid", "False when F-Curve could not be evaluated in past, so should be skipped when evaluating");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME_PROP, NULL);
/* Collections */
@@ -1438,7 +1444,7 @@ static void rna_def_fcurve(BlenderRNA *brna)
parm= RNA_def_float(func, "frame", 1.0f, -FLT_MAX, FLT_MAX, "Frame", "Evaluate fcurve at given frame", -FLT_MAX, FLT_MAX);
RNA_def_property_flag(parm, PROP_REQUIRED);
/* return value */
- parm= RNA_def_float(func, "position", 0, -FLT_MAX, FLT_MAX, "Position", "Fcurve position", -FLT_MAX, FLT_MAX);
+ parm= RNA_def_float(func, "position", 0, -FLT_MAX, FLT_MAX, "Position", "FCurve position", -FLT_MAX, FLT_MAX);
RNA_def_function_return(func, parm);
func= RNA_def_function(srna, "range", "rna_fcurve_range");
diff --git a/source/blender/makesrna/intern/rna_fluidsim.c b/source/blender/makesrna/intern/rna_fluidsim.c
index 3a763961420..68060e2cfe3 100644
--- a/source/blender/makesrna/intern/rna_fluidsim.c
+++ b/source/blender/makesrna/intern/rna_fluidsim.c
@@ -105,6 +105,7 @@ static void rna_FluidSettings_update_type(Main *bmain, Scene *scene, PointerRNA
psys->part= part;
psys->pointcache= BKE_ptcache_add(&psys->ptcaches);
psys->flag |= PSYS_ENABLED;
+ sprintf(psys->name, "FluidParticles");
BLI_addtail(&ob->particlesystem,psys);
/* add modifier */
@@ -227,11 +228,11 @@ static void rna_def_fluidsim_domain(BlenderRNA *brna)
RNA_def_property_enum_items(prop, quality_items);
RNA_def_property_ui_text(prop, "Render Display Mode", "How to display the mesh for rendering");
- prop= RNA_def_property(srna, "reverse_frames", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_reverse_frames", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", OB_FLUIDSIM_REVERSE);
RNA_def_property_ui_text(prop, "Reverse Frames", "Reverse fluid frames");
- prop= RNA_def_property(srna, "path", PROP_STRING, PROP_DIRPATH);
+ prop= RNA_def_property(srna, "filepath", PROP_STRING, PROP_DIRPATH);
RNA_def_property_string_maxlength(prop, 240);
RNA_def_property_string_sdna(prop, NULL, "surfdataPath");
RNA_def_property_ui_text(prop, "Path", "Directory (and/or filename prefix) to store baked fluid simulation files in");
@@ -249,21 +250,21 @@ static void rna_def_fluidsim_domain(BlenderRNA *brna)
RNA_def_property_range(prop, -1000.1, 1000.1);
RNA_def_property_ui_text(prop, "Gravity", "Gravity in X, Y and Z direction");
- prop= RNA_def_property(srna, "override_time", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_time_override", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", OB_FLUIDSIM_OVERRIDE_TIME);
RNA_def_property_ui_text(prop, "Override Time", "Use a custom start and end time (in seconds) instead of the scene's timeline");
prop= RNA_def_property(srna, "start_time", PROP_FLOAT, PROP_TIME);
RNA_def_property_float_sdna(prop, NULL, "animStart");
RNA_def_property_range(prop, 0, 100);
- RNA_def_property_ui_text(prop, "Start Time", "Simulation time of the first blender frame");
+ RNA_def_property_ui_text(prop, "Start Time", "Simulation time of the first blender frame (in seconds)");
prop= RNA_def_property(srna, "end_time", PROP_FLOAT, PROP_TIME);
RNA_def_property_float_sdna(prop, NULL, "animEnd");
RNA_def_property_range(prop, 0, 100);
- RNA_def_property_ui_text(prop, "End Time", "Simulation time of the last blender frame");
+ RNA_def_property_ui_text(prop, "End Time", "Simulation time of the last blender frame (in seconds)");
- prop= RNA_def_property(srna, "real_world_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "simulation_scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "realsize");
RNA_def_property_range(prop, 0.001, 10);
RNA_def_property_ui_text(prop, "Real World Size", "Size of the simulation domain in metres");
@@ -299,7 +300,7 @@ static void rna_def_fluidsim_domain(BlenderRNA *brna)
rna_def_fluidsim_slip(srna);
- prop= RNA_def_property(srna, "surface_smoothing", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "surface_smooth", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "surfaceSmoothing");
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_range(prop, 0.0, 5.0);
@@ -311,7 +312,7 @@ static void rna_def_fluidsim_domain(BlenderRNA *brna)
RNA_def_property_range(prop, 0, 5);
RNA_def_property_ui_text(prop, "Surface Subdivisions", "Number of isosurface subdivisions. This is necessary for the inclusion of particles into the surface generation. Warning - can lead to longer computation times!");
- prop= RNA_def_property(srna, "generate_speed_vectors", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_speed_vectors", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "domainNovecgen", 0);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Generate Speed Vectors", "Generate speed vectors for vector blur");
@@ -347,7 +348,7 @@ static void rna_def_fluidsim_volume(StructRNA *srna)
RNA_def_property_enum_items(prop, volume_type_items);
RNA_def_property_ui_text(prop, "Volume Initialization", "Volume initialization type");
- prop= RNA_def_property(srna, "export_animated_mesh", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_animated_mesh", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "domainNovecgen", 0);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Export Animated Mesh", "Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated pos/rot/scale IPOs do not require it");
@@ -357,9 +358,9 @@ static void rna_def_fluidsim_active(StructRNA *srna)
{
PropertyRNA *prop;
- prop= RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", OB_FLUIDSIM_ACTIVE);
- RNA_def_property_ui_text(prop, "Active", "Object contributes to the fluid simulation");
+ RNA_def_property_ui_text(prop, "Enabled", "Object contributes to the fluid simulation");
}
static void rna_def_fluidsim_fluid(BlenderRNA *brna)
@@ -419,7 +420,7 @@ static void rna_def_fluidsim_inflow(BlenderRNA *brna)
RNA_def_property_range(prop, -1000.1, 1000.1);
RNA_def_property_ui_text(prop, "Inflow Velocity", "Initial velocity of fluid");
- prop= RNA_def_property(srna, "local_coordinates", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_local_coords", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_boolean_sdna(prop, NULL, "typeFlags", OB_FSINFLOW_LOCALCOORD);
RNA_def_property_ui_text(prop, "Local Coordinates", "Use local coordinates for inflow. (e.g. for rotating objects)");
@@ -446,15 +447,15 @@ static void rna_def_fluidsim_particle(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "FluidsimSettings");
RNA_def_struct_ui_text(srna, "Particle Fluid Simulation Settings", "Fluid simulation settings for objects storing fluid particles generated by the simulation");
- prop= RNA_def_property(srna, "drops", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_drops", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "typeFlags", OB_FSPART_DROP);
RNA_def_property_ui_text(prop, "Drops", "Show drop particles");
- prop= RNA_def_property(srna, "floats", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_floats", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "typeFlags", OB_FSPART_FLOAT);
RNA_def_property_ui_text(prop, "Floats", "Show floating foam particles");
- prop= RNA_def_property(srna, "tracer", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_tracer", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "typeFlags", OB_FSPART_TRACER);
RNA_def_property_ui_text(prop, "Tracer", "Show tracer particles");
@@ -468,7 +469,7 @@ static void rna_def_fluidsim_particle(BlenderRNA *brna)
RNA_def_property_range(prop, 0.0, 2.0);
RNA_def_property_ui_text(prop, "Alpha Influence", "Amount of particle alpha change, inverse of size influence: 0=off (all same alpha), 1=full. (large particles get lower alphas, smaller ones higher values)");
- prop= RNA_def_property(srna, "path", PROP_STRING, PROP_DIRPATH);
+ prop= RNA_def_property(srna, "filepath", PROP_STRING, PROP_DIRPATH);
RNA_def_property_string_maxlength(prop, 240);
RNA_def_property_string_sdna(prop, NULL, "surfdataPath");
RNA_def_property_ui_text(prop, "Path", "Directory (and/or filename prefix) to store and load particles from");
@@ -522,7 +523,7 @@ static void rna_def_fluidsim_control(BlenderRNA *brna)
RNA_def_property_range(prop, 5.0, 100.0);
RNA_def_property_ui_text(prop, "Quality", "Specifies the quality which is used for object sampling. (higher = better but slower)");
- prop= RNA_def_property(srna, "reverse_frames", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_reverse_frames", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", OB_FLUIDSIM_REVERSE);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Reverse Frames", "Reverse control object movement");
diff --git a/source/blender/makesrna/intern/rna_gpencil.c b/source/blender/makesrna/intern/rna_gpencil.c
index a503eab4ba9..c03af99ccb0 100644
--- a/source/blender/makesrna/intern/rna_gpencil.c
+++ b/source/blender/makesrna/intern/rna_gpencil.c
@@ -131,13 +131,13 @@ static void rna_def_gpencil_frame(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Frame Number", "The frame on which this sketch appears");
/* Flags */
- prop= RNA_def_property(srna, "paint_lock", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_edited", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_FRAME_PAINT); // XXX should it be editable?
RNA_def_property_ui_text(prop, "Paint Lock", "Frame is being edited (painted on)");
- prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_FRAME_SELECT);
- RNA_def_property_ui_text(prop, "Selected", "Frame is selected for editing in the DopeSheet");
+ RNA_def_property_ui_text(prop, "Select", "Frame is selected for editing in the DopeSheet");
}
static void rna_def_gpencil_layer(BlenderRNA *brna)
@@ -172,14 +172,14 @@ static void rna_def_gpencil_layer(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Color", "Color for all strokes in this layer");
RNA_def_property_update(prop, NC_SCREEN|ND_GPENCIL, NULL);
- prop= RNA_def_property(srna, "opacity", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "alpha", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "color[3]");
RNA_def_property_range(prop, 0.3, 1.0f);
RNA_def_property_ui_text(prop, "Opacity", "Layer Opacity");
RNA_def_property_update(prop, NC_SCREEN|ND_GPENCIL, NULL);
/* Line Thickness */
- prop= RNA_def_property(srna, "line_thickness", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "line_width", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "thickness");
RNA_def_property_range(prop, 1, 10);
RNA_def_property_ui_text(prop, "Thickness", "Thickness of strokes (in pixels)");
@@ -191,7 +191,7 @@ static void rna_def_gpencil_layer(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Use Onion Skinning", "Ghost frames on either side of frame");
RNA_def_property_update(prop, NC_SCREEN|ND_GPENCIL, NULL);
- prop= RNA_def_property(srna, "max_ghost_range", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "ghost_range_max", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "gstep");
RNA_def_property_range(prop, 0, 120);
RNA_def_property_ui_text(prop, "Max Ghost Range", "Maximum number of frames on either side of the active frame to show (0 = show the 'first' available sketch on either side)");
@@ -203,12 +203,12 @@ static void rna_def_gpencil_layer(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Hide", "Set layer Visibility");
RNA_def_property_update(prop, NC_SCREEN|ND_GPENCIL, NULL);
- prop= RNA_def_property(srna, "locked", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LAYER_LOCKED);
RNA_def_property_ui_text(prop, "Locked", "Protect layer from further editing and/or frame changes");
RNA_def_property_update(prop, NC_SCREEN|ND_GPENCIL, NULL);
- prop= RNA_def_property(srna, "frame_lock", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock_frame", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LAYER_FRAMELOCK);
RNA_def_property_ui_text(prop, "Frame Locked", "Lock current frame displayed by layer");
RNA_def_property_update(prop, NC_SCREEN|ND_GPENCIL, NULL);
@@ -219,9 +219,9 @@ static void rna_def_gpencil_layer(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Active", "Set active layer for editing");
RNA_def_property_update(prop, NC_SCREEN|ND_GPENCIL, NULL);
- prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LAYER_SELECT);
- RNA_def_property_ui_text(prop, "Selected", "Layer is selected for editing in the DopeSheet");
+ RNA_def_property_ui_text(prop, "Select", "Layer is selected for editing in the DopeSheet");
RNA_def_property_update(prop, NC_SCREEN|ND_GPENCIL, NULL);
// XXX keep this option?
diff --git a/source/blender/makesrna/intern/rna_group.c b/source/blender/makesrna/intern/rna_group.c
index 707662e58e0..bd1b7c96998 100644
--- a/source/blender/makesrna/intern/rna_group.c
+++ b/source/blender/makesrna/intern/rna_group.c
@@ -117,7 +117,7 @@ void RNA_def_group(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Dupli Offset", "Offset from the origin to use when instancing as DupliGroup");
RNA_def_property_ui_range(prop, -10000.0, 10000.0, 10, 4);
- prop= RNA_def_property(srna, "layer", PROP_BOOLEAN, PROP_LAYER);
+ prop= RNA_def_property(srna, "layers", PROP_BOOLEAN, PROP_LAYER);
RNA_def_property_boolean_sdna(prop, NULL, "layer", 1);
RNA_def_property_array(prop, 20);
RNA_def_property_ui_text(prop, "Dupli Layers", "Layers visible when this groups is instanced as a dupli");
diff --git a/source/blender/makesrna/intern/rna_image.c b/source/blender/makesrna/intern/rna_image.c
index 7144b409299..bd121724413 100644
--- a/source/blender/makesrna/intern/rna_image.c
+++ b/source/blender/makesrna/intern/rna_image.c
@@ -213,12 +213,6 @@ static int rna_Image_depth_get(PointerRNA *ptr)
return depth;
}
-static int rna_Image_is_image_icon(Image *me, bContext *C)
-{
- const char prefix[] = ".imageicon.";
- return strncmp(me->id.name+2, prefix, sizeof(prefix)-1) == 0;
-}
-
#else
static void rna_def_imageuser(BlenderRNA *brna)
@@ -229,23 +223,25 @@ static void rna_def_imageuser(BlenderRNA *brna)
srna= RNA_def_struct(brna, "ImageUser", NULL);
RNA_def_struct_ui_text(srna, "Image User", "Parameters defining how an Image datablock is used by another datablock");
- prop= RNA_def_property(srna, "auto_refresh", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_refresh", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", IMA_ANIM_ALWAYS);
RNA_def_property_ui_text(prop, "Auto Refresh", "Always refresh image on frame changes");
RNA_def_property_update(prop, 0, "rna_ImageUser_update");
/* animation */
- prop= RNA_def_property(srna, "cyclic", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cyclic", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "cycl", 0);
RNA_def_property_ui_text(prop, "Cyclic", "Cycle the images in the movie");
RNA_def_property_update(prop, 0, "rna_ImageUser_update");
- prop= RNA_def_property(srna, "frames", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "frame_duration", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "frames");
RNA_def_property_range(prop, 0, MAXFRAMEF);
RNA_def_property_ui_text(prop, "Frames", "Sets the number of images of a movie to use");
RNA_def_property_update(prop, 0, "rna_ImageUser_update");
- prop= RNA_def_property(srna, "offset", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "frame_offset", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "offset");
RNA_def_property_range(prop, -MAXFRAMEF, MAXFRAMEF);
RNA_def_property_ui_text(prop, "Offset", "Offsets the number of the frame to use in the animation");
RNA_def_property_update(prop, 0, "rna_ImageUser_update");
@@ -298,9 +294,6 @@ static void rna_def_image(BlenderRNA *brna)
{IMA_STD_FIELD, "ODD", 0, "Lower First", "Lower field first"},
{0, NULL, 0, NULL, NULL}};
- FunctionRNA *func;
- PropertyRNA *parm;
-
srna= RNA_def_struct(brna, "Image", "ID");
RNA_def_struct_ui_text(srna, "Image", "Image datablock referencing an external or packed image");
RNA_def_struct_ui_icon(srna, ICON_IMAGE_DATA);
@@ -342,26 +335,18 @@ static void rna_def_image(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Field Order", "Order of video fields. Select which lines are displayed first");
RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, NULL);
- /* functions */
- func= RNA_def_function(srna, "is_image_icon", "rna_Image_is_image_icon");
- RNA_def_function_ui_description(func, "Returns true if Image name is prefixed with .imageicon.");
- parm= RNA_def_pointer(func, "context", "Context", "", "");
- RNA_def_property_flag(parm, PROP_REQUIRED);
- parm= RNA_def_boolean(func, "ret", 0, "", "");
- RNA_def_function_return(func, parm);
-
/* booleans */
- prop= RNA_def_property(srna, "fields", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_fields", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", IMA_FIELDS);
RNA_def_property_ui_text(prop, "Fields", "Use fields of the image");
RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, "rna_Image_fields_update");
- prop= RNA_def_property(srna, "premultiply", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_premultiply", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", IMA_DO_PREMUL);
RNA_def_property_ui_text(prop, "Premultiply", "Convert RGB from key alpha to premultiplied alpha");
RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, "rna_Image_reload_update");
- prop= RNA_def_property(srna, "dirty", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_dirty", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_Image_dirty_get", NULL);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Dirty", "Image has changed and is not saved");
@@ -399,30 +384,30 @@ static void rna_def_image(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Display Aspect", "Display Aspect for this image, does not affect rendering");
RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, NULL);
- prop= RNA_def_property(srna, "animated", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_animation", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "tpageflag", IMA_TWINANIM);
RNA_def_property_ui_text(prop, "Animated", "Use as animated texture in the game engine");
RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, "rna_Image_animated_update");
- prop= RNA_def_property(srna, "animation_start", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "frame_start", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "twsta");
RNA_def_property_range(prop, 0, 128);
RNA_def_property_ui_text(prop, "Animation Start", "Start frame of an animated texture");
RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, "rna_Image_animated_update");
- prop= RNA_def_property(srna, "animation_end", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "frame_end", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "twend");
RNA_def_property_range(prop, 0, 128);
RNA_def_property_ui_text(prop, "Animation End", "End frame of an animated texture");
RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, "rna_Image_animated_update");
- prop= RNA_def_property(srna, "animation_speed", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "fps", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "animspeed");
RNA_def_property_range(prop, 1, 100);
RNA_def_property_ui_text(prop, "Animation Speed", "Speed of the animation in frames per second");
RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, NULL);
- prop= RNA_def_property(srna, "tiles", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_tiles", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "tpageflag", IMA_TILES);
RNA_def_property_ui_text(prop, "Tiles", "Use of tilemode for faces (default shift-LMB to pick the tile for selected faces)");
RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, NULL);
@@ -439,12 +424,12 @@ static void rna_def_image(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Tiles Y", "Degree of repetition in the Y direction");
RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, NULL);
- prop= RNA_def_property(srna, "clamp_x", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_clamp_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "tpageflag", IMA_CLAMP_U);
RNA_def_property_ui_text(prop, "Clamp X", "Disable texture repeating horizontally");
RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, NULL);
- prop= RNA_def_property(srna, "clamp_y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_clamp_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "tpageflag", IMA_CLAMP_V);
RNA_def_property_ui_text(prop, "Clamp Y", "Disable texture repeating vertically");
RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, NULL);
diff --git a/source/blender/makesrna/intern/rna_image_api.c b/source/blender/makesrna/intern/rna_image_api.c
index 263603cbd36..e53d4a3f137 100644
--- a/source/blender/makesrna/intern/rna_image_api.c
+++ b/source/blender/makesrna/intern/rna_image_api.c
@@ -77,6 +77,8 @@ static void rna_Image_save_render(Image *image, bContext *C, ReportList *reports
if (!BKE_write_ibuf(NULL, ibuf, path, scene->r.imtype, scene->r.subimtype, scene->r.quality)) {
BKE_reportf(reports, RPT_ERROR, "Couldn't write image: %s", path);
}
+
+ BKE_image_release_ibuf(image, lock);
} else {
BKE_reportf(reports, RPT_ERROR, "Scene not in context, couldn't get save parameters");
}
@@ -153,10 +155,12 @@ static int rna_Image_gl_load(Image *image, ReportList *reports, int filter, int
error = (int)gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, ibuf->x, ibuf->y, GL_RGBA, GL_UNSIGNED_INT, ibuf->rect);
if (!error) {
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, image->tpageflag & IMA_CLAMP_U ? GL_CLAMP : GL_REPEAT);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, image->tpageflag & IMA_CLAMP_V ? GL_CLAMP : GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (GLint)filter);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (GLint)mag);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, ibuf->x, ibuf->y, 0, GL_RGBA, GL_UNSIGNED_INT, ibuf->rect);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, ibuf->x, ibuf->y, 0, GL_RGBA, GL_UNSIGNED_BYTE, ibuf->rect);
error = (int)glGetError();
}
diff --git a/source/blender/makesrna/intern/rna_internal.h b/source/blender/makesrna/intern/rna_internal.h
index 806a22dd3b8..669fc5d3871 100644
--- a/source/blender/makesrna/intern/rna_internal.h
+++ b/source/blender/makesrna/intern/rna_internal.h
@@ -189,9 +189,9 @@ void rna_ID_name_get(struct PointerRNA *ptr, char *value);
int rna_ID_name_length(struct PointerRNA *ptr);
void rna_ID_name_set(struct PointerRNA *ptr, const char *value);
struct StructRNA *rna_ID_refine(struct PointerRNA *ptr);
-struct IDProperty *rna_ID_idproperties(struct PointerRNA *ptr, int create);
+struct IDProperty *rna_ID_idprops(struct PointerRNA *ptr, int create);
void rna_ID_fake_user_set(struct PointerRNA *ptr, int value);
-struct IDProperty *rna_IDPropertyGroup_idproperties(struct PointerRNA *ptr, int create);
+struct IDProperty *rna_IDPropertyGroup_idprops(struct PointerRNA *ptr, int create);
void rna_IDPropertyGroup_unregister(const struct bContext *C, struct StructRNA *type);
struct StructRNA *rna_IDPropertyGroup_register(const struct bContext *C, struct ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free);
struct StructRNA* rna_IDPropertyGroup_refine(struct PointerRNA *ptr);
@@ -206,11 +206,18 @@ PointerRNA rna_object_shapekey_index_get(struct ID *id, int value);
int rna_object_shapekey_index_set(struct ID *id, PointerRNA value, int current);
/* named internal so as not to conflict with obj.update() rna func */
-void rna_Object_internal_update(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr);
void rna_Object_internal_update_data(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr);
void rna_Mesh_update_draw(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr);
void rna_TextureSlot_update(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr);
+/* basic poll functions for object types */
+int rna_Armature_object_poll(struct PointerRNA *ptr, struct PointerRNA value);
+int rna_Camera_object_poll(struct PointerRNA *ptr, struct PointerRNA value);
+int rna_Curve_object_poll(struct PointerRNA *ptr, struct PointerRNA value);
+int rna_Lattice_object_poll(struct PointerRNA *ptr, struct PointerRNA value);
+int rna_Mesh_object_poll(struct PointerRNA *ptr, struct PointerRNA value);
+
+
char *rna_TextureSlot_path(struct PointerRNA *ptr);
/* API functions */
diff --git a/source/blender/makesrna/intern/rna_internal_types.h b/source/blender/makesrna/intern/rna_internal_types.h
index 7737d6094bc..216533a8708 100644
--- a/source/blender/makesrna/intern/rna_internal_types.h
+++ b/source/blender/makesrna/intern/rna_internal_types.h
@@ -87,6 +87,7 @@ typedef EnumPropertyItem *(*PropEnumItemFunc)(struct bContext *C, struct Pointer
typedef PointerRNA (*PropPointerGetFunc)(struct PointerRNA *ptr);
typedef StructRNA* (*PropPointerTypeFunc)(struct PointerRNA *ptr);
typedef void (*PropPointerSetFunc)(struct PointerRNA *ptr, const PointerRNA value);
+typedef int (*PropPointerPollFunc)(struct PointerRNA *ptr, const PointerRNA value);
typedef void (*PropCollectionBeginFunc)(struct CollectionPropertyIterator *iter, struct PointerRNA *ptr);
typedef void (*PropCollectionNextFunc)(struct CollectionPropertyIterator *iter);
typedef void (*PropCollectionEndFunc)(struct CollectionPropertyIterator *iter);
@@ -257,6 +258,7 @@ typedef struct PointerPropertyRNA {
PropPointerGetFunc get;
PropPointerSetFunc set;
PropPointerTypeFunc typef;
+ PropPointerPollFunc poll; /* unlike operators, 'set' can still run if poll fails, used for filtering display */
struct StructRNA *type;
} PointerPropertyRNA;
diff --git a/source/blender/makesrna/intern/rna_key.c b/source/blender/makesrna/intern/rna_key.c
index 7e9aebeffa4..970c825d30b 100644
--- a/source/blender/makesrna/intern/rna_key.c
+++ b/source/blender/makesrna/intern/rna_key.c
@@ -363,13 +363,13 @@ static void rna_def_keydata(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Location", "");
RNA_def_property_update(prop, 0, "rna_Key_update_data");
- prop= RNA_def_property(srna, "handle_1_co", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "handle_left", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_array(prop, 3);
RNA_def_property_float_funcs(prop, "rna_ShapeKeyBezierPoint_handle_1_co_get", "rna_ShapeKeyBezierPoint_handle_1_co_set", NULL);
RNA_def_property_ui_text(prop, "Handle 1 Location", "");
RNA_def_property_update(prop, 0, "rna_Key_update_data");
- prop= RNA_def_property(srna, "handle_2_co", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "handle_right", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_array(prop, 3);
RNA_def_property_float_funcs(prop, "rna_ShapeKeyBezierPoint_handle_2_co_get", "rna_ShapeKeyBezierPoint_handle_2_co_set", NULL);
RNA_def_property_ui_text(prop, "Handle 2 Location", "");
@@ -433,7 +433,7 @@ static void rna_def_keyblock(BlenderRNA *brna)
prop= RNA_def_property(srna, "relative_key", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "ShapeKey");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_pointer_funcs(prop, "rna_ShapeKey_relative_key_get", "rna_ShapeKey_relative_key_set", NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_ShapeKey_relative_key_get", "rna_ShapeKey_relative_key_set", NULL, NULL);
RNA_def_property_ui_text(prop, "Relative Key", "Shape used as a relative key");
RNA_def_property_update(prop, 0, "rna_Key_update_data");
@@ -488,7 +488,7 @@ static void rna_def_key(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "from");
RNA_def_property_ui_text(prop, "User", "Datablock using these shape keys");
- prop= RNA_def_property(srna, "relative", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_relative", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "type", KEY_RELATIVE);
RNA_def_property_ui_text(prop, "Relative", "Makes shape keys relative");
RNA_def_property_update(prop, 0, "rna_Key_update_data");
diff --git a/source/blender/makesrna/intern/rna_lamp.c b/source/blender/makesrna/intern/rna_lamp.c
index 769d73d9f79..c6660450914 100644
--- a/source/blender/makesrna/intern/rna_lamp.c
+++ b/source/blender/makesrna/intern/rna_lamp.c
@@ -159,7 +159,7 @@ static void rna_def_lamp_mtex(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "MTex");
RNA_def_struct_ui_text(srna, "Lamp Texture Slot", "Texture slot for textures in a Lamp datablock");
- prop= RNA_def_property(srna, "texture_coordinates", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "texture_coords", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "texco");
RNA_def_property_enum_items(prop, prop_texture_coordinates_items);
RNA_def_property_ui_text(prop, "Texture Coordinates", "");
@@ -170,12 +170,12 @@ static void rna_def_lamp_mtex(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Object", "Object to use for mapping with Object texture coordinates");
- prop= RNA_def_property(srna, "map_color", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_color", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", LAMAP_COL);
RNA_def_property_ui_text(prop, "Color", "Lets the texture affect the basic color of the lamp");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
- prop= RNA_def_property(srna, "map_shadow", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_shadow", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", LAMAP_SHAD);
RNA_def_property_ui_text(prop, "Shadow", "Lets the texture affect the shadow color of the lamp");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
@@ -362,22 +362,22 @@ static void rna_def_lamp(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Color", "Light color");
RNA_def_property_update(prop, 0, "rna_Lamp_draw_update");
- prop= RNA_def_property(srna, "layer", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_own_layer", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_LAYER);
RNA_def_property_ui_text(prop, "Layer", "Illuminates objects only on the same layer the lamp is on");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
- prop= RNA_def_property(srna, "negative", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_negative", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_NEG);
RNA_def_property_ui_text(prop, "Negative", "Lamp casts negative light");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
- prop= RNA_def_property(srna, "specular", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_specular", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "mode", LA_NO_SPEC);
RNA_def_property_ui_text(prop, "Specular", "Lamp creates specular highlights");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
- prop= RNA_def_property(srna, "diffuse", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_diffuse", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "mode", LA_NO_DIFF);
RNA_def_property_ui_text(prop, "Diffuse", "Lamp does diffuse shading");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
@@ -412,7 +412,7 @@ static void rna_def_lamp_falloff(StructRNA *srna)
RNA_def_property_ui_text(prop, "Falloff Curve", "Custom Lamp Falloff Curve");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
- prop= RNA_def_property(srna, "sphere", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_sphere", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_SPHERE);
RNA_def_property_ui_text(prop, "Sphere", "Sets light intensity to zero beyond lamp distance");
RNA_def_property_update(prop, 0, "rna_Lamp_draw_update");
@@ -468,12 +468,12 @@ static void rna_def_lamp_shadow(StructRNA *srna, int spot, int area)
RNA_def_property_ui_text(prop, "Shadow Color", "Color of shadows cast by the lamp");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
- prop= RNA_def_property(srna, "only_shadow", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_only_shadow", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_ONLYSHADOW);
RNA_def_property_ui_text(prop, "Only Shadow", "Causes light to cast shadows only without illuminating objects");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
- prop= RNA_def_property(srna, "shadow_ray_sampling_method", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "shadow_ray_sample_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "ray_samp_method");
RNA_def_property_enum_items(prop, (area)? prop_spot_ray_sampling_method_items: prop_ray_sampling_method_items);
RNA_def_property_ui_text(prop, "Shadow Ray Sampling Method", "Method for generating shadow samples: Adaptive QMC is fastest, Constant QMC is less noisy but slower");
@@ -505,7 +505,7 @@ static void rna_def_lamp_shadow(StructRNA *srna, int spot, int area)
RNA_def_property_ui_text(prop, "Shadow Soft Size", "Light size for ray shadow sampling (Raytraced shadows)");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
- prop= RNA_def_property(srna, "shadow_layer", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_shadow_layer", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_LAYER_SHADOW);
RNA_def_property_ui_text(prop, "Shadow Layer", "Causes only objects on the same layer to cast shadows");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
@@ -541,17 +541,17 @@ static void rna_def_area_lamp(BlenderRNA *brna)
rna_def_lamp_shadow(srna, 0, 1);
- prop= RNA_def_property(srna, "umbra", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_umbra", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ray_samp_type", LA_SAMP_UMBRA);
RNA_def_property_ui_text(prop, "Umbra", "Emphasize parts that are fully shadowed (Constant Jittered sampling)");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
- prop= RNA_def_property(srna, "dither", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_dither", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ray_samp_type", LA_SAMP_DITHER);
RNA_def_property_ui_text(prop, "Dither", "Use 2x2 dithering for sampling (Constant Jittered sampling)");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
- prop= RNA_def_property(srna, "jitter", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_jitter", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ray_samp_type", LA_SAMP_JITTER);
RNA_def_property_ui_text(prop, "Jitter", "Use noise for sampling (Constant Jittered sampling)");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
@@ -613,12 +613,12 @@ static void rna_def_spot_lamp(BlenderRNA *brna)
rna_def_lamp_falloff(srna);
rna_def_lamp_shadow(srna, 1, 0);
- prop= RNA_def_property(srna, "square", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_square", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_SQUARE);
RNA_def_property_ui_text(prop, "Square", "Casts a square spot light shape");
RNA_def_property_update(prop, 0, "rna_Lamp_draw_update");
- prop= RNA_def_property(srna, "halo", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_halo", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_HALO);
RNA_def_property_ui_text(prop, "Halo", "Renders spotlight with a volumetric halo (Buffer Shadows)");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
@@ -708,12 +708,12 @@ static void rna_def_spot_lamp(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Shadow Buffer Type", "Type of shadow buffer");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
- prop= RNA_def_property(srna, "auto_clip_start", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_clip_start", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "bufflag", LA_SHADBUF_AUTO_START);
RNA_def_property_ui_text(prop, "Autoclip Start", "Automatic calculation of clipping-start, based on visible vertices");
RNA_def_property_update(prop, 0, "rna_Lamp_draw_update");
- prop= RNA_def_property(srna, "auto_clip_end", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_clip_end", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "bufflag", LA_SHADBUF_AUTO_END);
RNA_def_property_ui_text(prop, "Autoclip End", "Automatic calculation of clipping-end, based on visible vertices");
RNA_def_property_update(prop, 0, "rna_Lamp_draw_update");
@@ -741,7 +741,7 @@ static void rna_def_sun_lamp(BlenderRNA *brna)
prop= RNA_def_property(srna, "sky", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "LampSkySettings");
- RNA_def_property_pointer_funcs(prop, "rna_Lamp_sky_settings_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Lamp_sky_settings_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Sky Settings", "Sky related settings for sun lamps");
rna_def_lamp_sky_settings(brna);
diff --git a/source/blender/makesrna/intern/rna_lattice.c b/source/blender/makesrna/intern/rna_lattice.c
index c5132844016..f27a1ef86c0 100644
--- a/source/blender/makesrna/intern/rna_lattice.c
+++ b/source/blender/makesrna/intern/rna_lattice.c
@@ -79,8 +79,8 @@ static void rna_Lattice_points_begin(CollectionPropertyIterator *iter, PointerRN
Lattice *lt= (Lattice*)ptr->data;
int tot= lt->pntsu*lt->pntsv*lt->pntsw;
- if(lt->editlatt && lt->editlatt->def)
- rna_iterator_array_begin(iter, (void*)lt->editlatt->def, sizeof(BPoint), tot, 0, NULL);
+ if(lt->editlatt && lt->editlatt->latt->def)
+ rna_iterator_array_begin(iter, (void*)lt->editlatt->latt->def, sizeof(BPoint), tot, 0, NULL);
else if(lt->def)
rna_iterator_array_begin(iter, (void*)lt->def, sizeof(BPoint), tot, 0, NULL);
else
@@ -111,7 +111,7 @@ static void rna_Lattice_update_size(Main *bmain, Scene *scene, PointerRNA *ptr)
if(ob->data == lt) {
resizelattice(lt, newu, newv, neww, ob);
if(lt->editlatt)
- resizelattice(lt->editlatt, newu, newv, neww, ob);
+ resizelattice(lt->editlatt->latt, newu, newv, neww, ob);
break;
}
}
@@ -120,13 +120,13 @@ static void rna_Lattice_update_size(Main *bmain, Scene *scene, PointerRNA *ptr)
if(!ob) {
resizelattice(lt, newu, newv, neww, NULL);
if(lt->editlatt)
- resizelattice(lt->editlatt, newu, newv, neww, NULL);
+ resizelattice(lt->editlatt->latt, newu, newv, neww, NULL);
}
rna_Lattice_update_data(bmain, scene, ptr);
}
-static void rna_Lattice_outside_set(PointerRNA *ptr, int value)
+static void rna_Lattice_use_outside_set(PointerRNA *ptr, int value)
{
Lattice *lt= ptr->data;
@@ -136,26 +136,39 @@ static void rna_Lattice_outside_set(PointerRNA *ptr, int value)
outside_lattice(lt);
if(lt->editlatt) {
- if(value) lt->editlatt->flag |= LT_OUTSIDE;
- else lt->editlatt->flag &= ~LT_OUTSIDE;
+ if(value) lt->editlatt->latt->flag |= LT_OUTSIDE;
+ else lt->editlatt->latt->flag &= ~LT_OUTSIDE;
- outside_lattice(lt->editlatt);
+ outside_lattice(lt->editlatt->latt);
}
}
+static int rna_Lattice_size_editable(PointerRNA *ptr)
+{
+ Lattice *lt= (Lattice*)ptr->data;
+
+ return lt->key == NULL;
+}
+
static void rna_Lattice_points_u_set(PointerRNA *ptr, int value)
{
- ((Lattice*)ptr->data)->opntsu= CLAMPIS(value, 1, 64);
+ Lattice *lt= (Lattice*)ptr->data;
+
+ lt->opntsu= CLAMPIS(value, 1, 64);
}
static void rna_Lattice_points_v_set(PointerRNA *ptr, int value)
{
- ((Lattice*)ptr->data)->opntsv= CLAMPIS(value, 1, 64);
+ Lattice *lt= (Lattice*)ptr->data;
+
+ lt->opntsv= CLAMPIS(value, 1, 64);
}
static void rna_Lattice_points_w_set(PointerRNA *ptr, int value)
{
- ((Lattice*)ptr->data)->opntsw= CLAMPIS(value, 1, 64);
+ Lattice *lt= (Lattice*)ptr->data;
+
+ lt->opntsw= CLAMPIS(value, 1, 64);
}
static void rna_Lattice_vg_name_set(PointerRNA *ptr, const char *value)
@@ -164,7 +177,7 @@ static void rna_Lattice_vg_name_set(PointerRNA *ptr, const char *value)
strcpy(lt->vgroup, value);
if(lt->editlatt)
- strcpy(lt->editlatt->vgroup, value);
+ strcpy(lt->editlatt->latt->vgroup, value);
}
@@ -185,7 +198,7 @@ static void rna_def_latticepoint(BlenderRNA *brna)
RNA_def_property_float_funcs(prop, "rna_LatticePoint_co_get", NULL, NULL);
RNA_def_property_ui_text(prop, "Location", "");
- prop= RNA_def_property(srna, "deformed_co", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "co_deform", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_float_sdna(prop, NULL, "vec");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Deformed Location", "");
@@ -216,22 +229,25 @@ static void rna_def_lattice(BlenderRNA *brna)
RNA_def_property_int_sdna(prop, NULL, "pntsu");
RNA_def_property_int_funcs(prop, NULL, "rna_Lattice_points_u_set", NULL);
RNA_def_property_range(prop, 1, 64);
- RNA_def_property_ui_text(prop, "U", "Points in U direction");
+ RNA_def_property_ui_text(prop, "U", "Points in U direction (can't be changed when there are shape keys)");
RNA_def_property_update(prop, 0, "rna_Lattice_update_size");
+ RNA_def_property_editable_func(prop, "rna_Lattice_size_editable");
prop= RNA_def_property(srna, "points_v", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "pntsv");
RNA_def_property_int_funcs(prop, NULL, "rna_Lattice_points_v_set", NULL);
RNA_def_property_range(prop, 1, 64);
- RNA_def_property_ui_text(prop, "V", "Points in V direction");
+ RNA_def_property_ui_text(prop, "V", "Points in V direction (can't be changed when there are shape keys)");
RNA_def_property_update(prop, 0, "rna_Lattice_update_size");
+ RNA_def_property_editable_func(prop, "rna_Lattice_size_editable");
prop= RNA_def_property(srna, "points_w", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "pntsw");
RNA_def_property_int_funcs(prop, NULL, "rna_Lattice_points_w_set", NULL);
RNA_def_property_range(prop, 1, 64);
- RNA_def_property_ui_text(prop, "W", "Points in W direction");
+ RNA_def_property_ui_text(prop, "W", "Points in W direction (can't be changed when there are shape keys)");
RNA_def_property_update(prop, 0, "rna_Lattice_update_size");
+ RNA_def_property_editable_func(prop, "rna_Lattice_size_editable");
prop= RNA_def_property(srna, "interpolation_type_u", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "typeu");
@@ -251,9 +267,9 @@ static void rna_def_lattice(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Interpolation Type W", "");
RNA_def_property_update(prop, 0, "rna_Lattice_update_data");
- prop= RNA_def_property(srna, "outside", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_outside", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LT_OUTSIDE);
- RNA_def_property_boolean_funcs(prop, NULL, "rna_Lattice_outside_set");
+ RNA_def_property_boolean_funcs(prop, NULL, "rna_Lattice_use_outside_set");
RNA_def_property_ui_text(prop, "Outside", "Only draw, and take into account, the outer vertices");
RNA_def_property_update(prop, 0, "rna_Lattice_update_data");
diff --git a/source/blender/makesrna/intern/rna_main.c b/source/blender/makesrna/intern/rna_main.c
index 052c9fb3453..6e44b02834e 100644
--- a/source/blender/makesrna/intern/rna_main.c
+++ b/source/blender/makesrna/intern/rna_main.c
@@ -50,9 +50,9 @@ static void rna_Main_debug_set(PointerRNA *ptr, const int value)
G.f &= ~G_DEBUG;
}
-static int rna_Main_fileissaved_get(PointerRNA *ptr)
+static int rna_Main_is_dirty_get(PointerRNA *ptr)
{
- return G.relbase_valid;
+ return !G.relbase_valid;
}
static void rna_Main_filepath_get(PointerRNA *ptr, char *value)
@@ -299,7 +299,7 @@ void RNA_def_main(BlenderRNA *brna)
{"armatures", "Armature", "rna_Main_armature_begin", "Armatures", "Armature datablocks.", RNA_def_main_armatures},
{"actions", "Action", "rna_Main_action_begin", "Actions", "Action datablocks.", RNA_def_main_actions},
{"particles", "ParticleSettings", "rna_Main_particle_begin", "Particles", "Particle datablocks.", RNA_def_main_particles},
- {"gpencil", "GreasePencil", "rna_Main_gpencil_begin", "Grease Pencil", "Grease Pencil datablocks.", RNA_def_main_gpencil},
+ {"grease_pencil", "GreasePencil", "rna_Main_gpencil_begin", "Grease Pencil", "Grease Pencil datablocks.", RNA_def_main_gpencil},
{NULL, NULL, NULL, NULL, NULL, NULL}};
int i;
@@ -314,9 +314,9 @@ void RNA_def_main(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Filename", "Path to the .blend file");
- prop= RNA_def_property(srna, "file_is_saved", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_dirty", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- RNA_def_property_boolean_funcs(prop, "rna_Main_fileissaved_get", NULL);
+ RNA_def_property_boolean_funcs(prop, "rna_Main_is_dirty_get", NULL);
RNA_def_property_ui_text(prop, "File is Saved", "Has the current session been saved to disk as a .blend file");
prop= RNA_def_property(srna, "debug", PROP_BOOLEAN, PROP_NONE);
@@ -345,7 +345,7 @@ void RNA_def_main(BlenderRNA *brna)
prop= RNA_def_property(srna, "test", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Test");
- RNA_def_property_pointer_funcs(prop, "rna_Test_test_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Test_test_get", NULL, NULL, NULL);
RNA_define_verify_sdna(1);
diff --git a/source/blender/makesrna/intern/rna_material.c b/source/blender/makesrna/intern/rna_material.c
index 1c790898ef2..46a89ccce40 100644
--- a/source/blender/makesrna/intern/rna_material.c
+++ b/source/blender/makesrna/intern/rna_material.c
@@ -186,7 +186,7 @@ static void rna_MaterialStrand_end_size_range(PointerRNA *ptr, float *min, float
}
}
-static int rna_MaterialTextureSlot_enabled_get(PointerRNA *ptr)
+static int rna_MaterialTextureSlot_use_get(PointerRNA *ptr)
{
Material *ma= (Material*)ptr->id.data;
MTex *mtex= (MTex*)ptr->data;
@@ -199,7 +199,7 @@ static int rna_MaterialTextureSlot_enabled_get(PointerRNA *ptr)
return 0;
}
-static void rna_MaterialTextureSlot_enabled_set(PointerRNA *ptr, int value)
+static void rna_MaterialTextureSlot_use_set(PointerRNA *ptr, int value)
{
Material *ma= (Material*)ptr->id.data;
MTex *mtex= (MTex*)ptr->data;
@@ -323,7 +323,7 @@ static void rna_def_material_mtex(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "MTex");
RNA_def_struct_ui_text(srna, "Material Texture Slot", "Texture slot for textures in a Material datablock");
- prop= RNA_def_property(srna, "texture_coordinates", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "texture_coords", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "texco");
RNA_def_property_enum_items(prop, prop_texture_coordinates_items);
RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Material_texture_coordinates_itemf");
@@ -342,99 +342,99 @@ static void rna_def_material_mtex(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "UV Layer", "UV layer to use for mapping with UV texture coordinates");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "from_dupli", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_from_dupli", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "texflag", MTEX_DUPLI_MAPTO);
RNA_def_property_ui_text(prop, "From Dupli", "Dupli's instanced from verts, faces or particles, inherit texture coordinate from their parent");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "from_original", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_from_original", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "texflag", MTEX_OB_DUPLI_ORIG);
RNA_def_property_ui_text(prop, "From Original", "Dupli's derive their object coordinates from the original objects transformation");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_colordiff", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_color_diffuse", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_COL);
RNA_def_property_ui_text(prop, "Diffuse Color", "Causes the texture to affect basic color of the material");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_normal", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_normal", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_NORM);
RNA_def_property_ui_text(prop, "Normal", "Causes the texture to affect the rendered normal");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_colorspec", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_color_spec", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_COLSPEC);
RNA_def_property_ui_text(prop, "Specular Color", "Causes the texture to affect the specularity color");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_mirror", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_mirror", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_COLMIR);
RNA_def_property_ui_text(prop, "Mirror", "Causes the texture to affect the mirror color");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_diffuse", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_diffuse", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_REF);
RNA_def_property_ui_text(prop, "Diffuse", "Causes the texture to affect the value of the materials diffuse reflectivity");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_specular", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_specular", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_SPEC);
RNA_def_property_ui_text(prop, "Specular", "Causes the texture to affect the value of specular reflectivity");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_ambient", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_ambient", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_AMB);
RNA_def_property_ui_text(prop, "Ambient", "Causes the texture to affect the value of ambient");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_hardness", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_hardness", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_HAR);
RNA_def_property_ui_text(prop, "Hardness", "Causes the texture to affect the hardness value");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_raymir", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_raymir", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_RAYMIRR);
RNA_def_property_ui_text(prop, "Ray-Mirror", "Causes the texture to affect the ray-mirror value");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_alpha", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_alpha", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_ALPHA);
RNA_def_property_ui_text(prop, "Alpha", "Causes the texture to affect the alpha value");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_emit", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_emit", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_EMIT);
RNA_def_property_ui_text(prop, "Emit", "Causes the texture to affect the emit value");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_translucency", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_translucency", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_TRANSLU);
RNA_def_property_ui_text(prop, "Translucency", "Causes the texture to affect the translucency value");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_displacement", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_displacement", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_DISPLACE);
RNA_def_property_ui_text(prop, "Displacement", "Let the texture displace the surface");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_warp", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_warp", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_WARP);
RNA_def_property_ui_text(prop, "Warp", "Let the texture warp texture coordinates of next channels");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "x_mapping", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "mapping_x", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "projx");
RNA_def_property_enum_items(prop, prop_x_mapping_items);
RNA_def_property_ui_text(prop, "X Mapping", "");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "y_mapping", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "mapping_y", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "projy");
RNA_def_property_enum_items(prop, prop_y_mapping_items);
RNA_def_property_ui_text(prop, "Y Mapping", "");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "z_mapping", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "mapping_z", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "projz");
RNA_def_property_enum_items(prop, prop_z_mapping_items);
RNA_def_property_ui_text(prop, "Z Mapping", "");
@@ -469,13 +469,13 @@ static void rna_def_material_mtex(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Warp Factor", "Amount texture affects texture coordinates of next channels");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "colorspec_factor", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "specular_color_factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "colspecfac");
RNA_def_property_ui_range(prop, 0, 1, 10, 3);
RNA_def_property_ui_text(prop, "Specular Color Factor", "Amount texture affects specular color");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "colordiff_factor", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "diffuse_color_factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "colfac");
RNA_def_property_ui_range(prop, 0, 1, 10, 3);
RNA_def_property_ui_text(prop, "Diffuse Color Factor", "Amount texture affects diffuse color");
@@ -536,54 +536,54 @@ static void rna_def_material_mtex(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Material_update");
/* volume material */
- prop= RNA_def_property(srna, "map_coloremission", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_color_emission", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_EMISSION_COL);
RNA_def_property_ui_text(prop, "Emission Color", "Causes the texture to affect the color of emission");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_colorreflection", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_color_reflection", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_REFLECTION_COL);
RNA_def_property_ui_text(prop, "Reflection Color", "Causes the texture to affect the color of scattered light");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_colortransmission", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_color_transmission", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_TRANSMISSION_COL);
RNA_def_property_ui_text(prop, "Transmission Color", "Causes the texture to affect the result color after other light has been scattered/absorbed");
RNA_def_property_update(prop, NC_TEXTURE, NULL);
- prop= RNA_def_property(srna, "map_density", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_density", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_DENSITY);
RNA_def_property_ui_text(prop, "Density", "Causes the texture to affect the volume's density");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_emission", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_emission", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_EMISSION);
RNA_def_property_ui_text(prop, "Emission", "Causes the texture to affect the volume's emission");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_scattering", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_scatter", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_SCATTERING);
RNA_def_property_ui_text(prop, "Scattering", "Causes the texture to affect the volume's scattering");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_reflection", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_reflect", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_REFLECTION);
RNA_def_property_ui_text(prop, "Reflection", "Causes the texture to affect the reflected light's brightness");
RNA_def_property_update(prop, NC_TEXTURE, NULL);
- prop= RNA_def_property(srna, "coloremission_factor", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "color_emission_factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "colemitfac");
RNA_def_property_ui_range(prop, 0, 1, 10, 3);
RNA_def_property_ui_text(prop, "Emission Color Factor", "Amount texture affects emission color");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "colorreflection_factor", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "reflection_color_factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "colreflfac");
RNA_def_property_ui_range(prop, 0, 1, 10, 3);
RNA_def_property_ui_text(prop, "Reflection Color Factor", "Amount texture affects color of out-scattered light");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "colortransmission_factor", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "transmission_color_factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "coltransfac");
RNA_def_property_ui_range(prop, 0, 1, 10, 3);
RNA_def_property_ui_text(prop, "Transmission Color Factor", "Amount texture affects result color after light has been scattered/absorbed");
@@ -615,14 +615,14 @@ static void rna_def_material_mtex(BlenderRNA *brna)
/* end volume material */
- prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_funcs(prop, "rna_MaterialTextureSlot_enabled_get", "rna_MaterialTextureSlot_enabled_set");
+ prop= RNA_def_property(srna, "use", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop, "rna_MaterialTextureSlot_use_get", "rna_MaterialTextureSlot_use_set");
RNA_def_property_ui_text(prop, "Enabled", "Enable this material texture slot");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "new_bump", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "texflag", MTEX_NEW_BUMP);
- RNA_def_property_ui_text(prop, "New Bump", "Use new, corrected bump mapping code (backwards compatibility option)");
+ prop= RNA_def_property(srna, "use_old_bump", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "texflag", MTEX_NEW_BUMP);
+ RNA_def_property_ui_text(prop, "Old Bump", "Use old bump mapping (backwards compatibility option)");
RNA_def_property_update(prop, 0, "rna_Material_update");
}
@@ -823,7 +823,7 @@ static void rna_def_material_raymirror(BlenderRNA *brna)
RNA_def_struct_nested(brna, srna, "Material");
RNA_def_struct_ui_text(srna, "Material Raytrace Mirror", "Raytraced reflection settings for a Material datablock");
- prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_RAYMIRROR); /* use bitflags */
RNA_def_property_ui_text(prop, "Enabled", "Enable raytraced reflections");
RNA_def_property_update(prop, 0, "rna_Material_update");
@@ -947,7 +947,7 @@ static void rna_def_material_raytra(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Filter", "Amount to blend in the material's diffuse color in raytraced transparency (simulating absorption)");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "limit", PROP_FLOAT, PROP_DISTANCE);
+ prop= RNA_def_property(srna, "depth_max", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "tx_limit");
RNA_def_property_range(prop, 0.0f, 100.0f);
RNA_def_property_ui_text(prop, "Limit", "Maximum depth for light to travel through the transparent material before becoming fully filtered (0.0 is disabled)");
@@ -984,7 +984,7 @@ static void rna_def_material_volume(BlenderRNA *brna)
RNA_def_struct_nested(brna, srna, "Material");
RNA_def_struct_ui_text(srna, "Material Volume", "Volume rendering settings for a Material datablock");
- prop= RNA_def_property(srna, "step_calculation", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "step_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "stepsize_type");
RNA_def_property_enum_items(prop, prop_stepsize_items);
RNA_def_property_ui_text(prop, "Step Calculation", "Method of calculating the steps through the volume");
@@ -997,18 +997,18 @@ static void rna_def_material_volume(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Step Size", "Distance between subsequent volume depth samples");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "lighting_mode", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "light_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "shade_type");
RNA_def_property_enum_items(prop, prop_lighting_items);
RNA_def_property_ui_text(prop, "Lighting Mode", "Method of shading, attenuating, and scattering light through the volume");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "external_shadows", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_external_shadows", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "shadeflag", MA_VOL_RECV_EXT_SHADOW); /* use bitflags */
RNA_def_property_ui_text(prop, "External Shadows", "Receive shadows from sources outside the volume (temporary)");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "light_cache", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_light_cache", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "shadeflag", MA_VOL_PRECACHESHADING); /* use bitflags */
RNA_def_property_ui_text(prop, "Light Cache", "Pre-calculate the shading information into a voxel grid, speeds up shading at slightly less accuracy");
RNA_def_property_update(prop, 0, "rna_Material_update");
@@ -1038,7 +1038,7 @@ static void rna_def_material_volume(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Intensity", "Multiplier for multiple scattered light energy");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "depth_cutoff", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "depth_threshold", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "depth_cutoff");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Depth Cutoff", "Stop ray marching early if transmission drops below this luminance - higher values give speedups in dense volumes at the expense of accuracy");
@@ -1132,19 +1132,19 @@ static void rna_def_material_halo(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Add", "Sets the strength of the add effect");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "rings", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "ring_count", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "ringc");
RNA_def_property_range(prop, 0, 24);
RNA_def_property_ui_text(prop, "Rings", "Sets the number of rings rendered over the halo");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "line_number", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "line_count", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "linec");
RNA_def_property_range(prop, 0, 250);
RNA_def_property_ui_text(prop, "Line Number", "Sets the number of star shaped lines rendered over the halo");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "star_tips", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "star_tip_count", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "starc");
RNA_def_property_range(prop, 3, 50);
RNA_def_property_ui_text(prop, "Star Tips", "Sets the number of points on the star shaped halo");
@@ -1156,7 +1156,7 @@ static void rna_def_material_halo(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Seed", "Randomizes ring dimension and line location");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "flare_mode", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_flare_mode", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_HALO_FLARE); /* use bitflags */
RNA_def_property_ui_text(prop, "Flare", "Renders halo as a lensflare");
RNA_def_property_update(prop, 0, "rna_Material_update");
@@ -1167,7 +1167,7 @@ static void rna_def_material_halo(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Flare Size", "Sets the factor by which the flare is larger than the halo");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "flare_subsize", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "flare_subflare_size", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "subsize");
RNA_def_property_range(prop, 0.1f, 25.0f);
RNA_def_property_ui_text(prop, "Flare Subsize", "Sets the dimension of the subflares, dots and circles");
@@ -1185,48 +1185,48 @@ static void rna_def_material_halo(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Flare Seed", "Specifies an offset in the flare seed table");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "flares_sub", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "flare_subflare_count", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "flarec");
RNA_def_property_range(prop, 1, 32);
RNA_def_property_ui_text(prop, "Flares Sub", "Sets the number of subflares");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "ring", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_ring", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_HALO_RINGS);
RNA_def_property_ui_text(prop, "Rings", "Renders rings over halo");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "lines", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_lines", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_HALO_LINES);
RNA_def_property_ui_text(prop, "Lines", "Renders star shaped lines over halo");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "star", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_star", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_STAR);
RNA_def_property_ui_text(prop, "Star", "Renders halo as a star");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "texture", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_texture", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_HALOTEX);
RNA_def_property_ui_text(prop, "Texture", "Gives halo a texture");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "vertex_normal", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_vertex_normal", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_HALOPUNO);
RNA_def_property_ui_text(prop, "Vertex Normal", "Uses the vertex normal to specify the dimension of the halo");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "xalpha", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_extreme_alpha", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_HALO_XALPHA);
RNA_def_property_ui_text(prop, "Extreme Alpha", "Uses extreme alpha");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "shaded", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_shaded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_HALO_SHADE);
RNA_def_property_ui_text(prop, "Shaded", "Lets halo receive light and shadows from external objects");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "soft", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_soft", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_HALO_SOFT);
RNA_def_property_ui_text(prop, "Soft", "Softens the edges of halos at intersections with other geometry");
RNA_def_property_update(prop, 0, "rna_Material_update");
@@ -1254,7 +1254,7 @@ static void rna_def_material_sss(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Color", "Scattering color");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "error_tolerance", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "error_threshold", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "sss_error");
RNA_def_property_ui_range(prop, 0.0001, 10, 1, 3);
RNA_def_property_ui_text(prop, "Error Tolerance", "Error tolerance (low values are slower and higher quality)");
@@ -1296,7 +1296,7 @@ static void rna_def_material_sss(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Back", "Back scattering weight");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "sss_flag", MA_DIFF_SSS);
RNA_def_property_ui_text(prop, "Enabled", "Enable diffuse subsurface scatting effects in a material");
RNA_def_property_update(prop, 0, "rna_Material_update");
@@ -1372,12 +1372,12 @@ static void rna_def_material_strand(BlenderRNA *brna)
RNA_def_struct_nested(brna, srna, "Material");
RNA_def_struct_ui_text(srna, "Material Strand", "Strand settings for a Material datablock");
- prop= RNA_def_property(srna, "tangent_shading", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_tangent_shading", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_TANGENT_STR);
RNA_def_property_ui_text(prop, "Tangent Shading", "Uses direction of strands as normal for tangent-shading");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "surface_diffuse", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_surface_diffuse", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_STR_SURFDIFF);
RNA_def_property_ui_text(prop, "Surface Diffuse", "Make diffuse shading more similar to shading the surface");
RNA_def_property_update(prop, 0, "rna_Material_update");
@@ -1388,7 +1388,7 @@ static void rna_def_material_strand(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Blend Distance", "Worldspace distance over which to blend in the surface normal");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "blender_units", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_blender_units", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_STR_B_UNITS);
RNA_def_property_ui_text(prop, "Blender Units", "Use Blender units for widths instead of pixels");
RNA_def_property_update(prop, 0, "rna_Material_update");
@@ -1407,7 +1407,7 @@ static void rna_def_material_strand(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Tip Size", "End size of strands in pixels or Blender units");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "min_size", PROP_FLOAT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "size_min", PROP_FLOAT, PROP_UNSIGNED);
RNA_def_property_float_sdna(prop, NULL, "strand_min");
RNA_def_property_range(prop, 0.001, 10);
RNA_def_property_ui_text(prop, "Minimum Size", "Minimum size of strands in pixels");
@@ -1441,7 +1441,7 @@ static void rna_def_material_physics(BlenderRNA *brna)
RNA_def_struct_nested(brna, srna, "Material");
RNA_def_struct_ui_text(srna, "Material Physics", "Physics settings for a Material datablock");
- prop= RNA_def_property(srna, "align_to_normal", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_normal_align", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dynamode", MA_FH_NOR);
RNA_def_property_ui_text(prop, "Align to Normal", "Align dynamic game objects along the surface normal, when inside the physics distance area");
@@ -1465,7 +1465,7 @@ static void rna_def_material_physics(BlenderRNA *brna)
RNA_def_property_range(prop, 0, 20);
RNA_def_property_ui_text(prop, "Distance", "Distance of the physics area");
- prop= RNA_def_property(srna, "damp", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "damping", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "xyfrict");
RNA_def_property_range(prop, 0, 1);
RNA_def_property_ui_text(prop, "Damping", "Damping of the spring force, when inside the physics distance area");
@@ -1508,7 +1508,7 @@ void RNA_def_material(BlenderRNA *brna)
RNA_def_property_enum_funcs(prop, NULL, "rna_Material_type_set", NULL);
RNA_def_property_update(prop, 0, "rna_Material_draw_update");
- prop= RNA_def_property(srna, "transparency", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_transparency", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_TRANSP);
RNA_def_property_ui_text(prop, "Transparency", "Render material as transparent");
RNA_def_property_update(prop, 0, "rna_Material_update");
@@ -1543,12 +1543,12 @@ void RNA_def_material(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Translucency", "Amount of diffuse shading on the back side");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "cubic", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cubic", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "shade_flag", MA_CUBIC);
RNA_def_property_ui_text(prop, "Cubic Interpolation", "Use cubic interpolation for diffuse values, for smoother transitions");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "object_color", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_object_color", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "shade_flag", MA_OBCOLOR);
RNA_def_property_ui_text(prop, "Object Color", "Modulate the result with a per-object color");
RNA_def_property_update(prop, 0, "rna_Material_update");
@@ -1563,7 +1563,7 @@ void RNA_def_material(BlenderRNA *brna)
RNA_def_property_range(prop, 0, 10);
RNA_def_property_ui_text(prop, "Shadow Buffer Bias", "Factor to multiply shadow buffer bias with (0 is ignore.)");
- prop= RNA_def_property(srna, "shadow_casting_alpha", PROP_FLOAT, PROP_FACTOR);
+ prop= RNA_def_property(srna, "shadow_cast_alpha", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, NULL, "shad_alpha");
RNA_def_property_range(prop, 0.001, 1);
RNA_def_property_ui_text(prop, "Shadow Casting Alpha", "Shadow casting alpha, in use for Irregular and Deep shadow buffer");
@@ -1578,32 +1578,32 @@ void RNA_def_material(BlenderRNA *brna)
/* flags */
- prop= RNA_def_property(srna, "light_group_exclusive", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_light_group_exclusive", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_GROUP_NOLAY);
RNA_def_property_ui_text(prop, "Light Group Exclusive", "Material uses the light group exclusively - these lamps are excluded from other scene lighting");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "traceable", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_raytrace", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_TRACEBLE);
RNA_def_property_ui_text(prop, "Traceable", "Include this material and geometry that uses it in ray tracing calculations");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "shadows", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_shadows", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_SHADOW);
RNA_def_property_ui_text(prop, "Shadows", "Allows this material to receive shadows");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "shadeless", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_shadeless", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_SHLESS);
RNA_def_property_ui_text(prop, "Shadeless", "Makes this material insensitive to light or shadow");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "vertex_color_light", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_vertex_color_light", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_VERTEXCOL);
RNA_def_property_ui_text(prop, "Vertex Color Light", "Add vertex colors as additional lighting");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "vertex_color_paint", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_vertex_color_paint", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_VERTEXCOLP);
RNA_def_property_ui_text(prop, "Vertex Color Paint", "Replaces object base color with vertex colors (multiplies with 'texture face' face assigned textures)");
RNA_def_property_update(prop, 0, "rna_Material_update");
@@ -1613,7 +1613,7 @@ void RNA_def_material(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Invert Z Depth", "Renders material's faces with an inverted Z buffer (scanline only)");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "z_offset", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "offset_z", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "zoffs");
RNA_def_property_ui_text(prop, "Z Offset", "Gives faces an artificial offset in the Z buffer for Z transparency");
RNA_def_property_update(prop, 0, "rna_Material_update");
@@ -1623,57 +1623,57 @@ void RNA_def_material(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Sky", "Renders this material with zero alpha, with sky background in place (scanline only)");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "only_shadow", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_only_shadow", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_ONLYSHADOW);
RNA_def_property_ui_text(prop, "Only Shadow", "Renders shadows as the material's alpha value, making materials transparent except for shadowed areas");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "face_texture", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_face_texture", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_FACETEXTURE);
RNA_def_property_ui_text(prop, "Face Textures", "Replaces the object's base color with color from face assigned image textures");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "face_texture_alpha", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_face_texture_alpha", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_FACETEXTURE_ALPHA);
RNA_def_property_ui_text(prop, "Face Textures Alpha", "Replaces the object's base alpha value with alpha from face assigned image textures");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "cast_shadows_only", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cast_shadows_only", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_ONLYCAST);
RNA_def_property_ui_text(prop, "Cast Shadows Only", "Makes objects with this material appear invisible, only casting shadows (not rendered)");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "exclude_mist", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_NOMIST);
- RNA_def_property_ui_text(prop, "Exclude Mist", "Excludes this material from mist effects (in world settings)");
+ prop= RNA_def_property(srna, "use_mist", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "mode", MA_NOMIST);
+ RNA_def_property_ui_text(prop, "Use Mist", "Use mist with this material (in world settings)");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "receive_transparent_shadows", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_transparent_shadows", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_SHADOW_TRA);
RNA_def_property_ui_text(prop, "Receive Transparent Shadows", "Allow this object to receive transparent shadows casted through other objects");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "ray_shadow_bias", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_ray_shadow_bias", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_RAYBIAS);
RNA_def_property_ui_text(prop, "Ray Shadow Bias", "Prevents raytraced shadow errors on surfaces with smooth shaded normals (terminator problem)");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "full_oversampling", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_full_oversampling", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_FULL_OSA);
RNA_def_property_ui_text(prop, "Full Oversampling", "Force this material to render full shading/textures for all anti-aliasing samples");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "cast_buffer_shadows", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cast_buffer_shadows", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_SHADBUF);
RNA_def_property_ui_text(prop, "Cast Buffer Shadows", "Allow this material to cast shadows from shadow buffer lamps");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "cast_approximate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cast_approximate", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "shade_flag", MA_APPROX_OCCLUSION);
RNA_def_property_ui_text(prop, "Cast Approximate", "Allow this material to cast shadows when using approximate ambient occlusion.");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "tangent_shading", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_tangent_shading", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_TANGENT_V);
RNA_def_property_ui_text(prop, "Tangent Shading", "Use the material's tangent vector instead of the normal for shading - for anisotropic shading effects");
RNA_def_property_update(prop, 0, "rna_Material_update");
@@ -1682,13 +1682,13 @@ void RNA_def_material(BlenderRNA *brna)
prop= RNA_def_property(srna, "raytrace_mirror", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "MaterialRaytraceMirror");
- RNA_def_property_pointer_funcs(prop, "rna_Material_mirror_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Material_mirror_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Raytrace Mirror", "Raytraced reflection settings for the material");
prop= RNA_def_property(srna, "raytrace_transparency", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "MaterialRaytraceTransparency");
- RNA_def_property_pointer_funcs(prop, "rna_Material_transp_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Material_transp_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Raytrace Transparency", "Raytraced transparency settings for the material");
prop= RNA_def_property(srna, "volume", PROP_POINTER, PROP_NONE);
@@ -1700,25 +1700,25 @@ void RNA_def_material(BlenderRNA *brna)
prop= RNA_def_property(srna, "halo", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "MaterialHalo");
- RNA_def_property_pointer_funcs(prop, "rna_Material_halo_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Material_halo_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Halo", "Halo settings for the material");
prop= RNA_def_property(srna, "subsurface_scattering", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "MaterialSubsurfaceScattering");
- RNA_def_property_pointer_funcs(prop, "rna_Material_sss_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Material_sss_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Subsurface Scattering", "Subsurface scattering settings for the material");
prop= RNA_def_property(srna, "strand", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "MaterialStrand");
- RNA_def_property_pointer_funcs(prop, "rna_Material_strand_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Material_strand_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Strand", "Strand settings for the material");
prop= RNA_def_property(srna, "physics", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "MaterialPhysics");
- RNA_def_property_pointer_funcs(prop, "rna_Material_physics_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Material_physics_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Physics", "Game physics settings");
/* nodetree */
@@ -1735,7 +1735,7 @@ void RNA_def_material(BlenderRNA *brna)
prop= RNA_def_property(srna, "active_node_material", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Material");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_pointer_funcs(prop, "rna_Material_active_node_material_get", "rna_Material_active_node_material_set", NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Material_active_node_material_get", "rna_Material_active_node_material_set", NULL, NULL);
RNA_def_property_ui_text(prop, "Material", "Active node material");
RNA_def_property_update(prop, NC_MATERIAL, NULL);
@@ -1781,7 +1781,7 @@ void rna_def_mtex_common(StructRNA *srna, const char *begin, const char *activeg
prop= RNA_def_property(srna, "active_texture", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Texture");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_pointer_funcs(prop, activeget, activeset, NULL);
+ RNA_def_property_pointer_funcs(prop, activeget, activeset, NULL, NULL);
RNA_def_property_ui_text(prop, "Active Texture", "Active texture slot being displayed");
RNA_def_property_update(prop, 0, update);
diff --git a/source/blender/makesrna/intern/rna_material_api.c b/source/blender/makesrna/intern/rna_material_api.c
index 03eba157bf3..d271b3b374c 100644
--- a/source/blender/makesrna/intern/rna_material_api.c
+++ b/source/blender/makesrna/intern/rna_material_api.c
@@ -42,7 +42,7 @@
Adds material to the first free texture slot.
If all slots are busy, replaces the first.
*/
-static void rna_Material_add_texture(Material *ma, Tex *tex, int mapto, int texco)
+static void rna_Material_add_texture(Material *ma, Tex *tex, int texco, int mapto)
{
int i;
MTex *mtex;
@@ -71,8 +71,8 @@ static void rna_Material_add_texture(Material *ma, Tex *tex, int mapto, int texc
if (tex)
id_us_plus(&tex->id);
- mtex->texco= mapto;
- mtex->mapto= texco;
+ mtex->texco= texco;
+ mtex->mapto= mapto;
}
#else
@@ -119,8 +119,9 @@ void RNA_api_material(StructRNA *srna)
RNA_def_function_ui_description(func, "Add a texture to material's free texture slot.");
parm= RNA_def_pointer(func, "texture", "Texture", "Texture", "Texture to add.");
RNA_def_property_flag(parm, PROP_REQUIRED);
- parm= RNA_def_enum(func, "texture_coordinates", prop_texture_coordinates_items, TEXCO_UV, "", "Source of texture coordinate information."); /* optional */
+ parm= RNA_def_enum(func, "texture_coords", prop_texture_coordinates_items, TEXCO_UV, "", "Source of texture coordinate information."); /* optional */
parm= RNA_def_enum(func, "map_to", prop_texture_mapto_items, MAP_COL, "", "Controls which material property the texture affects."); /* optional */
+ RNA_def_property_flag(parm, PROP_ENUM_FLAG);
}
#endif
diff --git a/source/blender/makesrna/intern/rna_mesh.c b/source/blender/makesrna/intern/rna_mesh.c
index 01ffaacc086..3758f0ad101 100644
--- a/source/blender/makesrna/intern/rna_mesh.c
+++ b/source/blender/makesrna/intern/rna_mesh.c
@@ -59,22 +59,29 @@ static void rna_Mesh_update_data(Main *bmain, Scene *scene, PointerRNA *ptr)
{
ID *id= ptr->id.data;
- DAG_id_flush_update(id, OB_RECALC_DATA);
- WM_main_add_notifier(NC_GEOM|ND_DATA, id);
+ /* cheating way for importers to avoid slow updates */
+ if(id->us > 0) {
+ DAG_id_flush_update(id, OB_RECALC_DATA);
+ WM_main_add_notifier(NC_GEOM|ND_DATA, id);
+ }
}
static void rna_Mesh_update_select(Main *bmain, Scene *scene, PointerRNA *ptr)
{
ID *id= ptr->id.data;
-
- WM_main_add_notifier(NC_GEOM|ND_SELECT, id);
+ /* cheating way for importers to avoid slow updates */
+ if(id->us > 0) {
+ WM_main_add_notifier(NC_GEOM|ND_SELECT, id);
+ }
}
void rna_Mesh_update_draw(Main *bmain, Scene *scene, PointerRNA *ptr)
{
ID *id= ptr->id.data;
-
- WM_main_add_notifier(NC_GEOM|ND_DATA, id);
+ /* cheating way for importers to avoid slow updates */
+ if(id->us > 0) {
+ WM_main_add_notifier(NC_GEOM|ND_DATA, id);
+ }
}
static void rna_MeshVertex_normal_get(PointerRNA *ptr, float *value)
@@ -505,8 +512,7 @@ static int rna_CustomDataData_numverts(PointerRNA *ptr, int type)
Mesh *me= (Mesh*)ptr->id.data;
CustomData *fdata= rna_mesh_fdata(me);
CustomDataLayer *cdl;
- int a;
- size_t b;
+ int a, b;
for(cdl=fdata->layers, a=0; a<fdata->totlayer; cdl++, a++) {
if(cdl->type == type) {
@@ -908,8 +914,7 @@ static char *rna_CustomDataData_path(PointerRNA *ptr, char *collection, int type
Mesh *me= (Mesh*)ptr->id.data;
CustomData *fdata= rna_mesh_pdata(me);
CustomDataLayer *cdl;
- int a;
- size_t b;
+ int a, b;
for(cdl=fdata->layers, a=0; a<fdata->totlayer; cdl++, a++) {
if(cdl->type == type) {
@@ -949,7 +954,7 @@ static char *rna_MeshIntPropertyLayer_path(PointerRNA *ptr)
static char *rna_MeshIntProperty_path(PointerRNA *ptr)
{
- return rna_CustomDataData_path(ptr, "int_layers", CD_MCOL);
+ return rna_CustomDataData_path(ptr, "layers_int", CD_MCOL);
}
static char *rna_MeshFloatPropertyLayer_path(PointerRNA *ptr)
@@ -959,7 +964,7 @@ static char *rna_MeshFloatPropertyLayer_path(PointerRNA *ptr)
static char *rna_MeshFloatProperty_path(PointerRNA *ptr)
{
- return rna_CustomDataData_path(ptr, "float_layers", CD_MCOL);
+ return rna_CustomDataData_path(ptr, "layers_float", CD_MCOL);
}
static char *rna_MeshStringPropertyLayer_path(PointerRNA *ptr)
@@ -969,7 +974,7 @@ static char *rna_MeshStringPropertyLayer_path(PointerRNA *ptr)
static char *rna_MeshStringProperty_path(PointerRNA *ptr)
{
- return rna_CustomDataData_path(ptr, "string_layers", CD_MCOL);
+ return rna_CustomDataData_path(ptr, "layers_string", CD_MCOL);
}
static int rna_Mesh_tot_vert_get(PointerRNA *ptr)
@@ -1035,14 +1040,14 @@ static void rna_def_mvert(BlenderRNA *brna)
RNA_def_property_float_funcs(prop, "rna_MeshVertex_normal_get", "rna_MeshVertex_normal_set", NULL);
RNA_def_property_ui_text(prop, "Normal", "Vertex Normal");
- prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SELECT);
- RNA_def_property_ui_text(prop, "Selected", "");
+ RNA_def_property_ui_text(prop, "Select", "");
RNA_def_property_update(prop, 0, "rna_Mesh_update_select");
- prop= RNA_def_property(srna, "hidden", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_HIDE);
- RNA_def_property_ui_text(prop, "Hidden", "");
+ RNA_def_property_ui_text(prop, "Hide", "");
RNA_def_property_update(prop, 0, "rna_Mesh_update_select");
prop= RNA_def_property(srna, "bevel_weight", PROP_FLOAT, PROP_NONE);
@@ -1072,7 +1077,7 @@ static void rna_def_medge(BlenderRNA *brna)
RNA_def_struct_path_func(srna, "rna_MeshEdge_path");
RNA_def_struct_ui_icon(srna, ICON_EDGESEL);
- prop= RNA_def_property(srna, "verts", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "vertices", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_sdna(prop, NULL, "v1");
RNA_def_property_array(prop, 2);
RNA_def_property_ui_text(prop, "Vertices", "Vertex indices");
@@ -1088,34 +1093,32 @@ static void rna_def_medge(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Bevel Weight", "Weight used by the Bevel modifier");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SELECT);
- RNA_def_property_ui_text(prop, "Selected", "");
+ RNA_def_property_ui_text(prop, "Select", "");
RNA_def_property_update(prop, 0, "rna_Mesh_update_select");
- prop= RNA_def_property(srna, "hidden", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_HIDE);
- RNA_def_property_ui_text(prop, "Hidden", "");
+ RNA_def_property_ui_text(prop, "Hide", "");
RNA_def_property_update(prop, 0, "rna_Mesh_update_select");
- prop= RNA_def_property(srna, "seam", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_seam", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_SEAM);
RNA_def_property_ui_text(prop, "Seam", "Seam edge for UV unwrapping");
RNA_def_property_update(prop, 0, "rna_Mesh_update_select");
- prop= RNA_def_property(srna, "sharp", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_edge_sharp", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_SHARP);
RNA_def_property_ui_text(prop, "Sharp", "Sharp edge for the EdgeSplit modifier");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "loose", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_loose", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_LOOSEEDGE);
- RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Loose", "Loose edge");
- prop= RNA_def_property(srna, "fgon", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_fgon", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_FGON);
- RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Fgon", "Fgon edge");
prop= RNA_def_property(srna, "index", PROP_INT, PROP_UNSIGNED);
@@ -1136,7 +1139,7 @@ static void rna_def_mface(BlenderRNA *brna)
RNA_def_struct_ui_icon(srna, ICON_FACESEL);
// XXX allows creating invalid meshes
- prop= RNA_def_property(srna, "verts", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "vertices", PROP_INT, PROP_UNSIGNED);
RNA_def_property_array(prop, 4);
RNA_def_property_flag(prop, PROP_DYNAMIC);
RNA_def_property_dynamic_array_funcs(prop, "rna_MeshFace_verts_get_length");
@@ -1144,7 +1147,7 @@ static void rna_def_mface(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Vertices", "Vertex indices");
/* leaving this fixed size array for foreach_set used in import scripts */
- prop= RNA_def_property(srna, "verts_raw", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "vertices_raw", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_sdna(prop, NULL, "v1");
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Vertices", "Fixed size vertex indices array");
@@ -1155,17 +1158,17 @@ static void rna_def_mface(BlenderRNA *brna)
RNA_def_property_int_funcs(prop, NULL, NULL, "rna_MeshFace_material_index_range");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_FACE_SEL);
- RNA_def_property_ui_text(prop, "Selected", "");
+ RNA_def_property_ui_text(prop, "Select", "");
RNA_def_property_update(prop, 0, "rna_Mesh_update_select");
- prop= RNA_def_property(srna, "hidden", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_HIDE);
- RNA_def_property_ui_text(prop, "Hidden", "");
+ RNA_def_property_ui_text(prop, "Hide", "");
RNA_def_property_update(prop, 0, "rna_Mesh_update_select");
- prop= RNA_def_property(srna, "smooth", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_smooth", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_SMOOTH);
RNA_def_property_ui_text(prop, "Smooth", "");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
@@ -1242,84 +1245,85 @@ static void rna_def_mtexpoly(BlenderRNA *brna)
prop= RNA_def_property(srna, "image", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "tpage");
- RNA_def_property_pointer_funcs(prop, NULL, "rna_TextureFace_image_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_TextureFace_image_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Image", "");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "tex", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_image", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_TEX);
RNA_def_property_ui_text(prop, "Tex", "Render face with texture");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "light", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_light", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_LIGHT);
RNA_def_property_ui_text(prop, "Light", "Use light for face");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "invisible", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_INVISIBLE);
RNA_def_property_ui_text(prop, "Invisible", "Make face invisible");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "collision", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_collision", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_DYNAMIC);
RNA_def_property_ui_text(prop, "Collision", "Use face for collision and ray-sensor detection");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "shared", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_blend_shared", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_SHAREDCOL);
RNA_def_property_ui_text(prop, "Shared", "Blend vertex colors across face when vertices are shared");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "twoside", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_twoside", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_TWOSIDE);
RNA_def_property_ui_text(prop, "Twoside", "Render face twosided");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "object_color", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_object_color", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_OBCOL);
RNA_def_property_ui_text(prop, "Object Color", "Use ObColor instead of vertex colors");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "halo", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_halo", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_BILLBOARD);
RNA_def_property_ui_text(prop, "Halo", "Screen aligned billboard");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "billboard", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_billboard", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_BILLBOARD2);
RNA_def_property_ui_text(prop, "Billboard", "Billboard with Z-axis constraint");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "shadow", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_shadow_cast", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_SHADOW);
RNA_def_property_ui_text(prop, "Shadow", "Face is used for shadow");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "text", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_bitmap_text", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_BMFONT);
RNA_def_property_ui_text(prop, "Text", "Enable bitmap text on face");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "alpha_sort", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_alpha_sort", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_ALPHASORT);
RNA_def_property_ui_text(prop, "Alpha Sort", "Enable sorting of faces for correct alpha drawing (slow, use Clip Alpha instead when possible)");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "transp", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "blend_type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "transp");
RNA_def_property_enum_items(prop, transp_items);
RNA_def_property_ui_text(prop, "Transparency", "Transparency blending mode");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "uv_selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select_uv", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TF_SEL1);
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "UV Selected", "");
RNA_def_property_update(prop, 0, "rna_Mesh_update_select");
#if 0
- prop= RNA_def_property(srna, "uv_pinned", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "pin_uv", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "unwrap", TF_PIN1);
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "UV Pinned", "");
@@ -1546,7 +1550,7 @@ static void rna_def_mesh(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Mesh", "Mesh datablock defining geometric surfaces");
RNA_def_struct_ui_icon(srna, ICON_MESH_DATA);
- prop= RNA_def_property(srna, "verts", PROP_COLLECTION, PROP_NONE);
+ prop= RNA_def_property(srna, "vertices", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "mvert", "totvert");
RNA_def_property_struct_type(prop, "MeshVertex");
RNA_def_property_ui_text(prop, "Vertices", "Vertices of the mesh");
@@ -1582,7 +1586,7 @@ static void rna_def_mesh(BlenderRNA *brna)
prop= RNA_def_property(srna, "active_uv_texture", PROP_POINTER, PROP_UNSIGNED);
RNA_def_property_struct_type(prop, "MeshTextureFaceLayer");
- RNA_def_property_pointer_funcs(prop, "rna_Mesh_active_uv_texture_get", "rna_Mesh_active_uv_texture_set", NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Mesh_active_uv_texture_get", "rna_Mesh_active_uv_texture_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Active UV Texture", "Active UV texture");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
@@ -1594,7 +1598,7 @@ static void rna_def_mesh(BlenderRNA *brna)
prop= RNA_def_property(srna, "uv_texture_clone", PROP_POINTER, PROP_UNSIGNED);
RNA_def_property_struct_type(prop, "MeshTextureFaceLayer");
- RNA_def_property_pointer_funcs(prop, "rna_Mesh_uv_texture_clone_get", "rna_Mesh_uv_texture_clone_set", NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Mesh_uv_texture_clone_get", "rna_Mesh_uv_texture_clone_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Clone UV Texture", "UV texture to be used as cloning source");
@@ -1604,7 +1608,7 @@ static void rna_def_mesh(BlenderRNA *brna)
prop= RNA_def_property(srna, "uv_texture_stencil", PROP_POINTER, PROP_UNSIGNED);
RNA_def_property_struct_type(prop, "MeshTextureFaceLayer");
- RNA_def_property_pointer_funcs(prop, "rna_Mesh_uv_texture_stencil_get", "rna_Mesh_uv_texture_stencil_set", NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Mesh_uv_texture_stencil_get", "rna_Mesh_uv_texture_stencil_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Mask UV Texture", "UV texture to mask the painted area");
@@ -1622,7 +1626,7 @@ static void rna_def_mesh(BlenderRNA *brna)
prop= RNA_def_property(srna, "active_vertex_color", PROP_POINTER, PROP_UNSIGNED);
RNA_def_property_struct_type(prop, "MeshColorLayer");
- RNA_def_property_pointer_funcs(prop, "rna_Mesh_active_vertex_color_get", "rna_Mesh_active_vertex_color_set", NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Mesh_active_vertex_color_get", "rna_Mesh_active_vertex_color_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Active Vertex Color Layer", "Active vertex color layer");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
@@ -1632,38 +1636,34 @@ static void rna_def_mesh(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Active Vertex Color Index", "Active vertex color index");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "float_layers", PROP_COLLECTION, PROP_NONE);
+ prop= RNA_def_property(srna, "layers_float", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "pdata.layers", "pdata.totlayer");
RNA_def_property_collection_funcs(prop, "rna_Mesh_float_layers_begin", 0, 0, 0, "rna_Mesh_float_layers_length", 0, 0);
RNA_def_property_struct_type(prop, "MeshFloatPropertyLayer");
RNA_def_property_ui_text(prop, "Float Property Layers", "");
- prop= RNA_def_property(srna, "int_layers", PROP_COLLECTION, PROP_NONE);
+ prop= RNA_def_property(srna, "layers_int", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "pdata.layers", "pdata.totlayer");
RNA_def_property_collection_funcs(prop, "rna_Mesh_int_layers_begin", 0, 0, 0, "rna_Mesh_int_layers_length", 0, 0);
RNA_def_property_struct_type(prop, "MeshIntPropertyLayer");
RNA_def_property_ui_text(prop, "Int Property Layers", "");
- prop= RNA_def_property(srna, "string_layers", PROP_COLLECTION, PROP_NONE);
+ prop= RNA_def_property(srna, "layers_string", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "pdata.layers", "pdata.totlayer");
RNA_def_property_collection_funcs(prop, "rna_Mesh_string_layers_begin", 0, 0, 0, "rna_Mesh_string_layers_length", 0, 0);
RNA_def_property_struct_type(prop, "MeshStringPropertyLayer");
RNA_def_property_ui_text(prop, "String Property Layers", "");
- prop= RNA_def_property(srna, "autosmooth", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_smooth", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_AUTOSMOOTH);
RNA_def_property_ui_text(prop, "Auto Smooth", "Treats all set-smoothed faces with angles less than the specified angle as 'smooth' during render");
- prop= RNA_def_property(srna, "autosmooth_angle", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "auto_smooth_angle", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "smoothresh");
RNA_def_property_range(prop, 1, 80);
RNA_def_property_ui_text(prop, "Auto Smooth Angle", "Defines maximum angle between face normals that 'Auto Smooth' will operate on");
- prop= RNA_def_property(srna, "vertex_normal_flip", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", ME_NOPUNOFLIP);
- RNA_def_property_ui_text(prop, "Vertex Normal Flip", "Flip vertex normals towards the camera during render");
-
- prop= RNA_def_property(srna, "double_sided", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_double_sided", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_TWOSIDED);
RNA_def_property_ui_text(prop, "Double Sided", "Render/display the mesh with double or single sided lighting");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
@@ -1676,66 +1676,86 @@ static void rna_def_mesh(BlenderRNA *brna)
prop= RNA_def_property(srna, "shape_keys", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "key");
RNA_def_property_ui_text(prop, "Shape Keys", "");
-
+
+ /* texture space */
+ prop= RNA_def_property(srna, "use_auto_texspace", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "texflag", AUTOSPACE);
+ RNA_def_property_ui_text(prop, "Auto Texture Space", "Adjusts active object's texture space automatically when transforming object");
+
+ /*prop= RNA_def_property(srna, "texspace_location", PROP_FLOAT, PROP_TRANSLATION);
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_ui_text(prop, "Texture Space Location", "Texture space location");
+ RNA_def_property_editable_func(prop, "rna_Mesh_texspace_editable");
+ RNA_def_property_float_funcs(prop, "rna_Mesh_texspace_loc_get", "rna_Mesh_texspace_loc_set", NULL);
+ RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
+ */
+
+ /* not supported yet
+ prop= RNA_def_property(srna, "texspace_rot", PROP_FLOAT, PROP_EULER);
+ RNA_def_property_float(prop, NULL, "rot");
+ RNA_def_property_ui_text(prop, "Texture Space Rotation", "Texture space rotation");
+ RNA_def_property_editable_func(prop, texspace_editable);
+ RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");*/
+
/* Mesh Draw Options for Edit Mode*/
- prop= RNA_def_property(srna, "draw_edges", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_edges", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWEDGES);
RNA_def_property_ui_text(prop, "Draw Edges", "Displays selected edges using hilights in the 3D view and UV editor");
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
- prop= RNA_def_property(srna, "all_edges", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_all_edges", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_ALLEDGES);
RNA_def_property_ui_text(prop, "All Edges", "Displays all edges for wireframe in all view modes in the 3D view");
- prop= RNA_def_property(srna, "draw_faces", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_faces", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWFACES);
RNA_def_property_ui_text(prop, "Draw Faces", "Displays all faces as shades in the 3D view and UV editor");
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
- prop= RNA_def_property(srna, "draw_normals", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_normal_face", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWNORMALS);
RNA_def_property_ui_text(prop, "Draw Normals", "Displays face normals as lines");
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
- prop= RNA_def_property(srna, "draw_vertex_normals", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_normal_vertex", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAW_VNORMALS);
RNA_def_property_ui_text(prop, "Draw Vertex Normals", "Displays vertex normals as lines");
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
- prop= RNA_def_property(srna, "draw_creases", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_edge_crease", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWCREASES);
RNA_def_property_ui_text(prop, "Draw Creases", "Displays creases created for subsurf weighting");
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
- prop= RNA_def_property(srna, "draw_bevel_weights", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_edge_bevel_weight", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWBWEIGHTS);
RNA_def_property_ui_text(prop, "Draw Bevel Weights", "Displays weights created for the Bevel modifier");
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
- prop= RNA_def_property(srna, "draw_seams", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_edge_seams", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWSEAMS);
RNA_def_property_ui_text(prop, "Draw Seams", "Displays UV unwrapping seams");
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
- prop= RNA_def_property(srna, "draw_sharp", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_edge_sharp", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWSHARP);
RNA_def_property_ui_text(prop, "Draw Sharp", "Displays sharp edges, used with the EdgeSplit modifier");
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
- prop= RNA_def_property(srna, "draw_edge_lenght", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_extra_edge_length", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAW_EDGELEN);
- RNA_def_property_ui_text(prop, "Edge Length", "Displays selected edge lengths");
+ RNA_def_property_ui_text(prop, "Edge Length", "Displays selected edge lengths, Using global values when set in the transform panel");
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
- prop= RNA_def_property(srna, "draw_edge_angle", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_extra_edge_angle", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAW_EDGEANG);
- RNA_def_property_ui_text(prop, "Edge Angles", "Displays the angles in the selected edges in degrees");
+ RNA_def_property_ui_text(prop, "Edge Angles", "Displays the angles in the selected edges in degrees, Using global values when set in the transform panel");
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
- prop= RNA_def_property(srna, "draw_face_area", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_extra_face_area", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAW_FACEAREA);
- RNA_def_property_ui_text(prop, "Face Area", "Displays the area of selected faces");
+ RNA_def_property_ui_text(prop, "Face Area", "Displays the area of selected faces, Using global values when set in the transform panel");
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
prop= RNA_def_property(srna, "draw_pins", PROP_BOOLEAN, PROP_NONE);
diff --git a/source/blender/makesrna/intern/rna_mesh_api.c b/source/blender/makesrna/intern/rna_mesh_api.c
index 2e7d8e3993a..d011ddd27ce 100644
--- a/source/blender/makesrna/intern/rna_mesh_api.c
+++ b/source/blender/makesrna/intern/rna_mesh_api.c
@@ -61,7 +61,7 @@ void RNA_api_mesh(StructRNA *srna)
func= RNA_def_function(srna, "add_geometry", "ED_mesh_geometry_add");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
- parm= RNA_def_int(func, "verts", 0, 0, INT_MAX, "Number", "Number of vertices to add.", 0, INT_MAX);
+ parm= RNA_def_int(func, "vertices", 0, 0, INT_MAX, "Number", "Number of vertices to add.", 0, INT_MAX);
RNA_def_property_flag(parm, PROP_REQUIRED);
parm= RNA_def_int(func, "edges", 0, 0, INT_MAX, "Number", "Number of edges to add.", 0, INT_MAX);
RNA_def_property_flag(parm, PROP_REQUIRED);
diff --git a/source/blender/makesrna/intern/rna_meta.c b/source/blender/makesrna/intern/rna_meta.c
index 7481759f67e..0de8455bdb7 100644
--- a/source/blender/makesrna/intern/rna_meta.c
+++ b/source/blender/makesrna/intern/rna_meta.c
@@ -123,7 +123,7 @@ static void rna_def_metaelement(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
/* number values */
- prop= RNA_def_property(srna, "location", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "co", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_float_sdna(prop, NULL, "x");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Location", "");
@@ -165,7 +165,7 @@ static void rna_def_metaelement(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
/* flags */
- prop= RNA_def_property(srna, "negative", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_negative", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MB_NEGATIVE);
RNA_def_property_ui_text(prop, "Negative", "Set metaball as negative one");
RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
@@ -201,19 +201,20 @@ static void rna_def_metaball(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Last selected element.", "Last selected element");
/* enums */
- prop= RNA_def_property(srna, "flag", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "update_method", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "flag");
RNA_def_property_enum_items(prop, prop_update_items);
RNA_def_property_ui_text(prop, "Update", "Metaball edit update behavior");
RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
/* number values */
- prop= RNA_def_property(srna, "wire_size", PROP_FLOAT, PROP_DISTANCE);
+ prop= RNA_def_property(srna, "resolution", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "wiresize");
RNA_def_property_range(prop, 0.050f, 1.0f);
RNA_def_property_ui_text(prop, "Wire Size", "Polygonization resolution in the 3D viewport");
RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
- prop= RNA_def_property(srna, "render_size", PROP_FLOAT, PROP_DISTANCE);
+ prop= RNA_def_property(srna, "render_resolution", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "rendersize");
RNA_def_property_range(prop, 0.050f, 1.0f);
RNA_def_property_ui_text(prop, "Render Size", "Polygonization resolution in rendering");
@@ -226,11 +227,11 @@ static void rna_def_metaball(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
/* texture space */
- prop= RNA_def_property(srna, "auto_texspace", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_texspace", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "texflag", MB_AUTOSPACE);
RNA_def_property_ui_text(prop, "Auto Texture Space", "Adjusts active object's texture space automatically when transforming object");
- prop= RNA_def_property(srna, "texspace_loc", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "texspace_location", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Texture Space Location", "Texture space location");
RNA_def_property_editable_func(prop, "rna_Meta_texspace_editable");
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index d2c82b23799..3ae100f925b 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -36,6 +36,8 @@
#include "DNA_object_force.h"
#include "DNA_scene_types.h"
+#include "MEM_guardedalloc.h"
+
#include "BLI_math.h"
#include "BKE_animsys.h"
@@ -87,10 +89,14 @@ EnumPropertyItem modifier_type_items[] ={
#ifdef RNA_RUNTIME
+#include "DNA_particle_types.h"
+#include "DNA_smoke_types.h"
+
#include "BKE_context.h"
#include "BKE_depsgraph.h"
#include "BKE_library.h"
#include "BKE_modifier.h"
+#include "BKE_particle.h"
static void rna_UVProject_projectors_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
@@ -209,13 +215,16 @@ static void rna_Modifier_update(Main *bmain, Scene *scene, PointerRNA *ptr)
static void rna_Modifier_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
rna_Modifier_update(bmain, scene, ptr);
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
}
static void rna_Smoke_set_type(Main *bmain, Scene *scene, PointerRNA *ptr)
{
SmokeModifierData *smd= (SmokeModifierData *)ptr->data;
Object *ob= (Object*)ptr->id.data;
+ ParticleSystemModifierData *psmd = NULL;
+ ParticleSystem *psys = NULL;
+ ParticleSettings *part = NULL;
// nothing changed
if((smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain)
@@ -229,6 +238,28 @@ static void rna_Smoke_set_type(Main *bmain, Scene *scene, PointerRNA *ptr)
ob->dt = OB_WIRE;
break;
case MOD_SMOKE_TYPE_FLOW:
+ for(psys=ob->particlesystem.first; psys; psys=psys->next)
+ if(psys->part->type == PART_EMITTER)
+ break;
+ if(ob->type == OB_MESH && !psys) {
+ /* add particle system */
+ psmd = (ParticleSystemModifierData *)object_add_particle_system(scene, ob, NULL);
+ if(psmd)
+ {
+ psys = psmd->psys;
+ part = psys->part;
+ part->flag |= PART_UNBORN;
+ part->lifetime = 1.0f;
+ part->sta = 1.0f;
+ part->end = 250.0f;
+ part->ren_as = PART_DRAW_NOT;
+ sprintf(psys->name, "SmokeParticles");
+ psys->recalc |= (PSYS_RECALC_RESET|PSYS_RECALC_PHYS);
+ DAG_id_flush_update(ptr->id.data, OB_RECALC_DATA);
+ }
+ }
+ if(smd->flow)
+ smd->flow->psys = psys;
case MOD_SMOKE_TYPE_COLL:
case 0:
default:
@@ -556,12 +587,12 @@ static void rna_def_modifier_subsurf(BlenderRNA *brna)
RNA_def_property_ui_range(prop, 0, 6, 1, 0);
RNA_def_property_ui_text(prop, "Render Levels", "Number of subdivisions to perform when rendering");
- prop= RNA_def_property(srna, "optimal_display", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_only_control_edges", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", eSubsurfModifierFlag_ControlEdges);
RNA_def_property_ui_text(prop, "Optimal Display", "Skip drawing/rendering of interior subdivided edges");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "subsurf_uv", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_subsurf_uv", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", eSubsurfModifierFlag_SubsurfUv);
RNA_def_property_ui_text(prop, "Subdivide UVs", "Use subsurf to subdivide UVs");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -601,7 +632,7 @@ static void rna_def_modifier_multires(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Total Levels", "Number of subdivisions for which displacements are stored");
- prop= RNA_def_property(srna, "external", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_external", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_funcs(prop, "rna_MultiresModifier_external_get", NULL);
RNA_def_property_ui_text(prop, "External", "Store multires displacements outside the .blend file, to save memory");
@@ -611,7 +642,7 @@ static void rna_def_modifier_multires(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "File Path", "Path to external displacements file");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "optimal_display", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_only_control_edges", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", eMultiresModifierFlag_ControlEdges);
RNA_def_property_ui_text(prop, "Optimal Display", "Skip drawing/rendering of interior subdivided edges");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -629,7 +660,7 @@ static void rna_def_modifier_lattice(BlenderRNA *brna)
prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "Object", "Lattice object to deform with");
- RNA_def_property_pointer_funcs(prop, NULL, "rna_LatticeModifier_object_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_LatticeModifier_object_set", NULL, "rna_Lattice_object_poll");
RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
@@ -661,7 +692,7 @@ static void rna_def_modifier_curve(BlenderRNA *brna)
prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "Object", "Curve object to deform with");
- RNA_def_property_pointer_funcs(prop, NULL, "rna_CurveModifier_object_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_CurveModifier_object_set", NULL, "rna_Curve_object_poll");
RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
@@ -694,12 +725,14 @@ static void rna_def_modifier_build(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Start", "Specify the start frame of the effect");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "length", PROP_FLOAT, PROP_TIME);
+ prop= RNA_def_property(srna, "frame_duration", PROP_FLOAT, PROP_TIME);
+ RNA_def_property_float_sdna(prop, NULL, "length");
RNA_def_property_range(prop, 1, MAXFRAMEF);
RNA_def_property_ui_text(prop, "Length", "Specify the total time the build effect requires");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "randomize", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_random_order", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "randomize", 1);
RNA_def_property_ui_text(prop, "Randomize", "Randomize the faces or edges during build");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -719,42 +752,42 @@ static void rna_def_modifier_mirror(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "MirrorModifierData");
RNA_def_struct_ui_icon(srna, ICON_MOD_MIRROR);
- prop= RNA_def_property(srna, "x", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_AXIS_X);
RNA_def_property_ui_text(prop, "X", "Enable X axis mirror");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_AXIS_Y);
RNA_def_property_ui_text(prop, "Y", "Enable Y axis mirror");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "z", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_AXIS_Z);
RNA_def_property_ui_text(prop, "Z", "Enable Z axis mirror");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "clip", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_clip", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_CLIPPING);
RNA_def_property_ui_text(prop, "Clip", "Prevents vertices from going through the mirror during transform");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "mirror_vertex_groups", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_mirror_vertex_groups", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_VGROUP);
RNA_def_property_ui_text(prop, "Mirror Vertex Groups", "Mirror vertex groups (e.g. .R->.L)");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "mirror_u", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_mirror_u", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_MIRROR_U);
RNA_def_property_ui_text(prop, "Mirror U", "Mirror the U texture coordinate around the 0.5 point");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "mirror_v", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_mirror_v", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_MIRROR_V);
RNA_def_property_ui_text(prop, "Mirror V", "Mirror the V texture coordinate around the 0.5 point");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "merge_limit", PROP_FLOAT, PROP_DISTANCE);
+ prop= RNA_def_property(srna, "merge_threshold", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "tolerance");
RNA_def_property_range(prop, 0, FLT_MAX);
RNA_def_property_ui_range(prop, 0, 1, 0.01, 6);
@@ -778,9 +811,10 @@ static void rna_def_modifier_decimate(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "DecimateModifierData");
RNA_def_struct_ui_icon(srna, ICON_MOD_DECIM);
- prop= RNA_def_property(srna, "ratio", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "ratio", PROP_FLOAT, PROP_PERCENTAGE);
RNA_def_property_float_sdna(prop, NULL, "percent");
RNA_def_property_range(prop, 0, 1);
+ RNA_def_property_ui_range(prop, 0, 1, 1, 2);
RNA_def_property_ui_text(prop, "Ratio", "Defines the ratio of triangles to reduce to");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -807,37 +841,37 @@ static void rna_def_modifier_wave(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "WaveModifierData");
RNA_def_struct_ui_icon(srna, ICON_MOD_WAVE);
- prop= RNA_def_property(srna, "x", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_WAVE_X);
RNA_def_property_ui_text(prop, "X", "X axis motion");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_WAVE_Y);
RNA_def_property_ui_text(prop, "Y", "Y axis motion");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "cyclic", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cyclic", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_WAVE_CYCL);
RNA_def_property_ui_text(prop, "Cyclic", "Cyclic wave effect");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "normals", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_normal", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_WAVE_NORM);
RNA_def_property_ui_text(prop, "Normals", "Displace along normals");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "x_normal", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_normal_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_WAVE_NORM_X);
RNA_def_property_ui_text(prop, "X Normal", "Enable displacement along the X normal");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "y_normal", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_normal_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_WAVE_NORM_Y);
RNA_def_property_ui_text(prop, "Y Normal", "Enable displacement along the Y normal");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "z_normal", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_normal_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_WAVE_NORM_Z);
RNA_def_property_ui_text(prop, "Z Normal", "Enable displacement along the Z normal");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -849,6 +883,7 @@ static void rna_def_modifier_wave(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Modifier_update");
prop= RNA_def_property(srna, "lifetime", PROP_FLOAT, PROP_TIME);
+ RNA_def_property_float_sdna(prop, NULL, "lifetime");
RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF);
RNA_def_property_ui_text(prop, "Lifetime", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -897,7 +932,7 @@ static void rna_def_modifier_wave(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "texture_coordinates", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "texture_coords", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "texmapping");
RNA_def_property_enum_items(prop, prop_texture_coordinates_items);
RNA_def_property_ui_text(prop, "Texture Coordinates", "Texture coordinates used for modulating input");
@@ -909,7 +944,7 @@ static void rna_def_modifier_wave(BlenderRNA *brna)
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_WaveModifier_uvlayer_set");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "texture_coordinates_object", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "texture_coords_object", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "map_object");
RNA_def_property_ui_text(prop, "Texture Coordinates Object", "");
RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
@@ -953,7 +988,7 @@ static void rna_def_modifier_armature(BlenderRNA *brna)
prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "Object", "Armature object to deform with");
- RNA_def_property_pointer_funcs(prop, NULL, "rna_ArmatureModifier_object_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_ArmatureModifier_object_set", NULL, "rna_Armature_object_poll");
RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
@@ -963,7 +998,7 @@ static void rna_def_modifier_armature(BlenderRNA *brna)
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_ArmatureModifier_vgroup_set");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "invert", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "deformflag", ARM_DEF_INVERT_VGROUP);
RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -978,12 +1013,12 @@ static void rna_def_modifier_armature(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Use Bone Envelopes", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "quaternion", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_deform_preserve_volume", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "deformflag", ARM_DEF_QUATERNION);
RNA_def_property_ui_text(prop, "Quaternion", "Deform rotation interpolation with quaternions");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "multi_modifier", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_multi_modifier", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "multi", 0);
RNA_def_property_ui_text(prop, "Multi Modifier", "Use same input as previous modifier, and mix results using overall vgroup");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1040,13 +1075,13 @@ static void rna_def_modifier_softbody(BlenderRNA *brna)
prop= RNA_def_property(srna, "settings", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "SoftBodySettings");
- RNA_def_property_pointer_funcs(prop, "rna_SoftBodyModifier_settings_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_SoftBodyModifier_settings_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Soft Body Settings", "");
prop= RNA_def_property(srna, "point_cache", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "PointCache");
- RNA_def_property_pointer_funcs(prop, "rna_SoftBodyModifier_point_cache_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_SoftBodyModifier_point_cache_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Soft Body Point Cache", "");
}
@@ -1068,7 +1103,7 @@ static void rna_def_modifier_boolean(BlenderRNA *brna)
prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "Object", "Mesh object to use for Boolean operation");
- RNA_def_property_pointer_funcs(prop, NULL, "rna_BooleanModifier_object_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_BooleanModifier_object_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
@@ -1106,7 +1141,8 @@ static void rna_def_modifier_array(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Count", "Number of duplicates to make");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "length", PROP_FLOAT, PROP_DISTANCE);
+ prop= RNA_def_property(srna, "fit_length", PROP_FLOAT, PROP_DISTANCE);
+ RNA_def_property_float_sdna(prop, NULL, "length");
RNA_def_property_range(prop, 0, INT_MAX);
RNA_def_property_ui_range(prop, 0, 10000, 10, 2);
RNA_def_property_ui_text(prop, "Length", "Length to fit array within");
@@ -1115,43 +1151,43 @@ static void rna_def_modifier_array(BlenderRNA *brna)
prop= RNA_def_property(srna, "curve", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "curve_ob");
RNA_def_property_ui_text(prop, "Curve", "Curve object to fit array length to");
- RNA_def_property_pointer_funcs(prop, NULL, "rna_ArrayModifier_curve_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_ArrayModifier_curve_set", NULL, "rna_Curve_object_poll");
RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
/* Offset parameters */
- prop= RNA_def_property(srna, "constant_offset", PROP_BOOLEAN, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "use_constant_offset", PROP_BOOLEAN, PROP_TRANSLATION);
RNA_def_property_boolean_sdna(prop, NULL, "offset_type", MOD_ARR_OFF_CONST);
RNA_def_property_ui_text(prop, "Constant Offset", "Add a constant offset");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "constant_offset_displacement", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "constant_offset_displace", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_float_sdna(prop, NULL, "offset");
RNA_def_property_ui_text(prop, "Constant Offset Displacement", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "relative_offset", PROP_BOOLEAN, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "use_relative_offset", PROP_BOOLEAN, PROP_TRANSLATION);
RNA_def_property_boolean_sdna(prop, NULL, "offset_type", MOD_ARR_OFF_RELATIVE);
RNA_def_property_ui_text(prop, "Relative Offset", "Add an offset relative to the object's bounding box");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "relative_offset_displacement", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "relative_offset_displace", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_float_sdna(prop, NULL, "scale");
RNA_def_property_ui_text(prop, "Relative Offset Displacement", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
/* Vertex merging parameters */
- prop= RNA_def_property(srna, "merge_adjacent_vertices", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_merge_vertices", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_ARR_MERGE);
RNA_def_property_ui_text(prop, "Merge Vertices", "Merge vertices in adjacent duplicates");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "merge_end_vertices", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_merge_vertices_cap", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_ARR_MERGEFINAL);
RNA_def_property_ui_text(prop, "Merge Vertices", "Merge vertices in first and last duplicates");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "merge_distance", PROP_FLOAT, PROP_DISTANCE);
+ prop= RNA_def_property(srna, "merge_threshold", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "merge_dist");
RNA_def_property_range(prop, 0, FLT_MAX);
RNA_def_property_ui_range(prop, 0, 1, 1, 4);
@@ -1159,7 +1195,7 @@ static void rna_def_modifier_array(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Modifier_update");
/* Offset object */
- prop= RNA_def_property(srna, "add_offset_object", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_object_offset", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "offset_type", MOD_ARR_OFF_OBJ);
RNA_def_property_ui_text(prop, "Object Offset", "Add another object's transformation to the total offset");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1173,13 +1209,13 @@ static void rna_def_modifier_array(BlenderRNA *brna)
/* Caps */
prop= RNA_def_property(srna, "start_cap", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "Start Cap", "Mesh object to use as a start cap");
- RNA_def_property_pointer_funcs(prop, NULL, "rna_ArrayModifier_start_cap_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_ArrayModifier_start_cap_set", NULL, "rna_Mesh_object_poll");
RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_update");
prop= RNA_def_property(srna, "end_cap", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "End Cap", "Mesh object to use as an end cap");
- RNA_def_property_pointer_funcs(prop, NULL, "rna_ArrayModifier_end_cap_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_ArrayModifier_end_cap_set", NULL, "rna_Mesh_object_poll");
RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
}
@@ -1206,7 +1242,7 @@ static void rna_def_modifier_edgesplit(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Use Edge Angle", "Split edges with high angle between faces");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "use_sharp", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_edge_sharp", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_EDGESPLIT_FROMFLAG);
RNA_def_property_ui_text(prop, "Use Sharp Edges", "Split edges that are marked as sharp");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1248,7 +1284,8 @@ static void rna_def_modifier_displace(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "midlevel", PROP_FLOAT, PROP_DISTANCE);
+ prop= RNA_def_property(srna, "mid_level", PROP_FLOAT, PROP_DISTANCE);
+ RNA_def_property_float_sdna(prop, NULL, "midlevel");
RNA_def_property_range(prop, 0, 1);
RNA_def_property_ui_range(prop, 0, 1, 10, 3);
RNA_def_property_ui_text(prop, "Midlevel", "Material value that gives no displacement");
@@ -1256,7 +1293,7 @@ static void rna_def_modifier_displace(BlenderRNA *brna)
prop= RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
- RNA_def_property_ui_range(prop, -100, 100, 10, 2);
+ RNA_def_property_ui_range(prop, -100, 100, 10, 3);
RNA_def_property_ui_text(prop, "Strength", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1265,7 +1302,7 @@ static void rna_def_modifier_displace(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Direction", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "texture_coordinates", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "texture_coords", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "texmapping");
RNA_def_property_enum_items(prop, prop_texture_coordinates_items);
RNA_def_property_ui_text(prop, "Texture Coordinates", "");
@@ -1300,7 +1337,8 @@ static void rna_def_modifier_uvproject(BlenderRNA *brna)
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_UVProjectModifier_uvlayer_set");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "num_projectors", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "projector_count", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "num_projectors");
RNA_def_property_ui_text(prop, "Number of Projectors", "Number of projectors to use");
RNA_def_property_int_funcs(prop, NULL, "rna_UVProjectModifier_num_projectors_set", NULL);
RNA_def_property_range(prop, 1, MOD_UVPROJECT_MAX);
@@ -1319,32 +1357,32 @@ static void rna_def_modifier_uvproject(BlenderRNA *brna)
prop= RNA_def_property(srna, "aspect_x", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "aspectx");
RNA_def_property_range(prop, 1, FLT_MAX);
- RNA_def_property_ui_range(prop, 1, 1000, 0.2, 2);
+ RNA_def_property_ui_range(prop, 1, 1000, 1, 3);
RNA_def_property_ui_text(prop, "Horizontal Aspect Ratio", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
prop= RNA_def_property(srna, "aspect_y", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "aspecty");
RNA_def_property_range(prop, 1, FLT_MAX);
- RNA_def_property_ui_range(prop, 1, 1000, 0.2, 2);
+ RNA_def_property_ui_range(prop, 1, 1000, 1, 3);
RNA_def_property_ui_text(prop, "Vertical Aspect Ratio", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
prop= RNA_def_property(srna, "scale_x", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "scalex");
RNA_def_property_range(prop, 0, FLT_MAX);
- RNA_def_property_ui_range(prop, 0, 1000, 0.2, 2);
+ RNA_def_property_ui_range(prop, 0, 1000, 1, 3);
RNA_def_property_ui_text(prop, "Horizontal Scale", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
prop= RNA_def_property(srna, "scale_y", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "scaley");
RNA_def_property_range(prop, 0, FLT_MAX);
- RNA_def_property_ui_range(prop, 0, 1000, 0.2, 2);
+ RNA_def_property_ui_range(prop, 0, 1000, 1, 3);
RNA_def_property_ui_text(prop, "Vertical Scale", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "override_image", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_image_override", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_UVPROJECT_OVERRIDEIMAGE);
RNA_def_property_ui_text(prop, "Override Image", "Override faces' current images with the given image");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1354,9 +1392,10 @@ static void rna_def_modifier_uvproject(BlenderRNA *brna)
prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Object");
- RNA_def_property_pointer_funcs(prop, "rna_UVProjector_object_get", "rna_UVProjector_object_set", NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_UVProjector_object_get", "rna_UVProjector_object_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
RNA_def_property_ui_text(prop, "Object", "Object to use as projector transform");
+ RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
}
static void rna_def_modifier_smooth(BlenderRNA *brna)
@@ -1369,17 +1408,17 @@ static void rna_def_modifier_smooth(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "SmoothModifierData");
RNA_def_struct_ui_icon(srna, ICON_MOD_SMOOTH);
- prop= RNA_def_property(srna, "x", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_SMOOTH_X);
RNA_def_property_ui_text(prop, "X", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_SMOOTH_Y);
RNA_def_property_ui_text(prop, "Y", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "z", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_SMOOTH_Z);
RNA_def_property_ui_text(prop, "Z", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1387,11 +1426,12 @@ static void rna_def_modifier_smooth(BlenderRNA *brna)
prop= RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "fac");
RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
- RNA_def_property_ui_range(prop, -10, 10, 0.5, 2);
+ RNA_def_property_ui_range(prop, -10, 10, 1, 3);
RNA_def_property_ui_text(prop, "Factor", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "repeat", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "iterations", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "repeat");
RNA_def_property_ui_range(prop, 0, 30, 1, 0);
RNA_def_property_ui_text(prop, "Repeat", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1427,26 +1467,26 @@ static void rna_def_modifier_cast(BlenderRNA *brna)
prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "Object", "Control object: if available, its location determines the center of the effect");
- RNA_def_property_pointer_funcs(prop, NULL, "rna_CastModifier_object_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_CastModifier_object_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
- prop= RNA_def_property(srna, "x", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_CAST_X);
RNA_def_property_ui_text(prop, "X", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_CAST_Y);
RNA_def_property_ui_text(prop, "Y", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "z", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_CAST_Z);
RNA_def_property_ui_text(prop, "Z", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "from_radius", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_radius_as_size", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_CAST_SIZE_FROM_RADIUS);
RNA_def_property_ui_text(prop, "From Radius", "Use radius as size of projection shape (0 = auto)");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1465,13 +1505,13 @@ static void rna_def_modifier_cast(BlenderRNA *brna)
prop= RNA_def_property(srna, "radius", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_range(prop, 0, FLT_MAX);
- RNA_def_property_ui_range(prop, 0, 100, 10, 2);
+ RNA_def_property_ui_range(prop, 0, 100, 5, 2);
RNA_def_property_ui_text(prop, "Radius", "Only deform vertices within this distance from the center of the effect (leave as 0 for infinite.)");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
prop= RNA_def_property(srna, "size", PROP_FLOAT, PROP_NONE);
RNA_def_property_range(prop, 0, FLT_MAX);
- RNA_def_property_ui_range(prop, 0, 100, 10, 2);
+ RNA_def_property_ui_range(prop, 0, 100, 5, 2);
RNA_def_property_ui_text(prop, "Size", "Size of projection shape (leave as 0 for auto.)");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1500,7 +1540,7 @@ static void rna_def_modifier_meshdeform(BlenderRNA *brna)
prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "Object", "Mesh object to deform with");
- RNA_def_property_pointer_funcs(prop, NULL, "rna_MeshDeformModifier_object_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_MeshDeformModifier_object_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
@@ -1509,7 +1549,7 @@ static void rna_def_modifier_meshdeform(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Bound", "Whether geometry has been bound to control cage");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "invert", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MDEF_INVERT_VGROUP);
RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1526,7 +1566,7 @@ static void rna_def_modifier_meshdeform(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Precision", "The grid size for binding");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "dynamic", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_dynamic_bind", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MDEF_DYNAMIC_BIND);
RNA_def_property_ui_text(prop, "Dynamic", "Recompute binding dynamically on top of other deformers (slower and more memory consuming.)");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1578,7 +1618,7 @@ static void rna_def_modifier_particleinstance(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
- prop= RNA_def_property(srna, "particle_system_number", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "particle_system_index", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "psys");
RNA_def_property_range(prop, 1, 10);
RNA_def_property_ui_text(prop, "Particle System Number", "");
@@ -1590,12 +1630,12 @@ static void rna_def_modifier_particleinstance(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Axis", "Pole axis for rotation");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "normal", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_normal", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", eParticleInstanceFlag_Parents);
RNA_def_property_ui_text(prop, "Normal", "Create instances from normal particles");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "children", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_children", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", eParticleInstanceFlag_Children);
RNA_def_property_ui_text(prop, "Children", "Create instances from child particles");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1605,27 +1645,27 @@ static void rna_def_modifier_particleinstance(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Path", "Create instances along particle paths");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "unborn", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_unborn", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", eParticleInstanceFlag_Unborn);
RNA_def_property_ui_text(prop, "Unborn", "Show instances when particles are unborn");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "alive", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_alive", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", eParticleInstanceFlag_Alive);
RNA_def_property_ui_text(prop, "Alive", "Show instances when particles are alive");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "dead", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_dead", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", eParticleInstanceFlag_Dead);
RNA_def_property_ui_text(prop, "Dead", "Show instances when particles are dead");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "keep_shape", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_preserve_shape", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", eParticleInstanceFlag_KeepShape);
RNA_def_property_ui_text(prop, "Keep Shape", "Don't stretch the object");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "size", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_size", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", eParticleInstanceFlag_UseSize);
RNA_def_property_ui_text(prop, "Size", "Use particle size to scale the instances");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1662,27 +1702,27 @@ static void rna_def_modifier_explode(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Protect", "Clean vertex group edges");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "split_edges", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_edge_split", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", eExplodeFlag_EdgeSplit);
RNA_def_property_ui_text(prop, "Split Edges", "Split face edges for nicer shrapnel");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "unborn", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_unborn", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", eExplodeFlag_Unborn);
RNA_def_property_ui_text(prop, "Unborn", "Show mesh when particles are unborn");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "alive", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_alive", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", eExplodeFlag_Alive);
RNA_def_property_ui_text(prop, "Alive", "Show mesh when particles are alive");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "dead", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_dead", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", eExplodeFlag_Dead);
RNA_def_property_ui_text(prop, "Dead", "Show mesh when particles are dead");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "size", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_size", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", eExplodeFlag_PaSize);
RNA_def_property_ui_text(prop, "Size", "Use particle size for the shrapnel");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1762,7 +1802,7 @@ static void rna_def_modifier_collision(BlenderRNA *brna)
prop= RNA_def_property(srna, "settings", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "CollisionSettings");
- RNA_def_property_pointer_funcs(prop, "rna_CollisionModifier_settings_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_CollisionModifier_settings_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Settings", "");
}
@@ -1795,7 +1835,7 @@ static void rna_def_modifier_bevel(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Width", "Bevel value/amount");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "only_vertices", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_only_vertices", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", BME_BEVEL_VERT);
RNA_def_property_ui_text(prop, "Only Vertices", "Bevel verts/corners, not edges");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1812,7 +1852,7 @@ static void rna_def_modifier_bevel(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Edge Weight Method", "What edge weight to use for weighting a vertex");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "angle", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "angle_limit", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "bevel_angle");
RNA_def_property_range(prop, 0, 180);
RNA_def_property_ui_range(prop, 0, 180, 100, 2);
@@ -1836,7 +1876,7 @@ static void rna_def_modifier_shrinkwrap(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "ShrinkwrapModifierData");
RNA_def_struct_ui_icon(srna, ICON_MOD_SHRINKWRAP);
- prop= RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "wrap_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "shrinkType");
RNA_def_property_enum_items(prop, shrink_type_items);
RNA_def_property_ui_text(prop, "Mode", "");
@@ -1844,14 +1884,14 @@ static void rna_def_modifier_shrinkwrap(BlenderRNA *brna)
prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "Target", "Mesh target to shrink to");
- RNA_def_property_pointer_funcs(prop, NULL, "rna_ShrinkwrapModifier_target_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_ShrinkwrapModifier_target_set", NULL, "rna_Mesh_object_poll");
RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop= RNA_def_property(srna, "auxiliary_target", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "auxTarget");
RNA_def_property_ui_text(prop, "Auxiliary Target", "Additional mesh target to shrink to");
- RNA_def_property_pointer_funcs(prop, NULL, "rna_ShrinkwrapModifier_auxiliary_target_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_ShrinkwrapModifier_auxiliary_target_set", NULL, "rna_Mesh_object_poll");
RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
@@ -1868,17 +1908,17 @@ static void rna_def_modifier_shrinkwrap(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Offset", "Distance to keep from the target");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "x", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_project_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "projAxis", MOD_SHRINKWRAP_PROJECT_OVER_X_AXIS);
RNA_def_property_ui_text(prop, "X", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_project_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "projAxis", MOD_SHRINKWRAP_PROJECT_OVER_Y_AXIS);
RNA_def_property_ui_text(prop, "Y", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "z", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_project_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "projAxis", MOD_SHRINKWRAP_PROJECT_OVER_Z_AXIS);
RNA_def_property_ui_text(prop, "Z", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1890,27 +1930,27 @@ static void rna_def_modifier_shrinkwrap(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Subsurf Levels", "Number of subdivisions that must be performed before extracting vertices' positions and normals");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "negative", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_negative_direction", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "shrinkOpts", MOD_SHRINKWRAP_PROJECT_ALLOW_NEG_DIR);
RNA_def_property_ui_text(prop, "Negative", "Allow vertices to move in the negative direction of axis");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "positive", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_positive_direction", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "shrinkOpts", MOD_SHRINKWRAP_PROJECT_ALLOW_POS_DIR);
RNA_def_property_ui_text(prop, "Positive", "Allow vertices to move in the positive direction of axis");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "cull_front_faces", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cull_front_faces", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "shrinkOpts", MOD_SHRINKWRAP_CULL_TARGET_FRONTFACE);
RNA_def_property_ui_text(prop, "Cull Front Faces", "Stop vertices from projecting to a front face on the target");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "cull_back_faces", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cull_back_faces", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "shrinkOpts", MOD_SHRINKWRAP_CULL_TARGET_BACKFACE);
RNA_def_property_ui_text(prop, "Cull Back Faces", "Stop vertices from projecting to a back face on the target");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "keep_above_surface", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_keep_above_surface", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "shrinkOpts", MOD_SHRINKWRAP_KEEP_ABOVE_SURFACE);
RNA_def_property_ui_text(prop, "Keep Above Surface", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1955,7 +1995,7 @@ static void rna_def_modifier_mask(BlenderRNA *brna)
prop= RNA_def_property(srna, "armature", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "ob_arm");
RNA_def_property_ui_text(prop, "Armature", "Armature to use as source of bones to mask");
- RNA_def_property_pointer_funcs(prop, NULL, "rna_MaskModifier_armature_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_MaskModifier_armature_set", NULL, "rna_Armature_object_poll");
RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
@@ -1965,7 +2005,7 @@ static void rna_def_modifier_mask(BlenderRNA *brna)
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_MaskModifier_vgroup_set");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "invert", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MASK_INV);
RNA_def_property_ui_text(prop, "Invert", "Use vertices that are not part of region defined");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1988,7 +2028,8 @@ static void rna_def_modifier_simpledeform(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "SimpleDeformModifierData");
RNA_def_struct_ui_icon(srna, ICON_MOD_SIMPLEDEFORM);
- prop= RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "deform_method", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "mode");
RNA_def_property_enum_items(prop, simple_deform_mode_items);
RNA_def_property_ui_text(prop, "Mode", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -2004,14 +2045,14 @@ static void rna_def_modifier_simpledeform(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
- prop= RNA_def_property(srna, "relative", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_relative", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "originOpts", MOD_SIMPLEDEFORM_ORIGIN_LOCAL);
RNA_def_property_ui_text(prop, "Relative", "Sets the origin of deform space to be relative to the object");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
prop= RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
- RNA_def_property_ui_range(prop, -10, 10, 0.5, 2);
+ RNA_def_property_ui_range(prop, -10, 10, 1, 3);
RNA_def_property_ui_text(prop, "Factor", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -2023,12 +2064,12 @@ static void rna_def_modifier_simpledeform(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Limits", "Lower/Upper limits for deform");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "lock_x_axis", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "axis", MOD_SIMPLEDEFORM_LOCK_AXIS_X);
RNA_def_property_ui_text(prop, "Lock X Axis", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "lock_y_axis", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "axis", MOD_SIMPLEDEFORM_LOCK_AXIS_Y);
RNA_def_property_ui_text(prop, "Lock Y Axis", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -2061,7 +2102,7 @@ static void rna_def_modifier_solidify(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Thickness", "Thickness of the shell");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "offset", PROP_FLOAT, PROP_DISTANCE);
+ prop= RNA_def_property(srna, "offset", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, NULL, "offset_fac");
RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
RNA_def_property_ui_range(prop, -1, 1, 0.1, 4);
@@ -2115,7 +2156,7 @@ static void rna_def_modifier_solidify(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "High Quality Normals", "Calculate normals which result in more even thickness (slow, disable when not needed)");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "invert", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_SOLIDIFY_VGROUP_INV);
RNA_def_property_ui_text(prop, "Vertex Group Invert", "Invert the vertex group influence");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -2228,30 +2269,30 @@ void RNA_def_modifier(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Type", "");
/* flags */
- prop= RNA_def_property(srna, "realtime", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_viewport", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", eModifierMode_Realtime);
RNA_def_property_ui_text(prop, "Realtime", "Realtime display of a modifier");
RNA_def_property_flag(prop, PROP_LIB_EXCEPTION);
RNA_def_property_update(prop, 0, "rna_Modifier_update");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_VIEW_OFF, 0);
- prop= RNA_def_property(srna, "render", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_render", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", eModifierMode_Render);
RNA_def_property_ui_text(prop, "Render", "Use modifier during rendering");
RNA_def_property_ui_icon(prop, ICON_SCENE, 0);
- prop= RNA_def_property(srna, "editmode", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_in_editmode", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", eModifierMode_Editmode);
RNA_def_property_ui_text(prop, "Editmode", "Use modifier while in the edit mode");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
RNA_def_property_ui_icon(prop, ICON_EDITMODE_HLT, 0);
- prop= RNA_def_property(srna, "on_cage", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_on_cage", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", eModifierMode_OnCage);
RNA_def_property_ui_text(prop, "On Cage", "Enable direct editing of modifier control cage");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", eModifierMode_Expanded);
RNA_def_property_ui_text(prop, "Expanded", "Set modifier expanded in the user interface");
RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
diff --git a/source/blender/makesrna/intern/rna_nla.c b/source/blender/makesrna/intern/rna_nla.c
index 8f2a1484b9b..9fc6c481f12 100644
--- a/source/blender/makesrna/intern/rna_nla.c
+++ b/source/blender/makesrna/intern/rna_nla.c
@@ -314,7 +314,7 @@ static void rna_def_nlastrip(BlenderRNA *brna)
RNA_def_property_enum_items(prop, nla_mode_extend_items);
RNA_def_property_ui_text(prop, "Extrapolation", "Action to take for gaps past the strip extents");
- prop= RNA_def_property(srna, "blending", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "blend_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "blendmode");
RNA_def_property_enum_items(prop, nla_mode_blend_items);
RNA_def_property_ui_text(prop, "Blending", "Method used for combining strip's result with accumulated result");
@@ -343,7 +343,7 @@ static void rna_def_nlastrip(BlenderRNA *brna)
RNA_def_property_float_funcs(prop, NULL, "rna_NlaStrip_blend_out_set", NULL);
RNA_def_property_ui_text(prop, "Blend Out", "");
- prop= RNA_def_property(srna, "auto_blending", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_blend", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", NLASTRIP_FLAG_AUTO_BLENDS);
RNA_def_property_ui_text(prop, "Auto Blend In/Out", "Number of frames for Blending In/Out is automatically determined from overlapping strips");
@@ -401,17 +401,17 @@ static void rna_def_nlastrip(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Strip Time", "Frame of referenced Action to evaluate");
// TODO: should the animated_influence/time settings be animatable themselves?
- prop= RNA_def_property(srna, "animated_influence", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_animated_influence", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", NLASTRIP_FLAG_USR_INFLUENCE);
RNA_def_property_boolean_funcs(prop, NULL, "rna_NlaStrip_animated_influence_set");
RNA_def_property_ui_text(prop, "Animated Influence", "Influence setting is controlled by an F-Curve rather than automatically determined");
- prop= RNA_def_property(srna, "animated_time", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_animated_time", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", NLASTRIP_FLAG_USR_TIME);
RNA_def_property_boolean_funcs(prop, NULL, "rna_NlaStrip_animated_time_set");
RNA_def_property_ui_text(prop, "Animated Strip Time", "Strip time is controlled by an F-Curve rather than automatically determined");
- prop= RNA_def_property(srna, "animated_time_cyclic", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_animated_time_cyclic", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", NLASTRIP_FLAG_USR_TIME_CYCLIC);
RNA_def_property_ui_text(prop, "Cyclic Strip Time", "Cycle the animated time within the action start & end");
RNA_def_property_update(prop, 0, "rna_NlaStrip_transform_update"); // is there a better update flag?
@@ -422,15 +422,15 @@ static void rna_def_nlastrip(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flag", NLASTRIP_FLAG_ACTIVE);
RNA_def_property_ui_text(prop, "Active", "NLA Strip is active");
- prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", NLASTRIP_FLAG_SELECT);
- RNA_def_property_ui_text(prop, "Selected", "NLA Strip is selected");
+ RNA_def_property_ui_text(prop, "Select", "NLA Strip is selected");
- prop= RNA_def_property(srna, "muted", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", NLASTRIP_FLAG_MUTED);
RNA_def_property_ui_text(prop, "Muted", "NLA Strip is not evaluated");
- prop= RNA_def_property(srna, "reversed", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_reverse", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", NLASTRIP_FLAG_REVERSE);
RNA_def_property_ui_text(prop, "Reversed", "NLA Strip is played back in reverse order (only when timing is automatically determined)");
@@ -463,20 +463,20 @@ static void rna_def_nlatrack(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flag", NLATRACK_ACTIVE);
RNA_def_property_ui_text(prop, "Active", "NLA Track is active");
- prop= RNA_def_property(srna, "solo", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_solo", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* can be made editable by hooking it up to the necessary NLA API methods */
RNA_def_property_boolean_sdna(prop, NULL, "flag", NLATRACK_SOLO);
RNA_def_property_ui_text(prop, "Solo", "NLA Track is evaluated itself (i.e. active Action and all other NLA Tracks in the same AnimData block are disabled)");
- prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", NLATRACK_SELECTED);
- RNA_def_property_ui_text(prop, "Selected", "NLA Track is selected");
+ RNA_def_property_ui_text(prop, "Select", "NLA Track is selected");
- prop= RNA_def_property(srna, "muted", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", NLATRACK_MUTED);
RNA_def_property_ui_text(prop, "Muted", "NLA Track is not evaluated");
- prop= RNA_def_property(srna, "locked", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", NLATRACK_PROTECTED);
RNA_def_property_ui_text(prop, "Locked", "NLA Track is locked");
}
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index 5ebf43fc2b7..0fb79de8c65 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -139,6 +139,24 @@ static void rna_Matte_t2_set(PointerRNA *ptr, float value)
chroma->t2 = value;
}
+static void rna_Image_start_frame_set(PointerRNA *ptr, int value)
+{
+ bNode *node= (bNode*)ptr->data;
+ NodeImageFile *image = node->storage;
+
+ CLAMP(value, MINFRAME, image->efra);
+ image->sfra= value;
+}
+
+static void rna_Image_end_frame_set(PointerRNA *ptr, int value)
+{
+ bNode *node= (bNode*)ptr->data;
+ NodeImageFile *image = node->storage;
+
+ CLAMP(value, image->sfra, MAXFRAME);
+ image->efra= value;
+}
+
static void node_update(Main *bmain, Scene *scene, bNodeTree *ntree, bNode *node)
{
ED_node_generic_update(bmain, scene, ntree, node);
@@ -638,12 +656,12 @@ static void def_time(StructRNA *srna)
RNA_def_property_ui_text(prop, "Curve", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "start", PROP_INT, PROP_NONE);
+ prop = RNA_def_property(srna, "frame_start", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "custom1");
RNA_def_property_ui_text(prop, "Start Frame", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "end", PROP_INT, PROP_NONE);
+ prop = RNA_def_property(srna, "frame_end", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "custom2");
RNA_def_property_ui_text(prop, "End Frame", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -670,7 +688,7 @@ static void def_mix_rgb(StructRNA *srna)
RNA_def_property_ui_text(prop, "Blend Type", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "alpha", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_alpha", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "custom2", 1);
RNA_def_property_ui_text(prop, "Alpha", "Include alpha of second input in this operation");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -707,12 +725,12 @@ static void def_sh_material(StructRNA *srna)
RNA_def_property_ui_text(prop, "Material", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "diffuse", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_diffuse", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "custom1", SH_NODE_MAT_DIFF);
RNA_def_property_ui_text(prop, "Diffuse", "Material Node outputs Diffuse");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "specular", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_specular", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "custom1", SH_NODE_MAT_SPEC);
RNA_def_property_ui_text(prop, "Specular", "Material Node outputs Specular");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -747,23 +765,23 @@ static void def_sh_mapping(StructRNA *srna)
RNA_def_property_ui_range(prop, -10.f, 10.f, 0.1f, 2);
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_mapping_update");
- prop = RNA_def_property(srna, "clamp_minimum", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_min", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TEXMAP_CLIP_MIN);
RNA_def_property_ui_text(prop, "Clamp Minimum", "Clamp the output coordinate to a minimum value");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop= RNA_def_property(srna, "minimum", PROP_FLOAT, PROP_XYZ);
+ prop= RNA_def_property(srna, "min", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "min");
RNA_def_property_ui_text(prop, "Minimum", "Minimum value to clamp coordinate to");
RNA_def_property_ui_range(prop, -10.f, 10.f, 0.1f, 2);
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "clamp_maximum", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_max", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TEXMAP_CLIP_MAX);
RNA_def_property_ui_text(prop, "Clamp Maximum", "Clamp the output coordinate to a maximum value");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop= RNA_def_property(srna, "maximum", PROP_FLOAT, PROP_XYZ);
+ prop= RNA_def_property(srna, "max", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "max");
RNA_def_property_ui_text(prop, "Maximum", "Maximum value to clamp coordinate to");
RNA_def_property_ui_range(prop, -10.f, 10.f, 0.1f, 2);
@@ -795,7 +813,7 @@ static void def_cmp_alpha_over(StructRNA *srna)
PropertyRNA *prop;
// XXX: Tooltip
- prop = RNA_def_property(srna, "convert_premul", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_premultiply", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "custom1", 1);
RNA_def_property_ui_text(prop, "Convert Premul", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -815,19 +833,19 @@ static void def_cmp_hue_saturation(StructRNA *srna)
RNA_def_struct_sdna_from(srna, "NodeHueSat", "storage");
- prop = RNA_def_property(srna, "hue", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "color_hue", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "hue");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Hue", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "sat", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "color_saturation", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "sat");
RNA_def_property_range(prop, 0.0f, 2.0f);
RNA_def_property_ui_text(prop, "Saturation", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "val", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "color_value", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "val");
RNA_def_property_range(prop, 0.0f, 2.0f);
RNA_def_property_ui_text(prop, "Value", "");
@@ -851,19 +869,19 @@ static void def_cmp_blur(StructRNA *srna)
RNA_def_struct_sdna_from(srna, "NodeBlurData", "storage");
- prop = RNA_def_property(srna, "sizex", PROP_INT, PROP_NONE);
+ prop = RNA_def_property(srna, "size_x", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "sizex");
RNA_def_property_range(prop, 0, 256);
RNA_def_property_ui_text(prop, "Size X", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "sizey", PROP_INT, PROP_NONE);
+ prop = RNA_def_property(srna, "size_y", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "sizey");
RNA_def_property_range(prop, 0, 256);
RNA_def_property_ui_text(prop, "Size Y", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "relative", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_relative", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "relative", 1);
RNA_def_property_ui_text(prop, "Relative", "Use relative (percent) values to define blur radius");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -892,12 +910,12 @@ static void def_cmp_blur(StructRNA *srna)
RNA_def_property_ui_text(prop, "Filter Type", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "bokeh", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_bokeh", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "bokeh", 1);
RNA_def_property_ui_text(prop, "Bokeh", "Uses circular filter (slower)");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "gamma", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_gamma_correction", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gamma", 1);
RNA_def_property_ui_text(prop, "Gamma", "Applies filter on gamma corrected values");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -968,25 +986,29 @@ static void def_cmp_vector_blur(StructRNA *srna)
prop = RNA_def_property(srna, "samples", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "samples");
+ RNA_def_property_range(prop, 1, 256);
RNA_def_property_ui_text(prop, "Samples", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "min_speed", PROP_INT, PROP_NONE);
+ prop = RNA_def_property(srna, "speed_min", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "minspeed");
+ RNA_def_property_range(prop, 0, 1024);
RNA_def_property_ui_text(prop, "Min Speed", "Minimum speed for a pixel to be blurred; used to separate background from foreground");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "max_speed", PROP_INT, PROP_NONE);
+ prop = RNA_def_property(srna, "speed_max", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "maxspeed");
+ RNA_def_property_range(prop, 0, 1024);
RNA_def_property_ui_text(prop, "Max Speed", "Maximum speed, or zero for none");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "fac");
+ RNA_def_property_range(prop, 0.0f, 2.0f);
RNA_def_property_ui_text(prop, "Blur Factor", "Scaling factor for motion vectors; actually 'shutter speed' in frames");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "curved", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_curved", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "curved", 1);
RNA_def_property_ui_text(prop, "Curved", "Interpolate between frames in a bezier curve, rather than linearly");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -1033,30 +1055,30 @@ static void def_cmp_image(StructRNA *srna)
RNA_def_struct_sdna_from(srna, "ImageUser", "storage");
- prop = RNA_def_property(srna, "frames", PROP_INT, PROP_NONE);
+ prop = RNA_def_property(srna, "frame_duration", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "frames");
RNA_def_property_range(prop, 1, MAXFRAMEF);
RNA_def_property_ui_text(prop, "Frames", "Number of images used in animation");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "start", PROP_INT, PROP_NONE);
+ prop = RNA_def_property(srna, "frame_start", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "sfra");
RNA_def_property_range(prop, 1, MAXFRAMEF);
RNA_def_property_ui_text(prop, "Start Frame", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "offset", PROP_INT, PROP_NONE);
+ prop = RNA_def_property(srna, "frame_offset", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "offset");
RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF);
RNA_def_property_ui_text(prop, "Offset", "Offsets the number of the frame to use in the animation");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "cyclic", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_cyclic", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "cycl", 1);
RNA_def_property_ui_text(prop, "Cyclic", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "auto_refresh", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_auto_refresh", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", IMA_ANIM_ALWAYS);
RNA_def_property_ui_text(prop, "Auto-Refresh", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -1126,7 +1148,7 @@ static void def_cmp_output_file(StructRNA *srna)
RNA_def_property_ui_text(prop, "Image Type", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "exr_half", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_exr_half", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "subimtype", R_OPENEXR_HALF);
RNA_def_property_ui_text(prop, "Half", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -1142,16 +1164,17 @@ static void def_cmp_output_file(StructRNA *srna)
RNA_def_property_range(prop, 1, 100);
RNA_def_property_ui_text(prop, "Quality", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
-
- // TODO: should these be limited to the extents of the each other so that no cross-over occurs?
+
prop = RNA_def_property(srna, "frame_start", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "sfra");
+ RNA_def_property_int_funcs(prop, NULL, "rna_Image_start_frame_set", NULL);
RNA_def_property_range(prop, MINFRAMEF, MAXFRAMEF);
RNA_def_property_ui_text(prop, "Start Frame", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
prop = RNA_def_property(srna, "frame_end", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "efra");
+ RNA_def_property_int_funcs(prop, NULL, "rna_Image_end_frame_set", NULL);
RNA_def_property_range(prop, MINFRAMEF, MAXFRAMEF);
RNA_def_property_ui_text(prop, "End Frame", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -1196,7 +1219,7 @@ static void def_cmp_rotate(StructRNA *srna)
{2, "BICUBIC", 0, "Bicubic", ""},
{0, NULL, 0, NULL, NULL}};
- prop = RNA_def_property(srna, "filter", PROP_ENUM, PROP_NONE);
+ prop = RNA_def_property(srna, "filter_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "custom1");
RNA_def_property_enum_items(prop, rotate_items);
RNA_def_property_ui_text(prop, "Filter", "Method to use to filter rotation");
@@ -1230,19 +1253,19 @@ static void def_cmp_color_matte(StructRNA *srna)
RNA_def_struct_sdna_from(srna, "NodeChroma", "storage");
- prop = RNA_def_property(srna, "h", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "color_hue", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "t1");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "H", "Hue tolerance for colors to be considered a keying color");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "s", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "color_saturation", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "t2");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "S", "Saturation Tolerance for the color");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "v", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "color_value", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "t3");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "V", "Value Tolerance for the color");
@@ -1297,7 +1320,7 @@ static void def_cmp_color_spill(StructRNA *srna)
RNA_def_property_ui_text(prop, "Channel", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "algorithm", PROP_ENUM, PROP_NONE);
+ prop = RNA_def_property(srna, "limit_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "custom2");
RNA_def_property_enum_items(prop, algorithm_items);
RNA_def_property_ui_text(prop, "Algorithm", "");
@@ -1317,7 +1340,7 @@ static void def_cmp_color_spill(StructRNA *srna)
RNA_def_property_ui_text(prop, "Ratio", "Scale limit by value");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "unspill", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_unspill", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "unspill", 0);
RNA_def_property_ui_text(prop, "Unspill", "Compensate all channels (diffenrently) by hand");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -1347,14 +1370,14 @@ static void def_cmp_luma_matte(StructRNA *srna)
RNA_def_struct_sdna_from(srna, "NodeChroma", "storage");
- prop = RNA_def_property(srna, "high", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "limit_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "t1");
RNA_def_property_float_funcs(prop, NULL, "rna_Matte_t1_set", NULL);
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "High", "Values higher than this setting are 100% opaque");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "low", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "limit_min", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "t2");
RNA_def_property_float_funcs(prop, NULL, "rna_Matte_t2_set", NULL);
RNA_def_property_range(prop, 0.0f, 1.0f);
@@ -1368,14 +1391,14 @@ static void def_cmp_chroma_matte(StructRNA *srna)
RNA_def_struct_sdna_from(srna, "NodeChroma", "storage");
- prop = RNA_def_property(srna, "acceptance", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "tolerance", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "t1");
RNA_def_property_float_funcs(prop, NULL, "rna_Matte_t1_set", NULL);
RNA_def_property_range(prop, 1.0f, 80.0f);
RNA_def_property_ui_text(prop, "Acceptance", "Tolerance for a color to be considered a keying color");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "cutoff", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "threshold", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "t2");
RNA_def_property_float_funcs(prop, NULL, "rna_Matte_t2_set", NULL);
RNA_def_property_range(prop, 0.0f, 30.0f);
@@ -1423,7 +1446,7 @@ static void def_cmp_channel_matte(StructRNA *srna)
RNA_def_property_ui_text(prop, "Color Space", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop= RNA_def_property(srna, "channel", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "matte_channel", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "custom2");
RNA_def_property_enum_items(prop, prop_tri_channel_items);
RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Node_channel_itemf");
@@ -1432,7 +1455,7 @@ static void def_cmp_channel_matte(StructRNA *srna)
RNA_def_struct_sdna_from(srna, "NodeChroma", "storage");
- prop = RNA_def_property(srna, "algorithm", PROP_ENUM, PROP_NONE);
+ prop = RNA_def_property(srna, "limit_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "algorithm");
RNA_def_property_enum_items(prop, algorithm_items);
RNA_def_property_ui_text(prop, "Algorithm", "Algorithm to use to limit channel");
@@ -1445,14 +1468,14 @@ static void def_cmp_channel_matte(StructRNA *srna)
RNA_def_property_ui_text(prop, "Limit Channel", "Limit by this channels value");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "high", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "limit_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "t1");
RNA_def_property_float_funcs(prop, NULL, "rna_Matte_t1_set", NULL);
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "High", "Values higher than this setting are 100% opaque");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "low", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "limit_min", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "t2");
RNA_def_property_float_funcs(prop, NULL, "rna_Matte_t2_set", NULL);
RNA_def_property_range(prop, 0.0f, 1.0f);
@@ -1544,7 +1567,7 @@ static void def_cmp_defocus(StructRNA *srna)
RNA_def_property_ui_text(prop, "Angle", "Bokeh shape rotation offset in degrees");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "gamma_correction", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_gamma_correction", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gamco", 1);
RNA_def_property_ui_text(prop, "Gamma Correction", "Enable gamma correction before and after main process");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -1556,7 +1579,7 @@ static void def_cmp_defocus(StructRNA *srna)
RNA_def_property_ui_text(prop, "fStop", "Amount of focal blur, 128=infinity=perfect focus, half the value doubles the blur radius");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "max_blur", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "blur_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "maxblur");
RNA_def_property_range(prop, 0.0f, 10000.0f);
RNA_def_property_ui_text(prop, "Max Blur", "blur limit, maximum CoC radius, 0=no limit");
@@ -1568,7 +1591,7 @@ static void def_cmp_defocus(StructRNA *srna)
RNA_def_property_ui_text(prop, "Threshold", "CoC radius threshold, prevents background bleed on in-focus midground, 0=off");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "preview", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_preview", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "preview", 1);
RNA_def_property_ui_text(prop, "Preview", "Enable sampling mode, useful for preview when using low samplecounts");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -1595,12 +1618,12 @@ static void def_cmp_invert(StructRNA *srna)
{
PropertyRNA *prop;
- prop = RNA_def_property(srna, "rgb", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "invert_rgb", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "custom1", CMP_CHAN_RGB);
RNA_def_property_ui_text(prop, "RGB", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "alpha", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "invert_alpha", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "custom1", CMP_CHAN_A);
RNA_def_property_ui_text(prop, "Alpha", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -1610,32 +1633,32 @@ static void def_cmp_crop(StructRNA *srna)
{
PropertyRNA *prop;
- prop = RNA_def_property(srna, "crop_size", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_crop_size", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "custom1", 1);
RNA_def_property_ui_text(prop, "Crop Image Size", "Whether to crop the size of the input image");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
RNA_def_struct_sdna_from(srna, "NodeTwoXYs", "storage");
- prop = RNA_def_property(srna, "x1", PROP_INT, PROP_NONE);
+ prop = RNA_def_property(srna, "min_x", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "x1");
RNA_def_property_range(prop, 0, 10000);
RNA_def_property_ui_text(prop, "X1", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "x2", PROP_INT, PROP_NONE);
+ prop = RNA_def_property(srna, "max_x", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "x2");
RNA_def_property_range(prop, 0, 10000);
RNA_def_property_ui_text(prop, "X2", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "y1", PROP_INT, PROP_NONE);
+ prop = RNA_def_property(srna, "min_y", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "y1");
RNA_def_property_range(prop, 0, 10000);
RNA_def_property_ui_text(prop, "Y1", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "y2", PROP_INT, PROP_NONE);
+ prop = RNA_def_property(srna, "max_y", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "y2");
RNA_def_property_range(prop, 0, 10000);
RNA_def_property_ui_text(prop, "Y2", "");
@@ -1654,7 +1677,7 @@ static void def_cmp_dblur(StructRNA *srna)
RNA_def_property_ui_text(prop, "Iterations", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "wrap", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_wrap", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "wrap", 1);
RNA_def_property_ui_text(prop, "Wrap", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -1811,7 +1834,7 @@ static void def_cmp_glare(StructRNA *srna)
RNA_def_property_ui_text(prop, "Fade", "Streak fade-out factor");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "rotate_45", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_rotate_45", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "angle", 1);
RNA_def_property_ui_text(prop, "Rotate 45", "Simple star filter: add 45 degree rotation offset");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -1891,17 +1914,17 @@ static void def_cmp_lensdist(StructRNA *srna)
RNA_def_struct_sdna_from(srna, "NodeLensDist", "storage");
- prop = RNA_def_property(srna, "projector", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_projector", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "proj", 1);
RNA_def_property_ui_text(prop, "Projector", "Enable/disable projector mode. Effect is applied in horizontal direction only");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "jitter", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_jitter", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "jit", 1);
RNA_def_property_ui_text(prop, "Jitter", "Enable/disable jittering; faster, but also noisier");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "fit", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_fit", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "fit", 1);
RNA_def_property_ui_text(prop, "Fit", "For positive distortion factor only: scale image such that black areas are not visible");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -1917,7 +1940,7 @@ static void def_cmp_colorbalance(StructRNA *srna)
{1, "OFFSET_POWER_SLOPE", 0, "Offset/Power/Slope (ASC-CDL)", "ASC-CDL standard color correction"},
{0, NULL, 0, NULL, NULL}};
- prop = RNA_def_property(srna, "correction_formula", PROP_ENUM, PROP_NONE);
+ prop = RNA_def_property(srna, "correction_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "custom1");
RNA_def_property_enum_items(prop, type_items);
RNA_def_property_ui_text(prop, "Correction Formula", "");
@@ -1994,7 +2017,7 @@ static void def_tex_output(StructRNA *srna)
RNA_def_struct_sdna_from(srna, "TexNodeOutput", "storage");
- prop = RNA_def_property(srna, "output_name", PROP_STRING, PROP_NONE);
+ prop = RNA_def_property(srna, "filepath", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "name");
RNA_def_property_ui_text(prop, "Output Name", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c
index 26e1cd1d5da..e61044776ca 100644
--- a/source/blender/makesrna/intern/rna_object.c
+++ b/source/blender/makesrna/intern/rna_object.c
@@ -124,25 +124,28 @@ EnumPropertyItem object_type_curve_items[] = {
#include "BKE_mesh.h"
#include "BKE_particle.h"
#include "BKE_scene.h"
+#include "BKE_deform.h"
#include "BLI_editVert.h" /* for EditMesh->mat_nr */
#include "ED_mesh.h"
#include "ED_object.h"
#include "ED_particle.h"
+#include "ED_curve.h"
+#include "ED_lattice.h"
-void rna_Object_internal_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+static void rna_Object_internal_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
DAG_id_flush_update(ptr->id.data, OB_RECALC_OB);
}
-void rna_Object_matrix_world_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+static void rna_Object_matrix_world_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
object_apply_mat4(ptr->id.data, ((Object *)ptr->id.data)->obmat);
rna_Object_internal_update(bmain, scene, ptr);
}
-void rna_Object_matrix_local_get(PointerRNA *ptr, float values[16])
+static void rna_Object_matrix_local_get(PointerRNA *ptr, float values[16])
{
Object *ob= ptr->id.data;
@@ -156,7 +159,7 @@ void rna_Object_matrix_local_get(PointerRNA *ptr, float values[16])
}
}
-void rna_Object_matrix_local_set(PointerRNA *ptr, const float values[16])
+static void rna_Object_matrix_local_set(PointerRNA *ptr, const float values[16])
{
Object *ob= ptr->id.data;
@@ -184,12 +187,24 @@ void rna_Object_internal_update_data(Main *bmain, Scene *scene, PointerRNA *ptr)
void rna_Object_active_shape_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
Object *ob= ptr->id.data;
- int editmode= (scene->obedit == ob && ob->type == OB_MESH);
- if(editmode) {
+ if(scene->obedit == ob) {
/* exit/enter editmode to get new shape */
- EDBM_LoadEditBMesh(scene, ob);
- EDBM_MakeEditBMesh(scene->toolsettings, scene, ob);
+ switch(ob->type) {
+ case OB_MESH:
+ EDBM_LoadEditBMesh(scene, ob);
+ EDBM_MakeEditBMesh(scene->toolsettings, scene, ob);
+ break;
+ case OB_CURVE:
+ case OB_SURF:
+ load_editNurb(ob);
+ make_editNurb(ob);
+ break;
+ case OB_LATTICE:
+ load_editLatt(ob);
+ make_editLatt(ob);
+ break;
+ }
}
rna_Object_internal_update_data(bmain, scene, ptr);
@@ -198,7 +213,7 @@ void rna_Object_active_shape_update(Main *bmain, Scene *scene, PointerRNA *ptr)
static void rna_Object_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
DAG_id_flush_update(ptr->id.data, OB_RECALC_OB);
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
}
/* when changing the selection flag the scene needs updating */
@@ -216,7 +231,7 @@ static void rna_Base_select_update(Main *bmain, Scene *scene, PointerRNA *ptr)
ED_base_object_select(base, mode);
}
-static void rna_Object_layer_update__internal(Scene *scene, Base *base, Object *ob)
+static void rna_Object_layer_update__internal(Main *bmain, Scene *scene, Base *base, Object *ob)
{
/* try to avoid scene sort */
if((ob->lay & scene->lay) && (base->lay & scene->lay)) {
@@ -224,7 +239,7 @@ static void rna_Object_layer_update__internal(Scene *scene, Base *base, Object *
} else if((ob->lay & scene->lay)==0 && (base->lay & scene->lay)==0) {
/* pass */
} else {
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
}
}
@@ -239,7 +254,7 @@ static void rna_Object_layer_update(Main *bmain, Scene *scene, PointerRNA *ptr)
SWAP(int, base->lay, ob->lay);
- rna_Object_layer_update__internal(scene, base, ob);
+ rna_Object_layer_update__internal(bmain, scene, base, ob);
ob->lay= base->lay;
}
@@ -248,7 +263,7 @@ static void rna_Base_layer_update(Main *bmain, Scene *scene, PointerRNA *ptr)
Base *base= (Base*)ptr->data;
Object *ob= (Object*)base->object;
- rna_Object_layer_update__internal(scene, base, ob);
+ rna_Object_layer_update__internal(bmain, scene, base, ob);
ob->lay= base->lay;
}
@@ -436,32 +451,19 @@ int rna_object_vgroup_name_index_length(PointerRNA *ptr, int index)
void rna_object_vgroup_name_index_set(PointerRNA *ptr, const char *value, short *index)
{
Object *ob= (Object*)ptr->id.data;
- bDeformGroup *dg;
- int a;
-
- for(a=1, dg=ob->defbase.first; dg; dg=dg->next, a++) {
- if(strcmp(dg->name, value) == 0) {
- *index= a;
- return;
- }
- }
-
- *index= 0;
+ *index= defgroup_name_index(ob, value) + 1;
}
void rna_object_vgroup_name_set(PointerRNA *ptr, const char *value, char *result, int maxlen)
{
Object *ob= (Object*)ptr->id.data;
- bDeformGroup *dg;
-
- for(dg=ob->defbase.first; dg; dg=dg->next) {
- if(strcmp(dg->name, value) == 0) {
- BLI_strncpy(result, value, maxlen);
- return;
- }
+ bDeformGroup *dg= defgroup_find_name(ob, value);
+ if(dg) {
+ BLI_strncpy(result, value, maxlen);
+ return;
}
- BLI_strncpy(result, "", maxlen);
+ result[0]= '\0';
}
void rna_object_uvlayer_name_set(PointerRNA *ptr, const char *value, char *result, int maxlen)
@@ -1033,12 +1035,12 @@ static int rna_Object_constraint_remove(Object *object, int index)
static ModifierData *rna_Object_modifier_new(Object *object, bContext *C, ReportList *reports, char *name, int type)
{
- return ED_object_modifier_add(reports, CTX_data_scene(C), object, name, type);
+ return ED_object_modifier_add(reports, CTX_data_main(C), CTX_data_scene(C), object, name, type);
}
static void rna_Object_modifier_remove(Object *object, bContext *C, ReportList *reports, ModifierData *md)
{
- ED_object_modifier_remove(reports, CTX_data_scene(C), object, md);
+ ED_object_modifier_remove(reports, CTX_data_main(C), CTX_data_scene(C), object, md);
}
static void rna_Object_boundbox_get(PointerRNA *ptr, float *values)
@@ -1054,6 +1056,32 @@ static void rna_Object_boundbox_get(PointerRNA *ptr, float *values)
}
+/* generic poll functions */
+int rna_Lattice_object_poll(PointerRNA *ptr, PointerRNA value)
+{
+ return ((Object *)value.id.data)->type == OB_LATTICE;
+}
+
+int rna_Curve_object_poll(PointerRNA *ptr, PointerRNA value)
+{
+ return ((Object *)value.id.data)->type == OB_CURVE;
+}
+
+int rna_Armature_object_poll(PointerRNA *ptr, PointerRNA value)
+{
+ return ((Object *)value.id.data)->type == OB_ARMATURE;
+}
+
+int rna_Mesh_object_poll(PointerRNA *ptr, PointerRNA value)
+{
+ return ((Object *)value.id.data)->type == OB_MESH;
+}
+
+int rna_Camera_object_poll(PointerRNA *ptr, PointerRNA value)
+{
+ return ((Object *)value.id.data)->type == OB_CAMERA;
+}
+
#else
static void rna_def_vertex_group(BlenderRNA *brna)
@@ -1098,7 +1126,7 @@ static void rna_def_material_slot(BlenderRNA *brna)
prop= RNA_def_property(srna, "material", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Material");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_pointer_funcs(prop, "rna_MaterialSlot_material_get", "rna_MaterialSlot_material_set", NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_MaterialSlot_material_get", "rna_MaterialSlot_material_set", NULL, NULL);
RNA_def_property_ui_text(prop, "Material", "Material datablock used by this material slot");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_internal_update");
@@ -1176,11 +1204,11 @@ static void rna_def_object_game_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Physics Type", "Selects the type of physical representation");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "actor", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_actor", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gameflag", OB_ACTOR);
RNA_def_property_ui_text(prop, "Actor", "Object is detected by the Near and Radar sensor");
- prop= RNA_def_property(srna, "ghost", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_ghost", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gameflag", OB_GHOST);
RNA_def_property_ui_text(prop, "Ghost", "Object does not restitute collisions, like a ghost");
@@ -1194,7 +1222,7 @@ static void rna_def_object_game_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Radius", "Radius of bounding sphere and material physics");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
- prop= RNA_def_property(srna, "no_sleeping", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_sleep", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gameflag", OB_COLLISION_RESPONSE);
RNA_def_property_ui_text(prop, "No Sleeping", "Disable auto (de)activation in physics simulation");
@@ -1208,40 +1236,40 @@ static void rna_def_object_game_settings(BlenderRNA *brna)
RNA_def_property_range(prop, 0.0, 1.0);
RNA_def_property_ui_text(prop, "Rotation Damping", "General rotation damping");
- prop= RNA_def_property(srna, "minimum_velocity", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "velocity_min", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "min_vel");
RNA_def_property_range(prop, 0.0, 1000.0);
RNA_def_property_ui_text(prop, "Velocity Min", "Clamp velocity to this minimum speed (except when totally still)");
- prop= RNA_def_property(srna, "maximum_velocity", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "velocity_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "max_vel");
RNA_def_property_range(prop, 0.0, 1000.0);
RNA_def_property_ui_text(prop, "Velocity Max", "Clamp velocity to this maximum speed");
/* lock position */
- prop= RNA_def_property(srna, "lock_x_axis", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock_location_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gameflag2", OB_LOCK_RIGID_BODY_X_AXIS);
RNA_def_property_ui_text(prop, "Lock X Axis", "Disable simulation of linear motion along the X axis");
- prop= RNA_def_property(srna, "lock_y_axis", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock_location_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gameflag2", OB_LOCK_RIGID_BODY_Y_AXIS);
RNA_def_property_ui_text(prop, "Lock Y Axis", "Disable simulation of linear motion along the Y axis");
- prop= RNA_def_property(srna, "lock_z_axis", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock_location_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gameflag2", OB_LOCK_RIGID_BODY_Z_AXIS);
RNA_def_property_ui_text(prop, "Lock Z Axis", "Disable simulation of linear motion along the Z axis");
/* lock rotation */
- prop= RNA_def_property(srna, "lock_x_rot_axis", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock_rotation_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gameflag2", OB_LOCK_RIGID_BODY_X_ROT_AXIS);
RNA_def_property_ui_text(prop, "Lock X Rotation Axis", "Disable simulation of angular motion along the X axis");
- prop= RNA_def_property(srna, "lock_y_rot_axis", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock_rotation_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gameflag2", OB_LOCK_RIGID_BODY_Y_ROT_AXIS);
RNA_def_property_ui_text(prop, "Lock Y Rotation Axis", "Disable simulation of angular motion along the Y axis");
- prop= RNA_def_property(srna, "lock_z_rot_axis", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock_rotation_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gameflag2", OB_LOCK_RIGID_BODY_Z_ROT_AXIS);
RNA_def_property_ui_text(prop, "Lock Z Rotation Axis", "Disable simulation of angular motion along the Z axis");
@@ -1251,11 +1279,11 @@ static void rna_def_object_game_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Lock Z Rotation Axis", "Disable simulation of angular motion along the Z axis");
- prop= RNA_def_property(srna, "material_physics", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_material_physics", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gameflag", OB_DO_FH);
RNA_def_property_ui_text(prop, "Use Material Physics", "Use physics settings in materials");
- prop= RNA_def_property(srna, "rotate_from_normal", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_rotate_from_normal", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gameflag", OB_ROT_FH);
RNA_def_property_ui_text(prop, "Rotate From Normal", "Use face normal to rotate object, so that it points away from the surface");
@@ -1264,7 +1292,7 @@ static void rna_def_object_game_settings(BlenderRNA *brna)
RNA_def_property_range(prop, 0.0, 1.0);
RNA_def_property_ui_text(prop, "Form Factor", "Form factor scales the inertia tensor");
- prop= RNA_def_property(srna, "anisotropic_friction", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_anisotropic_friction", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gameflag", OB_ANISOTROPIC_FRICTION);
RNA_def_property_ui_text(prop, "Anisotropic Friction", "Enable anisotropic friction");
@@ -1277,14 +1305,14 @@ static void rna_def_object_game_settings(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "gameflag", OB_BOUNDS);
RNA_def_property_ui_text(prop, "Use Collision Bounds", "Specify a collision bounds type other than the default");
- prop= RNA_def_property(srna, "collision_bounds", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "collision_bounds_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "boundtype");
RNA_def_property_enum_items(prop, collision_bounds_items);
RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Object_collision_bounds_itemf");
RNA_def_property_ui_text(prop, "Collision Bounds", "Selects the collision type");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
- prop= RNA_def_property(srna, "collision_compound", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_collision_compound", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gameflag", OB_CHILD);
RNA_def_property_ui_text(prop, "Collision Compound", "Add children to form a compound collision object");
@@ -1299,29 +1327,29 @@ static void rna_def_object_game_settings(BlenderRNA *brna)
/* state */
- prop= RNA_def_property(srna, "visible_state", PROP_BOOLEAN, PROP_LAYER_MEMBER);
+ prop= RNA_def_property(srna, "states_visible", PROP_BOOLEAN, PROP_LAYER_MEMBER);
RNA_def_property_boolean_sdna(prop, NULL, "state", 1);
RNA_def_property_array(prop, OB_MAX_STATES);
RNA_def_property_ui_text(prop, "State", "State determining which controllers are displayed");
RNA_def_property_boolean_funcs(prop, "rna_GameObjectSettings_state_get", "rna_GameObjectSettings_state_set");
- prop= RNA_def_property(srna, "used_state", PROP_BOOLEAN, PROP_LAYER_MEMBER);
+ prop= RNA_def_property(srna, "used_states", PROP_BOOLEAN, PROP_LAYER_MEMBER);
RNA_def_property_array(prop, OB_MAX_STATES);
RNA_def_property_ui_text(prop, "Used State", "States which are being used by controllers");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_funcs(prop, "rna_GameObjectSettings_used_state_get", NULL);
- prop= RNA_def_property(srna, "initial_state", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "states_initial", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "init_state", 1);
RNA_def_property_array(prop, OB_MAX_STATES);
RNA_def_property_ui_text(prop, "Initial State", "Initial state when the game starts");
- prop= RNA_def_property(srna, "debug_state", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_debug_state", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", OB_DEBUGSTATE);
RNA_def_property_ui_text(prop, "Debug State", "Print state debug info in the game engine");
RNA_def_property_ui_icon(prop, ICON_INFO, 0);
- prop= RNA_def_property(srna, "all_states", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_all_states", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", OB_ALLSTATE);
RNA_def_property_ui_text(prop, "All", "Set all state bits");
@@ -1348,7 +1376,7 @@ static void rna_def_object_constraints(BlenderRNA *brna, PropertyRNA *cprop)
/* Collection active property */
prop= RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Constraint");
- RNA_def_property_pointer_funcs(prop, "rna_Object_active_constraint_get", "rna_Object_active_constraint_set", NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Object_active_constraint_get", "rna_Object_active_constraint_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Active Constraint", "Active Object constraint");
@@ -1393,7 +1421,7 @@ static void rna_def_object_modifiers(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Active EditBone", "Armatures active edit bone");
//RNA_def_property_update(prop, 0, "rna_Armature_act_editbone_update");
- RNA_def_property_pointer_funcs(prop, NULL, "rna_Armature_act_edit_bone_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_Armature_act_edit_bone_set", NULL, NULL);
/* todo, redraw */
// RNA_def_property_collection_active(prop, prop_act);
@@ -1435,7 +1463,6 @@ static void rna_def_object(BlenderRNA *brna)
{OB_MBALL, "META", 0, "Meta", ""},
{OB_LAMP, "LAMP", 0, "Lamp", ""},
{OB_CAMERA, "CAMERA", 0, "Camera", ""},
- {OB_WAVE, "WAVE", 0, "Wave", ""},
{OB_LATTICE, "LATTICE", 0, "Lattice", ""},
{OB_ARMATURE, "ARMATURE", 0, "Armature", ""},
{0, NULL, 0, NULL, NULL}};
@@ -1514,7 +1541,7 @@ static void rna_def_object(BlenderRNA *brna)
prop= RNA_def_property(srna, "data", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "ID");
- RNA_def_property_pointer_funcs(prop, NULL, "rna_Object_data_set", "rna_Object_data_typef");
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_Object_data_set", "rna_Object_data_typef", NULL);
RNA_def_property_editable_func(prop, "rna_Object_data_editable");
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Data", "Object data");
@@ -1540,9 +1567,9 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_LIB_EXCEPTION);
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_layer_update");
- prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SELECT);
- RNA_def_property_ui_text(prop, "Selected", "Object selection state");
+ RNA_def_property_ui_text(prop, "Select", "Object selection state");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_select_update");
/* for data access */
@@ -1554,7 +1581,7 @@ static void rna_def_object(BlenderRNA *brna)
/* parent */
prop= RNA_def_property(srna, "parent", PROP_POINTER, PROP_NONE);
- RNA_def_property_pointer_funcs(prop, NULL, "rna_Object_parent_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_Object_parent_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
RNA_def_property_ui_text(prop, "Parent", "Parent Object");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_dependency_update");
@@ -1609,7 +1636,7 @@ static void rna_def_object(BlenderRNA *brna)
prop= RNA_def_property(srna, "active_material", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Material");
- RNA_def_property_pointer_funcs(prop, "rna_Object_active_material_get", "rna_Object_active_material_set", NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Object_active_material_get", "rna_Object_active_material_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Active Material", "Active material being displayed");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_internal_update");
@@ -1763,7 +1790,7 @@ static void rna_def_object(BlenderRNA *brna)
prop= RNA_def_property(srna, "game", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "GameObjectSettings");
- RNA_def_property_pointer_funcs(prop, "rna_Object_game_settings_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Object_game_settings_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Game Settings", "Game engine related settings for the object");
/* vertex groups */
@@ -1774,7 +1801,7 @@ static void rna_def_object(BlenderRNA *brna)
prop= RNA_def_property(srna, "active_vertex_group", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "VertexGroup");
- RNA_def_property_pointer_funcs(prop, "rna_Object_active_vertex_group_get", "rna_Object_active_vertex_group_set", NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Object_active_vertex_group_get", "rna_Object_active_vertex_group_set", NULL, NULL);
RNA_def_property_ui_text(prop, "Active Vertex Group", "Vertex groups of the object");
RNA_def_property_update(prop, NC_GEOM|ND_DATA, "rna_Object_internal_update_data");
@@ -1813,13 +1840,13 @@ static void rna_def_object(BlenderRNA *brna)
prop= RNA_def_property(srna, "field", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "pd");
RNA_def_property_struct_type(prop, "FieldSettings");
- RNA_def_property_pointer_funcs(prop, "rna_Object_field_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Object_field_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Field Settings", "Settings for using the objects as a field in physics simulation");
prop= RNA_def_property(srna, "collision", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "pd");
RNA_def_property_struct_type(prop, "CollisionSettings");
- RNA_def_property_pointer_funcs(prop, "rna_Object_collision_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Object_collision_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Collision Settings", "Settings for using the objects as a collider in physics simulation");
prop= RNA_def_property(srna, "soft_body", PROP_POINTER, PROP_NONE);
@@ -1834,7 +1861,7 @@ static void rna_def_object(BlenderRNA *brna)
prop= RNA_def_property(srna, "active_particle_system", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "ParticleSystem");
- RNA_def_property_pointer_funcs(prop, "rna_Object_active_particle_system_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Object_active_particle_system_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Active Particle System", "Active particle system being displayed");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
@@ -1844,19 +1871,19 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_particle_update");
/* restrict */
- prop= RNA_def_property(srna, "restrict_view", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "restrictflag", OB_RESTRICT_VIEW);
RNA_def_property_ui_text(prop, "Restrict View", "Restrict visibility in the viewport");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_VIEW_OFF, 1);
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
- prop= RNA_def_property(srna, "restrict_select", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "hide_select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "restrictflag", OB_RESTRICT_SELECT);
RNA_def_property_ui_text(prop, "Restrict Select", "Restrict selection in the viewport");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_SELECT_OFF, 1);
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
- prop= RNA_def_property(srna, "restrict_render", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "hide_render", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "restrictflag", OB_RESTRICT_RENDER);
RNA_def_property_ui_text(prop, "Restrict Render", "Restrict renderability");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, 1);
@@ -1870,7 +1897,7 @@ static void rna_def_object(BlenderRNA *brna)
/* duplicates */
// XXX: evil old crap
- prop= RNA_def_property(srna, "slow_parent", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_slow_parent", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "partype", PARSLOW);
RNA_def_property_ui_text(prop, "Slow Parent", "Create a delay in the parent relationship");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_internal_update");
@@ -1886,7 +1913,7 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Dupli Frames Speed", "Set dupliframes to use the frame"); // TODO, better descriptio!
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_internal_update");
- prop= RNA_def_property(srna, "use_dupli_verts_rotation", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_dupli_vertices_rotation", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "transflag", OB_DUPLIROT);
RNA_def_property_ui_text(prop, "Dupli Verts Rotation", "Rotate dupli according to vertex normal");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
@@ -1939,7 +1966,7 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "DupliObject");
RNA_def_property_ui_text(prop, "Dupli list", "Object duplis");
- prop= RNA_def_property(srna, "duplis_used", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_duplicator", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "transflag", OB_DUPLI);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
@@ -1950,33 +1977,33 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Time Offset", "Animation offset in frames for F-Curve and dupligroup instances");
RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update");
- prop= RNA_def_property(srna, "time_offset_edit", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_time_offset_edit", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ipoflag", OB_OFFS_OB);
RNA_def_property_ui_text(prop, "Time Offset Edit", "Use time offset when inserting keys and display time offset for F-Curve and action views");
- prop= RNA_def_property(srna, "time_offset_parent", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_time_offset_parent", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ipoflag", OB_OFFS_PARENT);
RNA_def_property_ui_text(prop, "Time Offset Parent", "Apply the time offset to this objects parent relationship");
RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update");
- prop= RNA_def_property(srna, "time_offset_particle", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_time_offset_particle", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ipoflag", OB_OFFS_PARTICLE);
RNA_def_property_ui_text(prop, "Time Offset Particle", "Let the time offset work on the particle effect");
RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update");
- prop= RNA_def_property(srna, "time_offset_add_parent", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_time_offset_add_parent", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ipoflag", OB_OFFS_PARENTADD);
RNA_def_property_ui_text(prop, "Time Offset Add Parent", "Add the parents time offset value");
RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update");
/* drawing */
- prop= RNA_def_property(srna, "max_draw_type", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "draw_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "dt");
RNA_def_property_enum_items(prop, drawtype_items);
RNA_def_property_ui_text(prop, "Maximum Draw Type", "Maximum draw type to display object with in viewport");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
- prop= RNA_def_property(srna, "draw_bounds", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_bounds", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dtx", OB_BOUNDBOX);
RNA_def_property_ui_text(prop, "Draw Bounds", "Displays the object's bounds");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
@@ -1987,32 +2014,32 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Draw Bounds Type", "Object boundary display type");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
- prop= RNA_def_property(srna, "draw_name", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_name", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dtx", OB_DRAWNAME);
RNA_def_property_ui_text(prop, "Draw Name", "Displays the object's name");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
- prop= RNA_def_property(srna, "draw_axis", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_axis", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dtx", OB_AXIS);
RNA_def_property_ui_text(prop, "Draw Axis", "Displays the object's origin and axis");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
- prop= RNA_def_property(srna, "draw_texture_space", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_texture_space", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dtx", OB_TEXSPACE);
RNA_def_property_ui_text(prop, "Draw Texture Space", "Displays the object's texture space");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
- prop= RNA_def_property(srna, "draw_wire", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_wire", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dtx", OB_DRAWWIRE);
RNA_def_property_ui_text(prop, "Draw Wire", "Adds the object's wireframe over solid drawing");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
- prop= RNA_def_property(srna, "draw_transparent", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_transparent", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dtx", OB_DRAWTRANSP);
RNA_def_property_ui_text(prop, "Draw Transparent", "Enables transparent materials for the object (Mesh only)");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
- prop= RNA_def_property(srna, "x_ray", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_x_ray", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dtx", OB_DRAWXRAY);
RNA_def_property_ui_text(prop, "X-Ray", "Makes the object draw in front of others");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
@@ -2036,13 +2063,13 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Pose", "Current pose for armatures");
/* shape keys */
- prop= RNA_def_property(srna, "shape_key_lock", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_shape_key", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "shapeflag", OB_SHAPE_LOCK);
RNA_def_property_ui_text(prop, "Shape Key Lock", "Always show the current Shape for this Object");
RNA_def_property_ui_icon(prop, ICON_UNPINNED, 1);
RNA_def_property_update(prop, 0, "rna_Object_internal_update_data");
- prop= RNA_def_property(srna, "shape_key_edit_mode", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_shape_key_edit_mode", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "shapeflag", OB_SHAPE_EDIT_MODE);
RNA_def_property_ui_text(prop, "Shape Key Edit Mode", "Apply shape keys in edit mode (for Meshes only)");
RNA_def_property_ui_icon(prop, ICON_EDITMODE_HLT, 0);
@@ -2050,7 +2077,7 @@ static void rna_def_object(BlenderRNA *brna)
prop= RNA_def_property(srna, "active_shape_key", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "ShapeKey");
- RNA_def_property_pointer_funcs(prop, "rna_Object_active_shape_key_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Object_active_shape_key_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Active Shape Key", "Current shape key");
prop= RNA_def_property(srna, "active_shape_key_index", PROP_INT, PROP_NONE);
@@ -2075,13 +2102,13 @@ static void rna_def_dupli_object(BlenderRNA *brna)
prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "ob");
- /* RNA_def_property_pointer_funcs(prop, "rna_DupliObject_object_get", NULL, NULL); */
+ /* RNA_def_property_pointer_funcs(prop, "rna_DupliObject_object_get", NULL, NULL, NULL); */
RNA_def_property_ui_text(prop, "Object", "Object being duplicated");
- prop= RNA_def_property(srna, "object_matrix", PROP_FLOAT, PROP_MATRIX);
+ prop= RNA_def_property(srna, "matrix_original", PROP_FLOAT, PROP_MATRIX);
RNA_def_property_float_sdna(prop, NULL, "omat");
RNA_def_property_array(prop, 16);
- RNA_def_property_ui_text(prop, "Object Matrix", "Duplicated object transformation matrix");
+ RNA_def_property_ui_text(prop, "Object Matrix", "The original matrix of this object before it was duplicated");
prop= RNA_def_property(srna, "matrix", PROP_FLOAT, PROP_MATRIX);
RNA_def_property_float_sdna(prop, NULL, "mat");
@@ -2113,9 +2140,9 @@ static void rna_def_object_base(BlenderRNA *brna)
RNA_def_property_boolean_funcs(prop, NULL, "rna_Base_layer_set");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Base_layer_update");
- prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BA_SELECT);
- RNA_def_property_ui_text(prop, "Selected", "Object base selection state");
+ RNA_def_property_ui_text(prop, "Select", "Object base selection state");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Base_select_update");
RNA_api_object_base(srna);
diff --git a/source/blender/makesrna/intern/rna_object_force.c b/source/blender/makesrna/intern/rna_object_force.c
index 97c429209de..1eadd0e7676 100644
--- a/source/blender/makesrna/intern/rna_object_force.c
+++ b/source/blender/makesrna/intern/rna_object_force.c
@@ -294,6 +294,29 @@ static void rna_Cache_active_point_cache_index_set(struct PointerRNA *ptr, int v
BLI_freelistN(&pidlist);
}
+static void rna_PointCache_frame_step_range(PointerRNA *ptr, int *min, int *max)
+{
+ Object *ob = ptr->id.data;
+ PointCache *cache= ptr->data;
+ PTCacheID *pid;
+ ListBase pidlist;
+
+ *min= 1;
+ *max= 20;
+
+ BKE_ptcache_ids_from_object(&pidlist, ob, NULL, 0);
+
+ for(pid=pidlist.first; pid; pid=pid->next) {
+ if(pid->cache == cache) {
+ if(ELEM3(pid->type, PTCACHE_TYPE_CLOTH, PTCACHE_TYPE_SMOKE_DOMAIN, PTCACHE_TYPE_SMOKE_HIGHRES))
+ *max= 1;
+ break;
+ }
+ }
+
+ BLI_freelistN(&pidlist);
+}
+
static char *rna_CollisionSettings_path(PointerRNA *ptr)
{
Object *ob= (Object*)ptr->id.data;
@@ -487,11 +510,11 @@ static void rna_FieldSettings_shape_update(Main *bmain, Scene *scene, PointerRNA
if(!md) {
if(pd && (pd->shape == PFIELD_SHAPE_SURFACE) && ELEM(pd->forcefield,PFIELD_GUIDE,PFIELD_TEXTURE)==0)
if(ELEM4(ob->type, OB_MESH, OB_SURF, OB_FONT, OB_CURVE))
- ED_object_modifier_add(NULL, scene, ob, NULL, eModifierType_Surface);
+ ED_object_modifier_add(NULL, bmain, scene, ob, NULL, eModifierType_Surface);
}
else {
if(!pd || pd->shape != PFIELD_SHAPE_SURFACE)
- ED_object_modifier_remove(NULL, scene, ob, md);
+ ED_object_modifier_remove(NULL, bmain, scene, ob, md);
}
WM_main_add_notifier(NC_OBJECT|ND_DRAW, ob);
@@ -515,7 +538,7 @@ static void rna_FieldSettings_dependency_update(Main *bmain, Scene *scene, Point
rna_FieldSettings_shape_update(bmain, scene, ptr);
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
if(ob->type == OB_CURVE && ob->pd->forcefield == PFIELD_GUIDE)
DAG_id_flush_update(&ob->id, OB_RECALC_ALL);
@@ -559,7 +582,7 @@ static void rna_EffectorWeight_update(Main *bmain, Scene *scene, PointerRNA *ptr
static void rna_EffectorWeight_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
DAG_id_flush_update((ID*)ptr->id.data, OB_RECALC_DATA|PSYS_RECALC_RESET);
@@ -617,9 +640,9 @@ static void rna_CollisionSettings_dependency_update(Main *bmain, Scene *scene, P
/* add/remove modifier as needed */
if(ob->pd->deflect && !md)
- ED_object_modifier_add(NULL, scene, ob, NULL, eModifierType_Collision);
+ ED_object_modifier_add(NULL, bmain, scene, ob, NULL, eModifierType_Collision);
else if(!ob->pd->deflect && md)
- ED_object_modifier_remove(NULL, scene, ob, md);
+ ED_object_modifier_remove(NULL, bmain, scene, ob, md);
WM_main_add_notifier(NC_OBJECT|ND_DRAW, ob);
}
@@ -670,7 +693,6 @@ static EnumPropertyItem *rna_Effector_shape_itemf(bContext *C, PointerRNA *ptr,
}
}
-
#else
static void rna_def_pointcache(BlenderRNA *brna)
@@ -692,8 +714,10 @@ static void rna_def_pointcache(BlenderRNA *brna)
RNA_def_property_range(prop, 1, MAXFRAME);
RNA_def_property_ui_text(prop, "End", "Frame on which the simulation stops");
- prop= RNA_def_property(srna, "step", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "frame_step", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "step");
RNA_def_property_range(prop, 1, 20);
+ RNA_def_property_int_funcs(prop, NULL, NULL, "rna_PointCache_frame_step_range");
RNA_def_property_ui_text(prop, "Cache Step", "Number of frames between cached frames");
RNA_def_property_update(prop, NC_OBJECT, "rna_Cache_change");
@@ -704,20 +728,20 @@ static void rna_def_pointcache(BlenderRNA *brna)
RNA_def_property_update(prop, NC_OBJECT, "rna_Cache_idname_change");
/* flags */
- prop= RNA_def_property(srna, "baked", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_baked", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PTCACHE_BAKED);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "baking", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_baking", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PTCACHE_BAKING);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "disk_cache", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_disk_cache", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PTCACHE_DISK_CACHE);
RNA_def_property_ui_text(prop, "Disk Cache", "Save cache files to disk (.blend file must be saved first)");
RNA_def_property_update(prop, NC_OBJECT, "rna_Cache_toggle_disk_cache");
- prop= RNA_def_property(srna, "outdated", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_outdated", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PTCACHE_OUTDATED);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Cache is outdated", "");
@@ -737,7 +761,7 @@ static void rna_def_pointcache(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "File Path", "Cache file path");
RNA_def_property_update(prop, NC_OBJECT, "rna_Cache_idname_change");
- prop= RNA_def_property(srna, "quick_cache", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_quick_cache", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PTCACHE_QUICK_CACHE);
RNA_def_property_ui_text(prop, "Quick Cache", "Update simulation with cache steps");
RNA_def_property_update(prop, NC_OBJECT, "rna_Cache_change");
@@ -747,7 +771,7 @@ static void rna_def_pointcache(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Cache Info", "Info on current cache status");
- prop= RNA_def_property(srna, "external", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_external", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PTCACHE_EXTERNAL);
RNA_def_property_ui_text(prop, "External", "Read cache from an external location");
RNA_def_property_update(prop, NC_OBJECT, "rna_Cache_idname_change");
@@ -757,7 +781,7 @@ static void rna_def_pointcache(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Library Path", "Use this files path when library linked into another file.");
RNA_def_property_update(prop, NC_OBJECT, "rna_Cache_idname_change");
- prop= RNA_def_property(srna, "point_cache_list", PROP_COLLECTION, PROP_NONE);
+ prop= RNA_def_property(srna, "point_caches", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_funcs(prop, "rna_Cache_list_begin", "rna_iterator_listbase_next", "rna_iterator_listbase_end", "rna_iterator_listbase_get", 0, 0, 0);
RNA_def_property_struct_type(prop, "PointCache");
RNA_def_property_ui_text(prop, "Point Cache List", "Point cache list");
@@ -778,7 +802,7 @@ static void rna_def_collision(BlenderRNA *brna)
RNA_def_struct_path_func(srna, "rna_CollisionSettings_path");
RNA_def_struct_ui_text(srna, "Collision Settings", "Collision settings for object in physics simulation");
- prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "deflect", 1);
RNA_def_property_ui_text(prop, "Enabled", "Enable this objects as a collider for physics systems");
RNA_def_property_update(prop, 0, "rna_CollisionSettings_dependency_update");
@@ -791,7 +815,7 @@ static void rna_def_collision(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Damping Factor", "Amount of damping during particle collision");
RNA_def_property_update(prop, 0, "rna_CollisionSettings_update");
- prop= RNA_def_property(srna, "random_damping", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "damping_random", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "pdef_rdamp");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Random Damping", "Random variation of damping");
@@ -803,7 +827,7 @@ static void rna_def_collision(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Friction Factor", "Amount of friction during particle collision");
RNA_def_property_update(prop, 0, "rna_CollisionSettings_update");
- prop= RNA_def_property(srna, "random_friction", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "friction_random", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "pdef_rfrict");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Random Friction", "Random variation of friction");
@@ -815,7 +839,7 @@ static void rna_def_collision(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Permeability", "Chance that the particle will pass through the mesh");
RNA_def_property_update(prop, 0, "rna_CollisionSettings_update");
- prop= RNA_def_property(srna, "kill_particles", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_particle_kill", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PDEFLE_KILL_PART);
RNA_def_property_ui_text(prop, "Kill Particles", "Kill collided particles");
RNA_def_property_update(prop, 0, "rna_CollisionSettings_update");
@@ -828,13 +852,13 @@ static void rna_def_collision(BlenderRNA *brna)
/* Soft Body and Cloth Interaction */
- prop= RNA_def_property(srna, "inner_thickness", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "thickness_inner", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "pdef_sbift");
RNA_def_property_range(prop, 0.001f, 1.0f);
RNA_def_property_ui_text(prop, "Inner Thickness", "Inner face thickness");
RNA_def_property_update(prop, 0, "rna_CollisionSettings_update");
- prop= RNA_def_property(srna, "outer_thickness", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "thickness_outer", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "pdef_sboft");
RNA_def_property_range(prop, 0.001f, 1.0f);
RNA_def_property_ui_text(prop, "Outer Thickness", "Outer face thickness");
@@ -872,7 +896,7 @@ static void rna_def_effector_weight(BlenderRNA *brna)
RNA_def_struct_ui_icon(srna, ICON_PHYSICS);
/* Flags */
- prop= RNA_def_property(srna, "do_growing_hair", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "apply_to_hair_growing", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", EFF_WEIGHT_DO_HAIR);
RNA_def_property_ui_text(prop, "Use For Growing Hair", "Use force fields when growing hair");
RNA_def_property_update(prop, 0, "rna_EffectorWeight_update");
@@ -926,7 +950,7 @@ static void rna_def_effector_weight(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Wind", "Wind effector weight");
RNA_def_property_update(prop, 0, "rna_EffectorWeight_update");
- prop= RNA_def_property(srna, "curveguide", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "curve_guide", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "weight[5]");
RNA_def_property_range(prop, -200.0f, 200.0f);
RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1, 3);
@@ -1135,25 +1159,25 @@ static void rna_def_field(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Falloff Power", "Falloff power (real gravitational falloff = 2)");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
- prop= RNA_def_property(srna, "minimum_distance", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "distance_min", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "mindist");
RNA_def_property_range(prop, 0.0f, 1000.0f);
RNA_def_property_ui_text(prop, "Minimum Distance", "Minimum distance for the field's fall-off");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
- prop= RNA_def_property(srna, "maximum_distance", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "distance_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "maxdist");
RNA_def_property_range(prop, 0.0f, 1000.0f);
RNA_def_property_ui_text(prop, "Maximum Distance", "Maximum distance for the field to work");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
- prop= RNA_def_property(srna, "radial_minimum", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "radial_min", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "minrad");
RNA_def_property_range(prop, 0.0f, 1000.0f);
RNA_def_property_ui_text(prop, "Minimum Radial Distance", "Minimum radial distance for the field's fall-off");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
- prop= RNA_def_property(srna, "radial_maximum", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "radial_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "maxrad");
RNA_def_property_range(prop, 0.0f, 1000.0f);
RNA_def_property_ui_text(prop, "Maximum Radial Distance", "Maximum radial distance for the field to work");
@@ -1206,42 +1230,42 @@ static void rna_def_field(BlenderRNA *brna)
// "Use a maximum angle for the field to work"
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
- prop= RNA_def_property(srna, "use_coordinates", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_object_coords", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PFIELD_TEX_OBJECT);
RNA_def_property_ui_text(prop, "Use Coordinates", "Use object/global coordinates for texture");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
- prop= RNA_def_property(srna, "global_coordinates", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_global_coords", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PFIELD_GLOBAL_CO);
RNA_def_property_ui_text(prop, "Use Global Coordinates", "Use effector/global coordinates for turbulence");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
- prop= RNA_def_property(srna, "force_2d", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_2d_force", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PFIELD_TEX_2D);
RNA_def_property_ui_text(prop, "2D", "Apply force only in 2d");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
- prop= RNA_def_property(srna, "root_coordinates", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_root_coords", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PFIELD_TEX_ROOTCO);
RNA_def_property_ui_text(prop, "Root Texture Coordinates", "Texture coordinates from root particle locations");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
- prop= RNA_def_property(srna, "do_location", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "apply_to_location", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PFIELD_DO_LOCATION);
RNA_def_property_ui_text(prop, "Location", "Effect particles' location");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
- prop= RNA_def_property(srna, "do_rotation", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "apply_to_rotation", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PFIELD_DO_ROTATION);
RNA_def_property_ui_text(prop, "Rotation", "Effect particles' dynamic rotation");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
- prop= RNA_def_property(srna, "do_absorption", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_absorption", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PFIELD_VISIBILITY);
RNA_def_property_ui_text(prop, "Absorption", "Force gets absorbed by collision objects");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
- prop= RNA_def_property(srna, "multiple_springs", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_multiple_springs", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PFIELD_MULTIPLE_SPRINGS);
RNA_def_property_ui_text(prop, "Multiple Springs", "Every point is effected by multiple springs");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
@@ -1268,7 +1292,7 @@ static void rna_def_field(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Free", "Guide-free time from particle life's end");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
- prop= RNA_def_property(srna, "guide_path_add", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_guide_path_add", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PFIELD_GUIDE_PATH_ADD);
RNA_def_property_ui_text(prop, "Additive", "Based on distance/falloff it adds a portion of the entire path");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
@@ -1339,7 +1363,7 @@ static void rna_def_game_softbody(BlenderRNA *brna)
/* Floats */
- prop= RNA_def_property(srna, "linstiff", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "linear_stiffness", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "linStiff");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Linear Stiffness", "Linear stiffness of the soft body links");
@@ -1349,24 +1373,24 @@ static void rna_def_game_softbody(BlenderRNA *brna)
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Friction", "Dynamic Friction");
- prop= RNA_def_property(srna, "threshold", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "shape_threshold", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "kMT");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Threshold", "Shape matching threshold");
- prop= RNA_def_property(srna, "margin", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "collision_margin", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "margin");
RNA_def_property_range(prop, 0.01f, 1.0f);
RNA_def_property_ui_text(prop, "Margin", "Collision margin for soft body. Small value makes the algorithm unstable");
- prop= RNA_def_property(srna, "welding", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "weld_threshold", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "welding");
RNA_def_property_range(prop, 0.0f, 0.01f);
RNA_def_property_ui_text(prop, "Welding", "Welding threshold: distance between nearby vertices to be considered equal => set to 0.0 to disable welding test and speed up scene loading (ok if the mesh has no duplicates)");
/* Integers */
- prop= RNA_def_property(srna, "position_iterations", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "location_iterations", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "piterations");
RNA_def_property_range(prop, 0, 10);
RNA_def_property_ui_text(prop, "Position Iterations", "Position solver iterations");
@@ -1378,19 +1402,19 @@ static void rna_def_game_softbody(BlenderRNA *brna)
/* Booleans */
- prop= RNA_def_property(srna, "shape_match", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_shape_match", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", OB_BSB_SHAPE_MATCHING);
RNA_def_property_ui_text(prop, "Shape Match", "Enable soft body shape matching goal");
- prop= RNA_def_property(srna, "bending_const", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_bending_constraints", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", OB_BSB_BENDING_CONSTRAINTS);
RNA_def_property_ui_text(prop, "Bending Const", "Enable bending constraints");
- prop= RNA_def_property(srna, "cluster_rigid_to_softbody", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cluster_rigid_to_softbody", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "collisionflags", OB_BSB_COL_CL_RS);
RNA_def_property_ui_text(prop, "Rigid to Soft Body", "Enable cluster collision between soft and rigid body");
- prop= RNA_def_property(srna, "cluster_soft_to_softbody", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cluster_soft_to_softbody", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "collisionflags", OB_BSB_COL_CL_SS);
RNA_def_property_ui_text(prop, "Soft to Soft Body", "Enable cluster collision between soft and soft body");
}
@@ -1506,7 +1530,7 @@ static void rna_def_softbody(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Push", "Edge spring stiffness when shorter than rest length");
RNA_def_property_update(prop, 0, "rna_softbody_update");
- prop= RNA_def_property(srna, "damp", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "damping", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "infrict");
RNA_def_property_range(prop, 0.0f, 50.0f);
RNA_def_property_ui_text(prop, "Damp", "Edge spring friction");
@@ -1530,7 +1554,7 @@ static void rna_def_softbody(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Plastic", "Permanent deform");
RNA_def_property_update(prop, 0, "rna_softbody_update");
- prop= RNA_def_property(srna, "bending", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "bend", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "secondspring");
RNA_def_property_range(prop, 0.0f, 10.0f);
RNA_def_property_ui_text(prop, "Bending", "Bending Stiffness");
@@ -1577,19 +1601,19 @@ static void rna_def_softbody(BlenderRNA *brna)
/* Solver */
- prop= RNA_def_property(srna, "error_limit", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "error_threshold", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "rklimit");
RNA_def_property_range(prop, 0.001f, 10.0f);
RNA_def_property_ui_text(prop, "Error Limit", "The Runge-Kutta ODE solver error limit, low value gives more precision, high values speed");
RNA_def_property_update(prop, 0, "rna_softbody_update");
- prop= RNA_def_property(srna, "minstep", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "step_min", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "minloops");
RNA_def_property_range(prop, 0, 30000);
RNA_def_property_ui_text(prop, "Min Step", "Minimal # solver steps/frame");
RNA_def_property_update(prop, 0, "rna_softbody_update");
- prop= RNA_def_property(srna, "maxstep", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "step_max", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "maxloops");
RNA_def_property_range(prop, 0, 30000);
RNA_def_property_ui_text(prop, "Max Step", "Maximal # solver steps/frame");
@@ -1607,16 +1631,16 @@ static void rna_def_softbody(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Fuzzy", "Fuzziness while on collision, high values make collsion handling faster but less stable");
RNA_def_property_update(prop, 0, "rna_softbody_update");
- prop= RNA_def_property(srna, "auto_step", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_step", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "solverflags", SBSO_OLDERR);
RNA_def_property_ui_text(prop, "V", "Use velocities for automagic step sizes");
RNA_def_property_update(prop, 0, "rna_softbody_update");
- prop= RNA_def_property(srna, "diagnose", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_diagnose", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "solverflags", SBSO_MONITOR);
RNA_def_property_ui_text(prop, "Print Performance to Console", "Turn on SB diagnose console prints");
- prop= RNA_def_property(srna, "estimate_matrix", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_estimate_matrix", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "solverflags", SBSO_ESTIMATEIPO);
RNA_def_property_ui_text(prop, "Estimate matrix", "estimate matrix .. split to COM , ROT ,SCALE ");
@@ -1626,17 +1650,17 @@ static void rna_def_softbody(BlenderRNA *brna)
/* but i did not want to start a new property struct */
/* so rather rename this from SoftBodySettings to SoftBody */
/* translation */
- prop= RNA_def_property(srna, "lcom", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "location_mass_center", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_float_sdna(prop, NULL, "lcom");
RNA_def_property_ui_text(prop, "Center of mass", "Location of Center of mass");
/* matrix */
- prop= RNA_def_property(srna, "lrot", PROP_FLOAT, PROP_MATRIX);
+ prop= RNA_def_property(srna, "rotation_estimate", PROP_FLOAT, PROP_MATRIX);
RNA_def_property_float_sdna(prop, NULL, "lrot");
RNA_def_property_multi_array(prop, 2, matrix_dimsize);
RNA_def_property_ui_text(prop, "Rot Matrix", "Estimated rotation matrix");
- prop= RNA_def_property(srna, "lscale", PROP_FLOAT, PROP_MATRIX);
+ prop= RNA_def_property(srna, "scale_estimate", PROP_FLOAT, PROP_MATRIX);
RNA_def_property_float_sdna(prop, NULL, "lscale");
RNA_def_property_multi_array(prop, 2, matrix_dimsize);
RNA_def_property_ui_text(prop, "Scale Matrix", "Estimated scale matrix");
@@ -1657,18 +1681,18 @@ static void rna_def_softbody(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Use Edges", "Use Edges as springs");
RNA_def_property_update(prop, 0, "rna_softbody_update");
- prop= RNA_def_property(srna, "stiff_quads", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stiff_quads", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_SoftBodySettings_stiff_quads_get", "rna_SoftBodySettings_stiff_quads_set");
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Stiff Quads", "Adds diagonal springs on 4-gons");
RNA_def_property_update(prop, 0, "rna_softbody_update");
- prop= RNA_def_property(srna, "edge_collision", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_edge_collision", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_SoftBodySettings_edge_collision_get", "rna_SoftBodySettings_edge_collision_set");
RNA_def_property_ui_text(prop, "Edge Collision", "Edges collide too");
RNA_def_property_update(prop, 0, "rna_softbody_update");
- prop= RNA_def_property(srna, "face_collision", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_face_collision", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_SoftBodySettings_face_collision_get", "rna_SoftBodySettings_face_collision_set");
RNA_def_property_ui_text(prop, "Face Collision", "Faces collide too, can be very slow");
RNA_def_property_update(prop, 0, "rna_softbody_update");
@@ -1679,7 +1703,7 @@ static void rna_def_softbody(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Aerodynamics Type", "Method of calculating aerodynamic interaction");
RNA_def_property_update(prop, 0, "rna_softbody_update");
- prop= RNA_def_property(srna, "self_collision", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_self_collision", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_SoftBodySettings_self_collision_get", "rna_SoftBodySettings_self_collision_set");
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Self Collision", "Enable naive vertex ball self collision");
diff --git a/source/blender/makesrna/intern/rna_particle.c b/source/blender/makesrna/intern/rna_particle.c
index 74bc564064e..1151215f5f7 100644
--- a/source/blender/makesrna/intern/rna_particle.c
+++ b/source/blender/makesrna/intern/rna_particle.c
@@ -32,6 +32,7 @@
#include "rna_internal.h"
#include "DNA_modifier_types.h"
+#include "DNA_cloth_types.h"
#include "DNA_particle_types.h"
#include "DNA_object_force.h"
#include "DNA_object_types.h"
@@ -214,7 +215,7 @@ static void rna_Particle_redo(Main *bmain, Scene *scene, PointerRNA *ptr)
static void rna_Particle_redo_dependency(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
rna_Particle_redo(bmain, scene, ptr);
}
@@ -238,12 +239,25 @@ static void rna_Particle_redo_child(Main *bmain, Scene *scene, PointerRNA *ptr)
particle_recalc(bmain, scene, ptr, PSYS_RECALC_CHILD);
}
+static ParticleSystem *rna_particle_system_for_target(Object *ob, ParticleTarget *target)
+{
+ ParticleSystem *psys;
+ ParticleTarget *pt;
+
+ for(psys=ob->particlesystem.first; psys; psys=psys->next)
+ for(pt=psys->targets.first; pt; pt=pt->next)
+ if(pt == target)
+ return psys;
+
+ return NULL;
+}
+
static void rna_Particle_target_reset(Main *bmain, Scene *scene, PointerRNA *ptr)
{
if(ptr->type==&RNA_ParticleTarget) {
- ParticleTarget *pt = (ParticleTarget*)ptr->data;
Object *ob = (Object*)ptr->id.data;
- ParticleSystem *kpsys=NULL, *psys=psys_get_current(ob);
+ ParticleTarget *pt = (ParticleTarget*)ptr->data;
+ ParticleSystem *kpsys=NULL, *psys=rna_particle_system_for_target(ob, pt);
if(pt->ob==ob || pt->ob==NULL) {
kpsys = BLI_findlink(&ob->particlesystem, pt->psys-1);
@@ -266,7 +280,7 @@ static void rna_Particle_target_reset(Main *bmain, Scene *scene, PointerRNA *ptr
psys->recalc = PSYS_RECALC_RESET;
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
}
WM_main_add_notifier(NC_OBJECT|ND_PARTICLE|NA_EDITED, NULL);
@@ -276,7 +290,8 @@ static void rna_Particle_target_redo(Main *bmain, Scene *scene, PointerRNA *ptr)
{
if(ptr->type==&RNA_ParticleTarget) {
Object *ob = (Object*)ptr->id.data;
- ParticleSystem *psys = psys_get_current(ob);
+ ParticleTarget *pt = (ParticleTarget*)ptr->data;
+ ParticleSystem *psys = rna_particle_system_for_target(ob, pt);
psys->recalc = PSYS_RECALC_REDO;
@@ -301,16 +316,15 @@ static void rna_Particle_hair_dynamics(Main *bmain, Scene *scene, PointerRNA *pt
}
static PointerRNA rna_particle_settings_get(PointerRNA *ptr)
{
- Object *ob= (Object*)ptr->id.data;
- ParticleSettings *part = psys_get_current(ob)->part;
+ ParticleSystem *psys= (ParticleSystem*)ptr->data;
+ ParticleSettings *part = psys->part;
return rna_pointer_inherit_refine(ptr, &RNA_ParticleSettings, part);
}
static void rna_particle_settings_set(PointerRNA *ptr, PointerRNA value)
{
- Object *ob= (Object*)ptr->id.data;
- ParticleSystem *psys = psys_get_current(ob);
+ ParticleSystem *psys= (ParticleSystem*)ptr->data;
if(psys->part)
psys->part->id.us--;
@@ -742,12 +756,12 @@ static void rna_def_particle_hair_key(BlenderRNA *brna)
RNA_def_property_range(prop, 0.0, 1.0);
RNA_def_property_ui_text(prop, "Weight", "Weight for cloth simulation");
- prop= RNA_def_property(srna, "location", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "co", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Location (Object Space)", "Location of the hair key in object space");
RNA_def_property_float_funcs(prop, "rna_ParticleHairKey_location_object_get", "rna_ParticleHairKey_location_object_set", NULL);
- prop= RNA_def_property(srna, "location_hairspace", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "co_hair_space", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_float_sdna(prop, NULL, "co");
RNA_def_property_ui_text(prop, "Location", "Location of the hair key in its internal coordinate system, relative to the emitting face");
}
@@ -849,7 +863,7 @@ static void rna_def_particle(BlenderRNA *brna)
/* Hair & Keyed Keys */
- prop= RNA_def_property(srna, "hair", PROP_COLLECTION, PROP_NONE);
+ prop= RNA_def_property(srna, "is_hair", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "hair", "totkey");
RNA_def_property_struct_type(prop, "ParticleHairKey");
RNA_def_property_ui_text(prop, "Hair", "");
@@ -862,7 +876,7 @@ static void rna_def_particle(BlenderRNA *brna)
// float fuv[4], foffset; /* coordinates on face/edge number "num" and depth along*/
// /* face normal for volume emission */
- prop= RNA_def_property(srna, "birthtime", PROP_FLOAT, PROP_TIME);
+ prop= RNA_def_property(srna, "birth_time", PROP_FLOAT, PROP_TIME);
RNA_def_property_float_sdna(prop, NULL, "time");
// RNA_def_property_range(prop, lowerLimitf, upperLimitf);
RNA_def_property_ui_text(prop, "Birth Time", "");
@@ -888,7 +902,7 @@ static void rna_def_particle(BlenderRNA *brna)
// int totkey;
/* flag */
- prop= RNA_def_property(srna, "is_existing", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_exist", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", PARS_UNEXIST);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Exists", "");
@@ -936,7 +950,7 @@ static void rna_def_fluid_settings(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "SPH Fluid Settings", "Settings for particle fluids physics");
/* Fluid settings */
- prop= RNA_def_property(srna, "spring_k", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "spring_force", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "spring_k");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Spring", "Spring force constant");
@@ -968,13 +982,13 @@ static void rna_def_fluid_settings(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Particle_reset");
/* Double density relaxation */
- prop= RNA_def_property(srna, "stiffness_k", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "stiffness", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "stiffness_k");
RNA_def_property_range(prop, 0.0f, 100.0f);
RNA_def_property_ui_text(prop, "Stiffness ", "Constant K - Stiffness");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "stiffness_knear", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "stiffness_near", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "stiffness_knear");
RNA_def_property_range(prop, 0.0f, 100.0f);
RNA_def_property_ui_text(prop, "Repulsion", "Repulsion factor: stiffness_knear");
@@ -1058,13 +1072,14 @@ static void rna_def_particle_settings(BlenderRNA *brna)
};
//TODO: names, tooltips
+#if 0
static EnumPropertyItem rot_from_items[] = {
{PART_ROT_KEYS, "KEYS", 0, "keys", ""},
{PART_ROT_ZINCR, "ZINCR", 0, "zincr", ""},
{PART_ROT_IINCR, "IINCR", 0, "iincr", ""},
{0, NULL, 0, NULL, NULL}
};
-
+#endif
static EnumPropertyItem integrator_type_items[] = {
{PART_INT_EULER, "EULER", 0, "Euler", ""},
{PART_INT_VERLET, "VERLET", 0, "Verlet", ""},
@@ -1119,95 +1134,95 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_struct_ui_icon(srna, ICON_PARTICLE_DATA);
/* flag */
- prop= RNA_def_property(srna, "react_start_end", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_react_start_end", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_REACT_STA_END);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Start/End", "Give birth to unreacted particles eventually");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "react_multiple", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_react_multiple", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_REACT_MULTIPLE);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Multi React", "React multiple times");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "unborn", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_unborn", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_UNBORN);
RNA_def_property_ui_text(prop, "Unborn", "Show particles before they are emitted");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "died", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_dead", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_DIED);
RNA_def_property_ui_text(prop, "Died", "Show particles after they have died");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "trand", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_emit_random", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_TRAND);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Random", "Emit in random order of elements");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "even_distribution", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_even_distribution", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_EDISTR);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Even Distribution", "Use even distribution from faces based on face areas or edge lengths");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "die_on_collision", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_die_on_collision", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_DIE_ON_COL);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Die on hit", "Particles die when they collide with a deflector object");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "size_deflect", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_size_deflect", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_SIZE_DEFL);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Size Deflect", "Use particle's size in deflection");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "rotation_dynamic", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_dynamic_rotation", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_ROT_DYN);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Dynamic", "Sets rotation to dynamic/constant");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "sizemass", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_multiply_size_mass", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_SIZEMASS);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Mass from Size", "Multiply mass by particle size");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "boids_2d", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock_boids_to_surface", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_BOIDS_2D);
RNA_def_property_ui_text(prop, "Boids 2D", "Constrain boids to a surface");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "branching", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_branching", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_BRANCHING);
RNA_def_property_ui_text(prop, "Branching", "Branch child paths from each other");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "animate_branching", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_animate_branching", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_ANIM_BRANCHING);
RNA_def_property_ui_text(prop, "Animated", "Animate branching");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "symmetric_branching", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_symmetric_branching", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_SYMM_BRANCHING);
RNA_def_property_ui_text(prop, "Symmetric", "Start and end points are the same");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "hair_bspline", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_hair_bspline", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_HAIR_BSPLINE);
RNA_def_property_ui_text(prop, "B-Spline", "Interpolate hair using B-Splines");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "grid_invert", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_grid", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_GRID_INVERT);
RNA_def_property_ui_text(prop, "Invert", "Invert what is considered object and what is not");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "child_effector", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "apply_effector_to_children", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_CHILD_EFFECT);
RNA_def_property_ui_text(prop, "Children", "Apply effectors to children");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
@@ -1217,12 +1232,12 @@ static void rna_def_particle_settings(BlenderRNA *brna)
//RNA_def_property_ui_text(prop, "Use seams", "Use seams to determine parents");
//RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "child_guide", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "apply_guide_to_children", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_CHILD_GUIDE);
- RNA_def_property_ui_text(prop, "child_guide", "");
+ RNA_def_property_ui_text(prop, "apply_guide_to_children", "");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "self_effect", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_self_effect", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_SELF_EFFECT);
RNA_def_property_ui_text(prop, "Self Effect", "Particle effectors effect themselves");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
@@ -1279,7 +1294,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Particle_reset");
/*draw flag*/
- prop= RNA_def_property(srna, "velocity", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_velocity", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_VEL);
RNA_def_property_ui_text(prop, "Velocity", "Show particle velocity");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
@@ -1289,37 +1304,37 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Size", "Show particle size");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "emitter", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_render_emitter", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_EMITTER);
RNA_def_property_ui_text(prop, "Emitter", "Render emitter Object also");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "draw_health", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_health", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_HEALTH);
RNA_def_property_ui_text(prop, "Health", "Draw boid health");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "abs_path_time", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_absolute_path_time", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_ABS_PATH_TIME);
RNA_def_property_ui_text(prop, "Absolute Path Time", "Path timing is in absolute frames");
RNA_def_property_update(prop, 0, "rna_Particle_abspathtime_update");
- prop= RNA_def_property(srna, "billboard_lock", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock_billboard", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_BB_LOCK);
RNA_def_property_ui_text(prop, "Lock Billboard", "Lock the billboards align axis");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "parent", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_parent_particles", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_PARENT);
RNA_def_property_ui_text(prop, "Parents", "Render parent particles");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "num", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_number", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_NUM);
RNA_def_property_ui_text(prop, "Number", "Show particle number");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "rand_group", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_group_pick_random", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_RAND_GR);
RNA_def_property_ui_text(prop, "Pick Random", "Pick objects from group randomly");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
@@ -1334,39 +1349,39 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Use Global", "Use object's global coordinates for duplication");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "render_adaptive", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_render_adaptive", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_REN_ADAPT);
RNA_def_property_ui_text(prop, "Adaptive render", "Draw steps of the particle path");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "velocity_length", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_velocity_length", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_VEL_LENGTH);
RNA_def_property_ui_text(prop, "Speed", "Multiply line length by particle speed");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "material_color", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_material_color", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_MAT_COL);
RNA_def_property_ui_text(prop, "Material Color", "Draw particles using material's diffuse color");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "whole_group", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_whole_group", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_WHOLE_GR);
RNA_def_property_ui_text(prop, "Whole Group", "Use whole group at once");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "render_strand", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_strand_primitive", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_REN_STRAND);
RNA_def_property_ui_text(prop, "Strand render", "Use the strand primitive for rendering");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "draw_as", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "draw_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "draw_as");
RNA_def_property_enum_items(prop, part_draw_as_items);
RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Particle_draw_as_itemf");
RNA_def_property_ui_text(prop, "Particle Drawing", "How particles are drawn in viewport");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "ren_as", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "render_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "ren_as");
RNA_def_property_enum_items(prop, part_ren_as_items);
RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Particle_ren_as_itemf");
@@ -1414,12 +1429,12 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_range(prop, 0, 45);
RNA_def_property_ui_text(prop, "Degrees", "How many degrees path has to curve to make another render segment");
- prop= RNA_def_property(srna, "adaptive_pix", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "adaptive_pixel", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "adapt_pix");
RNA_def_property_range(prop, 0, 50);
RNA_def_property_ui_text(prop, "Pixel", "How many pixels path has to cover to make another render segment");
- prop= RNA_def_property(srna, "display", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "draw_percentage", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "disp");
RNA_def_property_range(prop, 0, 100);
RNA_def_property_ui_text(prop, "Display", "Percentage of particles to display in 3D view");
@@ -1432,11 +1447,13 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- //TODO: is this read only/internal?
+ // not used anywhere, why is this in DNA???
+#if 0
prop= RNA_def_property(srna, "rotate_from", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "rotfrom");
RNA_def_property_enum_items(prop, rot_from_items);
RNA_def_property_ui_text(prop, "Rotate From", "");
+#endif
prop= RNA_def_property(srna, "integrator", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, integrator_type_items);
@@ -1471,7 +1488,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_enum_items(prop, bb_anim_items);
RNA_def_property_ui_text(prop, "Animate", "How to animate billboard textures");
- prop= RNA_def_property(srna, "billboard_split_offset", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "billboard_offset_split", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "bb_split_offset");
RNA_def_property_enum_items(prop, bb_split_offset_items);
RNA_def_property_ui_text(prop, "Offset", "How to offset billboard textures");
@@ -1482,7 +1499,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Tilt", "Tilt of the billboards");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "billboard_random_tilt", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "billboard_tilt_random", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "bb_rand_tilt");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Random Tilt", "Random tilt of the billboards");
@@ -1497,11 +1514,11 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Particle_redo");
/* simplification */
- prop= RNA_def_property(srna, "enable_simplify", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_simplify", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "simplify_flag", PART_SIMPLIFY_ENABLE);
RNA_def_property_ui_text(prop, "Child Simplification", "Remove child strands as the object becomes smaller on the screen");
- prop= RNA_def_property(srna, "viewport", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_simplify_viewport", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "simplify_flag", PART_SIMPLIFY_VIEWPORT);
RNA_def_property_ui_text(prop, "Viewport", "");
@@ -1545,7 +1562,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Lifetime", "Specify the life span of the particles");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "random_lifetime", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "lifetime_random", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "randlife");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Random", "Give the particle life a random variation");
@@ -1576,7 +1593,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Stiffness", "Hair stiffness for effectors");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "amount", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "count", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_sdna(prop, NULL, "totpart");
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
/* This limit is for those freaks who have the machine power to handle it. */
@@ -1617,7 +1634,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Object", "Let the object give the particle a starting speed");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "random_factor", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "factor_random", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "randfac");//optional if prop names are the same
RNA_def_property_range(prop, 0.0f, 200.0f);
RNA_def_property_ui_range(prop, 0, 100, 1, 3);
@@ -1650,7 +1667,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Reactor", "Let the vector away from the target particles location give the particle a starting speed");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "object_aligned_factor", PROP_FLOAT, PROP_VELOCITY);
+ prop= RNA_def_property(srna, "object_align_factor", PROP_FLOAT, PROP_VELOCITY);
RNA_def_property_float_sdna(prop, NULL, "ob_vel");
RNA_def_property_array(prop, 3);
RNA_def_property_range(prop, -200.0f, 200.0f);
@@ -1671,13 +1688,13 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Phase", "Initial rotation phase");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "random_rotation_factor", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "rotation_factor_random", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "randrotfac");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Random Rotation", "Randomize rotation");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "random_phase_factor", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "phase_factor_random", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "randphasefac");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Random Phase", "Randomize rotation phase");
@@ -1697,7 +1714,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Size", "The size of the particles");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "random_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "size_random", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "randsize");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Random Size", "Give the particle size a random variation");
@@ -1724,14 +1741,14 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Brownian", "Specify the amount of Brownian motion");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "damp_factor", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "damping", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "dampfac");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Damp", "Specify the amount of damping");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
/* random length */
- prop= RNA_def_property(srna, "random_length", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "length_random", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "randlength");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Random Length", "Give path length a random variation");
@@ -1745,7 +1762,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Children Per Parent", "Amount of children/parent");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "rendered_child_nbr", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "rendered_child_count", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "ren_child_nbr");
RNA_def_property_range(prop, 0, 100000);
RNA_def_property_ui_range(prop, 0, 10000, 1, 0);
@@ -1764,7 +1781,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Child Size", "A multiplier for the child particle size");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "child_random_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "child_size_random", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "childrandsize");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Random Child Size", "Random variation to the size of the child particles");
@@ -1789,7 +1806,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Clump", "Amount of clumping");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "clumppow", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "clump_shape", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "clumppow");
RNA_def_property_range(prop, -0.999f, 0.999f);
RNA_def_property_ui_text(prop, "Shape", "Shape of clumping");
@@ -1818,46 +1835,49 @@ static void rna_def_particle_settings(BlenderRNA *brna)
/* rough */
- prop= RNA_def_property(srna, "rough1", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "roughness_1", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "rough1");
RNA_def_property_range(prop, 0.0f, 100000.0f);
RNA_def_property_ui_range(prop, 0.0f, 10.0f, 0.1, 3);
RNA_def_property_ui_text(prop, "Rough1", "Amount of location dependent rough");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "rough1_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "roughness_1_size", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "rough1_size");
RNA_def_property_range(prop, 0.01f, 100000.0f);
RNA_def_property_ui_range(prop, 0.01f, 10.0f, 0.1, 3);
RNA_def_property_ui_text(prop, "Size1", "Size of location dependent rough");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "rough2", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "roughness_2", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "rough2");
RNA_def_property_range(prop, 0.0f, 100000.0f);
RNA_def_property_ui_range(prop, 0.0f, 10.0f, 0.1, 3);
RNA_def_property_ui_text(prop, "Rough2", "Amount of random rough");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "rough2_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "roughness_2_size", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "rough2_size");
RNA_def_property_range(prop, 0.01f, 100000.0f);
RNA_def_property_ui_range(prop, 0.01f, 10.0f, 0.1, 3);
RNA_def_property_ui_text(prop, "Size2", "Size of random rough");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "rough2_thres", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "roughness_2_threshold", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "rough2_thres");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Threshold", "Amount of particles left untouched by random rough");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "rough_endpoint", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "roughness_endpoint", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "rough_end");
RNA_def_property_range(prop, 0.0f, 100000.0f);
RNA_def_property_ui_range(prop, 0.0f, 10.0f, 0.1, 3);
RNA_def_property_ui_text(prop, "Rough Endpoint", "Amount of end point rough");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "rough_end_shape", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "roughness_end_shape", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "rough_end_shape");
RNA_def_property_range(prop, 0.0f, 10.0f);
RNA_def_property_ui_text(prop, "Shape", "Shape of end point rough");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
@@ -1868,7 +1888,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Length", "Length of child paths");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "child_length_thres", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "child_length_threshold", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "clength_thres");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Threshold", "Amount of particles left untouched by child path length");
@@ -1943,13 +1963,14 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Dupli Group", "Show Objects in this Group in place of particles");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "dupliweights", PROP_COLLECTION, PROP_NONE);
+ prop= RNA_def_property(srna, "dupli_weights", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "dupliweights", NULL);
RNA_def_property_struct_type(prop, "ParticleDupliWeight");
RNA_def_property_ui_text(prop, "Dupli Group Weights", "Weights for all of the objects in the dupli group");
prop= RNA_def_property(srna, "active_dupliweight", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "ParticleDupliWeight");
- RNA_def_property_pointer_funcs(prop, "rna_ParticleDupliWeight_active_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_ParticleDupliWeight_active_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Active Dupli Object", "");
prop= RNA_def_property(srna, "active_dupliweight_index", PROP_INT, PROP_UNSIGNED);
@@ -1981,13 +2002,13 @@ static void rna_def_particle_settings(BlenderRNA *brna)
prop= RNA_def_property(srna, "force_field_1", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "pd");
RNA_def_property_struct_type(prop, "FieldSettings");
- RNA_def_property_pointer_funcs(prop, "rna_Particle_field1_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Particle_field1_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Force Field 1", "");
prop= RNA_def_property(srna, "force_field_2", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "pd2");
RNA_def_property_struct_type(prop, "FieldSettings");
- RNA_def_property_pointer_funcs(prop, "rna_Particle_field2_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Particle_field2_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Force Field 2", "");
}
@@ -2037,12 +2058,13 @@ static void rna_def_particle_target(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Duration", "");
RNA_def_property_update(prop, 0, "rna_Particle_target_redo");
- prop= RNA_def_property(srna, "valid", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_valid", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PTARGET_VALID);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Valid", "Keyed particles target is valid");
- prop= RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "alliance", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "mode");
RNA_def_property_enum_items(prop, mode_items);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Mode", "");
@@ -2069,7 +2091,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
//RNA_def_property_pointer_sdna(prop, NULL, "part");
RNA_def_property_struct_type(prop, "ParticleSettings");
RNA_def_property_flag(prop, PROP_EDITABLE|PROP_NEVER_NULL);
- RNA_def_property_pointer_funcs(prop, "rna_particle_settings_get", "rna_particle_settings_set", NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_particle_settings_get", "rna_particle_settings_set", NULL, NULL);
RNA_def_property_ui_text(prop, "Settings", "Particle system settings");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
@@ -2088,12 +2110,12 @@ static void rna_def_particle_system(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Particle_reset");
/* hair */
- prop= RNA_def_property(srna, "global_hair", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_global_hair", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PSYS_GLOBAL_HAIR);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Global Hair", "Hair keys are in global coordinate space");
- prop= RNA_def_property(srna, "hair_dynamics", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_hair_dynamics", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PSYS_HAIR_DYNAMICS);
RNA_def_property_ui_text(prop, "Hair Dynamics", "Enable hair dynamics using cloth simulation");
RNA_def_property_update(prop, 0, "rna_Particle_hair_dynamics");
@@ -2119,7 +2141,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Particle_reset");
/* keyed */
- prop= RNA_def_property(srna, "keyed_timing", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_keyed_timing", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PSYS_KEYED_TIMING);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Keyed timing", "Use key times");
@@ -2131,7 +2153,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
prop= RNA_def_property(srna, "active_particle_target", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "ParticleTarget");
- RNA_def_property_pointer_funcs(prop, "rna_ParticleSystem_active_particle_target_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_ParticleSystem_active_particle_target_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Active Particle Target", "");
prop= RNA_def_property(srna, "active_particle_target_index", PROP_INT, PROP_UNSIGNED);
@@ -2170,7 +2192,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Vertex Group Density", "Vertex group to control density");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "vertex_group_density_negate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group_density", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "vg_neg", (1 << PSYS_VG_DENSITY));
RNA_def_property_ui_text(prop, "Vertex Group Density Negate", "Negate the effect of the density vertex group");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
@@ -2180,7 +2202,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Vertex Group Velocity", "Vertex group to control velocity");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "vertex_group_velocity_negate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group_velocity", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "vg_neg", (1 << PSYS_VG_VEL));
RNA_def_property_ui_text(prop, "Vertex Group Velocity Negate", "Negate the effect of the velocity vertex group");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
@@ -2190,7 +2212,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Vertex Group Length", "Vertex group to control length");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "vertex_group_length_negate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group_length", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "vg_neg", (1 << PSYS_VG_LENGTH));
RNA_def_property_ui_text(prop, "Vertex Group Length Negate", "Negate the effect of the length vertex group");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
@@ -2200,7 +2222,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Vertex Group Clump", "Vertex group to control clump");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "vertex_group_clump_negate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group_clump", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "vg_neg", (1 << PSYS_VG_CLUMP));
RNA_def_property_ui_text(prop, "Vertex Group Clump Negate", "Negate the effect of the clump vertex group");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
@@ -2210,27 +2232,27 @@ static void rna_def_particle_system(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Vertex Group Kink", "Vertex group to control kink");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "vertex_group_kink_negate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group_kink", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "vg_neg", (1 << PSYS_VG_KINK));
RNA_def_property_ui_text(prop, "Vertex Group Kink Negate", "Negate the effect of the kink vertex group");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "vertex_group_roughness1", PROP_STRING, PROP_NONE);
+ prop= RNA_def_property(srna, "vertex_group_roughness_1", PROP_STRING, PROP_NONE);
RNA_def_property_string_funcs(prop, "rna_ParticleVGroup_name_get_5", "rna_ParticleVGroup_name_len_5", "rna_ParticleVGroup_name_set_5");
RNA_def_property_ui_text(prop, "Vertex Group Roughness 1", "Vertex group to control roughness 1");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "vertex_group_roughness1_negate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group_roughness_1", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "vg_neg", (1 << PSYS_VG_ROUGH1));
RNA_def_property_ui_text(prop, "Vertex Group Roughness 1 Negate", "Negate the effect of the roughness 1 vertex group");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "vertex_group_roughness2", PROP_STRING, PROP_NONE);
+ prop= RNA_def_property(srna, "vertex_group_roughness_2", PROP_STRING, PROP_NONE);
RNA_def_property_string_funcs(prop, "rna_ParticleVGroup_name_get_6", "rna_ParticleVGroup_name_len_6", "rna_ParticleVGroup_name_set_6");
RNA_def_property_ui_text(prop, "Vertex Group Roughness 2", "Vertex group to control roughness 2");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "vertex_group_roughness2_negate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group_roughness_2", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "vg_neg", (1 << PSYS_VG_ROUGH2));
RNA_def_property_ui_text(prop, "Vertex Group Roughness 2 Negate", "Negate the effect of the roughness 2 vertex group");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
@@ -2240,7 +2262,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Vertex Group Roughness End", "Vertex group to control roughness end");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "vertex_group_roughness_end_negate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group_roughness_end", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "vg_neg", (1 << PSYS_VG_ROUGHE));
RNA_def_property_ui_text(prop, "Vertex Group Roughness End Negate", "Negate the effect of the roughness end vertex group");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
@@ -2250,7 +2272,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Vertex Group Size", "Vertex group to control size");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "vertex_group_size_negate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group_size", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "vg_neg", (1 << PSYS_VG_SIZE));
RNA_def_property_ui_text(prop, "Vertex Group Size Negate", "Negate the effect of the size vertex group");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
@@ -2260,7 +2282,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Vertex Group Tangent", "Vertex group to control tangent");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "vertex_group_tangent_negate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group_tangent", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "vg_neg", (1 << PSYS_VG_TAN));
RNA_def_property_ui_text(prop, "Vertex Group Tangent Negate", "Negate the effect of the tangent vertex group");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
@@ -2270,7 +2292,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Vertex Group Rotation", "Vertex group to control rotation");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "vertex_group_rotation_negate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group_rotation", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "vg_neg", (1 << PSYS_VG_ROT));
RNA_def_property_ui_text(prop, "Vertex Group Rotation Negate", "Negate the effect of the rotation vertex group");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
@@ -2280,7 +2302,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Vertex Group Field", "Vertex group to control field");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "vertex_group_field_negate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group_field", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "vg_neg", (1 << PSYS_VG_EFFECTOR));
RNA_def_property_ui_text(prop, "Vertex Group Field Negate", "Negate the effect of the field vertex group");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
@@ -2292,7 +2314,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "PointCache");
RNA_def_property_ui_text(prop, "Point Cache", "");
- prop= RNA_def_property(srna, "multiple_caches", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "has_multiple_caches", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_ParticleSystem_multiple_caches_get", NULL);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Multiple Caches", "Particle system has multiple point caches");
@@ -2305,12 +2327,12 @@ static void rna_def_particle_system(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Particle_redo");
/* hair or cache editing */
- prop= RNA_def_property(srna, "editable", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_editable", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_ParticleSystem_editable_get", NULL);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Editable", "Particle system can be edited in particle mode");
- prop= RNA_def_property(srna, "edited", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_edited", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_ParticleSystem_edited_get", NULL);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Edited", "Particle system has been edited in particle mode");
diff --git a/source/blender/makesrna/intern/rna_pose.c b/source/blender/makesrna/intern/rna_pose.c
index 211583e3df6..ce797f21494 100644
--- a/source/blender/makesrna/intern/rna_pose.c
+++ b/source/blender/makesrna/intern/rna_pose.c
@@ -37,7 +37,6 @@
#include "DNA_scene_types.h"
#include "BLI_math.h"
-#include "BLI_ghash.h"
#include "WM_types.h"
@@ -49,6 +48,10 @@
#include "DNA_userdef_types.h"
+#include "MEM_guardedalloc.h"
+
+#include "BLI_ghash.h"
+
#include "BKE_context.h"
#include "BKE_constraint.h"
#include "BKE_depsgraph.h"
@@ -117,7 +120,7 @@ static void rna_BoneGroup_color_set_set(PointerRNA *ptr, int value)
}
}
-static IDProperty *rna_PoseBone_idproperties(PointerRNA *ptr, int create)
+static IDProperty *rna_PoseBone_idprops(PointerRNA *ptr, int create)
{
bPoseChannel *pchan= ptr->data;
@@ -151,7 +154,7 @@ static void rna_Pose_ik_solver_update(Main *bmain, Scene *scene, PointerRNA *ptr
bPose *pose = ptr->data;
pose->flag |= POSE_RECALC; // checks & sorts pose channels
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
update_pose_constraint_flags(pose);
@@ -632,7 +635,7 @@ static void rna_def_pose_channel_constraints(BlenderRNA *brna, PropertyRNA *cpro
/* Collection active property */
prop= RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Constraint");
- RNA_def_property_pointer_funcs(prop, "rna_PoseChannel_active_constraint_get", "rna_PoseChannel_active_constraint_set", NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_PoseChannel_active_constraint_get", "rna_PoseChannel_active_constraint_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Active Constraint", "Active PoseChannel constraint");
@@ -682,7 +685,7 @@ static void rna_def_pose_channel(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "bPoseChannel");
RNA_def_struct_ui_text(srna, "Pose Bone", "Channel defining pose data for a bone in a Pose");
RNA_def_struct_path_func(srna, "rna_PoseBone_path");
- RNA_def_struct_idproperties_func(srna, "rna_PoseBone_idproperties");
+ RNA_def_struct_idprops_func(srna, "rna_PoseBone_idprops");
/* Bone Constraints */
prop= RNA_def_property(srna, "constraints", PROP_COLLECTION, PROP_NONE);
@@ -698,9 +701,9 @@ static void rna_def_pose_channel(BlenderRNA *brna)
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
RNA_def_struct_name_property(srna, prop);
- prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "selectflag", BONE_SELECTED);
- RNA_def_property_ui_text(prop, "Selected", "");
+ RNA_def_property_ui_text(prop, "Select", "");
/* Baked Bone Path cache data */
rna_def_motionpath_common(srna);
@@ -803,55 +806,55 @@ static void rna_def_pose_channel(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Pose Tail Position", "Location of tail of the channel's bone");
/* IK Settings */
- prop= RNA_def_property(srna, "has_ik", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_in_ik_chain", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_PoseChannel_has_ik_get", NULL);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Has IK", "Is part of an IK chain");
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
- prop= RNA_def_property(srna, "ik_dof_x", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_negative_sdna(prop, NULL, "ikflag", BONE_IK_NO_XDOF);
- RNA_def_property_ui_text(prop, "IK X DoF", "Allow movement around the X axis");
+ prop= RNA_def_property(srna, "lock_ik_x", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "ikflag", BONE_IK_NO_XDOF);
+ RNA_def_property_ui_text(prop, "IK X Lock", "Disallow movement around the X axis");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
- prop= RNA_def_property(srna, "ik_dof_y", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_negative_sdna(prop, NULL, "ikflag", BONE_IK_NO_YDOF);
- RNA_def_property_ui_text(prop, "IK Y DoF", "Allow movement around the Y axis");
+ prop= RNA_def_property(srna, "lock_ik_y", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "ikflag", BONE_IK_NO_YDOF);
+ RNA_def_property_ui_text(prop, "IK Y Lock", "Disallow movement around the Y axis");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
- prop= RNA_def_property(srna, "ik_dof_z", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_negative_sdna(prop, NULL, "ikflag", BONE_IK_NO_ZDOF);
- RNA_def_property_ui_text(prop, "IK Z DoF", "Allow movement around the Z axis");
+ prop= RNA_def_property(srna, "lock_ik_z", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "ikflag", BONE_IK_NO_ZDOF);
+ RNA_def_property_ui_text(prop, "IK Z Lock", "Disallow movement around the Z axis");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
- prop= RNA_def_property(srna, "ik_limit_x", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_ik_limit_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ikflag", BONE_IK_XLIMIT);
RNA_def_property_ui_text(prop, "IK X Limit", "Limit movement around the X axis");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
- prop= RNA_def_property(srna, "ik_limit_y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_ik_limit_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ikflag", BONE_IK_YLIMIT);
RNA_def_property_ui_text(prop, "IK Y Limit", "Limit movement around the Y axis");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
- prop= RNA_def_property(srna, "ik_limit_z", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_ik_limit_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ikflag", BONE_IK_ZLIMIT);
RNA_def_property_ui_text(prop, "IK Z Limit", "Limit movement around the Z axis");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
- prop= RNA_def_property(srna, "ik_rot_control", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_ik_rotation_control", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ikflag", BONE_IK_ROTCTL);
RNA_def_property_ui_text(prop, "IK rot control", "Apply channel rotation as IK constraint");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
- prop= RNA_def_property(srna, "ik_lin_control", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_ik_linear_control", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ikflag", BONE_IK_LINCTL);
RNA_def_property_ui_text(prop, "IK rot control", "Apply channel size as IK constraint if stretching is enabled");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
@@ -927,14 +930,14 @@ static void rna_def_pose_channel(BlenderRNA *brna)
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
- prop= RNA_def_property(srna, "ik_rot_weight", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "ik_rotation_weight", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "ikrotweight");
RNA_def_property_range(prop, 0.0f,1.0f);
RNA_def_property_ui_text(prop, "IK Rot Weight", "Weight of rotation constraint for IK");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update");
- prop= RNA_def_property(srna, "ik_lin_weight", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "ik_linear_weight", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "iklinweight");
RNA_def_property_range(prop, 0.0f,1.0f);
RNA_def_property_ui_text(prop, "IK Lin Weight", "Weight of scale constraint for IK");
@@ -970,7 +973,7 @@ static void rna_def_pose_channel(BlenderRNA *brna)
prop= RNA_def_property(srna, "bone_group", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "BoneGroup");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_pointer_funcs(prop, "rna_PoseChannel_bone_group_get", "rna_PoseChannel_bone_group_set", NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_PoseChannel_bone_group_get", "rna_PoseChannel_bone_group_set", NULL, NULL);
RNA_def_property_ui_text(prop, "Bone Group", "Bone Group this pose channel belongs to");
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update");
@@ -1043,13 +1046,13 @@ static void rna_def_pose_itasc(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Precision", "Precision of convergence in case of reiteration");
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update");
- prop= RNA_def_property(srna, "num_iter", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "iterations", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "numiter");
RNA_def_property_range(prop, 1.f,1000.f);
RNA_def_property_ui_text(prop, "Iterations", "Maximum number of iterations for convergence in case of reiteration");
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update");
- prop= RNA_def_property(srna, "num_step", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "step_count", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "numstep");
RNA_def_property_range(prop, 1.f, 50.f);
RNA_def_property_ui_text(prop, "Num steps", "Divides the frame interval into this many steps");
@@ -1061,24 +1064,24 @@ static void rna_def_pose_itasc(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Mode", NULL);
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update_rebuild");
- prop= RNA_def_property(srna, "reiteration", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "reiteration_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
RNA_def_property_enum_items(prop, prop_itasc_reiteration_items);
RNA_def_property_ui_text(prop, "Reiteration", "Defines if the solver is allowed to reiterate (converges until precision is met) on none, first or all frames");
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update");
- prop= RNA_def_property(srna, "auto_step", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_step", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ITASC_AUTO_STEP);
RNA_def_property_ui_text(prop, "Auto step", "Automatically determine the optimal number of steps for best performance/accuracy trade off");
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update");
- prop= RNA_def_property(srna, "min_step", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "step_min", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "minstep");
RNA_def_property_range(prop, 0.0f,0.1f);
RNA_def_property_ui_text(prop, "Min step", "Lower bound for timestep in second in case of automatic substeps");
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update");
- prop= RNA_def_property(srna, "max_step", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "step_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "maxstep");
RNA_def_property_range(prop, 0.0f,1.0f);
RNA_def_property_ui_text(prop, "Max step", "Higher bound for timestep in second in case of automatic substeps");
@@ -1090,7 +1093,7 @@ static void rna_def_pose_itasc(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Feedback", "Feedback coefficient for error correction. Average response time=1/feedback. Default=20");
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update");
- prop= RNA_def_property(srna, "max_velocity", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "velocity_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "maxvel");
RNA_def_property_range(prop, 0.0f,100.0f);
RNA_def_property_ui_text(prop, "Max Velocity", "Maximum joint velocity in rad/s. Default=50");
@@ -1102,13 +1105,13 @@ static void rna_def_pose_itasc(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Solver", "Solving method selection: Automatic damping or manual damping");
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update_rebuild");
- prop= RNA_def_property(srna, "dampmax", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "damping_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "dampmax");
RNA_def_property_range(prop, 0.0f,1.0f);
RNA_def_property_ui_text(prop, "Damp", "Maximum damping coefficient when singular value is nearly 0. Higher values=more stability, less reactivity. Default=0.5");
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update");
- prop= RNA_def_property(srna, "dampeps", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "damping_epsilon", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "dampeps");
RNA_def_property_range(prop, 0.0f,1.0f);
RNA_def_property_ui_text(prop, "Epsilon", "Singular value under which damping is progressively applied. Higher values=more stability, less reactivity. Default=0.1");
@@ -1157,7 +1160,7 @@ static void rna_def_pose(BlenderRNA *brna)
prop= RNA_def_property(srna, "active_bone_group", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "BoneGroup");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_pointer_funcs(prop, "rna_Pose_active_bone_group_get", "rna_Pose_active_bone_group_set", NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Pose_active_bone_group_get", "rna_Pose_active_bone_group_set", NULL, NULL);
RNA_def_property_ui_text(prop, "Active Bone Group", "Active bone group for this pose");
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_update");
@@ -1177,7 +1180,7 @@ static void rna_def_pose(BlenderRNA *brna)
prop= RNA_def_property(srna, "ik_param", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "IKParam");
- RNA_def_property_pointer_funcs(prop, "rna_Pose_ikparam_get", NULL, "rna_Pose_ikparam_typef");
+ RNA_def_property_pointer_funcs(prop, "rna_Pose_ikparam_get", NULL, "rna_Pose_ikparam_typef", NULL);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "IK Param", "Parameters for IK solver");
diff --git a/source/blender/makesrna/intern/rna_property.c b/source/blender/makesrna/intern/rna_property.c
index 7bcb58ea28d..13f913b978b 100644
--- a/source/blender/makesrna/intern/rna_property.c
+++ b/source/blender/makesrna/intern/rna_property.c
@@ -121,7 +121,7 @@ void RNA_def_gameproperty(BlenderRNA *brna)
RNA_def_property_enum_funcs(prop, NULL, "rna_GameProperty_type_set", NULL);
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "debug", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_debug", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PROP_DEBUG);
RNA_def_property_ui_text(prop, "Debug", "Print debug information for this property");
RNA_def_property_update(prop, NC_LOGIC, NULL);
diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c
index d00507e8bcf..e4a89ed3121 100644
--- a/source/blender/makesrna/intern/rna_render.c
+++ b/source/blender/makesrna/intern/rna_render.c
@@ -277,11 +277,11 @@ static void rna_def_render_engine(BlenderRNA *brna)
RNA_def_property_string_sdna(prop, NULL, "type->name");
RNA_def_property_flag(prop, PROP_REGISTER);
- prop= RNA_def_property(srna, "bl_preview", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "bl_use_preview", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "type->flag", RE_DO_PREVIEW);
RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL);
- prop= RNA_def_property(srna, "bl_postprocess", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "bl_use_postprocess", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "type->flag", RE_DO_ALL);
RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL);
diff --git a/source/blender/makesrna/intern/rna_rna.c b/source/blender/makesrna/intern/rna_rna.c
index aa174fd97c3..4bfd0e4fd41 100644
--- a/source/blender/makesrna/intern/rna_rna.c
+++ b/source/blender/makesrna/intern/rna_rna.c
@@ -53,7 +53,7 @@ EnumPropertyItem property_unit_items[] = {
{0, NULL, 0, NULL, NULL}};
#ifdef RNA_RUNTIME
-
+#include "MEM_guardedalloc.h"
#include "BLI_ghash.h"
/* Struct */
@@ -201,7 +201,7 @@ static void rna_Struct_properties_next(CollectionPropertyIterator *iter)
/* try id properties */
if(!iter->valid) {
- group= RNA_struct_idproperties(&iter->builtin_parent, 0);
+ group= RNA_struct_idprops(&iter->builtin_parent, 0);
if(group) {
rna_iterator_listbase_end(iter);
@@ -335,7 +335,7 @@ PointerRNA rna_builtin_properties_lookup_string(PointerRNA *ptr, const char *key
if(ptr->data) {
IDProperty *group, *idp;
- group= RNA_struct_idproperties(ptr, 0);
+ group= RNA_struct_idprops(ptr, 0);
if(group) {
for(idp=group->data.group.first; idp; idp=idp->next) {
@@ -811,6 +811,12 @@ static int rna_Function_registered_optional_get(PointerRNA *ptr)
return func->flag & FUNC_REGISTER_OPTIONAL;
}
+static int rna_Function_no_self_get(PointerRNA *ptr)
+{
+ FunctionRNA *func= (FunctionRNA*)ptr->data;
+ return !(func->flag & FUNC_NO_SELF);
+}
+
/* Blender RNA */
static void rna_BlenderRNA_structs_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
@@ -884,19 +890,19 @@ static void rna_def_struct(BlenderRNA *brna)
prop= RNA_def_property(srna, "base", PROP_POINTER, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "Struct");
- RNA_def_property_pointer_funcs(prop, "rna_Struct_base_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Struct_base_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Base", "Struct definition this is derived from");
prop= RNA_def_property(srna, "nested", PROP_POINTER, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "Struct");
- RNA_def_property_pointer_funcs(prop, "rna_Struct_nested_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Struct_nested_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Nested", "Struct in which this struct is always nested, and to which it logically belongs");
prop= RNA_def_property(srna, "name_property", PROP_POINTER, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "StringProperty");
- RNA_def_property_pointer_funcs(prop, "rna_Struct_name_property_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Struct_name_property_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Name Property", "Property that gives the name of the struct");
prop= RNA_def_property(srna, "properties", PROP_COLLECTION, PROP_NONE);
@@ -974,7 +980,7 @@ static void rna_def_property(BlenderRNA *brna)
prop= RNA_def_property(srna, "srna", PROP_POINTER, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "Struct");
- RNA_def_property_pointer_funcs(prop, "rna_Property_srna_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Property_srna_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Base", "Struct definition used for properties assigned to this item");
prop= RNA_def_property(srna, "unit", PROP_ENUM, PROP_NONE);
@@ -998,17 +1004,17 @@ static void rna_def_property(BlenderRNA *brna)
RNA_def_property_boolean_funcs(prop, "rna_Property_is_never_none_get", NULL);
RNA_def_property_ui_text(prop, "Never None", "True when this value can't be set to None");
- prop= RNA_def_property(srna, "use_output", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_output", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_funcs(prop, "rna_Property_use_output_get", NULL);
RNA_def_property_ui_text(prop, "Return", "True when this property is an output value from an RNA function");
- prop= RNA_def_property(srna, "registered", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_registered", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_funcs(prop, "rna_Property_registered_get", NULL);
RNA_def_property_ui_text(prop, "Registered", "Property is registered as part of type registration");
- prop= RNA_def_property(srna, "registered_optional", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_registered_optional", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_funcs(prop, "rna_Property_registered_optional_get", NULL);
RNA_def_property_ui_text(prop, "Registered Optionally", "Property is optionally registered as part of type registration");
@@ -1040,15 +1046,20 @@ static void rna_def_function(BlenderRNA *brna)
RNA_def_property_collection_funcs(prop, "rna_Function_parameters_begin", "rna_iterator_listbase_next", "rna_iterator_listbase_end", "rna_iterator_listbase_get", 0, 0, 0);
RNA_def_property_ui_text(prop, "Parameters", "Parameters for the function");
- prop= RNA_def_property(srna, "registered", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_registered", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_funcs(prop, "rna_Function_registered_get", NULL);
RNA_def_property_ui_text(prop, "Registered", "Function is registered as callback as part of type registration");
- prop= RNA_def_property(srna, "registered_optional", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_registered_optional", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_funcs(prop, "rna_Function_registered_optional_get", NULL);
RNA_def_property_ui_text(prop, "Registered Optionally", "Function is optionally registered as callback part of type registration");
+
+ prop= RNA_def_property(srna, "use_self", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_boolean_funcs(prop, "rna_Function_no_self_get", NULL);
+ RNA_def_property_ui_text(prop, "No Self", "Function does not pass its self as an argument (becomes a class method in python)");
}
static void rna_def_number_property(StructRNA *srna, PropertyType type)
@@ -1151,7 +1162,7 @@ static void rna_def_string_property(StructRNA *srna)
RNA_def_property_string_funcs(prop, "rna_StringProperty_default_get", "rna_StringProperty_default_length", NULL);
RNA_def_property_ui_text(prop, "Default", "string default value");
- prop= RNA_def_property(srna, "max_length", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "length_max", PROP_INT, PROP_UNSIGNED);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_int_funcs(prop, "rna_StringProperty_max_length_get", NULL, NULL);
RNA_def_property_ui_text(prop, "Maximum Length", "Maximum length of the string, 0 means unlimited");
@@ -1212,9 +1223,9 @@ static void rna_def_pointer_property(StructRNA *srna, PropertyType type)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "Struct");
if(type == PROP_POINTER)
- RNA_def_property_pointer_funcs(prop, "rna_PointerProperty_fixed_type_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_PointerProperty_fixed_type_get", NULL, NULL, NULL);
else
- RNA_def_property_pointer_funcs(prop, "rna_CollectionProperty_fixed_type_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_CollectionProperty_fixed_type_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Pointer Type", "Fixed pointer type, empty if variable type");
}
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 8e4737d78de..8b3ff3a3904 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -107,13 +107,17 @@ EnumPropertyItem image_type_items[] = {
{R_TARGA, "TARGA", ICON_FILE_IMAGE, "Targa", ""},
{R_RAWTGA, "TARGA_RAW", ICON_FILE_IMAGE, "Targa Raw", ""},
{0, "", 0, " ", NULL},
+#ifdef WITH_CINEON
{R_CINEON, "CINEON", ICON_FILE_IMAGE, "Cineon", ""},
{R_DPX, "DPX",ICON_FILE_IMAGE, "DPX", ""},
+#endif
#ifdef WITH_OPENEXR
{R_MULTILAYER, "MULTILAYER", ICON_FILE_IMAGE, "MultiLayer", ""},
{R_OPENEXR, "OPEN_EXR", ICON_FILE_IMAGE, "OpenEXR", ""},
#endif
+#ifdef WITH_HDR
{R_RADHDR, "HDR", ICON_FILE_IMAGE, "Radiance HDR", ""},
+#endif
#ifdef WITH_TIFF
{R_TIFF, "TIFF", ICON_FILE_IMAGE, "TIFF", ""},
#endif
@@ -148,6 +152,8 @@ EnumPropertyItem image_type_items[] = {
#include "DNA_object_types.h"
#include "DNA_mesh_types.h"
+#include "MEM_guardedalloc.h"
+
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_image.h"
@@ -205,7 +211,8 @@ static Base *rna_Scene_object_link(Scene *scene, bContext *C, ReportList *report
ob->recalc |= OB_RECALC_ALL;
- DAG_scene_sort(scene);
+ /* slows down importers too much, run scene.update() */
+ /* DAG_scene_sort(G.main, scene); */
return base;
}
@@ -231,8 +238,8 @@ static void rna_Scene_object_unlink(Scene *scene, ReportList *reports, Object *o
ob->id.us--;
/* needed otherwise the depgraph will contain free'd objects which can crash, see [#20958] */
- DAG_scene_sort(scene);
- DAG_ids_flush_update(0);
+ DAG_scene_sort(G.main, scene);
+ DAG_ids_flush_update(G.main, 0);
WM_main_add_notifier(NC_SCENE|ND_OB_ACTIVE, scene);
}
@@ -681,6 +688,13 @@ static int rna_RenderSettings_engine_get(PointerRNA *ptr)
return 0;
}
+static void rna_Scene_glsl_update(Main *bmain, Scene *unused, PointerRNA *ptr)
+{
+ Scene *scene= (Scene*)ptr->id.data;
+
+ DAG_id_flush_update(&scene->id, 0);
+}
+
static void rna_RenderSettings_color_management_update(Main *bmain, Scene *unused, PointerRNA *ptr)
{
/* reset image nodes */
@@ -699,6 +713,8 @@ static void rna_RenderSettings_color_management_update(Main *bmain, Scene *unuse
}
}
}
+
+ rna_Scene_glsl_update(bmain, unused, ptr);
}
static void rna_SceneRenderLayer_name_set(PointerRNA *ptr, const char *value)
@@ -831,7 +847,7 @@ static void rna_Scene_use_simplify_update(Main *bmain, Scene *scene, PointerRNA
for(SETLOOPER(scene, base))
object_simplify_update(base->object);
- DAG_ids_flush_update(0);
+ DAG_ids_flush_update(bmain, 0);
WM_main_add_notifier(NC_GEOM|ND_DATA, NULL);
}
@@ -973,7 +989,7 @@ static void rna_def_tool_settings(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "Sculpt");
RNA_def_property_ui_text(prop, "Sculpt", "");
- prop = RNA_def_property(srna, "auto_normalize", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_auto_normalize", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "auto_normalize", 1);
RNA_def_property_ui_text(prop, "WPaint Auto-Normalize",
"Ensure all bone-deforming vertex groups add up to 1.0 while "
@@ -996,13 +1012,19 @@ static void rna_def_tool_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Particle Edit", "");
/* Transform */
- prop= RNA_def_property(srna, "proportional_editing", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "proportional_edit", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "proportional");
RNA_def_property_enum_items(prop, proportional_editing_items);
RNA_def_property_ui_text(prop, "Proportional Editing", "Proportional editing mode");
RNA_def_property_update(prop, NC_SCENE|ND_TOOLSETTINGS, NULL); /* header redraw */
- prop= RNA_def_property(srna, "proportional_editing_falloff", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "use_proportional_edit_objects", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "proportional_objects", 0);
+ RNA_def_property_ui_text(prop, "Proportional Editing Objects", "Proportional editing object mode");
+ RNA_def_property_ui_icon(prop, ICON_PROP_OFF, 1);
+ RNA_def_property_update(prop, NC_SCENE|ND_TOOLSETTINGS, NULL); /* header redraw */
+
+ prop= RNA_def_property(srna, "proportional_edit_falloff", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "prop_mode");
RNA_def_property_enum_items(prop, proportional_falloff_items);
RNA_def_property_ui_text(prop, "Proportional Editing Falloff", "Falloff type for proportional editing mode");
@@ -1015,17 +1037,17 @@ static void rna_def_tool_settings(BlenderRNA *brna)
RNA_def_property_ui_range(prop, 0.01, 10.0, 10.0, 2);
RNA_def_property_update(prop, NC_GEOM|ND_DATA, NULL);
- prop= RNA_def_property(srna, "automerge_editing", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_mesh_automerge", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "automerge", 0);
RNA_def_property_ui_text(prop, "AutoMerge Editing", "Automatically merge vertices moved to the same location");
- prop= RNA_def_property(srna, "snap", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_snap", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "snap_flag", SCE_SNAP);
RNA_def_property_ui_text(prop, "Snap", "Snap during transform");
RNA_def_property_ui_icon(prop, ICON_SNAP_OFF, 1);
RNA_def_property_update(prop, NC_SCENE|ND_TOOLSETTINGS, NULL); /* header redraw */
- prop= RNA_def_property(srna, "snap_align_rotation", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_snap_align_rotation", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "snap_flag", SCE_SNAP_ROTATE);
RNA_def_property_ui_text(prop, "Snap Align Rotation", "Align rotation with the snapping target");
RNA_def_property_ui_icon(prop, ICON_SNAP_NORMAL, 0);
@@ -1043,53 +1065,53 @@ static void rna_def_tool_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Snap Target", "Which part to snap onto the target");
RNA_def_property_update(prop, NC_SCENE|ND_TOOLSETTINGS, NULL); /* header redraw */
- prop= RNA_def_property(srna, "snap_peel_object", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_snap_peel_object", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "snap_flag", SCE_SNAP_PEEL_OBJECT);
RNA_def_property_ui_text(prop, "Snap Peel Object", "Consider objects as whole when finding volume center");
RNA_def_property_ui_icon(prop, ICON_SNAP_PEEL_OBJECT, 0);
RNA_def_property_update(prop, NC_SCENE|ND_TOOLSETTINGS, NULL); /* header redraw */
- prop= RNA_def_property(srna, "snap_project", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_snap_project", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "snap_flag", SCE_SNAP_PROJECT);
RNA_def_property_ui_text(prop, "Project Individual Elements", "Project vertices on the surface of other objects");
RNA_def_property_ui_icon(prop, ICON_RETOPO, 0);
RNA_def_property_update(prop, NC_SCENE|ND_TOOLSETTINGS, NULL); /* header redraw */
/* Auto Keying */
- prop= RNA_def_property(srna, "use_auto_keying", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_keyframe_insert_auto", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "autokey_mode", AUTOKEY_ON);
RNA_def_property_ui_text(prop, "Auto Keying", "Automatic keyframe insertion for Objects and Bones");
RNA_def_property_ui_icon(prop, ICON_REC, 0);
- prop= RNA_def_property(srna, "autokey_mode", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "auto_keying_mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "autokey_mode");
RNA_def_property_enum_items(prop, auto_key_items);
RNA_def_property_ui_text(prop, "Auto-Keying Mode", "Mode of automatic keyframe insertion for Objects and Bones");
- prop= RNA_def_property(srna, "record_with_nla", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_record_with_nla", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "autokey_flag", ANIMRECORD_FLAG_WITHNLA);
RNA_def_property_ui_text(prop, "Layered", "Add a new NLA Track + Strip for every loop/pass made over the animation to allow non-destructive tweaking");
/* UV */
- prop= RNA_def_property(srna, "uv_selection_mode", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "uv_select_mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "uv_selectmode");
RNA_def_property_enum_items(prop, uv_select_mode_items);
RNA_def_property_ui_text(prop, "UV Selection Mode", "UV selection and display mode");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
- prop= RNA_def_property(srna, "uv_sync_selection", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_uv_select_sync", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uv_flag", UV_SYNC_SELECTION);
RNA_def_property_ui_text(prop, "UV Sync Selection", "Keep UV and edit mode mesh selection in sync");
RNA_def_property_ui_icon(prop, ICON_EDIT, 0);
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
- prop= RNA_def_property(srna, "uv_local_view", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_uv_local_view", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uv_flag", UV_SHOW_SAME_IMAGE);
RNA_def_property_ui_text(prop, "UV Local View", "Draw only faces with the currently displayed image assigned");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
/* Mesh */
- prop= RNA_def_property(srna, "mesh_selection_mode", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "mesh_select_mode", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "selectmode", 1);
RNA_def_property_array(prop, 3);
RNA_def_property_boolean_funcs(prop, NULL, "rna_Scene_editmesh_select_mode_set");
@@ -1107,20 +1129,20 @@ static void rna_def_tool_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Edge Tag Mode", "The edge flag to tag when selecting the shortest path");
/* etch-a-ton */
- prop= RNA_def_property(srna, "bone_sketching", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_bone_sketching", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "bone_sketching", BONE_SKETCHING);
RNA_def_property_ui_text(prop, "Use Bone Sketching", "DOC BROKEN");
// RNA_def_property_ui_icon(prop, ICON_EDIT, 0);
- prop= RNA_def_property(srna, "etch_quick", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_etch_quick", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "bone_sketching", BONE_SKETCHING_QUICK);
RNA_def_property_ui_text(prop, "Quick Sketching", "DOC BROKEN");
- prop= RNA_def_property(srna, "etch_overdraw", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_etch_overdraw", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "bone_sketching", BONE_SKETCHING_ADJUST);
RNA_def_property_ui_text(prop, "Overdraw Sketching", "DOC BROKEN");
- prop= RNA_def_property(srna, "etch_autoname", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_etch_autoname", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "skgen_retarget_options", SK_RETARGET_AUTONAME);
RNA_def_property_ui_text(prop, "Autoname", "DOC BROKEN");
@@ -1136,7 +1158,7 @@ static void rna_def_tool_settings(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "skgen_template");
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "Object");
- RNA_def_property_pointer_funcs(prop, NULL, "rna_Scene_skgen_etch_template_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_Scene_skgen_etch_template_set", NULL, NULL);
RNA_def_property_ui_text(prop, "Template", "Template armature that will be retargeted to the stroke");
prop= RNA_def_property(srna, "etch_subdivision_number", PROP_INT, PROP_NONE);
@@ -1169,6 +1191,16 @@ static void rna_def_tool_settings(BlenderRNA *brna)
RNA_def_property_enum_items(prop, sketch_convert_items);
RNA_def_property_ui_text(prop, "Stroke conversion method", "Method used to convert stroke to bones");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+
+ /* Sculpt/Paint Unified Size and Strength */
+
+ prop= RNA_def_property(srna, "sculpt_paint_use_unified_size", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "sculpt_paint_settings", SCULPT_PAINT_USE_UNIFIED_SIZE);
+ RNA_def_property_ui_text(prop, "Sculpt/Paint Use Unified Radius", "Instead of per brush radius, the radius is shared across brushes");
+
+ prop= RNA_def_property(srna, "sculpt_paint_use_unified_strength", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "sculpt_paint_settings", SCULPT_PAINT_USE_UNIFIED_ALPHA);
+ RNA_def_property_ui_text(prop, "Sculpt/Paint Use Unified Strength", "Instead of per brush strength, the strength is shared across brushes");
}
@@ -1244,7 +1276,7 @@ void rna_def_render_layer_common(StructRNA *srna, int scene)
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
/* layers */
- prop= RNA_def_property(srna, "visible_layers", PROP_BOOLEAN, PROP_LAYER_MEMBER);
+ prop= RNA_def_property(srna, "layers", PROP_BOOLEAN, PROP_LAYER_MEMBER);
RNA_def_property_boolean_sdna(prop, NULL, "lay", 1);
RNA_def_property_array(prop, 20);
RNA_def_property_ui_text(prop, "Visible Layers", "Scene layers included in this render layer");
@@ -1253,7 +1285,7 @@ void rna_def_render_layer_common(StructRNA *srna, int scene)
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "zmask_layers", PROP_BOOLEAN, PROP_LAYER);
+ prop= RNA_def_property(srna, "layers_zmask", PROP_BOOLEAN, PROP_LAYER);
RNA_def_property_boolean_sdna(prop, NULL, "lay_zmask", 1);
RNA_def_property_array(prop, 20);
RNA_def_property_ui_text(prop, "Zmask Layers", "Zmask scene layers");
@@ -1261,219 +1293,219 @@ void rna_def_render_layer_common(StructRNA *srna, int scene)
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
/* layer options */
- prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "layflag", SCE_LAY_DISABLE);
RNA_def_property_ui_text(prop, "Enabled", "Disable or enable the render layer");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "zmask", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_zmask", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_ZMASK);
RNA_def_property_ui_text(prop, "Zmask", "Only render what's in front of the solid z values");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "zmask_negate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_zmask", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_NEG_ZMASK);
RNA_def_property_ui_text(prop, "Zmask Negate", "For Zmask, only render what is behind solid z values instead of in front");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "all_z", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_all_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_ALL_Z);
RNA_def_property_ui_text(prop, "All Z", "Fill in Z values for solid faces in invisible layers, for masking");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "solid", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_solid", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_SOLID);
RNA_def_property_ui_text(prop, "Solid", "Render Solid faces in this Layer");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "halo", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_halo", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_HALO);
RNA_def_property_ui_text(prop, "Halo", "Render Halos in this Layer (on top of Solid)");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "ztransp", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_ztransp", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_ZTRA);
RNA_def_property_ui_text(prop, "ZTransp", "Render Z-Transparent faces in this Layer (On top of Solid and Halos)");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "sky", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_sky", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_SKY);
RNA_def_property_ui_text(prop, "Sky", "Render Sky in this Layer");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "edge", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_edge_enhance", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_EDGE);
RNA_def_property_ui_text(prop, "Edge", "Render Edge-enhance in this Layer (only works for Solid faces)");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "strand", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_strand", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_STRAND);
RNA_def_property_ui_text(prop, "Strand", "Render Strands in this Layer");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
/* passes */
- prop= RNA_def_property(srna, "pass_combined", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_combined", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_COMBINED);
RNA_def_property_ui_text(prop, "Combined", "Deliver full combined RGBA buffer");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_z", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_Z);
RNA_def_property_ui_text(prop, "Z", "Deliver Z values pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_vector", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_vector", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_VECTOR);
RNA_def_property_ui_text(prop, "Vector", "Deliver speed vector pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_normal", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_normal", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_NORMAL);
RNA_def_property_ui_text(prop, "Normal", "Deliver normal pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_uv", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_uv", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_UV);
RNA_def_property_ui_text(prop, "UV", "Deliver texture UV pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_mist", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_mist", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_MIST);
RNA_def_property_ui_text(prop, "Mist", "Deliver mist factor pass (0.0-1.0)");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_object_index", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_object_index", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_INDEXOB);
RNA_def_property_ui_text(prop, "Object Index", "Deliver object index pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_color", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_color", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_RGBA);
RNA_def_property_ui_text(prop, "Color", "Deliver shade-less color pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_diffuse", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_diffuse", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_DIFFUSE);
RNA_def_property_ui_text(prop, "Diffuse", "Deliver diffuse pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_specular", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_specular", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_SPEC);
RNA_def_property_ui_text(prop, "Specular", "Deliver specular pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_shadow", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_shadow", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_SHADOW);
RNA_def_property_ui_text(prop, "Shadow", "Deliver shadow pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_ao", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_ambient_occlusion", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_AO);
RNA_def_property_ui_text(prop, "AO", "Deliver AO pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_reflection", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_reflection", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_REFLECT);
RNA_def_property_ui_text(prop, "Reflection", "Deliver raytraced reflection pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_refraction", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_refraction", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_REFRACT);
RNA_def_property_ui_text(prop, "Refraction", "Deliver raytraced refraction pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_emit", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_emit", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_EMIT);
RNA_def_property_ui_text(prop, "Emit", "Deliver emission pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_environment", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_environment", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_ENVIRONMENT);
RNA_def_property_ui_text(prop, "Environment", "Deliver environment lighting pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_indirect", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_indirect", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_INDIRECT);
RNA_def_property_ui_text(prop, "Indirect", "Deliver indirect lighting pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_specular_exclude", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "exclude_specular", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_SPEC);
RNA_def_property_ui_text(prop, "Specular Exclude", "Exclude specular pass from combined");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, 1);
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_shadow_exclude", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "exclude_shadow", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_SHADOW);
RNA_def_property_ui_text(prop, "Shadow Exclude", "Exclude shadow pass from combined");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, 1);
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_ao_exclude", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "exclude_ambient_occlusion", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_AO);
RNA_def_property_ui_text(prop, "AO Exclude", "Exclude AO pass from combined");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, 1);
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_reflection_exclude", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "exclude_reflection", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_REFLECT);
RNA_def_property_ui_text(prop, "Reflection Exclude", "Exclude raytraced reflection pass from combined");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, 1);
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_refraction_exclude", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "exclude_refraction", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_REFRACT);
RNA_def_property_ui_text(prop, "Refraction Exclude", "Exclude raytraced refraction pass from combined");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, 1);
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_emit_exclude", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "exclude_emit", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_EMIT);
RNA_def_property_ui_text(prop, "Emit Exclude", "Exclude emission pass from combined");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, 1);
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_environment_exclude", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "exclude_environment", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_ENVIRONMENT);
RNA_def_property_ui_text(prop, "Environment Exclude", "Exclude environment pass from combined");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, 1);
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_indirect_exclude", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "exclude_indirect", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_INDIRECT);
RNA_def_property_ui_text(prop, "Indirect Exclude", "Exclude indirect pass from combined");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, 1);
@@ -1560,19 +1592,19 @@ static void rna_def_scene_game_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Freq", "Displays clock frequency of fullscreen display");
RNA_def_property_update(prop, NC_SCENE, NULL);
- prop= RNA_def_property(srna, "fullscreen", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_fullscreen", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "fullscreen", 1.0);
RNA_def_property_ui_text(prop, "Fullscreen", "Starts player in a new fullscreen display");
RNA_def_property_update(prop, NC_SCENE, NULL);
/* Framing */
- prop= RNA_def_property(srna, "framing_type", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "frame_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "framing.type");
RNA_def_property_enum_items(prop, framing_types_items);
RNA_def_property_ui_text(prop, "Framing Types", "Select the type of Framing you want");
RNA_def_property_update(prop, NC_SCENE, NULL);
- prop= RNA_def_property(srna, "framing_color", PROP_FLOAT, PROP_COLOR);
+ prop= RNA_def_property(srna, "frame_color", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "framing.col");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Framing Color", "Set colour of the bars");
@@ -1591,7 +1623,7 @@ static void rna_def_scene_game_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Stereo Mode", "Stereographic techniques");
RNA_def_property_update(prop, NC_SCENE, NULL);
- prop= RNA_def_property(srna, "eye_separation", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "stereo_eye_separation", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "eyeseparation");
RNA_def_property_range(prop, 0.01, 5.0);
RNA_def_property_ui_text(prop, "Eye Separation", "Set the distance between the eyes - the camera focal length/30 should be fine");
@@ -1688,7 +1720,7 @@ static void rna_def_scene_game_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "DBVT culling", "Use optimized Bullet DBVT tree for view frustum and occlusion culling");
// not used // deprecated !!!!!!!!!!!!!
- prop= RNA_def_property(srna, "activity_culling", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_activity_culling", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", (1 << 3)); //XXX mode hardcoded
RNA_def_property_ui_text(prop, "Activity Culling", "Activity culling is enabled");
@@ -1727,7 +1759,7 @@ static void rna_def_scene_game_data(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flag", GAME_ENABLE_ANIMATION_RECORD);
RNA_def_property_ui_text(prop, "Record Animation", "Record animation to fcurves");
- prop= RNA_def_property(srna, "auto_start", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_start", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_GameSettings_auto_start_get", "rna_GameSettings_auto_start_set");
RNA_def_property_ui_text(prop, "Auto Start", "Automatically start game at load time");
@@ -1738,35 +1770,35 @@ static void rna_def_scene_game_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Material Mode", "Material mode to use for rendering");
RNA_def_property_update(prop, NC_SCENE|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "glsl_lights", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_glsl_lights", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", GAME_GLSL_NO_LIGHTS);
RNA_def_property_ui_text(prop, "GLSL Lights", "Use lights for GLSL rendering");
- RNA_def_property_update(prop, NC_SCENE|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_SCENE|NA_EDITED, "rna_Scene_glsl_update");
- prop= RNA_def_property(srna, "glsl_shaders", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_glsl_shaders", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", GAME_GLSL_NO_SHADERS);
RNA_def_property_ui_text(prop, "GLSL Shaders", "Use shaders for GLSL rendering");
- RNA_def_property_update(prop, NC_SCENE|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_SCENE|NA_EDITED, "rna_Scene_glsl_update");
- prop= RNA_def_property(srna, "glsl_shadows", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_glsl_shadows", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", GAME_GLSL_NO_SHADOWS);
RNA_def_property_ui_text(prop, "GLSL Shadows", "Use shadows for GLSL rendering");
- RNA_def_property_update(prop, NC_SCENE|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_SCENE|NA_EDITED, "rna_Scene_glsl_update");
- prop= RNA_def_property(srna, "glsl_ramps", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_glsl_ramps", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", GAME_GLSL_NO_RAMPS);
RNA_def_property_ui_text(prop, "GLSL Ramps", "Use ramps for GLSL rendering");
- RNA_def_property_update(prop, NC_SCENE|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_SCENE|NA_EDITED, "rna_Scene_glsl_update");
- prop= RNA_def_property(srna, "glsl_nodes", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_glsl_nodes", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", GAME_GLSL_NO_NODES);
RNA_def_property_ui_text(prop, "GLSL Nodes", "Use nodes for GLSL rendering");
- RNA_def_property_update(prop, NC_SCENE|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_SCENE|NA_EDITED, "rna_Scene_glsl_update");
- prop= RNA_def_property(srna, "glsl_extra_textures", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_glsl_extra_textures", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", GAME_GLSL_NO_EXTRA_TEX);
RNA_def_property_ui_text(prop, "GLSL Extra Textures", "Use extra textures like normal or specular maps for GLSL rendering");
- RNA_def_property_update(prop, NC_SCENE|NA_EDITED, NULL);
+ RNA_def_property_update(prop, NC_SCENE|NA_EDITED, "rna_Scene_glsl_update");
}
static void rna_def_scene_render_layer(BlenderRNA *brna)
@@ -2039,20 +2071,20 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
prop= RNA_def_property(srna, "file_quality", PROP_INT, PROP_PERCENTAGE);
RNA_def_property_int_sdna(prop, NULL, "quality");
- RNA_def_property_range(prop, 1, 100);
- RNA_def_property_ui_text(prop, "Quality", "Quality of JPEG images, AVI Jpeg and SGI movies");
+ RNA_def_property_range(prop, 0, 100); /* 0 is needed for compression. */
+ RNA_def_property_ui_text(prop, "Quality", "Quality of JPEG images, AVI Jpeg and SGI movies, Compression for PNG's");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
/* Tiff */
- prop= RNA_def_property(srna, "tiff_bit", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_tiff_16bit", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "subimtype", R_TIFF_16BIT);
RNA_def_property_ui_text(prop, "16 Bit", "Save TIFF with 16 bits per channel");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
/* Cineon and DPX */
- prop= RNA_def_property(srna, "cineon_log", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cineon_log", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "subimtype", R_CINEON_LOG);
RNA_def_property_ui_text(prop, "Log", "Convert to logarithmic color space");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -2084,7 +2116,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Codec", "Codec settings for OpenEXR");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "exr_half", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_exr_half", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "subimtype", R_OPENEXR_HALF);
RNA_def_property_ui_text(prop, "Half", "Use 16 bit floats instead of 32 bit floats per channel");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -2290,7 +2322,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Dither Intensity", "Amount of dithering noise added to the rendered image to break up banding");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "pixel_filter", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "pixel_filter_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "filtertype");
RNA_def_property_enum_items(prop, pixel_filter_items);
RNA_def_property_ui_text(prop, "Pixel Filter", "Reconstruction filter used for combining anti-aliasing samples");
@@ -2314,7 +2346,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Octree Resolution", "Resolution of raytrace accelerator. Use higher resolutions for larger scenes");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "raytrace_structure", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "raytrace_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "raytrace_structure");
RNA_def_property_enum_items(prop, raytrace_structure_items);
RNA_def_property_ui_text(prop, "Raytrace Acceleration Structure", "Type of raytrace accelerator structure");
@@ -2330,7 +2362,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Use Local Coords", "Vertex coordinates are stored localy on each primitive. Increases memory usage, but may have impact on speed");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "render_antialiasing", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_antialiasing", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", R_OSA);
RNA_def_property_ui_text(prop, "Anti-Aliasing", "Render and combine multiple samples per pixel to prevent jagged edges");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -2341,7 +2373,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Anti-Aliasing Samples", "Amount of anti-aliasing samples per pixel");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "fields", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_fields", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", R_FIELDS);
RNA_def_property_ui_text(prop, "Fields", "Render image to two fields per frame, for interlaced TV output");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -2352,7 +2384,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Field Order", "Order of video fields. Select which lines get rendered first, to create smooth motion for TV output");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "fields_still", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_fields_still", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", R_FIELDSTILL);
RNA_def_property_ui_text(prop, "Fields Still", "Disable the time difference between fields");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -2378,7 +2410,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Subsurface Scattering", "Calculate sub-surface scattering in materials rendering");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "use_raytracing", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_raytrace", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", R_RAYTRACE);
RNA_def_property_ui_text(prop, "Raytracing", "Pre-calculate the raytrace accelerator and render raytracing effects");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -2388,7 +2420,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Textures", "Use textures to affect material properties");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "edge", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_edge_enhance", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", R_EDGE);
RNA_def_property_ui_text(prop, "Edge", "Create a toon outline around the edges of geometry");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -2420,7 +2452,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
/* motion blur */
- prop= RNA_def_property(srna, "motion_blur", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_motion_blur", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", R_MBLUR);
RNA_def_property_ui_text(prop, "Motion Blur", "Use multi-sampled 3D scene motion blur");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -2468,7 +2500,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Border Maximum Y", "Sets maximum Y value for the render border");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "crop_to_border", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_crop_to_border", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", R_CROP);
RNA_def_property_ui_text(prop, "Crop to Border", "Crop the rendered frame to the defined border size");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -2493,7 +2525,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Sequencer", "Process the render (and composited) result through the video sequence editor pipeline, if sequencer strips exist");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "color_management", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_color_management", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "color_mgt_flag", R_COLOR_MANAGEMENT);
RNA_def_property_ui_text(prop, "Color Management", "Use linear workflow - gamma corrected imaging pipeline");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_RenderSettings_color_management_update");
@@ -2521,29 +2553,29 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Movie Format", "When true the format is a movie");
- prop= RNA_def_property(srna, "free_image_textures", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_free_image_textures", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_FREE_IMAGE);
RNA_def_property_ui_text(prop, "Free Image Textures", "Free all image texture from memory after render, to save memory before compositing");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "free_unused_nodes", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_free_unused_nodes", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_COMP_FREE);
RNA_def_property_ui_text(prop, "Free Unused Nodes", "Free Nodes that are not used while compositing, to save memory");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "save_buffers", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_save_buffers", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_EXR_TILE_FILE);
RNA_def_property_boolean_funcs(prop, "rna_RenderSettings_save_buffers_get", NULL);
RNA_def_property_ui_text(prop, "Save Buffers","Save tiles for all RenderLayers and SceneNodes to files in the temp directory (saves memory, required for Full Sample)");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "full_sample", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_full_sample", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_FULL_SAMPLE);
RNA_def_property_boolean_funcs(prop, "rna_RenderSettings_full_sample_get", NULL);
RNA_def_property_ui_text(prop, "Full Sample","Save for every anti-aliasing sample the entire RenderLayer results. This solves anti-aliasing issues with compositing");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "backbuf", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_backbuf", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "bufflag", R_BACKBUF);
RNA_def_property_ui_text(prop, "Back Buffer", "Render backbuffer image");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -2554,7 +2586,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Display", "Select where rendered images will be displayed");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "output_path", PROP_STRING, PROP_DIRPATH);
+ prop= RNA_def_property(srna, "filepath", PROP_STRING, PROP_DIRPATH);
RNA_def_property_string_sdna(prop, NULL, "pic");
RNA_def_property_ui_text(prop, "Output Path", "Directory/name to save animations, # characters defines the position and length of frame numbers");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -2580,19 +2612,19 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_enum_items(prop, fixed_oversample_items);
RNA_def_property_ui_text(prop, "Anti-Aliasing Level", "");
- prop= RNA_def_property(srna, "bake_active", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_bake_selected_to_active", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "bake_flag", R_BAKE_TO_ACTIVE);
RNA_def_property_ui_text(prop, "Selected to Active", "Bake shading on the surface of selected objects to the active object");
- prop= RNA_def_property(srna, "bake_normalized", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_bake_normalize", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "bake_flag", R_BAKE_NORMALIZE);
RNA_def_property_ui_text(prop, "Normalized", "With displacement normalize to the distance, with ambient occlusion normalize without using material settings");
- prop= RNA_def_property(srna, "bake_clear", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_bake_clear", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "bake_flag", R_BAKE_CLEAR);
RNA_def_property_ui_text(prop, "Clear", "Clear Images before baking");
- prop= RNA_def_property(srna, "bake_enable_aa", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_bake_antialiasing", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "bake_flag", R_BAKE_OSA);
RNA_def_property_ui_text(prop, "Anti-Aliasing", "Enables Anti-aliasing");
@@ -2613,52 +2645,52 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
/* stamp */
- prop= RNA_def_property(srna, "stamp_time", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stamp_time", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "stamp", R_STAMP_TIME);
RNA_def_property_ui_text(prop, "Stamp Time", "Include the render frame as HH:MM:SS.FF in image metadata");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "stamp_date", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stamp_date", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "stamp", R_STAMP_DATE);
RNA_def_property_ui_text(prop, "Stamp Date", "Include the current date in image metadata");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "stamp_frame", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stamp_frame", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "stamp", R_STAMP_FRAME);
RNA_def_property_ui_text(prop, "Stamp Frame", "Include the frame number in image metadata");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "stamp_camera", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stamp_camera", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "stamp", R_STAMP_CAMERA);
RNA_def_property_ui_text(prop, "Stamp Camera", "Include the name of the active camera in image metadata");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "stamp_scene", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stamp_scene", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "stamp", R_STAMP_SCENE);
RNA_def_property_ui_text(prop, "Stamp Scene", "Include the name of the active scene in image metadata");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "stamp_note", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stamp_note", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "stamp", R_STAMP_NOTE);
RNA_def_property_ui_text(prop, "Stamp Note", "Include a custom note in image metadata");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "stamp_marker", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stamp_marker", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "stamp", R_STAMP_MARKER);
RNA_def_property_ui_text(prop, "Stamp Marker", "Include the name of the last marker in image metadata");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "stamp_filename", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stamp_filename", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "stamp", R_STAMP_FILENAME);
RNA_def_property_ui_text(prop, "Stamp Filename", "Include the filename of the .blend file in image metadata");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "stamp_sequencer_strip", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stamp_sequencer_strip", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "stamp", R_STAMP_SEQSTRIP);
RNA_def_property_ui_text(prop, "Stamp Sequence Strip", "Include the name of the foreground sequence strip in image metadata");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "stamp_render_time", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stamp_render_time", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "stamp", R_STAMP_RENDERTIME);
RNA_def_property_ui_text(prop, "Stamp Render Time", "Include the render time in the stamp image");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -2668,7 +2700,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Stamp Note Text", "Custom text to appear in the stamp note");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "render_stamp", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stamp", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "stamp", R_STAMP_DRAW);
RNA_def_property_ui_text(prop, "Render Stamp", "Render the stamp info text in the rendered image");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -2706,12 +2738,12 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
prop= RNA_def_property(srna, "sequencer_gl_preview", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "seq_prev_type");
- RNA_def_property_enum_items(prop, viewport_shading_items);
+ RNA_def_property_enum_items(prop, viewport_shade_items);
RNA_def_property_ui_text(prop, "Sequencer Preview Shading", "Method to draw in the sequencer view");
prop= RNA_def_property(srna, "sequencer_gl_render", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "seq_rend_type");
- RNA_def_property_enum_items(prop, viewport_shading_items);
+ RNA_def_property_enum_items(prop, viewport_shade_items);
RNA_def_property_ui_text(prop, "Sequencer Preview Shading", "Method to draw in the sequencer view");
/* layers */
@@ -2721,7 +2753,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "SceneRenderLayer");
RNA_def_property_ui_text(prop, "Render Layers", "");
- prop= RNA_def_property(srna, "single_layer", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_single_layer", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_SINGLE_LAYER);
RNA_def_property_ui_text(prop, "Single Layer", "Only render the active layer");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -2739,7 +2771,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Engine", "Engine to use for rendering");
RNA_def_property_update(prop, NC_WINDOW, NULL);
- prop= RNA_def_property(srna, "multiple_engines", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "has_multiple_engines", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_RenderSettings_multiple_engines_get", NULL);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Multiple Engines", "More than one rendering engine is available");
@@ -2777,7 +2809,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Simplify AO and SSS", "Global approximate AA and SSS quality factor");
RNA_def_property_update(prop, 0, "rna_Scene_simplify_update");
- prop= RNA_def_property(srna, "simplify_triangulate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_simplify_triangulate", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "simplify_flag", R_SIMPLE_NO_TRIANGULATE);
RNA_def_property_ui_text(prop, "Skip Quad to Triangles", "Disables non-planer quads being triangulated");
@@ -2800,7 +2832,7 @@ static void rna_def_scene_objects(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_struct_ui_text(srna, "Scene Objects", "Collection of scene objects");
func= RNA_def_function(srna, "link", "rna_Scene_object_link");
- RNA_def_function_ui_description(func, "Link object to scene.");
+ RNA_def_function_ui_description(func, "Link object to scene, run scene.update() after.");
RNA_def_function_flag(func, FUNC_USE_CONTEXT|FUNC_USE_REPORTS);
parm= RNA_def_pointer(func, "object", "Object", "", "Object to add to scene.");
RNA_def_property_flag(parm, PROP_REQUIRED);
@@ -2815,7 +2847,7 @@ static void rna_def_scene_objects(BlenderRNA *brna, PropertyRNA *cprop)
prop= RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Object");
- RNA_def_property_pointer_funcs(prop, "rna_Scene_active_object_get", "rna_Scene_active_object_set", NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Scene_active_object_get", "rna_Scene_active_object_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Active Object", "Active object for this scene");
/* Could call: ED_base_object_activate(C, scene->basact);
@@ -2906,14 +2938,15 @@ void RNA_def_scene(BlenderRNA *brna)
/* Global Settings */
prop= RNA_def_property(srna, "camera", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_Camera_object_poll");
RNA_def_property_ui_text(prop, "Camera", "Active camera used for rendering the scene");
RNA_def_property_update(prop, NC_SCENE|NA_EDITED, "rna_Scene_view3d_update");
- prop= RNA_def_property(srna, "set", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "background_set", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "set");
RNA_def_property_struct_type(prop, "Scene");
RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
- RNA_def_property_pointer_funcs(prop, NULL, "rna_Scene_set_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_Scene_set_set", NULL, NULL);
RNA_def_property_ui_text(prop, "Background Scene", "Background set scene");
RNA_def_property_update(prop, NC_SCENE|NA_EDITED, NULL);
@@ -2929,7 +2962,7 @@ void RNA_def_scene(BlenderRNA *brna)
RNA_def_property_update(prop, NC_WINDOW, NULL);
/* Bases/Objects */
- prop= RNA_def_property(srna, "bases", PROP_COLLECTION, PROP_NONE);
+ prop= RNA_def_property(srna, "object_bases", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "base", NULL);
RNA_def_property_struct_type(prop, "ObjectBase");
RNA_def_property_ui_text(prop, "Bases", "");
@@ -2993,14 +3026,14 @@ void RNA_def_scene(BlenderRNA *brna)
RNA_def_property_update(prop, NC_SCENE|ND_FRAME, NULL);
RNA_def_property_ui_icon(prop, ICON_PREVIEW_RANGE, 0);
- prop= RNA_def_property(srna, "preview_range_frame_start", PROP_INT, PROP_TIME);
+ prop= RNA_def_property(srna, "frame_preview_start", PROP_INT, PROP_TIME);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_int_sdna(prop, NULL, "r.psfra");
RNA_def_property_int_funcs(prop, NULL, "rna_Scene_preview_range_start_frame_set", NULL);
RNA_def_property_ui_text(prop, "Preview Range Start Frame", "Alternative start frame for UI playback");
RNA_def_property_update(prop, NC_SCENE|ND_FRAME, NULL);
- prop= RNA_def_property(srna, "preview_range_frame_end", PROP_INT, PROP_TIME);
+ prop= RNA_def_property(srna, "frame_preview_end", PROP_INT, PROP_TIME);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_int_sdna(prop, NULL, "r.pefra");
RNA_def_property_int_funcs(prop, NULL, "rna_Scene_preview_range_end_frame_set", NULL);
@@ -3008,7 +3041,7 @@ void RNA_def_scene(BlenderRNA *brna)
RNA_def_property_update(prop, NC_SCENE|ND_FRAME, NULL);
/* Stamp */
- prop= RNA_def_property(srna, "stamp_note", PROP_STRING, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stamp_note", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "r.stamp_udata");
RNA_def_property_ui_text(prop, "Stamp Note", "User define note for the render stamping");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -3017,14 +3050,14 @@ void RNA_def_scene(BlenderRNA *brna)
rna_def_animdata_common(srna);
/* Readonly Properties */
- prop= RNA_def_property(srna, "nla_tweakmode_on", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_nla_tweakmode", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_NLA_EDIT_ON);
RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* DO NOT MAKE THIS EDITABLE, OR NLA EDITOR BREAKS */
RNA_def_property_ui_text(prop, "NLA TweakMode", "Indicates whether there is any action referenced by NLA being edited. Strictly read-only");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
/* Frame dropping flag for playback and sync enum */
- prop= RNA_def_property(srna, "frame_drop", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_frame_drop", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_FRAME_DROP);
RNA_def_property_ui_text(prop, "Frame Dropping", "Play back dropping frames if frame display is too slow");
RNA_def_property_update(prop, NC_SCENE, NULL);
@@ -3059,7 +3092,7 @@ void RNA_def_scene(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Absolute Keying Sets", "Absolute Keying Sets for this Scene");
RNA_def_property_update(prop, NC_SCENE|ND_KEYINGSET, NULL);
- prop= RNA_def_property(srna, "all_keying_sets", PROP_COLLECTION, PROP_NONE);
+ prop= RNA_def_property(srna, "keying_sets_all", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_funcs(prop, "rna_Scene_all_keyingsets_begin", "rna_Scene_all_keyingsets_next", "rna_iterator_listbase_end", "rna_iterator_listbase_get", 0, 0, 0);
RNA_def_property_struct_type(prop, "KeyingSet");
RNA_def_property_ui_text(prop, "All Keying Sets", "All Keying Sets available for use (builtins and Absolute Keying Sets for this Scene)");
@@ -3068,7 +3101,7 @@ void RNA_def_scene(BlenderRNA *brna)
prop= RNA_def_property(srna, "active_keying_set", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "KeyingSet");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_pointer_funcs(prop, "rna_Scene_active_keying_set_get", "rna_Scene_active_keying_set_set", NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Scene_active_keying_set_get", "rna_Scene_active_keying_set_set", NULL, NULL);
RNA_def_property_ui_text(prop, "Active Keying Set", "Active Keying Set used to insert/delete keyframes");
RNA_def_property_update(prop, NC_SCENE|ND_KEYINGSET, NULL);
@@ -3120,41 +3153,41 @@ void RNA_def_scene(BlenderRNA *brna)
rna_def_timeline_markers(brna, prop);
/* Audio Settings */
- prop= RNA_def_property(srna, "mute_audio", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "audio.flag", AUDIO_MUTE);
+ prop= RNA_def_property(srna, "use_audio", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "audio.flag", AUDIO_MUTE);
RNA_def_property_ui_text(prop, "Audio Muted", "Play back of audio from Sequence Editor will be muted");
RNA_def_property_update(prop, NC_SCENE, NULL);
- prop= RNA_def_property(srna, "sync_audio", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_audio_sync", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "audio.flag", AUDIO_SYNC);
RNA_def_property_ui_text(prop, "Audio Sync", "Play back and sync with audio clock, dropping frames if frame display is too slow");
RNA_def_property_update(prop, NC_SCENE, NULL);
- prop= RNA_def_property(srna, "scrub_audio", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_audio_scrub", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "audio.flag", AUDIO_SCRUB);
RNA_def_property_ui_text(prop, "Audio Scrubbing", "Play audio from Sequence Editor while scrubbing");
RNA_def_property_update(prop, NC_SCENE, NULL);
- prop= RNA_def_property(srna, "speed_of_sound", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "audio_doppler_speed", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "audio.speed_of_sound");
RNA_def_property_range(prop, 0.01f, FLT_MAX);
RNA_def_property_ui_text(prop, "Speed of Sound", "Speed of sound for Doppler effect calculation");
RNA_def_property_update(prop, NC_SCENE, NULL);
- prop= RNA_def_property(srna, "doppler_factor", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "audio_doppler_factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "audio.doppler_factor");
RNA_def_property_range(prop, 0.0, FLT_MAX);
RNA_def_property_ui_text(prop, "Doppler Factor", "Pitch factor for Doppler effect calculation");
RNA_def_property_update(prop, NC_SCENE, NULL);
- prop= RNA_def_property(srna, "distance_model", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "audio_distance_model", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "audio.distance_model");
RNA_def_property_enum_items(prop, audio_distance_model_items);
RNA_def_property_ui_text(prop, "Distance Model", "Distance model for distance attenuation calculation");
RNA_def_property_update(prop, NC_SCENE, NULL);
/* Game Settings */
- prop= RNA_def_property(srna, "game_data", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "game_settings", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_pointer_sdna(prop, NULL, "gm");
RNA_def_property_struct_type(prop, "SceneGameData");
diff --git a/source/blender/makesrna/intern/rna_scene_api.c b/source/blender/makesrna/intern/rna_scene_api.c
index eb48fb6c237..498bd148508 100644
--- a/source/blender/makesrna/intern/rna_scene_api.c
+++ b/source/blender/makesrna/intern/rna_scene_api.c
@@ -39,22 +39,30 @@
#ifdef RNA_RUNTIME
#include "BKE_animsys.h"
-#include "BKE_scene.h"
-#include "BKE_image.h"
#include "BKE_depsgraph.h"
+#include "BKE_global.h"
+#include "BKE_image.h"
+#include "BKE_scene.h"
#include "BKE_writeavi.h"
-static void rna_Scene_set_frame(Scene *scene, int frame)
+static void rna_Scene_set_frame(Scene *scene, int frame, float subframe)
{
scene->r.cfra= frame;
+ scene->r.subframe= subframe;
+
CLAMP(scene->r.cfra, MINAFRAME, MAXFRAME);
- scene_update_for_newframe(scene, (1<<20) - 1);
+ scene_update_for_newframe(G.main, scene, (1<<20) - 1);
WM_main_add_notifier(NC_SCENE|ND_FRAME, scene);
}
+static void rna_Scene_update_tagged(Scene *scene)
+{
+ scene_update_tagged(G.main, scene);
+}
+
static KeyingSet *rna_Scene_add_keying_set(Scene *sce, ReportList *reports,
char name[], int absolute, int insertkey_needed, int insertkey_visual)
{
@@ -101,8 +109,9 @@ void RNA_api_scene(StructRNA *srna)
RNA_def_function_ui_description(func, "Set scene frame updating all objects immediately.");
parm= RNA_def_int(func, "frame", 0, MINAFRAME, MAXFRAME, "", "Frame number to set.", MINAFRAME, MAXFRAME);
RNA_def_property_flag(parm, PROP_REQUIRED);
+ parm= RNA_def_float(func, "subframe", 0.0, 0.0, 1.0, "", "Sub-frame time, between 0.0 and 1.0", 0.0, 1.0);
- func= RNA_def_function(srna, "update", "scene_update_tagged");
+ func= RNA_def_function(srna, "update", "rna_Scene_update_tagged");
RNA_def_function_ui_description(func, "Update data tagged to be updated from previous access to data or operators.");
/* Add Keying Set */
@@ -117,8 +126,8 @@ void RNA_api_scene(StructRNA *srna)
/* flags */
RNA_def_boolean(func, "absolute", 1, "Absolute", "Keying Set defines specific paths/settings to be keyframed (i.e. is not reliant on context info)");
/* keying flags */
- RNA_def_boolean(func, "insertkey_needed", 0, "Insert Keyframes - Only Needed", "Only insert keyframes where they're needed in the relevant F-Curves.");
- RNA_def_boolean(func, "insertkey_visual", 0, "Insert Keyframes - Visual", "Insert keyframes based on 'visual transforms'.");
+ RNA_def_boolean(func, "use_insertkey_needed", 0, "Insert Keyframes - Only Needed", "Only insert keyframes where they're needed in the relevant F-Curves.");
+ RNA_def_boolean(func, "use_insertkey_visual", 0, "Insert Keyframes - Visual", "Insert keyframes based on 'visual transforms'.");
}
void RNA_api_scene_render(StructRNA *srna)
diff --git a/source/blender/makesrna/intern/rna_screen.c b/source/blender/makesrna/intern/rna_screen.c
index ecf2206c25c..da8aab32f31 100644
--- a/source/blender/makesrna/intern/rna_screen.c
+++ b/source/blender/makesrna/intern/rna_screen.c
@@ -74,7 +74,7 @@ static void rna_Screen_scene_update(bContext *C, PointerRNA *ptr)
}
}
-static int rna_Screen_animation_playing_get(PointerRNA *ptr)
+static int rna_Screen_is_animation_playing_get(PointerRNA *ptr)
{
bScreen *sc= (bScreen*)ptr->data;
return (sc->animtimer != NULL);
@@ -184,7 +184,7 @@ static void rna_def_screen(BlenderRNA *brna)
prop= RNA_def_property(srna, "scene", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_EDITABLE|PROP_NEVER_NULL);
- RNA_def_property_pointer_funcs(prop, NULL, "rna_Screen_scene_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_Screen_scene_set", NULL, NULL);
RNA_def_property_ui_text(prop, "Scene", "Active scene to be edited in the screen");
RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, 0, "rna_Screen_scene_update");
@@ -194,12 +194,12 @@ static void rna_def_screen(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "Area");
RNA_def_property_ui_text(prop, "Areas", "Areas the screen is subdivided into");
- prop= RNA_def_property(srna, "animation_playing", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_animation_playing", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- RNA_def_property_boolean_funcs(prop, "rna_Screen_animation_playing_get", NULL);
+ RNA_def_property_boolean_funcs(prop, "rna_Screen_is_animation_playing_get", NULL);
RNA_def_property_ui_text(prop, "Animation Playing", "Animation playback is active");
- prop= RNA_def_property(srna, "fullscreen", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_fullscreen", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_funcs(prop, "rna_Screen_fullscreen_get", NULL);
RNA_def_property_ui_text(prop, "Fullscreen", "An area is maximised, filling this screen");
diff --git a/source/blender/makesrna/intern/rna_sculpt_paint.c b/source/blender/makesrna/intern/rna_sculpt_paint.c
index 604f7776d56..3b83ec2d3ad 100644
--- a/source/blender/makesrna/intern/rna_sculpt_paint.c
+++ b/source/blender/makesrna/intern/rna_sculpt_paint.c
@@ -30,6 +30,7 @@
#include "DNA_ID.h"
#include "DNA_scene_types.h"
+#include "DNA_brush_types.h"
#include "BKE_paint.h"
@@ -48,6 +49,7 @@ static EnumPropertyItem particle_edit_hair_brush_items[] = {
{0, NULL, 0, NULL, NULL}};
#ifdef RNA_RUNTIME
+#include "MEM_guardedalloc.h"
#include "BKE_context.h"
#include "BKE_pointcache.h"
@@ -88,29 +90,6 @@ static PointerRNA rna_ParticleBrush_curve_get(PointerRNA *ptr)
return rna_pointer_inherit_refine(ptr, &RNA_CurveMapping, NULL);
}
-static void rna_Paint_brushes_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
-{
- Paint *p= (Paint*)ptr->data;
- rna_iterator_array_begin(iter, (void*)p->brushes, sizeof(Brush*), p->brush_count, 0, NULL);
-}
-
-static int rna_Paint_brushes_length(PointerRNA *ptr)
-{
- Paint *p= (Paint*)ptr->data;
-
- return p->brush_count;
-}
-
-static PointerRNA rna_Paint_active_brush_get(PointerRNA *ptr)
-{
- return rna_pointer_inherit_refine(ptr, &RNA_Brush, paint_brush(ptr->data));
-}
-
-static void rna_Paint_active_brush_set(PointerRNA *ptr, PointerRNA value)
-{
- paint_brush_set(ptr->data, value.data);
-}
-
static void rna_ParticleEdit_redo(Main *bmain, Scene *scene, PointerRNA *ptr)
{
Object *ob= (scene->basact)? scene->basact->object: NULL;
@@ -133,7 +112,7 @@ static void rna_ParticleEdit_tool_set(PointerRNA *ptr, int value)
ParticleEditSettings *pset= (ParticleEditSettings*)ptr->data;
/* redraw hair completely if weight brush is/was used */
- if(pset->brushtype == PE_BRUSH_WEIGHT || value == PE_BRUSH_WEIGHT) {
+ if((pset->brushtype == PE_BRUSH_WEIGHT || value == PE_BRUSH_WEIGHT) && pset->scene) {
Object *ob = (pset->scene->basact)? pset->scene->basact->object: NULL;
if(ob) {
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
@@ -163,63 +142,28 @@ static int rna_ParticleEdit_editable_get(PointerRNA *ptr)
{
ParticleEditSettings *pset= (ParticleEditSettings*)ptr->data;
- return (pset->object && PE_get_current(pset->scene, pset->object));
+ return (pset->object && pset->scene && PE_get_current(pset->scene, pset->object));
}
static int rna_ParticleEdit_hair_get(PointerRNA *ptr)
{
ParticleEditSettings *pset= (ParticleEditSettings*)ptr->data;
- PTCacheEdit *edit = PE_get_current(pset->scene, pset->object);
-
- return (edit && edit->psys);
-}
-
-static void rna_Paint_active_brush_index_set(PointerRNA *ptr, int value)
-{
- Paint *p= ptr->data;
- CLAMP(value, 0, p->brush_count-1);
- p->active_brush_index= value;
-}
-
-static void rna_Paint_active_brush_index_range(PointerRNA *ptr, int *min, int *max)
-{
- Paint *p= ptr->data;
- *min= 0;
- *max= MAX2(p->brush_count-1, 0);
-}
+ if(pset->scene) {
+ PTCacheEdit *edit = PE_get_current(pset->scene, pset->object);
-static void rna_Paint_active_brush_name_get(PointerRNA *ptr, char *value)
-{
- Paint *p= ptr->data;
- Brush *br = paint_brush(p);
+ return (edit && edit->psys);
+ }
- BLI_strncpy(value, br->id.name+2, sizeof(br->id.name)-2);
+ return 0;
}
-
-static int rna_Paint_active_brush_name_length(PointerRNA *ptr)
+static int rna_Brush_mode_poll(PointerRNA *ptr, PointerRNA value)
{
- Paint *p= ptr->data;
- Brush *br = paint_brush(p);
- return strlen(br->id.name+2);
+ Scene *scene= (Scene *)ptr->id.data;
+ Object *ob = OBACT;
+ Brush *brush= value.id.data;
+ return ob->mode & brush->ob_mode;
}
-
-static void rna_Paint_active_brush_name_set(PointerRNA *ptr, const char *value)
-{
- Paint *p= ptr->data;
- Brush *br;
- int i;
-
- for(i = 0; i < p->brush_count; ++i) {
- br = p->brushes[i];
-
- if (strcmp(br->id.name+2, value)==0) {
- paint_brush_set(p, br);
- return;
- }
- }
-}
-
#else
static void rna_def_paint(BlenderRNA *brna)
@@ -230,32 +174,11 @@ static void rna_def_paint(BlenderRNA *brna)
srna= RNA_def_struct(brna, "Paint", NULL);
RNA_def_struct_ui_text(srna, "Paint", "");
- prop= RNA_def_property(srna, "brushes", PROP_COLLECTION, PROP_NONE);
- RNA_def_property_struct_type(prop, "Brush");
- RNA_def_property_collection_funcs(prop, "rna_Paint_brushes_begin",
- "rna_iterator_array_next",
- "rna_iterator_array_end",
- "rna_iterator_array_dereference_get",
- "rna_Paint_brushes_length", 0, 0);
- RNA_def_property_ui_text(prop, "Brushes", "Brushes selected for this paint mode");
-
- prop= RNA_def_property(srna, "active_brush_index", PROP_INT, PROP_NONE);
- RNA_def_property_int_funcs(prop, NULL, "rna_Paint_active_brush_index_set", "rna_Paint_active_brush_index_range");
- RNA_def_property_range(prop, 0, INT_MAX);
- RNA_def_property_update(prop, NC_BRUSH|NA_EDITED, NULL);
-
- prop= RNA_def_property(srna, "active_brush_name", PROP_STRING, PROP_NONE);
- RNA_def_property_string_funcs(prop, "rna_Paint_active_brush_name_get", "rna_Paint_active_brush_name_length", "rna_Paint_active_brush_name_set");
- RNA_def_property_string_maxlength(prop, sizeof(((ID*)NULL)->name)-2);
- RNA_def_property_ui_text(prop, "Active Brush Name", "");
- RNA_def_property_update(prop, NC_BRUSH|NA_EDITED, NULL);
-
- /* Fake property to get active brush directly, rather than integer index */
+ /* Global Settings */
prop= RNA_def_property(srna, "brush", PROP_POINTER, PROP_NONE);
- RNA_def_property_struct_type(prop, "Brush");
- RNA_def_property_pointer_funcs(prop, "rna_Paint_active_brush_get", "rna_Paint_active_brush_set", NULL);
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_ui_text(prop, "Brush", "Active paint brush");
+ RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_Brush_mode_poll");
+ RNA_def_property_ui_text(prop, "Brush", "Active Brush");
RNA_def_property_update(prop, NC_BRUSH|NA_EDITED, NULL);
prop= RNA_def_property(srna, "show_brush", PROP_BOOLEAN, PROP_NONE);
@@ -266,7 +189,7 @@ static void rna_def_paint(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flags", PAINT_SHOW_BRUSH_ON_SURFACE);
RNA_def_property_ui_text(prop, "Show Brush On Surface", "");
- prop= RNA_def_property(srna, "fast_navigate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_low_resolution", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", PAINT_FAST_NAVIGATE);
RNA_def_property_ui_text(prop, "Fast Navigate", "For multires, show low resolution while navigating the view");
}
@@ -279,22 +202,22 @@ static void rna_def_sculpt(BlenderRNA *brna)
srna= RNA_def_struct(brna, "Sculpt", "Paint");
RNA_def_struct_ui_text(srna, "Sculpt", "");
- prop= RNA_def_property(srna, "radial_symm", PROP_INT, PROP_XYZ);
+ prop= RNA_def_property(srna, "radial_symmetry", PROP_INT, PROP_XYZ);
RNA_def_property_int_sdna(prop, NULL, "radial_symm");
RNA_def_property_int_default(prop, 1);
RNA_def_property_range(prop, 1, 64);
RNA_def_property_ui_range(prop, 0, 32, 1, 1);
RNA_def_property_ui_text(prop, "Radial Symmetry Count X Axis", "Number of times to copy strokes across the surface");
- prop= RNA_def_property(srna, "symmetry_x", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_symmetry_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_SYMM_X);
RNA_def_property_ui_text(prop, "Symmetry X", "Mirror brush across the X axis");
- prop= RNA_def_property(srna, "symmetry_y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_symmetry_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_SYMM_Y);
RNA_def_property_ui_text(prop, "Symmetry Y", "Mirror brush across the Y axis");
- prop= RNA_def_property(srna, "symmetry_z", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_symmetry_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_SYMM_Z);
RNA_def_property_ui_text(prop, "Symmetry Z", "Mirror brush across the Z axis");
@@ -314,7 +237,7 @@ static void rna_def_sculpt(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_SYMMETRY_FEATHER);
RNA_def_property_ui_text(prop, "Symmetry Feathering", "Reduce the strength of the brush where it overlaps symmetrical daubs");
- prop= RNA_def_property(srna, "use_openmp", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_threaded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_USE_OPENMP);
RNA_def_property_ui_text(prop, "Use OpenMP", "Take advantage of multiple CPU cores to improve sculpting performance");
}
@@ -328,15 +251,15 @@ static void rna_def_vertex_paint(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "VPaint");
RNA_def_struct_ui_text(srna, "Vertex Paint", "Properties of vertex and weight paint mode");
- prop= RNA_def_property(srna, "all_faces", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_all_faces", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", VP_AREA);
RNA_def_property_ui_text(prop, "All Faces", "Paint on all faces inside brush");
-
- prop= RNA_def_property(srna, "normals", PROP_BOOLEAN, PROP_NONE);
+
+ prop= RNA_def_property(srna, "use_normal", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", VP_NORMALS);
RNA_def_property_ui_text(prop, "Normals", "Applies the vertex normal before painting");
- prop= RNA_def_property(srna, "spray", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_spray", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", VP_SPRAY);
RNA_def_property_ui_text(prop, "Spray", "Keep applying paint effect while holding mouse");
}
@@ -368,7 +291,7 @@ static void rna_def_image_paint(BlenderRNA *brna)
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_XRAY);
RNA_def_property_ui_text(prop, "Occlude", "Only paint onto the faces directly under the brush (slower)");
- prop= RNA_def_property(srna, "use_backface_cull", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_backface_culling", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_BACKFACE);
RNA_def_property_ui_text(prop, "Cull", "Ignore faces pointing away from the view (faster)");
@@ -443,21 +366,21 @@ static void rna_def_particle_edit(BlenderRNA *brna)
RNA_def_property_enum_funcs(prop, NULL, "rna_ParticleEdit_tool_set", "rna_ParticleEdit_tool_itemf");
RNA_def_property_ui_text(prop, "Tool", "");
- prop= RNA_def_property(srna, "selection_mode", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "select_mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "selectmode");
RNA_def_property_enum_items(prop, select_mode_items);
RNA_def_property_ui_text(prop, "Selection Mode", "Particle select and display mode");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_ParticleEdit_update");
- prop= RNA_def_property(srna, "keep_lengths", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_preserve_length", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PE_KEEP_LENGTHS);
RNA_def_property_ui_text(prop, "Keep Lengths", "Keep path lengths constant");
- prop= RNA_def_property(srna, "keep_root", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_preserve_root", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PE_LOCK_FIRST);
RNA_def_property_ui_text(prop, "Keep Root", "Keep root keys unmodified");
- prop= RNA_def_property(srna, "emitter_deflect", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_emitter_deflect", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PE_DEFLECT_EMITTER);
RNA_def_property_ui_text(prop, "Deflect Emitter", "Keep paths from intersecting the emitter");
@@ -466,25 +389,25 @@ static void rna_def_particle_edit(BlenderRNA *brna)
RNA_def_property_ui_range(prop, 0.0f, 10.0f, 10, 3);
RNA_def_property_ui_text(prop, "Emitter Distance", "Distance to keep particles away from the emitter");
- prop= RNA_def_property(srna, "fade_time", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_fade_time", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PE_FADE_TIME);
RNA_def_property_ui_text(prop, "Fade Time", "Fade paths and keys further away from current frame");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_ParticleEdit_update");
- prop= RNA_def_property(srna, "auto_velocity", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_velocity", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PE_AUTO_VELOCITY);
RNA_def_property_ui_text(prop, "Auto Velocity", "Calculate point velocities automatically");
- prop= RNA_def_property(srna, "draw_particles", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_particles", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PE_DRAW_PART);
RNA_def_property_ui_text(prop, "Draw Particles", "Draw actual particles");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_ParticleEdit_redo");
- prop= RNA_def_property(srna, "add_interpolate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_default_interpolate", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PE_INTERPOLATE_ADDED);
RNA_def_property_ui_text(prop, "Interpolate", "Interpolate new particles from the existing ones");
- prop= RNA_def_property(srna, "add_keys", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "default_key_count", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "totaddkey");
RNA_def_property_range(prop, 2, INT_MAX);
RNA_def_property_ui_range(prop, 2, 20, 10, 3);
@@ -492,7 +415,7 @@ static void rna_def_particle_edit(BlenderRNA *brna)
prop= RNA_def_property(srna, "brush", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "ParticleBrush");
- RNA_def_property_pointer_funcs(prop, "rna_ParticleEdit_brush_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_ParticleEdit_brush_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Brush", "");
prop= RNA_def_property(srna, "draw_step", PROP_INT, PROP_NONE);
@@ -511,12 +434,12 @@ static void rna_def_particle_edit(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Type", "");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_ParticleEdit_redo");
- prop= RNA_def_property(srna, "editable", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_editable", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_ParticleEdit_editable_get", NULL);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Editable", "A valid edit mode exists");
- prop= RNA_def_property(srna, "hair", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_hair", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_ParticleEdit_hair_get", NULL);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Hair", "Editing hair");
@@ -569,7 +492,7 @@ static void rna_def_particle_edit(BlenderRNA *brna)
/* dummy */
prop= RNA_def_property(srna, "curve", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "CurveMapping");
- RNA_def_property_pointer_funcs(prop, "rna_ParticleBrush_curve_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_ParticleBrush_curve_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Curve", "");
}
diff --git a/source/blender/makesrna/intern/rna_sensor.c b/source/blender/makesrna/intern/rna_sensor.c
index 90a520d6d92..d20e5aebcfb 100644
--- a/source/blender/makesrna/intern/rna_sensor.c
+++ b/source/blender/makesrna/intern/rna_sensor.c
@@ -260,13 +260,13 @@ static void rna_def_sensor(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Type", "");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "pinned", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "pin", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SENS_PIN);
RNA_def_property_ui_text(prop, "Pinned", "Display when not linked to a visible states controller");
RNA_def_property_ui_icon(prop, ICON_UNPINNED, 1);
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SENS_SHOW);
RNA_def_property_ui_text(prop, "Expanded", "Set sensor expanded in the user interface");
RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
@@ -276,17 +276,18 @@ static void rna_def_sensor(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Invert Output", "Invert the level(output) of this sensor");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "level", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_level", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "level", 1);
RNA_def_property_ui_text(prop, "Level", "Level detector, trigger controllers of new states(only applicable upon logic state transition)");
RNA_def_property_boolean_funcs(prop, NULL, "rna_Sensor_level_set");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "pulse_true_level", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pulse_true_level", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pulse", SENS_PULSE_REPEAT);
RNA_def_property_ui_text(prop, "Pulse True Level", "Activate TRUE level triggering (pulse mode)");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "pulse_false_level", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pulse_false_level", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pulse", SENS_NEG_PULSE_MODE);
RNA_def_property_ui_text(prop, "Pulse False Level", "Activate FALSE level triggering (pulse mode)");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -297,7 +298,7 @@ static void rna_def_sensor(BlenderRNA *brna)
RNA_def_property_range(prop, 0, 10000);
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "tap", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_tap", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "tap", 1);
RNA_def_property_boolean_funcs(prop, NULL, "rna_Sensor_tap_set");
RNA_def_property_ui_text(prop, "Tap", "Trigger controllers only for an instant, even while the sensor remains true");
@@ -382,7 +383,7 @@ static void rna_def_touch_sensor(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Material", "Only look for objects with this material");
/* note: custom set function is ONLY to avoid rna setting a user for this. */
- RNA_def_property_pointer_funcs(prop, NULL, "rna_Sensor_touch_material_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_Sensor_touch_material_set", NULL, NULL);
RNA_def_property_update(prop, NC_LOGIC, NULL);
}
@@ -402,14 +403,14 @@ static void rna_def_keyboard_sensor(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Key", "");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "modifier_key", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "modifier_key_1", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "qual");
RNA_def_property_enum_items(prop, event_type_items);
RNA_def_property_enum_funcs(prop, NULL, "rna_Sensor_keyboard_modifier_set", NULL);
RNA_def_property_ui_text(prop, "Modifier Key", "Modifier key code");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "second_modifier_key", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "modifier_key_2", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "qual2");
RNA_def_property_enum_items(prop, event_type_items);
RNA_def_property_enum_funcs(prop, NULL, "rna_Sensor_keyboard_modifier2_set", NULL);
@@ -426,7 +427,7 @@ static void rna_def_keyboard_sensor(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Log Toggle", "Property that receive the keystrokes in case a string is logged");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "all_keys", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_all_keys", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "type", 1);
RNA_def_property_ui_text(prop, "All Keys", "Trigger this sensor on any keystroke");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -464,12 +465,12 @@ static void rna_def_property_sensor(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Value", "Check for this value in types in Equal or Not Equal types");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "min_value", PROP_STRING, PROP_NONE);
+ prop= RNA_def_property(srna, "value_min", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "value");
RNA_def_property_ui_text(prop, "Minimum Value", "Specify minimum value in Interval type");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "max_value", PROP_STRING, PROP_NONE);
+ prop= RNA_def_property(srna, "value_max", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "maxvalue");
RNA_def_property_ui_text(prop, "Maximum Value", "Specify maximum value in Interval type");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -548,7 +549,7 @@ static void rna_def_delay_sensor(BlenderRNA *brna)
RNA_def_property_range(prop, 0, 5000);
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "repeat", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_repeat", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SENS_DELAY_REPEAT);
RNA_def_property_ui_text(prop, "Repeat", "Toggle repeat option. If selected, the sensor restarts after Delay+Dur logic tics");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -563,12 +564,12 @@ static void rna_def_collision_sensor(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Collision Sensor", "Sensor to detect objects colliding with the current object, with more settings than the Touch sensor");
RNA_def_struct_sdna_from(srna, "bCollisionSensor", "data");
- prop= RNA_def_property(srna, "pulse", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pulse", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", SENS_COLLISION_PULSE);
RNA_def_property_ui_text(prop, "Pulse", "Changes to the set of colliding objects generates pulse");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "collision_type", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_material", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", SENS_COLLISION_MATERIAL);
RNA_def_property_ui_text(prop, "M/P", "Toggle collision on material or property");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -695,7 +696,7 @@ static void rna_def_ray_sensor(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Material", "Only look for Objects with this material");
*/
- prop= RNA_def_property(srna, "x_ray_mode", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_x_ray", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", SENS_RAY_XRAY);
RNA_def_property_ui_text(prop, "X-Ray Mode", "Toggle X-Ray option (see through objects that don't have the property)");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -773,7 +774,7 @@ static void rna_def_joystick_sensor(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Event Type", "The type of event this joystick sensor is triggered on");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "all_events", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_all_events", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SENS_JOY_ANY_EVENT);
RNA_def_property_ui_text(prop, "All Events", "Triggered by all events on this joysticks current type (axis/button/hat)");
RNA_def_property_update(prop, NC_LOGIC, NULL);
diff --git a/source/blender/makesrna/intern/rna_sequencer.c b/source/blender/makesrna/intern/rna_sequencer.c
index f46efb675ca..d3207f14e24 100644
--- a/source/blender/makesrna/intern/rna_sequencer.c
+++ b/source/blender/makesrna/intern/rna_sequencer.c
@@ -36,6 +36,7 @@
#include "DNA_sequence_types.h"
#include "BKE_animsys.h"
+#include "BKE_global.h"
#include "BKE_sequencer.h"
#include "MEM_guardedalloc.h"
@@ -149,7 +150,7 @@ static void rna_Sequence_anim_startofs_final_set(PointerRNA *ptr, int value)
seq->anim_startofs = MIN2(value, seq->len + seq->anim_startofs);
- reload_sequence_new_file(scene, seq, FALSE);
+ reload_sequence_new_file(G.main, scene, seq, FALSE);
rna_Sequence_frame_change_update(scene, seq);
}
@@ -160,7 +161,7 @@ static void rna_Sequence_anim_endofs_final_set(PointerRNA *ptr, int value)
seq->anim_endofs = MIN2(value, seq->len + seq->anim_endofs);
- reload_sequence_new_file(scene, seq, FALSE);
+ reload_sequence_new_file(G.main, scene, seq, FALSE);
rna_Sequence_frame_change_update(scene, seq);
}
@@ -253,6 +254,70 @@ static void rna_Sequence_use_crop_set(PointerRNA *ptr, int value)
seq->flag ^= SEQ_USE_CROP;
}
}
+
+static int transform_seq_cmp_cb(Sequence *seq, void *arg_pt)
+{
+ struct { Sequence *seq; void *transform; } *data= arg_pt;
+
+ if(seq->strip && seq->strip->transform == data->transform) {
+ data->seq= seq;
+ return -1; /* done so bail out */
+ }
+ return 1;
+}
+
+static char *rna_SequenceTransform_path(PointerRNA *ptr)
+{
+ Scene *scene= ptr->id.data;
+ Editing *ed= seq_give_editing(scene, FALSE);
+ Sequence *seq;
+
+ struct { Sequence *seq; void *transform; } data;
+ data.seq= NULL;
+ data.transform= ptr->data;
+
+ /* irritating we need to search for our sequence! */
+ seqbase_recursive_apply(&ed->seqbase, transform_seq_cmp_cb, &data);
+ seq= data.seq;
+
+ if (seq && seq->name+2)
+ return BLI_sprintfN("sequence_editor.sequences_all[\"%s\"].transform", seq->name+2);
+ else
+ return BLI_strdup("");
+}
+
+static int crop_seq_cmp_cb(Sequence *seq, void *arg_pt)
+{
+ struct { Sequence *seq; void *crop; } *data= arg_pt;
+
+ if(seq->strip && seq->strip->crop == data->crop) {
+ data->seq= seq;
+ return -1; /* done so bail out */
+ }
+ return 1;
+}
+
+static char *rna_SequenceCrop_path(PointerRNA *ptr)
+{
+ Scene *scene= ptr->id.data;
+ Editing *ed= seq_give_editing(scene, FALSE);
+ Sequence *seq;
+
+ struct { Sequence *seq; void *crop; } data;
+ data.seq= NULL;
+ data.crop= ptr->data;
+
+ /* irritating we need to search for our sequence! */
+ seqbase_recursive_apply(&ed->seqbase, crop_seq_cmp_cb, &data);
+ seq= data.seq;
+
+ if (seq && seq->name+2)
+ return BLI_sprintfN("sequence_editor.sequences_all[\"%s\"].crop", seq->name+2);
+ else
+ return BLI_strdup("");
+}
+
+
/* name functions that ignore the first two characters */
static void rna_Sequence_name_get(PointerRNA *ptr, char *value)
{
@@ -460,7 +525,17 @@ static void rna_Sequence_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
Editing *ed= seq_give_editing(scene, FALSE);
- free_imbuf_seq(scene, &ed->seqbase, FALSE);
+ free_imbuf_seq(scene, &ed->seqbase, FALSE, TRUE);
+
+ if(RNA_struct_is_a(ptr->type, &RNA_SoundSequence))
+ seq_update_sound(scene, ptr->data);
+}
+
+static void rna_Sequence_update_reopen_files(Main *bmain, Scene *scene, PointerRNA *ptr)
+{
+ Editing *ed= seq_give_editing(scene, FALSE);
+
+ free_imbuf_seq(scene, &ed->seqbase, FALSE, FALSE);
if(RNA_struct_is_a(ptr->type, &RNA_SoundSequence))
seq_update_sound(scene, ptr->data);
@@ -477,7 +552,7 @@ static void rna_Sequence_mute_update(Main *bmain, Scene *scene, PointerRNA *ptr)
static void rna_Sequence_filepath_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
Sequence *seq= (Sequence*)(ptr->data);
- reload_sequence_new_file(scene, seq, TRUE);
+ reload_sequence_new_file(G.main, scene, seq, TRUE);
calc_sequence(scene, seq);
rna_Sequence_update(bmain, scene, ptr);
}
@@ -596,25 +671,31 @@ static void rna_def_strip_crop(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Sequence Crop", "Cropping parameters for a sequence strip");
RNA_def_struct_sdna(srna, "StripCrop");
- prop= RNA_def_property(srna, "top", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "max_y", PROP_INT, PROP_UNSIGNED);
+ RNA_def_property_int_sdna(prop, NULL, "top");
RNA_def_property_ui_text(prop, "Top", "");
RNA_def_property_ui_range(prop, 0, 4096, 1, 0);
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "bottom", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "min_x", PROP_INT, PROP_UNSIGNED);
+ RNA_def_property_int_sdna(prop, NULL, "bottom");
RNA_def_property_ui_text(prop, "Bottom", "");
RNA_def_property_ui_range(prop, 0, 4096, 1, 0);
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "left", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "min_y", PROP_INT, PROP_UNSIGNED);
+ RNA_def_property_int_sdna(prop, NULL, "left");
RNA_def_property_ui_text(prop, "Left", "");
RNA_def_property_ui_range(prop, 0, 4096, 1, 0);
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "right", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "max_x", PROP_INT, PROP_UNSIGNED);
+ RNA_def_property_int_sdna(prop, NULL, "right");
RNA_def_property_ui_text(prop, "Right", "");
RNA_def_property_ui_range(prop, 0, 4096, 1, 0);
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
+
+ RNA_def_struct_path_func(srna, "rna_SequenceCrop_path");
}
static void rna_def_strip_transform(BlenderRNA *brna)
@@ -637,6 +718,9 @@ static void rna_def_strip_transform(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Offset Y", "");
RNA_def_property_ui_range(prop, -4096, 4096, 1, 0);
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
+
+ RNA_def_struct_path_func(srna, "rna_SequenceTransform_path");
+
}
static void rna_def_strip_proxy(BlenderRNA *brna)
@@ -684,17 +768,17 @@ static void rna_def_strip_color_balance(BlenderRNA *brna)
RNA_def_property_ui_range(prop, 0, 2, 0.1, 3);
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "inverse_gain", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_gain", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_COLOR_BALANCE_INVERSE_GAIN);
RNA_def_property_ui_text(prop, "Inverse Gain", "");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "inverse_gamma", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_gamma", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_COLOR_BALANCE_INVERSE_GAMMA);
RNA_def_property_ui_text(prop, "Inverse Gamma", "");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "inverse_lift", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_lift", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_COLOR_BALANCE_INVERSE_LIFT);
RNA_def_property_ui_text(prop, "Inverse Lift", "");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
@@ -776,17 +860,17 @@ static void rna_def_sequence(BlenderRNA *brna)
/* flags */
- prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SELECT);
- RNA_def_property_ui_text(prop, "Selected", "");
+ RNA_def_property_ui_text(prop, "Select", "");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER|NA_SELECTED, NULL);
- prop= RNA_def_property(srna, "left_handle_selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select_left_handle", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_LEFTSEL);
RNA_def_property_ui_text(prop, "Left Handle Selected", "");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER|NA_SELECTED, NULL);
- prop= RNA_def_property(srna, "right_handle_selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select_right_handle", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_RIGHTSEL);
RNA_def_property_ui_text(prop, "Right Handle Selected", "");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER|NA_SELECTED, NULL);
@@ -803,14 +887,14 @@ static void rna_def_sequence(BlenderRNA *brna)
/* strip positioning */
- prop= RNA_def_property(srna, "frame_final_length", PROP_INT, PROP_TIME);
+ prop= RNA_def_property(srna, "frame_final_duration", PROP_INT, PROP_TIME);
RNA_def_property_range(prop, 1, MAXFRAME);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Length", "The length of the contents of this strip before the handles are applied");
RNA_def_property_int_funcs(prop, "rna_Sequence_frame_length_get", "rna_Sequence_frame_length_set",NULL);
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "frame_length", PROP_INT, PROP_TIME);
+ prop= RNA_def_property(srna, "frame_duration", PROP_INT, PROP_TIME);
RNA_def_property_int_sdna(prop, NULL, "len");
RNA_def_property_clear_flag(prop, PROP_EDITABLE|PROP_ANIMATABLE);
RNA_def_property_range(prop, 1, MAXFRAME);
@@ -872,12 +956,13 @@ static void rna_def_sequence(BlenderRNA *brna)
/* blending */
- prop= RNA_def_property(srna, "blend_mode", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "blend_type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "blend_mode");
RNA_def_property_enum_items(prop, blend_mode_items);
RNA_def_property_ui_text(prop, "Blend Mode", "");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "blend_opacity", PROP_FLOAT, PROP_FACTOR);
+ prop= RNA_def_property(srna, "blend_alpha", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Blend Opacity", "");
RNA_def_property_float_funcs(prop, "rna_Sequence_opacity_get", "rna_Sequence_opacity_set", NULL); // stupid 0-100 -> 0-1
@@ -889,7 +974,7 @@ static void rna_def_sequence(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Effect fader position", "");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "use_effect_default_fade", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_default_fade", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_EFFECT_DEFAULT_FADE);
RNA_def_property_ui_text(prop, "Use Default Fade", "Fade effect using the built-in default (usually make transition as long as effect strip)");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
@@ -957,36 +1042,37 @@ static void rna_def_filter_video(StructRNA *srna)
{
PropertyRNA *prop;
- prop= RNA_def_property(srna, "de_interlace", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_deinterlace", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_FILTERY);
RNA_def_property_ui_text(prop, "De-Interlace", "For video movies to remove fields");
+ RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update_reopen_files");
- prop= RNA_def_property(srna, "premultiply", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_premultiply", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_MAKE_PREMUL);
RNA_def_property_ui_text(prop, "Premultiply", "Convert RGB from key alpha to premultiplied alpha");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL);
- prop= RNA_def_property(srna, "flip_x", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_flip_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_FLIPX);
RNA_def_property_ui_text(prop, "Flip X", "Flip on the X axis");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "flip_y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_flip_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_FLIPY);
RNA_def_property_ui_text(prop, "Flip Y", "Flip on the Y axis");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "convert_float", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_float", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_MAKE_FLOAT);
RNA_def_property_ui_text(prop, "Convert Float", "Convert input to float data");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "reverse_frames", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_reverse_frames", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_REVERSE_FRAMES);
RNA_def_property_ui_text(prop, "Flip Time", "Reverse frame order");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "multiply_colors", PROP_FLOAT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "color_multiply", PROP_FLOAT, PROP_UNSIGNED);
RNA_def_property_float_sdna(prop, NULL, "mul");
RNA_def_property_range(prop, 0.0f, 20.0f);
RNA_def_property_ui_text(prop, "Multiply Colors", "");
@@ -1048,12 +1134,12 @@ static void rna_def_proxy(StructRNA *srna)
RNA_def_property_pointer_sdna(prop, NULL, "strip->proxy");
RNA_def_property_ui_text(prop, "Proxy", "");
- prop= RNA_def_property(srna, "proxy_custom_directory", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_proxy_custom_directory", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_PROXY_CUSTOM_DIR);
RNA_def_property_ui_text(prop, "Proxy Custom Directory", "Use a custom directory to store data");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "proxy_custom_file", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_proxy_custom_file", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_PROXY_CUSTOM_FILE);
RNA_def_property_ui_text(prop, "Proxy Custom File", "Use a custom file to read proxy data from");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
@@ -1063,7 +1149,7 @@ static void rna_def_input(StructRNA *srna)
{
PropertyRNA *prop;
- prop= RNA_def_property(srna, "animation_start_offset", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "animation_offset_start", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_sdna(prop, NULL, "anim_startofs");
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_int_funcs(prop, NULL, "rna_Sequence_anim_startofs_final_set", NULL); // overlap tests
@@ -1071,7 +1157,7 @@ static void rna_def_input(StructRNA *srna)
RNA_def_property_ui_text(prop, "Animation Start Offset", "Animation start offset (trim start)");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "animation_end_offset", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "animation_offset_end", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_sdna(prop, NULL, "anim_endofs");
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_int_funcs(prop, NULL, "rna_Sequence_anim_endofs_final_set", NULL); // overlap tests
@@ -1138,6 +1224,7 @@ static void rna_def_scene(BlenderRNA *brna)
prop= RNA_def_property(srna, "scene_camera", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_Camera_object_poll");
RNA_def_property_ui_text(prop, "Camera Override", "Override the scenes active camera");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
@@ -1203,7 +1290,7 @@ static void rna_def_sound(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "File", "");
RNA_def_property_string_funcs(prop, "rna_Sequence_filepath_get", "rna_Sequence_filepath_length",
"rna_Sequence_filepath_set");
- RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
+ RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_filepath_update");
rna_def_input(srna);
}
@@ -1335,7 +1422,7 @@ static void rna_def_glow(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Boost Factor", "Brightness multiplier");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "blur_distance", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "blur_radius", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "dDist");
RNA_def_property_range(prop, 0.5f, 20.0f);
RNA_def_property_ui_text(prop, "Blur Distance", "Radius of glow effect");
@@ -1347,7 +1434,7 @@ static void rna_def_glow(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Quality", "Accuracy of the blur effect");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "only_boost", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_only_boost", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "bNoComp", 0);
RNA_def_property_ui_text(prop, "Only Boost", "Show the glow buffer only");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
@@ -1387,7 +1474,7 @@ static void rna_def_transform(BlenderRNA *brna)
RNA_def_property_ui_range(prop, 0, 10, 3, 10);
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "uniform_scale", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_uniform_scale", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uniform_scale", 0);
RNA_def_property_ui_text(prop, "Uniform Scale", "Scale uniformly, preserving aspect ratio");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
@@ -1455,17 +1542,17 @@ static void rna_def_speed_control(BlenderRNA *brna)
RNA_def_property_ui_range(prop, 0.0f, 100.0f, 1, 0);
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "curve_velocity", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_curve_velocity", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", SEQ_SPEED_INTEGRATE);
RNA_def_property_ui_text(prop, "F-Curve Velocity", "Interpret the F-Curve value as a velocity instead of a frame number");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "frame_blending", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_frame_blend", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", SEQ_SPEED_BLEND);
RNA_def_property_ui_text(prop, "Frame Blending", "Blend two frames into the target for a smoother result");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "curve_compress_y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_curve_compress_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", SEQ_SPEED_COMPRESS_IPO_Y);
RNA_def_property_ui_text(prop, "F-Curve Compress Y", "Scale F-Curve value to get the target frame number, F-Curve value runs from 0.0 to 1.0");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
diff --git a/source/blender/makesrna/intern/rna_smoke.c b/source/blender/makesrna/intern/rna_smoke.c
index d4ff98e9701..53f27bc06fb 100644
--- a/source/blender/makesrna/intern/rna_smoke.c
+++ b/source/blender/makesrna/intern/rna_smoke.c
@@ -55,7 +55,7 @@ static void rna_Smoke_update(Main *bmain, Scene *scene, PointerRNA *ptr)
static void rna_Smoke_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
rna_Smoke_update(bmain, scene, ptr);
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
}
static void rna_Smoke_reset(Main *bmain, Scene *scene, PointerRNA *ptr)
@@ -120,12 +120,18 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna)
{SM_CACHE_HEAVY, "CACHEHEAVY", 0, "Heavy", "Effective but slow compression"},
{0, NULL, 0, NULL, NULL}};
+ static EnumPropertyItem smoke_domain_colli_items[] = {
+ {SM_BORDER_OPEN, "BORDEROPEN", 0, "Open", "Smoke doesn't collide with any border"},
+ {SM_BORDER_VERTICAL, "BORDERVERTICAL", 0, "Vertically Open", "Smoke doesn't collide with top and bottom sides"},
+ {SM_BORDER_CLOSED, "BORDERCLOSED", 0, "Collide All", "Smoke collides with every side"},
+ {0, NULL, 0, NULL, NULL}};
+
srna = RNA_def_struct(brna, "SmokeDomainSettings", NULL);
RNA_def_struct_ui_text(srna, "Domain Settings", "Smoke domain settings");
RNA_def_struct_sdna(srna, "SmokeDomainSettings");
RNA_def_struct_path_func(srna, "rna_SmokeDomainSettings_path");
- prop= RNA_def_property(srna, "maxres", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "resolution_max", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "maxres");
RNA_def_property_range(prop, 24, 512);
RNA_def_property_ui_range(prop, 24, 512, 2, 0);
@@ -139,12 +145,12 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Amplification", "Enhance the resolution of smoke by this factor using noise");
RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
- prop= RNA_def_property(srna, "highres", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_high_resolution", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_SMOKE_HIGHRES);
RNA_def_property_ui_text(prop, "High res", "Enable high resolution (using amplification)");
RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
- prop= RNA_def_property(srna, "viewhighres", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_high_resolution", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "viewsettings", MOD_SMOKE_VIEW_SHOWBIG);
RNA_def_property_ui_text(prop, "Show High Resolution", "Show high resolution (using amplification)");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
@@ -169,7 +175,7 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Heat", "Higher value results in faster rising smoke");
RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
- prop= RNA_def_property(srna, "coll_group", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "collision_group", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "coll_group");
RNA_def_property_struct_type(prop, "Group");
RNA_def_property_flag(prop, PROP_EDITABLE);
@@ -183,7 +189,7 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Fluid Group", "Limit fluid objects to this group");
RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset_dependancy");
- prop= RNA_def_property(srna, "eff_group", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "effector_group", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "eff_group");
RNA_def_property_struct_type(prop, "Group");
RNA_def_property_flag(prop, PROP_EDITABLE);
@@ -192,29 +198,24 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna)
prop= RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "strength");
- RNA_def_property_range(prop, 1.0, 10.0);
- RNA_def_property_ui_range(prop, 1.0, 10.0, 1, 2);
+ RNA_def_property_range(prop, 0.0, 10.0);
+ RNA_def_property_ui_range(prop, 0.0, 10.0, 1, 2);
RNA_def_property_ui_text(prop, "Strength", "Strength of wavelet noise");
RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
prop= RNA_def_property(srna, "dissolve_speed", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "diss_speed");
- RNA_def_property_range(prop, 1.0, 100.0);
- RNA_def_property_ui_range(prop, 1.0, 1000.0, 1, 0);
+ RNA_def_property_range(prop, 1.0, 10000.0);
+ RNA_def_property_ui_range(prop, 1.0, 10000.0, 1, 0);
RNA_def_property_ui_text(prop, "Dissolve Speed", "Dissolve Speed");
RNA_def_property_update(prop, 0, NULL);
- prop= RNA_def_property(srna, "initial_velocity", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_SMOKE_INITVELOCITY);
- RNA_def_property_ui_text(prop, "Initial Velocity", "Smoke inherits it's velocity from the emitter particle");
- RNA_def_property_update(prop, 0, NULL);
-
- prop= RNA_def_property(srna, "dissolve_smoke", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_dissolve_smoke", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_SMOKE_DISSOLVE);
RNA_def_property_ui_text(prop, "Dissolve Smoke", "Enable smoke to disappear over time");
RNA_def_property_update(prop, 0, NULL);
- prop= RNA_def_property(srna, "dissolve_smoke_log", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_dissolve_smoke_log", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_SMOKE_DISSOLVE_LOG);
RNA_def_property_ui_text(prop, "Logarithmic dissolve", "Using 1/x ");
RNA_def_property_update(prop, 0, NULL);
@@ -229,24 +230,48 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "point_cache[1]");
RNA_def_property_ui_text(prop, "Point Cache", "");
- prop= RNA_def_property(srna, "smoke_cache_comp", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "point_cache_compress_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "cache_comp");
RNA_def_property_enum_items(prop, smoke_cache_comp_items);
RNA_def_property_ui_text(prop, "Cache Compression", "Compression method to be used");
RNA_def_property_update(prop, 0, NULL);
- prop= RNA_def_property(srna, "smoke_cache_high_comp", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "point_cache_compress_high_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "cache_high_comp");
RNA_def_property_enum_items(prop, smoke_cache_comp_items);
RNA_def_property_ui_text(prop, "Cache Compression", "Compression method to be used");
RNA_def_property_update(prop, 0, NULL);
+ prop= RNA_def_property(srna, "collision_extents", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "border_collisions");
+ RNA_def_property_enum_items(prop, smoke_domain_colli_items);
+ RNA_def_property_ui_text(prop, "Border Collisions", "Selects which domain border will be treated as collision object.");
+ RNA_def_property_update(prop, 0, NULL);
prop= RNA_def_property(srna, "effector_weights", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "EffectorWeights");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Effector Weights", "");
+ prop= RNA_def_property(srna, "smooth_emitter", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_SMOKE_HIGH_SMOOTH);
+ RNA_def_property_ui_text(prop, "Smooth Emitter", "Smoothens emitted smoke to avoid blockiness.");
+ RNA_def_property_update(prop, 0, NULL);
+
+ prop= RNA_def_property(srna, "time_scale", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "time_scale");
+ RNA_def_property_range(prop, 0.2, 1.5);
+ RNA_def_property_ui_range(prop, 0.2, 1.5, 0.02, 5);
+ RNA_def_property_ui_text(prop, "Time Scale", "Adjust simulation speed.");
+ RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
+
+ prop= RNA_def_property(srna, "vorticity", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "vorticity");
+ RNA_def_property_range(prop, 0.01, 4.0);
+ RNA_def_property_ui_range(prop, 0.01, 4.0, 0.02, 5);
+ RNA_def_property_ui_text(prop, "Vorticity", "Amount of turbulence/rotation in fluid.");
+ RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
+
}
static void rna_def_smoke_flow_settings(BlenderRNA *brna)
@@ -273,17 +298,34 @@ static void rna_def_smoke_flow_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Temp. Diff.", "Temperature difference to ambient temperature");
RNA_def_property_update(prop, 0, NULL);
- prop= RNA_def_property(srna, "psys", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "particle_system", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "psys");
RNA_def_property_struct_type(prop, "ParticleSystem");
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Particle Systems", "Particle systems emitted from the object");
RNA_def_property_update(prop, 0, "rna_Smoke_reset_dependancy");
- prop= RNA_def_property(srna, "outflow", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_outflow", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "type", MOD_SMOKE_FLOW_TYPE_OUTFLOW);
RNA_def_property_ui_text(prop, "Outflow", "Deletes smoke from simulation");
RNA_def_property_update(prop, 0, NULL);
+
+ prop= RNA_def_property(srna, "use_absolute", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_SMOKE_FLOW_ABSOLUTE);
+ RNA_def_property_ui_text(prop, "Absolute Density", "Only allows given density value in emitter area.");
+ RNA_def_property_update(prop, 0, NULL);
+
+ prop= RNA_def_property(srna, "initial_velocity", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_SMOKE_FLOW_INITVELOCITY);
+ RNA_def_property_ui_text(prop, "Initial Velocity", "Smoke inherits it's velocity from the emitter particle");
+ RNA_def_property_update(prop, 0, NULL);
+
+ prop= RNA_def_property(srna, "velocity_factor", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "vel_multi");
+ RNA_def_property_range(prop, -2.0, 2.0);
+ RNA_def_property_ui_range(prop, -2.0, 2.0, 0.05, 5);
+ RNA_def_property_ui_text(prop, "Multiplier", "Multiplier to adjust velocity passed to smoke");
+ RNA_def_property_update(prop, 0, NULL);
}
static void rna_def_smoke_coll_settings(BlenderRNA *brna)
diff --git a/source/blender/makesrna/intern/rna_sound.c b/source/blender/makesrna/intern/rna_sound.c
index 9048a3c3072..674fbbad9c6 100644
--- a/source/blender/makesrna/intern/rna_sound.c
+++ b/source/blender/makesrna/intern/rna_sound.c
@@ -79,7 +79,7 @@ static void rna_def_sound(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "packedfile");
RNA_def_property_ui_text(prop, "Packed File", "");
- prop= RNA_def_property(srna, "caching", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_memory_cache", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_Sound_caching_get", "rna_Sound_caching_set");
RNA_def_property_ui_text(prop, "Caching", "The sound file is decoded and loaded into RAM");
RNA_def_property_update(prop, 0, "rna_Sound_filepath_update");
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index 227466f808d..f74621e8419 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -89,7 +89,7 @@ EnumPropertyItem autosnap_items[] = {
{SACTSNAP_MARKER, "MARKER", 0, "Nearest Marker", "Snap to nearest marker"},
{0, NULL, 0, NULL, NULL}};
-EnumPropertyItem viewport_shading_items[] = {
+EnumPropertyItem viewport_shade_items[] = {
{OB_BOUNDBOX, "BOUNDBOX", ICON_BBOX, "Bounding Box", "Display the object's local bounding boxes only"},
{OB_WIRE, "WIREFRAME", ICON_WIRE, "Wireframe", "Display the object as wire edges"},
{OB_SOLID, "SOLID", ICON_SOLID, "Solid", "Display the object solid, lit with default OpenGL lights"},
@@ -310,22 +310,32 @@ static PointerRNA rna_SpaceView3D_region_3d_get(PointerRNA *ptr)
{
View3D *v3d= (View3D*)(ptr->data);
ScrArea *sa= rna_area_from_space(ptr);
- ListBase *regionbase= (sa->spacedata.first == v3d)? &sa->regionbase: &v3d->regionbase;
- ARegion *ar= regionbase->last; /* always last in list, weak .. */
+ void *regiondata= NULL;
+ if(sa) {
+ ListBase *regionbase= (sa->spacedata.first == v3d)? &sa->regionbase: &v3d->regionbase;
+ ARegion *ar= regionbase->last; /* always last in list, weak .. */
+ regiondata= ar->regiondata;
+ }
- return rna_pointer_inherit_refine(ptr, &RNA_RegionView3D, ar->regiondata);
+ return rna_pointer_inherit_refine(ptr, &RNA_RegionView3D, regiondata);
}
static PointerRNA rna_SpaceView3D_region_quadview_get(PointerRNA *ptr)
{
View3D *v3d= (View3D*)(ptr->data);
ScrArea *sa= rna_area_from_space(ptr);
- ListBase *regionbase= (sa->spacedata.first == v3d)? &sa->regionbase: &v3d->regionbase;
- ARegion *ar= regionbase->last; /* always before last in list, weak .. */
-
- ar= (ar->alignment == RGN_ALIGN_QSPLIT)? ar->prev: NULL;
+ void *regiondata= NULL;
+ if(sa) {
+ ListBase *regionbase= (sa->spacedata.first == v3d)? &sa->regionbase: &v3d->regionbase;
+ ARegion *ar= regionbase->last; /* always before last in list, weak .. */
+
+ ar= (ar->alignment == RGN_ALIGN_QSPLIT)? ar->prev: NULL;
+ if(ar) {
+ regiondata= ar->regiondata;
+ }
+ }
- return rna_pointer_inherit_refine(ptr, &RNA_RegionView3D, (ar)? ar->regiondata: NULL);
+ return rna_pointer_inherit_refine(ptr, &RNA_RegionView3D, regiondata);
}
static void rna_RegionView3D_quadview_update(Main *main, Scene *scene, PointerRNA *ptr)
@@ -557,31 +567,30 @@ static void rna_SpaceProperties_align_set(PointerRNA *ptr, int value)
}
/* Space Console */
-static void rna_ConsoleLine_line_get(PointerRNA *ptr, char *value)
+static void rna_ConsoleLine_body_get(PointerRNA *ptr, char *value)
{
ConsoleLine *ci= (ConsoleLine*)ptr->data;
strcpy(value, ci->line);
}
-static int rna_ConsoleLine_line_length(PointerRNA *ptr)
+static int rna_ConsoleLine_body_length(PointerRNA *ptr)
{
ConsoleLine *ci= (ConsoleLine*)ptr->data;
return ci->len;
}
-static void rna_ConsoleLine_line_set(PointerRNA *ptr, const char *value)
+static void rna_ConsoleLine_body_set(PointerRNA *ptr, const char *value)
{
ConsoleLine *ci= (ConsoleLine*)ptr->data;
int len= strlen(value);
- if(len < ci->len_alloc) { /* allocated size is enough? */
- strcpy(ci->line, value);
- }
- else { /* allocate a new strnig */
+ if((len >= ci->len_alloc) || (len * 2 < ci->len_alloc) ) { /* allocate a new strnig */
MEM_freeN(ci->line);
- ci->line= BLI_strdup(value);
- ci->len_alloc= len;
+ ci->line= MEM_mallocN((len + 1) * sizeof(char), "rna_consoleline");
+ ci->len_alloc= len + 1;
}
+
+ memcpy(ci->line, value, len + 1);
ci->len= len;
if(ci->cursor > len) /* clamp the cursor */
@@ -725,7 +734,7 @@ static void rna_def_space_image_uv(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Space UV Editor", "UV editor data for the image editor space");
/* selection */
- prop= RNA_def_property(srna, "sticky_selection_mode", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "sticky_select_mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "sticky");
RNA_def_property_enum_items(prop, sticky_mode_items);
RNA_def_property_ui_text(prop, "Sticky Selection Mode", "Automatically select also UVs sharing the same vertex as the ones being selected");
@@ -738,12 +747,12 @@ static void rna_def_space_image_uv(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Edge Draw Type", "Draw type for drawing UV edges");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
- prop= RNA_def_property(srna, "draw_smooth_edges", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_smooth_edges", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SI_SMOOTH_UV);
RNA_def_property_ui_text(prop, "Draw Smooth Edges", "Draw UV edges anti-aliased");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
- prop= RNA_def_property(srna, "draw_stretch", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_stretch", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SI_DRAW_STRETCH);
RNA_def_property_ui_text(prop, "Draw Stretch", "Draw faces colored according to the difference in shape between UVs and their 3D coordinates (blue for low distortion, red for high distortion)");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
@@ -754,17 +763,17 @@ static void rna_def_space_image_uv(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Draw Stretch Type", "Type of stretch to draw");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
- prop= RNA_def_property(srna, "draw_modified_edges", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_modified_edges", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SI_DRAWSHADOW);
RNA_def_property_ui_text(prop, "Draw Modified Edges", "Draw edges after modifiers are applied");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
- prop= RNA_def_property(srna, "draw_other_objects", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_other_objects", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SI_DRAW_OTHER);
RNA_def_property_ui_text(prop, "Draw Other Objects", "Draw other selected objects that share the same image");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
- prop= RNA_def_property(srna, "normalized_coordinates", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_normalized_coords", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SI_COORDFLOATS);
RNA_def_property_ui_text(prop, "Normalized Coordinates", "Display UV coordinates from 0.0 to 1.0 rather than in pixels");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
@@ -777,22 +786,22 @@ static void rna_def_space_image_uv(BlenderRNA *brna)
/* todo: move edge and face drawing options here from G.f */
- prop= RNA_def_property(srna, "snap_to_pixels", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_snap_to_pixels", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SI_PIXELSNAP);
RNA_def_property_ui_text(prop, "Snap to Pixels", "Snap UVs to pixel locations while editing");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
- prop= RNA_def_property(srna, "constrain_to_image_bounds", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock_bounds", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SI_CLIP_UV);
RNA_def_property_ui_text(prop, "Constrain to Image Bounds", "Constraint to stay within the image bounds while editing");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
- prop= RNA_def_property(srna, "live_unwrap", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_live_unwrap", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SI_LIVE_UNWRAP);
RNA_def_property_ui_text(prop, "Live Unwrap", "Continuously unwrap the selected UV island while transforming pinned vertices");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
- prop= RNA_def_property(srna, "pivot", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "pivot_point", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "around");
RNA_def_property_enum_items(prop, pivot_items);
RNA_def_property_ui_text(prop, "Pivot", "Rotation/Scaling Pivot");
@@ -829,22 +838,22 @@ static void rna_def_space_outliner(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Display Mode", "Type of information to display");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_OUTLINER, NULL);
- prop= RNA_def_property(srna, "display_filter", PROP_STRING, PROP_NONE);
+ prop= RNA_def_property(srna, "filter_text", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "search_string");
RNA_def_property_ui_text(prop, "Display Filter", "Live search filtering string");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_OUTLINER, NULL);
- prop= RNA_def_property(srna, "match_case_sensitive", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_filter_case_sensitive", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "search_flags", SO_FIND_CASE_SENSITIVE);
RNA_def_property_ui_text(prop, "Case Sensitive Matches Only", "Only use case sensitive matches of search string");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_OUTLINER, NULL);
- prop= RNA_def_property(srna, "match_complete", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_filter_complete", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "search_flags", SO_FIND_COMPLETE);
RNA_def_property_ui_text(prop, "Complete Matches Only", "Only use complete matches of search string");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_OUTLINER, NULL);
- prop= RNA_def_property(srna, "show_restriction_columns", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_restrict_columns", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SO_HIDE_RESTRICTCOLS);
RNA_def_property_ui_text(prop, "Show Restriction Columns", "Show column");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_OUTLINER, NULL);
@@ -966,9 +975,9 @@ static void rna_def_space_view3d(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Lock Bone", "3D View center is locked to this bone's position");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
- prop= RNA_def_property(srna, "viewport_shading", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "viewport_shade", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "drawtype");
- RNA_def_property_enum_items(prop, viewport_shading_items);
+ RNA_def_property_enum_items(prop, viewport_shade_items);
RNA_def_property_ui_text(prop, "Viewport Shading", "Method to display/shade objects in the 3D View");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
@@ -1019,52 +1028,52 @@ static void rna_def_space_view3d(BlenderRNA *brna)
RNA_def_property_range(prop, 1, 1024);
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
- prop= RNA_def_property(srna, "display_floor", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_floor", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gridflag", V3D_SHOW_FLOOR);
RNA_def_property_ui_text(prop, "Display Grid Floor", "Show the ground plane grid in perspective view");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
- prop= RNA_def_property(srna, "display_x_axis", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_axis_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gridflag", V3D_SHOW_X);
RNA_def_property_ui_text(prop, "Display X Axis", "Show the X axis line in perspective view");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
- prop= RNA_def_property(srna, "display_y_axis", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_axis_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gridflag", V3D_SHOW_Y);
RNA_def_property_ui_text(prop, "Display Y Axis", "Show the Y axis line in perspective view");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
- prop= RNA_def_property(srna, "display_z_axis", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_axis_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gridflag", V3D_SHOW_Z);
RNA_def_property_ui_text(prop, "Display Z Axis", "Show the Z axis line in perspective view");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
- prop= RNA_def_property(srna, "outline_selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_outline_selected", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_SELECT_OUTLINE);
RNA_def_property_ui_text(prop, "Outline Selected", "Show an outline highlight around selected objects in non-wireframe views");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
- prop= RNA_def_property(srna, "all_object_origins", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_all_objects_origin", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_DRAW_CENTERS);
RNA_def_property_ui_text(prop, "All Object Origins", "Show the object origin center dot for all (selected and unselected) objects");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
- prop= RNA_def_property(srna, "relationship_lines", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_relationship_lines", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", V3D_HIDE_HELPLINES);
RNA_def_property_ui_text(prop, "Relationship Lines", "Show dashed lines indicating parent or constraint relationships");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
- prop= RNA_def_property(srna, "textured_solid", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_textured_solid", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag2", V3D_SOLID_TEX);
RNA_def_property_ui_text(prop, "Textured Solid", "Display face-assigned textures in solid view");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
- prop= RNA_def_property(srna, "display_render_override", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_only_render", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag2", V3D_RENDER_OVERRIDE);
RNA_def_property_ui_text(prop, "Only Render", "Display only objects which will be rendered");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
- prop= RNA_def_property(srna, "occlude_geometry", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_occlude_geometry", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_ZBUF_SELECT);
RNA_def_property_ui_text(prop, "Occlude Geometry", "Limit selection to visible (clipped with depth buffer)");
RNA_def_property_ui_icon(prop, ICON_ORTHO, 0);
@@ -1076,7 +1085,7 @@ static void rna_def_space_view3d(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Background Images", "List of background images");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
- prop= RNA_def_property(srna, "display_background_images", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_background_images", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_DISPBGPICS);
RNA_def_property_ui_text(prop, "Display Background Images", "Display reference images behind objects in the 3D View");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
@@ -1087,31 +1096,31 @@ static void rna_def_space_view3d(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Pivot Point", "Pivot center for rotation/scaling");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
- prop= RNA_def_property(srna, "pivot_point_align", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pivot_point_align", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_ALIGN);
RNA_def_property_ui_text(prop, "Align", "Manipulate object centers only");
RNA_def_property_ui_icon(prop, ICON_ALIGN, 0);
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
- prop= RNA_def_property(srna, "manipulator", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_manipulator", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "twflag", V3D_USE_MANIPULATOR);
RNA_def_property_ui_text(prop, "Manipulator", "Use a 3D manipulator widget for controlling transforms");
RNA_def_property_ui_icon(prop, ICON_MANIPUL, 0);
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
- prop= RNA_def_property(srna, "manipulator_translate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_manipulator_translate", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "twtype", V3D_MANIP_TRANSLATE);
RNA_def_property_ui_text(prop, "Manipulator Translate", "Use the manipulator for movement transformations");
RNA_def_property_ui_icon(prop, ICON_MAN_TRANS, 0);
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
- prop= RNA_def_property(srna, "manipulator_rotate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_manipulator_rotate", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "twtype", V3D_MANIP_ROTATE);
RNA_def_property_ui_text(prop, "Manipulator Rotate", "Use the manipulator for rotation transformations");
RNA_def_property_ui_icon(prop, ICON_MAN_ROT, 0);
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
- prop= RNA_def_property(srna, "manipulator_scale", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_manipulator_scale", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "twtype", V3D_MANIP_SCALE);
RNA_def_property_ui_text(prop, "Manipulator Scale", "Use the manipulator for scale transformations");
RNA_def_property_ui_icon(prop, ICON_MAN_SCALE, 0);
@@ -1126,7 +1135,7 @@ static void rna_def_space_view3d(BlenderRNA *brna)
prop= RNA_def_property(srna, "current_orientation", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "TransformOrientation");
- RNA_def_property_pointer_funcs(prop, "rna_CurrentOrientation_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_CurrentOrientation_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Current Transform Orientation", "Current Transformation orientation");
prop= RNA_def_property(srna, "lock_camera_and_layers", PROP_BOOLEAN, PROP_NONE);
@@ -1143,7 +1152,7 @@ static void rna_def_space_view3d(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Visible Layers", "Layers visible in this 3D View");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
- prop= RNA_def_property(srna, "used_layers", PROP_BOOLEAN, PROP_LAYER_MEMBER);
+ prop= RNA_def_property(srna, "layers_used", PROP_BOOLEAN, PROP_LAYER_MEMBER);
RNA_def_property_boolean_sdna(prop, NULL, "lay_used", 1);
RNA_def_property_array(prop, 20);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
@@ -1151,12 +1160,12 @@ static void rna_def_space_view3d(BlenderRNA *brna)
prop= RNA_def_property(srna, "region_3d", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "RegionView3D");
- RNA_def_property_pointer_funcs(prop, "rna_SpaceView3D_region_3d_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_SpaceView3D_region_3d_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "3D Region", "3D region in this space, in case of quad view the camera region");
prop= RNA_def_property(srna, "region_quadview", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "RegionView3D");
- RNA_def_property_pointer_funcs(prop, "rna_SpaceView3D_region_quadview_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_SpaceView3D_region_quadview_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Quad View Region", "3D region that defines the quad view settings");
/* region */
@@ -1170,12 +1179,12 @@ static void rna_def_space_view3d(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Lock", "Lock view rotation in side views");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, "rna_RegionView3D_quadview_update");
- prop= RNA_def_property(srna, "box_preview", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_sync_view", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "viewlock", RV3D_BOXVIEW);
RNA_def_property_ui_text(prop, "Box", "Sync view position between side views");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, "rna_RegionView3D_quadview_update");
- prop= RNA_def_property(srna, "box_clip", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_box_clip", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "viewlock", RV3D_BOXCLIP);
RNA_def_property_ui_text(prop, "Clip", "Clip objects based on what's visible in other side views");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, "rna_RegionView3D_quadview_update");
@@ -1209,7 +1218,7 @@ static void rna_def_space_view3d(BlenderRNA *brna)
RNA_def_property_ui_range(prop, -10000.0, 10000.0, 10, 4);
RNA_def_property_update(prop, NC_WINDOW, NULL);
- prop= RNA_def_property(srna, "view_rotation", PROP_FLOAT, PROP_QUATERNION);
+ prop= RNA_def_property(srna, "view_rotate_method", PROP_FLOAT, PROP_QUATERNION);
RNA_def_property_float_sdna(prop, NULL, "viewquat");
RNA_def_property_ui_text(prop, "View Rotation", "Rotation in quaternions (keep normalized)");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
@@ -1264,7 +1273,7 @@ static void rna_def_space_buttons(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Align", "Arrangement of the panels");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_PROPERTIES, NULL);
- prop= RNA_def_property(srna, "brush_texture", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_brush_texture", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SB_BRUSH_TEX);
RNA_def_property_ui_text(prop, "Brush Texture", "Show brush textures");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_PROPERTIES, NULL);
@@ -1274,7 +1283,7 @@ static void rna_def_space_buttons(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "pinid");
RNA_def_property_struct_type(prop, "ID");
/* note: custom set function is ONLY to avoid rna setting a user for this. */
- RNA_def_property_pointer_funcs(prop, NULL, "rna_SpaceProperties_pin_id_set", "rna_SpaceProperties_pin_id_typef");
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_SpaceProperties_pin_id_set", "rna_SpaceProperties_pin_id_typef", NULL);
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_PROPERTIES, "rna_SpaceProperties_pin_id_update");
@@ -1294,7 +1303,7 @@ static void rna_def_space_image(BlenderRNA *brna)
/* image */
prop= RNA_def_property(srna, "image", PROP_POINTER, PROP_NONE);
- RNA_def_property_pointer_funcs(prop, NULL, "rna_SpaceImageEditor_image_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_SpaceImageEditor_image_set", NULL, NULL);
RNA_def_property_ui_text(prop, "Image", "Image displayed and edited in this space");
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
@@ -1316,7 +1325,7 @@ static void rna_def_space_image(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Scopes", "Scopes to visualize image statistics.");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, "rna_SpaceImageEditor_scopes_update");
- prop= RNA_def_property(srna, "image_pin", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_image_pin", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pin", 0);
RNA_def_property_ui_text(prop, "Image Pin", "Display current image regardless of object selection");
RNA_def_property_ui_icon(prop, ICON_UNPINNED, 1);
@@ -1328,7 +1337,7 @@ static void rna_def_space_image(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Line sample", "Sampled colors along line");
/* image draw */
- prop= RNA_def_property(srna, "draw_repeated", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_repeat", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SI_DRAW_TILE);
RNA_def_property_ui_text(prop, "Draw Repeated", "Draw the image repeated outside of the main view");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
@@ -1344,11 +1353,11 @@ static void rna_def_space_image(BlenderRNA *brna)
prop= RNA_def_property(srna, "uv_editor", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "SpaceUVEditor");
- RNA_def_property_pointer_funcs(prop, "rna_SpaceImageEditor_uvedit_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_SpaceImageEditor_uvedit_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "UV Editor", "UV editor settings");
/* paint */
- prop= RNA_def_property(srna, "image_painting", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_image_paint", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SI_DRAWTOOL);
RNA_def_property_ui_text(prop, "Image Painting", "Enable image painting mode");
RNA_def_property_ui_icon(prop, ICON_TPAINT_HLT, 0);
@@ -1366,7 +1375,7 @@ static void rna_def_space_image(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Use Grease Pencil", "Display and edit the grease pencil freehand annotations overlay");
/* update */
- prop= RNA_def_property(srna, "update_automatically", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_realtime_update", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "lock", 0);
RNA_def_property_ui_text(prop, "Update Automatically", "Update other affected window spaces automatically to reflect changes during interactive operations such as transform");
@@ -1436,12 +1445,12 @@ static void rna_def_space_sequencer(BlenderRNA *brna)
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_SEQUENCER, NULL);
/* flag's */
- prop= RNA_def_property(srna, "show_cframe_indicator", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_frame_indicator", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SEQ_NO_DRAW_CFRANUM);
RNA_def_property_ui_text(prop, "Show Frame Number Indicator", "Show frame number beside the current frame indicator line");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_SEQUENCER, NULL);
- prop= RNA_def_property(srna, "draw_frames", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_frames", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_DRAWFRAMES);
RNA_def_property_ui_text(prop, "Draw Frames", "Draw frames rather than seconds");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_SEQUENCER, NULL);
@@ -1451,12 +1460,12 @@ static void rna_def_space_sequencer(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Transform Markers", "Transform markers as well as strips");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_SEQUENCER, NULL);
- prop= RNA_def_property(srna, "separate_color_preview", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_separate_color", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_DRAW_COLOR_SEPERATED);
RNA_def_property_ui_text(prop, "Separate Colors", "Separate color channels in preview");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_SEQUENCER, NULL);
- prop= RNA_def_property(srna, "draw_safe_margin", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_safe_margin", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_DRAW_SAFE_MARGINS);
RNA_def_property_ui_text(prop, "Safe Margin", "Draw title safe margins in preview");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_SEQUENCER, NULL);
@@ -1522,35 +1531,32 @@ static void rna_def_space_text(BlenderRNA *brna)
prop= RNA_def_property(srna, "text", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Text", "Text displayed and edited in this space");
- RNA_def_property_pointer_funcs(prop, NULL, "rna_SpaceTextEditor_text_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_SpaceTextEditor_text_set", NULL, NULL);
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
/* display */
- prop= RNA_def_property(srna, "syntax_highlight", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "showsyntax", 0);
- RNA_def_property_ui_text(prop, "Syntax Highlight", "Syntax highlight for scripting");
- RNA_def_property_ui_icon(prop, ICON_SYNTAX_OFF, 1);
- RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
-
- prop= RNA_def_property(srna, "word_wrap", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_word_wrap", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "wordwrap", 0);
RNA_def_property_boolean_funcs(prop, NULL, "rna_SpaceTextEditor_word_wrap_set");
RNA_def_property_ui_text(prop, "Word Wrap", "Wrap words if there is not enough horizontal space");
RNA_def_property_ui_icon(prop, ICON_WORDWRAP_OFF, 1);
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
- prop= RNA_def_property(srna, "line_numbers", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_line_numbers", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "showlinenrs", 0);
RNA_def_property_ui_text(prop, "Line Numbers", "Show line numbers next to the text");
RNA_def_property_ui_icon(prop, ICON_LINENUMBERS_OFF, 1);
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
- prop= RNA_def_property(srna, "overwrite", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_ui_text(prop, "Overwrite", "Overwrite characters when typing rather than inserting them");
+ prop= RNA_def_property(srna, "show_syntax_highlight", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "showsyntax", 0);
+ RNA_def_property_ui_text(prop, "Syntax Highlight", "Syntax highlight for scripting");
+ RNA_def_property_ui_icon(prop, ICON_SYNTAX_OFF, 1);
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
- prop= RNA_def_property(srna, "live_edit", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_ui_text(prop, "Live Edit", "Run python while editing");
+ prop= RNA_def_property(srna, "show_line_highlight", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "line_hlight", 0);
+ RNA_def_property_ui_text(prop, "Highlight Line", "Highlight the current line");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
prop= RNA_def_property(srna, "tab_width", PROP_INT, PROP_NONE);
@@ -1565,13 +1571,24 @@ static void rna_def_space_text(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Font Size", "Font size to use for displaying the text");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
+ /* functionality options */
+ prop= RNA_def_property(srna, "use_overwrite", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "overwrite", 1);
+ RNA_def_property_ui_text(prop, "Overwrite", "Overwrite characters when typing rather than inserting them");
+ RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
+
+ prop= RNA_def_property(srna, "use_live_edit", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "live_edit", 1);
+ RNA_def_property_ui_text(prop, "Live Edit", "Run python while editing");
+ RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
+
/* find */
- prop= RNA_def_property(srna, "find_all", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_find_all", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", ST_FIND_ALL);
RNA_def_property_ui_text(prop, "Find All", "Search in all text datablocks, instead of only the active one");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
- prop= RNA_def_property(srna, "find_wrap", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_find_wrap", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", ST_FIND_WRAP);
RNA_def_property_ui_text(prop, "Find Wrap", "Search again from the start of the file when reaching the end");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
@@ -1607,7 +1624,7 @@ static void rna_def_space_dopesheet(BlenderRNA *brna)
/* data */
prop= RNA_def_property(srna, "action", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_pointer_funcs(prop, NULL, "rna_SpaceDopeSheetEditor_action_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_SpaceDopeSheetEditor_action_set", NULL, NULL);
RNA_def_property_ui_text(prop, "Action", "Action displayed and edited in this space");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, "rna_SpaceDopeSheetEditor_action_update");
@@ -1625,7 +1642,7 @@ static void rna_def_space_dopesheet(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Show Seconds", "Show timing in seconds not frames");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_DOPESHEET, NULL);
- prop= RNA_def_property(srna, "show_cframe_indicator", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_frame_indicator", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SACTION_NODRAWCFRANUM);
RNA_def_property_ui_text(prop, "Show Frame Number Indicator", "Show frame number beside the current frame indicator line");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_DOPESHEET, NULL);
@@ -1636,12 +1653,12 @@ static void rna_def_space_dopesheet(BlenderRNA *brna)
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_DOPESHEET, NULL);
/* editing */
- prop= RNA_def_property(srna, "automerge_keyframes", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_merge_keyframes", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SACTION_NOTRANSKEYCULL);
RNA_def_property_ui_text(prop, "AutoMerge Keyframes", "Automatically merge nearby keyframes");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_DOPESHEET, NULL);
- prop= RNA_def_property(srna, "realtime_updates", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_realtime_update", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SACTION_NOREALTIMEUPDATES);
RNA_def_property_ui_text(prop, "Realtime Updates", "When transforming keyframes, changes to the animation data are flushed to other views");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_DOPESHEET, NULL);
@@ -1657,7 +1674,7 @@ static void rna_def_space_dopesheet(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "DopeSheet", "Settings for filtering animation data");
/* autosnap */
- prop= RNA_def_property(srna, "autosnap", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "auto_snap", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "autosnap");
RNA_def_property_enum_items(prop, autosnap_items);
RNA_def_property_ui_text(prop, "Auto Snap", "Automatic time snapping settings for transformations");
@@ -1703,7 +1720,7 @@ static void rna_def_space_graph(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Show Seconds", "Show timing in seconds not frames");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
- prop= RNA_def_property(srna, "show_cframe_indicator", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_frame_indicator", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SIPO_NODRAWCFRANUM);
RNA_def_property_ui_text(prop, "Show Frame Number Indicator", "Show frame number beside the current frame indicator line");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
@@ -1718,23 +1735,23 @@ static void rna_def_space_graph(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Show Handles", "Show handles of Bezier control points");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
- prop= RNA_def_property(srna, "only_selected_curves_handles", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_only_selected_curves_handles", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SIPO_SELCUVERTSONLY);
RNA_def_property_ui_text(prop, "Only Selected Curve Keyframes", "Only keyframes of selected F-Curves are visible and editable");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
- prop= RNA_def_property(srna, "only_selected_keyframe_handles", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_only_selected_keyframe_handles", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SIPO_SELVHANDLESONLY);
RNA_def_property_ui_text(prop, "Only Selected Keyframes Handles", "Only show and edit handles of selected keyframes");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
/* editing */
- prop= RNA_def_property(srna, "automerge_keyframes", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_merge_keyframes", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SIPO_NOTRANSKEYCULL);
RNA_def_property_ui_text(prop, "AutoMerge Keyframes", "Automatically merge nearby keyframes");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
- prop= RNA_def_property(srna, "realtime_updates", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_realtime_update", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SIPO_NOREALTIMEUPDATES);
RNA_def_property_ui_text(prop, "Realtime Updates", "When transforming keyframes, changes to the animation data are flushed to other views");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
@@ -1745,7 +1762,7 @@ static void rna_def_space_graph(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Show Cursor", "Show 2D cursor");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
- prop= RNA_def_property(srna, "cursor_value", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "cursor_position_y", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "cursorVal");
RNA_def_property_ui_text(prop, "Cursor Y-Value", "Graph Editor 2D-Value cursor - Y-Value component");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
@@ -1763,7 +1780,7 @@ static void rna_def_space_graph(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "DopeSheet", "Settings for filtering animation data");
/* autosnap */
- prop= RNA_def_property(srna, "autosnap", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "auto_snap", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "autosnap");
RNA_def_property_enum_items(prop, autosnap_items);
RNA_def_property_ui_text(prop, "Auto Snap", "Automatic time snapping settings for transformations");
@@ -1793,7 +1810,7 @@ static void rna_def_space_nla(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Show Seconds", "Show timing in seconds not frames");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_NLA, NULL);
- prop= RNA_def_property(srna, "show_cframe_indicator", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_frame_indicator", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SNLA_NODRAWCFRANUM);
RNA_def_property_ui_text(prop, "Show Frame Number Indicator", "Show frame number beside the current frame indicator line");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_NLA, NULL);
@@ -1804,7 +1821,7 @@ static void rna_def_space_nla(BlenderRNA *brna)
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_NLA, NULL);
/* editing */
- prop= RNA_def_property(srna, "realtime_updates", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_realtime_update", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SNLA_NOREALTIMEUPDATES);
RNA_def_property_ui_text(prop, "Realtime Updates", "When transforming strips, changes to the animation data are flushed to other views");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_NLA, NULL);
@@ -1816,7 +1833,7 @@ static void rna_def_space_nla(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "DopeSheet", "Settings for filtering animation data");
/* autosnap */
- prop= RNA_def_property(srna, "autosnap", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "auto_snap", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "autosnap");
RNA_def_property_enum_items(prop, autosnap_items);
RNA_def_property_ui_text(prop, "Auto Snap", "Automatic time snapping settings for transformations");
@@ -1833,48 +1850,48 @@ static void rna_def_space_time(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Space Timeline Editor", "Timeline editor space data");
/* Define Anim Playback Areas */
- prop= RNA_def_property(srna, "play_top_left", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_play_top_left_3d_editor", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "redraws", TIME_REGION);
RNA_def_property_ui_text(prop, "Top-Left 3D Editor", "");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, "rna_SpaceTime_redraw_update");
- prop= RNA_def_property(srna, "play_all_3d", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_play_3d_editors", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "redraws", TIME_ALL_3D_WIN);
RNA_def_property_ui_text(prop, "All 3D View Editors", "");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, "rna_SpaceTime_redraw_update");
- prop= RNA_def_property(srna, "play_anim", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_play_animation_editors", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "redraws", TIME_ALL_ANIM_WIN);
RNA_def_property_ui_text(prop, "Animation Editors", "");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, "rna_SpaceTime_redraw_update");
- prop= RNA_def_property(srna, "play_buttons", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_play_properties_editors", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "redraws", TIME_ALL_BUTS_WIN);
RNA_def_property_ui_text(prop, "Property Editors", "");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, "rna_SpaceTime_redraw_update");
- prop= RNA_def_property(srna, "play_image", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_play_image_editors", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "redraws", TIME_ALL_IMAGE_WIN);
RNA_def_property_ui_text(prop, "Image Editors", "");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, "rna_SpaceTime_redraw_update");
- prop= RNA_def_property(srna, "play_sequencer", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_play_sequence_editors", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "redraws", TIME_SEQ);
RNA_def_property_ui_text(prop, "Sequencer Editors", "");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, "rna_SpaceTime_redraw_update");
- prop= RNA_def_property(srna, "play_nodes", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_play_node_editors", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "redraws", TIME_NODES);
RNA_def_property_ui_text(prop, "Node Editors", "");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, "rna_SpaceTime_redraw_update");
/* Other options */
- prop= RNA_def_property(srna, "only_selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_only_selected", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TIME_ONLYACTSEL);
RNA_def_property_ui_text(prop, "Only Selected channels", "Show keyframes for active Object and/or its selected channels only");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, NULL);
- prop= RNA_def_property(srna, "show_cframe_indicator", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_frame_indicator", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TIME_CFRA_NUM);
RNA_def_property_ui_text(prop, "Show Frame Number Indicator", "Show frame number beside the current frame indicator line");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, NULL);
@@ -1915,8 +1932,8 @@ static void rna_def_console_line(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Console Input", "Input line for the interactive console");
// XXX using non-inited "prop", uh? RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CONSOLE, NULL);
- prop= RNA_def_property(srna, "line", PROP_STRING, PROP_NONE);
- RNA_def_property_string_funcs(prop, "rna_ConsoleLine_line_get", "rna_ConsoleLine_line_length", "rna_ConsoleLine_line_set");
+ prop= RNA_def_property(srna, "body", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_funcs(prop, "rna_ConsoleLine_body_get", "rna_ConsoleLine_body_length", "rna_ConsoleLine_body_set");
RNA_def_property_ui_text(prop, "Line", "Text in the line");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CONSOLE, NULL);
@@ -1953,11 +1970,11 @@ static void rna_def_space_console(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Type", "Console type");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CONSOLE, NULL);
- prop= RNA_def_property(srna, "selection_start", PROP_INT, PROP_UNSIGNED); /* copied from text editor */
+ prop= RNA_def_property(srna, "select_start", PROP_INT, PROP_UNSIGNED); /* copied from text editor */
RNA_def_property_int_sdna(prop, NULL, "sel_start");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CONSOLE, NULL);
- prop= RNA_def_property(srna, "selection_end", PROP_INT, PROP_UNSIGNED); /* copied from text editor */
+ prop= RNA_def_property(srna, "select_end", PROP_INT, PROP_UNSIGNED); /* copied from text editor */
RNA_def_property_int_sdna(prop, NULL, "sel_end");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CONSOLE, NULL);
@@ -1977,7 +1994,7 @@ static void rna_def_space_console(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Show Operator", "Display the operator log");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CONSOLE_REPORT, NULL);
- prop= RNA_def_property(srna, "show_report_warn", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_report_warning", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "rpt_mask", CONSOLE_RPT_WARN);
RNA_def_property_ui_text(prop, "Show Warn", "Display warnings");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CONSOLE_REPORT, NULL);
@@ -2035,76 +2052,76 @@ static void rna_def_fileselect_params(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Directory", "Directory displayed in the file browser");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL);
- prop= RNA_def_property(srna, "file", PROP_STRING, PROP_NONE);
+ prop= RNA_def_property(srna, "filename", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "file");
RNA_def_property_ui_text(prop, "File Name", "Active file in the file browser");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL);
- prop= RNA_def_property(srna, "display", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "display_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "display");
RNA_def_property_enum_items(prop, file_display_items);
RNA_def_property_ui_text(prop, "Display Mode", "Display mode for the file list");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL);
- prop= RNA_def_property(srna, "do_filter", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_filter", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FILE_FILTER);
RNA_def_property_ui_text(prop, "Filter Files", "Enable filtering of files");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL);
- prop= RNA_def_property(srna, "hide_dot", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", FILE_HIDE_DOT);
+ prop= RNA_def_property(srna, "show_hidden", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", FILE_HIDE_DOT);
RNA_def_property_ui_text(prop, "Hide Dot Files", "Hide hidden dot files");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS , NULL);
- prop= RNA_def_property(srna, "sort", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "sort_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "sort");
RNA_def_property_enum_items(prop, file_sort_items);
RNA_def_property_ui_text(prop, "Sort", "");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL);
- prop= RNA_def_property(srna, "filter_image", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_filter_image", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "filter", IMAGEFILE);
RNA_def_property_ui_text(prop, "Filter Images", "Show image files");
RNA_def_property_ui_icon(prop, ICON_FILE_IMAGE, 0);
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL);
- prop= RNA_def_property(srna, "filter_blender", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_filter_blender", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "filter", BLENDERFILE);
RNA_def_property_ui_text(prop, "Filter Blender", "Show .blend files");
RNA_def_property_ui_icon(prop, ICON_FILE_BLEND, 0);
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL);
- prop= RNA_def_property(srna, "filter_movie", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_filter_movie", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "filter", MOVIEFILE);
RNA_def_property_ui_text(prop, "Filter Movies", "Show movie files");
RNA_def_property_ui_icon(prop, ICON_FILE_MOVIE, 0);
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL);
- prop= RNA_def_property(srna, "filter_script", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_filter_script", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "filter", PYSCRIPTFILE);
RNA_def_property_ui_text(prop, "Filter Script", "Show script files");
RNA_def_property_ui_icon(prop, ICON_FILE_SCRIPT, 0);
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL);
- prop= RNA_def_property(srna, "filter_font", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_filter_font", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "filter", FTFONTFILE);
RNA_def_property_ui_text(prop, "Filter Fonts", "Show font files");
RNA_def_property_ui_icon(prop, ICON_FILE_FONT, 0);
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL);
- prop= RNA_def_property(srna, "filter_sound", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_filter_sound", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "filter", SOUNDFILE);
RNA_def_property_ui_text(prop, "Filter Sound", "Show sound files");
RNA_def_property_ui_icon(prop, ICON_FILE_SOUND, 0);
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL);
- prop= RNA_def_property(srna, "filter_text", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_filter_text", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "filter", TEXTFILE);
RNA_def_property_ui_text(prop, "Filter Text", "Show text files");
RNA_def_property_ui_icon(prop, ICON_FILE_BLANK, 0);
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL);
- prop= RNA_def_property(srna, "filter_folder", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_filter_folder", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "filter", FOLDERFILE);
RNA_def_property_ui_text(prop, "Filter Folder", "Show folders");
RNA_def_property_ui_icon(prop, ICON_FILE_FOLDER, 0);
@@ -2144,7 +2161,7 @@ static void rna_def_space_userpref(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "SpaceUserPref");
RNA_def_struct_ui_text(srna, "Space User Preferences", "User preferences space data");
- prop= RNA_def_property(srna, "filter", PROP_STRING, PROP_NONE);
+ prop= RNA_def_property(srna, "filter_text", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "filter");
RNA_def_property_ui_text(prop, "Filter", "Search term for filtering in the UI");
@@ -2196,7 +2213,7 @@ static void rna_def_space_node(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Node Tree", "Node tree being displayed and edited");
- prop= RNA_def_property(srna, "backdrop", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_backdrop", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SNODE_BACKDRAW);
RNA_def_property_ui_text(prop, "Backdrop", "Use active Viewer Node output as backdrop for compositing nodes");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_NODE_VIEW, NULL);
@@ -2212,59 +2229,59 @@ static void rna_def_space_logic(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Space Logic Editor", "Logic editor space data");
/* sensors */
- prop= RNA_def_property(srna, "sensors_show_selected_objects", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_sensors_selected_objects", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_SENS_SEL);
RNA_def_property_ui_text(prop, "Show Selected Object", "Show sensors of all selected objects");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "sensors_show_active_objects", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_sensors_active_object", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_SENS_ACT);
RNA_def_property_ui_text(prop, "Show Active Object", "Show sensors of active object");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "sensors_show_linked_controller", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_sensors_linked_controller", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_SENS_LINK);
RNA_def_property_ui_text(prop, "Show Linked to Controller", "Show linked objects to the controller");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "sensors_show_active_states", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_sensors_active_states", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_SENS_STATE);
RNA_def_property_ui_text(prop, "Show Active States", "Show only sensors connected to active states");
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* controllers */
- prop= RNA_def_property(srna, "controllers_show_selected_objects", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_controllers_selected_objects", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_CONT_SEL);
RNA_def_property_ui_text(prop, "Show Selected Object", "Show controllers of all selected objects");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "controllers_show_active_objects", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_controllers_active_object", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_CONT_ACT);
RNA_def_property_ui_text(prop, "Show Active Object", "Show controllers of active object");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "controllers_show_linked_controller", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_controllers_linked_controller", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_CONT_LINK);
RNA_def_property_ui_text(prop, "Show Linked to Controller", "Show linked objects to sensor/actuator");
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* actuators */
- prop= RNA_def_property(srna, "actuators_show_selected_objects", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_actuators_selected_objects", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_ACT_SEL);
RNA_def_property_ui_text(prop, "Show Selected Object", "Show actuators of all selected objects");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "actuators_show_active_objects", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_actuators_active_object", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_ACT_ACT);
RNA_def_property_ui_text(prop, "Show Active Object", "Show actuators of active object");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "actuators_show_linked_controller", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_actuators_linked_controller", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_ACT_LINK);
RNA_def_property_ui_text(prop, "Show Linked to Actuator", "Show linked objects to the actuator");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "actuators_show_active_states", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_actuators_active_states", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_ACT_STATE);
RNA_def_property_ui_text(prop, "Show Active States", "Show only actuators connected to active states");
RNA_def_property_update(prop, NC_LOGIC, NULL);
diff --git a/source/blender/makesrna/intern/rna_text.c b/source/blender/makesrna/intern/rna_text.c
index d8651e5d05d..15e7ce525ba 100644
--- a/source/blender/makesrna/intern/rna_text.c
+++ b/source/blender/makesrna/intern/rna_text.c
@@ -76,7 +76,7 @@ static int rna_Text_modified_get(PointerRNA *ptr)
return text_file_modified(text);
}
-static void rna_TextLine_line_get(PointerRNA *ptr, char *value)
+static void rna_TextLine_body_get(PointerRNA *ptr, char *value)
{
TextLine *line= (TextLine*)ptr->data;
@@ -86,21 +86,23 @@ static void rna_TextLine_line_get(PointerRNA *ptr, char *value)
strcpy(value, "");
}
-static int rna_TextLine_line_length(PointerRNA *ptr)
+static int rna_TextLine_body_length(PointerRNA *ptr)
{
TextLine *line= (TextLine*)ptr->data;
return line->len;
}
-static void rna_TextLine_line_set(PointerRNA *ptr, const char *value)
+static void rna_TextLine_body_set(PointerRNA *ptr, const char *value)
{
TextLine *line= (TextLine*)ptr->data;
+ int len= strlen(value);
if(line->line)
MEM_freeN(line->line);
-
- line->line= BLI_strdup(value);
- line->len= strlen(line->line);
+
+ line->line= MEM_mallocN((len + 1) * sizeof(char), "rna_text_body");
+ line->len= len;
+ memcpy(line->line, value, len + 1);
if(line->format) {
MEM_freeN(line->format);
@@ -118,8 +120,8 @@ static void rna_def_text_line(BlenderRNA *brna)
srna = RNA_def_struct(brna, "TextLine", NULL);
RNA_def_struct_ui_text(srna, "Text Line", "Line of text in a Text datablock");
- prop= RNA_def_property(srna, "line", PROP_STRING, PROP_NONE);
- RNA_def_property_string_funcs(prop, "rna_TextLine_line_get", "rna_TextLine_line_length", "rna_TextLine_line_set");
+ prop= RNA_def_property(srna, "body", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_funcs(prop, "rna_TextLine_body_get", "rna_TextLine_body_length", "rna_TextLine_body_set");
RNA_def_property_ui_text(prop, "Line", "Text in the line");
RNA_def_property_update(prop, NC_TEXT|NA_EDITED, NULL);
}
@@ -137,11 +139,13 @@ static void rna_def_text_marker(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Line", "Line in which the marker is located");
- prop= RNA_def_property(srna, "start", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "character_index_start", PROP_INT, PROP_UNSIGNED);
+ RNA_def_property_int_sdna(prop, NULL, "start");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Start", "Start position of the marker in the line");
- prop= RNA_def_property(srna, "end", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "character_index_end", PROP_INT, PROP_UNSIGNED);
+ RNA_def_property_int_sdna(prop, NULL, "end");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "End", "Start position of the marker in the line");
@@ -150,12 +154,12 @@ static void rna_def_text_marker(BlenderRNA *brna)
RNA_def_property_range(prop, 0, (int)0xFFFF);
RNA_def_property_ui_text(prop, "Group", "");
- prop= RNA_def_property(srna, "temporary", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_temporary", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", TMARK_TEMP);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Temporary", "Marker is temporary");
- prop= RNA_def_property(srna, "edit_all", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_edit_all", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", TMARK_EDITALL);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Edit All", "Edit all markers of the same group as one");
@@ -178,17 +182,17 @@ static void rna_def_text(BlenderRNA *brna)
RNA_def_property_string_funcs(prop, "rna_Text_filename_get", "rna_Text_filename_length", "rna_Text_filename_set");
RNA_def_property_ui_text(prop, "File Path", "Filename of the text file");
- prop= RNA_def_property(srna, "dirty", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_dirty", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", TXT_ISDIRTY);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Dirty", "Text file has been edited since last save");
- prop= RNA_def_property(srna, "modified", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_modified", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_funcs(prop, "rna_Text_modified_get", NULL);
RNA_def_property_ui_text(prop, "Modified", "Text file on disk is different than the one in memory");
- prop= RNA_def_property(srna, "memory", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_in_memory", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", TXT_ISMEM);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Memory", "Text file is in memory, without a corresponding file on disk");
@@ -197,7 +201,7 @@ static void rna_def_text(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flags", TXT_ISSCRIPT);
RNA_def_property_ui_text(prop, "Register", "Register this text as a module on loading, Text name must end with \".py\"");
- prop= RNA_def_property(srna, "tabs_as_spaces", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_tabs_as_spaces", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", TXT_TABSTOSPACES);
RNA_def_property_ui_text(prop, "Tabs as Spaces", "Automatically converts all new tabs into spaces");
@@ -217,14 +221,14 @@ static void rna_def_text(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Current Character", "Index of current character in current line, and also start index of character in selection if one exists");
- prop= RNA_def_property(srna, "selection_end_line", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "select_end_line", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_pointer_sdna(prop, NULL, "sell");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "TextLine");
RNA_def_property_ui_text(prop, "Selection End Line", "End line of selection");
- prop= RNA_def_property(srna, "selection_end_character", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "select_end_character", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_sdna(prop, NULL, "selc");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Selection End Character", "Index of character after end of selection in the selection end line");
diff --git a/source/blender/makesrna/intern/rna_texture.c b/source/blender/makesrna/intern/rna_texture.c
index 84fd217e64e..567166fd15f 100644
--- a/source/blender/makesrna/intern/rna_texture.c
+++ b/source/blender/makesrna/intern/rna_texture.c
@@ -60,7 +60,7 @@ EnumPropertyItem texture_type_items[] = {
{TEX_MARBLE, "MARBLE", ICON_TEXTURE, "Marble", ""},
{TEX_MUSGRAVE, "MUSGRAVE", ICON_TEXTURE, "Musgrave", ""},
{TEX_NOISE, "NOISE", ICON_TEXTURE, "Noise", ""},
- {TEX_PLUGIN, "PLUGIN", ICON_PLUGIN, "Plugin", ""},
+ //{TEX_PLUGIN, "PLUGIN", ICON_PLUGIN, "Plugin", ""}, /* Nothing yet */
{TEX_POINTDENSITY, "POINT_DENSITY", ICON_TEXTURE, "Point Density", ""},
{TEX_STUCCI, "STUCCI", ICON_TEXTURE, "Stucci", ""},
{TEX_VORONOI, "VORONOI", ICON_TEXTURE, "Voronoi", ""},
@@ -388,22 +388,22 @@ static void rna_def_texmapping(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Scale", "");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "minimum", PROP_FLOAT, PROP_XYZ);
+ prop= RNA_def_property(srna, "min", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "min");
RNA_def_property_ui_text(prop, "Minimum", "Minimum value for clipping");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "maximum", PROP_FLOAT, PROP_XYZ);
+ prop= RNA_def_property(srna, "max", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "max");
RNA_def_property_ui_text(prop, "Maximum", "Maximum value for clipping");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "has_minimum", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_min", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TEXMAP_CLIP_MIN);
RNA_def_property_ui_text(prop, "Has Minimum", "Whether to use minimum clipping value");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "has_maximum", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_max", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TEXMAP_CLIP_MAX);
RNA_def_property_ui_text(prop, "Has Maximum", "Whether to use maximum clipping value");
RNA_def_property_update(prop, 0, "rna_Texture_update");
@@ -464,7 +464,8 @@ static void rna_def_mtex(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Offset", "Fine tunes texture mapping X, Y and Z locations");
RNA_def_property_update(prop, 0, "rna_TextureSlot_update");
- prop= RNA_def_property(srna, "size", PROP_FLOAT, PROP_XYZ);
+ prop= RNA_def_property(srna, "scale", PROP_FLOAT, PROP_XYZ);
+ RNA_def_property_float_sdna(prop, NULL, "size");
RNA_def_property_ui_range(prop, -100, 100, 10, 2);
RNA_def_property_ui_text(prop, "Size", "Sets scaling for the texture's X, Y and Z sizes");
RNA_def_property_update(prop, 0, "rna_TextureSlot_update");
@@ -481,17 +482,17 @@ static void rna_def_mtex(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Blend Type", "");
RNA_def_property_update(prop, 0, "rna_TextureSlot_update");
- prop= RNA_def_property(srna, "stencil", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stencil", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "texflag", MTEX_STENCIL);
RNA_def_property_ui_text(prop, "Stencil", "Use this texture as a blending value on the next texture");
RNA_def_property_update(prop, 0, "rna_TextureSlot_update");
- prop= RNA_def_property(srna, "negate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "texflag", MTEX_NEGATIVE);
RNA_def_property_ui_text(prop, "Negate", "Inverts the values of the texture to reverse its effect");
RNA_def_property_update(prop, 0, "rna_TextureSlot_update");
- prop= RNA_def_property(srna, "rgb_to_intensity", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_rgb_to_intensity", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "texflag", MTEX_RGBTOINT);
RNA_def_property_ui_text(prop, "RGB to Intensity", "Converts texture RGB values to intensity (gray) values");
RNA_def_property_update(prop, 0, "rna_TextureSlot_update");
@@ -514,18 +515,18 @@ static void rna_def_filter_common(StructRNA *srna)
{
PropertyRNA *prop;
- prop= RNA_def_property(srna, "mipmap", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_mipmap", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_MIPMAP);
RNA_def_property_boolean_funcs(prop, NULL, "rna_ImageTexture_mipmap_set");
RNA_def_property_ui_text(prop, "MIP Map", "Uses auto-generated MIP maps for the image");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "mipmap_gauss", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_mipmap_gauss", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_GAUSS_MIP);
RNA_def_property_ui_text(prop, "MIP Map Gaussian filter", "Uses Gauss filter to sample down MIP maps");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "filter", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "filter_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "texfilter");
RNA_def_property_enum_items(prop, texture_filter_items);
RNA_def_property_ui_text(prop, "Filter", "Texture filter to use for sampling image");
@@ -543,7 +544,7 @@ static void rna_def_filter_common(StructRNA *srna)
RNA_def_property_ui_text(prop, "Filter Eccentricity", "Maximum eccentricity. Higher gives less blur at distant/oblique angles, but is also slower");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "filter_size_minimum", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_filter_size_min", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_FILTER_MIN);
RNA_def_property_ui_text(prop, "Minimum Filter Size", "Use Filter Size as a minimal filter value in pixels");
RNA_def_property_update(prop, 0, "rna_Texture_update");
@@ -615,7 +616,7 @@ static void rna_def_environment_map(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Zoom", "");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "ignore_layers", PROP_BOOLEAN, PROP_LAYER_MEMBER);
+ prop= RNA_def_property(srna, "layers_ignore", PROP_BOOLEAN, PROP_LAYER_MEMBER);
RNA_def_property_boolean_sdna(prop, NULL, "notlay", 1);
RNA_def_property_array(prop, 20);
RNA_def_property_ui_text(prop, "Ignore Layers", "Hide objects on these layers when generating the Environment Map");
@@ -666,7 +667,7 @@ static void rna_def_texture_clouds(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Clouds Texture", "Procedural noise texture");
RNA_def_struct_sdna(srna, "Tex");
- prop= RNA_def_property(srna, "noise_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "noise_scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "noisesize");
RNA_def_property_range(prop, 0.0001, FLT_MAX);
RNA_def_property_ui_range(prop, 0.0001, 2, 10, 2);
@@ -692,7 +693,7 @@ static void rna_def_texture_clouds(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Noise Type", "");
RNA_def_property_update(prop, 0, "rna_Texture_nodes_update");
- prop= RNA_def_property(srna, "stype", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "cloud_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "stype");
RNA_def_property_enum_items(prop, prop_clouds_stype);
RNA_def_property_ui_text(prop, "Color", "");
@@ -727,7 +728,7 @@ static void rna_def_texture_wood(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Wood Texture", "Procedural noise texture");
RNA_def_struct_sdna(srna, "Tex");
- prop= RNA_def_property(srna, "noise_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "noise_scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "noisesize");
RNA_def_property_range(prop, 0.0001, FLT_MAX);
RNA_def_property_ui_range(prop, 0.0001, 2, 10, 2);
@@ -753,13 +754,13 @@ static void rna_def_texture_wood(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Noise Type", "");
RNA_def_property_update(prop, 0, "rna_Texture_nodes_update");
- prop= RNA_def_property(srna, "stype", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "wood_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "stype");
RNA_def_property_enum_items(prop, prop_wood_stype);
RNA_def_property_ui_text(prop, "Pattern", "");
RNA_def_property_update(prop, 0, "rna_Texture_nodes_update");
- prop= RNA_def_property(srna, "noisebasis2", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "noisebasis_2", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "noisebasis2");
RNA_def_property_enum_items(prop, prop_wood_noisebasis2);
RNA_def_property_ui_text(prop, "Noise Basis 2", "");
@@ -794,7 +795,7 @@ static void rna_def_texture_marble(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Marble Texture", "Procedural noise texture");
RNA_def_struct_sdna(srna, "Tex");
- prop= RNA_def_property(srna, "noise_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "noise_scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "noisesize");
RNA_def_property_range(prop, 0.0001, FLT_MAX);
RNA_def_property_ui_range(prop, 0.0001, 2, 10, 2);
@@ -821,7 +822,7 @@ static void rna_def_texture_marble(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Noise Type", "");
RNA_def_property_update(prop, 0, "rna_Texture_nodes_update");
- prop= RNA_def_property(srna, "stype", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "marble_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "stype");
RNA_def_property_enum_items(prop, prop_marble_stype);
RNA_def_property_ui_text(prop, "Pattern", "");
@@ -833,7 +834,7 @@ static void rna_def_texture_marble(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Noise Basis", "Sets the noise basis used for turbulence");
RNA_def_property_update(prop, 0, "rna_Texture_nodes_update");
- prop= RNA_def_property(srna, "noisebasis2", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "noisebasis_2", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "noisebasis2");
RNA_def_property_enum_items(prop, prop_marble_noisebasis2);
RNA_def_property_ui_text(prop, "Noise Basis 2", "");
@@ -901,7 +902,7 @@ static void rna_def_texture_blend(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Progression", "Sets the style of the color blending");
RNA_def_property_update(prop, 0, "rna_Texture_nodes_update");
- prop= RNA_def_property(srna, "flip_axis", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "use_flip_axis", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
RNA_def_property_enum_items(prop, prop_flip_axis_items);
RNA_def_property_ui_text(prop, "Flip Axis", "Flips the texture's X and Y axis");
@@ -937,7 +938,7 @@ static void rna_def_texture_stucci(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Noise Basis", "Sets the noise basis used for turbulence");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "noise_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "noise_scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "noisesize");
RNA_def_property_range(prop, 0.0001, FLT_MAX);
RNA_def_property_ui_range(prop, 0.0001, 2, 10, 2);
@@ -950,7 +951,7 @@ static void rna_def_texture_stucci(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Noise Type", "");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "stype", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "stucci_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "stype");
RNA_def_property_enum_items(prop, prop_stucci_stype);
RNA_def_property_ui_text(prop, "Pattern", "");
@@ -990,13 +991,13 @@ static void rna_def_texture_image(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Image Texture", "");
RNA_def_struct_sdna(srna, "Tex");
- prop= RNA_def_property(srna, "interpolation", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_interpolation", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_INTERPOL);
RNA_def_property_ui_text(prop, "Interpolation", "Interpolates pixels using Area filter");
RNA_def_property_update(prop, 0, "rna_Texture_update");
/* XXX: I think flip_axis should be a generic Texture property, enabled for all the texture types */
- prop= RNA_def_property(srna, "flip_axis", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_flip_axis", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_IMAROT);
RNA_def_property_ui_text(prop, "Flip Axis", "Flips the texture's X and Y axis");
RNA_def_property_update(prop, 0, "rna_Texture_update");
@@ -1006,7 +1007,7 @@ static void rna_def_texture_image(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Use Alpha", "Uses the alpha channel information in the image");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "calculate_alpha", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_calculate_alpha", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_CALCALPHA);
RNA_def_property_ui_text(prop, "Calculate Alpha", "Calculates an alpha channel based on RGB values in the image");
RNA_def_property_update(prop, 0, "rna_Texture_update");
@@ -1036,22 +1037,22 @@ static void rna_def_texture_image(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Repeat Y", "Sets a repetition multiplier in the Y direction");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "mirror_x", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_mirror_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TEX_REPEAT_XMIR);
RNA_def_property_ui_text(prop, "Mirror X", "Mirrors the image repetition on the X direction");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "mirror_y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_mirror_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TEX_REPEAT_YMIR);
RNA_def_property_ui_text(prop, "Mirror Y", "Mirrors the image repetition on the Y direction");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "checker_odd", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_checker_odd", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TEX_CHECKER_ODD);
RNA_def_property_ui_text(prop, "Checker Odd", "Sets odd checker tiles");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "checker_even", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_checker_even", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TEX_CHECKER_EVEN);
RNA_def_property_ui_text(prop, "Checker Even", "Sets even checker tiles");
RNA_def_property_update(prop, 0, "rna_Texture_update");
@@ -1118,7 +1119,7 @@ static void rna_def_texture_image(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Texture_update");
/* Normal Map */
- prop= RNA_def_property(srna, "normal_map", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_normal_map", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_NORMALMAP);
RNA_def_property_ui_text(prop, "Normal Map", "Uses image RGB values for normal mapping");
RNA_def_property_update(prop, 0, "rna_Texture_update");
@@ -1197,7 +1198,7 @@ static void rna_def_texture_musgrave(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Type", "");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "highest_dimension", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "dimension_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "mg_H");
RNA_def_property_range(prop, 0.0001, 2);
RNA_def_property_ui_text(prop, "Highest Dimension", "Highest fractal dimension");
@@ -1233,7 +1234,7 @@ static void rna_def_texture_musgrave(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Noise Intensity", "");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "noise_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "noise_scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "noisesize");
RNA_def_property_range(prop, 0.0001, FLT_MAX);
RNA_def_property_ui_range(prop, 0.0001, 2, 10, 2);
@@ -1316,7 +1317,7 @@ static void rna_def_texture_voronoi(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Distance Metric", "");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "coloring", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "color_mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "vn_coltype");
RNA_def_property_enum_items(prop, prop_coloring_items);
RNA_def_property_ui_text(prop, "Coloring", "");
@@ -1328,7 +1329,7 @@ static void rna_def_texture_voronoi(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Noise Intensity", "");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "noise_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "noise_scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "noisesize");
RNA_def_property_range(prop, 0.0001, FLT_MAX);
RNA_def_property_ui_range(prop, 0.0001, 2, 10, 2);
@@ -1357,7 +1358,7 @@ static void rna_def_texture_distorted_noise(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Distortion Amount", "");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "noise_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "noise_scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "noisesize");
RNA_def_property_range(prop, 0.0001, FLT_MAX);
RNA_def_property_ui_range(prop, 0.0001, 2, 10, 2);
@@ -1447,17 +1448,17 @@ static void rna_def_texture_pointdensity(BlenderRNA *brna)
prop= RNA_def_property(srna, "particle_system", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "Particle System", "Particle System to render as points");
RNA_def_property_struct_type(prop, "ParticleSystem");
- RNA_def_property_pointer_funcs(prop, "rna_PointDensity_psys_get", "rna_PointDensity_psys_set", NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_PointDensity_psys_get", "rna_PointDensity_psys_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "particle_cache", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "particle_cache_space", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "psys_cache_space");
RNA_def_property_enum_items(prop, particle_cache_items);
RNA_def_property_ui_text(prop, "Particle Cache", "Co-ordinate system to cache particles in");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "vertices_cache", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "vertex_cache_space", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "ob_cache_space");
RNA_def_property_enum_items(prop, vertice_cache_items);
RNA_def_property_ui_text(prop, "Vertices Cache", "Co-ordinate system to cache vertices in");
@@ -1475,7 +1476,7 @@ static void rna_def_texture_pointdensity(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Falloff", "Method of attenuating density by distance from the point");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "falloff_softness", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "falloff_soft", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "falloff_softness");
RNA_def_property_range(prop, 0.01, FLT_MAX);
RNA_def_property_ui_text(prop, "Softness", "Softness of the 'soft' falloff option");
@@ -1500,12 +1501,12 @@ static void rna_def_texture_pointdensity(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Texture_update");
/* Turbulence */
- prop= RNA_def_property(srna, "turbulence", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_turbulence", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TEX_PD_TURBULENCE);
RNA_def_property_ui_text(prop, "Turbulence", "Add directed noise to the density at render-time");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "turbulence_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "turbulence_scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "noise_size");
RNA_def_property_range(prop, 0.01, FLT_MAX);
RNA_def_property_ui_text(prop, "Size", "Scale of the added turbulent noise");
@@ -1540,7 +1541,7 @@ static void rna_def_texture_pointdensity(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "Tex");
RNA_def_struct_ui_text(srna, "Point Density", "Settings for the Point Density texture");
- prop= RNA_def_property(srna, "pointdensity", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "point_density", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "pd");
RNA_def_property_struct_type(prop, "PointDensity");
RNA_def_property_ui_text(prop, "Point Density", "The point density settings associated with this texture");
@@ -1614,7 +1615,7 @@ static void rna_def_texture_voxeldata(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "File Format", "Format of the source data set to render ");
RNA_def_property_update(prop, 0, "rna_Texture_voxeldata_update");
- prop= RNA_def_property(srna, "source_path", PROP_STRING, PROP_FILEPATH);
+ prop= RNA_def_property(srna, "filepath", PROP_STRING, PROP_FILEPATH);
RNA_def_property_string_sdna(prop, NULL, "source_path");
RNA_def_property_ui_text(prop, "Source Path", "The external source data file to use");
RNA_def_property_update(prop, 0, "rna_Texture_voxeldata_update");
@@ -1624,12 +1625,12 @@ static void rna_def_texture_voxeldata(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Resolution", "Resolution of the voxel grid");
RNA_def_property_update(prop, 0, "rna_Texture_voxeldata_update");
- prop= RNA_def_property(srna, "still", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_still_frame", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TEX_VD_STILL);
RNA_def_property_ui_text(prop, "Still Frame Only", "Always render a still frame from the voxel data sequence");
RNA_def_property_update(prop, 0, "rna_Texture_voxeldata_update");
- prop= RNA_def_property(srna, "still_frame_number", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "still_frame", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "still_frame");
RNA_def_property_range(prop, -MAXFRAME, MAXFRAME);
RNA_def_property_ui_text(prop, "Still Frame Number", "The frame number to always use");
@@ -1646,7 +1647,7 @@ static void rna_def_texture_voxeldata(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "Tex");
RNA_def_struct_ui_text(srna, "Voxel Data", "Settings for the Voxel Data texture");
- prop= RNA_def_property(srna, "voxeldata", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "voxel_data", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "vd");
RNA_def_property_struct_type(prop, "VoxelData");
RNA_def_property_ui_text(prop, "Voxel Data", "The voxel data associated with this texture");
@@ -1696,7 +1697,7 @@ static void rna_def_texture(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Color Ramp", "");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "brightness", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "intensity", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "bright");
RNA_def_property_range(prop, 0, 2);
RNA_def_property_ui_text(prop, "Brightness", "");
diff --git a/source/blender/makesrna/intern/rna_timeline.c b/source/blender/makesrna/intern/rna_timeline.c
index afc1d087cf2..a436c746910 100644
--- a/source/blender/makesrna/intern/rna_timeline.c
+++ b/source/blender/makesrna/intern/rna_timeline.c
@@ -55,9 +55,9 @@ static void rna_def_timeline_marker(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Frame", "The frame on which the timeline marker appears");
RNA_def_property_update(prop, NC_ANIMATION, NULL);
- prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", 1 /*SELECT*/);
- RNA_def_property_ui_text(prop, "Selected", "Marker selection state");
+ RNA_def_property_ui_text(prop, "Select", "Marker selection state");
RNA_def_property_update(prop, NC_ANIMATION, NULL);
#ifdef DURIAN_CAMERA_SWITCH
diff --git a/source/blender/makesrna/intern/rna_ui.c b/source/blender/makesrna/intern/rna_ui.c
index d25efd23da0..a659ff7c260 100644
--- a/source/blender/makesrna/intern/rna_ui.c
+++ b/source/blender/makesrna/intern/rna_ui.c
@@ -207,6 +207,7 @@ static StructRNA *rna_Panel_register(const bContext *C, ReportList *reports, voi
pt->ext.call= call;
pt->ext.free= free;
RNA_struct_blender_type_set(pt->ext.srna, pt);
+ RNA_def_struct_flag(pt->ext.srna, STRUCT_NO_IDPROPERTIES);
pt->poll= (have_function[0])? panel_poll: NULL;
pt->draw= (have_function[1])? panel_draw: NULL;
@@ -418,6 +419,7 @@ static StructRNA *rna_Menu_register(const bContext *C, ReportList *reports, void
mt->ext.call= call;
mt->ext.free= free;
RNA_struct_blender_type_set(mt->ext.srna, mt);
+ RNA_def_struct_flag(mt->ext.srna, STRUCT_NO_IDPROPERTIES);
mt->poll= (have_function[0])? menu_poll: NULL;
mt->draw= (have_function[1])? menu_draw: NULL;
@@ -545,10 +547,11 @@ static void rna_def_ui_layout(BlenderRNA *brna)
prop= RNA_def_property(srna, "operator_context", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, operator_context_items);
RNA_def_property_enum_funcs(prop, "rna_UILayout_op_context_get", "rna_UILayout_op_context_set", NULL);
-
+
prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_UILayout_enabled_get", "rna_UILayout_enabled_set");
-
+ RNA_def_property_ui_text(prop, "Enabled", "When false, this (sub)layout is greyed out.");
+
#if 0
prop= RNA_def_property(srna, "red_alert", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_UILayout_red_alert_get", "rna_UILayout_red_alert_set");
@@ -565,10 +568,11 @@ static void rna_def_ui_layout(BlenderRNA *brna)
prop= RNA_def_property(srna, "scale_x", PROP_FLOAT, PROP_UNSIGNED);
RNA_def_property_float_funcs(prop, "rna_UILayout_scale_x_get", "rna_UILayout_scale_x_set", NULL);
-
+ RNA_def_property_ui_text(prop, "Scale X", "Scale factor along the X for items in this (sub)layout.");
+
prop= RNA_def_property(srna, "scale_y", PROP_FLOAT, PROP_UNSIGNED);
RNA_def_property_float_funcs(prop, "rna_UILayout_scale_y_get", "rna_UILayout_scale_y_set", NULL);
-
+ RNA_def_property_ui_text(prop, "Scale Y", "Scale factor along the Y for items in this (sub)layout.");
RNA_api_ui_layout(srna);
}
@@ -580,68 +584,77 @@ static void rna_def_panel(BlenderRNA *brna)
FunctionRNA *func;
srna= RNA_def_struct(brna, "Panel", NULL);
- RNA_def_struct_ui_text(srna, "Panel", "Panel containing buttons");
+ RNA_def_struct_ui_text(srna, "Panel", "Panel containing UI elements");
RNA_def_struct_sdna(srna, "Panel");
RNA_def_struct_refine_func(srna, "rna_Panel_refine");
RNA_def_struct_register_funcs(srna, "rna_Panel_register", "rna_Panel_unregister");
/* poll */
func= RNA_def_function(srna, "poll", NULL);
- RNA_def_function_ui_description(func, "Test if the panel is visible or not.");
- RNA_def_function_flag(func, FUNC_REGISTER|FUNC_REGISTER_OPTIONAL);
+ RNA_def_function_ui_description(func, "If this method returns a non-null output, then the panel can be drawn.");
+ RNA_def_function_flag(func, FUNC_NO_SELF|FUNC_REGISTER|FUNC_REGISTER_OPTIONAL);
RNA_def_function_return(func, RNA_def_boolean(func, "visible", 1, "", ""));
parm= RNA_def_pointer(func, "context", "Context", "", "");
RNA_def_property_flag(parm, PROP_REQUIRED);
/* draw */
func= RNA_def_function(srna, "draw", NULL);
- RNA_def_function_ui_description(func, "Draw buttons into the panel UI layout.");
+ RNA_def_function_ui_description(func, "Draw UI elements into the panel UI layout.");
RNA_def_function_flag(func, FUNC_REGISTER);
parm= RNA_def_pointer(func, "context", "Context", "", "");
RNA_def_property_flag(parm, PROP_REQUIRED);
func= RNA_def_function(srna, "draw_header", NULL);
- RNA_def_function_ui_description(func, "Draw buttons into the panel header UI layout.");
+ RNA_def_function_ui_description(func, "Draw UI elements into the panel's header UI layout.");
RNA_def_function_flag(func, FUNC_REGISTER);
parm= RNA_def_pointer(func, "context", "Context", "", "");
RNA_def_property_flag(parm, PROP_REQUIRED);
prop= RNA_def_property(srna, "layout", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "UILayout");
-
+ RNA_def_property_ui_text(prop, "Layout", "Defines the structure of the panel in the UI.");
+
prop= RNA_def_property(srna, "text", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "drawname");
-
+ RNA_def_property_ui_text(prop, "Text", "XXX todo");
+
/* registration */
prop= RNA_def_property(srna, "bl_idname", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "type->idname");
RNA_def_property_flag(prop, PROP_REGISTER);
-
+ RNA_def_property_ui_text(prop, "ID Name", "If this is set, the panel gets a custom ID, otherwise it takes the name of the class used to define the panel. For example, if the class name is \"OBJECT_PT_hello\", and bl_idname is not set by the script, then bl_idname = \"OBJECT_PT_hello\"");
+
prop= RNA_def_property(srna, "bl_label", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "type->label");
RNA_def_property_flag(prop, PROP_REGISTER);
-
+ RNA_def_property_ui_text(prop, "Label", "The panel label, shows up in the panel header at the right of the triangle used to collapse the panel.");
+
prop= RNA_def_property(srna, "bl_space_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "type->space_type");
RNA_def_property_enum_items(prop, space_type_items);
RNA_def_property_flag(prop, PROP_REGISTER);
-
+ RNA_def_property_ui_text(prop, "Space type", "The space where the panel is going to be used in.");
+
prop= RNA_def_property(srna, "bl_region_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "type->region_type");
RNA_def_property_enum_items(prop, region_type_items);
RNA_def_property_flag(prop, PROP_REGISTER);
+ RNA_def_property_ui_text(prop, "Region Type", "The region where the panel is going to be used in.");
prop= RNA_def_property(srna, "bl_context", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "type->context");
RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL); /* should this be optional? - Campbell */
-
+ RNA_def_property_ui_text(prop, "Context", "The context in which the panel belongs to. (TODO: explain the possible combinations bl_context/bl_region_type/bl_space_type)");
+
prop= RNA_def_property(srna, "bl_default_closed", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "type->flag", PNL_DEFAULT_CLOSED);
RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL);
-
+ RNA_def_property_ui_text(prop, "Default closed", "Defines if the panel has to be open or collapsed at the time of its creation. Note that once the panel has been created with bl_default_closed = True, at reload (F8) it stays open.");
+
prop= RNA_def_property(srna, "bl_show_header", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "type->flag", PNL_NO_HEADER);
RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL);
+ RNA_def_property_ui_text(prop, "Show Header", "If set to True, the panel shows a header, which contains a clickable arrow to collapse the panel and the label (see bl_label).");
}
static void rna_def_header(BlenderRNA *brna)
@@ -652,14 +665,14 @@ static void rna_def_header(BlenderRNA *brna)
FunctionRNA *func;
srna= RNA_def_struct(brna, "Header", NULL);
- RNA_def_struct_ui_text(srna, "Header", "Editor header containing buttons");
+ RNA_def_struct_ui_text(srna, "Header", "Editor header containing UI elements.");
RNA_def_struct_sdna(srna, "Header");
RNA_def_struct_refine_func(srna, "rna_Header_refine");
RNA_def_struct_register_funcs(srna, "rna_Header_register", "rna_Header_unregister");
/* draw */
func= RNA_def_function(srna, "draw", NULL);
- RNA_def_function_ui_description(func, "Draw buttons into the header UI layout.");
+ RNA_def_function_ui_description(func, "Draw UI elements into the header UI layout.");
RNA_def_function_flag(func, FUNC_REGISTER);
parm= RNA_def_pointer(func, "context", "Context", "", "");
RNA_def_property_flag(parm, PROP_REQUIRED);
@@ -669,16 +682,19 @@ static void rna_def_header(BlenderRNA *brna)
prop= RNA_def_property(srna, "layout", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "layout");
RNA_def_property_struct_type(prop, "UILayout");
+ RNA_def_property_ui_text(prop, "Layout", "Defines the structure of the header in the UI.");
/* registration */
prop= RNA_def_property(srna, "bl_idname", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "type->idname");
RNA_def_property_flag(prop, PROP_REGISTER);
+ RNA_def_property_ui_text(prop, "ID Name", "If this is set, the header gets a custom ID, otherwise it takes the name of the class used to define the panel. For example, if the class name is \"OBJECT_HT_hello\", and bl_idname is not set by the script, then bl_idname = \"OBJECT_HT_hello\"");
prop= RNA_def_property(srna, "bl_space_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "type->space_type");
RNA_def_property_enum_items(prop, space_type_items);
RNA_def_property_flag(prop, PROP_REGISTER);
+ RNA_def_property_ui_text(prop, "Space type", "The space where the header is going to be used in.");
RNA_define_verify_sdna(1);
}
@@ -698,15 +714,15 @@ static void rna_def_menu(BlenderRNA *brna)
/* poll */
func= RNA_def_function(srna, "poll", NULL);
- RNA_def_function_ui_description(func, "Test if the menu is visible or not.");
- RNA_def_function_flag(func, FUNC_REGISTER|FUNC_REGISTER_OPTIONAL);
+ RNA_def_function_ui_description(func, "If this method returns a non-null output, then the menu can be drawn.");
+ RNA_def_function_flag(func, FUNC_NO_SELF|FUNC_REGISTER|FUNC_REGISTER_OPTIONAL);
RNA_def_function_return(func, RNA_def_boolean(func, "visible", 1, "", ""));
parm= RNA_def_pointer(func, "context", "Context", "", "");
RNA_def_property_flag(parm, PROP_REQUIRED);
/* draw */
func= RNA_def_function(srna, "draw", NULL);
- RNA_def_function_ui_description(func, "Draw buttons into the menu UI layout.");
+ RNA_def_function_ui_description(func, "Draw UI elements into the menu UI layout.");
RNA_def_function_flag(func, FUNC_REGISTER);
parm= RNA_def_pointer(func, "context", "Context", "", "");
RNA_def_property_flag(parm, PROP_REQUIRED);
@@ -716,15 +732,18 @@ static void rna_def_menu(BlenderRNA *brna)
prop= RNA_def_property(srna, "layout", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "layout");
RNA_def_property_struct_type(prop, "UILayout");
+ RNA_def_property_ui_text(prop, "Layout", "Defines the structure of the menu in the UI.");
/* registration */
prop= RNA_def_property(srna, "bl_idname", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "type->idname");
RNA_def_property_flag(prop, PROP_REGISTER);
+ RNA_def_property_ui_text(prop, "ID Name", "If this is set, the menu gets a custom ID, otherwise it takes the name of the class used to define the panel. For example, if the class name is \"OBJECT_MT_hello\", and bl_idname is not set by the script, then bl_idname = \"OBJECT_MT_hello\"");
prop= RNA_def_property(srna, "bl_label", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "type->label");
RNA_def_property_flag(prop, PROP_REGISTER);
+ RNA_def_property_ui_text(prop, "Label", "The menu label");
RNA_define_verify_sdna(1);
}
diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c
index b2831c4b1d3..720666a6180 100644
--- a/source/blender/makesrna/intern/rna_ui_api.c
+++ b/source/blender/makesrna/intern/rna_ui_api.c
@@ -41,7 +41,7 @@ static void rna_uiItemR(uiLayout *layout, PointerRNA *ptr, char *propname, char
int flag= 0;
if(!prop) {
- printf("rna_uiItemR: property not found: %s\n", propname);
+ printf("rna_uiItemR: property not found: %s.%s\n", RNA_struct_identifier(ptr->type), propname);
return;
}
@@ -127,11 +127,13 @@ void RNA_api_ui_layout(StructRNA *srna)
func= RNA_def_function(srna, "row", "uiLayoutRow");
parm= RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in.");
RNA_def_function_return(func, parm);
+ RNA_def_function_ui_description(func, "Sub-layout. Items placed in this sublayout are placed next to each other in a row.");
RNA_def_boolean(func, "align", 0, "", "Align buttons to each other.");
-
+
func= RNA_def_function(srna, "column", "uiLayoutColumn");
parm= RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in.");
RNA_def_function_return(func, parm);
+ RNA_def_function_ui_description(func, "Sub-layout. Items placed in this sublayout are placed under each other in a column.");
RNA_def_boolean(func, "align", 0, "", "Align buttons to each other.");
func= RNA_def_function(srna, "column_flow", "uiLayoutColumnFlow");
@@ -144,7 +146,8 @@ void RNA_api_ui_layout(StructRNA *srna)
func= RNA_def_function(srna, "box", "uiLayoutBox");
parm= RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in.");
RNA_def_function_return(func, parm);
-
+ RNA_def_function_ui_description(func, "Sublayout. Items placed in this sublayout are placed under each other in a column and are surrounded by a box.");
+
/* split layout */
func= RNA_def_function(srna, "split", "uiLayoutSplit");
parm= RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in.");
@@ -154,6 +157,7 @@ void RNA_api_ui_layout(StructRNA *srna)
/* items */
func= RNA_def_function(srna, "prop", "rna_uiItemR");
+ RNA_def_function_ui_description(func, "Item. Exposes an RNA item and places it into the layout.");
api_ui_item_rna_common(func);
api_ui_item_common(func);
RNA_def_boolean(func, "expand", 0, "", "Expand button to show more detail.");
@@ -192,6 +196,7 @@ void RNA_api_ui_layout(StructRNA *srna)
parm= RNA_def_pointer(func, "properties", "OperatorProperties", "", "Operator properties to fill in, return when 'properties' is set to true.");
RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR);
RNA_def_function_return(func, parm);
+ RNA_def_function_ui_description(func, "Item. Places a button into the layout to call an Operator.");
/* func= RNA_def_function(srna, "operator_enum", "uiItemEnumO_string");
api_ui_item_op_common(func);
@@ -241,6 +246,7 @@ void RNA_api_ui_layout(StructRNA *srna)
RNA_def_property_flag(parm, PROP_REQUIRED); */
func= RNA_def_function(srna, "label", "uiItemL");
+ RNA_def_function_ui_description(func, "Item. Display text in the layout.");
api_ui_item_common(func);
func= RNA_def_function(srna, "menu", "uiItemM");
@@ -250,6 +256,7 @@ void RNA_api_ui_layout(StructRNA *srna)
RNA_def_property_flag(parm, PROP_REQUIRED);
func= RNA_def_function(srna, "separator", "uiItemS");
+ RNA_def_function_ui_description(func, "Item. Inserts empty space into the layout between items.");
/* context */
func= RNA_def_function(srna, "set_context_pointer", "uiLayoutSetContextPointer");
@@ -274,7 +281,6 @@ void RNA_api_ui_layout(StructRNA *srna)
RNA_def_string(func, "new", "", 0, "", "Operator identifier to create a new ID block.");
RNA_def_string(func, "open", "", 0, "", "Operator identifier to open a file for creating a new ID block.");
RNA_def_string(func, "unlink", "", 0, "", "Operator identifier to unlink the ID block.");
- RNA_def_string(func, "filter", "", 0, "", "Function identifier to filter the ID block.");
func= RNA_def_function(srna, "template_ID_preview", "uiTemplateIDPreview");
RNA_def_function_flag(func, FUNC_USE_CONTEXT);
@@ -282,7 +288,6 @@ void RNA_api_ui_layout(StructRNA *srna)
RNA_def_string(func, "new", "", 0, "", "Operator identifier to create a new ID block.");
RNA_def_string(func, "open", "", 0, "", "Operator identifier to open a file for creating a new ID block.");
RNA_def_string(func, "unlink", "", 0, "", "Operator identifier to unlink the ID block.");
- RNA_def_string(func, "filter", "", 0, "", "Function identifier to filter the ID block.");
RNA_def_int(func, "rows", 0, 0, INT_MAX, "Number of thumbnail preview rows to display", "", 0, INT_MAX);
RNA_def_int(func, "cols", 0, 0, INT_MAX, "Number of thumbnail preview columns to display", "", 0, INT_MAX);
@@ -308,44 +313,50 @@ void RNA_api_ui_layout(StructRNA *srna)
func= RNA_def_function(srna, "template_modifier", "uiTemplateModifier");
RNA_def_function_flag(func, FUNC_USE_CONTEXT);
+ RNA_def_function_ui_description(func, "Layout . Generates the UI layout for modifiers.");
parm= RNA_def_pointer(func, "data", "Modifier", "", "Modifier data.");
RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR|PROP_NEVER_NULL);
parm= RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in.");
RNA_def_function_return(func, parm);
- RNA_def_boolean(func, "compact", 0, "", "Show a smaller version of the template, split on two lines.");
func= RNA_def_function(srna, "template_constraint", "uiTemplateConstraint");
+ RNA_def_function_ui_description(func, "Layout . Generates the UI layout for constraints.");
parm= RNA_def_pointer(func, "data", "Constraint", "", "Constraint data.");
RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR|PROP_NEVER_NULL);
parm= RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in.");
RNA_def_function_return(func, parm);
- RNA_def_boolean(func, "compact", 0, "", "Show a smaller version of the template, split on two lines.");
func= RNA_def_function(srna, "template_preview", "uiTemplatePreview");
+ RNA_def_function_ui_description(func, "Item. A preview window for materials, textures, lamps, etc.");
parm= RNA_def_pointer(func, "id", "ID", "", "ID datablock.");
RNA_def_property_flag(parm, PROP_REQUIRED);
RNA_def_pointer(func, "parent", "ID", "", "ID datablock.");
RNA_def_pointer(func, "slot", "TextureSlot", "", "Texture slot.");
func= RNA_def_function(srna, "template_curve_mapping", "uiTemplateCurveMapping");
+ RNA_def_function_ui_description(func, "Item. A curve mapping widget used for e.g falloff curves for lamps.");
api_ui_item_rna_common(func);
RNA_def_enum(func, "type", curve_type_items, 0, "Type", "Type of curves to display.");
RNA_def_boolean(func, "levels", 0, "", "Show black/white levels.");
RNA_def_boolean(func, "brush", 0, "", "Show brush options.");
func= RNA_def_function(srna, "template_color_ramp", "uiTemplateColorRamp");
+ RNA_def_function_ui_description(func, "Item. A color ramp widget.");
api_ui_item_rna_common(func);
RNA_def_boolean(func, "expand", 0, "", "Expand button to show more detail.");
func= RNA_def_function(srna, "template_histogram", "uiTemplateHistogram");
+ RNA_def_function_ui_description(func, "Item. A histogramm widget to analyze imaga data.");
api_ui_item_rna_common(func);
RNA_def_boolean(func, "expand", 0, "", "Expand button to show more detail.");
func= RNA_def_function(srna, "template_waveform", "uiTemplateWaveform");
+ RNA_def_function_ui_description(func, "Item. A waveform widget to analyze imaga data.");
api_ui_item_rna_common(func);
RNA_def_boolean(func, "expand", 0, "", "Expand button to show more detail.");
func= RNA_def_function(srna, "template_vectorscope", "uiTemplateVectorscope");
+ RNA_def_function_ui_description(func, "Item. A vectorscope widget to analyze imaga data.");
api_ui_item_rna_common(func);
RNA_def_boolean(func, "expand", 0, "", "Expand button to show more detail.");
@@ -359,6 +370,7 @@ void RNA_api_ui_layout(StructRNA *srna)
RNA_def_property_flag(parm, PROP_REQUIRED);
func= RNA_def_function(srna, "template_color_wheel", "uiTemplateColorWheel");
+ RNA_def_function_ui_description(func, "Item. A color wheel widget to pick colors.");
api_ui_item_rna_common(func);
RNA_def_boolean(func, "value_slider", 0, "", "Display the value slider to the right of the color wheel");
RNA_def_boolean(func, "lock", 0, "", "Lock the color wheel display to value 1.0 regardless of actual color");
@@ -376,6 +388,7 @@ void RNA_api_ui_layout(StructRNA *srna)
RNA_def_property_flag(parm, PROP_REQUIRED);
func= RNA_def_function(srna, "template_image", "uiTemplateImage");
+ RNA_def_function_ui_description(func, "Item(s). User interface for selecting images and their source paths.");
RNA_def_function_flag(func, FUNC_USE_CONTEXT);
api_ui_item_rna_common(func);
parm= RNA_def_pointer(func, "image_user", "ImageUser", "", "");
@@ -383,6 +396,7 @@ void RNA_api_ui_layout(StructRNA *srna)
RNA_def_boolean(func, "compact", 0, "", "Use more compact layout.");
func= RNA_def_function(srna, "template_list", "uiTemplateList");
+ RNA_def_function_ui_description(func, "Item. A list widget to display data. e.g. vertexgroups.");
RNA_def_function_flag(func, FUNC_USE_CONTEXT);
parm= RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take property.");
RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR);
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index e933b7903bc..b2b22cf2f50 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -51,6 +51,7 @@
#include "BKE_global.h"
#include "MEM_guardedalloc.h"
+#include "MEM_CacheLimiterC-Api.h"
static void rna_userdef_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
@@ -171,6 +172,11 @@ static void rna_UserDef_audio_update(Main *bmain, Scene *scene, PointerRNA *ptr)
sound_init(bmain);
}
+static void rna_Userdef_memcache_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+{
+ MEM_CacheLimiter_set_maximum(U.memcachelimit * 1024 * 1024);
+}
+
static void rna_UserDef_weight_color_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
Object *ob;
@@ -251,12 +257,14 @@ static void rna_def_userdef_theme_ui_font_style(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Shadow Size", "Shadow size in pixels (0, 3 and 5 supported)");
RNA_def_property_update(prop, 0, "rna_userdef_update");
- prop= RNA_def_property(srna, "shadx", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "shadow_offset_x", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "shadx");
RNA_def_property_range(prop, -10, 10);
RNA_def_property_ui_text(prop, "Shadow X Offset", "Shadow offset in pixels");
RNA_def_property_update(prop, 0, "rna_userdef_update");
- prop= RNA_def_property(srna, "shady", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "shadow_offset_y", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "shady");
RNA_def_property_range(prop, -10, 10);
RNA_def_property_ui_text(prop, "Shadow Y Offset", "Shadow offset in pixels");
RNA_def_property_update(prop, 0, "rna_userdef_update");
@@ -287,21 +295,21 @@ static void rna_def_userdef_theme_ui_style(BlenderRNA *brna)
RNA_def_property_range(prop, 0.5, 2.0);
RNA_def_property_ui_text(prop, "Panel Zoom", "Default zoom level for panel areas");
- prop= RNA_def_property(srna, "paneltitle", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "panel_title", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_pointer_sdna(prop, NULL, "paneltitle");
RNA_def_property_struct_type(prop, "ThemeFontStyle");
RNA_def_property_ui_text(prop, "Panel Font", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
- prop= RNA_def_property(srna, "grouplabel", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "group_label", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_pointer_sdna(prop, NULL, "grouplabel");
RNA_def_property_struct_type(prop, "ThemeFontStyle");
RNA_def_property_ui_text(prop, "Group Label Font", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
- prop= RNA_def_property(srna, "widgetlabel", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "widget_label", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_pointer_sdna(prop, NULL, "widgetlabel");
RNA_def_property_struct_type(prop, "ThemeFontStyle");
@@ -356,7 +364,7 @@ static void rna_def_userdef_theme_ui_wcol(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Text Selected", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
- prop= RNA_def_property(srna, "shaded", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_shaded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "shaded", 1);
RNA_def_property_ui_text(prop, "Shaded", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
@@ -1215,7 +1223,7 @@ static void rna_def_userdef_theme_space_node(BlenderRNA *brna)
rna_def_userdef_theme_spaces_main(srna, SPACE_NODE);
- prop= RNA_def_property(srna, "wires", PROP_FLOAT, PROP_COLOR);
+ prop= RNA_def_property(srna, "wire", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "wire");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Wires", "");
@@ -1632,10 +1640,10 @@ static void rna_def_userdef_theme_colorset(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Normal", "Color used for the surface of bones");
RNA_def_property_update(prop, 0, "rna_userdef_update");
- prop= RNA_def_property(srna, "selected", PROP_FLOAT, PROP_COLOR);
+ prop= RNA_def_property(srna, "select", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "select");
RNA_def_property_array(prop, 3);
- RNA_def_property_ui_text(prop, "Selected", "Color used for selected bones");
+ RNA_def_property_ui_text(prop, "Select", "Color used for selected bones");
RNA_def_property_update(prop, 0, "rna_userdef_update");
prop= RNA_def_property(srna, "active", PROP_FLOAT, PROP_COLOR);
@@ -1643,7 +1651,7 @@ static void rna_def_userdef_theme_colorset(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Active", "Color used for active bones");
RNA_def_property_update(prop, 0, "rna_userdef_update");
- prop= RNA_def_property(srna, "colored_constraints", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_colored_constraints", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TH_WIRECOLOR_CONSTCOLS);
RNA_def_property_ui_text(prop, "Colored Constraints", "Allow the use of colors indicating constraints/keyed status");
RNA_def_property_update(prop, 0, "rna_userdef_update");
@@ -1847,7 +1855,7 @@ static void rna_def_userdef_solidlight(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "SolidLight");
RNA_def_struct_ui_text(srna, "Solid Light", "Light used for OpenGL lighting in solid draw mode");
- prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", 1);
RNA_def_property_ui_text(prop, "Enabled", "Enable this OpenGL light in solid draw mode");
RNA_def_property_update(prop, 0, "rna_UserDef_viewport_lights_update");
@@ -1892,21 +1900,21 @@ static void rna_def_userdef_view(BlenderRNA *brna)
/* View */
/* display */
- prop= RNA_def_property(srna, "tooltips", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_tooltips", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_TOOLTIPS);
RNA_def_property_ui_text(prop, "Tooltips", "Display tooltips");
- prop= RNA_def_property(srna, "display_object_info", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_object_info", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_DRAWVIEWINFO);
RNA_def_property_ui_text(prop, "Display Object Info", "Display objects name and frame number in 3D view");
RNA_def_property_update(prop, 0, "rna_userdef_update");
- prop= RNA_def_property(srna, "global_scene", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_global_scene", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_SCENEGLOBAL);
RNA_def_property_ui_text(prop, "Global Scene", "Forces the current Scene to be displayed in all Screens");
RNA_def_property_update(prop, 0, "rna_userdef_update");
- prop= RNA_def_property(srna, "use_large_cursors", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_large_cursors", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "curssize", 0);
RNA_def_property_ui_text(prop, "Large Cursors", "Use large mouse cursors when available");
RNA_def_property_update(prop, 0, "rna_userdef_update");
@@ -1926,7 +1934,7 @@ static void rna_def_userdef_view(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_userdef_update");
/* menus */
- prop= RNA_def_property(srna, "open_mouse_over", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_mouse_over_open", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_MENUOPENAUTO);
RNA_def_property_ui_text(prop, "Open On Mouse Over", "Open menu buttons and pulldowns automatically when the mouse is hovering");
@@ -1951,33 +1959,33 @@ static void rna_def_userdef_view(BlenderRNA *brna)
RNA_def_property_range(prop, 1, 40);
RNA_def_property_ui_text(prop, "Hold RMB Open Toolbox Delay", "Time in 1/10 seconds to hold the Right Mouse Button before opening the toolbox");
- prop= RNA_def_property(srna, "use_column_layout", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_column_layout", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_PLAINMENUS);
RNA_def_property_ui_text(prop, "Toolbox Column Layout", "Use a column layout for toolbox");
- prop= RNA_def_property(srna, "directional_menus", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_directional_menus", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "uiflag", USER_MENUFIXEDORDER);
RNA_def_property_ui_text(prop, "Contents Follow Opening Direction", "Otherwise menus, etc will always be top to bottom, left to right, no matter opening direction");
- prop= RNA_def_property(srna, "global_pivot", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_global_pivot", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_LOCKAROUND);
RNA_def_property_ui_text(prop, "Global Pivot", "Lock the same rotation/scaling pivot in all 3D Views");
- prop= RNA_def_property(srna, "auto_depth", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_mouse_auto_depth", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_ORBIT_ZBUF);
RNA_def_property_ui_text(prop, "Auto Depth", "Use the depth under the mouse to improve view pan/rotate/zoom functionality");
/* view zoom */
- prop= RNA_def_property(srna, "zoom_to_mouse", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_zoom_to_mouse", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_ZOOM_TO_MOUSEPOS);
RNA_def_property_ui_text(prop, "Zoom To Mouse Position", "Zoom in towards the mouse pointer's position in the 3D view, rather than the 2D window center");
/* view rotation */
- prop= RNA_def_property(srna, "auto_perspective", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_perspective", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_AUTOPERSP);
RNA_def_property_ui_text(prop, "Auto Perspective", "Automatically switch between orthographic and perspective when changing from top/front/side views");
- prop= RNA_def_property(srna, "rotate_around_selection", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_rotate_around_active", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_ORBIT_SELECTION);
RNA_def_property_ui_text(prop, "Rotate Around Selection", "Use selection as the pivot point");
@@ -1999,20 +2007,6 @@ static void rna_def_userdef_view(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Mini Axis Brightness", "The brightness of the icon");
RNA_def_property_update(prop, 0, "rna_userdef_update");
- /* middle mouse button */
- prop= RNA_def_property(srna, "use_middle_mouse_paste", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_MMB_PASTE);
- RNA_def_property_ui_text(prop, "Middle Mouse Paste", "In text window, paste with middle mouse button instead of panning");
-
- prop= RNA_def_property(srna, "wheel_invert_zoom", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_WHEELZOOMDIR);
- RNA_def_property_ui_text(prop, "Wheel Invert Zoom", "Swap the Mouse Wheel zoom direction");
-
- prop= RNA_def_property(srna, "wheel_scroll_lines", PROP_INT, PROP_NONE);
- RNA_def_property_int_sdna(prop, NULL, "wheellinescroll");
- RNA_def_property_range(prop, 0, 32);
- RNA_def_property_ui_text(prop, "Wheel Scroll Lines", "The number of lines scrolled at a time with the mouse wheel");
-
prop= RNA_def_property(srna, "smooth_view", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "smooth_viewtx");
RNA_def_property_range(prop, 0, 1000);
@@ -2024,7 +2018,7 @@ static void rna_def_userdef_view(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Rotation Angle", "The rotation step for numerical pad keys (2 4 6 8)");
/* 3D transform widget */
- prop= RNA_def_property(srna, "use_manipulator", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_manipulator", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "tw_flag", 1);
RNA_def_property_ui_text(prop, "Manipulator", "Use 3D transform manipulator");
RNA_def_property_update(prop, 0, "rna_userdef_update");
@@ -2053,7 +2047,7 @@ static void rna_def_userdef_view(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_userdef_update");
/* View2D Grid Displays */
- prop= RNA_def_property(srna, "view2d_grid_minimum_spacing", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "view2d_grid_spacing_min", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "v2d_min_gridsize");
RNA_def_property_range(prop, 1, 500); // XXX: perhaps the lower range should only go down to 5?
RNA_def_property_ui_text(prop, "2D View Minimum Grid Spacing", "Minimum number of pixels between each gridline in 2D Viewports");
@@ -2066,13 +2060,6 @@ static void rna_def_userdef_view(BlenderRNA *brna)
RNA_def_property_enum_funcs(prop, NULL, "rna_userdef_timecode_style_set", NULL);
RNA_def_property_ui_text(prop, "TimeCode Style", "Format of Time Codes displayed when not displaying timing in terms of frames");
RNA_def_property_update(prop, 0, "rna_userdef_update");
-
- /* Properties Window */
- prop= RNA_def_property(srna, "properties_width_check", PROP_INT, PROP_NONE);
- RNA_def_property_int_sdna(prop, NULL, "propwidth");
- RNA_def_property_range(prop, 150, 400);
- RNA_def_property_ui_text(prop, "Width Check", "Dual Column layout will change to single column layout when the width of the area gets below this value (needs restart to take effect)");
- RNA_def_property_update(prop, 0, "rna_userdef_update");
}
static void rna_def_userdef_edit(BlenderRNA *brna)
@@ -2112,11 +2099,11 @@ static void rna_def_userdef_edit(BlenderRNA *brna)
RNA_def_property_enum_items(prop, object_align_items);
RNA_def_property_ui_text(prop, "Align Object To", "When adding objects from a 3D View menu, either align them to that view's direction or the world coordinates");
- prop= RNA_def_property(srna, "enter_edit_mode", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_enter_edit_mode", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_ADD_EDITMODE);
RNA_def_property_ui_text(prop, "Enter Edit Mode", "Enter Edit Mode automatically after adding a new object");
- prop= RNA_def_property(srna, "drag_immediately", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_drag_immediately", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_RELEASECONFIRM);
RNA_def_property_ui_text(prop, "Release confirm", "Moving things with a mouse drag confirms when releasing the button");
@@ -2131,7 +2118,7 @@ static void rna_def_userdef_edit(BlenderRNA *brna)
RNA_def_property_range(prop, 0, 32767);
RNA_def_property_ui_text(prop, "Undo Memory Size", "Maximum memory usage in megabytes (0 means unlimited)");
- prop= RNA_def_property(srna, "global_undo", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_global_undo", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_GLOBALUNDO);
RNA_def_property_ui_text(prop, "Global Undo", "Global undo works by keeping a full copy of the file itself in memory, so takes extra memory");
@@ -2146,16 +2133,16 @@ static void rna_def_userdef_edit(BlenderRNA *brna)
RNA_def_property_enum_funcs(prop, "rna_userdef_autokeymode_get", "rna_userdef_autokeymode_set", NULL);
RNA_def_property_ui_text(prop, "Auto Keying Mode", "Mode of automatic keyframe insertion for Objects and Bones");
- prop= RNA_def_property(srna, "auto_keyframe_insert_available", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_keyframe_insert_available", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "autokey_flag", AUTOKEY_FLAG_INSERTAVAIL);
RNA_def_property_ui_text(prop, "Auto Keyframe Insert Available", "Automatic keyframe insertion in available curves");
- prop= RNA_def_property(srna, "auto_keyframe_insert_keyingset", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_keyframe_insert_keyingset", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "autokey_flag", AUTOKEY_FLAG_ONLYKEYINGSET);
RNA_def_property_ui_text(prop, "Auto Keyframe Insert Keying Set", "Automatic keyframe insertion using active Keying Set");
/* keyframing settings */
- prop= RNA_def_property(srna, "keyframe_insert_needed", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_keyframe_insert_needed", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "autokey_flag", AUTOKEY_FLAG_INSERTNEEDED);
RNA_def_property_ui_text(prop, "Keyframe Insert Needed", "Keyframe insertion only when keyframe needed");
@@ -2163,7 +2150,7 @@ static void rna_def_userdef_edit(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "autokey_flag", AUTOKEY_FLAG_AUTOMATKEY);
RNA_def_property_ui_text(prop, "Visual Keying", "Use Visual keying automatically for constrained objects");
- prop= RNA_def_property(srna, "insertkey_xyz_to_rgb", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_insertkey_xyz_to_rgb", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "autokey_flag", AUTOKEY_FLAG_XYZ2RGB);
RNA_def_property_ui_text(prop, "New F-Curve Colors - XYZ to RGB", "Color for newly added transformation F-Curves (Location, Rotation, Scale) and also Color is based on the transform axis");
@@ -2193,11 +2180,11 @@ static void rna_def_userdef_edit(BlenderRNA *brna)
RNA_def_property_range(prop, 0, 100);
RNA_def_property_ui_text(prop, "Grease Pencil Euclidean Distance", "Distance moved by mouse when drawing stroke (in pixels) to include");
- prop= RNA_def_property(srna, "grease_pencil_smooth_stroke", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_grease_pencil_smooth_stroke", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gp_settings", GP_PAINT_DOSMOOTH);
RNA_def_property_ui_text(prop, "Grease Pencil Smooth Stroke", "Smooth the final stroke");
- prop= RNA_def_property(srna, "grease_pencil_simplify_stroke", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_grease_pencil_simplify_stroke", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gp_settings", GP_PAINT_DOSIMPLIFY);
RNA_def_property_ui_text(prop, "Grease Pencil Simplify Stroke", "Simplify the final stroke");
@@ -2208,87 +2195,58 @@ static void rna_def_userdef_edit(BlenderRNA *brna)
/* sculpt and paint */
- prop= RNA_def_property(srna, "sculpt_paint_overlay_col", PROP_FLOAT, PROP_COLOR);
+ prop= RNA_def_property(srna, "sculpt_paint_overlay_color", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "sculpt_paint_overlay_col");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Sculpt/Paint Overlay Color", "Color of texture overlay");
- prop= RNA_def_property(srna, "sculpt_paint_use_unified_size", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "sculpt_paint_settings", SCULPT_PAINT_USE_UNIFIED_SIZE);
- RNA_def_property_ui_text(prop, "Sculpt/Paint Use Unified Radius", "Instead of per brush radius, the radius is shared across brushes");
-
- prop= RNA_def_property(srna, "sculpt_paint_use_unified_strength", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "sculpt_paint_settings", SCULPT_PAINT_USE_UNIFIED_ALPHA);
- RNA_def_property_ui_text(prop, "Sculpt/Paint Use Unified Strength", "Instead of per brush strength, the strength is shared across brushes");
-
- prop= RNA_def_property(srna, "sculpt_paint_unified_lock_brush_size", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "sculpt_paint_settings", SCULPT_PAINT_UNIFIED_LOCK_BRUSH_SIZE);
- RNA_def_property_ui_text(prop, "Sculpt/Paint Use Unified Blender Units", "When locked all brushes stay same size relative to object; when unlocked all brush sizes are given in pixels");
-
- prop= RNA_def_property(srna, "sculpt_paint_unified_size", PROP_INT, PROP_DISTANCE);
- RNA_def_property_range(prop, 1, MAX_BRUSH_PIXEL_RADIUS*10);
- RNA_def_property_ui_range(prop, 1, MAX_BRUSH_PIXEL_RADIUS, 1, 0);
- RNA_def_property_ui_text(prop, "Sculpt/Paint Unified Size", "Unified radius of the brush in pixels");
-
- prop= RNA_def_property(srna, "sculpt_paint_unified_unprojected_radius", PROP_FLOAT, PROP_DISTANCE);
- RNA_def_property_range(prop, 0, FLT_MAX);
- RNA_def_property_ui_range(prop, 0, 1, 0, 0);
- RNA_def_property_ui_text(prop, "Sculpt/Paint Unified Surface Size", "Unified radius of brush in Blender units");
-
- prop= RNA_def_property(srna, "sculpt_paint_unified_strength", PROP_FLOAT, PROP_FACTOR);
- RNA_def_property_float_sdna(prop, NULL, "sculpt_paint_unified_alpha");
- RNA_def_property_float_default(prop, 0.5f);
- RNA_def_property_range(prop, 0.0f, 10.0f);
- RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.001, 0.001);
- RNA_def_property_ui_text(prop, "Sculpt/Paint Unified Strength", "Unified power of effect of brushes when applied");
-
/* duplication linking */
- prop= RNA_def_property(srna, "duplicate_mesh", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_duplicate_mesh", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dupflag", USER_DUP_MESH);
RNA_def_property_ui_text(prop, "Duplicate Mesh", "Causes mesh data to be duplicated with the object");
- prop= RNA_def_property(srna, "duplicate_surface", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_duplicate_surface", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dupflag", USER_DUP_SURF);
RNA_def_property_ui_text(prop, "Duplicate Surface", "Causes surface data to be duplicated with the object");
- prop= RNA_def_property(srna, "duplicate_curve", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_duplicate_curve", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dupflag", USER_DUP_CURVE);
RNA_def_property_ui_text(prop, "Duplicate Curve", "Causes curve data to be duplicated with the object");
- prop= RNA_def_property(srna, "duplicate_text", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_duplicate_text", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dupflag", USER_DUP_FONT);
RNA_def_property_ui_text(prop, "Duplicate Text", "Causes text data to be duplicated with the object");
- prop= RNA_def_property(srna, "duplicate_metaball", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_duplicate_metaball", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dupflag", USER_DUP_MBALL);
RNA_def_property_ui_text(prop, "Duplicate Metaball", "Causes metaball data to be duplicated with the object");
- prop= RNA_def_property(srna, "duplicate_armature", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_duplicate_armature", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dupflag", USER_DUP_ARM);
RNA_def_property_ui_text(prop, "Duplicate Armature", "Causes armature data to be duplicated with the object");
- prop= RNA_def_property(srna, "duplicate_lamp", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_duplicate_lamp", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dupflag", USER_DUP_LAMP);
RNA_def_property_ui_text(prop, "Duplicate Lamp", "Causes lamp data to be duplicated with the object");
- prop= RNA_def_property(srna, "duplicate_material", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_duplicate_material", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dupflag", USER_DUP_MAT);
RNA_def_property_ui_text(prop, "Duplicate Material", "Causes material data to be duplicated with the object");
- prop= RNA_def_property(srna, "duplicate_texture", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_duplicate_texture", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dupflag", USER_DUP_TEX);
RNA_def_property_ui_text(prop, "Duplicate Texture", "Causes texture data to be duplicated with the object");
// xxx
- prop= RNA_def_property(srna, "duplicate_fcurve", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_duplicate_fcurve", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dupflag", USER_DUP_IPO);
RNA_def_property_ui_text(prop, "Duplicate F-Curve", "Causes F-curve data to be duplicated with the object");
// xxx
- prop= RNA_def_property(srna, "duplicate_action", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_duplicate_action", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dupflag", USER_DUP_ACT);
RNA_def_property_ui_text(prop, "Duplicate Action", "Causes actions to be duplicated with the object");
- prop= RNA_def_property(srna, "duplicate_particle", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_duplicate_particle", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dupflag", USER_DUP_PSYS);
RNA_def_property_ui_text(prop, "Duplicate Particle", "Causes particle systems to be duplicated with the object");
}
@@ -2412,7 +2370,7 @@ static void rna_def_userdef_system(BlenderRNA *brna)
/* Language */
- prop= RNA_def_property(srna, "international_fonts", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_international_fonts", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "transopts", USER_DOTRANSLATE);
RNA_def_property_ui_text(prop, "International Fonts", "Use international fonts");
RNA_def_property_update(prop, 0, "rna_userdef_update");
@@ -2435,17 +2393,17 @@ static void rna_def_userdef_system(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Language", "Language use for translation");
RNA_def_property_update(prop, 0, "rna_userdef_update");
- prop= RNA_def_property(srna, "translate_tooltips", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_translate_tooltips", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "transopts", USER_TR_TOOLTIPS);
RNA_def_property_ui_text(prop, "Translate Tooltips", "Translate Tooltips");
RNA_def_property_update(prop, 0, "rna_userdef_update");
- prop= RNA_def_property(srna, "translate_buttons", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_translate_buttons", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "transopts", USER_TR_BUTTONS);
RNA_def_property_ui_text(prop, "Translate Buttons", "Translate button labels");
RNA_def_property_update(prop, 0, "rna_userdef_update");
- prop= RNA_def_property(srna, "translate_toolbox", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_translate_toolbox", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "transopts", USER_TR_MENUS);
RNA_def_property_ui_text(prop, "Translate Toolbox", "Translate toolbox menu");
RNA_def_property_update(prop, 0, "rna_userdef_update");
@@ -2479,16 +2437,16 @@ static void rna_def_userdef_system(BlenderRNA *brna)
RNA_def_property_enum_sdna(prop, NULL, "color_picker_type");
RNA_def_property_ui_text(prop, "Color Picker Type", "Different styles of displaying the color picker widget");
- prop= RNA_def_property(srna, "enable_all_codecs", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_preview_images", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_ALLWINCODECS);
RNA_def_property_ui_text(prop, "Enable All Codecs", "Enables automatic saving of preview images in the .blend file (Windows only)");
- prop= RNA_def_property(srna, "auto_execute_scripts", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_scripts_auto_execute", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", USER_SCRIPT_AUTOEXEC_DISABLE);
RNA_def_property_ui_text(prop, "Auto Run Python Scripts", "Allow any .blend file to run scripts automatically (unsafe with blend files from an untrusted source)");
RNA_def_property_update(prop, 0, "rna_userdef_script_autoexec_update");
- prop= RNA_def_property(srna, "tabs_as_spaces", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_tabs_as_spaces", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", USER_TXT_TABSTOSPACES_DISABLE);
RNA_def_property_ui_text(prop, "Tabs as Spaces", "Automatically converts all new tabs into spaces for new and loaded text files");
@@ -2501,13 +2459,14 @@ static void rna_def_userdef_system(BlenderRNA *brna)
RNA_def_property_int_sdna(prop, NULL, "memcachelimit");
RNA_def_property_range(prop, 0, (sizeof(void *) ==8)? 1024*16: 1024); /* 32 bit 2 GB, 64 bit 16 GB */
RNA_def_property_ui_text(prop, "Memory Cache Limit", "Memory cache limit in sequencer (megabytes)");
+ RNA_def_property_update(prop, 0, "rna_Userdef_memcache_update");
prop= RNA_def_property(srna, "frame_server_port", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "frameserverport");
RNA_def_property_range(prop, 0, 32727);
RNA_def_property_ui_text(prop, "Frame Server Port", "Frameserver Port for Frameserver Rendering");
- prop= RNA_def_property(srna, "clip_alpha", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "gl_clip_alpha", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "glalphaclip");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Clip Alpha", "Clip alpha below this threshold in the 3D textured view");
@@ -2518,7 +2477,7 @@ static void rna_def_userdef_system(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Mipmaps", "Scale textures for the 3D View (looks nicer but uses more memory and slows image reloading)");
RNA_def_property_update(prop, 0, "rna_userdef_mipmap_update");
- prop= RNA_def_property(srna, "use_vbos", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_vertex_buffer_objects", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "gameflags", USER_DISABLE_VBO);
RNA_def_property_ui_text(prop, "VBOs", "Use Vertex Buffer Objects (or Vertex Arrays, if unsupported) for viewport rendering");
@@ -2636,26 +2595,26 @@ static void rna_def_userdef_input(BlenderRNA *brna)
RNA_def_property_enum_funcs(prop, NULL, "rna_userdef_select_mouse_set", NULL);
RNA_def_property_ui_text(prop, "Select Mouse", "The mouse button used for selection");
- prop= RNA_def_property(srna, "zoom_style", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "view_zoom_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "viewzoom");
RNA_def_property_enum_items(prop, view_zoom_styles);
RNA_def_property_ui_text(prop, "Zoom Style", "Which style to use for viewport scaling");
- prop= RNA_def_property(srna, "zoom_axis", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "view_zoom_axis", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "uiflag");
RNA_def_property_enum_items(prop, view_zoom_axes);
RNA_def_property_ui_text(prop, "Zoom Axis", "Axis of mouse movement to zoom in or out on");
- prop= RNA_def_property(srna, "invert_zoom_direction", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_mouse_wheel_zoom", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_ZOOM_INVERT);
RNA_def_property_ui_text(prop, "Invert Zoom Direction", "Invert the axis of mouse movement for zooming");
- prop= RNA_def_property(srna, "view_rotation", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "view_rotate_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
RNA_def_property_enum_items(prop, view_rotation_items);
RNA_def_property_ui_text(prop, "View Rotation", "Rotation style in the viewport");
- prop= RNA_def_property(srna, "continuous_mouse", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_mouse_continuous", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_CONTINUOUS_MOUSE);
RNA_def_property_ui_text(prop, "Continuous Grab", "Allow moving the mouse outside the view on some manipulations (transform, ui control drag)");
@@ -2669,19 +2628,33 @@ static void rna_def_userdef_input(BlenderRNA *brna)
RNA_def_property_range(prop, 0, 200);
RNA_def_property_ui_text(prop, "NDof Rotation Speed", "The overall rotation speed of an NDOF device, as percent of standard");
- prop= RNA_def_property(srna, "double_click_time", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "mouse_double_click_time", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "dbl_click_time");
RNA_def_property_range(prop, 1, 1000);
RNA_def_property_ui_text(prop, "Double Click Timeout", "The time (in ms) for a double click");
- prop= RNA_def_property(srna, "emulate_3_button_mouse", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_mouse_emulate_3_button", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_TWOBUTTONMOUSE);
RNA_def_property_ui_text(prop, "Emulate 3 Button Mouse", "Emulates Middle Mouse with Alt+LeftMouse (doesn't work with Left Mouse Select option)");
- prop= RNA_def_property(srna, "emulate_numpad", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_emulate_numpad", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_NONUMPAD);
RNA_def_property_ui_text(prop, "Emulate Numpad", "Causes the 1 to 0 keys to act as the numpad (useful for laptops)");
+ /* middle mouse button */
+ prop= RNA_def_property(srna, "use_mouse_mmb_paste", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_MMB_PASTE);
+ RNA_def_property_ui_text(prop, "Middle Mouse Paste", "In text window, paste with middle mouse button instead of panning");
+
+ prop= RNA_def_property(srna, "invert_zoom_wheel", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_WHEELZOOMDIR);
+ RNA_def_property_ui_text(prop, "Wheel Invert Zoom", "Swap the Mouse Wheel zoom direction");
+
+ prop= RNA_def_property(srna, "wheel_scroll_lines", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "wheellinescroll");
+ RNA_def_property_range(prop, 0, 32);
+ RNA_def_property_ui_text(prop, "Wheel Scroll Lines", "The number of lines scrolled at a time with the mouse wheel");
+
/* U.keymaps - custom keymaps that have been edited from default configs */
prop= RNA_def_property(srna, "edited_keymaps", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "keymaps", NULL);
@@ -2709,11 +2682,11 @@ static void rna_def_userdef_filepaths(BlenderRNA *brna)
RNA_def_struct_nested(brna, srna, "UserPreferences");
RNA_def_struct_ui_text(srna, "File Paths", "Default paths for external files");
- prop= RNA_def_property(srna, "hide_dot_files_datablocks", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_hidden_files_datablocks", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_HIDE_DOT);
RNA_def_property_ui_text(prop, "Hide Dot Files/Datablocks", "Hide files/datablocks that start with a dot(.*)");
- prop= RNA_def_property(srna, "filter_file_extensions", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_filter_files", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_FILTERFILEEXTS);
RNA_def_property_ui_text(prop, "Filter File Extensions", "Display only files with extensions in the image select window");
@@ -2721,19 +2694,19 @@ static void rna_def_userdef_filepaths(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_RELPATHS);
RNA_def_property_ui_text(prop, "Relative Paths", "Default relative path option for the file selector");
- prop= RNA_def_property(srna, "compress_file", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_file_compression", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_FILECOMPRESS);
RNA_def_property_ui_text(prop, "Compress File", "Enable file compression when saving .blend files");
- prop= RNA_def_property(srna, "load_ui", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_load_ui", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", USER_FILENOUI);
RNA_def_property_ui_text(prop, "Load UI", "Load user interface setup when loading .blend files");
- prop= RNA_def_property(srna, "fonts_directory", PROP_STRING, PROP_DIRPATH);
+ prop= RNA_def_property(srna, "font_directory", PROP_STRING, PROP_DIRPATH);
RNA_def_property_string_sdna(prop, NULL, "fontdir");
RNA_def_property_ui_text(prop, "Fonts Directory", "The default directory to search for loading fonts");
- prop= RNA_def_property(srna, "textures_directory", PROP_STRING, PROP_DIRPATH);
+ prop= RNA_def_property(srna, "texture_directory", PROP_STRING, PROP_DIRPATH);
RNA_def_property_string_sdna(prop, NULL, "textudir");
RNA_def_property_ui_text(prop, "Textures Directory", "The default directory to search for textures");
@@ -2749,11 +2722,11 @@ static void rna_def_userdef_filepaths(BlenderRNA *brna)
RNA_def_property_string_sdna(prop, NULL, "renderdir");
RNA_def_property_ui_text(prop, "Render Output Directory", "The default directory for rendering output");
- prop= RNA_def_property(srna, "python_scripts_directory", PROP_STRING, PROP_DIRPATH);
+ prop= RNA_def_property(srna, "script_directory", PROP_STRING, PROP_DIRPATH);
RNA_def_property_string_sdna(prop, NULL, "pythondir");
RNA_def_property_ui_text(prop, "Python Scripts Directory", "The default directory to search for Python scripts (resets python module search path: sys.path)");
- prop= RNA_def_property(srna, "sounds_directory", PROP_STRING, PROP_DIRPATH);
+ prop= RNA_def_property(srna, "sound_directory", PROP_STRING, PROP_DIRPATH);
RNA_def_property_string_sdna(prop, NULL, "sounddir");
RNA_def_property_ui_text(prop, "Sounds Directory", "The default directory to search for sounds");
@@ -2783,7 +2756,7 @@ static void rna_def_userdef_filepaths(BlenderRNA *brna)
RNA_def_property_range(prop, 0, 32);
RNA_def_property_ui_text(prop, "Save Versions", "The number of old versions to maintain in the current directory, when manually saving");
- prop= RNA_def_property(srna, "auto_save_temporary_files", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_save_temporary_files", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_AUTOSAVE);
RNA_def_property_ui_text(prop, "Auto Save Temporary Files", "Automatic saving of temporary files");
RNA_def_property_update(prop, 0, "rna_userdef_autosave_update");
@@ -2798,7 +2771,7 @@ static void rna_def_userdef_filepaths(BlenderRNA *brna)
RNA_def_property_range(prop, 0, 30);
RNA_def_property_ui_text(prop, "Recent Files", "Maximum number of recently opened files to remember");
- prop= RNA_def_property(srna, "save_preview_images", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_save_preview_images", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_SAVE_PREVIEWS);
RNA_def_property_ui_text(prop, "Save Preview Images", "Enables automatic saving of preview images in the .blend file");
}
@@ -2860,7 +2833,7 @@ void RNA_def_userdef(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "Theme");
RNA_def_property_ui_text(prop, "Themes", "");
- prop= RNA_def_property(srna, "uistyles", PROP_COLLECTION, PROP_NONE);
+ prop= RNA_def_property(srna, "ui_styles", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "uistyles", NULL);
RNA_def_property_struct_type(prop, "ThemeStyle");
RNA_def_property_ui_text(prop, "Styles", "");
@@ -2876,31 +2849,31 @@ void RNA_def_userdef(BlenderRNA *brna)
prop= RNA_def_property(srna, "view", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "UserPreferencesView");
- RNA_def_property_pointer_funcs(prop, "rna_UserDef_view_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_UserDef_view_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "View & Controls", "Preferences related to viewing data");
prop= RNA_def_property(srna, "edit", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "UserPreferencesEdit");
- RNA_def_property_pointer_funcs(prop, "rna_UserDef_edit_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_UserDef_edit_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Edit Methods", "Settings for interacting with Blender data");
prop= RNA_def_property(srna, "inputs", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "UserPreferencesInput");
- RNA_def_property_pointer_funcs(prop, "rna_UserDef_input_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_UserDef_input_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Inputs", "Settings for input devices");
prop= RNA_def_property(srna, "filepaths", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "UserPreferencesFilePaths");
- RNA_def_property_pointer_funcs(prop, "rna_UserDef_filepaths_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_UserDef_filepaths_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "File Paths", "Default paths for external files");
prop= RNA_def_property(srna, "system", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "UserPreferencesSystem");
- RNA_def_property_pointer_funcs(prop, "rna_UserDef_system_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_UserDef_system_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "System & OpenGL", "Graphics driver and operating system settings");
rna_def_userdef_view(brna);
diff --git a/source/blender/makesrna/intern/rna_vfont.c b/source/blender/makesrna/intern/rna_vfont.c
index c19fbd7d5d3..41387e806b9 100644
--- a/source/blender/makesrna/intern/rna_vfont.c
+++ b/source/blender/makesrna/intern/rna_vfont.c
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * Contributor(s): Blender Foundation (2008), Juho Vepsäläinen
+ * Contributor(s): Blender Foundation (2008), Juho Vepsäläinen
*
* ***** END GPL LICENSE BLOCK *****
*/
diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c
index 1797df2abf0..67b8ca057c8 100644
--- a/source/blender/makesrna/intern/rna_wm.c
+++ b/source/blender/makesrna/intern/rna_wm.c
@@ -324,7 +324,7 @@ static StructRNA *rna_OperatorProperties_refine(PointerRNA *ptr)
return ptr->type;
}
-static IDProperty *rna_OperatorProperties_idproperties(PointerRNA *ptr, int create)
+static IDProperty *rna_OperatorProperties_idprops(PointerRNA *ptr, int create)
{
if(create && !ptr->data) {
IDPropertyTemplate val = {0};
@@ -361,7 +361,7 @@ static PointerRNA rna_Operator_properties_get(PointerRNA *ptr)
static PointerRNA rna_OperatorTypeMacro_properties_get(PointerRNA *ptr)
{
wmOperatorTypeMacro *otmacro= (wmOperatorTypeMacro*)ptr->data;
- wmOperatorType *ot = WM_operatortype_exists(otmacro->idname);
+ wmOperatorType *ot = WM_operatortype_find(otmacro->idname, TRUE);
return rna_pointer_inherit_refine(ptr, ot->srna, otmacro->properties);
}
@@ -796,7 +796,7 @@ static StructRNA *rna_Operator_register(const bContext *C, ReportList *reports,
/* check if we have registered this operator type before, and remove it */
{
- wmOperatorType *ot= WM_operatortype_exists(dummyot.idname);
+ wmOperatorType *ot= WM_operatortype_find(dummyot.idname, TRUE);
if(ot && ot->ext.srna)
rna_Operator_unregister(C, ot->ext.srna);
}
@@ -865,7 +865,7 @@ static StructRNA *rna_MacroOperator_register(const bContext *C, ReportList *repo
/* check if we have registered this operator type before, and remove it */
{
- wmOperatorType *ot= WM_operatortype_exists(dummyot.idname);
+ wmOperatorType *ot= WM_operatortype_find(dummyot.idname, TRUE);
if(ot && ot->ext.srna)
rna_Operator_unregister(C, ot->ext.srna);
}
@@ -887,7 +887,7 @@ static StructRNA *rna_MacroOperator_register(const bContext *C, ReportList *repo
return dummyot.ext.srna;
}
-#endif
+#endif /* DISABLE_PYTHON */
static StructRNA* rna_Operator_refine(PointerRNA *opr)
{
@@ -961,7 +961,7 @@ static wmKeyMapItem *rna_KeyMap_add_modal_item(wmKeyMap *km, bContext *C, Report
return WM_modalkeymap_add_item(km, type, value, modifier, keymodifier, propvalue);
}
-#else
+#else /* RNA_RUNTIME */
static void rna_def_operator(BlenderRNA *brna)
{
@@ -980,13 +980,12 @@ static void rna_def_operator(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_string_funcs(prop, "rna_Operator_name_get", "rna_Operator_name_length", NULL);
RNA_def_property_ui_text(prop, "Name", "");
- RNA_def_struct_name_property(srna, prop);
prop= RNA_def_property(srna, "properties", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "OperatorProperties");
RNA_def_property_ui_text(prop, "Properties", "");
- RNA_def_property_pointer_funcs(prop, "rna_Operator_properties_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Operator_properties_get", NULL, NULL, NULL);
prop= RNA_def_property(srna, "has_reports", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* this is 'virtual' property */
@@ -1001,6 +1000,7 @@ static void rna_def_operator(BlenderRNA *brna)
RNA_def_property_string_sdna(prop, NULL, "type->idname");
RNA_def_property_string_maxlength(prop, OP_MAX_TYPENAME); /* else it uses the pointer size! */
RNA_def_property_flag(prop, PROP_REGISTER);
+ RNA_def_struct_name_property(srna, prop);
prop= RNA_def_property(srna, "bl_label", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "type->name");
@@ -1023,7 +1023,7 @@ static void rna_def_operator(BlenderRNA *brna)
srna= RNA_def_struct(brna, "OperatorProperties", NULL);
RNA_def_struct_ui_text(srna, "Operator Properties", "Input properties of an Operator");
RNA_def_struct_refine_func(srna, "rna_OperatorProperties_refine");
- RNA_def_struct_idproperties_func(srna, "rna_OperatorProperties_idproperties");
+ RNA_def_struct_idprops_func(srna, "rna_OperatorProperties_idprops");
}
static void rna_def_macro_operator(BlenderRNA *brna)
@@ -1043,19 +1043,19 @@ static void rna_def_macro_operator(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_string_funcs(prop, "rna_Operator_name_get", "rna_Operator_name_length", NULL);
RNA_def_property_ui_text(prop, "Name", "");
- RNA_def_struct_name_property(srna, prop);
prop= RNA_def_property(srna, "properties", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "OperatorProperties");
RNA_def_property_ui_text(prop, "Properties", "");
- RNA_def_property_pointer_funcs(prop, "rna_Operator_properties_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_Operator_properties_get", NULL, NULL, NULL);
/* Registration */
prop= RNA_def_property(srna, "bl_idname", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "type->idname");
RNA_def_property_string_maxlength(prop, OP_MAX_TYPENAME); /* else it uses the pointer size! */
RNA_def_property_flag(prop, PROP_REGISTER);
+ RNA_def_struct_name_property(srna, prop);
prop= RNA_def_property(srna, "bl_label", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "type->name");
@@ -1095,7 +1095,7 @@ static void rna_def_operator_type_macro(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "OperatorProperties");
RNA_def_property_ui_text(prop, "Properties", "");
- RNA_def_property_pointer_funcs(prop, "rna_OperatorTypeMacro_properties_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_OperatorTypeMacro_properties_get", NULL, NULL, NULL);
}
static void rna_def_operator_utils(BlenderRNA *brna)
@@ -1232,7 +1232,7 @@ static void rna_def_window(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "Screen");
RNA_def_property_ui_text(prop, "Screen", "Active screen showing in the window");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_pointer_funcs(prop, NULL, "rna_Window_screen_set", NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_Window_screen_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, 0, "rna_Window_screen_update");
}
@@ -1262,7 +1262,7 @@ static void rna_def_windowmanager(BlenderRNA *brna)
prop= RNA_def_property(srna, "active_keyconfig", PROP_POINTER, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "KeyConfig");
RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_pointer_funcs(prop, "rna_WindowManager_active_keyconfig_get", "rna_WindowManager_active_keyconfig_set", 0);
+ RNA_def_property_pointer_funcs(prop, "rna_WindowManager_active_keyconfig_get", "rna_WindowManager_active_keyconfig_set", 0, NULL);
RNA_def_property_ui_text(prop, "Active Key Configuration", "");
prop= RNA_def_property(srna, "default_keyconfig", PROP_POINTER, PROP_NEVER_NULL);
@@ -1352,7 +1352,7 @@ static void rna_def_keyconfig(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "KeyMap");
RNA_def_property_ui_text(prop, "Key Maps", "Key maps configured as part of this configuration");
- prop= RNA_def_property(srna, "user_defined", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_user_defined", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", KEYCONF_USER);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "User Defined", "Indicates that a keyconfig was defined by the user");
@@ -1387,21 +1387,21 @@ static void rna_def_keyconfig(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Items", "Items in the keymap, linking an operator to an input event");
rna_def_keymap_items(brna, prop);
- prop= RNA_def_property(srna, "user_defined", PROP_BOOLEAN, PROP_NEVER_NULL);
+ prop= RNA_def_property(srna, "is_user_defined", PROP_BOOLEAN, PROP_NEVER_NULL);
RNA_def_property_boolean_sdna(prop, NULL, "flag", KEYMAP_USER);
RNA_def_property_ui_text(prop, "User Defined", "Keymap is defined by the user");
- prop= RNA_def_property(srna, "modal", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_modal", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", KEYMAP_MODAL);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Modal Keymap", "Indicates that a keymap is used for translate modal events for an operator");
- prop= RNA_def_property(srna, "items_expanded", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_expanded_items", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", KEYMAP_EXPANDED);
RNA_def_property_ui_text(prop, "Items Expanded", "Expanded in the user interface");
RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
- prop= RNA_def_property(srna, "children_expanded", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_expanded_children", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", KEYMAP_CHILDREN_EXPANDED);
RNA_def_property_ui_text(prop, "Children Expanded", "Children expanded in the user interface");
RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
@@ -1427,7 +1427,7 @@ static void rna_def_keyconfig(BlenderRNA *brna)
prop= RNA_def_property(srna, "properties", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "OperatorProperties");
- RNA_def_property_pointer_funcs(prop, "rna_KeyMapItem_properties_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_KeyMapItem_properties_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Properties", "Properties to set when the operator is called");
prop= RNA_def_property(srna, "map_type", PROP_ENUM, PROP_NONE);
@@ -1486,7 +1486,7 @@ static void rna_def_keyconfig(BlenderRNA *brna)
RNA_def_property_enum_items(prop, event_type_items);
RNA_def_property_ui_text(prop, "Key Modifier", "Regular key pressed as a modifier");
- prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", KMI_EXPANDED);
RNA_def_property_ui_text(prop, "Expanded", "Show key map event and property details in the user interface");
RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
@@ -1518,5 +1518,5 @@ void RNA_def_wm(BlenderRNA *brna)
rna_def_keyconfig(brna);
}
-#endif
+#endif /* RNA_RUNTIME */
diff --git a/source/blender/makesrna/intern/rna_wm_api.c b/source/blender/makesrna/intern/rna_wm_api.c
index b48f314588e..a4999e71fcf 100644
--- a/source/blender/makesrna/intern/rna_wm_api.c
+++ b/source/blender/makesrna/intern/rna_wm_api.c
@@ -186,7 +186,7 @@ void RNA_api_operator(StructRNA *srna)
/* poll */
func= RNA_def_function(srna, "poll", NULL);
RNA_def_function_ui_description(func, "Test if the operator can be called or not.");
- RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
+ RNA_def_function_flag(func, FUNC_NO_SELF|FUNC_REGISTER_OPTIONAL);
RNA_def_function_return(func, RNA_def_boolean(func, "visible", 1, "", ""));
RNA_def_pointer(func, "context", "Context", "", "");
@@ -246,7 +246,7 @@ void RNA_api_macro(StructRNA *srna)
/* poll */
func= RNA_def_function(srna, "poll", NULL);
RNA_def_function_ui_description(func, "Test if the operator can be called or not.");
- RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
+ RNA_def_function_flag(func, FUNC_NO_SELF|FUNC_REGISTER_OPTIONAL);
RNA_def_function_return(func, RNA_def_boolean(func, "visible", 1, "", ""));
RNA_def_pointer(func, "context", "Context", "", "");
diff --git a/source/blender/makesrna/intern/rna_world.c b/source/blender/makesrna/intern/rna_world.c
index 8d5e2291724..907042e7453 100644
--- a/source/blender/makesrna/intern/rna_world.c
+++ b/source/blender/makesrna/intern/rna_world.c
@@ -33,6 +33,8 @@
#include "DNA_texture_types.h"
#include "DNA_world_types.h"
+#include "WM_types.h"
+
#ifdef RNA_RUNTIME
#include "MEM_guardedalloc.h"
@@ -42,7 +44,6 @@
#include "BKE_texture.h"
#include "WM_api.h"
-#include "WM_types.h"
static PointerRNA rna_World_lighting_get(PointerRNA *ptr)
{
@@ -118,22 +119,22 @@ static void rna_def_world_mtex(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "World Texture Slot", "Texture slot for textures in a World datablock");
/* map to */
- prop= RNA_def_property(srna, "map_blend", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_blend", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_BLEND);
RNA_def_property_ui_text(prop, "Blend", "Affect the color progression of the background");
RNA_def_property_update(prop, 0, "rna_World_update");
- prop= RNA_def_property(srna, "map_horizon", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_horizon", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_HORIZ);
RNA_def_property_ui_text(prop, "Horizon", "Affect the color of the horizon");
RNA_def_property_update(prop, 0, "rna_World_update");
- prop= RNA_def_property(srna, "map_zenith_up", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_zenith_up", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_ZENUP);
RNA_def_property_ui_text(prop, "Zenith Up", "Affect the color of the zenith above");
RNA_def_property_update(prop, 0, "rna_World_update");
- prop= RNA_def_property(srna, "map_zenith_down", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_zenith_down", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_ZENDOWN);
RNA_def_property_ui_text(prop, "Zenith Down", "Affect the color of the zenith below");
RNA_def_property_update(prop, 0, "rna_World_update");
@@ -143,7 +144,7 @@ static void rna_def_world_mtex(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_MIST);
RNA_def_property_ui_text(prop, "Mist", "Causes the texture to affect the intensity of the mist");*/
- prop= RNA_def_property(srna, "texture_coordinates", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "texture_coords", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "texco");
RNA_def_property_enum_items(prop, texco_items);
RNA_def_property_ui_text(prop, "Texture Coordinates", "Texture coordinates used to map the texture onto the background");
@@ -226,21 +227,21 @@ static void rna_def_lighting(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Factor", "Factor for ambient occlusion blending");
RNA_def_property_update(prop, 0, "rna_World_update");
- prop= RNA_def_property(srna, "ao_blend_mode", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "ao_blend_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "aomix");
RNA_def_property_enum_items(prop, blend_mode_items);
RNA_def_property_ui_text(prop, "Blend Mode", "Defines how AO mixes with material shading");
RNA_def_property_update(prop, 0, "rna_World_update");
/* environment lighting */
- prop= RNA_def_property(srna, "use_environment_lighting", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_environment_light", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", WO_ENV_LIGHT);
RNA_def_property_ui_text(prop, "Use Environment Lighting", "Add light coming from the environment");
RNA_def_property_update(prop, 0, "rna_World_update");
prop= RNA_def_property(srna, "environment_energy", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "ao_env_energy");
- RNA_def_property_ui_range(prop, 0, FLT_MAX, 0.1, 2);
+ RNA_def_property_ui_range(prop, 0, FLT_MAX, 1, 3);
RNA_def_property_ui_text(prop, "Environment Color", "Defines the strength of environment light");
RNA_def_property_update(prop, 0, "rna_World_update");
@@ -251,7 +252,7 @@ static void rna_def_lighting(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_World_update");
/* indirect lighting */
- prop= RNA_def_property(srna, "use_indirect_lighting", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_indirect_light", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", WO_INDIRECT_LIGHT);
RNA_def_property_ui_text(prop, "Use Indirect Lighting", "Add indirect light bouncing of surrounding objects");
RNA_def_property_update(prop, 0, "rna_World_update");
@@ -310,7 +311,7 @@ static void rna_def_lighting(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Adapt To Speed", "Use the speed vector pass to reduce AO samples in fast moving pixels. Higher values result in more aggressive sample reduction. Requires Vec pass enabled (for Raytrace Adaptive QMC)");
RNA_def_property_update(prop, 0, "rna_World_update");
- prop= RNA_def_property(srna, "error_tolerance", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "error_threshold", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "ao_approx_error");
RNA_def_property_range(prop, 0.0001, 10);
RNA_def_property_ui_text(prop, "Error Tolerance", "Low values are slower and higher quality (for Approximate)");
@@ -323,12 +324,12 @@ static void rna_def_lighting(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Correction", "Ad-hoc correction for over-occlusion due to the approximation (for Approximate)");
RNA_def_property_update(prop, 0, "rna_World_update");
- prop= RNA_def_property(srna, "falloff", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_falloff", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "aomode", WO_AODIST);
RNA_def_property_ui_text(prop, "Falloff", "");
RNA_def_property_update(prop, 0, "rna_World_update");
- prop= RNA_def_property(srna, "pixel_cache", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cache", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "aomode", WO_AOCACHE);
RNA_def_property_ui_text(prop, "Pixel Cache", "Cache AO results in pixels and interpolate over neighbouring pixels for speedup (for Approximate)");
RNA_def_property_update(prop, 0, "rna_World_update");
@@ -421,7 +422,7 @@ static void rna_def_world_stars(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Size", "Average screen dimension of stars");
RNA_def_property_update(prop, 0, "rna_World_update");
- prop= RNA_def_property(srna, "min_distance", PROP_FLOAT, PROP_DISTANCE);
+ prop= RNA_def_property(srna, "distance_min", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "starmindist");
RNA_def_property_range(prop, 0, 1000);
RNA_def_property_ui_text(prop, "Minimum Distance", "Minimum distance to the camera for stars");
@@ -433,7 +434,7 @@ static void rna_def_world_stars(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Average Separation", "Average distance between any two stars");
RNA_def_property_update(prop, 0, "rna_World_draw_update");
- prop= RNA_def_property(srna, "color_randomization", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "color_random", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "starcolnoise");
RNA_def_property_range(prop, 0, 1);
RNA_def_property_ui_text(prop, "Color Randomization", "Randomize star colors");
@@ -476,7 +477,11 @@ void RNA_def_world(BlenderRNA *brna)
RNA_def_property_float_sdna(prop, NULL, "horr");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Horizon Color", "Color at the horizon");
- RNA_def_property_update(prop, 0, "rna_World_update");
+ /* RNA_def_property_update(prop, 0, "rna_World_update"); */
+ /* render-only uses this, the notifier could be made to be more spesific */
+ RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, "rna_World_update");
+
+
prop= RNA_def_property(srna, "zenith_color", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "zenr");
@@ -497,45 +502,45 @@ void RNA_def_world(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Exposure", "Amount of exponential color correction for light");
RNA_def_property_update(prop, 0, "rna_World_update");
- prop= RNA_def_property(srna, "range", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "color_range", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "range");
RNA_def_property_range(prop, 0.2, 5.0);
RNA_def_property_ui_text(prop, "Range", "The color range that will be mapped to 0-1");
RNA_def_property_update(prop, 0, "rna_World_update");
/* sky type */
- prop= RNA_def_property(srna, "blend_sky", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_sky_blend", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "skytype", WO_SKYBLEND);
RNA_def_property_ui_text(prop, "Blend Sky", "Render background with natural progression from horizon to zenith");
RNA_def_property_update(prop, 0, "rna_World_update");
- prop= RNA_def_property(srna, "paper_sky", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_sky_paper", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "skytype", WO_SKYPAPER);
RNA_def_property_ui_text(prop, "Paper Sky", "Flatten blend or texture coordinates");
RNA_def_property_update(prop, 0, "rna_World_update");
- prop= RNA_def_property(srna, "real_sky", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_sky_real", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "skytype", WO_SKYREAL);
RNA_def_property_ui_text(prop, "Real Sky", "Render background with a real horizon, relative to the camera angle");
RNA_def_property_update(prop, 0, "rna_World_update");
/* nested structs */
- prop= RNA_def_property(srna, "lighting", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "light_settings", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "WorldLighting");
- RNA_def_property_pointer_funcs(prop, "rna_World_lighting_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_World_lighting_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Lighting", "World lighting settings");
- prop= RNA_def_property(srna, "mist", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "mist_settings", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "WorldMistSettings");
- RNA_def_property_pointer_funcs(prop, "rna_World_mist_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_World_mist_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Mist", "World mist settings");
- prop= RNA_def_property(srna, "stars", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "star_settings", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "WorldStarsSettings");
- RNA_def_property_pointer_funcs(prop, "rna_World_stars_get", NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_World_stars_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Stars", "World stars settings");
rna_def_lighting(brna);
diff --git a/source/blender/makesrna/rna_cleanup/rna_booleans.txt b/source/blender/makesrna/rna_cleanup/rna_booleans.txt
deleted file mode 100644
index 614db736d64..00000000000
--- a/source/blender/makesrna/rna_cleanup/rna_booleans.txt
+++ /dev/null
@@ -1,1371 +0,0 @@
-ActionActuator.continue_last_frame -> use_continue_last_frame: boolean Restore last frame when switching on/off, otherwise play from the start each time
-ActionGroup.expanded -> show_expanded: boolean Action Group is expanded
-ActionGroup.locked -> lock: boolean Action Group is locked
-ActionGroup.selected -> select: boolean Action Group is selected
-Actuator.expanded -> show_expanded: boolean Set actuator expanded in the user interface
-AnimData.nla_enabled -> use_nla: boolean NLA stack is evaluated when evaluating this block
-AnimVizMotionPaths.highlight_keyframes -> show_keyframe_highlight: boolean Emphasize position of keyframes on Motion Paths
-AnimVizMotionPaths.search_all_action_keyframes -> show_keyframe_action_all: boolean For bone motion paths, search whole Action for keyframes instead of in group with matching name only (is slower)
-AnimVizMotionPaths.show_frame_numbers -> show_frame_numbers: boolean Show frame numbers on Motion Paths
-AnimVizMotionPaths.show_keyframe_numbers -> show_keyframe_numbers: boolean Show frame numbers of Keyframes on Motion Paths
-AnimVizOnionSkinning.only_selected -> show_only_selected: boolean For Pose-Mode drawing, only draw ghosts for selected bones
-Area.show_menus -> show_menus: boolean Show menus in the header
-AreaLamp.dither -> use_dither: boolean Use 2x2 dithering for sampling (Constant Jittered sampling)
-AreaLamp.jitter -> use_jitter: boolean Use noise for sampling (Constant Jittered sampling)
-AreaLamp.only_shadow -> use_only_shadow: boolean Causes light to cast shadows only without illuminating objects
-AreaLamp.shadow_layer -> use_shadow_layer: boolean Causes only objects on the same layer to cast shadows
-AreaLamp.umbra -> use_umbra: boolean Emphasize parts that are fully shadowed (Constant Jittered sampling)
-Armature.auto_ik -> use_auto_ik: boolean Add temporaral IK constraints while grabbing bones in Pose Mode
-Armature.deform_envelope -> use_deform_envelopes: boolean Enable Bone Envelopes when defining deform
-Armature.deform_quaternion -> use_deform_preserve_volume: boolean Deform rotation interpolation with quaternions
-Armature.deform_vertexgroups -> use_deform_vertex_groups: boolean Enable Vertex Groups when defining deform
-Armature.delay_deform -> use_deform_delay: boolean Don't deform children when manipulating bones in Pose Mode
-Armature.draw_axes -> show_axes: boolean Draw bone axes
-Armature.draw_custom_bone_shapes -> show_bone_custom_shapes: boolean Draw bones with their custom shapes
-Armature.draw_group_colors -> show_group_colors: boolean Draw bone group colors
-Armature.draw_names -> show_names: boolean Draw bone names
-Armature.show_ghost_only_selected -> show_only_ghost_selected: boolean
-Armature.layer -> layer: boolean Armature layer visibility
-Armature.layer_protection -> layer_protected: boolean Protected layers in Proxy Instances are restored to Proxy settings on file reload and undo
-Armature.x_axis_mirror -> use_mirror_x: boolean Apply changes to matching bone on opposite side of X-Axis
-ArmatureModifier.invert -> invert_vertex_group: boolean Invert vertex group influence
-ArmatureModifier.multi_modifier -> use_multi_modifier: boolean Use same input as previous modifier, and mix results using overall vgroup
-ArmatureModifier.quaternion -> use_deform_preserve_volume: boolean Deform rotation interpolation with quaternions
-ArmatureModifier.use_deform_envelopes -> use_deform_envelopes: boolean
-ArmatureModifier.use_deform_vertex_groups -> use_deform_vertex_groups: boolean
-ArrayModifier.add_offset_object -> use_object_offset: boolean Add another object's transformation to the total offset
-ArrayModifier.constant_offset -> use_constant_offset: boolean Add a constant offset
-ArrayModifier.merge_adjacent_vertices -> use_merge_adjacent_vertices: boolean Merge vertices in adjacent duplicates
-ArrayModifier.merge_end_vertices -> use_merge_end_vertices: boolean Merge vertices in first and last duplicates
-ArrayModifier.relative_offset -> use_relative_offset: boolean Add an offset relative to the object's bounding box
-BackgroundImage.show_expanded -> show_expanded: boolean Show the expanded in the user interface
-BevelModifier.only_vertices -> use_only_vertices: boolean Bevel verts/corners, not edges
-BezierSplinePoint.hidden -> hide: boolean Visibility status
-BezierSplinePoint.selected_control_point -> select_control_point: boolean Control point selection status
-BezierSplinePoint.selected_handle1 -> select_left_handle: boolean Handle 1 selection status
-BezierSplinePoint.selected_handle2 -> select_right_handle: boolean Handle 2 selection status
-BoidRule.in_air -> use_in_air: boolean Use rule when boid is flying
-BoidRule.on_land -> use_on_land: boolean Use rule when boid is on land
-BoidRuleAvoid.predict -> use_predict: boolean Predict target movement
-BoidRuleAvoidCollision.boids -> use_avoid: boolean Avoid collision with other boids
-BoidRuleAvoidCollision.deflectors -> use_avoid_collision: boolean Avoid collision with deflector objects
-BoidRuleFollowLeader.line -> use_line: boolean Follow leader in a line
-BoidRuleGoal.predict -> use_predict: boolean Predict target movement
-BoidSettings.allow_climb -> use_climb: boolean Allow boids to climb goal objects
-BoidSettings.allow_flight -> use_flight: boolean Allow boids to move in air
-BoidSettings.allow_land -> use_land: boolean Allow boids to move on land
-Bone.connected -> use_connect: boolean, (read-only) When bone has a parent, bone's head is struck to the parent's tail
-Bone.cyclic_offset -> use_cyclic_offset: boolean When bone doesn't have a parent, it receives cyclic offset effects
-Bone.deform -> use_deform: boolean Bone does not deform any geometry
-Bone.draw_wire -> show_wire: boolean Bone is always drawn as Wireframe regardless of viewport draw mode. Useful for non-obstructive custom bone shapes
-Bone.hidden -> hide: boolean Bone is not visible when it is not in Edit Mode (i.e. in Object or Pose Modes)
-Bone.hinge -> use_hinge: boolean Bone inherits rotation or scale from parent bone
-Bone.inherit_scale -> use_inherit_scale: boolean Bone inherits scaling from parent bone
-Bone.layer -> layer: boolean Layers bone exists in
-Bone.local_location -> use_local_location: boolean Bone location is set in local space
-Bone.multiply_vertexgroup_with_envelope -> use_envelope_multiply: boolean When deforming bone, multiply effects of Vertex Group weights with Envelope influence
-Bone.restrict_select -> restrict_select: boolean Bone is able to be selected
-Bone.selected -> select: boolean
-BooleanProperty.default -> default: boolean, (read-only) Default value for this number
-BooleanProperty.default_array -> default_array: boolean, (read-only) Default value for this array
-Brush.use_accumulate -> use_accumulate: boolean Accumulate stroke dabs on top of each other
-Brush.use_airbrush -> use_airbrush: boolean Keep applying paint effect while holding mouse (spray)
-Brush.use_alpha -> use_alpha: boolean When this is disabled, lock alpha while painting
-Brush.use_anchor -> use_anchor: boolean Keep the brush anchored to the initial location
-Brush.use_jitter_pressure -> use_pressure_jitter: boolean Enable tablet pressure sensitivity for jitter
-Brush.use_persistent -> use_persistent: boolean Sculpts on a persistent layer of the mesh
-Brush.use_rake -> use_rake: boolean Rotate the brush texture to match the stroke direction
-Brush.use_size_pressure -> use_pressure_size: boolean Enable tablet pressure sensitivity for size
-Brush.use_smooth_stroke -> use_smooth_stroke: boolean Brush lags behind mouse and follows a smoother path
-Brush.use_space -> use_space: boolean Limit brush application to the distance specified by spacing
-Brush.use_spacing_pressure -> use_pressure_spacing: boolean Enable tablet pressure sensitivity for spacing
-Brush.use_strength_pressure -> use_pressure_strength: boolean Enable tablet pressure sensitivity for strength
-Brush.use_wrap -> use_wrap: boolean Enable torus wrapping while painting
-BuildModifier.randomize -> use_random_order: boolean Randomize the faces or edges during build
-Camera.panorama -> use_panorama: boolean Render the scene with a cylindrical camera for pseudo-fisheye lens effects
-Camera.show_limits -> show_limits: boolean Draw the clipping range and focus point on the camera
-Camera.show_mist -> show_mist: boolean Draw a line from the Camera to indicate the mist area
-Camera.show_name -> show_name: boolean Show the active Camera's name in Camera view
-Camera.show_passepartout -> show_passepartout: boolean Show a darkened overlay outside the image area in Camera view
-Camera.show_title_safe -> show_title_safe: boolean Show indicators for the title safe zone in Camera view
-CastModifier.from_radius -> use_radius_as_size: boolean Use radius as size of projection shape (0 = auto)
-CastModifier.use_transform -> use_transform: boolean Use object transform to control projection shape
-CastModifier.x -> use_x: boolean
-CastModifier.y -> use_y: boolean
-CastModifier.z -> use_z: boolean
-ChildOfConstraint.use_location_x -> use_location_x: boolean Use X Location of Parent
-ChildOfConstraint.use_location_y -> use_location_y: boolean Use Y Location of Parent
-ChildOfConstraint.use_location_z -> use_location_z: boolean Use Z Location of Parent
-ChildOfConstraint.use_rotation_x -> use_rotation_x: boolean Use X Rotation of Parent
-ChildOfConstraint.use_rotation_y -> use_rotation_y: boolean Use Y Rotation of Parent
-ChildOfConstraint.use_rotation_z -> use_rotation_z: boolean Use Z Rotation of Parent
-ChildOfConstraint.use_scale_x -> use_scale_x: boolean Use X Scale of Parent
-ChildOfConstraint.use_scale_y -> use_scale_y: boolean Use Y Scale of Parent
-ChildOfConstraint.use_scale_z -> use_scale_z: boolean Use Z Scale of Parent
-ClampToConstraint.cyclic -> use_cyclic: boolean Treat curve as cyclic curve (no clamping to curve bounding box
-ClothCollisionSettings.enable_collision -> use_collision: boolean Enable collisions with other objects
-ClothCollisionSettings.enable_self_collision -> use_self_collision: boolean Enable self collisions
-ClothSettings.pin_cloth -> use_pin_cloth: boolean Enable pinning of cloth vertices to other objects/positions
-ClothSettings.stiffness_scaling -> use_stiffness_scale: boolean If enabled, stiffness can be scaled along a weight painted vertex group
-CollisionSensor.collision_type -> use_material: boolean Use material instead of property
-CollisionSensor.pulse -> use_pulse: boolean Changes to the set of colliding objects generates pulse
-CollisionSettings.enabled -> use: boolean Enable this objects as a collider for physics systems
-CollisionSettings.kill_particles -> use_particle_kill: boolean Kill colliding particles
-CompositorNodeAlphaOver.convert_premul -> use_premultiply: boolean
-CompositorNodeBlur.bokeh -> use_bokeh: boolean
-CompositorNodeBlur.gamma -> use_gamma_correction: boolean
-CompositorNodeBlur.relative -> use_relative: boolean
-CompositorNodeColorSpill.unspill -> use_unspill: boolean Compensate all channels (diffenrently) by hand
-CompositorNodeCrop.crop_size -> use_crop_size: boolean Whether to crop the size of the input image
-CompositorNodeDBlur.wrap -> use_wrap: boolean
-CompositorNodeDefocus.gamma_correction -> use_gamma_correction: boolean Enable gamma correction before and after main process
-CompositorNodeDefocus.preview -> use_preview: boolean Enable sampling mode, useful for preview when using low samplecounts
-CompositorNodeDefocus.use_zbuffer -> use_zbuffer: boolean Disable when using an image as input instead of actual zbuffer (auto enabled if node not image based, eg. time node)
-CompositorNodeGlare.rotate_45 -> use_rotate_45: boolean Simple star filter: add 45 degree rotation offset
-CompositorNodeImage.auto_refresh -> use_auto_refresh: boolean
-CompositorNodeImage.cyclic -> use_cyclic: boolean
-CompositorNodeInvert.alpha -> invert_alpha: boolean
-CompositorNodeInvert.rgb -> invert_rgb: boolean
-CompositorNodeLensdist.fit -> use_fit: boolean For positive distortion factor only: scale image such that black areas are not visible
-CompositorNodeLensdist.jitter -> use_jitter: boolean Enable/disable jittering; faster, but also noisier
-CompositorNodeLensdist.projector -> use_projector: boolean Enable/disable projector mode. Effect is applied in horizontal direction only
-CompositorNodeMapValue.use_max -> use_max: boolean
-CompositorNodeMapValue.use_min -> use_min: boolean
-CompositorNodeMixRGB.alpha -> use_alpha: boolean Include alpha of second input in this operation
-CompositorNodeOutputFile.exr_half -> use_exr_half: boolean
-CompositorNodeVecBlur.curved -> use_curved: boolean Interpolate between frames in a bezier curve, rather than linearly
-Constraint.active -> active: boolean Constraint is the one being edited
-Constraint.disabled -> is_valid: boolean, (read-only) Constraint has invalid settings and will not be evaluated
-Constraint.expanded -> show_expanded: boolean Constraint's panel is expanded in UI
-Constraint.proxy_local -> is_proxy_local: boolean Constraint was added in this proxy instance (i.e. did not belong to source Armature)
-ConstraintActuator.detect_material -> use_material_detect: boolean Detect material instead of property
-ConstraintActuator.fh_normal -> use_fh_normal: boolean Add a horizontal spring force on slopes
-ConstraintActuator.fh_paralel_axis -> use_fh_paralel_axis: boolean Keep object axis parallel to normal
-ConstraintActuator.force_distance -> use_force_distance: boolean Force distance of object to point of impact of ray
-ConstraintActuator.local -> use_local: boolean Set ray along object's axis or global axis
-ConstraintActuator.normal -> use_normal: boolean Set object axis along (local axis) or parallel (global axis) to the normal at hit position
-ConstraintActuator.persistent -> use_persistent: boolean Persistent actuator: stays active even if ray does not reach target
-ControlFluidSettings.active -> use: boolean Object contributes to the fluid simulation
-ControlFluidSettings.reverse_frames -> use_reverse_frames: boolean Reverse control object movement
-Controller.expanded -> show_expanded: boolean Set controller expanded in the user interface
-Controller.priority -> use_priority: boolean Mark controller for execution before all non-marked controllers (good for startup scripts)
-Controller.state -> state: boolean, (read-only) Set Controller state index (1 to 30)
-CopyLocationConstraint.invert_x -> invert_x: boolean Invert the X location
-CopyLocationConstraint.invert_y -> invert_y: boolean Invert the Y location
-CopyLocationConstraint.invert_z -> invert_z: boolean Invert the Z location
-CopyLocationConstraint.use_offset -> use_offset: boolean Add original location into copied location
-CopyLocationConstraint.use_x -> use_x: boolean Copy the target's X location
-CopyLocationConstraint.use_y -> use_y: boolean Copy the target's Y location
-CopyLocationConstraint.use_z -> use_z: boolean Copy the target's Z location
-CopyRotationConstraint.invert_x -> invert_x: boolean Invert the X rotation
-CopyRotationConstraint.invert_y -> invert_y: boolean Invert the Y rotation
-CopyRotationConstraint.invert_z -> invert_z: boolean Invert the Z rotation
-CopyRotationConstraint.use_offset -> use_offset: boolean Add original rotation into copied rotation
-CopyRotationConstraint.use_x -> use_x: boolean Copy the target's X rotation
-CopyRotationConstraint.use_y -> use_y: boolean Copy the target's Y rotation
-CopyRotationConstraint.use_z -> use_z: boolean Copy the target's Z rotation
-CopyScaleConstraint.use_offset -> use_offset: boolean Add original scale into copied scale
-CopyScaleConstraint.use_x -> use_x: boolean Copy the target's X scale
-CopyScaleConstraint.use_y -> use_y: boolean Copy the target's Y scale
-CopyScaleConstraint.use_z -> use_z: boolean Copy the target's Z scale
-Curve.auto_texspace -> use_auto_texspace: boolean Adjusts active object's texture space automatically when transforming object
-Curve.back -> use_fill_back: boolean Draw filled back for extruded/beveled curves
-Curve.draw_handles -> show_handles: boolean Display bezier handles in editmode
-Curve.draw_normals -> show_normals: boolean Display 3D curve normals in editmode
-Curve.front -> use_fill_front: boolean Draw filled front for extruded/beveled curves
-Curve.map_along_length -> use_map_along_length: boolean Generate texture mapping coordinates following the curve direction, rather than the local bounding box
-Curve.use_deform_fill -> use_fill_deform: boolean Fill curve after applying deformation
-Curve.use_path -> use_path: boolean Enable the curve to become a translation path
-Curve.use_path_follow -> use_path_follow: boolean Make curve path children to rotate along the path
-Curve.use_radius -> use_radius: boolean Option for paths: apply the curve radius with path following it and deforming
-Curve.use_stretch -> use_stretch: boolean Option for curve-deform: makes deformed child to stretch along entire path
-Curve.use_time_offset -> use_time_offset: boolean Children will use Time Offset value as path distance offset
-CurveMapPoint.selected -> select: boolean Selection state of the curve point
-CurveMapping.clip -> use_clip: boolean Force the curve view to fit a defined boundary
-DelaySensor.repeat -> use_repeat: boolean Toggle repeat option. If selected, the sensor restarts after Delay+Dur logic tics
-DomainFluidSettings.generate_speed_vectors -> use_speed_vectors: boolean Generate speed vectors for vector blur
-DomainFluidSettings.override_time -> use_time_override: boolean Use a custom start and end time (in seconds) instead of the scene's timeline
-DomainFluidSettings.reverse_frames -> use_reverse_frames: boolean Reverse fluid frames
-NEGATE * DopeSheet.collapse_summary -> show_expanded_summary: boolean Collapse summary when shown, so all other channels get hidden. (DopeSheet Editors Only)
-DopeSheet.display_armature -> show_armatures: boolean Include visualization of Armature related Animation data
-DopeSheet.display_camera -> show_cameras: boolean Include visualization of Camera related Animation data
-DopeSheet.display_curve -> show_curves: boolean Include visualization of Curve related Animation data
-DopeSheet.display_lamp -> show_lamps: boolean Include visualization of Lamp related Animation data
-DopeSheet.display_material -> show_materials: boolean Include visualization of Material related Animation data
-DopeSheet.display_mesh -> show_meshes: boolean Include visualization of Mesh related Animation data
-DopeSheet.display_metaball -> show_metaballs: boolean Include visualization of Metaball related Animation data
-DopeSheet.display_node -> show_nodes: boolean Include visualization of Node related Animation data
-DopeSheet.display_particle -> show_particles: boolean Include visualization of Particle related Animation data
-DopeSheet.display_scene -> show_scenes: boolean Include visualization of Scene related Animation data
-DopeSheet.display_shapekeys -> show_shapekeys: boolean Include visualization of ShapeKey related Animation data
-DopeSheet.display_summary -> show_summary: boolean Display an additional 'summary' line. (DopeSheet Editors only)
-DopeSheet.display_texture -> show_textures: boolean Include visualization of Texture related Animation data
-DopeSheet.display_transforms -> show_transforms: boolean Include visualization of Object-level Animation data (mostly Transforms)
-DopeSheet.display_world -> show_worlds: boolean Include visualization of World related Animation data
-DopeSheet.include_missing_nla -> show_missing_nla: boolean Include Animation Data blocks with no NLA data. (NLA Editor only)
-DopeSheet.only_group_objects -> show_only_group_objects: boolean Only include channels from Objects in the specified Group
-DopeSheet.only_selected -> show_only_selected: boolean Only include channels relating to selected objects and data
-Driver.invalid -> is_valid: boolean Driver could not be evaluated in past, so should be skipped
-Driver.show_debug_info -> show_debug_info: boolean Show intermediate values for the driver calculations to allow debugging of drivers
-DriverTarget.use_local_space_transforms -> use_local_space_transform: boolean Use transforms in Local Space (as opposed to the worldspace default)
-EdgeSplitModifier.use_edge_angle -> use_edge_angle: boolean Split edges with high angle between faces
-EdgeSplitModifier.use_sharp -> use_edge_sharp: boolean Split edges that are marked as sharp
-EditBone.connected -> use_connect: boolean When bone has a parent, bone's head is struck to the parent's tail
-EditBone.cyclic_offset -> use_cyclic_offset: boolean When bone doesn't have a parent, it receives cyclic offset effects
-EditBone.deform -> use_deform: boolean Bone does not deform any geometry
-EditBone.draw_wire -> show_wire: boolean Bone is always drawn as Wireframe regardless of viewport draw mode. Useful for non-obstructive custom bone shapes
-EditBone.hidden -> hide: boolean Bone is not visible when in Edit Mode
-EditBone.hinge -> use_hinge: boolean Bone inherits rotation or scale from parent bone
-EditBone.inherit_scale -> use_inherit_scale: boolean Bone inherits scaling from parent bone
-EditBone.layer -> layer: boolean Layers bone exists in
-EditBone.local_location -> use_local_location: boolean Bone location is set in local space
-EditBone.locked -> lock: boolean Bone is not able to be transformed when in Edit Mode
-EditBone.multiply_vertexgroup_with_envelope -> use_envelope_multiply: boolean When deforming bone, multiply effects of Vertex Group weights with Envelope influence
-EditBone.restrict_select -> restrict_select: boolean Bone is able to be selected
-EditBone.selected -> select: boolean
-EditBone.selected_head -> select_head: boolean
-EditBone.selected_tail -> select_tail: boolean
-EditObjectActuator.enable_3d_tracking -> use_3d_tracking: boolean Enable 3D tracking
-EditObjectActuator.local_angular_velocity -> use_local_angular_velocity: boolean Apply the rotation locally
-EditObjectActuator.local_linear_velocity -> use_local_linear_velocity: boolean Apply the transformation locally
-EditObjectActuator.replace_display_mesh -> use_replace_display_mesh: boolean Replace the display mesh
-EditObjectActuator.replace_physics_mesh -> use_replace_physics_mesh: boolean Replace the physics mesh (triangle bounds only - compound shapes not supported)
-EffectSequence.convert_float -> use_float: boolean Convert input to float data
-EffectSequence.de_interlace -> use_deinterlace: boolean For video movies to remove fields
-EffectSequence.flip_x -> use_flip_x: boolean Flip on the X axis
-EffectSequence.flip_y -> use_flip_y: boolean Flip on the Y axis
-EffectSequence.premultiply -> use_premultiply: boolean Convert RGB from key alpha to premultiplied alpha
-EffectSequence.proxy_custom_directory -> use_proxy_custom_directory: boolean Use a custom directory to store data
-EffectSequence.proxy_custom_file -> use_proxy_custom_file: boolean Use a custom file to read proxy data from
-EffectSequence.reverse_frames -> use_reverse_frames: boolean Reverse frame order
-EffectSequence.use_color_balance -> use_color_balance: boolean (3-Way color correction) on input
-EffectSequence.use_crop -> use_crop: boolean Crop image before processing
-EffectSequence.use_proxy -> use_proxy: boolean Use a preview proxy for this strip
-EffectSequence.use_translation -> use_translation: boolean Translate image before processing
-EffectorWeights.do_growing_hair -> apply_to_hair_growing: boolean Use force fields when growing hair
-EnvironmentMap.ignore_layers -> layer_ignore: boolean Hide objects on these layers when generating the Environment Map
-EnvironmentMapTexture.use_filter_size_min -> filter_size_min: boolean Use Filter Size as a minimal filter value in pixels
-EnvironmentMapTexture.mipmap -> use_mipmap: boolean Uses auto-generated MIP maps for the image
-EnvironmentMapTexture.mipmap_gauss -> use_mipmap_gauss: boolean Uses Gauss filter to sample down MIP maps
-Event.alt -> alt: boolean, (read-only) True when the Alt/Option key is held
-Event.ctrl -> ctrl: boolean, (read-only) True when the Ctrl key is held
-Event.oskey -> oskey: boolean, (read-only) True when the Cmd key is held
-Event.shift -> shift: boolean, (read-only) True when the Shift key is held
-ExplodeModifier.alive -> show_alive: boolean Show mesh when particles are alive
-ExplodeModifier.dead -> show_dead: boolean Show mesh when particles are dead
-ExplodeModifier.size -> use_size: boolean Use particle size for the shrapnel
-ExplodeModifier.split_edges -> use_edge_split: boolean Split face edges for nicer shrapnel
-ExplodeModifier.unborn -> show_unborn: boolean Show mesh when particles are unborn
-FCurve.auto_clamped_handles -> use_auto_handle_clamp: boolean All auto-handles for F-Curve are clamped
-NEGATE * FCurve.disabled -> enabled: boolean F-Curve could not be evaluated in past, so should be skipped when evaluating
-FCurve.locked -> lock: boolean F-Curve's settings cannot be edited
-FCurve.muted -> mute: boolean F-Curve is not evaluated
-FCurve.selected -> select: boolean F-Curve is selected for editing
-NEGATE * FCurve.visible -> hide: boolean F-Curve and its keyframes are shown in the Graph Editor graphs
-FCurveSample.selected -> select: boolean Selection status
-FModifier.active -> active: boolean F-Curve Modifier is the one being edited
-NEGATE * FModifier.disabled -> enabled: boolean, (read-only) F-Curve Modifier has invalid settings and will not be evaluated
-FModifier.expanded -> show_expanded: boolean F-Curve Modifier's panel is expanded in UI
-FModifier.muted -> mute: boolean F-Curve Modifier will not be evaluated
-FModifierFunctionGenerator.additive -> use_additive: boolean Values generated by this modifier are applied on top of the existing values instead of overwriting them
-FModifierGenerator.additive -> use_additive: boolean Values generated by this modifier are applied on top of the existing values instead of overwriting them
-FModifierLimits.use_maximum_x -> use_max_x: boolean Use the maximum X value
-FModifierLimits.use_maximum_y -> use_max_y: boolean Use the maximum Y value
-FModifierLimits.use_minimum_x -> use_min_x: boolean Use the minimum X value
-FModifierLimits.use_minimum_y -> use_min_y: boolean Use the minimum Y value
-FModifierStepped.use_frame_end -> use_frame_end: boolean Restrict modifier to only act before its 'end' frame
-FModifierStepped.use_frame_start -> use_frame_start: boolean Restrict modifier to only act after its 'start' frame
-FcurveActuator.add -> use_add: boolean F-Curve is added to the current loc/rot/scale in global or local coordinate according to Local flag
-FcurveActuator.child -> apply_to_children: boolean Update F-Curve on all children Objects as well
-FcurveActuator.force -> use_force: boolean Apply F-Curve as a global or local force depending on the local option (dynamic objects only)
-FcurveActuator.local -> use_local: boolean Let the F-Curve act in local coordinates, used in Force and Add mode
-FieldSettings.do_absorption -> use_absorption: boolean Force gets absorbed by collision objects
-FieldSettings.do_location -> apply_to_location: boolean Effect particles' location
-FieldSettings.do_rotation -> apply_to_rotation: boolean Effect particles' dynamic rotation
-FieldSettings.force_2d -> use_2d_force: boolean Apply force only in 2d
-FieldSettings.global_coordinates -> use_global_coordinates: boolean Use effector/global coordinates for turbulence
-FieldSettings.guide_path_add -> use_guide_path_add: boolean Based on distance/falloff it adds a portion of the entire path
-FieldSettings.multiple_springs -> use_multiple_springs: boolean Every point is effected by multiple springs
-FieldSettings.root_coordinates -> use_root_coordinates: boolean Texture coordinates from root particle locations
-FieldSettings.use_coordinates -> use_object_coordinates: boolean Use object/global coordinates for texture
-FieldSettings.use_guide_path_weight -> use_guide_path_weight: boolean Use curve weights to influence the particle influence along the curve
-FieldSettings.use_max_distance -> use_max_distance: boolean Use a maximum distance for the field to work
-FieldSettings.use_min_distance -> use_min_distance: boolean Use a minimum distance for the field's fall-off
-FieldSettings.use_radial_max -> use_radial_max: boolean Use a maximum radial distance for the field to work
-FieldSettings.use_radial_min -> use_radial_min: boolean Use a minimum radial distance for the field's fall-off
-FileSelectParams.do_filter -> use_filter: boolean Enable filtering of files
-FileSelectParams.filter_blender -> use_filter_blender: boolean Show .blend files
-FileSelectParams.filter_folder -> use_filter_folder: boolean Show folders
-FileSelectParams.filter_font -> use_filter_font: boolean Show font files
-FileSelectParams.filter_image -> use_filter_image: boolean Show image files
-FileSelectParams.filter_movie -> use_filter_movie: boolean Show movie files
-FileSelectParams.filter_script -> use_filter_script: boolean Show script files
-FileSelectParams.filter_sound -> use_filter_sound: boolean Show sound files
-FileSelectParams.filter_text -> use_filter_text: boolean Show text files
-NEGATE * FileSelectParams.hide_dot -> show_hidden: boolean Hide hidden dot files
-Filter2DActuator.enable_motion_blur -> use_motion_blur: boolean Enable/Disable Motion Blur
-FloorConstraint.sticky -> use_sticky: boolean Immobilize object while constrained
-FloorConstraint.use_rotation -> use_rotation: boolean Use the target's rotation to determine floor
-FluidFluidSettings.active -> use: boolean Object contributes to the fluid simulation
-FluidFluidSettings.export_animated_mesh -> use_animated_mesh: boolean Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated pos/rot/scale IPOs do not require it
-FollowPathConstraint.use_curve_follow -> use_curve_follow: boolean Object will follow the heading and banking of the curve
-FollowPathConstraint.use_curve_radius -> use_curve_radius: boolean Objects scale by the curve radius
-FollowPathConstraint.use_fixed_position -> use_fixed_location: boolean Object will stay locked to a single point somewhere along the length of the curve regardless of time
-Function.registered -> is_registered: boolean, (read-only) Function is registered as callback as part of type registration
-Function.registered_optional -> is_registered_optional: boolean, (read-only) Function is optionally registered as callback part of type registration
-GPencilFrame.paint_lock -> is_edited: boolean Frame is being edited (painted on)
-GPencilFrame.selected -> select: boolean Frame is selected for editing in the DopeSheet
-GPencilLayer.active -> active: boolean Set active layer for editing
-GPencilLayer.frame_lock -> lock_frame: boolean Lock current frame displayed by layer
-GPencilLayer.hide -> hide: boolean Set layer Visibility
-GPencilLayer.locked -> lock: boolean Protect layer from further editing and/or frame changes
-GPencilLayer.selected -> select: boolean Layer is selected for editing in the DopeSheet
-GPencilLayer.show_points -> show_points: boolean Draw the points which make up the strokes (for debugging purposes)
-GPencilLayer.use_onion_skinning -> use_onion_skinning: boolean Ghost frames on either side of frame
-GameBooleanProperty.value -> value: boolean Property value
-GameObjectSettings.actor -> use_actor: boolean Object is detected by the Near and Radar sensor
-GameObjectSettings.all_states -> use_all_states: boolean Set all state bits
-GameObjectSettings.anisotropic_friction -> use_anisotropic_friction: boolean Enable anisotropic friction
-GameObjectSettings.collision_compound -> use_collision_compound: boolean Add children to form a compound collision object
-GameObjectSettings.debug_state -> show_debug_state: boolean Print state debug info in the game engine
-GameObjectSettings.ghost -> use_ghost: boolean Object does not restitute collisions, like a ghost
-GameObjectSettings.initial_state -> state_initial: boolean Initial state when the game starts
-GameObjectSettings.lock_x_axis -> lock_location_x: boolean Disable simulation of linear motion along the X axis
-GameObjectSettings.lock_x_rot_axis -> lock_rotation_x: boolean Disable simulation of angular motion along the X axis
-GameObjectSettings.lock_y_axis -> lock_location_y: boolean Disable simulation of linear motion along the Y axis
-GameObjectSettings.lock_y_rot_axis -> lock_rotation_y: boolean Disable simulation of angular motion along the Y axis
-GameObjectSettings.lock_z_axis -> lock_location_z: boolean Disable simulation of linear motion along the Z axis
-GameObjectSettings.lock_z_rot_axis -> lock_rotation_z: boolean Disable simulation of angular motion along the Z axis
-GameObjectSettings.material_physics -> use_material_physics: boolean Use physics settings in materials
-NEGATE * GameObjectSettings.no_sleeping -> use_sleep: boolean Disable auto (de)activation in physics simulation
-GameObjectSettings.rotate_from_normal -> use_rotate_from_normal: boolean Use face normal to rotate object, so that it points away from the surface
-GameObjectSettings.show_actuators -> show_actuators: boolean Shows actuators for this object in the user interface
-GameObjectSettings.show_controllers -> show_controllers: boolean Shows controllers for this object in the user interface
-GameObjectSettings.show_sensors -> show_sensors: boolean Shows sensors for this object in the user interface
-GameObjectSettings.show_state_panel -> show_state_panel: boolean Show state panel
-GameObjectSettings.use_activity_culling -> use_activity_culling: boolean Disable simulation of angular motion along the Z axis
-GameObjectSettings.use_collision_bounds -> use_collision_bounds: boolean Specify a collision bounds type other than the default
-GameObjectSettings.used_state -> state_used: boolean, (read-only) States which are being used by controllers
-GameObjectSettings.visible_state -> state_visible: boolean State determining which controllers are displayed
-GameProperty.debug -> show_debug: boolean Print debug information for this property
-GameSoftBodySettings.bending_const -> use_bending_constraints: boolean Enable bending constraints
-GameSoftBodySettings.cluster_rigid_to_softbody -> use_cluster_rigid_to_softbody: boolean Enable cluster collision between soft and rigid body
-GameSoftBodySettings.cluster_soft_to_softbody -> use_cluster_soft_to_softbody: boolean Enable cluster collision between soft and soft body
-GameSoftBodySettings.shape_match -> use_shape_match: boolean Enable soft body shape matching goal
-GlowSequence.only_boost -> use_only_boost: boolean Show the glow buffer only
-GreasePencil.use_stroke_endpoints -> use_stroke_endpoints: boolean Only use the first and last parts of the stroke for snapping
-Group.layer -> layer: boolean Layers visible when this groups is instanced as a dupli
-ID.fake_user -> use_fake_user: boolean Saves this datablock even if it has no users
-ID.tag -> tag: boolean Tools can use this to tag data, (initial state is undefined)
-Image.animated -> use_animation: boolean Use as animated texture in the game engine
-Image.clamp_x -> use_clamp_x: boolean Disable texture repeating horizontally
-Image.clamp_y -> use_clamp_y: boolean Disable texture repeating vertically
-Image.dirty -> is_dirty: boolean, (read-only) Image has changed and is not saved
-Image.fields -> use_fields: boolean Use fields of the image
-Image.has_data -> has_data: boolean, (read-only) True if this image has data
-Image.premultiply -> use_premultiply: boolean Convert RGB from key alpha to premultiplied alpha
-Image.tiles -> use_tiles: boolean Use of tilemode for faces (default shift-LMB to pick the tile for selected faces)
-ImagePaint.invert_stencil -> invert_stencil: boolean Invert the stencil layer
-ImagePaint.show_brush -> show_brush: boolean Enables brush shape while not drawing
-ImagePaint.show_brush_draw -> show_brush_draw: boolean Enables brush shape while drawing
-ImagePaint.use_backface_cull -> use_backface_culling: boolean Ignore faces pointing away from the view (faster)
-ImagePaint.use_clone_layer -> use_clone_layer: boolean Use another UV layer as clone source, otherwise use 3D the cursor as the source
-ImagePaint.use_normal_falloff -> use_normal_falloff: boolean Paint most on faces pointing towards the view
-ImagePaint.use_occlude -> use_occlude: boolean Only paint onto the faces directly under the brush (slower)
-ImagePaint.use_projection -> use_projection: boolean Use projection painting for improved consistency in the brush strokes
-ImagePaint.use_stencil_layer -> use_stencil_layer: boolean Set the mask layer from the UV layer buttons
-ImageSequence.convert_float -> use_float: boolean Convert input to float data
-ImageSequence.de_interlace -> use_deinterlace: boolean For video movies to remove fields
-ImageSequence.flip_x -> use_flip_x: boolean Flip on the X axis
-ImageSequence.flip_y -> use_flip_y: boolean Flip on the Y axis
-ImageSequence.premultiply -> use_premultiply: boolean Convert RGB from key alpha to premultiplied alpha
-ImageSequence.proxy_custom_directory -> use_proxy_custom_directory: boolean Use a custom directory to store data
-ImageSequence.proxy_custom_file -> use_proxy_custom_file: boolean Use a custom file to read proxy data from
-ImageSequence.reverse_frames -> use_reverse_frames: boolean Reverse frame order
-ImageSequence.use_color_balance -> use_color_balance: boolean (3-Way color correction) on input
-ImageSequence.use_crop -> use_crop: boolean Crop image before processing
-ImageSequence.use_proxy -> use_proxy: boolean Use a preview proxy for this strip
-ImageSequence.use_translation -> use_translation: boolean Translate image before processing
-ImageTexture.calculate_alpha -> use_calculate_alpha: boolean Calculates an alpha channel based on RGB values in the image
-ImageTexture.checker_even -> use_checker_even: boolean Sets even checker tiles
-ImageTexture.checker_odd -> use_checker_odd: boolean Sets odd checker tiles
-ImageTexture.filter_size_minimum -> use_minimum_filter_size: boolean Use Filter Size as a minimal filter value in pixels
-ImageTexture.flip_axis -> use_flip_axis: boolean Flips the texture's X and Y axis
-ImageTexture.interpolation -> use_interpolation: boolean Interpolates pixels using Area filter
-ImageTexture.invert_alpha -> invert_alpha: boolean Inverts all the alpha values in the image
-ImageTexture.mipmap -> use_mipmap: boolean Uses auto-generated MIP maps for the image
-ImageTexture.mipmap_gauss -> use_mipmap_gauss: boolean Uses Gauss filter to sample down MIP maps
-ImageTexture.mirror_x -> use_mirror_x: boolean Mirrors the image repetition on the X direction
-ImageTexture.mirror_y -> use_mirror_y: boolean Mirrors the image repetition on the Y direction
-ImageTexture.normal_map -> use_normal_map: boolean Uses image RGB values for normal mapping
-ImageTexture.use_alpha -> use_alpha: boolean Uses the alpha channel information in the image
-ImageUser.auto_refresh -> use_auto_refresh: boolean Always refresh image on frame changes
-ImageUser.cyclic -> use_cyclic: boolean Cycle the images in the movie
-InflowFluidSettings.active -> use: boolean Object contributes to the fluid simulation
-InflowFluidSettings.export_animated_mesh -> use_animated_mesh: boolean Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated pos/rot/scale IPOs do not require it
-InflowFluidSettings.local_coordinates -> use_local_coordinates: boolean Use local coordinates for inflow. (e.g. for rotating objects)
-Itasc.auto_step -> use_auto_step: boolean Automatically determine the optimal number of steps for best performance/accuracy trade off
-JoystickSensor.all_events -> use_all_events: boolean Triggered by all events on this joysticks current type (axis/button/hat)
-Key.relative -> use_relative: boolean Makes shape keys relative
-KeyConfig.user_defined -> is_user_defined: boolean, (read-only) Indicates that a keyconfig was defined by the user
-KeyMap.children_expanded -> show_expanded_children: boolean Children expanded in the user interface
-KeyMap.items_expanded -> show_expanded_items: boolean Expanded in the user interface
-KeyMap.modal -> is_modal: boolean, (read-only) Indicates that a keymap is used for translate modal events for an operator
-KeyMap.user_defined -> is_user_defined: boolean Keymap is defined by the user
-KeyMapItem.active -> active: boolean Activate or deactivate item
-KeyMapItem.alt -> alt: boolean Alt key pressed
-KeyMapItem.any -> any: boolean Any modifier keys pressed
-KeyMapItem.ctrl -> ctrl: boolean Control key pressed
-KeyMapItem.expanded -> show_expanded: boolean Show key map event and property details in the user interface
-KeyMapItem.oskey -> oskey: boolean Operating system key pressed
-KeyMapItem.shift -> shift: boolean Shift key pressed
-KeyboardSensor.all_keys -> use_all_keys: boolean Trigger this sensor on any keystroke
-Keyframe.selected -> select: boolean Control point selection status
-Keyframe.selected_handle1 -> select_left_handle: boolean Handle 1 selection status
-Keyframe.selected_handle2 -> select_right_handle: boolean Handle 2 selection status
-KeyingSet.absolute -> use_absolute: boolean Keying Set defines specific paths/settings to be keyframed (i.e. is not reliant on context info)
-KeyingSet.insertkey_needed -> use_insertkey_needed: boolean Only insert keyframes where they're needed in the relevant F-Curves
-KeyingSet.insertkey_visual -> use_insertkey_visual: boolean Insert keyframes based on 'visual transforms'
-KeyingSet.insertkey_xyz_to_rgb -> use_insertkey_xyz_to_rgb: boolean Color for newly added transformation F-Curves (Location, Rotation, Scale) and also Color is based on the transform axis
-KeyingSetInfo.insertkey_needed -> use_insertkey_needed: boolean Only insert keyframes where they're needed in the relevant F-Curves
-KeyingSetInfo.insertkey_visual -> use_insertkey_visual: boolean Insert keyframes based on 'visual transforms'
-KeyingSetInfo.insertkey_xyz_to_rgb -> use_insertkey_xyz_to_rgb: boolean Color for newly added transformation F-Curves (Location, Rotation, Scale) and also Color is based on the transform axis
-KeyingSetPath.entire_array -> use_entire_array: boolean When an 'array/vector' type is chosen (Location, Rotation, Color, etc.), entire array is to be used
-KeyingSetPath.insertkey_needed -> use_insertkey_needed: boolean Only insert keyframes where they're needed in the relevant F-Curves
-KeyingSetPath.insertkey_visual -> use_insertkey_visual: boolean Insert keyframes based on 'visual transforms'
-KeyingSetPath.insertkey_xyz_to_rgb -> use_insertkey_xyz_to_rgb: boolean Color for newly added transformation F-Curves (Location, Rotation, Scale) and also Color is based on the transform axis
-KinematicConstraint.pos_lock_x -> lock_location_x: boolean Constraint position along X axis
-KinematicConstraint.pos_lock_y -> lock_location_y: boolean Constraint position along Y axis
-KinematicConstraint.pos_lock_z -> lock_location_z: boolean Constraint position along Z axis
-KinematicConstraint.rot_lock_x -> lock_rotation_x: boolean Constraint rotation along X axis
-KinematicConstraint.rot_lock_y -> lock_rotation_y: boolean Constraint rotation along Y axis
-KinematicConstraint.rot_lock_z -> lock_rotation_z: boolean Constraint rotation along Z axis
-KinematicConstraint.use_position -> use_location: boolean Chain follows position of target
-KinematicConstraint.use_rotation -> use_rotation: boolean Chain follows rotation of target
-KinematicConstraint.use_stretch -> use_stretch: boolean Enable IK Stretching
-KinematicConstraint.use_tail -> use_tail: boolean Include bone's tail as last element in chain
-KinematicConstraint.use_target -> use_target: boolean Disable for targetless IK
-Lamp.diffuse -> use_diffuse: boolean Lamp does diffuse shading
-Lamp.layer -> use_own_layer: boolean Illuminates objects only on the same layer the lamp is on
-Lamp.negative -> use_negative: boolean Lamp casts negative light
-Lamp.specular -> use_specular: boolean Lamp creates specular highlights
-LampSkySettings.use_atmosphere -> use_atmosphere: boolean Apply sun effect on atmosphere
-LampSkySettings.use_sky -> use_sky: boolean Apply sun effect on sky
-LampTextureSlot.map_color -> use_map_color: boolean Lets the texture affect the basic color of the lamp
-LampTextureSlot.map_shadow -> use_map_shadow: boolean Lets the texture affect the shadow color of the lamp
-Lattice.outside -> use_outside: boolean Only draw, and take into account, the outer vertices
-LimitLocationConstraint.limit_transform -> limit_transform: boolean Transforms are affected by this constraint as well
-LimitLocationConstraint.use_maximum_x -> use_max_x: boolean Use the maximum X value
-LimitLocationConstraint.use_maximum_y -> use_max_y: boolean Use the maximum Y value
-LimitLocationConstraint.use_maximum_z -> use_max_z: boolean Use the maximum Z value
-LimitLocationConstraint.use_minimum_x -> use_min_x: boolean Use the minimum X value
-LimitLocationConstraint.use_minimum_y -> use_min_y: boolean Use the minimum Y value
-LimitLocationConstraint.use_minimum_z -> use_min_z: boolean Use the minimum Z value
-LimitRotationConstraint.limit_transform -> limit_transform: boolean Transforms are affected by this constraint as well
-LimitRotationConstraint.use_limit_x -> use_limit_x: boolean Use the minimum X value
-LimitRotationConstraint.use_limit_y -> use_limit_y: boolean Use the minimum Y value
-LimitRotationConstraint.use_limit_z -> use_limit_z: boolean Use the minimum Z value
-LimitScaleConstraint.limit_transform -> limit_transform: boolean Transforms are affected by this constraint as well
-LimitScaleConstraint.use_maximum_x -> use_max_x: boolean Use the maximum X value
-LimitScaleConstraint.use_maximum_y -> use_max_y: boolean Use the maximum Y value
-LimitScaleConstraint.use_maximum_z -> use_max_z: boolean Use the maximum Z value
-LimitScaleConstraint.use_minimum_x -> use_min_x: boolean Use the minimum X value
-LimitScaleConstraint.use_minimum_y -> use_min_y: boolean Use the minimum Y value
-LimitScaleConstraint.use_minimum_z -> use_min_z: boolean Use the minimum Z value
-Main.debug -> show_debug: boolean Print debugging information in console
-Main.file_is_saved -> is_saved: boolean, (read-only) Has the current session been saved to disk as a .blend file
-MaskModifier.invert -> invert_vertex_group: boolean Use vertices that are not part of region defined
-Material.cast_approximate -> use_cast_approximate: boolean Allow this material to cast shadows when using approximate ambient occlusion.
-Material.cast_buffer_shadows -> use_cast_buffer_shadows: boolean Allow this material to cast shadows from shadow buffer lamps
-Material.cast_shadows_only -> use_cast_shadows_only: boolean Makes objects with this material appear invisible, only casting shadows (not rendered)
-Material.cubic -> use_cubic: boolean Use cubic interpolation for diffuse values, for smoother transitions
-NEGATE * Material.exclude_mist -> use_mist: boolean Excludes this material from mist effects (in world settings)
-Material.face_texture -> use_face_texture: boolean Replaces the object's base color with color from face assigned image textures
-Material.face_texture_alpha -> use_face_texture_alpha: boolean Replaces the object's base alpha value with alpha from face assigned image textures
-Material.full_oversampling -> use_full_oversampling: boolean Force this material to render full shading/textures for all anti-aliasing samples
-Material.invert_z -> invert_z: boolean Renders material's faces with an inverted Z buffer (scanline only)
-Material.light_group_exclusive -> use_light_group_exclusive: boolean Material uses the light group exclusively - these lamps are excluded from other scene lighting
-Material.object_color -> use_object_color: boolean Modulate the result with a per-object color
-Material.only_shadow -> use_only_shadow: boolean Renders shadows as the material's alpha value, making materials transparent except for shadowed areas
-Material.ray_shadow_bias -> use_ray_shadow_bias: boolean Prevents raytraced shadow errors on surfaces with smooth shaded normals (terminator problem)
-Material.receive_transparent_shadows -> use_transparent_shadows: boolean Allow this object to receive transparent shadows casted through other objects
-Material.shadeless -> use_shadeless: boolean Makes this material insensitive to light or shadow
-Material.shadows -> use_shadows: boolean Allows this material to receive shadows
-Material.tangent_shading -> use_tangent_shading: boolean Use the material's tangent vector instead of the normal for shading - for anisotropic shading effects
-Material.traceable -> use_traceable: boolean Include this material and geometry that uses it in ray tracing calculations
-Material.transparency -> use_transparency: boolean Render material as transparent
-Material.use_diffuse_ramp -> use_diffuse_ramp: boolean Toggle diffuse ramp operations
-Material.use_nodes -> use_nodes: boolean Use shader nodes to render the material
-Material.use_sky -> use_sky: boolean Renders this material with zero alpha, with sky background in place (scanline only)
-Material.use_specular_ramp -> use_specular_ramp: boolean Toggle specular ramp operations
-Material.use_textures -> use_textures: boolean Enable/Disable each texture
-Material.vertex_color_light -> use_vertex_color_light: boolean Add vertex colors as additional lighting
-Material.vertex_color_paint -> use_vertex_color_paint: boolean Replaces object base color with vertex colors (multiplies with 'texture face' face assigned textures)
-MaterialHalo.flare_mode -> use_flare_mode: boolean Renders halo as a lensflare
-MaterialHalo.lines -> use_lines: boolean Renders star shaped lines over halo
-MaterialHalo.ring -> use_ring: boolean Renders rings over halo
-MaterialHalo.shaded -> use_shading: boolean Lets halo receive light and shadows from external objects
-MaterialHalo.soft -> use_soft: boolean Softens the edges of halos at intersections with other geometry
-MaterialHalo.star -> use_star: boolean Renders halo as a star
-MaterialHalo.texture -> use_texture: boolean Gives halo a texture
-MaterialHalo.vertex_normal -> use_vertex_normal: boolean Uses the vertex normal to specify the dimension of the halo
-MaterialHalo.xalpha -> use_extreme_alpha: boolean Uses extreme alpha
-MaterialPhysics.align_to_normal -> use_align_to_normal: boolean Align dynamic game objects along the surface normal, when inside the physics distance area
-MaterialRaytraceMirror.enabled -> use: boolean Enable raytraced reflections
-MaterialStrand.blender_units -> use_blender_units: boolean Use Blender units for widths instead of pixels
-MaterialStrand.surface_diffuse -> use_surface_diffuse: boolean Make diffuse shading more similar to shading the surface
-MaterialStrand.tangent_shading -> use_tangent_shading: boolean Uses direction of strands as normal for tangent-shading
-MaterialSubsurfaceScattering.enabled -> use: boolean Enable diffuse subsurface scatting effects in a material
-MaterialTextureSlot.enabled -> use: boolean Enable this material texture slot
-MaterialTextureSlot.from_dupli -> use_from_dupli: boolean Dupli's instanced from verts, faces or particles, inherit texture coordinate from their parent
-MaterialTextureSlot.from_original -> use_from_original: boolean Dupli's derive their object coordinates from the original objects transformation
-MaterialTextureSlot.map_alpha -> use_map_alpha: boolean Causes the texture to affect the alpha value
-MaterialTextureSlot.map_ambient -> use_map_ambient: boolean Causes the texture to affect the value of ambient
-MaterialTextureSlot.map_colordiff -> use_map_colordiff: boolean Causes the texture to affect basic color of the material
-MaterialTextureSlot.map_coloremission -> use_map_coloremission: boolean Causes the texture to affect the color of emission
-MaterialTextureSlot.map_colorreflection -> use_map_colorreflection: boolean Causes the texture to affect the color of scattered light
-MaterialTextureSlot.map_colorspec -> use_map_colorspec: boolean Causes the texture to affect the specularity color
-MaterialTextureSlot.map_colortransmission -> use_map_colortransmission: boolean Causes the texture to affect the result color after other light has been scattered/absorbed
-MaterialTextureSlot.map_density -> use_map_density: boolean Causes the texture to affect the volume's density
-MaterialTextureSlot.map_diffuse -> use_map_diffuse: boolean Causes the texture to affect the value of the materials diffuse reflectivity
-MaterialTextureSlot.map_displacement -> use_map_displacement: boolean Let the texture displace the surface
-MaterialTextureSlot.map_emission -> use_map_emission: boolean Causes the texture to affect the volume's emission
-MaterialTextureSlot.map_emit -> use_map_emit: boolean Causes the texture to affect the emit value
-MaterialTextureSlot.map_hardness -> use_map_hardness: boolean Causes the texture to affect the hardness value
-MaterialTextureSlot.map_mirror -> use_map_mirror: boolean Causes the texture to affect the mirror color
-MaterialTextureSlot.map_normal -> use_map_normal: boolean Causes the texture to affect the rendered normal
-MaterialTextureSlot.map_raymir -> use_map_raymir: boolean Causes the texture to affect the ray-mirror value
-MaterialTextureSlot.map_reflection -> use_map_reflect: boolean Causes the texture to affect the reflected light's brightness
-MaterialTextureSlot.map_scattering -> use_map_scatter: boolean Causes the texture to affect the volume's scattering
-MaterialTextureSlot.map_specular -> use_map_specular: boolean Causes the texture to affect the value of specular reflectivity
-MaterialTextureSlot.map_translucency -> use_map_translucency: boolean Causes the texture to affect the translucency value
-MaterialTextureSlot.map_warp -> use_map_warp: boolean Let the texture warp texture coordinates of next channels
-MaterialTextureSlot.new_bump -> use_new_bump: boolean Use new, corrected bump mapping code (backwards compatibility option)
-MaterialVolume.external_shadows -> use_external_shadows: boolean Receive shadows from sources outside the volume (temporary)
-MaterialVolume.light_cache -> use_light_cache: boolean Pre-calculate the shading information into a voxel grid, speeds up shading at slightly less accuracy
-Mesh.all_edges -> show_all_edges: boolean Displays all edges for wireframe in all view modes in the 3D view
-Mesh.auto_texspace -> use_auto_texspace: boolean Adjusts active object's texture space automatically when transforming object
-Mesh.autosmooth -> use_autosmooth: boolean Treats all set-smoothed faces with angles less than the specified angle as 'smooth' during render
-Mesh.double_sided -> show_double_sided: boolean Render/display the mesh with double or single sided lighting
-Mesh.draw_bevel_weights -> show_bevel_weights: boolean Displays weights created for the Bevel modifier
-Mesh.draw_creases -> show_creases: boolean Displays creases created for subsurf weighting
-Mesh.draw_edge_angle -> show_edge_angle: boolean Displays the angles in the selected edges in degrees
-Mesh.draw_edge_lenght -> show_edge_lenght: boolean Displays selected edge lengths
-Mesh.draw_edges -> show_edges: boolean Displays selected edges using highlights in the 3D view and UV editor
-Mesh.draw_face_area -> show_face_area: boolean Displays the area of selected faces
-Mesh.draw_faces -> show_faces: boolean Displays all faces as shades in the 3D view and UV editor
-Mesh.draw_normals -> show_normals: boolean Displays face normals as lines
-Mesh.draw_seams -> show_seams: boolean Displays UV unwrapping seams
-Mesh.draw_sharp -> show_sharp: boolean Displays sharp edges, used with the EdgeSplit modifier
-Mesh.draw_vertex_normals -> show_vertex_normals: boolean Displays vertex normals as lines
-Mesh.use_mirror_topology -> use_mirror_topology: boolean Use topology based mirroring
-Mesh.use_mirror_x -> use_mirror_x: boolean X Axis mirror editing
-Mesh.use_paint_mask -> use_paint_mask: boolean Face selection masking for painting
-Mesh.vertex_normal_flip -> use_vertex_normal_flip: boolean Flip vertex normals towards the camera during render
-MeshColorLayer.active -> active: boolean Sets the layer as active for display and editing
-MeshColorLayer.active_render -> active_render: boolean Sets the layer as active for rendering
-MeshDeformModifier.dynamic -> dynamic: boolean Recompute binding dynamically on top of other deformers (slower and more memory consuming.)
-MeshDeformModifier.invert -> invert_vertex_group: boolean Invert vertex group influence
-MeshDeformModifier.is_bound -> is_bound: boolean, (read-only) Whether geometry has been bound to control cage
-MeshEdge.fgon -> is_fgon: boolean, (read-only) Fgon edge
-MeshEdge.hidden -> hide: boolean
-MeshEdge.loose -> is_loose: boolean, (read-only) Loose edge
-MeshEdge.seam -> use_seam: boolean Seam edge for UV unwrapping
-MeshEdge.selected -> select: boolean
-MeshEdge.sharp -> use_sharp: boolean Sharp edge for the EdgeSplit modifier
-MeshFace.hidden -> hide: boolean
-MeshFace.selected -> select: boolean
-MeshFace.smooth -> use_smooth: boolean
-MeshTextureFace.alpha_sort -> use_alpha_sort: boolean Enable sorting of faces for correct alpha drawing (slow, use Clip Alpha instead when possible)
-MeshTextureFace.billboard -> use_billboard: boolean Billboard with Z-axis constraint
-MeshTextureFace.collision -> use_collision: boolean Use face for collision and ray-sensor detection
-MeshTextureFace.halo -> use_halo: boolean Screen aligned billboard
-MeshTextureFace.invisible -> hide: boolean Make face invisible
-MeshTextureFace.light -> use_light: boolean Use light for face
-MeshTextureFace.object_color -> use_object_color: boolean Use ObColor instead of vertex colors
-MeshTextureFace.shadow -> use_shadow_face: boolean Face is used for shadow
-MeshTextureFace.shared -> use_blend_shared: boolean Blend vertex colors across face when vertices are shared
-MeshTextureFace.tex -> use_texture: boolean Render face with texture
-MeshTextureFace.text -> use_bitmap_text: boolean Enable bitmap text on face
-MeshTextureFace.twoside -> use_twoside: boolean Render face two-sided
-MeshTextureFace.uv_pinned -> uv_pin: boolean
-MeshTextureFace.uv_selected -> uv_select: boolean
-MeshTextureFaceLayer.active -> active: boolean Sets the layer as active for display and editing
-MeshTextureFaceLayer.active_clone -> active_clone: boolean Sets the layer as active for cloning
-MeshTextureFaceLayer.active_render -> active_render: boolean Sets the layer as active for rendering
-MeshVertex.hidden -> hide: boolean
-MeshVertex.selected -> select: boolean
-MetaBall.auto_texspace -> use_auto_texspace: boolean Adjusts active object's texture space automatically when transforming object
-MetaElement.hide -> hide: boolean Hide element
-MetaElement.negative -> use_negative: boolean Set metaball as negative one
-MetaSequence.convert_float -> use_float: boolean Convert input to float data
-MetaSequence.de_interlace -> use_deinterlace: boolean For video movies to remove fields
-MetaSequence.flip_x -> use_flip_x: boolean Flip on the X axis
-MetaSequence.flip_y -> use_flip_y: boolean Flip on the Y axis
-MetaSequence.premultiply -> use_premultiply: boolean Convert RGB from key alpha to premultiplied alpha
-MetaSequence.proxy_custom_directory -> use_proxy_custom_directory: boolean Use a custom directory to store data
-MetaSequence.proxy_custom_file -> use_proxy_custom_file: boolean Use a custom file to read proxy data from
-MetaSequence.reverse_frames -> use_reverse_frames: boolean Reverse frame order
-MetaSequence.use_color_balance -> use_color_balance: boolean (3-Way color correction) on input
-MetaSequence.use_crop -> use_crop: boolean Crop image before processing
-MetaSequence.use_proxy -> use_proxy: boolean Use a preview proxy for this strip
-MetaSequence.use_translation -> use_translation: boolean Translate image before processing
-MirrorModifier.clip -> use_clip: boolean Prevents vertices from going through the mirror during transform
-MirrorModifier.mirror_u -> use_mirror_u: boolean Mirror the U texture coordinate around the 0.5 point
-MirrorModifier.mirror_v -> use_mirror_v: boolean Mirror the V texture coordinate around the 0.5 point
-MirrorModifier.mirror_vertex_groups -> use_mirror_vertex_groups: boolean Mirror vertex groups (e.g. .R->.L)
-MirrorModifier.x -> use_x: boolean Enable X axis mirror
-MirrorModifier.y -> use_y: boolean Enable Y axis mirror
-MirrorModifier.z -> use_z: boolean Enable Z axis mirror
-Modifier.editmode -> show_in_editmode: boolean Use modifier while in the edit mode
-Modifier.expanded -> show_expanded: boolean Set modifier expanded in the user interface
-Modifier.on_cage -> show_on_cage: boolean Enable direct editing of modifier control cage
-Modifier.realtime -> show_realtime: boolean Realtime display of a modifier
-Modifier.render -> use_render: boolean Use modifier during rendering
-MotionPath.editing -> is_edited: boolean Path is being edited
-MotionPath.use_bone_head -> use_bone_head: boolean, (read-only) For PoseBone paths, use the bone head location when calculating this path
-MotionPathVert.selected -> select: boolean Path point is selected for editing
-MovieSequence.convert_float -> use_float: boolean Convert input to float data
-MovieSequence.de_interlace -> use_deinterlace: boolean For video movies to remove fields
-MovieSequence.flip_x -> use_flip_x: boolean Flip on the X axis
-MovieSequence.flip_y -> use_flip_y: boolean Flip on the Y axis
-MovieSequence.premultiply -> use_premultiply: boolean Convert RGB from key alpha to premultiplied alpha
-MovieSequence.proxy_custom_directory -> use_proxy_custom_directory: boolean Use a custom directory to store data
-MovieSequence.proxy_custom_file -> use_proxy_custom_file: boolean Use a custom file to read proxy data from
-MovieSequence.reverse_frames -> use_reverse_frames: boolean Reverse frame order
-MovieSequence.use_color_balance -> use_color_balance: boolean (3-Way color correction) on input
-MovieSequence.use_crop -> use_crop: boolean Crop image before processing
-MovieSequence.use_proxy -> use_proxy: boolean Use a preview proxy for this strip
-MovieSequence.use_translation -> use_translation: boolean Translate image before processing
-MulticamSequence.convert_float -> use_float: boolean Convert input to float data
-MulticamSequence.de_interlace -> use_deinterlace: boolean For video movies to remove fields
-MulticamSequence.flip_x -> use_flip_x: boolean Flip on the X axis
-MulticamSequence.flip_y -> use_flip_y: boolean Flip on the Y axis
-MulticamSequence.premultiply -> use_premultiply: boolean Convert RGB from key alpha to premultiplied alpha
-MulticamSequence.proxy_custom_directory -> use_proxy_custom_directory: boolean Use a custom directory to store data
-MulticamSequence.proxy_custom_file -> use_proxy_custom_file: boolean Use a custom file to read proxy data from
-MulticamSequence.reverse_frames -> use_reverse_frames: boolean Reverse frame order
-MulticamSequence.use_color_balance -> use_color_balance: boolean (3-Way color correction) on input
-MulticamSequence.use_crop -> use_crop: boolean Crop image before processing
-MulticamSequence.use_proxy -> use_proxy: boolean Use a preview proxy for this strip
-MulticamSequence.use_translation -> use_translation: boolean Translate image before processing
-MultiresModifier.external -> is_external: boolean, (read-only) Store multires displacements outside the .blend file, to save memory
-MultiresModifier.optimal_display -> show_only_control_edges: boolean Skip drawing/rendering of interior subdivided edges
-NetRenderSettings.master_broadcast -> use_master_broadcast: boolean broadcast master server address on local network
-NetRenderSettings.master_clear -> use_master_clear: boolean delete saved files on exit
-NetRenderSettings.slave_clear -> use_slave_clear: boolean delete downloaded files on exit
-NetRenderSettings.slave_outputlog -> use_slave_output_log: boolean Output render text log to console as well as sending it to the master
-NetRenderSettings.slave_thumb -> use_slave_thumb: boolean Generate thumbnails on slaves instead of master
-NlaStrip.active -> active: boolean, (read-only) NLA Strip is active
-NlaStrip.animated_influence -> use_animated_influence: boolean Influence setting is controlled by an F-Curve rather than automatically determined
-NlaStrip.animated_time -> use_animated_time: boolean Strip time is controlled by an F-Curve rather than automatically determined
-NlaStrip.animated_time_cyclic -> use_animated_time_cyclic: boolean Cycle the animated time within the action start & end
-NlaStrip.auto_blending -> use_auto_blend: boolean Number of frames for Blending In/Out is automatically determined from overlapping strips
-NlaStrip.muted -> mute: boolean NLA Strip is not evaluated
-NlaStrip.reversed -> use_reverse: boolean NLA Strip is played back in reverse order (only when timing is automatically determined)
-NlaStrip.selected -> select: boolean NLA Strip is selected
-NlaTrack.active -> active: boolean, (read-only) NLA Track is active
-NlaTrack.locked -> lock: boolean NLA Track is locked
-NlaTrack.muted -> mute: boolean NLA Track is not evaluated
-NlaTrack.selected -> select: boolean NLA Track is selected
-NlaTrack.solo -> is_solo: boolean, (read-only) NLA Track is evaluated itself (i.e. active Action and all other NLA Tracks in the same AnimData block are disabled)
-Object.draw_axis -> show_axis: boolean Displays the object's origin and axis
-Object.draw_bounds -> show_bounds: boolean Displays the object's bounds
-Object.draw_name -> show_name: boolean Displays the object's name
-Object.draw_texture_space -> show_texture_space: boolean Displays the object's texture space
-Object.draw_transparent -> show_transparent: boolean Enables transparent materials for the object (Mesh only)
-Object.draw_wire -> show_wire: boolean Adds the object's wireframe over solid drawing
-Object.duplis_used -> is_duplicator: boolean, (read-only)
-Object.layers -> layer: boolean Layers the object is on
-Object.lock_location -> lock_location: boolean Lock editing of location in the interface
-Object.lock_rotation -> lock_rotation: boolean Lock editing of rotation in the interface
-Object.lock_rotation_w -> lock_rotation_w: boolean Lock editing of 'angle' component of four-component rotations in the interface
-Object.lock_rotations_4d -> lock_rotations_4d: boolean Lock editing of four component rotations by components (instead of as Eulers)
-Object.lock_scale -> lock_scale: boolean Lock editing of scale in the interface
-Object.restrict_render -> restrict_render: boolean Restrict renderability
-Object.restrict_select -> restrict_select: boolean Restrict selection in the viewport
-Object.restrict_view -> restrict_view: boolean Restrict visibility in the viewport
-Object.selected -> select: boolean Object selection state
-Object.shape_key_edit_mode -> use_shape_key_edit_mode: boolean Apply shape keys in edit mode (for Meshes only)
-Object.shape_key_lock -> show_shape_key: boolean Always show the current Shape for this Object
-Object.slow_parent -> use_slow_parent: boolean Create a delay in the parent relationship
-Object.time_offset_add_parent -> use_time_offset_add_parent: boolean Add the parents time offset value
-Object.time_offset_edit -> use_time_offset_edit: boolean Use time offset when inserting keys and display time offset for F-Curve and action views
-Object.time_offset_parent -> use_time_offset_parent: boolean Apply the time offset to this objects parent relationship
-Object.time_offset_particle -> use_time_offset_particle: boolean Let the time offset work on the particle effect
-Object.use_dupli_faces_scale -> use_dupli_faces_scale: boolean Scale dupli based on face size
-Object.use_dupli_frames_speed -> use_dupli_frames_speed: boolean Set dupliframes to use the frame
-Object.use_dupli_verts_rotation -> use_dupli_verts_rotation: boolean Rotate dupli according to vertex normal
-Object.x_ray -> show_x_ray: boolean Makes the object draw in front of others
-ObjectActuator.add_linear_velocity -> use_add_linear_velocity: boolean Toggles between ADD and SET linV
-ObjectActuator.local_angular_velocity -> use_local_angular_velocity: boolean Angular velocity is defined in local coordinates
-ObjectActuator.local_force -> use_local_force: boolean Force is defined in local coordinates
-ObjectActuator.local_linear_velocity -> use_local_linear_velocity: boolean Velocity is defined in local coordinates
-ObjectActuator.local_location -> use_local_location: boolean Location is defined in local coordinates
-ObjectActuator.local_rotation -> use_local_rotation: boolean Rotation is defined in local coordinates
-ObjectActuator.local_torque -> use_local_torque: boolean Torque is defined in local coordinates
-ObjectActuator.servo_limit_x -> use_servo_limit_x: boolean Set limit to force along the X axis
-ObjectActuator.servo_limit_y -> use_servo_limit_y: boolean Set limit to force along the Y axis
-ObjectActuator.servo_limit_z -> use_servo_limit_z: boolean Set limit to force along the Z axis
-ObjectBase.layers -> layer: boolean Layers the object base is on
-ObjectBase.selected -> select: boolean Object base selection state
-ObstacleFluidSettings.active -> use: boolean Object contributes to the fluid simulation
-ObstacleFluidSettings.export_animated_mesh -> use_animated_mesh: boolean Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated pos/rot/scale IPOs do not require it
-Operator.has_reports -> has_reports: boolean, (read-only) Operator has a set of reports (warnings and errors) from last execution
-OperatorStrokeElement.flip -> use_flip: boolean
-OutflowFluidSettings.active -> use: boolean Object contributes to the fluid simulation
-OutflowFluidSettings.export_animated_mesh -> use_animated_mesh: boolean Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated pos/rot/scale IPOs do not require it
-Paint.fast_navigate -> show_low_resolution: boolean For multires, show low resolution while navigating the view
-Paint.show_brush -> show_brush: boolean
-Panel.bl_default_closed -> bl_use_closed: boolean
-Panel.bl_show_header -> bl_show_header: boolean
-ParentActuator.compound -> use_compound: boolean Add this object shape to the parent shape (only if the parent shape is already compound)
-ParentActuator.ghost -> use_ghost: boolean Make this object ghost while parented (only if not compound)
-ParticleBrush.use_puff_volume -> use_puff_volume: boolean Apply puff to unselected end-points, (helps maintain hair volume when puffing root)
-ParticleEdit.add_interpolate -> use_add_interpolate: boolean Interpolate new particles from the existing ones
-ParticleEdit.auto_velocity -> use_auto_velocity: boolean Calculate point velocities automatically
-ParticleEdit.draw_particles -> show_particles: boolean Draw actual particles
-ParticleEdit.editable -> is_editable: boolean, (read-only) A valid edit mode exists
-ParticleEdit.emitter_deflect -> use_emitter_deflect: boolean Keep paths from intersecting the emitter
-ParticleEdit.fade_time -> use_fade_time: boolean Fade paths and keys further away from current frame
-ParticleEdit.hair -> is_hair: boolean, (read-only) Editing hair
-ParticleEdit.keep_lengths -> use_preserve_lengths: boolean Keep path lengths constant
-ParticleEdit.keep_root -> use_preserve_root: boolean Keep root keys unmodified
-ParticleFluidSettings.drops -> use_drops: boolean Show drop particles
-ParticleFluidSettings.floats -> use_floats: boolean Show floating foam particles
-ParticleFluidSettings.tracer -> use_tracer: boolean Show tracer particles
-ParticleInstanceModifier.alive -> use_alive: boolean Show instances when particles are alive
-ParticleInstanceModifier.children -> use_children: boolean Create instances from child particles
-ParticleInstanceModifier.dead -> use_dead: boolean Show instances when particles are dead
-ParticleInstanceModifier.keep_shape -> use_preserve_shape: boolean Don't stretch the object
-ParticleInstanceModifier.normal -> use_normal: boolean Create instances from normal particles
-ParticleInstanceModifier.size -> use_size: boolean Use particle size to scale the instances
-ParticleInstanceModifier.unborn -> use_unborn: boolean Show instances when particles are unborn
-ParticleInstanceModifier.use_path -> use_path: boolean Create instances along particle paths
-ParticleSettings.abs_path_time -> use_absolute_path_time: boolean Path timing is in absolute frames
-ParticleSettings.animate_branching -> use_animate_branching: boolean Animate branching
-ParticleSettings.billboard_lock -> lock_billboard: boolean Lock the billboards align axis
-ParticleSettings.boids_2d -> lock_boids_to_surface: boolean Constrain boids to a surface
-ParticleSettings.branching -> use_branching: boolean Branch child paths from each other
-ParticleSettings.child_effector -> apply_effector_to_children: boolean Apply effectors to children
-ParticleSettings.child_guide -> apply_guide_to_children: boolean
-ParticleSettings.die_on_collision -> use_die_on_collision: boolean Particles die when they collide with a deflector object
-ParticleSettings.died -> use_died: boolean Show particles after they have died
-ParticleSettings.draw_health -> show_health: boolean Draw boid health
-ParticleSettings.emitter -> use_render_emitter: boolean Render emitter Object also
-ParticleSettings.enable_simplify -> use_simplify: boolean Remove child strands as the object becomes smaller on the screen
-ParticleSettings.even_distribution -> use_even_distribution: boolean Use even distribution from faces based on face areas or edge lengths
-ParticleSettings.grid_invert -> invert_grid: boolean Invert what is considered object and what is not
-ParticleSettings.hair_bspline -> use_hair_bspline: boolean Interpolate hair using B-Splines
-ParticleSettings.material_color -> show_material_color: boolean Draw particles using material's diffuse color
-ParticleSettings.num -> show_number: boolean Show particle number
-ParticleSettings.parent -> use_parents: boolean Render parent particles
-ParticleSettings.rand_group -> use_group_pick_random: boolean Pick objects from group randomly
-ParticleSettings.react_multiple -> use_react_multiple: boolean React multiple times
-ParticleSettings.react_start_end -> use_react_start_end: boolean Give birth to unreacted particles eventually
-ParticleSettings.render_adaptive -> use_render_adaptive: boolean Use adapative rendering for paths
-ParticleSettings.render_strand -> use_strand_primitive: boolean Use the strand primitive for rendering
-ParticleSettings.rotation_dynamic -> use_dynamic_rotation: boolean Sets rotation to dynamic/constant
-ParticleSettings.self_effect -> use_self_effect: boolean Particle effectors effect themselves
-ParticleSettings.show_size -> show_size: boolean Show particle size
-ParticleSettings.size_deflect -> use_size_deflect: boolean Use particle's size in deflection
-ParticleSettings.sizemass -> use_multiply_size_mass: boolean Multiply mass by particle size
-ParticleSettings.symmetric_branching -> use_symmetric_branching: boolean Start and end points are the same
-ParticleSettings.trand -> use_emit_random: boolean Emit in random order of elements
-ParticleSettings.unborn -> use_unborn: boolean Show particles before they are emitted
-ParticleSettings.use_global_dupli -> use_global_dupli: boolean Use object's global coordinates for duplication
-ParticleSettings.use_group_count -> use_group_count: boolean Use object multiple times in the same group
-ParticleSettings.velocity -> show_velocity: boolean Show particle velocity
-ParticleSettings.velocity_length -> use_velocity_length: boolean Multiply line length by particle speed
-ParticleSettings.viewport -> use_simplify_viewport: boolean
-ParticleSettings.whole_group -> use_whole_group: boolean Use whole group at once
-ParticleSystem.editable -> is_editable: boolean, (read-only) Particle system can be edited in particle mode
-ParticleSystem.edited -> is_edited: boolean, (read-only) Particle system has been edited in particle mode
-ParticleSystem.global_hair -> is_global_hair: boolean, (read-only) Hair keys are in global coordinate space
-ParticleSystem.hair_dynamics -> use_hair_dynamics: boolean Enable hair dynamics using cloth simulation
-ParticleSystem.keyed_timing -> use_keyed_timing: boolean Use key times
-ParticleSystem.multiple_caches -> has_multiple_caches: boolean, (read-only) Particle system has multiple point caches
-ParticleSystem.vertex_group_clump_negate -> invert_vertex_group_clump: boolean Negate the effect of the clump vertex group
-ParticleSystem.vertex_group_density_negate -> invert_vertex_group_density: boolean Negate the effect of the density vertex group
-ParticleSystem.vertex_group_field_negate -> invert_vertex_group_field: boolean Negate the effect of the field vertex group
-ParticleSystem.vertex_group_kink_negate -> invert_vertex_group_kink: boolean Negate the effect of the kink vertex group
-ParticleSystem.vertex_group_length_negate -> invert_vertex_group_length: boolean Negate the effect of the length vertex group
-ParticleSystem.vertex_group_rotation_negate -> invert_vertex_group_rotation: boolean Negate the effect of the rotation vertex group
-ParticleSystem.vertex_group_roughness1_negate -> invert_vertex_group_roughness1: boolean Negate the effect of the roughness 1 vertex group
-ParticleSystem.vertex_group_roughness2_negate -> invert_vertex_group_roughness2: boolean Negate the effect of the roughness 2 vertex group
-ParticleSystem.vertex_group_roughness_end_negate -> invert_vertex_group_roughness_end: boolean Negate the effect of the roughness end vertex group
-ParticleSystem.vertex_group_size_negate -> invert_vertex_group_size: boolean Negate the effect of the size vertex group
-ParticleSystem.vertex_group_tangent_negate -> invert_vertex_group_tangent: boolean Negate the effect of the tangent vertex group
-ParticleSystem.vertex_group_velocity_negate -> invert_vertex_group_velocity: boolean Negate the effect of the velocity vertex group
-ParticleTarget.valid -> is_valid: boolean Keyed particles target is valid
-PivotConstraint.use_relative_position -> use_relative_location: boolean Offset will be an absolute point in space instead of relative to the target
-PointCache.baked -> is_baked: boolean, (read-only)
-PointCache.baking -> is_baking: boolean, (read-only)
-PointCache.disk_cache -> use_disk_cache: boolean Save cache files to disk (.blend file must be saved first)
-PointCache.external -> use_external: boolean Read cache from an external location
-PointCache.has_skipped_frames-> frames_skipped: boolean, (read-only)
-PointCache.outdated -> is_outdated: boolean, (read-only)
-PointCache.quick_cache -> use_quick_cache: boolean Update simulation with cache steps
-PointCache.use_library_path -> use_library_path: boolean Use this files path when library linked into another file.
-PointDensity.turbulence -> use_turbulence: boolean Add directed noise to the density at render-time
-PointLamp.only_shadow -> use_only_shadow: boolean Causes light to cast shadows only without illuminating objects
-PointLamp.shadow_layer -> use_shadow_layer: boolean Causes only objects on the same layer to cast shadows
-PointLamp.sphere -> use_sphere: boolean Sets light intensity to zero beyond lamp distance
-PoseBone.has_ik -> is_in_ik_chain: boolean, (read-only) Is part of an IK chain
-NEGATE * PoseBone.ik_dof_x -> lock_ik_x: boolean Allow movement around the X axis
-NEGATE * PoseBone.ik_dof_y -> lock_ik_y: boolean Allow movement around the Y axis
-NEGATE * PoseBone.ik_dof_z -> lock_ik_z: boolean Allow movement around the Z axis
-PoseBone.ik_limit_x -> lock_ik_x: boolean Limit movement around the X axis
-PoseBone.ik_limit_y -> lock_ik_y: boolean Limit movement around the Y axis
-PoseBone.ik_limit_z -> lock_ik_z: boolean Limit movement around the Z axis
-PoseBone.ik_lin_control -> use_ik_lin_control: boolean Apply channel size as IK constraint if stretching is enabled
-PoseBone.ik_rot_control -> use_ik_rot_control: boolean Apply channel rotation as IK constraint
-PoseBone.lock_location -> lock_location: boolean Lock editing of location in the interface
-PoseBone.lock_rotation -> lock_rotation: boolean Lock editing of rotation in the interface
-PoseBone.lock_rotation_w -> lock_rotation_w: boolean Lock editing of 'angle' component of four-component rotations in the interface
-PoseBone.lock_rotations_4d -> lock_rotations_4d: boolean Lock editing of four component rotations by components (instead of as Eulers)
-PoseBone.lock_scale -> lock_scale: boolean Lock editing of scale in the interface
-PoseBone.selected -> select: boolean
-PoseTemplateSettings.generate_def_rig -> use_generate_deform_rig: boolean Create a copy of the metarig, constrainted by the generated rig
-Property.is_never_none -> is_never_none: boolean, (read-only) True when this value can't be set to None
-Property.is_readonly -> is_readonly: boolean, (read-only) Property is editable through RNA
-Property.is_required -> is_required: boolean, (read-only) False when this property is an optional argument in an RNA function
-Property.registered -> is_registered: boolean, (read-only) Property is registered as part of type registration
-Property.registered_optional -> is_registered_optional: boolean, (read-only) Property is optionally registered as part of type registration
-Property.use_output -> is_output: boolean, (read-only) True when this property is an output value from an RNA function
-PythonConstraint.script_error -> has_script_error: boolean, (read-only) The linked Python script has thrown an error
-PythonConstraint.use_targets -> use_targets: boolean Use the targets indicated in the constraint panel
-PythonController.debug -> use_debug: boolean Continuously reload the module from disk for editing external modules without restarting
-RandomActuator.always_true -> use_always_true: boolean Always false or always true
-RaySensor.x_ray_mode -> use_x_ray: boolean See through objects that don't have the property
-RegionView3D.box_clip -> use_box_clip: boolean Clip objects based on what's visible in other side views
-RegionView3D.box_preview -> show_synced_view: boolean Sync view position between side views
-RegionView3D.lock_rotation -> lock_rotation: boolean Lock view rotation in side views
-RenderEngine.bl_postprocess -> bl_use_postprocess: boolean
-RenderEngine.bl_preview -> bl_use_preview: boolean
-RenderLayer.all_z -> use_all_z: boolean, (read-only) Fill in Z values for solid faces in invisible layers, for masking
-RenderLayer.edge -> use_edge_enhance: boolean, (read-only) Render Edge-enhance in this Layer (only works for Solid faces)
-RenderLayer.enabled -> use: boolean, (read-only) Disable or enable the render layer
-RenderLayer.halo -> use_halo: boolean, (read-only) Render Halos in this Layer (on top of Solid)
-RenderLayer.pass_ao -> use_pass_ambient_occlusion: boolean, (read-only) Deliver AO pass
-RenderLayer.pass_ao_exclude -> exclude_ambient_occlusion: boolean, (read-only) Exclude AO pass from combined
-RenderLayer.pass_color -> use_pass_color: boolean, (read-only) Deliver shade-less color pass
-RenderLayer.pass_combined -> use_pass_combined: boolean, (read-only) Deliver full combined RGBA buffer
-RenderLayer.pass_diffuse -> use_pass_diffuse: boolean, (read-only) Deliver diffuse pass
-RenderLayer.pass_emit -> use_pass_emit: boolean, (read-only) Deliver emission pass
-RenderLayer.pass_emit_exclude -> exclude_emit: boolean, (read-only) Exclude emission pass from combined
-RenderLayer.pass_environment -> use_pass_environment: boolean, (read-only) Deliver environment lighting pass
-RenderLayer.pass_environment_exclude -> exclude_environment: boolean, (read-only) Exclude environment pass from combined
-RenderLayer.pass_indirect -> use_pass_indirect: boolean, (read-only) Deliver indirect lighting pass
-RenderLayer.pass_indirect_exclude -> exclude_indirect: boolean, (read-only) Exclude indirect pass from combined
-RenderLayer.pass_mist -> use_pass_mist: boolean, (read-only) Deliver mist factor pass (0.0-1.0)
-RenderLayer.pass_normal -> use_pass_normal: boolean, (read-only) Deliver normal pass
-RenderLayer.pass_object_index -> use_pass_object_index: boolean, (read-only) Deliver object index pass
-RenderLayer.pass_reflection -> use_pass_reflection: boolean, (read-only) Deliver raytraced reflection pass
-RenderLayer.pass_reflection_exclude -> exclude_reflection: boolean, (read-only) Exclude raytraced reflection pass from combined
-RenderLayer.pass_refraction -> use_pass_refraction: boolean, (read-only) Deliver raytraced refraction pass
-RenderLayer.pass_refraction_exclude -> exclude_refraction: boolean, (read-only) Exclude raytraced refraction pass from combined
-RenderLayer.pass_shadow -> use_pass_shadow: boolean, (read-only) Deliver shadow pass
-RenderLayer.pass_shadow_exclude -> exclude_shadow: boolean, (read-only) Exclude shadow pass from combined
-RenderLayer.pass_specular -> use_pass_specular: boolean, (read-only) Deliver specular pass
-RenderLayer.pass_specular_exclude -> exclude_specular: boolean, (read-only) Exclude specular pass from combined
-RenderLayer.pass_uv -> use_pass_uv: boolean, (read-only) Deliver texture UV pass
-RenderLayer.pass_vector -> use_pass_vector: boolean, (read-only) Deliver speed vector pass
-RenderLayer.pass_z -> use_pass_z: boolean, (read-only) Deliver Z values pass
-RenderLayer.sky -> use_sky: boolean, (read-only) Render Sky in this Layer
-RenderLayer.solid -> use_solid: boolean, (read-only) Render Solid faces in this Layer
-RenderLayer.strand -> use_strand: boolean, (read-only) Render Strands in this Layer
-RenderLayer.visible_layers -> layer: boolean, (read-only) Scene layers included in this render layer
-RenderLayer.zmask -> use_zmask: boolean, (read-only) Only render what's in front of the solid z values
-RenderLayer.zmask_layers -> layer_zmask: boolean, (read-only) Zmask scene layers
-RenderLayer.zmask_negate -> invert_zmask: boolean, (read-only) For Zmask, only render what is behind solid z values instead of in front
-RenderLayer.ztransp -> use_ztransp: boolean, (read-only) Render Z-Transparent faces in this Layer (On top of Solid and Halos)
-RenderSettings.backbuf -> use_backbuf: boolean Render backbuffer image
-RenderSettings.bake_active -> use_bake_active_to_selected: boolean Bake shading on the surface of selected objects to the active object
-RenderSettings.bake_clear -> use_bake_clear: boolean Clear Images before baking
-RenderSettings.bake_enable_aa -> use_bake_antialiasing: boolean Enables Anti-aliasing
-RenderSettings.bake_normalized -> use_bake_normalized: boolean With displacement normalize to the distance, with ambient occlusion normalize without using material settings
-RenderSettings.cineon_log -> use_cineon_log: boolean Convert to logarithmic color space
-RenderSettings.color_management -> use_color_management: boolean Use color profiles and gamma corrected imaging pipeline
-RenderSettings.crop_to_border -> use_crop_to_border: boolean Crop the rendered frame to the defined border size
-RenderSettings.edge -> use_edge_enhance: boolean use_Create a toon outline around the edges of geometry
-RenderSettings.exr_half -> use_exr_half: boolean Use 16 bit floats instead of 32 bit floats per channel
-RenderSettings.exr_preview -> use_exr_preview: boolean When rendering animations, save JPG preview images in same directory
-RenderSettings.exr_zbuf -> use_exr_zbuf: boolean Save the z-depth per pixel (32 bit unsigned int zbuffer)
-RenderSettings.ffmpeg_autosplit -> use_ffmpeg_autosplit: boolean Autosplit output at 2GB boundary
-RenderSettings.fields -> use_fields: boolean Render image to two fields per frame, for interlaced TV output
-RenderSettings.fields_still -> use_fields_still: boolean Disable the time difference between fields
-RenderSettings.free_image_textures -> use_free_image_textures: boolean Free all image texture from memory after render, to save memory before compositing
-RenderSettings.free_unused_nodes -> use_free_unused_nodes: boolean Free Nodes that are not used while compositing, to save memory
-RenderSettings.full_sample -> use_full_sample: boolean Save for every anti-aliasing sample the entire RenderLayer results. This solves anti-aliasing issues with compositing
-RenderSettings.is_movie_format -> is_movie_format: boolean, (read-only) When true the format is a movie
-RenderSettings.jpeg2k_ycc -> use_jpeg2k_ycc: boolean Save luminance-chrominance-chrominance channels instead of RGB colors
-RenderSettings.motion_blur -> use_motion_blur: boolean Use multi-sampled 3D scene motion blur
-RenderSettings.multiple_engines -> has_multiple_engines: boolean, (read-only) More than one rendering engine is available
-RenderSettings.render_antialiasing -> use_antialiasing: boolean Render and combine multiple samples per pixel to prevent jagged edges
-RenderSettings.render_stamp -> use_stamp: boolean Render the stamp info text in the rendered image
-RenderSettings.save_buffers -> use_save_buffers: boolean Save tiles for all RenderLayers and SceneNodes to files in the temp directory (saves memory, required for Full Sample)
-RenderSettings.simplify_triangulate -> use_simplify_triangulate: boolean Disables non-planer quads being triangulated
-RenderSettings.single_layer -> use_single_layer: boolean Only render the active layer
-RenderSettings.stamp_camera -> use_stamp_camera: boolean Include the name of the active camera in image metadata
-RenderSettings.stamp_date -> use_stamp_date: boolean Include the current date in image metadata
-RenderSettings.stamp_filename -> use_stamp_filename: boolean Include the filename of the .blend file in image metadata
-RenderSettings.stamp_frame -> use_stamp_frame: boolean Include the frame number in image metadata
-RenderSettings.stamp_marker -> use_stamp_marker: boolean Include the name of the last marker in image metadata
-RenderSettings.stamp_note -> use_stamp_note: boolean Include a custom note in image metadata
-RenderSettings.stamp_render_time -> use_stamp_render_time: boolean Include the render time in the stamp image
-RenderSettings.stamp_scene -> use_stamp_scene: boolean Include the name of the active scene in image metadata
-RenderSettings.stamp_sequencer_strip -> use_stamp_sequencer_strip: boolean Include the name of the foreground sequence strip in image metadata
-RenderSettings.stamp_time -> use_stamp_time: boolean Include the render frame as HH:MM:SS.FF in image metadata
-RenderSettings.tiff_bit -> use_tiff_16bit: boolean Save TIFF with 16 bits per channel
-RenderSettings.use_border -> use_border: boolean Render a user-defined border region, within the frame size. Note, this disables save_buffers and full_sample
-RenderSettings.use_compositing -> use_compositing: boolean Process the render result through the compositing pipeline, if compositing nodes are enabled
-RenderSettings.use_envmaps -> use_envmaps: boolean Calculate environment maps while rendering
-RenderSettings.use_file_extension -> use_file_extension: boolean Add the file format extensions to the rendered file name (eg: filename + .jpg)
-RenderSettings.use_game_engine -> use_game_engine: boolean, (read-only) Current rendering engine is a game engine
-RenderSettings.use_instances -> use_instances: boolean Instance support leads to effective memory reduction when using duplicates
-RenderSettings.use_local_coords -> use_local_coords: boolean Vertex coordinates are stored localy on each primitive. Increases memory usage, but may have impact on speed
-RenderSettings.use_overwrite -> use_overwrite: boolean Overwrite existing files while rendering
-RenderSettings.use_placeholder -> use_placeholder: boolean Create empty placeholder files while rendering frames (similar to Unix 'touch')
-RenderSettings.use_radiosity -> use_radiosity: boolean Calculate radiosity in a pre-process before rendering
-RenderSettings.use_raytracing -> use_raytrace: boolean Pre-calculate the raytrace accelerator and render raytracing effects
-RenderSettings.use_sequencer -> use_sequencer: boolean Process the render (and composited) result through the video sequence editor pipeline, if sequencer strips exist
-RenderSettings.use_sequencer_gl_preview -> use_sequencer_gl_preview: boolean
-RenderSettings.use_sequencer_gl_render -> use_sequencer_gl_render: boolean
-RenderSettings.use_shadows -> use_shadows: boolean Calculate shadows while rendering
-RenderSettings.use_simplify -> use_simplify: boolean Enable simplification of scene for quicker preview renders
-RenderSettings.use_sss -> use_sss: boolean Calculate sub-surface scattering in materials rendering
-RenderSettings.use_textures -> use_textures: boolean Use textures to affect material properties
-NEGATE * RigidBodyJointConstraint.disable_linked_collision -> use_linked_collision: boolean Disable collision between linked bodies
-RigidBodyJointConstraint.draw_pivot -> show_pivot: boolean Display the pivot point and rotation in 3D view
-Scene.frame_drop -> use_frame_drop: boolean Play back dropping frames if frame display is too slow
-Scene.layers -> layer: boolean Layers visible when rendering the scene
-Scene.mute_audio -> mute_audio: boolean Play back of audio from Sequence Editor will be muted
-Scene.nla_tweakmode_on -> use_nla_tweakmode: boolean, (read-only) Indicates whether there is any action referenced by NLA being edited. Strictly read-only
-Scene.pov_radio_always_sample -> use_pov_radio_always_sample: boolean Only use the data from the pretrace step and not gather any new samples during the final radiosity pass
-Scene.pov_radio_display_advanced -> show_pov_radio_advanced: boolean Show advanced options
-Scene.pov_radio_enable -> use_pov_radio: boolean Enable povrays radiosity calculation
-Scene.pov_radio_media -> use_pov_radio_media: boolean Radiosity estimation can be affected by media
-Scene.pov_radio_normal -> use_pov_radio_normal: boolean Radiosity estimation can be affected by normals
-Scene.scrub_audio -> use_audio_scrub: boolean Play audio from Sequence Editor while scrubbing
-Scene.sync_audio -> use_audio_sync: boolean Play back and sync with audio clock, dropping frames if frame display is too slow
-Scene.use_gravity -> use_gravity: boolean Use global gravity for all dynamics
-Scene.use_nodes -> use_nodes: boolean Enable the compositing node tree
-Scene.use_preview_range -> use_preview_range: boolean Use an alternative start/end frame for UI playback, rather than the scene start/end frame
-SceneGameData.activity_culling -> use_activity_culling: boolean Activity culling is enabled
-SceneGameData.auto_start -> use_auto_start: boolean Automatically start game at load time
-SceneGameData.fullscreen -> show_fullscreen: boolean Starts player in a new fullscreen display
-SceneGameData.glsl_extra_textures -> use_glsl_extra_textures: boolean Use extra textures like normal or specular maps for GLSL rendering
-SceneGameData.glsl_lights -> use_glsl_lights: boolean Use lights for GLSL rendering
-SceneGameData.glsl_nodes -> use_glsl_nodes: boolean Use nodes for GLSL rendering
-SceneGameData.glsl_ramps -> use_glsl_ramps: boolean Use ramps for GLSL rendering
-SceneGameData.glsl_shaders -> use_glsl_shaders: boolean Use shaders for GLSL rendering
-SceneGameData.glsl_shadows -> use_glsl_shadows: boolean Use shadows for GLSL rendering
-SceneGameData.show_debug_properties -> show_debug_properties: boolean Show properties marked for debugging while the game runs
-SceneGameData.show_framerate_profile -> show_framerate_profile: boolean Show framerate and profiling information while the game runs
-SceneGameData.show_physics_visualization -> show_physics_visualization: boolean Show a visualization of physics bounds and interactions
-SceneGameData.use_animation_record -> use_animation_record: boolean Record animation to fcurves
-SceneGameData.use_deprecation_warnings -> use_deprecation_warnings: boolean Print warnings when using deprecated features in the python API
-SceneGameData.use_display_lists -> use_display_lists: boolean Use display lists to speed up rendering by keeping geometry on the GPU
-SceneGameData.use_frame_rate -> use_frame_rate: boolean Respect the frame rate rather than rendering as many frames as possible
-SceneGameData.use_occlusion_culling -> use_occlusion_culling: boolean Use optimized Bullet DBVT tree for view frustum and occlusion culling
-SceneRenderLayer.all_z -> use_all_z: boolean Fill in Z values for solid faces in invisible layers, for masking
-SceneRenderLayer.edge -> use_edge_enhance: boolean Render Edge-enhance in this Layer (only works for Solid faces)
-SceneRenderLayer.enabled -> use: boolean Disable or enable the render layer
-SceneRenderLayer.halo -> use_halo: boolean Render Halos in this Layer (on top of Solid)
-SceneRenderLayer.pass_ao -> use_pass_ambient_occlusion: boolean Deliver AO pass
-SceneRenderLayer.pass_ao_exclude -> exclude_ambient_occlusion: boolean Exclude AO pass from combined
-SceneRenderLayer.pass_color -> use_pass_color: boolean Deliver shade-less color pass
-SceneRenderLayer.pass_combined -> use_pass_combined: boolean Deliver full combined RGBA buffer
-SceneRenderLayer.pass_diffuse -> use_pass_diffuse: boolean Deliver diffuse pass
-SceneRenderLayer.pass_emit -> use_pass_emit: boolean Deliver emission pass
-SceneRenderLayer.pass_emit_exclude -> exclude_emit: boolean Exclude emission pass from combined
-SceneRenderLayer.pass_environment -> use_pass_environment: boolean Deliver environment lighting pass
-SceneRenderLayer.pass_environment_exclude -> exclude_environment: boolean Exclude environment pass from combined
-SceneRenderLayer.pass_indirect -> use_pass_indirect: boolean Deliver indirect lighting pass
-SceneRenderLayer.pass_indirect_exclude -> exclude_indirect: boolean Exclude indirect pass from combined
-SceneRenderLayer.pass_mist -> use_pass_mist: boolean Deliver mist factor pass (0.0-1.0)
-SceneRenderLayer.pass_normal -> use_pass_normal: boolean Deliver normal pass
-SceneRenderLayer.pass_object_index -> use_pass_object_index: boolean Deliver object index pass
-SceneRenderLayer.pass_reflection -> use_pass_reflection: boolean Deliver raytraced reflection pass
-SceneRenderLayer.pass_reflection_exclude -> exclude_reflection: boolean Exclude raytraced reflection pass from combined
-SceneRenderLayer.pass_refraction -> use_pass_refraction: boolean Deliver raytraced refraction pass
-SceneRenderLayer.pass_refraction_exclude -> exclude_refraction: boolean Exclude raytraced refraction pass from combined
-SceneRenderLayer.pass_shadow -> use_pass_shadow: boolean Deliver shadow pass
-SceneRenderLayer.pass_shadow_exclude -> exclude_shadow: boolean Exclude shadow pass from combined
-SceneRenderLayer.pass_specular -> use_pass_specular: boolean Deliver specular pass
-SceneRenderLayer.pass_specular_exclude -> exclude_specular: boolean Exclude specular pass from combined
-SceneRenderLayer.pass_uv -> use_pass_uv: boolean Deliver texture UV pass
-SceneRenderLayer.pass_vector -> use_pass_vector: boolean Deliver speed vector pass
-SceneRenderLayer.pass_z -> use_pass_z: boolean Deliver Z values pass
-SceneRenderLayer.sky -> use_sky: boolean Render Sky in this Layer
-SceneRenderLayer.solid -> use_solid: boolean Render Solid faces in this Layer
-SceneRenderLayer.strand -> use_strand: boolean Render Strands in this Layer
-SceneRenderLayer.visible_layers -> layer: boolean Scene layers included in this render layer
-SceneRenderLayer.zmask -> use_zmask: boolean Only render what's in front of the solid z values
-SceneRenderLayer.zmask_layers -> layer_zmask: boolean Zmask scene layers
-SceneRenderLayer.zmask_negate -> invert_zmask: boolean For Zmask, only render what is behind solid z values instead of in front
-SceneRenderLayer.ztransp -> use_ztransp: boolean Render Z-Transparent faces in this Layer (On top of Solid and Halos)
-SceneSequence.convert_float -> use_float: boolean Convert input to float data
-SceneSequence.de_interlace -> use_deinterlace: boolean For video movies to remove fields
-SceneSequence.flip_x -> use_flip_x: boolean Flip on the X axis
-SceneSequence.flip_y -> use_flip_y: boolean Flip on the Y axis
-SceneSequence.premultiply -> use_premultiply: boolean Convert RGB from key alpha to premultiplied alpha
-SceneSequence.proxy_custom_directory -> use_proxy_custom_directory: boolean Use a custom directory to store data
-SceneSequence.proxy_custom_file -> use_proxy_custom_file: boolean Use a custom file to read proxy data from
-SceneSequence.reverse_frames -> use_reverse_frames: boolean Reverse frame order
-SceneSequence.use_color_balance -> use_color_balance: boolean (3-Way color correction) on input
-SceneSequence.use_crop -> use_crop: boolean Crop image before processing
-SceneSequence.use_proxy -> use_proxy: boolean Use a preview proxy for this strip
-SceneSequence.use_translation -> use_translation: boolean Translate image before processing
-Scopes.use_full_resolution -> use_full_resolution: boolean Sample every pixel of the image
-Screen.animation_playing -> is_animation_playing: boolean, (read-only) Animation playback is active
-Screen.fullscreen -> is_fullscreen: boolean, (read-only) An area is maximised, filling this screen
-ScrewModifier.use_normal_calculate -> use_normal_calculate: boolean Calculate the order of edges (needed for meshes, but not curves)
-ScrewModifier.use_normal_flip -> use_normal_flip: boolean Flip normals of lathed faces
-ScrewModifier.use_object_screw_offset -> use_object_screw_offset: boolean Use the distance between the objects to make a screw
-Sculpt.lock_x -> lock_x: boolean Disallow changes to the X axis of vertices
-Sculpt.lock_y -> lock_y: boolean Disallow changes to the Y axis of vertices
-Sculpt.lock_z -> lock_z: boolean Disallow changes to the Z axis of vertices
-Sculpt.symmetry_x -> use_symmetry_x: boolean Mirror brush across the X axis
-Sculpt.symmetry_y -> use_symmetry_y: boolean Mirror brush across the Y axis
-Sculpt.symmetry_z -> use_symmetry_z: boolean Mirror brush across the Z axis
-Sensor.expanded -> show_expanded: boolean Set sensor expanded in the user interface
-Sensor.invert -> invert: boolean Invert the level(output) of this sensor
-Sensor.level -> use_level: boolean Level detector, trigger controllers of new states (only applicable upon logic state transition)
-Sensor.pulse_false_level -> use_pulse_false_level: boolean Activate FALSE level triggering (pulse mode)
-Sensor.pulse_true_level -> use_pulse_true_level: boolean Activate TRUE level triggering (pulse mode)
-Sensor.tap -> use_tap: boolean Trigger controllers only for an instant, even while the sensor remains true
-Sequence.frame_locked -> use_frame_lock: boolean Lock the animation curve to the global frame counter
-Sequence.left_handle_selected -> select_left_handle: boolean
-Sequence.lock -> lock: boolean Lock strip so that it can't be transformed
-Sequence.mute -> mute: boolean
-Sequence.right_handle_selected -> select_right_handle: boolean
-Sequence.selected -> select: boolean
-Sequence.use_effect_default_fade -> use_default_fade: boolean Fade effect using the built-in default (usually make transition as long as effect strip)
-SequenceColorBalance.inverse_gain -> invert_gain: boolean
-SequenceColorBalance.inverse_gamma -> invert_gamma: boolean
-SequenceColorBalance.inverse_lift -> invert_lift: boolean
-ShaderNodeExtendedMaterial.diffuse -> use_diffuse: boolean Material Node outputs Diffuse
-ShaderNodeExtendedMaterial.invert_normal -> invert_normal: boolean Material Node uses inverted normal
-ShaderNodeExtendedMaterial.specular -> use_specular: boolean Material Node outputs Specular
-ShaderNodeMapping.clamp_maximum -> use_max: boolean Clamp the output coordinate to a maximum value
-ShaderNodeMapping.clamp_minimum -> use_min: boolean Clamp the output coordinate to a minimum value
-ShaderNodeMaterial.diffuse -> use_diffuse: boolean Material Node outputs Diffuse
-ShaderNodeMaterial.invert_normal -> invert_normal: boolean Material Node uses inverted normal
-ShaderNodeMaterial.specular -> use_specular: boolean Material Node outputs Specular
-ShaderNodeMixRGB.alpha -> use_alpha: boolean Include alpha of second input in this operation
-ShapeActionActuator.continue_last_frame -> use_continue_last_frame: boolean Restore last frame when switching on/off, otherwise play from the start each time
-ShapeKey.mute -> mute: boolean Mute this shape key
-ShrinkwrapModifier.cull_back_faces -> use_cull_back_faces: boolean Stop vertices from projecting to a back face on the target
-ShrinkwrapModifier.cull_front_faces -> use_cull_front_faces: boolean Stop vertices from projecting to a front face on the target
-ShrinkwrapModifier.keep_above_surface -> use_keep_above_surface: boolean
-ShrinkwrapModifier.negative -> use_negative_direction: boolean Allow vertices to move in the negative direction of axis
-ShrinkwrapModifier.positive -> use_positive_direction: boolean Allow vertices to move in the positive direction of axis
-ShrinkwrapModifier.x -> use_project_x: boolean
-ShrinkwrapModifier.y -> use_project_y: boolean
-ShrinkwrapModifier.z -> use_project_z: boolean
-SimpleDeformModifier.lock_x_axis -> lock_x: boolean
-SimpleDeformModifier.lock_y_axis -> lock_y: boolean
-SimpleDeformModifier.relative -> use_relative: boolean Sets the origin of deform space to be relative to the object
-SmokeDomainSettings.dissolve_smoke -> use_dissolve_smoke: boolean Enable smoke to disappear over time
-SmokeDomainSettings.dissolve_smoke_log -> use_dissolve_smoke_log: boolean Using 1/x
-SmokeDomainSettings.highres -> use_high_resolution: boolean Enable high resolution (using amplification)
-SmokeDomainSettings.initial_velocity -> use_initial_velocity: boolean Smoke inherits it's velocity from the emitter particle
-SmokeDomainSettings.viewhighres -> show_high_resolution: boolean Show high resolution (using amplification)
-NEGATE * SmokeFlowSettings.outflow -> use_outflow: boolean Deletes smoke from simulation
-SmoothModifier.x -> use_x: boolean
-SmoothModifier.y -> use_y: boolean
-SmoothModifier.z -> use_z: boolean
-SoftBodySettings.auto_step -> use_auto_step: boolean Use velocities for automagic step sizes
-SoftBodySettings.diagnose -> use_diagnose: boolean Turn on SB diagnose console prints
-SoftBodySettings.edge_collision -> use_edge_collision: boolean Edges collide too
-SoftBodySettings.estimate_matrix -> use_estimate_matrix: boolean estimate matrix .. split to COM , ROT ,SCALE
-SoftBodySettings.face_collision -> use_face_collision: boolean Faces collide too, SLOOOOOW warning
-SoftBodySettings.new_aero -> use_new_aero: boolean New aero(uses angle and length)
-SoftBodySettings.self_collision -> use_self_collision: boolean Enable naive vertex ball self collision
-SoftBodySettings.stiff_quads -> use_stiff_quads: boolean Adds diagonal springs on 4-gons
-SoftBodySettings.use_edges -> use_edges: boolean Use Edges as springs
-SoftBodySettings.use_goal -> use_goal: boolean Define forces for vertices to stick to animated position
-SolidifyModifier.invert -> invert_vertex_group: boolean Invert the vertex group influence
-SolidifyModifier.use_even_offset -> use_even_offset: boolean Maintain thickness by adjusting for sharp corners (slow, disable when not needed)
-SolidifyModifier.use_quality_normals -> use_quality_normals: boolean Calculate normals which result in more even thickness (slow, disable when not needed)
-SolidifyModifier.use_rim -> use_rim: boolean Create edge loops between the inner and outer surfaces on face edges (slow, disable when not needed)
-SolidifyModifier.use_rim_material -> use_rim_material: boolean Use in the next material for rim faces
-Sound.caching -> use_ram_cache: boolean The sound file is decoded and loaded into RAM
-SoundActuator.enable_sound_3d -> use_3d_sound: boolean Enable/Disable 3D Sound
-SpaceConsole.show_report_debug -> show_report_debug: boolean Display debug reporting info
-SpaceConsole.show_report_error -> show_report_error: boolean Display error text
-SpaceConsole.show_report_info -> show_report_info: boolean Display general information
-SpaceConsole.show_report_operator -> show_report_operator: boolean Display the operator log
-SpaceConsole.show_report_warn -> show_report_warning: boolean Display warnings
-SpaceDopeSheetEditor.automerge_keyframes -> use_automerge_keyframes: boolean Automatically merge nearby keyframes
-SpaceDopeSheetEditor.realtime_updates -> use_realtime_updates: boolean When transforming keyframes, changes to the animation data are flushed to other views
-SpaceDopeSheetEditor.show_cframe_indicator -> show_frame_indicator: boolean Show frame number beside the current frame indicator line
-SpaceDopeSheetEditor.show_seconds -> show_seconds: boolean, (read-only) Show timing in seconds not frames
-SpaceDopeSheetEditor.show_sliders -> show_sliders: boolean Show sliders beside F-Curve channels
-SpaceDopeSheetEditor.use_marker_sync -> use_marker_sync: boolean Sync Markers with keyframe edits
-SpaceGraphEditor.automerge_keyframes -> use_automerge_keyframes: boolean Automatically merge nearby keyframes
-SpaceGraphEditor.has_ghost_curves -> has_ghost_curves: boolean Graph Editor instance has some ghost curves stored
-SpaceGraphEditor.only_selected_curves_handles -> use_only_selected_curves_handles: boolean Only keyframes of selected F-Curves are visible and editable
-SpaceGraphEditor.only_selected_keyframe_handles -> use_only_selected_keyframe_handles: boolean Only show and edit handles of selected keyframes
-SpaceGraphEditor.realtime_updates -> use_realtime_updates: boolean When transforming keyframes, changes to the animation data are flushed to other views
-SpaceGraphEditor.show_cframe_indicator -> show_frame_indicator: boolean Show frame number beside the current frame indicator line
-SpaceGraphEditor.show_cursor -> show_cursor: boolean Show 2D cursor
-SpaceGraphEditor.show_handles -> show_handles: boolean Show handles of Bezier control points
-SpaceGraphEditor.show_seconds -> show_seconds: boolean, (read-only) Show timing in seconds not frames
-SpaceGraphEditor.show_sliders -> show_sliders: boolean Show sliders beside F-Curve channels
-SpaceImageEditor.draw_repeated -> show_repeated: boolean Draw the image repeated outside of the main view
-SpaceImageEditor.image_painting -> use_image_paint: boolean Enable image painting mode
-SpaceImageEditor.image_pin -> use_image_pin: boolean Display current image regardless of object selection
-SpaceImageEditor.show_paint -> show_paint: boolean, (read-only) Show paint related properties
-SpaceImageEditor.show_render -> show_render: boolean, (read-only) Show render related properties
-SpaceImageEditor.show_uvedit -> show_uvedit: boolean, (read-only) Show UV editing related properties
-SpaceImageEditor.update_automatically -> use_realtime_updates: boolean Update other affected window spaces automatically to reflect changes during interactive operations such as transform
-SpaceImageEditor.use_grease_pencil -> use_grease_pencil: boolean Display and edit the grease pencil freehand annotations overlay
-SpaceLogicEditor.actuators_show_active_objects -> show_actuators_active_objects: boolean Show actuators of active object
-SpaceLogicEditor.actuators_show_active_states -> show_actuators_active_states: boolean Show only actuators connected to active states
-SpaceLogicEditor.actuators_show_linked_controller -> show_actuators_linked_controller: boolean Show linked objects to the actuator
-SpaceLogicEditor.actuators_show_selected_objects -> show_actuators_selected_objects: boolean Show actuators of all selected objects
-SpaceLogicEditor.controllers_show_active_objects -> show_controllers_active_objects: boolean Show controllers of active object
-SpaceLogicEditor.controllers_show_linked_controller -> show_controllers_linked_controller: boolean Show linked objects to sensor/actuator
-SpaceLogicEditor.controllers_show_selected_objects -> show_controllers_selected_objects: boolean Show controllers of all selected objects
-SpaceLogicEditor.sensors_show_active_objects -> show_sensors_active_objects: boolean Show sensors of active object
-SpaceLogicEditor.sensors_show_active_states -> show_sensors_active_states: boolean Show only sensors connected to active states
-SpaceLogicEditor.sensors_show_linked_controller -> show_sensors_linked_controller: boolean Show linked objects to the controller
-SpaceLogicEditor.sensors_show_selected_objects -> show_sensors_selected_objects: boolean Show sensors of all selected objects
-SpaceNLA.realtime_updates -> use_realtime_updates: boolean When transforming strips, changes to the animation data are flushed to other views
-SpaceNLA.show_cframe_indicator -> show_frame_indicator: boolean Show frame number beside the current frame indicator line
-SpaceNLA.show_seconds -> show_seconds: boolean, (read-only) Show timing in seconds not frames
-SpaceNLA.show_strip_curves -> show_strip_curves: boolean Show influence curves on strips
-SpaceNodeEditor.backdrop -> show_backdrop: boolean Use active Viewer Node output as backdrop for compositing nodes
-SpaceOutliner.match_case_sensitive -> use_match_case_sensitive: boolean Only use case sensitive matches of search string
-SpaceOutliner.match_complete -> use_match_complete: boolean Only use complete matches of search string
-SpaceOutliner.show_restriction_columns -> show_restriction_columns: boolean Show column
-SpaceProperties.brush_texture -> show_brush_texture: boolean Show brush textures
-SpaceProperties.use_pin_id -> use_pin_id: boolean Use the pinned context
-SpaceSequenceEditor.draw_frames -> show_frames: boolean Draw frames rather than seconds
-SpaceSequenceEditor.draw_safe_margin -> show_safe_margin: boolean Draw title safe margins in preview
-SpaceSequenceEditor.separate_color_preview -> show_separate_color: boolean Separate color channels in preview
-SpaceSequenceEditor.show_cframe_indicator -> show_frame_indicator: boolean Show frame number beside the current frame indicator line
-SpaceSequenceEditor.use_grease_pencil -> use_grease_pencil: boolean Display and edit the grease pencil freehand annotations overlay
-SpaceSequenceEditor.use_marker_sync -> use_marker_sync: boolean Transform markers as well as strips
-SpaceTextEditor.find_all -> use_find_all: boolean Search in all text datablocks, instead of only the active one
-SpaceTextEditor.find_wrap -> use_find_wrap: boolean Search again from the start of the file when reaching the end
-SpaceTextEditor.line_numbers -> show_line_numbers: boolean Show line numbers next to the text
-SpaceTextEditor.live_edit -> use_live_edit: boolean Run python while editing
-SpaceTextEditor.overwrite -> use_overwrite: boolean Overwrite characters when typing rather than inserting them
-SpaceTextEditor.syntax_highlight -> show_syntax_highlight: boolean Syntax highlight for scripting
-SpaceTextEditor.word_wrap -> use_word_wrap: boolean Wrap words if there is not enough horizontal space
-SpaceTimeline.only_selected -> show_only_selected: boolean Show keyframes for active Object and/or its selected channels only
-SpaceTimeline.play_all_3d -> use_play_3d_editors: boolean
-SpaceTimeline.play_anim -> use_play_animation_editors: boolean
-SpaceTimeline.play_buttons -> use_play_properties_editors: boolean
-SpaceTimeline.play_image -> use_play_image_editors: boolean
-SpaceTimeline.play_nodes -> use_play_node_editors: boolean
-SpaceTimeline.play_sequencer -> use_play_sequence_editors: boolean
-SpaceTimeline.play_top_left -> use_play_top_left_3d_editor: boolean
-SpaceTimeline.show_cframe_indicator -> show_frame_indicator: boolean Show frame number beside the current frame indicator line
-SpaceUVEditor.constrain_to_image_bounds -> use_constrain_to_image_bounds: boolean Constraint to stay within the image bounds while editing
-SpaceUVEditor.draw_modified_edges -> show_modified_edges: boolean Draw edges after modifiers are applied
-SpaceUVEditor.draw_other_objects -> show_other_objects: boolean Draw other selected objects that share the same image
-SpaceUVEditor.draw_smooth_edges -> show_smooth_edges: boolean Draw UV edges anti-aliased
-SpaceUVEditor.draw_stretch -> show_stretch: boolean Draw faces colored according to the difference in shape between UVs and their 3D coordinates (blue for low distortion, red for high distortion)
-SpaceUVEditor.live_unwrap -> use_live_unwrap: boolean Continuously unwrap the selected UV island while transforming pinned vertices
-SpaceUVEditor.normalized_coordinates -> show_normalized_coordinates: boolean Display UV coordinates from 0.0 to 1.0 rather than in pixels
-SpaceUVEditor.snap_to_pixels -> use_snap_to_pixels: boolean Snap UVs to pixel locations while editing
-SpaceView3D.all_object_origins -> show_all_objects_origin: boolean Show the object origin center dot for all (selected and unselected) objects
-SpaceView3D.display_background_images -> show_background_images: boolean Display reference images behind objects in the 3D View
-SpaceView3D.display_floor -> show_floor: boolean Show the ground plane grid in perspective view
-SpaceView3D.display_render_override -> show_only_render: boolean Display only objects which will be rendered
-SpaceView3D.display_x_axis -> show_axis_x: boolean Show the X axis line in perspective view
-SpaceView3D.display_y_axis -> show_axis_y: boolean Show the Y axis line in perspective view
-SpaceView3D.display_z_axis -> show_axis_z: boolean Show the Z axis line in perspective view
-SpaceView3D.layers -> layer: boolean Layers visible in this 3D View
-SpaceView3D.lock_camera_and_layers -> lock_camera_and_layers: boolean Use the scene's active camera and layers in this view, rather than local layers
-SpaceView3D.manipulator -> use_manipulator: boolean Use a 3D manipulator widget for controlling transforms
-SpaceView3D.manipulator_rotate -> use_manipulator_rotate: boolean Use the manipulator for rotation transformations
-SpaceView3D.manipulator_scale -> use_manipulator_scale: boolean Use the manipulator for scale transformations
-SpaceView3D.manipulator_translate -> use_manipulator_translate: boolean Use the manipulator for movement transformations
-SpaceView3D.occlude_geometry -> use_occlude_geometry: boolean Limit selection to visible (clipped with depth buffer)
-SpaceView3D.outline_selected -> show_outline_selected: boolean Show an outline highlight around selected objects in non-wireframe views
-SpaceView3D.pivot_point_align -> use_pivot_point_align: boolean Manipulate object centers only
-SpaceView3D.relationship_lines -> show_relationship_lines: boolean Show dashed lines indicating parent or constraint relationships
-SpaceView3D.textured_solid -> show_textured_solid: boolean Display face-assigned textures in solid view
-SpaceView3D.used_layers -> layer_used: boolean, (read-only) Layers that contain something
-SpeedControlSequence.curve_compress_y -> use_curve_compress_y: boolean Scale F-Curve value to get the target frame number, F-Curve value runs from 0.0 to 1.0
-SpeedControlSequence.curve_velocity -> use_curve_velocity: boolean Interpret the F-Curve value as a velocity instead of a frame number
-SpeedControlSequence.frame_blending -> use_frame_blend: boolean Blend two frames into the target for a smoother result
-Spline.bezier_u -> use_bezier_u: boolean Make this nurbs curve or surface act like a bezier spline in the U direction (Order U must be 3 or 4, Cyclic U must be disabled)
-Spline.bezier_v -> use_bezier_v: boolean Make this nurbs surface act like a bezier spline in the V direction (Order V must be 3 or 4, Cyclic V must be disabled)
-Spline.cyclic_u -> use_cyclic_u: boolean Make this curve or surface a closed loop in the U direction
-Spline.cyclic_v -> use_cyclic_v: boolean Make this surface a closed loop in the V direction
-Spline.endpoint_u -> use_endpoint_u: boolean Make this nurbs curve or surface meet the endpoints in the U direction (Cyclic U must be disabled)
-Spline.endpoint_v -> use_endpoint_v: boolean Make this nurbs surface meet the endpoints in the V direction (Cyclic V must be disabled)
-Spline.hide -> hide: boolean Hide this curve in editmode
-Spline.smooth -> use_smooth: boolean Smooth the normals of the surface or beveled curve
-SplineIKConstraint.chain_offset -> use_chain_offset: boolean Offset the entire chain relative to the root joint
-SplineIKConstraint.even_divisions -> use_even_divisions: boolean Ignore the relative lengths of the bones when fitting to the curve
-SplineIKConstraint.use_curve_radius -> use_curve_radius: boolean Average radius of the endpoints is used to tweak the X and Z Scaling of the bones, on top of XZ Scale mode
-SplineIKConstraint.y_stretch -> use_y_stretch: boolean Stretch the Y axis of the bones to fit the curve
-SplinePoint.hidden -> hide: boolean Visibility status
-SplinePoint.selected -> select_control_point: boolean Selection status
-SpotLamp.auto_clip_end -> use_auto_clip_end: boolean Automatic calculation of clipping-end, based on visible vertices
-SpotLamp.auto_clip_start -> use_auto_clip_start: boolean Automatic calculation of clipping-start, based on visible vertices
-SpotLamp.halo -> use_halo: boolean Renders spotlight with a volumetric halo (Buffer Shadows)
-SpotLamp.only_shadow -> use_only_shadow: boolean Causes light to cast shadows only without illuminating objects
-SpotLamp.shadow_layer -> use_shadow_layer: boolean Causes only objects on the same layer to cast shadows
-SpotLamp.show_cone -> show_cone: boolean Draw transparent cone in 3D view to visualize which objects are contained in it
-SpotLamp.sphere -> use_sphere: boolean Sets light intensity to zero beyond lamp distance
-SpotLamp.square -> use_square: boolean Casts a square spot light shape
-StateActuator.state -> state: boolean
-SubsurfModifier.optimal_display -> show_only_control_edges: boolean Skip drawing/rendering of interior subdivided edges
-SubsurfModifier.subsurf_uv -> use_subsurf_uv: boolean Use subsurf to subdivide UVs
-SunLamp.only_shadow -> use_only_shadow: boolean Causes light to cast shadows only without illuminating objects
-SunLamp.shadow_layer -> use_shadow_layer: boolean Causes only objects on the same layer to cast shadows
-SurfaceCurve.map_along_length -> use_map_along_length: boolean Generate texture mapping coordinates following the curve direction, rather than the local bounding box
-SurfaceCurve.vertex_normal_flip -> use_vertex_normal_flip: boolean Flip vertex normals towards the camera during render
-TexMapping.has_maximum -> use_max: boolean Whether to use maximum clipping value
-TexMapping.has_minimum -> use_min: boolean Whether to use minimum clipping value
-Text.dirty -> is_dirty: boolean, (read-only) Text file has been edited since last save
-Text.memory -> is_in_memory: boolean, (read-only) Text file is in memory, without a corresponding file on disk
-Text.modified -> is_modified: boolean, (read-only) Text file on disk is different than the one in memory
-Text.tabs_as_spaces -> use_tabs_as_spaces: boolean Automatically converts all new tabs into spaces
-Text.use_module -> use_module: boolean Register this text as a module on loading, Text name must end with '.py'
-TextCharacterFormat.bold -> use_bold: boolean
-TextCharacterFormat.italic -> use_italic: boolean
-TextCharacterFormat.style -> use_style: boolean
-TextCharacterFormat.underline -> use_underline: boolean
-TextCharacterFormat.wrap -> use_wrap: boolean
-TextCurve.fast -> use_fast_editing: boolean Don't fill polygons while editing
-TextCurve.map_along_length -> use_map_along_length: boolean Generate texture mapping coordinates following the curve direction, rather than the local bounding box
-TextCurve.vertex_normal_flip -> use_vertex_normal_flip: boolean Flip vertex normals towards the camera during render
-TextMarker.edit_all -> use_edit_all: boolean, (read-only) Edit all markers of the same group as one
-TextMarker.temporary -> is_temporary: boolean, (read-only) Marker is temporary
-Texture.use_color_ramp -> use_color_ramp: boolean Toggle color ramp operations
-Texture.use_nodes -> use_nodes: boolean Make this a node-based texture
-Texture.use_preview_alpha -> use_preview_alpha: boolean Show Alpha in Preview Render
-TextureNodeMixRGB.alpha -> use_alpha: boolean Include alpha of second input in this operation
-TextureSlot.negate -> invert: boolean Inverts the values of the texture to reverse its effect
-TextureSlot.rgb_to_intensity -> use_rgb_to_intensity: boolean Converts texture RGB values to intensity (gray) values
-TextureSlot.stencil -> use_stencil: boolean Use this texture as a blending value on the next texture
-ThemeBoneColorSet.colored_constraints -> show_colored_constraints: boolean Allow the use of colors indicating constraints/keyed status
-ThemeWidgetColors.shaded -> show_shaded: boolean
-TimelineMarker.selected -> select: boolean Marker selection state
-ToolSettings.auto_normalize -> use_auto_normalize: boolean Ensure all bone-deforming vertex groups add up to 1.0 while weight painting
-ToolSettings.automerge_editing -> use_automerge_editing: boolean Automatically merge vertices moved to the same location
-ToolSettings.bone_sketching -> use_bone_sketching: boolean DOC BROKEN
-ToolSettings.etch_autoname -> use_etch_autoname: boolean DOC BROKEN
-ToolSettings.etch_overdraw -> use_etch_overdraw: boolean DOC BROKEN
-ToolSettings.etch_quick -> use_etch_quick: boolean DOC BROKEN
-ToolSettings.mesh_selection_mode -> mesh_selection_mode: boolean Which mesh elements selection works on
-ToolSettings.record_with_nla -> use_record_with_nla: boolean Add a new NLA Track + Strip for every loop/pass made over the animation to allow non-destructive tweaking
-ToolSettings.snap -> use_snap: boolean Snap during transform
-ToolSettings.snap_align_rotation -> use_snap_align_rotation: boolean Align rotation with the snapping target
-ToolSettings.snap_peel_object -> use_snap_peel_object: boolean Consider objects as whole when finding volume center
-ToolSettings.snap_project -> use_snap_project: boolean Project vertices on the surface of other objects
-ToolSettings.use_auto_keying -> use_keyframe_insert_auto: boolean Automatic keyframe insertion for Objects and Bones
-ToolSettings.uv_local_view -> show_local_view: boolean Draw only faces with the currently displayed image assigned
-ToolSettings.uv_sync_selection -> use_uv_sync_selection: boolean Keep UV and edit mode mesh selection in sync
-TrackToConstraint.target_z -> use_target_z: boolean Target's Z axis, not World Z axis, will constraint the Up direction
-TransformConstraint.extrapolate_motion -> use_motion_extrapolate: boolean Extrapolate ranges
-TransformSequence.uniform_scale -> use_uniform_scale: boolean Scale uniformly, preserving aspect ratio
-UILayout.active -> show_active: boolean
-UILayout.enabled -> show_enabled: boolean
-UVProjectModifier.override_image -> use_image_override: boolean Override faces' current images with the given image
-UnitSettings.use_separate -> use_separate: boolean Display units in pairs
-UserPreferencesEdit.auto_keyframe_insert_available -> use_keyframe_insert_available: boolean Automatic keyframe insertion in available curves
-UserPreferencesEdit.auto_keyframe_insert_keyingset -> use_keyframe_insert_keyingset: boolean Automatic keyframe insertion using active Keying Set
-UserPreferencesEdit.drag_immediately -> use_drag_immediately: boolean Moving things with a mouse drag confirms when releasing the button
-UserPreferencesEdit.duplicate_action -> use_duplicate_action: boolean Causes actions to be duplicated with the object
-UserPreferencesEdit.duplicate_armature -> use_duplicate_armature: boolean Causes armature data to be duplicated with the object
-UserPreferencesEdit.duplicate_curve -> use_duplicate_curve: boolean Causes curve data to be duplicated with the object
-UserPreferencesEdit.duplicate_fcurve -> use_duplicate_fcurve: boolean Causes F-curve data to be duplicated with the object
-UserPreferencesEdit.duplicate_lamp -> use_duplicate_lamp: boolean Causes lamp data to be duplicated with the object
-UserPreferencesEdit.duplicate_material -> use_duplicate_material: boolean Causes material data to be duplicated with the object
-UserPreferencesEdit.duplicate_mesh -> use_duplicate_mesh: boolean Causes mesh data to be duplicated with the object
-UserPreferencesEdit.duplicate_metaball -> use_duplicate_metaball: boolean Causes metaball data to be duplicated with the object
-UserPreferencesEdit.duplicate_particle -> use_duplicate_particle: boolean Causes particle systems to be duplicated with the object
-UserPreferencesEdit.duplicate_surface -> use_duplicate_surface: boolean Causes surface data to be duplicated with the object
-UserPreferencesEdit.duplicate_text -> use_duplicate_text: boolean Causes text data to be duplicated with the object
-UserPreferencesEdit.duplicate_texture -> use_duplicate_texture: boolean Causes texture data to be duplicated with the object
-UserPreferencesEdit.enter_edit_mode -> use_enter_edit_mode: boolean Enter Edit Mode automatically after adding a new object
-UserPreferencesEdit.global_undo -> use_global_undo: boolean Global undo works by keeping a full copy of the file itself in memory, so takes extra memory
-UserPreferencesEdit.grease_pencil_simplify_stroke -> use_grease_pencil_simplify_stroke: boolean Simplify the final stroke
-UserPreferencesEdit.grease_pencil_smooth_stroke -> use_grease_pencil_smooth_stroke: boolean Smooth the final stroke
-UserPreferencesEdit.insertkey_xyz_to_rgb -> use_insertkey_xyz_to_rgb: boolean Color for newly added transformation F-Curves (Location, Rotation, Scale) and also Color is based on the transform axis
-UserPreferencesEdit.keyframe_insert_needed -> use_keyframe_insert_needed: boolean Keyframe insertion only when keyframe needed
-UserPreferencesEdit.use_auto_keying -> use_auto_keying: boolean Automatic keyframe insertion for Objects and Bones
-UserPreferencesEdit.use_negative_frames -> use_negative_frames: boolean Current frame number can be manually set to a negative value
-UserPreferencesEdit.use_visual_keying -> use_visual_keying: boolean Use Visual keying automatically for constrained objects
-UserPreferencesFilePaths.auto_save_temporary_files -> use_auto_save_temporary_files: boolean Automatic saving of temporary files
-UserPreferencesFilePaths.compress_file -> use_file_compression: boolean Enable file compression when saving .blend files
-UserPreferencesFilePaths.filter_file_extensions -> use_filter_files: boolean Display only files with extensions in the image select window
-UserPreferencesFilePaths.hide_dot_files_datablocks -> show_hidden_files_datablocks: boolean Hide files/datablocks that start with a dot(.*)
-UserPreferencesFilePaths.load_ui -> use_load_ui: boolean Load user interface setup when loading .blend files
-UserPreferencesFilePaths.save_preview_images -> use_save_preview_images: boolean Enables automatic saving of preview images in the .blend file
-UserPreferencesFilePaths.use_relative_paths -> use_relative_paths: boolean Default relative path option for the file selector
-UserPreferencesInput.continuous_mouse -> use_continuous_mouse: boolean Allow moving the mouse outside the view on some manipulations (transform, ui control drag)
-UserPreferencesInput.emulate_3_button_mouse -> use_emulate_3_button_mouse: boolean Emulates Middle Mouse with Alt+LeftMouse (doesn't work with Left Mouse Select option)
-UserPreferencesInput.emulate_numpad -> use_emulate_numpad: boolean Causes the 1 to 0 keys to act as the numpad (useful for laptops)
-UserPreferencesInput.invert_zoom_direction -> invert_zoom_direction: boolean Invert the axis of mouse movement for zooming
-UserPreferencesSystem.auto_execute_scripts -> use_scripts_auto_execute: boolean Allow any .blend file to run scripts automatically (unsafe with blend files from an untrusted source)
-UserPreferencesSystem.enable_all_codecs -> use_preview_images: boolean Enables automatic saving of preview images in the .blend file (Windows only)
-UserPreferencesSystem.international_fonts -> use_international_fonts: boolean Use international fonts
-UserPreferencesSystem.tabs_as_spaces -> use_tabs_as_spaces: boolean Automatically converts all new tabs into spaces for new and loaded text files
-UserPreferencesSystem.translate_buttons -> use_translate_buttons: boolean Translate button labels
-UserPreferencesSystem.translate_toolbox -> use_translate_toolbox: boolean Translate toolbox menu
-UserPreferencesSystem.translate_tooltips -> use_translate_tooltips: boolean Translate Tooltips
-UserPreferencesSystem.use_antialiasing -> use_antialiasing: boolean Use anti-aliasing for the 3D view (may impact redraw performance)
-UserPreferencesSystem.use_mipmaps -> use_mipmaps: boolean Scale textures for the 3D View (looks nicer but uses more memory and slows image reloading)
-UserPreferencesSystem.use_textured_fonts -> use_textured_fonts: boolean Use textures for drawing international fonts
-UserPreferencesSystem.use_vbos -> use_vertex_buffer_objects: boolean Use Vertex Buffer Objects (or Vertex Arrays, if unsupported) for viewport rendering
-UserPreferencesSystem.use_weight_color_range -> use_weight_color_range: boolean Enable color range used for weight visualization in weight painting mode
-UserPreferencesView.auto_depth -> use_mouse_auto_depth: boolean Use the depth under the mouse to improve view pan/rotate/zoom functionality
-UserPreferencesView.auto_perspective -> use_auto_perspective: boolean Automatically switch between orthographic and perspective when changing from top/front/side views
-UserPreferencesView.directional_menus -> use_directional_menus: boolean Otherwise menus, etc will always be top to bottom, left to right, no matter opening direction
-UserPreferencesView.display_object_info -> show_object_info: boolean Display objects name and frame number in 3D view
-UserPreferencesView.global_pivot -> use_global_pivot: boolean Lock the same rotation/scaling pivot in all 3D Views
-UserPreferencesView.global_scene -> use_global_scene: boolean Forces the current Scene to be displayed in all Screens
-UserPreferencesView.open_mouse_over -> use_mouse_over_open: boolean Open menu buttons and pulldowns automatically when the mouse is hovering
-UserPreferencesView.rotate_around_selection -> use_rotate_around_selection: boolean Use selection as the pivot point
-UserPreferencesView.show_mini_axis -> show_mini_axis: boolean Show a small rotating 3D axis in the bottom left corner of the 3D View
-UserPreferencesView.show_playback_fps -> show_playback_fps: boolean Show the frames per second screen refresh rate, while animation is played back
-UserPreferencesView.show_splash -> show_splash: boolean Display splash screen on startup
-UserPreferencesView.show_view_name -> show_view_name: boolean Show the name of the view's direction in each 3D View
-UserPreferencesView.tooltips -> show_tooltips: boolean Display tooltips
-UserPreferencesView.use_column_layout -> show_column_layout: boolean Use a column layout for toolbox
-UserPreferencesView.use_large_cursors -> show_large_cursors: boolean Use large mouse cursors when available
-UserPreferencesView.use_manipulator -> show_manipulator: boolean Use 3D transform manipulator
-UserPreferencesView.use_middle_mouse_paste -> use_mouse_mmb_paste: boolean In text window, paste with middle mouse button instead of panning
-UserPreferencesView.wheel_invert_zoom -> invert_mouse_wheel_zoom: boolean Swap the Mouse Wheel zoom direction
-UserPreferencesView.zoom_to_mouse -> use_zoom_to_mouse: boolean Zoom in towards the mouse pointer's position in the 3D view, rather than the 2D window center
-UserSolidLight.enabled -> use: boolean Enable this OpenGL light in solid draw mode
-VertexPaint.all_faces -> use_all_faces: boolean Paint on all faces inside brush
-VertexPaint.normals -> use_normal: boolean Applies the vertex normal before painting
-VertexPaint.spray -> use_spray: boolean Keep applying paint effect while holding mouse
-VisibilityActuator.children -> apply_to_children: boolean Set all the children of this object to the same visibility/occlusion recursively
-VisibilityActuator.occlusion -> use_occlusion: boolean Set the object to occlude objects behind it. Initialized from the object type in physics button
-VisibilityActuator.visible -> use_visible: boolean Set the objects visible. Initialized from the objects render restriction toggle (access in the outliner)
-VoxelData.still -> use_still_frame: boolean Always render a still frame from the voxel data sequence
-WaveModifier.cyclic -> use_cyclic: boolean Cyclic wave effect
-WaveModifier.normals -> use_normal: boolean Displace along normal
-WaveModifier.x -> use_x: boolean X axis motion
-WaveModifier.x_normal -> use_normal_x: boolean Enable displacement along the X normal
-WaveModifier.y -> use_y: boolean Y axis motion
-WaveModifier.y_normal -> use_normal_y: boolean Enable displacement along the Y normal
-WaveModifier.z_normal -> use_normal_z: boolean Enable displacement along the Z normal
-World.blend_sky -> use_sky_blend: boolean Render background with natural progression from horizon to zenith
-World.paper_sky -> use_sky_paper: boolean Flatten blend or texture coordinates
-World.real_sky -> use_sky_real: boolean Render background with a real horizon, relative to the camera angle
-WorldLighting.falloff -> use_falloff: boolean
-WorldLighting.pixel_cache -> use_cache: boolean Cache AO results in pixels and interpolate over neighbouring pixels for speedup (for Approximate)
-WorldLighting.use_ambient_occlusion -> use_ambient_occlusian: boolean Use Ambient Occlusion to add shadowing based on distance between objects
-WorldLighting.use_environment_lighting -> use_environment_lighting: boolean Add light coming from the environment
-WorldLighting.use_indirect_lighting -> use_indirect_lighting: boolean Add indirect light bouncing of surrounding objects
-WorldMistSettings.use_mist -> use_mist: boolean Occlude objects with the environment color as they are further away
-WorldStarsSettings.use_stars -> use_stars: boolean Enable starfield generation
-WorldTextureSlot.map_blend -> use_map_blend: boolean Affect the color progression of the background
-WorldTextureSlot.map_horizon -> use_map_horizon: boolean Affect the color of the horizon
-WorldTextureSlot.map_zenith_down -> use_map_zenith_down: boolean Affect the color of the zenith below
-WorldTextureSlot.map_zenith_up -> use_map_zenith_up: boolean Affect the color of the zenith above
diff --git a/source/blender/makesrna/rna_cleanup/rna_cleaner.py b/source/blender/makesrna/rna_cleanup/rna_cleaner.py
index f39ee586237..ae17ade36d7 100755
--- a/source/blender/makesrna/rna_cleanup/rna_cleaner.py
+++ b/source/blender/makesrna/rna_cleanup/rna_cleaner.py
@@ -6,6 +6,9 @@ This script is used to help cleaning RNA api.
Typical line in the input file (elements in [] are optional).
[comment *] ToolSettings.snap_align_rotation -> use_snap_align_rotation: boolean [Align rotation with the snapping target]
+
+Geterate output format from blender run this:
+ ./blender.bin --background --python ./release/scripts/modules/rna_info.py 2> source/blender/makesrna/rna_cleanup/out.txt
"""
@@ -73,18 +76,21 @@ def check_commandline():
return (inputfile, sort_priority)
-def check_prefix(prop):
+def check_prefix(prop, btype):
# reminder: props=[comment, changed, bclass, bfrom, bto, kwcheck, btype, description]
- if '_' in prop:
- prefix = prop.split('_')[0]
- if prefix not in kw_prefixes:
- return 'BAD-PREFIX: ' + prefix
+ if btype == "boolean":
+ if '_' in prop:
+ prefix = prop.split('_')[0]
+ if prefix not in kw_prefixes:
+ return 'BAD-PREFIX: ' + prefix
+ else:
+ return prefix + '_'
+ elif prop in kw:
+ return 'SPECIAL-KEYWORD: ' + prop
else:
- return prefix + '_'
- elif prop in kw:
- return 'SPECIAL-KEYWORD: ' + prop
+ return 'BAD-KEYWORD: ' + prop
else:
- return 'BAD-KEYWORD: ' + prop
+ return ""
def check_if_changed(a,b):
@@ -103,14 +109,25 @@ def get_props_from_txt(input_filename):
props_list=[]
props_length_max=[0,0,0,0,0,0,0,0]
- for line in file_lines:
+
+ done_text = "+"
+ done = 0
+ tot = 0
+
+ for iii, line in enumerate(file_lines):
# debug
#print(line)
-
+ line_strip = line.strip()
# empty line or comment
- if not line.strip() or line.startswith('#'):
+ if not line_strip:
continue
+
+ if line_strip == "EOF":
+ break
+
+ if line.startswith("#"):
+ line = line[1:]
# class
[bclass, tail] = [x.strip() for x in line.split('.', 1)]
@@ -135,22 +152,28 @@ def get_props_from_txt(input_filename):
# type, description
try:
[btype, description] = tail.split(None, 1)
- if '"' in description:
- description.replace('"', "'")
+ # make life easy and strip quotes
+ description = description.replace("'", "").replace('"', "").replace("\\", "").strip()
except ValueError:
[btype, description] = [tail,'NO DESCRIPTION']
# keyword-check
- kwcheck = check_prefix(bto)
+ kwcheck = check_prefix(bto, btype)
# changed
changed = check_if_changed(bfrom, bto)
# lists formatting
- props=[comment, changed, bclass, bfrom, bto, kwcheck, btype, repr(description)]
+ props=[comment, changed, bclass, bfrom, bto, kwcheck, btype, description]
props_list.append(props)
props_length_max=list(map(max,zip(props_length_max,list(map(len,props)))))
+ if done_text in comment:
+ done += 1
+ tot += 1
+
+ print("Total done %.2f" % (done / tot * 100.0) )
+
return (props_list,props_length_max)
@@ -165,9 +188,10 @@ def get_props_from_py(input_filename):
props_length_max = [0 for i in rna_api[0]] # this way if the vector will take more elements we are safe
for index,props in enumerate(rna_api):
comment, changed, bclass, bfrom, bto, kwcheck, btype, description = props
- kwcheck = check_prefix(bto) # keyword-check
+ kwcheck = check_prefix(bto, btype) # keyword-check
changed = check_if_changed(bfrom, bto) # changed?
description = repr(description)
+ description = description.replace("'", "").replace('"', "").replace("\\", "").strip()
rna_api[index] = [comment, changed, bclass, bfrom, bto, kwcheck, btype, description]
props_length = list(map(len,props)) # lengths
props_length_max = list(map(max,zip(props_length_max,props_length))) # max lengths
@@ -189,11 +213,14 @@ def sort(props_list, sort_priority):
"""
# order based on the i-th element in lists
- i = sort_choices.index(sort_priority)
- if i == 0:
- props_list = sorted(props_list, key=lambda p: p[i], reverse=True)
+ if sort_priority == "class.to":
+ props_list = sorted(props_list, key=lambda p: (p[2], p[4]))
else:
- props_list = sorted(props_list, key=lambda p: p[i])
+ i = sort_choices.index(sort_priority)
+ if i == 0:
+ props_list = sorted(props_list, key=lambda p: p[i], reverse=True)
+ else:
+ props_list = sorted(props_list, key=lambda p: p[i])
print ('\nSorted by %s.' % font_bold(sort_priority))
return props_list
@@ -233,16 +260,21 @@ def write_files(basename, props_list, props_length_max):
props_list = [['NOTE', 'CHANGED', 'CLASS', 'FROM', 'TO', 'KEYWORD-CHECK', 'TYPE', 'DESCRIPTION']] + props_list
for props in props_list:
#txt
+
+ # quick way we can tell if it changed
+ if props[3] == props[4]: txt += "#"
+ else: txt += " "
+
if props[0] != '': txt += '%s * ' % props[0] # comment
- txt += '%s.%s -> %s: %s %s\n' % tuple(props[2:5] + props[6:]) # skipping keyword-check
+ txt += '%s.%s -> %s: %s "%s"\n' % tuple(props[2:5] + props[6:]) # skipping keyword-check
# rna_api
if props[0] == 'NOTE': indent = '# '
else: indent = ' '
- rna += indent + '("%s", "%s", "%s", "%s", %s),\n' % tuple(props[2:5] + props[6:]) # description is alredy string formatted
+ rna += indent + '("%s", "%s", "%s", "%s", "%s"),\n' % tuple(props[2:5] + props[6:]) # description is already string formatted
# py
blanks = [' '* (x[0]-x[1]) for x in zip(props_length_max,list(map(len,props)))]
props = [('"%s"%s' if props[-1] != x[0] else "%s%s") % (x[0],x[1]) for x in zip(props,blanks)]
- py += indent + '(%s, %s, %s, %s, %s, %s, %s, %s),\n' % tuple(props)
+ py += indent + '(%s, %s, %s, %s, %s, %s, %s, "%s"),\n' % tuple(props)
f_txt.write(txt)
f_py.write("rna_api = [\n%s]\n" % py)
@@ -266,12 +298,11 @@ def main():
global sort_choices, default_sort_choice
global kw_prefixes, kw
- sort_choices = ['note','changed','class','from','to','kw']
- default_sort_choice = sort_choices[0]
- #kw_prefixes = ['invert','is','lock','show','show_only','use','use_only']
- #kw = ['hide','select','layer','state']
- kw_prefixes = ['has','invert','is','lock','layers','show','show_only','states','use','use_only']
- kw = ['layers','states','value']
+ sort_choices = ['note','changed','class','from','to','kw', 'class.to']
+ default_sort_choice = sort_choices[-1]
+ kw_prefixes = [ 'active','apply','bl','exclude','has','invert','is','lock', \
+ 'pressed','show','show_only','use','use_only','layers','states', 'select']
+ kw = ['active','hide','invert','select','layers','mute','states','use','lock']
input_filename, sort_priority = check_commandline()
props_list,props_length_max = get_props(input_filename)
diff --git a/source/blender/makesrna/rna_cleanup/rna_properties.txt b/source/blender/makesrna/rna_cleanup/rna_properties.txt
index 0c0b7e1070b..b319ce15ba1 100644
--- a/source/blender/makesrna/rna_cleanup/rna_properties.txt
+++ b/source/blender/makesrna/rna_cleanup/rna_properties.txt
@@ -1,3190 +1,4612 @@
-Action.fcurves -> fcurves: collection, (read-only) The individual F-Curves that make up the Action
-Action.groups -> groups: collection, (read-only) Convenient groupings of F-Curves
-Action.pose_markers -> pose_markers: collection, (read-only) Markers specific to this Action, for labeling poses
-ActionActuator.action -> action: pointer
-ActionActuator.blendin -> blendin: int Number of frames of motion blending
-ActionActuator.frame_end -> frame_end: int
-ActionActuator.frame_property -> frame_property: string Assign the action's current frame number to this property
-ActionActuator.frame_start -> frame_start: int
-ActionActuator.mode -> mode: enum Action playback type
-ActionActuator.priority -> priority: int Execution priority - lower numbers will override actions with higher numbers. With 2 or more actions at once, the overriding channels must be lower in the stack
-ActionActuator.property -> property: string Use this property to define the Action position
-ActionConstraint.action -> action: pointer
-ActionConstraint.frame_end -> frame_end: int Last frame of the Action to use
-ActionConstraint.frame_start -> frame_start: int First frame of the Action to use
-ActionConstraint.maximum -> max: float Maximum value for target channel range
-ActionConstraint.minimum -> min: float Minimum value for target channel range
-ActionConstraint.subtarget -> subtarget: string
-ActionConstraint.target -> target: pointer Target Object
-ActionConstraint.transform_channel -> transform_channel: enum Transformation channel from the target that is used to key the Action
-ActionGroup.channels -> channels: collection, (read-only) F-Curves in this group
-ActionGroup.custom_color -> custom_color: int Index of custom color set
-ActionGroup.name -> name: string
-Actuator.name -> name: string
-Actuator.type -> type: enum
-ActuatorSensor.actuator -> actuator: string Actuator name, actuator active state modifications will be detected
-Addon.module -> module: string Module name
-AnimData.action -> action: pointer Active Action for this datablock
-AnimData.action_blending -> action_blend_type: enum Method used for combining Active Action's result with result of NLA stack
-AnimData.action_extrapolation -> action_extrapolation: enum Action to take for gaps past the Active Action's range (when evaluating with NLA)
-AnimData.action_influence -> action_influence: float Amount the Active Action contributes to the result of the NLA stack
-AnimData.drivers -> drivers: collection, (read-only) The Drivers/Expressions for this datablock
-AnimData.nla_tracks -> nla_tracks: collection, (read-only) NLA Tracks (i.e. Animation Layers)
-AnimViz.motion_paths -> motion_paths: pointer, (read-only) Motion Path settings for visualisation
-AnimViz.onion_skinning -> onion_skin_frames: pointer, (read-only) Onion Skinning (ghosting) settings for visualisation
-AnimVizMotionPaths.after_current -> after_current: int Number of frames to show after the current frame (only for 'Around Current Frame' Onion-skinning method)
-AnimVizMotionPaths.bake_location -> bake_location: enum When calculating Bone Paths, use Head or Tips
-AnimVizMotionPaths.before_current -> before_current: int Number of frames to show before the current frame (only for 'Around Current Frame' Onion-skinning method)
-AnimVizMotionPaths.frame_end -> frame_end: int End frame of range of paths to display/calculate (not for 'Around Current Frame' Onion-skinning method)
-AnimVizMotionPaths.frame_start -> frame_start: int Starting frame of range of paths to display/calculate (not for 'Around Current Frame' Onion-skinning method)
-AnimVizMotionPaths.frame_step -> frame_step: int Number of frames between paths shown (not for 'On Keyframes' Onion-skinning method)
-AnimVizMotionPaths.type -> type: enum Type of range to show for Motion Paths
-AnimVizOnionSkinning.after_current -> after_current: int Number of frames to show after the current frame (only for 'Around Current Frame' Onion-skinning method)
-AnimVizOnionSkinning.before_current -> before_current: int Number of frames to show before the current frame (only for 'Around Current Frame' Onion-skinning method)
-AnimVizOnionSkinning.frame_end -> frame_end: int End frame of range of Ghosts to display (not for 'Around Current Frame' Onion-skinning method)
-AnimVizOnionSkinning.frame_start -> frame_start: int Starting frame of range of Ghosts to display (not for 'Around Current Frame' Onion-skinning method)
-AnimVizOnionSkinning.frame_step -> frame_step: int Number of frames between ghosts shown (not for 'On Keyframes' Onion-skinning method)
-AnimVizOnionSkinning.type -> type: enum Method used for determining what ghosts get drawn
-Area.active_space -> active_space: pointer, (read-only) Space currently being displayed in this area
-Area.regions -> regions: collection, (read-only) Regions this area is subdivided in
-Area.spaces -> spaces: collection, (read-only) Spaces contained in this area, the first space is active
-Area.type -> type: enum Space type
-AreaLamp.gamma -> gamma: float Light gamma correction value
-AreaLamp.shadow_adaptive_threshold -> shadow_adaptive_threshold: float Threshold for Adaptive Sampling (Raytraced shadows)
-AreaLamp.shadow_color -> shadow_color: float Color of shadows cast by the lamp
-AreaLamp.shadow_method -> shadow_method: enum Method to compute lamp shadow with
-AreaLamp.shadow_ray_samples_x -> shadow_ray_samples_x: int Amount of samples taken extra (samples x samples)
-AreaLamp.shadow_ray_samples_y -> shadow_ray_samples_y: int Amount of samples taken extra (samples x samples)
-AreaLamp.shadow_ray_sampling_method -> shadow_ray_sample_method: enum Method for generating shadow samples: Adaptive QMC is fastest, Constant QMC is less noisy but slower
-AreaLamp.shadow_soft_size -> shadow_soft_size: float Light size for ray shadow sampling (Raytraced shadows)
-AreaLamp.shape -> shape: enum Shape of the area lamp
-AreaLamp.size -> size: float Size of the area of the area Lamp, X direction size for Rectangle shapes
-AreaLamp.size_y -> size_y: float Size of the area of the area Lamp in the Y direction for Rectangle shapes
-Armature.animation_data -> animation_data: pointer, (read-only) Animation data for this datablock
-Armature.bones -> bones: collection, (read-only)
-Armature.drawtype -> drawtype: enum
-Armature.edit_bones -> edit_bones: collection, (read-only)
-Armature.ghost_frame_end -> ghost_frame_end: int End frame of range of Ghosts to display (not for 'Around Current Frame' Onion-skinning method)
-Armature.ghost_frame_start -> ghost_frame_start: int Starting frame of range of Ghosts to display (not for 'Around Current Frame' Onion-skinning method)
-Armature.ghost_size -> ghost_size: int Frame step for Ghosts (not for 'On Keyframes' Onion-skinning method)
-Armature.ghost_step -> ghost_step: int Number of frame steps on either side of current frame to show as ghosts (only for 'Around Current Frame' Onion-skinning method)
-Armature.ghost_type -> ghost_type: enum Method of Onion-skinning for active Action
-Armature.pose_position -> pose_position: enum Show armature in binding pose or final posed state
-ArmatureActuator.bone -> bone: string Bone on which the constraint is defined
-ArmatureActuator.constraint -> constraint: string Name of the constraint you want to control
-ArmatureActuator.mode -> mode: enum
-ArmatureActuator.secondary_target -> secondary_target: pointer Set weight of this constraint
-ArmatureActuator.target -> target: pointer Set this object as the target of the constraint
-ArmatureActuator.weight -> weight: float Set weight of this constraint
-ArmatureBones.active -> active: pointer Armatures active bone
-ArmatureEditBones.active -> active: pointer Armatures active edit bone
-ArmatureModifier.object -> object: pointer Armature object to deform with
-ArmatureModifier.vertex_group -> vertex_group: string Vertex group name
-ArmatureSensor.bone -> bone: string Identify the bone to check value from
-ArmatureSensor.constraint -> constraint: string Identify the bone constraint to check value from
-ArmatureSensor.test_type -> test_type: enum Type of value and test
-ArmatureSensor.value -> value: float Specify value to be used in comparison
-ArrayModifier.constant_offset_displacement -> constant_offset_displacement: float
-ArrayModifier.count -> count: int Number of duplicates to make
-ArrayModifier.curve -> curve: pointer Curve object to fit array length to
-ArrayModifier.end_cap -> end_cap: pointer Mesh object to use as an end cap
-ArrayModifier.fit_type -> fit_type: enum Array length calculation method
-ArrayModifier.length -> length: float Length to fit array within
-ArrayModifier.merge_distance -> merge_distance: float Limit below which to merge vertices
-ArrayModifier.offset_object -> offset_object: pointer
-ArrayModifier.relative_offset_displacement -> relative_offset_displacement: float
-ArrayModifier.start_cap -> start_cap: pointer Mesh object to use as a start cap
-BackgroundImage.image -> image: pointer Image displayed and edited in this space
-BackgroundImage.image_user -> image_user: pointer, (read-only) Parameters defining which layer, pass and frame of the image is displayed
-BackgroundImage.offset_x -> offset_x: float Offsets image horizontally from the world origin
-BackgroundImage.offset_y -> offset_y: float Offsets image vertically from the world origin
-BackgroundImage.size -> size: float Scaling factor for the background image
-BackgroundImage.transparency -> transparency: float Amount to blend the image against the background color
-BackgroundImage.view_axis -> view_axis: enum The axis to display the image on
-BevelModifier.angle -> angle: float Angle above which to bevel edges
-BevelModifier.edge_weight_method -> edge_weight_method: enum What edge weight to use for weighting a vertex
-BevelModifier.limit_method -> limit_method: enum
-BevelModifier.width -> width: float Bevel value/amount
-BezierSplinePoint.co -> co: float Coordinates of the control point
-BezierSplinePoint.handle1 -> handle_left: float Coordinates of the first handle
-BezierSplinePoint.handle1_type -> handle_left_type: enum Handle types
-BezierSplinePoint.handle2 -> handle_right: float Coordinates of the second handle
-BezierSplinePoint.handle2_type -> handle_right_type: enum Handle types
-BezierSplinePoint.radius -> radius: float, (read-only) Radius for bevelling
-BezierSplinePoint.tilt -> tilt: float Tilt in 3D View
-BezierSplinePoint.weight -> weight: float Softbody goal weight
-BlendTexture.flip_axis -> flip_axis: enum Flips the texture's X and Y axis
-BlendTexture.progression -> progression: enum Sets the style of the color blending
-BlenderRNA.structs -> structs: collection, (read-only)
-BoidRule.name -> name: string Boid rule name
-BoidRule.type -> type: enum, (read-only)
-BoidRuleAverageSpeed.level -> level: float How much velocity's z-component is kept constant
-BoidRuleAverageSpeed.speed -> speed: float Percentage of maximum speed
-BoidRuleAverageSpeed.wander -> wander: float How fast velocity's direction is randomized
-BoidRuleAvoid.fear_factor -> fear_factor: float Avoid object if danger from it is above this threshold
-BoidRuleAvoid.object -> object: pointer Object to avoid
-BoidRuleAvoidCollision.look_ahead -> look_ahead: float Time to look ahead in seconds
-BoidRuleFight.distance -> distance: float Attack boids at max this distance
-BoidRuleFight.flee_distance -> flee_distance: float Flee to this distance
-BoidRuleFollowLeader.distance -> distance: float Distance behind leader to follow
-BoidRuleFollowLeader.object -> object: pointer Follow this object instead of a boid
-BoidRuleFollowLeader.queue_size -> queue_size: int How many boids in a line
-BoidRuleGoal.object -> object: pointer Goal object
-BoidSettings.accuracy -> accuracy: float Accuracy of attack
-BoidSettings.active_boid_state -> active_boid_state: pointer, (read-only)
-BoidSettings.active_boid_state_index -> active_boid_state_index: int
-BoidSettings.aggression -> aggression: float Boid will fight this times stronger enemy
-BoidSettings.air_max_acc -> air_acc_max: float Maximum acceleration in air (relative to maximum speed)
-BoidSettings.air_max_ave -> air_ave_max: float Maximum angular velocity in air (relative to 180 degrees)
-BoidSettings.air_max_speed -> air_speed_max: float Maximum speed in air
-BoidSettings.air_min_speed -> air_speed_min: float Minimum speed in air (relative to maximum speed)
-BoidSettings.air_personal_space -> air_personal_space: float Radius of boids personal space in air (% of particle size)
-BoidSettings.banking -> bank: float Amount of rotation around velocity vector on turns
-BoidSettings.health -> health: float Initial boid health when born
-BoidSettings.height -> height: float Boid height relative to particle size
-BoidSettings.land_jump_speed -> land_jump_speed: float Maximum speed for jumping
-BoidSettings.land_max_acc -> land_acc_max: float Maximum acceleration on land (relative to maximum speed)
-BoidSettings.land_max_ave -> land_ave_max: float Maximum angular velocity on land (relative to 180 degrees)
-BoidSettings.land_max_speed -> land_speed_max: float Maximum speed on land
-BoidSettings.land_personal_space -> land_personal_space: float Radius of boids personal space on land (% of particle size)
-BoidSettings.land_stick_force -> land_stick_force: float How strong a force must be to start effecting a boid on land
-BoidSettings.landing_smoothness -> land_smooth: float How smoothly the boids land
-BoidSettings.range -> range: float The maximum distance from which a boid can attack
-BoidSettings.states -> states: collection, (read-only)
-BoidSettings.strength -> strength: float Maximum caused damage on attack per second
-BoidState.active_boid_rule -> active_boid_rule: pointer, (read-only)
-BoidState.active_boid_rule_index -> active_boid_rule_index: int
-BoidState.falloff -> falloff: float
-BoidState.name -> name: string Boid state name
-BoidState.rule_fuzziness -> rule_fuzzy: float
-BoidState.rules -> rules: collection, (read-only)
-BoidState.ruleset_type -> ruleset_type: enum How the rules in the list are evaluated
-BoidState.volume -> volume: float
-Bone.bbone_in -> bbone_in: float Length of first Bezier Handle (for B-Bones only)
-Bone.bbone_out -> bbone_out: float Length of second Bezier Handle (for B-Bones only)
-Bone.bbone_segments -> bbone_segments: int Number of subdivisions of bone (for B-Bones only)
-Bone.children -> children: collection, (read-only) Bones which are children of this bone
-Bone.envelope_distance -> envelope_distance: float Bone deformation distance (for Envelope deform only)
-Bone.envelope_weight -> envelope_weight: float Bone deformation weight (for Envelope deform only)
-Bone.head -> head: float Location of head end of the bone relative to its parent
-Bone.head_local -> head_local: float Location of head end of the bone relative to armature
-Bone.head_radius -> head_radius: float Radius of head of bone (for Envelope deform only)
-Bone.matrix -> matrix: float 3x3 bone matrix
-Bone.matrix_local -> matrix_local: float 4x4 bone matrix relative to armature
-Bone.name -> name: string
-Bone.parent -> parent: pointer, (read-only) Parent bone (in same Armature)
-Bone.tail -> tail: float Location of tail end of the bone
-Bone.tail_local -> tail_local: float Location of tail end of the bone relative to armature
-Bone.tail_radius -> tail_radius: float Radius of tail of bone (for Envelope deform only)
-BoneGroup.color_set -> color_set: enum Custom color set to use
-BoneGroup.colors -> colors: pointer, (read-only) Copy of the colors associated with the group's color set
-BoneGroup.name -> name: string
-BooleanModifier.object -> object: pointer Mesh object to use for Boolean operation
-BooleanModifier.operation -> operation: enum
-BooleanProperty.array_length -> array_length: int, (read-only) Maximum length of the array, 0 means unlimited
-Brush.blend -> blend: enum Brush blending mode
-Brush.clone_alpha -> clone_alpha: float Opacity of clone image display
-Brush.clone_image -> clone_image: pointer Image for clone tool
-Brush.clone_offset -> clone_offset: float
-Brush.color -> color: float
-Brush.curve -> curve: pointer, (read-only) Editable falloff curve
-Brush.direction -> direction: enum Mapping type to use for this image in the game engine
-Brush.imagepaint_tool -> imagepaint_tool: enum
-Brush.jitter -> jitter: float Jitter the position of the brush while painting
-Brush.rate -> rate: float Interval between paints for Airbrush
-Brush.sculpt_tool -> sculpt_tool: enum
-Brush.size -> size: int Diameter of the brush
-Brush.smooth_stroke_factor -> smooth_stroke_factor: float Higher values give a smoother stroke
-Brush.smooth_stroke_radius -> smooth_stroke_radius: int Minimum distance from last point before stroke continues
-Brush.spacing -> spacing: float Spacing between brush stamps
-Brush.strength -> strength: float The amount of pressure on the brush
-Brush.texture -> texture: pointer
-Brush.texture_slot -> texture_slot: pointer, (read-only)
-Brush.vertexpaint_tool -> vertexpaint_tool: enum
-BrushTextureSlot.angle -> angle: float Defines brush texture rotation
-BrushTextureSlot.map_mode -> map_mode: enum
-BuildModifier.frame_start -> frame_start: float Specify the start frame of the effect
-BuildModifier.length -> length: float Specify the total time the build effect requires
-BuildModifier.seed -> seed: int Specify the seed for random if used
-Camera.angle -> angle: float Perspective Camera lens field of view in degrees
-Camera.animation_data -> animation_data: pointer, (read-only) Animation data for this datablock
-Camera.clip_end -> clip_end: float Camera far clipping distance
-Camera.clip_start -> clip_start: float Camera near clipping distance
-Camera.dof_distance -> dof_distance: float Distance to the focus point for depth of field
-Camera.dof_object -> dof_object: pointer Use this object to define the depth of field focal point
-Camera.draw_size -> draw_size: float Apparent size of the Camera object in the 3D View
-Camera.lens -> lens: float Perspective Camera lens value in millimeters
-Camera.lens_unit -> lens_unit: enum Unit to edit lens in for the user interface
-Camera.ortho_scale -> ortho_scale: float Orthographic Camera scale (similar to zoom)
-Camera.passepartout_alpha -> passepartout_alpha: float Opacity (alpha) of the darkened overlay in Camera view
-Camera.shift_x -> shift_x: float Perspective Camera horizontal shift
-Camera.shift_y -> shift_y: float Perspective Camera vertical shift
-Camera.type -> type: enum Camera types
-CameraActuator.axis -> axis: enum Specify the axis the Camera will try to get behind
-CameraActuator.height -> height: float
-CameraActuator.max -> max: float
-CameraActuator.min -> min: float
-CameraActuator.object -> object: pointer Look at this Object
-CastModifier.cast_type -> cast_type: enum
-CastModifier.factor -> factor: float
-CastModifier.object -> object: pointer Control object: if available, its location determines the center of the effect
-CastModifier.radius -> radius: float Only deform vertices within this distance from the center of the effect (leave as 0 for infinite.)
-CastModifier.size -> size: float Size of projection shape (leave as 0 for auto.)
-CastModifier.vertex_group -> vertex_group: string Vertex group name
-ChildOfConstraint.subtarget -> subtarget: string
-ChildOfConstraint.target -> target: pointer Target Object
-ClampToConstraint.main_axis -> main_axis: enum Main axis of movement
-ClampToConstraint.target -> target: pointer Target Object
-ClothCollisionSettings.collision_quality -> collision_quality: int How many collision iterations should be done. (higher is better quality but slower)
-ClothCollisionSettings.friction -> friction: float Friction force if a collision happened. (higher = less movement)
-ClothCollisionSettings.group -> group: pointer Limit colliders to this Group
-ClothCollisionSettings.min_distance -> distance_min: float Minimum distance between collision objects before collision response takes in
-ClothCollisionSettings.self_collision_quality -> self_collision_quality: int How many self collision iterations should be done. (higher is better quality but slower)
-ClothCollisionSettings.self_friction -> self_friction: float Friction/damping with self contact
-ClothCollisionSettings.self_min_distance -> self_distance_min: float 0.5 means no distance at all, 1.0 is maximum distance
-ClothModifier.collision_settings -> collision_settings: pointer, (read-only)
-ClothModifier.point_cache -> point_cache: pointer, (read-only)
-ClothModifier.settings -> settings: pointer, (read-only)
-ClothSettings.air_damping -> air_damping: float Air has normally some thickness which slows falling things down
-ClothSettings.bending_stiffness -> bending_stiffness: float Wrinkle coefficient. (higher = less smaller but more big wrinkles)
-ClothSettings.bending_stiffness_max -> bending_stiffness_max: float Maximum bending stiffness value
-ClothSettings.bending_vertex_group -> bending_vertex_group: string Vertex group for fine control over bending stiffness
-ClothSettings.collider_friction -> collider_friction: float
-ClothSettings.effector_weights -> effector_weights: pointer, (read-only)
-ClothSettings.goal_default -> goal_default: float Default Goal (vertex target position) value, when no Vertex Group used
-ClothSettings.goal_friction -> goal_friction: float Goal (vertex target position) friction
-ClothSettings.goal_max -> goal_max: float Goal maximum, vertex group weights are scaled to match this range
-ClothSettings.goal_min -> goal_min: float Goal minimum, vertex group weights are scaled to match this range
-ClothSettings.goal_spring -> goal_spring: float Goal (vertex target position) spring stiffness
-ClothSettings.gravity -> gravity: float Gravity or external force vector
-ClothSettings.internal_friction -> internal_friction: float
-ClothSettings.mass -> mass: float Mass of cloth material
-ClothSettings.mass_vertex_group -> mass_vertex_group: string Vertex Group for pinning of vertices
-ClothSettings.pin_stiffness -> pin_stiffness: float Pin (vertex target position) spring stiffness
-ClothSettings.pre_roll -> pre_roll: int Simulation starts on this frame
-ClothSettings.quality -> quality: int Quality of the simulation in steps per frame. (higher is better quality but slower)
-ClothSettings.rest_shape_key -> rest_shape_key: pointer Shape key to use the rest spring lengths from
-ClothSettings.spring_damping -> spring_damping: float Damping of cloth velocity. (higher = more smooth, less jiggling)
-ClothSettings.structural_stiffness -> structural_stiffness: float Overall stiffness of structure
-ClothSettings.structural_stiffness_max -> structural_stiffness_max: float Maximum structural stiffness value
-ClothSettings.structural_stiffness_vertex_group -> structural_stiffness_vertex_group: string Vertex group for fine control over structural stiffness
-CloudsTexture.nabla -> nabla: float Size of derivative offset used for calculating normal
-CloudsTexture.noise_basis -> noise_basis: enum Sets the noise basis used for turbulence
-CloudsTexture.noise_depth -> noise_depth: int Sets the depth of the cloud calculation
-CloudsTexture.noise_size -> noise_size: float Sets scaling for noise input
-CloudsTexture.noise_type -> noise_type: enum
-CloudsTexture.stype -> stype: enum
-CollectionProperty.fixed_type -> fixed_type: pointer, (read-only) Fixed pointer type, empty if variable type
-CollisionModifier.settings -> settings: pointer, (read-only)
-CollisionSensor.material -> material: string Only look for Objects with this material
-CollisionSensor.property -> property: string Only look for Objects with this property
-CollisionSettings.absorption -> absorption: float How much of effector force gets lost during collision with this object (in percent)
-CollisionSettings.damping -> damping: float Amount of damping during collision
-CollisionSettings.damping_factor -> damping_factor: float Amount of damping during particle collision
-CollisionSettings.friction_factor -> friction_factor: float Amount of friction during particle collision
-CollisionSettings.inner_thickness -> inner_thickness: float Inner face thickness
-CollisionSettings.outer_thickness -> outer_thickness: float Outer face thickness
-CollisionSettings.permeability -> permeability: float Chance that the particle will pass through the mesh
-CollisionSettings.random_damping -> random_damping: float Random variation of damping
-CollisionSettings.random_friction -> random_friction: float Random variation of friction
-CollisionSettings.stickness -> stickness: float Amount of stickness to surface collision
-ColorRamp.elements -> elements: collection, (read-only)
-ColorRamp.interpolation -> interpolation: enum
-ColorRampElement.color -> color: float
-ColorRampElement.position -> position: float
-ColorSequence.color -> color: float
-CompositorNode.type -> type: enum, (read-only)
-CompositorNodeAlphaOver.premul -> premul: float Mix Factor
-CompositorNodeBilateralblur.iterations -> iterations: int
-CompositorNodeBilateralblur.sigma_color -> sigma_color: float
-CompositorNodeBilateralblur.sigma_space -> sigma_space: float
-CompositorNodeBlur.factor -> factor: float
-CompositorNodeBlur.factor_x -> factor_x: float
-CompositorNodeBlur.factor_y -> factor_y: float
-CompositorNodeBlur.filter_type -> filter_type: enum
-CompositorNodeBlur.sizex -> size_x: int
-CompositorNodeBlur.sizey -> size_y: int
-CompositorNodeChannelMatte.algorithm -> algorithm: enum Algorithm to use to limit channel
-CompositorNodeChannelMatte.channel -> channel: enum Channel used to determine matte
-CompositorNodeChannelMatte.color_space -> color_space: enum
-CompositorNodeChannelMatte.high -> high: float Values higher than this setting are 100% opaque
-CompositorNodeChannelMatte.limit_channel -> limit_channel: enum Limit by this channels value
-CompositorNodeChannelMatte.low -> low: float Values lower than this setting are 100% keyed
-CompositorNodeChromaMatte.acceptance -> acceptance: float Tolerance for a color to be considered a keying color
-CompositorNodeChromaMatte.cutoff -> cutoff: float Tolerance below which colors will be considered as exact matches
-CompositorNodeChromaMatte.gain -> gain: float Alpha gain
-CompositorNodeChromaMatte.lift -> lift: float Alpha lift
-CompositorNodeChromaMatte.shadow_adjust -> shadow_adjust: float Adjusts the brightness of any shadows captured
-CompositorNodeColorBalance.correction_formula -> correction_formula: enum
-CompositorNodeColorBalance.gain -> gain: float Correction for Highlights
-CompositorNodeColorBalance.gamma -> gamma: float Correction for Midtones
-CompositorNodeColorBalance.lift -> lift: float Correction for Shadows
-CompositorNodeColorBalance.offset -> offset: float Correction for Shadows
-CompositorNodeColorBalance.power -> power: float Correction for Midtones
-CompositorNodeColorBalance.slope -> slope: float Correction for Highlights
-CompositorNodeColorMatte.h -> h: float Hue tolerance for colors to be considered a keying color
-CompositorNodeColorMatte.s -> s: float Saturation Tolerance for the color
-CompositorNodeColorMatte.v -> v: float Value Tolerance for the color
-CompositorNodeColorSpill.algorithm -> algorithm: enum
-CompositorNodeColorSpill.channel -> channel: enum
-CompositorNodeColorSpill.limit_channel -> limit_channel: enum
-CompositorNodeColorSpill.ratio -> ratio: float Scale limit by value
-CompositorNodeColorSpill.unspill_blue -> unspill_blue: float Blue spillmap scale
-CompositorNodeColorSpill.unspill_green -> unspill_green: float Green spillmap scale
-CompositorNodeColorSpill.unspill_red -> unspill_red: float Red spillmap scale
-CompositorNodeCrop.x1 -> x1: int
-CompositorNodeCrop.x2 -> x2: int
-CompositorNodeCrop.y1 -> y1: int
-CompositorNodeCrop.y2 -> y2: int
-CompositorNodeCurveRGB.mapping -> mapping: pointer, (read-only)
-CompositorNodeCurveVec.mapping -> mapping: pointer, (read-only)
-CompositorNodeDBlur.angle -> angle: float
-CompositorNodeDBlur.center_x -> center_x: float
-CompositorNodeDBlur.center_y -> center_y: float
-CompositorNodeDBlur.distance -> distance: float
-CompositorNodeDBlur.iterations -> iterations: int
-CompositorNodeDBlur.spin -> spin: float
-CompositorNodeDBlur.zoom -> zoom: float
-CompositorNodeDefocus.angle -> angle: int Bokeh shape rotation offset in degrees
-CompositorNodeDefocus.bokeh -> bokeh: enum
-CompositorNodeDefocus.f_stop -> f_stop: float Amount of focal blur, 128=infinity=perfect focus, half the value doubles the blur radius
-CompositorNodeDefocus.max_blur -> blur_max: float blur limit, maximum CoC radius, 0=no limit
-CompositorNodeDefocus.samples -> samples: int Number of samples (16=grainy, higher=less noise)
-CompositorNodeDefocus.threshold -> threshold: float CoC radius threshold, prevents background bleed on in-focus midground, 0=off
-CompositorNodeDefocus.z_scale -> z_scale: float Scales the Z input when not using a zbuffer, controls maximum blur designated by the color white or input value 1
-CompositorNodeDiffMatte.falloff -> falloff: float Color distances below this additional threshold are partially keyed
-CompositorNodeDiffMatte.tolerance -> tolerance: float Color distances below this threshold are keyed
-CompositorNodeDilateErode.distance -> distance: int Distance to grow/shrink (number of iterations)
-CompositorNodeDistanceMatte.falloff -> falloff: float Color distances below this additional threshold are partially keyed
-CompositorNodeDistanceMatte.tolerance -> tolerance: float Color distances below this threshold are keyed
-CompositorNodeFilter.filter_type -> filter_type: enum
-CompositorNodeFlip.axis -> axis: enum
-CompositorNodeGlare.angle_offset -> angle_offset: float Streak angle offset in degrees
-CompositorNodeGlare.color_modulation -> color_modulation: float Amount of Color Modulation, modulates colors of streaks and ghosts for a spectral dispersion effect
-CompositorNodeGlare.fade -> fade: float Streak fade-out factor
-CompositorNodeGlare.glare_type -> glare_type: enum
-CompositorNodeGlare.iterations -> iterations: int
-CompositorNodeGlare.mix -> mix: float -1 is original image only, 0 is exact 50/50 mix, 1 is processed image only
-CompositorNodeGlare.quality -> quality: enum If not set to high quality, the effect will be applied to a low-res copy of the source image
-CompositorNodeGlare.size -> size: int Glow/glare size (not actual size; relative to initial size of bright area of pixels)
-CompositorNodeGlare.streaks -> streaks: int Total number of streaks
-CompositorNodeGlare.threshold -> threshold: float The glare filter will only be applied to pixels brighter than this value
-CompositorNodeHueCorrect.mapping -> mapping: pointer, (read-only)
-CompositorNodeHueSat.hue -> hue: float
-CompositorNodeHueSat.sat -> sat: float
-CompositorNodeHueSat.val -> val: float
-CompositorNodeIDMask.index -> index: int Pass index number to convert to alpha
-CompositorNodeImage.frames -> frames: int Number of images used in animation
-CompositorNodeImage.image -> image: pointer
-CompositorNodeImage.layer -> layer: enum
-CompositorNodeImage.offset -> offset: int Offsets the number of the frame to use in the animation
-CompositorNodeImage.start -> start: int
-CompositorNodeLevels.channel -> channel: enum
-CompositorNodeLumaMatte.high -> high: float Values higher than this setting are 100% opaque
-CompositorNodeLumaMatte.low -> low: float Values lower than this setting are 100% keyed
-CompositorNodeMapUV.alpha -> alpha: int
-CompositorNodeMapValue.max -> max: float
-CompositorNodeMapValue.min -> min: float
-CompositorNodeMapValue.offset -> offset: float
-CompositorNodeMapValue.size -> size: float
-CompositorNodeMath.operation -> operation: enum
-CompositorNodeMixRGB.blend_type -> blend_type: enum
-CompositorNodeOutputFile.exr_codec -> exr_codec: enum
-CompositorNodeOutputFile.filepath -> filepath: string Output path for the image, same functionality as render output.
-CompositorNodeOutputFile.frame_end -> frame_end: int
-CompositorNodeOutputFile.frame_start -> frame_start: int
-CompositorNodeOutputFile.image_type -> image_type: enum
-CompositorNodeOutputFile.quality -> quality: int
-CompositorNodePremulKey.mapping -> mapping: enum Conversion between premultiplied alpha and key alpha
-CompositorNodeRLayers.layer -> layer: enum
-CompositorNodeRLayers.scene -> scene: pointer
-CompositorNodeRotate.filter -> filter: enum Method to use to filter rotation
-CompositorNodeScale.space -> space: enum Coordinate space to scale relative to
-CompositorNodeSplitViewer.axis -> axis: enum
-CompositorNodeSplitViewer.factor -> factor: int
-CompositorNodeTexture.node_output -> node_output: int For node-based textures, which output node to use
-CompositorNodeTexture.texture -> texture: pointer
-CompositorNodeTime.curve -> curve: pointer, (read-only)
-CompositorNodeTime.end -> end: int
-CompositorNodeTime.start -> start: int
-CompositorNodeTonemap.adaptation -> adaptation: float If 0, global; if 1, based on pixel intensity
-CompositorNodeTonemap.contrast -> contrast: float Set to 0 to use estimate from input image
-CompositorNodeTonemap.correction -> correction: float If 0, same for all channels; if 1, each independent
-CompositorNodeTonemap.gamma -> gamma: float If not used, set to 1
-CompositorNodeTonemap.intensity -> intensity: float If less than zero, darkens image; otherwise, makes it brighter
-CompositorNodeTonemap.key -> key: float The value the average luminance is mapped to
-CompositorNodeTonemap.offset -> offset: float Normally always 1, but can be used as an extra control to alter the brightness curve
-CompositorNodeTonemap.tonemap_type -> tonemap_type: enum
-CompositorNodeValToRGB.color_ramp -> color_ramp: pointer, (read-only)
-CompositorNodeVecBlur.factor -> factor: float Scaling factor for motion vectors; actually 'shutter speed' in frames
-CompositorNodeVecBlur.max_speed -> speed_max: int Maximum speed, or zero for none
-CompositorNodeVecBlur.min_speed -> speed_min: int Minimum speed for a pixel to be blurred; used to separate background from foreground
-CompositorNodeVecBlur.samples -> samples: int
-ConsoleLine.current_character -> current_character: int
-ConsoleLine.line -> line: string Text in the line
-Constraint.influence -> influence: float Amount of influence constraint will have on the final solution
-Constraint.lin_error -> lin_error: float, (read-only) Amount of residual error in Blender space unit for constraints that work on position
-Constraint.name -> name: string Constraint name
-Constraint.owner_space -> owner_space: enum Space that owner is evaluated in
-Constraint.rot_error -> rot_error: float, (read-only) Amount of residual error in radiant for constraints that work on orientation
-Constraint.target_space -> target_space: enum Space that target is evaluated in
-Constraint.type -> type: enum, (read-only)
-ConstraintActuator.damping -> damping: int Damping factor: time constant (in frame) of low pass filter
-ConstraintActuator.damping_rotation -> damping_rotation: int Use a different damping for orientation
-ConstraintActuator.direction -> direction: enum Set the direction of the ray
-ConstraintActuator.direction_axis -> direction_axis: enum Select the axis to be aligned along the reference direction
-ConstraintActuator.distance -> distance: float Set the maximum length of ray
-ConstraintActuator.fh_damping -> fh_damping: float Damping factor of the Fh spring force
-ConstraintActuator.fh_height -> fh_height: float Height of the Fh area
-ConstraintActuator.limit -> limit: enum
-ConstraintActuator.limit_max -> limit_max: float
-ConstraintActuator.limit_min -> limit_min: float
-ConstraintActuator.material -> material: string Ray detects only Objects with this material
-ConstraintActuator.max_angle -> angle_max: float Maximum angle (in degree) allowed with target direction. No correction is done if angle with target direction is between min and max
-ConstraintActuator.max_rotation -> rotation_max: float Reference Direction
-ConstraintActuator.min_angle -> angle_min: float Minimum angle (in degree) to maintain with target direction. No correction is done if angle with target direction is between min and max
-ConstraintActuator.mode -> mode: enum The type of the constraint
-ConstraintActuator.property -> property: string Ray detect only Objects with this property
-ConstraintActuator.range -> range: float Set the maximum length of ray
-ConstraintActuator.spring -> spring: float Spring force within the Fh area
-ConstraintActuator.time -> time: int Maximum activation time in frame, 0 for unlimited
-ConstraintTarget.subtarget -> subtarget: string
-ConstraintTarget.target -> target: pointer Target Object
-Context.area -> area: pointer, (read-only)
-Context.main -> main: pointer, (read-only)
-Context.manager -> manager: pointer, (read-only)
-Context.mode -> mode: enum, (read-only)
-Context.region -> region: pointer, (read-only)
-Context.scene -> scene: pointer, (read-only)
-Context.screen -> screen: pointer, (read-only)
-Context.space_data -> space_data: pointer, (read-only)
-Context.tool_settings -> tool_settings: pointer, (read-only)
-Context.user_preferences -> user_preferences: pointer, (read-only)
-Context.window -> window: pointer, (read-only)
-ControlFluidSettings.attraction_radius -> attraction_radius: float Specifies the force field radius around the control object
-ControlFluidSettings.attraction_strength -> attraction_strength: float Force strength for directional attraction towards the control object
-ControlFluidSettings.end_time -> end_time: float Specifies time when the control particles are deactivated
-ControlFluidSettings.quality -> quality: float Specifies the quality which is used for object sampling. (higher = better but slower)
-ControlFluidSettings.start_time -> start_time: float Specifies time when the control particles are activated
-ControlFluidSettings.velocity_radius -> velocity_radius: float Specifies the force field radius around the control object
-ControlFluidSettings.velocity_strength -> velocity_strength: float Force strength of how much of the control object's velocity is influencing the fluid velocity
-Controller.name -> name: string
-Controller.state_number -> state_number: int Set Controller state index (1 to 30)
-Controller.type -> type: enum
-CopyLocationConstraint.head_tail -> head_tail: float Target along length of bone: Head=0, Tail=1
-CopyLocationConstraint.subtarget -> subtarget: string
-CopyLocationConstraint.target -> target: pointer Target Object
-CopyRotationConstraint.subtarget -> subtarget: string
-CopyRotationConstraint.target -> target: pointer Target Object
-CopyScaleConstraint.subtarget -> subtarget: string
-CopyScaleConstraint.target -> target: pointer Target Object
-CopyTransformsConstraint.head_tail -> head_tail: float Target along length of bone: Head=0, Tail=1
-CopyTransformsConstraint.subtarget -> subtarget: string
-CopyTransformsConstraint.target -> target: pointer Target Object
-Curve.animation_data -> animation_data: pointer, (read-only) Animation data for this datablock
-Curve.bevel_depth -> bevel_depth: float Bevel depth when not using a bevel object
-Curve.bevel_object -> bevel_object: pointer Curve object name that defines the bevel shape
-Curve.bevel_resolution -> bevel_resolution: int Bevel resolution when depth is non-zero and no specific bevel object has been defined
-Curve.dimensions -> dimensions: enum Select 2D or 3D curve type
-Curve.eval_time -> eval_time: float Parametric position along the length of the curve that Objects 'following' it should be at. Position is evaluated by dividing by the 'Path Length' value
-Curve.extrude -> extrude: float Amount of curve extrusion when not using a bevel object
-Curve.materials -> materials: collection, (read-only)
-Curve.path_length -> path_length: int The number of frames that are needed to traverse the path, defining the maximum value for the 'Evaluation Time' setting
-Curve.render_resolution_u -> render_resolution_u: int Surface resolution in U direction used while rendering. Zero skips this property
-Curve.render_resolution_v -> render_resolution_v: int Surface resolution in V direction used while rendering. Zero skips this property
-Curve.resolution_u -> resolution_u: int Surface resolution in U direction
-Curve.resolution_v -> resolution_v: int Surface resolution in V direction
-Curve.shape_keys -> shape_keys: pointer, (read-only)
-Curve.splines -> splines: collection, (read-only) Collection of splines in this curve data object
-Curve.taper_object -> taper_object: pointer Curve object name that defines the taper (width)
-Curve.texspace_loc -> texspace_loc: float Texture space location
-Curve.texspace_size -> texspace_size: float Texture space size
-Curve.twist_mode -> twist_mode: enum The type of tilt calculation for 3D Curves
-Curve.twist_smooth -> twist_smooth: float Smoothing iteration for tangents
-Curve.width -> width: float Scale the original width (1.0) based on given factor
-CurveMap.extend -> extend: enum, (read-only) Extrapolate the curve or extend it horizontally
-CurveMap.points -> points: collection, (read-only)
-CurveMapPoint.handle_type -> handle_type: enum, (read-only) Curve interpolation at this point: bezier or vector
-CurveMapPoint.location -> location: float, (read-only) X/Y coordinates of the curve point
-CurveMapping.black_level -> black_level: float For RGB curves, the color that black is mapped to
-CurveMapping.clip_max_x -> clip_max_x: float
-CurveMapping.clip_max_y -> clip_max_y: float
-CurveMapping.clip_min_x -> clip_min_x: float
-CurveMapping.clip_min_y -> clip_min_y: float
-CurveMapping.curves -> curves: collection, (read-only)
-CurveMapping.white_level -> white_level: float For RGB curves, the color that white is mapped to
-CurveModifier.deform_axis -> deform_axis: enum The axis that the curve deforms along
-CurveModifier.object -> object: pointer Curve object to deform with
-CurveModifier.vertex_group -> vertex_group: string Vertex group name
-CurveSplines.active -> active: pointer Active curve spline
-DampedTrackConstraint.subtarget -> subtarget: string
-DampedTrackConstraint.target -> target: pointer Target Object
-DampedTrackConstraint.track -> track: enum Axis that points to the target object
-DecimateModifier.face_count -> face_count: int, (read-only) The current number of faces in the decimated mesh
-DecimateModifier.ratio -> ratio: float Defines the ratio of triangles to reduce to
-DelaySensor.delay -> delay: int Delay in number of logic tics before the positive trigger (default 60 per second)
-DelaySensor.duration -> duration: int If >0, delay in number of logic tics before the negative trigger following the positive trigger
-DisplaceModifier.direction -> direction: enum
-DisplaceModifier.midlevel -> midlevel: float Material value that gives no displacement
-DisplaceModifier.strength -> strength: float
-DisplaceModifier.texture -> texture: pointer
-DisplaceModifier.texture_coordinate_object -> texture_coordinate_object: pointer
-DisplaceModifier.texture_coordinates -> texture_coordinates: enum
-DisplaceModifier.uv_layer -> uv_layer: string UV layer name
-DisplaceModifier.vertex_group -> vertex_group: string Vertex group name
-DistortedNoiseTexture.distortion -> distortion: float
-DistortedNoiseTexture.nabla -> nabla: float Size of derivative offset used for calculating normal
-DistortedNoiseTexture.noise_basis -> noise_basis: enum Sets the noise basis used for turbulence
-DistortedNoiseTexture.noise_distortion -> noise_distortion: enum Sets the noise basis for the distortion
-DistortedNoiseTexture.noise_size -> noise_size: float Sets scaling for noise input
-DomainFluidSettings.compressibility -> compressibility: float Allowed compressibility due to gravitational force for standing fluid. (directly affects simulation step size)
-DomainFluidSettings.end_time -> end_time: float Simulation time of the last blender frame
-DomainFluidSettings.generate_particles -> generate_particles: float Amount of particles to generate (0=off, 1=normal, >1=more)
-DomainFluidSettings.gravity -> gravity: float Gravity in X, Y and Z direction
-DomainFluidSettings.grid_levels -> grid_levels: int Number of coarsened grids to use (-1 for automatic)
-DomainFluidSettings.memory_estimate -> memory_estimate: string, (read-only) Estimated amount of memory needed for baking the domain
-DomainFluidSettings.partial_slip_factor -> partial_slip_factor: float Amount of mixing between no- and free-slip, 0 is no slip and 1 is free slip
-DomainFluidSettings.path -> path: string Directory (and/or filename prefix) to store baked fluid simulation files in
-DomainFluidSettings.preview_resolution -> preview_resolution: int Preview resolution in X,Y and Z direction
-DomainFluidSettings.real_world_size -> real_world_size: float Size of the simulation domain in metres
-DomainFluidSettings.render_display_mode -> render_display_mode: enum How to display the mesh for rendering
-DomainFluidSettings.resolution -> resolution: int Domain resolution in X,Y and Z direction
-DomainFluidSettings.slip_type -> slip_type: enum
-DomainFluidSettings.start_time -> start_time: float Simulation time of the first blender frame
-DomainFluidSettings.surface_smoothing -> surface_smooth: float Amount of surface smoothing. A value of 0 is off, 1 is normal smoothing and more than 1 is extra smoothing
-DomainFluidSettings.surface_subdivisions -> surface_subdivisions: int Number of isosurface subdivisions. This is necessary for the inclusion of particles into the surface generation. Warning - can lead to longer computation times!
-DomainFluidSettings.tracer_particles -> tracer_particles: int Number of tracer particles to generate
-DomainFluidSettings.viewport_display_mode -> viewport_display_mode: enum How to display the mesh in the viewport
-DomainFluidSettings.viscosity_base -> viscosity_base: float Viscosity setting: value that is multiplied by 10 to the power of (exponent*-1)
-DomainFluidSettings.viscosity_exponent -> viscosity_exponent: int Negative exponent for the viscosity value (to simplify entering small values e.g. 5*10^-6.)
-DomainFluidSettings.viscosity_preset -> viscosity_preset: enum Set viscosity of the fluid to a preset value, or use manual input
-DopeSheet.filtering_group -> filtering_group: pointer Group that included Object should be a member of
-DopeSheet.source -> source: pointer, (read-only) ID-Block representing source data, currently ID_SCE (for Dopesheet), and ID_SC (for Grease Pencil)
-Driver.expression -> expression: string Expression to use for Scripted Expression
-Driver.type -> type: enum Driver type
-Driver.variables -> variables: collection, (read-only) Properties acting as inputs for this driver
-DriverTarget.bone_target -> bone_target: string Name of PoseBone to use as target
-DriverTarget.data_path -> data_path: string RNA Path (from ID-block) to property used
-DriverTarget.id -> id: pointer ID-block that the specific property used can be found from (id_type property must be set first)
-DriverTarget.id_type -> id_type: enum Type of ID-block that can be used
-DriverTarget.transform_type -> transform_type: enum Driver variable type
-DriverVariable.name -> name: string Name to use in scripted expressions/functions. (No spaces or dots are allowed. Also, must not start with a symbol or digit)
-DriverVariable.targets -> targets: collection, (read-only) Sources of input data for evaluating this variable
-DriverVariable.type -> type: enum Driver variable type
-DupliObject.matrix -> matrix: float Object duplicate transformation matrix
-DupliObject.object -> object: pointer, (read-only) Object being duplicated
-DupliObject.object_matrix -> object_matrix: float Duplicated object transformation matrix
-EdgeSplitModifier.split_angle -> split_angle: float Angle above which to split edges
-EditBone.bbone_in -> bbone_in: float Length of first Bezier Handle (for B-Bones only)
-EditBone.bbone_out -> bbone_out: float Length of second Bezier Handle (for B-Bones only)
-EditBone.bbone_segments -> bbone_segments: int Number of subdivisions of bone (for B-Bones only)
-EditBone.envelope_distance -> envelope_distance: float Bone deformation distance (for Envelope deform only)
-EditBone.envelope_weight -> envelope_weight: float Bone deformation weight (for Envelope deform only)
-EditBone.head -> head: float Location of head end of the bone
-EditBone.head_radius -> head_radius: float Radius of head of bone (for Envelope deform only)
-EditBone.matrix -> matrix: float, (read-only) Read-only matrix calculated from the roll (armature space)
-EditBone.name -> name: string
-EditBone.parent -> parent: pointer Parent edit bone (in same Armature)
-EditBone.roll -> roll: float Bone rotation around head-tail axis
-EditBone.tail -> tail: float Location of tail end of the bone
-EditBone.tail_radius -> tail_radius: float Radius of tail of bone (for Envelope deform only)
-EditObjectActuator.angular_velocity -> angular_velocity: float Angular velocity upon creation
-EditObjectActuator.dynamic_operation -> dynamic_operation: enum
-EditObjectActuator.linear_velocity -> linear_velocity: float Velocity upon creation
-EditObjectActuator.mass -> mass: float The mass of the object
-EditObjectActuator.mesh -> mesh: pointer Replace the existing, when left blank 'Phys' will remake the existing physics mesh
-EditObjectActuator.mode -> mode: enum The mode of the actuator
-EditObjectActuator.object -> object: pointer Add this Object and all its children (cant be on an visible layer)
-EditObjectActuator.time -> time: int Duration the new Object lives or the track takes
-EditObjectActuator.track_object -> track_object: pointer Track to this Object
-EffectSequence.color_balance -> color_balance: pointer, (read-only)
-EffectSequence.crop -> crop: pointer, (read-only)
-EffectSequence.multiply_colors -> color_multiply: float
-EffectSequence.proxy -> proxy: pointer, (read-only)
-EffectSequence.strobe -> strobe: float Only display every nth frame
-EffectSequence.transform -> transform: pointer, (read-only)
-EffectorWeights.all -> all: float All effector's weight
-EffectorWeights.boid -> boid: float Boid effector weight
-EffectorWeights.charge -> charge: float Charge effector weight
-EffectorWeights.curveguide -> curveguide: float Curve guide effector weight
-EffectorWeights.drag -> drag: float Drag effector weight
-EffectorWeights.force -> force: float Force effector weight
-EffectorWeights.gravity -> gravity: float Global gravity weight
-EffectorWeights.group -> group: pointer Limit effectors to this Group
-EffectorWeights.harmonic -> harmonic: float Harmonic effector weight
-EffectorWeights.lennardjones -> lennardjones: float Lennard-Jones effector weight
-EffectorWeights.magnetic -> magnetic: float Magnetic effector weight
-EffectorWeights.texture -> texture: float Texture effector weight
-EffectorWeights.turbulence -> turbulence: float Turbulence effector weight
-EffectorWeights.vortex -> vortex: float Vortex effector weight
-EffectorWeights.wind -> wind: float Wind effector weight
-EnumProperty.default -> default: enum, (read-only) Default value for this enum
-EnumProperty.items -> items: collection, (read-only) Possible values for the property
-EnumPropertyItem.description -> description: string, (read-only) Description of the item's purpose
-EnumPropertyItem.identifier -> identifier: string, (read-only) Unique name used in the code and scripting
-EnumPropertyItem.name -> name: string, (read-only) Human readable name
-EnumPropertyItem.value -> value: int, (read-only) Value of the item
-EnvironmentMap.clip_end -> clip_end: float Objects further than this are not visible to map
-EnvironmentMap.clip_start -> clip_start: float Objects nearer than this are not visible to map
-EnvironmentMap.depth -> depth: int Number of times a map will be rendered recursively (mirror effects.)
-EnvironmentMap.mapping -> mapping: enum
-EnvironmentMap.resolution -> resolution: int Pixel resolution of the rendered environment map
-EnvironmentMap.source -> source: enum
-EnvironmentMap.viewpoint_object -> viewpoint_object: pointer Object to use as the environment map's viewpoint location
-EnvironmentMap.zoom -> zoom: float
-EnvironmentMapTexture.environment_map -> environment_map: pointer, (read-only) Gets the environment map associated with this texture
-EnvironmentMapTexture.filter -> filter: enum Texture filter to use for sampling image
-EnvironmentMapTexture.filter_eccentricity -> filter_eccentricity: int Maximum eccentricity. Higher gives less blur at distant/oblique angles, but is also slower
-EnvironmentMapTexture.filter_probes -> filter_probes: int Maximum number of samples. Higher gives less blur at distant/oblique angles, but is also slower
-EnvironmentMapTexture.filter_size -> filter_size: float Multiplies the filter size used by MIP Map and Interpolation
-EnvironmentMapTexture.image -> image: pointer Source image file to read the environment map from
-EnvironmentMapTexture.image_user -> image_user: pointer, (read-only) Parameters defining which layer, pass and frame of the image is displayed
-Event.ascii -> ascii: string, (read-only) Single ASCII character for this event
-Event.mouse_prev_x -> mouse_prev_x: int, (read-only) The window relative vertical location of the mouse
-Event.mouse_prev_y -> mouse_prev_y: int, (read-only) The window relative horizontal location of the mouse
-Event.mouse_region_x -> mouse_region_x: int, (read-only) The region relative vertical location of the mouse
-Event.mouse_region_y -> mouse_region_y: int, (read-only) The region relative horizontal location of the mouse
-Event.mouse_x -> mouse_x: int, (read-only) The window relative vertical location of the mouse
-Event.mouse_y -> mouse_y: int, (read-only) The window relative horizontal location of the mouse
-Event.type -> type: enum, (read-only)
-Event.value -> value: enum, (read-only) The type of event, only applies to some
-ExplodeModifier.protect -> protect: float Clean vertex group edges
-ExplodeModifier.vertex_group -> vertex_group: string
-ExpressionController.expression -> expression: string
-FCurve.array_index -> array_index: int Index to the specific property affected by F-Curve if applicable
-FCurve.color -> color: float Color of the F-Curve in the Graph Editor
-FCurve.color_mode -> color_mode: enum Method used to determine color of F-Curve in Graph Editor
-FCurve.data_path -> data_path: string RNA Path to property affected by F-Curve
-FCurve.driver -> driver: pointer, (read-only) Channel Driver (only set for Driver F-Curves)
-FCurve.extrapolation -> extrapolation: enum
-FCurve.group -> group: pointer Action Group that this F-Curve belongs to
-FCurve.keyframe_points -> keyframe_points: collection, (read-only) User-editable keyframes
-FCurve.modifiers -> modifiers: collection, (read-only) Modifiers affecting the shape of the F-Curve
-FCurve.sampled_points -> sampled_points: collection, (read-only) Sampled animation data
-FCurveModifiers.active -> active: pointer Active F-Curve Modifier
-FCurveSample.co -> co: float Point coordinates
-FModifier.type -> type: enum, (read-only) F-Curve Modifier Type
-FModifierCycles.after_cycles -> after_cycles: float Maximum number of cycles to allow after last keyframe. (0 = infinite)
-FModifierCycles.after_mode -> after_mode: enum Cycling mode to use after last keyframe
-FModifierCycles.before_cycles -> before_cycles: float Maximum number of cycles to allow before first keyframe. (0 = infinite)
-FModifierCycles.before_mode -> before_mode: enum Cycling mode to use before first keyframe
-FModifierEnvelope.control_points -> control_points: collection, (read-only) Control points defining the shape of the envelope
-FModifierEnvelope.default_maximum -> default_max: float Upper distance from Reference Value for 1:1 default influence
-FModifierEnvelope.default_minimum -> default_min: float Lower distance from Reference Value for 1:1 default influence
-FModifierEnvelope.reference_value -> reference_value: float Value that envelope's influence is centered around / based on
-FModifierEnvelopeControlPoint.frame -> frame: float Frame this control-point occurs on
-FModifierEnvelopeControlPoint.maximum -> max: float Upper bound of envelope at this control-point
-FModifierEnvelopeControlPoint.minimum -> min: float Lower bound of envelope at this control-point
-FModifierFunctionGenerator.amplitude -> amplitude: float Scale factor determining the maximum/minimum values
-FModifierFunctionGenerator.function_type -> function_type: enum Type of built-in function to use
-FModifierFunctionGenerator.phase_multiplier -> phase_multiplier: float Scale factor determining the 'speed' of the function
-FModifierFunctionGenerator.phase_offset -> phase_offset: float Constant factor to offset time by for function
-FModifierFunctionGenerator.value_offset -> value_offset: float Constant factor to offset values by
-FModifierGenerator.coefficients -> coefficients: float Coefficients for 'x' (starting from lowest power of x^0)
-FModifierGenerator.mode -> mode: enum Type of generator to use
-FModifierGenerator.poly_order -> poly_order: int The highest power of 'x' for this polynomial. (number of coefficients - 1)
-FModifierLimits.maximum_x -> max_x: float Highest X value to allow
-FModifierLimits.maximum_y -> max_y: float Highest Y value to allow
-FModifierLimits.minimum_x -> min_x: float Lowest X value to allow
-FModifierLimits.minimum_y -> min_y: float Lowest Y value to allow
-FModifierNoise.depth -> depth: int Amount of fine level detail present in the noise
-FModifierNoise.modification -> modification: enum Method of modifying the existing F-Curve
-FModifierNoise.phase -> phase: float A random seed for the noise effect
-FModifierNoise.size -> size: float Scaling (in time) of the noise
-FModifierNoise.strength -> strength: float Amplitude of the noise - the amount that it modifies the underlying curve
-FModifierStepped.frame_end -> frame_end: float Frame that modifier's influence ends (if applicable)
-FModifierStepped.frame_start -> frame_start: float Frame that modifier's influence starts (if applicable)
-FModifierStepped.offset -> offset: float Reference number of frames before frames get held. Use to get hold for '1-3' vs '5-7' holding patterns
-FModifierStepped.step_size -> step_size: float Number of frames to hold each value
-FcurveActuator.frame_end -> frame_end: int
-FcurveActuator.frame_property -> frame_property: string Assign the action's current frame number to this property
-FcurveActuator.frame_start -> frame_start: int
-FcurveActuator.play_type -> play_type: enum Specify the way you want to play the animation
-FcurveActuator.property -> property: string Use this property to define the F-Curve position
-FieldSettings.falloff_power -> falloff_power: float Falloff power (real gravitational falloff = 2)
-FieldSettings.falloff_type -> falloff_type: enum Fall-off shape
-FieldSettings.flow -> flow: float Convert effector force into air flow velocity
-FieldSettings.guide_clump_amount -> guide_clump_amount: float Amount of clumping
-FieldSettings.guide_clump_shape -> guide_clump_shape: float Shape of clumping
-FieldSettings.guide_free -> guide_free: float Guide-free time from particle life's end
-FieldSettings.guide_kink_amplitude -> guide_kink_amplitude: float The amplitude of the offset
-FieldSettings.guide_kink_axis -> guide_kink_axis: enum Which axis to use for offset
-FieldSettings.guide_kink_frequency -> guide_kink_frequency: float The frequency of the offset (1/total length)
-FieldSettings.guide_kink_shape -> guide_kink_shape: float Adjust the offset to the beginning/end
-FieldSettings.guide_kink_type -> guide_kink_type: enum Type of periodic offset on the curve
-FieldSettings.guide_minimum -> guide_minimum: float The distance from which particles are affected fully
-FieldSettings.harmonic_damping -> harmonic_damping: float Damping of the harmonic force
-FieldSettings.inflow -> inflow: float Inwards component of the vortex force
-FieldSettings.linear_drag -> linear_drag: float Drag component proportional to velocity
-FieldSettings.maximum_distance -> distance_max: float Maximum distance for the field to work
-FieldSettings.minimum_distance -> distance_min: float Minimum distance for the field's fall-off
-FieldSettings.noise -> noise: float Noise of the force
-FieldSettings.quadratic_drag -> quadratic_drag: float Drag component proportional to the square of velocity
-FieldSettings.radial_falloff -> radial_falloff: float Radial falloff power (real gravitational falloff = 2)
-FieldSettings.radial_maximum -> radial_max: float Maximum radial distance for the field to work
-FieldSettings.radial_minimum -> radial_min: float Minimum radial distance for the field's fall-off
-FieldSettings.rest_length -> rest_length: float Rest length of the harmonic force
-FieldSettings.seed -> seed: int Seed of the noise
-FieldSettings.shape -> shape: enum Which direction is used to calculate the effector force
-FieldSettings.size -> size: float Size of the noise
-FieldSettings.strength -> strength: float Strength of force field
-FieldSettings.texture -> texture: pointer Texture to use as force
-FieldSettings.texture_mode -> texture_mode: enum How the texture effect is calculated (RGB & Curl need a RGB texture else Gradient will be used instead)
-FieldSettings.texture_nabla -> texture_nabla: float Defines size of derivative offset used for calculating gradient and curl
-FieldSettings.type -> type: enum Type of field
-FieldSettings.z_direction -> z_direction: enum Effect in full or only positive/negative Z direction
-FileSelectParams.directory -> directory: string Directory displayed in the file browser
-FileSelectParams.display -> display: enum Display mode for the file list
-FileSelectParams.file -> file: string Active file in the file browser
-FileSelectParams.sort -> sort: enum
-FileSelectParams.title -> title: string, (read-only) Title for the file browser
-Filter2DActuator.filter_pass -> filter_pass: int Set filter order
-Filter2DActuator.glsl_shader -> glsl_shader: pointer
-Filter2DActuator.mode -> mode: enum
-Filter2DActuator.motion_blur_value -> motion_blur_value: float Set motion blur value
-FloatProperty.array_length -> array_length: int, (read-only) Maximum length of the array, 0 means unlimited
-FloatProperty.default -> default: float, (read-only) Default value for this number
-FloatProperty.default_array -> default_array: float, (read-only) Default value for this array
-FloatProperty.hard_max -> hard_max: float, (read-only) Maximum value used by buttons
-FloatProperty.hard_min -> hard_min: float, (read-only) Minimum value used by buttons
-FloatProperty.precision -> precision: int, (read-only) Number of digits after the dot used by buttons
-FloatProperty.soft_max -> soft_max: float, (read-only) Maximum value used by buttons
-FloatProperty.soft_min -> soft_min: float, (read-only) Minimum value used by buttons
-FloatProperty.step -> step: float, (read-only) Step size used by number buttons, for floats 1/100th of the step size
-FloorConstraint.floor_location -> floor_location: enum Location of target that object will not pass through
-FloorConstraint.offset -> offset: float Offset of floor from object origin
-FloorConstraint.subtarget -> subtarget: string
-FloorConstraint.target -> target: pointer Target Object
-FluidFluidSettings.initial_velocity -> initial_velocity: float Initial velocity of fluid
-FluidFluidSettings.volume_initialization -> volume_initialization: enum Volume initialization type
-FluidSettings.type -> type: enum Type of participation in the fluid simulation
-FluidSimulationModifier.settings -> settings: pointer, (read-only) Settings for how this object is used in the fluid simulation
-FollowPathConstraint.forward -> forward: enum Axis that points forward along the path
-FollowPathConstraint.offset -> offset: int Offset from the position corresponding to the time frame
-FollowPathConstraint.offset_factor -> offset_factor: float Percentage value defining target position along length of bone
-FollowPathConstraint.target -> target: pointer Target Object
-FollowPathConstraint.up -> up: enum Axis that points upward
-Function.description -> description: string, (read-only) Description of the Function's purpose
-Function.identifier -> identifier: string, (read-only) Unique name used in the code and scripting
-Function.parameters -> parameters: collection, (read-only) Parameters for the function
-GPencilFrame.frame_number -> frame_number: int The frame on which this sketch appears
-GPencilFrame.strokes -> strokes: collection, (read-only) Freehand curves defining the sketch on this frame
-GPencilLayer.active_frame -> active_frame: pointer, (read-only) Frame currently being displayed for this layer
-GPencilLayer.color -> color: float Color for all strokes in this layer
-GPencilLayer.frames -> frames: collection, (read-only) Sketches for this layer on different frames
-GPencilLayer.info -> info: string Layer name
-GPencilLayer.line_thickness -> line_width: int Thickness of strokes (in pixels)
-GPencilLayer.max_ghost_range -> ghost_range_max: int Maximum number of frames on either side of the active frame to show (0 = show the 'first' available sketch on either side)
-GPencilLayer.opacity -> opacity: float Layer Opacity
-GPencilStroke.points -> points: collection, (read-only) Stroke data points
-GPencilStrokePoint.co -> co: float
-GPencilStrokePoint.pressure -> pressure: float Pressure of tablet at point when drawing it
-GameActuator.filename -> filename: string Load this blend file, use the "//" prefix for a path relative to the current blend file
-GameActuator.mode -> mode: enum
-GameFloatProperty.value -> value: float Property value
-GameIntProperty.value -> value: int Property value
-GameObjectSettings.actuators -> actuators: collection, (read-only) Game engine actuators to act on events
-GameObjectSettings.collision_bounds -> collision_bounds: enum Selects the collision type
-GameObjectSettings.collision_margin -> collision_margin: float Extra margin around object for collision detection, small amount required for stability
-GameObjectSettings.controllers -> controllers: collection, (read-only) Game engine controllers to process events, connecting sensor to actuators
-GameObjectSettings.damping -> damping: float General movement damping
-GameObjectSettings.form_factor -> form_factor: float Form factor scales the inertia tensor
-GameObjectSettings.friction_coefficients -> friction_coefficients: float Relative friction coefficient in the in the X, Y and Z directions, when anisotropic friction is enabled
-GameObjectSettings.mass -> mass: float Mass of the object
-GameObjectSettings.maximum_velocity -> velocity_max: float Clamp velocity to this maximum speed
-GameObjectSettings.minimum_velocity -> velocity_min: float Clamp velocity to this minimum speed (except when totally still)
-GameObjectSettings.physics_type -> physics_type: enum Selects the type of physical representation
-GameObjectSettings.properties -> properties: collection, (read-only) Game engine properties
-GameObjectSettings.radius -> radius: float Radius of bounding sphere and material physics
-GameObjectSettings.rotation_damping -> rotation_damping: float General rotation damping
-GameObjectSettings.sensors -> sensors: collection, (read-only) Game engine sensor to detect events
-GameObjectSettings.soft_body -> soft_body: pointer, (read-only) Settings for Bullet soft body simulation
-GameProperty.name -> name: string Available as GameObject attributes in the game engine's python API
-GameProperty.type -> type: enum
-GameSoftBodySettings.cluster_iterations -> cluster_iterations: int Specify the number of cluster iterations
-GameSoftBodySettings.dynamic_friction -> dynamic_friction: float Dynamic Friction
-GameSoftBodySettings.linstiff -> linear_stiffness: float Linear stiffness of the soft body links
-GameSoftBodySettings.margin -> margin: float Collision margin for soft body. Small value makes the algorithm unstable
-GameSoftBodySettings.position_iterations -> position_iterations: int Position solver iterations
-GameSoftBodySettings.threshold -> threshold: float Shape matching threshold
-GameSoftBodySettings.welding -> weld_threshold: float Welding threshold: distance between nearby vertices to be considered equal => set to 0.0 to disable welding test and speed up scene loading (ok if the mesh has no duplicates)
-GameStringProperty.value -> value: string Property value
-GameTimerProperty.value -> value: float Property value
-GlowSequence.blur_distance -> blur_distance: float Radius of glow effect
-GlowSequence.boost_factor -> boost_factor: float Brightness multiplier
-GlowSequence.clamp -> clamp: float rightness limit of intensity
-GlowSequence.quality -> quality: int Accuracy of the blur effect
-GlowSequence.threshold -> threshold: float Minimum intensity to trigger a glow
-GreasePencil.draw_mode -> draw_mode: enum
-GreasePencil.layers -> layers: collection, (read-only)
-Group.dupli_offset -> dupli_offset: float Offset from the origin to use when instancing as DupliGroup
-Group.objects -> objects: collection, (read-only) A collection of this groups objects
-Header.bl_idname -> bl_idname: string
-Header.bl_space_type -> bl_space_type: enum
-Header.layout -> layout: pointer, (read-only)
-Histogram.mode -> mode: enum Channels to display when drawing the histogram
-HookModifier.falloff -> falloff: float If not zero, the distance from the hook where influence ends
-HookModifier.force -> force: float Relative force of the hook
-HookModifier.object -> object: pointer Parent Object for hook, also recalculates and clears offset
-HookModifier.subtarget -> subtarget: string Name of Parent Bone for hook (if applicable), also recalculates and clears offset
-HookModifier.vertex_group -> vertex_group: string Vertex group name
-ID.library -> library: pointer, (read-only) Library file the datablock is linked from
-ID.name -> name: string Unique datablock ID name
-ID.users -> users: int, (read-only) Number of times this datablock is referenced
-IDProperty.collection -> collection: collection, (read-only)
-IDProperty.double -> double: float
-IDProperty.double_array -> double_array: float
-IDProperty.float -> float: float
-IDProperty.float_array -> float_array: float
-IDProperty.group -> group: pointer, (read-only)
-IDProperty.int -> int: int
-IDProperty.int_array -> int_array: int
-IDProperty.string -> string: string
-IDPropertyGroup.name -> name: string Unique name used in the code and scripting
-IKParam.ik_solver -> ik_solver: enum, (read-only) IK solver for which these parameters are defined, 0 for Legacy, 1 for iTaSC
-Image.animation_end -> animation_end: int End frame of an animated texture
-Image.animation_speed -> animation_speed: int Speed of the animation in frames per second
-Image.animation_start -> animation_start: int Start frame of an animated texture
-Image.bindcode -> bindcode: int, (read-only) OpenGL bindcode
-Image.depth -> depth: int, (read-only) Image bit depth
-Image.display_aspect -> display_aspect: float Display Aspect for this image, does not affect rendering
-Image.field_order -> field_order: enum Order of video fields. Select which lines are displayed first
-Image.file_format -> file_format: enum Format used for re-saving this file
-Image.filepath -> filepath: string Image/Movie file name
-Image.filepath_raw -> filepath_raw: string Image/Movie file name (without data refreshing)
-Image.generated_height -> generated_height: int Generated image height
-Image.generated_type -> generated_type: enum Generated image type
-Image.generated_width -> generated_width: int Generated image width
-Image.mapping -> mapping: enum Mapping type to use for this image in the game engine
-Image.packed_file -> packed_file: pointer, (read-only)
-Image.size -> size: int, (read-only) Width and height in pixels, zero when image data cant be loaded
-Image.source -> source: enum Where the image comes from
-Image.tiles_x -> tiles_x: int Degree of repetition in the X direction
-Image.tiles_y -> tiles_y: int Degree of repetition in the Y direction
-Image.type -> type: enum, (read-only) How to generate the image
-ImagePaint.normal_angle -> normal_angle: int Paint most on faces pointing towards the view according to this angle
-ImagePaint.screen_grab_size -> screen_grab_size: int Size to capture the image for re-projecting
-ImagePaint.seam_bleed -> seam_bleed: int Extend paint beyond the faces UVs to reduce seams (in pixels, slower)
-ImageSequence.animation_end_offset -> animation_end_offset: int Animation end offset (trim end)
-ImageSequence.animation_start_offset -> animation_start_offset: int Animation start offset (trim start)
-ImageSequence.color_balance -> color_balance: pointer, (read-only)
-ImageSequence.crop -> crop: pointer, (read-only)
-ImageSequence.directory -> directory: string
-ImageSequence.elements -> elements: collection, (read-only)
-ImageSequence.multiply_colors -> multiply_colors: float
-ImageSequence.proxy -> proxy: pointer, (read-only)
-ImageSequence.strobe -> strobe: float Only display every nth frame
-ImageSequence.transform -> transform: pointer, (read-only)
-ImageTexture.checker_distance -> checker_distance: float Sets distance between checker tiles
-ImageTexture.crop_max_x -> crop_max_x: float Sets maximum X value to crop the image
-ImageTexture.crop_max_y -> crop_max_y: float Sets maximum Y value to crop the image
-ImageTexture.crop_min_x -> crop_min_x: float Sets minimum X value to crop the image
-ImageTexture.crop_min_y -> crop_min_y: float Sets minimum Y value to crop the image
-ImageTexture.extension -> extension: enum Sets how the image is extrapolated past its original bounds
-ImageTexture.filter -> filter: enum Texture filter to use for sampling image
-ImageTexture.filter_eccentricity -> filter_eccentricity: int Maximum eccentricity. Higher gives less blur at distant/oblique angles, but is also slower
-ImageTexture.filter_probes -> filter_probes: int Maximum number of samples. Higher gives less blur at distant/oblique angles, but is also slower
-ImageTexture.filter_size -> filter_size: float Multiplies the filter size used by MIP Map and Interpolation
-ImageTexture.image -> image: pointer
-ImageTexture.image_user -> image_user: pointer, (read-only) Parameters defining which layer, pass and frame of the image is displayed
-ImageTexture.normal_space -> normal_space: enum Sets space of normal map image
-ImageTexture.repeat_x -> repeat_x: int Sets a repetition multiplier in the X direction
-ImageTexture.repeat_y -> repeat_y: int Sets a repetition multiplier in the Y direction
-ImageUser.fields_per_frame -> fields_per_frame: int The number of fields per rendered frame (2 fields is 1 image)
-ImageUser.frame_start -> frame_start: int Sets the global starting frame of the movie
-ImageUser.frames -> frames: int Sets the number of images of a movie to use
-ImageUser.multilayer_layer -> multilayer_layer: int, (read-only) Layer in multilayer image
-ImageUser.multilayer_pass -> multilayer_pass: int, (read-only) Pass in multilayer image
-ImageUser.offset -> offset: int Offsets the number of the frame to use in the animation
-InflowFluidSettings.inflow_velocity -> inflow_velocity: float Initial velocity of fluid
-InflowFluidSettings.volume_initialization -> volume_initialization: enum Volume initialization type
-IntProperty.array_length -> array_length: int, (read-only) Maximum length of the array, 0 means unlimited
-IntProperty.default -> default: int, (read-only) Default value for this number
-IntProperty.default_array -> default_array: int, (read-only) Default value for this array
-IntProperty.hard_max -> hard_max: int, (read-only) Maximum value used by buttons
-IntProperty.hard_min -> hard_min: int, (read-only) Minimum value used by buttons
-IntProperty.soft_max -> soft_max: int, (read-only) Maximum value used by buttons
-IntProperty.soft_min -> soft_min: int, (read-only) Minimum value used by buttons
-IntProperty.step -> step: int, (read-only) Step size used by number buttons, for floats 1/100th of the step size
-Itasc.dampeps -> dampeps: float Singular value under which damping is progressively applied. Higher values=more stability, less reactivity. Default=0.1
-Itasc.dampmax -> dampmax: float Maximum damping coefficient when singular value is nearly 0. Higher values=more stability, less reactivity. Default=0.5
-Itasc.feedback -> feedback: float Feedback coefficient for error correction. Average response time=1/feedback. Default=20
-Itasc.max_step -> step_max: float Higher bound for timestep in second in case of automatic substeps
-Itasc.max_velocity -> velocity_max: float Maximum joint velocity in rad/s. Default=50
-Itasc.min_step -> step_min: float Lower bound for timestep in second in case of automatic substeps
-Itasc.mode -> mode: enum
-Itasc.num_iter -> num_iter: int Maximum number of iterations for convergence in case of reiteration
-Itasc.num_step -> num_step: int Divides the frame interval into this many steps
-Itasc.precision -> precision: float Precision of convergence in case of reiteration
-Itasc.reiteration -> reiteration: enum Defines if the solver is allowed to reiterate (converges until precision is met) on none, first or all frames
-Itasc.solver -> solver: enum Solving method selection: Automatic damping or manual damping
-JoystickSensor.axis_direction -> axis_direction: enum The direction of the axis
-JoystickSensor.axis_number -> axis_number: int Specify which axis pair to use, 1 is usually the main direction input
-JoystickSensor.axis_threshold -> axis_threshold: int Specify the precision of the axis
-JoystickSensor.button_number -> button_number: int Specify which button to use
-JoystickSensor.event_type -> event_type: enum The type of event this joystick sensor is triggered on
-JoystickSensor.hat_direction -> hat_direction: enum Specify hat direction
-JoystickSensor.hat_number -> hat_number: int Specify which hat to use
-JoystickSensor.joystick_index -> joystick_index: int Specify which joystick to use
-JoystickSensor.single_axis_number -> single_axis_number: int Specify a single axis (verticle/horizontal/other) to detect
-Key.animation_data -> animation_data: pointer, (read-only) Animation data for this datablock
-Key.keys -> keys: collection, (read-only) Shape keys
-Key.reference_key -> reference_key: pointer, (read-only)
-Key.slurph -> slurph: int Creates a delay in amount of frames in applying keypositions, first vertex goes first
-Key.user -> user: pointer, (read-only) Datablock using these shape keys
-KeyConfig.keymaps -> keymaps: collection, (read-only) Key maps configured as part of this configuration
-KeyConfig.name -> name: string Name of the key configuration
-KeyMap.items -> items: collection, (read-only) Items in the keymap, linking an operator to an input event
-KeyMap.name -> name: string, (read-only) Name of the key map
-KeyMap.region_type -> region_type: enum, (read-only) Optional region type keymap is associated with
-KeyMap.space_type -> space_type: enum, (read-only) Optional space type keymap is associated with
-KeyMapItem.id -> id: int, (read-only) ID of the item
-KeyMapItem.idname -> idname: string Identifier of operator to call on input event
-KeyMapItem.key_modifier -> key_modifier: enum Regular key pressed as a modifier
-KeyMapItem.map_type -> map_type: enum Type of event mapping
-KeyMapItem.name -> name: string, (read-only) Name of operator to call on input event
-KeyMapItem.properties -> properties: pointer, (read-only) Properties to set when the operator is called
-KeyMapItem.propvalue -> propvalue: enum The value this event translates to in a modal keymap
-KeyMapItem.type -> type: enum Type of event
-KeyMapItem.value -> value: enum
-KeyboardSensor.key -> key: enum
-KeyboardSensor.log -> log: string Property that receive the keystrokes in case a string is logged
-KeyboardSensor.modifier_key -> modifier_key: enum Modifier key code
-KeyboardSensor.second_modifier_key -> second_modifier_key: enum Modifier key code
-KeyboardSensor.target -> target: string Property that indicates whether to log keystrokes as a string
-Keyframe.co -> co: float Coordinates of the control point
-Keyframe.handle1 -> handle_left: float Coordinates of the first handle
-Keyframe.handle1_type -> handle_left_type: enum Handle types
-Keyframe.handle2 -> handle_right: float Coordinates of the second handle
-Keyframe.handle2_type -> handle_right_type: enum Handle types
-Keyframe.interpolation -> interpolation: enum Interpolation method to use for segment of the curve from this Keyframe until the next Keyframe
-Keyframe.type -> type: enum The type of keyframe
-KeyingSet.active_path -> active_path: pointer Active Keying Set used to insert/delete keyframes
-KeyingSet.active_path_index -> active_path_index: int Current Keying Set index
-KeyingSet.name -> name: string
-KeyingSet.paths -> paths: collection, (read-only) Keying Set Paths to define settings that get keyframed together
-KeyingSet.type_info -> type_info: pointer, (read-only) Callback function defines for built-in Keying Sets
-KeyingSetInfo.bl_idname -> bl_idname: string
-KeyingSetInfo.bl_label -> bl_label: string
-KeyingSetPath.array_index -> array_index: int Index to the specific setting if applicable
-KeyingSetPath.data_path -> data_path: string Path to property setting
-KeyingSetPath.group -> group: string Name of Action Group to assign setting(s) for this path to
-KeyingSetPath.grouping -> group_method: enum Method used to define which Group-name to use
-KeyingSetPath.id -> id: pointer ID-Block that keyframes for Keying Set should be added to (for Absolute Keying Sets only)
-KeyingSetPath.id_type -> id_type: enum Type of ID-block that can be used
-KinematicConstraint.axis_reference -> axis_reference: enum Constraint axis Lock options relative to Bone or Target reference
-KinematicConstraint.chain_length -> chain_length: int How many bones are included in the IK effect - 0 uses all bones
-KinematicConstraint.distance -> distance: float Radius of limiting sphere
-KinematicConstraint.ik_type -> ik_type: enum
-KinematicConstraint.iterations -> iterations: int Maximum number of solving iterations
-KinematicConstraint.limit_mode -> limit_mode: enum Distances in relation to sphere of influence to allow
-KinematicConstraint.orient_weight -> orient_weight: float For Tree-IK: Weight of orientation control for this target
-KinematicConstraint.pole_angle -> pole_angle: float Pole rotation offset
-KinematicConstraint.pole_subtarget -> pole_subtarget: string
-KinematicConstraint.pole_target -> pole_target: pointer Object for pole rotation
-KinematicConstraint.subtarget -> subtarget: string
-KinematicConstraint.target -> target: pointer Target Object
-KinematicConstraint.weight -> weight: float For Tree-IK: Weight of position control for this target
-Lamp.active_texture -> active_texture: pointer Active texture slot being displayed
-Lamp.active_texture_index -> active_texture_index: int Index of active texture slot
-Lamp.animation_data -> animation_data: pointer, (read-only) Animation data for this datablock
-Lamp.color -> color: float Light color
-Lamp.distance -> distance: float Falloff distance - the light is at half the original intensity at this point
-Lamp.energy -> energy: float Amount of light that the lamp emits
-Lamp.texture_slots -> texture_slots: collection, (read-only) Texture slots defining the mapping and influence of textures
-Lamp.type -> type: enum Type of Lamp
-LampSkySettings.atmosphere_distance_factor -> atmosphere_distance_factor: float Multiplier to convert blender units to physical distance
-LampSkySettings.atmosphere_extinction -> atmosphere_extinction: float Extinction scattering contribution factor
-LampSkySettings.atmosphere_inscattering -> atmosphere_inscattering: float Scatter contribution factor
-LampSkySettings.atmosphere_turbidity -> atmosphere_turbidity: float Sky turbidity
-LampSkySettings.backscattered_light -> backscattered_light: float Backscattered light
-LampSkySettings.horizon_brightness -> horizon_intensity: float Horizon brightness
-LampSkySettings.sky_blend -> sky_blend: float Blend factor with sky
-LampSkySettings.sky_blend_type -> sky_blend_type: enum Blend mode for combining sun sky with world sky
-LampSkySettings.sky_color_space -> sky_color_space: enum Color space to use for internal XYZ->RGB color conversion
-LampSkySettings.sky_exposure -> sky_exposure: float Strength of sky shading exponential exposure correction
-LampSkySettings.spread -> spread: float Horizon Spread
-LampSkySettings.sun_brightness -> sun_intensity: float Sun brightness
-LampSkySettings.sun_intensity -> sun_intensity: float Sun intensity
-LampSkySettings.sun_size -> sun_size: float Sun size
-LampTextureSlot.color_factor -> color_factor: float Amount texture affects color values
-LampTextureSlot.object -> object: pointer Object to use for mapping with Object texture coordinates
-LampTextureSlot.shadow_factor -> shadow_factor: float Amount texture affects shadow
-LampTextureSlot.texture_coordinates -> texture_coordinates: enum
-Lattice.interpolation_type_u -> interpolation_type_u: enum
-Lattice.interpolation_type_v -> interpolation_type_v: enum
-Lattice.interpolation_type_w -> interpolation_type_w: enum
-Lattice.points -> points: collection, (read-only) Points of the lattice
-Lattice.points_u -> points_u: int Points in U direction
-Lattice.points_v -> points_v: int Points in V direction
-Lattice.points_w -> points_w: int Points in W direction
-Lattice.shape_keys -> shape_keys: pointer, (read-only)
-Lattice.vertex_group -> vertex_group: string Vertex group to apply the influence of the lattice
-LatticeModifier.object -> object: pointer Lattice object to deform with
-LatticeModifier.vertex_group -> vertex_group: string Vertex group name
-LatticePoint.co -> co: float, (read-only)
-LatticePoint.deformed_co -> deformed_co: float
-LatticePoint.groups -> groups: collection, (read-only) Weights for the vertex groups this point is member of
-Library.filepath -> filepath: string Path to the library .blend file
-Library.parent -> parent: pointer, (read-only)
-LimitDistanceConstraint.distance -> distance: float Radius of limiting sphere
-LimitDistanceConstraint.limit_mode -> limit_mode: enum Distances in relation to sphere of influence to allow
-LimitDistanceConstraint.subtarget -> subtarget: string
-LimitDistanceConstraint.target -> target: pointer Target Object
-LimitLocationConstraint.maximum_x -> max_x: float Highest X value to allow
-LimitLocationConstraint.maximum_y -> max_y: float Highest Y value to allow
-LimitLocationConstraint.maximum_z -> max_z: float Highest Z value to allow
-LimitLocationConstraint.minimum_x -> min_x: float Lowest X value to allow
-LimitLocationConstraint.minimum_y -> min_y: float Lowest Y value to allow
-LimitLocationConstraint.minimum_z -> min_z: float Lowest Z value to allow
-LimitRotationConstraint.maximum_x -> max_x: float Highest X value to allow
-LimitRotationConstraint.maximum_y -> max_y: float Highest Y value to allow
-LimitRotationConstraint.maximum_z -> max_z: float Highest Z value to allow
-LimitRotationConstraint.minimum_x -> min_x: float Lowest X value to allow
-LimitRotationConstraint.minimum_y -> min_y: float Lowest Y value to allow
-LimitRotationConstraint.minimum_z -> min_z: float Lowest Z value to allow
-LimitScaleConstraint.maximum_x -> max_x: float Highest X value to allow
-LimitScaleConstraint.maximum_y -> max_y: float Highest Y value to allow
-LimitScaleConstraint.maximum_z -> max_z: float Highest Z value to allow
-LimitScaleConstraint.minimum_x -> min_x: float Lowest X value to allow
-LimitScaleConstraint.minimum_y -> min_y: float Lowest Y value to allow
-LimitScaleConstraint.minimum_z -> min_z: float Lowest Z value to allow
-LockedTrackConstraint.locked -> locked: enum Axis that points upward
-LockedTrackConstraint.subtarget -> subtarget: string
-LockedTrackConstraint.target -> target: pointer Target Object
-LockedTrackConstraint.track -> track: enum Axis that points to the target object
-Macro.bl_description -> bl_description: string
-Macro.bl_idname -> bl_idname: string
-Macro.bl_label -> bl_label: string
-Macro.bl_options -> bl_options: enum Options for this operator type
-Macro.name -> name: string, (read-only)
-Macro.properties -> properties: pointer, (read-only)
-MagicTexture.noise_depth -> noise_depth: int Sets the depth of the cloud calculation
-MagicTexture.turbulence -> turbulence: float Sets the turbulence of the bandnoise and ringnoise types
-Main.actions -> actions: collection, (read-only) Action datablocks.
-Main.armatures -> armatures: collection, (read-only) Armature datablocks.
-Main.brushes -> brushes: collection, (read-only) Brush datablocks.
-Main.cameras -> cameras: collection, (read-only) Camera datablocks.
-Main.curves -> curves: collection, (read-only) Curve datablocks.
-Main.filepath -> filepath: string, (read-only) Path to the .blend file
-Main.fonts -> fonts: collection, (read-only) Vector font datablocks.
-Main.gpencil -> gpencil: collection, (read-only) Grease Pencil datablocks.
-Main.groups -> groups: collection, (read-only) Group datablocks.
-Main.images -> images: collection, (read-only) Image datablocks.
-Main.lamps -> lamps: collection, (read-only) Lamp datablocks.
-Main.lattices -> lattices: collection, (read-only) Lattice datablocks.
-Main.libraries -> libraries: collection, (read-only) Library datablocks.
-Main.materials -> materials: collection, (read-only) Material datablocks.
-Main.meshes -> meshes: collection, (read-only) Mesh datablocks.
-Main.metaballs -> metaballs: collection, (read-only) Metaball datablocks.
-Main.node_groups -> node_groups: collection, (read-only) Node group datablocks.
-Main.objects -> objects: collection, (read-only) Object datablocks.
-Main.particles -> particles: collection, (read-only) Particle datablocks.
-Main.scenes -> scenes: collection, (read-only) Scene datablocks.
-Main.screens -> screens: collection, (read-only) Screen datablocks.
-Main.scripts -> scripts: collection, (read-only) Script datablocks (DEPRECATED).
-Main.sounds -> sounds: collection, (read-only) Sound datablocks.
-Main.texts -> texts: collection, (read-only) Text datablocks.
-Main.textures -> textures: collection, (read-only) Texture datablocks.
-Main.window_managers -> window_managers: collection, (read-only) Window manager datablocks.
-Main.worlds -> worlds: collection, (read-only) World datablocks.
-MaintainVolumeConstraint.axis -> axis: enum The free scaling axis of the object
-MaintainVolumeConstraint.volume -> volume: float Volume of the bone at rest
-MarbleTexture.nabla -> nabla: float Size of derivative offset used for calculating normal
-MarbleTexture.noise_basis -> noise_basis: enum Sets the noise basis used for turbulence
-MarbleTexture.noise_depth -> noise_depth: int Sets the depth of the cloud calculation
-MarbleTexture.noise_size -> noise_size: float Sets scaling for noise input
-MarbleTexture.noise_type -> noise_type: enum
-MarbleTexture.noisebasis2 -> noisebasis2: enum
-MarbleTexture.stype -> stype: enum
-MarbleTexture.turbulence -> turbulence: float Sets the turbulence of the bandnoise and ringnoise types
-MaskModifier.armature -> armature: pointer Armature to use as source of bones to mask
-MaskModifier.mode -> mode: enum
-MaskModifier.vertex_group -> vertex_group: string Vertex group name
-Material.active_node_material -> active_node_material: pointer Active node material
-Material.active_texture -> active_texture: pointer Active texture slot being displayed
-Material.active_texture_index -> active_texture_index: int Index of active texture slot
-Material.alpha -> alpha: float Alpha transparency of the material
-Material.ambient -> ambient: float Amount of global ambient color the material receives
-Material.animation_data -> animation_data: pointer, (read-only) Animation data for this datablock
-Material.darkness -> darkness: float Minnaert darkness
-Material.diffuse_color -> diffuse_color: float
-Material.diffuse_fresnel -> diffuse_fresnel: float Power of Fresnel
-Material.diffuse_fresnel_factor -> diffuse_fresnel_factor: float Blending factor of Fresnel
-Material.diffuse_intensity -> diffuse_intensity: float Amount of diffuse reflection
-Material.diffuse_ramp -> diffuse_ramp: pointer, (read-only) Color ramp used to affect diffuse shading
-Material.diffuse_ramp_blend -> diffuse_ramp_blend: enum
-Material.diffuse_ramp_factor -> diffuse_ramp_factor: float Blending factor (also uses alpha in Colorband)
-Material.diffuse_ramp_input -> diffuse_ramp_input: enum
-Material.diffuse_shader -> diffuse_shader: enum
-Material.diffuse_toon_size -> diffuse_toon_size: float Size of diffuse toon area
-Material.diffuse_toon_smooth -> diffuse_toon_smooth: float Smoothness of diffuse toon area
-Material.emit -> emit: float Amount of light to emit
-Material.halo -> halo: pointer, (read-only) Halo settings for the material
-Material.light_group -> light_group: pointer Limit lighting to lamps in this Group
-Material.mirror_color -> mirror_color: float Mirror color of the material
-Material.node_tree -> node_tree: pointer, (read-only) Node tree for node based materials
-Material.physics -> physics: pointer, (read-only) Game physics settings
-Material.preview_render_type -> preview_render_type: enum Type of preview render
-Material.raytrace_mirror -> raytrace_mirror: pointer, (read-only) Raytraced reflection settings for the material
-Material.raytrace_transparency -> raytrace_transparency: pointer, (read-only) Raytraced transparency settings for the material
-Material.roughness -> rough: float Oren-Nayar Roughness
-Material.shadow_buffer_bias -> shadow_buffer_bias: float Factor to multiply shadow buffer bias with (0 is ignore.)
-Material.shadow_casting_alpha -> shadow_cast_alpha: float Shadow casting alpha, in use for Irregular and Deep shadow buffer
-Material.shadow_ray_bias -> shadow_ray_bias: float Shadow raytracing bias to prevent terminator problems on shadow boundary
-Material.specular_alpha -> specular_alpha: float Alpha transparency for specular areas
-Material.specular_color -> specular_color: float Specular color of the material
-Material.specular_hardness -> specular_hard: int
-Material.specular_intensity -> specular_intensity: float
-Material.specular_ior -> specular_ior: float
-Material.specular_ramp -> specular_ramp: pointer, (read-only) Color ramp used to affect specular shading
-Material.specular_ramp_blend -> specular_ramp_blend: enum
-Material.specular_ramp_factor -> specular_ramp_factor: float Blending factor (also uses alpha in Colorband)
-Material.specular_ramp_input -> specular_ramp_input: enum
-Material.specular_shader -> specular_shader: enum
-Material.specular_slope -> specular_slope: float The standard deviation of surface slope
-Material.specular_toon_size -> specular_toon_size: float Size of specular toon area
-Material.specular_toon_smooth -> specular_toon_smooth: float Smoothness of specular toon area
-Material.strand -> strand: pointer, (read-only) Strand settings for the material
-Material.subsurface_scattering -> subsurface_scattering: pointer, (read-only) Subsurface scattering settings for the material
-Material.texture_slots -> texture_slots: collection, (read-only) Texture slots defining the mapping and influence of textures
-Material.translucency -> translucency: float Amount of diffuse shading on the back side
-Material.transparency_method -> transparency_method: enum Method to use for rendering transparency
-Material.type -> type: enum Material type defining how the object is rendered
-Material.volume -> volume: pointer, (read-only) Volume settings for the material
-Material.z_offset -> z_offset: float Gives faces an artificial offset in the Z buffer for Z transparency
-MaterialHalo.add -> add: float Sets the strength of the add effect
-MaterialHalo.flare_boost -> flare_boost: float Gives the flare extra strength
-MaterialHalo.flare_seed -> flare_seed: int Specifies an offset in the flare seed table
-MaterialHalo.flare_size -> flare_size: float Sets the factor by which the flare is larger than the halo
-MaterialHalo.flare_subsize -> flare_subsize: float Sets the dimension of the subflares, dots and circles
-MaterialHalo.flares_sub -> flares_sub: int Sets the number of subflares
-MaterialHalo.hardness -> hard: int Sets the hardness of the halo
-MaterialHalo.line_number -> line_number: int Sets the number of star shaped lines rendered over the halo
-MaterialHalo.rings -> rings: int Sets the number of rings rendered over the halo
-MaterialHalo.seed -> seed: int Randomizes ring dimension and line location
-MaterialHalo.size -> size: float Sets the dimension of the halo
-MaterialHalo.star_tips -> star_tips: int Sets the number of points on the star shaped halo
-MaterialPhysics.damp -> damp: float Damping of the spring force, when inside the physics distance area
-MaterialPhysics.distance -> distance: float Distance of the physics area
-MaterialPhysics.elasticity -> elasticity: float Elasticity of collisions
-MaterialPhysics.force -> force: float Upward spring force, when inside the physics distance area
-MaterialPhysics.friction -> friction: float Coulomb friction coefficient, when inside the physics distance area
-MaterialRaytraceMirror.depth -> depth: int Maximum allowed number of light inter-reflections
-MaterialRaytraceMirror.distance -> distance: float Maximum distance of reflected rays. Reflections further than this range fade to sky color or material color
-MaterialRaytraceMirror.fade_to -> fade_to: enum The color that rays with no intersection within the Max Distance take. Material color can be best for indoor scenes, sky color for outdoor
-MaterialRaytraceMirror.fresnel -> fresnel: float Power of Fresnel for mirror reflection
-MaterialRaytraceMirror.fresnel_factor -> fresnel_factor: float Blending factor for Fresnel
-MaterialRaytraceMirror.gloss_anisotropic -> gloss_anisotropic: float The shape of the reflection, from 0.0 (circular) to 1.0 (fully stretched along the tangent
-MaterialRaytraceMirror.gloss_factor -> gloss_factor: float The shininess of the reflection. Values < 1.0 give diffuse, blurry reflections
-MaterialRaytraceMirror.gloss_samples -> gloss_samples: int Number of cone samples averaged for blurry reflections
-MaterialRaytraceMirror.gloss_threshold -> gloss_threshold: float Threshold for adaptive sampling. If a sample contributes less than this amount (as a percentage), sampling is stopped
-MaterialRaytraceMirror.reflect_factor -> reflect_factor: float Sets the amount mirror reflection for raytrace
-MaterialRaytraceTransparency.depth -> depth: int Maximum allowed number of light inter-refractions
-MaterialRaytraceTransparency.falloff -> falloff: float Falloff power for transmissivity filter effect (1.0 is linear)
-MaterialRaytraceTransparency.filter -> filter: float Amount to blend in the material's diffuse color in raytraced transparency (simulating absorption)
-MaterialRaytraceTransparency.fresnel -> fresnel: float Power of Fresnel for transparency (Ray or ZTransp)
-MaterialRaytraceTransparency.fresnel_factor -> fresnel_factor: float Blending factor for Fresnel
-MaterialRaytraceTransparency.gloss_factor -> gloss_factor: float The clarity of the refraction. Values < 1.0 give diffuse, blurry refractions
-MaterialRaytraceTransparency.gloss_samples -> gloss_samples: int Number of cone samples averaged for blurry refractions
-MaterialRaytraceTransparency.gloss_threshold -> gloss_threshold: float Threshold for adaptive sampling. If a sample contributes less than this amount (as a percentage), sampling is stopped
-MaterialRaytraceTransparency.ior -> ior: float Sets angular index of refraction for raytraced refraction
-MaterialRaytraceTransparency.limit -> limit: float Maximum depth for light to travel through the transparent material before becoming fully filtered (0.0 is disabled)
-MaterialSlot.link -> link: enum Link material to object or the object's data
-MaterialSlot.material -> material: pointer Material datablock used by this material slot
-MaterialSlot.name -> name: string, (read-only) Material slot name
-MaterialStrand.blend_distance -> blend_distance: float Worldspace distance over which to blend in the surface normal
-MaterialStrand.min_size -> size_min: float Minimum size of strands in pixels
-MaterialStrand.root_size -> root_size: float Start size of strands in pixels or Blender units
-MaterialStrand.shape -> shape: float Positive values make strands rounder, negative makes strands spiky
-MaterialStrand.tip_size -> tip_size: float End size of strands in pixels or Blender units
-MaterialStrand.uv_layer -> uv_layer: string Name of UV layer to override
-MaterialStrand.width_fade -> width_fade: float Transparency along the width of the strand
-MaterialSubsurfaceScattering.back -> back: float Back scattering weight
-MaterialSubsurfaceScattering.color -> color: float Scattering color
-MaterialSubsurfaceScattering.color_factor -> color_factor: float Blend factor for SSS colors
-MaterialSubsurfaceScattering.error_tolerance -> error_tolerance: float Error tolerance (low values are slower and higher quality)
-MaterialSubsurfaceScattering.front -> front: float Front scattering weight
-MaterialSubsurfaceScattering.ior -> ior: float Index of refraction (higher values are denser)
-MaterialSubsurfaceScattering.radius -> radius: float Mean red/green/blue scattering path length
-MaterialSubsurfaceScattering.scale -> scale: float Object scale factor
-MaterialSubsurfaceScattering.texture_factor -> texture_factor: float Texture scatting blend factor
-MaterialTextureSlot.alpha_factor -> alpha_factor: float Amount texture affects alpha
-MaterialTextureSlot.ambient_factor -> ambient_factor: float Amount texture affects ambient
-MaterialTextureSlot.colordiff_factor -> colordiff_factor: float Amount texture affects diffuse color
-MaterialTextureSlot.coloremission_factor -> coloremission_factor: float Amount texture affects emission color
-MaterialTextureSlot.colorreflection_factor -> colorreflection_factor: float Amount texture affects color of out-scattered light
-MaterialTextureSlot.colorspec_factor -> colorspec_factor: float Amount texture affects specular color
-MaterialTextureSlot.colortransmission_factor -> colortransmission_factor: float Amount texture affects result color after light has been scattered/absorbed
-MaterialTextureSlot.density_factor -> density_factor: float Amount texture affects density
-MaterialTextureSlot.diffuse_factor -> diffuse_factor: float Amount texture affects diffuse reflectivity
-MaterialTextureSlot.displacement_factor -> displacement_factor: float Amount texture displaces the surface
-MaterialTextureSlot.emission_factor -> emission_factor: float Amount texture affects emission
-MaterialTextureSlot.emit_factor -> emit_factor: float Amount texture affects emission
-MaterialTextureSlot.hardness_factor -> hard_factor: float Amount texture affects hardness
-MaterialTextureSlot.mapping -> mapping: enum
-MaterialTextureSlot.mirror_factor -> mirror_factor: float Amount texture affects mirror color
-MaterialTextureSlot.normal_factor -> normal_factor: float Amount texture affects normal values
-MaterialTextureSlot.normal_map_space -> normal_map_space: enum
-MaterialTextureSlot.object -> object: pointer Object to use for mapping with Object texture coordinates
-MaterialTextureSlot.raymir_factor -> raymir_factor: float Amount texture affects ray mirror
-MaterialTextureSlot.reflection_factor -> reflection_factor: float Amount texture affects brightness of out-scattered light
-MaterialTextureSlot.scattering_factor -> scattering_factor: float Amount texture affects scattering
-MaterialTextureSlot.specular_factor -> specular_factor: float Amount texture affects specular reflectivity
-MaterialTextureSlot.texture_coordinates -> texture_coordinates: enum
-MaterialTextureSlot.translucency_factor -> translucency_factor: float Amount texture affects translucency
-MaterialTextureSlot.uv_layer -> uv_layer: string UV layer to use for mapping with UV texture coordinates
-MaterialTextureSlot.warp_factor -> warp_factor: float Amount texture affects texture coordinates of next channels
-MaterialTextureSlot.x_mapping -> x_mapping: enum
-MaterialTextureSlot.y_mapping -> y_mapping: enum
-MaterialTextureSlot.z_mapping -> z_mapping: enum
-MaterialVolume.asymmetry -> asymmetry: float Back scattering (-1.0) to Forward scattering (1.0) and the range in between
-MaterialVolume.cache_resolution -> cache_resolution: int Resolution of the voxel grid, low resolutions are faster, high resolutions use more memory
-MaterialVolume.density -> density: float The base density of the volume
-MaterialVolume.density_scale -> density_scale: float Multiplier for the material's density
-MaterialVolume.depth_cutoff -> depth_cutoff: float Stop ray marching early if transmission drops below this luminance - higher values give speedups in dense volumes at the expense of accuracy
-MaterialVolume.emission -> emission: float Amount of light that gets emitted by the volume
-MaterialVolume.emission_color -> emission_color: float
-MaterialVolume.lighting_mode -> light_mode: enum Method of shading, attenuating, and scattering light through the volume
-MaterialVolume.ms_diffusion -> ms_diffusion: float Diffusion factor, the strength of the blurring effect
-MaterialVolume.ms_intensity -> ms_intensity: float Multiplier for multiple scattered light energy
-MaterialVolume.ms_spread -> ms_spread: float Proportional distance over which the light is diffused
-MaterialVolume.reflection -> reflection: float Multiplier to make out-scattered light brighter or darker (non-physically correct)
-MaterialVolume.reflection_color -> reflection_color: float Colour of light scattered out of the volume (does not affect transmission)
-MaterialVolume.scattering -> scattering: float Amount of light that gets scattered out by the volume - the more out-scattering, the shallower the light will penetrate
-MaterialVolume.step_calculation -> step_calculation: enum Method of calculating the steps through the volume
-MaterialVolume.step_size -> step_size: float Distance between subsequent volume depth samples
-MaterialVolume.transmission_color -> transmission_color: float Result color of the volume, after other light has been scattered/absorbed
-Menu.bl_idname -> bl_idname: string
-Menu.bl_label -> bl_label: string
-Menu.layout -> layout: pointer, (read-only)
-Mesh.active_uv_texture -> active_uv_texture: pointer Active UV texture
-Mesh.active_uv_texture_index -> active_uv_texture_index: int Active UV texture index
-Mesh.active_vertex_color -> active_vertex_color: pointer Active vertex color layer
-Mesh.active_vertex_color_index -> active_vertex_color_index: int Active vertex color index
-Mesh.animation_data -> animation_data: pointer, (read-only) Animation data for this datablock
-Mesh.autosmooth_angle -> autosmooth_angle: int Defines maximum angle between face normals that 'Auto Smooth' will operate on
-Mesh.edges -> edges: collection, (read-only) Edges of the mesh
-Mesh.faces -> faces: collection, (read-only) Faces of the mesh
-Mesh.float_layers -> float_layers: collection, (read-only)
-Mesh.int_layers -> int_layers: collection, (read-only)
-Mesh.materials -> materials: collection, (read-only)
-Mesh.shape_keys -> shape_keys: pointer, (read-only)
-Mesh.sticky -> sticky: collection, (read-only) Sticky texture coordinates
-Mesh.string_layers -> string_layers: collection, (read-only)
-Mesh.texco_mesh -> texco_mesh: pointer Derive texture coordinates from another mesh
-Mesh.texspace_loc -> texspace_loc: float Texture space location
-Mesh.texspace_size -> texspace_size: float Texture space size
-Mesh.texture_mesh -> texture_mesh: pointer Use another mesh for texture indices (vertex indices must be aligned)
-Mesh.total_edge_sel -> total_edge_sel: int, (read-only) Selected edge count in editmode
-Mesh.total_face_sel -> total_face_sel: int, (read-only) Selected face count in editmode
-Mesh.total_vert_sel -> total_vert_sel: int, (read-only) Selected vertex count in editmode
-Mesh.uv_texture_clone -> uv_texture_clone: pointer UV texture to be used as cloning source
-Mesh.uv_texture_clone_index -> uv_texture_clone_index: int Clone UV texture index
-Mesh.uv_texture_stencil -> uv_texture_stencil: pointer UV texture to mask the painted area
-Mesh.uv_texture_stencil_index -> uv_texture_stencil_index: int Mask UV texture index
-Mesh.uv_textures -> uv_textures: collection, (read-only)
-Mesh.vertex_colors -> vertex_colors: collection, (read-only)
-Mesh.verts -> verts: collection, (read-only) Vertices of the mesh
-MeshColor.color1 -> color1: float
-MeshColor.color2 -> color2: float
-MeshColor.color3 -> color3: float
-MeshColor.color4 -> color4: float
-MeshColorLayer.data -> data: collection, (read-only)
-MeshColorLayer.name -> name: string
-MeshDeformModifier.object -> object: pointer Mesh object to deform with
-MeshDeformModifier.precision -> precision: int The grid size for binding
-MeshDeformModifier.vertex_group -> vertex_group: string Vertex group name
-MeshEdge.bevel_weight -> bevel_weight: float Weight used by the Bevel modifier
-MeshEdge.crease -> crease: float Weight used by the Subsurf modifier for creasing
-MeshEdge.index -> index: int, (read-only) Index number of the vertex
-MeshEdge.verts -> verts: int Vertex indices
-MeshFace.area -> area: float, (read-only) read only area of the face
-MeshFace.index -> index: int, (read-only) Index number of the vertex
-MeshFace.material_index -> material_index: int
-MeshFace.normal -> normal: float, (read-only) local space unit length normal vector for this face
-MeshFace.verts -> verts: int Vertex indices
-MeshFace.verts_raw -> verts_raw: int Fixed size vertex indices array
-MeshFaces.active -> active: int The active face for this mesh
-MeshFaces.active_tface -> active_tface: pointer, (read-only) Active Texture Face
-MeshFloatProperty.value -> value: float
-MeshFloatPropertyLayer.data -> data: collection, (read-only)
-MeshFloatPropertyLayer.name -> name: string
-MeshIntProperty.value -> value: int
-MeshIntPropertyLayer.data -> data: collection, (read-only)
-MeshIntPropertyLayer.name -> name: string
-MeshSticky.co -> co: float Sticky texture coordinate location
-MeshStringProperty.value -> value: string
-MeshStringPropertyLayer.data -> data: collection, (read-only)
-MeshStringPropertyLayer.name -> name: string
-MeshTextureFace.image -> image: pointer
-MeshTextureFace.transp -> transp: enum Transparency blending mode
-MeshTextureFace.uv -> uv: float
-MeshTextureFace.uv1 -> uv1: float
-MeshTextureFace.uv2 -> uv2: float
-MeshTextureFace.uv3 -> uv3: float
-MeshTextureFace.uv4 -> uv4: float
-MeshTextureFace.uv_raw -> uv_raw: float Fixed size UV coordinates array
-MeshTextureFaceLayer.data -> data: collection, (read-only)
-MeshTextureFaceLayer.name -> name: string
-MeshVertex.bevel_weight -> bevel_weight: float Weight used by the Bevel modifier 'Only Vertices' option
-MeshVertex.co -> co: float
-MeshVertex.groups -> groups: collection, (read-only) Weights for the vertex groups this vertex is member of
-MeshVertex.index -> index: int, (read-only) Index number of the vertex
-MeshVertex.normal -> normal: float Vertex Normal
-MessageActuator.body_message -> body_message: string Optional message body Text
-MessageActuator.body_property -> body_property: string The message body will be set by the Property Value
-MessageActuator.body_type -> body_type: enum Toggle message type: either Text or a PropertyName
-MessageActuator.subject -> subject: string Optional message subject. This is what can be filtered on
-MessageActuator.to_property -> to_property: string Optional send message to objects with this name only, or empty to broadcast
-MessageSensor.subject -> subject: string Optional subject filter: only accept messages with this subject, or empty for all
-MetaBall.active_element -> active_element: pointer, (read-only) Last selected element
-MetaBall.animation_data -> animation_data: pointer, (read-only) Animation data for this datablock
-MetaBall.elements -> elements: collection, (read-only) Meta elements
-MetaBall.flag -> flag: enum Metaball edit update behavior
-MetaBall.materials -> materials: collection, (read-only)
-MetaBall.render_size -> render_size: float Polygonization resolution in rendering
-MetaBall.texspace_loc -> texspace_loc: float Texture space location
-MetaBall.texspace_size -> texspace_size: float Texture space size
-MetaBall.threshold -> threshold: float Influence of meta elements
-MetaBall.wire_size -> wire_size: float Polygonization resolution in the 3D viewport
-MetaElement.location -> location: float
-MetaElement.radius -> radius: float
-MetaElement.rotation -> rotation: float
-MetaElement.size_x -> size_x: float Size of element, use of components depends on element type
-MetaElement.size_y -> size_y: float Size of element, use of components depends on element type
-MetaElement.size_z -> size_z: float Size of element, use of components depends on element type
-MetaElement.stiffness -> stiffness: float Stiffness defines how much of the element to fill
-MetaElement.type -> type: enum Metaball types
-MetaSequence.animation_end_offset -> animation_end_offset: int Animation end offset (trim end)
-MetaSequence.animation_start_offset -> animation_start_offset: int Animation start offset (trim start)
-MetaSequence.color_balance -> color_balance: pointer, (read-only)
-MetaSequence.crop -> crop: pointer, (read-only)
-MetaSequence.multiply_colors -> multiply_colors: float
-MetaSequence.proxy -> proxy: pointer, (read-only)
-MetaSequence.sequences -> sequences: collection, (read-only)
-MetaSequence.strobe -> strobe: float Only display every nth frame
-MetaSequence.transform -> transform: pointer, (read-only)
-MirrorModifier.merge_limit -> merge_limit: float Distance from axis within which mirrored vertices are merged
-MirrorModifier.mirror_object -> mirror_object: pointer Object to use as mirror
-Modifier.name -> name: string Modifier name
-Modifier.type -> type: enum, (read-only)
-MotionPath.frame_end -> frame_end: int, (read-only) End frame of the stored range
-MotionPath.frame_start -> frame_start: int, (read-only) Starting frame of the stored range
-MotionPath.length -> length: int, (read-only) Number of frames cached
-MotionPath.points -> points: collection, (read-only) Cached positions per frame
-MotionPathVert.co -> co: float
-MouseSensor.mouse_event -> mouse_event: enum Specify the type of event this mouse sensor should trigger on
-MovieSequence.animation_end_offset -> animation_end_offset: int Animation end offset (trim end)
-MovieSequence.animation_start_offset -> animation_start_offset: int Animation start offset (trim start)
-MovieSequence.color_balance -> color_balance: pointer, (read-only)
-MovieSequence.crop -> crop: pointer, (read-only)
-MovieSequence.filepath -> filepath: string
-MovieSequence.mpeg_preseek -> mpeg_preseek: int For MPEG movies, preseek this many frames
-MovieSequence.multiply_colors -> multiply_colors: float
-MovieSequence.proxy -> proxy: pointer, (read-only)
-MovieSequence.strobe -> strobe: float Only display every nth frame
-MovieSequence.transform -> transform: pointer, (read-only)
-MulticamSequence.animation_end_offset -> animation_end_offset: int Animation end offset (trim end)
-MulticamSequence.animation_start_offset -> animation_start_offset: int Animation start offset (trim start)
-MulticamSequence.color_balance -> color_balance: pointer, (read-only)
-MulticamSequence.crop -> crop: pointer, (read-only)
-MulticamSequence.multicam_source -> multicam_source: int
-MulticamSequence.multiply_colors -> multiply_colors: float
-MulticamSequence.proxy -> proxy: pointer, (read-only)
-MulticamSequence.strobe -> strobe: float Only display every nth frame
-MulticamSequence.transform -> transform: pointer, (read-only)
-MultiresModifier.filepath -> filepath: string Path to external displacements file
-MultiresModifier.levels -> levels: int Number of subdivisions to use in the viewport
-MultiresModifier.render_levels -> render_levels: int
-MultiresModifier.sculpt_levels -> sculpt_levels: int Number of subdivisions to use in sculpt mode
-MultiresModifier.subdivision_type -> subdivision_type: enum Selects type of subdivision algorithm
-MultiresModifier.total_levels -> total_levels: int, (read-only) Number of subdivisions for which displacements are stored
-MusgraveTexture.gain -> gain: float The gain multiplier
-MusgraveTexture.highest_dimension -> highest_dimension: float Highest fractal dimension
-MusgraveTexture.lacunarity -> lacunarity: float Gap between successive frequencies
-MusgraveTexture.musgrave_type -> musgrave_type: enum
-MusgraveTexture.nabla -> nabla: float Size of derivative offset used for calculating normal
-MusgraveTexture.noise_basis -> noise_basis: enum Sets the noise basis used for turbulence
-MusgraveTexture.noise_intensity -> noise_intensity: float
-MusgraveTexture.noise_size -> noise_size: float Sets scaling for noise input
-MusgraveTexture.octaves -> octaves: float Number of frequencies used
-MusgraveTexture.offset -> offset: float The fractal offset
-NearSensor.distance -> distance: float Trigger distance
-NearSensor.property -> property: string Only look for objects with this property
-NearSensor.reset_distance -> reset_distance: float
-NetRenderJob.name -> name: string
-NetRenderSettings.active_blacklisted_slave_index -> active_blacklisted_slave_index: int
-NetRenderSettings.active_job_index -> active_job_index: int
-NetRenderSettings.active_slave_index -> active_slave_index: int
-NetRenderSettings.chunks -> chunks: int Number of frame to dispatch to each slave in one chunk
-NetRenderSettings.job_category -> job_category: string Category of the job
-NetRenderSettings.job_id -> job_id: string id of the last sent render job
-NetRenderSettings.job_name -> job_name: string Name of the job
-NetRenderSettings.jobs -> jobs: collection, (read-only)
-NetRenderSettings.mode -> mode: enum Mode of operation of this instance
-NetRenderSettings.path -> path: string Path for temporary files
-NetRenderSettings.priority -> priority: int Priority of the job
-NetRenderSettings.server_address -> server_address: string IP or name of the master render server
-NetRenderSettings.server_port -> server_port: int port of the master render server
-NetRenderSettings.slaves -> slaves: collection, (read-only)
-NetRenderSettings.slaves_blacklist -> slaves_blacklist: collection, (read-only)
-NetRenderSlave.name -> name: string
-NlaStrip.action -> action: pointer Action referenced by this strip
-NlaStrip.action_frame_end -> action_frame_end: float
-NlaStrip.action_frame_start -> action_frame_start: float
-NlaStrip.blend_in -> blend_in: float Number of frames at start of strip to fade in influence
-NlaStrip.blend_out -> blend_out: float
-NlaStrip.blending -> blend_type: enum Method used for combining strip's result with accumulated result
-NlaStrip.extrapolation -> extrapolation: enum Action to take for gaps past the strip extents
-NlaStrip.fcurves -> fcurves: collection, (read-only) F-Curves for controlling the strip's influence and timing
-NlaStrip.frame_end -> frame_end: float
-NlaStrip.frame_start -> frame_start: float
-NlaStrip.influence -> influence: float Amount the strip contributes to the current result
-NlaStrip.modifiers -> modifiers: collection, (read-only) Modifiers affecting all the F-Curves in the referenced Action
-NlaStrip.name -> name: string
-NlaStrip.repeat -> repeat: float Number of times to repeat the action range
-NlaStrip.scale -> scale: float Scaling factor for action
-NlaStrip.strip_time -> strip_time: float Frame of referenced Action to evaluate
-NlaStrip.strips -> strips: collection, (read-only) NLA Strips that this strip acts as a container for (if it is of type Meta)
-NlaStrip.type -> type: enum, (read-only) Type of NLA Strip
-NlaTrack.name -> name: string
-NlaTrack.strips -> strips: collection, (read-only) NLA Strips on this NLA-track
-Node.inputs -> inputs: collection, (read-only)
-Node.location -> location: float
-Node.name -> name: string Node name
-Node.outputs -> outputs: collection, (read-only)
-NodeGroup.nodetree -> nodetree: pointer
-NodeTree.animation_data -> animation_data: pointer, (read-only) Animation data for this datablock
-NodeTree.grease_pencil -> grease_pencil: pointer Grease Pencil datablock
-NodeTree.nodes -> nodes: collection, (read-only)
-Object.active_material -> active_material: pointer Active material being displayed
-Object.active_material_index -> active_material_index: int Index of active material slot
-Object.active_particle_system -> active_particle_system: pointer, (read-only) Active particle system being displayed
-Object.active_particle_system_index -> active_particle_system_index: int Index of active particle system slot
-Object.active_shape_key -> active_shape_key: pointer, (read-only) Current shape key
-Object.active_shape_key_index -> active_shape_key_index: int Current shape key index
-Object.active_vertex_group -> active_vertex_group: pointer, (read-only) Vertex groups of the object
-Object.active_vertex_group_index -> active_vertex_group_index: int Active index in vertex group array
-Object.animation_data -> animation_data: pointer, (read-only) Animation data for this datablock
-Object.animation_visualisation -> animation_visualisation: pointer, (read-only) Animation data for this datablock
-Object.bound_box -> bound_box: float, (read-only) Objects bound box in object-space coordinates
-Object.collision -> collision: pointer, (read-only) Settings for using the objects as a collider in physics simulation
-Object.color -> color: float Object color and alpha, used when faces have the ObColor mode enabled
-Object.constraints -> constraints: collection, (read-only) Constraints affecting the transformation of the object
-Object.data -> data: pointer Object data
-Object.delta_location -> delta_location: float Extra translation added to the location of the object
-Object.delta_rotation_euler -> delta_rotation_euler: float Extra rotation added to the rotation of the object (when using Euler rotations)
-Object.delta_rotation_quaternion -> delta_rotation_quaternion: float Extra rotation added to the rotation of the object (when using Quaternion rotations)
-Object.delta_scale -> delta_scale: float Extra scaling added to the scale of the object
-Object.dimensions -> dimensions: float Absolute bounding box dimensions of the object
-Object.draw_bounds_type -> draw_bounds_type: enum Object boundary display type
-Object.dupli_faces_scale -> dupli_faces_scale: float Scale the DupliFace objects
-Object.dupli_frames_end -> dupli_frames_end: int End frame for DupliFrames
-Object.dupli_frames_off -> dupli_frames_off: int Recurring frames to exclude from the Dupliframes
-Object.dupli_frames_on -> dupli_frames_on: int Number of frames to use between DupOff frames
-Object.dupli_frames_start -> dupli_frames_start: int Start frame for DupliFrames
-Object.dupli_group -> dupli_group: pointer Instance an existing group
-Object.dupli_list -> dupli_list: collection, (read-only) Object duplis
-Object.dupli_type -> dupli_type: enum If not None, object duplication method to use
-Object.empty_draw_size -> empty_draw_size: float Size of display for empties in the viewport
-Object.empty_draw_type -> empty_draw_type: enum Viewport display style for empties
-Object.field -> field: pointer, (read-only) Settings for using the objects as a field in physics simulation
-Object.game -> game: pointer, (read-only) Game engine related settings for the object
-Object.grease_pencil -> grease_pencil: pointer Grease Pencil datablock
-Object.location -> location: float Location of the object
-Object.material_slots -> material_slots: collection, (read-only) Material slots in the object
-Object.matrix_local -> matrix_local: float Parent relative transformation matrix
-Object.matrix_world -> matrix_world: float Worldspace transformation matrix
-Object.max_draw_type -> draw_type: enum Maximum draw type to display object with in viewport
-Object.mode -> mode: enum, (read-only) Object interaction mode
-Object.modifiers -> modifiers: collection, (read-only) Modifiers affecting the geometric data of the object
-Object.motion_path -> motion_path: pointer, (read-only) Motion Path for this element
-Object.parent -> parent: pointer Parent Object
-Object.parent_bone -> parent_bone: string Name of parent bone in case of a bone parenting relation
-Object.parent_type -> parent_type: enum Type of parent relation
-Object.parent_vertices -> parent_vertices: int, (read-only) Indices of vertices in cases of a vertex parenting relation
-Object.particle_systems -> particle_systems: collection, (read-only) Particle systems emitted from the object
-Object.pass_index -> pass_index: int Index # for the IndexOB render pass
-Object.pose -> pose: pointer, (read-only) Current pose for armatures
-Object.pose_library -> pose_library: pointer, (read-only) Action used as a pose library for armatures
-Object.proxy -> proxy: pointer, (read-only) Library object this proxy object controls
-Object.proxy_group -> proxy_group: pointer, (read-only) Library group duplicator object this proxy object controls
-Object.rotation_axis_angle -> rotation_axis_angle: float Angle of Rotation for Axis-Angle rotation representation
-Object.rotation_euler -> rotation_euler: float Rotation in Eulers
-Object.rotation_mode -> rotation_mode: enum
-Object.rotation_quaternion -> rotation_quaternion: float Rotation in Quaternions
-Object.scale -> scale: float Scaling of the object
-Object.soft_body -> soft_body: pointer, (read-only) Settings for soft body simulation
-Object.time_offset -> time_offset: float Animation offset in frames for F-Curve and dupligroup instances
-Object.track_axis -> track_axis: enum Axis that points in 'forward' direction
-Object.type -> type: enum, (read-only) Type of Object
-Object.up_axis -> up_axis: enum Axis that points in the upward direction
-Object.vertex_groups -> vertex_groups: collection, (read-only) Vertex groups of the object
-ObjectActuator.angular_velocity -> angular_velocity: float Sets the angular velocity
-ObjectActuator.damping -> damping: int Number of frames to reach the target velocity
-ObjectActuator.derivate_coefficient -> derivate_coefficient: float Not required, high values can cause instability
-ObjectActuator.force -> force: float Sets the force
-ObjectActuator.force_max_x -> force_max_x: float Set the upper limit for force
-ObjectActuator.force_max_y -> force_max_y: float Set the upper limit for force
-ObjectActuator.force_max_z -> force_max_z: float Set the upper limit for force
-ObjectActuator.force_min_x -> force_min_x: float Set the lower limit for force
-ObjectActuator.force_min_y -> force_min_y: float Set the lower limit for force
-ObjectActuator.force_min_z -> force_min_z: float Set the lower limit for force
-ObjectActuator.integral_coefficient -> integral_coefficient: float Low value (0.01) for slow response, high value (0.5) for fast response
-ObjectActuator.linear_velocity -> linear_velocity: float Sets the linear velocity (in Servo mode it sets the target relative linear velocity, it will be achieved by automatic application of force. Null velocity is a valid target)
-ObjectActuator.loc -> loc: float Sets the location
-ObjectActuator.mode -> mode: enum Specify the motion system
-ObjectActuator.proportional_coefficient -> proportional_coefficient: float Typical value is 60x integral coefficient
-ObjectActuator.reference_object -> reference_object: pointer Reference object for velocity calculation, leave empty for world reference
-ObjectActuator.rot -> rot: float Sets the rotation
-ObjectActuator.torque -> torque: float Sets the torque
-ObjectBase.object -> object: pointer, (read-only) Object this base links to
-ObjectConstraints.active -> active: pointer Active Object constraint
-ObstacleFluidSettings.impact_factor -> impact_factor: float This is an unphysical value for moving objects - it controls the impact an obstacle has on the fluid, =0 behaves a bit like outflow (deleting fluid), =1 is default, while >1 results in high forces. Can be used to tweak total mass
-ObstacleFluidSettings.partial_slip_factor -> partial_slip_factor: float Amount of mixing between no- and free-slip, 0 is no slip and 1 is free slip
-ObstacleFluidSettings.slip_type -> slip_type: enum
-ObstacleFluidSettings.volume_initialization -> volume_initialization: enum Volume initialization type
-Operator.bl_description -> bl_description: string
-Operator.bl_idname -> bl_idname: string
-Operator.bl_label -> bl_label: string
-Operator.bl_options -> bl_options: enum Options for this operator type
-Operator.layout -> layout: pointer, (read-only)
-Operator.name -> name: string, (read-only)
-Operator.properties -> properties: pointer, (read-only)
-OperatorFileListElement.name -> name: string the name of a file or directory within a file list
-OperatorMousePath.loc -> loc: float Mouse location
-OperatorMousePath.time -> time: float Time of mouse location
-OperatorStrokeElement.location -> location: float
-OperatorStrokeElement.mouse -> mouse: float
-OperatorStrokeElement.pressure -> pressure: float Tablet pressure
-OperatorStrokeElement.time -> time: float
-OperatorTypeMacro.properties -> properties: pointer, (read-only)
-OutflowFluidSettings.volume_initialization -> volume_initialization: enum Volume initialization type
-PackedFile.size -> size: int, (read-only) Size of packed file in bytes
-Paint.active_brush_index -> active_brush_index: int
-Paint.active_brush_name -> active_brush_name: string
-Paint.brush -> brush: pointer Active paint brush
-Paint.brushes -> brushes: collection, (read-only) Brushes selected for this paint mode
-Panel.bl_context -> bl_context: string
-Panel.bl_idname -> bl_idname: string
-Panel.bl_label -> bl_label: string
-Panel.bl_region_type -> bl_region_type: enum
-Panel.bl_space_type -> bl_space_type: enum
-Panel.layout -> layout: pointer, (read-only)
-Panel.text -> text: string
-ParentActuator.mode -> mode: enum
-ParentActuator.object -> object: pointer Set this object as parent
-Particle.alive_state -> alive_state: enum
-Particle.angular_velocity -> angular_velocity: float
-Particle.birthtime -> birthtime: float
-Particle.die_time -> die_time: float
-Particle.hair -> hair: collection, (read-only)
-Particle.keys -> keys: collection, (read-only)
-Particle.lifetime -> lifetime: float
-Particle.location -> location: float
-Particle.prev_angular_velocity -> prev_angular_velocity: float
-Particle.prev_location -> prev_location: float
-Particle.prev_rotation -> prev_rotation: float
-Particle.prev_velocity -> prev_velocity: float
-Particle.rotation -> rotation: float
-Particle.size -> size: float
-Particle.velocity -> velocity: float
-ParticleBrush.count -> count: int Particle count
-ParticleBrush.curve -> curve: pointer, (read-only)
-ParticleBrush.length_mode -> length_mode: enum
-ParticleBrush.puff_mode -> puff_mode: enum
-ParticleBrush.size -> size: int Brush size
-ParticleBrush.steps -> steps: int Brush steps
-ParticleBrush.strength -> strength: float Brush strength
-ParticleDupliWeight.count -> count: int The number of times this object is repeated with respect to other objects
-ParticleDupliWeight.name -> name: string, (read-only) Particle dupliobject name
-ParticleEdit.add_keys -> add_keys: int How many keys to make new particles with
-ParticleEdit.brush -> brush: pointer, (read-only)
-ParticleEdit.draw_step -> draw_step: int How many steps to draw the path with
-ParticleEdit.emitter_distance -> emitter_distance: float Distance to keep particles away from the emitter
-ParticleEdit.fade_frames -> fade_frames: int How many frames to fade
-ParticleEdit.object -> object: pointer, (read-only) The edited object
-ParticleEdit.selection_mode -> selection_mode: enum Particle select and display mode
-ParticleEdit.tool -> tool: enum
-ParticleEdit.type -> type: enum
-ParticleFluidSettings.alpha_influence -> alpha_influence: float Amount of particle alpha change, inverse of size influence: 0=off (all same alpha), 1=full. (large particles get lower alphas, smaller ones higher values)
-ParticleFluidSettings.particle_influence -> particle_influence: float Amount of particle size scaling: 0=off (all same size), 1=full (range 0.2-2.0), >1=stronger
-ParticleFluidSettings.path -> path: string Directory (and/or filename prefix) to store and load particles from
-ParticleHairKey.location -> location: float Location of the hair key in object space
-ParticleHairKey.location_hairspace -> location_hairspace: float Location of the hair key in its internal coordinate system, relative to the emitting face
-ParticleHairKey.time -> time: float Relative time of key over hair length
-ParticleHairKey.weight -> weight: float Weight for cloth simulation
-ParticleInstanceModifier.axis -> axis: enum Pole axis for rotation
-ParticleInstanceModifier.object -> object: pointer Object that has the particle system
-ParticleInstanceModifier.particle_system_number -> particle_system_number: int
-ParticleInstanceModifier.position -> position: float Position along path
-ParticleInstanceModifier.random_position -> random_position: float Randomize position along path
-ParticleKey.angular_velocity -> angular_velocity: float Key angular velocity
-ParticleKey.location -> location: float Key location
-ParticleKey.rotation -> rotation: float Key rotation quaterion
-ParticleKey.time -> time: float Time of key over the simulation
-ParticleKey.velocity -> velocity: float Key velocity
-ParticleSettings.active_dupliweight -> active_dupliweight: pointer, (read-only)
-ParticleSettings.active_dupliweight_index -> active_dupliweight_index: int
-ParticleSettings.adaptive_angle -> adaptive_angle: int How many degrees path has to curve to make another render segment
-ParticleSettings.adaptive_pix -> adaptive_pix: int How many pixels path has to cover to make another render segment
-ParticleSettings.amount -> amount: int Total number of particles
-ParticleSettings.angular_velocity_factor -> angular_velocity_factor: float Angular velocity amount
-ParticleSettings.angular_velocity_mode -> angular_velocity_mode: enum Particle angular velocity mode
-ParticleSettings.animation_data -> animation_data: pointer, (read-only) Animation data for this datablock
-ParticleSettings.billboard_align -> billboard_align: enum In respect to what the billboards are aligned
-ParticleSettings.billboard_animation -> billboard_animation: enum How to animate billboard textures
-ParticleSettings.billboard_object -> billboard_object: pointer Billboards face this object (default is active camera)
-ParticleSettings.billboard_offset -> billboard_offset: float
-ParticleSettings.billboard_random_tilt -> billboard_random_tilt: float Random tilt of the billboards
-ParticleSettings.billboard_split_offset -> billboard_split_offset: enum How to offset billboard textures
-ParticleSettings.billboard_tilt -> billboard_tilt: float Tilt of the billboards
-ParticleSettings.billboard_uv_split -> billboard_uv_split: int Amount of rows/columns to split UV coordinates for billboards
-ParticleSettings.boids -> boids: pointer, (read-only)
-ParticleSettings.branch_threshold -> branch_threshold: float Threshold of branching
-ParticleSettings.brownian_factor -> brownian_factor: float Specify the amount of Brownian motion
-ParticleSettings.child_length -> child_length: float Length of child paths
-ParticleSettings.child_length_thres -> child_length_thres: float Amount of particles left untouched by child path length
-ParticleSettings.child_nbr -> child_nbr: int Amount of children/parent
-ParticleSettings.child_radius -> child_radius: float Radius of children around parent
-ParticleSettings.child_random_size -> child_random_size: float Random variation to the size of the child particles
-ParticleSettings.child_roundness -> child_roundness: float Roundness of children around parent
-ParticleSettings.child_size -> child_size: float A multiplier for the child particle size
-ParticleSettings.child_type -> child_type: enum Create child particles
-ParticleSettings.clump_factor -> clump_factor: float Amount of clumping
-ParticleSettings.clumppow -> clumppow: float Shape of clumping
-ParticleSettings.damp_factor -> damp_factor: float Specify the amount of damping
-ParticleSettings.display -> display: int Percentage of particles to display in 3D view
-ParticleSettings.distribution -> distribution: enum How to distribute particles on selected element
-ParticleSettings.drag_factor -> drag_factor: float Specify the amount of air-drag
-ParticleSettings.draw_as -> draw_as: enum How particles are drawn in viewport
-ParticleSettings.draw_size -> draw_size: int Size of particles on viewport in pixels (0=default)
-ParticleSettings.draw_step -> draw_step: int How many steps paths are drawn with (power of 2)
-ParticleSettings.dupli_group -> dupli_group: pointer Show Objects in this Group in place of particles
-ParticleSettings.dupli_object -> dupli_object: pointer Show this Object in place of particles
-ParticleSettings.dupliweights -> dupliweights: collection, (read-only) Weights for all of the objects in the dupli group
-ParticleSettings.effect_hair -> effect_hair: float Hair stiffness for effectors
-ParticleSettings.effector_weights -> effector_weights: pointer, (read-only)
-ParticleSettings.emit_from -> emit_from: enum Where to emit particles from
-ParticleSettings.fluid -> fluid: pointer, (read-only)
-ParticleSettings.force_field_1 -> force_field_1: pointer, (read-only)
-ParticleSettings.force_field_2 -> force_field_2: pointer, (read-only)
-ParticleSettings.frame_end -> frame_end: float Frame # to stop emitting particles
-ParticleSettings.frame_start -> frame_start: float Frame # to start emitting particles
-ParticleSettings.grid_resolution -> grid_resolution: int The resolution of the particle grid
-ParticleSettings.hair_step -> hair_step: int Number of hair segments
-ParticleSettings.integrator -> integrator: enum Select physics integrator type
-ParticleSettings.jitter_factor -> jitter_factor: float Amount of jitter applied to the sampling
-ParticleSettings.keyed_loops -> keyed_loops: int Number of times the keys are looped
-ParticleSettings.keys_step -> keys_step: int
-ParticleSettings.kink -> kink: enum Type of periodic offset on the path
-ParticleSettings.kink_amplitude -> kink_amplitude: float The amplitude of the offset
-ParticleSettings.kink_axis -> kink_axis: enum Which axis to use for offset
-ParticleSettings.kink_frequency -> kink_frequency: float The frequency of the offset (1/total length)
-ParticleSettings.kink_shape -> kink_shape: float Adjust the offset to the beginning/end
-ParticleSettings.lifetime -> lifetime: float Specify the life span of the particles
-ParticleSettings.line_length_head -> line_length_head: float Length of the line's head
-ParticleSettings.line_length_tail -> line_length_tail: float Length of the line's tail
-ParticleSettings.mass -> mass: float Specify the mass of the particles
-ParticleSettings.material -> material: int Specify material used for the particles
-ParticleSettings.normal_factor -> normal_factor: float Let the surface normal give the particle a starting speed
-ParticleSettings.object_aligned_factor -> object_aligned_factor: float Let the emitter object orientation give the particle a starting speed
-ParticleSettings.object_factor -> object_factor: float Let the object give the particle a starting speed
-ParticleSettings.particle_factor -> particle_factor: float Let the target particle give the particle a starting speed
-ParticleSettings.particle_size -> particle_size: float The size of the particles
-ParticleSettings.path_end -> path_end: float End time of drawn path
-ParticleSettings.path_start -> path_start: float Starting time of drawn path
-ParticleSettings.phase_factor -> phase_factor: float Initial rotation phase
-ParticleSettings.physics_type -> physics_type: enum Particle physics type
-ParticleSettings.random_factor -> random_factor: float Give the starting speed a random variation
-ParticleSettings.random_length -> random_length: float Give path length a random variation
-ParticleSettings.random_lifetime -> random_lifetime: float Give the particle life a random variation
-ParticleSettings.random_phase_factor -> random_phase_factor: float Randomize rotation phase
-ParticleSettings.random_rotation_factor -> random_rotation_factor: float Randomize rotation
-ParticleSettings.random_size -> random_size: float Give the particle size a random variation
-ParticleSettings.react_event -> react_event: enum The event of target particles to react on
-ParticleSettings.reaction_shape -> reaction_shape: float Power of reaction strength dependence on distance to target
-ParticleSettings.reactor_factor -> reactor_factor: float Let the vector away from the target particles location give the particle a starting speed
-ParticleSettings.ren_as -> ren_as: enum How particles are rendered
-ParticleSettings.render_step -> render_step: int How many steps paths are rendered with (power of 2)
-ParticleSettings.rendered_child_nbr -> rendered_child_nbr: int Amount of children/parent for rendering
-ParticleSettings.rotate_from -> rotate_from: enum
-ParticleSettings.rotation_mode -> rotation_mode: enum Particles initial rotation
-ParticleSettings.rough1 -> rough1: float Amount of location dependent rough
-ParticleSettings.rough1_size -> rough1_size: float Size of location dependent rough
-ParticleSettings.rough2 -> rough2: float Amount of random rough
-ParticleSettings.rough2_size -> rough2_size: float Size of random rough
-ParticleSettings.rough2_thres -> rough2_thres: float Amount of particles left untouched by random rough
-ParticleSettings.rough_end_shape -> rough_end_shape: float Shape of end point rough
-ParticleSettings.rough_endpoint -> rough_endpoint: float Amount of end point rough
-ParticleSettings.simplify_rate -> simplify_rate: float Speed of simplification
-ParticleSettings.simplify_refsize -> simplify_refsize: int Reference size in pixels, after which simplification begins
-ParticleSettings.simplify_transition -> simplify_transition: float Transition period for fading out strands
-ParticleSettings.simplify_viewport -> simplify_viewport: float Speed of Simplification
-ParticleSettings.subframes -> subframes: int Subframes to simulate for improved stability and finer granularity simulations
-ParticleSettings.tangent_factor -> tangent_factor: float Let the surface tangent give the particle a starting speed
-ParticleSettings.tangent_phase -> tangent_phase: float Rotate the surface tangent
-ParticleSettings.time_tweak -> time_tweak: float A multiplier for physics timestep (1.0 means one frame = 1/25 seconds)
-ParticleSettings.trail_count -> trail_count: int Number of trail particles
-ParticleSettings.type -> type: enum
-ParticleSettings.userjit -> userjit: int Emission locations / face (0 = automatic)
-ParticleSettings.virtual_parents -> virtual_parents: float Relative amount of virtual parents
-ParticleSystem.active_particle_target -> active_particle_target: pointer, (read-only)
-ParticleSystem.active_particle_target_index -> active_particle_target_index: int
-ParticleSystem.billboard_normal_uv -> billboard_normal_uv: string UV Layer to control billboard normals
-ParticleSystem.billboard_split_uv -> billboard_split_uv: string UV Layer to control billboard splitting
-ParticleSystem.billboard_time_index_uv -> billboard_time_index_uv: string UV Layer to control billboard time index (X-Y)
-ParticleSystem.child_particles -> child_particles: collection, (read-only) Child particles generated by the particle system
-ParticleSystem.cloth -> cloth: pointer, (read-only) Cloth dynamics for hair
-ParticleSystem.name -> name: string Particle system name
-ParticleSystem.parent -> parent: pointer Use this object's coordinate system instead of global coordinate system
-ParticleSystem.particles -> particles: collection, (read-only) Particles generated by the particle system
-ParticleSystem.point_cache -> point_cache: pointer, (read-only)
-ParticleSystem.reactor_target_object -> reactor_target_object: pointer For reactor systems, the object that has the target particle system (empty if same object)
-ParticleSystem.reactor_target_particle_system -> reactor_target_particle_system: int For reactor systems, index of particle system on the target object
-ParticleSystem.seed -> seed: int Offset in the random number table, to get a different randomized result
-ParticleSystem.settings -> settings: pointer Particle system settings
-ParticleSystem.targets -> targets: collection, (read-only) Target particle systems
-ParticleSystem.vertex_group_clump -> vertex_group_clump: string Vertex group to control clump
-ParticleSystem.vertex_group_density -> vertex_group_density: string Vertex group to control density
-ParticleSystem.vertex_group_field -> vertex_group_field: string Vertex group to control field
-ParticleSystem.vertex_group_kink -> vertex_group_kink: string Vertex group to control kink
-ParticleSystem.vertex_group_length -> vertex_group_length: string Vertex group to control length
-ParticleSystem.vertex_group_rotation -> vertex_group_rotation: string Vertex group to control rotation
-ParticleSystem.vertex_group_roughness1 -> vertex_group_rough1: string Vertex group to control roughness 1
-ParticleSystem.vertex_group_roughness2 -> vertex_group_rough2: string Vertex group to control roughness 2
-ParticleSystem.vertex_group_roughness_end -> vertex_group_rough_end: string Vertex group to control roughness end
-ParticleSystem.vertex_group_size -> vertex_group_size: string Vertex group to control size
-ParticleSystem.vertex_group_tangent -> vertex_group_tangent: string Vertex group to control tangent
-ParticleSystem.vertex_group_velocity -> vertex_group_velocity: string Vertex group to control velocity
-ParticleSystemModifier.particle_system -> particle_system: pointer, (read-only) Particle System that this modifier controls
-ParticleTarget.duration -> duration: float
-ParticleTarget.mode -> mode: enum
-ParticleTarget.name -> name: string, (read-only) Particle target name
-ParticleTarget.object -> object: pointer The object that has the target particle system (empty if same object)
-ParticleTarget.system -> system: int The index of particle system on the target object
-ParticleTarget.time -> time: float
-PivotConstraint.enabled_rotation_range -> enabled_rotation_range: enum Rotation range on which pivoting should occur
-PivotConstraint.head_tail -> head_tail: float Target along length of bone: Head=0, Tail=1
-PivotConstraint.offset -> offset: float Offset of pivot from target (when set), or from owner's location (when Fixed Position is off), or the absolute pivot point
-PivotConstraint.subtarget -> subtarget: string
-PivotConstraint.target -> target: pointer Target Object, defining the position of the pivot when defined
-PluginSequence.filename -> filename: string, (read-only)
-PointCache.active_point_cache_index -> active_point_cache_index: int
-PointCache.filepath -> filepath: string Cache file path
-PointCache.frame_end -> frame_end: int Frame on which the simulation stops
-PointCache.frame_start -> frame_start: int Frame on which the simulation starts
-PointCache.index -> index: int Index number of cache files
-PointCache.info -> info: string, (read-only) Info on current cache status
-PointCache.name -> name: string Cache name
-PointCache.point_cache_list -> point_cache_list: collection, (read-only) Point cache list
-PointCache.step -> step: int Number of frames between cached frames
-PointDensity.color_ramp -> color_ramp: pointer, (read-only)
-PointDensity.color_source -> color_source: enum Data to derive color results from
-PointDensity.falloff -> falloff: enum Method of attenuating density by distance from the point
-PointDensity.falloff_softness -> falloff_soft: float Softness of the 'soft' falloff option
-PointDensity.noise_basis -> noise_basis: enum Noise formula used for turbulence
-PointDensity.object -> object: pointer Object to take point data from
-PointDensity.particle_cache -> particle_cache: enum Co-ordinate system to cache particles in
-PointDensity.particle_system -> particle_system: pointer Particle System to render as points
-PointDensity.point_source -> point_source: enum Point data to use as renderable point density
-PointDensity.radius -> radius: float Radius from the shaded sample to look for points within
-PointDensity.speed_scale -> speed_scale: float Multiplier to bring particle speed within an acceptable range
-PointDensity.turbulence_depth -> turbulence_depth: int Level of detail in the added turbulent noise
-PointDensity.turbulence_influence -> turbulence_influence: enum Method for driving added turbulent noise
-PointDensity.turbulence_size -> turbulence_size: float Scale of the added turbulent noise
-PointDensity.turbulence_strength -> turbulence_strength: float
-PointDensity.vertices_cache -> vertices_cache: enum Co-ordinate system to cache vertices in
-PointDensityTexture.pointdensity -> pointdensity: pointer, (read-only) The point density settings associated with this texture
-PointLamp.falloff_curve -> falloff_curve: pointer, (read-only) Custom Lamp Falloff Curve
-PointLamp.falloff_type -> falloff_type: enum Intensity Decay with distance
-PointLamp.linear_attenuation -> linear_attenuation: float Linear distance attenuation
-PointLamp.quadratic_attenuation -> quadratic_attenuation: float Quadratic distance attenuation
-PointLamp.shadow_adaptive_threshold -> shadow_adaptive_threshold: float Threshold for Adaptive Sampling (Raytraced shadows)
-PointLamp.shadow_color -> shadow_color: float Color of shadows cast by the lamp
-PointLamp.shadow_method -> shadow_method: enum Method to compute lamp shadow with
-PointLamp.shadow_ray_samples -> shadow_ray_samples: int Amount of samples taken extra (samples x samples)
-PointLamp.shadow_ray_sampling_method -> shadow_ray_sample_method: enum Method for generating shadow samples: Adaptive QMC is fastest, Constant QMC is less noisy but slower
-PointLamp.shadow_soft_size -> shadow_soft_size: float Light size for ray shadow sampling (Raytraced shadows)
-PointerProperty.fixed_type -> fixed_type: pointer, (read-only) Fixed pointer type, empty if variable type
-Pose.active_bone_group -> active_bone_group: pointer Active bone group for this pose
-Pose.active_bone_group_index -> active_bone_group_index: int Active index in bone groups array
-Pose.animation_visualisation -> animation_visualisation: pointer, (read-only) Animation data for this datablock
-Pose.bone_groups -> bone_groups: collection, (read-only) Groups of the bones
-Pose.bones -> bones: collection, (read-only) Individual pose bones for the armature
-Pose.ik_param -> ik_param: pointer, (read-only) Parameters for IK solver
-Pose.ik_solver -> ik_solver: enum Selection of IK solver for IK chain, current choice is 0 for Legacy, 1 for iTaSC
-PoseBone.bone -> bone: pointer, (read-only) Bone associated with this PoseBone
-PoseBone.bone_group -> bone_group: pointer Bone Group this pose channel belongs to
-PoseBone.bone_group_index -> bone_group_index: int Bone Group this pose channel belongs to (0=no group)
-PoseBone.child -> child: pointer, (read-only) Child of this pose bone
-PoseBone.constraints -> constraints: collection, (read-only) Constraints that act on this PoseChannel
-PoseBone.custom_shape -> custom_shape: pointer Object that defines custom draw type for this bone
-PoseBone.custom_shape_transform -> custom_shape_transform: pointer Bone that defines the display transform of this custom shape
-PoseBone.head -> head: float, (read-only) Location of head of the channel's bone
-PoseBone.ik_lin_weight -> ik_lin_weight: float Weight of scale constraint for IK
-PoseBone.ik_max_x -> ik_max_x: float Maximum angles for IK Limit
-PoseBone.ik_max_y -> ik_max_y: float Maximum angles for IK Limit
-PoseBone.ik_max_z -> ik_max_z: float Maximum angles for IK Limit
-PoseBone.ik_min_x -> ik_min_x: float Minimum angles for IK Limit
-PoseBone.ik_min_y -> ik_min_y: float Minimum angles for IK Limit
-PoseBone.ik_min_z -> ik_min_z: float Minimum angles for IK Limit
-PoseBone.ik_rot_weight -> ik_rot_weight: float Weight of rotation constraint for IK
-PoseBone.ik_stiffness_x -> ik_stiffness_x: float IK stiffness around the X axis
-PoseBone.ik_stiffness_y -> ik_stiffness_y: float IK stiffness around the Y axis
-PoseBone.ik_stiffness_z -> ik_stiffness_z: float IK stiffness around the Z axis
-PoseBone.ik_stretch -> ik_stretch: float Allow scaling of the bone for IK
-PoseBone.location -> location: float
-PoseBone.matrix -> matrix: float, (read-only) Final 4x4 matrix for this channel
-PoseBone.matrix_channel -> matrix_channel: float, (read-only) 4x4 matrix, before constraints
-PoseBone.matrix_local -> matrix_local: float Matrix representing the parent relative location, scale and rotation. Provides an alternative access to these properties.
-PoseBone.motion_path -> motion_path: pointer, (read-only) Motion Path for this element
-PoseBone.name -> name: string
-PoseBone.parent -> parent: pointer, (read-only) Parent of this pose bone
-PoseBone.rotation_axis_angle -> rotation_axis_angle: float Angle of Rotation for Axis-Angle rotation representation
-PoseBone.rotation_euler -> rotation_euler: float Rotation in Eulers
-PoseBone.rotation_mode -> rotation_mode: enum
-PoseBone.rotation_quaternion -> rotation_quaternion: float Rotation in Quaternions
-PoseBone.scale -> scale: float
-PoseBone.tail -> tail: float, (read-only) Location of tail of the channel's bone
-PoseBoneConstraints.active -> active: pointer Active PoseChannel constraint
-PoseTemplate.name -> name: string
-PoseTemplateSettings.active_template_index -> active_template_index: int
-PoseTemplateSettings.templates -> templates: collection, (read-only)
-Property.description -> description: string, (read-only) Description of the property for tooltips
-Property.identifier -> identifier: string, (read-only) Unique name used in the code and scripting
-Property.name -> name: string, (read-only) Human readable name
-Property.srna -> srna: pointer, (read-only) Struct definition used for properties assigned to this item
-Property.subtype -> subtype: enum, (read-only) Semantic interpretation of the property
-Property.type -> type: enum, (read-only) Data type of the property
-Property.unit -> unit: enum, (read-only) Type of units for this property
-PropertyActuator.mode -> mode: enum
-PropertyActuator.object -> object: pointer Copy from this Object
-PropertyActuator.object_property -> object_property: string Copy this property
-PropertyActuator.property -> property: string The name of the property
-PropertyActuator.value -> value: string The value to use, use "" around strings
-PropertySensor.evaluation_type -> evaluation_type: enum Type of property evaluation
-PropertySensor.max_value -> value_max: string Specify maximum value in Interval type
-PropertySensor.min_value -> value_min: string Specify minimum value in Interval type
-PropertySensor.property -> property: string
-PropertySensor.value -> value: string Check for this value in types in Equal or Not Equal types
-PythonConstraint.number_of_targets -> number_of_targets: int Usually only 1-3 are needed
-PythonConstraint.targets -> targets: collection, (read-only) Target Objects
-PythonConstraint.text -> text: pointer The text object that contains the Python script
-PythonController.mode -> mode: enum Python script type (textblock or module - faster)
-PythonController.module -> module: string Module name and function to run e.g. "someModule.main". Internal texts and external python files can be used
-PythonController.text -> text: pointer Text datablock with the python script
-RGBANodeSocket.default_value -> default_value: float Default value of the socket when no link is attached
-RGBANodeSocket.name -> name: string, (read-only) Socket name
-RadarSensor.angle -> angle: float Opening angle of the radar cone
-RadarSensor.axis -> axis: enum Specify along which axis the radar cone is cast
-RadarSensor.distance -> distance: float Depth of the radar cone
-RadarSensor.property -> property: string Only look for Objects with this property
-RandomActuator.chance -> chance: float Pick a number between 0 and 1. Success if you stay below this value
-RandomActuator.distribution -> distribution: enum Choose the type of distribution
-RandomActuator.float_max -> float_max: float Choose a number from a range. Upper boundary of the range
-RandomActuator.float_mean -> float_mean: float A normal distribution. Mean of the distribution
-RandomActuator.float_min -> float_min: float Choose a number from a range. Lower boundary of the range
-RandomActuator.float_value -> float_value: float Always return this number
-RandomActuator.half_life_time -> half_life_time: float Negative exponential dropoff
-RandomActuator.int_max -> int_max: int Choose a number from a range. Upper boundary of the range
-RandomActuator.int_mean -> int_mean: float Expected mean value of the distribution
-RandomActuator.int_min -> int_min: int Choose a number from a range. Lower boundary of the range
-RandomActuator.int_value -> int_value: int Always return this number
-RandomActuator.property -> property: string Assign the random value to this property
-RandomActuator.seed -> seed: int Initial seed of the random generator. Use Python for more freedom (choose 0 for not random)
-RandomActuator.standard_derivation -> standard_derivation: float A normal distribution. Standard deviation of the distribution
-RandomSensor.seed -> seed: int Initial seed of the generator. (Choose 0 for not random)
-RaySensor.axis -> axis: enum Specify along which axis the ray is cast
-RaySensor.material -> material: string Only look for Objects with this material
-RaySensor.property -> property: string Only look for Objects with this property
-RaySensor.range -> range: float Sense objects no farther than this distance
-RaySensor.ray_type -> ray_type: enum Toggle collision on material or property
-Region.height -> height: int, (read-only) Region height
-Region.id -> id: int, (read-only) Unique ID for this region
-Region.type -> type: enum, (read-only) Type of this region
-Region.width -> width: int, (read-only) Region width
-RegionView3D.perspective_matrix -> perspective_matrix: float, (read-only) Current perspective matrix of the 3D region
-RegionView3D.view_distance -> view_distance: float Distance to the view location
-RegionView3D.view_location -> view_location: float View pivot location
-RegionView3D.view_matrix -> view_matrix: float, (read-only) Current view matrix of the 3D region
-RegionView3D.view_perspective -> view_perspective: enum View Perspective
-RegionView3D.view_rotation -> view_rotation: float Rotation in quaternions (keep normalized)
-RenderEngine.bl_idname -> bl_idname: string
-RenderEngine.bl_label -> bl_label: string
-RenderLayer.light_override -> light_override: pointer, (read-only) Group to override all other lights in this render layer
-RenderLayer.material_override -> material_override: pointer, (read-only) Material to override all other materials in this render layer
-RenderLayer.name -> name: string, (read-only) Render layer name
-RenderLayer.passes -> passes: collection, (read-only)
-RenderLayer.rect -> rect: float
-RenderPass.channel_id -> channel_id: string, (read-only)
-RenderPass.channels -> channels: int, (read-only)
-RenderPass.name -> name: string, (read-only)
-RenderPass.rect -> rect: float
-RenderPass.type -> type: enum, (read-only)
-RenderResult.layers -> layers: collection, (read-only)
-RenderResult.resolution_x -> resolution_x: int, (read-only)
-RenderResult.resolution_y -> resolution_y: int, (read-only)
-RenderSettings.active_layer_index -> active_layer_index: int Active index in render layer array
-RenderSettings.alpha_mode -> alpha_mode: enum Representation of alpha information in the RGBA pixels
-RenderSettings.antialiasing_samples -> antialiasing_samples: enum Amount of anti-aliasing samples per pixel
-RenderSettings.bake_aa_mode -> bake_aa_mode: enum
-RenderSettings.bake_bias -> bake_bias: float Bias towards faces further away from the object (in blender units)
-RenderSettings.bake_distance -> bake_distance: float Maximum distance from active object to other object (in blender units
-RenderSettings.bake_margin -> bake_margin: int Amount of pixels to extend the baked result with, as post process filter
-RenderSettings.bake_normal_space -> bake_normal_space: enum Choose normal space for baking
-RenderSettings.bake_quad_split -> bake_quad_split: enum Choose the method used to split a quad into 2 triangles for baking
-RenderSettings.bake_type -> bake_type: enum Choose shading information to bake into the image
-RenderSettings.border_max_x -> border_max_x: float Sets maximum X value for the render border
-RenderSettings.border_max_y -> border_max_y: float Sets maximum Y value for the render border
-RenderSettings.border_min_x -> border_min_x: float Sets minimum X value to for the render border
-RenderSettings.border_min_y -> border_min_y: float Sets minimum Y value for the render border
-RenderSettings.cineon_black -> cineon_black: int Log conversion reference blackpoint
-RenderSettings.cineon_gamma -> cineon_gamma: float Log conversion gamma
-RenderSettings.cineon_white -> cineon_white: int Log conversion reference whitepoint
-RenderSettings.color_mode -> color_mode: enum Choose BW for saving greyscale images, RGB for saving red, green and blue channels, AND RGBA for saving red, green, blue + alpha channels
-RenderSettings.display_mode -> display_mode: enum Select where rendered images will be displayed
-RenderSettings.dither_intensity -> dither_intensity: float Amount of dithering noise added to the rendered image to break up banding
-RenderSettings.edge_color -> edge_color: float
-RenderSettings.edge_threshold -> edge_threshold: int Threshold for drawing outlines on geometry edges
-RenderSettings.engine -> engine: enum Engine to use for rendering
-RenderSettings.field_order -> field_order: enum Order of video fields. Select which lines get rendered first, to create smooth motion for TV output
-RenderSettings.file_extension -> file_extension: string, (read-only) The file extension used for saving renders
-RenderSettings.file_format -> file_format: enum File format to save the rendered images as
-RenderSettings.file_quality -> file_quality: int Quality of JPEG images, AVI Jpeg and SGI movies
-RenderSettings.filter_size -> filter_size: float Pixel width over which the reconstruction filter combines samples
-RenderSettings.fps -> fps: int Framerate, expressed in frames per second
-RenderSettings.fps_base -> fps_base: float Framerate base
-RenderSettings.layers -> layers: collection, (read-only)
-RenderSettings.motion_blur_samples -> motion_blur_samples: int Number of scene samples to take with motion blur
-RenderSettings.motion_blur_shutter -> motion_blur_shutter: float Time taken in frames between shutter open and close
-RenderSettings.octree_resolution -> octree_resolution: enum Resolution of raytrace accelerator. Use higher resolutions for larger scenes
-RenderSettings.output_path -> output_path: string Directory/name to save animations, # characters defines the position and length of frame numbers
-RenderSettings.parts_x -> parts_x: int Number of horizontal tiles to use while rendering
-RenderSettings.parts_y -> parts_y: int Number of vertical tiles to use while rendering
-RenderSettings.pixel_aspect_x -> pixel_aspect_x: float Horizontal aspect ratio - for anamorphic or non-square pixel output
-RenderSettings.pixel_aspect_y -> pixel_aspect_y: float Vertical aspect ratio - for anamorphic or non-square pixel output
-RenderSettings.pixel_filter -> pixel_filter: enum Reconstruction filter used for combining anti-aliasing samples
-RenderSettings.raytrace_structure -> raytrace_structure: enum Type of raytrace accelerator structure
-RenderSettings.resolution_percentage -> resolution_percentage: int Percentage scale for render resolution
-RenderSettings.resolution_x -> resolution_x: int Number of horizontal pixels in the rendered image
-RenderSettings.resolution_y -> resolution_y: int Number of vertical pixels in the rendered image
-RenderSettings.sequencer_gl_preview -> sequencer_gl_preview: enum Method to draw in the sequencer view
-RenderSettings.sequencer_gl_render -> sequencer_gl_render: enum Method to draw in the sequencer view
-RenderSettings.simplify_ao_sss -> simplify_ao_sss: float Global approximate AA and SSS quality factor
-RenderSettings.simplify_child_particles -> simplify_child_particles: float Global child particles percentage
-RenderSettings.simplify_shadow_samples -> simplify_shadow_samples: int Global maximum shadow samples
-RenderSettings.simplify_subdivision -> simplify_subdivision: int Global maximum subdivision level
-RenderSettings.stamp_background -> stamp_background: float Color to use behind stamp text
-RenderSettings.stamp_font_size -> stamp_font_size: int Size of the font used when rendering stamp text
-RenderSettings.stamp_foreground -> stamp_foreground: float Color to use for stamp text
-RenderSettings.stamp_note_text -> stamp_note_text: string Custom text to appear in the stamp note
-RenderSettings.threads -> threads: int Number of CPU threads to use simultaneously while rendering (for multi-core/CPU systems)
-RenderSettings.threads_mode -> threads_mode: enum Determine the amount of render threads used
-RigidBodyJointConstraint.axis_x -> axis_x: float Rotate pivot on X axis in degrees
-RigidBodyJointConstraint.axis_y -> axis_y: float Rotate pivot on Y axis in degrees
-RigidBodyJointConstraint.axis_z -> axis_z: float Rotate pivot on Z axis in degrees
-RigidBodyJointConstraint.child -> child: pointer Child object
-RigidBodyJointConstraint.pivot_type -> pivot_type: enum
-RigidBodyJointConstraint.pivot_x -> pivot_x: float Offset pivot on X
-RigidBodyJointConstraint.pivot_y -> pivot_y: float Offset pivot on Y
-RigidBodyJointConstraint.pivot_z -> pivot_z: float Offset pivot on Z
-RigidBodyJointConstraint.target -> target: pointer Target Object
-SPHFluidSettings.buoyancy -> buoyancy: float
-SPHFluidSettings.fluid_radius -> fluid_radius: float Fluid interaction Radius
-SPHFluidSettings.rest_density -> rest_density: float Density
-SPHFluidSettings.rest_length -> rest_length: float The Spring Rest Length (factor of interaction radius)
-SPHFluidSettings.spring_k -> spring_k: float Spring force constant
-SPHFluidSettings.stiffness_k -> stiffness_k: float Constant K - Stiffness
-SPHFluidSettings.stiffness_knear -> stiffness_knear: float Repulsion factor: stiffness_knear
-SPHFluidSettings.viscosity_beta -> viscosity_beta: float Square viscosity factor
-SPHFluidSettings.viscosity_omega -> viscosity_omega: float Linear viscosity
-Scene.active_keying_set -> active_keying_set: pointer Active Keying Set used to insert/delete keyframes
-Scene.active_keying_set_index -> active_keying_set_index: int Current Keying Set index (negative for 'builtin' and positive for 'absolute')
-Scene.all_keying_sets -> all_keying_sets: collection, (read-only) All Keying Sets available for use (builtins and Absolute Keying Sets for this Scene)
-Scene.animation_data -> animation_data: pointer, (read-only) Animation data for this datablock
-Scene.bases -> bases: collection, (read-only)
-Scene.camera -> camera: pointer Active camera used for rendering the scene
-Scene.cursor_location -> cursor_location: float 3D cursor location
-Scene.distance_model -> distance_model: enum Distance model for distance attenuation calculation
-Scene.doppler_factor -> doppler_factor: float Pitch factor for Doppler effect calculation
-Scene.frame_current -> frame_current: int
-Scene.frame_end -> frame_end: int Final frame of the playback/rendering range
-Scene.frame_start -> frame_start: int First frame of the playback/rendering range
-Scene.frame_step -> frame_step: int Number of frames to skip forward while rendering/playing back each frame
-Scene.game_data -> game_data: pointer, (read-only)
-Scene.gravity -> gravity: float Constant acceleration in a given direction
-Scene.grease_pencil -> grease_pencil: pointer Grease Pencil datablock
-Scene.keying_sets -> keying_sets: collection, (read-only) Absolute Keying Sets for this Scene
-Scene.network_render -> network_render: pointer, (read-only) Network Render Settings
-Scene.nodetree -> nodetree: pointer, (read-only) Compositing node tree
-Scene.objects -> objects: collection, (read-only)
-Scene.orientations -> orientations: collection, (read-only)
-Scene.pose_templates -> pose_templates: pointer, (read-only) Pose Template Settings
-Scene.pov_radio_adc_bailout -> pov_radio_adc_bailout: float The adc_bailout for radiosity rays. Use adc_bailout = 0.01 / brightest_ambient_object for good results
-Scene.pov_radio_brightness -> pov_radio_intensity: float Amount objects are brightened before being returned upwards to the rest of the system
-Scene.pov_radio_count -> pov_radio_count: int Number of rays that are sent out whenever a new radiosity value has to be calculated
-Scene.pov_radio_error_bound -> pov_radio_error_bound: float One of the two main speed/quality tuning values, lower values are more accurate
-Scene.pov_radio_gray_threshold -> pov_radio_gray_threshold: float One of the two main speed/quality tuning values, lower values are more accurate
-Scene.pov_radio_low_error_factor -> pov_radio_low_error_factor: float If you calculate just enough samples, but no more, you will get an image which has slightly blotchy lighting
-Scene.pov_radio_minimum_reuse -> pov_radio_minimum_reuse: float Fraction of the screen width which sets the minimum radius of reuse for each sample point (At values higher than 2% expect errors)
-Scene.pov_radio_nearest_count -> pov_radio_nearest_count: int Number of old ambient values blended together to create a new interpolated value
-Scene.pov_radio_recursion_limit -> pov_radio_recursion_limit: int how many recursion levels are used to calculate the diffuse inter-reflection
-Scene.preview_range_frame_end -> preview_range_frame_end: int Alternative end frame for UI playback
-Scene.preview_range_frame_start -> preview_range_frame_start: int Alternative start frame for UI playback
-Scene.render -> render: pointer, (read-only)
-Scene.sequence_editor -> sequence_editor: pointer, (read-only)
-Scene.set -> set: pointer Background set scene
-Scene.speed_of_sound -> speed_of_sound: float Speed of sound for Doppler effect calculation
-Scene.stamp_note -> stamp_note: string User define note for the render stamping
-Scene.sync_mode -> sync_mode: enum How to sync playback
-Scene.timeline_markers -> timeline_markers: collection, (read-only) Markers used in all timelines for the current scene
-Scene.tool_settings -> tool_settings: pointer, (read-only)
-Scene.unit_settings -> unit_settings: pointer, (read-only) Unit editing settings
-Scene.world -> world: pointer World used for rendering the scene
-SceneActuator.camera -> camera: pointer Set this Camera. Leave empty to refer to self object
-SceneActuator.mode -> mode: enum
-SceneActuator.scene -> scene: pointer Set the Scene to be added/removed/paused/resumed
-SceneBases.active -> active: pointer Active object base in the scene
-SceneGameData.activity_culling_box_radius -> activity_culling_box_radius: float Radius of the activity bubble, in Manhattan length. Objects outside the box are activity-culled
-SceneGameData.depth -> depth: int Displays bit depth of full screen display
-SceneGameData.dome_angle -> dome_angle: int Field of View of the Dome - it only works in mode Fisheye and Truncated
-SceneGameData.dome_buffer_resolution -> dome_buffer_resolution: float Buffer Resolution - decrease it to increase speed
-SceneGameData.dome_mode -> dome_mode: enum Dome physical configurations
-SceneGameData.dome_tesselation -> dome_tesselation: int Tessellation level - check the generated mesh in wireframe mode
-SceneGameData.dome_text -> dome_text: pointer Custom Warp Mesh data file
-SceneGameData.dome_tilt -> dome_tilt: int Camera rotation in horizontal axis
-SceneGameData.eye_separation -> eye_separation: float Set the distance between the eyes - the camera focal length/30 should be fine
-SceneGameData.fps -> fps: int The nominal number of game frames per second. Physics fixed timestep = 1/fps, independently of actual frame rate
-SceneGameData.framing_color -> frame_color: float Set colour of the bars
-SceneGameData.framing_type -> frame_type: enum Select the type of Framing you want
-SceneGameData.frequency -> frequency: int Displays clock frequency of fullscreen display
-SceneGameData.logic_step_max -> logic_step_max: int Sets the maximum number of logic frame per game frame if graphics slows down the game, higher value allows better synchronization with physics
-SceneGameData.material_mode -> material_mode: enum Material mode to use for rendering
-SceneGameData.occlusion_culling_resolution -> occlusion_culling_resolution: float The size of the occlusion buffer in pixel, use higher value for better precision (slower)
-SceneGameData.physics_engine -> physics_engine: enum Physics engine used for physics simulation in the game engine
-SceneGameData.physics_gravity -> physics_gravity: float Gravitational constant used for physics simulation in the game engine
-SceneGameData.physics_step_max -> physics_step_max: int Sets the maximum number of physics step per game frame if graphics slows down the game, higher value allows physics to keep up with realtime
-SceneGameData.physics_step_sub -> physics_step_sub: int Sets the number of simulation substep per physic timestep, higher value give better physics precision
-SceneGameData.resolution_x -> resolution_x: int Number of horizontal pixels in the screen
-SceneGameData.resolution_y -> resolution_y: int Number of vertical pixels in the screen
-SceneGameData.stereo -> stereo: enum
-SceneGameData.stereo_mode -> stereo_mode: enum Stereographic techniques
-SceneObjects.active -> active: pointer Active object for this scene
-SceneRenderLayer.light_override -> light_override: pointer Group to override all other lights in this render layer
-SceneRenderLayer.material_override -> material_override: pointer Material to override all other materials in this render layer
-SceneRenderLayer.name -> name: string Render layer name
-SceneSequence.animation_end_offset -> animation_end_offset: int Animation end offset (trim end)
-SceneSequence.animation_start_offset -> animation_start_offset: int Animation start offset (trim start)
-SceneSequence.color_balance -> color_balance: pointer, (read-only)
-SceneSequence.crop -> crop: pointer, (read-only)
-SceneSequence.multiply_colors -> multiply_colors: float
-SceneSequence.proxy -> proxy: pointer, (read-only)
-SceneSequence.scene -> scene: pointer Scene that this sequence uses
-SceneSequence.scene_camera -> scene_camera: pointer Override the scenes active camera
-SceneSequence.strobe -> strobe: float Only display every nth frame
-SceneSequence.transform -> transform: pointer, (read-only)
-Scopes.accuracy -> accuracy: float Proportion of original image source pixel lines to sample
-Scopes.histogram -> histogram: pointer, (read-only) Histogram for viewing image statistics
-Scopes.vectorscope_alpha -> vectorscope_alpha: float Opacity of the points
-Scopes.waveform_alpha -> waveform_alpha: float Opacity of the points
-Scopes.waveform_mode -> waveform_mode: enum
-Screen.areas -> areas: collection, (read-only) Areas the screen is subdivided into
-Screen.scene -> scene: pointer Active scene to be edited in the screen
-ScrewModifier.angle -> angle: float Angle of revolution
-ScrewModifier.axis -> axis: enum Screw axis
-ScrewModifier.iterations -> iterations: int Number of times to apply the screw operation
-ScrewModifier.object -> object: pointer Object to define the screw axis
-ScrewModifier.render_steps -> render_steps: int Number of steps in the revolution
-ScrewModifier.screw_offset -> screw_offset: float Offset the revolution along its axis
-ScrewModifier.steps -> steps: int Number of steps in the revolution
-Sensor.frequency -> frequency: int Delay between repeated pulses(in logic tics, 0=no delay)
-Sensor.name -> name: string Sensor name
-Sensor.type -> type: enum
-Sequence.blend_mode -> blend_type: enum
-Sequence.blend_opacity -> blend_opacity: float
-Sequence.channel -> channel: int Y position of the sequence strip
-Sequence.effect_fader -> effect_fader: float
-Sequence.frame_final_end -> frame_final_end: int End frame displayed in the sequence editor after offsets are applied
-Sequence.frame_final_length -> frame_final_length: int The length of the contents of this strip before the handles are applied
-Sequence.frame_final_start -> frame_final_start: int Start frame displayed in the sequence editor after offsets are applied, setting this is equivalent to moving the handle, not the actual start frame
-Sequence.frame_length -> frame_length: int, (read-only) The length of the contents of this strip before the handles are applied
-Sequence.frame_offset_end -> frame_offset_end: int, (read-only)
-Sequence.frame_offset_start -> frame_offset_start: int, (read-only)
-Sequence.frame_start -> frame_start: int
-Sequence.frame_still_end -> frame_still_end: int, (read-only)
-Sequence.frame_still_start -> frame_still_start: int, (read-only)
-Sequence.name -> name: string
-Sequence.speed_fader -> speed_fader: float
-Sequence.type -> type: enum, (read-only)
-SequenceColorBalance.gain -> gain: float Color balance gain (highlights)
-SequenceColorBalance.gamma -> gamma: float Color balance gamma (midtones)
-SequenceColorBalance.lift -> lift: float Color balance lift (shadows)
-SequenceCrop.bottom -> bottom: int
-SequenceCrop.left -> left: int
-SequenceCrop.right -> right: int
-SequenceCrop.top -> top: int
-SequenceEditor.active_strip -> active_strip: pointer
-SequenceEditor.meta_stack -> meta_stack: collection, (read-only) Meta strip stack, last is currently edited meta strip
-SequenceEditor.overlay_frame -> overlay_frame: int Sequencers active strip
-SequenceEditor.sequences -> sequences: collection, (read-only)
-SequenceEditor.sequences_all -> sequences_all: collection, (read-only)
-SequenceElement.filename -> filename: string
-SequenceProxy.directory -> directory: string Location to store the proxy files
-SequenceProxy.filepath -> filepath: string Location of custom proxy file
-SequenceTransform.offset_x -> offset_x: int
-SequenceTransform.offset_y -> offset_y: int
-ShaderNode.type -> type: enum, (read-only)
-ShaderNodeExtendedMaterial.material -> material: pointer
-ShaderNodeGeometry.color_layer -> color_layer: string
-ShaderNodeGeometry.uv_layer -> uv_layer: string
-ShaderNodeMapping.location -> location: float Location offset for the input coordinate
-ShaderNodeMapping.maximum -> max: float Maximum value to clamp coordinate to
-ShaderNodeMapping.minimum -> min: float Minimum value to clamp coordinate to
-ShaderNodeMapping.rotation -> rotation: float Rotation offset for the input coordinate
-ShaderNodeMapping.scale -> scale: float Scale adjustment for the input coordinate
-ShaderNodeMaterial.material -> material: pointer
-ShaderNodeMath.operation -> operation: enum
-ShaderNodeMixRGB.blend_type -> blend_type: enum
-ShaderNodeRGBCurve.mapping -> mapping: pointer, (read-only)
-ShaderNodeTexture.node_output -> node_output: int For node-based textures, which output node to use
-ShaderNodeTexture.texture -> texture: pointer
-ShaderNodeValToRGB.color_ramp -> color_ramp: pointer, (read-only)
-ShaderNodeVectorCurve.mapping -> mapping: pointer, (read-only)
-ShaderNodeVectorMath.operation -> operation: enum
-ShapeActionActuator.action -> action: pointer
-ShapeActionActuator.blendin -> blendin: int Number of frames of motion blending
-ShapeActionActuator.frame_end -> frame_end: int
-ShapeActionActuator.frame_property -> frame_property: string Assign the action's current frame number to this property
-ShapeActionActuator.frame_start -> frame_start: int
-ShapeActionActuator.mode -> mode: enum Action playback type
-ShapeActionActuator.priority -> priority: int Execution priority - lower numbers will override actions with higher numbers. With 2 or more actions at once, the overriding channels must be lower in the stack
-ShapeActionActuator.property -> property: string Use this property to define the Action position
-ShapeKey.data -> data: collection, (read-only)
-ShapeKey.frame -> frame: float, (read-only) Frame for absolute keys
-ShapeKey.interpolation -> interpolation: enum Interpolation type
-ShapeKey.name -> name: string
-ShapeKey.relative_key -> relative_key: pointer Shape used as a relative key
-ShapeKey.slider_max -> slider_max: float Maximum for slider
-ShapeKey.slider_min -> slider_min: float Minimum for slider
-ShapeKey.value -> value: float Value of shape key at the current frame
-ShapeKey.vertex_group -> vertex_group: string Vertex weight group, to blend with basis shape
-ShapeKeyBezierPoint.co -> co: float
-ShapeKeyBezierPoint.handle_1_co -> handle_1_co: float
-ShapeKeyBezierPoint.handle_2_co -> handle_2_co: float
-ShapeKeyCurvePoint.co -> co: float
-ShapeKeyCurvePoint.tilt -> tilt: float
-ShapeKeyPoint.co -> co: float
-ShrinkwrapConstraint.distance -> distance: float Distance to Target
-ShrinkwrapConstraint.shrinkwrap_type -> shrinkwrap_type: enum Selects type of shrinkwrap algorithm for target position
-ShrinkwrapConstraint.target -> target: pointer Target Object
-ShrinkwrapModifier.auxiliary_target -> auxiliary_target: pointer Additional mesh target to shrink to
-ShrinkwrapModifier.mode -> mode: enum
-ShrinkwrapModifier.offset -> offset: float Distance to keep from the target
-ShrinkwrapModifier.subsurf_levels -> subsurf_levels: int Number of subdivisions that must be performed before extracting vertices' positions and normals
-ShrinkwrapModifier.target -> target: pointer Mesh target to shrink to
-ShrinkwrapModifier.vertex_group -> vertex_group: string Vertex group name
-SimpleDeformModifier.factor -> factor: float
-SimpleDeformModifier.limits -> limits: float Lower/Upper limits for deform
-SimpleDeformModifier.mode -> mode: enum
-SimpleDeformModifier.origin -> origin: pointer Origin of modifier space coordinates
-SimpleDeformModifier.vertex_group -> vertex_group: string Vertex group name
-SmokeDomainSettings.alpha -> alpha: float Higher value results in sinking smoke
-SmokeDomainSettings.amplify -> amplify: int Enhance the resolution of smoke by this factor using noise
-SmokeDomainSettings.beta -> beta: float Higher value results in faster rising smoke
-SmokeDomainSettings.coll_group -> coll_group: pointer Limit collisions to this group
-SmokeDomainSettings.dissolve_speed -> dissolve_speed: int Dissolve Speed
-SmokeDomainSettings.eff_group -> eff_group: pointer Limit effectors to this group
-SmokeDomainSettings.effector_weights -> effector_weights: pointer, (read-only)
-SmokeDomainSettings.fluid_group -> fluid_group: pointer Limit fluid objects to this group
-SmokeDomainSettings.maxres -> maxres: int Maximal resolution used in the fluid domain
-SmokeDomainSettings.noise_type -> noise_type: enum Noise method which is used for creating the high resolution
-SmokeDomainSettings.point_cache_high -> point_cache_high: pointer, (read-only)
-SmokeDomainSettings.point_cache_low -> point_cache_low: pointer, (read-only)
-SmokeDomainSettings.smoke_cache_comp -> smoke_cache_comp: enum Compression method to be used
-SmokeDomainSettings.smoke_cache_high_comp -> smoke_cache_high_comp: enum Compression method to be used
-SmokeDomainSettings.strength -> strength: float Strength of wavelet noise
-SmokeFlowSettings.density -> density: float
-SmokeFlowSettings.psys -> psys: pointer Particle systems emitted from the object
-SmokeFlowSettings.temperature -> temperature: float Temperature difference to ambient temperature
-SmokeModifier.coll_settings -> coll_settings: pointer, (read-only)
-SmokeModifier.domain_settings -> domain_settings: pointer, (read-only)
-SmokeModifier.flow_settings -> flow_settings: pointer, (read-only)
-SmokeModifier.smoke_type -> smoke_type: enum
-SmoothModifier.factor -> factor: float
-SmoothModifier.repeat -> repeat: int
-SmoothModifier.vertex_group -> vertex_group: string Vertex group name
-SoftBodyModifier.point_cache -> point_cache: pointer, (read-only)
-SoftBodyModifier.settings -> settings: pointer, (read-only)
-SoftBodySettings.aero -> aero: float Make edges 'sail'
-SoftBodySettings.aerodynamics_type -> aerodynamics_type: enum Method of calculating aerodynamic interaction
-SoftBodySettings.ball_damp -> ball_damp: float Blending to inelastic collision
-SoftBodySettings.ball_size -> ball_size: float Absolute ball size or factor if not manual adjusted
-SoftBodySettings.ball_stiff -> ball_stiff: float Ball inflating pressure
-SoftBodySettings.bending -> bend: float Bending Stiffness
-SoftBodySettings.choke -> choke: int 'Viscosity' inside collision target
-SoftBodySettings.collision_type -> collision_type: enum Choose Collision Type
-SoftBodySettings.damp -> damp: float Edge spring friction
-SoftBodySettings.effector_weights -> effector_weights: pointer, (read-only)
-SoftBodySettings.error_limit -> error_limit: float The Runge-Kutta ODE solver error limit, low value gives more precision, high values speed
-SoftBodySettings.friction -> friction: float General media friction for point movements
-SoftBodySettings.fuzzy -> fuzzy: int Fuzziness while on collision, high values make collsion handling faster but less stable
-SoftBodySettings.goal_default -> goal_default: float Default Goal (vertex target position) value, when no Vertex Group used
-SoftBodySettings.goal_friction -> goal_friction: float Goal (vertex target position) friction
-SoftBodySettings.goal_max -> goal_max: float Goal maximum, vertex weights are scaled to match this range
-SoftBodySettings.goal_min -> goal_min: float Goal minimum, vertex weights are scaled to match this range
-SoftBodySettings.goal_spring -> goal_spring: float Goal (vertex target position) spring stiffness
-SoftBodySettings.goal_vertex_group -> goal_vertex_group: string Control point weight values
-SoftBodySettings.gravity -> gravity: float Apply gravitation to point movement
-SoftBodySettings.lcom -> lcom: float Location of Center of mass
-SoftBodySettings.lrot -> lrot: float Estimated rotation matrix
-SoftBodySettings.lscale -> lscale: float Estimated scale matrix
-SoftBodySettings.mass -> mass: float General Mass value
-SoftBodySettings.mass_vertex_group -> mass_vertex_group: string Control point mass values
-SoftBodySettings.maxstep -> step_max: int Maximal # solver steps/frame
-SoftBodySettings.minstep -> step_min: int Minimal # solver steps/frame
-SoftBodySettings.plastic -> plastic: float Permanent deform
-SoftBodySettings.pull -> pull: float Edge spring stiffness when longer than rest length
-SoftBodySettings.push -> push: float Edge spring stiffness when shorter than rest length
-SoftBodySettings.shear -> shear: float Shear Stiffness
-SoftBodySettings.speed -> speed: float Tweak timing for physics to control frequency and speed
-SoftBodySettings.spring_length -> spring_length: float Alter spring length to shrink/blow up (unit %) 0 to disable
-SoftBodySettings.spring_vertex_group -> spring_vertex_group: string Control point spring strength values
-SolidifyModifier.edge_crease_inner -> edge_crease_inner: float Assign a crease to inner edges
-SolidifyModifier.edge_crease_outer -> edge_crease_outer: float Assign a crease to outer edges
-SolidifyModifier.edge_crease_rim -> edge_crease_rim: float Assign a crease to the edges making up the rim
-SolidifyModifier.offset -> offset: float
-SolidifyModifier.thickness -> thickness: float Thickness of the shell
-SolidifyModifier.vertex_group -> vertex_group: string Vertex group name
-Sound.filepath -> filepath: string Sound sample file used by this Sound datablock
-Sound.packed_file -> packed_file: pointer, (read-only)
-SoundActuator.cone_inner_angle_3d -> cone_inner_angle_3d: float The angle of the inner cone
-SoundActuator.cone_outer_angle_3d -> cone_outer_angle_3d: float The angle of the outer cone
-SoundActuator.cone_outer_gain_3d -> cone_outer_gain_3d: float The gain outside the outer cone. The gain in the outer cone will be interpolated between this value and the normal gain in the inner cone
-SoundActuator.max_distance_3d -> distance_3d_max: float The maximum distance at which you can hear the sound
-SoundActuator.maximum_gain_3d -> gain_3d_max: float The maximum gain of the sound, no matter how near it is
-SoundActuator.minimum_gain_3d -> gain_3d_min: float The minimum gain of the sound, no matter how far it is away
-SoundActuator.mode -> mode: enum
-SoundActuator.pitch -> pitch: float Sets the pitch of the sound
-SoundActuator.reference_distance_3d -> reference_distance_3d: float The distance where the sound has a gain of 1.0
-SoundActuator.rolloff_factor_3d -> rolloff_factor_3d: float The influence factor on volume depending on distance
-SoundActuator.sound -> sound: pointer
-SoundActuator.volume -> volume: float Sets the initial volume of the sound
-SoundSequence.animation_end_offset -> animation_end_offset: int Animation end offset (trim end)
-SoundSequence.animation_start_offset -> animation_start_offset: int Animation start offset (trim start)
-SoundSequence.attenuation -> attenuation: float Attenuation in dezibel
-SoundSequence.filepath -> filepath: string
-SoundSequence.sound -> sound: pointer, (read-only) Sound datablock used by this sequence
-SoundSequence.volume -> volume: float Playback volume of the sound
-Space.type -> type: enum, (read-only) Space data type
-SpaceConsole.console_type -> console_type: enum Console type
-SpaceConsole.font_size -> font_size: int Font size to use for displaying the text
-SpaceConsole.history -> history: collection, (read-only) Command history
-SpaceConsole.language -> language: string Command line prompt language
-SpaceConsole.prompt -> prompt: string Command line prompt
-SpaceConsole.scrollback -> scrollback: collection, (read-only) Command output
-SpaceConsole.selection_end -> selection_end: int
-SpaceConsole.selection_start -> selection_start: int
-SpaceDopeSheetEditor.action -> action: pointer Action displayed and edited in this space
-SpaceDopeSheetEditor.autosnap -> autosnap: enum Automatic time snapping settings for transformations
-SpaceDopeSheetEditor.dopesheet -> dopesheet: pointer, (read-only) Settings for filtering animation data
-SpaceDopeSheetEditor.mode -> mode: enum Editing context being displayed
-SpaceFileBrowser.params -> params: pointer, (read-only) Parameters and Settings for the Filebrowser
-SpaceGraphEditor.autosnap -> autosnap: enum Automatic time snapping settings for transformations
-SpaceGraphEditor.cursor_value -> cursor_value: float Graph Editor 2D-Value cursor - Y-Value component
-SpaceGraphEditor.dopesheet -> dopesheet: pointer, (read-only) Settings for filtering animation data
-SpaceGraphEditor.mode -> mode: enum Editing context being displayed
-SpaceGraphEditor.pivot_point -> pivot_point: enum Pivot center for rotation/scaling
-SpaceImageEditor.curves -> curves: pointer, (read-only) Color curve mapping to use for displaying the image
-SpaceImageEditor.draw_channels -> draw_channels: enum Channels of the image to draw
-SpaceImageEditor.grease_pencil -> grease_pencil: pointer Grease pencil data for this space
-SpaceImageEditor.image -> image: pointer Image displayed and edited in this space
-SpaceImageEditor.image_user -> image_user: pointer, (read-only) Parameters defining which layer, pass and frame of the image is displayed
-SpaceImageEditor.sample_histogram -> sample_histogram: pointer, (read-only) Sampled colors along line
-SpaceImageEditor.scopes -> scopes: pointer, (read-only) Scopes to visualize image statistics.
-SpaceImageEditor.uv_editor -> uv_editor: pointer, (read-only) UV editor settings
-SpaceNLA.autosnap -> autosnap: enum Automatic time snapping settings for transformations
-SpaceNLA.dopesheet -> dopesheet: pointer, (read-only) Settings for filtering animation data
-SpaceNodeEditor.id -> id: pointer, (read-only) Datablock whose nodes are being edited
-SpaceNodeEditor.id_from -> id_from: pointer, (read-only) Datablock from which the edited datablock is linked
-SpaceNodeEditor.nodetree -> nodetree: pointer, (read-only) Node tree being displayed and edited
-SpaceNodeEditor.texture_type -> texture_type: enum Type of data to take texture from
-SpaceNodeEditor.tree_type -> tree_type: enum Node tree type to display and edit
-SpaceOutliner.display_filter -> display_filter: string Live search filtering string
-SpaceOutliner.display_mode -> display_mode: enum Type of information to display
-SpaceProperties.align -> align: enum Arrangement of the panels
-SpaceProperties.context -> context: enum Type of active data to display and edit
-SpaceProperties.pin_id -> pin_id: pointer
-SpaceSequenceEditor.display_channel -> display_channel: int The channel number shown in the image preview. 0 is the result of all strips combined
-SpaceSequenceEditor.display_mode -> display_mode: enum The view mode to use for displaying sequencer output
-SpaceSequenceEditor.draw_overexposed -> draw_overexposed: int Show overexposed areas with zebra stripes
-SpaceSequenceEditor.grease_pencil -> grease_pencil: pointer, (read-only) Grease pencil data for this space
-SpaceSequenceEditor.offset_x -> offset_x: float Offsets image horizontally from the view center
-SpaceSequenceEditor.offset_y -> offset_y: float Offsets image horizontally from the view center
-SpaceSequenceEditor.proxy_render_size -> proxy_render_size: enum Draw preview using full resolution or different proxy resolutions
-SpaceSequenceEditor.view_type -> view_type: enum The type of the Sequencer view (sequencer, preview or both)
-SpaceSequenceEditor.zoom -> zoom: float Display zoom level
-SpaceTextEditor.find_text -> find_text: string Text to search for with the find tool
-SpaceTextEditor.font_size -> font_size: int Font size to use for displaying the text
-SpaceTextEditor.replace_text -> replace_text: string Text to replace selected text with using the replace tool
-SpaceTextEditor.tab_width -> tab_width: int Number of spaces to display tabs with
-SpaceTextEditor.text -> text: pointer Text displayed and edited in this space
-SpaceUVEditor.cursor_location -> cursor_location: float 2D cursor location for this view
-SpaceUVEditor.draw_stretch_type -> draw_stretch_type: enum Type of stretch to draw
-SpaceUVEditor.edge_draw_type -> edge_draw_type: enum Draw type for drawing UV edges
-SpaceUVEditor.pivot -> pivot: enum Rotation/Scaling Pivot
-SpaceUVEditor.sticky_selection_mode -> sticky_selection_mode: enum Automatically select also UVs sharing the same vertex as the ones being selected
-SpaceUserPreferences.filter -> filter: string Search term for filtering in the UI
-SpaceView3D.background_images -> background_images: collection, (read-only) List of background images
-SpaceView3D.camera -> camera: pointer Active camera used in this view (when unlocked from the scene's active camera)
-SpaceView3D.clip_end -> clip_end: float 3D View far clipping distance
-SpaceView3D.clip_start -> clip_start: float 3D View near clipping distance
-SpaceView3D.current_orientation -> current_orientation: pointer, (read-only) Current Transformation orientation
-SpaceView3D.cursor_location -> cursor_location: float 3D cursor location for this view (dependent on local view setting)
-SpaceView3D.grid_lines -> grid_lines: int The number of grid lines to display in perspective view
-SpaceView3D.grid_spacing -> grid_spacing: float The distance between 3D View grid lines
-SpaceView3D.grid_subdivisions -> grid_subdivisions: int The number of subdivisions between grid lines
-SpaceView3D.lens -> lens: float Lens angle (mm) in perspective view
-SpaceView3D.local_view -> local_view: pointer, (read-only) Display an isolated sub-set of objects, apart from the scene visibility
-SpaceView3D.lock_bone -> lock_bone: string 3D View center is locked to this bone's position
-SpaceView3D.lock_object -> lock_object: pointer 3D View center is locked to this object's position
-SpaceView3D.pivot_point -> pivot_point: enum Pivot center for rotation/scaling
-SpaceView3D.region_3d -> region_3d: pointer, (read-only) 3D region in this space, in case of quad view the camera region
-SpaceView3D.region_quadview -> region_quadview: pointer, (read-only) 3D region that defines the quad view settings
-SpaceView3D.transform_orientation -> transform_orientation: enum Transformation orientation
-SpaceView3D.viewport_shading -> viewport_shade: enum Method to display/shade objects in the 3D View
-SpeedControlSequence.global_speed -> global_speed: float
-Spline.bezier_points -> bezier_points: collection, (read-only) Collection of points for bezier curves only
-Spline.character_index -> character_index: int, (read-only) Location of this character in the text data (only for text curves)
-Spline.material_index -> material_index: int
-Spline.order_u -> order_u: int Nurbs order in the U direction (For splines and surfaces), Higher values let points influence a greater area
-Spline.order_v -> order_v: int Nurbs order in the V direction (For surfaces only), Higher values let points influence a greater area
-Spline.point_count_u -> point_count_u: int, (read-only) Total number points for the curve or surface in the U direction
-Spline.point_count_v -> point_count_v: int, (read-only) Total number points for the surface on the V direction
-Spline.points -> points: collection, (read-only) Collection of points that make up this poly or nurbs spline
-Spline.radius_interpolation -> radius_interpolation: enum The type of radius interpolation for Bezier curves
-Spline.resolution_u -> resolution_u: int Curve or Surface subdivisions per segment
-Spline.resolution_v -> resolution_v: int Surface subdivisions per segment
-Spline.tilt_interpolation -> tilt_interpolation: enum The type of tilt interpolation for 3D, Bezier curves
-Spline.type -> type: enum The interpolation type for this curve element
-SplineIKConstraint.chain_length -> chain_length: int How many bones are included in the chain
-SplineIKConstraint.joint_bindings -> joint_bindings: float (EXPERIENCED USERS ONLY) The relative positions of the joints along the chain as percentages
-SplineIKConstraint.target -> target: pointer Curve that controls this relationship
-SplineIKConstraint.xz_scaling_mode -> xz_scale_mode: enum Method used for determining the scaling of the X and Z axes of the bones
-SplinePoint.co -> co: float Point coordinates
-SplinePoint.radius -> radius: float, (read-only) Radius for bevelling
-SplinePoint.tilt -> tilt: float Tilt in 3D View
-SplinePoint.weight -> weight: float Nurbs weight
-SplinePoint.weight_softbody -> weight_softbody: float Softbody goal weight
-SpotLamp.compression_threshold -> compression_threshold: float Deep shadow map compression threshold
-SpotLamp.falloff_curve -> falloff_curve: pointer, (read-only) Custom Lamp Falloff Curve
-SpotLamp.falloff_type -> falloff_type: enum Intensity Decay with distance
-SpotLamp.halo_intensity -> halo_intensity: float Brightness of the spotlight's halo cone (Buffer Shadows)
-SpotLamp.halo_step -> halo_step: int Volumetric halo sampling frequency
-SpotLamp.linear_attenuation -> linear_attenuation: float Linear distance attenuation
-SpotLamp.quadratic_attenuation -> quadratic_attenuation: float Quadratic distance attenuation
-SpotLamp.shadow_adaptive_threshold -> shadow_adaptive_threshold: float Threshold for Adaptive Sampling (Raytraced shadows)
-SpotLamp.shadow_buffer_bias -> shadow_buffer_bias: float Shadow buffer sampling bias
-SpotLamp.shadow_buffer_clip_end -> shadow_buffer_clip_end: float Shadow map clip end beyond which objects will not generate shadows
-SpotLamp.shadow_buffer_clip_start -> shadow_buffer_clip_start: float Shadow map clip start: objects closer will not generate shadows
-SpotLamp.shadow_buffer_samples -> shadow_buffer_samples: int Number of shadow buffer samples
-SpotLamp.shadow_buffer_size -> shadow_buffer_size: int Resolution of the shadow buffer, higher values give crisper shadows but use more memory
-SpotLamp.shadow_buffer_soft -> shadow_buffer_soft: float Size of shadow buffer sampling area
-SpotLamp.shadow_buffer_type -> shadow_buffer_type: enum Type of shadow buffer
-SpotLamp.shadow_color -> shadow_color: float Color of shadows cast by the lamp
-SpotLamp.shadow_filter_type -> shadow_filter_type: enum Type of shadow filter (Buffer Shadows)
-SpotLamp.shadow_method -> shadow_method: enum Method to compute lamp shadow with
-SpotLamp.shadow_ray_samples -> shadow_ray_samples: int Amount of samples taken extra (samples x samples)
-SpotLamp.shadow_ray_sampling_method -> shadow_ray_sample_method: enum Method for generating shadow samples: Adaptive QMC is fastest, Constant QMC is less noisy but slower
-SpotLamp.shadow_sample_buffers -> shadow_sample_buffers: enum Number of shadow buffers to render for better AA, this increases memory usage
-SpotLamp.shadow_soft_size -> shadow_soft_size: float Light size for ray shadow sampling (Raytraced shadows)
-SpotLamp.spot_blend -> spot_blend: float The softness of the spotlight edge
-SpotLamp.spot_size -> spot_size: float Angle of the spotlight beam in degrees
-StateActuator.operation -> operation: enum Select the bit operation on object state mask
-StretchToConstraint.bulge -> bulge: float Factor between volume variation and stretching
-StretchToConstraint.head_tail -> head_tail: float Target along length of bone: Head=0, Tail=1
-StretchToConstraint.keep_axis -> keep_axis: enum Axis to maintain during stretch
-StretchToConstraint.original_length -> original_length: float Length at rest position
-StretchToConstraint.subtarget -> subtarget: string
-StretchToConstraint.target -> target: pointer Target Object
-StretchToConstraint.volume -> volume: enum Maintain the object's volume as it stretches
-StringProperty.default -> default: string, (read-only) string default value
-StringProperty.max_length -> length_max: int, (read-only) Maximum length of the string, 0 means unlimited
-Struct.base -> base: pointer, (read-only) Struct definition this is derived from
-Struct.description -> description: string, (read-only) Description of the Struct's purpose
-Struct.functions -> functions: collection, (read-only)
-Struct.identifier -> identifier: string, (read-only) Unique name used in the code and scripting
-Struct.name -> name: string, (read-only) Human readable name
-Struct.name_property -> name_property: pointer, (read-only) Property that gives the name of the struct
-Struct.nested -> nested: pointer, (read-only) Struct in which this struct is always nested, and to which it logically belongs
-Struct.properties -> properties: collection, (read-only) Properties in the struct
-StucciTexture.noise_basis -> noise_basis: enum Sets the noise basis used for turbulence
-StucciTexture.noise_size -> noise_size: float Sets scaling for noise input
-StucciTexture.noise_type -> noise_type: enum
-StucciTexture.stype -> stype: enum
-StucciTexture.turbulence -> turbulence: float Sets the turbulence of the bandnoise and ringnoise types
-SubsurfModifier.levels -> levels: int Number of subdivisions to perform
-SubsurfModifier.render_levels -> render_levels: int Number of subdivisions to perform when rendering
-SubsurfModifier.subdivision_type -> subdivision_type: enum Selects type of subdivision algorithm
-SunLamp.shadow_adaptive_threshold -> shadow_adaptive_threshold: float Threshold for Adaptive Sampling (Raytraced shadows)
-SunLamp.shadow_color -> shadow_color: float Color of shadows cast by the lamp
-SunLamp.shadow_method -> shadow_method: enum Method to compute lamp shadow with
-SunLamp.shadow_ray_samples -> shadow_ray_samples: int Amount of samples taken extra (samples x samples)
-SunLamp.shadow_ray_sampling_method -> shadow_ray_sampling_method: enum Method for generating shadow samples: Adaptive QMC is fastest, Constant QMC is less noisy but slower
-SunLamp.shadow_soft_size -> shadow_soft_size: float Light size for ray shadow sampling (Raytraced shadows)
-SunLamp.sky -> sky: pointer, (read-only) Sky related settings for sun lamps
-TexMapping.location -> location: float
-TexMapping.maximum -> max: float Maximum value for clipping
-TexMapping.minimum -> min: float Minimum value for clipping
-TexMapping.rotation -> rotation: float
-TexMapping.scale -> scale: float
-Text.current_character -> current_character: int, (read-only) Index of current character in current line, and also start index of character in selection if one exists
-Text.current_line -> current_line: pointer, (read-only) Current line, and start line of selection if one exists
-Text.filepath -> filepath: string Filename of the text file
-Text.lines -> lines: collection, (read-only) Lines of text
-Text.markers -> markers: collection, (read-only) Text markers highlighting part of the text
-Text.selection_end_character -> selection_end_character: int, (read-only) Index of character after end of selection in the selection end line
-Text.selection_end_line -> selection_end_line: pointer, (read-only) End line of selection
-TextBox.height -> height: float
-TextBox.width -> width: float
-TextBox.x -> x: float
-TextBox.y -> y: float
-TextCurve.active_textbox -> active_textbox: int
-TextCurve.body -> body: string contents of this text object
-TextCurve.edit_format -> edit_format: pointer, (read-only) Editing settings character formatting
-TextCurve.family -> family: string Use Blender Objects as font characters. Give font objects a common name followed by the character it represents, eg. familya, familyb etc, and turn on Verts Duplication
-TextCurve.font -> font: pointer
-TextCurve.line_dist -> line_distance: float
-TextCurve.offset_x -> offset_x: float Horizontal offset from the object origin
-TextCurve.offset_y -> offset_y: float Vertical offset from the object origin
-TextCurve.shear -> shear: float Italic angle of the characters
-TextCurve.spacemode -> spacemode: enum Text align from the object center
-TextCurve.spacing -> spacing: float
-TextCurve.text_on_curve -> text_on_curve: pointer Curve deforming text object
-TextCurve.text_size -> text_size: float
-TextCurve.textboxes -> textboxes: collection, (read-only)
-TextCurve.ul_height -> ul_height: float
-TextCurve.ul_position -> ul_position: float Vertical position of underline
-TextCurve.word_spacing -> word_spacing: float
-TextLine.line -> line: string Text in the line
-TextMarker.color -> color: float Color to display the marker with
-TextMarker.end -> end: int, (read-only) Start position of the marker in the line
-TextMarker.group -> group: int, (read-only)
-TextMarker.line -> line: int, (read-only) Line in which the marker is located
-TextMarker.start -> start: int, (read-only) Start position of the marker in the line
-Texture.animation_data -> animation_data: pointer, (read-only) Animation data for this datablock
-Texture.brightness -> intensity: float
-Texture.color_ramp -> color_ramp: pointer, (read-only)
-Texture.contrast -> contrast: float
-Texture.factor_blue -> factor_blue: float
-Texture.factor_green -> factor_green: float
-Texture.factor_red -> factor_red: float
-Texture.node_tree -> node_tree: pointer, (read-only) Node tree for node-based textures
-Texture.saturation -> saturation: float
-Texture.type -> type: enum
-TextureNode.type -> type: enum, (read-only)
-TextureNodeBricks.offset -> offset: float
-TextureNodeBricks.offset_frequency -> offset_frequency: int Offset every N rows
-TextureNodeBricks.squash -> squash: float
-TextureNodeBricks.squash_frequency -> squash_frequency: int Squash every N rows
-TextureNodeCurveRGB.mapping -> mapping: pointer, (read-only)
-TextureNodeCurveTime.curve -> curve: pointer, (read-only)
-TextureNodeCurveTime.end -> end: int
-TextureNodeCurveTime.start -> start: int
-TextureNodeImage.image -> image: pointer
-TextureNodeMath.operation -> operation: enum
-TextureNodeMixRGB.blend_type -> blend_type: enum
-TextureNodeOutput.output_name -> output_name: string
-TextureNodeTexture.node_output -> node_output: int For node-based textures, which output node to use
-TextureNodeTexture.texture -> texture: pointer
-TextureNodeValToRGB.color_ramp -> color_ramp: pointer, (read-only)
-TextureSlot.blend_type -> blend_type: enum
-TextureSlot.color -> color: float The default color for textures that don't return RGB
-TextureSlot.default_value -> default_value: float Value to use for Ref, Spec, Amb, Emit, Alpha, RayMir, TransLu and Hard
-TextureSlot.name -> name: string, (read-only) Texture slot name
-TextureSlot.offset -> offset: float Fine tunes texture mapping X, Y and Z locations
-TextureSlot.output_node -> output_node: enum Which output node to use, for node-based textures
-TextureSlot.size -> size: float Sets scaling for the texture's X, Y and Z sizes
-TextureSlot.texture -> texture: pointer Texture datablock used by this texture slot
-Theme.bone_color_sets -> bone_color_sets: collection, (read-only)
-Theme.console -> console: pointer, (read-only)
-Theme.dopesheet_editor -> dopesheet_editor: pointer, (read-only)
-Theme.file_browser -> file_browser: pointer, (read-only)
-Theme.graph_editor -> graph_editor: pointer, (read-only)
-Theme.image_editor -> image_editor: pointer, (read-only)
-Theme.info -> info: pointer, (read-only)
-Theme.logic_editor -> logic_editor: pointer, (read-only)
-Theme.name -> name: string Name of the theme
-Theme.nla_editor -> nla_editor: pointer, (read-only)
-Theme.node_editor -> node_editor: pointer, (read-only)
-Theme.outliner -> outliner: pointer, (read-only)
-Theme.properties -> properties: pointer, (read-only)
-Theme.sequence_editor -> sequence_editor: pointer, (read-only)
-Theme.text_editor -> text_editor: pointer, (read-only)
-Theme.theme_area -> theme_area: enum
-Theme.timeline -> timeline: pointer, (read-only)
-Theme.user_interface -> user_interface: pointer, (read-only)
-Theme.user_preferences -> user_preferences: pointer, (read-only)
-Theme.view_3d -> view_3d: pointer, (read-only)
-ThemeAudioWindow.back -> back: float
-ThemeAudioWindow.button -> button: float
-ThemeAudioWindow.button_text -> button_text: float
-ThemeAudioWindow.button_text_hi -> button_text_hi: float
-ThemeAudioWindow.button_title -> button_title: float
-ThemeAudioWindow.frame_current -> frame_current: float
-ThemeAudioWindow.grid -> grid: float
-ThemeAudioWindow.header -> header: float
-ThemeAudioWindow.header_text -> header_text: float
-ThemeAudioWindow.header_text_hi -> header_text_hi: float
-ThemeAudioWindow.text -> text: float
-ThemeAudioWindow.text_hi -> text_hi: float
-ThemeAudioWindow.title -> title: float
-ThemeAudioWindow.window_sliders -> window_sliders: float
-ThemeBoneColorSet.active -> active: float Color used for active bones
-ThemeBoneColorSet.normal -> normal: float Color used for the surface of bones
-ThemeBoneColorSet.selected -> select: float Color used for selected bones
-ThemeConsole.back -> back: float
-ThemeConsole.button -> button: float
-ThemeConsole.button_text -> button_text: float
-ThemeConsole.button_text_hi -> button_text_hi: float
-ThemeConsole.button_title -> button_title: float
-ThemeConsole.cursor -> cursor: float
-ThemeConsole.header -> header: float
-ThemeConsole.header_text -> header_text: float
-ThemeConsole.header_text_hi -> header_text_hi: float
-ThemeConsole.line_error -> line_error: float
-ThemeConsole.line_info -> line_info: float
-ThemeConsole.line_input -> line_input: float
-ThemeConsole.line_output -> line_output: float
-ThemeConsole.text -> text: float
-ThemeConsole.text_hi -> text_hi: float
-ThemeConsole.title -> title: float
-ThemeDopeSheet.active_channels_group -> active_channels_group: float
-ThemeDopeSheet.back -> back: float
-ThemeDopeSheet.button -> button: float
-ThemeDopeSheet.button_text -> button_text: float
-ThemeDopeSheet.button_text_hi -> button_text_hi: float
-ThemeDopeSheet.button_title -> button_title: float
-ThemeDopeSheet.channel_group -> channel_group: float
-ThemeDopeSheet.channels -> channels: float
-ThemeDopeSheet.channels_selected -> channels_selected: float
-ThemeDopeSheet.dopesheet_channel -> dopesheet_channel: float
-ThemeDopeSheet.dopesheet_subchannel -> dopesheet_subchannel: float
-ThemeDopeSheet.frame_current -> frame_current: float
-ThemeDopeSheet.grid -> grid: float
-ThemeDopeSheet.header -> header: float
-ThemeDopeSheet.header_text -> header_text: float
-ThemeDopeSheet.header_text_hi -> header_text_hi: float
-ThemeDopeSheet.list -> list: float
-ThemeDopeSheet.list_text -> list_text: float
-ThemeDopeSheet.list_text_hi -> list_text_hi: float
-ThemeDopeSheet.list_title -> list_title: float
-ThemeDopeSheet.long_key -> long_key: float
-ThemeDopeSheet.long_key_selected -> long_key_selected: float
-ThemeDopeSheet.text -> text: float
-ThemeDopeSheet.text_hi -> text_hi: float
-ThemeDopeSheet.title -> title: float
-ThemeDopeSheet.value_sliders -> value_sliders: float
-ThemeDopeSheet.view_sliders -> view_sliders: float
-ThemeFileBrowser.active_file -> active_file: float
-ThemeFileBrowser.active_file_text -> active_file_text: float
-ThemeFileBrowser.back -> back: float
-ThemeFileBrowser.button -> button: float
-ThemeFileBrowser.button_text -> button_text: float
-ThemeFileBrowser.button_text_hi -> button_text_hi: float
-ThemeFileBrowser.button_title -> button_title: float
-ThemeFileBrowser.header -> header: float
-ThemeFileBrowser.header_text -> header_text: float
-ThemeFileBrowser.header_text_hi -> header_text_hi: float
-ThemeFileBrowser.list -> list: float
-ThemeFileBrowser.list_text -> list_text: float
-ThemeFileBrowser.list_text_hi -> list_text_hi: float
-ThemeFileBrowser.list_title -> list_title: float
-ThemeFileBrowser.scroll_handle -> scroll_handle: float
-ThemeFileBrowser.scrollbar -> scrollbar: float
-ThemeFileBrowser.selected_file -> selected_file: float
-ThemeFileBrowser.text -> text: float
-ThemeFileBrowser.text_hi -> text_hi: float
-ThemeFileBrowser.tiles -> tiles: float
-ThemeFileBrowser.title -> title: float
-ThemeFontStyle.font_kerning_style -> font_kerning_style: enum Which style to use for font kerning
-ThemeFontStyle.points -> points: int
-ThemeFontStyle.shadow -> shadow: int Shadow size in pixels (0, 3 and 5 supported)
-ThemeFontStyle.shadowalpha -> shadowalpha: float
-ThemeFontStyle.shadowcolor -> shadowcolor: float Shadow color in grey value
-ThemeFontStyle.shadx -> shadow_offset_x: int Shadow offset in pixels
-ThemeFontStyle.shady -> shadow_offset_y: int Shadow offset in pixels
-ThemeGraphEditor.active_channels_group -> active_channels_group: float
-ThemeGraphEditor.back -> back: float
-ThemeGraphEditor.button -> button: float
-ThemeGraphEditor.button_text -> button_text: float
-ThemeGraphEditor.button_text_hi -> button_text_hi: float
-ThemeGraphEditor.button_title -> button_title: float
-ThemeGraphEditor.channel_group -> channel_group: float
-ThemeGraphEditor.channels_region -> channels_region: float
-ThemeGraphEditor.dopesheet_channel -> dopesheet_channel: float
-ThemeGraphEditor.dopesheet_subchannel -> dopesheet_subchannel: float
-ThemeGraphEditor.frame_current -> frame_current: float
-ThemeGraphEditor.grid -> grid: float
-ThemeGraphEditor.handle_align -> handle_align: float
-ThemeGraphEditor.handle_auto -> handle_auto: float
-ThemeGraphEditor.handle_free -> handle_free: float
-ThemeGraphEditor.handle_sel_align -> handle_sel_align: float
-ThemeGraphEditor.handle_sel_auto -> handle_sel_auto: float
-ThemeGraphEditor.handle_sel_free -> handle_sel_free: float
-ThemeGraphEditor.handle_sel_vect -> handle_sel_vect: float
-ThemeGraphEditor.handle_vect -> handle_vect: float
-ThemeGraphEditor.handle_vertex -> handle_vertex: float
-ThemeGraphEditor.handle_vertex_select -> handle_vertex_select: float
-ThemeGraphEditor.handle_vertex_size -> handle_vertex_size: int
-ThemeGraphEditor.header -> header: float
-ThemeGraphEditor.header_text -> header_text: float
-ThemeGraphEditor.header_text_hi -> header_text_hi: float
-ThemeGraphEditor.lastsel_point -> lastsel_point: float
-ThemeGraphEditor.list -> list: float
-ThemeGraphEditor.list_text -> list_text: float
-ThemeGraphEditor.list_text_hi -> list_text_hi: float
-ThemeGraphEditor.list_title -> list_title: float
-ThemeGraphEditor.panel -> panel: float
-ThemeGraphEditor.text -> text: float
-ThemeGraphEditor.text_hi -> text_hi: float
-ThemeGraphEditor.title -> title: float
-ThemeGraphEditor.vertex -> vertex: float
-ThemeGraphEditor.vertex_select -> vertex_select: float
-ThemeGraphEditor.vertex_size -> vertex_size: int
-ThemeGraphEditor.window_sliders -> window_sliders: float
-ThemeImageEditor.back -> back: float
-ThemeImageEditor.button -> button: float
-ThemeImageEditor.button_text -> button_text: float
-ThemeImageEditor.button_text_hi -> button_text_hi: float
-ThemeImageEditor.button_title -> button_title: float
-ThemeImageEditor.editmesh_active -> editmesh_active: float
-ThemeImageEditor.face -> face: float
-ThemeImageEditor.face_dot -> face_dot: float
-ThemeImageEditor.face_select -> face_select: float
-ThemeImageEditor.facedot_size -> facedot_size: int
-ThemeImageEditor.header -> header: float
-ThemeImageEditor.header_text -> header_text: float
-ThemeImageEditor.header_text_hi -> header_text_hi: float
-ThemeImageEditor.scope_back -> scope_back: float
-ThemeImageEditor.text -> text: float
-ThemeImageEditor.text_hi -> text_hi: float
-ThemeImageEditor.title -> title: float
-ThemeImageEditor.vertex -> vertex: float
-ThemeImageEditor.vertex_select -> vertex_select: float
-ThemeImageEditor.vertex_size -> vertex_size: int
-ThemeInfo.back -> back: float
-ThemeInfo.button -> button: float
-ThemeInfo.button_text -> button_text: float
-ThemeInfo.button_text_hi -> button_text_hi: float
-ThemeInfo.button_title -> button_title: float
-ThemeInfo.header -> header: float
-ThemeInfo.header_text -> header_text: float
-ThemeInfo.header_text_hi -> header_text_hi: float
-ThemeInfo.text -> text: float
-ThemeInfo.text_hi -> text_hi: float
-ThemeInfo.title -> title: float
-ThemeLogicEditor.back -> back: float
-ThemeLogicEditor.button -> button: float
-ThemeLogicEditor.button_text -> button_text: float
-ThemeLogicEditor.button_text_hi -> button_text_hi: float
-ThemeLogicEditor.button_title -> button_title: float
-ThemeLogicEditor.header -> header: float
-ThemeLogicEditor.header_text -> header_text: float
-ThemeLogicEditor.header_text_hi -> header_text_hi: float
-ThemeLogicEditor.panel -> panel: float
-ThemeLogicEditor.text -> text: float
-ThemeLogicEditor.text_hi -> text_hi: float
-ThemeLogicEditor.title -> title: float
-ThemeNLAEditor.back -> back: float
-ThemeNLAEditor.bars -> bars: float
-ThemeNLAEditor.bars_selected -> bars_selected: float
-ThemeNLAEditor.button -> button: float
-ThemeNLAEditor.button_text -> button_text: float
-ThemeNLAEditor.button_text_hi -> button_text_hi: float
-ThemeNLAEditor.button_title -> button_title: float
-ThemeNLAEditor.frame_current -> frame_current: float
-ThemeNLAEditor.grid -> grid: float
-ThemeNLAEditor.header -> header: float
-ThemeNLAEditor.header_text -> header_text: float
-ThemeNLAEditor.header_text_hi -> header_text_hi: float
-ThemeNLAEditor.list -> list: float
-ThemeNLAEditor.list_text -> list_text: float
-ThemeNLAEditor.list_text_hi -> list_text_hi: float
-ThemeNLAEditor.list_title -> list_title: float
-ThemeNLAEditor.strips -> strips: float
-ThemeNLAEditor.strips_selected -> strips_selected: float
-ThemeNLAEditor.text -> text: float
-ThemeNLAEditor.text_hi -> text_hi: float
-ThemeNLAEditor.title -> title: float
-ThemeNLAEditor.view_sliders -> view_sliders: float
-ThemeNodeEditor.back -> back: float
-ThemeNodeEditor.button -> button: float
-ThemeNodeEditor.button_text -> button_text: float
-ThemeNodeEditor.button_text_hi -> button_text_hi: float
-ThemeNodeEditor.button_title -> button_title: float
-ThemeNodeEditor.converter_node -> converter_node: float
-ThemeNodeEditor.group_node -> group_node: float
-ThemeNodeEditor.header -> header: float
-ThemeNodeEditor.header_text -> header_text: float
-ThemeNodeEditor.header_text_hi -> header_text_hi: float
-ThemeNodeEditor.in_out_node -> in_out_node: float
-ThemeNodeEditor.list -> list: float
-ThemeNodeEditor.list_text -> list_text: float
-ThemeNodeEditor.list_text_hi -> list_text_hi: float
-ThemeNodeEditor.list_title -> list_title: float
-ThemeNodeEditor.node_backdrop -> node_backdrop: float
-ThemeNodeEditor.operator_node -> operator_node: float
-ThemeNodeEditor.selected_text -> selected_text: float
-ThemeNodeEditor.text -> text: float
-ThemeNodeEditor.text_hi -> text_hi: float
-ThemeNodeEditor.title -> title: float
-ThemeNodeEditor.wire_select -> wire_select: float
-ThemeNodeEditor.wires -> wires: float
-ThemeOutliner.back -> back: float
-ThemeOutliner.button -> button: float
-ThemeOutliner.button_text -> button_text: float
-ThemeOutliner.button_text_hi -> button_text_hi: float
-ThemeOutliner.button_title -> button_title: float
-ThemeOutliner.header -> header: float
-ThemeOutliner.header_text -> header_text: float
-ThemeOutliner.header_text_hi -> header_text_hi: float
-ThemeOutliner.text -> text: float
-ThemeOutliner.text_hi -> text_hi: float
-ThemeOutliner.title -> title: float
-ThemeProperties.back -> back: float
-ThemeProperties.button -> button: float
-ThemeProperties.button_text -> button_text: float
-ThemeProperties.button_text_hi -> button_text_hi: float
-ThemeProperties.button_title -> button_title: float
-ThemeProperties.header -> header: float
-ThemeProperties.header_text -> header_text: float
-ThemeProperties.header_text_hi -> header_text_hi: float
-ThemeProperties.panel -> panel: float
-ThemeProperties.text -> text: float
-ThemeProperties.text_hi -> text_hi: float
-ThemeProperties.title -> title: float
-ThemeSequenceEditor.audio_strip -> audio_strip: float
-ThemeSequenceEditor.back -> back: float
-ThemeSequenceEditor.button -> button: float
-ThemeSequenceEditor.button_text -> button_text: float
-ThemeSequenceEditor.button_text_hi -> button_text_hi: float
-ThemeSequenceEditor.button_title -> button_title: float
-ThemeSequenceEditor.draw_action -> draw_action: float
-ThemeSequenceEditor.effect_strip -> effect_strip: float
-ThemeSequenceEditor.frame_current -> frame_current: float
-ThemeSequenceEditor.grid -> grid: float
-ThemeSequenceEditor.header -> header: float
-ThemeSequenceEditor.header_text -> header_text: float
-ThemeSequenceEditor.header_text_hi -> header_text_hi: float
-ThemeSequenceEditor.image_strip -> image_strip: float
-ThemeSequenceEditor.keyframe -> keyframe: float
-ThemeSequenceEditor.meta_strip -> meta_strip: float
-ThemeSequenceEditor.movie_strip -> movie_strip: float
-ThemeSequenceEditor.plugin_strip -> plugin_strip: float
-ThemeSequenceEditor.scene_strip -> scene_strip: float
-ThemeSequenceEditor.text -> text: float
-ThemeSequenceEditor.text_hi -> text_hi: float
-ThemeSequenceEditor.title -> title: float
-ThemeSequenceEditor.transition_strip -> transition_strip: float
-ThemeSequenceEditor.window_sliders -> window_sliders: float
-ThemeStyle.grouplabel -> grouplabel: pointer, (read-only)
-ThemeStyle.paneltitle -> paneltitle: pointer, (read-only)
-ThemeStyle.panelzoom -> panelzoom: float Default zoom level for panel areas
-ThemeStyle.widget -> widget: pointer, (read-only)
-ThemeStyle.widgetlabel -> widgetlabel: pointer, (read-only)
-ThemeTextEditor.back -> back: float
-ThemeTextEditor.button -> button: float
-ThemeTextEditor.button_text -> button_text: float
-ThemeTextEditor.button_text_hi -> button_text_hi: float
-ThemeTextEditor.button_title -> button_title: float
-ThemeTextEditor.cursor -> cursor: float
-ThemeTextEditor.header -> header: float
-ThemeTextEditor.header_text -> header_text: float
-ThemeTextEditor.header_text_hi -> header_text_hi: float
-ThemeTextEditor.line_numbers_background -> line_numbers_background: float
-ThemeTextEditor.scroll_bar -> scroll_bar: float
-ThemeTextEditor.selected_text -> selected_text: float
-ThemeTextEditor.syntax_builtin -> syntax_builtin: float
-ThemeTextEditor.syntax_comment -> syntax_comment: float
-ThemeTextEditor.syntax_numbers -> syntax_numbers: float
-ThemeTextEditor.syntax_special -> syntax_special: float
-ThemeTextEditor.syntax_string -> syntax_string: float
-ThemeTextEditor.text -> text: float
-ThemeTextEditor.text_hi -> text_hi: float
-ThemeTextEditor.title -> title: float
-ThemeTimeline.back -> back: float
-ThemeTimeline.button -> button: float
-ThemeTimeline.button_text -> button_text: float
-ThemeTimeline.button_text_hi -> button_text_hi: float
-ThemeTimeline.button_title -> button_title: float
-ThemeTimeline.frame_current -> frame_current: float
-ThemeTimeline.grid -> grid: float
-ThemeTimeline.header -> header: float
-ThemeTimeline.header_text -> header_text: float
-ThemeTimeline.header_text_hi -> header_text_hi: float
-ThemeTimeline.text -> text: float
-ThemeTimeline.text_hi -> text_hi: float
-ThemeTimeline.title -> title: float
-ThemeUserInterface.icon_file -> icon_file: string
-ThemeUserInterface.wcol_box -> wcol_box: pointer, (read-only)
-ThemeUserInterface.wcol_list_item -> wcol_list_item: pointer, (read-only)
-ThemeUserInterface.wcol_menu -> wcol_menu: pointer, (read-only)
-ThemeUserInterface.wcol_menu_back -> wcol_menu_back: pointer, (read-only)
-ThemeUserInterface.wcol_menu_item -> wcol_menu_item: pointer, (read-only)
-ThemeUserInterface.wcol_num -> wcol_num: pointer, (read-only)
-ThemeUserInterface.wcol_numslider -> wcol_numslider: pointer, (read-only)
-ThemeUserInterface.wcol_option -> wcol_option: pointer, (read-only)
-ThemeUserInterface.wcol_progress -> wcol_progress: pointer, (read-only)
-ThemeUserInterface.wcol_pulldown -> wcol_pulldown: pointer, (read-only)
-ThemeUserInterface.wcol_radio -> wcol_radio: pointer, (read-only)
-ThemeUserInterface.wcol_regular -> wcol_regular: pointer, (read-only)
-ThemeUserInterface.wcol_scroll -> wcol_scroll: pointer, (read-only)
-ThemeUserInterface.wcol_state -> wcol_state: pointer, (read-only)
-ThemeUserInterface.wcol_text -> wcol_text: pointer, (read-only)
-ThemeUserInterface.wcol_toggle -> wcol_toggle: pointer, (read-only)
-ThemeUserInterface.wcol_tool -> wcol_tool: pointer, (read-only)
-ThemeUserPreferences.back -> back: float
-ThemeUserPreferences.button -> button: float
-ThemeUserPreferences.button_text -> button_text: float
-ThemeUserPreferences.button_text_hi -> button_text_hi: float
-ThemeUserPreferences.button_title -> button_title: float
-ThemeUserPreferences.header -> header: float
-ThemeUserPreferences.header_text -> header_text: float
-ThemeUserPreferences.header_text_hi -> header_text_hi: float
-ThemeUserPreferences.text -> text: float
-ThemeUserPreferences.text_hi -> text_hi: float
-ThemeUserPreferences.title -> title: float
-ThemeView3D.act_spline -> act_spline: float
-ThemeView3D.back -> back: float
-ThemeView3D.bone_pose -> bone_pose: float
-ThemeView3D.bone_solid -> bone_solid: float
-ThemeView3D.button -> button: float
-ThemeView3D.button_text -> button_text: float
-ThemeView3D.button_text_hi -> button_text_hi: float
-ThemeView3D.button_title -> button_title: float
-ThemeView3D.edge_crease -> edge_crease: float
-ThemeView3D.edge_facesel -> edge_facesel: float
-ThemeView3D.edge_seam -> edge_seam: float
-ThemeView3D.edge_select -> edge_select: float
-ThemeView3D.edge_sharp -> edge_sharp: float
-ThemeView3D.editmesh_active -> editmesh_active: float
-ThemeView3D.face -> face: float
-ThemeView3D.face_dot -> face_dot: float
-ThemeView3D.face_select -> face_select: float
-ThemeView3D.facedot_size -> facedot_size: int
-ThemeView3D.frame_current -> frame_current: float
-ThemeView3D.grid -> grid: float
-ThemeView3D.handle_align -> handle_align: float
-ThemeView3D.handle_auto -> handle_auto: float
-ThemeView3D.handle_free -> handle_free: float
-ThemeView3D.handle_sel_align -> handle_sel_align: float
-ThemeView3D.handle_sel_auto -> handle_sel_auto: float
-ThemeView3D.handle_sel_free -> handle_sel_free: float
-ThemeView3D.handle_sel_vect -> handle_sel_vect: float
-ThemeView3D.handle_vect -> handle_vect: float
-ThemeView3D.header -> header: float
-ThemeView3D.header_text -> header_text: float
-ThemeView3D.header_text_hi -> header_text_hi: float
-ThemeView3D.lamp -> lamp: float
-ThemeView3D.lastsel_point -> lastsel_point: float
-ThemeView3D.normal -> normal: float
-ThemeView3D.nurb_sel_uline -> nurb_sel_uline: float
-ThemeView3D.nurb_sel_vline -> nurb_sel_vline: float
-ThemeView3D.nurb_uline -> nurb_uline: float
-ThemeView3D.nurb_vline -> nurb_vline: float
-ThemeView3D.object_active -> object_active: float
-ThemeView3D.object_grouped -> object_grouped: float
-ThemeView3D.object_grouped_active -> object_grouped_active: float
-ThemeView3D.object_selected -> object_selected: float
-ThemeView3D.panel -> panel: float
-ThemeView3D.text -> text: float
-ThemeView3D.text_hi -> text_hi: float
-ThemeView3D.title -> title: float
-ThemeView3D.transform -> transform: float
-ThemeView3D.vertex -> vertex: float
-ThemeView3D.vertex_normal -> vertex_normal: float
-ThemeView3D.vertex_select -> vertex_select: float
-ThemeView3D.vertex_size -> vertex_size: int
-ThemeView3D.wire -> wire: float
-ThemeWidgetColors.inner -> inner: float
-ThemeWidgetColors.inner_sel -> inner_sel: float
-ThemeWidgetColors.item -> item: float
-ThemeWidgetColors.outline -> outline: float
-ThemeWidgetColors.shadedown -> shadedown: int
-ThemeWidgetColors.shadetop -> shadetop: int
-ThemeWidgetColors.text -> text: float
-ThemeWidgetColors.text_sel -> text_sel: float
-ThemeWidgetStateColors.blend -> blend: float
-ThemeWidgetStateColors.inner_anim -> inner_anim: float
-ThemeWidgetStateColors.inner_anim_sel -> inner_anim_sel: float
-ThemeWidgetStateColors.inner_driven -> inner_driven: float
-ThemeWidgetStateColors.inner_driven_sel -> inner_driven_sel: float
-ThemeWidgetStateColors.inner_key -> inner_key: float
-ThemeWidgetStateColors.inner_key_sel -> inner_key_sel: float
-TimelineMarker.camera -> camera: pointer Camera this timeline sets to active
-TimelineMarker.frame -> frame: int The frame on which the timeline marker appears
-TimelineMarker.name -> name: string
-ToolSettings.autokey_mode -> autokey_mode: enum Mode of automatic keyframe insertion for Objects and Bones
-ToolSettings.edge_path_mode -> edge_path_mode: enum The edge flag to tag when selecting the shortest path
-ToolSettings.etch_adaptive_limit -> etch_adaptive_limit: float Number of bones in the subdivided stroke
-ToolSettings.etch_convert_mode -> etch_convert_mode: enum Method used to convert stroke to bones
-ToolSettings.etch_length_limit -> etch_length_limit: float Number of bones in the subdivided stroke
-ToolSettings.etch_number -> etch_number: string DOC BROKEN
-ToolSettings.etch_roll_mode -> etch_roll_mode: enum Method used to adjust the roll of bones when retargeting
-ToolSettings.etch_side -> etch_side: string DOC BROKEN
-ToolSettings.etch_subdivision_number -> etch_subdivision_number: int Number of bones in the subdivided stroke
-ToolSettings.etch_template -> etch_template: pointer Template armature that will be retargeted to the stroke
-ToolSettings.image_paint -> image_paint: pointer, (read-only)
-ToolSettings.normal_size -> normal_size: float Display size for normals in the 3D view
-ToolSettings.particle_edit -> particle_edit: pointer, (read-only)
-ToolSettings.proportional_editing -> proportional_edit: enum Proportional editing mode
-ToolSettings.proportional_editing_falloff -> proportional_edit_falloff: enum Falloff type for proportional editing mode
-ToolSettings.sculpt -> sculpt: pointer, (read-only)
-ToolSettings.snap_element -> snap_element: enum Type of element to snap to
-ToolSettings.snap_target -> snap_target: enum Which part to snap onto the target
-ToolSettings.uv_selection_mode -> uv_selection_mode: enum UV selection and display mode
-ToolSettings.vertex_group_weight -> vertex_group_weight: float Weight to assign in vertex groups
-ToolSettings.vertex_paint -> vertex_paint: pointer, (read-only)
-ToolSettings.weight_paint -> weight_paint: pointer, (read-only)
-TouchSensor.material -> material: pointer Only look for objects with this material
-TrackToConstraint.head_tail -> head_tail: float Target along length of bone: Head=0, Tail=1
-TrackToConstraint.subtarget -> subtarget: string
-TrackToConstraint.target -> target: pointer Target Object
-TrackToConstraint.track -> track: enum Axis that points to the target object
-TrackToConstraint.up -> up: enum Axis that points upward
-TransformConstraint.from_max_x -> from_max_x: float Top range of X axis source motion
-TransformConstraint.from_max_y -> from_max_y: float Top range of Y axis source motion
-TransformConstraint.from_max_z -> from_max_z: float Top range of Z axis source motion
-TransformConstraint.from_min_x -> from_min_x: float Bottom range of X axis source motion
-TransformConstraint.from_min_y -> from_min_y: float Bottom range of Y axis source motion
-TransformConstraint.from_min_z -> from_min_z: float Bottom range of Z axis source motion
-TransformConstraint.map_from -> map_from: enum The transformation type to use from the target
-TransformConstraint.map_to -> map_to: enum The transformation type to affect of the constrained object
-TransformConstraint.map_to_x_from -> map_to_x_from: enum The source axis constrained object's X axis uses
-TransformConstraint.map_to_y_from -> map_to_y_from: enum The source axis constrained object's Y axis uses
-TransformConstraint.map_to_z_from -> map_to_z_from: enum The source axis constrained object's Z axis uses
-TransformConstraint.subtarget -> subtarget: string
-TransformConstraint.target -> target: pointer Target Object
-TransformConstraint.to_max_x -> to_max_x: float Top range of X axis destination motion
-TransformConstraint.to_max_y -> to_max_y: float Top range of Y axis destination motion
-TransformConstraint.to_max_z -> to_max_z: float Top range of Z axis destination motion
-TransformConstraint.to_min_x -> to_min_x: float Bottom range of X axis destination motion
-TransformConstraint.to_min_y -> to_min_y: float Bottom range of Y axis destination motion
-TransformConstraint.to_min_z -> to_min_z: float Bottom range of Z axis destination motion
-TransformOrientation.matrix -> matrix: float
-TransformOrientation.name -> name: string
-TransformSequence.interpolation -> interpolation: enum
-TransformSequence.rotation_start -> rotation_start: float
-TransformSequence.scale_start_x -> scale_start_x: float
-TransformSequence.scale_start_y -> scale_start_y: float
-TransformSequence.translate_start_x -> translate_start_x: float
-TransformSequence.translate_start_y -> translate_start_y: float
-TransformSequence.translation_unit -> translation_unit: enum
-UILayout.alignment -> alignment: enum
-UILayout.operator_context -> operator_context: enum
-UILayout.scale_x -> scale_x: float
-UILayout.scale_y -> scale_y: float
-UVProjectModifier.aspect_x -> aspect_x: float
-UVProjectModifier.aspect_y -> aspect_y: float
-UVProjectModifier.image -> image: pointer
-UVProjectModifier.num_projectors -> num_projectors: int Number of projectors to use
-UVProjectModifier.projectors -> projectors: collection, (read-only)
-UVProjectModifier.scale_x -> scale_x: float
-UVProjectModifier.scale_y -> scale_y: float
-UVProjectModifier.uv_layer -> uv_layer: string UV layer name
-UVProjector.object -> object: pointer Object to use as projector transform
-UnitSettings.rotation_units -> rotation_units: enum Unit to use for displaying/editing rotation values
-UnitSettings.scale_length -> scale_length: float Scale to use when converting between blender units and dimensions
-UnitSettings.system -> system: enum The unit system to use for button display
-UserPreferences.active_section -> active_section: enum Active section of the user preferences shown in the user interface
-UserPreferences.addons -> addons: collection, (read-only)
-UserPreferences.edit -> edit: pointer, (read-only) Settings for interacting with Blender data
-UserPreferences.filepaths -> filepaths: pointer, (read-only) Default paths for external files
-UserPreferences.inputs -> inputs: pointer, (read-only) Settings for input devices
-UserPreferences.system -> system: pointer, (read-only) Graphics driver and operating system settings
-UserPreferences.themes -> themes: collection, (read-only)
-UserPreferences.uistyles -> uistyles: collection, (read-only)
-UserPreferences.view -> view: pointer, (read-only) Preferences related to viewing data
-UserPreferencesEdit.auto_keying_mode -> auto_keying_mode: enum Mode of automatic keyframe insertion for Objects and Bones
-UserPreferencesEdit.grease_pencil_eraser_radius -> grease_pencil_eraser_radius: int Radius of eraser 'brush'
-UserPreferencesEdit.grease_pencil_euclidean_distance -> grease_pencil_euclidean_distance: int Distance moved by mouse when drawing stroke (in pixels) to include
-UserPreferencesEdit.grease_pencil_manhattan_distance -> grease_pencil_manhattan_distance: int Pixels moved by mouse per axis when drawing stroke
-UserPreferencesEdit.keyframe_new_handle_type -> keyframe_new_handle_type: enum
-UserPreferencesEdit.keyframe_new_interpolation_type -> keyframe_new_interpolation_type: enum
-UserPreferencesEdit.material_link -> material_link: enum Toggle whether the material is linked to object data or the object block
-UserPreferencesEdit.object_align -> object_align: enum When adding objects from a 3D View menu, either align them to that view's direction or the world coordinates
-UserPreferencesEdit.undo_memory_limit -> undo_memory_limit: int Maximum memory usage in megabytes (0 means unlimited)
-UserPreferencesEdit.undo_steps -> undo_steps: int Number of undo steps available (smaller values conserve memory)
-UserPreferencesFilePaths.animation_player -> animation_player: string Path to a custom animation/frame sequence player
-UserPreferencesFilePaths.animation_player_preset -> animation_player_preset: enum Preset configs for external animation players
-UserPreferencesFilePaths.auto_save_time -> auto_save_time: int The time (in minutes) to wait between automatic temporary saves
-UserPreferencesFilePaths.fonts_directory -> fonts_directory: string The default directory to search for loading fonts
-UserPreferencesFilePaths.image_editor -> image_editor: string Path to an image editor
-UserPreferencesFilePaths.python_scripts_directory -> python_scripts_directory: string The default directory to search for Python scripts (resets python module search path: sys.path)
-UserPreferencesFilePaths.recent_files -> recent_files: int Maximum number of recently opened files to remember
-UserPreferencesFilePaths.render_output_directory -> render_output_directory: string The default directory for rendering output
-UserPreferencesFilePaths.save_version -> save_version: int The number of old versions to maintain in the current directory, when manually saving
-UserPreferencesFilePaths.sequence_plugin_directory -> sequence_plugin_directory: string The default directory to search for sequence plugins
-UserPreferencesFilePaths.sounds_directory -> sounds_directory: string The default directory to search for sounds
-UserPreferencesFilePaths.temporary_directory -> temporary_directory: string The directory for storing temporary save files
-UserPreferencesFilePaths.texture_plugin_directory -> texture_plugin_directory: string The default directory to search for texture plugins
-UserPreferencesFilePaths.textures_directory -> textures_directory: string The default directory to search for textures
-UserPreferencesInput.double_click_time -> double_click_time: int The time (in ms) for a double click
-UserPreferencesInput.edited_keymaps -> edited_keymaps: collection, (read-only)
-UserPreferencesInput.ndof_pan_speed -> ndof_pan_speed: int The overall panning speed of an NDOF device, as percent of standard
-UserPreferencesInput.ndof_rotate_speed -> ndof_rotate_speed: int The overall rotation speed of an NDOF device, as percent of standard
-UserPreferencesInput.select_mouse -> select_mouse: enum The mouse button used for selection
-UserPreferencesInput.view_rotation -> view_rotation: enum Rotation style in the viewport
-UserPreferencesInput.zoom_axis -> zoom_axis: enum Axis of mouse movement to zoom in or out on
-UserPreferencesInput.zoom_style -> zoom_style: enum Which style to use for viewport scaling
-UserPreferencesSystem.audio_channels -> audio_channels: enum Sets the audio channel count
-UserPreferencesSystem.audio_device -> audio_device: enum Sets the audio output device
-UserPreferencesSystem.audio_mixing_buffer -> audio_mixing_buffer: enum Sets the number of samples used by the audio mixing buffer
-UserPreferencesSystem.audio_sample_format -> audio_sample_format: enum Sets the audio sample format
-UserPreferencesSystem.audio_sample_rate -> audio_sample_rate: enum Sets the audio sample rate
-UserPreferencesSystem.clip_alpha -> clip_alpha: float Clip alpha below this threshold in the 3D textured view
-UserPreferencesSystem.color_picker_type -> color_picker_type: enum Different styles of displaying the color picker widget
-UserPreferencesSystem.dpi -> dpi: int Font size and resolution for display
-UserPreferencesSystem.frame_server_port -> frame_server_port: int Frameserver Port for Frameserver Rendering
-UserPreferencesSystem.gl_texture_limit -> gl_texture_limit: enum Limit the texture size to save graphics memory
-UserPreferencesSystem.language -> language: enum Language use for translation
-UserPreferencesSystem.memory_cache_limit -> memory_cache_limit: int Memory cache limit in sequencer (megabytes)
-UserPreferencesSystem.prefetch_frames -> prefetch_frames: int Number of frames to render ahead during playback
-UserPreferencesSystem.screencast_fps -> screencast_fps: int Frame rate for the screencast to be played back
-UserPreferencesSystem.screencast_wait_time -> screencast_wait_time: int Time in milliseconds between each frame recorded for screencast
-UserPreferencesSystem.scrollback -> scrollback: int Maximum number of lines to store for the console buffer
-UserPreferencesSystem.solid_lights -> solid_lights: collection, (read-only) Lights user to display objects in solid draw mode
-UserPreferencesSystem.texture_collection_rate -> texture_collection_rate: int Number of seconds between each run of the GL texture garbage collector
-UserPreferencesSystem.texture_time_out -> texture_time_out: int Time since last access of a GL texture in seconds after which it is freed. (Set to 0 to keep textures allocated.)
-UserPreferencesSystem.weight_color_range -> weight_color_range: pointer, (read-only) Color range used for weight visualization in weight painting mode
-UserPreferencesSystem.window_draw_method -> window_draw_method: enum Drawing method used by the window manager
-UserPreferencesView.manipulator_handle_size -> manipulator_handle_size: int Size of widget handles as percentage of widget radius
-UserPreferencesView.manipulator_hotspot -> manipulator_hotspot: int Hotspot in pixels for clicking widget handles
-UserPreferencesView.manipulator_size -> manipulator_size: int Diameter of widget, in 10 pixel units
-UserPreferencesView.mini_axis_brightness -> mini_axis_brightness: int The brightness of the icon
-UserPreferencesView.mini_axis_size -> mini_axis_size: int The axis icon's size
-UserPreferencesView.object_origin_size -> object_origin_size: int Diameter in Pixels for Object/Lamp origin display
-UserPreferencesView.open_left_mouse_delay -> open_left_mouse_delay: int Time in 1/10 seconds to hold the Left Mouse Button before opening the toolbox
-UserPreferencesView.open_right_mouse_delay -> open_right_mouse_delay: int Time in 1/10 seconds to hold the Right Mouse Button before opening the toolbox
-UserPreferencesView.open_sublevel_delay -> open_sublevel_delay: int Time delay in 1/10 seconds before automatically opening sub level menus
-UserPreferencesView.open_toplevel_delay -> open_toplevel_delay: int Time delay in 1/10 seconds before automatically opening top level menus
-UserPreferencesView.properties_width_check -> properties_width_check: int Dual Column layout will change to single column layout when the width of the area gets below this value (needs restart to take effect)
-UserPreferencesView.rotation_angle -> rotation_angle: int The rotation step for numerical pad keys (2 4 6 8)
-UserPreferencesView.smooth_view -> smooth_view: int The time to animate the view in milliseconds, zero to disable
-UserPreferencesView.timecode_style -> timecode_style: enum Format of Time Codes displayed when not displaying timing in terms of frames
-UserPreferencesView.view2d_grid_minimum_spacing -> view2d_grid_spacing_min: int Minimum number of pixels between each gridline in 2D Viewports
-UserPreferencesView.wheel_scroll_lines -> wheel_scroll_lines: int The number of lines scrolled at a time with the mouse wheel
-UserSolidLight.diffuse_color -> diffuse_color: float The diffuse color of the OpenGL light
-UserSolidLight.direction -> direction: float The direction that the OpenGL light is shining
-UserSolidLight.specular_color -> specular_color: float The color of the lights specular highlight
-ValueNodeSocket.default_value -> default_value: float Default value of the socket when no link is attached
-ValueNodeSocket.name -> name: string, (read-only) Socket name
-VectorFont.filepath -> filepath: string, (read-only)
-VectorFont.packed_file -> packed_file: pointer, (read-only)
-VectorNodeSocket.default_value -> default_value: float Default value of the socket when no link is attached
-VectorNodeSocket.name -> name: string, (read-only) Socket name
-VertexGroup.index -> index: int, (read-only) Index number of the vertex group
-VertexGroup.name -> name: string Vertex group name
-VertexGroupElement.group -> group: int, (read-only)
-VertexGroupElement.weight -> weight: float Vertex Weight
-VoronoiTexture.coloring -> color_mode: enum
-VoronoiTexture.distance_metric -> distance_metric: enum
-VoronoiTexture.minkovsky_exponent -> minkovsky_exponent: float Minkovsky exponent
-VoronoiTexture.nabla -> nabla: float Size of derivative offset used for calculating normal
-VoronoiTexture.noise_intensity -> noise_intensity: float
-VoronoiTexture.noise_size -> noise_size: float Sets scaling for noise input
-VoronoiTexture.weight_1 -> weight_1: float Voronoi feature weight 1
-VoronoiTexture.weight_2 -> weight_2: float Voronoi feature weight 2
-VoronoiTexture.weight_3 -> weight_3: float Voronoi feature weight 3
-VoronoiTexture.weight_4 -> weight_4: float Voronoi feature weight 4
-VoxelData.domain_object -> domain_object: pointer Object used as the smoke simulation domain
-VoxelData.extension -> extension: enum Sets how the texture is extrapolated past its original bounds
-VoxelData.file_format -> file_format: enum Format of the source data set to render
-VoxelData.intensity -> intensity: float Multiplier for intensity values
-VoxelData.interpolation -> interpolation: enum Method to interpolate/smooth values between voxel cells
-VoxelData.resolution -> resolution: int Resolution of the voxel grid
-VoxelData.smoke_data_type -> smoke_data_type: enum Simulation value to be used as a texture
-VoxelData.source_path -> source_path: string The external source data file to use
-VoxelData.still_frame_number -> still_frame_number: int The frame number to always use
-VoxelDataTexture.image -> image: pointer
-VoxelDataTexture.image_user -> image_user: pointer, (read-only) Parameters defining which layer, pass and frame of the image is displayed
-VoxelDataTexture.voxeldata -> voxeldata: pointer, (read-only) The voxel data associated with this texture
-WaveModifier.damping_time -> damping_time: float
-WaveModifier.falloff_radius -> falloff_radius: float
-WaveModifier.height -> height: float
-WaveModifier.lifetime -> lifetime: float
-WaveModifier.narrowness -> narrowness: float
-WaveModifier.speed -> speed: float
-WaveModifier.start_position_object -> start_position_object: pointer
-WaveModifier.start_position_x -> start_position_x: float
-WaveModifier.start_position_y -> start_position_y: float
-WaveModifier.texture -> texture: pointer Texture for modulating the wave
-WaveModifier.texture_coordinates -> texture_coordinates: enum Texture coordinates used for modulating input
-WaveModifier.texture_coordinates_object -> texture_coordinates_object: pointer
-WaveModifier.time_offset -> time_offset: float Either the starting frame (for positive speed) or ending frame (for negative speed.)
-WaveModifier.uv_layer -> uv_layer: string UV layer name
-WaveModifier.vertex_group -> vertex_group: string Vertex group name for modulating the wave
-WaveModifier.width -> width: float
-Window.screen -> screen: pointer Active screen showing in the window
-WindowManager.active_keyconfig -> active_keyconfig: pointer
-WindowManager.default_keyconfig -> default_keyconfig: pointer, (read-only)
-WindowManager.keyconfigs -> keyconfigs: collection, (read-only) Registered key configurations
-WindowManager.operators -> operators: collection, (read-only) Operator registry
-WindowManager.windows -> windows: collection, (read-only) Open windows
-WipeSequence.angle -> angle: float Edge angle
-WipeSequence.blur_width -> blur_width: float Width of the blur edge, in percentage relative to the image size
-WipeSequence.direction -> direction: enum Wipe direction
-WipeSequence.transition_type -> transition_type: enum
-WoodTexture.nabla -> nabla: float Size of derivative offset used for calculating normal
-WoodTexture.noise_basis -> noise_basis: enum Sets the noise basis used for turbulence
-WoodTexture.noise_size -> noise_size: float Sets scaling for noise input
-WoodTexture.noise_type -> noise_type: enum
-WoodTexture.noisebasis2 -> noisebasis2: enum
-WoodTexture.stype -> stype: enum
-WoodTexture.turbulence -> turbulence: float Sets the turbulence of the bandnoise and ringnoise types
-World.active_texture -> active_texture: pointer Active texture slot being displayed
-World.active_texture_index -> active_texture_index: int Index of active texture slot
-World.ambient_color -> ambient_color: float
-World.animation_data -> animation_data: pointer, (read-only) Animation data for this datablock
-World.exposure -> exposure: float Amount of exponential color correction for light
-World.horizon_color -> horizon_color: float Color at the horizon
-World.lighting -> lighting: pointer, (read-only) World lighting settings
-World.mist -> mist: pointer, (read-only) World mist settings
-World.range -> range: float The color range that will be mapped to 0-1
-World.stars -> stars: pointer, (read-only) World stars settings
-World.texture_slots -> texture_slots: collection, (read-only) Texture slots defining the mapping and influence of textures
-World.zenith_color -> zenith_color: float Color at the zenith
-WorldLighting.adapt_to_speed -> adapt_to_speed: float Use the speed vector pass to reduce AO samples in fast moving pixels. Higher values result in more aggressive sample reduction. Requires Vec pass enabled (for Raytrace Adaptive QMC)
-WorldLighting.ao_blend_mode -> ao_blend_type: enum Defines how AO mixes with material shading
-WorldLighting.ao_factor -> ao_factor: float Factor for ambient occlusion blending
-WorldLighting.bias -> bias: float Bias (in radians) to prevent smoothed faces from showing banding (for Raytrace Constant Jittered)
-WorldLighting.correction -> correction: float Ad-hoc correction for over-occlusion due to the approximation (for Approximate)
-WorldLighting.distance -> distance: float Length of rays, defines how far away other faces give occlusion effect
-WorldLighting.environment_color -> environment_color: enum Defines where the color of the environment light comes from
-WorldLighting.environment_energy -> environment_energy: float Defines the strength of environment light
-WorldLighting.error_tolerance -> error_tolerance: float Low values are slower and higher quality (for Approximate)
-WorldLighting.falloff_strength -> falloff_strength: float Distance attenuation factor, the higher, the 'shorter' the shadows
-WorldLighting.gather_method -> gather_method: enum
-WorldLighting.indirect_bounces -> indirect_bounces: int Number of indirect diffuse light bounces to use for approximate ambient occlusion
-WorldLighting.indirect_factor -> indirect_factor: float Factor for how much surrounding objects contribute to light
-WorldLighting.passes -> passes: int Number of preprocessing passes to reduce overocclusion (for approximate ambient occlusion)
-WorldLighting.sample_method -> sample_method: enum Method for generating shadow samples (for Raytrace)
-WorldLighting.samples -> samples: int Amount of ray samples. Higher values give smoother results and longer rendering times
-WorldLighting.threshold -> threshold: float Samples below this threshold will be considered fully shadowed/unshadowed and skipped (for Raytrace Adaptive QMC)
-WorldMistSettings.depth -> depth: float The distance over which the mist effect fades in
-WorldMistSettings.falloff -> falloff: enum Type of transition used to fade mist
-WorldMistSettings.height -> height: float Control how much mist density decreases with height
-WorldMistSettings.intensity -> intensity: float Intensity of the mist effect
-WorldMistSettings.start -> start: float Starting distance of the mist, measured from the camera
-WorldStarsSettings.average_separation -> average_separation: float Average distance between any two stars
-WorldStarsSettings.color_randomization -> color_randomization: float Randomize star colors
-WorldStarsSettings.min_distance -> distance_min: float Minimum distance to the camera for stars
-WorldStarsSettings.size -> size: float Average screen dimension of stars
-WorldTextureSlot.blend_factor -> blend_factor: float Amount texture affects color progression of the background
-WorldTextureSlot.horizon_factor -> horizon_factor: float Amount texture affects color of the horizon
-WorldTextureSlot.object -> object: pointer Object to use for mapping with Object texture coordinates
-WorldTextureSlot.texture_coordinates -> texture_coordinates: enum Texture coordinates used to map the texture onto the background
-WorldTextureSlot.zenith_down_factor -> zenith_down_factor: float Amount texture affects color of the zenith below
-WorldTextureSlot.zenith_up_factor -> zenith_up_factor: float Amount texture affects color of the zenith above
+ NOTE * CLASS.FROM -> TO: TYPE "DESCRIPTION"
+#+ * ActionGroup.channels -> channels: collection, "(read-only) F-Curves in this group"
+#+ * ActionGroup.custom_color -> custom_color: int "Index of custom color set"
+#+ * ActionGroup.lock -> lock: boolean "Action Group is locked"
+#+ * ActionGroup.name -> name: string "NO DESCRIPTION"
+#+ * ActionGroup.select -> select: boolean "Action Group is selected"
+#ActionGroup.show_expanded -> show_expanded: boolean "Action Group is expanded"
+#+ * Actuator.name -> name: string "NO DESCRIPTION"
+#Actuator.pin -> pin: boolean "Display when not linked to a visible states controller"
+#Actuator.show_expanded -> show_expanded: boolean "Set actuator expanded in the user interface"
+#+ * Actuator.type -> type: enum "NO DESCRIPTION"
+#+ * Actuator|ActionActuator.action -> action: pointer "NO DESCRIPTION"
+#Actuator|ActionActuator.frame_blend_in -> frame_blend_in: int "Number of frames of motion blending"
+#+ * Actuator|ActionActuator.frame_end -> frame_end: int "NO DESCRIPTION"
+#+ * Actuator|ActionActuator.frame_property -> frame_property: string "Assign the actions current frame number to this property"
+#+ * Actuator|ActionActuator.frame_start -> frame_start: int "NO DESCRIPTION"
+#Actuator|ActionActuator.play_mode -> play_mode: enum "Action playback type"
+#+ * Actuator|ActionActuator.priority -> priority: int "Execution priority - lower numbers will override actions with higher numbers. With 2 or more actions at once, the overriding channels must be lower in the stack"
+#+ * Actuator|ActionActuator.property -> property: string "Use this property to define the Action position"
+#Actuator|ActionActuator.use_continue_last_frame -> use_continue_last_frame: boolean "Restore last frame when switching on/off, otherwise play from the start each time"
+#+ * Actuator|ArmatureActuator.bone -> bone: string "Bone on which the constraint is defined"
+#+ * Actuator|ArmatureActuator.constraint -> constraint: string "Name of the constraint you want to control"
+#+ * Actuator|ArmatureActuator.mode -> mode: enum "NO DESCRIPTION"
+#+ * Actuator|ArmatureActuator.secondary_target -> secondary_target: pointer "Set weight of this constraint"
+#+ * Actuator|ArmatureActuator.target -> target: pointer "Set this object as the target of the constraint"
+#+ * Actuator|ArmatureActuator.weight -> weight: float "Set weight of this constraint"
+#+ * Actuator|CameraActuator.axis -> axis: enum "Specify the axis the Camera will try to get behind"
+#+ * Actuator|CameraActuator.height -> height: float "NO DESCRIPTION"
+#+ * Actuator|CameraActuator.max -> max: float "NO DESCRIPTION"
+#+ * Actuator|CameraActuator.min -> min: float "NO DESCRIPTION"
+#+ * Actuator|CameraActuator.object -> object: pointer "Look at this Object"
+#Actuator|ConstraintActuator.angle_max -> angle_max: float "Maximum angle (in degree) allowed with target direction. No correction is done if angle with target direction is between min and max"
+#Actuator|ConstraintActuator.angle_min -> angle_min: float "Minimum angle (in degree) to maintain with target direction. No correction is done if angle with target direction is between min and max"
+#+ * Actuator|ConstraintActuator.damping -> damping: int "Damping factor: time constant (in frame) of low pass filter"
+#+ * Actuator|ConstraintActuator.damping_rotation -> damping_rotation: int "Use a different damping for orientation"
+#+ * Actuator|ConstraintActuator.direction -> direction: enum "Set the direction of the ray"
+#+ * Actuator|ConstraintActuator.direction_axis -> direction_axis: enum "Select the axis to be aligned along the reference direction"
+#+ * Actuator|ConstraintActuator.distance -> distance: float "Set the maximum length of ray"
+#+ * Actuator|ConstraintActuator.fh_damping -> fh_damping: float "Damping factor of the Fh spring force"
+#+ * Actuator|ConstraintActuator.fh_height -> fh_height: float "Height of the Fh area"
+#+ * Actuator|ConstraintActuator.limit -> limit: enum "NO DESCRIPTION"
+#+ * Actuator|ConstraintActuator.limit_max -> limit_max: float "NO DESCRIPTION"
+#+ * Actuator|ConstraintActuator.limit_min -> limit_min: float "NO DESCRIPTION"
+#+ * Actuator|ConstraintActuator.material -> material: string "Ray detects only Objects with this material"
+#+ * Actuator|ConstraintActuator.mode -> mode: enum "The type of the constraint"
+#+ * Actuator|ConstraintActuator.property -> property: string "Ray detect only Objects with this property"
+#+ * Actuator|ConstraintActuator.range -> range: float "Set the maximum length of ray"
+#Actuator|ConstraintActuator.rotation_max -> rotation_max: float[3] "Reference Direction"
+#+ * Actuator|ConstraintActuator.spring -> spring: float "Spring force within the Fh area"
+#+ * Actuator|ConstraintActuator.time -> time: int "Maximum activation time in frame, 0 for unlimited"
+#Actuator|ConstraintActuator.use_fh_normal -> use_fh_normal: boolean "Add a horizontal spring force on slopes"
+#Actuator|ConstraintActuator.use_fh_paralel_axis -> use_fh_paralel_axis: boolean "Keep object axis parallel to normal"
+#Actuator|ConstraintActuator.use_force_distance -> use_force_distance: boolean "Force distance of object to point of impact of ray"
+#Actuator|ConstraintActuator.use_local -> use_local: boolean "Set ray along objects axis or global axis"
+#Actuator|ConstraintActuator.use_material_detect -> use_material_detect: boolean "Detect material instead of property"
+#Actuator|ConstraintActuator.use_normal -> use_normal: boolean "Set object axis along (local axis) or parallel (global axis) to the normal at hit position"
+#Actuator|ConstraintActuator.use_persistent -> use_persistent: boolean "Persistent actuator: stays active even if ray does not reach target"
+#+ * Actuator|EditObjectActuator.angular_velocity -> angular_velocity: float[3] "Angular velocity upon creation"
+#+ * Actuator|EditObjectActuator.dynamic_operation -> dynamic_operation: enum "NO DESCRIPTION"
+#+ * Actuator|EditObjectActuator.linear_velocity -> linear_velocity: float[3] "Velocity upon creation"
+#+ * Actuator|EditObjectActuator.mass -> mass: float "The mass of the object"
+#+ * Actuator|EditObjectActuator.mesh -> mesh: pointer "Replace the existing, when left blank Phys will remake the existing physics mesh"
+#+ * Actuator|EditObjectActuator.mode -> mode: enum "The mode of the actuator"
+#+ * Actuator|EditObjectActuator.object -> object: pointer "Add this Object and all its children (cant be on an visible layer)"
+#+ * Actuator|EditObjectActuator.time -> time: int "Duration the new Object lives or the track takes"
+#+ * Actuator|EditObjectActuator.track_object -> track_object: pointer "Track to this Object"
+#Actuator|EditObjectActuator.use_3d_tracking -> use_3d_tracking: boolean "Enable 3D tracking"
+#Actuator|EditObjectActuator.use_local_angular_velocity -> use_local_angular_velocity: boolean "Apply the rotation locally"
+#Actuator|EditObjectActuator.use_local_linear_velocity -> use_local_linear_velocity: boolean "Apply the transformation locally"
+#Actuator|EditObjectActuator.use_replace_display_mesh -> use_replace_display_mesh: boolean "Replace the display mesh"
+#Actuator|EditObjectActuator.use_replace_physics_mesh -> use_replace_physics_mesh: boolean "Replace the physics mesh (triangle bounds only - compound shapes not supported)"
+#Actuator|FCurveActuator.apply_to_children -> apply_to_children: boolean "Update F-Curve on all children Objects as well"
+#Actuator|FCurveActuator.frame_end -> frame_end: int "NO DESCRIPTION"
+#Actuator|FCurveActuator.frame_property -> frame_property: string "Assign the actions current frame number to this property"
+#Actuator|FCurveActuator.frame_start -> frame_start: int "NO DESCRIPTION"
+#Actuator|FCurveActuator.play_type -> play_type: enum "Specify the way you want to play the animation"
+#Actuator|FCurveActuator.property -> property: string "Use this property to define the F-Curve position"
+#Actuator|FCurveActuator.use_additive -> use_additive: boolean "F-Curve is added to the current loc/rot/scale in global or local coordinate according to Local flag"
+#Actuator|FCurveActuator.use_force -> use_force: boolean "Apply F-Curve as a global or local force depending on the local option (dynamic objects only)"
+#Actuator|FCurveActuator.use_local -> use_local: boolean "Let the F-Curve act in local coordinates, used in Force and Add mode"
+#+ * Actuator|Filter2DActuator.filter_pass -> filter_pass: int "Set filter order"
+#+ * Actuator|Filter2DActuator.glsl_shader -> glsl_shader: pointer "NO DESCRIPTION"
+#+ * Actuator|Filter2DActuator.mode -> mode: enum "NO DESCRIPTION"
+#+ * Actuator|Filter2DActuator.motion_blur_factor -> motion_blur_factor: float "Set motion blur factor"
+#Actuator|Filter2DActuator.use_motion_blur -> use_motion_blur: boolean "Enable/Disable Motion Blur"
+#+ * Actuator|GameActuator.filename -> filename: string "Load this blend file, use the // prefix for a path relative to the current blend file"
+#+ * Actuator|GameActuator.mode -> mode: enum "NO DESCRIPTION"
+#+ * Actuator|MessageActuator.body_message -> body_message: string "Optional message body Text"
+#+ * Actuator|MessageActuator.body_property -> body_property: string "The message body will be set by the Property Value"
+#+ * Actuator|MessageActuator.body_type -> body_type: enum "Toggle message type: either Text or a PropertyName"
+#+ * Actuator|MessageActuator.subject -> subject: string "Optional message subject. This is what can be filtered on"
+#+ * Actuator|MessageActuator.to_property -> to_property: string "Optional send message to objects with this name only, or empty to broadcast"
+#+ * Actuator|ObjectActuator.angular_velocity -> angular_velocity: float[3] "Sets the angular velocity"
+#+ * Actuator|ObjectActuator.damping -> damping: int "Number of frames to reach the target velocity"
+#+ * Actuator|ObjectActuator.derivate_coefficient -> derivate_coefficient: float "Not required, high values can cause instability"
+#+ * Actuator|ObjectActuator.force -> force: float[3] "Sets the force"
+#+ * Actuator|ObjectActuator.force_max_x -> force_max_x: float "Set the upper limit for force"
+#+ * Actuator|ObjectActuator.force_max_y -> force_max_y: float "Set the upper limit for force"
+#+ * Actuator|ObjectActuator.force_max_z -> force_max_z: float "Set the upper limit for force"
+#+ * Actuator|ObjectActuator.force_min_x -> force_min_x: float "Set the lower limit for force"
+#+ * Actuator|ObjectActuator.force_min_y -> force_min_y: float "Set the lower limit for force"
+#+ * Actuator|ObjectActuator.force_min_z -> force_min_z: float "Set the lower limit for force"
+#+ * Actuator|ObjectActuator.integral_coefficient -> integral_coefficient: float "Low value (0.01) for slow response, high value (0.5) for fast response"
+#+ * Actuator|ObjectActuator.linear_velocity -> linear_velocity: float[3] "Sets the linear velocity (in Servo mode it sets the target relative linear velocity, it will be achieved by automatic application of force. Null velocity is a valid target)"
+#+ * Actuator|ObjectActuator.mode -> mode: enum "Specify the motion system"
+#Actuator|ObjectActuator.offset_location -> offset_location: float[3] "Sets the location"
+#Actuator|ObjectActuator.offset_rotation -> offset_rotation: float[3] "Sets the rotation"
+#+ * Actuator|ObjectActuator.proportional_coefficient -> proportional_coefficient: float "Typical value is 60x integral coefficient"
+#+ * Actuator|ObjectActuator.reference_object -> reference_object: pointer "Reference object for velocity calculation, leave empty for world reference"
+#+ * Actuator|ObjectActuator.torque -> torque: float[3] "Sets the torque"
+#Actuator|ObjectActuator.use_add_linear_velocity -> use_add_linear_velocity: boolean "Toggles between ADD and SET linV"
+#Actuator|ObjectActuator.use_local_angular_velocity -> use_local_angular_velocity: boolean "Angular velocity is defined in local coordinates"
+#Actuator|ObjectActuator.use_local_force -> use_local_force: boolean "Force is defined in local coordinates"
+#Actuator|ObjectActuator.use_local_linear_velocity -> use_local_linear_velocity: boolean "Velocity is defined in local coordinates"
+#Actuator|ObjectActuator.use_local_location -> use_local_location: boolean "Location is defined in local coordinates"
+#Actuator|ObjectActuator.use_local_rotation -> use_local_rotation: boolean "Rotation is defined in local coordinates"
+#Actuator|ObjectActuator.use_local_torque -> use_local_torque: boolean "Torque is defined in local coordinates"
+#Actuator|ObjectActuator.use_servo_limit_x -> use_servo_limit_x: boolean "Set limit to force along the X axis"
+#Actuator|ObjectActuator.use_servo_limit_y -> use_servo_limit_y: boolean "Set limit to force along the Y axis"
+#Actuator|ObjectActuator.use_servo_limit_z -> use_servo_limit_z: boolean "Set limit to force along the Z axis"
+#+ * Actuator|ParentActuator.mode -> mode: enum "NO DESCRIPTION"
+#+ * Actuator|ParentActuator.object -> object: pointer "Set this object as parent"
+#Actuator|ParentActuator.use_compound -> use_compound: boolean "Add this object shape to the parent shape (only if the parent shape is already compound)"
+#Actuator|ParentActuator.use_ghost -> use_ghost: boolean "Make this object ghost while parented (only if not compound)"
+#+ * Actuator|PropertyActuator.mode -> mode: enum "NO DESCRIPTION"
+#+ * Actuator|PropertyActuator.object -> object: pointer "Copy from this Object"
+#+ * Actuator|PropertyActuator.object_property -> object_property: string "Copy this property"
+#+ * Actuator|PropertyActuator.property -> property: string "The name of the property"
+#+ * Actuator|PropertyActuator.value -> value: string "The value to use, use around strings"
+#+ * Actuator|RandomActuator.chance -> chance: float "Pick a number between 0 and 1. Success if you stay below this value"
+#+ * Actuator|RandomActuator.distribution -> distribution: enum "Choose the type of distribution"
+#+ * Actuator|RandomActuator.float_max -> float_max: float "Choose a number from a range. Upper boundary of the range"
+#+ * Actuator|RandomActuator.float_mean -> float_mean: float "A normal distribution. Mean of the distribution"
+#+ * Actuator|RandomActuator.float_min -> float_min: float "Choose a number from a range. Lower boundary of the range"
+#+ * Actuator|RandomActuator.float_value -> float_value: float "Always return this number"
+#+ * Actuator|RandomActuator.half_life_time -> half_life_time: float "Negative exponential dropoff"
+#+ * Actuator|RandomActuator.int_max -> int_max: int "Choose a number from a range. Upper boundary of the range"
+#+ * Actuator|RandomActuator.int_mean -> int_mean: float "Expected mean value of the distribution"
+#+ * Actuator|RandomActuator.int_min -> int_min: int "Choose a number from a range. Lower boundary of the range"
+#+ * Actuator|RandomActuator.int_value -> int_value: int "Always return this number"
+#+ * Actuator|RandomActuator.property -> property: string "Assign the random value to this property"
+#+ * Actuator|RandomActuator.seed -> seed: int "Initial seed of the random generator. Use Python for more freedom (choose 0 for not random)"
+#+ * Actuator|RandomActuator.standard_derivation -> standard_derivation: float "A normal distribution. Standard deviation of the distribution"
+#Actuator|RandomActuator.use_always_true -> use_always_true: boolean "Always false or always true"
+#+ * Actuator|SceneActuator.camera -> camera: pointer "Set this Camera. Leave empty to refer to self object"
+#+ * Actuator|SceneActuator.mode -> mode: enum "NO DESCRIPTION"
+#+ * Actuator|SceneActuator.scene -> scene: pointer "Set the Scene to be added/removed/paused/resumed"
+#+ * Actuator|ShapeActionActuator.action -> action: pointer "NO DESCRIPTION"
+#Actuator|ShapeActionActuator.frame_blend_in -> frame_blend_in: int "Number of frames of motion blending"
+#+ * Actuator|ShapeActionActuator.frame_end -> frame_end: int "NO DESCRIPTION"
+#+ * Actuator|ShapeActionActuator.frame_property -> frame_property: string "Assign the actions current frame number to this property"
+#+ * Actuator|ShapeActionActuator.frame_start -> frame_start: int "NO DESCRIPTION"
+#+ * Actuator|ShapeActionActuator.mode -> mode: enum "Action playback type"
+#+ * Actuator|ShapeActionActuator.priority -> priority: int "Execution priority - lower numbers will override actions with higher numbers. With 2 or more actions at once, the overriding channels must be lower in the stack"
+#+ * Actuator|ShapeActionActuator.property -> property: string "Use this property to define the Action position"
+#Actuator|ShapeActionActuator.use_continue_last_frame -> use_continue_last_frame: boolean "Restore last frame when switching on/off, otherwise play from the start each time"
+#+ * Actuator|SoundActuator.cone_inner_angle_3d -> cone_inner_angle_3d: float "The angle of the inner cone"
+#+ * Actuator|SoundActuator.cone_outer_angle_3d -> cone_outer_angle_3d: float "The angle of the outer cone"
+#+ * Actuator|SoundActuator.cone_outer_gain_3d -> cone_outer_gain_3d: float "The gain outside the outer cone. The gain in the outer cone will be interpolated between this value and the normal gain in the inner cone"
+#Actuator|SoundActuator.distance_3d_max -> distance_3d_max: float "The maximum distance at which you can hear the sound"
+#Actuator|SoundActuator.distance_3d_reference -> distance_3d_reference: float "The distance where the sound has a gain of 1.0"
+#Actuator|SoundActuator.gain_3d_max -> gain_3d_max: float "The maximum gain of the sound, no matter how near it is"
+#Actuator|SoundActuator.gain_3d_min -> gain_3d_min: float "The minimum gain of the sound, no matter how far it is away"
+#+ * Actuator|SoundActuator.mode -> mode: enum "NO DESCRIPTION"
+#+ * Actuator|SoundActuator.pitch -> pitch: float "Sets the pitch of the sound"
+#+ * Actuator|SoundActuator.rolloff_factor_3d -> rolloff_factor_3d: float "The influence factor on volume depending on distance"
+#+ * Actuator|SoundActuator.sound -> sound: pointer "NO DESCRIPTION"
+#Actuator|SoundActuator.use_sound_3d -> use_sound_3d: boolean "Enable/Disable 3D Sound"
+#+ * Actuator|SoundActuator.volume -> volume: float "Sets the initial volume of the sound"
+#+ * Actuator|StateActuator.operation -> operation: enum "Select the bit operation on object state mask"
+#Actuator|StateActuator.states -> states: boolean[30] "NO DESCRIPTION"
+#Actuator|VisibilityActuator.apply_to_children -> apply_to_children: boolean "Set all the children of this object to the same visibility/occlusion recursively"
+#Actuator|VisibilityActuator.use_occlusion -> use_occlusion: boolean "Set the object to occlude objects behind it. Initialized from the object type in physics button"
+#Actuator|VisibilityActuator.use_visible -> use_visible: boolean "Set the objects visible. Initialized from the objects render restriction toggle (access in the outliner)"
+#+ * Addon.module -> module: string "Module name"
+#+ * AnimData.action -> action: pointer "Active Action for this datablock"
+#AnimData.action_blend_type -> action_blend_type: enum "Method used for combining Active Actions result with result of NLA stack"
+#+ * AnimData.action_extrapolation -> action_extrapolation: enum "Action to take for gaps past the Active Actions range (when evaluating with NLA)"
+#+ * AnimData.action_influence -> action_influence: float "Amount the Active Action contributes to the result of the NLA stack"
+#+ * AnimData.drivers -> drivers: collection, "(read-only) The Drivers/Expressions for this datablock"
+#+ * AnimData.nla_tracks -> nla_tracks: collection, "(read-only) NLA Tracks (i.e. Animation Layers)"
+#AnimData.use_nla -> use_nla: boolean "NLA stack is evaluated when evaluating this block"
+#AnimViz.motion_path -> motion_path: pointer, "(read-only) Motion Path settings for visualisation"
+#AnimViz.onion_skin_frames -> onion_skin_frames: pointer, "(read-only) Onion Skinning (ghosting) settings for visualisation"
+#+ * AnimVizMotionPaths.bake_location -> bake_location: enum "When calculating Bone Paths, use Head or Tips"
+#AnimVizMotionPaths.frame_after -> frame_after: int "Number of frames to show after the current frame (only for Around Current Frame Onion-skinning method)"
+#AnimVizMotionPaths.frame_before -> frame_before: int "Number of frames to show before the current frame (only for Around Current Frame Onion-skinning method)"
+#+ * AnimVizMotionPaths.frame_end -> frame_end: int "End frame of range of paths to display/calculate (not for Around Current Frame Onion-skinning method)"
+#+ * AnimVizMotionPaths.frame_start -> frame_start: int "Starting frame of range of paths to display/calculate (not for Around Current Frame Onion-skinning method)"
+#+ * AnimVizMotionPaths.frame_step -> frame_step: int "Number of frames between paths shown (not for On Keyframes Onion-skinning method)"
+#+ * AnimVizMotionPaths.show_frame_numbers -> show_frame_numbers: boolean "Show frame numbers on Motion Paths"
+#AnimVizMotionPaths.show_keyframe_action_all -> show_keyframe_action_all: boolean "For bone motion paths, search whole Action for keyframes instead of in group with matching name only (is slower)"
+#AnimVizMotionPaths.show_keyframe_highlight -> show_keyframe_highlight: boolean "Emphasize position of keyframes on Motion Paths"
+#+ * AnimVizMotionPaths.show_keyframe_numbers -> show_keyframe_numbers: boolean "Show frame numbers of Keyframes on Motion Paths"
+#+ * AnimVizMotionPaths.type -> type: enum "Type of range to show for Motion Paths"
+#AnimVizOnionSkinning.frame_after -> frame_after: int "Number of frames to show after the current frame (only for Around Current Frame Onion-skinning method)"
+#AnimVizOnionSkinning.frame_before -> frame_before: int "Number of frames to show before the current frame (only for Around Current Frame Onion-skinning method)"
+#+ * AnimVizOnionSkinning.frame_end -> frame_end: int "End frame of range of Ghosts to display (not for Around Current Frame Onion-skinning method)"
+#+ * AnimVizOnionSkinning.frame_start -> frame_start: int "Starting frame of range of Ghosts to display (not for Around Current Frame Onion-skinning method)"
+#+ * AnimVizOnionSkinning.frame_step -> frame_step: int "Number of frames between ghosts shown (not for On Keyframes Onion-skinning method)"
+#AnimVizOnionSkinning.show_only_selected -> show_only_selected: boolean "For Pose-Mode drawing, only draw ghosts for selected bones"
+#+ * AnimVizOnionSkinning.type -> type: enum "Method used for determining what ghosts get drawn"
+#MAKE PROPERTY OF A COLLECTION * Area.active_space -> active_space: pointer, "(read-only) Space currently being displayed in this area"
+#+ * Area.regions -> regions: collection, "(read-only) Regions this area is subdivided in"
+#+ * Area.show_menus -> show_menus: boolean "Show menus in the header"
+#+ * Area.spaces -> spaces: collection, "(read-only) Spaces contained in this area, the first space is active"
+#+ * Area.type -> type: enum "Space type"
+#+ * ArmatureBones.active -> active: pointer "Armatures active bone"
+#+ * ArmatureEditBones.active -> active: pointer "Armatures active edit bone"
+#+ * BackgroundImage.image -> image: pointer "Image displayed and edited in this space"
+#+ * BackgroundImage.image_user -> image_user: pointer, "(read-only) Parameters defining which layer, pass and frame of the image is displayed"
+#+ * BackgroundImage.offset_x -> offset_x: float "Offsets image horizontally from the world origin"
+#+ * BackgroundImage.offset_y -> offset_y: float "Offsets image vertically from the world origin"
+#+ * BackgroundImage.show_expanded -> show_expanded: boolean "Show the expanded in the user interface"
+#+ * BackgroundImage.size -> size: float "Scaling factor for the background image"
+#+ * BackgroundImage.transparency -> transparency: float "Amount to blend the image against the background color"
+#+ * BackgroundImage.view_axis -> view_axis: enum "The axis to display the image on"
+#+ * BezierSplinePoint.co -> co: float[3] "Coordinates of the control point"
+#BezierSplinePoint.handle_left -> handle_left: float[3] "Coordinates of the first handle"
+#BezierSplinePoint.handle_left_type -> handle_left_type: enum "Handle types"
+#BezierSplinePoint.handle_right -> handle_right: float[3] "Coordinates of the second handle"
+#BezierSplinePoint.handle_right_type -> handle_right_type: enum "Handle types"
+#+ * BezierSplinePoint.hide -> hide: boolean "Visibility status"
+#+ * BezierSplinePoint.radius -> radius: float, "(read-only) Radius for bevelling"
+#+ * BezierSplinePoint.select_control_point -> select_control_point: boolean "Control point selection status"
+#+ * BezierSplinePoint.select_left_handle -> select_left_handle: boolean "Handle 1 selection status"
+#+ * BezierSplinePoint.select_right_handle -> select_right_handle: boolean "Handle 2 selection status"
+#+ * BezierSplinePoint.tilt -> tilt: float "Tilt in 3D View"
+#+ * BezierSplinePoint.weight -> weight: float "Softbody goal weight"
+#+ * BlenderRNA.structs -> structs: collection, "(read-only)"
+#+ * BoidRule.name -> name: string "Boid rule name"
+#+ * BoidRule.type -> type: enum, "(read-only)"
+#BoidRule.use_in_air -> use_in_air: boolean "Use rule when boid is flying"
+#BoidRule.use_on_land -> use_on_land: boolean "Use rule when boid is on land"
+#+ * BoidRule|BoidRuleAverageSpeed.level -> level: float "How much velocitys z-component is kept constant"
+#+ * BoidRule|BoidRuleAverageSpeed.speed -> speed: float "Percentage of maximum speed"
+#+ * BoidRule|BoidRuleAverageSpeed.wander -> wander: float "How fast velocitys direction is randomized"
+#+ * BoidRule|BoidRuleAvoid.fear_factor -> fear_factor: float "Avoid object if danger from it is above this threshold"
+#+ * BoidRule|BoidRuleAvoid.object -> object: pointer "Object to avoid"
+#BoidRule|BoidRuleAvoid.use_predict -> use_predict: boolean "Predict target movement"
+#+ * BoidRule|BoidRuleAvoidCollision.look_ahead -> look_ahead: float "Time to look ahead in seconds"
+#BoidRule|BoidRuleAvoidCollision.use_avoid -> use_avoid: boolean "Avoid collision with other boids"
+#BoidRule|BoidRuleAvoidCollision.use_avoid_collision -> use_avoid_collision: boolean "Avoid collision with deflector objects"
+#+ * BoidRule|BoidRuleFight.distance -> distance: float "Attack boids at max this distance"
+#+ * BoidRule|BoidRuleFight.flee_distance -> flee_distance: float "Flee to this distance"
+#+ * BoidRule|BoidRuleFollowLeader.distance -> distance: float "Distance behind leader to follow"
+#+ * BoidRule|BoidRuleFollowLeader.object -> object: pointer "Follow this object instead of a boid"
+#BoidRule|BoidRuleFollowLeader.queue_count -> queue_count: int "How many boids in a line"
+#BoidRule|BoidRuleFollowLeader.use_line -> use_line: boolean "Follow leader in a line"
+#+ * BoidRule|BoidRuleGoal.object -> object: pointer "Goal object"
+#BoidRule|BoidRuleGoal.use_predict -> use_predict: boolean "Predict target movement"
+#+ * BoidSettings.accuracy -> accuracy: float "Accuracy of attack"
+#+ * BoidSettings.active_boid_state -> active_boid_state: pointer, "(read-only)"
+#+ * BoidSettings.active_boid_state_index -> active_boid_state_index: int "NO DESCRIPTION"
+#+ * BoidSettings.aggression -> aggression: float "Boid will fight this times stronger enemy"
+#BoidSettings.air_acc_max -> air_acc_max: float "Maximum acceleration in air (relative to maximum speed)"
+#BoidSettings.air_ave_max -> air_ave_max: float "Maximum angular velocity in air (relative to 180 degrees)"
+#+ * BoidSettings.air_personal_space -> air_personal_space: float "Radius of boids personal space in air (% of particle size)"
+#BoidSettings.air_speed_max -> air_speed_max: float "Maximum speed in air"
+#BoidSettings.air_speed_min -> air_speed_min: float "Minimum speed in air (relative to maximum speed)"
+#BoidSettings.bank -> bank: float "Amount of rotation around velocity vector on turns"
+#+ * BoidSettings.health -> health: float "Initial boid health when born"
+#+ * BoidSettings.height -> height: float "Boid height relative to particle size"
+#BoidSettings.land_acc_max -> land_acc_max: float "Maximum acceleration on land (relative to maximum speed)"
+#BoidSettings.land_ave_max -> land_ave_max: float "Maximum angular velocity on land (relative to 180 degrees)"
+#+ * BoidSettings.land_jump_speed -> land_jump_speed: float "Maximum speed for jumping"
+#+ * BoidSettings.land_personal_space -> land_personal_space: float "Radius of boids personal space on land (% of particle size)"
+#BoidSettings.land_smooth -> land_smooth: float "How smoothly the boids land"
+#BoidSettings.land_speed_max -> land_speed_max: float "Maximum speed on land"
+#+ * BoidSettings.land_stick_force -> land_stick_force: float "How strong a force must be to start effecting a boid on land"
+#+ * BoidSettings.range -> range: float "The maximum distance from which a boid can attack"
+#+ * BoidSettings.states -> states: collection, "(read-only)"
+#+ * BoidSettings.strength -> strength: float "Maximum caused damage on attack per second"
+#BoidSettings.use_climb -> use_climb: boolean "Allow boids to climb goal objects"
+#BoidSettings.use_flight -> use_flight: boolean "Allow boids to move in air"
+#BoidSettings.use_land -> use_land: boolean "Allow boids to move on land"
+#+ * BoidState.active_boid_rule -> active_boid_rule: pointer, "(read-only)"
+#+ * BoidState.active_boid_rule_index -> active_boid_rule_index: int "NO DESCRIPTION"
+#+ * BoidState.falloff -> falloff: float "NO DESCRIPTION"
+#+ * BoidState.name -> name: string "Boid state name"
+#BoidState.rule_fuzzy -> rule_fuzzy: float "NO DESCRIPTION"
+#+ * BoidState.rules -> rules: collection, "(read-only)"
+#+ * BoidState.ruleset_type -> ruleset_type: enum "How the rules in the list are evaluated"
+#+ * BoidState.volume -> volume: float "NO DESCRIPTION"
+#+ * Bone.bbone_in -> bbone_in: float "Length of first Bezier Handle (for B-Bones only)"
+#+ * Bone.bbone_out -> bbone_out: float "Length of second Bezier Handle (for B-Bones only)"
+#+ * Bone.bbone_segments -> bbone_segments: int "Number of subdivisions of bone (for B-Bones only)"
+#+ * Bone.children -> children: collection, "(read-only) Bones which are children of this bone"
+#+ * Bone.envelope_distance -> envelope_distance: float "Bone deformation distance (for Envelope deform only)"
+#+ * Bone.envelope_weight -> envelope_weight: float "Bone deformation weight (for Envelope deform only)"
+#+ * Bone.head -> head: float[3] "Location of head end of the bone relative to its parent"
+#+ * Bone.head_local -> head_local: float[3] "Location of head end of the bone relative to armature"
+#+ * Bone.head_radius -> head_radius: float "Radius of head of bone (for Envelope deform only)"
+#+ * Bone.hide -> hide: boolean "Bone is not visible when it is not in Edit Mode (i.e. in Object or Pose Modes)"
+#+ * Bone.hide_select -> hide_select: boolean "Bone is able to be selected"
+#Bone.layers -> layers: boolean[32] "Layers bone exists in"
+#+ * Bone.matrix -> matrix: float[9] "3x3 bone matrix"
+#+ * Bone.matrix_local -> matrix_local: float[16] "4x4 bone matrix relative to armature"
+#+ * Bone.name -> name: string "NO DESCRIPTION"
+#+ * Bone.parent -> parent: pointer, "(read-only) Parent bone (in same Armature)"
+#+ * Bone.select -> select: boolean "NO DESCRIPTION"
+#Bone.show_wire -> show_wire: boolean "Bone is always drawn as Wireframe regardless of viewport draw mode. Useful for non-obstructive custom bone shapes"
+#+ * Bone.tail -> tail: float[3] "Location of tail end of the bone"
+#+ * Bone.tail_local -> tail_local: float[3] "Location of tail end of the bone relative to armature"
+#+ * Bone.tail_radius -> tail_radius: float "Radius of tail of bone (for Envelope deform only)"
+#Bone.use_connect -> use_connect: boolean, "(read-only) When bone has a parent, bones head is struck to the parents tail"
+#Bone.use_cyclic_offset -> use_cyclic_offset: boolean "When bone doesnt have a parent, it receives cyclic offset effects"
+#Bone.use_deform -> use_deform: boolean "Bone does not deform any geometry"
+#Bone.use_envelope_multiply -> use_envelope_multiply: boolean "When deforming bone, multiply effects of Vertex Group weights with Envelope influence"
+#Bone.use_hinge -> use_hinge: boolean "Bone inherits rotation or scale from parent bone"
+#Bone.use_inherit_scale -> use_inherit_scale: boolean "Bone inherits scaling from parent bone"
+#Bone.use_local_location -> use_local_location: boolean "Bone location is set in local space"
+#+ * BoneGroup.color_set -> color_set: enum "Custom color set to use"
+#+ * BoneGroup.colors -> colors: pointer, "(read-only) Copy of the colors associated with the groups color set"
+#+ * BoneGroup.name -> name: string "NO DESCRIPTION"
+#+ * ClothCollisionSettings.collision_quality -> collision_quality: int "How many collision iterations should be done. (higher is better quality but slower)"
+#ClothCollisionSettings.distance_min -> distance_min: float "Minimum distance between collision objects before collision response takes in"
+#+ * ClothCollisionSettings.friction -> friction: float "Friction force if a collision happened. (higher = less movement)"
+#+ * ClothCollisionSettings.group -> group: pointer "Limit colliders to this Group"
+#+ * ClothCollisionSettings.self_collision_quality -> self_collision_quality: int "How many self collision iterations should be done. (higher is better quality but slower)"
+#ClothCollisionSettings.self_distance_min -> self_distance_min: float "0.5 means no distance at all, 1.0 is maximum distance"
+#+ * ClothCollisionSettings.self_friction -> self_friction: float "Friction/damping with self contact"
+#ClothCollisionSettings.use_collision -> use_collision: boolean "Enable collisions with other objects"
+#ClothCollisionSettings.use_self_collision -> use_self_collision: boolean "Enable self collisions"
+#+ * ClothSettings.air_damping -> air_damping: float "Air has normally some thickness which slows falling things down"
+#+ * ClothSettings.bending_stiffness -> bending_stiffness: float "Wrinkle coefficient. (higher = less smaller but more big wrinkles)"
+#+ * ClothSettings.bending_stiffness_max -> bending_stiffness_max: float "Maximum bending stiffness value"
+#+ * ClothSettings.bending_vertex_group -> bending_vertex_group: string "Vertex group for fine control over bending stiffness"
+#+ * ClothSettings.collider_friction -> collider_friction: float "NO DESCRIPTION"
+#+ * ClothSettings.effector_weights -> effector_weights: pointer, "(read-only)"
+#+ * ClothSettings.goal_default -> goal_default: float "Default Goal (vertex target position) value, when no Vertex Group used"
+#+ * ClothSettings.goal_friction -> goal_friction: float "Goal (vertex target position) friction"
+#+ * ClothSettings.goal_max -> goal_max: float "Goal maximum, vertex group weights are scaled to match this range"
+#+ * ClothSettings.goal_min -> goal_min: float "Goal minimum, vertex group weights are scaled to match this range"
+#+ * ClothSettings.goal_spring -> goal_spring: float "Goal (vertex target position) spring stiffness"
+#+ * ClothSettings.gravity -> gravity: float[3] "Gravity or external force vector"
+#+ * ClothSettings.internal_friction -> internal_friction: float "NO DESCRIPTION"
+#+ * ClothSettings.mass -> mass: float "Mass of cloth material"
+#+ * ClothSettings.mass_vertex_group -> mass_vertex_group: string "Vertex Group for pinning of vertices"
+#+ * ClothSettings.pin_stiffness -> pin_stiffness: float "Pin (vertex target position) spring stiffness"
+#+ * ClothSettings.pre_roll -> pre_roll: int "Simulation starts on this frame"
+#+ * ClothSettings.quality -> quality: int "Quality of the simulation in steps per frame. (higher is better quality but slower)"
+#+ * ClothSettings.rest_shape_key -> rest_shape_key: pointer "Shape key to use the rest spring lengths from"
+#+ * ClothSettings.spring_damping -> spring_damping: float "Damping of cloth velocity. (higher = more smooth, less jiggling)"
+#+ * ClothSettings.structural_stiffness -> structural_stiffness: float "Overall stiffness of structure"
+#+ * ClothSettings.structural_stiffness_max -> structural_stiffness_max: float "Maximum structural stiffness value"
+#+ * ClothSettings.structural_stiffness_vertex_group -> structural_stiffness_vertex_group: string "Vertex group for fine control over structural stiffness"
+#ClothSettings.use_pin_cloth -> use_pin_cloth: boolean "Enable pinning of cloth vertices to other objects/positions"
+#ClothSettings.use_stiffness_scale -> use_stiffness_scale: boolean "If enabled, stiffness can be scaled along a weight painted vertex group"
+#+ * CollisionSettings.absorption -> absorption: float "How much of effector force gets lost during collision with this object (in percent)"
+#+ * CollisionSettings.damping -> damping: float "Amount of damping during collision"
+#+ * CollisionSettings.damping_factor -> damping_factor: float "Amount of damping during particle collision"
+#CollisionSettings.damping_random -> damping_random: float "Random variation of damping"
+#+ * CollisionSettings.friction_factor -> friction_factor: float "Amount of friction during particle collision"
+#CollisionSettings.friction_random -> friction_random: float "Random variation of friction"
+#+ * CollisionSettings.permeability -> permeability: float "Chance that the particle will pass through the mesh"
+#+ * CollisionSettings.stickness -> stickness: float "Amount of stickness to surface collision"
+#CollisionSettings.thickness_inner -> thickness_inner: float "Inner face thickness"
+#CollisionSettings.thickness_outer -> thickness_outer: float "Outer face thickness"
+#+ * CollisionSettings.use -> use: boolean "Enable this objects as a collider for physics systems"
+#CollisionSettings.use_particle_kill -> use_particle_kill: boolean "Kill collided particles"
+#+ * ColorRamp.elements -> elements: collection, "(read-only)"
+#+ * ColorRamp.interpolation -> interpolation: enum "NO DESCRIPTION"
+#+ * ColorRampElement.color -> color: float[4] "NO DESCRIPTION"
+#+ * ColorRampElement.position -> position: float "NO DESCRIPTION"
+#ConsoleLine.body -> body: string "Text in the line"
+#+ * ConsoleLine.current_character -> current_character: int "NO DESCRIPTION"
+#+ * Constraint.active -> active: boolean "Constraint is the one being edited"
+#Constraint.error_location -> error_location: float, "(read-only) Amount of residual error in Blender space unit for constraints that work on position"
+#Constraint.error_rotation -> error_rotation: float, "(read-only) Amount of residual error in radiant for constraints that work on orientation"
+#+ * Constraint.influence -> influence: float "Amount of influence constraint will have on the final solution"
+#Constraint.is_proxy_local -> is_proxy_local: boolean "Constraint was added in this proxy instance (i.e. did not belong to source Armature)"
+#Constraint.is_valid -> is_valid: boolean, "(read-only) Constraint has invalid settings and will not be evaluated"
+#+ * Constraint.mute -> mute: boolean "Enable/Disable Constraint"
+#+ * Constraint.name -> name: string "Constraint name"
+#+ * Constraint.owner_space -> owner_space: enum "Space that owner is evaluated in"
+#Constraint.show_expanded -> show_expanded: boolean "Constraints panel is expanded in UI"
+#+ * Constraint.target_space -> target_space: enum "Space that target is evaluated in"
+#+ * Constraint.type -> type: enum, "(read-only)"
+#+ * ConstraintTarget.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * ConstraintTarget.target -> target: pointer "Target Object"
+#+ * Constraint|ActionConstraint.action -> action: pointer "NO DESCRIPTION"
+#+ * Constraint|ActionConstraint.frame_end -> frame_end: int "Last frame of the Action to use"
+#+ * Constraint|ActionConstraint.frame_start -> frame_start: int "First frame of the Action to use"
+#Constraint|ActionConstraint.max -> max: float "Maximum value for target channel range"
+#Constraint|ActionConstraint.min -> min: float "Minimum value for target channel range"
+#+ * Constraint|ActionConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|ActionConstraint.target -> target: pointer "Target Object"
+#+ * Constraint|ActionConstraint.transform_channel -> transform_channel: enum "Transformation channel from the target that is used to key the Action"
+#+ * Constraint|ChildOfConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|ChildOfConstraint.target -> target: pointer "Target Object"
+#+ * Constraint|ChildOfConstraint.use_location_x -> use_location_x: boolean "Use X Location of Parent"
+#+ * Constraint|ChildOfConstraint.use_location_y -> use_location_y: boolean "Use Y Location of Parent"
+#+ * Constraint|ChildOfConstraint.use_location_z -> use_location_z: boolean "Use Z Location of Parent"
+#+ * Constraint|ChildOfConstraint.use_rotation_x -> use_rotation_x: boolean "Use X Rotation of Parent"
+#+ * Constraint|ChildOfConstraint.use_rotation_y -> use_rotation_y: boolean "Use Y Rotation of Parent"
+#+ * Constraint|ChildOfConstraint.use_rotation_z -> use_rotation_z: boolean "Use Z Rotation of Parent"
+#+ * Constraint|ChildOfConstraint.use_scale_x -> use_scale_x: boolean "Use X Scale of Parent"
+#+ * Constraint|ChildOfConstraint.use_scale_y -> use_scale_y: boolean "Use Y Scale of Parent"
+#+ * Constraint|ChildOfConstraint.use_scale_z -> use_scale_z: boolean "Use Z Scale of Parent"
+#+ * Constraint|ClampToConstraint.main_axis -> main_axis: enum "Main axis of movement"
+#+ * Constraint|ClampToConstraint.target -> target: pointer "Target Object"
+#Constraint|ClampToConstraint.use_cyclic -> use_cyclic: boolean "Treat curve as cyclic curve (no clamping to curve bounding box"
+#+ * Constraint|CopyLocationConstraint.head_tail -> head_tail: float "Target along length of bone: Head=0, Tail=1"
+#+ * Constraint|CopyLocationConstraint.invert_x -> invert_x: boolean "Invert the X location"
+#+ * Constraint|CopyLocationConstraint.invert_y -> invert_y: boolean "Invert the Y location"
+#+ * Constraint|CopyLocationConstraint.invert_z -> invert_z: boolean "Invert the Z location"
+#+ * Constraint|CopyLocationConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|CopyLocationConstraint.target -> target: pointer "Target Object"
+#+ * Constraint|CopyLocationConstraint.use_offset -> use_offset: boolean "Add original location into copied location"
+#+ * Constraint|CopyLocationConstraint.use_x -> use_x: boolean "Copy the targets X location"
+#+ * Constraint|CopyLocationConstraint.use_y -> use_y: boolean "Copy the targets Y location"
+#+ * Constraint|CopyLocationConstraint.use_z -> use_z: boolean "Copy the targets Z location"
+#+ * Constraint|CopyRotationConstraint.invert_x -> invert_x: boolean "Invert the X rotation"
+#+ * Constraint|CopyRotationConstraint.invert_y -> invert_y: boolean "Invert the Y rotation"
+#+ * Constraint|CopyRotationConstraint.invert_z -> invert_z: boolean "Invert the Z rotation"
+#+ * Constraint|CopyRotationConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|CopyRotationConstraint.target -> target: pointer "Target Object"
+#+ * Constraint|CopyRotationConstraint.use_offset -> use_offset: boolean "Add original rotation into copied rotation"
+#+ * Constraint|CopyRotationConstraint.use_x -> use_x: boolean "Copy the targets X rotation"
+#+ * Constraint|CopyRotationConstraint.use_y -> use_y: boolean "Copy the targets Y rotation"
+#+ * Constraint|CopyRotationConstraint.use_z -> use_z: boolean "Copy the targets Z rotation"
+#+ * Constraint|CopyScaleConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|CopyScaleConstraint.target -> target: pointer "Target Object"
+#+ * Constraint|CopyScaleConstraint.use_offset -> use_offset: boolean "Add original scale into copied scale"
+#+ * Constraint|CopyScaleConstraint.use_x -> use_x: boolean "Copy the targets X scale"
+#+ * Constraint|CopyScaleConstraint.use_y -> use_y: boolean "Copy the targets Y scale"
+#+ * Constraint|CopyScaleConstraint.use_z -> use_z: boolean "Copy the targets Z scale"
+#+ * Constraint|CopyTransformsConstraint.head_tail -> head_tail: float "Target along length of bone: Head=0, Tail=1"
+#+ * Constraint|CopyTransformsConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|CopyTransformsConstraint.target -> target: pointer "Target Object"
+#+ * Constraint|DampedTrackConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|DampedTrackConstraint.target -> target: pointer "Target Object"
+#Constraint|DampedTrackConstraint.track_axis -> track_axis: enum "Axis that points to the target object"
+#+ * Constraint|FloorConstraint.floor_location -> floor_location: enum "Location of target that object will not pass through"
+#+ * Constraint|FloorConstraint.offset -> offset: float "Offset of floor from object origin"
+#+ * Constraint|FloorConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|FloorConstraint.target -> target: pointer "Target Object"
+#+ * Constraint|FloorConstraint.use_rotation -> use_rotation: boolean "Use the targets rotation to determine floor"
+#Constraint|FloorConstraint.use_sticky -> use_sticky: boolean "Immobilize object while constrained"
+#Constraint|FollowPathConstraint.forward_axis -> forward_axis: enum "Axis that points forward along the path"
+#+ * Constraint|FollowPathConstraint.offset -> offset: int "Offset from the position corresponding to the time frame"
+#+ * Constraint|FollowPathConstraint.offset_factor -> offset_factor: float "Percentage value defining target position along length of bone"
+#+ * Constraint|FollowPathConstraint.target -> target: pointer "Target Object"
+#Constraint|FollowPathConstraint.up_axis -> up_axis: enum "Axis that points upward"
+#+ * Constraint|FollowPathConstraint.use_curve_follow -> use_curve_follow: boolean "Object will follow the heading and banking of the curve"
+#+ * Constraint|FollowPathConstraint.use_curve_radius -> use_curve_radius: boolean "Objects scale by the curve radius"
+#Constraint|FollowPathConstraint.use_fixed_location -> use_fixed_location: boolean "Object will stay locked to a single point somewhere along the length of the curve regardless of time"
+#Constraint|KinematicConstraint.chain_count -> chain_count: int "How many bones are included in the IK effect - 0 uses all bones"
+#+ * Constraint|KinematicConstraint.distance -> distance: float "Radius of limiting sphere"
+#+ * Constraint|KinematicConstraint.ik_type -> ik_type: enum "NO DESCRIPTION"
+#+ * Constraint|KinematicConstraint.iterations -> iterations: int "Maximum number of solving iterations"
+#+ * Constraint|KinematicConstraint.limit_mode -> limit_mode: enum "Distances in relation to sphere of influence to allow"
+#Constraint|KinematicConstraint.lock_location_x -> lock_location_x: boolean "Constraint position along X axis"
+#Constraint|KinematicConstraint.lock_location_y -> lock_location_y: boolean "Constraint position along Y axis"
+#Constraint|KinematicConstraint.lock_location_z -> lock_location_z: boolean "Constraint position along Z axis"
+#Constraint|KinematicConstraint.lock_rotation_x -> lock_rotation_x: boolean "Constraint rotation along X axis"
+#Constraint|KinematicConstraint.lock_rotation_y -> lock_rotation_y: boolean "Constraint rotation along Y axis"
+#Constraint|KinematicConstraint.lock_rotation_z -> lock_rotation_z: boolean "Constraint rotation along Z axis"
+#+ * Constraint|KinematicConstraint.orient_weight -> orient_weight: float "For Tree-IK: Weight of orientation control for this target"
+#+ * Constraint|KinematicConstraint.pole_angle -> pole_angle: float "Pole rotation offset"
+#+ * Constraint|KinematicConstraint.pole_subtarget -> pole_subtarget: string "NO DESCRIPTION"
+#+ * Constraint|KinematicConstraint.pole_target -> pole_target: pointer "Object for pole rotation"
+#Constraint|KinematicConstraint.reference_axis -> reference_axis: enum "Constraint axis Lock options relative to Bone or Target reference"
+#+ * Constraint|KinematicConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|KinematicConstraint.target -> target: pointer "Target Object"
+#Constraint|KinematicConstraint.use_location -> use_location: boolean "Chain follows position of target"
+#+ * Constraint|KinematicConstraint.use_rotation -> use_rotation: boolean "Chain follows rotation of target"
+#+ * Constraint|KinematicConstraint.use_stretch -> use_stretch: boolean "Enable IK Stretching"
+#+ * Constraint|KinematicConstraint.use_tail -> use_tail: boolean "Include bones tail as last element in chain"
+#+ * Constraint|KinematicConstraint.use_target -> use_target: boolean "Disable for targetless IK"
+#+ * Constraint|KinematicConstraint.weight -> weight: float "For Tree-IK: Weight of position control for this target"
+#+ * Constraint|LimitDistanceConstraint.distance -> distance: float "Radius of limiting sphere"
+#+ * Constraint|LimitDistanceConstraint.limit_mode -> limit_mode: enum "Distances in relation to sphere of influence to allow"
+#+ * Constraint|LimitDistanceConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|LimitDistanceConstraint.target -> target: pointer "Target Object"
+#Constraint|LimitLocationConstraint.max_x -> max_x: float "Highest X value to allow"
+#Constraint|LimitLocationConstraint.max_y -> max_y: float "Highest Y value to allow"
+#Constraint|LimitLocationConstraint.max_z -> max_z: float "Highest Z value to allow"
+#Constraint|LimitLocationConstraint.min_x -> min_x: float "Lowest X value to allow"
+#Constraint|LimitLocationConstraint.min_y -> min_y: float "Lowest Y value to allow"
+#Constraint|LimitLocationConstraint.min_z -> min_z: float "Lowest Z value to allow"
+#Constraint|LimitLocationConstraint.use_max_x -> use_max_x: boolean "Use the maximum X value"
+#Constraint|LimitLocationConstraint.use_max_y -> use_max_y: boolean "Use the maximum Y value"
+#Constraint|LimitLocationConstraint.use_max_z -> use_max_z: boolean "Use the maximum Z value"
+#Constraint|LimitLocationConstraint.use_min_x -> use_min_x: boolean "Use the minimum X value"
+#Constraint|LimitLocationConstraint.use_min_y -> use_min_y: boolean "Use the minimum Y value"
+#Constraint|LimitLocationConstraint.use_min_z -> use_min_z: boolean "Use the minimum Z value"
+#Constraint|LimitLocationConstraint.use_transform_limit -> use_transform_limit: boolean "Transforms are affected by this constraint as well"
+#Constraint|LimitRotationConstraint.max_x -> max_x: float "Highest X value to allow"
+#Constraint|LimitRotationConstraint.max_y -> max_y: float "Highest Y value to allow"
+#Constraint|LimitRotationConstraint.max_z -> max_z: float "Highest Z value to allow"
+#Constraint|LimitRotationConstraint.min_x -> min_x: float "Lowest X value to allow"
+#Constraint|LimitRotationConstraint.min_y -> min_y: float "Lowest Y value to allow"
+#Constraint|LimitRotationConstraint.min_z -> min_z: float "Lowest Z value to allow"
+#+ * Constraint|LimitRotationConstraint.use_limit_x -> use_limit_x: boolean "Use the minimum X value"
+#+ * Constraint|LimitRotationConstraint.use_limit_y -> use_limit_y: boolean "Use the minimum Y value"
+#+ * Constraint|LimitRotationConstraint.use_limit_z -> use_limit_z: boolean "Use the minimum Z value"
+#Constraint|LimitRotationConstraint.use_transform_limit -> use_transform_limit: boolean "Transforms are affected by this constraint as well"
+#Constraint|LimitScaleConstraint.max_x -> max_x: float "Highest X value to allow"
+#Constraint|LimitScaleConstraint.max_y -> max_y: float "Highest Y value to allow"
+#Constraint|LimitScaleConstraint.max_z -> max_z: float "Highest Z value to allow"
+#Constraint|LimitScaleConstraint.min_x -> min_x: float "Lowest X value to allow"
+#Constraint|LimitScaleConstraint.min_y -> min_y: float "Lowest Y value to allow"
+#Constraint|LimitScaleConstraint.min_z -> min_z: float "Lowest Z value to allow"
+#Constraint|LimitScaleConstraint.use_max_x -> use_max_x: boolean "Use the maximum X value"
+#Constraint|LimitScaleConstraint.use_max_y -> use_max_y: boolean "Use the maximum Y value"
+#Constraint|LimitScaleConstraint.use_max_z -> use_max_z: boolean "Use the maximum Z value"
+#Constraint|LimitScaleConstraint.use_min_x -> use_min_x: boolean "Use the minimum X value"
+#Constraint|LimitScaleConstraint.use_min_y -> use_min_y: boolean "Use the minimum Y value"
+#Constraint|LimitScaleConstraint.use_min_z -> use_min_z: boolean "Use the minimum Z value"
+#Constraint|LimitScaleConstraint.use_transform_limit -> use_transform_limit: boolean "Transforms are affected by this constraint as well"
+#Constraint|LockedTrackConstraint.lock_axis -> lock_axis: enum "Axis that points upward"
+#+ * Constraint|LockedTrackConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|LockedTrackConstraint.target -> target: pointer "Target Object"
+#Constraint|LockedTrackConstraint.track_axis -> track_axis: enum "Axis that points to the target object"
+#Constraint|MaintainVolumeConstraint.free_axis -> free_axis: enum "The free scaling axis of the object"
+#+ * Constraint|MaintainVolumeConstraint.volume -> volume: float "Volume of the bone at rest"
+#+ * Constraint|PivotConstraint.head_tail -> head_tail: float "Target along length of bone: Head=0, Tail=1"
+#+ * Constraint|PivotConstraint.offset -> offset: float[3] "Offset of pivot from target (when set), or from owners location (when Fixed Position is off), or the absolute pivot point"
+#Constraint|PivotConstraint.rotation_range -> rotation_range: enum "Rotation range on which pivoting should occur"
+#+ * Constraint|PivotConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|PivotConstraint.target -> target: pointer "Target Object, defining the position of the pivot when defined"
+#Constraint|PivotConstraint.use_relative_location -> use_relative_location: boolean "Offset will be an absolute point in space instead of relative to the target"
+#Constraint|PythonConstraint.has_script_error -> has_script_error: boolean, "(read-only) The linked Python script has thrown an error"
+#Constraint|PythonConstraint.target_count -> target_count: int "Usually only 1-3 are needed"
+#+ * Constraint|PythonConstraint.targets -> targets: collection, "(read-only) Target Objects"
+#+ * Constraint|PythonConstraint.text -> text: pointer "The text object that contains the Python script"
+#+ * Constraint|PythonConstraint.use_targets -> use_targets: boolean "Use the targets indicated in the constraint panel"
+#+ * Constraint|RigidBodyJointConstraint.axis_x -> axis_x: float "Rotate pivot on X axis in degrees"
+#+ * Constraint|RigidBodyJointConstraint.axis_y -> axis_y: float "Rotate pivot on Y axis in degrees"
+#+ * Constraint|RigidBodyJointConstraint.axis_z -> axis_z: float "Rotate pivot on Z axis in degrees"
+#+ * Constraint|RigidBodyJointConstraint.child -> child: pointer "Child object"
+#+ * Constraint|RigidBodyJointConstraint.pivot_type -> pivot_type: enum "NO DESCRIPTION"
+#+ * Constraint|RigidBodyJointConstraint.pivot_x -> pivot_x: float "Offset pivot on X"
+#+ * Constraint|RigidBodyJointConstraint.pivot_y -> pivot_y: float "Offset pivot on Y"
+#+ * Constraint|RigidBodyJointConstraint.pivot_z -> pivot_z: float "Offset pivot on Z"
+#Constraint|RigidBodyJointConstraint.show_pivot -> show_pivot: boolean "Display the pivot point and rotation in 3D view"
+#+ * Constraint|RigidBodyJointConstraint.target -> target: pointer "Target Object"
+#Constraint|RigidBodyJointConstraint.use_linked_collision -> use_linked_collision: boolean "Disable collision between linked bodies"
+#+ * Constraint|ShrinkwrapConstraint.distance -> distance: float "Distance to Target"
+#+ * Constraint|ShrinkwrapConstraint.shrinkwrap_type -> shrinkwrap_type: enum "Selects type of shrinkwrap algorithm for target position"
+#+ * Constraint|ShrinkwrapConstraint.target -> target: pointer "Target Object"
+#+ * Constraint|ShrinkwrapConstraint.use_x -> use_x: boolean "Projection over X Axis"
+#+ * Constraint|ShrinkwrapConstraint.use_y -> use_y: boolean "Projection over Y Axis"
+#+ * Constraint|ShrinkwrapConstraint.use_z -> use_z: boolean "Projection over Z Axis"
+#Constraint|SplineIKConstraint.chain_count -> chain_count: int "How many bones are included in the chain"
+#+ * Constraint|SplineIKConstraint.joint_bindings -> joint_bindings: float[32] "(EXPERIENCED USERS ONLY) The relative positions of the joints along the chain as percentages"
+#+ * Constraint|SplineIKConstraint.target -> target: pointer "Curve that controls this relationship"
+#Constraint|SplineIKConstraint.use_chain_offset -> use_chain_offset: boolean "Offset the entire chain relative to the root joint"
+#+ * Constraint|SplineIKConstraint.use_curve_radius -> use_curve_radius: boolean "Average radius of the endpoints is used to tweak the X and Z Scaling of the bones, on top of XZ Scale mode"
+#Constraint|SplineIKConstraint.use_even_divisions -> use_even_divisions: boolean "Ignore the relative lengths of the bones when fitting to the curve"
+#Constraint|SplineIKConstraint.use_y_stretch -> use_y_stretch: boolean "Stretch the Y axis of the bones to fit the curve"
+#Constraint|SplineIKConstraint.xz_scale_mode -> xz_scale_mode: enum "Method used for determining the scaling of the X and Z axes of the bones"
+#+ * Constraint|StretchToConstraint.bulge -> bulge: float "Factor between volume variation and stretching"
+#+ * Constraint|StretchToConstraint.head_tail -> head_tail: float "Target along length of bone: Head=0, Tail=1"
+#+ * Constraint|StretchToConstraint.keep_axis -> keep_axis: enum "Axis to maintain during stretch"
+#Constraint|StretchToConstraint.rest_length -> rest_length: float "Length at rest position"
+#+ * Constraint|StretchToConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|StretchToConstraint.target -> target: pointer "Target Object"
+#+ * Constraint|StretchToConstraint.volume -> volume: enum "Maintain the objects volume as it stretches"
+#+ * Constraint|TrackToConstraint.head_tail -> head_tail: float "Target along length of bone: Head=0, Tail=1"
+#+ * Constraint|TrackToConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|TrackToConstraint.target -> target: pointer "Target Object"
+#Constraint|TrackToConstraint.track_axis -> track_axis: enum "Axis that points to the target object"
+#Constraint|TrackToConstraint.up_axis -> up_axis: enum "Axis that points upward"
+#Constraint|TrackToConstraint.use_target_z -> use_target_z: boolean "Targets Z axis, not World Z axis, will constraint the Up direction"
+#+ * Constraint|TransformConstraint.from_max_x -> from_max_x: float "Top range of X axis source motion"
+#+ * Constraint|TransformConstraint.from_max_y -> from_max_y: float "Top range of Y axis source motion"
+#+ * Constraint|TransformConstraint.from_max_z -> from_max_z: float "Top range of Z axis source motion"
+#+ * Constraint|TransformConstraint.from_min_x -> from_min_x: float "Bottom range of X axis source motion"
+#+ * Constraint|TransformConstraint.from_min_y -> from_min_y: float "Bottom range of Y axis source motion"
+#+ * Constraint|TransformConstraint.from_min_z -> from_min_z: float "Bottom range of Z axis source motion"
+#+ * Constraint|TransformConstraint.map_from -> map_from: enum "The transformation type to use from the target"
+#+ * Constraint|TransformConstraint.map_to -> map_to: enum "The transformation type to affect of the constrained object"
+#+ * Constraint|TransformConstraint.map_to_x_from -> map_to_x_from: enum "The source axis constrained objects X axis uses"
+#+ * Constraint|TransformConstraint.map_to_y_from -> map_to_y_from: enum "The source axis constrained objects Y axis uses"
+#+ * Constraint|TransformConstraint.map_to_z_from -> map_to_z_from: enum "The source axis constrained objects Z axis uses"
+#+ * Constraint|TransformConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|TransformConstraint.target -> target: pointer "Target Object"
+#+ * Constraint|TransformConstraint.to_max_x -> to_max_x: float "Top range of X axis destination motion"
+#+ * Constraint|TransformConstraint.to_max_y -> to_max_y: float "Top range of Y axis destination motion"
+#+ * Constraint|TransformConstraint.to_max_z -> to_max_z: float "Top range of Z axis destination motion"
+#+ * Constraint|TransformConstraint.to_min_x -> to_min_x: float "Bottom range of X axis destination motion"
+#+ * Constraint|TransformConstraint.to_min_y -> to_min_y: float "Bottom range of Y axis destination motion"
+#+ * Constraint|TransformConstraint.to_min_z -> to_min_z: float "Bottom range of Z axis destination motion"
+#Constraint|TransformConstraint.use_motion_extrapolate -> use_motion_extrapolate: boolean "Extrapolate ranges"
+#+ * Context.area -> area: pointer, "(read-only)"
+#+ * Context.main -> main: pointer, "(read-only)"
+#+ * Context.mode -> mode: enum, "(read-only)"
+#+ * Context.region -> region: pointer, "(read-only)"
+#+ * Context.region_data -> region_data: pointer, "(read-only)"
+#+ * Context.scene -> scene: pointer, "(read-only)"
+#+ * Context.screen -> screen: pointer, "(read-only)"
+#+ * Context.space_data -> space_data: pointer, "(read-only)"
+#+ * Context.tool_settings -> tool_settings: pointer, "(read-only)"
+#+ * Context.user_preferences -> user_preferences: pointer, "(read-only)"
+#+ * Context.window -> window: pointer, "(read-only)"
+ + * Context.manager -> wm: pointer, "(read-only)"
+#+ * Controller.name -> name: string "NO DESCRIPTION"
+#Controller.show_expanded -> show_expanded: boolean "Set controller expanded in the user interface"
+#Controller.states -> states: int "Set Controller state index (1 to 30)"
+#+ * Controller.type -> type: enum "NO DESCRIPTION"
+#Controller.use_priority -> use_priority: boolean "Mark controller for execution before all non-marked controllers (good for startup scripts)"
+#+ * Controller|ExpressionController.expression -> expression: string "NO DESCRIPTION"
+#+ * Controller|PythonController.mode -> mode: enum "Python script type (textblock or module - faster)"
+#+ * Controller|PythonController.module -> module: string "Module name and function to run e.g. someModule.main. Internal texts and external python files can be used"
+#+ * Controller|PythonController.text -> text: pointer "Text datablock with the python script"
+#Controller|PythonController.use_debug -> use_debug: boolean "Continuously reload the module from disk for editing external modules without restarting"
+#+ * CurveMap.extend -> extend: enum, "(read-only) Extrapolate the curve or extend it horizontally"
+#+ * CurveMap.points -> points: collection, "(read-only)"
+#+ * CurveMapPoint.handle_type -> handle_type: enum, "(read-only) Curve interpolation at this point: bezier or vector"
+#+ * CurveMapPoint.location -> location: float[2], "(read-only) X/Y coordinates of the curve point"
+#+ * CurveMapPoint.select -> select: boolean "Selection state of the curve point"
+#+ * CurveMapping.black_level -> black_level: float[3] "For RGB curves, the color that black is mapped to"
+#+ * CurveMapping.clip_max_x -> clip_max_x: float "NO DESCRIPTION"
+#+ * CurveMapping.clip_max_y -> clip_max_y: float "NO DESCRIPTION"
+#+ * CurveMapping.clip_min_x -> clip_min_x: float "NO DESCRIPTION"
+#+ * CurveMapping.clip_min_y -> clip_min_y: float "NO DESCRIPTION"
+#+ * CurveMapping.curves -> curves: collection, "(read-only)"
+#CurveMapping.use_clip -> use_clip: boolean "Force the curve view to fit a defined boundary"
+#+ * CurveMapping.white_level -> white_level: float[3] "For RGB curves, the color that white is mapped to"
+#TODO MOVE TO COLLECTION * CurveSplines.active -> active: pointer "Active curve spline"
+#DopeSheet.filter_group -> filter_group: pointer "Group that included Object should be a member of"
+#DopeSheet.show_armatures -> show_armatures: boolean "Include visualization of Armature related Animation data"
+#DopeSheet.show_cameras -> show_cameras: boolean "Include visualization of Camera related Animation data"
+#DopeSheet.show_curves -> show_curves: boolean "Include visualization of Curve related Animation data"
+#DopeSheet.show_expanded_summary -> show_expanded_summary: boolean "Collapse summary when shown, so all other channels get hidden. (DopeSheet Editors Only)"
+#DopeSheet.show_hidden -> show_hidden: boolean "Include channels from objects/bone that arent visible"
+#DopeSheet.show_lamps -> show_lamps: boolean "Include visualization of Lamp related Animation data"
+#DopeSheet.show_materials -> show_materials: boolean "Include visualization of Material related Animation data"
+#DopeSheet.show_meshes -> show_meshes: boolean "Include visualization of Mesh related Animation data"
+#DopeSheet.show_metaballs -> show_metaballs: boolean "Include visualization of Metaball related Animation data"
+#DopeSheet.show_missing_nla -> show_missing_nla: boolean "Include Animation Data blocks with no NLA data. (NLA Editor only)"
+#DopeSheet.show_nodes -> show_nodes: boolean "Include visualization of Node related Animation data"
+#DopeSheet.show_only_group_objects -> show_only_group_objects: boolean "Only include channels from Objects in the specified Group"
+#DopeSheet.show_only_selected -> show_only_selected: boolean "Only include channels relating to selected objects and data"
+#DopeSheet.show_particles -> show_particles: boolean "Include visualization of Particle related Animation data"
+#DopeSheet.show_scenes -> show_scenes: boolean "Include visualization of Scene related Animation data"
+#DopeSheet.show_shapekeys -> show_shapekeys: boolean "Include visualization of ShapeKey related Animation data"
+#DopeSheet.show_summary -> show_summary: boolean "Display an additional summary line. (DopeSheet Editors only)"
+#DopeSheet.show_textures -> show_textures: boolean "Include visualization of Texture related Animation data"
+#DopeSheet.show_transforms -> show_transforms: boolean "Include visualization of Object-level Animation data (mostly Transforms)"
+#DopeSheet.show_worlds -> show_worlds: boolean "Include visualization of World related Animation data"
+#+ * DopeSheet.source -> source: pointer, "(read-only) ID-Block representing source data, currently ID_SCE (for Dopesheet), and ID_SC (for Grease Pencil)"
+#+ * Driver.expression -> expression: string "Expression to use for Scripted Expression"
+#Driver.is_valid -> is_valid: boolean "Driver could not be evaluated in past, so should be skipped"
+#+ * Driver.show_debug_info -> show_debug_info: boolean "Show intermediate values for the driver calculations to allow debugging of drivers"
+#+ * Driver.type -> type: enum "Driver type"
+#+ * Driver.variables -> variables: collection, "(read-only) Properties acting as inputs for this driver"
+#+ * DriverTarget.bone_target -> bone_target: string "Name of PoseBone to use as target"
+#+ * DriverTarget.data_path -> data_path: string "RNA Path (from ID-block) to property used"
+#+ * DriverTarget.id -> id: pointer "ID-block that the specific property used can be found from (id_type property must be set first)"
+#+ * DriverTarget.id_type -> id_type: enum "Type of ID-block that can be used"
+#+ * DriverTarget.transform_type -> transform_type: enum "Driver variable type"
+#DriverTarget.use_local_space_transform -> use_local_space_transform: boolean "Use transforms in Local Space (as opposed to the worldspace default)"
+#+ * DriverVariable.name -> name: string "Name to use in scripted expressions/functions. (No spaces or dots are allowed. Also, must not start with a symbol or digit)"
+#+ * DriverVariable.targets -> targets: collection, "(read-only) Sources of input data for evaluating this variable"
+#+ * DriverVariable.type -> type: enum "Driver variable type"
+#+ * DupliObject.matrix -> matrix: float[16] "Object duplicate transformation matrix"
+#+ * DupliObject.matrix_original -> matrix_original: float[16] "The original matrix of this object before it was duplicated"
+#+ * DupliObject.object -> object: pointer, "(read-only) Object being duplicated"
+#+ * EditBone.bbone_in -> bbone_in: float "Length of first Bezier Handle (for B-Bones only)"
+#+ * EditBone.bbone_out -> bbone_out: float "Length of second Bezier Handle (for B-Bones only)"
+#+ * EditBone.bbone_segments -> bbone_segments: int "Number of subdivisions of bone (for B-Bones only)"
+#+ * EditBone.envelope_distance -> envelope_distance: float "Bone deformation distance (for Envelope deform only)"
+#+ * EditBone.envelope_weight -> envelope_weight: float "Bone deformation weight (for Envelope deform only)"
+#+ * EditBone.head -> head: float[3] "Location of head end of the bone"
+#+ * EditBone.head_radius -> head_radius: float "Radius of head of bone (for Envelope deform only)"
+#+ * EditBone.hide -> hide: boolean "Bone is not visible when in Edit Mode"
+#+ * EditBone.hide_select -> hide_select: boolean "Bone is able to be selected"
+#EditBone.layers -> layers: boolean[32] "Layers bone exists in"
+#+ * EditBone.lock -> lock: boolean "Bone is not able to be transformed when in Edit Mode"
+#+ * EditBone.matrix -> matrix: float[16], "(read-only) Read-only matrix calculated from the roll (armature space)"
+#+ * EditBone.name -> name: string "NO DESCRIPTION"
+#+ * EditBone.parent -> parent: pointer "Parent edit bone (in same Armature)"
+#+ * EditBone.roll -> roll: float "Bone rotation around head-tail axis"
+#+ * EditBone.select -> select: boolean "NO DESCRIPTION"
+#+ * EditBone.select_head -> select_head: boolean "NO DESCRIPTION"
+#+ * EditBone.select_tail -> select_tail: boolean "NO DESCRIPTION"
+#EditBone.show_wire -> show_wire: boolean "Bone is always drawn as Wireframe regardless of viewport draw mode. Useful for non-obstructive custom bone shapes"
+#+ * EditBone.tail -> tail: float[3] "Location of tail end of the bone"
+#+ * EditBone.tail_radius -> tail_radius: float "Radius of tail of bone (for Envelope deform only)"
+#EditBone.use_connect -> use_connect: boolean "When bone has a parent, bones head is struck to the parents tail"
+#EditBone.use_cyclic_offset -> use_cyclic_offset: boolean "When bone doesnt have a parent, it receives cyclic offset effects"
+#EditBone.use_deform -> use_deform: boolean "Bone does not deform any geometry"
+#EditBone.use_envelope_multiply -> use_envelope_multiply: boolean "When deforming bone, multiply effects of Vertex Group weights with Envelope influence"
+#EditBone.use_hinge -> use_hinge: boolean "Bone inherits rotation or scale from parent bone"
+#EditBone.use_inherit_scale -> use_inherit_scale: boolean "Bone inherits scaling from parent bone"
+#EditBone.use_local_location -> use_local_location: boolean "Bone location is set in local space"
+#+ * EffectorWeights.all -> all: float "All effectors weight"
+#EffectorWeights.apply_to_hair_growing -> apply_to_hair_growing: boolean "Use force fields when growing hair"
+#+ * EffectorWeights.boid -> boid: float "Boid effector weight"
+#+ * EffectorWeights.charge -> charge: float "Charge effector weight"
+#EffectorWeights.curve_guide -> curve_guide: float "Curve guide effector weight"
+#+ * EffectorWeights.drag -> drag: float "Drag effector weight"
+#+ * EffectorWeights.force -> force: float "Force effector weight"
+#+ * EffectorWeights.gravity -> gravity: float "Global gravity weight"
+#+ * EffectorWeights.group -> group: pointer "Limit effectors to this Group"
+#+ * EffectorWeights.harmonic -> harmonic: float "Harmonic effector weight"
+#+ * EffectorWeights.lennardjones -> lennardjones: float "Lennard-Jones effector weight"
+#+ * EffectorWeights.magnetic -> magnetic: float "Magnetic effector weight"
+#+ * EffectorWeights.texture -> texture: float "Texture effector weight"
+#+ * EffectorWeights.turbulence -> turbulence: float "Turbulence effector weight"
+#+ * EffectorWeights.vortex -> vortex: float "Vortex effector weight"
+#+ * EffectorWeights.wind -> wind: float "Wind effector weight"
+#+ * EnumPropertyItem.description -> description: string, "(read-only) Description of the items purpose"
+#+ * EnumPropertyItem.identifier -> identifier: string, "(read-only) Unique name used in the code and scripting"
+#+ * EnumPropertyItem.name -> name: string, "(read-only) Human readable name"
+#+ * EnumPropertyItem.value -> value: int, "(read-only) Value of the item"
+#+ * EnvironmentMap.clip_end -> clip_end: float "Objects further than this are not visible to map"
+#+ * EnvironmentMap.clip_start -> clip_start: float "Objects nearer than this are not visible to map"
+#+ * EnvironmentMap.depth -> depth: int "Number of times a map will be rendered recursively (mirror effects.)"
+#EnvironmentMap.layers_ignore -> layers_ignore: boolean[20] "Hide objects on these layers when generating the Environment Map"
+#+ * EnvironmentMap.mapping -> mapping: enum "NO DESCRIPTION"
+#+ * EnvironmentMap.resolution -> resolution: int "Pixel resolution of the rendered environment map"
+#+ * EnvironmentMap.source -> source: enum "NO DESCRIPTION"
+#+ * EnvironmentMap.viewpoint_object -> viewpoint_object: pointer "Object to use as the environment maps viewpoint location"
+#+ * EnvironmentMap.zoom -> zoom: float "NO DESCRIPTION"
+#+ * Event.ascii -> ascii: string, "(read-only) Single ASCII character for this event"
+ + * Event.alt -> is_pressed_alt: boolean, "(read-only) True when the Alt/Option key is held"
+ + * Event.oskey -> is_pressed_cmd: boolean, "(read-only) True when the Cmd key is held"
+ + * Event.ctrl -> is_pressed_ctrl: boolean, "(read-only) True when the Ctrl key is held"
+ + * Event.shift -> is_pressed_shift: boolean, "(read-only) True when the Shift key is held"
+#+ * Event.mouse_prev_x -> mouse_prev_x: int, "(read-only) The window relative vertical location of the mouse"
+#+ * Event.mouse_prev_y -> mouse_prev_y: int, "(read-only) The window relative horizontal location of the mouse"
+#+ * Event.mouse_region_x -> mouse_region_x: int, "(read-only) The region relative vertical location of the mouse"
+#+ * Event.mouse_region_y -> mouse_region_y: int, "(read-only) The region relative horizontal location of the mouse"
+#+ * Event.mouse_x -> mouse_x: int, "(read-only) The window relative vertical location of the mouse"
+#+ * Event.mouse_y -> mouse_y: int, "(read-only) The window relative horizontal location of the mouse"
+#+ * Event.type -> type: enum, "(read-only)"
+#+ * Event.value -> value: enum, "(read-only) The type of event, only applies to some"
+#+ * FCurve.array_index -> array_index: int "Index to the specific property affected by F-Curve if applicable"
+#+ * FCurve.color -> color: float[3] "Color of the F-Curve in the Graph Editor"
+#+ * FCurve.color_mode -> color_mode: enum "Method used to determine color of F-Curve in Graph Editor"
+#+ * FCurve.data_path -> data_path: string "RNA Path to property affected by F-Curve"
+#+ * FCurve.driver -> driver: pointer, "(read-only) Channel Driver (only set for Driver F-Curves)"
+#+ * FCurve.extrapolation -> extrapolation: enum "NO DESCRIPTION"
+#+ * FCurve.group -> group: pointer "Action Group that this F-Curve belongs to"
+#+ * FCurve.hide -> hide: boolean "F-Curve and its keyframes are hidden in the Graph Editor graphs"
+#+ * FCurve.is_valid -> is_valid: boolean "False when F-Curve could not be evaluated in past, so should be skipped when evaluating"
+#+ * FCurve.keyframe_points -> keyframe_points: collection, "(read-only) User-editable keyframes"
+#+ * FCurve.lock -> lock: boolean "F-Curves settings cannot be edited"
+#+ * FCurve.modifiers -> modifiers: collection, "(read-only) Modifiers affecting the shape of the F-Curve"
+#+ * FCurve.mute -> mute: boolean "F-Curve is not evaluated"
+#+ * FCurve.sampled_points -> sampled_points: collection, "(read-only) Sampled animation data"
+#+ * FCurve.select -> select: boolean "F-Curve is selected for editing"
+#+ * FCurve.use_auto_handle_clamp -> use_auto_handle_clamp: boolean "All auto-handles for F-Curve are clamped"
+#+ * FCurveModifiers.active -> active: pointer "Active F-Curve Modifier"
+#+ * FCurveSample.co -> co: float[2] "Point coordinates"
+#+ * FCurveSample.select -> select: boolean "Selection status"
+#REMOVE * FModifier.active -> active: boolean "F-Curve Modifier is the one being edited"
+#FModifier.is_valid -> is_valid: boolean, "(read-only) F-Curve Modifier has invalid settings and will not be evaluated"
+#+ * FModifier.mute -> mute: boolean "F-Curve Modifier will not be evaluated"
+#FModifier.show_expanded -> show_expanded: boolean "F-Curve Modifiers panel is expanded in UI"
+#+ * FModifier.type -> type: enum, "(read-only) F-Curve Modifier Type"
+#+ * FModifierEnvelopeControlPoint.frame -> frame: float "Frame this control-point occurs on"
+#FModifierEnvelopeControlPoint.max -> max: float "Upper bound of envelope at this control-point"
+#FModifierEnvelopeControlPoint.min -> min: float "Lower bound of envelope at this control-point"
+#FModifier|FModifierCycles.cycles_after -> cycles_after: float "Maximum number of cycles to allow after last keyframe. (0 = infinite)"
+#FModifier|FModifierCycles.cycles_before -> cycles_before: float "Maximum number of cycles to allow before first keyframe. (0 = infinite)"
+#FModifier|FModifierCycles.mode_after -> mode_after: enum "Cycling mode to use after last keyframe"
+#FModifier|FModifierCycles.mode_before -> mode_before: enum "Cycling mode to use before first keyframe"
+#+ * FModifier|FModifierEnvelope.control_points -> control_points: collection, "(read-only) Control points defining the shape of the envelope"
+#FModifier|FModifierEnvelope.default_max -> default_max: float "Upper distance from Reference Value for 1:1 default influence"
+#FModifier|FModifierEnvelope.default_min -> default_min: float "Lower distance from Reference Value for 1:1 default influence"
+#+ * FModifier|FModifierEnvelope.reference_value -> reference_value: float "Value that envelopes influence is centered around / based on"
+#+ * FModifier|FModifierFunctionGenerator.amplitude -> amplitude: float "Scale factor determining the maximum/minimum values"
+#+ * FModifier|FModifierFunctionGenerator.function_type -> function_type: enum "Type of built-in function to use"
+#+ * FModifier|FModifierFunctionGenerator.phase_multiplier -> phase_multiplier: float "Scale factor determining the speed of the function"
+#+ * FModifier|FModifierFunctionGenerator.phase_offset -> phase_offset: float "Constant factor to offset time by for function"
+#FModifier|FModifierFunctionGenerator.use_additive -> use_additive: boolean "Values generated by this modifier are applied on top of the existing values instead of overwriting them"
+#+ * FModifier|FModifierFunctionGenerator.value_offset -> value_offset: float "Constant factor to offset values by"
+#+ * FModifier|FModifierGenerator.coefficients -> coefficients: float[32] "Coefficients for x (starting from lowest power of x^0)"
+#+ * FModifier|FModifierGenerator.mode -> mode: enum "Type of generator to use"
+#+ * FModifier|FModifierGenerator.poly_order -> poly_order: int "The highest power of x for this polynomial. (number of coefficients - 1)"
+#FModifier|FModifierGenerator.use_additive -> use_additive: boolean "Values generated by this modifier are applied on top of the existing values instead of overwriting them"
+#FModifier|FModifierLimits.max_x -> max_x: float "Highest X value to allow"
+#FModifier|FModifierLimits.max_y -> max_y: float "Highest Y value to allow"
+#FModifier|FModifierLimits.min_x -> min_x: float "Lowest X value to allow"
+#FModifier|FModifierLimits.min_y -> min_y: float "Lowest Y value to allow"
+#FModifier|FModifierLimits.use_max_x -> use_max_x: boolean "Use the maximum X value"
+#FModifier|FModifierLimits.use_max_y -> use_max_y: boolean "Use the maximum Y value"
+#FModifier|FModifierLimits.use_min_x -> use_min_x: boolean "Use the minimum X value"
+#FModifier|FModifierLimits.use_min_y -> use_min_y: boolean "Use the minimum Y value"
+#FModifier|FModifierNoise.blend_type -> blend_type: enum "Method of modifying the existing F-Curve"
+#+ * FModifier|FModifierNoise.depth -> depth: int "Amount of fine level detail present in the noise"
+#+ * FModifier|FModifierNoise.phase -> phase: float "A random seed for the noise effect"
+#FModifier|FModifierNoise.scale -> scale: float "Scaling (in time) of the noise"
+#+ * FModifier|FModifierNoise.strength -> strength: float "Amplitude of the noise - the amount that it modifies the underlying curve"
+#+ * FModifier|FModifierStepped.frame_end -> frame_end: float "Frame that modifiers influence ends (if applicable)"
+#FModifier|FModifierStepped.frame_offset -> frame_offset: float "Reference number of frames before frames get held. Use to get hold for 1-3 vs 5-7 holding patterns"
+#+ * FModifier|FModifierStepped.frame_start -> frame_start: float "Frame that modifiers influence starts (if applicable)"
+#FModifier|FModifierStepped.frame_step -> frame_step: float "Number of frames to hold each value"
+#+ * FModifier|FModifierStepped.use_frame_end -> use_frame_end: boolean "Restrict modifier to only act before its end frame"
+#+ * FModifier|FModifierStepped.use_frame_start -> use_frame_start: boolean "Restrict modifier to only act after its start frame"
+#FieldSettings.apply_to_location -> apply_to_location: boolean "Effect particles location"
+#FieldSettings.apply_to_rotation -> apply_to_rotation: boolean "Effect particles dynamic rotation"
+#FieldSettings.distance_max -> distance_max: float "Maximum distance for the field to work"
+#FieldSettings.distance_min -> distance_min: float "Minimum distance for the fields fall-off"
+#+ * FieldSettings.falloff_power -> falloff_power: float "Falloff power (real gravitational falloff = 2)"
+#+ * FieldSettings.falloff_type -> falloff_type: enum "Fall-off shape"
+#+ * FieldSettings.flow -> flow: float "Convert effector force into air flow velocity"
+#+ * FieldSettings.guide_clump_amount -> guide_clump_amount: float "Amount of clumping"
+#+ * FieldSettings.guide_clump_shape -> guide_clump_shape: float "Shape of clumping"
+#+ * FieldSettings.guide_free -> guide_free: float "Guide-free time from particle lifes end"
+#+ * FieldSettings.guide_kink_amplitude -> guide_kink_amplitude: float "The amplitude of the offset"
+#+ * FieldSettings.guide_kink_axis -> guide_kink_axis: enum "Which axis to use for offset"
+#+ * FieldSettings.guide_kink_frequency -> guide_kink_frequency: float "The frequency of the offset (1/total length)"
+#+ * FieldSettings.guide_kink_shape -> guide_kink_shape: float "Adjust the offset to the beginning/end"
+#+ * FieldSettings.guide_kink_type -> guide_kink_type: enum "Type of periodic offset on the curve"
+#+ * FieldSettings.guide_minimum -> guide_minimum: float "The distance from which particles are affected fully"
+#+ * FieldSettings.harmonic_damping -> harmonic_damping: float "Damping of the harmonic force"
+#+ * FieldSettings.inflow -> inflow: float "Inwards component of the vortex force"
+#+ * FieldSettings.linear_drag -> linear_drag: float "Drag component proportional to velocity"
+#+ * FieldSettings.noise -> noise: float "Noise of the force"
+#+ * FieldSettings.quadratic_drag -> quadratic_drag: float "Drag component proportional to the square of velocity"
+#+ * FieldSettings.radial_falloff -> radial_falloff: float "Radial falloff power (real gravitational falloff = 2)"
+#FieldSettings.radial_max -> radial_max: float "Maximum radial distance for the field to work"
+#FieldSettings.radial_min -> radial_min: float "Minimum radial distance for the fields fall-off"
+#+ * FieldSettings.rest_length -> rest_length: float "Rest length of the harmonic force"
+#+ * FieldSettings.seed -> seed: int "Seed of the noise"
+#+ * FieldSettings.shape -> shape: enum "Which direction is used to calculate the effector force"
+#+ * FieldSettings.size -> size: float "Size of the noise"
+#+ * FieldSettings.strength -> strength: float "Strength of force field"
+#+ * FieldSettings.texture -> texture: pointer "Texture to use as force"
+#+ * FieldSettings.texture_mode -> texture_mode: enum "How the texture effect is calculated (RGB & Curl need a RGB texture else Gradient will be used instead)"
+#+ * FieldSettings.texture_nabla -> texture_nabla: float "Defines size of derivative offset used for calculating gradient and curl"
+#+ * FieldSettings.type -> type: enum "Type of field"
+#FieldSettings.use_2d_force -> use_2d_force: boolean "Apply force only in 2d"
+#FieldSettings.use_absorption -> use_absorption: boolean "Force gets absorbed by collision objects"
+#FieldSettings.use_global_coords -> use_global_coords: boolean "Use effector/global coordinates for turbulence"
+#FieldSettings.use_guide_path_add -> use_guide_path_add: boolean "Based on distance/falloff it adds a portion of the entire path"
+#+ * FieldSettings.use_guide_path_weight -> use_guide_path_weight: boolean "Use curve weights to influence the particle influence along the curve"
+#+ * FieldSettings.use_max_distance -> use_max_distance: boolean "Use a maximum distance for the field to work"
+#+ * FieldSettings.use_min_distance -> use_min_distance: boolean "Use a minimum distance for the fields fall-off"
+#FieldSettings.use_multiple_springs -> use_multiple_springs: boolean "Every point is effected by multiple springs"
+#FieldSettings.use_object_coords -> use_object_coords: boolean "Use object/global coordinates for texture"
+#+ * FieldSettings.use_radial_max -> use_radial_max: boolean "Use a maximum radial distance for the field to work"
+#+ * FieldSettings.use_radial_min -> use_radial_min: boolean "Use a minimum radial distance for the fields fall-off"
+#FieldSettings.use_root_coords -> use_root_coords: boolean "Texture coordinates from root particle locations"
+#+ * FieldSettings.z_direction -> z_direction: enum "Effect in full or only positive/negative Z direction"
+#+ * FileSelectParams.directory -> directory: string "Directory displayed in the file browser"
+#FileSelectParams.display_type -> display_type: enum "Display mode for the file list"
+#FileSelectParams.filename -> filename: string "Active file in the file browser"
+#FileSelectParams.show_hidden -> show_hidden: boolean "Hide hidden dot files"
+#FileSelectParams.sort_method -> sort_method: enum "NO DESCRIPTION"
+#+ * FileSelectParams.title -> title: string, "(read-only) Title for the file browser"
+#FileSelectParams.use_filter -> use_filter: boolean "Enable filtering of files"
+#FileSelectParams.use_filter_blender -> use_filter_blender: boolean "Show .blend files"
+#FileSelectParams.use_filter_folder -> use_filter_folder: boolean "Show folders"
+#FileSelectParams.use_filter_font -> use_filter_font: boolean "Show font files"
+#FileSelectParams.use_filter_image -> use_filter_image: boolean "Show image files"
+#FileSelectParams.use_filter_movie -> use_filter_movie: boolean "Show movie files"
+#FileSelectParams.use_filter_script -> use_filter_script: boolean "Show script files"
+#FileSelectParams.use_filter_sound -> use_filter_sound: boolean "Show sound files"
+#FileSelectParams.use_filter_text -> use_filter_text: boolean "Show text files"
+#+ * FluidSettings.type -> type: enum "Type of participation in the fluid simulation"
+#+ * FluidSettings|ControlFluidSettings.attraction_radius -> attraction_radius: float "Specifies the force field radius around the control object"
+#+ * FluidSettings|ControlFluidSettings.attraction_strength -> attraction_strength: float "Force strength for directional attraction towards the control object"
+#+ * FluidSettings|ControlFluidSettings.end_time -> end_time: float "Specifies time when the control particles are deactivated"
+#+ * FluidSettings|ControlFluidSettings.quality -> quality: float "Specifies the quality which is used for object sampling. (higher = better but slower)"
+#+ * FluidSettings|ControlFluidSettings.start_time -> start_time: float "Specifies time when the control particles are activated"
+#FluidSettings|ControlFluidSettings.use -> use: boolean "Object contributes to the fluid simulation"
+#FluidSettings|ControlFluidSettings.use_reverse_frames -> use_reverse_frames: boolean "Reverse control object movement"
+#+ * FluidSettings|ControlFluidSettings.velocity_radius -> velocity_radius: float "Specifies the force field radius around the control object"
+#+ * FluidSettings|ControlFluidSettings.velocity_strength -> velocity_strength: float "Force strength of how much of the control objects velocity is influencing the fluid velocity"
+#+ * FluidSettings|DomainFluidSettings.compressibility -> compressibility: float "Allowed compressibility due to gravitational force for standing fluid. (directly affects simulation step size)"
+#+ * FluidSettings|DomainFluidSettings.end_time -> end_time: float "Simulation time of the last blender frame (in seconds)"
+#FluidSettings|DomainFluidSettings.filepath -> filepath: string "Directory (and/or filename prefix) to store baked fluid simulation files in"
+#+ * FluidSettings|DomainFluidSettings.generate_particles -> generate_particles: float "Amount of particles to generate (0=off, 1=normal, >1=more)"
+#+ * FluidSettings|DomainFluidSettings.gravity -> gravity: float[3] "Gravity in X, Y and Z direction"
+#+ * FluidSettings|DomainFluidSettings.grid_levels -> grid_levels: int "Number of coarsened grids to use (-1 for automatic)"
+#+ * FluidSettings|DomainFluidSettings.memory_estimate -> memory_estimate: string, "(read-only) Estimated amount of memory needed for baking the domain"
+#+ * FluidSettings|DomainFluidSettings.partial_slip_factor -> partial_slip_factor: float "Amount of mixing between no- and free-slip, 0 is no slip and 1 is free slip"
+#+ * FluidSettings|DomainFluidSettings.preview_resolution -> preview_resolution: int "Preview resolution in X,Y and Z direction"
+#+ * FluidSettings|DomainFluidSettings.render_display_mode -> render_display_mode: enum "How to display the mesh for rendering"
+#+ * FluidSettings|DomainFluidSettings.resolution -> resolution: int "Domain resolution in X,Y and Z direction"
+#FluidSettings|DomainFluidSettings.simulation_scale -> simulation_scale: float "Size of the simulation domain in metres"
+#+ * FluidSettings|DomainFluidSettings.slip_type -> slip_type: enum "NO DESCRIPTION"
+#+ * FluidSettings|DomainFluidSettings.start_time -> start_time: float "Simulation time of the first blender frame (in seconds)"
+#FluidSettings|DomainFluidSettings.surface_smooth -> surface_smooth: float "Amount of surface smoothing. A value of 0 is off, 1 is normal smoothing and more than 1 is extra smoothing"
+#+ * FluidSettings|DomainFluidSettings.surface_subdivisions -> surface_subdivisions: int "Number of isosurface subdivisions. This is necessary for the inclusion of particles into the surface generation. Warning - can lead to longer computation times!"
+#+ * FluidSettings|DomainFluidSettings.tracer_particles -> tracer_particles: int "Number of tracer particles to generate"
+#FluidSettings|DomainFluidSettings.use_reverse_frames -> use_reverse_frames: boolean "Reverse fluid frames"
+#FluidSettings|DomainFluidSettings.use_speed_vectors -> use_speed_vectors: boolean "Generate speed vectors for vector blur"
+#FluidSettings|DomainFluidSettings.use_time_override -> use_time_override: boolean "Use a custom start and end time (in seconds) instead of the scenes timeline"
+#+ * FluidSettings|DomainFluidSettings.viewport_display_mode -> viewport_display_mode: enum "How to display the mesh in the viewport"
+#+ * FluidSettings|DomainFluidSettings.viscosity_base -> viscosity_base: float "Viscosity setting: value that is multiplied by 10 to the power of (exponent*-1)"
+#+ * FluidSettings|DomainFluidSettings.viscosity_exponent -> viscosity_exponent: int "Negative exponent for the viscosity value (to simplify entering small values e.g. 5*10^-6.)"
+#+ * FluidSettings|DomainFluidSettings.viscosity_preset -> viscosity_preset: enum "Set viscosity of the fluid to a preset value, or use manual input"
+#+ * FluidSettings|FluidFluidSettings.initial_velocity -> initial_velocity: float[3] "Initial velocity of fluid"
+#FluidSettings|FluidFluidSettings.use -> use: boolean "Object contributes to the fluid simulation"
+#FluidSettings|FluidFluidSettings.use_animated_mesh -> use_animated_mesh: boolean "Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated pos/rot/scale IPOs do not require it"
+#+ * FluidSettings|FluidFluidSettings.volume_initialization -> volume_initialization: enum "Volume initialization type"
+#+ * FluidSettings|InflowFluidSettings.inflow_velocity -> inflow_velocity: float[3] "Initial velocity of fluid"
+#FluidSettings|InflowFluidSettings.use -> use: boolean "Object contributes to the fluid simulation"
+#FluidSettings|InflowFluidSettings.use_animated_mesh -> use_animated_mesh: boolean "Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated pos/rot/scale IPOs do not require it"
+#FluidSettings|InflowFluidSettings.use_local_coords -> use_local_coords: boolean "Use local coordinates for inflow. (e.g. for rotating objects)"
+#+ * FluidSettings|InflowFluidSettings.volume_initialization -> volume_initialization: enum "Volume initialization type"
+#+ * FluidSettings|ObstacleFluidSettings.impact_factor -> impact_factor: float "This is an unphysical value for moving objects - it controls the impact an obstacle has on the fluid, =0 behaves a bit like outflow (deleting fluid), =1 is default, while >1 results in high forces. Can be used to tweak total mass"
+#+ * FluidSettings|ObstacleFluidSettings.partial_slip_factor -> partial_slip_factor: float "Amount of mixing between no- and free-slip, 0 is no slip and 1 is free slip"
+#+ * FluidSettings|ObstacleFluidSettings.slip_type -> slip_type: enum "NO DESCRIPTION"
+#FluidSettings|ObstacleFluidSettings.use -> use: boolean "Object contributes to the fluid simulation"
+#FluidSettings|ObstacleFluidSettings.use_animated_mesh -> use_animated_mesh: boolean "Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated pos/rot/scale IPOs do not require it"
+#+ * FluidSettings|ObstacleFluidSettings.volume_initialization -> volume_initialization: enum "Volume initialization type"
+#FluidSettings|OutflowFluidSettings.use -> use: boolean "Object contributes to the fluid simulation"
+#FluidSettings|OutflowFluidSettings.use_animated_mesh -> use_animated_mesh: boolean "Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated pos/rot/scale IPOs do not require it"
+#+ * FluidSettings|OutflowFluidSettings.volume_initialization -> volume_initialization: enum "Volume initialization type"
+#+ * FluidSettings|ParticleFluidSettings.alpha_influence -> alpha_influence: float "Amount of particle alpha change, inverse of size influence: 0=off (all same alpha), 1=full. (large particles get lower alphas, smaller ones higher values)"
+#FluidSettings|ParticleFluidSettings.filepath -> filepath: string "Directory (and/or filename prefix) to store and load particles from"
+#+ * FluidSettings|ParticleFluidSettings.particle_influence -> particle_influence: float "Amount of particle size scaling: 0=off (all same size), 1=full (range 0.2-2.0), >1=stronger"
+#FluidSettings|ParticleFluidSettings.show_tracer -> show_tracer: boolean "Show tracer particles"
+#FluidSettings|ParticleFluidSettings.use_drops -> use_drops: boolean "Show drop particles"
+#FluidSettings|ParticleFluidSettings.use_floats -> use_floats: boolean "Show floating foam particles"
+#+ * Function.description -> description: string, "(read-only) Description of the Functions purpose"
+#+ * Function.identifier -> identifier: string, "(read-only) Unique name used in the code and scripting"
+#Function.is_registered -> is_registered: boolean, "(read-only) Function is registered as callback as part of type registration"
+#Function.is_registered_optional -> is_registered_optional: boolean, "(read-only) Function is optionally registered as callback part of type registration"
+#+ * Function.parameters -> parameters: collection, "(read-only) Parameters for the function"
+#Function.use_self -> use_self: boolean, "(read-only) Function does not pass its self as an argument (becomes a class method in python)"
+#+ * GPencilFrame.frame_number -> frame_number: int "The frame on which this sketch appears"
+#GPencilFrame.is_edited -> is_edited: boolean "Frame is being edited (painted on)"
+#+ * GPencilFrame.select -> select: boolean "Frame is selected for editing in the DopeSheet"
+#+ * GPencilFrame.strokes -> strokes: collection, "(read-only) Freehand curves defining the sketch on this frame"
+#+ * GPencilLayer.active -> active: boolean "Set active layer for editing"
+#+ * GPencilLayer.active_frame -> active_frame: pointer, "(read-only) Frame currently being displayed for this layer"
+#GPencilLayer.alpha -> alpha: float "Layer Opacity"
+#+ * GPencilLayer.color -> color: float[3] "Color for all strokes in this layer"
+#+ * GPencilLayer.frames -> frames: collection, "(read-only) Sketches for this layer on different frames"
+#GPencilLayer.ghost_range_max -> ghost_range_max: int "Maximum number of frames on either side of the active frame to show (0 = show the first available sketch on either side)"
+#+ * GPencilLayer.hide -> hide: boolean "Set layer Visibility"
+#+ * GPencilLayer.info -> info: string "Layer name"
+#GPencilLayer.line_width -> line_width: int "Thickness of strokes (in pixels)"
+#+ * GPencilLayer.lock -> lock: boolean "Protect layer from further editing and/or frame changes"
+#GPencilLayer.lock_frame -> lock_frame: boolean "Lock current frame displayed by layer"
+#+ * GPencilLayer.select -> select: boolean "Layer is selected for editing in the DopeSheet"
+#+ * GPencilLayer.show_points -> show_points: boolean "Draw the points which make up the strokes (for debugging purposes)"
+#+ * GPencilLayer.use_onion_skinning -> use_onion_skinning: boolean "Ghost frames on either side of frame"
+#+ * GPencilStroke.points -> points: collection, "(read-only) Stroke data points"
+#+ * GPencilStrokePoint.co -> co: float[3] "NO DESCRIPTION"
+#+ * GPencilStrokePoint.pressure -> pressure: float "Pressure of tablet at point when drawing it"
+#+ * GameObjectSettings.actuators -> actuators: collection, "(read-only) Game engine actuators to act on events"
+#GameObjectSettings.collision_bounds_type -> collision_bounds_type: enum "Selects the collision type"
+#+ * GameObjectSettings.collision_margin -> collision_margin: float "Extra margin around object for collision detection, small amount required for stability"
+#+ * GameObjectSettings.controllers -> controllers: collection, "(read-only) Game engine controllers to process events, connecting sensor to actuators"
+#+ * GameObjectSettings.damping -> damping: float "General movement damping"
+#+ * GameObjectSettings.form_factor -> form_factor: float "Form factor scales the inertia tensor"
+#+ * GameObjectSettings.friction_coefficients -> friction_coefficients: float[3] "Relative friction coefficient in the in the X, Y and Z directions, when anisotropic friction is enabled"
+#GameObjectSettings.lock_location_x -> lock_location_x: boolean "Disable simulation of linear motion along the X axis"
+#GameObjectSettings.lock_location_y -> lock_location_y: boolean "Disable simulation of linear motion along the Y axis"
+#GameObjectSettings.lock_location_z -> lock_location_z: boolean "Disable simulation of linear motion along the Z axis"
+#GameObjectSettings.lock_rotation_x -> lock_rotation_x: boolean "Disable simulation of angular motion along the X axis"
+#GameObjectSettings.lock_rotation_y -> lock_rotation_y: boolean "Disable simulation of angular motion along the Y axis"
+#GameObjectSettings.lock_rotation_z -> lock_rotation_z: boolean "Disable simulation of angular motion along the Z axis"
+#+ * GameObjectSettings.mass -> mass: float "Mass of the object"
+#+ * GameObjectSettings.physics_type -> physics_type: enum "Selects the type of physical representation"
+#+ * GameObjectSettings.properties -> properties: collection, "(read-only) Game engine properties"
+#+ * GameObjectSettings.radius -> radius: float "Radius of bounding sphere and material physics"
+#+ * GameObjectSettings.rotation_damping -> rotation_damping: float "General rotation damping"
+#+ * GameObjectSettings.sensors -> sensors: collection, "(read-only) Game engine sensor to detect events"
+#+ * GameObjectSettings.show_actuators -> show_actuators: boolean "Shows actuators for this object in the user interface"
+#+ * GameObjectSettings.show_controllers -> show_controllers: boolean "Shows controllers for this object in the user interface"
+#GameObjectSettings.show_debug_state -> show_debug_state: boolean "Print state debug info in the game engine"
+#+ * GameObjectSettings.show_sensors -> show_sensors: boolean "Shows sensors for this object in the user interface"
+#+ * GameObjectSettings.show_state_panel -> show_state_panel: boolean "Show state panel"
+#+ * GameObjectSettings.soft_body -> soft_body: pointer, "(read-only) Settings for Bullet soft body simulation"
+#GameObjectSettings.states_initial -> states_initial: boolean[30] "Initial state when the game starts"
+#GameObjectSettings.states_visible -> states_visible: boolean[30] "State determining which controllers are displayed"
+#+ * GameObjectSettings.use_activity_culling -> use_activity_culling: boolean "Disable simulation of angular motion along the Z axis"
+#GameObjectSettings.use_actor -> use_actor: boolean "Object is detected by the Near and Radar sensor"
+#GameObjectSettings.use_all_states -> use_all_states: boolean "Set all state bits"
+#GameObjectSettings.use_anisotropic_friction -> use_anisotropic_friction: boolean "Enable anisotropic friction"
+#+ * GameObjectSettings.use_collision_bounds -> use_collision_bounds: boolean "Specify a collision bounds type other than the default"
+#GameObjectSettings.use_collision_compound -> use_collision_compound: boolean "Add children to form a compound collision object"
+#GameObjectSettings.use_ghost -> use_ghost: boolean "Object does not restitute collisions, like a ghost"
+#GameObjectSettings.use_material_physics -> use_material_physics: boolean "Use physics settings in materials"
+#GameObjectSettings.use_rotate_from_normal -> use_rotate_from_normal: boolean "Use face normal to rotate object, so that it points away from the surface"
+#GameObjectSettings.use_sleep -> use_sleep: boolean "Disable auto (de)activation in physics simulation"
+#GameObjectSettings.used_states -> used_states: boolean[30], "(read-only) States which are being used by controllers"
+#GameObjectSettings.velocity_max -> velocity_max: float "Clamp velocity to this maximum speed"
+#GameObjectSettings.velocity_min -> velocity_min: float "Clamp velocity to this minimum speed (except when totally still)"
+#+ * GameProperty.name -> name: string "Available as GameObject attributes in the game engines python API"
+#GameProperty.show_debug -> show_debug: boolean "Print debug information for this property"
+#+ * GameProperty.type -> type: enum "NO DESCRIPTION"
+#+ * GameProperty|GameBooleanProperty.value -> value: boolean "Property value"
+#+ * GameProperty|GameFloatProperty.value -> value: float "Property value"
+#+ * GameProperty|GameIntProperty.value -> value: int "Property value"
+#+ * GameProperty|GameStringProperty.value -> value: string "Property value"
+#+ * GameProperty|GameTimerProperty.value -> value: float "Property value"
+#+ * GameSoftBodySettings.cluster_iterations -> cluster_iterations: int "Specify the number of cluster iterations"
+#GameSoftBodySettings.collision_margin -> collision_margin: float "Collision margin for soft body. Small value makes the algorithm unstable"
+#+ * GameSoftBodySettings.dynamic_friction -> dynamic_friction: float "Dynamic Friction"
+#GameSoftBodySettings.linear_stiffness -> linear_stiffness: float "Linear stiffness of the soft body links"
+#GameSoftBodySettings.location_iterations -> location_iterations: int "Position solver iterations"
+#GameSoftBodySettings.shape_threshold -> shape_threshold: float "Shape matching threshold"
+#GameSoftBodySettings.use_bending_constraints -> use_bending_constraints: boolean "Enable bending constraints"
+#GameSoftBodySettings.use_cluster_rigid_to_softbody -> use_cluster_rigid_to_softbody: boolean "Enable cluster collision between soft and rigid body"
+#GameSoftBodySettings.use_cluster_soft_to_softbody -> use_cluster_soft_to_softbody: boolean "Enable cluster collision between soft and soft body"
+#GameSoftBodySettings.use_shape_match -> use_shape_match: boolean "Enable soft body shape matching goal"
+#GameSoftBodySettings.weld_threshold -> weld_threshold: float "Welding threshold: distance between nearby vertices to be considered equal => set to 0.0 to disable welding test and speed up scene loading (ok if the mesh has no duplicates)"
+#+ * Header.bl_idname -> bl_idname: string "If this is set, the header gets a custom ID, otherwise it takes the name of the class used to define the panel. For example, if the class name is OBJECT_HT_hello, and bl_idname is not set by the script, then bl_idname = OBJECT_HT_hello"
+#+ * Header.bl_space_type -> bl_space_type: enum "The space where the header is going to be used in."
+#+ * Header.layout -> layout: pointer, "(read-only) Defines the structure of the header in the UI."
+#+ * Histogram.mode -> mode: enum "Channels to display when drawing the histogram"
+#+ * ID.library -> library: pointer, "(read-only) Library file the datablock is linked from"
+#+ * ID.name -> name: string "Unique datablock ID name"
+#+ * ID.tag -> tag: boolean "Tools can use this to tag data, (initial state is undefined)"
+#ID.use_fake_user -> use_fake_user: boolean "Saves this datablock even if it has no users"
+#+ * ID.users -> users: int, "(read-only) Number of times this datablock is referenced"
+#+ * IDProperty.collection -> collection: collection, "(read-only)"
+#+ * IDProperty.double -> double: float "NO DESCRIPTION"
+#+ * IDProperty.double_array -> double_array: float[1] "NO DESCRIPTION"
+#+ * IDProperty.float -> float: float "NO DESCRIPTION"
+#+ * IDProperty.float_array -> float_array: float[1] "NO DESCRIPTION"
+#+ * IDProperty.group -> group: pointer, "(read-only)"
+#+ * IDProperty.int -> int: int "NO DESCRIPTION"
+#+ * IDProperty.int_array -> int_array: int[1] "NO DESCRIPTION"
+#+ * IDProperty.string -> string: string "NO DESCRIPTION"
+#+ * IDPropertyGroup.name -> name: string "Unique name used in the code and scripting"
+#+ * IDPropertyGroup|NetRenderJob.name -> name: string "NO DESCRIPTION"
+#+ * IDPropertyGroup|NetRenderSettings.active_blacklisted_slave_index -> active_blacklisted_slave_index: int "NO DESCRIPTION"
+#+ * IDPropertyGroup|NetRenderSettings.active_job_index -> active_job_index: int "NO DESCRIPTION"
+#+ * IDPropertyGroup|NetRenderSettings.active_slave_index -> active_slave_index: int "NO DESCRIPTION"
+#+ * IDPropertyGroup|NetRenderSettings.chunks -> chunks: int "Number of frame to dispatch to each slave in one chunk"
+#+ * IDPropertyGroup|NetRenderSettings.job_category -> job_category: string "Category of the job"
+#+ * IDPropertyGroup|NetRenderSettings.job_id -> job_id: string "id of the last sent render job"
+#+ * IDPropertyGroup|NetRenderSettings.job_name -> job_name: string "Name of the job"
+#+ * IDPropertyGroup|NetRenderSettings.jobs -> jobs: collection, "(read-only)"
+#+ * IDPropertyGroup|NetRenderSettings.mode -> mode: enum "Mode of operation of this instance"
+#+ * IDPropertyGroup|NetRenderSettings.path -> path: string "Path for temporary files"
+#+ * IDPropertyGroup|NetRenderSettings.priority -> priority: int "Priority of the job"
+#+ * IDPropertyGroup|NetRenderSettings.server_address -> server_address: string "IP or name of the master render server"
+#+ * IDPropertyGroup|NetRenderSettings.server_port -> server_port: int "port of the master render server"
+#+ * IDPropertyGroup|NetRenderSettings.slaves -> slaves: collection, "(read-only)"
+#+ * IDPropertyGroup|NetRenderSettings.slaves_blacklist -> slaves_blacklist: collection, "(read-only)"
+#IDPropertyGroup|NetRenderSettings.use_master_broadcast -> use_master_broadcast: boolean "broadcast master server address on local network"
+#IDPropertyGroup|NetRenderSettings.use_master_clear -> use_master_clear: boolean "delete saved files on exit"
+#IDPropertyGroup|NetRenderSettings.use_slave_clear -> use_slave_clear: boolean "delete downloaded files on exit"
+#IDPropertyGroup|NetRenderSettings.use_slave_output_log -> use_slave_output_log: boolean "Output render text log to console as well as sending it to the master"
+#IDPropertyGroup|NetRenderSettings.use_slave_thumb -> use_slave_thumb: boolean "Generate thumbnails on slaves instead of master"
+#+ * IDPropertyGroup|NetRenderSlave.name -> name: string "NO DESCRIPTION"
+#+ * IDPropertyGroup|OperatorFileListElement.name -> name: string "the name of a file or directory within a file list"
+#+ * IDPropertyGroup|OperatorMousePath.loc -> loc: float[2] "Mouse location"
+#+ * IDPropertyGroup|OperatorMousePath.time -> time: float "Time of mouse location"
+#+ * IDPropertyGroup|OperatorStrokeElement.location -> location: float[3] "NO DESCRIPTION"
+#+ * IDPropertyGroup|OperatorStrokeElement.mouse -> mouse: float[2] "NO DESCRIPTION"
+#+ * IDPropertyGroup|OperatorStrokeElement.pen_flip -> pen_flip: boolean "NO DESCRIPTION"
+#+ * IDPropertyGroup|OperatorStrokeElement.pressure -> pressure: float "Tablet pressure"
+#+ * IDPropertyGroup|OperatorStrokeElement.time -> time: float "NO DESCRIPTION"
+#+ * IDPropertyGroup|PoseTemplate.name -> name: string "NO DESCRIPTION"
+#+ * IDPropertyGroup|PoseTemplateSettings.active_template_index -> active_template_index: int "NO DESCRIPTION"
+#+ * IDPropertyGroup|PoseTemplateSettings.templates -> templates: collection, "(read-only)"
+#IDPropertyGroup|PoseTemplateSettings.use_generate_deform_rig -> use_generate_deform_rig: boolean "Create a copy of the metarig, constrainted by the generated rig"
+#+ * ID|Action.fcurves -> fcurves: collection, "(read-only) The individual F-Curves that make up the Action"
+#+ * ID|Action.groups -> groups: collection, "(read-only) Convenient groupings of F-Curves"
+#+ * ID|Action.pose_markers -> pose_markers: collection, "(read-only) Markers specific to this Action, for labeling poses"
+#+ * ID|Armature.animation_data -> animation_data: pointer, "(read-only) Animation data for this datablock"
+#+ * ID|Armature.bones -> bones: collection, "(read-only)"
+#ID|Armature.draw_type -> draw_type: enum "NO DESCRIPTION"
+#+ * ID|Armature.edit_bones -> edit_bones: collection, "(read-only)"
+#+ * ID|Armature.ghost_frame_end -> ghost_frame_end: int "End frame of range of Ghosts to display (not for Around Current Frame Onion-skinning method)"
+#+ * ID|Armature.ghost_frame_start -> ghost_frame_start: int "Starting frame of range of Ghosts to display (not for Around Current Frame Onion-skinning method)"
+#+ * ID|Armature.ghost_size -> ghost_size: int "Frame step for Ghosts (not for On Keyframes Onion-skinning method)"
+#+ * ID|Armature.ghost_step -> ghost_step: int "Number of frame steps on either side of current frame to show as ghosts (only for Around Current Frame Onion-skinning method)"
+#+ * ID|Armature.ghost_type -> ghost_type: enum "Method of Onion-skinning for active Action"
+#ID|Armature.layers -> layers: boolean[32] "Armature layer visibility"
+#ID|Armature.layers_protected -> layers_protected: boolean[32] "Protected layers in Proxy Instances are restored to Proxy settings on file reload and undo"
+#+ * ID|Armature.pose_position -> pose_position: enum "Show armature in binding pose or final posed state"
+#ID|Armature.show_axes -> show_axes: boolean "Draw bone axes"
+#ID|Armature.show_bone_custom_shapes -> show_bone_custom_shapes: boolean "Draw bones with their custom shapes"
+#ID|Armature.show_group_colors -> show_group_colors: boolean "Draw bone group colors"
+#ID|Armature.show_names -> show_names: boolean "Draw bone names"
+#ID|Armature.show_only_ghost_selected -> show_only_ghost_selected: boolean "NO DESCRIPTION"
+#ID|Armature.use_auto_ik -> use_auto_ik: boolean "Add temporaral IK constraints while grabbing bones in Pose Mode"
+#ID|Armature.use_deform_delay -> use_deform_delay: boolean "Dont deform children when manipulating bones in Pose Mode"
+#ID|Armature.use_deform_envelopes -> use_deform_envelopes: boolean "Enable Bone Envelopes when defining deform"
+#ID|Armature.use_deform_preserve_volume -> use_deform_preserve_volume: boolean "Enable deform rotation with Quaternions"
+#ID|Armature.use_deform_vertex_groups -> use_deform_vertex_groups: boolean "Enable Vertex Groups when defining deform"
+#ID|Armature.use_mirror_x -> use_mirror_x: boolean "Apply changes to matching bone on opposite side of X-Axis"
+#ID|Brush.auto_smooth_factor -> auto_smooth_factor: float "Amount of smoothing to automatically apply to each stroke"
+#+ * ID|Brush.blend -> blend: enum "Brush blending mode"
+#+ * ID|Brush.clone_alpha -> clone_alpha: float "Opacity of clone image display"
+#+ * ID|Brush.clone_image -> clone_image: pointer "Image for clone tool"
+#+ * ID|Brush.clone_offset -> clone_offset: float[2] "NO DESCRIPTION"
+#+ * ID|Brush.color -> color: float[3] "NO DESCRIPTION"
+#+ * ID|Brush.crease_pinch_factor -> crease_pinch_factor: float "How much the crease brush pinches"
+#ID|Brush.cursor_color_add -> cursor_color_add: float[3] "Color of cursor when adding"
+#ID|Brush.cursor_color_subtract -> cursor_color_subtract: float[3] "Color of cursor when subtracting"
+#+ * ID|Brush.curve -> curve: pointer, "(read-only) Editable falloff curve"
+#+ * ID|Brush.direction -> direction: enum "NO DESCRIPTION"
+#+ * ID|Brush.icon_filepath -> icon_filepath: string "File path to brush icon"
+#+ * ID|Brush.imagepaint_tool -> imagepaint_tool: enum "NO DESCRIPTION"
+#+ * ID|Brush.jitter -> jitter: float "Jitter the position of the brush while painting"
+#+ * ID|Brush.normal_weight -> normal_weight: float "How much grab will pull vertexes out of surface during a grab"
+#+ * ID|Brush.plane_offset -> plane_offset: float "Adjusts plane on which the brush acts towards or away from the object surface"
+#+ * ID|Brush.plane_trim -> plane_trim: float "If a vertex is further from offset plane than this then it is not affected"
+#+ * ID|Brush.rate -> rate: float "Interval between paints for Airbrush"
+#+ * ID|Brush.sculpt_plane -> sculpt_plane: enum "NO DESCRIPTION"
+#+ * ID|Brush.sculpt_tool -> sculpt_tool: enum "NO DESCRIPTION"
+#+ * ID|Brush.size -> size: int "Radius of the brush in pixels"
+#+ * ID|Brush.smooth_stroke_factor -> smooth_stroke_factor: float "Higher values give a smoother stroke"
+#+ * ID|Brush.smooth_stroke_radius -> smooth_stroke_radius: int "Minimum distance from last point before stroke continues"
+#ID|Brush.spacing -> spacing: int "Spacing between brush daubs as a percentage of brush diameter"
+#+ * ID|Brush.strength -> strength: float "How powerful the effect of the brush is when applied"
+#+ * ID|Brush.stroke_method -> stroke_method: enum "NO DESCRIPTION"
+#+ * ID|Brush.texture -> texture: pointer "NO DESCRIPTION"
+#ID|Brush.texture_angle_source_no_random -> texture_angle_source_no_random: enum "NO DESCRIPTION"
+#ID|Brush.texture_angle_source_random -> texture_angle_source_random: enum "NO DESCRIPTION"
+#+ * ID|Brush.texture_overlay_alpha -> texture_overlay_alpha: int "NO DESCRIPTION"
+#+ * ID|Brush.texture_sample_bias -> texture_sample_bias: float "Value added to texture samples"
+#+ * ID|Brush.texture_slot -> texture_slot: pointer, "(read-only)"
+#+ * ID|Brush.unprojected_radius -> unprojected_radius: float "Radius of brush in Blender units"
+#+ * ID|Brush.use_accumulate -> use_accumulate: boolean "Accumulate stroke dabs on top of each other"
+#+ * ID|Brush.use_adaptive_space -> use_adaptive_space: boolean "Space daubs according to surface orientation instead of screen space"
+#+ * ID|Brush.use_airbrush -> use_airbrush: boolean "Keep applying paint effect while holding mouse (spray)"
+#+ * ID|Brush.use_alpha -> use_alpha: boolean "When this is disabled, lock alpha while painting"
+#+ * ID|Brush.use_anchor -> use_anchor: boolean "Keep the brush anchored to the initial location"
+#+ * ID|Brush.use_custom_icon -> use_custom_icon: boolean "Set the brush icon from an image file"
+#ID|Brush.use_edge_to_edge -> use_edge_to_edge: boolean "Drag anchor brush from edge-to-edge"
+#+ * ID|Brush.use_frontface -> use_frontface: boolean "Brush only affects vertexes that face the viewer"
+#+ * ID|Brush.use_inverse_smooth_pressure -> use_inverse_smooth_pressure: boolean "Lighter pressure causes more smoothing to be applied"
+#+ * ID|Brush.use_locked_size -> use_locked_size: boolean "When locked brush stays same size relative to object; when unlocked brush size is given in pixels"
+#+ * ID|Brush.use_offset_pressure -> use_offset_pressure: boolean "Enable tablet pressure sensitivity for offset"
+#+ * ID|Brush.use_original_normal -> use_original_normal: boolean "When locked keep using normal of surface where stroke was initiated"
+#+ * ID|Brush.use_paint_sculpt -> use_paint_sculpt: boolean "Use this brush in sculpt mode"
+#+ * ID|Brush.use_paint_texture -> use_paint_texture: boolean "Use this brush in texture paint mode"
+#+ * ID|Brush.use_paint_vertex -> use_paint_vertex: boolean "Use this brush in vertex paint mode"
+#+ * ID|Brush.use_paint_weight -> use_paint_weight: boolean "Use this brush in weight paint mode"
+#+ * ID|Brush.use_persistent -> use_persistent: boolean "Sculpts on a persistent layer of the mesh"
+#+ * ID|Brush.use_plane_trim -> use_plane_trim: boolean "Enable Plane Trim"
+#ID|Brush.use_pressure_jitter -> use_pressure_jitter: boolean "Enable tablet pressure sensitivity for jitter"
+#ID|Brush.use_pressure_size -> use_pressure_size: boolean "Enable tablet pressure sensitivity for size"
+#ID|Brush.use_pressure_spacing -> use_pressure_spacing: boolean "Enable tablet pressure sensitivity for spacing"
+#ID|Brush.use_pressure_strength -> use_pressure_strength: boolean "Enable tablet pressure sensitivity for strength"
+#+ * ID|Brush.use_rake -> use_rake: boolean "Rotate the brush texture to match the stroke direction"
+#+ * ID|Brush.use_random_rotation -> use_random_rotation: boolean "Rotate the brush texture at random"
+#ID|Brush.use_restore_mesh -> use_restore_mesh: boolean "Allows a single dot to be carefully positioned"
+#+ * ID|Brush.use_smooth_stroke -> use_smooth_stroke: boolean "Brush lags behind mouse and follows a smoother path"
+#+ * ID|Brush.use_space -> use_space: boolean "Limit brush application to the distance specified by spacing"
+#+ * ID|Brush.use_space_atten -> use_space_atten: boolean "Automatically adjusts strength to give consistent results for different spacings"
+#+ * ID|Brush.use_texture_overlay -> use_texture_overlay: boolean "Show texture in viewport"
+#+ * ID|Brush.use_wrap -> use_wrap: boolean "Enable torus wrapping while painting"
+#+ * ID|Brush.vertexpaint_tool -> vertexpaint_tool: enum "NO DESCRIPTION"
+#+ * ID|Camera.angle -> angle: float "Perspective Camera lens field of view in degrees"
+#+ * ID|Camera.animation_data -> animation_data: pointer, "(read-only) Animation data for this datablock"
+#+ * ID|Camera.clip_end -> clip_end: float "Camera far clipping distance"
+#+ * ID|Camera.clip_start -> clip_start: float "Camera near clipping distance"
+#+ * ID|Camera.dof_distance -> dof_distance: float "Distance to the focus point for depth of field"
+#+ * ID|Camera.dof_object -> dof_object: pointer "Use this object to define the depth of field focal point"
+#+ * ID|Camera.draw_size -> draw_size: float "Apparent size of the Camera object in the 3D View"
+#+ * ID|Camera.lens -> lens: float "Perspective Camera lens value in millimeters"
+#+ * ID|Camera.lens_unit -> lens_unit: enum "Unit to edit lens in for the user interface"
+#+ * ID|Camera.ortho_scale -> ortho_scale: float "Orthographic Camera scale (similar to zoom)"
+#+ * ID|Camera.passepartout_alpha -> passepartout_alpha: float "Opacity (alpha) of the darkened overlay in Camera view"
+#+ * ID|Camera.shift_x -> shift_x: float "Perspective Camera horizontal shift"
+#+ * ID|Camera.shift_y -> shift_y: float "Perspective Camera vertical shift"
+#+ * ID|Camera.show_limits -> show_limits: boolean "Draw the clipping range and focus point on the camera"
+#+ * ID|Camera.show_mist -> show_mist: boolean "Draw a line from the Camera to indicate the mist area"
+#+ * ID|Camera.show_name -> show_name: boolean "Show the active Cameras name in Camera view"
+#+ * ID|Camera.show_passepartout -> show_passepartout: boolean "Show a darkened overlay outside the image area in Camera view"
+#+ * ID|Camera.show_title_safe -> show_title_safe: boolean "Show indicators for the title safe zone in Camera view"
+#+ * ID|Camera.type -> type: enum "Camera types"
+#ID|Camera.use_panorama -> use_panorama: boolean "Render the scene with a cylindrical camera for pseudo-fisheye lens effects"
+#+ * ID|Curve.animation_data -> animation_data: pointer, "(read-only) Animation data for this datablock"
+#+ * ID|Curve.bevel_depth -> bevel_depth: float "Bevel depth when not using a bevel object"
+#+ * ID|Curve.bevel_object -> bevel_object: pointer "Curve object name that defines the bevel shape"
+#+ * ID|Curve.bevel_resolution -> bevel_resolution: int "Bevel resolution when depth is non-zero and no specific bevel object has been defined"
+#+ * ID|Curve.dimensions -> dimensions: enum "Select 2D or 3D curve type"
+#+ * ID|Curve.eval_time -> eval_time: float "Parametric position along the length of the curve that Objects following it should be at. Position is evaluated by dividing by the Path Length value"
+#+ * ID|Curve.extrude -> extrude: float "Amount of curve extrusion when not using a bevel object"
+#+ * ID|Curve.materials -> materials: collection, "(read-only)"
+#ID|Curve.offset -> offset: float "Scale the original width (1.0) based on given factor"
+#ID|Curve.path_duration -> path_duration: int "The number of frames that are needed to traverse the path, defining the maximum value for the Evaluation Time setting"
+#+ * ID|Curve.render_resolution_u -> render_resolution_u: int "Surface resolution in U direction used while rendering. Zero skips this property"
+#+ * ID|Curve.render_resolution_v -> render_resolution_v: int "Surface resolution in V direction used while rendering. Zero skips this property"
+#+ * ID|Curve.resolution_u -> resolution_u: int "Surface resolution in U direction"
+#+ * ID|Curve.resolution_v -> resolution_v: int "Surface resolution in V direction"
+#+ * ID|Curve.shape_keys -> shape_keys: pointer, "(read-only)"
+#ID|Curve.show_handles -> show_handles: boolean "Display bezier handles in editmode"
+#ID|Curve.show_normal_face -> show_normal_face: boolean "Display 3D curve normals in editmode"
+#+ * ID|Curve.splines -> splines: collection, "(read-only) Collection of splines in this curve data object"
+#+ * ID|Curve.taper_object -> taper_object: pointer "Curve object name that defines the taper (width)"
+#ID|Curve.texspace_location -> texspace_location: float[3] "Texture space location"
+#+ * ID|Curve.texspace_size -> texspace_size: float[3] "Texture space size"
+#+ * ID|Curve.twist_mode -> twist_mode: enum "The type of tilt calculation for 3D Curves"
+#+ * ID|Curve.twist_smooth -> twist_smooth: float "Smoothing iteration for tangents"
+#ID|Curve.use_auto_texspace -> use_auto_texspace: boolean "Adjusts active objects texture space automatically when transforming object"
+#+ * ID|Curve.use_deform_bounds -> use_deform_bounds: boolean "Use the mesh bounds to clamp the deformation"
+#ID|Curve.use_fill_back -> use_fill_back: boolean "Draw filled back for extruded/beveled curves"
+#ID|Curve.use_fill_deform -> use_fill_deform: boolean "Fill curve after applying deformation"
+#ID|Curve.use_fill_front -> use_fill_front: boolean "Draw filled front for extruded/beveled curves"
+#ID|Curve.use_map_on_length -> use_map_on_length: boolean "Generate texture mapping coordinates following the curve direction, rather than the local bounding box"
+#+ * ID|Curve.use_path -> use_path: boolean "Enable the curve to become a translation path"
+#+ * ID|Curve.use_path_follow -> use_path_follow: boolean "Make curve path children to rotate along the path"
+#+ * ID|Curve.use_radius -> use_radius: boolean "Option for paths: apply the curve radius with path following it and deforming"
+#+ * ID|Curve.use_stretch -> use_stretch: boolean "Option for curve-deform: makes deformed child to stretch along entire path"
+#+ * ID|Curve.use_time_offset -> use_time_offset: boolean "Children will use TimeOffs value as path distance offset"
+#ID|Curve|SurfaceCurve.use_map_on_length -> use_map_on_length: boolean "Generate texture mapping coordinates following the curve direction, rather than the local bounding box"
+#MAKE COLLECTION ATTR * ID|Curve|TextCurve.active_textbox -> active_textbox: int "NO DESCRIPTION"
+#ID|Curve|TextCurve.align -> align: enum "Text align from the object center"
+#+ * ID|Curve|TextCurve.body -> body: string "contents of this text object"
+#+ * ID|Curve|TextCurve.body_format -> body_format: collection, "(read-only) Stores the style of each character"
+#+ * ID|Curve|TextCurve.edit_format -> edit_format: pointer, "(read-only) Editing settings character formatting"
+#+ * ID|Curve|TextCurve.family -> family: string "Use Blender Objects as font characters. Give font objects a common name followed by the character it represents, eg. familya, familyb etc, and turn on Verts Duplication"
+#ID|Curve|TextCurve.follow_curve -> follow_curve: pointer "Curve deforming text object"
+#+ * ID|Curve|TextCurve.font -> font: pointer "NO DESCRIPTION"
+#+ * ID|Curve|TextCurve.offset_x -> offset_x: float "Horizontal offset from the object origin"
+#+ * ID|Curve|TextCurve.offset_y -> offset_y: float "Vertical offset from the object origin"
+#+ * ID|Curve|TextCurve.shear -> shear: float "Italic angle of the characters"
+#ID|Curve|TextCurve.size -> size: float "NO DESCRIPTION"
+#+ * ID|Curve|TextCurve.small_caps_scale -> small_caps_scale: float "Scale of small capitals"
+#ID|Curve|TextCurve.space_character -> space_character: float "NO DESCRIPTION"
+#ID|Curve|TextCurve.space_line -> space_line: float "NO DESCRIPTION"
+#ID|Curve|TextCurve.space_word -> space_word: float "NO DESCRIPTION"
+#ID|Curve|TextCurve.text_boxes -> text_boxes: collection, "(read-only)"
+#ID|Curve|TextCurve.underline_height -> underline_height: float "NO DESCRIPTION"
+#ID|Curve|TextCurve.underline_position -> underline_position: float "Vertical position of underline"
+#ID|Curve|TextCurve.use_fast_edit -> use_fast_edit: boolean "Dont fill polygons while editing"
+#ID|Curve|TextCurve.use_map_on_length -> use_map_on_length: boolean "Generate texture mapping coordinates following the curve direction, rather than the local bounding box"
+#+ * ID|GreasePencil.draw_mode -> draw_mode: enum "NO DESCRIPTION"
+#+ * ID|GreasePencil.layers -> layers: collection, "(read-only)"
+#+ * ID|GreasePencil.use_stroke_endpoints -> use_stroke_endpoints: boolean "Only use the first and last parts of the stroke for snapping"
+#+ * ID|Group.dupli_offset -> dupli_offset: float[3] "Offset from the origin to use when instancing as DupliGroup"
+#ID|Group.layers -> layers: boolean[20] "Layers visible when this groups is instanced as a dupli"
+#+ * ID|Group.objects -> objects: collection, "(read-only) A collection of this groups objects"
+#+ * ID|Image.bindcode -> bindcode: int, "(read-only) OpenGL bindcode"
+#+ * ID|Image.depth -> depth: int, "(read-only) Image bit depth"
+#+ * ID|Image.display_aspect -> display_aspect: float[2] "Display Aspect for this image, does not affect rendering"
+#+ * ID|Image.field_order -> field_order: enum "Order of video fields. Select which lines are displayed first"
+#+ * ID|Image.file_format -> file_format: enum "Format used for re-saving this file"
+#+ * ID|Image.filepath -> filepath: string "Image/Movie file name"
+#+ * ID|Image.filepath_raw -> filepath_raw: string "Image/Movie file name (without data refreshing)"
+#ID|Image.fps -> fps: int "Speed of the animation in frames per second"
+#ID|Image.frame_end -> frame_end: int "End frame of an animated texture"
+#ID|Image.frame_start -> frame_start: int "Start frame of an animated texture"
+#+ * ID|Image.generated_height -> generated_height: int "Generated image height"
+#+ * ID|Image.generated_type -> generated_type: enum "Generated image type"
+#+ * ID|Image.generated_width -> generated_width: int "Generated image width"
+#+ * ID|Image.has_data -> has_data: boolean, "(read-only) True if this image has data"
+#ID|Image.is_dirty -> is_dirty: boolean, "(read-only) Image has changed and is not saved"
+#+ * ID|Image.mapping -> mapping: enum "Mapping type to use for this image in the game engine"
+#+ * ID|Image.packed_file -> packed_file: pointer, "(read-only)"
+#+ * ID|Image.size -> size: int[2], "(read-only) Width and height in pixels, zero when image data cant be loaded"
+#+ * ID|Image.source -> source: enum "Where the image comes from"
+#+ * ID|Image.tiles_x -> tiles_x: int "Degree of repetition in the X direction"
+#+ * ID|Image.tiles_y -> tiles_y: int "Degree of repetition in the Y direction"
+#+ * ID|Image.type -> type: enum, "(read-only) How to generate the image"
+#ID|Image.use_animation -> use_animation: boolean "Use as animated texture in the game engine"
+#ID|Image.use_clamp_x -> use_clamp_x: boolean "Disable texture repeating horizontally"
+#ID|Image.use_clamp_y -> use_clamp_y: boolean "Disable texture repeating vertically"
+#ID|Image.use_fields -> use_fields: boolean "Use fields of the image"
+#ID|Image.use_premultiply -> use_premultiply: boolean "Convert RGB from key alpha to premultiplied alpha"
+#ID|Image.use_tiles -> use_tiles: boolean "Use of tilemode for faces (default shift-LMB to pick the tile for selected faces)"
+#+ * ID|Key.animation_data -> animation_data: pointer, "(read-only) Animation data for this datablock"
+#+ * ID|Key.keys -> keys: collection, "(read-only) Shape keys"
+#+ * ID|Key.reference_key -> reference_key: pointer, "(read-only)"
+#+ * ID|Key.slurph -> slurph: int "Creates a delay in amount of frames in applying keypositions, first vertex goes first"
+#ID|Key.use_relative -> use_relative: boolean "Makes shape keys relative"
+#+ * ID|Key.user -> user: pointer, "(read-only) Datablock using these shape keys"
+#+ * ID|Lamp.active_texture -> active_texture: pointer "Active texture slot being displayed"
+#+ * ID|Lamp.active_texture_index -> active_texture_index: int "Index of active texture slot"
+#+ * ID|Lamp.animation_data -> animation_data: pointer, "(read-only) Animation data for this datablock"
+#+ * ID|Lamp.color -> color: float[3] "Light color"
+#+ * ID|Lamp.distance -> distance: float "Falloff distance - the light is at half the original intensity at this point"
+#+ * ID|Lamp.energy -> energy: float "Amount of light that the lamp emits"
+#+ * ID|Lamp.texture_slots -> texture_slots: collection, "(read-only) Texture slots defining the mapping and influence of textures"
+#+ * ID|Lamp.type -> type: enum "Type of Lamp"
+#ID|Lamp.use_diffuse -> use_diffuse: boolean "Lamp does diffuse shading"
+#ID|Lamp.use_negative -> use_negative: boolean "Lamp casts negative light"
+#ID|Lamp.use_own_layer -> use_own_layer: boolean "Illuminates objects only on the same layer the lamp is on"
+#ID|Lamp.use_specular -> use_specular: boolean "Lamp creates specular highlights"
+#+ * ID|Lamp|AreaLamp.gamma -> gamma: float "Light gamma correction value"
+#+ * ID|Lamp|AreaLamp.shadow_adaptive_threshold -> shadow_adaptive_threshold: float "Threshold for Adaptive Sampling (Raytraced shadows)"
+#+ * ID|Lamp|AreaLamp.shadow_color -> shadow_color: float[3] "Color of shadows cast by the lamp"
+#+ * ID|Lamp|AreaLamp.shadow_method -> shadow_method: enum "Method to compute lamp shadow with"
+#ID|Lamp|AreaLamp.shadow_ray_sample_method -> shadow_ray_sample_method: enum "Method for generating shadow samples: Adaptive QMC is fastest, Constant QMC is less noisy but slower"
+#+ * ID|Lamp|AreaLamp.shadow_ray_samples_x -> shadow_ray_samples_x: int "Amount of samples taken extra (samples x samples)"
+#+ * ID|Lamp|AreaLamp.shadow_ray_samples_y -> shadow_ray_samples_y: int "Amount of samples taken extra (samples x samples)"
+#+ * ID|Lamp|AreaLamp.shadow_soft_size -> shadow_soft_size: float "Light size for ray shadow sampling (Raytraced shadows)"
+#+ * ID|Lamp|AreaLamp.shape -> shape: enum "Shape of the area lamp"
+#+ * ID|Lamp|AreaLamp.size -> size: float "Size of the area of the area Lamp, X direction size for Rectangle shapes"
+#+ * ID|Lamp|AreaLamp.size_y -> size_y: float "Size of the area of the area Lamp in the Y direction for Rectangle shapes"
+#ID|Lamp|AreaLamp.use_dither -> use_dither: boolean "Use 2x2 dithering for sampling (Constant Jittered sampling)"
+#ID|Lamp|AreaLamp.use_jitter -> use_jitter: boolean "Use noise for sampling (Constant Jittered sampling)"
+#ID|Lamp|AreaLamp.use_only_shadow -> use_only_shadow: boolean "Causes light to cast shadows only without illuminating objects"
+#ID|Lamp|AreaLamp.use_shadow_layer -> use_shadow_layer: boolean "Causes only objects on the same layer to cast shadows"
+#ID|Lamp|AreaLamp.use_umbra -> use_umbra: boolean "Emphasize parts that are fully shadowed (Constant Jittered sampling)"
+#+ * ID|Lamp|PointLamp.falloff_curve -> falloff_curve: pointer, "(read-only) Custom Lamp Falloff Curve"
+#+ * ID|Lamp|PointLamp.falloff_type -> falloff_type: enum "Intensity Decay with distance"
+#+ * ID|Lamp|PointLamp.linear_attenuation -> linear_attenuation: float "Linear distance attenuation"
+#+ * ID|Lamp|PointLamp.quadratic_attenuation -> quadratic_attenuation: float "Quadratic distance attenuation"
+#+ * ID|Lamp|PointLamp.shadow_adaptive_threshold -> shadow_adaptive_threshold: float "Threshold for Adaptive Sampling (Raytraced shadows)"
+#+ * ID|Lamp|PointLamp.shadow_color -> shadow_color: float[3] "Color of shadows cast by the lamp"
+#+ * ID|Lamp|PointLamp.shadow_method -> shadow_method: enum "Method to compute lamp shadow with"
+#ID|Lamp|PointLamp.shadow_ray_sample_method -> shadow_ray_sample_method: enum "Method for generating shadow samples: Adaptive QMC is fastest, Constant QMC is less noisy but slower"
+#+ * ID|Lamp|PointLamp.shadow_ray_samples -> shadow_ray_samples: int "Amount of samples taken extra (samples x samples)"
+#+ * ID|Lamp|PointLamp.shadow_soft_size -> shadow_soft_size: float "Light size for ray shadow sampling (Raytraced shadows)"
+#ID|Lamp|PointLamp.use_only_shadow -> use_only_shadow: boolean "Causes light to cast shadows only without illuminating objects"
+#ID|Lamp|PointLamp.use_shadow_layer -> use_shadow_layer: boolean "Causes only objects on the same layer to cast shadows"
+#ID|Lamp|PointLamp.use_sphere -> use_sphere: boolean "Sets light intensity to zero beyond lamp distance"
+#+ * ID|Lamp|SpotLamp.compression_threshold -> compression_threshold: float "Deep shadow map compression threshold"
+#+ * ID|Lamp|SpotLamp.falloff_curve -> falloff_curve: pointer, "(read-only) Custom Lamp Falloff Curve"
+#+ * ID|Lamp|SpotLamp.falloff_type -> falloff_type: enum "Intensity Decay with distance"
+#+ * ID|Lamp|SpotLamp.halo_intensity -> halo_intensity: float "Brightness of the spotlights halo cone (Buffer Shadows)"
+#+ * ID|Lamp|SpotLamp.halo_step -> halo_step: int "Volumetric halo sampling frequency"
+#+ * ID|Lamp|SpotLamp.linear_attenuation -> linear_attenuation: float "Linear distance attenuation"
+#+ * ID|Lamp|SpotLamp.quadratic_attenuation -> quadratic_attenuation: float "Quadratic distance attenuation"
+#+ * ID|Lamp|SpotLamp.shadow_adaptive_threshold -> shadow_adaptive_threshold: float "Threshold for Adaptive Sampling (Raytraced shadows)"
+#+ * ID|Lamp|SpotLamp.shadow_buffer_bias -> shadow_buffer_bias: float "Shadow buffer sampling bias"
+#+ * ID|Lamp|SpotLamp.shadow_buffer_clip_end -> shadow_buffer_clip_end: float "Shadow map clip end beyond which objects will not generate shadows"
+#+ * ID|Lamp|SpotLamp.shadow_buffer_clip_start -> shadow_buffer_clip_start: float "Shadow map clip start: objects closer will not generate shadows"
+#+ * ID|Lamp|SpotLamp.shadow_buffer_samples -> shadow_buffer_samples: int "Number of shadow buffer samples"
+#+ * ID|Lamp|SpotLamp.shadow_buffer_size -> shadow_buffer_size: int "Resolution of the shadow buffer, higher values give crisper shadows but use more memory"
+#+ * ID|Lamp|SpotLamp.shadow_buffer_soft -> shadow_buffer_soft: float "Size of shadow buffer sampling area"
+#+ * ID|Lamp|SpotLamp.shadow_buffer_type -> shadow_buffer_type: enum "Type of shadow buffer"
+#+ * ID|Lamp|SpotLamp.shadow_color -> shadow_color: float[3] "Color of shadows cast by the lamp"
+#+ * ID|Lamp|SpotLamp.shadow_filter_type -> shadow_filter_type: enum "Type of shadow filter (Buffer Shadows)"
+#+ * ID|Lamp|SpotLamp.shadow_method -> shadow_method: enum "Method to compute lamp shadow with"
+#ID|Lamp|SpotLamp.shadow_ray_sample_method -> shadow_ray_sample_method: enum "Method for generating shadow samples: Adaptive QMC is fastest, Constant QMC is less noisy but slower"
+#+ * ID|Lamp|SpotLamp.shadow_ray_samples -> shadow_ray_samples: int "Amount of samples taken extra (samples x samples)"
+#+ * ID|Lamp|SpotLamp.shadow_sample_buffers -> shadow_sample_buffers: enum "Number of shadow buffers to render for better AA, this increases memory usage"
+#+ * ID|Lamp|SpotLamp.shadow_soft_size -> shadow_soft_size: float "Light size for ray shadow sampling (Raytraced shadows)"
+#+ * ID|Lamp|SpotLamp.show_cone -> show_cone: boolean "Draw transparent cone in 3D view to visualize which objects are contained in it"
+#+ * ID|Lamp|SpotLamp.spot_blend -> spot_blend: float "The softness of the spotlight edge"
+#+ * ID|Lamp|SpotLamp.spot_size -> spot_size: float "Angle of the spotlight beam in degrees"
+#ID|Lamp|SpotLamp.use_auto_clip_end -> use_auto_clip_end: boolean "Automatic calculation of clipping-end, based on visible vertices"
+#ID|Lamp|SpotLamp.use_auto_clip_start -> use_auto_clip_start: boolean "Automatic calculation of clipping-start, based on visible vertices"
+#ID|Lamp|SpotLamp.use_halo -> use_halo: boolean "Renders spotlight with a volumetric halo (Buffer Shadows)"
+#ID|Lamp|SpotLamp.use_only_shadow -> use_only_shadow: boolean "Causes light to cast shadows only without illuminating objects"
+#ID|Lamp|SpotLamp.use_shadow_layer -> use_shadow_layer: boolean "Causes only objects on the same layer to cast shadows"
+#ID|Lamp|SpotLamp.use_sphere -> use_sphere: boolean "Sets light intensity to zero beyond lamp distance"
+#ID|Lamp|SpotLamp.use_square -> use_square: boolean "Casts a square spot light shape"
+#+ * ID|Lamp|SunLamp.shadow_adaptive_threshold -> shadow_adaptive_threshold: float "Threshold for Adaptive Sampling (Raytraced shadows)"
+#+ * ID|Lamp|SunLamp.shadow_color -> shadow_color: float[3] "Color of shadows cast by the lamp"
+#+ * ID|Lamp|SunLamp.shadow_method -> shadow_method: enum "Method to compute lamp shadow with"
+#ID|Lamp|SunLamp.shadow_ray_sample_method -> shadow_ray_sample_method: enum "Method for generating shadow samples: Adaptive QMC is fastest, Constant QMC is less noisy but slower"
+#+ * ID|Lamp|SunLamp.shadow_ray_samples -> shadow_ray_samples: int "Amount of samples taken extra (samples x samples)"
+#+ * ID|Lamp|SunLamp.shadow_soft_size -> shadow_soft_size: float "Light size for ray shadow sampling (Raytraced shadows)"
+#+ * ID|Lamp|SunLamp.sky -> sky: pointer, "(read-only) Sky related settings for sun lamps"
+#ID|Lamp|SunLamp.use_only_shadow -> use_only_shadow: boolean "Causes light to cast shadows only without illuminating objects"
+#ID|Lamp|SunLamp.use_shadow_layer -> use_shadow_layer: boolean "Causes only objects on the same layer to cast shadows"
+#+ * ID|Lattice.interpolation_type_u -> interpolation_type_u: enum "NO DESCRIPTION"
+#+ * ID|Lattice.interpolation_type_v -> interpolation_type_v: enum "NO DESCRIPTION"
+#+ * ID|Lattice.interpolation_type_w -> interpolation_type_w: enum "NO DESCRIPTION"
+#+ * ID|Lattice.points -> points: collection, "(read-only) Points of the lattice"
+#+ * ID|Lattice.points_u -> points_u: int "Points in U direction (cant be changed when there are shape keys)"
+#+ * ID|Lattice.points_v -> points_v: int "Points in V direction (cant be changed when there are shape keys)"
+#+ * ID|Lattice.points_w -> points_w: int "Points in W direction (cant be changed when there are shape keys)"
+#+ * ID|Lattice.shape_keys -> shape_keys: pointer, "(read-only)"
+#ID|Lattice.use_outside -> use_outside: boolean "Only draw, and take into account, the outer vertices"
+#+ * ID|Lattice.vertex_group -> vertex_group: string "Vertex group to apply the influence of the lattice"
+#+ * ID|Library.filepath -> filepath: string "Path to the library .blend file"
+#+ * ID|Library.parent -> parent: pointer, "(read-only)"
+#+ * ID|Material.active_node_material -> active_node_material: pointer "Active node material"
+#+ * ID|Material.active_texture -> active_texture: pointer "Active texture slot being displayed"
+#+ * ID|Material.active_texture_index -> active_texture_index: int "Index of active texture slot"
+#+ * ID|Material.alpha -> alpha: float "Alpha transparency of the material"
+#+ * ID|Material.ambient -> ambient: float "Amount of global ambient color the material receives"
+#+ * ID|Material.animation_data -> animation_data: pointer, "(read-only) Animation data for this datablock"
+#+ * ID|Material.darkness -> darkness: float "Minnaert darkness"
+#+ * ID|Material.diffuse_color -> diffuse_color: float[3] "NO DESCRIPTION"
+#+ * ID|Material.diffuse_fresnel -> diffuse_fresnel: float "Power of Fresnel"
+#+ * ID|Material.diffuse_fresnel_factor -> diffuse_fresnel_factor: float "Blending factor of Fresnel"
+#+ * ID|Material.diffuse_intensity -> diffuse_intensity: float "Amount of diffuse reflection"
+#+ * ID|Material.diffuse_ramp -> diffuse_ramp: pointer, "(read-only) Color ramp used to affect diffuse shading"
+#+ * ID|Material.diffuse_ramp_blend -> diffuse_ramp_blend: enum "NO DESCRIPTION"
+#+ * ID|Material.diffuse_ramp_factor -> diffuse_ramp_factor: float "Blending factor (also uses alpha in Colorband)"
+#+ * ID|Material.diffuse_ramp_input -> diffuse_ramp_input: enum "NO DESCRIPTION"
+#+ * ID|Material.diffuse_shader -> diffuse_shader: enum "NO DESCRIPTION"
+#+ * ID|Material.diffuse_toon_size -> diffuse_toon_size: float "Size of diffuse toon area"
+#+ * ID|Material.diffuse_toon_smooth -> diffuse_toon_smooth: float "Smoothness of diffuse toon area"
+#+ * ID|Material.emit -> emit: float "Amount of light to emit"
+#+ * ID|Material.halo -> halo: pointer, "(read-only) Halo settings for the material"
+#+ * ID|Material.invert_z -> invert_z: boolean "Renders materials faces with an inverted Z buffer (scanline only)"
+#+ * ID|Material.light_group -> light_group: pointer "Limit lighting to lamps in this Group"
+#+ * ID|Material.mirror_color -> mirror_color: float[3] "Mirror color of the material"
+#+ * ID|Material.node_tree -> node_tree: pointer, "(read-only) Node tree for node based materials"
+#ID|Material.offset_z -> offset_z: float "Gives faces an artificial offset in the Z buffer for Z transparency"
+#+ * ID|Material.physics -> physics: pointer, "(read-only) Game physics settings"
+#+ * ID|Material.preview_render_type -> preview_render_type: enum "Type of preview render"
+#+ * ID|Material.raytrace_mirror -> raytrace_mirror: pointer, "(read-only) Raytraced reflection settings for the material"
+#+ * ID|Material.raytrace_transparency -> raytrace_transparency: pointer, "(read-only) Raytraced transparency settings for the material"
+#+ * ID|Material.roughness -> roughness: float "Oren-Nayar Roughness"
+#+ * ID|Material.shadow_buffer_bias -> shadow_buffer_bias: float "Factor to multiply shadow buffer bias with (0 is ignore.)"
+#ID|Material.shadow_cast_alpha -> shadow_cast_alpha: float "Shadow casting alpha, in use for Irregular and Deep shadow buffer"
+#+ * ID|Material.shadow_ray_bias -> shadow_ray_bias: float "Shadow raytracing bias to prevent terminator problems on shadow boundary"
+#+ * ID|Material.specular_alpha -> specular_alpha: float "Alpha transparency for specular areas"
+#+ * ID|Material.specular_color -> specular_color: float[3] "Specular color of the material"
+#+ * ID|Material.specular_hardness -> specular_hardness: int "NO DESCRIPTION"
+#+ * ID|Material.specular_intensity -> specular_intensity: float "NO DESCRIPTION"
+#+ * ID|Material.specular_ior -> specular_ior: float "NO DESCRIPTION"
+#+ * ID|Material.specular_ramp -> specular_ramp: pointer, "(read-only) Color ramp used to affect specular shading"
+#+ * ID|Material.specular_ramp_blend -> specular_ramp_blend: enum "NO DESCRIPTION"
+#+ * ID|Material.specular_ramp_factor -> specular_ramp_factor: float "Blending factor (also uses alpha in Colorband)"
+#+ * ID|Material.specular_ramp_input -> specular_ramp_input: enum "NO DESCRIPTION"
+#+ * ID|Material.specular_shader -> specular_shader: enum "NO DESCRIPTION"
+#+ * ID|Material.specular_slope -> specular_slope: float "The standard deviation of surface slope"
+#+ * ID|Material.specular_toon_size -> specular_toon_size: float "Size of specular toon area"
+#+ * ID|Material.specular_toon_smooth -> specular_toon_smooth: float "Smoothness of specular toon area"
+#+ * ID|Material.strand -> strand: pointer, "(read-only) Strand settings for the material"
+#+ * ID|Material.subsurface_scattering -> subsurface_scattering: pointer, "(read-only) Subsurface scattering settings for the material"
+#+ * ID|Material.texture_slots -> texture_slots: collection, "(read-only) Texture slots defining the mapping and influence of textures"
+#+ * ID|Material.translucency -> translucency: float "Amount of diffuse shading on the back side"
+#+ * ID|Material.transparency_method -> transparency_method: enum "Method to use for rendering transparency"
+#+ * ID|Material.type -> type: enum "Material type defining how the object is rendered"
+#ID|Material.use_cast_approximate -> use_cast_approximate: boolean "Allow this material to cast shadows when using approximate ambient occlusion."
+#ID|Material.use_cast_buffer_shadows -> use_cast_buffer_shadows: boolean "Allow this material to cast shadows from shadow buffer lamps"
+#ID|Material.use_cast_shadows_only -> use_cast_shadows_only: boolean "Makes objects with this material appear invisible, only casting shadows (not rendered)"
+#ID|Material.use_cubic -> use_cubic: boolean "Use cubic interpolation for diffuse values, for smoother transitions"
+#+ * ID|Material.use_diffuse_ramp -> use_diffuse_ramp: boolean "Toggle diffuse ramp operations"
+#ID|Material.use_face_texture -> use_face_texture: boolean "Replaces the objects base color with color from face assigned image textures"
+#ID|Material.use_face_texture_alpha -> use_face_texture_alpha: boolean "Replaces the objects base alpha value with alpha from face assigned image textures"
+#ID|Material.use_full_oversampling -> use_full_oversampling: boolean "Force this material to render full shading/textures for all anti-aliasing samples"
+#ID|Material.use_light_group_exclusive -> use_light_group_exclusive: boolean "Material uses the light group exclusively - these lamps are excluded from other scene lighting"
+#ID|Material.use_mist -> use_mist: boolean "Use mist with this material (in world settings)"
+#+ * ID|Material.use_nodes -> use_nodes: boolean "Use shader nodes to render the material"
+#ID|Material.use_object_color -> use_object_color: boolean "Modulate the result with a per-object color"
+#ID|Material.use_only_shadow -> use_only_shadow: boolean "Renders shadows as the materials alpha value, making materials transparent except for shadowed areas"
+#ID|Material.use_ray_shadow_bias -> use_ray_shadow_bias: boolean "Prevents raytraced shadow errors on surfaces with smooth shaded normals (terminator problem)"
+#ID|Material.use_raytrace -> use_raytrace: boolean "Include this material and geometry that uses it in ray tracing calculations"
+#ID|Material.use_shadeless -> use_shadeless: boolean "Makes this material insensitive to light or shadow"
+#ID|Material.use_shadows -> use_shadows: boolean "Allows this material to receive shadows"
+#+ * ID|Material.use_sky -> use_sky: boolean "Renders this material with zero alpha, with sky background in place (scanline only)"
+#+ * ID|Material.use_specular_ramp -> use_specular_ramp: boolean "Toggle specular ramp operations"
+#ID|Material.use_tangent_shading -> use_tangent_shading: boolean "Use the materials tangent vector instead of the normal for shading - for anisotropic shading effects"
+#+ * ID|Material.use_textures -> use_textures: boolean[18] "Enable/Disable each texture"
+#ID|Material.use_transparency -> use_transparency: boolean "Render material as transparent"
+#ID|Material.use_transparent_shadows -> use_transparent_shadows: boolean "Allow this object to receive transparent shadows casted through other objects"
+#ID|Material.use_vertex_color_light -> use_vertex_color_light: boolean "Add vertex colors as additional lighting"
+#ID|Material.use_vertex_color_paint -> use_vertex_color_paint: boolean "Replaces object base color with vertex colors (multiplies with texture face face assigned textures)"
+#+ * ID|Material.volume -> volume: pointer, "(read-only) Volume settings for the material"
+#+ * ID|Mesh.active_uv_texture -> active_uv_texture: pointer "Active UV texture"
+#+ * ID|Mesh.active_uv_texture_index -> active_uv_texture_index: int "Active UV texture index"
+#+ * ID|Mesh.active_vertex_color -> active_vertex_color: pointer "Active vertex color layer"
+#+ * ID|Mesh.active_vertex_color_index -> active_vertex_color_index: int "Active vertex color index"
+#+ * ID|Mesh.animation_data -> animation_data: pointer, "(read-only) Animation data for this datablock"
+#ID|Mesh.auto_smooth_angle -> auto_smooth_angle: int "Defines maximum angle between face normals that Auto Smooth will operate on"
+#+ * ID|Mesh.edges -> edges: collection, "(read-only) Edges of the mesh"
+#+ * ID|Mesh.faces -> faces: collection, "(read-only) Faces of the mesh"
+#ID|Mesh.layers_float -> layers_float: collection, "(read-only)"
+#ID|Mesh.layers_int -> layers_int: collection, "(read-only)"
+#ID|Mesh.layers_string -> layers_string: collection, "(read-only)"
+#+ * ID|Mesh.materials -> materials: collection, "(read-only)"
+#+ * ID|Mesh.shape_keys -> shape_keys: pointer, "(read-only)"
+#ID|Mesh.show_all_edges -> show_all_edges: boolean "Displays all edges for wireframe in all view modes in the 3D view"
+#ID|Mesh.show_double_sided -> show_double_sided: boolean "Render/display the mesh with double or single sided lighting"
+#ID|Mesh.show_edge_bevel_weight -> show_edge_bevel_weight: boolean "Displays weights created for the Bevel modifier"
+#ID|Mesh.show_edge_crease -> show_edge_crease: boolean "Displays creases created for subsurf weighting"
+#ID|Mesh.show_edge_seams -> show_edge_seams: boolean "Displays UV unwrapping seams"
+#ID|Mesh.show_edge_sharp -> show_edge_sharp: boolean "Displays sharp edges, used with the EdgeSplit modifier"
+#ID|Mesh.show_edges -> show_edges: boolean "Displays selected edges using highlights in the 3D view and UV editor"
+#ID|Mesh.show_extra_edge_angle -> show_extra_edge_angle: boolean "Displays the angles in the selected edges in degrees, Using global values when set in the transform panel"
+#ID|Mesh.show_extra_edge_length -> show_extra_edge_length: boolean "Displays selected edge lengths, Using global values when set in the transform panel"
+#ID|Mesh.show_extra_face_area -> show_extra_face_area: boolean "Displays the area of selected faces, Using global values when set in the transform panel"
+#ID|Mesh.show_faces -> show_faces: boolean "Displays all faces as shades in the 3D view and UV editor"
+#ID|Mesh.show_normal_face -> show_normal_face: boolean "Displays face normals as lines"
+#ID|Mesh.show_normal_vertex -> show_normal_vertex: boolean "Displays vertex normals as lines"
+#+ * ID|Mesh.sticky -> sticky: collection, "(read-only) Sticky texture coordinates"
+#+ * ID|Mesh.texco_mesh -> texco_mesh: pointer "Derive texture coordinates from another mesh"
+#ID|Mesh.texspace_location -> texspace_location: float[3] "Texture space location"
+#+ * ID|Mesh.texspace_size -> texspace_size: float[3] "Texture space size"
+#+ * ID|Mesh.texture_mesh -> texture_mesh: pointer "Use another mesh for texture indices (vertex indices must be aligned)"
+#+ * ID|Mesh.total_edge_sel -> total_edge_sel: int, "(read-only) Selected edge count in editmode"
+#+ * ID|Mesh.total_face_sel -> total_face_sel: int, "(read-only) Selected face count in editmode"
+#+ * ID|Mesh.total_vert_sel -> total_vert_sel: int, "(read-only) Selected vertex count in editmode"
+#ID|Mesh.use_auto_smooth -> use_auto_smooth: boolean "Treats all set-smoothed faces with angles less than the specified angle as smooth during render"
+#ID|Mesh.use_auto_texspace -> use_auto_texspace: boolean "Adjusts active objects texture space automatically when transforming object"
+#+ * ID|Mesh.use_mirror_topology -> use_mirror_topology: boolean "Use topology based mirroring"
+#+ * ID|Mesh.use_mirror_x -> use_mirror_x: boolean "X Axis mirror editing"
+#+ * ID|Mesh.use_paint_mask -> use_paint_mask: boolean "Face selection masking for painting"
+#+ * ID|Mesh.uv_texture_clone -> uv_texture_clone: pointer "UV texture to be used as cloning source"
+#+ * ID|Mesh.uv_texture_clone_index -> uv_texture_clone_index: int "Clone UV texture index"
+#+ * ID|Mesh.uv_texture_stencil -> uv_texture_stencil: pointer "UV texture to mask the painted area"
+#+ * ID|Mesh.uv_texture_stencil_index -> uv_texture_stencil_index: int "Mask UV texture index"
+#+ * ID|Mesh.uv_textures -> uv_textures: collection, "(read-only)"
+#+ * ID|Mesh.vertex_colors -> vertex_colors: collection, "(read-only)"
+#ID|Mesh.vertices -> vertices: collection, "(read-only) Vertices of the mesh"
+#TODO MOVE TO ELEMENTS * ID|MetaBall.active_element -> active_element: pointer, "(read-only) Last selected element"
+#+ * ID|MetaBall.animation_data -> animation_data: pointer, "(read-only) Animation data for this datablock"
+#+ * ID|MetaBall.elements -> elements: collection, "(read-only) Meta elements"
+#+ * ID|MetaBall.materials -> materials: collection, "(read-only)"
+#ID|MetaBall.render_resolution -> render_resolution: float "Polygonization resolution in rendering"
+#ID|MetaBall.resolution -> resolution: float "Polygonization resolution in the 3D viewport"
+#ID|MetaBall.texspace_location -> texspace_location: float[3] "Texture space location"
+#+ * ID|MetaBall.texspace_size -> texspace_size: float[3] "Texture space size"
+#+ * ID|MetaBall.threshold -> threshold: float "Influence of meta elements"
+#ID|MetaBall.update_method -> update_method: enum "Metaball edit update behavior"
+#ID|MetaBall.use_auto_texspace -> use_auto_texspace: boolean "Adjusts active objects texture space automatically when transforming object"
+#+ * ID|NodeTree.animation_data -> animation_data: pointer, "(read-only) Animation data for this datablock"
+#+ * ID|NodeTree.grease_pencil -> grease_pencil: pointer "Grease Pencil datablock"
+#+ * ID|NodeTree.nodes -> nodes: collection, "(read-only)"
+#+ * ID|Object.active_material -> active_material: pointer "Active material being displayed"
+#+ * ID|Object.active_material_index -> active_material_index: int "Index of active material slot"
+#+ * ID|Object.active_particle_system -> active_particle_system: pointer, "(read-only) Active particle system being displayed"
+#+ * ID|Object.active_particle_system_index -> active_particle_system_index: int "Index of active particle system slot"
+#+ * ID|Object.active_shape_key -> active_shape_key: pointer, "(read-only) Current shape key"
+#+ * ID|Object.active_shape_key_index -> active_shape_key_index: int "Current shape key index"
+#+ * ID|Object.active_vertex_group -> active_vertex_group: pointer, "(read-only) Vertex groups of the object"
+#+ * ID|Object.active_vertex_group_index -> active_vertex_group_index: int "Active index in vertex group array"
+#+ * ID|Object.animation_data -> animation_data: pointer, "(read-only) Animation data for this datablock"
+#+ * ID|Object.animation_visualisation -> animation_visualisation: pointer, "(read-only) Animation data for this datablock"
+#+ * ID|Object.bound_box -> bound_box: float[24], "(read-only) Objects bound box in object-space coordinates"
+#+ * ID|Object.collision -> collision: pointer, "(read-only) Settings for using the objects as a collider in physics simulation"
+#+ * ID|Object.color -> color: float[4] "Object color and alpha, used when faces have the ObColor mode enabled"
+#+ * ID|Object.constraints -> constraints: collection, "(read-only) Constraints affecting the transformation of the object"
+#+ * ID|Object.data -> data: pointer "Object data"
+#+ * ID|Object.delta_location -> delta_location: float[3] "Extra translation added to the location of the object"
+#+ * ID|Object.delta_rotation_euler -> delta_rotation_euler: float[3] "Extra rotation added to the rotation of the object (when using Euler rotations)"
+#+ * ID|Object.delta_rotation_quaternion -> delta_rotation_quaternion: float[4] "Extra rotation added to the rotation of the object (when using Quaternion rotations)"
+#+ * ID|Object.delta_scale -> delta_scale: float[3] "Extra scaling added to the scale of the object"
+#+ * ID|Object.dimensions -> dimensions: float[3] "Absolute bounding box dimensions of the object"
+#+ * ID|Object.draw_bounds_type -> draw_bounds_type: enum "Object boundary display type"
+#ID|Object.draw_type -> draw_type: enum "Maximum draw type to display object with in viewport"
+#+ * ID|Object.dupli_faces_scale -> dupli_faces_scale: float "Scale the DupliFace objects"
+#+ * ID|Object.dupli_frames_end -> dupli_frames_end: int "End frame for DupliFrames"
+#+ * ID|Object.dupli_frames_off -> dupli_frames_off: int "Recurring frames to exclude from the Dupliframes"
+#+ * ID|Object.dupli_frames_on -> dupli_frames_on: int "Number of frames to use between DupOff frames"
+#+ * ID|Object.dupli_frames_start -> dupli_frames_start: int "Start frame for DupliFrames"
+#+ * ID|Object.dupli_group -> dupli_group: pointer "Instance an existing group"
+#+ * ID|Object.dupli_list -> dupli_list: collection, "(read-only) Object duplis"
+#+ * ID|Object.dupli_type -> dupli_type: enum "If not None, object duplication method to use"
+#+ * ID|Object.empty_draw_size -> empty_draw_size: float "Size of display for empties in the viewport"
+#+ * ID|Object.empty_draw_type -> empty_draw_type: enum "Viewport display style for empties"
+#+ * ID|Object.field -> field: pointer, "(read-only) Settings for using the objects as a field in physics simulation"
+#+ * ID|Object.game -> game: pointer, "(read-only) Game engine related settings for the object"
+#+ * ID|Object.grease_pencil -> grease_pencil: pointer "Grease Pencil datablock"
+#+ * ID|Object.hide -> hide: boolean "Restrict visibility in the viewport"
+#+ * ID|Object.hide_render -> hide_render: boolean "Restrict renderability"
+#+ * ID|Object.hide_select -> hide_select: boolean "Restrict selection in the viewport"
+#ID|Object.is_duplicator -> is_duplicator: boolean, "(read-only)"
+#+ * ID|Object.layers -> layers: boolean[20] "Layers the object is on"
+#+ * ID|Object.location -> location: float[3] "Location of the object"
+#+ * ID|Object.lock_location -> lock_location: boolean[3] "Lock editing of location in the interface"
+#+ * ID|Object.lock_rotation -> lock_rotation: boolean[3] "Lock editing of rotation in the interface"
+#+ * ID|Object.lock_rotation_w -> lock_rotation_w: boolean "Lock editing of angle component of four-component rotations in the interface"
+#+ * ID|Object.lock_rotations_4d -> lock_rotations_4d: boolean "Lock editing of four component rotations by components (instead of as Eulers)"
+#+ * ID|Object.lock_scale -> lock_scale: boolean[3] "Lock editing of scale in the interface"
+#+ * ID|Object.material_slots -> material_slots: collection, "(read-only) Material slots in the object"
+#+ * ID|Object.matrix_local -> matrix_local: float[16] "Parent relative transformation matrix"
+#+ * ID|Object.matrix_world -> matrix_world: float[16] "Worldspace transformation matrix"
+#+ * ID|Object.mode -> mode: enum, "(read-only) Object interaction mode"
+#+ * ID|Object.modifiers -> modifiers: collection, "(read-only) Modifiers affecting the geometric data of the object"
+#+ * ID|Object.motion_path -> motion_path: pointer, "(read-only) Motion Path for this element"
+#+ * ID|Object.parent -> parent: pointer "Parent Object"
+#+ * ID|Object.parent_bone -> parent_bone: string "Name of parent bone in case of a bone parenting relation"
+#+ * ID|Object.parent_type -> parent_type: enum "Type of parent relation"
+#+ * ID|Object.parent_vertices -> parent_vertices: int[3], "(read-only) Indices of vertices in cases of a vertex parenting relation"
+#+ * ID|Object.particle_systems -> particle_systems: collection, "(read-only) Particle systems emitted from the object"
+#+ * ID|Object.pass_index -> pass_index: int "Index # for the IndexOB render pass"
+#+ * ID|Object.pose -> pose: pointer, "(read-only) Current pose for armatures"
+#+ * ID|Object.pose_library -> pose_library: pointer, "(read-only) Action used as a pose library for armatures"
+#+ * ID|Object.proxy -> proxy: pointer, "(read-only) Library object this proxy object controls"
+#+ * ID|Object.proxy_group -> proxy_group: pointer, "(read-only) Library group duplicator object this proxy object controls"
+#+ * ID|Object.rotation_axis_angle -> rotation_axis_angle: float[4] "Angle of Rotation for Axis-Angle rotation representation"
+#+ * ID|Object.rotation_euler -> rotation_euler: float[3] "Rotation in Eulers"
+#+ * ID|Object.rotation_mode -> rotation_mode: enum "NO DESCRIPTION"
+#+ * ID|Object.rotation_quaternion -> rotation_quaternion: float[4] "Rotation in Quaternions"
+#+ * ID|Object.scale -> scale: float[3] "Scaling of the object"
+#+ * ID|Object.select -> select: boolean "Object selection state"
+#ID|Object.show_axis -> show_axis: boolean "Displays the objects origin and axis"
+#ID|Object.show_bounds -> show_bounds: boolean "Displays the objects bounds"
+#ID|Object.show_name -> show_name: boolean "Displays the objects name"
+#ID|Object.show_shape_key -> show_shape_key: boolean "Always show the current Shape for this Object"
+#ID|Object.show_texture_space -> show_texture_space: boolean "Displays the objects texture space"
+#ID|Object.show_transparent -> show_transparent: boolean "Enables transparent materials for the object (Mesh only)"
+#ID|Object.show_wire -> show_wire: boolean "Adds the objects wireframe over solid drawing"
+#ID|Object.show_x_ray -> show_x_ray: boolean "Makes the object draw in front of others"
+#+ * ID|Object.soft_body -> soft_body: pointer, "(read-only) Settings for soft body simulation"
+#+ * ID|Object.time_offset -> time_offset: float "Animation offset in frames for F-Curve and dupligroup instances"
+#+ * ID|Object.track_axis -> track_axis: enum "Axis that points in forward direction"
+#+ * ID|Object.type -> type: enum, "(read-only) Type of Object"
+#+ * ID|Object.up_axis -> up_axis: enum "Axis that points in the upward direction"
+#+ * ID|Object.use_dupli_faces_scale -> use_dupli_faces_scale: boolean "Scale dupli based on face size"
+#+ * ID|Object.use_dupli_frames_speed -> use_dupli_frames_speed: boolean "Set dupliframes to use the frame"
+#ID|Object.use_dupli_vertices_rotation -> use_dupli_vertices_rotation: boolean "Rotate dupli according to vertex normal"
+#ID|Object.use_shape_key_edit_mode -> use_shape_key_edit_mode: boolean "Apply shape keys in edit mode (for Meshes only)"
+#ID|Object.use_slow_parent -> use_slow_parent: boolean "Create a delay in the parent relationship"
+#ID|Object.use_time_offset_add_parent -> use_time_offset_add_parent: boolean "Add the parents time offset value"
+#ID|Object.use_time_offset_edit -> use_time_offset_edit: boolean "Use time offset when inserting keys and display time offset for F-Curve and action views"
+#ID|Object.use_time_offset_parent -> use_time_offset_parent: boolean "Apply the time offset to this objects parent relationship"
+#ID|Object.use_time_offset_particle -> use_time_offset_particle: boolean "Let the time offset work on the particle effect"
+#+ * ID|Object.vertex_groups -> vertex_groups: collection, "(read-only) Vertex groups of the object"
+#+ * ID|ParticleSettings.active_dupliweight -> active_dupliweight: pointer, "(read-only)"
+#+ * ID|ParticleSettings.active_dupliweight_index -> active_dupliweight_index: int "NO DESCRIPTION"
+#+ * ID|ParticleSettings.adaptive_angle -> adaptive_angle: int "How many degrees path has to curve to make another render segment"
+#ID|ParticleSettings.adaptive_pixel -> adaptive_pixel: int "How many pixels path has to cover to make another render segment"
+#+ * ID|ParticleSettings.angular_velocity_factor -> angular_velocity_factor: float "Angular velocity amount"
+#+ * ID|ParticleSettings.angular_velocity_mode -> angular_velocity_mode: enum "Particle angular velocity mode"
+#+ * ID|ParticleSettings.animation_data -> animation_data: pointer, "(read-only) Animation data for this datablock"
+#ID|ParticleSettings.apply_effector_to_children -> apply_effector_to_children: boolean "Apply effectors to children"
+#ID|ParticleSettings.apply_guide_to_children -> apply_guide_to_children: boolean "NO DESCRIPTION"
+#+ * ID|ParticleSettings.billboard_align -> billboard_align: enum "In respect to what the billboards are aligned"
+#+ * ID|ParticleSettings.billboard_animation -> billboard_animation: enum "How to animate billboard textures"
+#+ * ID|ParticleSettings.billboard_object -> billboard_object: pointer "Billboards face this object (default is active camera)"
+#+ * ID|ParticleSettings.billboard_offset -> billboard_offset: float[2] "NO DESCRIPTION"
+#ID|ParticleSettings.billboard_offset_split -> billboard_offset_split: enum "How to offset billboard textures"
+#+ * ID|ParticleSettings.billboard_tilt -> billboard_tilt: float "Tilt of the billboards"
+#ID|ParticleSettings.billboard_tilt_random -> billboard_tilt_random: float "Random tilt of the billboards"
+#+ * ID|ParticleSettings.billboard_uv_split -> billboard_uv_split: int "Amount of rows/columns to split UV coordinates for billboards"
+#+ * ID|ParticleSettings.boids -> boids: pointer, "(read-only)"
+#+ * ID|ParticleSettings.branch_threshold -> branch_threshold: float "Threshold of branching"
+#+ * ID|ParticleSettings.brownian_factor -> brownian_factor: float "Specify the amount of Brownian motion"
+#+ * ID|ParticleSettings.child_length -> child_length: float "Length of child paths"
+#ID|ParticleSettings.child_length_threshold -> child_length_threshold: float "Amount of particles left untouched by child path length"
+#+ * ID|ParticleSettings.child_nbr -> child_nbr: int "Amount of children/parent"
+#+ * ID|ParticleSettings.child_radius -> child_radius: float "Radius of children around parent"
+#+ * ID|ParticleSettings.child_roundness -> child_roundness: float "Roundness of children around parent"
+#+ * ID|ParticleSettings.child_size -> child_size: float "A multiplier for the child particle size"
+#ID|ParticleSettings.child_size_random -> child_size_random: float "Random variation to the size of the child particles"
+#+ * ID|ParticleSettings.child_type -> child_type: enum "Create child particles"
+#+ * ID|ParticleSettings.clump_factor -> clump_factor: float "Amount of clumping"
+#ID|ParticleSettings.clump_shape -> clump_shape: float "Shape of clumping"
+#ID|ParticleSettings.count -> count: int "Total number of particles"
+#ID|ParticleSettings.damping -> damping: float "Specify the amount of damping"
+#+ * ID|ParticleSettings.distribution -> distribution: enum "How to distribute particles on selected element"
+#+ * ID|ParticleSettings.drag_factor -> drag_factor: float "Specify the amount of air-drag"
+#ID|ParticleSettings.draw_method -> draw_method: enum "How particles are drawn in viewport"
+#ID|ParticleSettings.draw_percentage -> draw_percentage: int "Percentage of particles to display in 3D view"
+#+ * ID|ParticleSettings.draw_size -> draw_size: int "Size of particles on viewport in pixels (0=default)"
+#+ * ID|ParticleSettings.draw_step -> draw_step: int "How many steps paths are drawn with (power of 2)"
+#+ * ID|ParticleSettings.dupli_group -> dupli_group: pointer "Show Objects in this Group in place of particles"
+#+ * ID|ParticleSettings.dupli_object -> dupli_object: pointer "Show this Object in place of particles"
+#ID|ParticleSettings.dupli_weights -> dupli_weights: collection, "(read-only) Weights for all of the objects in the dupli group"
+#+ * ID|ParticleSettings.effect_hair -> effect_hair: float "Hair stiffness for effectors"
+#+ * ID|ParticleSettings.effector_weights -> effector_weights: pointer, "(read-only)"
+#+ * ID|ParticleSettings.emit_from -> emit_from: enum "Where to emit particles from"
+#ID|ParticleSettings.factor_random -> factor_random: float "Give the starting speed a random variation"
+#+ * ID|ParticleSettings.fluid -> fluid: pointer, "(read-only)"
+#+ * ID|ParticleSettings.force_field_1 -> force_field_1: pointer, "(read-only)"
+#+ * ID|ParticleSettings.force_field_2 -> force_field_2: pointer, "(read-only)"
+#+ * ID|ParticleSettings.frame_end -> frame_end: float "Frame # to stop emitting particles"
+#+ * ID|ParticleSettings.frame_start -> frame_start: float "Frame # to start emitting particles"
+#+ * ID|ParticleSettings.grid_resolution -> grid_resolution: int "The resolution of the particle grid"
+#+ * ID|ParticleSettings.hair_step -> hair_step: int "Number of hair segments"
+#+ * ID|ParticleSettings.integrator -> integrator: enum "Select physics integrator type"
+#ID|ParticleSettings.invert_grid -> invert_grid: boolean "Invert what is considered object and what is not"
+#+ * ID|ParticleSettings.jitter_factor -> jitter_factor: float "Amount of jitter applied to the sampling"
+#+ * ID|ParticleSettings.keyed_loops -> keyed_loops: int "Number of times the keys are looped"
+#+ * ID|ParticleSettings.keys_step -> keys_step: int "NO DESCRIPTION"
+#+ * ID|ParticleSettings.kink -> kink: enum "Type of periodic offset on the path"
+#+ * ID|ParticleSettings.kink_amplitude -> kink_amplitude: float "The amplitude of the offset"
+#+ * ID|ParticleSettings.kink_axis -> kink_axis: enum "Which axis to use for offset"
+#+ * ID|ParticleSettings.kink_frequency -> kink_frequency: float "The frequency of the offset (1/total length)"
+#+ * ID|ParticleSettings.kink_shape -> kink_shape: float "Adjust the offset to the beginning/end"
+#ID|ParticleSettings.length_random -> length_random: float "Give path length a random variation"
+#+ * ID|ParticleSettings.lifetime -> lifetime: float "Specify the life span of the particles"
+#ID|ParticleSettings.lifetime_random -> lifetime_random: float "Give the particle life a random variation"
+#+ * ID|ParticleSettings.line_length_head -> line_length_head: float "Length of the lines head"
+#+ * ID|ParticleSettings.line_length_tail -> line_length_tail: float "Length of the lines tail"
+#ID|ParticleSettings.lock_billboard -> lock_billboard: boolean "Lock the billboards align axis"
+#ID|ParticleSettings.lock_boids_to_surface -> lock_boids_to_surface: boolean "Constrain boids to a surface"
+#+ * ID|ParticleSettings.mass -> mass: float "Specify the mass of the particles"
+#+ * ID|ParticleSettings.material -> material: int "Specify material used for the particles"
+#+ * ID|ParticleSettings.normal_factor -> normal_factor: float "Let the surface normal give the particle a starting speed"
+#ID|ParticleSettings.object_align_factor -> object_align_factor: float[3] "Let the emitter object orientation give the particle a starting speed"
+#+ * ID|ParticleSettings.object_factor -> object_factor: float "Let the object give the particle a starting speed"
+#+ * ID|ParticleSettings.particle_factor -> particle_factor: float "Let the target particle give the particle a starting speed"
+#+ * ID|ParticleSettings.particle_size -> particle_size: float "The size of the particles"
+#+ * ID|ParticleSettings.path_end -> path_end: float "End time of drawn path"
+#+ * ID|ParticleSettings.path_start -> path_start: float "Starting time of drawn path"
+#+ * ID|ParticleSettings.phase_factor -> phase_factor: float "Initial rotation phase"
+#ID|ParticleSettings.phase_factor_random -> phase_factor_random: float "Randomize rotation phase"
+#+ * ID|ParticleSettings.physics_type -> physics_type: enum "Particle physics type"
+#+ * ID|ParticleSettings.react_event -> react_event: enum "The event of target particles to react on"
+#+ * ID|ParticleSettings.reaction_shape -> reaction_shape: float "Power of reaction strength dependence on distance to target"
+#+ * ID|ParticleSettings.reactor_factor -> reactor_factor: float "Let the vector away from the target particles location give the particle a starting speed"
+#+ * ID|ParticleSettings.render_step -> render_step: int "How many steps paths are rendered with (power of 2)"
+#ID|ParticleSettings.render_type -> render_type: enum "How particles are rendered"
+#ID|ParticleSettings.rendered_child_count -> rendered_child_count: int "Amount of children/parent for rendering"
+#ID|ParticleSettings.rotation_factor_random -> rotation_factor_random: float "Randomize rotation"
+#+ * ID|ParticleSettings.rotation_mode -> rotation_mode: enum "Particles initial rotation"
+#ID|ParticleSettings.roughness_1 -> roughness_1: float "Amount of location dependent rough"
+#ID|ParticleSettings.roughness_1_size -> roughness_1_size: float "Size of location dependent rough"
+#ID|ParticleSettings.roughness_2 -> roughness_2: float "Amount of random rough"
+#ID|ParticleSettings.roughness_2_size -> roughness_2_size: float "Size of random rough"
+#ID|ParticleSettings.roughness_2_threshold -> roughness_2_threshold: float "Amount of particles left untouched by random rough"
+#ID|ParticleSettings.roughness_end_shape -> roughness_end_shape: float "Shape of end point rough"
+#ID|ParticleSettings.roughness_endpoint -> roughness_endpoint: float "Amount of end point rough"
+#ID|ParticleSettings.show_health -> show_health: boolean "Draw boid health"
+#ID|ParticleSettings.show_material_color -> show_material_color: boolean "Draw particles using materials diffuse color"
+#ID|ParticleSettings.show_number -> show_number: boolean "Show particle number"
+#+ * ID|ParticleSettings.show_size -> show_size: boolean "Show particle size"
+#ID|ParticleSettings.show_unborn -> show_unborn: boolean "Show particles before they are emitted"
+#ID|ParticleSettings.show_velocity -> show_velocity: boolean "Show particle velocity"
+#+ * ID|ParticleSettings.simplify_rate -> simplify_rate: float "Speed of simplification"
+#+ * ID|ParticleSettings.simplify_refsize -> simplify_refsize: int "Reference size in pixels, after which simplification begins"
+#+ * ID|ParticleSettings.simplify_transition -> simplify_transition: float "Transition period for fading out strands"
+#+ * ID|ParticleSettings.simplify_viewport -> simplify_viewport: float "Speed of Simplification"
+#ID|ParticleSettings.size_random -> size_random: float "Give the particle size a random variation"
+#+ * ID|ParticleSettings.subframes -> subframes: int "Subframes to simulate for improved stability and finer granularity simulations"
+#+ * ID|ParticleSettings.tangent_factor -> tangent_factor: float "Let the surface tangent give the particle a starting speed"
+#+ * ID|ParticleSettings.tangent_phase -> tangent_phase: float "Rotate the surface tangent"
+#+ * ID|ParticleSettings.time_tweak -> time_tweak: float "A multiplier for physics timestep (1.0 means one frame = 1/25 seconds)"
+#+ * ID|ParticleSettings.trail_count -> trail_count: int "Number of trail particles"
+#+ * ID|ParticleSettings.type -> type: enum "NO DESCRIPTION"
+#ID|ParticleSettings.use_absolute_path_time -> use_absolute_path_time: boolean "Path timing is in absolute frames"
+#ID|ParticleSettings.use_animate_branching -> use_animate_branching: boolean "Animate branching"
+#ID|ParticleSettings.use_branching -> use_branching: boolean "Branch child paths from each other"
+#ID|ParticleSettings.use_dead -> use_dead: boolean "Show particles after they have died"
+#ID|ParticleSettings.use_die_on_collision -> use_die_on_collision: boolean "Particles die when they collide with a deflector object"
+#ID|ParticleSettings.use_dynamic_rotation -> use_dynamic_rotation: boolean "Sets rotation to dynamic/constant"
+#ID|ParticleSettings.use_emit_random -> use_emit_random: boolean "Emit in random order of elements"
+#ID|ParticleSettings.use_even_distribution -> use_even_distribution: boolean "Use even distribution from faces based on face areas or edge lengths"
+#+ * ID|ParticleSettings.use_global_dupli -> use_global_dupli: boolean "Use objects global coordinates for duplication"
+#+ * ID|ParticleSettings.use_group_count -> use_group_count: boolean "Use object multiple times in the same group"
+#ID|ParticleSettings.use_group_pick_random -> use_group_pick_random: boolean "Pick objects from group randomly"
+#ID|ParticleSettings.use_hair_bspline -> use_hair_bspline: boolean "Interpolate hair using B-Splines"
+#ID|ParticleSettings.use_multiply_size_mass -> use_multiply_size_mass: boolean "Multiply mass by particle size"
+#ID|ParticleSettings.use_parent_particles -> use_parent_particles: boolean "Render parent particles"
+#ID|ParticleSettings.use_react_multiple -> use_react_multiple: boolean "React multiple times"
+#ID|ParticleSettings.use_react_start_end -> use_react_start_end: boolean "Give birth to unreacted particles eventually"
+#ID|ParticleSettings.use_render_adaptive -> use_render_adaptive: boolean "Draw steps of the particle path"
+#ID|ParticleSettings.use_render_emitter -> use_render_emitter: boolean "Render emitter Object also"
+#ID|ParticleSettings.use_self_effect -> use_self_effect: boolean "Particle effectors effect themselves"
+#ID|ParticleSettings.use_simplify -> use_simplify: boolean "Remove child strands as the object becomes smaller on the screen"
+#ID|ParticleSettings.use_simplify_viewport -> use_simplify_viewport: boolean "NO DESCRIPTION"
+#ID|ParticleSettings.use_size_deflect -> use_size_deflect: boolean "Use particles size in deflection"
+#ID|ParticleSettings.use_strand_primitive -> use_strand_primitive: boolean "Use the strand primitive for rendering"
+#ID|ParticleSettings.use_symmetric_branching -> use_symmetric_branching: boolean "Start and end points are the same"
+#ID|ParticleSettings.use_velocity_length -> use_velocity_length: boolean "Multiply line length by particle speed"
+#ID|ParticleSettings.use_whole_group -> use_whole_group: boolean "Use whole group at once"
+#+ * ID|ParticleSettings.userjit -> userjit: int "Emission locations / face (0 = automatic)"
+#+ * ID|ParticleSettings.virtual_parents -> virtual_parents: float "Relative amount of virtual parents"
+#+ * ID|Scene.active_keying_set -> active_keying_set: pointer "Active Keying Set used to insert/delete keyframes"
+#+ * ID|Scene.active_keying_set_index -> active_keying_set_index: int "Current Keying Set index (negative for builtin and positive for absolute)"
+#+ * ID|Scene.animation_data -> animation_data: pointer, "(read-only) Animation data for this datablock"
+#ID|Scene.audio_distance_model -> audio_distance_model: enum "Distance model for distance attenuation calculation"
+#ID|Scene.audio_doppler_factor -> audio_doppler_factor: float "Pitch factor for Doppler effect calculation"
+#ID|Scene.audio_doppler_speed -> audio_doppler_speed: float "Speed of sound for Doppler effect calculation"
+#ID|Scene.background_set -> background_set: pointer "Background set scene"
+#+ * ID|Scene.camera -> camera: pointer "Active camera used for rendering the scene"
+#+ * ID|Scene.cursor_location -> cursor_location: float[3] "3D cursor location"
+#+ * ID|Scene.frame_current -> frame_current: int "NO DESCRIPTION"
+#+ * ID|Scene.frame_end -> frame_end: int "Final frame of the playback/rendering range"
+#ID|Scene.frame_preview_end -> frame_preview_end: int "Alternative end frame for UI playback"
+#ID|Scene.frame_preview_start -> frame_preview_start: int "Alternative start frame for UI playback"
+#+ * ID|Scene.frame_start -> frame_start: int "First frame of the playback/rendering range"
+#+ * ID|Scene.frame_step -> frame_step: int "Number of frames to skip forward while rendering/playing back each frame"
+#ID|Scene.game_settings -> game_settings: pointer, "(read-only)"
+#+ * ID|Scene.gravity -> gravity: float[3] "Constant acceleration in a given direction"
+#+ * ID|Scene.grease_pencil -> grease_pencil: pointer "Grease Pencil datablock"
+#ID|Scene.is_nla_tweakmode -> is_nla_tweakmode: boolean, "(read-only) Indicates whether there is any action referenced by NLA being edited. Strictly read-only"
+#+ * ID|Scene.keying_sets -> keying_sets: collection, "(read-only) Absolute Keying Sets for this Scene"
+#ID|Scene.keying_sets_all -> keying_sets_all: collection, "(read-only) All Keying Sets available for use (builtins and Absolute Keying Sets for this Scene)"
+#+ * ID|Scene.layers -> layers: boolean[20] "Layers visible when rendering the scene"
+#+ * ID|Scene.network_render -> network_render: pointer, "(read-only) Network Render Settings"
+#+ * ID|Scene.nodetree -> nodetree: pointer, "(read-only) Compositing node tree"
+#ID|Scene.object_bases -> object_bases: collection, "(read-only)"
+#+ * ID|Scene.objects -> objects: collection, "(read-only)"
+#+ * ID|Scene.orientations -> orientations: collection, "(read-only)"
+#+ * ID|Scene.pose_templates -> pose_templates: pointer, "(read-only) Pose Template Settings"
+#+ * ID|Scene.render -> render: pointer, "(read-only)"
+#+ * ID|Scene.sequence_editor -> sequence_editor: pointer, "(read-only)"
+#+ * ID|Scene.sync_mode -> sync_mode: enum "How to sync playback"
+#+ * ID|Scene.timeline_markers -> timeline_markers: collection, "(read-only) Markers used in all timelines for the current scene"
+#+ * ID|Scene.tool_settings -> tool_settings: pointer, "(read-only)"
+#+ * ID|Scene.unit_settings -> unit_settings: pointer, "(read-only) Unit editing settings"
+#ID|Scene.use_audio -> use_audio: boolean "Play back of audio from Sequence Editor will be muted"
+#ID|Scene.use_audio_scrub -> use_audio_scrub: boolean "Play audio from Sequence Editor while scrubbing"
+#ID|Scene.use_audio_sync -> use_audio_sync: boolean "Play back and sync with audio clock, dropping frames if frame display is too slow"
+#ID|Scene.use_frame_drop -> use_frame_drop: boolean "Play back dropping frames if frame display is too slow"
+#+ * ID|Scene.use_gravity -> use_gravity: boolean "Use global gravity for all dynamics"
+#+ * ID|Scene.use_nodes -> use_nodes: boolean "Enable the compositing node tree"
+#+ * ID|Scene.use_preview_range -> use_preview_range: boolean "Use an alternative start/end frame for UI playback, rather than the scene start/end frame"
+#ID|Scene.use_stamp_note -> use_stamp_note: string "User define note for the render stamping"
+#+ * ID|Scene.world -> world: pointer "World used for rendering the scene"
+#+ * ID|Screen.areas -> areas: collection, "(read-only) Areas the screen is subdivided into"
+#ID|Screen.is_animation_playing -> is_animation_playing: boolean, "(read-only) Animation playback is active"
+#+ * ID|Screen.scene -> scene: pointer "Active scene to be edited in the screen"
+#ID|Screen.show_fullscreen -> show_fullscreen: boolean, "(read-only) An area is maximised, filling this screen"
+#+ * ID|Sound.filepath -> filepath: string "Sound sample file used by this Sound datablock"
+#+ * ID|Sound.packed_file -> packed_file: pointer, "(read-only)"
+#ID|Sound.use_memory_cache -> use_memory_cache: boolean "The sound file is decoded and loaded into RAM"
+#+ * ID|Text.current_character -> current_character: int, "(read-only) Index of current character in current line, and also start index of character in selection if one exists"
+#+ * ID|Text.current_line -> current_line: pointer, "(read-only) Current line, and start line of selection if one exists"
+#+ * ID|Text.filepath -> filepath: string "Filename of the text file"
+#ID|Text.is_dirty -> is_dirty: boolean, "(read-only) Text file has been edited since last save"
+#ID|Text.is_in_memory -> is_in_memory: boolean, "(read-only) Text file is in memory, without a corresponding file on disk"
+#ID|Text.is_modified -> is_modified: boolean, "(read-only) Text file on disk is different than the one in memory"
+#+ * ID|Text.lines -> lines: collection, "(read-only) Lines of text"
+#+ * ID|Text.markers -> markers: collection, "(read-only) Text markers highlighting part of the text"
+#ID|Text.select_end_character -> select_end_character: int, "(read-only) Index of character after end of selection in the selection end line"
+#ID|Text.select_end_line -> select_end_line: pointer, "(read-only) End line of selection"
+#+ * ID|Text.use_module -> use_module: boolean "Register this text as a module on loading, Text name must end with .py"
+#ID|Text.use_tabs_as_spaces -> use_tabs_as_spaces: boolean "Automatically converts all new tabs into spaces"
+#+ * ID|Texture.animation_data -> animation_data: pointer, "(read-only) Animation data for this datablock"
+#+ * ID|Texture.color_ramp -> color_ramp: pointer, "(read-only)"
+#+ * ID|Texture.contrast -> contrast: float "NO DESCRIPTION"
+#+TODO MAKE COLOR * ID|Texture.factor_blue -> factor_blue: float "NO DESCRIPTION"
+#+TODO MAKE COLOR * ID|Texture.factor_green -> factor_green: float "NO DESCRIPTION"
+#+TODO MAKE COLOR * ID|Texture.factor_red -> factor_red: float "NO DESCRIPTION"
+#ID|Texture.intensity -> intensity: float "NO DESCRIPTION"
+#+ * ID|Texture.node_tree -> node_tree: pointer, "(read-only) Node tree for node-based textures"
+#+ * ID|Texture.saturation -> saturation: float "NO DESCRIPTION"
+#+ * ID|Texture.type -> type: enum "NO DESCRIPTION"
+#+ * ID|Texture.use_color_ramp -> use_color_ramp: boolean "Toggle color ramp operations"
+#+ * ID|Texture.use_nodes -> use_nodes: boolean "Make this a node-based texture"
+#+ * ID|Texture.use_preview_alpha -> use_preview_alpha: boolean "Show Alpha in Preview Render"
+#+ * ID|Texture|BlendTexture.progression -> progression: enum "Sets the style of the color blending"
+#ID|Texture|BlendTexture.use_flip_axis -> use_flip_axis: enum "Flips the textures X and Y axis"
+#ID|Texture|CloudsTexture.cloud_type -> cloud_type: enum "NO DESCRIPTION"
+#+ * ID|Texture|CloudsTexture.nabla -> nabla: float "Size of derivative offset used for calculating normal"
+#+ * ID|Texture|CloudsTexture.noise_basis -> noise_basis: enum "Sets the noise basis used for turbulence"
+#+ * ID|Texture|CloudsTexture.noise_depth -> noise_depth: int "Sets the depth of the cloud calculation"
+#ID|Texture|CloudsTexture.noise_scale -> noise_scale: float "Sets scaling for noise input"
+#+ * ID|Texture|CloudsTexture.noise_type -> noise_type: enum "NO DESCRIPTION"
+#+ * ID|Texture|DistortedNoiseTexture.distortion -> distortion: float "NO DESCRIPTION"
+#+ * ID|Texture|DistortedNoiseTexture.nabla -> nabla: float "Size of derivative offset used for calculating normal"
+#+ * ID|Texture|DistortedNoiseTexture.noise_basis -> noise_basis: enum "Sets the noise basis used for turbulence"
+#+ * ID|Texture|DistortedNoiseTexture.noise_distortion -> noise_distortion: enum "Sets the noise basis for the distortion"
+#ID|Texture|DistortedNoiseTexture.noise_scale -> noise_scale: float "Sets scaling for noise input"
+#+ * ID|Texture|EnvironmentMapTexture.environment_map -> environment_map: pointer, "(read-only) Gets the environment map associated with this texture"
+#+ * ID|Texture|EnvironmentMapTexture.filter_eccentricity -> filter_eccentricity: int "Maximum eccentricity. Higher gives less blur at distant/oblique angles, but is also slower"
+#+ * ID|Texture|EnvironmentMapTexture.filter_probes -> filter_probes: int "Maximum number of samples. Higher gives less blur at distant/oblique angles, but is also slower"
+#+ * ID|Texture|EnvironmentMapTexture.filter_size -> filter_size: float "Multiplies the filter size used by MIP Map and Interpolation"
+#ID|Texture|EnvironmentMapTexture.filter_type -> filter_type: enum "Texture filter to use for sampling image"
+#+ * ID|Texture|EnvironmentMapTexture.image -> image: pointer "Source image file to read the environment map from"
+#+ * ID|Texture|EnvironmentMapTexture.image_user -> image_user: pointer, "(read-only) Parameters defining which layer, pass and frame of the image is displayed"
+#ID|Texture|EnvironmentMapTexture.use_filter_size_min -> use_filter_size_min: boolean "Use Filter Size as a minimal filter value in pixels"
+#ID|Texture|EnvironmentMapTexture.use_mipmap -> use_mipmap: boolean "Uses auto-generated MIP maps for the image"
+#ID|Texture|EnvironmentMapTexture.use_mipmap_gauss -> use_mipmap_gauss: boolean "Uses Gauss filter to sample down MIP maps"
+#+ * ID|Texture|ImageTexture.checker_distance -> checker_distance: float "Sets distance between checker tiles"
+#+ * ID|Texture|ImageTexture.crop_max_x -> crop_max_x: float "Sets maximum X value to crop the image"
+#+ * ID|Texture|ImageTexture.crop_max_y -> crop_max_y: float "Sets maximum Y value to crop the image"
+#+ * ID|Texture|ImageTexture.crop_min_x -> crop_min_x: float "Sets minimum X value to crop the image"
+#+ * ID|Texture|ImageTexture.crop_min_y -> crop_min_y: float "Sets minimum Y value to crop the image"
+#+ * ID|Texture|ImageTexture.extension -> extension: enum "Sets how the image is extrapolated past its original bounds"
+#+ * ID|Texture|ImageTexture.filter_eccentricity -> filter_eccentricity: int "Maximum eccentricity. Higher gives less blur at distant/oblique angles, but is also slower"
+#+ * ID|Texture|ImageTexture.filter_probes -> filter_probes: int "Maximum number of samples. Higher gives less blur at distant/oblique angles, but is also slower"
+#+ * ID|Texture|ImageTexture.filter_size -> filter_size: float "Multiplies the filter size used by MIP Map and Interpolation"
+#ID|Texture|ImageTexture.filter_type -> filter_type: enum "Texture filter to use for sampling image"
+#+ * ID|Texture|ImageTexture.image -> image: pointer "NO DESCRIPTION"
+#+ * ID|Texture|ImageTexture.image_user -> image_user: pointer, "(read-only) Parameters defining which layer, pass and frame of the image is displayed"
+#+ * ID|Texture|ImageTexture.invert_alpha -> invert_alpha: boolean "Inverts all the alpha values in the image"
+#+ * ID|Texture|ImageTexture.normal_space -> normal_space: enum "Sets space of normal map image"
+#+ * ID|Texture|ImageTexture.repeat_x -> repeat_x: int "Sets a repetition multiplier in the X direction"
+#+ * ID|Texture|ImageTexture.repeat_y -> repeat_y: int "Sets a repetition multiplier in the Y direction"
+#+ * ID|Texture|ImageTexture.use_alpha -> use_alpha: boolean "Uses the alpha channel information in the image"
+#ID|Texture|ImageTexture.use_calculate_alpha -> use_calculate_alpha: boolean "Calculates an alpha channel based on RGB values in the image"
+#ID|Texture|ImageTexture.use_checker_even -> use_checker_even: boolean "Sets even checker tiles"
+#ID|Texture|ImageTexture.use_checker_odd -> use_checker_odd: boolean "Sets odd checker tiles"
+#ID|Texture|ImageTexture.use_filter_size_min -> use_filter_size_min: boolean "Use Filter Size as a minimal filter value in pixels"
+#ID|Texture|ImageTexture.use_flip_axis -> use_flip_axis: boolean "Flips the textures X and Y axis"
+#ID|Texture|ImageTexture.use_interpolation -> use_interpolation: boolean "Interpolates pixels using Area filter"
+#ID|Texture|ImageTexture.use_mipmap -> use_mipmap: boolean "Uses auto-generated MIP maps for the image"
+#ID|Texture|ImageTexture.use_mipmap_gauss -> use_mipmap_gauss: boolean "Uses Gauss filter to sample down MIP maps"
+#ID|Texture|ImageTexture.use_mirror_x -> use_mirror_x: boolean "Mirrors the image repetition on the X direction"
+#ID|Texture|ImageTexture.use_mirror_y -> use_mirror_y: boolean "Mirrors the image repetition on the Y direction"
+#ID|Texture|ImageTexture.use_normal_map -> use_normal_map: boolean "Uses image RGB values for normal mapping"
+#+ * ID|Texture|MagicTexture.noise_depth -> noise_depth: int "Sets the depth of the cloud calculation"
+#+ * ID|Texture|MagicTexture.turbulence -> turbulence: float "Sets the turbulence of the bandnoise and ringnoise types"
+#ID|Texture|MarbleTexture.marble_type -> marble_type: enum "NO DESCRIPTION"
+#+ * ID|Texture|MarbleTexture.nabla -> nabla: float "Size of derivative offset used for calculating normal"
+#+ * ID|Texture|MarbleTexture.noise_basis -> noise_basis: enum "Sets the noise basis used for turbulence"
+#+ * ID|Texture|MarbleTexture.noise_depth -> noise_depth: int "Sets the depth of the cloud calculation"
+#ID|Texture|MarbleTexture.noise_scale -> noise_scale: float "Sets scaling for noise input"
+#+ * ID|Texture|MarbleTexture.noise_type -> noise_type: enum "NO DESCRIPTION"
+#ID|Texture|MarbleTexture.noisebasis_2 -> noisebasis_2: enum "NO DESCRIPTION"
+#+ * ID|Texture|MarbleTexture.turbulence -> turbulence: float "Sets the turbulence of the bandnoise and ringnoise types"
+#ID|Texture|MusgraveTexture.dimension_max -> dimension_max: float "Highest fractal dimension"
+#+ * ID|Texture|MusgraveTexture.gain -> gain: float "The gain multiplier"
+#+ * ID|Texture|MusgraveTexture.lacunarity -> lacunarity: float "Gap between successive frequencies"
+#+ * ID|Texture|MusgraveTexture.musgrave_type -> musgrave_type: enum "NO DESCRIPTION"
+#+ * ID|Texture|MusgraveTexture.nabla -> nabla: float "Size of derivative offset used for calculating normal"
+#+ * ID|Texture|MusgraveTexture.noise_basis -> noise_basis: enum "Sets the noise basis used for turbulence"
+#+ * ID|Texture|MusgraveTexture.noise_intensity -> noise_intensity: float "NO DESCRIPTION"
+#ID|Texture|MusgraveTexture.noise_scale -> noise_scale: float "Sets scaling for noise input"
+#+ * ID|Texture|MusgraveTexture.octaves -> octaves: float "Number of frequencies used"
+#+ * ID|Texture|MusgraveTexture.offset -> offset: float "The fractal offset"
+#ID|Texture|PointDensityTexture.point_density -> point_density: pointer, "(read-only) The point density settings associated with this texture"
+#+ * ID|Texture|StucciTexture.noise_basis -> noise_basis: enum "Sets the noise basis used for turbulence"
+#ID|Texture|StucciTexture.noise_scale -> noise_scale: float "Sets scaling for noise input"
+#+ * ID|Texture|StucciTexture.noise_type -> noise_type: enum "NO DESCRIPTION"
+#ID|Texture|StucciTexture.stucci_type -> stucci_type: enum "NO DESCRIPTION"
+#+ * ID|Texture|StucciTexture.turbulence -> turbulence: float "Sets the turbulence of the bandnoise and ringnoise types"
+#ID|Texture|VoronoiTexture.color_mode -> color_mode: enum "NO DESCRIPTION"
+#+ * ID|Texture|VoronoiTexture.distance_metric -> distance_metric: enum "NO DESCRIPTION"
+#+ * ID|Texture|VoronoiTexture.minkovsky_exponent -> minkovsky_exponent: float "Minkovsky exponent"
+#+ * ID|Texture|VoronoiTexture.nabla -> nabla: float "Size of derivative offset used for calculating normal"
+#+ * ID|Texture|VoronoiTexture.noise_intensity -> noise_intensity: float "NO DESCRIPTION"
+#ID|Texture|VoronoiTexture.noise_scale -> noise_scale: float "Sets scaling for noise input"
+#+ * ID|Texture|VoronoiTexture.weight_1 -> weight_1: float "Voronoi feature weight 1"
+#+ * ID|Texture|VoronoiTexture.weight_2 -> weight_2: float "Voronoi feature weight 2"
+#+ * ID|Texture|VoronoiTexture.weight_3 -> weight_3: float "Voronoi feature weight 3"
+#+ * ID|Texture|VoronoiTexture.weight_4 -> weight_4: float "Voronoi feature weight 4"
+#+ * ID|Texture|VoxelDataTexture.image -> image: pointer "NO DESCRIPTION"
+#+ * ID|Texture|VoxelDataTexture.image_user -> image_user: pointer, "(read-only) Parameters defining which layer, pass and frame of the image is displayed"
+#ID|Texture|VoxelDataTexture.voxel_data -> voxel_data: pointer, "(read-only) The voxel data associated with this texture"
+#+ * ID|Texture|WoodTexture.nabla -> nabla: float "Size of derivative offset used for calculating normal"
+#+ * ID|Texture|WoodTexture.noise_basis -> noise_basis: enum "Sets the noise basis used for turbulence"
+#ID|Texture|WoodTexture.noise_scale -> noise_scale: float "Sets scaling for noise input"
+#+ * ID|Texture|WoodTexture.noise_type -> noise_type: enum "NO DESCRIPTION"
+#ID|Texture|WoodTexture.noisebasis_2 -> noisebasis_2: enum "NO DESCRIPTION"
+#+ * ID|Texture|WoodTexture.turbulence -> turbulence: float "Sets the turbulence of the bandnoise and ringnoise types"
+#ID|Texture|WoodTexture.wood_type -> wood_type: enum "NO DESCRIPTION"
+#+ * ID|VectorFont.filepath -> filepath: string, "(read-only)"
+#+ * ID|VectorFont.packed_file -> packed_file: pointer, "(read-only)"
+#TODO, move into collectin * ID|WindowManager.active_keyconfig -> active_keyconfig: pointer "NO DESCRIPTION"
+#+ * ID|WindowManager.default_keyconfig -> default_keyconfig: pointer, "(read-only)"
+#+ * ID|WindowManager.keyconfigs -> keyconfigs: collection, "(read-only) Registered key configurations"
+#+ * ID|WindowManager.operators -> operators: collection, "(read-only) Operator registry"
+#+ * ID|WindowManager.windows -> windows: collection, "(read-only) Open windows"
+#+ * ID|World.active_texture -> active_texture: pointer "Active texture slot being displayed"
+#+ * ID|World.active_texture_index -> active_texture_index: int "Index of active texture slot"
+#+ * ID|World.ambient_color -> ambient_color: float[3] "NO DESCRIPTION"
+#+ * ID|World.animation_data -> animation_data: pointer, "(read-only) Animation data for this datablock"
+#ID|World.color_range -> color_range: float "The color range that will be mapped to 0-1"
+#+ * ID|World.exposure -> exposure: float "Amount of exponential color correction for light"
+#+ * ID|World.horizon_color -> horizon_color: float[3] "Color at the horizon"
+#ID|World.light_settings -> light_settings: pointer, "(read-only) World lighting settings"
+#ID|World.mist_settings -> mist_settings: pointer, "(read-only) World mist settings"
+#ID|World.star_settings -> star_settings: pointer, "(read-only) World stars settings"
+#+ * ID|World.texture_slots -> texture_slots: collection, "(read-only) Texture slots defining the mapping and influence of textures"
+#ID|World.use_sky_blend -> use_sky_blend: boolean "Render background with natural progression from horizon to zenith"
+#ID|World.use_sky_paper -> use_sky_paper: boolean "Flatten blend or texture coordinates"
+#ID|World.use_sky_real -> use_sky_real: boolean "Render background with a real horizon, relative to the camera angle"
+#+ * ID|World.zenith_color -> zenith_color: float[3] "Color at the zenith"
+#+ * IKParam.ik_solver -> ik_solver: enum, "(read-only) IK solver for which these parameters are defined, 0 for Legacy, 1 for iTaSC"
+#IKParam|Itasc.damping_epsilon -> damping_epsilon: float "Singular value under which damping is progressively applied. Higher values=more stability, less reactivity. Default=0.1"
+#IKParam|Itasc.damping_max -> damping_max: float "Maximum damping coefficient when singular value is nearly 0. Higher values=more stability, less reactivity. Default=0.5"
+#+ * IKParam|Itasc.feedback -> feedback: float "Feedback coefficient for error correction. Average response time=1/feedback. Default=20"
+#IKParam|Itasc.iterations -> iterations: int "Maximum number of iterations for convergence in case of reiteration"
+#+ * IKParam|Itasc.mode -> mode: enum "NO DESCRIPTION"
+#+ * IKParam|Itasc.precision -> precision: float "Precision of convergence in case of reiteration"
+#IKParam|Itasc.reiteration_method -> reiteration_method: enum "Defines if the solver is allowed to reiterate (converges until precision is met) on none, first or all frames"
+#+ * IKParam|Itasc.solver -> solver: enum "Solving method selection: Automatic damping or manual damping"
+#IKParam|Itasc.step_count -> step_count: int "Divides the frame interval into this many steps"
+#IKParam|Itasc.step_max -> step_max: float "Higher bound for timestep in second in case of automatic substeps"
+#IKParam|Itasc.step_min -> step_min: float "Lower bound for timestep in second in case of automatic substeps"
+#IKParam|Itasc.use_auto_step -> use_auto_step: boolean "Automatically determine the optimal number of steps for best performance/accuracy trade off"
+#IKParam|Itasc.velocity_max -> velocity_max: float "Maximum joint velocity in rad/s. Default=50"
+#+ * ImageUser.fields_per_frame -> fields_per_frame: int "The number of fields per rendered frame (2 fields is 1 image)"
+#ImageUser.frame_duration -> frame_duration: int "Sets the number of images of a movie to use"
+#ImageUser.frame_offset -> frame_offset: int "Offsets the number of the frame to use in the animation"
+#+ * ImageUser.frame_start -> frame_start: int "Sets the global starting frame of the movie"
+#+ * ImageUser.multilayer_layer -> multilayer_layer: int, "(read-only) Layer in multilayer image"
+#+ * ImageUser.multilayer_pass -> multilayer_pass: int, "(read-only) Pass in multilayer image"
+#ImageUser.use_auto_refresh -> use_auto_refresh: boolean "Always refresh image on frame changes"
+#ImageUser.use_cyclic -> use_cyclic: boolean "Cycle the images in the movie"
+#KeyConfig.is_user_defined -> is_user_defined: boolean, "(read-only) Indicates that a keyconfig was defined by the user"
+#+ * KeyConfig.keymaps -> keymaps: collection, "(read-only) Key maps configured as part of this configuration"
+#+ * KeyConfig.name -> name: string "Name of the key configuration"
+#KeyMap.is_modal -> is_modal: boolean, "(read-only) Indicates that a keymap is used for translate modal events for an operator"
+#KeyMap.is_user_defined -> is_user_defined: boolean "Keymap is defined by the user"
+#+ * KeyMap.items -> items: collection, "(read-only) Items in the keymap, linking an operator to an input event"
+#+ * KeyMap.name -> name: string, "(read-only) Name of the key map"
+#+ * KeyMap.region_type -> region_type: enum, "(read-only) Optional region type keymap is associated with"
+#KeyMap.show_expanded_children -> show_expanded_children: boolean "Children expanded in the user interface"
+#KeyMap.show_expanded_items -> show_expanded_items: boolean "Expanded in the user interface"
+#+ * KeyMap.space_type -> space_type: enum, "(read-only) Optional space type keymap is associated with"
+#TODO MOVE TO COLLECTION * KeyMapItem.active -> active: boolean "Activate or deactivate item"
+#+ * KeyMapItem.id -> id: int, "(read-only) ID of the item"
+#+ * KeyMapItem.idname -> idname: string "Identifier of operator to call on input event"
+#+ * KeyMapItem.key_modifier -> key_modifier: enum "Regular key pressed as a modifier"
+#+ * KeyMapItem.map_type -> map_type: enum "Type of event mapping"
+#+ * KeyMapItem.name -> name: string, "(read-only) Name of operator to call on input event"
+ + * KeyMapItem.alt -> pressed_alt: boolean "Alt key pressed"
+ + * KeyMapItem.any -> pressed_any: boolean "Any modifier keys pressed"
+ + * KeyMapItem.ctrl -> pressed_ctrl: boolean "Control key pressed"
+ + * KeyMapItem.oskey -> pressed_oskey: boolean "Operating system key pressed"
+ + * KeyMapItem.shift -> pressed_shift: boolean "Shift key pressed"
+#+ * KeyMapItem.properties -> properties: pointer, "(read-only) Properties to set when the operator is called"
+#TODO * KeyMapItem.propvalue -> propvalue: enum "The value this event translates to in a modal keymap"
+#KeyMapItem.show_expanded -> show_expanded: boolean "Show key map event and property details in the user interface"
+#+ * KeyMapItem.type -> type: enum "Type of event"
+#+ * KeyMapItem.value -> value: enum "NO DESCRIPTION"
+#+ * Keyframe.co -> co: float[2] "Coordinates of the control point"
+#Keyframe.handle_left -> handle_left: float[2] "Coordinates of the first handle"
+#Keyframe.handle_left_type -> handle_left_type: enum "Handle types"
+#Keyframe.handle_right -> handle_right: float[2] "Coordinates of the second handle"
+#Keyframe.handle_right_type -> handle_right_type: enum "Handle types"
+#+ * Keyframe.interpolation -> interpolation: enum "Interpolation method to use for segment of the curve from this Keyframe until the next Keyframe"
+#+ * Keyframe.select_control_point -> select_control_point: boolean "Control point selection status"
+#+ * Keyframe.select_left_handle -> select_left_handle: boolean "Handle 1 selection status"
+#+ * Keyframe.select_right_handle -> select_right_handle: boolean "Handle 2 selection status"
+#+ * Keyframe.type -> type: enum "The type of keyframe"
+#TODO MOVE TO COLLECTION * KeyingSet.active_path -> active_path: pointer "Active Keying Set used to insert/delete keyframes"
+#+ * KeyingSet.active_path_index -> active_path_index: int "Current Keying Set index"
+#KeyingSet.is_path_absolute -> is_path_absolute: boolean, "(read-only) Keying Set defines specific paths/settings to be keyframed (i.e. is not reliant on context info)"
+#+ * KeyingSet.name -> name: string "NO DESCRIPTION"
+#+ * KeyingSet.paths -> paths: collection, "(read-only) Keying Set Paths to define settings that get keyframed together"
+#+ * KeyingSet.type_info -> type_info: pointer, "(read-only) Callback function defines for built-in Keying Sets"
+#KeyingSet.use_insertkey_needed -> use_insertkey_needed: boolean "Only insert keyframes where theyre needed in the relevant F-Curves"
+#KeyingSet.use_insertkey_visual -> use_insertkey_visual: boolean "Insert keyframes based on visual transforms"
+#KeyingSet.use_insertkey_xyz_to_rgb -> use_insertkey_xyz_to_rgb: boolean "Color for newly added transformation F-Curves (Location, Rotation, Scale) and also Color is based on the transform axis"
+#+ * KeyingSetInfo.bl_idname -> bl_idname: string "NO DESCRIPTION"
+#+ * KeyingSetInfo.bl_label -> bl_label: string "NO DESCRIPTION"
+#KeyingSetInfo.use_insertkey_needed -> use_insertkey_needed: boolean "Only insert keyframes where theyre needed in the relevant F-Curves"
+#KeyingSetInfo.use_insertkey_visual -> use_insertkey_visual: boolean "Insert keyframes based on visual transforms"
+#KeyingSetInfo.use_insertkey_xyz_to_rgb -> use_insertkey_xyz_to_rgb: boolean "Color for newly added transformation F-Curves (Location, Rotation, Scale) and also Color is based on the transform axis"
+#+ * KeyingSetPath.array_index -> array_index: int "Index to the specific setting if applicable"
+#+ * KeyingSetPath.data_path -> data_path: string "Path to property setting"
+#+ * KeyingSetPath.group -> group: string "Name of Action Group to assign setting(s) for this path to"
+#KeyingSetPath.group_method -> group_method: enum "Method used to define which Group-name to use"
+#+ * KeyingSetPath.id -> id: pointer "ID-Block that keyframes for Keying Set should be added to (for Absolute Keying Sets only)"
+#+ * KeyingSetPath.id_type -> id_type: enum "Type of ID-block that can be used"
+#KeyingSetPath.use_entire_array -> use_entire_array: boolean "When an array/vector type is chosen (Location, Rotation, Color, etc.), entire array is to be used"
+#KeyingSetPath.use_insertkey_needed -> use_insertkey_needed: boolean "Only insert keyframes where theyre needed in the relevant F-Curves"
+#KeyingSetPath.use_insertkey_visual -> use_insertkey_visual: boolean "Insert keyframes based on visual transforms"
+#KeyingSetPath.use_insertkey_xyz_to_rgb -> use_insertkey_xyz_to_rgb: boolean "Color for newly added transformation F-Curves (Location, Rotation, Scale) and also Color is based on the transform axis"
+#+ * LampSkySettings.atmosphere_distance_factor -> atmosphere_distance_factor: float "Multiplier to convert blender units to physical distance"
+#+ * LampSkySettings.atmosphere_extinction -> atmosphere_extinction: float "Extinction scattering contribution factor"
+#+ * LampSkySettings.atmosphere_inscattering -> atmosphere_inscattering: float "Scatter contribution factor"
+#+ * LampSkySettings.atmosphere_turbidity -> atmosphere_turbidity: float "Sky turbidity"
+#+ * LampSkySettings.backscattered_light -> backscattered_light: float "Backscattered light"
+#+ * LampSkySettings.horizon_brightness -> horizon_brightness: float "Horizon brightness"
+#+ * LampSkySettings.sky_blend -> sky_blend: float "Blend factor with sky"
+#+ * LampSkySettings.sky_blend_type -> sky_blend_type: enum "Blend mode for combining sun sky with world sky"
+#+ * LampSkySettings.sky_color_space -> sky_color_space: enum "Color space to use for internal XYZ->RGB color conversion"
+#+ * LampSkySettings.sky_exposure -> sky_exposure: float "Strength of sky shading exponential exposure correction"
+#+ * LampSkySettings.spread -> spread: float "Horizon Spread"
+#+ * LampSkySettings.sun_brightness -> sun_brightness: float "Sun brightness"
+#+ * LampSkySettings.sun_intensity -> sun_intensity: float "Sun intensity"
+#+ * LampSkySettings.sun_size -> sun_size: float "Sun size"
+#+ * LampSkySettings.use_atmosphere -> use_atmosphere: boolean "Apply sun effect on atmosphere"
+#+ * LampSkySettings.use_sky -> use_sky: boolean "Apply sun effect on sky"
+#+ * LatticePoint.co -> co: float[3], "(read-only)"
+#LatticePoint.co_deform -> co_deform: float[3] "NO DESCRIPTION"
+#+ * LatticePoint.groups -> groups: collection, "(read-only) Weights for the vertex groups this point is member of"
+#+ * Macro.bl_description -> bl_description: string "NO DESCRIPTION"
+#+ * Macro.bl_idname -> bl_idname: string "NO DESCRIPTION"
+#+ * Macro.bl_label -> bl_label: string "NO DESCRIPTION"
+#+ * Macro.bl_options -> bl_options: enum "Options for this operator type"
+#+ * Macro.name -> name: string, "(read-only)"
+#+ * Macro.properties -> properties: pointer, "(read-only)"
+#+ * Main.actions -> actions: collection, "(read-only) Action datablocks."
+#+ * Main.armatures -> armatures: collection, "(read-only) Armature datablocks."
+#+ * Main.brushes -> brushes: collection, "(read-only) Brush datablocks."
+#+ * Main.cameras -> cameras: collection, "(read-only) Camera datablocks."
+#+ * Main.curves -> curves: collection, "(read-only) Curve datablocks."
+#+ * Main.filepath -> filepath: string, "(read-only) Path to the .blend file"
+#+ * Main.fonts -> fonts: collection, "(read-only) Vector font datablocks."
+#Main.grease_pencil -> grease_pencil: collection, "(read-only) Grease Pencil datablocks."
+#+ * Main.groups -> groups: collection, "(read-only) Group datablocks."
+#+ * Main.images -> images: collection, "(read-only) Image datablocks."
+#Main.is_dirty -> is_dirty: boolean, "(read-only) Has the current session been saved to disk as a .blend file"
+#+ * Main.lamps -> lamps: collection, "(read-only) Lamp datablocks."
+#+ * Main.lattices -> lattices: collection, "(read-only) Lattice datablocks."
+#+ * Main.libraries -> libraries: collection, "(read-only) Library datablocks."
+#+ * Main.materials -> materials: collection, "(read-only) Material datablocks."
+#+ * Main.meshes -> meshes: collection, "(read-only) Mesh datablocks."
+#+ * Main.metaballs -> metaballs: collection, "(read-only) Metaball datablocks."
+#+ * Main.node_groups -> node_groups: collection, "(read-only) Node group datablocks."
+#+ * Main.objects -> objects: collection, "(read-only) Object datablocks."
+#+ * Main.particles -> particles: collection, "(read-only) Particle datablocks."
+#+ * Main.scenes -> scenes: collection, "(read-only) Scene datablocks."
+#+ * Main.screens -> screens: collection, "(read-only) Screen datablocks."
+#+ * Main.scripts -> scripts: collection, "(read-only) Script datablocks (DEPRECATED)."
+ + * Main.debug -> show_debug: boolean "Print debugging information in console"
+#+ * Main.sounds -> sounds: collection, "(read-only) Sound datablocks."
+#+ * Main.texts -> texts: collection, "(read-only) Text datablocks."
+#+ * Main.textures -> textures: collection, "(read-only) Texture datablocks."
+#+ * Main.window_managers -> window_managers: collection, "(read-only) Window manager datablocks."
+#+ * Main.worlds -> worlds: collection, "(read-only) World datablocks."
+#+ * MaterialHalo.add -> add: float "Sets the strength of the add effect"
+#+ * MaterialHalo.flare_boost -> flare_boost: float "Gives the flare extra strength"
+#+ * MaterialHalo.flare_seed -> flare_seed: int "Specifies an offset in the flare seed table"
+#+ * MaterialHalo.flare_size -> flare_size: float "Sets the factor by which the flare is larger than the halo"
+#MaterialHalo.flare_subflare_count -> flare_subflare_count: int "Sets the number of subflares"
+#MaterialHalo.flare_subflare_size -> flare_subflare_size: float "Sets the dimension of the subflares, dots and circles"
+#+ * MaterialHalo.hardness -> hardness: int "Sets the hardness of the halo"
+#MaterialHalo.line_count -> line_count: int "Sets the number of star shaped lines rendered over the halo"
+#MaterialHalo.ring_count -> ring_count: int "Sets the number of rings rendered over the halo"
+#+ * MaterialHalo.seed -> seed: int "Randomizes ring dimension and line location"
+#MaterialHalo.show_shaded -> show_shaded: boolean "Lets halo receive light and shadows from external objects"
+#+ * MaterialHalo.size -> size: float "Sets the dimension of the halo"
+#MaterialHalo.star_tip_count -> star_tip_count: int "Sets the number of points on the star shaped halo"
+#MaterialHalo.use_extreme_alpha -> use_extreme_alpha: boolean "Uses extreme alpha"
+#MaterialHalo.use_flare_mode -> use_flare_mode: boolean "Renders halo as a lensflare"
+#MaterialHalo.use_lines -> use_lines: boolean "Renders star shaped lines over halo"
+#MaterialHalo.use_ring -> use_ring: boolean "Renders rings over halo"
+#MaterialHalo.use_soft -> use_soft: boolean "Softens the edges of halos at intersections with other geometry"
+#MaterialHalo.use_star -> use_star: boolean "Renders halo as a star"
+#MaterialHalo.use_texture -> use_texture: boolean "Gives halo a texture"
+#MaterialHalo.use_vertex_normal -> use_vertex_normal: boolean "Uses the vertex normal to specify the dimension of the halo"
+#MaterialPhysics.damping -> damping: float "Damping of the spring force, when inside the physics distance area"
+#+ * MaterialPhysics.distance -> distance: float "Distance of the physics area"
+#+ * MaterialPhysics.elasticity -> elasticity: float "Elasticity of collisions"
+#+ * MaterialPhysics.force -> force: float "Upward spring force, when inside the physics distance area"
+#+ * MaterialPhysics.friction -> friction: float "Coulomb friction coefficient, when inside the physics distance area"
+#MaterialPhysics.use_normal_align -> use_normal_align: boolean "Align dynamic game objects along the surface normal, when inside the physics distance area"
+#+ * MaterialRaytraceMirror.depth -> depth: int "Maximum allowed number of light inter-reflections"
+#+ * MaterialRaytraceMirror.distance -> distance: float "Maximum distance of reflected rays. Reflections further than this range fade to sky color or material color"
+#+ * MaterialRaytraceMirror.fade_to -> fade_to: enum "The color that rays with no intersection within the Max Distance take. Material color can be best for indoor scenes, sky color for outdoor"
+#+ * MaterialRaytraceMirror.fresnel -> fresnel: float "Power of Fresnel for mirror reflection"
+#+ * MaterialRaytraceMirror.fresnel_factor -> fresnel_factor: float "Blending factor for Fresnel"
+#+ * MaterialRaytraceMirror.gloss_anisotropic -> gloss_anisotropic: float "The shape of the reflection, from 0.0 (circular) to 1.0 (fully stretched along the tangent"
+#+ * MaterialRaytraceMirror.gloss_factor -> gloss_factor: float "The shininess of the reflection. Values < 1.0 give diffuse, blurry reflections"
+#+ * MaterialRaytraceMirror.gloss_samples -> gloss_samples: int "Number of cone samples averaged for blurry reflections"
+#+ * MaterialRaytraceMirror.gloss_threshold -> gloss_threshold: float "Threshold for adaptive sampling. If a sample contributes less than this amount (as a percentage), sampling is stopped"
+#+ * MaterialRaytraceMirror.reflect_factor -> reflect_factor: float "Sets the amount mirror reflection for raytrace"
+#+ * MaterialRaytraceMirror.use -> use: boolean "Enable raytraced reflections"
+#+ * MaterialRaytraceTransparency.depth -> depth: int "Maximum allowed number of light inter-refractions"
+#MaterialRaytraceTransparency.depth_max -> depth_max: float "Maximum depth for light to travel through the transparent material before becoming fully filtered (0.0 is disabled)"
+#+ * MaterialRaytraceTransparency.falloff -> falloff: float "Falloff power for transmissivity filter effect (1.0 is linear)"
+#+ * MaterialRaytraceTransparency.filter -> filter: float "Amount to blend in the materials diffuse color in raytraced transparency (simulating absorption)"
+#+ * MaterialRaytraceTransparency.fresnel -> fresnel: float "Power of Fresnel for transparency (Ray or ZTransp)"
+#+ * MaterialRaytraceTransparency.fresnel_factor -> fresnel_factor: float "Blending factor for Fresnel"
+#+ * MaterialRaytraceTransparency.gloss_factor -> gloss_factor: float "The clarity of the refraction. Values < 1.0 give diffuse, blurry refractions"
+#+ * MaterialRaytraceTransparency.gloss_samples -> gloss_samples: int "Number of cone samples averaged for blurry refractions"
+#+ * MaterialRaytraceTransparency.gloss_threshold -> gloss_threshold: float "Threshold for adaptive sampling. If a sample contributes less than this amount (as a percentage), sampling is stopped"
+#+ * MaterialRaytraceTransparency.ior -> ior: float "Sets angular index of refraction for raytraced refraction"
+#+ * MaterialSlot.link -> link: enum "Link material to object or the objects data"
+#+ * MaterialSlot.material -> material: pointer "Material datablock used by this material slot"
+#+ * MaterialSlot.name -> name: string, "(read-only) Material slot name"
+#+ * MaterialStrand.blend_distance -> blend_distance: float "Worldspace distance over which to blend in the surface normal"
+#+ * MaterialStrand.root_size -> root_size: float "Start size of strands in pixels or Blender units"
+#+ * MaterialStrand.shape -> shape: float "Positive values make strands rounder, negative makes strands spiky"
+#MaterialStrand.size_min -> size_min: float "Minimum size of strands in pixels"
+#+ * MaterialStrand.tip_size -> tip_size: float "End size of strands in pixels or Blender units"
+#MaterialStrand.use_blender_units -> use_blender_units: boolean "Use Blender units for widths instead of pixels"
+#MaterialStrand.use_surface_diffuse -> use_surface_diffuse: boolean "Make diffuse shading more similar to shading the surface"
+#MaterialStrand.use_tangent_shading -> use_tangent_shading: boolean "Uses direction of strands as normal for tangent-shading"
+#+ * MaterialStrand.uv_layer -> uv_layer: string "Name of UV layer to override"
+#+ * MaterialStrand.width_fade -> width_fade: float "Transparency along the width of the strand"
+#+ * MaterialSubsurfaceScattering.back -> back: float "Back scattering weight"
+#+ * MaterialSubsurfaceScattering.color -> color: float[3] "Scattering color"
+#+ * MaterialSubsurfaceScattering.color_factor -> color_factor: float "Blend factor for SSS colors"
+#MaterialSubsurfaceScattering.error_threshold -> error_threshold: float "Error tolerance (low values are slower and higher quality)"
+#+ * MaterialSubsurfaceScattering.front -> front: float "Front scattering weight"
+#+ * MaterialSubsurfaceScattering.ior -> ior: float "Index of refraction (higher values are denser)"
+#+ * MaterialSubsurfaceScattering.radius -> radius: float[3] "Mean red/green/blue scattering path length"
+#+ * MaterialSubsurfaceScattering.scale -> scale: float "Object scale factor"
+#+ * MaterialSubsurfaceScattering.texture_factor -> texture_factor: float "Texture scatting blend factor"
+#+ * MaterialSubsurfaceScattering.use -> use: boolean "Enable diffuse subsurface scatting effects in a material"
+#+ * MaterialVolume.asymmetry -> asymmetry: float "Back scattering (-1.0) to Forward scattering (1.0) and the range in between"
+#+ * MaterialVolume.cache_resolution -> cache_resolution: int "Resolution of the voxel grid, low resolutions are faster, high resolutions use more memory"
+#+ * MaterialVolume.density -> density: float "The base density of the volume"
+#+ * MaterialVolume.density_scale -> density_scale: float "Multiplier for the materials density"
+#MaterialVolume.depth_threshold -> depth_threshold: float "Stop ray marching early if transmission drops below this luminance - higher values give speedups in dense volumes at the expense of accuracy"
+#+ * MaterialVolume.emission -> emission: float "Amount of light that gets emitted by the volume"
+#+ * MaterialVolume.emission_color -> emission_color: float[3] "NO DESCRIPTION"
+#MaterialVolume.light_method -> light_method: enum "Method of shading, attenuating, and scattering light through the volume"
+#+ * MaterialVolume.ms_diffusion -> ms_diffusion: float "Diffusion factor, the strength of the blurring effect"
+#+ * MaterialVolume.ms_intensity -> ms_intensity: float "Multiplier for multiple scattered light energy"
+#+ * MaterialVolume.ms_spread -> ms_spread: float "Proportional distance over which the light is diffused"
+#+ * MaterialVolume.reflection -> reflection: float "Multiplier to make out-scattered light brighter or darker (non-physically correct)"
+#+ * MaterialVolume.reflection_color -> reflection_color: float[3] "Colour of light scattered out of the volume (does not affect transmission)"
+#+ * MaterialVolume.scattering -> scattering: float "Amount of light that gets scattered out by the volume - the more out-scattering, the shallower the light will penetrate"
+#MaterialVolume.step_method -> step_method: enum "Method of calculating the steps through the volume"
+#+ * MaterialVolume.step_size -> step_size: float "Distance between subsequent volume depth samples"
+#+ * MaterialVolume.transmission_color -> transmission_color: float[3] "Result color of the volume, after other light has been scattered/absorbed"
+#MaterialVolume.use_external_shadows -> use_external_shadows: boolean "Receive shadows from sources outside the volume (temporary)"
+#MaterialVolume.use_light_cache -> use_light_cache: boolean "Pre-calculate the shading information into a voxel grid, speeds up shading at slightly less accuracy"
+#+ * Menu.bl_idname -> bl_idname: string "If this is set, the menu gets a custom ID, otherwise it takes the name of the class used to define the panel. For example, if the class name is OBJECT_MT_hello, and bl_idname is not set by the script, then bl_idname = OBJECT_MT_hello"
+#+ * Menu.bl_label -> bl_label: string "The menu label"
+#+ * Menu.layout -> layout: pointer, "(read-only) Defines the structure of the menu in the UI."
+#+ * MeshColor.color1 -> color1: float[3] "NO DESCRIPTION"
+#+ * MeshColor.color2 -> color2: float[3] "NO DESCRIPTION"
+#+ * MeshColor.color3 -> color3: float[3] "NO DESCRIPTION"
+#+ * MeshColor.color4 -> color4: float[3] "NO DESCRIPTION"
+#+ * MeshColorLayer.active -> active: boolean "Sets the layer as active for display and editing"
+#+ * MeshColorLayer.active_render -> active_render: boolean "Sets the layer as active for rendering"
+#+ * MeshColorLayer.data -> data: collection, "(read-only)"
+#+ * MeshColorLayer.name -> name: string "NO DESCRIPTION"
+#+ * MeshEdge.bevel_weight -> bevel_weight: float "Weight used by the Bevel modifier"
+#+ * MeshEdge.crease -> crease: float "Weight used by the Subsurf modifier for creasing"
+#+ * MeshEdge.hide -> hide: boolean "NO DESCRIPTION"
+#+ * MeshEdge.index -> index: int, "(read-only) Index number of the vertex"
+#MeshEdge.is_fgon -> is_fgon: boolean "Fgon edge"
+#MeshEdge.is_loose -> is_loose: boolean "Loose edge"
+#+ * MeshEdge.select -> select: boolean "NO DESCRIPTION"
+#MeshEdge.use_edge_sharp -> use_edge_sharp: boolean "Sharp edge for the EdgeSplit modifier"
+#MeshEdge.use_seam -> use_seam: boolean "Seam edge for UV unwrapping"
+#MeshEdge.vertices -> vertices: int[2] "Vertex indices"
+#+ * MeshFace.area -> area: float, "(read-only) read only area of the face"
+#+ * MeshFace.hide -> hide: boolean "NO DESCRIPTION"
+#+ * MeshFace.index -> index: int, "(read-only) Index number of the vertex"
+#+ * MeshFace.material_index -> material_index: int "NO DESCRIPTION"
+#+ * MeshFace.normal -> normal: float[3], "(read-only) local space unit length normal vector for this face"
+#+ * MeshFace.select -> select: boolean "NO DESCRIPTION"
+#MeshFace.use_smooth -> use_smooth: boolean "NO DESCRIPTION"
+#MeshFace.vertices -> vertices: int[4] "Vertex indices"
+#MeshFace.vertices_raw -> vertices_raw: int[4] "Fixed size vertex indices array"
+#+ * MeshFaces.active -> active: int "The active face for this mesh"
+#+ * MeshFaces.active_tface -> active_tface: pointer, "(read-only) Active Texture Face"
+#+ * MeshFloatProperty.value -> value: float "NO DESCRIPTION"
+#+ * MeshFloatPropertyLayer.data -> data: collection, "(read-only)"
+#+ * MeshFloatPropertyLayer.name -> name: string "NO DESCRIPTION"
+#+ * MeshIntProperty.value -> value: int "NO DESCRIPTION"
+#+ * MeshIntPropertyLayer.data -> data: collection, "(read-only)"
+#+ * MeshIntPropertyLayer.name -> name: string "NO DESCRIPTION"
+#+ * MeshSticky.co -> co: float[2] "Sticky texture coordinate location"
+#+ * MeshStringProperty.value -> value: string "NO DESCRIPTION"
+#+ * MeshStringPropertyLayer.data -> data: collection, "(read-only)"
+#+ * MeshStringPropertyLayer.name -> name: string "NO DESCRIPTION"
+#MeshTextureFace.blend_type -> blend_type: enum "Transparency blending mode"
+#MeshTextureFace.hide -> hide: boolean "Make face invisible"
+#+ * MeshTextureFace.image -> image: pointer "NO DESCRIPTION"
+#MeshTextureFace.pin_uv -> pin_uv: boolean[4] "NO DESCRIPTION"
+#+ * MeshTextureFace.select_uv -> select_uv: boolean[4] "NO DESCRIPTION"
+#MeshTextureFace.use_alpha_sort -> use_alpha_sort: boolean "Enable sorting of faces for correct alpha drawing (slow, use Clip Alpha instead when possible)"
+#MeshTextureFace.use_billboard -> use_billboard: boolean "Billboard with Z-axis constraint"
+#MeshTextureFace.use_bitmap_text -> use_bitmap_text: boolean "Enable bitmap text on face"
+#MeshTextureFace.use_blend_shared -> use_blend_shared: boolean "Blend vertex colors across face when vertices are shared"
+#MeshTextureFace.use_collision -> use_collision: boolean "Use face for collision and ray-sensor detection"
+#MeshTextureFace.use_halo -> use_halo: boolean "Screen aligned billboard"
+#MeshTextureFace.use_image -> use_image: boolean "Render face with texture"
+#MeshTextureFace.use_light -> use_light: boolean "Use light for face"
+#MeshTextureFace.use_object_color -> use_object_color: boolean "Use ObColor instead of vertex colors"
+#MeshTextureFace.use_shadow_cast -> use_shadow_cast: boolean "Face is used for shadow"
+#MeshTextureFace.use_twoside -> use_twoside: boolean "Render face two-sided"
+#+ * MeshTextureFace.uv -> uv: float[8] "NO DESCRIPTION"
+#+ * MeshTextureFace.uv1 -> uv1: float[2] "NO DESCRIPTION"
+#+ * MeshTextureFace.uv2 -> uv2: float[2] "NO DESCRIPTION"
+#+ * MeshTextureFace.uv3 -> uv3: float[2] "NO DESCRIPTION"
+#+ * MeshTextureFace.uv4 -> uv4: float[2] "NO DESCRIPTION"
+#+ * MeshTextureFace.uv_raw -> uv_raw: float[8] "Fixed size UV coordinates array"
+#+ * MeshTextureFaceLayer.active -> active: boolean "Sets the layer as active for display and editing"
+#+ * MeshTextureFaceLayer.active_clone -> active_clone: boolean "Sets the layer as active for cloning"
+#+ * MeshTextureFaceLayer.active_render -> active_render: boolean "Sets the layer as active for rendering"
+#+ * MeshTextureFaceLayer.data -> data: collection, "(read-only)"
+#+ * MeshTextureFaceLayer.name -> name: string "NO DESCRIPTION"
+#+ * MeshVertex.bevel_weight -> bevel_weight: float "Weight used by the Bevel modifier Only Vertices option"
+#+ * MeshVertex.co -> co: float[3] "NO DESCRIPTION"
+#+ * MeshVertex.groups -> groups: collection, "(read-only) Weights for the vertex groups this vertex is member of"
+#+ * MeshVertex.hide -> hide: boolean "NO DESCRIPTION"
+#+ * MeshVertex.index -> index: int, "(read-only) Index number of the vertex"
+#+ * MeshVertex.normal -> normal: float[3] "Vertex Normal"
+#+ * MeshVertex.select -> select: boolean "NO DESCRIPTION"
+#MetaElement.co -> co: float[3] "NO DESCRIPTION"
+#+ * MetaElement.hide -> hide: boolean "Hide element"
+#+ * MetaElement.radius -> radius: float "NO DESCRIPTION"
+#+ * MetaElement.rotation -> rotation: float[4] "NO DESCRIPTION"
+#+ * MetaElement.size_x -> size_x: float "Size of element, use of components depends on element type"
+#+ * MetaElement.size_y -> size_y: float "Size of element, use of components depends on element type"
+#+ * MetaElement.size_z -> size_z: float "Size of element, use of components depends on element type"
+#+ * MetaElement.stiffness -> stiffness: float "Stiffness defines how much of the element to fill"
+#+ * MetaElement.type -> type: enum "Metaball types"
+#MetaElement.use_negative -> use_negative: boolean "Set metaball as negative one"
+#+ * Modifier.name -> name: string "Modifier name"
+#Modifier.show_expanded -> show_expanded: boolean "Set modifier expanded in the user interface"
+#Modifier.show_in_editmode -> show_in_editmode: boolean "Use modifier while in the edit mode"
+#Modifier.show_on_cage -> show_on_cage: boolean "Enable direct editing of modifier control cage"
+#Modifier.show_render -> show_render: boolean "Use modifier during rendering"
+#Modifier.show_viewport -> show_viewport: boolean "Realtime display of a modifier"
+#+ * Modifier.type -> type: enum, "(read-only)"
+#Modifier|ArmatureModifier.invert_vertex_group -> invert_vertex_group: boolean "Invert vertex group influence"
+#+ * Modifier|ArmatureModifier.object -> object: pointer "Armature object to deform with"
+#+ * Modifier|ArmatureModifier.use_bone_envelopes -> use_bone_envelopes: boolean "NO DESCRIPTION"
+#Modifier|ArmatureModifier.use_deform_preserve_volume -> use_deform_preserve_volume: boolean "Deform rotation interpolation with quaternions"
+#Modifier|ArmatureModifier.use_multi_modifier -> use_multi_modifier: boolean "Use same input as previous modifier, and mix results using overall vgroup"
+#+ * Modifier|ArmatureModifier.use_vertex_groups -> use_vertex_groups: boolean "NO DESCRIPTION"
+#+ * Modifier|ArmatureModifier.vertex_group -> vertex_group: string "Vertex group name"
+#Modifier|ArrayModifier.constant_offset_displace -> constant_offset_displace: float[3] "NO DESCRIPTION"
+#+ * Modifier|ArrayModifier.count -> count: int "Number of duplicates to make"
+#+ * Modifier|ArrayModifier.curve -> curve: pointer "Curve object to fit array length to"
+#+ * Modifier|ArrayModifier.end_cap -> end_cap: pointer "Mesh object to use as an end cap"
+#Modifier|ArrayModifier.fit_length -> fit_length: float "Length to fit array within"
+#+ * Modifier|ArrayModifier.fit_type -> fit_type: enum "Array length calculation method"
+#Modifier|ArrayModifier.merge_threshold -> merge_threshold: float "Limit below which to merge vertices"
+#+ * Modifier|ArrayModifier.offset_object -> offset_object: pointer "NO DESCRIPTION"
+#Modifier|ArrayModifier.relative_offset_displace -> relative_offset_displace: float[3] "NO DESCRIPTION"
+#+ * Modifier|ArrayModifier.start_cap -> start_cap: pointer "Mesh object to use as a start cap"
+#Modifier|ArrayModifier.use_constant_offset -> use_constant_offset: boolean "Add a constant offset"
+#Modifier|ArrayModifier.use_merge_vertices -> use_merge_vertices: boolean "Merge vertices in adjacent duplicates"
+#Modifier|ArrayModifier.use_merge_vertices_cap -> use_merge_vertices_cap: boolean "Merge vertices in first and last duplicates"
+#Modifier|ArrayModifier.use_object_offset -> use_object_offset: boolean "Add another objects transformation to the total offset"
+#Modifier|ArrayModifier.use_relative_offset -> use_relative_offset: boolean "Add an offset relative to the objects bounding box"
+#Modifier|BevelModifier.angle_limit -> angle_limit: float "Angle above which to bevel edges"
+#+ * Modifier|BevelModifier.edge_weight_method -> edge_weight_method: enum "What edge weight to use for weighting a vertex"
+#+ * Modifier|BevelModifier.limit_method -> limit_method: enum "NO DESCRIPTION"
+#Modifier|BevelModifier.use_only_vertices -> use_only_vertices: boolean "Bevel verts/corners, not edges"
+#+ * Modifier|BevelModifier.width -> width: float "Bevel value/amount"
+#+ * Modifier|BooleanModifier.object -> object: pointer "Mesh object to use for Boolean operation"
+#+ * Modifier|BooleanModifier.operation -> operation: enum "NO DESCRIPTION"
+#Modifier|BuildModifier.frame_duration -> frame_duration: float "Specify the total time the build effect requires"
+#+ * Modifier|BuildModifier.frame_start -> frame_start: float "Specify the start frame of the effect"
+#+ * Modifier|BuildModifier.seed -> seed: int "Specify the seed for random if used"
+#Modifier|BuildModifier.use_random_order -> use_random_order: boolean "Randomize the faces or edges during build"
+#+ * Modifier|CastModifier.cast_type -> cast_type: enum "NO DESCRIPTION"
+#+ * Modifier|CastModifier.factor -> factor: float "NO DESCRIPTION"
+#+ * Modifier|CastModifier.object -> object: pointer "Control object: if available, its location determines the center of the effect"
+#+ * Modifier|CastModifier.radius -> radius: float "Only deform vertices within this distance from the center of the effect (leave as 0 for infinite.)"
+#+ * Modifier|CastModifier.size -> size: float "Size of projection shape (leave as 0 for auto.)"
+#Modifier|CastModifier.use_radius_as_size -> use_radius_as_size: boolean "Use radius as size of projection shape (0 = auto)"
+#+ * Modifier|CastModifier.use_transform -> use_transform: boolean "Use object transform to control projection shape"
+#Modifier|CastModifier.use_x -> use_x: boolean "NO DESCRIPTION"
+#Modifier|CastModifier.use_y -> use_y: boolean "NO DESCRIPTION"
+#Modifier|CastModifier.use_z -> use_z: boolean "NO DESCRIPTION"
+#+ * Modifier|CastModifier.vertex_group -> vertex_group: string "Vertex group name"
+#+ * Modifier|ClothModifier.collision_settings -> collision_settings: pointer, "(read-only)"
+#+ * Modifier|ClothModifier.point_cache -> point_cache: pointer, "(read-only)"
+#+ * Modifier|ClothModifier.settings -> settings: pointer, "(read-only)"
+#+ * Modifier|CollisionModifier.settings -> settings: pointer, "(read-only)"
+#+ * Modifier|CurveModifier.deform_axis -> deform_axis: enum "The axis that the curve deforms along"
+#+ * Modifier|CurveModifier.object -> object: pointer "Curve object to deform with"
+#+ * Modifier|CurveModifier.vertex_group -> vertex_group: string "Vertex group name"
+#+ * Modifier|DecimateModifier.face_count -> face_count: int, "(read-only) The current number of faces in the decimated mesh"
+#+ * Modifier|DecimateModifier.ratio -> ratio: float "Defines the ratio of triangles to reduce to"
+#+ * Modifier|DisplaceModifier.direction -> direction: enum "NO DESCRIPTION"
+#Modifier|DisplaceModifier.mid_level -> mid_level: float "Material value that gives no displacement"
+#+ * Modifier|DisplaceModifier.strength -> strength: float "NO DESCRIPTION"
+#+ * Modifier|DisplaceModifier.texture -> texture: pointer "NO DESCRIPTION"
+#+ * Modifier|DisplaceModifier.texture_coordinate_object -> texture_coordinate_object: pointer "NO DESCRIPTION"
+#Modifier|DisplaceModifier.texture_coords -> texture_coords: enum "NO DESCRIPTION"
+#+ * Modifier|DisplaceModifier.uv_layer -> uv_layer: string "UV layer name"
+#+ * Modifier|DisplaceModifier.vertex_group -> vertex_group: string "Vertex group name"
+#+ * Modifier|EdgeSplitModifier.split_angle -> split_angle: float "Angle above which to split edges"
+#+ * Modifier|EdgeSplitModifier.use_edge_angle -> use_edge_angle: boolean "Split edges with high angle between faces"
+#Modifier|EdgeSplitModifier.use_edge_sharp -> use_edge_sharp: boolean "Split edges that are marked as sharp"
+#+ * Modifier|ExplodeModifier.protect -> protect: float "Clean vertex group edges"
+#Modifier|ExplodeModifier.show_alive -> show_alive: boolean "Show mesh when particles are alive"
+#Modifier|ExplodeModifier.show_dead -> show_dead: boolean "Show mesh when particles are dead"
+#Modifier|ExplodeModifier.show_unborn -> show_unborn: boolean "Show mesh when particles are unborn"
+#Modifier|ExplodeModifier.use_edge_split -> use_edge_split: boolean "Split face edges for nicer shrapnel"
+#Modifier|ExplodeModifier.use_size -> use_size: boolean "Use particle size for the shrapnel"
+#+ * Modifier|ExplodeModifier.vertex_group -> vertex_group: string "NO DESCRIPTION"
+#+ * Modifier|FluidSimulationModifier.settings -> settings: pointer, "(read-only) Settings for how this object is used in the fluid simulation"
+#+ * Modifier|HookModifier.falloff -> falloff: float "If not zero, the distance from the hook where influence ends"
+#+ * Modifier|HookModifier.force -> force: float "Relative force of the hook"
+#+ * Modifier|HookModifier.object -> object: pointer "Parent Object for hook, also recalculates and clears offset"
+#+ * Modifier|HookModifier.subtarget -> subtarget: string "Name of Parent Bone for hook (if applicable), also recalculates and clears offset"
+#+ * Modifier|HookModifier.vertex_group -> vertex_group: string "Vertex group name"
+#+ * Modifier|LatticeModifier.object -> object: pointer "Lattice object to deform with"
+#+ * Modifier|LatticeModifier.vertex_group -> vertex_group: string "Vertex group name"
+#+ * Modifier|MaskModifier.armature -> armature: pointer "Armature to use as source of bones to mask"
+#Modifier|MaskModifier.invert_vertex_group -> invert_vertex_group: boolean "Use vertices that are not part of region defined"
+#+ * Modifier|MaskModifier.mode -> mode: enum "NO DESCRIPTION"
+#+ * Modifier|MaskModifier.vertex_group -> vertex_group: string "Vertex group name"
+#Modifier|MeshDeformModifier.invert_vertex_group -> invert_vertex_group: boolean "Invert vertex group influence"
+#+ * Modifier|MeshDeformModifier.is_bound -> is_bound: boolean, "(read-only) Whether geometry has been bound to control cage"
+#+ * Modifier|MeshDeformModifier.object -> object: pointer "Mesh object to deform with"
+#+ * Modifier|MeshDeformModifier.precision -> precision: int "The grid size for binding"
+#Modifier|MeshDeformModifier.use_dynamic_bind -> use_dynamic_bind: boolean "Recompute binding dynamically on top of other deformers (slower and more memory consuming.)"
+#+ * Modifier|MeshDeformModifier.vertex_group -> vertex_group: string "Vertex group name"
+#Modifier|MirrorModifier.merge_threshold -> merge_threshold: float "Distance from axis within which mirrored vertices are merged"
+#+ * Modifier|MirrorModifier.mirror_object -> mirror_object: pointer "Object to use as mirror"
+#Modifier|MirrorModifier.use_clip -> use_clip: boolean "Prevents vertices from going through the mirror during transform"
+#Modifier|MirrorModifier.use_mirror_u -> use_mirror_u: boolean "Mirror the U texture coordinate around the 0.5 point"
+#Modifier|MirrorModifier.use_mirror_v -> use_mirror_v: boolean "Mirror the V texture coordinate around the 0.5 point"
+#Modifier|MirrorModifier.use_mirror_vertex_groups -> use_mirror_vertex_groups: boolean "Mirror vertex groups (e.g. .R->.L)"
+#Modifier|MirrorModifier.use_x -> use_x: boolean "Enable X axis mirror"
+#Modifier|MirrorModifier.use_y -> use_y: boolean "Enable Y axis mirror"
+#Modifier|MirrorModifier.use_z -> use_z: boolean "Enable Z axis mirror"
+#+ * Modifier|MultiresModifier.filepath -> filepath: string "Path to external displacements file"
+#Modifier|MultiresModifier.is_external -> is_external: boolean, "(read-only) Store multires displacements outside the .blend file, to save memory"
+#+ * Modifier|MultiresModifier.levels -> levels: int "Number of subdivisions to use in the viewport"
+#+ * Modifier|MultiresModifier.render_levels -> render_levels: int "NO DESCRIPTION"
+#+ * Modifier|MultiresModifier.sculpt_levels -> sculpt_levels: int "Number of subdivisions to use in sculpt mode"
+#Modifier|MultiresModifier.show_only_control_edges -> show_only_control_edges: boolean "Skip drawing/rendering of interior subdivided edges"
+#+ * Modifier|MultiresModifier.subdivision_type -> subdivision_type: enum "Selects type of subdivision algorithm"
+#+ * Modifier|MultiresModifier.total_levels -> total_levels: int, "(read-only) Number of subdivisions for which displacements are stored"
+#+ * Modifier|ParticleInstanceModifier.axis -> axis: enum "Pole axis for rotation"
+#+ * Modifier|ParticleInstanceModifier.object -> object: pointer "Object that has the particle system"
+#Modifier|ParticleInstanceModifier.particle_system_index -> particle_system_index: int "NO DESCRIPTION"
+#+ * Modifier|ParticleInstanceModifier.position -> position: float "Position along path"
+#+ * Modifier|ParticleInstanceModifier.random_position -> random_position: float "Randomize position along path"
+#Modifier|ParticleInstanceModifier.show_alive -> show_alive: boolean "Show instances when particles are alive"
+#Modifier|ParticleInstanceModifier.show_dead -> show_dead: boolean "Show instances when particles are dead"
+#Modifier|ParticleInstanceModifier.show_unborn -> show_unborn: boolean "Show instances when particles are unborn"
+#Modifier|ParticleInstanceModifier.use_children -> use_children: boolean "Create instances from child particles"
+#Modifier|ParticleInstanceModifier.use_normal -> use_normal: boolean "Create instances from normal particles"
+#+ * Modifier|ParticleInstanceModifier.use_path -> use_path: boolean "Create instances along particle paths"
+#Modifier|ParticleInstanceModifier.use_preserve_shape -> use_preserve_shape: boolean "Dont stretch the object"
+#Modifier|ParticleInstanceModifier.use_size -> use_size: boolean "Use particle size to scale the instances"
+#+ * Modifier|ParticleSystemModifier.particle_system -> particle_system: pointer, "(read-only) Particle System that this modifier controls"
+#+ * Modifier|ScrewModifier.angle -> angle: float "Angle of revolution"
+#+ * Modifier|ScrewModifier.axis -> axis: enum "Screw axis"
+#+ * Modifier|ScrewModifier.iterations -> iterations: int "Number of times to apply the screw operation"
+#+ * Modifier|ScrewModifier.object -> object: pointer "Object to define the screw axis"
+#+ * Modifier|ScrewModifier.render_steps -> render_steps: int "Number of steps in the revolution"
+#+ * Modifier|ScrewModifier.screw_offset -> screw_offset: float "Offset the revolution along its axis"
+#+ * Modifier|ScrewModifier.steps -> steps: int "Number of steps in the revolution"
+#+ * Modifier|ScrewModifier.use_normal_calculate -> use_normal_calculate: boolean "Calculate the order of edges (needed for meshes, but not curves)"
+#+ * Modifier|ScrewModifier.use_normal_flip -> use_normal_flip: boolean "Flip normals of lathed faces"
+#+ * Modifier|ScrewModifier.use_object_screw_offset -> use_object_screw_offset: boolean "Use the distance between the objects to make a screw"
+#+ * Modifier|ShrinkwrapModifier.auxiliary_target -> auxiliary_target: pointer "Additional mesh target to shrink to"
+#+ * Modifier|ShrinkwrapModifier.offset -> offset: float "Distance to keep from the target"
+#+ * Modifier|ShrinkwrapModifier.subsurf_levels -> subsurf_levels: int "Number of subdivisions that must be performed before extracting vertices positions and normals"
+#+ * Modifier|ShrinkwrapModifier.target -> target: pointer "Mesh target to shrink to"
+#Modifier|ShrinkwrapModifier.use_cull_back_faces -> use_cull_back_faces: boolean "Stop vertices from projecting to a back face on the target"
+#Modifier|ShrinkwrapModifier.use_cull_front_faces -> use_cull_front_faces: boolean "Stop vertices from projecting to a front face on the target"
+#Modifier|ShrinkwrapModifier.use_keep_above_surface -> use_keep_above_surface: boolean "NO DESCRIPTION"
+#Modifier|ShrinkwrapModifier.use_negative_direction -> use_negative_direction: boolean "Allow vertices to move in the negative direction of axis"
+#Modifier|ShrinkwrapModifier.use_positive_direction -> use_positive_direction: boolean "Allow vertices to move in the positive direction of axis"
+#Modifier|ShrinkwrapModifier.use_project_x -> use_project_x: boolean "NO DESCRIPTION"
+#Modifier|ShrinkwrapModifier.use_project_y -> use_project_y: boolean "NO DESCRIPTION"
+#Modifier|ShrinkwrapModifier.use_project_z -> use_project_z: boolean "NO DESCRIPTION"
+#+ * Modifier|ShrinkwrapModifier.vertex_group -> vertex_group: string "Vertex group name"
+#Modifier|ShrinkwrapModifier.wrap_method -> wrap_method: enum "NO DESCRIPTION"
+#Modifier|SimpleDeformModifier.deform_method -> deform_method: enum "NO DESCRIPTION"
+#+ * Modifier|SimpleDeformModifier.factor -> factor: float "NO DESCRIPTION"
+#+ * Modifier|SimpleDeformModifier.limits -> limits: float[2] "Lower/Upper limits for deform"
+#Modifier|SimpleDeformModifier.lock_x -> lock_x: boolean "NO DESCRIPTION"
+#Modifier|SimpleDeformModifier.lock_y -> lock_y: boolean "NO DESCRIPTION"
+#+ * Modifier|SimpleDeformModifier.origin -> origin: pointer "Origin of modifier space coordinates"
+#Modifier|SimpleDeformModifier.use_relative -> use_relative: boolean "Sets the origin of deform space to be relative to the object"
+#+ * Modifier|SimpleDeformModifier.vertex_group -> vertex_group: string "Vertex group name"
+#+ * Modifier|SmokeModifier.coll_settings -> coll_settings: pointer, "(read-only)"
+#+ * Modifier|SmokeModifier.domain_settings -> domain_settings: pointer, "(read-only)"
+#+ * Modifier|SmokeModifier.flow_settings -> flow_settings: pointer, "(read-only)"
+#Modifier|SmokeModifier.smoke_type -> smoke_type: enum "NO DESCRIPTION"
+#+ * Modifier|SmoothModifier.factor -> factor: float "NO DESCRIPTION"
+#Modifier|SmoothModifier.ise_x -> ise_x: boolean "NO DESCRIPTION"
+#Modifier|SmoothModifier.ise_y -> ise_y: boolean "NO DESCRIPTION"
+#Modifier|SmoothModifier.ise_z -> ise_z: boolean "NO DESCRIPTION"
+#Modifier|SmoothModifier.iterations -> iterations: int "NO DESCRIPTION"
+#+ * Modifier|SmoothModifier.vertex_group -> vertex_group: string "Vertex group name"
+#+ * Modifier|SoftBodyModifier.point_cache -> point_cache: pointer, "(read-only)"
+#+ * Modifier|SoftBodyModifier.settings -> settings: pointer, "(read-only)"
+#+ * Modifier|SolidifyModifier.edge_crease_inner -> edge_crease_inner: float "Assign a crease to inner edges"
+#+ * Modifier|SolidifyModifier.edge_crease_outer -> edge_crease_outer: float "Assign a crease to outer edges"
+#+ * Modifier|SolidifyModifier.edge_crease_rim -> edge_crease_rim: float "Assign a crease to the edges making up the rim"
+#Modifier|SolidifyModifier.invert_vertex_group -> invert_vertex_group: boolean "Invert the vertex group influence"
+#+ * Modifier|SolidifyModifier.offset -> offset: float "Offset the thickness from the center"
+#+ * Modifier|SolidifyModifier.thickness -> thickness: float "Thickness of the shell"
+#+ * Modifier|SolidifyModifier.use_even_offset -> use_even_offset: boolean "Maintain thickness by adjusting for sharp corners (slow, disable when not needed)"
+#+ * Modifier|SolidifyModifier.use_quality_normals -> use_quality_normals: boolean "Calculate normals which result in more even thickness (slow, disable when not needed)"
+#+ * Modifier|SolidifyModifier.use_rim -> use_rim: boolean "Create edge loops between the inner and outer surfaces on face edges (slow, disable when not needed)"
+#+ * Modifier|SolidifyModifier.use_rim_material -> use_rim_material: boolean "Use in the next material for rim faces"
+#+ * Modifier|SolidifyModifier.vertex_group -> vertex_group: string "Vertex group name"
+#+ * Modifier|SubsurfModifier.levels -> levels: int "Number of subdivisions to perform"
+#+ * Modifier|SubsurfModifier.render_levels -> render_levels: int "Number of subdivisions to perform when rendering"
+#Modifier|SubsurfModifier.show_only_control_edges -> show_only_control_edges: boolean "Skip drawing/rendering of interior subdivided edges"
+#+ * Modifier|SubsurfModifier.subdivision_type -> subdivision_type: enum "Selects type of subdivision algorithm"
+#Modifier|SubsurfModifier.use_subsurf_uv -> use_subsurf_uv: boolean "Use subsurf to subdivide UVs"
+#+ * Modifier|UVProjectModifier.aspect_x -> aspect_x: float "NO DESCRIPTION"
+#+ * Modifier|UVProjectModifier.aspect_y -> aspect_y: float "NO DESCRIPTION"
+#+ * Modifier|UVProjectModifier.image -> image: pointer "NO DESCRIPTION"
+#Modifier|UVProjectModifier.projector_count -> projector_count: int "Number of projectors to use"
+#+ * Modifier|UVProjectModifier.projectors -> projectors: collection, "(read-only)"
+#+ * Modifier|UVProjectModifier.scale_x -> scale_x: float "NO DESCRIPTION"
+#+ * Modifier|UVProjectModifier.scale_y -> scale_y: float "NO DESCRIPTION"
+#Modifier|UVProjectModifier.use_image_override -> use_image_override: boolean "Override faces current images with the given image"
+#+ * Modifier|UVProjectModifier.uv_layer -> uv_layer: string "UV layer name"
+#+ * Modifier|WaveModifier.damping_time -> damping_time: float "NO DESCRIPTION"
+#+ * Modifier|WaveModifier.falloff_radius -> falloff_radius: float "NO DESCRIPTION"
+#+ * Modifier|WaveModifier.height -> height: float "NO DESCRIPTION"
+#+ * Modifier|WaveModifier.lifetime -> lifetime: float "NO DESCRIPTION"
+#+ * Modifier|WaveModifier.narrowness -> narrowness: float "NO DESCRIPTION"
+#+ * Modifier|WaveModifier.speed -> speed: float "NO DESCRIPTION"
+#+ * Modifier|WaveModifier.start_position_object -> start_position_object: pointer "NO DESCRIPTION"
+#+ * Modifier|WaveModifier.start_position_x -> start_position_x: float "NO DESCRIPTION"
+#+ * Modifier|WaveModifier.start_position_y -> start_position_y: float "NO DESCRIPTION"
+#+ * Modifier|WaveModifier.texture -> texture: pointer "Texture for modulating the wave"
+#Modifier|WaveModifier.texture_coords -> texture_coords: enum "Texture coordinates used for modulating input"
+#Modifier|WaveModifier.texture_coords_object -> texture_coords_object: pointer "NO DESCRIPTION"
+#+ * Modifier|WaveModifier.time_offset -> time_offset: float "Either the starting frame (for positive speed) or ending frame (for negative speed.)"
+#Modifier|WaveModifier.use_cyclic -> use_cyclic: boolean "Cyclic wave effect"
+#Modifier|WaveModifier.use_normal -> use_normal: boolean "Displace along normals"
+#Modifier|WaveModifier.use_normal_x -> use_normal_x: boolean "Enable displacement along the X normal"
+#Modifier|WaveModifier.use_normal_y -> use_normal_y: boolean "Enable displacement along the Y normal"
+#Modifier|WaveModifier.use_normal_z -> use_normal_z: boolean "Enable displacement along the Z normal"
+#Modifier|WaveModifier.use_x -> use_x: boolean "X axis motion"
+#Modifier|WaveModifier.use_y -> use_y: boolean "Y axis motion"
+#+ * Modifier|WaveModifier.uv_layer -> uv_layer: string "UV layer name"
+#+ * Modifier|WaveModifier.vertex_group -> vertex_group: string "Vertex group name for modulating the wave"
+#+ * Modifier|WaveModifier.width -> width: float "NO DESCRIPTION"
+#+ * MotionPath.frame_end -> frame_end: int, "(read-only) End frame of the stored range"
+#+ * MotionPath.frame_start -> frame_start: int, "(read-only) Starting frame of the stored range"
+#MotionPath.is_modified -> is_modified: boolean "Path is being edited"
+#+ * MotionPath.length -> length: int, "(read-only) Number of frames cached"
+#+ * MotionPath.points -> points: collection, "(read-only) Cached positions per frame"
+#+ * MotionPath.use_bone_head -> use_bone_head: boolean, "(read-only) For PoseBone paths, use the bone head location when calculating this path"
+#+ * MotionPathVert.co -> co: float[3] "NO DESCRIPTION"
+#+ * MotionPathVert.select -> select: boolean "Path point is selected for editing"
+#+ * NlaStrip.action -> action: pointer "Action referenced by this strip"
+#NlaStrip.action_frame_end -> action_frame_end: float "NO DESCRIPTION"
+#NlaStrip.action_frame_start -> action_frame_start: float "NO DESCRIPTION"
+#+ * NlaStrip.active -> active: boolean, "(read-only) NLA Strip is active"
+#+ * NlaStrip.blend_in -> blend_in: float "Number of frames at start of strip to fade in influence"
+#+ * NlaStrip.blend_out -> blend_out: float "NO DESCRIPTION"
+#NlaStrip.blend_type -> blend_type: enum "Method used for combining strips result with accumulated result"
+#+ * NlaStrip.extrapolation -> extrapolation: enum "Action to take for gaps past the strip extents"
+#+ * NlaStrip.fcurves -> fcurves: collection, "(read-only) F-Curves for controlling the strips influence and timing"
+#+ * NlaStrip.frame_end -> frame_end: float "NO DESCRIPTION"
+#+ * NlaStrip.frame_start -> frame_start: float "NO DESCRIPTION"
+#+ * NlaStrip.influence -> influence: float "Amount the strip contributes to the current result"
+#+ * NlaStrip.modifiers -> modifiers: collection, "(read-only) Modifiers affecting all the F-Curves in the referenced Action"
+#+ * NlaStrip.mute -> mute: boolean "NLA Strip is not evaluated"
+#+ * NlaStrip.name -> name: string "NO DESCRIPTION"
+#+ * NlaStrip.repeat -> repeat: float "Number of times to repeat the action range"
+#+ * NlaStrip.scale -> scale: float "Scaling factor for action"
+#+ * NlaStrip.select -> select: boolean "NLA Strip is selected"
+#+ * NlaStrip.strip_time -> strip_time: float "Frame of referenced Action to evaluate"
+#+ * NlaStrip.strips -> strips: collection, "(read-only) NLA Strips that this strip acts as a container for (if it is of type Meta)"
+#+ * NlaStrip.type -> type: enum, "(read-only) Type of NLA Strip"
+#NlaStrip.use_animated_influence -> use_animated_influence: boolean "Influence setting is controlled by an F-Curve rather than automatically determined"
+#NlaStrip.use_animated_time -> use_animated_time: boolean "Strip time is controlled by an F-Curve rather than automatically determined"
+#NlaStrip.use_animated_time_cyclic -> use_animated_time_cyclic: boolean "Cycle the animated time within the action start & end"
+#NlaStrip.use_auto_blend -> use_auto_blend: boolean "Number of frames for Blending In/Out is automatically determined from overlapping strips"
+#NlaStrip.use_reverse -> use_reverse: boolean "NLA Strip is played back in reverse order (only when timing is automatically determined)"
+#+ * NlaTrack.active -> active: boolean, "(read-only) NLA Track is active"
+#NlaTrack.is_solo -> is_solo: boolean, "(read-only) NLA Track is evaluated itself (i.e. active Action and all other NLA Tracks in the same AnimData block are disabled)"
+#+ * NlaTrack.lock -> lock: boolean "NLA Track is locked"
+#+ * NlaTrack.mute -> mute: boolean "NLA Track is not evaluated"
+#+ * NlaTrack.name -> name: string "NO DESCRIPTION"
+#+ * NlaTrack.select -> select: boolean "NLA Track is selected"
+#+ * NlaTrack.strips -> strips: collection, "(read-only) NLA Strips on this NLA-track"
+#+ * Node.inputs -> inputs: collection, "(read-only)"
+#+ * Node.location -> location: float[2] "NO DESCRIPTION"
+#+ * Node.name -> name: string "Node name"
+#+ * Node.outputs -> outputs: collection, "(read-only)"
+#+ * Node|CompositorNode.type -> type: enum, "(read-only)"
+#+ * Node|CompositorNode|CompositorNodeAlphaOver.premul -> premul: float "Mix Factor"
+#Node|CompositorNode|CompositorNodeAlphaOver.use_premultiply -> use_premultiply: boolean "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeBilateralblur.iterations -> iterations: int "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeBilateralblur.sigma_color -> sigma_color: float "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeBilateralblur.sigma_space -> sigma_space: float "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeBlur.factor -> factor: float "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeBlur.factor_x -> factor_x: float "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeBlur.factor_y -> factor_y: float "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeBlur.filter_type -> filter_type: enum "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeBlur.size_x -> size_x: int "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeBlur.size_y -> size_y: int "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeBlur.use_bokeh -> use_bokeh: boolean "Uses circular filter (slower)"
+#Node|CompositorNode|CompositorNodeBlur.use_gamma_correction -> use_gamma_correction: boolean "Applies filter on gamma corrected values"
+#Node|CompositorNode|CompositorNodeBlur.use_relative -> use_relative: boolean "Use relative (percent) values to define blur radius"
+#+ * Node|CompositorNode|CompositorNodeChannelMatte.color_space -> color_space: enum "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeChannelMatte.limit_channel -> limit_channel: enum "Limit by this channels value"
+#Node|CompositorNode|CompositorNodeChannelMatte.limit_max -> limit_max: float "Values higher than this setting are 100% opaque"
+#Node|CompositorNode|CompositorNodeChannelMatte.limit_method -> limit_method: enum "Algorithm to use to limit channel"
+#Node|CompositorNode|CompositorNodeChannelMatte.limit_min -> limit_min: float "Values lower than this setting are 100% keyed"
+#Node|CompositorNode|CompositorNodeChannelMatte.matte_channel -> matte_channel: enum "Channel used to determine matte"
+#+ * Node|CompositorNode|CompositorNodeChromaMatte.gain -> gain: float "Alpha gain"
+#+ * Node|CompositorNode|CompositorNodeChromaMatte.lift -> lift: float "Alpha lift"
+#+ * Node|CompositorNode|CompositorNodeChromaMatte.shadow_adjust -> shadow_adjust: float "Adjusts the brightness of any shadows captured"
+#Node|CompositorNode|CompositorNodeChromaMatte.threshold -> threshold: float "Tolerance below which colors will be considered as exact matches"
+#Node|CompositorNode|CompositorNodeChromaMatte.tolerance -> tolerance: float "Tolerance for a color to be considered a keying color"
+#Node|CompositorNode|CompositorNodeColorBalance.correction_method -> correction_method: enum "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeColorBalance.gain -> gain: float[3] "Correction for Highlights"
+#+ * Node|CompositorNode|CompositorNodeColorBalance.gamma -> gamma: float[3] "Correction for Midtones"
+#+ * Node|CompositorNode|CompositorNodeColorBalance.lift -> lift: float[3] "Correction for Shadows"
+#+ * Node|CompositorNode|CompositorNodeColorBalance.offset -> offset: float[3] "Correction for Shadows"
+#+ * Node|CompositorNode|CompositorNodeColorBalance.power -> power: float[3] "Correction for Midtones"
+#+ * Node|CompositorNode|CompositorNodeColorBalance.slope -> slope: float[3] "Correction for Highlights"
+#Node|CompositorNode|CompositorNodeColorMatte.color_hue -> color_hue: float "Hue tolerance for colors to be considered a keying color"
+#Node|CompositorNode|CompositorNodeColorMatte.color_saturation -> color_saturation: float "Saturation Tolerance for the color"
+#Node|CompositorNode|CompositorNodeColorMatte.color_value -> color_value: float "Value Tolerance for the color"
+#+ * Node|CompositorNode|CompositorNodeColorSpill.channel -> channel: enum "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeColorSpill.limit_channel -> limit_channel: enum "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeColorSpill.limit_method -> limit_method: enum "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeColorSpill.ratio -> ratio: float "Scale limit by value"
+#+ * Node|CompositorNode|CompositorNodeColorSpill.unspill_blue -> unspill_blue: float "Blue spillmap scale"
+#+ * Node|CompositorNode|CompositorNodeColorSpill.unspill_green -> unspill_green: float "Green spillmap scale"
+#+ * Node|CompositorNode|CompositorNodeColorSpill.unspill_red -> unspill_red: float "Red spillmap scale"
+#Node|CompositorNode|CompositorNodeColorSpill.use_unspill -> use_unspill: boolean "Compensate all channels (diffenrently) by hand"
+#Node|CompositorNode|CompositorNodeCrop.max_x -> max_x: int "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeCrop.max_y -> max_y: int "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeCrop.min_x -> min_x: int "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeCrop.min_y -> min_y: int "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeCrop.use_crop_size -> use_crop_size: boolean "Whether to crop the size of the input image"
+#+ * Node|CompositorNode|CompositorNodeCurveRGB.mapping -> mapping: pointer, "(read-only)"
+#+ * Node|CompositorNode|CompositorNodeCurveVec.mapping -> mapping: pointer, "(read-only)"
+#+ * Node|CompositorNode|CompositorNodeDBlur.angle -> angle: float "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeDBlur.center_x -> center_x: float "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeDBlur.center_y -> center_y: float "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeDBlur.distance -> distance: float "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeDBlur.iterations -> iterations: int "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeDBlur.spin -> spin: float "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeDBlur.use_wrap -> use_wrap: boolean "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeDBlur.zoom -> zoom: float "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeDefocus.angle -> angle: int "Bokeh shape rotation offset in degrees"
+#Node|CompositorNode|CompositorNodeDefocus.blur_max -> blur_max: float "blur limit, maximum CoC radius, 0=no limit"
+#+ * Node|CompositorNode|CompositorNodeDefocus.bokeh -> bokeh: enum "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeDefocus.f_stop -> f_stop: float "Amount of focal blur, 128=infinity=perfect focus, half the value doubles the blur radius"
+#+ * Node|CompositorNode|CompositorNodeDefocus.samples -> samples: int "Number of samples (16=grainy, higher=less noise)"
+#+ * Node|CompositorNode|CompositorNodeDefocus.threshold -> threshold: float "CoC radius threshold, prevents background bleed on in-focus midground, 0=off"
+#Node|CompositorNode|CompositorNodeDefocus.use_gamma_correction -> use_gamma_correction: boolean "Enable gamma correction before and after main process"
+#Node|CompositorNode|CompositorNodeDefocus.use_preview -> use_preview: boolean "Enable sampling mode, useful for preview when using low samplecounts"
+#+ * Node|CompositorNode|CompositorNodeDefocus.use_zbuffer -> use_zbuffer: boolean "Disable when using an image as input instead of actual zbuffer (auto enabled if node not image based, eg. time node)"
+#+ * Node|CompositorNode|CompositorNodeDefocus.z_scale -> z_scale: float "Scales the Z input when not using a zbuffer, controls maximum blur designated by the color white or input value 1"
+#+ * Node|CompositorNode|CompositorNodeDiffMatte.falloff -> falloff: float "Color distances below this additional threshold are partially keyed"
+#+ * Node|CompositorNode|CompositorNodeDiffMatte.tolerance -> tolerance: float "Color distances below this threshold are keyed"
+#+ * Node|CompositorNode|CompositorNodeDilateErode.distance -> distance: int "Distance to grow/shrink (number of iterations)"
+#+ * Node|CompositorNode|CompositorNodeDistanceMatte.falloff -> falloff: float "Color distances below this additional threshold are partially keyed"
+#+ * Node|CompositorNode|CompositorNodeDistanceMatte.tolerance -> tolerance: float "Color distances below this threshold are keyed"
+#+ * Node|CompositorNode|CompositorNodeFilter.filter_type -> filter_type: enum "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeFlip.axis -> axis: enum "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeGlare.angle_offset -> angle_offset: float "Streak angle offset in degrees"
+#+ * Node|CompositorNode|CompositorNodeGlare.color_modulation -> color_modulation: float "Amount of Color Modulation, modulates colors of streaks and ghosts for a spectral dispersion effect"
+#+ * Node|CompositorNode|CompositorNodeGlare.fade -> fade: float "Streak fade-out factor"
+#+ * Node|CompositorNode|CompositorNodeGlare.glare_type -> glare_type: enum "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeGlare.iterations -> iterations: int "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeGlare.mix -> mix: float "-1 is original image only, 0 is exact 50/50 mix, 1 is processed image only"
+#+ * Node|CompositorNode|CompositorNodeGlare.quality -> quality: enum "If not set to high quality, the effect will be applied to a low-res copy of the source image"
+#+ * Node|CompositorNode|CompositorNodeGlare.size -> size: int "Glow/glare size (not actual size; relative to initial size of bright area of pixels)"
+#+ * Node|CompositorNode|CompositorNodeGlare.streaks -> streaks: int "Total number of streaks"
+#+ * Node|CompositorNode|CompositorNodeGlare.threshold -> threshold: float "The glare filter will only be applied to pixels brighter than this value"
+#Node|CompositorNode|CompositorNodeGlare.use_rotate_45 -> use_rotate_45: boolean "Simple star filter: add 45 degree rotation offset"
+#+ * Node|CompositorNode|CompositorNodeHueCorrect.mapping -> mapping: pointer, "(read-only)"
+#Node|CompositorNode|CompositorNodeHueSat.color_hue -> color_hue: float "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeHueSat.color_saturation -> color_saturation: float "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeHueSat.color_value -> color_value: float "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeIDMask.index -> index: int "Pass index number to convert to alpha"
+#Node|CompositorNode|CompositorNodeImage.frame_duration -> frame_duration: int "Number of images used in animation"
+#Node|CompositorNode|CompositorNodeImage.frame_offset -> frame_offset: int "Offsets the number of the frame to use in the animation"
+#Node|CompositorNode|CompositorNodeImage.frame_start -> frame_start: int "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeImage.image -> image: pointer "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeImage.layer -> layer: enum "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeImage.use_auto_refresh -> use_auto_refresh: boolean "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeImage.use_cyclic -> use_cyclic: boolean "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeInvert.invert_alpha -> invert_alpha: boolean "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeInvert.invert_rgb -> invert_rgb: boolean "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeLensdist.use_fit -> use_fit: boolean "For positive distortion factor only: scale image such that black areas are not visible"
+#Node|CompositorNode|CompositorNodeLensdist.use_jitter -> use_jitter: boolean "Enable/disable jittering; faster, but also noisier"
+#Node|CompositorNode|CompositorNodeLensdist.use_projector -> use_projector: boolean "Enable/disable projector mode. Effect is applied in horizontal direction only"
+#+ * Node|CompositorNode|CompositorNodeLevels.channel -> channel: enum "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeLumaMatte.limit_max -> limit_max: float "Values higher than this setting are 100% opaque"
+#Node|CompositorNode|CompositorNodeLumaMatte.limit_min -> limit_min: float "Values lower than this setting are 100% keyed"
+#+ * Node|CompositorNode|CompositorNodeMapUV.alpha -> alpha: int "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeMapValue.max -> max: float[1] "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeMapValue.min -> min: float[1] "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeMapValue.offset -> offset: float[1] "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeMapValue.size -> size: float[1] "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeMapValue.use_max -> use_max: boolean "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeMapValue.use_min -> use_min: boolean "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeMath.operation -> operation: enum "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeMixRGB.blend_type -> blend_type: enum "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeMixRGB.use_alpha -> use_alpha: boolean "Include alpha of second input in this operation"
+#+ * Node|CompositorNode|CompositorNodeOutputFile.exr_codec -> exr_codec: enum "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeOutputFile.filepath -> filepath: string "Output path for the image, same functionality as render output."
+#+ * Node|CompositorNode|CompositorNodeOutputFile.frame_end -> frame_end: int "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeOutputFile.frame_start -> frame_start: int "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeOutputFile.image_type -> image_type: enum "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeOutputFile.quality -> quality: int "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeOutputFile.use_exr_half -> use_exr_half: boolean "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodePremulKey.mapping -> mapping: enum "Conversion between premultiplied alpha and key alpha"
+#+ * Node|CompositorNode|CompositorNodeRLayers.layer -> layer: enum "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeRLayers.scene -> scene: pointer "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeRotate.filter_type -> filter_type: enum "Method to use to filter rotation"
+#+ * Node|CompositorNode|CompositorNodeScale.space -> space: enum "Coordinate space to scale relative to"
+#+ * Node|CompositorNode|CompositorNodeSplitViewer.axis -> axis: enum "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeSplitViewer.factor -> factor: int "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeTexture.node_output -> node_output: int "For node-based textures, which output node to use"
+#+ * Node|CompositorNode|CompositorNodeTexture.texture -> texture: pointer "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeTime.curve -> curve: pointer, "(read-only)"
+#Node|CompositorNode|CompositorNodeTime.frame_end -> frame_end: int "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeTime.frame_start -> frame_start: int "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeTonemap.adaptation -> adaptation: float "If 0, global; if 1, based on pixel intensity"
+#+ * Node|CompositorNode|CompositorNodeTonemap.contrast -> contrast: float "Set to 0 to use estimate from input image"
+#+ * Node|CompositorNode|CompositorNodeTonemap.correction -> correction: float "If 0, same for all channels; if 1, each independent"
+#+ * Node|CompositorNode|CompositorNodeTonemap.gamma -> gamma: float "If not used, set to 1"
+#+ * Node|CompositorNode|CompositorNodeTonemap.intensity -> intensity: float "If less than zero, darkens image; otherwise, makes it brighter"
+#+ * Node|CompositorNode|CompositorNodeTonemap.key -> key: float "The value the average luminance is mapped to"
+#+ * Node|CompositorNode|CompositorNodeTonemap.offset -> offset: float "Normally always 1, but can be used as an extra control to alter the brightness curve"
+#+ * Node|CompositorNode|CompositorNodeTonemap.tonemap_type -> tonemap_type: enum "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeValToRGB.color_ramp -> color_ramp: pointer, "(read-only)"
+#+ * Node|CompositorNode|CompositorNodeVecBlur.factor -> factor: float "Scaling factor for motion vectors; actually shutter speed in frames"
+#+ * Node|CompositorNode|CompositorNodeVecBlur.samples -> samples: int "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeVecBlur.speed_max -> speed_max: int "Maximum speed, or zero for none"
+#Node|CompositorNode|CompositorNodeVecBlur.speed_min -> speed_min: int "Minimum speed for a pixel to be blurred; used to separate background from foreground"
+#Node|CompositorNode|CompositorNodeVecBlur.use_curved -> use_curved: boolean "Interpolate between frames in a bezier curve, rather than linearly"
+#+ * Node|NodeGroup.nodetree -> nodetree: pointer "NO DESCRIPTION"
+#+ * Node|ShaderNode.type -> type: enum, "(read-only)"
+#+ * Node|ShaderNode|ShaderNodeExtendedMaterial.invert_normal -> invert_normal: boolean "Material Node uses inverted normal"
+#+ * Node|ShaderNode|ShaderNodeExtendedMaterial.material -> material: pointer "NO DESCRIPTION"
+#Node|ShaderNode|ShaderNodeExtendedMaterial.use_diffuse -> use_diffuse: boolean "Material Node outputs Diffuse"
+#Node|ShaderNode|ShaderNodeExtendedMaterial.use_specular -> use_specular: boolean "Material Node outputs Specular"
+#+ * Node|ShaderNode|ShaderNodeGeometry.color_layer -> color_layer: string "NO DESCRIPTION"
+#+ * Node|ShaderNode|ShaderNodeGeometry.uv_layer -> uv_layer: string "NO DESCRIPTION"
+#+ * Node|ShaderNode|ShaderNodeMapping.location -> location: float[3] "Location offset for the input coordinate"
+#Node|ShaderNode|ShaderNodeMapping.max -> max: float[3] "Maximum value to clamp coordinate to"
+#Node|ShaderNode|ShaderNodeMapping.min -> min: float[3] "Minimum value to clamp coordinate to"
+#+ * Node|ShaderNode|ShaderNodeMapping.rotation -> rotation: float[3] "Rotation offset for the input coordinate"
+#+ * Node|ShaderNode|ShaderNodeMapping.scale -> scale: float[3] "Scale adjustment for the input coordinate"
+#Node|ShaderNode|ShaderNodeMapping.use_max -> use_max: boolean "Clamp the output coordinate to a maximum value"
+#Node|ShaderNode|ShaderNodeMapping.use_min -> use_min: boolean "Clamp the output coordinate to a minimum value"
+#+ * Node|ShaderNode|ShaderNodeMaterial.invert_normal -> invert_normal: boolean "Material Node uses inverted normal"
+#+ * Node|ShaderNode|ShaderNodeMaterial.material -> material: pointer "NO DESCRIPTION"
+#Node|ShaderNode|ShaderNodeMaterial.use_diffuse -> use_diffuse: boolean "Material Node outputs Diffuse"
+#Node|ShaderNode|ShaderNodeMaterial.use_specular -> use_specular: boolean "Material Node outputs Specular"
+#+ * Node|ShaderNode|ShaderNodeMath.operation -> operation: enum "NO DESCRIPTION"
+#+ * Node|ShaderNode|ShaderNodeMixRGB.blend_type -> blend_type: enum "NO DESCRIPTION"
+#Node|ShaderNode|ShaderNodeMixRGB.use_alpha -> use_alpha: boolean "Include alpha of second input in this operation"
+#+ * Node|ShaderNode|ShaderNodeRGBCurve.mapping -> mapping: pointer, "(read-only)"
+#+ * Node|ShaderNode|ShaderNodeTexture.node_output -> node_output: int "For node-based textures, which output node to use"
+#+ * Node|ShaderNode|ShaderNodeTexture.texture -> texture: pointer "NO DESCRIPTION"
+#+ * Node|ShaderNode|ShaderNodeValToRGB.color_ramp -> color_ramp: pointer, "(read-only)"
+#+ * Node|ShaderNode|ShaderNodeVectorCurve.mapping -> mapping: pointer, "(read-only)"
+#+ * Node|ShaderNode|ShaderNodeVectorMath.operation -> operation: enum "NO DESCRIPTION"
+#+ * Node|TextureNode.type -> type: enum, "(read-only)"
+#+ * Node|TextureNode|TextureNodeBricks.offset -> offset: float "NO DESCRIPTION"
+#+ * Node|TextureNode|TextureNodeBricks.offset_frequency -> offset_frequency: int "Offset every N rows"
+#+ * Node|TextureNode|TextureNodeBricks.squash -> squash: float "NO DESCRIPTION"
+#+ * Node|TextureNode|TextureNodeBricks.squash_frequency -> squash_frequency: int "Squash every N rows"
+#+ * Node|TextureNode|TextureNodeCurveRGB.mapping -> mapping: pointer, "(read-only)"
+#+ * Node|TextureNode|TextureNodeCurveTime.curve -> curve: pointer, "(read-only)"
+#Node|TextureNode|TextureNodeCurveTime.frame_end -> frame_end: int "NO DESCRIPTION"
+#Node|TextureNode|TextureNodeCurveTime.frame_start -> frame_start: int "NO DESCRIPTION"
+#+ * Node|TextureNode|TextureNodeImage.image -> image: pointer "NO DESCRIPTION"
+#+ * Node|TextureNode|TextureNodeMath.operation -> operation: enum "NO DESCRIPTION"
+#+ * Node|TextureNode|TextureNodeMixRGB.blend_type -> blend_type: enum "NO DESCRIPTION"
+#Node|TextureNode|TextureNodeMixRGB.use_alpha -> use_alpha: boolean "Include alpha of second input in this operation"
+#Node|TextureNode|TextureNodeOutput.filepath -> filepath: string "NO DESCRIPTION"
+#+ * Node|TextureNode|TextureNodeTexture.node_output -> node_output: int "For node-based textures, which output node to use"
+#+ * Node|TextureNode|TextureNodeTexture.texture -> texture: pointer "NO DESCRIPTION"
+#+ * Node|TextureNode|TextureNodeValToRGB.color_ramp -> color_ramp: pointer, "(read-only)"
+#+ * ObjectBase.layers -> layers: boolean[20] "Layers the object base is on"
+#+ * ObjectBase.object -> object: pointer, "(read-only) Object this base links to"
+#+ * ObjectBase.select -> select: boolean "Object base selection state"
+#+ * ObjectConstraints.active -> active: pointer "Active Object constraint"
+#+ * Operator.bl_description -> bl_description: string "NO DESCRIPTION"
+#+ * Operator.bl_idname -> bl_idname: string "NO DESCRIPTION"
+#+ * Operator.bl_label -> bl_label: string "NO DESCRIPTION"
+#+ * Operator.bl_options -> bl_options: enum "Options for this operator type"
+#+ * Operator.has_reports -> has_reports: boolean, "(read-only) Operator has a set of reports (warnings and errors) from last execution"
+#+ * Operator.layout -> layout: pointer, "(read-only)"
+#+ * Operator.name -> name: string, "(read-only)"
+#+ * Operator.properties -> properties: pointer, "(read-only)"
+#+ * OperatorTypeMacro.properties -> properties: pointer, "(read-only)"
+#+ * PackedFile.size -> size: int, "(read-only) Size of packed file in bytes"
+#+ * Paint.brush -> brush: pointer "Active Brush"
+#+ * Paint.show_brush -> show_brush: boolean "NO DESCRIPTION"
+#+ * Paint.show_brush_on_surface -> show_brush_on_surface: boolean "NO DESCRIPTION"
+#Paint.show_low_resolution -> show_low_resolution: boolean "For multires, show low resolution while navigating the view"
+#+ * Paint|ImagePaint.invert_stencil -> invert_stencil: boolean "Invert the stencil layer"
+#+ * Paint|ImagePaint.normal_angle -> normal_angle: int "Paint most on faces pointing towards the view according to this angle"
+#+ * Paint|ImagePaint.screen_grab_size -> screen_grab_size: int[2] "Size to capture the image for re-projecting"
+#+ * Paint|ImagePaint.seam_bleed -> seam_bleed: int "Extend paint beyond the faces UVs to reduce seams (in pixels, slower)"
+#+ * Paint|ImagePaint.show_brush -> show_brush: boolean "Enables brush shape while not drawing"
+#+ * Paint|ImagePaint.show_brush_draw -> show_brush_draw: boolean "Enables brush shape while drawing"
+#Paint|ImagePaint.use_backface_culling -> use_backface_culling: boolean "Ignore faces pointing away from the view (faster)"
+#+ * Paint|ImagePaint.use_clone_layer -> use_clone_layer: boolean "Use another UV layer as clone source, otherwise use 3D the cursor as the source"
+#+ * Paint|ImagePaint.use_normal_falloff -> use_normal_falloff: boolean "Paint most on faces pointing towards the view"
+#+ * Paint|ImagePaint.use_occlude -> use_occlude: boolean "Only paint onto the faces directly under the brush (slower)"
+#+ * Paint|ImagePaint.use_projection -> use_projection: boolean "Use projection painting for improved consistency in the brush strokes"
+#+ * Paint|ImagePaint.use_stencil_layer -> use_stencil_layer: boolean "Set the mask layer from the UV layer buttons"
+#+ * Paint|Sculpt.lock_x -> lock_x: boolean "Disallow changes to the X axis of vertices"
+#+ * Paint|Sculpt.lock_y -> lock_y: boolean "Disallow changes to the Y axis of vertices"
+#+ * Paint|Sculpt.lock_z -> lock_z: boolean "Disallow changes to the Z axis of vertices"
+#Paint|Sculpt.radial_symmetry -> radial_symmetry: int[3] "Number of times to copy strokes across the surface"
+#+ * Paint|Sculpt.use_symmetry_feather -> use_symmetry_feather: boolean "Reduce the strength of the brush where it overlaps symmetrical daubs"
+#Paint|Sculpt.use_symmetry_x -> use_symmetry_x: boolean "Mirror brush across the X axis"
+#Paint|Sculpt.use_symmetry_y -> use_symmetry_y: boolean "Mirror brush across the Y axis"
+#Paint|Sculpt.use_symmetry_z -> use_symmetry_z: boolean "Mirror brush across the Z axis"
+#Paint|Sculpt.use_threaded -> use_threaded: boolean "Take advantage of multiple CPU cores to improve sculpting performance"
+#Paint|VertexPaint.use_all_faces -> use_all_faces: boolean "Paint on all faces inside brush"
+#Paint|VertexPaint.use_normal -> use_normal: boolean "Applies the vertex normal before painting"
+#Paint|VertexPaint.use_spray -> use_spray: boolean "Keep applying paint effect while holding mouse"
+#+ * Panel.bl_context -> bl_context: string "The context in which the panel belongs to. (TODO: explain the possible combinations bl_context/bl_region_type/bl_space_type)"
+#+ * Panel.bl_idname -> bl_idname: string "If this is set, the panel gets a custom ID, otherwise it takes the name of the class used to define the panel. For example, if the class name is OBJECT_PT_hello, and bl_idname is not set by the script, then bl_idname = OBJECT_PT_hello"
+#+ * Panel.bl_label -> bl_label: string "The panel label, shows up in the panel header at the right of the triangle used to collapse the panel."
+#+ * Panel.bl_region_type -> bl_region_type: enum "The region where the panel is going to be used in."
+#+ * Panel.bl_show_header -> bl_show_header: boolean "If set to True, the panel shows a header, which contains a clickable arrow to collapse the panel and the label (see bl_label)."
+#+ * Panel.bl_space_type -> bl_space_type: enum "The space where the panel is going to be used in."
+ + * Panel.bl_default_closed -> bl_use_closed: boolean "Defines if the panel has to be open or collapsed at the time of its creation. Note that once the panel has been created with bl_default_closed = True, at reload (F8) it stays open."
+#+ * Panel.layout -> layout: pointer, "(read-only) Defines the structure of the panel in the UI."
+#TODO SHOULD THIS BE HERE * Panel.text -> text: string "XXX todo"
+#+ * Particle.alive_state -> alive_state: enum "NO DESCRIPTION"
+#+ * Particle.angular_velocity -> angular_velocity: float[3] "NO DESCRIPTION"
+#Particle.birth_time -> birth_time: float "NO DESCRIPTION"
+#+ * Particle.die_time -> die_time: float "NO DESCRIPTION"
+#Particle.is_exist -> is_exist: boolean, "(read-only)"
+#Particle.is_hair -> is_hair: collection, "(read-only)"
+#+ * Particle.is_visible -> is_visible: boolean, "(read-only)"
+#+ * Particle.keys -> keys: collection, "(read-only)"
+#+ * Particle.lifetime -> lifetime: float "NO DESCRIPTION"
+#+ * Particle.location -> location: float[3] "NO DESCRIPTION"
+#+ * Particle.prev_angular_velocity -> prev_angular_velocity: float[3] "NO DESCRIPTION"
+#+ * Particle.prev_location -> prev_location: float[3] "NO DESCRIPTION"
+#+ * Particle.prev_rotation -> prev_rotation: float[4] "NO DESCRIPTION"
+#+ * Particle.prev_velocity -> prev_velocity: float[3] "NO DESCRIPTION"
+#+ * Particle.rotation -> rotation: float[4] "NO DESCRIPTION"
+#+ * Particle.size -> size: float "NO DESCRIPTION"
+#+ * Particle.velocity -> velocity: float[3] "NO DESCRIPTION"
+#+ * ParticleBrush.count -> count: int "Particle count"
+#+ * ParticleBrush.curve -> curve: pointer, "(read-only)"
+#+ * ParticleBrush.length_mode -> length_mode: enum "NO DESCRIPTION"
+#+ * ParticleBrush.puff_mode -> puff_mode: enum "NO DESCRIPTION"
+#+ * ParticleBrush.size -> size: int "Brush size"
+#+ * ParticleBrush.steps -> steps: int "Brush steps"
+#+ * ParticleBrush.strength -> strength: float "Brush strength"
+#+ * ParticleBrush.use_puff_volume -> use_puff_volume: boolean "Apply puff to unselected end-points, (helps maintain hair volume when puffing root)"
+#+ * ParticleDupliWeight.count -> count: int "The number of times this object is repeated with respect to other objects"
+#+ * ParticleDupliWeight.name -> name: string, "(read-only) Particle dupliobject name"
+#+ * ParticleEdit.brush -> brush: pointer, "(read-only)"
+#ParticleEdit.default_key_count -> default_key_count: int "How many keys to make new particles with"
+#+ * ParticleEdit.draw_step -> draw_step: int "How many steps to draw the path with"
+#+ * ParticleEdit.emitter_distance -> emitter_distance: float "Distance to keep particles away from the emitter"
+#+ * ParticleEdit.fade_frames -> fade_frames: int "How many frames to fade"
+#ParticleEdit.is_editable -> is_editable: boolean, "(read-only) A valid edit mode exists"
+#ParticleEdit.is_hair -> is_hair: boolean, "(read-only) Editing hair"
+#+ * ParticleEdit.object -> object: pointer, "(read-only) The edited object"
+#ParticleEdit.select_mode -> select_mode: enum "Particle select and display mode"
+#ParticleEdit.show_particles -> show_particles: boolean "Draw actual particles"
+#+ * ParticleEdit.tool -> tool: enum "NO DESCRIPTION"
+#+ * ParticleEdit.type -> type: enum "NO DESCRIPTION"
+#ParticleEdit.use_auto_velocity -> use_auto_velocity: boolean "Calculate point velocities automatically"
+#ParticleEdit.use_default_interpolate -> use_default_interpolate: boolean "Interpolate new particles from the existing ones"
+#ParticleEdit.use_emitter_deflect -> use_emitter_deflect: boolean "Keep paths from intersecting the emitter"
+#ParticleEdit.use_fade_time -> use_fade_time: boolean "Fade paths and keys further away from current frame"
+#ParticleEdit.use_preserve_length -> use_preserve_length: boolean "Keep path lengths constant"
+#ParticleEdit.use_preserve_root -> use_preserve_root: boolean "Keep root keys unmodified"
+#ParticleHairKey.co -> co: float[3] "Location of the hair key in object space"
+#ParticleHairKey.co_hair_space -> co_hair_space: float[3] "Location of the hair key in its internal coordinate system, relative to the emitting face"
+#+ * ParticleHairKey.time -> time: float "Relative time of key over hair length"
+#+ * ParticleHairKey.weight -> weight: float "Weight for cloth simulation"
+#+ * ParticleKey.angular_velocity -> angular_velocity: float[3] "Key angular velocity"
+#+ * ParticleKey.location -> location: float[3] "Key location"
+#+ * ParticleKey.rotation -> rotation: float[4] "Key rotation quaterion"
+#+ * ParticleKey.time -> time: float "Time of key over the simulation"
+#+ * ParticleKey.velocity -> velocity: float[3] "Key velocity"
+#+ * ParticleSystem.active_particle_target -> active_particle_target: pointer, "(read-only)"
+#+ * ParticleSystem.active_particle_target_index -> active_particle_target_index: int "NO DESCRIPTION"
+#+ * ParticleSystem.billboard_normal_uv -> billboard_normal_uv: string "UV Layer to control billboard normals"
+#+ * ParticleSystem.billboard_split_uv -> billboard_split_uv: string "UV Layer to control billboard splitting"
+#+ * ParticleSystem.billboard_time_index_uv -> billboard_time_index_uv: string "UV Layer to control billboard time index (X-Y)"
+#+ * ParticleSystem.child_particles -> child_particles: collection, "(read-only) Child particles generated by the particle system"
+#+ * ParticleSystem.cloth -> cloth: pointer, "(read-only) Cloth dynamics for hair"
+#ParticleSystem.has_multiple_caches -> has_multiple_caches: boolean, "(read-only) Particle system has multiple point caches"
+#ParticleSystem.invert_vertex_group_clump -> invert_vertex_group_clump: boolean "Negate the effect of the clump vertex group"
+#ParticleSystem.invert_vertex_group_density -> invert_vertex_group_density: boolean "Negate the effect of the density vertex group"
+#ParticleSystem.invert_vertex_group_field -> invert_vertex_group_field: boolean "Negate the effect of the field vertex group"
+#ParticleSystem.invert_vertex_group_kink -> invert_vertex_group_kink: boolean "Negate the effect of the kink vertex group"
+#ParticleSystem.invert_vertex_group_length -> invert_vertex_group_length: boolean "Negate the effect of the length vertex group"
+#ParticleSystem.invert_vertex_group_rotation -> invert_vertex_group_rotation: boolean "Negate the effect of the rotation vertex group"
+#ParticleSystem.invert_vertex_group_roughness_1 -> invert_vertex_group_roughness_1: boolean "Negate the effect of the roughness 1 vertex group"
+#ParticleSystem.invert_vertex_group_roughness_2 -> invert_vertex_group_roughness_2: boolean "Negate the effect of the roughness 2 vertex group"
+#ParticleSystem.invert_vertex_group_roughness_end -> invert_vertex_group_roughness_end: boolean "Negate the effect of the roughness end vertex group"
+#ParticleSystem.invert_vertex_group_size -> invert_vertex_group_size: boolean "Negate the effect of the size vertex group"
+#ParticleSystem.invert_vertex_group_tangent -> invert_vertex_group_tangent: boolean "Negate the effect of the tangent vertex group"
+#ParticleSystem.invert_vertex_group_velocity -> invert_vertex_group_velocity: boolean "Negate the effect of the velocity vertex group"
+#ParticleSystem.is_editable -> is_editable: boolean, "(read-only) Particle system can be edited in particle mode"
+#ParticleSystem.is_edited -> is_edited: boolean, "(read-only) Particle system has been edited in particle mode"
+#ParticleSystem.is_global_hair -> is_global_hair: boolean, "(read-only) Hair keys are in global coordinate space"
+#+ * ParticleSystem.name -> name: string "Particle system name"
+#+ * ParticleSystem.parent -> parent: pointer "Use this objects coordinate system instead of global coordinate system"
+#+ * ParticleSystem.particles -> particles: collection, "(read-only) Particles generated by the particle system"
+#+ * ParticleSystem.point_cache -> point_cache: pointer, "(read-only)"
+#+ * ParticleSystem.reactor_target_object -> reactor_target_object: pointer "For reactor systems, the object that has the target particle system (empty if same object)"
+#+ * ParticleSystem.reactor_target_particle_system -> reactor_target_particle_system: int "For reactor systems, index of particle system on the target object"
+#+ * ParticleSystem.seed -> seed: int "Offset in the random number table, to get a different randomized result"
+#+ * ParticleSystem.settings -> settings: pointer "Particle system settings"
+#+ * ParticleSystem.targets -> targets: collection, "(read-only) Target particle systems"
+#ParticleSystem.use_hair_dynamics -> use_hair_dynamics: boolean "Enable hair dynamics using cloth simulation"
+#ParticleSystem.use_keyed_timing -> use_keyed_timing: boolean "Use key times"
+#+ * ParticleSystem.vertex_group_clump -> vertex_group_clump: string "Vertex group to control clump"
+#+ * ParticleSystem.vertex_group_density -> vertex_group_density: string "Vertex group to control density"
+#+ * ParticleSystem.vertex_group_field -> vertex_group_field: string "Vertex group to control field"
+#+ * ParticleSystem.vertex_group_kink -> vertex_group_kink: string "Vertex group to control kink"
+#+ * ParticleSystem.vertex_group_length -> vertex_group_length: string "Vertex group to control length"
+#+ * ParticleSystem.vertex_group_rotation -> vertex_group_rotation: string "Vertex group to control rotation"
+#ParticleSystem.vertex_group_roughness_1 -> vertex_group_roughness_1: string "Vertex group to control roughness 1"
+#ParticleSystem.vertex_group_roughness_2 -> vertex_group_roughness_2: string "Vertex group to control roughness 2"
+#+ * ParticleSystem.vertex_group_roughness_end -> vertex_group_roughness_end: string "Vertex group to control roughness end"
+#+ * ParticleSystem.vertex_group_size -> vertex_group_size: string "Vertex group to control size"
+#+ * ParticleSystem.vertex_group_tangent -> vertex_group_tangent: string "Vertex group to control tangent"
+#+ * ParticleSystem.vertex_group_velocity -> vertex_group_velocity: string "Vertex group to control velocity"
+#ParticleTarget.alliance -> alliance: enum "NO DESCRIPTION"
+#+ * ParticleTarget.duration -> duration: float "NO DESCRIPTION"
+#ParticleTarget.is_valid -> is_valid: boolean "Keyed particles target is valid"
+#+ * ParticleTarget.name -> name: string, "(read-only) Particle target name"
+#+ * ParticleTarget.object -> object: pointer "The object that has the target particle system (empty if same object)"
+#+ * ParticleTarget.system -> system: int "The index of particle system on the target object"
+#+ * ParticleTarget.time -> time: float "NO DESCRIPTION"
+#+ * PointCache.active_point_cache_index -> active_point_cache_index: int "NO DESCRIPTION"
+#+ * PointCache.filepath -> filepath: string "Cache file path"
+#+ * PointCache.frame_end -> frame_end: int "Frame on which the simulation stops"
+#+ * PointCache.frame_start -> frame_start: int "Frame on which the simulation starts"
+#PointCache.frame_step -> frame_step: int "Number of frames between cached frames"
+#+ * PointCache.frames_skipped -> frames_skipped: boolean, "(read-only)"
+#+ * PointCache.index -> index: int "Index number of cache files"
+#+ * PointCache.info -> info: string, "(read-only) Info on current cache status"
+#PointCache.is_baked -> is_baked: boolean, "(read-only)"
+#PointCache.is_baking -> is_baking: boolean, "(read-only)"
+#PointCache.is_outdated -> is_outdated: boolean, "(read-only)"
+#+ * PointCache.name -> name: string "Cache name"
+#PointCache.point_caches -> point_caches: collection, "(read-only) Point cache list"
+#PointCache.use_disk_cache -> use_disk_cache: boolean "Save cache files to disk (.blend file must be saved first)"
+#PointCache.use_external -> use_external: boolean "Read cache from an external location"
+#+ * PointCache.use_library_path -> use_library_path: boolean "Use this files path when library linked into another file."
+#PointCache.use_quick_cache -> use_quick_cache: boolean "Update simulation with cache steps"
+#+ * PointDensity.color_ramp -> color_ramp: pointer, "(read-only)"
+#+ * PointDensity.color_source -> color_source: enum "Data to derive color results from"
+#+ * PointDensity.falloff -> falloff: enum "Method of attenuating density by distance from the point"
+#PointDensity.falloff_soft -> falloff_soft: float "Softness of the soft falloff option"
+#+ * PointDensity.noise_basis -> noise_basis: enum "Noise formula used for turbulence"
+#+ * PointDensity.object -> object: pointer "Object to take point data from"
+#PointDensity.particle_cache_space -> particle_cache_space: enum "Co-ordinate system to cache particles in"
+#+ * PointDensity.particle_system -> particle_system: pointer "Particle System to render as points"
+#+ * PointDensity.point_source -> point_source: enum "Point data to use as renderable point density"
+#+ * PointDensity.radius -> radius: float "Radius from the shaded sample to look for points within"
+#+ * PointDensity.speed_scale -> speed_scale: float "Multiplier to bring particle speed within an acceptable range"
+#+ * PointDensity.turbulence_depth -> turbulence_depth: int "Level of detail in the added turbulent noise"
+#+ * PointDensity.turbulence_influence -> turbulence_influence: enum "Method for driving added turbulent noise"
+#PointDensity.turbulence_scale -> turbulence_scale: float "Scale of the added turbulent noise"
+#+ * PointDensity.turbulence_strength -> turbulence_strength: float "NO DESCRIPTION"
+#PointDensity.use_turbulence -> use_turbulence: boolean "Add directed noise to the density at render-time"
+#PointDensity.vertex_cache_space -> vertex_cache_space: enum "Co-ordinate system to cache vertices in"
+#+ * Pose.active_bone_group -> active_bone_group: pointer "Active bone group for this pose"
+#+ * Pose.active_bone_group_index -> active_bone_group_index: int "Active index in bone groups array"
+#+ * Pose.animation_visualisation -> animation_visualisation: pointer, "(read-only) Animation data for this datablock"
+#+ * Pose.bone_groups -> bone_groups: collection, "(read-only) Groups of the bones"
+#+ * Pose.bones -> bones: collection, "(read-only) Individual pose bones for the armature"
+#+ * Pose.ik_param -> ik_param: pointer, "(read-only) Parameters for IK solver"
+#+ * Pose.ik_solver -> ik_solver: enum "Selection of IK solver for IK chain, current choice is 0 for Legacy, 1 for iTaSC"
+#+ * PoseBone.bone -> bone: pointer, "(read-only) Bone associated with this PoseBone"
+#+ * PoseBone.bone_group -> bone_group: pointer "Bone Group this pose channel belongs to"
+#+ * PoseBone.bone_group_index -> bone_group_index: int "Bone Group this pose channel belongs to (0=no group)"
+#+ * PoseBone.child -> child: pointer, "(read-only) Child of this pose bone"
+#+ * PoseBone.constraints -> constraints: collection, "(read-only) Constraints that act on this PoseChannel"
+#+ * PoseBone.custom_shape -> custom_shape: pointer "Object that defines custom draw type for this bone"
+#+ * PoseBone.custom_shape_transform -> custom_shape_transform: pointer "Bone that defines the display transform of this custom shape"
+#+ * PoseBone.head -> head: float[3], "(read-only) Location of head of the channels bone"
+#PoseBone.ik_linear_weight -> ik_linear_weight: float "Weight of scale constraint for IK"
+#+ * PoseBone.ik_max_x -> ik_max_x: float "Maximum angles for IK Limit"
+#+ * PoseBone.ik_max_y -> ik_max_y: float "Maximum angles for IK Limit"
+#+ * PoseBone.ik_max_z -> ik_max_z: float "Maximum angles for IK Limit"
+#+ * PoseBone.ik_min_x -> ik_min_x: float "Minimum angles for IK Limit"
+#+ * PoseBone.ik_min_y -> ik_min_y: float "Minimum angles for IK Limit"
+#+ * PoseBone.ik_min_z -> ik_min_z: float "Minimum angles for IK Limit"
+#PoseBone.ik_rotation_weight -> ik_rotation_weight: float "Weight of rotation constraint for IK"
+#+ * PoseBone.ik_stiffness_x -> ik_stiffness_x: float "IK stiffness around the X axis"
+#+ * PoseBone.ik_stiffness_y -> ik_stiffness_y: float "IK stiffness around the Y axis"
+#+ * PoseBone.ik_stiffness_z -> ik_stiffness_z: float "IK stiffness around the Z axis"
+#+ * PoseBone.ik_stretch -> ik_stretch: float "Allow scaling of the bone for IK"
+#PoseBone.is_in_ik_chain -> is_in_ik_chain: boolean, "(read-only) Is part of an IK chain"
+#+ * PoseBone.location -> location: float[3] "NO DESCRIPTION"
+#PoseBone.lock_ik_x -> lock_ik_x: boolean "Disallow movement around the X axis"
+#PoseBone.lock_ik_y -> lock_ik_y: boolean "Disallow movement around the Y axis"
+#PoseBone.lock_ik_z -> lock_ik_z: boolean "Disallow movement around the Z axis"
+#+ * PoseBone.lock_location -> lock_location: boolean[3] "Lock editing of location in the interface"
+#+ * PoseBone.lock_rotation -> lock_rotation: boolean[3] "Lock editing of rotation in the interface"
+#+ * PoseBone.lock_rotation_w -> lock_rotation_w: boolean "Lock editing of angle component of four-component rotations in the interface"
+#+ * PoseBone.lock_rotations_4d -> lock_rotations_4d: boolean "Lock editing of four component rotations by components (instead of as Eulers)"
+#+ * PoseBone.lock_scale -> lock_scale: boolean[3] "Lock editing of scale in the interface"
+#+ * PoseBone.matrix -> matrix: float[16], "(read-only) Final 4x4 matrix for this channel"
+#+ * PoseBone.matrix_channel -> matrix_channel: float[16], "(read-only) 4x4 matrix, before constraints"
+#+ * PoseBone.matrix_local -> matrix_local: float[16] "Matrix representing the parent relative location, scale and rotation. Provides an alternative access to these properties."
+#+ * PoseBone.motion_path -> motion_path: pointer, "(read-only) Motion Path for this element"
+#+ * PoseBone.name -> name: string "NO DESCRIPTION"
+#+ * PoseBone.parent -> parent: pointer, "(read-only) Parent of this pose bone"
+#+ * PoseBone.rotation_axis_angle -> rotation_axis_angle: float[4] "Angle of Rotation for Axis-Angle rotation representation"
+#+ * PoseBone.rotation_euler -> rotation_euler: float[3] "Rotation in Eulers"
+#+ * PoseBone.rotation_mode -> rotation_mode: enum "NO DESCRIPTION"
+#+ * PoseBone.rotation_quaternion -> rotation_quaternion: float[4] "Rotation in Quaternions"
+#+ * PoseBone.scale -> scale: float[3] "NO DESCRIPTION"
+#+ * PoseBone.select -> select: boolean "NO DESCRIPTION"
+#+ * PoseBone.tail -> tail: float[3], "(read-only) Location of tail of the channels bone"
+#PoseBone.use_ik_limit_x -> use_ik_limit_x: boolean "Limit movement around the X axis"
+#PoseBone.use_ik_limit_y -> use_ik_limit_y: boolean "Limit movement around the Y axis"
+#PoseBone.use_ik_limit_z -> use_ik_limit_z: boolean "Limit movement around the Z axis"
+#PoseBone.use_ik_linear_control -> use_ik_linear_control: boolean "Apply channel size as IK constraint if stretching is enabled"
+#PoseBone.use_ik_rotation_control -> use_ik_rotation_control: boolean "Apply channel rotation as IK constraint"
+#+ * PoseBoneConstraints.active -> active: pointer "Active PoseChannel constraint"
+#+ * Property.description -> description: string, "(read-only) Description of the property for tooltips"
+#+ * Property.identifier -> identifier: string, "(read-only) Unique name used in the code and scripting"
+#+ * Property.is_never_none -> is_never_none: boolean, "(read-only) True when this value cant be set to None"
+#Property.is_output -> is_output: boolean, "(read-only) True when this property is an output value from an RNA function"
+#+ * Property.is_readonly -> is_readonly: boolean, "(read-only) Property is editable through RNA"
+#Property.is_registered -> is_registered: boolean, "(read-only) Property is registered as part of type registration"
+#Property.is_registered_optional -> is_registered_optional: boolean, "(read-only) Property is optionally registered as part of type registration"
+#+ * Property.is_required -> is_required: boolean, "(read-only) False when this property is an optional argument in an RNA function"
+#+ * Property.name -> name: string, "(read-only) Human readable name"
+#+ * Property.srna -> srna: pointer, "(read-only) Struct definition used for properties assigned to this item"
+#+ * Property.subtype -> subtype: enum, "(read-only) Semantic interpretation of the property"
+#+ * Property.type -> type: enum, "(read-only) Data type of the property"
+#+ * Property.unit -> unit: enum, "(read-only) Type of units for this property"
+#+ * Property|BooleanProperty.array_length -> array_length: int, "(read-only) Maximum length of the array, 0 means unlimited"
+#+ * Property|BooleanProperty.default -> default: boolean, "(read-only) Default value for this number"
+#+ * Property|BooleanProperty.default_array -> default_array: boolean[3], "(read-only) Default value for this array"
+#+ * Property|CollectionProperty.fixed_type -> fixed_type: pointer, "(read-only) Fixed pointer type, empty if variable type"
+#+ * Property|EnumProperty.default -> default: enum, "(read-only) Default value for this enum"
+#+ * Property|EnumProperty.items -> items: collection, "(read-only) Possible values for the property"
+#+ * Property|FloatProperty.array_length -> array_length: int, "(read-only) Maximum length of the array, 0 means unlimited"
+#+ * Property|FloatProperty.default -> default: float, "(read-only) Default value for this number"
+#+ * Property|FloatProperty.default_array -> default_array: float[3], "(read-only) Default value for this array"
+#+ * Property|FloatProperty.hard_max -> hard_max: float, "(read-only) Maximum value used by buttons"
+#+ * Property|FloatProperty.hard_min -> hard_min: float, "(read-only) Minimum value used by buttons"
+#+ * Property|FloatProperty.precision -> precision: int, "(read-only) Number of digits after the dot used by buttons"
+#+ * Property|FloatProperty.soft_max -> soft_max: float, "(read-only) Maximum value used by buttons"
+#+ * Property|FloatProperty.soft_min -> soft_min: float, "(read-only) Minimum value used by buttons"
+#+ * Property|FloatProperty.step -> step: float, "(read-only) Step size used by number buttons, for floats 1/100th of the step size"
+#+ * Property|IntProperty.array_length -> array_length: int, "(read-only) Maximum length of the array, 0 means unlimited"
+#+ * Property|IntProperty.default -> default: int, "(read-only) Default value for this number"
+#+ * Property|IntProperty.default_array -> default_array: int[3], "(read-only) Default value for this array"
+#+ * Property|IntProperty.hard_max -> hard_max: int, "(read-only) Maximum value used by buttons"
+#+ * Property|IntProperty.hard_min -> hard_min: int, "(read-only) Minimum value used by buttons"
+#+ * Property|IntProperty.soft_max -> soft_max: int, "(read-only) Maximum value used by buttons"
+#+ * Property|IntProperty.soft_min -> soft_min: int, "(read-only) Minimum value used by buttons"
+#+ * Property|IntProperty.step -> step: int, "(read-only) Step size used by number buttons, for floats 1/100th of the step size"
+#+ * Property|PointerProperty.fixed_type -> fixed_type: pointer, "(read-only) Fixed pointer type, empty if variable type"
+#+ * Property|StringProperty.default -> default: string, "(read-only) string default value"
+#Property|StringProperty.length_max -> length_max: int, "(read-only) Maximum length of the string, 0 means unlimited"
+#+ * RGBANodeSocket.default_value -> default_value: float[4] "Default value of the socket when no link is attached"
+#+ * RGBANodeSocket.name -> name: string, "(read-only) Socket name"
+#+ * Region.height -> height: int, "(read-only) Region height"
+#+ * Region.id -> id: int, "(read-only) Unique ID for this region"
+#+ * Region.type -> type: enum, "(read-only) Type of this region"
+#+ * Region.width -> width: int, "(read-only) Region width"
+#+ * RegionView3D.lock_rotation -> lock_rotation: boolean "Lock view rotation in side views"
+#+ * RegionView3D.perspective_matrix -> perspective_matrix: float[16], "(read-only) Current perspective matrix of the 3D region"
+#RegionView3D.show_sync_view -> show_sync_view: boolean "Sync view position between side views"
+#RegionView3D.use_box_clip -> use_box_clip: boolean "Clip objects based on whats visible in other side views"
+#+ * RegionView3D.view_distance -> view_distance: float "Distance to the view location"
+#+ * RegionView3D.view_location -> view_location: float[3] "View pivot location"
+#+ * RegionView3D.view_matrix -> view_matrix: float[16], "(read-only) Current view matrix of the 3D region"
+#+ * RegionView3D.view_perspective -> view_perspective: enum "View Perspective"
+#RegionView3D.view_rotate_method -> view_rotate_method: float[4] "Rotation in quaternions (keep normalized)"
+#+ * RenderEngine.bl_idname -> bl_idname: string "NO DESCRIPTION"
+#+ * RenderEngine.bl_label -> bl_label: string "NO DESCRIPTION"
+#RenderEngine.bl_use_postprocess -> bl_use_postprocess: boolean "NO DESCRIPTION"
+#RenderEngine.bl_use_preview -> bl_use_preview: boolean "NO DESCRIPTION"
+#RenderLayer.exclude_ambient_occlusion -> exclude_ambient_occlusion: boolean, "(read-only) Exclude AO pass from combined"
+#RenderLayer.exclude_emit -> exclude_emit: boolean, "(read-only) Exclude emission pass from combined"
+#RenderLayer.exclude_environment -> exclude_environment: boolean, "(read-only) Exclude environment pass from combined"
+#RenderLayer.exclude_indirect -> exclude_indirect: boolean, "(read-only) Exclude indirect pass from combined"
+#RenderLayer.exclude_reflection -> exclude_reflection: boolean, "(read-only) Exclude raytraced reflection pass from combined"
+#RenderLayer.exclude_refraction -> exclude_refraction: boolean, "(read-only) Exclude raytraced refraction pass from combined"
+#RenderLayer.exclude_shadow -> exclude_shadow: boolean, "(read-only) Exclude shadow pass from combined"
+#RenderLayer.exclude_specular -> exclude_specular: boolean, "(read-only) Exclude specular pass from combined"
+#RenderLayer.invert_zmask -> invert_zmask: boolean, "(read-only) For Zmask, only render what is behind solid z values instead of in front"
+#RenderLayer.layers -> layers: boolean[20], "(read-only) Scene layers included in this render layer"
+#RenderLayer.layers_zmask -> layers_zmask: boolean[20], "(read-only) Zmask scene layers"
+#+ * RenderLayer.light_override -> light_override: pointer, "(read-only) Group to override all other lights in this render layer"
+#+ * RenderLayer.material_override -> material_override: pointer, "(read-only) Material to override all other materials in this render layer"
+#+ * RenderLayer.name -> name: string, "(read-only) Render layer name"
+#+ * RenderLayer.passes -> passes: collection, "(read-only)"
+#+ * RenderLayer.rect -> rect: float "NO DESCRIPTION"
+#+ * RenderLayer.use -> use: boolean, "(read-only) Disable or enable the render layer"
+#RenderLayer.use_all_z -> use_all_z: boolean, "(read-only) Fill in Z values for solid faces in invisible layers, for masking"
+#RenderLayer.use_edge_enhance -> use_edge_enhance: boolean, "(read-only) Render Edge-enhance in this Layer (only works for Solid faces)"
+#RenderLayer.use_halo -> use_halo: boolean, "(read-only) Render Halos in this Layer (on top of Solid)"
+#RenderLayer.use_pass_ambient_occlusion -> use_pass_ambient_occlusion: boolean, "(read-only) Deliver AO pass"
+#RenderLayer.use_pass_color -> use_pass_color: boolean, "(read-only) Deliver shade-less color pass"
+#RenderLayer.use_pass_combined -> use_pass_combined: boolean, "(read-only) Deliver full combined RGBA buffer"
+#RenderLayer.use_pass_diffuse -> use_pass_diffuse: boolean, "(read-only) Deliver diffuse pass"
+#RenderLayer.use_pass_emit -> use_pass_emit: boolean, "(read-only) Deliver emission pass"
+#RenderLayer.use_pass_environment -> use_pass_environment: boolean, "(read-only) Deliver environment lighting pass"
+#RenderLayer.use_pass_indirect -> use_pass_indirect: boolean, "(read-only) Deliver indirect lighting pass"
+#RenderLayer.use_pass_mist -> use_pass_mist: boolean, "(read-only) Deliver mist factor pass (0.0-1.0)"
+#RenderLayer.use_pass_normal -> use_pass_normal: boolean, "(read-only) Deliver normal pass"
+#RenderLayer.use_pass_object_index -> use_pass_object_index: boolean, "(read-only) Deliver object index pass"
+#RenderLayer.use_pass_reflection -> use_pass_reflection: boolean, "(read-only) Deliver raytraced reflection pass"
+#RenderLayer.use_pass_refraction -> use_pass_refraction: boolean, "(read-only) Deliver raytraced refraction pass"
+#RenderLayer.use_pass_shadow -> use_pass_shadow: boolean, "(read-only) Deliver shadow pass"
+#RenderLayer.use_pass_specular -> use_pass_specular: boolean, "(read-only) Deliver specular pass"
+#RenderLayer.use_pass_uv -> use_pass_uv: boolean, "(read-only) Deliver texture UV pass"
+#RenderLayer.use_pass_vector -> use_pass_vector: boolean, "(read-only) Deliver speed vector pass"
+#RenderLayer.use_pass_z -> use_pass_z: boolean, "(read-only) Deliver Z values pass"
+#RenderLayer.use_sky -> use_sky: boolean, "(read-only) Render Sky in this Layer"
+#RenderLayer.use_solid -> use_solid: boolean, "(read-only) Render Solid faces in this Layer"
+#RenderLayer.use_strand -> use_strand: boolean, "(read-only) Render Strands in this Layer"
+#RenderLayer.use_zmask -> use_zmask: boolean, "(read-only) Only render whats in front of the solid z values"
+#RenderLayer.use_ztransp -> use_ztransp: boolean, "(read-only) Render Z-Transparent faces in this Layer (On top of Solid and Halos)"
+#+ * RenderPass.channel_id -> channel_id: string, "(read-only)"
+#+ * RenderPass.channels -> channels: int, "(read-only)"
+#+ * RenderPass.name -> name: string, "(read-only)"
+#+ * RenderPass.rect -> rect: float "NO DESCRIPTION"
+#+ * RenderPass.type -> type: enum, "(read-only)"
+#+ * RenderResult.layers -> layers: collection, "(read-only)"
+#+ * RenderResult.resolution_x -> resolution_x: int, "(read-only)"
+#+ * RenderResult.resolution_y -> resolution_y: int, "(read-only)"
+#+ * RenderSettings.active_layer_index -> active_layer_index: int "Active index in render layer array"
+#+ * RenderSettings.alpha_mode -> alpha_mode: enum "Representation of alpha information in the RGBA pixels"
+#+ * RenderSettings.antialiasing_samples -> antialiasing_samples: enum "Amount of anti-aliasing samples per pixel"
+#+ * RenderSettings.bake_aa_mode -> bake_aa_mode: enum "NO DESCRIPTION"
+#+ * RenderSettings.bake_bias -> bake_bias: float "Bias towards faces further away from the object (in blender units)"
+#+ * RenderSettings.bake_distance -> bake_distance: float "Maximum distance from active object to other object (in blender units"
+#+ * RenderSettings.bake_margin -> bake_margin: int "Amount of pixels to extend the baked result with, as post process filter"
+#+ * RenderSettings.bake_normal_space -> bake_normal_space: enum "Choose normal space for baking"
+#+ * RenderSettings.bake_quad_split -> bake_quad_split: enum "Choose the method used to split a quad into 2 triangles for baking"
+#+ * RenderSettings.bake_type -> bake_type: enum "Choose shading information to bake into the image"
+#+ * RenderSettings.border_max_x -> border_max_x: float "Sets maximum X value for the render border"
+#+ * RenderSettings.border_max_y -> border_max_y: float "Sets maximum Y value for the render border"
+#+ * RenderSettings.border_min_x -> border_min_x: float "Sets minimum X value to for the render border"
+#+ * RenderSettings.border_min_y -> border_min_y: float "Sets minimum Y value for the render border"
+#+ * RenderSettings.cineon_black -> cineon_black: int "Log conversion reference blackpoint"
+#+ * RenderSettings.cineon_gamma -> cineon_gamma: float "Log conversion gamma"
+#+ * RenderSettings.cineon_white -> cineon_white: int "Log conversion reference whitepoint"
+#+ * RenderSettings.color_mode -> color_mode: enum "Choose BW for saving greyscale images, RGB for saving red, green and blue channels, AND RGBA for saving red, green, blue + alpha channels"
+#+ * RenderSettings.display_mode -> display_mode: enum "Select where rendered images will be displayed"
+#+ * RenderSettings.dither_intensity -> dither_intensity: float "Amount of dithering noise added to the rendered image to break up banding"
+#+ * RenderSettings.edge_color -> edge_color: float[3] "NO DESCRIPTION"
+#+ * RenderSettings.edge_threshold -> edge_threshold: int "Threshold for drawing outlines on geometry edges"
+#+ * RenderSettings.engine -> engine: enum "Engine to use for rendering"
+#RenderSettings.exr_codec -> exr_codec: enum "Codec settings for OpenEXR"
+#RenderSettings.exr_preview -> exr_preview: boolean "When rendering animations, save JPG preview images in same directory"
+#RenderSettings.exr_zbuf -> exr_zbuf: boolean "Save the z-depth per pixel (32 bit unsigned int zbuffer)"
+#+ * RenderSettings.field_order -> field_order: enum "Order of video fields. Select which lines get rendered first, to create smooth motion for TV output"
+#+ * RenderSettings.file_extension -> file_extension: string, "(read-only) The file extension used for saving renders"
+#+ * RenderSettings.file_format -> file_format: enum "File format to save the rendered images as"
+#+ * RenderSettings.file_quality -> file_quality: int "Quality of JPEG images, AVI Jpeg and SGI movies, Compression for PNGs"
+#RenderSettings.filepath -> filepath: string "Directory/name to save animations, # characters defines the position and length of frame numbers"
+#+ * RenderSettings.filter_size -> filter_size: float "Pixel width over which the reconstruction filter combines samples"
+#+ * RenderSettings.fps -> fps: int "Framerate, expressed in frames per second"
+#+ * RenderSettings.fps_base -> fps_base: float "Framerate base"
+#RenderSettings.has_multiple_engines -> has_multiple_engines: boolean, "(read-only) More than one rendering engine is available"
+#+ * RenderSettings.is_movie_format -> is_movie_format: boolean, "(read-only) When true the format is a movie"
+#RenderSettings.jpeg2k_depth -> jpeg2k_depth: enum "Bit depth per channel"
+#RenderSettings.jpeg2k_preset -> jpeg2k_preset: enum "Use a DCI Standard preset for saving jpeg2000"
+#RenderSettings.jpeg2k_ycc -> jpeg2k_ycc: boolean "Save luminance-chrominance-chrominance channels instead of RGB colors"
+#+ * RenderSettings.layers -> layers: collection, "(read-only)"
+#+ * RenderSettings.motion_blur_samples -> motion_blur_samples: int "Number of scene samples to take with motion blur"
+#+ * RenderSettings.motion_blur_shutter -> motion_blur_shutter: float "Time taken in frames between shutter open and close"
+#+ * RenderSettings.octree_resolution -> octree_resolution: enum "Resolution of raytrace accelerator. Use higher resolutions for larger scenes"
+#+ * RenderSettings.parts_x -> parts_x: int "Number of horizontal tiles to use while rendering"
+#+ * RenderSettings.parts_y -> parts_y: int "Number of vertical tiles to use while rendering"
+#+ * RenderSettings.pixel_aspect_x -> pixel_aspect_x: float "Horizontal aspect ratio - for anamorphic or non-square pixel output"
+#+ * RenderSettings.pixel_aspect_y -> pixel_aspect_y: float "Vertical aspect ratio - for anamorphic or non-square pixel output"
+#RenderSettings.pixel_filter_type -> pixel_filter_type: enum "Reconstruction filter used for combining anti-aliasing samples"
+#RenderSettings.raytrace_method -> raytrace_method: enum "Type of raytrace accelerator structure"
+#+ * RenderSettings.resolution_percentage -> resolution_percentage: int "Percentage scale for render resolution"
+#+ * RenderSettings.resolution_x -> resolution_x: int "Number of horizontal pixels in the rendered image"
+#+ * RenderSettings.resolution_y -> resolution_y: int "Number of vertical pixels in the rendered image"
+#+ * RenderSettings.sequencer_gl_preview -> sequencer_gl_preview: enum "Method to draw in the sequencer view"
+#+ * RenderSettings.sequencer_gl_render -> sequencer_gl_render: enum "Method to draw in the sequencer view"
+#+ * RenderSettings.simplify_ao_sss -> simplify_ao_sss: float "Global approximate AA and SSS quality factor"
+#+ * RenderSettings.simplify_child_particles -> simplify_child_particles: float "Global child particles percentage"
+#+ * RenderSettings.simplify_shadow_samples -> simplify_shadow_samples: int "Global maximum shadow samples"
+#+ * RenderSettings.simplify_subdivision -> simplify_subdivision: int "Global maximum subdivision level"
+#+ * RenderSettings.stamp_background -> stamp_background: float[4] "Color to use behind stamp text"
+#+ * RenderSettings.stamp_font_size -> stamp_font_size: int "Size of the font used when rendering stamp text"
+#+ * RenderSettings.stamp_foreground -> stamp_foreground: float[4] "Color to use for stamp text"
+#+ * RenderSettings.stamp_note_text -> stamp_note_text: string "Custom text to appear in the stamp note"
+#+ * RenderSettings.threads -> threads: int "Number of CPU threads to use simultaneously while rendering (for multi-core/CPU systems)"
+#+ * RenderSettings.threads_mode -> threads_mode: enum "Determine the amount of render threads used"
+#RenderSettings.use_antialiasing -> use_antialiasing: boolean "Render and combine multiple samples per pixel to prevent jagged edges"
+#RenderSettings.use_backbuf -> use_backbuf: boolean "Render backbuffer image"
+#RenderSettings.use_bake_antialiasing -> use_bake_antialiasing: boolean "Enables Anti-aliasing"
+#RenderSettings.use_bake_clear -> use_bake_clear: boolean "Clear Images before baking"
+#RenderSettings.use_bake_normalize -> use_bake_normalize: boolean "With displacement normalize to the distance, with ambient occlusion normalize without using material settings"
+#RenderSettings.use_bake_selected_to_active -> use_bake_selected_to_active: boolean "Bake shading on the surface of selected objects to the active object"
+#+ * RenderSettings.use_border -> use_border: boolean "Render a user-defined border region, within the frame size. Note, this disables save_buffers and full_sample"
+#RenderSettings.use_cineon_log -> use_cineon_log: boolean "Convert to logarithmic color space"
+#RenderSettings.use_color_management -> use_color_management: boolean "Use linear workflow - gamma corrected imaging pipeline"
+#+ * RenderSettings.use_compositing -> use_compositing: boolean "Process the render result through the compositing pipeline, if compositing nodes are enabled"
+#RenderSettings.use_crop_to_border -> use_crop_to_border: boolean "Crop the rendered frame to the defined border size"
+#RenderSettings.use_edge_enhance -> use_edge_enhance: boolean "Create a toon outline around the edges of geometry"
+#+ * RenderSettings.use_envmaps -> use_envmaps: boolean "Calculate environment maps while rendering"
+#RenderSettings.use_exr_half -> use_exr_half: boolean "Use 16 bit floats instead of 32 bit floats per channel"
+#RenderSettings.use_fields -> use_fields: boolean "Render image to two fields per frame, for interlaced TV output"
+#RenderSettings.use_fields_still -> use_fields_still: boolean "Disable the time difference between fields"
+#+ * RenderSettings.use_file_extension -> use_file_extension: boolean "Add the file format extensions to the rendered file name (eg: filename + .jpg)"
+#RenderSettings.use_free_image_textures -> use_free_image_textures: boolean "Free all image texture from memory after render, to save memory before compositing"
+#RenderSettings.use_free_unused_nodes -> use_free_unused_nodes: boolean "Free Nodes that are not used while compositing, to save memory"
+#RenderSettings.use_full_sample -> use_full_sample: boolean "Save for every anti-aliasing sample the entire RenderLayer results. This solves anti-aliasing issues with compositing"
+#+ * RenderSettings.use_game_engine -> use_game_engine: boolean, "(read-only) Current rendering engine is a game engine"
+#+ * RenderSettings.use_instances -> use_instances: boolean "Instance support leads to effective memory reduction when using duplicates"
+#+ * RenderSettings.use_local_coords -> use_local_coords: boolean "Vertex coordinates are stored localy on each primitive. Increases memory usage, but may have impact on speed"
+#RenderSettings.use_motion_blur -> use_motion_blur: boolean "Use multi-sampled 3D scene motion blur"
+#+ * RenderSettings.use_overwrite -> use_overwrite: boolean "Overwrite existing files while rendering"
+#+ * RenderSettings.use_placeholder -> use_placeholder: boolean "Create empty placeholder files while rendering frames (similar to Unix touch)"
+#+ * RenderSettings.use_radiosity -> use_radiosity: boolean "Calculate radiosity in a pre-process before rendering"
+#RenderSettings.use_raytrace -> use_raytrace: boolean "Pre-calculate the raytrace accelerator and render raytracing effects"
+#RenderSettings.use_save_buffers -> use_save_buffers: boolean "Save tiles for all RenderLayers and SceneNodes to files in the temp directory (saves memory, required for Full Sample)"
+#+ * RenderSettings.use_sequencer -> use_sequencer: boolean "Process the render (and composited) result through the video sequence editor pipeline, if sequencer strips exist"
+#+ * RenderSettings.use_sequencer_gl_preview -> use_sequencer_gl_preview: boolean "NO DESCRIPTION"
+#+ * RenderSettings.use_sequencer_gl_render -> use_sequencer_gl_render: boolean "NO DESCRIPTION"
+#+ * RenderSettings.use_shadows -> use_shadows: boolean "Calculate shadows while rendering"
+#+ * RenderSettings.use_simplify -> use_simplify: boolean "Enable simplification of scene for quicker preview renders"
+#RenderSettings.use_simplify_triangulate -> use_simplify_triangulate: boolean "Disables non-planer quads being triangulated"
+#RenderSettings.use_single_layer -> use_single_layer: boolean "Only render the active layer"
+#+ * RenderSettings.use_sss -> use_sss: boolean "Calculate sub-surface scattering in materials rendering"
+#RenderSettings.use_stamp -> use_stamp: boolean "Render the stamp info text in the rendered image"
+#RenderSettings.use_stamp_camera -> use_stamp_camera: boolean "Include the name of the active camera in image metadata"
+#RenderSettings.use_stamp_date -> use_stamp_date: boolean "Include the current date in image metadata"
+#RenderSettings.use_stamp_filename -> use_stamp_filename: boolean "Include the filename of the .blend file in image metadata"
+#RenderSettings.use_stamp_frame -> use_stamp_frame: boolean "Include the frame number in image metadata"
+#RenderSettings.use_stamp_marker -> use_stamp_marker: boolean "Include the name of the last marker in image metadata"
+#RenderSettings.use_stamp_note -> use_stamp_note: boolean "Include a custom note in image metadata"
+#RenderSettings.use_stamp_render_time -> use_stamp_render_time: boolean "Include the render time in the stamp image"
+#RenderSettings.use_stamp_scene -> use_stamp_scene: boolean "Include the name of the active scene in image metadata"
+#RenderSettings.use_stamp_sequencer_strip -> use_stamp_sequencer_strip: boolean "Include the name of the foreground sequence strip in image metadata"
+#RenderSettings.use_stamp_time -> use_stamp_time: boolean "Include the render frame as HH:MM:SS.FF in image metadata"
+#+ * RenderSettings.use_textures -> use_textures: boolean "Use textures to affect material properties"
+#RenderSettings.use_tiff_16bit -> use_tiff_16bit: boolean "Save TIFF with 16 bits per channel"
+#+ * SPHFluidSettings.buoyancy -> buoyancy: float "NO DESCRIPTION"
+#+ * SPHFluidSettings.fluid_radius -> fluid_radius: float "Fluid interaction Radius"
+#+ * SPHFluidSettings.rest_density -> rest_density: float "Density"
+#+ * SPHFluidSettings.rest_length -> rest_length: float "The Spring Rest Length (factor of interaction radius)"
+#SPHFluidSettings.spring_force -> spring_force: float "Spring force constant"
+#SPHFluidSettings.stiffness -> stiffness: float "Constant K - Stiffness"
+#SPHFluidSettings.stiffness_near -> stiffness_near: float "Repulsion factor: stiffness_knear"
+#+ * SPHFluidSettings.viscosity_beta -> viscosity_beta: float "Square viscosity factor"
+#+ * SPHFluidSettings.viscosity_omega -> viscosity_omega: float "Linear viscosity"
+#+ * SceneBases.active -> active: pointer "Active object base in the scene"
+#+ * SceneGameData.activity_culling_box_radius -> activity_culling_box_radius: float "Radius of the activity bubble, in Manhattan length. Objects outside the box are activity-culled"
+#+ * SceneGameData.depth -> depth: int "Displays bit depth of full screen display"
+#+ * SceneGameData.dome_angle -> dome_angle: int "Field of View of the Dome - it only works in mode Fisheye and Truncated"
+#+ * SceneGameData.dome_buffer_resolution -> dome_buffer_resolution: float "Buffer Resolution - decrease it to increase speed"
+#+ * SceneGameData.dome_mode -> dome_mode: enum "Dome physical configurations"
+#+ * SceneGameData.dome_tesselation -> dome_tesselation: int "Tessellation level - check the generated mesh in wireframe mode"
+#+ * SceneGameData.dome_text -> dome_text: pointer "Custom Warp Mesh data file"
+#+ * SceneGameData.dome_tilt -> dome_tilt: int "Camera rotation in horizontal axis"
+#+ * SceneGameData.fps -> fps: int "The nominal number of game frames per second. Physics fixed timestep = 1/fps, independently of actual frame rate"
+#SceneGameData.frame_color -> frame_color: float[3] "Set colour of the bars"
+#SceneGameData.frame_type -> frame_type: enum "Select the type of Framing you want"
+#+ * SceneGameData.frequency -> frequency: int "Displays clock frequency of fullscreen display"
+#+ * SceneGameData.logic_step_max -> logic_step_max: int "Sets the maximum number of logic frame per game frame if graphics slows down the game, higher value allows better synchronization with physics"
+#+ * SceneGameData.material_mode -> material_mode: enum "Material mode to use for rendering"
+#+ * SceneGameData.occlusion_culling_resolution -> occlusion_culling_resolution: float "The size of the occlusion buffer in pixel, use higher value for better precision (slower)"
+#+ * SceneGameData.physics_engine -> physics_engine: enum "Physics engine used for physics simulation in the game engine"
+#+ * SceneGameData.physics_gravity -> physics_gravity: float "Gravitational constant used for physics simulation in the game engine"
+#+ * SceneGameData.physics_step_max -> physics_step_max: int "Sets the maximum number of physics step per game frame if graphics slows down the game, higher value allows physics to keep up with realtime"
+#+ * SceneGameData.physics_step_sub -> physics_step_sub: int "Sets the number of simulation substep per physic timestep, higher value give better physics precision"
+#+ * SceneGameData.resolution_x -> resolution_x: int "Number of horizontal pixels in the screen"
+#+ * SceneGameData.resolution_y -> resolution_y: int "Number of vertical pixels in the screen"
+#+ * SceneGameData.show_debug_properties -> show_debug_properties: boolean "Show properties marked for debugging while the game runs"
+#+ * SceneGameData.show_framerate_profile -> show_framerate_profile: boolean "Show framerate and profiling information while the game runs"
+#SceneGameData.show_fullscreen -> show_fullscreen: boolean "Starts player in a new fullscreen display"
+#+ * SceneGameData.show_physics_visualization -> show_physics_visualization: boolean "Show a visualization of physics bounds and interactions"
+#+ * SceneGameData.stereo -> stereo: enum "NO DESCRIPTION"
+#SceneGameData.stereo_eye_separation -> stereo_eye_separation: float "Set the distance between the eyes - the camera focal length/30 should be fine"
+#+ * SceneGameData.stereo_mode -> stereo_mode: enum "Stereographic techniques"
+#SceneGameData.use_activity_culling -> use_activity_culling: boolean "Activity culling is enabled"
+#+ * SceneGameData.use_animation_record -> use_animation_record: boolean "Record animation to fcurves"
+#SceneGameData.use_auto_start -> use_auto_start: boolean "Automatically start game at load time"
+#+ * SceneGameData.use_deprecation_warnings -> use_deprecation_warnings: boolean "Print warnings when using deprecated features in the python API"
+#+ * SceneGameData.use_display_lists -> use_display_lists: boolean "Use display lists to speed up rendering by keeping geometry on the GPU"
+#+ * SceneGameData.use_frame_rate -> use_frame_rate: boolean "Respect the frame rate rather than rendering as many frames as possible"
+#SceneGameData.use_glsl_extra_textures -> use_glsl_extra_textures: boolean "Use extra textures like normal or specular maps for GLSL rendering"
+#SceneGameData.use_glsl_lights -> use_glsl_lights: boolean "Use lights for GLSL rendering"
+#SceneGameData.use_glsl_nodes -> use_glsl_nodes: boolean "Use nodes for GLSL rendering"
+#SceneGameData.use_glsl_ramps -> use_glsl_ramps: boolean "Use ramps for GLSL rendering"
+#SceneGameData.use_glsl_shaders -> use_glsl_shaders: boolean "Use shaders for GLSL rendering"
+#SceneGameData.use_glsl_shadows -> use_glsl_shadows: boolean "Use shadows for GLSL rendering"
+#+ * SceneGameData.use_occlusion_culling -> use_occlusion_culling: boolean "Use optimized Bullet DBVT tree for view frustum and occlusion culling"
+#+ * SceneObjects.active -> active: pointer "Active object for this scene"
+#SceneRenderLayer.exclude_ambient_occlusion -> exclude_ambient_occlusion: boolean "Exclude AO pass from combined"
+#SceneRenderLayer.exclude_emit -> exclude_emit: boolean "Exclude emission pass from combined"
+#SceneRenderLayer.exclude_environment -> exclude_environment: boolean "Exclude environment pass from combined"
+#SceneRenderLayer.exclude_indirect -> exclude_indirect: boolean "Exclude indirect pass from combined"
+#SceneRenderLayer.exclude_reflection -> exclude_reflection: boolean "Exclude raytraced reflection pass from combined"
+#SceneRenderLayer.exclude_refraction -> exclude_refraction: boolean "Exclude raytraced refraction pass from combined"
+#SceneRenderLayer.exclude_shadow -> exclude_shadow: boolean "Exclude shadow pass from combined"
+#SceneRenderLayer.exclude_specular -> exclude_specular: boolean "Exclude specular pass from combined"
+#SceneRenderLayer.invert_zmask -> invert_zmask: boolean "For Zmask, only render what is behind solid z values instead of in front"
+#SceneRenderLayer.layers -> layers: boolean[20] "Scene layers included in this render layer"
+#SceneRenderLayer.layers_zmask -> layers_zmask: boolean[20] "Zmask scene layers"
+#+ * SceneRenderLayer.light_override -> light_override: pointer "Group to override all other lights in this render layer"
+#+ * SceneRenderLayer.material_override -> material_override: pointer "Material to override all other materials in this render layer"
+#+ * SceneRenderLayer.name -> name: string "Render layer name"
+#+ * SceneRenderLayer.use -> use: boolean "Disable or enable the render layer"
+#SceneRenderLayer.use_all_z -> use_all_z: boolean "Fill in Z values for solid faces in invisible layers, for masking"
+#SceneRenderLayer.use_edge_enhance -> use_edge_enhance: boolean "Render Edge-enhance in this Layer (only works for Solid faces)"
+#SceneRenderLayer.use_halo -> use_halo: boolean "Render Halos in this Layer (on top of Solid)"
+#SceneRenderLayer.use_pass_ambient_occlusion -> use_pass_ambient_occlusion: boolean "Deliver AO pass"
+#SceneRenderLayer.use_pass_color -> use_pass_color: boolean "Deliver shade-less color pass"
+#SceneRenderLayer.use_pass_combined -> use_pass_combined: boolean "Deliver full combined RGBA buffer"
+#SceneRenderLayer.use_pass_diffuse -> use_pass_diffuse: boolean "Deliver diffuse pass"
+#SceneRenderLayer.use_pass_emit -> use_pass_emit: boolean "Deliver emission pass"
+#SceneRenderLayer.use_pass_environment -> use_pass_environment: boolean "Deliver environment lighting pass"
+#SceneRenderLayer.use_pass_indirect -> use_pass_indirect: boolean "Deliver indirect lighting pass"
+#SceneRenderLayer.use_pass_mist -> use_pass_mist: boolean "Deliver mist factor pass (0.0-1.0)"
+#SceneRenderLayer.use_pass_normal -> use_pass_normal: boolean "Deliver normal pass"
+#SceneRenderLayer.use_pass_object_index -> use_pass_object_index: boolean "Deliver object index pass"
+#SceneRenderLayer.use_pass_reflection -> use_pass_reflection: boolean "Deliver raytraced reflection pass"
+#SceneRenderLayer.use_pass_refraction -> use_pass_refraction: boolean "Deliver raytraced refraction pass"
+#SceneRenderLayer.use_pass_shadow -> use_pass_shadow: boolean "Deliver shadow pass"
+#SceneRenderLayer.use_pass_specular -> use_pass_specular: boolean "Deliver specular pass"
+#SceneRenderLayer.use_pass_uv -> use_pass_uv: boolean "Deliver texture UV pass"
+#SceneRenderLayer.use_pass_vector -> use_pass_vector: boolean "Deliver speed vector pass"
+#SceneRenderLayer.use_pass_z -> use_pass_z: boolean "Deliver Z values pass"
+#SceneRenderLayer.use_sky -> use_sky: boolean "Render Sky in this Layer"
+#SceneRenderLayer.use_solid -> use_solid: boolean "Render Solid faces in this Layer"
+#SceneRenderLayer.use_strand -> use_strand: boolean "Render Strands in this Layer"
+#SceneRenderLayer.use_zmask -> use_zmask: boolean "Only render whats in front of the solid z values"
+#SceneRenderLayer.use_ztransp -> use_ztransp: boolean "Render Z-Transparent faces in this Layer (On top of Solid and Halos)"
+#+ * Scopes.accuracy -> accuracy: float "Proportion of original image source pixel lines to sample"
+#+ * Scopes.histogram -> histogram: pointer, "(read-only) Histogram for viewing image statistics"
+#+ * Scopes.use_full_resolution -> use_full_resolution: boolean "Sample every pixel of the image"
+#+ * Scopes.vectorscope_alpha -> vectorscope_alpha: float "Opacity of the points"
+#+ * Scopes.waveform_alpha -> waveform_alpha: float "Opacity of the points"
+#+ * Scopes.waveform_mode -> waveform_mode: enum "NO DESCRIPTION"
+#+ * Sensor.frequency -> frequency: int "Delay between repeated pulses(in logic tics, 0=no delay)"
+#+ * Sensor.invert -> invert: boolean "Invert the level(output) of this sensor"
+#+ * Sensor.name -> name: string "Sensor name"
+#Sensor.pin -> pin: boolean "Display when not linked to a visible states controller"
+#Sensor.show_expanded -> show_expanded: boolean "Set sensor expanded in the user interface"
+#+ * Sensor.type -> type: enum "NO DESCRIPTION"
+#Sensor.use_level -> use_level: boolean "Level detector, trigger controllers of new states(only applicable upon logic state transition)"
+#Sensor.use_pulse_false_level -> use_pulse_false_level: boolean "Activate FALSE level triggering (pulse mode)"
+#Sensor.use_pulse_true_level -> use_pulse_true_level: boolean "Activate TRUE level triggering (pulse mode)"
+#Sensor.use_tap -> use_tap: boolean "Trigger controllers only for an instant, even while the sensor remains true"
+#+ * Sensor|ActuatorSensor.actuator -> actuator: string "Actuator name, actuator active state modifications will be detected"
+#+ * Sensor|ArmatureSensor.bone -> bone: string "Identify the bone to check value from"
+#+ * Sensor|ArmatureSensor.constraint -> constraint: string "Identify the bone constraint to check value from"
+#+ * Sensor|ArmatureSensor.test_type -> test_type: enum "Type of value and test"
+#+ * Sensor|ArmatureSensor.value -> value: float "Specify value to be used in comparison"
+#+ * Sensor|CollisionSensor.material -> material: string "Only look for Objects with this material"
+#+ * Sensor|CollisionSensor.property -> property: string "Only look for Objects with this property"
+#Sensor|CollisionSensor.use_material -> use_material: boolean "Toggle collision on material or property"
+#Sensor|CollisionSensor.use_pulse -> use_pulse: boolean "Changes to the set of colliding objects generates pulse"
+#+ * Sensor|DelaySensor.delay -> delay: int "Delay in number of logic tics before the positive trigger (default 60 per second)"
+#+ * Sensor|DelaySensor.duration -> duration: int "If >0, delay in number of logic tics before the negative trigger following the positive trigger"
+#Sensor|DelaySensor.use_repeat -> use_repeat: boolean "Toggle repeat option. If selected, the sensor restarts after Delay+Dur logic tics"
+#+ * Sensor|JoystickSensor.axis_direction -> axis_direction: enum "The direction of the axis"
+#+ * Sensor|JoystickSensor.axis_number -> axis_number: int "Specify which axis pair to use, 1 is usually the main direction input"
+#+ * Sensor|JoystickSensor.axis_threshold -> axis_threshold: int "Specify the precision of the axis"
+#+ * Sensor|JoystickSensor.button_number -> button_number: int "Specify which button to use"
+#+ * Sensor|JoystickSensor.event_type -> event_type: enum "The type of event this joystick sensor is triggered on"
+#+ * Sensor|JoystickSensor.hat_direction -> hat_direction: enum "Specify hat direction"
+#+ * Sensor|JoystickSensor.hat_number -> hat_number: int "Specify which hat to use"
+#+ * Sensor|JoystickSensor.joystick_index -> joystick_index: int "Specify which joystick to use"
+#+ * Sensor|JoystickSensor.single_axis_number -> single_axis_number: int "Specify a single axis (verticle/horizontal/other) to detect"
+#Sensor|JoystickSensor.use_all_events -> use_all_events: boolean "Triggered by all events on this joysticks current type (axis/button/hat)"
+#+ * Sensor|KeyboardSensor.key -> key: enum "NO DESCRIPTION"
+#+ * Sensor|KeyboardSensor.log -> log: string "Property that receive the keystrokes in case a string is logged"
+#Sensor|KeyboardSensor.modifier_key_1 -> modifier_key_1: enum "Modifier key code"
+#Sensor|KeyboardSensor.modifier_key_2 -> modifier_key_2: enum "Modifier key code"
+#+ * Sensor|KeyboardSensor.target -> target: string "Property that indicates whether to log keystrokes as a string"
+#Sensor|KeyboardSensor.use_all_keys -> use_all_keys: boolean "Trigger this sensor on any keystroke"
+#+ * Sensor|MessageSensor.subject -> subject: string "Optional subject filter: only accept messages with this subject, or empty for all"
+#+ * Sensor|MouseSensor.mouse_event -> mouse_event: enum "Specify the type of event this mouse sensor should trigger on"
+#+ * Sensor|NearSensor.distance -> distance: float "Trigger distance"
+#+ * Sensor|NearSensor.property -> property: string "Only look for objects with this property"
+#+ * Sensor|NearSensor.reset_distance -> reset_distance: float "NO DESCRIPTION"
+#+ * Sensor|PropertySensor.evaluation_type -> evaluation_type: enum "Type of property evaluation"
+#+ * Sensor|PropertySensor.property -> property: string "NO DESCRIPTION"
+#+ * Sensor|PropertySensor.value -> value: string "Check for this value in types in Equal or Not Equal types"
+#Sensor|PropertySensor.value_max -> value_max: string "Specify maximum value in Interval type"
+#Sensor|PropertySensor.value_min -> value_min: string "Specify minimum value in Interval type"
+#+ * Sensor|RadarSensor.angle -> angle: float "Opening angle of the radar cone"
+#+ * Sensor|RadarSensor.axis -> axis: enum "Specify along which axis the radar cone is cast"
+#+ * Sensor|RadarSensor.distance -> distance: float "Depth of the radar cone"
+#+ * Sensor|RadarSensor.property -> property: string "Only look for Objects with this property"
+#+ * Sensor|RandomSensor.seed -> seed: int "Initial seed of the generator. (Choose 0 for not random)"
+#+ * Sensor|RaySensor.axis -> axis: enum "Specify along which axis the ray is cast"
+#+ * Sensor|RaySensor.material -> material: string "Only look for Objects with this material"
+#+ * Sensor|RaySensor.property -> property: string "Only look for Objects with this property"
+#+ * Sensor|RaySensor.range -> range: float "Sense objects no farther than this distance"
+#+ * Sensor|RaySensor.ray_type -> ray_type: enum "Toggle collision on material or property"
+#Sensor|RaySensor.use_x_ray -> use_x_ray: boolean "Toggle X-Ray option (see through objects that dont have the property)"
+#+ * Sensor|TouchSensor.material -> material: pointer "Only look for objects with this material"
+#Sequence.blend_alpha -> blend_alpha: float "NO DESCRIPTION"
+#Sequence.blend_type -> blend_type: enum "NO DESCRIPTION"
+#+ * Sequence.channel -> channel: int "Y position of the sequence strip"
+#+ * Sequence.effect_fader -> effect_fader: float "NO DESCRIPTION"
+#Sequence.frame_duration -> frame_duration: int, "(read-only) The length of the contents of this strip before the handles are applied"
+#Sequence.frame_final_duration -> frame_final_duration: int "The length of the contents of this strip before the handles are applied"
+#+ * Sequence.frame_final_end -> frame_final_end: int "End frame displayed in the sequence editor after offsets are applied"
+#+ * Sequence.frame_final_start -> frame_final_start: int "Start frame displayed in the sequence editor after offsets are applied, setting this is equivalent to moving the handle, not the actual start frame"
+#+ * Sequence.frame_offset_end -> frame_offset_end: int, "(read-only)"
+#+ * Sequence.frame_offset_start -> frame_offset_start: int, "(read-only)"
+#+ * Sequence.frame_start -> frame_start: int "NO DESCRIPTION"
+#+ * Sequence.frame_still_end -> frame_still_end: int, "(read-only)"
+#+ * Sequence.frame_still_start -> frame_still_start: int, "(read-only)"
+#+ * Sequence.lock -> lock: boolean "Lock strip so that it cant be transformed"
+#+ * Sequence.mute -> mute: boolean "NO DESCRIPTION"
+#+ * Sequence.name -> name: string "NO DESCRIPTION"
+#+ * Sequence.select -> select: boolean "NO DESCRIPTION"
+#+ * Sequence.select_left_handle -> select_left_handle: boolean "NO DESCRIPTION"
+#+ * Sequence.select_right_handle -> select_right_handle: boolean "NO DESCRIPTION"
+#+ * Sequence.speed_fader -> speed_fader: float "NO DESCRIPTION"
+#+ * Sequence.type -> type: enum, "(read-only)"
+#Sequence.use_default_fade -> use_default_fade: boolean "Fade effect using the built-in default (usually make transition as long as effect strip)"
+#+ * SequenceColorBalance.gain -> gain: float[3] "Color balance gain (highlights)"
+#+ * SequenceColorBalance.gamma -> gamma: float[3] "Color balance gamma (midtones)"
+#SequenceColorBalance.invert_gain -> invert_gain: boolean "NO DESCRIPTION"
+#SequenceColorBalance.invert_gamma -> invert_gamma: boolean "NO DESCRIPTION"
+#SequenceColorBalance.invert_lift -> invert_lift: boolean "NO DESCRIPTION"
+#+ * SequenceColorBalance.lift -> lift: float[3] "Color balance lift (shadows)"
+#SequenceCrop.max_x -> max_x: int "NO DESCRIPTION"
+#SequenceCrop.max_y -> max_y: int "NO DESCRIPTION"
+#SequenceCrop.min_x -> min_x: int "NO DESCRIPTION"
+#SequenceCrop.min_y -> min_y: int "NO DESCRIPTION"
+#+ * SequenceEditor.active_strip -> active_strip: pointer "NO DESCRIPTION"
+#+ * SequenceEditor.meta_stack -> meta_stack: collection, "(read-only) Meta strip stack, last is currently edited meta strip"
+#+ * SequenceEditor.overlay_frame -> overlay_frame: int "Sequencers active strip"
+#+ * SequenceEditor.overlay_lock -> overlay_lock: boolean "NO DESCRIPTION"
+#+ * SequenceEditor.sequences -> sequences: collection, "(read-only)"
+#+ * SequenceEditor.sequences_all -> sequences_all: collection, "(read-only)"
+#+ * SequenceEditor.show_overlay -> show_overlay: boolean "Partial overlay ontop of the sequencer"
+#+ * SequenceElement.filename -> filename: string "NO DESCRIPTION"
+#+ * SequenceProxy.directory -> directory: string "Location to store the proxy files"
+#+ * SequenceProxy.filepath -> filepath: string "Location of custom proxy file"
+#+ * SequenceTransform.offset_x -> offset_x: int "NO DESCRIPTION"
+#+ * SequenceTransform.offset_y -> offset_y: int "NO DESCRIPTION"
+#+ * Sequence|EffectSequence.color_balance -> color_balance: pointer, "(read-only)"
+#Sequence|EffectSequence.color_multiply -> color_multiply: float "NO DESCRIPTION"
+#+ * Sequence|EffectSequence.color_saturation -> color_saturation: float "NO DESCRIPTION"
+#+ * Sequence|EffectSequence.crop -> crop: pointer, "(read-only)"
+#+ * Sequence|EffectSequence.proxy -> proxy: pointer, "(read-only)"
+#+ * Sequence|EffectSequence.strobe -> strobe: float "Only display every nth frame"
+#+ * Sequence|EffectSequence.transform -> transform: pointer, "(read-only)"
+#+ * Sequence|EffectSequence.use_color_balance -> use_color_balance: boolean "(3-Way color correction) on input"
+#+ * Sequence|EffectSequence.use_crop -> use_crop: boolean "Crop image before processing"
+#Sequence|EffectSequence.use_deinterlace -> use_deinterlace: boolean "For video movies to remove fields"
+#Sequence|EffectSequence.use_flip_x -> use_flip_x: boolean "Flip on the X axis"
+#Sequence|EffectSequence.use_flip_y -> use_flip_y: boolean "Flip on the Y axis"
+#Sequence|EffectSequence.use_float -> use_float: boolean "Convert input to float data"
+#Sequence|EffectSequence.use_premultiply -> use_premultiply: boolean "Convert RGB from key alpha to premultiplied alpha"
+#+ * Sequence|EffectSequence.use_proxy -> use_proxy: boolean "Use a preview proxy for this strip"
+#Sequence|EffectSequence.use_proxy_custom_directory -> use_proxy_custom_directory: boolean "Use a custom directory to store data"
+#Sequence|EffectSequence.use_proxy_custom_file -> use_proxy_custom_file: boolean "Use a custom file to read proxy data from"
+#Sequence|EffectSequence.use_reverse_frames -> use_reverse_frames: boolean "Reverse frame order"
+#+ * Sequence|EffectSequence.use_translation -> use_translation: boolean "Translate image before processing"
+#+ * Sequence|EffectSequence|ColorSequence.color -> color: float[3] "NO DESCRIPTION"
+#Sequence|EffectSequence|GlowSequence.blur_radius -> blur_radius: float "Radius of glow effect"
+#+ * Sequence|EffectSequence|GlowSequence.boost_factor -> boost_factor: float "Brightness multiplier"
+#+ * Sequence|EffectSequence|GlowSequence.clamp -> clamp: float "rightness limit of intensity"
+#+ * Sequence|EffectSequence|GlowSequence.quality -> quality: int "Accuracy of the blur effect"
+#+ * Sequence|EffectSequence|GlowSequence.threshold -> threshold: float "Minimum intensity to trigger a glow"
+#Sequence|EffectSequence|GlowSequence.use_only_boost -> use_only_boost: boolean "Show the glow buffer only"
+#+ * Sequence|EffectSequence|PluginSequence.filename -> filename: string, "(read-only)"
+#+ * Sequence|EffectSequence|SpeedControlSequence.global_speed -> global_speed: float "NO DESCRIPTION"
+#Sequence|EffectSequence|SpeedControlSequence.use_curve_compress_y -> use_curve_compress_y: boolean "Scale F-Curve value to get the target frame number, F-Curve value runs from 0.0 to 1.0"
+#Sequence|EffectSequence|SpeedControlSequence.use_curve_velocity -> use_curve_velocity: boolean "Interpret the F-Curve value as a velocity instead of a frame number"
+#Sequence|EffectSequence|SpeedControlSequence.use_frame_blend -> use_frame_blend: boolean "Blend two frames into the target for a smoother result"
+#+ * Sequence|EffectSequence|TransformSequence.interpolation -> interpolation: enum "NO DESCRIPTION"
+#+ * Sequence|EffectSequence|TransformSequence.rotation_start -> rotation_start: float "NO DESCRIPTION"
+#+ * Sequence|EffectSequence|TransformSequence.scale_start_x -> scale_start_x: float "NO DESCRIPTION"
+#+ * Sequence|EffectSequence|TransformSequence.scale_start_y -> scale_start_y: float "NO DESCRIPTION"
+#+ * Sequence|EffectSequence|TransformSequence.translate_start_x -> translate_start_x: float "NO DESCRIPTION"
+#+ * Sequence|EffectSequence|TransformSequence.translate_start_y -> translate_start_y: float "NO DESCRIPTION"
+#+ * Sequence|EffectSequence|TransformSequence.translation_unit -> translation_unit: enum "NO DESCRIPTION"
+#Sequence|EffectSequence|TransformSequence.use_uniform_scale -> use_uniform_scale: boolean "Scale uniformly, preserving aspect ratio"
+#+ * Sequence|EffectSequence|WipeSequence.angle -> angle: float "Edge angle"
+#+ * Sequence|EffectSequence|WipeSequence.blur_width -> blur_width: float "Width of the blur edge, in percentage relative to the image size"
+#+ * Sequence|EffectSequence|WipeSequence.direction -> direction: enum "Wipe direction"
+#+ * Sequence|EffectSequence|WipeSequence.transition_type -> transition_type: enum "NO DESCRIPTION"
+#Sequence|ImageSequence.animation_offset_end -> animation_offset_end: int "Animation end offset (trim end)"
+#Sequence|ImageSequence.animation_offset_start -> animation_offset_start: int "Animation start offset (trim start)"
+#+ * Sequence|ImageSequence.color_balance -> color_balance: pointer, "(read-only)"
+#Sequence|ImageSequence.color_multiply -> color_multiply: float "NO DESCRIPTION"
+#+ * Sequence|ImageSequence.color_saturation -> color_saturation: float "NO DESCRIPTION"
+#+ * Sequence|ImageSequence.crop -> crop: pointer, "(read-only)"
+#+ * Sequence|ImageSequence.directory -> directory: string "NO DESCRIPTION"
+#+ * Sequence|ImageSequence.elements -> elements: collection, "(read-only)"
+#+ * Sequence|ImageSequence.proxy -> proxy: pointer, "(read-only)"
+#+ * Sequence|ImageSequence.strobe -> strobe: float "Only display every nth frame"
+#+ * Sequence|ImageSequence.transform -> transform: pointer, "(read-only)"
+#+ * Sequence|ImageSequence.use_color_balance -> use_color_balance: boolean "(3-Way color correction) on input"
+#+ * Sequence|ImageSequence.use_crop -> use_crop: boolean "Crop image before processing"
+#Sequence|ImageSequence.use_deinterlace -> use_deinterlace: boolean "For video movies to remove fields"
+#Sequence|ImageSequence.use_flip_x -> use_flip_x: boolean "Flip on the X axis"
+#Sequence|ImageSequence.use_flip_y -> use_flip_y: boolean "Flip on the Y axis"
+#Sequence|ImageSequence.use_float -> use_float: boolean "Convert input to float data"
+#Sequence|ImageSequence.use_premultiply -> use_premultiply: boolean "Convert RGB from key alpha to premultiplied alpha"
+#+ * Sequence|ImageSequence.use_proxy -> use_proxy: boolean "Use a preview proxy for this strip"
+#Sequence|ImageSequence.use_proxy_custom_directory -> use_proxy_custom_directory: boolean "Use a custom directory to store data"
+#Sequence|ImageSequence.use_proxy_custom_file -> use_proxy_custom_file: boolean "Use a custom file to read proxy data from"
+#Sequence|ImageSequence.use_reverse_frames -> use_reverse_frames: boolean "Reverse frame order"
+#+ * Sequence|ImageSequence.use_translation -> use_translation: boolean "Translate image before processing"
+#Sequence|MetaSequence.animation_offset_end -> animation_offset_end: int "Animation end offset (trim end)"
+#Sequence|MetaSequence.animation_offset_start -> animation_offset_start: int "Animation start offset (trim start)"
+#+ * Sequence|MetaSequence.color_balance -> color_balance: pointer, "(read-only)"
+#Sequence|MetaSequence.color_multiply -> color_multiply: float "NO DESCRIPTION"
+#+ * Sequence|MetaSequence.color_saturation -> color_saturation: float "NO DESCRIPTION"
+#+ * Sequence|MetaSequence.crop -> crop: pointer, "(read-only)"
+#+ * Sequence|MetaSequence.proxy -> proxy: pointer, "(read-only)"
+#+ * Sequence|MetaSequence.sequences -> sequences: collection, "(read-only)"
+#+ * Sequence|MetaSequence.strobe -> strobe: float "Only display every nth frame"
+#+ * Sequence|MetaSequence.transform -> transform: pointer, "(read-only)"
+#+ * Sequence|MetaSequence.use_color_balance -> use_color_balance: boolean "(3-Way color correction) on input"
+#+ * Sequence|MetaSequence.use_crop -> use_crop: boolean "Crop image before processing"
+#Sequence|MetaSequence.use_deinterlace -> use_deinterlace: boolean "For video movies to remove fields"
+#Sequence|MetaSequence.use_flip_x -> use_flip_x: boolean "Flip on the X axis"
+#Sequence|MetaSequence.use_flip_y -> use_flip_y: boolean "Flip on the Y axis"
+#Sequence|MetaSequence.use_float -> use_float: boolean "Convert input to float data"
+#Sequence|MetaSequence.use_premultiply -> use_premultiply: boolean "Convert RGB from key alpha to premultiplied alpha"
+#+ * Sequence|MetaSequence.use_proxy -> use_proxy: boolean "Use a preview proxy for this strip"
+#Sequence|MetaSequence.use_proxy_custom_directory -> use_proxy_custom_directory: boolean "Use a custom directory to store data"
+#Sequence|MetaSequence.use_proxy_custom_file -> use_proxy_custom_file: boolean "Use a custom file to read proxy data from"
+#Sequence|MetaSequence.use_reverse_frames -> use_reverse_frames: boolean "Reverse frame order"
+#+ * Sequence|MetaSequence.use_translation -> use_translation: boolean "Translate image before processing"
+#Sequence|MovieSequence.animation_offset_end -> animation_offset_end: int "Animation end offset (trim end)"
+#Sequence|MovieSequence.animation_offset_start -> animation_offset_start: int "Animation start offset (trim start)"
+#+ * Sequence|MovieSequence.color_balance -> color_balance: pointer, "(read-only)"
+#Sequence|MovieSequence.color_multiply -> color_multiply: float "NO DESCRIPTION"
+#+ * Sequence|MovieSequence.color_saturation -> color_saturation: float "NO DESCRIPTION"
+#+ * Sequence|MovieSequence.crop -> crop: pointer, "(read-only)"
+#+ * Sequence|MovieSequence.filepath -> filepath: string "NO DESCRIPTION"
+#+ * Sequence|MovieSequence.mpeg_preseek -> mpeg_preseek: int "For MPEG movies, preseek this many frames"
+#+ * Sequence|MovieSequence.proxy -> proxy: pointer, "(read-only)"
+#+ * Sequence|MovieSequence.strobe -> strobe: float "Only display every nth frame"
+#+ * Sequence|MovieSequence.transform -> transform: pointer, "(read-only)"
+#+ * Sequence|MovieSequence.use_color_balance -> use_color_balance: boolean "(3-Way color correction) on input"
+#+ * Sequence|MovieSequence.use_crop -> use_crop: boolean "Crop image before processing"
+#Sequence|MovieSequence.use_deinterlace -> use_deinterlace: boolean "For video movies to remove fields"
+#Sequence|MovieSequence.use_flip_x -> use_flip_x: boolean "Flip on the X axis"
+#Sequence|MovieSequence.use_flip_y -> use_flip_y: boolean "Flip on the Y axis"
+#Sequence|MovieSequence.use_float -> use_float: boolean "Convert input to float data"
+#Sequence|MovieSequence.use_premultiply -> use_premultiply: boolean "Convert RGB from key alpha to premultiplied alpha"
+#+ * Sequence|MovieSequence.use_proxy -> use_proxy: boolean "Use a preview proxy for this strip"
+#Sequence|MovieSequence.use_proxy_custom_directory -> use_proxy_custom_directory: boolean "Use a custom directory to store data"
+#Sequence|MovieSequence.use_proxy_custom_file -> use_proxy_custom_file: boolean "Use a custom file to read proxy data from"
+#Sequence|MovieSequence.use_reverse_frames -> use_reverse_frames: boolean "Reverse frame order"
+#+ * Sequence|MovieSequence.use_translation -> use_translation: boolean "Translate image before processing"
+#Sequence|MulticamSequence.animation_offset_end -> animation_offset_end: int "Animation end offset (trim end)"
+#Sequence|MulticamSequence.animation_offset_start -> animation_offset_start: int "Animation start offset (trim start)"
+#+ * Sequence|MulticamSequence.color_balance -> color_balance: pointer, "(read-only)"
+#Sequence|MulticamSequence.color_multiply -> color_multiply: float "NO DESCRIPTION"
+#+ * Sequence|MulticamSequence.color_saturation -> color_saturation: float "NO DESCRIPTION"
+#+ * Sequence|MulticamSequence.crop -> crop: pointer, "(read-only)"
+#+ * Sequence|MulticamSequence.multicam_source -> multicam_source: int "NO DESCRIPTION"
+#+ * Sequence|MulticamSequence.proxy -> proxy: pointer, "(read-only)"
+#+ * Sequence|MulticamSequence.strobe -> strobe: float "Only display every nth frame"
+#+ * Sequence|MulticamSequence.transform -> transform: pointer, "(read-only)"
+#+ * Sequence|MulticamSequence.use_color_balance -> use_color_balance: boolean "(3-Way color correction) on input"
+#+ * Sequence|MulticamSequence.use_crop -> use_crop: boolean "Crop image before processing"
+#Sequence|MulticamSequence.use_deinterlace -> use_deinterlace: boolean "For video movies to remove fields"
+#Sequence|MulticamSequence.use_flip_x -> use_flip_x: boolean "Flip on the X axis"
+#Sequence|MulticamSequence.use_flip_y -> use_flip_y: boolean "Flip on the Y axis"
+#Sequence|MulticamSequence.use_float -> use_float: boolean "Convert input to float data"
+#Sequence|MulticamSequence.use_premultiply -> use_premultiply: boolean "Convert RGB from key alpha to premultiplied alpha"
+#+ * Sequence|MulticamSequence.use_proxy -> use_proxy: boolean "Use a preview proxy for this strip"
+#Sequence|MulticamSequence.use_proxy_custom_directory -> use_proxy_custom_directory: boolean "Use a custom directory to store data"
+#Sequence|MulticamSequence.use_proxy_custom_file -> use_proxy_custom_file: boolean "Use a custom file to read proxy data from"
+#Sequence|MulticamSequence.use_reverse_frames -> use_reverse_frames: boolean "Reverse frame order"
+#+ * Sequence|MulticamSequence.use_translation -> use_translation: boolean "Translate image before processing"
+#Sequence|SceneSequence.animation_offset_end -> animation_offset_end: int "Animation end offset (trim end)"
+#Sequence|SceneSequence.animation_offset_start -> animation_offset_start: int "Animation start offset (trim start)"
+#+ * Sequence|SceneSequence.color_balance -> color_balance: pointer, "(read-only)"
+#Sequence|SceneSequence.color_multiply -> color_multiply: float "NO DESCRIPTION"
+#+ * Sequence|SceneSequence.color_saturation -> color_saturation: float "NO DESCRIPTION"
+#+ * Sequence|SceneSequence.crop -> crop: pointer, "(read-only)"
+#+ * Sequence|SceneSequence.proxy -> proxy: pointer, "(read-only)"
+#+ * Sequence|SceneSequence.scene -> scene: pointer "Scene that this sequence uses"
+#+ * Sequence|SceneSequence.scene_camera -> scene_camera: pointer "Override the scenes active camera"
+#+ * Sequence|SceneSequence.strobe -> strobe: float "Only display every nth frame"
+#+ * Sequence|SceneSequence.transform -> transform: pointer, "(read-only)"
+#+ * Sequence|SceneSequence.use_color_balance -> use_color_balance: boolean "(3-Way color correction) on input"
+#+ * Sequence|SceneSequence.use_crop -> use_crop: boolean "Crop image before processing"
+#Sequence|SceneSequence.use_deinterlace -> use_deinterlace: boolean "For video movies to remove fields"
+#Sequence|SceneSequence.use_flip_x -> use_flip_x: boolean "Flip on the X axis"
+#Sequence|SceneSequence.use_flip_y -> use_flip_y: boolean "Flip on the Y axis"
+#Sequence|SceneSequence.use_float -> use_float: boolean "Convert input to float data"
+#Sequence|SceneSequence.use_premultiply -> use_premultiply: boolean "Convert RGB from key alpha to premultiplied alpha"
+#+ * Sequence|SceneSequence.use_proxy -> use_proxy: boolean "Use a preview proxy for this strip"
+#Sequence|SceneSequence.use_proxy_custom_directory -> use_proxy_custom_directory: boolean "Use a custom directory to store data"
+#Sequence|SceneSequence.use_proxy_custom_file -> use_proxy_custom_file: boolean "Use a custom file to read proxy data from"
+#Sequence|SceneSequence.use_reverse_frames -> use_reverse_frames: boolean "Reverse frame order"
+#+ * Sequence|SceneSequence.use_translation -> use_translation: boolean "Translate image before processing"
+#Sequence|SoundSequence.animation_offset_end -> animation_offset_end: int "Animation end offset (trim end)"
+#Sequence|SoundSequence.animation_offset_start -> animation_offset_start: int "Animation start offset (trim start)"
+#+ * Sequence|SoundSequence.attenuation -> attenuation: float "Attenuation in dezibel"
+#+ * Sequence|SoundSequence.filepath -> filepath: string "NO DESCRIPTION"
+#+ * Sequence|SoundSequence.sound -> sound: pointer, "(read-only) Sound datablock used by this sequence"
+#+ * Sequence|SoundSequence.volume -> volume: float "Playback volume of the sound"
+#+ * ShapeKey.data -> data: collection, "(read-only)"
+#+ * ShapeKey.frame -> frame: float, "(read-only) Frame for absolute keys"
+#+ * ShapeKey.interpolation -> interpolation: enum "Interpolation type"
+#+ * ShapeKey.mute -> mute: boolean "Mute this shape key"
+#+ * ShapeKey.name -> name: string "NO DESCRIPTION"
+#+ * ShapeKey.relative_key -> relative_key: pointer "Shape used as a relative key"
+#+ * ShapeKey.slider_max -> slider_max: float "Maximum for slider"
+#+ * ShapeKey.slider_min -> slider_min: float "Minimum for slider"
+#+ * ShapeKey.value -> value: float "Value of shape key at the current frame"
+#+ * ShapeKey.vertex_group -> vertex_group: string "Vertex weight group, to blend with basis shape"
+#+ * ShapeKeyBezierPoint.co -> co: float[3] "NO DESCRIPTION"
+#ShapeKeyBezierPoint.handle_left -> handle_left: float[3] "NO DESCRIPTION"
+#ShapeKeyBezierPoint.handle_right -> handle_right: float[3] "NO DESCRIPTION"
+#+ * ShapeKeyCurvePoint.co -> co: float[3] "NO DESCRIPTION"
+#+ * ShapeKeyCurvePoint.tilt -> tilt: float "NO DESCRIPTION"
+#+ * ShapeKeyPoint.co -> co: float[3] "NO DESCRIPTION"
+#TODO BETTER NAME * SmokeDomainSettings.alpha -> alpha: float "Higher value results in sinking smoke"
+#+ * SmokeDomainSettings.amplify -> amplify: int "Enhance the resolution of smoke by this factor using noise"
+#TODO BETTER NAME * SmokeDomainSettings.beta -> beta: float "Higher value results in faster rising smoke"
+#SmokeDomainSettings.collision_extents -> collision_extents: enum "Selects which domain border will be treated as collision object."
+#SmokeDomainSettings.collision_group -> collision_group: pointer "Limit collisions to this group"
+#+ * SmokeDomainSettings.dissolve_speed -> dissolve_speed: int "Dissolve Speed"
+#+ * SmokeDomainSettings.eff_group -> eff_group: pointer "Limit effectors to this group"
+#+ * SmokeDomainSettings.effector_weights -> effector_weights: pointer, "(read-only)"
+#+ * SmokeDomainSettings.fluid_group -> fluid_group: pointer "Limit fluid objects to this group"
+#+ * SmokeDomainSettings.noise_type -> noise_type: enum "Noise method which is used for creating the high resolution"
+#SmokeDomainSettings.point_cache_compress_high_type -> point_cache_compress_high_type: enum "Compression method to be used"
+#SmokeDomainSettings.point_cache_compress_type -> point_cache_compress_type: enum "Compression method to be used"
+#+ * SmokeDomainSettings.point_cache_high -> point_cache_high: pointer, "(read-only)"
+#+ * SmokeDomainSettings.point_cache_low -> point_cache_low: pointer, "(read-only)"
+#SmokeDomainSettings.resolution_max -> resolution_max: int "Maximal resolution used in the fluid domain"
+#SmokeDomainSettings.show_high_resolution -> show_high_resolution: boolean "Show high resolution (using amplification)"
+#SmokeDomainSettings.smooth_emitter -> smooth_emitter: boolean "Smoothens emitted smoke to avoid blockiness."
+#+ * SmokeDomainSettings.strength -> strength: float "Strength of wavelet noise"
+#+ * SmokeDomainSettings.time_scale -> time_scale: float "Adjust simulation speed."
+#SmokeDomainSettings.use_dissolve_smoke -> use_dissolve_smoke: boolean "Enable smoke to disappear over time"
+#SmokeDomainSettings.use_dissolve_smoke_log -> use_dissolve_smoke_log: boolean "Using 1/x"
+#SmokeDomainSettings.use_high_resolution -> use_high_resolution: boolean "Enable high resolution (using amplification)"
+#+ * SmokeDomainSettings.vorticity -> vorticity: float "Amount of turbulence/rotation in fluid."
+#+ * SmokeFlowSettings.density -> density: float "NO DESCRIPTION"
+#+ * SmokeFlowSettings.initial_velocity -> initial_velocity: boolean "Smoke inherits its velocity from the emitter particle"
+#SmokeFlowSettings.particle_system -> particle_system: pointer "Particle systems emitted from the object"
+#+ * SmokeFlowSettings.temperature -> temperature: float "Temperature difference to ambient temperature"
+#SmokeFlowSettings.use_absolute -> use_absolute: boolean "Only allows given density value in emitter area."
+#SmokeFlowSettings.use_outflow -> use_outflow: boolean "Deletes smoke from simulation"
+#SmokeFlowSettings.velocity_factor -> velocity_factor: float "Multiplier to adjust velocity passed to smoke"
+#+ * SoftBodySettings.aero -> aero: float "Make edges sail"
+#+ * SoftBodySettings.aerodynamics_type -> aerodynamics_type: enum "Method of calculating aerodynamic interaction"
+#+ * SoftBodySettings.ball_damp -> ball_damp: float "Blending to inelastic collision"
+#+ * SoftBodySettings.ball_size -> ball_size: float "Absolute ball size or factor if not manual adjusted"
+#+ * SoftBodySettings.ball_stiff -> ball_stiff: float "Ball inflating pressure"
+#SoftBodySettings.bend -> bend: float "Bending Stiffness"
+#+ * SoftBodySettings.choke -> choke: int "Viscosity inside collision target"
+#+ * SoftBodySettings.collision_type -> collision_type: enum "Choose Collision Type"
+#SoftBodySettings.damping -> damping: float "Edge spring friction"
+#+ * SoftBodySettings.effector_weights -> effector_weights: pointer, "(read-only)"
+#SoftBodySettings.error_threshold -> error_threshold: float "The Runge-Kutta ODE solver error limit, low value gives more precision, high values speed"
+#+ * SoftBodySettings.friction -> friction: float "General media friction for point movements"
+#+ * SoftBodySettings.fuzzy -> fuzzy: int "Fuzziness while on collision, high values make collsion handling faster but less stable"
+#+ * SoftBodySettings.goal_default -> goal_default: float "Default Goal (vertex target position) value, when no Vertex Group used"
+#+ * SoftBodySettings.goal_friction -> goal_friction: float "Goal (vertex target position) friction"
+#+ * SoftBodySettings.goal_max -> goal_max: float "Goal maximum, vertex weights are scaled to match this range"
+#+ * SoftBodySettings.goal_min -> goal_min: float "Goal minimum, vertex weights are scaled to match this range"
+#+ * SoftBodySettings.goal_spring -> goal_spring: float "Goal (vertex target position) spring stiffness"
+#+ * SoftBodySettings.goal_vertex_group -> goal_vertex_group: string "Control point weight values"
+#+ * SoftBodySettings.gravity -> gravity: float "Apply gravitation to point movement"
+#SoftBodySettings.location_mass_center -> location_mass_center: float[3] "Location of Center of mass"
+#+ * SoftBodySettings.mass -> mass: float "General Mass value"
+#+ * SoftBodySettings.mass_vertex_group -> mass_vertex_group: string "Control point mass values"
+#+ * SoftBodySettings.plastic -> plastic: float "Permanent deform"
+#+ * SoftBodySettings.pull -> pull: float "Edge spring stiffness when longer than rest length"
+#+ * SoftBodySettings.push -> push: float "Edge spring stiffness when shorter than rest length"
+#SoftBodySettings.rotation_estimate -> rotation_estimate: float[9] "Estimated rotation matrix"
+#SoftBodySettings.scale_estimate -> scale_estimate: float[9] "Estimated scale matrix"
+#+ * SoftBodySettings.shear -> shear: float "Shear Stiffness"
+#+ * SoftBodySettings.speed -> speed: float "Tweak timing for physics to control frequency and speed"
+#+ * SoftBodySettings.spring_length -> spring_length: float "Alter spring length to shrink/blow up (unit %) 0 to disable"
+#+ * SoftBodySettings.spring_vertex_group -> spring_vertex_group: string "Control point spring strength values"
+#SoftBodySettings.step_max -> step_max: int "Maximal # solver steps/frame"
+#SoftBodySettings.step_min -> step_min: int "Minimal # solver steps/frame"
+#SoftBodySettings.use_auto_step -> use_auto_step: boolean "Use velocities for automagic step sizes"
+#SoftBodySettings.use_diagnose -> use_diagnose: boolean "Turn on SB diagnose console prints"
+#SoftBodySettings.use_edge_collision -> use_edge_collision: boolean "Edges collide too"
+#+ * SoftBodySettings.use_edges -> use_edges: boolean "Use Edges as springs"
+#SoftBodySettings.use_estimate_matrix -> use_estimate_matrix: boolean "estimate matrix .. split to COM , ROT ,SCALE"
+#SoftBodySettings.use_face_collision -> use_face_collision: boolean "Faces collide too, can be very slow"
+#+ * SoftBodySettings.use_goal -> use_goal: boolean "Define forces for vertices to stick to animated position"
+#SoftBodySettings.use_self_collision -> use_self_collision: boolean "Enable naive vertex ball self collision"
+#SoftBodySettings.use_stiff_quads -> use_stiff_quads: boolean "Adds diagonal springs on 4-gons"
+#+ * Space.type -> type: enum, "(read-only) Space data type"
+#+ * SpaceUVEditor.cursor_location -> cursor_location: float[2] "2D cursor location for this view"
+#+ * SpaceUVEditor.draw_stretch_type -> draw_stretch_type: enum "Type of stretch to draw"
+#+ * SpaceUVEditor.edge_draw_type -> edge_draw_type: enum "Draw type for drawing UV edges"
+#SpaceUVEditor.lock_bounds -> lock_bounds: boolean "Constraint to stay within the image bounds while editing"
+#SpaceUVEditor.pivot_point -> pivot_point: enum "Rotation/Scaling Pivot"
+#SpaceUVEditor.show_modified_edges -> show_modified_edges: boolean "Draw edges after modifiers are applied"
+#SpaceUVEditor.show_normalized_coords -> show_normalized_coords: boolean "Display UV coordinates from 0.0 to 1.0 rather than in pixels"
+#SpaceUVEditor.show_other_objects -> show_other_objects: boolean "Draw other selected objects that share the same image"
+#SpaceUVEditor.show_smooth_edges -> show_smooth_edges: boolean "Draw UV edges anti-aliased"
+#SpaceUVEditor.show_stretch -> show_stretch: boolean "Draw faces colored according to the difference in shape between UVs and their 3D coordinates (blue for low distortion, red for high distortion)"
+#SpaceUVEditor.sticky_select_mode -> sticky_select_mode: enum "Automatically select also UVs sharing the same vertex as the ones being selected"
+#SpaceUVEditor.use_live_unwrap -> use_live_unwrap: boolean "Continuously unwrap the selected UV island while transforming pinned vertices"
+#SpaceUVEditor.use_snap_to_pixels -> use_snap_to_pixels: boolean "Snap UVs to pixel locations while editing"
+#+ * Space|SpaceConsole.console_type -> console_type: enum "Console type"
+#+ * Space|SpaceConsole.font_size -> font_size: int "Font size to use for displaying the text"
+#+ * Space|SpaceConsole.history -> history: collection, "(read-only) Command history"
+#+ * Space|SpaceConsole.language -> language: string "Command line prompt language"
+#+ * Space|SpaceConsole.prompt -> prompt: string "Command line prompt"
+#+ * Space|SpaceConsole.scrollback -> scrollback: collection, "(read-only) Command output"
+#Space|SpaceConsole.select_end -> select_end: int "NO DESCRIPTION"
+#Space|SpaceConsole.select_start -> select_start: int "NO DESCRIPTION"
+#+ * Space|SpaceConsole.show_report_debug -> show_report_debug: boolean "Display debug reporting info"
+#+ * Space|SpaceConsole.show_report_error -> show_report_error: boolean "Display error text"
+#+ * Space|SpaceConsole.show_report_info -> show_report_info: boolean "Display general information"
+#+ * Space|SpaceConsole.show_report_operator -> show_report_operator: boolean "Display the operator log"
+#Space|SpaceConsole.show_report_warning -> show_report_warning: boolean "Display warnings"
+#+ * Space|SpaceDopeSheetEditor.action -> action: pointer "Action displayed and edited in this space"
+#Space|SpaceDopeSheetEditor.auto_snap -> auto_snap: enum "Automatic time snapping settings for transformations"
+#+ * Space|SpaceDopeSheetEditor.dopesheet -> dopesheet: pointer, "(read-only) Settings for filtering animation data"
+#+ * Space|SpaceDopeSheetEditor.mode -> mode: enum "Editing context being displayed"
+#Space|SpaceDopeSheetEditor.show_frame_indicator -> show_frame_indicator: boolean "Show frame number beside the current frame indicator line"
+#+ * Space|SpaceDopeSheetEditor.show_seconds -> show_seconds: boolean, "(read-only) Show timing in seconds not frames"
+#+ * Space|SpaceDopeSheetEditor.show_sliders -> show_sliders: boolean "Show sliders beside F-Curve channels"
+#Space|SpaceDopeSheetEditor.use_auto_merge_keyframes -> use_auto_merge_keyframes: boolean "Automatically merge nearby keyframes"
+#+ * Space|SpaceDopeSheetEditor.use_marker_sync -> use_marker_sync: boolean "Sync Markers with keyframe edits"
+#Space|SpaceDopeSheetEditor.use_realtime_update -> use_realtime_update: boolean "When transforming keyframes, changes to the animation data are flushed to other views"
+#+ * Space|SpaceFileBrowser.params -> params: pointer, "(read-only) Parameters and Settings for the Filebrowser"
+#Space|SpaceGraphEditor.auto_snap -> auto_snap: enum "Automatic time snapping settings for transformations"
+#Space|SpaceGraphEditor.cursor_position_y -> cursor_position_y: float "Graph Editor 2D-Value cursor - Y-Value component"
+#+ * Space|SpaceGraphEditor.dopesheet -> dopesheet: pointer, "(read-only) Settings for filtering animation data"
+#+ * Space|SpaceGraphEditor.has_ghost_curves -> has_ghost_curves: boolean "Graph Editor instance has some ghost curves stored"
+#+ * Space|SpaceGraphEditor.mode -> mode: enum "Editing context being displayed"
+#+ * Space|SpaceGraphEditor.pivot_point -> pivot_point: enum "Pivot center for rotation/scaling"
+#+ * Space|SpaceGraphEditor.show_cursor -> show_cursor: boolean "Show 2D cursor"
+#Space|SpaceGraphEditor.show_frame_indicator -> show_frame_indicator: boolean "Show frame number beside the current frame indicator line"
+#+ * Space|SpaceGraphEditor.show_handles -> show_handles: boolean "Show handles of Bezier control points"
+#+ * Space|SpaceGraphEditor.show_seconds -> show_seconds: boolean, "(read-only) Show timing in seconds not frames"
+#+ * Space|SpaceGraphEditor.show_sliders -> show_sliders: boolean "Show sliders beside F-Curve channels"
+#Space|SpaceGraphEditor.use_auto_merge_keyframes -> use_auto_merge_keyframes: boolean "Automatically merge nearby keyframes"
+#Space|SpaceGraphEditor.use_only_selected_curves_handles -> use_only_selected_curves_handles: boolean "Only keyframes of selected F-Curves are visible and editable"
+#Space|SpaceGraphEditor.use_only_selected_keyframe_handles -> use_only_selected_keyframe_handles: boolean "Only show and edit handles of selected keyframes"
+#Space|SpaceGraphEditor.use_realtime_update -> use_realtime_update: boolean "When transforming keyframes, changes to the animation data are flushed to other views"
+#+ * Space|SpaceImageEditor.curves -> curves: pointer, "(read-only) Color curve mapping to use for displaying the image"
+#+ * Space|SpaceImageEditor.draw_channels -> draw_channels: enum "Channels of the image to draw"
+#+ * Space|SpaceImageEditor.grease_pencil -> grease_pencil: pointer "Grease pencil data for this space"
+#+ * Space|SpaceImageEditor.image -> image: pointer "Image displayed and edited in this space"
+#+ * Space|SpaceImageEditor.image_user -> image_user: pointer, "(read-only) Parameters defining which layer, pass and frame of the image is displayed"
+#+ * Space|SpaceImageEditor.sample_histogram -> sample_histogram: pointer, "(read-only) Sampled colors along line"
+#+ * Space|SpaceImageEditor.scopes -> scopes: pointer, "(read-only) Scopes to visualize image statistics."
+#+ * Space|SpaceImageEditor.show_paint -> show_paint: boolean, "(read-only) Show paint related properties"
+#+ * Space|SpaceImageEditor.show_render -> show_render: boolean, "(read-only) Show render related properties"
+#Space|SpaceImageEditor.show_repeat -> show_repeat: boolean "Draw the image repeated outside of the main view"
+#+ * Space|SpaceImageEditor.show_uvedit -> show_uvedit: boolean, "(read-only) Show UV editing related properties"
+#+ * Space|SpaceImageEditor.use_grease_pencil -> use_grease_pencil: boolean "Display and edit the grease pencil freehand annotations overlay"
+#Space|SpaceImageEditor.use_image_paint -> use_image_paint: boolean "Enable image painting mode"
+#Space|SpaceImageEditor.use_image_pin -> use_image_pin: boolean "Display current image regardless of object selection"
+#Space|SpaceImageEditor.use_realtime_update -> use_realtime_update: boolean "Update other affected window spaces automatically to reflect changes during interactive operations such as transform"
+#+ * Space|SpaceImageEditor.uv_editor -> uv_editor: pointer, "(read-only) UV editor settings"
+#Space|SpaceLogicEditor.show_actuators_active_object -> show_actuators_active_object: boolean "Show actuators of active object"
+#Space|SpaceLogicEditor.show_actuators_active_states -> show_actuators_active_states: boolean "Show only actuators connected to active states"
+#Space|SpaceLogicEditor.show_actuators_linked_controller -> show_actuators_linked_controller: boolean "Show linked objects to the actuator"
+#Space|SpaceLogicEditor.show_actuators_selected_objects -> show_actuators_selected_objects: boolean "Show actuators of all selected objects"
+#Space|SpaceLogicEditor.show_controllers_active_object -> show_controllers_active_object: boolean "Show controllers of active object"
+#Space|SpaceLogicEditor.show_controllers_linked_controller -> show_controllers_linked_controller: boolean "Show linked objects to sensor/actuator"
+#Space|SpaceLogicEditor.show_controllers_selected_objects -> show_controllers_selected_objects: boolean "Show controllers of all selected objects"
+#Space|SpaceLogicEditor.show_sensors_active_object -> show_sensors_active_object: boolean "Show sensors of active object"
+#Space|SpaceLogicEditor.show_sensors_active_states -> show_sensors_active_states: boolean "Show only sensors connected to active states"
+#Space|SpaceLogicEditor.show_sensors_linked_controller -> show_sensors_linked_controller: boolean "Show linked objects to the controller"
+#Space|SpaceLogicEditor.show_sensors_selected_objects -> show_sensors_selected_objects: boolean "Show sensors of all selected objects"
+#Space|SpaceNLA.auto_snap -> auto_snap: enum "Automatic time snapping settings for transformations"
+#+ * Space|SpaceNLA.dopesheet -> dopesheet: pointer, "(read-only) Settings for filtering animation data"
+#Space|SpaceNLA.show_frame_indicator -> show_frame_indicator: boolean "Show frame number beside the current frame indicator line"
+#+ * Space|SpaceNLA.show_seconds -> show_seconds: boolean, "(read-only) Show timing in seconds not frames"
+#+ * Space|SpaceNLA.show_strip_curves -> show_strip_curves: boolean "Show influence curves on strips"
+#Space|SpaceNLA.use_realtime_update -> use_realtime_update: boolean "When transforming strips, changes to the animation data are flushed to other views"
+#+ * Space|SpaceNodeEditor.id -> id: pointer, "(read-only) Datablock whose nodes are being edited"
+#+ * Space|SpaceNodeEditor.id_from -> id_from: pointer, "(read-only) Datablock from which the edited datablock is linked"
+#+ * Space|SpaceNodeEditor.nodetree -> nodetree: pointer, "(read-only) Node tree being displayed and edited"
+#Space|SpaceNodeEditor.show_backdrop -> show_backdrop: boolean "Use active Viewer Node output as backdrop for compositing nodes"
+#+ * Space|SpaceNodeEditor.texture_type -> texture_type: enum "Type of data to take texture from"
+#+ * Space|SpaceNodeEditor.tree_type -> tree_type: enum "Node tree type to display and edit"
+#+ * Space|SpaceOutliner.display_mode -> display_mode: enum "Type of information to display"
+#Space|SpaceOutliner.filter_text -> filter_text: string "Live search filtering string"
+#Space|SpaceOutliner.show_restrict_columns -> show_restrict_columns: boolean "Show column"
+#Space|SpaceOutliner.use_filter_case_sensitive -> use_filter_case_sensitive: boolean "Only use case sensitive matches of search string"
+#Space|SpaceOutliner.use_filter_complete -> use_filter_complete: boolean "Only use complete matches of search string"
+#+ * Space|SpaceProperties.align -> align: enum "Arrangement of the panels"
+#+ * Space|SpaceProperties.context -> context: enum "Type of active data to display and edit"
+#+ * Space|SpaceProperties.pin_id -> pin_id: pointer "NO DESCRIPTION"
+#Space|SpaceProperties.show_brush_texture -> show_brush_texture: boolean "Show brush textures"
+#+ * Space|SpaceProperties.use_pin_id -> use_pin_id: boolean "Use the pinned context"
+#+ * Space|SpaceSequenceEditor.display_channel -> display_channel: int "The channel number shown in the image preview. 0 is the result of all strips combined"
+#+ * Space|SpaceSequenceEditor.display_mode -> display_mode: enum "The view mode to use for displaying sequencer output"
+#+ * Space|SpaceSequenceEditor.draw_overexposed -> draw_overexposed: int "Show overexposed areas with zebra stripes"
+#+ * Space|SpaceSequenceEditor.grease_pencil -> grease_pencil: pointer, "(read-only) Grease pencil data for this space"
+#+ * Space|SpaceSequenceEditor.offset_x -> offset_x: float "Offsets image horizontally from the view center"
+#+ * Space|SpaceSequenceEditor.offset_y -> offset_y: float "Offsets image horizontally from the view center"
+#+ * Space|SpaceSequenceEditor.proxy_render_size -> proxy_render_size: enum "Draw preview using full resolution or different proxy resolutions"
+#Space|SpaceSequenceEditor.show_frame_indicator -> show_frame_indicator: boolean "Show frame number beside the current frame indicator line"
+#Space|SpaceSequenceEditor.show_frames -> show_frames: boolean "Draw frames rather than seconds"
+#Space|SpaceSequenceEditor.show_safe_margin -> show_safe_margin: boolean "Draw title safe margins in preview"
+#Space|SpaceSequenceEditor.show_separate_color -> show_separate_color: boolean "Separate color channels in preview"
+#+ * Space|SpaceSequenceEditor.use_grease_pencil -> use_grease_pencil: boolean "Display and edit the grease pencil freehand annotations overlay"
+#+ * Space|SpaceSequenceEditor.use_marker_sync -> use_marker_sync: boolean "Transform markers as well as strips"
+#+ * Space|SpaceSequenceEditor.view_type -> view_type: enum "The type of the Sequencer view (sequencer, preview or both)"
+#+ * Space|SpaceSequenceEditor.zoom -> zoom: float "Display zoom level"
+#+ * Space|SpaceTextEditor.find_text -> find_text: string "Text to search for with the find tool"
+#+ * Space|SpaceTextEditor.font_size -> font_size: int "Font size to use for displaying the text"
+#+ * Space|SpaceTextEditor.replace_text -> replace_text: string "Text to replace selected text with using the replace tool"
+#Space|SpaceTextEditor.show_line_highlight -> show_line_highlight: boolean "Highlight the current line"
+#+ * Space|SpaceTextEditor.show_line_numbers -> show_line_numbers: boolean "Show line numbers next to the text"
+#+ * Space|SpaceTextEditor.show_syntax_highlight -> show_syntax_highlight: boolean "Syntax highlight for scripting"
+#+ * Space|SpaceTextEditor.show_word_wrap -> show_word_wrap: boolean "Wrap words if there is not enough horizontal space"
+#+ * Space|SpaceTextEditor.tab_width -> tab_width: int "Number of spaces to display tabs with"
+#+ * Space|SpaceTextEditor.text -> text: pointer "Text displayed and edited in this space"
+#Space|SpaceTextEditor.use_find_all -> use_find_all: boolean "Search in all text datablocks, instead of only the active one"
+#Space|SpaceTextEditor.use_find_wrap -> use_find_wrap: boolean "Search again from the start of the file when reaching the end"
+#Space|SpaceTextEditor.use_live_edit -> use_live_edit: boolean "Run python while editing"
+#Space|SpaceTextEditor.use_overwrite -> use_overwrite: boolean "Overwrite characters when typing rather than inserting them"
+#+ * Space|SpaceTimeline.cache_cloth -> cache_cloth: boolean "Show the active objects cloth point cache"
+#+ * Space|SpaceTimeline.cache_particles -> cache_particles: boolean "Show the active objects particle point cache"
+#+ * Space|SpaceTimeline.cache_smoke -> cache_smoke: boolean "Show the active objects smoke cache"
+#+ * Space|SpaceTimeline.cache_softbody -> cache_softbody: boolean "Show the active objects softbody point cache"
+#+ * Space|SpaceTimeline.show_cache -> show_cache: boolean "Show the status of cached frames in the timeline"
+#Space|SpaceTimeline.show_frame_indicator -> show_frame_indicator: boolean "Show frame number beside the current frame indicator line"
+#Space|SpaceTimeline.show_only_selected -> show_only_selected: boolean "Show keyframes for active Object and/or its selected channels only"
+#Space|SpaceTimeline.use_play_3d_editors -> use_play_3d_editors: boolean "NO DESCRIPTION"
+#Space|SpaceTimeline.use_play_animation_editors -> use_play_animation_editors: boolean "NO DESCRIPTION"
+#Space|SpaceTimeline.use_play_image_editors -> use_play_image_editors: boolean "NO DESCRIPTION"
+#Space|SpaceTimeline.use_play_node_editors -> use_play_node_editors: boolean "NO DESCRIPTION"
+#Space|SpaceTimeline.use_play_properties_editors -> use_play_properties_editors: boolean "NO DESCRIPTION"
+#Space|SpaceTimeline.use_play_sequence_editors -> use_play_sequence_editors: boolean "NO DESCRIPTION"
+#Space|SpaceTimeline.use_play_top_left_3d_editor -> use_play_top_left_3d_editor: boolean "NO DESCRIPTION"
+#Space|SpaceUserPreferences.filter_text -> filter_text: string "Search term for filtering in the UI"
+#+ * Space|SpaceView3D.background_images -> background_images: collection, "(read-only) List of background images"
+#+ * Space|SpaceView3D.camera -> camera: pointer "Active camera used in this view (when unlocked from the scenes active camera)"
+#+ * Space|SpaceView3D.clip_end -> clip_end: float "3D View far clipping distance"
+#+ * Space|SpaceView3D.clip_start -> clip_start: float "3D View near clipping distance"
+#+ * Space|SpaceView3D.current_orientation -> current_orientation: pointer, "(read-only) Current Transformation orientation"
+#+ * Space|SpaceView3D.cursor_location -> cursor_location: float[3] "3D cursor location for this view (dependent on local view setting)"
+#+ * Space|SpaceView3D.grid_lines -> grid_lines: int "The number of grid lines to display in perspective view"
+#+ * Space|SpaceView3D.grid_spacing -> grid_spacing: float "The distance between 3D View grid lines"
+#+ * Space|SpaceView3D.grid_subdivisions -> grid_subdivisions: int "The number of subdivisions between grid lines"
+#+ * Space|SpaceView3D.layers -> layers: boolean[20] "Layers visible in this 3D View"
+#Space|SpaceView3D.layers_used -> layers_used: boolean[20], "(read-only) Layers that contain something"
+#+ * Space|SpaceView3D.lens -> lens: float "Lens angle (mm) in perspective view"
+#+ * Space|SpaceView3D.local_view -> local_view: pointer, "(read-only) Display an isolated sub-set of objects, apart from the scene visibility"
+#+ * Space|SpaceView3D.lock_bone -> lock_bone: string "3D View center is locked to this bones position"
+#+ * Space|SpaceView3D.lock_camera_and_layers -> lock_camera_and_layers: boolean "Use the scenes active camera and layers in this view, rather than local layers"
+#+ * Space|SpaceView3D.lock_object -> lock_object: pointer "3D View center is locked to this objects position"
+#+ * Space|SpaceView3D.pivot_point -> pivot_point: enum "Pivot center for rotation/scaling"
+#+ * Space|SpaceView3D.region_3d -> region_3d: pointer, "(read-only) 3D region in this space, in case of quad view the camera region"
+#+ * Space|SpaceView3D.region_quadview -> region_quadview: pointer, "(read-only) 3D region that defines the quad view settings"
+#Space|SpaceView3D.show_all_objects_origin -> show_all_objects_origin: boolean "Show the object origin center dot for all (selected and unselected) objects"
+#Space|SpaceView3D.show_axis_x -> show_axis_x: boolean "Show the X axis line in perspective view"
+#Space|SpaceView3D.show_axis_y -> show_axis_y: boolean "Show the Y axis line in perspective view"
+#Space|SpaceView3D.show_axis_z -> show_axis_z: boolean "Show the Z axis line in perspective view"
+#Space|SpaceView3D.show_background_images -> show_background_images: boolean "Display reference images behind objects in the 3D View"
+#Space|SpaceView3D.show_floor -> show_floor: boolean "Show the ground plane grid in perspective view"
+#Space|SpaceView3D.show_manipulator -> show_manipulator: boolean "Use a 3D manipulator widget for controlling transforms"
+#Space|SpaceView3D.show_only_render -> show_only_render: boolean "Display only objects which will be rendered"
+#Space|SpaceView3D.show_outline_selected -> show_outline_selected: boolean "Show an outline highlight around selected objects in non-wireframe views"
+#Space|SpaceView3D.show_relationship_lines -> show_relationship_lines: boolean "Show dashed lines indicating parent or constraint relationships"
+#Space|SpaceView3D.show_textured_solid -> show_textured_solid: boolean "Display face-assigned textures in solid view"
+#+ * Space|SpaceView3D.transform_orientation -> transform_orientation: enum "Transformation orientation"
+#Space|SpaceView3D.use_manipulator_rotate -> use_manipulator_rotate: boolean "Use the manipulator for rotation transformations"
+#Space|SpaceView3D.use_manipulator_scale -> use_manipulator_scale: boolean "Use the manipulator for scale transformations"
+#Space|SpaceView3D.use_manipulator_translate -> use_manipulator_translate: boolean "Use the manipulator for movement transformations"
+#Space|SpaceView3D.use_occlude_geometry -> use_occlude_geometry: boolean "Limit selection to visible (clipped with depth buffer)"
+#Space|SpaceView3D.use_pivot_point_align -> use_pivot_point_align: boolean "Manipulate object centers only"
+#Space|SpaceView3D.viewport_shade -> viewport_shade: enum "Method to display/shade objects in the 3D View"
+#+ * Spline.bezier_points -> bezier_points: collection, "(read-only) Collection of points for bezier curves only"
+#+ * Spline.character_index -> character_index: int, "(read-only) Location of this character in the text data (only for text curves)"
+#+ * Spline.hide -> hide: boolean "Hide this curve in editmode"
+#+ * Spline.material_index -> material_index: int "NO DESCRIPTION"
+#+ * Spline.order_u -> order_u: int "Nurbs order in the U direction (For splines and surfaces), Higher values let points influence a greater area"
+#+ * Spline.order_v -> order_v: int "Nurbs order in the V direction (For surfaces only), Higher values let points influence a greater area"
+#+ * Spline.point_count_u -> point_count_u: int, "(read-only) Total number points for the curve or surface in the U direction"
+#+ * Spline.point_count_v -> point_count_v: int, "(read-only) Total number points for the surface on the V direction"
+#+ * Spline.points -> points: collection, "(read-only) Collection of points that make up this poly or nurbs spline"
+#+ * Spline.radius_interpolation -> radius_interpolation: enum "The type of radius interpolation for Bezier curves"
+#+ * Spline.resolution_u -> resolution_u: int "Curve or Surface subdivisions per segment"
+#+ * Spline.resolution_v -> resolution_v: int "Surface subdivisions per segment"
+#+ * Spline.tilt_interpolation -> tilt_interpolation: enum "The type of tilt interpolation for 3D, Bezier curves"
+#+ * Spline.type -> type: enum "The interpolation type for this curve element"
+#Spline.use_bezier_u -> use_bezier_u: boolean "Make this nurbs curve or surface act like a bezier spline in the U direction (Order U must be 3 or 4, Cyclic U must be disabled)"
+#Spline.use_bezier_v -> use_bezier_v: boolean "Make this nurbs surface act like a bezier spline in the V direction (Order V must be 3 or 4, Cyclic V must be disabled)"
+#Spline.use_cyclic_u -> use_cyclic_u: boolean "Make this curve or surface a closed loop in the U direction"
+#Spline.use_cyclic_v -> use_cyclic_v: boolean "Make this surface a closed loop in the V direction"
+#Spline.use_endpoint_u -> use_endpoint_u: boolean "Make this nurbs curve or surface meet the endpoints in the U direction (Cyclic U must be disabled)"
+#Spline.use_endpoint_v -> use_endpoint_v: boolean "Make this nurbs surface meet the endpoints in the V direction (Cyclic V must be disabled)"
+#Spline.use_smooth -> use_smooth: boolean "Smooth the normals of the surface or beveled curve"
+#+ * SplinePoint.co -> co: float[4] "Point coordinates"
+#+ * SplinePoint.hide -> hide: boolean "Visibility status"
+#+ * SplinePoint.radius -> radius: float, "(read-only) Radius for bevelling"
+#+ * SplinePoint.select -> select: boolean "Selection status"
+#+ * SplinePoint.tilt -> tilt: float "Tilt in 3D View"
+#+ * SplinePoint.weight -> weight: float "Nurbs weight"
+#+ * SplinePoint.weight_softbody -> weight_softbody: float "Softbody goal weight"
+#+ * Struct.base -> base: pointer, "(read-only) Struct definition this is derived from"
+#+ * Struct.description -> description: string, "(read-only) Description of the Structs purpose"
+#+ * Struct.functions -> functions: collection, "(read-only)"
+#+ * Struct.identifier -> identifier: string, "(read-only) Unique name used in the code and scripting"
+#+ * Struct.name -> name: string, "(read-only) Human readable name"
+#+ * Struct.name_property -> name_property: pointer, "(read-only) Property that gives the name of the struct"
+#+ * Struct.nested -> nested: pointer, "(read-only) Struct in which this struct is always nested, and to which it logically belongs"
+#+ * Struct.properties -> properties: collection, "(read-only) Properties in the struct"
+#+ * TexMapping.location -> location: float[3] "NO DESCRIPTION"
+#TexMapping.max -> max: float[3] "Maximum value for clipping"
+#TexMapping.min -> min: float[3] "Minimum value for clipping"
+#+ * TexMapping.rotation -> rotation: float[3] "NO DESCRIPTION"
+#+ * TexMapping.scale -> scale: float[3] "NO DESCRIPTION"
+#TexMapping.use_max -> use_max: boolean "Whether to use maximum clipping value"
+#TexMapping.use_min -> use_min: boolean "Whether to use minimum clipping value"
+#+ * TextBox.height -> height: float "NO DESCRIPTION"
+#+ * TextBox.width -> width: float "NO DESCRIPTION"
+#+ * TextBox.x -> x: float "NO DESCRIPTION"
+#+ * TextBox.y -> y: float "NO DESCRIPTION"
+#TextCharacterFormat.use_bold -> use_bold: boolean "NO DESCRIPTION"
+#TextCharacterFormat.use_italic -> use_italic: boolean "NO DESCRIPTION"
+#+ * TextCharacterFormat.use_small_caps -> use_small_caps: boolean "NO DESCRIPTION"
+#TextCharacterFormat.use_underline -> use_underline: boolean "NO DESCRIPTION"
+#+ * TextLine.body -> body: string "Text in the line"
+#TextMarker.character_index_end -> character_index_end: int, "(read-only) Start position of the marker in the line"
+#TextMarker.character_index_start -> character_index_start: int, "(read-only) Start position of the marker in the line"
+#+ * TextMarker.color -> color: float[4] "Color to display the marker with"
+#+ * TextMarker.group -> group: int, "(read-only)"
+#TextMarker.is_temporary -> is_temporary: boolean, "(read-only) Marker is temporary"
+#+ * TextMarker.line -> line: int, "(read-only) Line in which the marker is located"
+#TextMarker.use_edit_all -> use_edit_all: boolean, "(read-only) Edit all markers of the same group as one"
+#+ * TextureSlot.blend_type -> blend_type: enum "NO DESCRIPTION"
+#+ * TextureSlot.color -> color: float[3] "The default color for textures that dont return RGB"
+#+ * TextureSlot.default_value -> default_value: float "Value to use for Ref, Spec, Amb, Emit, Alpha, RayMir, TransLu and Hard"
+#TextureSlot.invert -> invert: boolean "Inverts the values of the texture to reverse its effect"
+#+ * TextureSlot.name -> name: string, "(read-only) Texture slot name"
+#+ * TextureSlot.offset -> offset: float[3] "Fine tunes texture mapping X, Y and Z locations"
+#+ * TextureSlot.output_node -> output_node: enum "Which output node to use, for node-based textures"
+#TextureSlot.scale -> scale: float[3] "Sets scaling for the textures X, Y and Z sizes"
+#+ * TextureSlot.texture -> texture: pointer "Texture datablock used by this texture slot"
+#TextureSlot.use_rgb_to_intensity -> use_rgb_to_intensity: boolean "Converts texture RGB values to intensity (gray) values"
+#TextureSlot.use_stencil -> use_stencil: boolean "Use this texture as a blending value on the next texture"
+#+ * TextureSlot|BrushTextureSlot.angle -> angle: float "Defines brush texture rotation"
+#+ * TextureSlot|BrushTextureSlot.map_mode -> map_mode: enum "NO DESCRIPTION"
+#+ * TextureSlot|LampTextureSlot.color_factor -> color_factor: float "Amount texture affects color values"
+#+ * TextureSlot|LampTextureSlot.object -> object: pointer "Object to use for mapping with Object texture coordinates"
+#+ * TextureSlot|LampTextureSlot.shadow_factor -> shadow_factor: float "Amount texture affects shadow"
+#TextureSlot|LampTextureSlot.texture_coords -> texture_coords: enum "NO DESCRIPTION"
+#TextureSlot|LampTextureSlot.use_map_color -> use_map_color: boolean "Lets the texture affect the basic color of the lamp"
+#TextureSlot|LampTextureSlot.use_map_shadow -> use_map_shadow: boolean "Lets the texture affect the shadow color of the lamp"
+#+ * TextureSlot|MaterialTextureSlot.alpha_factor -> alpha_factor: float "Amount texture affects alpha"
+#+ * TextureSlot|MaterialTextureSlot.ambient_factor -> ambient_factor: float "Amount texture affects ambient"
+#TextureSlot|MaterialTextureSlot.color_emission_factor -> color_emission_factor: float "Amount texture affects emission color"
+#+ * TextureSlot|MaterialTextureSlot.density_factor -> density_factor: float "Amount texture affects density"
+#TextureSlot|MaterialTextureSlot.diffuse_color_factor -> diffuse_color_factor: float "Amount texture affects diffuse color"
+#+ * TextureSlot|MaterialTextureSlot.diffuse_factor -> diffuse_factor: float "Amount texture affects diffuse reflectivity"
+#+ * TextureSlot|MaterialTextureSlot.displacement_factor -> displacement_factor: float "Amount texture displaces the surface"
+#+ * TextureSlot|MaterialTextureSlot.emission_factor -> emission_factor: float "Amount texture affects emission"
+#+ * TextureSlot|MaterialTextureSlot.emit_factor -> emit_factor: float "Amount texture affects emission"
+#+ * TextureSlot|MaterialTextureSlot.hardness_factor -> hardness_factor: float "Amount texture affects hardness"
+#+ * TextureSlot|MaterialTextureSlot.mapping -> mapping: enum "NO DESCRIPTION"
+#TextureSlot|MaterialTextureSlot.mapping_x -> mapping_x: enum "NO DESCRIPTION"
+#TextureSlot|MaterialTextureSlot.mapping_y -> mapping_y: enum "NO DESCRIPTION"
+#TextureSlot|MaterialTextureSlot.mapping_z -> mapping_z: enum "NO DESCRIPTION"
+#+ * TextureSlot|MaterialTextureSlot.mirror_factor -> mirror_factor: float "Amount texture affects mirror color"
+#+ * TextureSlot|MaterialTextureSlot.normal_factor -> normal_factor: float "Amount texture affects normal values"
+#+ * TextureSlot|MaterialTextureSlot.normal_map_space -> normal_map_space: enum "NO DESCRIPTION"
+#+ * TextureSlot|MaterialTextureSlot.object -> object: pointer "Object to use for mapping with Object texture coordinates"
+#+ * TextureSlot|MaterialTextureSlot.raymir_factor -> raymir_factor: float "Amount texture affects ray mirror"
+#TextureSlot|MaterialTextureSlot.reflection_color_factor -> reflection_color_factor: float "Amount texture affects color of out-scattered light"
+#+ * TextureSlot|MaterialTextureSlot.reflection_factor -> reflection_factor: float "Amount texture affects brightness of out-scattered light"
+#+ * TextureSlot|MaterialTextureSlot.scattering_factor -> scattering_factor: float "Amount texture affects scattering"
+#TextureSlot|MaterialTextureSlot.specular_color_factor -> specular_color_factor: float "Amount texture affects specular color"
+#+ * TextureSlot|MaterialTextureSlot.specular_factor -> specular_factor: float "Amount texture affects specular reflectivity"
+#TextureSlot|MaterialTextureSlot.texture_coords -> texture_coords: enum "NO DESCRIPTION"
+#+ * TextureSlot|MaterialTextureSlot.translucency_factor -> translucency_factor: float "Amount texture affects translucency"
+#TextureSlot|MaterialTextureSlot.transmission_color_factor -> transmission_color_factor: float "Amount texture affects result color after light has been scattered/absorbed"
+#+ * TextureSlot|MaterialTextureSlot.use -> use: boolean "Enable this material texture slot"
+#TextureSlot|MaterialTextureSlot.use_from_dupli -> use_from_dupli: boolean "Duplis instanced from verts, faces or particles, inherit texture coordinate from their parent"
+#TextureSlot|MaterialTextureSlot.use_from_original -> use_from_original: boolean "Duplis derive their object coordinates from the original objects transformation"
+#TextureSlot|MaterialTextureSlot.use_map_alpha -> use_map_alpha: boolean "Causes the texture to affect the alpha value"
+#TextureSlot|MaterialTextureSlot.use_map_ambient -> use_map_ambient: boolean "Causes the texture to affect the value of ambient"
+#TextureSlot|MaterialTextureSlot.use_map_color_diffuse -> use_map_color_diffuse: boolean "Causes the texture to affect basic color of the material"
+#TextureSlot|MaterialTextureSlot.use_map_color_emission -> use_map_color_emission: boolean "Causes the texture to affect the color of emission"
+#TextureSlot|MaterialTextureSlot.use_map_color_reflection -> use_map_color_reflection: boolean "Causes the texture to affect the color of scattered light"
+#TextureSlot|MaterialTextureSlot.use_map_color_spec -> use_map_color_spec: boolean "Causes the texture to affect the specularity color"
+#TextureSlot|MaterialTextureSlot.use_map_color_transmission -> use_map_color_transmission: boolean "Causes the texture to affect the result color after other light has been scattered/absorbed"
+#TextureSlot|MaterialTextureSlot.use_map_density -> use_map_density: boolean "Causes the texture to affect the volumes density"
+#TextureSlot|MaterialTextureSlot.use_map_diffuse -> use_map_diffuse: boolean "Causes the texture to affect the value of the materials diffuse reflectivity"
+#TextureSlot|MaterialTextureSlot.use_map_displacement -> use_map_displacement: boolean "Let the texture displace the surface"
+#TextureSlot|MaterialTextureSlot.use_map_emission -> use_map_emission: boolean "Causes the texture to affect the volumes emission"
+#TextureSlot|MaterialTextureSlot.use_map_emit -> use_map_emit: boolean "Causes the texture to affect the emit value"
+#TextureSlot|MaterialTextureSlot.use_map_hardness -> use_map_hardness: boolean "Causes the texture to affect the hardness value"
+#TextureSlot|MaterialTextureSlot.use_map_mirror -> use_map_mirror: boolean "Causes the texture to affect the mirror color"
+#TextureSlot|MaterialTextureSlot.use_map_normal -> use_map_normal: boolean "Causes the texture to affect the rendered normal"
+#TextureSlot|MaterialTextureSlot.use_map_raymir -> use_map_raymir: boolean "Causes the texture to affect the ray-mirror value"
+#TextureSlot|MaterialTextureSlot.use_map_reflect -> use_map_reflect: boolean "Causes the texture to affect the reflected lights brightness"
+#TextureSlot|MaterialTextureSlot.use_map_scatter -> use_map_scatter: boolean "Causes the texture to affect the volumes scattering"
+#TextureSlot|MaterialTextureSlot.use_map_specular -> use_map_specular: boolean "Causes the texture to affect the value of specular reflectivity"
+#TextureSlot|MaterialTextureSlot.use_map_translucency -> use_map_translucency: boolean "Causes the texture to affect the translucency value"
+#TextureSlot|MaterialTextureSlot.use_map_warp -> use_map_warp: boolean "Let the texture warp texture coordinates of next channels"
+#TextureSlot|MaterialTextureSlot.use_old_bump -> use_old_bump: boolean "Use old bump mapping (backwards compatibility option)"
+#+ * TextureSlot|MaterialTextureSlot.uv_layer -> uv_layer: string "UV layer to use for mapping with UV texture coordinates"
+#+ * TextureSlot|MaterialTextureSlot.warp_factor -> warp_factor: float "Amount texture affects texture coordinates of next channels"
+#+ * TextureSlot|WorldTextureSlot.blend_factor -> blend_factor: float "Amount texture affects color progression of the background"
+#+ * TextureSlot|WorldTextureSlot.horizon_factor -> horizon_factor: float "Amount texture affects color of the horizon"
+#+ * TextureSlot|WorldTextureSlot.object -> object: pointer "Object to use for mapping with Object texture coordinates"
+#TextureSlot|WorldTextureSlot.texture_coords -> texture_coords: enum "Texture coordinates used to map the texture onto the background"
+#TextureSlot|WorldTextureSlot.use_map_blend -> use_map_blend: boolean "Affect the color progression of the background"
+#TextureSlot|WorldTextureSlot.use_map_horizon -> use_map_horizon: boolean "Affect the color of the horizon"
+#TextureSlot|WorldTextureSlot.use_map_zenith_down -> use_map_zenith_down: boolean "Affect the color of the zenith below"
+#TextureSlot|WorldTextureSlot.use_map_zenith_up -> use_map_zenith_up: boolean "Affect the color of the zenith above"
+#+ * TextureSlot|WorldTextureSlot.zenith_down_factor -> zenith_down_factor: float "Amount texture affects color of the zenith below"
+#+ * TextureSlot|WorldTextureSlot.zenith_up_factor -> zenith_up_factor: float "Amount texture affects color of the zenith above"
+#+ * Theme.bone_color_sets -> bone_color_sets: collection, "(read-only)"
+#+ * Theme.console -> console: pointer, "(read-only)"
+#+ * Theme.dopesheet_editor -> dopesheet_editor: pointer, "(read-only)"
+#+ * Theme.file_browser -> file_browser: pointer, "(read-only)"
+#+ * Theme.graph_editor -> graph_editor: pointer, "(read-only)"
+#+ * Theme.image_editor -> image_editor: pointer, "(read-only)"
+#+ * Theme.info -> info: pointer, "(read-only)"
+#+ * Theme.logic_editor -> logic_editor: pointer, "(read-only)"
+#+ * Theme.name -> name: string "Name of the theme"
+#+ * Theme.nla_editor -> nla_editor: pointer, "(read-only)"
+#+ * Theme.node_editor -> node_editor: pointer, "(read-only)"
+#+ * Theme.outliner -> outliner: pointer, "(read-only)"
+#+ * Theme.properties -> properties: pointer, "(read-only)"
+#+ * Theme.sequence_editor -> sequence_editor: pointer, "(read-only)"
+#+ * Theme.text_editor -> text_editor: pointer, "(read-only)"
+#+ * Theme.theme_area -> theme_area: enum "NO DESCRIPTION"
+#+ * Theme.timeline -> timeline: pointer, "(read-only)"
+#+ * Theme.user_interface -> user_interface: pointer, "(read-only)"
+#+ * Theme.user_preferences -> user_preferences: pointer, "(read-only)"
+#+ * Theme.view_3d -> view_3d: pointer, "(read-only)"
+#+ * ThemeAudioWindow.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeAudioWindow.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeAudioWindow.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeAudioWindow.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeAudioWindow.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeAudioWindow.frame_current -> frame_current: float[3] "NO DESCRIPTION"
+#+ * ThemeAudioWindow.grid -> grid: float[3] "NO DESCRIPTION"
+#+ * ThemeAudioWindow.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeAudioWindow.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeAudioWindow.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeAudioWindow.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeAudioWindow.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeAudioWindow.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeAudioWindow.window_sliders -> window_sliders: float[3] "NO DESCRIPTION"
+#+ * ThemeBoneColorSet.active -> active: float[3] "Color used for active bones"
+#+ * ThemeBoneColorSet.normal -> normal: float[3] "Color used for the surface of bones"
+#+ * ThemeBoneColorSet.select -> select: float[3] "Color used for selected bones"
+#ThemeBoneColorSet.show_colored_constraints -> show_colored_constraints: boolean "Allow the use of colors indicating constraints/keyed status"
+#+ * ThemeConsole.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.cursor -> cursor: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.line_error -> line_error: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.line_info -> line_info: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.line_input -> line_input: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.line_output -> line_output: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.active_channels_group -> active_channels_group: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.channel_group -> channel_group: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.channels -> channels: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.channels_selected -> channels_selected: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.dopesheet_channel -> dopesheet_channel: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.dopesheet_subchannel -> dopesheet_subchannel: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.frame_current -> frame_current: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.grid -> grid: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.list -> list: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.list_text -> list_text: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.list_text_hi -> list_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.list_title -> list_title: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.long_key -> long_key: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.long_key_selected -> long_key_selected: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.value_sliders -> value_sliders: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.view_sliders -> view_sliders: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.active_file -> active_file: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.active_file_text -> active_file_text: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.list -> list: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.list_text -> list_text: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.list_text_hi -> list_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.list_title -> list_title: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.scroll_handle -> scroll_handle: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.scrollbar -> scrollbar: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.selected_file -> selected_file: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.tiles -> tiles: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeFontStyle.font_kerning_style -> font_kerning_style: enum "Which style to use for font kerning"
+#+ * ThemeFontStyle.points -> points: int "NO DESCRIPTION"
+#+ * ThemeFontStyle.shadow -> shadow: int "Shadow size in pixels (0, 3 and 5 supported)"
+#ThemeFontStyle.shadow_offset_x -> shadow_offset_x: int "Shadow offset in pixels"
+#ThemeFontStyle.shadow_offset_y -> shadow_offset_y: int "Shadow offset in pixels"
+#+ * ThemeFontStyle.shadowalpha -> shadowalpha: float "NO DESCRIPTION"
+#+ * ThemeFontStyle.shadowcolor -> shadowcolor: float "Shadow color in grey value"
+#+ * ThemeGraphEditor.active_channels_group -> active_channels_group: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.channel_group -> channel_group: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.channels_region -> channels_region: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.dopesheet_channel -> dopesheet_channel: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.dopesheet_subchannel -> dopesheet_subchannel: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.frame_current -> frame_current: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.grid -> grid: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.handle_align -> handle_align: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.handle_auto -> handle_auto: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.handle_free -> handle_free: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.handle_sel_align -> handle_sel_align: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.handle_sel_auto -> handle_sel_auto: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.handle_sel_free -> handle_sel_free: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.handle_sel_vect -> handle_sel_vect: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.handle_vect -> handle_vect: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.handle_vertex -> handle_vertex: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.handle_vertex_select -> handle_vertex_select: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.handle_vertex_size -> handle_vertex_size: int "NO DESCRIPTION"
+#+ * ThemeGraphEditor.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.lastsel_point -> lastsel_point: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.list -> list: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.list_text -> list_text: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.list_text_hi -> list_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.list_title -> list_title: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.panel -> panel: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.vertex -> vertex: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.vertex_select -> vertex_select: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.vertex_size -> vertex_size: int "NO DESCRIPTION"
+#+ * ThemeGraphEditor.window_sliders -> window_sliders: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.editmesh_active -> editmesh_active: float[4] "NO DESCRIPTION"
+#+ * ThemeImageEditor.face -> face: float[4] "NO DESCRIPTION"
+#+ * ThemeImageEditor.face_dot -> face_dot: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.face_select -> face_select: float[4] "NO DESCRIPTION"
+#+ * ThemeImageEditor.facedot_size -> facedot_size: int "NO DESCRIPTION"
+#+ * ThemeImageEditor.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.scope_back -> scope_back: float[4] "NO DESCRIPTION"
+#+ * ThemeImageEditor.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.vertex -> vertex: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.vertex_select -> vertex_select: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.vertex_size -> vertex_size: int "NO DESCRIPTION"
+#+ * ThemeInfo.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeInfo.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeInfo.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeInfo.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeInfo.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeInfo.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeInfo.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeInfo.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeInfo.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeInfo.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeInfo.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeLogicEditor.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeLogicEditor.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeLogicEditor.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeLogicEditor.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeLogicEditor.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeLogicEditor.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeLogicEditor.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeLogicEditor.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeLogicEditor.panel -> panel: float[3] "NO DESCRIPTION"
+#+ * ThemeLogicEditor.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeLogicEditor.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeLogicEditor.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.bars -> bars: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.bars_selected -> bars_selected: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.frame_current -> frame_current: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.grid -> grid: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.list -> list: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.list_text -> list_text: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.list_text_hi -> list_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.list_title -> list_title: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.strips -> strips: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.strips_selected -> strips_selected: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.view_sliders -> view_sliders: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.converter_node -> converter_node: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.group_node -> group_node: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.in_out_node -> in_out_node: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.list -> list: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.list_text -> list_text: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.list_text_hi -> list_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.list_title -> list_title: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.node_backdrop -> node_backdrop: float[4] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.operator_node -> operator_node: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.selected_text -> selected_text: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.title -> title: float[3] "NO DESCRIPTION"
+#ThemeNodeEditor.wire -> wire: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.wire_select -> wire_select: float[3] "NO DESCRIPTION"
+#+ * ThemeOutliner.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeOutliner.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeOutliner.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeOutliner.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeOutliner.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeOutliner.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeOutliner.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeOutliner.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeOutliner.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeOutliner.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeOutliner.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeProperties.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeProperties.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeProperties.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeProperties.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeProperties.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeProperties.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeProperties.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeProperties.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeProperties.panel -> panel: float[3] "NO DESCRIPTION"
+#+ * ThemeProperties.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeProperties.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeProperties.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.audio_strip -> audio_strip: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.draw_action -> draw_action: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.effect_strip -> effect_strip: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.frame_current -> frame_current: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.grid -> grid: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.image_strip -> image_strip: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.keyframe -> keyframe: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.meta_strip -> meta_strip: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.movie_strip -> movie_strip: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.plugin_strip -> plugin_strip: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.scene_strip -> scene_strip: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.transition_strip -> transition_strip: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.window_sliders -> window_sliders: float[3] "NO DESCRIPTION"
+#ThemeStyle.group_label -> group_label: pointer, "(read-only)"
+#ThemeStyle.panel_title -> panel_title: pointer, "(read-only)"
+#+ * ThemeStyle.panelzoom -> panelzoom: float "Default zoom level for panel areas"
+#+ * ThemeStyle.widget -> widget: pointer, "(read-only)"
+#ThemeStyle.widget_label -> widget_label: pointer, "(read-only)"
+#+ * ThemeTextEditor.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.cursor -> cursor: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.line_numbers_background -> line_numbers_background: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.scroll_bar -> scroll_bar: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.selected_text -> selected_text: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.syntax_builtin -> syntax_builtin: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.syntax_comment -> syntax_comment: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.syntax_numbers -> syntax_numbers: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.syntax_special -> syntax_special: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.syntax_string -> syntax_string: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeTimeline.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeTimeline.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeTimeline.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeTimeline.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeTimeline.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeTimeline.frame_current -> frame_current: float[3] "NO DESCRIPTION"
+#+ * ThemeTimeline.grid -> grid: float[3] "NO DESCRIPTION"
+#+ * ThemeTimeline.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeTimeline.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeTimeline.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeTimeline.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeTimeline.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeTimeline.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeUserInterface.icon_file -> icon_file: string "NO DESCRIPTION"
+#+ * ThemeUserInterface.wcol_box -> wcol_box: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_list_item -> wcol_list_item: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_menu -> wcol_menu: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_menu_back -> wcol_menu_back: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_menu_item -> wcol_menu_item: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_num -> wcol_num: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_numslider -> wcol_numslider: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_option -> wcol_option: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_progress -> wcol_progress: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_pulldown -> wcol_pulldown: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_radio -> wcol_radio: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_regular -> wcol_regular: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_scroll -> wcol_scroll: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_state -> wcol_state: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_text -> wcol_text: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_toggle -> wcol_toggle: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_tool -> wcol_tool: pointer, "(read-only)"
+#+ * ThemeUserPreferences.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeUserPreferences.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeUserPreferences.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeUserPreferences.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeUserPreferences.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeUserPreferences.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeUserPreferences.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeUserPreferences.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeUserPreferences.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeUserPreferences.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeUserPreferences.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.act_spline -> act_spline: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.bone_pose -> bone_pose: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.bone_solid -> bone_solid: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.edge_crease -> edge_crease: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.edge_facesel -> edge_facesel: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.edge_seam -> edge_seam: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.edge_select -> edge_select: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.edge_sharp -> edge_sharp: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.editmesh_active -> editmesh_active: float[4] "NO DESCRIPTION"
+#+ * ThemeView3D.face -> face: float[4] "NO DESCRIPTION"
+#+ * ThemeView3D.face_dot -> face_dot: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.face_select -> face_select: float[4] "NO DESCRIPTION"
+#+ * ThemeView3D.facedot_size -> facedot_size: int "NO DESCRIPTION"
+#+ * ThemeView3D.frame_current -> frame_current: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.grid -> grid: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.handle_align -> handle_align: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.handle_auto -> handle_auto: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.handle_free -> handle_free: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.handle_sel_align -> handle_sel_align: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.handle_sel_auto -> handle_sel_auto: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.handle_sel_free -> handle_sel_free: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.handle_sel_vect -> handle_sel_vect: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.handle_vect -> handle_vect: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.lamp -> lamp: float[4] "NO DESCRIPTION"
+#+ * ThemeView3D.lastsel_point -> lastsel_point: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.normal -> normal: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.nurb_sel_uline -> nurb_sel_uline: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.nurb_sel_vline -> nurb_sel_vline: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.nurb_uline -> nurb_uline: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.nurb_vline -> nurb_vline: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.object_active -> object_active: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.object_grouped -> object_grouped: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.object_grouped_active -> object_grouped_active: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.object_selected -> object_selected: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.panel -> panel: float[4] "NO DESCRIPTION"
+#+ * ThemeView3D.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.transform -> transform: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.vertex -> vertex: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.vertex_normal -> vertex_normal: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.vertex_select -> vertex_select: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.vertex_size -> vertex_size: int "NO DESCRIPTION"
+#+ * ThemeView3D.wire -> wire: float[3] "NO DESCRIPTION"
+#+ * ThemeWidgetColors.inner -> inner: float[4] "NO DESCRIPTION"
+#+ * ThemeWidgetColors.inner_sel -> inner_sel: float[4] "NO DESCRIPTION"
+#+ * ThemeWidgetColors.item -> item: float[4] "NO DESCRIPTION"
+#+ * ThemeWidgetColors.outline -> outline: float[3] "NO DESCRIPTION"
+#+ * ThemeWidgetColors.shadedown -> shadedown: int "NO DESCRIPTION"
+#+ * ThemeWidgetColors.shadetop -> shadetop: int "NO DESCRIPTION"
+#ThemeWidgetColors.show_shaded -> show_shaded: boolean "NO DESCRIPTION"
+#+ * ThemeWidgetColors.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeWidgetColors.text_sel -> text_sel: float[3] "NO DESCRIPTION"
+#+ * ThemeWidgetStateColors.blend -> blend: float "NO DESCRIPTION"
+#+ * ThemeWidgetStateColors.inner_anim -> inner_anim: float[3] "NO DESCRIPTION"
+#+ * ThemeWidgetStateColors.inner_anim_sel -> inner_anim_sel: float[3] "NO DESCRIPTION"
+#+ * ThemeWidgetStateColors.inner_driven -> inner_driven: float[3] "NO DESCRIPTION"
+#+ * ThemeWidgetStateColors.inner_driven_sel -> inner_driven_sel: float[3] "NO DESCRIPTION"
+#+ * ThemeWidgetStateColors.inner_key -> inner_key: float[3] "NO DESCRIPTION"
+#+ * ThemeWidgetStateColors.inner_key_sel -> inner_key_sel: float[3] "NO DESCRIPTION"
+#+ * TimelineMarker.camera -> camera: pointer "Camera this timeline sets to active"
+#+ * TimelineMarker.frame -> frame: int "The frame on which the timeline marker appears"
+#+ * TimelineMarker.name -> name: string "NO DESCRIPTION"
+#+ * TimelineMarker.select -> select: boolean "Marker selection state"
+#ToolSettings.auto_keying_mode -> auto_keying_mode: enum "Mode of automatic keyframe insertion for Objects and Bones"
+#+ * ToolSettings.edge_path_mode -> edge_path_mode: enum "The edge flag to tag when selecting the shortest path"
+#+ * ToolSettings.etch_adaptive_limit -> etch_adaptive_limit: float "Number of bones in the subdivided stroke"
+#+ * ToolSettings.etch_convert_mode -> etch_convert_mode: enum "Method used to convert stroke to bones"
+#+ * ToolSettings.etch_length_limit -> etch_length_limit: float "Number of bones in the subdivided stroke"
+#+ * ToolSettings.etch_number -> etch_number: string "DOC BROKEN"
+#+ * ToolSettings.etch_roll_mode -> etch_roll_mode: enum "Method used to adjust the roll of bones when retargeting"
+#+ * ToolSettings.etch_side -> etch_side: string "DOC BROKEN"
+#+ * ToolSettings.etch_subdivision_number -> etch_subdivision_number: int "Number of bones in the subdivided stroke"
+#+ * ToolSettings.etch_template -> etch_template: pointer "Template armature that will be retargeted to the stroke"
+#+ * ToolSettings.image_paint -> image_paint: pointer, "(read-only)"
+#ToolSettings.mesh_select_mode -> mesh_select_mode: boolean[3] "Which mesh elements selection works on"
+#+ * ToolSettings.normal_size -> normal_size: float "Display size for normals in the 3D view"
+#+ * ToolSettings.particle_edit -> particle_edit: pointer, "(read-only)"
+#ToolSettings.proportional_edit -> proportional_edit: enum "Proportional editing mode"
+#ToolSettings.proportional_edit_falloff -> proportional_edit_falloff: enum "Falloff type for proportional editing mode"
+#+ * ToolSettings.sculpt -> sculpt: pointer, "(read-only)"
+#+ * ToolSettings.sculpt_paint_use_unified_size -> sculpt_paint_use_unified_size: boolean "Instead of per brush radius, the radius is shared across brushes"
+#+ * ToolSettings.sculpt_paint_use_unified_strength -> sculpt_paint_use_unified_strength: boolean "Instead of per brush strength, the strength is shared across brushes"
+#ToolSettings.show_uv_local_view -> show_uv_local_view: boolean "Draw only faces with the currently displayed image assigned"
+#+ * ToolSettings.snap_element -> snap_element: enum "Type of element to snap to"
+#+ * ToolSettings.snap_target -> snap_target: enum "Which part to snap onto the target"
+#ToolSettings.use_auto_normalize -> use_auto_normalize: boolean "Ensure all bone-deforming vertex groups add up to 1.0 while weight painting"
+#ToolSettings.use_bone_sketching -> use_bone_sketching: boolean "DOC BROKEN"
+#ToolSettings.use_etch_autoname -> use_etch_autoname: boolean "DOC BROKEN"
+#ToolSettings.use_etch_overdraw -> use_etch_overdraw: boolean "DOC BROKEN"
+#ToolSettings.use_etch_quick -> use_etch_quick: boolean "DOC BROKEN"
+#ToolSettings.use_keyframe_insert_auto -> use_keyframe_insert_auto: boolean "Automatic keyframe insertion for Objects and Bones"
+#ToolSettings.use_mesh_automerge -> use_mesh_automerge: boolean "Automatically merge vertices moved to the same location"
+#ToolSettings.use_proportional_edit_objects -> use_proportional_edit_objects: boolean "Proportional editing object mode"
+#ToolSettings.use_record_with_nla -> use_record_with_nla: boolean "Add a new NLA Track + Strip for every loop/pass made over the animation to allow non-destructive tweaking"
+#ToolSettings.use_snap -> use_snap: boolean "Snap during transform"
+#ToolSettings.use_snap_align_rotation -> use_snap_align_rotation: boolean "Align rotation with the snapping target"
+#ToolSettings.use_snap_peel_object -> use_snap_peel_object: boolean "Consider objects as whole when finding volume center"
+#ToolSettings.use_snap_project -> use_snap_project: boolean "Project vertices on the surface of other objects"
+#ToolSettings.use_uv_select_sync -> use_uv_select_sync: boolean "Keep UV and edit mode mesh selection in sync"
+#ToolSettings.uv_select_mode -> uv_select_mode: enum "UV selection and display mode"
+#+ * ToolSettings.vertex_group_weight -> vertex_group_weight: float "Weight to assign in vertex groups"
+#+ * ToolSettings.vertex_paint -> vertex_paint: pointer, "(read-only)"
+#+ * ToolSettings.weight_paint -> weight_paint: pointer, "(read-only)"
+#+ * TransformOrientation.matrix -> matrix: float[9] "NO DESCRIPTION"
+#+ * TransformOrientation.name -> name: string "NO DESCRIPTION"
+#+ * UILayout.alignment -> alignment: enum "NO DESCRIPTION"
+#+ * UILayout.operator_context -> operator_context: enum "NO DESCRIPTION"
+#+ * UILayout.scale_x -> scale_x: float "Scale factor along the X for items in this (sub)layout."
+#+ * UILayout.scale_y -> scale_y: float "Scale factor along the Y for items in this (sub)layout."
+ + * UILayout.active -> show_active: boolean "NO DESCRIPTION"
+ + * UILayout.enabled -> show_enabled: boolean "When false, this (sub)layout is greyed out."
+#+ * UVProjector.object -> object: pointer "Object to use as projector transform"
+#+ * UnitSettings.rotation_units -> rotation_units: enum "Unit to use for displaying/editing rotation values"
+#+ * UnitSettings.scale_length -> scale_length: float "Scale to use when converting between blender units and dimensions"
+#+ * UnitSettings.system -> system: enum "The unit system to use for button display"
+#+ * UnitSettings.use_separate -> use_separate: boolean "Display units in pairs"
+#+ * UserPreferences.active_section -> active_section: enum "Active section of the user preferences shown in the user interface"
+#+ * UserPreferences.addons -> addons: collection, "(read-only)"
+#+ * UserPreferences.edit -> edit: pointer, "(read-only) Settings for interacting with Blender data"
+#+ * UserPreferences.filepaths -> filepaths: pointer, "(read-only) Default paths for external files"
+#+ * UserPreferences.inputs -> inputs: pointer, "(read-only) Settings for input devices"
+#+ * UserPreferences.system -> system: pointer, "(read-only) Graphics driver and operating system settings"
+#+ * UserPreferences.themes -> themes: collection, "(read-only)"
+#UserPreferences.ui_styles -> ui_styles: collection, "(read-only)"
+#+ * UserPreferences.view -> view: pointer, "(read-only) Preferences related to viewing data"
+#+ * UserPreferencesEdit.auto_keying_mode -> auto_keying_mode: enum "Mode of automatic keyframe insertion for Objects and Bones"
+#+ * UserPreferencesEdit.grease_pencil_eraser_radius -> grease_pencil_eraser_radius: int "Radius of eraser brush"
+#+ * UserPreferencesEdit.grease_pencil_euclidean_distance -> grease_pencil_euclidean_distance: int "Distance moved by mouse when drawing stroke (in pixels) to include"
+#+ * UserPreferencesEdit.grease_pencil_manhattan_distance -> grease_pencil_manhattan_distance: int "Pixels moved by mouse per axis when drawing stroke"
+#+ * UserPreferencesEdit.keyframe_new_handle_type -> keyframe_new_handle_type: enum "NO DESCRIPTION"
+#+ * UserPreferencesEdit.keyframe_new_interpolation_type -> keyframe_new_interpolation_type: enum "NO DESCRIPTION"
+#+ * UserPreferencesEdit.material_link -> material_link: enum "Toggle whether the material is linked to object data or the object block"
+#+ * UserPreferencesEdit.object_align -> object_align: enum "When adding objects from a 3D View menu, either align them to that views direction or the world coordinates"
+#UserPreferencesEdit.sculpt_paint_overlay_color -> sculpt_paint_overlay_color: float[3] "Color of texture overlay"
+#+ * UserPreferencesEdit.undo_memory_limit -> undo_memory_limit: int "Maximum memory usage in megabytes (0 means unlimited)"
+#+ * UserPreferencesEdit.undo_steps -> undo_steps: int "Number of undo steps available (smaller values conserve memory)"
+#+ * UserPreferencesEdit.use_auto_keying -> use_auto_keying: boolean "Automatic keyframe insertion for Objects and Bones"
+#UserPreferencesEdit.use_drag_immediately -> use_drag_immediately: boolean "Moving things with a mouse drag confirms when releasing the button"
+#UserPreferencesEdit.use_duplicate_action -> use_duplicate_action: boolean "Causes actions to be duplicated with the object"
+#UserPreferencesEdit.use_duplicate_armature -> use_duplicate_armature: boolean "Causes armature data to be duplicated with the object"
+#UserPreferencesEdit.use_duplicate_curve -> use_duplicate_curve: boolean "Causes curve data to be duplicated with the object"
+#UserPreferencesEdit.use_duplicate_fcurve -> use_duplicate_fcurve: boolean "Causes F-curve data to be duplicated with the object"
+#UserPreferencesEdit.use_duplicate_lamp -> use_duplicate_lamp: boolean "Causes lamp data to be duplicated with the object"
+#UserPreferencesEdit.use_duplicate_material -> use_duplicate_material: boolean "Causes material data to be duplicated with the object"
+#UserPreferencesEdit.use_duplicate_mesh -> use_duplicate_mesh: boolean "Causes mesh data to be duplicated with the object"
+#UserPreferencesEdit.use_duplicate_metaball -> use_duplicate_metaball: boolean "Causes metaball data to be duplicated with the object"
+#UserPreferencesEdit.use_duplicate_particle -> use_duplicate_particle: boolean "Causes particle systems to be duplicated with the object"
+#UserPreferencesEdit.use_duplicate_surface -> use_duplicate_surface: boolean "Causes surface data to be duplicated with the object"
+#UserPreferencesEdit.use_duplicate_text -> use_duplicate_text: boolean "Causes text data to be duplicated with the object"
+#UserPreferencesEdit.use_duplicate_texture -> use_duplicate_texture: boolean "Causes texture data to be duplicated with the object"
+#UserPreferencesEdit.use_enter_edit_mode -> use_enter_edit_mode: boolean "Enter Edit Mode automatically after adding a new object"
+#UserPreferencesEdit.use_global_undo -> use_global_undo: boolean "Global undo works by keeping a full copy of the file itself in memory, so takes extra memory"
+#UserPreferencesEdit.use_grease_pencil_simplify_stroke -> use_grease_pencil_simplify_stroke: boolean "Simplify the final stroke"
+#UserPreferencesEdit.use_grease_pencil_smooth_stroke -> use_grease_pencil_smooth_stroke: boolean "Smooth the final stroke"
+#UserPreferencesEdit.use_insertkey_xyz_to_rgb -> use_insertkey_xyz_to_rgb: boolean "Color for newly added transformation F-Curves (Location, Rotation, Scale) and also Color is based on the transform axis"
+#UserPreferencesEdit.use_keyframe_insert_available -> use_keyframe_insert_available: boolean "Automatic keyframe insertion in available curves"
+#UserPreferencesEdit.use_keyframe_insert_keyingset -> use_keyframe_insert_keyingset: boolean "Automatic keyframe insertion using active Keying Set"
+#UserPreferencesEdit.use_keyframe_insert_needed -> use_keyframe_insert_needed: boolean "Keyframe insertion only when keyframe needed"
+#+ * UserPreferencesEdit.use_negative_frames -> use_negative_frames: boolean "Current frame number can be manually set to a negative value"
+#+ * UserPreferencesEdit.use_visual_keying -> use_visual_keying: boolean "Use Visual keying automatically for constrained objects"
+#+ * UserPreferencesFilePaths.animation_player -> animation_player: string "Path to a custom animation/frame sequence player"
+#+ * UserPreferencesFilePaths.animation_player_preset -> animation_player_preset: enum "Preset configs for external animation players"
+#+ * UserPreferencesFilePaths.auto_save_time -> auto_save_time: int "The time (in minutes) to wait between automatic temporary saves"
+#UserPreferencesFilePaths.font_directory -> font_directory: string "The default directory to search for loading fonts"
+#+ * UserPreferencesFilePaths.image_editor -> image_editor: string "Path to an image editor"
+#+ * UserPreferencesFilePaths.recent_files -> recent_files: int "Maximum number of recently opened files to remember"
+#+ * UserPreferencesFilePaths.render_output_directory -> render_output_directory: string "The default directory for rendering output"
+#+ * UserPreferencesFilePaths.save_version -> save_version: int "The number of old versions to maintain in the current directory, when manually saving"
+#UserPreferencesFilePaths.script_directory -> script_directory: string "The default directory to search for Python scripts (resets python module search path: sys.path)"
+#+ * UserPreferencesFilePaths.sequence_plugin_directory -> sequence_plugin_directory: string "The default directory to search for sequence plugins"
+#UserPreferencesFilePaths.show_hidden_files_datablocks -> show_hidden_files_datablocks: boolean "Hide files/datablocks that start with a dot(.*)"
+#UserPreferencesFilePaths.sound_directory -> sound_directory: string "The default directory to search for sounds"
+#+ * UserPreferencesFilePaths.temporary_directory -> temporary_directory: string "The directory for storing temporary save files"
+#UserPreferencesFilePaths.texture_directory -> texture_directory: string "The default directory to search for textures"
+#+ * UserPreferencesFilePaths.texture_plugin_directory -> texture_plugin_directory: string "The default directory to search for texture plugins"
+#UserPreferencesFilePaths.use_auto_save_temporary_files -> use_auto_save_temporary_files: boolean "Automatic saving of temporary files"
+#UserPreferencesFilePaths.use_file_compression -> use_file_compression: boolean "Enable file compression when saving .blend files"
+#UserPreferencesFilePaths.use_filter_files -> use_filter_files: boolean "Display only files with extensions in the image select window"
+#UserPreferencesFilePaths.use_load_ui -> use_load_ui: boolean "Load user interface setup when loading .blend files"
+#+ * UserPreferencesFilePaths.use_relative_paths -> use_relative_paths: boolean "Default relative path option for the file selector"
+#UserPreferencesFilePaths.use_save_preview_images -> use_save_preview_images: boolean "Enables automatic saving of preview images in the .blend file"
+#+ * UserPreferencesInput.edited_keymaps -> edited_keymaps: collection, "(read-only)"
+#UserPreferencesInput.invert_mouse_wheel_zoom -> invert_mouse_wheel_zoom: boolean "Invert the axis of mouse movement for zooming"
+#UserPreferencesInput.invert_zoom_wheel -> invert_zoom_wheel: boolean "Swap the Mouse Wheel zoom direction"
+#UserPreferencesInput.mouse_double_click_time -> mouse_double_click_time: int "The time (in ms) for a double click"
+#+ * UserPreferencesInput.ndof_pan_speed -> ndof_pan_speed: int "The overall panning speed of an NDOF device, as percent of standard"
+#+ * UserPreferencesInput.ndof_rotate_speed -> ndof_rotate_speed: int "The overall rotation speed of an NDOF device, as percent of standard"
+#+ * UserPreferencesInput.select_mouse -> select_mouse: enum "The mouse button used for selection"
+#UserPreferencesInput.use_emulate_numpad -> use_emulate_numpad: boolean "Causes the 1 to 0 keys to act as the numpad (useful for laptops)"
+#UserPreferencesInput.use_mouse_continuous -> use_mouse_continuous: boolean "Allow moving the mouse outside the view on some manipulations (transform, ui control drag)"
+#UserPreferencesInput.use_mouse_emulate_3_button -> use_mouse_emulate_3_button: boolean "Emulates Middle Mouse with Alt+LeftMouse (doesnt work with Left Mouse Select option)"
+#UserPreferencesInput.use_mouse_mmb_paste -> use_mouse_mmb_paste: boolean "In text window, paste with middle mouse button instead of panning"
+#UserPreferencesInput.view_rotate_method -> view_rotate_method: enum "Rotation style in the viewport"
+#UserPreferencesInput.view_zoom_axis -> view_zoom_axis: enum "Axis of mouse movement to zoom in or out on"
+#UserPreferencesInput.view_zoom_method -> view_zoom_method: enum "Which style to use for viewport scaling"
+#+ * UserPreferencesInput.wheel_scroll_lines -> wheel_scroll_lines: int "The number of lines scrolled at a time with the mouse wheel"
+#+ * UserPreferencesSystem.audio_channels -> audio_channels: enum "Sets the audio channel count"
+#+ * UserPreferencesSystem.audio_device -> audio_device: enum "Sets the audio output device"
+#+ * UserPreferencesSystem.audio_mixing_buffer -> audio_mixing_buffer: enum "Sets the number of samples used by the audio mixing buffer"
+#+ * UserPreferencesSystem.audio_sample_format -> audio_sample_format: enum "Sets the audio sample format"
+#+ * UserPreferencesSystem.audio_sample_rate -> audio_sample_rate: enum "Sets the audio sample rate"
+#+ * UserPreferencesSystem.color_picker_type -> color_picker_type: enum "Different styles of displaying the color picker widget"
+#+ * UserPreferencesSystem.dpi -> dpi: int "Font size and resolution for display"
+#+ * UserPreferencesSystem.frame_server_port -> frame_server_port: int "Frameserver Port for Frameserver Rendering"
+#UserPreferencesSystem.gl_clip_alpha -> gl_clip_alpha: float "Clip alpha below this threshold in the 3D textured view"
+#+ * UserPreferencesSystem.gl_texture_limit -> gl_texture_limit: enum "Limit the texture size to save graphics memory"
+#+ * UserPreferencesSystem.language -> language: enum "Language use for translation"
+#+ * UserPreferencesSystem.memory_cache_limit -> memory_cache_limit: int "Memory cache limit in sequencer (megabytes)"
+#+ * UserPreferencesSystem.prefetch_frames -> prefetch_frames: int "Number of frames to render ahead during playback"
+#+ * UserPreferencesSystem.screencast_fps -> screencast_fps: int "Frame rate for the screencast to be played back"
+#+ * UserPreferencesSystem.screencast_wait_time -> screencast_wait_time: int "Time in milliseconds between each frame recorded for screencast"
+#+ * UserPreferencesSystem.scrollback -> scrollback: int "Maximum number of lines to store for the console buffer"
+#+ * UserPreferencesSystem.solid_lights -> solid_lights: collection, "(read-only) Lights user to display objects in solid draw mode"
+#+ * UserPreferencesSystem.texture_collection_rate -> texture_collection_rate: int "Number of seconds between each run of the GL texture garbage collector"
+#+ * UserPreferencesSystem.texture_time_out -> texture_time_out: int "Time since last access of a GL texture in seconds after which it is freed. (Set to 0 to keep textures allocated.)"
+#+ * UserPreferencesSystem.use_antialiasing -> use_antialiasing: boolean "Use anti-aliasing for the 3D view (may impact redraw performance)"
+#UserPreferencesSystem.use_international_fonts -> use_international_fonts: boolean "Use international fonts"
+#+ * UserPreferencesSystem.use_mipmaps -> use_mipmaps: boolean "Scale textures for the 3D View (looks nicer but uses more memory and slows image reloading)"
+#UserPreferencesSystem.use_preview_images -> use_preview_images: boolean "Enables automatic saving of preview images in the .blend file (Windows only)"
+#UserPreferencesSystem.use_scripts_auto_execute -> use_scripts_auto_execute: boolean "Allow any .blend file to run scripts automatically (unsafe with blend files from an untrusted source)"
+#UserPreferencesSystem.use_tabs_as_spaces -> use_tabs_as_spaces: boolean "Automatically converts all new tabs into spaces for new and loaded text files"
+#+ * UserPreferencesSystem.use_textured_fonts -> use_textured_fonts: boolean "Use textures for drawing international fonts"
+#UserPreferencesSystem.use_translate_buttons -> use_translate_buttons: boolean "Translate button labels"
+#UserPreferencesSystem.use_translate_toolbox -> use_translate_toolbox: boolean "Translate toolbox menu"
+#UserPreferencesSystem.use_translate_tooltips -> use_translate_tooltips: boolean "Translate Tooltips"
+#UserPreferencesSystem.use_vertex_buffer_objects -> use_vertex_buffer_objects: boolean "Use Vertex Buffer Objects (or Vertex Arrays, if unsupported) for viewport rendering"
+#+ * UserPreferencesSystem.use_weight_color_range -> use_weight_color_range: boolean "Enable color range used for weight visualization in weight painting mode"
+#+ * UserPreferencesSystem.weight_color_range -> weight_color_range: pointer, "(read-only) Color range used for weight visualization in weight painting mode"
+#+ * UserPreferencesSystem.window_draw_method -> window_draw_method: enum "Drawing method used by the window manager"
+#+ * UserPreferencesView.manipulator_handle_size -> manipulator_handle_size: int "Size of widget handles as percentage of widget radius"
+#+ * UserPreferencesView.manipulator_hotspot -> manipulator_hotspot: int "Hotspot in pixels for clicking widget handles"
+#+ * UserPreferencesView.manipulator_size -> manipulator_size: int "Diameter of widget, in 10 pixel units"
+#+ * UserPreferencesView.mini_axis_brightness -> mini_axis_brightness: int "The brightness of the icon"
+#+ * UserPreferencesView.mini_axis_size -> mini_axis_size: int "The axis icons size"
+#+ * UserPreferencesView.object_origin_size -> object_origin_size: int "Diameter in Pixels for Object/Lamp origin display"
+#+ * UserPreferencesView.open_left_mouse_delay -> open_left_mouse_delay: int "Time in 1/10 seconds to hold the Left Mouse Button before opening the toolbox"
+#+ * UserPreferencesView.open_right_mouse_delay -> open_right_mouse_delay: int "Time in 1/10 seconds to hold the Right Mouse Button before opening the toolbox"
+#+ * UserPreferencesView.open_sublevel_delay -> open_sublevel_delay: int "Time delay in 1/10 seconds before automatically opening sub level menus"
+#+ * UserPreferencesView.open_toplevel_delay -> open_toplevel_delay: int "Time delay in 1/10 seconds before automatically opening top level menus"
+#+ * UserPreferencesView.rotation_angle -> rotation_angle: int "The rotation step for numerical pad keys (2 4 6 8)"
+#UserPreferencesView.show_column_layout -> show_column_layout: boolean "Use a column layout for toolbox"
+#UserPreferencesView.show_large_cursors -> show_large_cursors: boolean "Use large mouse cursors when available"
+#UserPreferencesView.show_manipulator -> show_manipulator: boolean "Use 3D transform manipulator"
+#+ * UserPreferencesView.show_mini_axis -> show_mini_axis: boolean "Show a small rotating 3D axis in the bottom left corner of the 3D View"
+#UserPreferencesView.show_object_info -> show_object_info: boolean "Display objects name and frame number in 3D view"
+#+ * UserPreferencesView.show_playback_fps -> show_playback_fps: boolean "Show the frames per second screen refresh rate, while animation is played back"
+#+ * UserPreferencesView.show_splash -> show_splash: boolean "Display splash screen on startup"
+#UserPreferencesView.show_tooltips -> show_tooltips: boolean "Display tooltips"
+#+ * UserPreferencesView.show_view_name -> show_view_name: boolean "Show the name of the views direction in each 3D View"
+#+ * UserPreferencesView.smooth_view -> smooth_view: int "The time to animate the view in milliseconds, zero to disable"
+#+ * UserPreferencesView.timecode_style -> timecode_style: enum "Format of Time Codes displayed when not displaying timing in terms of frames"
+#UserPreferencesView.use_auto_perspective -> use_auto_perspective: boolean "Automatically switch between orthographic and perspective when changing from top/front/side views"
+#UserPreferencesView.use_directional_menus -> use_directional_menus: boolean "Otherwise menus, etc will always be top to bottom, left to right, no matter opening direction"
+#UserPreferencesView.use_global_pivot -> use_global_pivot: boolean "Lock the same rotation/scaling pivot in all 3D Views"
+#UserPreferencesView.use_global_scene -> use_global_scene: boolean "Forces the current Scene to be displayed in all Screens"
+#UserPreferencesView.use_mouse_auto_depth -> use_mouse_auto_depth: boolean "Use the depth under the mouse to improve view pan/rotate/zoom functionality"
+#UserPreferencesView.use_mouse_over_open -> use_mouse_over_open: boolean "Open menu buttons and pulldowns automatically when the mouse is hovering"
+#UserPreferencesView.use_rotate_around_active -> use_rotate_around_active: boolean "Use selection as the pivot point"
+#UserPreferencesView.use_zoom_to_mouse -> use_zoom_to_mouse: boolean "Zoom in towards the mouse pointers position in the 3D view, rather than the 2D window center"
+#UserPreferencesView.view2d_grid_spacing_min -> view2d_grid_spacing_min: int "Minimum number of pixels between each gridline in 2D Viewports"
+#+ * UserSolidLight.diffuse_color -> diffuse_color: float[3] "The diffuse color of the OpenGL light"
+#+ * UserSolidLight.direction -> direction: float[3] "The direction that the OpenGL light is shining"
+#+ * UserSolidLight.specular_color -> specular_color: float[3] "The color of the lights specular highlight"
+#+ * UserSolidLight.use -> use: boolean "Enable this OpenGL light in solid draw mode"
+#+ * ValueNodeSocket.default_value -> default_value: float[1] "Default value of the socket when no link is attached"
+#+ * ValueNodeSocket.name -> name: string, "(read-only) Socket name"
+#+ * VectorNodeSocket.default_value -> default_value: float[3] "Default value of the socket when no link is attached"
+#+ * VectorNodeSocket.name -> name: string, "(read-only) Socket name"
+#+ * VertexGroup.index -> index: int, "(read-only) Index number of the vertex group"
+#+ * VertexGroup.name -> name: string "Vertex group name"
+#+ * VertexGroupElement.group -> group: int, "(read-only)"
+#+ * VertexGroupElement.weight -> weight: float "Vertex Weight"
+#+ * VoxelData.domain_object -> domain_object: pointer "Object used as the smoke simulation domain"
+#+ * VoxelData.extension -> extension: enum "Sets how the texture is extrapolated past its original bounds"
+#+ * VoxelData.file_format -> file_format: enum "Format of the source data set to render"
+#VoxelData.filepath -> filepath: string "The external source data file to use"
+#+ * VoxelData.intensity -> intensity: float "Multiplier for intensity values"
+#+ * VoxelData.interpolation -> interpolation: enum "Method to interpolate/smooth values between voxel cells"
+#+ * VoxelData.resolution -> resolution: int[3] "Resolution of the voxel grid"
+#+ * VoxelData.smoke_data_type -> smoke_data_type: enum "Simulation value to be used as a texture"
+#VoxelData.still_frame -> still_frame: int "The frame number to always use"
+#VoxelData.use_still_frame -> use_still_frame: boolean "Always render a still frame from the voxel data sequence"
+#+ * Window.screen -> screen: pointer "Active screen showing in the window"
+#+ * WorldLighting.adapt_to_speed -> adapt_to_speed: float "Use the speed vector pass to reduce AO samples in fast moving pixels. Higher values result in more aggressive sample reduction. Requires Vec pass enabled (for Raytrace Adaptive QMC)"
+#WorldLighting.ao_blend_type -> ao_blend_type: enum "Defines how AO mixes with material shading"
+#+ * WorldLighting.ao_factor -> ao_factor: float "Factor for ambient occlusion blending"
+#+ * WorldLighting.bias -> bias: float "Bias (in radians) to prevent smoothed faces from showing banding (for Raytrace Constant Jittered)"
+#+ * WorldLighting.correction -> correction: float "Ad-hoc correction for over-occlusion due to the approximation (for Approximate)"
+#+ * WorldLighting.distance -> distance: float "Length of rays, defines how far away other faces give occlusion effect"
+#+ * WorldLighting.environment_color -> environment_color: enum "Defines where the color of the environment light comes from"
+#+ * WorldLighting.environment_energy -> environment_energy: float "Defines the strength of environment light"
+#WorldLighting.error_threshold -> error_threshold: float "Low values are slower and higher quality (for Approximate)"
+#+ * WorldLighting.falloff_strength -> falloff_strength: float "Distance attenuation factor, the higher, the shorter the shadows"
+#+ * WorldLighting.gather_method -> gather_method: enum "NO DESCRIPTION"
+#+ * WorldLighting.indirect_bounces -> indirect_bounces: int "Number of indirect diffuse light bounces to use for approximate ambient occlusion"
+#+ * WorldLighting.indirect_factor -> indirect_factor: float "Factor for how much surrounding objects contribute to light"
+#+ * WorldLighting.passes -> passes: int "Number of preprocessing passes to reduce overocclusion (for approximate ambient occlusion)"
+#+ * WorldLighting.sample_method -> sample_method: enum "Method for generating shadow samples (for Raytrace)"
+#+ * WorldLighting.samples -> samples: int "Amount of ray samples. Higher values give smoother results and longer rendering times"
+#+ * WorldLighting.threshold -> threshold: float "Samples below this threshold will be considered fully shadowed/unshadowed and skipped (for Raytrace Adaptive QMC)"
+#+ * WorldLighting.use_ambient_occlusion -> use_ambient_occlusion: boolean "Use Ambient Occlusion to add shadowing based on distance between objects"
+#WorldLighting.use_cache -> use_cache: boolean "Cache AO results in pixels and interpolate over neighbouring pixels for speedup (for Approximate)"
+#WorldLighting.use_environment_light -> use_environment_light: boolean "Add light coming from the environment"
+#WorldLighting.use_falloff -> use_falloff: boolean "NO DESCRIPTION"
+#WorldLighting.use_indirect_light -> use_indirect_light: boolean "Add indirect light bouncing of surrounding objects"
+#+ * WorldMistSettings.depth -> depth: float "The distance over which the mist effect fades in"
+#+ * WorldMistSettings.falloff -> falloff: enum "Type of transition used to fade mist"
+#+ * WorldMistSettings.height -> height: float "Control how much mist density decreases with height"
+#+ * WorldMistSettings.intensity -> intensity: float "Intensity of the mist effect"
+#+ * WorldMistSettings.start -> start: float "Starting distance of the mist, measured from the camera"
+#+ * WorldMistSettings.use_mist -> use_mist: boolean "Occlude objects with the environment color as they are further away"
+#+ * WorldStarsSettings.average_separation -> average_separation: float "Average distance between any two stars"
+#WorldStarsSettings.color_random -> color_random: float "Randomize star colors"
+#WorldStarsSettings.distance_min -> distance_min: float "Minimum distance to the camera for stars"
+#+ * WorldStarsSettings.size -> size: float "Average screen dimension of stars"
+#+ * WorldStarsSettings.use_stars -> use_stars: boolean "Enable starfield generation"
diff --git a/source/blender/modifiers/CMakeLists.txt b/source/blender/modifiers/CMakeLists.txt
index dd432d005a1..d0b5ade199a 100644
--- a/source/blender/modifiers/CMakeLists.txt
+++ b/source/blender/modifiers/CMakeLists.txt
@@ -41,9 +41,9 @@ SET(INC
${ZLIB_INC}
)
-IF(NOT WITH_ELBEEM)
+IF(NOT WITH_FLUID)
ADD_DEFINITIONS(-DDISABLE_ELBEEM)
-ENDIF(NOT WITH_ELBEEM)
+ENDIF(NOT WITH_FLUID)
BLENDERLIB(bf_modifiers "${SRC}" "${INC}")
diff --git a/source/blender/modifiers/MOD_modifiertypes.h b/source/blender/modifiers/MOD_modifiertypes.h
index bd10b4aa6fc..a792b163eea 100644
--- a/source/blender/modifiers/MOD_modifiertypes.h
+++ b/source/blender/modifiers/MOD_modifiertypes.h
@@ -18,7 +18,7 @@
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation;
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Contributor(s): Ben Batt
*
diff --git a/source/blender/modifiers/Makefile b/source/blender/modifiers/Makefile
index 4b2c4b0a036..ddcddb90186 100644
--- a/source/blender/modifiers/Makefile
+++ b/source/blender/modifiers/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/modifiers/intern/MOD_armature.c b/source/blender/modifiers/intern/MOD_armature.c
index f0c28cb8aef..d0e36f90ff5 100644
--- a/source/blender/modifiers/intern/MOD_armature.c
+++ b/source/blender/modifiers/intern/MOD_armature.c
@@ -30,9 +30,10 @@
*
*/
-#include "string.h"
+#include <string.h>
#include "DNA_armature_types.h"
+#include "DNA_object_types.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_lattice.h"
diff --git a/source/blender/modifiers/intern/MOD_array.c b/source/blender/modifiers/intern/MOD_array.c
index ef518531f13..98295ae0d8e 100644
--- a/source/blender/modifiers/intern/MOD_array.c
+++ b/source/blender/modifiers/intern/MOD_array.c
@@ -32,13 +32,16 @@
/* Array modifier: duplicates the object multiple times along an axis */
-#include "DNA_curve_types.h"
-#include "DNA_meshdata_types.h"
+#include "MEM_guardedalloc.h"
#include "BLI_math.h"
#include "BLI_ghash.h"
#include "BLI_edgehash.h"
+#include "DNA_curve_types.h"
+#include "DNA_meshdata_types.h"
+#include "DNA_object_types.h"
+
#include "BKE_cdderivedmesh.h"
#include "BKE_displist.h"
#include "BKE_mesh.h"
diff --git a/source/blender/modifiers/intern/MOD_bevel.c b/source/blender/modifiers/intern/MOD_bevel.c
index 1ece8581963..e37bf18a293 100644
--- a/source/blender/modifiers/intern/MOD_bevel.c
+++ b/source/blender/modifiers/intern/MOD_bevel.c
@@ -29,6 +29,7 @@
* ***** END GPL LICENSE BLOCK *****
*
*/
+#include "MEM_guardedalloc.h"
#include "BKE_bmesh.h"
#include "BKE_cdderivedmesh.h"
diff --git a/source/blender/modifiers/intern/MOD_boolean.c b/source/blender/modifiers/intern/MOD_boolean.c
index 116f5ab22d2..4e8e3117b7e 100644
--- a/source/blender/modifiers/intern/MOD_boolean.c
+++ b/source/blender/modifiers/intern/MOD_boolean.c
@@ -30,6 +30,7 @@
*
*/
+#include "DNA_object_types.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_modifier.h"
diff --git a/source/blender/modifiers/intern/MOD_boolean_util.c b/source/blender/modifiers/intern/MOD_boolean_util.c
index 705756fd25d..a0532f9db5c 100644
--- a/source/blender/modifiers/intern/MOD_boolean_util.c
+++ b/source/blender/modifiers/intern/MOD_boolean_util.c
@@ -34,6 +34,8 @@
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
+#include "MEM_guardedalloc.h"
+
#include "BLI_math.h"
#include "BLI_ghash.h"
diff --git a/source/blender/modifiers/intern/MOD_build.c b/source/blender/modifiers/intern/MOD_build.c
index 36b6cad59b6..e027cc1fccc 100644
--- a/source/blender/modifiers/intern/MOD_build.c
+++ b/source/blender/modifiers/intern/MOD_build.c
@@ -30,6 +30,8 @@
*
*/
+#include "MEM_guardedalloc.h"
+
#include "BLI_rand.h"
#include "BLI_ghash.h"
diff --git a/source/blender/modifiers/intern/MOD_cast.c b/source/blender/modifiers/intern/MOD_cast.c
index 338454f0e6a..10843cf9677 100644
--- a/source/blender/modifiers/intern/MOD_cast.c
+++ b/source/blender/modifiers/intern/MOD_cast.c
@@ -31,6 +31,7 @@
*/
#include "DNA_meshdata_types.h"
+#include "DNA_object_types.h"
#include "BLI_math.h"
diff --git a/source/blender/modifiers/intern/MOD_cloth.c b/source/blender/modifiers/intern/MOD_cloth.c
index 5050333cd43..bfb5f6ee028 100644
--- a/source/blender/modifiers/intern/MOD_cloth.c
+++ b/source/blender/modifiers/intern/MOD_cloth.c
@@ -30,6 +30,12 @@
*
*/
+#include "DNA_cloth_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
+
+#include "MEM_guardedalloc.h"
+
#include "BKE_cloth.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_global.h"
diff --git a/source/blender/modifiers/intern/MOD_collision.c b/source/blender/modifiers/intern/MOD_collision.c
index 1c63f48e12d..fd43e057144 100644
--- a/source/blender/modifiers/intern/MOD_collision.c
+++ b/source/blender/modifiers/intern/MOD_collision.c
@@ -31,6 +31,10 @@
*/
#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
+#include "DNA_meshdata_types.h"
+
+#include "MEM_guardedalloc.h"
#include "BLI_math.h"
diff --git a/source/blender/modifiers/intern/MOD_curve.c b/source/blender/modifiers/intern/MOD_curve.c
index 6f1142ae6b9..97c7a4b01d6 100644
--- a/source/blender/modifiers/intern/MOD_curve.c
+++ b/source/blender/modifiers/intern/MOD_curve.c
@@ -30,9 +30,10 @@
*
*/
-#include "string.h"
+#include <string.h>
#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_lattice.h"
diff --git a/source/blender/modifiers/intern/MOD_displace.c b/source/blender/modifiers/intern/MOD_displace.c
index fc6eae5491c..6dbe3d3622c 100644
--- a/source/blender/modifiers/intern/MOD_displace.c
+++ b/source/blender/modifiers/intern/MOD_displace.c
@@ -31,6 +31,7 @@
*/
#include "DNA_meshdata_types.h"
+#include "DNA_object_types.h"
#include "BLI_math.h"
diff --git a/source/blender/modifiers/intern/MOD_fluidsim.c b/source/blender/modifiers/intern/MOD_fluidsim.c
index f272e7f18a6..c683bee0b35 100644
--- a/source/blender/modifiers/intern/MOD_fluidsim.c
+++ b/source/blender/modifiers/intern/MOD_fluidsim.c
@@ -32,6 +32,7 @@
#include "DNA_scene_types.h"
#include "DNA_object_fluidsim.h"
+#include "DNA_object_types.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_modifier.h"
diff --git a/source/blender/modifiers/intern/MOD_hook.c b/source/blender/modifiers/intern/MOD_hook.c
index 6715e2b78c0..2c9ae311585 100644
--- a/source/blender/modifiers/intern/MOD_hook.c
+++ b/source/blender/modifiers/intern/MOD_hook.c
@@ -32,6 +32,7 @@
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
+#include "DNA_object_types.h"
#include "BLI_math.h"
diff --git a/source/blender/modifiers/intern/MOD_lattice.c b/source/blender/modifiers/intern/MOD_lattice.c
index c5100578fff..4270f2ff6e8 100644
--- a/source/blender/modifiers/intern/MOD_lattice.c
+++ b/source/blender/modifiers/intern/MOD_lattice.c
@@ -30,7 +30,9 @@
*
*/
-#include "string.h"
+#include <string.h>
+
+#include "DNA_object_types.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_lattice.h"
diff --git a/source/blender/modifiers/intern/MOD_mask.c b/source/blender/modifiers/intern/MOD_mask.c
index 2505458c4d7..6a62ce645d8 100644
--- a/source/blender/modifiers/intern/MOD_mask.c
+++ b/source/blender/modifiers/intern/MOD_mask.c
@@ -30,11 +30,14 @@
*
*/
+#include "MEM_guardedalloc.h"
+
+#include "BLI_ghash.h"
+
#include "DNA_armature_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_modifier_types.h"
-
-#include "BLI_ghash.h"
+#include "DNA_object_types.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_mesh.h"
diff --git a/source/blender/modifiers/intern/MOD_meshdeform.c b/source/blender/modifiers/intern/MOD_meshdeform.c
index defc23fc468..b89db2fdc2d 100644
--- a/source/blender/modifiers/intern/MOD_meshdeform.c
+++ b/source/blender/modifiers/intern/MOD_meshdeform.c
@@ -32,6 +32,7 @@
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
+#include "DNA_object_types.h"
#include "BLI_math.h"
@@ -128,7 +129,7 @@ static float meshdeform_dynamic_bind(MeshDeformModifierData *mmd, float (*dco)[3
float weight, cageweight, totweight, *cageco;
int i, j, a, x, y, z, size;
- co[0]= co[1]= co[2]= 0.0f;
+ zero_v3(co);
totweight= 0.0f;
size= mmd->dyngridsize;
@@ -313,7 +314,7 @@ static void meshdeformModifier_do(
}
else {
totweight= 0.0f;
- co[0]= co[1]= co[2]= 0.0f;
+ zero_v3(co);
for(a=offsets[b]; a<offsets[b+1]; a++) {
weight= influences[a].weight;
diff --git a/source/blender/modifiers/intern/MOD_mirror.c b/source/blender/modifiers/intern/MOD_mirror.c
index 2b9fa45ae9b..331d6e3a444 100644
--- a/source/blender/modifiers/intern/MOD_mirror.c
+++ b/source/blender/modifiers/intern/MOD_mirror.c
@@ -30,8 +30,8 @@
*
*/
-
#include "DNA_meshdata_types.h"
+#include "DNA_object_types.h"
#include "BLI_math.h"
diff --git a/source/blender/modifiers/intern/MOD_multires.c b/source/blender/modifiers/intern/MOD_multires.c
index 0498c57e0a8..81490c9d7db 100644
--- a/source/blender/modifiers/intern/MOD_multires.c
+++ b/source/blender/modifiers/intern/MOD_multires.c
@@ -38,6 +38,8 @@
#include "BKE_paint.h"
#include "BKE_particle.h"
+#include "DNA_mesh_types.h"
+
static void initData(ModifierData *md)
{
MultiresModifierData *mmd = (MultiresModifierData*)md;
@@ -66,6 +68,15 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *dm,
int sculpting= (ob->mode & OB_MODE_SCULPT) && ss;
MultiresModifierData *mmd = (MultiresModifierData*)md;
DerivedMesh *result;
+ Mesh *me= (Mesh*)ob->data;
+
+ if(mmd->totlvl) {
+ if(!CustomData_get_layer(&me->pdata, CD_MDISPS)) {
+ /* multires can't work without displacement layer */
+ modifier_setError(md, "Modifier needs mesh with displacement data.");
+ return dm;
+ }
+ }
result = multires_dm_create_from_derived(mmd, 0, dm, ob, useRenderParams, isFinalCalc);
diff --git a/source/blender/modifiers/intern/MOD_none.c b/source/blender/modifiers/intern/MOD_none.c
index 3a5dc4dce33..0c749b79f5a 100644
--- a/source/blender/modifiers/intern/MOD_none.c
+++ b/source/blender/modifiers/intern/MOD_none.c
@@ -18,7 +18,7 @@
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation;
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* The Original Code is Copyright (C) 2005 Blender Foundation.
* All rights reserved.
diff --git a/source/blender/modifiers/intern/MOD_particleinstance.c b/source/blender/modifiers/intern/MOD_particleinstance.c
index c1e5eda746e..100a22603d5 100644
--- a/source/blender/modifiers/intern/MOD_particleinstance.c
+++ b/source/blender/modifiers/intern/MOD_particleinstance.c
@@ -32,6 +32,8 @@
#include "DNA_meshdata_types.h"
+#include "MEM_guardedalloc.h"
+
#include "BLI_math.h"
#include "BLI_listbase.h"
#include "BLI_rand.h"
diff --git a/source/blender/modifiers/intern/MOD_screw.c b/source/blender/modifiers/intern/MOD_screw.c
index 16990c2522b..783bad15c70 100644
--- a/source/blender/modifiers/intern/MOD_screw.c
+++ b/source/blender/modifiers/intern/MOD_screw.c
@@ -33,6 +33,7 @@
/* Screw modifier: revolves the edges about an axis */
#include "DNA_meshdata_types.h"
+#include "DNA_object_types.h"
#include "BLI_math.h"
@@ -60,39 +61,45 @@ typedef struct ScrewVertIter {
MEdge *e;
} ScrewVertIter;
-#define ScrewVertIter_INIT(iter, array, v_init, dir)\
- iter.v_array = array;\
- iter.v = v_init;\
- if (v_init>=0) {\
- iter.v_poin = &array[v_init];\
- iter.v_other = iter.v_poin->v[dir];\
- if (dir)\
- iter.e = iter.v_poin->e[0];\
- else\
- iter.e = iter.v_poin->e[1];\
- } else {\
- iter.v_poin= NULL;\
- iter.e= NULL;\
+
+static void screwvert_iter_init(ScrewVertIter *iter, ScrewVertConnect *array, int v_init, int dir)
+{
+ iter->v_array = array;
+ iter->v = v_init;
+
+ if (v_init >= 0) {
+ iter->v_poin = &array[v_init];
+ iter->v_other = iter->v_poin->v[dir];
+ iter->e = iter->v_poin->e[!dir];
+ }
+ else {
+ iter->v_poin= NULL;
+ iter->e= NULL;
}
+}
-#define ScrewVertIter_NEXT(iter)\
- if (iter.v_poin->v[0] == iter.v_other) {\
- iter.v_other= iter.v;\
- iter.v= iter.v_poin->v[1];\
- } else if (iter.v_poin->v[1] == iter.v_other) {\
- iter.v_other= iter.v;\
- iter.v= iter.v_poin->v[0];\
- }\
- if (iter.v >=0) {\
- iter.v_poin= &iter.v_array[iter.v];\
- if ( iter.v_poin->e[0] != iter.e ) iter.e= iter.v_poin->e[0];\
- else iter.e= iter.v_poin->e[1];\
- } else {\
- iter.e= NULL;\
- iter.v_poin= NULL;\
+static void screwvert_iter_step(ScrewVertIter *iter)
+{
+ if (iter->v_poin->v[0] == iter->v_other) {
+ iter->v_other= iter->v;
+ iter->v= iter->v_poin->v[1];
}
-
+ else if (iter->v_poin->v[1] == iter->v_other) {
+ iter->v_other= iter->v;
+ iter->v= iter->v_poin->v[0];
+ }
+ if (iter->v >= 0) {
+ iter->v_poin= &iter->v_array[iter->v];
+ iter->e= iter->v_poin->e[(iter->v_poin->e[0] == iter->e)];
+ }
+ else {
+ iter->e= NULL;
+ iter->v_poin= NULL;
+ }
+}
+
+
static void initData(ModifierData *md)
{
ScrewModifierData *ltmd= (ScrewModifierData*) md;
@@ -130,9 +137,11 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
int *origindex;
int mface_index=0;
+ int step;
int i, j;
int i1,i2;
- int steps= ltmd->steps;
+ int step_tot= ltmd->steps;
+ const int do_flip = ltmd->flag & MOD_SCREW_NORMAL_FLIP ? 1 : 0;
int maxVerts=0, maxEdges=0, maxFaces=0;
int totvert= dm->getNumVerts(dm);
int totedge= dm->getNumEdges(dm);
@@ -166,7 +175,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
if (!totvert)
return CDDM_from_template(dm, 0, 0, 0, 0, 0);
- steps= useRenderParams ? ltmd->render_steps : ltmd->steps;
+ step_tot= useRenderParams ? ltmd->render_steps : ltmd->steps;
switch(ltmd->axis) {
case 0:
@@ -186,16 +195,13 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
axis_vec[ltmd->axis]= 1.0f;
if (ltmd->ob_axis) {
- float mtx3_tx[3][3];
/* calc the matrix relative to the axis object */
invert_m4_m4(mtx_tmp_a, ob->obmat);
copy_m4_m4(mtx_tx_inv, ltmd->ob_axis->obmat);
mul_m4_m4m4(mtx_tx, mtx_tx_inv, mtx_tmp_a);
- copy_m3_m4(mtx3_tx, mtx_tx);
-
/* calc the axis vec */
- mul_m3_v3(mtx3_tx, axis_vec);
+ mul_mat3_m4_v3(mtx_tx, axis_vec); /* only rotation component */
normalize_v3(axis_vec);
/* screw */
@@ -217,7 +223,8 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
#if 0 // cant incluide this, not pradictable enough, though quite fun,.
if(ltmd->flag & MOD_SCREW_OBJECT_ANGLE) {
-
+ float mtx3_tx[3][3];
+ copy_m3_m4(mtx3_tx, mtx_tx);
float vec[3] = {0,1,0};
float cross1[3];
@@ -260,30 +267,30 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
screw_ofs *= ltmd->iter;
/* multiplying the steps is a bit tricky, this works best */
- steps = ((steps + 1) * ltmd->iter) - (ltmd->iter - 1);
+ step_tot = ((step_tot + 1) * ltmd->iter) - (ltmd->iter - 1);
/* will the screw be closed?
* Note! smaller then FLT_EPSILON*100 gives problems with float precission so its never closed. */
if (fabs(screw_ofs) <= (FLT_EPSILON*100) && fabs(fabs(angle) - (M_PI * 2)) <= (FLT_EPSILON*100)) {
close= 1;
- steps--;
- if(steps < 2) steps= 2;
+ step_tot--;
+ if(step_tot < 2) step_tot= 2;
- maxVerts = totvert * steps; /* -1 because we're joining back up */
- maxEdges = (totvert * steps) + /* these are the edges between new verts */
- (totedge * steps); /* -1 because vert edges join */
- maxFaces = totedge * steps;
+ maxVerts = totvert * step_tot; /* -1 because we're joining back up */
+ maxEdges = (totvert * step_tot) + /* these are the edges between new verts */
+ (totedge * step_tot); /* -1 because vert edges join */
+ maxFaces = totedge * step_tot;
screw_ofs= 0.0f;
}
else {
close= 0;
- if(steps < 2) steps= 2;
+ if(step_tot < 2) step_tot= 2;
- maxVerts = totvert * steps; /* -1 because we're joining back up */
- maxEdges = (totvert * (steps-1)) + /* these are the edges between new verts */
- (totedge * steps); /* -1 because vert edges join */
- maxFaces = totedge * (steps-1);
+ maxVerts = totvert * step_tot; /* -1 because we're joining back up */
+ maxEdges = (totvert * (step_tot-1)) + /* these are the edges between new verts */
+ (totedge * step_tot); /* -1 because vert edges join */
+ maxFaces = totedge * (step_tot-1);
}
result= CDDM_from_template(dm, maxVerts, maxEdges, maxFaces, 0, 0);
@@ -397,11 +404,11 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
for (i=0; i<totedge; i++, med_new++) {
vc= &vert_connect[med_new->v1];
- if (vc->v[0]==-1) { /* unused */
+ if (vc->v[0] == -1) { /* unused */
vc->v[0]= med_new->v2;
vc->e[0]= med_new;
}
- else if (vc->v[1]==-1) {
+ else if (vc->v[1] == -1) {
vc->v[1]= med_new->v2;
vc->e[1]= med_new;
}
@@ -412,11 +419,11 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
vc= &vert_connect[med_new->v2];
/* same as above but swap v1/2 */
- if (vc->v[0]==-1) { /* unused */
+ if (vc->v[0] == -1) { /* unused */
vc->v[0]= med_new->v1;
vc->e[0]= med_new;
}
- else if (vc->v[1]==-1) {
+ else if (vc->v[1] == -1) {
vc->v[1]= med_new->v1;
vc->e[1]= med_new;
}
@@ -428,7 +435,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
/* find the first vert */
vc= vert_connect;
for (i=0; i < totvert; i++, vc++) {
- int VBEST=-1, ed_loop_closed=0; /* vert and vert new */
+ int v_best=-1, ed_loop_closed=0; /* vert and vert new */
int ed_loop_flip;
float fl= -1.0f;
ScrewVertIter lt_iter;
@@ -436,14 +443,14 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
/* Now do search for connected verts, order all edges and flip them
* so resulting faces are flipped the right way */
vc_tot_linked= 0; /* count the number of linked verts for this loop */
- if (vc->flag==0) {
+ if (vc->flag == 0) {
/*printf("Loop on connected vert: %i\n", i);*/
for(j=0; j<2; j++) {
/*printf("\tSide: %i\n", j);*/
- ScrewVertIter_INIT(lt_iter, vert_connect, i, j);
- if (j==1) {
- ScrewVertIter_NEXT(lt_iter);
+ screwvert_iter_init(&lt_iter, vert_connect, i, j);
+ if (j == 1) {
+ screwvert_iter_step(&lt_iter);
}
while (lt_iter.v_poin) {
/*printf("\t\tVERT: %i\n", lt_iter.v);*/
@@ -458,10 +465,10 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
/*printf("Testing 2 floats %f : %f\n", fl, lt_iter.v_poin->dist);*/
if (fl <= lt_iter.v_poin->dist) {
fl= lt_iter.v_poin->dist;
- VBEST= lt_iter.v;
- /*printf("\t\t\tVERT BEST: %i\n", VBEST);*/
+ v_best= lt_iter.v;
+ /*printf("\t\t\tVERT BEST: %i\n", v_best);*/
}
- ScrewVertIter_NEXT(lt_iter);
+ screwvert_iter_step(&lt_iter);
if (!lt_iter.v_poin) {
/*printf("\t\t\tFound End Also Num %i\n", j);*/
/*endpoints[j]= lt_iter.v_other;*/ /* other is still valid */
@@ -471,14 +478,14 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
}
/* now we have a collection of used edges. flip their edges the right way*/
- /*if (VBEST !=-1) - */
+ /*if (v_best != -1) - */
/*printf("Done Looking - vc_tot_linked: %i\n", vc_tot_linked);*/
if (vc_tot_linked>1) {
float vf_1, vf_2, vf_best;
- vc_tmp= &vert_connect[VBEST];
+ vc_tmp= &vert_connect[v_best];
tmpf1= vert_connect[vc_tmp->v[0]].co;
tmpf2= vert_connect[vc_tmp->v[1]].co;
@@ -502,7 +509,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
else {
/* not so simple to work out which edge is higher */
sub_v3_v3v3(tmp_vec1, tmpf1, vc_tmp->co);
- sub_v3_v3v3(tmp_vec1, tmpf2, vc_tmp->co);
+ sub_v3_v3v3(tmp_vec2, tmpf2, vc_tmp->co);
normalize_v3(tmp_vec1);
normalize_v3(tmp_vec2);
@@ -530,9 +537,12 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
/*printf("flip direction %i\n", ed_loop_flip);*/
- /* switch the flip option if set */
- if (ltmd->flag & MOD_SCREW_NORMAL_FLIP)
+ /* switch the flip option if set
+ * note: flip is now done at face level so copying vgroup slizes is easier */
+ /*
+ if (do_flip)
ed_loop_flip= !ed_loop_flip;
+ */
if (angle < 0.0f)
ed_loop_flip= !ed_loop_flip;
@@ -541,7 +551,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
for(j=ed_loop_closed; j<2; j++) {
/*printf("Ordering Side J %i\n", j);*/
- ScrewVertIter_INIT(lt_iter, vert_connect, VBEST, j);
+ screwvert_iter_init(&lt_iter, vert_connect, v_best, j);
/*printf("\n\nStarting - Loop\n");*/
lt_iter.v_poin->flag= 1; /* so a non loop will traverse the other side */
@@ -549,7 +559,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
/* If this is the vert off the best vert and
* the best vert has 2 edges connected too it
* then swap the flip direction */
- if (j==1 && (vc_tmp->v[0] > -1) && (vc_tmp->v[1] > -1))
+ if (j == 1 && (vc_tmp->v[0] > -1) && (vc_tmp->v[1] > -1))
ed_loop_flip= !ed_loop_flip;
while (lt_iter.v_poin && lt_iter.v_poin->flag != 2) {
@@ -558,7 +568,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
lt_iter.v_poin->flag= 2;
if (lt_iter.e) {
if (lt_iter.v == lt_iter.e->v1) {
- if (ed_loop_flip==0) {
+ if (ed_loop_flip == 0) {
/*printf("\t\t\tFlipping 0\n");*/
SWAP(int, lt_iter.e->v1, lt_iter.e->v2);
}/* else {
@@ -566,7 +576,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
}*/
}
else if (lt_iter.v == lt_iter.e->v2) {
- if (ed_loop_flip==1) {
+ if (ed_loop_flip == 1) {
/*printf("\t\t\tFlipping 1\n");*/
SWAP(int, lt_iter.e->v1, lt_iter.e->v2);
}/* else {
@@ -578,7 +588,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
}/* else {
printf("\t\tNo Edge at this point\n");
}*/
- ScrewVertIter_NEXT(lt_iter);
+ screwvert_iter_step(&lt_iter);
}
}
}
@@ -590,8 +600,8 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
*
* calculate vertex normals that can be propodated on lathing
* use edge connectivity work this out */
- if (vc->v[0]>=0) {
- if (vc->v[1]>=0) {
+ if (vc->v[0] >= 0) {
+ if (vc->v[1] >= 0) {
/* 2 edges connedted */
/* make 2 connecting vert locations relative to the middle vert */
sub_v3_v3v3(tmp_vec1, mvert_new[vc->v[0]].co, mvert_new[i].co);
@@ -646,34 +656,24 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
}
}
else {
+ mv_orig= mvert_orig;
+ mv_new= mvert_new;
- if (ltmd->flag & MOD_SCREW_NORMAL_FLIP) {
- mv_orig= mvert_orig;
- mv_new= mvert_new + (totvert-1);
-
- for (i=0; i < totvert; i++, mv_new--, mv_orig++) {
- copy_v3_v3(mv_new->co, mv_orig->co);
- }
- }
- else {
- mv_orig= mvert_orig;
- mv_new= mvert_new;
-
- for (i=0; i < totvert; i++, mv_new++, mv_orig++) {
- copy_v3_v3(mv_new->co, mv_orig->co);
- }
+ for (i=0; i < totvert; i++, mv_new++, mv_orig++) {
+ copy_v3_v3(mv_new->co, mv_orig->co);
}
}
/* done with edge connectivity based normal flipping */
+ DM_copy_vert_data(dm, result, 0, 0, totvert);
/* Add Faces */
- for (i=1; i < steps; i++) {
+ for (step=1; step < step_tot; step++) {
+ const int varray_stride= totvert * step;
float step_angle;
- float no_tx[3];
+ float nor_tx[3];
/* Rotation Matrix */
- if (close) step_angle= (angle / steps) * i;
- else step_angle= (angle / (steps-1)) * i;
+ step_angle= (angle / (step_tot - (!close))) * step;
if (ltmd->ob_axis) {
axis_angle_to_mat3(mat3, axis_vec, step_angle);
@@ -686,18 +686,21 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
}
if(screw_ofs)
- madd_v3_v3fl(mat[3], axis_vec, screw_ofs * ((float)i / (float)(steps-1)));
+ madd_v3_v3fl(mat[3], axis_vec, screw_ofs * ((float)step / (float)(step_tot-1)));
+ /* copy a slice */
+ DM_copy_vert_data(dm, result, 0, varray_stride, totvert);
+
mv_new_base= mvert_new;
- mv_new= &mvert_new[totvert*i]; /* advance to the next slice */
+ mv_new= &mvert_new[varray_stride]; /* advance to the next slice */
for (j=0; j<totvert; j++, mv_new_base++, mv_new++) {
/* set normal */
if(vert_connect) {
- mul_v3_m3v3(no_tx, mat3, vert_connect[j].no);
+ mul_v3_m3v3(nor_tx, mat3, vert_connect[j].no);
/* set the normal now its transformed */
- normal_float_to_short_v3(mv_new->no, no_tx);
+ normal_float_to_short_v3(mv_new->no, nor_tx);
}
/* set location */
@@ -718,7 +721,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
}
/* add the new edge */
- med_new->v1= j+(i*totvert);
+ med_new->v1= varray_stride + j;
med_new->v2= med_new->v1 - totvert;
med_new->flag= ME_EDGEDRAW|ME_EDGERENDER;
med_new++;
@@ -733,9 +736,11 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
if (close) {
/* last loop of edges, previous loop dosnt account for the last set of edges */
+ const int varray_stride= (step_tot - 1) * totvert;
+
for (i=0; i<totvert; i++) {
med_new->v1= i;
- med_new->v2= i+((steps-1)*totvert);
+ med_new->v2= varray_stride + i;
med_new->flag= ME_EDGEDRAW|ME_EDGERENDER;
med_new++;
}
@@ -748,14 +753,22 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
/* for each edge, make a cylinder of quads */
i1= med_new_firstloop->v1;
i2= med_new_firstloop->v2;
-
- for (j=0; j < steps-1; j++) {
+
+ for (step=0; step < step_tot-1; step++) {
/* new face */
- mf_new->v1= i1;
- mf_new->v2= i2;
- mf_new->v3= i2 + totvert;
- mf_new->v4= i1 + totvert;
+ if(do_flip) {
+ mf_new->v4= i1;
+ mf_new->v3= i2;
+ mf_new->v2= i2 + totvert;
+ mf_new->v1= i1 + totvert;
+ }
+ else {
+ mf_new->v1= i1;
+ mf_new->v2= i2;
+ mf_new->v3= i2 + totvert;
+ mf_new->v4= i1 + totvert;
+ }
if( !mf_new->v3 || !mf_new->v4 ) {
SWAP(int, mf_new->v1, mf_new->v3);
@@ -767,7 +780,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
mface_index++;
/* new vertical edge */
- if (j) { /* The first set is alredy dome */
+ if (step) { /* The first set is already dome */
med_new->v1= i1;
med_new->v2= i2;
med_new->flag= med_new_firstloop->flag;
@@ -780,10 +793,18 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
/* close the loop*/
if (close) {
- mf_new->v1= i1;
- mf_new->v2= i2;
- mf_new->v3= med_new_firstloop->v2;
- mf_new->v4= med_new_firstloop->v1;
+ if(do_flip) {
+ mf_new->v4= i1;
+ mf_new->v3= i2;
+ mf_new->v2= med_new_firstloop->v2;
+ mf_new->v1= med_new_firstloop->v1;
+ }
+ else {
+ mf_new->v1= i1;
+ mf_new->v2= i2;
+ mf_new->v3= med_new_firstloop->v2;
+ mf_new->v4= med_new_firstloop->v1;
+ }
if( !mf_new->v3 || !mf_new->v4 ) {
SWAP(int, mf_new->v1, mf_new->v3);
@@ -803,7 +824,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
med_new++;
}
- if((ltmd->flag & MOD_SCREW_NORMAL_CALC)==0) {
+ if((ltmd->flag & MOD_SCREW_NORMAL_CALC) == 0) {
CDDM_calc_normals(result);
}
diff --git a/source/blender/modifiers/intern/MOD_shrinkwrap.c b/source/blender/modifiers/intern/MOD_shrinkwrap.c
index f4561d7cdae..6526be4cb53 100644
--- a/source/blender/modifiers/intern/MOD_shrinkwrap.c
+++ b/source/blender/modifiers/intern/MOD_shrinkwrap.c
@@ -30,12 +30,14 @@
*
*/
-#include "string.h"
+#include <string.h>
#include "BKE_cdderivedmesh.h"
#include "BKE_modifier.h"
#include "BKE_shrinkwrap.h"
+#include "DNA_object_types.h"
+
#include "depsgraph_private.h"
#include "MOD_util.h"
diff --git a/source/blender/modifiers/intern/MOD_simpledeform.c b/source/blender/modifiers/intern/MOD_simpledeform.c
index 79190c409cc..c64fec4075d 100644
--- a/source/blender/modifiers/intern/MOD_simpledeform.c
+++ b/source/blender/modifiers/intern/MOD_simpledeform.c
@@ -31,6 +31,7 @@
*/
#include "DNA_meshdata_types.h"
+#include "DNA_object_types.h"
#include "BLI_math.h"
diff --git a/source/blender/modifiers/intern/MOD_smoke.c b/source/blender/modifiers/intern/MOD_smoke.c
index df8372876bd..25153de7be4 100644
--- a/source/blender/modifiers/intern/MOD_smoke.c
+++ b/source/blender/modifiers/intern/MOD_smoke.c
@@ -34,6 +34,8 @@
#include "MEM_guardedalloc.h"
+#include "DNA_object_types.h"
+
#include "BKE_cdderivedmesh.h"
#include "BKE_modifier.h"
#include "BKE_smoke.h"
diff --git a/source/blender/modifiers/intern/MOD_util.c b/source/blender/modifiers/intern/MOD_util.c
index 5853b7a51ee..25072ee7b9b 100644
--- a/source/blender/modifiers/intern/MOD_util.c
+++ b/source/blender/modifiers/intern/MOD_util.c
@@ -18,7 +18,7 @@
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation;
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* The Original Code is Copyright (C) 2005 Blender Foundation.
* All rights reserved.
@@ -30,7 +30,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#include "string.h"
+#include <string.h>
#include "DNA_modifier_types.h"
#include "DNA_object_types.h"
diff --git a/source/blender/modifiers/intern/MOD_util.h b/source/blender/modifiers/intern/MOD_util.h
index 9592a3ce123..5750e042199 100644
--- a/source/blender/modifiers/intern/MOD_util.h
+++ b/source/blender/modifiers/intern/MOD_util.h
@@ -18,7 +18,7 @@
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation;
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Contributor(s): Ben Batt
*
diff --git a/source/blender/modifiers/intern/MOD_uvproject.c b/source/blender/modifiers/intern/MOD_uvproject.c
index 5d3c428c12d..3deef13735f 100644
--- a/source/blender/modifiers/intern/MOD_uvproject.c
+++ b/source/blender/modifiers/intern/MOD_uvproject.c
@@ -34,6 +34,7 @@
#include "DNA_meshdata_types.h"
#include "DNA_camera_types.h"
+#include "DNA_object_types.h"
#include "BLI_math.h"
#include "BLI_uvproject.h"
diff --git a/source/blender/modifiers/intern/MOD_wave.c b/source/blender/modifiers/intern/MOD_wave.c
index 27e1e071e60..a4cf8f4a2c2 100644
--- a/source/blender/modifiers/intern/MOD_wave.c
+++ b/source/blender/modifiers/intern/MOD_wave.c
@@ -34,6 +34,7 @@
#include "DNA_meshdata_types.h"
#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
#include "BKE_DerivedMesh.h"
#include "BKE_object.h"
diff --git a/source/blender/modifiers/intern/Makefile b/source/blender/modifiers/intern/Makefile
index 849bc11662e..94ea068a1bc 100644
--- a/source/blender/modifiers/intern/Makefile
+++ b/source/blender/modifiers/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/nodes/Makefile b/source/blender/nodes/Makefile
index a173908aeb1..f997e640a17 100644
--- a/source/blender/nodes/Makefile
+++ b/source/blender/nodes/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) Blender Foundation.
# All rights reserved.
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_chromaMatte.c b/source/blender/nodes/intern/CMP_nodes/CMP_chromaMatte.c
index b081880b87b..e502129c3d3 100644
--- a/source/blender/nodes/intern/CMP_nodes/CMP_chromaMatte.c
+++ b/source/blender/nodes/intern/CMP_nodes/CMP_chromaMatte.c
@@ -44,20 +44,38 @@ static bNodeSocketType cmp_node_chroma_out[]={
static void do_rgba_to_ycca_normalized(bNode *node, float *out, float *in)
{
- /*normalize to the range -1.0 to 1.0) */
- rgb_to_ycc(in[0],in[1],in[2], &out[0], &out[1], &out[2], BLI_YCC_ITU_BT601);
- out[0]=((out[0])-16)/255.0;
- out[1]=((out[1])-128)/255.0;
- out[2]=((out[2])-128)/255.0;
+ rgb_to_ycc(in[0],in[1],in[2], &out[0], &out[1], &out[2], BLI_YCC_ITU_BT601);
+
+ //normalize to 0..1.0
+ out[0]=out[0]/255.0;
+ out[1]=out[1]/255.0;
+ out[2]=out[2]/255.0;
+
+ //rescale to -1.0..1.0
+ out[0]=(out[0]*2.0)-1.0;
+ out[1]=(out[1]*2.0)-1.0;
+ out[2]=(out[2]*2.0)-1.0;
+
+// out[0]=((out[0])-16)/255.0;
+// out[1]=((out[1])-128)/255.0;
+// out[2]=((out[2])-128)/255.0;
out[3]=in[3];
}
static void do_ycca_to_rgba_normalized(bNode *node, float *out, float *in)
{
- /*un-normalize the normalize from above */
- in[0]=(in[0]*255.0)+16;
- in[1]=(in[1]*255.0)+128;
- in[2]=(in[2]*255.0)+128;
+ /*un-normalize the normalize from above */
+ in[0]=(in[0]+1.0)/2.0;
+ in[1]=(in[1]+1.0)/2.0;
+ in[2]=(in[2]+1.0)/2.0;
+
+ in[0]=(in[0]*255.0);
+ in[1]=(in[1]*255.0);
+ in[2]=(in[2]*255.0);
+
+// in[0]=(in[0]*255.0)+16;
+// in[1]=(in[1]*255.0)+128;
+// in[2]=(in[2]*255.0)+128;
ycc_to_rgb(in[0],in[1],in[2], &out[0], &out[1], &out[2], BLI_YCC_ITU_BT601);
out[3]=in[3];
}
@@ -65,47 +83,41 @@ static void do_ycca_to_rgba_normalized(bNode *node, float *out, float *in)
static void do_chroma_key(bNode *node, float *out, float *in)
{
NodeChroma *c;
- float x, z, alpha;
- float theta, beta, angle;
- float kfg, newY, newCb, newCr;
+ float x, z, alpha;
+ float theta, beta, angle, angle2;
+ float kfg;
c=node->storage;
- /* Algorithm from book "Video Demistified" */
+ /* Algorithm from book "Video Demistified," does not include the spill reduction part */
/* find theta, the angle that the color space should be rotated based on key*/
- theta=atan2(c->key[2],c->key[1]);
+ theta=atan2(c->key[2], c->key[1]);
/*rotate the cb and cr into x/z space */
- x=in[1]*cos(theta)+in[2]*sin(theta);
- z=in[2]*cos(theta)-in[1]*sin(theta);
+ x=in[1]*cos(theta)+in[2]*sin(theta);
+ z=in[2]*cos(theta)-in[1]*sin(theta);
- /*if within the acceptance angle */
- angle=c->t1*M_PI/180.0; /* convert to radians */
+ /*if within the acceptance angle */
+ angle=c->t1*M_PI/180.0; /* convert to radians */
- /* if kfg is <0 then the pixel is outside of the key color */
- kfg=x-(fabs(z)/tan(angle/2.0));
+ /* if kfg is <0 then the pixel is outside of the key color */
+ kfg=x-(fabs(z)/tan(angle/2.0));
- if(kfg>0.0) { /* found a pixel that is within key color */
+ out[0]=in[0];
+ out[1]=in[1];
+ out[2]=in[2];
- newY=in[0]-(1-c->t3)*kfg;
- newCb=in[1]-kfg*cos((double)theta);
- newCr=in[2]-kfg*sin((double)theta);
- alpha=(kfg+c->fsize)*(c->fstrength);
+ if(kfg>0.0) { /* found a pixel that is within key color */
+ alpha=(1.0-kfg)*(c->fstrength);
- beta=atan2(newCr,newCb);
- beta=beta*180.0/M_PI; /* convert to degrees for compare*/
-
- /* if beta is within the clippin angle */
- if(fabs(beta)<(c->t2/2.0)) {
- newCb=0.0;
- newCr=0.0;
- alpha=0.0;
- }
+ beta=atan2(z,x);
+ angle2=c->t2*M_PI/180.0;
- out[0]=newY;
- out[1]=newCb;
- out[2]=newCr;
+ /* if beta is within the cutoff angle */
+ if(fabs(beta)<(angle2/2.0)) {
+ alpha=0.0;
+ }
/* don't make something that was more transparent less transparent */
if (alpha<in[3]) {
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_colorSpill.c b/source/blender/nodes/intern/CMP_nodes/CMP_colorSpill.c
index 54fb1e384c3..3191ad757a0 100644
--- a/source/blender/nodes/intern/CMP_nodes/CMP_colorSpill.c
+++ b/source/blender/nodes/intern/CMP_nodes/CMP_colorSpill.c
@@ -34,7 +34,8 @@
/* ******************* Color Spill Supression ********************************* */
static bNodeSocketType cmp_node_color_spill_in[]={
- {SOCK_RGBA,1,"Image", 0.8f, 0.8f, 0.8f, 1.0f, 0.0f, 1.0f},
+ {SOCK_RGBA,1,"Image", 0.8f, 0.8f, 0.8f, 1.0f, 0.0f, 1.0f},
+ {SOCK_VALUE, 1, "Fac", 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
{-1,0,""}
};
@@ -50,6 +51,14 @@ static void do_simple_spillmap_red(bNode *node, float* out, float *in)
out[0]=in[0]-( ncs->limscale * in[ncs->limchan] );
}
+static void do_simple_spillmap_red_fac(bNode *node, float* out, float *in, float *fac)
+{
+ NodeColorspill *ncs;
+ ncs=node->storage;
+
+ out[0] = *fac * (in[0]-( ncs->limscale * in[ncs->limchan]));
+}
+
static void do_simple_spillmap_green(bNode *node, float* out, float *in)
{
NodeColorspill *ncs;
@@ -57,6 +66,14 @@ static void do_simple_spillmap_green(bNode *node, float* out, float *in)
out[0]=in[1]-( ncs->limscale * in[ncs->limchan] );
}
+static void do_simple_spillmap_green_fac(bNode *node, float* out, float *in, float *fac)
+{
+ NodeColorspill *ncs;
+ ncs=node->storage;
+
+ out[0] = *fac * (in[1]-( ncs->limscale * in[ncs->limchan]));
+}
+
static void do_simple_spillmap_blue(bNode *node, float* out, float *in)
{
NodeColorspill *ncs;
@@ -64,6 +81,14 @@ static void do_simple_spillmap_blue(bNode *node, float* out, float *in)
out[0]=in[2]-( ncs->limscale * in[ncs->limchan] );
}
+static void do_simple_spillmap_blue_fac(bNode *node, float* out, float *in, float *fac)
+{
+ NodeColorspill *ncs;
+ ncs=node->storage;
+
+ out[0] = *fac * (in[2]-( ncs->limscale * in[ncs->limchan]));
+}
+
static void do_average_spillmap_red(bNode *node, float* out, float *in)
{
NodeColorspill *ncs;
@@ -71,6 +96,14 @@ static void do_average_spillmap_red(bNode *node, float* out, float *in)
out[0]=in[0]-(ncs->limscale * avg(in[1], in[2]) );
}
+static void do_average_spillmap_red_fac(bNode *node, float* out, float *in, float *fac)
+{
+ NodeColorspill *ncs;
+ ncs=node->storage;
+
+ out[0] = *fac * (in[0]-(ncs->limscale * avg(in[1], in[2]) ));
+}
+
static void do_average_spillmap_green(bNode *node, float* out, float *in)
{
NodeColorspill *ncs;
@@ -78,6 +111,14 @@ static void do_average_spillmap_green(bNode *node, float* out, float *in)
out[0]=in[1]-(ncs->limscale * avg(in[0], in[2]) );
}
+static void do_average_spillmap_green_fac(bNode *node, float* out, float *in, float *fac)
+{
+ NodeColorspill *ncs;
+ ncs=node->storage;
+
+ out[0] = *fac * (in[0]-(ncs->limscale * avg(in[0], in[2]) ));
+}
+
static void do_average_spillmap_blue(bNode *node, float* out, float *in)
{
NodeColorspill *ncs;
@@ -85,6 +126,14 @@ static void do_average_spillmap_blue(bNode *node, float* out, float *in)
out[0]=in[2]-(ncs->limscale * avg(in[0], in[1]) );
}
+static void do_average_spillmap_blue_fac(bNode *node, float* out, float *in, float *fac)
+{
+ NodeColorspill *ncs;
+ ncs=node->storage;
+
+ out[0] = *fac * (in[0]-(ncs->limscale * avg(in[0], in[1]) ));
+}
+
static void do_apply_spillmap_red(bNode *node, float* out, float *in, float *map)
{
NodeColorspill *ncs;
@@ -109,7 +158,7 @@ static void do_apply_spillmap_green(bNode *node, float* out, float *in, float *m
out[0]=in[0]+(ncs->uspillr*map[0]);
out[1]=in[1]-(ncs->uspillg*map[0]);
out[2]=in[2]+(ncs->uspillb*map[0]);
- }
+ }
else {
out[0]=in[0];
out[1]=in[1];
@@ -125,7 +174,7 @@ static void do_apply_spillmap_blue(bNode *node, float* out, float *in, float *ma
out[0]=in[0]+(ncs->uspillr*map[0]);
out[1]=in[1]+(ncs->uspillg*map[0]);
out[2]=in[2]-(ncs->uspillb*map[0]);
- }
+ }
else {
out[0]=in[0];
out[1]=in[1];
@@ -138,16 +187,20 @@ static void node_composit_exec_color_spill(void *data, bNode *node, bNodeStack *
/*
Originally based on the information from the book "The Art and Science of Digital Composition" and
discussions from vfxtalk.com.*/
- CompBuf *cbuf;
+ CompBuf *cbuf;
+ CompBuf *mask;
CompBuf *rgbbuf;
CompBuf *spillmap;
NodeColorspill *ncs;
ncs=node->storage;
+
+ /* early out for missing connections */
+ if(out[0]->hasoutput==0 ) return;
+ if(in[0]->hasinput==0) return;
+ if(in[0]->data==NULL) return;
- if(out[0]->hasoutput==0 || in[0]->hasinput==0) return;
- if(in[0]->data==NULL) return;
-
- cbuf=typecheck_compbuf(in[0]->data, CB_RGBA);
+ cbuf=typecheck_compbuf(in[0]->data, CB_RGBA);
+ mask=typecheck_compbuf(in[1]->data, CB_VAL);
spillmap=alloc_compbuf(cbuf->x, cbuf->y, CB_VAL, 1);
rgbbuf=dupalloc_compbuf(cbuf);
@@ -157,14 +210,22 @@ static void node_composit_exec_color_spill(void *data, bNode *node, bNodeStack *
{
switch(node->custom2)
{
- case 0: /* simple limit */
- {
- composit1_pixel_processor(node, spillmap, cbuf, in[0]->vec, do_simple_spillmap_red, CB_RGBA);
+ case 0: /* simple limit */
+ {
+ if ((in[1]->data==NULL) && (in[1]->vec[0] >= 1.f)) {
+ composit1_pixel_processor(node, spillmap, cbuf, in[0]->vec, do_simple_spillmap_red, CB_RGBA);
+ } else {
+ composit2_pixel_processor(node, spillmap, cbuf, in[0]->vec, in[1]->data, in[1]->vec, do_simple_spillmap_red_fac, CB_RGBA, CB_VAL);
+ }
break;
}
- case 1: /* average limit */
- {
- composit1_pixel_processor(node, spillmap, cbuf, in[0]->vec, do_average_spillmap_red, CB_RGBA);
+ case 1: /* average limit */
+ {
+ if ((in[1]->data==NULL) && (in[1]->vec[0] >= 1.f)) {
+ composit1_pixel_processor(node, spillmap, cbuf, in[0]->vec, do_average_spillmap_red, CB_RGBA);
+ } else {
+ composit2_pixel_processor(node, spillmap, cbuf, in[0]->vec, in[1]->data, in[1]->vec, do_average_spillmap_red_fac, CB_RGBA, CB_VAL);
+ }
break;
}
}
@@ -180,22 +241,30 @@ static void node_composit_exec_color_spill(void *data, bNode *node, bNodeStack *
{
switch(node->custom2)
{
- case 0: /* simple limit */
- {
- composit1_pixel_processor(node, spillmap, cbuf, in[0]->vec, do_simple_spillmap_green, CB_RGBA);
- break;
- }
- case 1: /* average limit */
- {
- composit1_pixel_processor(node, spillmap, cbuf, in[0]->vec, do_average_spillmap_green, CB_RGBA);
- break;
- }
+ case 0: /* simple limit */
+ {
+ if ((in[1]->data==NULL) && (in[1]->vec[0] >= 1.f)) {
+ composit1_pixel_processor(node, spillmap, cbuf, in[0]->vec, do_simple_spillmap_green, CB_RGBA);
+ } else {
+ composit2_pixel_processor(node, spillmap, cbuf, in[0]->vec, in[1]->data, in[1]->vec, do_simple_spillmap_green_fac, CB_RGBA, CB_VAL);
+ }
+ break;
+ }
+ case 1: /* average limit */
+ {
+ if ((in[1]->data==NULL) && (in[1]->vec[0] >= 1.f)) {
+ composit1_pixel_processor(node, spillmap, cbuf, in[0]->vec, do_average_spillmap_green, CB_RGBA);
+ } else {
+ composit2_pixel_processor(node, spillmap, cbuf, in[0]->vec, in[1]->data, in[1]->vec, do_average_spillmap_green_fac, CB_RGBA, CB_VAL);
+ }
+ break;
+ }
}
if(ncs->unspill==0) {
ncs->uspillr=0.0f;
ncs->uspillg=1.0f;
ncs->uspillb=0.0f;
- }
+ }
composit2_pixel_processor(node, rgbbuf, cbuf, in[0]->vec, spillmap, NULL, do_apply_spillmap_green, CB_RGBA, CB_VAL);
break;
}
@@ -203,16 +272,24 @@ static void node_composit_exec_color_spill(void *data, bNode *node, bNodeStack *
{
switch(node->custom2)
{
- case 0: /* simple limit */
- {
- composit1_pixel_processor(node, spillmap, cbuf, in[0]->vec, do_simple_spillmap_blue, CB_RGBA);
- break;
- }
- case 1: /* average limit */
- {
- composit1_pixel_processor(node, spillmap, cbuf, in[0]->vec, do_average_spillmap_blue, CB_RGBA);
- break;
- }
+ case 0: /* simple limit */
+ {
+ if ((in[1]->data==NULL) && (in[1]->vec[0] >= 1.f)) {
+ composit1_pixel_processor(node, spillmap, cbuf, in[0]->vec, do_simple_spillmap_blue, CB_RGBA);
+ } else {
+ composit2_pixel_processor(node, spillmap, cbuf, in[0]->vec, in[1]->data, in[1]->vec, do_simple_spillmap_blue_fac, CB_RGBA, CB_VAL);
+ }
+ break;
+ }
+ case 1: /* average limit */
+ {
+ if ((in[1]->data==NULL) && (in[1]->vec[0] >= 1.f)) {
+ composit1_pixel_processor(node, spillmap, cbuf, in[0]->vec, do_average_spillmap_blue, CB_RGBA);
+ } else {
+ composit2_pixel_processor(node, spillmap, cbuf, in[0]->vec, in[1]->data, in[1]->vec, do_average_spillmap_blue_fac, CB_RGBA, CB_VAL);
+ }
+ break;
+ }
}
if(ncs->unspill==0) {
ncs->uspillr=0.0f;
@@ -246,19 +323,18 @@ static void node_composit_init_color_spill(bNode *node)
}
bNodeType cmp_node_color_spill={
- /* *next,*prev */ NULL, NULL,
- /* type code */ CMP_NODE_COLOR_SPILL,
- /* name */ "Color Spill",
- /* width+range */ 140, 80, 200,
- /* class+opts */ NODE_CLASS_MATTE, NODE_OPTIONS,
- /* input sock */ cmp_node_color_spill_in,
- /* output sock */ cmp_node_color_spill_out,
- /* storage */ "NodeColorspill",
- /* execfunc */ node_composit_exec_color_spill,
- /* butfunc */ NULL,
- /* initfunc */ node_composit_init_color_spill,
- /* freestoragefunc */ node_free_standard_storage,
- /* copystoragefunc */ node_copy_standard_storage,
- /* id */ NULL
+ /* *next,*prev */ NULL, NULL,
+ /* type code */ CMP_NODE_COLOR_SPILL,
+ /* name */ "Color Spill",
+ /* width+range */ 140, 80, 200,
+ /* class+opts */ NODE_CLASS_MATTE, NODE_OPTIONS,
+ /* input sock */ cmp_node_color_spill_in,
+ /* output sock */ cmp_node_color_spill_out,
+ /* storage */ "NodeColorspill",
+ /* execfunc */ node_composit_exec_color_spill,
+ /* butfunc */ NULL,
+ /* initfunc */ node_composit_init_color_spill,
+ /* freestoragefunc */ node_free_standard_storage,
+ /* copystoragefunc */ node_copy_standard_storage,
};
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_colorbalance.c b/source/blender/nodes/intern/CMP_nodes/CMP_colorbalance.c
index efd49172f95..43c6c6d791e 100644
--- a/source/blender/nodes/intern/CMP_nodes/CMP_colorbalance.c
+++ b/source/blender/nodes/intern/CMP_nodes/CMP_colorbalance.c
@@ -54,15 +54,19 @@ DO_INLINE float colorbalance_cdl(float in, float offset, float power, float slop
return powf(x, 1.f/power);
}
-/* note: lift_lgg is just 2-lift */
-DO_INLINE float colorbalance_lgg(float in, float lift_lgg, float gamma, float gain)
-{
- float x= (((in - 1.0f) * lift_lgg) + 1.0f) * gain;
+/* note: lift_lgg is just 2-lift, gamma_inv is 1.0/gamma */
+DO_INLINE float colorbalance_lgg(float in, float lift_lgg, float gamma_inv, float gain)
+{
+ /* 1:1 match with the sequencer with linear/srgb conversions, the conversion isnt pretty
+ * but best keep it this way, sice testing for durian shows a similar calculation
+ * without lin/srgb conversions gives bad results (over-saturated shadows) with colors
+ * slightly below 1.0. some correction can be done but it ends up looking bad for shadows or lighter tones - campbell */
+ float x= (((linearrgb_to_srgb(in) - 1.0f) * lift_lgg) + 1.0f) * gain;
/* prevent NaN */
if (x < 0.f) x = 0.f;
-
- return powf(x, (1.f/gamma));
+
+ return powf(srgb_to_linearrgb(x), gamma_inv);
}
static void do_colorbalance_cdl(bNode *node, float* out, float *in)
@@ -90,9 +94,9 @@ static void do_colorbalance_lgg(bNode *node, float* out, float *in)
{
NodeColorBalance *n= (NodeColorBalance *)node->storage;
- out[0] = colorbalance_lgg(in[0], n->lift_lgg[0], n->gamma[0], n->gain[0]);
- out[1] = colorbalance_lgg(in[1], n->lift_lgg[1], n->gamma[1], n->gain[1]);
- out[2] = colorbalance_lgg(in[2], n->lift_lgg[2], n->gamma[2], n->gain[2]);
+ out[0] = colorbalance_lgg(in[0], n->lift_lgg[0], n->gamma_inv[0], n->gain[0]);
+ out[1] = colorbalance_lgg(in[1], n->lift_lgg[1], n->gamma_inv[1], n->gain[1]);
+ out[2] = colorbalance_lgg(in[2], n->lift_lgg[2], n->gamma_inv[2], n->gain[2]);
out[3] = in[3];
}
@@ -101,9 +105,9 @@ static void do_colorbalance_lgg_fac(bNode *node, float* out, float *in, float *f
NodeColorBalance *n= (NodeColorBalance *)node->storage;
const float mfac= 1.0f - *fac;
- out[0] = mfac*in[0] + *fac * colorbalance_lgg(in[0], n->lift_lgg[0], n->gamma[0], n->gain[0]);
- out[1] = mfac*in[1] + *fac * colorbalance_lgg(in[1], n->lift_lgg[1], n->gamma[1], n->gain[1]);
- out[2] = mfac*in[2] + *fac * colorbalance_lgg(in[2], n->lift_lgg[2], n->gamma[2], n->gain[2]);
+ out[0] = mfac*in[0] + *fac * colorbalance_lgg(in[0], n->lift_lgg[0], n->gamma_inv[0], n->gain[0]);
+ out[1] = mfac*in[1] + *fac * colorbalance_lgg(in[1], n->lift_lgg[1], n->gamma_inv[1], n->gain[1]);
+ out[2] = mfac*in[2] + *fac * colorbalance_lgg(in[2], n->lift_lgg[2], n->gamma_inv[2], n->gain[2]);
out[3] = in[3];
}
@@ -125,15 +129,9 @@ static void node_composit_exec_colorbalance(void *data, bNode *node, bNodeStack
NodeColorBalance *n= (NodeColorBalance *)node->storage;
int c;
- copy_v3_v3(n->lift_lgg, n->lift);
-
for (c = 0; c < 3; c++) {
- /* tweak to give more subtle results
- * values above 1.0 are scaled */
- if(n->lift_lgg[c] > 1.0f)
- n->lift_lgg[c] = pow(n->lift_lgg[c] - 1.0f, 2.0f) + 1.0f;
-
- n->lift_lgg[c] = 2.0f - n->lift_lgg[c];
+ n->lift_lgg[c] = 2.0f - n->lift[c];
+ n->gamma_inv[c] = (n->gamma[c] != 0.0f) ? 1.0f/n->gamma[c] : 1000000.0f;
}
}
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_huecorrect.c b/source/blender/nodes/intern/CMP_nodes/CMP_huecorrect.c
index 95db66d92f7..9eb79bb8c36 100644
--- a/source/blender/nodes/intern/CMP_nodes/CMP_huecorrect.c
+++ b/source/blender/nodes/intern/CMP_nodes/CMP_huecorrect.c
@@ -141,7 +141,7 @@ static void node_composit_init_huecorrect(bNode* node)
for (c=0; c<3; c++) {
CurveMap *cuma = &cumapping->cm[c];
- curvemap_reset(cuma, &cumapping->clipr, cumapping->preset);
+ curvemap_reset(cuma, &cumapping->clipr, cumapping->preset, CURVEMAP_SLOPE_POSITIVE);
}
/* default to showing Saturation */
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_sepcombHSVA.c b/source/blender/nodes/intern/CMP_nodes/CMP_sepcombHSVA.c
index d80dd9b0a4b..0ac47c58ab3 100644
--- a/source/blender/nodes/intern/CMP_nodes/CMP_sepcombHSVA.c
+++ b/source/blender/nodes/intern/CMP_nodes/CMP_sepcombHSVA.c
@@ -64,7 +64,7 @@ static void node_composit_exec_sephsva(void *data, bNode *node, bNodeStack **in,
if(in[0]->data==NULL) {
float h, s, v;
- rgb_to_hsv(in[0]->vec[0], in[0]->vec[1], in[0]->vec[2], &h, &s, &v);
+ rgb_to_hsv(in[0]->vec[0], in[0]->vec[1], in[0]->vec[2], &h, &s, &v);
out[0]->vec[0] = h;
out[1]->vec[0] = s;
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_value.c b/source/blender/nodes/intern/CMP_nodes/CMP_value.c
index 576fb37dc45..14a3b6fe15c 100644
--- a/source/blender/nodes/intern/CMP_nodes/CMP_value.c
+++ b/source/blender/nodes/intern/CMP_nodes/CMP_value.c
@@ -31,7 +31,7 @@
/* **************** VALUE ******************** */
static bNodeSocketType cmp_node_value_out[]= {
- { SOCK_VALUE, 0, "Value", 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
+ { SOCK_VALUE, 0, "Value", 0.5f, 0.0f, 0.0f, 0.0f, -10000.0f, 10000.0f},
{ -1, 0, "" }
};
diff --git a/source/blender/nodes/intern/CMP_nodes/Makefile b/source/blender/nodes/intern/CMP_nodes/Makefile
index 5e8753570af..5e97864fb95 100644
--- a/source/blender/nodes/intern/CMP_nodes/Makefile
+++ b/source/blender/nodes/intern/CMP_nodes/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/nodes/intern/CMP_util.c b/source/blender/nodes/intern/CMP_util.c
index f3e00cb37f8..bcb038bccc3 100644
--- a/source/blender/nodes/intern/CMP_util.c
+++ b/source/blender/nodes/intern/CMP_util.c
@@ -1125,7 +1125,19 @@ void convolve(CompBuf* dst, CompBuf* in1, CompBuf* in2)
// sets fcol to pixelcolor at (x, y)
void qd_getPixel(CompBuf* src, int x, int y, float* col)
{
- if ((x >= 0) && (x < src->x) && (y >= 0) && (y < src->y)) {
+ if(src->rect_procedural) {
+ float bc[4];
+ src->rect_procedural(src, bc, (float)x/(float)src->xrad, (float)y/(float)src->yrad);
+
+ switch(src->type){
+ /* these fallthrough to get all the channels */
+ case CB_RGBA: col[3]=bc[3];
+ case CB_VEC3: col[2]=bc[2];
+ case CB_VEC2: col[1]=bc[1];
+ case CB_VAL: col[0]=bc[0];
+ }
+ }
+ else if ((x >= 0) && (x < src->x) && (y >= 0) && (y < src->y)) {
float* bc = &src->rect[(x + y*src->x)*src->type];
switch(src->type){
/* these fallthrough to get all the channels */
diff --git a/source/blender/nodes/intern/Makefile b/source/blender/nodes/intern/Makefile
index 08f4b936c76..1ffc09bce2c 100644
--- a/source/blender/nodes/intern/Makefile
+++ b/source/blender/nodes/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/nodes/intern/SHD_nodes/Makefile b/source/blender/nodes/intern/SHD_nodes/Makefile
index b6b21d5f5f8..666ffd4a7d3 100644
--- a/source/blender/nodes/intern/SHD_nodes/Makefile
+++ b/source/blender/nodes/intern/SHD_nodes/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_value.c b/source/blender/nodes/intern/SHD_nodes/SHD_value.c
index 77e0ec3bba3..1663ea352aa 100644
--- a/source/blender/nodes/intern/SHD_nodes/SHD_value.c
+++ b/source/blender/nodes/intern/SHD_nodes/SHD_value.c
@@ -31,7 +31,7 @@
/* **************** VALUE ******************** */
static bNodeSocketType sh_node_value_out[]= {
- { SOCK_VALUE, 0, "Value", 0.5f, 0.0f, 0.0f, 0.0f, -100.0f, 100.0f},
+ { SOCK_VALUE, 0, "Value", 0.5f, 0.0f, 0.0f, 0.0f, -10000.0f, 10000.0f},
{ -1, 0, "" }
};
diff --git a/source/blender/nodes/intern/TEX_nodes/Makefile b/source/blender/nodes/intern/TEX_nodes/Makefile
index f42660bd562..74eabe7932a 100644
--- a/source/blender/nodes/intern/TEX_nodes/Makefile
+++ b/source/blender/nodes/intern/TEX_nodes/Makefile
@@ -18,7 +18,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/python/CMakeLists.txt b/source/blender/python/CMakeLists.txt
index 3c79e9d3056..dcfc8678faa 100644
--- a/source/blender/python/CMakeLists.txt
+++ b/source/blender/python/CMakeLists.txt
@@ -36,6 +36,7 @@ SET(INC
../windowmanager
../editors/include
../../../intern/guardedalloc
+ ../../../intern/audaspace/intern
${PYTHON_INC}
)
diff --git a/source/blender/python/Makefile b/source/blender/python/Makefile
index b120dc6ad46..43b6f91369b 100644
--- a/source/blender/python/Makefile
+++ b/source/blender/python/Makefile
@@ -1,5 +1,5 @@
#
-# $Id: Makefile 21094 2009-06-23 00:09:26Z gsrb3d $
+# $Id$
#
# ***** BEGIN GPL LICENSE BLOCK *****
#
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) Blender Foundation.
# All rights reserved.
diff --git a/source/blender/python/SConscript b/source/blender/python/SConscript
index ca742a3646a..f062f64249c 100644
--- a/source/blender/python/SConscript
+++ b/source/blender/python/SConscript
@@ -6,10 +6,13 @@ sources = env.Glob('intern/*.c')
incs = '. ../editors/include ../makesdna ../makesrna ../blenlib ../blenkernel ../nodes'
incs += ' ../imbuf ../blenloader ../render/extern/include ../windowmanager'
incs += ' #intern/guardedalloc #intern/memutil #extern/glew/include'
-incs += ' ' + env['BF_PYTHON_INC']
+incs += ' #intern/audaspace/intern ' + env['BF_PYTHON_INC']
defs = []
+if env['BF_BUILDINFO']:
+ defs.append('BUILD_DATE')
+
if env['OURPLATFORM'] in ('win32-mingw', 'win32-vc','win64-vc') and env['BF_DEBUG']:
defs.append('_DEBUG')
diff --git a/source/blender/python/doc/epy/Geometry.py b/source/blender/python/doc/epy/Geometry.py
index 717c147b215..f8752a135c3 100644
--- a/source/blender/python/doc/epy/Geometry.py
+++ b/source/blender/python/doc/epy/Geometry.py
@@ -90,7 +90,7 @@ def LineIntersect(vec1, vec2, vec3, vec4):
def PolyFill(polylines):
"""
Takes a list of polylines and calculates triangles that would fill in the polylines.
- Multiple lines can be used to make holes inside a polyline, or fill in 2 seperate lines at once.
+ Multiple lines can be used to make holes inside a polyline, or fill in 2 separate lines at once.
@type polylines: List of lists containing vectors, each representing a closed polyline.
@rtype: list
@return: a list if tuples each a tuple of 3 ints representing a triangle indexing the points given.
diff --git a/source/blender/python/doc/examples/mathutils.py b/source/blender/python/doc/examples/mathutils.py
index 4a5de5887c9..0b30a0f4505 100644
--- a/source/blender/python/doc/examples/mathutils.py
+++ b/source/blender/python/doc/examples/mathutils.py
@@ -3,8 +3,8 @@ from math import radians
vec = mathutils.Vector((1.0, 2.0, 3.0))
-mat_rot = mathutils.RotationMatrix(radians(90), 4, 'X')
-mat_trans = mathutils.TranslationMatrix(vec)
+mat_rot = mathutils.Matrix.Rotation(radians(90), 4, 'X')
+mat_trans = mathutils.Matrix.Translation(vec)
mat = mat_trans * mat_rot
mat.invert()
diff --git a/source/blender/python/doc/sphinx_doc_gen.py b/source/blender/python/doc/sphinx_doc_gen.py
index 27524c66c36..06d1a9021b8 100644
--- a/source/blender/python/doc/sphinx_doc_gen.py
+++ b/source/blender/python/doc/sphinx_doc_gen.py
@@ -45,6 +45,7 @@ import rna_info
reload(rna_info)
# lame, python wont give some access
+ClassMethodDescriptorType = type(dict.__dict__['fromkeys'])
MethodDescriptorType = type(dict.get)
GetSetDescriptorType = type(int.real)
@@ -143,7 +144,9 @@ def pyfunc2sphinx(ident, fw, identifier, py_func, is_class=True):
def py_descr2sphinx(ident, fw, descr, module_name, type_name, identifier):
-
+ if identifier.startswith("_"):
+ return
+
doc = descr.__doc__
if not doc:
doc = undocumented_message(module_name, type_name, identifier)
@@ -151,10 +154,10 @@ def py_descr2sphinx(ident, fw, descr, module_name, type_name, identifier):
if type(descr) == GetSetDescriptorType:
fw(ident + ".. attribute:: %s\n\n" % identifier)
write_indented_lines(ident + " ", fw, doc, False)
- elif type(descr) == MethodDescriptorType: # GetSetDescriptorType's are not documented yet
+ elif type(descr) in (MethodDescriptorType, ClassMethodDescriptorType):
write_indented_lines(ident, fw, doc, False)
else:
- raise TypeError("type was not GetSetDescriptorType or MethodDescriptorType")
+ raise TypeError("type was not GetSetDescriptorType, MethodDescriptorType or ClassMethodDescriptorType")
write_example_ref(ident, fw, module_name + "." + type_name + "." + identifier)
fw("\n")
@@ -268,7 +271,11 @@ def pymodule2sphinx(BASEPATH, module_name, module, title):
descr_items = [(key, descr) for key, descr in sorted(value.__dict__.items()) if not key.startswith("__")]
for key, descr in descr_items:
- if type(descr) == MethodDescriptorType: # GetSetDescriptorType's are not documented yet
+ if type(descr) == ClassMethodDescriptorType:
+ py_descr2sphinx(" ", fw, descr, module_name, type_name, key)
+
+ for key, descr in descr_items:
+ if type(descr) == MethodDescriptorType:
py_descr2sphinx(" ", fw, descr, module_name, type_name, key)
for key, descr in descr_items:
@@ -346,6 +353,7 @@ def rna2sphinx(BASEPATH):
fw(" * data API, access to attributes of blender data such as mesh verts, material color, timeline frames and scene objects\n")
fw(" * user interface functions for defining buttons, creation of menus, headers, panels\n")
fw(" * modules: bgl, mathutils and geometry\n")
+ fw(" * game engine modules\n")
fw("\n")
fw("===================\n")
@@ -360,6 +368,7 @@ def rna2sphinx(BASEPATH):
# py modules
fw(" bpy.utils.rst\n\n")
+ fw(" bpy.path.rst\n\n")
fw(" bpy.app.rst\n\n")
# C modules
@@ -375,6 +384,7 @@ def rna2sphinx(BASEPATH):
fw(" mathutils.rst\n\n")
fw(" blf.rst\n\n")
+ fw(" aud.rst\n\n")
# game engine
fw("===================\n")
@@ -440,6 +450,9 @@ def rna2sphinx(BASEPATH):
from bpy import utils as module
pymodule2sphinx(BASEPATH, "bpy.utils", module, "Utilities (bpy.utils)")
+ from bpy import path as module
+ pymodule2sphinx(BASEPATH, "bpy.path", module, "Path Utilities (bpy.path)")
+
# C modules
from bpy import app as module
pymodule2sphinx(BASEPATH, "bpy.app", module, "Application Data (bpy.app)")
@@ -454,6 +467,10 @@ def rna2sphinx(BASEPATH):
import blf as module
pymodule2sphinx(BASEPATH, "blf", module, "Font Drawing (blf)")
del module
+
+ import aud as module
+ pymodule2sphinx(BASEPATH, "aud", module, "Audio System (aud)")
+ del module
# game engine
import shutil
@@ -553,10 +570,9 @@ def rna2sphinx(BASEPATH):
fw(" %s\n\n" % struct.description)
# properties sorted in alphabetical order
- zip_props_ids = zip(struct.properties, [prop.identifier for prop in struct.properties])
- zip_props_ids = sorted(zip_props_ids, key=lambda p: p[1])
- sorted_struct_properties = [x[0] for x in zip_props_ids]
-
+ sorted_struct_properties = struct.properties[:]
+ sorted_struct_properties.sort(key=lambda prop: prop.identifier)
+
for prop in sorted_struct_properties:
type_descr = prop.get_type_description(class_fmt=":class:`%s`")
# readonly properties use "data" directive, variables properties use "attribute" directive
@@ -578,7 +594,7 @@ def rna2sphinx(BASEPATH):
for func in struct.functions:
args_str = ", ".join([prop.get_arg_default(force=False) for prop in func.args])
- fw(" .. method:: %s(%s)\n\n" % (func.identifier, args_str))
+ fw(" .. %s:: %s(%s)\n\n" % ("classmethod" if func.is_classmethod else "method", func.identifier, args_str))
fw(" %s\n\n" % func.description)
for prop in func.args:
@@ -756,7 +772,8 @@ def rna2sphinx(BASEPATH):
file.close()
-if __name__ == '__main__':
+def main():
+ import bpy
if 'bpy' not in dir():
print("\nError, this script must run from inside blender2.5")
print(script_help_msg)
@@ -826,3 +843,6 @@ if __name__ == '__main__':
import sys
sys.exit()
+
+if __name__ == '__main__':
+ main()
diff --git a/source/blender/python/generic/Makefile b/source/blender/python/generic/Makefile
index dc674478dab..0df98046f63 100644
--- a/source/blender/python/generic/Makefile
+++ b/source/blender/python/generic/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/python/generic/bgl.c b/source/blender/python/generic/bgl.c
index 9bd3b4831db..8ac2107f8d2 100644
--- a/source/blender/python/generic/bgl.c
+++ b/source/blender/python/generic/bgl.c
@@ -27,9 +27,8 @@
* ***** END GPL LICENSE BLOCK *****
*/
-/* This file is the Blender.BGL part of opy_draw.c, from the old
- * bpython/intern dir, with minor changes to adapt it to the new Python
- * implementation. The BGL submodule "wraps" OpenGL functions and constants,
+/* This file is the 'bgl' module.
+ * The BGL submodule "wraps" OpenGL functions and constants,
* allowing script writers to make OpenGL calls in their Python scripts. */
#include "bgl.h" /*This must come first */
@@ -1118,7 +1117,7 @@ PyObject *BGL_Init(void)
{
PyObject *mod, *dict, *item;
mod = PyModule_Create(&BGL_module_def);
- PyDict_SetItemString(PySys_GetObject("modules"), BGL_module_def.m_name, mod);
+ PyDict_SetItemString(PyImport_GetModuleDict(), BGL_module_def.m_name, mod);
dict= PyModule_GetDict(mod);
if( PyType_Ready( &BGL_bufferType) < 0)
@@ -1613,3 +1612,4 @@ PyObject *BGL_Init(void)
return mod;
}
+
diff --git a/source/blender/python/generic/blf_api.c b/source/blender/python/generic/blf_api.c
index db3ce06554e..a5f5f8815c7 100644
--- a/source/blender/python/generic/blf_api.c
+++ b/source/blender/python/generic/blf_api.c
@@ -39,7 +39,7 @@ static char py_blf_position_doc[] =
" :arg y: Y axis position to draw the text.\n"
" :type y: float\n"
" :arg z: Z axis position to draw the text.\n"
-" :type x: float\n";
+" :type z: float\n";
static PyObject *py_blf_position(PyObject *self, PyObject *args)
{
@@ -153,7 +153,7 @@ static PyObject *py_blf_draw(PyObject *self, PyObject *args)
static char py_blf_dimensions_doc[] =
".. function:: dimensions(fontid, text)\n"
"\n"
-" Return the width and hight of the text.\n"
+" Return the width and height of the text.\n"
"\n"
" :arg fontid: The id of the typeface as returned by :func:`blf.load`, for default font use 0.\n"
" :type fontid: int\n"
@@ -261,7 +261,7 @@ static char py_blf_rotation_doc[] =
" :arg fontid: The id of the typeface as returned by :func:`blf.load`, for default font use 0.\n"
" :type fontid: int\n"
" :arg angle: The angle for text drawing to use.\n"
-" :type aspect: float\n";
+" :type angle: float\n";
static PyObject *py_blf_rotation(PyObject *self, PyObject *args)
{
@@ -394,7 +394,7 @@ PyObject *BLF_Init(void)
PyObject *submodule;
submodule = PyModule_Create(&BLF_module_def);
- PyDict_SetItemString(PySys_GetObject("modules"), BLF_module_def.m_name, submodule);
+ PyDict_SetItemString(PyImport_GetModuleDict(), BLF_module_def.m_name, submodule);
PyModule_AddIntConstant(submodule, "ROTATION", BLF_ROTATION);
PyModule_AddIntConstant(submodule, "CLIPPING", BLF_CLIPPING);
diff --git a/source/blender/python/generic/bpy_internal_import.c b/source/blender/python/generic/bpy_internal_import.c
index ffd34139cf5..5240daf76cb 100644
--- a/source/blender/python/generic/bpy_internal_import.c
+++ b/source/blender/python/generic/bpy_internal_import.c
@@ -200,7 +200,7 @@ static PyObject *blender_import( PyObject * self, PyObject * args, PyObject * k
&name, &globals, &locals, &fromlist, &dummy_val) )
return NULL;
- /* import existing builtin modules or modules that have been imported alredy */
+ /* import existing builtin modules or modules that have been imported already */
newmodule = PyImport_ImportModuleEx( name, globals, locals, fromlist );
if(newmodule)
@@ -304,7 +304,7 @@ PyMethodDef bpy_reload_meth[] = { {"bpy_reload_meth", (PyCFunction)blender_reloa
void bpy_text_clear_modules(int clear_all)
{
- PyObject *modules= PySys_GetObject("modules");
+ PyObject *modules= PyImport_GetModuleDict();
char *fname;
char *file_extension;
@@ -350,3 +350,26 @@ void bpy_text_clear_modules(int clear_all)
Py_DECREF(list); /* removes all references from append */
}
#endif
+
+
+/*****************************************************************************
+* Description: This function creates a new Python dictionary object.
+* note: dict is owned by sys.modules["__main__"] module, reference is borrowed
+* note: important we use the dict from __main__, this is what python expects
+ for 'pickle' to work as well as strings like this...
+ >> foo = 10
+ >> print(__import__("__main__").foo)
+*****************************************************************************/
+PyObject *bpy_namespace_dict_new(const char *filename)
+{
+ PyInterpreterState *interp= PyThreadState_GET()->interp;
+ PyObject *mod_main= PyModule_New("__main__");
+ PyDict_SetItemString(interp->modules, "__main__", mod_main);
+ Py_DECREF(mod_main); /* sys.modules owns now */
+ PyModule_AddStringConstant(mod_main, "__name__", "__main__");
+ if(filename)
+ PyModule_AddStringConstant(mod_main, "__file__", filename); /* __file__ only for nice UI'ness */
+ PyModule_AddObject(mod_main, "__builtins__", interp->builtins);
+ Py_INCREF(interp->builtins); /* AddObject steals a reference */
+ return PyModule_GetDict(mod_main);
+}
diff --git a/source/blender/python/generic/bpy_internal_import.h b/source/blender/python/generic/bpy_internal_import.h
index fc4b31a917c..cbd4c881217 100644
--- a/source/blender/python/generic/bpy_internal_import.h
+++ b/source/blender/python/generic/bpy_internal_import.h
@@ -60,5 +60,7 @@ extern PyMethodDef bpy_reload_meth[];
struct Main *bpy_import_main_get(void);
void bpy_import_main_set(struct Main *maggie);
+/* name namespace function for bpy & bge */
+PyObject *bpy_namespace_dict_new(const char *filename);
#endif /* EXPP_bpy_import_h */
diff --git a/source/blender/python/generic/geometry.c b/source/blender/python/generic/geometry.c
index 586c6a3406d..0e98760314d 100644
--- a/source/blender/python/generic/geometry.c
+++ b/source/blender/python/generic/geometry.c
@@ -634,7 +634,7 @@ static int boxPack_FromPyObject(PyObject * value, boxPack **boxarray )
boxPack *box;
- /* Error checking must alredy be done */
+ /* Error checking must already be done */
if( !PyList_Check( value ) ) {
PyErr_SetString( PyExc_TypeError, "can only back a list of [x,y,x,w]" );
return -1;
@@ -835,7 +835,7 @@ PyObject *Geometry_Init(void)
PyObject *submodule;
submodule = PyModule_Create(&M_Geometry_module_def);
- PyDict_SetItemString(PySys_GetObject("modules"), M_Geometry_module_def.m_name, submodule);
+ PyDict_SetItemString(PyImport_GetModuleDict(), M_Geometry_module_def.m_name, submodule);
return (submodule);
}
diff --git a/source/blender/python/generic/mathutils.c b/source/blender/python/generic/mathutils.c
index f0571f32f58..a643e6621b2 100644
--- a/source/blender/python/generic/mathutils.c
+++ b/source/blender/python/generic/mathutils.c
@@ -44,6 +44,14 @@
* - toEuler --> to_euler
* - toQuat --> to_quat
* - Vector.toTrackQuat --> Vector.to_track_quat
+ * - Quaternion * Quaternion --> cross product (not dot product)
+ *
+ * moved into class functions.
+ * - Mathutils.RotationMatrix -> mathutils.Matrix.Rotation
+ * - Mathutils.ScaleMatrix -> mathutils.Matrix.Scale
+ * - Mathutils.ShearMatrix -> mathutils.Matrix.Shear
+ * - Mathutils.TranslationMatrix -> mathutils.Matrix.Translation
+ * - Mathutils.OrthoProjectionMatrix -> mathutils.Matrix.OrthoProjection
*
* Moved to Geometry module: Intersect, TriangleArea, TriangleNormal, QuadNormal, LineIntersect
*/
@@ -92,503 +100,8 @@ int mathutils_array_parse(float *array, int array_min, int array_max, PyObject *
return size;
}
-//-----------------------------METHODS----------------------------
-//-----------------quat_rotation (internal)-----------
-//This function multiplies a vector/point * quat or vice versa
-//to rotate the point/vector by the quaternion
-//arguments should all be 3D
-PyObject *quat_rotation(PyObject *arg1, PyObject *arg2)
-{
- float rot[3];
- QuaternionObject *quat = NULL;
- VectorObject *vec = NULL;
-
- if(QuaternionObject_Check(arg1)){
- quat = (QuaternionObject*)arg1;
- if(!BaseMath_ReadCallback(quat))
- return NULL;
-
- if(VectorObject_Check(arg2)){
- vec = (VectorObject*)arg2;
-
- if(!BaseMath_ReadCallback(vec))
- return NULL;
-
- rot[0] = quat->quat[0]*quat->quat[0]*vec->vec[0] + 2*quat->quat[2]*quat->quat[0]*vec->vec[2] -
- 2*quat->quat[3]*quat->quat[0]*vec->vec[1] + quat->quat[1]*quat->quat[1]*vec->vec[0] +
- 2*quat->quat[2]*quat->quat[1]*vec->vec[1] + 2*quat->quat[3]*quat->quat[1]*vec->vec[2] -
- quat->quat[3]*quat->quat[3]*vec->vec[0] - quat->quat[2]*quat->quat[2]*vec->vec[0];
- rot[1] = 2*quat->quat[1]*quat->quat[2]*vec->vec[0] + quat->quat[2]*quat->quat[2]*vec->vec[1] +
- 2*quat->quat[3]*quat->quat[2]*vec->vec[2] + 2*quat->quat[0]*quat->quat[3]*vec->vec[0] -
- quat->quat[3]*quat->quat[3]*vec->vec[1] + quat->quat[0]*quat->quat[0]*vec->vec[1] -
- 2*quat->quat[1]*quat->quat[0]*vec->vec[2] - quat->quat[1]*quat->quat[1]*vec->vec[1];
- rot[2] = 2*quat->quat[1]*quat->quat[3]*vec->vec[0] + 2*quat->quat[2]*quat->quat[3]*vec->vec[1] +
- quat->quat[3]*quat->quat[3]*vec->vec[2] - 2*quat->quat[0]*quat->quat[2]*vec->vec[0] -
- quat->quat[2]*quat->quat[2]*vec->vec[2] + 2*quat->quat[0]*quat->quat[1]*vec->vec[1] -
- quat->quat[1]*quat->quat[1]*vec->vec[2] + quat->quat[0]*quat->quat[0]*vec->vec[2];
- return newVectorObject(rot, 3, Py_NEW, NULL);
- }
- }else if(VectorObject_Check(arg1)){
- vec = (VectorObject*)arg1;
-
- if(!BaseMath_ReadCallback(vec))
- return NULL;
-
- if(QuaternionObject_Check(arg2)){
- quat = (QuaternionObject*)arg2;
- if(!BaseMath_ReadCallback(quat))
- return NULL;
-
- rot[0] = quat->quat[0]*quat->quat[0]*vec->vec[0] + 2*quat->quat[2]*quat->quat[0]*vec->vec[2] -
- 2*quat->quat[3]*quat->quat[0]*vec->vec[1] + quat->quat[1]*quat->quat[1]*vec->vec[0] +
- 2*quat->quat[2]*quat->quat[1]*vec->vec[1] + 2*quat->quat[3]*quat->quat[1]*vec->vec[2] -
- quat->quat[3]*quat->quat[3]*vec->vec[0] - quat->quat[2]*quat->quat[2]*vec->vec[0];
- rot[1] = 2*quat->quat[1]*quat->quat[2]*vec->vec[0] + quat->quat[2]*quat->quat[2]*vec->vec[1] +
- 2*quat->quat[3]*quat->quat[2]*vec->vec[2] + 2*quat->quat[0]*quat->quat[3]*vec->vec[0] -
- quat->quat[3]*quat->quat[3]*vec->vec[1] + quat->quat[0]*quat->quat[0]*vec->vec[1] -
- 2*quat->quat[1]*quat->quat[0]*vec->vec[2] - quat->quat[1]*quat->quat[1]*vec->vec[1];
- rot[2] = 2*quat->quat[1]*quat->quat[3]*vec->vec[0] + 2*quat->quat[2]*quat->quat[3]*vec->vec[1] +
- quat->quat[3]*quat->quat[3]*vec->vec[2] - 2*quat->quat[0]*quat->quat[2]*vec->vec[0] -
- quat->quat[2]*quat->quat[2]*vec->vec[2] + 2*quat->quat[0]*quat->quat[1]*vec->vec[1] -
- quat->quat[1]*quat->quat[1]*vec->vec[2] + quat->quat[0]*quat->quat[0]*vec->vec[2];
- return newVectorObject(rot, 3, Py_NEW, NULL);
- }
- }
-
- PyErr_SetString(PyExc_RuntimeError, "quat_rotation(internal): internal problem rotating vector/point\n");
- return NULL;
-
-}
-
//----------------------------------MATRIX FUNCTIONS--------------------
-//----------------------------------mathutils.RotationMatrix() ----------
-//mat is a 1D array of floats - row[0][0],row[0][1], row[1][0], etc.
-static char M_Mathutils_RotationMatrix_doc[] =
-".. function:: RotationMatrix(angle, size, axis)\n"
-"\n"
-" Create a matrix representing a rotation.\n"
-"\n"
-" :arg angle: The angle of rotation desired, in radians.\n"
-" :type angle: float\n"
-" :arg size: The size of the rotation matrix to construct [2, 4].\n"
-" :type size: int\n"
-" :arg axis: a string in ['X', 'Y', 'Z'] or a 3D Vector Object (optional when size is 2).\n"
-" :type axis: string or :class:`Vector`\n"
-" :return: A new rotation matrix.\n"
-" :rtype: :class:`Matrix`\n";
-
-static PyObject *M_Mathutils_RotationMatrix(PyObject * self, PyObject * args)
-{
- VectorObject *vec= NULL;
- char *axis= NULL;
- int matSize;
- float angle = 0.0f;
- float mat[16] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
- 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
-
- if(!PyArg_ParseTuple(args, "fi|O", &angle, &matSize, &vec)) {
- PyErr_SetString(PyExc_TypeError, "mathutils.RotationMatrix(angle, size, axis): expected float int and a string or vector\n");
- return NULL;
- }
-
- if(vec && !VectorObject_Check(vec)) {
- axis= _PyUnicode_AsString((PyObject *)vec);
- if(axis==NULL || axis[0]=='\0' || axis[1]!='\0' || axis[0] < 'X' || axis[0] > 'Z') {
- PyErr_SetString(PyExc_TypeError, "mathutils.RotationMatrix(): 3rd argument axis value must be a 3D vector or a string in 'X', 'Y', 'Z'\n");
- return NULL;
- }
- else {
- /* use the string */
- vec= NULL;
- }
- }
- while (angle<-(Py_PI*2))
- angle+=(Py_PI*2);
- while (angle>(Py_PI*2))
- angle-=(Py_PI*2);
-
- if(matSize != 2 && matSize != 3 && matSize != 4) {
- PyErr_SetString(PyExc_AttributeError, "mathutils.RotationMatrix(): can only return a 2x2 3x3 or 4x4 matrix\n");
- return NULL;
- }
- if(matSize == 2 && (vec != NULL)) {
- PyErr_SetString(PyExc_AttributeError, "mathutils.RotationMatrix(): cannot create a 2x2 rotation matrix around arbitrary axis\n");
- return NULL;
- }
- if((matSize == 3 || matSize == 4) && (axis == NULL) && (vec == NULL)) {
- PyErr_SetString(PyExc_AttributeError, "mathutils.RotationMatrix(): please choose an axis of rotation for 3d and 4d matrices\n");
- return NULL;
- }
- if(vec) {
- if(vec->size != 3) {
- PyErr_SetString(PyExc_AttributeError, "mathutils.RotationMatrix(): the vector axis must be a 3D vector\n");
- return NULL;
- }
-
- if(!BaseMath_ReadCallback(vec))
- return NULL;
-
- }
-
- /* check for valid vector/axis above */
- if(vec) {
- axis_angle_to_mat3( (float (*)[3])mat,vec->vec, angle);
- }
- else if(matSize == 2) {
- //2D rotation matrix
- mat[0] = (float) cos (angle);
- mat[1] = (float) sin (angle);
- mat[2] = -((float) sin(angle));
- mat[3] = (float) cos(angle);
- } else if(strcmp(axis, "X") == 0) {
- //rotation around X
- mat[0] = 1.0f;
- mat[4] = (float) cos(angle);
- mat[5] = (float) sin(angle);
- mat[7] = -((float) sin(angle));
- mat[8] = (float) cos(angle);
- } else if(strcmp(axis, "Y") == 0) {
- //rotation around Y
- mat[0] = (float) cos(angle);
- mat[2] = -((float) sin(angle));
- mat[4] = 1.0f;
- mat[6] = (float) sin(angle);
- mat[8] = (float) cos(angle);
- } else if(strcmp(axis, "Z") == 0) {
- //rotation around Z
- mat[0] = (float) cos(angle);
- mat[1] = (float) sin(angle);
- mat[3] = -((float) sin(angle));
- mat[4] = (float) cos(angle);
- mat[8] = 1.0f;
- }
- else {
- /* should never get here */
- PyErr_SetString(PyExc_AttributeError, "mathutils.RotationMatrix(): unknown error\n");
- return NULL;
- }
-
- if(matSize == 4) {
- //resize matrix
- mat[10] = mat[8];
- mat[9] = mat[7];
- mat[8] = mat[6];
- mat[7] = 0.0f;
- mat[6] = mat[5];
- mat[5] = mat[4];
- mat[4] = mat[3];
- mat[3] = 0.0f;
- }
- //pass to matrix creation
- return newMatrixObject(mat, matSize, matSize, Py_NEW, NULL);
-}
-
-static char M_Mathutils_TranslationMatrix_doc[] =
-".. function:: TranslationMatrix(vector)\n"
-"\n"
-" Create a matrix representing a translation.\n"
-"\n"
-" :arg vector: The translation vector.\n"
-" :type vector: :class:`Vector`\n"
-" :return: An identity matrix with a translation.\n"
-" :rtype: :class:`Matrix`\n";
-
-static PyObject *M_Mathutils_TranslationMatrix(PyObject * self, VectorObject * vec)
-{
- float mat[16] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
- 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
-
- if(!VectorObject_Check(vec)) {
- PyErr_SetString(PyExc_TypeError, "mathutils.TranslationMatrix(): expected vector\n");
- return NULL;
- }
- if(vec->size != 3 && vec->size != 4) {
- PyErr_SetString(PyExc_TypeError, "mathutils.TranslationMatrix(): vector must be 3D or 4D\n");
- return NULL;
- }
-
- if(!BaseMath_ReadCallback(vec))
- return NULL;
-
- //create a identity matrix and add translation
- unit_m4((float(*)[4]) mat);
- mat[12] = vec->vec[0];
- mat[13] = vec->vec[1];
- mat[14] = vec->vec[2];
-
- return newMatrixObject(mat, 4, 4, Py_NEW, NULL);
-}
-//----------------------------------mathutils.ScaleMatrix() -------------
-//mat is a 1D array of floats - row[0][0],row[0][1], row[1][0], etc.
-static char M_Mathutils_ScaleMatrix_doc[] =
-".. function:: ScaleMatrix(factor, size, axis)\n"
-"\n"
-" Create a matrix representing a scaling.\n"
-"\n"
-" :arg factor: The factor of scaling to apply.\n"
-" :type factor: float\n"
-" :arg size: The size of the scale matrix to construct [2, 4].\n"
-" :type size: int\n"
-" :arg axis: Direction to influence scale. (optional).\n"
-" :type axis: :class:`Vector`\n"
-" :return: A new scale matrix.\n"
-" :rtype: :class:`Matrix`\n";
-
-static PyObject *M_Mathutils_ScaleMatrix(PyObject * self, PyObject * args)
-{
- VectorObject *vec = NULL;
- float norm = 0.0f, factor;
- int matSize, x;
- float mat[16] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
- 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
-
- if(!PyArg_ParseTuple(args, "fi|O!", &factor, &matSize, &vector_Type, &vec)) {
- PyErr_SetString(PyExc_TypeError, "mathutils.ScaleMatrix(): expected float int and optional vector\n");
- return NULL;
- }
- if(matSize != 2 && matSize != 3 && matSize != 4) {
- PyErr_SetString(PyExc_AttributeError, "mathutils.ScaleMatrix(): can only return a 2x2 3x3 or 4x4 matrix\n");
- return NULL;
- }
- if(vec) {
- if(vec->size > 2 && matSize == 2) {
- PyErr_SetString(PyExc_AttributeError, "mathutils.ScaleMatrix(): please use 2D vectors when scaling in 2D\n");
- return NULL;
- }
-
- if(!BaseMath_ReadCallback(vec))
- return NULL;
-
- }
- if(vec == NULL) { //scaling along axis
- if(matSize == 2) {
- mat[0] = factor;
- mat[3] = factor;
- } else {
- mat[0] = factor;
- mat[4] = factor;
- mat[8] = factor;
- }
- } else { //scaling in arbitrary direction
- //normalize arbitrary axis
- for(x = 0; x < vec->size; x++) {
- norm += vec->vec[x] * vec->vec[x];
- }
- norm = (float) sqrt(norm);
- for(x = 0; x < vec->size; x++) {
- vec->vec[x] /= norm;
- }
- if(matSize == 2) {
- mat[0] = 1 +((factor - 1) *(vec->vec[0] * vec->vec[0]));
- mat[1] =((factor - 1) *(vec->vec[0] * vec->vec[1]));
- mat[2] =((factor - 1) *(vec->vec[0] * vec->vec[1]));
- mat[3] = 1 + ((factor - 1) *(vec->vec[1] * vec->vec[1]));
- } else {
- mat[0] = 1 + ((factor - 1) *(vec->vec[0] * vec->vec[0]));
- mat[1] =((factor - 1) *(vec->vec[0] * vec->vec[1]));
- mat[2] =((factor - 1) *(vec->vec[0] * vec->vec[2]));
- mat[3] =((factor - 1) *(vec->vec[0] * vec->vec[1]));
- mat[4] = 1 + ((factor - 1) *(vec->vec[1] * vec->vec[1]));
- mat[5] =((factor - 1) *(vec->vec[1] * vec->vec[2]));
- mat[6] =((factor - 1) *(vec->vec[0] * vec->vec[2]));
- mat[7] =((factor - 1) *(vec->vec[1] * vec->vec[2]));
- mat[8] = 1 + ((factor - 1) *(vec->vec[2] * vec->vec[2]));
- }
- }
- if(matSize == 4) {
- //resize matrix
- mat[10] = mat[8];
- mat[9] = mat[7];
- mat[8] = mat[6];
- mat[7] = 0.0f;
- mat[6] = mat[5];
- mat[5] = mat[4];
- mat[4] = mat[3];
- mat[3] = 0.0f;
- }
- //pass to matrix creation
- return newMatrixObject(mat, matSize, matSize, Py_NEW, NULL);
-}
-//----------------------------------mathutils.OrthoProjectionMatrix() ---
-//mat is a 1D array of floats - row[0][0],row[0][1], row[1][0], etc.
-static char M_Mathutils_OrthoProjectionMatrix_doc[] =
-".. function:: OrthoProjectionMatrix(plane, size, axis)\n"
-"\n"
-" Create a matrix to represent an orthographic projection.\n"
-"\n"
-" :arg plane: Can be any of the following: ['X', 'Y', 'XY', 'XZ', 'YZ', 'R'], where a single axis is for a 2D matrix and 'R' requires axis is given.\n"
-" :type plane: string\n"
-" :arg size: The size of the projection matrix to construct [2, 4].\n"
-" :type size: int\n"
-" :arg axis: Arbitrary perpendicular plane vector (optional).\n"
-" :type axis: :class:`Vector`\n"
-" :return: A new projection matrix.\n"
-" :rtype: :class:`Matrix`\n";
-static PyObject *M_Mathutils_OrthoProjectionMatrix(PyObject * self, PyObject * args)
-{
- VectorObject *vec = NULL;
- char *plane;
- int matSize, x;
- float norm = 0.0f;
- float mat[16] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
- 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
-
- if(!PyArg_ParseTuple(args, "si|O!", &plane, &matSize, &vector_Type, &vec)) {
- PyErr_SetString(PyExc_TypeError, "mathutils.OrthoProjectionMatrix(): expected string and int and optional vector\n");
- return NULL;
- }
- if(matSize != 2 && matSize != 3 && matSize != 4) {
- PyErr_SetString(PyExc_AttributeError,"mathutils.OrthoProjectionMatrix(): can only return a 2x2 3x3 or 4x4 matrix\n");
- return NULL;
- }
- if(vec) {
- if(vec->size > 2 && matSize == 2) {
- PyErr_SetString(PyExc_AttributeError, "mathutils.OrthoProjectionMatrix(): please use 2D vectors when scaling in 2D\n");
- return NULL;
- }
-
- if(!BaseMath_ReadCallback(vec))
- return NULL;
-
- }
- if(vec == NULL) { //ortho projection onto cardinal plane
- if((strcmp(plane, "X") == 0) && matSize == 2) {
- mat[0] = 1.0f;
- } else if((strcmp(plane, "Y") == 0) && matSize == 2) {
- mat[3] = 1.0f;
- } else if((strcmp(plane, "XY") == 0) && matSize > 2) {
- mat[0] = 1.0f;
- mat[4] = 1.0f;
- } else if((strcmp(plane, "XZ") == 0) && matSize > 2) {
- mat[0] = 1.0f;
- mat[8] = 1.0f;
- } else if((strcmp(plane, "YZ") == 0) && matSize > 2) {
- mat[4] = 1.0f;
- mat[8] = 1.0f;
- } else {
- PyErr_SetString(PyExc_AttributeError, "mathutils.OrthoProjectionMatrix(): unknown plane - expected: X, Y, XY, XZ, YZ\n");
- return NULL;
- }
- } else { //arbitrary plane
- //normalize arbitrary axis
- for(x = 0; x < vec->size; x++) {
- norm += vec->vec[x] * vec->vec[x];
- }
- norm = (float) sqrt(norm);
- for(x = 0; x < vec->size; x++) {
- vec->vec[x] /= norm;
- }
- if((strcmp(plane, "R") == 0) && matSize == 2) {
- mat[0] = 1 - (vec->vec[0] * vec->vec[0]);
- mat[1] = -(vec->vec[0] * vec->vec[1]);
- mat[2] = -(vec->vec[0] * vec->vec[1]);
- mat[3] = 1 - (vec->vec[1] * vec->vec[1]);
- } else if((strcmp(plane, "R") == 0) && matSize > 2) {
- mat[0] = 1 - (vec->vec[0] * vec->vec[0]);
- mat[1] = -(vec->vec[0] * vec->vec[1]);
- mat[2] = -(vec->vec[0] * vec->vec[2]);
- mat[3] = -(vec->vec[0] * vec->vec[1]);
- mat[4] = 1 - (vec->vec[1] * vec->vec[1]);
- mat[5] = -(vec->vec[1] * vec->vec[2]);
- mat[6] = -(vec->vec[0] * vec->vec[2]);
- mat[7] = -(vec->vec[1] * vec->vec[2]);
- mat[8] = 1 - (vec->vec[2] * vec->vec[2]);
- } else {
- PyErr_SetString(PyExc_AttributeError, "mathutils.OrthoProjectionMatrix(): unknown plane - expected: 'r' expected for axis designation\n");
- return NULL;
- }
- }
- if(matSize == 4) {
- //resize matrix
- mat[10] = mat[8];
- mat[9] = mat[7];
- mat[8] = mat[6];
- mat[7] = 0.0f;
- mat[6] = mat[5];
- mat[5] = mat[4];
- mat[4] = mat[3];
- mat[3] = 0.0f;
- }
- //pass to matrix creation
- return newMatrixObject(mat, matSize, matSize, Py_NEW, NULL);
-}
-
-static char M_Mathutils_ShearMatrix_doc[] =
-".. function:: ShearMatrix(plane, factor, size)\n"
-"\n"
-" Create a matrix to represent an shear transformation.\n"
-"\n"
-" :arg plane: Can be any of the following: ['X', 'Y', 'XY', 'XZ', 'YZ'], where a single axis is for a 2D matrix.\n"
-" :type plane: string\n"
-" :arg factor: The factor of shear to apply.\n"
-" :type factor: float\n"
-" :arg size: The size of the shear matrix to construct [2, 4].\n"
-" :type size: int\n"
-" :return: A new shear matrix.\n"
-" :rtype: :class:`Matrix`\n";
-
-static PyObject *M_Mathutils_ShearMatrix(PyObject * self, PyObject * args)
-{
- int matSize;
- char *plane;
- float factor;
- float mat[16] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
- 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
-
- if(!PyArg_ParseTuple(args, "sfi", &plane, &factor, &matSize)) {
- PyErr_SetString(PyExc_TypeError,"mathutils.ShearMatrix(): expected string float and int\n");
- return NULL;
- }
- if(matSize != 2 && matSize != 3 && matSize != 4) {
- PyErr_SetString(PyExc_AttributeError,"mathutils.ShearMatrix(): can only return a 2x2 3x3 or 4x4 matrix\n");
- return NULL;
- }
-
- if((strcmp(plane, "X") == 0)
- && matSize == 2) {
- mat[0] = 1.0f;
- mat[2] = factor;
- mat[3] = 1.0f;
- } else if((strcmp(plane, "Y") == 0) && matSize == 2) {
- mat[0] = 1.0f;
- mat[1] = factor;
- mat[3] = 1.0f;
- } else if((strcmp(plane, "XY") == 0) && matSize > 2) {
- mat[0] = 1.0f;
- mat[4] = 1.0f;
- mat[6] = factor;
- mat[7] = factor;
- } else if((strcmp(plane, "XZ") == 0) && matSize > 2) {
- mat[0] = 1.0f;
- mat[3] = factor;
- mat[4] = 1.0f;
- mat[5] = factor;
- mat[8] = 1.0f;
- } else if((strcmp(plane, "YZ") == 0) && matSize > 2) {
- mat[0] = 1.0f;
- mat[1] = factor;
- mat[2] = factor;
- mat[4] = 1.0f;
- mat[8] = 1.0f;
- } else {
- PyErr_SetString(PyExc_AttributeError, "mathutils.ShearMatrix(): expected: x, y, xy, xz, yz or wrong matrix size for shearing plane\n");
- return NULL;
- }
- if(matSize == 4) {
- //resize matrix
- mat[10] = mat[8];
- mat[9] = mat[7];
- mat[8] = mat[6];
- mat[7] = 0.0f;
- mat[6] = mat[5];
- mat[5] = mat[4];
- mat[4] = mat[3];
- mat[3] = 0.0f;
- }
- //pass to matrix creation
- return newMatrixObject(mat, matSize, matSize, Py_NEW, NULL);
-}
/* Utility functions */
@@ -634,7 +147,7 @@ int Mathutils_RegisterCallback(Mathutils_Callback *cb)
/* find the first free slot */
for(i= 0; mathutils_callbacks[i]; i++) {
- if(mathutils_callbacks[i]==cb) /* alredy registered? */
+ if(mathutils_callbacks[i]==cb) /* already registered? */
return i;
}
@@ -696,7 +209,7 @@ PyObject *BaseMathObject_getOwner( BaseMathObject * self, void *type )
return ret;
}
-char BaseMathObject_Wrapped_doc[] = "True when this object wraps external data (readonly). **type** boolean";
+char BaseMathObject_Wrapped_doc[] = "True when this object wraps external data (readonly).\n\n:type: boolean";
PyObject *BaseMathObject_getWrapped( BaseMathObject *self, void *type )
{
return PyBool_FromLong((self->wrapped == Py_WRAP) ? 1:0);
@@ -714,11 +227,6 @@ void BaseMathObject_dealloc(BaseMathObject * self)
/*----------------------------MODULE INIT-------------------------*/
struct PyMethodDef M_Mathutils_methods[] = {
- {"RotationMatrix", (PyCFunction) M_Mathutils_RotationMatrix, METH_VARARGS, M_Mathutils_RotationMatrix_doc},
- {"ScaleMatrix", (PyCFunction) M_Mathutils_ScaleMatrix, METH_VARARGS, M_Mathutils_ScaleMatrix_doc},
- {"ShearMatrix", (PyCFunction) M_Mathutils_ShearMatrix, METH_VARARGS, M_Mathutils_ShearMatrix_doc},
- {"TranslationMatrix", (PyCFunction) M_Mathutils_TranslationMatrix, METH_O, M_Mathutils_TranslationMatrix_doc},
- {"OrthoProjectionMatrix", (PyCFunction) M_Mathutils_OrthoProjectionMatrix, METH_VARARGS, M_Mathutils_OrthoProjectionMatrix_doc},
{NULL, NULL, 0, NULL}
};
@@ -750,7 +258,7 @@ PyObject *Mathutils_Init(void)
return NULL;
submodule = PyModule_Create(&M_Mathutils_module_def);
- PyDict_SetItemString(PySys_GetObject("modules"), M_Mathutils_module_def.m_name, submodule);
+ PyDict_SetItemString(PyImport_GetModuleDict(), M_Mathutils_module_def.m_name, submodule);
/* each type has its own new() function */
PyModule_AddObject( submodule, "Vector", (PyObject *)&vector_Type );
diff --git a/source/blender/python/generic/mathutils.h b/source/blender/python/generic/mathutils.h
index b03f15a20b1..85fbe3225ba 100644
--- a/source/blender/python/generic/mathutils.h
+++ b/source/blender/python/generic/mathutils.h
@@ -61,8 +61,7 @@ PyObject *BaseMathObject_getWrapped( BaseMathObject *self, void * );
void BaseMathObject_dealloc(BaseMathObject * self);
PyObject *Mathutils_Init(void);
-
-PyObject *quat_rotation(PyObject *arg1, PyObject *arg2);
+PyObject *Noise_Init(void); /* lazy, saves having own header */
int EXPP_FloatsAreEqual(float A, float B, int floatSteps);
int EXPP_VectorsAreEqual(float *vecA, float *vecB, int size, int floatSteps);
@@ -73,19 +72,6 @@ int EXPP_VectorsAreEqual(float *vecA, float *vecB, int size, int floatSteps);
#define Py_NEW 1
#define Py_WRAP 2
-
-/* Mathutils is used by the BGE and Blender so have to define
- * some things here for luddite mac users of py2.3 */
-#ifndef Py_RETURN_NONE
-#define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None
-#endif
-#ifndef Py_RETURN_FALSE
-#define Py_RETURN_FALSE return Py_INCREF(Py_False), Py_False
-#endif
-#ifndef Py_RETURN_TRUE
-#define Py_RETURN_TRUE return Py_INCREF(Py_True), Py_True
-#endif
-
typedef struct Mathutils_Callback Mathutils_Callback;
typedef int (*BaseMathCheckFunc)(BaseMathObject *); /* checks the user is still valid */
diff --git a/source/blender/python/generic/mathutils_color.c b/source/blender/python/generic/mathutils_color.c
index 5acd03060d4..57d2838238c 100644
--- a/source/blender/python/generic/mathutils_color.c
+++ b/source/blender/python/generic/mathutils_color.c
@@ -434,18 +434,18 @@ static int Color_setHSV(ColorObject * self, PyObject * value, void * type)
/* Python attributes get/set structure: */
/*****************************************************************************/
static PyGetSetDef Color_getseters[] = {
- {"r", (getter)Color_getChannel, (setter)Color_setChannel, "Red color channel. **type** float", (void *)0},
- {"g", (getter)Color_getChannel, (setter)Color_setChannel, "Green color channel. **type** float", (void *)1},
- {"b", (getter)Color_getChannel, (setter)Color_setChannel, "Blue color channel. **type** float", (void *)2},
+ {"r", (getter)Color_getChannel, (setter)Color_setChannel, "Red color channel.\n\n:type: float", (void *)0},
+ {"g", (getter)Color_getChannel, (setter)Color_setChannel, "Green color channel.\n\n:type: float", (void *)1},
+ {"b", (getter)Color_getChannel, (setter)Color_setChannel, "Blue color channel.\n\n:type: float", (void *)2},
- {"h", (getter)Color_getChannelHSV, (setter)Color_setChannelHSV, "HSV Hue component in [0, 1]. **type** float", (void *)0},
- {"s", (getter)Color_getChannelHSV, (setter)Color_setChannelHSV, "HSV Saturation component in [0, 1]. **type** float", (void *)1},
- {"v", (getter)Color_getChannelHSV, (setter)Color_setChannelHSV, "HSV Value component in [0, 1]. **type** float", (void *)2},
+ {"h", (getter)Color_getChannelHSV, (setter)Color_setChannelHSV, "HSV Hue component in [0, 1].\n\n:type: float", (void *)0},
+ {"s", (getter)Color_getChannelHSV, (setter)Color_setChannelHSV, "HSV Saturation component in [0, 1].\n\n:type: float", (void *)1},
+ {"v", (getter)Color_getChannelHSV, (setter)Color_setChannelHSV, "HSV Value component in [0, 1].\n\n:type: float", (void *)2},
- {"hsv", (getter)Color_getHSV, (setter)Color_setHSV, "HSV Values in [0, 1]. **type** float triplet", (void *)0},
+ {"hsv", (getter)Color_getHSV, (setter)Color_setHSV, "HSV Values in [0, 1].\n\n:type: float triplet", (void *)0},
{"is_wrapped", (getter)BaseMathObject_getWrapped, (setter)NULL, BaseMathObject_Wrapped_doc, NULL},
- {"_owner", (getter)BaseMathObject_getOwner, (setter)NULL, BaseMathObject_Owner_doc, NULL},
+ {"owner", (getter)BaseMathObject_getOwner, (setter)NULL, BaseMathObject_Owner_doc, NULL},
{NULL,NULL,NULL,NULL,NULL} /* Sentinel */
};
diff --git a/source/blender/python/generic/mathutils_euler.c b/source/blender/python/generic/mathutils_euler.c
index aac65043a0a..b36eb7803f1 100644
--- a/source/blender/python/generic/mathutils_euler.c
+++ b/source/blender/python/generic/mathutils_euler.c
@@ -615,13 +615,13 @@ static int Euler_setOrder( EulerObject * self, PyObject * value, void * type )
/* Python attributes get/set structure: */
/*****************************************************************************/
static PyGetSetDef Euler_getseters[] = {
- {"x", (getter)Euler_getAxis, (setter)Euler_setAxis, "Euler X axis in radians. **type** float", (void *)0},
- {"y", (getter)Euler_getAxis, (setter)Euler_setAxis, "Euler Y axis in radians. **type** float", (void *)1},
- {"z", (getter)Euler_getAxis, (setter)Euler_setAxis, "Euler Z axis in radians. **type** float", (void *)2},
- {"order", (getter)Euler_getOrder, (setter)Euler_setOrder, "Euler rotation order. **type** string in ['XYZ', 'XZY', 'YXZ', 'YZX', 'ZXY', 'ZYX']", (void *)NULL},
+ {"x", (getter)Euler_getAxis, (setter)Euler_setAxis, "Euler X axis in radians.\n\n:type: float", (void *)0},
+ {"y", (getter)Euler_getAxis, (setter)Euler_setAxis, "Euler Y axis in radians.\n\n:type: float", (void *)1},
+ {"z", (getter)Euler_getAxis, (setter)Euler_setAxis, "Euler Z axis in radians.\n\n:type: float", (void *)2},
+ {"order", (getter)Euler_getOrder, (setter)Euler_setOrder, "Euler rotation order.\n\n:type: string in ['XYZ', 'XZY', 'YXZ', 'YZX', 'ZXY', 'ZYX']", (void *)NULL},
{"is_wrapped", (getter)BaseMathObject_getWrapped, (setter)NULL, BaseMathObject_Wrapped_doc, NULL},
- {"_owner", (getter)BaseMathObject_getOwner, (setter)NULL, BaseMathObject_Owner_doc, NULL},
+ {"owner", (getter)BaseMathObject_getOwner, (setter)NULL, BaseMathObject_Owner_doc, NULL},
{NULL,NULL,NULL,NULL,NULL} /* Sentinel */
};
diff --git a/source/blender/python/generic/mathutils_matrix.c b/source/blender/python/generic/mathutils_matrix.c
index a211386f503..24239e1f541 100644
--- a/source/blender/python/generic/mathutils_matrix.c
+++ b/source/blender/python/generic/mathutils_matrix.c
@@ -181,6 +181,438 @@ static PyObject *Matrix_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
return newMatrixObject(matrix, argSize, seqSize, Py_NEW, NULL);
}
+/*-----------------------CLASS-METHODS----------------------------*/
+
+//----------------------------------mathutils.RotationMatrix() ----------
+//mat is a 1D array of floats - row[0][0],row[0][1], row[1][0], etc.
+static char C_Matrix_Rotation_doc[] =
+".. classmethod:: Rotation(angle, size, axis)\n"
+"\n"
+" Create a matrix representing a rotation.\n"
+"\n"
+" :arg angle: The angle of rotation desired, in radians.\n"
+" :type angle: float\n"
+" :arg size: The size of the rotation matrix to construct [2, 4].\n"
+" :type size: int\n"
+" :arg axis: a string in ['X', 'Y', 'Z'] or a 3D Vector Object (optional when size is 2).\n"
+" :type axis: string or :class:`Vector`\n"
+" :return: A new rotation matrix.\n"
+" :rtype: :class:`Matrix`\n";
+
+static PyObject *C_Matrix_Rotation(PyObject *cls, PyObject *args)
+{
+ VectorObject *vec= NULL;
+ char *axis= NULL;
+ int matSize;
+ float angle = 0.0f;
+ float mat[16] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
+ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
+
+ if(!PyArg_ParseTuple(args, "fi|O", &angle, &matSize, &vec)) {
+ PyErr_SetString(PyExc_TypeError, "mathutils.RotationMatrix(angle, size, axis): expected float int and a string or vector\n");
+ return NULL;
+ }
+
+ if(vec && !VectorObject_Check(vec)) {
+ axis= _PyUnicode_AsString((PyObject *)vec);
+ if(axis==NULL || axis[0]=='\0' || axis[1]!='\0' || axis[0] < 'X' || axis[0] > 'Z') {
+ PyErr_SetString(PyExc_TypeError, "mathutils.RotationMatrix(): 3rd argument axis value must be a 3D vector or a string in 'X', 'Y', 'Z'\n");
+ return NULL;
+ }
+ else {
+ /* use the string */
+ vec= NULL;
+ }
+ }
+
+ while (angle<-(Py_PI*2))
+ angle+=(Py_PI*2);
+ while (angle>(Py_PI*2))
+ angle-=(Py_PI*2);
+
+ if(matSize != 2 && matSize != 3 && matSize != 4) {
+ PyErr_SetString(PyExc_AttributeError, "mathutils.RotationMatrix(): can only return a 2x2 3x3 or 4x4 matrix\n");
+ return NULL;
+ }
+ if(matSize == 2 && (vec != NULL)) {
+ PyErr_SetString(PyExc_AttributeError, "mathutils.RotationMatrix(): cannot create a 2x2 rotation matrix around arbitrary axis\n");
+ return NULL;
+ }
+ if((matSize == 3 || matSize == 4) && (axis == NULL) && (vec == NULL)) {
+ PyErr_SetString(PyExc_AttributeError, "mathutils.RotationMatrix(): please choose an axis of rotation for 3d and 4d matrices\n");
+ return NULL;
+ }
+ if(vec) {
+ if(vec->size != 3) {
+ PyErr_SetString(PyExc_AttributeError, "mathutils.RotationMatrix(): the vector axis must be a 3D vector\n");
+ return NULL;
+ }
+
+ if(!BaseMath_ReadCallback(vec))
+ return NULL;
+
+ }
+
+ /* check for valid vector/axis above */
+ if(vec) {
+ axis_angle_to_mat3( (float (*)[3])mat,vec->vec, angle);
+ }
+ else if(matSize == 2) {
+ //2D rotation matrix
+ mat[0] = (float) cos (angle);
+ mat[1] = (float) sin (angle);
+ mat[2] = -((float) sin(angle));
+ mat[3] = (float) cos(angle);
+ } else if(strcmp(axis, "X") == 0) {
+ //rotation around X
+ mat[0] = 1.0f;
+ mat[4] = (float) cos(angle);
+ mat[5] = (float) sin(angle);
+ mat[7] = -((float) sin(angle));
+ mat[8] = (float) cos(angle);
+ } else if(strcmp(axis, "Y") == 0) {
+ //rotation around Y
+ mat[0] = (float) cos(angle);
+ mat[2] = -((float) sin(angle));
+ mat[4] = 1.0f;
+ mat[6] = (float) sin(angle);
+ mat[8] = (float) cos(angle);
+ } else if(strcmp(axis, "Z") == 0) {
+ //rotation around Z
+ mat[0] = (float) cos(angle);
+ mat[1] = (float) sin(angle);
+ mat[3] = -((float) sin(angle));
+ mat[4] = (float) cos(angle);
+ mat[8] = 1.0f;
+ }
+ else {
+ /* should never get here */
+ PyErr_SetString(PyExc_AttributeError, "mathutils.RotationMatrix(): unknown error\n");
+ return NULL;
+ }
+
+ if(matSize == 4) {
+ //resize matrix
+ mat[10] = mat[8];
+ mat[9] = mat[7];
+ mat[8] = mat[6];
+ mat[7] = 0.0f;
+ mat[6] = mat[5];
+ mat[5] = mat[4];
+ mat[4] = mat[3];
+ mat[3] = 0.0f;
+ }
+ //pass to matrix creation
+ return newMatrixObject(mat, matSize, matSize, Py_NEW, (PyTypeObject *)cls);
+}
+
+
+static char C_Matrix_Translation_doc[] =
+".. classmethod:: Translation(vector)\n"
+"\n"
+" Create a matrix representing a translation.\n"
+"\n"
+" :arg vector: The translation vector.\n"
+" :type vector: :class:`Vector`\n"
+" :return: An identity matrix with a translation.\n"
+" :rtype: :class:`Matrix`\n";
+
+static PyObject *C_Matrix_Translation(PyObject *cls, VectorObject * vec)
+{
+ float mat[16] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
+ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
+
+ if(!VectorObject_Check(vec)) {
+ PyErr_SetString(PyExc_TypeError, "mathutils.TranslationMatrix(): expected vector\n");
+ return NULL;
+ }
+ if(vec->size != 3 && vec->size != 4) {
+ PyErr_SetString(PyExc_TypeError, "mathutils.TranslationMatrix(): vector must be 3D or 4D\n");
+ return NULL;
+ }
+
+ if(!BaseMath_ReadCallback(vec))
+ return NULL;
+
+ //create a identity matrix and add translation
+ unit_m4((float(*)[4]) mat);
+ mat[12] = vec->vec[0];
+ mat[13] = vec->vec[1];
+ mat[14] = vec->vec[2];
+
+ return newMatrixObject(mat, 4, 4, Py_NEW, (PyTypeObject *)cls);
+}
+//----------------------------------mathutils.ScaleMatrix() -------------
+//mat is a 1D array of floats - row[0][0],row[0][1], row[1][0], etc.
+static char C_Matrix_Scale_doc[] =
+".. classmethod:: Scale(factor, size, axis)\n"
+"\n"
+" Create a matrix representing a scaling.\n"
+"\n"
+" :arg factor: The factor of scaling to apply.\n"
+" :type factor: float\n"
+" :arg size: The size of the scale matrix to construct [2, 4].\n"
+" :type size: int\n"
+" :arg axis: Direction to influence scale. (optional).\n"
+" :type axis: :class:`Vector`\n"
+" :return: A new scale matrix.\n"
+" :rtype: :class:`Matrix`\n";
+
+static PyObject *C_Matrix_Scale(PyObject *cls, PyObject *args)
+{
+ VectorObject *vec = NULL;
+ float norm = 0.0f, factor;
+ int matSize, x;
+ float mat[16] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
+ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
+
+ if(!PyArg_ParseTuple(args, "fi|O!", &factor, &matSize, &vector_Type, &vec)) {
+ PyErr_SetString(PyExc_TypeError, "mathutils.ScaleMatrix(): expected float int and optional vector\n");
+ return NULL;
+ }
+ if(matSize != 2 && matSize != 3 && matSize != 4) {
+ PyErr_SetString(PyExc_AttributeError, "mathutils.ScaleMatrix(): can only return a 2x2 3x3 or 4x4 matrix\n");
+ return NULL;
+ }
+ if(vec) {
+ if(vec->size > 2 && matSize == 2) {
+ PyErr_SetString(PyExc_AttributeError, "mathutils.ScaleMatrix(): please use 2D vectors when scaling in 2D\n");
+ return NULL;
+ }
+
+ if(!BaseMath_ReadCallback(vec))
+ return NULL;
+
+ }
+ if(vec == NULL) { //scaling along axis
+ if(matSize == 2) {
+ mat[0] = factor;
+ mat[3] = factor;
+ } else {
+ mat[0] = factor;
+ mat[4] = factor;
+ mat[8] = factor;
+ }
+ } else { //scaling in arbitrary direction
+ //normalize arbitrary axis
+ for(x = 0; x < vec->size; x++) {
+ norm += vec->vec[x] * vec->vec[x];
+ }
+ norm = (float) sqrt(norm);
+ for(x = 0; x < vec->size; x++) {
+ vec->vec[x] /= norm;
+ }
+ if(matSize == 2) {
+ mat[0] = 1 +((factor - 1) *(vec->vec[0] * vec->vec[0]));
+ mat[1] =((factor - 1) *(vec->vec[0] * vec->vec[1]));
+ mat[2] =((factor - 1) *(vec->vec[0] * vec->vec[1]));
+ mat[3] = 1 + ((factor - 1) *(vec->vec[1] * vec->vec[1]));
+ } else {
+ mat[0] = 1 + ((factor - 1) *(vec->vec[0] * vec->vec[0]));
+ mat[1] =((factor - 1) *(vec->vec[0] * vec->vec[1]));
+ mat[2] =((factor - 1) *(vec->vec[0] * vec->vec[2]));
+ mat[3] =((factor - 1) *(vec->vec[0] * vec->vec[1]));
+ mat[4] = 1 + ((factor - 1) *(vec->vec[1] * vec->vec[1]));
+ mat[5] =((factor - 1) *(vec->vec[1] * vec->vec[2]));
+ mat[6] =((factor - 1) *(vec->vec[0] * vec->vec[2]));
+ mat[7] =((factor - 1) *(vec->vec[1] * vec->vec[2]));
+ mat[8] = 1 + ((factor - 1) *(vec->vec[2] * vec->vec[2]));
+ }
+ }
+ if(matSize == 4) {
+ //resize matrix
+ mat[10] = mat[8];
+ mat[9] = mat[7];
+ mat[8] = mat[6];
+ mat[7] = 0.0f;
+ mat[6] = mat[5];
+ mat[5] = mat[4];
+ mat[4] = mat[3];
+ mat[3] = 0.0f;
+ }
+ //pass to matrix creation
+ return newMatrixObject(mat, matSize, matSize, Py_NEW, (PyTypeObject *)cls);
+}
+//----------------------------------mathutils.OrthoProjectionMatrix() ---
+//mat is a 1D array of floats - row[0][0],row[0][1], row[1][0], etc.
+static char C_Matrix_OrthoProjection_doc[] =
+".. classmethod:: OrthoProjection(plane, size, axis)\n"
+"\n"
+" Create a matrix to represent an orthographic projection.\n"
+"\n"
+" :arg plane: Can be any of the following: ['X', 'Y', 'XY', 'XZ', 'YZ', 'R'], where a single axis is for a 2D matrix and 'R' requires axis is given.\n"
+" :type plane: string\n"
+" :arg size: The size of the projection matrix to construct [2, 4].\n"
+" :type size: int\n"
+" :arg axis: Arbitrary perpendicular plane vector (optional).\n"
+" :type axis: :class:`Vector`\n"
+" :return: A new projection matrix.\n"
+" :rtype: :class:`Matrix`\n";
+static PyObject *C_Matrix_OrthoProjection(PyObject *cls, PyObject *args)
+{
+ VectorObject *vec = NULL;
+ char *plane;
+ int matSize, x;
+ float norm = 0.0f;
+ float mat[16] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
+ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
+
+ if(!PyArg_ParseTuple(args, "si|O!", &plane, &matSize, &vector_Type, &vec)) {
+ PyErr_SetString(PyExc_TypeError, "mathutils.OrthoProjectionMatrix(): expected string and int and optional vector\n");
+ return NULL;
+ }
+ if(matSize != 2 && matSize != 3 && matSize != 4) {
+ PyErr_SetString(PyExc_AttributeError,"mathutils.OrthoProjectionMatrix(): can only return a 2x2 3x3 or 4x4 matrix\n");
+ return NULL;
+ }
+ if(vec) {
+ if(vec->size > 2 && matSize == 2) {
+ PyErr_SetString(PyExc_AttributeError, "mathutils.OrthoProjectionMatrix(): please use 2D vectors when scaling in 2D\n");
+ return NULL;
+ }
+
+ if(!BaseMath_ReadCallback(vec))
+ return NULL;
+
+ }
+ if(vec == NULL) { //ortho projection onto cardinal plane
+ if((strcmp(plane, "X") == 0) && matSize == 2) {
+ mat[0] = 1.0f;
+ } else if((strcmp(plane, "Y") == 0) && matSize == 2) {
+ mat[3] = 1.0f;
+ } else if((strcmp(plane, "XY") == 0) && matSize > 2) {
+ mat[0] = 1.0f;
+ mat[4] = 1.0f;
+ } else if((strcmp(plane, "XZ") == 0) && matSize > 2) {
+ mat[0] = 1.0f;
+ mat[8] = 1.0f;
+ } else if((strcmp(plane, "YZ") == 0) && matSize > 2) {
+ mat[4] = 1.0f;
+ mat[8] = 1.0f;
+ } else {
+ PyErr_SetString(PyExc_AttributeError, "mathutils.OrthoProjectionMatrix(): unknown plane - expected: X, Y, XY, XZ, YZ\n");
+ return NULL;
+ }
+ } else { //arbitrary plane
+ //normalize arbitrary axis
+ for(x = 0; x < vec->size; x++) {
+ norm += vec->vec[x] * vec->vec[x];
+ }
+ norm = (float) sqrt(norm);
+ for(x = 0; x < vec->size; x++) {
+ vec->vec[x] /= norm;
+ }
+ if((strcmp(plane, "R") == 0) && matSize == 2) {
+ mat[0] = 1 - (vec->vec[0] * vec->vec[0]);
+ mat[1] = -(vec->vec[0] * vec->vec[1]);
+ mat[2] = -(vec->vec[0] * vec->vec[1]);
+ mat[3] = 1 - (vec->vec[1] * vec->vec[1]);
+ } else if((strcmp(plane, "R") == 0) && matSize > 2) {
+ mat[0] = 1 - (vec->vec[0] * vec->vec[0]);
+ mat[1] = -(vec->vec[0] * vec->vec[1]);
+ mat[2] = -(vec->vec[0] * vec->vec[2]);
+ mat[3] = -(vec->vec[0] * vec->vec[1]);
+ mat[4] = 1 - (vec->vec[1] * vec->vec[1]);
+ mat[5] = -(vec->vec[1] * vec->vec[2]);
+ mat[6] = -(vec->vec[0] * vec->vec[2]);
+ mat[7] = -(vec->vec[1] * vec->vec[2]);
+ mat[8] = 1 - (vec->vec[2] * vec->vec[2]);
+ } else {
+ PyErr_SetString(PyExc_AttributeError, "mathutils.OrthoProjectionMatrix(): unknown plane - expected: 'r' expected for axis designation\n");
+ return NULL;
+ }
+ }
+ if(matSize == 4) {
+ //resize matrix
+ mat[10] = mat[8];
+ mat[9] = mat[7];
+ mat[8] = mat[6];
+ mat[7] = 0.0f;
+ mat[6] = mat[5];
+ mat[5] = mat[4];
+ mat[4] = mat[3];
+ mat[3] = 0.0f;
+ }
+ //pass to matrix creation
+ return newMatrixObject(mat, matSize, matSize, Py_NEW, (PyTypeObject *)cls);
+}
+
+static char C_Matrix_Shear_doc[] =
+".. classmethod:: Shear(plane, factor, size)\n"
+"\n"
+" Create a matrix to represent an shear transformation.\n"
+"\n"
+" :arg plane: Can be any of the following: ['X', 'Y', 'XY', 'XZ', 'YZ'], where a single axis is for a 2D matrix.\n"
+" :type plane: string\n"
+" :arg factor: The factor of shear to apply.\n"
+" :type factor: float\n"
+" :arg size: The size of the shear matrix to construct [2, 4].\n"
+" :type size: int\n"
+" :return: A new shear matrix.\n"
+" :rtype: :class:`Matrix`\n";
+
+static PyObject *C_Matrix_Shear(PyObject *cls, PyObject *args)
+{
+ int matSize;
+ char *plane;
+ float factor;
+ float mat[16] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
+ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
+
+ if(!PyArg_ParseTuple(args, "sfi", &plane, &factor, &matSize)) {
+ PyErr_SetString(PyExc_TypeError,"mathutils.ShearMatrix(): expected string float and int\n");
+ return NULL;
+ }
+ if(matSize != 2 && matSize != 3 && matSize != 4) {
+ PyErr_SetString(PyExc_AttributeError,"mathutils.ShearMatrix(): can only return a 2x2 3x3 or 4x4 matrix\n");
+ return NULL;
+ }
+
+ if((strcmp(plane, "X") == 0)
+ && matSize == 2) {
+ mat[0] = 1.0f;
+ mat[2] = factor;
+ mat[3] = 1.0f;
+ } else if((strcmp(plane, "Y") == 0) && matSize == 2) {
+ mat[0] = 1.0f;
+ mat[1] = factor;
+ mat[3] = 1.0f;
+ } else if((strcmp(plane, "XY") == 0) && matSize > 2) {
+ mat[0] = 1.0f;
+ mat[4] = 1.0f;
+ mat[6] = factor;
+ mat[7] = factor;
+ } else if((strcmp(plane, "XZ") == 0) && matSize > 2) {
+ mat[0] = 1.0f;
+ mat[3] = factor;
+ mat[4] = 1.0f;
+ mat[5] = factor;
+ mat[8] = 1.0f;
+ } else if((strcmp(plane, "YZ") == 0) && matSize > 2) {
+ mat[0] = 1.0f;
+ mat[1] = factor;
+ mat[2] = factor;
+ mat[4] = 1.0f;
+ mat[8] = 1.0f;
+ } else {
+ PyErr_SetString(PyExc_AttributeError, "mathutils.ShearMatrix(): expected: x, y, xy, xz, yz or wrong matrix size for shearing plane\n");
+ return NULL;
+ }
+ if(matSize == 4) {
+ //resize matrix
+ mat[10] = mat[8];
+ mat[9] = mat[7];
+ mat[8] = mat[6];
+ mat[7] = 0.0f;
+ mat[6] = mat[5];
+ mat[5] = mat[4];
+ mat[4] = mat[3];
+ mat[3] = 0.0f;
+ }
+ //pass to matrix creation
+ return newMatrixObject(mat, matSize, matSize, Py_NEW, (PyTypeObject *)cls);
+}
+
/* assumes rowsize == colsize is checked and the read callback has run */
static float matrix_determinant(MatrixObject * self)
{
@@ -1300,12 +1732,12 @@ static PyObject *Matrix_getIsNegative( MatrixObject * self, void *type )
/* Python attributes get/set structure: */
/*****************************************************************************/
static PyGetSetDef Matrix_getseters[] = {
- {"row_size", (getter)Matrix_getRowSize, (setter)NULL, "The row size of the matrix (readonly). **type** int", NULL},
- {"col_size", (getter)Matrix_getColSize, (setter)NULL, "The column size of the matrix (readonly). **type** int", NULL},
- {"median_scale", (getter)Matrix_getMedianScale, (setter)NULL, "The average scale applied to each axis (readonly). **type** float", NULL},
- {"is_negative", (getter)Matrix_getIsNegative, (setter)NULL, "True if this matrix results in a negative scale, 3x3 and 4x4 only, (readonly). **type** bool", NULL},
+ {"row_size", (getter)Matrix_getRowSize, (setter)NULL, "The row size of the matrix (readonly).\n\n:type: int", NULL},
+ {"col_size", (getter)Matrix_getColSize, (setter)NULL, "The column size of the matrix (readonly).\n\n:type: int", NULL},
+ {"median_scale", (getter)Matrix_getMedianScale, (setter)NULL, "The average scale applied to each axis (readonly).\n\n:type: float", NULL},
+ {"is_negative", (getter)Matrix_getIsNegative, (setter)NULL, "True if this matrix results in a negative scale, 3x3 and 4x4 only, (readonly).\n\n:type: bool", NULL},
{"is_wrapped", (getter)BaseMathObject_getWrapped, (setter)NULL, BaseMathObject_Wrapped_doc, NULL},
- {"_owner",(getter)BaseMathObject_getOwner, (setter)NULL, BaseMathObject_Owner_doc, NULL},
+ {"owner",(getter)BaseMathObject_getOwner, (setter)NULL, BaseMathObject_Owner_doc, NULL},
{NULL,NULL,NULL,NULL,NULL} /* Sentinel */
};
@@ -1326,6 +1758,13 @@ static struct PyMethodDef Matrix_methods[] = {
{"to_quat", (PyCFunction) Matrix_toQuat, METH_NOARGS, Matrix_toQuat_doc},
{"copy", (PyCFunction) Matrix_copy, METH_NOARGS, Matrix_copy_doc},
{"__copy__", (PyCFunction) Matrix_copy, METH_NOARGS, Matrix_copy_doc},
+
+ /* class methods */
+ {"Rotation", (PyCFunction) C_Matrix_Rotation, METH_VARARGS | METH_CLASS, C_Matrix_Rotation_doc},
+ {"Scale", (PyCFunction) C_Matrix_Scale, METH_VARARGS | METH_CLASS, C_Matrix_Scale_doc},
+ {"Shear", (PyCFunction) C_Matrix_Shear, METH_VARARGS | METH_CLASS, C_Matrix_Shear_doc},
+ {"Translation", (PyCFunction) C_Matrix_Translation, METH_O | METH_CLASS, C_Matrix_Translation_doc},
+ {"OrthoProjection", (PyCFunction) C_Matrix_OrthoProjection, METH_VARARGS | METH_CLASS, C_Matrix_OrthoProjection_doc},
{NULL, NULL, 0, NULL}
};
diff --git a/source/blender/python/generic/mathutils_quat.c b/source/blender/python/generic/mathutils_quat.c
index f94e5e2a03a..553844b6ee5 100644
--- a/source/blender/python/generic/mathutils_quat.c
+++ b/source/blender/python/generic/mathutils_quat.c
@@ -109,7 +109,7 @@ static PyObject *Quaternion_ToEuler(QuaternionObject * self, PyObject *args)
}
//----------------------------Quaternion.toMatrix()------------------
static char Quaternion_ToMatrix_doc[] =
-".. method:: to_matrix(other)\n"
+".. method:: to_matrix()\n"
"\n"
" Return a matrix representation of the quaternion.\n"
"\n"
@@ -190,9 +190,7 @@ static char Quaternion_Difference_doc[] =
static PyObject *Quaternion_Difference(QuaternionObject * self, QuaternionObject * value)
{
- float quat[QUAT_SIZE], tempQuat[QUAT_SIZE];
- double dot = 0.0f;
- int x;
+ float quat[QUAT_SIZE];
if (!QuaternionObject_Check(value)) {
PyErr_SetString( PyExc_TypeError, "quat.difference(value): expected a quaternion argument" );
@@ -202,14 +200,8 @@ static PyObject *Quaternion_Difference(QuaternionObject * self, QuaternionObject
if(!BaseMath_ReadCallback(self) || !BaseMath_ReadCallback(value))
return NULL;
- copy_qt_qt(tempQuat, self->quat);
- conjugate_qt(tempQuat);
- dot = sqrt(dot_qtqt(tempQuat, tempQuat));
+ rotation_between_quats_to_quat(quat, self->quat, value->quat);
- for(x = 0; x < QUAT_SIZE; x++) {
- tempQuat[x] /= (float)(dot * dot);
- }
- mul_qt_qtqt(quat, tempQuat, value->quat);
return newQuaternionObject(quat, Py_NEW, NULL);
}
@@ -668,8 +660,9 @@ static PyObject *Quaternion_mul(PyObject * q1, PyObject * q2)
return NULL;
}
- if(quat1 && quat2) { /* QUAT*QUAT (dot product) */
- return PyFloat_FromDouble(dot_qtqt(quat1->quat, quat2->quat));
+ if(quat1 && quat2) { /* QUAT*QUAT (cross product) */
+ mul_qt_qtqt(quat, quat1->quat, quat2->quat);
+ return newQuaternionObject(quat, Py_NEW, NULL);
}
/* the only case this can happen (for a supported type is "FLOAT*QUAT" ) */
@@ -685,12 +678,19 @@ static PyObject *Quaternion_mul(PyObject * q1, PyObject * q2)
}
else { /* QUAT*SOMETHING */
if(VectorObject_Check(q2)){ /* QUAT*VEC */
+ float tvec[3];
vec = (VectorObject*)q2;
if(vec->size != 3){
PyErr_SetString(PyExc_TypeError, "Quaternion multiplication: only 3D vector rotations currently supported\n");
return NULL;
}
- return quat_rotation((PyObject*)quat1, (PyObject*)vec); /* vector updating done inside the func */
+ if(!BaseMath_ReadCallback(vec)) {
+ return NULL;
+ }
+
+ copy_v3_v3(tvec, vec->vec);
+ mul_qt_v3(quat1->quat, tvec);
+ return newVectorObject(tvec, 3, Py_NEW, NULL);
}
scalar= PyFloat_AsDouble(q2);
@@ -774,27 +774,101 @@ static int Quaternion_setAxis( QuaternionObject * self, PyObject * value, void *
static PyObject *Quaternion_getMagnitude( QuaternionObject * self, void *type )
{
+ if(!BaseMath_ReadCallback(self))
+ return NULL;
+
return PyFloat_FromDouble(sqrt(dot_qtqt(self->quat, self->quat)));
}
static PyObject *Quaternion_getAngle( QuaternionObject * self, void *type )
{
+ if(!BaseMath_ReadCallback(self))
+ return NULL;
+
return PyFloat_FromDouble(2.0 * (saacos(self->quat[0])));
}
-static PyObject *Quaternion_getAxisVec( QuaternionObject * self, void *type )
+static int Quaternion_setAngle(QuaternionObject * self, PyObject * value, void * type)
+{
+ float axis[3];
+ float angle;
+
+ if(!BaseMath_ReadCallback(self))
+ return -1;
+
+ quat_to_axis_angle(axis, &angle, self->quat);
+
+ angle = PyFloat_AsDouble(value);
+
+ if(angle==-1.0f && PyErr_Occurred()) { /* parsed item not a number */
+ PyErr_SetString(PyExc_TypeError, "quaternion.angle = value: float expected");
+ return -1;
+ }
+
+ /* If the axis of rotation is 0,0,0 set it to 1,0,0 - for zero-degree rotations */
+ if( EXPP_FloatsAreEqual(axis[0], 0.0f, 10) &&
+ EXPP_FloatsAreEqual(axis[1], 0.0f, 10) &&
+ EXPP_FloatsAreEqual(axis[2], 0.0f, 10)
+ ) {
+ axis[0] = 1.0f;
+ }
+
+ axis_angle_to_quat(self->quat, axis, angle);
+
+ if(!BaseMath_WriteCallback(self))
+ return -1;
+
+ return 0;
+}
+
+static PyObject *Quaternion_getAxisVec(QuaternionObject *self, void *type)
{
- float vec[3];
+ float axis[3];
+ float angle;
- normalize_v3_v3(vec, self->quat+1);
+ if(!BaseMath_ReadCallback(self))
+ return NULL;
+
+ quat_to_axis_angle(axis, &angle, self->quat);
/* If the axis of rotation is 0,0,0 set it to 1,0,0 - for zero-degree rotations */
- if( EXPP_FloatsAreEqual(vec[0], 0.0f, 10) &&
- EXPP_FloatsAreEqual(vec[1], 0.0f, 10) &&
- EXPP_FloatsAreEqual(vec[2], 0.0f, 10) ){
- vec[0] = 1.0f;
+ if( EXPP_FloatsAreEqual(axis[0], 0.0f, 10) &&
+ EXPP_FloatsAreEqual(axis[1], 0.0f, 10) &&
+ EXPP_FloatsAreEqual(axis[2], 0.0f, 10)
+ ) {
+ axis[0] = 1.0f;
}
- return (PyObject *) newVectorObject(vec, 3, Py_NEW, NULL);
+
+ return (PyObject *) newVectorObject(axis, 3, Py_NEW, NULL);
+}
+
+static int Quaternion_setAxisVec(QuaternionObject *self, PyObject *value, void *type)
+{
+ float axis[3];
+ float angle;
+
+ VectorObject *vec;
+
+ if(!BaseMath_ReadCallback(self))
+ return -1;
+
+ quat_to_axis_angle(axis, &angle, self->quat);
+
+ if(!VectorObject_Check(value)) {
+ PyErr_SetString(PyExc_TypeError, "quaternion.axis = value: expected a 3D Vector");
+ return -1;
+ }
+
+ vec= (VectorObject *)value;
+ if(!BaseMath_ReadCallback(vec))
+ return -1;
+
+ axis_angle_to_quat(self->quat, vec->vec, angle);
+
+ if(!BaseMath_WriteCallback(self))
+ return -1;
+
+ return 0;
}
//----------------------------------mathutils.Quaternion() --------------
@@ -848,15 +922,15 @@ static struct PyMethodDef Quaternion_methods[] = {
/* Python attributes get/set structure: */
/*****************************************************************************/
static PyGetSetDef Quaternion_getseters[] = {
- {"w", (getter)Quaternion_getAxis, (setter)Quaternion_setAxis, "Quaternion W value. **type** float", (void *)0},
- {"x", (getter)Quaternion_getAxis, (setter)Quaternion_setAxis, "Quaternion X axis. **type** float", (void *)1},
- {"y", (getter)Quaternion_getAxis, (setter)Quaternion_setAxis, "Quaternion Y axis. **type** float", (void *)2},
- {"z", (getter)Quaternion_getAxis, (setter)Quaternion_setAxis, "Quaternion Z axis. **type** float", (void *)3},
- {"magnitude", (getter)Quaternion_getMagnitude, (setter)NULL, "Size of the quaternion (readonly). **type** float", NULL},
- {"angle", (getter)Quaternion_getAngle, (setter)NULL, "angle of the quaternion (readonly). **type** float", NULL},
- {"axis",(getter)Quaternion_getAxisVec, (setter)NULL, "quaternion axis as a vector (readonly). **type** :class:`Vector`", NULL},
+ {"w", (getter)Quaternion_getAxis, (setter)Quaternion_setAxis, "Quaternion W value.\n\n:type: float", (void *)0},
+ {"x", (getter)Quaternion_getAxis, (setter)Quaternion_setAxis, "Quaternion X axis.\n\n:type: float", (void *)1},
+ {"y", (getter)Quaternion_getAxis, (setter)Quaternion_setAxis, "Quaternion Y axis.\n\n:type: float", (void *)2},
+ {"z", (getter)Quaternion_getAxis, (setter)Quaternion_setAxis, "Quaternion Z axis.\n\n:type: float", (void *)3},
+ {"magnitude", (getter)Quaternion_getMagnitude, (setter)NULL, "Size of the quaternion (readonly).\n\n:type: float", NULL},
+ {"angle", (getter)Quaternion_getAngle, (setter)Quaternion_setAngle, "angle of the quaternion.\n\n:type: float", NULL},
+ {"axis",(getter)Quaternion_getAxisVec, (setter)Quaternion_setAxisVec, "quaternion axis as a vector.\n\n:type: :class:`Vector`", NULL},
{"is_wrapped", (getter)BaseMathObject_getWrapped, (setter)NULL, BaseMathObject_Wrapped_doc, NULL},
- {"_owner", (getter)BaseMathObject_getOwner, (setter)NULL, BaseMathObject_Owner_doc, NULL},
+ {"owner", (getter)BaseMathObject_getOwner, (setter)NULL, BaseMathObject_Owner_doc, NULL},
{NULL,NULL,NULL,NULL,NULL} /* Sentinel */
};
diff --git a/source/blender/python/generic/mathutils_vector.c b/source/blender/python/generic/mathutils_vector.c
index a9bcdacdb03..75a695526fc 100644
--- a/source/blender/python/generic/mathutils_vector.c
+++ b/source/blender/python/generic/mathutils_vector.c
@@ -508,7 +508,8 @@ static char Vector_angle_doc[] =
" :arg other: another vector to compare the angle with\n"
" :type other: :class:`Vector`\n"
" :arg fallback: return this value when the angle cant be calculated (zero length vector)\n"
-" :return angle: angle in radians or fallback when given\n"
+" :type fallback: any\n"
+" :return: angle in radians or fallback when given\n"
" :rtype: float\n"
"\n"
" .. note:: Zero length vectors raise an :exc:`AttributeError`.\n";
@@ -607,8 +608,9 @@ static char Vector_Project_doc[] =
"\n"
" Return the projection of this vector onto the *other*.\n"
"\n"
+" :arg other: second vector.\n"
" :type other: :class:`Vector`\n"
-" :return projection: the parallel projection vector\n"
+" :return: the parallel projection vector\n"
" :rtype: :class:`Vector`\n";
static PyObject *Vector_Project(VectorObject *self, VectorObject *value)
@@ -1010,13 +1012,20 @@ static PyObject *Vector_mul(PyObject * v1, PyObject * v2)
/* VEC * MATRIX */
return row_vector_multiplication(vec1, (MatrixObject*)v2);
} else if (QuaternionObject_Check(v2)) {
- QuaternionObject *quat = (QuaternionObject*)v2; /* quat_rotation validates */
+ /* VEC * QUAT */
+ QuaternionObject *quat2 = (QuaternionObject*)v2;
+ float tvec[4];
if(vec1->size != 3) {
PyErr_SetString(PyExc_TypeError, "Vector multiplication: only 3D vector rotations (with quats) currently supported\n");
return NULL;
}
- return quat_rotation((PyObject*)vec1, (PyObject*)quat);
+ if(!BaseMath_ReadCallback(quat2)) {
+ return NULL;
+ }
+ copy_v3_v3(tvec, vec1->vec);
+ mul_qt_v3(quat2->quat, tvec);
+ return newVectorObject(tvec, 3, Py_NEW, NULL);
}
else if (((scalar= PyFloat_AsDouble(v2)) == -1.0 && PyErr_Occurred())==0) { /* VEC*FLOAT */
int i;
@@ -1468,7 +1477,7 @@ static int Vector_setLength(VectorObject *self, PyObject * value )
self->vec[i]= self->vec[i] / (float)dot;
}
- BaseMath_WriteCallback(self); /* checked alredy */
+ BaseMath_WriteCallback(self); /* checked already */
return 0;
}
@@ -1587,14 +1596,14 @@ static int Vector_setSwizzle(VectorObject *self, PyObject * value, void *closure
/* Python attributes get/set structure: */
/*****************************************************************************/
static PyGetSetDef Vector_getseters[] = {
- {"x", (getter)Vector_getAxis, (setter)Vector_setAxis, "Vector X axis. **type** float", (void *)0},
- {"y", (getter)Vector_getAxis, (setter)Vector_setAxis, "Vector Y axis. **type** float", (void *)1},
- {"z", (getter)Vector_getAxis, (setter)Vector_setAxis, "Vector Z axis (3D Vectors only). **type** float", (void *)2},
- {"w", (getter)Vector_getAxis, (setter)Vector_setAxis, "Vector W axis (4D Vectors only). **type** float", (void *)3},
- {"length", (getter)Vector_getLength, (setter)Vector_setLength, "Vector Length. **type** float", NULL},
- {"magnitude", (getter)Vector_getLength, (setter)Vector_setLength, "Vector Length. **type** float", NULL},
+ {"x", (getter)Vector_getAxis, (setter)Vector_setAxis, "Vector X axis.\n\n:type: float", (void *)0},
+ {"y", (getter)Vector_getAxis, (setter)Vector_setAxis, "Vector Y axis.\n\n:type: float", (void *)1},
+ {"z", (getter)Vector_getAxis, (setter)Vector_setAxis, "Vector Z axis (3D Vectors only).\n\n:type: float", (void *)2},
+ {"w", (getter)Vector_getAxis, (setter)Vector_setAxis, "Vector W axis (4D Vectors only).\n\n:type: float", (void *)3},
+ {"length", (getter)Vector_getLength, (setter)Vector_setLength, "Vector Length.\n\n:type: float", NULL},
+ {"magnitude", (getter)Vector_getLength, (setter)Vector_setLength, "Vector Length.\n\n:type: float", NULL},
{"is_wrapped", (getter)BaseMathObject_getWrapped, (setter)NULL, BaseMathObject_Wrapped_doc, NULL},
- {"_owner", (getter)BaseMathObject_getOwner, (setter)NULL, BaseMathObject_Owner_doc, NULL},
+ {"owner", (getter)BaseMathObject_getOwner, (setter)NULL, BaseMathObject_Owner_doc, NULL},
/* autogenerated swizzle attrs, see python script below */
{"xx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS)))}, // 36
@@ -2034,7 +2043,7 @@ static PyObject *Vector_Negate(VectorObject *self)
for(i = 0; i < self->size; i++)
self->vec[i] = -(self->vec[i]);
- BaseMath_WriteCallback(self); // alredy checked for error
+ BaseMath_WriteCallback(self); // already checked for error
Py_INCREF(self);
return (PyObject*)self;
diff --git a/source/blender/python/intern/Makefile b/source/blender/python/intern/Makefile
index 419092cbe21..6c0b7b4d14e 100644
--- a/source/blender/python/intern/Makefile
+++ b/source/blender/python/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
@@ -57,6 +57,7 @@ CPPFLAGS += -I../../imbuf
CPPFLAGS += -I../../blenloader
CPPFLAGS += -I../../windowmanager
CPPFLAGS += -I../../render/extern/include
+CPPFLAGS += -I$(NAN_AUDASPACE)/include
# path to the guarded memory allocator
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
diff --git a/source/blender/python/intern/bpy.c b/source/blender/python/intern/bpy.c
index b978e46f6da..87cc0e79509 100644
--- a/source/blender/python/intern/bpy.c
+++ b/source/blender/python/intern/bpy.c
@@ -41,33 +41,25 @@
#include "../generic/blf_api.h"
#include "../generic/IDProp.h"
-static char bpy_home_paths_doc[] =
-".. function:: home_paths(subfolder)\n"
+//#include "AUD_PyInit.h"
+
+static char bpy_script_paths_doc[] =
+".. function:: script_paths()\n"
"\n"
-" Return 3 paths to blender home directories.\n"
+" Return 2 paths to blender scripts directories.\n"
"\n"
-" :arg subfolder: The name of a subfolder to find within the blenders home directory.\n"
-" :type subfolder: string\n"
-" :return: (system, local, user) strings will be empty when not found.\n"
+" :return: (system, user) strings will be empty when not found.\n"
" :rtype: tuple of strigs\n";
-PyObject *bpy_home_paths(PyObject *self, PyObject *args)
+PyObject *bpy_script_paths(PyObject *self)
{
- PyObject *ret= PyTuple_New(3);
+ PyObject *ret= PyTuple_New(2);
char *path;
- char *subfolder= "";
- if (!PyArg_ParseTuple(args, "|s:blender_homes", &subfolder))
- return NULL;
-
- path= BLI_gethome_folder(subfolder, BLI_GETHOME_SYSTEM);
+ path= BLI_get_folder(BLENDER_USER_SCRIPTS, NULL);
PyTuple_SET_ITEM(ret, 0, PyUnicode_FromString(path?path:""));
-
- path= BLI_gethome_folder(subfolder, BLI_GETHOME_LOCAL);
+ path= BLI_get_folder(BLENDER_SYSTEM_SCRIPTS, NULL);
PyTuple_SET_ITEM(ret, 1, PyUnicode_FromString(path?path:""));
-
- path= BLI_gethome_folder(subfolder, BLI_GETHOME_USER);
- PyTuple_SET_ITEM(ret, 2, PyUnicode_FromString(path?path:""));
return ret;
}
@@ -75,7 +67,7 @@ PyObject *bpy_home_paths(PyObject *self, PyObject *args)
static char bpy_blend_paths_doc[] =
".. function:: blend_paths(absolute=False)\n"
"\n"
-" Returns a list of paths associated with this blend file.\n"
+" Returns a list of paths to external files referenced by the loaded .blend file.\n"
"\n"
" :arg absolute: When true the paths returned are made absolute.\n"
" :type absolute: boolean\n"
@@ -120,7 +112,7 @@ static PyObject *bpy_blend_paths(PyObject * self, PyObject *args, PyObject *kw)
return list;
}
-static PyMethodDef meth_bpy_home_paths[] = {{ "home_paths", (PyCFunction)bpy_home_paths, METH_VARARGS, bpy_home_paths_doc}};
+static PyMethodDef meth_bpy_script_paths[] = {{ "script_paths", (PyCFunction)bpy_script_paths, METH_NOARGS, bpy_script_paths_doc}};
static PyMethodDef meth_bpy_blend_paths[] = {{ "blend_paths", (PyCFunction)bpy_blend_paths, METH_VARARGS|METH_KEYWORDS, bpy_blend_paths_doc}};
static void bpy_import_test(char *modname)
@@ -159,15 +151,16 @@ void BPy_init_modules( void )
/* stand alone utility modules not related to blender directly */
Geometry_Init();
Mathutils_Init();
+ Noise_Init();
BGL_Init();
BLF_Init();
IDProp_Init_Types();
-
+ //AUD_initPython();
mod = PyModule_New("_bpy");
/* add the module so we can import it */
- PyDict_SetItemString(PySys_GetObject("modules"), "_bpy", mod);
+ PyDict_SetItemString(PyImport_GetModuleDict(), "_bpy", mod);
Py_DECREF(mod);
/* run first, initializes rna types */
@@ -191,7 +184,7 @@ void BPy_init_modules( void )
PyModule_AddObject(mod, "context", (PyObject *)bpy_context_module);
/* utility func's that have nowhere else to go */
- PyModule_AddObject(mod, meth_bpy_home_paths->ml_name, (PyObject *)PyCFunction_New(meth_bpy_home_paths, NULL));
+ PyModule_AddObject(mod, meth_bpy_script_paths->ml_name, (PyObject *)PyCFunction_New(meth_bpy_script_paths, NULL));
PyModule_AddObject(mod, meth_bpy_blend_paths->ml_name, (PyObject *)PyCFunction_New(meth_bpy_blend_paths, NULL));
/* add our own modules dir, this is a python package */
diff --git a/source/blender/python/intern/bpy_app.c b/source/blender/python/intern/bpy_app.c
index 4a2ac0c9252..78658a611a3 100644
--- a/source/blender/python/intern/bpy_app.c
+++ b/source/blender/python/intern/bpy_app.c
@@ -43,7 +43,6 @@ static PyTypeObject BlenderAppType;
static PyStructSequence_Field app_info_fields[] = {
{"version", "The Blender version as a tuple of 3 numbers. eg. (2, 50, 11)"},
{"version_string", "The Blender version formatted as a string"},
- {"home", "The blender home directory, normally matching $HOME"},
{"binary_path", "The location of blenders executable, useful for utilities that spawn new instances"},
{"debug", "Boolean, set when blender is running in debug mode (started with -d)"},
{"background", "Boolean, True when blender is running without a user interface (started with -b)"},
@@ -85,7 +84,6 @@ static PyObject *make_app_info(void)
SetObjItem(Py_BuildValue("(iii)", BLENDER_VERSION/100, BLENDER_VERSION%100, BLENDER_SUBVERSION));
SetObjItem(PyUnicode_FromFormat("%d.%02d (sub %d)", BLENDER_VERSION/100, BLENDER_VERSION%100, BLENDER_SUBVERSION));
- SetStrItem(BLI_gethome());
SetStrItem(bprogname);
SetObjItem(PyBool_FromLong(G.f & G_DEBUG));
SetObjItem(PyBool_FromLong(G.background));
diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c
index bf91b0498ed..af2b5b41961 100644
--- a/source/blender/python/intern/bpy_interface.c
+++ b/source/blender/python/intern/bpy_interface.c
@@ -44,6 +44,7 @@
#include "BKE_context.h"
#include "BKE_text.h"
+#include "BKE_font.h" /* only for utf8towchar */
#include "BKE_main.h"
#include "BKE_global.h" /* only for script checking */
@@ -145,29 +146,6 @@ void BPY_update_modules( void )
bpy_context_module->ptr.data= (void *)BPy_GetContext();
}
-/*****************************************************************************
-* Description: This function creates a new Python dictionary object.
-*****************************************************************************/
-static PyObject *CreateGlobalDictionary( bContext *C, const char *filename )
-{
- PyObject *item;
- PyObject *dict = PyDict_New( );
- PyDict_SetItemString( dict, "__builtins__", PyEval_GetBuiltins( ) );
-
- item = PyUnicode_FromString( "__main__" );
- PyDict_SetItemString( dict, "__name__", item );
- Py_DECREF(item);
-
- /* __file__ only for nice UI'ness */
- if(filename) {
- PyObject *item = PyUnicode_FromString( filename );
- PyDict_SetItemString( dict, "__file__", item );
- Py_DECREF(item);
- }
-
- return dict;
-}
-
/* must be called before Py_Initialize */
void BPY_start_python_path(void)
{
@@ -204,10 +182,15 @@ void BPY_start_python_path(void)
#endif
{
- static wchar_t py_path_bundle_wchar[FILE_MAXDIR];
+ static wchar_t py_path_bundle_wchar[FILE_MAX];
+
+ /* cant use this, on linux gives bug: #23018, TODO: try LANG="en_US.UTF-8" /usr/bin/blender, suggested 22008 */
+ /* mbstowcs(py_path_bundle_wchar, py_path_bundle, FILE_MAXDIR); */
+
+ utf8towchar(py_path_bundle_wchar, py_path_bundle);
- mbstowcs(py_path_bundle_wchar, py_path_bundle, FILE_MAXDIR);
Py_SetPythonHome(py_path_bundle_wchar);
+ // printf("found python (wchar_t) '%ls'\n", py_path_bundle_wchar);
}
}
@@ -223,9 +206,12 @@ void BPY_start_python( int argc, char **argv )
{
PyThreadState *py_tstate = NULL;
- BPY_start_python_path(); /* allow to use our own included python */
+ /* not essential but nice to set our name */
+ static wchar_t bprogname_wchar[FILE_MAXDIR+FILE_MAXFILE]; /* python holds a reference */
+ utf8towchar(bprogname_wchar, bprogname);
+ Py_SetProgramName(bprogname_wchar);
- // Py_SetProgramName(); // extern char bprogname[FILE_MAXDIR+FILE_MAXFILE];
+ BPY_start_python_path(); /* allow to use our own included python */
Py_Initialize( );
@@ -321,13 +307,13 @@ int BPY_run_python_script( bContext *C, const char *fn, struct Text *text, struc
if (fn==NULL && text==NULL) {
return 0;
}
-
+
bpy_context_set(C, &gilstate);
if (text) {
char fn_dummy[FILE_MAXDIR];
bpy_text_filename_get(fn_dummy, text);
- py_dict = CreateGlobalDictionary(C, fn_dummy);
+ py_dict = bpy_namespace_dict_new(fn_dummy);
if( !text->compiled ) { /* if it wasn't already compiled, do it now */
char *buf = txt_to_buf( text );
@@ -348,7 +334,7 @@ int BPY_run_python_script( bContext *C, const char *fn, struct Text *text, struc
else {
FILE *fp= fopen(fn, "r");
- py_dict = CreateGlobalDictionary(C, fn);
+ py_dict = bpy_namespace_dict_new(fn);
if(fp) {
#ifdef _WIN32
@@ -383,7 +369,7 @@ int BPY_run_python_script( bContext *C, const char *fn, struct Text *text, struc
Py_DECREF( py_result );
}
- Py_DECREF(py_dict);
+ PyDict_SetItemString(PyThreadState_GET()->interp->modules, "__main__", Py_None);
bpy_context_clear(C, &gilstate);
@@ -492,7 +478,7 @@ int BPY_run_python_script_space(const char *modulename, const char *func)
gilstate = PyGILState_Ensure();
- py_dict = CreateGlobalDictionary(C);
+ py_dict = bpy_namespace_dict_new("<dummy>");
PyObject *module = PyImport_ImportModule(scpt->script.filename);
if (module==NULL) {
@@ -521,7 +507,7 @@ int BPY_run_python_script_space(const char *modulename, const char *func)
Py_XDECREF(module);
- Py_DECREF(py_dict);
+ PyDict_SetItemString(PyThreadState_GET()->interp->modules, "__main__", Py_None);
PyGILState_Release(gilstate);
return 1;
@@ -532,7 +518,7 @@ int BPY_run_python_script_space(const char *modulename, const char *func)
int BPY_eval_button(bContext *C, const char *expr, double *value)
{
PyGILState_STATE gilstate;
- PyObject *dict, *mod, *retval;
+ PyObject *py_dict, *mod, *retval;
int error_ret = 0;
if (!value || !expr) return -1;
@@ -544,11 +530,11 @@ int BPY_eval_button(bContext *C, const char *expr, double *value)
bpy_context_set(C, &gilstate);
- dict= CreateGlobalDictionary(C, NULL);
+ py_dict= bpy_namespace_dict_new("<blender button>");
mod = PyImport_ImportModule("math");
if (mod) {
- PyDict_Merge(dict, PyModule_GetDict(mod), 0); /* 0 - dont overwrite existing values */
+ PyDict_Merge(py_dict, PyModule_GetDict(mod), 0); /* 0 - dont overwrite existing values */
Py_DECREF(mod);
}
else { /* highly unlikely but possibly */
@@ -556,7 +542,7 @@ int BPY_eval_button(bContext *C, const char *expr, double *value)
PyErr_Clear();
}
- retval = PyRun_String(expr, Py_eval_input, dict, dict);
+ retval = PyRun_String(expr, Py_eval_input, py_dict, py_dict);
if (retval == NULL) {
error_ret= -1;
@@ -593,8 +579,9 @@ int BPY_eval_button(bContext *C, const char *expr, double *value)
if(error_ret) {
BPy_errors_to_report(CTX_wm_reports(C));
}
+
+ PyDict_SetItemString(PyThreadState_GET()->interp->modules, "__main__", Py_None);
- Py_DECREF(dict);
bpy_context_clear(C, &gilstate);
return error_ret;
@@ -603,7 +590,7 @@ int BPY_eval_button(bContext *C, const char *expr, double *value)
int BPY_eval_string(bContext *C, const char *expr)
{
PyGILState_STATE gilstate;
- PyObject *dict, *retval;
+ PyObject *py_dict, *retval;
int error_ret = 0;
if (!expr) return -1;
@@ -614,9 +601,9 @@ int BPY_eval_string(bContext *C, const char *expr)
bpy_context_set(C, &gilstate);
- dict= CreateGlobalDictionary(C, NULL);
+ py_dict= bpy_namespace_dict_new("<blender string>");
- retval = PyRun_String(expr, Py_eval_input, dict, dict);
+ retval = PyRun_String(expr, Py_eval_input, py_dict, py_dict);
if (retval == NULL) {
error_ret= -1;
@@ -627,9 +614,10 @@ int BPY_eval_string(bContext *C, const char *expr)
Py_DECREF(retval);
}
- Py_DECREF(dict);
+ PyDict_SetItemString(PyThreadState_GET()->interp->modules, "__main__", Py_None);
+
bpy_context_clear(C, &gilstate);
-
+
return error_ret;
}
diff --git a/source/blender/python/intern/bpy_operator.c b/source/blender/python/intern/bpy_operator.c
index 0e54f158ac4..c6c34fbcaf5 100644
--- a/source/blender/python/intern/bpy_operator.c
+++ b/source/blender/python/intern/bpy_operator.c
@@ -63,7 +63,7 @@ static PyObject *pyop_call( PyObject * self, PyObject * args)
if (!PyArg_ParseTuple(args, "sO|O!s:_bpy.ops.call", &opname, &context_dict, &PyDict_Type, &kw, &context_str))
return NULL;
- ot= WM_operatortype_exists(opname);
+ ot= WM_operatortype_find(opname, TRUE);
if (ot == NULL) {
PyErr_Format( PyExc_SystemError, "Calling operator \"bpy.ops.%s\" error, could not be found", opname);
@@ -259,7 +259,7 @@ PyObject *BPY_operator_module( void )
static PyMethodDef pyop_macro_def_meth ={"macro_define", (PyCFunction) PYOP_wrap_macro_define, METH_VARARGS, NULL};
PyObject *submodule = PyModule_New("_bpy.ops");
- PyDict_SetItemString(PySys_GetObject("modules"), "_bpy.ops", submodule);
+ PyDict_SetItemString(PyImport_GetModuleDict(), "_bpy.ops", submodule);
PyModule_AddObject( submodule, "call", PyCFunction_New(&pyop_call_meth, NULL) );
PyModule_AddObject( submodule, "as_string",PyCFunction_New(&pyop_as_string_meth,NULL) );
diff --git a/source/blender/python/intern/bpy_operator_wrap.c b/source/blender/python/intern/bpy_operator_wrap.c
index 48a2655ecb2..c1698a8d751 100644
--- a/source/blender/python/intern/bpy_operator_wrap.c
+++ b/source/blender/python/intern/bpy_operator_wrap.c
@@ -33,22 +33,15 @@
static void operator_properties_init(wmOperatorType *ot)
{
PyObject *py_class = ot->ext.data;
- PyObject *item= ((PyTypeObject*)py_class)->tp_dict; /* getattr(..., "__dict__") returns a proxy */
-
RNA_struct_blender_type_set(ot->ext.srna, ot);
- if(item) {
- /* only call this so pyrna_deferred_register_props gives a useful error
- * WM_operatortype_append_ptr will call RNA_def_struct_identifier
- * later */
- RNA_def_struct_identifier(ot->srna, ot->idname);
+ /* only call this so pyrna_deferred_register_class gives a useful error
+ * WM_operatortype_append_ptr will call RNA_def_struct_identifier
+ * later */
+ RNA_def_struct_identifier(ot->srna, ot->idname);
- if(pyrna_deferred_register_props(ot->srna, item) != 0) {
- PyErr_Print(); /* failed to register operator props */
- PyErr_Clear();
- }
- }
- else {
+ if(pyrna_deferred_register_class(ot->srna, py_class) != 0) {
+ PyErr_Print(); /* failed to register operator props */
PyErr_Clear();
}
}
@@ -104,7 +97,7 @@ PyObject *PYOP_wrap_macro_define(PyObject *self, PyObject *args)
if (!PyArg_ParseTuple(args, "Os:_bpy.ops.macro_define", &macro, &opname))
return NULL;
- if (WM_operatortype_exists(opname) == NULL) {
+ if (WM_operatortype_find(opname, TRUE) == NULL) {
PyErr_Format(PyExc_ValueError, "Macro Define: '%s' is not a valid operator id", opname);
return NULL;
}
@@ -113,7 +106,7 @@ PyObject *PYOP_wrap_macro_define(PyObject *self, PyObject *args)
srna= srna_from_self(macro, "Macro Define:");
macroname = RNA_struct_identifier(srna);
- ot = WM_operatortype_exists(macroname);
+ ot = WM_operatortype_find(macroname, TRUE);
if (!ot) {
PyErr_Format(PyExc_ValueError, "Macro Define: '%s' is not a valid macro or hasn't been registered yet", macroname);
diff --git a/source/blender/python/intern/bpy_props.c b/source/blender/python/intern/bpy_props.c
index c278ad56ab9..9afe638908c 100644
--- a/source/blender/python/intern/bpy_props.c
+++ b/source/blender/python/intern/bpy_props.c
@@ -919,7 +919,7 @@ PyObject *BPY_rna_props( void )
{
PyObject *submodule;
submodule= PyModule_Create(&props_module);
- PyDict_SetItemString(PySys_GetObject("modules"), props_module.m_name, submodule);
+ PyDict_SetItemString(PyImport_GetModuleDict(), props_module.m_name, submodule);
/* INCREF since its its assumed that all these functions return the
* module with a new ref like PyDict_New, since they are passed to
diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c
index fbb806f6436..07b237a40f8 100644
--- a/source/blender/python/intern/bpy_rna.c
+++ b/source/blender/python/intern/bpy_rna.c
@@ -35,6 +35,7 @@
#include "MEM_guardedalloc.h"
#include "BKE_utildefines.h"
+#include "BKE_idcode.h"
#include "BKE_context.h"
#include "BKE_global.h" /* evil G.* */
#include "BKE_report.h"
@@ -62,11 +63,11 @@ static short pyrna_rotation_euler_order_get(PointerRNA *ptr, PropertyRNA **prop_
/* bpyrna vector/euler/quat callbacks */
static int mathutils_rna_array_cb_index= -1; /* index for our callbacks */
-/* not used yet but may want to use the subtype below */
+/* subtype not used much yet */
#define MATHUTILS_CB_SUBTYPE_EUL 0
#define MATHUTILS_CB_SUBTYPE_VEC 1
#define MATHUTILS_CB_SUBTYPE_QUAT 2
-#define MATHUTILS_CB_SUBTYPE_COLOR 0
+#define MATHUTILS_CB_SUBTYPE_COLOR 3
static int mathutils_rna_generic_check(BaseMathObject *bmo)
{
@@ -418,25 +419,50 @@ static PyObject *pyrna_prop_richcmp(PyObject *a, PyObject *b, int op)
}
/*----------------------repr--------------------------------------------*/
-static PyObject *pyrna_struct_repr( BPy_StructRNA *self )
+static PyObject *pyrna_struct_str( BPy_StructRNA *self )
{
- PyObject *pyob;
+ PyObject *ret;
char *name;
/* print name if available */
name= RNA_struct_name_get_alloc(&self->ptr, NULL, FALSE);
if(name) {
- pyob= PyUnicode_FromFormat( "<bpy_struct, %.200s(\"%.200s\")>", RNA_struct_identifier(self->ptr.type), name);
+ ret= PyUnicode_FromFormat( "<bpy_struct, %.200s(\"%.200s\")>", RNA_struct_identifier(self->ptr.type), name);
MEM_freeN(name);
- return pyob;
+ return ret;
}
return PyUnicode_FromFormat( "<bpy_struct, %.200s at %p>", RNA_struct_identifier(self->ptr.type), self->ptr.data);
}
-static PyObject *pyrna_prop_repr( BPy_PropertyRNA *self )
+static PyObject *pyrna_struct_repr(BPy_StructRNA *self)
{
- PyObject *pyob;
+ ID *id= self->ptr.id.data;
+ if(id == NULL)
+ return pyrna_struct_str(self); /* fallback */
+
+ if(RNA_struct_is_ID(self->ptr.type)) {
+ return PyUnicode_FromFormat( "bpy.data.%s[\"%s\"]", BKE_idcode_to_name_plural(GS(id->name)), id->name+2);
+ }
+ else {
+ PyObject *ret;
+ char *path;
+ path= RNA_path_from_ID_to_struct(&self->ptr);
+ if(path) {
+ ret= PyUnicode_FromFormat( "bpy.data.%s[\"%s\"].%s", BKE_idcode_to_name_plural(GS(id->name)), id->name+2, path);
+ MEM_freeN(path);
+ }
+ else { /* cant find, print something sane */
+ ret= PyUnicode_FromFormat( "bpy.data.%s[\"%s\"]...%s", BKE_idcode_to_name_plural(GS(id->name)), id->name+2, RNA_struct_identifier(self->ptr.type));
+ }
+
+ return ret;
+ }
+}
+
+static PyObject *pyrna_prop_str( BPy_PropertyRNA *self )
+{
+ PyObject *ret;
PointerRNA ptr;
char *name;
const char *type_id= NULL;
@@ -470,15 +496,36 @@ static PyObject *pyrna_prop_repr( BPy_PropertyRNA *self )
name= RNA_struct_name_get_alloc(&ptr, NULL, FALSE);
if(name) {
- pyob= PyUnicode_FromFormat( "<bpy_%.200s, %.200s.%.200s(\"%.200s\")>", type_fmt, RNA_struct_identifier(self->ptr.type), RNA_property_identifier(self->prop), name);
+ ret= PyUnicode_FromFormat( "<bpy_%.200s, %.200s.%.200s(\"%.200s\")>", type_fmt, RNA_struct_identifier(self->ptr.type), RNA_property_identifier(self->prop), name);
MEM_freeN(name);
- return pyob;
+ return ret;
}
}
return PyUnicode_FromFormat( "<bpy_%.200s, %.200s.%.200s>", type_fmt, RNA_struct_identifier(self->ptr.type), RNA_property_identifier(self->prop));
}
+static PyObject *pyrna_prop_repr(BPy_PropertyRNA *self)
+{
+ ID *id= self->ptr.id.data;
+ PyObject *ret;
+ char *path;
+
+ if(id == NULL)
+ return pyrna_prop_str(self); /* fallback */
+
+ path= RNA_path_from_ID_to_property(&self->ptr, self->prop);
+ if(path) {
+ ret= PyUnicode_FromFormat( "bpy.data.%s[\"%s\"].%s", BKE_idcode_to_name_plural(GS(id->name)), id->name+2, path);
+ MEM_freeN(path);
+ }
+ else { /* cant find, print something sane */
+ ret= PyUnicode_FromFormat( "bpy.data.%s[\"%s\"]...%s", BKE_idcode_to_name_plural(GS(id->name)), id->name+2, RNA_property_identifier(self->prop));
+ }
+
+ return ret;
+}
+
static long pyrna_struct_hash( BPy_StructRNA *self )
{
return _Py_HashPointer(self->ptr.data);
@@ -1203,10 +1250,11 @@ static PyObject *pyrna_prop_collection_subscript_int(BPy_PropertyRNA *self, Py_s
if(RNA_property_collection_lookup_int(&self->ptr, self->prop, keynum, &newptr)) {
return pyrna_struct_CreatePyObject(&newptr);
}
- PyErr_Format(PyExc_IndexError, "bpy_prop_collection[index]: index %d could not be found", keynum);
- return NULL;
+ else { /* fail's if ptr.data == NULL, valid for mesh.materials */
+ Py_RETURN_NONE;
+ }
}
- PyErr_Format(PyExc_IndexError, "bpy_prop_collection[index]: index %d out of range", keynum);
+ PyErr_Format(PyExc_IndexError, "bpy_prop_collection[index]: index %d out of range, size %d", keynum, len);
return NULL;
}
@@ -1616,12 +1664,12 @@ static int pyrna_struct_contains(BPy_StructRNA *self, PyObject *value)
return -1;
}
- if(RNA_struct_idproperties_check(self->ptr.type)==0) {
+ if(RNA_struct_idprops_check(self->ptr.type)==0) {
PyErr_SetString( PyExc_TypeError, "bpy_struct: this type doesnt support IDProperties");
return -1;
}
- group= RNA_struct_idproperties(&self->ptr, 0);
+ group= RNA_struct_idprops(&self->ptr, 0);
if(!group)
return 0;
@@ -1674,7 +1722,7 @@ static PyObject *pyrna_struct_subscript( BPy_StructRNA *self, PyObject *key )
IDProperty *group, *idprop;
char *name= _PyUnicode_AsString(key);
- if(RNA_struct_idproperties_check(self->ptr.type)==0) {
+ if(RNA_struct_idprops_check(self->ptr.type)==0) {
PyErr_SetString( PyExc_TypeError, "this type doesn't support IDProperties");
return NULL;
}
@@ -1684,7 +1732,7 @@ static PyObject *pyrna_struct_subscript( BPy_StructRNA *self, PyObject *key )
return NULL;
}
- group= RNA_struct_idproperties(&self->ptr, 0);
+ group= RNA_struct_idprops(&self->ptr, 0);
if(group==NULL) {
PyErr_Format( PyExc_KeyError, "bpy_struct[key]: key \"%s\" not found", name);
@@ -1703,7 +1751,7 @@ static PyObject *pyrna_struct_subscript( BPy_StructRNA *self, PyObject *key )
static int pyrna_struct_ass_subscript( BPy_StructRNA *self, PyObject *key, PyObject *value )
{
- IDProperty *group= RNA_struct_idproperties(&self->ptr, 1);
+ IDProperty *group= RNA_struct_idprops(&self->ptr, 1);
if(group==NULL) {
PyErr_SetString(PyExc_TypeError, "bpy_struct[key] = val: id properties not supported for this type");
@@ -1733,12 +1781,12 @@ static PyObject *pyrna_struct_keys(BPy_PropertyRNA *self)
{
IDProperty *group;
- if(RNA_struct_idproperties_check(self->ptr.type)==0) {
+ if(RNA_struct_idprops_check(self->ptr.type)==0) {
PyErr_SetString( PyExc_TypeError, "bpy_struct.keys(): this type doesn't support IDProperties");
return NULL;
}
- group= RNA_struct_idproperties(&self->ptr, 0);
+ group= RNA_struct_idprops(&self->ptr, 0);
if(group==NULL)
return PyList_New(0);
@@ -1760,12 +1808,12 @@ static PyObject *pyrna_struct_items(BPy_PropertyRNA *self)
{
IDProperty *group;
- if(RNA_struct_idproperties_check(self->ptr.type)==0) {
+ if(RNA_struct_idprops_check(self->ptr.type)==0) {
PyErr_SetString( PyExc_TypeError, "bpy_struct.items(): this type doesn't support IDProperties");
return NULL;
}
- group= RNA_struct_idproperties(&self->ptr, 0);
+ group= RNA_struct_idprops(&self->ptr, 0);
if(group==NULL)
return PyList_New(0);
@@ -1787,12 +1835,12 @@ static PyObject *pyrna_struct_values(BPy_PropertyRNA *self)
{
IDProperty *group;
- if(RNA_struct_idproperties_check(self->ptr.type)==0) {
+ if(RNA_struct_idprops_check(self->ptr.type)==0) {
PyErr_SetString( PyExc_TypeError, "bpy_struct.values(): this type doesn't support IDProperties");
return NULL;
}
- group= RNA_struct_idproperties(&self->ptr, 0);
+ group= RNA_struct_idprops(&self->ptr, 0);
if(group==NULL)
return PyList_New(0);
@@ -2039,12 +2087,34 @@ static char pyrna_struct_is_property_set_doc[] =
static PyObject *pyrna_struct_is_property_set(BPy_StructRNA *self, PyObject *args)
{
+ PropertyRNA *prop;
char *name;
+ int ret;
if (!PyArg_ParseTuple(args, "s:is_property_set", &name))
return NULL;
- return PyBool_FromLong(RNA_property_is_set(&self->ptr, name));
+ if((prop= RNA_struct_find_property(&self->ptr, name)) == NULL) {
+ PyErr_Format(PyExc_TypeError, "%.200s.is_property_set(\"%.200s\") not found", RNA_struct_identifier(self->ptr.type), name);
+ return NULL;
+ }
+
+ /* double property lookup, could speed up */
+ /* return PyBool_FromLong(RNA_property_is_set(&self->ptr, name)); */
+ if(RNA_property_flag(prop) & PROP_IDPROPERTY) {
+ IDProperty *group= RNA_struct_idprops(&self->ptr, 0);
+ if(group) {
+ ret= IDP_GetPropertyFromGroup(group, name) ? 1:0;
+ }
+ else {
+ ret= 0;
+ }
+ }
+ else {
+ ret= 1;
+ }
+
+ return PyBool_FromLong(ret);
}
static char pyrna_struct_is_property_hidden_doc[] =
@@ -2059,15 +2129,16 @@ static PyObject *pyrna_struct_is_property_hidden(BPy_StructRNA *self, PyObject *
{
PropertyRNA *prop;
char *name;
- int hidden;
if (!PyArg_ParseTuple(args, "s:is_property_hidden", &name))
return NULL;
-
- prop= RNA_struct_find_property(&self->ptr, name);
- hidden= (prop)? (RNA_property_flag(prop) & PROP_HIDDEN): 1;
- return PyBool_FromLong(hidden);
+ if((prop= RNA_struct_find_property(&self->ptr, name)) == NULL) {
+ PyErr_Format(PyExc_TypeError, "%.200s.is_property_hidden(\"%.200s\") not found", RNA_struct_identifier(self->ptr.type), name);
+ return NULL;
+ }
+
+ return PyBool_FromLong(RNA_property_flag(prop) & PROP_HIDDEN);
}
static char pyrna_struct_path_resolve_doc[] =
@@ -2289,7 +2360,7 @@ static PyObject *pyrna_struct_getattro( BPy_StructRNA *self, PyObject *pyname )
if(name[0]=='_') { // rna can't start with a "_", so for __dict__ and similar we can skip using rna lookups
/* annoying exception, maybe we need to have different types for this... */
- if((strcmp(name, "__getitem__")==0 || strcmp(name, "__setitem__")==0) && !RNA_struct_idproperties_check(self->ptr.type)) {
+ if((strcmp(name, "__getitem__")==0 || strcmp(name, "__setitem__")==0) && !RNA_struct_idprops_check(self->ptr.type)) {
PyErr_SetString(PyExc_AttributeError, "bpy_struct: no __getitem__ support for this type");
ret = NULL;
}
@@ -2684,12 +2755,12 @@ static PyObject *pyrna_struct_get(BPy_StructRNA *self, PyObject *args)
return NULL;
/* mostly copied from BPy_IDGroup_Map_GetItem */
- if(RNA_struct_idproperties_check(self->ptr.type)==0) {
+ if(RNA_struct_idprops_check(self->ptr.type)==0) {
PyErr_SetString( PyExc_TypeError, "this type doesn't support IDProperties");
return NULL;
}
- group= RNA_struct_idproperties(&self->ptr, 0);
+ group= RNA_struct_idprops(&self->ptr, 0);
if(group) {
idprop= IDP_GetPropertyFromGroup(group, key);
@@ -3060,8 +3131,6 @@ static struct PyMethodDef pyrna_prop_methods[] = {
};
static struct PyMethodDef pyrna_prop_array_methods[] = {
- {"foreach_get", (PyCFunction)pyrna_prop_foreach_get, METH_VARARGS, NULL},
- {"foreach_set", (PyCFunction)pyrna_prop_foreach_set, METH_VARARGS, NULL},
{NULL, NULL, 0, NULL}
};
@@ -3086,37 +3155,47 @@ static struct PyMethodDef pyrna_prop_collection_methods[] = {
* todo - also accept useful args */
static PyObject * pyrna_struct_new(PyTypeObject *type, PyObject *args, PyObject *kwds) {
- BPy_StructRNA *base = NULL;
+ BPy_StructRNA *base;
if (!PyArg_ParseTuple(args, "O!:bpy_struct.__new__", &pyrna_struct_Type, &base))
return NULL;
-
- if (type == &pyrna_struct_Type) {
- return pyrna_struct_CreatePyObject(&base->ptr);
- } else {
+
+ if (type == Py_TYPE(base)) {
+ Py_INCREF(base);
+ return (PyObject *)base;
+ } else if (PyType_IsSubtype(type, &pyrna_struct_Type)) {
BPy_StructRNA *ret = (BPy_StructRNA *) type->tp_alloc(type, 0);
ret->ptr = base->ptr;
return (PyObject *)ret;
}
+ else {
+ PyErr_Format(PyExc_TypeError, "bpy_struct.__new__(type): type '%.200s' is not a subtype of bpy_struct.", type->tp_name);
+ return NULL;
+ }
}
/* only needed for subtyping, so a new class gets a valid BPy_StructRNA
* todo - also accept useful args */
static PyObject * pyrna_prop_new(PyTypeObject *type, PyObject *args, PyObject *kwds) {
- BPy_PropertyRNA *base = NULL;
+ BPy_PropertyRNA *base;
- if (!PyArg_ParseTuple(args, "O!:Base BPy_PropertyRNA", &pyrna_prop_Type, &base))
+ if (!PyArg_ParseTuple(args, "O!:bpy_prop.__new__", &pyrna_prop_Type, &base))
return NULL;
- if (ELEM3(type, &pyrna_prop_Type, &pyrna_prop_array_Type, &pyrna_prop_collection_Type)) {
- return pyrna_prop_CreatePyObject(&base->ptr, base->prop);
- } else {
+ if (type == Py_TYPE(base)) {
+ Py_INCREF(base);
+ return (PyObject *)base;
+ } else if (PyType_IsSubtype(type, &pyrna_prop_Type)) {
BPy_PropertyRNA *ret = (BPy_PropertyRNA *) type->tp_alloc(type, 0);
ret->ptr = base->ptr;
ret->prop = base->prop;
return (PyObject *)ret;
}
+ else {
+ PyErr_Format(PyExc_TypeError, "bpy_prop.__new__(type): type '%.200s' is not a subtype of bpy_prop.", type->tp_name);
+ return NULL;
+ }
}
PyObject *pyrna_param_to_py(PointerRNA *ptr, ParameterList *parms, PropertyRNA *prop, void *data)
@@ -3520,7 +3599,7 @@ PyTypeObject pyrna_struct_Type = {
( hashfunc )pyrna_struct_hash, /* hashfunc tp_hash; */
NULL, /* ternaryfunc tp_call; */
- NULL, /* reprfunc tp_str; */
+ (reprfunc) pyrna_struct_str, /* reprfunc tp_str; */
( getattrofunc ) pyrna_struct_getattro, /* getattrofunc tp_getattro; */
( setattrofunc ) pyrna_struct_setattro, /* setattrofunc tp_setattro; */
@@ -3587,7 +3666,7 @@ PyTypeObject pyrna_prop_Type = {
NULL, /* getattrfunc tp_getattr; */
NULL, /* setattrfunc tp_setattr; */
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
- ( reprfunc ) pyrna_prop_repr, /* tp_repr */
+ (reprfunc) pyrna_prop_repr, /* tp_repr */
/* Method suites for standard classes */
@@ -3599,7 +3678,7 @@ PyTypeObject pyrna_prop_Type = {
( hashfunc ) pyrna_prop_hash, /* hashfunc tp_hash; */
NULL, /* ternaryfunc tp_call; */
- NULL, /* reprfunc tp_str; */
+ (reprfunc) pyrna_prop_str, /* reprfunc tp_str; */
/* will only use these if this is a subtype of a py class */
NULL, /* getattrofunc tp_getattro; */
@@ -3970,7 +4049,7 @@ static PyObject* pyrna_srna_Subtype(StructRNA *srna)
- myClass = type(name='myClass', bases=(myBase,), dict={'__module__':'bpy.types'})
*/
- /* Assume RNA_struct_py_type_get(srna) was alredy checked */
+ /* Assume RNA_struct_py_type_get(srna) was already checked */
PyObject *py_base= pyrna_srna_PyBase(srna);
const char *idname= RNA_struct_identifier(srna);
@@ -4163,6 +4242,9 @@ static PyObject *pyrna_basetype_getattro( BPy_BaseTypeRNA *self, PyObject *pynam
}
static PyObject *pyrna_basetype_dir(BPy_BaseTypeRNA *self);
+static PyObject *pyrna_basetype_register(PyObject *self, PyObject *py_class);
+static PyObject *pyrna_basetype_unregister(PyObject *self, PyObject *py_class);
+
static struct PyMethodDef pyrna_basetype_methods[] = {
{"__dir__", (PyCFunction)pyrna_basetype_dir, METH_NOARGS, ""},
{"register", (PyCFunction)pyrna_basetype_register, METH_O, ""},
@@ -4232,18 +4314,18 @@ StructRNA *pyrna_struct_as_srna(PyObject *self, int parent, const char *error_pr
}
if(py_srna==NULL) {
- PyErr_Format(PyExc_SystemError, "%.200s internal error, self of type '%.200s' had no bl_rna attribute, should never happen", error_prefix, Py_TYPE(self)->tp_name);
+ PyErr_Format(PyExc_SystemError, "%.200s, missing bl_rna attribute from '%.200s' instance (may not be registered)", error_prefix, Py_TYPE(self)->tp_name);
return NULL;
}
if(!BPy_StructRNA_Check(py_srna)) {
- PyErr_Format(PyExc_SystemError, "%.200s internal error, bl_rna was of type '%.200s', instead of %.200s instance", error_prefix, Py_TYPE(py_srna)->tp_name, pyrna_struct_Type.tp_name);
+ PyErr_Format(PyExc_SystemError, "%.200s, bl_rna attribute wrong type '%.200s' on '%.200s'' instance", error_prefix, Py_TYPE(py_srna)->tp_name, Py_TYPE(self)->tp_name);
Py_DECREF(py_srna);
return NULL;
}
if(py_srna->ptr.type != &RNA_Struct) {
- PyErr_Format(PyExc_SystemError, "%.200s internal error, bl_rna was not a RNA_Struct type of rna struct", error_prefix);
+ PyErr_Format(PyExc_SystemError, "%.200s, bl_rna attribute not a RNA_Struct, on '%.200s'' instance", error_prefix, Py_TYPE(self)->tp_name);
Py_DECREF(py_srna);
return NULL;
}
@@ -4291,7 +4373,6 @@ static int deferred_register_prop(StructRNA *srna, PyObject *item, PyObject *key
if(*_PyUnicode_AsString(key)=='_') {
PyErr_Format(PyExc_ValueError, "bpy_struct \"%.200s\" registration error: %.200s could not register because the property starts with an '_'\n", RNA_struct_identifier(srna), _PyUnicode_AsString(key));
- Py_DECREF(dummy_args);
return -1;
}
pyfunc = PyCapsule_GetPointer(py_func_ptr, NULL);
@@ -4312,8 +4393,6 @@ static int deferred_register_prop(StructRNA *srna, PyObject *item, PyObject *key
// PyLineSpit();
PyErr_Format(PyExc_ValueError, "bpy_struct \"%.200s\" registration error: %.200s could not register\n", RNA_struct_identifier(srna), _PyUnicode_AsString(key));
-
- Py_DECREF(dummy_args);
return -1;
}
}
@@ -4330,7 +4409,7 @@ static int deferred_register_prop(StructRNA *srna, PyObject *item, PyObject *key
return 0;
}
-int pyrna_deferred_register_props(StructRNA *srna, PyObject *class_dict)
+static int pyrna_deferred_register_props(StructRNA *srna, PyObject *class_dict)
{
PyObject *item, *key;
PyObject *order;
@@ -4340,12 +4419,10 @@ int pyrna_deferred_register_props(StructRNA *srna, PyObject *class_dict)
dummy_args = PyTuple_New(0);
- order= PyDict_GetItemString(class_dict, "order");
-
- if(order==NULL)
- PyErr_Clear();
-
- if(order && PyList_Check(order)) {
+ if( !PyDict_CheckExact(class_dict) &&
+ (order= PyDict_GetItemString(class_dict, "order")) &&
+ PyList_CheckExact(order)
+ ) {
for(pos= 0; pos<PyList_GET_SIZE(order); pos++) {
key= PyList_GET_ITEM(order, pos);
item= PyDict_GetItem(class_dict, key);
@@ -4368,6 +4445,49 @@ int pyrna_deferred_register_props(StructRNA *srna, PyObject *class_dict)
return 0;
}
+static int pyrna_deferred_register_class_recursive(StructRNA *srna, PyTypeObject *py_class)
+{
+ const int len= PyTuple_GET_SIZE(py_class->tp_bases);
+ int i, ret;
+
+ /* first scan base classes for registerable properties */
+ for(i=0; i<len; i++) {
+ PyTypeObject *py_superclass= (PyTypeObject *)PyTuple_GET_ITEM(py_class->tp_bases, i);
+
+ /* the rules for using these base classes are not clear,
+ * 'object' is ofcourse not worth looking into and
+ * existing subclasses of RNA would cause a lot more dictionary
+ * looping then is needed (SomeOperator would scan Operator.__dict__)
+ * which is harmless but not at all useful.
+ *
+ * So only scan base classes which are not subclasses if blender types.
+ * This best fits having 'mix-in' classes for operators and render engines.
+ * */
+ if( py_superclass != &PyBaseObject_Type &&
+ !PyObject_IsSubclass((PyObject *)py_superclass, (PyObject *)&pyrna_struct_Type)
+ ) {
+ ret= pyrna_deferred_register_class_recursive(srna, py_superclass);
+
+ if(ret != 0) {
+ return ret;
+ }
+ }
+ }
+
+ /* not register out own properties */
+ return pyrna_deferred_register_props(srna, py_class->tp_dict); /* getattr(..., "__dict__") returns a proxy */
+}
+
+int pyrna_deferred_register_class(StructRNA *srna, PyObject *py_class)
+{
+ /* Panels and Menus dont need this
+ * save some time and skip the checks here */
+ if(!RNA_struct_idprops_register_check(srna))
+ return 0;
+
+ return pyrna_deferred_register_class_recursive(srna, (PyTypeObject *)py_class);
+}
+
/*-------------------- Type Registration ------------------------*/
static int rna_function_arg_count(FunctionRNA *func)
@@ -4375,7 +4495,7 @@ static int rna_function_arg_count(FunctionRNA *func)
const ListBase *lb= RNA_function_defined_parameters(func);
PropertyRNA *parm;
Link *link;
- int count= 1;
+ int count= (RNA_function_flag(func) & FUNC_NO_SELF) ? 0 : 1;
for(link=lb->first; link; link=link->next) {
parm= (PropertyRNA*)link;
@@ -4396,7 +4516,7 @@ static int bpy_class_validate(PointerRNA *dummyptr, void *py_data, int *have_fun
const char *class_type= RNA_struct_identifier(srna);
PyObject *py_class= (PyObject*)py_data;
PyObject *base_class= RNA_struct_py_type_get(srna);
- PyObject *item, *fitem;
+ PyObject *item;
PyObject *py_arg_count;
int i, flag, arg_count, func_arg_count;
const char *py_class_name = ((PyTypeObject *)py_class)->tp_name; // __name__
@@ -4433,25 +4553,33 @@ static int bpy_class_validate(PointerRNA *dummyptr, void *py_data, int *have_fun
PyErr_Clear();
}
else {
- Py_DECREF(item); /* no need to keep a ref, the class owns it */
-
- if (PyMethod_Check(item))
- fitem= PyMethod_Function(item); /* py 2.x */
- else
- fitem= item; /* py 3.x */
-
- if (PyFunction_Check(fitem)==0) {
- PyErr_Format( PyExc_TypeError, "expected %.200s, %.200s class \"%.200s\" attribute to be a function", class_type, py_class_name, RNA_function_identifier(func));
- return -1;
+ Py_DECREF(item); /* no need to keep a ref, the class owns it (technically we should keep a ref but...) */
+ if(flag & FUNC_NO_SELF) {
+ if (PyMethod_Check(item)==0) {
+ PyErr_Format( PyExc_TypeError, "expected %.200s, %.200s class \"%.200s\" attribute to be a method, not a %.200s", class_type, py_class_name, RNA_function_identifier(func), Py_TYPE(item)->tp_name);
+ return -1;
+ }
+ item= ((PyMethodObject *)item)->im_func;
+ }
+ else {
+ if (PyFunction_Check(item)==0) {
+ PyErr_Format( PyExc_TypeError, "expected %.200s, %.200s class \"%.200s\" attribute to be a function, not a %.200s", class_type, py_class_name, RNA_function_identifier(func), Py_TYPE(item)->tp_name);
+ return -1;
+ }
}
func_arg_count= rna_function_arg_count(func);
if (func_arg_count >= 0) { /* -1 if we dont care*/
- py_arg_count = PyObject_GetAttrString(PyFunction_GET_CODE(fitem), "co_argcount");
+ py_arg_count = PyObject_GetAttrString(PyFunction_GET_CODE(item), "co_argcount");
arg_count = PyLong_AsSsize_t(py_arg_count);
Py_DECREF(py_arg_count);
+ /* note, the number of args we check for and the number of args we give to
+ * @classmethods are different (quirk of python), this is why rna_function_arg_count() doesn't return the value -1*/
+ if(flag & FUNC_NO_SELF)
+ func_arg_count++;
+
if (arg_count != func_arg_count) {
PyErr_Format( PyExc_AttributeError, "expected %.200s, %.200s class \"%.200s\" function to have %d args, found %d", class_type, py_class_name, RNA_function_identifier(func), func_arg_count, arg_count);
return -1;
@@ -4524,6 +4652,7 @@ static int bpy_class_call(PointerRNA *ptr, FunctionRNA *func, ParameterList *par
ParameterIterator iter;
PointerRNA funcptr;
int err= 0, i, flag, ret_len=0;
+ int is_static = RNA_function_flag(func) & FUNC_NO_SELF;
PropertyRNA *pret_single= NULL;
void *retdata_single= NULL;
@@ -4531,52 +4660,64 @@ static int bpy_class_call(PointerRNA *ptr, FunctionRNA *func, ParameterList *par
PyGILState_STATE gilstate;
bContext *C= BPy_GetContext(); // XXX - NEEDS FIXING, QUITE BAD.
+
+ py_class= RNA_struct_py_type_get(ptr->type);
+
+ /* rare case. can happen when registering subclasses */
+ if(py_class==NULL) {
+ fprintf(stderr, "bpy_class_call(): unable to get python class for rna struct '%.200s'\n", RNA_struct_identifier(ptr->type));
+ return -1;
+ }
+
bpy_context_set(C, &gilstate);
- py_class= RNA_struct_py_type_get(ptr->type);
+ if (!is_static) {
+ /* exception, operators store their PyObjects for re-use */
+ if(ptr->data) {
+ if(RNA_struct_is_a(ptr->type, &RNA_Operator)) {
+ wmOperator *op= ptr->data;
+ if(op->py_instance) {
+ py_class_instance= op->py_instance;
+ Py_INCREF(py_class_instance);
+ }
+ else {
+ /* store the instance here once its created */
+ py_class_instance_store= &op->py_instance;
+ }
+ }
+ }
+ /* end exception */
- /* exception, operators store their PyObjects for re-use */
- if(ptr->data) {
- if(RNA_struct_is_a(ptr->type, &RNA_Operator)) {
- wmOperator *op= ptr->data;
- if(op->py_instance) {
- py_class_instance= op->py_instance;
- Py_INCREF(py_class_instance);
+ if(py_class_instance==NULL)
+ py_srna= pyrna_struct_CreatePyObject(ptr);
+
+ if(py_class_instance) {
+ /* special case, instance is cached */
+ }
+ else if(py_srna == NULL) {
+ py_class_instance = NULL;
+ }
+ else if(py_srna == Py_None) { /* probably wont ever happen but possible */
+ Py_DECREF(py_srna);
+ py_class_instance = NULL;
+ }
+ else {
+ args = PyTuple_New(1);
+ PyTuple_SET_ITEM(args, 0, py_srna);
+ py_class_instance= PyObject_Call(py_class, args, NULL);
+ Py_DECREF(args);
+
+ if(py_class_instance == NULL) {
+ err= -1; /* so the error is not overridden below */
}
- else {
- /* store the instance here once its created */
- py_class_instance_store= &op->py_instance;
+ else if(py_class_instance_store) {
+ *py_class_instance_store = py_class_instance;
+ Py_INCREF(py_class_instance);
}
}
}
- /* end exception */
-
- if(py_class_instance==NULL)
- py_srna= pyrna_struct_CreatePyObject(ptr);
-
- if(py_class_instance) {
- /* special case, instance is cached */
- }
- else if(py_srna == NULL) {
- py_class_instance = NULL;
- }
- else if(py_srna == Py_None) { /* probably wont ever happen but possible */
- Py_DECREF(py_srna);
- py_class_instance = NULL;
- }
- else {
- args = PyTuple_New(1);
- PyTuple_SET_ITEM(args, 0, py_srna);
- py_class_instance = PyObject_Call(py_class, args, NULL);
- Py_DECREF(args);
-
- if(py_class_instance_store) {
- *py_class_instance_store = py_class_instance;
- Py_INCREF(py_class_instance);
- }
- }
- if (py_class_instance) { /* Initializing the class worked, now run its invoke function */
+ if (is_static || py_class_instance) { /* Initializing the class worked, now run its invoke function */
PyObject *item= PyObject_GetAttrString(py_class, RNA_function_identifier(func));
// flag= RNA_function_flag(func);
@@ -4584,12 +4725,19 @@ static int bpy_class_call(PointerRNA *ptr, FunctionRNA *func, ParameterList *par
RNA_pointer_create(NULL, &RNA_Function, func, &funcptr);
args = PyTuple_New(rna_function_arg_count(func)); /* first arg is included in 'item' */
- PyTuple_SET_ITEM(args, 0, py_class_instance);
+
+ if(is_static) {
+ i= 0;
+ }
+ else {
+ PyTuple_SET_ITEM(args, 0, py_class_instance);
+ i= 1;
+ }
RNA_parameter_list_begin(parms, &iter);
/* parse function parameters */
- for (i= 1; iter.valid; RNA_parameter_list_next(&iter)) {
+ for (; iter.valid; RNA_parameter_list_next(&iter)) {
parm= iter.parm;
flag= RNA_property_flag(parm);
@@ -4623,8 +4771,11 @@ static int bpy_class_call(PointerRNA *ptr, FunctionRNA *func, ParameterList *par
}
}
else {
- PyErr_Format(PyExc_RuntimeError, "could not create instance of %.200s to call callback function %.200s.", RNA_struct_identifier(ptr->type), RNA_function_identifier(func));
- err= -1;
+ /* the error may be alredy set if the class instance couldnt be created */
+ if(err != -1) {
+ PyErr_Format(PyExc_RuntimeError, "could not create instance of %.200s to call callback function %.200s.", RNA_struct_identifier(ptr->type), RNA_function_identifier(func));
+ err= -1;
+ }
}
if (ret == NULL) { /* covers py_class_instance failing too */
@@ -4717,7 +4868,16 @@ void pyrna_alloc_types(void)
prop = RNA_struct_find_property(&ptr, "structs");
RNA_PROP_BEGIN(&ptr, itemptr, prop) {
- Py_DECREF(pyrna_struct_Subtype(&itemptr));
+ PyObject *item= pyrna_struct_Subtype(&itemptr);
+ if(item == NULL) {
+ if(PyErr_Occurred()) {
+ PyErr_Print();
+ PyErr_Clear();
+ }
+ }
+ else {
+ Py_DECREF(item);
+ }
}
RNA_PROP_END;
@@ -4760,15 +4920,14 @@ void pyrna_free_types(void)
* - Should still be fixed - Campbell
* */
-PyObject *pyrna_basetype_register(PyObject *self, PyObject *py_class)
+static PyObject *pyrna_basetype_register(PyObject *self, PyObject *py_class)
{
bContext *C= NULL;
ReportList reports;
StructRegisterFunc reg;
StructRNA *srna;
StructRNA *srna_new;
- PyObject *item;
- const char *identifier= "";
+ const char *identifier;
if(PyDict_GetItemString(((PyTypeObject*)py_class)->tp_dict, "bl_rna")) {
PyErr_SetString(PyExc_AttributeError, "bpy.types.register(...): already registered as a subclass.");
@@ -4780,11 +4939,19 @@ PyObject *pyrna_basetype_register(PyObject *self, PyObject *py_class)
if(srna==NULL)
return NULL;
+ /* fails in cases, cant use this check but would like to :| */
+ /*
+ if(RNA_struct_py_type_get(srna)) {
+ PyErr_Format(PyExc_ValueError, "bpy.types.register(...): %.200s's parent class %.200s is alredy registered, this is not allowed.", ((PyTypeObject*)py_class)->tp_name, RNA_struct_identifier(srna));
+ return NULL;
+ }
+ */
+
/* check that we have a register callback for this type */
reg= RNA_struct_register(srna);
if(!reg) {
- PyErr_SetString(PyExc_ValueError, "bpy.types.register(...): expected a Type subclassed from a registerable rna type (no register supported).");
+ PyErr_Format(PyExc_ValueError, "bpy.types.register(...): expected a subclass of a registerable rna type (%.200s does not support registration).", RNA_struct_identifier(srna));
return NULL;
}
@@ -4794,12 +4961,7 @@ PyObject *pyrna_basetype_register(PyObject *self, PyObject *py_class)
/* call the register callback with reports & identifier */
BKE_reports_init(&reports, RPT_STORE);
- item= PyObject_GetAttrString(py_class, "__name__");
-
- if(item) {
- identifier= _PyUnicode_AsString(item);
- Py_DECREF(item); /* no need to keep a ref, the class owns it */
- }
+ identifier= ((PyTypeObject*)py_class)->tp_name;
srna_new= reg(C, &reports, py_class, identifier, bpy_class_validate, bpy_class_call, bpy_class_free);
@@ -4823,27 +4985,47 @@ PyObject *pyrna_basetype_register(PyObject *self, PyObject *py_class)
*
* item= PyObject_GetAttrString(py_class, "__dict__");
*/
- item= ((PyTypeObject*)py_class)->tp_dict;
- if(item) {
- if(pyrna_deferred_register_props(srna_new, item)!=0) {
- return NULL;
- }
- }
- else {
- PyErr_Clear();
- }
+ if(pyrna_deferred_register_class(srna_new, py_class)!=0)
+ return NULL;
Py_RETURN_NONE;
}
-PyObject *pyrna_basetype_unregister(PyObject *self, PyObject *py_class)
+
+static int pyrna_srna_contains_pointer_prop_srna(StructRNA *srna_props, StructRNA *srna, const char **prop_identifier)
+{
+ PointerRNA tptr;
+ PropertyRNA *iterprop;
+ RNA_pointer_create(NULL, &RNA_Struct, srna_props, &tptr);
+
+ iterprop= RNA_struct_find_property(&tptr, "properties");
+
+ RNA_PROP_BEGIN(&tptr, itemptr, iterprop) {
+ PropertyRNA *prop= itemptr.data;
+ if(RNA_property_type(prop) == PROP_POINTER) {
+ if (strcmp(RNA_property_identifier(prop), "rna_type") == 0) {
+ /* pass */
+ }
+ else if(RNA_property_pointer_type(&tptr, prop) == srna) {
+ *prop_identifier= RNA_property_identifier(prop);
+ return 1;
+ }
+ }
+ }
+ RNA_PROP_END;
+
+ return 0;
+}
+
+static PyObject *pyrna_basetype_unregister(PyObject *self, PyObject *py_class)
{
bContext *C= NULL;
StructUnregisterFunc unreg;
StructRNA *srna;
/*if(PyDict_GetItemString(((PyTypeObject*)py_class)->tp_dict, "bl_rna")==NULL) {
- PyErr_SetString(PyExc_ValueError, "bpy.types.unregister(): not a registered as a subclass.");
+ PWM_cursor_wait(0);
+yErr_SetString(PyExc_ValueError, "bpy.types.unregister(): not a registered as a subclass.");
return NULL;
}*/
@@ -4859,6 +5041,34 @@ PyObject *pyrna_basetype_unregister(PyObject *self, PyObject *py_class)
return NULL;
}
+ /* should happen all the time but very slow */
+ if(G.f & G_DEBUG) {
+ /* remove all properties using this class */
+ StructRNA *srna_iter;
+ PointerRNA ptr_rna;
+ PropertyRNA *prop_rna;
+ const char *prop_identifier= NULL;
+
+ RNA_blender_rna_pointer_create(&ptr_rna);
+ prop_rna = RNA_struct_find_property(&ptr_rna, "structs");
+
+
+
+ /* loop over all structs */
+ RNA_PROP_BEGIN(&ptr_rna, itemptr, prop_rna) {
+ srna_iter = itemptr.data;
+ if(pyrna_srna_contains_pointer_prop_srna(srna_iter, srna, &prop_identifier)) {
+ break;
+ }
+ }
+ RNA_PROP_END;
+
+ if(prop_identifier) {
+ PyErr_Format(PyExc_SystemError, "bpy.types.unregister(...): Cant unregister %s because %s.%s pointer property is using this.", RNA_struct_identifier(srna), RNA_struct_identifier(srna_iter), prop_identifier);
+ return NULL;
+ }
+ }
+
/* get the context, so register callback can do necessary refreshes */
C= BPy_GetContext();
diff --git a/source/blender/python/intern/bpy_rna.h b/source/blender/python/intern/bpy_rna.h
index 9892ed6989b..63f6997d82c 100644
--- a/source/blender/python/intern/bpy_rna.h
+++ b/source/blender/python/intern/bpy_rna.h
@@ -86,11 +86,7 @@ int pyrna_set_to_enum_bitfield(EnumPropertyItem *items, PyObject *value, int *r_
int pyrna_enum_value_from_id(EnumPropertyItem *item, const char *identifier, int *value, const char *error_prefix);
-/* function for registering types */
-PyObject *pyrna_basetype_register(PyObject *self, PyObject *args);
-PyObject *pyrna_basetype_unregister(PyObject *self, PyObject *args);
-
-int pyrna_deferred_register_props(struct StructRNA *srna, PyObject *class_dict);
+int pyrna_deferred_register_class(struct StructRNA *srna, PyObject *py_class);
/* called before stopping python */
void pyrna_alloc_types(void);
diff --git a/source/blender/python/intern/bpy_rna_callback.c b/source/blender/python/intern/bpy_rna_callback.c
index 2404442dc18..b2a7511f998 100644
--- a/source/blender/python/intern/bpy_rna_callback.c
+++ b/source/blender/python/intern/bpy_rna_callback.c
@@ -64,19 +64,28 @@ PyObject *pyrna_callback_add(BPy_StructRNA *self, PyObject *args)
char *cb_event_str= NULL;
int cb_event;
- if (!PyArg_ParseTuple(args, "OO|s:bpy_struct.callback_add", &cb_func, &cb_args, &cb_event_str))
+ if (!PyArg_ParseTuple(args, "OO!|s:bpy_struct.callback_add", &cb_func, &PyTuple_Type, &cb_args, &cb_event_str))
return NULL;
+
+ if(!PyCallable_Check(cb_func)) {
+ PyErr_SetString(PyExc_TypeError, "callback_add(): first argument isn't callable");
+ return NULL;
+ }
if(RNA_struct_is_a(self->ptr.type, &RNA_Region)) {
-
- static EnumPropertyItem region_draw_mode_items[] = {
- {REGION_DRAW_POST_VIEW, "POST_VIEW", 0, "Pose View", ""},
- {REGION_DRAW_POST_PIXEL, "POST_PIXEL", 0, "Post Pixel", ""},
- {REGION_DRAW_PRE_VIEW, "PRE_VIEW", 0, "Pre View", ""},
- {0, NULL, 0, NULL, NULL}};
-
- if(pyrna_enum_value_from_id(region_draw_mode_items, cb_event_str, &cb_event, "bpy_struct.callback_add()") < 0)
- return NULL;
+ if(cb_event_str) {
+ static EnumPropertyItem region_draw_mode_items[] = {
+ {REGION_DRAW_POST_PIXEL, "POST_PIXEL", 0, "Post Pixel", ""},
+ {REGION_DRAW_POST_VIEW, "POST_VIEW", 0, "Post View", ""},
+ {REGION_DRAW_PRE_VIEW, "PRE_VIEW", 0, "Pre View", ""},
+ {0, NULL, 0, NULL, NULL}};
+
+ if(pyrna_enum_value_from_id(region_draw_mode_items, cb_event_str, &cb_event, "bpy_struct.callback_add()") < 0)
+ return NULL;
+ }
+ else {
+ cb_event= REGION_DRAW_POST_PIXEL;
+ }
handle= ED_region_draw_cb_activate(((ARegion *)self->ptr.data)->type, cb_region_draw, (void *)args, cb_event);
Py_INCREF(args);
diff --git a/source/blender/python/intern/bpy_util.c b/source/blender/python/intern/bpy_util.c
index 38462d1b176..1d14ab67510 100644
--- a/source/blender/python/intern/bpy_util.c
+++ b/source/blender/python/intern/bpy_util.c
@@ -54,7 +54,7 @@ void PyObSpit(char *name, PyObject *var) {
}
void PyLineSpit(void) {
- char *filename;
+ const char *filename;
int lineno;
PyErr_Clear();
@@ -63,7 +63,7 @@ void PyLineSpit(void) {
fprintf(stderr, "%s:%d\n", filename, lineno);
}
-void BPY_getFileAndNum(char **filename, int *lineno)
+void BPY_getFileAndNum(const char **filename, int *lineno)
{
PyObject *getframe, *frame;
PyObject *f_lineno= NULL, *co_filename= NULL;
@@ -83,6 +83,7 @@ void BPY_getFileAndNum(char **filename, int *lineno)
return;
}
+ /* when executing a script */
if (filename) {
co_filename= PyObject_GetAttrStringArgs(frame, 1, "f_code", "co_filename");
if (co_filename==NULL) {
@@ -95,6 +96,25 @@ void BPY_getFileAndNum(char **filename, int *lineno)
Py_DECREF(co_filename);
}
+ /* when executing a module */
+ if(filename && *filename == NULL) {
+ /* try an alternative method to get the filename - module based
+ * references below are all borrowed (double checked) */
+ PyObject *mod_name= PyDict_GetItemString(PyEval_GetGlobals(), "__name__");
+ if(mod_name) {
+ PyObject *mod= PyDict_GetItem(PyImport_GetModuleDict(), mod_name);
+ if(mod) {
+ *filename= PyModule_GetFilename(mod);
+ }
+
+ /* unlikely, fallback */
+ if(*filename == NULL) {
+ *filename= _PyUnicode_AsString(mod_name);
+ }
+ }
+ }
+
+
if (lineno) {
f_lineno= PyObject_GetAttrString(frame, "f_lineno");
if (f_lineno==NULL) {
@@ -330,7 +350,7 @@ int BPy_errors_to_report(ReportList *reports)
PyObject *pystring_format= NULL; // workaround, see below
char *cstring;
- char *filename;
+ const char *filename;
int lineno;
if (!PyErr_Occurred())
diff --git a/source/blender/python/intern/bpy_util.h b/source/blender/python/intern/bpy_util.h
index e7e7bb09419..cfe820b53b0 100644
--- a/source/blender/python/intern/bpy_util.h
+++ b/source/blender/python/intern/bpy_util.h
@@ -38,7 +38,7 @@ struct ReportList;
void PyObSpit(char *name, PyObject *var);
void PyLineSpit(void);
-void BPY_getFileAndNum(char **filename, int *lineno);
+void BPY_getFileAndNum(const char **filename, int *lineno);
PyObject *BPY_exception_buffer(void);
diff --git a/source/blender/quicktime/CMakeLists.txt b/source/blender/quicktime/CMakeLists.txt
index 2b5c8a53e9b..63b6558e997 100644
--- a/source/blender/quicktime/CMakeLists.txt
+++ b/source/blender/quicktime/CMakeLists.txt
@@ -52,11 +52,3 @@ SET(INC ${INC} ${QUICKTIME_INC})
ADD_DEFINITIONS(-DWITH_QUICKTIME)
BLENDERLIB(bf_quicktime "${SRC}" "${INC}")
-#if env['OURPLATFORM'] in ['win32-vc', 'darwin']:
-# types = ['core', 'player']
-# priorities = [95, 200]
-#else:
-# types = ['core']
-# priorities = [95]
-#
-#env.BlenderLib ('bf_quicktime', sources=source_files, includes=incs, defines=['WITH_QUICKTIME'], libtype=types, priority=priorities)
diff --git a/source/blender/quicktime/Makefile b/source/blender/quicktime/Makefile
index 3d8ab2f0adc..d0055780556 100644
--- a/source/blender/quicktime/Makefile
+++ b/source/blender/quicktime/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/quicktime/apple/Makefile b/source/blender/quicktime/apple/Makefile
index 70757f02055..cdb00ab9ef2 100644
--- a/source/blender/quicktime/apple/Makefile
+++ b/source/blender/quicktime/apple/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
@@ -59,5 +59,5 @@ CPPFLAGS += -I..
CPPFLAGS += -I../../blenloader -I../../imbuf/intern -I../../imbuf
CPPFLAGS += -I../../blenlib -I../../makesdna -I../../editors/include -I../../avi
CPPFLAGS += -I../../blenkernel -I../../render/extern/include -I../../windowmanager -I../../makesrna
-CPPFLAGS += -I../../../intern/audaspace/intern
+CPPFLAGS += -I$(NAN_AUDASPACE)/include
diff --git a/source/blender/readblenfile/CMakeLists.txt b/source/blender/readblenfile/CMakeLists.txt
index 306544fec78..a6522ffa758 100644
--- a/source/blender/readblenfile/CMakeLists.txt
+++ b/source/blender/readblenfile/CMakeLists.txt
@@ -31,4 +31,3 @@ SET(INC
)
BLENDERLIB(bf_readblenfile "${SRC}" "${INC}")
-#env.BlenderLib ( 'bf_readblenfile', sources, Split(incs), [], libtype=['common','player'], priority = [0, 220] )
diff --git a/source/blender/readblenfile/Makefile b/source/blender/readblenfile/Makefile
index d291cb84315..f0a46d077a8 100644
--- a/source/blender/readblenfile/Makefile
+++ b/source/blender/readblenfile/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/readblenfile/intern/Makefile b/source/blender/readblenfile/intern/Makefile
index 54316903f23..dc59ca3b9ed 100644
--- a/source/blender/readblenfile/intern/Makefile
+++ b/source/blender/readblenfile/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/readblenfile/stub/Makefile b/source/blender/readblenfile/stub/Makefile
index a2b0fe88f6a..94a55407418 100644
--- a/source/blender/readblenfile/stub/Makefile
+++ b/source/blender/readblenfile/stub/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/readblenfile/test/Makefile b/source/blender/readblenfile/test/Makefile
index 50f50f5c54c..cc294ac60b3 100644
--- a/source/blender/readblenfile/test/Makefile
+++ b/source/blender/readblenfile/test/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/render/CMakeLists.txt b/source/blender/render/CMakeLists.txt
index 42c91b7315b..caa0e0a9a41 100644
--- a/source/blender/render/CMakeLists.txt
+++ b/source/blender/render/CMakeLists.txt
@@ -38,9 +38,9 @@ IF(WIN32)
SET(INC ${INC} ${PTHREADS_INC})
ENDIF(WIN32)
-IF(WITH_OPENEXR)
+IF(WITH_IMAGE_OPENEXR)
ADD_DEFINITIONS(-DWITH_OPENEXR)
-ENDIF(WITH_OPENEXR)
+ENDIF(WITH_IMAGE_OPENEXR)
IF(WITH_QUICKTIME)
SET(INC ${INC} ../quicktime ${QUICKTIME_INC})
@@ -54,9 +54,4 @@ IF(APPLE)
ENDIF(CMAKE_OSX_ARCHITECTURES MATCHES "i386" OR CMAKE_OSX_ARCHITECTURES MATCHES "x86_64")
ENDIF(APPLE)
-#TODO
-#if env['OURPLATFORM']=='linux2':
-# cflags='-pthread'
-
BLENDERLIB_NOLIST(blender_render "${SRC}" "${INC}")
-#env.BlenderLib ( libname = 'blender_render', sources = sources, includes = Split(incs), defines=defs, libtype='core', priority=45, compileflags=cflags )
diff --git a/source/blender/render/Makefile b/source/blender/render/Makefile
index 11ddbad0b94..7be54ac359f 100644
--- a/source/blender/render/Makefile
+++ b/source/blender/render/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/render/SConscript b/source/blender/render/SConscript
index def2a8e777a..479c9d1ad40 100644
--- a/source/blender/render/SConscript
+++ b/source/blender/render/SConscript
@@ -8,36 +8,37 @@ incs = 'intern/include #/intern/guardedalloc ../blenlib ../makesdna ../makesrna'
incs += ' extern/include ../blenkernel ../radiosity/extern/include ../imbuf'
incs += ' ../include ../blenloader ../../../intern/smoke/extern ../bmesh'
-cflags = env['CCFLAGS']
-cxxflags = env['CXXFLAGS']
+cflags_raytrace = env['CCFLAGS']
+cxxflags_raytrace = env['CXXFLAGS']
defs = []
+defs_raytrace = []
if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'):
if env['WITH_BF_RAYOPTIMIZATION']:
- cflags = env['CCFLAGS'] + env['BF_RAYOPTIMIZATION_SSE_FLAGS']
- cxxflags = env['CCFLAGS'] + env['BF_RAYOPTIMIZATION_SSE_FLAGS']
+ cflags_raytrace = env['CCFLAGS'] + env['BF_RAYOPTIMIZATION_SSE_FLAGS']
+ cxxflags_raytrace = env['CCFLAGS'] + env['BF_RAYOPTIMIZATION_SSE_FLAGS']
if env['OURPLATFORM'] == 'win32-mingw':
if env['WITH_BF_RAYOPTIMIZATION']:
- cflags = env['CCFLAGS'] + env['BF_RAYOPTIMIZATION_SSE_FLAGS']
- cxxflags = env['CXXFLAGS'] + env['BF_RAYOPTIMIZATION_SSE_FLAGS']
+ cflags_raytrace = env['CCFLAGS'] + env['BF_RAYOPTIMIZATION_SSE_FLAGS']
+ cxxflags_raytrace = env['CXXFLAGS'] + env['BF_RAYOPTIMIZATION_SSE_FLAGS']
if env['OURPLATFORM'] == 'darwin':
if env['MACOSX_ARCHITECTURE'] in ('i386', 'x86_64') and env['WITH_BF_RAYOPTIMIZATION']:
- cflags = env['CFLAGS'] + env['BF_RAYOPTIMIZATION_SSE_FLAGS']
- cxxflags = env['CXXFLAGS'] + env['BF_RAYOPTIMIZATION_SSE_FLAGS']
+ cflags_raytrace = env['CFLAGS'] + env['BF_RAYOPTIMIZATION_SSE_FLAGS']
+ cxxflags_raytrace = env['CXXFLAGS'] + env['BF_RAYOPTIMIZATION_SSE_FLAGS']
if env['OURPLATFORM'] == 'linux2':
if env['WITH_BF_RAYOPTIMIZATION']:
- cflags = env['CCFLAGS'] + env['BF_RAYOPTIMIZATION_SSE_FLAGS']
- cxxflags = env['CXXFLAGS'] + env['BF_RAYOPTIMIZATION_SSE_FLAGS']
+ cflags_raytrace = env['CCFLAGS'] + env['BF_RAYOPTIMIZATION_SSE_FLAGS']
+ cxxflags_raytrace = env['CXXFLAGS'] + env['BF_RAYOPTIMIZATION_SSE_FLAGS']
incs += ' ../../../extern/binreloc/include'
if env['OURPLATFORM'] == 'linuxcross':
if env['WITH_BF_RAYOPTIMIZATION']:
- cflags = env['CCFLAGS'] + env['BF_RAYOPTIMIZATION_SSE_FLAGS']
- cxxflags = env['CCFLAGS'] + env['BF_RAYOPTIMIZATION_SSE_FLAGS']
+ cflags_raytrace = env['CCFLAGS'] + env['BF_RAYOPTIMIZATION_SSE_FLAGS']
+ cxxflags_raytrace = env['CCFLAGS'] + env['BF_RAYOPTIMIZATION_SSE_FLAGS']
if env['WITH_BF_QUICKTIME']:
defs.append('WITH_QUICKTIME')
@@ -53,10 +54,12 @@ if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
# HACK: To fix problem with error 'MMX instruction set not enabled' from mmintrin.h
#
if env['OURPLATFORM'] == 'linuxcross':
- defs.append('__MMX__')
+ defs.append('__SSE__')
+ defs_raytrace.append('__MMX__')
if env['WITH_BF_RAYOPTIMIZATION']:
defs.append('__SSE__')
+ defs_raytrace.append('__SSE__')
-env.BlenderLib ( libname = 'bf_render', sources = sources, includes = Split(incs), defines=defs, libtype='core', priority=145, compileflags=cflags )
-env.BlenderLib ( libname = 'bf_render_raytrace', sources = raysources, includes = Split(incs), defines=defs, libtype='core', priority=145, compileflags=cflags, cxx_compileflags=cxxflags )
+env.BlenderLib ( libname = 'bf_render', sources = sources, includes = Split(incs), defines=defs, libtype='core', priority=145 )
+env.BlenderLib ( libname = 'bf_render_raytrace', sources = raysources, includes = Split(incs), defines=defs_raytrace, libtype='core', priority=145, compileflags=cflags_raytrace, cxx_compileflags=cxxflags_raytrace )
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index 802703d476c..b12e45ecd9c 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -37,14 +37,15 @@
struct bNodeTree;
struct Image;
+struct Main;
struct NodeBlurData;
struct Object;
-struct ReportList;
struct RenderData;
struct RenderEngine;
struct RenderEngineType;
struct RenderResult;
struct ReportList;
+struct ReportList;
struct Scene;
struct SceneRenderLayer;
@@ -192,7 +193,7 @@ void RE_SetPixelSize(struct Render *re, float pixsize);
void RE_SetView (struct Render *re, float mat[][4]);
/* make or free the dbase */
-void RE_Database_FromScene(struct Render *re, struct Scene *scene, unsigned int lay, int use_camera_view);
+void RE_Database_FromScene(struct Render *re, struct Main *bmain, struct Scene *scene, unsigned int lay, int use_camera_view);
void RE_Database_Free (struct Render *re);
/* project dbase again, when viewplane/perspective changed */
@@ -208,11 +209,11 @@ void RE_init_threadcount(Render *re);
void RE_TileProcessor(struct Render *re);
/* only RE_NewRender() needed, main Blender render calls */
-void RE_BlenderFrame(struct Render *re, struct Scene *scene, struct SceneRenderLayer *srl, unsigned int lay, int frame);
-void RE_BlenderAnim(struct Render *re, struct Scene *scene, unsigned int lay, int sfra, int efra, int tfra, struct ReportList *reports);
+void RE_BlenderFrame(struct Render *re, struct Main *bmain, struct Scene *scene, struct SceneRenderLayer *srl, unsigned int lay, int frame);
+void RE_BlenderAnim(struct Render *re, struct Main *bmain, struct Scene *scene, unsigned int lay, int sfra, int efra, int tfra, struct ReportList *reports);
/* main preview render call */
-void RE_PreviewRender(struct Render *re, struct Scene *scene);
+void RE_PreviewRender(struct Render *re, struct Main *bmain, struct Scene *scene);
void RE_ReadRenderResult(struct Scene *scene, struct Scene *scenode);
void RE_WriteRenderResult(RenderResult *rr, char *filename, int compress);
@@ -248,7 +249,7 @@ void RE_zbuf_accumulate_vecblur(struct NodeBlurData *nbd, int xsize, int ysize,
#define RE_BAKE_DISPLACEMENT 5
#define RE_BAKE_SHADOW 6
-void RE_Database_Baking(struct Render *re, struct Scene *scene, unsigned int lay, int type, struct Object *actob);
+void RE_Database_Baking(struct Render *re, struct Main *bmain, struct Scene *scene, unsigned int lay, int type, struct Object *actob);
void RE_DataBase_GetView(struct Render *re, float mat[][4]);
void RE_GetCameraWindow(struct Render *re, struct Object *camera, int frame, float mat[][4]);
diff --git a/source/blender/render/intern/Makefile b/source/blender/render/intern/Makefile
index 4fce37df175..4043902a40f 100644
--- a/source/blender/render/intern/Makefile
+++ b/source/blender/render/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/render/intern/include/render_types.h b/source/blender/render/intern/include/render_types.h
index 331474a85e3..b124102f50b 100644
--- a/source/blender/render/intern/include/render_types.h
+++ b/source/blender/render/intern/include/render_types.h
@@ -55,6 +55,7 @@ struct RenderBuckets;
struct ObjectInstanceRen;
struct RayObject;
struct RayFace;
+struct Main;
#define TABLEINITSIZE 1024
#define LAMPINITSIZE 256
@@ -170,7 +171,8 @@ struct Render
/* shadow counter, detect shadow-reuse for shaders */
int shadowsamplenr[BLENDER_MAX_THREADS];
- /* scene, and its full copy of renderdata and world */
+ /* main, scene, and its full copy of renderdata and world */
+ struct Main *main;
Scene *scene;
RenderData r;
World wrld;
@@ -464,6 +466,7 @@ typedef struct VolPrecachePart
struct RayObject *tree;
struct ShadeInput *shi;
struct ObjectInstanceRen *obi;
+ float viewmat[4][4];
int num;
int minx, maxx;
int miny, maxy;
@@ -477,6 +480,7 @@ typedef struct VolPrecachePart
typedef struct VolumePrecache
{
int res[3];
+ float *bbmin, *bbmax;
float *data_r;
float *data_g;
float *data_b;
@@ -585,23 +589,21 @@ typedef struct LampRen {
#define R_HALO 2
#define R_SEC_FIELD 4
#define R_LAMPHALO 8
-#define R_GLOB_NOPUNOFLIP 16
-#define R_NEED_TANGENT 32
-#define R_BAKE_TRACE 128
-#define R_BAKING 256
+#define R_NEED_TANGENT 16
+#define R_BAKE_TRACE 32
+#define R_BAKING 64
/* vlakren->flag (vlak = face in dutch) char!!! */
#define R_SMOOTH 1
#define R_HIDDEN 2
/* strand flag, means special handling */
#define R_STRAND 4
-#define R_NOPUNOFLIP 8
-#define R_FULL_OSA 16
-#define R_FACE_SPLIT 32
+#define R_FULL_OSA 8
+#define R_FACE_SPLIT 16
/* Tells render to divide face other way. */
-#define R_DIVIDE_24 64
+#define R_DIVIDE_24 32
/* vertex normals are tangent or view-corrected vector, for hair strands */
-#define R_TANGENT 128
+#define R_TANGENT 64
/* strandbuffer->flag */
#define R_STRAND_BSPLINE 1
diff --git a/source/blender/render/intern/include/renderdatabase.h b/source/blender/render/intern/include/renderdatabase.h
index 2a0086b436c..4c80616665d 100644
--- a/source/blender/render/intern/include/renderdatabase.h
+++ b/source/blender/render/intern/include/renderdatabase.h
@@ -34,6 +34,7 @@ struct Object;
struct VlakRen;
struct VertRen;
struct HaloRen;
+struct Main;
struct Material;
struct Render;
struct MCol;
@@ -115,7 +116,7 @@ struct MCol *RE_vlakren_get_mcol(struct ObjectRen *obr, VlakRen *ren, int n, cha
float *RE_vlakren_get_surfnor(struct ObjectRen *obr, VlakRen *ren, int verify);
float *RE_vlakren_get_nmap_tangent(struct ObjectRen *obr, VlakRen *ren, int verify);
RadFace **RE_vlakren_get_radface(struct ObjectRen *obr, VlakRen *ren, int verify);
-int RE_vlakren_get_normal(struct Render *re, struct ObjectInstanceRen *obi, struct VlakRen *vlr, float *nor);
+void RE_vlakren_get_normal(struct Render *re, struct ObjectInstanceRen *obi, struct VlakRen *vlr, float *nor);
float *RE_strandren_get_surfnor(struct ObjectRen *obr, struct StrandRen *strand, int verify);
float *RE_strandren_get_uv(struct ObjectRen *obr, struct StrandRen *strand, int n, char **name, int verify);
@@ -137,7 +138,7 @@ void RE_set_customdata_names(struct ObjectRen *obr, struct CustomData *data);
/* convertblender.c */
void init_render_world(Render *re);
-void RE_Database_FromScene_Vectors(Render *re, struct Scene *sce, unsigned int lay);
+void RE_Database_FromScene_Vectors(Render *re, struct Main *bmain, struct Scene *sce, unsigned int lay);
#endif /* RENDERDATABASE_H */
diff --git a/source/blender/render/intern/include/texture.h b/source/blender/render/intern/include/texture.h
index 436b365b352..fb941d1b7f3 100644
--- a/source/blender/render/intern/include/texture.h
+++ b/source/blender/render/intern/include/texture.h
@@ -65,7 +65,7 @@ void do_lamp_tex(LampRen *la, float *lavec, struct ShadeInput *shi, float *colf,
void do_volume_tex(struct ShadeInput *shi, float *xyz, int mapto_flag, float *col, float *val);
void init_render_textures(Render *re);
-void end_render_textures(void);
+void end_render_textures(Render *re);
void render_realtime_texture(struct ShadeInput *shi, struct Image *ima);
diff --git a/source/blender/render/intern/include/volume_precache.h b/source/blender/render/intern/include/volume_precache.h
index 73e0a3e0415..3ddf8380241 100644
--- a/source/blender/render/intern/include/volume_precache.h
+++ b/source/blender/render/intern/include/volume_precache.h
@@ -25,9 +25,11 @@
*
* ***** END GPL LICENSE BLOCK *****
*/
-
+
+void global_bounds_obi(Render *re, ObjectInstanceRen *obi, float *bbmin, float *bbmax);
+int point_inside_volume_objectinstance(Render *re, ObjectInstanceRen *obi, float *co);
+
void volume_precache(Render *re);
void free_volume_precache(Render *re);
-int point_inside_volume_objectinstance(Render *re, ObjectInstanceRen *obi, float *co);
#define VOL_MS_TIMESTEP 0.1f
diff --git a/source/blender/render/intern/raytrace/Makefile b/source/blender/render/intern/raytrace/Makefile
index c136f945ca5..2da8038c610 100644
--- a/source/blender/render/intern/raytrace/Makefile
+++ b/source/blender/render/intern/raytrace/Makefile
@@ -63,3 +63,7 @@ endif
ifeq ($(WITH_OPENEXR),true)
CPPFLAGS += -DWITH_OPENEXR
endif
+
+ifeq ($(WITH_BF_RAYOPTIMIZATION), true)
+ CPPFLAGS += -D__SSE__
+endif
diff --git a/source/blender/render/intern/raytrace/bvh.h b/source/blender/render/intern/raytrace/bvh.h
index e3efb90ec04..133a3d4a005 100644
--- a/source/blender/render/intern/raytrace/bvh.h
+++ b/source/blender/render/intern/raytrace/bvh.h
@@ -28,7 +28,6 @@
*/
#include "rayobject.h"
#include "raycounter.h"
-#include "MEM_guardedalloc.h"
#include "rayobject_rtbuild.h"
#include "rayobject_hint.h"
diff --git a/source/blender/render/intern/raytrace/rayobject_qbvh.cpp b/source/blender/render/intern/raytrace/rayobject_qbvh.cpp
index afffdd44f1f..c510af540db 100644
--- a/source/blender/render/intern/raytrace/rayobject_qbvh.cpp
+++ b/source/blender/render/intern/raytrace/rayobject_qbvh.cpp
@@ -26,6 +26,7 @@
*
* ***** END GPL LICENSE BLOCK *****
*/
+#include "MEM_guardedalloc.h"
#include "vbvh.h"
#include "svbvh.h"
#include "reorganize.h"
diff --git a/source/blender/render/intern/raytrace/rayobject_svbvh.cpp b/source/blender/render/intern/raytrace/rayobject_svbvh.cpp
index 389512ce469..647c5771e4f 100644
--- a/source/blender/render/intern/raytrace/rayobject_svbvh.cpp
+++ b/source/blender/render/intern/raytrace/rayobject_svbvh.cpp
@@ -26,6 +26,8 @@
*
* ***** END GPL LICENSE BLOCK *****
*/
+#include "MEM_guardedalloc.h"
+
#include "vbvh.h"
#include "svbvh.h"
#include "reorganize.h"
diff --git a/source/blender/render/intern/raytrace/reorganize.h b/source/blender/render/intern/raytrace/reorganize.h
index 34bbb0b6b84..f4cd3a4330d 100644
--- a/source/blender/render/intern/raytrace/reorganize.h
+++ b/source/blender/render/intern/raytrace/reorganize.h
@@ -269,7 +269,7 @@ void pushdown(Node *parent)
/*
* BVH refit
- * reajust nodes BB (useful if nodes childs where modified)
+ * readjust nodes BB (useful if nodes childs where modified)
*/
template<class Node>
float bvh_refit(Node *node)
@@ -295,7 +295,7 @@ float bvh_refit(Node *node)
/*
- * this finds the best way to packing a tree acording to a given test cost function
+ * this finds the best way to packing a tree according to a given test cost function
* with the purpose to reduce the expected cost (eg.: number of BB tests).
*/
#include <vector>
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c
index a87518bd668..7c7f48e9fb1 100644
--- a/source/blender/render/intern/source/convertblender.c
+++ b/source/blender/render/intern/source/convertblender.c
@@ -356,17 +356,6 @@ static void split_v_renderfaces(ObjectRen *obr, int startvlak, int startvert, in
}
/* ------------------------------------------------------------------------- */
-
-static int check_vnormal(float *n, float *veno)
-{
- float inp;
-
- inp=n[0]*veno[0]+n[1]*veno[1]+n[2]*veno[2];
- if(inp < -FLT_EPSILON10) return 1;
- return 0;
-}
-
-/* ------------------------------------------------------------------------- */
/* Stress, tangents and normals */
/* ------------------------------------------------------------------------- */
@@ -536,9 +525,6 @@ static void calc_vertexnormals(Render *re, ObjectRen *obr, int do_tangent, int d
float n1[3], n2[3], n3[3], n4[3];
float fac1, fac2, fac3, fac4=0.0f;
- if(re->flag & R_GLOB_NOPUNOFLIP)
- vlr->flag |= R_NOPUNOFLIP;
-
sub_v3_v3v3(n1, v2->co, v1->co);
normalize_v3(n1);
sub_v3_v3v3(n2, v3->co, v2->co);
@@ -562,21 +548,11 @@ static void calc_vertexnormals(Render *re, ObjectRen *obr, int do_tangent, int d
fac3= saacos(-n2[0]*n3[0]-n2[1]*n3[1]-n2[2]*n3[2]);
fac4= saacos(-n3[0]*n4[0]-n3[1]*n4[1]-n3[2]*n4[2]);
- if(!(vlr->flag & R_NOPUNOFLIP)) {
- if( check_vnormal(vlr->n, v4->n) ) fac4= -fac4;
- }
-
v4->n[0] +=fac4*vlr->n[0];
v4->n[1] +=fac4*vlr->n[1];
v4->n[2] +=fac4*vlr->n[2];
}
- if(!(vlr->flag & R_NOPUNOFLIP)) {
- if( check_vnormal(vlr->n, v1->n) ) fac1= -fac1;
- if( check_vnormal(vlr->n, v2->n) ) fac2= -fac2;
- if( check_vnormal(vlr->n, v3->n) ) fac3= -fac3;
- }
-
v1->n[0] +=fac1*vlr->n[0];
v1->n[1] +=fac1*vlr->n[1];
v1->n[2] +=fac1*vlr->n[2];
@@ -1021,7 +997,7 @@ static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, Par
else width= 1.0f;
if(ma->mode & MA_TANGENT_STR)
- flag= R_SMOOTH|R_NOPUNOFLIP|R_TANGENT;
+ flag= R_SMOOTH|R_TANGENT;
else
flag= R_SMOOTH;
@@ -1550,9 +1526,12 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem
if(part->phystype==PART_PHYS_KEYED)
psys_count_keyed_targets(&sim);
- psys_update_children(&sim);
totchild=psys->totchild;
+ /* can happen for disconnected/global hair */
+ if(part->type==PART_HAIR && !psys->childcache)
+ totchild= 0;
+
if(G.rendering == 0) { /* preview render */
totchild = (int)((float)totchild * (float)part->disp / 100.0f);
}
@@ -1655,9 +1634,6 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem
transpose_m3(nmat);
/* 2.6 setup strand rendering */
- if(part->ren_as == PART_DRAW_PATH && psys->pathcache==NULL)
- psys_update_path_cache(&sim, cfra);
-
if(part->ren_as == PART_DRAW_PATH && psys->pathcache){
path_nbr=(int)pow(2.0,(double) part->ren_step);
@@ -2435,7 +2411,7 @@ static void init_render_mball(Render *re, ObjectRen *obr)
normal_tri_v3( vlr->n,vlr->v3->co, vlr->v2->co, vlr->v1->co);
vlr->mat= ma;
- vlr->flag= ME_SMOOTH+R_NOPUNOFLIP;
+ vlr->flag= ME_SMOOTH;
vlr->ec= 0;
/* mball -too bad- always has triangles, because quads can be non-planar */
@@ -2464,10 +2440,8 @@ static void init_render_mball(Render *re, ObjectRen *obr)
/* returns amount of vertices added for orco */
static int dl_surf_to_renderdata(ObjectRen *obr, DispList *dl, Material **matar, float *orco, float mat[4][4])
{
- Object *ob= obr->ob;
VertRen *v1, *v2, *v3, *v4, *ver;
VlakRen *vlr, *vlr1, *vlr2, *vlr3;
- Curve *cu= ob->data;
float *data, n1[3];
int u, v, orcoret= 0;
int p1, p2, p3, p4, a;
@@ -2547,9 +2521,6 @@ static int dl_surf_to_renderdata(ObjectRen *obr, DispList *dl, Material **matar,
vlr->mat= matar[ dl->col];
vlr->ec= ME_V1V2+ME_V2V3;
vlr->flag= dl->rt;
- if( (cu->flag & CU_NOPUNOFLIP) ) {
- vlr->flag |= R_NOPUNOFLIP;
- }
add_v3_v3(v1->n, n1);
add_v3_v3(v2->n, n1);
@@ -2698,9 +2669,6 @@ static void init_render_dm(DerivedMesh *dm, Render *re, ObjectRen *obr,
vlr->mat= ma;
vlr->flag= flag;
- if(cu &&(cu->flag & ME_NOPUNOFLIP)) {
- vlr->flag |= R_NOPUNOFLIP;
- }
vlr->ec= 0; /* mesh edges rendered separately */
if(len==0) obr->totvlak--;
@@ -2852,7 +2820,10 @@ static void init_render_curve(Render *re, ObjectRen *obr, int timeoffset)
}
while(dl) {
- if(dl->type==DL_INDEX3) {
+ if(dl->col > ob->totcol) {
+ /* pass */
+ }
+ else if(dl->type==DL_INDEX3) {
int *index;
startvert= obr->totvert;
@@ -2905,9 +2876,6 @@ static void init_render_curve(Render *re, ObjectRen *obr, int timeoffset)
vlr->mat= matar[ dl->col ];
vlr->flag= 0;
- if( (cu->flag & CU_NOPUNOFLIP) ) {
- vlr->flag |= R_NOPUNOFLIP;
- }
vlr->ec= 0;
}
}
@@ -3392,9 +3360,6 @@ static void init_render_mesh(Render *re, ObjectRen *obr, int timeoffset)
vlr->mat= ma;
vlr->flag= flag;
- if((me->flag & ME_NOPUNOFLIP) ) {
- vlr->flag |= R_NOPUNOFLIP;
- }
vlr->ec= 0; /* mesh edges rendered separately */
if(len==0) obr->totvlak--;
@@ -3894,12 +3859,12 @@ static void set_material_lightgroups(Render *re)
if(re->scene->r.scemode & R_PREVIEWBUTS)
return;
- for(group= G.main->group.first; group; group=group->id.next)
+ for(group= re->main->group.first; group; group=group->id.next)
group->id.flag |= LIB_DOIT;
/* it's a bit too many loops in loops... but will survive */
/* hola! materials not in use...? */
- for(ma= G.main->mat.first; ma; ma=ma->id.next) {
+ for(ma= re->main->mat.first; ma; ma=ma->id.next) {
if(ma->group && (ma->group->id.flag & LIB_DOIT))
add_lightgroup(re, ma->group, ma->mode & MA_GROUP_NOLAY);
}
@@ -4581,8 +4546,8 @@ void RE_Database_Free(Render *re)
#if 0 /* radio can be redone better */
end_radio_render();
#endif
- end_render_materials();
- end_render_textures();
+ end_render_materials(re->main);
+ end_render_textures(re);
free_pointdensities(re);
@@ -4907,7 +4872,7 @@ static void database_init_objects(Render *re, unsigned int renderlay, int nolamp
/* objects in groups with OB_RENDER_DUPLI set still need to be created,
* since they may not be part of the scene */
- for(group= G.main->group.first; group; group=group->id.next)
+ for(group= re->main->group.first; group; group=group->id.next)
add_group_render_dupli_obs(re, group, nolamps, onlyselected, actob, timeoffset, renderlay, 0);
/* imat objects has to be done again, since groups can mess it up */
@@ -4924,13 +4889,14 @@ static void database_init_objects(Render *re, unsigned int renderlay, int nolamp
}
/* used to be 'rotate scene' */
-void RE_Database_FromScene(Render *re, Scene *scene, unsigned int lay, int use_camera_view)
+void RE_Database_FromScene(Render *re, Main *bmain, Scene *scene, unsigned int lay, int use_camera_view)
{
extern int slurph_opt; /* key.c */
Scene *sce;
float mat[4][4];
float amb[3];
+ re->main= bmain;
re->scene= scene;
re->lay= lay;
@@ -4955,7 +4921,7 @@ void RE_Database_FromScene(Render *re, Scene *scene, unsigned int lay, int use_c
/* applies changes fully */
if((re->r.scemode & R_PREVIEWBUTS)==0)
- scene_update_for_newframe(re->scene, lay);
+ scene_update_for_newframe(re->main, re->scene, lay);
/* if no camera, viewmat should have been set! */
if(use_camera_view && re->scene->camera) {
@@ -4982,7 +4948,7 @@ void RE_Database_FromScene(Render *re, Scene *scene, unsigned int lay, int use_c
/* still bad... doing all */
init_render_textures(re);
VECCOPY(amb, &re->wrld.ambr);
- init_render_materials(re->r.mode, amb);
+ init_render_materials(re->main, re->r.mode, amb);
set_node_shader_lamp_loop(shade_material_loop);
/* MAKE RENDER DATA */
@@ -5109,7 +5075,7 @@ static void database_fromscene_vectors(Render *re, Scene *scene, unsigned int la
/* applies changes fully */
scene->r.cfra += timeoffset;
- scene_update_for_newframe(re->scene, lay);
+ scene_update_for_newframe(re->main, re->scene, lay);
/* if no camera, viewmat should have been set! */
if(re->scene->camera) {
@@ -5468,7 +5434,7 @@ static void free_dbase_object_vectors(ListBase *lb)
BLI_freelistN(lb);
}
-void RE_Database_FromScene_Vectors(Render *re, Scene *sce, unsigned int lay)
+void RE_Database_FromScene_Vectors(Render *re, Main *bmain, Scene *sce, unsigned int lay)
{
ObjectInstanceRen *obi, *oldobi;
StrandSurface *mesh;
@@ -5510,7 +5476,7 @@ void RE_Database_FromScene_Vectors(Render *re, Scene *sce, unsigned int lay)
re->strandsurface= strandsurface;
if(!re->test_break(re->tbh))
- RE_Database_FromScene(re, sce, lay, 1);
+ RE_Database_FromScene(re, bmain, sce, lay, 1);
if(!re->test_break(re->tbh)) {
for(step= 0; step<2; step++) {
@@ -5599,12 +5565,13 @@ void RE_Database_FromScene_Vectors(Render *re, Scene *sce, unsigned int lay)
RE_BAKE_DISPLACEMENT:for baking, no lamps, only selected objects
RE_BAKE_SHADOW: for baking, only shadows, but all objects
*/
-void RE_Database_Baking(Render *re, Scene *scene, unsigned int lay, int type, Object *actob)
+void RE_Database_Baking(Render *re, Main *bmain, Scene *scene, unsigned int lay, int type, Object *actob)
{
float mat[4][4];
float amb[3];
int onlyselected, nolamps;
+ re->main= bmain;
re->scene= scene;
re->lay= lay;
@@ -5613,7 +5580,6 @@ void RE_Database_Baking(Render *re, Scene *scene, unsigned int lay, int type, Ob
RE_init_threadcount(re);
- re->flag |= R_GLOB_NOPUNOFLIP;
re->flag |= R_BAKING;
re->excludeob= actob;
if(actob)
@@ -5666,7 +5632,7 @@ void RE_Database_Baking(Render *re, Scene *scene, unsigned int lay, int type, Ob
init_render_textures(re);
VECCOPY(amb, &re->wrld.ambr);
- init_render_materials(re->r.mode, amb);
+ init_render_materials(re->main, re->r.mode, amb);
set_node_shader_lamp_loop(shade_material_loop);
diff --git a/source/blender/render/intern/source/envmap.c b/source/blender/render/intern/source/envmap.c
index 1accb0fdb60..8977bc7f379 100644
--- a/source/blender/render/intern/source/envmap.c
+++ b/source/blender/render/intern/source/envmap.c
@@ -46,7 +46,6 @@
#include "BKE_library.h"
#include "BKE_main.h"
-#include "BKE_global.h"
#include "BKE_image.h" // BKE_write_ibuf
#include "BKE_texture.h"
#include "BKE_utildefines.h"
@@ -508,7 +507,7 @@ void make_envmaps(Render *re)
/* 5 = hardcoded max recursion level */
while(depth<5) {
- tex= G.main->tex.first;
+ tex= re->main->tex.first;
while(tex) {
if(tex->id.us && tex->type==TEX_ENVMAP) {
if(tex->env && tex->env->object) {
diff --git a/source/blender/render/intern/source/gammaCorrectionTables.c b/source/blender/render/intern/source/gammaCorrectionTables.c
index d88638f423c..818c3c72118 100644
--- a/source/blender/render/intern/source/gammaCorrectionTables.c
+++ b/source/blender/render/intern/source/gammaCorrectionTables.c
@@ -117,7 +117,7 @@ void makeGammaTables(float gamma)
/* The end of the table should match 1.0 carefully. In order to avoid */
/* rounding errors, we just set this explicitly. The last segment may */
- /* have a different lenght than the other segments, but our */
+ /* have a different length than the other segments, but our */
/* interpolation is insensitive to that. */
color_domain_table[RE_GAMMA_TABLE_SIZE] = 1.0;
gamma_range_table[RE_GAMMA_TABLE_SIZE] = 1.0;
diff --git a/source/blender/render/intern/source/occlusion.c b/source/blender/render/intern/source/occlusion.c
index ff718359a3e..fb69519236a 100644
--- a/source/blender/render/intern/source/occlusion.c
+++ b/source/blender/render/intern/source/occlusion.c
@@ -1390,8 +1390,7 @@ static void sample_occ_tree(Render *re, OcclusionTree *tree, OccFace *exclude, f
if(onlyshadow)
envcolor= WO_AOPLAIN;
- VECCOPY(nn, n);
- negate_v3(nn);
+ negate_v3_v3(nn, n);
occ_lookup(tree, thread, exclude, co, nn, &occ, (tree->doindirect)? rad: NULL, (env && envcolor)? bn: NULL);
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index fd91bf8a2c2..502bd09c2de 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -39,6 +39,8 @@
#include "DNA_sequence_types.h"
#include "DNA_userdef_types.h"
+#include "MEM_guardedalloc.h"
+
#include "BKE_utildefines.h"
#include "BKE_global.h"
#include "BKE_image.h"
@@ -52,8 +54,6 @@
#include "BKE_pointcache.h"
#include "BKE_animsys.h" /* <------ should this be here?, needed for sequencer update */
-#include "MEM_guardedalloc.h"
-
#include "BLI_math.h"
#include "BLI_blenlib.h"
#include "BLI_rand.h"
@@ -1768,9 +1768,9 @@ static void do_render_3d(Render *re)
/* make render verts/faces/halos/lamps */
if(render_scene_needs_vector(re))
- RE_Database_FromScene_Vectors(re, re->scene, re->lay);
+ RE_Database_FromScene_Vectors(re, re->main, re->scene, re->lay);
else
- RE_Database_FromScene(re, re->scene, re->lay, 1);
+ RE_Database_FromScene(re, re->main, re->scene, re->lay, 1);
threaded_tile_processor(re);
@@ -2142,11 +2142,12 @@ static void render_scene(Render *re, Scene *sce, int cfra)
RE_InitState(resc, re, &sce->r, NULL, winx, winy, &re->disprect);
/* still unsure entity this... */
+ resc->main= re->main;
resc->scene= sce;
resc->lay= sce->lay;
/* ensure scene has depsgraph, base flags etc OK */
- set_scene_bg(sce);
+ set_scene_bg(re->main, sce);
/* copy callbacks */
resc->display_draw= re->display_draw;
@@ -2164,7 +2165,7 @@ static void tag_scenes_for_render(Render *re)
bNode *node;
Scene *sce;
- for(sce= G.main->scene.first; sce; sce= sce->id.next)
+ for(sce= re->main->scene.first; sce; sce= sce->id.next)
sce->id.flag &= ~LIB_DOIT;
re->scene->id.flag |= LIB_DOIT;
@@ -2319,7 +2320,7 @@ void RE_MergeFullSample(Render *re, Scene *sce, bNodeTree *ntree)
/* first call RE_ReadRenderResult on every renderlayer scene. this creates Render structs */
/* tag scenes unread */
- for(scene= G.main->scene.first; scene; scene= scene->id.next)
+ for(scene= re->main->scene.first; scene; scene= scene->id.next)
scene->id.flag |= LIB_DOIT;
for(node= ntree->nodes.first; node; node= node->next) {
@@ -2394,7 +2395,7 @@ static void do_render_composite_fields_blur_3d(Render *re)
R.stats_draw= re->stats_draw;
if (update_newframe)
- scene_update_for_newframe(re->scene, re->lay);
+ scene_update_for_newframe(re->main, re->scene, re->lay);
if(re->r.scemode & R_FULL_SAMPLE)
do_merge_fullsample(re, ntree);
@@ -2453,14 +2454,16 @@ static void do_render_seq(Render * re)
RenderResult *rr = re->result;
int cfra = re->r.cfra;
+ re->i.cfra= cfra;
+
if(recurs_depth==0) {
/* otherwise sequencer animation isnt updated */
- BKE_animsys_evaluate_all_animation(G.main, (float)cfra); // XXX, was BKE_curframe(re->scene)
+ BKE_animsys_evaluate_all_animation(re->main, (float)cfra); // XXX, was BKE_curframe(re->scene)
}
recurs_depth++;
- ibuf= give_ibuf_seq(re->scene, rr->rectx, rr->recty, cfra, 0, 100.0);
+ ibuf= give_ibuf_seq(re->main, re->scene, rr->rectx, rr->recty, cfra, 0, 100.0);
recurs_depth--;
@@ -2508,9 +2511,10 @@ static void do_render_seq(Render * re)
if (recurs_depth == 0) { /* with nested scenes, only free on toplevel... */
Editing * ed = re->scene->ed;
if (ed) {
- free_imbuf_seq(re->scene, &ed->seqbase, TRUE);
+ free_imbuf_seq(re->scene, &ed->seqbase, TRUE, TRUE);
}
}
+ IMB_freeImBuf(ibuf);
}
else {
/* render result is delivered empty in most cases, nevertheless we handle all cases */
@@ -2676,6 +2680,7 @@ static void update_physics_cache(Render *re, Scene *scene, int anim_init)
{
PTCacheBaker baker;
+ baker.main = re->main;
baker.scene = scene;
baker.pid = NULL;
baker.bake = 0;
@@ -2689,7 +2694,7 @@ static void update_physics_cache(Render *re, Scene *scene, int anim_init)
BKE_ptcache_make_cache(&baker);
}
/* evaluating scene options for general Blender render */
-static int render_initialize_from_scene(Render *re, Scene *scene, SceneRenderLayer *srl, unsigned int lay, int anim, int anim_init)
+static int render_initialize_from_main(Render *re, Main *bmain, Scene *scene, SceneRenderLayer *srl, unsigned int lay, int anim, int anim_init)
{
int winx, winy;
rcti disprect;
@@ -2715,6 +2720,7 @@ static int render_initialize_from_scene(Render *re, Scene *scene, SceneRenderLay
disprect.ymax= winy;
}
+ re->main= bmain;
re->scene= scene;
re->lay= lay;
@@ -2757,14 +2763,14 @@ static int render_initialize_from_scene(Render *re, Scene *scene, SceneRenderLay
}
/* general Blender frame render call */
-void RE_BlenderFrame(Render *re, Scene *scene, SceneRenderLayer *srl, unsigned int lay, int frame)
+void RE_BlenderFrame(Render *re, Main *bmain, Scene *scene, SceneRenderLayer *srl, unsigned int lay, int frame)
{
/* ugly global still... is to prevent preview events and signal subsurfs etc to make full resol */
G.rendering= 1;
scene->r.cfra= frame;
- if(render_initialize_from_scene(re, scene, srl, lay, 0, 0)) {
+ if(render_initialize_from_main(re, bmain, scene, srl, lay, 0, 0)) {
MEM_reset_peak_memory();
do_render_all_options(re);
}
@@ -2860,14 +2866,14 @@ static int do_write_image_or_movie(Render *re, Scene *scene, bMovieHandle *mh, R
}
/* saves images to disk */
-void RE_BlenderAnim(Render *re, Scene *scene, unsigned int lay, int sfra, int efra, int tfra, ReportList *reports)
+void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, unsigned int lay, int sfra, int efra, int tfra, ReportList *reports)
{
bMovieHandle *mh= BKE_get_movie_handle(scene->r.imtype);
int cfrao= scene->r.cfra;
int nfra;
/* do not fully call for each frame, it initializes & pops output window */
- if(!render_initialize_from_scene(re, scene, NULL, lay, 0, 1))
+ if(!render_initialize_from_main(re, bmain, scene, NULL, lay, 0, 1))
return;
/* ugly global still... is to prevent renderwin events and signal subsurfs etc to make full resol */
@@ -2900,7 +2906,7 @@ void RE_BlenderAnim(Render *re, Scene *scene, unsigned int lay, int sfra, int ef
char name[FILE_MAX];
/* only border now, todo: camera lens. (ton) */
- render_initialize_from_scene(re, scene, NULL, lay, 1, 0);
+ render_initialize_from_main(re, bmain, scene, NULL, lay, 1, 0);
if(nfra!=scene->r.cfra) {
/*
@@ -2915,7 +2921,7 @@ void RE_BlenderAnim(Render *re, Scene *scene, unsigned int lay, int sfra, int ef
else
updatelay= re->lay;
- scene_update_for_newframe(scene, updatelay);
+ scene_update_for_newframe(bmain, scene, updatelay);
continue;
}
else
@@ -2971,7 +2977,7 @@ void RE_BlenderAnim(Render *re, Scene *scene, unsigned int lay, int sfra, int ef
G.rendering= 0;
}
-void RE_PreviewRender(Render *re, Scene *sce)
+void RE_PreviewRender(Render *re, Main *bmain, Scene *sce)
{
int winx, winy;
@@ -2980,6 +2986,7 @@ void RE_PreviewRender(Render *re, Scene *sce)
RE_InitState(re, NULL, &sce->r, NULL, winx, winy, NULL);
+ re->main = bmain;
re->scene = sce;
re->lay = sce->lay;
diff --git a/source/blender/render/intern/source/pointdensity.c b/source/blender/render/intern/source/pointdensity.c
index 4f23df3c18c..67f1fee4f41 100644
--- a/source/blender/render/intern/source/pointdensity.c
+++ b/source/blender/render/intern/source/pointdensity.c
@@ -226,6 +226,9 @@ static void pointdensity_cache_object(Render *re, PointDensity *pd, Object *ob)
static void cache_pointdensity(Render *re, Tex *tex)
{
PointDensity *pd = tex->pd;
+
+ if(!pd)
+ return;
if (pd->point_tree) {
BLI_bvhtree_free(pd->point_tree);
@@ -279,7 +282,7 @@ void make_pointdensities(Render *re)
re->i.infostr= "Caching Point Densities";
re->stats_draw(re->sdh, &re->i);
- for (tex= G.main->tex.first; tex; tex= tex->id.next) {
+ for (tex= re->main->tex.first; tex; tex= tex->id.next) {
if(tex->id.us && tex->type==TEX_POINTDENSITY) {
cache_pointdensity(re, tex);
}
@@ -296,7 +299,7 @@ void free_pointdensities(Render *re)
if(re->scene->r.scemode & R_PREVIEWBUTS)
return;
- for (tex= G.main->tex.first; tex; tex= tex->id.next) {
+ for (tex= re->main->tex.first; tex; tex= tex->id.next) {
if(tex->id.us && tex->type==TEX_POINTDENSITY) {
free_pointdensity(re, tex);
}
diff --git a/source/blender/render/intern/source/rayshade.c b/source/blender/render/intern/source/rayshade.c
index ed52f37fcfa..724fd9a3110 100644
--- a/source/blender/render/intern/source/rayshade.c
+++ b/source/blender/render/intern/source/rayshade.c
@@ -531,10 +531,6 @@ void shade_ray(Isect *is, ShadeInput *shi, ShadeResult *shr)
shade_input_set_normals(shi);
- /* point normals to viewing direction */
- if(INPR(shi->facenor, shi->view) < 0.0f)
- shade_input_flip_normals(shi);
-
shade_input_set_shade_texco(shi);
if (shi->mat->material_type == MA_TYPE_VOLUME) {
if(ELEM(is->mode, RE_RAY_SHADOW, RE_RAY_SHADOW_TRA)) {
@@ -558,19 +554,9 @@ void shade_ray(Isect *is, ShadeInput *shi, ShadeResult *shr)
shi->mat= vlr->mat; /* shi->mat is being set in nodetree */
}
else {
- int tempdepth;
- /* XXX dodgy business here, set ray depth to -1
- * to ignore raytrace in shade_material_loop()
- * this could really use a refactor --Matt */
- if (shi->volume_depth == 0) {
- tempdepth = shi->depth;
- shi->depth = -1;
- shade_material_loop(shi, shr);
- shi->depth = tempdepth;
- } else {
- shade_material_loop(shi, shr);
- }
+ shade_material_loop(shi, shr);
}
+
/* raytrace likes to separate the spec color */
VECSUB(shr->diff, shr->combined, shr->spec);
}
diff --git a/source/blender/render/intern/source/renderdatabase.c b/source/blender/render/intern/source/renderdatabase.c
index 2bfc8f6c1ef..ce55935d392 100644
--- a/source/blender/render/intern/source/renderdatabase.c
+++ b/source/blender/render/intern/source/renderdatabase.c
@@ -440,10 +440,9 @@ VlakRen *RE_vlakren_copy(ObjectRen *obr, VlakRen *vlr)
return vlr1;
}
-int RE_vlakren_get_normal(Render *re, ObjectInstanceRen *obi, VlakRen *vlr, float *nor)
+void RE_vlakren_get_normal(Render *re, ObjectInstanceRen *obi, VlakRen *vlr, float *nor)
{
- float v1[3], (*nmat)[3]= obi->nmat;
- int flipped= 0;
+ float (*nmat)[3]= obi->nmat;
if(obi->flag & R_TRANSFORMED) {
VECCOPY(nor, vlr->n);
@@ -453,29 +452,6 @@ int RE_vlakren_get_normal(Render *re, ObjectInstanceRen *obi, VlakRen *vlr, floa
}
else
VECCOPY(nor, vlr->n);
-
- if((vlr->flag & R_NOPUNOFLIP)==0) {
- if(re->r.mode & R_ORTHO) {
- if(nor[2] > 0.0f)
- flipped= 1;
- }
- else {
- VECCOPY(v1, vlr->v1->co);
- if(obi->flag & R_TRANSFORMED)
- mul_m4_v3(obi->mat, v1);
- if(INPR(v1, nor) < 0.0f) {
- flipped= 1;
- }
- }
-
- if(flipped) {
- nor[0]= -nor[0];
- nor[1]= -nor[1];
- nor[2]= -nor[2];
- }
- }
-
- return flipped;
}
void RE_set_customdata_names(ObjectRen *obr, CustomData *data)
diff --git a/source/blender/render/intern/source/shadeinput.c b/source/blender/render/intern/source/shadeinput.c
index 5938e2ce2e0..56ab56d0411 100644
--- a/source/blender/render/intern/source/shadeinput.c
+++ b/source/blender/render/intern/source/shadeinput.c
@@ -130,7 +130,7 @@ void shade_material_loop(ShadeInput *shi, ShadeResult *shr)
}
/* depth >= 1 when ray-shading */
- if(shi->depth==0) {
+ if(shi->depth==0 || shi->volume_depth > 0) {
if(R.r.mode & R_RAYTRACE) {
if(shi->ray_mirror!=0.0f || ((shi->mat->mode & MA_TRANSP) && (shi->mat->mode & MA_RAYTRANSP) && shr->alpha!=1.0f)) {
/* ray trace works on combined, but gives pass info */
@@ -142,11 +142,6 @@ void shade_material_loop(ShadeInput *shi, ShadeResult *shr)
if((shi->layflag & SCE_LAY_SKY) && (R.r.alphamode==R_ADDSKY))
shr->alpha= 1.0f;
}
-
- if(R.r.mode & R_RAYTRACE) {
- if (R.render_volumes_inside.first)
- shade_volume_inside(shi, shr);
- }
}
@@ -168,8 +163,12 @@ void shade_input_do_shade(ShadeInput *shi, ShadeResult *shr)
shade_input_init_material(shi);
if (shi->mat->material_type == MA_TYPE_VOLUME) {
- if(R.r.mode & R_RAYTRACE)
- shade_volume_outside(shi, shr);
+ if(R.r.mode & R_RAYTRACE) {
+ if (R.render_volumes_inside.first)
+ shade_volume_inside(shi, shr);
+ else
+ shade_volume_outside(shi, shr);
+ }
} else { /* MA_TYPE_SURFACE, MA_TYPE_WIRE */
shade_material_loop(shi, shr);
}
@@ -274,7 +273,8 @@ void shade_input_set_triangle_i(ShadeInput *shi, ObjectInstanceRen *obi, VlakRen
shi->mode= shi->mat->mode_l; /* or-ed result for all nodes */
/* facenormal copy, can get flipped */
- shi->flippednor= RE_vlakren_get_normal(&R, obi, vlr, shi->facenor);
+ shi->flippednor= 0;
+ RE_vlakren_get_normal(&R, obi, vlr, shi->facenor);
/* calculate vertexnormals */
if(vlr->flag & R_SMOOTH) {
@@ -287,24 +287,6 @@ void shade_input_set_triangle_i(ShadeInput *shi, ObjectInstanceRen *obi, VlakRen
mul_m3_v3(obi->nmat, shi->n2);
mul_m3_v3(obi->nmat, shi->n3);
}
-
- if(!(vlr->flag & (R_NOPUNOFLIP|R_TANGENT))) {
- if(INPR(shi->facenor, shi->n1) < 0.0f) {
- shi->n1[0]= -shi->n1[0];
- shi->n1[1]= -shi->n1[1];
- shi->n1[2]= -shi->n1[2];
- }
- if(INPR(shi->facenor, shi->n2) < 0.0f) {
- shi->n2[0]= -shi->n2[0];
- shi->n2[1]= -shi->n2[1];
- shi->n2[2]= -shi->n2[2];
- }
- if(INPR(shi->facenor, shi->n3) < 0.0f) {
- shi->n3[0]= -shi->n3[0];
- shi->n3[1]= -shi->n3[1];
- shi->n3[2]= -shi->n3[2];
- }
- }
}
}
@@ -827,6 +809,10 @@ void shade_input_set_normals(ShadeInput *shi)
/* used in nodes */
VECCOPY(shi->vno, shi->vn);
+ /* flip normals to viewing direction */
+ if(!(shi->vlr->flag & R_TANGENT))
+ if(dot_v3v3(shi->facenor, shi->view) < 0.0f)
+ shade_input_flip_normals(shi);
}
/* use by raytrace, sss, bake to flip into the right direction */
diff --git a/source/blender/render/intern/source/shadeoutput.c b/source/blender/render/intern/source/shadeoutput.c
index 033a753bd62..245364b3bed 100644
--- a/source/blender/render/intern/source/shadeoutput.c
+++ b/source/blender/render/intern/source/shadeoutput.c
@@ -1625,7 +1625,7 @@ void shade_lamp_loop(ShadeInput *shi, ShadeResult *shr)
if(((passflag & SCE_PASS_COMBINED) && (shi->combinedflag & (SCE_PASS_AO|SCE_PASS_ENVIRONMENT|SCE_PASS_INDIRECT)))
|| (passflag & (SCE_PASS_AO|SCE_PASS_ENVIRONMENT|SCE_PASS_INDIRECT))) {
/* AO was calculated for scanline already */
- if(shi->depth)
+ if(shi->depth || shi->volume_depth)
ambient_occlusion(shi);
VECCOPY(shr->ao, shi->ao);
VECCOPY(shr->env, shi->env); // XXX multiply
diff --git a/source/blender/render/intern/source/sss.c b/source/blender/render/intern/source/sss.c
index aa285401524..e8c95a34ac4 100644
--- a/source/blender/render/intern/source/sss.c
+++ b/source/blender/render/intern/source/sss.c
@@ -56,7 +56,6 @@
#include "DNA_material_types.h"
#include "BKE_colortools.h"
-#include "BKE_global.h"
#include "BKE_main.h"
#include "BKE_material.h"
#include "BKE_node.h"
@@ -993,7 +992,7 @@ void make_sss_tree(Render *re)
re->i.infostr= "SSS preprocessing";
re->stats_draw(re->sdh, &re->i);
- for(mat= G.main->mat.first; mat; mat= mat->id.next)
+ for(mat= re->main->mat.first; mat; mat= mat->id.next)
if(mat->id.us && (mat->flag & MA_IS_USED) && (mat->sss_flag & MA_DIFF_SSS))
sss_create_tree_mat(re, mat);
}
diff --git a/source/blender/render/intern/source/texture.c b/source/blender/render/intern/source/texture.c
index e982c1a12a7..0e98069f884 100644
--- a/source/blender/render/intern/source/texture.c
+++ b/source/blender/render/intern/source/texture.c
@@ -131,7 +131,7 @@ void init_render_textures(Render *re)
{
Tex *tex;
- tex= G.main->tex.first;
+ tex= re->main->tex.first;
while(tex) {
if(tex->id.us) init_render_texture(re, tex);
tex= tex->id.next;
@@ -144,10 +144,10 @@ void end_render_texture(Tex *tex)
ntreeEndExecTree(tex->nodetree);
}
-void end_render_textures(void)
+void end_render_textures(Render *re)
{
Tex *tex;
- for(tex= G.main->tex.first; tex; tex= tex->id.next)
+ for(tex= re->main->tex.first; tex; tex= tex->id.next)
if(tex->id.us)
end_render_texture(tex);
}
@@ -1731,7 +1731,7 @@ void do_material_tex(ShadeInput *shi)
co= shi->tang; dx= shi->dxno; dy= shi->dyno;
}
else if(mtex->texco==TEXCO_GLOB) {
- co= shi->gl; dx= shi->dxco; dy= shi->dyco;
+ co= shi->gl; dx= shi->dxgl; dy= shi->dygl;
}
else if(mtex->texco==TEXCO_UV) {
if(mtex->texflag & MTEX_DUPLI_MAPTO) {
@@ -1762,7 +1762,7 @@ void do_material_tex(ShadeInput *shi)
// NOTE: test for shi->obr->ob here, since vlr/obr/obi can be 'fake' when called from fastshade(), another reason to move it..
// NOTE: shi->v1 is NULL when called from displace_render_vert, assigning verts in this case is not trivial because the shi quad face side is not know.
if ((mtex->texflag & MTEX_NEW_BUMP) && shi->obr && shi->obr->ob && shi->v1) {
- if(mtex->mapto & (MAP_NORM|MAP_DISPLACE|MAP_WARP) && !((tex->type==TEX_IMAGE) && (tex->imaflag & TEX_NORMALMAP))) {
+ if(mtex->mapto & (MAP_NORM|MAP_WARP) && !((tex->type==TEX_IMAGE) && (tex->imaflag & TEX_NORMALMAP))) {
MTFace* tf = RE_vlakren_get_tface(shi->obr, shi->vlr, i, NULL, 0);
int j1 = shi->i1, j2 = shi->i2, j3 = shi->i3;
@@ -1833,7 +1833,7 @@ void do_material_tex(ShadeInput *shi)
else continue; // can happen when texco defines disappear and it renders old files
/* the pointer defines if bumping happens */
- if(mtex->mapto & (MAP_NORM|MAP_DISPLACE|MAP_WARP)) {
+ if(mtex->mapto & (MAP_NORM|MAP_WARP)) {
texres.nor= norvec;
norvec[0]= norvec[1]= norvec[2]= 0.0;
}
@@ -2219,8 +2219,7 @@ void do_material_tex(ShadeInput *shi)
}
if(rgbnor & TEX_RGB) {
- if(texres.talpha) texres.tin= texres.ta;
- else texres.tin= (0.35f*texres.tr+0.45f*texres.tg+0.2f*texres.tb);
+ texres.tin= (0.35f*texres.tr+0.45f*texres.tg+0.2f*texres.tb);
}
factt= (0.5f-texres.tin)*mtex->dispfac*stencilTin; facmm= 1.0f-factt;
@@ -2510,6 +2509,7 @@ void do_halo_tex(HaloRen *har, float xn, float yn, float *colf)
if (R.r.scemode & R_NO_TEX) return;
mtex= har->mat->mtex[0];
+ if(har->mat->septex & (1<<0)) return;
if(mtex->tex==NULL) return;
/* no normal mapping */
@@ -2882,6 +2882,9 @@ void do_lamp_tex(LampRen *la, float *lavec, ShadeInput *shi, float *colf, int ef
if(la->type==LA_SPOT) {
tempvec[0]*= la->spottexfac;
tempvec[1]*= la->spottexfac;
+ /* project from 3d to 2d */
+ tempvec[0] /= -tempvec[2];
+ tempvec[1] /= -tempvec[2];
}
co= tempvec;
diff --git a/source/blender/render/intern/source/volume_precache.c b/source/blender/render/intern/source/volume_precache.c
index 0af05c3cdee..d3e8f4058c5 100644
--- a/source/blender/render/intern/source/volume_precache.c
+++ b/source/blender/render/intern/source/volume_precache.c
@@ -115,6 +115,47 @@ int point_inside_obi(RayObject *tree, ObjectInstanceRen *obi, float *co)
else return 1;
}
+/* find the bounding box of an objectinstance in global space */
+void global_bounds_obi(Render *re, ObjectInstanceRen *obi, float *bbmin, float *bbmax)
+{
+ ObjectRen *obr = obi->obr;
+ VolumePrecache *vp = obi->volume_precache;
+ VertRen *ver= NULL;
+ float co[3];
+ int a;
+
+ if (vp->bbmin != NULL && vp->bbmax != NULL) {
+ copy_v3_v3(bbmin, vp->bbmin);
+ copy_v3_v3(bbmax, vp->bbmax);
+ return;
+ }
+
+ vp->bbmin = MEM_callocN(sizeof(float)*3, "volume precache min boundbox corner");
+ vp->bbmax = MEM_callocN(sizeof(float)*3, "volume precache max boundbox corner");
+
+ INIT_MINMAX(bbmin, bbmax);
+
+ for(a=0; a<obr->totvert; a++) {
+ if((a & 255)==0) ver= obr->vertnodes[a>>8].vert;
+ else ver++;
+
+ copy_v3_v3(co, ver->co);
+
+ /* transformed object instance in camera space */
+ if(obi->flag & R_TRANSFORMED)
+ mul_m4_v3(obi->mat, co);
+
+ /* convert to global space */
+ mul_m4_v3(re->viewinv, co);
+
+ DO_MINMAX(co, vp->bbmin, vp->bbmax);
+ }
+
+ copy_v3_v3(bbmin, vp->bbmin);
+ copy_v3_v3(bbmax, vp->bbmax);
+
+}
+
/* *** light cache filtering *** */
static float get_avg_surrounds(float *cache, int *res, int xx, int yy, int zz)
@@ -443,7 +484,7 @@ static void *vol_precache_part(void *data)
RayObject *tree = pa->tree;
ShadeInput *shi = pa->shi;
float scatter_col[3] = {0.f, 0.f, 0.f};
- float co[3];
+ float co[3], cco[3];
int x, y, z, i;
const int res[3]= {pa->res[0], pa->res[1], pa->res[2]};
@@ -455,24 +496,29 @@ static void *vol_precache_part(void *data)
for (x=pa->minx; x < pa->maxx; x++) {
co[0] = pa->bbmin[0] + (pa->voxel[0] * (x + 0.5f));
-
+
+ /* convert from world->camera space for shading */
+ mul_v3_m4v3(cco, pa->viewmat, co);
+
i= V_I(x, y, z, res);
// don't bother if the point is not inside the volume mesh
- if (!point_inside_obi(tree, obi, co)) {
+ if (!point_inside_obi(tree, obi, cco)) {
obi->volume_precache->data_r[i] = -1.0f;
obi->volume_precache->data_g[i] = -1.0f;
obi->volume_precache->data_b[i] = -1.0f;
continue;
}
- copy_v3_v3(shi->view, co);
+ /* this view coordinate is very wrong! */
+ copy_v3_v3(shi->view, cco);
normalize_v3(shi->view);
- vol_get_scattering(shi, scatter_col, co);
+ vol_get_scattering(shi, scatter_col, cco);
obi->volume_precache->data_r[i] = scatter_col[0];
obi->volume_precache->data_g[i] = scatter_col[1];
obi->volume_precache->data_b[i] = scatter_col[2];
+
}
}
}
@@ -503,7 +549,7 @@ static void precache_init_parts(Render *re, RayObject *tree, ShadeInput *shi, Ob
int i=0, x, y, z;
float voxel[3];
int sizex, sizey, sizez;
- float *bbmin=obi->obr->boundbox[0], *bbmax=obi->obr->boundbox[1];
+ float bbmin[3], bbmax[3];
int *res;
int minx, maxx;
int miny, maxy;
@@ -517,11 +563,13 @@ static void precache_init_parts(Render *re, RayObject *tree, ShadeInput *shi, Ob
parts[0] = parts[1] = parts[2] = totthread;
res = vp->res;
+ /* using boundbox in worldspace */
+ global_bounds_obi(re, obi, bbmin, bbmax);
sub_v3_v3v3(voxel, bbmax, bbmin);
- voxel[0] /= res[0];
- voxel[1] /= res[1];
- voxel[2] /= res[2];
+ voxel[0] /= (float)res[0];
+ voxel[1] /= (float)res[1];
+ voxel[2] /= (float)res[2];
for (x=0; x < parts[0]; x++) {
sizex = ceil(res[0] / (float)parts[0]);
@@ -550,8 +598,10 @@ static void precache_init_parts(Render *re, RayObject *tree, ShadeInput *shi, Ob
pa->tree = tree;
pa->shi = shi;
pa->obi = obi;
- VECCOPY(pa->bbmin, bbmin);
- VECCOPY(pa->voxel, voxel);
+ copy_m4_m4(pa->viewmat, re->viewmat);
+
+ copy_v3_v3(pa->bbmin, bbmin);
+ copy_v3_v3(pa->voxel, voxel);
VECCOPY(pa->res, res);
pa->minx = minx; pa->maxx = maxx;
@@ -582,10 +632,14 @@ static VolPrecachePart *precache_get_new_part(Render *re)
return nextpa;
}
-static int precache_resolution(VolumePrecache *vp, float *bbmin, float *bbmax, int res)
+/* calculate resolution from bounding box in world space */
+static int precache_resolution(Render *re, VolumePrecache *vp, ObjectInstanceRen *obi, int res)
{
float dim[3], div;
+ float bbmin[3], bbmax[3];
+ /* bound box in global space */
+ global_bounds_obi(re, obi, bbmin, bbmax);
sub_v3_v3v3(dim, bbmax, bbmin);
div = MAX3(dim[0], dim[1], dim[2]);
@@ -593,9 +647,9 @@ static int precache_resolution(VolumePrecache *vp, float *bbmin, float *bbmax, i
dim[1] /= div;
dim[2] /= div;
- vp->res[0] = dim[0] * (float)res;
- vp->res[1] = dim[1] * (float)res;
- vp->res[2] = dim[2] * (float)res;
+ vp->res[0] = ceil(dim[0] * res);
+ vp->res[1] = ceil(dim[1] * res);
+ vp->res[2] = ceil(dim[2] * res);
if ((vp->res[0] < 1) || (vp->res[1] < 1) || (vp->res[2] < 1))
return 0;
@@ -615,7 +669,6 @@ void vol_precache_objectinstance_threads(Render *re, ObjectInstanceRen *obi, Mat
RayObject *tree;
ShadeInput shi;
ListBase threads;
- float *bbmin=obi->obr->boundbox[0], *bbmax=obi->obr->boundbox[1];
int parts[3] = {1, 1, 1}, totparts;
int caching=1, counter=0;
@@ -627,15 +680,13 @@ void vol_precache_objectinstance_threads(Render *re, ObjectInstanceRen *obi, Mat
/* create a raytree with just the faces of the instanced ObjectRen,
* used for checking if the cached point is inside or outside. */
- //tree = create_raytree_obi(obi, bbmin, bbmax);
tree = makeraytree_object(&R, obi);
if (!tree) return;
- INIT_MINMAX(bbmin, bbmax);
- RE_rayobject_merge_bb( tree, bbmin, bbmax);
vp = MEM_callocN(sizeof(VolumePrecache), "volume light cache");
+ obi->volume_precache = vp;
- if (!precache_resolution(vp, bbmin, bbmax, ma->vol.precache_resolution)) {
+ if (!precache_resolution(re, vp, obi, ma->vol.precache_resolution)) {
MEM_freeN(vp);
vp = NULL;
return;
@@ -649,7 +700,6 @@ void vol_precache_objectinstance_threads(Render *re, ObjectInstanceRen *obi, Mat
vp = NULL;
return;
}
- obi->volume_precache = vp;
/* Need a shadeinput to calculate scattering */
precache_setup_shadeinput(re, obi, ma, &shi);
@@ -749,6 +799,8 @@ void free_volume_precache(Render *re)
MEM_freeN(obi->volume_precache->data_r);
MEM_freeN(obi->volume_precache->data_g);
MEM_freeN(obi->volume_precache->data_b);
+ MEM_freeN(obi->volume_precache->bbmin);
+ MEM_freeN(obi->volume_precache->bbmax);
MEM_freeN(obi->volume_precache);
obi->volume_precache = NULL;
}
diff --git a/source/blender/render/intern/source/volumetric.c b/source/blender/render/intern/source/volumetric.c
index c74bb9d4a55..a58d96736d5 100644
--- a/source/blender/render/intern/source/volumetric.c
+++ b/source/blender/render/intern/source/volumetric.c
@@ -193,7 +193,7 @@ static void vol_trace_behind(ShadeInput *shi, VlakRen *vlr, float *co, float *co
isect.labda = FLT_MAX;
isect.mode= RE_RAY_MIRROR;
- isect.skip = RE_SKIP_VLR_NEIGHBOUR | RE_SKIP_VLR_RENDER_CHECK;
+ isect.skip = RE_SKIP_VLR_NEIGHBOUR;
isect.orig.ob = (void*) shi->obi;
isect.orig.face = (void*)vlr;
isect.last_hit = NULL;
@@ -205,27 +205,28 @@ static void vol_trace_behind(ShadeInput *shi, VlakRen *vlr, float *co, float *co
} else {
shadeSkyView(col, co, shi->view, NULL, shi->thread);
shadeSunView(col, shi->view);
- }
+ }
}
/* trilinear interpolation */
-static void vol_get_precached_scattering(ShadeInput *shi, float *scatter_col, float *co)
+static void vol_get_precached_scattering(Render *re, ShadeInput *shi, float *scatter_col, float *co)
{
VolumePrecache *vp = shi->obi->volume_precache;
float bbmin[3], bbmax[3], dim[3];
- float sample_co[3];
+ float world_co[3], sample_co[3];
if (!vp) return;
- /* convert input coords to 0.0, 1.0 */
- VECCOPY(bbmin, shi->obi->obr->boundbox[0]);
- VECCOPY(bbmax, shi->obi->obr->boundbox[1]);
+ /* find sample point in global space bounding box 0.0-1.0 */
+ global_bounds_obi(re, shi->obi, bbmin, bbmax);
sub_v3_v3v3(dim, bbmax, bbmin);
+ mul_v3_m4v3(world_co, re->viewinv, co);
- sample_co[0] = ((co[0] - bbmin[0]) / dim[0]);
- sample_co[1] = ((co[1] - bbmin[1]) / dim[1]);
- sample_co[2] = ((co[2] - bbmin[2]) / dim[2]);
+ /* sample_co in 0.0-1.0 */
+ sample_co[0] = (world_co[0] - bbmin[0]) / dim[0];
+ sample_co[1] = (world_co[1] - bbmin[1]) / dim[1];
+ sample_co[2] = (world_co[2] - bbmin[2]) / dim[2];
scatter_col[0] = voxel_sample_triquadratic(vp->data_r, vp->res, sample_co);
scatter_col[1] = voxel_sample_triquadratic(vp->data_g, vp->res, sample_co);
@@ -445,7 +446,7 @@ static void vol_get_transmittance(ShadeInput *shi, float *tr, float *co, float *
const float stepd = (t0 - pt0) * d;
float sigma_t[3];
- vol_get_sigma_t(shi, sigma_t, co);
+ vol_get_sigma_t(shi, sigma_t, p);
tau[0] += stepd * sigma_t[0];
tau[1] += stepd * sigma_t[1];
@@ -602,13 +603,16 @@ static void volumeintegrate(struct ShadeInput *shi, float *col, float *co, float
const float density = vol_get_density(shi, p);
if (density > 0.01f) {
- float scatter_col[3], emit_col[3];
+ float scatter_col[3] = {0.f, 0.f, 0.f}, emit_col[3];
const float stepd = (t0 - pt0) * density;
/* transmittance component (alpha) */
vol_get_transmittance_seg(shi, tr, stepsize, co, density);
- if (luminance(tr) < shi->mat->vol.depth_cutoff) break;
+ if (t0 > t1 * 0.25) {
+ /* only use depth cutoff after we've traced a little way into the volume */
+ if (luminance(tr) < shi->mat->vol.depth_cutoff) break;
+ }
vol_get_emission(shi, emit_col, p);
@@ -619,7 +623,7 @@ static void volumeintegrate(struct ShadeInput *shi, float *col, float *co, float
p2[1] = p[1] + (step_vec[1] * 0.5);
p2[2] = p[2] + (step_vec[2] * 0.5);
- vol_get_precached_scattering(shi, scatter_col, p2);
+ vol_get_precached_scattering(&R, shi, scatter_col, p2);
} else
vol_get_scattering(shi, scatter_col, p);
@@ -782,10 +786,7 @@ void shade_volume_inside(ShadeInput *shi, ShadeResult *shr)
MatInside *m;
Material *mat_backup;
ObjectInstanceRen *obi_backup;
- float prev_alpha = shr->alpha;
-
- //if (BLI_countlist(&R.render_volumes_inside) == 0) return;
-
+
/* XXX: extend to multiple volumes perhaps later */
mat_backup = shi->mat;
obi_backup = shi->obi;
@@ -795,10 +796,10 @@ void shade_volume_inside(ShadeInput *shi, ShadeResult *shr)
shi->obi = m->obi;
shi->obr = m->obi->obr;
- volume_trace(shi, shr, VOL_SHADE_INSIDE);
- shr->alpha += prev_alpha;
- CLAMP(shr->alpha, 0.f, 1.f);
+ memset(shr, 0, sizeof(ShadeResult));
+ volume_trace(shi, shr, VOL_SHADE_INSIDE);
+
shi->mat = mat_backup;
shi->obi = obi_backup;
shi->obr = obi_backup->obr;
diff --git a/source/blender/render/intern/source/voxeldata.c b/source/blender/render/intern/source/voxeldata.c
index 64ba206bb86..076d6355585 100644
--- a/source/blender/render/intern/source/voxeldata.c
+++ b/source/blender/render/intern/source/voxeldata.c
@@ -39,7 +39,6 @@
#include "IMB_imbuf.h"
#include "IMB_imbuf_types.h"
-#include "BKE_global.h"
#include "BKE_image.h"
#include "BKE_main.h"
#include "BKE_modifier.h"
@@ -318,7 +317,7 @@ void make_voxeldata(struct Render *re)
re->stats_draw(re->sdh, &re->i);
/* XXX: should be doing only textures used in this render */
- for (tex= G.main->tex.first; tex; tex= tex->id.next) {
+ for (tex= re->main->tex.first; tex; tex= tex->id.next) {
if(tex->id.us && tex->type==TEX_VOXELDATA) {
cache_voxeldata(re, tex);
}
diff --git a/source/blender/verify/Makefile b/source/blender/verify/Makefile
index 88ac835c505..4451d5baf22 100644
--- a/source/blender/verify/Makefile
+++ b/source/blender/verify/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/verify/intern/Makefile b/source/blender/verify/intern/Makefile
index 5f1cac41e28..009fd1c6e28 100644
--- a/source/blender/verify/intern/Makefile
+++ b/source/blender/verify/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/windowmanager/Makefile b/source/blender/windowmanager/Makefile
index 90621f66057..1596921b5ee 100644
--- a/source/blender/windowmanager/Makefile
+++ b/source/blender/windowmanager/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) Blender Foundation.
# All rights reserved.
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index 78ea0350667..9fe09c0836c 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -57,7 +57,7 @@ void WM_init (struct bContext *C, int argc, char **argv);
void WM_exit (struct bContext *C);
void WM_main (struct bContext *C);
-void WM_init_game (struct bContext *C);
+int WM_init_game (struct bContext *C);
void WM_init_splash (struct bContext *C);
@@ -78,7 +78,7 @@ void WM_window_open_temp (struct bContext *C, struct rcti *position, int type);
int WM_read_homefile (struct bContext *C, struct wmOperator *op);
int WM_write_homefile (struct bContext *C, struct wmOperator *op);
void WM_read_file (struct bContext *C, char *name, struct ReportList *reports);
-int WM_write_file (struct bContext *C, char *target, int fileflags, struct ReportList *reports);
+int WM_write_file (struct bContext *C, char *target, int fileflags, struct ReportList *reports, int copy);
void WM_read_autosavefile(struct bContext *C);
void WM_autosave_init (struct wmWindowManager *wm);
@@ -201,7 +201,6 @@ void WM_operator_free (struct wmOperator *op);
void WM_operator_stack_clear(struct bContext *C);
struct wmOperatorType *WM_operatortype_find(const char *idnamem, int quiet);
-struct wmOperatorType *WM_operatortype_exists(const char *idname);
struct wmOperatorType *WM_operatortype_first(void);
void WM_operatortype_append (void (*opfunc)(struct wmOperatorType*));
void WM_operatortype_append_ptr (void (*opfunc)(struct wmOperatorType*, void *), void *userdata);
diff --git a/source/blender/windowmanager/intern/Makefile b/source/blender/windowmanager/intern/Makefile
index 18085194405..60be5fed4b2 100644
--- a/source/blender/windowmanager/intern/Makefile
+++ b/source/blender/windowmanager/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c
index fcf8951d796..8d36711032b 100644
--- a/source/blender/windowmanager/intern/wm.c
+++ b/source/blender/windowmanager/intern/wm.c
@@ -26,7 +26,8 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#include "string.h"
+#include <string.h>
+#include <stddef.h>
#include "DNA_windowmanager_types.h"
@@ -149,9 +150,9 @@ MenuType *WM_menutype_find(const char *idname, int quiet)
MenuType* mt;
if (idname[0]) {
- for(mt=menutypes.first; mt; mt=mt->next)
- if(strcmp(idname, mt->idname)==0)
- return mt;
+ mt= BLI_findstring(&menutypes, idname, offsetof(MenuType, idname));
+ if(mt)
+ return mt;
}
if(!quiet)
diff --git a/source/blender/windowmanager/intern/wm_dragdrop.c b/source/blender/windowmanager/intern/wm_dragdrop.c
index 3d519a5609b..18b1e7239ed 100644
--- a/source/blender/windowmanager/intern/wm_dragdrop.c
+++ b/source/blender/windowmanager/intern/wm_dragdrop.c
@@ -26,7 +26,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#include "string.h"
+#include <string.h>
#include "DNA_windowmanager_types.h"
#include "DNA_screen_types.h"
diff --git a/source/blender/windowmanager/intern/wm_draw.c b/source/blender/windowmanager/intern/wm_draw.c
index 38322b66bbb..aa26d4444b1 100644
--- a/source/blender/windowmanager/intern/wm_draw.c
+++ b/source/blender/windowmanager/intern/wm_draw.c
@@ -101,6 +101,14 @@ static void wm_area_mark_invalid_backbuf(ScrArea *sa)
((View3D*)sa->spacedata.first)->flag |= V3D_INVALID_BACKBUF;
}
+static int wm_area_test_invalid_backbuf(ScrArea *sa)
+{
+ if(sa->spacetype == SPACE_VIEW3D)
+ return (((View3D*)sa->spacedata.first)->flag & V3D_INVALID_BACKBUF);
+ else
+ return 1;
+}
+
/********************** draw all **************************/
/* - reference method, draw all each time */
@@ -189,6 +197,12 @@ static void wm_method_draw_overlap_all(bContext *C, wmWindow *win, int exchange)
ARegion *ar;
static rcti rect= {0, 0, 0, 0};
+ /* after backbuffer selection draw, we need to redraw */
+ for(sa= screen->areabase.first; sa; sa= sa->next)
+ for(ar= sa->regionbase.first; ar; ar= ar->next)
+ if(ar->swinid && !wm_area_test_invalid_backbuf(sa))
+ ED_region_tag_redraw(ar);
+
/* flush overlapping regions */
if(screen->regionbase.first) {
/* flush redraws of area regions up to overlapping regions */
@@ -677,13 +691,26 @@ static int wm_draw_update_test_window(wmWindow *win)
static int wm_automatic_draw_method(wmWindow *win)
{
+ /* Ideally all cards would work well with triple buffer, since if it works
+ well gives the least redraws and is considerably faster at partial redraw
+ for sculpting or drawing overlapping menus. For typically lower end cards
+ copy to texture is slow though and so we use overlap instead there. */
+
if(win->drawmethod == USER_DRAW_AUTOMATIC) {
/* ATI opensource driver is known to be very slow at this */
if(GPU_type_matches(GPU_DEVICE_ATI, GPU_OS_UNIX, GPU_DRIVER_OPENSOURCE))
return USER_DRAW_OVERLAP;
+ /* also Intel drivers are slow */
+ else if(GPU_type_matches(GPU_DEVICE_INTEL, GPU_OS_UNIX, GPU_DRIVER_ANY))
+ return USER_DRAW_OVERLAP;
+ else if(GPU_type_matches(GPU_DEVICE_INTEL, GPU_OS_WIN, GPU_DRIVER_ANY))
+ return USER_DRAW_OVERLAP_FLIP;
+ else if(GPU_type_matches(GPU_DEVICE_INTEL, GPU_OS_MAC, GPU_DRIVER_ANY))
+ return USER_DRAW_OVERLAP_FLIP;
/* Windows software driver darkens color on each redraw */
else if(GPU_type_matches(GPU_DEVICE_SOFTWARE, GPU_OS_WIN, GPU_DRIVER_SOFTWARE))
return USER_DRAW_OVERLAP_FLIP;
+ /* drawing lower color depth again degrades colors each time */
else if(GPU_color_depth() < 24)
return USER_DRAW_OVERLAP;
else
@@ -781,3 +808,11 @@ void wm_draw_region_clear(wmWindow *win, ARegion *ar)
win->screen->do_draw= 1;
}
+void wm_draw_region_modified(wmWindow *win, ARegion *ar)
+{
+ int drawmethod= wm_automatic_draw_method(win);
+
+ if(ELEM(drawmethod, USER_DRAW_OVERLAP, USER_DRAW_OVERLAP_FLIP))
+ ED_region_tag_redraw(ar);
+}
+
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index 3077b25cc73..e1fc934ee3e 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -296,7 +296,7 @@ void wm_event_do_notifiers(bContext *C)
/* XXX make lock in future, or separated derivedmesh users in scene */
if(!G.rendering)
/* depsgraph & animation: update tagged datablocks */
- scene_update_tagged(win->screen->scene);
+ scene_update_tagged(CTX_data_main(C), win->screen->scene);
}
CTX_wm_window_set(C, NULL);
@@ -425,6 +425,14 @@ static void wm_operator_reports(bContext *C, wmOperator *op, int retval, int pop
}
}
+/* this function is mainly to check that the rules for freeing
+ * an operator are kept in sync.
+ */
+static int wm_operator_register_check(wmWindowManager *wm, wmOperatorType *ot)
+{
+ return (wm->op_undo_depth == 0) && (ot->flag & OPTYPE_REGISTER);
+}
+
static void wm_operator_finished(bContext *C, wmOperator *op, int repeat)
{
wmWindowManager *wm= CTX_wm_manager(C);
@@ -445,7 +453,7 @@ static void wm_operator_finished(bContext *C, wmOperator *op, int repeat)
MEM_freeN(buf);
}
- if((wm->op_undo_depth == 0) && (op->type->flag & OPTYPE_REGISTER))
+ if(wm_operator_register_check(wm, op->type))
wm_operator_register(C, op);
else
WM_operator_free(op);
@@ -801,17 +809,17 @@ int WM_operator_name_call(bContext *C, const char *opstring, int context, Pointe
}
/* Similar to WM_operator_name_call called with WM_OP_EXEC_DEFAULT context.
- - wmOperatorType is used instead of operator name since python alredy has the operator type
+ - wmOperatorType is used instead of operator name since python already has the operator type
- poll() must be called by python before this runs.
- reports can be passed to this function (so python can report them as exceptions)
*/
int WM_operator_call_py(bContext *C, wmOperatorType *ot, int context, PointerRNA *properties, ReportList *reports)
{
+ wmWindowManager *wm= CTX_wm_manager(C);
int retval= OPERATOR_CANCELLED;
#if 0
wmOperator *op;
- wmWindowManager *wm= CTX_wm_manager(C);
op= wm_operator_create(wm, ot, properties, reports);
if (op->type->exec) {
@@ -830,9 +838,9 @@ int WM_operator_call_py(bContext *C, wmOperatorType *ot, int context, PointerRNA
retval= wm_operator_call_internal(C, ot, context, properties, reports);
/* keep the reports around if needed later */
- if (retval & OPERATOR_RUNNING_MODAL || ot->flag & OPTYPE_REGISTER)
+ if (retval & OPERATOR_RUNNING_MODAL || wm_operator_register_check(wm, ot))
{
- reports->flag |= RPT_FREE;
+ reports->flag |= RPT_FREE; /* let blender manage freeing */
}
return retval;
@@ -1598,7 +1606,7 @@ void wm_event_do_handlers(bContext *C)
}
if(playing == 0) {
- int ncfra = round(sound_sync_scene(scene) * FPS);
+ int ncfra = sound_sync_scene(scene) * FPS + 0.5;
if(ncfra != scene->r.cfra) {
scene->r.cfra = ncfra;
ED_update_for_newframe(C, 1);
diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c
index 8a05e6c4916..e2293f79e95 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -179,21 +179,23 @@ static void wm_window_match_do(bContext *C, ListBase *oldwmlist)
/* we've read file without wm..., keep current one entirely alive */
if(G.main->wm.first==NULL) {
- bScreen *screen= CTX_wm_screen(C);
-
- /* match oldwm to new dbase, only old files */
-
- for(wm= oldwmlist->first; wm; wm= wm->id.next) {
-
- for(win= wm->windows.first; win; win= win->next) {
- /* all windows get active screen from file */
- if(screen->winid==0)
- win->screen= screen;
- else
- win->screen= ED_screen_duplicate(win, screen);
+ /* when loading without UI, no matching needed */
+ if(!(G.fileflags & G_FILE_NO_UI)) {
+ bScreen *screen= CTX_wm_screen(C);
+
+ /* match oldwm to new dbase, only old files */
+ for(wm= oldwmlist->first; wm; wm= wm->id.next) {
- BLI_strncpy(win->screenname, win->screen->id.name+2, 21);
- win->screen->winid= win->winid;
+ for(win= wm->windows.first; win; win= win->next) {
+ /* all windows get active screen from file */
+ if(screen->winid==0)
+ win->screen= screen;
+ else
+ win->screen= ED_screen_duplicate(win, screen);
+
+ BLI_strncpy(win->screenname, win->screen->id.name+2, 21);
+ win->screen->winid= win->winid;
+ }
}
}
@@ -312,7 +314,7 @@ void WM_read_file(bContext *C, char *name, ReportList *reports)
CTX_wm_window_set(C, CTX_wm_manager(C)->windows.first);
ED_editors_init(C);
- DAG_on_load_update();
+ DAG_on_load_update(CTX_data_main(C));
#ifndef DISABLE_PYTHON
/* run any texts that were loaded in and flagged as modules */
@@ -382,7 +384,7 @@ int WM_read_homefile(bContext *C, wmOperator *op)
/* XXX */
G.save_over = 0; // start with save preference untitled.blend
- G.fileflags &= ~G_FILE_AUTOPLAY; /* disable autoplay in .B.blend... */
+ G.fileflags &= ~G_FILE_AUTOPLAY; /* disable autoplay in startup.blend... */
// mainwindow_set_filename_to_title(""); // empty string re-initializes title to "Blender"
// refresh_interface_font();
@@ -392,7 +394,7 @@ int WM_read_homefile(bContext *C, wmOperator *op)
BKE_write_undo(C, "original"); /* save current state */
ED_editors_init(C);
- DAG_on_load_update();
+ DAG_on_load_update(CTX_data_main(C));
WM_event_add_notifier(C, NC_WM|ND_FILEREAD, NULL);
CTX_wm_window_set(C, NULL); /* exits queues */
@@ -418,7 +420,7 @@ void read_history(void)
G.recent_files.first = G.recent_files.last = NULL;
- /* read list of recent opend files from .Blog to memory */
+ /* read list of recent opend files from recent-files.txt to memory */
for (l= lines, num= 0; l && (num<U.recent_files); l= l->next) {
line = l->link;
if (line[0] && BLI_exists(line)) {
@@ -434,9 +436,6 @@ void read_history(void)
num++;
}
}
-
- if(G.sce[0] == 0)
- BLI_make_file_string("/", G.sce, BLI_gethome(), "untitled.blend");
BLI_free_file_lines(lines);
@@ -452,7 +451,7 @@ static void write_history(void)
BLI_make_file_string("/", name, BLI_get_folder_create(BLENDER_USER_CONFIG, NULL), BLENDER_HISTORY_FILE);
recent = G.recent_files.first;
- /* refresh .Blog of recent opened files, when current file was changed */
+ /* refresh recent-files.txt of recent opened files, when current file was changed */
if(!(recent) || (strcmp(recent->filepath, G.sce)!=0)) {
fp= fopen(name, "w");
if (fp) {
@@ -462,11 +461,11 @@ static void write_history(void)
recent->filepath[0] = '\0';
strcpy(recent->filepath, G.sce);
BLI_addhead(&(G.recent_files), recent);
- /* write current file to .Blog */
+ /* write current file to recent-files.txt */
fprintf(fp, "%s\n", recent->filepath);
recent = recent->next;
i=1;
- /* write rest of recent opened files to .Blog */
+ /* write rest of recent opened files to recent-files.txt */
while((i<U.recent_files) && (recent)){
/* this prevents to have duplicities in list */
if (strcmp(recent->filepath, G.sce)!=0) {
@@ -569,7 +568,7 @@ int write_crash_blend(void)
}
}
-int WM_write_file(bContext *C, char *target, int fileflags, ReportList *reports)
+int WM_write_file(bContext *C, char *target, int fileflags, ReportList *reports, int copy)
{
Library *li;
int len;
@@ -616,17 +615,20 @@ int WM_write_file(bContext *C, char *target, int fileflags, ReportList *reports)
ED_object_exit_editmode(C, EM_DO_UNDO);
ED_sculpt_force_update(C);
- do_history(di, reports);
-
/* blend file thumbnail */
ibuf_thumb= blend_file_thumb(di, CTX_data_scene(C), &thumb);
- if (BLO_write_file(CTX_data_main(C), di, fileflags, reports, thumb)) {
- strcpy(G.sce, di);
- G.relbase_valid = 1;
- strcpy(G.main->name, di); /* is guaranteed current file */
+ /* rename to .blend1, do this as last before write */
+ do_history(di, reports);
- G.save_over = 1; /* disable untitled.blend convention */
+ if (BLO_write_file(CTX_data_main(C), di, fileflags, reports, thumb)) {
+ if(!copy) {
+ strcpy(G.sce, di);
+ G.relbase_valid = 1;
+ strcpy(G.main->name, di); /* is guaranteed current file */
+
+ G.save_over = 1; /* disable untitled.blend convention */
+ }
if(fileflags & G_FILE_COMPRESS) G.fileflags |= G_FILE_COMPRESS;
else G.fileflags &= ~G_FILE_COMPRESS;
@@ -685,21 +687,22 @@ void wm_autosave_location(char *filename)
{
char pidstr[32];
#ifdef WIN32
- char subdir[9];
- char savedir[FILE_MAXDIR];
+ char *savedir;
#endif
sprintf(pidstr, "%d.blend", abs(getpid()));
#ifdef WIN32
+ /* XXX Need to investigate how to handle default location of '/tmp/'
+ * This is a relative directory on Windows, and it may be
+ * found. Example:
+ * Blender installed on D:\ drive, D:\ drive has D:\tmp\
+ * Now, BLI_exists() will find '/tmp/' exists, but
+ * BLI_make_file_string will create string that has it most likely on C:\
+ * through get_default_root().
+ * If there is no C:\tmp autosave fails. */
if (!BLI_exists(U.tempdir)) {
- BLI_strncpy(subdir, "autosave", sizeof(subdir));
- BLI_make_file_string("/", savedir, BLI_gethome(), subdir);
-
- /* create a new autosave dir
- * function already checks for existence or not */
- BLI_recurdir_fileops(savedir);
-
+ savedir = BLI_get_folder_create(BLENDER_USER_AUTOSAVE, NULL);
BLI_make_file_string("/", filename, savedir, pidstr);
return;
}
diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c
index adf0e9d2001..0fd42ffb8aa 100644
--- a/source/blender/windowmanager/intern/wm_init_exit.c
+++ b/source/blender/windowmanager/intern/wm_init_exit.c
@@ -49,6 +49,7 @@
#include "BKE_font.h"
#include "BKE_global.h"
#include "BKE_library.h"
+#include "BKE_main.h"
#include "BKE_mball.h"
#include "BKE_report.h"
#include "BKE_utildefines.h"
@@ -95,6 +96,7 @@
#include "BKE_depsgraph.h"
#include "BKE_sound.h"
+#include "GHOST_C-api.h"
static void wm_init_reports(bContext *C)
{
@@ -165,6 +167,10 @@ void WM_init(bContext *C, int argc, char **argv)
G.ndofdevice = -1; /* XXX bad initializer, needs set otherwise buttons show! */
read_history();
+
+ if(G.sce[0] == 0)
+ BLI_make_file_string("/", G.sce, BLI_getDefaultDocumentFolder(), "untitled.blend");
+
BLI_strncpy(G.lib, G.sce, FILE_MAX);
}
@@ -183,18 +189,115 @@ void WM_init_splash(bContext *C)
}
}
-void WM_init_game(bContext *C)
+static ScrArea *biggest_view3d(bContext *C)
+{
+ bScreen *sc= CTX_wm_screen(C);
+ ScrArea *sa, *big= NULL;
+ int size, maxsize= 0;
+
+ for(sa= sc->areabase.first; sa; sa= sa->next) {
+ if(sa->spacetype==SPACE_VIEW3D) {
+ size= sa->winx * sa->winy;
+ if(size > maxsize) {
+ maxsize= size;
+ big= sa;
+ }
+ }
+ }
+ return big;
+}
+
+int WM_init_game(bContext *C)
{
- //XXX copied from WM_init_splash we may not even need those "window" related code
- //XXX not working yet, it fails at the game_start_operator pool (it needs an area)
wmWindowManager *wm= CTX_wm_manager(C);
- wmWindow *prevwin= CTX_wm_window(C);
-
- if(wm->windows.first) {
- CTX_wm_window_set(C, wm->windows.first);
+ wmWindow* win;
+
+ ScrArea *sa;
+ ARegion *ar;
+
+ Scene *scene= CTX_data_scene(C);
+
+ if (!scene) {
+ // XXX, this should not be needed.
+ Main *bmain = CTX_data_main(C);
+ scene= bmain->scene.first;
+ }
+
+ win = wm->windows.first;
+
+ //first to get a valid window
+ if(win)
+ CTX_wm_window_set(C, win);
+
+ sa = biggest_view3d(C);
+
+ if(sa)
+ {
+ for(ar=sa->regionbase.first; ar; ar=ar->next) {
+ if(ar->regiontype == RGN_TYPE_WINDOW) {
+ break;
+ }
+ }
+ }
+
+ // if we have a valid 3D view
+ if (sa && ar) {
+ ARegion *arhide;
+
+ CTX_wm_area_set(C, sa);
+ CTX_wm_region_set(C, ar);
+
+ /* disable quad view */
+ if(ar->alignment == RGN_ALIGN_QSPLIT)
+ WM_operator_name_call(C, "SCREEN_OT_region_quadview", WM_OP_EXEC_DEFAULT, NULL);
+
+ /* toolbox, properties panel and header are hidden */
+ for(arhide=sa->regionbase.first; arhide; arhide=arhide->next) {
+ if(arhide->regiontype != RGN_TYPE_WINDOW) {
+ if(!(arhide->flag & RGN_FLAG_HIDDEN)) {
+ ED_region_toggle_hidden(C, arhide);
+ }
+ }
+ }
+
+ /* full screen the area */
+ if(!sa->full) {
+ ED_screen_full_toggle(C, wm->windows.first, sa);
+ }
+
+ /* Fullscreen */
+ if(scene->gm.fullscreen) {
+ WM_operator_name_call(C, "WM_OT_window_fullscreen_toggle", WM_OP_EXEC_DEFAULT, NULL);
+ wm_get_screensize(&ar->winrct.xmax, &ar->winrct.ymax);
+ }
+ else
+ {
+ GHOST_RectangleHandle rect = GHOST_GetClientBounds(win->ghostwin);
+ ar->winrct.ymax = GHOST_GetHeightRectangle(rect);
+ ar->winrct.xmax = GHOST_GetWidthRectangle(rect);
+ GHOST_DisposeRectangle(rect);
+ }
+
WM_operator_name_call(C, "VIEW3D_OT_game_start", WM_OP_EXEC_DEFAULT, NULL);
- CTX_wm_window_set(C, prevwin);
+
+ return 1;
+ }
+ else
+ {
+ ReportTimerInfo *rti;
+
+ BKE_report(&wm->reports, RPT_ERROR, "No valid 3D View found. Game auto start is not possible.");
+
+ /* After adding the report to the global list, reset the report timer. */
+ WM_event_remove_timer(wm, NULL, wm->reports.reporttimer);
+
+ /* Records time since last report was added */
+ wm->reports.reporttimer = WM_event_add_timer(wm, CTX_wm_window(C), TIMER, 0.02);
+
+ rti = MEM_callocN(sizeof(ReportTimerInfo), "ReportTimerInfo");
+ wm->reports.reporttimer->customdata = rti;
}
+ return 0;
}
/* free strings of open recent files */
diff --git a/source/blender/windowmanager/intern/wm_jobs.c b/source/blender/windowmanager/intern/wm_jobs.c
index 80f1c680931..3ebfac4928c 100644
--- a/source/blender/windowmanager/intern/wm_jobs.c
+++ b/source/blender/windowmanager/intern/wm_jobs.c
@@ -355,9 +355,16 @@ void WM_jobs_kill(wmWindowManager *wm, void *owner, void *startjob)
{
wmJob *steve;
- for(steve= wm->jobs.first; steve; steve= steve->next)
- if(steve->owner==owner || steve->startjob==startjob)
- wm_jobs_kill_job(wm, steve);
+ steve= wm->jobs.first;
+ while(steve) {
+ if(steve->owner==owner || steve->startjob==startjob) {
+ wmJob* bill = steve;
+ steve= steve->next;
+ wm_jobs_kill_job(wm, bill);
+ } else {
+ steve= steve->next;
+ }
+ }
}
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index efd05114d9a..2311024827e 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -30,6 +30,8 @@
#include <string.h>
#include <ctype.h>
#include <stdio.h>
+#include <stddef.h>
+
#include "DNA_ID.h"
#include "DNA_object_types.h"
@@ -61,7 +63,7 @@
#include "BKE_scene.h"
#include "BKE_screen.h" /* BKE_ST_MAXNAME */
#include "BKE_utildefines.h"
-#include "BKE_brush.h" // JW
+#include "BKE_idcode.h"
#include "BIF_gl.h"
#include "BIF_glutil.h" /* for paint cursor */
@@ -70,7 +72,6 @@
#include "ED_screen.h"
#include "ED_util.h"
-#include "ED_view3d.h" // JW
#include "RNA_access.h"
#include "RNA_define.h"
@@ -88,8 +89,6 @@
#include "wm_subwindow.h"
#include "wm_window.h"
-
-
static ListBase global_ops= {NULL, NULL};
/* ************ operator API, exported ********** */
@@ -101,11 +100,11 @@ wmOperatorType *WM_operatortype_find(const char *idname, int quiet)
char idname_bl[OP_MAX_TYPENAME]; // XXX, needed to support python style names without the _OT_ syntax
WM_operator_bl_idname(idname_bl, idname);
-
+
if (idname_bl[0]) {
- for(ot= global_ops.first; ot; ot= ot->next) {
- if(strncmp(ot->idname, idname_bl, OP_MAX_TYPENAME)==0)
- return ot;
+ ot= (wmOperatorType *)BLI_findstring_ptr(&global_ops, idname_bl, offsetof(wmOperatorType, idname));
+ if(ot) {
+ return ot;
}
}
@@ -115,22 +114,6 @@ wmOperatorType *WM_operatortype_find(const char *idname, int quiet)
return NULL;
}
-wmOperatorType *WM_operatortype_exists(const char *idname)
-{
- wmOperatorType *ot;
-
- char idname_bl[OP_MAX_TYPENAME]; // XXX, needed to support python style names without the _OT_ syntax
- WM_operator_bl_idname(idname_bl, idname);
-
- if(idname_bl[0]) {
- for(ot= global_ops.first; ot; ot= ot->next) {
- if(strncmp(ot->idname, idname_bl, OP_MAX_TYPENAME)==0)
- return ot;
- }
- }
- return NULL;
-}
-
wmOperatorType *WM_operatortype_first(void)
{
return global_ops.first;
@@ -331,7 +314,7 @@ wmOperatorType *WM_operatortype_append_macro(char *idname, char *name, int flag)
{
wmOperatorType *ot;
- if(WM_operatortype_exists(idname)) {
+ if(WM_operatortype_find(idname, TRUE)) {
printf("Macro error: operator %s exists\n", idname);
return NULL;
}
@@ -1212,6 +1195,7 @@ static uiBlock *wm_block_create_splash(bContext *C, ARegion *ar, void *arg_unuse
split = uiLayoutSplit(layout, 0, 0);
col = uiLayoutColumn(split, 0);
uiItemL(col, "Links", 0);
+ uiItemStringO(col, "Donations", ICON_URL, "WM_OT_url_open", "url", "http://www.blender.org/blenderorg/blender-foundation/donation-payment/");
uiItemStringO(col, "Release Log", ICON_URL, "WM_OT_url_open", "url", "http://www.blender.org/development/release-logs/blender-250/");
uiItemStringO(col, "Manual", ICON_URL, "WM_OT_url_open", "url", "http://wiki.blender.org/index.php/Doc:Manual");
uiItemStringO(col, "Blender Website", ICON_URL, "WM_OT_url_open", "url", "http://www.blender.org/");
@@ -1584,7 +1568,7 @@ static int wm_link_append_exec(bContext *C, wmOperator *op)
scene_deselect_all(scene);
bh = BLO_blendhandle_from_file(libname);
- idcode = BLO_idcode_from_name(group);
+ idcode = BKE_idcode_from_name(group);
flag = wm_link_append_flag(op);
@@ -1628,8 +1612,8 @@ static int wm_link_append_exec(bContext *C, wmOperator *op)
flag_all_listbases_ids(LIB_PRE_EXISTING, 0);
/* recreate dependency graph to include new objects */
- DAG_scene_sort(scene);
- DAG_ids_flush_update(0);
+ DAG_scene_sort(bmain, scene);
+ DAG_ids_flush_update(bmain, 0);
BLO_blendhandle_close(bh);
@@ -1783,6 +1767,7 @@ static int wm_save_as_mainfile_exec(bContext *C, wmOperator *op)
{
char path[FILE_MAX];
int fileflags;
+ int copy=0;
save_set_compress(op);
@@ -1793,6 +1778,9 @@ static int wm_save_as_mainfile_exec(bContext *C, wmOperator *op)
untitled(path);
}
+ if(RNA_property_is_set(op->ptr, "copy"))
+ copy = RNA_boolean_get(op->ptr, "copy");
+
fileflags= G.fileflags;
/* set compression flag */
@@ -1801,7 +1789,7 @@ static int wm_save_as_mainfile_exec(bContext *C, wmOperator *op)
if(RNA_boolean_get(op->ptr, "relative_remap")) fileflags |= G_FILE_RELATIVE_REMAP;
else fileflags &= ~G_FILE_RELATIVE_REMAP;
- if ( WM_write_file(C, path, fileflags, op->reports) != 0)
+ if ( WM_write_file(C, path, fileflags, op->reports, copy) != 0)
return OPERATOR_CANCELLED;
WM_event_add_notifier(C, NC_WM|ND_FILESAVE, NULL);
@@ -1822,6 +1810,7 @@ static void WM_OT_save_as_mainfile(wmOperatorType *ot)
WM_operator_properties_filesel(ot, FOLDERFILE|BLENDERFILE, FILE_BLENDER, FILE_SAVE, WM_FILESEL_FILEPATH);
RNA_def_boolean(ot->srna, "compress", 0, "Compress", "Write compressed .blend file");
RNA_def_boolean(ot->srna, "relative_remap", 1, "Remap Relative", "Remap relative paths when saving in a different directory");
+ RNA_def_boolean(ot->srna, "copy", 0, "Save Copy", "Save a copy of the actual working state but does not make saved file active.");
}
/* *************** save file directly ******** */
@@ -1873,7 +1862,6 @@ static void WM_OT_save_mainfile(wmOperatorType *ot)
RNA_def_boolean(ot->srna, "relative_remap", 0, "Remap Relative", "Remap relative paths when saving in a different directory");
}
-
/* XXX: move these collada operators to a more appropriate place */
#ifdef WITH_COLLADA
@@ -2592,33 +2580,22 @@ const int WM_RADIAL_CONTROL_DISPLAY_SIZE = 200;
typedef struct wmRadialControl {
int mode;
float initial_value, value, max_value;
+ float col[4], tex_col[4];
int initial_mouse[2];
void *cursor;
GLuint tex;
} wmRadialControl;
-extern Paint *paint_get_active(Scene *sce);
-extern struct Brush *paint_brush(struct Paint *paint);
-
static void wm_radial_control_paint(bContext *C, int x, int y, void *customdata)
{
wmRadialControl *rc = (wmRadialControl*)customdata;
ARegion *ar = CTX_wm_region(C);
float r1=0.0f, r2=0.0f, r3=0.0f, angle=0.0f;
- Paint *paint = paint_get_active(CTX_data_scene(C));
- Brush *brush = paint_brush(paint);
-
- ViewContext vc;
-
// int hit = 0;
-
- int flip;
- int sign;
-
- float* col;
-
- const float str = rc->mode == WM_RADIALCONTROL_STRENGTH ? (rc->value + 0.5) : (brush->texture_overlay_alpha / 100.0f);
+
+ if(rc->mode == WM_RADIALCONTROL_STRENGTH)
+ rc->tex_col[3]= (rc->value + 0.5);
if(rc->mode == WM_RADIALCONTROL_SIZE) {
r1= rc->value;
@@ -2636,18 +2613,6 @@ static void wm_radial_control_paint(bContext *C, int x, int y, void *customdata)
x = rc->initial_mouse[0] - ar->winrct.xmin;
y = rc->initial_mouse[1] - ar->winrct.ymin;
- view3d_set_viewcontext(C, &vc);
-
- // XXX: no way currently to know state of pen flip or invert key modifier without starting a stroke
- flip = 1;
-
- sign = flip * ((brush->flag & BRUSH_DIR_IN)? -1 : 1);
-
- if (sign < 0 && ELEM4(brush->sculpt_tool, SCULPT_TOOL_DRAW, SCULPT_TOOL_INFLATE, SCULPT_TOOL_CLAY, SCULPT_TOOL_PINCH))
- col = brush->sub_col;
- else
- col = brush->add_col;
-
glTranslatef((float)x, (float)y, 0.0f);
glEnable(GL_BLEND);
@@ -2664,7 +2629,7 @@ static void wm_radial_control_paint(bContext *C, int x, int y, void *customdata)
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
- glColor4f(U.sculpt_paint_overlay_col[0],U.sculpt_paint_overlay_col[1],U.sculpt_paint_overlay_col[2], str);
+ glColor4f(rc->tex_col[0], rc->tex_col[1], rc->tex_col[2], rc->tex_col[3]);
glTexCoord2f(0,0);
glVertex2f(-r3, -r3);
glTexCoord2f(1,0);
@@ -2678,7 +2643,7 @@ static void wm_radial_control_paint(bContext *C, int x, int y, void *customdata)
}
if(rc->mode == WM_RADIALCONTROL_ANGLE) {
- glColor4f(col[0], col[1], col[2], 0.5f);
+ glColor4f(rc->col[0], rc->col[1], rc->col[2], rc->col[3]);
glEnable(GL_LINE_SMOOTH);
glRotatef(-angle, 0, 0, 1);
fdrawline(0, 0, WM_RADIAL_CONTROL_DISPLAY_SIZE, 0);
@@ -2687,7 +2652,7 @@ static void wm_radial_control_paint(bContext *C, int x, int y, void *customdata)
glDisable(GL_LINE_SMOOTH);
}
- glColor4f(col[0], col[1], col[2], 0.5f);
+ glColor4f(rc->col[0], rc->col[1], rc->col[2], rc->col[3]);
glutil_draw_lined_arc(0.0, M_PI*2.0, r1, 40);
glutil_draw_lined_arc(0.0, M_PI*2.0, r2, 40);
glDisable(GL_BLEND);
@@ -2702,7 +2667,7 @@ int WM_radial_control_modal(bContext *C, wmOperator *op, wmEvent *event)
float dist;
double new_value = RNA_float_get(op->ptr, "new_value");
int ret = OPERATOR_RUNNING_MODAL;
- float initial_value = RNA_float_get(op->ptr, "initial_value");
+ // float initial_value = RNA_float_get(op->ptr, "initial_value");
mode = RNA_int_get(op->ptr, "mode");
RNA_int_get_array(op->ptr, "initial_mouse", initial_mouse);
@@ -2813,6 +2778,9 @@ int WM_radial_control_invoke(bContext *C, wmOperator *op, wmEvent *event)
MEM_freeN(im);
}
+ RNA_float_get_array(op->ptr, "color", rc->col);
+ RNA_float_get_array(op->ptr, "texture_color", rc->tex_col);
+
RNA_int_set_array(op->ptr, "initial_mouse", mouse);
RNA_float_set(op->ptr, "new_value", initial_value);
@@ -2857,6 +2825,8 @@ void WM_OT_radial_control_partial(wmOperatorType *ot)
{WM_RADIALCONTROL_STRENGTH, "STRENGTH", 0, "Strength", ""},
{WM_RADIALCONTROL_ANGLE, "ANGLE", 0, "Angle", ""},
{0, NULL, 0, NULL, NULL}};
+ static float color[4] = {1.0f, 1.0f, 1.0f, 0.5f};
+ static float tex_color[4] = {1.0f, 1.0f, 1.0f, 1.0f};
/* Should be set in custom invoke() */
RNA_def_float(ot->srna, "initial_value", 0, 0, FLT_MAX, "Initial Value", "", 0, FLT_MAX);
@@ -2868,7 +2838,10 @@ void WM_OT_radial_control_partial(wmOperatorType *ot)
RNA_def_enum(ot->srna, "mode", radial_mode_items, 0, "Mode", "");
/* Internal */
- RNA_def_int_vector(ot->srna, "initial_mouse", 2, NULL, INT_MIN, INT_MAX, "initial_mouse", "", INT_MIN, INT_MAX);
+ RNA_def_int_vector(ot->srna, "initial_mouse", 2, NULL, INT_MIN, INT_MAX, "Initial Mouse", "", INT_MIN, INT_MAX);
+
+ RNA_def_float_color(ot->srna, "color", 4, color, 0.0f, FLT_MAX, "Color", "Radial control color", 0.0f, 1.0f);
+ RNA_def_float_color(ot->srna, "texture_color", 4, tex_color, 0.0f, FLT_MAX, "Texture Color", "Radial control texture color", 0.0f, 1.0f);
}
/* ************************** timer for testing ***************** */
@@ -2949,15 +2922,17 @@ static int redraw_timer_exec(bContext *C, wmOperator *op)
redraw_timer_window_swap(C);
}
else if (type==4) {
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
if(a & 1) scene->r.cfra--;
else scene->r.cfra++;
- scene_update_for_newframe(scene, scene->lay);
+ scene_update_for_newframe(bmain, scene, scene->lay);
}
else if (type==5) {
/* play anim, return on same frame as started with */
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
int tot= (scene->r.efra - scene->r.sfra) + 1;
@@ -2967,7 +2942,7 @@ static int redraw_timer_exec(bContext *C, wmOperator *op)
if(scene->r.cfra > scene->r.efra)
scene->r.cfra= scene->r.sfra;
- scene_update_for_newframe(scene, scene->lay);
+ scene_update_for_newframe(bmain, scene, scene->lay);
redraw_timer_window_swap(C);
}
}
@@ -3263,6 +3238,8 @@ void wm_window_keymap(wmKeyConfig *keyconf)
WM_keymap_add_item(keymap, "WM_OT_save_mainfile", WKEY, KM_PRESS, KM_CTRL, 0);
WM_keymap_add_item(keymap, "WM_OT_save_as_mainfile", SKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0);
WM_keymap_add_item(keymap, "WM_OT_save_as_mainfile", F2KEY, KM_PRESS, 0, 0);
+ kmi= WM_keymap_add_item(keymap, "WM_OT_save_as_mainfile", SKEY, KM_PRESS, KM_ALT|KM_CTRL, 0);
+ RNA_boolean_set(kmi->ptr, "copy", 1);
WM_keymap_verify_item(keymap, "WM_OT_window_fullscreen_toggle", F11KEY, KM_PRESS, KM_ALT, 0);
WM_keymap_add_item(keymap, "WM_OT_exit_blender", QKEY, KM_PRESS, KM_CTRL, 0);
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index 6d01620dae8..45234464ef0 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -73,7 +73,7 @@ static int prefsizx= 0, prefsizy= 0, prefstax= 0, prefstay= 0;
/* XXX this one should correctly check for apple top header...
done for Cocoa : returns window contents (and not frame) max size*/
-static void wm_get_screensize(int *width_r, int *height_r)
+void wm_get_screensize(int *width_r, int *height_r)
{
unsigned int uiwidth;
unsigned int uiheight;
@@ -258,7 +258,7 @@ void wm_window_title(wmWindowManager *wm, wmWindow *win)
}
else {
- /* this is set to 1 if you don't have .B.blend open */
+ /* this is set to 1 if you don't have startup.blend open */
if(G.save_over) {
char *str= MEM_mallocN(strlen(G.sce) + 16, "title");
diff --git a/source/blender/windowmanager/wm_window.h b/source/blender/windowmanager/wm_window.h
index fa244036645..d57fd0e75d8 100644
--- a/source/blender/windowmanager/wm_window.h
+++ b/source/blender/windowmanager/wm_window.h
@@ -36,6 +36,8 @@ struct wmOperator;
void wm_ghost_init (bContext *C);
void wm_ghost_exit(void);
+void wm_get_screensize(int *width_r, int *height_r);
+
wmWindow *wm_window_new (bContext *C);
void wm_window_free (bContext *C, wmWindowManager *wm, wmWindow *win);
void wm_window_close (bContext *C, wmWindowManager *wm, wmWindow *win);
diff --git a/source/blenderplayer/CMakeLists.txt b/source/blenderplayer/CMakeLists.txt
index 38ccb56c410..566bc88e46d 100644
--- a/source/blenderplayer/CMakeLists.txt
+++ b/source/blenderplayer/CMakeLists.txt
@@ -101,7 +101,7 @@ IF(UNIX)
bf_python
bf_gen_python
bf_blenlib
- bf_cineon
+ bf_cineon
bf_openexr
extern_libopenjpeg
bf_dds
diff --git a/source/blenderplayer/bad_level_call_stubs/Makefile b/source/blenderplayer/bad_level_call_stubs/Makefile
index 1d9f6a27327..49efd08c710 100644
--- a/source/blenderplayer/bad_level_call_stubs/Makefile
+++ b/source/blenderplayer/bad_level_call_stubs/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blenderplayer/bad_level_call_stubs/stubs.c b/source/blenderplayer/bad_level_call_stubs/stubs.c
index 4599f8ff17b..1688b6e3d96 100644
--- a/source/blenderplayer/bad_level_call_stubs/stubs.c
+++ b/source/blenderplayer/bad_level_call_stubs/stubs.c
@@ -156,7 +156,7 @@ void object_test_constraints (struct Object *owner){}
void ED_object_parent(struct Object *ob, struct Object *par, int type, const char *substr){}
void ED_object_constraint_set_active(struct Object *ob, struct bConstraint *con){}
void ED_node_composit_default(struct Scene *sce){}
-void *ED_region_draw_cb_activate(struct ARegionType *art, void(*draw)(const struct bContext *, struct ARegion *, void *), void *custumdata, int type){return 0;} /* XXX this one looks wierd */
+void *ED_region_draw_cb_activate(struct ARegionType *art, void(*draw)(const struct bContext *, struct ARegion *, void *), void *custumdata, int type){return 0;} /* XXX this one looks weird */
void *ED_region_draw_cb_customdata(void *handle){return 0;} /* XXX This one looks wrong also */
void ED_region_draw_cb_exit(struct ARegionType *art, void *handle){}
@@ -255,12 +255,22 @@ void ED_sequencer_update_view(struct bContext *C, int view){}
float ED_rollBoneToVector(struct EditBone *bone, float new_up_axis[3]){return 0.0f;}
void ED_space_image_size(struct SpaceImage *sima, int *width, int *height){}
+struct ListBase *ED_curve_editnurbs(struct Curve *cu){return NULL;}
+void free_curve_editNurb (struct Curve *cu){};
+
void EM_selectmode_set(struct EditMesh *em){}
int EM_texFaceCheck(struct EditMesh *em){return 0;}
struct MTFace *EM_get_active_mtface(struct EditMesh *em, struct EditFace **act_efa, struct MCol **mcol, int sloopy){return (struct MTFace *)NULL;}
void make_editMesh(struct Scene *scene, struct Object *ob){}
void load_editMesh(struct Scene *scene, struct Object *ob){}
+void make_editLatt(struct Object *obedit){}
+void load_editLatt(struct Object *obedit){}
+
+void load_editNurb (struct Object *obedit){}
+void make_editNurb (struct Object *obedit){}
+
+
void uiItemR(struct uiLayout *layout, struct PointerRNA *ptr, char *propname, int flag, char *name, int icon){}
struct PointerRNA uiItemFullO(struct uiLayout *layout, char *idname, char *name, int icon, struct IDProperty *properties, int context, int flag){struct PointerRNA a; return a;}
diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt
index a3977ffb16b..e05b9d33a4a 100644
--- a/source/creator/CMakeLists.txt
+++ b/source/creator/CMakeLists.txt
@@ -53,13 +53,25 @@ IF(WITH_QUICKTIME)
ADD_DEFINITIONS(-DWITH_QUICKTIME)
ENDIF(WITH_QUICKTIME)
-IF(WITH_OPENEXR)
+IF(WITH_IMAGE_OPENEXR)
ADD_DEFINITIONS(-DWITH_OPENEXR)
-ENDIF(WITH_OPENEXR)
+ENDIF(WITH_IMAGE_OPENEXR)
-IF(WITH_TIFF)
+IF(WITH_IMAGE_TIFF)
ADD_DEFINITIONS(-DWITH_TIFF)
-ENDIF(WITH_TIFF)
+ENDIF(WITH_IMAGE_TIFF)
+
+IF(WITH_IMAGE_DDS)
+ ADD_DEFINITIONS(-DWITH_DDS)
+ENDIF(WITH_IMAGE_DDS)
+
+IF(WITH_IMAGE_CINEON)
+ ADD_DEFINITIONS(-DWITH_CINEON)
+ENDIF(WITH_IMAGE_CINEON)
+
+IF(WITH_IMAGE_HDR)
+ ADD_DEFINITIONS(-DWITH_HDR)
+ENDIF(WITH_IMAGE_HDR)
IF(WITH_PYTHON)
INCLUDE_DIRECTORIES(../blender/python)
@@ -122,16 +134,16 @@ SET(TARGETDIR ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR})
ADD_CUSTOM_COMMAND(
TARGET blender POST_BUILD MAIN_DEPENDENCY blender
- COMMAND rm -Rf ${TARGETDIR}/.blender
- COMMAND mkdir ${TARGETDIR}/.blender/
- COMMAND cp ${CMAKE_SOURCE_DIR}/bin/.blender/.bfont.ttf ${TARGETDIR}/.blender/
+ COMMAND rm -Rf ${TARGETDIR}/${BLENDER_VERSION}
+ COMMAND mkdir ${TARGETDIR}/${BLENDER_VERSION}/
+ COMMAND cp ${CMAKE_SOURCE_DIR}/release/bin/.blender/.bfont.ttf ${TARGETDIR}/${BLENDER_VERSION}/
)
IF(WITH_INTERNATIONAL)
ADD_CUSTOM_COMMAND(
TARGET blender POST_BUILD MAIN_DEPENDENCY blender
- COMMAND cp ${CMAKE_SOURCE_DIR}/bin/.blender/.Blanguages ${TARGETDIR}/.blender/
- COMMAND cp -R ${CMAKE_SOURCE_DIR}/bin/.blender/locale ${TARGETDIR}/.blender/
+ COMMAND cp ${CMAKE_SOURCE_DIR}/release/bin/.blender/.Blanguages ${TARGETDIR}/${BLENDER_VERSION}/
+ COMMAND cp -R ${CMAKE_SOURCE_DIR}/release/bin/.blender/locale ${TARGETDIR}/${BLENDER_VERSION}/
)
ENDIF(WITH_INTERNATIONAL)
@@ -139,34 +151,34 @@ SET(TARGETDIR ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR})
ADD_CUSTOM_COMMAND(
TARGET blender POST_BUILD MAIN_DEPENDENCY blender
COMMENT "copying blender scripts..."
- COMMAND cp -R ${CMAKE_SOURCE_DIR}/release/scripts ${TARGETDIR}/.blender/
+ COMMAND cp -R ${CMAKE_SOURCE_DIR}/release/scripts ${TARGETDIR}/${BLENDER_VERSION}/
COMMAND find ${TARGETDIR} -name "*.py?" -prune -exec rm -rf {} "\;"
)
-
- # Copy the systems python into the install directory
- # Scons copy in tools/Blender.py
- ADD_CUSTOM_COMMAND(
- TARGET blender POST_BUILD MAIN_DEPENDENCY blender
- COMMENT "copying a subset of the systems python..."
-
- COMMAND mkdir ${TARGETDIR}/.blender/python # PYTHONPATH and PYTHONHOME is set here
- COMMAND mkdir ${TARGETDIR}/.blender/python/lib/
- COMMAND cp -R ${PYTHON_LIBPATH}/python${PYTHON_VERSION} ${TARGETDIR}/.blender/python/lib/
-
- COMMAND rm -rf ${TARGETDIR}/.blender/python/lib/python${PYTHON_VERSION}/distutils
- COMMAND rm -rf ${TARGETDIR}/.blender/python/lib/python${PYTHON_VERSION}/lib2to3
- COMMAND rm -rf ${TARGETDIR}/.blender/python/lib/python${PYTHON_VERSION}/idlelib
- COMMAND rm -rf ${TARGETDIR}/.blender/python/lib/python${PYTHON_VERSION}/tkinter
- COMMAND rm -rf ${TARGETDIR}/.blender/python/lib/python${PYTHON_VERSION}/config
-
- COMMAND rm -rf ${TARGETDIR}/.blender/python/lib/python${PYTHON_VERSION}/site-packages
- COMMAND mkdir ${TARGETDIR}/.blender/python/lib/python${PYTHON_VERSION}/site-packages # python needs it.
- COMMAND rm -f ${TARGETDIR}/.blender/python/lib/python${PYTHON_VERSION}/lib-dynload/_tkinter.so
- COMMAND find ${TARGETDIR}/.blender/python/lib/python${PYTHON_VERSION} -name "test" -prune -exec rm -rf {} "\;"
- COMMAND find ${TARGETDIR}/.blender/python/lib/python${PYTHON_VERSION} -name "*.py?" -exec rm -rf {} "\;"
- COMMAND find ${TARGETDIR}/.blender/python/lib/python${PYTHON_VERSION} -name "*.so"-exec strip -s {} "\;"
- )
-
+ IF(WITH_PYTHON_INSTALL)
+ # Copy the systems python into the install directory
+ # Scons copy in tools/Blender.py
+ ADD_CUSTOM_COMMAND(
+ TARGET blender POST_BUILD MAIN_DEPENDENCY blender
+ COMMENT "copying a subset of the systems python..."
+ COMMAND mkdir ${TARGETDIR}/${BLENDER_VERSION}/python # PYTHONPATH and PYTHONHOME is set here
+ COMMAND mkdir ${TARGETDIR}/${BLENDER_VERSION}/python/lib/
+ COMMAND cp -R ${PYTHON_LIBPATH}/python${PYTHON_VERSION} ${TARGETDIR}/${BLENDER_VERSION}/python/lib/
+
+ COMMAND rm -rf ${TARGETDIR}/${BLENDER_VERSION}/python/lib/python${PYTHON_VERSION}/distutils
+ COMMAND rm -rf ${TARGETDIR}/${BLENDER_VERSION}/python/lib/python${PYTHON_VERSION}/lib2to3
+ COMMAND rm -rf ${TARGETDIR}/${BLENDER_VERSION}/python/lib/python${PYTHON_VERSION}/idlelib
+ COMMAND rm -rf ${TARGETDIR}/${BLENDER_VERSION}/python/lib/python${PYTHON_VERSION}/tkinter
+ COMMAND rm -rf ${TARGETDIR}/${BLENDER_VERSION}/python/lib/python${PYTHON_VERSION}/config
+
+ COMMAND rm -rf ${TARGETDIR}/${BLENDER_VERSION}/python/lib/python${PYTHON_VERSION}/site-packages
+ COMMAND mkdir ${TARGETDIR}/${BLENDER_VERSION}/python/lib/python${PYTHON_VERSION}/site-packages # python needs it.
+
+ COMMAND rm -f ${TARGETDIR}/${BLENDER_VERSION}/python/lib/python${PYTHON_VERSION}/lib-dynload/_tkinter.so
+ COMMAND find ${TARGETDIR}/${BLENDER_VERSION}/python/lib/python${PYTHON_VERSION} -name "test" -prune -exec rm -rf {} "\;"
+ COMMAND find ${TARGETDIR}/${BLENDER_VERSION}/python/lib/python${PYTHON_VERSION} -name "*.py?" -exec rm -rf {} "\;"
+ COMMAND find ${TARGETDIR}/${BLENDER_VERSION}/python/lib/python${PYTHON_VERSION} -name "*.so"-exec strip -s {} "\;"
+ )
+ ENDIF(WITH_PYTHON_INSTALL)
ENDIF(WITH_PYTHON)
ADD_CUSTOM_COMMAND(
@@ -175,7 +187,7 @@ SET(TARGETDIR ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR})
)
- # Above we bundle a portable distrobution in ./bin
+ # Above we bundle a portable distribution in ./bin
# This is an optional "make install" which installs blender on the system.
INSTALL(
PROGRAMS ${TARGETDIR}/blender
@@ -198,6 +210,14 @@ SET(TARGETDIR ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR})
DESTINATION ${CMAKE_INSTALL_PREFIX}/share/pixmaps
)
INSTALL(
+ PROGRAMS ${CMAKE_SOURCE_DIR}/release/bin/blender-thumbnailer.py
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
+ )
+ INSTALL(
+ FILES ${CMAKE_SOURCE_DIR}/doc/blender.1
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man/man1
+ )
+ INSTALL(
DIRECTORY ${CMAKE_SOURCE_DIR}/release/text/
DESTINATION ${CMAKE_INSTALL_PREFIX}/share/doc/blender
PATTERN ".svn" EXCLUDE
@@ -206,10 +226,16 @@ SET(TARGETDIR ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR})
DIRECTORY ${CMAKE_SOURCE_DIR}/release/scripts/
DESTINATION ${BLENDERPATH}/scripts
PATTERN ".svn" EXCLUDE
+ PATTERN "*.pyc" EXCLUDE
)
+ INSTALL(
+ DIRECTORY ${CMAKE_SOURCE_DIR}/release/datafiles/brushicons/
+ DESTINATION ${BLENDERPATH}/datafiles/brushicons
+ PATTERN ".svn" EXCLUDE
+ )
IF(WITH_INTERNATIONAL)
INSTALL(
- DIRECTORY ${CMAKE_SOURCE_DIR}/bin/.blender/locale/
+ DIRECTORY ${CMAKE_SOURCE_DIR}/release/bin/.blender/locale/
DESTINATION ${BLENDERPATH}/datafiles/locale
PATTERN ".svn" EXCLUDE
)
@@ -230,26 +256,22 @@ SET(TARGETDIR ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR})
COMMAND cat ${SOURCEINFO} | sed s/VERSION/`cat ${CMAKE_SOURCE_DIR}/release/VERSION`/ | sed s/DATE/`date +'%Y-%b-%d'`/ > ${TARGETINFO}
COMMAND rm -Rf ${TARGETDIR}/blender.app/Contents/MacOS/datafiles
COMMAND mkdir ${TARGETDIR}/blender.app/Contents/MacOS/datafiles/
- COMMAND cp ${CMAKE_SOURCE_DIR}/bin/.blender/.bfont.ttf ${TARGETDIR}/blender.app/Contents/MacOS/datafiles/
+ COMMAND cp ${CMAKE_SOURCE_DIR}/release/bin/.blender/.bfont.ttf ${TARGETDIR}/blender.app/Contents/MacOS/datafiles/
)
IF(WITH_INTERNATIONAL)
ADD_CUSTOM_COMMAND(
TARGET blender POST_BUILD MAIN_DEPENDENCY blender
- COMMAND cp ${CMAKE_SOURCE_DIR}/bin/.blender/.Blanguages ${TARGETDIR}/blender.app/Contents/MacOS/datafiles/
- COMMAND cp -Rf ${CMAKE_SOURCE_DIR}/bin/.blender/locale ${TARGETDIR}/blender.app/Contents/MacOS/datafiles/
+ COMMAND cp ${CMAKE_SOURCE_DIR}/release/bin/.blender/.Blanguages ${TARGETDIR}/blender.app/Contents/MacOS/datafiles/
+ COMMAND cp -Rf ${CMAKE_SOURCE_DIR}/release/bin/.blender/locale ${TARGETDIR}/blender.app/Contents/MacOS/datafiles/
)
ENDIF(WITH_INTERNATIONAL)
IF(WITH_PYTHON)
- IF(WITH_LIBS10.5)
- SET(PYTHON_ZIP "python_${CMAKE_OSX_ARCHITECTURES}.zip")
- ELSE(WITH_LIBS10.5)
- SET(PYTHON_ZIP "python.zip")
- ENDIF(WITH_LIBS10.5)
+ SET(PYTHON_ZIP "python_${CMAKE_OSX_ARCHITECTURES}.zip")
ADD_CUSTOM_COMMAND(
TARGET blender POST_BUILD MAIN_DEPENDENCY blender
- COMMAND cp -Rf ${CMAKE_SOURCE_DIR}/release/scripts ${TARGETDIR}/blender.app/Contents/MacOS/scripts/
+ COMMAND cp -Rf ${CMAKE_SOURCE_DIR}/release/scripts ${TARGETDIR}/blender.app/Contents/MacOS/
COMMAND rm -Rf ${TARGETDIR}/blender.app/Contents/MacOS/python/
COMMAND mkdir ${TARGETDIR}/blender.app/Contents/MacOS/python/
COMMAND unzip -q ${LIBDIR}/release/${PYTHON_ZIP} -d ${TARGETDIR}/blender.app/Contents/MacOS/python/
@@ -272,9 +294,9 @@ SET(TARGETDIR ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR})
COMMAND if not exist \"${TARGETDIR}\\.blender\\locale\" mkdir \"${TARGETDIR}\\.blender\\locale\"
COMMAND if not exist \"${TARGETDIR}\\.blender\\scripts\" mkdir \"${TARGETDIR}\\.blender\\scripts\"
COMMAND if not exist \"${TARGETDIR}\\plugins\" mkdir \"${TARGETDIR}\\plugins\"
- COMMAND copy /Y \"${CMAKE_SOURCE_DIR}\\bin\\.blender\\.Blanguages\" \"${TARGETDIR}\\.blender\\\"
- COMMAND copy /Y \"${CMAKE_SOURCE_DIR}\\bin\\.blender\\.bfont.ttf\" \"${TARGETDIR}\\.blender\\\"
- COMMAND xcopy /E /Y \"${CMAKE_SOURCE_DIR}\\bin\\.blender\\locale\\*.*\" \"${TARGETDIR}\\.blender\\locale\"
+ COMMAND copy /Y \"${CMAKE_SOURCE_DIR}\\release\\bin\\.blender\\.Blanguages\" \"${TARGETDIR}\\.blender\\\"
+ COMMAND copy /Y \"${CMAKE_SOURCE_DIR}\\release\\bin\\.blender\\.bfont.ttf\" \"${TARGETDIR}\\.blender\\\"
+ COMMAND xcopy /E /Y \"${CMAKE_SOURCE_DIR}\\release\\bin\\.blender\\locale\\*.*\" \"${TARGETDIR}\\.blender\\locale\"
COMMAND xcopy /E /Y \"${CMAKE_SOURCE_DIR}\\release\\scripts\\*.*\" \"${TARGETDIR}\\.blender\\scripts\"
COMMAND xcopy /E /Y \"${CMAKE_SOURCE_DIR}\\release\\plugins\\*.*\" \"${TARGETDIR}\\plugins\"
COMMAND copy /Y \"${CMAKE_SOURCE_DIR}\\release\\text\\*.*\" \"${TARGETDIR}\"
@@ -354,9 +376,9 @@ FILE(READ ${CMAKE_BINARY_DIR}/cmake_blender_libs.txt BLENDER_LINK_LIBS)
SET(BLENDER_LINK_LIBS bf_nodes ${BLENDER_LINK_LIBS} bf_windowmanager blender_render)
-IF(WITH_ELBEEM)
+IF(WITH_FLUID)
SET(BLENDER_LINK_LIBS ${BLENDER_LINK_LIBS} bf_elbeem)
-ENDIF(WITH_ELBEEM)
+ENDIF(WITH_FLUID)
IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
SET(BLENDER_LINK_LIBS ${BLENDER_LINK_LIBS} extern_binreloc)
diff --git a/source/creator/Makefile b/source/creator/Makefile
index 34ebc5fa305..08f732ad486 100644
--- a/source/creator/Makefile
+++ b/source/creator/Makefile
@@ -17,7 +17,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
@@ -73,4 +73,12 @@ ifeq ($(WITH_TIFF), true)
CPPFLAGS += -DWITH_TIFF
endif
+ifeq ($(WITH_CINEON), true)
+ CPPFLAGS += -DWITH_CINEON
+endif
+
+ifeq ($(WITH_HDR), true)
+ CPPFLAGS += -DWITH_HDR
+endif
+
CPPFLAGS += -I$(OPENGL_HEADERS)
diff --git a/source/creator/SConscript b/source/creator/SConscript
index 815bd351f69..01e62d33269 100644
--- a/source/creator/SConscript
+++ b/source/creator/SConscript
@@ -35,9 +35,6 @@ if env['WITH_BF_PYTHON']:
defs.append('_DEBUG')
else:
defs.append('DISABLE_PYTHON')
-
-if env['WITH_BF_FHS']: # /usr -> /usr/share/blender/2.5
- defs.append('BLENDERPATH=\\"' + os.path.join(env['BF_INSTALLDIR'], 'share', 'blender', env['BF_VERSION']) + '\\"')
if env['BF_BUILDINFO']:
defs.append('BUILD_DATE')
diff --git a/source/creator/creator.c b/source/creator/creator.c
index 199d99efaad..492864ec05a 100644
--- a/source/creator/creator.c
+++ b/source/creator/creator.c
@@ -134,14 +134,6 @@ extern int pluginapi_force_ref(void); /* from blenpluginapi:pluginapi.c */
char bprogname[FILE_MAXDIR+FILE_MAXFILE]; /* from blenpluginapi:pluginapi.c */
char btempdir[FILE_MAXDIR+FILE_MAXFILE];
-/* unix path support.
- * defined by the compiler. eg "/usr/share/blender/2.5" "/opt/blender/2.5" */
-#ifndef BLENDERPATH
-#define BLENDERPATH ""
-#endif
-
-char blender_path[FILE_MAXDIR+FILE_MAXFILE] = BLENDERPATH;
-
/* Initialise callbacks for the modules that need them */
static void setCallbacks(void);
@@ -292,20 +284,22 @@ static int print_help(int argc, char **argv, void *data)
printf ("\t\t\"blender --background test.blend --render-output /tmp --render-frame 1\" works as expected.\n\n");
printf ("\nEnvironment Variables:\n");
- printf (" $HOME\t\t\tStore files such as .blender/ .B.blend .Bfs .Blog here.\n");
- printf (" $BLENDERPATH System directory to use for data files and scripts.\n");
- printf (" For this build of blender the default $BLENDERPATH is...\n");
- printf (" \"%s\"\n", blender_path);
- printf (" setting the $BLENDERPATH will override this\n");
+ printf (" $BLENDER_USER_CONFIG Directory for user configuration files.\n");
+ printf (" $BLENDER_SYSTEM_CONFIG Directory for system wide configuration files.\n");
+ printf (" $BLENDER_USER_SCRIPTS Directory for user scripts.\n");
+ printf (" $BLENDER_SYSTEM_SCRIPTS Directory for system wide scripts.\n");
+ printf (" $BLENDER_USER_DATAFILES Directory for user data files (icons, translations, ..).\n");
+ printf (" $BLENDER_SYSTEM_DATAFILES Directory for system wide data files.\n");
+ printf (" $BLENDER_SYSTEM_PYTHON Directory for system python libraries.\n");
#ifdef WIN32
- printf (" $TEMP Store temporary files here.\n");
+ printf (" $TEMP Store temporary files here.\n");
#else
- printf (" $TMP or $TMPDIR Store temporary files here.\n");
+ printf (" $TMP or $TMPDIR Store temporary files here.\n");
#endif
#ifndef DISABLE_SDL
- printf (" $SDL_AUDIODRIVER LibSDL audio driver - alsa, esd, alsa, dma.\n");
+ printf (" $SDL_AUDIODRIVER LibSDL audio driver - alsa, esd, dma.\n");
#endif
- printf (" $PYTHONHOME Path to the python directory, eg. /usr/lib/python.\n\n");
+ printf (" $PYTHONHOME Path to the python directory, eg. /usr/lib/python.\n\n");
exit(0);
@@ -596,7 +590,9 @@ static int set_image_type(int argc, char **argv, void *data)
else if (!strcmp(imtype,"AVICODEC")) scene->r.imtype = R_AVICODEC;
else if (!strcmp(imtype,"QUICKTIME")) scene->r.imtype = R_QUICKTIME;
else if (!strcmp(imtype,"BMP")) scene->r.imtype = R_BMP;
+#ifdef WITH_HDR
else if (!strcmp(imtype,"HDR")) scene->r.imtype = R_RADHDR;
+#endif
#ifdef WITH_TIFF
else if (!strcmp(imtype,"TIFF")) scene->r.imtype = R_TIFF;
#endif
@@ -606,8 +602,10 @@ static int set_image_type(int argc, char **argv, void *data)
#endif
else if (!strcmp(imtype,"MPEG")) scene->r.imtype = R_FFMPEG;
else if (!strcmp(imtype,"FRAMESERVER")) scene->r.imtype = R_FRAMESERVER;
+#ifdef WITH_CINEON
else if (!strcmp(imtype,"CINEON")) scene->r.imtype = R_CINEON;
else if (!strcmp(imtype,"DPX")) scene->r.imtype = R_DPX;
+#endif
#if WITH_OPENJPEG
else if (!strcmp(imtype,"JP2")) scene->r.imtype = R_JP2;
#endif
@@ -715,6 +713,7 @@ static int render_frame(int argc, char **argv, void *data)
{
bContext *C = data;
if (CTX_data_scene(C)) {
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
if (argc > 1) {
@@ -738,7 +737,7 @@ static int render_frame(int argc, char **argv, void *data)
frame = MIN2(MAXFRAME, MAX2(MINAFRAME, frame));
- RE_BlenderAnim(re, scene, scene->lay, frame, frame, scene->r.frame_step, &reports);
+ RE_BlenderAnim(re, bmain, scene, scene->lay, frame, frame, scene->r.frame_step, &reports);
return 1;
} else {
printf("\nError: frame number must follow '-f / --render-frame'.\n");
@@ -754,11 +753,12 @@ static int render_animation(int argc, char **argv, void *data)
{
bContext *C = data;
if (CTX_data_scene(C)) {
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
Render *re= RE_NewRender(scene->id.name);
ReportList reports;
BKE_reports_init(&reports, RPT_PRINT);
- RE_BlenderAnim(re, scene, scene->lay, scene->r.sfra, scene->r.efra, scene->r.frame_step, &reports);
+ RE_BlenderAnim(re, bmain, scene, scene->lay, scene->r.sfra, scene->r.efra, scene->r.frame_step, &reports);
} else {
printf("\nError: no blend loaded. cannot use '-a'.\n");
}
@@ -769,7 +769,7 @@ static int set_scene(int argc, char **argv, void *data)
{
if(argc > 1) {
bContext *C= data;
- Scene *sce= set_scene_name(argv[1]);
+ Scene *sce= set_scene_name(CTX_data_main(C), argv[1]);
if(sce) {
CTX_data_scene_set(C, sce);
}
@@ -1069,12 +1069,6 @@ int main(int argc, char **argv)
BLI_where_am_i(bprogname, argv[0]);
- { /* override the hard coded blender path */
- char *blender_path_env = getenv("BLENDERPATH");
- if(blender_path_env)
- BLI_strncpy(blender_path, blender_path_env, sizeof(blender_path));
- }
-
#ifdef BUILD_DATE
strip_quotes(build_date);
strip_quotes(build_time);
@@ -1137,7 +1131,7 @@ int main(int argc, char **argv)
WM_init(C, argc, argv);
/* this is properly initialized with user defs, but this is default */
- BLI_where_is_temp( btempdir, 1 ); /* call after loading the .B.blend so we can read U.tempdir */
+ BLI_where_is_temp( btempdir, 1 ); /* call after loading the startup.blend so we can read U.tempdir */
#ifndef DISABLE_SDL
BLI_setenv("SDL_VIDEODRIVER", "dummy");
@@ -1155,7 +1149,7 @@ int main(int argc, char **argv)
WM_init(C, argc, argv);
- BLI_where_is_temp( btempdir, 0 ); /* call after loading the .B.blend so we can read U.tempdir */
+ BLI_where_is_temp( btempdir, 0 ); /* call after loading the startup.blend so we can read U.tempdir */
}
#ifndef DISABLE_PYTHON
/**
@@ -1186,8 +1180,10 @@ int main(int argc, char **argv)
else {
if((G.fileflags & G_FILE_AUTOPLAY) && (G.f & G_SCRIPT_AUTOEXEC))
- WM_init_game(C);
-
+ {
+ if(WM_init_game(C))
+ return 0;
+ }
else if(!G.file_loaded)
WM_init_splash(C);
}
diff --git a/source/darwin/Makefile b/source/darwin/Makefile
index 6007ff4d91c..5c68f43f606 100644
--- a/source/darwin/Makefile
+++ b/source/darwin/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
@@ -45,11 +45,11 @@ all::
@chmod +x $(DIR)/bin/$(APPLICATION).app/Contents/MacOS/$(APPLICATION)
ifeq ($(APPLICATION), blender)
@echo "---> copying message files"
- @cp -R $(NANBLENDERHOME)/bin/.blender/locale $(DIR)/bin/$(APPLICATION).app/Contents/Resources
+ @cp -R $(NANBLENDERHOME)/release/bin/.blender/locale $(DIR)/bin/$(APPLICATION).app/Contents/Resources
@echo "---> copying .Blanguages"
- @cp $(NANBLENDERHOME)/bin/.blender/.Blanguages $(DIR)/bin/$(APPLICATION).app/Contents/Resources
+ @cp $(NANBLENDERHOME)/release/bin/.blender/.Blanguages $(DIR)/bin/$(APPLICATION).app/Contents/Resources
@echo "---> copying .blender/ scripts"
- @cp -R $(NANBLENDERHOME)/bin/.blender $(DIR)/bin/$(APPLICATION).app/Contents/MacOS
+ @cp -R $(NANBLENDERHOME)/release/bin/.blender $(DIR)/bin/$(APPLICATION).app/Contents/MacOS
@cp -R $(NANBLENDERHOME)/release/scripts $(DIR)/bin/$(APPLICATION).app/Contents/MacOS/.blender/
@echo "---> copying python modules"
@mkdir $(DIR)/bin/$(APPLICATION).app/Contents/MacOS/.blender/python
diff --git a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
index f5b43fa6809..20f3b782d33 100644
--- a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
+++ b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
@@ -388,9 +388,16 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c
ketsjiengine->InitDome(scene->gm.dome.res, scene->gm.dome.mode, scene->gm.dome.angle, scene->gm.dome.resbuf, scene->gm.dome.tilt, scene->gm.dome.warptext);
// initialize 3D Audio Settings
- AUD_set3DSetting(AUD_3DS_SPEED_OF_SOUND, scene->audio.speed_of_sound);
- AUD_set3DSetting(AUD_3DS_DOPPLER_FACTOR, scene->audio.doppler_factor);
- AUD_set3DSetting(AUD_3DS_DISTANCE_MODEL, scene->audio.distance_model);
+//BMESH_TODO merge issue!
+// AUD_setSpeedOfSound(scene->audio.speed_of_sound);
+// AUD_setDopplerFactor(scene->audio.doppler_factor);
+// AUD_setDistanceModel(AUD_DistanceModel(scene->audio.distance_model));
+
+ // from see blender.c:
+ // FIXME: this version patching should really be part of the file-reading code,
+ // but we still get too many unrelated data-corruption crashes otherwise...
+ if (blenderdata->versionfile < 250)
+ do_versions_ipos_to_animato(blenderdata);
if (sceneconverter)
{
diff --git a/source/gameengine/BlenderRoutines/CMakeLists.txt b/source/gameengine/BlenderRoutines/CMakeLists.txt
index 625ad006e0c..57d28561647 100644
--- a/source/gameengine/BlenderRoutines/CMakeLists.txt
+++ b/source/gameengine/BlenderRoutines/CMakeLists.txt
@@ -50,4 +50,3 @@ ELSE(WITH_PYTHON)
ENDIF(WITH_PYTHON)
BLENDERLIB(bf_blroutines "${SRC}" "${INC}")
-#env.BlenderLib ( 'bf_bloutines', sources, Split(incs), [], libtype=['game', 'game2', 'player'], priority=[0, 0, 55] , compileflags=cxxflags)
diff --git a/source/gameengine/BlenderRoutines/Makefile b/source/gameengine/BlenderRoutines/Makefile
index 4a437aff97d..3d0f5344c74 100644
--- a/source/gameengine/BlenderRoutines/Makefile
+++ b/source/gameengine/BlenderRoutines/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/Converter/BL_ArmatureChannel.cpp b/source/gameengine/Converter/BL_ArmatureChannel.cpp
index c0b422042f9..6045de60001 100644
--- a/source/gameengine/Converter/BL_ArmatureChannel.cpp
+++ b/source/gameengine/Converter/BL_ArmatureChannel.cpp
@@ -108,19 +108,19 @@ PyAttributeDef BL_ArmatureChannel::Attributes[] = {
/* attributes directly taken from bPoseChannel */
PyAttributeDef BL_ArmatureChannel::AttributesPtr[] = {
KX_PYATTRIBUTE_CHAR_RO("name",bPoseChannel,name),
- KX_PYATTRIBUTE_FLAG_RO("has_ik",bPoseChannel,flag, POSE_CHAIN),
+ KX_PYATTRIBUTE_FLAG_RO("is_in_ik_chain",bPoseChannel,flag, POSE_CHAIN),
KX_PYATTRIBUTE_FLAG_NEGATIVE_RO("ik_dof_x",bPoseChannel,ikflag, BONE_IK_NO_XDOF),
KX_PYATTRIBUTE_FLAG_NEGATIVE_RO("ik_dof_y",bPoseChannel,ikflag, BONE_IK_NO_YDOF),
KX_PYATTRIBUTE_FLAG_NEGATIVE_RO("ik_dof_z",bPoseChannel,ikflag, BONE_IK_NO_ZDOF),
- KX_PYATTRIBUTE_FLAG_RO("ik_limit_x",bPoseChannel,ikflag, BONE_IK_XLIMIT),
- KX_PYATTRIBUTE_FLAG_RO("ik_limit_y",bPoseChannel,ikflag, BONE_IK_YLIMIT),
- KX_PYATTRIBUTE_FLAG_RO("ik_limit_z",bPoseChannel,ikflag, BONE_IK_ZLIMIT),
- KX_PYATTRIBUTE_FLAG_RO("ik_rot_control",bPoseChannel,ikflag, BONE_IK_ROTCTL),
- KX_PYATTRIBUTE_FLAG_RO("ik_lin_control",bPoseChannel,ikflag, BONE_IK_LINCTL),
+ KX_PYATTRIBUTE_FLAG_RO("use_ik_limit_x",bPoseChannel,ikflag, BONE_IK_XLIMIT),
+ KX_PYATTRIBUTE_FLAG_RO("use_ik_limit_y",bPoseChannel,ikflag, BONE_IK_YLIMIT),
+ KX_PYATTRIBUTE_FLAG_RO("use_ik_limit_z",bPoseChannel,ikflag, BONE_IK_ZLIMIT),
+ KX_PYATTRIBUTE_FLAG_RO("use_ik_rotation_control",bPoseChannel,ikflag, BONE_IK_ROTCTL),
+ KX_PYATTRIBUTE_FLAG_RO("use_ik_linear_control",bPoseChannel,ikflag, BONE_IK_LINCTL),
KX_PYATTRIBUTE_FLOAT_VECTOR_RW("location",-FLT_MAX,FLT_MAX,bPoseChannel,loc,3),
KX_PYATTRIBUTE_FLOAT_VECTOR_RW("scale",-FLT_MAX,FLT_MAX,bPoseChannel,size,3),
KX_PYATTRIBUTE_FLOAT_VECTOR_RW("rotation_quaternion",-1.0f,1.0f,bPoseChannel,quat,4),
- KX_PYATTRIBUTE_FLOAT_VECTOR_RW("rotaion_euler",-10.f,10.f,bPoseChannel,eul,3),
+ KX_PYATTRIBUTE_FLOAT_VECTOR_RW("rotation_euler",-10.f,10.f,bPoseChannel,eul,3),
KX_PYATTRIBUTE_SHORT_RW("rotation_mode",0,ROT_MODE_MAX-1,false,bPoseChannel,rotmode),
KX_PYATTRIBUTE_FLOAT_MATRIX_RO("channel_matrix",bPoseChannel,chan_mat,4),
KX_PYATTRIBUTE_FLOAT_MATRIX_RO("pose_matrix",bPoseChannel,pose_mat,4),
@@ -136,8 +136,8 @@ PyAttributeDef BL_ArmatureChannel::AttributesPtr[] = {
KX_PYATTRIBUTE_FLOAT_RO("ik_stiffness_y",bPoseChannel,stiffness[1]),
KX_PYATTRIBUTE_FLOAT_RO("ik_stiffness_z",bPoseChannel,stiffness[2]),
KX_PYATTRIBUTE_FLOAT_RO("ik_stretch",bPoseChannel,ikstretch),
- KX_PYATTRIBUTE_FLOAT_RW("ik_rot_weight",0,1.0f,bPoseChannel,ikrotweight),
- KX_PYATTRIBUTE_FLOAT_RW("ik_lin_weight",0,1.0f,bPoseChannel,iklinweight),
+ KX_PYATTRIBUTE_FLOAT_RW("ik_rotation_weight",0,1.0f,bPoseChannel,ikrotweight),
+ KX_PYATTRIBUTE_FLOAT_RW("ik_linear_weight",0,1.0f,bPoseChannel,iklinweight),
KX_PYATTRIBUTE_RW_FUNCTION("joint_rotation",BL_ArmatureChannel,py_attr_get_joint_rotation,py_attr_set_joint_rotation),
{ NULL } //Sentinel
};
@@ -432,13 +432,13 @@ PyAttributeDef BL_ArmatureBone::AttributesPtr[] = {
KX_PYATTRIBUTE_FLOAT_MATRIX_RO("arm_mat",Bone,arm_mat,4),
KX_PYATTRIBUTE_FLOAT_MATRIX_RO("bone_mat",Bone,bone_mat,4),
KX_PYATTRIBUTE_RO_FUNCTION("parent",BL_ArmatureBone,py_bone_get_parent),
- KX_PYATTRIBUTE_RO_FUNCTION("children",BL_ArmatureBone,py_bone_get_parent),
+ KX_PYATTRIBUTE_RO_FUNCTION("children",BL_ArmatureBone,py_bone_get_children),
{ NULL } //Sentinel
};
PyObject *BL_ArmatureBone::py_bone_get_parent(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
{
- Bone* bone = reinterpret_cast<Bone*>BGE_PROXY_PTR(self);
+ Bone* bone = reinterpret_cast<Bone*>(self);
if (bone->parent) {
// create a proxy unconnected to any GE object
return NewProxyPlus_Ext(NULL,&Type,bone->parent,false);
@@ -448,7 +448,7 @@ PyObject *BL_ArmatureBone::py_bone_get_parent(void *self, const struct KX_PYATTR
PyObject *BL_ArmatureBone::py_bone_get_children(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
{
- Bone* bone = reinterpret_cast<Bone*>BGE_PROXY_PTR(self);
+ Bone* bone = reinterpret_cast<Bone*>(self);
Bone* child;
int count = 0;
for (child=(Bone*)bone->childbase.first; child; child=(Bone*)child->next)
diff --git a/source/gameengine/Converter/BL_ArmatureConstraint.cpp b/source/gameengine/Converter/BL_ArmatureConstraint.cpp
index 582d8454ba7..b520250ac5d 100644
--- a/source/gameengine/Converter/BL_ArmatureConstraint.cpp
+++ b/source/gameengine/Converter/BL_ArmatureConstraint.cpp
@@ -267,8 +267,8 @@ PyAttributeDef BL_ArmatureConstraint::Attributes[] = {
KX_PYATTRIBUTE_RO_FUNCTION("name",BL_ArmatureConstraint,py_attr_getattr),
KX_PYATTRIBUTE_RW_FUNCTION("enforce",BL_ArmatureConstraint,py_attr_getattr,py_attr_setattr),
KX_PYATTRIBUTE_RW_FUNCTION("headtail",BL_ArmatureConstraint,py_attr_getattr,py_attr_setattr),
- KX_PYATTRIBUTE_RO_FUNCTION("lin_error",BL_ArmatureConstraint,py_attr_getattr),
- KX_PYATTRIBUTE_RO_FUNCTION("rot_error",BL_ArmatureConstraint,py_attr_getattr),
+ KX_PYATTRIBUTE_RO_FUNCTION("error_location",BL_ArmatureConstraint,py_attr_getattr),
+ KX_PYATTRIBUTE_RO_FUNCTION("error_rotation",BL_ArmatureConstraint,py_attr_getattr),
KX_PYATTRIBUTE_RW_FUNCTION("target",BL_ArmatureConstraint,py_attr_getattr,py_attr_setattr),
KX_PYATTRIBUTE_RW_FUNCTION("subtarget",BL_ArmatureConstraint,py_attr_getattr,py_attr_setattr),
KX_PYATTRIBUTE_RW_FUNCTION("active",BL_ArmatureConstraint,py_attr_getattr,py_attr_setattr),
diff --git a/source/gameengine/Converter/BL_ArmatureObject.cpp b/source/gameengine/Converter/BL_ArmatureObject.cpp
index 1da07b73dec..5d05dfcff52 100644
--- a/source/gameengine/Converter/BL_ArmatureObject.cpp
+++ b/source/gameengine/Converter/BL_ArmatureObject.cpp
@@ -30,6 +30,7 @@
#include "BL_ArmatureObject.h"
#include "BL_ActionActuator.h"
#include "KX_BlenderSceneConverter.h"
+#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_ghash.h"
#include "BLI_math.h"
@@ -113,6 +114,11 @@ void game_copy_pose(bPose **dst, bPose *src, int copy_constraint) {
pchan->constraints.first = NULL;
pchan->constraints.last = NULL;
}
+
+ // fails to link, props are not used in the BGE yet.
+ /* if(pchan->prop)
+ pchan->prop= IDP_CopyProperty(pchan->prop); */
+ pchan->prop= NULL;
}
BLI_ghash_free(ghash, NULL, NULL);
diff --git a/source/gameengine/Converter/CMakeLists.txt b/source/gameengine/Converter/CMakeLists.txt
index 26689be644f..97c367dd1f1 100644
--- a/source/gameengine/Converter/CMakeLists.txt
+++ b/source/gameengine/Converter/CMakeLists.txt
@@ -70,4 +70,3 @@ ELSE(WITH_PYTHON)
ENDIF(WITH_PYTHON)
BLENDERLIB(bf_converter "${SRC}" "${INC}")
-#env.BlenderLib ( 'bf_converter', sources, Split(incs), [], libtype=['game','player'], priority=[5,70] )
diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
index 0575c55846b..b4ddc4f9e54 100644
--- a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
+++ b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
@@ -100,6 +100,7 @@ extern "C"
extern "C" {
#include "BKE_context.h"
#include "BLO_readfile.h"
+ #include "BKE_idcode.h"
#include "BKE_report.h"
#include "DNA_space_types.h"
#include "DNA_windowmanager_types.h" /* report api */
@@ -938,7 +939,7 @@ bool KX_BlenderSceneConverter::LinkBlendFile(const char *path, char *group, KX_S
Main *main_tmp= NULL; /* created only for linking, then freed */
LinkNode *names = NULL;
BlendHandle *bpy_openlib = NULL; /* ptr to the open .blend file */
- int idcode= BLO_idcode_from_name(group);
+ int idcode= BKE_idcode_from_name(group);
short flag= 0; /* dont need any special options */
ReportList reports;
static char err_local[255];
diff --git a/source/gameengine/Converter/KX_ConvertControllers.cpp b/source/gameengine/Converter/KX_ConvertControllers.cpp
index 858db6d76a1..a6b62ecb7b0 100644
--- a/source/gameengine/Converter/KX_ConvertControllers.cpp
+++ b/source/gameengine/Converter/KX_ConvertControllers.cpp
@@ -176,11 +176,11 @@ void BL_ConvertControllers(
/* let the controller print any warnings here when importing */
pyctrl->SetScriptText(STR_String(pycont->module));
pyctrl->SetScriptName(pycont->module); /* will be something like module.func so using it as the name is OK */
- }
- if(pycont->flag & CONT_PY_DEBUG) {
- printf("\nDebuging \"%s\", module for object %s\n\texpect worse performance.\n", pycont->module, blenderobject->id.name+2);
- pyctrl->SetDebug(true);
+ if(pycont->flag & CONT_PY_DEBUG) {
+ printf("\nDebuging \"%s\", module for object %s\n\texpect worse performance.\n", pycont->module, blenderobject->id.name+2);
+ pyctrl->SetDebug(true);
+ }
}
#endif // DISABLE_PYTHON
diff --git a/source/gameengine/Converter/Makefile b/source/gameengine/Converter/Makefile
index b6da47930d3..142841b2b36 100644
--- a/source/gameengine/Converter/Makefile
+++ b/source/gameengine/Converter/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/Expressions/CMakeLists.txt b/source/gameengine/Expressions/CMakeLists.txt
index 41f771e12bd..85b5daa3b4a 100644
--- a/source/gameengine/Expressions/CMakeLists.txt
+++ b/source/gameengine/Expressions/CMakeLists.txt
@@ -43,4 +43,3 @@ ELSE(WITH_PYTHON)
ENDIF(WITH_PYTHON)
BLENDERLIB(bf_expressions "${SRC}" "${INC}")
-#env.BlenderLib ( 'bf_expressions', sources, Split(incs), [], libtype=['game','player'], priority = [45,125] )
diff --git a/source/gameengine/Expressions/Makefile b/source/gameengine/Expressions/Makefile
index 09512c3ae87..892a8c2b246 100644
--- a/source/gameengine/Expressions/Makefile
+++ b/source/gameengine/Expressions/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/Expressions/PyObjectPlus.cpp b/source/gameengine/Expressions/PyObjectPlus.cpp
index dbfa4a36ec6..32bf4ba95c4 100644
--- a/source/gameengine/Expressions/PyObjectPlus.cpp
+++ b/source/gameengine/Expressions/PyObjectPlus.cpp
@@ -166,7 +166,7 @@ PyObject * PyObjectPlus::py_base_new(PyTypeObject *type, PyObject *args, PyObjec
return NULL;
}
- /* use base_type rather then Py_TYPE(base) because we could alredy be subtyped */
+ /* use base_type rather then Py_TYPE(base) because we could already be subtyped */
if(!PyType_IsSubtype(type, base_type)) {
PyErr_Format(PyExc_TypeError, "can't subclass blender game type <%s> from <%s> because it is not a subclass", base_type->tp_name, type->tp_name);
return NULL;
@@ -278,7 +278,7 @@ PyObject *PyObjectPlus::py_get_attrdef(PyObject *self_py, const PyAttributeDef *
// the attribute has no field correspondance, handover processing to function.
if (attrdef->m_getFunction == NULL)
return NULL;
- return (*attrdef->m_getFunction)(ref, attrdef);
+ return (*attrdef->m_getFunction)(ptr, attrdef);
}
ptr += attrdef->m_offset;
if (attrdef->m_length > 1)
diff --git a/source/gameengine/Expressions/PyObjectPlus.h b/source/gameengine/Expressions/PyObjectPlus.h
index 7afa85c8c31..625549a272e 100644
--- a/source/gameengine/Expressions/PyObjectPlus.h
+++ b/source/gameengine/Expressions/PyObjectPlus.h
@@ -319,9 +319,6 @@ typedef struct KX_PYATTRIBUTE_DEF {
} m_typeCheck;
} PyAttributeDef;
-#define KX_PYATTRIBUTE_DUMMY(name) \
- { name, KX_PYATTRIBUTE_TYPE_DUMMY, KX_PYATTRIBUTE_RO, 0, 0, 0.f, 0.f, false, false, 0, 0, 1, NULL, NULL, NULL, {NULL, NULL, NULL, NULL, NULL, NULL, NULL} }
-
#define KX_PYATTRIBUTE_BOOL_RW(name,object,field) \
{ name, KX_PYATTRIBUTE_TYPE_BOOL, KX_PYATTRIBUTE_RW, 0, 1, 0.f, 0.f, false, false, offsetof(object,field), 0, 1, NULL, NULL, NULL, {&((object *)0)->field, NULL, NULL, NULL, NULL, NULL, NULL} }
#define KX_PYATTRIBUTE_BOOL_RW_CHECK(name,object,field,function) \
diff --git a/source/gameengine/GameLogic/CMakeLists.txt b/source/gameengine/GameLogic/CMakeLists.txt
index 3ffba14ec95..93183dafeee 100644
--- a/source/gameengine/GameLogic/CMakeLists.txt
+++ b/source/gameengine/GameLogic/CMakeLists.txt
@@ -49,4 +49,3 @@ ELSE(WITH_PYTHON)
ENDIF(WITH_PYTHON)
BLENDERLIB(bf_logic "${SRC}" "${INC}")
-#env.BlenderLib ( 'bf_logic', sources, Split(incs), [], libtype=['game','player'], priority=[30, 110] )
diff --git a/source/gameengine/GameLogic/Joystick/Makefile b/source/gameengine/GameLogic/Joystick/Makefile
index 02def1cec62..5ab297824dd 100644
--- a/source/gameengine/GameLogic/Joystick/Makefile
+++ b/source/gameengine/GameLogic/Joystick/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/GameLogic/Makefile b/source/gameengine/GameLogic/Makefile
index ba1e1c25ee7..9c8bd73cdc0 100644
--- a/source/gameengine/GameLogic/Makefile
+++ b/source/gameengine/GameLogic/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/GameLogic/SCA_ISensor.cpp b/source/gameengine/GameLogic/SCA_ISensor.cpp
index bff02326c9c..fada69848b2 100644
--- a/source/gameengine/GameLogic/SCA_ISensor.cpp
+++ b/source/gameengine/GameLogic/SCA_ISensor.cpp
@@ -357,9 +357,8 @@ PyAttributeDef SCA_ISensor::Attributes[] = {
KX_PYATTRIBUTE_RO_FUNCTION("triggered", SCA_ISensor, pyattr_get_triggered),
KX_PYATTRIBUTE_RO_FUNCTION("positive", SCA_ISensor, pyattr_get_positive),
KX_PYATTRIBUTE_RO_FUNCTION("status", SCA_ISensor, pyattr_get_status),
- //KX_PYATTRIBUTE_TODO("links"),
- //KX_PYATTRIBUTE_TODO("posTicks"),
- //KX_PYATTRIBUTE_TODO("negTicks"),
+ KX_PYATTRIBUTE_RO_FUNCTION("pos_ticks", SCA_ISensor, pyattr_get_posTicks),
+ KX_PYATTRIBUTE_RO_FUNCTION("neg_ticks", SCA_ISensor, pyattr_get_negTicks),
{ NULL } //Sentinel
};
@@ -401,6 +400,18 @@ PyObject* SCA_ISensor::pyattr_get_status(void *self_v, const KX_PYATTRIBUTE_DEF
return PyLong_FromSsize_t(status);
}
+PyObject* SCA_ISensor::pyattr_get_posTicks(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ SCA_ISensor* self= static_cast<SCA_ISensor*>(self_v);
+ return PyLong_FromLong(self->GetPosTicks());
+}
+
+PyObject* SCA_ISensor::pyattr_get_negTicks(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ SCA_ISensor* self= static_cast<SCA_ISensor*>(self_v);
+ return PyLong_FromLong(self->GetNegTicks());
+}
+
int SCA_ISensor::pyattr_check_level(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
{
SCA_ISensor* self= static_cast<SCA_ISensor*>(self_v);
diff --git a/source/gameengine/GameLogic/SCA_ISensor.h b/source/gameengine/GameLogic/SCA_ISensor.h
index 42d06d856b6..2d3a3ef08a0 100644
--- a/source/gameengine/GameLogic/SCA_ISensor.h
+++ b/source/gameengine/GameLogic/SCA_ISensor.h
@@ -167,6 +167,18 @@ public:
return m_prev_state;
}
+ /** get the number of ticks since the last positive pulse */
+ int GetPosTicks()
+ {
+ return m_pos_ticks;
+ }
+
+ /** get the number of ticks since the last negative pulse */
+ int GetNegTicks()
+ {
+ return m_neg_ticks;
+ }
+
/** Resume sensing. */
void Resume();
@@ -185,6 +197,9 @@ public:
static PyObject* pyattr_get_triggered(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
static PyObject* pyattr_get_positive(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
static PyObject* pyattr_get_status(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_posTicks(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_negTicks(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+
static int pyattr_check_level(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
static int pyattr_check_tap(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
diff --git a/source/gameengine/GameLogic/SCA_JoystickSensor.cpp b/source/gameengine/GameLogic/SCA_JoystickSensor.cpp
index 5ab42ae7608..29a6a73b865 100644
--- a/source/gameengine/GameLogic/SCA_JoystickSensor.cpp
+++ b/source/gameengine/GameLogic/SCA_JoystickSensor.cpp
@@ -290,7 +290,6 @@ PyAttributeDef SCA_JoystickSensor::Attributes[] = {
KX_PYATTRIBUTE_RO_FUNCTION("numButtons", SCA_JoystickSensor, pyattr_get_num_buttons),
KX_PYATTRIBUTE_RO_FUNCTION("numHats", SCA_JoystickSensor, pyattr_get_num_hats),
KX_PYATTRIBUTE_RO_FUNCTION("connected", SCA_JoystickSensor, pyattr_get_connected),
- //KX_PYATTRIBUTE_TODO("events"),
{ NULL } //Sentinel
};
diff --git a/source/gameengine/GameLogic/SCA_PythonController.cpp b/source/gameengine/GameLogic/SCA_PythonController.cpp
index 45d3be01bbb..1f05846abe4 100644
--- a/source/gameengine/GameLogic/SCA_PythonController.cpp
+++ b/source/gameengine/GameLogic/SCA_PythonController.cpp
@@ -178,7 +178,7 @@ PyObject* SCA_PythonController::sPyGetCurrentController(PyObject *self)
{
if(m_sCurrentController==NULL)
{
- PyErr_SetString(PyExc_SystemError, "GameLogic.getCurrentController(), this function is being run outside the python controllers context, or blenders internal state is corrupt.");
+ PyErr_SetString(PyExc_SystemError, "bge.logic.getCurrentController(), this function is being run outside the python controllers context, or blenders internal state is corrupt.");
return NULL;
}
return m_sCurrentController->GetProxy();
@@ -264,7 +264,7 @@ void SCA_PythonController::ErrorPrint(const char *error_msg)
/* Added in 2.48a, the last_traceback can reference Objects for example, increasing
* their user count. Not to mention holding references to wrapped data.
* This is especially bad when the PyObject for the wrapped data is free'd, after blender
- * has alredy dealocated the pointer */
+ * has already dealocated the pointer */
PySys_SetObject( (char *)"last_traceback", NULL);
PyErr_Clear(); /* just to be sure */
}
@@ -295,49 +295,47 @@ bool SCA_PythonController::Import()
{
//printf("py module modified '%s'\n", m_scriptName.Ptr());
m_bModified= false;
-
+
/* incase we re-import */
Py_XDECREF(m_function);
m_function= NULL;
- vector<STR_String> py_function_path = m_scriptText.Explode('.');
-
- if(py_function_path.size() < 2) {
+ STR_String mod_path_str= m_scriptText; /* just for storage, use C style string access */
+ char *mod_path= mod_path_str.Ptr();
+ char *function_string;
+
+ function_string= strrchr(mod_path, '.');
+
+ if(function_string == NULL) {
printf("Python module name formatting error \"%s\":\n\texpected \"SomeModule.Func\", got \"%s\"\n", GetName().Ptr(), m_scriptText.Ptr());
return false;
}
-
- PyObject *mod = PyImport_ImportModule((char *)py_function_path[0].Ptr());
- /* Dont reload yet, do this within the loop so packages reload too */
-
- if(mod==NULL) {
- ErrorPrint("Python module not found");
+
+ *function_string= '\0';
+ function_string++;
+
+ // Import the module and print an error if it's not found
+ PyObject *mod = PyImport_ImportModule(mod_path);
+
+ if (mod == NULL) {
+ ErrorPrint("Python module can't be imported");
return false;
}
- /* 'mod' will be DECREF'd as 'base'
- * 'm_function' will be left holding a reference that the controller owns */
-
- PyObject *base= mod;
-
- for(unsigned int i=1; i < py_function_path.size(); i++) {
- if(m_debug && PyModule_Check(base)) { /* base could be a class */
- Py_DECREF(base); /* getting a new one so dont hold a ref to the old one */
- base= PyImport_ReloadModule(base);
- if (base==NULL) {
- m_function= NULL;
- break;
- }
- }
-
- m_function = PyObject_GetAttrString(base, py_function_path[i].Ptr());
- Py_DECREF(base);
- base = m_function; /* for the next loop if there is on */
-
- if(m_function==NULL) {
- break;
- }
+
+ if(m_debug)
+ mod = PyImport_ReloadModule(mod);
+
+ if (mod == NULL) {
+ ErrorPrint("Python module can't be reloaded");
+ return false;
}
-
+
+ // Get the function object
+ m_function = PyObject_GetAttrString(mod, function_string);
+
+ // DECREF the module as we don't need it anymore
+ Py_DECREF(mod);
+
if(m_function==NULL) {
if(PyErr_Occurred())
ErrorPrint("Python controller found the module but could not access the function");
@@ -452,7 +450,7 @@ void SCA_PythonController::Trigger(SCA_LogicManager* logicmgr)
/* Added in 2.48a, the last_traceback can reference Objects for example, increasing
* their user count. Not to mention holding references to wrapped data.
* This is especially bad when the PyObject for the wrapped data is free'd, after blender
- * has alredy dealocated the pointer */
+ * has already dealocated the pointer */
PySys_SetObject( (char *)"last_traceback", NULL);
PyErr_Clear(); /* just to be sure */
}
diff --git a/source/gameengine/GamePlayer/Makefile b/source/gameengine/GamePlayer/Makefile
index c4f78f23117..30a13f26503 100644
--- a/source/gameengine/GamePlayer/Makefile
+++ b/source/gameengine/GamePlayer/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/GamePlayer/common/CMakeLists.txt b/source/gameengine/GamePlayer/common/CMakeLists.txt
index 418b77357a4..08a4aa50a00 100644
--- a/source/gameengine/GamePlayer/common/CMakeLists.txt
+++ b/source/gameengine/GamePlayer/common/CMakeLists.txt
@@ -74,4 +74,3 @@ SET(INC
ADD_DEFINITIONS(-DGLEW_STATIC)
BLENDERLIB_NOLIST(gp_common "${SRC}" "${INC}")
-#env.BlenderLib (libname='gp_common', sources=source_files, includes=incs, defines = [], libtype='player', priority=5, compileflags=cflags)
diff --git a/source/gameengine/GamePlayer/common/Makefile b/source/gameengine/GamePlayer/common/Makefile
index e1b07a226f6..e28cacb826a 100644
--- a/source/gameengine/GamePlayer/common/Makefile
+++ b/source/gameengine/GamePlayer/common/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/GamePlayer/common/unix/Makefile b/source/gameengine/GamePlayer/common/unix/Makefile
index c86f61b45d8..db29a087b28 100644
--- a/source/gameengine/GamePlayer/common/unix/Makefile
+++ b/source/gameengine/GamePlayer/common/unix/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/GamePlayer/common/windows/Makefile b/source/gameengine/GamePlayer/common/windows/Makefile
index 3f1deb05f3a..200f84dd3e6 100644
--- a/source/gameengine/GamePlayer/common/windows/Makefile
+++ b/source/gameengine/GamePlayer/common/windows/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/GamePlayer/ghost/CMakeLists.txt b/source/gameengine/GamePlayer/ghost/CMakeLists.txt
index 848c2f73f06..8164878762c 100644
--- a/source/gameengine/GamePlayer/ghost/CMakeLists.txt
+++ b/source/gameengine/GamePlayer/ghost/CMakeLists.txt
@@ -73,4 +73,3 @@ IF(WITH_FFMPEG)
ENDIF(WITH_FFMPEG)
BLENDERLIB_NOLIST(gp_ghost "${SRC}" "${INC}")
-#env.BlenderLib (libname='gp_ghost', sources=source_files, includes = incs, defines = [], libtype='player',priority=0, compileflags=cflags)
diff --git a/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp b/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
index b7ed8666325..8f03408b841 100644
--- a/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
+++ b/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
@@ -557,7 +557,7 @@ int main(int argc, char** argv)
#if 0
// future stuff
- else if(!strcmp(argv[i], "stencil")
+ else if(!strcmp(argv[i], "use_stencil")
stereomode = RAS_STEREO_STENCIL;
#endif
@@ -660,7 +660,7 @@ int main(int argc, char** argv)
system->getMainDisplayDimensions(fullScreenWidth, fullScreenHeight);
// process first batch of events. If the user
// drops a file on top off the blenderplayer icon, we
- // recieve an event with the filename
+ // receive an event with the filename
system->processEvents(0);
diff --git a/source/gameengine/GamePlayer/ghost/Makefile b/source/gameengine/GamePlayer/ghost/Makefile
index a7fcf46b695..b2fcd2ac1ff 100644
--- a/source/gameengine/GamePlayer/ghost/Makefile
+++ b/source/gameengine/GamePlayer/ghost/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/Ketsji/CMakeLists.txt b/source/gameengine/Ketsji/CMakeLists.txt
index c4af701f87b..d8f6e3164ec 100644
--- a/source/gameengine/Ketsji/CMakeLists.txt
+++ b/source/gameengine/Ketsji/CMakeLists.txt
@@ -80,4 +80,3 @@ IF(WITH_FFMPEG)
ENDIF(WITH_FFMPEG)
BLENDERLIB(bf_ketsji "${SRC}" "${INC}")
-#env.BlenderLib ( 'bf_ketsji', sources, Split(incs), [], libtype=['game','player'], priority=[25, 72], compileflags = cflags )
diff --git a/source/gameengine/Ketsji/KXNetwork/CMakeLists.txt b/source/gameengine/Ketsji/KXNetwork/CMakeLists.txt
index 40079f3f83e..ce3d8fa22fc 100644
--- a/source/gameengine/Ketsji/KXNetwork/CMakeLists.txt
+++ b/source/gameengine/Ketsji/KXNetwork/CMakeLists.txt
@@ -45,4 +45,3 @@ ELSE(WITH_PYTHON)
ENDIF(WITH_PYTHON)
BLENDERLIB(kx_network "${SRC}" "${INC}")
-#env.BlenderLib ( 'kx_network', Split(sources), Split(incs), defines=[],libtype=['game2', 'player'], priority=[5, 155] )
diff --git a/source/gameengine/Ketsji/KXNetwork/Makefile b/source/gameengine/Ketsji/KXNetwork/Makefile
index 365ed8fc9c3..aebbd7921cb 100644
--- a/source/gameengine/Ketsji/KXNetwork/Makefile
+++ b/source/gameengine/Ketsji/KXNetwork/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
index 2ef7e55429f..f697942c6ee 100644
--- a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
+++ b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
@@ -794,9 +794,9 @@ PyMethodDef KX_BlenderMaterial::Methods[] =
};
PyAttributeDef KX_BlenderMaterial::Attributes[] = {
- //KX_PYATTRIBUTE_TODO("shader"),
- //KX_PYATTRIBUTE_TODO("materialIndex"),
- //KX_PYATTRIBUTE_TODO("blending"),
+ KX_PYATTRIBUTE_RO_FUNCTION("shader", KX_BlenderMaterial, pyattr_get_shader),
+ KX_PYATTRIBUTE_RO_FUNCTION("material_index", KX_BlenderMaterial, pyattr_get_materialIndex),
+ KX_PYATTRIBUTE_RW_FUNCTION("blend_type", KX_BlenderMaterial, pyattr_get_blending, pyattr_set_blending),
{ NULL } //Sentinel
};
@@ -822,6 +822,37 @@ PyTypeObject KX_BlenderMaterial::Type = {
py_base_new
};
+PyObject* KX_BlenderMaterial::pyattr_get_shader(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_BlenderMaterial* self= static_cast<KX_BlenderMaterial*>(self_v);
+ return self->PygetShader(NULL, NULL);
+}
+
+PyObject* KX_BlenderMaterial::pyattr_get_materialIndex(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_BlenderMaterial* self= static_cast<KX_BlenderMaterial*>(self_v);
+ return PyLong_FromSsize_t(self->GetMaterialIndex());
+}
+
+PyObject* KX_BlenderMaterial::pyattr_get_blending(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_BlenderMaterial* self= static_cast<KX_BlenderMaterial*>(self_v);
+ unsigned int* bfunc = self->getBlendFunc();
+ return Py_BuildValue("(ll)", (long int)bfunc[0], (long int)bfunc[1]);
+}
+
+int KX_BlenderMaterial::pyattr_set_blending(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_BlenderMaterial* self= static_cast<KX_BlenderMaterial*>(self_v);
+ PyObject* obj = self->PysetBlending(value, NULL);
+ if(obj)
+ {
+ Py_DECREF(obj);
+ return 0;
+ }
+ return -1;
+}
+
KX_PYMETHODDEF_DOC( KX_BlenderMaterial, getShader , "getShader()")
{
if( !GLEW_ARB_fragment_shader) {
@@ -908,7 +939,7 @@ static unsigned int GL_array[11] = {
GL_SRC_ALPHA_SATURATE
};
-KX_PYMETHODDEF_DOC( KX_BlenderMaterial, setBlending , "setBlending( GameLogic.src, GameLogic.dest)")
+KX_PYMETHODDEF_DOC( KX_BlenderMaterial, setBlending , "setBlending( bge.logic.src, bge.logic.dest)")
{
unsigned int b[2];
if(PyArg_ParseTuple(args, "ii:setBlending", &b[0], &b[1]))
diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.h b/source/gameengine/Ketsji/KX_BlenderMaterial.h
index 5bf62ff6b7c..239e334f68a 100644
--- a/source/gameengine/Ketsji/KX_BlenderMaterial.h
+++ b/source/gameengine/Ketsji/KX_BlenderMaterial.h
@@ -79,6 +79,9 @@ public:
Image * getImage (unsigned int idx) {
return (idx < MAXTEX && mMaterial) ? mMaterial->img[idx] : NULL;
}
+ unsigned int* getBlendFunc() {
+ return mBlendFunc;
+ }
// for ipos
void UpdateIPO(
MT_Vector4 rgba, MT_Vector3 specrgb,
@@ -99,6 +102,11 @@ public:
// --------------------------------
virtual PyObject* py_repr(void) { return PyUnicode_FromString(mMaterial->matname.ReadPtr()); }
+ static PyObject* pyattr_get_shader(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_materialIndex(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_blending(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_blending(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+
KX_PYMETHOD_DOC( KX_BlenderMaterial, getShader );
KX_PYMETHOD_DOC( KX_BlenderMaterial, getMaterialIndex );
KX_PYMETHOD_DOC( KX_BlenderMaterial, getTexture );
diff --git a/source/gameengine/Ketsji/KX_Camera.cpp b/source/gameengine/Ketsji/KX_Camera.cpp
index 82786456589..2402baf92ac 100644
--- a/source/gameengine/Ketsji/KX_Camera.cpp
+++ b/source/gameengine/Ketsji/KX_Camera.cpp
@@ -553,8 +553,8 @@ KX_PYMETHODDEF_DOC_VARARGS(KX_Camera, sphereInsideFrustum,
"\tcenter = the center of the sphere (in world coordinates.)\n"
"\tradius = the radius of the sphere\n\n"
"\tExample:\n"
-"\timport GameLogic\n\n"
-"\tco = GameLogic.getCurrentController()\n"
+"\timport bge.logic\n\n"
+"\tco = bge.logic.getCurrentController()\n"
"\tcam = co.GetOwner()\n\n"
"\t# A sphere of radius 4.0 located at [x, y, z] = [1.0, 1.0, 1.0]\n"
"\tif (cam.sphereInsideFrustum([1.0, 1.0, 1.0], 4) != cam.OUTSIDE):\n"
@@ -586,8 +586,8 @@ KX_PYMETHODDEF_DOC_O(KX_Camera, boxInsideFrustum,
"\tinside/outside/intersects this camera's viewing frustum.\n\n"
"\tbox = a list of the eight (8) corners of the box (in world coordinates.)\n\n"
"\tExample:\n"
-"\timport GameLogic\n\n"
-"\tco = GameLogic.getCurrentController()\n"
+"\timport bge.logic\n\n"
+"\tco = bge.logic.getCurrentController()\n"
"\tcam = co.GetOwner()\n\n"
"\tbox = []\n"
"\tbox.append([-1.0, -1.0, -1.0])\n"
@@ -630,8 +630,8 @@ KX_PYMETHODDEF_DOC_O(KX_Camera, pointInsideFrustum,
"\treturns 1 if the given point is inside this camera's viewing frustum.\n\n"
"\tpoint = The point to test (in world coordinates.)\n\n"
"\tExample:\n"
-"\timport GameLogic\n\n"
-"\tco = GameLogic.getCurrentController()\n"
+"\timport bge.logic\n\n"
+"\tco = bge.logic.getCurrentController()\n"
"\tcam = co.GetOwner()\n\n"
"\t# Test point [0.0, 0.0, 0.0]"
"\tif (cam.pointInsideFrustum([0.0, 0.0, 0.0])):\n"
@@ -740,7 +740,7 @@ int KX_Camera::pyattr_set_ortho_scale(void *self_v, const KX_PYATTRIBUTE_DEF *at
KX_Camera* self= static_cast<KX_Camera*>(self_v);
float param = PyFloat_AsDouble(value);
if (param == -1) {
- PyErr_SetString(PyExc_AttributeError, "camera.scale = float: KX_Camera, expected a float greater then zero");
+ PyErr_SetString(PyExc_AttributeError, "camera.ortho_scale = float: KX_Camera, expected a float greater then zero");
return PY_SET_ATTR_FAIL;
}
diff --git a/source/gameengine/Ketsji/KX_Camera.h b/source/gameengine/Ketsji/KX_Camera.h
index 406ee1d0764..ad2460d34ef 100644
--- a/source/gameengine/Ketsji/KX_Camera.h
+++ b/source/gameengine/Ketsji/KX_Camera.h
@@ -51,7 +51,7 @@ class KX_Camera : public KX_GameObject
Py_Header;
protected:
friend class KX_Scene;
- /** Camera parameters (clips distances, focal lenght). These
+ /** Camera parameters (clips distances, focal length). These
* params are closely tied to Blender. In the gameengine, only the
* projection and modelview matrices are relevant. There's a
* conversion being done in the engine class. Why is it stored
diff --git a/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp b/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp
index 8af6e63f343..b1baa5fe9e1 100644
--- a/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp
+++ b/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp
@@ -110,8 +110,14 @@ PyMethodDef KX_ConstraintWrapper::Methods[] = {
};
PyAttributeDef KX_ConstraintWrapper::Attributes[] = {
- //KX_PYATTRIBUTE_TODO("constraintId"),
+ KX_PYATTRIBUTE_RO_FUNCTION("constraint_id", KX_ConstraintWrapper, pyattr_get_constraintId),
{ NULL } //Sentinel
};
+PyObject* KX_ConstraintWrapper::pyattr_get_constraintId(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_ConstraintWrapper* self= static_cast<KX_ConstraintWrapper*>(self_v);
+ return self->PyGetConstraintId();
+}
+
#endif // DISABLE_PYTHON
diff --git a/source/gameengine/Ketsji/KX_ConstraintWrapper.h b/source/gameengine/Ketsji/KX_ConstraintWrapper.h
index 530ecf16fed..db9543c23ae 100644
--- a/source/gameengine/Ketsji/KX_ConstraintWrapper.h
+++ b/source/gameengine/Ketsji/KX_ConstraintWrapper.h
@@ -44,6 +44,8 @@ public:
KX_PYMETHOD_NOARGS(KX_ConstraintWrapper,GetConstraintId);
KX_PYMETHOD(KX_ConstraintWrapper,SetParam);
KX_PYMETHOD(KX_ConstraintWrapper,GetParam);
+
+ static PyObject* pyattr_get_constraintId(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
#endif
private:
diff --git a/source/gameengine/Ketsji/KX_Dome.cpp b/source/gameengine/Ketsji/KX_Dome.cpp
index b62593b7911..94258088e9f 100644
--- a/source/gameengine/Ketsji/KX_Dome.cpp
+++ b/source/gameengine/Ketsji/KX_Dome.cpp
@@ -754,7 +754,7 @@ So I came out with this formula:
verts_height = tan((rad_ang/2) - (MT_PI/2))*sqrt(2.0);
Here we take half the sphere(rad_ang/2) and subtract a quarter of it (MT_PI/2)
-Therefore we have the lenght in radians of the dome/sphere over the horizon.
+Therefore we have the length in radians of the dome/sphere over the horizon.
Once we take the tangent of that angle, you have the verts coordinate corresponding to the verts on the side faces.
Then we need to multiply it by sqrt(2.0) to get the coordinate of the verts on the diagonal of the original cube.
*/
diff --git a/source/gameengine/Ketsji/KX_GameObject.cpp b/source/gameengine/Ketsji/KX_GameObject.cpp
index ecfacb8f9bb..e44aac2699c 100644
--- a/source/gameengine/Ketsji/KX_GameObject.cpp
+++ b/source/gameengine/Ketsji/KX_GameObject.cpp
@@ -846,7 +846,7 @@ void KX_GameObject::AlignAxisToVect(const MT_Vector3& dir, int axis, float fac)
{
case 0: //x axis
ori.setValue(orimat[0][2], orimat[1][2], orimat[2][2]); //pivot axis
- if (MT_abs(vect.dot(ori)) > 1.0-3.0*MT_EPSILON) //is the vector paralell to the pivot?
+ if (MT_abs(vect.dot(ori)) > 1.0-3.0*MT_EPSILON) //is the vector parallel to the pivot?
ori.setValue(orimat[0][1], orimat[1][1], orimat[2][1]); //change the pivot!
if (fac == 1.0) {
x = vect;
diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
index 71cd8b36045..3fdd0864a02 100644
--- a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
+++ b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
@@ -235,7 +235,7 @@ void KX_KetsjiEngine::SetRasterizer(RAS_IRasterizer* rasterizer)
#ifndef DISABLE_PYTHON
/*
- * At the moment the GameLogic module is imported into 'pythondictionary' after this function is called.
+ * At the moment the bge.logic module is imported into 'pythondictionary' after this function is called.
* if this function ever changes to assign a copy, make sure the game logic module is imported into this dictionary before hand.
*/
void KX_KetsjiEngine::SetPyNamespace(PyObject* pythondictionary)
@@ -966,44 +966,17 @@ void KX_KetsjiEngine::DoSound(KX_Scene* scene)
KX_Camera* cam = scene->GetActiveCamera();
if (!cam)
return;
- MT_Point3 listenerposition = cam->NodeGetWorldPosition();
- MT_Vector3 listenervelocity = cam->GetLinearVelocity();
- MT_Matrix3x3 listenerorientation = cam->NodeGetWorldOrientation();
- {
- AUD_3DData data;
- float f;
-
- listenerorientation.getValue3x3(data.orientation);
- listenerposition.getValue(data.position);
- listenervelocity.getValue(data.velocity);
-
- f = data.position[1];
- data.position[1] = data.position[2];
- data.position[2] = -f;
-
- f = data.velocity[1];
- data.velocity[1] = data.velocity[2];
- data.velocity[2] = -f;
+ float f[4];
- f = data.orientation[1];
- data.orientation[1] = data.orientation[2];
- data.orientation[2] = -f;
+ cam->NodeGetWorldPosition().getValue(f);
+// AUD_setListenerLocation(f);
- f = data.orientation[3];
- data.orientation[3] = -data.orientation[6];
- data.orientation[6] = f;
+ cam->GetLinearVelocity().getValue(f);
+ //AUD_setListenerVelocity(f);
- f = data.orientation[4];
- data.orientation[4] = -data.orientation[8];
- data.orientation[8] = -f;
-
- f = data.orientation[5];
- data.orientation[5] = data.orientation[7];
- data.orientation[7] = f;
-
- AUD_updateListener(&data);
- }
+ cam->NodeGetWorldOrientation().getRotation().getValue(f);
+ //AUD_setListenerOrientation(f);
}
diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.h b/source/gameengine/Ketsji/KX_KetsjiEngine.h
index 0a461a8b63e..f52ec8192cc 100644
--- a/source/gameengine/Ketsji/KX_KetsjiEngine.h
+++ b/source/gameengine/Ketsji/KX_KetsjiEngine.h
@@ -71,6 +71,7 @@ private:
class KX_ISceneConverter* m_sceneconverter;
class NG_NetworkDeviceInterface* m_networkdevice;
#ifndef DISABLE_PYTHON
+ /* borrowed from sys.modules["__main__"], dont manage ref's */
PyObject* m_pythondictionary;
#endif
class SCA_IInputDevice* m_keyboarddevice;
diff --git a/source/gameengine/Ketsji/KX_Light.cpp b/source/gameengine/Ketsji/KX_Light.cpp
index 6ef4b873ead..ac20b4f2f56 100644
--- a/source/gameengine/Ketsji/KX_Light.cpp
+++ b/source/gameengine/Ketsji/KX_Light.cpp
@@ -66,7 +66,7 @@ KX_LightObject::~KX_LightObject()
if((lamp = GetGPULamp())) {
float obmat[4][4] = {{0}};
- GPU_lamp_update(lamp, 0, obmat);
+ GPU_lamp_update(lamp, 0, 0, obmat);
}
m_rendertools->RemoveLight(&m_lightobj);
@@ -199,7 +199,7 @@ void KX_LightObject::Update()
for(int j=0; j<4; j++, dobmat++)
obmat[i][j] = (float)*dobmat;
- GPU_lamp_update(lamp, m_lightobj.m_layer, obmat);
+ GPU_lamp_update(lamp, m_lightobj.m_layer, 0, obmat);
GPU_lamp_update_colors(lamp, m_lightobj.m_red, m_lightobj.m_green,
m_lightobj.m_blue, m_lightobj.m_energy);
}
diff --git a/source/gameengine/Ketsji/KX_PolyProxy.cpp b/source/gameengine/Ketsji/KX_PolyProxy.cpp
index 837c79c77b3..9395e57e68b 100644
--- a/source/gameengine/Ketsji/KX_PolyProxy.cpp
+++ b/source/gameengine/Ketsji/KX_PolyProxy.cpp
@@ -72,90 +72,19 @@ PyMethodDef KX_PolyProxy::Methods[] = {
};
PyAttributeDef KX_PolyProxy::Attributes[] = {
- /* All dummy's so they come up in a dir() */
- //KX_PYATTRIBUTE_TODO("DummyProps"),
- KX_PYATTRIBUTE_DUMMY("matname"),
- KX_PYATTRIBUTE_DUMMY("texture"),
- KX_PYATTRIBUTE_DUMMY("material"),
- KX_PYATTRIBUTE_DUMMY("matid"),
- KX_PYATTRIBUTE_DUMMY("v1"),
- KX_PYATTRIBUTE_DUMMY("v2"),
- KX_PYATTRIBUTE_DUMMY("v3"),
- KX_PYATTRIBUTE_DUMMY("v4"),
- KX_PYATTRIBUTE_DUMMY("visible"),
- KX_PYATTRIBUTE_DUMMY("collide"),
+ KX_PYATTRIBUTE_RO_FUNCTION("material_name", KX_PolyProxy, pyattr_get_material_name),
+ KX_PYATTRIBUTE_RO_FUNCTION("texture_name", KX_PolyProxy, pyattr_get_texture_name),
+ KX_PYATTRIBUTE_RO_FUNCTION("material", KX_PolyProxy, pyattr_get_material),
+ KX_PYATTRIBUTE_RO_FUNCTION("material_id", KX_PolyProxy, pyattr_get_material_id),
+ KX_PYATTRIBUTE_RO_FUNCTION("v1", KX_PolyProxy, pyattr_get_v1),
+ KX_PYATTRIBUTE_RO_FUNCTION("v2", KX_PolyProxy, pyattr_get_v2),
+ KX_PYATTRIBUTE_RO_FUNCTION("v3", KX_PolyProxy, pyattr_get_v3),
+ KX_PYATTRIBUTE_RO_FUNCTION("v4", KX_PolyProxy, pyattr_get_v4),
+ KX_PYATTRIBUTE_RO_FUNCTION("visible", KX_PolyProxy, pyattr_get_visible),
+ KX_PYATTRIBUTE_RO_FUNCTION("collide", KX_PolyProxy, pyattr_get_collide),
{ NULL } //Sentinel
};
-#if 0
-PyObject* KX_PolyProxy::py_getattro(PyObject *attr)
-{
- char *attr_str= _PyUnicode_AsString(attr);
- if (!strcmp(attr_str, "matname"))
- {
- return PyUnicode_FromString(m_polygon->GetMaterial()->GetPolyMaterial()->GetMaterialName());
- }
- if (!strcmp(attr_str, "texture"))
- {
- return PyUnicode_FromString(m_polygon->GetMaterial()->GetPolyMaterial()->GetTextureName());
- }
- if (!strcmp(attr_str, "material"))
- {
- RAS_IPolyMaterial *polymat = m_polygon->GetMaterial()->GetPolyMaterial();
- if(polymat->GetFlag() & RAS_BLENDERMAT)
- {
- KX_BlenderMaterial* mat = static_cast<KX_BlenderMaterial*>(polymat);
- return mat->GetProxy();
- }
- else
- {
- KX_PolygonMaterial* mat = static_cast<KX_PolygonMaterial*>(polymat);
- return mat->GetProxy();
- }
- }
- if (!strcmp(attr_str, "matid"))
- {
- // we'll have to scan through the material bucket of the mes and compare with
- // the one of the polygon
- RAS_MaterialBucket* polyBucket = m_polygon->GetMaterial();
- unsigned int matid;
- for (matid=0; matid<(unsigned int)m_mesh->NumMaterials(); matid++)
- {
- RAS_MeshMaterial* meshMat = m_mesh->GetMeshMaterial(matid);
- if (meshMat->m_bucket == polyBucket)
- // found it
- break;
- }
- return PyLong_FromSsize_t(matid);
- }
- if (!strcmp(attr_str, "v1"))
- {
- return PyLong_FromSsize_t(m_polygon->GetVertexOffsetAbs(m_mesh, 0));
- }
- if (!strcmp(attr_str, "v2"))
- {
- return PyLong_FromSsize_t(m_polygon->GetVertexOffsetAbs(m_mesh, 1));
- }
- if (!strcmp(attr_str, "v3"))
- {
- return PyLong_FromSsize_t(m_polygon->GetVertexOffsetAbs(m_mesh, 2));
- }
- if (!strcmp(attr_str, "v4"))
- {
- return PyLong_FromSsize_t(((m_polygon->VertexCount()>3)?m_polygon->GetVertexOffsetAbs(m_mesh, 3):0));
- }
- if (!strcmp(attr_str, "visible"))
- {
- return PyLong_FromSsize_t(m_polygon->IsVisible());
- }
- if (!strcmp(attr_str, "collide"))
- {
- return PyLong_FromSsize_t(m_polygon->IsCollider());
- }
- // py_getattro_up(CValue); // XXX -- todo, make all these attributes
-}
-#endif
-
KX_PolyProxy::KX_PolyProxy(const RAS_MeshObject*mesh, RAS_Polygon* polygon)
: m_polygon(polygon),
m_mesh((RAS_MeshObject*)mesh)
@@ -179,7 +108,75 @@ CValue* KX_PolyProxy::GetReplica() { return NULL;}
// stuff for python integration
-KX_PYMETHODDEF_DOC_NOARGS(KX_PolyProxy, getMaterialIndex,
+PyObject* KX_PolyProxy::pyattr_get_material_name(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+ return self->PygetMaterialName();
+}
+
+PyObject* KX_PolyProxy::pyattr_get_texture_name(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+ return self->PygetTextureName();
+}
+
+PyObject* KX_PolyProxy::pyattr_get_material(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+ return self->PygetMaterial();
+}
+
+PyObject* KX_PolyProxy::pyattr_get_material_id(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+ return self->PygetMaterialIndex();
+}
+
+PyObject* KX_PolyProxy::pyattr_get_v1(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+
+ return PyLong_FromSsize_t(self->m_polygon->GetVertexOffsetAbs(self->m_mesh, 0));
+}
+
+PyObject* KX_PolyProxy::pyattr_get_v2(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+
+ return PyLong_FromSsize_t(self->m_polygon->GetVertexOffsetAbs(self->m_mesh, 1));
+}
+
+PyObject* KX_PolyProxy::pyattr_get_v3(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+
+ return PyLong_FromSsize_t(self->m_polygon->GetVertexOffsetAbs(self->m_mesh, 2));
+}
+
+PyObject* KX_PolyProxy::pyattr_get_v4(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+
+ if (3 < self->m_polygon->VertexCount())
+ {
+ return PyLong_FromSsize_t(self->m_polygon->GetVertexOffsetAbs(self->m_mesh, 3));
+ }
+ return PyLong_FromSsize_t(0);
+}
+
+PyObject* KX_PolyProxy::pyattr_get_visible(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+ return self->PyisVisible();
+}
+
+PyObject* KX_PolyProxy::pyattr_get_collide(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+ return self->PyisCollider();
+}
+
+KX_PYMETHODDEF_DOC_NOARGS(KX_PolyProxy, getMaterialIndex,
"getMaterialIndex() : return the material index of the polygon in the mesh\n")
{
RAS_MaterialBucket* polyBucket = m_polygon->GetMaterial();
diff --git a/source/gameengine/Ketsji/KX_PolyProxy.h b/source/gameengine/Ketsji/KX_PolyProxy.h
index 97d89b37435..3e669630e30 100644
--- a/source/gameengine/Ketsji/KX_PolyProxy.h
+++ b/source/gameengine/Ketsji/KX_PolyProxy.h
@@ -54,6 +54,16 @@ public:
// stuff for python integration
+ static PyObject* pyattr_get_material_name(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_texture_name(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_material(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_material_id(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_v1(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_v2(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_v3(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_v4(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_visible(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_collide(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
KX_PYMETHOD_DOC_NOARGS(KX_PolyProxy,getMaterialIndex)
KX_PYMETHOD_DOC_NOARGS(KX_PolyProxy,getNumVertex)
diff --git a/source/gameengine/Ketsji/KX_PolygonMaterial.cpp b/source/gameengine/Ketsji/KX_PolygonMaterial.cpp
index dacc74f139f..63204b16e8b 100644
--- a/source/gameengine/Ketsji/KX_PolygonMaterial.cpp
+++ b/source/gameengine/Ketsji/KX_PolygonMaterial.cpp
@@ -233,7 +233,7 @@ PyAttributeDef KX_PolygonMaterial::Attributes[] = {
KX_PYATTRIBUTE_FLOAT_RW("shininess", 0.0f, 1000.0f, KX_PolygonMaterial, m_shininess),
KX_PYATTRIBUTE_FLOAT_RW("specularity", 0.0f, 1000.0f, KX_PolygonMaterial, m_specularity),
- KX_PYATTRIBUTE_RW_FUNCTION("diffuse", KX_PolygonMaterial, pyattr_get_texture, pyattr_set_diffuse),
+ KX_PYATTRIBUTE_RW_FUNCTION("diffuse", KX_PolygonMaterial, pyattr_get_diffuse, pyattr_set_diffuse),
KX_PYATTRIBUTE_RW_FUNCTION("specular",KX_PolygonMaterial, pyattr_get_specular, pyattr_set_specular),
KX_PYATTRIBUTE_RO_FUNCTION("tface", KX_PolygonMaterial, pyattr_get_tface), /* How the heck is this even useful??? - Campbell */
diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp
index 7327b9c08ff..4f14400e7e5 100644
--- a/source/gameengine/Ketsji/KX_PythonInit.cpp
+++ b/source/gameengine/Ketsji/KX_PythonInit.cpp
@@ -45,6 +45,10 @@ extern "C" {
#include "marshal.h" /* python header for loading/saving dicts */
}
+
+#define WITH_PYTHON
+//#include "AUD_PyInit.h"
+
#endif
#include "KX_PythonInit.h"
@@ -118,7 +122,7 @@ extern "C" {
#include "KX_BlenderSceneConverter.h"
#include "KX_MeshProxy.h" /* for creating a new library of mesh objects */
extern "C" {
- #include "BLO_readfile.h"
+ #include "BKE_idcode.h"
}
#include "NG_NetworkScene.h" //Needed for sendMessage()
@@ -262,8 +266,8 @@ static PyObject* gPyRestartGame(PyObject*)
}
static char gPySaveGlobalDict_doc[] =
-"saveGlobalDict()\n\
-Saves GameLogic.globalDict to a file";
+ "saveGlobalDict()\n"
+ "Saves bge.logic.globalDict to a file";
static PyObject* gPySaveGlobalDict(PyObject*)
{
@@ -299,8 +303,8 @@ static PyObject* gPySaveGlobalDict(PyObject*)
}
static char gPyLoadGlobalDict_doc[] =
-"LoadGlobalDict()\n\
-Loads GameLogic.globalDict from a file";
+ "LoadGlobalDict()\n"
+ "Loads bge.logic.globalDict from a file";
static PyObject* gPyLoadGlobalDict(PyObject*)
{
@@ -375,15 +379,6 @@ static PyObject* gPyGetSpectrum(PyObject*)
return resultlist;
}
-
-static PyObject* gPyStopDSP(PyObject*, PyObject* args)
-{
- PyErr_SetString(PyExc_RuntimeError, "no audio device available");
- return NULL;
-
- Py_RETURN_NONE;
-}
-
static PyObject* gPySetLogicTicRate(PyObject*, PyObject* args)
{
float ticrate;
@@ -666,7 +661,7 @@ static PyObject *gLibNew(PyObject*, PyObject* args)
return NULL;
}
- idcode= BLO_idcode_from_name(group);
+ idcode= BKE_idcode_from_name(group);
if(idcode==0) {
PyErr_Format(PyExc_ValueError, "invalid group given \"%s\"", group);
return NULL;
@@ -752,7 +747,6 @@ static struct PyMethodDef game_methods[] = {
{"getRandomFloat",(PyCFunction) gPyGetRandomFloat, METH_NOARGS, (const char *)gPyGetRandomFloat_doc},
{"setGravity",(PyCFunction) gPySetGravity, METH_O, (const char *)"set Gravitation"},
{"getSpectrum",(PyCFunction) gPyGetSpectrum, METH_NOARGS, (const char *)"get audio spectrum"},
- {"stopDSP",(PyCFunction) gPyStopDSP, METH_VARARGS, (const char *)"stop using the audio dsp (for performance reasons)"},
{"getMaxLogicFrame", (PyCFunction) gPyGetMaxLogicFrame, METH_NOARGS, (const char *)"Gets the max number of logic frame per render frame"},
{"setMaxLogicFrame", (PyCFunction) gPySetMaxLogicFrame, METH_VARARGS, (const char *)"Sets the max number of logic frame per render frame"},
{"getMaxPhysicsFrame", (PyCFunction) gPyGetMaxPhysicsFrame, METH_NOARGS, (const char *)"Gets the max number of physics frame per render frame"},
@@ -935,7 +929,6 @@ static PyObject* gPyDisableMist(PyObject*)
Py_RETURN_NONE;
}
-
static PyObject* gPySetMistStart(PyObject*, PyObject* args)
{
@@ -1232,7 +1225,7 @@ static struct PyMethodDef rasterizer_methods[] = {
// Initialization function for the module (*must* be called initGameLogic)
static char GameLogic_module_documentation[] =
-"This is the Python API for the game engine of GameLogic"
+"This is the Python API for the game engine of bge.logic"
;
static char Rasterizer_module_documentation[] =
@@ -1313,7 +1306,6 @@ PyObject* initGameLogic(KX_KetsjiEngine *engine, KX_Scene* scene) // quick hack
KX_MACRO_addTypesToDict(d, KX_PROPSENSOR_EXPRESSION, SCA_PropertySensor::KX_PROPSENSOR_EXPRESSION);
/* 3. Constraint actuator */
- /* XXX, TODO NXBGE, move constants names from KX_ACT_CONSTRAINT_foo to KX_CONSTRAINTACT_foo */
KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_LOCX, KX_ConstraintActuator::KX_ACT_CONSTRAINT_LOCX);
KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_LOCY, KX_ConstraintActuator::KX_ACT_CONSTRAINT_LOCY);
KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_LOCZ, KX_ConstraintActuator::KX_ACT_CONSTRAINT_LOCZ);
@@ -1329,18 +1321,18 @@ PyObject* initGameLogic(KX_KetsjiEngine *engine, KX_Scene* scene) // quick hack
KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_ORIX, KX_ConstraintActuator::KX_ACT_CONSTRAINT_ORIX);
KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_ORIY, KX_ConstraintActuator::KX_ACT_CONSTRAINT_ORIY);
KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_ORIZ, KX_ConstraintActuator::KX_ACT_CONSTRAINT_ORIZ);
- KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_FHPX, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHPX);
- KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_FHPY, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHPY);
- KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_FHPZ, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHPZ);
- KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_FHNX, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHNX);
- KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_FHNY, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHNY);
- KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_FHNZ, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHNZ);
- KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_NORMAL, KX_ConstraintActuator::KX_ACT_CONSTRAINT_NORMAL);
- KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_MATERIAL, KX_ConstraintActuator::KX_ACT_CONSTRAINT_MATERIAL);
- KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_PERMANENT, KX_ConstraintActuator::KX_ACT_CONSTRAINT_PERMANENT);
- KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_DISTANCE, KX_ConstraintActuator::KX_ACT_CONSTRAINT_DISTANCE);
- KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_LOCAL, KX_ConstraintActuator::KX_ACT_CONSTRAINT_LOCAL);
- KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_DOROTFH, KX_ConstraintActuator::KX_ACT_CONSTRAINT_DOROTFH);
+ KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_FHPX, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHPX);
+ KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_FHPY, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHPY);
+ KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_FHPZ, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHPZ);
+ KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_FHNX, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHNX);
+ KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_FHNY, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHNY);
+ KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_FHNZ, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHNZ);
+ KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_NORMAL, KX_ConstraintActuator::KX_ACT_CONSTRAINT_NORMAL);
+ KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_MATERIAL, KX_ConstraintActuator::KX_ACT_CONSTRAINT_MATERIAL);
+ KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_PERMANENT, KX_ConstraintActuator::KX_ACT_CONSTRAINT_PERMANENT);
+ KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_DISTANCE, KX_ConstraintActuator::KX_ACT_CONSTRAINT_DISTANCE);
+ KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_LOCAL, KX_ConstraintActuator::KX_ACT_CONSTRAINT_LOCAL);
+ KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_DOROTFH, KX_ConstraintActuator::KX_ACT_CONSTRAINT_DOROTFH);
/* 4. Ipo actuator, simple part */
KX_MACRO_addTypesToDict(d, KX_IPOACT_PLAY, KX_IpoActuator::KX_ACT_IPO_PLAY);
@@ -1582,7 +1574,7 @@ PyObject* initGameLogic(KX_KetsjiEngine *engine, KX_Scene* scene) // quick hack
// Check for errors
if (PyErr_Occurred())
{
- Py_FatalError("can't initialize module GameLogic");
+ Py_FatalError("can't initialize module bge.logic");
}
return m;
@@ -1912,9 +1904,8 @@ PyObject* initGamePlayerPythonScripting(const STR_String& progname, TPythonSecur
first_time = false;
PyObjectPlus::ClearDeprecationWarning();
-
- PyObject* moduleobj = PyImport_AddModule("__main__");
- return PyModule_GetDict(moduleobj);
+
+ return bpy_namespace_dict_new(NULL);
}
void exitGamePlayerPythonScripting()
@@ -1949,9 +1940,8 @@ PyObject* initGamePythonScripting(const STR_String& progname, TPythonSecurityLev
initPySysObjects(maggie);
PyObjectPlus::NullDeprecationWarning();
-
- PyObject* moduleobj = PyImport_AddModule("__main__");
- return PyModule_GetDict(moduleobj);
+
+ return bpy_namespace_dict_new(NULL);
}
void exitGamePythonScripting()
@@ -1981,7 +1971,6 @@ void setupGamePython(KX_KetsjiEngine* ketsjiengine, KX_Scene* startscene, Main *
PyDict_SetItemString(PyModule_GetDict(*gameLogic), "globalDict", pyGlobalDict); // Same as importing the module.
*gameLogic_keys = PyDict_Keys(PyModule_GetDict(*gameLogic));
- PyDict_SetItemString(dictionaryobject, "GameLogic", *gameLogic); // Same as importing the module.
initGameKeys();
initPythonConstraintBinding();
@@ -1989,10 +1978,11 @@ void setupGamePython(KX_KetsjiEngine* ketsjiengine, KX_Scene* startscene, Main *
initGeometry();
initBGL();
initBLF();
+// AUD_initPython();
initVideoTexture();
/* could be done a lot more nicely, but for now a quick way to get bge.* working */
- PyRun_SimpleString("__import__('sys').modules['bge']=[mod for mod in (type(__builtins__)('bge'), ) if mod.__dict__.update({'logic':__import__('GameLogic'), 'render':__import__('Rasterizer'), 'events':__import__('GameKeys'), 'constraints':__import__('PhysicsConstraints'), 'types':__import__('GameTypes')}) is None][0]");
+ PyRun_SimpleString("sys = __import__('sys');mod = sys.modules['bge'] = type(sys)('bge');mod.__dict__.update({'logic':__import__('GameLogic'), 'render':__import__('Rasterizer'), 'events':__import__('GameKeys'), 'constraints':__import__('PhysicsConstraints'), 'types':__import__('GameTypes')});import bge");
}
static struct PyModuleDef Rasterizer_module_def = {
@@ -2340,15 +2330,15 @@ int saveGamePythonConfig( char **marshal_buffer)
memcpy(*marshal_buffer, marshal_cstring, marshal_length);
Py_DECREF(pyGlobalDictMarshal);
} else {
- printf("Error, GameLogic.globalDict could not be marshal'd\n");
+ printf("Error, bge.logic.globalDict could not be marshal'd\n");
}
} else {
- printf("Error, GameLogic.globalDict was removed\n");
+ printf("Error, bge.logic.globalDict was removed\n");
}
Py_DECREF(gameLogic);
} else {
PyErr_Clear();
- printf("Error, GameLogic failed to import GameLogic.globalDict will be lost\n");
+ printf("Error, bge.logic failed to import bge.logic.globalDict will be lost\n");
}
return marshal_length;
}
@@ -2380,7 +2370,7 @@ int loadGamePythonConfig(char *marshal_buffer, int marshal_length)
}
} else {
PyErr_Clear();
- printf("Error, GameLogic failed to import GameLogic.globalDict will be lost\n");
+ printf("Error, bge.logic failed to import bge.logic.globalDict will be lost\n");
}
}
return 0;
diff --git a/source/gameengine/Ketsji/KX_PythonSeq.cpp b/source/gameengine/Ketsji/KX_PythonSeq.cpp
index 8ffd58a781b..5c87fe2e757 100644
--- a/source/gameengine/Ketsji/KX_PythonSeq.cpp
+++ b/source/gameengine/Ketsji/KX_PythonSeq.cpp
@@ -351,7 +351,7 @@ static PyObject *KX_PythonSeq_getIter(KX_PythonSeq *self)
return NULL;
}
- /* create a new iterator if were alredy using this one */
+ /* create a new iterator if were already using this one */
if (self->iter == -1) {
self->iter = 0;
Py_INCREF(self);
diff --git a/source/gameengine/Ketsji/KX_Scene.cpp b/source/gameengine/Ketsji/KX_Scene.cpp
index 99bec8159b4..d0d27700166 100644
--- a/source/gameengine/Ketsji/KX_Scene.cpp
+++ b/source/gameengine/Ketsji/KX_Scene.cpp
@@ -68,7 +68,6 @@
#include "SG_Tree.h"
#include "DNA_group_types.h"
#include "DNA_scene_types.h"
-#include "BKE_anim.h"
#include "KX_SG_NodeRelationships.h"
@@ -2134,7 +2133,7 @@ PyAttributeDef KX_Scene::Attributes[] = {
KX_PYATTRIBUTE_RW_FUNCTION("pre_draw", KX_Scene, pyattr_get_drawing_callback_pre, pyattr_set_drawing_callback_pre),
KX_PYATTRIBUTE_RW_FUNCTION("post_draw", KX_Scene, pyattr_get_drawing_callback_post, pyattr_set_drawing_callback_post),
KX_PYATTRIBUTE_BOOL_RO("suspended", KX_Scene, m_suspend),
- KX_PYATTRIBUTE_BOOL_RO("activity_culling", KX_Scene, m_activity_culling),
+ KX_PYATTRIBUTE_BOOL_RO("use_activity_culling", KX_Scene, m_activity_culling),
KX_PYATTRIBUTE_FLOAT_RW("activity_culling_radius", 0.5f, FLT_MAX, KX_Scene, m_activity_box_radius),
KX_PYATTRIBUTE_BOOL_RO("dbvt_culling", KX_Scene, m_dbvt_culling),
{ NULL } //Sentinel
diff --git a/source/gameengine/Ketsji/KX_SoundActuator.cpp b/source/gameengine/Ketsji/KX_SoundActuator.cpp
index 7f9b090d680..5199e9cc8c3 100644
--- a/source/gameengine/Ketsji/KX_SoundActuator.cpp
+++ b/source/gameengine/Ketsji/KX_SoundActuator.cpp
@@ -31,6 +31,7 @@
*/
#include "KX_SoundActuator.h"
+#include "AUD_C-API.h"
#include "KX_GameObject.h"
#include "KX_PyMath.h" // needed for PyObjectFrom()
#include <iostream>
@@ -62,36 +63,33 @@ KX_SoundActuator::KX_SoundActuator(SCA_IObject* gameobj,
KX_SoundActuator::~KX_SoundActuator()
{
if(m_handle)
- AUD_stop(m_handle);
+ ;//AUD_(m_handle);
}
void KX_SoundActuator::play()
{
if(m_handle)
- AUD_stop(m_handle);
+ ;//AUD_(m_handle);
if(!m_sound)
return;
// this is the sound that will be played and not deleted afterwards
AUD_Sound* sound = m_sound;
- // this sounds are for temporary stacked sounds, will be deleted if not NULL
+ // this sound is for temporary stacked sounds, will be deleted if not NULL
AUD_Sound* sound2 = NULL;
- AUD_Sound* sound3 = NULL;
+
+ bool loop = false;
switch (m_type)
{
case KX_SOUNDACT_LOOPBIDIRECTIONAL:
case KX_SOUNDACT_LOOPBIDIRECTIONAL_STOP:
- // create a ping pong sound on sound2 stacked on the orignal sound
- sound2 = AUD_pingpongSound(sound);
- // create a loop sound on sound3 stacked on the pingpong sound and let that one play (save it to sound)
- sound = sound3 = AUD_loopSound(sound2);
- break;
+ sound = sound2 = AUD_pingpongSound(sound);
+ // fall through
case KX_SOUNDACT_LOOPEND:
case KX_SOUNDACT_LOOPSTOP:
- // create a loop sound on sound2 stacked on the pingpong sound and let that one play (save it to sound)
- sound = sound2 = AUD_loopSound(sound);
+ loop = true;
break;
case KX_SOUNDACT_PLAYSTOP:
case KX_SOUNDACT_PLAYEND:
@@ -102,30 +100,29 @@ void KX_SoundActuator::play()
if(m_is3d)
{
// sound shall be played 3D
- m_handle = AUD_play3D(sound, 0);
-
- AUD_set3DSourceSetting(m_handle, AUD_3DSS_MAX_GAIN, m_3d.max_gain);
- AUD_set3DSourceSetting(m_handle, AUD_3DSS_MIN_GAIN, m_3d.min_gain);
- AUD_set3DSourceSetting(m_handle, AUD_3DSS_REFERENCE_DISTANCE, m_3d.reference_distance);
- AUD_set3DSourceSetting(m_handle, AUD_3DSS_MAX_DISTANCE, m_3d.max_distance);
- AUD_set3DSourceSetting(m_handle, AUD_3DSS_ROLLOFF_FACTOR, m_3d.rolloff_factor);
- AUD_set3DSourceSetting(m_handle, AUD_3DSS_CONE_INNER_ANGLE, m_3d.cone_inner_angle);
- AUD_set3DSourceSetting(m_handle, AUD_3DSS_CONE_OUTER_ANGLE, m_3d.cone_outer_angle);
- AUD_set3DSourceSetting(m_handle, AUD_3DSS_CONE_OUTER_GAIN, m_3d.cone_outer_gain);
+ // m_handle = AUD_play(sound, 0);
+
+/* XXX ;//AUD_setRelative(m_handle, false);
+ ;//AUD_setVolumeMaximum(m_handle, m_3d.max_gain);
+ ;//AUD_setVolumeMinimum(m_handle, m_3d.min_gain);
+ ;//AUD_setDistanceReference(m_handle, m_3d.reference_distance);
+ ;//AUD_setDistanceMaximum(m_handle, m_3d.max_distance);
+ ;//AUD_setAttenuation(m_handle, m_3d.rolloff_factor);
+ ;//AUD_setConeAngleInner(m_handle, m_3d.cone_inner_angle);
+ ;//AUD_setConeAngleOuter(m_handle, m_3d.cone_outer_angle);
+ ;//AUD_setConeVolumeOuter(m_handle, m_3d.cone_outer_gain); */
}
else
m_handle = AUD_play(sound, 0);
- AUD_setSoundPitch(m_handle, m_pitch);
- AUD_setSoundVolume(m_handle, m_volume);
+ //if(loop)
+ //AUD_setLoop(m_handle, -1);
+ //AUD_setSoundPitch(m_handle, m_pitch);
+ //AUD_setSoundVolume(m_handle, m_volume);
m_isplaying = true;
- // now we unload the pingpong and loop sounds, as we don't need them anymore
- // the started sound will continue playing like it was created, don't worry!
- if(sound3)
- AUD_unload(sound3);
- if(sound2)
- AUD_unload(sound2);
+// if(sound2)
+ // ;//AUD_unload(sound2);
}
CValue* KX_SoundActuator::GetReplica()
@@ -171,7 +168,7 @@ bool KX_SoundActuator::Update(double curtime, bool frame)
case KX_SOUNDACT_LOOPBIDIRECTIONAL_STOP:
{
// stop immediately
- AUD_stop(m_handle);
+ ;//AUD_(m_handle);
break;
}
case KX_SOUNDACT_PLAYEND:
@@ -183,7 +180,7 @@ bool KX_SoundActuator::Update(double curtime, bool frame)
case KX_SOUNDACT_LOOPBIDIRECTIONAL:
{
// stop the looping so that the sound stops when it finished
- AUD_setLoop(m_handle, 0, -1);
+ ;//AUD_setLoop(m_handle, 0);
break;
}
default:
@@ -215,39 +212,15 @@ bool KX_SoundActuator::Update(double curtime, bool frame)
{
if(m_is3d)
{
- AUD_3DData data;
- float f;
- ((KX_GameObject*)this->GetParent())->NodeGetWorldPosition().getValue(data.position);
- ((KX_GameObject*)this->GetParent())->GetLinearVelocity().getValue(data.velocity);
- ((KX_GameObject*)this->GetParent())->NodeGetWorldOrientation().getValue3x3(data.orientation);
-
- /*
- * The 3D data from blender has to be transformed for OpenAL:
- * - In blender z is up and y is forwards
- * - In OpenAL y is up and z is backwards
- * We have to do that for all 5 vectors.
- */
- f = data.position[1];
- data.position[1] = data.position[2];
- data.position[2] = -f;
-
- f = data.velocity[1];
- data.velocity[1] = data.velocity[2];
- data.velocity[2] = -f;
-
- f = data.orientation[1];
- data.orientation[1] = data.orientation[2];
- data.orientation[2] = -f;
-
- f = data.orientation[4];
- data.orientation[4] = data.orientation[5];
- data.orientation[5] = -f;
-
- f = data.orientation[7];
- data.orientation[7] = data.orientation[8];
- data.orientation[8] = -f;
-
- AUD_update3DSource(m_handle, &data);
+ KX_GameObject* obj = (KX_GameObject*)this->GetParent();
+ float f[4];
+
+ obj->NodeGetWorldPosition().getValue(f);
+ ;//AUD_setSourceLocation(m_handle, f);
+ obj->GetLinearVelocity().getValue(f);
+ ;//AUD_setSourceVelocity(m_handle, f);
+ obj->NodeGetWorldOrientation().getRotation().getValue(f);
+ ;//AUD_setSourceOrientation(m_handle, f);
}
result = true;
}
@@ -300,19 +273,18 @@ PyMethodDef KX_SoundActuator::Methods[] = {
PyAttributeDef KX_SoundActuator::Attributes[] = {
KX_PYATTRIBUTE_BOOL_RO("is3D", KX_SoundActuator, m_is3d),
- KX_PYATTRIBUTE_RW_FUNCTION("maxGain3D", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
- KX_PYATTRIBUTE_RW_FUNCTION("minGain3D", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
- KX_PYATTRIBUTE_RW_FUNCTION("referenceDistance3D", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
- KX_PYATTRIBUTE_RW_FUNCTION("maxDistance3D", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
- KX_PYATTRIBUTE_RW_FUNCTION("rolloffFactor3D", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
- KX_PYATTRIBUTE_RW_FUNCTION("coneInnerAngle3D", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
- KX_PYATTRIBUTE_RW_FUNCTION("coneOuterAngle3D", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
- KX_PYATTRIBUTE_RW_FUNCTION("coneOuterGain3D", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
-
+ KX_PYATTRIBUTE_RW_FUNCTION("volume_maximum", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
+ KX_PYATTRIBUTE_RW_FUNCTION("volume_minimum", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
+ KX_PYATTRIBUTE_RW_FUNCTION("distance_reference", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
+ KX_PYATTRIBUTE_RW_FUNCTION("distance_maximum", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
+ KX_PYATTRIBUTE_RW_FUNCTION("attenuation", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
+ KX_PYATTRIBUTE_RW_FUNCTION("cone_angle_inner", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
+ KX_PYATTRIBUTE_RW_FUNCTION("cone_angle_outer", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
+ KX_PYATTRIBUTE_RW_FUNCTION("cone_volume_outer", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
+
KX_PYATTRIBUTE_RW_FUNCTION("time", KX_SoundActuator, pyattr_get_audposition, pyattr_set_audposition),
KX_PYATTRIBUTE_RW_FUNCTION("volume", KX_SoundActuator, pyattr_get_gain, pyattr_set_gain),
KX_PYATTRIBUTE_RW_FUNCTION("pitch", KX_SoundActuator, pyattr_get_pitch, pyattr_set_pitch),
- KX_PYATTRIBUTE_RW_FUNCTION("rollOffFactor", KX_SoundActuator, pyattr_get_rollOffFactor, pyattr_set_rollOffFactor),
KX_PYATTRIBUTE_ENUM_RW("mode",KX_SoundActuator::KX_SOUNDACT_NODEF+1,KX_SoundActuator::KX_SOUNDACT_MAX-1,false,KX_SoundActuator,m_type),
{ NULL } //Sentinel
};
@@ -327,7 +299,7 @@ KX_PYMETHODDEF_DOC_NOARGS(KX_SoundActuator, startSound,
case AUD_STATUS_PLAYING:
break;
case AUD_STATUS_PAUSED:
- AUD_resume(m_handle);
+ ;//AUD_resume(m_handle);
break;
default:
play();
@@ -339,7 +311,7 @@ KX_PYMETHODDEF_DOC_NOARGS(KX_SoundActuator, pauseSound,
"pauseSound()\n"
"\tPauses the sound.\n")
{
- AUD_pause(m_handle);
+ ;//AUD_pause(m_handle);
Py_RETURN_NONE;
}
@@ -347,7 +319,7 @@ KX_PYMETHODDEF_DOC_NOARGS(KX_SoundActuator, stopSound,
"stopSound()\n"
"\tStops the sound.\n")
{
- AUD_stop(m_handle);
+ ;//AUD_(m_handle);
Py_RETURN_NONE;
}
@@ -358,28 +330,28 @@ PyObject* KX_SoundActuator::pyattr_get_3d_property(void *self, const struct KX_P
const char* prop = attrdef->m_name;
float result_value = 0.0;
- if(!strcmp(prop, "maxGain3D")) {
+ if(!strcmp(prop, "volume_maximum")) {
result_value = actuator->m_3d.max_gain;
- } else if (!strcmp(prop, "minGain3D")) {
+ } else if (!strcmp(prop, "volume_minimum")) {
result_value = actuator->m_3d.min_gain;
- } else if (!strcmp(prop, "referenceDistance3D")) {
+ } else if (!strcmp(prop, "distance_reference")) {
result_value = actuator->m_3d.reference_distance;
- } else if (!strcmp(prop, "maxDistance3D")) {
+ } else if (!strcmp(prop, "distance_maximum")) {
result_value = actuator->m_3d.max_distance;
- } else if (!strcmp(prop, "rolloffFactor3D")) {
+ } else if (!strcmp(prop, "attenuation")) {
result_value = actuator->m_3d.rolloff_factor;
- } else if (!strcmp(prop, "coneInnerAngle3D")) {
+ } else if (!strcmp(prop, "cone_angle_inner")) {
result_value = actuator->m_3d.cone_inner_angle;
- } else if (!strcmp(prop, "coneOuterAngle3D")) {
+ } else if (!strcmp(prop, "cone_angle_outer")) {
result_value = actuator->m_3d.cone_outer_angle;
- } else if (!strcmp(prop, "coneOuterGain3D")) {
+ } else if (!strcmp(prop, "cone_volume_outer")) {
result_value = actuator->m_3d.cone_outer_gain;
} else {
@@ -423,66 +395,63 @@ PyObject* KX_SoundActuator::pyattr_get_pitch(void *self, const struct KX_PYATTRI
return result;
}
-PyObject* KX_SoundActuator::pyattr_get_rollOffFactor(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
-{
- KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self);
- float rollofffactor = actuator->m_3d.rolloff_factor;
- PyObject* result = PyFloat_FromDouble(rollofffactor);
-
- return result;
-}
-
int KX_SoundActuator::pyattr_set_3d_property(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
{
KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self);
const char* prop = attrdef->m_name;
float prop_value = 0.0;
- AUD_3DSourceSetting setting = AUD_3DSS_NONE;
if (!PyArg_Parse(value, "f", &prop_value))
return PY_SET_ATTR_FAIL;
- // update the internal value
- if(!strcmp(prop, "maxGain3D")) {
+ // if sound is working and 3D, set the new setting
+ if(!actuator->m_is3d)
+ return PY_SET_ATTR_FAIL;
+
+ if(!strcmp(prop, "volume_maximum")) {
actuator->m_3d.max_gain = prop_value;
- setting = AUD_3DSS_MAX_GAIN;
+ if(actuator->m_handle)
+ ;//AUD_setVolumeMaximum(actuator->m_handle, prop_value);
- } else if (!strcmp(prop, "minGain3D")) {
+ } else if (!strcmp(prop, "volume_minimum")) {
actuator->m_3d.min_gain = prop_value;
- setting = AUD_3DSS_MIN_GAIN;
+ if(actuator->m_handle)
+ ;//AUD_setVolumeMinimum(actuator->m_handle, prop_value);
- } else if (!strcmp(prop, "referenceDistance3D")) {
+ } else if (!strcmp(prop, "distance_reference")) {
actuator->m_3d.reference_distance = prop_value;
- setting = AUD_3DSS_REFERENCE_DISTANCE;
+ if(actuator->m_handle)
+ ;//AUD_setDistanceReference(actuator->m_handle, prop_value);
- } else if (!strcmp(prop, "maxDistance3D")) {
+ } else if (!strcmp(prop, "distance_maximum")) {
actuator->m_3d.max_distance = prop_value;
- setting = AUD_3DSS_MAX_DISTANCE;
+ if(actuator->m_handle)
+ ;//AUD_setDistanceMaximum(actuator->m_handle, prop_value);
- } else if (!strcmp(prop, "rolloffFactor3D")) {
+ } else if (!strcmp(prop, "attenuation")) {
actuator->m_3d.rolloff_factor = prop_value;
- setting = AUD_3DSS_ROLLOFF_FACTOR;
+ if(actuator->m_handle)
+ ;//AUD_setAttenuation(actuator->m_handle, prop_value);
- } else if (!!strcmp(prop, "coneInnerAngle3D")) {
+ } else if (!!strcmp(prop, "cone_angle_inner")) {
actuator->m_3d.cone_inner_angle = prop_value;
- setting = AUD_3DSS_CONE_INNER_ANGLE;
+ if(actuator->m_handle)
+ ;//AUD_setConeAngleInner(actuator->m_handle, prop_value);
- } else if (!strcmp(prop, "coneOuterAngle3D")) {
+ } else if (!strcmp(prop, "cone_angle_outer")) {
actuator->m_3d.cone_outer_angle = prop_value;
- setting = AUD_3DSS_CONE_OUTER_ANGLE;
+ if(actuator->m_handle)
+ ;//AUD_setConeAngleOuter(actuator->m_handle, prop_value);
- } else if (!strcmp(prop, "coneOuterGain3D")) {
+ } else if (!strcmp(prop, "cone_volume_outer")) {
actuator->m_3d.cone_outer_gain = prop_value;
- setting = AUD_3DSS_CONE_OUTER_GAIN;
+ if(actuator->m_handle)
+ ;//AUD_setConeVolumeOuter(actuator->m_handle, prop_value);
} else {
return PY_SET_ATTR_FAIL;
- }
+ }
- // if sound is working and 3D, set the new setting
- if(actuator->m_handle && actuator->m_is3d && setting != AUD_3DSS_NONE)
- AUD_set3DSourceSetting(actuator->m_handle, setting, prop_value);
-
return PY_SET_ATTR_SUCCESS;
}
@@ -495,7 +464,7 @@ int KX_SoundActuator::pyattr_set_audposition(void *self, const struct KX_PYATTRI
return PY_SET_ATTR_FAIL;
if(actuator->m_handle)
- AUD_seek(actuator->m_handle, position);
+ ;//AUD_seek(actuator->m_handle, position);
return PY_SET_ATTR_SUCCESS;
}
@@ -508,7 +477,7 @@ int KX_SoundActuator::pyattr_set_gain(void *self, const struct KX_PYATTRIBUTE_DE
actuator->m_volume = gain;
if(actuator->m_handle)
- AUD_setSoundVolume(actuator->m_handle, gain);
+ ;//AUD_setSoundVolume(actuator->m_handle, gain);
return PY_SET_ATTR_SUCCESS;
}
@@ -522,21 +491,7 @@ int KX_SoundActuator::pyattr_set_pitch(void *self, const struct KX_PYATTRIBUTE_D
actuator->m_pitch = pitch;
if(actuator->m_handle)
- AUD_setSoundPitch(actuator->m_handle, pitch);
-
- return PY_SET_ATTR_SUCCESS;
-}
-
-int KX_SoundActuator::pyattr_set_rollOffFactor(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
-{
- KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self);
- float rollofffactor = 1.0;
- if (!PyArg_Parse(value, "f", &rollofffactor))
- return PY_SET_ATTR_FAIL;
-
- actuator->m_3d.rolloff_factor = rollofffactor;
- if(actuator->m_handle)
- AUD_set3DSourceSetting(actuator->m_handle, AUD_3DSS_ROLLOFF_FACTOR, rollofffactor);
+ ;//AUD_setSoundPitch(actuator->m_handle, pitch);
return PY_SET_ATTR_SUCCESS;
}
diff --git a/source/gameengine/Ketsji/KX_SoundActuator.h b/source/gameengine/Ketsji/KX_SoundActuator.h
index 1eaea276191..c15fc9d4861 100644
--- a/source/gameengine/Ketsji/KX_SoundActuator.h
+++ b/source/gameengine/Ketsji/KX_SoundActuator.h
@@ -58,7 +58,7 @@ class KX_SoundActuator : public SCA_IActuator
float m_pitch;
bool m_is3d;
KX_3DSoundSettings m_3d;
- AUD_Handle* m_handle;
+ void* m_handle;
void play();
@@ -107,14 +107,12 @@ public:
static int pyattr_set_audposition(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
static int pyattr_set_gain(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
static int pyattr_set_pitch(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
- static int pyattr_set_rollOffFactor(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
static int pyattr_set_type(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
static PyObject* pyattr_get_3d_property(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
static PyObject* pyattr_get_audposition(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
static PyObject* pyattr_get_gain(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
static PyObject* pyattr_get_pitch(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
- static PyObject* pyattr_get_rollOffFactor(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
static PyObject* pyattr_get_type(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
#endif // DISABLE_PYTHON
diff --git a/source/gameengine/Ketsji/KX_VertexProxy.cpp b/source/gameengine/Ketsji/KX_VertexProxy.cpp
index 652bf5eafed..09630ad2851 100644
--- a/source/gameengine/Ketsji/KX_VertexProxy.cpp
+++ b/source/gameengine/Ketsji/KX_VertexProxy.cpp
@@ -73,247 +73,359 @@ PyMethodDef KX_VertexProxy::Methods[] = {
};
PyAttributeDef KX_VertexProxy::Attributes[] = {
- //KX_PYATTRIBUTE_TODO("DummyProps"),
+ KX_PYATTRIBUTE_RW_FUNCTION("x", KX_VertexProxy, pyattr_get_x, pyattr_set_x),
+ KX_PYATTRIBUTE_RW_FUNCTION("y", KX_VertexProxy, pyattr_get_y, pyattr_set_y),
+ KX_PYATTRIBUTE_RW_FUNCTION("z", KX_VertexProxy, pyattr_get_z, pyattr_set_z),
- KX_PYATTRIBUTE_DUMMY("x"),
- KX_PYATTRIBUTE_DUMMY("y"),
- KX_PYATTRIBUTE_DUMMY("z"),
+ KX_PYATTRIBUTE_RW_FUNCTION("r", KX_VertexProxy, pyattr_get_r, pyattr_set_r),
+ KX_PYATTRIBUTE_RW_FUNCTION("g", KX_VertexProxy, pyattr_get_g, pyattr_set_g),
+ KX_PYATTRIBUTE_RW_FUNCTION("b", KX_VertexProxy, pyattr_get_b, pyattr_set_b),
+ KX_PYATTRIBUTE_RW_FUNCTION("a", KX_VertexProxy, pyattr_get_a, pyattr_set_a),
- KX_PYATTRIBUTE_DUMMY("r"),
- KX_PYATTRIBUTE_DUMMY("g"),
- KX_PYATTRIBUTE_DUMMY("b"),
- KX_PYATTRIBUTE_DUMMY("a"),
+ KX_PYATTRIBUTE_RW_FUNCTION("u", KX_VertexProxy, pyattr_get_u, pyattr_set_u),
+ KX_PYATTRIBUTE_RW_FUNCTION("v", KX_VertexProxy, pyattr_get_v, pyattr_set_v),
- KX_PYATTRIBUTE_DUMMY("u"),
- KX_PYATTRIBUTE_DUMMY("v"),
+ KX_PYATTRIBUTE_RW_FUNCTION("u2", KX_VertexProxy, pyattr_get_u2, pyattr_set_u2),
+ KX_PYATTRIBUTE_RW_FUNCTION("v2", KX_VertexProxy, pyattr_get_v2, pyattr_set_v2),
- KX_PYATTRIBUTE_DUMMY("u2"),
- KX_PYATTRIBUTE_DUMMY("v2"),
+ KX_PYATTRIBUTE_RW_FUNCTION("XYZ", KX_VertexProxy, pyattr_get_XYZ, pyattr_set_XYZ),
+ KX_PYATTRIBUTE_RW_FUNCTION("UV", KX_VertexProxy, pyattr_get_UV, pyattr_set_UV),
- KX_PYATTRIBUTE_DUMMY("XYZ"),
- KX_PYATTRIBUTE_DUMMY("UV"),
-
- KX_PYATTRIBUTE_DUMMY("color"),
- KX_PYATTRIBUTE_DUMMY("colour"),
-
- KX_PYATTRIBUTE_DUMMY("normal"),
+ KX_PYATTRIBUTE_RW_FUNCTION("color", KX_VertexProxy, pyattr_get_color, pyattr_set_color),
+ KX_PYATTRIBUTE_RW_FUNCTION("normal", KX_VertexProxy, pyattr_get_normal, pyattr_set_normal),
{ NULL } //Sentinel
};
-#if 0
-PyObject*
-KX_VertexProxy::py_getattro(PyObject *attr)
-{
- char *attr_str= _PyUnicode_AsString(attr);
- if (attr_str[1]=='\0') { // Group single letters
- // pos
- if (attr_str[0]=='x')
- return PyFloat_FromDouble(m_vertex->getXYZ()[0]);
- if (attr_str[0]=='y')
- return PyFloat_FromDouble(m_vertex->getXYZ()[1]);
- if (attr_str[0]=='z')
- return PyFloat_FromDouble(m_vertex->getXYZ()[2]);
-
- // Col
- if (attr_str[0]=='r')
- return PyFloat_FromDouble(m_vertex->getRGBA()[0]/255.0);
- if (attr_str[0]=='g')
- return PyFloat_FromDouble(m_vertex->getRGBA()[1]/255.0);
- if (attr_str[0]=='b')
- return PyFloat_FromDouble(m_vertex->getRGBA()[2]/255.0);
- if (attr_str[0]=='a')
- return PyFloat_FromDouble(m_vertex->getRGBA()[3]/255.0);
-
- // UV
- if (attr_str[0]=='u')
- return PyFloat_FromDouble(m_vertex->getUV1()[0]);
- if (attr_str[0]=='v')
- return PyFloat_FromDouble(m_vertex->getUV1()[1]);
- }
-
-
- if (!strcmp(attr_str, "XYZ"))
- return PyObjectFrom(MT_Vector3(m_vertex->getXYZ()));
-
- if (!strcmp(attr_str, "UV"))
- return PyObjectFrom(MT_Point2(m_vertex->getUV1()));
-
- if (!strcmp(attr_str, "color") || !strcmp(attr_str, "colour"))
- {
- const unsigned char *colp = m_vertex->getRGBA();
- MT_Vector4 color(colp[0], colp[1], colp[2], colp[3]);
- color /= 255.0;
- return PyObjectFrom(color);
- }
+PyObject* KX_VertexProxy::pyattr_get_x(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ return PyFloat_FromDouble(self->m_vertex->getXYZ()[0]);
+}
- if (!strcmp(attr_str, "normal"))
- {
- return PyObjectFrom(MT_Vector3(m_vertex->getNormal()));
- }
+PyObject* KX_VertexProxy::pyattr_get_y(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ return PyFloat_FromDouble(self->m_vertex->getXYZ()[1]);
+}
- py_getattro_up(CValue);
+PyObject* KX_VertexProxy::pyattr_get_z(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ return PyFloat_FromDouble(self->m_vertex->getXYZ()[2]);
}
-#endif
+PyObject* KX_VertexProxy::pyattr_get_r(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ return PyFloat_FromDouble(self->m_vertex->getRGBA()[0]/255.0);
+}
-#if 0
-int KX_VertexProxy::py_setattro(PyObject *attr, PyObject *pyvalue)
+PyObject* KX_VertexProxy::pyattr_get_g(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
{
- char *attr_str= _PyUnicode_AsString(attr);
- if (PySequence_Check(pyvalue))
- {
- if (!strcmp(attr_str, "XYZ"))
- {
- MT_Point3 vec;
- if (PyVecTo(pyvalue, vec))
- {
- m_vertex->SetXYZ(vec);
- m_mesh->SetMeshModified(true);
- return PY_SET_ATTR_SUCCESS;
- }
- return PY_SET_ATTR_FAIL;
- }
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ return PyFloat_FromDouble(self->m_vertex->getRGBA()[1]/255.0);
+}
- if (!strcmp(attr_str, "UV"))
- {
- MT_Point2 vec;
- if (PyVecTo(pyvalue, vec))
- {
- m_vertex->SetUV(vec);
- m_mesh->SetMeshModified(true);
- return PY_SET_ATTR_SUCCESS;
- }
- return PY_SET_ATTR_FAIL;
- }
+PyObject* KX_VertexProxy::pyattr_get_b(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ return PyFloat_FromDouble(self->m_vertex->getRGBA()[2]/255.0);
+}
- if (!strcmp(attr_str, "color") || !strcmp(attr_str, "colour"))
- {
- MT_Vector4 vec;
- if (PyVecTo(pyvalue, vec))
- {
- m_vertex->SetRGBA(vec);
- m_mesh->SetMeshModified(true);
- return PY_SET_ATTR_SUCCESS;
- }
- return PY_SET_ATTR_FAIL;
- }
+PyObject* KX_VertexProxy::pyattr_get_a(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ return PyFloat_FromDouble(self->m_vertex->getRGBA()[3]/255.0);
+}
- if (!strcmp(attr_str, "normal"))
- {
- MT_Vector3 vec;
- if (PyVecTo(pyvalue, vec))
- {
- m_vertex->SetNormal(vec);
- m_mesh->SetMeshModified(true);
- return PY_SET_ATTR_SUCCESS;
- }
- return PY_SET_ATTR_FAIL;
- }
- }
-
- if (PyFloat_Check(pyvalue))
- {
- float val = PyFloat_AsDouble(pyvalue);
- // pos
- MT_Point3 pos(m_vertex->getXYZ());
- if (!strcmp(attr_str, "x"))
+PyObject* KX_VertexProxy::pyattr_get_u(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ return PyFloat_FromDouble(self->m_vertex->getUV1()[0]);
+}
+
+PyObject* KX_VertexProxy::pyattr_get_v(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ return PyFloat_FromDouble(self->m_vertex->getUV1()[1]);
+}
+
+PyObject* KX_VertexProxy::pyattr_get_u2(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ return PyFloat_FromDouble(self->m_vertex->getUV2()[0]);
+}
+
+PyObject* KX_VertexProxy::pyattr_get_v2(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ return PyFloat_FromDouble(self->m_vertex->getUV2()[1]);
+}
+
+PyObject* KX_VertexProxy::pyattr_get_XYZ(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ return PyObjectFrom(MT_Vector3(self->m_vertex->getXYZ()));
+}
+
+PyObject* KX_VertexProxy::pyattr_get_UV(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ return PyObjectFrom(MT_Point2(self->m_vertex->getUV1()));
+}
+
+PyObject* KX_VertexProxy::pyattr_get_color(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ const unsigned char *colp = self->m_vertex->getRGBA();
+ MT_Vector4 color(colp[0], colp[1], colp[2], colp[3]);
+ color /= 255.0;
+ return PyObjectFrom(color);
+}
+
+PyObject* KX_VertexProxy::pyattr_get_normal(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ return PyObjectFrom(MT_Vector3(self->m_vertex->getNormal()));
+}
+
+int KX_VertexProxy::pyattr_set_x(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PyFloat_Check(value))
{
+ float val = PyFloat_AsDouble(value);
+ MT_Point3 pos(self->m_vertex->getXYZ());
pos.x() = val;
- m_vertex->SetXYZ(pos);
- m_mesh->SetMeshModified(true);
+ self->m_vertex->SetXYZ(pos);
+ self->m_mesh->SetMeshModified(true);
return PY_SET_ATTR_SUCCESS;
}
+ return PY_SET_ATTR_FAIL;
+}
- if (!strcmp(attr_str, "y"))
+int KX_VertexProxy::pyattr_set_y(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PyFloat_Check(value))
{
+ float val = PyFloat_AsDouble(value);
+ MT_Point3 pos(self->m_vertex->getXYZ());
pos.y() = val;
- m_vertex->SetXYZ(pos);
- m_mesh->SetMeshModified(true);
+ self->m_vertex->SetXYZ(pos);
+ self->m_mesh->SetMeshModified(true);
return PY_SET_ATTR_SUCCESS;
}
+ return PY_SET_ATTR_FAIL;
+}
- if (!strcmp(attr_str, "z"))
+int KX_VertexProxy::pyattr_set_z(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PyFloat_Check(value))
{
+ float val = PyFloat_AsDouble(value);
+ MT_Point3 pos(self->m_vertex->getXYZ());
pos.z() = val;
- m_vertex->SetXYZ(pos);
- m_mesh->SetMeshModified(true);
+ self->m_vertex->SetXYZ(pos);
+ self->m_mesh->SetMeshModified(true);
return PY_SET_ATTR_SUCCESS;
}
+ return PY_SET_ATTR_FAIL;
+}
- // uv
- MT_Point2 uv = m_vertex->getUV1();
- if (!strcmp(attr_str, "u"))
+int KX_VertexProxy::pyattr_set_u(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PyFloat_Check(value))
{
+ float val = PyFloat_AsDouble(value);
+ MT_Point2 uv = self->m_vertex->getUV1();
uv[0] = val;
- m_vertex->SetUV(uv);
- m_mesh->SetMeshModified(true);
+ self->m_vertex->SetUV(uv);
+ self->m_mesh->SetMeshModified(true);
return PY_SET_ATTR_SUCCESS;
}
+ return PY_SET_ATTR_FAIL;
+}
- if (!strcmp(attr_str, "v"))
+int KX_VertexProxy::pyattr_set_v(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PyFloat_Check(value))
{
+ float val = PyFloat_AsDouble(value);
+ MT_Point2 uv = self->m_vertex->getUV1();
uv[1] = val;
- m_vertex->SetUV(uv);
- m_mesh->SetMeshModified(true);
+ self->m_vertex->SetUV(uv);
+ self->m_mesh->SetMeshModified(true);
return PY_SET_ATTR_SUCCESS;
}
+ return PY_SET_ATTR_FAIL;
+}
- // uv
- MT_Point2 uv2 = m_vertex->getUV2();
- if (!strcmp(attr_str, "u2"))
+int KX_VertexProxy::pyattr_set_u2(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PyFloat_Check(value))
{
+ float val = PyFloat_AsDouble(value);
+ MT_Point2 uv = self->m_vertex->getUV2();
uv[0] = val;
- m_vertex->SetUV2(uv);
- m_mesh->SetMeshModified(true);
- return 0;
+ self->m_vertex->SetUV2(uv);
+ self->m_mesh->SetMeshModified(true);
+ return PY_SET_ATTR_SUCCESS;
}
+ return PY_SET_ATTR_FAIL;
+}
- if (!strcmp(attr_str, "v2"))
+int KX_VertexProxy::pyattr_set_v2(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PyFloat_Check(value))
{
+ float val = PyFloat_AsDouble(value);
+ MT_Point2 uv = self->m_vertex->getUV2();
uv[1] = val;
- m_vertex->SetUV2(uv);
- m_mesh->SetMeshModified(true);
+ self->m_vertex->SetUV2(uv);
+ self->m_mesh->SetMeshModified(true);
return PY_SET_ATTR_SUCCESS;
}
+ return PY_SET_ATTR_FAIL;
+}
- // col
- unsigned int icol = *((const unsigned int *)m_vertex->getRGBA());
- unsigned char *cp = (unsigned char*) &icol;
- val *= 255.0;
- if (!strcmp(attr_str, "r"))
+int KX_VertexProxy::pyattr_set_r(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PyFloat_Check(value))
{
+ float val = PyFloat_AsDouble(value);
+ unsigned int icol = *((const unsigned int *)self->m_vertex->getRGBA());
+ unsigned char *cp = (unsigned char*) &icol;
+ val *= 255.0;
cp[0] = (unsigned char) val;
- m_vertex->SetRGBA(icol);
- m_mesh->SetMeshModified(true);
+ self->m_vertex->SetRGBA(icol);
+ self->m_mesh->SetMeshModified(true);
return PY_SET_ATTR_SUCCESS;
}
- if (!strcmp(attr_str, "g"))
+ return PY_SET_ATTR_FAIL;
+}
+
+int KX_VertexProxy::pyattr_set_g(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PyFloat_Check(value))
{
+ float val = PyFloat_AsDouble(value);
+ unsigned int icol = *((const unsigned int *)self->m_vertex->getRGBA());
+ unsigned char *cp = (unsigned char*) &icol;
+ val *= 255.0;
cp[1] = (unsigned char) val;
- m_vertex->SetRGBA(icol);
- m_mesh->SetMeshModified(true);
+ self->m_vertex->SetRGBA(icol);
+ self->m_mesh->SetMeshModified(true);
return PY_SET_ATTR_SUCCESS;
}
- if (!strcmp(attr_str, "b"))
+ return PY_SET_ATTR_FAIL;
+}
+
+int KX_VertexProxy::pyattr_set_b(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PyFloat_Check(value))
{
+ float val = PyFloat_AsDouble(value);
+ unsigned int icol = *((const unsigned int *)self->m_vertex->getRGBA());
+ unsigned char *cp = (unsigned char*) &icol;
+ val *= 255.0;
cp[2] = (unsigned char) val;
- m_vertex->SetRGBA(icol);
- m_mesh->SetMeshModified(true);
+ self->m_vertex->SetRGBA(icol);
+ self->m_mesh->SetMeshModified(true);
return PY_SET_ATTR_SUCCESS;
}
- if (!strcmp(attr_str, "a"))
+ return PY_SET_ATTR_FAIL;
+}
+
+int KX_VertexProxy::pyattr_set_a(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PyFloat_Check(value))
{
+ float val = PyFloat_AsDouble(value);
+ unsigned int icol = *((const unsigned int *)self->m_vertex->getRGBA());
+ unsigned char *cp = (unsigned char*) &icol;
+ val *= 255.0;
cp[3] = (unsigned char) val;
- m_vertex->SetRGBA(icol);
- m_mesh->SetMeshModified(true);
+ self->m_vertex->SetRGBA(icol);
+ self->m_mesh->SetMeshModified(true);
return PY_SET_ATTR_SUCCESS;
}
- }
+ return PY_SET_ATTR_FAIL;
+}
- return CValue::py_setattro(attr, pyvalue);
+int KX_VertexProxy::pyattr_set_XYZ(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PySequence_Check(value))
+ {
+ MT_Point3 vec;
+ if (PyVecTo(value, vec))
+ {
+ self->m_vertex->SetXYZ(vec);
+ self->m_mesh->SetMeshModified(true);
+ return PY_SET_ATTR_SUCCESS;
+ }
+ }
+ return PY_SET_ATTR_FAIL;
+}
+
+int KX_VertexProxy::pyattr_set_UV(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PySequence_Check(value))
+ {
+ MT_Point2 vec;
+ if (PyVecTo(value, vec))
+ {
+ self->m_vertex->SetUV(vec);
+ self->m_mesh->SetMeshModified(true);
+ return PY_SET_ATTR_SUCCESS;
+ }
+ }
+ return PY_SET_ATTR_FAIL;
+}
+
+int KX_VertexProxy::pyattr_set_color(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PySequence_Check(value))
+ {
+ MT_Vector4 vec;
+ if (PyVecTo(value, vec))
+ {
+ self->m_vertex->SetRGBA(vec);
+ self->m_mesh->SetMeshModified(true);
+ return PY_SET_ATTR_SUCCESS;
+ }
+ }
+ return PY_SET_ATTR_FAIL;
+}
+
+int KX_VertexProxy::pyattr_set_normal(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PySequence_Check(value))
+ {
+ MT_Vector3 vec;
+ if (PyVecTo(value, vec))
+ {
+ self->m_vertex->SetNormal(vec);
+ self->m_mesh->SetMeshModified(true);
+ return PY_SET_ATTR_SUCCESS;
+ }
+ }
+ return PY_SET_ATTR_FAIL;
}
-#endif
KX_VertexProxy::KX_VertexProxy(KX_MeshProxy*mesh, RAS_TexVert* vertex)
: m_vertex(vertex),
diff --git a/source/gameengine/Ketsji/KX_VertexProxy.h b/source/gameengine/Ketsji/KX_VertexProxy.h
index 08fe0e7e2f8..b39d3ecb7d4 100644
--- a/source/gameengine/Ketsji/KX_VertexProxy.h
+++ b/source/gameengine/Ketsji/KX_VertexProxy.h
@@ -56,6 +56,37 @@ public:
// stuff for python integration
+ static PyObject* pyattr_get_x(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_y(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_z(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_r(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_g(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_b(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_a(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_u(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_v(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_u2(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_v2(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_XYZ(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_UV(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_color(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_normal(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_x(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_y(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_z(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_u(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_v(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_u2(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_v2(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_r(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_g(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_b(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_a(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_XYZ(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_UV(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_color(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_normal(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+
KX_PYMETHOD_NOARGS(KX_VertexProxy,GetXYZ);
KX_PYMETHOD_O(KX_VertexProxy,SetXYZ);
KX_PYMETHOD_NOARGS(KX_VertexProxy,GetUV);
diff --git a/source/gameengine/Ketsji/Makefile b/source/gameengine/Ketsji/Makefile
index 4ecd23fc1a2..79c8626d295 100644
--- a/source/gameengine/Ketsji/Makefile
+++ b/source/gameengine/Ketsji/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
@@ -65,6 +65,10 @@ CPPFLAGS += -I../../blender/imbuf
CPPFLAGS += -I../../blender/gpu
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
+ifeq ($(WITH_FFMPEG), true)
+ CPPFLAGS += -DWITH_FFMPEG
+endif
+
###########################
SOURCEDIR = source/gameengine/Ketsji
diff --git a/source/gameengine/Makefile b/source/gameengine/Makefile
index bcb4b9098e7..0fdac2acce2 100644
--- a/source/gameengine/Makefile
+++ b/source/gameengine/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/Network/CMakeLists.txt b/source/gameengine/Network/CMakeLists.txt
index 2478715e0ab..795e63b47c3 100644
--- a/source/gameengine/Network/CMakeLists.txt
+++ b/source/gameengine/Network/CMakeLists.txt
@@ -34,4 +34,3 @@ SET(INC
)
BLENDERLIB(bf_ngnetwork "${SRC}" "${INC}")
-#env.BlenderLib ( 'bf_ngnetwork', sources, Split(incs), [], libtype=['game2', 'player'], priority=[15, 160] )
diff --git a/source/gameengine/Network/LoopBackNetwork/CMakeLists.txt b/source/gameengine/Network/LoopBackNetwork/CMakeLists.txt
index 6b43a1561a1..e7c34f5a2a0 100644
--- a/source/gameengine/Network/LoopBackNetwork/CMakeLists.txt
+++ b/source/gameengine/Network/LoopBackNetwork/CMakeLists.txt
@@ -34,4 +34,3 @@ SET(INC
)
BLENDERLIB(bf_loopbacknetwork "${SRC}" "${INC}")
-#env.BlenderLib ( 'bf_loopbacknetwork', Split(sources), Split(incs), defines=[],libtype=['game2', 'player'], priority=[25, 165] )
diff --git a/source/gameengine/Network/LoopBackNetwork/Makefile b/source/gameengine/Network/LoopBackNetwork/Makefile
index 690fd644094..236c28b0f23 100644
--- a/source/gameengine/Network/LoopBackNetwork/Makefile
+++ b/source/gameengine/Network/LoopBackNetwork/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/Network/Makefile b/source/gameengine/Network/Makefile
index c6b22276113..99a047c8b95 100644
--- a/source/gameengine/Network/Makefile
+++ b/source/gameengine/Network/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/Network/NG_NetworkScene.cpp b/source/gameengine/Network/NG_NetworkScene.cpp
index 355ebe5c475..976ce0d367e 100644
--- a/source/gameengine/Network/NG_NetworkScene.cpp
+++ b/source/gameengine/Network/NG_NetworkScene.cpp
@@ -187,7 +187,7 @@ vector<NG_NetworkMessage*> NG_NetworkScene::FindMessages(
if (!notfound)
notfound = (subject.IsEmpty() ? notfound : m_messagesBySubject[subject] == NULL);
if (notfound) {
- // it's definately NOT in the scene, so stop looking
+ // it's definitely NOT in the scene, so stop looking
} else { // narrow phase
// possibly it's there, but maybe not (false hit)
if (to.IsEmpty()) {
diff --git a/source/gameengine/Network/TerraplayNetwork/Makefile b/source/gameengine/Network/TerraplayNetwork/Makefile
index d987263d433..d5a4c86740b 100644
--- a/source/gameengine/Network/TerraplayNetwork/Makefile
+++ b/source/gameengine/Network/TerraplayNetwork/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/Physics/Bullet/CMakeLists.txt b/source/gameengine/Physics/Bullet/CMakeLists.txt
index 11a535b35c8..95888967b78 100644
--- a/source/gameengine/Physics/Bullet/CMakeLists.txt
+++ b/source/gameengine/Physics/Bullet/CMakeLists.txt
@@ -47,4 +47,3 @@ SET(INC
)
BLENDERLIB(bf_bullet "${SRC}" "${INC}")
-#env.BlenderLib ( 'bf_bullet', Split(sources), Split(incs), [], libtype=['game','player'], priority=[15,90] )
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
index a7412a9631a..dc8d31936ec 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
@@ -507,7 +507,7 @@ bool CcdPhysicsController::DeleteControllerShape( )
bool CcdPhysicsController::ReplaceControllerShape(btCollisionShape *newShape)
{
- /* Note, deleting the previous collision shape must be done alredy */
+ /* Note, deleting the previous collision shape must be done already */
/* if (m_collisionShape) DeleteControllerShape(); */
m_object->setCollisionShape(newShape);
diff --git a/source/gameengine/Physics/Bullet/Makefile b/source/gameengine/Physics/Bullet/Makefile
index 433d1df3d2f..0514565534d 100644
--- a/source/gameengine/Physics/Bullet/Makefile
+++ b/source/gameengine/Physics/Bullet/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/Physics/Dummy/CMakeLists.txt b/source/gameengine/Physics/Dummy/CMakeLists.txt
index cb7a467dde9..18330392cd7 100644
--- a/source/gameengine/Physics/Dummy/CMakeLists.txt
+++ b/source/gameengine/Physics/Dummy/CMakeLists.txt
@@ -32,4 +32,3 @@ SET(INC
)
BLENDERLIB(bf_dummy "${SRC}" "${INC}")
-#env.BlenderLib ( 'bf_dummy', Split(sources), Split(incs), [], libtype=['game','player'], priority=[10,100] )
diff --git a/source/gameengine/Physics/Dummy/Makefile b/source/gameengine/Physics/Dummy/Makefile
index 0e36266ae09..9a600a0365f 100644
--- a/source/gameengine/Physics/Dummy/Makefile
+++ b/source/gameengine/Physics/Dummy/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/Physics/Makefile b/source/gameengine/Physics/Makefile
index da0d4cafd2e..f5f914c2ac2 100644
--- a/source/gameengine/Physics/Makefile
+++ b/source/gameengine/Physics/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/Physics/common/CMakeLists.txt b/source/gameengine/Physics/common/CMakeLists.txt
index 3618725c2bf..0f8f59f3b78 100644
--- a/source/gameengine/Physics/common/CMakeLists.txt
+++ b/source/gameengine/Physics/common/CMakeLists.txt
@@ -33,4 +33,3 @@ SET(INC
)
BLENDERLIB(bf_common "${SRC}" "${INC}")
-#env.BlenderLib ( 'bf_common', Split(sources), Split(incs), [], libtype=['game', 'game2','player'], priority=[20, 35, 95] )
diff --git a/source/gameengine/Physics/common/Makefile b/source/gameengine/Physics/common/Makefile
index f87da383520..369699e1b90 100644
--- a/source/gameengine/Physics/common/Makefile
+++ b/source/gameengine/Physics/common/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/PyDoc/SConscript b/source/gameengine/PyDoc/SConscript
deleted file mode 100644
index dabe004ae6a..00000000000
--- a/source/gameengine/PyDoc/SConscript
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/python
-Import ('env')
-import os
-
-if env['WITH_BF_FHS']:
- BLENDERPATH = os.path.join(env['BF_INSTALLDIR'], 'share', 'blender', env['BF_VERSION'])
-else:
- BLENDERPATH = env['BF_INSTALLDIR']
-
-from optparse import OptionParser
-import epydoc
-from epydoc.docbuilder import build_doc_index
-from epydoc import cli
-names = env.Glob("source/gameengine/PyDoc/*.py")
-docindex = build_doc_index(names)
-optvalues = cli.OPTION_DEFAULTS
-optvalues["verbose"] = 1
-optvalues["quiet"] = 0
-optvalues["include_source_code"] = 0
-optvalues["inheritance"] = "included"
-optvalues["show_private"] = 0
-optvalues["target"] = os.path.join(BLENDERPATH, 'doc')
-optvalues["url"] = "http://www.blender.org"
-optvalues["top"] = "Game Engine API"
-optvalues["name"] = "Blender"
-optvalues["noprivate"] = 1
-optvalues["noframes"] = 1
-optvalues["names"] = names
-optparser = OptionParser()
-optparser.set_defaults(**optvalues)
-(options, args) = optparser.parse_args([])
-print "Writing Game Engine epydocs to \"%s\"" % optvalues["target"]
-cli.write_html(docindex, options)
-
diff --git a/source/gameengine/PyDoc/bge.logic.rst b/source/gameengine/PyDoc/bge.logic.rst
index 84b480e2ab9..a10733569f3 100644
--- a/source/gameengine/PyDoc/bge.logic.rst
+++ b/source/gameengine/PyDoc/bge.logic.rst
@@ -158,6 +158,48 @@ General functions
Saves bge.logic.globalDict to a file.
+.. function:: startGame(blend)
+
+ Loads the blend file.
+
+ :arg blend: The name of the blend file
+ :type blend: string
+
+.. function:: endGame()
+
+ Ends the current game.
+
+.. function:: restartGame()
+
+ Restarts the current game by reloading the .blend file (the last saved version, not what is currently running).
+
+.. function:: LibLoad(blend, type)
+
+ Converts the all of the datablocks of the given type from the given blend.
+
+ :arg blend: The path to the blend file
+ :type blend: string
+ :arg type: The datablock type (currently only "Scene" and "Mesh" are supported)
+ :type type: string
+
+.. function:: LibNew(name, type, data)
+
+ Uses existing datablock data and loads in as a new library.
+
+ :arg name: A unique library name used for removal later
+ :type name: string
+ :arg type: The datablock type (currently only "Mesh" is supported)
+ :type type: string
+ :arg data: A list of names of the datablocks to load
+ :type data: list of strings
+
+.. function:: LibFree(name)
+
+ Frees a library, removing all objects and meshes from the currently active scenes.
+
+ :arg name: The name of the library to free (the name used in LibNew)
+ :type name: string
+
.. function:: addScene(name, overlay=1)
Loads a scene into the game engine.
@@ -202,24 +244,24 @@ General functions
.. function:: getMaxLogicFrame()
- Gets the maximum number of logic frame per render frame.
+ Gets the maximum number of logic frames per render frame.
- :return: The maximum number of logic frame per render frame
+ :return: The maximum number of logic frames per render frame
:rtype: integer
.. function:: setMaxLogicFrame(maxlogic)
- Sets the maximum number of logic frame that are executed per render frame.
+ Sets the maximum number of logic frames that are executed per render frame.
This does not affect the physic system that still runs at full frame rate.
- :arg maxlogic: The new maximum number of logic frame per render frame. Valid values: 1..5
+ :arg maxlogic: The new maximum number of logic frames per render frame. Valid values: 1..5
:type maxlogic: integer
.. function:: getMaxPhysicsFrame()
- Gets the maximum number of physics frame per render frame.
+ Gets the maximum number of physics frames per render frame.
- :return: The maximum number of physics frame per render frame
+ :return: The maximum number of physics frames per render frame
:rtype: integer
.. function:: setMaxPhysicsFrame(maxphysics)
@@ -270,14 +312,6 @@ General functions
.. warning: Not implimented yet
-.. function:: saveGlobalDict()
-
- Saves bge.logic.globalDict to a file.
-
-.. function:: loadGlobalDict()
-
- Loads bge.logic.globalDict from a file.
-
*****************
Utility functions
*****************
diff --git a/source/gameengine/PyDoc/bge.render.rst b/source/gameengine/PyDoc/bge.render.rst
index cea84f3b506..9f17455601b 100644
--- a/source/gameengine/PyDoc/bge.render.rst
+++ b/source/gameengine/PyDoc/bge.render.rst
@@ -230,7 +230,7 @@ Functions
.. function:: enableMotionBlur(factor)
- Enable the motion blue effect.
+ Enable the motion blur effect.
:arg factor: the ammount of motion blur to display.
:type factor: float [0.0 - 1.0]
@@ -238,5 +238,5 @@ Functions
.. function:: disableMotionBlur()
- Disable the motion blue effect.
+ Disable the motion blur effect.
diff --git a/source/gameengine/PyDoc/bge.types.rst b/source/gameengine/PyDoc/bge.types.rst
index e0ace6ad85b..028b4fa72f3 100644
--- a/source/gameengine/PyDoc/bge.types.rst
+++ b/source/gameengine/PyDoc/bge.types.rst
@@ -4927,7 +4927,7 @@ Game Engine bge.types Module
Changing this field has no immediate effect, the pose is updated when the armature is updated during the graphic render (see :data:`BL_ArmatureObject.update`)
- .. attribute:: rotation
+ .. attribute:: rotation_quaternion
rotation of the bone relative to its parent expressed as a quaternion, read-write.
@@ -4941,7 +4941,7 @@ Game Engine bge.types Module
Changing this field has no immediate effect, the pose is updated when the armature is updated during the graphic render (see :data:`BL_ArmatureObject.update`)
- .. attribute:: euler_rotation
+ .. attribute:: rotation_euler
rotation of the bone relative to its parent expressed as a set of euler angles, read-write.
diff --git a/source/gameengine/Rasterizer/CMakeLists.txt b/source/gameengine/Rasterizer/CMakeLists.txt
index 096b1583e3e..d718bf3e507 100644
--- a/source/gameengine/Rasterizer/CMakeLists.txt
+++ b/source/gameengine/Rasterizer/CMakeLists.txt
@@ -43,4 +43,3 @@ SET(INC
ADD_DEFINITIONS(-DGLEW_STATIC)
BLENDERLIB(bf_rasterizer "${SRC}" "${INC}")
-#env.BlenderLib ( 'bf_rasterizer', sources, Split(incs), [], libtype=['game','player'], priority=[35,115], compileflags = cflags )
diff --git a/source/gameengine/Rasterizer/Makefile b/source/gameengine/Rasterizer/Makefile
index c877e423a71..d800a02b181 100644
--- a/source/gameengine/Rasterizer/Makefile
+++ b/source/gameengine/Rasterizer/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/CMakeLists.txt b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/CMakeLists.txt
index 5d6f61ebfa1..cc48952dc20 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/CMakeLists.txt
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/CMakeLists.txt
@@ -44,4 +44,3 @@ SET(INC
ADD_DEFINITIONS(-DGLEW_STATIC)
BLENDERLIB(bf_oglrasterizer "${SRC}" "${INC}")
-#env.BlenderLib ( 'bf_oglrasterizer', Split(sources), Split(incs), [], libtype=['game','player'], priority=[40, 120] )
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/Makefile b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/Makefile
index aedbc2705f0..357bdf9d99b 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/Makefile
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp
index 087b5d052c3..622ba852934 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp
@@ -91,8 +91,8 @@ void RAS_VAOpenGLRasterizer::SetDrawingMode(int drawingmode)
void RAS_VAOpenGLRasterizer::Exit()
{
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_NORMAL_ARRAY);
+ glDisableClientState(GL_VERTEX_ARRAY);
+ glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
diff --git a/source/gameengine/SceneGraph/CMakeLists.txt b/source/gameengine/SceneGraph/CMakeLists.txt
index 3242ec57d94..a73130531c0 100644
--- a/source/gameengine/SceneGraph/CMakeLists.txt
+++ b/source/gameengine/SceneGraph/CMakeLists.txt
@@ -32,4 +32,3 @@ SET(INC
)
BLENDERLIB(bf_scenegraph "${SRC}" "${INC}")
-#env.BlenderLib ( 'bf_scenegraph', sources, Split(incs), [], libtype=['game','player'], priority=[50,130] )
diff --git a/source/gameengine/SceneGraph/Makefile b/source/gameengine/SceneGraph/Makefile
index acec1b729e8..8a797ae5a0e 100644
--- a/source/gameengine/SceneGraph/Makefile
+++ b/source/gameengine/SceneGraph/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/VideoTexture/CMakeLists.txt b/source/gameengine/VideoTexture/CMakeLists.txt
index eaee00753ff..3af514ca0de 100644
--- a/source/gameengine/VideoTexture/CMakeLists.txt
+++ b/source/gameengine/VideoTexture/CMakeLists.txt
@@ -64,4 +64,3 @@ ELSE(WITH_PYTHON)
ENDIF(WITH_PYTHON)
BLENDERLIB(bf_videotex "${SRC}" "${INC}")
-#env.BlenderLib ( 'bf_videotex', sources, Split(incs), [], libtype=['game','player'], priority=[25, 72], compileflags = cflags )
diff --git a/source/gameengine/VideoTexture/Makefile b/source/gameengine/VideoTexture/Makefile
index 1cb147860cd..af3417eef02 100644
--- a/source/gameengine/VideoTexture/Makefile
+++ b/source/gameengine/VideoTexture/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/icons/Makefile b/source/icons/Makefile
index a31ae9a56c7..5832a098592 100644
--- a/source/icons/Makefile
+++ b/source/icons/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/kernel/CMakeLists.txt b/source/kernel/CMakeLists.txt
index 4cf3f7ac7c1..46c5ea89ce5 100644
--- a/source/kernel/CMakeLists.txt
+++ b/source/kernel/CMakeLists.txt
@@ -35,4 +35,3 @@ FILE(GLOB SRC
)
BLENDERLIB(bf_kernel "${SRC}" "${INC}")
-#env.BlenderLib ( 'bf_kernel', Split(sources), Split(incs), [], libtype = ['common','game2', 'player'], priority = [15, 10, 150] )
diff --git a/source/kernel/Makefile b/source/kernel/Makefile
index b71491b46d1..aa0b3dd3bf1 100644
--- a/source/kernel/Makefile
+++ b/source/kernel/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/kernel/gen_messaging/Makefile b/source/kernel/gen_messaging/Makefile
index f94f6f082dd..a1d203bcf18 100644
--- a/source/kernel/gen_messaging/Makefile
+++ b/source/kernel/gen_messaging/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/kernel/gen_messaging/intern/Makefile b/source/kernel/gen_messaging/intern/Makefile
index f88bcd53c6e..7b6b2169540 100644
--- a/source/kernel/gen_messaging/intern/Makefile
+++ b/source/kernel/gen_messaging/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/kernel/gen_system/Makefile b/source/kernel/gen_system/Makefile
index 31535ad2a97..45f491cbeb4 100644
--- a/source/kernel/gen_system/Makefile
+++ b/source/kernel/gen_system/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.